Autore Topic: C64 Modding  (Letto 6360 volte)

HOPPY

  • Utente
  • **
  • Post: 119
  • What goes around comes around
  • Gioco Preferito: CREATURES 1 -2
C64 Modding
« il: 01 Aprile 2014, 15:57:00 »
 Visto la mia assenza per qualche anno da questo Forum (almeno per la sezione H/W) per vari motivi, ma nonostante ciò mai lontano dal C64,
volevo proporre a tutti i smanettoni che, come me, non hanno pace a vedere il C64 (nel mio caso uno dei tanti in mio possesso)  allo stato "naturale" senza equipaggiarlo di qualche feature esclusiva, tanto per renderlo piu personalizzato possibile. Ma anche, perchè no, per dimostrare quanto ancora sia possibile coniugare la tecnologia attuale con questo sistema datato 1982. E' anche molto divertente implementare all'elettronica originale, tanti piccoli progetti ed artefatti e vederli in funzione, trasformando il nostro Commodorino tanto amato in quel gioiello ancora piu prezioso ed unico, creato da noi.

Mi capita di avere tra le mani uno dei vari C64C acquistato da qualche tempo ed utilizzato come test-board. Qualche problema alla scheda (CPU 8500 e CIA) mi portano alla ricerca di una scheda di ricambio per 10€. Ecco avere due M/B, un chassis ed una tastiera. Venderli no, non ne vale la pena. Con i 20-25€ di ricavo (se va bene) visto che è privo di alimentatore, non riuscirei ad fare un granchè. Inoltre potrebbero risultare utilissimi come ricambi.
Allora, seconda ipotesi, rimane il Modding....

Visto il primo C64 biscottone "moddato" un anno fa, con tanto di vernice rosso acceso,  DUAL BOOT , SD2IEC interna, altoparlanti incorporati, tutto riuscito perfettamente (posterò foto e lavori in corso prossimamente) , ho pensato di fare qualcosina in più partendo dal Kernel. Perchè limitarsi ad un Dual Boot?
Faccio un Quad Boot!

 





 

HOPPY

  • Utente
  • **
  • Post: 119
  • What goes around comes around
  • Gioco Preferito: CREATURES 1 -2
C64 Modding
« Risposta #1 il: 02 Aprile 2014, 22:48:57 »
 Visto che il Kernel originale del C64C (251913-01) da 16Kb include sia il Basic V2 (901226) che il Kernel (901227-03) presenti su C64 biscottone, entrambi da 8Kb, è possibile rimpiazzare questo con una comune Eprom del tipo 27128  in quanto pin-compatibile.
Quindi utilizzando una 27256, da 32Kb e quindi il doppio della capacità, e programmando al suo interno DUE kernel - ad esempio l'originale + JiffyDos - si ottiene un' Eprom con Dual Boot selezionabili tramite la linea A14 sul pin 27 della memoria stessa, a seconda se su tale pin si applica la tensione di +5V o GND tramite commutatore a levetta.



Cosa analoga ho fatto quadruplicando i Kernel, utilizzando una Eprom 275212 (equivalente alla capacità di 4 Eprom 27128) con le Rom selezionabili tramite le linee A14 e A15, rispettivamente sui piedini 28 e 1 .



Per rendere possibile il cambio di stato sui suddetti pin, da 0V a +5V, è necessario scollegare questi dal resto del circuito, semplicemente sollevandoli dallo zoccolo, in modo che il tutto funzioni e soprattutto per non fare danni!




I Kernel copiati all'interno della Eprom sono:
C64C originale - C64 con JiffyDos - C64-SX con JiffyDos - C64GS
Il risultato ottenuto è questo:










Tempo permettendo, verrà "trapiantato" tutto sull'esemplare in fase di Modding utilizzando come selettore un commutatore rotativo ed integrando dei LED per facilitare il riconoscimento di ogni ROM selezionata.

Pareri ed opinioni (compreso critiche) sono ben accetti.

Segue.....
 :lol:  

tsm_carmine

  • Redazione
  • Utente
  • ****
  • Post: 513
  • Gioco Preferito: Krakout
C64 Modding
« Risposta #2 il: 03 Aprile 2014, 05:48:49 »
 Ciao, se fossi in te toglierei uno fra l'SX64 e il 64GS e metterei il Turbo Tape Kernal degli Onslaught, che oltre tutto ha una funzione per allineare la testina del registratore.
Inoltre, qui trovi un simpatico script per creare kernal personalizzati, mentre qui c'è un velocizzatore per disco, variante del "Pink Floyd" presente qui come normale prg (o più precisamente, una coppia di prg).
Riusciremo a costruire un mondo dove più nessuno osi pronunciare le parole... "lettore floppy"?

HOPPY

  • Utente
  • **
  • Post: 119
  • What goes around comes around
  • Gioco Preferito: CREATURES 1 -2
C64 Modding
« Risposta #3 il: 03 Aprile 2014, 11:54:37 »
Citazione da: "tsm_carmine"
Ciao, se fossi in te toglierei uno fra l'SX64 e il 64GS e metterei il Turbo Tape Kernal degli Onslaught, che oltre tutto ha una funzione per allineare la testina del registratore.
Inoltre, qui trovi un simpatico script per creare kernal personalizzati, mentre qui c'è un velocizzatore per disco, variante del "Pink Floyd" presente qui come normale prg (o più precisamente, una coppia di prg).
Bene! Suona interessante.
Mi metterò alla programmazione di altre versioni "Quad Boot" e vediamo un po cosa ne viene fuori.
Intanto quelle fatte fin'ora le ho usate per test, non è detto che verranno utilizzate.
Tanto di 27512 ne ho una decina...   :metal:  

gianky64

  • Utente
  • **
  • Post: 60
  • Gioco Preferito: Commando
C64 Modding
« Risposta #4 il: 03 Aprile 2014, 18:51:08 »
 Salve,
si potrebbe anche provare a realizzarli per emulatori come ccs64 o Winvice?
Io ho visto che ci sono 2 file (ccs64): Kernal.rom e basic.rom. Entrambi di 8Kb, ovviamente.  Se la cosa è fattibile come si può procedere?
Oppure ne esistono già pronti da scaricare?


P.s: Non sono provvisto del C64 hardware.
Un C= è per sempre....

HOPPY

  • Utente
  • **
  • Post: 119
  • What goes around comes around
  • Gioco Preferito: CREATURES 1 -2
C64 Modding
« Risposta #5 il: 03 Aprile 2014, 23:15:22 »
 
Citazione da: "gianky64"
Salve,
si potrebbe anche provare a realizzarli per emulatori come ccs64 o Winvice?
Io ho visto che ci sono 2 file (ccs64): Kernal.rom e basic.rom. Entrambi di 8Kb, ovviamente.  Se la cosa è fattibile come si può procedere?
Oppure ne esistono già pronti da scaricare?


P.s: Non sono provvisto del C64 hardware.
In effetti si.
Quelli utilizzati negli emulatori sono proprio le ROM estratte, come si trovano sul C64. Quindi teoricamente è possibile utilizzare il Kernal modificato anche sull'emulatore, ma solo quello da 8Kb e non DualBoot, in quanto quest'ultimo è dato dalla somma binaria di due o piu ROM in un unico file binario, cosa che un emulatore non potrebbe gestire perchè bisogna per forza agire sull'hardware.
 In sostanza, prendendo uno dei Kernal da 8Kb modificati - tipo JiffyDos o quelli suggeriti da tsm_carmine  - e rinominando questi  in >kernal.rom< si dovrebbero vedere gli effetti anche sull'emulatore, in quanto vengono letti come, appunto,  avviene nell'hardware reale.
Con in piu la differenza che le prove con l'emulatore non richiedono la programmazione di Eprom e taanta pazienza!  

mces

  • Utente
  • **
  • Post: 339
  • Gioco Preferito: fort apocalypse
C64 Modding
« Risposta #6 il: 05 Aprile 2014, 19:32:52 »
 Salve,
mi son ritrovato per le mani una schedina con speeddosplus munita di deviatore per selezionare il kernal da mettere sul case del C64 bucandolo...

BUCANDOLO?????????


NO NO NO!

Mi è bastato aggiungere un integratino ed ora i due bit più alti sono selezionabili all'accensione (e SOLO all'accensione fisica ovvero in coincidenza con il fronte di salita della linea di /RST) semplicemente tenendo premuto il tasto RESTORE o il tasto PLAY dell'unità a nastro.....

BUCARE????? ma quando mai!!!!!!

P.S.
in realtà la mia EPROM dentro ha solo due KERNAL, ma il bit di indirizzo più alto l'ho pilotato ora con l'indicazione del tasto PLAY ora con l'indicazione del tasto RESTORE e il barbatrucco funziona perfettamente!
2tasti, 2 bit, 4 kernal, 32k, una 27C256 con un pezzo di millefori e un pizzico di pazienza.....  
Non esistono problemi, solo soluzioni.

HOPPY

  • Utente
  • **
  • Post: 119
  • What goes around comes around
  • Gioco Preferito: CREATURES 1 -2
C64 Modding
« Risposta #7 il: 05 Aprile 2014, 21:38:25 »
Citazione da: "mces"

P.S.
in realtà la mia EPROM dentro ha solo due KERNAL, ma il bit di indirizzo più alto l'ho pilotato ora con l'indicazione del tasto PLAY ora con l'indicazione del tasto RESTORE e il barbatrucco funziona perfettamente!
2tasti, 2 bit, 4 kernal, 32k, una 27C256 con un pezzo di millefori e un pizzico di pazienza.....
Intanto posta lo schema del circuito, visto che è cosi semplice!
Inoltre se utilizzi una 27256 per 4 Kernal, presumo che utilizzi un C64 biscottone, visto ogni singolo Kernal da 8Kb.
Allora perchè solo 2 Kernal  dentro? Tanto vale usare una 27128!

Volendo usara un sistema a 4 Kernal, come postato da me, come si farebbe SENZA BUCARE?? Il circuito da te proposto funziona solo per due, giusto?  :huh:  

mces

  • Utente
  • **
  • Post: 339
  • Gioco Preferito: fort apocalypse
C64 Modding
« Risposta #8 il: 05 Aprile 2014, 21:57:43 »
 Il ciurcuitino (poi posto schema, ora vado di corsa...) è semplicemente un sistema che "sente" due bit (il tasto "RESTORE" sulla tastiera ed il tasto "PLAY" sul registratore esterno) e li campiona sull'uscita dallo stato di reset, questi due bit se li mandi ai bit più alti della memoria possono selezionare 4 aree diverse, indipendentemente dal modello del C64, ovvero sarai tu che dovrai far trovare nella EPROM i giusti SW quando i due bit più alti cambiano in accordo alla "configurazione di accensione"  
Non esistono problemi, solo soluzioni.

HOPPY

  • Utente
  • **
  • Post: 119
  • What goes around comes around
  • Gioco Preferito: CREATURES 1 -2
C64 Modding
« Risposta #9 il: 05 Aprile 2014, 23:49:26 »
 Hmmm...intanto trovo scomodissimo per questo scopo, dovere usare il Datassette SOLO per avere un livello logico dato dal tasto Play.
Nell'ipotesi di 4 Kernal Boot, si possono settare due bit delle aree di indirizzamento direttamente tramite resistenza di push-down (o pull-up) a seconda del livello logico che si ha col "barbatrucco".

Ma prima di fare supposizioni attendiamo lo schema...    :sonno:  

tsm_carmine

  • Redazione
  • Utente
  • ****
  • Post: 513
  • Gioco Preferito: Krakout
C64 Modding
« Risposta #10 il: 06 Aprile 2014, 03:20:28 »
Citazione da: "HOPPY"
Hmmm...intanto trovo scomodissimo per questo scopo, dovere usare il Datassette SOLO per avere un livello logico dato dal tasto Play.
Credo basti un pulsantino tra il segnale "sense" e la massa.  ;)  
Riusciremo a costruire un mondo dove più nessuno osi pronunciare le parole... "lettore floppy"?

HOPPY

  • Utente
  • **
  • Post: 119
  • What goes around comes around
  • Gioco Preferito: CREATURES 1 -2
C64 Modding
« Risposta #11 il: 06 Aprile 2014, 10:18:14 »
 Sfornati altre Eprom...













....
 

mces

  • Utente
  • **
  • Post: 339
  • Gioco Preferito: fort apocalypse
C64 Modding
« Risposta #12 il: 06 Aprile 2014, 16:47:44 »
 

Il circuito integrato utilizzato è un 74HC74 (il pin che ho indicato con un triangolino viene chiamato anche "CP")


http://www.nxp.com/documents/data_sheet/74HC_HCT74.pdf

serve un integrato in tecnologia MOS e non TTL se si vuole usare il segnale di /RESTORE altrimenti và bene anche un TTL(quel tasto ha come PULL-UP un resistore da 1megaohm, serve quindi da collegarlo ad un ingresso ad elevatissima impedenza che i MOS hanno e i TTL no).

Il trucco consiste nell'usare il fronte di salita della linea di reset (/RES) come istante di campionamento delle linee monitorate (siano esse /RESTORE, /CASS.SENSE, JOY, ecc...) ovvero quando all'avviamento fisico dell'HW (a caldo o a freddo) la linea di reset viene prima portata in basso e poi riportata stabilmente in alto come condizione operativa della macchina.
Attenzione: un reset SW NON comporta un impulso sulla linea di reset e quindi non darà modo al '74 di catturare una nuova configurazione bensì continuerà a conservare quella precedente, ovvero un SYS64738 NON cambierà il KERNAL.
Essendo le entrate delle linee monitorate normalmente tenute alte con resistori di PULL-UP il segnale in uscita al '74 viene preso negato (/Q) in modo da avere come condizione di DEFAULT un'uscita per selezionare il banco (00)binario.

Il circuito seleziona fino a 4 banchi diversi, i bit meno significativi del mio "LSB" saranno tutti quelli previsti dall'HW originale per pilotare la ROM originale, ovvero si adatta sia ai C64 che ai C64C purchè lo sperimentatore curi il corretto contenuto del banco selezionato che per  la macchina sarà l'unica ROM presente su quello zoccolo.

spero di essere stato chiaro ed esaustivo,
altrimenti..... a disposizione!

Piccola nota egocentrica:
chiunque è libero di sperimentare questo circuitino (ci mancherebbe...) ma se lo si vuole diffondere richiedo la citazione della fonte e se qualcuno volesse adoperarci uno sfruttamento economico mi contatti PRIMA.

 
Non esistono problemi, solo soluzioni.

HOPPY

  • Utente
  • **
  • Post: 119
  • What goes around comes around
  • Gioco Preferito: CREATURES 1 -2
C64 Modding
« Risposta #13 il: 06 Aprile 2014, 22:30:33 »
 @mces


Cosa usi per generare il segnale /CASS , gli colleghi direttamente il Datassette o gli adatti qualche pulsante alla relativa porta?
Se ho capito bene dal circuito, per selezionare le Rom in un C64C a 4 Kernal, si dovranno usare le seguenti combinazioni prima dell'accensione:

PLAY -  premuto
RESTORE - non premuto
= ROM0

PLAY - premuto
RESTORE - premuto
= ROM2

PLAY - non premuto
RESTORE - premuto
= ROM3

PLAY- non premuto
RESTORE - non premuto
= ROM3

Ovviamente non ho tenuto conto della corretta sequenza di selezione dei banchi all'interno dell' Eprom.


Le uscite /Q  LSB  e l'altra (non si legge bene) vengono portate direttamente sulle linee A14-A15 ?

Comunque credo sia un sistema interessante in caso di dual kernal, in quanto si potrebbe fare uso del solo tasto RESTORE per la selezione del secondo banco. Il primo si puo fissare tramite resistenza di Pull-up.  

Citazione
:)  :mavieni:  

mces

  • Utente
  • **
  • Post: 339
  • Gioco Preferito: fort apocalypse
C64 Modding
« Risposta #14 il: 06 Aprile 2014, 22:51:13 »
 allora:
come nomenclatura ho usato LSB come bit basso della selezione banco e MSB come bit alto della selezione banco proprio perchè anche io credo che il meglio del circuito sia nella selezione tra due Kernal.

La linea /CASS.SENS è una linea che a riposo è portatat a 1 logico da un resistore di PULL-UP e che un contatto nel datassette mette a terra quando si pigia un tasto che richiede l'avvio del motore (PLAY, avanti o indietro veloce).

Entrambi le entrate sono quindi negate (1 logico a riposo) e quindi prendendo le uscite /Q dal '74 ritornano a riposo basse (banco 00)

quindi:  (Msb,Lsb)

1° banco (0,0) ROM0 kernal di default in quanto è la semplice accensione della macchina

2° banco (0,1) ROM1 kernal alternativo di uso intenso: basta pigiare RESTORE all'accensione

3° banco (1,0) ROM2 altro kernal: premi PLAY (o tasto che mette il pin6 del connettore cassette a massa) ed accendi (ricorda di mantenere premuto fino alla schermata di boot)

4° banco (1,1) ROM3 ulteriore kernal: premi play (o tasto...)  e  mantieni anche pigiato RESTORE all'accensione.


In realtà se si crede più utile si può prendere un bit dal tasto "restore" ed un'altro ad es. dal tasto del fuoco del joystic..... (non l'ho ancora provato ma dovrebbe funzionare...).
certo che il goal è selezionare il banco senza HW aggiuntivo ma con il solo C64 "nudo".

Personalmente ho messo un bi-kernal con scelta tra originale e quello che ti hanno linkato prima con TURBOTAPE (<-L sola lettura) e tools di allineamento testina nastro (<-M) che di per se presuppone l'uso del C2N per caricare da cassetta, e quindi della possibilità di usare anche il bit del CASS.SENS.....

il mio LSB và collegato al primo indirizzo che rimane libero sulla EPROM (C64: A13,       C64C: A14) e l'MSB al successivo (C64: A14,   C64C: A15).

P.S.
la resistenza da 1M Ohm di cui dicevo prima esiste solo nel  C64, nel C64C è da 10K Ohm e quindi và bene anche un 74LS74 o comunque un TTL.... anche se consiglio un HC o HCT per rendere la modifica compatibile con ogni commodore 64.




P.P.S.
ho usato un 74HC74 (2 bit) perchè è il più piccolo e semplice IC che possa funzionare, ma se volete strafare esiste, ad es. il 74HC175 che fà questa funzione per 4 bit: immaginate tutte le combinazioni tra RESTORE, tasto PLAY, tasto FUOCO e "SU" sul joystic...... ben 16 kernal! il problema forse diventerebbe trovare la EPROM così capiente.....
https://www.fairchildsemi.com/ds/MM/MM74HC175.pdf
(mettere il PIN1 a Vcc)
Non esistono problemi, solo soluzioni.