Realmodus fra windows

Hvordan lage real-mode lite minne pointers.Contributor: LEOPOLDO SALDANHA {Her er koden jeg lovet å sendt deg. Det fungerer fint. Du kan readany del av realmodus lite minne med det} funksjon allocRealModePointer (var P: pekeren; Størrelse: longInt). Boolean; Var Selector, basen: ord; LinearBase: longint, begynner resultat: = false; LinearBase: = MakeLong (0, HIWORD (longint (p)) shr 12) + HIWORD (longint (P)) SHL 4 + LoWord (longint (P)); {Konverterer 20-bit-adresse i en 32-bit en} {dvs. $ FFFF: 0006 til $ 000ffff6} Selector: = AllocSelector (DSeg); {Kopierer DSeg Selector egenskaper} basen: = SetSelectorBase (Selector, LinearBase); SetSelectorLimit (Selector, Size); if (Selector < > 0) og (base < > 0), og start P: = Ptr (Selector, 0); Resultatet: = true; end, end, funksjon freeRealModePointer (var p: pekeren): boolean; Var fr: Word, begynner fr: = FreeSelector (HIWORD (longint (p))); {Seletor er på HIWORD (p)} if (fr = 0), og start {OK} p: = null; Resultatet: = true; ende annet begin {mislykkes} resultat: = false; end, end, {kode Test: ROM-BIOS-datoen er alltid på $ ffff: 0005 (real-mode)} Var P: pChar; begynne P: = Ptr ($ FFFF, $ 0005); {FFFF5 - > data da Rom-Bios} hvis AllocRealModePointer (Pointer (p), 8) da {8 tegn til RomBios 'date} begin {Bruk p å lese ROM Bios "date her} FreeRealModePointer (Pointer (p)); {Kast p} slutten, slutten
.



Previous:
Next Page: