parada, na commodore 64 jsem si rucne psal assembler a taky jsem freeznul hru a mel jsem nejaky program monitor a ten byl tak dobry, ze dokazal i pole 64 bytu rozbrazit jako sprite a tak jsem nepratelskym potvoram vynuloval pixely takze nedoslo v kodu k detekci kolize a byl to takovy muj zpusob cheatovani hry.
tyjo to je dobrý monitor, neznáš jeho jméno?
(jinak já kdysi - jako úplnej neználek - hledal v RAM obrázky z her. Normálně jsem hru resetl, načel nějakej prohlížeč (už nevím co to bylo) a procházel celou pamětí, jestli tam není vidět rastr. Samozřejmě na Atárku většina her vůbec neběžela v grafickém režimu, takže to byl smolík...).
hmm to bylo něco z tuzemska asi. Podporovalo to tisk na BT100 a ten průchod pamětí (v GR.8) byl IMHO jemnej (i po bajtu). Tyjo mě to snad donutí někde najít přebaly těch starých kazet. Ale to jméno bylo něco ve stylu PRNBT100 nebo tak nějak.
PS: nejlepší bylo, když ta paměť v GR.8 byla někde na nulté stránce nebo naopak na HW registrech - potom se tam daly sledovat například změny časovačů, stisky kláves, posun joysticku atd. (blikalo pár pixelů). Tehdy jsem to chápal jen dost mlhavě, byl to takovej magic box :-)
To o cem mluvim (a uz si fakt nevzpomenu na jmeno) byla v podstate jednoducha vec:
1) nacetla se do pameti
2) prepnula do GR.8
3) clovek potom "listoval" celou pameti a kdyz nasel obrazek, tak to nejak pres SELECT nebo OPTION slo dumpnout na BT100
Pocitalo se s tim, ze pamet prezije soft reset a tedy tam prezijou i obrazky ze hry.
IMHO to vubec nic dalsiho neumelo. Ale je to 40 let nazpet, tak mozna halucinuju
sprity byl tim padem neviditelne a nesly ani strilet, ale mi v te hre slo o to projit vsechny mistnosti, protoze jich byla hromada.
https://www.zx-spectrum.cz/data/maps/map.php?id=Starquake.png
Jak už tu víc lidí psalo, spousta her byla tehdy neobyčejně těžká. Taky jsem si udělal loni radost a naučil jsem se dohrávat kompletní Starquake - sladké vítězství po téměř 40 letech :) Teď už ho umím tak, že si životy naopak uměle umenšuju, začínám s jedním, aby každá chyba znamenala konec...
Ale zajímavější bylo, jak jsem se k tomu vítězství propracoval, protože to souvisí se současným článkem: stroják 6502 je jako jízda na kole, ani po 35 letech se nezapomíná :) Pro mě bylo vždy nejtěžší se ve hře neztratit, takže jsem rozebral jsem kód hry a kam si ukládá jaká data. A pak jsem hrál v emulátoru, abych si mohl na jeho konsoli kdykoli spustit svou "Starquake GPS" - vyrobí velké PNG s mapou hry a puntíkem, kde jsem. Pro zajímavost jsem zkusil i podbarvit jinak místnosti, kde už jsem byl (i to hra eviduje) a polohu jednotlivých předmětů. Ale to všechno byla jen zkouška, co z toho umím "vytáhnout" - hru to zjednodušovalo už moc, tak jsem to pak nepoužíval.
A ano, i pak nastaly těžké chvíle obratnosti a propočtů a jedna z nejtěžších je ten kousek v levém dolním rohu s teleportem "Z.A.P" alias "Zatracená Autorská Pomsta" :) Ale jsou tam i jiné "špeky", ty ale člověka potkají jen jednou za X her, když je důležitý předmět na jednom z obzvláště vypečených míst - a pak mnoho místností normáľně prolítnutých talířkem za pár vteřin se stane peklem s výpočtem každého jednoho dílku "plošinky"...
Integrovanej monitor ve final cartridge III (a klony ala Final Replay, ...) všechno toto umi - ES a EC příkazy. Pak ještě Hesmon, ten uměl pěkně relokovat (N + E). Taky se pěkně prochází pamět přez I, časem si člověk jak metrixu navikne na instrukce ve znakovce a jde docela rozpoznat kód pohledem :)
Freezer ale nikdy pořádně nefungoval, ono dost dobře nejde nastartovat CIA časovaše a podobně, protože nelze jednoduše načíst a na cykl je pustit přesně. Tak půlka her s tím fungovla druhá půlka to "restore" prostě zamrzla.
P.
Pro zajímavost s tím freezerem. Tyhle starosti ataráci nemaj, ale na druhou stranu díky tomu o moc přichází (realtime mrzaření čítačů v VIC dokáže hodně :) Většina efektů potřebuje přesný sync s paprskem - na cykl přesně. A interupt se zpozdí o 0 - 10 cyklů. Klasicke "cmp" s video lajnou to sníží na 0-5, ale pořád k prdu (CMP+BNE). Pak se to dá odčasovat po řádcích - co cykl, to řádek. Ale těch cyklů. Na to není výkon :)
S timerama to stači udělat jednou a už jedou nafurt správně :) A sesyncrhonizovat se lze pak udělat už poměrně snadno self-mod kódem - pro $05e7 jakozto hodnotu timeru:
nmi_code_tb_begin=<$05e7-26-9+1 ; 9 combinations ldx CIA2_TIMER_LO lda nmi_code_tb_offs,x sta *+3 bne * .byte $ea,$25,$a,$10,$05,$a9,$a9,$a9,$ad,$c5,$ea ... code
Tabulka je pak nekde mimo
; page aligned
*= (*+$ff) & $ff00
; NMI stabilizationt table
nmi_code_tb_offs .rep nmi_code_tb_begin
.byte $0a
.endrep
.byte $0a ; wait 2 cycles
.byte $09 ; wait 3 cycles
.byte $08 ; wait 4 cycles
.byte $07 ; wait 5 cycles
.byte $06 ; wait 6 cycles
.byte $05 ; wait 7 cycles
.byte $01 ; wait 8 cycles
.byte $04 ; wait 9 cycles
.byte $00 ; wait 10 cycles
.rep 256-nmi_code_tb_begin-9
.byte $0a
.endrep
Pokud se CIA zpozdí, v cyklech to jde krásně vyčíst. A tenhle úsek za BNE poběží 2 až 10 cyklů... Podle toho kam ho CIA hodí (nejdelší flow je NOP/AND $00/BPL/NOP).
A přesně tohle freezer moc nedává a když jedne použíje i 2 časovače na NMI jako "další" IRQ (mnoho cyklů se ušetří...) tak freezer hitne další NMI ještě dřív než "vypne" to přechozí. A obnovit tohle je prakticky nemožný.
P.
7. 3. 2026, 10:15 editováno autorem komentáře