changeset 2251:e53b8d577cca

Fixed Level 2 RBF issue
author boisy
date Sat, 26 Dec 2009 15:17:20 +0000
parents 8f641411c2fa
children 41a797492324
files ChangeLog level1/coco/makefile level2/modules/rbf.asm
diffstat 3 files changed, 33 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Thu Dec 24 16:51:18 2009 +0000
+++ b/ChangeLog	Sat Dec 26 15:17:20 2009 +0000
@@ -3,6 +3,7 @@
 Level 2 Only:
 - joydrv_6551L,  joydrv_6551M and joydrv_6552L now have their MPI slot
   select bytes properly represented and should work.
+- A bug that caused RBF to write to the system globals area has been fixed.
 
 ------------------------------------------------------
 
--- a/level1/coco/makefile	Thu Dec 24 16:51:18 2009 +0000
+++ b/level1/coco/makefile	Sat Dec 26 15:17:20 2009 +0000
@@ -14,6 +14,8 @@
 BOOTFILE_COVDG	= bootfiles/bootfile_covdg
 BOOTFILE_COHR	= bootfiles/bootfile_cohr
 BOOTFILE_COVDG_DS80	= bootfiles/bootfile_covdg_ds80
+BOOTFILE_DW3_COCO1	= bootfiles/bootfile_dw3_coco1
+BOOTFILE_DW3_COCO2	= bootfiles/bootfile_dw3_coco2
 BOOTFILE_COVDG_DW3_COCO1	= bootfiles/bootfile_covdg_dw3_coco1
 BOOTFILE_COVDG_DW3_COCO2	= bootfiles/bootfile_covdg_dw3_coco2
 BOOTFILE_COHR_DS80	= bootfiles/bootfile_cohr_ds80
--- a/level2/modules/rbf.asm	Thu Dec 24 16:51:18 2009 +0000
+++ b/level2/modules/rbf.asm	Sat Dec 26 15:17:20 2009 +0000
@@ -89,6 +89,11 @@
 * error if error code is != E$UnkSvc (fixes problems with drivers
 * which do not support SS.VarSect and return E$UnkSvc in their GetStat
 * routines after evaluating an unknown service code.)
+*
+*  37r3    2009/12/26  Boisy G. Pitre
+* Moved SS.VarSect code down to fix a problem where code to call driver
+* expected PD.Exten to be allocated when it wasn't, and that caused
+* a write to PE.Prior to go into the system globals area (address $0016).
 
          nam   RBF
          ttl   Random Block File Manager
@@ -97,7 +102,7 @@
          use   defsfile
          endc  
 
-rev      set   $02
+rev      set   $03
 ty       set   FlMgr
          IFNE  H6309
 lg       set   Obj6309
@@ -1518,7 +1523,30 @@
 * Entry: U=caller's stack reg. ptr
 *        Y=Path dsc. ptr
 FindFile 
+         ldd   #$0100		get size of sector
+* Note, following line is stb PD.SMF,y in v30!
+         IFGT  Level-1
+         stb   PD.FST,y		clear state flags??
+         ENDC
+         os9   F$SRqMem		request a 256 byte sector buffer
+         bcs   Sst7AB		couldn't get memory, return with error
+         stu   PD.BUF,y		save ptr to sector buffer
+         IFGT  Level-1
+         leau  ,y		point U to path descriptor
+         ldx   <D.PthDBT	get ptr to path descriptor block tables
+         os9   F$All64		allocate path descriptor
+         exg   y,u		exchange pointers
+         bcs   Sst7AB		couldn't get path descriptor, return error
+         stu   PD.Exten,y	save pointer to path extension
+         clr   PE.SigID,u	clear send signal proc. ID
+         sty   PE.PDptr,u	save back pointer to path descriptor
+         stu   PE.Wait,u	init waiting extension to myself
+         ENDC
+
+
 **** ADDED 06/19/2004 ****
+**** MOVED 12/26/2009 due to issue with PD.Exten not being allocated and
+**** causing a write into system direct page memory
 * Call to SS.VarSect in Driver:
 *
 * This code calls the driver's SS.VarSect GetStat, which will
@@ -1537,26 +1565,8 @@
          bcc   ok@		branch if no error on GetStat
          cmpb  #E$UnkSvc	Unknown Service call error?
          bne   Sst782		if not, return with error
+ok@
 ****
-ok@      ldd   #$0100		get size of sector
-* Note, following line is stb PD.SMF,y in v30!
-         IFGT  Level-1
-         stb   PD.FST,y		clear state flags??
-         ENDC
-         os9   F$SRqMem		request a 256 byte sector buffer
-         bcs   Sst7AB		couldn't get memory, return with error
-         stu   PD.BUF,y		save ptr to sector buffer
-         IFGT  Level-1
-         leau  ,y		point U to path descriptor
-         ldx   <D.PthDBT	get ptr to path descriptor block tables
-         os9   F$All64		allocate path descriptor
-         exg   y,u		exchange pointers
-         bcs   Sst7AB		couldn't get path descriptor, return error
-         stu   PD.Exten,y	save pointer to path extension
-         clr   PE.SigID,u	clear send signal proc. ID
-         sty   PE.PDptr,u	save back pointer to path descriptor
-         stu   PE.Wait,u	init waiting extension to myself
-         ENDC
          ldx   PD.RGS,y		get register stack pointer
          ldx   R$X,x		get pointer to pathname
          pshs  u,y,x