nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 25 May 2018 04:45



Reply to topic  [ 26 posts ]  Go to page Previous  1, 2
nedoPC SDK 
Author Message
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16528
Location: Colorado
Reply with quote
Shaos wrote:
Sprinter SDK by NedoPC team предлагаю переименовать в nedoPC SDK и выпустить с поддержкой всех процессоров и компьютеров, которые сейчас поддерживает RW1P2 (Спринтер, Спектрум, Орион, Радио, Специалист).

В дальнейшем предполагается добавлять в список поддерживаемых все новые nedoPC устройства...


Список поддерживаемых на данный момент процессоров и компов:
- i8080 - ассембер rasm, системы RADIO, ORION, SPEC (Специалист), SPECCY (Спектрум с магнитофоном - TAP) и NULL (для либ);
- z80 - ассемблер zmac, системы SPECCY (Спектрум с дисководом - TRD), SPRINTER и NULL (для либ);
- m68k - есть очень поверхностные наработки с тех времён, когда я экспериментировал с PALM (никогда не релизилось).

Во-первых, надо переименовать SPEC в SPETS (специалист), а также разделить SPRINTER на SPRINT (текстовый режим) и SPRING (графический режим), ну и может NULL переименовать скажем в LIB, чтобы было понятнее.

Во-вторых, надо добавить процессор i8086 и две системы - текстовый дос (скажем PCTXT) и графический дос (скажем PCEGA).

В-третьих, надо добавить микроконтроллеры pic12, pic16, pic17 и, возможно микропроцессор 6502...

В-четвёртых, поддержать 4-битную систему Лавра ;) и т.д.

_________________
:eugeek: https://twitter.com/Shaos1973


Last edited by Shaos on 20 Nov 2014 09:37, edited 4 times in total.



19 Nov 2014 21:15
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16528
Location: Colorado
Reply with quote
Shaos wrote:
P.P.S. Немного истории (добавлено 19 ноября 2014 года):

28.04.2001 RW1P2 v1.0 (орион, спектрум)
15.05.2001 RW1P2 v1.1 (орион, спектрум)
16.01.2002 RW1P2 v1.2 (орион, спектрум, рк86)
18.01.2002 RW1P2 v1.2.1 (орион, спектрум, рк86)
20.01.2002 RW1P2 v1.3 (орион, спектрум, рк86, специалист)
12.06.2002 RW1P2 v1.4 (орион, спектрум, рк86, специалист + z80 спектрум и z80 спринтер + Linux порт)
26.04.2003 RW1P2 v1.5 beta aka Sprinter SDK (только z80 спринтер, только под Windows)
23.01.2006 RW1P2 v1.5 beta 2 (версия никогда не релизилась, от 1.4 отличается попиксельным графическим режимом в z80 спектруме, использованном для построения хаотичных 3D гор, а также наличием nedoPC шрифта)


Выдержка из README от RW1P2 версии 1.4:

Code:
Отличия версии 1.4 (12.06.2002) от 1.3:
- отказ от BAT-файлов (добавлена поддержка скриптов SHJ)
- появилась возможность развернуть пакет в LINUX
- добавлен процессор Z80
- добавлена система SPECCY для Z80
- добавлена система SPRINTER для Z80
- расширена статья RW1P2.TXT
- новая версия компилятора RW1C (добавлены указатели)
- расширение библиотек LIB/*.RWL
- модифицирован пример TETRIS.RW1

Отличия версии 1.3 (20.01.2002) от 1.2.1:
- добавлена полноценная поддержка SAY
- добавлена система SPEC (СПЕЦИАЛИСТ)
- улучшен контроль ошибок кросскомпиляции
- поддержка регистров R и T
- расширена статья RW1P2.TXT
- добавлена библиотека спрайтов FONT.SPR
- реализованы макросы RW1P2 в файле RW1P2.RWI
- начало реализации библиотек LIB/RW1P2/*.RWL
- добавлена поддержка команды @P2_TERMINFO
- добавлена поддержка команды @P2_SETSAY
- модифицированы примеры MAPGEN.RW1 и TETRIS.RW1

Отличия версии 1.2.1 (18.01.2002) от 1.2:
- исправлена неточность в библиотеке опроса клавиатуры
- добавлена игра TETRIS.RW1
- расширена статья RW1P2.TXT
- в фйле RW1_STD.RWI добавились новые макросы
- ассембер RASM v1.1 теперь компилирует большие файлы

Отличия версии 1.2 (16.01.2002) от 1.1:
- подержка РАДИО-86РК

Отличия версии 1.1 (15.05.2001) от 1.0:
- поддержка команды RECV

Первая версия 1.0 (28.04.2001):
- поддержка ОРИОН
- поддержка ZX-SPECTRUM
- реализация графических и арифметических функций

_________________
:eugeek: https://twitter.com/Shaos1973


19 Nov 2014 22:54
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16528
Location: Colorado
Reply with quote
Post Re:
Shaos wrote:
Вот список платформ под которые будет реализовываться nedoPC SDK:
1) DOS 16-bit (обычный MS-DOS или FreeDOS на 8086/8088 машинах)
2) DOS 32-bit (PMODE/W 32-битный расширитель доса - требуется как минимум 80386)
3) Windows 32-bit (Win9X и выше)
4) Linux x86 (обычный линукс на обычном пц)
5) Linux PPC (на маках с поверпц процессором)
6) MacOS X (на маках с поверпц процессором)
7) MacOS 9 ?
8) Amiga ?
9) Sprinter ?


Наверное надо ограничиться двумя платформами - DOS и LINUX (точнее исхода будут собираемыми в любой *NIX-системе включая MacOS X)

_________________
:eugeek: https://twitter.com/Shaos1973


14 Jun 2016 07:44
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16528
Location: Colorado
Reply with quote
Итак, в прошлом году я принял решение переименовать язык RW1 в Robby (см. http://www.nedopc.org/forum/viewtopic.php?f=46&t=11565) поэтому в nedoPC SDK будет так:
rw1c -> robbyc (Robby Compiler)
rw0comp -> robbycc (Robby Cross Compiler)
*.RW1 -> *.R (исходник на языке Robby)
*.RW0 -> *.RO (скомпилированный байткод Robby)
*.RWI -> INC/*.R (Robby макросы для включения в исходники программ на языке Robby до функции main)
*.RWL -> LIB/*.R (Robby библиотеки для включения в исходники программ на языке Robby после функции main)
*.A -> *.A (исходники и промежуточный код для RoboAssembler)
shjob -> nedo (думал сначала переименовать в nedomake, но потом подумалось, что это всё-таки не make)
*.shj -> *.ne (скрипты для сборки недопроектов)
ну и виртуальная машина будет называться RobbyVM (а исполняемый файл интерпретатора байткода наверное таки будет называться просто robby)

P.S. Как я и писал выше, пока предполагается работа nedoPC SDK только на двух платформах - консольный Linux (в виде исходников собери сам) и 16-битный DOS (бинарный дистрибутив), а потом может и ShaOS подтянется ;)

_________________
:eugeek: https://twitter.com/Shaos1973


14 Feb 2017 19:29
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16528
Location: Colorado
Reply with quote
Исходники nedoPC SDK будут теперь лежать тут:

https://github.com/shaos/nedoPC-SDK

Соберу туда всё что актуально с SourceForge, а также из незарелизенного RW1P2/SprinterSDK...

_________________
:eugeek: https://twitter.com/Shaos1973


12 Apr 2018 20:10
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16528
Location: Colorado
Reply with quote
Заявил прожэкт на Hackaday:

https://hackaday.io/project/158426-nedopc-sdk

Может это сильнее подтолкнёт меня к завершению начатого в 2001 году...

_________________
:eugeek: https://twitter.com/Shaos1973


18 May 2018 19:22
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16528
Location: Colorado
Reply with quote
Shaos wrote:
Исходники nedoPC SDK будут теперь лежать тут:

https://github.com/shaos/nedoPC-SDK

Соберу туда всё что актуально с SourceForge, а также из незарелизенного RW1P2/SprinterSDK...

Нашёл способ импортировать исходники из CVS (SourceForge) в GitHub со ВСЕЙ историей изменений! :mrgreen:

Кроме того накидал все версии RW1P2 - теперь можно отследить как оно менялось со временем...

_________________
:eugeek: https://twitter.com/Shaos1973


19 May 2018 23:48
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16528
Location: Colorado
Reply with quote
Shaos wrote:
Итак, в прошлом году я принял решение переименовать язык RW1 в Robby (см. http://www.nedopc.org/forum/viewtopic.php?f=46&t=11565) поэтому в nedoPC SDK будет так:
rw1c -> robbyc (Robby Compiler)
rw0comp -> robbycc (Robby Cross Compiler)
*.RW1 -> *.R (исходник на языке Robby)
*.RW0 -> *.RO (скомпилированный байткод Robby)
*.RWI -> INC/*.R (Robby макросы для включения в исходники программ на языке Robby до функции main)
*.RWL -> LIB/*.R (Robby библиотеки для включения в исходники программ на языке Robby после функции main)
*.A -> *.A (исходники и промежуточный код для RoboAssembler)
shjob -> nedo (думал сначала переименовать в nedomake, но потом подумалось, что это всё-таки не make)
*.shj -> *.ne (скрипты для сборки недопроектов)
ну и виртуальная машина будет называться RobbyVM (а исполняемый файл интерпретатора байткода наверное таки будет называться просто robby)

P.S. Как я и писал выше, пока предполагается работа nedoPC SDK только на двух платформах - консольный Linux (в виде исходников собери сам) и 16-битный DOS (бинарный дистрибутив), а потом может и ShaOS подтянется ;)


Первая часть задачи выполнена - RW1C переименован в ROBBYC :)

https://github.com/shaos/nedoPC-SDK/tree/master/robbyc

P.S. и оно даже работает :)

P.P.S. Вижу что в nedo (бывший shjob) надо бы сделать условное выполнение (чтобы иметь один файл на все платформы, а не как сейчас - для каждой платформы свой файл), а также засунуть команды addbin (склеивание бинарей) и leadzero (убирание нулевой области из начала бинарного файла) - только назвать их соответственно \glue и \ltrim (а также за компанию сделать \rtrim)

P.P.P.S. Например аргументы скрипта могут использоваться как ${1}, ${2} и т.д. Добавляем команду \if которая может проверять наличие переменных и сравнивать строки (а также \elif, \else и \endif), например:
\if ${1}
$mach=${1}
\else
$mach=ORION
\endif
\if $mach==ORION
...
\endif
для сравнения строк ещё можно != поддержать (не равно)
а в случае <,>,<=,>= можно переводить строковые значения в числа и сравнивать их как числа...

P.S. более сложные условия поди тоже надо поддержать - типа && и II, хотя это всё можно сымитировать многочисленными ифами с дополнительными переменными...

P.P.S. или таки оставить название утилиты shjob?...

P.P.P.S. хотя ладно - пусть будет nedo
кстати вместо аргументов командной строки можно диалоговый режим устроить - сначала вывести варианты через новую команду печати на экране:
\say 1.ORION
\say 2.SPETSIALIST
\say 3.ZX-SPECTRUM
а потом вызвать новую команду, ожидающую нажатия на кнопку:
\wait $user
\if $user==1 и т.д.

_________________
:eugeek: https://twitter.com/Shaos1973


20 May 2018 11:39
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16528
Location: Colorado
Reply with quote
А теперь немного о том, как устроен nedoPC SDK (точнее его дедушка RW1P2):
- на верхнем уровне есть 2 каталога - INC и LIB:
-- в INC находятся инклудники с константами для языка роботов (инклудятся до функции main)
-- в LIB находятся инклудники с описанием функций для языка роботов (инклудятся после функции main), а также подкаталоги с названием процессоров (сейчас только I8080 и Z80), в каждом из которых есть:
--- файл __RULES с описанием правил трансляции байткода роботов в ассемблер выбранного процессора
--- файлы подсистем на ассемблере для выбранного процессора как _SAY.A, _CLIB.A и т.д.
--- файлы основных системо-зависимых ассемблерных подпрограмм для всех поддерживаемых систем с выбранным процессором (например RADIO.A, ORION.A и т.д.)
--- опциональные подкаталоги с именами поддерживаемых систем, где могут лежать дополнительные файлы (заголовки бинарных файлов типа EXE, заглушки для TAP и т.д.)

Наибольший интерес вызывает файл __RULES: https://github.com/shaos/nedoPC-SDK/blob/master/sdk/LIB/I8080/__RULES
Комментарии в нём идут как в C++ после // и далее файл поделён на секции, разделяемые звёздочками - слова после звёздочки дают секции название (а звёздочка без названия просто закрывает предыдущую секцию). Наиболее часто встречаемые секции - это правила трансляции байткода - когда после звёздочки следует шестнадцатиричное число, например:
Code:
// 0x68 M // COLOR varn // set current color
*0x68 0x00 %w1
        MVI_A, %w1
        STA    _COLOR
*0x68 %m1
#mem1
        MOV_A,L
        STA    _COLOR
*

Здесь можно видеть 2 секции - обе относятся к трансляции байткода 0x68 (COLOR), но первая секция более детальная, а вторая - более общая (общая секция сработает, если ни одна детальная не прошла проверку - точнее секции вычитываются одна за другой и срабатывает первая, которая подошла, поэтому более общие секции надо ставить после детальных). Спец-идентификаторы %wN (где N - порядковый номер) означают 2-байтовое слово, %mN означают переменную языка Robby (может занимать от 2 до 5 байт), ещё бывают %aN для адресов и %bN для байтов. Они далее используются прямо как есть (MVI_A, %w1) либо путём вставки спец-кода для расшифровки переменных языка Robby - #memN где N это порядковый номер переменной, соответствующий %mN. С решётки начинаются и другие спец-коды (не только #memN) - ещё бывают #addsub (для указания кросс-компилятору какие файлы с подпрограммами нужно инклудить в результирующий исходик), #error (для прекращения работы кросс-компилятора с рапортованием ошибки), #genlab (для генерации временных меток в месте вставки кода) и т.д.

Кроме того секции выделяемые звёздочками могут быть специальными - например секция *ASM TABLE предназначена для скармливания ассемблеру RASM в качестве таблицы трансляции, *COMMENT указывает, что используется в качестве отделителя комментария в выбранном ассемблере, *EXPR 0x?? используется для трансляции байткодов стековой машины (скомпилированные длинные выражения) и т.д.

Вобщем вот как-то так...

P.S. Оказывается у меня есть нереализованные спец-коды, например передача управления по адресу из массива #atable:
Code:
//-0x43 M      // GOTO var
*0x43 0x00 %w1
        JMP %j1
*0x43 %m1
#mem1
#atable
   PCHL
*

//-0x44 M      // CALL var
*0x44 0x00 %w1
        CALL %j1
*0x44 %m1
#genlab %l2
   LXI_H,   %l2
   PUSH_H
#mem1
#atable
   PCHL
%l2
*


P.P.S. По большому счёту с помощью такой системы правил можно транслировать не только ROBBY-байткод во что-то, но и вообще что угодно во что угодно (при необходимости добавляя новые спец-идентификаторы и спец-коды в транслятор), например из кода 8080 в PDP-11 и т.д.

_________________
:eugeek: https://twitter.com/Shaos1973


22 May 2018 21:43
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16528
Location: Colorado
Reply with quote
Обана - оказывается про RW1P2 писали в книжке 2009 года :o

Attachment:
cellular.jpg
cellular.jpg [ 253.69 KiB | Viewed 50 times ]


Вот собственно упоминание:

Attachment:
rw1p2.jpg
rw1p2.jpg [ 183.87 KiB | Viewed 50 times ]

_________________
:eugeek: https://twitter.com/Shaos1973


22 May 2018 22:34
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16528
Location: Colorado
Reply with quote
В данный момент то, что генерится на выходе SDK, может работать только из ОЗУ т.к. представляет из себя мешанину из кода и данных - надо бы вынести все данные библиотек в область "регистров" (однобуквенных переменных), чтобы была возможность пускаться из ПЗУ (для того же nedoPC-85 например или внешнего картриджа для ZX-Spectrum). Кроме того надо бы ещё платформы побить на более мелкие вещи - чтобы например можно было собираться для работы с ZX-ПЗУ (когда печать идёт через встроенные команды) либо для работы из внешнего ПЗУ, который полностью подменяет спектрум-бейсик...

_________________
:eugeek: https://twitter.com/Shaos1973


24 May 2018 21:35
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 26 posts ]  Go to page Previous  1, 2

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.