[SDK] Древняя тема про nedoPC SDK (август 2004)

Публичный форум для http://www.nedopc.org/nedopc

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

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-битную систему Лавра ;) и т.д.
Last edited by Shaos on 20 Nov 2014 08:37, edited 4 times in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

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)...
Выдержка из README от RW1P2 версии 1.4:

Code: Select all

Отличия версии 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
- реализация графических и арифметических функций
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re:

Post by Shaos »

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)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

Итак, в прошлом году я принял решение переименовать язык 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):
http://www.nedopc.org/forum/viewtopic.php?f=46&t=11565

P.S. Как я и писал выше, пока предполагается работа nedoPC SDK только на двух платформах - консольный Linux (в виде исходников собери сам) и 16-битный DOS (бинарный дистрибутив), а потом может и ShaOS подтянется ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

Планирую создать репу nedoPC SDK на гитхабе - соберу туда всё, что актуально с SourceForge, а также из незарелизенного RW1P2/SprinterSDK...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

Заявил прожэкт на Hackaday:

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

Может это сильнее подтолкнёт меня к завершению начатого в 2001 году...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

Shaos wrote:соберу туда всё что актуально с SourceForge, а также из незарелизенного RW1P2/SprinterSDK...
Нашёл способ импортировать исходники из CVS (SourceForge) в GitHub со ВСЕЙ историей изменений! :mrgreen:

Кроме того накидал все версии RW1P2 - теперь можно отследить как оно менялось со временем...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

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):
http://www.nedopc.org/forum/viewtopic.php?f=46&t=11565

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

https://gitlab.com/nedopc/sdk/-/tree/master/robbyc (живёт на гитлабе с июня 2018)

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 и т.д.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

А теперь немного о том, как устроен 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://gitlab.com/nedopc/sdk/-/blob/master/sdk/LIB/I8080/__RULES (живёт на гитлабе с июня 2018)
Комментарии в нём идут как в C++ после // и далее файл поделён на секции, разделяемые звёздочками - слова после звёздочки дают секции название (а звёздочка без названия просто закрывает предыдущую секцию). Наиболее часто встречаемые секции - это правила трансляции байткода - когда после звёздочки следует шестнадцатиричное число, например:

Code: Select all

// 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: Select all

//-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 и т.д.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

Обана - оказывается про RW1P2 писали в книжке 2009 года :o
cellular.jpg
Вот собственно упоминание:
rw1p2.jpg
P.S. 536-я ссылка это оказывается не мой сайт, а какие-то 2 левых сайта, в данный момент уже несуществующих...
aladiev-references.jpg
P.P.S. Первая ссылка нашлась в вебархиве 2009 года - и это оказалась... страничка этой же самой книжки :o
ca_hs_ref_2009.png
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

В данный момент то, что генерится на выходе SDK, может работать только из ОЗУ т.к. представляет из себя мешанину из кода и данных - надо бы вынести все данные библиотек в область "регистров" (однобуквенных переменных), чтобы была возможность пускаться из ПЗУ (для того же nedoPC-85 например или внешнего картриджа для ZX-Spectrum). Кроме того надо бы ещё платформы побить на более мелкие вещи - чтобы например можно было собираться для работы с ZX-ПЗУ (когда печать идёт через встроенные команды) либо для работы из внешнего ПЗУ, который полностью подменяет спектрум-бейсик...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

Интересная картина наблюдается, если посмотреть мою гитхабовскую активность начиная с 2010 года - Bipolar Disorder в действии :lol:
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

Вот пример с циклами:

Code: Select all

ROBOT "Test"
AUTHOR "Shaos"
+INC/ROBBY
+MYSPR

main()
{
 for(A=0;A<20;A++)
 {
   for(B=0;B<10;B++)
   {
      select A B
      set @MYSPR
   }
 }
}
и вот во что они превращаются после препроцессора:

Code: Select all

ROBOT "Test"
AUTHOR "Shaos"
START:
A=0;_l1: (A<20);IFN L _l2
B=0;_l3: (B<10);IFN L _l4
SELECT A B
SET 8192
B=B+1;GOTO _l3;_l4:
A=A+1;GOTO _l1;_l2:
NOP
__END: END
после компиляции в байткод:

Code: Select all

// Generated by ROBBYC version 2.3.0
// Alexander "Shaos" Shabarshin <me@shaos.net>

>>>>(1) ROBOT "Test"
>>>>(2) AUTHOR "Shaos"
>>>>(3) +INC/ROBBY
>>>>(4) +MYSPR
>>>>(5) 

// HEADER OF THE ROBOT

// Robot 'Test'
// 0 variables
// 108 bytes of code
// 0 bytes of image

02 9A 30 1F 00 04 54 65 73 74 00 00 00 6C 00 FF |..0...Test...l..
FF FF 00 00 00 00 00 53 68 61 6F 73 00 00 00    |.......Shaos...

// CODE OF THE ROBOT

>>>>(6) main()
TEST.R(6) START:
0000 20 
0001 01 
0002 0A 
0003 FF 
0004 00 
0005 00 
0006 00 

>>>>(7) {
>>>>(8)  for(A=0;A<20;A++)
TEST.R(8) A=0;_l1: (A<20);IFN L _l2
0007 40 
0008 0C 
0009 F5 REG L
000A 0E 
000B FF 
000C F5 REG A
000D 0A 
000E FF 
000F F3 LOAD
0010 F5 PUSH 20
0011 14 
0012 00 
0013 93 <
0014 F4 SAVE
0015 42 
0016 01 
0017 0E 
0018 FF 
0019 00 
001A 6A 
001B 00 

>>>>(9)  {
>>>>(10)    for(B=0;B<10;B++)
TEST.R(10) B=0;_l3: (B<10);IFN L _l4
001C 20 
001D 01 
001E 0B 
001F FF 
0020 00 
0021 00 
0022 00 
0023 40 
0024 0C 
0025 F5 
0026 0E 
0027 FF 
0028 F5 
0029 0B 
002A FF 
002B F3 
002C F5 
002D 0A 
002E 00 
002F 93 
0030 F4 
0031 42 
0032 01 
0033 0E 
0034 FF 
0035 00 
0036 58 
0037 00 

>>>>(11)    {
>>>>(12)       select A B
TEST.R(12) SELECT A B
0038 69 
0039 01 
003A 0A 
003B FF 
003C 01 
003D 0B 
003E FF 

>>>>(13)       set @MYSPR
TEST.R(13) SET 8192
003F 6A 
0040 00 
0041 00 
0042 20 
0043 00 
0044 00 
0045 00 

>>>>(14)    }
TEST.R(14) B=B+1;GOTO _l3;_l4:
0046 40 
0047 0C 
0048 F5 REG B
0049 0B 
004A FF 
004B F5 REG B
004C 0B 
004D FF 
004E F3 LOAD
004F F5 PUSH 1
0050 01 
0051 00 
0052 A0 +
0053 F4 SAVE
0054 43 
0055 00 
0056 23 
0057 00 

>>>>(15)  }
TEST.R(15) A=A+1;GOTO _l1;_l2:
0058 40 
0059 0C 
005A F5 REG A
005B 0A 
005C FF 
005D F5 REG A
005E 0A 
005F FF 
0060 F3 LOAD
0061 F5 PUSH 1
0062 01 
0063 00 
0064 A0 +
0065 F4 SAVE
0066 43 
0067 00 
0068 07 
0069 00 

>>>>(16) }
TEST.R(16) NOP
006A 00 
TEST.R(0) __END: END
006B FF  
и после кросс-копиляции в код 8080:

Code: Select all

\ Generated by RW0COMP v2.0 (part of NedoPC SDK, see http://www.nedopc.org)
\ Copyright (c) 2001-2005, Alexander Shabarshin <shaos@mail.ru>

        ORG     #0000
@BASE   EQU     #4000
@REGS   EQU     16448
@REG_X  EQU     16448
@REG_Y  EQU     16450
\REG_D
@REG_N  EQU     16454
\REG_K
@REG_R  EQU     16458
@REG_T  EQU     16460
\REG_E
\REG_M
\REG_I
@REG_A  EQU     16468
@REG_B  EQU     16470
@REG_C  EQU     16472
\REG_P
@REG_L  EQU     16476
\REG_S
@RAND   EQU     1000
	JMP	HEADER
        \ DATA
_L_BASE DW  @BASE
_L_REGS DW  @REGS
_L_STAK	DW  @REGS
CHX     DB  0
CHY     DB  0
CHS     DB  4
CHB     DB  0
_NPLANE DW  0
_ANGLE  DB  0
_COLOR  DB  0
_CURX   DB  0
_CURY   DB  0
_SAYX   DB  0
_SAYY   DB  0
_SAYC   DB  2
_ATRS   DB  0
HEADER: \ INIT SYSTEM
	CALL    INIT 
        \ SET _SAYX & _SAYY
        XRA_A
        STA     _SAYX
        MVI_A,  @DY
        DCR_A
        STA     _SAYY
        \ ERASE FROM BASE TO REGS+32
	LHLD	_L_BASE
	XCHG
	LHLD	_L_REGS
        LXI_B,  32
        DAD_B
        XCHG
        MVI_C,  0
_STD_1: MOV_M,C
        INX_H
        MOV_A,H
        CMP_D
        JNZ     _STD_1
        MOV_A,L
        CMP_E
        JNZ     _STD_1
        \ SET SP & SAVE RETADDR
        POP_D
	LHLD	_L_STAK
	SPHL
        PUSH_D
_START:
\ *0x20 0x01 0x0A 0xFF %m2
_j0000:         LXI_H,  #0000
        SHLD   @REG_A
\ *0x40
_j0007: \ 0xF5
        PUSH_H
        LXI_H,  #FF0E
\ 0xF5
        PUSH_H
        LXI_H,  #FF0A
\ 0xF3
        MVI_A,  #FF
        CMP_H
        JNZ 	_l0001
        \ REGISTER
	CALL	_R_GET
	JMP	_l0002
_l0001: NOP
        \ VARIABLE
        CALL    _B_GET
_l0002: NOP
\ 0xF5
        PUSH_H
        LXI_H,  #0014
\ 0x93
        POP_D
        CALL CCLT
\ 0xF4
        POP_D
        XCHG
        MVI_A,  #FF
        CMP_H
        JNZ 	_l0003
        \ REGISTER
	CALL	_R_SET
	JMP	_l0004
_l0003: NOP
        \ VARIABLE
        CALL	_B_SET
_l0004: NOP
        POP_H
\ *0x42 0x01 0x0E 0xFF 0x00 %w1
_j0015:         LDA @REG_L
        ORA_A
        JZ _j006A
\ *0x20 0x01 0x0B 0xFF %m2
_j001C:         LXI_H,  #0000
        SHLD   @REG_B
\ *0x40
_j0023: \ 0xF5
        PUSH_H
        LXI_H,  #FF0E
\ 0xF5
        PUSH_H
        LXI_H,  #FF0B
\ 0xF3
        MVI_A,  #FF
        CMP_H
        JNZ 	_l0005
        \ REGISTER
	CALL	_R_GET
	JMP	_l0006
_l0005: NOP
        \ VARIABLE
        CALL    _B_GET
_l0006: NOP
\ 0xF5
        PUSH_H
        LXI_H,  #000A
\ 0x93
        POP_D
        CALL CCLT
\ 0xF4
        POP_D
        XCHG
        MVI_A,  #FF
        CMP_H
        JNZ 	_l0007
        \ REGISTER
	CALL	_R_SET
	JMP	_l0008
_l0007: NOP
        \ VARIABLE
        CALL	_B_SET
_l0008: NOP
        POP_H
\ *0x42 0x01 0x0E 0xFF 0x00 %w1
_j0031:         LDA @REG_L
        ORA_A
        JZ _j0058
\ *0x69 %m1 %m2
_j0038:         LXI_H,  #000A
        CALL    _R_GET
        PUSH_H
        LXI_H,  #000B
        CALL    _R_GET
        POP_D
        MOV_A,E
        STA _CURX
        MOV_A,L
        STA _CURY
\ *0x6A 0x00 %w1 0x00 0x00 0x00
_j003F:         LXI_H,  #2000
        CALL    _SET
\ *0x40
_j0046: \ 0xF5
        PUSH_H
        LXI_H,  #FF0B
\ 0xF5
        PUSH_H
        LXI_H,  #FF0B
\ 0xF3
        MVI_A,  #FF
        CMP_H
        JNZ 	_l0009
        \ REGISTER
	CALL	_R_GET
	JMP	_l0010
_l0009: NOP
        \ VARIABLE
        CALL    _B_GET
_l0010: NOP
\ 0xF5
        PUSH_H
        LXI_H,  #0001
\ 0xA0
        POP_D
        DAD_D
\ 0xF4
        POP_D
        XCHG
        MVI_A,  #FF
        CMP_H
        JNZ 	_l0011
        \ REGISTER
	CALL	_R_SET
	JMP	_l0012
_l0011: NOP
        \ VARIABLE
        CALL	_B_SET
_l0012: NOP
        POP_H
\ *0x43 0x00 %w1
_j0054:         JMP _j0023
\ *0x40
_j0058: \ 0xF5
        PUSH_H
        LXI_H,  #FF0A
\ 0xF5
        PUSH_H
        LXI_H,  #FF0A
\ 0xF3
        MVI_A,  #FF
        CMP_H
        JNZ 	_l0013
        \ REGISTER
	CALL	_R_GET
	JMP	_l0014
_l0013: NOP
        \ VARIABLE
        CALL    _B_GET
_l0014: NOP
\ 0xF5
        PUSH_H
        LXI_H,  #0001
\ 0xA0
        POP_D
        DAD_D
\ 0xF4
        POP_D
        XCHG
        MVI_A,  #FF
        CMP_H
        JNZ 	_l0015
        \ REGISTER
	CALL	_R_SET
	JMP	_l0016
_l0015: NOP
        \ VARIABLE
        CALL	_B_SET
_l0016: NOP
        POP_H
\ *0x43 0x00 %w1
_j0066:         JMP _j0007
\ *0x00
_j006A: 	\ NOP is empty operation
\ *0xFF
_j006B: 
+./LIB/I8080/ORION
+./LIB/I8080/_CLIB
+./LIB/I8080/_VARS
+./LIB/I8080/_PLATF2
+./LIB/I8080/NULL_
путём добавления более оптимального кода для A=0, B=0, C=0, A<N, A=A+1 и т.д. в __RULES можно сделать более опитимальное представление этого кода для 8080 (и соответственно более быстрое)

P.S. про то как выглядит цикл на SmallC (правда один цикл, а не два вложенных), можно у нас почитать вот тут
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

NOP-ы после меток в нагенерённом коде выше из-за того, что это я так в данный момент пытаюсь обойти только что обнаруженную багу в моём старом добром робоассемблере RASM - если после метки стоит комментарий, то метка почему-то исчезает, а во все места её использования подставляются нули...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

Shaos wrote:
Shaos wrote:соберу туда всё что актуально с SourceForge, а также из незарелизенного RW1P2/SprinterSDK...
Нашёл способ импортировать исходники из CVS (SourceForge) в GitHub со ВСЕЙ историей изменений! :mrgreen:

Кроме того накидал все версии RW1P2 - теперь можно отследить как оно менялось со временем...
Блин, не успел перенести репозиторий, как гитхаб решил мелкомягким продаться :(

http://www.businessinsider.com/microsoft-github-acquisition-could-be-announced-monday-2018-6
Я тут за главного - если что шлите мыло на me собака shaos точка net