All pastes #375944 Raw Edit

Cody Brocious

public text v1 · immutable
#375944 ·published 2007-02-28 18:58 UTC
rendered paste body
[BITS 16]
[ORG 0x7C00]

cli

start:
	mov ebx, 0x0B8000

blankscreen:
	xor ax, ax
	mov cx, 0x0800
	mov dx, 0x0000

blankscreen_loop:
	call draw
	
	inc ax
	
	cmp ax, cx
	jnz blankscreen_loop

drawbars:
	xor ax, ax
	mov cx, 80
	mov dx, 0x20 | (1 << 12)
	call drawbar
	
	mov dx, 0x20 | (2 << 12)
	call drawbar
	
	mov dx, 0x20 | (4 << 12)
	call drawbar

logicloop:
	mov ax, [ballpos]
	mov dx, 0x0 | (0 << 12)
	call draw
	
	call ballcalc
	
	mov ax, [ballpos]
	mov cx, word [ds:ebx+eax*2]
	
	mov dx, 0x20 | (15 << 12)
	call draw
	
	test cx, cx
	jz no_hit
	cmp cx, 0x20 | (15 << 12)
	jz no_hit
	
	mov dx, 0x0 | (0 << 12)
	call draw
	call ricochet_y
	
no_hit:
	
	call delay
	call delay
	call delay
	call delay
	call delay
	call delay
	call delay
	call delay
	call delay
	call delay
	call delay
	call delay
	call delay
	call delay
	call delay
	call delay
	call delay
	call delay
	call delay
	
	jmp logicloop

delay:
	xor ax, ax
	
delay_main:
	inc ax
	
	test ax, ax
	jnz delay_main
	
	ret

ballcalc:
	mov ax, [ballpos]
	xor cx, cx
	
	mov cl, byte [balldir_y]
	add ax, cx
	sub ax, 80
	
	mov cl, byte [balldir_x]
	add ax, cx
	sub ax, 1
	
	mov [ballpos], ax
	
	cmp ax, 24 * 79
	ja ricochet_y
	
abuse:
	sub ax, 80
	cmp ax, 80
	jge abuse

end_the_abuse:
	test ax, ax
	jz ricochet_x
	
	ret

ricochet_y:
	mov dl, byte [balldir_y]
	xor dl, 160
	mov byte [balldir_y], dl
	
	jmp ballcalc

ricochet_x:
	mov dl, byte [balldir_x]
	xor dl, 2
	mov byte [balldir_x], dl
	
	jmp ballcalc

balldir_x: db 0
balldir_y: db 0
ballpos: dw ((12 * 80) + 40)

draw:
	mov word [ds:ebx+eax*2], dx
	ret

drawbar:
	call draw

	inc ax

	cmp ax, cx
	jnz drawbar

	mov cx, ax
	add cx, 80
	ret