From f510da9d4662ed6e27ac37bb661edc382f5c1ebb Mon Sep 17 00:00:00 2001 From: wayne Date: Fri, 23 Nov 2012 14:05:57 +0000 Subject: [PATCH] Reintegrate dwg -> trunk --- Source/n8v.asm | 826 ++++++++++++++++++++++++++++--------------------- 1 file changed, 471 insertions(+), 355 deletions(-) diff --git a/Source/n8v.asm b/Source/n8v.asm index 857fc07d..0e483cca 100644 --- a/Source/n8v.asm +++ b/Source/n8v.asm @@ -1,15 +1,21 @@ +; ../RomWBW/Source/n8v.asm 11/22/2012 dwg - best so far +; ../RomWBW/Source/n8v.asm 11/19/2012 dwg - add snippets into video scheme ; ../RomWBW/Source/n8v.asm 11/16/2012 dwg - N8V_VDAQRY now working ; ../RomWBW/Source/n8v.asm 11/15/2012 dwg - vdaini and vdaqry retcodes ok ; ../RomWBW/Source/n8v.asm 10/28/2012 dwg - add n8v_modes ; ../RomWBW/Source/n8v.asm 10/27/2012 dwg - begin enhancement +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; N8 VIDEO DRIVER FOR ROMWBW ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Video Display Processor I/O Addresses for the TMS9918 ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +BASE: .EQU 128 +CMDP: .EQU BASE+25 +DATAP: .EQU BASE+24 -;__N8VDRIVER_______________________________________________________________________________________ -; -; N8 VIDEO DRIVER FOR ROMWBW -; -;__________________________________________________________________________________________________ -; ;__________________________________________________________________________________________________ ; DATA CONSTANTS ;__________________________________________________________________________________________________ @@ -18,33 +24,262 @@ ; BOARD INITIALIZATION ;_________________________________________________________________________ -; -; This routine is called from bnk1.asm to init the TMS9918 -; If HL is non-zero, it specifies the character bitmaps to load +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; This routine is called from bnk1.asm to init the TMS9918 ; +; If HL is non-zero, it specifies the character bitmaps to load ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; N8V_VDAINI: - LD A,C LD (VDP_DEVUNIT),A LD A,E LD (VDP_MODE),A PUSH HL - CALL VDP_CLR16K ; clear first 16K of TMS9918 video ram to zeroes - CALL VDP_SETREGS ; set TMS9918 into Text Mode - CALL VDP_MODES ; set TMS9918 into 40-column mode - CALL VDP_PNT ; set TMS9918 Pattern Name Table Pointer - CALL VDP_PGT ; set TMS9918 Pattern Generator Table Pointer - CALL VDP_COLORS ; set TMS9918 foreground(white) background(black) + ; Fall through... + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; clear first 16K of TMS9918 video ram to zeroes ; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + LD C,CMDP + LD A,$00 + OUT (C),A ; out(CMDP,0); + CALL RECOVER + LD A,64 + OUT (C),A ; out(CMDP,64); + CALL RECOVER + ; + LD C,DATAP + LD HL,16384 +CLR16LOOP: + LD A,0 + OUT (C),A + DEC HL + LD A,H + OR L + JR NZ,CLR16LOOP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; Set TMS9918 into Text Mode ; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + LD C,CMDP + LD A,0 + OUT (C),A ; out(CMDP,0); + CALL RECOVER + LD A,128 + OUT (C),A ; out(CMDP,128); + CALL RECOVER + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; Set TMS9918 into 40-column mode ; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + LD C,CMDP + LD A,80 + OUT (C),A ; out(CMDP,80); + CALL RECOVER + LD A,129 + OUT (C),A ; out(CMDP,129); + CALL RECOVER + ; + ;; text mode is 24x40 + LD A,0 + LD (VDP_MODE),a + LD a,40 + LD (VDP_COLS),a + LD a,24 + LD (VDP_ROWS),A + +;; CALL VDP_PNT ; set TMS9918 Pattern Name Table Pointer +;VDP_PNT: + LD C,CMDP + LD A,0 + OUT (C),A ; out(CMDP,0); + CALL RECOVER + LD A,130 + OUT (C),A ; out(CMDP,130); + CALL RECOVER + +;; CALL VDP_PGT ; set TMS9918 Pattern Generator Table Pointer +;VDP_PGT: + LD C,CMDP + LD A,1 + OUT (C),A ; out(CMDP,1); + CALL RECOVER + LD A,132 + OUT (C),A ; out(CMDP,132); + CALL RECOVER + +;; CALL VDP_COLORS ; set TMS9918 foreground(white) background(black) +;VDP_COLORS: + LD C,CMDP + LD A,(VDP_ATTR) +; LD A,240 + OUT (C),A ; out(CMDP,240); 240 is 0xF0 - 1111 0000 LSB=background MSB=foreground + CALL RECOVER + LD A,135 + OUT (C),A ; out(CMDP,135); + CALL RECOVER + + POP HL LD A,L OR H JP Z,N8V_NOLOAD - CALL VDP_LOAD2 ; set TMS9918 character bitmaps +;; CALL VDP_LOAD2 ; set TMS9918 character bitmaps +;VDP_LOAD2: + LD C,CMDP + LD A,0 + OUT (C),A ; out(CMDP,0); + CALL RECOVER + LD A,72 + OUT (C),A ; out(CMDP,72); + CALL RECOVER + LD DE,256 + LD C,DATAP +VDP_LOAD2LOOP: + LD A,(HL) + LD (BYTE8),A + INC HL + LD A,(HL) + LD (BYTE7),A + INC HL + LD A,(HL) + LD (BYTE6),A + INC HL + LD A,(HL) + LD (BYTE5),A + INC HL + LD A,(HL) + LD (BYTE4),A + INC HL + LD A,(HL) + LD (BYTE3),A + INC HL + LD A,(HL) + LD (BYTE2),A + INC HL + LD A,(HL) + INC HL + OUT (C),A + CALL RECOVER + LD A,(BYTE2) + OUT (C),A + CALL RECOVER + LD A,(BYTE3) + OUT (C),A + CALL RECOVER + LD A,(BYTE4) + OUT (C),A + CALL RECOVER + LD A,(BYTE5) + OUT (C),A + CALL RECOVER + LD A,(BYTE6) + OUT (C),A + CALL RECOVER + LD A,(BYTE7) + OUT (C),A + CALL RECOVER + LD A,(BYTE8) + OUT (C),A + CALL RECOVER + DEC DE + LD A,D + OR E + JR NZ,VDP_LOAD2LOOP N8V_NOLOAD: - CALL VDP_SINE ; display init message on composite video +; fall through... + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Display init message on composite video ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + ; Output "N8-2312 TMS9918 Text Mode Init Done!" + LD HL,0 + CALL VDP_WRVRAM + LD HL,VDP_HELLO + LD DE,39 + LD C,DATAP +HELLO_LOOP: + LD A,(HL) + OUT (C),A + INC HL + DEC DE + LD A,D + OR E + JR NZ,HELLO_LOOP + ; + ; N8VEM HBIOS v2.2 B3 + LD HL,40+40+40+40+3 + CALL VDP_WRVRAM + LD HL,STR_BANNER + LD C,DATAP + LD DE,20 +BAN_LOOP: + LD A,(HL) + CP '(' + JP Z,BAN_DONE + OUT (C),A + INC HL + DEC DE + LD A,D + OR E + JR NZ,BAN_LOOP +BAN_DONE: + ; + ; (rOMwbw-DOUG-121113t0113) + LD HL,40+40+40+40+40+3 + CALL VDP_WRVRAM + ; + LD HL,STR_BANNER + 20 + LD C,DATAP + ; + LD DE,27 +BAN_LOOP2: + LD A,(HL) + CP ' ' + JP Z,BAN_DONE2 + OUT (C),A + INC HL + DEC DE + LD A,D + OR E + JR NZ,BAN_LOOP2 + LD A,'|' + OUT (C),A + CALL RECOVER +BAN_DONE2: + ; + ; n8 z180 sbc, floppy (autosize), ppide.. + PUSH HL + LD HL,40+40+40+40+40+40+3 + CALL VDP_WRVRAM + POP HL + ; + LD C,DATAP + LD DE,60 +BAN_LOOP3: + LD A,(HL) + CP '$' + JP Z,BAN_DONE3 + OUT (C),A + INC HL + DEC DE + LD A,D + OR E + JP NZ,BAN_LOOP3 +BAN_DONE3: +; fall through... + CALL PPK_INIT + ; fall through... + XOR A RET +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; This is the end of the init routine ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + ;__________________________________________________________________________________________________ ; CHARACTER I/O (CIO) DISPATCHER ;__________________________________________________________________________________________________ @@ -104,24 +339,23 @@ N8V_DISPVDA: JP Z,PPK_READ CALL PANIC - - - +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Video Display Processor Query ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; N8V_VDAQRY: - LD A,H OR L JP Z,N8V_QDONE - + ; ; read bitmaps and - LD C,CMDP - LD A,0 - OUT (C),A ; out(CMDP,0); + LD C,CMDP + LD A,0 + OUT (C),A ; out(CMDP,0); CALL RECOVER - LD A,72 - OUT (C),A ; out(CMDP,72); + LD A,72 + OUT (C),A ; out(CMDP,72); CALL RECOVER - + ; LD DE,256 LD C,DATAP IN A,(C) ; read status @@ -130,58 +364,58 @@ VDP_QLOOP: IN A,(C) CALL RECOVER LD (BYTE8),A - + ; IN A,(C) CALL RECOVER LD (BYTE7),A - + ; IN A,(C) CALL RECOVER LD (BYTE6),A - + ; IN A,(C) CALL RECOVER LD (BYTE5),A - + ; IN A,(C) CALL RECOVER LD (BYTE4),A - + ; IN A,(C) CALL RECOVER LD (BYTE3),A - + ; IN A,(C) CALL RECOVER LD (BYTE2),A - + ; IN A,(C) CALL RECOVER ; LD (BYTE1),A - + ; LD (HL),A INC HL - + ; LD A,(BYTE2) LD (HL),A INC HL - + ; LD A,(BYTE3) LD (HL),A INC HL - + ; LD A,(BYTE4) LD (HL),A INC HL - + ; LD A,(BYTE5) LD (HL),A INC HL - + ; LD A,(BYTE6) LD (HL),A INC HL - + ; LD A,(BYTE7) LD (HL),A INC HL @@ -204,325 +438,207 @@ N8V_QDONE: LD A,0 ; return SUCCESS RET - + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Video Display Processor Reset ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; N8V_VDARES: LD HL,CHARSET JP N8V_VDAINI - + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Video Display Processor Set Cursor Style ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; N8V_VDASCS: CALL PANIC - + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Video Display Processor Set Cursor Position ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; N8V_VDASCP: + LD A,E + LD (VDP_COL),A ; keep private copy of column + LD A,C + LD (VDP_DEVUNIT),A ; keep private copy of dev/unit + LD A,D + LD (VDP_ROW),A ; keep private copy of row XOR A RET - + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Video Display Processor Set Character Attributes ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; N8V_VDASAT: CALL PANIC - + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Video Display Processor Set Color Color ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; N8V_VDASCO: CALL PANIC - + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Video Display Processor Write Character ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; N8V_VDAWRC: - XOR A - RET + PUSH DE + + LD hl,row_offs ; hl -> row offset table + LD A,(VDP_ROW) ; pick up cursor row + LD E,A ; place in LO byte of DE + LD d,0 ; make 16 bits + add hl,DE ; + add hl,DE ; hl -> word in offset table for desired row + LD e,(hl) ; pick up the LO byte of the row ptr + INC HL + ld d,(hl) ; pick up the HO byte of the ROW ptr + EX DE,HL ; hl -> offset of first column in row + LD A,(VDP_COL) ; pick up the current column number + LD E,A ; use as LO byte of DE + LD D,0 ; make 16 bits + ADD HL,DE ; hl = offset in name table of row and column + call VDP_WRVRAM ; set vram write ptr to proper byte in name table + + POP DE ; restore the output byte into E + LD A,E ; move into A for output + LD C,DATAP ; I/O address for subsequent VRAM write + OUT (C),a ; prime the auto incrementer + OUT (C),a ; output the data byte into the name table + LD A,(VDP_COL) + INC A + LD (VDP_COL),A + CP 40 + JR NZ,N8V_VDAWRC2 + LD A,0 + LD (VDP_COL),A + LD A,(VDP_ROW) + INC A + LD (VDP_ROW),A + CP 24 + JR NZ, N8V_VDAWRC2 + ; need to scroll up one line + LD A,1 ; SCROLL ONE LINE + LD E,A ; NEEDS TO BE IN A + CALL N8V_VDASCR ; USE SCROLLING FUNCTION +N8V_VDAWRC2: + + XOR A ; set SUCCESS return code + RET ; return from HBIOS call + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Video Display Processor Fill ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; N8V_VDAFIL: XOR A RET - -N8V_VDASCR: - XOR A - RET - -;------------------------------------------------- -BASE: .EQU 128 -CMDP: .EQU BASE+25 -DATAP: .EQU BASE+24 - -VDP_CLR16K: - LD C,CMDP - LD A,$00 - OUT (C),A ; out(CMDP,0); - LD A,64 - OUT (C),A ; out(CMDP,64); +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Video Display Processor Scroll ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +N8V_VDASCR: + ; E = scroll distance (# lines) + LD HL,0 + CALL VDP_WRVRAM LD C,DATAP - LD HL,16384 -CLR16LOOP: - LD A,0 - OUT (C),A - DEC HL - LD A,H - OR L - JR NZ,CLR16LOOP - - RET - -;------------------------------------------------- - -VDP_SETREGS: - LD C,CMDP - LD A,0 - OUT (C),A ; out(CMDP,0); - NOP - LD A,128 - OUT (C),A ; out(CMDP,128); - RET - -;------------------------------------------------- - -; The only TMS9918 mode available right now is "text mode". - -VDP_MODES: - LD C,CMDP - LD A,80 - OUT (C),A ; out(CMDP,80); - CALL RECOVER - LD A,129 - OUT (C),A ; out(CMDP,129); - CALL RECOVER - - ;; text mode is 24x40 - LD A,0 - LD (VDP_MODE),a - LD a,40 - LD (VDP_COLS),a - LD a,24 - LD (VDP_ROWS),A - - RET - -;------------------------------------------------- - -VDP_PNT: - LD C,CMDP - LD A,0 - OUT (C),A ; out(CMDP,0); - NOP - LD A,130 - OUT (C),A ; out(CMDP,130); - RET - -;------------------------------------------------- - -VDP_PGT: - LD C,CMDP - LD A,1 - OUT (C),A ; out(CMDP,1); - NOP - LD A,132 - OUT (C),A ; out(CMDP,132); - RET - -;------------------------------------------------- - -VDP_COLORS: - LD C,CMDP - LD A,(VDP_ATTR) -; LD A,240 - OUT (C),A ; out(CMDP,240); 240 is 0xF0 - 1111 0000 LSB=background MSB=foreground - NOP - LD A,135 - OUT (C),A ; out(CMDP,135); - RET - -;------------------------------------------------- - -;------------------------------------------------- - -VDP_LOAD2: - - LD C,CMDP - LD A,0 - - OUT (C),A ; out(CMDP,0); - CALL RECOVER - LD A,72 - OUT (C),A ; out(CMDP,72); - CALL RECOVER - -; LD A,H -; OR L -; JP NZ,NOLOAD2 -; LD HL,CHARSET -;NOLOAD2: - - LD DE,256 - LD C,DATAP -VDP_LOAD2LOOP: - - LD A,(HL) - LD (BYTE8),A - INC HL - - LD A,(HL) - LD (BYTE7),A - INC HL - - LD A,(HL) - LD (BYTE6),A - INC HL - - LD A,(HL) - LD (BYTE5),A - INC HL - - LD A,(HL) - LD (BYTE4),A - INC HL - - LD A,(HL) - LD (BYTE3),A - INC HL - - LD A,(HL) - LD (BYTE2),A - INC HL - - LD A,(HL) - INC HL - - OUT (C),A - CALL RECOVER - LD A,(BYTE2) - OUT (C),A - CALL RECOVER - LD A,(BYTE3) - OUT (C),A - CALL RECOVER - LD A,(BYTE4) - OUT (C),A - CALL RECOVER - LD A,(BYTE5) - OUT (C),A - CALL RECOVER - LD A,(BYTE6) - OUT (C),A - CALL RECOVER - LD A,(BYTE7) - OUT (C),A - CALL RECOVER - LD A,(BYTE8) - OUT (C),A - CALL RECOVER + IN A,(C) ; prime autoincrement + LD HL,SCRLBUF + LD DE,24*40 +N8V_VDASCR2: + IN A,(C) + LD (HL),A + INC HL + DEC DE + LD A,D + OR E + JR NZ,N8V_VDASCR2 + + ; COPY UP 23 LINES + LD HL,0 + CALL VDP_WRVRAM + LD HL,SCRLBUF+40 + LD DE,(24*40)-40 + LD C,DATAP + OUT (C),A +N8V_VDASCR3: + LD A,(HL) + OUT (C),A + INC HL + DEC DE + LD A,D + OR E + JR NZ,N8V_VDASCR3 + + ; BLANK LAST 40 + LD DE,40 +N8V_VDASCR4: + LD A,' ' + OUT (C),A + DEC DE + LD A,D + OR E + JR NZ,N8V_VDASCR4 + + XOR A + RET - DEC DE - LD A,D - OR E - JR NZ,VDP_LOAD2LOOP - RET +SCRLBUF .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;------------------------------------------------- - - - - -VDP_SINE: - - ; N8-2312 TMS9918 Text Mode Init Done! - LD HL,0 - CALL VDP_WRVRAM - LD HL,VDP_HELLO - LD DE,39 - LD C,DATAP -HELLO_LOOP: - LD A,(HL) - OUT (C),A - INC HL - DEC DE - LD A,D - OR E - JR NZ,HELLO_LOOP - - ; N8VEM HBIOS v2.2 B3 - LD HL,40+40+40+40+3 - CALL VDP_WRVRAM - LD HL,STR_BANNER - LD C,DATAP - LD DE,20 -BAN_LOOP: - LD A,(HL) - CP '(' - JP Z,BAN_DONE - OUT (C),A - INC HL - DEC DE - LD A,D - OR E - JR NZ,BAN_LOOP -BAN_DONE: - - - ; (rOMwbw-DOUG-121113t0113) - LD HL,40+40+40+40+40+3 - CALL VDP_WRVRAM - ; - LD HL,STR_BANNER + 20 - LD C,DATAP - ; - LD DE,27 -BAN_LOOP2: - LD A,(HL) - CP ' ' - JP Z,BAN_DONE2 - OUT (C),A - INC HL - DEC DE - LD A,D - OR E - JR NZ,BAN_LOOP2 - LD A,'|' - OUT (C),A - CALL RECOVER -BAN_DONE2: - - ; n8 z180 sbc, floppy (autosize), ppide.. - PUSH HL - LD HL,40+40+40+40+40+40+3 - CALL VDP_WRVRAM - POP HL - - LD C,DATAP - LD DE,60 -BAN_LOOP3: - LD A,(HL) - CP '$' - JP Z,BAN_DONE3 - OUT (C),A - INC HL - DEC DE - LD A,D - OR E - JP NZ,BAN_LOOP3 -BAN_DONE3: - - RET - - -N8V_FILL: - ; out(CMDP,0); - ; out(CMDP,64); - ; d=0; - ; for(c=0;c<(40*24);c++) { - ; out(DATAP,d); - ; d++; - ; if(128 == d) d=0; - ; } - RET - +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Video Display Processor Write the VRAM address registers ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; VDP_WRVRAM: ; HL -> points to ram location - - ; vdp_wrvram(o) - ; { - ; byte1 = o & 255; - ; byte2 = (o >> 8) | 0x40; - ; out(CMDP,byte1); - ; out(CMDP,byte2); - ; } - LD C,CMDP OUT (C),L CALL RECOVER @@ -530,31 +646,21 @@ VDP_WRVRAM: CALL RECOVER RET - -N8V_DISPLAY: - ; vdp_display(line,column,string) - ; { - ; vdp_wrvram(GUTTER+(line*40)+column); - ; for(index=0;index