Jump to content

Farb

Members
  • Posts

    860
  • Joined

  • Last visited

Everything posted by Farb

  1. [quote name=Sub(Function()' timestamp='1326318406' post='2442343] I have the original manual here with me I can try and scan it at work if you want. That would be awesome!
  2. That's a good point and let's dive into that. The Atari uses soft sectoring (no index hole) vs. hard sectoring (index hole used). So, the Atari drive's floppy controller has to rely on the track data to figure out where the first sector on the track begins. I found Frankenstein's excellent article in Mega Magazine #6 that describes the layout of an SD track. Attached is a diagram I put together from the information. So when you refer to where a track "starts", you mean the physical position of the "start of track" index mark within the track ring (the red area in my first diagram), correct? I'm also assuming that when people refer to sector skew alignment being consistent, it means that those "start of track" index marks are all aligned with each other across all tracks. Am I getting it so far?
  3. Actually, my hope for this thread is to focus on drive timing emulation which is independent of any sort of copy protection. It just happens to have a positive effect on copy protection checks if the timing is correct I have read the two Alpha Systems books (just recently actually) and they are very good references. I will have to find the Super Archiver manual as I've seen it mentioned a few times. Thanks for the suggestion.
  4. Is it safe to say that the majority of copy protected releases were SD? I'd like to keep a single frame of reference and I assume the information captured here will be applicable to ED disks as well with minimum translation. I think it might complicate the discussions if we try to address 26 sectors per track simultaneously since it's a different physical layout. If it's deemed critical, though, I'll try to incorporate it. We would have to change the discussion to use the 1050 as the point of reference drive since ED disks couldn't be read by standard 810s.
  5. As the result of discussions in various other forum topic, it's pretty clear that accurate drive timing emulation is necessary to properly pass many copy protection checks. I realize many people here already understand this really well. I'd simply like to get the information precisely detailed as a reference to others (including myself) who are just getting into this for the first time. My understanding is that the only commercial disks released with copy protection were single-density (90k) disks, so I think it makes sense to limit the discussion to those types of disks only. I also realize that different drives had different specifications that might alter some of the variables. Unless someone feels otherwise, let's constrain the discussion to the behavior of the Atari 810 drive and its WD1771 controller. I've taken the liberty of creating a diagram of how I currently understand an Atari disk to be physically structured (attached). Please let me know if any of the details are incorrect. I am going under the following assumptions: 1. Track numbering is always consistent. 2. Sector layout/numbering can vary depending on how they were written to the disk. Does this all make sense?
  6. Here's a pic of SIO2Arduino running on the Arduino Uno with an LCD screen.
  7. I'd love to play with it if it gets released.
  8. I've updated the firmware code and project page with support for the Arduino Uno as well as an optional LCD display to show the name of the currently mounted image. It should now be possible to try some of the smaller Arduino boards that could easily fit inside an Atari case (although I probably won't be doing it myself anytime soon). I've also got PRO image support working pretty well... it now boots all PRO images that I've tried so far. Next up will hopefully be support for the SDRIVE control software
  9. I haven't heard any reason not to do so, so here are my current reverse engineering notes: http://www.whizzosoftware.com/sio2arduino/prosys.html Hopefully others can help fill in some of the blanks.
  10. Not necessarily. I image all of my original disks as PRO images so I know they came from originals (vs. a found ATR for example).
  11. Here is the PRO image I created. Everest Explorer.zip
  12. I've got one in the same condition I'll sell for $40 shipped in the U.S. if anyone is interested :-)
  13. @ijor, thanks for the explanation. I would be very interested in emulating accurate timing. Is there any recommended old reference document or book that would help in the regard?
  14. Well, the actual read times for sector data when read from the SD backing store individually (no track buffering) is under 10ms. So, as phaeron mentioned earlier, I if I just make all sector reads take a consistent 75ms, the skew check seems to pass. That seems to be the easiest route to the goal and I'll only enable it if a PRO image is mounted.
  15. That's a good pointer in the right direction, phaeron. As a test, I tried making EVERY sector read consistently take 111ms and that worked. However, trying to make all sector reads take a consistent amount of time (6ms) and all track changes a consistent amount of time (105ms) doesn't work. So there's still something I'm not understanding. For example, here's a log of a failed load: 31 52 1 0 84 : READ 1 Changing tracks Read sector and sent complete in 111576 us 31 52 2 0 85 : READ 2 Read sector and sent complete in 6160 us 31 52 3 0 86 : READ 3 Read sector and sent complete in 6156 us 31 52 4 0 87 : READ 4 Read sector and sent complete in 6152 us 31 52 5 0 88 : READ 5 Read sector and sent complete in 6152 us 31 52 6 0 89 : READ 6 Read sector and sent complete in 6160 us 31 52 31 0 B4 : READ 49 Changing tracks Read sector and sent complete in 111548 us 31 52 32 0 B5 : READ 50 Read sector and sent complete in 6156 us 31 52 33 0 B6 : READ 51 Read sector and sent complete in 6160 us 31 52 34 0 B7 : READ 52 Read sector and sent complete in 6164 us 31 52 9 0 8C : READ 9 Changing tracks Read sector and sent complete in 111568 us 31 52 9 0 8C : READ 9 Read sector and sent complete in 6156 us 31 52 A 0 8D : READ 10 Read sector and sent complete in 6156 us 31 52 B 0 8E : READ 11 Read sector and sent complete in 6160 us 31 52 C 0 8F : READ 12 Read sector and sent complete in 6164 us 31 52 D 0 90 : READ 13 Read sector and sent complete in 6156 us 31 52 E 0 91 : READ 14 Read sector and sent complete in 6180 us 31 52 F 0 92 : READ 15 Read sector and sent complete in 6156 us 31 52 10 0 93 : READ 16 Read sector and sent complete in 6160 us 31 52 11 0 94 : READ 17 Read sector and sent complete in 6160 us 31 52 12 0 95 : READ 18 Read sector and sent complete in 6156 us 31 52 13 0 96 : READ 19 Changing tracks Read sector and sent complete in 111568 us 31 52 14 0 97 : READ 20 Read sector and sent complete in 6160 us 31 52 15 0 98 : READ 21 Read sector and sent complete in 6152 us 31 52 16 0 99 : READ 22 Read sector and sent complete in 6160 us 31 52 17 0 9A : READ 23 Read sector and sent complete in 6160 us 31 52 18 0 9B : READ 24 Read sector and sent complete in 6160 us 31 52 19 0 9C : READ 25 Read sector and sent complete in 6156 us 31 52 1A 0 9D : READ 26 Read sector and sent complete in 6156 us 31 52 1B 0 9E : READ 27 Read sector and sent complete in 6160 us 31 52 1C 0 9F : READ 28 Read sector and sent complete in 6152 us 31 52 1D 0 A0 : READ 29 Read sector and sent complete in 6164 us 31 52 1E 0 A1 : READ 30 Read sector and sent complete in 6156 us 31 52 1F 0 A2 : READ 31 Read sector and sent complete in 6152 us 31 52 20 0 A3 : READ 32 Read sector and sent complete in 6152 us 31 52 21 0 A4 : READ 33 Read sector and sent complete in 6160 us 31 52 22 0 A5 : READ 34 Read sector and sent complete in 6152 us 31 52 23 0 A6 : READ 35 Read sector and sent complete in 6156 us 31 52 24 0 A7 : READ 36 Read sector and sent complete in 6156 us 31 52 25 0 A8 : READ 37 Changing tracks Read sector and sent complete in 111568 us 31 52 26 0 A9 : READ 38 Read sector and sent complete in 6156 us 31 52 27 0 AA : READ 39 Read sector and sent complete in 6152 us 31 52 28 0 AB : READ 40 Read sector and sent complete in 6160 us 31 52 1 0 84 : READ 1 Changing tracks Read sector and sent complete in 111564 us 31 52 9 0 8C : READ 9 Read sector and sent complete in 6164 us 31 52 32 0 B5 : READ 50 Changing tracks Read sector and sent complete in 111552 us 31 52 29 0 AC : READ 41 Read sector and sent complete in 6160 us 31 52 29 0 AC : READ 41 Using phantom sector Read sector and sent complete in 13952 us 31 52 36 0 B9 : READ 54 Read sector and sent complete in 6160 us 31 52 1 0 84 : READ 1 Changing tracks Read sector and sent complete in 111564 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6156 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6160 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6156 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6152 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6164 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6156 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6160 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6156 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6156 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6160 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6156 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6160 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6164 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6160 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6152 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6152 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6156 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6160 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6156 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6148 us 31 52 A3 0 27 : READ 163 Changing tracks Read sector and sent complete in 111560 us 31 52 13 0 96 : READ 19 Changing tracks Read sector and sent complete in 111552 us 31 52 37 0 BA : READ 55 Changing tracks Read sector and sent complete in 111560 us 31 52 25 0 A8 : READ 37 Changing tracks Read sector and sent complete in 111552 us 31 52 6D 0 F0 : READ 109 Changing tracks Read sector and sent complete in 111552 us 31 52 37 0 BA : READ 55 Changing tracks Read sector and sent complete in 111548 us 31 52 1 0 84 : READ 1 Changing tracks Read sector and sent complete in 111568 us 31 52 49 0 CC : READ 73 Changing tracks Read sector and sent complete in 111552 us 31 52 FD 0 81 : READ 253 Changing tracks Read sector and sent complete in 111540 us 31 52 5B 0 DE : READ 91 Changing tracks Read sector and sent complete in 111552 us 31 52 6D 0 F0 : READ 109 Changing tracks Read sector and sent complete in 111572 us 31 52 6D 0 F0 : READ 109 Read sector and sent complete in 6160 us 31 52 D9 0 5D : READ 217 Changing tracks Read sector and sent complete in 111540 us 31 52 1 0 84 : READ 1 Changing tracks Read sector and sent complete in 111564 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6160 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6156 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6148 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6160 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6156 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6164 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6152 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6160 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6156 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6156 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6156 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6156 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6160 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6156 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6160 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6164 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6160 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6164 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6156 us 31 52 1 0 84 : READ 1 Read sector and sent complete in 6160 us 31 52 D9 0 5D : READ 217 Changing tracks Read sector and sent complete in 111544 us 31 52 13 0 96 : READ 19 Changing tracks Read sector and sent complete in 111556 us 31 52 A3 0 27 : READ 163 Changing tracks Read sector and sent complete in 111560 us 31 52 25 0 A8 : READ 37 Changing tracks Read sector and sent complete in 111552 us 31 52 1 0 84 : READ 1 Changing tracks Read sector and sent complete in 111560 us 31 52 37 0 BA : READ 55 Changing tracks Read sector and sent complete in 111552 us 31 52 6D 0 F0 : READ 109 Changing tracks Read sector and sent complete in 111552 us 31 52 49 0 CC : READ 73 Changing tracks Read sector and sent complete in 111552 us 31 52 6D 0 F0 : READ 109 Changing tracks Read sector and sent complete in 111548 us 31 52 5B 0 DE : READ 91 Changing tracks Read sector and sent complete in 111556 us 31 52 7F 0 3 : READ 127 Changing tracks Read sector and sent complete in 111580 us 31 52 6D 0 F0 : READ 109 Changing tracks Read sector and sent complete in 111552 us 31 52 49 0 CC : READ 73 Changing tracks Read sector and sent complete in 111548 us
  16. Unfortunately, the device only has 8K of RAM so I can't load much data into memory from the backing store. I tried changing my algorithm to load and retain a track's worth of sector data at a time. My hope was that each time a skew check read a sector on a different track, the overall time to read a track and return a sector within it would be fairly consistent. It seems that there is a variance of around 1-2 milliseconds between each skew check read and that doesn't appear to cut it as the image still won't load.
  17. That makes sense. Here's what I see: 31 52 1 0 84 : READ 1 31 52 2 0 85 : READ 2 31 52 3 0 86 : READ 3 31 52 4 0 87 : READ 4 31 52 5 0 88 : READ 5 31 52 6 0 89 : READ 6 31 52 31 0 B4 : READ 49 31 52 32 0 B5 : READ 50 31 52 33 0 B6 : READ 51 31 52 34 0 B7 : READ 52 31 52 9 0 8C : READ 9 31 52 9 0 8C : READ 9 31 52 A 0 8D : READ 10 31 52 B 0 8E : READ 11 31 52 C 0 8F : READ 12 31 52 D 0 90 : READ 13 31 52 E 0 91 : READ 14 31 52 F 0 92 : READ 15 31 52 10 0 93 : READ 16 31 52 11 0 94 : READ 17 31 52 12 0 95 : READ 18 31 52 13 0 96 : READ 19 31 52 14 0 97 : READ 20 31 52 15 0 98 : READ 21 31 52 16 0 99 : READ 22 31 52 17 0 9A : READ 23 31 52 18 0 9B : READ 24 31 52 19 0 9C : READ 25 31 52 1A 0 9D : READ 26 31 52 1B 0 9E : READ 27 31 52 1C 0 9F : READ 28 31 52 1D 0 A0 : READ 29 31 52 1E 0 A1 : READ 30 31 52 1F 0 A2 : READ 31 31 52 20 0 A3 : READ 32 31 52 21 0 A4 : READ 33 31 52 22 0 A5 : READ 34 31 52 23 0 A6 : READ 35 31 52 24 0 A7 : READ 36 31 52 25 0 A8 : READ 37 31 52 26 0 A9 : READ 38 31 52 27 0 AA : READ 39 31 52 28 0 AB : READ 40 31 52 1 0 84 : READ 1 31 52 9 0 8C : READ 9 31 52 32 0 B5 : READ 50 31 52 29 0 AC : READ 41 31 52 29 0 AC : READ 41 31 52 36 0 B9 : READ 54 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 7F 0 3 : READ 127 31 52 13 0 96 : READ 19 31 52 D9 0 5D : READ 217 31 52 25 0 A8 : READ 37 31 52 1 0 84 : READ 1 31 52 37 0 BA : READ 55 31 52 FD 0 81 : READ 253 31 52 49 0 CC : READ 73 31 52 D9 0 5D : READ 217 31 52 5B 0 DE : READ 91 31 52 7F 0 3 : READ 127 31 52 6D 0 F0 : READ 109 31 52 FD 0 81 : READ 253 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 1 0 84 : READ 1 31 52 A3 0 27 : READ 163 31 52 13 0 96 : READ 19 31 52 A3 0 27 : READ 163 31 52 25 0 A8 : READ 37 31 52 6D 0 F0 : READ 109 31 52 37 0 BA : READ 55 31 52 13 0 96 : READ 19 31 52 49 0 CC : READ 73 31 52 D9 0 5D : READ 217 31 52 5B 0 DE : READ 91 31 52 EB 0 6F : READ 235 31 52 6D 0 F0 : READ 109 31 52 49 0 CC : READ 73
  18. Puzzling, when I try booting the Archon I PRO image with Alitirra 2.00 (on a Mac under Parallels), the emulator just crashes around sector 50. It appears that each time I boot, the first sector read after the batch of 21 sector 1 reads is different. I think that jibes with your comment that the loader is using SIOV. I wonder if it's vectoring based on timing or something strange like that?
  19. I'm using the same terminology that the PRO format uses. I believe what PRO calls a phantom sector is indeed a duplicated sector -- multiple reads of the same sector return different data. In the case of PRO, it can alternate between 5 sets of additional sector data. Interesting, I wasn't familiar with skew alignment... your nice writeup on the VAPI site clarified that for me. I will have to check if the problem lies in my emulation of the duplicate sector or the the timing of sector reads.
  20. Thanks for SIO dump of the Archon load, phaeron. I didn't know that Altirra could do that! I don't disagree that VAPI/ATX is a better format for imaging copy-protected disks. My problem with it is the same problem I have with the SPS's IPF format -- there's no way for an end-user to create disk images (someone please correct me if I'm mistaken here). I realize that both ATX and IPF are WAY better for creating preservation quality images. When I can personally create an ATX file from a physical disk, it will become more interesting to me. Right now, PRO is the only format that allows me to do that and hence why I want to support it in SIO2Arduino. I personally have a lot of working PRO images I've made from my disk collection and I haven't seen any other hardware-based Atari drive emulators that can load them. Plus, the past few evenings have been a fun lesson in Atari disk copy protection which has always been a fascinating mystery to me. Anyway, my intent with the thread wasn't to be an advocate for the PRO format. It exists for better or for worse and very few people know how it works. I definitely feel it deserves credit for what it is and it would be great for it to be properly documented. I was questioning whether I should help get the ball rolling on that front or whether it would ruffle any feathers.
  21. I've made an update to SIO2Arduino on GitHub that has partial support for PRO protected disk images. It can successfully boot 5 of the 6 PRO images that are included with APE.
  22. I have most of the PRO images that come with APE working properly (Bandits, Jumpman, Karateka, Archon 2, Ballblazer)... although Archon 1 is still giving me trouble for some reason even though it only has one phantom sector and uses phantom mode 2 the same as the others. I'll contact Steve and see if he's willing to help fill in some of the gaps.
×
×
  • Create New...