SBTTL 'Control Character Routines (20_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 ;---------------------------------------------------------------------- ; Ring the 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 KBRDOUT ;---------------------------------------------------------------------- ; 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 ;---------------------------------------------------------------------- ; 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 ;---------------------------------------------------------------------- ; Line Feed ;---------- ; 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 JMP CLRLIN ;---------------------------------------------------------------------- ; UpSpace ;-------- ; US: DEC ROW ;Up a line BPL USSK1 LDA #0 STA ROW USSK1: JMP SETCUR PAGE ;---------------------------------------------------------------------- ; 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 ;---------------------------------------------------------------------- ; Carriage Return ;---------------- ; CR: LDA #0 ;Carriage return STA COLMN JMP SETPOS PAGE ;---------------------------------------------------------------------- ; 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 ;---------------------------------------------------------------------- ; Escape Recieved ;---------------- ; 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 ;---------------------------------------------------------------------- ; Home the Cursor ;---------------- ; HOME: LDA #0 ;put cursor in home position STA ROW ;ROW = COLMN = 0 STA COLMN JMP SETCUR ;set new cursor position ;---------------------------------------------------------------------- ; Print a Carriage Return followed by a 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 KBRDOUT ; ;LOCK: LDA #$FF ; STA LOCKMD ; set keyboard lock mode ; LDA #LOCKON ; turn on keyboard lock LED ; JMP KBRDOUT END