|
|
|
@ -38,7 +38,9 @@ CVDU_RESET: |
|
|
|
LD A,$0E ; ATTRIBUTE IS STANDARD WHITE ON BLACK |
|
|
|
LD (CVDU_ATTR),A ; SAVE IT |
|
|
|
|
|
|
|
LD A,'#' ; BLANK THE SCREEN |
|
|
|
LD DE,0 ; ROW = 0, COL = 0 |
|
|
|
CALL CVDU_XY ; SEND CURSOR TO TOP LEFT |
|
|
|
LD A,' ' ; BLANK THE SCREEN |
|
|
|
LD DE,$800 ; FILL ENTIRE BUFFER |
|
|
|
CALL CVDU_FILL ; DO IT |
|
|
|
LD DE,0 ; ROW = 0, COL = 0 |
|
|
|
@ -103,21 +105,22 @@ CVDU_DISPVDA: |
|
|
|
DEC A |
|
|
|
JR Z,CVDU_VDAFIL ; $48 |
|
|
|
DEC A |
|
|
|
JR Z,CVDU_VDASCR ; $49 |
|
|
|
JR Z,CVDU_VDACPY ; $49 |
|
|
|
DEC A |
|
|
|
JR Z,CVDU_VDASCR ; $4A |
|
|
|
DEC A |
|
|
|
JP Z,KBD_STAT ; $4A |
|
|
|
JP Z,KBD_STAT ; $4B |
|
|
|
DEC A |
|
|
|
JP Z,KBD_FLUSH ; $4B |
|
|
|
JP Z,KBD_FLUSH ; $4C |
|
|
|
DEC A |
|
|
|
JP Z,KBD_READ ; $4C |
|
|
|
JP Z,KBD_READ ; $4D |
|
|
|
CALL PANIC |
|
|
|
|
|
|
|
CVDU_VDAINI: |
|
|
|
JR CVDU_INIT ; INITIALIZE |
|
|
|
JP CVDU_INIT ; INITIALIZE |
|
|
|
|
|
|
|
CVDU_VDAQRY: |
|
|
|
LD C,$00 ; MODE ZERO IS ALL WE KNOW |
|
|
|
; LD DE,$1950 ; 25 ROWS ($19), 80 COLS ($50) |
|
|
|
LD D,CVDU_ROWS ; ROWS |
|
|
|
LD E,CVDU_COLS ; COLS |
|
|
|
LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET |
|
|
|
@ -181,6 +184,15 @@ CVDU_VDAFIL: |
|
|
|
CALL CVDU_FILL ; DO THE FILL |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET |
|
|
|
|
|
|
|
CVDU_VDACPY: |
|
|
|
; LENGTH IN HL, SOURCE ROW/COL IN DE, DEST IS CVDU_POS |
|
|
|
; BLKCPY USES: HL=SOURCE, DE=DEST, BC=COUNT |
|
|
|
PUSH HL ; SAVE LENGTH |
|
|
|
CALL CVDU_XY2IDX ; ROW/COL IN DE -> SOURCE ADR IN HL |
|
|
|
POP BC ; RECOVER LENGTH IN BC |
|
|
|
LD DE,(CVDU_POS) ; PUT DEST IN DE |
|
|
|
JP CVDU_BLKCPY ; DO A BLOCK COPY |
|
|
|
|
|
|
|
CVDU_VDASCR: |
|
|
|
LD A,E ; LOAD E INTO A |
|
|
|
@ -295,18 +307,27 @@ CVDU_LOADFONT1: |
|
|
|
;---------------------------------------------------------------------- |
|
|
|
; |
|
|
|
CVDU_XY: |
|
|
|
CALL CVDU_XY2IDX ; CONVERT ROW/COL TO BUF IDX |
|
|
|
LD (CVDU_POS),HL ; SAVE THE RESULT (DISPLAY POSITION) |
|
|
|
LD C,14 ; CURSOR POSITION REGISTER PAIR |
|
|
|
JP CVDU_WRX ; DO IT AND RETURN |
|
|
|
; |
|
|
|
;---------------------------------------------------------------------- |
|
|
|
; CONVERT XY COORDINATES IN DE INTO LINEAR INDEX IN HL |
|
|
|
; D=ROW, E=COL |
|
|
|
;---------------------------------------------------------------------- |
|
|
|
; |
|
|
|
CVDU_XY2IDX: |
|
|
|
LD A,E ; SAVE COLUMN NUMBER IN A |
|
|
|
LD H,D ; SET H TO ROW NUMBER |
|
|
|
LD E,CVDU_COLS ; SET E TO ROW LENGTH |
|
|
|
CALL MULT8 ; MULTIPLY TO GET ROW OFFSET |
|
|
|
LD E,A ; GET COLUMN BACK |
|
|
|
ADD HL,DE ; ADD IT IN |
|
|
|
LD (CVDU_POS),HL ; SAVE THE RESULT (DISPLAY POSITION) |
|
|
|
LD C,14 ; CURSOR POSITION REGISTER PAIR |
|
|
|
JP CVDU_WRX ; DO IT AND RETURN |
|
|
|
RET ; RETURN |
|
|
|
; |
|
|
|
;---------------------------------------------------------------------- |
|
|
|
; WRITE VALULE IN A TO CURRENT VDU BUFFER POSTION, ADVANCE CURSOR |
|
|
|
; WRITE VALUE IN A TO CURRENT VDU BUFFER POSTION, ADVANCE CURSOR |
|
|
|
;---------------------------------------------------------------------- |
|
|
|
; |
|
|
|
CVDU_PUTCHAR: |
|
|
|
@ -452,13 +473,13 @@ CVDU_SCROLL2: |
|
|
|
AND $7F ; CLEAR BIT 7 FOR FILL MODE |
|
|
|
CALL CVDU_WR ; DO IT |
|
|
|
|
|
|
|
; SET CHARACTER TO WRITE |
|
|
|
; SET VALUE TO WRITE |
|
|
|
POP AF ; RESTORE THE FILL VALUE PASSED IN |
|
|
|
LD C,31 ; DATA REGISTER |
|
|
|
CALL CVDU_WR ; DO IT |
|
|
|
|
|
|
|
; SET BLOCK WRITE COUNT (WILL EXECUTE THE WRITE) |
|
|
|
LD A,80 - 1 ; SET WRITE COUNT TO LINE LENGTH - 1 (1 CHAR ALREADY WRITTEN) |
|
|
|
LD A,CVDU_COLS - 1 ; SET WRITE COUNT TO LINE LENGTH - 1 (1 CHAR ALREADY WRITTEN) |
|
|
|
LD C,30 ; WORD COUNT REGISTER |
|
|
|
CALL CVDU_WR ; DO IT |
|
|
|
|
|
|
|
@ -470,7 +491,7 @@ CVDU_SCROLL2: |
|
|
|
; |
|
|
|
CVDU_RSCROLL: |
|
|
|
; SCROLL THE CHARACTER BUFFER |
|
|
|
LD A,'=' ; CHAR VALUE TO FILL NEW EXPOSED LINE |
|
|
|
LD A,' ' ; CHAR VALUE TO FILL NEW EXPOSED LINE |
|
|
|
LD HL,$0 + ((CVDU_ROWS - 1) * CVDU_COLS) ; SOURCE ADDRESS OF CHARACER BUFFER |
|
|
|
CALL CVDU_RSCROLL1 ; SCROLL CHARACTER BUFFER |
|
|
|
|
|
|
|
@ -512,13 +533,17 @@ CVDU_RSCROLL2: |
|
|
|
|
|
|
|
DJNZ CVDU_RSCROLL2 ; REPEAT FOR ALL LINES |
|
|
|
|
|
|
|
; SET FILL DESTINATION (USING HL PASSED IN) |
|
|
|
LD C,18 ; UPDATE ADDRESS (DESTINATION) REGISTER |
|
|
|
CALL CVDU_WRX ; DO IT |
|
|
|
|
|
|
|
; SET MODE TO BLOCK WRITE TO CLEAR NEW LINE EXPOSED BY SCROLL |
|
|
|
LD C,24 ; BLOCK MODE CONTROL REGISTER |
|
|
|
CALL CVDU_RD ; GET CURRENT VALUE |
|
|
|
AND $7F ; CLEAR BIT 7 FOR FILL MODE |
|
|
|
CALL CVDU_WR ; DO IT |
|
|
|
|
|
|
|
; SET CHARACTER TO WRITE |
|
|
|
; SET VALUE TO WRITE |
|
|
|
POP AF ; RESTORE THE FILL VALUE PASSED IN |
|
|
|
LD C,31 ; DATA REGISTER |
|
|
|
CALL CVDU_WR ; DO IT |
|
|
|
@ -530,6 +555,51 @@ CVDU_RSCROLL2: |
|
|
|
|
|
|
|
RET |
|
|
|
; |
|
|
|
;---------------------------------------------------------------------- |
|
|
|
; BLOCK COPY BC BYTES FROM HL TO DE |
|
|
|
;---------------------------------------------------------------------- |
|
|
|
; |
|
|
|
CVDU_BLKCPY: |
|
|
|
; SETUP PARMS FOR FIRST PASS (CHARS) |
|
|
|
PUSH BC ; LENGTH |
|
|
|
PUSH HL ; SOURCE |
|
|
|
PUSH DE ; DEST |
|
|
|
; PUT A RETURN ADDRESS ON THE STACK FOR SECOND PASS |
|
|
|
PUSH HL ; PUT CURRENT HL ON STACK |
|
|
|
LD HL,CVDU_BLKCPY1 ; NOW SET HL TO RETURN ADDRESS |
|
|
|
EX (SP),HL ; GET ORIG HL BACK, AND PUT RET ADR ON STACK |
|
|
|
; SETUP PARMS FOR SECOND PASS (ATTRIBUTES) |
|
|
|
PUSH BC ; LENGTH |
|
|
|
LD BC,$800 ; USE BC TO ADD OFFSET TO ATTR BUF |
|
|
|
ADD HL,BC ; ADD THE OFFSET TO HL |
|
|
|
PUSH HL ; SAVE PARM (SOURCE ADR) |
|
|
|
EX DE,HL ; GET DE INTO HL |
|
|
|
ADD HL,BC ; ADD THE OFFSET |
|
|
|
PUSH HL ; SAVE PARM (DESTINATION ADR) |
|
|
|
; |
|
|
|
CVDU_BLKCPY1: |
|
|
|
; SET MODE TO BLOCK COPY |
|
|
|
LD C,24 ; BLOCK MODE CONTROL REGISTER |
|
|
|
CALL CVDU_RD ; GET CURRENT VALUE |
|
|
|
OR $80 ; SET BIT 7 FOR COPY MODE |
|
|
|
CALL CVDU_WR ; DO IT |
|
|
|
; |
|
|
|
; SET DESTINATION |
|
|
|
POP HL ; RECOVER DESTINATION ADDRESS |
|
|
|
LD C,18 ; REGISTER = UPDATE ADDRESS |
|
|
|
CALL CVDU_WRX ; DO IT |
|
|
|
; |
|
|
|
; SET SOURCE |
|
|
|
POP HL ; RECOVER SOURCE ADDRESS |
|
|
|
LD C,32 ; REGISTER = BLOCK START |
|
|
|
CALL CVDU_WRX ; DO IT |
|
|
|
; |
|
|
|
; SET LENGTH |
|
|
|
POP HL ; RECOVER LENGTH |
|
|
|
LD A,L ; BYTES TO COPY GOES IN A |
|
|
|
LD C,30 ; REGSITER = WORD COUNT |
|
|
|
JP CVDU_WR ; DO IT (COPY OCCURS HERE) AND RETURN |
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
; CVDU DRIVER - DATA |
|
|
|
;================================================================================================== |
|
|
|
|