mirror of https://github.com/nmlgc/ReC98.git
100 lines
1.7 KiB
NASM
100 lines
1.7 KiB
NASM
; master library - PC98 - MSDOS - EMS
|
|
;
|
|
; Description:
|
|
; EMSメモリにデータを書き込む (Level 2)
|
|
;
|
|
; Function/Procedures:
|
|
; int ems_write( unsigned handle, long offs, void far * mem, long len ) ;
|
|
;
|
|
; Parameters:
|
|
; unsigned handle EMSハンドル
|
|
; long offs EMSメモリ内のオフセットアドレス
|
|
; void far * mem 書き込むデータの先頭アドレス
|
|
; long len 書き込むデータの長さ(バイト数)
|
|
;
|
|
; Returns:
|
|
; 0 ........... success
|
|
; 80h〜 ....... failure(EMS エラーコード)
|
|
;
|
|
; Binding Target:
|
|
; Microsoft-C / Turbo-C / Turbo Pascal
|
|
;
|
|
; Running Target:
|
|
; PC-9801
|
|
;
|
|
; Requiring Resources:
|
|
; CPU: 8086
|
|
; EMS: LIM EMS 4.0
|
|
;
|
|
; Notes:
|
|
;
|
|
;
|
|
; Compiler/Assembler:
|
|
; TASM 3.0
|
|
; OPTASM 1.6
|
|
;
|
|
; Author:
|
|
; 恋塚昭彦
|
|
;
|
|
; Revision History:
|
|
; 92/11/16 Initial
|
|
; 93/ 2/24 bugfix (large data model)
|
|
|
|
func EMS_WRITE
|
|
push BP
|
|
mov BP,SP
|
|
sub SP,18
|
|
|
|
; 引数
|
|
@@handle = (RETSIZE+7)*2
|
|
@@offs = (RETSIZE+5)*2
|
|
@@mem = (RETSIZE+3)*2
|
|
@@len = (RETSIZE+1)*2
|
|
|
|
@@block = -18
|
|
|
|
mov AX,[BP+@@len]
|
|
mov DX,[BP+@@len+2]
|
|
mov [BP+@@block],AX ;block
|
|
mov [BP+@@block+2],DX
|
|
mov BYTE PTR [BP+@@block+4],0 ; Main Memory
|
|
mov WORD PTR [BP+@@block+5],0
|
|
|
|
mov AX,[BP+@@mem]
|
|
mov [BP+@@block+7],AX
|
|
|
|
mov AX,[BP+@@mem+2]
|
|
mov [BP+@@block+9],AX
|
|
|
|
mov BYTE PTR [BP+@@block+11],1 ; EMS
|
|
|
|
mov AX,[BP+@@handle]
|
|
mov [BP+@@block+12],AX
|
|
|
|
mov AX,[BP+@@offs]
|
|
mov DX,AX
|
|
and DH,3Fh
|
|
mov [BP+@@block+14],DX
|
|
mov DX,[BP+@@offs+2]
|
|
shl AX,1
|
|
rcl DX,1
|
|
shl AX,1
|
|
rcl DX,1
|
|
mov [BP+@@block+16],DX
|
|
|
|
_push SS
|
|
lea AX,WORD PTR [BP+@@block]
|
|
push AX
|
|
_call EMS_MOVEMEMORYREGION
|
|
push AX ; push result
|
|
|
|
sub AX,AX
|
|
push AX
|
|
_call EMS_ENABLEPAGEFRAME
|
|
|
|
pop AX ; pop result
|
|
mov SP,BP
|
|
pop BP
|
|
ret 14
|
|
endfunc
|