nedoPC.org

Community for electronics hobbyists, established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 09 Dec 2024 19:17



Reply to topic  [ 120 posts ]  Go to page Previous  1, 2, 3, 4, 5 ... 8  Next
[SDK] Старая тема про nedoPC SDK (август 2004) 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
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-битную систему Лавра ;) и т.д.

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


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



19 Nov 2014 20:15
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
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)...

Выдержка из 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
- реализация графических и арифметических функций

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


19 Nov 2014 21:54
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
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)

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


14 Jun 2016 06:44
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
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):
http://www.nedopc.org/forum/viewtopic.php?f=46&t=11565

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

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


14 Feb 2017 18:29
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
Reply with quote
Планирую создать репу nedoPC SDK на гитхабе - соберу туда всё, что актуально с SourceForge, а также из незарелизенного RW1P2/SprinterSDK...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


12 Apr 2018 19:10
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
Reply with quote
Заявил прожэкт на Hackaday:

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

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

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


18 May 2018 18:22
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
Reply with quote
Shaos wrote:
соберу туда всё что актуально с SourceForge, а также из незарелизенного RW1P2/SprinterSDK...

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

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

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


19 May 2018 22:48
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
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):
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 и т.д.

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


20 May 2018 10:39
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
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://gitlab.com/nedopc/sdk/-/blob/master/sdk/LIB/I8080/__RULES (живёт на гитлабе с июня 2018)
Комментарии в нём идут как в 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 и т.д.

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


22 May 2018 20:43
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
Reply with quote
Обана - оказывается про RW1P2 писали в книжке 2009 года :o

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


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

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


P.S. 536-я ссылка это оказывается не мой сайт, а какие-то 2 левых сайта, в данный момент уже несуществующих...

Attachment:
aladiev-references.jpg
aladiev-references.jpg [ 95.87 KiB | Viewed 18941 times ]


P.P.S. Первая ссылка нашлась в вебархиве 2009 года - и это оказалась... страничка этой же самой книжки :o

Attachment:
ca_hs_ref_2009.png
ca_hs_ref_2009.png [ 638.79 KiB | Viewed 18941 times ]

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


22 May 2018 21:34
Profile WWW
Admin
User avatar

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

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


24 May 2018 20:35
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
Reply with quote
Интересная картина наблюдается, если посмотреть мою гитхабовскую активность начиная с 2010 года - Bipolar Disorder в действии :lol:


Attachments:
github2010.gif
github2010.gif [ 4.86 KiB | Viewed 19025 times ]
github2011.gif
github2011.gif [ 4.97 KiB | Viewed 19025 times ]
github2012.gif
github2012.gif [ 5.14 KiB | Viewed 19025 times ]
github2013.gif
github2013.gif [ 5.18 KiB | Viewed 19025 times ]
github2014.gif
github2014.gif [ 4.9 KiB | Viewed 19025 times ]
github2015.gif
github2015.gif [ 5.54 KiB | Viewed 19025 times ]
github2016.gif
github2016.gif [ 5.15 KiB | Viewed 19025 times ]
github2017.gif
github2017.gif [ 4.63 KiB | Viewed 19025 times ]
github2018.gif
github2018.gif [ 3.73 KiB | Viewed 19025 times ]

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973
25 May 2018 17:20
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
Reply with quote
Вот пример с циклами:
Code:
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:
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:
// 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:
\ 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 (правда один цикл, а не два вложенных), можно у нас почитать вот тут

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


30 May 2018 17:58
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
Reply with quote
NOP-ы после меток в нагенерённом коде выше из-за того, что это я так в данный момент пытаюсь обойти только что обнаруженную багу в моём старом добром робоассемблере RASM - если после метки стоит комментарий, то метка почему-то исчезает, а во все места её использования подставляются нули...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


31 May 2018 01:28
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
Reply with quote
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

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


03 Jun 2018 18:10
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 120 posts ]  Go to page Previous  1, 2, 3, 4, 5 ... 8  Next

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.