mirror of https://github.com/nmlgc/ReC98.git
96 lines
1.6 KiB
NASM
96 lines
1.6 KiB
NASM
; master library - PC98
|
|
;
|
|
; Description:
|
|
; テキスト画面の長方形範囲を指定属性で埋める
|
|
;
|
|
; Function/Procedures:
|
|
; void text_boxfilla( unsigned x1, unsigned y1, unsigned x2, unsigned y2,
|
|
; unsigned atrb ) ;
|
|
;
|
|
; Parameters:
|
|
; unsigned x1 左端の横座標( 0 〜 79 )
|
|
; unsigned y1 上端の縦座標( 0 〜 24 )
|
|
; unsigned x2 右端の横座標( 0 〜 79 )
|
|
; unsigned y2 下端の縦座標( 0 〜 24 )
|
|
; unsigned atrb 属性
|
|
;
|
|
; Returns:
|
|
; none
|
|
;
|
|
; Binding Target:
|
|
; Microsoft-C / Turbo-C / Turbo Pascal
|
|
;
|
|
; Running Target:
|
|
; PC-9801
|
|
;
|
|
; Requiring Resources:
|
|
; CPU: 8086
|
|
;
|
|
; Notes:
|
|
; x1 <= x2 かつ y1 <= y2でなければならない。
|
|
;
|
|
; Compiler/Assembler:
|
|
; TASM 3.0
|
|
; OPTASM 1.6
|
|
;
|
|
; Author:
|
|
; 恋塚昭彦
|
|
;
|
|
; Revision History:
|
|
; 92/11/15 Initial
|
|
|
|
func TEXT_BOXFILLA
|
|
push DI
|
|
pushf
|
|
CLI
|
|
add SP,(2+retsize)*2
|
|
; パラメータ領域の先頭( flags,DI,retadr )
|
|
|
|
pop AX ; color
|
|
pop DX ; y2
|
|
pop BX ; x2
|
|
pop CX ; Y1
|
|
|
|
mov DI,CX
|
|
shl DI,1
|
|
shl DI,1
|
|
add DI,CX
|
|
shl DI,1
|
|
add DI,TextVramSeg
|
|
add DI,200h
|
|
mov ES,DI ; これで ESに (0,y1)のテキスト属性セグメントが入った
|
|
|
|
pop DI ; X1
|
|
|
|
sub SP,(5+2+retsize)*2
|
|
; (5(パラメータの数)+1(リターンアドレス)+2(DI,flags))*2
|
|
popf
|
|
|
|
sub BX,DI ; BX = X2 - X1 + 1
|
|
inc BX ;
|
|
|
|
sub DX,CX
|
|
mov CX,DX
|
|
shl DX,1
|
|
shl DX,1
|
|
add DX,CX
|
|
shl DX,1
|
|
shl DX,1
|
|
shl DX,1
|
|
shl DX,1
|
|
add DI,DX
|
|
shl DI,1 ; これで DI には(x1,y2)のoffsetが入った。
|
|
|
|
lea DX,[BX+80]
|
|
shl DX,1 ; 毎回の減少分
|
|
|
|
EVEN
|
|
@@SLOOP: mov CX,BX
|
|
rep stosw ; 一行分の書き込み
|
|
sub DI,DX ; 下の行に移動
|
|
jnb short @@SLOOP
|
|
|
|
pop DI
|
|
ret 10
|
|
endfunc
|