Bootolható CD turbo pascalban
2012-05-31T14:36:41+02:00
2012-06-01T13:07:12+02:00
2022-07-18T20:45:40+02:00
  • A com file az a CS:0100 cimre toltodik be, a szegmens elejen levo 256 byte teruleten vannak a parameterek, amikkel el lett inditva a file. A legkisebb mukodokepes com file az 1 byteos, ami pont egy ret utasitasbol all :D
    Mutasd a teljes hozzászólást!
  • A COM program (fájl) elején van 256 nem használt byte (nem hiszem, mert emlékszem 10-20 byte-os COM programra is), vagy csak a DOS tudja, hogy nem a szegmens elejére tölti be, hanem a 256-odik byte-tól kezdve?
    Ez nem mindegy, mert ha a fájlban van akkor berak egy ugró utasítást a fájl elejére, ami a 256-odik byte-ra ugrik és kész.

    Második esetre hirtelen nem tudom mi a megoldás, azontúl, hogy a fordító eleve a szegmens elejétől dolgozik, vagy utólag átírja a címeket (aki nagy ász, az megteheti). De egy normális fordítóban gondolom be lehet állítani, hogy hol kezdődjön a program. Vagy a 256-odik byte-tól rakja be a programját, az elejére rak egy ugró utasítást. Csak kérdés, hogy mekkora egy szektor ami betöltődik.

    Egyébként a BOOT szektort amúgy is kénytelen szerintem "gépi kódban" írni, az meg nem valószínű, hogy ez után még a DOS nélkül betölt egy COM fájlt a lemezről. Így valamilyen "barkácsolásra" mindenképpen szükség van, Assembly ismeret nélkül nem tudja megcsinálni. Utólagos betöltésre is egyszerűbb közvetlenül szektorokat betölteni a memóriába, mint saját fájlkezelőt írni. (Az elsőre ha jól rémlik vannak BIOS rutinok.)

    Képernyő kezelésben igazad van, lehet könnyen kezelni közvetlenül (gyakorlatilag megírja a Write eljárást). Aki erre nem képes, az ne is kezdjen hozzá, mert ennél cifrább dolgok jönnek majd elő. De sok mindenre vannak BIOS rutinok, amik DOS nélkül is működnek (ha minden igaz, bár én nem teszteltem), lehet használni őket.
    Mutasd a teljes hozzászólást!
  • jogos, akkor viszont marad az assembly...
    esetleg a programnak ezt a részét assemblyben megcsinálja,
    a többit meg, hogy gyorsabb legyen Turbo Pascal és a végén összelinkeli...
    de azis lehet ezzel sok szopás lenne és akkor már inkább az egészet assemblyben ezt már az ő dolga
    Mutasd a teljes hozzászólást!
  • Többen mondták, hogy a Turbo Pascal által készített EXE nem lesz jó, mert az tele van sok szeméttel. Ez igaz. De többen azt is mondták, hogy az EXE helyett COM program kell, mert az a tiszta "szűz" 64kB-os kód, adat és stack egyben, MZ fejléces szemét nélkül. Nos ez NEM IGAZ (mármint hogy a COM jó lenne).

    A COM program sem lesz jó, mert minden COM program úgy kezdődik, hogy "ORG 100h". Erre azért van szükség a COM programokban, mert így tud a COM program kompatibilis lenni a DOS-szal. Ez ugyanis a DOS-nak kell, ebbe pakol ezt-azt, és a program kinyer innen ezt-azt. Úgy hívják ezt a 256 bájtos adatterületet, hogy Program Segment Prefix, amit PSP-nek rövidítenek és magyarul majdnem ugyan úgy hangzik, mint angolul: Program Szegmens Prefix.

    Olyan programot kell írni bootolhatónak, aminek nincs PSP-je, ugyanis boot-oláskor sehol sincs a DOS, ami értelmezné (és használná) a PSP-t. A Turbo Pascal erre alkalmatlan vagy legalábbis én nem tudok olyan fordító direktíváról, amivel a COM program kezdő eltolása 100h-ról lenullázható lenne (bár lehet, hogy csak én nem tudok ilyenről, de nekem nem rémlik ilyen).

    Viszont a Turbo Assembly az tud ilyet; ott az "ORG 100h" kihagyható/átírható 0-ra. De ez meg nem Pascal, hanem Assembly.

    Az sem igaz, hogy a szöveg kiíratásához megszakítást kellene használni. Egyszerűen csak a szöveges video-RAM-ba (B800h:0000h valós módú címzéssel) egy ciklusba 80x24 darab 2 bájtos szót kell írni: (az egyik bájt a színkód BCCCTTTT bitekkel, a másik a szóköz karakter ASCII kódja 20h/32d). Ezzel le van törölve a képernyő. Ezután a kiírandó szöveg karaktereit át kell másolni a video szegmens elejére, mindegyiket +1 bájtos eltolással (ne a színkódba kerüljön minden második karakter). Ezt is ciklussal. És kész is. A gép leállítása már sokkal nehezebb feladat (IO műveletekkel ACPI hívás valós módban, vagy HALT utasítás, de ez nem biztos, hogy ki is kapcsol).

    Szóval szerintem sokkal egyszerűbb egy minimalista DOS, futtatva rajta AUTOEXEC.BAT-ban egy Turbo Pascal-os EXE-t, de így (szerintem) elveszti a feladat az örömét. Ráadásul a gép kikapcsolása így is macera (IO műveletek a Port[]-tal, vagy HALT gépi kódja Inline()-nal, és ezek is csak azért, hogy a built-in Assembly el legyen kerülve, azaz Pascal-osabbnak látsszon a dolog).
    Mutasd a teljes hozzászólást!
  • És szerinted VirtualBox-ban nem ugyanúgy kell, mint valódi HDD/floppy/CD esetén? Floppy lemezről is lehet "lemezképfájlt" készíteni és csatolni az emulátorhoz, de a HDD/CD is tök ugyanúgy működik mint a valóságban, max nem okozhat kárt az ember.

    IWolf88: aki hosszabb ideig Pascalozik, az biztosan találkozik az Assemblyvel (amit a kódba lehet illeszteni), megszakításokkal, regiszterekkel, hardver programozással stb. és ezek nagyon jó alapot adnak a "saját oprendszer" készítéséhez. Nem kizárt, hogy tiszta Assemblyt nem is kell használnia, elég a pascalba beszúrt változat is.
    Mutasd a teljes hozzászólást!
  • Inkább VirtualBoxba szeretném
    Mutasd a teljes hozzászólást!
  • Mutasd a teljes hozzászólást!
  • asszem Nero Burning ROM, meg amit mondtam az UltraISO az megadott fájlt rád tudja írni a boot szektorra, viszont az kétséges, hogy az a formátum megfelelő-e...

    Amit mondasz ez a DOS se hülyeség, valahonnan szedtem le egyszer
    egy MSDOS 6.22 boot CD-t :D tiszta jó volt, lemezre feltettem még a turbopascalt meg a debug.exe -t és egy progimat tudtam (a CDs) DOS alól debuggolni...

    azzal is egyet kell értenem, hogy 2hét pascal nemelég, de lehet még akármekkora pascal rutin se, szóval melegen ajánlott az assembly...

    De egyáltalán a kérdező mit akar?
    -kézzel megcsinálni egy ilyen progit teljesen magától, amolyan tapasztalatszerzésnek,
    -vagy csak valahogy vmilyen eszközzel elérni, hogy az a szöveg ott megjelenjen és akkor lehet Win95 bootFloppy/DOS
    Mutasd a teljes hozzászólást!
  • Tudom mi az a megszakítás.
    Mutasd a teljes hozzászólást!
  • A kérdés miatt.

    Szerinted aki ilyet kérdez az tisztában van azzal, hogy mi a megszakítás stb..

    És különben is egyszerűbb.
    Op rendszer kiírása pár perc, program pár sor.
    Mutasd a teljes hozzászólást!
  • VAGY rak a CD-re egy lebutított DOS-t ami elindul és az indítja a Pascal programot. Ez a legegyszerűbb, mert "minden" használható pascalban. Max a DOS-t kell beállítani /módosítani, hogy a kiírásai ne látszódjanak, egy karcsú DOS úgyis olyan gyorsan indulna, hogy szinte rögtön a Pascal program köszönne be.
    (Egy bootoló Win95/98 lemezből érdemes kiindulni, de lehet egy "floppy" rendszerlemez is megfelel.)

    B változat a saját program, de erre talán jobb az Assembly, vagy egy régi TP ami .COM-ra is tud fordítani (meg ha jól rémlik pl. a debug.exe is jó volt erre).

    Kicsit olvasgatni kell, hogy a CD-n hol van a boot szektor, fogni egy olyat ami működik és azt módosítani, bővíteni.

    De ez így általában olyan sok munka, hogy 1000-ből 999 vállalkozó tuti nem csinálja végig, mert nem elég hozzá az, hogy valaki 2 hete Pascalozik.
    Mutasd a teljes hozzászólást!
  • ...
    lemaradt de, lehet, hogy assemblyzned is kell, ha a Turbo Pascal nem jön össze, akkor ottvan pl a NASM, én anno ezzel csináltam hasonló cuccost.

    Ezen a linken a 8.2. fejezetben benne van, hogy kell .com fájlokat generálni, de ez már tiszta assembly semmi pascal:
    NASM Manual
    Hmm 8.2.2-es lehet még hasznosabb...

    Azis lehet, hogy amit írtam CD-re nem érvényes csak winyóra, de nem hinném...
    Mutasd a teljes hozzászólást!
  • Kezdésnek kell egy CD író progi ami tud, tud külön boot image-t kezelni, mondjuk UltraISO. Ezzel meg lehet csinálni a CD-t.
    Ha a bootolható progi hasonló ahhoz amiket a winyó Boot Recordjába szoktak írni, akkor vigyázz, mert a hagyományos
    EXE formátum nem lesz jó, ez ugyanis tele van headerrel (MZ), erőforrásokkal (.rsrc) meg egyéb szeméttel ami a CPU/BIOS számára értelmetlen. Ezért bootolható progik készítéséhez a régebbi .com/.bin kiterjesztést preferelják, ez nyers bináris program-formátum, max mérete 64KB lehet, viszont nincs benne semmi header, meg ilyesmi. Turbo Pascalt talán be lehet úgy lőni, hogy ilyet produkáljon, esetleg ha a végeredmény nemjó (mert mondjuk EXE lesz) akkor a tárgykóddal (.obj) még lehet mit kezdeni, ezt ugyanis külön linkerrel TLINK, ALINK még meg lehet kajáltatni és akkor lesz belőle .com/.bin.
    A Turbo Pascal fordítási beállításait nagyon nézd át, ja és a programban nem használhatsz rendszerhívásokat mert nem lesz alattad semmi, még a memoria allokáció is bajos lehet, a kiíratást is BIOS megszakításokkal kell csinálnod.
    Mutasd a teljes hozzászólást!
  • Na segítesz?
    Mutasd a teljes hozzászólást!

  • Ahhoz, hogy a cd-ről beinduljon a géped szűkség van egy op rendszerre a cd-n.

    Miért is?
    Mutasd a teljes hozzászólást!
  • Értem hogy tudom rátenni cd-re, márcsaka progit kéne megírni
    Mutasd a teljes hozzászólást!
  • Ahhoz, hogy a cd-ről beinduljon a géped szűkség van egy op rendszerre a cd-n.
    A cd irásakor be kell állítani, hogy boot cd legyen.
    Indulás után jöhet a programod.
    Eddig érted

    Mutasd a teljes hozzászólást!
  • Hát ez rohadt sokat segít
    Mutasd a teljes hozzászólást!
  • Akkor elöször ezt tanulmányozd !

    Utána jöhet a progi !
    Mutasd a teljes hozzászólást!
  • Nem
    Mutasd a teljes hozzászólást!
  • Először válaszolj a kérdésemre !
    Mutasd a teljes hozzászólást!
  • Valaki??????
    Mutasd a teljes hozzászólást!
  • Tudsz boot cd-t készíteni akármilyen op rendszerrel

    A progi utána már semmi.
    Mutasd a teljes hozzászólást!
  • Ez jó lesz
    Mutasd a teljes hozzászólást!
  • UP!
    Mutasd a teljes hozzászólást!
  • UP!
    Mutasd a teljes hozzászólást!
  • Szeretnék Turbo Pascalban egy olyan programot írni, amire ha rábootolok akkor kiírja h "Hello Boot CD!"
    aztán ha megnyomok egy billentyűt kikapcsol a gép.
    Leírá a ezt valaki lépésről lépésre forráskóddal?
    Mutasd a teljes hozzászólást!
abcd