100 REM OPEN2,8,1,"SS BABY.O" 110 SYS700 120 ; 130 .OPT OO 140 ; 150 MEMCTRL = $01 160 MASKOUT = %11111101 170 MASKIN = %00000010 180 FRMEVL = $AD9E 190 GETCOMMA = $AEFD 200 CONVERT = $B1AA 210 ILLQUAN = $B248 220 PNTR1 = $FB 230 PNTR2 = PNTR1 + 2 240 ; 250 DUMMYLOC = $FF00 260 KILL = $60 270 THEENMI = $FFFA 280 ; 290 CLC ; PRESERVE A SCREEN 300 NOP ; 310 .BYTE $24 320 ; 330 SEC ; RESTORE A SCREEN 340 ; 350 PHP ; SAVE FLAGS 360 SEI ; DISABLE IRQ'S 370 ; 380 LDX #0 ; INIT VECTOR TO DISABLE 390 STX THEENMI ; NMI'S 400 DEX ; 410 STX THEENMI+1 ; 420 ; 430 LDA #KILL ; PUT AN 'RTI' AT 440 STA DUMMYLOC ; DUMMY LOCATION 450 ; 460 LDA PNTR1 ; PRESERVE THE CONTENTS 470 PHA ; OF TWO 16-BIT POINTERS 480 LDA PNTR1+1 ; 490 PHA ; 500 LDA PNTR2 ; 510 PHA ; 520 LDA PNTR2+1 ; 530 PHA ; 540 ; 550 PHP ; SAVE GET/RESTORE FLAG 560 ; 570 JSR GETCOMMA ; SKIP PAST COMMA 580 JSR FRMEVL ; EVALUATE EXPRESSION 590 JSR CONVERT ; 600 ; 610 ; ON RETURN -- A=MSB, Y=LSB 620 ; OF INTEGER NUMBER 630 ; 640 TAX ; EXIT IF ACC != 0 650 BNE ERROR ; 660 ; 670 STA PNTR1 ; CLEAR LSB OF EACH PNTR 680 STA PNTR2 ; 690 ; 700 TYA ; 710 AND #7 ; MASK THE LSB 720 BEQ ERROR ; EXIT IF ACC = 0 730 ; 740 ASL ; MULTIPLY BY EIGHT 750 ASL ; 760 ASL ; 770 ; 780 CMP #%00101000 ; DETERMINE WHICH 790 BCC LESS ; ROM TO LOOK UNDER 800 ADC #$B7 ; IF > #$20, THEN KERNAL 810 .BYTE $2C 820 LESS ADC #$98 ; ELSE BASIC ROM 830 STA PNTR2+1 ; 840 ; 850 LDY 648 ; GET MSB OF SCREEN 860 BEQ ERROR ; 870 STY PNTR1+1 ; 880 ; 890 LDA MEMCTRL ; SWITCH OUT BOTH ROMS 900 AND #MASKOUT ; 910 STA MEMCTRL ; 920 ; 930 PLP ; FETCH GET/RESTORE FLAG 940 ; 950 LDX #4 ; 960 LDY #0 ; 970 ; 980 BCS RECALL ; 990 ; 1000 L1 LDA (PNTR1),Y ; 1010 STA (PNTR2),Y ; 1020 INY ; 1030 BNE L1 ; 1040 INC PNTR1+1 ; 1050 INC PNTR2+1 ; 1060 DEX ; 1070 BNE L1 ; 1080 LDA #$D8 ; 1090 STA PNTR1+1 ; 1100 LDX #4 ; 1110 L2 LDA (PNTR1),Y ; 1120 STA (PNTR2),Y ; 1130 INY ; 1140 BNE L2 ; 1150 INC PNTR1+1 ; 1160 INC PNTR2+1 ; 1170 DEX ; 1180 BNE L2 ; 1190 BEQ EXIT ; 1200 ; 1210 ; 1220 ERROR PLA ; 1230 CLV ; 1240 BVC EXIT ; 1250 ; 1260 ; 1270 RECALL = * 1280 LDA (PNTR2),Y ; 1290 STA (PNTR1),Y ; 1300 INY ; 1310 BNE RECALL ; 1320 INC PNTR1+1 ; 1330 INC PNTR2+1 ; 1340 DEX ; 1350 BNE RECALL ; 1360 LDX #4 ; 1370 LDA #$D8 ; 1380 STA PNTR1+1 ; 1390 L3 LDA (PNTR2),Y ; 1400 STA (PNTR1),Y ; 1410 INY ; 1420 BNE L3 ; 1430 INC PNTR1+1 ; 1440 INC PNTR2+1 ; 1450 DEX ; 1460 BNE L3 ; 1470 ; 1480 EXIT LDA MEMCTRL ; 1490 ORA #MASKIN ; 1500 STA MEMCTRL ; 1510 ; 1520 PLA ; 1530 STA PNTR2+2 ; 1540 PLA ; 1550 STA PNTR2 ; 1560 PLA ; 1570 STA PNTR1+1 ; 1580 PLA ; 1590 STA PNTR1 ; 1600 PLP ; 1610 RTS ;