ReC98/th04/tiles_render_all.asm

50 lines
1.0 KiB
NASM

; Blits all tiles in the ring buffer to the playfield in VRAM.
; void pascal near tiles_render_all(void);
public TILES_RENDER_ALL
tiles_render_all proc near
push si
push di
call egc_start_copy_inlined_noframe
mov di, ((RES_Y - TILE_H) * ROW_SIZE) + PLAYFIELD_VRAM_X
mov bx, offset _tile_ring[TILES_MEMORY_X * (TILES_Y - 1) * 2]
mov ax, GRAM_400
mov es, ax
assume es:nothing
@@start_row:
mov dl, TILES_X
@@next_tile_in_row:
mov si, [bx]
mov cx, TILE_H
nop
@@blit_tile_lines:
mov ax, es:[si]
mov es:[di], ax
add si, ROW_SIZE
add di, ROW_SIZE
loop @@blit_tile_lines
sub di, (TILE_H * ROW_SIZE) - TILE_VRAM_W
add bx, 2
dec dl
jnz short @@next_tile_in_row
sub bx, (TILES_MEMORY_X + TILES_X) * 2
sub di, (TILE_H * ROW_SIZE) + (TILE_VRAM_W * TILES_X)
jge short @@start_row
call egc_off
pop di
pop si
retn
tiles_render_all endp
; void pascal near egc_start_copy_inlined_noframe(void);
public EGC_START_COPY_INLINED_NOFRAME
egc_start_copy_inlined_noframe proc near
EGC_START_COPY_INLINED
retn
egc_start_copy_inlined_noframe endp
nop