diff --git a/branches/dwg/Source/n8v.asm b/branches/dwg/Source/n8v.asm index 7a4e5164..f454383a 100644 --- a/branches/dwg/Source/n8v.asm +++ b/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