Browse Source

Merge trunk -> dwg

import/raw
wayne 13 years ago
parent
commit
5367747671
  1. 98
      branches/dwg/Source/ansi.asm
  2. 97
      branches/dwg/Source/tty.asm

98
branches/dwg/Source/ansi.asm

@ -3,8 +3,12 @@
; ANSI EMULATION MODULE ; ANSI EMULATION MODULE
;================================================================================================== ;==================================================================================================
; ;
; TODO:
; - THIS IS CURRENTLY JUST A CLONE OF TTY.ASM! NEEDS A REAL IMPLEMENTATION!
; - SOME FUNCTIONS ARE NOT IMPLEMENTED!
;
ANSI_INIT: ANSI_INIT:
JR ANSI_INI
JR ANSI_INI ; REUSE THE INI FUNCTION BELOW
; ;
; ;
; ;
@ -29,47 +33,51 @@ ANSI_DISPATCH:
; ;
; ;
ANSI_IN: 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: ANSI_OUT:
CALL ANSI_DOCHAR
XOR A
CALL ANSI_DOCHAR ; HANDLE THE CHARACTER (EMULATION ENGINE)
XOR A ; SIGNAL SUCCESS
RET RET
; ;
; ;
; ;
ANSI_IST: 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: ANSI_OST:
XOR A
INC A
XOR A ; ZERO ACCUM
INC A ; A := $FF TO SIGNAL OUTPUT BUFFER READY
RET RET
; ;
; ;
; ;
ANSI_CFG: ANSI_CFG:
XOR A
XOR A ; SIGNAL SUCCESS
RET RET
; ;
; ;
; ;
ANSI_INI: 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: ANSI_QRY:
XOR A
XOR A ; SIGNAL SUCCESS
RET RET
; ;
; ;
@ -91,60 +99,70 @@ ANSI_DOCHAR:
LD A,(ANSI_COL) ; GET CUR COL LD A,(ANSI_COL) ; GET CUR COL
INC A ; INCREMENT INC A ; INCREMENT
LD (ANSI_COL),A ; SAVE IT 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 RET C ; NOT PAST END OF LINE, ALL DONE
CALL ANSI_CR ; CARRIAGE RETURN CALL ANSI_CR ; CARRIAGE RETURN
JR ANSI_LF ; LINEFEED AND RETURN JR ANSI_LF ; LINEFEED AND RETURN
; ;
ANSI_FF: 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 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 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 CALL EMU_VDADISP ; PERFORM FILL
JR ANSI_XY ; HOME CURSOR AND RETURN JR ANSI_XY ; HOME CURSOR AND RETURN
; ;
ANSI_BS: 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 LD A,E ; GET CURRENT COLUMN
CP 1 ; COMPARE TO COLUMN 1 CP 1 ; COMPARE TO COLUMN 1
RET C ; LESS THAN 1, NOTHING TO DO RET C ; LESS THAN 1, NOTHING TO DO
DEC E ; POINT TO PREVIOUS COLUMN 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 CALL ANSI_XY ; MOVE CURSOR TO NEW TARGET COLUMN
LD E,' ' ; LOAD A SPACE CHARACTER 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 CALL EMU_VDADISP ; OVERWRITE WITH A SPACE CHARACTER
JR ANSI_XY ; NEED TO MOVE CURSOR BACK TO NEW TARGET COLUMN JR ANSI_XY ; NEED TO MOVE CURSOR BACK TO NEW TARGET COLUMN
; ;
ANSI_CR: 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: 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 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 E,A ; LINES TO SCROLL -> E
LD B,BF_VDASCR
LD B,BF_VDASCR ; SET FUNCTION TO SCROLL
CALL EMU_VDADISP ; DO THE SCROLLING 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 JR ANSI_XY ; RESPOSITION CURSOR AND RETURN
; ;
ANSI_XY: 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_POS:
ANSI_COL .DB 0 ; CURRENT COLUMN - 0 BASED
ANSI_ROW .DB 0 ; CURRENT ROW - 0 BASED
; ;
ANSI_ROWCOL:
ANSI_COL .DB 0
ANSI_ROW .DB 0
ANSI_DIM:
ANSI_COLS .DB 80 ; NUMBER OF COLUMNS ON SCREEN
ANSI_ROWS .DB 24 ; NUMBER OF ROWS ON SCREEN

97
branches/dwg/Source/tty.asm

@ -3,8 +3,11 @@
; TTY EMULATION MODULE ; TTY EMULATION MODULE
;================================================================================================== ;==================================================================================================
; ;
; TODO:
; - SOME FUNCTIONS ARE NOT IMPLEMENTED!!!
;
TTY_INIT: TTY_INIT:
JR TTY_INI
JR TTY_INI ; REUSE THE INI FUNCTION BELOW
; ;
; ;
; ;
@ -29,47 +32,51 @@ TTY_DISPATCH:
; ;
; ;
TTY_IN: 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: TTY_OUT:
CALL TTY_DOCHAR
XOR A
CALL TTY_DOCHAR ; HANDLE THE CHARACTER (EMULATION ENGINE)
XOR A ; SIGNAL SUCCESS
RET RET
; ;
; ;
; ;
TTY_IST: 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: TTY_OST:
XOR A
INC A
XOR A ; ZERO ACCUM
INC A ; A := $FF TO SIGNAL OUTPUT BUFFER READY
RET RET
; ;
; ;
; ;
TTY_CFG: TTY_CFG:
XOR A
XOR A ; SIGNAL SUCCESS
RET RET
; ;
; ;
; ;
TTY_INI: 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: TTY_QRY:
XOR A
XOR A ; SIGNAL SUCCESS
RET RET
; ;
; ;
@ -91,60 +98,70 @@ TTY_DOCHAR:
LD A,(TTY_COL) ; GET CUR COL LD A,(TTY_COL) ; GET CUR COL
INC A ; INCREMENT INC A ; INCREMENT
LD (TTY_COL),A ; SAVE IT 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 RET C ; NOT PAST END OF LINE, ALL DONE
CALL TTY_CR ; CARRIAGE RETURN CALL TTY_CR ; CARRIAGE RETURN
JR TTY_LF ; LINEFEED AND RETURN JR TTY_LF ; LINEFEED AND RETURN
; ;
TTY_FF: 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 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 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 CALL EMU_VDADISP ; PERFORM FILL
JR TTY_XY ; HOME CURSOR AND RETURN JR TTY_XY ; HOME CURSOR AND RETURN
; ;
TTY_BS: 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 LD A,E ; GET CURRENT COLUMN
CP 1 ; COMPARE TO COLUMN 1 CP 1 ; COMPARE TO COLUMN 1
RET C ; LESS THAN 1, NOTHING TO DO RET C ; LESS THAN 1, NOTHING TO DO
DEC E ; POINT TO PREVIOUS COLUMN 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 CALL TTY_XY ; MOVE CURSOR TO NEW TARGET COLUMN
LD E,' ' ; LOAD A SPACE CHARACTER 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 CALL EMU_VDADISP ; OVERWRITE WITH A SPACE CHARACTER
JR TTY_XY ; NEED TO MOVE CURSOR BACK TO NEW TARGET COLUMN JR TTY_XY ; NEED TO MOVE CURSOR BACK TO NEW TARGET COLUMN
; ;
TTY_CR: 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: 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 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 E,A ; LINES TO SCROLL -> E
LD B,BF_VDASCR
LD B,BF_VDASCR ; SET FUNCTION TO SCROLL
CALL EMU_VDADISP ; DO THE SCROLLING 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 JR TTY_XY ; RESPOSITION CURSOR AND RETURN
; ;
TTY_XY: 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_POS:
TTY_COL .DB 0 ; CURRENT COLUMN - 0 BASED
TTY_ROW .DB 0 ; CURRENT ROW - 0 BASED
; ;
TTY_ROWCOL:
TTY_COL .DB 0
TTY_ROW .DB 0
TTY_DIM:
TTY_COLS .DB 80 ; NUMBER OF COLUMNS ON SCREEN
TTY_ROWS .DB 24 ; NUMBER OF ROWS ON SCREEN
Loading…
Cancel
Save