Nezgar Posted June 2, 2018 Share Posted June 2, 2018 Following up on previous related threads: http://atariage.com/forums/topic/85478-810-rom-images/ http://atariage.com/forums/topic/269694-improved-sector-layout-cx8111/ This ROM has never previously been dumped, and to my knowledge until now it's not been available online. After identifying the likely part number, I've been watching for it... I made attempts to acquire some I spotted in a lot for sale on Facebook that never panned out, but I was surprised when Best Electronics confirmed they had one and sold me their last one. And finally big thanks to Bryan who agreed to dump it. He had experience with this process before dumping the Rev C ROM. Bryan said this ROM is a really weird old pinout, and the schematic seems to erroneously show active low select lines pulled high and he had to try several combinations to get it to work. (Scroll to the end of this post for the file link)I confirmed that this Rev B ROM formats a disk with a 12:1 skew. Rev C used a 9:1 skew. The faster 9:1 skew became 'standard' for single density in the 1050, XF551, and most 3rd party drives. The DOS II Reference Manual eludes to this on page 9 & 10, where they claim the included CX8111 preformatted disk is faster than disks formatted by your own drive. I always wondered about this, since I couldn't tell any difference, but the manual was released before November 81 when all production 810's were still using Rev B. Most sane people would have eventually upgraded to the C ROM along with other reliability improvements like the data separator, analog board, and rear power boards as they were offered by Atari under warranty or for a fee. Rev C was included in all 810's after Nov 1981. This has made finding a Rev B ROM that wasn't discarded afterwards a challenge.Anyhow, I'm curious what other code changes from B to C there may be other than the sector skew used when formatting. I'm hoping others with disassembly skill can identify any new insights. I ran my own quick compare between this Rev B dump, and the Rev C dump, and got 1331 mismatches (of the 2048 bytes) starting at 02A.. could be just because of recompilation offsets, but it does maybe hint that it's more than sector skew numbers different...The sector skew table appears to starts at offset 06F - I did a quick compare: First column byte is Rev B, second column byte is Rev C: 0000006F: F8 FE 00000070: F1 FC 00000071: FC FA 00000072: F5 F8 00000073: EE F6 00000074: F9 F4 00000076: FD F0 00000077: F6 EE 00000078: EF FD 00000079: FA FB 0000007A: F3 F9 0000007B: FE F7 0000007C: F7 F5 0000007D: F0 F3 0000007E: FB F1 0000007F: F4 EF these look like they're XOR'd by FF, and 0x075 is F2 in both. F8 F1 FC F5 EE F9 F2 FD F6 EF FA F3 FE F7 F0 FB F4 XORs to 07 0E 03 0A 11 06 0D 02 09 10 05 0C 01 08 0F 04 0B Which in decimal is 7 14 3 10 17 6 13 2 9 16 5 12 1 8 15 4 11 These match the skew seen in my post here http://atariage.com/forums/topic/269694-improved-sector-layout-cx8111/?p=4016787 but the first sector #18 is missing from this table, I presume it is explicitly defined in the code elsewhere, then looped through here.Finally, here's a quick disassembly that Bryan did: * = 0800 0800 D8 CLD 0801 A9 0A LDA #$0A 0803 8D 80 03 STA $0380 0806 8D 81 03 STA $0381 0809 A2 3C LDX #$3C 080B 8E 83 03 STX $0383 080E 8E 84 03 STX $0384 0811 A2 00 LDX #$00 0813 8E 82 03 STX $0382 0816 A9 2F LDA #$2F 0818 85 00 STA $00 081A A9 05 LDA #$05 081C 8D DD 01 STA $01DD 081F A9 E0 LDA #$E0 0821 8D D2 01 STA $01D2 0824 A9 00 LDA #$00 0826 8D D3 01 STA $01D3 0829 20 CB 0F JSR $0FCB 082C A0 27 LDY #$27 082E 20 89 0C JSR $0C89 0831 84 01 STY $01 0833 88 DEY 0834 84 02 STY $02 0836 20 2A 0B JSR $0B2A 0839 20 2E 0C JSR $0C2E 083C A2 01 LDX #$01 083E 8E EB 01 STX $01EB 0841 A2 FF LDX #$FF 0843 9A TXS 0844 A9 D8 LDA #$D8 0846 20 19 0C JSR $0C19 0849 8C CF 01 STY $01CF 084C A9 FF LDA #$FF 084E 85 00 STA $00 0850 A9 20 LDA #$20 0852 4C 80 08 JMP $0880 0855 00 BRK 0856 00 BRK 0857 00 BRK 0858 00 BRK 0859 00 BRK 085A 00 BRK 085B 00 BRK 085C 00 BRK 085D 00 BRK 085E 00 BRK 085F 00 BRK 0860 00 BRK 0861 00 BRK 0862 00 BRK 0863 00 BRK 0864 00 BRK 0865 00 BRK 0866 00 BRK 0867 00 BRK 0868 00 BRK 0869 00 BRK 086A 00 BRK 086B 00 BRK 086C 00 BRK 086D 00 BRK 086E 00 BRK 086F F8 SED 0870 F1 FC SBC ($FC),Y 0872 F5 EE SBC $EE,X 0874 F9 F2 FD SBC $FDF2,Y 0877 F6 EF INC $EF,X 0879 FA ??? 087A F3 ??? 087B FE F7 F0 INC $F0F7,X 087E FB ??? 087F F4 ??? 0880 20 1C 0B JSR $0B1C 0883 2C 80 03 BIT $0380 0886 70 06 BVS $088E 0888 20 A9 0C JSR $0CA9 088B 4C 83 08 JMP $0883 088E CE EB 01 DEC $01EB 0891 10 B9 BPL $084C 0893 A2 80 LDX #$80 0895 AC CF 01 LDY $01CF 0898 F0 10 BEQ $08AA 089A 20 ED 08 JSR $08ED 089D 8C CF 01 STY $01CF 08A0 20 A9 0C JSR $0CA9 08A3 AD 95 03 LDA $0395 08A6 10 FB BPL $08A3 08A8 30 E9 BMI $0893 08AA A9 08 LDA #$08 08AC 8D 80 03 STA $0380 08AF A9 00 LDA #$00 08B1 8D 82 03 STA $0382 08B4 A9 DF LDA #$DF 08B6 20 23 0B JSR $0B23 08B9 A9 04 LDA #$04 08BB 20 1C 0B JSR $0B1C 08BE 4C A9 0C JMP $0CA9 08C1 AE 84 01 LDX $0184 08C4 AD 83 01 LDA $0183 08C7 F0 0A BEQ $08D3 08C9 E0 03 CPX #$03 08CB B0 0A BCS $08D7 08CD C9 D1 CMP #$D1 08CF B0 08 BCS $08D9 08D1 18 CLC 08D2 60 RTS 08D3 E0 00 CPX #$00 08D5 D0 F2 BNE $08C9 08D7 38 SEC 08D8 60 RTS 08D9 E0 02 CPX #$02 08DB F0 FA BEQ $08D7 08DD 4C D1 08 JMP $08D1 08E0 60 RTS 08E1 8D DF 01 STA $01DF 08E4 88 DEY 08E5 D0 FD BNE $08E4 08E7 CE DF 01 DEC $01DF 08EA D0 F8 BNE $08E4 08EC 60 RTS 08ED A9 29 LDA #$29 08EF 8D 9E 03 STA $039E 08F2 AD 82 03 LDA $0382 08F5 29 3C AND #$3C 08F7 E8 INX 08F8 30 12 BMI $090C 08FA EE CE 01 INC $01CE 08FD 4A LSR A 08FE 8D CD 01 STA $01CD 0901 29 02 AND #$02 0903 F0 19 BEQ $091E 0905 A9 20 LDA #$20 0907 0D CD 01 ORA $01CD 090A 10 15 BPL $0921 090C CE CE 01 DEC $01CE 090F 0A ASL A 0910 8D CD 01 STA $01CD 0913 29 40 AND #$40 0915 F0 07 BEQ $091E 0917 A9 04 LDA #$04 0919 0D CD 01 ORA $01CD 091C 10 03 BPL $0921 091E AD CD 01 LDA $01CD 0921 8D 82 03 STA $0382 0924 88 DEY 0925 60 RTS 0926 20 C1 08 JSR $08C1 0929 B0 41 BCS $096C 092B 20 75 0C JSR $0C75 092E 20 41 0C JSR $0C41 0931 20 CB 0F JSR $0FCB 0934 20 49 0F JSR $0F49 0937 A9 77 LDA #$77 0939 85 00 STA $00 093B 70 0F BVS $094C 093D AD 9C 03 LDA $039C 0940 2C 80 03 BIT $0380 0943 10 F6 BPL $093B 0945 A5 03 LDA $03 0947 E8 INX 0948 95 80 STA $80,X 094A 10 F4 BPL $0940 094C 20 70 09 JSR $0970 094F B0 14 BCS $0965 0951 A9 43 LDA #$43 0953 8D 86 01 STA $0186 0956 20 F0 0D JSR $0DF0 0959 8D 87 01 STA $0187 095C 20 FF 0D JSR $0DFF 095F 20 0D 0E JSR $0E0D 0962 4C 41 08 JMP $0841 0965 D0 D0 BNE $0937 0967 A9 45 LDA #$45 0969 4C 53 09 JMP $0953 096C 4C C1 0D JMP $0DC1 096F AD A5 00 LDA $00A5 0972 8D D1 01 STA $01D1 0975 49 FF EOR #$FF 0977 D0 0B BNE $0984 0979 18 CLC 097A A9 FB LDA #$FB 097C 20 2C 0B JSR $0B2C 097F 20 66 0F JSR $0F66 0982 88 DEY 0983 60 RTS 0984 C0 02 CPY #$02 0986 D0 1B BNE $09A3 0988 29 10 AND #$10 098A F0 17 BEQ $09A3 098C 8C DF 01 STY $01DF 098F 20 CB 0F JSR $0FCB 0992 A0 2B LDY #$2B 0994 20 89 0C JSR $0C89 0997 AD DA 01 LDA $01DA 099A 20 19 0C JSR $0C19 099D 20 16 0F JSR $0F16 09A0 AC DF 01 LDY $01DF 09A3 A9 04 LDA #$04 09A5 20 07 0B JSR $0B07 09A8 38 SEC 09A9 4C 7F 09 JMP $097F 09AC 20 75 0C JSR $0C75 09AF 20 41 0C JSR $0C41 09B2 20 CB 0F JSR $0FCB 09B5 A0 2B LDY #$2B 09B7 20 89 0C JSR $0C89 09BA 20 61 0F JSR $0F61 09BD AD 80 03 LDA $0380 09C0 29 10 AND #$10 09C2 F0 08 BEQ $09CC 09C4 A9 08 LDA #$08 09C6 20 07 0B JSR $0B07 09C9 4C 95 0A JMP $0A95 09CC A9 FF LDA #$FF 09CE 85 E3 STA $E3 09D0 20 EB 09 JSR $09EB 09D3 C6 E3 DEC $E3 09D5 A5 E3 LDA $E3 09D7 C9 D7 CMP #$D7 09D9 F0 08 BEQ $09E3 09DB A2 80 LDX #$80 09DD 20 E8 09 JSR $09E8 09E0 4C D3 09 JMP $09D3 09E3 4C A3 0A JMP $0AA3 09E6 B0 00 BCS $09E8 09E8 20 6B 0B JSR $0B6B 09EB A9 6E LDA #$6E 09ED 85 E0 STA $E0 09EF A9 08 LDA #$08 09F1 85 E1 STA $E1 09F3 AD 94 03 LDA $0394 09F6 A9 ED LDA #$ED 09F8 85 E2 STA $E2 09FA A0 FF LDY #$FF 09FC A2 FF LDX #$FF 09FE A9 0B LDA #$0B 0A00 85 00 STA $00 0A02 20 8D 0A JSR $0A8D 0A05 A9 0D LDA #$0D 0A07 8D 9F 03 STA $039F 0A0A A0 FF LDY #$FF 0A0C 20 80 0A JSR $0A80 0A0F 8E 9F 03 STX $039F 0A12 A0 03 LDY #$03 0A14 20 8D 0A JSR $0A8D 0A17 A0 0B LDY #$0B 0A19 20 80 0A JSR $0A80 0A1C A0 06 LDY #$06 0A1E 20 80 0A JSR $0A80 0A21 A0 01 LDY #$01 0A23 20 8D 0A JSR $0A8D 0A26 A4 E3 LDY $E3 0A28 20 8D 0A JSR $0A8D 0A2B A0 FF LDY #$FF 0A2D 20 8D 0A JSR $0A8D 0A30 A4 E2 LDY $E2 0A32 20 8D 0A JSR $0A8D 0A35 A0 FF LDY #$FF 0A37 20 8D 0A JSR $0A8D 0A3A A0 08 LDY #$08 0A3C 20 8D 0A JSR $0A8D 0A3F A0 11 LDY #$11 0A41 20 80 0A JSR $0A80 0A44 A0 04 LDY #$04 0A46 20 8D 0A JSR $0A8D 0A49 A0 80 LDY #$80 0A4B A2 00 LDX #$00 0A4D 20 80 0A JSR $0A80 0A50 A0 08 LDY #$08 0A52 20 8D 0A JSR $0A8D 0A55 A0 09 LDY #$09 0A57 A2 FF LDX #$FF 0A59 20 80 0A JSR $0A80 0A5C 20 8D 0A JSR $0A8D 0A5F E6 E0 INC $E0 0A61 30 16 BMI $0A79 0A63 20 8D 0A JSR $0A8D 0A66 A1 E1 LDA ($E1,X) 0A68 85 E2 STA $E2 0A6A 4C 6F 0A JMP $0A6F 0A6D 70 26 BVS $0A95 0A6F 2C 80 03 BIT $0380 0A72 10 F9 BPL $0A6D 0A74 84 03 STY $03 0A76 4C 1C 0A JMP $0A1C 0A79 A9 2F LDA #$2F 0A7B 85 00 STA $00 0A7D 60 RTS 0A7E 70 15 BVS $0A95 0A80 2C 80 03 BIT $0380 0A83 10 F9 BPL $0A7E 0A85 86 03 STX $03 0A87 88 DEY 0A88 D0 F6 BNE $0A80 0A8A 60 RTS 0A8B 70 08 BVS $0A95 0A8D 2C 80 03 BIT $0380 0A90 10 F9 BPL $0A8B 0A92 84 03 STY $03 0A94 60 RTS 0A95 A2 FF LDX #$FF 0A97 86 80 STX $80 0A99 86 81 STX $81 0A9B A5 00 LDA $00 0A9D 8D D1 01 STA $01D1 0AA0 4C 6F 0E JMP $0E6F 0AA3 A2 00 LDX #$00 0AA5 8E E1 01 STX $01E1 0AA8 AD CE 01 LDA $01CE 0AAB 85 01 STA $01 0AAD A9 EE LDA #$EE 0AAF 8D DB 01 STA $01DB 0AB2 85 02 STA $02 0AB4 A0 02 LDY #$02 0AB6 8C E0 01 STY $01E0 0AB9 20 7F 0F JSR $0F7F 0ABC A0 01 LDY #$01 0ABE 20 70 09 JSR $0970 0AC1 B0 2E BCS $0AF1 0AC3 AD DB 01 LDA $01DB 0AC6 18 CLC 0AC7 69 04 ADC #$04 0AC9 D0 02 BNE $0ACD 0ACB A9 EF LDA #$EF 0ACD C9 FF CMP #$FF 0ACF D0 02 BNE $0AD3 0AD1 A9 ED LDA #$ED 0AD3 C9 02 CMP #$02 0AD5 D0 02 BNE $0AD9 0AD7 A9 F0 LDA #$F0 0AD9 C9 01 CMP #$01 0ADB D0 D2 BNE $0AAF 0ADD AD CE 01 LDA $01CE 0AE0 C9 FF CMP #$FF 0AE2 F0 0A BEQ $0AEE 0AE4 A2 00 LDX #$00 0AE6 A0 01 LDY #$01 0AE8 20 16 0F JSR $0F16 0AEB 4C A8 0A JMP $0AA8 0AEE 4C 56 0E JMP $0E56 0AF1 CE E0 01 DEC $01E0 0AF4 D0 C3 BNE $0AB9 0AF6 AE E1 01 LDX $01E1 0AF9 4C 77 0E JMP $0E77 0AFC AD 80 03 LDA $0380 0AFF 4A LSR A 0B00 4A LSR A 0B01 A9 10 LDA #$10 0B03 B0 02 BCS $0B07 0B05 A9 00 LDA #$00 0B07 0D D0 01 ORA $01D0 0B0A 8D D0 01 STA $01D0 0B0D 60 RTS 0B0E 48 PHA 0B0F A9 00 LDA #$00 0B11 2D D0 01 AND $01D0 0B14 8D D0 01 STA $01D0 0B17 68 PLA 0B18 4C 07 0B JMP $0B07 0B1B 60 RTS 0B1C 0D DD 01 ORA $01DD 0B1F 8D DD 01 STA $01DD 0B22 60 RTS 0B23 2D DD 01 AND $01DD 0B26 8D DD 01 STA $01DD 0B29 60 RTS 0B2A A9 08 LDA #$08 0B2C 2D D0 01 AND $01D0 0B2F 8D D0 01 STA $01D0 0B32 60 RTS 0B33 AD 82 03 LDA $0382 0B36 10 FB BPL $0B33 0B38 8A TXA 0B39 F0 2A BEQ $0B65 0B3B BD 80 01 LDA $0180,X 0B3E 49 FF EOR #$FF 0B40 9D 80 01 STA $0180,X 0B43 EA NOP 0B44 EA NOP 0B45 EA NOP 0B46 A0 78 LDY #$78 0B48 EA NOP 0B49 EA NOP 0B4A EA NOP 0B4B EA NOP 0B4C AD 82 03 LDA $0382 0B4F 2A ROL A 0B50 7E 81 01 ROR $0181,X 0B53 C8 INY 0B54 10 F2 BPL $0B48 0B56 E8 INX 0B57 EC DE 01 CPX $01DE 0B5A D0 D7 BNE $0B33 0B5C BD 80 01 LDA $0180,X 0B5F 49 FF EOR #$FF 0B61 9D 80 01 STA $0180,X 0B64 60 RTS 0B65 EA NOP 0B66 EA NOP 0B67 EA NOP 0B68 4C 43 0B JMP $0B43 0B6B A9 02 LDA #$02 0B6D 20 E1 08 JSR $08E1 0B70 20 ED 08 JSR $08ED 0B73 60 RTS 0B74 A2 00 LDX #$00 0B76 A0 07 LDY #$07 0B78 8C DE 01 STY $01DE 0B7B AD 82 03 LDA $0382 0B7E 10 FB BPL $0B7B 0B80 8A TXA 0B81 F0 2C BEQ $0BAF 0B83 B5 7F LDA $7F,X 0B85 49 FF EOR #$FF 0B87 95 7F STA $7F,X 0B89 EA NOP 0B8A EA NOP 0B8B EA NOP 0B8C A0 78 LDY #$78 0B8E EA NOP 0B8F EA NOP 0B90 EA NOP 0B91 A5 80 LDA $80 0B93 AD 82 03 LDA $0382 0B96 2A ROL A 0B97 76 80 ROR $80,X 0B99 C8 INY 0B9A 10 F2 BPL $0B8E 0B9C E8 INX 0B9D 10 0C BPL $0BAB 0B9F A2 06 LDX #$06 0BA1 20 33 0B JSR $0B33 0BA4 B5 F8 LDA $F8,X 0BA6 49 FF EOR #$FF 0BA8 95 F8 STA $F8,X 0BAA 60 RTS 0BAB EA NOP 0BAC 4C 7B 0B JMP $0B7B 0BAF EA NOP 0BB0 EA NOP 0BB1 EA NOP 0BB2 4C 89 0B JMP $0B89 0BB5 A9 00 LDA #$00 0BB7 18 CLC 0BB8 7D 81 01 ADC $0181,X 0BBB 08 PHP 0BBC E8 INX 0BBD EC DE 01 CPX $01DE 0BC0 F0 04 BEQ $0BC6 0BC2 28 PLP 0BC3 4C B8 0B JMP $0BB8 0BC6 28 PLP 0BC7 69 00 ADC #$00 0BC9 DD 81 01 CMP $0181,X 0BCC 60 RTS 0BCD AD 84 01 LDA $0184 0BD0 8D D7 01 STA $01D7 0BD3 AD 83 01 LDA $0183 0BD6 8D D8 01 STA $01D8 0BD9 A2 04 LDX #$04 0BDB 6E 84 01 ROR $0184 0BDE 6A ROR A 0BDF CA DEX 0BE0 D0 F9 BNE $0BDB 0BE2 6E 84 01 ROR $0184 0BE5 A2 04 LDX #$04 0BE7 4E 84 01 LSR $0184 0BEA CA DEX 0BEB D0 FA BNE $0BE7 0BED 0A ASL A 0BEE CD 84 01 CMP $0184 0BF1 B0 16 BCS $0C09 0BF3 8D 83 01 STA $0183 0BF6 4A LSR A 0BF7 49 FF EOR #$FF 0BF9 8D DA 01 STA $01DA 0BFC 38 SEC 0BFD AD 84 01 LDA $0184 0C00 ED 83 01 SBC $0183 0C03 49 FF EOR #$FF 0C05 8D DB 01 STA $01DB 0C08 60 RTS 0C09 4A LSR A 0C0A AA TAX 0C0B CA DEX 0C0C A9 10 LDA #$10 0C0E 18 CLC 0C0F 6D 84 01 ADC $0184 0C12 8D 84 01 STA $0184 0C15 8A TXA 0C16 4C ED 0B JMP $0BED 0C19 A2 00 LDX #$00 0C1B A0 00 LDY #$00 0C1D 38 SEC 0C1E ED CE 01 SBC $01CE 0C21 F0 0A BEQ $0C2D 0C23 10 07 BPL $0C2C 0C25 A2 80 LDX #$80 0C27 49 FF EOR #$FF 0C29 18 CLC 0C2A 69 01 ADC #$01 0C2C A8 TAY 0C2D 60 RTS 0C2E AD 80 03 LDA $0380 0C31 29 10 AND #$10 0C33 F0 06 BEQ $0C3B 0C35 A9 08 LDA #$08 0C37 20 07 0B JSR $0B07 0C3A 60 RTS 0C3B A9 F7 LDA #$F7 0C3D 20 2C 0B JSR $0B2C 0C40 60 RTS 0C41 AD 80 03 LDA $0380 0C44 4A LSR A 0C45 4A LSR A 0C46 B0 0F BCS $0C57 0C48 A9 0A LDA #$0A 0C4A 8D 80 03 STA $0380 0C4D 85 03 STA $03 0C4F A9 16 LDA #$16 0C51 85 01 STA $01 0C53 A9 EC LDA #$EC 0C55 85 00 STA $00 0C57 A9 01 LDA #$01 0C59 8D EB 01 STA $01EB 0C5C 60 RTS 0C5D AD DD 01 LDA $01DD 0C60 4A LSR A 0C61 4A LSR A 0C62 4A LSR A 0C63 90 0A BCC $0C6F 0C65 2C 80 03 BIT $0380 0C68 50 FB BVC $0C65 0C6A A9 FB LDA #$FB 0C6C 20 23 0B JSR $0B23 0C6F A9 10 LDA #$10 0C71 20 0E 0B JSR $0B0E 0C74 60 RTS 0C75 2C 82 03 BIT $0382 0C78 70 FB BVS $0C75 0C7A A9 41 LDA #$41 0C7C 8D 86 01 STA $0186 0C7F 20 FF 0D JSR $0DFF 0C82 20 2D 0E JSR $0E2D 0C85 20 25 0E JSR $0E25 0C88 60 RTS 0C89 A2 24 LDX #$24 0C8B 8E 82 03 STX $0382 0C8E 20 ED 08 JSR $08ED 0C91 30 08 BMI $0C9B 0C93 AD 95 03 LDA $0395 0C96 10 FB BPL $0C93 0C98 4C 8E 0C JMP $0C8E 0C9B 8C CE 01 STY $01CE 0C9E 8A TXA 0C9F A2 14 LDX #$14 0CA1 88 DEY 0CA2 D0 FD BNE $0CA1 0CA4 CA DEX 0CA5 D0 FA BNE $0CA1 0CA7 AA TAX 0CA8 60 RTS 0CA9 AD 82 03 LDA $0382 0CAC 4A LSR A 0CAD 4A LSR A 0CAE B0 32 BCS $0CE2 0CB0 AD DD 01 LDA $01DD 0CB3 4A LSR A 0CB4 B0 1F BCS $0CD5 0CB6 2C 82 03 BIT $0382 0CB9 50 0F BVC $0CCA 0CBB 2C DD 01 BIT $01DD 0CBE 50 2A BVC $0CEA 0CC0 A9 29 LDA #$29 0CC2 20 E1 08 JSR $08E1 0CC5 2C 82 03 BIT $0382 0CC8 70 20 BVS $0CEA 0CCA AD DD 01 LDA $01DD 0CCD 29 60 AND #$60 0CCF D0 03 BNE $0CD4 0CD1 4C A9 0C JMP $0CA9 0CD4 60 RTS 0CD5 A9 29 LDA #$29 0CD7 20 E1 08 JSR $08E1 0CDA A9 FE LDA #$FE 0CDC 20 23 0B JSR $0B23 0CDF 4C A9 0C JMP $0CA9 0CE2 A9 01 LDA #$01 0CE4 20 1C 0B JSR $0B1C 0CE7 4C CA 0C JMP $0CCA 0CEA A9 80 LDA #$80 0CEC 20 1C 0B JSR $0B1C 0CEF A2 00 LDX #$00 0CF1 A9 05 LDA #$05 0CF3 8D DE 01 STA $01DE 0CF6 20 33 0B JSR $0B33 0CF9 A2 00 LDX #$00 0CFB CE DE 01 DEC $01DE 0CFE 20 B5 0B JSR $0BB5 0D01 F0 05 BEQ $0D08 0D03 A9 02 LDA #$02 0D05 20 1C 0B JSR $0B1C 0D08 A2 34 LDX #$34 0D0A AD 80 03 LDA $0380 0D0D 29 05 AND #$05 0D0F F0 0A BEQ $0D1B 0D11 C9 04 CMP #$04 0D13 F0 05 BEQ $0D1A 0D15 C9 01 CMP #$01 0D17 F0 03 BEQ $0D1C 0D19 CA DEX 0D1A CA DEX 0D1B CA DEX 0D1C EC 81 01 CPX $0181 0D1F F0 0D BEQ $0D2E 0D21 2C 82 03 BIT $0382 0D24 70 FB BVS $0D21 0D26 A9 7D LDA #$7D 0D28 20 23 0B JSR $0B23 0D2B 4C A9 0C JMP $0CA9 0D2E 20 93 0D JSR $0D93 0D31 4C A9 0C JMP $0CA9 0D34 20 7A 0C JSR $0C7A 0D37 A2 4F LDX #$4F 0D39 A0 53 LDY #$53 0D3B 8C DE 01 STY $01DE 0D3E 20 B5 0B JSR $0BB5 0D41 8D D4 01 STA $01D4 0D44 A9 43 LDA #$43 0D46 8D 86 01 STA $0186 0D49 20 FF 0D JSR $0DFF 0D4C A2 7A LDX #$7A 0D4E 20 2D 0E JSR $0E2D 0D51 BC 55 01 LDY $0155,X 0D54 8C 86 01 STY $0186 0D57 20 30 0E JSR $0E30 0D5A 10 F5 BPL $0D51 0D5C 20 25 0E JSR $0E25 0D5F 20 2A 0B JSR $0B2A 0D62 20 FC 0A JSR $0AFC 0D65 4C 41 08 JMP $0841 0D68 A0 00 LDY #$00 0D6A 8C E4 01 STY $01E4 0D6D AD DB 01 LDA $01DB 0D70 49 FF EOR #$FF 0D72 8D E2 01 STA $01E2 0D75 AD CE 01 LDA $01CE 0D78 49 FF EOR #$FF 0D7A 0A ASL A 0D7B 8D E3 01 STA $01E3 0D7E 0A ASL A 0D7F 0A ASL A 0D80 2E E4 01 ROL $01E4 0D83 0A ASL A 0D84 2E E4 01 ROL $01E4 0D87 6D E3 01 ADC $01E3 0D8A A8 TAY 0D8B A9 00 LDA #$00 0D8D 6D E4 01 ADC $01E4 0D90 4C DD 0D JMP $0DDD 0D93 AD DD 01 LDA $01DD 0D96 4A LSR A 0D97 4A LSR A 0D98 B0 27 BCS $0DC1 0D9A AD 82 01 LDA $0182 0D9D C9 4F CMP #$4F 0D9F 90 1C BCC $0DBD 0DA1 C9 58 CMP #$58 0DA3 B0 18 BCS $0DBD 0DA5 29 07 AND #$07 0DA7 8D EA 01 STA $01EA 0DAA 0A ASL A 0DAB 6D EA 01 ADC $01EA 0DAE 69 8D ADC #$8D 0DB0 8D E8 01 STA $01E8 0DB3 A9 00 LDA #$00 0DB5 69 0E ADC #$0E 0DB7 8D E9 01 STA $01E9 0DBA 6C E8 01 JMP ($01E8) 0DBD C9 21 CMP #$21 0DBF F0 18 BEQ $0DD9 0DC1 A9 01 LDA #$01 0DC3 20 0E 0B JSR $0B0E 0DC6 20 FC 0A JSR $0AFC 0DC9 2C 82 03 BIT $0382 0DCC 70 FB BVS $0DC9 0DCE A9 4E LDA #$4E 0DD0 20 7C 0C JSR $0C7C 0DD3 A9 FD LDA #$FD 0DD5 20 23 0B JSR $0B23 0DD8 60 RTS 0DD9 4C AC 09 JMP $09AC 0DDC 01 8D ORA ($8D,X) 0DDE E4 01 CPX $01 0DE0 98 TYA 0DE1 18 CLC 0DE2 6D E2 01 ADC $01E2 0DE5 95 80 STA $80,X 0DE7 A9 00 LDA #$00 0DE9 6D E4 01 ADC $01E4 0DEC E8 INX 0DED 95 80 STA $80,X 0DEF 60 RTS 0DF0 A9 00 LDA #$00 0DF2 AA TAX 0DF3 18 CLC 0DF4 75 80 ADC $80,X 0DF6 E8 INX 0DF7 10 FB BPL $0DF4 0DF9 69 00 ADC #$00 0DFB CD 87 01 CMP $0187 0DFE 60 RTS 0DFF AE 82 03 LDX $0382 0E02 8E 82 03 STX $0382 0E05 AE 83 03 LDX $0383 0E08 E8 INX 0E09 8E 83 03 STX $0383 0E0C 60 RTS 0E0D A2 FF LDX #$FF 0E0F 20 2D 0E JSR $0E2D 0E12 B4 80 LDY $80,X 0E14 8C 86 01 STY $0186 0E17 20 30 0E JSR $0E30 0E1A 10 F6 BPL $0E12 0E1C AC 87 01 LDY $0187 0E1F 8C 86 01 STY $0186 0E22 20 30 0E JSR $0E30 0E25 AE 83 03 LDX $0383 0E28 CA DEX 0E29 8E 83 03 STX $0383 0E2C 60 RTS 0E2D AD 82 03 LDA $0382 0E30 29 FE AND #$FE 0E32 8D 82 03 STA $0382 0E35 A0 78 LDY #$78 0E37 24 80 BIT $80 0E39 24 80 BIT $80 0E3B EA NOP 0E3C EA NOP 0E3D 4A LSR A 0E3E 6E 86 01 ROR $0186 0E41 2A ROL A 0E42 8D 82 03 STA $0382 0E45 C8 INY 0E46 10 F1 BPL $0E39 0E48 4A LSR A 0E49 38 SEC 0E4A 2A ROL A 0E4B EA NOP 0E4C EA NOP 0E4D EA NOP 0E4E EA NOP 0E4F EA NOP 0E50 EA NOP 0E51 8D 82 03 STA $0382 0E54 E8 INX 0E55 60 RTS 0E56 A9 FF LDA #$FF 0E58 AE E1 01 LDX $01E1 0E5B 95 80 STA $80,X 0E5D E8 INX 0E5E 95 80 STA $80,X 0E60 AD DD 01 LDA $01DD 0E63 29 08 AND #$08 0E65 D0 03 BNE $0E6A 0E67 4C 51 09 JMP $0951 0E6A A9 F7 LDA #$F7 0E6C 20 23 0B JSR $0B23 0E6F A9 04 LDA #$04 0E71 20 07 0B JSR $0B07 0E74 4C 67 09 JMP $0967 0E77 A9 08 LDA #$08 0E79 20 1C 0B JSR $0B1C 0E7C 20 68 0D JSR $0D68 0E7F E8 INX 0E80 8E E1 01 STX $01E1 0E83 E0 7E CPX #$7E 0E85 D0 03 BNE $0E8A 0E87 4C 56 0E JMP $0E56 0E8A 4C C3 0A JMP $0AC3 0E8D 4C 35 0F JMP $0F35 0E90 4C C1 0D JMP $0DC1 0E93 4C 26 09 JMP $0926 0E96 4C 34 0D JMP $0D34 0E99 4C C1 0D JMP $0DC1 0E9C 4C C1 0D JMP $0DC1 0E9F 4C C1 0D JMP $0DC1 0EA2 4C 30 0F JMP $0F30 0EA5 20 75 0C JSR $0C75 0EA8 20 41 0C JSR $0C41 0EAB 20 74 0B JSR $0B74 0EAE 20 F0 0D JSR $0DF0 0EB1 D0 4C BNE $0EFF 0EB3 20 7A 0C JSR $0C7A 0EB6 20 CB 0F JSR $0FCB 0EB9 20 49 0F JSR $0F49 0EBC AD 80 03 LDA $0380 0EBF 29 10 AND #$10 0EC1 D0 49 BNE $0F0C 0EC3 A9 57 LDA #$57 0EC5 85 00 STA $00 0EC7 70 1A BVS $0EE3 0EC9 AD 9C 03 LDA $039C 0ECC 2C 80 03 BIT $0380 0ECF 30 0A BMI $0EDB 0ED1 4C C7 0E JMP $0EC7 0ED4 70 0D BVS $0EE3 0ED6 2C 80 03 BIT $0380 0ED9 10 F9 BPL $0ED4 0EDB E8 INX 0EDC B5 80 LDA $80,X 0EDE 85 03 STA $03 0EE0 4C D6 0E JMP $0ED6 0EE3 20 70 09 JSR $0970 0EE6 A9 45 LDA #$45 0EE8 B0 56 BCS $0F40 0EEA AD DD 01 LDA $01DD 0EED 29 08 AND #$08 0EEF F0 09 BEQ $0EFA 0EF1 20 9B 0F JSR $0F9B 0EF4 90 04 BCC $0EFA 0EF6 A9 45 LDA #$45 0EF8 B0 0C BCS $0F06 0EFA A9 43 LDA #$43 0EFC 4C 06 0F JMP $0F06 0EFF A9 12 LDA #$12 0F01 20 0E 0B JSR $0B0E 0F04 A9 4E LDA #$4E 0F06 20 7C 0C JSR $0C7C 0F09 4C 41 08 JMP $0841 0F0C A9 0C LDA #$0C 0F0E 20 07 0B JSR $0B07 0F11 A9 45 LDA #$45 0F13 4C 06 0F JMP $0F06 0F16 F0 17 BEQ $0F2F 0F18 20 ED 08 JSR $08ED 0F1B F0 08 BEQ $0F25 0F1D AD 95 03 LDA $0395 0F20 10 FB BPL $0F1D 0F22 4C 18 0F JMP $0F18 0F25 A9 50 LDA #$50 0F27 8D 9E 03 STA $039E 0F2A AD 95 03 LDA $0395 0F2D 10 FB BPL $0F2A 0F2F 60 RTS 0F30 A9 08 LDA #$08 0F32 20 1C 0B JSR $0B1C 0F35 20 C1 08 JSR $08C1 0F38 B0 03 BCS $0F3D 0F3A 4C A5 0E JMP $0EA5 0F3D 4C C1 0D JMP $0DC1 0F40 C0 00 CPY #$00 0F42 F0 03 BEQ $0F47 0F44 4C C3 0E JMP $0EC3 0F47 F0 B3 BEQ $0EFC 0F49 20 CD 0B JSR $0BCD 0F4C AD 82 03 LDA $0382 0F4F 29 3C AND #$3C 0F51 D0 05 BNE $0F58 0F53 A9 30 LDA #$30 0F55 8D 82 03 STA $0382 0F58 AD DA 01 LDA $01DA 0F5B 20 19 0C JSR $0C19 0F5E 20 16 0F JSR $0F16 0F61 20 5D 0C JSR $0C5D 0F64 A0 04 LDY #$04 0F66 A9 2F LDA #$2F 0F68 85 00 STA $00 0F6A A2 FF LDX #$FF 0F6C CA DEX 0F6D D0 FD BNE $0F6C 0F6F AD DA 01 LDA $01DA 0F72 85 01 STA $01 0F74 AD DB 01 LDA $01DB 0F77 85 02 STA $02 0F79 B8 CLV 0F7A CA DEX 0F7B 8E 9F 03 STX $039F 0F7E 60 RTS 0F7F 20 66 0F JSR $0F66 0F82 AD CE 01 LDA $01CE 0F85 85 01 STA $01 0F87 A9 77 LDA #$77 0F89 85 00 STA $00 0F8B 70 0D BVS $0F9A 0F8D AD 9C 03 LDA $039C 0F90 2C 80 03 BIT $0380 0F93 10 F6 BPL $0F8B 0F95 A5 03 LDA $03 0F97 4C 90 0F JMP $0F90 0F9A 60 RTS 0F9B 20 66 0F JSR $0F66 0F9E A0 01 LDY #$01 0FA0 E8 INX 0FA1 A9 77 LDA #$77 0FA3 85 00 STA $00 0FA5 70 11 BVS $0FB8 0FA7 AD 9C 03 LDA $039C 0FAA 2C 80 03 BIT $0380 0FAD 10 F6 BPL $0FA5 0FAF A5 03 LDA $03 0FB1 D5 80 CMP $80,X 0FB3 D0 10 BNE $0FC5 0FB5 E8 INX 0FB6 D0 F2 BNE $0FAA 0FB8 20 70 09 JSR $0970 0FBB 90 02 BCC $0FBF 0FBD 10 E1 BPL $0FA0 0FBF A9 F7 LDA #$F7 0FC1 20 23 0B JSR $0B23 0FC4 60 RTS 0FC5 20 A3 09 JSR $09A3 0FC8 4C BF 0F JMP $0FBF 0FCB AD DD 01 LDA $01DD 0FCE 29 04 AND #$04 0FD0 F0 05 BEQ $0FD7 0FD2 A9 50 LDA #$50 0FD4 20 E1 08 JSR $08E1 0FD7 60 RTS 0FD8 00 BRK 0FD9 00 BRK 0FDA 00 BRK 0FDB 00 BRK 0FDC 00 BRK 0FDD 00 BRK 0FDE 00 BRK 0FDF 00 BRK 0FE0 00 BRK 0FE1 00 BRK 0FE2 00 BRK 0FE3 00 BRK 0FE4 00 BRK 0FE5 00 BRK 0FE6 00 BRK 0FE7 00 BRK 0FE8 00 BRK 0FE9 00 BRK 0FEA 00 BRK 0FEB 00 BRK 0FEC 00 BRK 0FED 00 BRK 0FEE 00 BRK 0FEF 00 BRK 0FF0 00 BRK 0FF1 00 BRK 0FF2 00 BRK 0FF3 00 BRK 0FF4 00 BRK 0FF5 00 BRK 0FF6 00 BRK 0FF7 00 BRK 0FF8 00 BRK 0FF9 00 BRK 0FFA 00 BRK 0FFB 00 BRK 0FFC 00 BRK 0FFD 08 PHP Vectors: 0800 0800 0FFE 00 BRK 0FFF 08 PHP 1000 .END Cheers,Ryan 810ROM_B.BIN 12 Quote Link to comment Share on other sites More sharing options...
sup8pdct Posted June 2, 2018 Share Posted June 2, 2018 The FDC controller used has an inverted data bus. That is why commands, sector numbers are EOR with $FF. All sector data however wasnt inverted. All other atari drives used non inverting fdc which is reason why newer and 3rd party drives invert the sector data in an extra step before storing/reading from disk. James 2 Quote Link to comment Share on other sites More sharing options...
Fox-1 / mnx Posted June 2, 2018 Share Posted June 2, 2018 Translated it to MAC/65 format and it assembles without problems. Are commented versions of the older ROM around? If so, it's equates could be included to see what comes out. 810ROM_B.ASM 10 ; ATARI 810 ROM Rev. B 20 ; Info provided by Nezgar 30 ; Original disassembly by Brian 40 ; AtariAge, June 2018 50 ; 60 ; Code equates 70 ; 80 L0001 = $01 90 L0002 = $02 0100 L0003 = $03 0110 L007F = $7F 0120 L0080 = $80 0130 L0081 = $81 0140 L008D = $8D 0150 L00A5 = $A5 0160 L00E0 = $E0 0170 L00E1 = $E1 0180 L00E2 = $E2 0190 L00E3 = $E3 0200 L00EE = $EE 0210 L00EF = $EF 0220 L00F8 = $F8 0230 L00FC = $FC 0240 L0155 = $0155 0250 L0180 = $0180 0260 L0181 = $0181 0270 L0182 = $0182 0280 L0183 = $0183 0290 L0184 = $0184 0300 L0186 = $0186 0310 L0187 = $0187 0320 L01CD = $01CD 0330 L01CE = $01CE 0340 L01CF = $01CF 0350 L01D0 = $01D0 0360 L01D1 = $01D1 0370 L01D2 = $01D2 0380 L01D3 = $01D3 0390 L01D4 = $01D4 0400 L01D7 = $01D7 0410 L01D8 = $01D8 0420 L01DA = $01DA 0430 L01DB = $01DB 0440 L01DD = $01DD 0450 L01DE = $01DE 0460 L01DF = $01DF 0470 L01E0 = $01E0 0480 L01E1 = $01E1 0490 L01E2 = $01E2 0500 L01E3 = $01E3 0510 L01E4 = $01E4 0520 L01E8 = $01E8 0530 L01E9 = $01E9 0540 L01EA = $01EA 0550 L01EB = $01EB 0560 L0380 = $0380 0570 L0381 = $0381 0580 L0382 = $0382 0590 L0383 = $0383 0600 L0384 = $0384 0610 L0394 = $0394 0620 L0395 = $0395 0630 L039C = $039C 0640 L039E = $039E 0650 L039F = $039F 0660 L0970 = $0970 0670 L0DDD = $0DDD 0680 LF0F7 = $F0F7 0690 LFDF2 = $FDF2 0700 ; 0710 ; Start of code 0720 ; 0730 *= $0800 0740 .OPT NO LIST 0750 ; 0760 CLD 0770 LDA #$0A 0780 STA L0380 0790 STA L0381 0800 LDX #$3C 0810 STX L0383 0820 STX L0384 0830 LDX #$00 0840 STX L0382 0850 LDA #$2F 0860 STA $00 0870 LDA #$05 0880 STA L01DD 0890 LDA #$E0 0900 STA L01D2 0910 LDA #$00 0920 STA L01D3 0930 JSR L0FCB 0940 LDY #$27 0950 JSR L0C89 0960 STY L0001 0970 DEY 0980 STY L0002 0990 JSR L0B2A 1000 JSR L0C2E 1010 LDX #$01 1020 STX L01EB 1030 L0841 LDX #$FF 1040 TXS 1050 LDA #$D8 1060 JSR L0C19 1070 STY L01CF 1080 L084C LDA #$FF 1090 STA $00 1100 LDA #$20 1110 JMP L0880 1120 .BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 1130 .BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 1140 SED 1150 SBC (L00FC),Y 1160 SBC L00EE,X 1170 SBC LFDF2,Y 1180 INC L00EF,X 1190 .BYTE $FA,$F3 1200 INC LF0F7,X 1210 .BYTE $FB,$F4 1220 L0880 JSR L0B1C 1230 L0883 BIT L0380 1240 BVS L088E 1250 JSR L0CA9 1260 JMP L0883 1270 L088E DEC L01EB 1280 BPL L084C 1290 L0893 LDX #$80 1300 LDY L01CF 1310 BEQ L08AA 1320 JSR L08ED 1330 STY L01CF 1340 JSR L0CA9 1350 L08A3 LDA L0395 1360 BPL L08A3 1370 BMI L0893 1380 L08AA LDA #$08 1390 STA L0380 1400 LDA #$00 1410 STA L0382 1420 LDA #$DF 1430 JSR L0B23 1440 LDA #$04 1450 JSR L0B1C 1460 JMP L0CA9 1470 L08C1 LDX L0184 1480 LDA L0183 1490 BEQ L08D3 1500 L08C9 CPX #$03 1510 BCS L08D7 1520 CMP #$D1 1530 BCS L08D9 1540 L08D1 CLC 1550 RTS 1560 L08D3 CPX #$00 1570 BNE L08C9 1580 L08D7 SEC 1590 RTS 1600 L08D9 CPX #$02 1610 BEQ L08D7 1620 JMP L08D1 1630 RTS 1640 L08E1 STA L01DF 1650 L08E4 DEY 1660 BNE L08E4 1670 DEC L01DF 1680 BNE L08E4 1690 RTS 1700 L08ED LDA #$29 1710 STA L039E 1720 LDA L0382 1730 AND #$3C 1740 INX 1750 BMI L090C 1760 INC L01CE 1770 LSR A 1780 STA L01CD 1790 AND #$02 1800 BEQ L091E 1810 LDA #$20 1820 ORA L01CD 1830 BPL L0921 1840 L090C DEC L01CE 1850 ASL A 1860 STA L01CD 1870 AND #$40 1880 BEQ L091E 1890 LDA #$04 1900 ORA L01CD 1910 BPL L0921 1920 L091E LDA L01CD 1930 L0921 STA L0382 1940 DEY 1950 RTS 1960 L0926 JSR L08C1 1970 BCS L096C 1980 JSR L0C75 1990 JSR L0C41 2000 JSR L0FCB 2010 JSR L0F49 2020 L0937 LDA #$77 2030 STA $00 2040 L093B BVS L094C 2050 LDA L039C 2060 L0940 BIT L0380 2070 BPL L093B 2080 LDA L0003 2090 INX 2100 STA L0080,X 2110 BPL L0940 2120 L094C JSR L0970 2130 BCS L0965 2140 L0951 LDA #$43 2150 L0953 STA L0186 2160 JSR L0DF0 2170 STA L0187 2180 JSR L0DFF 2190 JSR L0E0D 2200 JMP L0841 2210 L0965 BNE L0937 2220 L0967 LDA #$45 2230 JMP L0953 2240 L096C JMP L0DC1 2250 LDA L00A5 2260 STA L01D1 2270 EOR #$FF 2280 BNE L0984 2290 CLC 2300 LDA #$FB 2310 JSR L0B2C 2320 L097F JSR L0F66 2330 DEY 2340 RTS 2350 L0984 CPY #$02 2360 BNE L09A3 2370 AND #$10 2380 BEQ L09A3 2390 STY L01DF 2400 JSR L0FCB 2410 LDY #$2B 2420 JSR L0C89 2430 LDA L01DA 2440 JSR L0C19 2450 JSR L0F16 2460 LDY L01DF 2470 L09A3 LDA #$04 2480 JSR L0B07 2490 SEC 2500 JMP L097F 2510 L09AC JSR L0C75 2520 JSR L0C41 2530 JSR L0FCB 2540 LDY #$2B 2550 JSR L0C89 2560 JSR L0F61 2570 LDA L0380 2580 AND #$10 2590 BEQ L09CC 2600 LDA #$08 2610 JSR L0B07 2620 JMP L0A95 2630 L09CC LDA #$FF 2640 STA L00E3 2650 JSR L09EB 2660 L09D3 DEC L00E3 2670 LDA L00E3 2680 CMP #$D7 2690 BEQ L09E3 2700 LDX #$80 2710 JSR L09E8 2720 JMP L09D3 2730 L09E3 JMP L0AA3 2740 BCS L09E8 2750 L09E8 JSR L0B6B 2760 L09EB LDA #$6E 2770 STA L00E0 2780 LDA #$08 2790 STA L00E1 2800 LDA L0394 2810 LDA #$ED 2820 STA L00E2 2830 LDY #$FF 2840 LDX #$FF 2850 LDA #$0B 2860 STA $00 2870 JSR L0A8D 2880 LDA #$0D 2890 STA L039F 2900 LDY #$FF 2910 JSR L0A80 2920 STX L039F 2930 LDY #$03 2940 JSR L0A8D 2950 LDY #$0B 2960 JSR L0A80 2970 L0A1C LDY #$06 2980 JSR L0A80 2990 LDY #$01 3000 JSR L0A8D 3010 LDY L00E3 3020 JSR L0A8D 3030 LDY #$FF 3040 JSR L0A8D 3050 LDY L00E2 3060 JSR L0A8D 3070 LDY #$FF 3080 JSR L0A8D 3090 LDY #$08 3100 JSR L0A8D 3110 LDY #$11 3120 JSR L0A80 3130 LDY #$04 3140 JSR L0A8D 3150 LDY #$80 3160 LDX #$00 3170 JSR L0A80 3180 LDY #$08 3190 JSR L0A8D 3200 LDY #$09 3210 LDX #$FF 3220 JSR L0A80 3230 JSR L0A8D 3240 INC L00E0 3250 BMI L0A79 3260 JSR L0A8D 3270 LDA (L00E1,X) 3280 STA L00E2 3290 JMP L0A6F 3300 L0A6D BVS L0A95 3310 L0A6F BIT L0380 3320 BPL L0A6D 3330 STY L0003 3340 JMP L0A1C 3350 L0A79 LDA #$2F 3360 STA $00 3370 RTS 3380 L0A7E BVS L0A95 3390 L0A80 BIT L0380 3400 BPL L0A7E 3410 STX L0003 3420 DEY 3430 BNE L0A80 3440 RTS 3450 L0A8B BVS L0A95 3460 L0A8D BIT L0380 3470 BPL L0A8B 3480 STY L0003 3490 RTS 3500 L0A95 LDX #$FF 3510 STX L0080 3520 STX L0081 3530 LDA $00 3540 STA L01D1 3550 JMP L0E6F 3560 L0AA3 LDX #$00 3570 STX L01E1 3580 L0AA8 LDA L01CE 3590 STA L0001 3600 LDA #$EE 3610 L0AAF STA L01DB 3620 STA L0002 3630 LDY #$02 3640 STY L01E0 3650 L0AB9 JSR L0F7F 3660 LDY #$01 3670 JSR L0970 3680 BCS L0AF1 3690 L0AC3 LDA L01DB 3700 CLC 3710 ADC #$04 3720 BNE L0ACD 3730 LDA #$EF 3740 L0ACD CMP #$FF 3750 BNE L0AD3 3760 LDA #$ED 3770 L0AD3 CMP #$02 3780 BNE L0AD9 3790 LDA #$F0 3800 L0AD9 CMP #$01 3810 BNE L0AAF 3820 LDA L01CE 3830 CMP #$FF 3840 BEQ L0AEE 3850 LDX #$00 3860 LDY #$01 3870 JSR L0F16 3880 JMP L0AA8 3890 L0AEE JMP L0E56 3900 L0AF1 DEC L01E0 3910 BNE L0AB9 3920 LDX L01E1 3930 JMP L0E77 3940 L0AFC LDA L0380 3950 LSR A 3960 LSR A 3970 LDA #$10 3980 BCS L0B07 3990 LDA #$00 4000 L0B07 ORA L01D0 4010 STA L01D0 4020 RTS 4030 L0B0E PHA 4040 LDA #$00 4050 AND L01D0 4060 STA L01D0 4070 PLA 4080 JMP L0B07 4090 RTS 4100 L0B1C ORA L01DD 4110 STA L01DD 4120 RTS 4130 L0B23 AND L01DD 4140 STA L01DD 4150 RTS 4160 L0B2A LDA #$08 4170 L0B2C AND L01D0 4180 STA L01D0 4190 RTS 4200 L0B33 LDA L0382 4210 BPL L0B33 4220 TXA 4230 BEQ L0B65 4240 LDA L0180,X 4250 EOR #$FF 4260 STA L0180,X 4270 L0B43 NOP 4280 NOP 4290 NOP 4300 LDY #$78 4310 L0B48 NOP 4320 NOP 4330 NOP 4340 NOP 4350 LDA L0382 4360 ROL A 4370 ROR L0181,X 4380 INY 4390 BPL L0B48 4400 INX 4410 CPX L01DE 4420 BNE L0B33 4430 LDA L0180,X 4440 EOR #$FF 4450 STA L0180,X 4460 RTS 4470 L0B65 NOP 4480 NOP 4490 NOP 4500 JMP L0B43 4510 L0B6B LDA #$02 4520 JSR L08E1 4530 JSR L08ED 4540 RTS 4550 L0B74 LDX #$00 4560 LDY #$07 4570 STY L01DE 4580 L0B7B LDA L0382 4590 BPL L0B7B 4600 TXA 4610 BEQ L0BAF 4620 LDA L007F,X 4630 EOR #$FF 4640 STA L007F,X 4650 L0B89 NOP 4660 NOP 4670 NOP 4680 LDY #$78 4690 L0B8E NOP 4700 NOP 4710 NOP 4720 LDA L0080 4730 LDA L0382 4740 ROL A 4750 ROR L0080,X 4760 INY 4770 BPL L0B8E 4780 INX 4790 BPL L0BAB 4800 LDX #$06 4810 JSR L0B33 4820 LDA L00F8,X 4830 EOR #$FF 4840 STA L00F8,X 4850 RTS 4860 L0BAB NOP 4870 JMP L0B7B 4880 L0BAF NOP 4890 NOP 4900 NOP 4910 JMP L0B89 4920 L0BB5 LDA #$00 4930 CLC 4940 L0BB8 ADC L0181,X 4950 PHP 4960 INX 4970 CPX L01DE 4980 BEQ L0BC6 4990 PLP 5000 JMP L0BB8 5010 L0BC6 PLP 5020 ADC #$00 5030 CMP L0181,X 5040 RTS 5050 L0BCD LDA L0184 5060 STA L01D7 5070 LDA L0183 5080 STA L01D8 5090 LDX #$04 5100 L0BDB ROR L0184 5110 ROR A 5120 DEX 5130 BNE L0BDB 5140 ROR L0184 5150 LDX #$04 5160 L0BE7 LSR L0184 5170 DEX 5180 BNE L0BE7 5190 L0BED ASL A 5200 CMP L0184 5210 BCS L0C09 5220 STA L0183 5230 LSR A 5240 EOR #$FF 5250 STA L01DA 5260 SEC 5270 LDA L0184 5280 SBC L0183 5290 EOR #$FF 5300 STA L01DB 5310 RTS 5320 L0C09 LSR A 5330 TAX 5340 DEX 5350 LDA #$10 5360 CLC 5370 ADC L0184 5380 STA L0184 5390 TXA 5400 JMP L0BED 5410 L0C19 LDX #$00 5420 LDY #$00 5430 SEC 5440 SBC L01CE 5450 BEQ L0C2D 5460 BPL L0C2C 5470 LDX #$80 5480 EOR #$FF 5490 CLC 5500 ADC #$01 5510 L0C2C TAY 5520 L0C2D RTS 5530 L0C2E LDA L0380 5540 AND #$10 5550 BEQ L0C3B 5560 LDA #$08 5570 JSR L0B07 5580 RTS 5590 L0C3B LDA #$F7 5600 JSR L0B2C 5610 RTS 5620 L0C41 LDA L0380 5630 LSR A 5640 LSR A 5650 BCS L0C57 5660 LDA #$0A 5670 STA L0380 5680 STA L0003 5690 LDA #$16 5700 STA L0001 5710 LDA #$EC 5720 STA $00 5730 L0C57 LDA #$01 5740 STA L01EB 5750 RTS 5760 L0C5D LDA L01DD 5770 LSR A 5780 LSR A 5790 LSR A 5800 BCC L0C6F 5810 L0C65 BIT L0380 5820 BVC L0C65 5830 LDA #$FB 5840 JSR L0B23 5850 L0C6F LDA #$10 5860 JSR L0B0E 5870 RTS 5880 L0C75 BIT L0382 5890 BVS L0C75 5900 L0C7A LDA #$41 5910 L0C7C STA L0186 5920 JSR L0DFF 5930 JSR L0E2D 5940 JSR L0E25 5950 RTS 5960 L0C89 LDX #$24 5970 STX L0382 5980 L0C8E JSR L08ED 5990 BMI L0C9B 6000 L0C93 LDA L0395 6010 BPL L0C93 6020 JMP L0C8E 6030 L0C9B STY L01CE 6040 TXA 6050 LDX #$14 6060 L0CA1 DEY 6070 BNE L0CA1 6080 DEX 6090 BNE L0CA1 6100 TAX 6110 RTS 6120 L0CA9 LDA L0382 6130 LSR A 6140 LSR A 6150 BCS L0CE2 6160 LDA L01DD 6170 LSR A 6180 BCS L0CD5 6190 BIT L0382 6200 BVC L0CCA 6210 BIT L01DD 6220 BVC L0CEA 6230 LDA #$29 6240 JSR L08E1 6250 BIT L0382 6260 BVS L0CEA 6270 L0CCA LDA L01DD 6280 AND #$60 6290 BNE L0CD4 6300 JMP L0CA9 6310 L0CD4 RTS 6320 L0CD5 LDA #$29 6330 JSR L08E1 6340 LDA #$FE 6350 JSR L0B23 6360 JMP L0CA9 6370 L0CE2 LDA #$01 6380 JSR L0B1C 6390 JMP L0CCA 6400 L0CEA LDA #$80 6410 JSR L0B1C 6420 LDX #$00 6430 LDA #$05 6440 STA L01DE 6450 JSR L0B33 6460 LDX #$00 6470 DEC L01DE 6480 JSR L0BB5 6490 BEQ L0D08 6500 LDA #$02 6510 JSR L0B1C 6520 L0D08 LDX #$34 6530 LDA L0380 6540 AND #$05 6550 BEQ L0D1B 6560 CMP #$04 6570 BEQ L0D1A 6580 CMP #$01 6590 BEQ L0D1C 6600 DEX 6610 L0D1A DEX 6620 L0D1B DEX 6630 L0D1C CPX L0181 6640 BEQ L0D2E 6650 L0D21 BIT L0382 6660 BVS L0D21 6670 LDA #$7D 6680 JSR L0B23 6690 JMP L0CA9 6700 L0D2E JSR L0D93 6710 JMP L0CA9 6720 L0D34 JSR L0C7A 6730 LDX #$4F 6740 LDY #$53 6750 STY L01DE 6760 JSR L0BB5 6770 STA L01D4 6780 LDA #$43 6790 STA L0186 6800 JSR L0DFF 6810 LDX #$7A 6820 JSR L0E2D 6830 L0D51 LDY L0155,X 6840 STY L0186 6850 JSR L0E30 6860 BPL L0D51 6870 JSR L0E25 6880 JSR L0B2A 6890 JSR L0AFC 6900 JMP L0841 6910 L0D68 LDY #$00 6920 STY L01E4 6930 LDA L01DB 6940 EOR #$FF 6950 STA L01E2 6960 LDA L01CE 6970 EOR #$FF 6980 ASL A 6990 STA L01E3 7000 ASL A 7010 ASL A 7020 ROL L01E4 7030 ASL A 7040 ROL L01E4 7050 ADC L01E3 7060 TAY 7070 LDA #$00 7080 ADC L01E4 7090 JMP L0DDD 7100 L0D93 LDA L01DD 7110 LSR A 7120 LSR A 7130 BCS L0DC1 7140 LDA L0182 7150 CMP #$4F 7160 BCC L0DBD 7170 CMP #$58 7180 BCS L0DBD 7190 AND #$07 7200 STA L01EA 7210 ASL A 7220 ADC L01EA 7230 ADC #$8D 7240 STA L01E8 7250 LDA #$00 7260 ADC #$0E 7270 STA L01E9 7280 JMP (L01E8) 7290 L0DBD CMP #$21 7300 BEQ L0DD9 7310 L0DC1 LDA #$01 7320 JSR L0B0E 7330 JSR L0AFC 7340 L0DC9 BIT L0382 7350 BVS L0DC9 7360 LDA #$4E 7370 JSR L0C7C 7380 LDA #$FD 7390 JSR L0B23 7400 RTS 7410 L0DD9 JMP L09AC 7420 ORA (L008D,X) 7430 CPX L0001 7440 TYA 7450 CLC 7460 ADC L01E2 7470 STA L0080,X 7480 LDA #$00 7490 ADC L01E4 7500 INX 7510 STA L0080,X 7520 RTS 7530 L0DF0 LDA #$00 7540 TAX 7550 CLC 7560 L0DF4 ADC L0080,X 7570 INX 7580 BPL L0DF4 7590 ADC #$00 7600 CMP L0187 7610 RTS 7620 L0DFF LDX L0382 7630 STX L0382 7640 LDX L0383 7650 INX 7660 STX L0383 7670 RTS 7680 L0E0D LDX #$FF 7690 JSR L0E2D 7700 L0E12 LDY L0080,X 7710 STY L0186 7720 JSR L0E30 7730 BPL L0E12 7740 LDY L0187 7750 STY L0186 7760 JSR L0E30 7770 L0E25 LDX L0383 7780 DEX 7790 STX L0383 7800 RTS 7810 L0E2D LDA L0382 7820 L0E30 AND #$FE 7830 STA L0382 7840 LDY #$78 7850 BIT L0080 7860 L0E39 BIT L0080 7870 NOP 7880 NOP 7890 LSR A 7900 ROR L0186 7910 ROL A 7920 STA L0382 7930 INY 7940 BPL L0E39 7950 LSR A 7960 SEC 7970 ROL A 7980 NOP 7990 NOP 8000 NOP 8010 NOP 8020 NOP 8030 NOP 8040 STA L0382 8050 INX 8060 RTS 8070 L0E56 LDA #$FF 8080 LDX L01E1 8090 STA L0080,X 8100 INX 8110 STA L0080,X 8120 LDA L01DD 8130 AND #$08 8140 BNE L0E6A 8150 JMP L0951 8160 L0E6A LDA #$F7 8170 JSR L0B23 8180 L0E6F LDA #$04 8190 JSR L0B07 8200 JMP L0967 8210 L0E77 LDA #$08 8220 JSR L0B1C 8230 JSR L0D68 8240 INX 8250 STX L01E1 8260 CPX #$7E 8270 BNE L0E8A 8280 JMP L0E56 8290 L0E8A JMP L0AC3 8300 JMP L0F35 8310 JMP L0DC1 8320 JMP L0926 8330 JMP L0D34 8340 JMP L0DC1 8350 JMP L0DC1 8360 JMP L0DC1 8370 JMP L0F30 8380 L0EA5 JSR L0C75 8390 JSR L0C41 8400 JSR L0B74 8410 JSR L0DF0 8420 BNE L0EFF 8430 JSR L0C7A 8440 JSR L0FCB 8450 JSR L0F49 8460 LDA L0380 8470 AND #$10 8480 BNE L0F0C 8490 L0EC3 LDA #$57 8500 STA $00 8510 L0EC7 BVS L0EE3 8520 LDA L039C 8530 BIT L0380 8540 BMI L0EDB 8550 JMP L0EC7 8560 L0ED4 BVS L0EE3 8570 L0ED6 BIT L0380 8580 BPL L0ED4 8590 L0EDB INX 8600 LDA L0080,X 8610 STA L0003 8620 JMP L0ED6 8630 L0EE3 JSR L0970 8640 LDA #$45 8650 BCS L0F40 8660 LDA L01DD 8670 AND #$08 8680 BEQ L0EFA 8690 JSR L0F9B 8700 BCC L0EFA 8710 LDA #$45 8720 BCS L0F06 8730 L0EFA LDA #$43 8740 L0EFC JMP L0F06 8750 L0EFF LDA #$12 8760 JSR L0B0E 8770 LDA #$4E 8780 L0F06 JSR L0C7C 8790 JMP L0841 8800 L0F0C LDA #$0C 8810 JSR L0B07 8820 LDA #$45 8830 JMP L0F06 8840 L0F16 BEQ L0F2F 8850 L0F18 JSR L08ED 8860 BEQ L0F25 8870 L0F1D LDA L0395 8880 BPL L0F1D 8890 JMP L0F18 8900 L0F25 LDA #$50 8910 STA L039E 8920 L0F2A LDA L0395 8930 BPL L0F2A 8940 L0F2F RTS 8950 L0F30 LDA #$08 8960 JSR L0B1C 8970 L0F35 JSR L08C1 8980 BCS L0F3D 8990 JMP L0EA5 9000 L0F3D JMP L0DC1 9010 L0F40 CPY #$00 9020 BEQ L0F47 9030 JMP L0EC3 9040 L0F47 BEQ L0EFC 9050 L0F49 JSR L0BCD 9060 LDA L0382 9070 AND #$3C 9080 BNE L0F58 9090 LDA #$30 9100 STA L0382 9110 L0F58 LDA L01DA 9120 JSR L0C19 9130 JSR L0F16 9140 L0F61 JSR L0C5D 9150 LDY #$04 9160 L0F66 LDA #$2F 9170 STA $00 9180 LDX #$FF 9190 L0F6C DEX 9200 BNE L0F6C 9210 LDA L01DA 9220 STA L0001 9230 LDA L01DB 9240 STA L0002 9250 CLV 9260 DEX 9270 STX L039F 9280 RTS 9290 L0F7F JSR L0F66 9300 LDA L01CE 9310 STA L0001 9320 LDA #$77 9330 STA $00 9340 L0F8B BVS L0F9A 9350 LDA L039C 9360 L0F90 BIT L0380 9370 BPL L0F8B 9380 LDA L0003 9390 JMP L0F90 9400 L0F9A RTS 9410 L0F9B JSR L0F66 9420 LDY #$01 9430 L0FA0 INX 9440 LDA #$77 9450 STA $00 9460 L0FA5 BVS L0FB8 9470 LDA L039C 9480 L0FAA BIT L0380 9490 BPL L0FA5 9500 LDA L0003 9510 CMP L0080,X 9520 BNE L0FC5 9530 INX 9540 BNE L0FAA 9550 L0FB8 JSR L0970 9560 BCC L0FBF 9570 BPL L0FA0 9580 L0FBF LDA #$F7 9590 JSR L0B23 9600 RTS 9610 L0FC5 JSR L09A3 9620 JMP L0FBF 9630 L0FCB LDA L01DD 9640 AND #$04 9650 BEQ L0FD7 9660 LDA #$50 9670 JSR L08E1 9680 L0FD7 RTS 9690 .BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 9700 .BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 9710 .BYTE $00,$00,$00,$00,$00 9720 PHP 9730 .BYTE $00 9740 PHP 9750 ; 3 1 Quote Link to comment Share on other sites More sharing options...
phaeron Posted June 2, 2018 Share Posted June 2, 2018 Wow, thanks to you and Brian for doing this! One sector is indeed hardcoded in the format routine. The instruction at $09F6 sets the initial sector in the formatted track to sector 18. There is only one other difference between rev. B and rev. C that I found, which is a small routine at $0AC6 that determines the verify sector order when formatting a disk. Because the 810 doesn't need to send the sector data back to the computer, it can read the sectors in this pass much faster than usual, 2:1 interleave. The routine is slightly different in rev. B because it has to subtract 4 from the sector number instead of adding 4 with the different sector skew. This difference shifts the remainder of the ROM by 2 bytes, causing all of the changes elsewhere. Everything else looks the same and I didn't notice any critical loops close enough to a page boundary to change timing. 3 2 Quote Link to comment Share on other sites More sharing options...
Bryan Posted June 4, 2018 Share Posted June 4, 2018 Here's a (rough) picture of the ROM in the schematic. Notice how they labeled the chip selects on the left as active low, but pulled them high? They are indeed active high, but that makes them incompatible with any 23 or 25 series EPROM I know of. Mask ROMs often have optional inverters on these pins allowing you to pick the polarity. This is how they made all those 2600 games respond to A12 properly. -Bry 1 Quote Link to comment Share on other sites More sharing options...
Nezgar Posted June 4, 2018 Author Share Posted June 4, 2018 Interesting. Now we have a new white elephant to chase. Maybe Revision A was used when the "Atari 810 Disk Peripheral Device Description" document was written, I posted about here: http://atariage.com/forums/topic/269694-improved-sector-layout-cx8111/?p=4011363 The document described the drive running at 300RPM, with sector layout matching Rev B. The document is dated 12/15/80, well after the drive was into production... Quote Link to comment Share on other sites More sharing options...
Bryan Posted June 4, 2018 Share Posted June 4, 2018 Interesting. Now we have a new white elephant to chase. Maybe Revision A was used when the "Atari 810 Disk Peripheral Device Description" document was written I deleted my comment about a Rev A ROM. The Tech-Tip was actually talking about the computer OS even though it was included in the 810 FSM. It would be interesting to see if there ever was a Rev A released. Maybe in a prototype drive. One thing is clear from the Tech-Tips, Atari had a lot of problems getting this thing to work right at first. Quote Link to comment Share on other sites More sharing options...
Nezgar Posted June 21, 2018 Author Share Posted June 21, 2018 (edited) Thanks all for the help and analysis of the ROM! I remembered a reference in Creative Atari, Page 195, in the section "Fast Format Chips" (Book dated 1983): https://www.atariarc...i/Atari_DOS.php Yet another consideration is that the difference between the B and C chips available from Atari does not consist solely of the formatting change. The chips are much different, and supposedly other improvements have been incorporated into the C revision. You may be missing out on these improvements if you install a Chicago chip. This excerpt is funny because we now know, definitively, that this is B.S. Literally the only thing in the code that Atari changed from B to C was the format skew! Unless the author was thrown off by the 2 byte shift. That same page has reference to "Chicago Chips" that user groups had come up with with an improved skew, claiming it was 10% faster than Atari's Rev C skew. I believe this is likely the 17,15,13,11,9,7,5,3,1,18,16,14,12,10,8,6,4,2 single density skew that is employed by many drives/upgrades including 810 Archiver, Happy 810, US Doubler, 1050 Duplicator, and 1050 Turbo. Wait a minute.. Happy 810 formatted with the improved skew? (My happy 1050 formats the same as 810 Rev C/1050 stock skew) Would be very interesting to get ahold of a "Chicago Chip" ROM..... Someone with pretty good hardware knowledge and an EPROM copier is needed even to make the Chicago chips from the available instructions (which have shown up in many newsletters), Now I wonder if any of these supposed newsletters are still in existence, and if any have been scanned/archived. Cheers, Ryan Edited June 21, 2018 by Nezgar Quote Link to comment Share on other sites More sharing options...
+kheller2 Posted June 22, 2018 Share Posted June 22, 2018 I swear some stock disks had a something faster than 9:1. I know there were some disks that would boot much faster than anything I could format on a stock 1050 with dos 2.x I was always curious about that. Of course now, I have no idea where said disks might be. Quote Link to comment Share on other sites More sharing options...
Nezgar Posted June 22, 2018 Author Share Posted June 22, 2018 The Stock 810 Rev C / Stock 1050 / Happy "9:1" skew is more like a 9.5 or 9.8:1 whenever crossing the gap/index mark. Optimal skew takes that into account, by including the space of the gap/index mark in the calculation, ending up with more like a true 9:1 when not crossing the gap/index, and 8.5-8.8:1 when crossing the gap/index, and still has enough time to not miss a sector and blow a rev. Also notice that Sector 1 is in the middle of the sequence, possibly making it physically about 180 degrees from sector 18 of the adjacent tracks - I think this may also reduce the delay to read the next sectors after a track step. Based on the limits of 1x 19200bps SIO I don't think a faster skew is possible, so it's highly likely this is the skew pioneered by the "Chicago Format" and later adopted by many 3rd party drive mods. 1 Quote Link to comment Share on other sites More sharing options...
sup8pdct Posted June 23, 2018 Share Posted June 23, 2018 Sparta dos and usd drives will format std disks with this faster sector layout (ie no to skewed sectors) James Quote Link to comment Share on other sites More sharing options...
Nezgar Posted June 23, 2018 Author Share Posted June 23, 2018 Sparta dos and usd drives will format std disks with this faster sector layout (ie no to skewed sectors) Yes - with the US Doubler ROM in a 1050, any DOS that issues the normal format command ($21) will result in a disk with the 17,15,13,11,9,7,5,3,1,18,16,14,12,10,8,6,4,2 single density skew, as that is baked into the US Doubler ROM. Even stock DOS 2.0S for example. SpartaDOS and other utilities (ie MyCopyR, Disk Communicator, XINIT, SCOPY) can optionally format with a different skew using the Custom Format command ($66), usually 4 8 12 16 1 5 9 13 17 2 6 10 14 18 3 7 11 15 for USDoubler UltraSpeed. (I'm curious if anyone has seen a utility that uses something different). Quote Link to comment Share on other sites More sharing options...
Nezgar Posted September 15, 2018 Author Share Posted September 15, 2018 Based on the limits of 1x 19200bps SIO I don't think a faster skew is possible, so it's highly likely this is the skew pioneered by the "Chicago Format" and later adopted by many 3rd party drive mods. So looking at the old ACE newsletters from 1980-81 that Kevin Savetz scanned, uploaded, and posted today, the "Chicago Format" has been demystified! The October 1981 issue, Page 14 (Page 113 of the PDF) has the article titled "Zoom! Convert your 810 Disk Drive for Fast Formatting" by Larry Hitz, Chicago Atari User's Group. In summary, the Chicago ACE contingent noticed Atari was releasing APX disks using a faster skew, which inspired them to create and document their own (even faster) patch to a Rev "B" ROM , and theorized some day Atari would start shipping drives with the new ROM ("C" chip), making it available to everyone. We know now Atari officially released it by October 1981 according to: "ANTIC VOL. 1, NO. 4 / OCTOBER 1982" / https://www.atarimagazines.com/v1n4/upgradesavailable.html Also included is method to read the mask ROM in an EPROM programmer compatible with 2716. Fast Format Patch to 810 Rev B ROM: New program for EPROM 2716... $0800 Starting Address . . $086F F0 F2 F4 F6 F8 FA FC FE $0877 ED EF F1 F3 F5 F7 F9 FB $087F FD . . $09F7 EE There's a typo in the HEX code that's corrected in the next newsletter, which I've already incorporated above, Nov 81 P 14 (PDF Page 130). Inverting these bytes, we get: 0f 0d 0b 09 07 05 03 01 12 10 0e 0c 0a 08 06 04 02, which translates to this sector order: 15 13 11 9 7 5 3 1 18 16 14 12 10 8 6 4 2 Notice sector 17 is missing..., which is at byte at $09F7, which we previously noticed in the stock Rev B ROM - phaeron explains it in post #4 above: "The instruction at $09F6 sets the initial sector in the formatted track to sector 18." So, this means that sector 17 will be the first sector, resulting in final sector order of: 17 15 13 11 9 7 5 3 1 18 16 14 12 10 8 6 4 2 And guess what...... this matches the single density skew formatted by all of these mods or 3rd party drives since: 810 Archiver Happy 810 Percom RFD-40S1 1050 US Doubler 1050 Duplicator 1050 CSS Super Archiver 1050 Turbo TOMS 1050 Tygrys 1050 ........likely proving this was the origin of this 'fastest' standard SIO speed skew on Atari disks, setting the standard for all these future mods. It's possible the 810 Archiver was early enough to potentially contend for that title, but dates in the FAQ indicate 83-84 for the Archiver. But then, Michael Gustafson aka Spartan Software of Minnesota (Creator of the Archiver 810), later ICD, was based in Rockford IL, not far from Chicago... I guess it's possible he had a hand in the development of the "Chicago Format" mod to the 810 Rev B Firmware, or shared his findings to the club during his development of the 810 Archiver, or merely just incorporated it into his own product, like many others did after. The ACE article also confirms phaeron's theory in a prior post that the improved skew made DOS 1.0 even slower: "It should be said that neither our patches nor Atari's work well with DOS I and really should be used only with DOS II." Lastly, phaeron's other observation in post #4 above was about the only other difference from Atari's 810 Rev "B" vs "C" which was a "small routine at $0AC6 that determines the verify sector order when formatting a disk. Because the 810 doesn't need to send the sector data back to the computer, it can read the sectors in this pass much faster than usual, 2:1 interleave. The routine is slightly different in rev. B because it has to subtract 4 from the sector number instead of adding 4 with the different sector skew." This would imply that the verify phase of the format may actually be slower with this patch compared to the stock B or C ROMs since it appears this nuance was overlooked. I'll test this disk formatting theory, and compare to stock Rev B and C. 2 Quote Link to comment Share on other sites More sharing options...
Nezgar Posted September 16, 2018 Author Share Posted September 16, 2018 Attached is the "Chicago Fast Format" patched Rev B ROM for those interested. I tested it with Altirra this evening, and timed the formatting of a disk: Rev B: 34s Rev C: 34s Rev B Chicago Patch: 42s With full drive emulation sound, you can hear the difference in time between track steps in the verify phase using the patch is slower than B or C. Which confirms my theory about the slower format verify since they did not also patch the verify sector order. Reading from a disk formatted with this ROM is definitely faster than B or C, but I noticed that WRITES (without verify) often blow revs, and multiple times per track. I had noticed this previously with my real Rev C 810 and since I've only had an 810 relatively shortly, i chocked it up to needing tuning, RPM, etc, but this seems to solidify to me that this is a common 810 behaviour. I guess due to the slower CPU (500Khz) compared to the 1050 (1mhz) ? For further supporting evidence, I ran RWTEST v3.9a on each type of formatted disk within Altirra: Stock Rev B: DOS writing: 821.530778 B/sec DOS reading: 832.326647 B/sec DOS average: 826.928712 B/sec Overall run-time: 0:2:43.68 (9821) Time spent in IO: 0:2:38.30 (9498) Stock Rev C: DOS writing: 652.311814 B/sec DOS reading: 1065.071093 B/sec DOS average: 858.691453 B/sec Overall run-time: 0:2:46.51 (9991) Time spent in IO: 0:2:41.78 (9707) Chicago Format: DOS writing: 450.128051 B/sec DOS reading: 1167.682759 B/sec DOS average: 808.905405 B/sec Overall run-time: 0:3:26.85 (12411) Time spent in IO: 0:3:21.45 (12087) These numbers show the read performance of a disk formatted with the Chicago patch is indeed 40.3% faster than the stock Rev B, and 9.6% faster than a disk formatted by stock Rev C. However, the faster reading comes at the cost of write performance. The 810 can only handle writing to a Chicago skew disk at 54% the speed of a Rev B skew disk, and 69% the speed of a Rev C skew disk. Interestingly, Atari's own 'upgrade' from B to C also resulted in a 21% decline in write performance. The 810's maximum write speed seems to be attained with Rev B's 12:1 skew, providing a further supporting reason Atari may have originally chosen it. 810ROMB_CHICAGO.BIN 3 Quote Link to comment Share on other sites More sharing options...
1050 Posted September 16, 2018 Share Posted September 16, 2018 (I'm curious if anyone has seen a utility that uses something different). Bob Puff's US+ OS and the Black Box both can use 'something different' IIRC. It appeared to be something I had not seen before either, but done so long ago at this point I have no further useful thing to say about unusual skews found in the wild. Had I equipment that could actually explore the area just a little, I might have paid a bit more attention to what I found. As it was just a side note that the BB will change your skew if you do it wrong and the code for US+ has yet a different set of skew tables. Quote Link to comment Share on other sites More sharing options...
phaeron Posted September 16, 2018 Share Posted September 16, 2018 Reading from a disk formatted with this ROM is definitely faster than B or C, but I noticed that WRITES (without verify) often blow revs, and multiple times per track. I had noticed this previously with my real Rev C 810 and since I've only had an 810 relatively shortly, i chocked it up to needing tuning, RPM, etc, but this seems to solidify to me that this is a common 810 behaviour. I guess due to the slower CPU (500Khz) compared to the 1050 (1mhz) ? Looking at the traces, there are two main differences between the 810 and the 1050 that cause this difference in behavior. The first is that the 810 computes the checksum as a separate pass while the 1050 does it during reception. This costs 2.3ms. The second is that it has a much longer delay loop after doing a Force Interrupt on the FDC, which takes another 2.5ms twice (once before and after the write). This puts the 810 right on the edge timing-wise while the 1050 has a margin of about 3.5-4% of a rotation, or 7-8ms. It would take some tight coding in the receive routine, but the 810 could probably manage the tighter timing even with its slower CPU. One of the enhancements probably already does this. 4 Quote Link to comment Share on other sites More sharing options...
Nezgar Posted September 17, 2018 Author Share Posted September 17, 2018 Thanks Phaeron for your insight! "One of the enhancements" I am thinking of is the 810 Archiver... so I gave it a go. First, I found formatting a disk using 810 Archiver ROM completes in 27 seconds, 7 seconds faster than the stock 810 ROM's. Probably because it does a format and verify of each track before stepping to the next, instead of format from 0-39, then verify from 39-0. But this behaviour is already documented in the Altirra Hardware Reference Manual (2018-08-12 Edition) Disk formatted by Stock 810 Rev C, using 810 Archiver ROM: DOS writing: 949.448046 B/sec DOS reading: 1068.548876 B/sec DOS average: 1008.998461 B/sec Overall run-time: 0:2:15.11 (8107) Time spent in IO: 0:2:10.18 (7811) Already we've beaten all stock firmware benchmarks for writing! Now, a disk formatted with the 810 Archiver, which creates the same skew as the "Chicago Format" and benchmarked RWTest: DOS writing: 1089.297398 B/sec DOS reading: 1181.383008 B/sec DOS average: 1135.340203 B/sec Overall run-time: 0:2:0.75 (7245) Time spent in IO: 0:1:55.48 (6929) Wow! I'm impressed Michael Gustafson really got the best possible non-buffered write performance out of the 810 with his Archiver code. One last minor observation... even though the Archiver and 'Chicago Format' sector orders are the same, the timing must be slightly different enough to cause the Archiver to miss sectors sometimes writing to disks formatted by the Chicago ROM: DOS writing: 966.982792 B/sec DOS reading: 1180.672615 B/sec DOS average: 1073.827703 B/sec Overall run-time: 0:2:8.93 (7736) Time spent in IO: 0:2:3.11 (7387) It would be pretty spiffy to patch optimized write code into an 810 Stock ROM some day... 1 Quote Link to comment Share on other sites More sharing options...
Mclaneinc Posted September 18, 2018 Share Posted September 18, 2018 Would the optimised code cause any breakages with disk protection? Obviously I understand the code you mentioned is writing performance but any knock on effects? Paul.. Quote Link to comment Share on other sites More sharing options...
Nezgar Posted September 18, 2018 Author Share Posted September 18, 2018 I highly doubt there would be any effects, since timing for reads is mostly only affected by the physical sector order/timing on the disk. The 810 Archiver operates 'just like a stock 810' (according to the installation manual) until the correct Archiver OPEN command is sent to open up the extra commands. I am going to benchmark the 810 Rev E ROM to see if Atari themselves optimized anything on the write side. I'd like to test Happy 810 in unhappy mode, but have to find some Happy 810 ROMs. Quote Link to comment Share on other sites More sharing options...
Mclaneinc Posted September 18, 2018 Share Posted September 18, 2018 The happy 810 roms images are on here but if you need them faster then let me know....If you need real or preburnt ones then I'm sorry I can't help... 1 Quote Link to comment Share on other sites More sharing options...
Nezgar Posted September 19, 2018 Author Share Posted September 19, 2018 Testing with Stock 810 Rev E. Disk formatted with Rev E, 34s to format. then RWtest: DOS writing: 602.472709 B/sec DOS reading: 1062.190186 B/sec DOS average: 832.331447 B/sec Overall run-time: 0:2:55.46 (10528) Time spent in IO: 0:2:50.25 (10215) Read performance exactly the same as Rev C, but writes a little slower... extra command check wasting a few more cycles per write? Testing with the Happy 810 "Pre V7" ROM, using the disk as formatted by Stock Rev E: DOS writing: 598.70668 B/sec DOS reading: 1313.350207 B/sec DOS average: 956.028443 B/sec Overall run-time: 0:2:44.50 (9870) Time spent in IO: 0:2:39.15 (9549) As expected, stellar read performance due to track buffer, but write performance very close to rev C/E. Unlike the Happy 1050, Happy 810 does not buffer writes. So they didn't make the same optimizations to the write code like the Archiver did. Formatting a disk with the Happy 810 (Pre V7) is superbly quick - 21 seconds! the sector snooping in Altirra seems to suggest the verify phase isn't checking as thoroughly? Now benchmarking the disk formatted by Happy 810 (Pre-V7) - is known to use the Chicago layout. DOS writing: 503.903133 B/sec DOS reading: 1306.359654 B/sec DOS average: 905.131393 B/sec Overall run-time: 0:3:6.13 (11168) Time spent in IO: 0:2:59.98 (10799) And confirmed Happy 810 (Pre-V7) due to lackluster write performance at Standard 1x SIO speed. Hias HSIO patch doesn't seem to kick this drive in into 'Warp Speed' mode (2x SIO). If I could, it would probably overcome the delays since the sectors can transmit faster to the drive. Testing Happy 810 V7 with SpartaDOS 3.3, I had problems... it canto engage ultraspeed (using Sparta routenes) or Warp Speed (using Hias' routines+DOS 2.0), format a disk, and start RWTEST, but after writing a few tracks it errors and starts doing the fast on/off of the drive motor (indicating a write error). Not sure if it's due to emulation.... Tried non-ultraspeed too... Got to play with it some more. And to top this off for tonight.... I ended off messing around with DOS 2.0, and found that Stock Rev B/C/D all write full speed to a Chicago layout disk using DOS 2.0. Ugh, so spartaDOS is the culprit with the slow routines???? more later... Quote Link to comment Share on other sites More sharing options...
ijor Posted September 19, 2018 Share Posted September 19, 2018 The 810 Archiver operates 'just like a stock 810' (according to the installation manual) until the correct Archiver OPEN command is sent to open up the extra commands. That is probably not 100% accurate. What the manual means is that a higher level, the SIO command operations are the same. Until you open The Chip you can't send any of the special SIO commands or parameters. But that is not to say that the firmware is identical. Obviously not. Among other things the internal timing is not exactly the same. And in some extreme cases, as were discussing in other threads, this translates to some minor incompatibilities with a stock drive. Formatting a disk with the Happy 810 (Pre V7) is superbly quick - 21 seconds! the sector snooping in Altirra seems to suggest the verify phase isn't checking as thoroughly? That was probably the most famous Happy trademark feature. I didn't own a Happy 810 back on the day, only a Happy 1050 one. I suspect this is the same on both. You could easily distinguish the Happy by the sound of the stepping motor when formatting a disk. 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.