SBTTL 'Control Character Routines (28_Nov_84)' PAGE ;====================================================================== ; ; Copyright 1984 ; Morrow Designs, Inc. ; San Leandro, Ca. ; ;---------------------------------------------------------------------- ; Index (12_Nov_84) ;------------------ ; ; BELL Bell Code ; BS BackSpace ; TAB Tab ; LF Line Feed ; US Up Space ; FS ForeSpace ; CR Carriage Return ; CLRSCR Clear Screen ; ESC Escape ; HOME Home ; NEWLIN NewLine (Carriage Return Line Feed) PAGE ;---------------------------------------------------------------------- ; (07 ^G) Bell ;------------- ; BELL: LDX BAUD BPL BLSK1 ;nothing from keyboard, so beep. JSR GETKEY ;else, get the key from keyboard before beeping JMP BELL ;wait for settle BLSK1: LDA #BEEP ;BEEP! BEEP! JMP PUTKEY ;---------------------------------------------------------------------- ; (08 ^H) BackSpace ;------------------ ; BS: LDX COLMN LDY ROW ;get the current row DEX BPL BSSK1 ;if on same line, branch LDX #79 ;else, set last column of line above DEY BPL BSSK1 LDY #0 LDX #0 BSSK1: STX COLMN STY ROW JMP SETCUR ;---------------------------------------------------------------------- ; (09 ^I) Tab ;------------ ; TAB: LDA COLMN ;tab over 8 spaces AND #$F8 CLC ADC #8 CMP #80 BNE TABSK1 LDA #0 STA COLMN JMP LF TABSK1: STA COLMN JMP SETCUR PAGE ;---------------------------------------------------------------------- ; (0A ^J) Line Feed (28_Nov_84) ;------------------------------ ; LF: LDA ROW ;Line feed CMP #23 ;check if scroll req'd BEQ LFSK1 ;if yes, then scroll INC ROW ;else, just set new row JMP SETCUR ;and put the cursor there LFSK1: SEI ;Scroll screen LDA SCBASE CLC ADC #80 STA SCBASE LDA SCBASE+1 ;new scbase = old scbase + 80 ADC #0 AND #%111 ;wrap it around STA SCBASE+1 JSR SETCUR ;set cursor register of CRTC LDX #13 LDA SCBASE ;set starting reg of CRTC STX CRTC STA CRTC+1 DEX LDA SCBASE+1 STX CRTC STA CRTC+1 CLI LDX #80 ;Set the Number of Characters to Clear Counter JMP CLR79 ;Clear the Line ;---------------------------------------------------------------------- ; (0B ^K) UpSpace ;---------------- ; US: DEC ROW ;Up a line BPL USSK1 LDA #0 STA ROW USSK1: JMP SETCUR PAGE ;---------------------------------------------------------------------- ; (0C ^L) ForeSpace ;------------------ ; FS: LDX COLMN ;forespace LDY ROW INX CPX #80 BCC FSSK1 LDX #0 INY CPY #24 BCC FSSK1 LDY #23 LDX #79 FSSK1: STX COLMN STY ROW JMP SETCUR ;---------------------------------------------------------------------- ; (0D ^M) Carriage Return ;------------------------ ; CR: LDA #0 ;Carriage return STA COLMN JMP SETPOS PAGE ;---------------------------------------------------------------------- ; (1A ^Z) Clear Screen (26_Nov_84) ;--------------------------------- ; CLRSCR: LDA #HIGH CRAM ;init start of ARAM and CRAM STA CHARD+1 LDA #HIGH ARAM STA ATTRD+1 LDY #0 STY CHARD STY ATTRD LDX #8 ;X:= Page Counter CLCLP1: LDA CLRCHAR ;Repeat A:= Character to clear CRAM to CLCLP2: STA (CHARD),Y ; Repeat Clear a Location INY ; Increment the Index BNE CLCLP2 ; Until (Index wraps around) LDA ATTTAB+0 ; A:= Normal Video Attribute CLCLP3: STA (ATTRD),Y ; Repeat Clear a location INY ; Increment the Index BNE CLCLP3 ; Until (Index wraps around) INC CHARD+1 ; Increment the Page Pointer INC ATTRD+1 ; Increment the Page Pointer DEX ;Until (8 pages have been cleared) BNE CLCLP1 JMP HOME ;Home the Cursor ;---------------------------------------------------------------------- ; (1B ^[) Escape ;--------------- ; ESC: LDA #1 ;escape handler STA NSEQ ;set up to save next char LDA #LOW ESCHAND ;routine to handle next char STA CODE LDA #HIGH ESCHAND STA CODE+1 RTS PAGE ;---------------------------------------------------------------------- ; (1E ^^) Home the Cursor ;------------------------ ; HOME: LDA #0 ;put cursor in home position STA ROW ;ROW = COLMN = 0 STA COLMN JMP SETCUR ;set new cursor position ;---------------------------------------------------------------------- ; (1F ^_) Carriage Return - Line Feed ;------------------------------------- ; NEWLIN: JSR CR ;carriage return line feed JMP LF ;---------------------------------------------------------------------- ; Keyboard Lock/UnLock ;--------------------- ; ;UNLOCK:LDA #$0 ; STA LOCKMD ; re-enable keyboard interrupts ; LDA #LOCKOFF ; turn off keyboard lock LED ; JMP PUTKEY ; ;LOCK: LDA #$FF ; STA LOCKMD ; set keyboard lock mode ; LDA #LOCKON ; turn on keyboard lock LED ; JMP PUTKEY END