mirror of https://github.com/nmlgc/ReC98.git
[Reduction] #423: grcg_polygon_c
This commit is contained in:
parent
b2c9ba67bc
commit
5b91dd3b42
|
@ -0,0 +1,393 @@
|
|||
PAGE 98,120
|
||||
; grcg - polygon - convex - Point
|
||||
;
|
||||
; DESCRIPTION:
|
||||
; 凸多角形描画(青プレーンのみ)
|
||||
;
|
||||
; FUNCTION:
|
||||
; void far _pascal grcg_polygon_c( Point far pts[], int npoint ) ;
|
||||
;
|
||||
; PARAMETERS:
|
||||
; Point pts[] 座標リスト
|
||||
; int npoint 座標数( 2〜 )
|
||||
;
|
||||
; Binding Target:
|
||||
; Microsoft-C / Turbo-C / Turbo Pascal
|
||||
;
|
||||
; Running Target:
|
||||
; NEC PC-9801 Normal mode
|
||||
;
|
||||
; REQUIRING RESOURCES:
|
||||
; CPU: V30
|
||||
; GRAPHICS ACCELARATOR: GRAPHIC CHARGER
|
||||
; ・上記は、すべて draw_trapezoid に依ります。
|
||||
;
|
||||
; NOTES:
|
||||
; ・色指定は、グラフィックチャージャーを使用してください。
|
||||
; ・クリッピング枠によって描画を制限できます。( grc_setclip()参照 )
|
||||
; ・左右の境界クリップは、台形描画ルーチンに依存しています。
|
||||
; ・データが下記の条件に当てはまる場合、正しく描画しません。
|
||||
; ○同じy座標を経由する辺が2つを超える場所がある場合。
|
||||
; →条件により、ゼロ除算が発生したり、おかしな図形になります。
|
||||
; (凸多角形でなくても、上記以外なら正しく描画します)
|
||||
;
|
||||
; COMPILER/ASSEMBLER:
|
||||
; TASM 3.0
|
||||
; OPTASM 1.6
|
||||
;
|
||||
; 関連関数:
|
||||
; grc_setclip()
|
||||
; make_linework
|
||||
; draw_trapezoid
|
||||
;
|
||||
; AUTHOR:
|
||||
; 恋塚昭彦
|
||||
;
|
||||
; HISTORY:
|
||||
; 92/5/18 Initial(C版)
|
||||
; 92/5/19 bugfix
|
||||
; 92/5/20 とりあえず、左右と下端のクリップをやった。
|
||||
; 92/5/21 左右の先判定と、上もクリップしたぞ。(あーのんびり。)
|
||||
; 92/6/4 Initial(asm版 gc_4corn.asm)
|
||||
; 92/6/5 gc_polyg.asm
|
||||
; 92/6/6 ClipYT_seg対応
|
||||
; 92/6/16 TASM対応
|
||||
; 92/6/19 gc_polgc.asm
|
||||
; 92/6/21 Pascal対応
|
||||
|
||||
IF datasize EQ 2
|
||||
MOVPTS macro to, from
|
||||
mov to,ES:from
|
||||
endm
|
||||
CMPPTS macro pts, dat
|
||||
cmp ES:pts,dat
|
||||
endm
|
||||
SUBPTS macro reg,pts
|
||||
sub reg,ES:pts
|
||||
endm
|
||||
LODPTS macro reg
|
||||
les reg,[BP+@@pts]
|
||||
endm
|
||||
ELSE
|
||||
MOVPTS macro to, from
|
||||
mov to,from
|
||||
endm
|
||||
CMPPTS macro pts, dat
|
||||
cmp pts,dat
|
||||
endm
|
||||
SUBPTS macro reg,pts
|
||||
sub reg,pts
|
||||
endm
|
||||
LODPTS macro reg
|
||||
mov reg,[BP+@@pts]
|
||||
endm
|
||||
ENDIF
|
||||
|
||||
MRETURN macro
|
||||
pop SI
|
||||
pop DI
|
||||
leave
|
||||
ret (datasize+1)*2
|
||||
EVEN
|
||||
endm
|
||||
|
||||
; void _pascal grcg_polygon_c( Point pts[], int npoint ) ;
|
||||
;
|
||||
func GRCG_POLYGON_C
|
||||
push BP
|
||||
mov BP,SP
|
||||
sub SP,12 ; ローカル変数のサイズ
|
||||
push DI
|
||||
push SI
|
||||
|
||||
; パラメータ
|
||||
@@pts = (RETSIZE+2)*2
|
||||
@@npoint = (RETSIZE+1)*2
|
||||
|
||||
; ローカル変数
|
||||
@@ry = -2 ; 左のy
|
||||
@@ty = -4 ; 上端のy
|
||||
@@ly = -6 ; 右のy
|
||||
@@nl = -8 ; 左の点の添え字(byte単位)
|
||||
@@nr = -10 ; 右の点の添え字(byte単位)
|
||||
@@by = -12 ; 下端のy
|
||||
|
||||
mov AX,[BP+@@npoint]
|
||||
dec AX
|
||||
mov CX,AX ; CX = 本来の npoint
|
||||
shl AX,2
|
||||
mov [BP+@@npoint],AX ; npoint = (npoint-1)*4
|
||||
|
||||
; 頂上を探す〜 ----------------
|
||||
|
||||
LODPTS SI ; SI = pts
|
||||
xor AX,AX
|
||||
mov [BP+@@nl],AX ; nl = 0
|
||||
mov [BP+@@nr],AX ; nr = 0
|
||||
MOVPTS AX,[SI+2]
|
||||
mov [BP+@@ty],AX ; ty = pts[0].y
|
||||
mov [BP+@@by],AX ; by = pts[0].y
|
||||
MOVPTS AX,[SI] ; AX = pts[0].x (AX=lx)
|
||||
mov DI,AX ; DI = pts[0].x (DI=rx)
|
||||
mov BX,4 ; BX = 1*4
|
||||
|
||||
@@LOOP1: ; x,y の各最大値と最小値を得るループ
|
||||
MOVPTS DX,[BX+SI+2] ; pts[i].y
|
||||
cmp DX,[BP+@@ty]
|
||||
jge short @@S10
|
||||
mov [BP+@@nl],BX ; nlは、頂上の最初にみつけた点
|
||||
mov [BP+@@nr],BX ; nrは、頂上の最後に見つけた点
|
||||
mov [BP+@@ty],DX
|
||||
jmp short @@S30
|
||||
EVEN
|
||||
@@S10:
|
||||
cmp [BP+@@ty],DX
|
||||
jne short @@S20
|
||||
mov [BP+@@nr],BX
|
||||
jmp short @@S30
|
||||
EVEN
|
||||
@@S20:
|
||||
cmp [BP+@@by],DX
|
||||
jge short @@S30
|
||||
mov [BP+@@by],DX
|
||||
@@S30:
|
||||
MOVPTS DX,[BX+SI] ; pts[].x
|
||||
cmp AX,DX
|
||||
jl short @@S40
|
||||
mov AX,DX
|
||||
jmp short @@S50
|
||||
EVEN
|
||||
|
||||
; へんなところに潜ってるが、クリップの近場にreturn処理が
|
||||
; いるのだ〜
|
||||
@@RETURN1:
|
||||
MRETURN
|
||||
EVEN
|
||||
@@S40: ; else
|
||||
cmp DI,DX
|
||||
jge short @@S50
|
||||
mov DI,DX
|
||||
@@S50:
|
||||
add BX,4
|
||||
loop short @@LOOP1
|
||||
; ループ終り ----------------
|
||||
|
||||
; 範囲検査
|
||||
cmp ClipXR,AX
|
||||
jl short @@RETURN1 ; 完全に右に外れてる
|
||||
|
||||
cmp ClipXL,DI
|
||||
jg short @@RETURN1 ; 完全に左に外れてる
|
||||
|
||||
mov AX,[BP+@@ty]
|
||||
cmp ClipYB,AX
|
||||
jl short @@RETURN1 ; 完全に下に外れてる
|
||||
|
||||
mov DX,[BP+@@by]
|
||||
cmp ClipYT,DX
|
||||
jg short @@RETURN1 ; 完全に上に外れてる
|
||||
|
||||
; **** さあ、ここに来たからには、かならず描画できるんだぞ。 ****
|
||||
; (台形による最後のクリップを宛てにしてるから)
|
||||
|
||||
; 描画セグメント設定
|
||||
IF datasize NE 2
|
||||
mov ES,ClipYT_seg
|
||||
ENDIF
|
||||
|
||||
; 下のy座標を先にクリップ枠で切断する
|
||||
mov AX,ClipYB
|
||||
cmp AX,DX
|
||||
jge short @@S100
|
||||
mov DX,AX
|
||||
@@S100:
|
||||
mov [BP+@@by],DX
|
||||
|
||||
; nlが最初、nr最後ならば、入れ換え。(わかりにくい〜)
|
||||
; (凸多角形ならば、ある点の他に同じy座標の点は1つ以下にしか
|
||||
; ならない。従って、頂上を共有する点は2つ以内なので、座標列の
|
||||
; 端をまたがるのはこのパターンのみとなる)
|
||||
mov AX,[BP+@@npoint]
|
||||
cmp WORD PTR [BP+@@nl],0
|
||||
jne short @@S110
|
||||
cmp [BP+@@nr],AX
|
||||
jne short @@S110
|
||||
mov [BP+@@nl],AX
|
||||
mov WORD PTR [BP+@@nr],0
|
||||
@@S110:
|
||||
|
||||
; 左側辺の、上にはみ出ている部分を飛ばし ***
|
||||
mov BX,[BP+@@nl] ; BX = nl
|
||||
mov DX,[BP+@@npoint]
|
||||
mov AX,ClipYT
|
||||
@@LOOPL:
|
||||
mov CX,BX
|
||||
sub BX,4
|
||||
jns short @@SKIPL
|
||||
mov BX,DX
|
||||
@@SKIPL:
|
||||
CMPPTS [BX+SI+2],AX
|
||||
jl short @@LOOPL
|
||||
MOVPTS AX,[BX+SI+2]
|
||||
mov [BP+@@ly],AX ; ly = pts[nl].y
|
||||
mov [BP+@@nl],BX
|
||||
|
||||
; 最初の左側辺データを作成
|
||||
|
||||
mov BX,CX ; BX = i
|
||||
MOVPTS DX,[SI+BX+2] ; DX = ty = pts[i].y
|
||||
MOVPTS DI,[SI+BX] ; DI = wx = pts[i].x
|
||||
mov BX,[BP+@@nl]
|
||||
cmp DX,ClipYT
|
||||
jge short @@S200
|
||||
mov AX,DX
|
||||
sub AX,[BP+@@ly] ; push (ty-ly)
|
||||
PUSH AX
|
||||
mov AX,DI ; AX = ((DI=wx) - pts[nl].x)
|
||||
SUBPTS AX,[SI+BX]
|
||||
mov CX,ClipYT
|
||||
sub CX,DX ; CX = (ClipYT - (DX=ty))
|
||||
imul CX
|
||||
POP CX
|
||||
idiv CX ; DI = (wx-pts[nl].x) * (ClipYT-ty)
|
||||
add DI,AX ; / (ty-ly) + wx
|
||||
mov DX,ClipYT ; ty = ClipYT
|
||||
@@S200:
|
||||
mov [BP+@@ty],DX
|
||||
|
||||
xchg DI,DX
|
||||
MOVPTS AX,[SI+BX] ; pts[nl].x
|
||||
mov CX,[BP+@@ly]
|
||||
sub CX,DI ; CX = (ly-ty)
|
||||
mov BX,offset trapez_a
|
||||
call make_linework
|
||||
|
||||
|
||||
; 右側辺の、上にはみ出ている部分を飛ばし ***
|
||||
|
||||
mov BX,[BP+@@nr] ; BX = nr
|
||||
mov CX,[BP+@@npoint]
|
||||
mov AX,ClipYT
|
||||
@@LOOPR:
|
||||
mov DI,BX ; DI = i
|
||||
add BX,4 ; BX = nr
|
||||
cmp BX,CX
|
||||
jle short @@SKIPR
|
||||
xor BX,BX
|
||||
@@SKIPR:
|
||||
CMPPTS [SI+BX+2],AX
|
||||
jl short @@LOOPR
|
||||
|
||||
MOVPTS AX,[SI+BX+2]
|
||||
mov [BP+@@ry],AX
|
||||
mov [BP+@@nr],BX
|
||||
|
||||
; 最初の右側辺データを作成
|
||||
add DI,SI
|
||||
MOVPTS CX,[DI+2] ; CX = pts[i].y
|
||||
MOVPTS DI,[DI] ; DI = wx = pts[i].x
|
||||
MOVPTS BX,[SI+BX] ; BX = pts[nr].x
|
||||
|
||||
cmp CX,[BP+@@ty]
|
||||
jge short @@S300
|
||||
mov AX,ClipYT ; (ClipYT - pts[i].y)
|
||||
sub AX,CX
|
||||
push CX
|
||||
mov CX,DI ; (wx - pts[nr].x)
|
||||
sub CX,BX
|
||||
imul CX
|
||||
pop CX
|
||||
sub CX,[BP+@@ry] ; (pts[i].y - ry)
|
||||
idiv CX
|
||||
add DI,AX ; + wx
|
||||
@@S300:
|
||||
mov DX,DI
|
||||
mov AX,BX ; pts[nr].x
|
||||
mov CX,[BP+@@ry]
|
||||
sub CX,[BP+@@ty]
|
||||
mov BX,offset trapez_b
|
||||
call make_linework
|
||||
|
||||
; 実際に描画していくんだ[よーん] ========================
|
||||
|
||||
mov SI,[BP+@@ty] ; SI = ty
|
||||
|
||||
@@DRAWLOOP:
|
||||
mov DI,[BP+@@ly] ; DI = y2
|
||||
cmp DI,[BP+@@ry]
|
||||
jle short @@S400
|
||||
mov DI,[BP+@@ry]
|
||||
@@S400:
|
||||
cmp [BP+@@by],DI ; 下クリップ
|
||||
jle short @@S500
|
||||
|
||||
PUSH DI
|
||||
lea DX,[DI-1]
|
||||
sub DX,SI ; DX = y2-1 - ty
|
||||
sub SI,ClipYT
|
||||
mov AX,SI ; SI = ty*80
|
||||
shl SI,2
|
||||
add SI,AX
|
||||
shl SI,4
|
||||
IF datasize EQ 2
|
||||
mov ES,ClipYT_seg
|
||||
ENDIF
|
||||
call draw_trapezoid ; **** DRAW ****
|
||||
POP SI
|
||||
|
||||
LODPTS DI ; DI = pts
|
||||
cmp SI,[BP+@@ly] ; if ( ty == ly )
|
||||
jne short @@S410
|
||||
|
||||
mov BX,[BP+@@nl]
|
||||
MOVPTS DX,[BX+DI] ; DX = pts[nl].x
|
||||
sub BX,4
|
||||
jns short @@S405
|
||||
mov BX,[BP+@@npoint]
|
||||
@@S405:
|
||||
mov [BP+@@nl],BX
|
||||
MOVPTS AX,[DI+BX] ; AX = pts[nl].x
|
||||
MOVPTS CX,[DI+BX+2] ; CX = (ly = pts[nl].y) - ty
|
||||
mov [BP+@@ly],CX
|
||||
sub CX,SI
|
||||
mov BX,offset trapez_a
|
||||
; DX = last pts[nl].x
|
||||
call make_linework
|
||||
|
||||
@@S410: ; if ( ty == ry )
|
||||
cmp [BP+@@ry],SI
|
||||
jne short @@DRAWLOOP
|
||||
|
||||
mov BX,[BP+@@nr] ; BX = nr
|
||||
MOVPTS DX,[BX+DI]
|
||||
add BX,4
|
||||
cmp BX,[BP+@@npoint]
|
||||
jle short @@S420
|
||||
xor BX,BX
|
||||
@@S420:
|
||||
mov [BP+@@nr],BX
|
||||
MOVPTS AX,[DI+BX] ; AX = pts[nr].x
|
||||
MOVPTS CX,[DI+BX+2] ; CX = pts[nr].y
|
||||
mov [BP+@@ry],CX ; ry = CX
|
||||
sub CX,SI ; CX -= SI
|
||||
mov BX,offset trapez_b
|
||||
push offset @@DRAWLOOP
|
||||
jmp make_linework ; まさか!!
|
||||
EVEN
|
||||
|
||||
; 一番下の台形
|
||||
@@S500:
|
||||
|
||||
IF datasize EQ 2
|
||||
mov ES,ClipYT_seg
|
||||
ENDIF
|
||||
mov DX,[BP+@@by]
|
||||
sub DX,SI ; DX = by - ty
|
||||
sub SI,ClipYT
|
||||
mov AX,SI ; SI = ty*80
|
||||
shl SI,2
|
||||
add SI,AX
|
||||
shl SI,4
|
||||
call draw_trapezoid
|
||||
MRETURN
|
||||
endfunc
|
273
th02_op.asm
273
th02_op.asm
|
@ -57,276 +57,7 @@ include libs/master.lib/grcg_boxfill.asm
|
|||
include libs/master.lib/grc_setclip.asm
|
||||
include libs/master.lib/grcg_fill.asm
|
||||
include libs/master.lib/grcg_hline.asm
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
; Attributes: bp-based frame
|
||||
|
||||
sub_C7C proc far
|
||||
|
||||
var_C = word ptr -0Ch
|
||||
var_A = word ptr -0Ah
|
||||
var_8 = word ptr -8
|
||||
var_6 = word ptr -6
|
||||
var_4 = word ptr -4
|
||||
var_2 = word ptr -2
|
||||
arg_0 = word ptr 6
|
||||
arg_2 = dword ptr 8
|
||||
|
||||
push bp
|
||||
mov bp, sp
|
||||
sub sp, 0Ch
|
||||
push di
|
||||
push si
|
||||
mov ax, [bp+arg_0]
|
||||
dec ax
|
||||
mov cx, ax
|
||||
shl ax, 2
|
||||
mov [bp+arg_0], ax
|
||||
les si, [bp+arg_2]
|
||||
xor ax, ax
|
||||
mov [bp+var_8], ax
|
||||
mov [bp+var_A], ax
|
||||
mov ax, es:[si+2]
|
||||
mov [bp+var_4], ax
|
||||
mov [bp+var_C], ax
|
||||
mov ax, es:[si]
|
||||
mov di, ax
|
||||
mov bx, 4
|
||||
|
||||
loc_CAD:
|
||||
mov dx, es:[bx+si+2]
|
||||
cmp dx, [bp+var_4]
|
||||
jge short loc_CC2
|
||||
mov [bp+var_8], bx
|
||||
mov [bp+var_A], bx
|
||||
mov [bp+var_4], dx
|
||||
jmp short loc_CD4
|
||||
; ---------------------------------------------------------------------------
|
||||
nop
|
||||
|
||||
loc_CC2:
|
||||
cmp [bp+var_4], dx
|
||||
jnz short loc_CCC
|
||||
mov [bp+var_A], bx
|
||||
jmp short loc_CD4
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_CCC:
|
||||
cmp [bp+var_C], dx
|
||||
jge short loc_CD4
|
||||
mov [bp+var_C], dx
|
||||
|
||||
loc_CD4:
|
||||
mov dx, es:[bx+si]
|
||||
cmp ax, dx
|
||||
jl short loc_CE6
|
||||
mov ax, dx
|
||||
jmp short loc_CEC
|
||||
; ---------------------------------------------------------------------------
|
||||
nop
|
||||
|
||||
loc_CE0:
|
||||
pop si
|
||||
pop di
|
||||
leave
|
||||
retf 6
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_CE6:
|
||||
cmp di, dx
|
||||
jge short loc_CEC
|
||||
mov di, dx
|
||||
|
||||
loc_CEC:
|
||||
add bx, 4
|
||||
loop loc_CAD
|
||||
cmp ClipXR, ax
|
||||
jl short loc_CE0
|
||||
cmp ClipXL, di
|
||||
jg short loc_CE0
|
||||
mov ax, [bp+var_4]
|
||||
cmp ClipYB, ax
|
||||
jl short loc_CE0
|
||||
mov dx, [bp+var_C]
|
||||
cmp ClipYT, dx
|
||||
jg short loc_CE0
|
||||
mov ax, ClipYB
|
||||
cmp ax, dx
|
||||
jge short loc_D18
|
||||
mov dx, ax
|
||||
|
||||
loc_D18:
|
||||
mov [bp+var_C], dx
|
||||
mov ax, [bp+arg_0]
|
||||
cmp [bp+var_8], 0
|
||||
jnz short loc_D31
|
||||
cmp [bp+var_A], ax
|
||||
jnz short loc_D31
|
||||
mov [bp+var_8], ax
|
||||
mov [bp+var_A], 0
|
||||
|
||||
loc_D31:
|
||||
mov bx, [bp+var_8]
|
||||
mov dx, [bp+arg_0]
|
||||
mov ax, ClipYT
|
||||
|
||||
loc_D3A:
|
||||
mov cx, bx
|
||||
sub bx, 4
|
||||
jns short loc_D43
|
||||
mov bx, dx
|
||||
|
||||
loc_D43:
|
||||
cmp es:[bx+si+2], ax
|
||||
jl short loc_D3A
|
||||
mov ax, es:[bx+si+2]
|
||||
mov [bp+var_6], ax
|
||||
mov [bp+var_8], bx
|
||||
mov bx, cx
|
||||
mov dx, es:[bx+si+2]
|
||||
mov di, es:[bx+si]
|
||||
mov bx, [bp+var_8]
|
||||
cmp dx, ClipYT
|
||||
jge short loc_D81
|
||||
mov ax, dx
|
||||
sub ax, [bp+var_6]
|
||||
push ax
|
||||
mov ax, di
|
||||
sub ax, es:[bx+si]
|
||||
mov cx, ClipYT
|
||||
sub cx, dx
|
||||
imul cx
|
||||
pop cx
|
||||
idiv cx
|
||||
add di, ax
|
||||
mov dx, ClipYT
|
||||
|
||||
loc_D81:
|
||||
mov [bp+var_4], dx
|
||||
xchg di, dx
|
||||
mov ax, es:[bx+si]
|
||||
mov cx, [bp+var_6]
|
||||
sub cx, di
|
||||
mov bx, 12D4h
|
||||
call make_linework
|
||||
mov bx, [bp+var_A]
|
||||
mov cx, [bp+arg_0]
|
||||
mov ax, ClipYT
|
||||
|
||||
loc_D9D:
|
||||
mov di, bx
|
||||
add bx, 4
|
||||
cmp bx, cx
|
||||
jle short loc_DA8
|
||||
xor bx, bx
|
||||
|
||||
loc_DA8:
|
||||
cmp es:[bx+si+2], ax
|
||||
jl short loc_D9D
|
||||
mov ax, es:[bx+si+2]
|
||||
mov [bp+var_2], ax
|
||||
mov [bp+var_A], bx
|
||||
add di, si
|
||||
mov cx, es:[di+2]
|
||||
mov di, es:[di]
|
||||
mov bx, es:[bx+si]
|
||||
cmp cx, [bp+var_4]
|
||||
jge short loc_DDD
|
||||
mov ax, ClipYT
|
||||
sub ax, cx
|
||||
push cx
|
||||
mov cx, di
|
||||
sub cx, bx
|
||||
imul cx
|
||||
pop cx
|
||||
sub cx, [bp+var_2]
|
||||
idiv cx
|
||||
add di, ax
|
||||
|
||||
loc_DDD:
|
||||
mov dx, di
|
||||
mov ax, bx
|
||||
mov cx, [bp+var_2]
|
||||
sub cx, [bp+var_4]
|
||||
mov bx, 12DCh
|
||||
call make_linework
|
||||
mov si, [bp+var_4]
|
||||
|
||||
loc_DF0:
|
||||
mov di, [bp+var_6]
|
||||
cmp di, [bp+var_2]
|
||||
jle short loc_DFB
|
||||
mov di, [bp+var_2]
|
||||
|
||||
loc_DFB:
|
||||
cmp [bp+var_C], di
|
||||
jle short loc_E74
|
||||
push di
|
||||
lea dx, [di-1]
|
||||
sub dx, si
|
||||
sub si, ClipYT
|
||||
mov ax, si
|
||||
shl si, 2
|
||||
add si, ax
|
||||
shl si, 4
|
||||
mov es, ClipYT_seg
|
||||
call draw_trapezoid
|
||||
pop si
|
||||
les di, [bp+arg_2]
|
||||
cmp si, [bp+var_6]
|
||||
jnz short loc_E47
|
||||
mov bx, [bp+var_8]
|
||||
mov dx, es:[bx+di]
|
||||
sub bx, 4
|
||||
jns short loc_E32
|
||||
mov bx, [bp+arg_0]
|
||||
|
||||
loc_E32:
|
||||
mov [bp+var_8], bx
|
||||
mov ax, es:[bx+di]
|
||||
mov cx, es:[bx+di+2]
|
||||
mov [bp+var_6], cx
|
||||
sub cx, si
|
||||
mov bx, 12D4h
|
||||
call make_linework
|
||||
|
||||
loc_E47:
|
||||
cmp [bp+var_2], si
|
||||
jnz short loc_DF0
|
||||
mov bx, [bp+var_A]
|
||||
mov dx, es:[bx+di]
|
||||
add bx, 4
|
||||
cmp bx, [bp+arg_0]
|
||||
jle short loc_E5C
|
||||
xor bx, bx
|
||||
|
||||
loc_E5C:
|
||||
mov [bp+var_A], bx
|
||||
mov ax, es:[bx+di]
|
||||
mov cx, es:[bx+di+2]
|
||||
mov [bp+var_2], cx
|
||||
sub cx, si
|
||||
mov bx, 12DCh
|
||||
push 0DF0h
|
||||
jmp make_linework
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_E74:
|
||||
mov es, ClipYT_seg
|
||||
mov dx, [bp+var_C]
|
||||
sub dx, si
|
||||
sub si, ClipYT
|
||||
mov ax, si
|
||||
shl si, 2
|
||||
add si, ax
|
||||
shl si, 4
|
||||
call draw_trapezoid
|
||||
pop si
|
||||
pop di
|
||||
leave
|
||||
retf 6
|
||||
sub_C7C endp
|
||||
include libs/master.lib/grcg_polygon_c.asm
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; START OF FUNCTION CHUNK FOR sub_EAA
|
||||
|
@ -9166,7 +8897,7 @@ loc_C38B:
|
|||
idiv bx
|
||||
add ax, 3
|
||||
push ax
|
||||
call sub_C7C
|
||||
call grcg_polygon_c
|
||||
inc si
|
||||
|
||||
loc_C3A1:
|
||||
|
|
274
th03_op.asm
274
th03_op.asm
|
@ -58,277 +58,7 @@ include libs/master.lib/dos_close.asm
|
|||
include libs/master.lib/dos_ropen.asm
|
||||
include libs/master.lib/grcg_boxfill.asm
|
||||
include libs/master.lib/grcg_byteboxfill_x.asm
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
; Attributes: bp-based frame
|
||||
|
||||
sub_C6A proc far
|
||||
|
||||
var_C = word ptr -0Ch
|
||||
var_A = word ptr -0Ah
|
||||
var_8 = word ptr -8
|
||||
var_6 = word ptr -6
|
||||
var_4 = word ptr -4
|
||||
var_2 = word ptr -2
|
||||
arg_0 = word ptr 6
|
||||
arg_2 = dword ptr 8
|
||||
|
||||
push bp
|
||||
mov bp, sp
|
||||
sub sp, 0Ch
|
||||
push di
|
||||
push si
|
||||
mov ax, [bp+arg_0]
|
||||
dec ax
|
||||
mov cx, ax
|
||||
shl ax, 2
|
||||
mov [bp+arg_0], ax
|
||||
les si, [bp+arg_2]
|
||||
xor ax, ax
|
||||
mov [bp+var_8], ax
|
||||
mov [bp+var_A], ax
|
||||
mov ax, es:[si+2]
|
||||
mov [bp+var_4], ax
|
||||
mov [bp+var_C], ax
|
||||
mov ax, es:[si]
|
||||
mov di, ax
|
||||
mov bx, 4
|
||||
|
||||
loc_C9B:
|
||||
mov dx, es:[bx+si+2]
|
||||
cmp dx, [bp+var_4]
|
||||
jge short loc_CB0
|
||||
mov [bp+var_8], bx
|
||||
mov [bp+var_A], bx
|
||||
mov [bp+var_4], dx
|
||||
jmp short loc_CC2
|
||||
; ---------------------------------------------------------------------------
|
||||
nop
|
||||
|
||||
loc_CB0:
|
||||
cmp [bp+var_4], dx
|
||||
jnz short loc_CBA
|
||||
mov [bp+var_A], bx
|
||||
jmp short loc_CC2
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_CBA:
|
||||
cmp [bp+var_C], dx
|
||||
jge short loc_CC2
|
||||
mov [bp+var_C], dx
|
||||
|
||||
loc_CC2:
|
||||
mov dx, es:[bx+si]
|
||||
cmp ax, dx
|
||||
jl short loc_CD4
|
||||
mov ax, dx
|
||||
jmp short loc_CDA
|
||||
; ---------------------------------------------------------------------------
|
||||
nop
|
||||
|
||||
loc_CCE:
|
||||
pop si
|
||||
pop di
|
||||
leave
|
||||
retf 6
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_CD4:
|
||||
cmp di, dx
|
||||
jge short loc_CDA
|
||||
mov di, dx
|
||||
|
||||
loc_CDA:
|
||||
add bx, 4
|
||||
loop loc_C9B
|
||||
cmp ClipXR, ax
|
||||
jl short loc_CCE
|
||||
cmp ClipXL, di
|
||||
jg short loc_CCE
|
||||
mov ax, [bp+var_4]
|
||||
cmp ClipYB, ax
|
||||
jl short loc_CCE
|
||||
mov dx, [bp+var_C]
|
||||
cmp ClipYT, dx
|
||||
jg short loc_CCE
|
||||
mov ax, ClipYB
|
||||
cmp ax, dx
|
||||
jge short loc_D06
|
||||
mov dx, ax
|
||||
|
||||
loc_D06:
|
||||
mov [bp+var_C], dx
|
||||
mov ax, [bp+arg_0]
|
||||
cmp [bp+var_8], 0
|
||||
jnz short loc_D1F
|
||||
cmp [bp+var_A], ax
|
||||
jnz short loc_D1F
|
||||
mov [bp+var_8], ax
|
||||
mov [bp+var_A], 0
|
||||
|
||||
loc_D1F:
|
||||
mov bx, [bp+var_8]
|
||||
mov dx, [bp+arg_0]
|
||||
mov ax, ClipYT
|
||||
|
||||
loc_D28:
|
||||
mov cx, bx
|
||||
sub bx, 4
|
||||
jns short loc_D31
|
||||
mov bx, dx
|
||||
|
||||
loc_D31:
|
||||
cmp es:[bx+si+2], ax
|
||||
jl short loc_D28
|
||||
mov ax, es:[bx+si+2]
|
||||
mov [bp+var_6], ax
|
||||
mov [bp+var_8], bx
|
||||
mov bx, cx
|
||||
mov dx, es:[bx+si+2]
|
||||
mov di, es:[bx+si]
|
||||
mov bx, [bp+var_8]
|
||||
cmp dx, ClipYT
|
||||
jge short loc_D6F
|
||||
mov ax, dx
|
||||
sub ax, [bp+var_6]
|
||||
push ax
|
||||
mov ax, di
|
||||
sub ax, es:[bx+si]
|
||||
mov cx, ClipYT
|
||||
sub cx, dx
|
||||
imul cx
|
||||
pop cx
|
||||
idiv cx
|
||||
add di, ax
|
||||
mov dx, ClipYT
|
||||
|
||||
loc_D6F:
|
||||
mov [bp+var_4], dx
|
||||
xchg di, dx
|
||||
mov ax, es:[bx+si]
|
||||
mov cx, [bp+var_6]
|
||||
sub cx, di
|
||||
mov bx, 1190h
|
||||
call make_linework
|
||||
mov bx, [bp+var_A]
|
||||
mov cx, [bp+arg_0]
|
||||
mov ax, ClipYT
|
||||
|
||||
loc_D8B:
|
||||
mov di, bx
|
||||
add bx, 4
|
||||
cmp bx, cx
|
||||
jle short loc_D96
|
||||
xor bx, bx
|
||||
|
||||
loc_D96:
|
||||
cmp es:[bx+si+2], ax
|
||||
jl short loc_D8B
|
||||
mov ax, es:[bx+si+2]
|
||||
mov [bp+var_2], ax
|
||||
mov [bp+var_A], bx
|
||||
add di, si
|
||||
mov cx, es:[di+2]
|
||||
mov di, es:[di]
|
||||
mov bx, es:[bx+si]
|
||||
cmp cx, [bp+var_4]
|
||||
jge short loc_DCB
|
||||
mov ax, ClipYT
|
||||
sub ax, cx
|
||||
push cx
|
||||
mov cx, di
|
||||
sub cx, bx
|
||||
imul cx
|
||||
pop cx
|
||||
sub cx, [bp+var_2]
|
||||
idiv cx
|
||||
add di, ax
|
||||
|
||||
loc_DCB:
|
||||
mov dx, di
|
||||
mov ax, bx
|
||||
mov cx, [bp+var_2]
|
||||
sub cx, [bp+var_4]
|
||||
mov bx, 1198h
|
||||
call make_linework
|
||||
mov si, [bp+var_4]
|
||||
|
||||
loc_DDE:
|
||||
mov di, [bp+var_6]
|
||||
cmp di, [bp+var_2]
|
||||
jle short loc_DE9
|
||||
mov di, [bp+var_2]
|
||||
|
||||
loc_DE9:
|
||||
cmp [bp+var_C], di
|
||||
jle short loc_E62
|
||||
push di
|
||||
lea dx, [di-1]
|
||||
sub dx, si
|
||||
sub si, ClipYT
|
||||
mov ax, si
|
||||
shl si, 2
|
||||
add si, ax
|
||||
shl si, 4
|
||||
mov es, ClipYT_seg
|
||||
call draw_trapezoid
|
||||
pop si
|
||||
les di, [bp+arg_2]
|
||||
cmp si, [bp+var_6]
|
||||
jnz short loc_E35
|
||||
mov bx, [bp+var_8]
|
||||
mov dx, es:[bx+di]
|
||||
sub bx, 4
|
||||
jns short loc_E20
|
||||
mov bx, [bp+arg_0]
|
||||
|
||||
loc_E20:
|
||||
mov [bp+var_8], bx
|
||||
mov ax, es:[bx+di]
|
||||
mov cx, es:[bx+di+2]
|
||||
mov [bp+var_6], cx
|
||||
sub cx, si
|
||||
mov bx, 1190h
|
||||
call make_linework
|
||||
|
||||
loc_E35:
|
||||
cmp [bp+var_2], si
|
||||
jnz short loc_DDE
|
||||
mov bx, [bp+var_A]
|
||||
mov dx, es:[bx+di]
|
||||
add bx, 4
|
||||
cmp bx, [bp+arg_0]
|
||||
jle short loc_E4A
|
||||
xor bx, bx
|
||||
|
||||
loc_E4A:
|
||||
mov [bp+var_A], bx
|
||||
mov ax, es:[bx+di]
|
||||
mov cx, es:[bx+di+2]
|
||||
mov [bp+var_2], cx
|
||||
sub cx, si
|
||||
mov bx, 1198h
|
||||
push 0DDEh
|
||||
jmp make_linework
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_E62:
|
||||
mov es, ClipYT_seg
|
||||
mov dx, [bp+var_C]
|
||||
sub dx, si
|
||||
sub si, ClipYT
|
||||
mov ax, si
|
||||
shl si, 2
|
||||
add si, ax
|
||||
shl si, 4
|
||||
call draw_trapezoid
|
||||
pop si
|
||||
pop di
|
||||
leave
|
||||
retf 6
|
||||
sub_C6A endp
|
||||
|
||||
include libs/master.lib/grcg_polygon_c.asm
|
||||
include libs/master.lib/grcg_pset.asm
|
||||
include libs/master.lib/grcg_setcolor.asm
|
||||
include libs/master.lib/gaiji_backup.asm
|
||||
|
@ -6070,7 +5800,7 @@ loc_A879:
|
|||
idiv bx
|
||||
add ax, 3
|
||||
push ax
|
||||
call sub_C6A
|
||||
call grcg_polygon_c
|
||||
inc si
|
||||
|
||||
loc_A88F:
|
||||
|
|
273
th04_op.asm
273
th04_op.asm
|
@ -62,276 +62,7 @@ include libs/master.lib/dos_ropen.asm
|
|||
include libs/master.lib/grcg_boxfill.asm
|
||||
include libs/master.lib/grcg_byteboxfill_x.asm
|
||||
include libs/master.lib/grcg_hline.asm
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
; Attributes: bp-based frame
|
||||
|
||||
sub_DC2 proc far
|
||||
|
||||
var_C = word ptr -0Ch
|
||||
var_A = word ptr -0Ah
|
||||
var_8 = word ptr -8
|
||||
var_6 = word ptr -6
|
||||
var_4 = word ptr -4
|
||||
var_2 = word ptr -2
|
||||
arg_0 = word ptr 6
|
||||
arg_2 = dword ptr 8
|
||||
|
||||
push bp
|
||||
mov bp, sp
|
||||
sub sp, 0Ch
|
||||
push di
|
||||
push si
|
||||
mov ax, [bp+arg_0]
|
||||
dec ax
|
||||
mov cx, ax
|
||||
shl ax, 2
|
||||
mov [bp+arg_0], ax
|
||||
les si, [bp+arg_2]
|
||||
xor ax, ax
|
||||
mov [bp+var_8], ax
|
||||
mov [bp+var_A], ax
|
||||
mov ax, es:[si+2]
|
||||
mov [bp+var_4], ax
|
||||
mov [bp+var_C], ax
|
||||
mov ax, es:[si]
|
||||
mov di, ax
|
||||
mov bx, 4
|
||||
|
||||
loc_DF3:
|
||||
mov dx, es:[bx+si+2]
|
||||
cmp dx, [bp+var_4]
|
||||
jge short loc_E08
|
||||
mov [bp+var_8], bx
|
||||
mov [bp+var_A], bx
|
||||
mov [bp+var_4], dx
|
||||
jmp short loc_E1A
|
||||
; ---------------------------------------------------------------------------
|
||||
nop
|
||||
|
||||
loc_E08:
|
||||
cmp [bp+var_4], dx
|
||||
jnz short loc_E12
|
||||
mov [bp+var_A], bx
|
||||
jmp short loc_E1A
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_E12:
|
||||
cmp [bp+var_C], dx
|
||||
jge short loc_E1A
|
||||
mov [bp+var_C], dx
|
||||
|
||||
loc_E1A:
|
||||
mov dx, es:[bx+si]
|
||||
cmp ax, dx
|
||||
jl short loc_E2C
|
||||
mov ax, dx
|
||||
jmp short loc_E32
|
||||
; ---------------------------------------------------------------------------
|
||||
nop
|
||||
|
||||
loc_E26:
|
||||
pop si
|
||||
pop di
|
||||
leave
|
||||
retf 6
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_E2C:
|
||||
cmp di, dx
|
||||
jge short loc_E32
|
||||
mov di, dx
|
||||
|
||||
loc_E32:
|
||||
add bx, 4
|
||||
loop loc_DF3
|
||||
cmp ClipXR, ax
|
||||
jl short loc_E26
|
||||
cmp ClipXL, di
|
||||
jg short loc_E26
|
||||
mov ax, [bp+var_4]
|
||||
cmp ClipYB, ax
|
||||
jl short loc_E26
|
||||
mov dx, [bp+var_C]
|
||||
cmp ClipYT, dx
|
||||
jg short loc_E26
|
||||
mov ax, ClipYB
|
||||
cmp ax, dx
|
||||
jge short loc_E5E
|
||||
mov dx, ax
|
||||
|
||||
loc_E5E:
|
||||
mov [bp+var_C], dx
|
||||
mov ax, [bp+arg_0]
|
||||
cmp [bp+var_8], 0
|
||||
jnz short loc_E77
|
||||
cmp [bp+var_A], ax
|
||||
jnz short loc_E77
|
||||
mov [bp+var_8], ax
|
||||
mov [bp+var_A], 0
|
||||
|
||||
loc_E77:
|
||||
mov bx, [bp+var_8]
|
||||
mov dx, [bp+arg_0]
|
||||
mov ax, ClipYT
|
||||
|
||||
loc_E80:
|
||||
mov cx, bx
|
||||
sub bx, 4
|
||||
jns short loc_E89
|
||||
mov bx, dx
|
||||
|
||||
loc_E89:
|
||||
cmp es:[bx+si+2], ax
|
||||
jl short loc_E80
|
||||
mov ax, es:[bx+si+2]
|
||||
mov [bp+var_6], ax
|
||||
mov [bp+var_8], bx
|
||||
mov bx, cx
|
||||
mov dx, es:[bx+si+2]
|
||||
mov di, es:[bx+si]
|
||||
mov bx, [bp+var_8]
|
||||
cmp dx, ClipYT
|
||||
jge short loc_EC7
|
||||
mov ax, dx
|
||||
sub ax, [bp+var_6]
|
||||
push ax
|
||||
mov ax, di
|
||||
sub ax, es:[bx+si]
|
||||
mov cx, ClipYT
|
||||
sub cx, dx
|
||||
imul cx
|
||||
pop cx
|
||||
idiv cx
|
||||
add di, ax
|
||||
mov dx, ClipYT
|
||||
|
||||
loc_EC7:
|
||||
mov [bp+var_4], dx
|
||||
xchg di, dx
|
||||
mov ax, es:[bx+si]
|
||||
mov cx, [bp+var_6]
|
||||
sub cx, di
|
||||
mov bx, 1A6Eh
|
||||
call make_linework
|
||||
mov bx, [bp+var_A]
|
||||
mov cx, [bp+arg_0]
|
||||
mov ax, ClipYT
|
||||
|
||||
loc_EE3:
|
||||
mov di, bx
|
||||
add bx, 4
|
||||
cmp bx, cx
|
||||
jle short loc_EEE
|
||||
xor bx, bx
|
||||
|
||||
loc_EEE:
|
||||
cmp es:[bx+si+2], ax
|
||||
jl short loc_EE3
|
||||
mov ax, es:[bx+si+2]
|
||||
mov [bp+var_2], ax
|
||||
mov [bp+var_A], bx
|
||||
add di, si
|
||||
mov cx, es:[di+2]
|
||||
mov di, es:[di]
|
||||
mov bx, es:[bx+si]
|
||||
cmp cx, [bp+var_4]
|
||||
jge short loc_F23
|
||||
mov ax, ClipYT
|
||||
sub ax, cx
|
||||
push cx
|
||||
mov cx, di
|
||||
sub cx, bx
|
||||
imul cx
|
||||
pop cx
|
||||
sub cx, [bp+var_2]
|
||||
idiv cx
|
||||
add di, ax
|
||||
|
||||
loc_F23:
|
||||
mov dx, di
|
||||
mov ax, bx
|
||||
mov cx, [bp+var_2]
|
||||
sub cx, [bp+var_4]
|
||||
mov bx, 1A76h
|
||||
call make_linework
|
||||
mov si, [bp+var_4]
|
||||
|
||||
loc_F36:
|
||||
mov di, [bp+var_6]
|
||||
cmp di, [bp+var_2]
|
||||
jle short loc_F41
|
||||
mov di, [bp+var_2]
|
||||
|
||||
loc_F41:
|
||||
cmp [bp+var_C], di
|
||||
jle short loc_FBA
|
||||
push di
|
||||
lea dx, [di-1]
|
||||
sub dx, si
|
||||
sub si, ClipYT
|
||||
mov ax, si
|
||||
shl si, 2
|
||||
add si, ax
|
||||
shl si, 4
|
||||
mov es, ClipYT_seg
|
||||
call draw_trapezoid
|
||||
pop si
|
||||
les di, [bp+arg_2]
|
||||
cmp si, [bp+var_6]
|
||||
jnz short loc_F8D
|
||||
mov bx, [bp+var_8]
|
||||
mov dx, es:[bx+di]
|
||||
sub bx, 4
|
||||
jns short loc_F78
|
||||
mov bx, [bp+arg_0]
|
||||
|
||||
loc_F78:
|
||||
mov [bp+var_8], bx
|
||||
mov ax, es:[bx+di]
|
||||
mov cx, es:[bx+di+2]
|
||||
mov [bp+var_6], cx
|
||||
sub cx, si
|
||||
mov bx, 1A6Eh
|
||||
call make_linework
|
||||
|
||||
loc_F8D:
|
||||
cmp [bp+var_2], si
|
||||
jnz short loc_F36
|
||||
mov bx, [bp+var_A]
|
||||
mov dx, es:[bx+di]
|
||||
add bx, 4
|
||||
cmp bx, [bp+arg_0]
|
||||
jle short loc_FA2
|
||||
xor bx, bx
|
||||
|
||||
loc_FA2:
|
||||
mov [bp+var_A], bx
|
||||
mov ax, es:[bx+di]
|
||||
mov cx, es:[bx+di+2]
|
||||
mov [bp+var_2], cx
|
||||
sub cx, si
|
||||
mov bx, 1A76h
|
||||
push 0F36h
|
||||
jmp make_linework
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_FBA:
|
||||
mov es, ClipYT_seg
|
||||
mov dx, [bp+var_C]
|
||||
sub dx, si
|
||||
sub si, ClipYT
|
||||
mov ax, si
|
||||
shl si, 2
|
||||
add si, ax
|
||||
shl si, 4
|
||||
call draw_trapezoid
|
||||
pop si
|
||||
pop di
|
||||
leave
|
||||
retf 6
|
||||
sub_DC2 endp
|
||||
include libs/master.lib/grcg_polygon_c.asm
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; START OF FUNCTION CHUNK FOR sub_FF0
|
||||
|
@ -7363,7 +7094,7 @@ loc_C224:
|
|||
idiv bx
|
||||
add ax, 3
|
||||
push ax
|
||||
call sub_DC2
|
||||
call grcg_polygon_c
|
||||
inc si
|
||||
|
||||
loc_C23A:
|
||||
|
|
274
th05_op.asm
274
th05_op.asm
|
@ -60,277 +60,7 @@ include libs/master.lib/dos_close.asm
|
|||
include libs/master.lib/dos_ropen.asm
|
||||
include libs/master.lib/grcg_byteboxfill_x.asm
|
||||
include libs/master.lib/grcg_hline.asm
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
; Attributes: bp-based frame
|
||||
|
||||
sub_CCA proc far
|
||||
|
||||
var_C = word ptr -0Ch
|
||||
var_A = word ptr -0Ah
|
||||
var_8 = word ptr -8
|
||||
var_6 = word ptr -6
|
||||
var_4 = word ptr -4
|
||||
var_2 = word ptr -2
|
||||
arg_0 = word ptr 6
|
||||
arg_2 = dword ptr 8
|
||||
|
||||
push bp
|
||||
mov bp, sp
|
||||
sub sp, 0Ch
|
||||
push di
|
||||
push si
|
||||
mov ax, [bp+arg_0]
|
||||
dec ax
|
||||
mov cx, ax
|
||||
shl ax, 2
|
||||
mov [bp+arg_0], ax
|
||||
les si, [bp+arg_2]
|
||||
xor ax, ax
|
||||
mov [bp+var_8], ax
|
||||
mov [bp+var_A], ax
|
||||
mov ax, es:[si+2]
|
||||
mov [bp+var_4], ax
|
||||
mov [bp+var_C], ax
|
||||
mov ax, es:[si]
|
||||
mov di, ax
|
||||
mov bx, 4
|
||||
|
||||
loc_CFB:
|
||||
mov dx, es:[bx+si+2]
|
||||
cmp dx, [bp+var_4]
|
||||
jge short loc_D10
|
||||
mov [bp+var_8], bx
|
||||
mov [bp+var_A], bx
|
||||
mov [bp+var_4], dx
|
||||
jmp short loc_D22
|
||||
; ---------------------------------------------------------------------------
|
||||
nop
|
||||
|
||||
loc_D10:
|
||||
cmp [bp+var_4], dx
|
||||
jnz short loc_D1A
|
||||
mov [bp+var_A], bx
|
||||
jmp short loc_D22
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_D1A:
|
||||
cmp [bp+var_C], dx
|
||||
jge short loc_D22
|
||||
mov [bp+var_C], dx
|
||||
|
||||
loc_D22:
|
||||
mov dx, es:[bx+si]
|
||||
cmp ax, dx
|
||||
jl short loc_D34
|
||||
mov ax, dx
|
||||
jmp short loc_D3A
|
||||
; ---------------------------------------------------------------------------
|
||||
nop
|
||||
|
||||
loc_D2E:
|
||||
pop si
|
||||
pop di
|
||||
leave
|
||||
retf 6
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_D34:
|
||||
cmp di, dx
|
||||
jge short loc_D3A
|
||||
mov di, dx
|
||||
|
||||
loc_D3A:
|
||||
add bx, 4
|
||||
loop loc_CFB
|
||||
cmp ClipXR, ax
|
||||
jl short loc_D2E
|
||||
cmp ClipXL, di
|
||||
jg short loc_D2E
|
||||
mov ax, [bp+var_4]
|
||||
cmp ClipYB, ax
|
||||
jl short loc_D2E
|
||||
mov dx, [bp+var_C]
|
||||
cmp ClipYT, dx
|
||||
jg short loc_D2E
|
||||
mov ax, ClipYB
|
||||
cmp ax, dx
|
||||
jge short loc_D66
|
||||
mov dx, ax
|
||||
|
||||
loc_D66:
|
||||
mov [bp+var_C], dx
|
||||
mov ax, [bp+arg_0]
|
||||
cmp [bp+var_8], 0
|
||||
jnz short loc_D7F
|
||||
cmp [bp+var_A], ax
|
||||
jnz short loc_D7F
|
||||
mov [bp+var_8], ax
|
||||
mov [bp+var_A], 0
|
||||
|
||||
loc_D7F:
|
||||
mov bx, [bp+var_8]
|
||||
mov dx, [bp+arg_0]
|
||||
mov ax, ClipYT
|
||||
|
||||
loc_D88:
|
||||
mov cx, bx
|
||||
sub bx, 4
|
||||
jns short loc_D91
|
||||
mov bx, dx
|
||||
|
||||
loc_D91:
|
||||
cmp es:[bx+si+2], ax
|
||||
jl short loc_D88
|
||||
mov ax, es:[bx+si+2]
|
||||
mov [bp+var_6], ax
|
||||
mov [bp+var_8], bx
|
||||
mov bx, cx
|
||||
mov dx, es:[bx+si+2]
|
||||
mov di, es:[bx+si]
|
||||
mov bx, [bp+var_8]
|
||||
cmp dx, ClipYT
|
||||
jge short loc_DCF
|
||||
mov ax, dx
|
||||
sub ax, [bp+var_6]
|
||||
push ax
|
||||
mov ax, di
|
||||
sub ax, es:[bx+si]
|
||||
mov cx, ClipYT
|
||||
sub cx, dx
|
||||
imul cx
|
||||
pop cx
|
||||
idiv cx
|
||||
add di, ax
|
||||
mov dx, ClipYT
|
||||
|
||||
loc_DCF:
|
||||
mov [bp+var_4], dx
|
||||
xchg di, dx
|
||||
mov ax, es:[bx+si]
|
||||
mov cx, [bp+var_6]
|
||||
sub cx, di
|
||||
mov bx, 2DF6h
|
||||
call make_linework
|
||||
mov bx, [bp+var_A]
|
||||
mov cx, [bp+arg_0]
|
||||
mov ax, ClipYT
|
||||
|
||||
loc_DEB:
|
||||
mov di, bx
|
||||
add bx, 4
|
||||
cmp bx, cx
|
||||
jle short loc_DF6
|
||||
xor bx, bx
|
||||
|
||||
loc_DF6:
|
||||
cmp es:[bx+si+2], ax
|
||||
jl short loc_DEB
|
||||
mov ax, es:[bx+si+2]
|
||||
mov [bp+var_2], ax
|
||||
mov [bp+var_A], bx
|
||||
add di, si
|
||||
mov cx, es:[di+2]
|
||||
mov di, es:[di]
|
||||
mov bx, es:[bx+si]
|
||||
cmp cx, [bp+var_4]
|
||||
jge short loc_E2B
|
||||
mov ax, ClipYT
|
||||
sub ax, cx
|
||||
push cx
|
||||
mov cx, di
|
||||
sub cx, bx
|
||||
imul cx
|
||||
pop cx
|
||||
sub cx, [bp+var_2]
|
||||
idiv cx
|
||||
add di, ax
|
||||
|
||||
loc_E2B:
|
||||
mov dx, di
|
||||
mov ax, bx
|
||||
mov cx, [bp+var_2]
|
||||
sub cx, [bp+var_4]
|
||||
mov bx, 2DFEh
|
||||
call make_linework
|
||||
mov si, [bp+var_4]
|
||||
|
||||
loc_E3E:
|
||||
mov di, [bp+var_6]
|
||||
cmp di, [bp+var_2]
|
||||
jle short loc_E49
|
||||
mov di, [bp+var_2]
|
||||
|
||||
loc_E49:
|
||||
cmp [bp+var_C], di
|
||||
jle short loc_EC2
|
||||
push di
|
||||
lea dx, [di-1]
|
||||
sub dx, si
|
||||
sub si, ClipYT
|
||||
mov ax, si
|
||||
shl si, 2
|
||||
add si, ax
|
||||
shl si, 4
|
||||
mov es, ClipYT_seg
|
||||
call draw_trapezoid
|
||||
pop si
|
||||
les di, [bp+arg_2]
|
||||
cmp si, [bp+var_6]
|
||||
jnz short loc_E95
|
||||
mov bx, [bp+var_8]
|
||||
mov dx, es:[bx+di]
|
||||
sub bx, 4
|
||||
jns short loc_E80
|
||||
mov bx, [bp+arg_0]
|
||||
|
||||
loc_E80:
|
||||
mov [bp+var_8], bx
|
||||
mov ax, es:[bx+di]
|
||||
mov cx, es:[bx+di+2]
|
||||
mov [bp+var_6], cx
|
||||
sub cx, si
|
||||
mov bx, 2DF6h
|
||||
call make_linework
|
||||
|
||||
loc_E95:
|
||||
cmp [bp+var_2], si
|
||||
jnz short loc_E3E
|
||||
mov bx, [bp+var_A]
|
||||
mov dx, es:[bx+di]
|
||||
add bx, 4
|
||||
cmp bx, [bp+arg_0]
|
||||
jle short loc_EAA
|
||||
xor bx, bx
|
||||
|
||||
loc_EAA:
|
||||
mov [bp+var_A], bx
|
||||
mov ax, es:[bx+di]
|
||||
mov cx, es:[bx+di+2]
|
||||
mov [bp+var_2], cx
|
||||
sub cx, si
|
||||
mov bx, 2DFEh
|
||||
push 0E3Eh
|
||||
jmp make_linework
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_EC2:
|
||||
mov es, ClipYT_seg
|
||||
mov dx, [bp+var_C]
|
||||
sub dx, si
|
||||
sub si, ClipYT
|
||||
mov ax, si
|
||||
shl si, 2
|
||||
add si, ax
|
||||
shl si, 4
|
||||
call draw_trapezoid
|
||||
pop si
|
||||
pop di
|
||||
leave
|
||||
retf 6
|
||||
sub_CCA endp
|
||||
|
||||
include libs/master.lib/grcg_polygon_c.asm
|
||||
include libs/master.lib/grcg_setcolor.asm
|
||||
include libs/master.lib/grcg_vline.asm
|
||||
include libs/master.lib/get_machine_98.asm
|
||||
|
@ -7967,7 +7697,7 @@ loc_C273:
|
|||
idiv bx
|
||||
add ax, 3
|
||||
push ax
|
||||
call sub_CCA
|
||||
call grcg_polygon_c
|
||||
inc si
|
||||
|
||||
loc_C289:
|
||||
|
|
Loading…
Reference in New Issue