aboutsummaryrefslogtreecommitdiff
path: root/utils.gbasm
blob: e6dba4cb59a7aa479913584b02e88a59638629b6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
memcpy: ; src = DE, dest = HL, n = BC
	memcpy.loop:
		LD A, (DE)
		LD (HL+), A
		INC DE
		DEC BC
		XOR A
		CP B
		JR NZ =memcpy.loop
		CP C
		JR NZ =memcpy.loop
	RET

bzero: ; dest = HL, n = BC
	LD A, $00
	bzero.loop:
		LD (HL+), A
		INC DE
		DEC BC
		CP B
		JR NZ =bzero.loop
		CP C
		JR NZ =bzero.loop
	RET

Print_8bit: ; Number in A, Memory Tilemap position in HL
	PUSH AF
	PUSH BC

	LD C, A
	SWAP A 				   ; We start by the highest nibble
	AND $0f
	OR $10
	LD (HL+), A
	
	LD A, C
	AND $0f 			   ; Then the lowest
	OR $10
	LD (HL+), A

	POP BC
	POP AF
	RET

MUL: ; B x C => EA
	XOR A
	LD E, $00

	BIT 7, B
	JR Z, =MUL.bit7
		ADD C
	MUL.bit7:

	SLA A
	RL E

	BIT 6, B
	JR Z, =MUL.bit6
		ADD C
	MUL.bit6:

	SLA A
	RL E

	BIT 5, B
	JR Z, =MUL.bit5
		ADD C
	MUL.bit5:

	SLA A
	RL E

	BIT 4, B
	JR Z, =MUL.bit4
		ADD C
	MUL.bit4:

	SLA A
	RL E

	BIT 3, B
	JR Z, =MUL.bit3
		ADD C
	MUL.bit3:

	SLA A
	RL E

	BIT 2, B
	JR Z, =MUL.bit2
		ADD C
	MUL.bit2:

	SLA A
	RL E

	BIT 1, B
	JR Z, =MUL.bit1
		ADD C
	MUL.bit1:

	SLA A
	RL E

	BIT 0, B
	JR Z, =MUL.bit0
		ADD C
	MUL.bit0:
	RET

VBlank_Wait:
	PUSH AF
	LD A, $reg_lcd_controller
	BIT 7, A
	JR Z, =VBlank_Wait.End
	VBlank_Wait.loop:
	LD A, $reg_lcd_status
	AND $03
	CP $01
	JR NZ, =VBlank_Wait.loop
	VBlank_Wait.End:
	POP AF
	RET