[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Disk II Family's Phase
On Sun, 16 Feb 2003, Bryan Parkoff wrote:
> Date: Sun, 16 Feb 2003 17:52:29 -0600
> From: Bryan Parkoff <BParkoff@satx.rr.com>
> Newsgroups: comp.sys.apple2
> Subject: Disk II Family's Phase
>
> It seems to be interesting that standard Disk Drive only uses Phase0
> that is turned on for reading and writing, but all Phase0, Phase1, Phase2,
> and Phase3 are always turned off.
Whether you read from or write to the disk has nothing to do with the phase.
The phase is only used to move the disk's head to a track. As someone mentioned
in an earlier post, turning the phase on and off moves the step motor a bit
(i.e. a half-track) either towards track 0 or towards track 34.
> I wonder why Phase1, Phase2, and Phase 3
> are not used for turning on.
They all are.
> Please explain what Phase do. I understand that it is used for stepping
> arm to move from outer toward inner.
Or vice versa.
> Is it true that stepping arm always move from outer toward inner by
> reading SELECTIVE track and sector?
I'm not sure what you mean by that. The answer is probably "Uh, no, not quite."
Please allow me to try and explain what happens.
It is the job of the RWTS (Read-Write-Track-Sector, a special part of DOS
3.3 that deals with the hardware) to look for the track and sector.
Since there is no way to tell the current track by somehow looking at the
hardware, the RWTS has to keep track of the track everytime it moves the head,
i.e. the track information inside the RWTS is either increased or decreased.
If you are interested in how the disk drive's head is moved, please take a look
at the DOS 3.3 function SEEKABS at address $b9a0:
X = slot number * 16
A = new track
STX $2b; slot number * 16
STA $2a; new track to be set to
CMP $478; compare with old track
BEQ done; exit function via RTS
LDA #0
STA $26; counter
loop: LDA $478; load current track
STA $27; save current track for later
SEC
SBC $2a; subtract new track
BEQ endloop; are we there?
BCS dec; decrease or increase?
EOR #$ff
INC $478; OK, increase current track
BCC label1; jump always
dec: ADC #$fe; #$ff, because of carry ==> -1
DEC $478; decrease current track
label1: CMP $26; compare track with counter
BCC label2
LDA $26; the lesser of the two will be put in A
label2: CMP #$c; lesser than 12? Than new index to table
BCS label3
TAY
label3: SEC
JSR phaseon; $b9ee
LDA $ba11,y; get first delay value for waiting loop
JSR MSWAIT; $ba00 ==> wait a bit
LDA $27; old track number
CLC
JSR phaseoff; $b9f1
LDA $ba1d,y; get second delay value for waiting loop
JSR MSWAIT; $ba00 ==> wait a bit
INC $26; increment counter
BNE loop; jump always
endloop:JSR MSWAIT; wait again
CLC
phaseon:LDA $478; current track
phaseoff: AND #3
ROL ; phase on or off depending on carry
ORA $2b; slot number * 16
TAX
LDA $c080,x; switch phase on/off
LDX $2b; reload x with slot number * 16
RTS
$ba11: BYT $01,$30,$28,$24;delay value for switching phase on
BYT $20,$1e,$1d,$1c
BYT $1c,$1c,$1c,$1c
$ba1d: BYT $70,$2c,$26,$22;delay value for switching phase off
BYT $1f,$1e,$1d,$1c
BYT $1c,$1c,$1c,$1c
> Does it mean that software has NO WAY
> TO TELL hardware to LOCATE track and sector.
Yes, there is no way. It all has to be done by the RWTS. All that comes from
the disk is just a simple bitstream which has to be followed by the RWTS to
detect a sector. This is why it is necessary to put a sector header in
front of the data field to tell the RWTS which track and sector it is
reading at the moment. Perhaps you have wondered, why you hear this strange
"clack-clack" noise coming from your disk drive when you switch on your
AppleII. This occures, because the slot rom at $c600 (normally) will move
the disk head to track 0. Since it has absolutely no way to tell where the
drive head is, it just moves the head 80 times (see address $c63b) towards
track 0. After this, the head must be on track 0, because there are no more
than 80 half-tracks found with a standard 5 1/4 disk drive. The noise you
hear comes from the step motor (or the drive's head? I'm not sure), because
the program still wants to move the drive head even more outside towards
track 0, although it is already there. The hardware does not quite like
this and starts to groan. How much depends on where the drive head was
before you've booted your AppleII. BTW.: There are about 70 half-tracks (at
least) on your disk of which only 35 are used by DOS. The logical track
number (0..34) is doubled internally to give the hardware half-track number
(0..68). This was done, because the original disk drive's head was not precise
enough to read and write data from/to half-tracks, because it could happen
that data was also partly read from/written to the halftrack next to it. Still,
IIRC some copy protections used the half-tracks to store the data (but then
again with a full two half-tracks gap between them) to stop standard copy
programs from copying the tracks since these only moved the head to the usual
half-tracks (0, 2, 4, 6, ...) and not the odd ones (1, 3, 5, ...).
> The hardware's job is to
> retrieve each bit by reading from outer toward inner.
Not necessarily from outer to inner. That depends on how you store your data
on the disk. You may want to start at track 0 and end at 34, or start at 34
and end at 0. The filemanager layer which is put over this is a bit more
abstract using track sector lists (TSL) etc. The DOS 3.3 image is stored on
the first tracks of the disk, and the slot rom ($c600) will always load
track 0, sector 0, but the rest remains up to you.
> In fact is that it is the software's job to SEARCH track and sector
> before track and sector are compared to match user's desire track and
> sector BEFORE 256 bytes in a sector dump into memory.
> Does it make sense?
Yes, the RWTS has to move the drive's head to the right track and then
searches for the sector before it can read it into memory.
In case you are interested in learning more about how the disk drive works,
and you also know a bit of C, may I advice you to take a look at the source
code of some AppleII emulators that also emulate the disk drive.
If you want, you can download the source from AppleWin
("http://www.jantzer-schmidt.de/applewin/") or Dapple
("http://sourceforge.net/projects/dapple"). Both source codes are publicly
available with the AppleWin source code probably being the more accurate
one. You will find here in much more detail how the disk drives actually work.
Kind regards
Holger