Autore Topic: Disegnare Più Sprtes Distinti  (Letto 2174 volte)

bennylaser

  • Neo-iscritto
  • *
  • Post: 10
  • Gioco Preferito: Archon
Disegnare Più Sprtes Distinti
« il: 25 Dicembre 2007, 16:20:15 »
 Nel manuale del C=64 c'è scritto come gestire più sprites contemporaneamente, max 8, ai quali è associato: 1 bit sul registro V+21 (V=53248), un puntatore dall'indirizzo 2040 al 2047 che contiene oognuno un indirizzo di blocco di memoria (1 blocco=64 bytes), e un'opportuna locazione di 63 nytes in memoria dove mettere il disegno codificato.
Nell'esempio del manuale, le mongolfierine sono in realtà semrep la stessa, perchè gli sprites differenti puntano tutte allo stesso blocco, per essere precisi il 13 (indirizzi da 832 a 894).
Ora, se io volessi disegnare 8 sprites distinte, le difficoltà che incontrerei sarebbe la carenza di blochi di memoria liberi; infatti il 13° blocco suggerito dal manuale si trova nel buffer di cassetta; al suo interno vi sono anche il 14° e 15° blocco; oltre a questi ho trovato l'11 (che è completamente inutilizzato, ed è quindi il più indicato), e poi l'8 e il 9, ma questi sono da considerare con cautela, perchè sono occupati dal buffer del basic e della tastiera; riassumendo, ho a disposizione i blocchi:

11 (perfetto)
13, 14 e 15 (con il vincolo delle operazioni da datassette)
8 e 9 (fortemente vincolate dai buffer di sitema)

con le limitazioni di cui sopra, si arriva a 6 blocchi liberi (e neanche tanto liberi).
Vorrei sapere: ma con tutti questi 64K, ma possibile che non si trovino altri locchi liberi? Considerate che devono essere sotto i 16K, perche i puntaotir ai blocchi per sprites sono da 1 byte.

eregil

  • Administrator
  • Utente
  • *****
  • Post: 714
  • Gioco Preferito: Impossible Mission
Disegnare Più Sprtes Distinti
« Risposta #1 il: 25 Dicembre 2007, 18:26:11 »
 La soluzione più semplice è quella di spostare l'inizio della RAM BASIC (puntatore 43-44) in avanti, e quindi utilizzare l'area da 2048 in poi. Naturalmente si rende poi necessario impostare i puntatori ogni volta che si ricarica lo stesso programma BASIC. Questa tecnica è utilizzata in molti libri di programmazione per principianti.

Nota che così facendo non è comunque possibile utilizzare l'area da 4096 a 8191 ($1000-$1FFF), perché il VIC-II vede sempre il set di caratteri in tali locazioni, al posto della RAM.
 
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.

bennylaser

  • Neo-iscritto
  • *
  • Post: 10
  • Gioco Preferito: Archon
Disegnare Più Sprtes Distinti
« Risposta #2 il: 25 Dicembre 2007, 20:22:36 »
 Come "programmazione per principianti"?!
Scherzo, ok, ti ringrazio, non avevo mai utilizzato quel puntatore. Grazie di cuore!

bennylaser

  • Neo-iscritto
  • *
  • Post: 10
  • Gioco Preferito: Archon
Disegnare Più Sprtes Distinti
« Risposta #3 il: 25 Dicembre 2007, 20:34:16 »
 Grande, ho provato, ho allocato i dati delle sprites sui blocchi dal 32 al 37, ed ho posto l'inizio del programma nel blocco 38: funziona!!!
Peccato per il listato,  c'è un modoper recuperlarlo? Ho provato, ma non ho ben chiaro i valori da reimpostare sul puntatore di inizio Basic (43-44)!

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Disegnare Più Sprtes Distinti
« Risposta #4 il: 25 Dicembre 2007, 21:45:01 »
 Gli sprites come i charset, lo schermo testo e quello bitmap devono risiedere nello stesso banco da 16Kb perche' il VIC-II puo' solo vedere 16Kb alla volta.
Il tuo problema di avere sprites entro $3fff, cioe' il limite fisico del VIC-II di poter indirizzare di default il banco 0 da $0000 a $3fff (default cambiabile agendo sulla locazione $dd00), e di avere contemporaneamente un programma basic a $0801 (2049) e' facilmente aggirabile.

Sempre leggendo i vari dox, ad esempio Mapping the C64 o All About Your C64,
puoi trovare utili i puntatori del BASIC:
Codice: [Seleziona]
$2B-$2C/43-44  Pointer: Start of BASIC Text Area
 $2D-$2E/45-46  Pointer: Start of BASIC Variables
 $2F-$30/47-48  Pointer: Start of BASIC Arrays
 $31-$32/49-50  Pointer: End of BASIC Arrays + 1
 $33-$34/51-52  Pointer: Bottom of String space
 $35-$36/53-54  Utility String Pointer
 $37-$38/55-56  Pointer: Highest Address available to BASIC

Come ti ha detto Eregil, spostando in avanti l'inizio del basic o, forse ancora piu' semplicemente, limitando l'area del programma basic a $2fff, agendo sulla locazione 56, lasciandoti liberi 4kb a partire da $3000, 12288 in decimale ($4000-$3000=$1000, spazio per $1000/$40=64 sprites diversi)

Inizia il tuo programma con
Codice: [Seleziona]
0 poke 56,48:CLR
e cerca di non scrivere un programma piu' lungo di 10k, tieni d'occhio la memoria disponibile con ?FRE(0)
Ovviamente se ti servono meno sprites, puoi allocare meno memoria, e lasciarne quindi di piu' per il programma basic e le variabili.

Per quanto riguarda i valori da immettere, sono puntatori a 16 bit, quindi vanno messi i valori degli indirizzi a cui puntano spezzandoli in byte basso e byte alto:

byte_alto=int(valore/256)
byte_basso=valore-(byte alto*256)

o piu' semplicemente ragionando in esadecimale (tra l'altro in asm tutti sti problemi quasi non ci sono)

2049 =$0801 -> poke43,1:poke44,8
12288=$3000 -> poke55,0:poke56,48

Citazione
Peccato per il listato,  c'è un modoper recuperlarlo?
LIST forse?
Altrimenti non ho capito (diciamo anche che non ti esprimi molto bene eh?) cosa vuoi dire.

PS: queste discussioni (anche quella sul sid) andrebbero fatte nel subforum Programmazione.
 
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

bennylaser

  • Neo-iscritto
  • *
  • Post: 10
  • Gioco Preferito: Archon
Disegnare Più Sprtes Distinti
« Risposta #5 il: 26 Dicembre 2007, 00:39:05 »
 Roger that. Allora mi trasferisco lì.