User Tools

Site Tools


content:retrocomputing:vice

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
content:retrocomputing:vice [2023/08/25 16:01] – [Hello World] admincontent:retrocomputing:vice [2023/08/27 14:07] – [Mappa della memoria] admin
Line 411: Line 411:
 {{:content:retrocomputing:helloworld05.png|}} {{:content:retrocomputing:helloworld05.png|}}
  
-Il codice è stato cambiato, ed è stato necessario modificare **sia la mappa schermo che la mappa colore (in rosso)**, altrimenti le scritte non sarebbero comparse; inoltre, a causa dello **//scrolling//**, è stato necessario modificare le locazioni schermo e colore a partire dalla **sesta riga** (a partire quindi dalle locazioni $1E6E - 7790 per lo schermo e $966E - 38510 per la mappa colore), così che la scritta non scomparisse.+Il codice è stato cambiato, ed è stato necessario modificare **sia la mappa schermo che la mappa colore (in rosso)**, altrimenti le scritte non sarebbero comparse; inoltre, a causa dello **//scrolling//**, è stato necessario modificare le locazioni schermo e colore a partire dalla **sesta riga** (a partire quindi dalle locazioni $1E6E - 7790 per lo schermo e $966E - 38510 per la mappa colore), così che la scritta non scomparisse in alto.
  
 +==== Mappa della memoria ====
 +
 +Programmando il VIC 20 in assembly, si va direttamente ad utilizzare/scrivere sulla sua memoria; può essere quindi utili conoscere alcune **aree della memoria**, così da comprenderne meglio il comportamento del computer.
 +
 +=== Reset vector ===
 +
 +L'**indirizzo del reset vector** è nella memoria **in KERNAL rom** ($E000-$FFFF 57344-65535); è contenuto in due indirizzi di memoria, $FFFD - 65533 (high byte) e $FFFC - 65532 (low byte); facendo un po' di calcoli si ottiene:
 +
 +{{:content:retrocomputing:vice-reset-vector01.png|}}
 +
 +che è l'**indirizzo del reset vector ($FD22 - 64802)**, che può quindi essere richiamato, ad es. da BASIC, per effettuare un reset del computer:
 +
 +{{:content:retrocomputing:vic-reset-vector02.png|}}
 +
 +La routine Kernal vera e propria presente in $FD22 è abbastanza complessa; incollo qui di seguito le prime istruzioni:
 +
 +{{:content:retrocomputing:vic-reset-vector03.png|}}
 +
 +=== Start-of-Basic RAM ===
 +
 +L'inizio della **RAM Basic** è definito, a seconda che il VIC 20 sia o meno espanso, così:
 +
 +{{:content:retrocomputing:vic-basic-ram01.png|}}
 +
 +tratto da **[[https://techtinkering.com/articles/basic-line-storage-on-the-vic-20/|qui]]**. Il **vettore di inizio Basic è dato dal contenuto di due locazioni, 43 (low byte) e 44 (high byte)**; il valore $1001 è confermato:
 +
 +{{:content:retrocomputing:vic-basic-ram02.png|}}
 +
 +<note tip>
 +Quasi tutta la memoria RAM del VIC 20 è assegnata al BASIC; questo consente di scrivere programmi quanto più grandi possibile. **Per ottenere più spazio per i programmi in linguaggio macchina bisogna quindi riassegnare la memoria assegnata al BASIC**
 +</note>
 +
 +Questo valore e i successivi, potrebbero interferire con il codice assembly che scriviamo; fino ad adesso per questo abbiamo utilizzato $1100 - 4352: un programma Basic potrebbe andare a sovrascriverlo. E' consigliabile quindi **spostare in avanti il vettore di Start-of-Basic**; come indicato **[[https://www.atarimagazines.com/compute/issue38/105_1_PART_III_VISITING_THE_VIC-20_VIDEO.php|qui]]** conviene procedere così:
 +
 +  - settare a '0' il valore della prima locazione della nuova area Basic
 +  - impostare i valori della nuova area Basic al valore delle prima locazione + 1
 +  - dare 'NEW' in Basic, così lo stesso si posiziona correttamente nella nuova area
 +
 +Per la nuova locazione dello Start-of-Basic prendiamo l'attuale + 1024, cioè 4096+1024=5120; per ottenere quanto sopra si procede quindi così:
 +
 +<code>
 +POKE 5120,0
 +POKE 43,1:POKE 44,20:NEW
 +</code> 
 +
 +Infatti 5121=1+20*256.
 +
 +<note tip>
 +Questo consente di avere uno **spazio sufficiente per l'assembly, da $1000 a $13FF**, prima dell'area Basic che va da $1400 a $1DFF, prima a sua volta della memoria video, che inizia a $1E00.
 +</note>
 +
 +Per conferma, si può provare a digitare il seguente programma in BASIC e verificare dove viene memorizzato:
 +
 +<code>
 +1234PRINT"CIAO"
 +</code>
 +
 +e controllare quello che viene memorizzato nel nuovo //Start-of-Basic// a $1400:
 +
 +{{:content:retrocomputing:vic-basic-ram03.png|}}
 +
 +dove:
 +
 +  * '00' è il primo byte a $1400
 +  * '140D' è il //Next line link//
 +  * '04D2' è '1234'
 +  * '99' è il //token// di PRINT
 +  * poi seguono i PETSCII di "CIAO"
 +  * '00' è il termine della riga
 +  * la prossima riga inizia, come da indicazioni sopra (//Next link link//), a '140D'
content/retrocomputing/vice.txt · Last modified: 2023/08/27 15:20 by admin