[Coco] HDBDOS - RETRIEVE FIXED!!

Brett Gordon beretta42 at gmail.com
Sun Jan 18 17:34:21 EST 2015


I've been highly modifying HDBDOS.  One of the "TO DO's" is to figure
out why any changes in the code lower than 0xD930 breaks... even the
stuff after the last SECB patch will break if it gets relocated.  I've
ran through the code 3 or 4 times trying to find anything static, but
I haven't found the reason yet.   Anything hight than the "MAGIC"
address of 0xD930  can be safely relocated. Also I suggest changing
the manual fills to a lwasm  "fill $39,...."  This helps a bunch.

* ;;; Check Low DOS out for fitting into low part of low ROM
*       ifgt *-0xd930
*       error     Original DECB too big
*       endc

      fill 0x39,0xd930-*


and:



;;; This check to make sure our code above fits
;;; into ROM below address 0xe000, technically
;;; the fill below will error out, but not tell
;;; us why.
ifgt *-0xe000
error Low ROM too big
endc

;;;  This fill will cause an error on LWASM if our
;;;  bottom 8k get too big.
fill    $39,MAGICDG+$2000-*


I'll let you gents know if I find anything about the relocations.

-B



On Sun, Jan 18, 2015 at 4:54 PM, Robert Gault <robert.gault at att.net> wrote:
> Chad,
>
> I been trying something similar but for some reason my version of hdbdos.asm
> does not correctly use the fill statement at the end and I either get
> overflow past $2000 or inadequate filling with $39. Also the default
> positions for things like jump tables and the drive value table change
> location in memory.
>
> Anyway I used
>
> LD69A      pshs      B               SAVE SECTOR COUNTER
>            ldu       #DBUF1          POINT U TO THE TABLE OF LOGICAL SECTORS
>            ldb       B,U             * GET LOGICAL SECTOR NUMBER FROM TABLE
> AND
>            stb       DSEC            * SAVE IT IN THE DSKCON VARIABLE
>            ldu       #LD6D4          POINT U TO TABLE OF SECTOR FORMATTING
> DATA
>            ldb       #$03            * GET FIRST 3 DATA BLOCKS AND
>            bsr       LD6C8           * WRITE THEM TO BUFFER
>            lda       DCTRK           = GET TRACK NUMBER AND STORE lT
>            sta       ,X+             = IN THE RAM BUFFER
>            lda       <DCDRV          should be $EB ie. drive #
>            lsra                      0&1 become 0 while 2&3 become 1
>            sta       ,x+
>            lda       DSEC            * GET SECTOR NUMBER AND
>            sta       ,X+             * STORE IT IN THE BUFFER
>            ldb       #$09            = GET THE LAST NINE DATA BLOCKS AND
> etc.
>
> This did not work for me on my system but it could have been a problem
> compiling the code.
>
>
> Robert
>
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> https://pairlist5.pair.net/mailman/listinfo/coco



-- 
Brett M. Gordon,
beretta42 at gmail.com


More information about the Coco mailing list