changeset 3237:fd4c50256e05

Updated level 1 CoVDG with a mini stack blast for the screen scroll.
author David Ladd <drencor-xeen@users.sourceforge.net>
date Tue, 20 Feb 2018 02:04:42 -0600
parents d276fe300c74
children e68c1db27cbe
files level1/modules/covdg.asm
diffstat 1 files changed, 16 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/level1/modules/covdg.asm	Mon Feb 19 21:06:20 2018 -0600
+++ b/level1/modules/covdg.asm	Tue Feb 20 02:04:42 2018 -0600
@@ -227,23 +227,28 @@
 L00DF    bra   ShowCrsr		ends with a CLRB/RTS anyhow
 
 * Screen Scroll Routine
-SScrl    ldx   <V.ScrnA,u	get address of screen
+SScrl
          IFNE  H6309
+         ldx   <V.ScrnA,u       get address of screen
          ldd   #COLSIZE*256+$60
          leay  a,x              down one line
          ldw   #COLSIZE*ROWSIZE-COLSIZE
          tfm   y+,x+            scroll screen up
          stx   <V.CrsrA,u       save new cursor address
          ELSE
-         leax  <COLSIZE,x		move to 2nd line
-L00E9    ldd   ,x++		copy from this line
-         std   <-COLSIZE-2,x		to prevous
-         cmpx  <V.ScrnE,u	at end of screen yet?
-         bcs   L00E9		branch if not
-         leax  <-COLSIZE,x		else back up one line
-         stx   <V.CrsrA,u	save address of cursor (first col of last row)
-         lda   #COLSIZE		clear out row...
-         ldb   #$60		...width spaces
+         ldy   <V.ScrnA,u       get address of screen
+         ldx   <V.ScrnE,u       get address of end of screen
+         pshs  u,y,x            save u y x on stack
+         leau  <COLSIZE,y       get address of second line
+ScrlLp@  pulu  d,x              pull D and X off of U stack for line two
+         std   ,y++             write D into new location
+         stx   ,y++             write X into new location
+         cmpu  ,s               compare U to end of screen
+         bls   ScrlLp@          check if we reached end of line if not do more
+         puls  x,y,u            restore U X and D registers
+         leax  -COLSIZE,x
+         stx   <V.CrsrA,u
+         ldd   #COLSIZE*256+$60  A=clear out row... B= with spaces
          ENDC
 L00FD    stb   ,x+		do it...
          deca  			end of rope?
@@ -305,7 +310,7 @@
          bcs   L0162		branch if not
          leax  <-COLSIZE,x		else go back up one line
          pshs  x		save X
-         bsr   SScrl		and scroll the screen
+         lbsr  SScrl		and scroll the screen
          puls  x		restore pointer
 L0162    stx   <V.CrsrA,u 	save cursor pointer
          bra   ShowCrsr		show cursor