ACID: Unterschied zwischen den Versionen
TFM (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Der '''ACID''' ("Amstrad Cartridge Identification Device") Chip befindet sich in jedem Modul ("Cartridge") der GX4000 Spielkonsole bzw. 464 Plus und…“) |
(kein Unterschied)
|
Aktuelle Version vom 7. Januar 2018, 20:04 Uhr
Der ACID ("Amstrad Cartridge Identification Device") Chip befindet sich in jedem Modul ("Cartridge") der GX4000 Spielkonsole bzw.
464 Plus und 6128 Plus Rechner.
Nachdem divese Mitglieder der Deutschen CPC-Szene die Hardware des ACID Chips dekodiert haben ist es nun möglich den ACID auf Hardware-
Ebene zu emulieren (z.B. mit Hilfe eines CPLD Chips).
Inhaltsverzeichnis
Technik
Der ACID Chip der Module besitzt 16 Pins. Beim Einschalten sendet er eine serielle Folge von Bytes an den 160 Pin ASIC Chip der GX4000 bzw.
des 464/6128 Plus Rechners. Die Daten werden durch eine Reihe von Shift und Xor Schaltungen generiert. Weiterhin üben auch die Adress- und
"Enable"-Signate des EPROMs des Moduls einen Einfluss aus. Falls dieser Datenstrom nicht vom ACID zum ASIC gesendet wird, dann zerstreut
der ASIC den Zugriff auf den Speicher, dadurch wird das Modul unbenutzbar.
;ACID reverse-engineered 13-16 February 2010 von Martin Korth ;below is repeated on every CLK cycle... CmpVal=13596h, XorVal=0c820h if PinA0=1 then CmpVal=CmpVal XOR 0000ch, XorVal=XorVal XOR 00004h if PinA1=1 then CmpVal=CmpVal XOR 06000h, XorVal=XorVal XOR 06000h if PinA2=1 then CmpVal=CmpVal XOR 000c0h, XorVal=XorVal XOR 00080h if PinA3=1 then CmpVal=CmpVal XOR 00030h, XorVal=XorVal XOR 00020h if PinA4=1 then CmpVal=CmpVal XOR 18000h, XorVal=XorVal XOR 08000h if PinA5=1 then CmpVal=CmpVal XOR 00003h, XorVal=XorVal XOR 00000h if PinA6=1 then CmpVal=CmpVal XOR 00600h, XorVal=XorVal XOR 00000h if PinA7=1 then CmpVal=CmpVal XOR 01800h, XorVal=XorVal XOR 00800h if PinCE=0 AND (ShiftReg OR 100h)=CmpVal then ShiftReg=ShiftReg XOR XorVal NewBit=ShiftRegBit0 XOR ShiftRegBit9 XOR ShiftRegBit12 XOR ShiftRegBit16 ShiftReg=(ShiftReg SHR 1) + (NewBit SHL 16) Wait for falling edge on PinCLK if PinCCLR=0 then ShiftReg=1FFFFh ;\done at falling CLK edge PinSIN=ShiftRegBit0 ;/ ;Mind that above is a software example - a hardware solution obviously ;wouldn't require CmpVal and XorVal registers - instead, hardware would ;directly deal with the PinAx (or NOT PinAx) signals.
Es ist problemlos möglich das EPROM eines Moduls zu ersetzen oder neu zu beschreiben, der ACID schützt also nicht vor dem Kopieren der
Software auf den Modulen. Allerdings verhindert er, dass unlizensierte Software in großem Stiel verkauft wird.
Es sind jedoch mittlerweile einige Quessen von ACIDs im Internet aufgetaucht. Außerdem kann der ACID emuliert werden.
Timings
Auch wenn die Funktion des ACID bekannt ist, so ist doch das präzise Timing der einzelnen Signale des Chips nicht ganz bekannt.
Pinbelegung
+--()--+ GND |1 16| +5V AMSTRAD 40908 A7 |2 15| A6 1L03P1003 CLK4|3 14| A5 JAPAN NC |4 13| A4 CCLR|5 12| A3 SIN |6 11| A2 /CE |7 10| A1 GND |8 9| A0 +------+
Pin Nummer | Signal-Name | Daten-Richtung | Beschreibung |
1 | GND | - | Ground |
2 | A7 | Input | EPROM Address A7 |
3 | CLK4 | Input | Clock (4 MHz) |
4 | NC | - | Not connected |
5 | CCLR | Input | Reset ACID |
6 | SIN | Output | Serial Data |
7 | /CE | Input | EPROM Chip enable |
8 | GND | - | Ground |
9 | A0 | Input | EPROM Address A0 |
10 | A1 | Input | EPROM Address A1 |
11 | A2 | Input | EPROM Address A2 |
12 | A3 | Input | EPROM Address A3 |
13 | A4 | Input | EPROM Address A4 |
14 | A5 | Input | EPROM Address A5 |
15 | A6 | Input | EPROM Address A6 |
16 | +5V | - | Vcc |
Anmerkung: Die beiden GND Pins sind miteinander verbunden (innerhalb des Chips). Der NC Pin scheint immer "high" zu sein.
Klone / Emulationen / Nachbauten
- Ein ACID Ersatz nutzt den Xilinx XC9536 CPLD und eine Verilog Implementation des ACID Chips. Entwickelt von Octoate und
- Miguel Angel (aka mcleod_ideafix) publizierte viele Informationen seiner ACID Implementation in einem CPLD. Verilog Quellcode vorhanden.
- Es ist wohl auch möglich den Plus ohne ACID zu nutzen, dazu mißbraucht man einen Timing-Bug des ASICs. Eine Idee von Nilquader.