.page .sbttl /The ZAPPLE-CORE Monitor/ BEGIN: sei ldx #0FF txs ldy #0 AHEAD: IOINIC: jsr IOINIT ERROR: ldx #0FF txs lda #"*" jsr CO ; START: nop lda #START>8 pha lda #START pha jsr NXTLIN lda #"." jsr CO STAR0: jsr TI beq STAR0 sbc #"@"-1 bmi STAR0 cmp #"Z"-"@"+1 bcs ..rts asla tax lda TBL+1,X pha lda TBL,X pha ldy #0 ..rts: rts ; ;; ATSUM: jsr EXPR2 sty ptrC ..atsu: clc lda ptrC adc @ptrHL,Y sta ptrC jsr HILO bcc ..atsu lda ptrC jmp LBYTE ; ;; GOTO: sty saveBP jsr EXPR2 lda ptrD ora ptrE beq ..goto lda @ptrDE,Y sta saveBP ..goto: jmp @ptrHL ; ;; MOVE: jsr EXPR3 ..mov0: lda @ptrHL,Y sta @ptrBC,Y jsr INXBC jsr HILOX bcc ..mov0 ; ;; ZSIZE: jsr BLK jsr MEMCK SIZEHL: stx ptrL sta ptrH jmp HLSP ; ;; PUTA: jsr EXPR1 jsr NXTLIN ..put1: jsr CI and #7F cmp #3 ;ctrl C beq LFADR cmp #7F beq ..put3 sta @ptrHL,Y jsr INXHL ..put2: jsr CO jmp ..put1 ; ..put3: jsr DCXH lda @ptrHL,Y jmp ..put2 ; ;; LBYTBK: jsr LBYTE jmp BLK ; LFADR: jsr NXTLIN HLSP: jsr LADR BLK: lda #" " bne OUTCO ;jump ; PRBLNK: ldx #3 PRBL2: lda #" " PRBL3: jsr CO dex bne PRBL2 rts ;; EXPR3: jsr EXPR2 jsr EXPR0 stx ptrC sta ptrB ; ;fall into NXTLIN ; NXTLIN: lda #0D jsr CO lda #0A jsr CO jsr CSTS bne CCHK CRTS: rts ; CCHK: jsr CI and #7F cmp #3 bne CRTS ; HEXN: jsr EXPR2 clc lda ptrL adc ptrE tax lda ptrH adc ptrD jsr SIZEHL sec lda ptrL sbc ptrE tax lda ptrH sbc ptrD LADRHL: stx ptrL sta ptrH ; ;fall into LADR ; LADR: lda ptrH jsr LBYTE lda ptrL LBYTE: pha lsra lsra lsra lsra jsr LBYTE2 pla LBYTE2: jsr CONV OUTCO: jmp CO ; CONV: and #0F ora #"0" cmp #3A bcc ..lb2 adc #6 ..lb2: rts ; ;; SHOWIT: and #7F cmp #" " bcs ..typ2 lda #"." ..typ2: jsr CO ; ;fall into HILOX ; HILOX: jsr HILO bcc ..rts pla pla ..rts: rts ; HILO: jsr INXHL lda ptrH ora ptrL sec beq ..rts lda ptrE sbc ptrL lda ptrD sbc ptrH bcs ..clc sec ..rts: rts ..clc: clc rts ; ;; ; EXPR1: jsr EXPR0 stx ptrL sta ptrH rts ; ;; EXPR2: EXPR: jsr EXPR1 jsr EXPR0 stx ptrE sta ptrD rts ; EXPR0: sty regL sty regH EXPRx: jsr TI EXPRA: sta regB jsr NIBBLE bcs EXPRC ldx #4 ..loop: pha ;dad H clc lda regL adc regL sta regL lda regH adc regH sta regH pla ; dex bne ..loop ora regL sta regL jmp EXPRx ; EXPRC: lda regB jsr QCHK bcs ..exit jmp ERROR ..exit: ldx regL lda regH rts ; ;; COPCK: lda #"-" jsr CO PCHK: jsr TI QCHK: cmp #" " beq ..rts cmp #"," beq ..rts cmp #0D sec beq ..rts ..clc: clc ..rts: rts ; ;; TI: jsr CI and #7F beq ..rts cmp #0D beq ..rts jsr CO cmp #"A"-1 bcc ..rts cmp #"z"+1 bcs ..rts and #5F ..rts: rts ; ;; NIBBLE: sec sbc #"0" bcc ..sec cmp #"G"-"0" bcs ..sec cmp #0A bcc ..rts sbc #"A"-"9"-1 cmp #0A bcc ..sec ..clc: clc ..rts: rts ..sec: sec rts ; SUBS: jsr EXPR1 ..sub0: lda @ptrHL,Y jsr LBYTE jsr COPCK cmp #" " beq ..sub1 cmp #"," beq ..sub1 cmp #0D beq ..rts cmp #7F beq ..sub2 jsr exprA lda regL sta @ptrHL,Y lda regB cmp #0D beq ..rts ..sub1: jsr INXHL ..sub3: lda ptrL and #7 bne ..sub0 jsr LFADR jmp ..sub0 ..sub2: jsr DCXH jmp ..sub3 ; ..rts: rts ; ;; FILL: jsr EXPR3 ..fil0: lda ptrC sta @ptrHL,Y jsr HILO bcc ..fil0 jmp ERROR ; ;; VERIFY: jsr EXPR3 ..ver1: lda @ptrBC,Y cmp @ptrHL,Y beq ..ver2 jsr VERR jsr BLK jsr LADR jsr NXTLIN ..ver2: jsr INXBC jsr HILOX bcc ..ver1 ; VERR: pha jsr HLSP lda @ptrHL,Y jsr LBYTBK pla jmp LBYTE ; ;; DISPLA: jsr EXPR2 DISP0: jsr LFADR DISP1: jsr BLK lda @ptrHL,Y jsr LBYTE jsr HILOX lda ptrL and #DISPM bne DISP1 beq DISP0 ; ;; TYPE: jsr EXPR2 TYPE0: jsr LFADR ldx #TYPEW TYPE1: lda @ptrHL,Y jsr SHOWIT dex bne TYPE1 beq TYPE0 ; ;; INXBC: inc ptrC bne ..rts inc ptrB ..rts: rts ; INXHL: inc ptrL bne ..rts inc ptrH ..rts: rts ; DCXH: pha lda ptrL bne ..neq dec ptrH ..neq: dec ptrL pla rts ; ;; .page .sbttl /The Trace Function/ ;The Trace Function CHTBL: .ascii "CZID81VN" REGTBL: .ascii "AXYS" ; IRQ: sta ACC pla pha asla asla asla bmi BREAK jmp @IRQLOC ; BREAK: PLP jsr SAV1 pla sta pcLO pla sta pcHI jmp @BRKV OLDBRK: XBRK: jsr INSDS1 jsr DSPREG jmp START ; ;; BRANCH: clc ldy #1 lda @pcLO,Y jsr PCADJ3 sta pcLO tya sec bcs PCINC2 NBRNCH: jsr SAVE sec bcs PCINC3 ; ;; SCRN2: bcc ..skz lsra lsra lsra lsra ..skz: and #0F rts ; ;; EXECUT: dec YSAV ; NEXTIN: jsr EXPR1 ldx #2 jsr A1PC STEP: jsr INSDSP pla sta RTNL pla sta RTNH ldx #8 XQINIT: lda INITBL-1,X sta XQT,X dex bne XQINIT lda @pcLO,X beq XBRK ldy LENGTH cmp #20 beq XJSR cmp #60 beq XRTS cmp #4C beq XJMP cmp #6C beq XJMPAT cmp #40 beq XRTI and #1F eor #14 cmp #4 beq XQ2 XQ1: lda @pcLO,Y XQ2: .byte 99 .byte XQT .byte 0 ; sta pgz,Y dey bpl XQ1 jsr RSTORE jmp XQTNZ ; ; XRTI: clc pla sta STATUS XRTS: pla sta pcLO pla PCINC2: sta pcHI PCINC3: lda LENGTH jsr PCADJ3 sty pcHI clc bcc NEWPCL ; XJSR: clc jsr PCADJ2 tax tya pha txa pha ldy #2 XJMP: clc XJMPAT: lda @pcLO,Y tax dey lda @pcLO,Y stx pcHI NEWPCL: sta pcLO bcs XJMP RTNJMP: lda RTNH pha lda RTNL pha REGDSP: jsr NXTLIN DSPREG: jsr HLSP lda STATUS ; ldx #8 ..shf: rola pha bcc ..prz lda CHTBL-1,X jsr CO clv bvc ..pla ..prz: lda #"0" jsr CO ..pla: pla dex bne ..shf ; ..prl: jsr BLK lda REGTBL,X jsr CO lda #"=" jsr CO lda ACC,X jsr LBYTE inx cpx #4 bne ..prl jmp NXTLIN ; ; ;; RESET: cld NEWMON: lda SOFTEV+1 eor #0A5 cmp PWREDUP bne PWRUP lda SOFTEV bne NOFIX lda #0E0 cmp SOFTEV+1 bne NOFIX FIXSEV: ldy #3 sty SOFTEV ; jmp SAM76 NOFIX: jmp @SOFTEV ; ;; PWRUP: lda SOFTEV+1 eor #0A5 sta PWREDUP ldx #5 SETPLP: lda PWRCON-1,X STA BRKV-1,X dex bne SETPLP jmp FIXSEV ; ;; PWRCON: .word OLDBRK .byte 0,0E0,45 DISKID: .byte 20,0FF,0,0FF,03,0FF,3C ; ;; INITBL: nop nop jmp NBRNCH jmp BRANCH RTBL: .byte 0C1 .byte 0D8 .byte 0D9 .byte 0D0 .byte 0D3 ; ;; .page .sbttl /Disassembler/ ; .ifdef %SEG2,[ .loc 0F800] CODEL: jsr EXPR1 CODE1: lda #LISTHT CODE2: pha jsr INSDSP jsr PCADJ sta pcLO sty pcHI pla sec sbc #1 bne CODE2 jsr TI cmp #" " beq CODE1 rts ; FMT1: .byte 4,20,54,30,0D .byte 80,4,90,3,22 .byte 54,33,0D,80,4 .byte 90,4,20,54,33 .byte 0D,80,4,90,4 .byte 20,54,3B,0D,80 .byte 4,90,0,22,44 .byte 33,0D,0C8,44,0 .byte 11,22,44,33,0D .byte 0C8,44,0A9,1,22 .byte 44,33,0D,80,4 .byte 90,1,22,44,33 .byte 0D,80,4,90 .byte 26,31,87,9A ; FMT2: .byte 0 ;err .byte 21 ;imm .byte 81 ;Zpage .byte 82 ;abs .byte 0 ;implied .byte 0 ;accumulator .byte 59 ;@zpag,X .byte 4D ;@zpag,Y .byte 91 ;zpag,X .byte 92 ;abs,X .byte 86 ;abs,Y .byte 4A ;@abs .byte 85 ;zpag,Y .byte 9D ;relative ; ;; CHAR1: .ascii ",),#($" CHAR2: .byte "Y",0,"X","$","$",0 ; ;; MNEML: .byte 1C,8A,1C,23,5D,8B .byte 1B,0A1,9D,8A,1D,23 .byte 9D,8B,1D,0A1,0,29 .byte 19,0AE,69,0A8,19,23 .byte 24,53,1B,23,24,53,19,0A1 ;A format .byte 0,1A,5B,5B,0A5,69,24,24 ;B format .byte 0AE,0AE,0A8,0AD,29,0,7C,0 ;C format .byte 15,9C,6D,9C,0A5,69,29,53 ;D format .byte 84,13,34,11,0A5,69,23,0A0 ;E format ; ; MNEMR: .byte 0D8,62,5A,48,26,62 .byte 94,88,54,44,0C8,54 .byte 68,44,0E8,94,0,0B4 .byte 8,084,74,0B4,28,6E .byte 74,0F4,0CC,4A,72,0F2,0A4,8A ;A format .byte 0,0AA,0A2,0A2,74,74,74,72 ;B format .byte 44,68,0B2,32,0B2,0,22,0 ;C format .byte 1A,1A,26,26,72,72,88,0C8 ;D format .byte 0C4,0CA,26,48,44,44,0A2,0C8 ;E format ; ;; INSDS1: jsr NXTLIN ldx pcLO ldy pcHI jsr PRNTYX jsr PRBLNK lda @pcLO,X INSDS2: tay lsra bcc ..even rora bcs ..erb cmp #0A2 beq ..erb and #87 ..even: lsra tax lda FMT1,X jsr SCRN2 bne GETFMT ..erb: ldy #80 lda #0 GETFMT: tax lda FMT2,X sta FORMAT and #03 sta LENGTH tya and #8F tax tya ldy #3 cpx #8A beq ..dx3 ..dx1: lsra bcc ..dx3 lsra ..dx2: lsra ora #20 dey bne ..dx2 iny ..dx3: dey bne ..dx1 rts ; ;; INSDSP: jsr INSDS1 pha PRNTOP: lda @pcLO,Y jsr LBYTE ldx #1 ..tbl: jsr PRBL2 cpy LENGTH iny bcc PRNTOP ldx #3 cpy #4 bcc ..tbl pla tay lda MNEML,Y sta LMNEM lda MNEMR,Y sta RMNEM ..nm1: lda #0 ldy #5 ..nm2: asl RMNEM rol LMNEM rola dey bne ..nm2 adc #0BF jsr CO dex bne ..nm1 jsr PRBLNK ldy LENGTH ldx #6 ADR1: cpx #3 beq ADR5 ADR2: asl FORMAT bcc ..adr3 lda CHAR1-1,X jsr CO lda CHAR2-1,X beq ..adr3 jsr CO ..adr3: dex bne ADR1 rts ; ADR4: dey bmi ADR2 jsr LBYTE ADR5: lda FORMAT cmp #0E8 lda @pcLO,Y bcc ADR4 RELADR: jsr PCADJ3 tax inx bne PRNTYX iny PRNTYX: tya PRNTAX: jsr LBYTE PRNTX: TXA jmp LBYTE ; ;; PCADJ: sec PCADJ2: lda LENGTH PCADJ3: ldy pcHI tax bpl ..adj4 dey ..adj4: adc pcLO bcc ..rts iny ..rts: rts ; ; ;; RSTORE: lda STATUS pha lda ACC RESTR1: ldx Xreg ldy Yreg plp rts ; SAVE: sta ACC SAV1: stx Xreg sty Yreg php pla sta STATUS tsx stx SPNT cld rts ; ;; A1PC: txa beq ..rts ..pclp: lda XQT,X sta pcLO,X dex bpl ..pclp ..rts: rts ; ;; .ifndef %BITS,[ .XLIST] ; .ifdef %BITS,[ BITS: ldx #8 ..bit2: rola pha lda #"0" bcc ..clr adc #1 ..clr: jsr CO pla dex bne ..bit2 rts] ; ;; .ifndef %XAM,[ RETRP: nop nop nop XAMIN: php jmp REGDSP] ; ;; .ifdef %XAM,[ .page .sbttl /Break Point Routine/ ;Reference Dr. Dobb's V2 N6 P26 - Willi Kusche ; RETRP: nop nop nop XAMIN: php jsr SAVE lda #0 sta saveBP beq BRKEN1 BRKENT: jsr SAVE BRKEN1: pla sta pcLO pla sta pcHI jsr BLK lda saveBP beq ..bypa lda pcLO bne ..alt1 dec pcHI ..alt1: dec pcLO bne ..alt2 dec pcHI ..alt2: dec pcLO ..bypa: jsr DSPREG ; ldx #0 lda saveBP beq ..skip sta @pcLO,X stx saveBP ldx SPNT txs lda pcHI pha lda pcLO pha jsr RSTORE rts ; ..skip: jmp START] ; ;; .list .