diff --git a/branches/dwg/Doc/RomWBW Architecture.pdf b/branches/dwg/Doc/RomWBW Architecture.pdf index 5ce1fa3e..f6e1ac3d 100644 Binary files a/branches/dwg/Doc/RomWBW Architecture.pdf and b/branches/dwg/Doc/RomWBW Architecture.pdf differ diff --git a/branches/dwg/Doc/Source/Character Emulation Video Services.vsd b/branches/dwg/Doc/Source/Character Emulation Video Services.vsd index a481d060..9f01ad06 100644 Binary files a/branches/dwg/Doc/Source/Character Emulation Video Services.vsd and b/branches/dwg/Doc/Source/Character Emulation Video Services.vsd differ diff --git a/branches/dwg/Doc/Source/RomWBW Architecture.docx b/branches/dwg/Doc/Source/RomWBW Architecture.docx index d7454e54..454e23d2 100644 Binary files a/branches/dwg/Doc/Source/RomWBW Architecture.docx and b/branches/dwg/Doc/Source/RomWBW Architecture.docx differ diff --git a/branches/dwg/Source/ansi.asm b/branches/dwg/Source/ansi.asm index cefdb306..4c64aa7b 100644 --- a/branches/dwg/Source/ansi.asm +++ b/branches/dwg/Source/ansi.asm @@ -134,7 +134,7 @@ ANSI_LF: LD E,A ; LINES TO SCROLL -> E LD B,BF_VDASCR CALL EMU_VDADISP ; DO THE SCROLLING - LD A,23 ; ROW 23 + LD A,23 ; ROW 24 LD (ANSI_ROW),A ; IS NOW CORRECT JR ANSI_XY ; RESPOSITION CURSOR AND RETURN ; diff --git a/branches/dwg/Source/cvdu.asm b/branches/dwg/Source/cvdu.asm index 794d0e15..b96bd0d2 100644 --- a/branches/dwg/Source/cvdu.asm +++ b/branches/dwg/Source/cvdu.asm @@ -1,622 +1,593 @@ -;__CVDUDRIVER_______________________________________________________________________________________ -; +;====================================================================== ; COLOR VDU DRIVER FOR N8VEM PROJECT ; ; WRITTEN BY: DAN WERNER -- 11/4/2011 -; REMAINDER WRITTEN BY: DAN WERNER -- 11/7/2009 ; ROMWBW ADAPTATION BY: WAYNE WARTHEN -- 11/9/2012 -;__________________________________________________________________________________________________ +;====================================================================== +; +; TODO: +; - IMPLEMENT CONSTANTS FOR SCREEN DIMENSIONS +; - IMPLEMENT SET CURSOR STYLE (VDASCS) FUNCTION +; - IMPLEMENT ALTERNATE DISPLAY MODES? +; - IMPLEMENT DYNAMIC READ/WRITE OF CHARACTER BITMAP DATA? ; -;__________________________________________________________________________________________________ -; DATA CONSTANTS -;__________________________________________________________________________________________________ +;====================================================================== +; CVDU DRIVER - CONSTANTS +;====================================================================== ; CVDU_STAT .EQU $E4 ; READ M8563 STATUS CVDU_REG .EQU $E4 ; SELECT M8563 REGISTER CVDU_DATA .EQU $EC ; READ/WRITE M8563 DATA ; -;__________________________________________________________________________________________________ -; BOARD INITIALIZATION -;__________________________________________________________________________________________________ +;====================================================================== +; CVDU DRIVER - INITIALIZATION +;====================================================================== ; CVDU_INIT: - LD A,14 - LD (CVDU_COLOR),A - XOR A - LD (CVDU_X),A - LD (CVDU_Y),A - LD DE,0 - LD (CVDU_DISPLAYPOS),DE - LD (CVDU_DISPLAY_START),DE + CALL CVDU_CRTINIT ; SETUP THE CVDU CHIP REGISTERS + CALL CVDU_LOADFONT ; LOAD FONT DATA FROM ROM TO CVDU STRORAGE + +CVDU_RESET: + LD A,$0E ; ATTRIBUTE IS STANDARD WHITE ON BLACK + LD (CVDU_ATTR),A ; SAVE IT - CALL CVDU_CRTINIT - CALL CVDU_LOADFONT - LD A,'#' - LD DE,$800 - CALL CVDU_FILL - CALL CVDU_XY + LD A,'#' ; BLANK THE SCREEN + LD DE,$800 ; FILL ENTIRE BUFFER + CALL CVDU_FILL ; DO IT + LD DE,0 ; ROW = 0, COL = 0 + CALL CVDU_XY ; SEND CURSOR TO TOP LEFT - XOR A + XOR A ; SIGNAL SUCCESS RET ; -;__________________________________________________________________________________________________ -; CHARACTER I/O (CIO) FUNCTION JUMP TABLE -;__________________________________________________________________________________________________ +;====================================================================== +; CVDU DRIVER - CHARACTER I/O (CIO) DISPATCHER AND FUNCTIONS +;====================================================================== ; CVDU_DISPCIO: - LD A,B ; GET REQUESTED FUNCTION - AND $0F ; ISOLATE SUB-FUNCTION - JR Z,CVDU_CIOIN + LD A,B ; GET REQUESTED FUNCTION + AND $0F ; ISOLATE SUB-FUNCTION + JR Z,CVDU_CIOIN ; $00 DEC A - JR Z,CVDU_CIOOUT + JR Z,CVDU_CIOOUT ; $01 DEC A - JR Z,CVDU_CIOIST + JR Z,CVDU_CIOIST ; $02 DEC A - JR Z,CVDU_CIOOST + JR Z,CVDU_CIOOST ; $03 CALL PANIC ; CVDU_CIOIN: - JP KBD_READ + JP KBD_READ ; CHAIN TO KEYBOARD DRIVER ; CVDU_CIOIST: - JP KBD_STAT + JP KBD_STAT ; CHAIN TO KEYBOARD DRIVER ; CVDU_CIOOUT: - JP CVDU_VDAWRC + JP CVDU_VDAWRC ; WRITE CHARACTER ; CVDU_CIOOST: - XOR A - INC A + XOR A ; A = 0 + INC A ; A = 1, SIGNAL OUTPUT BUFFER READY RET ; -;__________________________________________________________________________________________________ -; VIDEO DISPLAY ADAPTER (VDA) FUNCTION JUMP TABLE -;__________________________________________________________________________________________________ +;====================================================================== +; CVDU DRIVER - VIDEO DISPLAY ADAPTER (VDA) DISPATCHER AND FUNCTIONS +;====================================================================== ; CVDU_DISPVDA: LD A,B ; GET REQUESTED FUNCTION AND $0F ; ISOLATE SUB-FUNCTION - JR Z,CVDU_VDAINI + JR Z,CVDU_VDAINI ; $40 DEC A - JR Z,CVDU_VDAQRY + JR Z,CVDU_VDAQRY ; $41 DEC A - JR Z,CVDU_VDARES + JR Z,CVDU_VDARES ; $42 DEC A - JR Z,CVDU_VDASCS + JR Z,CVDU_VDASCS ; $43 DEC A - JR Z,CVDU_VDASCP + JR Z,CVDU_VDASCP ; $44 DEC A - JR Z,CVDU_VDASAT + JR Z,CVDU_VDASAT ; $45 DEC A - JR Z,CVDU_VDASCO + JR Z,CVDU_VDASCO ; $46 DEC A - JR Z,CVDU_VDAWRC + JR Z,CVDU_VDAWRC ; $47 DEC A - JR Z,CVDU_VDAFIL + JR Z,CVDU_VDAFIL ; $48 DEC A - JR Z,CVDU_VDASCR + JR Z,CVDU_VDASCR ; $49 DEC A - JP Z,KBD_STAT + JP Z,KBD_STAT ; $4A DEC A - JP Z,KBD_FLUSH + JP Z,KBD_FLUSH ; $4B DEC A - JP Z,KBD_READ + JP Z,KBD_READ ; $4C CALL PANIC CVDU_VDAINI: - CALL CVDU_INIT - XOR A + CALL CVDU_INIT ; INITIALIZE + XOR A ; SIGNAL SUCCESS RET CVDU_VDAQRY: - CALL PANIC + LD C,$00 ; MODE ZERO IS ALL WE KNOW + LD DE,$1950 ; 25 ROWS ($19), 80 COLS ($50) + LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET + XOR A ; SIGNAL SUCCESS + RET CVDU_VDARES: - JP CVDU_INIT + JP CVDU_RESET ; DO THE RESET CVDU_VDASCS: - CALL PANIC + CALL PANIC ; NOT IMPLEMENTED (YET) CVDU_VDASCP: - LD A,E - LD (CVDU_X),A - LD A,D - LD (CVDU_Y),A - CALL CVDU_XY - XOR A + CALL CVDU_XY ; SET CURSOR POSITION + XOR A ; SIGNAL SUCCESS RET CVDU_VDASAT: - ; FIX: NOT IMPLEMENTED!!! - CALL PANIC + ; INCOMING IS: -----RUB (R=REVERSE, U=UNDERLINE, B=BLINK) + ; TRANSFORM TO: -RUB---- + LD A,E ; GET THE INCOMING ATTRIBUTE + RLCA ; TRANSLATE TO OUR DESIRED BIT + RLCA ; " + RLCA ; " + RLCA ; " + AND %01110000 ; REMOVE ANYTHING EXTRANEOUS + LD E,A ; SAVE IT IN E + LD A,(CVDU_ATTR) ; GET CURRENT ATTRIBUTE SETTING + AND %10001111 ; CLEAR OUT OLD ATTRIBUTE BITS + OR E ; STUFF IN THE NEW ONES + LD A,(CVDU_ATTR) ; AND SAVE THE RESULT + XOR A ; SIGNAL SUCCESS + RET CVDU_VDASCO: - ; NOT SUPPORTED!!! - CALL PANIC + ; INCOMING IS: IBGRIBGR (I=INTENSITY, B=BLUE, G=GREEN, R=RED) + ; TRANSFORM TO: ----RGBI (DISCARD BACKGROUND COLOR IN HIGH NIBBLE) + XOR A ; CLEAR A + LD B,4 ; LOOP 4 TIMES (4 BITS) +CVDU_VDASCO1: + RRC E ; ROTATE LOW ORDER BIT OUT OF E INTO CF + RLA ; ROTATE CF INTO LOW ORDER BIT OF A + DJNZ CVDU_VDASCO1 ; DO FOUR BITS OF THIS + LD E,A ; SAVE RESULT IN E + LD A,(CVDU_ATTR) ; GET CURRENT VALUE INTO A + AND %11110000 ; CLEAR OUT OLD COLOR BITS + OR E ; STUFF IN THE NEW ONES + LD A,(CVDU_ATTR) ; AND SAVE THE RESULT + XOR A ; SIGNAL SUCCESS + RET CVDU_VDAWRC: - LD A,E - CALL CVDU_PUTCHAR - - ; RETURN WITH SUCCESS - XOR A + LD A,E ; CHARACTER TO WRITE GOES IN A + CALL CVDU_PUTCHAR ; PUT IT ON THE SCREEN + XOR A ; SIGNAL SUCCESS RET CVDU_VDAFIL: - LD A,E - EX DE,HL - CALL CVDU_FILL - XOR A ; RESULT = 0 + LD A,E ; FILL CHARACTER GOES IN A + EX DE,HL ; FILL LENGTH GOES IN DE + CALL CVDU_FILL ; DO THE FILL + XOR A ; SIGNAL SUCCESS RET CVDU_VDASCR: - ; FIX: IMPLEMENT REVERSE SCROLLING!!! - LD A,E - OR A - RET Z - PUSH DE - CALL CVDU_SCROLL - POP DE - DEC E - JR CVDU_VDASCR -; -CVDU_WAITRDY: -; IN A,(CVDU_STREG) ; READ STATUS -; OR A ; SET FLAGS -; RET M ; IF BIT 7 SET, THEN READY! -; JR CVDU_WAITRDY ; KEEP CHECKING + LD A,E ; LOAD E INTO A + OR A ; SET FLAGS + RET Z ; IF ZERO, WE ARE DONE + PUSH DE ; SAVE E + JP M,CVDU_VDASCR1 ; E IS NEGATIVE, REVERSE SCROLL + CALL CVDU_SCROLL ; SCROLL FORWARD ONE LINE + POP DE ; RECOVER E + DEC E ; DECREMENT IT + JR CVDU_VDASCR ; LOOP +CVDU_VDASCR1: + CALL CVDU_RSCROLL ; SCROLL REVERSE ONE LINE + POP DE ; RECOVER E + INC E ; INCREMENT IT + JR CVDU_VDASCR ; LOOP ; -;__CVDU_CRTINIT_____________________________________________________________________________________ +;====================================================================== +; CVDU DRIVER - PRIVATE DRIVER FUNCTIONS +;====================================================================== +; +;---------------------------------------------------------------------- +; MOS 8563 DISPLAY CONTROLLER CHIP INITIALIZATION +;---------------------------------------------------------------------- ; -; INIT 8563 VDU CHIP -;__________________________________________________________________________________________________ CVDU_CRTINIT: - LD B,$00 ; B = 0 + LD C,0 ; START WITH REGISTER 0 + LD B,37 ; INIT 37 REGISTERS LD HL,CVDU_INIT8563 ; HL = POINTER TO THE DEFAULT VALUES CVDU_CRTINIT1: LD A,(HL) ; GET VALUE - CALL CVDU_WREG ; WRITE IT - INC HL - INC B - LD A,B - CP 37 - JR NZ,CVDU_CRTINIT1 ; LOOP UNTIL DONE + CALL CVDU_WR ; WRITE IT + INC HL ; POINT TO NEXT VALUE + INC C ; POINT TO NEXT REGISTER + DJNZ CVDU_CRTINIT1 ; LOOP RET ; -;__CVDU_LOADFONT____________________________________________________________________________________ +;---------------------------------------------------------------------- +; LOAD FONT DATA +;---------------------------------------------------------------------- ; -; LOAD SCREEN FONT -;__________________________________________________________________________________________________ CVDU_LOADFONT: - LD HL,$2000 ; SET FONT LOCATION - LD B,18 ; SET UPDATE ADDRESS IN VDU - LD A,H - CALL CVDU_WREG ; WRITE IT - LD B,19 ; SET UPDATE ADDRESS IN VDU - LD A,L - CALL CVDU_WREG ; WRITE IT - LD BC,$0020 ; FONT SIZE - LD HL,CVDU_FONTDATA ; FONT DATA + LD HL,$2000 ; START OF FONT BUFFER + LD C,18 ; UPDATE ADDRESS REGISTER PAIR + CALL CVDU_WRX ; DO IT + + LD HL,CVDU_FONTDATA ; POINTER TO FONT DATA + LD DE,$2000 ; LENGTH OF FONT DATA + LD C,31 ; DATA REGISTER CVDU_LOADFONT1: - IN A,(CVDU_STAT) ; READ ADDRESS/STATUS REGISTER - BIT 7,A ; IF BIT 7 = 1 THAN AN UPDATE STROBE HAS BEEN OCCURED - JR Z,CVDU_LOADFONT1 ; WAIT FOR READY - LD A,31 - OUT (CVDU_REG),A ; SELECT REGISTER -CVDU_LOADFONT2: - IN A,(CVDU_STAT) ; READ ADDRESS/STATUS REGISTER - BIT 7,A ; IF BIT 7 = 1 THAN AN UPDATE STROBE HAS BEEN OCCURED - JR Z,CVDU_LOADFONT2 ; WAIT FOR READY - LD A,(HL) - OUT (CVDU_DATA),A ; PUT DATA - INC HL - DJNZ CVDU_LOADFONT1 - DEC C - JP NZ,CVDU_LOADFONT1 + LD A,(HL) ; LOAD NEXT BYTE OF FONT DATA + CALL CVDU_WR ; WRITE IT + INC HL ; INCREMENT FONT DATA POINTER + DEC DE ; DECREMENT LOOP COUNTER + LD A,D ; CHECK DE... + OR E ; FOR COUNTER EXHAUSTED + JR NZ,CVDU_LOADFONT1 ; LOOP TILL DONE RET -;__CVDU_WREG________________________________________________________________________________________ -; -; WRITE VALUE IN A TO REGISTER IN B -; B: REGISTER TO UPDATE -; A: VALUE TO WRITE -;__________________________________________________________________________________________________ -CVDU_WREG: - PUSH AF ; STORE AF -CVDU_WREG1: - IN A,(CVDU_STAT) ; read address/status register - BIT 7,A ; if bit 7 = 1 than an update strobe has been occured - JR Z,CVDU_WREG1 ; wait for ready - LD A,B ; - OUT (CVDU_REG),A ; select register -CVDU_WREG2: - IN A,(CVDU_STAT) ; read address/status register - BIT 7,A ; if bit 7 = 1 than an update strobe has been occured - JR Z,CVDU_WREG2 ; wait for ready - POP AF ; - OUT (CVDU_DATA),A ; PUT DATA - RET ; -;__CVDU_GREG________________________________________________________________________________________ -; -; GET VALUE FROM REGISTER IN B PLACE IN A -; B: REGISTER TO GET -; A: VALUE -;__________________________________________________________________________________________________ -CVDU_GREG: - IN A,(CVDU_STAT) ; read address/status register - BIT 7,A ; if bit 7 = 1 than an update strobe has been occured - JR Z,CVDU_GREG ; wait for ready - LD A,B ; - OUT (CVDU_REG) , A ; select register -CVDU_GREG1: - IN A,(CVDU_STAT) ; read address/status register - BIT 7,A ; if bit 7 = 1 than an update strobe has been occured - JR Z,CVDU_GREG1 ; wait for ready - IN A,(CVDU_DATA) ; GET DATA - RET +;---------------------------------------------------------------------- +; UPDATE M8563 REGISTERS +; CVDU_WR WRITES VALUE IN A TO VDU REGISTER SPECIFIED IN C +; CVDU_WRX WRITES VALUE IN DE TO VDU REGISTER PAIR IN C, C+1 +;---------------------------------------------------------------------- +; +CVDU_WR: + PUSH AF ; SAVE VALUE TO WRITE + LD A,C ; SET A TO CVDU REGISTER TO SELECT + OUT (CVDU_REG),A ; WRITE IT TO SELECT THE REGISTER +CVDU_WR1: + IN A,(CVDU_STAT) ; GET CVDU STATUS + BIT 7,A ; CHECK BIT 7 + JR Z,CVDU_WR1 ; LOOP WHILE NOT READY (BIT 7 NOT SET) + POP AF ; RESTORE VALUE TO WRITE + OUT (CVDU_DATA),A ; WRITE IT + RET ; -;__CVDU_XY__________________________________________________________________________________________ +CVDU_WRX: + LD A,H ; SETUP MSB TO WRITE + CALL CVDU_WR ; DO IT + INC C ; NEXT CVDU REGISTER + LD A,L ; SETUP LSB TO WRITE + JR CVDU_WR ; DO IT & RETURN +; +;---------------------------------------------------------------------- +; READ M8563 REGISTERS +; CVDU_RD READS VDU REGISTER SPECIFIED IN C AND RETURNS VALUE IN A +; CVDU_RDX READS VDU REGISTER PAIR SPECIFIED BY C, C+1 +; AND RETURNS VALUE IN HL +;---------------------------------------------------------------------- +; +CVDU_RD: + LD A,C ; SET A TO CVDU REGISTER TO SELECT + OUT (CVDU_REG),A ; WRITE IT TO SELECT THE REGISTER +CVDU_RD1: + IN A,(CVDU_STAT) ; GET CVDU STATUS + BIT 7,A ; CHECK BIT 7 + JR Z,CVDU_WR1 ; LOOP WHILE NOT READY (BIT 7 NOT SET) + IN A,(CVDU_DATA) ; READ IT + RET ; -; MOVE CURSOR TO POSITON IN CVDU_X AND CVDU_Y -;__________________________________________________________________________________________________ -CVDU_XY: - LD A,(CVDU_Y) - LD H,A - LD DE,80 - CALL MULT8 ; HL := H * E (D & L ARE CLEARED) - LD A,(CVDU_X) - LD E,A - ADD HL,DE - LD (CVDU_DISPLAYPOS),HL - LD DE,(CVDU_DISPLAY_START) - ADD HL,DE - LD B,14 ; SET UPDATE CSR POS IN VDU - LD A,H ; - CALL CVDU_WREG ; WRITE IT - INC B ; SET UPDATE CSR POS IN VDU - LD A,L ; - CALL CVDU_WREG ; WRITE IT +CVDU_RDX: + CALL CVDU_RD ; GET VALUE FROM REGISTER IN C + LD H,A ; SAVE IN H + INC C ; BUMP TO NEXT REGISTER OF PAIR + CALL CVDU_RD ; READ THE VALUE + LD L,A ; SAVE IT IN L RET ; -;__CVDU_SCROLL_______________________________________________________________________________________ +;---------------------------------------------------------------------- +; SET CURSOR POSITION TO ROW IN D AND COLUMN IN E +;---------------------------------------------------------------------- +; +CVDU_XY: + LD A,E ; SAVE COLUMN NUMBER IN A + LD H,D ; SET H TO ROW NUMBER + LD E,80 ; 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 +; +;---------------------------------------------------------------------- +; WRITE VALULE IN A TO CURRENT VDU BUFFER POSTION, ADVANCE CURSOR +;---------------------------------------------------------------------- +; +CVDU_PUTCHAR: + PUSH AF ; SAVE CHARACTER + + ; SET MEMORY LOCATION FOR CHARACTER + LD HL,(CVDU_POS) ; LOAD CURRENT POSITION INTO HL + LD C,18 ; UPDATE ADDRESS REGISTER PAIR + CALL CVDU_WRX ; DO IT + + ; PUT THE CHARACTER THERE + POP AF ; RECOVER CHARACTER VALLUE TO WRITE + LD C,31 ; DATA REGISTER + CALL CVDU_WR ; DO IT + + ; BUMP THE CURSOR FORWARD + INC HL ; BUMP HL TO NEXT POSITION + LD (CVDU_POS),HL ; SAVE IT + LD C,14 ; CURSOR POSITION REGISTER PAIR + CALL CVDU_WRX ; DO IT + + ; SET MEMORY LOCATION FOR ATTRIBUTE + LD DE,$800 - 1 ; SETUP DE TO ADD OFFSET INTO ATTRIB BUFFER + ADD HL,DE ; HL NOW POINTS TO ATTRIB POS FOR CHAR JUST WRITTEN + LD C,18 ; UPDATE ADDRESS REGISTER PAIR + CALL CVDU_WRX ; DO IT + + ; PUT THE ATTRIBUTE THERE + LD A,(CVDU_ATTR) ; LOAD THE ATTRIBUTE VALUE + LD C,31 ; DATA REGISTER + JP CVDU_WR ; DO IT AND RETURN +; +;---------------------------------------------------------------------- +; FILL AREA IN BUFFER WITH SPECIFIED CHARACTER AND CURRENT COLOR/ATTRIBUTE +; STARTING AT THE CURRENT FRAME BUFFER POSITION +; A: FILL CHARACTER +; DE: NUMBER OF CHARACTERS TO FILL +;---------------------------------------------------------------------- +; +CVDU_FILL: + PUSH DE ; SAVE FILL COUNT + LD HL,(CVDU_POS) ; SET CHARACTER BUFFER POSITION TO FILL + PUSH HL ; SAVE BUF POS + CALL CVDU_FILL1 ; DO THE CHARACTER FILL + POP HL ; RECOVER BUF POS + LD DE,$800 ; INCREMENT FOR ATTRIBUTE FILL + ADD HL,DE ; HL := BUF POS FOR ATTRIBUTE FILL + POP DE ; RECOVER FILL COUNT + LD A,(CVDU_ATTR) ; SET ATTRIBUTE VALUE FOR ATTRIBUTE FILL + JR CVDU_FILL1 ; DO ATTRIBUTE FILL AND RETURN + +CVDU_FILL1: + LD B,A ; SAVE REQUESTED FILL VALUE + + ; CHECK FOR VALID FILL LENGTH + LD A,D ; LOAD D + OR E ; OR WITH E + RET Z ; BAIL OUT IF LENGTH OF ZERO SPECIFIED + + ; POINT TO BUFFER LOCATION TO START FILL + LD C,18 ; UPDATE ADDRESS REGISTER PAIR + CALL CVDU_WRX ; DO IT + + ; SET MODE TO BLOCK WRITE + 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 (WRITES ONE CHARACTER) + LD A,B ; RECOVER FILL VALUE + LD C,31 ; DATA REGISTER + CALL CVDU_WR ; DO IT + DEC DE ; REFLECT ONE CHARACTER WRITTEN + + ; LOOP TO DO BULK WRITE (UP TO 255 BYTES PER LOOP) + EX DE,HL ; NOW USE HL FOR COUNT + LD C,30 ; BYTE COUNT REGISTER +CVDU_FILL2: + LD A,H ; GET HIGH BYTE + OR A ; SET FLAGS + LD A,L ; PRESUME WE WILL WRITE L COUNT (ALL REMAINING) BYTES + JR Z,CVDU_FILL3 ; IF H WAS ZERO, WRITE L BYTES + LD A,$FF ; H WAS > 0, NEED MORE LOOPS, WRITE 255 BYTES +CVDU_FILL3: + CALL CVDU_WR ; DO IT (SOURCE/DEST REGS AUTO INCREMENT) + LD D,0 ; CLEAR D + LD E,A ; SET E TO BYTES WRITTEN + SBC HL,DE ; SUBTRACT FROM HL + RET Z ; IF ZERO, WE ARE DONE + JR CVDU_FILL2 ; OTHERWISE, WRITE SOME MORE +; +;---------------------------------------------------------------------- +; SCROLL ENTIRE SCREEN FORWARD BY ONE LINE (CURSOR POSITION UNCHANGED) +;---------------------------------------------------------------------- ; -; SCROLL THE SCREEN UP ONE LINE -;__________________________________________________________________________________________________ CVDU_SCROLL: - ; SET MODE TO BLOCK COPY - LD A,$80 - LD B,24 - CALL CVDU_WREG + ; SCROLL THE CHARACTER BUFFER + LD A,' ' ; CHAR VALUE TO FILL NEW EXPOSED LINE + LD HL,0 ; SOURCE ADDRESS OF CHARACER BUFFER + CALL CVDU_SCROLL1 ; SCROLL CHARACTER BUFFER + + ; SCROLL THE ATTRIBUTE BUFFER + LD A,(CVDU_ATTR) ; ATTRIBUTE VALUE TO FILL NEW EXPOSED LINE + LD HL,$800 ; SOURCE ADDRESS OF ATTRIBUTE BUFFER + JR CVDU_SCROLL1 ; SCROLL ATTRIBUTE BUFFER - LD HL,0 ; SOURCE - LD C,23 ; ITERATIONS CVDU_SCROLL1: - ; BLOCK COPY DESTINATION - LD B,18 - LD A,H - CALL CVDU_WREG - INC B - LD A,L - CALL CVDU_WREG + PUSH AF ; SAVE FILL VALUE FOR NOW + + ; 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 - LD DE,80 - ADD HL,DE + ; SET INITIAL BLOCK COPY DESTINATION (USING HL PASSED IN) + LD C,18 ; UPDATE ADDRESS (DESTINATION) REGISTER + CALL CVDU_WRX ; DO IT - ; BLOCK COPY SOURCE - LD B,32 - LD A,H - CALL CVDU_WREG - INC B - LD A,L - CALL CVDU_WREG + ; COMPUTE SOURCE (INCREMENT ONE ROW) + LD DE,80 ; SOURCE ADDRESS IS ONE ROW PAST DESTINATION + ADD HL,DE ; ADD IT TO BUF ADDRESS + ; SET INITIAL BLOCK COPY SOURCE + LD C,32 ; BLOCK START ADDRESS REGISTER + CALL CVDU_WRX ; DO IT + + LD B,23 ; ITERATIONS (ROWS - 1) CVDU_SCROLL2: - ; BLOCK COPY COUNT - LD A,80 - LD B,30 - CALL CVDU_WREG + ; SET BLOCK COPY COUNT (WILL EXECUTE COPY) + LD A,80 ; COPY 80 BYTES + LD C,30 ; WORD COUNT REGISTER + CALL CVDU_WR ; DO IT ; LOOP TILL DONE WITH ALL LINES - DEC C - JR NZ,CVDU_SCROLL2 + DJNZ CVDU_SCROLL2 ; REPEAT FOR ALL LINES - ; SET MODE TO BLOCK WRITE - XOR A - LD B,24 - CALL CVDU_WREG + ; 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 - LD A,'=' - LD B,31 - CALL CVDU_WREG + POP AF ; RESTORE THE FILL VALUE PASSED IN + LD C,31 ; DATA REGISTER + CALL CVDU_WR ; DO IT - ; BLOCK COPY COUNT - LD A,80 - 1 - LD B,30 - CALL CVDU_WREG + ; SET BLOCK WRITE COUNT (WILL EXECUTE THE WRITE) + LD A,80 - 1 ; SET WRITE COUNT TO LINE LENGTH - 1 (1 CHAR ALREADY WRITTEN) + LD C,30 ; WORD COUNT REGISTER + CALL CVDU_WR ; DO IT RET -; -;__CVDU_RSCROLL__________________________________________________________________________________ ; -; SCROLL THE SCREEN DOWN ONE LINE -;__________________________________________________________________________________________________ +;---------------------------------------------------------------------- +; REVERSE SCROLL ENTIRE SCREEN BY ONE LINE (CURSOR POSITION UNCHANGED) +;---------------------------------------------------------------------- +; CVDU_RSCROLL: - PUSH AF ; STORE AF - PUSH HL ; STORE HL - PUSH BC ; STORE BC + ; SCROLL THE CHARACTER BUFFER + LD A,'=' ; CHAR VALUE TO FILL NEW EXPOSED LINE + LD HL,80*23 ; SOURCE ADDRESS OF CHARACER BUFFER (LINE 24) + CALL CVDU_RSCROLL1 ; SCROLL CHARACTER BUFFER - LD B, 24 ; GET REGISTER 24 - CALL CVDU_GREG ; - OR 80H ; TURN ON COPY BIT - LD E,A ; PARK IT - - LD HL, (CVDU_DISPLAY_START) ; GET UP START OF DISPLAY - LD BC,0730H ; - ADD HL,BC - LD D,23 ; -CVDU_RSCROLL1: - LD B, 18 ; SET UPDATE(DEST) POS IN VDU - LD A,H ; - CALL CVDU_WREG ; WRITE IT - LD B, 19 ; SET UPDATE(DEST) POS IN VDU - LD A,L ; - CALL CVDU_WREG ; WRITE IT - LD BC,0FFB0H ; - ADD HL,BC ; - LD B, 32 ; SET SOURCE POS IN VDU - LD A,H ; - CALL CVDU_WREG ; WRITE IT - LD B, 33 ; SET SOURCE POS IN VDU - LD A,L ; - CALL CVDU_WREG ; WRITE IT - - LD B, 24 ; SET COPY - LD A,E ; - CALL CVDU_WREG ; WRITE IT - - LD B, 30 ; SET AMOUNT TO COPY - LD A,050H ; - CALL CVDU_WREG ; WRITE IT + ; SCROLL THE ATTRIBUTE BUFFER + LD A,(CVDU_ATTR) ; ATTRIBUTE VALUE TO FILL NEW EXPOSED LINE + LD HL,$800+(80*23) ; SOURCE ADDRESS OF ATTRIBUTE BUFFER (LINE 24) + JR CVDU_RSCROLL1 ; SCROLL ATTRIBUTE BUFFER AND RETURN - DEC D - LD A,D ; - CP 00H ; - JP NZ,CVDU_RSCROLL1 ; LOOP TILL DONE +CVDU_RSCROLL1: + PUSH AF ; SAVE FILL VALUE FOR NOW + + ; SET MODE TO BLOCK COPY + LD C,24 ; BLOCK MODE CONTROL REGISTER + CALL CVDU_RD ; GET CURRENT VALUE + AND $80 ; SET BIT 7 FOR COPY MODE + CALL CVDU_WR ; DO IT - - LD HL, (CVDU_DISPLAY_START) ; GET UP START OF DISPLAY - LD BC,0F50H ; - ADD HL,BC - LD D,23 ; -CVDU_RSCROLL2: - LD B, 18 ; SET UPDATE(DEST) POS IN VDU - LD A,H ; - CALL CVDU_WREG ; WRITE IT - LD B, 19 ; SET UPDATE(DEST) POS IN VDU - LD A,L ; - CALL CVDU_WREG ; WRITE IT - LD BC,0FFB0H ; - ADD HL,BC ; - LD B, 32 ; SET SOURCE POS IN VDU - LD A,H ; - CALL CVDU_WREG ; WRITE IT - LD B, 33 ; SET SOURCE POS IN VDU - LD A,L ; - CALL CVDU_WREG ; WRITE IT - - LD B, 24 ; SET COPY - LD A,E ; - CALL CVDU_WREG ; WRITE IT - - LD B, 30 ; SET AMOUNT TO COPY - LD A,050H ; - CALL CVDU_WREG ; WRITE IT + ; LOOP TO SCROLL EACH LINE WORKING FROM BOTTOM TO TOP + LD B,23 ; ITERATIONS (23 ROWS) +CVDU_RSCROLL2: - DEC D - LD A,D ; - CP 00H ; - JP NZ,CVDU_RSCROLL2 ; LOOP TILL DONE - LD A,0 ; SET CURSOR TO BEGINNING OF FIRST LINE - LD (CVDU_Y),A ; - LD A,(CVDU_X) ; - PUSH AF ; STORE X COORD - LD A,0 ; - LD (CVDU_X),A ; - CALL CVDU_XY ; SET CURSOR POSITION TO BEGINNING OF LINE - POP AF ; RESTORE AF - POP BC ; RESTORE BC - CALL CVDU_ERASE_EOL ; ERASE SCROLLED LINE - LD (CVDU_X),A ; - CALL CVDU_XY ; SET CURSOR POSITION - POP HL ; RESTORE HL - POP AF ; RESTORE AF - RET ; -; -;__CVDU_ERASE_EOL__________________________________________________________________________________ -; -; PERFORM ERASE FROM CURSOR POS TO END OF LINE -; C=DEFAULT COLOR -;__________________________________________________________________________________________________ -CVDU_ERASE_EOL: - PUSH HL - PUSH AF - PUSH BC + ; SET BLOCK COPY DESTINATION (USING HL PASSED IN) + LD C,18 ; UPDATE ADDRESS (DESTINATION) REGISTER + CALL CVDU_WRX ; DO IT - LD A,(CVDU_X) ; GET CURRENT CURSOR X COORD - LD D,A ; STORE IT IN C - LD A,80 ; MOVE CURRENT LINE WIDTH INTO A - SUB D ; GET REMAINING POSITIONS ON CURRENT LINE - LD B,A ; MOVE IT INTO B -CVDU_ERASE_EOL1: - LD A, ' ' ; MOVE SPACE CHARACTER INTO A - CALL CVDU_PUTCHAR ; - DJNZ CVDU_ERASE_EOL1 ; LOOP UNTIL DONE - CALL CVDU_XY ; MOVE CURSOR BACK TO ORIGINAL POSITION - POP BC - POP AF - POP HL - RET -; -;__CVDU_ERASE_EOS__________________________________________________________________________________ -; -; PERFORM ERASE FROM CURSOR POS TO END OF SCREEN -; C= DEFAULT COLOR -;__________________________________________________________________________________________________ -CVDU_ERASE_EOS: - PUSH HL - PUSH AF - PUSH BC + ; COMPUTE SOURCE (DECREMENT ONE ROW) + LD DE,80 ; SOURCE ADDRESS IS ONE ROW PAST DESTINATION + SBC HL,DE ; SUBTRACT IT FROM BUF ADDRESS - LD HL, (CVDU_DISPLAYPOS) ; GET CURRENT DISPLAY ADDRESS - LD B, 18 ; SET UPDATE CSR POS IN VDU - LD A,H ; - CALL CVDU_WREG ; WRITE IT - LD B, 19 ; SET UPDATE CSR POS IN VDU - LD A,L ; - CALL CVDU_WREG ; WRITE IT - LD DE,0820H ; SET SCREEN SIZE INTO HL -CVDU_ERASE_EOS1: - LD A, ' ' ; MOVE SPACE CHARACTER INTO A - LD B,31 ; - CALL CVDU_WREG ; WRITE IT TO SCREEN, VDU WILL AUTO INC TO NEXT ADDRESS - DEC DE ; DEC COUNTER - LD A,D ; IS COUNTER 0 YET? - OR E ; - JP NZ,CVDU_ERASE_EOS1 ; NO, LOOP - LD DE,0820H ; SET SCREEN SIZE INTO HL -CVDU_ERASE_EOS2: - LD A, (CVDU_COLOR) ; MOVE COLOR INTO A - LD B,31 ; - CALL CVDU_WREG ; WRITE IT TO SCREEN, VDU WILL AUTO INC TO NEXT ADDRESS - DEC DE ; DEC COUNTER - LD A,D ; IS COUNTER 0 YET? - OR E ; - JP NZ,CVDU_ERASE_EOS2 ; NO, LOOP - - CALL CVDU_XY ; YES, MOVE CURSOR BACK TO ORIGINAL POSITION - POP BC - POP AF - POP HL - RET -; -;__________________________________________________________________________________________________ -CVDU_PUTCHAR: -; PLACE CHARACTER ON SCREEN, ADVANCE CURSOR -; A: CHARACTER TO OUTPUT -; - PUSH AF - LD HL,(CVDU_DISPLAY_START) - LD DE,(CVDU_DISPLAYPOS) - ADD HL,DE - INC DE - LD (CVDU_DISPLAYPOS),DE - LD B,18 - LD A,H - CALL CVDU_WREG - INC B - LD A,L - CALL CVDU_WREG - POP AF - LD B,31 - CALL CVDU_WREG - PUSH HL - INC HL - LD B,14 - LD A,H - CALL CVDU_WREG - INC B - LD A,L - CALL CVDU_WREG - POP HL - LD DE,$800 - ADD HL,DE - LD B,18 - LD A,H - CALL CVDU_WREG - INC B - LD A,L - CALL CVDU_WREG - LD A,(CVDU_COLOR) - LD B,31 - CALL CVDU_WREG - RET -;__________________________________________________________________________________________________ -CVDU_FILL: -; -; FILL AREA IN BUFFER WITH SPECIFIED CHARACTER AND CURRENT COLOR/ATTRIBUTE -; STARTING WITH THE CURRENT FRAME BUFFER POSITION -; A: FILL CHARACTER -; DE: NUMBER OF CHARACTERS TO FILL -; - PUSH AF - PUSH DE - LD HL,(CVDU_DISPLAY_START) - LD DE,(CVDU_DISPLAYPOS) - ADD HL,DE - LD B,18 - LD A,H - CALL CVDU_WREG - INC B - LD A,L - CALL CVDU_WREG - POP DE - POP AF - PUSH DE - LD C,A -CVDU_FILL1: - LD A,C - LD B,31 - CALL CVDU_WREG - DEC DE - LD A,D - OR E - JR NZ,CVDU_FILL1 + ; SET BLOCK COPY SOURCE + LD C,32 ; BLOCK START ADDRESS REGISTER + CALL CVDU_WRX ; DO IT - LD DE,$800 - ADD HL,DE - POP DE - LD B,18 - LD A,H - CALL CVDU_WREG - INC B - LD A,L - CALL CVDU_WREG - LD A,(CVDU_COLOR) - LD C,A -CVDU_FILL2: - LD A,C - LD B,31 - CALL CVDU_WREG - DEC DE - LD A,D - OR E - JR NZ,CVDU_FILL2 + ; SET BLOCK COPY COUNT (WILL EXECUTE COPY) + LD A,80 ; COPY 80 BYTES + LD C,30 ; WORD COUNT REGISTER + CALL CVDU_WR ; DO IT + DJNZ CVDU_RSCROLL2 ; REPEAT FOR ALL LINES + + ; 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 + 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 C,30 ; WORD COUNT REGISTER + CALL CVDU_WR ; DO IT + RET ; ;================================================================================================== -; VDU DRIVER - DATA +; CVDU DRIVER - DATA ;================================================================================================== ; -CVDU_X .DB 0 ; CURSOR X -CVDU_Y .DB 0 ; CURSOR Y -CVDU_COLOR .DB 0 ; CURRENT COLOR -CVDU_DISPLAYPOS .DW 0 ; CURRENT DISPLAY POSITION -CVDU_DISPLAY_START .DW 0 ; CURRENT DISPLAY POSITION +CVDU_ATTR .DB 0 ; CURRENT COLOR +CVDU_POS .DW 0 ; CURRENT DISPLAY POSITION +; +; ATTRIBUTE ENCODING: +; BIT 7: ALTERNATE CHARACTER SET +; BIT 6: REVERSE VIDEO +; BIT 5: UNDERLINE +; BIT 4: BLINK +; BIT 3: RED +; BIT 2: GREEN +; BIT 1: BLUE +; BIT 0: INTENSITY ; ;================================================================================================== -; VDU DRIVER - 8563 REGISTER INITIALIZATION +; CVDU DRIVER - 8563 REGISTER INITIALIZATION ;================================================================================================== ; +; Reg Hex Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Description +; 0 $00 HT7 HT6 HT5 HT4 HT3 HT2 HT1 HT0 Horizontal Total +; 1 $01 HD7 HD6 HD5 HD4 HD3 HD2 HD1 HD0 Horizontal Displayed +; 2 $02 HP7 HP6 HP5 HP4 HP3 HP2 HP1 HP0 Horizontal Sync Position +; 3 $03 VW3 VW2 VW1 VW0 HW3 HW2 HW1 HW0 Vertical/Horizontal Sync Width +; 4 $04 VT7 VT6 VT5 VT4 VT3 VT2 VT1 VT0 Vertical Total +; 5 $05 -- -- -- VA4 VA3 VA2 VA1 VA0 Vertical Adjust +; 6 $06 VD7 VD6 VD5 VD4 VD3 VD2 VD1 VD0 Vertical Displayed +; 7 $07 VP7 VP6 VP5 VP4 VP3 VP2 VP1 VP0 Vertical Sync Position +; 8 $08 -- -- -- -- -- -- IM1 IM0 Interlace Mode +; 9 $09 -- -- -- -- CTV4 CTV3 CTV2 CTV1 Character Total Vertical +; 10 $0A -- CM1 CM0 CS4 CS3 CS2 CS1 CS0 Cursor Mode, Start Scan +; 11 $0B -- -- -- CE4 CE3 CE2 CE1 CE0 Cursor End Scan Line +; 12 $0C DS15 DS14 DS13 DS12 DS11 DS10 DS9 DS8 Display Start Address High Byte +; 13 $0D DS7 DS6 DS5 DS4 DS3 DS2 DS1 DS0 Display Start Address Low Byte +; 14 $0E CP15 CP14 CP13 CP12 CP11 CP10 CP9 CP8 Cursor Position High Byte +; 15 $0F CP7 CP6 CP5 CP4 CP3 CP2 CP1 CP0 Cursor Position Low Byte +; 16 $10 LPV7 LPV6 LPV5 LPV4 LPV3 LPV2 LPV1 LPV0 Light Pen Vertical Position +; 17 $11 LPH7 LPH6 LPH5 LPH4 LPH3 LPH2 LPH1 LPH0 Light Pen Horizontal Position +; 18 $12 UA15 UA14 UA13 UA12 UA11 UA10 UA9 UA8 Update Address High Byte +; 19 $13 UA7 UA6 UA5 UA4 UA3 UA2 UA1 UA0 Update Address Low Byte +; 20 $14 AA15 AA14 AA13 AA12 AA11 AA10 AA9 AA8 Attribute Start Address High Byte +; 21 $15 AA7 AA6 AA5 AA4 AA3 AA2 AA1 AA0 Attribute Start Address Low Byte +; 22 $16 CTH3 CTH2 CTH1 CTH0 CDH3 CDH2 CDH1 CDH0 Character Total Horizontal, Character Display Horizontal +; 23 $17 -- -- -- CDV4 CDV3 CDV2 CDV1 CDV0 Character Display Vertical +; 24 $18 COPY RVS CBRATE VSS4 VSS3 VSS2 VSS1 VSS0 Vertical Smooth Scrolling +; 25 $19 TEXT ATR SEMI DBL HSS3 HSS2 HSS1 HSS0 Horizontal Smooth Scrolling +; 26 $1A FG3 FG2 FG1 FG0 BG3 BG2 BG1 BG0 Foreground/Background color +; 27 $1B AI7 AI6 AI5 AI4 AI3 AI2 AI1 AI0 Address Increment per Row +; 28 $1C CB15 CB14 CB13 RAM -- -- -- -- Character Base Address +; 29 $1D -- -- -- UL4 UL3 UL2 UL1 UL0 Underline Scan Line +; 30 $1E WC7 WC6 WC5 WC4 WC3 WC2 WC1 WC0 Word Count +; 31 $1F DA7 DA6 DA5 DA4 DA3 DA2 DA1 DA0 Data Register +; 32 $20 BA15 BA14 BA13 BA12 BA11 BA10 BA9 BA8 Block Start Address High Byte +; 33 $21 BA7 BA6 BA5 BA4 BA3 BA2 BA1 BA0 Block Start Address Low Byte +; 34 $22 DEB7 DEB6 DEB5 DEB4 DEB3 DEB2 DEB1 DEB0 Display Enable Begin +; 35 $23 DEE7 DEE6 DEE5 DEE4 DEE3 DEE2 DEE1 DEE0 Display Enable End +; 36 $24 -- -- -- -- DRR3 DRR2 DRR1 DRR0 DRAM Refresh Rate +; ; EGA 720X368 9-BIT CHARACTERS ; - requires 16.257Mhz oscillator frequency ; CVDU_INIT8563: .DB 97 ; 0: hor. total - 1 .DB 80 ; 1: hor. displayed - .DB 85 ; 2: hor. sync position + .DB 90 ; 2: hor. sync position 85 .DB $14 ; 3: vert/hor sync width or 0x4F -- MDA .DB 26 ; 4: vert total .DB 2 ; 5: vert total adjust diff --git a/branches/dwg/Source/kbd.asm b/branches/dwg/Source/kbd.asm index 3fbb1532..74086ad2 100644 --- a/branches/dwg/Source/kbd.asm +++ b/branches/dwg/Source/kbd.asm @@ -413,6 +413,13 @@ KBD_DEC1: ; PROCESS NEXT SCANCODE LD (KBD_SCANCODE),A ; SAVE SCANCODE KBD_DEC2: ; DETECT AND HANDLE SPECIAL KEYCODES +; +; KEYBOARD INSERTION DETECTION HAS BEEN REMOVED BELOW BECAUSE THE SCAN CODE +; OF $AA IS AMBIGUOUS WHEN SCAN SET 2 IS IN USE. $AA COULD MEAN EITHER A LEFT +; SHIFT KEY BREAK EVENT OR A KEYBOARD INSERTION EVENT. OBVIOUSLY, A SHIFT BREAK +; EVENT CANNOT BE ALLOWED TO TRIGGER A KEYBOARD RESET, SO WE CANNOT INTERPRET +; $AA AS A KEYBOARD INSERTION. UNFORTUNATE, BUT IS SEE NO ALTERNATIVES. +; ; LD A,(KBD_SCANCODE) ; GET THE CURRENT SCANCODE ; CP $AA ; KEYBOARD INSERTION? ; JR NZ,KBD_DEC3 ; NOPE, BYPASS diff --git a/branches/dwg/Source/util.asm b/branches/dwg/Source/util.asm index 11e98c24..18f4d608 100644 --- a/branches/dwg/Source/util.asm +++ b/branches/dwg/Source/util.asm @@ -392,13 +392,13 @@ MULT8_NOADD: ; #IF (DSKYENABLE) ; -; ____C0______C1______C2______C3__ -;B5 | 20 D 60 E A0 F E0 BO -;B4 | 10 A 50 B 90 C D0 GO -;B3 | 08 7 48 8 88 9 C8 EX -;B2 | 04 4 44 5 84 6 C4 DE -;B1 | 02 1 42 2 82 3 C2 EN -;B0 | 01 FW 41 0 81 BK C1 CL +; _____C0______C1______C2______C3__ +;B5 | $20 D $60 E $A0 F $E0 BO +;B4 | $10 A $50 B $90 C $D0 GO +;B3 | $08 7 $48 8 $88 9 $C8 EX +;B2 | $04 4 $44 5 $84 6 $C4 DE +;B1 | $02 1 $42 2 $82 3 $C2 EN +;B0 | $01 FW $41 0 $81 BK $C1 CL ; KY_0 .EQU 000H KY_1 .EQU 001H