venerdì 10 gennaio 2020

Riesumata la SBCC186...

Arcipotente board SBCC186 rev C serial number #94018 designed by Paolo Pitacco IW3QBN, così equipaggiata:
  • dimensioni "doppia eurocard" (160x197mm)
  • processore Intel 80C186-16
  • 64k "kernel" ROM (due EEPROM 27C256 della ST Microelectronics)
  • 128k RAM (quattro SRAM 62256A della Hynix) a 70ns 
  • PPI: programmable parallel interface (un 8255AP-5 della Toshiba) con un totale di 24 bit di I/O
  • doppio serial controller Zilog Z85C3010PSC a 10 MHz, per un totale di quattro canali seriali.
Nota: il quarzo del clock attualmente montato è da 30 MHz, che quindi dà all'80186 e agli 8530 un clock di 15 MHz (per l'8530 è troppo alto, e sarebbe il caso di dimezzarlo magari con un flip-flop 74LS74).
    La SBCC è stata utilizzata per il link ad alta velocità di Itanet. All'epoca costava 30.000 lire (solo il circuito stampato e il manualino con lo schema), più altre 10.000 lire per le EPROM di test.


    La board è stata descritta per la prima volta nel numero #49 della newsletter Connected To del TSteam di luglio 1993 (sedici anni prima che comprassi la mia prima Beagleboard).

    Riguardo all'hardware:
    • il connettore di alimentazione (quello su JPA) è un classico AMP/Molex 8981 a 4 poli di cui viene usata solo la 5V; la 12V è riportata solo per alimentare apparecchiature esterne
    • per forza di cose (architettura Intel x86) la RAM parte ovviamente dall'indirizzo 0000:0000 e la ROM deve essere leggibile almeno attorno a FFFF:0000
    • i vari chip vengono selezionati attraverso diverse linee di chip-select; di nostro interesse sono solo PCS1 e PCS2 (per selezionare i rispettivi 8530) e PCS3 (per selezionare la PPI 8255)
    • gli interrupt utilizzati sono solo due, INT0 e INT1, per i due 8530
    • è prevista anche funzionalità DMA (via JP4, JP7-8-9-10) e scheda DPRAM (DualPort RAM, via JP16) ma non ce ne occuperemo
    • occorrono dei MAX232 per convertire i canali seriali TTL in RS232:


    Headers e ponticelli utili:
    • JP1:  pin 1 LED "On", pin 2 reset e pin 3 GND
    • JP12-JP13-JP14: porte A-B-C dell'8255 (tre header da 9 pin: il primo pin è +5V, seguono quindi i bit da 0 a 7 della porta)
    • JP15: porte B-C dell'8255 riordinate per connettere un display LCD (pin 1-2 GND, pin 3-4 +5V, pin 5 n.c., pin 6-7-8 bit 5-6-7 della porta C dell'8255 in funzione di RS/RW/E del display, seguono i pin 9..16 con la porta B dal bit 7 al bit 0, in funzione di DB7..DB0 del display)
    • quattro porte seriali TTL (JM1..JM4) con 9 pin (la "L" sta per "livelli logici TTL 5V"): DCDL, CTSL, RTSL, RXDL, TXDL, RXCL, TXCL, GND, +12V (il pin 12V serve solo per alimentare un eventuale modem).
    Configurazione memoria:
    • EPROM: JR1 1-2, JR2 2-3 (per le 27128 da 16k); JR1 e JR2 impostati a 2-3 e 2-3 (per le 27256 come nel nostro caso); oppure 2-3 e 1-2 per le 27512 o 27010
    • SRAM: JR3 1-2, JR4 1-2 (per le 62256 da 32k e fino alle 128k); 2-3 e 2-3 per le 512k.
     Sviluppo software:
    • occorre un compilatore C (come il buon vecchio Turbo C 2.0) e il pacchetto 186KIT1.ZIP contenente il file ST.OBJ e il caricatore LOADGO.EXE
    • scrivere programma in C - per esempio PROVA.C - e compilarlo in OBJ, linkarlo col citato ST.OBJ ottenendo un file .EXE e un file .MAP, creare un file .LOC partendo dal .MAP, necessario per il LOADGO, contenente (a seconda della mappa memoria della SBCC):
    prova # file exe
    prova # file .map
    prova # file .abs, se disponibile
    CODE  @ 0x0300    +
    RDATA @ $         +
    DATA  @ $(0x0400) +
    BSS   @ ($)       +
    STACK @ ($),
    16K ROM @ 0x0300  +
    48K RAM @ 0X1000 


    infine lanciare LOADGO @PROVA per caricarlo via COM1 ed eseguirlo sulla SBCC usando il citato kernel delle EEPROM di default.
    Il file ST.OBJ contiene solo poche istruzioni di inizializzazione dello stack e dell'area variabili e il canonico call main() seguito da un ciclo a vuoto casomai il main ritornasse un valore. A quanto pare il trucco si è reso necessario per poter consentire lo sviluppo di files EXE anziché COM (limitati a 64k di eseguibile); il LOADGO e il kernel fanno tutte le relocation indicate nel file EXE e a seconda della mappa di memoria .LOC specificata (a me pare una complicazione inutile).

    Gli indirizzi delle porte dell'8255 sono:
    • 0x1180: porta A
    • 0x1182: porta B
    • 0x1184: porta C
    • 0x1186: porta comandi del PPI
    Il Peripheral Control Block dell'80186 si trova a 0xff00, non a 0x0000 come nell'IBM PC XT.


    Considerazioni finali.

    La SBCC ha solo CPU, seriali TTL e pin di I/O. Nient'altro. Dunque il software va inciso su EEPROM; l'uso dello scomodo LOADGO da una finestra MS/DOS è l'unica opzione per la fase di sviluppo.

    Nessun commento:

    Posta un commento