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
content:retrocomputing:vice [2023/08/25 15:18] – [Hello World] admincontent:retrocomputing:vice [2023/08/27 15:20] (current) – [Apple] admin
Line 41: Line 41:
  
 //RESTORE//: //fn + cursorse su// //RESTORE//: //fn + cursorse su//
 +
 +//Insert//: vedi **[[https://www.lemon64.com/forum/viewtopic.php?t=80996|qui]]**
  
 **Altri tasti** sono disponibili **[[https://github.com/martinpiper/VICE/blob/master/doc/ReadmeMacOSX.txt|qui]]**. **Altri tasti** sono disponibili **[[https://github.com/martinpiper/VICE/blob/master/doc/ReadmeMacOSX.txt|qui]]**.
Line 407: Line 409:
 {{:content:retrocomputing:helloworld03.png|}} {{:content:retrocomputing:helloworld03.png|}}
  
-Poi basta cambiare l'indirizzo della prima locazione di memoria in $110E (dando Return ad ogni riga), per sovrascrivere le locazioni con i codici ASCII in Screen codes:+Poi basta cambiare l'indirizzo della prima locazione di memoria in $1113 (dando Return ad ogni riga), per sovrascrivere le locazioni con i codici ASCII in Screen codes:
  
 {{: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 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.1692969510.txt.gz · Last modified: 2023/08/25 15:18 by admin