mirror of https://github.com/wwarthen/RomWBW.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
758 lines
18 KiB
758 lines
18 KiB
; ../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
|
|
|
|
;__________________________________________________________________________________________________
|
|
; DATA CONSTANTS
|
|
;__________________________________________________________________________________________________
|
|
;
|
|
;_________________________________________________________________________
|
|
; BOARD INITIALIZATION
|
|
;_________________________________________________________________________
|
|
;
|
|
N8V_INIT:
|
|
PRTS("N8V:$")
|
|
LD HL,CHARSET
|
|
CALL N8V_VDAINI
|
|
XOR A
|
|
RET
|
|
;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; 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
|
|
; 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
|
|
;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:
|
|
; 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...
|
|
|
|
; WBW: PPK_INIT SHOULD ONLY BE CALLED FROM HBIOS INIT
|
|
; CALL PPK_INIT
|
|
; fall through...
|
|
|
|
XOR A
|
|
RET
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; This is the end of the init routine ;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
|
|
;__________________________________________________________________________________________________
|
|
; CHARACTER I/O (CIO) DISPATCHER
|
|
;__________________________________________________________________________________________________
|
|
;
|
|
N8V_DISPCIO:
|
|
LD A,B ; GET REQUESTED FUNCTION
|
|
AND $0F ; ISOLATE SUB-FUNCTION
|
|
JP Z,PPK_READ
|
|
DEC A
|
|
JR Z,N8V_CIOOUT
|
|
DEC A
|
|
JP Z,PPK_STAT
|
|
DEC A
|
|
JR Z,N8V_CIOOST
|
|
CALL PANIC
|
|
;
|
|
N8V_CIOOUT:
|
|
JP N8V_VDAWRC
|
|
;
|
|
N8V_CIOOST:
|
|
XOR A
|
|
INC A
|
|
RET
|
|
;
|
|
;__________________________________________________________________________________________________
|
|
; VIDEO DISPLAY ADAPTER (VDA) DISPATCHER
|
|
;__________________________________________________________________________________________________
|
|
;
|
|
N8V_DISPVDA:
|
|
LD A,B ; GET REQUESTED FUNCTION
|
|
AND $0F ; ISOLATE SUB-FUNCTION
|
|
|
|
JP Z,N8V_VDAINI
|
|
DEC A
|
|
JP Z,N8V_VDAQRY
|
|
DEC A
|
|
JP Z,N8V_VDARES
|
|
DEC A
|
|
JP Z,N8V_VDASCS
|
|
DEC A
|
|
JP Z,N8V_VDASCP
|
|
DEC A
|
|
JP Z,N8V_VDASAT
|
|
DEC A
|
|
JP Z,N8V_VDASCO
|
|
DEC A
|
|
JP Z,N8V_VDAWRC
|
|
DEC A
|
|
JP Z,N8V_VDAFIL
|
|
DEC A
|
|
JP Z,N8V_VDASCR
|
|
DEC A
|
|
JP Z,PPK_STAT
|
|
DEC A
|
|
JP Z,PPK_FLUSH
|
|
DEC A
|
|
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);
|
|
CALL RECOVER
|
|
LD A,72
|
|
OUT (C),A ; out(CMDP,72);
|
|
CALL RECOVER
|
|
;
|
|
LD DE,256
|
|
LD C,DATAP
|
|
IN A,(C) ; read status
|
|
CALL RECOVER
|
|
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
|
|
|
|
LD A,(BYTE8)
|
|
LD (HL),A
|
|
INC HL
|
|
|
|
DEC DE
|
|
LD A,D
|
|
OR E
|
|
JR NZ,VDP_QLOOP
|
|
N8V_QDONE:
|
|
LD A,(VDP_MODE)
|
|
LD C,A
|
|
LD A,(VDP_ROWS)
|
|
LD D,A
|
|
LD A,(VDP_COLS)
|
|
LD E,A
|
|
|
|
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 Calculate Row Offset ;
|
|
; Enter with A = Row number (rel 0) ;
|
|
; returns with HL = offset ;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
N8V_OFFSET:
|
|
PUSH DE
|
|
LD hl,row_offs ; hl -> row offset table
|
|
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
|
|
POP DE
|
|
RET
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; Video Display Processor Write Character ;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
N8V_VDAWRC:
|
|
|
|
;;; LD (VDP_POS),HL ; accept curpos from caller in HL
|
|
|
|
PUSH DE
|
|
|
|
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
|
|
|
|
XOR A ; set SUCCESS return code
|
|
RET ; return from HBIOS call
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; Video Display Processor Fill ;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
N8V_VDAFIL:
|
|
XOR A
|
|
RET
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; Video Display Processor Scroll ;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
; COPY DATA ZONE FROM VRAM TO SCRLBUF
|
|
VDASCR_RVRAM:
|
|
|
|
; CALCULATE AND SET OFFSET TO START OF DATA ZONE IN VRAM
|
|
LD A,(VDASCR_DIST) ; from number lines to scroll,
|
|
CALL N8V_OFFSET ; set HL to offset of data in name table
|
|
CALL VDP_WRVRAM
|
|
|
|
; SETUP FOR VRAM DATA READ
|
|
LD C,DATAP ; using the TMS9918 data port
|
|
IN A,(C) ; PRIME AUTOINCREMENT
|
|
LD HL,SCRLBUF ; DEST IS SCRLBUF OFFSET 0
|
|
|
|
; COPY VDASCR_SIZE BYTES FROM VRAM TO HEAD OF SCRLBUF
|
|
LD DE,(VDASCR_SIZE) ; SIZE OF DATA ZONE
|
|
N8V_VDASCR2:
|
|
IN A,(C) ; FETCH NEXT BYTE FROM VRAM
|
|
LD (HL),A ; STORE IN SEQUENTIAL LOCATIONS IN SCRBUF
|
|
INC HL ; BUMP STORAGE INDEX
|
|
DEC DE ; DECREMENT BYTE COUNT REMAINING
|
|
LD A,D ; OR D
|
|
OR E ; WITH E
|
|
JR NZ,N8V_VDASCR2 ; AND DO MORE IF NOT ZERO
|
|
|
|
RET
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
VDASCR_WVRAM:
|
|
LD HL,0
|
|
CALL VDP_WRVRAM
|
|
LD C,DATAP
|
|
; OUT (C),A
|
|
LD HL,SCRLBUF
|
|
LD DE,(VDASCR_SIZE)
|
|
N8V_VDASCR3:
|
|
LD A,(HL) ; FETCH NEXT BYTE FROM SCRLBUF
|
|
OUT (C),A
|
|
INC HL
|
|
DEC DE
|
|
LD A,D
|
|
OR E
|
|
JR NZ,N8V_VDASCR3
|
|
RET
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
VDASCR_BLANKING:
|
|
; CALCULATE SIZE OF BLANKING ZONE
|
|
LD A,(VDASCR_DIST)
|
|
CALL N8V_OFFSET
|
|
EX DE,HL ; NUMBER OF BYTES TO BLANK
|
|
N8V_VDASCR4:
|
|
LD A,' ' ; WE WILL BE STORING BLANKS
|
|
OUT (C),A ; OUTPUT A BYTE TO THE VRAM NAME TABLE BLANKING ZONE
|
|
DEC DE ; DECREMENT COUNT
|
|
LD A,D ; OR THE HO BYTE
|
|
OR E ; WITH THE LO BYTE
|
|
JR NZ,N8V_VDASCR4 ; ;AND LOOP IF NOT ZERO
|
|
RET
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
VDASCR_DIST .DB 0 ; NUMBER OF ROWS TO SCROLL
|
|
VDASCR_SIZE .DW 0 ; SIZE IN BYTES OF DATA REGION
|
|
|
|
N8V_VDASCR:
|
|
; E = scroll distance (# lines)
|
|
LD A,E
|
|
LD (VDASCR_DIST),A
|
|
|
|
LD A,(VDP_ROWS) ; NUMBER OF ROWS ON SCREEN
|
|
SUB E ; MINUS DIST IS ROWS OF DATA
|
|
CALL N8V_OFFSET ; CVT ROWS OF DATA TO NUMBER OF BYTES
|
|
LD (VDASCR_SIZE),HL ; AND SAVE FOR LATER USE
|
|
|
|
CALL VDASCR_RVRAM ; read data region of name table into scrlbuf
|
|
|
|
CALL VDASCR_WVRAM ; write scrlbuf to head of name table in VRAM
|
|
|
|
CALL VDASCR_BLANKING ; blank dist lines at end of name table
|
|
|
|
XOR A ; SET SUCCESSFUL RETURN CODE
|
|
RET ; RETURN TO CALLER
|
|
|
|
|
|
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
|
|
|
|
;-------------------------------------------------
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; Video Display Processor Write the VRAM address registers ;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
VDP_WRVRAM:
|
|
; HL -> points to ram location
|
|
LD C,CMDP
|
|
OUT (C),L
|
|
CALL RECOVER
|
|
OUT (C),H
|
|
CALL RECOVER
|
|
RET
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; Recovery-time delay routine - Conservatively long delay ;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
RECOVER:
|
|
PUSH BC
|
|
PUSH DE
|
|
PUSH HL
|
|
POP HL
|
|
POP DE
|
|
POP BC
|
|
RET
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; Video Display Processor Local Driver Data ;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
VDP_DEVUNIT .DB 0
|
|
|
|
|
|
; The following data items, VDP_COL and VDP_ROW area
|
|
; data bytes that can be retrieved together with a
|
|
; word fetch using the VDP_POS label. It is generally
|
|
; set by a call to VDASCP from the emulation layer.
|
|
; It is used by VDAFIL specifically to denote the beginning
|
|
; of the fill area not specified in the API of VDAFIL.
|
|
|
|
VDP_POS:
|
|
VDP_COL .DB 0 ; col number 0-39
|
|
VDP_ROW .DB 0 ; row number 0-23
|
|
|
|
VDP_ROWS .DB 24 ; number of rows
|
|
VDP_COLS .DB 40 ;
|
|
VDP_MODE .DB 0
|
|
VDP_ATTR .DB 240 ; default to white on black
|
|
VDP_HELLO .TEXT " N8-2312 TMS9918 Text Mode Init Done!!"
|
|
VDP_HELLOLEN .DB $-VDP_HELLO
|
|
|
|
BYTE1 .DB 0
|
|
BYTE2 .DB 0
|
|
BYTE3 .DB 0
|
|
BYTE4 .DB 0
|
|
BYTE5 .DB 0
|
|
BYTE6 .DB 0
|
|
BYTE7 .DB 0
|
|
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 ;
|
|
;;;;;;;;;;;;;;;;;
|
|
|