Browse Source

now accepts curpos from write caller

import/raw
doug 13 years ago
parent
commit
fc8c93fc42
  1. 110
      branches/dwg/Source/n8v.asm

110
branches/dwg/Source/n8v.asm

@ -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

Loading…
Cancel
Save