[zxspectrum] Re: zx-badaloc hacker edition

  • From: Massimo Raffaele <massimo.raffaele@xxxxxxxxxx>
  • To: zxspectrum@xxxxxxxxxxxxx
  • Date: Mon, 05 Jan 2009 19:19:14 +0100

Ciao Alessandro (alias MITO),
c'è una cosa che mi sfugge ma sicuramente per mia demenza senile prematura: lo scopo è sospendere temporaneamente il loading per poter effettuare un salvataggio della schermata di caricamento?? Ma... non è più pratico salvarlo "a mano" (con utility, Multiface, trucchetti normali o quant'altro) ? Altrimenti non sarebbe possibile intercettare la fine della scrittura degli attributi e lì intervenire? E comunque ci sono alcuni (piuttosto rari) programmi che caricano prima una schermata e poi un'altra, poco prima della fine del caricamento. In quel caso, col tuo sistema, salveresti solo la seconda (o n-sima)... Non è meglio allora qualcosa che "capisca" che è appena stata caricata una schermata e chieda se si vuole salvarla?
Max


On Monday, January 05, 2009 1:15 PM [GMT+1],
Alessandro <alessandro.poppi@xxxxxxxxx> wrote:

Ho appena finito l'editor dell'indirizzo di breakpoint nel firmware
del picoblaze, adesso finalmente provo a prendere qualche snapshot
usando la fine della routine di caricamento come trigger.

Col cazzo. (si puo dire, 'col'?)

Al secondo gioco (Arcadia, Imagine software) sono incappato in una cosa strana: lo snapshot preso mediante NMI su breakpoint a 05E2 non funziona. Funziona invece se preso poco piu` avanti a mano, oppure anche settando il breakpoint all'indirizzo $6001 (che e' quello del 'randomize usr' che si vede nel loader in basic).

Alla fine ho scoperto che il quarto blocco (1=basic, 2=codice macchina, 3=protezione, 4=protezione) carica tre bytes nella variabile FRAMES, che e' quella incrementata ad ogni interrupt. E' probabile che l'arrivo del mio NMI impedisca un qualche incremento, essendo prioritario, per cui scatta la protezione. Il ripristino dello snap utilizza una tecnica un po' complicata per riattivare gli interrupt, perche' ad esempio se il gioco utilizza IM2 e abilito EI (ovviamente stando ancora dentro alla mia bootrom) la routine di servizio potrebbe non essere al suo posto.

Quindi, puo' darsi che in fase di ripristino l'INT non venga servito abbastanza in fretta (o forse fenga servito TROPPO) per cui il conto non torna.

Almeno, questa e' la mia ipotesi non confermata ma plausibile.

Ciao!
(e adesso vediamo quanto ci metto con il terzo gioco) :-)



Other related posts: