Так он до ret m не доходит. Там чуть-чуть до reti, на нём и выходит.
Вид для печати
ret m это когда из обработчика выйдет. В общем причина понятна. Дело в процессоре и формирователе инта на DD53. Сейчас проверил на пентеве простенькую программку:
Все это выполняется при включенных прерываниях, а обработчик прерываний меняет цвет бордюра. В эмуляторе бордюр постоянно мигает, на реале цвет меняется где-то раз в 10-15 секунд. То есть во время выполнения команды LD A,R прерывание не срабатывает. А на КАЕ длительность ИНТа 2 цикла M1 и он не срабатывает в цикле LD A,R:RET M:JR $-3Код:LOOP: DUP 10000
LD A,R
EDUP
JP LOOP
а должна быть 1, если прерывания разрешены. Похоже исправили очень просто - команды не реагируют на прерывание.Цитата:
If an interrupt occurs during execution of this instruction, the parity flag contains a 0
Blade, ну вот и разобрались. :)
Сделал пропатченную прошивку КАЯ. Это идея VELESOFT'та по обезглючиванию команды LIST в TR-DOS'е. Всё подробно расписано вот тут. Использовал вариант патча by savelij.
Прошивка сделана на положение перемычки JP5 в 10-11.
#0000- #3FFF Basic 128
#4000- #7FFF Basic 48 (HL' patch)
#8000- #BFFF Service KRAMIS v.03
#C000- #FFFF TR-DOS v5.04T (HL' patch)
Так же пропатчен BASIC_48 таким же VELESOFT'овским патчем (на всякий случай).
Прошивка проверена, всё работает офигенно! Командой LIST теперь можно пользоваться безбоязненно, прерывая её в любом месте и без проблем выходя по RETURN. Прошивка в аттаче.Цитата:
All this ZX ROMS contain patch for refresh value of register HL' after return from machine code to ZX rom. With this patched roms work all tr-dos versions correct.(after break LIST command ZX don't crash after command RETURN).
PATCH IN ZX ROMS:
ORG #2D34
CALL PATCH
ORG #3C97 ;(adress can be different on some ZX roms)
PATCH
EXX
LD HL,#2758
EXX
JP #2AB6
Может будут у кого мысли.
Игра сразу после полной загрузки (мигнул красный бордер) сбрасывается в BASIC_48 (или через некоторое время). Только при включенном TURBO и на недавно включенном компе (холодный). Если выключить TURBO, то нет никаких проблем даже на холодном компе. Комп сбрасывается на участке кода, который ожидает PRESS ANY KEY. Выяснилось с помощью ТЕНЕВИКА.
Вот код.
В остальном комп работает исключительно надёжно.Цитата:
LOOP: EI
HALT
XOR A
IN A,(#FE)
CPL
AND #1F
JR NZ, LOOP
Были мысли, что встроенный контроллер PS/2-клавы всё-таки генерит в этом случае и при включенном TURBO кучу WAIT'ов, хотя залита безвейтовая прошивка v1.3 и это как-то заглючивает комп, но сегодня отключил ps/2-клаву и подключил механическую (caro говорит, что если клава не подключена к контроллеру, то он полностью отключается от схемы и не оказывает ни какого влияния), но комп всё равно сбросился. Если комп прогревается, то при включенной ТУРБО, время до сброса значительно увеличивается.