mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:33:12 -06:00
now accepts curpos from write caller
This commit is contained in:
@@ -501,6 +501,9 @@ N8V_OFFSET:
|
||||
; Video Display Processor Write Character ;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
N8V_VDAWRC:
|
||||
|
||||
LD (VDP_POS),HL ; accept curpos from caller in HL
|
||||
|
||||
PUSH DE
|
||||
|
||||
LD hl,row_offs ; hl -> row offset table
|
||||
@@ -525,23 +528,23 @@ N8V_VDAWRC:
|
||||
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:
|
||||
; 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
|
||||
@@ -557,20 +560,16 @@ N8V_VDAFIL:
|
||||
; Video Display Processor Scroll ;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;;; TODO
|
||||
;;; Currently the code only scrolls one line
|
||||
;;; and ignores the distance argument in E.
|
||||
|
||||
; COPY DATA ZONE FROM VRAM TO SCRLBUF
|
||||
VDASCR_RVRAM:
|
||||
; COPY DATA ZONE FROM VRAM TO SCRLBUF
|
||||
|
||||
; CALCULATE AND SET OFFSET TO START OF DATA ZONE IN VRAM
|
||||
LD A,(VDASCR_DIST)
|
||||
CALL N8V_OFFSET
|
||||
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
|
||||
LD C,DATAP ; using the TMS9918 data port
|
||||
IN A,(C) ; PRIME AUTOINCREMENT
|
||||
LD HL,SCRLBUF ; DEST IS SCRLBUF OFFSET 0
|
||||
|
||||
@@ -605,6 +604,7 @@ N8V_VDASCR3:
|
||||
OR E
|
||||
JR NZ,N8V_VDASCR3
|
||||
RET
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
VDASCR_BLANKING:
|
||||
@@ -620,9 +620,9 @@ N8V_VDASCR4:
|
||||
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
|
||||
|
||||
@@ -636,62 +636,15 @@ N8V_VDASCR:
|
||||
CALL N8V_OFFSET ; CVT ROWS OF DATA TO NUMBER OF BYTES
|
||||
LD (VDASCR_SIZE),HL ; AND SAVE FOR LATER USE
|
||||
|
||||
CALL VDASCR_RVRAM
|
||||
CALL VDASCR_RVRAM ; read data region of name table into scrlbuf
|
||||
|
||||
CALL VDASCR_WVRAM
|
||||
CALL VDASCR_WVRAM ; write scrlbuf to head of name table in VRAM
|
||||
|
||||
CALL VDASCR_BLANKING
|
||||
CALL VDASCR_BLANKING ; blank dist lines at end of name table
|
||||
|
||||
XOR A ; SET SUCCESSFUL RETURN CODE
|
||||
RET ; RETURN TO CALLER
|
||||
|
||||
;;;
|
||||
OLD_N8V_VDASCR:
|
||||
; E = scroll distance (# lines)
|
||||
|
||||
LD HL,0 ; starting at row 0 column 0
|
||||
CALL VDP_WRVRAM
|
||||
LD C,DATAP
|
||||
IN A,(C) ; prime autoincrement
|
||||
LD HL,SCRLBUF ;
|
||||
LD DE,24*40
|
||||
OLD_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
|
||||
OLD_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
|
||||
OLD_N8V_VDASCR4:
|
||||
LD A,' '
|
||||
OUT (C),A
|
||||
DEC DE
|
||||
LD A,D
|
||||
OR E
|
||||
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
|
||||
@@ -773,8 +726,11 @@ RECOVER:
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
VDP_DEVUNIT .DB 0
|
||||
VDP_ROW .DB 0 ; row number 0-23
|
||||
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user