mirror of
https://github.com/koute/pinky.git
synced 2025-04-02 10:31:50 -04:00
128 lines
1.8 KiB
Text
128 lines
1.8 KiB
Text
; Utilities for test ROMs
|
|
|
|
result = $f8
|
|
|
|
default_test_name:
|
|
.db 0
|
|
.default test_name = default_test_name
|
|
|
|
; Report error if branch with given condition would be taken
|
|
error_if_ne:
|
|
bne report_final_result_
|
|
rts
|
|
error_if_eq:
|
|
beq report_final_result_
|
|
rts
|
|
error_if_mi:
|
|
bmi report_final_result_
|
|
rts
|
|
error_if_pl:
|
|
bpl report_final_result_
|
|
rts
|
|
error_if_cc:
|
|
bcc report_final_result_
|
|
rts
|
|
error_if_cs:
|
|
bcs report_final_result_
|
|
rts
|
|
error_if_vc:
|
|
bvc report_final_result_
|
|
rts
|
|
error_if_vs:
|
|
bvs report_final_result_
|
|
rts
|
|
|
|
; Report passing result
|
|
tests_passed:
|
|
lda #1
|
|
sta result
|
|
; Report final result code and wait forever.
|
|
; To have a custom string printed as the test name,
|
|
; define the label test_name to a null-terminated string:
|
|
; test_name: .db "TEST NAME",0
|
|
report_final_result:
|
|
report_final_result_:
|
|
sei ; disable interrupts
|
|
lda #0
|
|
sta $2000
|
|
jsr init_runtime
|
|
|
|
lda test_name
|
|
beq no_name
|
|
jsr debug_char
|
|
ldx #1
|
|
: lda test_name,x
|
|
beq no_name
|
|
jsr debug_char_no_wait
|
|
inx
|
|
jmp -
|
|
|
|
no_name:
|
|
jsr debug_newline
|
|
|
|
lda result
|
|
bne +
|
|
ldx #internal_error_str.msb
|
|
ldy #internal_error_str.lsb
|
|
jsr print_str
|
|
jmp forever
|
|
: cmp #1
|
|
beq test_passed
|
|
|
|
ldx #failed_str.msb
|
|
ldy #failed_str.lsb
|
|
jsr print_str
|
|
|
|
lda result
|
|
cmp #10
|
|
bcc +
|
|
clc
|
|
adc #-10
|
|
pha
|
|
lda #'1'
|
|
jsr debug_char_no_wait
|
|
pla
|
|
: clc
|
|
adc #'0'
|
|
jsr debug_char_no_wait
|
|
report_beeps:
|
|
lda result
|
|
jsr debug_beeps
|
|
jmp forever
|
|
|
|
test_passed:
|
|
ldx #passed_str.msb
|
|
ldy #passed_str.lsb
|
|
jsr print_str
|
|
jmp report_beeps
|
|
|
|
passed_str:
|
|
.db "PASSED",0
|
|
failed_str:
|
|
.db "FAILED: #",0
|
|
internal_error_str:
|
|
.db "INTERNAL ERROR",0
|
|
.code
|
|
|
|
; Print null-terminated string at X*$100+Y
|
|
print_str:
|
|
sty <0
|
|
stx <1
|
|
jsr wait_vbl
|
|
ldy #0
|
|
lda (0),y
|
|
: iny
|
|
jsr debug_char_no_wait
|
|
lda (0),y
|
|
bne -
|
|
rts
|
|
.code
|
|
|
|
.default nmi = default_nmi
|
|
.default irq = default_irq
|
|
.code
|
|
default_irq:
|
|
bit $4015
|
|
default_nmi:
|
|
rti
|
|
|