Сообщение от
artyr_n
Читать только A0 это интересная идея, но просматривая листинг загрузчика я там увидел что проверка наличия ПЗУ в векторе это вычитывание с какогото адреса подряд 55 АА, так что в первый момент все равно нужно будет анализировать больше чем одну линию
тут похоже более глубокая проблемма
и надо дизассемблировать ВСЕ вырианты ПЗУ
т.к. тот код что я приводил выше из одного из них, и в нём нет такой проверки!
и похоже есть несколько вариантов !!
Однакое если считать что у вас всегда стоит тот код что проверяет 0x55aa
то просто сделать чтобы первые два байта что выдаёт эмулятор были именно 0x55 0xAA
Т.о. вообще игнорируем шину адреса (кроме A0)
и выдаём именно те байты которые ожидает загрузчик.
Если вариантов всегда 2 то можно просто добавить кнопку "выбора типа ПЗУ".
Врядли у реального пользователя больше 1го пзу на реальной машине и просто можно выбрать нужный.
По поводу детекта ресета - это возможно проблемма
как вариант забить на это дело (ввести кнопку ресета эмулятора)
или посмотреть нет ли там на разъеме чего-то что таки зависит от ресета.
По поводу главного заргузчика:
как вариант написать более сложный код загрузчика
который детектирует загрузились ли два "лишних байта" и обрабатывает это.
речь вот о чём,
если загрузчик проверяет наличие 0x55aa то загрзится код без этих байт
если же загрузчик не проверяет то получим в памяти да лишних байта
(и код как бы сдвинут на два байта)
55AA ->
mov d,l
xra d
т.е. ничего опасного если на них попадёт управление.
а дальше определить есть ли эти байты и выполнить две ветки начального загрузчика.
каждая для своего типа.
немного усложняем код, зато меньше завивимости.
даже набрасал что то (правда в мнемоники z80)
он пересылает "основной загрузчик" на постоянное место
хотя как вижу можно и в 0й адресс его грузить.
Код:
nop
nop
nop
nop
nop
nop
nop
ld de,0
ld hl,0
ld a,(hl)
cp 0x55
jp nz,no55AA
inc hl
ld a,(hl)
cp 0x55
jp nz,no55AA
nop ;если код сдвинут попадем сюда
nop
code55AA:
ld de,2
nop ;если код сдвинут попадем сюда
nop
no55AA:
ld hl,code
add hl,de ;сдвинуть на 2 байта
ld de,newCODE
ld bc,LEN
nop ;если код сдвинут попадем сюда
nop
.a1:
ld a,(hl)
ld (de),a
inc hl
inc de
dec bc
ld a,c
or b
jp nz,.a1
jp newCODE