content:retrocomputing:assembly
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
content:retrocomputing:assembly [2024/07/14 11:31] – [Indirizzamento Indirect, Indexed] admin | content:retrocomputing:assembly [2024/09/10 21:27] (current) – [Sintassi] admin | ||
---|---|---|---|
Line 217: | Line 217: | ||
Le righe $0345 e $0347 possono essere spiegate così: **CPX** (//' | Le righe $0345 e $0347 possono essere spiegate così: **CPX** (//' | ||
+ | |||
+ | Il //branch// è sempre // | ||
Il **//flag Carry//**, oltre che dalle operazioni aritmetiche, | Il **//flag Carry//**, oltre che dalle operazioni aritmetiche, | ||
Line 642: | Line 644: | ||
==== Indirizzamento Indirect, Indexed ==== | ==== Indirizzamento Indirect, Indexed ==== | ||
- | L' | + | L' |
+ | Il problema è che la //Zero Page// è preziosa e ci sono pochissimi indirizzi che possono essere usati senza problemi, ad es. il range da $FC a $FF, che consente l' | ||
- | Un limite di questo tipo di indirizzamento è che **l'//indirect address// (quello specificato tra parentesi) deve risiedere nell' | + | Di seguito un esempio |
- | + | ||
- | Ad es. la seguente istruzione: | + | |
< | < | ||
- | LDA ($C0),Y | + | .C: |
- | </ | + | .C: |
+ | .C: | ||
+ | .C: | ||
+ | .C: | ||
+ | .C: | ||
+ | .C: | ||
+ | .C: | ||
+ | .C: | ||
+ | .C: | ||
+ | .C: | ||
+ | .C: | ||
+ | .C: | ||
+ | </ | ||
- | prevede $C0 come //indirect address//, quindi obbligatoriamente nella //Zero Page//. Poi, vengono caricati dei valori nell'// | + | <note tip> |
+ | Il metodo di indirizzamento di tipo **//Indirect, Indexed//** consente di raggiungere/modificare tutte le locazioni di memoria perché consente di incrementare il MSB e, tramite il registro Y, il LSB; così facendo si raggiungono 256x256=65536 locazioni di memoria, cioè 64K. | ||
+ | </note> | ||
- | C:$033e) >c:00c0 11 22 | + | In realtà le locazioni della //screen RAM// sono solo 1000, quindi il codice sopra non è ottimizzato, |
- | + | ||
- | A questo indirizzo di destinazione ($2211) viene aggiunto il valore del registro Y; | + | {{: |
+ | |||
+ | {{: | ||
==== Start & End of Basic ==== | ==== Start & End of Basic ==== | ||
Line 702: | Line 719: | ||
Quindi, nella posizione $801 viene inserito il programma 10 SYS2064, che quindi rimanderà alla locazione 2064 ($810), dove sarà presente il codice //main://. | Quindi, nella posizione $801 viene inserito il programma 10 SYS2064, che quindi rimanderà alla locazione 2064 ($810), dove sarà presente il codice //main://. | ||
+ | ===== Turbo Macro Pro ===== | ||
+ | |||
+ | **Turbo Macro Pro (TMP)** è un altro assembler/ | ||
+ | |||
+ | ==== Avvio ==== | ||
+ | |||
+ | * effettuare un //Attach// del disco .d64 scaricato sopra | ||
+ | * dare LOAD " | ||
+ | * dare LOAD "TMP ...non REU", | ||
+ | * eseguirlo con SYS 32768 | ||
+ | |||
+ | TMP si avvierà: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ==== Sintassi ==== | ||
+ | |||
+ | Sembra sia fondamentale che, in questa versione, i comandi siano scritti in **minuscolo**, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Per **assemblare** si usa la "< | ||
+ | |||
+ | {{: | ||
+ | |||
+ | e poi " | ||
+ | |||
+ | Nel caso specifico si esegue il programma con 'SYS 4096' (che è pari a $1000) per ottenere: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Per ritornare all' | ||
+ | SYS 32768 | ||
===== VIC 20 ===== | ===== VIC 20 ===== | ||
content/retrocomputing/assembly.1720949495.txt.gz · Last modified: 2024/07/14 11:31 by admin