ReC98/libs/master.lib/gaiji_entry_bfnt.asm

137 lines
2.0 KiB
NASM

; master library - PC98
;
; Description:
; 外字のBFNTファイルからの登録
;
; Function/Procedures:
; int gaiji_entry_bfnt( const char * filename ) ;
;
; Parameters:
; const char * filename BNFTファイル名
;
; Returns:
; int 1 = 成功
; 0 = 失敗(メモリ(8KB)足りねえ/ファイルが開けない/
; 指定した形のBFNTぢゃない)
;
; Binding Target:
; Microsoft-C / Turbo-C / Turbo Pascal
;
; Running Target:
; PC-9801
;
; Requiring Resources:
; CPU: 8086
;
; Notes:
; モノクロ, 16x16dot, 0〜255ぢゃないとやだ
; 拡張へっだはあってもいいよ
; BFNT1.6の仕様ならいいよ
;
; Compiler/Assembler:
; TASM 3.0
; OPTASM 1.6
;
; Author:
; 恋塚昭彦
;
; Revision History:
; 93/ 2/ 4 Initial
; 93/ 5/ 9 [M0.16] super.lib部を使用
GAIJISIZE = 256*2*16
func GAIJI_ENTRY_BFNT ; {
push BP
mov BP,SP
push SI
push DI
sub SP,BFNT_HEADER_SIZE
; 引数
@@filename = (RETSIZE+1)*2
if LDATA
push word ptr [BP+@@filename+2]
endif
push word ptr [BP+@@filename]
nopcall FONTFILE_OPEN
mov BP,AX ; BP = file handle
mov AX,0
jc short @@E_OPEN
mov AX,GAIJISIZE
push AX
nopcall SMEM_WGET
mov SI,AX ; SI = バッファのセグメント
mov AX,0
jc short @@E_MEMORY
mov AX,SP
push BP
_push SS
push AX
nopcall BFNT_HEADER_READ
jc short @@DAME
mov DI,SP
push SS
pop ES
cmp byte ptr ES:[DI+5],0 ; col
jne short @@DAME
add DI,8 ; Xdots
push SI
mov SI,offset bfnt_header2
mov CX,4
repe cmpsw
pop SI
jne short @@DAME
mov AX,SP
push BP
_push SS
push AX
nopcall BFNT_EXTEND_HEADER_SKIP
push DS
mov DS,SI
mov BX,BP
xor DX,DX
mov CX,GAIJISIZE
mov AH,3fh
int 21h ; データ部の読み込み
pop DS
cmp AX,GAIJISIZE
jne short @@DAME
push SI
xor AX,AX
push AX
call GAIJI_WRITE_ALL
; 成功
@@OK:
mov AX,1
jmp short @@OWARI
@@DAME:
xor AX,AX
@@OWARI:
push AX
push SI
nopcall SMEM_RELEASE
pop AX
@@E_MEMORY:
push AX
mov BX,BP
mov AH,3eh
int 21h
pop AX
@@E_OPEN:
add SP,BFNT_HEADER_SIZE
pop DI
pop SI
pop BP
ret DATASIZE*2
endfunc ; }