******************************** * * APPLE II * MONITOR II * * COPYRIGHT 1978 BY * APPLE COMPUTER, INC. * * ALL RIGHTS RESERVED * * STEVE WOZNIAK * ******************************** * * MODIFIED NOV 1978 * BY JOHN A * ******************************** ORG $F800 OBJ $2000 ******************************* LOC0 EQU $00 LOC1 EQU $01 WNDLFT EQU $20 WNDWDTH EQU $21 WNDTOP EQU $22 WNDBTM EQU $23 CH EQU $24 CV EQU $25 GBASL EQU $26 GBASH EQU $27 BASL EQU $28 BASH EQU $29 BAS2L EQU $2A BAS2H EQU $2B H2 EQU $2C LMNEM EQU $2C V2 EQU $2D RMNEM EQU $2D MASK EQU $2E CHKSUM EQU $2E FORMAT EQU $2E LASTIN EQU $2F LENGTH EQU $2F SIGN EQU $2F COLOR EQU $30 MODE EQU $31 INVFLG EQU $32 PROMPT EQU $33 YSAV EQU $34 YSAV1 EQU $35 CSWL EQU $36 CSWH EQU $37 KSWL EQU $38 KSWH EQU $39 PCL EQU $3A PCH EQU $3B A1L EQU $3C A1H EQU $3D A2L EQU $3E A2H EQU $3F A3L EQU $40 A3H EQU $41 A4L EQU $42 A4H EQU $43 A5L EQU $44 A5H EQU $45 ACC EQU $45 ; NOTE OVERLAP WITH A5H! XREG EQU $46 YREG EQU $47 STATUS EQU $48 SPNT EQU $49 RNDL EQU $4E RNDH EQU $4F PICK EQU $95 IN EQU $0200 BRKV EQU $3F0 ; NEW VECTOR FOR BRK SOFTEV EQU $3F2 ; VECTOR FOR WARM START PWREDUP EQU $3F4 ; THIS MUST = EOR #$A5 OF SOFTEV+1 AMPERV EQU $3F5 ; APPLESOFT & EXIT VECTOR USRADR EQU $03F8 NMI EQU $03FB IRQLOC EQU $3FE LINE1 EQU $400 MSLOT EQU $07F8 IOADR EQU $C000 KBD EQU $C000 KBDSTRB EQU $C010 TAPEOUT EQU $C020 SPKR EQU $C030 TXTCLR EQU $C050 TXTSET EQU $C051 MIXCLR EQU $C052 MIXSET EQU $C053 LOWSCR EQU $C054 HISCR EQU $C055 LORES EQU $C056 HIRES EQU $C057 SETAN0 EQU $C058 CLRAN0 EQU $C059 SETAN1 EQU $C05A CLRAN1 EQU $C05B SETAN2 EQU $C05C CLRAN2 EQU $C05D SETAN3 EQU $C05E CLRAN3 EQU $C05F TAPEIN EQU $C060 PADDL0 EQU $C064 PTRIG EQU $C070 CLRROM EQU $CFFF BASIC EQU $E000 BASIC2 EQU $E003 PAGE PLOT LSR A PHP JSR GBASCALC PLP LDA #$0F BCC RTMASK ADC #$E0 RTMASK STA MASK PLOT1 LDA (GBASL),Y EOR COLOR AND MASK EOR (GBASL),Y STA (GBASL),Y RTS HLINE JSR PLOT HLINE1 CPY H2 BCS RTS1 INY JSR PLOT1 BCC HLINE1 VLINEZ ADC #$01 VLINE PHA JSR PLOT PLA CMP V2 BCC VLINEZ RTS1 RTS CLRSCR LDY #$2F BNE CLRSC2 CLRTOP LDY #$27 CLRSC2 STY V2 LDY #$27 CLRSC3 LDA #$00 STA COLOR JSR VLINE DEY BPL CLRSC3 RTS PAGE GBASCALC PHA LSR A AND #$03 ORA #$04 STA GBASH PLA AND #$18 BCC GBCALC ADC #$7F GBCALC STA GBASL ASL A ASL A ORA GBASL STA GBASL RTS LDA COLOR CLC ADC #$03 SETCOL AND #$0F STA COLOR ASL A ASL A ASL A ASL A ORA COLOR STA COLOR RTS SCRN LSR A PHP JSR GBASCALC LDA (GBASL),Y PLP SCRN2 BCC RTMSKZ LSR A LSR A LSR A LSR A RTMSKZ AND #$0F RTS PAGE INSDS1 LDX PCL LDY PCH JSR PRYX2 JSR PRBLNK INSDS2 LDA (PCL,X) TAY LSR A BCC IEVEN ROR A BCS ERR CMP #$A2 BEQ ERR AND #$87 IEVEN LSR A TAX LDA FMT1,X JSR SCRN2 BNE GETFMT ERR LDY #$80 LDA #$00 GETFMT TAX LDA FMT2,X STA FORMAT AND #$03 STA LENGTH TYA AND #$8F TAX TYA LDY #$03 CPX #$8A BEQ MNNDX3 MNNDX1 LSR A BCC MNNDX3 LSR A MNNDX2 LSR A ORA #$20 DEY BNE MNNDX2 INY MNNDX3 DEY BNE MNNDX1 RTS DFB $FF,$FF,$FF PAGE INSTDSP JSR INSDS1 PHA PRNTOP LDA (PCL),Y JSR PRBYTE LDX #$01 PRNTBL JSR PRBL2 CPY LENGTH INY BCC PRNTOP LDX #$03 CPY #$04 BCC PRNTBL PLA TAY LDA MNEML,Y STA LMNEM LDA MNEMR,Y STA RMNEM NXTCOL LDA #$00 LDY #$05 PRMN2 ASL RMNEM ROL LMNEM ROL A DEY BNE PRMN2 ADC #$BF JSR COUT DEX BNE NXTCOL JSR PRBLNK LDY LENGTH LDX #$06 PRADR1 CPX #$03 BEQ PRADR5 PRADR2 ASL FORMAT BCC PRADR3 LDA CHAR1-1,X JSR COUT LDA CHAR2-1,X BEQ PRADR3 JSR COUT PRADR3 DEX BNE PRADR1 RTS PRADR4 DEY BMI PRADR2 JSR PRBYTE PRADR5 LDA FORMAT CMP #$E8 LDA (PCL),Y BCC PRADR4 PAGE RELADR JSR PCADJ3 TAX INX BNE PRNTYX INY PRNTYX TYA PRNTAX JSR PRBYTE PRNTX TXA JMP PRBYTE PRBLNK LDX #$03 PRBL2 LDA #$A0 PRBL3 JSR COUT DEX BNE PRBL2 RTS PCADJ SEC PCADJ2 LDA LENGTH PCADJ3 LDY PCH TAX BPL PCADJ4 DEY PCADJ4 ADC PCL BCC RTS2 INY RTS2 RTS FMT1 DFB $04 DFB $20 DFB $54 DFB $30 DFB $0D DFB $80 DFB $04 DFB $90 DFB $03 DFB $22 DFB $54 DFB $33 DFB $0D DFB $80 DFB $04 DFB $90 DFB $04 DFB $20 DFB $54 DFB $33 DFB $0D DFB $80 DFB $04 DFB $90 DFB $04 DFB $20 DFB $54 DFB $3B DFB $0D DFB $80 DFB $04 DFB $90 DFB $00 DFB $22 DFB $44 DFB $33 DFB $0D DFB $C8 DFB $44 DFB $00 DFB $11 DFB $22 DFB $44 DFB $33 DFB $0D DFB $C8 DFB $44 DFB $A9 DFB $01 DFB $22 DFB $44 DFB $33 DFB $0D DFB $80 DFB $04 DFB $90 DFB $01 DFB $22 DFB $44 DFB $33 DFB $0D DFB $80 DFB $04 DFB $90 DFB $26 DFB $31 DFB $87 DFB $9A FMT2 DFB $00 DFB $21 DFB $81 DFB $82 DFB $00 DFB $00 DFB $59 DFB $4D DFB $91 DFB $92 DFB $86 DFB $4A DFB $85 DFB $9D CHAR1 DFB $AC DFB $A9 DFB $AC DFB $A3 DFB $A8 DFB $A4 CHAR2 DFB $D9 DFB $00 DFB $D8 DFB $A4 DFB $A4 DFB $00 MNEML DFB $1C DFB $8A DFB $1C DFB $23 DFB $5D DFB $8B DFB $1B DFB $A1 DFB $9D DFB $8A DFB $1D DFB $23 DFB $9D DFB $8B DFB $1D DFB $A1 DFB $00 DFB $29 DFB $19 DFB $AE DFB $69 DFB $A8 DFB $19 DFB $23 DFB $24 DFB $53 DFB $1B DFB $23 DFB $24 DFB $53 DFB $19 DFB $A1 DFB $00 DFB $1A DFB $5B DFB $5B DFB $A5 DFB $69 DFB $24 DFB $24 DFB $AE DFB $AE DFB $A8 DFB $AD DFB $29 DFB $00 DFB $7C DFB $00 DFB $15 DFB $9C DFB $6D DFB $9C DFB $A5 DFB $69 DFB $29 DFB $53 DFB $84 DFB $13 DFB $34 DFB $11 DFB $A5 DFB $69 DFB $23 DFB $A0 MNEMR DFB $D8 DFB $62 DFB $5A DFB $48 DFB $26 DFB $62 DFB $94 DFB $88 DFB $54 DFB $44 DFB $C8 DFB $54 DFB $68 DFB $44 DFB $E8 DFB $94 DFB $00 DFB $B4 DFB $08 DFB $84 DFB $74 DFB $B4 DFB $28 DFB $6E DFB $74 DFB $F4 DFB $CC DFB $4A DFB $72 DFB $F2 DFB $A4 DFB $8A DFB $00 DFB $AA DFB $A2 DFB $A2 DFB $74 DFB $74 DFB $74 DFB $72 DFB $44 DFB $68 DFB $B2 DFB $32 DFB $B2 DFB $00 DFB $22 DFB $00 DFB $1A DFB $1A DFB $26 DFB $26 DFB $72 DFB $72 DFB $88 DFB $C8 DFB $C4 DFB $CA DFB $26 DFB $48 DFB $44 DFB $44 DFB $A2 DFB $C8 PAGE IRQ STA ACC PLA PHA ASL A ASL A ASL A BMI BREAK JMP (IRQLOC) BREAK PLP JSR SAV1 PLA STA PCL PLA STA PCH JMP (BRKV) ;BRKV WRITTEN OVER BY DISK BOOT OLDBRK JSR INSDS1 JSR RGDSP1 JMP MON RESET CLD ;DO THIS FIRST THIS TIME JSR SETNORM JSR INIT JSR SETVID JSR SETKBD INITAN LDA SETAN0 ; AN0 = TTL HI LDA SETAN1 ; AN1 = TTL HI LDA CLRAN2 ; AN2 = TTL LO LDA CLRAN3 ; AN3 = TTL LO LDA CLRROM ; TURN OFF EXTNSN ROM BIT KBDSTRB ; CLEAR KEYBOARD NEWMON CLD JSR BELL ; CAUSES DELAY IF KEY BOUNCES LDA SOFTEV+1 ;IS RESET HI EOR #$A5 ; A FUNNY COMPLEMENT OF THE CMP PWREDUP ; PWR UP BYTE ??? BNE PWRUP ; NO SO PRWUP LDA SOFTEV ; YES SEE IF COLD START BNE NOFIX ; HAS BEEN DONE YET? LDA #$E0 ; ?? CMP SOFTEV+1 ; ?? BNE NOFIX ; YES SO REENTER SYSTEM FIXSEV LDY #3 ; NO SO POINT AT WARM START STY SOFTEV ; FOR NEXT RESET JMP BASIC ; AND DO THE COLD START NOFIX JMP (SOFTEV) ; SOFT ENTRY VECTOR ******************************** PWRUP JSR APPLEII SETPG3 EQU * ; SET PAGE 3 VECTORS LDX #5 SETPLP LDA PWRCON-1,X ; WITH CNTRL B ADRS STA BRKV-1,X ; OF CURRENT BASIC DEX BNE SETPLP LDA #$C8 ; LOAD HI SLOT +1 STX LOC0 ; SETPG3 MUST RETURN X=0 STA LOC1 ; SET PTR H SLOOP LDY #7 ; Y IS BYTE PTR DEC LOC1 LDA LOC1 CMP #$C0 ; AT LAST SLOT YET? BEQ FIXSEV ; YES AND IT CANT BE A DISK STA MSLOT NXTBYT LDA (LOC0),Y ; FETCH A SLOT BYTE CMP DISKID-1,Y ; IS IT A DISK ?? BNE SLOOP ; NO SO NEXT SLOT DOWN DEY DEY ; YES SO CHECK NEXT BYTE BPL NXTBYT ; UNTIL 4 CHECKED JMP (LOC0) NOP NOP * REGDSP MUST ORG $FAD7 REGDSP JSR CROUT RGDSP1 LDA #$45 STA A3L LDA #$00 STA A3H LDX #$FB RDSP1 LDA #$A0 JSR COUT LDA RTBL-251,X JSR COUT LDA #$BD JSR COUT * LDA ACC+5,X DFB $B5,$4A JSR PRBYTE INX BMI RDSP1 RTS PWRCON DW OLDBRK DFB $00,$E0,$45 DISKID DFB $20,$FF,$00,$FF DFB $03,$FF,$3C TITLE DFB $C1,$D0,$D0 DFB $CC,$C5,$A0 DFB $DD,$DB XLTBL EQU * DFB $C4,$C2,$C1 DFB $FF,$C3 DFB $FF,$FF,$FF * MUST ORG $FB19 RTBL DFB $C1,$D8,$D9 DFB $D0,$D3 PREAD LDA PTRIG LST ON LDY #$00 NOP NOP PREAD2 LDA PADDL0,X BPL RTS2D INY BNE PREAD2 DEY RTS2D RTS INIT LDA #$00 STA STATUS LDA LORES LDA LOWSCR SETTXT LDA TXTSET LDA #$00 BEQ SETWND SETGR LDA TXTCLR LDA MIXSET JSR CLRTOP LDA #$14 SETWND STA WNDTOP LDA #$00 STA WNDLFT LDA #$28 STA WNDWDTH LDA #$18 STA WNDBTM LDA #$17 TABV STA CV JMP VTAB APPLEII JSR HOME ; CLEAR THE SCRN LDY #8 STITLE LDA TITLE-1,Y ; GET A CHAR STA LINE1+14,Y DEY BNE STITLE RTS SETPWRC LDA SOFTEV+1 EOR #$A5 STA PWREDUP RTS VIDWAIT EQU * ; CHECK FOR A PAUSE CMP #$8D ; ONLY WHEN I HAE A CR BNE NOWAIT ; NOT SO, DO REGULAR LDY KBD ; IS KEY PRESSED? BPL NOWAIT ; NO CPY #$93 ; IS IT CTL S? BNE NOWAIT ; NO SO IGNORE BIT KBDSTRB ; CLEAR STROBE KBDWAIT LDY KBD ; WAIT TILL NEXT KEY TO RESUME BPL KBDWAIT ; WAIT FOR KEYPRESS CPY #$83 ; IS IT CONTROL C ? BEQ NOWAIT ; YES SO LEAVE IT BIT KBDSTRB ; CLR STROBE NOWAIT JMP VIDOUT ; DO AS BEFORE PAGE ESCOLD SEC ; INSURE CARRY SET JMP ESC1 ESCNOW TAY ; USE CHAR AS INDEX LDA XLTBL-$C9,Y ; XLATE IJKM TO CBAD JSR ESCOLD ; DO THIS CURSOR MOTION JSR RDKEY ; AND GET NEXT ESCNEW CMP #$CE ; IS THIS AN N ? BCS ESCOLD ; N OR GREATER DO IT CMP #$C9 ; LESS THAN I ? BCC ESCOLD ; YES SO OLD WAY CMP #$CC ; IS IT A L ? BEQ ESCOLD ; DO NORMAL BNE ESCNOW ; GO DO IT NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP * MUST ORG $FBC1 BASCALC PHA LSR A AND #$03 ORA #$04 STA BASH PLA AND #$18 BCC BASCLC2 ADC #$7F BASCLC2 STA BASL ASL A ASL A ORA BASL STA BASL RTS BELL1 CMP #$87 BNE RTS2B LDA #$40 JSR WAIT LDY #$C0 BELL2 LDA #$0C JSR WAIT LDA SPKR DEY BNE BELL2 RTS2B RTS PAGE STORADV LDY CH STA (BASL),Y ADVANCE INC CH LDA CH CMP WNDWDTH BCS CR RTS3 RTS VIDOUT CMP #$A0 BCS STORADV TAY BPL STORADV CMP #$8D BEQ CR CMP #$8A BEQ LF CMP #$88 BNE BELL1 BS DEC CH BPL RTS3 LDA WNDWDTH STA CH DEC CH UP LDA WNDTOP CMP CV BCS RTS4 DEC CV VTAB LDA CV VTABZ JSR BASCALC ADC WNDLFT STA BASL RTS4 RTS ESC1 EOR #$C0 ; ESC @ ? BEQ HOME ; IF SO DO HOME AND CLEAR ADC #$FD ; ESC-A OR B CHECK BCC ADVANCE ; A, ADVANCE BEQ BS ; B, BACKSPACE ADC #$FD ; ESC-C OR D CHECK BCC LF ; C, DOWN BEQ UP ; D GO UP ADC #$FD ; ESC-E OR F CHECK BCC CLREOL ; E, CLEAR TO END OF LINE BNE RTS4 ; ELSE NOT F,RETURN CLREOP LDY CH ; ESC F IS CLR TO END OF PAGE LDA CV CLEOP1 PHA JSR VTABZ JSR CLEOLZ LDY #$00 PLA ADC #$00 CMP WNDBTM BCC CLEOP1 BCS VTAB HOME LDA WNDTOP STA CV LDY #$00 STY CH BEQ CLEOP1 PAGE CR LDA #$00 STA CH LF INC CV LDA CV CMP WNDBTM BCC VTABZ DEC CV SCROLL LDA WNDTOP PHA JSR VTABZ SCRL1 LDA BASL STA BAS2L LDA BASH STA BAS2H LDY WNDWDTH DEY PLA ADC #$01 CMP WNDBTM BCS SCRL3 PHA JSR VTABZ SCRL2 LDA (BASL),Y STA (BAS2L),Y DEY BPL SCRL2 BMI SCRL1 SCRL3 LDY #$00 JSR CLEOLZ BCS VTAB CLREOL LDY CH CLEOLZ LDA #$A0 CLEOL2 STA (BASL),Y INY CPY WNDWDTH BCC CLEOL2 RTS WAIT SEC WAIT2 PHA WAIT3 SBC #$01 BNE WAIT3 PLA SBC #$01 BNE WAIT2 RTS NXTA4 INC A4L BNE NXTA1 INC A4H NXTA1 LDA A1L CMP A2L LDA A1H SBC A2H INC A1L BNE RTS4B INC A1H RTS4B RTS PAGE HEADR LDY #$4B JSR ZERDLY BNE HEADR ADC #$FE BCS HEADR LDY #$21 WRBIT JSR ZERDLY INY INY ZERDLY DEY BNE ZERDLY BCC WRTAPE LDY #$32 ONEDLY DEY BNE ONEDLY WRTAPE LDY TAPEOUT LDY #$2C DEX RTS RDBYTE LDX #$08 RDBYT2 PHA JSR RD2BIT PLA ROL A LDY #$3A DEX BNE RDBYT2 RTS RD2BIT JSR RDBIT RDBIT DEY LDA TAPEIN EOR LASTIN BPL RDBIT EOR LASTIN STA LASTIN CPY #$80 RTS RDKEY LDY CH LDA (BASL),Y PHA AND #$3F ORA #$40 STA (BASL),Y PLA JMP (KSWL) KEYIN INC RNDL BNE KEYIN2 INC RNDH KEYIN2 BIT KBD ; READ KEYBOARD BPL KEYIN STA (BASL),Y LDA KBD BIT KBDSTRB RTS ESC JSR RDKEY JSR ESCNEW RDCHAR JSR RDKEY CMP #$9B BEQ ESC RTS PAGE NOTCR LDA INVFLG PHA LDA #$FF STA INVFLG LDA IN,X JSR COUT PLA STA INVFLG LDA IN,X CMP #$88 BEQ BCKSPC CMP #$98 BEQ CANCEL CPX #$F8 BCC NOTCR1 JSR BELL NOTCR1 INX BNE NXTCHAR CANCEL LDA #$DC JSR COUT GETLNZ JSR CROUT GETLN LDA PROMPT JSR COUT LDX #$01 BCKSPC TXA BEQ GETLNZ DEX NXTCHAR JSR RDCHAR CMP #$95 BNE CAPTST LDA (BASL),Y CAPTST CMP #$E0 BCC ADDINP AND #$DF ; SHIFT TO UPPER CASE ADDINP STA IN,X CMP #$8D BNE NOTCR JSR CLREOL CROUT LDA #$8D BNE COUT PRA1 LDY A1H LDX A1L PRYX2 JSR CROUT JSR PRNTYX LDY #$00 LDA #$AD JMP COUT PAGE XAMB LDA A1L ORA #$07 STA A2L LDA A1H STA A2H MOD8CHK LDA A1L AND #$07 BNE DATAOUT XAM JSR PRA1 DATAOUT LDA #$A0 JSR COUT LDA (A1L),Y JSR PRBYTE JSR NXTA1 BCC MOD8CHK RTS4C RTS XAMPM LSR A BCC XAM LSR A LSR A LDA A2L BCC ADD EOR #$FF ADD ADC A1L PHA LDA #$BD JSR COUT PLA PRBYTE PHA LSR A LSR A LSR A LSR A JSR PRHEXZ PLA PRHEX AND #$0F PRHEXZ ORA #$B0 CMP #$BA BCC COUT ADC #$06 COUT JMP (CSWL) COUT1 CMP #$A0 BCC COUTZ AND INVFLG COUTZ STY YSAV1 PHA JSR VIDWAIT ; GO CHECK FOR PAUSE PLA LDY YSAV1 RTS PAGE BL1 DEC YSAV BEQ XAMB BLANK DEX BNE SETMDZ CMP #$BA BNE XAMPM STOR STA MODE LDA A2L STA (A3L),Y INC A3L BNE RTS5 INC A3H RTS5 RTS SETMODE LDY YSAV LDA IN-1,Y SETMDZ STA MODE RTS LT LDX #$01 LT2 LDA A2L,X STA A4L,X STA A5L,X DEX BPL LT2 RTS MOVE LDA (A1L),Y STA (A4L),Y JSR NXTA4 BCC MOVE RTS VFY LDA (A1L),Y CMP (A4L),Y BEQ VFYOK JSR PRA1 LDA (A1L),Y JSR PRBYTE LDA #$A0 JSR COUT LDA #$A8 JSR COUT LDA (A4L),Y JSR PRBYTE LDA #$A9 JSR COUT VFYOK JSR NXTA4 BCC VFY RTS LIST JSR A1PC LDA #$14 LIST2 PHA JSR INSTDSP JSR PCADJ STA PCL STY PCH PLA SEC SBC #$01 BNE LIST2 RTS PAGE A1PC TXA BEQ A1PCRTS A1PCLP LDA A1L,X STA PCL,X DEX BPL A1PCLP A1PCRTS RTS SETINV LDY #$3F BNE SETIFLG SETNORM LDY #$FF SETIFLG STY INVFLG RTS SETKBD LDA #$00 INPORT STA A2L INPRT LDX #KSWL LDY #KEYIN BNE IOPRT SETVID LDA #$00 OUTPORT STA A2L OUTPRT LDX #CSWL LDY #COUT1 IOPRT LDA A2L AND #$0F BEQ IOPRT1 ORA #IOADR/256 LDY #$00 BEQ IOPRT2 IOPRT1 LDA #COUT1/256 IOPRT2 EQU * STY LOC0,X ; $94,$00 STA LOC1,X ; $95,$01 RTS NOP NOP XBASIC JMP BASIC BASCONT JMP BASIC2 GO JSR A1PC JSR RESTORE JMP (PCL) REGZ JMP REGDSP TRACE RTS * TRACE IS GONE NOP STEPZ RTS ; STEP IS GONE NOP NOP NOP NOP NOP USR JMP USRADR PAGE WRITE LDA #$40 JSR HEADR LDY #$27 WR1 LDX #$00 EOR (A1L,X) PHA LDA (A1L,X) JSR WRBYTE JSR NXTA1 LDY #$1D PLA BCC WR1 LDY #$22 JSR WRBYTE BEQ BELL WRBYTE LDX #$10 WRBYT2 ASL A JSR WRBIT BNE WRBYT2 RTS CRMON JSR BL1 PLA PLA BNE MONZ READ JSR RD2BIT LDA #$16 JSR HEADR STA CHKSUM JSR RD2BIT RD2 LDY #$24 JSR RDBIT BCS RD2 JSR RDBIT LDY #$3B RD3 JSR RDBYTE STA (A1L,X) EOR CHKSUM STA CHKSUM JSR NXTA1 LDY #$35 BCC RD3 JSR RDBYTE CMP CHKSUM BEQ BELL PRERR LDA #$C5 JSR COUT LDA #$D2 JSR COUT JSR COUT BELL LDA #$87 JMP COUT PAGE RESTORE LDA STATUS PHA LDA A5H REST1 LDX XREG LDY YREG PLP RTS SAVE STA A5H SAV1 STX XREG STY YREG PHP PLA STA STATUS TSX STX SPNT CLD RTS OLDRST JSR SETNORM JSR INIT JSR SETVID JSR SETKBD PAGE MON CLD JSR BELL MONZ LDA #$AA STA PROMPT JSR GETLNZ JSR ZMODE NXTITM JSR GETNUM STY YSAV LDY #$17 CHRSRCH DEY BMI MON CMP CHRTBL,Y BNE CHRSRCH JSR TOSUB LDY YSAV JMP NXTITM DIG LDX #$03 ASL A ASL A ASL A ASL A NXTBIT ASL A ROL A2L ROL A2H DEX BPL NXTBIT NXTBAS LDA MODE BNE NXTBS2 * LDA A2H,X * STA A1H,X * STA A3H,X NXTBS2 INX BEQ NXTBAS BNE NXTCHR GETNUM LDX #$00 STX A2L STX A2H NXTCHR LDA IN,Y INY EOR #$B0 CMP #$0A BCC DIG ADC #$88 CMP #$FA BCS DIG RTS TOSUB LDA #GO/256 PHA LDA SUBTBL,Y PHA LDA MODE ZMODE LDY #$00 STY MODE RTS PAGE CHRTBL DFB $BC DFB $B2 DFB $BE DFB $B2 ; T CMD NOW LIKE USR DFB $EF DFB $C4 DFB $B2 ; S CMD NOW LIKE USR DFB $A9 DFB $BB DFB $A6 DFB $A4 DFB $06 DFB $95 DFB $07 DFB $02 DFB $05 DFB $F0 DFB $00 DFB $EB DFB $93 DFB $A7 DFB $C6 DFB $99 SUBTBL DFB $B2 DFB $C9 DFB $BE DFB $C1 DFB $35 DFB $8C DFB $C4 DFB $96 DFB $AF DFB $17 DFB $17 DFB $2B DFB $1F DFB $83 DFB $7F DFB $5D DFB $CC DFB $B5 DFB $FC DFB $17 DFB $17 DFB $F5 DFB $03 DW NMI DW RESET DW IRQ ENDASM