forked from DaKnig/advenchess
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinit.z80
136 lines (126 loc) · 1.93 KB
/
init.z80
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
124
125
126
127
128
129
130
131
132
133
134
135
136
INCLUDE "hardware.inc"
numOfTiles EQU 11 ; the number of tiles in Tiles.bin
SECTION "Tiles", ROM0
Tiles:
INCBIN "assets/Tiles.bin",0,numOfTiles*16
.end:
SECTION "Init", ROM0
Init_OAM:
ld a, 1
ld [numOfObjects], a
ld hl, rLCDC
ld [hl], LCDCF_ON|LCDCF_BG8000|LCDCF_OBJON|LCDCF_BGON
.init_Player
ld hl, shadow_oam
ld [hl], 16 + 3*8 + 4*8
inc l ; inc l==inc hl because alignment
ld [hl], 8 + 3*8 + 4*8
inc l
ld [hl], $23
inc l
ld [hl], OAMF_PAL0
inc l
ld b, $FF
ld a, 160
.loop
ld [hl], b
inc l
cp a, l
jr nz, .loop
ret
InitRoom:
;clean the room
ld b,0
ld hl,room
ld d,HIGH(32*32+room)
.clear_loop
ld [hl],b
inc hl
ld a, h
cp d
jr nz, .clear_loop
;putWalls
ld a, $26 ; - tile
;top and bottom
ld hl, room+(3+1)+3*SCRN_VX_B
ld b, 6
.horiz_loop_1:
ld [hl+], a
dec b
jr nz, .horiz_loop_1
ld hl, room+(3+1)+(3+8)*SCRN_VX_B
ld b, 6
.horiz_loop_2:
ld [hl+], a
dec b
jr nz, .horiz_loop_2
;sides
ld a, $2A ; | tile
ld de, SCRN_VX_B
ld hl, room+3+(3+1)*SCRN_VX_B
REPT 6
ld [hl], a
add hl, de
ENDR
ld hl, room+(3+8)+(3+1)*SCRN_VX_B
REPT 6
ld [hl], a
add hl, de
ENDR
;corners
ld a, $29 ; + tile
ld [hl], a
ld [room+ 3+ 3 *SCRN_VX_B], a
ld [room+(3+8)+ 3 *SCRN_VX_B], a
ld [room+ 3 +(3+8)*SCRN_VX_B], a
ret
Load_DMA_Loop:
ld bc, (hOAM_DMA.end-hOAM_DMA)*$0100+LOW(hOAM_DMA.end)
;ld b, (hOAM_DMA.end-hOAM_DMA)
;ld c, LOW(hOAM_DMA.end)
ld hl, DMA_Source.end
.loop
ld a, [hl-]
ld [c], a
dec c
dec b
jr nz, .loop
ld a, [hl]
ld [c], a
ret
Init:
ld a, %11100100
ldh [rOBP0], a
ldh [rBGP], a
;Enable VBlank interrupt
ldh a, [LOW(rIE)]
or a, IEF_VBLANK
ldh [LOW(rIE)], a
.LoadTiles
ld hl, _VRAM + $200
ld d, numOfTiles * 2
call Wait_VBlank
ld sp, Tiles
di
.LoadLoop
REPT 4
pop bc
ld a,c
ld [hl+],a
ld a,b
ld [hl+],a
ENDR
dec d
jp nz, .LoadLoop
.ClearBGMap
ld e, d ; ld de, $00
ld sp, _SCRN0 + $10+ $09 * $20
ld a, 5
.CleanLoop
REPT 5
push de
ENDR
dec a
jp nz, .CleanLoop
ld sp, $FFFC
reti