Сообщение от
Q-Master
4. Исправил загрузку sna (z80 вероятно пока не работает) и более верно поддерживается заголовок.
Загрузку SNA делал я на скорую руку, так как мой набор "идеальных" снепшотов был в формате SNA. Я когда-то делал эти снепшоты из TZX-файлов: после загрузки последнего байта с "магнитофона", я передавал управление в крохотную подпрограмму опроса клавиатуры, расположенную в стеке. После того, как нажимается любая клавиша, программа переходит на адрес запуска игры. Таким образом пользователь имеет возможность посмотреть заставку и при этом не портится сама игра. Я проверил несколько таких своих снепшотов и у меня всё грузилось в PyZX.
Заметил, что в эмуляторе нет защиты записи в область ПЗУ. Вообще, чтобы всё корректно работало, и чтобы потом можно было безболезненно расширить эмулятор до 128 Кб и выше нужно, чтобы все команды чтения или записи в память использовали соответствующую процедуру, а не просто напрямую записывали или читали память. Это же потом поможет ускорить вывод графики - не придётся обновлять целиком экран. Q-Master, сделаешь?
Вон, например, как я сделал у себя в эмуляторе Intel 8080 (write_mem и read_mem):
Код:
def b00110010(): # LD (nn),A / STA nn
global pc, ticks
write_mem(read_mem(inc_pc(2)) * 256 + read_mem(inc_pc()), reg_a[0])
pc = inc_pc(3)
ticks += 13
return
def b00111010(): # LD A,(nn) / LDA nn
global pc, ticks
reg_a[0] = read_mem(read_mem(inc_pc(2)) * 256 + read_mem(inc_pc()))
pc = inc_pc(3)
ticks += 13
return