Autore Topic: Ridimensionare Una Dim In Basic  (Letto 3350 volte)

Razhell

  • Utente
  • **
  • Post: 197
  • Gioco Preferito: ghostbusters
Ridimensionare Una Dim In Basic
« il: 20 Settembre 2011, 00:51:38 »
 So già che da manuale una variabile del tipo

DIM A%(300,1)   300 è un esempio.... di solito c'è una variabile..

non può essere cambiata se non fermando il programma e rieseguendolo, ma, siccome ho capito che quasi tutto è possibile chiedo se c'è un qualche artifizio per arginare l'ostacolo.

So che vi chiederete cosa ci devo fare, sto creando un editor per il programma della centralina luci da discoteca che ho rimesso in pista e dovendo cambaire il numero dei passi che fanno le sequenze ho la necessità di questa cosa.

Grazie a tutti per qualsiasi idea da infilare nel programma basic che sto creando.

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

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Ridimensionare Una Dim In Basic
« Risposta #1 il: 20 Settembre 2011, 20:43:50 »
 In Basic v2 gli array una volta creati te li tieni cosi'. Puoi solo fare CLR e annullare OGNI variabile, quindi se devi cambiare la dimensione dinamicamente l'unica e' ridare run o clr/goto 10, chiedere in input la dimensione e ricreare l'array con la nuova dimensione.
La domanda che mi pongo e' se davvero hai bisogno di un array di interi.
Puoi sempre usare una scappatoia, usando direttamente la memoria con poke e peek. In una variabile AD metti l'indirizzo iniziale della memoria che fa da array, in una Q metti la dimensione massima e ID l'indice.
Se devi "allargare" l'array basta che incrementi Q
quando devi accedere all'elemento ID-esimo fai peek(AD+ID) o se devi scriverci poke AD+ID, valore. Ovviamente sempre controllando ID  < Q.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Razhell

  • Utente
  • **
  • Post: 197
  • Gioco Preferito: ghostbusters
Ridimensionare Una Dim In Basic
« Risposta #2 il: 23 Settembre 2011, 23:09:10 »
 Grazie per la risposta, ci sono idee molto interessanti !! adesso ci lavoro su e qualcosa ci ricavo.

Mi chiedi il perchè degli interi, devo mandare sulla user port tramite poke delle coppie di valori, ad esempio
0,64   2, 72   1,66 ecc ecc
inviati come:
   peek 56577,A%(B,0) per il primo dato della 1°coppia
e peek 56577,A%(B,1) per il secondo dato della 2°coppia

ecc ecc incrementando B passo alla coppia successiva...

quindi numeri interi da 0 a 127,  uso 7 linee della porta in uscita e una in entrata per un'altra funzione.

queste coppie formano i valori delle prime 6 luci che controllo, e le seconde 6, un hardware col multiplexer gestisce la cosidetta coppia

la quantità di coppie varia in base all'effetto che voglio ottenere con le luci, che sono 12 ( 6+6 ecco le coppie di prima) posso avere nel programma fino a 30 effetti separati.

Il problema è che alcune sequenze hanno 10-15 o 20 coppie mentre alcune arrivano a 300

All'inizio creavo una dim A%(5000,1) così' da gestire 5000 coppie
però se devo eliminare o aggiungere una coppia in una detemrinata posizione devo spostare in avanti o indietro tutte le coppie  e diventa noioso

l'idea è creare una dim per ogni effetto così con 30 dim me la cavo, però non sapendo prima se la sequanza 5 necessità di 50 o 300 coppie si crea il problema, se dimensiono una dim a  300,1 e poi uso 20 coppie occupo memoria inutilmente che invece mi serve per una sequnza che realmente necessita di 200 o 300 coppie, e con 32 k incluso il programma non posso scialare.

il file delle coppie è poi salvato con una struttura particolare che fa identificare automaticamente l'inizio, il nome  e la fine di ogni singola sequnza di coppie, il file è poi  riletto dal programma luci che è esterno all'editor che sto facendo
Leggere il file esterno e associare il dim corretto alle sequenze non è un problema perchè leggendo il file so esattamente quante coppie per ogni sequenza leggo e quindi dimensiono senza problemi.
Il problema c'è se vuoi editare e aggiungere qualche decina di coppie di valori e la dim è troppo piccola, ecco il perchè del cambiamento in corsa.

Il programma, e relativo hardware, se volete capire cosa fa è quello della discussione "compilatori basic e cartuccie" nella sezione aiuto&domande, se qualcuno vuole più info su hardware e software chiedete.

grazie ancora per l'aiuto prezioso.

RK
Razhell
---> SX-64 owner <---