Mysterious Program in EPROM of Synertek SYM-1 Owned by Composer Richard Teitelbaum (like KIM-1)
Вставка
- Опубліковано 26 вер 2024
- Here's the disassembly of the program we found (I've tasked a student with reverse engineering it; $ACxx addresses are memory-mapped I/O):
C000 A9 01 LDA #$01
C002 8D 03 AC STA $AC03
C005 A9 FF LDA #$FF
C007 8D 02 AC STA $AC02
C00A A9 01 LDA #$01
C00C 8D 0C AC STA $AC0C
C00F A9 00 LDA #$00
C011 8D 03 A8 STA $A803
C014 A9 FF LDA #$FF
C016 8D 02 A8 STA $A802
C019 A9 88 LDA #$88
C01B 8D 0C A8 STA $A80C
C01E A9 01 LDA #$01
C020 85 31 STA $31
C022 A9 00 LDA #$00
C024 85 33 STA $33
C026 85 2F STA $2F
C028 85 39 STA $39
C02A 85 3A STA $3A
C02C A9 00 LDA #$00
C02E 85 30 STA $30
C030 A2 08 LDX #$08
C032 AD 0D AC LC032 LDA $AC0D
C035 4A LSR A
C036 4A LSR A
C037 90 F9 BCC LC032
C039 AD 00 AC LDA $AC00
C03C 49 FF EOR #$FF
C03E 8D 00 AC STA $AC00
C041 AD 01 AC LDA $AC01
C044 29 80 AND #$80
C046 85 34 STA $34
C048 A9 00 LC048 LDA #$00
C04A 06 39 ASL $39
C04C 90 02 BCC LC050
C04E 09 01 ORA #$01
C050 06 3A LC050 ASL $3A
C052 90 02 BCC LC056
C054 09 02 ORA #$02
C056 A8 LC056 TAY
C057 AD 0D AC LC057 LDA $AC0D
C05A 29 10 AND #$10
C05C F0 F9 BEQ LC057
C05E 98 TYA
C05F 4D 00 AC EOR $AC00
C062 8D 00 AC STA $AC00
C065 06 30 ASL $30
C067 06 2F ASL $2F
C069 AD 01 AC LDA $AC01
C06C 29 80 AND #$80
C06E C5 34 CMP $34
C070 F0 04 BEQ LC076
C072 E6 30 INC $30
C074 E6 2F INC $2F
C076 A5 31 LC076 LDA $31
C078 F0 11 BEQ LC08B
C07A A5 2F LDA $2F
C07C C9 FD CMP #$FD
C07E D0 0B BNE LC08B
C080 A9 00 LDA #$00
C082 A2 00 LDX #$00
C084 85 33 STA $33
C086 85 31 STA $31
C088 4C 8E C0 JMP LC08E
C08B CA LC08B DEX
C08C D0 A4 BNE LC032
C08E E6 33 LC08E INC $33
C090 A5 33 LDA $33
C092 C9 10 CMP #$10
C094 D0 0E BNE LC0A4
C096 A5 30 LDA $30
C098 C9 FD CMP #$FD
C09A F0 04 BEQ LC0A0
C09C A9 01 LDA #$01
C09E 85 31 STA $31
C0A0 A9 00 LC0A0 LDA #$00
C0A2 85 33 STA $33
C0A4 A5 30 LC0A4 LDA $30
C0A6 8D 00 A8 STA $A800
C0A9 A9 00 LDA #$00
C0AB 85 30 STA $30
C0AD A2 08 LDX #$08
C0AF AD 0D AC LC0AF LDA $AC0D
C0B2 4A LSR A
C0B3 4A LSR A
C0B4 90 F9 BCC LC0AF
C0B6 AD 00 AC LDA $AC00
C0B9 49 FF EOR #$FF
C0BB 8D 00 AC STA $AC00
C0BE AD 01 AC LDA $AC01
C0C1 29 80 AND #$80
C0C3 85 34 STA $34
C0C5 AD 0D A8 LC0C5 LDA $A80D
C0C8 29 02 AND #$02
C0CA F0 F9 BEQ LC0C5
C0CC AD 01 A8 LDA $A801
C0CF 85 39 STA $39
C0D1 AD 0D A8 LC0D1 LDA $A80D
C0D4 29 02 AND #$02
C0D6 F0 F9 BEQ LC0D1
C0D8 AD 01 A8 LDA $A801
C0DB 85 3A STA $3A
C0DD 4C 48 C0 JMP LC048
.END
;auto-generated symbols and labels
LC032 $C032
LC050 $C050
LC056 $C056
LC057 $C057
LC076 $C076
LC08B $C08B
LC08E $C08E
LC0A4 $C0A4
LC0A0 $C0A0
LC0AF $C0AF
LC0C5 $C0C5
LC0D1 $C0D1
LC048 $C048
Support this channel via a special purpose donation to the Georgia Tech Foundation (GTF210000920), earmarked for my work: • Support This Channel v...
Very cool. If only Bach had had EPROMs, what a forensic trip that would be.
it's a serial-to-parallel converter that uses 2 ports on each of the 2 6522's U28 & U29. i tried sharing a link to some pseudocode for it here in the YT comment, but YT keeps deleting my comments for some reason.
at the risk of having some AI bot delete my comments again, you can look on a certain very popular source-code sharing site whose name has to do with parts of wheels connected by spokes. on a part of that site whose name rhymes with 'jist', and under my YT username, you can find a recent such 'jist' that has the same name as the eeprom above. i have been a member on here for god knows how long. you would have thought that YT would have worked out i'm not a spam-bot by now...
I found it, thanks!!! Wow, you are FAST!
Having 32 bit Microchip Fubarino is a blast with 256kb storage and 64kb ram.
: )
I tasked ChatGPT with reverse engineering it. Way dumber than your student but it's really fast! Near as it and I can tell this feels like glue logic to bring external devices together. I'll be waiting to hear what the smart people figured out.
Because I'm an inveterate geek...
C000: A9 01 8D 03 AC A9 FF 8D
C008: 02 AC A9 01 8D 0C AC A9
C010: 00 8D 03 A8 A9 FF 8D 02
C018: AB A9 88 8D 0C A8 A9 01
C020: 85 31 A9 00 85 33 85 2F
C028: 85 39 85 3A A9 00 85 30
C030: A2 08 AD 0D AC 4A 4A 90
C038: F9 AD 00 AC 49 FF 8D 00
C040: AC AD 01 AC 29 80 85 34
C048: A9 00 06 39 90 02 09 01
C050: 06 3A 90 02 09 02 A8 AD
C058: 0D AC 29 10 F0 F9 98 4D
C060: 00 AC 08 00 AC 06 30 06
C068: 2F AD 01 AC 29 80 C5 34
C070: F0 04 E6 30 E6 2F A5 31
C078: F0 11 A5 2F C9 FD D0 0B
C080: A9 00 A2 00 85 33 85 31
C088: 4C BE C0 CA D0 A4 E6 33
C090: A5 33 C9 10 D0 0E A5 30
C098: C9 FD F0 04 A9 01 85 31
C0A0: A9 00 85 33 A5 30 8D 00
C0A8: AB A9 00 85 30 A2 08 AD
C0B0: 0D AC 4A 4A 90 F9 AD 00
C0B8: AC 49 FF 8D 00 AC AD 01
C0C0: AC 29 80 85 34 AD 0D AB
C0C8: 29 02 F0 F9 AD 01 A8 85
C0D0: 39 AD 0D AB 29 02 F0 F9
C0D8: AD 01 A8 95 3A 4C 48 C0
which disassembles to
* = $C000
C000 A9 01 LDA #$01
C002 8D 03 AC STA $AC03
C005 A9 FF LDA #$FF
C007 8D 02 AC STA $AC02
C00A A9 01 LDA #$01
C00C 8D 0C AC STA $AC0C
C00F A9 00 LDA #$00
C011 8D 03 A8 STA $A803
C014 A9 FF LDA #$FF
C016 8D 02 AB STA $AB02
C019 A9 88 LDA #$88
C01B 8D 0C A8 STA $A80C
C01E A9 01 LDA #$01
C020 85 31 STA $31
C022 A9 00 LDA #$00
C024 85 33 STA $33
C026 85 2F STA $2F
C028 85 39 STA $39
C02A 85 3A STA $3A
C02C A9 00 LDA #$00
C02E 85 30 STA $30
C030 A2 08 LDX #$08
C032 AD 0D AC LC032 LDA $AC0D
C035 4A LSR A
C036 4A LSR A
C037 90 F9 BCC LC032
C039 AD 00 AC LDA $AC00
C03C 49 FF EOR #$FF
C03E 8D 00 AC STA $AC00
C041 AD 01 AC LDA $AC01
C044 29 80 AND #$80
C046 85 34 STA $34
C048 A9 00 LC048 LDA #$00
C04A 06 39 ASL $39
C04C 90 02 BCC LC050
C04E 09 01 ORA #$01
C050 06 3A LC050 ASL $3A
C052 90 02 BCC LC056
C054 09 02 ORA #$02
C056 A8 LC056 TAY
C057 AD 0D AC LC057 LDA $AC0D
C05A 29 10 AND #$10
C05C F0 F9 BEQ LC057
C05E 98 TYA
C05F 4D 00 AC EOR $AC00
C062 08 PHP
C063 00 BRK
C064 AC 06 30 LDY $3006
C067 06 2F ASL $2F
C069 AD 01 AC LDA $AC01
C06C 29 80 AND #$80
C06E C5 34 CMP $34
C070 F0 04 BEQ LC076
C072 E6 30 INC $30
C074 E6 2F INC $2F
C076 A5 31 LC076 LDA $31
C078 F0 11 BEQ LC08B
C07A A5 2F LDA $2F
C07C C9 FD CMP #$FD
C07E D0 0B BNE LC08B
C080 A9 00 LDA #$00
C082 A2 00 LDX #$00
C084 85 33 STA $33
C086 85 31 STA $31
C088 4C BE C0 JMP LC0BE
C08B CA LC08B DEX
C08C D0 A4 BNE LC032
C08E E6 33 INC $33
C090 A5 33 LDA $33
C092 C9 10 CMP #$10
C094 D0 0E BNE LC0A4
C096 A5 30 LDA $30
C098 C9 FD CMP #$FD
C09A F0 04 BEQ LC0A0
C09C A9 01 LDA #$01
C09E 85 31 STA $31
C0A0 A9 00 LC0A0 LDA #$00
C0A2 85 33 STA $33
C0A4 A5 30 LC0A4 LDA $30
C0A6 8D 00 AB STA $AB00
C0A9 A9 00 LDA #$00
C0AB 85 30 STA $30
C0AD A2 08 LDX #$08
C0AF AD 0D AC LC0AF LDA $AC0D
C0B2 4A LSR A
C0B3 4A LSR A
C0B4 90 F9 BCC LC0AF
C0B6 AD 00 AC LDA $AC00
C0B9 49 FF EOR #$FF
C0BB 8D 00 AC STA $AC00
C0BE AD 01 AC LC0BE LDA $AC01
C0C1 29 80 AND #$80
C0C3 85 34 STA $34
C0C5 AD 0D AB LC0C5 LDA $AB0D
C0C8 29 02 AND #$02
C0CA F0 F9 BEQ LC0C5
C0CC AD 01 A8 LDA $A801
C0CF 85 39 STA $39
C0D1 AD 0D AB LC0D1 LDA $AB0D
C0D4 29 02 AND #$02
C0D6 F0 F9 BEQ LC0D1
C0D8 AD 01 A8 LDA $A801
C0DB 95 3A STA $3A,X
C0DD 4C 48 C0 JMP LC048
.END
;auto-generated symbols and labels
LC032 $C032
LC050 $C050
LC056 $C056
LC057 $C057
LC076 $C076
LC08B $C08B
LC0BE $C0BE
LC0A4 $C0A4
LC0A0 $C0A0
LC0AF $C0AF
LC0C5 $C0C5
LC0D1 $C0D1
LC048 $C048
Except I got some AB and A8's crossed at least early on.
check out the video description ;-)
@@Spongman LOL
Maybe this is something to add? 🙂
A800 memory mapping are control registers for VIA (6522 Versatile Interface Adapter) #2 AC00 memory mappings are for VIA #3. The one byte addresses are down in the zero page but.... I haven't yet found good explanation of them (e.g. $30) except that $FF and $FE are supposed to be reserved for the monitor program (which clearly this doesn't seem to be concerned about 😀)
There are a few variations of the manual, but the best I found was SYM-1_Reference_Manual_198101.pdf (had to do save as and override Chrome's basic insistence that anything with old certs was baaaaad).