Jump to content
Nezgar

The Atari 810 Revision B ROM has finally been found & dumped!

Recommended Posts

Following up on previous related threads:

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

  • Like 12

Share this post


Link to post
Share on other sites

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

  • Like 2

Share this post


Link to post
Share on other sites

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 ;

 

  • Like 3
  • Thanks 1

Share this post


Link to post
Share on other sites

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.

  • Like 3
  • Thanks 2

Share this post


Link to post
Share on other sites

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

post-3606-0-33756400-1528131745.jpg

  • Like 1

Share this post


Link to post
Share on other sites

Interesting. Now we have a new white elephant to chase. :P 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...

Share this post


Link to post
Share on other sites

Interesting. Now we have a new white elephant to chase. :P 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.

Share this post


Link to post
Share on other sites

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 by Nezgar

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.

  • Like 1

Share this post


Link to post
Share on other sites

Sparta dos and usd drives will format std disks with this faster sector layout (ie no to skewed sectors)

 

James

Share this post


Link to post
Share on other sites

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).

Share this post


Link to post
Share on other sites

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.

  • Like 2

Share this post


Link to post
Share on other sites

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

  • Like 3

Share this post


Link to post
Share on other sites

(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.

Share this post


Link to post
Share on other sites

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.

  • Like 4

Share this post


Link to post
Share on other sites

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...

  • Like 1

Share this post


Link to post
Share on other sites

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..

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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...

  • Like 1

Share this post


Link to post
Share on other sites

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...

Share this post


Link to post
Share on other sites

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. :)

 

  • Like 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...