Mit rejt a ROM?

A dolog így kezdődik: írunk egy GameBoy játékot, és a fordított cucc tokkal-vonóval kicsit több, mint egy megabyte. Ezt csak kettő megás “kártyára” lehet kiírni, ezért kettő megás kártya lesz belőle — nem gond.

Annak idején az egy felhasználós MS-DOS fejlesztések alatt egy memória foglalás nem szabadította fel ténylegesen a memóriát, hanem az üres részek előtte korábban ott levő memória sodót (zaccot?) tartalmaztak. Esetünkben az 1 mega feletti “üres” rész lehetett ilyesmi.

zeldadx.gif

Az 1998-ban kiadott “Legend of Zelda: Link’s Awakening DX” azon játékok egyike, ami rengeteg ilyen ottfelejtett dolgot tartalmaz, amivel a fejlesztés körülményeibe pillanthatunk be.

Ebből kiderül, hogy milyen fejlesztőkörnyezetet használtak a játék készítésekor, a projekt könyvtárának listája, néhány aktuális kódrészlet, valamint visszafejtett kód is, ami azt valószínűsíti, hogy a játék eredeti 4 színű változatának forrását valahol elhagyták.

Ezt az egészet természetesen nem én találtam ki, csak lefordítottam/értelmeztem/átvettem egy blog post-ot innen. Érdemes elolvasni a konkrétumok miatt.

PS: Zelda DS – Phantom Hourglass igen kellemes darab!

PPS: Azt kell, hogy mondjam, ez a Pagetable.com blog egészen kíváló. Jelenlegi kedvenc passzusom: “In Windows Vista x64, drivers are required to be signed by someone holding a VeriSign code certificate or they won’t load. There is no way to (permanently) disable this signing even if you are Administrator. The F8 startup menu has an option to disable it, but you must select it every time you boot up. Microsoft’s claimed reason for this is that it prevents Trojans from installing kernel-mode rootkits. That is a load of crap.” (itt)

PPS2: Ez is milyen remek már!

if ((variable == 4) || (variable == 6)) { stuff }

Any existing compiler I know of would compile into something like this (eax is variable):

cmp eax, 4
jz label
cmp eax, 6
jz label

That’s a bad way to do it. It should be implemented more like this:

or eax, 2
cmp eax, 6
jz label

8 hozzászólás

karpatx

Watcom C tudott ilyet optimalizálni.
Eccer 1 fél órát kerestük a lassító ciklusunkat az assembly forrásban amikor kiderült, hogy a fordító kompletten kikúrta az egészet :)
(És 320-szal szorzásnál valaki észrevette, hogy 320=256+64 és ez látszott is a lefordított kódon…)

maz

szvsz a vista x64-es dolog nem teljesen hulyeseg. ha valaki ilyet akar csinalni, akkor kell hozza egy verisign certificate – viszont olyat nem akasztasz le a szogrol csak ugy, vagyis visszakeresheto [vagy legalabbis jo kiindulasi pont], h ki is irta…

kodiak

re:PPS

Akkor is, ha ezzel megelozhetned a trojaisitott verziok megjeleneset? Szerintem quality of service mindenekfelett, nem hiszem, hogy akkora ervagas lenne a verisign.

alpi

Ha jól vágom nem csak a Verisign jó hanem minden megbízható kibocsátó, amelyik kibocsátót meg nem ismeri a Windows, annak is lehet telepíteni a root certificate-jét és akkor megy az is. Javítsatok ki ha tévedek.

greg

a memóriában kutakodáshoz amigán nem a mempeek nevű cuccot használták anno? de nem is a mod-okban lévő hangminták bináris rajzolata volt könnyen felismerhető, hanem a kottáé. vmikor a 90-es évek közepén írtam is egy hasonló cuccot pc-re, dos-on… azok voltak a szép idők. mondjuk ma már egy rakás akkori húzás tök értelmetlen, mert pl a loop asm utasítás lassabban futott le már egy Pentium1-en is mint a dec/jz páros… aztán az eredeti 8086-os cisc utasításkészlet gyöngyszemeiről mint LEA, ne is beszéljünk, amivel két regiszter összegét egyetlen utasítással egy harmadikba lehetett tölteni… aztán én vhol a goraud shade-elt háromszögeknél szálltam ki a történetből. :)