Browse Source

Reintegrate dwg -> trunk

pull/3/head
wayne 13 years ago
parent
commit
f510da9d46
  1. 752
      Source/n8v.asm

752
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/16/2012 dwg - N8V_VDAQRY now working
; ../RomWBW/Source/n8v.asm 11/15/2012 dwg - vdaini and vdaqry retcodes ok ; ../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/28/2012 dwg - add n8v_modes
; ../RomWBW/Source/n8v.asm 10/27/2012 dwg - begin enhancement ; ../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 ; DATA CONSTANTS
;__________________________________________________________________________________________________ ;__________________________________________________________________________________________________
@ -18,33 +24,262 @@
; BOARD INITIALIZATION ; 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: N8V_VDAINI:
LD A,C LD A,C
LD (VDP_DEVUNIT),A LD (VDP_DEVUNIT),A
LD A,E LD A,E
LD (VDP_MODE),A LD (VDP_MODE),A
PUSH HL 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 POP HL
LD A,L LD A,L
OR H OR H
JP Z,N8V_NOLOAD 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: 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 CALL PPK_INIT
; fall through...
XOR A XOR A
RET RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; This is the end of the init routine ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;__________________________________________________________________________________________________ ;__________________________________________________________________________________________________
; CHARACTER I/O (CIO) DISPATCHER ; CHARACTER I/O (CIO) DISPATCHER
;__________________________________________________________________________________________________ ;__________________________________________________________________________________________________
@ -104,15 +339,14 @@ N8V_DISPVDA:
JP Z,PPK_READ JP Z,PPK_READ
CALL PANIC CALL PANIC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Video Display Processor Query ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
N8V_VDAQRY: N8V_VDAQRY:
LD A,H LD A,H
OR L OR L
JP Z,N8V_QDONE JP Z,N8V_QDONE
;
; read bitmaps and ; read bitmaps and
LD C,CMDP LD C,CMDP
LD A,0 LD A,0
@ -121,7 +355,7 @@ N8V_VDAQRY:
LD A,72 LD A,72
OUT (C),A ; out(CMDP,72); OUT (C),A ; out(CMDP,72);
CALL RECOVER CALL RECOVER
;
LD DE,256 LD DE,256
LD C,DATAP LD C,DATAP
IN A,(C) ; read status IN A,(C) ; read status
@ -130,58 +364,58 @@ VDP_QLOOP:
IN A,(C) IN A,(C)
CALL RECOVER CALL RECOVER
LD (BYTE8),A LD (BYTE8),A
;
IN A,(C) IN A,(C)
CALL RECOVER CALL RECOVER
LD (BYTE7),A LD (BYTE7),A
;
IN A,(C) IN A,(C)
CALL RECOVER CALL RECOVER
LD (BYTE6),A LD (BYTE6),A
;
IN A,(C) IN A,(C)
CALL RECOVER CALL RECOVER
LD (BYTE5),A LD (BYTE5),A
;
IN A,(C) IN A,(C)
CALL RECOVER CALL RECOVER
LD (BYTE4),A LD (BYTE4),A
;
IN A,(C) IN A,(C)
CALL RECOVER CALL RECOVER
LD (BYTE3),A LD (BYTE3),A
;
IN A,(C) IN A,(C)
CALL RECOVER CALL RECOVER
LD (BYTE2),A LD (BYTE2),A
;
IN A,(C) IN A,(C)
CALL RECOVER CALL RECOVER
; LD (BYTE1),A ; LD (BYTE1),A
;
LD (HL),A LD (HL),A
INC HL INC HL
;
LD A,(BYTE2) LD A,(BYTE2)
LD (HL),A LD (HL),A
INC HL INC HL
;
LD A,(BYTE3) LD A,(BYTE3)
LD (HL),A LD (HL),A
INC HL INC HL
;
LD A,(BYTE4) LD A,(BYTE4)
LD (HL),A LD (HL),A
INC HL INC HL
;
LD A,(BYTE5) LD A,(BYTE5)
LD (HL),A LD (HL),A
INC HL INC HL
;
LD A,(BYTE6) LD A,(BYTE6)
LD (HL),A LD (HL),A
INC HL INC HL
;
LD A,(BYTE7) LD A,(BYTE7)
LD (HL),A LD (HL),A
INC HL INC HL
@ -205,324 +439,206 @@ N8V_QDONE:
LD A,0 ; return SUCCESS LD A,0 ; return SUCCESS
RET RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Video Display Processor Reset ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
N8V_VDARES: N8V_VDARES:
LD HL,CHARSET LD HL,CHARSET
JP N8V_VDAINI JP N8V_VDAINI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Video Display Processor Set Cursor Style ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
N8V_VDASCS: N8V_VDASCS:
CALL PANIC CALL PANIC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Video Display Processor Set Cursor Position ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
N8V_VDASCP: 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 XOR A
RET RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Video Display Processor Set Character Attributes ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
N8V_VDASAT: N8V_VDASAT:
CALL PANIC CALL PANIC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Video Display Processor Set Color Color ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
N8V_VDASCO: N8V_VDASCO:
CALL PANIC CALL PANIC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Video Display Processor Write Character ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
N8V_VDAWRC: 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: N8V_VDAFIL:
XOR A XOR A
RET RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Video Display Processor Scroll ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
N8V_VDASCR: 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 LD HL,0
CALL VDP_WRVRAM CALL VDP_WRVRAM
LD HL,VDP_HELLO
LD DE,39
LD C,DATAP 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 INC HL
DEC DE DEC DE
LD A,D LD A,D
OR E 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 CALL VDP_WRVRAM
LD HL,STR_BANNER
LD HL,SCRLBUF+40
LD DE,(24*40)-40
LD C,DATAP LD C,DATAP
LD DE,20
BAN_LOOP:
LD A,(HL)
CP '('
JP Z,BAN_DONE
OUT (C),A 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) LD A,(HL)
CP ' '
JP Z,BAN_DONE2
OUT (C),A OUT (C),A
INC HL INC HL
DEC DE DEC DE
LD A,D LD A,D
OR E 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 OUT (C),A
INC HL
DEC DE DEC DE
LD A,D LD A,D
OR E OR E
JP NZ,BAN_LOOP3
BAN_DONE3:
JR NZ,N8V_VDASCR4
XOR A
RET 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: VDP_WRVRAM:
; HL -> points to ram location ; HL -> points to ram location
; vdp_wrvram(o)
; {
; byte1 = o & 255;
; byte2 = (o >> 8) | 0x40;
; out(CMDP,byte1);
; out(CMDP,byte2);
; }
LD C,CMDP LD C,CMDP
OUT (C),L OUT (C),L
CALL RECOVER CALL RECOVER
@ -530,17 +646,9 @@ VDP_WRVRAM:
CALL RECOVER CALL RECOVER
RET 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: RECOVER:
PUSH BC PUSH BC
PUSH DE PUSH DE
@ -550,11 +658,9 @@ RECOVER:
POP BC POP BC
RET RET
;
;__________________________________________________________________________________________________
; LOCAL DRIVER DATA
;__________________________________________________________________________________________________
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Video Display Processor Local Driver Data ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
VDP_DEVUNIT .DB 0 VDP_DEVUNIT .DB 0
VDP_ROW .DB 0 ; row number 0-23 VDP_ROW .DB 0 ; row number 0-23
@ -577,3 +683,13 @@ BYTE8 .DB 0
CHARSET: CHARSET:
#INCLUDE "n8chars.inc" #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 ;
;;;;;;;;;;;;;;;;;

Loading…
Cancel
Save