Уместил demo_z в 48k. Занимает всю доступную память, для уменьшения кода закомментировал анимацию флагов, прописал вручную адреса некоторых переменных, ну и ещё есть несколько мелких костылей.
demo_z_48k.zip
Уместил demo_z в 48k. Занимает всю доступную память, для уменьшения кода закомментировал анимацию флагов, прописал вручную адреса некоторых переменных, ну и ещё есть несколько мелких костылей.
demo_z_48k.zip
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Хорошо! Значит, оптимизация нормально идет.
У тебя еще отсутствует анимация рек, флажков, и часики на фабриках не ходят Ну это так...
Про часики и флажки знаю, надо же было как-то на 48k перейти, поэтому закомментировал. А реки текут, их я не трогал
Оптимизация да, идёт. "Простые" оптимизации в кодогенераторе закончились, надо теперь "сложные" делать, вроде свёртки констант.
версия 0.4
Оптимизирован кодогенератор.
examples.tap уменьшился с 14401 до 9732 байт.
demo_lode_runner.tap уменьшился с 11896 до 6601 байт.
life.tap уменьшился с 9237 до 5886 байт, длительность итерации сократилась с 60 до 23 секунд.
demo_z.tap уменьшился с 54656 до 32587 байт и теперь запускается на 48K.
Не знаю удастся ли уменьшить код ещё в три раза, но потенциал есть. Например оптимизация выражений "A:=A+B", сокращение разрядности вычислений, глобальные переменные, переменные в регистрах, автоматическое вынесение кода в подпрограммы...
bmpascal_v0.4.zip
Фигово, что скомпилированный асм-файл не работает в асме эмулятора EmuZWin. Не понимает он директивы db (ну это легко заменить вручную поиском/заменой), а также всяческие include. Пытался вручную вставить текст из библиотек, но фиг вам.
Ну с include понятно что делать, а директива db ему чем не угодила? На что её заменить?
DEFB
Если запустить EmuZWin, два раза нажать F12, потом мышкой вопросик в углу, откроется страница помощи.
Там ещё и про ENTRYPOINT DEFM DEFW DEFS
DEFG DEFD ENCODE можно почитать.
А, ну да, DEFB. Я уже в ассемблерах запутался.
Директива include используется только один раз, для системной библиотеки. Уберу.
Ассемблер EmuZWin не понимает 0x1234, надо 1234h
TODO список изменений, необходимых для EmuZWin:
- заменить строку include ... на текст системной библиотеки;
- заменить db на defb;
- заменить числа вида 0x?? на 0??h.
Можно попробовать ублажить Дениса, он вроде недавно правленую версию с обновлённым ассемблером сотворил.
Ветка тут.
версия 0.4.1
Адаптировал под ассемблер EmuZWin.
demo_z.asm в EmuZWin собирается и запускается.
Обнаружил две ошибки: не работает оператор NOT и иногда выводятся несуществующие ошибки при вызове подпрограмм с параметрами. То есть на самом деле всё правильно, а компилятор пишет ошибку.
Ну и на отладочный вывод не обращайте внимание
Так, стоп. Архив собрал неправильно. И танк не движется в EmuZWin.
bmpascal_v0.4.1.zip
- - - Добавлено - - -
Подскажите правильный ассемблер, который может выдавать листинг после трансляции вот в таком виде:
Код:a120 label080loop: a120 fd 2a e8 82 ld iy,(parentframe1) a124 fd 5e f1 ld e,(iy+-15) a127 fd 56 f2 ld d,(iy+-14) a12a eb ex de,hl a12b 23 inc hl a12c eb ex de,hl a12d fd 2a e8 82 ld iy,(parentframe1) a131 fd 73 f1 ld (iy+-15),e a134 fd 72 f2 ld (iy+-14),d
Последний раз редактировалось Bolt; 11.06.2018 в 17:14.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)