09 .OPT NO LIST›10 ; SAVE #D1:SCREEN2.M65›20 ;›30 ;›40 ; LOAD #D1:SCREEN3.M65›50 ;›55 LIST ›60 ; begin keyboard handler›062200 IGN LDA #$FF Ignore character›062202 STA CH do›062205 KGB LDA #0 Keybrd get-byte›062207 STA SUPERF›062210 LDA ICAX1Z If forced read›062212 LSR A mode, exit›062213 BCS ?GETOUT›062215 LDA #$80 Test break key›062217 LDX BRKKEY›062219 BEQ ?K7›062221 LDA CH›062224 CMP #$FF›062226 BEQ KGB›062228 STA HOLDCH save for shift lock proc›062230 LDX #$FF Clear ch›062232 STX CH›062235 LDX NOCLIK›062238 BNE ?OVRCLK›062240 JSR CLICK Go make noise›062243 ?OVRCLK TAY ›062244 CPY #$C0 Test for shift›062246 BCS IGN and control›062248 LDA (KEYDEF),Y›062250 ?SAVEK STA ATACHR›062253 TAX ›062254 BMI ?SPEC›062256 JMP ?K6A›062259 ?SPEC CMP #$80 Null?›062261 BEQ IGN Yeah, ignore›062263 CMP #$81 Atari key?›062265 BNE ?KGETC1›062267 LDA INVFLG Yes›062270 EOR #$80›062272 STA INVFLG›062275 BCS IGN Go always›062277 ?KGETC1 CMP #$82 Caps/Lower?›062279 BNE ?K1›062281 LDA SHFLOK If uppercase›062284 BEQ ?KGETC2 go switch to lower›062286 LDA #0 Switch to›062288 STA SHFLOK all upper case›062291 BEQ IGN Go always›062293 ?K1 CMP #$83 Shift-Caps?›062295 BNE ?K2›062297 ?KGETC2 LDA #$40 Force upper›062299 STA SHFLOK case›062302 BNE IGN›062304 ?K2 CMP #$84 Control-Caps?›062306 BNE ?K3›062308 LDA #$80 Force control›062310 STA SHFLOK lock›062313 JMP IGN›062316 ?K3 CMP #$85 Control-3?›062318 BNE ?K6›062320 LDA #136 Do end of file›062322 ?K7 STA DSTAT›062324 STA BRKKEY Restore break key›062326 ?GETOUT LDA #155›062328 JMP ?K8›062331 ?K6 CMP #$89 Control-f3?›062333 BNE ?FN1›062335 LDA NOCLIK Toggle key›062338 EOR #$FF click›062340 STA NOCLIK›062343 BNE ?JMPKGB›062345 JSR CLICK›062348 ?JMPKGB JMP IGN›062351 ?FN1 CMP #$8D+1 Test for›062353 BCS ?FN2 1200xl›062355 CMP #$8A function keys›062357 BCC ?JMPKGB›062359 SBC #$8A›062361 ASL HOLDCH Orig kbcode›062363 BPL ?GETFK Go if not shifted›062365 ORA #4 Add 4 to index›062367 ?GETFK TAY Get 1200xl›062368 LDA (FKDEF),Y function key›062370 JMP ?SAVEK›062373 ?FN2 CMP #$91+1 If >Shift+Fn›062375 BCS ?K6A›062377 CMP #$8E If just fn key›062379 BCC ?JMPKGB exit›062381 SBC #$72 Convert code›062383 INC SUPERF Flag fn›062386 BNE ?K8 Go always›062388 ?K6A LDA HOLDCH Process shift locks›062390 CMP #$40 Regular take precedence›062392 BCS ?K5 over lock›062394 LDA ATACHR Test for alpha›062397 CMP #'a›062399 BCC ?K5›062401 CMP #'z+1›062403 BCS ?K5›062405 LDA SHFLOK Do shift/control lock›062408 BEQ ?K5 If none don't redo›062410 ORA HOLDCH›062412 JMP ?OVRCLK Do retry›062415 ?K5 JSR ?TSTCTL Don't invert msb›062418 BEQ ?K4 of control chars›062420 LDA ATACHR›062423 EOR INVFLG›062426 ?K8 STA ATACHR›062429 ?K4 JMP STATUS.S Done›062432 ESCAPE LDA #$80 Handle Esc›062434 STA ESCFLG›062437 RTS ›062438 CRSRUP DEC ROWCRS Cursor up›062440 BPL ?COMRET›062442 LDX BOTSCR wrap around›062445 DEX ›062446 ?UPDNCM STX ROWCRS›062448 ?COMRET JMP ?STRBEG Convert to log col and return›062451 CRSRDN INC ROWCRS Cursor down›062453 LDA ROWCRS›062455 CMP BOTSCR›062458 BCC ?COMRET›062460 LDX #0›062462 BEQ ?UPDNCM Always›062464 CRSRLF DEC COLCRS Cursor left›062466 LDA COLCRS›062468 BMI CRSRL1 If outside lmargn›062470 CMP LMARGN then wrap around›062472 BCS ?COMRE1›062474 CRSRL1 LDA RMARGN To rt margin›062476 ?LFRTCM STA COLCRS Set column›062478 ?COMRE1 JMP ?DOLCOL To log col›062481 CRSRRT INC COLCRS Move cursor›062483 LDA COLCRS right›062485 CMP RMARGN›062487 BCC ?COMRE1›062489 BEQ ?COMRE1›062491 CRSRLM LDA LMARGN To lt margin›062493 JMP ?LFRTCM›062496 CLRSCR JSR ?PUTMSC Clear screen›062499 LDY ADRESS›062501 LDA #0›062503 STA ADRESS›062505 ?CLRSC2 STA (ADRESS),Y›062507 INY ›062508 BNE ?CLRSC2›062510 INC ADRESS+1›062512 LDX ADRESS+1›062514 CPX RAMTOP›062516 BCC ?CLRSC2›062518 LDA #$FF›062520 ?CLRSC3 STA LOGMAP,Y›062523 INY Clean up logical›062524 CPY #4 line bit map›062526 BCC ?CLRSC3›062528 HOME JSR ?COLCR Home cursor›062531 STA LOGCOL Place colcrs at left edge›062533 STA BUFSTR+1›062535 LDA #0›062537 STA ROWCRS›062539 STA COLCRS+1›062541 STA BUFSTR›062543 RTS ›062544 BKSDEL LDA LOGCOL Backspace›062546 CMP LMARGN›062548 BEQ ?BS1›062550 LDA COLCRS Left edge?›062552 CMP LMARGN›062554 BNE ?BS3 No›062556 JSR ?DELTIM See if line should be deleted›062559 ?BS3 JSR CRSRLF Move left›062562 LDA COLCRS›062564 CMP RMARGN Up a line?›062566 BNE ?BS2 No›062568 LDA ROWCRS Move up unless›062570 BEQ ?BS2 at top›062572 JSR CRSRUP Move up›062575 ?BS2 LDA #32 Destructive›062577 STA ATACHR›062580 JSR ?OUTPLT›062583 ?BS1 JMP ?DOLCOL Done›062586 TABKEY JSR CRSRRT Handle TAB›062589 LDA COLCRS Begin search›062591 CMP LMARGN Test for new line›062593 BNE ?TAB1›062595 JSR ?DOCR Do carriage return›062598 JSR ?LOGGET Test end of log line›062601 BCS ?TAB2›062603 ?TAB1 LDA LOGCOL Check for›062605 JSR ?BITGET tab stop›062608 BCC TABKEY Keep looking›062610 ?TAB2 JMP ?DOLCOL›062613 SETTAB LDA LOGCOL Set TAB›062615 JMP ?BITSET Set bit in map›062618 CLRTAB LDA LOGCOL Clear TAB›062620 JMP ?BITCLR Clear bit in map›062623 INSCHR JSR ?PHACRS Insert char›062626 JSR ?GETPLT Get char under crsr›062629 STA INSDAT›062631 LDA #0›062633 STA SCRFLG›062636 ?INSCH4 JSR ?OUTCH2 Store data›062639 LDA LOGCOL Save logcol. If after›062641 PHA incrsa, logcol< than›062642 JSR ?INCRSA now, end loop›062645 PLA ›062646 CMP LOGCOL›062648 BCS ?INSCH3 Quit›062650 LDA INSDAT Keep going›062652 PHA ›062653 JSR ?GETPLT›062656 STA INSDAT›062658 PLA ›062659 JMP ?INSCH4›062662 ?INSCH3 JSR ?PLACRS›062665 ?INSCH6 DEC SCRFLG If scroll›062668 BMI ?INSCN5 occurred, move›062670 DEC ROWCRS cursor up›062672 BNE ?INSCH6 Repeat until scrflg is -ve›062674 ?INSCN5 JMP ?DOLCOL›062677 DELCHR JSR ?PHACRS Delete chr›062680 ?DELCH1 JSR ?CONVRT Get data to rt of cursor›062683 LDA ADRESS Save destination›062685 STA SAVADR address›062687 LDA ADRESS+1›062689 STA SAVADR+1›062691 LDA LOGCOL›062693 PHA ›062694 JSR ?INCRSB Put crsr over next chr›062697 PLA Test new logcol›062698 CMP LOGCOL against old. Done›062700 BCS ?DELCH2 if old >= new›062702 LDA ROWCRS row off screen›062704 CMP BOTSCR›062707 BCS ?DELCH2›062709 JSR ?GETPLT Get data under›062712 LDY #0 cursor›062714 STA (SAVADR),Y Put in prior spot›062716 BEQ ?DELCH1 Go always›062718 ?DELCH2 LDY #0 Clear last›062720 TYA position›062721 STA (SAVADR),Y›062723 JSR ?DELTIA Try to delete line›062726 JSR ?PLACRS›062729 JMP ?DOLCOL Done›062732 INSLIN SEC Insert line›062733 ?INSLIA JSR ?EXTEND›062736 LDA LMARGN Do carriage ret›062738 STA COLCRS no line feed›062740 JSR ?CONVRT get address›062743 JSR ?MOVLIN Copy line down›062746 JSR ?CLRLIN Clear present line›062749 JMP ?DOLCOL Done›062752 DELLIN JSR ?DOLCOL Del line›062755 LDY HOLD1 Squeeze bitmap›062757 STY ROWCRS put cursor there›062759 ?DELLIB LDY ROWCRS›062761 ?DELLI1 TYA ›062762 SEC ›062763 JSR ?LO2GET Get next bit›062766 PHP ›062767 TYA ›062768 CLC ›062769 ADC #120›062771 PLP ›062772 JSR ?BITPUT Write over present›062775 INY bit›062776 CPY #24›062778 BNE ?DELLI1›062780 LDA LOGMAP+2 Set lsb›062783 ORA #1›062785 STA LOGMAP+2›062788 LDA #0›062790 STA COLCRS›062792 JSR ?CONVRT›062795 JSR ?SCROL1›062798 JSR ?LOGGET Test next for continuation›062801 BCC ?DELLIB Not new log line›062803 JMP CRSRLM›062806 BELL LDY #$20 Sound bell›062808 ?BELL1 JSR CLICK›062811 DEY ›062812 BPL ?BELL1›062814 RTS ›062815 CRSBOT JSR HOME Cursor to›062818 JMP CRSRUP bottom›