видимо в версии gp48k чтото поменялось с макросами
видимо в версии gp48k чтото поменялось с макросами
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Не может быть.) Только # используется для других целей.
Код:1: 2: print_code macro vcode,v1,v2 3: ld a,vcode 4: rst $10 5: ld a,v1 6: rst 10h 7: if !nul &v2 8: ld a,v2 9: rst 10h 10: endif 11: endm 12: 13: - 0000 print_code 1,2,3 13: 0+7 0000 3E01 ld a,1 13: 7+11 0002 D7 rst $10 13: 18+7 0003 3E02 ld a,2 13: 25+11 0005 D7 rst 10h 13: - 0001 if !nul 3 13: 36+7 0006 3E03 ld a,3 13: 43+11 0008 D7 rst 10h 13: endif 13: - 0009 endm 14: ;print_code 1,2, 15: - 0009 print_code 1,2 15: 54+7 0009 3E01 ld a,1 15: 61+11 000B D7 rst $10 15: 72+7 000C 3E02 ld a,2 15: 79+11 000E D7 rst 10h 15: - 0000 if !nul 15: endif 15: - 000F endm 16: 17: - 000F end Statistics: 3 passes 0 jr promotions 0 symbols 15 bytes 2 macro calls 133 macro bytes 0 invented symbols
Вот код:
Результат компиляции:Код:; zmac -i -m -h -o build/test-marg.hex -x build/test-marg.lst test-marg.asm ROM_CLS equ #0DAF ROM_OPEN_CHANNEL equ #1601 ; a=channel ROM_PRINT equ #203C ; de=text, bc=length CHAR_AT equ #16 CHAR_INK equ #10 CHAR_PAPER equ #11 CHAR_BRIGHT equ #13 print_code macro vcode,v1,v2 ld a,vcode rst #10 ld a,v1 rst #10 if !nul &v2 ld a,v2 rst #10 endif endm org #8000 call ROM_CLS print_code CHAR_AT,0,0 print_code CHAR_PAPER,3 print_code CHAR_BRIGHT,1 ld hl,message call printf ret message: db 'HELLO WORLD',#00 printf: ld a,(hl) or a ret z rst #10 inc hl jr printf
Код:$ ./zmac -i -m -h -o build/test-marg.hex -x build/test-marg.lst test-marg.asm test-marg.asm:26: Syntax error test-marg.asm:26: Balance error test-marg.asm:27: Syntax error test-marg.asm:27: Syntax error test-marg.asm:27: Balance error test-marg.asm:28: Syntax error test-marg.asm:28: Syntax error test-marg.asm:28: Balance error test-marg.asm:26: Undeclared error test-marg.asm:27: Undeclared error test-marg.asm:28: Undeclared error
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
В целях поиздеваться над мозгом, попробовал накалякать мелкую библиотечку с lua функциями для sjasmplus, генерирующую этот тип хекса, если конечно правильно разобрался в формате.
Пользоваться -> в начало исходника вставить: include IntelHEX.asm
макросом ihexname# имя.hex создать файл для вывода
и макросами ihex# начало_блока,длина запихивать блоки.
Минус - имя файла не понимает кавычек/апострофов - в этом эксперименте мне лень возиться было
- - - Добавлено - - -
Не делал запись окончания файла. Проглядел и так и не понял нужна она вообще в нашем случае или нет.
----------------------------
Добавил запись окончания файла -
макрос без параметров ihexend#
Последний раз редактировалось Dart Alver; 22.11.2024 в 01:09.
Немного доработал, причесал (хотя может наоборот), добавил обработку кавычек, растянул запись до максимума (255 байт данных), впихнул запись нулевого расширенного адреса, добавил подобие лицензии (прям как большой), малость багов думаю тоже добавил, хотя надеюсь что вру )) .
Теперь думаю а нафига оно то мне было надо ?Впрочем было интересно немного в lua поковыряться.
v0.1
А я вот удивляюсь. ZXMAK, ну ты ж грамотный мужик, вроде бы.) Неужто сам не в состоянии поиграться с макро средствами этого zmac-а? Или нянька нужна?)
M80, вот вы угадали, я как-раз и полез добавлять, в итоге завис на пару дней, разбирая код. Поняв что это надолго, появилась идея реализовать более чистую реализацию на lex/yacc, в итоге еще день ушел и я увяз в грамматиках. По итогу новые макросы так и не добавил, а время потратил. Впрочем разобрал как zmac работает, реализация честно говоря не очень надежная. Если большой код компилить, то посыпется песок... Нужно переделывать
Версия от gp48k еще более закрученная, вначале была мысль портировать из нее лексический анализатор в оригинальную версию, но как оказалось в ней прикручено так много костылей, что даже в лексический анализатор код сразу пишет...
Погуглил альтернативы на lex/yacc, но ничего для Z80 не нашел, есть только обсуждения где пишут что проще код вручную разбирать. И кстати в zmac лексический анализатор вручную написан, lex не используется. Поэтому в нем много костылей и дорабатывать код сложно.
Похожий подход был во встроенном ассемблере первого zxmak, там вообще весь код трансляции инструкции в код вручную написан был. Хотелось бы универсальный ассемблер, нормально переваривающий сложные вложенные макросы и выражения.
Последний раз редактировалось ZXMAK; 24.11.2024 в 19:47.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Когда то, лет эдак 20 назад, пытался было заменить этот М80 на что то посовременнее. Ну куда это годиться, 1981-го года выпуска, хоть и Microsoft(с), но под CP/M - прям, стыдоба какая то.) Кинулся, было, кучу разных ассемблеров перепробовал... и нифига. То валятся, то одно не нравится, то другое... Правда, исходник был не мал, 36000 строк где то. Ну и макро, типа, IRP/IRPC использовал. В общем, потыкался я и успокоился. Правда, на zmac не наткнулся.( А изделие проработало аж до 2012-го года, хотя оптимистично рассчитывал до 2000-го.)
может кто подскажет исходники z80 ассемблера с лексикой описанной в lex файле, а не вручную в коде написанной?
Странно, что столько ассемблеров для z80 написали, но ни одного lex файла гугл не находит![]()
Последний раз редактировалось ZXMAK; 25.11.2024 в 23:48.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
может кто подскажет, нужны примеры для тестирования синтаксического анализатора для z80 ассемблера. Интересуют разнообразные необычные варианты примеров кода, которые должны работать.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)