; E04-S06: parse calls.n8, run the emitted first method, and check that ; `self.n` and `self.tick()` both went through members.s. ; ; The first emitted body is Counter.both at cg_code+0. It receives self in ; A/X, increments self.n, then JSRs the later tick method. The fixture passes ; an object whose field n begins at +2. ; ; Mailbox data: +0 diagnostics, +1 em_bad, +2 n, +3 cg_len, +4 cg_err, ; +5 fl_err. FAIL stage: 1 load, 2 diagnostics, 3 emitter, 4 result. .setcpu "6502" .include "../../src/common/c128.inc" .include "../../src/common/mailbox.inc" .include "../../src/common/formats.inc" .import mmu_init, mmu_bank0, mmu_shutdown .import src_load, src_dos_code, src_kernal_err .import names_init .import diag_init, diag_finish, diag_screen .import parse_file .import em_on, em_bad .import cg_code, cg_len, cg_err .import fl_err .macro ON_ZERO target beq :+ jmp target : .endmacro .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 .segment "STARTUP" .export test_entry 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_COMPILER sta MB_PRODUCER lda #MB_ST_RUNNING sta MB_STATUS jsr mmu_init jsr mmu_bank0 lda #name_src ldy #name_src_len jsr src_load cmp #$00 ON_ZERO @fail_load jsr names_init lda #name_src ldy #name_src_len jsr diag_init lda #$00 sta diag_screen lda #$01 sta em_on jsr parse_file jsr diag_finish sta MB_DATA+0 lda em_bad sta MB_DATA+1 lda cg_len sta MB_DATA+3 lda cg_err sta MB_DATA+4 lda fl_err sta MB_DATA+5 lda MB_DATA+0 ON_ZERO @fail_diag lda em_bad ON_ZERO @fail_emit lda cg_err ON_ZERO @fail_cg lda fl_err ON_ZERO @fail_cg jmp @run @fail_cg: lda #3 jmp @fail @run: ldx #3 ; descriptor + zeroed byte field lda #$00 @obj: sta object,x dex bpl @obj lda #object jsr cg_code lda object+2 sta MB_DATA+2 cmp #$02 beq @pass lda #4 jmp @fail @fail_load: sta MB_DATA+4 lda src_dos_code sta MB_DATA+5 lda src_kernal_err sta MB_DATA+6 lda #1 jmp @fail @fail_diag: lda #2 jmp @fail @fail_emit: lda #3 @fail: sta MB_CODE lda #$00 sta MB_CODE+1 lda #MB_ST_FAIL sta MB_STATUS jmp @done @pass: lda #MB_ST_PASS sta MB_STATUS @done: jsr mmu_shutdown plp rts .segment "RODATA" name_src: .byte "CALLS.N8" name_src_len = * - name_src .segment "BSS" object: .res 4