mirror of
https://github.com/Klaus2m5/6502_65C02_functional_tests.git
synced 2025-01-14 19:31:03 +00:00
179 lines
4.1 KiB
Plaintext
179 lines
4.1 KiB
Plaintext
|
;**** report 6502 funtional test errors to standard I/O ****
|
||
|
;
|
||
|
;this include file is part of the 6502 functional tests
|
||
|
;it is used when you configure report = 1 in the tests
|
||
|
;
|
||
|
;to adopt the standard output vectors of your test environment
|
||
|
;you must modify the rchar and rget subroutines in this include
|
||
|
;
|
||
|
;I/O hardware may have to be initialized in report_init
|
||
|
|
||
|
;print message macro - \1 = message location
|
||
|
rprt macro
|
||
|
ldx #0
|
||
|
lda \1
|
||
|
loop\?
|
||
|
jsr rchar
|
||
|
inx
|
||
|
lda \1,x
|
||
|
bne loop\?
|
||
|
endm
|
||
|
|
||
|
;initialize I/O as required (example: configure & enable ACIA)
|
||
|
report_init
|
||
|
;nothing to initialize
|
||
|
rprt rmsg_start
|
||
|
rts
|
||
|
|
||
|
;show stack (with saved registers), zeropage and absolute memory workspace
|
||
|
;after an error was trapped in the test program
|
||
|
report_error
|
||
|
;save registers
|
||
|
php
|
||
|
pha
|
||
|
txa
|
||
|
pha
|
||
|
tya
|
||
|
pha
|
||
|
cld
|
||
|
;show stack with index to registers at error
|
||
|
rprt rmsg_stack
|
||
|
tsx
|
||
|
inx
|
||
|
lda #1 ;address high
|
||
|
jsr rhex
|
||
|
txa ;address low
|
||
|
jsr rhex
|
||
|
rstack jsr rspace
|
||
|
lda $100,x ;stack data
|
||
|
jsr rhex
|
||
|
inx
|
||
|
bne rstack
|
||
|
jsr rcrlf ;new line
|
||
|
;show zero page workspace
|
||
|
lda #0
|
||
|
jsr rhex
|
||
|
lda #zpt
|
||
|
tax
|
||
|
jsr rhex
|
||
|
rzp jsr rspace
|
||
|
lda 0,x
|
||
|
jsr rhex
|
||
|
inx
|
||
|
cpx #zp_bss
|
||
|
bne rzp
|
||
|
jsr rcrlf
|
||
|
;show absolute workspace
|
||
|
lda #hi(data_segment)
|
||
|
jsr rhex
|
||
|
lda #lo(data_segment)
|
||
|
jsr rhex
|
||
|
ldx #0
|
||
|
rabs jsr rspace
|
||
|
lda data_segment,x
|
||
|
jsr rhex
|
||
|
inx
|
||
|
cpx #(data_bss-data_segment)
|
||
|
bne rabs
|
||
|
;ask to continue
|
||
|
rprt rmsg_cont
|
||
|
rerr1 jsr rget
|
||
|
cmp #'C'
|
||
|
bne rerr1
|
||
|
;restore registers
|
||
|
pla
|
||
|
tay
|
||
|
pla
|
||
|
tax
|
||
|
pla
|
||
|
plp
|
||
|
rts
|
||
|
|
||
|
;show test has ended, ask to repeat
|
||
|
report_success
|
||
|
if rep_int = 1
|
||
|
rprt rmsg_priority
|
||
|
lda data_segment ;show interrupt sequence
|
||
|
jsr rhex
|
||
|
jsr rspace
|
||
|
lda data_segment+1
|
||
|
jsr rhex
|
||
|
jsr rspace
|
||
|
lda data_segment+2
|
||
|
jsr rhex
|
||
|
endif
|
||
|
rprt rmsg_success
|
||
|
rsuc1 jsr rget
|
||
|
cmp #'R'
|
||
|
bne rsuc1
|
||
|
rts
|
||
|
|
||
|
;input subroutine
|
||
|
;get a character from standard input
|
||
|
;adjust according to the needs in your test environment
|
||
|
rget ;get character in A
|
||
|
;rget1
|
||
|
; lda $bff1 ;wait RDRF
|
||
|
; and #8
|
||
|
; beq rget1
|
||
|
;not a real ACIA - so RDRF is not checked
|
||
|
lda $bff0 ;read acia rx reg
|
||
|
;the load can be replaced by a call to a kernal routine
|
||
|
; jsr $ffcf ;example: CHRIN for a C64
|
||
|
cmp #'a' ;lower case
|
||
|
bcc rget1
|
||
|
and #$5f ;convert to upper case
|
||
|
rget1 rts
|
||
|
|
||
|
;output subroutines
|
||
|
rcrlf lda #10
|
||
|
jsr rchar
|
||
|
lda #13
|
||
|
bne rchar
|
||
|
|
||
|
rspace lda #' '
|
||
|
bne rchar
|
||
|
|
||
|
rhex pha ;report hex byte in A
|
||
|
lsr a ;high nibble first
|
||
|
lsr a
|
||
|
lsr a
|
||
|
lsr a
|
||
|
jsr rnib
|
||
|
pla ;now low nibble
|
||
|
and #$f
|
||
|
|
||
|
rnib clc ;report nibble in A
|
||
|
adc #'0' ;make printable 0-9
|
||
|
cmp #'9'+1
|
||
|
bcc rchar
|
||
|
adc #6 ;make printable A-F
|
||
|
|
||
|
;send a character to standard output
|
||
|
;adjust according to the needs in your test environment
|
||
|
;register X needs to be preserved!
|
||
|
rchar ;report character in A
|
||
|
; pha ;wait TDRF
|
||
|
;rchar1 lda $bff1
|
||
|
; and #$10
|
||
|
; beq rchar1
|
||
|
; pla
|
||
|
;not a real ACIA - so TDRF is not checked
|
||
|
sta $bff0 ;write acia tx reg
|
||
|
;the store can be replaced by a call to a kernal routine
|
||
|
; jsr $ffd2 ;example: CHROUT for a C64
|
||
|
rts
|
||
|
|
||
|
rmsg_start
|
||
|
db 10,13,"Started testing",10,13,0
|
||
|
rmsg_stack
|
||
|
db 10,13,"regs Y X A PS PCLPCH",10,13,0
|
||
|
rmsg_cont
|
||
|
db 10,13,"press C to continue",10,13,0
|
||
|
rmsg_success
|
||
|
db 10,13,"All tests completed, press R to repeat",10,13,0
|
||
|
if rep_int = 1
|
||
|
rmsg_priority
|
||
|
db 10,13,"interrupt sequence (NMI IRQ BRK) ",0
|
||
|
endif
|
||
|
|