09 .OPT NO LIST›10 ; SAVE #D1:SCREEN3.M65›20 ;›30 ;›40 ; LOAD #D1:SCREEN4.M65›50 LIST ›062821 ?DBDDEC LDA #2 Double-byte›062823 BNE ?DBSUB double decrement›062825 ?TSTFINE LDY FINE Store data for›062828 BEQ ?STORE fine scrolling›062830 ORA #$20 Set bit 5›062832 ?STORE LDY DSTAT return on error›062834 BMI ?STROK›062836 LDY #0›062838 STA (ADRESS),Y›062840 ?DBDEC LDA #1 Double byte›062842 ?DBSUB STA SUBTMP single dec›062845 LDA DSTAT›062847 BMI ?STROK›062849 LDA ADRESS›062851 SEC ›062852 SBC SUBTMP›062855 STA ADRESS›062857 BCS ?DBSUB1›062859 DEC ADRESS+1›062861 ?DBSUB1 LDA APPMHI+1 Make sure›062863 CMP ADRESS+1 nothing overwrites›062865 BCC ?STROK appmhi›062867 BNE ?STRERR›062869 LDA APPMHI›062871 CMP ADRESS›062873 BCC ?STROK›062875 ?STRERR LDA #147 Mem too small›062877 STA DSTAT for screen›062879 ?STROK RTS ›062880 ?SETSCROL LDA #2 Set scrolling›062882 JSR ?STORE DList entry›062885 LDA #$A2›062887 JSR ?STORE›062890 DEX ›062891 RTS ›062892 ?CONVRT LDX #1 Convert row and›062894 STX MLTTMP column to real›062896 DEX address›062897 STX ADRESS+1 Put 5*rowcrsr›062899 LDA ROWCRS into adress›062901 ASL A›062902 ROL ADRESS+1›062904 ASL A›062905 ROL ADRESS+1›062907 ADC ROWCRS›062909 STA ADRESS›062911 BCC ?CONV1›062913 INC ADRESS+1›062915 ?CONV1 LDY DINDEX Shift Adress keft›062917 LDX DHLINE,Y Dhline times›062920 ?CONV2 ASL ADRESS to finish›062922 ROL ADRESS+1›062924 DEX ›062925 BNE ?CONV2›062927 LDA COLCRS+1 Divide colcrs›062929 LSR A to account for›062930 LDA COLCRS partial byte›062932 LDX DIV2TB,Y›062935 BEQ ?CONV3›062937 ?CONV4 ROR A›062938 ASL MLTTMP›062940 DEX ›062941 BNE ?CONV4›062943 ?CONV3 ADC ADRESS›062945 BCC ?CONV5›062947 INC ADRESS+1›062949 ?CONV5 CLC ›062950 ADC SAVMSC›062952 STA ADRESS›062954 STA OLDADR›062956 LDA ADRESS+1›062958 ADC SAVMSC+1›062960 STA ADRESS+1›062962 STA OLDADR+1›062964 LDX DIV2TB,Y›062967 LDA TMSK,X›062970 AND COLCRS›062972 ADC MLTTMP›062974 TAY ›062975 LDA DMASKT-1,Y›062978 STA DMASK›062981 STA SHFAMT›062983 LDY #0›062985 ?INCRS3 RTS ›062986 ?INCRSB LDA #0 Advance cursor›062988 BEQ ?INCRSC routines›062990 ?INCRSR LDA #155›062992 ?INCRSC STA INSDAT›062994 ?INCRSA INC LOGCOL Inschr entry›062996 INC COLCRS›062998 BNE ?INCRS2›063000 INC COLCRS+1›063002 ?INCRS2 LDA COLCRS Test end of line›063004 LDX DINDEX›063006 CMP COLUMN,X›063009 BEQ ?INC2A›063011 CPX #0 Mode 0?›063013 BNE ?INCRS3 No just return›063015 CMP RMARGN Test against›063017 BEQ ?INCRS3 rmargn. <= is›063019 BCC ?INCRS3 ok›063021 ?INC2A CPX #8 If not mode 8›063023 BNE ?DOCR1 go do it›063025 LDA COLCRS+1 Check high byte›063027 BEQ ?INCRS3 Only at 64, skip it›063029 ?DOCR1 LDA DINDEX Skip logmap›063031 BNE ?DOCR if not mode 0›063033 LDA LOGCOL Test line over run›063035 CMP #80+1›063037 BCC ?DOCR1B If less, not line 3›063039 LDA INSDAT Only do logline overrun if Insdat <>0›063041 BEQ ?DOCR›063043 JSR DOCRWS›063046 JMP ?INCRS1›063049 ?DOCR1B JSR ?DOCR›063052 LDA ROWCRS›063054 CLC Test logline bitmap›063055 ADC #120›063057 JSR ?BITGET Don't extend if overrun into middle of line›063060 BCC ?DOCR1A›063062 LDA INSDAT Don't extend if›063064 BEQ ?DOCR1A insdat is 0›063066 CLC Insert 0 into›063067 JSR ?INSLIA bitmap›063070 ?DOCR1A JMP ?DOLCOL exit›063073 DOCRWS LDA #155 Return with›063075 STA INSDAT scrolling›063077 ?DOCR JSR ?COLCR›063080 LDA #0 Colcrs to left›063082 STA COLCRS+1›063084 INC ROWCRS›063086 LDX DINDEX›063088 LDY #24 Set up scroll loop count›063090 BIT SWPFLG›063092 BPL ?DOCR2A Go if normal›063094 LDY #4›063096 TYA ›063097 BNE ?DOCR2B Go always›063099 ?DOCR2A LDA NOROWS,X Get number›063102 ?DOCR2B CMP ROWCRS of rows›063104 BNE ?INCRS1›063106 STY HOLD3›063109 TXA Don't scroll if›063110 BNE ?INCRS1 mode <>0›063112 LDA INSDAT Or insdat=0›063114 BEQ ?INCRS1›063116 CMP #155 If not a cr then›063118 BEQ ?DOCR4B roll in 0 to extend logline›063120 CLC ›063121 ?DOCR4B JSR SCR Go scroll›063124 INC SCRFLG›063127 DEC BUFSTR Rows move up so bufstr does too›063129 BPL ?DOCRX›063131 INC BUFSTR›063133 ?DOCRX DEC HOLD3›063136 LDA LOGMAP›063139 SEC For partial lines roll in a 1›063140 BPL ?DOCR4B Again if partial logline›063142 LDA HOLD3 Place cursor at new line›063145 STA ROWCRS›063147 ?INCRS1 JMP ?DOLCOL›063150 ?SUBEND SEC Subtract end›063151 LDA ROWAC,X point from›063153 SBC ENDPT rowac or colac›063155 STA ROWAC,X (x=0 or x=2)›063157 LDA ROWAC+1,X›063159 SBC ENDPT+1›063161 STA ROWAC+1,X›063163 RTS ›063164 ?ERANGE LDA BOTSCR If botscr=4›063167 CMP #4 then in mixed mode›063169 BEQ ?RANGE and ok›063171 LDA DINDEX If mode=0 then›063173 BEQ ?RANGE editor mode and ok›063175 JSR OPEN.E Else open editor›063178 ?RANGE LDA #39 Verify rmargn›063180 CMP RMARGN setting›063182 BCS ?RANGE3›063184 STA RMARGN Bad set to 39›063186 ?RANGE3 LDX DINDEX›063188 LDA NOROWS,X Check rows›063191 CMP ROWCRS›063193 BCC ?RNGERR Error if table is›063195 BEQ ?RNGERR less or equal rowcrs›063197 CPX #8 Check for two byte›063199 BNE ?RANGE1 column (Gr.8)›063201 LDA COLCRS+1›063203 BEQ ?RNGOK If msb 0 ok›063205 CMP #1›063207 BNE ?RNGERR Err if not 1›063209 BEQ ?RANGE2 If 1 check lsb›063211 ?RANGE1 LDA COLCRS+1 For others›063213 BNE ?RNGERR non-0 msb is err›063215 ?RANGE2 LDA COLUMN,X Check lsb›063218 CMP COLCRS›063220 BCC ?RNGERR›063222 BEQ ?RNGERR›063224 ?RNGOK LDA #1 Status ok›063226 STA DSTAT›063228 LDA #$80 Prepare break abort›063230 LDX BRKKEY Check brkkey flag›063232 STA BRKKEY Clear break›063234 BEQ ?RNGER2 Exit if break pressed›063236 RTS ›063237 ?RNGERR JSR HOME Home cursor›063240 LDA #141 Flag range error›063242 ?RNGER2 STA DSTAT›063244 PLA Restore stack (routine›063245 PLA always 1 level from cio›063246 LDA SWPFLG If swapped›063248 BPL ?RETUR3›063250 JMP ?SWAP swap back›063253 ?RETUR3 JMP STATUS.S›063256 ?OFFCRS LDY #0 Restore old data›063258 LDA OLDADR+1 under cursor›063260 BEQ ?OFFCR2 Screen never on›063262 LDA OLDCHR page 0›063264 STA (OLDADR),Y›063266 ?OFFCR2 RTS ›063267 BITMAP PHA Bit map routines›063268 AND #7 for Editor and›063270 TAX Screen›063271 LDA DMASKT+7,X Get mask›063274 STA BITMSK›063276 PLA Process index›063277 LSR A›063278 LSR A›063279 LSR A›063280 TAX ›063281 RTS ›063282 ?BITROL ROL LOGMAP+2›063285 ROL LOGMAP+1›063288 ROL LOGMAP›063291 RTS ›063292 ?BITPUT BCC ?BITCLR›063294 ?BITSET JSR BITMAP›063297 LDA TABMAP,X›063300 ORA BITMSK›063302 STA TABMAP,X›063305 RTS ›063306 ?BITCLR JSR BITMAP›063309 LDA BITMSK›063311 EOR #$FF›063313 AND TABMAP,X›063316 STA TABMAP,X›063319 RTS ›063320 ?LOGGET LDA ROWCRS›063322 ?LO1GET CLC ›063323 ?LO2GET ADC #120›063325 ?BITGET JSR BITMAP›063328 CLC ›063329 LDA TABMAP,X›063332 AND BITMSK›063334 BEQ ?BITGE1›063336 SEC ›063337 ?BITGE1 RTS ›063338 ?INATAC LDA CHAR If graphics›063341 LDY DINDEX modes then›063343 CPY #14 don't change›063345 BCS ?INATA1 character›063347 CPY #12›063349 BCS ?INATA2›063351 CPY #3›063353 BCS ?INATA1›063355 ?INATA2 ROL A›063356 ROL A›063357 ROL A›063358 ROL A›063359 AND #3›063361 TAX ›063362 LDA CHAR›063365 AND #$9F›063367 ORA INTATA,X›063370 ?INATA1 STA ATACHR›063373 ?INARTS RTS ›063374 ?MOVLIN LDX RAMTOP›063376 DEX ›063377 STX SAVADR+1›063379 STX MLTTMP+1›063381 LDA #$B0 point 80 bytes›063383 STA SAVADR below ramtop›063385 LDA #$D8 point 40 bytes›063387 STA MLTTMP below ramtop›063389 LDX ROWCRS›063391 ?MOVL1 INX If at bottom of›063392 CPX BOTSCR screen, nothing›063395 BEQ ?INARTS more to move›063397 LDY #39›063399 ?MOVL2 LDA (SAVADR),Y Move 40›063401 STA (MLTTMP),Y bytes one line›063403 DEY up›063404 BPL ?MOVL2›063406 SEC ›063407 LDA SAVADR Copy from pointer›063409 STA MLTTMP to dest pointer›063411 SBC #40 and decr from›063413 STA SAVADR pointer by 40›063415 LDA SAVADR+1›063417 STA MLTTMP+1›063419 SBC #0 Loop until›063421 STA SAVADR+1 bottom of›063423 JMP ?MOVL1 screen›063426 ?EXTEND PHP Extend log line›063427 LDY #22 from rowcrs›063429 ?EXTEN1 TYA ›063430 JSR ?LO1GET›063433 PHP ›063434 TYA ›063435 CLC ›063436 ADC #121›063438 PLP ›063439 JSR ?BITPUT›063442 DEY ›063443 BMI ?EXTEN4›063445 CPY ROWCRS›063447 BCS ?EXTEN1›063449 ?EXTEN4 LDA ROWCRS›063451 CLC ›063452 ADC #120›063454 PLP ›063455 JMP ?BITPUT Store bit & return›063458 ?CLRLIN LDA LMARGN Clear line›063460 STA COLCRS cursor is on›063462 JSR ?CONVRT›063465 SEC ›063466 LDA RMARGN›063468 SBC LMARGN›063470 TAY ›063471 LDA #0›063473 ?CLRLI1 STA (ADRESS),Y›063475 DEY ›063476 BPL ?CLRLI1›063478 RTS ›063479 SCR JSR ?BITROL Screen›063482 LDA FINE scroll routines›063485 BEQ ?SCROL2›063487 ?SCW1 LDA VSFLAG Wait til›063490 BNE ?SCW1 vblank makes this 0›063492 LDA #8 Reset fine›063494 STA VSFLAG scroll amount›063497 ?SCW2 LDA VSFLAG Wait til›063500 CMP #1 last scan line›063502 BNE ?SCW2 before coarse scroll›063504 ?SCW3 LDA VCOUNT If vcount›063507 CMP #64 below visible›063509 BCS ?SCW3 screen wait for vbi›063511 LDX #13 Assume not text›063513 LDA BOTSCR window and see›063516 CMP #4 if true›063518 BNE ?SCW4 It is›063520 LDX #112 New top screen posit›063522 ?SCW4 CPX VCOUNT Wait for screen›063525 BCS ?SCW4 redraw›063526 ; Coarse scroll›063527 ?SCROL2 JSR ?PUTMSC Copy savmsc›063530 ?SCROL1 LDA ADRESS to adress›063532 LDX ADRESS+1›063534 ?SCROL3 INX Last line?›063535 CPX RAMTOP›063537 BEQ ?SCROL4 maybe›063539 SEC ›063540 SBC #16›063542 JMP ?SCROL3›063545 ?SCROL4 ADC #40-1 allow for carry›063547 BNE ?SCROL6›063549 LDX ADRESS+1›063551 INX Last line?›063552 CPX RAMTOP›063554 BEQ ?SCROL5 yes go do it›063556 CLC ›063557 ADC #16›063559 ?SCROL6 TAY ›063560 STA COUNTR›063562 SEC ›063563 LDA ADRESS›063565 SBC COUNTR›063567 STA ADRESS›063569 BCS ?SCROL7›063571 DEC ADRESS+1›063573 ?SCROL7 LDA ADRESS›063575 CLC ›063576 ADC #40›063578 STA COUNTR›063580 LDA ADRESS+1›063582 ADC #0›063584 STA COUNTR+1›063586 ?SCROL8 LDA (COUNTR),Y›063588 STA (ADRESS),Y›063590 INY ›063591 BNE ?SCROL8›063593 LDY #$10›063595 LDA ADRESS›063597 CMP #$D8›063599 BEQ ?SCROL5›063601 CLC ›063602 ADC #$F0›063604 STA ADRESS›063606 BCC ?SCROL7›063608 INC ADRESS+1›063610 BNE ?SCROL7›063612 ?SCROL5 LDX RAMTOP Do last›063614 DEX line›063615 STX COUNTR+1›063617 LDX #$D8›063619 STX COUNTR›063621 LDA #0 i.e. clear it›063623 LDY #39›063625 ?SCROL9 STA (COUNTR),Y›063627 DEY ›063628 BPL ?SCROL9›063630 ?DOLCOL LDA #0›063632 STA LOGCOL›063634 LDA ROWCRS›063636 STA HOLD1›063638 ?DOLCO1 LDA HOLD1 add in row›063640 JSR ?LO1GET component›063643 BCS ?DOCOL2 Found beginning›063645 LDA LOGCOL Add 40 and look back›063647 CLC one›063648 ADC #40›063650 STA LOGCOL›063652 DEC HOLD1 up one line›063654 JMP ?DOLCO1›063657 ?DOCOL2 CLC add in colcrs›063658 LDA LOGCOL›063660 ADC COLCRS›063662 STA LOGCOL›063664 RTS ›063665 CBC JSR ?PHACRS Buffer count›063668 LDA LOGCOL routines›063670 PHA ›063671 LDA BUFSTR›063673 STA ROWCRS›063675 LDA BUFSTR+1›063677 STA COLCRS›063679 LDA #1›063681 STA BUFCNT›063683 ?DOBUF1 LDX #23 normal›063685 LDA SWPFLG if swapped, row 3›063687 BPL ?DOB1 is last screen line›063689 LDX #3›063691 ?DOB1 CPX ROWCRS Is cursor at›063693 BNE ?DOBU1A last screen posit?›063695 LDA COLCRS›063697 CMP RMARGN›063699 BNE ?DOBU1A›063701 INC BUFCNT Yes so fake incrsr›063703 JMP ?DOBUF2 to avoid scroll›063706 ?DOBU1A JSR ?INCRSB›063709 INC BUFCNT›063711 LDA LOGCOL›063713 CMP LMARGN›063715 BNE ?DOBUF1 Not yet eol›063717 DEC ROWCRS Back up one›063719 JSR CRSRLF›063722 ?DOBUF2 JSR ?GETPLT Test curr col›063725 BNE ?DOBUF4 If<>0 quit›063727 DEC BUFCNT dec counter›063729 LDA LOGCOL Beginning of log line?›063731 CMP LMARGN›063733 BEQ ?DOBUF4 Yes quit›063735 JSR CRSRLF Back up cursor›063738 LDA COLCRS If logcol=rmargn›063740 CMP RMARGN go up one row›063742 BNE ?DOBUF3›063744 DEC ROWCRS›063746 ?DOBUF3 LDA BUFCNT›063748 BNE ?DOBUF2 loop til 0›063750 ?DOBUF4 PLA ›063751 STA LOGCOL›063753 JMP ?PLACRS›063754 ; Move bufstr to beginning of log line›063756 ?STRBEG JSR ?DOLCOL Set hold1›063759 LDA HOLD1›063761 STA BUFSTR›063763 LDA LMARGN›063765 STA BUFSTR+1›063767 ?STRRTS RTS ›063768 ?DELTIA LDA LOGCOL If logcol<>lmargn›063770 CMP LMARGN then don't move up›063772 BNE ?DELTIB before testing›063774 DEC ROWCRS›063776 ?DELTIB JSR ?DOLCOL›063777 ; Time to delete a line if it is empty and an extension›063779 ?DELTIM LDA LOGCOL test for extension›063781 CMP LMARGN›063783 BEQ ?STRRTS No›063785 JSR ?CONVRT›063788 LDA RMARGN Set up count›063790 SEC ›063791 SBC LMARGN›063793 TAY ›063794 ?DELTI1 LDA (ADRESS),Y›063796 BNE ?STRRTS Quit on non-0›063798 DEY ›063799 BPL ?DELTI1›063801 JMP ?DELLIB Delete line, return›