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›061315 STA KEYDEF+1›061317 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›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›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›