2018-10-15 22:08:04 +00:00
|
|
|
; Assuming that the CDG image in the given [slot] was previously displayed
|
|
|
|
; centered at (⌊x_center/8⌋*8, y_center), this function clears the two lines
|
|
|
|
; at the bottom of that image, as well as the one line immediately below, from
|
|
|
|
; the VRAM's E plane.
|
|
|
|
|
2019-09-15 14:22:36 +00:00
|
|
|
; void cdg_unput_for_upwards_motion_e(int x_center, int y_center, int slot);
|
2019-09-15 16:23:33 +00:00
|
|
|
public CDG_UNPUT_FOR_UPWARDS_MOTION_E
|
2019-09-15 14:22:36 +00:00
|
|
|
cdg_unput_for_upwards_motion_e proc near
|
2018-10-15 22:08:04 +00:00
|
|
|
|
|
|
|
@@h = word ptr -4
|
|
|
|
@@w = word ptr -2
|
|
|
|
@@slot = word ptr 4
|
|
|
|
@@y_center = word ptr 6
|
|
|
|
@@x_center = word ptr 8
|
|
|
|
|
|
|
|
enter 4, 0
|
|
|
|
push si
|
|
|
|
push di
|
|
|
|
mov bx, [bp+@@slot]
|
|
|
|
shl bx, 4
|
|
|
|
mov ax, _cdg_slots.pixel_width[bx]
|
|
|
|
mov [bp+@@w], ax
|
|
|
|
mov bx, [bp+@@slot]
|
|
|
|
shl bx, 4
|
|
|
|
mov ax, _cdg_slots.pixel_height[bx]
|
|
|
|
mov [bp+@@h], ax
|
|
|
|
mov ax, [bp+@@w]
|
|
|
|
cwd
|
|
|
|
sub ax, dx
|
|
|
|
sar ax, 1
|
|
|
|
sub [bp+@@x_center], ax
|
|
|
|
mov ax, [bp+@@h]
|
|
|
|
cwd
|
|
|
|
sub ax, dx
|
|
|
|
sar ax, 1
|
|
|
|
add ax, -2
|
|
|
|
add [bp+@@y_center], ax
|
|
|
|
mov ax, [bp+@@x_center]
|
|
|
|
sar ax, 3
|
|
|
|
mov dx, [bp+@@y_center]
|
|
|
|
shl dx, 6
|
|
|
|
add ax, dx
|
|
|
|
mov dx, [bp+@@y_center]
|
|
|
|
shl dx, 4
|
|
|
|
add ax, dx
|
|
|
|
mov di, ax
|
|
|
|
mov ax, 0E000h
|
|
|
|
mov es, ax
|
|
|
|
assume es:nothing
|
|
|
|
mov dx, [bp+@@w]
|
|
|
|
shr dx, 4
|
|
|
|
mov si, (640 / 8)
|
|
|
|
sub si, dx
|
|
|
|
sub si, dx
|
|
|
|
xor ax, ax
|
|
|
|
mov cx, dx
|
|
|
|
rep stosw
|
|
|
|
add di, si
|
|
|
|
mov cx, dx
|
|
|
|
rep stosw
|
|
|
|
add di, si
|
|
|
|
mov cx, dx
|
|
|
|
rep stosw
|
|
|
|
pop di
|
|
|
|
pop si
|
|
|
|
leave
|
|
|
|
retn 6
|
2019-09-15 14:22:36 +00:00
|
|
|
cdg_unput_for_upwards_motion_e endp
|