Microdrive Unit Design

Nagging hardware related question? Post here!
User avatar
Pr0f
QL Wafer Drive
Posts: 1298
Joined: Thu Oct 12, 2017 9:54 am

Re: Microdrive Unit Design

Post by Pr0f »

I think the calculations are fine, but work for 4 bits not 8, so the bandwidth is double for 8 bits, or to put another way, your time for 8 bits should be doubled - in a logical sense the 2 heads make the tape double the length, although I suspect the heads are interleaved to guarantee the throughput from system.

It would be fun to get a scope on the Microdrives and the ZX8302 ULA and see what is written.


tcat
Super Gold Card
Posts: 633
Joined: Fri Jan 18, 2013 5:27 pm
Location: Prague, Czech Republic

Re: Microdrive Unit Design

Post by tcat »

Yes, I see.

But how the tracks are switched to make a single continuous stream?
two track byte stream
two track byte stream
byte-stream.png (5.97 KiB) Viewed 5948 times
The QL Service Manual gives this explanation.
7.3.2 Data is recorded on two tracks using a standard stereo cassette head arrangement and is written in bytes, one byte to one track and the next
byte to the other track. It is recovered in the same way. The tape itself is one continuous loop. Since hardware takes care of switching between
tracks the software sees the tape as one doublelength single track.
Tomas


User avatar
dex
Gold Card
Posts: 286
Joined: Thu Dec 23, 2010 1:40 pm

Re: Microdrive Unit Design

Post by dex »

Image


User avatar
Pr0f
QL Wafer Drive
Posts: 1298
Joined: Thu Oct 12, 2017 9:54 am

Re: Microdrive Unit Design

Post by Pr0f »

For reading (taken from js rom disassembly):

;Initialise microdrive registers

L52B8 move.w #256,d0 ;initial attempts
move.w #$0F0F,d3 ;initialise checksum
moveq #0,d4
moveq #pc..rxrd,d6 ;port bit for read buffer ready
lea pc_trak1-pc_mctrl(a3),a2 ;microdrive read track1 port
lea pc_trak2-pc_mctrl(a3),a4 ; " " " 2 "
rts

;Read microdrive data to buffer

L52CE bsr.s L52B8 ;initialise registers
L52D0 btst d6,(a3) ;read buffer ready ?
dbne d0,L52D0 ;exit when ready or if attempts exhausted
exg a4,a4 ;(slight wait)
move.b (a2),d4 ;read first data byte from track port 1
exg a2,a4 ;alternate track pointers
move.b d4,(a1)+ ;data to buffer
add.w d4,d3 ;accumulate checksum
tst.w d0 ;initial attempts counter exhausted ?
blt L5446 ;yes, return outcome failed
moveq #20,d0 ;(redundant loop counter)
subq.w #1,d1 ;decrement byte counter

Writing - I don't know - the whole area of serialized data output by the zx8203 seems to be bit banging - whether it's serial, network, ipc comms or Microdive...


tcat
Super Gold Card
Posts: 633
Joined: Fri Jan 18, 2013 5:27 pm
Location: Prague, Czech Republic

Re: Microdrive Unit Design

Post by tcat »

Hi,

@ Dex, picture showing it nicely.
@ Prof, yes the idea of reading two h/w registers, each having one byte of data from either track. Reading is driven by ZX8302 triggering a gap interrupt for MC68000.

Tom


tcat
Super Gold Card
Posts: 633
Joined: Fri Jan 18, 2013 5:27 pm
Location: Prague, Czech Republic

Re: Microdrive Unit Design

Post by tcat »

If the above correct then 44 um (microns) of tape must accommodate 8 bits, and that is 2*8 FM transitions, we already learnt.
How could this be at all achieved?
The answer lies in the head construction and tape quality capable of enough magnetic density.
Searching web shows many head types, but principally all work is done by a tiny gap, its width in order of micrometers!
Gap breaks the magnetic tube and its property so called `flux', is forced out, trailing the magnetic states in tiny parts of tape.

We may possibly observe a gap on the head face with a ray of light, coming from an angle?
To visualise, compare the thickness of:
human's hair - 80 [um]
spider's web - 7 [um]
head construction gap
head construction gap
head-gap.png (11.79 KiB) Viewed 5882 times
EDIT, I wish to also include calculations of Sector & Byte length based on time and speed.

Code: Select all

SectorLenght[mm] = SectorTime[us] / 10^6 * TapeLength[mm] / LoopTime[s]
ByteLenght[mm] = SectorLenght[mm] / BytesPerSector[n]
i.e.
31760 / 10^6 * 5080 / 7.19 = 22.44mm
22.44 / 512 ~ 0.044mm

That corresponds to roughly an inch per sector and 44 microns per byte, too.

Tomas


User avatar
Cristian
Aurora
Posts: 960
Joined: Mon Feb 16, 2015 1:40 pm
Location: Veneto

Re: Microdrive Unit Design

Post by Cristian »

tcat wrote:
I don't think that a so slight speed difference could be sufficient to produce such results.
Consider Loop time formula.

Code: Select all

LoopTime[s] = TapeLenght[mm] / ( RollerDiameter[mm] * PI) / MotorSpeed [r/m] * 60
Another information about that top-performance cartridge: the speedtest reported (and continues to report) 7 secs / 2310 rpm


tcat
Super Gold Card
Posts: 633
Joined: Fri Jan 18, 2013 5:27 pm
Location: Prague, Czech Republic

Re: Microdrive Unit Design

Post by tcat »

Hi Cristian,

I wish I could explain that, my argument was that tape speed is one of the sensitive factors having some influence on it.
Please consider:
0.25 secs * 10^6 / 31760 ~ 8 sectors.
1/4 of a second then corresponds to 8 sectors on tape, where each sector is 512 byte long.
225 nominal +/- 8 sectors
The drive deviation and my tool precision is just 0.25 secs.

If you are not too disappointed, we could continue in this quest. Other exercise could be to take an Iss#6 drive and adjust its speed slightly by 0.25s in the hope to bring it to higher performance. This is not an irreversible change!
But again I may be wrong.

Tomas


User avatar
Cristian
Aurora
Posts: 960
Joined: Mon Feb 16, 2015 1:40 pm
Location: Veneto

Re: Microdrive Unit Design

Post by Cristian »

Sure, I got your argument and I agree. I simply shared some extra info I forgotted to share before.
No disappointment from my side at all. Please feel free to explain the speed adjusting procedure: I'll consider it but I can't promise anything


tcat
Super Gold Card
Posts: 633
Joined: Fri Jan 18, 2013 5:27 pm
Location: Prague, Czech Republic

Re: Microdrive Unit Design

Post by tcat »

I borrow this explanation from other MD related thread.
There is a small hole on the bottom of the motor. Through it you can adjust preset potentiometer to change speed.
The potentiometer increases speed when turned clockwise (as viewed from bottom of motor). The speed range was quite limited, so adjustment isn't too critical. The angular movement is typical for a preset, about 300 degrees.
I have not tried this myself, I would go for 1/4 anti-clockwise turn for a start, and run `mSpeed' before and after adjustment, to spot any difference. EDIT then fine tune with 1/8 turns.

The hole is covered by a seal, which is punctured already from a factory setting, so I was told.

Tomas


Post Reply