[Coco] HDBDOS - RETRIEVE FIXED!!
Chad H
chadbh74 at hotmail.com
Sun Jan 18 12:24:28 EST 2015
Yayyy!!! After 1,327 compiles I finally managed to DSKINI floppies with my CoCo 2 that can be read flawlessly on BOTH sides by Johns current RETRIEVE utility! There was never anything wrong with the RETRIEVE utility. The CoCo was just still stuck in single-sided mentality. (note: previous assessment of total compiles exaggerated to illustrate frustration to relief factor)
Please note this code sets the drive head byte to 0 or 1 as appropriate where as before it was always 0. It is based on the default HDBDOS drive table. If you choose to alter your drive table, this too may have to be adjusted to remain in effect.
== Unit 0 ==
Drive 0 (0 gets written)
Drive 2 (1 gets written)
== Unit 1 ==
Drive 1 (0 gets written)
Drive 2 (1 gets written)
Here's the final track build code for HDBDOS if anyone is interested in applying this. ..
* BUILD A FORMATTED TRACK OF DATA IN RAM STARTING AT DFLBUF.
LD691 ldx >$1F
*LD691 LDX #DFLBUF START TRACK BUFFER AT DFLBUF
ldd #$204E GET SET TO WRITE 32 BYTES OF $4E
bsr LD6C2 GO WRITE GAP IV
clrb RESET SECTOR COUNTER
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
ldb <DCDRV 'GET DRIVE #
cmpb #$01 ANYTHING >1 is Side 1
lbhi SIDE1
SIDE0 clra <=1, set Side #0 byte
bra WRTBT
SIDE1 lda #$01 else Set Side #1 Byte
WRTBT sta ,X+ Store Byte
lda DSEC * GET SECTOR NUMBER AND
sta ,X+ * STORE IT IN THE BUFFER
ldb #$09 = GET THE LAST NINE DATA BLOCKS AND
bsr LD6C8 = WRITE THEM TO THE BUFFER
puls B GET SECTOR COUNTER
incb NEXT SECTOR
cmpb #SECMAX 18 SECTORS PER TRACK
blo LD69A BRANCH IF ALL SECTORS NOT DONE
ldd #$C84E WRITE 200 BYTES OF $4E AT END OF TRACK
* WRITE ACCA BYTES OF ACCB INTO BUFFER
-----Original Message-----
From: Coco [mailto:coco-bounces at maltedmedia.com] On Behalf Of Chad H
Sent: Sunday, January 18, 2015 10:44 AM
To: 'CoCoList for Color Computer Enthusiasts'
Subject: [Coco] HDBDOS assembly patch help! (RETRIEVE resolution)
Well I took a glance at that site and at the 'OmniDisk' counterpart there for Win9x platforms and it seemed too complex and universal. I would be much happier if I could just get the RETRIEVE issue eliminated so I can use it without any problems...which I'm very close to accomplishing.
I've only got 2 problems right now...
1> Apparently the FD-502 controller doesn't connect the A13 line from the EPROM to the CART connector so I can't put in a 16K EPROM without installing a jumper.. But I can fix that later, right now I'm testing by loading .BIN files.
2> I know just enough assembly to cause myself a headache. I was beating my head on this seemingly very very simple thing yesterday for more hours than I care to admit. I know someone with basic assembly knowledge will be able to spot my error and help me out though
Here is the excerpt from the HDBDOS DSKINI section I'm trying to change. I want it to write a head byte #0 for Drives 0/1 and byte #1 for Drives 2/3 (side 2 of floppies). Right now, it's still writing all #0 as listed. I can fiddle with the code and make it write #1 all the time. But then my RETRIEVE problem flips to the other side of the disk ugh. I need it to behave and write the correct byte depending on drive number. Anyone please?
* BUILD A FORMATTED TRACK OF DATA IN RAM STARTING AT DFLBUF.
LD691 ldx >$1F
*LD691 LDX #DFLBUF START TRACK BUFFER AT DFLBUF
ldd #$204E GET SET TO WRITE 32 BYTES OF $4E
bsr LD6C2 GO WRITE GAP IV
clrb RESET SECTOR COUNTER
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
ldb <DCDRV 'GET DRIVE #
cmpb #2 ANYTHING >1 is Side 1
blo SIDE0 Less is Side #0
SIDE1 lda 1 else Set Side #1 Byte
bra WRTBT
SIDE0 clra Less than 2, set Side #0 byte
WRTBT sta ,X+ Store Byte
lda DSEC * GET SECTOR NUMBER AND
sta ,X+ * STORE IT IN THE BUFFER
ldb #$09 = GET THE LAST NINE DATA BLOCKS AND
bsr LD6C8 = WRITE THEM TO THE BUFFER
puls B GET SECTOR COUNTER
incb NEXT SECTOR
cmpb #SECMAX 18 SECTORS PER TRACK
blo LD69A BRANCH IF ALL SECTORS NOT DONE
ldd #$C84E WRITE 200 BYTES OF $4E AT END OF TRACK
* WRITE ACCA BYTES OF ACCB INTO BUFFER
-----Original Message-----
From: Coco [mailto:coco-bounces at maltedmedia.com] On Behalf Of Robert Gault
Sent: Sunday, January 18, 2015 7:21 AM
To: CoCoList for Color Computer Enthusiasts
Subject: Re: [Coco] FW: Color Computer DSKINI / RETRIEVE
OK, then try using a different PC program to read Coco disks. Check this out.
http://www.shlock.co.uk/Utils/OmniFlop/OmniFlop.htm
This program by Jason Watton is a great utility that should work with any Coco disk. The latest version is stated to work with Win7 systems. Coco disks can be 35, 40, or 80 track and single or double sided. It doesn't matter whether the disks are true doubles or separate disks per side.
The program has no problems reading the second side of a Coco disk formatted with HDBDOS or the standard Tandy DOS.
Robert
--
Coco mailing list
Coco at maltedmedia.com
https://pairlist5.pair.net/mailman/listinfo/coco
--
Coco mailing list
Coco at maltedmedia.com
https://pairlist5.pair.net/mailman/listinfo/coco
More information about the Coco
mailing list