home
a tabló
a program
az elektronika

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).