ciao a tutti... vorrei, da neofito neo-avvicinato alla programmazioned si C64, fare una domanda tecnica ma, diciamo, BASIC-oriented sulla gestione dei DATA...
credo che la questione possa avere attinenza con la gestione della memoria e dei dati in generale... ma io "parlo" in basic perché lo conosco meglio... (almeno un po')
cerco di spiegarmi.
utilizzando il costrutto READ...DATA praticamente io assegno a una variabile A il valore letto dalle catene DATA recuprato di volta in volta tramite il puntatore a DATA... ovvero epr ogni READ il puntatore avanza di una posizione e legge il valore DATA corrispondeente. questo è già una questione a basso livello anche se usata dal basic perché il 6510 ha un solo puntatore utilizzabele allo scopo... ok... io non ho forma di controllare né manipolare la posizione del puntatore, l'unica cosa che posso fare è veder se ci sono ancora DATA disponibili e/o rimettere tutto da capo con RESTORE...
ora facciamo l'esempio che io uso i DATA per caricare i registi del VIC-II per genereare uno sprite....
metti che il mio programma è del tipo : "scegli lo prote che vuoi visualizzare tra gli i 20 diponibili, scrivi un valore da 1 a 20 e premi invio"..
in questo caso io devo DINAMICAMENTE puntare al blocco di data relativo allo sprite 1...20 ma con i contrlli che ho a disposizione posso solo movermi avanti di un DATA per ogni READ o ricominciare da capo... Sapendo che ogni sprite è composto da 24 data sequenziali (3x8 byte) e assumendo che io sono stato bravo e ho organizzato i blocchi da 24 in modo sequenziale, l'unico modo che mi viene per visualizzare direttamente (ad esempio) lo sprite 18 è resettare il puntatore, fare un un ciclo di 17x24 read SENZA assegnare i valori ai registri del VIC in modo di posizionarmi all'inizio del 18esimo blocco di 24 data (dove ho organizzato i valori per lo sprite 18) e da li fare un ciclo di 24 per leggere i DATA e caricare i valori nel VIC...
Cosí dovrebbe funzionare ... però mi sembra una cosa TROOOOOOOOOOPPO lenta per poter esser fruibile in un gioco... anche lavorando in assembler... cioè ... non è possbile che se io DINAMICAMENTE voglio acceder alla struttura dati N per avere a disposizione un certo gruppo di dati devo ricomincire a scorrermi tutti i valori da 0...
e calcola che ho fatto un esempio semplice perché ho ipotizzato cehe i data sono solo per gli sprite e quindi uniformemente organizzati in blocchi da 24... se in mezzo a tutti sti data ci sono (come normale) dati per altre cose (chessó musica, dati personali... ecc. ecc.) che hanno una struttura diversa uno dall'altro diventa un inferno..
come cavolo si fa?
non se sè è un problema di Basic in senso stretto (magari in ASM ci sono tecniche che permettono di accede direttamente al blocco dati desiderato...) o proprio di accesso ai dati in assenza di strutture dati dedicate (tipo Array di oggetti o struct)
non so se sono stato chiaro...
grazie a tutti per l'aiuto ...