mercoledì 9 luglio 2014

BREAKOUT - Clone Italiano

Layout disposizione dei componenti eguale per tutte e tre le schede, ma di differenti revisioni.

Seletron
11/07/1978 (???)









Novaro Noci
11/12/1978











Novaro Noci
14/07/1978














14/07/78 1° revisione ?

11/12/78 2° revisione ?


11/07/78 revisione Seletron

mercoledì 22 gennaio 2014

Sinclair QL Microdrive

Qualche veloce premessa sul funzionamento dei microdrive.

  • Come è stata pensata e costruita la cassetta microdrive si è detto qui (link)
  • Come viene selezionata l'unità MDV1 o MDV2 si è detto qui (link)
  • Come il microdrive scrive e legge i dati lo si può leggere sul QL Service Manual, dal quale riporto qualche stralcio : "...i dati sono salvati su due tracce usando la tipica configurazione di una testina stereo per le audiocassette, e sono scritti in bytes, un byte su una traccia e il byte successivo sulla altra traccia. I dati sono letti nel medesimo modo..." ; Ciò vuol significare che il primo byte è scritto/letto sulla traccia 1, il secondo byte è scritto/letto sulla traccia 2, il terzo byte nuovamente sulla traccia 1 ed il quarto byte nuovamente sulla traccia 2 . E così via. Il segnale che veicola i dati da scrivere/leggere della traccia 1 e quello della traccia 2 sono generatati dalla ULA ZX8302 , e giungono alle unità microdrive , così come il segnale di  che determina la modalità di scrittura o lettura. Il segnale di lettura/scrittura, opera nel seguente modo: se il livello logico è alto allora il microdrive è in modalità di lettura, viceversa se il livello logico è basso il microdrive esegue le operazioni di scrittura. Un altro segnale di controllo comanda la attivazione o meno della testina di cancellazione del nastro , la quale agisce su entrambe le tracce contemporaneamente.
  • Codifica del segnale dati di scrittura/lettura ; è usata la codifica a modulazione di frequenza  secondo lo schema bifase : frequenza pari a n KHz per il valore "0" , e frequenza di 2*n KHz per il valore "1" (per i microdrive del QL siamo a 50 KHz per lo zero , e 100 KHz per l' uno)



Il funzionamento della unità Microdrive nel dettaglio

Per chi voglia cimentarsi nella realizzazione di un dispositivo hardware in grado di sostituire le unità microdrive e simularne il loro utilizzo, è necessario capirne il funzionamento fin nei minimi particolari , incominciando dalla parte più complessa : il processo di formattazione delle cartucce (poichè coinvolge simultaneamente sia le operazioni di scrittura che quelle di lettura, nonché la formattazione dei dati).

A tal fine sarebbe necessario interfacciare una scheda a microcontrollore alla ULA ZX8302 , per raccogliere i segnali dei dati della traccia 1 , traccia 2 ,  il segnale di controllo lettura/scrittura ed il segnale di cancellazione nastro.

Secondo il sistema di codifica dei dati sopra riportato, sia per la traccia 1 che per la traccia 2 , il valore di "zero" utilizza una frequenza di 50 KHz , raddoppiando a 100 KHz per il valore "uno" ; il fatto che non è presente un altro segnale a frequenza costante a cui fare riferimento per "agganciare" il segnale delle due tracce, unitamente al fatto che la lettura deve essere eseguita sia sul fronte di salita che sul fronte di discesa dei segnali di entrambe le tracce, è facile intuire che il sistema interfaccia debba per forza di cose avere una più che discreta potenza e velocità di calcolo, già solo per acquisire i segnali, senza processarli o memorizzarli.

Siccome volevo avventurarmi in questa impresa, avevo a disposizione due soluzioni : utilizzare un sistema di medio-alto livello (una MCU a 160 MHz capace processare di 40 milioni di istruzioni per secondo) , oppure un sistema di basso livello (MCU a 12 MHZ , con una media di 12 milioni di istruzioni per secondo). Manco a dirlo ho optato per la seconda, non fosse altro per pigrizia e perché avevo già tutto pronto. Questa scelta però ha comportato a dover rinunciare ad acquisire la seconda traccia, così leggendo solo la prima si ha a disposizione solo l'informazione dei bytes "dispari": metà dati sufficienti comunque  per ricostruire il funzionamento dei microdrive. Per rendere più veloce ed efficiente l'esecuzione del programma , la MCU è stata programmata in assembler .



Il programma di acquisizione della traccia 1 , non utilizza timer particolari o sistemi di polling del segnale, ma semplicemente "conta" quanti passi di programma sono stati eseguiti ad ogni transizione del segnale di traccia (sia sul fronte di salita che su quello di discesa) per le sole operazioni di scrittura (quindi con il segnale scrittura/lettura allo stato basso). I passi contati sono memorizzati nella RAM interna della MCU da 4KBytes ; a fine lettura (o meglio a memoria esaurita), i dati raccolti sono presi dalla RAM ed inviati tramite una porta seriale ad un computer.

Codice:

$asm
LDI R27 , $01               'fai puntare a X l'indirizzo sram $0100  (MBS)
LDI R26 , $00               'fai puntare a X l'indirizzo sram $0100  (LBS)                                            
LDI R16,$00                 'imposta il contatore passi =0

Main:
SBIC pina,2                   'se il segnale lettura/scrittura...
JMP Main                       '...è settato per la lettura, allora torna a testarlo
INCR R16                      'incrementa di una unità il contatore passi
CPI R27,$10                   'se si è esaurita la memoria RAM...
BREQ Finito                   'allora vai a finito
JMP Main                        'torna all'inizio del programma Main


Gestisci_int:                     'interruzione sul fronte di salita o discesa della traccia
ST X+,R16                       'salva il contatore passi in RAM
LDI R16,$00                    'azzera il contatore passi
RETI                                 'fine interruzione e ritorna al programma main
$end Asm

Con programma di acquisizione così concepito, si ottengono due tipi di dati : un dato ad 1 byte che riporta il numero di passi programma quando la traccia microdrive assume il valore uguale a zero (è 1 byte solo perché nella modulazione di frequenza bifase si ha 1 sola cresta o 1 sola gola) , oppure un dato a 2 bytes che riporta il numero di passi programma per la traccia con valore uguale a uno (sono di 2 byte perché in questo caso si ha 1 cresta seguita da 1 gola, o viceversa, e quindi viene letto il numero di passi programma sia della cresta che della gola).

Dati grezzi dalla traccia 1 (valori in esadecimale):

0000000000000000000000001A07080807121211121112111212111211121112111212111211
1211121211121112111211121211121112111208070808070808070808080708080708080708080807080807080807080808071211080811121108081108
08070808081108071208071208070808070808081112070812111211121108081112121112111207081211120807120708121108081112080712110808
1112111212070811080811064270040708121112111212111211121112111212111211121112121112111211121112
12111211121112111212111207080808070808070808070808070808080712080708080708080708080708121108080708121112111211121211121112
1112111212111211121112121112111207080808070808070808070808080708110808110808110808110808110808110808110808110808110808110807
12080712080712080712080712080712070812070812070812070812070812070812070811080811080811080811080811080811080811080811080811
0807120807120807120807120807120807120807120708120708120708120708120708120708120708110808110808110808110808110808110808110808
11080811080712080712080712080712080712080712070812070812070812070812070812070812070811080811080811080811080811080811080811
0808110808110807120807120807120807120807120807120807120708120708120708120708120708120708120708110808110808110808110808110808
11080811080811080811080712080712080712080712080712080712080712070812070812070812070812070812070811080811080811080811080811
0808110808110808110808110808110807120807120807120807120807120807120708120708120708120708120708120708120708110808110808110808
11080811080811080811080811080811080712080712080712080712080712080712080712070812070812070812070812070812070812070811080811
08081108081108081108081108081108081108081108071208071208071208071208071208071207081207081207
0812070812070812070812070811080811080811080811080811080811080811080811080811080712080712080712080712080712080712080712070812
07081207081207081207081207081108081108081108081108081108081108081108081108081108081108071208071208071208071208071208071207
0812070812070812070812070812070812070811080811080811080811080811080811080811080811080811080712080712080712080712080712080712
08071207081207081207081207081207081207081207081108081108081108081108081108081108081108081108081108071208071208071208071208
0712080712080712070812070812070812070812070812070811080811080811080811080811080811080811080811080811080811080712080712080712
08071208071208071207081207081207081207081207081207081207081108081108081108081108081108081108081108081108081108071208071208
0712080712080712080712080712070812070812070812070812070812070812070811080811080811080811080811080811080811080811080811080712
08071208071208071208071208071208071207081207081207081207081207081207081108081108081108081108081108081108081108081108081108
0712080712080712080712080712080712080712070812070812070812070812070812070812070811080811080811080811080811080811080811080811
08081108071208071208071208071208071208071208071207081207081207081207081207081207081108081108
08110808110808110808110808110808110808110808110807120807120807120807120807120807120708120708120708120708120708120708120708
1108081108081108081108081108081108081108081108081108071208071208071208071208071208071208071207081207081207081207081207081207
08120708110808110808110808110808110808110808110808110808110807120807120807120807120807120807120708120708120708120708120708
1207081207081108081108081108081108081108081108081108081108081108071208071208071208071208071208071208071207081207081207081207
08120708120708120708110808110808110808110808110808110808110808110808110807120807120807120807120807120807120807120708120708
1207081207081207081207081108081108081108081108081108081108081108081108081108081108071208071208071208071208071208071207081207
08120708120708120708120708120708110808110808110808110808110808110808110808110808110807120807120807120807120807120807120807
1207081207081207081207081207081207081108081108081108081108081108081108081108081108081108081108071208071208071208071208071208
07120708120708120708120708120708120708120708110808110808110808110808110808110808110808110808110807120807120807120807120807
1208071208071207081207081207081207081207081207081207081108081108081108081108081108081108081108
08110808110807120807120807120807120807120807120807120708120708120708120708120708120708110808110808110808110808110808110808
1108081108081108081108071208071208071208071208071208071207081207081207081207081207081207081207081108081108081108081108081108
08110808110808110808110807120807120807120807120807120807120807120708120708120708120708120708120708110808110808110808110808
1108081108081108081108081108081108071208071208071208071208071208071207081207081207081207081207081207081207081108081108081108
08110808110808110808110808110808110807120807120807120807120807120807120807120708120708120708120708120708120708120708110808
1108081108081108081108081108081108081108081108071208071208071208071208071208071208071207081207081207081207081207081207081108
08110808110808110808110808110808110808110808110808110807120807120807120807120807120807120708120708120708120708120708120708
1207081108081108081108081108081108081108081108081108081108071208071208071208071208071208071208071207081207081207081207081207
08120708110808110808110808110808110808110808110808110808110808110807120807120807120807120807120807120708120708120708120708
12070812070812070811080811080811080811080811080811080811080811080811080712080712080712080712
0807120807120807120708120708120708120708120708120708120708110808110808110808110808110808110808110808110808110807120807120807
12080712080712080712080712070812070812070812070812070812070811080811080811080811080811080811080811080811080811080811080712
0807120807120807120807120807120708120708120708120708120708120708120708110808110808110808110808110808110808110808110808110807
12080712080712080712080712080712080712070812070812070812070812070812070811080811080811080811080811080811080811080811080811
0808110807120807120807120807120807120807120708120708120708120708120708120708120708110808110808110808110808110808110808110808
11080811080712080712080712080712080712080712080712070812070812070812070812070812070812070811080811080811080811080811080811
0808110808110808110807120807120807120807120807120807120807120708120708120708120708120708120708110808110808110808110808110808
11080811080811080811080712080712080712080712080712080712080712070812070812070812070812070812070812070811080811080811080811
0808110808110808110808110808110807120807120807120807120807120807120807120708120708120708120708120708120708110808110808110808
11080811080811080811080811080811080811080712080712080712080712080712080712070812070812070812070812070812070812070811080811
08081108081108081108081108081108081108081108071208071208071208071208071208071208071207081207
0812070812070812070812070812070811080811080811080811080811080811080811080811080811080712080712080712080712080712080712070812
07081207081207081207081207081207081108081108081108081108081108081108081108081108081108070808080708080708121112111208071208
0712070812070812070812070812070812070811080811080811080811080811080811080811080811080811080811080712080712080712080712080712
08071208071207081207081207081207081207081207081108081108081108081108081108081108081108081108081108081108071208071208071208
0712080712080712070812070812070812070812070812070812070811080811080811080811080811080811080811080811080811080712080712080712
08071208071208071208071207081207081207081207081207081207081108081108081108081108081108081108081108081108081108081108071208
0712080712080712080712080712070812070812070812070812070812070812070811080811080811080811080811080811080811080811080811080811
08071208071208071208071208071208071207081207081207081207081207081207081108081108081108081108081108081108081108081108081108
0811080712080712080712080712080712080712080712070812070812070812070812070812070811080811080811080811080811080811080811080811
08081108081108071208071208071208071208070000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000046494E4520300D0A

Quando viene rilevato il segnale a 100 KHz (valore=1) sono necessari o 7 oppure 8 passi programma, mentre per il segnale a 50 KHz (valore=0) sono necessari 11 oppure 12 passi programma.

Siccome sono disponibili delle immagini (dump) di cartucce microdrive del QL, se questi dump vengono letti da un programma di editor esadecimale, si ottiene qualcosa simile a questo:


Con tanta pazienza e con l'aiuto del disassemblato del codice del sistema operativo del QL (rom Minerva 1.81) , si può intuire quale sia la formattazione dei dati sul nastro microdrive ; ho riportato alcune note a matita e con l'aiuto di colori diversi , per meglio visualizzare il layout.

Ora, con il dissasemblato della rom e con lo schema sopra riportato, è possibile trarre qualche informazione dai dati grezzi della traccia 1 appena acquisita :

0000000000000000000000001A07080807 =GARBAGE DATA

12 11 12 11 12 11 12 12
 0  0  0  0  0  0  0  0   =$00
12 11 12 11 12 11 12 12
 0  0  0  0  0  0  0  0   =$00
12 11 12 11 12 11 12 12  
 0  0  0  0  0  0  0  0   =$00
12 11 12 11 12 11 12 12  
 0  0  0  0  0  0  0  0   =$00
12 11 12 11 12 11 12 12  
 0  0  0  0  0  0  0  0   =$00

0807 0808 0708 0807 0808 0807 0808 0708
  1   1     1    1    1    1    1    1     =$FF
0807 0808 0807 0808 0708 0807 0808 0807 
  1   1     1    1    1    1    1    1     =$FF

12 11 0808 11 12 11 0808 11 
 0  0   1   0  0  0   1  0  =$44 =D

0808 0708 0808 11 0807 12 0807 12
  1    1    1   0  1    0   1   0  =$57 =W

0807 0808 0708 0808 11 12 0708 12
  1    1    1    1   0  0   1  0   =$4F =O

11 12 11 12 11 0808 11 12
 0  0  0  0  0   1   0  0   =$20 =spazio
 
12 11 12 11 12 0708 12 11
 0  0  0  0  0   1   0  0   =$20 =spazio

12 0807 12 0708 12 11 0808 11
 0   1   0   1   0  0   1   0  =$4A (1 casuale)

12 0807 12 11 0808 11 12 11 
 0   1   0  0   1  0   0  0  =$12 (1 CRC)

12120708110808110642700407081211 =GARBAGE DATA

12 11 12 12 11 12 11 12 
 0  0  0  0  0  0  0  0   =$00
11 12 11 12 12 11 12 11 
 0  0  0  0  0  0  0  0   =$00
12 11 12 12 11 12 11 12 
 0  0  0  0  0  0  0  0   =$00
11 12 11 12 12 11 12 11 
 0  0  0  0  0  0  0  0   =$00
12 11 12 11 12 12 11 12
 0  0  0  0  0  0  0  0   =$00

0708 0808 0708 0807 0808 0708 0807 0808
  1    1    1    1    1    1    1    1   =$FF

0807 12 0807 0808 0708 0807 0808 0708
  1   0   1    1    1    1    1   1   =$FD

12 11 0808 0708 12 11 12 11
 0  0   1   1    0  0  0  0   =$0C

12 11 12 12 11 12 11 12
 0  0  0  0  0  0  0  0   =$00
11 12 11 12 12 11 12 11
 0  0  0  0  0  0  0  0   =$00
12 11 12 12 11 12 11 12
 0  0  0  0  0  0  0  0   =$00
0708 0808 0708 0807 0808 0708 0808 0708
  1    1    1    1    1    1    1    1   =$FF

110808110808110808110808
 0  1  0  1  0  1  0  1   =$AA
110808110808110808110808  
 0  1  0  1  0  1  0  1   =$AA
110808110807120807120807  
 0  1  0  1  0  1  0  1   =$AA
120807120807120807120708 
 0  1  0  1  0  1  0  1   =$AA
120708120708120708120708 
 0  1  0  1  0  1  0  1   =$AA
120708120708110808110808 
 0  1  0  1  0  1  0  1   =$AA
110808110808110808110808  
 0  1  0  1  0  1  0  1   =$AA
110808110808110807120807 
 0  1  0  1  0  1  0  1   =$AA

<in totale si hanno 256 bytes di valore $AA>
<ultimi dati di dump memoria MCU>
1208071208071208071208070000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000 46 49 4E 45 20 30 0D 0A
<messaggio di fine dump dalla MCU>       F I  N  E  _  0  CR LF

E' sempre necessario ricordare che si ha acquisito solo la traccia 1 , e quindi abbiamo solo la metà delle informazioni (solo i bytes dispari) , perché è mancante la traccia 2. Tuttavia già così possiamo trovare il "sector header" composto dalla sequenza di $00 e $FF , il nome che è stato dato alla cartuccia in fase di formattazione, in questo caso avendo dato il nome "DRWHO" ed avendo solo i byte della 1 traccia, troviamo le lettere D W O , con le mancanti lettere R e H che sono state scritte dalla traccia 2.

Sperando in una maggiore chiarezza, allego questa figura che riporta le informazioni ottenute dalla traccia 1 , figura eseguita sulla falsa riga della figura del layout di formattazione



Altra cosa che si può vedere, è la presenza di valori uguali a $AA dopo l' header dei blocco dati ; di fatto, tutto il blocco dati (sono 512 bytes) è riempito con i valori $AA e $55 ($55 è mancante perché scritto dalla traccia 2) nella fase iniziale di formattazione del blocco dati , in accordo con il dissasemblato rom

* Preset format block
 wdcs st_free 0 1
        move.l  #[wd]<<16![cs],(a0)+ empty / block 0 / checksum
        addq.l  #bldata-blpre-2,a0 preamble mainly zeroes
        subq.w  #1,(a0)+        finishing with 2 bytes of ones for sync
        move.w  #(blend-bldata)/2-1,d1 fill data and extra bytes
 wdcs $AA $55 bdl/2

La cosa più interessante però è rappresentata dai dati spazzatura (garbage data) , dati che sembrano essere sputati fuori dalla ULA ZX8302 sulla traccia 1 , quando ancora il segnale scrittura/lettura è settato in scrittura.  Mia opinione che questi dati spazzatura presenti all'inizio dell' header di settore e tra la fine dell' header di settore e l'inizio dell' header di blocco dati , siano in realtà dati in qualche modo associati al "GAP" , che è quella porzione di nastro inutilizzata tra un settore ed il successivo; opinione suffragata dal codice della rom:

write_lp
        move.l  a5,a1           08    reset pointer
        moveq   #shend-shbeg-1,d1 08  write sector header
        delay   (2840-85)       gap allows for jsr and final wait
        jsr     md_wblok(pc)
        move.w  #blend-blbeg-1,d1 16 write specially long block
        delay   (2840-80)       gap allows for jsr and final wait
        jsr     md_wblok(pc)
        subq.b  #1,sno-map(a1)  24+16 next sector number
        bcc.s   write_lp        12/18 last sector is 0
        move.b  #pc.read,(a3)   erase off


moveq   #shend-shbeg-1,d1 sposta in memoria l'header di settore , ma non lo scrive ancora fisicamente sul nastro ; poi c'è un intervallo delay   (2840-85)  per il gap , e solo dopo si chiama la subroutine per la scrittura su microdrive jsr     md_wblok(pc) . Idem per le successive istruzioni della scrittura del blocco dati, con la differenza che durante il gap wait il segnale scrittura/lettura si alza per poi abbassarsi nuovamente quando è chiamata la subroutine md_Wblock del blocco dati.

La limitata memoria della MCU di acquisizione , non permette ulteriori analisi sul processo (poi si sa,  l'appetito vien mangiando...) , tuttavia da quel che si vede , sembra fattibile un sistema hardware di emulazione della unità miscrodrive , che interagisca con i segnali di controllo microdrive della ULA ZX8302 , acquisendo solo i segnali anche senza nessuna elaborazione , come quella eseguita manualmente in queste prove , e memorizzando gli stati dei segnali in un buffer di memoria circolare di adeguata grandezza (qualche centinaio di KBytes , valore da calcolarsi con calma) ; dico un buffer di memoria circolare perché è ciò che più si avvicina al tipo di nastro magnetico continuo utilizzato nelle cartucce microdrive. 
Visto in questa ottica (cioè senza elaborazione dei dati, ma operando solo sul grezzo) , l'eventuale emulatore così pensato potrebbe lavorare indipendentemente sia su un QL che su uno ZX Spectum Microdrive. 


mercoledì 20 febbraio 2013

SD2IEC for Dummies


Come costruirsi una scheda SD2IEC senza diventare matti

Chi vuole cimentarsi nella costruzione della scheda SD2IEC , va subito incontro ad una manciata di problemi : a) il sito ufficiale del cartuccione http://www.c64-wiki.com/index.php/SD2IEC non brilla certo per chiarezza circa gli schemi da seguire, ed i programmi necessari , e quando ne venite fuori, ecco che b) per la realizzazione è necessario cimentarsi nelle saldature con una miriade di componenti a montaggio superficiali, la cui miglior dote è quella di essere piccolissimi e di non facile reperimento in quantità "hobbistiche".
L'unica alternativa sembra quella di comprare al mercato nero l'agognato cartuccione : sarà vostro... ma a caro prezzo , considerando che il progetto è libero ...


La terza via

Come per tutto , esiste una terza via : l'autocostruzione con componenti non a montaggio superficiale.
Nel quadro di revisione generale del progetto ufficiale , ho scelto anche di adottare soluzioni hardware alternative, al fine di minimizzare il numero di componenti richiesti , facendo sì di abbassare la complessità realizzativa ed i costi dei materiali.
Ne è uscito un progetto alternativo , che consta di una ventina di componenti in tutto, compreso il microcontrollore , un integrato , un regolatore di tensione , tre resistenze , cinque condensatori , 2 led e 2 pulsanti e poco altro. Per quanto riguarda l'holder della scheda SD , è possibile o comprarne uno a pochi euro (3-5 euro) , oppure costruirselo da se senza fatica e senza diventare matti, poi spiegherò come.
Come nella migliore delle tradizioni, l'alimentazione elettrica è presa direttamente dal Commodore, senza necessità di effettuare saldature volanti o cose strane.

Compatibilità con il progetto originale

Nonostante la cura dimagrante, la SD2IEC for Dummies è totalmente compatibile con l'ultimo aggiornamento firmware ad oggi disponibile per il microcontrollore Atmel ATmega644 , inutile stare a farvi qui l'elenco delle funzionalità supportate : sono quelle indicate nel sito ufficiale .


Schemi a confronto

                                                      Schema SD2IEC for Dummies

                                                 Schema originale SD2IEC @ C64-Wiki

Maledizioni varie
Nota per i soliti furbetti : se decidete di utilizzare questi schemi "facilitati" per la realizzazione della scheda a scopo di lucro - ovvero venderla a coloro i quali non hanno la benchè minima dimestichezza con l'elettronica o il saldatore - , vi auguro che vi colga la maledizione del "viaggiatore" , e che possiate spendere tutti i soldi guadagnati ingiustamente in medicine... niente di grave eh, ma un antipiretico, una aspirina ed un astringente per febbre, raffreddore , cagarella.....
Se invece, decidete di farne una per il vostro amico e vi fate rimborsare solo le spese vive, allora.... bravi !



lunedì 21 gennaio 2013

Audiocassette più vive che mai ... e i Commodore ringraziano !


Guida sintetica per trasferire su audiocassetta i file TAP di Commodore.


Questa non è una guida passo-passo per scimmie: dopotutto non abitate in uno zoo ! Non vengono dati link ai programmi: google è più che sufficiente per trovarli tutti.

Prima di tutto toglietevi dalla mente le conversioni da TAP a qualunque file sonoro Wav, Mp3, ecc... Dimenticatevi di Hz, bit rate, ecc... Nascondete lettori Mp3, riproduttori CD , vari telefoni intelligenti.
Tanto tutta sta roba funziona 1 o 2 volte su 10 sui Commodore ! Se vi va bene...

Quella che segue può sembrare la via più difficile e tortuosa (e in realtà non lo è), ma è sicuramente quella che garantisce una ottima affidabilità. Le audiocassette verranno registrate direttamente dal computer Commodore con il suo Datassette : meglio di così...

Cosa serve:
  • Commodore 64
  • Commodore Datassette
  • Una cassetta audio (?!?)
  • PC con MS-DOS e porta parallela (LPT)
  • Cavo di connessione PC<-->C64 tipo X-1541 o XE-1541
  • Programma VC1541.EXE e relativi file di supporto, per PC (versione 0.04pl6)
  • Programma TAPSERV.PRG , per C64 
  • Programma PTAP.EXE e relativi file di supporto, per PC
  • Un file TAP.....a scelta, come più vi piace, che verrà trasferito su audiocassetta

Cosa serve "optional":
  • Se non volete diventare pazzi a trasferire files tra un PC con Windows ed un PC con MS-DOS, vi consiglio l'installazione su quest'ultimo di un drive/programma capace di leggere le chiavette USB: verrà molto più comodo trasferire i files con la chiavetta !
  • Programma TAPCLEANFE per PC Windows , per la verifica dei file TAP
  • Programma MTAP.EXE per PC, se si desidera trasferire il contenuto di una audiocassetta su un file TAP.

Concetto di base del processo di trasferimento

Il PC con MS-DOS invia al C64 , tramite il cavo parallelo/IEC X1541 o XE1541, il file TAP scelto , che verrà salvato direttamente sul Datassette.
In dettaglio, il programma del PC PTAP.EXE trasferisce il file TAP al programma del C64 TAPSERV.PRG , il quale provvede a salvarlo sulla cassette , il tutto in tempo reale.

Inizio

Prima di tutto è necessario salvare su audiocassetta il programma TAPSERV.PRG , così che sarà più comodo utilizzarlo in futuro , caricandolo direttamente dal Datassette.
Per fare ciò è necessario avviare sul PC MS-DOS , il programma VC1541.EXE (utilizzate l'ultima versione, quella con le "finestre" per la selezione dei file) che emulerà un lettore floppy 1541; sempre con il cavo di collegamento PC-C64 inserito , caricate sul C64 il programma TAPSERV.PRG


Una volta che si ha a disposizione TAPSERV.PRG su cassetta , il programma VC1541.EXE non vi servirà più; sarà infatti sufficiente caricare TAPSERV.PRG sul C64 e il programma PTAP.EXE sul PC.
Caricare quindi TAPSERV.PRG sul C64 dalla cassetta (il solito comando LOAD"TAPSERV.PRG", e poi RUN), e lanciate sul PC MS-DOS il programma PTAP.EXE con le opzioni del caso ed il nome dil file TAP da trasferire; se è tutto ok, a video apparirà la richiesta di premere REC+PLAY sul Datassette. Non preoccupatevi se TAPSERV si trova in modalità ricezione oppure in modalità trasmissione, si sincronizzerà automaticamente .


PTAP.EXE trasferirà un qualunque file con estensione TAP ( con il comando PTAP.EXE "nomefile.TAP" ) al C64 che provvederà al salvataggio.



Verifica dei files TAP , ed operazioni su di essi

Il Programma TAPCleanFE (gira solo su Windows !) permette di verificare l'integrità/bontà dei file TAP, che è sempre una buona cosa da fare prima di iniziare l'intero processo di trasferimento.
Lanciato il programma, aprite un file TAP, cliccate sul pulsante TEST, attendete il risultato e verificate la qualità del TAP.
Se all'interno del file TAP sono presenti porzioni "non riconosciute" da TAPClean ("Unrecognized"), personalmente preferisco rimuoverle: avrete maggiori probabilità di successo nel successivo processo di trasferimento.



E' anche possibile fare cosa carucce come ad esempio estrarre un singolo programma/gioco da una raccolta TAP di più programmi/giochi , come ad esempio capita nei file TAP delle cassette allegate alle vecchie riviste, dove sulla cassetta erano generalmente presenti più programmi/giochi.



E il VIC-20 ?

E se volete trasferire su audiocassetta i file TAP del VIC-20 ? Utilizzate sempre il C64 nel solito modo indicato, con la sola eccezione di lavorare sui file TAP del VIC-20; il programma PTAP ha delle opzioni specifiche per il VIC-20 (verificatele digitando "PTAP -h" dal prompt dei comandi DOS) ; non è necessario utilizzare il VIC per il trasferimento...anzi, non funzionerebbe nemmeno...

Suggerimenti

Verificate sempre la documentazione dei programmi (VC1541.exe e PTAP.exe) leggendo i vari file README.TXT , in particolare per i settaggi da utilizzare , ad esempio il numero di porta parallela (lpt1, lpt2, ecc..) , il cavo di trasferimento utilizzato (X-1541 oppure XE-1541) , settagi vari ed eventuali , specifici di ciascun programma.
Verificate sempre il funzionamento del file TAP, prima e dopo l'utilizzo di TAPCleanFE (se ne decidete l'uso) su uno qualunque degli emulatori disponibili per le macchine Commodore.

Qualche aiutino :




Mirko / Dr_Who

venerdì 8 luglio 2011

GALAXIAN - Gli Invasori sono tornati !!!


A volte anche le flotte aliene devono fare i conti con la tecnolgia: centinaia di navi spaziali rese inutilizzabili a causa del malfunzionamento di un piccolo ed insignificante (almeno così si pensava) chip ...

Ma sostituito il chip difettoso , gli invasori di Galaxian , uno dei videogiochi che andava per la maggiore nei primi anni ottanta , sono tornati , e sono più incazzuti che mai !











Ovvero, come riparare una scheda di Galaxian
(versione Coin-op)

La mia collezione di schede di videogiochi da bar derivano per la maggior parte dei casi da schede non funzionanti , sostanzialmente per due motivi : uno , costano meno, e due è più facile trovare vecchi videogiochi guasti piuttosto che funzionanti. Ultimo ma non ultimo, per quel che mi riguarda , il mio rapporto ludico con tali giochi è :
  • 25% di incazzatura perchè la scheda non è riparabile...
  • 25% di gratificazione quando la scheda si mette a funzionare...
  • 25% di incazzatura perchè non riesco a passare neanche il primo livello...
  • 25% di gratificazione quando, dopo mesi di duro allenamento, muoio all'inizio del secondo livello...
Nel caso di Galaxian , all'accensione della scheda si vedeva a malapena la schermata del selftest (tutto di colore grigio scuro), con dei notevoli problemi anche nella visione in attract mode




Attract Mode:
- nella parte superiore le scritte "1UP" e "HIGH SCORE" e rispettivi punteggi sono in colore grigio scuro, quali indistinguibili dallo sfondo
- la scritta "WE ARE..." dovrebbe essere in colore rosso
- non si vede la scritta "SCORE ADVANCE TABLE"
- non sono correttamente visualizzati i punteggi e le navicelle nemiche
- compaiono bande orizzontali di colore blu e verde












Se si fa partire il gioco, si hanno i seguenti difetti:
- nella parte superiore le scritte "1UP" e "HIGH SCORE" e rispettivi punteggi sono in colore grigio scuro, quali indistinguibili dallo sfondo
- le navicelle rimenenti non sono visualizzate
- la scritta "CREDIT" è visualizzata per metà
- le navi nemiche in "attacco" presentano una banda colorata orizzontale che si muove in sincronia alla navi stesse








Visto così sembrerebbe un problema alla catena video, composta da:
  • due eproms grafiche (gfx roms)
  • quattro bidirectional shifter register (74LS194)
  • un multiplexer 74LS157
  • tre memorie ram utilizzate come buffer della memoria video
Le due gfx roms hanno l'uscita dati a 8 bit separata tra loro, ovvero non sono collegati ad un unico bus dati, ma i primi quattro bits (quattro bits vengono definiti "nibble") della prima rom confluiscono all'ingresso del primo shifter 74LS194, i secondi quattro bits della prima rom vanno all'ingresso del secondo 74LS194, e stessa cosa per la seconda rom grafica: quattro bits sono collegati all' ingresso del terzo 74LS194 e gli ultimo quattro bits al quarto 74LS194.
Così facendo , i valori dei quattro nibbles provenienti dalle due gfx roms vengono "serializzati" dagli shifter registers ed inviati agli ingressi del multiplexer 74LS157; una uscita del multiplexer alterna i dati serializzati provenienti dai due nibbles della prima gfx rom, e una seconda uscita alterna i dati serializzati dei due nibbles della seconda gfx rom.
La necessità di dividere ciascun byte delle gfx roms in due nibbles e poi serializzare ciascun nibble in un singolo bit, è dovuta all'utilizzo della ram grafica composta da un solo bit in ingresso (ed un solo bit in uscita) e quindi impossibilitata a ricevere un byte completo !

In fase di boot la scheda dovrebbe fare il test delle roms e delle memorie ram: se vengono riscontrati problemi/anomalie , queste dovrebbero essere visualizzate a video. Considerando che nussun messaggio di anomalia è evidenziato, è da ritenersi che roms e memorie ram siano OK.
Mi sono quindi focalizzato sui quattro shift register 74LS194 e sul multiplexer 74LS157.
E qui una bella botta di fortuna (a volte ci vuole !), poichè essendo i quattro shift register montati su zoccolo, per prima cosa ho provato a sostituirli uno ad uno con uno nuovo e funzionante, e ciò ha dato i suoi frutti:



La grafica, sia in attract mode che in modalità gioco è correttamente visualizzata .
Buon gioco a tutti !
















La scheda è un bootleg

sabato 30 aprile 2011

Pictures Archive


















Tekken 3 - Coinop pictures









































sabato 15 gennaio 2011

VECTREX




Vectrex Multicart e GI AY-3-8912A