迭代字节并将其打印为屏幕为ASCII



,因此我试图通过存储Ascciasciicodes将ASCII打印到屏幕上在字节阵列中,但它只是在屏幕上呈现了很多。

; Message: hello
*=$033C        
        BYTE $48,$45,$49,$49,$4F 
*=$1000
START
    JSR            PRINT_MESSAGE
EXIT
    RTS
PRINT_MESSAGE
    LDX #$00        ; initialize x to 0
    LDA $033C,X     ; grab byte
    JSR $FFD2       ; render text in A with Subroutine:CLRCHN
    INX             ; Incriment X
    CPX #$05        ; We stop at 5
    BNE $1006       ; Else we loop
    RTS

进一步回答您自己的答案,您可能知道或可能尚未知道的三个点:

  1. C64使用PETSCII而不是ASCII - 它是相似的,但不是相同的。

  2. 内存区域$ 033C- $ 03FB(192字节)是盒式缓冲区 - 可以将该空间用于临时存储,但是当磁带操作发生时,它会被覆盖。

    <</p>
  3. 您可以通过逆转要显示的字节的顺序并在循环中倒数而不是向上来加快日常工作,这可以为您节省每次迭代的CMP指令。请注意,我们使用BPL,因为我们想要字节0-4,因此我们等到X下降到零以下,然后离开循环。这将消息长度限制在127个字节上,但是由于您的代码中的大多数瓶颈都在$ ffd2中的内核打印例程中,这可能是学术性的。但是,在6502编码中,降低计数和分支技术(而不是计数上的和分支)是一个常见的技巧,因为它可以节省CPU周期和字节。

    ; Message: hello
    *=$033C        
        BYTE $4F,$49,$49,$45,$48
    *=$1000
    START
        JSR            PRINT_MESSAGE
    EXIT
        RTS
    PRINT_MESSAGE
        LDX #$04        ; initialize x to message length
    GETCHAR
        LDA $033C,X     ; grab byte
        JSR $FFD2       ; render text in A with Subroutine:CLRCHN
        DEX             ; decrement X
        BPL GETCHAR     ; loop until X goes negative
        RTS
    

我弄清楚了,我用于字节数组的MEM位置是问题的过程

最新更新