Effettivamente sì, hai postato in una sezione sbagliata ("Programmazione" è dedicata alla programmazione
del C64, la tua è una domanda più da "L'Angolo Tecnico").
Per quanto riguarda la conversione "diretta" da .PRG a .TAP, io non conosco nessun tool che la esegua. Il formato .TAP come saprai è fondamentalmente diverso dal .PRG (o dal .T64) in quanto non contiene i dati come sono contenuti in memoria, bensì proprio nella forma di impulsi presenti sulla cassetta, comprese le particolarità dovute a turbo tape e trucchetti vari. Insomma non si tratterebbe di una vera e propria "conversione" ma della "generazione" di un .TAP sulla base dei dati da memorizzare: l'output non è univoco, ossia un .PRG può generare molti .TAP diversi. Anche il tuo dubbio sulla memorizzazione del byte $00 (sempre che non sia io ad averti capito male
) è mal posto: su un .TAP non si memorizza il byte $00 bensì impulsi tali che possano essere "interpretati" come un byte $00...
Cmq non sentirti troppo male, ammetto apertamente di non conoscere neanch'io il formato .TAP in maniera abbastanza approfondita da tenere un seminario...
Dovendo generare un .TAP e avendo il programma sul VICE, io ti consiglierei di continuare a provare a generare il .TAP direttamente da VICE e non da un .PRG.
Evidentemente però, come dovresti sapere, il comando SAVE effettua salvataggi
sempre dall'area BASIC, così come è identificata dai puntatori 43-44 e 45-46.
La procedura corretta per salvare aree di memoria diversa, quindi, è:
1) alterare i puntatori 43-44 e 45-46 rispettivamente all'indirizzo iniziale e all'indirizzo finale
più uno (particolare da non sottovalutare) dell'area di memoria che devi registrare
2) eseguire il tuo bel comando SAVE
3) rimettere i puntatori a posto prima di continuare a usare il C64!
Ad esempio per salvare l'area di memoria da 49152 a 49762 (indirizzo che ho preso a caso... tu mettici quello che ti serve):
1) prendi nota dei valori attuali di PEEK(43), PEEK(44), PEEK(45), PEEK(46) facendoli stampare con PRINT e scrivendoteli da una parte. Memorizzarli su variabili del C64 non va bene, perché alterando i puntatori, il C64 si perde anche le variabili!
2) calcoli i valori byte basso/byte alto:
byte alto = INT(locazione/256)
byte basso = locazione - byte alto * 256
49152 =
0 +
192*256
4976
3 =
99 +
194*256
3) esegui
POKE 43,
0:POKE 44,
192POKE 45,
99:POKE 46,
1944) fai il tuo bel
SAVE "nome programma"
5) esegui le POKE per rimettere nelle locazioni 43, 44, 45, 46 i valori precedenti
In alternativa, usare una routine in linguaggio macchina o una di quelle espansioni del BASIC che forniscano un comando tipo BSAVE.
Ti ricordo anche che la procedura corretta per caricare zone di memoria da cassetta è LOAD"nome programma",1,1 (eventualmente anche solo LOAD"",1,1)
seguito da NEW a caricamento terminato.
Spero che questa dissertazione ti sia utile...
Ma alla fine di tutto, quello che volevo dirti realmente è: perché non usi i dischetti?