Végleges változat, csak windows alá, directx8-cal: final.zip [822 858]
Korábbi eresztések:
download
Egy kis mese a programról:
A vezérlőprogram teljes egészében assemblyben (gépikód) íródott, a netwide assembler
fordította. Nehézsége volt a dolognak, hogy mozgó alkatrész nélkül szerettem
volna építeni az egészet, tehát winchester vagy floppy meghajtó szóba sem jöhetett
(végül persze szóbaljött, de aztán mégsem). Így tehát operációs rendszerre sem
támaszkodhatott a software, de nem is volt rá szükség. Először úgy gondoltam,
hogy az alaplapi BIOS romot cserélem ki a saját programomra. Ez eleinte nem
akart működni, mint utóbb kiderült azért, mert egy pentium számítógépben próbálkoztam,
de egy 386-osban működött. Később viszont úgy alakult, hogy egy 386-os sebessége
nem elegendő, és egy 486DX4-100-ast szereztem (köszönet érte Rossu Tamásnak).
Viszont abban sem működött a bios cseréje. Ennek oka szerintem az, hogy a PCI
busszal épített alaplapok vezérlőáramköreit (két SSI ic általában) valahogyan
inicializálni kell, mielőtt visszafelé kompatibilissé válnának, tehát mielőtt
az ISA bushoz hozzá lehetne férni a klasszikus módon. Ennek megoldására első
gondolatom az volt (illetve a bátyámé), hogy ethernet nicbe (hálókártyába) tegyek
romot, amit a bios el fog indítani. Ez sehogysem sikerült, nem is volt dokumentálva
az egész. Utána pedig arra gondoltam, hogy a videokártya biosa biztosan lefut.
Ez sem sikerült elsőre, amire figyelni kellett: az ellenőrzőösszeg byte-ra nulla
kell legyen, illetve a rom első három byteja előírt, a belépési pont a negyedik
byte (ez a bochs rombios.c-jében is megtalálható). A vezérlőprogram viszont
nem fért el az alkalmas videokártya 24kilós romjában (persze nyilván bele tudtam
volna zsúfolni), ezért a videobiosba csak egy loader került, ami a vezérlőkártyán
található egy megás flash romból olvassa ki a teljes (végül 32696 byteos) vezérlőprogramot,
majd futtatja.
A vezérlőprogram azzal kezdi, hogy átvált védett módba, így tisztán 32 biten
az övé az egész processzor és memória. Ezek után letölti a vezérlőkártya flash
romjából az osztálytársak fejeiről felvett animációt, és kicsomagolja, dekódolja.
A be és kicsomagolás saját lzw implementáció végzi. Ezek után az egyéb inicializáció
következik (memory manager, kijelzőkonverter, időzítő, dma, irq). Ezek után
pedig megjelenik a kép a kijelzőn, és az effektek véletlenszerű egymásutánja
következik. A teljes bootolási folyamat 48 másodperc.
Az osztálytársak fejeiről szóbeli érettségi alatt készült egy-egy rövidke felvétel
az iskola kamerájával, digitális kimenetről rögzítve lettek (és xvid-be enkódolva
is). A videókat a 'ledimage'
nevű delphiben írt program (struktúrált specializált adatfile szerkesztő :)
'video tool' kiegészítése
konvertálta 24x24-es pirosskálás animációvá, directshow samplegrabber filterével.
A programban használt két betűtípust a 'fonttool'
nevű, szintén delphiben (legális, tényleg :) írt program konvertálta truetype
fontból windows gdi segítségével bitmap fonttá (kis képecskékké).
Sokkal többet már nem tudok írni róla, az effekteknél érdekes feladat volt a
24x24-es felbontás és a hatalmas színskála nyújtotta lehetőségekből a lehető
legtöbbet kihozni, de sokkal többet lehetett volna. De mindegy. A kijelzőnek
is kis elektronikai módosítással sokkal szebb képe lehetett volna.
Végezetül még csak annyit, hogy fullasm rulez.
Nehéz lett volna nélkülük:
netwide assembler
bochs - think inside
the bochs
A program BOCHS-ban tesztelve: screenshot
Itt már video rom-ból bootolt a program. A bochs forrásának iodev/cmos -át hackeltem
át (nem akartam teljesen új device-t írni bele, így könnyebb volt), fájlból
közvetítem a flash eeprom tartalmát, illetve két BOCHS-specifikus vezérlőregiszer-bittel
jelenítem meg a kép-tartalmat (nem akartam az 5-ös DMA csatornán fogadni az
adatokat, majd azt visszakódolni, felesleges).