mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
Reintegrate wbw -> trunk
This commit is contained in:
150
trunk/Source/tty.asm
Normal file
150
trunk/Source/tty.asm
Normal file
@@ -0,0 +1,150 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; TTY EMULATION MODULE
|
||||
;==================================================================================================
|
||||
;
|
||||
TTY_INIT:
|
||||
JR TTY_INI
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_DISPATCH:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JR Z,TTY_IN ; $30
|
||||
DEC A
|
||||
JR Z,TTY_OUT ; $31
|
||||
DEC A
|
||||
JR Z,TTY_IST ; $32
|
||||
DEC A
|
||||
JR Z,TTY_OST ; $33
|
||||
DEC A
|
||||
JR Z,TTY_CFG ; $34
|
||||
CP 8
|
||||
JR Z,TTY_INI ; $38
|
||||
CP 9
|
||||
JR Z,TTY_QRY ; $39
|
||||
CALL PANIC
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_IN:
|
||||
LD B,BF_VDAKRD
|
||||
JP EMU_VDADISP
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_OUT:
|
||||
CALL TTY_DOCHAR
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_IST:
|
||||
LD B,BF_VDAKST
|
||||
JP EMU_VDADISP
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_OST:
|
||||
XOR A
|
||||
INC A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_CFG:
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_INI:
|
||||
LD (TTY_ROW),A
|
||||
LD (TTY_COL),A
|
||||
LD B,BF_VDARES
|
||||
JP EMU_VDADISP ; RESET VDA
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_QRY:
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_DOCHAR:
|
||||
LD A,E ; CHARACTER TO PROCESS
|
||||
CP 8 ; BACKSPACE
|
||||
JR Z,TTY_BS
|
||||
CP 12 ; FORMFEED
|
||||
JR Z,TTY_FF
|
||||
CP 13 ; CARRIAGE RETURN
|
||||
JR Z,TTY_CR
|
||||
CP 10 ; LINEFEED
|
||||
JR Z,TTY_LF
|
||||
CP 32 ; COMPARE TO SPACE (FIRST PRINTABLE CHARACTER)
|
||||
RET C ; SWALLOW OTHER CONTROL CHARACTERS
|
||||
LD B,BF_VDAWRC
|
||||
CALL EMU_VDADISP ; SPIT OUT THE RAW CHARACTER
|
||||
LD A,(TTY_COL) ; GET CUR COL
|
||||
INC A ; INCREMENT
|
||||
LD (TTY_COL),A ; SAVE IT
|
||||
CP 80 ; COMPARE TO COLS IN LINE
|
||||
RET C ; NOT PAST END OF LINE, ALL DONE
|
||||
CALL TTY_CR ; CARRIAGE RETURN
|
||||
JR TTY_LF ; LINEFEED AND RETURN
|
||||
;
|
||||
TTY_FF:
|
||||
LD DE,0 ; HOME CURSOR
|
||||
LD (TTY_ROWCOL),DE ; SAVE IT
|
||||
CALL TTY_XY ; EXECUTE
|
||||
LD E,' ' ; FILL SCREEN WITH BLANKS
|
||||
LD HL,80 * 24 ; NUMBER OF CHARACTER POSITIONS TO FILL
|
||||
LD B,BF_VDAFIL
|
||||
CALL EMU_VDADISP ; PERFORM FILL
|
||||
JR TTY_XY ; HOME CURSOR AND RETURN
|
||||
;
|
||||
TTY_BS:
|
||||
LD DE,(TTY_ROWCOL) ; GET CURRENT ROW/COL IN DE
|
||||
LD A,E ; GET CURRENT COLUMN
|
||||
CP 1 ; COMPARE TO COLUMN 1
|
||||
RET C ; LESS THAN 1, NOTHING TO DO
|
||||
DEC E ; POINT TO PREVIOUS COLUMN
|
||||
LD (TTY_ROWCOL),DE ; SAVE NEW COLUMN VALUE
|
||||
CALL TTY_XY ; MOVE CURSOR TO NEW TARGET COLUMN
|
||||
LD E,' ' ; LOAD A SPACE CHARACTER
|
||||
LD B,BF_VDAWRC
|
||||
CALL EMU_VDADISP ; OVERWRITE WITH A SPACE CHARACTER
|
||||
JR TTY_XY ; NEED TO MOVE CURSOR BACK TO NEW TARGET COLUMN
|
||||
;
|
||||
TTY_CR:
|
||||
XOR A
|
||||
LD (TTY_COL),A
|
||||
JR TTY_XY
|
||||
;
|
||||
TTY_LF:
|
||||
LD A,(TTY_ROW)
|
||||
INC A
|
||||
LD (TTY_ROW),A
|
||||
CP 24 ; COMPARE TO SCREEN ROWS
|
||||
JR C,TTY_XY ; NOT PAST END, ALL DONE
|
||||
SUB 23 ; A WILL NOW HAVE NUM LINES TO SCROLL
|
||||
LD E,A ; LINES TO SCROLL -> E
|
||||
LD B,BF_VDASCR
|
||||
CALL EMU_VDADISP ; DO THE SCROLLING
|
||||
LD A,23 ; ROW 23
|
||||
LD (TTY_ROW),A ; IS NOW CORRECT
|
||||
JR TTY_XY ; RESPOSITION CURSOR AND RETURN
|
||||
;
|
||||
TTY_XY:
|
||||
LD DE,(TTY_ROWCOL)
|
||||
LD B,BF_VDASCP
|
||||
JP EMU_VDADISP
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_ROWCOL:
|
||||
TTY_COL .DB 0
|
||||
TTY_ROW .DB 0
|
||||
Reference in New Issue
Block a user