La Scheda Floppy Disk Controller consente di selezionare l’unità e il lato del floppy disk driver nella modalità: A (Drive1 Side1), B (Drive1 Side2), C (Drive2 Side1) e D (Drive2 Side2), nonché attraverso il chip WD1791 (ha il bus dati INVERTITO!) è possibile gestire tutte le procedure per leggere/scrivere ESCLUSIVAMENTE i floppy disk driver sia nei formati da 5,25″ che in quelli da 8″. Dal manuale acquisito si riporta:
La selezione delle unità avveniva inviando al WD1971 due comandi:
- In scrittura all’indirizzo della porta di i/o 3FH per la selezione della Unità e del rispettivo Side:
- Output 3FH
Bit 0,1 e 2: selezione drive 001,010,100
Bit 3 : Selezione Side 1 prima faccia e 0 seconda faccia)
- Output 3FH
- e il secondo per pilotare l’operazione I/O del WD1971 sulle porte:
- Output BCH 1791 Registro Comandi/Status
- Output BDH 1791 Registro Traccia
- Output BEH 1791 Registro Settore
- Output BFH 1791 Registro Dati
Quando utilizzata in modalità lettura, la porta 3FH riporta le seguenti informazioni;
- Input 3FH
Bit 0,1,3 rilettura dati da uscita
Bit 4 Lettura Stato Drive Ready
Bit 5 Lettura Linea HLT (Head Load Timing) da 1791
Bit 6 Lettura INTRQ da 1791
Bit 7 Lettura Data Req da 1791
II 16/10/2020 Antonio Porcino stava procedendo per scrivere uno specifico emulatore del General Processor modello T. Nel far questo stava disassemblando uno dei firmware in nostro possesso e scopre che ogni comando in uscita o uno stato in ingresso verso/da FDC viene sempre complementato prima di venire gestito dalla CPU. Confrontando con l’hardware si scopre che il chip utilizzzato era un WD1791 che presenta un bus dati invertente pertanto ogni bit dei dati scritto nei dischetti del GPmodT risulta sempre invertito. Ad es la lettera A = 41H = 0100 0001B si trova scritta nel floppy disk come 1011 1110B = BEH. Non possiamo sapere se si tratta di una scelta per disporre di una protezione proprietaria. Certo è che la CPU deve effettuare sempre una operazione di complemento per ogni dato che legge o scrive sui dischi. Sarebbe stato piu semplice utilizzare un WD1793 senza dover effettuare alcuna operazione di complemento nel firmware. Quindi:
Tutti i dati nei dischi sono presenti in forma complementata.
Inoltre il CP/M viene collocato in RAM come segue:
Inizio CP/M in RAM a A400H
Fine CP/M = A400 + 1A00h= BDFFH
Abbiamo individuato almeno due tipi di FDC. Sono riconoscibili per la disposizione del WD1791:
Scheda FDC– Controller floppy, 3088 rev. B date 7.11.79 (Solo FM)
La scheda interfaccia una coppia di Floppy Disk Drive 8” o 5,25” con lettura/scrittura operando SOLO in FM mode in quanto si è scoperto che la linea /DDEN chip WD1791 è connessa rigidamente a +5V. E’ presente un quarzo da 8 MHz ed un jumper “stampato” seleziona la corretta divisione della frequenza del clock per da configurare il funzionamento a 1MHz in caso di floppy drive da 5,25” e a 2MHz in caso di presenza floppy drive da 8”.
Con riferimento alla foto e con tutti i chip sono orientati verso sinistra o verso l’alto:
Id | Tipo | Funzione |
U1 | 7404N | Buffer segnali ingresso |
U2 | 7404N | Oscillatore e Buffer segnali uscita |
U3 | WD1791 | FDC chip |
U4 | 74LS193N | Divisore Freq. Clock in lettura |
U5 | 74123N | Lettura Raw Data da Drive |
U6 | 74LS93N | Divisore frequenza per drive 8” (2MHz) e 5,25” (1MHz) |
U7 | 74LS374N | Octal D-Type Edge Triggered Flip-Flops with 3-State Outputs |
U8 | 74LS245N | Selezione Side Select e Unità Drive |
U9 | 74LS139N | Selezione Side Select e Unità Drive |
Scheda FDC– Controller floppy, 3088A rev. C date 13.3.81 (FM/MFM)
La scheda interfaccia una coppia di Drive Floppy 8” o 5,25” con lettura/scrittura operando sia in FM che in MFM mode (linea /DDEN chip WD1791 connessa a uscita Q2 pin5 di U7 e gestita da D6). E’ in grado di gestire floppy disk drive sia in Doppia Faccia che in Doppia Densità. Ha un quarzo da ___MHz.
Sono presenti alcuni Jumpers effettuati direttamente come piste di circuito stampato tanto da risultare quasi invisibili e sono presenti anche delle piste tagliate dovute a modifiche successive. Uno dei jumper “stampati” serve certamente per effettuare la selezione fissa del clock per configurare il funzionamento a 1MHz in caso di drive da 5,25” e a 2MHz in caso di presenza drive da 8”.
Sono stati individuati alcuni Jumper precollegati:
Id | Connettore drive | Funzione |
A | Pin 34 | |
B | Pin 12 | Sel2 |
C | Pin 10 | Sel1 |
D | Pin 4 | ?? |
E | Pin 14 | Sel3 |
Con riferimento alla foto e con tutti i chip sono orientati verso sinistra o verso l’alto:
Id | Tipo | Funzione |
U1 | ?? | |
U2 | ?? | |
U3 | 74LS153 | |
U4 | WD1791 | FDC chip |
U5 | 74LS139 | |
U6 | 74LS139N | |
U7 | 74LS374N | Octal D-Type Edge Triggered Flip-Flops with 3-State Outputs |
U8 | 74LS245N | |
U9 | 7406 | |
U10 | 74123N | |
U11 | 74LS193N |
Sono inoltre presenti vari Test Point di cui non si conosce la funzionalità:
Id | Tipo | Funzione |
TP1 | ||
TP2 | ||
TP3 | ||
TP4 | ||
TP5 | ||
TP6 | ||
TP7 | ||
TP8 | ||
TP9 | ||
TP10 | ||
TP11 |
Cablaggio da FDC a Floppy disk Drive
Dal connettore a pettine a 34 poli presente nella parte superiore della scheda FDC partiva un cavo flat che veniva saldato sdoppiato su due connettori D cannon a vaschetta da 25 poli femmina fissati sul retro del videoterminale. Un apposito cavo flat a 50 pin attestato a entrambi i lati su due connettori D cannon a vaschetta a 25 pin maschi collegava quindi videoterminale e box drive tra loro. Anche all’interno del box drive i connettori Shugart a 50 pin dei drives giungevano sdoppiati su due connettori D cannon a vaschetta da 25 poli femmina fissati sul retro del box drive.
Di seguito la identificazione dei pin del connettore a pettine a 34 pin della scheda FDC verso i drive da 8″ individuati a seguito battitura del cavo partendo dal connettore Shugart 8”
Nota: C1 = 1° Cannon25pin e C2 = 2° Cannon 25pin
Card Edge Male 34pin | Signal Name | Dual CANNON | Signal Name | Card Edge Female 50pin | Signal Description |
Scheda FDC | Cable | Drive Unit | |||
2 | /HLD | C1-17 | /HLD | 18 | Head load |
6 | /READY | C1-15 | /READY | 22 | Ready |
8 | /INDEX | C1-16 | /INDEX | 20 | Index Pulse |
10 | /SEL1 | C2-13 | /SEL1 | 26 | Select Drive 1 |
12 | /SEL2 | C2-12 | /SEL2 | 28 | Select Drive 2 |
14 | /SEL3 | C2-11 | /SEL3 | 30 | Select Drive 3 |
16 | /REDWC | C1-25 | /REDWC | 2 | Reduced Write Current |
18 | /DIR | C2-09 | /DIR | 34 | Direction |
20 | /STEP | C2-08 | /STEP | 36 | Step |
22 | /WDAT | C2-07 | /WDAT | 38 | Write data |
24 | /WGAT | C2-06 | /WGAT | 40 | Write gate |
26 | /TR00 | C2-05 | /TR00 | 42 | Track 00 (Zero) |
28 | /WPROT | C2-04 | /WPROT | 44 | Write protect |
30 | /RDATA | C2-03 | /RDATA | 46 | Read data |
32 | /SIDE | C1-19 | /SIDE | 14 | Side select |
Dispari | GND | C1-13 | All Odds | 1 | GND |
A seguito della battitura e identificazione dei segnali sul connetore di uscita a 34 pin sulla scheda FDC, ho predisposto la seguente mappa per un possibile cavo floppy per utilizzare drive da 3,5”:
Card Edge Male 34pin Scheda | Signal Name | Signal Description | IDC 3,5″ Drive Unit | Signal name | Signal Description | |
2 | /HLD | Head load | 14 | /DRVSB | Drive Select 0 | |
16 | /MOTEB | 0=Motor Enable Drive 1 | ||||
6 | /READY | Ready | 34 | /DSKCHG | 1=Disk Change/0=Ready | |
8 | /INDEX | Index Pulse | 8 | /Index | 0=Index | |
10 | /SEL1 | Select Drive 1 | 12 | /DRVSB | Drive Select 1 | |
12 | /SEL2 | Select Drive 2 | 10 | /MOTEA | 0=Motor Enable Drive 0 | |
18 | /DIR | Direction | 18 | /DIR | 0=Direction Select | |
20 | /STEP | Step | 20 | /Step | 0=Head Step | |
22 | /WDAT | Write data | 22 | /WDATE | Write Data | |
24 | /WGAT | Write gate | 24 | /WGATE | Floppy Write Enable, 0=Write Gate | |
25 | /TRK00 | Track 00 | 26 | /TRK00 | Track 00 | |
28 | /WPROT | Write protect | 28 | /WPT | 0=Write Protect | |
30 | /RDATA | Read data | 30 | /RDATA | Read Data | |
32 | /SIDE | Side select | 32 | /SIDE1 | 0=Head Select | |
1 | All Odds | Gnd | 1 | All Odds | Gnd |