Про ramdomize и иструкцию - учту.
Demo_z не работает которая .tap? Только что проверил, в FUSE работает.
Где взять EmuZWin? Всё что нахожу - VirusTotal ругается. Он, правда, и на мой компилятор сказал "1/61"...
Про ramdomize и иструкцию - учту.
Demo_z не работает которая .tap? Только что проверил, в FUSE работает.
Где взять EmuZWin? Всё что нахожу - VirusTotal ругается. Он, правда, и на мой компилятор сказал "1/61"...
Все версии EmuZWin с авторского сайта:
Поставил Fuse, всё работает, правда скорость удручающая, даже у Life. Оптимизация, как воздух, нужна. Но для начала супер!
EmuZWin отказывается работать на Windows 10. А на остальных виндах может ругаться антивирус на него.
Bolt, подскажи еще, как компилировать файлы pas?
В отладчике EmuZWin я вижу только одно поле под названием "RAM", в котором появляется то, что выводится в порт 0x7FFD, и переключатель ROM.
Это по идее должно включить special paging mode, pages 0,1,2,3. Но в поле "RAM" появляется "01", с адреса 0xC000 появляется page 1, при этом на адресе 0x0000 остаётся ROM.Код:DI LD BC,1FFDH LD A,01H OUT (C),A JP 0000H
Неполная/некорректная эмуляция порта 0x1FFD? Или я что-то не так делаю?
- - - Добавлено - - -
Полностью согласен
И, кажется, некорректно эмулирует порт 0x1FFD.
В командной строке
Выдаст файл 1.asm, а дальше - по вкусу. Я пользуюсь z80asm (в Ubuntu что-то поставилось, но он не поддерживает dup/edup) или Zeus Z80 Assembler, добавив в конце одну строкуКод:bmpc_z80.exe 1.pas
Код:output_bin "1.bin",0x8000,$-0x8000
Это оттого, что DUP/EDUP был придуман авторами кто их ввел от незнания трансляторов-аналогов, в более ранних ассемблерах (и в т.ч. лучших по моему мнению таких как M80 от Microsoft) для аналогичных целей использовался блок REPT-ENDM. В современных трансляторах обычно используются таки REPT-ENDM, а DUP/EDUP назначаются как алиас чтобы работали оба варианта. Предлагаю это вынести в опцию, чтобы компилятор генерировал оба варианта по указанию ключем командной строки. Обидно, если вывод компилятора Паскаль будет не совместим с M80 - для него под CP/M масса различных библиотек (формата REL линковщика L80 пакета Микрософт) в т.ч. и либы от различных ЯВУ т.к. они использовали M80 как транслятор с ASM.
Лучше сделать и жалеть, чем не сделать и жалеть.
Некоторые из моих поделок тут: https://github.com/serge-404
"dup" есть в библиотеке из ZX Like Pascal.
z80asm не поддерживает ни dup, ни rept.
В компиляторе dup/edup не используется, поэтому опция не нужна. Сгенерированный код вообще стараюсь сделать как можно проще с точки зрения ассемблера. А вот опция компилятора "использовать недокументированные инструкции" может и понадобится.
По-моему она и до оптимизации была потеряна. Это заводы WORK и флаги FLAGS в процедуре put_objects
Хм, действительно. Странно, потому что в процессе оптимизации оно то появлялось, то пропадало. Будем искать...
Нашёл.
(Смысл этих проверок от меня как-то ускользает. Догадываюсь что проверяется видимость объектов на экране, но до конца понять не могу.)Код:if (x_put>=x_min_lim) and (x_put<=(x_map_scr+map_scr_width)) and (y_put>=y_min_lim) and (y_put<=(y_map_scr+map_scr_height)) then
Проблема всё с тем же "заворотом" значений. В моём компиляторе буду стараться вычислять "математически". Если написано "(A-B)>10", то по возможности так и будет вычисляться, без удержания в уме типов переменных и правил работы с ними (привет языку Си). При A=5 и B=6 результат false.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)