; SCREDIT (C) 1984 RON HODGE›;›; ASSEMBLED ON MAC65›          .OPT NO LIST›          .OPT OBJ›;›;----------------------------›; PROGRAM EQUATES›;----------------------------›DLIST     = $0600›PLBAS     = $3000   PM BASE›PB0       = $3400   PLYR 0 BASE›HXTXT     = $743C   CHR UNDER CRSR›CHDIS     = $742D›SCREEN    = $6000   1ST SCRN BYTE›SCRSIZ    = 5120    SCRN SIZE›CHRSET    = $5400   CHR SET LOC›CHRSIZ    = 512     CHR SET SIZE›;›;----------------------------›; ZERO PAGE EQUATES›;----------------------------›;›OPT       = $80     MENU OPTION›STAT      = $81     I/O ERR STATUS›XSAV      = $82     TEMP X VALUE›MODFLG    = $83     MENU/EDIT STATUS›SCBIT     = $F0     SCROL BIT CTR›CHR       = $F1     DISP CHAR›SCRN      = $F2     PTR TO SCRN›SCRNH     = $F3›SCRLO     = $F4     SCRL BYTE CTR›SCRHI     = $F5›PMLO      = $F6     PTR TO PM0›PMHI      = $F7›COL       = $F8     CURSOR COLUMN›ROW       = $F9     ROW›TEMP0     = $FA     TEMP POINTER›TEMP1     = $FB›VOFF      = $FC     VRT OFFSET P0›HORP0     = $FD     HPOSP0 SHADOW›SCFLG     = $FE     SCROL IF <>0›;              POS = RITE SCROL›;              NEG = LEFT SCROL›TXTCLR    = $FF     TXT WINDOW COLR›;›;----------------------------›; CONSTANTS›;----------------------------›;›RITPM     = 200     RITEMOST P0 POS›LFTPM     = 48      LEFT     "›BOTPM     = 191     BOT›TOPPM     = 47      TOP›ROWM      = 9       BOTTOM ROW›COLM      = 19      RITE COLUMN›WIDTH     = 255     CURSOR WIDTH›HITE      = 16      HITE›START     = 6       CONSOL VALUES›SELECT    = 5›OPTION    = 3›HOR       = 8       HOR DISTANCE›RETURN    = $0C›ESC       = $1C›TAB       = $2C›DEL       = $34›INSERT    = $37›CLR       = $36›COLON     = $3A›SPACE     = $20›EOF       = $88     END OF FILE›EOL       = $9B     END OF LINE›BUFLEN    = 40›EDEV      = $10     DEVICE NUM'S›SDEV      = $20›KDEV      = $30›DDEV      = $40›;›;----------------------------›; SYSTEM EQUATES›;----------------------------›;›CH        = $02FC   KEY PRESSED›POKMSK    = $10›IRQEN     = $D20E›VDSLST    = $0200›SIZEP0    = $D008›COLPF2    = $02C6›HSCROL    = $D404›PMBASE    = $D407›COLOR0    = $02C4   COL REG 0›COLOR1    = $02C5›COLOR4    = $02C8›SDLSTL    = $0230   PTR TO DLIST›SDLSTH    = $0231›CHBAS     = $02F4   CHAR SET›SDMCTL    = $022F   SCRN CONTROL›DMACTL    = $D400›GRACTL    = $D01D   GRAPH CONTROL›HPOSP0    = $D000›GPRIOR    = $026F›STICK0    = $0278   J/STICK0›PCOLR0    = $02C0›CONSOL    = $D01F›XITVBV    = $E462›TRIG0     = $0284›CHBASE    = $D409   CHAR SET ADR›WSYNC     = $D40A›NMIEN     = $D40E›ATACHR    = $02FB›CRSINH    = $02F0   CURS ON/OFF›COLCRS    = $55     CURSOR COLUMN›ROWCRS    = $54     ROW›TABMAP    = $02A3   TAB SET POS'S›RAMTOP    = 106›;›;----------------------------›; CIO ADDRESSES›;----------------------------›;›ICCOM     = $0342   COMMAND ADDR›ICBAL     = $0344   BUFF ADDR LO›ICBAH     = $0345   BUFF ADDR HI›ICAX1     = $034A   AUX BYTE 1›ICAX2     = $034B   AUX BYTE 2›CIOV      = $E456   CENTRAL I/O›ICBLL     = $0348   BUF LENGTH LO›ICBLH     = $0349   BUF LENGTH HI›;›;----------------------------›; CIOV COMMANDS›;----------------------------›;›OPEN      = 3›CLOSE     = 12›GETCHR    = 7       GET CHARACTER›GETREC    = 5       GET RECORD›PUTCHR    = 11      PUT CHARACTER›PUTREC    = 9       PUT RECORD›OPDIR     = 6       OPEN DIRECTORY›WRITE     = 8       AUX COMMAND›READ      = 4       AUX COMMAND›;----------------------------›;›          *= $4000›;------------------------------›; START OF SCREEN MENU ROUTINE›;------------------------------›MENU›;›          JSR CLSALL  CLOSE DEVICES›          JSR MODE0   OPEN S: & E:›          JSR OPNKBD  OPEN KEYBOARD›A1›          JSR CRSROFF›          JSR SCRPRT  PRINT MENU›          JSR GETOPT  GET OPTION›          JSR DOOPT   DO THE OPTION›          LDA OPT›          CMP #'5     EXIT OPTION ?›          BCC A1      NOT IF <5›          BNE A2      IT'S 6›          JSR CLSALL  CLOSE DEVICES›          JMP INIT    GO TO EDITOR›A2›          JSR CLSALL›          JSR DOS›; RETURN ONLY IF NO DOS ON DISK›          JSR NODOS   ANNOUNCE NO DOS›          JMP MENU    THEN START OVER›;------------------------------›; OPEN S:, E: AND K: DEVICES›;------------------------------›MODE0›; OPEN SCRN TO MODE 0›          LDX #SDEV›          LDA #OPEN›          STA ICCOM,X›          LDA # <SCOLON›          STA ICBAL,X›          LDA # >SCOLON›          STA ICBAH,X›          LDA #8      AUX COMMAND›          STA ICAX1,X SET TO 'WRITE'›          LDA #0      GR. MODE›          STA ICAX2,X›          JSR CIOV›OPENED›; OPEN THE E: DEVICE›          LDX #EDEV›          LDA #OPEN›          STA ICCOM,X›          LDA # <ECOLON›          STA ICBAL,X›          LDA # >ECOLON›          STA ICBAH,X›          LDA #12     AUX COMMAND›          STA ICAX1,X›          LDA #0›          STA ICAX2,X›          JSR CIOV›;›          LDA #0      CHANGE COLORS›          STA COLOR1›          LDA #154›          STA COLPF2›          STA COLOR4›          RTS ›OPNKBD›          LDX #KDEV   OPEN KEYBOARD›          LDA #OPEN›          STA ICCOM,X›          LDA # <KCOLON›          STA ICBAL,X›          LDA # >KCOLON›          STA ICBAH,X›          LDA #4›          STA ICAX1,X›          LDA #0›          STA ICAX2,X›          JSR CIOV›          SEI         TURN OFF BRK KEY›          LDA POKMSK›          AND #$7F    STRIP HI BIT›          STA POKMSK›          STA IRQEN›          CLI ›          RTS ›;›;------------------------------›; PRINT THE MENU SCREEN›;------------------------------›SCRPRT›          LDA #0      CLR 8 TAB POS'S›          STA TABMAP›          LDA #$40    TAB AT 10›          STA TABMAP+1›PRTMSG›          LDX #15›B1›          LDY MSG,X   HI ADDR›          LDA MSG-1,X GET LO ADDR›          STX XSAV    SAVE X›          JSR PRINT›          LDX XSAV›          DEX ›          DEX ›          BPL B1›          RTS›PRINT›; ENTER WITH A=LSB OF MSG›;            Y=MSB OF MSG›          LDX #0›          STA ICBAL,X›          TYA ›          STA ICBAH,X›          LDA #PUTREC›          STA ICCOM,X›          LDA #40     JUST TO BE SAFE›          STA ICBLL,X›          TXA ›          STA ICBLH,X›          JSR CIOV›          RTS ›;›;------------------------------›; GET THE OPTION FM K: DEVICE›;------------------------------›GETOPT›          JSR POS2412 POSITION CRSR›GETKEY›          LDA #GETCHR GET THE KEY›          LDX #KDEV›          LDY #1›          JSR DOCIO›PRT1›          LDA #$9B    FORCE EOL AS 2ND›          STA BUFF+1  CHAR IN BUFFER›          LDA # <BUFF SO ONLY 1 CHR›          LDY # >BUFF IS PRINTED.›          JSR PRINT   PRINT SELECTION›          JSR PRTBLK  SKIP A LINE›;›          LDA BUFF    IS KEY OK ?›          CMP #$20    IS IT SPACE ?›          BEQ GETOPT›          CMP #'1     KEY <1 ?›          BCC PRTQUE  YES, ASK KEY AGAIN›          CMP #'6+1   KEY >6 ?›          BCS PRTQUE›          RTS ›PRTQUE›; PRINT QUESTION AGAIN AFTER›; WRONG KEY IS PRESSED›          LDA #$FD    BUZZER CHAR›          STA BUFF›          LDA # <BUFF›          LDY # >BUFF›          JSR PRINT›          JSR POS2412 PLACE CRSR›          LDA #$20    SPACE›          STA BUFF›          JMP PRT1    CLR AND CONTINUE›;›;------------------------------›; PRINT THE DIRECTORY ON SCRN›;------------------------------›GETDIR›          LDX #DDEV   OPEN DIRECTORY›          LDA #OPEN›          STA ICCOM,X›          LDA #OPDIR›          STA ICAX1,X›          LDA # <DIRNAM›          STA ICBAL,X›          LDA # >DIRNAM›          STA ICBAH,X›          JSR CIOV›GET1›          LDA #GETREC GET DIRECTORY›          LDX #DDEV›          LDY #40›          JSR DOCIO›          TYA ›          BPL PRTDIR›          STY STAT    SAVE STATUS›          LDX #DDEV›          JMP DEVOFF›PRTDIR›; PRINT DIRECTORY ONE FILE›; AT A TIME›;›          LDX #SDEV›          LDA # <BUFF-5 FORCE 5 SPACES›          STA ICBAL,X IN FRONT›          LDA # >BUFF-5›          STA ICBAH,X›          LDA #PUTREC›          STA ICCOM,X›          LDA #40›          JSR DOCIO2›          JMP GET1›DOCIO›; THIS ROUTINE IS USED TO GET›; THE DISK DIR AND TO PRINT IT›; ENTER WITH X=DEVICE #›;            A=COMMAND›;            Y=BUFF LENGTH LSB›          STA ICCOM,X›          LDA # <BUFF›          STA ICBAL,X LSB OF ADDR›          LDA # >BUFF HI BYTE›          STA ICBAH,X›          TYA ›DOCIO2›          STA ICBLL,X›          LDA #0›          STA ICBLH,X›          JSR CIOV›          RTS ›;›;------------------------------›; ROUTE THE OPTIONS›;------------------------------›;›DOOPT›          LDA BUFF    GET 1ST CHAR›          STA OPT     SAVE OPTION›          CMP #'4     IS IT LOAD/SAVE?›          BCC ASKNAM  YES, IF <4›          BNE C1      ELSE 5 IF NOT 4›          JSR GETDIR  GET DIRECTORY›          JMP PRSKEY›C1›          RTS         RETURN W/OPT=5›ASKNAM›          CMP #'2     SAVE OPTION ?›          BNE D1      NO›          LDA # <SFNAM ASK FOR NAME›          LDY # >SFNAM OF FILE TO SAVE›          JSR PRINT›          JMP GETNAM›D1›          LDA # <LFNAM›          LDY # >LFNAM›          JSR PRINT›GETNAM›          JSR PRTBLK›          LDA #9      POSITION CRSR›          STA COLCRS›          JSR CRSRON  TURN CRSR ON›          LDA #GETREC›          LDX #EDEV›          LDY #15     GET 15 CHAR ONLY›          JSR DOCIO›          JSR CRSROFF TURN CRSR OFF›          TYA ›          BPL E1›          CPY #EOF    EOF ERROR?›          BEQ E1      YEP, SO IT'S OK›          JMP ERROR   PRINT ERROR MSG›E1›          LDA BUFF›          CMP #'D     IF D 1/ST CHAR ?›          BEQ E2›          LDY #165    FILENAME ERROR›          JMP ERROR›E2›          LDA OPT     IS IT CHAR OR›          CMP #'3     SCRN FILE ?›          BNE SCRFIL  SCRN FILE IF <>3›;›;------------------------------›; GET CHAR SET›;------------------------------›;›CHRIO›          LDX #DDEV›          JSR DEVOFF›          LDY #READ›          JSR OPN›          TYA ›          BPL GETSET›          JMP ERROR›GETSET›          LDA #GETCHR LOAD CHAR SET›          LDX #DDEV›          STA ICCOM,X›          LDA # <CHRSET›          STA ICBAL,X›          LDA # >CHRSET›          STA ICBAH,X›          LDA # <CHRSIZ›          STA ICBLL,X›          LDA # >CHRSIZ›          STA ICBLH,X›          JSR DOSCRN2›          LDY STAT›          JMP ERRTST  TEST FOR ERROR›;›;------------------------------›; LOAD OR SAVE SCREEN FILE›;------------------------------›;›SCRFIL›          LDX #DDEV   TURN OFF DISK›          JSR DEVOFF›          LDA OPT     GET OPTION›          CMP #'1     LOAD SCRN ?›          BNE F1      NO›          LDY #READ   YES›          BNE F2      ALWAYS›F1›          LDY #WRITE›F2›          JSR OPN     OPEN DISK DRIVE›          TYA ›          BPL SCRIO›          JMP ERROR›SCRIO›          LDA OPT›          CMP #'1›          BNE G1›          LDA #GETCHR›          BNE G2      ALWAYS›G1›          LDA #PUTCHR›G2›          JSR DOSCRN›          STY STAT    SAVE ERR STATUS›;›;------------------------------›; TEST FOR DISK I/O ERROR›; AND CONFIRM GOOD LOAD/SAVE›;------------------------------›;›ERRTST›          TYA         TEST FOR ERROR›          BPL H2›          JMP ERROR›H2›          LDA OPT›          CMP #'2     SAVE OR LOAD ?›          BNE H3      LOAD IF #<> 2›          LDA # <SVOK VERIFY SAVE IS OK›          LDY # >SVOK›          JSR PRINT›          JMP PRSKEY›H3›          LDA # <LDOK›          LDY # >LDOK›          JSR PRINT   VERIFY LOAD IS OK›          JMP PRSKEY  GET NEXT OPTION›ERROR›; THIS ROUTINE PRINTS THE›; ERROR CODES ON SCREEN.›          LDX #2      CLR ERRR BUFFER›          LDA #SPACE  OF PREV ERRORS›I1›          STA ERRR+11,X›          DEX ›          BPL I1›          JSR BIN2ASC CONVERT ERROR›          LDA #$9B›          LDY #12›          STA ERRR,Y  FORCE EOL›          JSR PRTBLK›          LDA # <ERRR›          LDY # >ERRR PRINT ERROR›          JSR PRINT›          JMP PRSKEY  GET NEXT OPTION›OPN›; THIS ROUTINE OPENS THE DISK›; DRIVE FOR LOAD/SAVE OF SCRNS›; OR CHAR SETS.›; ENTER WITH Y = AUX (R OR W)›          LDX #DDEV›          LDA #OPEN›          STA ICCOM,X›          LDA # <BUFF FILE NAME›          STA ICBAL,X›          LDA # >BUFF›          STA ICBAH,X›          TYA         Y = READ OR›          STA ICAX1,X WRITE AUX COMM.›          LDA #0›          STA ICAX2,X›          JSR CIOV›          STY STAT›          RTS ›DOSCRN›; THIS ROUTINE LOADS OR SAVES›; THE SCRN.›; ENTER WITH ACC = PUTCHR OR›;                = GETCHR›          LDX #DDEV›          STA ICCOM,X›          LDA # <SCREEN BEG OF SCREEN›          STA ICBAL,X›          LDA # >SCREEN›          STA ICBAH,X›          LDA # <SCRSIZ SIZE OF SCRN›          STA ICBLL,X›          LDA # >SCRSIZ›          STA ICBLH,X›DOSCRN2›          JSR CIOV›          STY STAT›          JSR DEVOFF›          RTS ›BIN2ASC›; THIS ROUTINE CONVERTS THE Y›; REGISTER ERROR INTO DECIMAL›; ASCI AND PUTS IT IN THE›; I/O BUFFER.›; ENTER WITH Y=ERROR #›          STY STAT    SAVE ERROR›          TYA ›          LDY #9      ERRR BUFF INDEX›          LDX #0›J1›          CMP #100    LESS THAN 100 ?›          BCC SAV100›          SBC #100    COUNT THE 100'S›          INX         COUNT # OF 100'S›          JMP J1›SAV100›          JSR SAVERR  CONVERT #›          LDX #0›K1›          CMP #10     COUNT THE 10'S›          BCC SAV10›          SBC #10     SUB TIL <10›          INX ›          JMP K1›SAV10›          JSR SAVERR  CONVERT IT›          CLC ›          ADC #$30    CONVERT 1'S›          STA ERRR,Y  PUT IN BUFFER›          INY ›          RTS ›SAVERR›          PHA ›          TXA         GET # TO CONVERT›          ADC #$30    CONVERT IT›          STA ERRR,Y  PUT IN BUFFER›          INY ›          PLA         RESTORE ACC›          RTS         DO TIL DONE›DEVOFF›; TURN OFF DEVICE›; ENTER WITH X=DEVICE #›          LDA #CLOSE  CLOSE COMMAND›          STA ICCOM,X›          JSR CIOV›          RTS ›POS2412›          LDA #24     POS 24,12›          STA COLCRS›          LDA #0›          STA COLCRS+1›          LDA #12›          STA ROWCRS›          RTS ›PRSKEY›          JSR PRTBLK›          LDA # <PRES TELL TO PRESS›          LDY # >PRES START KEY›          JSR PRINT›          LDA #6›L1›          CMP CONSOL  RETURN WHEN IT'S›          BNE L1      PRESSED›          RTS ›PRTBLK›          LDA # <BLNK PRINT BLANK LINE›          LDY # >BLNK›          JSR PRINT›          RTS ›CRSROFF›          LDX #1      TURN CRSR OFF›          STX CRSINH›          RTS ›CRSRON›          LDX #0      TURN CRSR ON›          STX CRSINH›          RTS ›CLSALL›; CLOSE ALL DEVICES EXC 0›          LDX #EDEV›          JSR DEVOFF›          LDX #SDEV›          JSR DEVOFF›          LDX #KDEV›          JSR DEVOFF›          LDX #DDEV›          JMP DEVOFF›DOS›          JMP ($0A)›          RTS ›NODOS›; ANNOUNCE NO DOS ON DISK›          LDA # <NONE›          LDY # >NONE›          JSR PRINT›          JMP PRSKEY›;›;------------------------------›; DEVICE NAMES›;------------------------------›ECOLON    .BYTE "E:",EOL›SCOLON    .BYTE "S:",EOL›KCOLON    .BYTE "K:",EOL›DIRNAM    .BYTE "D:*.*",0›;›;------------------------------›; MESSAGES›;------------------------------›CRIT›          .BYTE 125,29,29,127,30,30,30,30›          .BYTE "SCREDIT (C) 1984 RON HODGE",EOL›OPT1›          .BYTE 29,29,127›          .BYTE "1- LOAD SCREEN",EOL›OPT2›          .BYTE 127,'2- SAVE SCREEN",EOL›OPT3›          .BYTE 127,'3- LOAD CHAR SET",EOL›OPT4›          .BYTE 127,'4- D1: DIRECTORY",EOL›OPT5›          .BYTE 127,'5- EXIT TO EDITOR",EOL›OPT6›          .BYTE 127,'6- EXIT TO DOS",EOL›QUES›          .BYTE 29,127›          .BYTE "WHICH OPTION ?       ",EOL›SFNAM›          .BYTE 29,127›          .BYTE "NAME OF FILE TO ÓÁÖÅ ?",EOL›LFNAM›          .BYTE 29,127›          .BYTE "NAME OF FILE TO ÌÏÁÄ ?",EOL›LDOK›          .BYTE 29,127›          .BYTE "LOAD COMPLETED",EOL›SVOK›          .BYTE 29,127›          .BYTE "SAVE COMPLETED",EOL›PRES›          .BYTE 127›          .BYTE "PRESS ÓÔÁÒÔ TO CONTINUE",EOL›ERRR›          .BYTE 127›          .BYTE "ÅÒÒÏÒ:        ",EOL›NONE›          .BYTE 127›          .BYTE "ÅÒÒÏÒ: NO DOS ON DISK",EOL›BLNK›          .BYTE "                                  ',EOL›MSG›          .WORD QUES,OPT6,OPT5,OPT4,OPT3,OPT2,OPT1,CRIT›SPACES›          .BYTE 32,32,32,32,32›BUFF›          .BYTE 0,0,0,0,0,0,0,0,0,0›          .BYTE 0,0,0,0,0,0,0,0,0,0›          .BYTE 0,0,0,0,0,0,0,0,0,0›          .BYTE 0,0,0,0,0,0,0,0,0,0›;›;------------------------------›; START OF SCREEN EDITOR›;------------------------------›;›INIT›          LDY #15     INIT ZERO PAGE›AA1›          LDA ZPAG,Y›          STA $F0,Y›          DEY ›          BPL AA1›COLOR›          LDY #4›BB1›          LDA HUES,Y›          STA COLOR0,Y›          DEY ›          BPL BB1›          LDA # >CHRSET›          STA CHBAS›CLRPM›          LDA #0›          LDY #$FF›CC1›          STA PB0,Y›          DEY ›          BNE CC1›          STA SCBIT   SET HSCROL REG›          STA HSCROL›          STA MODFLG  0 = IN EDIT MODE›COLPL›          LDA #$5A›          STA PCOLR0  PINK CURSOR›PMPOS›          LDA #LFTPM›          STA HPOSP0›          STA HORP0›          LDA #0›          STA HPOSP0+1›          STA HPOSP0+2›          STA HPOSP0+3›SETPRI›          LDA #1      ALL PLAYRS,THEN›          STA GPRIOR  THEN ALL PF's›          LDA #0›          STA SIZEP0  SET P0 DBL WIDTH›          LDA #WIDTH›          JSR DRWPM   DRAW CURSOR›SETPMB›          LDA # >PLBAS›          STA PMBASE›ENBL›          LDA #3›          STA GRACTL  ENABLE PM's›CLRWND›          LDY #161    CLR TEXT WINDOW›          LDA #0›DD1›          STA $73FF,Y›          DEY ›          BNE DD1›SETDISP›          SEI         TURN OFF INT›          LDA #0      TURN OFF SCRN›          STA SDMCTL›          LDY #47›EE1›          LDA SDLIST,Y›          STA DLIST,Y›          DEY ›          BPL EE1›          LDA # <DLIST›          STA SDLSTL  CHNG DISP/SCRN›          LDA # >DLIST›          STA SDLSTH›          LDA #62     SINGLE LINE DISP›          STA SDMCTL›          LDA # <DLI  POINT TO OUR›          STA VDSLST  DLIST INTERRUPT›          LDA # >DLI›          STA VDSLST+1›          CLI ›VBLSET›          LDY # <VBLRTN›          LDX # >VBLRTN›          LDA #7      DEFERRED VBL›          JSR $E45C›          LDA #$C0    ENABLE DLI'S›          STA NMIEN   AND VERT BLANKS›;›          JSR OPNKBD  OPEN KEYBOARD›          JMP MAIN›;›;------------------------------›; VERTICAL BLANK ROUTINE›;------------------------------›;›; VBL ROUTINE READS THE J/S›; AND SCROLLS THE SCREEN IF J/S›; IS MOVED. THE SCROLL FLAG›; (SCFLG) IS SET IF SCROLLING›; IS UNDERWAY, SO THE MAIN›; ROUTINE SIMPLY LOOPS WHILE›; SCREEN IS SCROLLING.›;›VBLRTN›          LDA MODFLG  EXIT IF IN›          BNE FF2     MENU MODE›          LDX SCFLG   SCROLLING ?›          BEQ FF1     NO›          LDA $14     SLOW DOWN SCROL›          AND #1      TO EVERY OTHER›          BNE FF2     FRAME›          JSR SCROL›          JMP XITVBV›FF1›          LDA TRIG0   IS TRIG PRESSED?›          BEQ FF2     YES›          JSR CHKJS   READ J/S,ADJ SCFLG›FF2›          JMP XITVBV  END OF VBL !›;›;------------------------------›; MAIN ROUTINE›;------------------------------›;›MAIN›          LDA $14     JIFFY ELAPSED ?›GG1›          CMP $14›          BEQ GG1     NO›          LDA SCFLG   SCROLLING ?›          BNE MAIN    YES;SO LOOP BACK›CHKTRG›          LDA TRIG0   TRIGGER PUSHED ?›          BNE CHEK    NO, CHEK CONSOL›          LDA STICK0›          CMP #7      PUSHED RITE?›          BNE HH1›          JSR CRSRIT›          JMP WAIT›HH1›          CMP #11     LEFT ?›          BNE HH2›          JSR CRSLFT›          JMP WAIT›HH2›          CMP #14     UP ?›          BNE HH3›          JSR CRSUP›          JMP WAIT›HH3›          CMP #13     DOWN ?›          BNE CHEK›          JSR CRSDWN›          JMP WAIT›CHEK›          LDA CONSOL›          CMP #OPTION OPTION PRESSED ?›          BNE JJ1›          JSR CHGPRI  CHANGE PRIORITIES›          JMP CLIK›JJ1›          CMP #SELECT SELECT PRESSED ?›          BNE JJ2›          JSR SHWCHR  SHOW CHAR›          JSR SHWHEX  SHOW HEX VALUE›          JMP CLIK›JJ2›          CMP #START  START PRESSED ?›          BNE CHEKEY›          JSR FLIPCH  FLIP CHAR SETS›CLIK›          LDA #4›          STA CONSOL  CLIK›          JMP WAIT    WAIT1›CHEKEY›          LDA CH      GET KEY›          CMP #$FF    ANY PRESSED ?›          BEQ KK4     NO›KK1›          CMP #ESC    ESCAPE KEY ?›          BNE KK2     NO›          JMP CHGMOD  YEP,GOTO MENU›KK2›          JSR CMPCHR  PRINTABLE CHAR ?›          BCS KK4     NOT IF CARRY SET›          JSR TSTARW  CRSR CHAR ?›          BCS KK5     YES,IF CARRY SET›          JSR GETCH   ELSE GET CHAR›          JSR CONVERT CHG ASCI TO DISP›          JSR PUTCHAR AND PUT ONSCRN›          JMP WAIT›KK4›          JMP MAIN›KK5›          LDA #$FF›          STA CH›          JMP CLIK›WAIT›          LDA #$FF    CLR THE KEYBOARD›          STA CH›          LDX #4      # OF JIFFIES›LL1›          LDA $14     GET FRAME COUNT›LL2›          CMP $14›          BEQ LL2›          DEX         WAIT TIL 4 FRAMES›          BNE LL1     HAVE ELAPSED›          JMP MAIN    THEN LOOP TO MAIN›;›;------------------------------›; PROCESS KEYBOARD›;------------------------------›;›GETCH›; THIS ROUTINE ACCEPTS INPUT›; FROM THE KEYBOARD›          LDX #KDEV›          LDA #0      BUFFER LENGTH=0›          STA ICBLL,X SO CHAR RETURNS›          STA ICBLH,X IN ACC›          LDA #GETCHR›          STA ICCOM,X›          JSR CIOV›          RTS ›CONVERT›; CONVERT ATASCI TO INTERNAL›; CODE. ENTER W/ATASCI IN ACC›          TAY ›          ROL A›          ROL A›          ROL A›          ROL A›          AND #3›          TAX ›          TYA ›          AND #$9F›          ORA AT2INT,X›          STA CHR     SAVE INT CODE›          RTS ›PUTCHAR›          JSR SETMP›          LDY #0›          LDA CHR›          STA (TEMP0),Y›;›;------------------------------›; MOVE CURSOR WITH/WRAP AROUND›;------------------------------›;›CRSRIT›          LDY COL›          CPY #COLM   ON RITE COLUMN ?›          BEQ MM1     IS IT = OR > ?›          BCS MM1     YEP›          INC COL     NO, UPDATE COL›          INC SCRN    AND ADDR UNDER›          BNE MM3     CURSOR›          INC SCRN+1›MM3›          LDA HORP0   MOVE CURSOR›          CLC ›          ADC #HOR›          STA HORP0›          STA HPOSP0›          RTS ›MM1›          LDA #0›          STA COL     WRAP CURSOR›          LDA #LFTPM  PUT IN LEFTMOST›          STA HORP0   POSITION›          STA HPOSP0›          LDA SCRN    CHANGE SCRN PTR›          SEC ›          SBC #19›          STA SCRN›          BCS MM2›          LDA SCRN+1›          SBC #0›          STA SCRN+1›MM2›          RTS ›CRSLFT›          LDY COL     ON LEFT COLUMN ?›          BEQ NN1     YES›          DEC COL     NO, JUST DEC IT›          LDA SCRN    AND SCRN POINTER›          BNE NN2›          DEC SCRN+1›NN2›          DEC SCRN›          LDA HORP0   MOVE CURSOR›          SEC ›          SBC #HOR›          STA HORP0›          STA HPOSP0›          RTS ›NN1›          LDA #19›          STA COL     WRAP AROUND CURSOR›          CLC ›          ADC SCRN›          STA SCRN›          LDA SCRN+1›          ADC #0›          STA SCRN+1›          LDA #RITPM›          STA HORP0›          STA HPOSP0›          RTS ›CRSUP›          LDY ROW     ON TOP ROW ?›          BEQ PP1     YES›          DEC ROW     NO›          DEC SCRN+1  MOV UP 2 PAGES›          DEC SCRN+1›          LDA #0      ERASE CRSR›          JSR ERPM›          STY VOFF›          LDA #WIDTH›          JSR DRWPM›          RTS ›PP1›          LDA #ROWM›          STA ROW     WRAP AROUND CURSOR›          LDA SCRN+1  CHANGE SCRN PTR›          CLC ›          ADC #18›          STA SCRN+1›          LDA #0›          JSR ERPM    ERASE CRSR›          LDY #BOTPM›          STY VOFF›          LDA #WIDTH›          JSR DRWPM›          RTS ›CRSDWN›          LDY ROW     ON BOTTOM ROW ?›          CPY #ROWM›          BEQ QQ1›          BCS QQ1     YES›          INC ROW     NO›          INC SCRN+1  MOV DWN 2 PAGES›          INC SCRN+1›          LDA #0›          JSR ERPM›          LDA VOFF›          CLC ›          ADC #HITE›          STA VOFF›          LDA #WIDTH›          JSR DRWPM›          RTS ›QQ1›          LDA #0›          STA ROW     WRAP AROUND CURSOR›          LDA SCRN+1  CHANGE SCRN PTR›          SEC ›          SBC #18     ROWS*2›          STA SCRN+1›          LDA #0›          JSR ERPM    ERASE CRSR›          LDY #TOPPM›          STY VOFF›          LDA #WIDTH›          JSR DRWPM›          RTS ›;------------------------------›; READ JOYSTICK FOR SCROLLING›;------------------------------›CHKJS›          LDA STICK0  GET J/S›          CMP #7      PUSHED RITE ?›          BNE RR1›          JSR CHKLF   CAN WE SCROL LFT ?›          BCS RR2     NO›          LDA #8›          STA SCBIT›          LDA #$80›          STA SCFLG›          RTS ›RR1›          CMP #11     PUSHED LEFT ?›          BNE RR2›          JSR CHKRT   CAN WE SCROL RIT ?›          BCS RR2›          LDA #0›          STA SCBIT›          LDA #20›          STA SCFLG›RR2›          RTS ›ERPM›DRWPM›; ENTER WITH ACC = 0 TO ERASE›; OR ACC = WIDTH TO DRAW CRSR›          LDY VOFF›          LDX #HITE›SS1›          STA (PMLO),Y›          DEY ›          DEX ›          BNE SS1›          RTS ›;›;------------------------------›; FINE SCROLL A BYTE AT A TIME›;------------------------------›;›CHKLF›          LDY SCRLO   TEST FOR EAST MAX›          CPY #225    IS LOBYTE >225 ?›          BCC TT1     NO›          LDA SCRHI   YES;IS HYBYTE=0?›          BNE TT2     NO; DON'T SCROL›TT1›          INC SCRLO›          BNE TT3›          INC SCRHI›TT3›          CLC ›          RTS ›TT2›          SEC ›          RTS ›CHKRT›          LDY SCRLO›          CPY #6›          BCC UU1     CHEK HI BYTE IF <6›          DEC SCRLO›          CLC ›          RTS ›UU1›          LDX SCRHI›          BEQ UU2     DON'T SCROL IF 0›          DEC SCRLO   ELSE DEC LO CTR›          BPL UU3›          DEC SCRHI›UU3›          CLC ›          RTS ›UU2›          SEC ›          RTS ›SCROL›          TXA ›          BPL RITSC   RITE SCROL›LFTSC›          DEC SCBIT   DEC SCROL BIT›          BEQ LFTLP›          LDA SCBIT›          STA HSCROL›          RTS ›LFTLP›          LDX #28     PT TO HIEST LO LMS›V1›          INC DLIST+3,X›          BNE V2›          INC DLIST+4,X ELSE INC HIBYT›V2›          DEX         DLI INS›          DEX         LMS HI›          DEX         LMS LO›          BPL V1›          LDA #0›          STA SCFLG›          INC SCRN    UPDATE SCREEN›          BNE V3›          INC SCRN+1›V3›          LDA #8›          STA SCBIT›          STA HSCROL›          RTS ›RITSC›          INC SCBIT›          LDY SCBIT›          CPY #8›          BCS RITLP›          LDA SCBIT›          STA HSCROL›          RTS ›RITLP›          LDX #28›WW1›          LDA DLIST+3,X RESET LO BY›          BNE WW2›          DEC DLIST+4,X DEC HIBYTE›WW2›          DEC DLIST+3,X›          DEX         DLI›          DEX         LMS HI›          DEX         LMS LO›          BPL WW1›          LDA #0›          STA SCFLG›          LDA SCRN›          BNE WW3›          DEC SCRN+1›WW3›          DEC SCRN›          LDA #0›          STA SCBIT›          STA HSCROL›          RTS ›;›;------------------------------›; MISC ROUTINES›;------------------------------›;›CHGPRI›          LDA #1›          CMP GPRIOR›          BNE XX1›          LDA #4›          STA GPRIOR›          RTS ›XX1›          STA GPRIOR›          RTS ›SHWHEX›; DISP CHAR UNDER CRSR IN HEX›          LDY #0›          LDA (TEMP0),Y›          PHA ›          LSR A       MOV LEFT NIB TO RITE›          LSR A›          LSR A›          LSR A›          JSR HEX›          PLA ›          AND #$0F    CONVERT LEFT NIBBLE›HEX›          CLC ›          ADC #16›          CMP #26›          BCC YY1›          CLC ›          ADC #7›YY1›          STA HXTXT,Y›          INY ›          RTS ›DLI›; THIS DISPLAY LIST INTERRUPT›; OCCURS JUST BEFORE THE FIRST›; TEXT WINDOW MODE LINE.›          PHA ›          LDA #$E0    RESTORE CHAR SET›          STA WSYNC›          STA CHBASE›          LDA TXTCLR  TXT WINDOW COLOR›          STA COLPF2  PUT IN HDWR REG.›          PLA ›          RTI ›;›SETMP›; THIS COMPENSATES FOR SHIFT›; OF CHAR BY SCROL REG›          LDA SCRN    COPY PTR›          STA TEMP0›          LDA SCRN+1›          STA TEMP1›          LDA SCBIT›          BEQ ZZ3     XIT IF NO ADJ NEC›          LDA TEMP0   8, SO INC PTR›          BNE ZZ2›          DEC TEMP1›ZZ2›          DEC TEMP0›ZZ3›          RTS ›SHWCHR›          JSR SETMP›          LDY #0›          LDA (TEMP0),Y›          AND #63›          STA CHDIS›          RTS ›SDLIST›          .BYTE $70,$70,$70 ; 3*8 BLNK LINES›          .BYTE $57,$00,$60 ; 1 LINE GR.2›          .BYTE $57,$00,$62 ; 2›          .BYTE $57,$00,$64 ; 3›          .BYTE $57,$00,$66 ; 4›          .BYTE $57,$00,$68 ; 5›          .BYTE $57,$00,$6A ; 6›          .BYTE $57,$00,$6C ; 7›          .BYTE $57,$00,$6E ; 8›          .BYTE $57,$00,$70 ; 9›          .BYTE $D7,$00,$72 ; 10 W/DLI›          .BYTE $42,$00,$74 ; TEXT WINDOW›          .BYTE $42,$28,$74›          .BYTE $42,$50,$74›          .BYTE $42,$78,$74›          .BYTE $41   ; JVB›          .WORD DLIST›HUES›          .BYTE 40,202,148,70,0›ZPAG›; THIS TABLE LOADS ZERO PAGE›; VARIABLES›          .BYTE 8     SCBIT SCROL BIT CTR›          .BYTE $FF   CHR   DISP CHAR›          .BYTE 2     SCRN  PTR TO SCRN›          .BYTE $60   SCRN+1›          .BYTE 5     SCRLO SCRL BYTE CTR›          .BYTE 0     SCRHI  SCRL HI›          .BYTE  <PB0 PMLO PTR TO PM0›          .BYTE  >PB0 PMHI     "›          .BYTE 0     COL   CURSOR COLUMN›          .BYTE 0     ROW      "   ROW›          .BYTE 0     TEMP0›          .BYTE 0     TEMP1›          .BYTE TOPPM VOFF VRT OFFSET P0›          .BYTE LFTPM HPOSP0 SHADOW›          .BYTE 0     SCFLG <>=SCROLLING›          .BYTE 148   TXTCLR TXT WIN COLR›FLIPCH›          LDA # >CHRSET›          CMP CHBAS›          BEQ A1A›          STA CHBAS›          RTS ›A1A›          LDA #$E0›          STA CHBAS›          RTS ›CMPCHR›          PHA ›          AND #$3F    STRIP HI NIBBLE›          LDY #5›BA1›          CMP BADCH,Y›          BEQ BA2›          DEY ›          BPL BA1›          PLA ›          CLC ›          RTS ›BA2›          PLA ›          SEC         PRINTABLE CHAR›          RTS ›BADCH›; KEYS TO WEED OUT AND IGNORE›         .BYTE RETURN,ESC,TAB,DEL,INSERT,CLR›TSTARW›; TEST FOR CONTROL ARROW CHAR›          CMP #$8F    RETURN W/CARRY›          BNE TS1     SET IF CRSR MOVED›          JSR CRSDWN›          SEC ›          RTS ›TS1›          CMP #$8E›          BNE TS2›          JSR CRSUP›          SEC ›          RTS ›TS2›          CMP #$86›          BNE TS3›          JSR CRSLFT›          SEC ›          RTS ›TS3›          CMP #$87›          BNE TS4›          JSR CRSRIT›          SEC ›TS4›          RTS ›CHGMOD›; THIS ROUTINE EXITS TO THE›; MENU.›          LDA #$FF    TURN OFF VBL›          STA MODFLG›          LDX #KDEV   TURN OFF KEYBOARD›          JSR DEVOFF›          LDA #0›          STA GRACTL  TURN OFF PM'S›          STA HPOSP0›          LDA #34›          STA SDMCTL›          STA DMACTL›          JMP MENU›AT2INT›; ATASCI TO INTERNAL CONVERSION›          .BYTE $40,$00,$20,$60›          .END›