ReC98/libs/master.lib/gaiji_backup.asm

84 lines
1.5 KiB
NASM

; master library - PC98
;
; Description:
; 外字データをメインメモリに退避,復元する
;
; Function/Procedures:
; int gaiji_backup( void ) ; (退避)
; int gaiji_restore( void ) ; (復元)
;
;
; Parameters:
; none
;
; Returns:
; int 1 = 成功
; 0 = 失敗( 退避・復元回数不一致, メインメモリが足りないなど )
;
; Binding Target:
; Microsoft-C / Turbo-C / Turbo Pascal
;
; Running Target:
; PC-9801
;
; Requiring Resources:
; CPU: 8086
;
; Notes:
; 既に退避してあるのにもう一度退避しようとするとエラーになります。
; 同じ様に、開放も連続2回実行はできません。
; 退避、開放と交互ならば何回でも実行できます。
;
; テキスト画面が表示されていると画面の漢字がちらつきます。
;
; Compiler/Assembler:
; TASM 3.0
; OPTASM 1.6
;
; Author:
; 恋塚昭彦
;
; Revision History:
; 93/ 2/ 4 Initial
; 93/ 3/23 メモリマネージャ使用
GAIJISIZE equ 256*2*16
func GAIJI_BACKUP ; {
xor AX,AX
cmp backup_mseg,AX
jne short @@B_END ; すでに退避してるならエラー
mov AX,GAIJISIZE/16
push AX
nopcall HMEM_ALLOC
or AX,AX
jz short @@B_END
mov backup_mseg,AX
push AX
xor AX,AX
push AX
call GAIJI_READ_ALL
mov AX,1
@@B_END:
ret
endfunc ; }
func GAIJI_RESTORE ; {
mov AX,backup_mseg
test AX,AX
jz short @@R_FAULT
push AX ; このpushのみ、HMEM_FREEの引数だよん
push AX
xor AX,AX
mov backup_mseg,AX
push AX
call GAIJI_WRITE_ALL
nopcall HMEM_FREE
mov AX,1
@@R_FAULT:
ret
endfunc ; }