简体   繁体   English

6510/6502 C64 键盘输入打印到屏幕并存储在内存中的问题

[英]6510/6502 C64 Keyboard input print to screen & store in memory issue

getting somewhere with this but by looking at the Screen Display section of my c64 Reference book, the characters I am typing in below are printing to screen correctly, but when recalled to be printed later again from memory they are not.有了这个,但是通过查看我的 c64 参考书的屏幕显示部分,我在下面输入的字符正确打印到屏幕上,但是当稍后从内存中再次打印时,它们不是。 :( :(

Basically, if type in an "A" I get the black spade symbol, "S" comes back as a heart symbol and "X" comes back as a club.基本上,如果输入“A”,我会得到黑色的黑桃符号,“S”作为心形符号返回,“X”作为俱乐部符号返回。 I must state this doen't happen as I type in as the user, and see my text printed to screen - that works great.我必须声明这在我以用户身份输入时不会发生,并且看到我的文本打印到屏幕上 - 效果很好。 It only goes wrong when I hit RETURN as the user and the characters that I think are stored at $1000,x (with inx happening after ever key press) displaying as symbols further down in the allocated area, followed by @ symbols to make up the rest of what I can see is empty spaces in the rest of the byte.只有当我作为用户点击 RETURN 并且我认为存储在 $1000,x 的字符(每次按键后都会发生 inx)显示为分配区域中更下方的符号时,它才会出错,然后是 @ 符号来组成我能看到的其余部分是字节其余部分中的空白空间。

Excuse the messy/over-newb-engineered code, I have been learning Assembly for just under a week or so - with only BASIC as a sorta foundation.请原谅凌乱/过度设计的代码,我已经学习了不到一周左右的时间 - 只有 BASIC 作为基础。

I ran the debugger and when entering "ASX" into the program, the memory location via the debugger looked like this...我运行了调试器,当在程序中输入“ASX”时,调试器的内存位置看起来像这样......

41 53 58 00 00 00 00 00 00 00 00 00 00 00 00 00 ♠♥♣@@@@@@@@@@@@@ 41 53 58 00 00 00 00 00 00 00 00 00 00 00 00 00 ♠♥♣@@@@@@@@@@@@@@

;USER INPUTS NAME OF CORPORATION

getnamea
        ldx #00
        ldy #00
        jmp getnameb

getnameb
       ; ldx $0900   ; transfer the x value here to a safe address

        jsr $FF9F   ;SCNKEY, place ASCII character into keyboard queue
        jsr $FFE4   ;GETIN, this places the ASCII value into the Accumulator 

        BEQ getnameb ;loop until keys are pressed. Branch if zero
        
        JSR $FFD2    ;CHROUT, print it to the screen as it is being typed in.
        CMP #13      ; CMP looks for the carrige return
        BEQ Name2    ; if we find it we branch using BEQ to name2 for msg2 
        ldx $0900
        STA $1000,x  ; also store what is being typed in consecutively? 
        INX
        INY
        stx $0900
        JMP getnameb ; if we don't we loop!        
                    
                    ; * store exactly what has been typed by the user into a place 
                    ;   in memory and give it the varible name: corpname
                    ; * display some more program defined text that includes the 
                    ; users inputted string

msg1    text 'What is the name of your corporation?'
        byte 0

;------------------------------------------------------------------------------------------------------

;PRINT MSG 2

Name2   LDX #00       ; load into the x registry zero


cycle2  LDA msg2,x    ; load into A the msg2, the x sequence.
        CMP #00       ; compare memory and accumulator to the value 0?    
        BEQ reveal   ; branch/jump if the result in A is 0
        STA 1704,x    ; where on the screen does msg2 start?
        INX           ; inc x to move the print along 1 space?
        
        JMP cycle2    ; jump back to the beginning of cycle and do it all again.

; WHAT DOES THIS DO WHEN WE JUST CALL THE ADDRESS $1000?

reveal  LDX #00
reveal1 
        LDA $1000,x
        STA 1784,x
        INX
        TXA
        CMP #16
        BEQ exit
        JMP reveal1
exit    jsr *



msg2    text `New astro mining corp registration...
        byte 0


Problem solved, but I would love to know if there was a better way of doing this...问题解决了,但我很想知道是否有更好的方法来做到这一点......

        CLC            ; clear the carry
        LDA $1000,x    ; load the character
        SBC #63        ; subtract 63 from it to get the right character in the first set

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM