8-Bit Software Online Conversion

* Command Program xssrc - Listing

10REM > xs/s v1.10 15-Feb-1990 20REM Short Checksums 30REM (c) The Micro User 40REM v1.00 01-Feb 1988 by Steve Turn bull 50REM v1.10 15-Feb 1990 by J.G.Harsto n 60REM Runable on either side of Tube 70REM 80PROCinit:PROCassemble 90A$="*SAVE xs "+STR$÷mcode%+" "+STR$ ÷O%+" "+STR$÷exec%+" "+STR$÷load% 100IFwarn%:P%=&480:P%=FNwarn ELSE PRIN TA$;:OSCLIA$:PRINT 110END 120DEFPROCinit 130DIM mcode% &400 140load%=&404 150warn%=0 160newl=&FFE7:wrch=&FFEE:byte=&FFF4 170rem=&F4:return=13:spc=32 180qts=ASC"""":colon=ASC":" 190comma=ASC",":Lbrk=ASC"[" 200rbrk=ASC"]":mcom=ASC"½" 210Lcrc=&70:ocrc=&72:wcrc=&74 220Lptr=&76:crcptr=&78:Lnum=&7A 230LLen=&7C:Ltmp=&7D:txtptr=&7E 240nmbase=&80:Lonum=&81:hinum=&82 250Lowrk=&83:hiwrk=&84:qflg=&85 260codeflg=&86:savebyt=&87 270fldsize=&88:zflg=&89:Lend=&8A 280escflg=&FF:ENDPROC 290DEFPROCassemble 300FOR L%=4 TO 7 STEP 3 310P%=load%:O%=mcode% 320[OPT L% 330.exec% 340 JMP check:BRK:BRK:BRK ½ Header identifies 350 EQUB &42:EQUB copy-exec% ½ this as 6502 code 360 EQUB &10:EQUS "xs" 370 EQUB &00:EQUS "1.10 (15 Feb 1990)" 380.copy 390 EQUB 0:EQUS"(C)":EQUB 0 400.check 410 JSR checkbasic 420 LDA #0:STA codeflg:STA ocrc 430 STA ocrc+1:STA Lptr 440 LDA &18:STA Lptr+1 450.while BIT escflg:BMI escape 460 LDY #1:LDA (Lptr),Y:BPL doline 470 ½ Termination code must not be in &480-&4FF 480.wayout 490 LDA #end AND 255:STA &0B 500 LDA #end DIV 256:STA &0C 510 LDA #0:STA &0A :½ ptra=><cr><end marker> 520 LDX #&7F 530 OPT FNwarn 540.clearlp 550 STA &480,X 560 DEX:BPL clearlp :½ Clear variable s 570 LDA &00:STA &02 580 LDA &01:STA &03 :½ VARTOP=LOMEM 590 RTS 600.end 610 EQUB 13:EQUB &FF :½ <cr><endmarker > 620.escape 630 JSR wayout:BRK:EQUB 17:EQUS "Escap e":BRK 640.bad 650 JSR wayout:BRK:BRK:EQUS "Bad progr am":BRK 660 OPT FNwarn 670.rdbyte LDX #0:LDY #255:JSR byte:TX A:AND #63 680.ok RTS 690.checkbasic 700 LDA #187:JSR rdbyte:STA Lptr 710 LDA #252:JSR rdbyte:CMP Lptr:BEQ o k 720 BRK:EQUB 249:EQUS "Not in BASIC":B RK 730.doline LDA #0:STA Lcrc:STA Lcrc+1 740 STA qflg:TAY:LDA (Lptr),Y 750 CMP #&0D:BNE bad:INY:LDA (Lptr),Y 760 STA Lnum+1:INY:LDA (Lptr),Y 770 STA Lnum:INY:LDA (Lptr),Y 780 STA Lend:JSR prescan:CPY #5 790 BCC display:LDY #4 800.skipspc LDA (Lptr),Y:CMP #spc 810 BNE scan:INY:CPY LLen 820 BEQ display:BNE skipspc 830.scan LDA (Lptr),Y:JSR dobyte 840 INY:CPY LLen:BCC scan 850.display:LDX Lnum:LDY Lnum+1 860 JSR pdec:LDA #spc:JSR wrch 870 LDA #ASC"=":JSR wrch:LDA #spc 880 JSR wrch:LDX Lcrc:LDY Lcrc+1 890 JSR phex:LDA ocrc:JSR lastchk 900 LDY LLen:CPY Lend:BEQ newline 910 LDA #ASC"*":JSR wrch 920.newline JSR newl 930.update CLC:LDA Lptr:ADC Lend 940 STA Lptr:BCC unwhile:INC Lptr+1 950.unwhile JMP while 960.prescan LDY Lend 970.psLoop DEY:LDA (Lptr),Y:CMP #spc 980 BEQ psLoop:INY:STY LLen:RTS 990.dobyte STA savebyt:CMP #qts 1000 BNE notqe:PHA:LDA qflg:EOR #&FF 1010 STA qflg:PLA 1020.notqe BIT qflg:BMI skpcode 1030 BIT codeflg:BMI jcode 1040 JSR basic:JMP skpcode 1050.jcode JSR mcode 1060.skpcode LDA savebyt:CPY LLen 1070 BEQ skipcrc:STY Ltmp:LDX Lcrc 1080 LDY Lcrc+1:JSR docrc:STX Lcrc 1090 STY Lcrc+1:LDX ocrc:LDY ocrc+1 1100 JSR docrc:STX ocrc:STY ocrc+1 1110 LDY Ltmp:.skipcrc RTS 1120.basic CMP #rem:BEQ skpline 1130 CMP #Lbrk:BNE xbasic:LDA #&FF 1140 STA codeflg:RTS 1150.skpline LDY LLen:.xbasic RTS 1160.mcode CMP #mcom:BEQ skipcom 1170 CMP #rbrk:BNE xmcode:LDA #0 1180 STA codeflg:.xmcode RTS 1190.skipcom LDA qflg:PHA:LDA #0 1200 STA qflg 1210.skpLoop INY:LDA (Lptr),Y:CMP #qts 1220 BNE skpchk:PHA:LDA qflg:EOR #&FF 1230 STA qflg:PLA 1240.skpchk CPY LLen:BEQ skpexit 1250 CMP #colon:BNE skpLoop:BIT qflg 1260 BMI skpLoop 1270.skpexit PLA:STA qflg:LDA (Lptr),Y 1280 STA savebyt:RTS 1290.docrc PHA:STX wcrc:STY wcrc+1 1300 EOR wcrc+1:STA wcrc+1:LDX #7 1310.crclp BIT wcrc+1:CLC:BPL crcskp 1320 LDA wcrc:EOR #&10:STA wcrc 1330 LDA wcrc+1:EOR #&08:STA wcrc+1 1340 SEC 1350.crcskp ROL wcrc:ROL wcrc+1:DEX 1360 BPL crclp:LDX wcrc:LDY wcrc+1 1370 PLA:RTS 1380.lastchk PHA:LDA #spc:JSR wrch 1390 PLA:AND #&0F:TAX:LDA #&FF:PHA 1400 TXA:JMP notz:.pdec LDA #10 1410 BNE pnum:.phex LDA #16 1420.pnum STX Lonum:STY hinum 1430 STA nmbase:LDA #4:STA fldsize 1440 LDA #255:STA zflg 1450.nbit PHA:LDA #0:STA Lowrk 1460 STA hiwrk:LDX #16 1470.next ASL Lonum:ROL hinum 1480 ROL Lowrk:ROL hiwrk:LDA Lowrk:SEC 1490 SBC nmbase:TAY:LDA hiwrk:SBC #0 1500 BCC done:INC Lonum:STY Lowrk 1510 STA hiwrk:.done DEX:BNE next 1520 LDA Lowrk:DEC fldsize:BNE nbit 1530.out TAX:BNE notz:PLA:PHA:PHP:TXA 1540 PLP:BMI notz:BIT zflg:BPL notz 1550 LDA #spc:BNE digout 1560.notz LDX #0:STX zflg:CMP #10 1570 BCC add:ADC #6:.add ADC #48 1580.digout JSR wrch:PLA:BPL out 1590.exit RTS 1600]:NEXT:ENDPROC 1610DEFFNwarn:IFL%AND3:IFP%>&47F:IFP%<& 500:PRINT"**** Warning: code overwritten on exit":warn%=warn%+1 1620=L%