Shiny48 *Pentagon multicolor fix*
демо давно лежало в папке, вчера добрался до фикса. Первый взгляд на код подсказал решение - я дизассемблировал программу с помощью IDA и стал экспериментировать.
Сделано, конечно, очень небрежно: с участка $8000 по $FFFF раскидан код, данные и музыка. Но для начала я скомпилировал код и начал экспериментировать:
Вот процедура вывода мультиколора:
получается 50+8+50+44+8+44=204 такта. Для Пентагона нужно 224 тактов на линию. отсюда несложный подсчет: 224-204=20 тактов. Рисну добавить 5 NOP(5*4=20).Код:loc_8590: ld (loc_8DB4+1), sp loc_8594: block_b: ld sp, unk_C300;10 pop af;10 pop bc;10 pop de;10 pop hl;10 exx;4 ex af, af';4 pop af;10 pop bc;10 pop de;10 pop hl;10 ld sp, 58F8h;10 push hl;11 push de;11 push bc;11 push af;11 ex af, af';4 exx;4 push hl;11 push de;11 push bc;11 push af;11 block_e:
Но не все так просто.Есть еще одна процедура, которая считает и готовит данные для вывода:
ld de, 1Ah заменена на ld de, block_e-block_b, так будет удобнее.Код:sub_8058: ld de, 0C100h ld b, 50h ld hl, loc_8594+1 loc_8060: ld a, (de) srl a srl a srl a ld (hl), a push de ld de, block_e-block_b;1Ah add hl, de pop de inc e djnz loc_8060 ret
Теперь до block_e добавляю nop:nop:nop:nop:nop, ассемблирую, запускаю и ловлю кайф от картинки. Далее, демо было изменено: добавлена сжатая zx7 картинка, мелодия Sound Tracker перенесена на удобный адрес, внесен код установки прерывания по адресу $BFBF.
Опять незадача: фикс сбился. Причина в JP $BFBF(10 тактов). Ненужная команда была убрана - OUT($FE),A.
Теперь осталось написать загрузчик, который распаковывает сжатые данные.Shiny48pfix.7z+исходники
Комментарии
Трекбэков
Всего трекбэков 0
Ссылка трекбэка: