Autore Topic: Estendere La Memoria Dedicata Ai Programmi Basic  (Letto 3604 volte)

Jupiter

  • Newbie
  • *
  • Post: 3
  • Gioco Preferito: Mission impossible
Estendere La Memoria Dedicata Ai Programmi Basic
« il: 01 Dicembre 2008, 19:38:16 »
 Buonasera

stavo leggendo alcuni documenti che ho trovato sul vostro sito (complimenti allo Staff per il lavoro) e volevo una delucidazione in merito a due comandi che a prima vista dovrebbero svolgere il medesimo compito

POKE(16384 – 1 ), 0:NEW

POKE 44,64:POKE 64*256,0:NEW

questi comandi li ho presi in prestito da due fonti diverse, ma in entrambe le fonti indicano che è possibile modificare l'area ram per accogliere i programmi basic alla locazione di esempio 16383, in quanto l'interprete basic punta una locazione prima dell'effettivo inizio area con un byte a 00000000

un'altra formula magica che ho trovato è

HB = INT(inizio / 256)  <-- high byte
LB = inizio – HB * 256 <-- low byte
POKE 43,LB : POKE 44,HB

smanettando con la colcolatrice scientifica di windows ho visto che un altro metodo
potrebbe essere quello di convertire una locazione a 16 bit da decimale in binario e dividendo in due parti il tutto riconvertendo in decimale ecco che trovo il LB e HB da mettere nelle suddette locazioni...

tra i metodi illustrati, qual'e' il più pratico?
Ci sono differenze sostanziali tra i comandi che ho postato?
many thanks
 

mces

  • Utente
  • **
  • Post: 339
  • Gioco Preferito: fort apocalypse
Estendere La Memoria Dedicata Ai Programmi Basic
« Risposta #1 il: 02 Dicembre 2008, 07:56:38 »
 Intanto ti dico per la conversione in HB e LB, io uso prendere il numero dividerlo per 256, la parte intera è HB.
A questo punto sottraggo la parte intera (rimane il "dopovirgola") e rimoltiplico per 256, quello che leggi è LB.

Mi sembra un algoritmo pratico e veloce....

Altra storia sarebbe già "pensare" in binario/esadecimale, ma non si può pretendere tutto!
Non esistono problemi, solo soluzioni.

eregil

  • Administrator
  • Utente
  • *****
  • Post: 714
  • Gioco Preferito: Impossible Mission
Estendere La Memoria Dedicata Ai Programmi Basic
« Risposta #2 il: 02 Dicembre 2008, 10:18:31 »
 Per chi desidera approfondire l'argomento della memoria del BASIC e del suo utilizzo da parte dell'interprete, segnalo che una trattazione che trovo molto buona si trova sugli inserti pubblicati su CCC numero 43 e 44, scaricabili dalla Sezione CCC (gli inserti sono i file che hanno per nome i01, i02, ecc.).
 
Non rispondo a richieste private, di qualunque genere esse siano.
Per domande tecniche leggete le FAQ e usate l'apposito forum.
Per questioni amministrative contattate lo staff tramite il form Contatti sul sito.

mces

  • Utente
  • **
  • Post: 339
  • Gioco Preferito: fort apocalypse
Estendere La Memoria Dedicata Ai Programmi Basic
« Risposta #3 il: 02 Dicembre 2008, 11:49:25 »
 Grazie Eregil, mi hai fatto scoprire un'interessante trattazione!

A Jupiter consiglio quindi di leggere su CCC N'43 il file i05 dove si chiarisce univocamente il modo d'uso del puntatore ed il mistero del "byte precedente".

http://ready64.org/ccc/44/i05.jpg

dunque, all'inizio dell'area RAM del basic va posto un byte con valore zero, ed il vettore del basic viene fatto puntare al byte successivo.....

in 2048 troveremo quindi $00 e nel vettore 43-44 troveremo un puntatore a 2049,
non è possibile mettere il puntatore a 2048 e zero in 2047 perchè 2047 (dove risiede un puntatore sprite) è fuori dall'area basic, dico bene?
Non esistono problemi, solo soluzioni.

Jupiter

  • Newbie
  • *
  • Post: 3
  • Gioco Preferito: Mission impossible
Estendere La Memoria Dedicata Ai Programmi Basic
« Risposta #4 il: 02 Dicembre 2008, 19:42:46 »
 Grazie per le vostre risposte

inizio subito a leggere i documenti che mi avete indicato.

P.s. a parte il basic perchè è così importante conoscere l'ASM per sfruttare al meglio il C64?

tra le tante ho visto che fra i libri pubblicati sul vostro sito appare uno dedicato al processore 6502, e su un sito straniero ho trovato addirittura un emulatore per questo processore.

Da quel po' che ho letto, si può studiare il 6502 ed utilizzare cio' che si è imparato anche sul 6510, ma la mia ignoranza è tale, che non riesco a capire come si puo' studiare un processore come il 6502 magari utilizzando il suo emulatore dedicato, se poi questo processore rispetto al 6510 non è inserito in un contesto con RAM,VIC,SID,ROM CARATTERi etc...

Mentre appunto il 6510 puo' interagire con tutti questi componenti hardware che poi sono parti fondamentali del C64.

Buon lavoro e ancora grazie per le vostre risposte

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Estendere La Memoria Dedicata Ai Programmi Basic
« Risposta #5 il: 02 Dicembre 2008, 20:14:16 »
Citazione da: "mces"
in 2048 troveremo quindi $00 e nel vettore 43-44 troveremo un puntatore a 2049,
non è possibile mettere il puntatore a 2048 e zero in 2047 perchè 2047 (dove risiede un puntatore sprite) è fuori dall'area basic, dico bene?
Basta che non usi sprites e puoi, prova tranquillamente.
Codice: [Seleziona]
poke44,8:poke43,0:poke2047,0:new
Puoi anche far partire il basic a $400 e perche' no, a $334 (prima del tape buffer non si puo' perche' ci sono i vettori necessari al kernal), basta spostare lo schermo altrove. I puntatori degli sprite sono esattamente alla fine del blocco da 1kb in cui e' contenuto lo schermo. Per maggiori info ovviamente confrontare Mapping the 64 o simili dox.

648           $288           HIBASE
Top Page of Screen Memory
 
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Jupiter

  • Newbie
  • *
  • Post: 3
  • Gioco Preferito: Mission impossible
Estendere La Memoria Dedicata Ai Programmi Basic
« Risposta #6 il: 03 Dicembre 2008, 17:53:27 »
 ho inizato a leggere, ma vorrei verificare se sono sulla buona strada....


CONCETTO DI 'PAGINA' (RAM divisa in 256 pagine da 256 byte l'una)

prendiamo i puntatori 55 e 56 , ultimo byte utilizzato dal basic (C64 appena acceso)

moltiplicando quindi il puntatore maggiore per 256 (56*256), se non erro ottengo l'indirizzo iniziale della cosidetta "pagina" (256 pagine numerate da 0-255)

il valore che contiene la locazione dell'esempio ' 56 ' se fosse 125, allora moltiplicheremmo 125*256 pagine, quindi sarebbe come dire 125 byte per 256 volte...?

Otterremmo l' indirizzo 32000, questa lo dovrei intendere come l'inizio della pagina che ho selezionato fra le 256 disponibili giusto?

Se è cosi' è ho compreso il filo.... la locazione più piccola del puntatore, in tal caso la 55 col suo valore da 8 bit, selezionerebbe invece un particolare byte della "pagina" posta a 32000, e quindi potrei selezionare dal byte 0 al byte 255...della suddetta 'pagina' puntata attualmente.

Ho afferrato?

grazie e scusate se nel 2008 dovete rispondere a domande che vi facevate a 13 anni
 

mces

  • Utente
  • **
  • Post: 339
  • Gioco Preferito: fort apocalypse
Estendere La Memoria Dedicata Ai Programmi Basic
« Risposta #7 il: 16 Dicembre 2008, 10:12:45 »
 Il concetto di pagina sul  :c64: 64 è poco più di una convenzione...
Ricorda che gli indirizzi sono tutti espressi a 16 bit (da 0 a 65535: 65536 locazioni, ciè 64KB) ma l'architettura (anche dei dati) è a 8 bit, quindi i 16bit necessari all'indirizzamento vengono spezzati in due parole contigue chiamate MSB (most significant byte: byte più significativo, quindi di "peso" più alto) e LSB (least significant byte: byte meno significativo, quindi di "peso" più basso).
Viste anche alcune caratteristiche hardware/software del  :c64: 64 e del suo processore si applica la convenzione di dire che nell'indirizzo di 16bit (MSB unito a LSB) la parte alta (MSB) indica 1 delle 256 frazioni di memoria totale indirizzabile chiamata "pagina" (65536/256=256) mentre l'LSB indica all'interno di detta pagina quale dei 256 elementi è indirizzato.

Il concetto di "paginazione" sui computer è normalmente un'altra storia e serve per espandere oltre l'indirizzabile la memoria fisica utilizzabile, è una tecnica probabilmente usata anche nelle spansioni di memoria del  :c64: 64 ma nulla ha a che fare con la formattazione di un indirizzo a 16 bit, questo per dirti di stare attento a cercare sulla rete il concetto di "pagina", difficilmente troverai quello SPECIFICO del  :c64: 64 e del processore 6510 che ti ho esposto sopra.

Il 6510 ad es. ha istruzioni specifiche in "pagina zero" che di conseguenza NON richiedono la definizione di un MSB (in quanto è IMPLICITO che esso sia zero...) abbreviando di un byte un'istruzione in linguaggio macchina, il che vuol dire che quel byte (non essendoci) non sarà letto dalla memoria quando il processore "carica" l'istruzione dalla memoria alla CPU, quindi avvengono delle "economie" di tempi nel processore.
In soldoni le istruzioni di "pagina zero" sono le più veloci che il processore possa eseguire.
Non esistono problemi, solo soluzioni.