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›