changeset 1346:31463a4ca9bf

Added fix to previous attempt to get >512K support working by Robert Gault
author boisy
date Wed, 17 Sep 2003 17:34:07 +0000
parents 1da8ab9ba433
children 89572d423498
files level2/modules/vdgint.asm
diffstat 1 files changed, 8 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/level2/modules/vdgint.asm	Wed Sep 17 17:26:37 2003 +0000
+++ b/level2/modules/vdgint.asm	Wed Sep 17 17:34:07 2003 +0000
@@ -1697,18 +1697,22 @@
          lda   #$FF		start off with zero screens allocated
 BA010    inca			count up by one
          ldb   (VD.NBlk-VD.HiRes),y	get number of blocks
+         pshs  a                needed to protect regA; RG.
          os9   F$AlHRam		allocate a screen
+         puls  a
          bcs   DeAll		de-allocate ALL allocated blocks on error
          pshs  b		save starting block number of the screen
          andb  #$3F		keep block BL= block MOD 63
          pshs  b
          addb   (VD.NBlk-VD.HiRes),y	add in the blcok size of the screen
+         decb			in case last block is $3F,$7F,$BF,$FF; RG.
          andb  #$3F		(BL+S) mod 63 < BL? (overlap 512k bank)
          cmpb  ,s+		is all of it in this bank? 
          blo   BA010		if not, allocate another screen
          puls  b		restore the block number for this screen
          stb   ,y		VD.HiRes - save starting block number
          bsr   DeMost           deallocate all of the other screens
+         leas  a,s		move from within DeMost; RG.
          ldb   ,y		restore the starting block number again
 
          lda   $01,x		number of blocks
@@ -1742,12 +1746,14 @@
 DA010    ldb   ,y+		get starting block number
          tfr   d,x		in X
          ldb   1,s		get size of the screen to de-allocate
-         OS9   F$DelRAM		de-allocate the blocks *** IGNORING ERRORS ***
+         pshs  a		needed to protect regA; RG.
+         os9   F$DelRAM		de-allocate the blocks *** IGNORING ERRORS ***
+         puls  a
          dec   ,s		count down
          bne   DA010
          puls  d,y,x		restore registers
          puls  a		and count of extra bytes on the stack
-         leas  a,s		remove blocks from the stack
+*         leas  a,s		removed because it yanks wrong data; RG.
 DA020    rts			and exit
 
 * Get current screen info for direct writes - added in NitrOS-9