Как выполнить банковскую вставку картриджа ROM в сборке VASM Z80 для картриджа MSX-1 32K? - PullRequest
3 голосов
/ 04 мая 2020

Этот вопрос касается z80 и банковского обслуживания картриджей на старых компьютерах MSX.

Я делаю игру для MSX на P C и использую openMSX для эмуляции и тестирования. Я делаю картридж ROM 32K. Стандарт MSX делит эту 32 ПЗУ на две 16Кб страницы. Мой базовый c вопрос - как мне использовать банковские картриджи с ПЗУ на компьютерах MSX-1? - описание расширения слота MSX и банковского обслуживания памяти сложное - я просто хочу простой пример использования в моем сценарии картриджей. По сути, я хочу использовать банкинг ПЗУ для рисования двух разных изображений на экране MSX 2 из картриджа - каждое изображение имеет размер около 12 КБ, поэтому для каждого изображения необходим собственный банк ПЗУ размером 16 КБ в картридже.

Теперь я опишу Эта проблема более подробно. Я хочу использовать код симуляции растрового изображения в ссылке, взятой с веб-сайта chibiakumas.com, который использует все 3 банка плиток на экране 2, для MSX 1 для загрузки более одного фонового экрана для игры. Я думал, что это будет просто прямое расширение. Я опишу простое расширение, которое я пробовал - но оно не работает - я думаю, потому что ROM должен использовать банки по 16K.

Используемые файлы по этой ссылке .

Отправной точкой были исходные строки кода, приведенные ниже в конце программы с chibiakumas.com-У меня есть просто приведены соответствующие строки ниже, вместо всей программы (хотя это в ссылке) для ясного чтения. Изображение для используемого экрана является изображением с chibiakumas.com)

TestSprite:
incbin "C:\screens\MSX1Screen.RAW"
TestSpriteEnd:

TestSpritePalette:
incbin "C:\screens\MSX1Screen.RAW.COL"
TestSpritePalette_End:

Я расширил оригинальный код выше (под оригиналом я имею в виду код с chibiakumas.com) со строками ниже, которые идут ПОСЛЕ вышеупомянутого строки исходного кода

TestSprite2:
incbin "C:\screens\MSX1Screen.RAW"
TestSprite2End:

TestSprite2Palette:
incbin "C:\screens\MSX1Screen.RAW.COL"
TestSprite2Palette_End:

Этот код работает, и отображается снимок экрана с кодом («Снимок экрана для WorkingCode-Sprite2codeafteroriginalcode.png») и показывает ожидаемое изображение вместе с кодом asm («WorkingCode-» Sprite2codeafteroriginalcode ")

Но когда я делаю очень простое изменение, меняя порядок кода, чтобы код спрайта 2 не появлялся после, как показано ниже - код не загружает экран (это тот же экран или ожидаемое изображение), см. снимок экрана («Снимок экрана для NON WorkingCode-Sprite2code НЕ после исходного кода») и его код («NONWorkingCode-Sprite2codeNOTafteroriginalcode») Оба экрана / изображения одинаковы (но если код сработал, то просто замените один из экраны, чтобы загрузить два разных экрана, поменяв местами порядок кода).

TestSprite2:
incbin "C:\screens\MSX1Screen.RAW"
TestSprite2End:

TestSprite2Palette:
incbin "C:\screens\MSX1Screen.RAW.COL"
TestSprite2Palette_End:

TestSprite:
incbin "C:\screens\MSX1Screen.RAW"
TestSpriteEnd:

TestSpritePalette:
incbin "C:\screens\MSX1Screen.RAW.COL"
TestSpritePalette_End:

Я думаю, он не работает, потому что должен использоваться ROM-банкинг.

...