Autore Topic: Assembler Questo Sconosciuto  (Letto 10924 volte)

Massi cadenti

  • Utente
  • **
  • Post: 237
    • http://massicadenti.altervista.org
  • Gioco Preferito: The Last Ninja
Assembler Questo Sconosciuto
« Risposta #30 il: 30 Ottobre 2005, 15:57:49 »
Citazione da: "albman"
2) come salvo il mio listato? e il programma assemblato? cioè io lo digito nel monitor, poi esco digitando X, e lancio il mio programma, ma se prima di lanciarlo voglio salvarlo su floppy, per poi caricarlo con il classico load "xyz",8,1  come faccio?
Per questa sono sicuro: hai due modi, principalmente.
Il primo, e più comodo: lo salvi da monitor con (esempio)
S "nome" 08 C000 C031
che salva su floppy (08) la memoria da C000 a C030. Per la cassetta usa 01 invece di 08. [edit: devi aumentare di 1 la locazione, come ha corretto eregil]

Il secondo metodo è salvare da BASIC: ponendo sempre il caso dell'area tra C000 e C030 (decimale 49152-49200) devi settare i puntatori di inizio e fine BASIC (43-44 e 45-46) in questo modo:

A=INT(49152/256):B=(49152-(256*A)):C=INT(49200/256):D=(49152-(256*C))

(READY.)
POKE 43,B:POKE44,A:POKE45,D+1:POKE46,C
[edit: a D va aggiunto 1 per lo stesso motivo di prima, vedi msg sotto di eregil]

(READY.)

[edit: se dovesse spararti un illegal quantity error scrivigli D=0:C=C+1 e ripetigli l'istruzione di sopra]

SAVE "nome",8
oppure
SAVE "nome"
per la cassetta.

Il caricamento dovrà avvenire, naturalmente, con
LOAD "nome",8,1
oppure
LOAD "nome",1,1
rispettivamente per floppy e cassetta.
Come hai già detto ma che è bene ribadire, omettendo il ",1" ci troveremmo un caricamento a partire da 2049 (hex $0801), che nel caso in cui il programma L/M abbia dei "salti" risulterebbe ben poco funzionante. Col ",1" finale diciamo al sistema operativo di caricare il programma dalla locazione in cui l'abbiamo salvato.

Tecnicamente i puntatori sono:
43 --> byte basso dell'inizio dell'area usata dal BASIC.
44 --> byte alto dell'inizio dell'area usata dal BASIC.
ossia la locazione data da (PEEK(44)*256)+PEEK(43)

45 --> byte basso della fine del BASIC e solitamente inizio delle variabili
46 --> byte alto della fine del BASIC e solitamente inizio delle variabili
ossia la locazione data da (PEEK(46)*256)+PEEK(45)

C'è in realtà un metodo migliore che sarebbe quello di iniziare il programma in L/M in una zona vicina all'inizio del BASIC (tipo da 2061 o giù di lì), fare un programma BASIC che abbia una SYS come avviene per il 99% dei giochi.
L'alternativa al rilocare la routine c'è ed è usare un caricamento in due parti. Oppure salvare tutta l'area di memoria da 2049 fino alla fine della routine (ma sarebbe un enorme spreco di spazio).
Ricorda di pokare tre zeri dopo la fine del BASIC "vero" (ossia il programma dopo-run con le eventuali variabili usate) prima di cominciare la routine in L/M.

Esiste in verità un ultimo metodo che consiste nell'usare una cartuccia, ma non differisce molto come concetto dal salvataggio del monitor, inoltre è molto più "sporco" come metodo ;)
Lo so, per tanti è difficile da capire anche se ormai sono 12 anni che lo uso, ma <b>il mio nick ha la "c" <u>minuscola</u></b>...
"Prima volta" nel settembre 1982 (Vic20 di mio cugino)
Utente C16 dal 25 dicembre 1984. Utente C128 dal 24 dicembre 1987
C16(4), C128, Vic20, 1541, 1541-II, 1530(3), 1531(2), X1541, MPS802, CaptainMikyII, Moviola x C64, esp.16KB x C16, ca.1300 cassette, ca.900 floppy, ca.10 joystick, paddles, accessori vari
<a href="http://massicadenti.altervista.org/algasoft.html">La mia pagina sulle Alga Soft, sulle cassette napoletane e su come Napoli ha vissuto a modo tutto suo gli anni d'oro della pirateria</a>
<a href="http://ready64.it/forum/?showtopic=2252#">Massi cadenti non è né un esperto (anche se si millanta tale) né un frequentatore di questo forum</a>
Importante: <a href="http://ready64.massicadenti.com">Ready64 è un sito che <B><U>non</U> è di Massi cadenti</B> ma di Rob Nicoletti</a>

eregil

  • Administrator
  • Utente
  • *****
  • Post: 710
  • Gioco Preferito: Impossible Mission
Assembler Questo Sconosciuto
« Risposta #31 il: 30 Ottobre 2005, 16:31:37 »
 Attenzione che l'indirizzo finale deve sempre essere aumentato di 1 quando salvi! Cioè per esempio se vuoi salvare da 49152 ($C000) a 49576 ($C1A8) come indirizzo finale devi dare 49577 ($C1A9).

Per quanto riguarda l'altra domanda (sull'accumulatore), hai a disposizione altri due registri, X e Y, con le relative istruzioni LDX, LDY, STX, STY. Però questi registri hanno anche funzioni particolari, ad esempio quelle di essere utilizzati come indici in alcuni modi di indirizzamento. Se ti è capitato per esempio di trovare un'istruzione tipo

Codice: [Seleziona]
STA $0400,X
magari ti sarai chiesto: cosa significa? il significato è: memorizza il contenuto di A nella locazione ottenuta incrementando $0400 del valore di X. Se per esempio X è $1A, il valore di A sarà memorizzato in $041A. Questo tipo di indirizzamento si chiama indicizzato.

In soldoni, ci sono limitazioni ai tipi di indirizzamento che puoi utilizzare con ogni istruzione, e a quali indici puoi utilizzare, motivo per il quale la scelta di utilizzare l'accumulatore oppure X o Y non è mai casuale, bensì dettata dalle istruzioni che hai a disposizione, secondo quello che devi fare.

Ad esempio (sebbene stiamo già facendo dei salti in avanti...) esistono le istruzioni LDA ($xx,X) e LDA ($xx),Y ma non LDA ($xx,Y) e LDA ($xx),X.

Il grosso del lavoro lo farai con l'accumulatore, perché X e Y prima o poi ti serviranno come indici, e in quei casi non vorrai metterci dei valori temporanei, per così dire.
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.

albman

  • Utente
  • **
  • Post: 125
  • Gioco Preferito: Wonder Boy / Bubble Bobble
Assembler Questo Sconosciuto
« Risposta #32 il: 31 Ottobre 2005, 13:51:13 »
 Grazie a tutti per le dritte.... adesso ho materiale per sperimentare  2 o 3 giorni!
Appena mi impratichisco un po' con questi nuovi concetti torno a tediarvi con nuove domande....
"If you want to become the old figure, use the power of your friendship, and fight me"

albman

  • Utente
  • **
  • Post: 125
  • Gioco Preferito: Wonder Boy / Bubble Bobble
Assembler Questo Sconosciuto
« Risposta #33 il: 01 Novembre 2005, 09:37:14 »
 Allora... il monitor del CCS64 sembra non gradire il comando S "XYZ" 8 XXXX XXXX o meglio lo accetta e risponde con "OK" ma il mio file su floppy non celo trovo... potrebbe pero' essere un problema dell'emulatore, per cui appena ho un po' di tempo in piu' lo provo sul C64 vero

Nessun problema invece a settare i p untatori dell'area basic, l'operazione esemplice e rapida. Mi sorge pero' un dubbio; tornando al mio listatino per cambiare ciclicamente i colori del bordo che sto allocando da 49152.. io lo digito nel monitor

A C000 LDA #$00
A C002 STA D020
A C005 LDA #$01
A C007 STA D020
A C00A JMP C000
A C00D X

ora io vedo che l'ultima locazione propostami dal monitor è C00D cioè decimale 49165, quindi so che il mio codice occupa sino a 49164 e mi regolo di conseguenza settando i puntatori dell'area basic di conseguenza; mettiamo pero' che sco dal monitor, lancio il mio gioiello, resetto (non ho previsto una fine programma!), e ora voglio sapere fino a dove arriva il mio codice in memoria... cioè io so che parte da 49152, perchè e di li' che ho iniziato ma esiste un modo per trovare la fine? Dei bytes particolari che identifichino l'END del codice? oppure una volta assemblato termina esattamente con il codice dell'ultima istruzione e ciccia?
 
"If you want to become the old figure, use the power of your friendship, and fight me"

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Assembler Questo Sconosciuto
« Risposta #34 il: 01 Novembre 2005, 11:09:15 »
 
Citazione
Allora... il monitor del CCS64 sembra non gradire il comando S "XYZ" 8 XXXX XXXX o meglio lo accetta e risponde con "OK"
:doh:
I programmi di solito sono forniti di manualistica, o quantomeno di file testo da leggere, usiamoli ogni tanto.
Da ccs64.html, capitolo MC Monitor:
Codice: [Seleziona]
S "<filename>" <xxxx> <yyyy>    
Saves memory to binary file (not .prg). Example:
S "Picture" 2000 3F40

SP "<filename>" <xxxx> <yyyy>    
Saves memory to binary program file (.prg). Example:
SP "Demo.prg" 2000 3F40
Citazione
ma il mio file su floppy non celo trovo...
CCSmon salva e carica dalla directory in cui risiede ccs.exe
Citazione
cambiare ciclicamente i colori del bordo
Se l'intenzione era quella, a occhio, il prg non fa quello che ti aspetti :)
Citazione
oppure una volta assemblato termina esattamente con il codice dell'ultima istruzione e ciccia?
si, non viene generato nulla di piu' dei bytes che scrivi come istruzioni.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

albman

  • Utente
  • **
  • Post: 125
  • Gioco Preferito: Wonder Boy / Bubble Bobble
Assembler Questo Sconosciuto
« Risposta #35 il: 01 Novembre 2005, 20:42:35 »
 E' vero, faccio ammenda, il manuale di CCS 64 non l'ho mai consultato :-) , davo per scontato che S lavorasse sull'immagine .D64 attiva in quel momento....

Comunque devo dire che da ieri  ho iniziato a leggere la famosa guida di Marcello, e ci sto trovando la risposta alla maggior parte dei dubbi, per cui cerchero' di non postare piu' domande prima di aver finito di leggere il corso, cosi' da non generare traffico inutile sul forum...

Chissa',  se avessi avuto un simile materiale quando avevo 12-13 anni, quando nel mio paese non c'era nulla di nulla, una libreria specializzata, un amico che utilizzasse il C64 per qualcosa di diverso dal farci girare le cassette legal-pirata delle edicole, magari sarei andato oltre il basic... vabbè cerchero' di prendermi la rivincita adesso! :-)

Per quanto riguarda il mio piccolo programmino mi sembra che funzioni a dovere...

   
LDA #$00 ; carico 0 sull'accumulatore
STA D020 ; lo scarico su D020 (53280)
LDA #$01 ; ora carico 1
STA D020 ; ancora su D020
JMP C000 ; torno a C000 e riparto

a parte l'inutilità completa e l'impossibilità di uscirne funziona, lo giuro!
"If you want to become the old figure, use the power of your friendship, and fight me"

albman

  • Utente
  • **
  • Post: 125
  • Gioco Preferito: Wonder Boy / Bubble Bobble
Assembler Questo Sconosciuto
« Risposta #36 il: 13 Novembre 2005, 08:24:24 »
 ehmmmmm.... scusate...... qualcuno mi dice da dove scarico ASM? io non riesco a trovarlo.....
 :huh:  
"If you want to become the old figure, use the power of your friendship, and fight me"

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Assembler Questo Sconosciuto
« Risposta #37 il: 13 Novembre 2005, 23:51:30 »
 Google non trova niente? :D
Su questo forum sono stati segnalati piu' e piu' volte mi pare, basta rileggersi i vecchi post (e dato che sei un neofita del linguaggio dovresti aver gia' letto per lo meno per imparare qualcosa)
I piu' usati sono C64ASM di Balinth Toth e DASM di Mattew Dillon, quest'ultimo e' comprensivo di sorgenti e quindi, nonostante sia abbandonato da molti anni dall'autore, ne sono nate diverse versioni.
Se vai sul mio sito trovi la mia versione, ho aggiornato anche i docs con le mie modifiche.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

RedPanda

  • Utente
  • **
  • Post: 125
  • Gioco Preferito: Montezuma's Revenge, Terry's Big Adventure
Assembler Questo Sconosciuto
« Risposta #38 il: 19 Dicembre 2005, 12:40:40 »
 Si torna all'assembler del 6510? Mitico!  :metallica:

Io al tempo avevo avuto la fortuna di recuperare un paio di libri sull'argomento, che soddisfarono abbastanza la mia curiosita'... anche se oramai sono arrugginito con la memoria, un mio consiglio a chi vuole riesplorare oggi questo mondo...

Nonostante sembri il contrario, l'Assembler e' semplice da imparare cosi' com'e', in quanto le funzioni sono elementari. PERO' bisogna conoscere ANCHE come funziona l'hardware e software della macchina: ossia sapere dove stanno i vari puntatori, dove inizia e finisce la RAM, dove sta' la ROM, gli indirizzi delle locazioni del SID, VIC... avere una "mappatura" e una descrizione accurata del funzionamento interno della macchina e' essenziale per lavorare in L/M. Quando saprete cosa combina un certo byte in una certa locazione allora vi risultera' tutto MOLTO piu' chiaro. :)
Per le guide e corsi in italiano hanno gia' risposto, tuttavia inviterei a dare un'occhiata anche a guide in inglese: a quel tempo ho trovato che i migliori e piu' precisi libri sull'argomento fossero quelli Inglesi (Americani/Inglesi/Australiani). La mia "bibbia" sull'Assembly e' un libro pubblicato in Australia, accurato quanto compatto, a cui taglierei ancora le mani tutt'oggi a chi oserebbe toccarlo  :hail:

Dite che l'assembly del Commodore e' difficile? Eppure e' una CPU con ancora poche e basilari istruzioni, confrontato con lo Z80 montato sulle macchine concorrenti (lo ZX-Spectrum e Amstrad CPC), quello di istruzioni ne ha almeno 600 e si rumoreggia che non si sa' bene neppure l'effetto completo di alcune di esse... :dotto:  

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Assembler Questo Sconosciuto
« Risposta #39 il: 26 Dicembre 2005, 10:24:58 »
 
Citazione
PERO' bisogna conoscere ANCHE come funziona l'hardware e software della macchina: ossia sapere dove stanno i vari puntatori, dove inizia e finisce la RAM, dove sta' la ROM, gli indirizzi delle locazioni del SID, VIC... avere una "mappatura" e una descrizione accurata del funzionamento interno della macchina e' essenziale per lavorare in L/M.

E' fondamentale per combinare qualcosa di buono con l'assy.

robby

  • Neo-iscritto
  • *
  • Post: 5
    • http://digilander.libero.it/robbix
  • Gioco Preferito: impossible mission
Assembler Questo Sconosciuto
« Risposta #40 il: 28 Dicembre 2005, 02:24:46 »
 
Citazione da: "Alberto"
Citazione
PERO' bisogna conoscere ANCHE come funziona l'hardware e software della macchina: ossia sapere dove stanno i vari puntatori, dove inizia e finisce la RAM, dove sta' la ROM, gli indirizzi delle locazioni del SID, VIC... avere una "mappatura" e una descrizione accurata del funzionamento interno della macchina e' essenziale per lavorare in L/M.

E' fondamentale per combinare qualcosa di buono con l'assy.
Assolutamente vero. Così come è importantissimo avere il disassemblato completo del sistema operativo (Basic e Kernal) per poterne sfruttare le routines. Lo trovate qui:

http://www.tkk.fi/Misc/cbm/docs/c64-diss.html

Se interessa, posso mettere a disposizione lo stesso disassemblato convertito in PDF, sono ca. 700 k e gli hyperlink vengono mantenuti.

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Assembler Questo Sconosciuto
« Risposta #41 il: 29 Dicembre 2005, 00:57:07 »
 
Citazione da: "robby"
Se interessa, posso mettere a disposizione lo stesso disassemblato convertito in PDF
Perdita di tempo, la versione in txt e' piu' che sufficiente.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -