Есть ли у Вас пример кода на ассемблере либо на бейсике, который делает с Робиком подобную подмену ПЗУ? Что-то у меня ничего не получается, Робик всегда виснет при команде OUT 15,0. Спасибо!
Вид для печати
Я так понимаю что сначала загрузчик с ленты полностью размещается в оперативной памяти, затем происходит out 15, 0, и только потом файл пзу записывется с адреса 0x0000. Когда -то у меня была такая кассета для робика, скорее всего не сохранилась, посмотрю когда поеду к родителям.
Пишется с кассеты в память, с адреса 49152, образ ПЗУ, потом OUT 15,0 и переброс по LDIR из памяти в область ПЗУ, следующая комманда JP 0
спасибо!
я же все правильно делал, только слона-то не заметил, забыл саму команду LDIR дописать для переброски назад))
Вот такой код сработал для меня.
После запуска могу менять содержимое ПЗУ
LD HL,0
LD DE,30000
LD BC,16384
LDIR
LD A,0
OUT (15),A
LD HL,30000
LD DE,0
LD BC,16384
LDIR
JP 0
а еще, первые 5 байт остаются неперезаписываемыми почему-то
Там, в коде калькулятора, есть ошибка, И из за неё перезаписываются первые байты теневого ПЗУ. Стандартное ПЗУ не возможно так просто перезаписать.
Попробуйте после нажатия ресет, сделать OUT 15,0 и rendomise USR 0 увидите. Теневое, до нажатия ресет, должно уже быть в памяти.
что сделал я
запустил такую программу на Робике:
LD HL,0
LD DE,30000
LD BC,16384
LDIR
LD A,0
OUT (15),A
LD HL,30000
LD DE,0
LD BC,16384
LDIR
JP 0
Произошел сброс
После чего я могу написать POKE 5,1 (а там было не 1) и потом прочитать оттуда 1. До запуска программы такое сделать было невозможно, так как ПЗУ не перезаписывается, только читается обычно. Но такое не прокатывает с байтами по адрессам от 0 от 4. Значения переписать нельзя, что там есть, то есть.
>Попробуйте после нажатия ресет, сделать OUT 15,0 и rendomise USR 0 увидите. Теневое, до нажатия ресет, должно уже быть в памяти
Когда бы я не нажал Ресет на Робике (две клавишы Ресет), Робик всегда возвращается в изначальное состояние, с обычным не перепезаписываемым ПЗУ, то есть мне нужно по новой проводить подобную операцию переброса информации ПЗУ в теневое ПЗУ. Ну по крайней мере мне все так показалось.
Только заметил Ваш ответ и сразу проверил на своем Робике. Просто круто. Я не ожидал. Как я сам не проверил - не знаю. Видно посмотрел что ОЗУ сбросилось на стандартное и все. А попробовать снова OUT 15,1 и увидеть измененное ПЗУ - не делал! Теперь можно будет поэкспериментировать со скоростными загрузками (2х и 3х). Будут результаты - напишу. Благодарю!
На робике запись в теневую память происходит всегда, переключение работает только на чтение, поэтому можно сделать
LD HL, 0
LD DE, 0
LD BC, 16384
LDIR
LD A, 1
OUT (15),A
RET
Там кстати и видеоконтроллер устроен точно так-же, запись происходит одновременно в две страницы, а видеоконтроллер потом читает при выводе на экран одну а процессор вторую.
Добрый день, год назад стал счастливым обладателем Робика 1990 года выпуска, с прошивкой V02 (точно такой, какой был в моём детстве, в 1993-1994). Над подключением к VGA как раз заморачиваюсь, но "вслепую" удалось сдампить прошивку (через SAVE и line-in компа). Т.к. в сети есть только V03 - выкладываю, может кому интересно
- - - Добавлено - - -
а еще, первые 5 байт остаются неперезаписываемыми почему-то
Баг Spectrum BASIC. Лично не проверял, но говорят что правится заменой байта по адресу #33FD с 00 на 2B