|
|
@ -214,6 +214,12 @@ ANSI_CTLDISP: |
|
|
JP Z,ANSI_CUP |
|
|
JP Z,ANSI_CUP |
|
|
CP 'J' ; ED: ERASE IN DISPLAY |
|
|
CP 'J' ; ED: ERASE IN DISPLAY |
|
|
JP Z,ANSI_ED |
|
|
JP Z,ANSI_ED |
|
|
|
|
|
CP 'K' ; EL: ERASE IN LINE |
|
|
|
|
|
JP Z,ANSI_EL |
|
|
|
|
|
CP 'f' ; HVP: HORIZONTAL/VERTICAL POSITION |
|
|
|
|
|
JP Z,ANSI_CUP |
|
|
|
|
|
CP 'm' ; SGR: SELECT GRAPHIC RENDITION |
|
|
|
|
|
JP Z,ANSI_SGR |
|
|
; *DEBUG* |
|
|
; *DEBUG* |
|
|
PUSH AF |
|
|
PUSH AF |
|
|
PRTS("<CTL>($") |
|
|
PRTS("<CTL>($") |
|
|
@ -273,6 +279,7 @@ ANSI_COLLPAR: |
|
|
JR NZ,ANSI_COLLPAR1 ; NOPE, CONTINUE |
|
|
JR NZ,ANSI_COLLPAR1 ; NOPE, CONTINUE |
|
|
LD A,(ANSI_PARIDX) ; GET CURRENT PARM POS INDEX |
|
|
LD A,(ANSI_PARIDX) ; GET CURRENT PARM POS INDEX |
|
|
INC A ; INCREMENT |
|
|
INC A ; INCREMENT |
|
|
|
|
|
AND $0F ; 16 PARMS MAX!!! |
|
|
LD (ANSI_PARIDX),A ; SAVE IT |
|
|
LD (ANSI_PARIDX),A ; SAVE IT |
|
|
RET ; DONE |
|
|
RET ; DONE |
|
|
; |
|
|
; |
|
|
@ -385,7 +392,7 @@ ANSI_LF: |
|
|
LD (ANSI_ROW),A ; SAVE IT |
|
|
LD (ANSI_ROW),A ; SAVE IT |
|
|
LD DE,(ANSI_DIM) ; GET SCREEN DIMENSIONS |
|
|
LD DE,(ANSI_DIM) ; GET SCREEN DIMENSIONS |
|
|
CP D ; COMPARE TO SCREEN ROWS |
|
|
CP D ; COMPARE TO SCREEN ROWS |
|
|
JR C,ANSI_XY ; NOT PAST END, ALL DONE |
|
|
|
|
|
|
|
|
JP C,ANSI_XY ; NOT PAST END, ALL DONE |
|
|
DEC D ; D NOW HAS MAX ROW NUM (ROWS - 1) |
|
|
DEC D ; D NOW HAS MAX ROW NUM (ROWS - 1) |
|
|
SUB D ; A WILL NOW HAVE NUM LINES TO SCROLL |
|
|
SUB D ; A WILL NOW HAVE NUM LINES TO SCROLL |
|
|
LD E,A ; LINES TO SCROLL -> E |
|
|
LD E,A ; LINES TO SCROLL -> E |
|
|
@ -394,39 +401,21 @@ ANSI_LF: |
|
|
LD A,(ANSI_ROWS) ; GET SCREEN ROW COUNT |
|
|
LD A,(ANSI_ROWS) ; GET SCREEN ROW COUNT |
|
|
DEC A ; A NOW HAS LAST ROW |
|
|
DEC A ; A NOW HAS LAST ROW |
|
|
LD (ANSI_ROW),A ; SAVE IT |
|
|
LD (ANSI_ROW),A ; SAVE IT |
|
|
JR ANSI_XY ; RESPOSITION CURSOR AND RETURN |
|
|
|
|
|
; |
|
|
|
|
|
; |
|
|
|
|
|
; |
|
|
|
|
|
ANSI_CUP: ; CURSOR UPDATE |
|
|
|
|
|
LD A,(ANSI_PARLST + 0) ; ROW PARM |
|
|
|
|
|
LD D,A ; PUT IN D |
|
|
|
|
|
LD A,(ANSI_PARLST + 1) ; COL PARM |
|
|
|
|
|
LD E,A ; PUT IN E |
|
|
|
|
|
LD (ANSI_POS),DE ; SAVE IT |
|
|
|
|
|
JP ANSI_XY ; UPDATE CURSOR AND RETURN |
|
|
|
|
|
|
|
|
JP ANSI_XY ; RESPOSITION CURSOR AND RETURN |
|
|
; |
|
|
; |
|
|
; |
|
|
; |
|
|
; |
|
|
; |
|
|
ANSI_ED: ; ERASE IN DISPLAY |
|
|
ANSI_ED: ; ERASE IN DISPLAY |
|
|
LD A,(ANSI_PARLST + 0) ; GET FIRST PARM |
|
|
LD A,(ANSI_PARLST + 0) ; GET FIRST PARM |
|
|
CP 2 ; ERASE FULL DISPLAY? |
|
|
|
|
|
JR NZ,ANSI_ED1 ; NOPE |
|
|
|
|
|
; |
|
|
|
|
|
; ERASE ALL, HOME CURSOR AND TREAT AS ERASE EOS |
|
|
|
|
|
LD DE,0 ; PREPARE TO HOME CURSOR |
|
|
|
|
|
LD (ANSI_POS),DE ; SAVE NEW CURSOR POSITION |
|
|
|
|
|
CALL ANSI_XY ; EXECUTE |
|
|
|
|
|
LD A,0 ; TREAT PARM AS 0 |
|
|
|
|
|
; |
|
|
|
|
|
ANSI_ED1: ; DETERMINE TYPE OF ERASE |
|
|
|
|
|
CP 0 ; ERASE CURSOR TO EOS |
|
|
CP 0 ; ERASE CURSOR TO EOS |
|
|
JR Z,ANSI_ED2 |
|
|
|
|
|
|
|
|
JR Z,ANSI_ED1 |
|
|
CP 1 ; ERASE START THRU CURSOR |
|
|
CP 1 ; ERASE START THRU CURSOR |
|
|
|
|
|
JR Z,ANSI_ED2 |
|
|
|
|
|
CP 2 ; ERASE FULL DISPLAY? |
|
|
JR Z,ANSI_ED3 |
|
|
JR Z,ANSI_ED3 |
|
|
RET ; INVALID? |
|
|
RET ; INVALID? |
|
|
; |
|
|
; |
|
|
ANSI_ED2: ; ERASE CURSOR THRU EOL |
|
|
|
|
|
|
|
|
ANSI_ED1: ; ERASE CURSOR THRU EOS |
|
|
LD DE,(ANSI_POS) ; GET CURSOR POSITION |
|
|
LD DE,(ANSI_POS) ; GET CURSOR POSITION |
|
|
CALL ANSI_POS2IDX ; HL NOW HAS CURSOR INDEX |
|
|
CALL ANSI_POS2IDX ; HL NOW HAS CURSOR INDEX |
|
|
PUSH HL ; SAVE IT |
|
|
PUSH HL ; SAVE IT |
|
|
@ -440,7 +429,7 @@ ANSI_ED2: ; ERASE CURSOR THRU EOL |
|
|
LD B,BF_VDAFIL ; SET FUNCTION TO FILL |
|
|
LD B,BF_VDAFIL ; SET FUNCTION TO FILL |
|
|
JP EMU_VDADISP ; PERFORM FILL AND RETURN |
|
|
JP EMU_VDADISP ; PERFORM FILL AND RETURN |
|
|
; |
|
|
; |
|
|
ANSI_ED3: ; ERASE START THRU CURSOR |
|
|
|
|
|
|
|
|
ANSI_ED2: ; ERASE START THRU CURSOR |
|
|
LD DE,0 ; CURSOR TO 0,0 FOR NOW |
|
|
LD DE,0 ; CURSOR TO 0,0 FOR NOW |
|
|
LD B,BF_VDASCP ; SET FUNCTION TO SET CURSOR POSITION |
|
|
LD B,BF_VDASCP ; SET FUNCTION TO SET CURSOR POSITION |
|
|
CALL EMU_VDADISP ; DO IT |
|
|
CALL EMU_VDADISP ; DO IT |
|
|
@ -452,6 +441,201 @@ ANSI_ED3: ; ERASE START THRU CURSOR |
|
|
CALL EMU_VDADISP ; DO IT |
|
|
CALL EMU_VDADISP ; DO IT |
|
|
JP ANSI_XY ; RESTORE CURSOR AND RETURN |
|
|
JP ANSI_XY ; RESTORE CURSOR AND RETURN |
|
|
; |
|
|
; |
|
|
|
|
|
ANSI_ED3: ; ERASE FULL DISPLAY |
|
|
|
|
|
LD DE,(ANSI_POS) ; GET CURSOR POS |
|
|
|
|
|
PUSH DE ; SAVE IT |
|
|
|
|
|
LD DE,0 ; PREPARE TO HOME CURSOR |
|
|
|
|
|
LD (ANSI_POS),DE ; SAVE NEW CURSOR POSITION |
|
|
|
|
|
CALL ANSI_XY ; EXECUTE |
|
|
|
|
|
CALL ANSI_ED1 ; ERASE THRU EOS |
|
|
|
|
|
POP DE ; RECOVER CURSOR POS |
|
|
|
|
|
LD (ANSI_POS),DE ; SAVE IT |
|
|
|
|
|
JP ANSI_XY ; UPDATE CURSOR AND RETURN |
|
|
|
|
|
; |
|
|
|
|
|
; |
|
|
|
|
|
; |
|
|
|
|
|
ANSI_EL: ; ERASE IN LINE |
|
|
|
|
|
LD A,(ANSI_PARLST + 0) ; GET FIRST PARM |
|
|
|
|
|
CP 0 ; ERASE CURSOR TO EOL |
|
|
|
|
|
JR Z,ANSI_EL1 |
|
|
|
|
|
CP 1 ; ERASE START THRU CURSOR |
|
|
|
|
|
JR Z,ANSI_EL2 |
|
|
|
|
|
CP 2 ; ERASE FULL LINE? |
|
|
|
|
|
JR Z,ANSI_EL3 |
|
|
|
|
|
RET ; INVALID? |
|
|
|
|
|
; |
|
|
|
|
|
ANSI_EL1: ; ERASE CURSOR THRU EOL |
|
|
|
|
|
LD DE,(ANSI_POS) ; GET CURSOR POSITION |
|
|
|
|
|
CALL ANSI_POS2IDX ; HL NOW HAS CURSOR INDEX |
|
|
|
|
|
PUSH HL ; SAVE IT |
|
|
|
|
|
LD DE,(ANSI_POS) ; GET CURSOR POSITION |
|
|
|
|
|
LD E,0 ; COL POSITION := 0 |
|
|
|
|
|
INC D ; ROW := ROW + 1 |
|
|
|
|
|
CALL ANSI_POS2IDX ; HL NOW HAS EOL INDEX |
|
|
|
|
|
POP DE ; RECOVER CURSOR POS INDEX |
|
|
|
|
|
OR A ; CLEAR CARRY |
|
|
|
|
|
SBC HL,DE ; SUBTRACT CURSOR INDEX FROM EOL INDEX |
|
|
|
|
|
LD E,' ' ; FILL WITH BLANKS |
|
|
|
|
|
LD B,BF_VDAFIL ; SET FUNCTION TO FILL |
|
|
|
|
|
JP EMU_VDADISP ; PERFORM FILL AND RETURN |
|
|
|
|
|
; |
|
|
|
|
|
ANSI_EL2: ; ERASE START THRU CURSOR |
|
|
|
|
|
LD DE,(ANSI_POS) ; GET CURSOR POS |
|
|
|
|
|
LD E,0 ; COL := 0, START OF ROW |
|
|
|
|
|
LD B,BF_VDASCP ; SET FUNCTION TO SET CURSOR POSITION |
|
|
|
|
|
CALL EMU_VDADISP ; DO IT |
|
|
|
|
|
LD HL,(ANSI_POS) ; GET ORIGINAL CURSOR POSITION |
|
|
|
|
|
LD H,0 ; ONLY ERASE COLUMNS |
|
|
|
|
|
INC HL ; ADD 1 POSITION TO ERASE THRU CURSOR POSITION |
|
|
|
|
|
LD E,' ' ; FILL WITH BLANKS |
|
|
|
|
|
LD B,BF_VDAFIL ; SET FUNCTION TO FILL |
|
|
|
|
|
CALL EMU_VDADISP ; DO IT |
|
|
|
|
|
JP ANSI_XY ; RESTORE CURSOR AND RETURN |
|
|
|
|
|
; |
|
|
|
|
|
ANSI_EL3: ; ERASE FULL LINE |
|
|
|
|
|
LD DE,(ANSI_POS) ; GET CURSOR POS |
|
|
|
|
|
PUSH DE ; SAVE IT |
|
|
|
|
|
LD E,0 ; CURSOR TO START OF LINE |
|
|
|
|
|
LD (ANSI_POS),DE ; SAVE NEW CURSOR POSITION |
|
|
|
|
|
CALL ANSI_XY ; EXECUTE |
|
|
|
|
|
CALL ANSI_EL1 ; ERASE THRU EOL |
|
|
|
|
|
POP DE ; RECOVER CURSOR POS |
|
|
|
|
|
LD (ANSI_POS),DE ; SAVE IT |
|
|
|
|
|
JP ANSI_XY ; UPDATE CURSOR AND RETURN |
|
|
|
|
|
; |
|
|
|
|
|
; |
|
|
|
|
|
; |
|
|
|
|
|
ANSI_HVP: ; HORIZONTAL/VERTICAL POSITION |
|
|
|
|
|
ANSI_CUP: ; CURSOR UPDATE |
|
|
|
|
|
; |
|
|
|
|
|
; HANDLE ROW NUMBER |
|
|
|
|
|
LD A,(ANSI_PARLST + 0) ; ROW PARM |
|
|
|
|
|
DEC A ; ADJUST FOR ZERO OFFSET |
|
|
|
|
|
JP P,ANSI_CUP1 ; 0 OR MORE, OK, CONTINUE |
|
|
|
|
|
XOR A ; NEGATIVE, FIX IT |
|
|
|
|
|
ANSI_CUP1: |
|
|
|
|
|
LD HL,ANSI_ROWS ; HL POINTS TO ROW COUNT |
|
|
|
|
|
CP (HL) ; COMPARE TO ROW COUNT |
|
|
|
|
|
JR C,ANSI_CUP2 ; IN BOUNDS, CONTINUE |
|
|
|
|
|
LD A,(HL) ; FIX IT, LOAD ROW COUNT |
|
|
|
|
|
DEC A ; SET TO LAST ROW NUM |
|
|
|
|
|
ANSI_CUP2: |
|
|
|
|
|
LD D,A ; COMMIT ROW NUMBER TO D |
|
|
|
|
|
; |
|
|
|
|
|
; HANDLE COL NUMBER |
|
|
|
|
|
LD A,(ANSI_PARLST + 1) ; COL PARM |
|
|
|
|
|
DEC A ; ADJUST FOR ZERO OFFSET |
|
|
|
|
|
JP P,ANSI_CUP3 ; 0 OR MORE, OK, CONTINUE |
|
|
|
|
|
XOR A ; NEGATIVE, FIX IT |
|
|
|
|
|
ANSI_CUP3: |
|
|
|
|
|
LD HL,ANSI_COLS ; HL POINTS TO COL COUNT |
|
|
|
|
|
CP (HL) ; COMPARE TO COL COUNT |
|
|
|
|
|
JR C,ANSI_CUP4 ; IN BOUNDS, CONTINUE |
|
|
|
|
|
LD A,(HL) ; FIX IT, LOAD COL COUNT |
|
|
|
|
|
DEC A ; SET TO LAST COL NUM |
|
|
|
|
|
ANSI_CUP4: |
|
|
|
|
|
LD E,A ; COMMIT COL NUMBER TO E |
|
|
|
|
|
; |
|
|
|
|
|
; COMMIT THE NEW CURSOR POSITION AND RETURN |
|
|
|
|
|
LD (ANSI_POS),DE ; SAVE IT |
|
|
|
|
|
JP ANSI_XY ; UPDATE CURSOR AND RETURN |
|
|
|
|
|
; |
|
|
|
|
|
; |
|
|
|
|
|
; |
|
|
|
|
|
ANSI_SGR: ; SET GRAPHIC RENDITION |
|
|
|
|
|
LD A,(ANSI_PARIDX) ; GET CURRENT PARM INDEX |
|
|
|
|
|
INC A ; INC TO MAKE IT THE COUNT |
|
|
|
|
|
LD B,A ; B IS NOW LOOP COUNTER |
|
|
|
|
|
LD HL,ANSI_PARLST ; HL POINTS TO START OF PARM LIST |
|
|
|
|
|
; |
|
|
|
|
|
ANSI_SGR1: ; PROCESSING LOOP |
|
|
|
|
|
PUSH BC ; PRESERVE BC |
|
|
|
|
|
PUSH HL ; PRESERVE HL |
|
|
|
|
|
LD A,(HL) |
|
|
|
|
|
CALL ANSI_SGR2 ; HANDLE PARM |
|
|
|
|
|
POP HL ; RESTORE HL |
|
|
|
|
|
POP BC ; RESTORE BC |
|
|
|
|
|
INC HL ; POINT TO NEXT PARM |
|
|
|
|
|
DJNZ ANSI_SGR1 ; LOOP TILL DONE |
|
|
|
|
|
; |
|
|
|
|
|
; NOW IMPLEMENT ALL CHANGES |
|
|
|
|
|
LD A,(ANSI_ATTR) ; GET THE ATTRIBUTE VALUE |
|
|
|
|
|
LD E,A ; MOVE TO E |
|
|
|
|
|
LD B,BF_VDASAT ; SET ATTRIBUTE FUNCTION |
|
|
|
|
|
CALL EMU_VDADISP ; CALL THE FUNCTION |
|
|
|
|
|
LD A,(ANSI_COLOR) ; GET THE COLOR VALUE |
|
|
|
|
|
LD E,A ; MOVE TO E |
|
|
|
|
|
LD B,BF_VDASCO ; SET ATTRIBUTE FUNCTION |
|
|
|
|
|
CALL EMU_VDADISP ; CALL THE FUNCTION |
|
|
|
|
|
RET ; RETURN |
|
|
|
|
|
; |
|
|
|
|
|
ANSI_SGR2: ; HANDLE THE REQUEST CODE |
|
|
|
|
|
CP 0 ; ALL OFF |
|
|
|
|
|
JR Z,ANSI_SGR_OFF ; DO IT |
|
|
|
|
|
CP 1 ; BOLD |
|
|
|
|
|
JR Z,ANSI_SGR_BOLD ; DO IT |
|
|
|
|
|
CP 4 ; UNDERLINE |
|
|
|
|
|
JR Z,ANSI_SGR_UL ; DO IT |
|
|
|
|
|
CP 7 ; REVERSE |
|
|
|
|
|
JR Z,ANSI_SGR_REV ; DO IT |
|
|
|
|
|
CP 30 ; START OF FOREGROUND |
|
|
|
|
|
RET C ; OUT OF RANGE |
|
|
|
|
|
CP 38 ; END OF RANGE |
|
|
|
|
|
JR C,ANSI_SGR_FG ; SET FOREGROUND |
|
|
|
|
|
CP 40 ; START OF BACKGROUND |
|
|
|
|
|
RET C ; OUT OF RANGE |
|
|
|
|
|
CP 48 ; END OF RANGE |
|
|
|
|
|
JR C,ANSI_SGR_BG ; SET BACKGROUND |
|
|
|
|
|
RET ; OTHERWISE OUT OF RANGE |
|
|
|
|
|
; |
|
|
|
|
|
ANSI_SGR_OFF: |
|
|
|
|
|
XOR A ; ZERO ACCUM |
|
|
|
|
|
LD (ANSI_ATTR),A ; CLEAR ATTRIBUTES |
|
|
|
|
|
LD A,7 ; WHITE ON BLACK |
|
|
|
|
|
LD (ANSI_COLOR),A ; RESET COLOR |
|
|
|
|
|
RET |
|
|
|
|
|
; |
|
|
|
|
|
ANSI_SGR_BOLD: |
|
|
|
|
|
LD A,(ANSI_COLOR) ; LOAD CURRENT COLOR |
|
|
|
|
|
OR %00001000 ; SET BOLD BIT |
|
|
|
|
|
LD (ANSI_COLOR),A ; SAVE IT |
|
|
|
|
|
RET |
|
|
|
|
|
; |
|
|
|
|
|
ANSI_SGR_UL: |
|
|
|
|
|
LD A,(ANSI_ATTR) ; LOAD CURRENT ATTRIBUTE |
|
|
|
|
|
OR %00000010 ; SET UNDERLINE BIT |
|
|
|
|
|
LD (ANSI_ATTR),A ; SAVE IT |
|
|
|
|
|
RET |
|
|
|
|
|
; |
|
|
|
|
|
ANSI_SGR_REV: |
|
|
|
|
|
LD A,(ANSI_ATTR) ; LOAD CURRENT ATTRIBUTE |
|
|
|
|
|
OR %00000100 ; SET REVERSE BIT |
|
|
|
|
|
LD (ANSI_ATTR),A ; SAVE IT |
|
|
|
|
|
RET |
|
|
|
|
|
; |
|
|
|
|
|
ANSI_SGR_FG: |
|
|
|
|
|
SUB 30 |
|
|
|
|
|
LD E,A |
|
|
|
|
|
LD A,(ANSI_COLOR) |
|
|
|
|
|
AND %11111000 |
|
|
|
|
|
OR E |
|
|
|
|
|
LD (ANSI_COLOR),A |
|
|
|
|
|
RET |
|
|
|
|
|
; |
|
|
|
|
|
ANSI_SGR_BG: |
|
|
|
|
|
SUB 40 |
|
|
|
|
|
RLCA |
|
|
|
|
|
RLCA |
|
|
|
|
|
RLCA |
|
|
|
|
|
RLCA |
|
|
|
|
|
LD E,A |
|
|
|
|
|
LD A,(ANSI_COLOR) |
|
|
|
|
|
AND %10001111 |
|
|
|
|
|
OR E |
|
|
|
|
|
LD (ANSI_COLOR),A |
|
|
|
|
|
RET |
|
|
|
|
|
|
|
|
|
|
|
; |
|
|
;================================================================================================== |
|
|
;================================================================================================== |
|
|
; SUPPORT FUNCTIONS |
|
|
; SUPPORT FUNCTIONS |
|
|
;================================================================================================== |
|
|
;================================================================================================== |
|
|
@ -494,4 +678,7 @@ ANSI_PRI .DB 0 ; PRIVATE CHARACTER RECORDED HERE |
|
|
ANSI_INT .DB 0 ; INTERMEDIATE CHARACTER RECORDED HERE |
|
|
ANSI_INT .DB 0 ; INTERMEDIATE CHARACTER RECORDED HERE |
|
|
ANSI_PARIDX .DB 0 ; NUMBER OF PARAMETERS RECORDED |
|
|
ANSI_PARIDX .DB 0 ; NUMBER OF PARAMETERS RECORDED |
|
|
ANSI_PARLST .FILL 16,0 ; PARAMETER VALUE LIST (UP TO 16 BYTE VALUES) |
|
|
ANSI_PARLST .FILL 16,0 ; PARAMETER VALUE LIST (UP TO 16 BYTE VALUES) |
|
|
ANSI_VARLEN .EQU $ - ANSI_VARS |
|
|
|
|
|
|
|
|
ANSI_VARLEN .EQU $ - ANSI_VARS |
|
|
|
|
|
; |
|
|
|
|
|
ANSI_ATTR .DB 0 ; CURRENT CHARACTER ATTRIBUTE |
|
|
|
|
|
ANSI_COLOR .DB 7 ; CURRENT CHARACTER COLOR |