home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 3
/
FREEWARE.BIN
/
towns_os
/
fildlg22
/
setup.asm
< prev
next >
Wrap
Assembly Source File
|
1980-01-02
|
3KB
|
137 lines
page 100, 132
title ESR_setupInfo
;
; int ESR_setupInfo(char *out_buf);
;
; 機能
; FMR-BIOS拡張サービスルーチン(Int 8EH)
; システム情報の取得(Function 00H)を呼び出す
;
; パラメタ
; out_buf : システム情報通知領域(200バイト)へのポインタ
;
; 復帰値
; 0 : 正常終了
;
; アセンブル時には大文字/小文字識別オプション -twocase を指定すること
; 例 386asm setup -twocase
;
; リンク時にはオプション -callbufs を指定すること
; 例 386link setup -callbufs 2
;
; 参考文献
; FM-TOWNSテクニカルデータブック pp.287~pp.289
;
.386p
pmdata segment dword public use32 'DATA'
pmdata ends
pmcode segment byte public use32 'CODE'
pmcode ends
public ESR_setupInfo
assume ds:pmdata
pmdata segment
rmseg dd ? ; 共有バッファのリアルモード用セグメント
rmoff dd ? ; 共有バッファのリアルモード用オフセット
pmseg dd ? ; 共有バッファのネイティブモード用セグメント
pmoff dd ? ; 共有バッファのネイティブモード用オフセット
pmdata ends
assume cs:pmcode
pmcode segment
db 'ESR_setupInfo',13
ESR_setupInfo proc near
FUNCTION equ 00h ; Function 00H : システム情報の取得
INT_NO equ 8eh ; 拡張サービスルーチン
datasize equ 200 ; 転送するデータのバイト数
#out_buf equ SS:[ebp+8] ; C言語I/F第1パラメタアドレス
enter 0, 0
cld
push ds
push es
push esi
push edi
push ebx
push ecx
call mak_buffs ; 共有バッファを確保
mov ah, FUNCTION
; mov al, 入力パラメタ ; ALへの設定情報は無し
mov di, word ptr rmoff ; DS:DIで通知領域を指定
push dword ptr rmseg ; ES
push dword ptr rmseg ; DS
push dword ptr INT_NO
call BIOS_call
add esp, 12
mov ecx, datasize ; 共有バッファのバイト数をセット
push ds
pop es
mov edi, #out_buf ; 転送先をセット
mov esi, dword ptr pmoff ; 転送元をセット
mov ds, word ptr pmseg
rep movsb ; データを転送
movzx eax, ah ; BIOSコールの復帰値をAXへセット
pop ecx
pop ebx
pop edi
pop esi
pop es
pop ds
leave
ret
ESR_setupInfo endp
mak_buffs proc near
mov ax, 250dh
int 21h
mov word ptr rmoff, bx
shr ebx, 16
mov dword ptr rmseg, ebx
mov dword ptr pmoff, edx
mov ax, es
mov word ptr pmseg, ax
ret
mak_buffs endp
RMINT struc
RMI_INUM dw ?
RMI_DS dw ?
RMI_ES dw ?
RMI_FS dw ?
RMI_GS dw ?
RMI_EAX dd ?
RMI_EDX dd ?
RMINT ends
BIOS_call proc near
#INTNO equ (word ptr 8[ebp])
#RMDS equ (word ptr 12[ebp])
#RMES equ (word ptr 16[ebp])
#RMI equ (dword ptr [ebp - (size RMINT)])
enter 0, 0
sub esp, size RMINT
mov #RMI.RMI_EAX, eax
mov #RMI.RMI_EDX, edx
mov ax, #RMDS
mov #RMI.RMI_DS, ax
mov ax, #RMES
mov #RMI.RMI_ES, ax
mov ax, #INTNO
mov #RMI.RMI_INUM, ax
push ds
mov ax, ss
mov ds, ax
lea edx, #RMI
mov ax, 2511h
int 21h
pop ds
add esp, size RMINT
pop ebp
ret
BIOS_call endp
pmcode ends
end