mirror of https://github.com/nmlgc/ReC98.git
101 lines
1.6 KiB
NASM
101 lines
1.6 KiB
NASM
; Second TH05 .PI assembly translation unit.
|
|
|
|
.386
|
|
.model use16 large
|
|
locals
|
|
|
|
include pc98.inc
|
|
include libs/master.lib/func.inc
|
|
include libs/master.lib/master.inc
|
|
include th03/arg_bx.inc
|
|
|
|
extrn Palettes:palette_t
|
|
extrn _pi_headers:PiHeader
|
|
extrn _pi_buffers:far ptr
|
|
|
|
SHARED_ segment word public 'CODE' use16
|
|
assume cs:SHARED_
|
|
|
|
public PI_PUT_8_ROWLOOP
|
|
pi_put_8_rowloop proc pascal near
|
|
; Can't use ARG, because the function doesn't `PUSH BP`!
|
|
@@stride_packed = word ptr [bp+2]
|
|
@@w = word ptr [bp+4]
|
|
@@top = word ptr [bp+6]
|
|
@@left = word ptr [bp+8]
|
|
@@h equ di
|
|
|
|
mov bp, sp
|
|
|
|
@@put_row:
|
|
push es
|
|
call graph_pack_put_8_noclip pascal, @@left, @@top, es, si, @@w
|
|
pop es
|
|
inc @@top
|
|
cmp @@top, RES_Y
|
|
jb short @@next_row
|
|
sub @@top, RES_Y
|
|
|
|
@@next_row:
|
|
add si, @@stride_packed
|
|
|
|
; .PI pointer normalization, see pi_buffer_p_normalize()
|
|
mov ax, si
|
|
shr ax, 4
|
|
mov dx, es
|
|
add dx, ax
|
|
mov es, dx
|
|
and si, 0Fh
|
|
|
|
dec @@h
|
|
jnz short @@put_row
|
|
retn 8
|
|
pi_put_8_rowloop endp
|
|
|
|
|
|
public PI_PALETTE_APPLY
|
|
func pi_palette_apply
|
|
arg_bx far, @slot:word
|
|
|
|
push si
|
|
push di
|
|
mov si, @slot
|
|
imul si, size PiHeader
|
|
add si, offset _pi_headers + PiHeader._palette
|
|
mov di, offset Palettes
|
|
mov ax, ds
|
|
mov es, ax
|
|
mov cx, (size palette_t / dword)
|
|
rep movsd
|
|
call palette_show
|
|
pop di
|
|
pop si
|
|
ret_bx
|
|
endfunc
|
|
|
|
public PI_FREE
|
|
func pi_free
|
|
arg_bx far, @slot:word
|
|
|
|
mov bx, @slot
|
|
mov ax, bx
|
|
shl bx, 2
|
|
add bx, offset _pi_buffers
|
|
cmp dword ptr [bx], 0
|
|
jz short @@ret
|
|
imul ax, size PiHeader
|
|
add ax, offset _pi_headers
|
|
push ds
|
|
push ax
|
|
push word ptr [bx+2]
|
|
push word ptr [bx]
|
|
mov dword ptr [bx], 0
|
|
call graph_pi_free
|
|
@@ret:
|
|
ret 2
|
|
endfunc
|
|
|
|
SHARED_ ends
|
|
|
|
end
|