Автор Тема: Project Oberon (New Edition 2013)  (Прочитано 46855 раз)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Project Oberon (New Edition 2013)
« Ответ #45 : Декабрь 17, 2013, 09:52:43 am »
А это исходник из другой книги скопипастен.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Project Oberon (New Edition 2013)
« Ответ #46 : Декабрь 17, 2013, 09:55:45 am »
А это исходник из другой книги скопипастен.
Если скопипасчен, то Виртом -  я его нашел тут: http://www.inf.ethz.ch/personal/wirth/ProjectOberon/Sources/RISC.Mod.txt

Да и заголовок в этом модуле намекает, что это не просто копипаста:

MODULE RISC;     (*NW 22.9.07 / 1.11.2013*)
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Project Oberon (New Edition 2013)
« Ответ #48 : Декабрь 17, 2013, 10:32:09 am »
Гм. Похоже в компьютере Вирта (что в PO 2013 описан) в принципе нет прерываний. Соответственно в операционке прерываний также нет.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Project Oberon (New Edition 2013)
« Ответ #49 : Декабрь 17, 2013, 10:50:37 am »
Не могу найти источник времени в Оберон-компе. Странно.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Project Oberon (New Edition 2013)
« Ответ #50 : Декабрь 17, 2013, 10:57:09 am »
Кстати, судя по комментам, FPGA'шная инкарнация компьютера называется Ceres-4

MODULE Input; (*NW 5.10.86 / 15.11.90 Ceres-2; PDR 21.4.12 / NW 15.5.2013 Ceres-4*)
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Project Oberon (New Edition 2013)
« Ответ #51 : Декабрь 17, 2013, 11:07:42 am »
Еще странности - даже в коде компилятора используется модуль SYSTEM. А ведь компилятор это весьма далекое от железа, высокоуровневое приложение. (скажем компиляторы пишут в том числе на прологе и прочих разных языках которые от железа за километр)
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Project Oberon (New Edition 2013)
« Ответ #52 : Декабрь 17, 2013, 06:11:06 pm »
http://www.inf.ethz.ch/personal/wirth/CompilerConstruction/RISC.Mod.txt
Кстати, присмотрелся к потрохам модуля - это не эмулятор процессора описанного в PO2013. Это более ранняя модель. Инструкций 12 вместо 16ти. Возможно есть и другие отличия.
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Project Oberon (New Edition 2013)
« Ответ #53 : Декабрь 18, 2013, 05:44:59 am »
Похоже что PO2013 можно без проблем компильнуть в Linz Oberon V4

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Project Oberon (New Edition 2013)
« Ответ #54 : Декабрь 20, 2013, 12:09:38 pm »
Похоже что PO2013 можно без проблем компильнуть в Linz Oberon V4
В конфе обсудили - без проблем не удалось. Да вообще пока никак не удалось.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Project Oberon (New Edition 2013)
« Ответ #55 : Декабрь 20, 2013, 06:23:36 pm »
Немного информации о Project Oberon 2013 от Криса (автора Astrobe) из оберонистого списка рассылки:

Цитировать
Yes - it is still a 'work in progress' but the Language Report, CPU
description and Verilog sources are currently on the other pages of Wirth's
website:

http://www.inf.ethz.ch/personal/wirth/

There is also an updated version of Compiler Construction book.

LONGINT is just an alias for INTEGER and the complete CASE statement is on
its way,

A version of Astrobe that supports the FPGA compiler is well underway ...

Regards,
Chris

Chris Burrows
CFB Software
http://www.astrobe.com
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Project Oberon (New Edition 2013)
« Ответ #56 : Декабрь 21, 2013, 05:29:13 pm »
Еще инфа, на этот раз от соавтора:
Цитировать
Hi Oberoners,

As some have already now noticed, Prof. Wirth and I have tidied up and
added some new material to his home page, including a pre-release of a new
version of the Project Oberon book.

The system in the new edition runs on a computer implemented on a
field-programmable gate array (FPGA), removing in particular the
dependency on the defunct NS32032 processor in the original book.  The
version of the Oberon language used to implement the new system in its
entirety is based on Oberon-07, separate material for which is also
already available on Prof. Wirth's site
http://www.inf.ethz.ch/personal/wirth/.

The new Project Oberon documents should not be considered final and will
continue to be updated substantially over the next few months.

Best regards,
Paul Reed
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Project Oberon (New Edition 2013)
« Ответ #57 : Декабрь 21, 2013, 11:41:15 pm »
Гм. А кто-нибудь разобрался почему внезапно появилась инструкция STR вместо STW? (STW/LDW описаны в СС, а STR/LDR в PO, при этом STB и LDB есть и в CC и в PO) И в чем вообще отличие?
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Project Oberon (New Edition 2013)
« Ответ #58 : Декабрь 22, 2013, 02:27:37 pm »
У Вирта довольно забавная манера писать.

Есть инструкции LDR и STR - для загрузки и выгрузки слова из памяти в регистр и обратно. И есть LDB/STB - для байта.

Так вот, в перечне констант для инструкций STR/LDR есть, а STB/LDB нет: https://github.com/ilovb/ProjectOberon2013/blob/master/ORGX.Mod#L17

A когда нужно сгенерировать STB например, он пишет STR+1. Дико, неявно, не безопасно. Зато экономия целых двух констант!
IF x.type.size = 1 THEN op := Str+1 ELSE op := Str END ;

Я когда смотрел на код кодогенератора, прошелся по секции констант и было подумал, что STB там вообще не используется. Залез в детали реализаци - ан нет, используется!

И еще странность. судя вот по этому: https://github.com/ilovb/ProjectOberon2013/blob/master/ORGX.Mod#L10 максимальный размер кода - 8000 слов. Чуть менее 8 Кб то ли на модуль то ли на процедуру.

IF pc >= maxCode - 40 THEN ORS.Mark("Program too long"); END
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Project Oberon (New Edition 2013)
« Ответ #59 : Декабрь 22, 2013, 02:30:34 pm »
Да, и еще один нюанс - исходя из набора инструкций процессора, за одну инструкцию загнать в регистр константу времени компиляции можно только если константа укладывается в 16бит, либо если она может быть получена из 16ти бит дополнением до 32бит нулями либо единицами.

Причем примеров как быть с 32битными константами я пока в книге не нашел (возможно найду в CC).
Y = λf.(λx.f (x x)) (λx.f (x x))