ALTO DISK TOOL
The steps that will occur and must be verified, with completed steps in gray:
- Readsector logic is waiting for a sector match
- Indexmarker occurs, signalling that next sector mark is for sector 0
- Sectormark occurs, thus we are in sector 0 now
- Gotsector is emitted to indicate we have a match
- Readsector logic moves on to setup for record 1 of the sector
- Readfield logic is triggered
- Readfield waits for approximate 200 us preamble before looking at incoming data
- Roughly 120 us of zero data bits are seen
- A 1 data bit completes the sync word
- the logic recognizes the synced state
- Two words of the header record are deserialized, extracted and saved
- The checksum is calculated correctly for the two words of the header record
- The next word is deserialized, extracted and used as a checksum
- The checksum verification test occurs properly
- The readfield logic completes
- The deserializer goes to the unsynchronized state
- The readfield logic for the next record, label, begins
- The appropriate preamble is passed before we look for sync
- Enough zero bits are read to properly set up sync logic
- A 1 bit is read and the sync condition is attained
- Eight words of the label record are deserialized, extracted and saved
- The checksum is properly calculated for the 8 label words
- The next word is deserialized, extracted and used as a checksum
- The checksum verification test is done correctly
- The readfield logic ends
- Sync is dropped
- The readfield logic is entered for the data record
- A suitable preamble is passed before attempting sync
- Enough zeroes are read for the sync engine to work properly
- A 1 bit arrives and we attain the sync condition
- 256 words are deserialized, extracted and saved as the data record
- The checksum is properly calculated
- The next word is deserialized, extracted and saved as the checksum
- The final checksum test is done properly
- Readfield logic ends
- Sync is dropped
- The readsector logic completes
- Appropriate completion status is set in Reg0001
- The next sectormark does not occur until after step 36
I brought out several more signals and wired them to the logic analyzer, before running more tests. They helped quite a bit in testing the next few items on the list above. I came to a few immediate conclusions:
- the checksum word is not read properly from disk - comes in as 0000
- i am matching on the proper sector number
- my logic to save the checksum status in Reg0001 is not correct
All of my testing to date is predicated on the belief that the disk cartridge I received, labeled Alto Smalltalk, is in fact written by an ALTO and in the proper three record per sector format of that machine.
I decided to record all the data bits on sector zero and see if they match up to what I should be seeing. I checked cylinders 0, 5 and 10 with sector 0, all good. I will check a few other cylinders and sectors for their formatting.What I noticed is that when I set Head to 0, I see a header field with the bit x0004 set, and Head of 1 gets x0000 so I probably have the sense of Head inverted.
I made some tweaks to deal with the checksum error status recording and to reset all transactions anytime the command register (Reg0000) goes to zero. Time to resume testing. It does appear I am recording the checksum errors now
I see that my deserializer is not properly handling the serial stream. Where the disk has 002C my extraction was 602C. It began with spurious bits, but when I look on the logic analyzer the Read Data line was always 0 and should not have triggered a 1 into the shift register.
I have not completed step 11 above, but feeling good about the progress. I am going to stare at my deserializer and think about what I can do to improve its accuracy, perhaps by recoding.
No comments:
Post a Comment