中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [转帖]◇ DOS extender、DPMI 上一主题 | 下一主题
Dark-Destroy
元老会员





积分 8312
发帖 3551
注册 2003-3-22
状态 离线
『楼 主』:  [转帖]◇ DOS extender、DPMI


--------------------------------------------------------------------------------  -------------------------------------------------------------------------
                NCTU-CIS BBS `programming' 版  精華區

                ■■■ DOS extender﹑DPMI ■■■
  -------------------------------------------- 整理:william@cis_nctu -----
  -------------------------------------------------------------------------

Posted By: william (C++/ASM/Win Master) on board 'programming'
Date:      Thu Jul 29 12:48:39 1993
Title:     請問何為 DOS Extender ?

> 請問何為 DOS Extender ?
> 近來在一些雜誌都有看見這個名詞,但是卻不知為何。

平時的 MS-DOS 是在 Intel 8086 family 的 real mode 底下, 因此受到 640KB 限制。

而 UNIX、OS/2、Windows 是在 Intel i286 family 的 protected mode, 甚至在 i386
的 Virtual 8086 mode 底下, 可提供超過 640KB, 甚至虛擬記憶體能力。

但是 protected mode 的機械碼和 real mode 的不盡相同, 尤其是定址模式, 所以
過去架構在 MS DOS 的程式無法在 protected mode 下執行。

為了讓舊的 real mode 程式能花最少的代價移植到 protected mode 上, 以享受它
的好處, 就有些聰明絕頂又功力高強的人, 在兩者間架上一層界面 (即是 DOS
extender) , 讓舊的應用程式 (real mode) 用到的所有系統呼叫 (BIOS、DOS 21h...)
都改成由 DOS extender (protected mode  real mode) 接管。於是用了 DOS
extender 的程式, 相當於是一個雙重模式的程式: 平時在 protected mode 中執行,
一旦遇到需要 real mode 的服務時 (如目前一般的 disk I/O、screen I/O 的 BIOS
routine 還是用 real mode 寫成的, 除非是 PS/2 的 ABIOS 才是 real mode 及
protected mode 共用的) , 就由 DOS extender 自行切換回 real mode。

詳細內容一言難盡, 請參考 "Extending DOS, 2nd edition", 或是侯俊傑先生在旗標
出版的一系列書籍。
==============================================================================

發信人: Hentai@cis_nctu (), 信區: programming
標  題: Re: Protected Mode 高手的學弟.....高手請幫忙
發信站: 交大資科_BBS (Aug 22 20:43:21 1994)
轉信站: cis_nctu

==>[Author]: pcjames.bbs@bbs.ee.nthu. (Danny) on board 'programming'
> 看過幾篇你們的文章我請問一下你們是直接進入保護模式嗎?

我的是直接切入保護模式後開一個 V86 模式後 RUN 的...

> 可是要完全靠自己的力量不是很容易  先前的準備工作一大堆  何況我不了解
> TSS, IDT, 這樣我就更沒希望靠自己切入 Protected Mode
> 我手邊有本 80386 SYSTEM SOFTWARE WRITER'S GUIDE, 可是它重觀念
> 而範例實在簡陋

這個都不知道就有一點困難了...
雖然 System Software Writer's Guide 那本確實有一點太簡略,但是裡面的東西
都很重要,剛開始寫的時候我就常常會去翻翻看!

對了,可以再參考一下 80x86 Programmer's Refrence manual. 裡面的東西在系統
程式方面雖然沒有像 Sytem Software 那本詳細,但是對於剛開始要入門的人來說,
有不少東西比較詳細一點!

> 實在希望前輩能給小弟一些建議及寫過的程式  先說聲謝謝

NCTUCCCA:/PC/demos/programming/source/dos32v24.zip

這是一個 Protected Mode 的程式,他先檢查是不是有 DPMI server, 有的話用
DPMI 入 PM,沒有的話自己進入...

> 如還能教我 TSS, IDT 那更是感激不盡

IDT  類似在 real mode 下的 0:0 開始的中斷向量表,
     在 protected mode 下有 interrupt, exception 就找這個表!
TSS  一些 Task 的基本資料,基本上如果程式不牽涉到多工或者是等級不會改變,
     這個可以省略...

--------------------------------------------------------------------------------                                             NCTU's Hentai
=============================================================================

發信人: BigLin.bbs@csie.nctu (大雄), 信區: programming
標  題: 保護模式小問
發信站: 交大資工鳳凰城資訊站 (Tue Oct 25 03:09:22 1994)

        你可以用 C 的 函數指標把取到的指標變成 Func ...
        以後 Call XMS 時就 Call Func....

        你想看 Protected MODE 書我知道有兩本:l:
         1. 80386 技術手冊(全華)
         2. 80386 微處機手冊(東華) (在圖書館看到的[老書)
        你如果想知道 DOS extender 請看 Ray Duncan 等人寫的
            "Extending DOS, Second Edition"

如果你想用 DOS extender 有很多選擇, 我用 Borland PowerPack / PharLap RUN286

       PowerPack 有一本薄薄的小書....
                                                                BigLin
==============================================================================

發信人: toms.bbs@bbs.nsysu (i don't know....), 信區: programming
標  題: 求求你們, 我要 v86 mode 的資料
發信站: 中山計中美麗之島 (Sun Feb 26 22:33:35 1995)
轉信站: cis_nctu!news.cis.nctu!news.cc.nctu!news.nsysu!Formosa

儒林 SIM2591  "80486/80386系統設計和應用"
全華 1838  "80386技術手冊"
松崗 ISBN957-22-1417-9  "Microsoft's 80386/80486 Programming" (中譯本)
碁峰 ISBN1-55615-343-0  "Microsoft's 80386/80486 Programming" (原文)
WINDCREST/McGrawHill ISBN0-83063577-7  "80486 Programming" (原文)
維科 ISBN1-55512-195-0  "Intel Pentium Processor User's Manual" (原文)
                        (Vol.3: Architecture and Programming Manual)
上面是我有買的且提到 v86 的書籍....wish luck....
==============================================================================

發信人: jaw.bbs@bbs.nchu (我是好人), 信區: programming
標  題: DOS4GW 等 DOS Extender 會配置 XMS 嗎?
發信站: 中興大學天樞資訊網 (Fri May  6 11:57:05 1994)
轉信站: cis_nctu!bbsroute!crosspost

請問各位高手....

    DOS4GW 等的 DOS Extender 會不會配置 XMS 或 EMS 來使用? 若不會那又如何
相容於真實模式下使用 XMS/EMS 的常駐程式? 如果會是先配置 XMS 呢? 還是 EMS?
還有會不會上鎖配置的 XMS? 請明示之....

                                                                     jaw
===============================================================================

發信人: Nightshade@Maxwell (danny), 信區: programming
發信站: 台大電機 Maxwell 站 (Fri May  6 13:07:34 1994)

Dos Extender 會先去偵測是否系統配置有使用 XMS, 如果有, 會去使用, 所以
和 XMS 相容.

偵測順序是 DPMI > VCPI > XMS > ...

                                                  ..... Danny.
===============================================================================

發信人: cmp@cis_nctu (), 信區: programming
發信站: 交大資科_BBS (May  6 18:10:09 1994)

> 偵測順序是 DPMI > VCPI > XMS > ...

  保護模式就線性定址來說無所謂配置 XMS 或 EMS 的, 整個 1 mega 以上的
free memory 是完全自由使用的, 只要不影響已經分配之記憶體。  我想 Dos
Extender 之所以要偵測 DPMI 或 VCPI 是因為 QEMM 或 EMM386 等記憶體管理
程式在一開機時已搶先進入保護模式, 再製造一個 V86 模式出來, 除非你知道
QEMM 或 EMM386 內部的 GDT 或 IDT 的內容, 否則是無法再從 V86 切回保護模
式的, 而 DPMI 和 VCPI 就有能力從 V86 切入保護模式, 無非是和 QEMM 及
EMM386 有了妥協而得以由中斷呼叫進入保護模式的。

  至於只裝 XMS 的系統來說, XMS 只有分配擴展記憶體的功能 (當然 A20 已經
先致能) , 所以處在真實模式下, 只有在呼叫 XMS 中斷常式時是處於保護模式
下, 和 EMS 記憶體管理系統下的 V86 模式有很大的不同, 故任何 DOS 程式都可
自行切入保護模式, 只要使用記憶體時避開已分配之 XMS 即可。

  對了, DOS/4GW 是可以容許原 DOS interrupt 的, 我曾經攔截 INT 8 (IRQ 0)
並利用此中斷讀取熱鍵, 結果竟然可行! 我已經抓了數十張 DOOM 的精彩片段圖
片並且同時發現 DOOM 的繪圖模式是 320x200x256c 4 pages 的模式。

  Watcom C 也有此奇妙特性, 就算用組語直接呼叫 dos 下的任何中斷幾乎也沒
什麼問題, 實在是十分神奇。

-------------------------------------------------------------------------------- ┌──────────────────────────────────┐
│  看到女朋友被搶走:吃醋,不怎麼酷;喝醬油非常酷,但是不能喝。  │
│    (要不要看我喝﹖)                                           │
└──────────────────────────────────┘
===============================================================================

發信人: william@cis_nctu (C++/ASM/Win Master), 信區: programming
標  題: Re: DOS4GW 等 DOS Extender 會配置 XMS 嗎?
發信站: 交大資科_BBS (May  7 01:33:53 1994)
轉信站: cis_nctu

> Watcom C 也有此奇妙特性, 就算用組語直接呼叫 dos 下的任何中斷幾
> 乎也沒什麼問題, 實在是十分神奇。

這不是理所當然的嗎? DOS extender 都會將原先 real-mode interrupts 改寫成
protected-mode 版本, 以求以前的程式能以最少代價轉移過來。所以就某方面來
說, DOS extender 可說是保護模式下的 OS。

---------------------------------------------------------------------------------- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
≡ 何陋居 ≡ If Winter comes, can Spring be far behind?  - P.B. Shelley.
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
===============================================================================

發信人: cmp@cis_nctu (), 信區: programming
標  題: Re: DOS4GW 等 DOS Extender 會配置 XMS 嗎?
發信站: 交大資科_BBS (May  7 03:30:05 1994)
轉信站: cis_nctu

==>[Author]: Hentai@cis_nctu () on board 'programming'
> 覺得 dos extender 奇妙嗎??
> 可以抓 dos32v 來玩玩!!這是一個簡單的 dos extender
> 又有附 source ,可以讓你多瞭解 386 CPU protected mode 特性!!
> 我寒假時就從這東西學了不少!!

哈! 我也看過 Dos32V12, 以及 pmode386、protect 等 source code,
而且我也自己寫了一個 Dos Extender ( 雖然只能從 real mode 下進入保
護模式 ), 但我覺得這些 Dos Extender 都沒有 DOS/4GW 神, 你知道為什
麼嗎? 因為進入保護模式一定要重置 8259, 將 INT 0 至 INT 31 空出來給
CPU 發生保護異常時使用, 那麼原來的中斷常式便要被迫轉到其它中斷向量
使用, 看一般 Dos Extender 都將 IRQ 0-7 從原來的 INT 8h-fh 改成 INT
32-39; 但我試過在 DOS/4GW 保護模式下直接用組語寫 "int 10h" 竟然也
能照 call 無誤去執行 graphic card BIOS 的常式, 但這中斷不是給 CPU
發生異常用的中斷向量之一嗎? 怎麼還能像在 real mode 下一樣? 故這才是
令我感到神的地方。

===============================================================================

發信人: alexfish.bbs@bbs.nchu (Alex Yu), 信區: programming
發信站: 中興大學天樞資訊網 (Sat May  7 14:38:05 1994)

> 故這才是令我感到神的地方。

不是 DOS4GW 神, 可以讓中斷重疊; 這本來就是 DPMI server 該作到的事。
方法不太難, 只要將 IDT size 設小一點, 足夠含蓋住所有 CPU exceptions 就好。
然後只要有 int 發生或有程式通過 int 指令去呼叫 exception,
就一定會造成 exception, 使得 RING 0 的system 可以完全掌控 interrupt dispatch.

DPMI specification 中也明載著, DPMI server/host 有義務將保護模式下的中斷在
沒有 protected mode ISR 處理時對映回實際模式, 讓實際模式的 ISR 去處理。所以
QDPMI 是個不完全的 DPMI server implementation.

除了 DOS4GW 外, Borland 的 RTM 也有類似能力, 也會將硬體中斷對映進保護模式,
讓保護模式的 ISR 先處理硬體中斷。

另外, Windows 下所有中斷在處理前必先經過 virtual programmable interrupt
controller device, protected mode isr, 然後才論得到dos box 中的real mode ISR.
根據M$ 的文件, Windows 下硬體中斷的real mode isr 處理效率只有Windows 外的 7%.
處理效率的排行分別是:

1. Windows 外的 real mode ISRs
2. Windows VxDs
3. Windows bi-modal ISRs (可被 ring 0 呼叫的 ISR)
4. Windows or protected mode ISRs
5. ISRs in DOS box
===============================================================================

發信人: cmp@cis_nctu (), 信區: programming
發信站: 交大資科_BBS (May  9 19:08:10 1994)

==>[Author]: alexfish.bbs@bbs.nchu (Alex Yu) on board 'programming'
> 不是DOS4GW 神, 可以讓中斷重疊; 這本來就是 DPMI server 該作到的事。
> 方法不太難, 只要將 IDT size 設小一點, 足夠含蓋住所有 CPU exceptions 就好。
> 然後只要有 int 發生或有程式通過 int 指令去呼叫 exception,
> 就一定會造成 exception, 使得 RING 0 的system 可以完全掌控interrupt dispatch.

造成了異常後又該如何做呢? 這個異常處理常式又如何知道 int 的號碼呢?

我看其他的 Dos Extender 在處理呼叫原 real mode 的中斷時, 是專門設一個
中斷常式處理的, 如 AH= real-mode int number, 再呼叫此中斷常式, 然後這
常式便切入 V86 模式去 run 原 real-mode 中斷....。 而且你說將 IDT size
縮小, 但最小也不能小於 32*8 Bytes 吧! ( 即 int 0-31 ) 而我是在保護模式
下做 int 16 的動作喔! 我想不可能由 CPU 異常處理常式掌控吧! (因為 int
16 是 Math Error exception!)

===============================================================================

發信人: alexfish.bbs@bbs.nchu (Alex Yu), 信區: programming
發信站: 中興大學天樞資訊網 (Tue May 10 10:10:40 1994)

> 造成了異常後又該如何做呢? 這個異常處理常式又如何知道 int 的號碼呢?

Exception error code 會指示。
在 Windows 或 OS/2 下 sidt 看 IDTR, 就可以知道 IDT 有多小了。

> 我看其他的 Dos Extender 在處理呼叫原 real mode 的中斷時, 是專門設一個
> 中斷常式處理的, 如 AH= real-mode int number, 再呼叫此中斷常式, 然後這
> 常式便切入 V86 模式去 run 原 real-mode 中斷....。 而且你說將 IDT size
> 縮小, 但最小也不能小於 32*8 Bytes 吧! ( 即 int 0-31 ) 而我是在保護模式
> 下做 int 16 的動作喔! 我想不可能由 CPU 異常處理常式掌控吧! (因為 int
> 16 是 Math Error exception! )

當然可以, 因為特權階級不同, RING 3 的程式不可能直接叫得到 RING 0 的
interrupts 和 exceptions.
===============================================================================

發信人: alexfish.bbs@bbs.nchu (Alex Yu), 信區: programming
發信站: 中興大學天樞資訊網 (Wed May 11 04:49:06 1994)

□ 引用發信人: cmp.bbs@bbs.cis.nctu () 的文章 □
>> 當然可以, 因為特權階級不同, RING 3 的程式不可能直接叫得到 RING 0 的
>> interrupt 和 exceptions.
> 抱歉, 我沒說明清楚, 我是想直接在 RING 0 做類似 DOS/4GW 的任意給人
> 呼叫原 real-mode interrupt 的功能。( 不要跟我講說使用 DPMI )

我還是要說, DPMI 有這種功能, 方法也很簡單:

將每個保護模式的interrupt vector 都設定 (DPMI specification 規定DPMI server
要提供全部256 個interrupt 給DPMI client 使用, 不遵守的就是不相容於DPMI
specification) 到自己的handler, 而此handler 只有一個int 3.






MSN:tiqit2@hotmail.com
2003-6-20 00:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
Dark-Destroy
元老会员





积分 8312
发帖 3551
注册 2003-3-22
状态 离线
『第 2 楼』:  

注意, 每個handler 的位置都要不同, 所以最多需要256 個opcode 0cch (如果256 個
interrupt 都要對映回實際模式). 然後再攔截exception 3 (最好將 interrupt 3
也指向同一個handler), 然後從此handler 檢查被中斷的地方, 以便判斷原來發生的
中斷編號(因為中斷編號可以從return offset - int 3 array start offset 判斷
出來), 然後再用DPMI 去模擬中斷, 把該對映的暫存器都轉換好, 然後就ok 了。

以前在實際模式玩 IDT moving 也是這樣保持中斷對映的, 只是當時不必切換模式。
如果不是用DPMI 進保護模式, 那就更......簡單了吧, 準備好一個虛擬8086 machine,
在上面該用DPMI call real mode interrupt 的地方就切至此虛擬機器中, 然後返回,
OK.

===============================================================================

發信人: cmp@cis_nctu (), 信區: programming
標  題: Re: DOS4GW 等 DOS Extender 會配置 XMS 嗎?
發信站: 交大資科_BBS (May 10 21:23:28 1994)
轉信站: cis_nctu

> 注意, 每個handler 的位置都要不同, 所以最多需要256 個opcode 0cch (如果256 個
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
> interrupt 都要對映回實際模式). 然後再攔截exception 3 (最好將 interrupt 3
> 也指向同一個handler), 然後從此handler 檢查被中斷的地方, 以便判斷原來發生的
> 中斷編號 (因為中斷編號可以從 return offset - int 3 array start offset 判斷
                                                ^^^^^^^^^^^^^^^^^^^^^^^
> 出來), 然後再用DPMI 去模擬中斷, 把該對映的暫存器都轉換好, 然後就ok 了。

這招如何判斷 int 編號的方法的確高明! 我以前都沒有想到過。這樣一來,
我的心中疑點終於解了! ( 我已想到不用 DPMI 的另一種方法 ) 多謝你的提醒,
我現在便去重寫我的 Dos Extender 看看!

===============================================================================

發信人: s8153119@summer.nchu (Alex Yu), 信區: programming
發信站: 交大資工 News Server (Sun May 15 12:04:17 1994)

In article , Kevin wrote:
>> No, 主要是 Tnyplay2.zip 中對 Watcom C/C++ 的 interface 錯誤造成的。
>> 弟一朋友經過些許修改, 已經使tnyplay2 正常動作了。
>> 它最大的失誤在於參數在 stack 中的 size 錯誤, 所有對 Watcom C/C++ 的界面參數
> 有哪些地方需要修改?

Remark 起來的地方是原來的程式:

;proc    MODPlayModule  Modfile:dword,Rate:word,Port:word,IRQ:byte,DRQ:byte
proc    MODPlayModule  Modfile:dword,Rate:dword,Port:dword,IRQ:dword,DRQ:dword

        mov     edi,[Modfile]           ; Load parameters from stack
        mov     eax,[Rate]
        mov     edx,[Port]
        mov     ecx,[IRQ]
        mov     [IOAddr],dx             ; save SB configuration parameters
        mov     [IRQNum],cl
        mov     ecx,[DRQ]
        mov     [DRQNum],cl
        mov     [SBRate],ax
;        mov     ax,[Rate]
;        mov     dx,[Port]
;        mov     cl,[IRQ]
;        mov     ch,[DRQ]
;        mov     [IOAddr],dx             ; save SB configuration parameters
;        mov     [IRQNum],cl
;        mov     [DRQNum],ch
;        mov     [SBRate],ax

======================================================================
= I'm Alex Yu.   我是余孟學。   To contact me, try:                  =
= E-mail: s8153119@summer.nchu.edu.tw, s48153119@vax9k.nchu.edu.tw   =
======================================================================
= Forgive me for response so late, for I pack all my e-mails & news  =
= home and followup/reply them offline.                              =
= 請原諒我超慢速的回覆速度, 因為我用uqwk 將news & e-mail 包回家回。  =
======================================================================
===============================================================================

發信人: saturn@cis_nctu (SEGA迷), 信區: programming
發信站: 交大資科_BBS (May  7 18:14:10 1994)

請問 cmp 大:
如何在 DOS/4GW 這 DOS Extender下攔截某個 INT,
我最近寫個程式需要攔截 INT 9,  然而我卻試不出來....

我的程式大概如下:

                  .386P
                  .MODEL FLAT, C
                  .DATA
                  public Key
         Key      DB ?
                  .CODE
         Newint9  PROC PUBLIC USES....
                  LOCAL OLDINT9:DWORD

                  mov AX, 3509h
                  int 21h
                  mov WORD PTR OLDINT9, BX   ; 不知傳回值是
                  mov AX, ES                 ; ES:BX or ES:EBX
                  mov WORD PTR OLDINT9+2, AX ;
                  jmp next
        ;====================================
        NewINT:
                     .
                     .
                     .
                  iret
        ;====================================
        next:
                  mov EDX, NewINT  ;================
                  push CS          ; 不知道要指向
                  pop DS           ; DS:DX or DS:EDX
                  mov AX, 2509h    ;
                  int 21h

                  mov EAX, OLDINT9 ;return the address of old int9
         Newint9  ENDP
                  END

         希望 cmp 大能為小弟解答一下, 或是其他高手會的也幫忙一下

                  謝謝:)

--------------------------------------------------------------------------------            今天很無聊.
            明天母親節, 可是我沒回去看媽媽,
            我真是不孝子..........
                                                         【SEGA 迷】
===============================================================================

發信人: cmp@cis_nctu (), 信區: programming
標  題: Re: DOS4GW 等 DOS Extender 會配置 XMS 嗎?
發信站: 交大資科_BBS (May  9 19:22:54 1994)
轉信站: cis_nctu

Saturn 兄: 如果你已經進入保護模式, 那麼你用 DOS 的設定中斷向量功能是沒用的!
看傳回的暫存器長度及定址方式就知道 (DS:DX ==> seg:offset 的定址方式, 怎樣
定址也只能定在 1 Mega 以內, 而保護模式的程式碼卻早已被丟至 1 Mega 以外了!)
要解決此一問題, 如果你是用 Watcom C/C++ 的 話, 不妨使用 _dos_setvect() 及
_dos_getvect() 看看! 我到現在都是這麼用的, 也都沒有問題。
(包括將用組語寫成的 ISR 這樣設定向量也行)

┌──────────────────────────────────┐
│  看到女朋友被搶走:吃醋,不怎麼酷;喝醬油非常酷,但是不能喝。  │
│    (要不要看我喝﹖)                                           │
└──────────────────────────────────┘
===============================================================================

發信人: alexfish.bbs@bbs.nchu (Alex Yu), 信區: programming
發信站: 中興大學天樞資訊網 (Tue May 10 10:16:09 1994)

DOS4GW 提供32-bit 長度的int 21h 服務, 包括讀寫檔案和 get/set interrupt vector.
有一個給 Watcom C/C++ 用的 MOD player source code (檔名 'tnyplay2.zip', 本來
我是在 wuarchive 拿到的, 可是剛剛在 ftp.edu.tw /PC/wuarchive/games/programming
裡和底下的 watcom 目錄中沒看到它的影子) 裡面設定 IRQ handler 就類似

  mov  ax,250fh
  mov  edx,offset irq_handler
  int  21h

===============================================================================

發信人: cmp@cis_nctu (), 信區: programming
發信站: 交大資科_BBS (May  9 20:01:26 1994)

說起抓 DOOM 的圖案並 "發現" 它是 320x200x256c 4 pages 模式的緣由,
可要從抓 Pinball 的圖案開始說起。那時我一看到 Pinball 順暢的畫面捲動,
及比 320x200 較高的解析度, 我就認為這程式是用 mode X 顯示的。

於是我就寫了 for DOS 的專門抓 mode X 的抓圖程式, 的確蠻成功的。 後來
在玩 DOOM 時突發奇想, 想用這抓圖程式抓 DOOM, 結果竟然成功! 除了發現
DOOM 是 4 pages 顯示以外, 我還發現我抓下來的整整 256K bytes memory
中, 除了正在顯示於螢幕的 64K bytes 圖型之外, 還有兩個 64KB 圖形, 其中
一張是上一張顯示過的畫面, 而另外一張是下一張將要顯示於螢幕上的圖形
(因為它還沒 render 完畢) ; 並從這張圖形得知, DOOM 的 render 方式是
先 render 牆壁再 render  地面及天花板, 且由遠而近地 render....。

┌──────────────────────────────────┐
│  看到女朋友被搶走:吃醋,不怎麼酷;喝醬油非常酷,但是不能喝。  │
│    (要不要看我喝﹖)                                           │
└──────────────────────────────────┘
===============================================================================



MSN:tiqit2@hotmail.com
2003-6-20 00:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: