[Coco] FW: Color Computer DSKINI / RETRIEVE

Chad H chadbh74 at hotmail.com
Sat Jan 17 13:18:31 EST 2015


For clarification of the problem for those haven't been following this...

ROM: Standard HDBDOS

SITUATION:  Double sided floppy DSKINI'd on the CoCo SUCCESSFULLY!
RETRIEVE CAN read one side of the disk but gives ERRORS when
attempting the second side.

- Physical Drive 0 -
DRIVE 0 = Physical Side 0  (RETRIEVE reads this OK!)
DRIVE 2 = Physical Side 1  (RETRIEVE FAILS!!!)

- Physical Drive 1 -
DRIVE 1 = Physical Side 0  (RETRIEVE reads this OK!)
DRIVE 2 = Physical Side 1  (RETRIEVE FAILS!!!)

WORKAROUND SO FAR:  Use the PC DSKINI utility to format the disk instead of the CoCo DSKINI.  Then it will still work in the CoCo but also be successfully read by the PC RETRIEVE for BOTH SIDES!!

CURRENT SUSPECT:  It appears that from the beginning the CoCo DSKINI routine was designed for single sided drives.  Later, when people started changing the drive tables, and even after the advent of HDBDOS, no one ever bothered to update the 'FORMAT TRACK IN RAM' coding that identifies every single sector to which side of the disk it belongs!!!   It just blindly marks all sectors as being side "0" regardless of what physical side it really is.

I'm currently attempting to test a 'Possible' solution by patching the format track building code in the HDBDOS DSKINI command to write a 0 or 1 appropriate to the Drive # selected in DSKINI parameter as opposed to blindly writing a "0" identifier on all sectors.



-----Original Message-----
From: Coco [mailto:coco-bounces at maltedmedia.com] On Behalf Of Chad H
Sent: Saturday, January 17, 2015 10:01 AM
To: 'CoCoList for Color Computer Enthusiasts'
Subject: [Coco] FW: Color Computer DSKINI / RETRIEVE

Well Jeff was kind enough to respond to my side 1 issue with RETRIEVE.  Unfortunatley his suggestion didn't work.  I'm still trying to find out if I can 'patch' the HDBDOS DSKINI routine to check the drive number and write the appropriate head byte of 0 or 1 instead of always 0.

-----Original Message-----
From: Chad H [mailto:chadbh74 at gmail.com] 
Sent: Saturday, January 17, 2015 9:59 AM
To: 'Jeff Vavasour'
Subject: RE: Color Computer DSKINI / RETRIEVE

Sorry, I tried covering the index holes and the PC wouldn’t read the floppy at all.  Even the DOS "DIR" command, which usually results in some drive noise from head movement for a moment then ends in error, it remains 'silent' with no head movement and errors out with the index holes covered.

Since I'm on a HDBDOS EPROM, I've tracked down the spot in the HDBDOS assembly source where the 'head' byte is encoded in.  It only seems to be referenced in the actual DISKINI routine itself.  If I can somehow figure out how to compare the drive number (DCDRV ?) and if it's greater than CoCo drive # 1 then it's the other side of a disk so write a "1" instead of the usual "0" then maybe...just maybe it might work?

>From the HDBDOS assembly source in the DSKINI section (note it just clears the byte to 0 always)...

* 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
               clr       ,X+                 CLEAR A BYTE (SIDE NUMBER) IN BUFFER
               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: Jeff Vavasour [mailto:jeff.vavasour at shaw.ca] 
Sent: Friday, January 16, 2015 11:15 PM
To: Chad H
Subject: Re: Color Computer DSKINI / RETRIEVE

Hi,

The problem is in your PC's floppy drive. It goes "blind" to data a moment after the index hole is sensed, but the CoCo does not. When the disk is formatted on the PC the track starts further away from the index hole than when it is formatted on the CoCo. The only workaround to read CoCo formatted disks on some drives on the PC is to put a sticker (such as a write protect tab) over the index hole, as it is not always needed. 

- Jeff

----- Original Message -----
From: Chad H <chadbh74 at gmail.com>
To: jeff vavasour <jeff.vavasour at shaw.ca>
Sent: Wed, 14 Jan 2015 20:04:30 -0700 (MST)
Subject: Color Computer DSKINI / RETRIEVE

Hi, I've been using these tools on my floppy/CoCo 2 setup for a few years now with good results.  Thank you for sharing these tools! J  However, recently I've become reacquainted with a 'glitch' I've been wanting to iron out.  You may or may not already be aware of the problem.

 

**

Floppy formatted by the CoCo will RETRIEVE side 0 OK.but not side 1.

Work around so far.   DSKINI the floppy using your tool first, then it
works.

 

**

Since the issue only seems to effect one side of the floppy I thought I could conjur enough mental fortitude to spot some place in your assembly code for these to see why this might be happening.  Unfortunately  assembly was never my strong suit L

 

I was wondering if you might be able to give me a pointer or clue on something to try or anything you could do to help.  I realize this project may be umm.retired? If that's the best way to put it?  Thanks for any help you can give anyways! 



-- 
Coco mailing list
Coco at maltedmedia.com
https://pairlist5.pair.net/mailman/listinfo/coco



More information about the Coco mailing list