?

Log in

No account? Create an account

Категория: it

догнало

Немного поковырялся в игрушке из детства -- The Fairy Land Story для MSX. Ничего сверхъестественного, но две вещи зацепили.
Первая -- в openmsx нет интерфейся для gdb. В mainline gdb z80 в общем-то тоже не поддерживается, но какие-то порты лёгким гуглением находятся. Есть встроенный в openmsx отладчик, но это совсем другая песня. Можно на досуге попробовать воткнуть в openmsx gdbstub.
Вторая -- вот такая прекрасная функция печати, выводящая 0-терминированную строку идущую в памяти следом за вызовом этой функции, и возвращающаяся по адресу за концом строки:

     5d6:       e3              ex (sp),hl
     5d7:       7e              ld a,(hl)
     5d8:       23              inc hl
     5d9:       b7              or a
     5da:       28 05           jr z,0x05e1
     5dc:       cd fe 45        call 0x45fe
     5df:       18 f6           jr 0x05d7
     5e1:       e3              ex (sp),hl
     5e2:       c9              ret
     ...
    1871:       cd d6 45        call 0x45d6
    1874:       52 4f 55 4e 44 3a 00  .asciz 'ROUND:'
    187b:       3a bf e1        ld a,(0xe1bf)


Адрес вызова не совпадает с адресом функции в ROM из-за нехитрого ремеппинга страниц памяти.
По ходу узнал, как устроены двоичные патчи IPS, нашёл и активировал встроенные читы "no hit" и "endless" и научился переходить на произвольный уровень записывая байт в память по адресу 0xe1bf.