From 78306033203afad237d1d548270d9d5b3e64e141 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Mon, 19 Sep 2022 13:21:07 -0400 Subject: [PATCH] Reverse scrolling now works in MODE1 / HGR. --- auxmem.gfx.s | 12 ++++++++++++ auxmem.vdu.s | 15 +++++++++++---- mainmem.gfx.s | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 4 deletions(-) diff --git a/auxmem.gfx.s b/auxmem.gfx.s index 9a36b1f..1f55c08 100644 --- a/auxmem.gfx.s +++ b/auxmem.gfx.s @@ -35,6 +35,7 @@ PRCHRSOFT CMP #$A0 ; Convert to screen code PUTCHRET >>> ENTAUX RTS +* Forwards scroll one line HSCR1LINE >>> WRTMAIN LDX TXTWINLFT STX MTXTWINLFT @@ -45,6 +46,17 @@ HSCR1LINE >>> WRTMAIN HSCR1RET >>> ENTAUX RTS +* Reverse scroll one line +HRSCR1LINE >>> WRTMAIN + LDX TXTWINLFT + STX MTXTWINLFT + LDX TXTWINRGT + STX MTXTWINRGT + >>> WRTAUX + >>> XF2MAIN,HGRRSCR1L +HRSCR1RET >>> ENTAUX + RTS + HSCRCLREOL LDA VDUTEXTY ASL TAX diff --git a/auxmem.vdu.s b/auxmem.vdu.s index 0ae5f38..17ed92f 100644 --- a/auxmem.vdu.s +++ b/auxmem.vdu.s @@ -727,7 +727,10 @@ CLREOLGS BIT $C01F SCROLLER LDA TXTWINTOP :L1 PHA JSR SCR1LINE - PLA + BIT VDUSCREEN + BPL :S0 + JSR SCR1SOFT ; Scroll graphics screen +:S0 PLA INC CMP TXTWINBOT BNE :L1 @@ -745,7 +748,10 @@ RSCROLLER DEC TXTWINTOP DEC A :L1 PHA JSR RSCR1LINE - PLA + BIT VDUSCREEN + BPL :S0 + JSR RSCR1SOFT ; Scroll graphics screen +:S0 PLA DEC A CMP TXTWINTOP BNE :L1 @@ -827,8 +833,6 @@ DOSCR1LINE INC TXTWINRGT BMI :L2 SCR1LNDONE DEC TXTWINRGT PLA - BIT VDUSCREEN - BMI SCR1SOFT ; Scroll graphics screen RTS SCR1LINEGS LDX TXTWINLFT BIT $C01F @@ -867,6 +871,9 @@ SCR1LINEGS LDX TXTWINLFT * Copy text line A+1 to line A for HGR bitmap gfx mode SCR1SOFT JMP HSCR1LINE +* Copy text line A to line A+1 for HGR bitmap gfx mode +RSCR1SOFT JMP HRSCR1LINE + * VDU 16 - CLG, clear graphics window VDU16 JMP HSCRCLEAR diff --git a/mainmem.gfx.s b/mainmem.gfx.s index a7bd5ab..4645a21 100644 --- a/mainmem.gfx.s +++ b/mainmem.gfx.s @@ -178,6 +178,41 @@ HGRSCR1L >>> ENTMAIN BNE :L1 >>> XF2AUX,HSCR1RET +* Copy text line A to line A+1 +HGRRSCR1L >>> ENTMAIN + INC MTXTWINRGT + ASL ; Source addr->A1L,A1H + TAX + LDA MHGRTAB,X + STA A1L + LDA MHGRTAB+1,X + STA A1H + INX ; Dest addr->A4L,A4H + INX + LDA MHGRTAB,X + STA A4L + LDA MHGRTAB+1,X + STA A4H + LDX #$00 +:L1 LDY MTXTWINLFT +:L2 LDA (A1L),Y + STA (A4L),Y + INY + CPY MTXTWINRGT + BNE :L2 + INC A1H ; Advance source 1024 bytes + INC A1H + INC A1H + INC A1H + INC A4H ; Advance dest 1024 bytes + INC A4H + INC A4H + INC A4H + INX + CPX #8 ; 8 pixel rows in character + BNE :L1 + >>> XF2AUX,HRSCR1RET + * Clear one text line on HGR screen, * from current cursor col to text window right limit HCLREOL >>> ENTMAIN