Commodore 64 > Programmazione, Grafica e Musica
Si puo' usare multipaint per fare un intro di un gioco?
Giovanni Casati:
Salve a tutti,
ho visto che qualcuno già in passato si era cimentato con multipaint.
Qualcuno sa come usare questo tool per fare una intro di un gioco?
Il programma funziona bene per caricare e esportare immagini in modo bit map ma non capisco come si possa inserire in un programma (basic o asm) che possa richiamare l'immagine.
Multipaint esporta le immagini in un file eseguibile .prg ma se chiamo il .prg dal basic poi il programma non ritorna al basic e bisogna digitare runstop/restore per riprendere la mano.
Multipaint esporta anche in formato .bin e quindi teoricamente si potrebbe tentare con CBM PROGRAM STUDIO con istruzione incbin nell'ASM. Il problema è che il file .bin eccede la dimensione max prevista da CBM PROGRAM STUDIO
Se qualcuno ha qualche dritta o magari la cosa non si puo' fare
Ciao
Grazie
tsm_carmine:
Ciao!
Prima di scegliere gli strumenti da usare è importante conoscere il meccanismo che permette di selezionare un certo modo video e puntare il chip grafico a un insieme di dati corrispondenti a un'immagine.
Una volta capito questo meccanismo, la cosa più banale che si può fare è creare un sorgente assembly e usare le direttive di inclusione binaria per incorporare nel file assemblato gli asset che compongono l'immagine. Nel sorgente dovrai mettere le istruzioni per copiare questi dati in delle aree di memoria adatte e per impostare il chip grafico.
Ma ci sono tanti altri modi. Si può fare qualcosa di molto simile anche in basic, oppure puoi tenere separati il programma e gli asset e, usando un cruncher come Exomizer, fare in modo che all'avvio tutti i dati vengano decompressi automaticamente nelle aree di competenza.
Giovanni Casati:
Ciao e grazie per dritta: sì in effetti forse si può fare.
Ho visto che multipaint può esportare in un file testo tutti gli 8000 bytes del bitmap e i 1000 bytes del colore. Sto provando a metterli in CBM program studio in file asm con istruzione BYTE.
Se poi faccio un loader in basic, dovrebbe andare.
Ti aggiorno
Giovanni
Giovanni Casati:
di nuovo io...pensavo fosse più facile...
ho fatto un loader in basic per l'immagine (mainbasic.bas nella cartella zippata) ma mi da sempre errore con corruzione del programma se vado a fare list della riga incriminata. Credo ci sia un problema di sconfinamento in zone di memoria proibite o di sovrapposizione del basic con i dati bitmap.
Se dal mainbasic.bas tolgo tutti i data dei bitmap (righe 12-648) e lascio solo la memoria schermo, il programma gira e i colori sono caricati correttamente.
Se scrivo il loader in assembly ho il problema opposto: ho un errore (undef' statement error) ma se pulisco lo schermo e do SYS49152 l'immagine bitmap si vede mentre i colori non sono caricati.
Qualcuno riesce a darmi una dritta?
Grazieeee
Grazie
tsm_carmine:
Il programma basic si sovrascrive da solo: si carica da 2049 a 34591 e poi alla riga 12 tenta di scrivere nell'area 8192 - 16191. Usa la selezione del banco (tramite il registro $DD00) e le impostazioni per screen RAM e bitmap RAM per usare una zona non occupata dal programma basic. Ad esempio potresti scegliere $E000 - $FF40 per i dati bitmap. Lascio a te il resto.
Il programma asm, invece, è fatto in modo che i dati screen e bitmap si trovino già a destinazione una volta caricato. Il problema è che i colori vanno a finire nella screen ram quando sia tu che il sistema operativo la state ancora usando come pagina di testo. Dopo il caricamento, il sistema scrive "READY", corrompendo parzialmente i colori; tu digiti la SYS in mezzo a una selva di caratteri estranei (i dati del colore) e come risultato il comando non viene eseguito. Potresti provare a collocare i dati colore un po' più avanti, ad esempio a $0800 (ricorda di impostare correttamente $D018).
Navigazione
[0] Indice dei post
Vai alla versione completa