09       .OPT NO LIST›10 ;  SAVE #D1:SCREEN1.M65›20 ;›30 ;›40 ;  LOAD #D1:SCREEN2.M65›50 ;›60 ;  *= $EF6E 07 Oct 94›61       .PAGE "Editor and Screen"›70        LIST  ›72       .LOCAL ›80 CHAR  =   COLINC+1›061294 SINIT LDA #$FF Init screen›061296   STA CH›061299   LDA RAMSIZ›061302   STA RAMTOP›061304   LDA #$40    Default upper›061306   STA SHFLOK  case alpha›061309   LDA # <KEYTBL›061311   STA KEYDEF›061313   LDA # >KEYTBL›061315   STA KEYDEF+1›061317   LDA # <FNTBL›061319   STA FKDEF›061321   LDA # >FNTBL›061323   STA FKDEF+1›061325   RTS ›061326 OPEN.S LDA ICAX2Z Screen open›061328   AND #$0F    If mode 0 clear icax1z›061330   BNE ?OPNCOM and inhibit and mixed mode›061332 OPEN.E LDA ICAX1Z Editor open›061334   AND #$0F›061336   STA ICAX1Z›061338   LDA #0›061340 ?OPNCOM STA DINDEX Complete open›061342   CMP #15+1   Check mode›061344   BCC ?INRNG›061346   LDA #145    Bad mode›061348   JMP ?61780›061351 ?INRNG LDA # >CHARSET1 Set up›061353   STA CHBAS   vblank ram›061356   LDA # >CHARSET2›061358   STA CHSALT›061361   LDA #2›061363   STA CHACT›061366   STA SDMCTL  kill dma next vblank›061369   LDA #1      flag success›061371   STA DSTAT›061373   LDA #$C0    enable break key›061375   ORA POKMSK  and key interrupts›061377   STA POKMSK›061379   STA IRQEN›061382   LDA #$40    disable dlis›061384   STA NMIEN›061387   BIT FINE    Fine scroll?›061390   BPL ?NOFINE No›061392   LDA # <FDL  Set dli vector›061394   STA VDSLST›061397   LDA # >FDL›061399   STA VDSLST+1›061402   LDA #$C0    enable dlis›061404 ?NOFINE STA NMIEN›061407   LDA #0›061409   STA TINDEX  text index must be 0›061412   STA ADRESS›061414   STA SWPFLG›061416   STA CRSINH  cursor on›061419   LDY #14     set default tab›061421   LDA #1      stops›061423 ?CLRTAB STA TABMAP,Y›061426   DEY ›061427   BPL ?CLRTAB›061429   LDX #4›061431 ?DOPEN8 LDA COLRTB,X set default›061434   STA COLOR0,X colors›061437   DEX ›061438   BPL ?DOPEN8›061440   LDY RAMTOP  Set text window›061442   DEY         address 160 bytes›061443   STY TXTMSC+1 under ramtop›061446   LDA #$60›061448   STA TXTMSC›061451   LDX DINDEX›061453   LDA ANCONV,X Convert to›061456   STA HOLD1   antic code›061458   LDA RAMTOP›061460   STA ADRESS+1›061462   LDY DSPTBL,X›061465 ?DOPEN1 LDA #40 allocate in›061467   JSR ?DBSUB  blocks of 40 bytes›061470   DEY ›061471   BNE ?DOPEN1›061473   LDA GPRIOR  Clear gtia modes›061476   AND #$3F›061478   STA MLTTMP+1›061480   TAY ›061481   CPX #8      test if 320*1›061483   BCC ?NOT8›061485   CPX #15›061487   BEQ ?MODE15›061489   CPX #12›061491   BCS ?NOT8›061493   TXA         Get two low bits›061494   ROR A›061495   ROR A›061496   ROR A›061497   AND #$C0    Now two top bits›061499   ORA MLTTMP+1›061501   TAY ›061502 ?MODE15 LDA #16 Subtract 16 more›061504   JSR ?DBSUB  for page boundary›061507   CPX #11›061509   BNE ?NOT8›061511   LDA #6      Mode=11 put gtia lum›061513   STA COLOR4  value into bakground›061516 ?NOT8 STY GPRIOR Store priority›061519   LDA ADRESS  Save memory scan›061521   STA SAVMSC  counter address›061523   LDA ADRESS+1›061525   STA SAVMSC+1›061527 ?VBWAIT LDA VCOUNT wait for next›061530   CMP #$7A    vblank before playing›061532   BNE ?VBWAIT with dlist›061534   JSR ?DBDEC  Start d/l right under ram›061537   LDA PAGETB,X test if d/l might cross page boundary›061540   BEQ ?NOMOD›061542   LDA #$FF    If so drop down›061544   STA ADRESS  a page›061546   DEC ADRESS+1›061548 ?NOMOD JSR ?DBDDEC Double byte double dec›061551   LDA ADRESS  Save d/l end›061553   STA SAVADR  for later›061555   LDA ADRESS+1›061557   STA SAVADR+1›061559   LDA #$41    Antic JVB›061561   JSR ?STORE›061564   STX MLTTMP›061566   LDA #24     Init bottom of›061568   STA BOTSCR  screen›061571   LDA DINDEX›061573   CMP #12›061575   BCS ?TSTMOD›061577   CMP #9      Disallow mixed›061579   BCS ?NOTMXD if Gr 9-11›061581 ?TSTMOD LDA ICAX1Z Test mixed›061583   AND #$10    mode›061585   BEQ ?NOTMXD›061587   LDA #4›061589   STA BOTSCR  Add 4 text lines›061592   LDX #2      at bottom›061594   LDA FINE›061597   BEQ ?NOTFIN›061599   JSR ?SETSCROL Set scrolling dk entry›061602 ?NOTFIN LDA #2›061604   JSR ?TSTFINE›061607   DEX ›061608   BPL ?NOTFIN›061610   LDY RAMTOP  Reload msc›061612   DEY         for text›061613   TYA ›061614   JSR ?STORE›061617   LDA #$60›061619   JSR ?STORE›061622   LDA #$42    Antic LMS›061624   JSR ?TSTFINE›061627   CLC ›061628   LDA #16›061630   ADC MLTTMP›061632   TAY ›061633   LDX NUMDLE,Y›061636   BNE ?DOPEN3 Go always›061638 ?NOTMXD LDY MLTTMP›061640   LDX NUMDLE,Y›061643   LDA DINDEX›061645   BNE ?DOPEN3›061647   LDA FINE›061650   BEQ ?DOPEN3›061652   JSR ?SETSCROL›061655   LDA #$22›061657   STA HOLD1›061659 ?DOPEN3 LDA HOLD1 Store number›061661   JSR ?STORE  of dl entries›061664   DEX ›061665   BNE ?DOPEN3›061667   LDA DINDEX  Do the 320*1›061669   CMP #8      problem›061671   BCC ?DOPEN5›061673   CMP #15›061675   BEQ ?FIXSCAN›061677   CMP #12›061679   BCS ?DOPEN5›061681 ?FIXSCAN LDX #93 Get remaining›061683   LDA RAMTOP  number of dle's›061685   SEC         reload memory scan›061686   SBC #$10›061688   JSR ?STORE›061691   LDA #0›061693   JSR ?STORE›061696   LDA HOLD1›061698   ORA #$40    Add LMS bit›061700   JSR ?STORE›061703 ?DOPEN4 LDA HOLD1›061705   JSR ?STORE›061708   DEX ›061709   BNE ?DOPEN4›061711 ?DOPEN5 LDA SAVMSC+1 Finish off›061713   JSR ?STORE  dlist›061716   LDA SAVMSC›061718   JSR ?STORE›061721   LDA HOLD1›061723   ORA #$40›061725   JSR ?STORE›061728   LDA #$70    24 blank lines›061730   JSR ?STORE›061733   LDA #$70›061735   JSR ?STORE›061738   LDA ADRESS  Save dl address›061740   STA SDLSTL›061743   LDA ADRESS+1›061745   STA SDLSTH›061748   LDA #$70    Add last blank›061750   JSR ?STORE  line entry›061753   LDA ADRESS  Position address=sdlst-1›061755   STA MEMTOP›061758   LDA ADRESS+1›061760   STA MEMTOP+1›061763   LDY #1›061765   LDA SDLSTL›061768   STA (SAVADR),Y›061770   INY ›061771   LDA SDLSTH›061774   STA (SAVADR),Y›061776   LDA DSTAT   If error on allocation open the ed›061778   BPL ?DOPEN9›061780 ?61780 STA DERRF open E:›061783   JSR OPEN.E›061786   LDA DERRF›061789   LDY #0›061791   STY DERRF›061794   TAY         Return status›061795   RTS ›061796 ?DOPEN9 LDA ICAX1Z Test clear›061798   AND #$20    inhibit bit›061800   BNE ?DOPEN7›061802   JSR CLRSCR  Clear screen›061805   STA TXTROW  Home cursor a=0›061808   LDA LMARGN›061810   STA TXTCOL›061813 ?DOPEN7 LDA #34 Everything set›061815   ORA SDMCTL  enable dma›061818   STA SDMCTL›061821   JMP ?RETUR2›061822 ; Screen get byte›061824 GET.S JSR ?RANGE Does incrsr›061827   JSR ?GETPLT getplt doesn't›061830   JSR ?INATAC Internal to Atascii›061833   JSR ?INCRSB›061836   JMP STATUS.S›061837 ; Get data under cursor›061839 ?GETPLT JSR ?CONVRT conv row/col to address›061842   LDA (ADRESS),Y›061844   AND DMASK›061847 ?SHIFTD LSR SHFAMT Shift data›061849   BCS ?SHIFT1 down to low bits›061851   LSR A›061852   BPL ?SHIFTD Go always›061854 ?SHIFT1 STA CHAR›061857   CMP #0      Restore flags›061859   RTS ›061860 PUT.S STA ATACHR Screen put-›061863   CMP #125    byte routine›061865   BNE ?NOCLS›061867   JSR CLRSCR  Clear screen›061870   JMP ?RETUR2›061873 ?NOCLS JSR ?RANGE Check end›061876 ?OUTCHA LDA ATACHR of line›061879   CMP #155›061881   BNE ?OUTCHB›061883   JSR DOCRWS  Do cr›061886   JMP ?RETUR2›061889 ?OUTCHB JSR ?OUTPLT›061892   JSR ?INCRSR›061895   JMP ?RETUR2›061898 ?OUTPLT LDA SSFLAG Plot point›061901   BNE ?OUTPLT›061903   LDX #2›061905 ?CRLOOP LDA ROWCRS,X Save cursor›061907   STA OLDROW,X loc for draw line›061909   DEX ›061910   BPL ?CRLOOP›061912   LDA ATACHR  Convert atascii›061915   TAY         to internal›061916   ROL A›061917   ROL A›061918   ROL A›061919   ROL A›061920   AND #3›061922   TAX         x=index›061923   TYA         restore atascii›061924   AND #$9F    strip column address›061926   ORA ATAINT,X›061929 ?OUTCH2 STA CHAR Display›061932   JSR ?CONVRT›061935   LDA CHAR›061938 ?SHIFTU LSR SHFAMT Shift up to›061940   BCS ?SHIFT2 proper position›061942   ASL A›061943   JMP ?SHIFTU›061946 ?SHIFT2 AND DMASK Save shifted›061949   STA TMPCHR  data›061951   LDA DMASK   invert mask›061954   EOR #$FF    Mask off old data›061956   AND (ADRESS),Y›061958   ORA TMPCHR  or in new data›061960   STA (ADRESS),Y›061962   RTS ›061963 ?RETUR2 JSR ?GETPLT Do cursor›061966   STA OLDCHR  on the way out›061968   LDX DINDEX  Graphics have›061970   BNE STATUS.S invisible cursor›061972   LDX CRSINH  Test cursor›061975   BNE STATUS.S off›061977   EOR #$80    Toggle msb and›061979   JSR ?OUTCH2 display it›061982 STATUS.S LDY DSTAT Screen›061984   JMP ?STAT2  status and exit›061987 BYE JMP JSLFTST to match blackbd vector›061990 ?STAT2 LDA #1›061992   STA DSTAT›061994   LDA ATACHR  Return character›061997 JUSTRTS RTS   Editor Special›061998 CLOSE.E BIT FINE Editor Close›062001   BPL STATUS.S Go if fast scroll›062003   LDA #$40    disable dli/nmi›062005   STA NMIEN›062008   LDA #0      Clear flag›062010   STA FINE›062013   LDA # <RTI  Point vdslst to›062015   STA VDSLST  an rti›062018   LDA # >RTI›062020   STA VDSLST+1›062023   JMP OPEN.E›062026 GETCHAR JSR ?SWAP Editor›062029   JSR ?ERANGE ; Get-byte›062032   LDA BUFCNT  Anything in buffer?›062034   BNE ?EGETC3 Yes›062036   LDA ROWCRS  Save buffer›062038   STA BUFSTR  start address›062040   LDA COLCRS›062042   STA BUFSTR+1›062044 ?EGETC1 JSR KGB Fill buffer›062047   STY DSTAT   save status›062049   LDA ATACHR  Test for cr›062052   CMP #155›062054   BEQ ?EGETC2›062056   JSR ?DOSS   Not cr, so print it›062059   JSR ?SWAP   previous sub swapped›062062   LDA LOGCOL  Beep if nearing›062064   CMP #113    column 120›062066   BNE ?EGETC6›062068   JSR BELL›062071 ?EGETC6 JMP ?EGETC1›062074 ?EGETC2 JSR ?OFFCRS Get buffer count›062077   JSR CBC›062080   LDA BUFSTR  Return a character›062082   STA ROWCRS›062084   LDA BUFSTR+1›062086   STA COLCRS›062088 ?EGETC3 LDA BUFCNT›062090   BEQ ?EGETC5›062092 ?EGETC7 DEC BUFCNT Return until 0›062094   BEQ ?EGETC5›062096   LDA DSTAT   If err, loop til›062098   BMI ?EGETC7 byffer empty›062100   JSR GET.S›062103   STA ATACHR›062106   JMP ?SWAP   return without enabling cursor›062109 ?EGETC5 JSR DOCRWS Do real cr›062112   LDA #155    and return eol›062114   STA ATACHR›062117   JSR ?RETUR2 enable cursor then swap›062120   STY DSTAT   save keyboard status›062122   JMP ?SWAP   and exit via ?retur1›062125 ?JSRIND JMP (ADRESS) Indirect subroutine›062128 OUTCHAR STA ATACHR Editor›062131   JSR ?SWAP   ;  Put-byte›062134   JSR ?ERANGE›062137   LDA #0›062139   STA SUPERF›062142 ?DOSS JSR ?OFFCRS Cursor off›062145   JSR ?TSTCTL Test control›062148   BEQ ?EOUTC5›062150 ?EOUTC6 ASL ESCFLG Escflg only works once›062153   JSR ?OUTCHA output›062156   JMP ?SWAP   and exit›062159 ?EOUTC5 LDA DSPFLG Do dsp and esc flags›062162   ORA ESCFLG  if non-0, display›062165   BNE ?EOUTC6 instead of execute›062167   ASL ESCFLG  Process controls›062170   INX ›062171   LDA SUPERF  Check for fn keys›062174   BEQ ?DOCTL›062176   TXA         Add offset for›062177   CLC         shifted fn›062178   ADC #45     keys›062180   TAX ›062181 ?DOCTL LDA CNTRLS,X Set up for›062184   STA ADRESS  indirect subrtn›062186   LDA CNTRLS+1,X›062189   STA ADRESS+1›062191   JSR ?JSRIND Do it›062194   JSR ?RETUR2 Do cursor›062197   JMP ?SWAP   Exit›062198 ; end screen editor›