From 5db3d11b9afce76aacb50b74a3ddb5c87ef642b6 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 20 Oct 2019 11:15:07 +0800 Subject: [PATCH] ECB-VDU, NASCOM updates Implement HBIOS cursor setting function VDU_VDASCS for ECB-VDU --- Doc/Nascom.txt | 23 ++++++++++++++++++ Source/HBIOS/vdu.asm | 58 +++++++++++++++++++++++--------------------- 2 files changed, 54 insertions(+), 27 deletions(-) diff --git a/Doc/Nascom.txt b/Doc/Nascom.txt index 0333b18d..5455ab1c 100644 --- a/Doc/Nascom.txt +++ b/Doc/Nascom.txt @@ -92,6 +92,29 @@ OR LOGICAL OR < LESS THAN ^ POWER +EXPRESSION PRECEDENCE: + +() EXPRESSIONS IN () +^ POWER +- NEGATION +* / MULTIPLICATION AND DIVISION ++ - ADDITION AND SUBTRACTION += EQUALS +<> NOT EQUAL +< LESS THAN +> GREATER THAN +<= =< LESS THAN OR EQUAL TO +>= => GREATER THAN OR EQUAL TO +NOT LOGICAL, BITWISE NEGATION +AND LOGICAL, BITWISE AND +OR LOGICAL, BITWISE OR + +VARIABLES: + + NO LENGTH LIMIT BUT ONLY FIRST TWO CHARACTERS ARE SIGNIFICANT. + CANNOT HAVE THE SAME NAME AS RESERVED WORDS. + MAY BE AN ARRAY. + ERROR CODE: NF NEXT without FOR diff --git a/Source/HBIOS/vdu.asm b/Source/HBIOS/vdu.asm index 379ed86f..9a835be6 100644 --- a/Source/HBIOS/vdu.asm +++ b/Source/HBIOS/vdu.asm @@ -5,7 +5,7 @@ ; REVISED/ENHANCED BY DAN WERNER -- 11/7/2009 ; ROMWBW ADAPTATION BY: WAYNE WARTHEN -- 11/9/2012 ; 80X25, 80X30 AND MODE INFO AT BOOT ADDED BY: PHIL SUMMERS -- 2/3/2019 -; ADD CURSOR STYLE OPTIONS: PHIL SUMMERS -- 19/10/2019 +; ADD CURSOR STYLE OPTIONS, IMPLEMENT VDU_VDASCS FUNCTION : PHIL SUMMERS -- 19/10/2019 ;====================================================================== ; ; VDU-DW.ZIP IS THE DEFAULY 10X8 FONT THAT SUITS 80X25 AND 80X26 MODE. @@ -15,7 +15,6 @@ ; ; TODO: ; - ADD REMAINING REGISTERS TO INIT -; - IMPLEMENT SET CURSOR STYLE (VDASCS) FUNCTION ; - IMPLEMENT ALTERNATE DISPLAY MODES? ; ;====================================================================== @@ -34,7 +33,6 @@ VDU_PPIB .EQU VDU_BASE + $05 ; PPI PORT B VDU_PPIC .EQU VDU_BASE + $06 ; PPI PORT C VDU_PPIX .EQU VDU_BASE + $07 ; PPI CONTROL PORT ; -; VDU_NOBL .EQU 00000000B ; NO BLINK VDU_NOCU .EQU 00100000B ; NO CURSOR VDU_BFAS .EQU 01000000B ; BLINK AT X16 RATE @@ -47,7 +45,7 @@ VDU_CSTY .EQU VDU_BLOK ; DEFAULT CURSOR STYLE VDU_BLNK .EQU VDU_NOBL ; DEFAULT BLINK RATE ; TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER - +; #IF (VDUSIZ=V80X24) DLINES .EQU 24 DROWS .EQU 80 @@ -84,7 +82,6 @@ VDU_R10 .EQU (VDU_BLNK + DSCANL-1) VDU_R11 .EQU DSCANL-1 #ENDIF ; -; ;====================================================================== ; VDU DRIVER - INITIALIZATION ;====================================================================== @@ -187,10 +184,24 @@ VDU_VDADEV: RET VDU_VDASCS: - ; CURSOR START := TOP NIBBLE OF D - ; CURSOR FINISH := BOTTOM NIBBLE OF D + LD A,D ; GET CURSOR FINISH. + AND 00001111B ; BOTTOM NIBBLE OF D + LD L,A ; SAVE IN E FOR R11 + + LD A,D ; GET CURSOR START. + AND 11110000B ; TOP NIBBLE IF D + RRCA + RRCA + RRCA ; COMBINE CURSOR START + RRCA ; AND CURSOR STYLE AND + OR VDU_CSTY ; SAVE IN D FOR R10 + LD H,A - CALL PANIC ; NOT IMPLEMENTED (YET) + LD C,10 + CALL VDU_WRREGX ; UPDATE CURSOR + + XOR A + RET VDU_VDASCP: CALL VDU_XY @@ -261,7 +272,7 @@ VDU_WAITRDY: ;---------------------------------------------------------------------- ; UPDATE SY6845 REGISTERS ; VDU_WRREG WRITES VALUE IN A TO VDU REGISTER SPECIFIED IN C -; VDU_WRREGX WRITES VALUE IN DE TO VDU REGISTER PAIR IN C, C+1 +; VDU_WRREGX WRITES VALUE IN HL TO VDU REGISTER PAIR IN C, C+1 ;---------------------------------------------------------------------- ; VDU_WRREG: @@ -336,14 +347,7 @@ VDU_CRTINIT1: INC HL ; POINT TO NEXT VALUE INC C ; POINT TO NEXT REGISTER DJNZ VDU_CRTINIT1 ; LOOP - - LD HL,VDU_INIT6845+10 ; SAVE - LD A,(HL) ; DEFAULT - LD (VDU_CS),A ; CURSOR - INC HL ; SCANLINE - LD A,(HL) ; START AND - LD (VDU_CE),A ; FINISH - RET ; POSITION + RET ; ;---------------------------------------------------------------------- ; CONVERT XY COORDINATES IN DE INTO LINEAR INDEX IN HL @@ -585,8 +589,8 @@ VDU_INIT6845: ; B2=0 RAM STRAIGHT BINARY ADDRESSING ; B1,B0=0 NON-INTERLACE .DB DSCANL-1 ; R9 SCAN LINE (LINES PER CHAR AND SPACING -1) -VDU_CS: .DB VDU_R10 ; R10 CURSOR START RASTER -VDU_CE: .DB VDU_R11 ; R11 CURSOR END RASTER + .DB VDU_R10 ; R10 CURSOR START RASTER + .DB VDU_R11 ; R11 CURSOR END RASTER .DB 00H ; R12 START ADDRESS HI .DB 00H ; R13 START ADDRESS LO .DB 00H ; R14 CURSOR ADDRESS HI @@ -614,8 +618,8 @@ VDU_INIT6845: ; ; B2=0 RAM STRAIGHT BINARY ADDRESSING ; ; B1,B0=0 NON-INTERLACE .DB DSCANL-1 ; R9 SCAN LINE (LINES PER CHAR AND SPACING -1) -VDU_CS: .DB VDU_R10 ; R10 CURSOR START RASTER -VDU_CE: .DB VDU_R11 ; R11 CURSOR END RASTER + .DB VDU_R10 ; R10 CURSOR START RASTER + .DB VDU_R11 ; R11 CURSOR END RASTER .DB 00H ; R12 START ADDRESS HI .DB 00H ; R13 START ADDRESS LO .DB 00H ; R14 CURSOR ADDRESS HI @@ -643,8 +647,8 @@ VDU_INIT6845: ; ; B2=0 RAM STRAIGHT BINARY ADDRESSING ; ; B1,B0=0 NON-INTERLACE .DB DSCANL-1 ; R9 SCAN LINE (LINES PER CHAR AND SPACING -1) -VDU_CS: .DB VDU_R10 ; R10 CURSOR START RASTER -VDU_CE: .DB VDU_R11 ; R11 CURSOR END RASTER + .DB VDU_R10 ; R10 CURSOR START RASTER + .DB VDU_R11 ; R11 CURSOR END RASTER .DB 00H ; R12 START ADDRESS HI .DB 00H ; R13 START ADDRESS LO .DB 00H ; R14 CURSOR ADDRESS HI @@ -672,8 +676,8 @@ VDU_INIT6845: ; ; B2=0 RAM STRAIGHT BINARY ADDRESSING ; ; B1,B0=0 NON-INTERLACE .DB DSCANL-1 ; R9 SCAN LINE (LINES PER CHAR AND SPACING -1) -VDU_CS: .DB VDU_R10 ; R10 CURSOR START RASTER -VDU_CE: .DB VDU_R11 ; R11 CURSOR END RASTER + .DB VDU_R10 ; R10 CURSOR START RASTER + .DB VDU_R11 ; R11 CURSOR END RASTER .DB 00H ; R12 START ADDRESS HI .DB 00H ; R13 START ADDRESS LO .DB 00H ; R14 CURSOR ADDRESS HI @@ -701,8 +705,8 @@ VDU_INIT6845: ; ; B2=0 RAM STRAIGHT BINARY ADDRESSING ; ; B1,B0=0 NON-INTERLACE .DB DSCANL-1 ; R9 SCAN LINE (LINES PER CHAR AND SPACING -1) -VDU_CS: .DB VDU_R10 ; R10 CURSOR START RASTER -VDU_CE: .DB VDU_R11 ; R11 CURSOR END RASTER + .DB VDU_R10 ; R10 CURSOR START RASTER + .DB VDU_R11 ; R11 CURSOR END RASTER .DB 00H ; R12 START ADDRESS HI .DB 00H ; R13 START ADDRESS LO .DB 00H ; R14 CURSOR ADDRESS HI