diff --git a/Source/HBIOS/vdu.asm b/Source/HBIOS/vdu.asm index 9a65055b..379ed86f 100644 --- a/Source/HBIOS/vdu.asm +++ b/Source/HBIOS/vdu.asm @@ -5,12 +5,13 @@ ; 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 ;====================================================================== ; ; VDU-DW.ZIP IS THE DEFAULY 10X8 FONT THAT SUITS 80X25 AND 80X26 MODE. ; IN 80X30 MODE THE DESCENDERS ARE MISSING. AN ALTERNATE 8x8 FONT MAY ; DISPLAY BETTER. THIS CAN BE ADDED TO THE ECB-VDU FONT EPROM AND -; SELECTED VIA ONBOARD JUMPERS.THE FONT ROM CAN CONTAIN EIGHT 2Kb FONTS. +; SELECTED VIA ONBOARD JUMPERS. THE FONT ROM CAN CONTAIN EIGHT 2Kb FONTS. ; ; TODO: ; - ADD REMAINING REGISTERS TO INIT @@ -33,6 +34,18 @@ 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 +VDU_BSLO .EQU 01100000B ; BLINK AT X32 RATE +; +VDU_BLOK .EQU 0 ; BLOCK CURSOR +VDU_ULIN .EQU 1 ; UNDERLINE CURSOR +; +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) @@ -61,6 +74,16 @@ DROWS .EQU 80 DSCANL .EQU 12 #ENDIF ; +#IF VDU_CSTY=VDU_BLOK +VDU_R10 .EQU (VDU_BLNK + $00) +VDU_R11 .EQU DSCANL-1 +#ENDIF +; +#IF VDU_CSTY=VDU_ULIN +VDU_R10 .EQU (VDU_BLNK + DSCANL-1) +VDU_R11 .EQU DSCANL-1 +#ENDIF +; ; ;====================================================================== ; VDU DRIVER - INITIALIZATION @@ -164,6 +187,9 @@ VDU_VDADEV: RET VDU_VDASCS: + ; CURSOR START := TOP NIBBLE OF D + ; CURSOR FINISH := BOTTOM NIBBLE OF D + CALL PANIC ; NOT IMPLEMENTED (YET) VDU_VDASCP: @@ -310,7 +336,14 @@ VDU_CRTINIT1: INC HL ; POINT TO NEXT VALUE INC C ; POINT TO NEXT REGISTER DJNZ VDU_CRTINIT1 ; LOOP - RET + + 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 ; ;---------------------------------------------------------------------- ; CONVERT XY COORDINATES IN DE INTO LINEAR INDEX IN HL @@ -344,7 +377,7 @@ VDU_XY: JP VDU_WRREGX ; DO IT AND RETURN ; ;---------------------------------------------------------------------- -; WRITE VALUE IN A TO CURRENT VDU BUFFER POSTION, ADVANCE CURSOR +; WRITE VALUE IN A TO CURRENT VDU BUFFER POSITION, ADVANCE CURSOR ;---------------------------------------------------------------------- ; VDU_PUTCHAR: @@ -530,7 +563,6 @@ VDU_POS .DW 0 ; CURRENT DISPLAY POSITION VDU_OFFSET .DW 0 ; CURRENT DISPLAY POSITION VDU_BUF .FILL 256,0 ; COPY BUFFER ; - #IF (VDUSIZ=V80X24) ;================================================================================================== ; VDU DRIVER - SY6845 REGISTER INITIALIZATION -80x24 10x8 @@ -553,8 +585,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) - .DB 060H ; R10 CURSOR START RASTER - .DB DSCANL-1 ; R11 CURSOR END RASTER +VDU_CS: .DB VDU_R10 ; R10 CURSOR START RASTER +VDU_CE: .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 @@ -582,8 +614,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) - .DB 060H ; R10 CURSOR START RASTER - .DB DSCANL-1 ; R11 CURSOR END RASTER +VDU_CS: .DB VDU_R10 ; R10 CURSOR START RASTER +VDU_CE: .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 @@ -611,8 +643,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) - .DB 060H ; R10 CURSOR START RASTER - .DB DSCANL-1 ; R11 CURSOR END RASTER +VDU_CS: .DB VDU_R10 ; R10 CURSOR START RASTER +VDU_CE: .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 @@ -640,8 +672,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) - .DB 060H ; R10 CURSOR START RASTER - .DB DSCANL-1 ; R11 CURSOR END RASTER +VDU_CS: .DB VDU_R10 ; R10 CURSOR START RASTER +VDU_CE: .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 @@ -669,8 +701,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) - .DB 060H ; R10 CURSOR START RASTER - .DB DSCANL-1 ; R11 CURSOR END RASTER +VDU_CS: .DB VDU_R10 ; R10 CURSOR START RASTER +VDU_CE: .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