1

提前道歉,因为这是一个老话题。我正在阅读以下关于任天堂徽标数据如何在引导期间被复制到 v-ram 之前如何解压缩和缩放的帖子,有趣的是,写入的数据确实看起来很乱(正如提问者所指出的那样),我已经尽力了(使用我编写的 gb 模拟器)产生相同的输出......但没有成功。

发帖链接

有问题的汇编代码是引导 rom 的这一部分:

LD C,A      ; $0095  "Double up" all the bits of the graphics data
    LD B,$04        ; $0096     and store in Video RAM
Addr_0098:
    PUSH BC     ; $0098
    RL C            ; $0099
    RLA         ; $009b
    POP BC      ; $009c
    RL C            ; $009d
    RLA         ; $009f
    DEC B           ; $00a0
    JR NZ, Addr_0098    ; $00a1
    LD (HL+),A      ; $00a3
    INC HL      ; $00a4
    LD (HL+),A      ; $00a5
    INC HL      ; $00a6
    RET

作为对上述帖子的回复,v-ram 的输出显示为:

8000: 00000000000000000000000000000000
8010: F000F000FC00FC00FC00FC00F300F300
8020: 3C003C003C003C003C003C003C003C00
8030: F000F000F000F00000000000F300F300
8040: 000000000000000000000000CF00CF00
... and so on

谁能解释这个输出是如何产生的,如果它确实是正确的?

提前谢谢了。

PS 假设 Nintendo 标志被明确地(在一些 C/Java 代码中)复制到 v-ram,0104h在引导过程中从地址开始以测试引导程序。

.DB $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83,$00,$0C,$00,$0D 
.DB $00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6,$DD,$DD,$D9,$99 
.DB $BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$B9,$33,$3E 
4

1 回答 1

1

在浏览我的代码并看到一个潜在的愚蠢错误(可能是几个或两个)之后,我终于能够得到与上面相同的结果。请考虑解决此问题。

基本上,在更改 INC n、Add n 和 Sub n 的设置后,我忘记更新 F 寄存器。

所以从技术上讲,上面的输出似乎是正确的。

于 2020-11-03T02:02:06.803 回答