> TEST65/src :  6502 BBC MOS Equates ( ==================== 2!ESCFLG =&FF : Escape flag <(FAULT =&FD : Last error message FSCANHEX =&FFA1 : Read hex P*PRHEX =&FFAA : Print A as 8-bit hex Z,PR2HEX =&FFAD : Print YX as 16-bit hex d'PRTEXT =&FFB3 : Print inline text n*OSQUIT =&FFB9 : Quit current process x'OSERROR =&FFBC : Generate an error 6OSINIT =&FFBF : Initialise default error handler &PRSTRING=&FFC5 : Print text at YX %OSFIND =&FFCE : Open/Close file &OSGBPB =&FFD1 : Read/Write bytes 'OSBPUT =&FFD4 : Write single byte &OSBGET =&FFD7 : Read single byte /OSARGS =&FFDA : Read/Write open file info ,OSFILE =&FFDD : Load/Save/Info on file .OSRDCH =&FFE0 : Wait for character input ,OSASCI =&FFE3 : Output ASCII character -OSNEWL =&FFE7 : Output newline sequence !OSWRCR =&FFEC : Output &OSWRCH =&FFEE : Output character 3OSWORD =&FFF1 : System info via control block /OSBYTE =&FFF4 : System info via registers %OS_CLI =&FFF7 : Execute command "*BRKV =&0202 : Error handler vector ,"EVENTV =&0220 : Event vector 6: @ CODELOAD=&4000: mcode% &400 J P=0 1:opt%=P*3+4 TP%=CODELOAD:O%=mcode% ^ [OPT opt% h\ CODE HEADER r\ ----------- |.CODESTART JMP CODEENTRY BRK:BRK:BRK  EQUB &42 EQUB COPYMSG-CODESTART  EQUB 0  .TITLE "EQUS "65x02 Tube test program"  .COPYMSG %EQUB 0:EQUS "(C)2014 J.G.Harston"  EQUB 0 EQUD CODELOAD : .CODEENTRY PHP:PHA:TYA:PHA:TXA:PHA:TSX LDA &FFFB:BMI CHECK2 /BRK:EQUB 255:EQUS "Not running on Tube":BRK &: 0 .CHECK2 :#LDA PRTEXT:CMP #&4C:BEQ DOTESTS DLDA &107,X:STA &EE:STA &F2 NLDA &108,X:STA &EF:STA &F3 XJSR MEMSWAP b"JSR PRTEXT:EQUS "Old MOS ":BRK l: v .DOTESTS %LDX #TITLE 255:LDY #TITLE 256 JSR PRSTRING:JSR OSNEWL  JSR PRTEXT:EQUS "A=&":EQUB 0 LDA &103,X:JSR PRHEX "JSR PRTEXT:EQUS " X=&":EQUB 0 LDA &101,X:JSR PRHEX "JSR PRTEXT:EQUS " Y=&":EQUB 0 LDA &102,X:JSR PRHEX $JSR PRTEXT:EQUS " S=&01":EQUB 0 TXA:CLC:ADC #4:JSR PRHEX "JSR PRTEXT:EQUS " P=&":EQUB 0 LDA &104,X:JSR PRHEX : -JSR PRTEXT:EQUB 13:EQUS "MEMBOT=&":EQUB 0  "LDA #&83:JSR OSBYTE:JSR PR2HEX 'JSR PRTEXT:EQUS " MEMTOP=&":EQUB 0  "LDA #&84:JSR OSBYTE:JSR PR2HEX */\JSR PRTEXT:\EQUB 13:\EQUS "CMD=> ":\EQUB 0 4JSR OSNEWL:JSR OSNEWL >: H'LDA PRTSAVE+6:BEQ DOTESTS2:JMP EXIT R .DOTESTS2 \/JSR PRTEXT:EQUS "TUBE MOS entries:":EQUB 13 fEQUS "PRHEX: ":EQUB 0 p LDX #0 z .HEX1LP (TXA:JSR PRHEX:INX:CPX #14:BNE HEX1LP /JSR PRTEXT:EQUB 13:EQUS "PR2HEX: ":EQUB 0 LDX #0:LDY #0  .HEX2LP JSR PR2HEX:JSR PRSPACE *INX:INX:INY:INY:INY:CPY #14:BCC HEX2LP CJSR PRTEXT:EQUB 13:EQUS "PRTEXT: This is using PRTEXT":EQUB 0 /JSR PRTEXT:EQUB 13:EQUS "PRSTRING: ":EQUB 0 2LDX #TEST3 255:LDY #TEST3 256:JSR PRSTRING  .SKIP1 0JSR PRTEXT:EQUS "ERRJMP: save BRKV":EQUB 0 LDA BRKV+0:STA BRKSAVE+0 LDA BRKV+1:STA BRKSAVE+1 )JSR PRTEXT:EQUS ", claim BRKV":EQUB 0 LDA #MYERR 255:STA BRKV+0 LDA #MYERR 256:STA BRKV+1 $-JSR PRTEXT:EQUS ", generate error":EQUB 0 ..BRK:EQUB 255:EQUS "Test error message":BRK 8 .MYERR B=JSR PRTEXT:EQUB 13:EQUS "ERRJMP: caught error: ":EQUB 0 L.LDY #0:LDA (FAULT),Y:JSR PRHEX:JSR PRSPACE VLDX FAULT+0:LDY FAULT+1 `!INX:BNE P%+3:INY:JSR PRSTRING j;JSR PRTEXT:EQUB 13:EQUS "ERRJMP: restore BRKV":EQUB 0 tLDA BRKSAVE+0:STA BRKV+0 ~LDA BRKSAVE+1:STA BRKV+1  JSR PRKEY 3JSR PRTEXT:EQUS"OS_CLI: *help":EQUB 13:EQUB 0 4LDX #CMDHELP 255:LDY #CMDHELP 256:JSR OS_CLI +JSR PRTEXT:EQUS "OSQUIT":EQUB 13:EQUB 0 JMP OSQUIT :  .EXIT PLA:PLA:PLA:PLA  .MEMSWAP  LDX #11  .MEMLP1 LDA PRHEX,X:LDY PRTSAVE,X !STA PRTSAVE,X:TYA:STA PRHEX,X  DEX:BPL MEMLP1:LDX #2  .MEMLP2  LDA PRSTRING,X:LDY PRSSAVE,X ($STA PRSSAVE,X:TYA:STA PRSTRING,X 2DEX:BPL MEMLP2:RTS <: F .PTEXT PPLA:STA &FA:PLA:STA &FB ZJSR PSTR3:JMP (&00FA) d .PSTR nSTX &FA:STY &FB x .PSTR2 LDY #0:LDA (&FA),Y BEQ PSTR3:JSR OSASCI  .PSTR3 INC &FA:BNE PSTR4:INC &FB  .PSTR4 TAY:BNE PSTR2:RTS :  .P2HEX TYA:JSR PHEX:TXA  .PHEX PHA:LSR A:LSR A:LSR A:LSR A JSR PNYB:PLA  .PNYB ! #15:CMP #10:BCC PDIG:ADC #6  .PDIG ADC #"0":JMP OSWRCH ": ,.PRSPACE:LDA #32:JMP OSWRCH 6 .PRKEY @;JSR PRTEXT:EQUB 13:EQUB 13:EQUS "Press a key...":EQUB 0 JJSR OSRDCH:JMP OSWRCR T: ^7.TEST3:EQUS "This is using PRSTRING":EQUB 13:EQUB 0 h .CMDHELP:EQUS "help":EQUB 13 r.BRKSAVE:EQUW 0 |5.PRTSAVE:JMP PHEX:JMP P2HEX:BRK:BRK:BRK:JMP PTEXT .PRSSAVE:JMP PSTR : ] >"*SAVE TEST65 ";~mcode%;" ";~O%;" "~CODELOAD;" "~CODELOAD