ReC98/th05/end/verdict_bitmap.asm

82 lines
1.4 KiB
NASM

VERDICT_BITMAP_W = 320
VERDICT_SCREEN_H = 352
VERDICT_BITMAP_VRAM_W = (VERDICT_BITMAP_W / 8)
VERDICT_SCREEN_SIZE = (VERDICT_SCREEN_H * VERDICT_BITMAP_VRAM_W)
public VERDICT_BITMAP_SNAP
verdict_bitmap_snap proc near
@@bitmap_offset = word ptr 4
push bp
mov bp, sp
push si
push di
push ds
push ds
pop es
assume es:_DATA
mov ax, SEG_PLANE_E
mov ds, ax
assume ds:nothing
xor si, si
mov di, [bp+@@bitmap_offset]
add di, offset _verdict_bitmap
mov ax, VERDICT_SCREEN_H
@@snap_loop:
mov cx, (VERDICT_BITMAP_VRAM_W / 2)
rep movsw
add si, (ROW_SIZE - VERDICT_BITMAP_VRAM_W)
dec ax
jnz short @@snap_loop
pop ds
assume ds:_DATA
pop di
pop si
pop bp
retn 2
verdict_bitmap_snap endp
public VERDICT_BITMAP_PUT
verdict_bitmap_put proc near
@@bitmap_offset = word ptr 4
push bp
mov bp, sp
push si
push di
call grcg_setcolor pascal, (GC_TDW shl 16) + 1
mov ax, GRAM_400
mov es, ax
assume es:nothing
xor di, di
mov dx, VERDICT_SCREEN_H
@@clear_loop:
mov cx, (VERDICT_BITMAP_VRAM_W / 2)
rep stosw
add di, (ROW_SIZE - VERDICT_BITMAP_VRAM_W)
dec dx
jnz short @@clear_loop
call grcg_setcolor pascal, (GC_RMW shl 16) + 13
xor di, di
mov si, [bp+@@bitmap_offset]
add si, offset _verdict_bitmap
mov dx, VERDICT_SCREEN_H
@@put_loop:
mov cx, (VERDICT_BITMAP_VRAM_W / 2)
rep movsw
add di, (ROW_SIZE - VERDICT_BITMAP_VRAM_W)
dec dx
jnz short @@put_loop
GRCG_OFF_CLOBBERING dx
pop di
pop si
pop bp
retn 2
verdict_bitmap_put endp