4

这个问题是关于旧 MSX 计算机上的 z80 和盒式 ROM 存储。

我正在 PC 上制作 MSX 游戏并使用 openMSX 进行仿真和测试。我正在制作 32K ROM 盒式磁带。MSX 标准将这 32 个 ROM 内存分成两个 16K 页。我的基本问题是如何在 MSX-1 计算机上使用 ROM 磁带库?-MSX 插槽扩展和内存库描述很复杂-我只想在我的磁带场景中使用一个简单的示例。基本上,我想使用 ROM 银行在 MSX 屏幕 2 中从墨盒中绘制两个不同的图像 - 每个图像大约 12K,因此每个图像都需要在墨盒中拥有自己的 16K ROM 银行。

我现在将更详细地描述他的问题。我想使用来自 chibiakumas.com 网站的链接中的位图模拟代码,该代码使用屏幕 2 中的所有 3 个图块库,以便 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 代码不会出现如下所示 - 代码不会加载屏幕(它是相同的屏幕或预期的图像),请参阅屏幕截图("Screenshot forNON WorkingCode-Sprite2code NOT afteroriginalcode") 及其代码 ("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 银行。

4

0 回答 0