object PieceUnit {
	section object {
		BlockTypes
	}
	section module {
 		std
	}
	section data {
		int rax = 0
		int rbx = 0
		int rcx = 0
		int rdx = 0
		int rsi = 0
		int rdi = 0
		int r8 = 0
		int r9 = 0
		int piece_x = 0
		int piece_y = 0
		int piece_c1 = 0
		int piece_c2 = 0
		int piece_c3 = 0
		int next_c1 = 0
		int next_c2 = 0
		int next_c3 = 0
		int piece_x1 = 0
		int piece_y1 = 0
		int piece_x2 = 0
		int piece_y2 = 0
		int piece_x3 = 0
		int piece_y3 = 0
		int piece_shape = 0
		int PieceShiftUp_tmp = 0
		int PieceShiftDown_tmp = 0
		int __funcret_RandColor = 0
	}
	section code {
	function PROC_UNIT_INIT:
		ret
	function PROC_PieceInit:
		call FUNC_RandColor
		mov rbx, rax
		mov next_c1, rbx
		push rbx
		call FUNC_RandColor
		pop rbx
		mov rcx, rax
		mov next_c2, rcx
		push rbx
		push rcx
		call FUNC_RandColor
		pop rcx
		pop rbx
		mov rdx, rax
		mov next_c3, rdx
	WHILE_0:
		cmp next_c1, next_c2
		jne ENDWHILE_1
		cmp next_c2, next_c3
		jne ENDWHILE_1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call FUNC_RandColor
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, rax
		mov next_c3, r9
		jmp WHILE_0
	ENDWHILE_1:
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_PieceSpawn
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
	PROC_END_PieceInit:
		ret
	function PROC_PieceSpawn:
		mov piece_x, 3
		mov piece_y, 0
		mov piece_shape, 0
		mov piece_c1, next_c1
		mov piece_c2, next_c2
		mov piece_c3, next_c3
		call FUNC_RandColor
		mov rbx, rax
		mov next_c1, rbx
		push rbx
		call FUNC_RandColor
		pop rbx
		mov rcx, rax
		mov next_c2, rcx
		push rbx
		push rcx
		call FUNC_RandColor
		pop rcx
		pop rbx
		mov rdx, rax
		mov next_c3, rdx
	WHILE_8:
		cmp next_c1, next_c2
		jne ENDWHILE_9
		cmp next_c2, next_c3
		jne ENDWHILE_9
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call FUNC_RandColor
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, rax
		mov next_c3, r9
		jmp WHILE_8
	ENDWHILE_9:
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_PieceUpdatePositions
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
	PROC_END_PieceSpawn:
		ret
	function PROC_PieceUpdatePositions:
		cmp piece_shape, 0
		jne ELSE_16
		mov piece_x1, piece_x
		mov piece_y1, piece_y
		mov piece_x2, piece_x
		mov piece_y2, piece_y
		add piece_y2, 1
		mov piece_x3, piece_x
		mov piece_y3, piece_y
		add piece_y3, 2
		jmp ENDIF_17
	ELSE_16:
		mov piece_x1, piece_x
		mov piece_y1, piece_y
		mov piece_x2, piece_x
		add piece_x2, 1
		mov piece_y2, piece_y
		mov piece_x3, piece_x
		add piece_x3, 2
		mov piece_y3, piece_y
	ENDIF_17:
	PROC_END_PieceUpdatePositions:
		ret
	function PROC_PieceRotate:
		cmp piece_shape, 0
		jne ELSE_20
		mov piece_shape, 1
		jmp ENDIF_21
	ELSE_20:
		mov piece_shape, 0
	ENDIF_21:
		push rbx
		call PROC_PieceUpdatePositions
		pop rbx
	PROC_END_PieceRotate:
		ret
	function PROC_PieceShiftUp:
		mov PieceShiftUp_tmp, piece_c1
		mov piece_c1, piece_c3
		mov piece_c3, piece_c2
		mov piece_c2, PieceShiftUp_tmp
	PROC_END_PieceShiftUp:
		ret
	function PROC_PieceShiftDown:
		mov PieceShiftDown_tmp, piece_c1
		mov piece_c1, piece_c2
		mov piece_c2, piece_c3
		mov piece_c3, PieceShiftDown_tmp
	PROC_END_PieceShiftDown:
		ret
	function PROC_PieceMoveLeft:
		cmp piece_x, 0
		jle ELSE_24
		mov rcx, piece_x
		sub rcx, 1
		mov piece_x, rcx
		push rbx
		push rcx
		call PROC_PieceUpdatePositions
		pop rcx
		pop rbx
	ELSE_24:
	PROC_END_PieceMoveLeft:
		ret
	function PROC_PieceMoveRight:
		cmp piece_x3, 7
		jge ELSE_28
		mov rcx, piece_x
		add rcx, 1
		mov piece_x, rcx
		push rbx
		push rcx
		call PROC_PieceUpdatePositions
		pop rcx
		pop rbx
	ELSE_28:
	PROC_END_PieceMoveRight:
		ret
	function PROC_PieceMoveDown:
		cmp piece_y3, 16
		jge ELSE_32
		mov rcx, piece_y
		add rcx, 1
		mov piece_y, rcx
		push rbx
		push rcx
		call PROC_PieceUpdatePositions
		pop rcx
		pop rbx
	ELSE_32:
	PROC_END_PieceMoveDown:
		ret
	function FUNC_RandColor:
		invoke rand
		return rbx
		mov __funcret_RandColor, rbx
		mod __funcret_RandColor, 9
		add __funcret_RandColor, 1
	FUNC_END_RandColor:
		mov rax, __funcret_RandColor
		ret
	}
}