; E04-S05: print and fault runtime test in x128. ; ; Runs in the D129 generated-program mapping (CR=$0E), where the KERNAL and ; I/O are visible and $B800-$BFFF is RAM; all code and BSS stay below $4000. ; The screen is cleared first, then: ; ; NOVA128 PRINT TEST ; TEXT OK ; BYTE 0 7 255 ; WORD 0 12345 65535 ; INT -1 -32768 32767 ; BOOL FALSE TRUE ; CHAR A ; RUNTIME FAULT R001 .. R005 ; ; The faults run last, so the mailbox ends in MB_ST_FAIL with code 5 and ; address $1234. The host checks the screen rows and the mailbox fields. .setcpu "6502" .include "../../src/common/c128.inc" .include "../../src/common/mailbox.inc" .include "../../src/common/print.inc" .include "../../src/common/faults.inc" .import pr_char, pr_cr, pr_text, pr_byte, pr_word, pr_int, pr_bool .import flt_report .segment "LOADADDR" .word $1C01 .segment "EXEHDR" .word basic_end .word 10 .byte $9E .byte "7181" .byte $00 basic_end: .word $0000 .segment "MAILBOX" .res MB_SIZE .macro TEXT text, len lda #text ldy #len jsr pr_text .endmacro .macro SPACE lda #PR_SPACE jsr pr_char .endmacro .segment "STARTUP" .export test_entry, test_end test_entry: php sei ldx #MB_SIZE - 1 lda #$00 @clr: sta MB_BASE,x dex bpl @clr lda #MB_MAGIC0_VALUE sta MB_MAGIC0 lda #MB_MAGIC1_VALUE sta MB_MAGIC1 lda #MB_PROD_PROGRAM sta MB_PRODUCER lda #MB_ST_RUNNING sta MB_STATUS lda MMU_CR sta saved_cr lda MMU_RCR sta saved_rcr lda #CR_RAM0_KERNAL sta MMU_CR lda #PR_CLEAR jsr pr_char ; ------------------------------------------------------- print tests TEXT title, 18 jsr pr_cr TEXT text_ok, 7 jsr pr_cr TEXT label_byte, 5 lda #0 jsr pr_byte SPACE lda #7 jsr pr_byte SPACE lda #255 jsr pr_byte jsr pr_cr TEXT label_word, 5 lda #0 ldx #0 jsr pr_word SPACE lda #<12345 ldx #>12345 jsr pr_word SPACE lda #$FF ldx #$FF jsr pr_word jsr pr_cr TEXT label_int, 4 lda #$FF ; -1 ldx #$FF jsr pr_int SPACE lda #$00 ; -32768 ldx #$80 jsr pr_int SPACE lda #$FF ; 32767 ldx #$7F jsr pr_int jsr pr_cr TEXT label_bool, 5 lda #$00 jsr pr_bool SPACE lda #$01 jsr pr_bool jsr pr_cr TEXT label_char, 5 lda #$41 ; 'A' jsr pr_char jsr pr_cr ; ------------------------------------------------------- fault tests lda #FLT_NULL ldx #$11 ldy #$22 jsr flt_report lda #FLT_BOUNDS ldx #$22 ldy #$33 jsr flt_report lda #FLT_DIV0 ldx #$33 ldy #$44 jsr flt_report lda #FLT_STACK ldx #$44 ldy #$55 jsr flt_report lda #FLT_HEAP ldx #$34 ldy #$12 jsr flt_report ; The print and fault calls must not disturb the generated-program map. lda #$00 sta MB_DATA lda MMU_CR cmp #CR_RAM0_KERNAL bne @map_done lda MMU_RCR cmp saved_rcr bne @map_done lda #$01 sta MB_DATA @map_done: lda saved_cr sta MMU_CR plp rts .segment "RODATA" title: .byte "NOVA128 PRINT TEST" text_ok: .byte "TEXT OK" label_byte: .byte "BYTE " label_word: .byte "WORD " label_int: .byte "INT " label_bool: .byte "BOOL " label_char: .byte "CHAR " .segment "BSS" saved_cr: .res 1 saved_rcr: .res 1 test_end: