infatti sto imparando leggendo i sorgenti di altri programmi...
Si impara anche cosi', e persino anche solo disassemblando i programmi.
purtroppo leggere testi che parlano parlano parlano non mi aiuta a capire niente, imparo di piu leggendo i sorgenti e cercando di capire ogni linea a cosa serve andando a vedere su qualche manuale.... faccio in effetti il lavoro inverso... ma mi viene più facile cosi...
Pero' questo era giustificabile quando di documentazione non ce n'era come ai tempi in cui imparai io, e cara grazia di avere CCC come bibbia. Ora la documentazione e' disponibile, e aiuta a capire il perche' di tutte quelle misteriose lda/sta che altrimenti sarebbero apprese solo come assiomi.
non ho ancora bene chiaro in mente perchè si fa partire il programma da una locazione anzichè da un'altra...
Perche' se guardi come e' strutturata la memoria del C64 all'accensione, il Basic parte proprio da $0801 fino a $9FFF, da $A000 a $BFFF c'e' la ROM del basic, e a $C000 fino a $CFFF c'e' uno spazio libero di 4Kb RAM (ce ne sono anche altri ad esempio il tapebuffer a $0334-03FF)
Dove mettere il proprio programma e' una cosa da decidere PRIMA di iniziare a scriverlo. Si puo' scrivere ovunque se si tratta di una cosa fine a se' stessa come un prg di esempio, se invece deve convivere con altre parti, ad esempio grafica, musica, un programma basic che necessita di routine asm, o un qualcosa di piu' complesso come un gioco o demo multiparte etc., insomma va deciso conoscendo la situazione generale di cosa deve contenere tutto il programma finito.
Si puo' anche solo decidere che il programma non debba occupare troppi blocchi inutilmente.
Tu ad esempio hai messo la tua pic a $2000 e il codice a $c000. Uno spreco notevole. Dato che la pic va da $2000 a $4711 (mi riferisco all'occupazione di una pic koala, la tua potrebbe variare di qualche byte, ma alla fine e' sempre una multicolor pic e occupa 8000+1000+1000+1 bytes come minimo) il codice poteva essere messo a $1f00 o $4720 , riducendo il prg finale di parecchio.
Per mettere una sysline e' sempre necessario far partire il prg a $0801 con dei bytes che definiscono la linea basic
* = $0801
word eop
word 7102
byte $9E
byte "2061"
byte $00
eop
word $00
(qui ora siamo a $80d cioe' 2061)
pero' poi rimane lo spazio vuoto tra il tuo programma e la pic .
Infine, il programma puo' (o meglio deve!) essere sempre compresso per risparmiare al massimo l'occupazione e limitare il tempo di caricamento.