Chwe
12.12.2023, 18:36
Будет небесполезна помощь знатоков esxdos. У кого-нибудь получилось из dot command вызывать $0562 (https://skoolkid.github.io/rom/asm/0556.html), процедуру загрузки с ленты (https://github.com/z88dk/z88dk/blob/master/libsrc/_DEVELOPMENT/arch/zx/tape/z80/asm_zx_tape_load_block.asm) из штатного ПЗУ? Это, вообще, теоретически возможно? И, если получилось, поделитесь примером кода.
Детали: есть существующий код (C, z88dk) который хочется иметь в виде dot command для esxdos. Сделали вызов как положено через RST $18 + DW $0562, но всё падает при попытке чтения с ленты. Как отлаживать на железе я пока не в курсе, а вот при трассировке в FUSE получается так, что сразу после корректного перехода в 48k ПЗУ DivMMC подставляется обратно и, по сути, начинается выполнение случайного кода. Последствия предсказуемые, всё падает. Несколько смущает то, что в $3DFD вместо ожидаемого $C9 (RET) оказывается какой-то мусор и оттуда случайный код и начинается. Но причина это или следствие, моих знаний недостаточно пока для понимания.
Попробовал «заходить» в ПЗУ 48 не по адресу $0562, который перехватывается esxdos’ом, а позже (скопировав код от $0562 до точки входа себе в проект), но там почему-то быстро происходит такой-же переход обратно в DivMMC ПЗУ. Поздно было, не отследил, откуда выбрасывает обратно в DivMMC, следующий заход уже на выходных.
И, нет, TAP файл не подключён, все эксперименты для чистоты делаются на свежезагруженном компьютере/эмуляторе. Интересно, что если использовать RST $18, то падает сразу, а если наплевать на esxdos и дёргать $0562 напрямую (который, получается, где-то в ПЗУ DivMMC), то там почему-то попытка что-то загрузить есть, но после пилотного тона падает. Судя по коду в ПЗУ DivMMC, оно и без RST $18 должно выкидывать на $0564 в 48k ПЗУ, если там TAP файл не подключён. Или я ошибаюсь?
P.S. кто по-англицки читает, тот мог видеть такой же вопрос на SC (https://www.spectrumcomputing.co.uk/forums/viewtopic.php?t=10637). Это вопрос примерно про один и тот же кусок кода, просто он спрашивает в англоязычном месте, а я тут.
Детали: есть существующий код (C, z88dk) который хочется иметь в виде dot command для esxdos. Сделали вызов как положено через RST $18 + DW $0562, но всё падает при попытке чтения с ленты. Как отлаживать на железе я пока не в курсе, а вот при трассировке в FUSE получается так, что сразу после корректного перехода в 48k ПЗУ DivMMC подставляется обратно и, по сути, начинается выполнение случайного кода. Последствия предсказуемые, всё падает. Несколько смущает то, что в $3DFD вместо ожидаемого $C9 (RET) оказывается какой-то мусор и оттуда случайный код и начинается. Но причина это или следствие, моих знаний недостаточно пока для понимания.
Попробовал «заходить» в ПЗУ 48 не по адресу $0562, который перехватывается esxdos’ом, а позже (скопировав код от $0562 до точки входа себе в проект), но там почему-то быстро происходит такой-же переход обратно в DivMMC ПЗУ. Поздно было, не отследил, откуда выбрасывает обратно в DivMMC, следующий заход уже на выходных.
И, нет, TAP файл не подключён, все эксперименты для чистоты делаются на свежезагруженном компьютере/эмуляторе. Интересно, что если использовать RST $18, то падает сразу, а если наплевать на esxdos и дёргать $0562 напрямую (который, получается, где-то в ПЗУ DivMMC), то там почему-то попытка что-то загрузить есть, но после пилотного тона падает. Судя по коду в ПЗУ DivMMC, оно и без RST $18 должно выкидывать на $0564 в 48k ПЗУ, если там TAP файл не подключён. Или я ошибаюсь?
P.S. кто по-англицки читает, тот мог видеть такой же вопрос на SC (https://www.spectrumcomputing.co.uk/forums/viewtopic.php?t=10637). Это вопрос примерно про один и тот же кусок кода, просто он спрашивает в англоязычном месте, а я тут.