ReC98/libs/master.lib/text_putca.asm

96 lines
1.5 KiB
NASM

; master library - PC98
;
; Description:
; テキスト画面への文字の書き込み
; 属性つき
;
; Function/Procedures:
; void text_putca( unsigned x, unsigned y, unsigned chr, unsigned atrb ) ;
;
; Parameters:
; unsigned x 左端の座標 ( 0 〜 79 )
; unsigned y 上端の座標 ( 0 〜 24 )
; unsigned chr 文字(ANK, JIS または SHIFT-JISコード)
; unsigned atrb 属性
;
; Returns:
; none
;
; Binding Target:
; Microsoft-C / Turbo-C / Turbo Pascal
;
; Running Target:
; PC-9801
;
; Requiring Resources:
; CPU: 8086
;
; Notes:
; 正しくない漢字コードが与えられた場合、おかしな文字が表示されます。
;
; Compiler/Assembler:
; TASM 3.0
; OPTASM 1.6
;
; Author:
; 恋塚昭彦
;
; Revision History:
; 92/11/15 Initial
func TEXT_PUTCA
mov DX,BP ; push BP
mov BP,SP
mov CX,DI ; push DI
; 引数
@@x = (RETSIZE+3)*2
@@y = (RETSIZE+2)*2
@@chr = (RETSIZE+1)*2
@@atrb = (RETSIZE+0)*2
mov AX,[BP + @@y] ; アドレス計算
mov DI,AX
shl AX,1
shl AX,1
add DI,AX
shl DI,1 ; DI = y * 10
add DI,TextVramSeg
mov ES,DI
mov DI,[BP + @@x]
shl DI,1
mov AX,[BP + @@chr]
mov BX,[BP + @@atrb]
mov BP,DX ; pop BP
or AH,AH
jz short @@ANK_OR_RIGHT
cmp AH,80h ; 81-9f e0-fd ?
jb short @@JIS
@@KANJI: ; SHIFT-JIS to JIS
shl AH,1
cmp AL,9fh
jnb short @@SKIP
cmp AL,80h
adc AX,0fedfh
@@SKIP: sbb AX,0dffeh ; -(20h+1),-2
and AX,07f7fh
@@JIS: xchg AH,AL
sub AL,20h
mov ES:[DI+2000h],BX ; 属性
stosw
or AL,80h
@@ANK_OR_RIGHT:
mov ES:[DI+2000h],BX ; 属性
stosw
mov DI,CX ; pop DI
ret 8
endfunc