Ready64 Forum
Commodore 64 => Programmazione, Grafica e Musica => Topic aperto da: tsm_carmine - 30 Settembre 2006, 09:41:24
-
Ciao, ho bisogno di spostare e/o ridimensionare il basic per fare spazio a una routine in LM lunga non più di 3K.
Ho letto che gli indirizzi di inizio e fine del basic sono contenuti nelle locazioni, rispettivamente, 43/44 e 55/56. Dagli esempi che ho trovato, mi pare di capire che bisogna mettere uno 0 nella locazione da noi scelta come inizio ("bottom") del programma basic: perché?
Mi sembrava di aver letto qualcosa sull'argomento proprio qui nel forum ma non trovo il thread...
Grazie!
--
TSM
-
Te lo spiego con del codice
* = $3000; metterla in una locazione libera da dati e programma basic
basic = $0801
endbasic= $23db; indirizzo del byte successivo al fine programma (3 byte a $00)
topmem = $8000
lda #0 ; Il byte precedente deve essere 0
sta basic-1 ; il "parser" del basic lo controlla
; con lo stesso criterio del terminatore
; di riga, che deve essere 0
ldx #<basic
ldy #>basic
stx $2b ; inizio del programma basic
sty $2c
ldx #<endbasic
ldy #>endbasic
stx $2d ; fine del programma basic
sty $2e ; e inizio spazio variabili e arrays
stx $2f
sty $30
stx $31
sty $32
ldx #<topmem
ldy #>topmem
stx $33 ; fine spazio disponibile al basic
sty $34 ; la variabili temporanee (es: a$=b$+c$)
stx $35 ; verranno create da questo indirizzo in giu'
sty $36 ; fino ad arrivare all'ultimo byte usato dalle var.
stx $37
sty $38
lda #$ea ; protezione dal runstop/restore
sta $0328 ; occhio: e' meglio non metterlo, o ripristinarlo
; al valore di default, prima di effettuare un SAVE
; da programma.
jsr $A659 ; reset del puntatore del basic
jsr $A533 ; relink delle righe
jmp $A7AE ; esegui prossima istruzione (run)
-
Gentilissimo!
--
TSM