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. :(
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. 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.
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.
I ran the debugger and when entering "ASX" into the program, the memory location via the debugger looked like this...
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...