|
|
|
@ -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 L 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 H FOR R10 |
|
|
|
LD H,A |
|
|
|
|
|
|
|
LD C,10 |
|
|
|
CALL VDU_WRREGX ; UPDATE CURSOR |
|
|
|
|
|
|
|
CALL PANIC ; NOT IMPLEMENTED (YET) |
|
|
|
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 |
|
|
|
@ -563,12 +567,33 @@ VDU_POS .DW 0 ; CURRENT DISPLAY POSITION |
|
|
|
VDU_OFFSET .DW 0 ; CURRENT DISPLAY POSITION |
|
|
|
VDU_BUF .FILL 256,0 ; COPY BUFFER |
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
; ECB-VDU VIDEO MODE DESCRIPTION |
|
|
|
;==================================================================================================\ |
|
|
|
; |
|
|
|
; CCIR 625/50 VERSION (USED IN MOST OF THE WORLD) |
|
|
|
; JUMPER K1 2-3, K2 1-2 FOR 2MHz CHAR CLOCK |
|
|
|
; |
|
|
|
; THE CCIR 625/50 TELEVISION STANDARD HAS 625 LINES INTERLACED AT 50 FIELDS PER SECOND. THIS WORKS |
|
|
|
; OUT AS 50 FIELDS OF 312.5 LINES PER SECOND NON-INTERLACED AS USED HERE. |
|
|
|
; HORIZONTAL LINE WIDTH IS 64uS. FOR A 2 MHz CHARACTER CLOCK (R0+1)/2000000 = 64uS |
|
|
|
; NEAREST NUMBER OF LINES IS 312 = (R4+1) * (R9+1) + R5. |
|
|
|
; 15625 / 312 = 50.08 FIELDS PER SECOND (NEAR ENOUGH-DGG) |
|
|
|
; |
|
|
|
; |
|
|
|
; .DB 078H ; R8 MODE B7=0 TRANSPARENT UPDATE DURING BLANKING |
|
|
|
; ; B6=1 PIN 34 IS UPDATE STROBE |
|
|
|
; ; B5=1 DELAY CURSOR 1 CHARACTER |
|
|
|
; ; B4=1 DELAY DISPLAY ENABLE 1 CHARACTER |
|
|
|
; ; B3=1 TRANSPARENT MEMORY ADDRESSING |
|
|
|
; ; B2=0 RAM STRAIGHT BINARY ADDRESSING |
|
|
|
; ; B1,B0=0 NON-INTERLACE |
|
|
|
VDU_INIT6845: |
|
|
|
#IF (VDUSIZ=V80X24) |
|
|
|
;================================================================================================== |
|
|
|
; VDU DRIVER - SY6845 REGISTER INITIALIZATION -80x24 10x8 |
|
|
|
;================================================================================================== |
|
|
|
; |
|
|
|
VDU_INIT6845: |
|
|
|
.DB 07FH ; R0 TOTAL NUMBER OF HORIZONTAL CHARACTERS (DETERMINES HSYNC) |
|
|
|
.DB DROWS ; R1 NUMBER OF HORIZONTAL CHARACTERS DISPLAYED (80 COLUMNS) |
|
|
|
.DB 060H ; R2 HORIZONTAL SYNC POSITION |
|
|
|
@ -577,27 +602,20 @@ VDU_INIT6845: |
|
|
|
.DB 002H ; R5 VERTICAL TOTAL ADJUST ( |
|
|
|
.DB DLINES ; R6 VERTICAL DISPLAYED (24 ROWS) |
|
|
|
.DB 01AH ; R7 VERTICAL SYNC |
|
|
|
.DB 078H ; R8 MODE B7=0 TRANSPARENT UPDATE DURING BLANKING |
|
|
|
; B6=1 PIN 34 IS UPDATE STROBE |
|
|
|
; B5=1 DELAY CURSOR 1 CHARACTER |
|
|
|
; B4=1 DELAY DISPLAY ENABLE 1 CHARACTER |
|
|
|
; B3=1 TRANSPARENT MEMORY ADDRESSING |
|
|
|
; B2=0 RAM STRAIGHT BINARY ADDRESSING |
|
|
|
; B1,B0=0 NON-INTERLACE |
|
|
|
.DB 078H ; R8 MODE |
|
|
|
.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 |
|
|
|
.DB 00H ; R15 CURSOR ADDRESS LO |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
#IF (VDUSIZ=V80X25) |
|
|
|
;================================================================================================== |
|
|
|
; VDU DRIVER - SY6845 REGISTER INITIALIZATION -80x25 10x8 |
|
|
|
;================================================================================================== |
|
|
|
VDU_INIT6845: |
|
|
|
; |
|
|
|
.DB 07FH ; R0 TOTAL NUMBER OF HORIZONTAL CHARACTERS (DETERMINES HSYNC) |
|
|
|
.DB DROWS ; R1 NUMBER OF HORIZONTAL CHARACTERS DISPLAYED =80 |
|
|
|
.DB 060H ; R2 HORIZONTAL SYNC POSITION |
|
|
|
@ -606,27 +624,20 @@ VDU_INIT6845: |
|
|
|
.DB 002H ; R5 VERTICAL TOTAL ADJUST ( |
|
|
|
.DB DLINES ; R6 VERTICAL DISPLAYED (25 ROWS) |
|
|
|
.DB 01BH ; R7 VERTICAL SYNC |
|
|
|
.DB 078H ; R8 MODE B7=0 TRANSPARENT UPDATE DURING BLANKING |
|
|
|
; ; B6=1 PIN 34 IS UPDATE STROBE |
|
|
|
; ; B5=1 DELAY CURSOR 1 CHARACTER |
|
|
|
; ; B4=1 DELAY DISPLAY ENABLE 1 CHARACTER |
|
|
|
; ; B3=1 TRANSPARENT MEMORY ADDRESSING |
|
|
|
; ; B2=0 RAM STRAIGHT BINARY ADDRESSING |
|
|
|
; ; B1,B0=0 NON-INTERLACE |
|
|
|
.DB 078H ; R8 MODE |
|
|
|
.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 |
|
|
|
.DB 00H ; R15 CURSOR ADDRESS LO |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
#IF (VDUSIZ=V80X30) |
|
|
|
;================================================================================================== |
|
|
|
; VDU DRIVER - SY6845 REGISTER INITIALIZATION -80x30 8x8 |
|
|
|
;================================================================================================== |
|
|
|
VDU_INIT6845: |
|
|
|
; |
|
|
|
.DB 07FH ; R0 TOTAL NUMBER OF HORIZONTAL CHARACTERS (DETERMINES HSYNC) |
|
|
|
.DB DROWS ; R1 NUMBER OF HORIZONTAL CHARACTERS DISPLAYED =80 |
|
|
|
.DB 060H ; R2 HORIZONTAL SYNC POSITION |
|
|
|
@ -635,27 +646,20 @@ VDU_INIT6845: |
|
|
|
.DB 00H ; R5 VERTICAL TOTAL ADJUST ( |
|
|
|
.DB DLINES ; R6 VERTICAL DISPLAYED (30 ROWS) |
|
|
|
.DB 22H ; R7 VERTICAL SYNC |
|
|
|
.DB 078H ; R8 MODE B7=0 TRANSPARENT UPDATE DURING BLANKING |
|
|
|
; ; B6=1 PIN 34 IS UPDATE STROBE |
|
|
|
; ; B5=1 DELAY CURSOR 1 CHARACTER |
|
|
|
; ; B4=1 DELAY DISPLAY ENABLE 1 CHARACTER |
|
|
|
; ; B3=1 TRANSPARENT MEMORY ADDRESSING |
|
|
|
; ; B2=0 RAM STRAIGHT BINARY ADDRESSING |
|
|
|
; ; B1,B0=0 NON-INTERLACE |
|
|
|
.DB 078H ; R8 MODE |
|
|
|
.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 |
|
|
|
.DB 00H ; R15 CURSOR ADDRESS LO |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
#IF (VDUSIZ=V80X25B) |
|
|
|
;================================================================================================== |
|
|
|
; VDU DRIVER - SY6845 REGISTER INITIALIZATION -80x25 12x8 TO SUIT BLOCK GRAPHICS |
|
|
|
;================================================================================================== |
|
|
|
VDU_INIT6845: |
|
|
|
; |
|
|
|
.DB 07FH ; R0 TOTAL NUMBER OF HORIZONTAL CHARACTERS (DETERMINES HSYNC) |
|
|
|
.DB DROWS ; R1 NUMBER OF HORIZONTAL CHARACTERS DISPLAYED =80 |
|
|
|
.DB 060H ; R2 HORIZONTAL SYNC POSITION |
|
|
|
@ -664,27 +668,20 @@ VDU_INIT6845: |
|
|
|
.DB 00H ; R5 VERTICAL TOTAL ADJUST (312-(R4+1)*DSCANL) |
|
|
|
.DB DLINES ; R6 VERTICAL DISPLAY |
|
|
|
.DB 019H ; R7 VERTICAL SYNC (DLINES .. R4) |
|
|
|
.DB 078H ; R8 MODE B7=0 TRANSPARENT UPDATE DURING BLANKING |
|
|
|
; ; B6=1 PIN 34 IS UPDATE STROBE |
|
|
|
; ; B5=1 DELAY CURSOR 1 CHARACTER |
|
|
|
; ; B4=1 DELAY DISPLAY ENABLE 1 CHARACTER |
|
|
|
; ; B3=1 TRANSPARENT MEMORY ADDRESSING |
|
|
|
; ; B2=0 RAM STRAIGHT BINARY ADDRESSING |
|
|
|
; ; B1,B0=0 NON-INTERLACE |
|
|
|
.DB 078H ; R8 MODE |
|
|
|
.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 |
|
|
|
.DB 00H ; R15 CURSOR ADDRESS LO |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
#IF (VDUSIZ=V80X24B) |
|
|
|
;================================================================================================== |
|
|
|
; VDU DRIVER - SY6845 REGISTER INITIALIZATION -80x24 12x8 TO SUIT BLOCK GRAPHICS |
|
|
|
;================================================================================================== |
|
|
|
VDU_INIT6845: |
|
|
|
; |
|
|
|
.DB 07FH ; R0 TOTAL NUMBER OF HORIZONTAL CHARACTERS (DETERMINES HSYNC) |
|
|
|
.DB DROWS ; R1 NUMBER OF HORIZONTAL CHARACTERS DISPLAYED =80 |
|
|
|
.DB 060H ; R2 HORIZONTAL SYNC POSITION |
|
|
|
@ -693,33 +690,18 @@ VDU_INIT6845: |
|
|
|
.DB 00H ; R5 VERTICAL TOTAL ADJUST (312-(R4+1)*DSCANL) |
|
|
|
.DB DLINES ; R6 VERTICAL DISPLAY |
|
|
|
.DB 018H ; R7 VERTICAL SYNC (DLINES .. R4) |
|
|
|
.DB 078H ; R8 MODE B7=0 TRANSPARENT UPDATE DURING BLANKING |
|
|
|
; ; B6=1 PIN 34 IS UPDATE STROBE |
|
|
|
; ; B5=1 DELAY CURSOR 1 CHARACTER |
|
|
|
; ; B4=1 DELAY DISPLAY ENABLE 1 CHARACTER |
|
|
|
; ; B3=1 TRANSPARENT MEMORY ADDRESSING |
|
|
|
; ; B2=0 RAM STRAIGHT BINARY ADDRESSING |
|
|
|
; ; B1,B0=0 NON-INTERLACE |
|
|
|
.DB 078H ; R8 MODE |
|
|
|
.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 |
|
|
|
.DB 00H ; R15 CURSOR ADDRESS LO |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; CCIR 625/50 VERSION (USED IN MOST OF THE WORLD) |
|
|
|
; JUMPER K1 2-3, K2 1-2 FOR 2MHz CHAR CLOCK |
|
|
|
; |
|
|
|
; THE CCIR 625/50 TELEVISION STANDARD HAS 625 LINES INTERLACED AT 50 FIELDS PER SECOND. THIS WORKS |
|
|
|
; OUT AS 50 FIELDS OF 312.5 LINES PER SECOND NON-INTERLACED AS USED HERE. |
|
|
|
; HORIZONTAL LINE WIDTH IS 64uS. FOR A 2 MHz CHARACTER CLOCK (R0+1)/2000000 = 64uS |
|
|
|
; NEAREST NUMBER OF LINES IS 312 = (R4+1) * (R9+1) + R5. |
|
|
|
; 15625 / 312 = 50.08 FIELDS PER SECOND (NEAR ENOUGH-DGG) |
|
|
|
; |
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
;;================================================================================================== |
|
|
|
; VDU DRIVER - INSTANCE DATA |
|
|
|
;================================================================================================== |
|
|
|
; |
|
|
|
|