Sony 700 series FDD behaviour

Página 2/2
1 |

Por RetroTechie

Paragon (1563)

Imagen del RetroTechie

08-03-2010, 08:59

You can only stop the drive motor immediately after disk I/O when there's hardware to provide a timeout before the motor is switched off. When no such hardware support is present, a next read/write would happen with floppy at half speed or stopped -> disk I/O error.

The interrupt counter serves to keep the floppy spinning between successive disk reads/writes, and only stop the drive motor when it hasn't been used for a while (~5 seconds). Each new read/write resets that interrupt counter (=delay before stopping drive motor).

To complicate things further: a disk interface (MSX, PC, or other systems) can be wired up to control drive motors on a per-drive basis. Optimal would be if floppy drives themselves would implement such a timeout, and signal back to controller whether it's on operating speed or not. Unfortunately that's not exactly how things work.

Por flyguille

Prophet (3031)

Imagen del flyguille

08-03-2010, 20:47

You can only stop the drive motor immediately after disk I/O when there's hardware to provide a timeout before the motor is switched off. When no such hardware support is present, a next read/write would happen with floppy at half speed or stopped -> disk I/O error.

The interrupt counter serves to keep the floppy spinning between successive disk reads/writes, and only stop the drive motor when it hasn't been used for a while (~5 seconds). Each new read/write resets that interrupt counter (=delay before stopping drive motor).

To complicate things further: a disk interface (MSX, PC, or other systems) can be wired up to control drive motors on a per-drive basis. Optimal would be if floppy drives themselves would implement such a timeout, and signal back to controller whether it's on operating speed or not. Unfortunately that's not exactly how things work.

yes, we all knows already for what is the "motor time out".

And as I wrote, if you has the hardware mechanism to do the timeout, you can by software to turn off the motor *inmediately after I/O*, delegating the time out to the hardware, IF a new I/O/SEEK is execute, it sends a power on again, and THIS RECHARGE UP the capacitor, so there is no timeout in between several disk accesses, no spin slowdown. Only if there is no accesess in about 5 seconds, the capacitor finishs the discharge, and the motor is really powered off. This is easy for mounting in the PCB of the controller (you can to piggy the capacitor and resitors on preexisting controllers easily), you do not needs to modify the drives standard.

But I imagine what was ..... hardware developers JUST burns the Microsoft Disk Basic 1.0 ROM compiled for the HDxxx / WDxxx controller that they has, without bothering in any improve, so, they just builded the PCB and all the ensambling.

Maybe, the developers never before used *bad ported from spectrum games*, so they did not know the problem anyway... who knows!

Por meits

Scribe (6530)

Imagen del meits

08-03-2010, 21:54

It's not the badly hacked stuff which made me see the differences between the sony and philips diskrom (my sony has both diskroms inside with a switch). Almost all diskgames from Japan suffered from this on the Philips diskrom while the sony diskrom switched off the drive.
So if i wanted to play a japanese game, i've to turn the thing into sony diskrom mode...

Too bad though that this sony died on my a year ago... I liked that switchable diskrom concept Big smile

Por flyguille

Prophet (3031)

Imagen del flyguille

09-03-2010, 00:06

It's not the badly hacked stuff which made me see the differences between the sony and philips diskrom (my sony has both diskroms inside with a switch). Almost all diskgames from Japan suffered from this on the Philips diskrom while the sony diskrom switched off the drive.
So if i wanted to play a japanese game, i've to turn the thing into sony diskrom mode...

Too bad though that this sony died on my a year ago... I liked that switchable diskrom concept Big smile

so, you has

original ROM: slow, but it turn off motor inmediately after I/O, delegating the real turning off in hardware.
philips ROM: fast, but it do not turn the motor off inmediately after I/O, it has a time out routine hooked at interrupt. So if interrupt is overriden, the capacitor never gets discharged and real motor off event.

Por flyguille

Prophet (3031)

Imagen del flyguille

09-03-2010, 00:10

is not better to path the philips ROM, with a path , (just a call), to the turn motor off, after any I/O?

and that way to get the best of both ROMs?

Por RetroTechie

Paragon (1563)

Imagen del RetroTechie

09-03-2010, 10:31

If you leave the drive motor running after read/write, then on a next read/write you can just check that interrupt counter to see if it is still running. If yes, you can immediately proceed with head positioning & read/write.

If you stop the drive motor after each read/write, then there's no way to know if the drive is still running (at operational speed). There's a hardware signal to help determine that (#READY), but it isn't always available or may mean different things to different floppy drives. Therefore you'd have to give the drive time to spin up (typically ~1 second), before attempting the read/write. That spin-up time for every block of sectors read/written is a _heavy_ price to pay. Perhaps this is the reason of old Sony diskROM slowness (I don't think so, but not 100% sure).

is not better to path the philips ROM, with a path , (just a call), to the turn motor off, after any I/O? and that way to get the best of both ROMs?
You're welcome to try... I'd expect to get lots of read/write errors (see above why). Personally, I prefer to get rid of floppies alltogether... Running Naked in a Field of Flowers
Btw: it's safe to remove floppies while spinning, as long as no read/write is taking place... no need to leave a disk spinning forever.

Por flyguille

Prophet (3031)

Imagen del flyguille

09-03-2010, 18:02

If you leave the drive motor running after read/write, then on a next read/write you can just check that interrupt counter to see if it is still running. If yes, you can immediately proceed with head positioning & read/write.

If you stop the drive motor after each read/write, then there's no way to know if the drive is still running (at operational speed). There's a hardware signal to help determine that (#READY), but it isn't always available or may mean different things to different floppy drives. Therefore you'd have to give the drive time to spin up (typically ~1 second), before attempting the read/write. That spin-up time for every block of sectors read/written is a _heavy_ price to pay. Perhaps this is the reason of old Sony diskROM slowness (I don't think so, but not 100% sure).

is not better to path the philips ROM, with a path , (just a call), to the turn motor off, after any I/O? and that way to get the best of both ROMs?
You're welcome to try... I'd expect to get lots of read/write errors (see above why). Personally, I prefer to get rid of floppies alltogether... Running Naked in a Field of Flowers
Btw: it's safe to remove floppies while spinning, as long as no read/write is taking place... no need to leave a disk spinning forever.

no, you are wrong.

first, if the timeout is done by hardware, you do not needs to do any check!.

just set the bit that turn on the motor is faster, and turn off that bit after I/O.

why you are forcing a discussion without sense?

the #ready signal test is already in the microsoft code and is the normal procedure before to starts I/O transfers The #ready is only triggered if spin speed is OK, and the header is positioned, and is ready to receive buffer's data.

so, there is no possibility of any I/O error.

THE REAL TURNING ON/OFF OF THE MOTOR is DONE like the light in a building HALL, with a "hardware timeout", so, what the hell if you push the button 100 times! or just one time.... it is the same!.

so, first set motor on, do the SEEK wait ready signal, do I/O stuff, reset the "motor on" BIT (it is the equivalent of not pressing the button in the building HALL), then it you move to other floor, you can to push it again to giveyou more time to walk. but STOP pressing it DO NOT MEANS that the light will be off inmediately, you have a HARDWARE TIME OUT.

so, what the hell you are discussing me?

because here already somebody wrote that sony 700 already has a timeout done in hardware, and has two ROMs , one slow, other fast but it do not RESET the motor on inmediately after (because is from philips that HAS not a hardware timeout)

so, I wrote, burns a patch to the philips ROM, coding a call to reset "the motor on" bit, before exits any I/O, and make sure that here is no a check for setting the motor on bit at the beggining.

That way the philips ROM will works like the SONY one, and you has both benefits, FAST, and using hardware time out.

Por RetroTechie

Paragon (1563)

Imagen del RetroTechie

10-03-2010, 18:47

If you leave the drive motor running after read/write, then on a next read/write you can just check that interrupt counter to see if it is still running.
no, you are wrong.

first, if the timeout is done by hardware, you do not needs to do any check!.
I was explaining the behaviour of a diskROM+hardware combo that does use the interrupt-counter method.

Checked again that driver source linked earlier (that one which writes "SNYJX205" in the bootsector when formatting, IIRC not a very slow diskROM - I've seen worse). Can't find any interrupt-counter stuff in it, and it appears to stop the drive immediately after end of read/write operation. Before start of a read/write, it turns on drive and waits for #READY signal to become active. This wait times out (after ~1 second I'd guess, didn't bother to calculate), after which rest of operation continues (if I'm reading the code correctly). This would imply some things:

  • When starting a read/write operation, the diskROM relies on the hardware to provide a #READY signal that does what you'd expect, OR you have that ~1 sec. penalty every time you read/write a block of sectors.
  • Between read/write operations, the drive motor is stopped. Read: repetitive slowdown/speedup between read/write operations? Not likely! (extra wear for drive+floppies). If this is not what happens on the hardware side, it would mean that:
  • There is indeed hardware in the Sony 700 that keeps drive motor running for a while, even after the diskROM said "stop!". Possible: after all the Sony 700 uses a small custom IC (CXD1032) to control these signals.

Maybe some Sony 700 owner is willing to check this? Inspect timing-hook to see that it isn't used, move BASIC start up to C000h, manipulate slot selection to switch diskROM-slot (read: mirror of FDC registers) into BFF8~BFFFh, place disk in drive, use POKE to manipulate FDC registers to start/stop drive motor, and see if it stops immediately after "off" POKE, or some delay+stop. If the latter, flyguille's suggestion may just work. Big smile

Btw. problem with relying on #READY signal is not that it doesn't work, but that hardware must support it. Read: problems if you replace floppy drive with another one, that thinks #DiskChange is more interesting. Without jumper to put #READY on that pin. Or whatever signal. With #READY wired to always show "on", a diskROM has to do some things differently, but replacing floppy drive has less chance of problems.

Página 2/2
1 |