1000 SYS999 1010 ; 1020 ;POWER ASSEMBLER (BUDDY) 1030 ; 1040 *= $C800 1050 ; 1060 .MEM 1070 ; 1080 ;------------ FAR-SYS ------------ 1090 ; 1100 ;SYSTEM ROUTINES 1110 ; 1120 CHRGET = $0073 1130 CHR(null)T = $0079 1140 CHKCOM = $AEFD 1150 FRMNUM = $AD8A 1160 GETADR = $B7F7 1170 ONEBYT = $B79E 1180 ; 1190 ;--------------------------------- 1200 ; 1210 FARSYS JMP SETUP 1220 FARJSR JMP RELAY 1230 ; 1240 BANK .BYTE 0 ;POKE 0-5 HERE 1250 CNFG .BYTE 0 ;CURRENT CONFIG 1260 MASK .BYTE 0 ;NEW CONFIG 1270 ; 1280 JUMPER JMP ($0014) 1290 ; 1300 ;TABLE OF VALUES TO 'AND WITH 6510 PORT 1310 ; 1320 MSKTBL =* 1330 .BYTE 255 ;BANK 0 - NO CHANGE 1340 .BYTE 246 ;BANK 1 - BAS. OUT, KERN & I/O IN 1350 .BYTE 242 ;BANK 2 - BAS. OUT, KERN & CHR. IN 1360 .BYTE 245 ;BANK 3 - BAS. & KERN OUT, I/O IN 1370 .BYTE 241 ;BANK 4 - BAS. & KERN OUT, CHR. IN 1380 .BYTE 244 ;BANK 5 - ALL RAM 1390 ; 1400 ; 1410 SETUP JSR TWOBYT ;READ ADDRESS FROM BASIC TEXT 1420 : LDX BANK 1430 : CPX #$06 1440 : BCC OK 1450 BAD JMP $A8E3 ;DISPLAY 'UNDEF STATEMENT' IF BANK>5 1460 OK LDA $01 1470 : STA CNFG 1480 : AND MSKTBL,X ;MASK BITS APPROPO. 1490 : STA MASK 1500 ; 1510 : JSR GETARGS 1520 ; 1530 LONG JSR ROMSOUT 1540 : LDA $030F ;GET SRREG 1550 : ORA #$04 ;ENSURE NO IRQ WHEN PLP 1560 : PHA 1570 : LDA $030C 1580 : LDX $030D 1590 : LDY $030E 1600 : PLP ;AS PER ABOVE 1610 : JSR JUMPER ;GOTO TARGET 1620 ; 1630 ROMSIN PHP ;BACK HERE 1640 : PHA ;SAVE FLAGS & ACC. 1650 : LDA CNFG 1660 : STA $01 ;ROMS IN 1670 : PLA 1680 : PLP 1690 : CLI 1700 : RTS 1710 ; 1720 ;ROUTINE TO ALLOW 'HIDDEN' CODE TO CALL ROM ROUTINES. 1730 ;ASSUMES ADDRESS IN $14/15, A, X, Y AND SR IN $030C - $030F. 1740 ;ALSO ASSUMES 'CNFG' RESTORES ROMS AND 'MASK' IS VALID 1750 ; 1760 RELAY LDA CNFG 1770 : STA $01 ;RESTORE ROM(S) 1780 : JSR $E136 ;PART OF "SYS". LOADS REGS, JMP ($0014) 1790 : JSR $E147 ;STORES REGS. 1800 ; 1810 ROMSOUT SEI 1820 : LDA MASK 1830 : STA $01 1840 : RTS 1850 ; 1860 ;LOOK FOR COMMA, GET EXPRESSION 0 - 65535 FROM BASIC TEXT 1870 ; 1880 TWOBYT JSR CHKCOM 1890 : JSR FRMNUM ;EVAL EXPRESSION 1900 : JMP GETADR ;TWO BYTES IN $14/15 1910 ; 1920 ;THIS ROUTINE RETURNS WITH CARRY CLEAR IF END OF STATEMENT OR COMMA 1930 ;FOLLOWED BY COMMA, CARRY SET AND ONE BYTE IN X IF NUM. EXPRESSION. 1940 ; 1950 ; 1960 COMBYT JSR CHR(null)T ;CURRENT CHR. 1970 : BEQ COMEXIT ;END OF STATEMENT 1980 : JSR CHKCOM ;LOOK FOR COMMA AND NEXT CHR. 1990 : CMP #$2C ;ANOTHER COMMA"? 2000 : BEQ COMEXIT ;YEAH 2010 : JSR [145]EBYT ;NO. [161] [197]UE 2020 : SEC 2030 : RTS 2040 COMEXIT CLC 2050 : RTS 2060 ; 2070 ;ROUTINE [164] [135] A, X, Y, [175] SR 2080 ;[197]UES FROM BASIC TEXT. 2090 ; 2100 [161]ARGS JSR COMBYT ;FIRST PARAM (.A) 2110 : BCC X[161] ;JUST A COMMA. [161] [130] 2120 : STX $030C ;SAREG 2130 X[161] JSR COMBYT ;[130] PARAM (.X) 2140 : BCC Y[161] 2150 : STX $030D ;SXREG 2160 Y[161] JSR COMBYT ;[161] .Y 2170 : BCC S[161] ;A[168]HER COMMA"? 2180 : STX $030E ;SYREG 2190 SGET JSR COMBYT ;GET .SR 2200 : BCC EXREG 2210 : STX $030F ;SRREG 2220 EXREG RTS 2230 ;