( bzt | 2024. 10. 17., cs – 11:53 )

Na még egy kis újdonság: - Az "-e" kapcsolóval generált lemezkép mostantól nemcsak EFI CDROM-ként, hanem ősrégi BIOS gépeken is bootolható (ezidáig nem hiányolta ezt senki, azért nem volt) Mivel lassan 15 éve nem volt olyan gépem, amiben lett volna optikai lemezolvasó, ezért sok jelentősége nincs, a gyakorlati haszna annyi, hogy az EFI tetves lassú, így viszont BIOS-al pillanatok alatt bootolható virtuális gépen a kigenerált lemezkép (szerintem ma már kizárólag VM-eken használnak csak CDROM-ot, igazi vason nagyon nagyon régóta pendrájvról meg a telepítés). Hogy hogyan valósítottam meg, na az megér egy misét, tovább fog tartani elmagyarázni, mint megcsinálni volt :-D Zseniális hekkelés, ha szabad ezt mondanom :-D Eddig azért nem volt BIOS CDROM támogatás, mert míg EFI CDROM esetén transzparens a szektorméret, addig az idióta BIOS minden létező eszköznél 512 bájtos szektorméretet használ, kivéve a CD-t, mert annál 2048 bájtosat. Ez azért szopás a köbön, mert emiatt az LBA számozás elmászik, és a továbbiakban nem feleltethetőek meg a FAT kluszterek a lemezszektoroknak konvertálás nélkül. Hogy átírjam a betöltőt tetszőleges szektorméret kezelésére, na az ki volt csukva, mert már csak 10-20 bájtnyi hely maradt benne, eléggé ki lett már maxolva (bugos BIOS-ok miatt egyszerre 127 szektor olvasható csak be egyetlen hívással, azaz a második lépcsős betöltő maximális mérete emiatt 65ö24 bájt). Az elsődleges betöltő maximális mérete meg 480 bájtnyi, amiben már így is átkapcsolom a processzor üzemmódját, laptáblákat generálok, megszakításvezérlőt meg címbuszt inicializálok meg PE/COFF binárist parszolok (kb. 1-2 bájt maradt szabadon, szóval mégegy BIOS hívás szintén kicsukva). Szóval más megoldást kellett találni. Ehhez tudni kell, hogy - az eredeti IBM PC betöltötte a lemez legelső szektorát, az indította az OS-t. Ahogy nőttek a lemezméretek és felmerült az igény több partícióra, ide egy olyan kis MBR program került, ami aztán betöltötte valamelyik partíció első szektorát a VBR programmal. (Chainloading, a VBR nem tudja, hogy nem a BIOS töltötte be, hanem az MBR). - namost a Simpleboot / Easyboot MBR szektora nem így lett megírva, hanem direktben a második lépcsős betöltőprogramot rántja a memóriába a partícióról, szóval mindegy neki, mi van a VBR-ben. - EFI alatt maga a förmver értelmezi GPT, választja ki a partíciót és keresi meg rajta a fájlokat, így itt megintcsak nincs használva a VBR. - EFI El Torito módban hasonló, csak ekkor GPT helyett a Boot Catalog-ból keresi ki a partíciót, de megint, a VBR nincs használva. - BIOS El Torito módban azonban a Boot Catalog-ból kikeresett szektor töltődik be és fut le. Tehát ez az egyetlen eset, amikor a VBR kódja végrehajtódik. Ezért azt találtam ki, hogy ide ebbe az ESP VBR-jébe rakok egy nyúlfarknyi programot, ami ráül a BIOS megszakításra és leemulál egy másodlagos merevlemezt, ami tulajdonképpen a CDROM 2048 bájtos szektorait olvassa, de 512 bájtos lemezként funkcionál. Miután ez megvan, betölti az MBR-t, mintha a BIOS töltötte volna be, és onnantól minden úgy megy, ahogy szokott (tehát itt unortodox módon a VBR tölti be az MBR-t, de miért is ne?). A memóriarezidens rész meg úgyis elveszik, amikor a kernel indulása előtt a betöltő kukázza az IVT-t és valós módból védett vagy long módú IDT-re kapcsol. Iszonyú hákolás ez az egész, de remekül működik (már ha valaki tényleg CDROM-ról akar még bootolni így a XXI. században).