Autore Topic: Compilatori Basic E Cartucce  (Letto 6188 volte)

Razhell

  • Utente
  • **
  • Post: 197
  • Gioco Preferito: ghostbusters
Compilatori Basic E Cartucce
« il: 01 Maggio 2011, 14:16:14 »
 MODERAZIONE - Leggi il Regolamento. Non riesumare thread di anni fa, a maggior ragione se lo fai cambiando argomento. Thread diviso e spostato in "Aiuto e Domande". -eregil

Ciao a tutti, mi collego a questo topic per una domanda, sto realizzando un programma per una interfaccia hardware di mia realizzazione, il programma è in basic e sta diventando gorssino, ho provato a compilarlo con il BLITZ e il risultato è ottimo, ora:
vorrei mettere il programma su cartuccia, il risultato compilato dal Blitz è comparabile ad un sofware in linguaggio macchina o assembly al fine di creare il file .bin da mettere sulla cartuccia ?

Premetto che NON so assolutamente usare il luinguaggio assembly e non intendo impararlo ora per questo scopo.... 8-) ( non ho tempo)

So come si programma una eprom e ho tutto il necessario per farlo...

Se il blitz non va bene quale compilatore mi consigliate di usare ?

Posso mettere su cartuccia il programma in basic estrapolandolo dalla memoria o non andrà mai ?

grazie  a tutti per le risposte

Leo
Razhell
---> SX-64 owner <---

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Compilatori Basic E Cartucce
« Risposta #1 il: 01 Maggio 2011, 14:27:16 »
 I compilatori generano programmi lanciabili da basic a partire dalla locazione 2049 ($0801); le cartucce devono partire da 32768 ($8000); per mettere un prg compilato in una cartuccia va rilocato a $8000, il formato e' gia' stato discusso in altri post, ma richiede una minima routine in asm e un pelo di competenza.
Non sono a conoscenza di programmi che facciano in automatico quel che chiedi, va fatto a mano per quel che ne so;  ma se da parte tua c'e' l'ammissione di NON VOLERE IMPARARE, tanto vale fermarsi qua.  
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Razhell

  • Utente
  • **
  • Post: 197
  • Gioco Preferito: ghostbusters
Compilatori Basic E Cartucce
« Risposta #2 il: 01 Maggio 2011, 15:18:38 »
 Inizio scusandomi per aver messo il post nel posto sbagliato.

Poi per quello che riguarda la mia volontà di imparare, la volontà c'è !! solo che mi rendo conto che non sarei in grado di imparare l'assembly al punto di riscrivere il software che ho creato nei tempi che ho a disposizione.

Devo ancora finire il programma principale, e se mi fermo e riparto da capo i tempi si allungano.... però con il vostro aiuto è anche vero che tutto può diventare possibile....

per meglio spiegarmi e capire come posso procere...
Il programma in questione gestisce tramite la porta user una centralina per 12 luci a 220 volt che uso come sequencer per le luci stile disco.
Il programma compila da solo le sequenze delle 12 luci che sono introtte tramite linee di "data" dove i valori sono a coppie, un primo vaolre compreso tra 0 e 63 per le prime 6 luci e un valore da 64 a 127 per le altre 6.
La macchina usa 1 canale della porta per leggere la musica e sincronizzare le luci e gli altri 7 per le 12 lampade, 1 per il multiplexer e 6 per i dati così spezzando in 2 i dati ho 6+6 luci.
Il tutto è fatto tramite l'uso delle poke 56577 e 56579.
I "data" sono formattati così che il programma da solo capisce l'inizio e la fine di ogni sequenza e la compila dentro a variabile a 2 dimensioni memoriazzando inizio, fine  e nome di ogni singola sequenza.
Le sequenze introducibili sono da 1 ad un max di 30 e il prg se le conta da solo così a noi rimane solo di avere fantasia nel creare le sequenze ottiche come la fantasia ci suggerisce.
>Il prg capisce da solo quandi data leggere senza dare errore di out of data in fase di compilazione
Le sequenze, sempre fornite a coppie, sono lunghe a piacere, da 1 coppia  a qualche centinaia per effetti molti complessi.
I tasti da "1 a 0" da "q a p" e da 2a a ": sono usati per selezioanre le 30 ( o meno ) sequenze.
Un ciclo su se stesso a dimensione variabile crea un rallentamento se le sequenze sono troppo veloci.
Il video, una volta generate le sequenze mostra una schermata con i nomi delle 30 sequenze, lette dai data, un monitor con la effettiva immagine delle 12 luci accese o spente, nelle 4096 possibili posizioni, e il valore di ritardo applicati.
La velocità ottenuta ottimizzando e compilando il sorgente mi permette di usare i 12 canali anche come luci stroboscopiche.
La prima versione la scrissi nel 1985, ora ho ricreato tutto dopo 20 anni che non usavo il basic e il commodore, che mi sono ricomprato apposta per riusare la macchina delle luci che ho ripescato in cantina...
Qui la schermata durante l'uso, dopo la compilazione...



Nella versione definitiva prevedo di mettere la lettura delle sequenze da un file esterno che sarà creato da un editor dedicato...

Ora... chi mi insegna o mi da un po di dritte per spostare il tutto dal basic all'assembly ????

grazie  a tutti

Leo
Razhell
---> SX-64 owner <---

Razhell

  • Utente
  • **
  • Post: 197
  • Gioco Preferito: ghostbusters
Compilatori Basic E Cartucce
« Risposta #3 il: 06 Maggio 2011, 01:00:38 »
 Nessuno che mi aiuta ?? nessun che ha mai messo su cartuccia un proprio programma ??

Nessuno nessuno ????

 :confused:

RAz
Razhell
---> SX-64 owner <---

Elder0010

  • Utente
  • **
  • Post: 75
    • http://csdb.dk/scener/?id=22731
  • Gioco Preferito: Rampage
Compilatori Basic E Cartucce
« Risposta #4 il: 06 Maggio 2011, 11:04:59 »
 Non credo che nessuno ti convertirà il codice! Piuttosto dovresti metterti a studiare un po di linguaggio macchina. Onestamente penso che se sei riuscito a programmare con successo una cosa cosi' in basic non sarà troppo difficile passare al basso livello.

Sul forum l'argomento è trattato ampiamente.

In 5 righe potresti procedere cosi:
- impara a contare in binario / esadecimale se non sai farlo
- prendi un libro introduttivo per il linguaggio macchina sul c64
- scrivi dei programmi semplici di esempio, arriva al punto di disegnare due/tre schermate (menu - schermata1 - schermata2) che cambiano con la pressione di un tasto
- spendi un po di tempo a capire cosa sono gli interrupts e come si usano.

Scarica il dasm di Ian Coog a questo  indirizzo per compilare.

 
lda #0 sta $d020 sta $d021

Razhell

  • Utente
  • **
  • Post: 197
  • Gioco Preferito: ghostbusters
Compilatori Basic E Cartucce
« Risposta #5 il: 07 Maggio 2011, 01:20:29 »
 Grazie per la risposta e l'iniezione di fiducia !! non pretendo che qualcuno mi converta il codice, figurati, ma almeno mi hai detto da che parte partire per iniziare a comprendere l'assembly, so contare in binario ed esadecimale.
Poi ho cercato dove si parla delle cartuccie e ho capito come si tira fuori un priogramma, ma ora devo fare la cosa inversa a livello di software.
A livello di hardware non ho problemi, faccio ripariazioni elettroniche da anni specie su prodotti ormai vintage, juke box, flipper e commodore anni 80.....
Ho giusto riportato in vita 3 MB di C-64 in questi giorni, quindi per programmare la eprom non avrò problemi.
La cosa che mi intriga di più è capire che velocità sulla user port riuscirò ad ottenere passando in Assembly perchè già il passaggio dal basic al basic compilato col Blitz! è stato a dir poco notevole al punto che ho messo un ritardo se no le luci erano troppo veloci...

RAz
Razhell
---> SX-64 owner <---

Elder0010

  • Utente
  • **
  • Post: 75
    • http://csdb.dk/scener/?id=22731
  • Gioco Preferito: Rampage
Compilatori Basic E Cartucce
« Risposta #6 il: 07 Maggio 2011, 08:48:35 »
 dal punto di vista hardware non so nulla, ma sono sicuro che avrai un bel boost di performance!!!!
lda #0 sta $d020 sta $d021

med

  • Utente
  • **
  • Post: 103
    • med64.tk
  • Gioco Preferito: Turrican 2
Compilatori Basic E Cartucce
« Risposta #7 il: 08 Maggio 2011, 09:07:31 »
 
Citazione
Ora... chi mi insegna o mi da un po di dritte per spostare il tutto dal basic all'assembly ????

Scusa, perchè non posti (o meglio, alleghi) il programma che hai scritto in basic? Magari se non è troppo complesso qualcuno te lo riscriverà in assembler...

Razhell

  • Utente
  • **
  • Post: 197
  • Gioco Preferito: ghostbusters
Compilatori Basic E Cartucce
« Risposta #8 il: 10 Maggio 2011, 10:38:21 »
 Posso farlo però vorrei anche provare io, se qualcuno si offre di dargli un occhio lo posto, però siccome sto ancora lavorandoci sopra per ottimizzare il codice e aggiungendo feature non ho ancora una versione definitiva.
Se però volete lo metto ( così fi fate 2 risate se ci sono dentro porcate), ditemi però come fare per allegare un file perchè il testo è lunghino.....

RAz
Razhell
---> SX-64 owner <---

med

  • Utente
  • **
  • Post: 103
    • med64.tk
  • Gioco Preferito: Turrican 2
Compilatori Basic E Cartucce
« Risposta #9 il: 10 Maggio 2011, 14:00:34 »
 
Citazione
Se però volete lo metto ( così fi fate 2 risate se ci sono dentro porcate)
Se pensi che possa accadere una cosa del genere, allora hai sbagliato forum...

Citazione
ditemi però come fare per allegare un file perchè il testo è lunghino.....

Comprimilo come vuoi (zip, rar) e allega il file che ne deriva.
Dal momento che hai postato un'immagine ricavata dal VICE, ne deduco che non stai scrivendo il programma direttamente su un vero commodore ma su un emulatore... Quindi perchè non alleghi anche questo file (sia che si tratti di PRG, D64, T64, ecc) o una snapshot di VICE?

Citazione
Posso farlo però vorrei anche provare io, se qualcuno si offre di dargli un occhio lo posto
Infatti, è giusto che a provare (ed imparare) sia tu. Più che altro sono curioso di vederne la (eventuale) complessità. E poi una disanima (progressiva) della conversione del tuo programma da BASIC a ASSEMBLER di certo tornerà utile anche ad altri utenti del forum.

Razhell

  • Utente
  • **
  • Post: 197
  • Gioco Preferito: ghostbusters
Compilatori Basic E Cartucce
« Risposta #10 il: 10 Maggio 2011, 14:34:28 »
 Guarda che non mi offendo se mi pigliate in giro per qualche ingenuità nel sorgente basic... sono 20 anni che non scrivo nulla... e qualche abominio stilistico nel codice c'è di sicuro !!  :lol:
Ho messo la schermata del vice perchè il software lo scrivo usando l'editor CBM Program Studio su win7 ( che reputo molto valido) che è decisamente molto più comodo per l'editing che non usare il c-64 reale o digitare nel vice, CBM poi con un clic mi passa il codice al vice e vedo subito se va tutto bene, almeno così non ho in giro il l'SX-64 con buona pace della moglie.... mi capite vero ?
Il prg poi funziona sul mio sx-64 per ovvie ragioni di collegamento con la scheda luci hardware che deve controllare, però c'è la funzione monitor che evita di collegare la macchina luci per vedere il risultato se no il prg sembrerebbe li fermo, invece spara dati a manetta sulla user-port
Questa sera se riesco ( tempo tiranno) vi metto il sorgente e un minimo di spiegazione per capire cosa fa e come usarlo, se no la vedo dura..
Tieni presente che il prg non fa ancora tutto quello che mi ero prefissato di fargli fare, infatti ci lavoro su tutte le sere.... lo sto ottimizzando perchè il programma macina una quantità enorme di DATA dentro ad una variabile a 2 dimensioni per gestire i 4096 modi in cui puo' combinare l'accensione delle 12 lampade e quindi combinando le sequenze i DATA sono molti molti... stasera mi capirai meglio.

Grazie e a presto
RAz
Razhell
---> SX-64 owner <---

Razhell

  • Utente
  • **
  • Post: 197
  • Gioco Preferito: ghostbusters
Compilatori Basic E Cartucce
« Risposta #11 il: 11 Maggio 2011, 00:14:42 »
 domanda.... come si fa ad allegare un file al messaggio ? c'è l'opzione per una immagine ma il file è 15 minuti che cerco ma ...

RAz
Razhell
---> SX-64 owner <---

eregil

  • Administrator
  • Utente
  • *****
  • Post: 706
  • Gioco Preferito: Impossible Mission
Compilatori Basic E Cartucce
« Risposta #12 il: 11 Maggio 2011, 00:23:20 »
 Se non hai un tuo hosting, usa un servizio di file sharing (megaupload, ecc.) e posta il link.
 
Non rispondo a richieste private, di qualunque genere esse siano.
Per domande tecniche leggete le FAQ e usate l'apposito forum.
Per questioni amministrative contattate lo staff tramite il form Contatti sul sito.

Razhell

  • Utente
  • **
  • Post: 197
  • Gioco Preferito: ghostbusters
Compilatori Basic E Cartucce
« Risposta #13 il: 11 Maggio 2011, 00:38:17 »
 Ecco la versione più recente del programma T.I.M. ovvero "The incredible Machine", nome di una fantasia estrema....
Ora vi spiego cosa serve e cosa fa il programma basic che allego al messaggio, basta fare un drag e drop dentro al VICE e poi con esc fermarlo per vedere il listato...
Prima un po' di info anche sull'hardware, TIM è un sequencer di luci per discoteca, con 12 canali a 220 volt a cui connettere le classiche lampade colorate, utile per creare una discoteca molto anni 80.
L'hardware è collegato alla user port del C-64 tramite una interfaccia isolata da fotoaccoppiatori, ora vediamo come ottenere 12 luci indipendenti con la user port.
La porta ha 8 linee programmabili come in o out, ne usiamo una come input ( l'ultima) e 7 come output, la linea di input la uso per leggere una linea audio AUX dalla quale ottenere i picchi della musica per far avanzare le luci a ritmo, le altre 7 sono usate così: 6 linee per gestire le luci e una per gestire il multiplexer, ovvero se la linea è a 0 comando le luci da 1 a 6 poi
portando la linea del multillexer ad 1 (alto) mando i segnali per le seconde 6 luci, così facendo ho 12 luci indipendenti.
da qui si capisce che per gestire le 12 luci devo sempre mandare una coppia di dati sulla porta, una con il multiplexer basso e una col multiplexer alto.
Le sequenze, per usare la centralina come luci da discoteca bisogna gestire degli effetti, ad esempio una lampada che viene accesa una dopo l'altra, luce 1 accesa, le altre 11 spente, poi spengo la 1 accendendo la 2 e le altre sempre spente.... ecc, così il punto luminoso scorre per le 12 luci, sempre col sistema delle 6 + 6 luci.
Le poke usate sono solo 2, all'inizio si setta la porta con poke 56579,127, poi con poke 56577,x ripetuta mando le 2 data per le 12 luci (6+6)
i valori usati sono da 0 a 63 per le prime 6 luci e da 64 a 127 per le altre 6, i codici sono ripetuti se le posizioni delle luci sono simmetriche, basta mandare il primo valore e poi il primo valore +64.
Mi spiego:
luci tutte spente poke 56579,0: poke 56577,64 (64=0+64)
luci tutte accese: poke 56579,63: poke 56579,127 (63+64=127)
Quante comnbinazioni ottengo con 12 luci= 4096 combinazioni ( 64 per ogni banco, quindi 64 *64= 4096)
Per leggere i picchi della musica basta leggere con peek sempre la locazione 56577, se il valore è maggiore di 127 il picco è presente e il programma reagisce facendo avanzare le sequenze delle luci.
quindi per gestire le luci ed ottenere degli effetti è sufficiente mandare alla user port delle sequenze di poke, sempre a coppie e si ottiene il movimento delle luci, più è veloce l'invio e più veloce è l'effetto ottenuto, l'importante è avere la fantasia giusta per creare inseguimenti, lampi scie e quant'altro.
E qui la cosa si fa complessa, per ottenere velocità ho fatto si che il programma carichi i valore da dare alle poke in una variabile bidimensionale DIMensionata DIM A%(5000,1) così abbiamo la possibilità di gestire 5000,0 valori per il primo banco e 5000,1 per il secondo, vi sembrerà strano ora ma non è grande la variabile, definiti gli effetti forse sarà da ingrandire, leggete fino in fondo prima di tirare conclusioni....
Ora bisogna capire come passare al prg le sequenze numeriche, usando le linee di DATA è la soluzione più veloce, ovvio che bisogna creare a penna le sequenze perchè per ottenere solo un punto luminoso che scorre ci vogliono 24 valori, per farlo continuo si ripete la stessa sequenza all'infinito, non bisogna scrive infinite volte  la sequenza.
Un problema che si è posto è come gestire la lunghezza delle sequenze perchè è una cosa che può variare spesso in base all'idea che ci viene, ho realizzato sequenze da 400 step che corrispondono a 800 DATA da leggere, quindi ogni sequenza avrà un inizio e una fine e questo crea pasticci perche la lettura dei DATA è sequenziale, quindi se vogliamo mettere 3 sequenze dobbiamo sapere esattamente dove ognuna inizia e finisce all'interno della sequenza dei data, ma se vogliamo inserire altri step in una sequenza dobbiamo ricalcolare ogni inzio e fine.
Quindi ?? ho creato un formato da leggere nei data affinche il prg sappia da solo capire l'inizio, il nome, la lunghezza e la fine di ogni sequenza così non devo ricalcolare ogni volta il tutto, poi la READ dei data non deve andare in errore quindi va messo un qualcosa che dica che si è letto l'ultimo valore dell'ultima sequenza e non si deve READ altri DATA.
ecco un esempio:
DATA 150,"strobo",63,127,0,64,250
150 definisce l'inzio della sequenza ed è sempre seguito dal nome, poi ci sono le coppie di valori e poi il valore 250 dice che la sequenza è finita, se dopo ci fosse un 255 vuol dire che non c'è più nulla da leggere.
Nell'esempio la macchina accende e poi spegne le 12 luci, ripetendo si ottiene un effetto strobo su tutti i 12 canali.
Le sequenze hanno un nome, come si vede, e questo viene mostrato a video nell'elenco delle sequenze disponibili così si ricorda l'effetto mnemonicamente.
Il programma mostra il numero della sequenza in esecuzione.
Sapendo l'inizio e la fine di ogni sequenza si può far andare indietro il ciclo con uno STEP-1 e l'effetto della sequenza è al contrario...
Un ciclo for next su se stesso crea un ritardo se le luci sono troppo veloci, ovvio che il valore si cambia in real time...
Il monitor delle luci, per non dover collegare la macchina ogni volta ci vuole il monitor che mostra lo stato delle 12 luci esattamente come sono al vero, anche qui sono ricorso ai data dove ho creato le 64 possibili condizioni per ogni 6 banchi di luci e ripetendole per il secondo banco ho un monitor in real time che reagisce agli stessi valori di POKE inviati alla porta, così si vede se l'effetto è corretto o da problemi.
Altre cose sono banali, con f1 accendo tutte le luci e f3 le spengo, utile per illuminare fisso il locale in caso di allestimenti o problemi... idem spegnere tutto se si vuole passare ad altri effetti presenti in sala tipo laser o altro.
Poi.. il programma può passare da automatico a sincronizzato con la musica con la sola pressione di un tasto, NON passate a sincronizzato se testate il mio prg su un c-64 vero perchè senza l'audio in ingresso si ferma in attesa del picco musicale che non gli arriverà mai, sul vice non succede nulla....

Dopo un bel po di teoria passiamo al programma vero e proprio.
Alla partenza viene presentata una schermata di transizione dove il programma è impegnato nella creazione del banco monitor, ovvero la lettura dei data, la macchina esegue la sequenza dei poke per vedere il funzionamento, poi le luci sono spente.
Ora parte la compilazione della variabile a%(5000,1) che contiene le sequenze che sono variabili in numero da 1 a 30.
Il programma mostra il progressivo della sequenza in compilazione e il relativo nome, una specie di ventola mostra che il prg NON è piantato, ci mette un po, ma leggere qualche centinaio di data e separare le sequenze ci vuole un po...
Poi terminata la compilazione la schermata cambia e il prg mostra le sequenze compilate associandole ai relativi tasti di selezione, le sequenze sono in numero variabile a scelta da 1 a 30, ci pensa il programma a mostrare i nomi a video per un max di 30 sequenze.
poi il programma si setta con le luci tutte accese fisse e attiva il monitor.
Il programma è in modalità automatica e il reverse delle sequenze è disinserito, il ritardo sulle sequanze è posto a 0 ( zero).
Ora basta premere i tasti mostrati sullo schermo per vedere il monitor mostrare i giochi di luci che sono gli stessi che vedremmo sulle 12 luci se fosse collegata la Incredible Machine.
Vi sembreranno strane alcune cose come il modo in cui il prg mette i nomi delle sequnze a video, siccome lo spazio di ogni nome è di 10 caratteri il prg ne tiene conto e se il nome è più lungo lo tronca senza variare l'incolonnamento delle 3 colonne dei nomi.
Idem per mostrare il numero o lettera della sequenza in uso, che corrisponde al carattere della tastiera associato, uso una poke con il valore del carattere e non una print che deve tener presente posizione di riga e colonna ogni volta.
Se vi sembra lungo il tempo di compilazione delle sequenze campione che ci sono nel programma potete limitarlo ad usare le prime 4 mettendo un 255 alla fine dell'utima sequenza che volete usare senza cancellare le DATA successive, noterete che sullo schermo anche i nomi delle sequenze non usate non saranno presenti, le sequenze non assegnate sono come la 1
Importante è lasciare sempre fissa e non modificata la prima sequenza definita STROBO perchè uso i relativi valori per avere con F1 ed F3 le luci accese o spente.
Vi accorgerete che in alcune righe di codice supero gli 80 caratteri di testo, è una forzatura, sto risolvendo il problema perchè senò diventa difficile modificarle dentro al vice o su un c-64 vero.
Se volete vedere come si comporta la velocità delle luci usando il BLITZ! compiler... beh provate !!! ecco perchè vorrei passare all'assembly !!
Sperando di avervi incuriosito vi saluto

RAZ

qui sotto grazie alla dritta di eregil trovate il link al sorgente per il VICE

http://www.megaupload.com/?d=5E79LRML
Razhell
---> SX-64 owner <---

Razhell

  • Utente
  • **
  • Post: 197
  • Gioco Preferito: ghostbusters
Compilatori Basic E Cartucce
« Risposta #14 il: 11 Maggio 2011, 19:19:45 »
 Spariti tutti ?? troppo lungo da leggere il post ???  :lol:

RAz
Razhell
---> SX-64 owner <---