Newsgroup: it.comp.software.emulatori
Titolo: [C64] Curiosita'...mi sono sempre chiesto...

Quei giochi in cui bastava fare un soft reset, mettere dei poke per
vite/energie infinite, e poi un sys per ripartire, vuol dire che erano
ancora in memoria...
Quindi non occupavano tutti i 64k?
-- 
<img src="
http://space.virgilio.it/ocicale/Fak4.jpg
">

Quindi non occupavano tutti i 64k?
Non capisco molto il nesso con l'affermazione precedente, comunque non
tutti i 64k erano disponibili per i programmi: per i programmi basic
l'area disponibile era da $0800 a $9fff, i famosi 38911 bytes free del
prompt iniziale, mentre in linguaggio macchina si poteva giocare di
piu' utilizzando anche altre aree, tipo quella da $c000 in poi, il
"sys 49152" tipico dei vecchi monitor in lm. Nei 64k ci stavano anche
tutti i puntatori, la memoria video, i buffer, l' input/output ecc.
-- 
::_Anx _::::: 
"Siate sognatori ma solo per una parte del vostro tempo, dovrete sognare
 e poi lavorare per rendere realta' i vostri sogni." (Nolan Bushnell)

tutti i puntatori, la memoria video, i buffer, l' input/output ecc.
Sì, infatti modificando la locazione 1 si potevano assegnare ai
programmi tutte le aree che si volevano, tranne l'OS. Se non ricordo
male il massimo assegnabile era 54 o 56 k..
E volendo si poteva usare anche la memoria schermo (ad esempio per
programmi che dumpassero su floppy tutta la RAM da $0700 o giù di lì
fino a $FFFF.
-- 
Jan AxHell

piu' utilizzando anche altre aree, tipo quella da $c000 in poi
Appunto dicevo...un programma in linguaggio macchina che occupi quelle
aree subisce un soft reset: che succede dopo?


aree subisce un soft reset: che succede dopo?
Che č ancora lě. L'unica cosa che si "perde" č il token che rende
attiva l'eventuale riga di comando basic, tipo 10 SYS 2064.
Dovrebbe essere la locazione $0801, ma basta che dai un'occhiata alla
ram con un monitor e vedi subito che SYS ti serve e la puoi lanciare
al volo.
Raramente mi č capitato che resettando non fossi in grado di far
ripartire un programma. Per perdere tutto bisogna proprio spegnere il
C64.
-- 
Jan AxHell

C64.
Gia`.
E` molto curioso invece quello che accade con un C128 continuando a passare
dal modo 64 al modo 128. In particolare coi programmi che su C64
disabilitavano il reset della macchina (Barbarian 2 ad esempio).
Su un C64 vero, per un soft reset con quei programmi l'unica era avere una
cartuccia che facesse un reset modificato, che saltasse le routine di
controllo della cartuccia (e quindi la routine antireset del gioco).
Scusate se come al solito ho divagato, ma ste questioni tecniche mi
piacciono un casino ;)
-- 
 $B%^%C%7!!%+%G%s%F%# (B - E-mail massi.cadenti(at)
tiscali.it
 <-- NEW
Mastro di chiavi della GHOULS
Obiettore di coscienza ufficiale della BOBBLE
Dittatore del gruppo di fansub IBC-CIF (Rebirth)

 C64.
Al volo mi vengono in mente Arkanoid II e Mega-apocalypse, parte del
codice e' nella zona video ($0400-$07e8), se resetti perdi questa parte
e il gioco non puo' piu' ripartire. Me li ricordo perche' faticai a
trovare un compattatore che facesse tutta la ram, quelli "normali"
partono tutti da $0800.
-- 
-=[]=---iAN CooG---=[]=-
Backup not found: (A)bort (R)etry (P)anic

 attiva l'eventuale riga di comando basic, tipo 10 SYS 2064.
POKE2050,1:SYS42291 (*)
et voila'.
se il  programma e' in basic o cmq su piu' righe e' meglio completarla
riassegnando i puntatori di fine prg Basic
POKE 2050,1:SYS42291:POKE45,PEEK(34):POKE46,PEEK(35):CLR:RESTORE
(*)
un metodo piu' semplice per chi non ricorda la sys a memoria e'
POKE2050,1
1
dopo aver battuto invio sulla riga con solo il numero di linea, il basic
chiama da solo la routine (sys42291) per il "rechain" delle linee basic.
-- 
-=[]=---iAN CooG---=[]=-
Hey Bill, it's cold herein! Close the Windows!

 POKE 2050,1:SYS42291:POKE45,PEEK(34):POKE46,PEEK(35):CLR:RESTORE
La memoria vacilla e infatti cosi' non va molto bene.
POKE 2050,1:SYS42291:POKE45,PEEK(35):POKE46,PEEK(781)+2:CLR:RESTORE
-- 
-=[]=---iAN CooG---=[]=-
Drop your carrier ... we have you surrounded!

POKE 2050,1:SYS42291:POKE45,PEEK(35):POKE46,PEEK(781)+2:CLR:RESTORE
E meno male che vacilla! :)
-- 
Jan AxHell

POKE 2050,1:SYS42291:POKE45,PEEK(35):POKE46,PEEK(781)+2:CLR:RESTORE
Infatti quella "buona" era quella sopra ;) O almeno a me ha sempre
funzionato quella. Il RESTORE alla fine probabilmente e` inutile.
-- 
マッシ　カデンティ - E-mail massi.cadenti(at)
tiscali.it
 <-- NEW


 Il RESTORE alla fine probabilmente e` inutile.
Credo anche io. Bisognegrebbe vedere il vecchio articolo su CCC dove
veniva spiegato questo oneliner, di solito spiegavano anche il perche'
dei vari comandi.
-- 
-=[]=---iAN CooG---=[]=-
I'm thinking of a number between one and 7000000000. Try to guess it.

 E meno male che vacilla! :)
Vacilla, vacilla. Ho invertito i puntatori -_-
POKE 2050,1:SYS42291:POKE46,PEEK(35):POKE45,PEEK(781)+2:CLR
-- 
-=[]=---iAN CooG---=[]=-
Mio nonno era cosi' duro che sulla tomba volle scrivere "CAZZO GUARDI?"

POKE 2050,1:SYS42291:POKE46,PEEK(35):POKE45,PEEK(781)+2:CLR
Hehe, io facevo molto prima: salvavo tutta la ram (prima di avviare un
gioco che volevo estrarre da cassetta, azzeravo tutta la ram con un
paio di righe ASM che mi ero scritto) tenendo conto della sys di avvio
e poi comprimevo con Timecrunch :)
Dato che le parti inutilizzate di ram erano 00, ottenevo il massimo
della comprssione possibile. Più che altro usavo POKE 2048,99 per
segare l'autorun ai giochi, così non dovevo neppure resettare o tenere
premuto break.
-- 
Jan AxHell

premuto break.
Stai parlando dei giochi da edicola probabilmente.
Purtroppo gli altri erano ben più rognosi: bisognava resettare e
cominciare a cercarsi lo startaddress a manina, almeno fino a che non
uscirono le cartuccie un pò decenti (all'epoca avevo il freeze frame,
una schifezza che tirava -se non erro- 5 files+boot su disco.. che
occupavano uno spazio enorme).
Comunque avevo un mio metodo che funzionava al 70%: constatando che
buona parte dei programmi avevano lo startaddress che cominciava con
una disattivazione dell'interrupt, cercavo l'istruzione in tutta la
memoria, e si mi tirava fuori risultati interessanti (che so... $8000
o simili) provavo così alla cieca :-) Maccheronico ma spesso efficace.
-- 
Regards LaZ
.·´¯`·.¸.·´¯`·.¸ ><((((º> ....... <º))))>< .·´¯`·.¸.·´¯`·.¸
Mi riservo, con fermezza, il diritto di contraddirmi. (Paul Claudel) 
.·´¯`·.¸.·´¯`·.¸ ><((((º> ....... <º))))>< .·´¯`·.¸.·´¯`·.¸

 Hehe, io facevo molto prima: salvavo tutta la ram (prima di avviare un
E' giusto quello che dici ed e' il metodo piu' "normale" di operare
(cioe' salvare la ram prima che il gioco venga avviato), ma e' un'altra
cosa, io parlavo solo di come recuperare un prg basic dopo il reset.
-- 
-=[]=---iAN CooG---=[]=-
Unable to locate Coffee -- Operator Halted!

 premuto break.
A proposito: se il programma non iniziava con una linea basic ma veniva
eseguita una JMP dal loader, questo trucco non funzionava, giusto?
Cioe', e' applicabile solo se l'autorun consiste in un comando RUN
basic, che in questo caso si blocca con un ?SYNTAX ERROR.
-- 
-=[]=---iAN CooG---=[]=-
Format a disk, move the mouse: multitasking.

 Dim X(7777):NEW
troppo poco, lavora solo fino a $9fff o meno, bisogna pulire anche da
$a000 a $ffff, e puoi farlo solo da asm.
-- 
-=[]=---iAN CooG---=[]=-
Who is General Failure and why is he reading my disk?

basic, che in questo caso si blocca con un ?SYNTAX ERROR.
Esatto.
-- 
Jan AxHell

$a000 a $ffff, e puoi farlo solo da asm.
Ancora esatto. La famosa locazione 1.
-- 
Jan AxHell

o simili) provavo cosě alla cieca :-) Maccheronico ma spesso efficace.
Infatti, il famoso op "SEI". Hackeravo anche programmi piů incazzati
di quelli delle edicole, ma si parlava di cose semplici :)
-- 
Jan AxHell

 Ancora esatto. La famosa locazione 1.
Gia' che ci siamo, se a qualcuno puo' servire questo e' il mio
programmillo per la pulizia, scritto nell'88 e ottimizzato di BEN 5
bytes stasera ^_^
l'ho compilato con C64ASM di Bálint Tóth
----8<--------8<--------8<--------8<--------8<--------8<--------8<----
;Pulizia della memoria (c)1988~2003 IAN*7102/TWT (aka iAN CooG)
;completamente rilocabile; default nella screen ram (SYS1024)
;vers. ottimizzata, 34 bytes
*=$0400
        SEI
        LDA #$34
        STA $01
        LDA #$00
        LDX #$08
        STA $9E
        STX $9F
        TAY
loop    STA ($9E),Y
        INY
        BNE loop
        INC $9F
        LDX $9F
        BNE loop
        LDA #$37
        STA $01
        JMP $FCE2
----8<--------8<--------8<--------8<--------8<--------8<--------8<----
-- 
-=[]=---iAN CooG---=[]=-
Fate l'amore, non i virus...

premuto break.
O usare il trucco delle chioccioline.
-- 
 $B%^%C%7!!%+%G%s%F%# (B - E-mail massi.cadenti(at)
tiscali.it
 <-- NEW


        TAY
Sì, più o meno come facevo io... ma TAY cos'è? O non me lo ricordo, o
non l'ho mai usato.. E la locazione del JMP cosa fa, torna all'OS?
Io mi ricordavo $EA31.. Ma forse era il ritorno da interrupt.. Boh.
-- 
Jan AxHell

O usare il trucco delle chioccioline.
Ah sě, č vero, c'era anche quel metodo ancor piů empirico :)
-- 
Jan AxHell

$a000 a $ffff, e puoi farlo solo da asm.
ahhh vero ci son cascato di nuovo ^__^
E' che con i primi giochi era + che sufficiente, successivamente utilizzavo
una (strana) cartuccia dotata di monitor che aveva questa frunzionalità
implementata (era comoda.. molto + veloce del fill. NB non era la action
replay).


E la locazione del JMP cosa fa, torna all'OS?
Prova a convertirlo in decimale, probabilmente ti ricorda qualcosa  ;-)


Prova a convertirlo in decimale, probabilmente ti ricorda qualcosa  ;-)
Hehe, era tardi, sys 64738. Però non capisco la necessità di
resettare.
-- 
Jan AxHell

resettare.
Completa l'opera, probabilmente.


Ah sě, č vero, c'era anche quel metodo ancor piů empirico :)
Ha funzionato finche` qualcuno invece di "run" o "rU" comincio` a mettere
"rU:". Con quelli funzionava solo il sistema del run/stop (o la poke che
hai detto)


Completa l'opera, probabilmente.
Boh, secondo me non serve a niente, io non resettavo mai dopo
l'azzeramento della memoria.
-- 
Jan AxHell

 Io mi ricordavo $EA31.. Ma forse era il ritorno da interrupt.. Boh.
Quasi esatto, e' la routine standard di interrupt, puntata dal vettore
$0314/5. Bisogna fare una JMP $EA31 quando ci si vuole infilare nel
normale processo di interrupt, dopoa aver eseguito la propria routine.
-- 
-=[]=---iAN CooG---=[]=-
No honey, it's only a computer, PLEASE put down the gun..

 Decisamente i registri li usavo poco...
?_? cioe' usavi solo A? Impossibile, a meno di giri pazzeschi di PHA e
PLA
-- 
-=[]=---iAN CooG---=[]=-
L'uovo ha una forma perfetta, benche' fatto col culo.

 l'azzeramento della memoria.
Il reset garantisce l'azzeramento della pagina zero e dei vari buffers
sotto $0800 (stack, tape buffer, registri sprites). Mica tutti i prg
vengono caricati da $801 in poi, ne? ^_- Mi e' capitato piu' volte di
trovare prg che lasciavano parte del codice da $0100 o $0300 e freezando
solo da $800 non bastava, perche' veniva prima o poi eseguito anche
codice in quei buffers.
L'unica era salvare i buffers in files a parte, trovare spazi vuoti nel
prg (spesso solo dopo $f000) e infilarceli, scrivere una routinetta di
rilocazione da far partire prima della JMP effettiva del prg.
-- 
-=[]=---iAN CooG---=[]=-
I will use Google before asking dumb questions
I will use Google before asking dumb questions
I will use Google before asking dumb questions
...

PLA
E' solo che non pratico da almeno 10 anni... :/
-- 
Jan AxHell

rilocazione da far partire prima della JMP effettiva del prg.
In quesi casi rarissimi mi pare che cmq la parte altissima della ram
non fosse usata, ed avevo un prog che si installava lā e dumpava tutto
da $0000 a $F7FF o gių di lė.
Per quelli che partivano poco dopo la memoria schermo avevo un prog
che appunto si installava a $0400 e dumpava circa da $0500 a $FFFF.
Sento le briciole di ruggine che si sgretolano tra gli ingranaggi del
mio cervello :)
-- 
Jan AxHell

 mio cervello :)
Ho appena aggiornato il mio sito con un po' della mia vecchia roba,
cosi' per amarcord.
http://digilander.libero.it/iANCooG/TWT/C64/twt_c64.htm
-- 
-=[]=---iAN CooG---=[]=-
Line noise? What fh=.hElL is.LinS nfise?

 E' solo che non pratico da almeno 10 anni... :/
Io (stranamente) mi ricordo abbastanza bene, anche se non ho piu' il c64
dal '92. E dire che a volte non mi ricordo cosa ho mangiato il giorno
prima o_O
Ci avro' passato troppo tempo attaccato? 8)
-- 
-=[]=---iAN CooG---=[]=-
A feature is a bug with seniority.


http://digilander.libero.it/iANCooG/TWT/C64/twt_c64.htm
Bello, però riesco a visualizzarlo correttamente solo con Mozilla. IE6
"schiaccia" tra loro le righe...
-- 
Jan AxHell

Ci avro' passato troppo tempo attaccato? 8)
Io ci ho passato anni sopra, ma dal '90 al '95 non ho toccato un
computer e sono ripartito da Win95/DOS. Sono stato totalmente
autodidatta, quindi ignoro qualunque pratica "ufficiale" di
programmazione. Avevo solo una mappa di memoria di C64 con le
descrizioni degli indirizzi e degli opcodes. Per il resto era tutto
reverse-engineering. Inoltre non ho mai più studiato altri linguaggi,
quindi non ragiono da programmatore da allora. E poi adesso è tutto
diverso...
-- 
Jan AxHell

 IE6 "schiaccia" tra loro le righe...
Bene, sono riuscito a fare un sito che non va con IE. Mettero' un avviso
"questo sito e' ottimizzato per qualunque browser TRANNE che per IE".
^_-
Cmq con Opera 6/7 si vede, phoenix pure. Tu mi dici che con Mozilla e'
Ok. Mi basta.
-- 
-=[]=---iAN CooG---=[]=-
Not tonight, dear.  I have a modem.

 
http://digilander.libero.it/iANCooG/TWT/C64/twt_c64.htm
Molto interessante!
Mi sono permesso di comunicare l'url della pagina a Mason, noto
collezionista.
Rob

 collezionista.
Fai pure, le nostre releases, che venivano distribuite a mano nei vari
licei e scuole dei dintorni, non credo siano mai uscite dalla provincia
di Novara, e per mano mia, Locarno (sfizzera).
-- 
-=[]=---iAN CooG---=[]=-
Boost the performance of your PC: DEL C:\WINDOWS

Interesting! Ce li hai mica ancora da qualche parte?
C'era il programma DSAVE (non l'omonimo comando del BASIC dal 3.5 in poi)
che serviva appunto a salvare su disco il contenuto della memoria.
Questo programma risiedeva nella memoria video ed erano 3 linee di schermo
(anzi 2, la terza diceva semplicemente "DSAVE CARICATO").
Se hai i 3 .d64 "COPY 100%" che postai molto tempo fa su IBE, sicuramente
c'e`. C'era anche DSAVE V2 che era un po' meno ostico.
Erano allegati alle cassette della rivista "Radio Elettronica & Computer".


 di Novara, e per mano mia, Locarno (sfizzera).
va bene grazie, gli ho già scritto
e ora vedrai che grazie alla potenza di internet le tue release arriveranno
fino a... Lucerna :)

 arriveranno fino a... Lucerna :)
LOL! magari anche Lugano 8P
-- 
-=[]=---iAN CooG---=[]=-


 Computer".
Bei tempi ;-)
-- 
-=[]=---iAN CooG---=[]=-
* Fatal error : Mac user detected ! IDIOT MODE ON.

 Mi basta.
Finalmente!!! Erano anni che aspettavo una cosa simile... :-)
-- 
 Ciao, Bianco.                         Reply to luca.bianco (at) 
tiscali.it
|--------[Powered by Debian GNU/Linux Sarge - 2.4.19 - AMD K6-200]--------|
|------------[Linux Registered User #287769 - Machine #169192]------------|