09 .OPT NO LIST›10 ; SAVE #D1:SCREEN4.M65›20 ;›30 ;›40 ; LOAD #D1:STABLE2.M65›50 LIST ›063804 ?TSTCTL LDX #45 Check for›063806 ?TSTCT1 LDA CNTRLS,X control›063809 CMP ATACHR character›063812 BEQ ?TSTCT2›063814 DEX ›063815 DEX ›063816 DEX ›063817 BPL ?TSTCT1›063819 ?TSTCT2 RTS ›063820 ?PHACRS LDX #2 Save row/column›063822 ?PHACR1 LDA ROWCRS,X values›063824 STA TMPROW,X›063827 DEX ›063828 BPL ?PHACR1›063830 RTS ›063831 ?PLACRS LDX #2 Restore row›063833 ?PLACR1 LDA TMPROW,X and column›063836 STA ROWCRS,X›063838 DEX ›063839 BPL ?PLACR1›063841 RTS ›063842 ?SWAP LDA BOTSCR Swap cursor›063845 CMP #24 with regular›063847 BEQ ?SWAP3 cursor position›063849 LDX #11›063851 ?SWAP1 LDA ROWCRS,X›063853 PHA ›063854 LDA TXTROW,X›063857 STA ROWCRS,X›063859 PLA ›063860 STA TXTROW,X›063863 DEX ›063864 BPL ?SWAP1›063866 LDA SWPFLG›063868 EOR #$FF›063870 STA SWPFLG›063872 ?SWAP3 JMP STATUS.S›063875 CLICK LDX #126 Sound key›063877 PHA click›063878 ?CLICK1 STX CONSOL›063881 LDA VCOUNT›063884 ?CLICK2 CMP VCOUNT wait for›063887 BEQ ?CLICK2 scan line›063889 DEX ›063890 DEX ›063891 BPL ?CLICK1›063893 PLA ›063894 RTS ›063895 ?COLCR LDA #0 Set cursor at›063897 LDX SWPFLG left edge›063899 BNE ?COLCR1›063901 LDX DINDEX›063903 BNE ?COLCR2›063905 ?COLCR1 LDA LMARGN›063907 ?COLCR2 STA COLCRS›063909 RTS ›063910 ?PUTMSC LDA SAVMSC Set memory›063912 STA ADRESS scan counter›063914 LDA SAVMSC+1 address›063916 STA ADRESS+1›063918 RTS ›063919 SPECIAL.S LDX #0 Exec screen›063921 LDA ICCOMZ special command›063923 CMP #17 If not draw to›063925 BEQ ?DRAWA›063927 CMP #18 or fill›063929 BEQ ?DRAWB then›063931 LDY #132 xio syntax err›063933 RTS ›063934 ?DRAWB INX ›063935 ?DRAWA STX FILFLG›063938 LDA ROWCRS Put cursor posit›063940 STA NEWROW into newrow/col›063943 LDA COLCRS›063945 STA NEWCOL›063948 LDA COLCRS+1›063950 STA NEWCOL+1›063953 LDA #1 Set initial›063955 STA ROWINC directions›063958 STA COLINC›063961 SEC ›063962 LDA NEWROW Determine delta row›063965 SBC OLDROW›063967 STA DELTAR›063969 BCS ?DRAW1 Do direction and absolute value›063971 LDA #$FF Borrow attempted›063973 STA ROWINC Set direction down›063976 LDA DELTAR Negate delta rows›063978 EOR #$FF to get absolute›063980 CLC value›063981 ADC #1›063983 STA DELTAR›063985 ?DRAW1 SEC Now delta columns›063986 LDA NEWCOL›063989 SBC OLDCOL›063991 STA DELTAC›063993 LDA NEWCOL+1 Two byte value›063996 SBC OLDCOL+1›063998 STA DELTAC+1›064000 BCS ?DRAW2 direction and absolute value›064002 LDA #$FF Borrow attempted›064004 STA COLINC Reverse direction›064007 LDA DELTAC and set absolute›064009 EOR #$FF value›064011 STA DELTAC›064013 LDA DELTAC+1›064015 EOR #$FF›064017 STA DELTAC+1›064019 INC DELTAC›064021 BNE ?DRAW2›064023 INC DELTAC+1›064025 ?DRAW2 LDX #2 Zero ram for›064027 LDY #0 draw loop›064029 STY COLAC+1›064031 ?DRAW3A TYA ›064032 STA ROWAC,X›064034 LDA OLDROW,X›064036 STA ROWCRS,X›064038 DEX ›064039 BPL ?DRAW3A›064041 LDA DELTAC Find larger of row or col›064043 INX x=0›064044 TAY ›064045 LDA DELTAC+1›064047 STA COUNTR+1›064049 STA ENDPT+1›064051 BNE ?DRAW3 larger if msb>0›064053 LDA DELTAC low col > low row?›064055 CMP DELTAR›064057 BCS ?DRAW3 yes›064059 LDA DELTAR›064061 LDX #2›064063 TAY ›064064 ?DRAW3 TYA Put in initial›064065 STA COUNTR conditions›064067 STA ENDPT›064069 PHA save a›064070 LDA ENDPT+1 put bit0 of hibyte›064072 LSR A into carry›064073 PLA restore a›064074 ROR A now a 9-bit ror›064075 STA ROWAC,X›064077 ?DRAW4A LDA COUNTR test 0›064079 ORA COUNTR+1›064081 BNE ?DRAW11›064083 JMP ?DRAW10 if 0 leave draw›064086 ?DRAW11 CLC add row to rowac›064087 LDA ROWAC (plot loop)›064089 ADC DELTAR›064091 STA ROWAC›064093 BCC ?DRAW5›064095 INC ROWAC+1›064097 ?DRAW5 LDA ROWAC+1 Compare rowac›064099 CMP ENDPT+1 to endpoint›064101 BCC ?DRAW6 If less go to column›064103 BNE ?DRAW5A›064105 LDA ROWAC Ditto for low byte›064107 CMP ENDPT›064109 BCC ?DRAW6›064111 ?DRAW5A CLC Greater or equal›064112 LDA ROWCRS so move point›064114 ADC ROWINC›064117 STA ROWCRS›064119 LDX #0 and subtract end point›064121 JSR ?SUBEND from rowac›064124 ?DRAW6 CLC same for column›064125 LDA COLAC (double byte add)›064127 ADC DELTAC›064129 STA COLAC›064131 LDA COLAC+1›064133 ADC DELTAC+1›064135 STA COLAC+1›064137 CMP ENDPT+1 Compare hi byte›064139 BCC ?DRAW8›064141 BNE ?DRAE6A›064143 LDA COLAC Compare lo byte›064145 CMP ENDPT›064147 BCC ?DRAW8›064149 ?DRAE6A BIT COLINC›064152 BPL ?DRAW6B›064154 DEC COLCRS Do double byte›064156 LDA COLCRS decrement›064158 CMP #$FF›064160 BNE ?DRAW7›064162 LDA COLCRS+1›064164 BEQ ?DRAW7 Don't dec if 0›064166 DEC COLCRS+1›064168 BPL ?DRAW7 Go always›064170 ?DRAW6B INC COLCRS Double byte›064172 BNE ?DRAW7 increment›064174 INC COLCRS+1›064176 ?DRAW7 LDX #2 Subtract endpt›064178 JSR ?SUBEND from colac›064181 ?DRAW8 JSR ?RANGE›064184 JSR ?OUTPLT plot point›064187 LDA FILFLG test right fill›064190 BEQ ?DRAW9›064192 JSR ?PHACRS›064195 LDA ATACHR›064198 STA HOLD4›064201 ?DRAW8A LDA ROWCRS Save row in›064203 PHA case of cr›064204 JSR ?INCRSA posit cursor one past dot›064207 PLA restore rowcrs›064208 STA ROWCRS›064210 JSR ?RANGE›064213 JSR ?GETPLT get data›064216 BNE ?DRAW8B stop if non-0›064218 LDA FILDAT fill data›064221 STA ATACHR›064224 JSR ?OUTPLT draw it›064227 JMP ?DRAW8A loop›064230 ?DRAW8B LDA HOLD4›064233 STA ATACHR›064236 JSR ?PLACRS›064239 ?DRAW9 SEC double byte subtract›064240 LDA COUNTR›064242 SBC #1›064244 STA COUNTR›064246 LDA COUNTR+1›064248 SBC #0›064250 STA COUNTR+1›064252 BMI ?DRAW10›064254 JMP ?DRAW4A›064257 ?DRAW10 JMP STATUS.S›