18. ஢ DOS / BIOS  ⭮ - ਥ஢ ணࠬ஢
********************************************************

  ஫ ᢥ  ᪮쪮 ᯥ⮢ ஢ ணࠬ DJGPP,
   묨 ।⢠  ᯮ 뢠.

18.1 祭 " ন INT 0xNN " 뢠 "int86"
===============================================

** Q*: 祬  ணࠬ 蠥  ਩ ⪠ " ন
DOS, 訢 0xNN "  " ন INT 0xNN "   뢠
"int86"  " 㭪樨 intdos', ⮡ 맢 ணࠬ 뢠? *

*A*: 맮 ॠ쭮 ० DOS  ࢨ BIOS  ணࠬ  饭
० ॡ ४⥫  ॠ쭮 ०, ⠪ "int86" ᥬ⢮ 㭪権
 ⥪ DJGPP,   INT  ᫥ ४祭 ०.
,  㣨 ॡ 㪠⥫   .  ०
㭪樨 DOS/BIOS  ⮫쪮   ࠬ  ⠭⭮ , ⠪
"int86",  ६   襩 ணࠬ   ,
⮡ ন  㣨.   砥  㭪  
⭮⥫쭮   , ⮡ 믮  ࠡ ࠢ쭮, ⮬ 
 㦨  ᮡ⢥ ࠧ饭  ࠧ  ().  
६  "int86" ন    ,   ন  
. ᯥ稢 㭪樨 ᫥  筮 뫪. . int86
 뫪  " libc.a 뫪 ",  㪠   ᬮ 
 http: // www.delorie.com/djgpp/doc/libc-2.01/lib c_411. html * SEC411. 
   ন,  㤥  맢 " __ dpmi_int ' 筠
㭪  ⮣.  ⠪ ॣ஢  筮 뫪, . __
dpmi_int  " libc.a 뫪 ",  㪠   ᬮ   http: //
www.delorie.com/djgpp/doc/libc-2.01/lib c_208. html * SEC208. " __ dpmi_int '
ॡ, ⮡  ⠭    ॡ 㦨, ஥ 
뢠,  ६饭       (., 
ᯮ짮   㣠 DOS / BIOS   18.2, ).

18.2,  ᯮ짮   㣠 DOS / BIOS
==============================================

** Q*:   뢠 㭪 DOS/BIOS,  ॡ 㪠⥫   ,
ਬ "ES:DI" (  㣮)  ॣ.    ᥣ, ⮡
  " ES' ॣ? *

*A*: ᫨  ᯮ "int86x"  "intdosx"  㭪樨 DOS  BIOS,
ᯥ稢 ,  ⮫쪮   襣   ॣ, 
 ᬥ饭 ("regs.x.di")  뢠 ⭮⥫쭮 ᥣ.  㭪樨
ᤥ ⠪   ᠬ     ⪥.

᫨  뢠 " __ dpmi_int ',      ॣ 
   ண   *᭮*  ( ࢮ 1 ). ᫨
ࠧ ⮣    祬 ࠧ  ।, ᯮ㥬 DJGPP (
ࠩ  2, 16  㬮砭),  ᠬ ⮩ ᯮᮡ ⮨  ⮬,
⮡ ᯮ짮  ।. ( 㭪樨  ਭ, 
ᮤঠ ࠭ ४ 㭪樮 饭, ⠪   
ᯮ짮  ᢮.)   ᯮ    DOS / BIOS,
ᯥ稢 DJGPP,   ﭭ 室  ⠭⭮ . DJGPP
   ࠧ  ।, 㯭    "_go32_info_block"
譥 ६,  ॣ஢  筠 뫪. ஢
ࠧ  (筮, 16,     ᤥ ᥣ 2),  ᫨ 
室 , ᯮ    ⮬ ᯮᮡ:

dpmi_regs.x.di =
_go32_info_block.linear_address_of_transfer_buffer & 0x0f; dpmi_regs.x.es =
(_go32_info_block.linear_address_of_transfer_buffer >> 4) & 0xffff;

 襣 㤮⢠  䠩  " < go32. h > ' । ப "
__ tb ',   ᥢ  "
_go32_info_block.linear_address_of_transfer_buffer. '

᫨ ࠧ  ।  祭,  㤥  । 
ᮡ⢥   ⠭⭮   饭  " __
dpmi_allocate_dos_memory ' 筠 㭪.  頥  ,  ᥣ
।  (ᬥ饭 - ). ᫨  ⮫쪮 㦤  
᫥ ⠪ ஢,    ।,  ࠧ,    
 ⭮⥫쭮 ᢮ :   ᢮ DOS,  
ணࠬ 뢠 "室".

 㫥஡ ,   ஢ ࠧ  । 
६ 믮  ⢨ ᮮ⢥⢥.  - , ⮬  ࠧ 
  ணࠬ STUBEDIT  㢥 (,    
  祬 2, ࠧ 誨, ⮬  , ᯮ㥬 誮
⭮ ᯮ   ।).

18.3  뢠 㭪樨 ணࠬ 뢠
=============================================

** Q*:  ணࠬ ௨  /  ࠡ⠥,   뢠 " __
dpmi_simulate_real_mode_interrupt. '*

*A*:   㫨 ᭠㦨     `__ dpmi_regs'
०, 祬  뢠  㭪. 砩 祭    
⠢  ணࠬ  ᥡ  .   窠 - " SS', "SP" 
"FLAGS".  " SS'  " SP '  ﬨ, DPMI  㤥
ᯥ稢 ⥪  ணࠬ ࠡ⪨ 뢠.  ⥪ ஢ 
 4KB   ࠡ稪, 믮  饭 ० (⠪ 
맮 ॠ쭮 ०),   ࠩ  512 ⮢  ࠧ 
뢠, ࠦ  ॠ ०.  - 筮 筮,   
㤥  ᯮ짮  ᮡ⢥ 訩 ⥪, ਬ, ᫨ 
,  뢠 ,  ᫨  ࠡ稪 㦤  襬
⥪. (DPMI ᯥ䨪樨 㪠뢠,     ᯮ짮  
㬮砭 ⥪, ᫨   楤 / ࠡ稪 뢠 ᯮ 
祬 60 ⮢,  1/8 饣 ࠧ ⥪, 㯭  㬮砭.)  
   㪠 " SS'  " SP '  訩 ,  室 
⠭⭮  (   ।).

᫨ "SS:SP"  ,   㤥 ᯮ짮   ⥪  ணࠬ
ࠡ⪨ 뢠 ⠪, ᫨  㪠뢠  ந쭮 ᯮ, 
ணࠬ 㤥  ਩. 㫥  "FLAGS"  ⠪
⠢      ᢥ⢥  (ਬ,
ࠦ  蠣   ⫠ ⠭!).

᫨    稭  ⠭ "SS:SP"  ।塞 짮⥫
⥪,  맢 " __ dpmi_int ' 筠 㭪,  ᠬ
 㪠⥫ ⥪   "FLAGS"   ( ⠪  㦤 ,
⮡    㭪樨!).

18.4  ६   襩 ணࠬ  ⠭⭮ ?
===================================================================

** Q*:    ६    ணࠬ  ஬ ।? *

** Q*:       ਩ ,  
⮡ࠦ   640  1M? *

** Q*:       祭   ६  
 BIOS? *

** Q*:    ᬮ  , 祩  㪠⥫    INT
21h 饭? *

*A*: 筮, ன⢠  ⮡ࠦ   ᮫   ⪨
1 -  ᭮ ࠭⢠ 襩 ணࠬ, ⠪    
   ।⢥. "אַ ",   ⮫쪮
ࠧ묥뢠 㪠⥫, ᯮᮡ  DJGPP,   ᯮ  ணࠬ "
ᥫ DS,    - ᬥ饭 ⭮⥫쭮 ᭮ ⮣ ᥫ. 
᭠砫,  㤥 㦤  ᯥ樠쭮 ᥫ,   
  襬 ன  ᮫⭮ .  ⤥
⮤,    ⠪ ᥫ:

* ᯮ짮 ᥫ,  DJGPP ᮧ  ᥡ  饭 
⠭⭮ . DJGPP   ᥫ, 㯭  १
ப `_dos_ds' (।  " < go32. h > ' 䠩 ). 
ᥫ    0  ࠭祭 1, ⠪   
ᯮ짮 , ⮡      ⠭⭮ , 
⭮⥫쭮 让   ணࠬ 뢠   
DOS. (ࢮ砫  DJGPP v2. 01  ࠭祭 " _dos_ds' 4GB,
 ⢨⥫쭮 ⪫砥     ᯮ 
ᥫ. , ⠪     ࢮ  ࠢ쭮 ⮡ࠦ 
᭮ ࠭⢮ 襩 ணࠬ  ⥫ 饭  DPMI, 
DPMI  ⥬   ன⢠  ⮡ࠦ , ⨯
Weitek I/O    ࠦ SVGA,   ,  
⮣ ਣ   ஬  - ᭮   ᥪ⭮.)
२⢮ " _dos_ds' - 祢,     ᮧ ᢮ ਯ, 
  訬  㯠   祩   1.

*   ᮡ⢥ ᥫ,  墠뢠 ⮫쪮  
,  ன   ,  ᯮ짮  ᥫ  "
_dos_ds'. ਬ,  뢮 , ⮡ ⠭ ᥫ, 
ᯥ稢   64    ⥪⮢ ०  " 0xB800:0000 ',
 Bill Currie < bill_currie blackmagic.tait.co.nz >:

int TxtVRAMSetupSelector (void) {
static char selectorData[8] = {
0xff, 0xff, 0x00, 0x80,
0x0b, 0xf3, 0x40, 0x00
};
int screenSelector = __dpmi_allocate_ldt_descriptors (1); if
(__dpmi_set_descriptor (screenSelector, selectorData) < 0) abort (); return
screenSelector;
}

२⢠ ⮣ ⮤  ⮬  (1),   ⠭ ᥫ,
 ࠭稢 室  ,  ன  㦤, ⠪
ࠧ  ⠫쭮   ࠭;  (2)  
⠭  , ⮡ 㪠  砫 ᯥ᪮ 
,    , ⠪, ⮡     
   㯠,   ॥.  ஡⥩ ⭮⥫쭮
ᮤঠ 8-⮢ ᥫ୮ ⥫, . 㬥 " __
dpmi_get_descriptor ' 㭪  筮 뫪 䠩 ଠ樨.

* ᯮ짮 DPMI ࢨ,  ᮧ ᥫ, ⮡  
ᯥ᪮  ᥣ ॠ쭮 ०. ⥪ DJGPP  㭪
" __ dpmi_segment_to_descriptor ',   窮  ⮣ DPMI
ࢨ.   ᯮ짮 祬 㭪 , ⠪     
ᯮ冷  8-⮢ ਯ ஬,   ᥣ ।
࠭祭 64  㬮砭.  ਬ ,  砥 ᥫ,
⮡   64  - , 稭饩  "0xA000:0000":

short video = __dpmi_segment_to_descriptor(0xa000);

 ,  ⥫, ᮧ ⮩ 㭪樥   
   ᢮.  ⮩ 稭,   ᯮ짮 
㭪 . ਬ, ᫨  ணࠬ  ᫥ ࠧ
  ॠ쭮 ० ᯮ   ᠬ ᥫ,   ।
⯮   ᯮ짮  " __ dpmi_set_segment_base_address'
筮 㭪楩  ⮣, ⮡ ᯮ짮 " __
dpmi_segment_to_descriptor ', ⮡ । ⤥ ਯ 
 .

᫨   ᥫ,   ᯮ짮    ⮤ 饭
 訬 ᮫ ᠬ, ᯮ騬  ᥫ:

* ᫨     , 16-ࠧ來 ᫮,  32-ࠧ來
 ᫮, ᯮ "  㪠⥫ " 㭪樨,   "
<sys/farptr.h> ' 䠩 .   ८ࠧ  㪠 
ॠ쭮 ०   segment:offset   "   " ( ,
segment*16 + ᬥ饭),  ᯮ짮 " _dos_ds'   㣮 ᥫ,
    ⠭⭮ ,  ⮬:

unsigned char value = _farpeekb(_dos_ds, segment*16 + offset);

ᯮ "_farpeekw", ⮡ ᬮ  16-ࠧ來  "_farpeekl", ⮡
ᬮ  32-ࠧ來 . ᫨     ᪮쪨 祭
(騬  ᪮쪨 ᬥ ⪮)  横, ᯮ 㭪樨
騥  _farnspeekX,    ⠭ ᥫ ⮫쪮
 ࠧ,  ⨢ 宦 ⮣   饭 (
㡥,   横  뢠  㭪,  ।⢥
⠭ ᥫ; .  뫪  襣 ⢠
஡⥩).

 㭪樨 騥  ஬  㭪権 `_farpokeX' and `_farnspokeX'
⮡   設  ( 祭) ⠪ ᯮ
.

 㭪樨  २⢮ ⠢  ஥ ᥬ୮ ,
    ⨬樥, ⠪   祭 . .
 뫪 䠩 ଠ樨  쭥 ஡⥩ ⭮⥫쭮
 㭪権.

* ᫨      祬 4 뢭 ⠬, ᯮ
"dosmemget"  "dosmemput"  㭪樨.  ⠪ ॡ, ⮡ ,
⮡ ८ࠧ segment:offset   ,    㦤 
⠭⭮ ᥫ , ᪮   ⮫쪮 ᯮ짮, ⮡
  ⠭⭮  ( ᯮ " _dos_ds' ७).

     ਩ ன⢠  ⮡ࠦ
   ॡ  16 - 來 㭪樨 㯠 , ⮬ ᫨
dosmemXXX   ந ᪠ १ ஡ `dosmemXXXw'  "farptr"
㭪樨.

*  ६饭 ஢  ᥫ 㣨 祬 " _dos_ds' (ਬ,
ᮧ   ⮤, ᭥ ), ᯮ " movedata '
 㭪. ॡ, ⮡  । ᥫ  ᬥ饭,  
⠭⭮       ᭮ ࠭⢥ 襩
ணࠬ. ᯮ 㭪 `_my_ds' ( ,   - *㭪
*,   ६!) ⮡  ᥫ  ६  襩
ணࠬ,  ᯮ  ६ (ਢ  "int")  "ᬥ饭"
  . "Movedata" , ⮬   ६頥 32-ࠧ來
longs,   ⥫  ᯮ짮  ६饭    
਩ :    ⮫쪮 ন 8-  16-ࠧ來
 ய᪠ , ⠪ ६   4  ६ 㤥
訡,   맢 㤭 BIOS. 㭪樨 "movedatab"  "movedataw"
।ᬮ७,  ६饭 ⠬  16-ࠧ來묨 ᫮, ᮮ⢥⢥.

ਬ,  뢮 ,  ꥤ   ⮤ 
। ⥫   㯠    饭 
"movedata", ⮡ ६   ᪮ ࠭:

short video = __dpmi_segment_to_descriptor(0xa000);
movedata(_my_ds(), buffer, video, 0, 320*200);

*  ᠬ ண 㯠    襣 筮 ᭮
࠭⢠,    ᯮ짮 㭪権 nearptr,   "
<sys/nearptr.h> ' ; .  뫪  襣 ⢠
஡⥩.  . ᠭ ⮣,   ᠬ  אַ 
 ਩ ன   18.6, .

18.5   ⠭⭮  ᯮ ⮫쪮 20 
===================================================

** Q*:   뢠 "movedata", ⮡ ।    ணࠬ 
஬ ।,    祭   ࠢ 

*A*: ⨬    ⠭⭮  - ⮫쪮 20 ࠧ來. ,
祭, ࠭  ६ "
_go32_info_block.linear_address_of_transfer_buffer ' ( ᥢ, " __ tb ')
    ﬨ  12 ,  "movedata"  ᪨ 
訥 ࠧ, ⮬   㭪  ⠪ ᯮ짮, ⮡
६   2 ᯮﬨ  頥 . , 
᪨஢ 訥 ⮢ 12 ⭮ 祭, 饭 ࠧ " . . .
_linear_address_ ... ' ﬨ   DJGPP, 直 ࠧ,   
뫠  ⠭⭮ ᯮ , ०, 祬  뢠 **
㭪権  "movedataX" ᥬ⢠(ਨ), "farptr"  㭪権 nearptr.

18.6  㯮  ன⢠  ⮡ࠦ    ᮫
ᠬ
===============================================================

** Q*: 㭪樨 farptr ᫨誮    ਫ, ஥ **
 אַ   ன⢮  ⮡ࠦ   DPMI.   
   DJGPP?   ⨬஢ ᪠ ⥪ - 
஧, ᫨     ᤥ!: (*

*A*: 騩 ⠪ 뢠  ⮤ DS  । Junaid A.  <
junaid barney.eng.monash.edu.au > ( ⠪ ॣ஢ ணࠬ, 
ᯮ  ⮤, ⮡    - ;   ᬮ
,   娢 ᯨ᪠ ⮢).  ᭠砫, ।०: ⮤,  
ᮡ 뢠 ⢨⥫쭮, ⪫砥  ,  ⠪   
  ०, ᫨ ᯮ ணࠬ   㪠⥫. ,
᪮ ⨢ ୡ㫫 < turnbull shako.sk.tsukuba.ac.jp > ⨫ :

*Surgeon WARNING* ࠫ: ᠭ  ᯮ "  dpkjv DS ",
ந ந,   襩 ணࠬ  殮,
⮫ , baldness,   ⭮,  㤥  易  
奨.

 ,  ਥ:   ࠭祭 ⥫ ᥣ,
࠭  " DS "  0xffffffff ' ( , -1), ᯮ 㭪 8
뢠 DPMI 31h( । ᥣ). ᫥ ⮣,    
ᥩ ,   饥 ६ ⮡ࠦ.  ⥬ ᯮ
32-ࠧ來 横᪨ ७   ᭮ ࠭⢥, ⮡
    ᪠,   ᮬ 0xa0000 ( ਭ
VGA),   㣮   襬 ன⢥  ⮡ࠦ .

  ,   ਥ  㤥 ࠡ   DPMI ஬.
 DOS Linux  Win/NT  㤥   ⠭ ⠪ ஬
࠭祭 ᥣ , ⮬   樮 ⥬  
 쥧;    " __ djgpp_nearptr_enable '   -
 ⪠. CWSDPMI, QDPMI, Win 3 x  Win 9x    ⮤ (OS/2
  ,  ⠪,  ࠩ   8.200),  
ᮡ ࠧ  奬    DPMI ஢,   .
饭  "malloc"   㣮 筮 㭪樨,  뢠
"sbrk",      " ᥫ DS  ࠧ 
⮤, ᫨    ୮  ᫥ ᫥ " sbrk ' 饭 (. "
Nearptr " 㭪樨 ন  ॢ᫥ ⥬, ᫨   " __
djgpp_conventional_base ' ६,    襩 ⢥⢥,
⮡ ᯮ짮 .)   ᠬ  砥,   뢠
"⥬",   १  㣨 ᮡ⨩, 譨  믮饩
 ,  믮 ⫠稪  筮 ०.

  ⠪ ,  " __ djgpp_nearptr_enable ' 㭪  DJGPP v2. 0 
஢, 뫮  ࠢ쭮 ⠭ ࠭祭.  DPMI ࢥ ௨ 
* * 㤠    饭, 㭪  㤥 㦨    㤥
  ⪠. DJGPP v2. 01 ࠢ  ᪫祭,  ᥣ
஢,  DPMI  㤮⢮ਫ ,  頥 
⪠, ᫨  ⠪.

᫨    ࠭祭,   㦤  襬 , ⮡ 믮
 ࠢ  DPMI ஢,   䨪஢  ஡.

⠭ ⭮⥫쭮 ⮣,  筮    ⭮⥫쭮
ᯮ짮 ⮩ ⮤  襩 ணࠬ? ᬮ 㬥 㭪権
nearptr, . __ djgpp_nearptr_enable  " libc.a 뫪 ",  㪠  
ᬮ   http: // www.delorie.com/djgpp/doc/libc-2.01/lib c_122. html
* SEC122.

㣠  ⮨  ⮬, ⮡ ᯮ짮 㭪 DPMI "0x508",
  ⮡ࠦ   䨧᪨ ᮢ   ,
  ।.  ,   㭪 DPMI 1.0, 
 ** ন묨 設⢮ DPMI 0.9 ஢ ("CWSDPMI"
ন ).  㭪 魨 " __ djgpp_map_physical_memory ' 
DJGPP ⥪ C,    ᯮ짮, ⮡ 맢  㣨.

18.7 饭  ᮫ ᠬ  1
=========================================

** Q*:      ਩ ன⢠  ⮡ࠦ 
(  㣮 ᮫ )  祬 ⪠ 1 ? *

*A*:   ᯮ짮 㭪樨 DPMI, ⮡ । LDT ਯ, 
⮡ࠦ   ᮫ 䨧᪨ ᠬ.   ⥬ ᯮ짮
㭪樨  <sys/farptr.h>, ⮡   ⮬  .  맮
DPMI,   㤥  ᯮ짮:

- । LDT ਯ (Int  31h/AX = 0);

- ⮡ࠧ ᥫ  䨧᪮  (Int 31h/AX = 0800);

- ஢   (Int 31h/AX = 0600);

- ⠭  砫 ᬥ饭 (Int 31h/AX = 7);

- ⠭ ࠭祭 ᥣ (Int  31h/AX = 8).

  饭 DPMI  " __ dpmi __ XXX ' 窨  ⥪ DJGPP.

18.8   ⮡ DOS / BIOS 뢠  㭪
============================================

** Q*:      㦨 ॠ쭮 ०,  뢠
 㭪? ਬ, ࠩ   ।⢮ (㭪 0Ch) ⮡ 맢
।塞 짮⥫ ࠡ稪,   ᮡ ந室,
஬ 室  㪠⥫   㭪   ॣ "ES:DX"

*A*:  㣠 室 㭪 ॠ쭮 ०, ⠪   
  襩 㭪樨  饭 ०   誨 ॠ쭮
०.  , 맮  " _go32_dpmi_allocate_real_mode_callback_ retf '
 " _go32_dpmi_allocate_real_mode_callback_ iret '  㭪, 
ॡ ࢨᮬ ॠ쭮 ०,    楯,  ।
 "ᥣ"  "ᬥ饭",    ⮬ ࢨ (
㯮⮬ ਬ, Int 33 㭪 0Ch) 뢠 " __ dpmi_int. ' 
ࠣ ,  뢠,   :


#include <dpmi.h>
#include <go32.h>

static __dpmi_regs        callback_regs; static _go32_dpmi_seginfo
callback_info;

int install_mouse_handler (unsigned mask, void (*func)(__dpmi_regs *)) {
__dpmi_regs r;

callback_info.pm_offset = (long)func; if
(_go32_dpmi_allocate_real_mode_callback_retf(&callback_info, &callback_regs))
return -1;  /* failure */

r.x.ax = 0xc; r.x.cx = mask; __dpmi_int (0x33, &r); return (r.x.flags & 1) ? -1
: 0;
}

ࠡ稪 ("func"  㯮⮬ ਬ) 㤥 뢠  㪠⥫ 
 `__ dpmi_regs',   祭ﬨ, 묨 
ॣ  ,  ࠩ  뢠 ࠡ稪.
. 㬥  筮 뫪 䠩 ଠ樨  쭥 ஡⥩
⭮⥫쭮 । 㭪権 窨.

18.9  墠뢠  뢠
====================================

** Q*:   ॣ஢  㭪 DJGPP  ࠡ稪 ⭮
뢠? *

*A*: ⨬쭠 ⠭    뢠  ⢠ ࠡ⪨
஥ ॡ. ⥫쭮, ⮫쪮   ᬮ७ 
⮤ ᫥ .     ᠬ 襩  襣
ਫ -   ᠬ.

砫,  ⮢.  뢠  ந室, 
 室  ॠ쭮 ० ( ⮬,   ணࠬ
뢠 ஥ 㦨 DOS)   饭 ०.  
ணࠬ 믮  DPMI ஬,  뢠 墠祭 DPMI
஬  ।  饭 ० ᭠砫; ⮫쪮 ᫨  ࠡ⠭,
 ⥬ ࠦ  ॠ ०. ⥫쭮,  DPMI ०  
⠭ ⮫쪮 ࠡ稪  饭 ०. , ᫨ 뢠
  ᮪  (,  祬 10 ),  ந⥫
 ࠦ ᨣ 뢠  ॠ쭮  饭 ० 
  ᫨誮 ,    ᬮ ⠭ ணࠬ
ࠡ⪨ 뢠 ॠ쭮 ०     饭 ०. 
ࠡ稪 ॠ쭮 ० 㤥 뢠 *।*  뢠 DPMI
,  ਯ 뢠   ॠ쭮 ०, ⠪  
  ᠭ  ᥬ  ࠧ饭  ⠭⭮  ( ⪨
1). ᫨   墠 뢠 PM  RM ࠡ稪,  
墠 PM 뢠 ᭠砫, ⥬ RM  (⮬  墠 PM 뢠
 RM ). ,   ,   DPMI  
  墠뢠 뢠 RM (CWSDPMI  ); ⢥
ᯮᮡ 㡥 ⮨  ⮬, ⠪  ஡.

⮡ ⠭ ணࠬ ࠡ⪨ 뢠  饭 ०, 
 ᤥ:

*  饬,  ࠡ稪   ᠭ  ᥬ, ⮡ 
㫥஡.   ஢   (,   ⥪) 祣
 ᠥ  祭 ࠡ⪨ 뢠 ( 㠫쭮   C),
 뤠 "STI"  ० "IRET"  믮  㣨 ࠡ,
ᠭ  DPMI ᯥ䨪 (. 䨪 䥩 饭 ०
DOS   22.4). ⮡ ⠭ ᠬ ࠡ稪,  
 :

- 맢 " __ dpmi_get_protected_mode_interrupt_vector ',  ࠭
   (⮡ ⠭ ।騩  ࠡ稪 ।
訬 室  ணࠬ).

- ஢   ன ᠥ  ࠡ稪  ਨ 饭 
 " __ dpmi_lock_linear_region. '

-  祭, 맮 " __ dpmi_set_protected_mode_interrupt_vector ' 
⮬ । 㪠⥫  " __ dpmi_paddr ' ,  " _my_cs'
  " ᥫ '   襩 㭪樨  " offset32 ' .

* ᫨  㭪 ࠡ稪 ᠭ  C,    맢 㭪樨
_go32_dpmi_XXX  㭪権 稭  " __ dpmi_. ' 樠쭮:

- 맢 " _go32_dpmi_get_protected_mode_interrupt _vector. '  㭪
頥 ᥫ  ᬥ饭 ।  뢠  "pm_selector" 
"pm_offset"  , 㪠  ஬ ࠬ.   
 ࠭   ।  " _go32_dpmi_get_protected_mode_interrupt
_vector ', ⮡ ⠭   室.

-  "_go32_dpmi_allocate_iret_wrapper", ।    㭪権
 "pm_offset"   祭 " _my_cs'  " pm_selector ' . " Pm_offset '
 ⠭    㭪樨 窨,   쪮
㭪樥 ᥬ,  ࠡ뢠 ,  ணࠬ ࠡ⪨
뢠    室  । 室 (   GCC  
筮 㭪樨 C,  砥); 䥪  ᯮ짮 뢠  "
_interrupt ' 祢 ᫮   -᭮ .

- ᫨   ⮡  ࠡ稪 ⤠ ࠢ  楯窥  ।饬
ࠡ稪, 맮 " _go32_dpmi_chain_protected_mode_interrupt_vector. ' 
⠭ 㭪 窨 ,   맮, 맮  ࠡ稪,
⥬ ३  ।饬 ࠡ稪 ᫥ 襣   ࠡ稪.
  襣 ࠡ稪  "pm_offset" ,  祭 " _my_cs'  "
pm_selector '  " _go32_dpmi_seginfo '   । 㪠⥫ 
 㭪.

-  ⥬ 뢠 " _go32_dpmi_set_protected_mode_interrupt _vector ' 
ᮬ  _go32_dpmi_seginfo,   稫  
"_go32_dpmi_allocate_iret_wrapper"   "
_go32_dpmi_chain_protected_mode_interrupt_vector. '

஡  ᠭ ࠡ稪  C   ⮨  ⮬,  
祪    ஢,  ࠪ᪨    ஢ 
,   ࠡ稪 ।⢥ ᯮ, ⠪.  ࠧ,
 室  室騩  ஬諥 - ⢥ ணࠬ
ᯥ祭   ᯮ짮 ⮫쪮,  ணࠬ ⭠ 
࠭ ( , ⮫쪮 䨧᪠  ᯮ).   
,  ⪫祭 㠫쭮  ࠭,   ணࠬ 
 ࠭. ⮡ 믮 , ⠭ "_CRT0_FLAG_LOCK_MEMORY"
  " _crt0_startup_flags' ६,  ᯮ " CWSDPR0 ''
PMODE/DJ '   DPMI . ᪨, ᯮ짮   
⮤ - ४㥬 ᯮᮡ ⫠  ᨩ ணࠬ, 
墠뢠  뢠; ⮫쪮 ᫥ ⮣,   㢥७,  
᭮ 㤮 ࠡ⠥,     ஢ ⮣ 
⠭,  ⠭   .

 ,  "_CRT0_FLAG_LOCK_MEMORY" ⮫쪮 ४ 
 ணࠬ,  믮﫮  設,  筮 䨧᪮
⨨  ᥣ 㯭, ⮬   ᪠  饥 ६ 
஢, ᫨   ⢨⥫쭮 ஢,   
稢  ࠧ஢,  筮 ࠧ஢ , 
ࠧ  ணࠬ.

⮡ ⠭ ணࠬ ࠡ⪨ 뢠 ॠ쭮 ०,  
:

* 맢 " __ dpmi_get_real_mode_interrupt_vector ',  ࠭ 
  頥 (⮡ ⠭ ।騩  ࠡ稪 ।
訬 室  ணࠬ).

* ।  ⠭   " __ dpmi_allocate_dos_memory ',
   襣 ࠡ稪 ⠬   㭪樨 dosmemput. ( 
 ⠪ 뢠   㭪権,  । 楤  
ॠ ०,    뢠 ०,   뢠,
ண   ;   ᫠   ⠭ ࠡ稪
ॠ쭮 ०, ࠢ쭮?)

*    " __ dpmi_allocate_dos_memory ' 饭  " __
dpmi_raddr '  ( 訥 4   "offset16" , ⮪  
"ᥣ"), ⥬ 맮 " __ dpmi_set_real_mode_interrupt_vector. '

 ਬ஢ ⠭  ᯮ짮 ࠡ稪 ⭮ 뢠, .
⨯ , ᠭ  ᮮ⢥⢨  ⮬ Currie < bill_currie
MAIL.TAIT.CO.NZ >, Sound Blaster 뢠 㭪樨, "mkkbd" ,  "libhw"
⥪, ᠭ  ⨯묨 ⠬ DJGPP   22.2. Alaric B.
Williams < alaric abwillms.demon.co.uk > ᠫ  ணࠬ 
ࠡ⪥ 뢠 DJGPP,  ⮬ URL:

http://www.abwillms.demon.co.uk/prog/djints.txt

18.10    ᯮ짮 㭪樨 _go32_XXX  __ dpmi_YYY?
=====================================================

** Q*:  v1. x  ᯮ짮 " _go32_ ... ' 㭪樨,  ⥯ 宦 v2,
 ⠪  " __ dpmi_ ... ' 㭪樨.    ࠧ 
⨬  ⢠? *

** Q*:   ८ࠧ   v1. x , ⮡ ᯮ짮  "
__ dpmi_ ... ' 㭪樨? *

*A*:   㯯 㭪権  ࠧ 㭪樮 , ⮬
   묨  筮  㤥 ࠡ!  " __ dpmi_ ... '
㭪樨 - ⮫쪮 窨  DPMI 饭 API (. DPMI 䨪 
 22.4),  室騩  ᯮ짮  ࠡ稪,
ᠭ묨  C,   ६   " _go32_ ... ' 㭪樨 -
⥫㠫 㭪樨 魨,  ⮫쪮   ᫨, 
ணࠬ ࠡ⪨ 뢠 - 㭪樨 C. ஡  " _go32_ ... ' 㭪樨
⮨  ⮬,          (  ࠡ稪)
ᯮ, ⠪    ࠧ  墠⪨   ⠪ ࠧ
 室  ஬諥 - ⢥ .   筮  
砫 ⠤   ⫠ ,  墠뢠 
뢠,   ६饭 饣 v1. x   v2.   
 뫨 ⮫쪮 " * define'd '   ,  㭪樮
 .

 ப- ,     室 ८ࠧ   
⮣, ⮡ ࠡ,  ࠩ  ⠪     v1. x;  ᫨ 
, ⮡  뫮  ⮩稢,   १ 
ࠡ稪   ᥬ  ᯮ짮  " __ dpmi_ ... ' 㭪樨 (.,
 ⠭ ࠡ稪 ⭮ 뢠   18.9).

18.11 墠 ⭮ 뢠  ⮭ ...
=======================================================

** Q*:    ,   ணࠬ    ਢ  ᠭ
...*

*A*: 墠  뢠  DJGPP (  饭 ० )
 ᪮쪮 ⮭ ᯥ⮢. , ࠡ⪠ ⭮ 뢠 
DJGPP v2. x - 㤭 * ᫨  ࠥ  ࠢ*.  ᮦ, ࠢ
 ᫮.

 稭  ஡    ,   ணࠬ ࠡ⪨
뢠    ,  ࠡ稪 ᯮ 
࠭筮 ᢮ - 㠫쭮 堭 ,  ⮬  
ணࠬ த  ணࠬ.  ⮬ 砥, 뢠  
뢠 饭  饩 ࢨ᭮ ணࠬ,  祢묨
१⠬.   ஢  ࠭   ᯮ 
ࠡ稪,  뢠 " __ dpmi_lock_linear_region ' 筠 㭪. 
⠪ 砥 ࠪ᪨,      ࠡ稪 
ᥬ,  ᠭ  ࠧ 18.9, .   ⪫ 㠫
,   "_CRT0_FLAG_LOCK_MEMORY"  " _crt0_startup_flags', ⮡
㤮⮢,    㤥  ࠭ ᢮ ( ⥬ 
ணࠬ  ᬮ  筮 , ⮡ 믮, ᫨  
믮  ⥬  墠⠥ ).-   ஢ 墠
  .

㣠 ஡     ⮬,   ன⢠,  
ᯮ,   뢠. - ᯥ樠 ᮮ饭 ࠡ⪨
 뢠  饭 ०,  ॠ ந⥫
,  ࠦ ᨣ 뢠  ॠ묨  饭묨
०. ਬ,  486DX/33  ࠦ ᨣ   ॡ 
3000 横 ;  386SX/16,  1KHz    쥤 1/2
㯭 横. ᫨    ஦ ᫨誮  뢠,
 CPU  ᬮ   ᯮᮡ ঠ   宧⢮  ᮪ ஢.
 ⮬ 砥, ᬮ 㬥襭  뢠,  ६ 
ࠡ⪨  㣮 . ᯮ  0 DPMI ࢥ ⨯ "CWSDPR0" 
"PMODE/DJ",    ⥪ 뢠 -  㬥
ந⥫  ࠦ ᨣ 뢠  ன ⥯.
᫨  ࠡ稪 ᠭ  C,    ᥬ,  㤮⮢,
    楯. ᫨   , ⠭ ࠡ稪
ॠ쭮 ०.

 娥 ᯥ , ᮡ EMM386,  ᮮ頫, 
⨬㫨஢ ᮪ 뢠, ࠡ뢠饥 ந⥫ . 
 砥, 짮⥫ ᮮ騫  㢥祭 ᪮ 뢠  2  
6  ᫥ ⠭ EMM386.

  㣠  ⮨  ⮬,   ᯮ "sbrk"  
 㬮砭  襩 ணࠬ (஢ઠ, ᫨ 䠩  " crt0. h '
祭 -  ணࠬ,  ᫨ ⠪, ᫨ "_CRT0_FLAG_UNIX_SBRK"   "
_crt0_startup_flags' ६ ⠭ ணࠬ. ᫨  ⠪, 
⭮ 뢠, ஥ 砥  ࠢ쭮 ६,  
ࠧ  設, ᮡ, ᫨  믮  ࠢ Windows
3x.

  ⠪   ,  DPMI ࢥ   ࠡ뢠
  뢠 ᠬ⥫쭮   ।  襩 ணࠬ, 
 ।. ਬ, Win95  㤥 । Ctrl-Alt-Del  襩
ணࠬ ࠡ⪨ 뢠 ,  㤥 ⢮ ᠬ; QDPMI
 ࠡ뢠 ᠬ⥫쭮 Ctrl-C  .. ,   ᥣ, 
 ,  樨 䨣樨, ⮡   
㯭  襣 ࠡ稪 (ਬ, ⠭ Alt-TAB   Win3. x ". PIF
' 䠩).

᫨ 㯮      ஡,  ࠢ  
   comp.os.msdos.djgpp 㯯 ⥩  djgpp ᯨ᪥ ⮢ <
djgpp delorie.com >, ᮮ頥 ⠬,   ௨ 㤠,   -  㤥
筮  襭  ࠡ  .

18.12    뢠 
=================================

** Q*:        PC,   祭  ᯮ짮
㭪権 inp and outp.   ,    㯭  DJGPP? *

*A*:  室  v2. x. 쪮   <pc.h> ',   砥 
⨯. 㭪樨 ।⢥ 室    㬮砭
⥪.  ,   ⠪ ࠧ-। ᨨ 
, ᫮,   ᫮  롮મ (ਬ, "inportl" 
⥭ 32-ࠧ來 dword), ⠪  㭪権  ⥭ -  ਨ ⮢
 ᫮,  "inportsb"  "outportsw";  - -ᯥ  DJGPP.

18.13  ஥ ᥬ୮   GCC
===================================

** Q*:  ᯮ   ஥ ᥬ୮   Borland , 
   ᯮᮡ    GCC ...*

** Q*:    뫠  ६ C    ஥
ᥬ୮ ? *

*A*: GCC  ᫥ ।⢠ ஥ ᥬ୮ . 
  । ,  㣨  ᪠   (
ॣࠬ,  GCC  ᯥ᪨ १),   ᯮᮡ,
  ⪫砥 ⨬   C,  砥
஥ ᥬ . - ⮩ , ᨭ⠪  ஥
ᥬ୮  祭 ⫨砥  㣨 -᭮ ஢. GCC
ࠪ⨢ 㬥 뢠  ।⢠ ஡; ⮡ 
室 ࠧ, ⠩   ᪠ DOS:

info gcc "C Extensions" "Extended Asm"

(    窨:  .)  㤥, 筮, 㦤 
⮬ ⮭ ⥫ ଠ樨  ⠭묨  襩 ⥬ 
㯮⮩ , ⮡ ࠡ. ᫨  㦥  ⠭, 
䠩 " txi390b. ⮢  '  । DJGPP  ⠭ .

᫨  ⠥  FAQ १ WWW,   ⠪  ⭮⥫쭮 GCC
७ ஥ ᥬ୮   訬  ᬮ ,  ⮬
URL:
