mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-11-16 11:37:40 +01:00
gpu_regs.c
This commit is contained in:
parent
4e95a13295
commit
b4781cdf03
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -6,6 +6,7 @@ Makefile text eol=lf
|
|||||||
*.mk text eol=lf
|
*.mk text eol=lf
|
||||||
*.c text eol=lf
|
*.c text eol=lf
|
||||||
*.h text eol=lf
|
*.h text eol=lf
|
||||||
|
*.pl text eol=lf
|
||||||
|
|
||||||
*.png binary
|
*.png binary
|
||||||
*.bin binary
|
*.bin binary
|
||||||
|
16
Makefile
16
Makefile
@ -23,6 +23,10 @@ SCANINC := tools/scaninc/scaninc
|
|||||||
CSRCS := $(wildcard src/*.c)
|
CSRCS := $(wildcard src/*.c)
|
||||||
OBJS := asm/emerald.o
|
OBJS := asm/emerald.o
|
||||||
|
|
||||||
|
$(foreach obj, $(OBJS), \
|
||||||
|
$(eval $(obj)_deps := $(shell $(SCANINC) $(obj:.o=.s))) \
|
||||||
|
)
|
||||||
|
|
||||||
ROM := pokeemerald.gba
|
ROM := pokeemerald.gba
|
||||||
ELF := $(ROM:.gba=.elf)
|
ELF := $(ROM:.gba=.elf)
|
||||||
|
|
||||||
@ -55,12 +59,7 @@ include graphics_file_rules.mk
|
|||||||
%.gbapal: %.pal ; $(GFX) $< $@
|
%.gbapal: %.pal ; $(GFX) $< $@
|
||||||
%.lz: % ; $(GFX) $< $@
|
%.lz: % ; $(GFX) $< $@
|
||||||
|
|
||||||
deps: $(CSRCS:src/%.c=genasm/%.s)
|
$(OBJS): $(CSRCS:src/%.c=genasm/%.s)
|
||||||
$(foreach obj, $(OBJS), \
|
|
||||||
$(eval $(obj)_deps := $(shell $(SCANINC) $(obj:.o=.s))) \
|
|
||||||
)
|
|
||||||
|
|
||||||
$(OBJS): deps
|
|
||||||
|
|
||||||
# TODO: fix this .syntax hack
|
# TODO: fix this .syntax hack
|
||||||
|
|
||||||
@ -73,8 +72,9 @@ genasm/suffix.tmp:
|
|||||||
genasm/%.s: src/%.c genasm/prefix.tmp genasm/suffix.tmp
|
genasm/%.s: src/%.c genasm/prefix.tmp genasm/suffix.tmp
|
||||||
mkdir -p genasm
|
mkdir -p genasm
|
||||||
$(CC) $(CFLAGS) -o $@.tmp $< -S
|
$(CC) $(CFLAGS) -o $@.tmp $< -S
|
||||||
cat genasm/prefix.tmp $@.tmp genasm/suffix.tmp >$@
|
cat genasm/prefix.tmp $@.tmp genasm/suffix.tmp >$@.tmp2
|
||||||
$(RM) $@.tmp
|
perl fix_local_labels.pl $@.tmp2 $@
|
||||||
|
$(RM) $@.tmp $@.tmp2
|
||||||
|
|
||||||
%.o: %.s $$($$@_deps)
|
%.o: %.s $$($$@_deps)
|
||||||
$(AS) $(ASFLAGS) -o $@ $<
|
$(AS) $(ASFLAGS) -o $@ $<
|
||||||
|
@ -15,7 +15,7 @@ Start:
|
|||||||
.include "asm/main.s"
|
.include "asm/main.s"
|
||||||
.include "genasm/malloc.s"
|
.include "genasm/malloc.s"
|
||||||
.include "asm/dma3_manager.s"
|
.include "asm/dma3_manager.s"
|
||||||
.include "asm/gpu_reg_manager.s"
|
.include "genasm/gpu_regs.s"
|
||||||
.include "asm/gpu_bg.s"
|
.include "asm/gpu_bg.s"
|
||||||
.include "asm/pixel_buffer.s"
|
.include "asm/pixel_buffer.s"
|
||||||
.include "asm/window.s"
|
.include "asm/window.s"
|
||||||
|
@ -1,410 +0,0 @@
|
|||||||
thumb_func_start InitGpuRegManager
|
|
||||||
; void InitGpuRegManager()
|
|
||||||
InitGpuRegManager: ; 8000FE4
|
|
||||||
push {r4-r7,lr}
|
|
||||||
mov r7, r8
|
|
||||||
push {r7}
|
|
||||||
movs r2, 0
|
|
||||||
ldr r7, =0x030008d8
|
|
||||||
ldr r0, =0x030008d9
|
|
||||||
mov r12, r0
|
|
||||||
ldr r1, =0x030008da
|
|
||||||
mov r8, r1
|
|
||||||
ldr r6, =0x03000818
|
|
||||||
movs r5, 0
|
|
||||||
ldr r4, =0x03000878
|
|
||||||
movs r3, 0xFF
|
|
||||||
_08000FFE:
|
|
||||||
adds r0, r2, r6
|
|
||||||
strb r5, [r0]
|
|
||||||
adds r1, r2, r4
|
|
||||||
ldrb r0, [r1]
|
|
||||||
orrs r0, r3
|
|
||||||
strb r0, [r1]
|
|
||||||
adds r2, 0x1
|
|
||||||
cmp r2, 0x5F
|
|
||||||
ble _08000FFE
|
|
||||||
movs r0, 0
|
|
||||||
strb r0, [r7]
|
|
||||||
mov r1, r12
|
|
||||||
strb r0, [r1]
|
|
||||||
movs r0, 0
|
|
||||||
mov r1, r8
|
|
||||||
strh r0, [r1]
|
|
||||||
pop {r3}
|
|
||||||
mov r8, r3
|
|
||||||
pop {r4-r7}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.pool
|
|
||||||
thumb_func_end InitGpuRegManager
|
|
||||||
|
|
||||||
thumb_func_start CopyBufferedValueToGpuReg
|
|
||||||
; void CopyBufferedValueToGpuReg(u8 reg)
|
|
||||||
CopyBufferedValueToGpuReg: ; 800103C
|
|
||||||
push {lr}
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r2, r0, 24
|
|
||||||
cmp r2, 0x4
|
|
||||||
bne _08001068
|
|
||||||
ldr r2, =0x04000004
|
|
||||||
ldrh r1, [r2]
|
|
||||||
ldr r0, =0x0000ffe7
|
|
||||||
ands r0, r1
|
|
||||||
strh r0, [r2]
|
|
||||||
ldr r1, =0x0300081c
|
|
||||||
ldrh r0, [r2]
|
|
||||||
ldrh r1, [r1]
|
|
||||||
orrs r0, r1
|
|
||||||
strh r0, [r2]
|
|
||||||
b _08001076
|
|
||||||
.pool
|
|
||||||
_08001068:
|
|
||||||
movs r0, 0x80
|
|
||||||
lsls r0, 19
|
|
||||||
adds r0, r2, r0
|
|
||||||
ldr r1, =0x03000818
|
|
||||||
adds r1, r2, r1
|
|
||||||
ldrh r1, [r1]
|
|
||||||
strh r1, [r0]
|
|
||||||
_08001076:
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.pool
|
|
||||||
thumb_func_end CopyBufferedValueToGpuReg
|
|
||||||
|
|
||||||
thumb_func_start CopyBufferedValuesToGpuRegs
|
|
||||||
; void CopyBufferedValuesToGpuRegs()
|
|
||||||
CopyBufferedValuesToGpuRegs: ; 8001080
|
|
||||||
push {r4,r5,lr}
|
|
||||||
ldr r0, =0x030008d8
|
|
||||||
ldrb r0, [r0]
|
|
||||||
cmp r0, 0
|
|
||||||
bne _080010A4
|
|
||||||
movs r5, 0
|
|
||||||
_0800108C:
|
|
||||||
ldr r0, =0x03000878
|
|
||||||
adds r4, r5, r0
|
|
||||||
ldrb r0, [r4]
|
|
||||||
cmp r0, 0xFF
|
|
||||||
beq _080010A4
|
|
||||||
bl CopyBufferedValueToGpuReg
|
|
||||||
movs r0, 0xFF
|
|
||||||
strb r0, [r4]
|
|
||||||
adds r5, 0x1
|
|
||||||
cmp r5, 0x5F
|
|
||||||
ble _0800108C
|
|
||||||
_080010A4:
|
|
||||||
pop {r4,r5}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.pool
|
|
||||||
thumb_func_end CopyBufferedValuesToGpuRegs
|
|
||||||
|
|
||||||
thumb_func_start SetGpuReg
|
|
||||||
; void SetGpuReg(u8 reg, u16 value)
|
|
||||||
SetGpuReg: ; 80010B4
|
|
||||||
push {r4,r5,lr}
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r4, r0, 24
|
|
||||||
lsls r1, 16
|
|
||||||
lsrs r1, 16
|
|
||||||
cmp r4, 0x5F
|
|
||||||
bhi _08001130
|
|
||||||
ldr r0, =0x03000818
|
|
||||||
adds r0, r4, r0
|
|
||||||
strh r1, [r0]
|
|
||||||
ldr r0, =0x04000006
|
|
||||||
ldrh r1, [r0]
|
|
||||||
movs r0, 0xFF
|
|
||||||
ands r0, r1
|
|
||||||
subs r0, 0xA1
|
|
||||||
lsls r0, 16
|
|
||||||
lsrs r0, 16
|
|
||||||
cmp r0, 0x40
|
|
||||||
bls _080010E8
|
|
||||||
movs r0, 0x80
|
|
||||||
lsls r0, 19
|
|
||||||
ldrh r1, [r0]
|
|
||||||
movs r0, 0x80
|
|
||||||
ands r0, r1
|
|
||||||
cmp r0, 0
|
|
||||||
beq _080010FE
|
|
||||||
_080010E8:
|
|
||||||
adds r0, r4, 0
|
|
||||||
bl CopyBufferedValueToGpuReg
|
|
||||||
b _08001130
|
|
||||||
.pool
|
|
||||||
_080010F8:
|
|
||||||
movs r0, 0
|
|
||||||
strb r0, [r5]
|
|
||||||
b _08001130
|
|
||||||
_080010FE:
|
|
||||||
ldr r2, =0x030008d8
|
|
||||||
movs r0, 0x1
|
|
||||||
strb r0, [r2]
|
|
||||||
movs r3, 0
|
|
||||||
ldr r0, =0x03000878
|
|
||||||
ldrb r1, [r0]
|
|
||||||
adds r5, r2, 0
|
|
||||||
adds r2, r0, 0
|
|
||||||
cmp r1, 0xFF
|
|
||||||
beq _08001128
|
|
||||||
adds r1, r2, 0
|
|
||||||
_08001114:
|
|
||||||
ldrb r0, [r1]
|
|
||||||
cmp r0, r4
|
|
||||||
beq _080010F8
|
|
||||||
adds r1, 0x1
|
|
||||||
adds r3, 0x1
|
|
||||||
cmp r3, 0x5F
|
|
||||||
bgt _08001128
|
|
||||||
ldrb r0, [r1]
|
|
||||||
cmp r0, 0xFF
|
|
||||||
bne _08001114
|
|
||||||
_08001128:
|
|
||||||
adds r0, r3, r2
|
|
||||||
movs r1, 0
|
|
||||||
strb r4, [r0]
|
|
||||||
strb r1, [r5]
|
|
||||||
_08001130:
|
|
||||||
pop {r4,r5}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.pool
|
|
||||||
thumb_func_end SetGpuReg
|
|
||||||
|
|
||||||
thumb_func_start SetGpuReg_ForcedBlank
|
|
||||||
; void SetGpuReg_ForcedBlank(u8 reg, u16 value)
|
|
||||||
SetGpuReg_ForcedBlank: ; 8001140
|
|
||||||
push {r4,r5,lr}
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r4, r0, 24
|
|
||||||
lsls r1, 16
|
|
||||||
lsrs r1, 16
|
|
||||||
cmp r4, 0x5F
|
|
||||||
bhi _080011A8
|
|
||||||
ldr r0, =0x03000818
|
|
||||||
adds r0, r4, r0
|
|
||||||
strh r1, [r0]
|
|
||||||
movs r0, 0x80
|
|
||||||
lsls r0, 19
|
|
||||||
ldrh r1, [r0]
|
|
||||||
movs r0, 0x80
|
|
||||||
ands r0, r1
|
|
||||||
cmp r0, 0
|
|
||||||
beq _08001176
|
|
||||||
adds r0, r4, 0
|
|
||||||
bl CopyBufferedValueToGpuReg
|
|
||||||
b _080011A8
|
|
||||||
.pool
|
|
||||||
_08001170:
|
|
||||||
movs r0, 0
|
|
||||||
strb r0, [r5]
|
|
||||||
b _080011A8
|
|
||||||
_08001176:
|
|
||||||
ldr r2, =0x030008d8
|
|
||||||
movs r0, 0x1
|
|
||||||
strb r0, [r2]
|
|
||||||
movs r3, 0
|
|
||||||
ldr r0, =0x03000878
|
|
||||||
ldrb r1, [r0]
|
|
||||||
adds r5, r2, 0
|
|
||||||
adds r2, r0, 0
|
|
||||||
cmp r1, 0xFF
|
|
||||||
beq _080011A0
|
|
||||||
adds r1, r2, 0
|
|
||||||
_0800118C:
|
|
||||||
ldrb r0, [r1]
|
|
||||||
cmp r0, r4
|
|
||||||
beq _08001170
|
|
||||||
adds r1, 0x1
|
|
||||||
adds r3, 0x1
|
|
||||||
cmp r3, 0x5F
|
|
||||||
bgt _080011A0
|
|
||||||
ldrb r0, [r1]
|
|
||||||
cmp r0, 0xFF
|
|
||||||
bne _0800118C
|
|
||||||
_080011A0:
|
|
||||||
adds r0, r3, r2
|
|
||||||
movs r1, 0
|
|
||||||
strb r4, [r0]
|
|
||||||
strb r1, [r5]
|
|
||||||
_080011A8:
|
|
||||||
pop {r4,r5}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.pool
|
|
||||||
thumb_func_end SetGpuReg_ForcedBlank
|
|
||||||
|
|
||||||
thumb_func_start GetGpuReg
|
|
||||||
; u16 GetGpuReg(u8 reg)
|
|
||||||
GetGpuReg: ; 80011B8
|
|
||||||
push {lr}
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
adds r1, r0, 0
|
|
||||||
cmp r1, 0x4
|
|
||||||
bne _080011CC
|
|
||||||
ldr r0, =0x04000004
|
|
||||||
b _080011DE
|
|
||||||
.pool
|
|
||||||
_080011CC:
|
|
||||||
cmp r1, 0x6
|
|
||||||
beq _080011DC
|
|
||||||
ldr r0, =0x03000818
|
|
||||||
adds r0, r1, r0
|
|
||||||
ldrh r0, [r0]
|
|
||||||
b _080011E0
|
|
||||||
.pool
|
|
||||||
_080011DC:
|
|
||||||
ldr r0, =0x04000006
|
|
||||||
_080011DE:
|
|
||||||
ldrh r0, [r0]
|
|
||||||
_080011E0:
|
|
||||||
pop {r1}
|
|
||||||
bx r1
|
|
||||||
.pool
|
|
||||||
thumb_func_end GetGpuReg
|
|
||||||
|
|
||||||
thumb_func_start SetGpuRegBits
|
|
||||||
; void SetGpuRegBits(u8 reg, u16 mask)
|
|
||||||
SetGpuRegBits: ; 80011E8
|
|
||||||
push {lr}
|
|
||||||
adds r2, r1, 0
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
ldr r1, =0x03000818
|
|
||||||
adds r1, r0, r1
|
|
||||||
ldrh r1, [r1]
|
|
||||||
orrs r1, r2
|
|
||||||
lsls r1, 16
|
|
||||||
lsrs r1, 16
|
|
||||||
bl SetGpuReg
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.pool
|
|
||||||
thumb_func_end SetGpuRegBits
|
|
||||||
|
|
||||||
thumb_func_start ClearGpuRegBits
|
|
||||||
; void ClearGpuRegBits(u8 reg, u16 mask)
|
|
||||||
ClearGpuRegBits: ; 8001208
|
|
||||||
push {lr}
|
|
||||||
adds r2, r1, 0
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
lsls r2, 16
|
|
||||||
ldr r1, =0x03000818
|
|
||||||
adds r1, r0, r1
|
|
||||||
ldrh r1, [r1]
|
|
||||||
lsrs r2, 16
|
|
||||||
bics r1, r2
|
|
||||||
bl SetGpuReg
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.pool
|
|
||||||
thumb_func_end ClearGpuRegBits
|
|
||||||
|
|
||||||
thumb_func_start SyncRegIE
|
|
||||||
; void SyncRegIE()
|
|
||||||
SyncRegIE: ; 8001228
|
|
||||||
push {r4,r5,lr}
|
|
||||||
ldr r5, =0x030008d9
|
|
||||||
ldrb r0, [r5]
|
|
||||||
cmp r0, 0
|
|
||||||
beq _08001246
|
|
||||||
ldr r2, =0x04000208
|
|
||||||
ldrh r1, [r2]
|
|
||||||
movs r4, 0
|
|
||||||
strh r4, [r2]
|
|
||||||
ldr r3, =0x04000200
|
|
||||||
ldr r0, =0x030008da
|
|
||||||
ldrh r0, [r0]
|
|
||||||
strh r0, [r3]
|
|
||||||
strh r1, [r2]
|
|
||||||
strb r4, [r5]
|
|
||||||
_08001246:
|
|
||||||
pop {r4,r5}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.pool
|
|
||||||
thumb_func_end SyncRegIE
|
|
||||||
|
|
||||||
thumb_func_start EnableInterrupts
|
|
||||||
; void EnableInterrupts(u16 mask)
|
|
||||||
EnableInterrupts: ; 800125C
|
|
||||||
push {r4,lr}
|
|
||||||
lsls r0, 16
|
|
||||||
lsrs r0, 16
|
|
||||||
ldr r4, =0x030008da
|
|
||||||
ldrh r1, [r4]
|
|
||||||
orrs r0, r1
|
|
||||||
strh r0, [r4]
|
|
||||||
ldr r1, =0x030008d9
|
|
||||||
movs r0, 0x1
|
|
||||||
strb r0, [r1]
|
|
||||||
bl SyncRegIE
|
|
||||||
ldrh r0, [r4]
|
|
||||||
bl UpdateRegDispstatIntrBits
|
|
||||||
pop {r4}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.pool
|
|
||||||
thumb_func_end EnableInterrupts
|
|
||||||
|
|
||||||
thumb_func_start DisableInterrupts
|
|
||||||
; void DisableInterrupts(u16 mask)
|
|
||||||
DisableInterrupts: ; 8001288
|
|
||||||
push {r4,lr}
|
|
||||||
lsls r0, 16
|
|
||||||
lsrs r0, 16
|
|
||||||
ldr r4, =0x030008da
|
|
||||||
ldrh r1, [r4]
|
|
||||||
bics r1, r0
|
|
||||||
strh r1, [r4]
|
|
||||||
ldr r1, =0x030008d9
|
|
||||||
movs r0, 0x1
|
|
||||||
strb r0, [r1]
|
|
||||||
bl SyncRegIE
|
|
||||||
ldrh r0, [r4]
|
|
||||||
bl UpdateRegDispstatIntrBits
|
|
||||||
pop {r4}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.pool
|
|
||||||
thumb_func_end DisableInterrupts
|
|
||||||
|
|
||||||
thumb_func_start UpdateRegDispstatIntrBits
|
|
||||||
; void UpdateRegDispstatIntrBits(u16 mask)
|
|
||||||
UpdateRegDispstatIntrBits: ; 80012B4
|
|
||||||
push {r4,lr}
|
|
||||||
adds r4, r0, 0
|
|
||||||
lsls r4, 16
|
|
||||||
lsrs r4, 16
|
|
||||||
movs r0, 0x4
|
|
||||||
bl GetGpuReg
|
|
||||||
movs r2, 0x18
|
|
||||||
ands r2, r0
|
|
||||||
movs r1, 0x1
|
|
||||||
ands r1, r4
|
|
||||||
negs r0, r1
|
|
||||||
orrs r0, r1
|
|
||||||
asrs r1, r0, 31
|
|
||||||
movs r0, 0x8
|
|
||||||
ands r1, r0
|
|
||||||
movs r0, 0x2
|
|
||||||
ands r0, r4
|
|
||||||
cmp r0, 0
|
|
||||||
beq _080012E0
|
|
||||||
movs r0, 0x10
|
|
||||||
orrs r1, r0
|
|
||||||
_080012E0:
|
|
||||||
cmp r2, r1
|
|
||||||
beq _080012EA
|
|
||||||
movs r0, 0x4
|
|
||||||
bl SetGpuReg
|
|
||||||
_080012EA:
|
|
||||||
pop {r4}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
thumb_func_end UpdateRegDispstatIntrBits
|
|
28
fix_local_labels.pl
Normal file
28
fix_local_labels.pl
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
open(IN_FILE, $ARGV[0]);
|
||||||
|
open(OUT_FILE, ">", $ARGV[1]);
|
||||||
|
|
||||||
|
my @labels = ();
|
||||||
|
|
||||||
|
while (<IN_FILE>) {
|
||||||
|
if ($_ =~ /^\.(.+):/) {
|
||||||
|
push(@labels, $1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
seek IN_FILE, 0, 0;
|
||||||
|
|
||||||
|
while (<IN_FILE>) {
|
||||||
|
for (my $i = 0; $i < scalar(@labels); $i++) {
|
||||||
|
my $find = quotemeta '.' . $labels[$i];
|
||||||
|
my $replace = '$' . $labels[$i];
|
||||||
|
$_ =~ s/$find/$replace/;
|
||||||
|
}
|
||||||
|
|
||||||
|
print OUT_FILE $_;
|
||||||
|
}
|
||||||
|
|
||||||
|
close(IN_FILE);
|
||||||
|
close(OUT_FILE);
|
@ -36,234 +36,234 @@ $(monpaldir)/castform_shiny_palette.gbapal: $(monpaldir)/castform_normal_form_sh
|
|||||||
tilesetdir := data/graphics/tilesets
|
tilesetdir := data/graphics/tilesets
|
||||||
|
|
||||||
$(tilesetdir)/secondary/petalburg/tiles.4bpp: $(tilesetdir)/secondary/petalburg/tiles.png
|
$(tilesetdir)/secondary/petalburg/tiles.4bpp: $(tilesetdir)/secondary/petalburg/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 159
|
$(GFX) $< $@ -num_tiles 159
|
||||||
|
|
||||||
$(tilesetdir)/secondary/rustboro/tiles.4bpp: $(tilesetdir)/secondary/rustboro/tiles.png
|
$(tilesetdir)/secondary/rustboro/tiles.4bpp: $(tilesetdir)/secondary/rustboro/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 498
|
$(GFX) $< $@ -num_tiles 498
|
||||||
|
|
||||||
$(tilesetdir)/secondary/dewford/tiles.4bpp: $(tilesetdir)/secondary/dewford/tiles.png
|
$(tilesetdir)/secondary/dewford/tiles.4bpp: $(tilesetdir)/secondary/dewford/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 503
|
$(GFX) $< $@ -num_tiles 503
|
||||||
|
|
||||||
$(tilesetdir)/secondary/slateport/tiles.4bpp: $(tilesetdir)/secondary/slateport/tiles.png
|
$(tilesetdir)/secondary/slateport/tiles.4bpp: $(tilesetdir)/secondary/slateport/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 504
|
$(GFX) $< $@ -num_tiles 504
|
||||||
|
|
||||||
$(tilesetdir)/secondary/mauville/tiles.4bpp: $(tilesetdir)/secondary/mauville/tiles.png
|
$(tilesetdir)/secondary/mauville/tiles.4bpp: $(tilesetdir)/secondary/mauville/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 503
|
$(GFX) $< $@ -num_tiles 503
|
||||||
|
|
||||||
$(tilesetdir)/secondary/lavaridge/tiles.4bpp: $(tilesetdir)/secondary/lavaridge/tiles.png
|
$(tilesetdir)/secondary/lavaridge/tiles.4bpp: $(tilesetdir)/secondary/lavaridge/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 450
|
$(GFX) $< $@ -num_tiles 450
|
||||||
|
|
||||||
$(tilesetdir)/secondary/fortree/tiles.4bpp: $(tilesetdir)/secondary/fortree/tiles.png
|
$(tilesetdir)/secondary/fortree/tiles.4bpp: $(tilesetdir)/secondary/fortree/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 493
|
$(GFX) $< $@ -num_tiles 493
|
||||||
|
|
||||||
$(tilesetdir)/secondary/pacifidlog/tiles.4bpp: $(tilesetdir)/secondary/pacifidlog/tiles.png
|
$(tilesetdir)/secondary/pacifidlog/tiles.4bpp: $(tilesetdir)/secondary/pacifidlog/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 504
|
$(GFX) $< $@ -num_tiles 504
|
||||||
|
|
||||||
$(tilesetdir)/secondary/sootopolis/tiles.4bpp: $(tilesetdir)/secondary/sootopolis/tiles.png
|
$(tilesetdir)/secondary/sootopolis/tiles.4bpp: $(tilesetdir)/secondary/sootopolis/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 328
|
$(GFX) $< $@ -num_tiles 328
|
||||||
|
|
||||||
$(tilesetdir)/secondary/battle_frontier_outside_west/tiles.4bpp: $(tilesetdir)/secondary/battle_frontier_outside_west/tiles.png
|
$(tilesetdir)/secondary/battle_frontier_outside_west/tiles.4bpp: $(tilesetdir)/secondary/battle_frontier_outside_west/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 508
|
$(GFX) $< $@ -num_tiles 508
|
||||||
|
|
||||||
$(tilesetdir)/secondary/battle_frontier_outside_east/tiles.4bpp: $(tilesetdir)/secondary/battle_frontier_outside_east/tiles.png
|
$(tilesetdir)/secondary/battle_frontier_outside_east/tiles.4bpp: $(tilesetdir)/secondary/battle_frontier_outside_east/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 508
|
$(GFX) $< $@ -num_tiles 508
|
||||||
|
|
||||||
$(tilesetdir)/primary/inside_building/tiles.4bpp: $(tilesetdir)/primary/inside_building/tiles.png
|
$(tilesetdir)/primary/inside_building/tiles.4bpp: $(tilesetdir)/primary/inside_building/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 502
|
$(GFX) $< $@ -num_tiles 502
|
||||||
|
|
||||||
$(tilesetdir)/secondary/shop/tiles.4bpp: $(tilesetdir)/secondary/shop/tiles.png
|
$(tilesetdir)/secondary/shop/tiles.4bpp: $(tilesetdir)/secondary/shop/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 502
|
$(GFX) $< $@ -num_tiles 502
|
||||||
|
|
||||||
$(tilesetdir)/secondary/pokemon_center/tiles.4bpp: $(tilesetdir)/secondary/pokemon_center/tiles.png
|
$(tilesetdir)/secondary/pokemon_center/tiles.4bpp: $(tilesetdir)/secondary/pokemon_center/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 478
|
$(GFX) $< $@ -num_tiles 478
|
||||||
|
|
||||||
$(tilesetdir)/secondary/cave/tiles.4bpp: $(tilesetdir)/secondary/cave/tiles.png
|
$(tilesetdir)/secondary/cave/tiles.4bpp: $(tilesetdir)/secondary/cave/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 425
|
$(GFX) $< $@ -num_tiles 425
|
||||||
|
|
||||||
$(tilesetdir)/secondary/pokemon_school/tiles.4bpp: $(tilesetdir)/secondary/pokemon_school/tiles.png
|
$(tilesetdir)/secondary/pokemon_school/tiles.4bpp: $(tilesetdir)/secondary/pokemon_school/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 278
|
$(GFX) $< $@ -num_tiles 278
|
||||||
|
|
||||||
$(tilesetdir)/secondary/pokemon_fan_club/tiles.4bpp: $(tilesetdir)/secondary/pokemon_fan_club/tiles.png
|
$(tilesetdir)/secondary/pokemon_fan_club/tiles.4bpp: $(tilesetdir)/secondary/pokemon_fan_club/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 319
|
$(GFX) $< $@ -num_tiles 319
|
||||||
|
|
||||||
$(tilesetdir)/secondary/unused_1/tiles.4bpp: $(tilesetdir)/secondary/unused_1/tiles.png
|
$(tilesetdir)/secondary/unused_1/tiles.4bpp: $(tilesetdir)/secondary/unused_1/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 17
|
$(GFX) $< $@ -num_tiles 17
|
||||||
|
|
||||||
$(tilesetdir)/secondary/meteor_falls/tiles.4bpp: $(tilesetdir)/secondary/meteor_falls/tiles.png
|
$(tilesetdir)/secondary/meteor_falls/tiles.4bpp: $(tilesetdir)/secondary/meteor_falls/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 460
|
$(GFX) $< $@ -num_tiles 460
|
||||||
|
|
||||||
$(tilesetdir)/secondary/oceanic_museum/tiles.4bpp: $(tilesetdir)/secondary/oceanic_museum/tiles.png
|
$(tilesetdir)/secondary/oceanic_museum/tiles.4bpp: $(tilesetdir)/secondary/oceanic_museum/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 319
|
$(GFX) $< $@ -num_tiles 319
|
||||||
|
|
||||||
$(tilesetdir)/secondary/cable_club/unknown_tiles.4bpp: $(tilesetdir)/secondary/cable_club/unknown_tiles.png
|
$(tilesetdir)/secondary/cable_club/unknown_tiles.4bpp: $(tilesetdir)/secondary/cable_club/unknown_tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 120
|
$(GFX) $< $@ -num_tiles 120
|
||||||
|
|
||||||
$(tilesetdir)/secondary/seashore_house/tiles.4bpp: $(tilesetdir)/secondary/seashore_house/tiles.png
|
$(tilesetdir)/secondary/seashore_house/tiles.4bpp: $(tilesetdir)/secondary/seashore_house/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 312
|
$(GFX) $< $@ -num_tiles 312
|
||||||
|
|
||||||
$(tilesetdir)/secondary/pretty_petal_flower_shop/tiles.4bpp: $(tilesetdir)/secondary/pretty_petal_flower_shop/tiles.png
|
$(tilesetdir)/secondary/pretty_petal_flower_shop/tiles.4bpp: $(tilesetdir)/secondary/pretty_petal_flower_shop/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 345
|
$(GFX) $< $@ -num_tiles 345
|
||||||
|
|
||||||
$(tilesetdir)/secondary/pokemon_day_care/tiles.4bpp: $(tilesetdir)/secondary/pokemon_day_care/tiles.png
|
$(tilesetdir)/secondary/pokemon_day_care/tiles.4bpp: $(tilesetdir)/secondary/pokemon_day_care/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 355
|
$(GFX) $< $@ -num_tiles 355
|
||||||
|
|
||||||
$(tilesetdir)/secondary/secret_base/brown_cave/unused_tiles.4bpp: $(tilesetdir)/secondary/secret_base/brown_cave/tiles.png
|
$(tilesetdir)/secondary/secret_base/brown_cave/unused_tiles.4bpp: $(tilesetdir)/secondary/secret_base/brown_cave/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 82
|
$(GFX) $< $@ -num_tiles 82
|
||||||
|
|
||||||
$(tilesetdir)/secondary/secret_base/tree/unused_tiles.4bpp: $(tilesetdir)/secondary/secret_base/tree/tiles.png
|
$(tilesetdir)/secondary/secret_base/tree/unused_tiles.4bpp: $(tilesetdir)/secondary/secret_base/tree/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 82
|
$(GFX) $< $@ -num_tiles 82
|
||||||
|
|
||||||
$(tilesetdir)/secondary/secret_base/shrub/unused_tiles.4bpp: $(tilesetdir)/secondary/secret_base/shrub/tiles.png
|
$(tilesetdir)/secondary/secret_base/shrub/unused_tiles.4bpp: $(tilesetdir)/secondary/secret_base/shrub/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 82
|
$(GFX) $< $@ -num_tiles 82
|
||||||
|
|
||||||
$(tilesetdir)/secondary/secret_base/blue_cave/unused_tiles.4bpp: $(tilesetdir)/secondary/secret_base/blue_cave/tiles.png
|
$(tilesetdir)/secondary/secret_base/blue_cave/unused_tiles.4bpp: $(tilesetdir)/secondary/secret_base/blue_cave/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 82
|
$(GFX) $< $@ -num_tiles 82
|
||||||
|
|
||||||
$(tilesetdir)/secondary/secret_base/yellow_cave/unused_tiles.4bpp: $(tilesetdir)/secondary/secret_base/yellow_cave/tiles.png
|
$(tilesetdir)/secondary/secret_base/yellow_cave/unused_tiles.4bpp: $(tilesetdir)/secondary/secret_base/yellow_cave/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 82
|
$(GFX) $< $@ -num_tiles 82
|
||||||
|
|
||||||
$(tilesetdir)/secondary/secret_base/red_cave/unused_tiles.4bpp: $(tilesetdir)/secondary/secret_base/red_cave/tiles.png
|
$(tilesetdir)/secondary/secret_base/red_cave/unused_tiles.4bpp: $(tilesetdir)/secondary/secret_base/red_cave/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 82
|
$(GFX) $< $@ -num_tiles 82
|
||||||
|
|
||||||
$(tilesetdir)/secondary/secret_base/brown_cave/tiles.4bpp: $(tilesetdir)/secondary/secret_base/brown_cave/tiles.png
|
$(tilesetdir)/secondary/secret_base/brown_cave/tiles.4bpp: $(tilesetdir)/secondary/secret_base/brown_cave/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 83
|
$(GFX) $< $@ -num_tiles 83
|
||||||
|
|
||||||
$(tilesetdir)/secondary/secret_base/tree/tiles.4bpp: $(tilesetdir)/secondary/secret_base/tree/tiles.png
|
$(tilesetdir)/secondary/secret_base/tree/tiles.4bpp: $(tilesetdir)/secondary/secret_base/tree/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 83
|
$(GFX) $< $@ -num_tiles 83
|
||||||
|
|
||||||
$(tilesetdir)/secondary/secret_base/shrub/tiles.4bpp: $(tilesetdir)/secondary/secret_base/shrub/tiles.png
|
$(tilesetdir)/secondary/secret_base/shrub/tiles.4bpp: $(tilesetdir)/secondary/secret_base/shrub/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 83
|
$(GFX) $< $@ -num_tiles 83
|
||||||
|
|
||||||
$(tilesetdir)/secondary/secret_base/blue_cave/tiles.4bpp: $(tilesetdir)/secondary/secret_base/blue_cave/tiles.png
|
$(tilesetdir)/secondary/secret_base/blue_cave/tiles.4bpp: $(tilesetdir)/secondary/secret_base/blue_cave/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 83
|
$(GFX) $< $@ -num_tiles 83
|
||||||
|
|
||||||
$(tilesetdir)/secondary/secret_base/yellow_cave/tiles.4bpp: $(tilesetdir)/secondary/secret_base/yellow_cave/tiles.png
|
$(tilesetdir)/secondary/secret_base/yellow_cave/tiles.4bpp: $(tilesetdir)/secondary/secret_base/yellow_cave/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 83
|
$(GFX) $< $@ -num_tiles 83
|
||||||
|
|
||||||
$(tilesetdir)/secondary/secret_base/red_cave/tiles.4bpp: $(tilesetdir)/secondary/secret_base/red_cave/tiles.png
|
$(tilesetdir)/secondary/secret_base/red_cave/tiles.4bpp: $(tilesetdir)/secondary/secret_base/red_cave/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 83
|
$(GFX) $< $@ -num_tiles 83
|
||||||
|
|
||||||
$(tilesetdir)/secondary/inside_of_truck/tiles.4bpp: $(tilesetdir)/secondary/inside_of_truck/tiles.png
|
$(tilesetdir)/secondary/inside_of_truck/tiles.4bpp: $(tilesetdir)/secondary/inside_of_truck/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 62
|
$(GFX) $< $@ -num_tiles 62
|
||||||
|
|
||||||
$(tilesetdir)/secondary/contest/tiles.4bpp: $(tilesetdir)/secondary/contest/tiles.png
|
$(tilesetdir)/secondary/contest/tiles.4bpp: $(tilesetdir)/secondary/contest/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 430
|
$(GFX) $< $@ -num_tiles 430
|
||||||
|
|
||||||
$(tilesetdir)/secondary/lilycove_museum/tiles.4bpp: $(tilesetdir)/secondary/lilycove_museum/tiles.png
|
$(tilesetdir)/secondary/lilycove_museum/tiles.4bpp: $(tilesetdir)/secondary/lilycove_museum/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 431
|
$(GFX) $< $@ -num_tiles 431
|
||||||
|
|
||||||
$(tilesetdir)/secondary/lab/tiles.4bpp: $(tilesetdir)/secondary/lab/tiles.png
|
$(tilesetdir)/secondary/lab/tiles.4bpp: $(tilesetdir)/secondary/lab/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 500
|
$(GFX) $< $@ -num_tiles 500
|
||||||
|
|
||||||
$(tilesetdir)/secondary/underwater/tiles.4bpp: $(tilesetdir)/secondary/underwater/tiles.png
|
$(tilesetdir)/secondary/underwater/tiles.4bpp: $(tilesetdir)/secondary/underwater/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 500
|
$(GFX) $< $@ -num_tiles 500
|
||||||
|
|
||||||
$(tilesetdir)/secondary/generic_building/tiles.4bpp: $(tilesetdir)/secondary/generic_building/tiles.png
|
$(tilesetdir)/secondary/generic_building/tiles.4bpp: $(tilesetdir)/secondary/generic_building/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 509
|
$(GFX) $< $@ -num_tiles 509
|
||||||
|
|
||||||
$(tilesetdir)/secondary/mauville_game_corner/tiles.4bpp: $(tilesetdir)/secondary/mauville_game_corner/tiles.png
|
$(tilesetdir)/secondary/mauville_game_corner/tiles.4bpp: $(tilesetdir)/secondary/mauville_game_corner/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 469
|
$(GFX) $< $@ -num_tiles 469
|
||||||
|
|
||||||
$(tilesetdir)/secondary/unused_2/tiles.4bpp: $(tilesetdir)/secondary/unused_2/tiles.png
|
$(tilesetdir)/secondary/unused_2/tiles.4bpp: $(tilesetdir)/secondary/unused_2/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 150
|
$(GFX) $< $@ -num_tiles 150
|
||||||
|
|
||||||
$(tilesetdir)/secondary/rustboro_gym/tiles.4bpp: $(tilesetdir)/secondary/rustboro_gym/tiles.png
|
$(tilesetdir)/secondary/rustboro_gym/tiles.4bpp: $(tilesetdir)/secondary/rustboro_gym/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 60
|
$(GFX) $< $@ -num_tiles 60
|
||||||
|
|
||||||
$(tilesetdir)/secondary/dewford_gym/tiles.4bpp: $(tilesetdir)/secondary/dewford_gym/tiles.png
|
$(tilesetdir)/secondary/dewford_gym/tiles.4bpp: $(tilesetdir)/secondary/dewford_gym/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 61
|
$(GFX) $< $@ -num_tiles 61
|
||||||
|
|
||||||
$(tilesetdir)/secondary/lavaridge_gym/tiles.4bpp: $(tilesetdir)/secondary/lavaridge_gym/tiles.png
|
$(tilesetdir)/secondary/lavaridge_gym/tiles.4bpp: $(tilesetdir)/secondary/lavaridge_gym/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 54
|
$(GFX) $< $@ -num_tiles 54
|
||||||
|
|
||||||
$(tilesetdir)/secondary/petalburg_gym/tiles.4bpp: $(tilesetdir)/secondary/petalburg_gym/tiles.png
|
$(tilesetdir)/secondary/petalburg_gym/tiles.4bpp: $(tilesetdir)/secondary/petalburg_gym/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 148
|
$(GFX) $< $@ -num_tiles 148
|
||||||
|
|
||||||
$(tilesetdir)/secondary/fortree_gym/tiles.4bpp: $(tilesetdir)/secondary/fortree_gym/tiles.png
|
$(tilesetdir)/secondary/fortree_gym/tiles.4bpp: $(tilesetdir)/secondary/fortree_gym/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 61
|
$(GFX) $< $@ -num_tiles 61
|
||||||
|
|
||||||
$(tilesetdir)/secondary/mossdeep_gym/tiles.4bpp: $(tilesetdir)/secondary/mossdeep_gym/tiles.png
|
$(tilesetdir)/secondary/mossdeep_gym/tiles.4bpp: $(tilesetdir)/secondary/mossdeep_gym/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 82
|
$(GFX) $< $@ -num_tiles 82
|
||||||
|
|
||||||
$(tilesetdir)/secondary/sootopolis_gym/tiles.4bpp: $(tilesetdir)/secondary/sootopolis_gym/tiles.png
|
$(tilesetdir)/secondary/sootopolis_gym/tiles.4bpp: $(tilesetdir)/secondary/sootopolis_gym/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 484
|
$(GFX) $< $@ -num_tiles 484
|
||||||
|
|
||||||
$(tilesetdir)/secondary/trick_house_puzzle/tiles.4bpp: $(tilesetdir)/secondary/trick_house_puzzle/tiles.png
|
$(tilesetdir)/secondary/trick_house_puzzle/tiles.4bpp: $(tilesetdir)/secondary/trick_house_puzzle/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 294
|
$(GFX) $< $@ -num_tiles 294
|
||||||
|
|
||||||
$(tilesetdir)/secondary/inside_ship/tiles.4bpp: $(tilesetdir)/secondary/inside_ship/tiles.png
|
$(tilesetdir)/secondary/inside_ship/tiles.4bpp: $(tilesetdir)/secondary/inside_ship/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 342
|
$(GFX) $< $@ -num_tiles 342
|
||||||
|
|
||||||
$(tilesetdir)/secondary/elite_four/tiles.4bpp: $(tilesetdir)/secondary/elite_four/tiles.png
|
$(tilesetdir)/secondary/elite_four/tiles.4bpp: $(tilesetdir)/secondary/elite_four/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 505
|
$(GFX) $< $@ -num_tiles 505
|
||||||
|
|
||||||
$(tilesetdir)/secondary/battle_frontier/tiles.4bpp: $(tilesetdir)/secondary/battle_frontier/tiles.png
|
$(tilesetdir)/secondary/battle_frontier/tiles.4bpp: $(tilesetdir)/secondary/battle_frontier/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 310
|
$(GFX) $< $@ -num_tiles 310
|
||||||
|
|
||||||
$(tilesetdir)/secondary/battle_factory/tiles.4bpp: $(tilesetdir)/secondary/battle_factory/tiles.png
|
$(tilesetdir)/secondary/battle_factory/tiles.4bpp: $(tilesetdir)/secondary/battle_factory/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 424
|
$(GFX) $< $@ -num_tiles 424
|
||||||
|
|
||||||
$(tilesetdir)/secondary/battle_pike/tiles.4bpp: $(tilesetdir)/secondary/battle_pike/tiles.png
|
$(tilesetdir)/secondary/battle_pike/tiles.4bpp: $(tilesetdir)/secondary/battle_pike/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 382
|
$(GFX) $< $@ -num_tiles 382
|
||||||
|
|
||||||
$(tilesetdir)/secondary/mirage_tower/tiles.4bpp: $(tilesetdir)/secondary/mirage_tower/tiles.png
|
$(tilesetdir)/secondary/mirage_tower/tiles.4bpp: $(tilesetdir)/secondary/mirage_tower/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 420
|
$(GFX) $< $@ -num_tiles 420
|
||||||
|
|
||||||
$(tilesetdir)/secondary/mossdeep_game_corner/tiles.4bpp: $(tilesetdir)/secondary/mossdeep_game_corner/tiles.png
|
$(tilesetdir)/secondary/mossdeep_game_corner/tiles.4bpp: $(tilesetdir)/secondary/mossdeep_game_corner/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 95
|
$(GFX) $< $@ -num_tiles 95
|
||||||
|
|
||||||
$(tilesetdir)/secondary/island_harbor/tiles.4bpp: $(tilesetdir)/secondary/island_harbor/tiles.png
|
$(tilesetdir)/secondary/island_harbor/tiles.4bpp: $(tilesetdir)/secondary/island_harbor/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 503
|
$(GFX) $< $@ -num_tiles 503
|
||||||
|
|
||||||
$(tilesetdir)/secondary/trainer_hill/tiles.4bpp: $(tilesetdir)/secondary/trainer_hill/tiles.png
|
$(tilesetdir)/secondary/trainer_hill/tiles.4bpp: $(tilesetdir)/secondary/trainer_hill/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 374
|
$(GFX) $< $@ -num_tiles 374
|
||||||
|
|
||||||
$(tilesetdir)/secondary/navel_rock/tiles.4bpp: $(tilesetdir)/secondary/navel_rock/tiles.png
|
$(tilesetdir)/secondary/navel_rock/tiles.4bpp: $(tilesetdir)/secondary/navel_rock/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 420
|
$(GFX) $< $@ -num_tiles 420
|
||||||
|
|
||||||
$(tilesetdir)/secondary/battle_frontier_ranking_hall/tiles.4bpp: $(tilesetdir)/secondary/battle_frontier_ranking_hall/tiles.png
|
$(tilesetdir)/secondary/battle_frontier_ranking_hall/tiles.4bpp: $(tilesetdir)/secondary/battle_frontier_ranking_hall/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 136
|
$(GFX) $< $@ -num_tiles 136
|
||||||
|
|
||||||
$(tilesetdir)/secondary/mystery_events_house/tiles.4bpp: $(tilesetdir)/secondary/mystery_events_house/tiles.png
|
$(tilesetdir)/secondary/mystery_events_house/tiles.4bpp: $(tilesetdir)/secondary/mystery_events_house/tiles.png
|
||||||
$(gfx) $< $@ -num_tiles 509
|
$(GFX) $< $@ -num_tiles 509
|
||||||
|
|
||||||
fontdir := data/graphics/fonts
|
fontdir := data/graphics/fonts
|
||||||
|
|
||||||
$(fontdir)/font0.latfont: $(fontdir)/font0_latin.png
|
$(fontdir)/font0.latfont: $(fontdir)/font0_latin.png
|
||||||
$(gfx) $< $@
|
$(GFX) $< $@
|
||||||
|
|
||||||
$(fontdir)/font1.latfont: $(fontdir)/font1_latin.png
|
$(fontdir)/font1.latfont: $(fontdir)/font1_latin.png
|
||||||
$(gfx) $< $@
|
$(GFX) $< $@
|
||||||
|
|
||||||
$(fontdir)/font2.latfont: $(fontdir)/font2_latin.png
|
$(fontdir)/font2.latfont: $(fontdir)/font2_latin.png
|
||||||
$(gfx) $< $@
|
$(GFX) $< $@
|
||||||
|
|
||||||
$(fontdir)/font7.latfont: $(fontdir)/font7_latin.png
|
$(fontdir)/font7.latfont: $(fontdir)/font7_latin.png
|
||||||
$(gfx) $< $@
|
$(GFX) $< $@
|
||||||
|
|
||||||
$(fontdir)/font8.latfont: $(fontdir)/font8_latin.png
|
$(fontdir)/font8.latfont: $(fontdir)/font8_latin.png
|
||||||
$(gfx) $< $@
|
$(GFX) $< $@
|
||||||
|
|
||||||
$(fontdir)/font0.hwjpnfont: $(fontdir)/font0_japanese.png
|
$(fontdir)/font0.hwjpnfont: $(fontdir)/font0_japanese.png
|
||||||
$(gfx) $< $@
|
$(GFX) $< $@
|
||||||
|
|
||||||
$(fontdir)/font1.hwjpnfont: $(fontdir)/font1_japanese.png
|
$(fontdir)/font1.hwjpnfont: $(fontdir)/font1_japanese.png
|
||||||
$(gfx) $< $@
|
$(GFX) $< $@
|
||||||
|
|
||||||
$(fontdir)/font9.hwjpnfont: $(fontdir)/font9_japanese.png
|
$(fontdir)/font9.hwjpnfont: $(fontdir)/font9_japanese.png
|
||||||
$(gfx) $< $@
|
$(GFX) $< $@
|
||||||
|
|
||||||
$(fontdir)/font2.fwjpnfont: $(fontdir)/font2_japanese.png
|
$(fontdir)/font2.fwjpnfont: $(fontdir)/font2_japanese.png
|
||||||
$(gfx) $< $@
|
$(GFX) $< $@
|
||||||
|
|
||||||
$(fontdir)/font6.fwjpnfont: $(fontdir)/font6_braille.png
|
$(fontdir)/font6.fwjpnfont: $(fontdir)/font6_braille.png
|
||||||
$(gfx) $< $@
|
$(GFX) $< $@
|
||||||
|
|
||||||
$(fontdir)/unused_frlg_male.fwjpnfont: $(fontdir)/unused_japanese_frlg_male_font.png
|
$(fontdir)/unused_frlg_male.fwjpnfont: $(fontdir)/unused_japanese_frlg_male_font.png
|
||||||
$(gfx) $< $@
|
$(GFX) $< $@
|
||||||
|
|
||||||
$(fontdir)/unused_frlg_female.fwjpnfont: $(fontdir)/unused_japanese_frlg_female_font.png
|
$(fontdir)/unused_frlg_female.fwjpnfont: $(fontdir)/unused_japanese_frlg_female_font.png
|
||||||
$(gfx) $< $@
|
$(GFX) $< $@
|
||||||
|
|
||||||
data/graphics/title_screen/pokemon_logo.gbapal: data/graphics/title_screen/pokemon_logo.pal
|
data/graphics/title_screen/pokemon_logo.gbapal: data/graphics/title_screen/pokemon_logo.pal
|
||||||
$(gfx) $< $@ -num_colors 224
|
$(GFX) $< $@ -num_colors 224
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
#ifndef GUARD_GLOBAL_H
|
||||||
|
#define GUARD_GLOBAL_H
|
||||||
|
|
||||||
typedef unsigned char u8;
|
typedef unsigned char u8;
|
||||||
typedef unsigned short u16;
|
typedef unsigned short u16;
|
||||||
typedef unsigned int u32;
|
typedef unsigned int u32;
|
||||||
@ -30,3 +33,5 @@ typedef u32 bool32;
|
|||||||
#define CPU_SET_32BIT (1 << 26)
|
#define CPU_SET_32BIT (1 << 26)
|
||||||
|
|
||||||
extern void CpuSet(void *src, void *dest, u32 controlData);
|
extern void CpuSet(void *src, void *dest, u32 controlData);
|
||||||
|
|
||||||
|
#endif // GUARD_GLOBAL_H
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
#ifndef GUARD_IO_REGS_H
|
||||||
|
#define GUARD_IO_REGS_H
|
||||||
|
|
||||||
#define REG_BASE 0x4000000 // I/O register base address
|
#define REG_BASE 0x4000000 // I/O register base address
|
||||||
|
|
||||||
// I/O register offsets
|
// I/O register offsets
|
||||||
@ -335,3 +338,51 @@
|
|||||||
#define REG_ADDR_IF (REG_BASE + REG_OFFSET_IF)
|
#define REG_ADDR_IF (REG_BASE + REG_OFFSET_IF)
|
||||||
|
|
||||||
#define REG_ADDR_WAITCNT (REG_BASE + REG_OFFSET_WAITCNT)
|
#define REG_ADDR_WAITCNT (REG_BASE + REG_OFFSET_WAITCNT)
|
||||||
|
|
||||||
|
// I/O registers
|
||||||
|
|
||||||
|
#define REG_DISPCNT (*(vu32 *)REG_ADDR_DISPCNT)
|
||||||
|
#define REG_DISPSTAT (*(vu16 *)REG_ADDR_DISPSTAT)
|
||||||
|
#define REG_VCOUNT (*(vu16 *)REG_ADDR_VCOUNT)
|
||||||
|
|
||||||
|
#define REG_IME (*(vu16 *)REG_ADDR_IME)
|
||||||
|
#define REG_IE (*(vu16 *)REG_ADDR_IE)
|
||||||
|
#define REG_IF (*(vu16 *)REG_ADDR_IF)
|
||||||
|
|
||||||
|
// I/O register fields
|
||||||
|
|
||||||
|
// DISPCNT
|
||||||
|
#define DISPCNT_MODE_0 0x0000
|
||||||
|
#define DISPCNT_MODE_1 0x0001
|
||||||
|
#define DISPCNT_MODE_2 0x0002
|
||||||
|
#define DISPCNT_MODE_3 0x0003
|
||||||
|
#define DISPCNT_MODE_4 0x0004
|
||||||
|
#define DISPCNT_MODE_5 0x0005
|
||||||
|
#define DISPCNT_OBJ_1D_MAP 0x0040
|
||||||
|
#define DISPCNT_FORCED_BLANK 0x0080
|
||||||
|
|
||||||
|
// DISPSTAT
|
||||||
|
#define DISPSTAT_VBLANK 0x0001 // in V-Blank
|
||||||
|
#define DISPSTAT_HBLANK 0x0002 // in H-Blank
|
||||||
|
#define DISPSTAT_VCOUNT 0x0004 // V-Count match
|
||||||
|
#define DISPSTAT_VBLANK_INTR 0x0008 // V-Blank interrupt enabled
|
||||||
|
#define DISPSTAT_HBLANK_INTR 0x0010 // H-Blank interrupt enabled
|
||||||
|
#define DISPSTAT_VCOUNT_INTR 0x0020 // V-Count interrupt enabled
|
||||||
|
|
||||||
|
// interrupt flags
|
||||||
|
#define INTR_FLAG_VBLANK (1 << 0)
|
||||||
|
#define INTR_FLAG_HBLANK (1 << 1)
|
||||||
|
#define INTR_FLAG_VCOUNT (1 << 2)
|
||||||
|
#define INTR_FLAG_TIMER0 (1 << 3)
|
||||||
|
#define INTR_FLAG_TIMER1 (1 << 4)
|
||||||
|
#define INTR_FLAG_TIMER2 (1 << 5)
|
||||||
|
#define INTR_FLAG_TIMER3 (1 << 6)
|
||||||
|
#define INTR_FLAG_SERIAL (1 << 7)
|
||||||
|
#define INTR_FLAG_DMA0 (1 << 8)
|
||||||
|
#define INTR_FLAG_DMA1 (1 << 9)
|
||||||
|
#define INTR_FLAG_DMA2 (1 << 10)
|
||||||
|
#define INTR_FLAG_DMA3 (1 << 11)
|
||||||
|
#define INTR_FLAG_KEYPAD (1 << 12)
|
||||||
|
#define INTR_FLAG_GAMEPAK (1 << 13)
|
||||||
|
|
||||||
|
#endif // GUARD_IO_REGS_H
|
||||||
|
178
src/gpu_regs.c
Normal file
178
src/gpu_regs.c
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
#include "global.h"
|
||||||
|
|
||||||
|
#define GPU_REG_BUFFER_SIZE 0x60
|
||||||
|
|
||||||
|
#define REG_BUF(offset) (*(u16 *)(&gGpuRegBuffer[offset]))
|
||||||
|
#define GPU_REG(offset) (*(vu16 *)(REG_BASE + offset))
|
||||||
|
|
||||||
|
#define EMPTY_SLOT 0xFF
|
||||||
|
|
||||||
|
extern u8 gGpuRegBuffer[GPU_REG_BUFFER_SIZE];
|
||||||
|
extern u8 gGpuRegWaitingList[GPU_REG_BUFFER_SIZE];
|
||||||
|
extern bool8 gGpuRegBufferLocked;
|
||||||
|
extern bool8 gShouldSyncRegIE;
|
||||||
|
extern u16 gRegIE;
|
||||||
|
|
||||||
|
static void CopyBufferedValueToGpuReg(u8 regOffset);
|
||||||
|
static void SyncRegIE();
|
||||||
|
static void UpdateRegDispstatIntrBits(u16 regIE);
|
||||||
|
|
||||||
|
void InitGpuRegManager()
|
||||||
|
{
|
||||||
|
s32 i;
|
||||||
|
|
||||||
|
for (i = 0; i < GPU_REG_BUFFER_SIZE; i++) {
|
||||||
|
gGpuRegBuffer[i] = 0;
|
||||||
|
gGpuRegWaitingList[i] = EMPTY_SLOT;
|
||||||
|
}
|
||||||
|
|
||||||
|
gGpuRegBufferLocked = FALSE;
|
||||||
|
gShouldSyncRegIE = FALSE;
|
||||||
|
gRegIE = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CopyBufferedValueToGpuReg(u8 regOffset)
|
||||||
|
{
|
||||||
|
if (regOffset == REG_OFFSET_DISPSTAT) {
|
||||||
|
REG_DISPSTAT &= ~(DISPSTAT_HBLANK_INTR | DISPSTAT_VBLANK_INTR);
|
||||||
|
REG_DISPSTAT |= REG_BUF(REG_OFFSET_DISPSTAT);
|
||||||
|
} else {
|
||||||
|
GPU_REG(regOffset) = REG_BUF(regOffset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CopyBufferedValuesToGpuRegs()
|
||||||
|
{
|
||||||
|
if (!gGpuRegBufferLocked) {
|
||||||
|
s32 i;
|
||||||
|
|
||||||
|
for (i = 0; i < GPU_REG_BUFFER_SIZE; i++) {
|
||||||
|
u8 regOffset = gGpuRegWaitingList[i];
|
||||||
|
if (regOffset == EMPTY_SLOT)
|
||||||
|
return;
|
||||||
|
CopyBufferedValueToGpuReg(regOffset);
|
||||||
|
gGpuRegWaitingList[i] = EMPTY_SLOT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetGpuReg(u8 regOffset, u16 value)
|
||||||
|
{
|
||||||
|
if (regOffset < GPU_REG_BUFFER_SIZE)
|
||||||
|
{
|
||||||
|
u16 vcount;
|
||||||
|
|
||||||
|
REG_BUF(regOffset) = value;
|
||||||
|
vcount = REG_VCOUNT;
|
||||||
|
|
||||||
|
if ((vcount >= 161 && vcount <= 225)
|
||||||
|
|| (REG_DISPCNT & DISPCNT_FORCED_BLANK)) {
|
||||||
|
CopyBufferedValueToGpuReg(regOffset);
|
||||||
|
} else {
|
||||||
|
s32 i;
|
||||||
|
|
||||||
|
gGpuRegBufferLocked = TRUE;
|
||||||
|
|
||||||
|
for (i = 0; i < GPU_REG_BUFFER_SIZE && gGpuRegWaitingList[i] != EMPTY_SLOT; i++) {
|
||||||
|
if (gGpuRegWaitingList[i] == regOffset) {
|
||||||
|
gGpuRegBufferLocked = FALSE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gGpuRegWaitingList[i] = regOffset;
|
||||||
|
gGpuRegBufferLocked = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetGpuReg_ForcedBlank(u8 regOffset, u16 value)
|
||||||
|
{
|
||||||
|
if (regOffset < GPU_REG_BUFFER_SIZE)
|
||||||
|
{
|
||||||
|
REG_BUF(regOffset) = value;
|
||||||
|
|
||||||
|
if (REG_DISPCNT & DISPCNT_FORCED_BLANK) {
|
||||||
|
CopyBufferedValueToGpuReg(regOffset);
|
||||||
|
} else {
|
||||||
|
s32 i;
|
||||||
|
|
||||||
|
gGpuRegBufferLocked = TRUE;
|
||||||
|
|
||||||
|
for (i = 0; i < GPU_REG_BUFFER_SIZE && gGpuRegWaitingList[i] != EMPTY_SLOT; i++) {
|
||||||
|
if (gGpuRegWaitingList[i] == regOffset) {
|
||||||
|
gGpuRegBufferLocked = FALSE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gGpuRegWaitingList[i] = regOffset;
|
||||||
|
gGpuRegBufferLocked = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
u16 GetGpuReg(u8 regOffset)
|
||||||
|
{
|
||||||
|
if (regOffset == REG_OFFSET_DISPSTAT)
|
||||||
|
return REG_DISPSTAT;
|
||||||
|
|
||||||
|
if (regOffset == REG_OFFSET_VCOUNT)
|
||||||
|
return REG_VCOUNT;
|
||||||
|
|
||||||
|
return REG_BUF(regOffset);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetGpuRegBits(u8 regOffset, u16 mask)
|
||||||
|
{
|
||||||
|
u16 regValue = REG_BUF(regOffset);
|
||||||
|
SetGpuReg(regOffset, regValue | mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClearGpuRegBits(u8 regOffset, u16 mask)
|
||||||
|
{
|
||||||
|
u16 regValue = REG_BUF(regOffset);
|
||||||
|
SetGpuReg(regOffset, regValue & ~mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SyncRegIE()
|
||||||
|
{
|
||||||
|
if (gShouldSyncRegIE) {
|
||||||
|
u16 temp = REG_IME;
|
||||||
|
REG_IME = 0;
|
||||||
|
REG_IE = gRegIE;
|
||||||
|
REG_IME = temp;
|
||||||
|
gShouldSyncRegIE = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnableInterrupts(u16 mask)
|
||||||
|
{
|
||||||
|
gRegIE |= mask;
|
||||||
|
gShouldSyncRegIE = TRUE;
|
||||||
|
SyncRegIE();
|
||||||
|
UpdateRegDispstatIntrBits(gRegIE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DisableInterrupts(u16 mask)
|
||||||
|
{
|
||||||
|
gRegIE &= ~mask;
|
||||||
|
gShouldSyncRegIE = TRUE;
|
||||||
|
SyncRegIE();
|
||||||
|
UpdateRegDispstatIntrBits(gRegIE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void UpdateRegDispstatIntrBits(u16 regIE)
|
||||||
|
{
|
||||||
|
u16 oldValue = GetGpuReg(REG_OFFSET_DISPSTAT) & (DISPSTAT_HBLANK_INTR | DISPSTAT_VBLANK_INTR);
|
||||||
|
u16 newValue = 0;
|
||||||
|
|
||||||
|
if (regIE & INTR_FLAG_VBLANK)
|
||||||
|
newValue |= DISPSTAT_VBLANK_INTR;
|
||||||
|
|
||||||
|
if (regIE & INTR_FLAG_HBLANK)
|
||||||
|
newValue |= DISPSTAT_HBLANK_INTR;
|
||||||
|
|
||||||
|
if (oldValue != newValue)
|
||||||
|
SetGpuReg(REG_OFFSET_DISPSTAT, newValue);
|
||||||
|
}
|
@ -276,6 +276,17 @@ void AsmFile::SkipString()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CanOpenFile(std::string path)
|
||||||
|
{
|
||||||
|
FILE *fp = fopen(path.c_str(), "rb");
|
||||||
|
|
||||||
|
if (fp == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
if (argc < 2)
|
if (argc < 2)
|
||||||
@ -296,7 +307,9 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
while ((incDirectiveType = file.ReadUntilIncDirective(path)) != IncDirectiveType::None) {
|
while ((incDirectiveType = file.ReadUntilIncDirective(path)) != IncDirectiveType::None) {
|
||||||
bool inserted = dependencies.insert(path).second;
|
bool inserted = dependencies.insert(path).second;
|
||||||
if (inserted && incDirectiveType == IncDirectiveType::Include)
|
if (inserted
|
||||||
|
&& incDirectiveType == IncDirectiveType::Include
|
||||||
|
&& CanOpenFile(path))
|
||||||
filesToProcess.push(path);
|
filesToProcess.push(path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,4 +6,7 @@ gDma3ManagerLocked = 0x03000810;
|
|||||||
gDma3RequestCursor = 0x03000811;
|
gDma3RequestCursor = 0x03000811;
|
||||||
|
|
||||||
gGpuRegBuffer = 0x03000818;
|
gGpuRegBuffer = 0x03000818;
|
||||||
|
gGpuRegWaitingList = 0x03000878;
|
||||||
gGpuRegBufferLocked = 0x030008D8;
|
gGpuRegBufferLocked = 0x030008D8;
|
||||||
|
gShouldSyncRegIE = 0x030008D9;
|
||||||
|
gRegIE = 0x030008DA;
|
||||||
|
Loading…
Reference in New Issue
Block a user