Maury Markowitz #1 Posted September 27, 2017 I'm reading over the hardware manual, and if I'm reading it correctly the system wrote to tape by connecting either channel 1 or channel 2 of the POKEY to the data pins if a particular bit was a 1 or 0. However... 1) normally a bit was triggered to the data pins from the shift register when the clock pins went high. But that clock was driven off a POKEY channel. So where was the clock signal for the cassette write? in channels 3 and 4? 2) normally the signal from the POKEY went to the clock pins. Was this true here as well, and the 410/1010 read those pins instead of the data pins? 3) a post here states that the *reading* was accomplished in the deck itself using narrow bandpass filters. if that is the case, what was the output? async bits on the DATA pins? 4) what were the two frequencies for mark and space. Also speculation: given this system, would it not have been possible to make a modem that used POKEY as the A/D? 1 Quote Share this post Link to post Share on other sites
Bryan #2 Posted September 27, 2017 Just a few details off the top of my head. The cassette deck has FSK decoding built in, but not encoding. So, channels 1 and 2 are set to the FSK frequencies which are sent on SIO pin 5 instead of the data bits in 2-tone mode. These tones go straight to the head in record mode. The 410 has frequency detectors for playback to convert the audio to a normal bit stream. The cassette drive uses: Ground Motor Control Audio Data In Data Out The 410 FSM sheds some light on this: http://www.atarimania.com/documents/Atari_410_Program_Cassette_Recorder_Field_Service_Manual.pdf EDIT: 1. AUDF3 is the baud rate according the OS listing. 2. Cassette uses data pins. 3. Yes, regular async data stream. 4. According to the 410 schematic, they're around 4 and 5KHz. OSB: HITONE = $05 ;FSK HI FREQ POKEY COUNTE VALUE (5326 HZ) LOTONE = $07 ;FSK LO FREQ POKEY COUNTER VALUE (3995 HZ) LDY #LOTONE ;SET FSK TONE FREQUENCIES STY AUDF2 LDY #HITONE STY AUDF1 1 Quote Share this post Link to post Share on other sites
Rybags #3 Posted September 28, 2017 (edited) The clock signal is present as an output on the mode that the OS uses by default. It's not used even by the disk drives, most use bit-banging software delay between bit reads. For cassette operations the clock is irrelevant. Tape blocks use the 2 speed measurement bytes $55,$55 (lsb is transmitted first). Software monitors the bitstream and uses the time elapsed to lookup a table containing input bitrate settings for AUDF3/4. This is mainly to compensate for tape stretch but also allows custom tape bitrates to be read without extra software. For read operations the cassette unit itself actually translates the tones to a 0 or 1. The frequencies used are 3995 and 5327 Hz (from DeRe Atari) As the clock line isn't used in tape operations, reading relies on the start bit (0). Bit-banging could be used but since Pokey has the automatic serial shift register it's used. Supposedly there's a 5% tolerance on the set vs actual clock speed. Edited September 28, 2017 by Rybags Quote Share this post Link to post Share on other sites
Maury Markowitz #4 Posted September 28, 2017 Just a few details off the top of my head. The cassette deck has FSK decoding built in, but not encoding. So, channels 1 and 2 are set to the FSK frequencies which are sent on SIO pin 5 instead of the data bits in 2-tone mode. These tones go straight to the head in record mode. The 410 has frequency detectors for playback to convert the audio to a normal bit stream. Most excellent Bryan, this is very helpful! The clock signal is present as an output on the mode that the OS uses by default. It's not used even by the disk drives, most use bit-banging software delay between bit reads. For cassette operations the clock is irrelevant. Tape blocks use the 2 speed measurement bytes $55,$55 (lsb is transmitted first). Software monitors the bitstream and uses the time elapsed to lookup a table containing input bitrate settings for AUDF3/4. This is mainly to compensate for tape stretch but also allows custom tape bitrates to be read without extra software. You use a few terms I'm not familiar with. So let me explain what I understood from the manual and perhaps you can point out where I go wrong. As I read it, the programmer would set the base clock rates using the audio channels. Then the POKEY would read or write bits from the shift register on every assert of the clock. When the register completed the 10-bit read/write, it did an NMI for more data. Is this correct? I have not heard the term "bit-banging" before. I believe the last part you are saying the system used an async read/write, basing the rate stored in $55,$55 ($56?). Is this a "clockless mode" that was used in async modes? Quote Share this post Link to post Share on other sites
Maury Markowitz #5 Posted September 28, 2017 Oh yeah, while I'm here, what was the PROCEED pin used for? Quote Share this post Link to post Share on other sites
Bryan #6 Posted September 28, 2017 As I read it, the programmer would set the base clock rates using the audio channels. Then the POKEY would read or write bits from the shift register on every assert of the clock. When the register completed the 10-bit read/write, it did an NMI for more data. Is this correct? I have not heard the term "bit-banging" before. I believe the last part you are saying the system used an async read/write, basing the rate stored in $55,$55 ($56?). Is this a "clockless mode" that was used in async modes? Pokey can only generate IRQs, not NMIs. Bit-banging means to implement something in software that is more commonly done in hardware. For example, the 1050's serial communications aren't handled by any sort of UART. It's all done with 6532/RIOT pins and software timing code. Oh yeah, while I'm here, what was the PROCEED pin used for? I don't know if anything used it. It was available on the PIA, so they hooked it up. Quote Share this post Link to post Share on other sites
Rybags #7 Posted September 28, 2017 Proceed and Interrupt are pins present on the SIO plug but not used by the Atari tape or disks. Or most peripherals for that matter. In theory they could be used for unsolicited interrupts, e.g. to implement a plug and play where the device gets attention then sends driver code. But Atari didn't quite do things that way so it's a feature not really ever taken advantage of. The serial IO is a little more sophisticated than you'd first believe. There's logic in Pokey that allows that clock drift of 5% or so, and will reset the clock in certain circumstances. But when we say "clock" it's not necessarily referring to the clock signal on the pin. For the most part we can ignore that signal as it's also not used by Atari's tape or disk drives. Quote Share this post Link to post Share on other sites
Wrathchild #8 Posted September 28, 2017 (edited) basing the rate stored in $55,$55 ($56?) By this it was meant that two bytes, both of value $55 (so binary 01010101) are part of the input stream pre-block-amble and the timing of this is used to establish the baud rate. Read the Cassette section of De Re Atari for more Edited September 28, 2017 by Wrathchild Quote Share this post Link to post Share on other sites