mirror of https://github.com/nmlgc/ReC98.git
79 lines
1.4 KiB
NASM
79 lines
1.4 KiB
NASM
; master library - MS-DOS
|
|
;
|
|
; Description:
|
|
; 割り込みベクタの読み取りとフック
|
|
;
|
|
; Function/Procedures:
|
|
; void far * dos_setvect( int vect, void far * address ) ;
|
|
;
|
|
; Parameters:
|
|
; int vect Interrupt Number 0〜255
|
|
; void far * address 設定する割り込みルーチンのアドレス
|
|
;
|
|
; Returns:
|
|
; void far * INT vectに設定されていた割り込みルーチン
|
|
;
|
|
; Binding Target:
|
|
; Microsoft-C / Turbo-C / Turbo Pascal
|
|
;
|
|
; Running Target:
|
|
; MS-DOS
|
|
;
|
|
; Requiring Resources:
|
|
; CPU: 8086
|
|
;
|
|
; Notes:
|
|
;
|
|
;
|
|
; Assembly Language Note:
|
|
; アセンブラから使う場合、次のように使ってください。
|
|
; push VECTOR ; 呼び出し
|
|
; push SEGMENT
|
|
; push OFFSET
|
|
; call DOS_SETVECTOR
|
|
; mov SAVE_SEG,DX ; 旧ベクタの退避
|
|
; mov SAVE_OFF,AX
|
|
; レジスタは、AX,DX以外は保存されます。
|
|
;
|
|
; Compiler/Assembler:
|
|
; TASM 3.0
|
|
; OPTASM 1.6
|
|
;
|
|
; Author:
|
|
; 恋塚昭彦
|
|
;
|
|
; Revision History:
|
|
; 92/11/18 Initial
|
|
; 92/11/21 bugfix(for asm)
|
|
|
|
func DOS_SETVECT
|
|
push BP
|
|
mov BP,SP
|
|
push DS
|
|
|
|
push BX ; アセンブラルーチンのために
|
|
push ES ; レジスタを保存する
|
|
|
|
; 引数
|
|
@@vect = (RETSIZE+3)*2
|
|
@@address = (RETSIZE+1)*2
|
|
|
|
mov AL,[BP+@@vect]
|
|
lds DX,[BP+@@address]
|
|
|
|
mov AH,35h
|
|
int 21h ; read vector -> ES:BX
|
|
mov AH,25h ; set vector <- DS:DX
|
|
int 21h
|
|
|
|
mov AX,BX
|
|
mov DX,ES
|
|
|
|
pop ES ; アセンブラ用に保存されたレジスタの復元
|
|
pop BX ;
|
|
|
|
pop DS
|
|
pop BP
|
|
ret 6
|
|
endfunc
|