| No takže se mi to nijak nepodařilo asi sem lemra :D, chtěl bych vědět, když teda ten program nějak přes fread načtu do paměti, jak provedu JMP na začátek toho kódu? Předpokládejme že to bude COM a ne EXE (tedy žádné PE a EXE hlavičky). Přes fci 4Bh int*erruptu 21h se mi to nepodařilo rozchodit... Poraďte jedno nebo druhý :).
Jako druhou věc jsem se chtěl zeptat (ovládá to ještě někdo? :)),
funkce 0x02, interrupt 0x13h, funkce na čtení z disku. Udávají se tam různý počty hlav a a sektorů... Potřeboval bych přečíst přes tuto funkci třeba bajty od 1000h do 1050h na disketě, moh by mi někdo uvést přklad? :) co prdeláčí, máš možnost se tady předevšema vytáhnout, vsázím na tebe ;))
----------
..:@]> [link] <[@:.. (odpovědět) | DjH | | | 319-960-895 | 8.7.2008 18:32 |
|
|
|
|
| Nerozumím dotazu, jde to nějak přeformulovat?
Skok můžeš provést jako skok - inline assembler, funkce asm ("příkaz assembleru %%parametr": "parametr"=(parametr));
Případně volej ten kód jako funkci - nastav pointer na místo, kam skočit, a pak funkci zavolej. Volání funkce stejně není nic jiného, než napushování parametrů na stack, call na subrutinua pak nějaký ten režijní bordel okolo ( [link] , [link] ).
Bajty od 1000h do 1050h (80 bajtů) je trochu blbost - pokud virtuálně nepřistupuješ k disketě jako k souvislému souboru. Je nutno číst celé sektory (do bufferu příslušné velikosti) a "nadbytečné" části zahazovat.
ve tvém příkladu chceš číst čtvrtý sektor na nulté stopě.
Klasicky disketa má formát 9 sektorů na stopu, 40/80 stop na stranu. Počet hlav/sektorů/stop zjistíš službou 0xA na int 0x13.
Plnění registrů jsi asi našel - [link] - a použít inline assembler, nebo si příslušnou rutinu nacpat někam do paměti (jako obsah třeba stringu nebo čehoto) a na ni skákat, nebo vložit jako funkci napsanou separátně v assembleru a příslušný .obj přilinkovat. (odpovědět) | gugumaa | 195.113.79.10/10.0.13.* | 8.7.2008 21:27 |
|
|
|
|
| nemusis pouzivat primo funkci dosu, kdyz to neumis. funkce pro spousteni programu ji interne stejne pouzivaji.
pokud jde o CHS, tak viz tady: [link] , jak napsal gugumaa, proste zjistis parametry disku a pak linerani adresu prepocitas na chs.
pro natazeni .com ho musis nacist do segmentu na offset 100h. tech prvnich 100h bytu obsahuje PSP (viz [link] ), ktery by jsi mel vyplnit (dos na to ma funkci), spousta programu z nej cte udaje. a taky musis nastavit vychozi hodnoty registru, prinejmensim segmentovych (v realnem rezimu je pamet segmentovana po 64kB, takze aktualni hodnoty nebudou odpovidat tem, kde mas nacteny ten program).
(odpovědět) | prc | 213.211.51.* | 9.7.2008 0:20 |
|
|
|
| vyhrabal jsem zvuj stary kod pro praci s diskem, vcetne CHS. predpokladam, ze pouzivas C, ale cist Pascal by snad nemel byt problem :)
a taky SysMan, vyborny zdroj informaci (hlavne tenkrat, kdyz u nas byl internet v plenkach, natoz Google :))
[link]
a jen tak pro zajimavost, co te v dnesni dobe vede k zajmu o dos?
(odpovědět) | prc | 213.211.51.* | 9.7.2008 0:33 |
|
|
|
| 1) diky za kod
2) ano pisu v C :)
3) Sysmana mam, neasi ;), i ATHelp
4) je nuda, tak se snazim udelat jednoduchy realmodovy OS, abych trochu poznal jak to funguje (aneb nechci konkurovat Mrkvosoftu, pro rejpaly ;))..
----------
..:@]> [link] <[@:.. (odpovědět) | DjH | | | 319-960-895 | 9.7.2008 12:25 |
|
|
|
| Pan (|) ma asi neco na praci. Vetsinou bez problemu zacne otravovat hned nekolik hodin po zalozeni vlakna.(Nebo o tom vi hovno tak radsi drzi hubu). (odpovědět) | IoGi~ | 89.235.31.* | 9.7.2008 14:08 |
|
|
|