注意, 每個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, ; Load parameters from stack
mov eax,
mov edx,
mov ecx,
mov ,dx ; save SB configuration parameters
mov ,cl
mov ecx,
mov ,cl
mov ,ax
; mov ax,
; mov dx,
; mov cl,
; mov ch,
; mov ,dx ; save SB configuration parameters
; mov ,cl
; mov ,ch
; mov ,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....。
┌──────────────────────────────────┐
│ 看到女朋友被搶走:吃醋,不怎麼酷;喝醬油非常酷,但是不能喝。 │
│ (要不要看我喝﹖) │
└──────────────────────────────────┘
===============================================================================