mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
Reintegrate wbw -> trunk
This commit is contained in:
@@ -3,8 +3,12 @@
|
||||
; ANSI EMULATION MODULE
|
||||
;==================================================================================================
|
||||
;
|
||||
; TODO:
|
||||
; - THIS IS CURRENTLY JUST A CLONE OF TTY.ASM! NEEDS A REAL IMPLEMENTATION!
|
||||
; - SOME FUNCTIONS ARE NOT IMPLEMENTED!
|
||||
;
|
||||
ANSI_INIT:
|
||||
JR ANSI_INI
|
||||
JR ANSI_INI ; REUSE THE INI FUNCTION BELOW
|
||||
;
|
||||
;
|
||||
;
|
||||
@@ -29,47 +33,51 @@ ANSI_DISPATCH:
|
||||
;
|
||||
;
|
||||
ANSI_IN:
|
||||
LD B,BF_VDAKRD
|
||||
JP EMU_VDADISP
|
||||
LD B,BF_VDAKRD ; SET FUNCTION TO KEYBOARD READ
|
||||
JP EMU_VDADISP ; CHAIN TO VDA DISPATCHER
|
||||
;
|
||||
;
|
||||
;
|
||||
ANSI_OUT:
|
||||
CALL ANSI_DOCHAR
|
||||
XOR A
|
||||
CALL ANSI_DOCHAR ; HANDLE THE CHARACTER (EMULATION ENGINE)
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
ANSI_IST:
|
||||
LD B,BF_VDAKST
|
||||
JP EMU_VDADISP
|
||||
LD B,BF_VDAKST ; SET FUNCTION TO KEYBOARD STATUS
|
||||
JP EMU_VDADISP ; CHAIN TO VDA DISPATCHER
|
||||
;
|
||||
;
|
||||
;
|
||||
ANSI_OST:
|
||||
XOR A
|
||||
INC A
|
||||
XOR A ; ZERO ACCUM
|
||||
INC A ; A := $FF TO SIGNAL OUTPUT BUFFER READY
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
ANSI_CFG:
|
||||
XOR A
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
ANSI_INI:
|
||||
LD (ANSI_ROW),A
|
||||
LD (ANSI_COL),A
|
||||
LD B,BF_VDARES
|
||||
JP EMU_VDADISP ; RESET VDA
|
||||
LD B,BF_VDAQRY ; FUNCTION IS QUERY
|
||||
LD HL,0 ; WE DO NOT WANT A COPY OF THE CHARACTER BITMAP DATA
|
||||
CALL EMU_VDADISP ; PERFORM THE QUERY FUNCTION
|
||||
LD (ANSI_DIM),DE ; SAVE THE SCREEN DIMENSIONS RETURNED
|
||||
LD DE,0 ; DE := 0, CURSOR TO HOME POSITION 0,0
|
||||
LD (ANSI_POS),DE ; SAVE CURSOR POSITION
|
||||
LD B,BF_VDARES ; SET FUNCTION TO RESET
|
||||
JP EMU_VDADISP ; RESET VDA AND RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
ANSI_QRY:
|
||||
XOR A
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;
|
||||
@@ -91,60 +99,70 @@ ANSI_DOCHAR:
|
||||
LD A,(ANSI_COL) ; GET CUR COL
|
||||
INC A ; INCREMENT
|
||||
LD (ANSI_COL),A ; SAVE IT
|
||||
CP 80 ; COMPARE TO COLS IN LINE
|
||||
LD DE,(ANSI_DIM) ; GET SCREEN DIMENSIONS
|
||||
CP E ; COMPARE TO COLS IN LINE
|
||||
RET C ; NOT PAST END OF LINE, ALL DONE
|
||||
CALL ANSI_CR ; CARRIAGE RETURN
|
||||
JR ANSI_LF ; LINEFEED AND RETURN
|
||||
;
|
||||
ANSI_FF:
|
||||
LD DE,0 ; HOME CURSOR
|
||||
LD (ANSI_ROWCOL),DE ; SAVE IT
|
||||
LD DE,0 ; PREPARE TO HOME CURSOR
|
||||
LD (ANSI_POS),DE ; SAVE NEW CURSOR POSITION
|
||||
CALL ANSI_XY ; EXECUTE
|
||||
LD DE,(ANSI_DIM) ; GET SCREEN DIMENSIONS
|
||||
LD H,D ; SET UP TO MULTIPLY ROWS BY COLS
|
||||
CALL MULT8 ; HL := H * E TO GET TOTAL SCREEN POSITIONS
|
||||
LD E,' ' ; FILL SCREEN WITH BLANKS
|
||||
LD HL,80 * 24 ; NUMBER OF CHARACTER POSITIONS TO FILL
|
||||
LD B,BF_VDAFIL
|
||||
LD B,BF_VDAFIL ; SET FUNCTION TO FILL
|
||||
CALL EMU_VDADISP ; PERFORM FILL
|
||||
JR ANSI_XY ; HOME CURSOR AND RETURN
|
||||
;
|
||||
ANSI_BS:
|
||||
LD DE,(ANSI_ROWCOL) ; GET CURRENT ROW/COL IN DE
|
||||
LD DE,(ANSI_POS) ; 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 (ANSI_ROWCOL),DE ; SAVE NEW COLUMN VALUE
|
||||
LD (ANSI_POS),DE ; SAVE NEW COLUMN VALUE
|
||||
CALL ANSI_XY ; MOVE CURSOR TO NEW TARGET COLUMN
|
||||
LD E,' ' ; LOAD A SPACE CHARACTER
|
||||
LD B,BF_VDAWRC
|
||||
LD B,BF_VDAWRC ; SET FUNCTION TO WRITE CHARACTER
|
||||
CALL EMU_VDADISP ; OVERWRITE WITH A SPACE CHARACTER
|
||||
JR ANSI_XY ; NEED TO MOVE CURSOR BACK TO NEW TARGET COLUMN
|
||||
;
|
||||
ANSI_CR:
|
||||
XOR A
|
||||
LD (ANSI_COL),A
|
||||
JR ANSI_XY
|
||||
XOR A ; ZERO ACCUM
|
||||
LD (ANSI_COL),A ; COL := 0
|
||||
JR ANSI_XY ; REPOSITION CURSOR AND RETURN
|
||||
;
|
||||
ANSI_LF:
|
||||
LD A,(ANSI_ROW)
|
||||
INC A
|
||||
LD (ANSI_ROW),A
|
||||
CP 24 ; COMPARE TO SCREEN ROWS
|
||||
LD A,(ANSI_ROW) ; GET CURRENT ROW
|
||||
INC A ; BUMP TO NEXT
|
||||
LD (ANSI_ROW),A ; SAVE IT
|
||||
LD DE,(ANSI_DIM) ; GET SCREEN DIMENSIONS
|
||||
CP D ; COMPARE TO SCREEN ROWS
|
||||
JR C,ANSI_XY ; NOT PAST END, ALL DONE
|
||||
SUB 23 ; A WILL NOW HAVE NUM LINES TO SCROLL
|
||||
DEC D ; D NOW HAS MAX ROW NUM (ROWS - 1)
|
||||
SUB D ; A WILL NOW HAVE NUM LINES TO SCROLL
|
||||
LD E,A ; LINES TO SCROLL -> E
|
||||
LD B,BF_VDASCR
|
||||
LD B,BF_VDASCR ; SET FUNCTION TO SCROLL
|
||||
CALL EMU_VDADISP ; DO THE SCROLLING
|
||||
LD A,23 ; ROW 24
|
||||
LD (ANSI_ROW),A ; IS NOW CORRECT
|
||||
LD A,(ANSI_ROWS) ; GET SCREEN ROW COUNT
|
||||
DEC A ; A NOW HAS LAST ROW
|
||||
LD (ANSI_ROW),A ; SAVE IT
|
||||
JR ANSI_XY ; RESPOSITION CURSOR AND RETURN
|
||||
;
|
||||
ANSI_XY:
|
||||
LD DE,(ANSI_ROWCOL)
|
||||
LD B,BF_VDASCP
|
||||
JP EMU_VDADISP
|
||||
LD DE,(ANSI_POS) ; GET THE DESIRED CURSOR POSITION
|
||||
LD B,BF_VDASCP ; SET FUNCTIONT TO SET CURSOR POSITION
|
||||
JP EMU_VDADISP ; REPOSITION CURSOR
|
||||
;
|
||||
;
|
||||
;
|
||||
ANSI_ROWCOL:
|
||||
ANSI_COL .DB 0
|
||||
ANSI_ROW .DB 0
|
||||
ANSI_POS:
|
||||
ANSI_COL .DB 0 ; CURRENT COLUMN - 0 BASED
|
||||
ANSI_ROW .DB 0 ; CURRENT ROW - 0 BASED
|
||||
;
|
||||
ANSI_DIM:
|
||||
ANSI_COLS .DB 80 ; NUMBER OF COLUMNS ON SCREEN
|
||||
ANSI_ROWS .DB 24 ; NUMBER OF ROWS ON SCREEN
|
||||
@@ -3,8 +3,11 @@
|
||||
; TTY EMULATION MODULE
|
||||
;==================================================================================================
|
||||
;
|
||||
; TODO:
|
||||
; - SOME FUNCTIONS ARE NOT IMPLEMENTED!!!
|
||||
;
|
||||
TTY_INIT:
|
||||
JR TTY_INI
|
||||
JR TTY_INI ; REUSE THE INI FUNCTION BELOW
|
||||
;
|
||||
;
|
||||
;
|
||||
@@ -29,47 +32,51 @@ TTY_DISPATCH:
|
||||
;
|
||||
;
|
||||
TTY_IN:
|
||||
LD B,BF_VDAKRD
|
||||
JP EMU_VDADISP
|
||||
LD B,BF_VDAKRD ; SET FUNCTION TO KEYBOARD READ
|
||||
JP EMU_VDADISP ; CHAIN TO VDA DISPATCHER
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_OUT:
|
||||
CALL TTY_DOCHAR
|
||||
XOR A
|
||||
CALL TTY_DOCHAR ; HANDLE THE CHARACTER (EMULATION ENGINE)
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_IST:
|
||||
LD B,BF_VDAKST
|
||||
JP EMU_VDADISP
|
||||
LD B,BF_VDAKST ; SET FUNCTION TO KEYBOARD STATUS
|
||||
JP EMU_VDADISP ; CHAIN TO VDA DISPATCHER
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_OST:
|
||||
XOR A
|
||||
INC A
|
||||
XOR A ; ZERO ACCUM
|
||||
INC A ; A := $FF TO SIGNAL OUTPUT BUFFER READY
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_CFG:
|
||||
XOR A
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_INI:
|
||||
LD (TTY_ROW),A
|
||||
LD (TTY_COL),A
|
||||
LD B,BF_VDARES
|
||||
JP EMU_VDADISP ; RESET VDA
|
||||
LD B,BF_VDAQRY ; FUNCTION IS QUERY
|
||||
LD HL,0 ; WE DO NOT WANT A COPY OF THE CHARACTER BITMAP DATA
|
||||
CALL EMU_VDADISP ; PERFORM THE QUERY FUNCTION
|
||||
LD (TTY_DIM),DE ; SAVE THE SCREEN DIMENSIONS RETURNED
|
||||
LD DE,0 ; DE := 0, CURSOR TO HOME POSITION 0,0
|
||||
LD (TTY_POS),DE ; SAVE CURSOR POSITION
|
||||
LD B,BF_VDARES ; SET FUNCTION TO RESET
|
||||
JP EMU_VDADISP ; RESET VDA AND RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_QRY:
|
||||
XOR A
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;
|
||||
@@ -91,60 +98,70 @@ TTY_DOCHAR:
|
||||
LD A,(TTY_COL) ; GET CUR COL
|
||||
INC A ; INCREMENT
|
||||
LD (TTY_COL),A ; SAVE IT
|
||||
CP 80 ; COMPARE TO COLS IN LINE
|
||||
LD DE,(TTY_DIM) ; GET SCREEN DIMENSIONS
|
||||
CP E ; 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
|
||||
LD DE,0 ; PREPARE TO HOME CURSOR
|
||||
LD (TTY_POS),DE ; SAVE NEW CURSOR POSITION
|
||||
CALL TTY_XY ; EXECUTE
|
||||
LD DE,(TTY_DIM) ; GET SCREEN DIMENSIONS
|
||||
LD H,D ; SET UP TO MULTIPLY ROWS BY COLS
|
||||
CALL MULT8 ; HL := H * E TO GET TOTAL SCREEN POSITIONS
|
||||
LD E,' ' ; FILL SCREEN WITH BLANKS
|
||||
LD HL,80 * 24 ; NUMBER OF CHARACTER POSITIONS TO FILL
|
||||
LD B,BF_VDAFIL
|
||||
LD B,BF_VDAFIL ; SET FUNCTION TO FILL
|
||||
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 DE,(TTY_POS) ; 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
|
||||
LD (TTY_POS),DE ; SAVE NEW COLUMN VALUE
|
||||
CALL TTY_XY ; MOVE CURSOR TO NEW TARGET COLUMN
|
||||
LD E,' ' ; LOAD A SPACE CHARACTER
|
||||
LD B,BF_VDAWRC
|
||||
LD B,BF_VDAWRC ; SET FUNCTION TO WRITE CHARACTER
|
||||
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
|
||||
XOR A ; ZERO ACCUM
|
||||
LD (TTY_COL),A ; COL := 0
|
||||
JR TTY_XY ; REPOSITION CURSOR AND RETURN
|
||||
;
|
||||
TTY_LF:
|
||||
LD A,(TTY_ROW)
|
||||
INC A
|
||||
LD (TTY_ROW),A
|
||||
CP 24 ; COMPARE TO SCREEN ROWS
|
||||
LD A,(TTY_ROW) ; GET CURRENT ROW
|
||||
INC A ; BUMP TO NEXT
|
||||
LD (TTY_ROW),A ; SAVE IT
|
||||
LD DE,(TTY_DIM) ; GET SCREEN DIMENSIONS
|
||||
CP D ; COMPARE TO SCREEN ROWS
|
||||
JR C,TTY_XY ; NOT PAST END, ALL DONE
|
||||
SUB 23 ; A WILL NOW HAVE NUM LINES TO SCROLL
|
||||
DEC D ; D NOW HAS MAX ROW NUM (ROWS - 1)
|
||||
SUB D ; A WILL NOW HAVE NUM LINES TO SCROLL
|
||||
LD E,A ; LINES TO SCROLL -> E
|
||||
LD B,BF_VDASCR
|
||||
LD B,BF_VDASCR ; SET FUNCTION TO SCROLL
|
||||
CALL EMU_VDADISP ; DO THE SCROLLING
|
||||
LD A,23 ; ROW 24
|
||||
LD (TTY_ROW),A ; IS NOW CORRECT
|
||||
LD A,(TTY_ROWS) ; GET SCREEN ROW COUNT
|
||||
DEC A ; A NOW HAS LAST ROW
|
||||
LD (TTY_ROW),A ; SAVE IT
|
||||
JR TTY_XY ; RESPOSITION CURSOR AND RETURN
|
||||
;
|
||||
TTY_XY:
|
||||
LD DE,(TTY_ROWCOL)
|
||||
LD B,BF_VDASCP
|
||||
JP EMU_VDADISP
|
||||
LD DE,(TTY_POS) ; GET THE DESIRED CURSOR POSITION
|
||||
LD B,BF_VDASCP ; SET FUNCTIONT TO SET CURSOR POSITION
|
||||
JP EMU_VDADISP ; REPOSITION CURSOR
|
||||
;
|
||||
;
|
||||
;
|
||||
TTY_ROWCOL:
|
||||
TTY_COL .DB 0
|
||||
TTY_ROW .DB 0
|
||||
TTY_POS:
|
||||
TTY_COL .DB 0 ; CURRENT COLUMN - 0 BASED
|
||||
TTY_ROW .DB 0 ; CURRENT ROW - 0 BASED
|
||||
;
|
||||
TTY_DIM:
|
||||
TTY_COLS .DB 80 ; NUMBER OF COLUMNS ON SCREEN
|
||||
TTY_ROWS .DB 24 ; NUMBER OF ROWS ON SCREEN
|
||||
Reference in New Issue
Block a user