|
|
|
@ -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) <BLANK> |
|
|
|
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,15 +339,14 @@ 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 |
|
|
|
@ -121,7 +355,7 @@ N8V_VDAQRY: |
|
|
|
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 |
|
|
|
@ -205,324 +439,206 @@ 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 |
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
|
|
; Video Display Processor Scroll ; |
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
|
|
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); |
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
DEC DE |
|
|
|
LD A,D |
|
|
|
OR E |
|
|
|
JR NZ,VDP_LOAD2LOOP |
|
|
|
RET |
|
|
|
; E = scroll distance (# lines) |
|
|
|
|
|
|
|
;------------------------------------------------- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
|
|
|
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,HELLO_LOOP |
|
|
|
JR NZ,N8V_VDASCR2 |
|
|
|
|
|
|
|
; N8VEM HBIOS v2.2 B3 |
|
|
|
LD HL,40+40+40+40+3 |
|
|
|
; COPY UP 23 LINES |
|
|
|
LD HL,0 |
|
|
|
CALL VDP_WRVRAM |
|
|
|
LD HL,STR_BANNER |
|
|
|
LD HL,SCRLBUF+40 |
|
|
|
LD DE,(24*40)-40 |
|
|
|
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) <BLANK> |
|
|
|
LD HL,40+40+40+40+40+3 |
|
|
|
CALL VDP_WRVRAM |
|
|
|
; |
|
|
|
LD HL,STR_BANNER + 20 |
|
|
|
LD C,DATAP |
|
|
|
; |
|
|
|
LD DE,27 |
|
|
|
BAN_LOOP2: |
|
|
|
N8V_VDASCR3: |
|
|
|
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: |
|
|
|
JR NZ,N8V_VDASCR3 |
|
|
|
|
|
|
|
; 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 |
|
|
|
; BLANK LAST 40 |
|
|
|
LD DE,40 |
|
|
|
N8V_VDASCR4: |
|
|
|
LD A,' ' |
|
|
|
OUT (C),A |
|
|
|
INC HL |
|
|
|
DEC DE |
|
|
|
LD A,D |
|
|
|
OR E |
|
|
|
JP NZ,BAN_LOOP3 |
|
|
|
BAN_DONE3: |
|
|
|
JR NZ,N8V_VDASCR4 |
|
|
|
|
|
|
|
XOR A |
|
|
|
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 |
|
|
|
|
|
|
|
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,17 +646,9 @@ VDP_WRVRAM: |
|
|
|
CALL RECOVER |
|
|
|
RET |
|
|
|
|
|
|
|
|
|
|
|
N8V_DISPLAY: |
|
|
|
; vdp_display(line,column,string) |
|
|
|
; { |
|
|
|
; vdp_wrvram(GUTTER+(line*40)+column); |
|
|
|
; for(index=0;index<strlen(string);index++) { |
|
|
|
; out(DATAP,string[index]); |
|
|
|
; } |
|
|
|
; } |
|
|
|
RET |
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
|
|
; Recovery-time delay routine - Conservatively long delay ; |
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
|
|
RECOVER: |
|
|
|
PUSH BC |
|
|
|
PUSH DE |
|
|
|
@ -550,11 +658,9 @@ RECOVER: |
|
|
|
POP BC |
|
|
|
RET |
|
|
|
|
|
|
|
; |
|
|
|
;__________________________________________________________________________________________________ |
|
|
|
; LOCAL DRIVER DATA |
|
|
|
;__________________________________________________________________________________________________ |
|
|
|
; |
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
|
|
; Video Display Processor Local Driver Data ; |
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
|
|
|
|
|
|
VDP_DEVUNIT .DB 0 |
|
|
|
VDP_ROW .DB 0 ; row number 0-23 |
|
|
|
@ -577,3 +683,13 @@ BYTE8 .DB 0 |
|
|
|
|
|
|
|
CHARSET: |
|
|
|
#INCLUDE "n8chars.inc" |
|
|
|
|
|
|
|
row_offs .dw 40* 0,40* 1,40* 2,40* 3,40* 4,40* 5,40* 6,40* 7 |
|
|
|
.dw 40* 8,40* 9,40*10,40*11,40*12,40*13,40*14,40*15 |
|
|
|
.dw 40*16,40*17,40*18,40*19,40*20,40*21,40*22,40*23 |
|
|
|
; |
|
|
|
|
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;; |
|
|
|
; eof - n8v.asm ; |
|
|
|
;;;;;;;;;;;;;;;;; |
|
|
|
|