From 6a44a34e0ebb867753df26f1cb0a38f53420a606 Mon Sep 17 00:00:00 2001 From: Simponic Date: Fri, 7 Aug 2020 22:40:00 -0600 Subject: [PATCH] Added files --- GBA-Dash.elf | Bin 0 -> 208888 bytes GBA-Dash.gba | Bin 0 -> 1932 bytes GBA-Dash.sav | 0 Makefile | 163 +++++++++++++++ build/GBA-Dash.map | 499 +++++++++++++++++++++++++++++++++++++++++++++ build/main.d | 21 ++ build/main.o | Bin 0 -> 6748 bytes build/player.d | 1 + build/player.o | Bin 0 -> 2512 bytes build/toolbox.d | 11 + build/toolbox.o | Bin 0 -> 4836 bytes include/input.h | 135 ++++++++++++ include/memdef.h | 212 +++++++++++++++++++ include/memmap.h | 97 +++++++++ include/toolbox.h | 154 ++++++++++++++ include/types.h | 120 +++++++++++ source/main.c | 46 +++++ sprites/player.c | 64 ++++++ sprites/player.h | 24 +++ sprites/toolbox.c | 65 ++++++ 20 files changed, 1612 insertions(+) create mode 100755 GBA-Dash.elf create mode 100755 GBA-Dash.gba create mode 100644 GBA-Dash.sav create mode 100644 Makefile create mode 100644 build/GBA-Dash.map create mode 100644 build/main.d create mode 100644 build/main.o create mode 100644 build/player.d create mode 100644 build/player.o create mode 100644 build/toolbox.d create mode 100644 build/toolbox.o create mode 100644 include/input.h create mode 100644 include/memdef.h create mode 100644 include/memmap.h create mode 100644 include/toolbox.h create mode 100644 include/types.h create mode 100644 source/main.c create mode 100644 sprites/player.c create mode 100644 sprites/player.h create mode 100644 sprites/toolbox.c diff --git a/GBA-Dash.elf b/GBA-Dash.elf new file mode 100755 index 0000000000000000000000000000000000000000..57222454e12fadf0610c9dc28c03ce9ef68a0e8e GIT binary patch literal 208888 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") +endif + +include $(DEVKITARM)/gba_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +# DATA is a list of directories containing binary data +# GRAPHICS is a list of directories containing files to be processed by grit +# +# All directories are specified relative to the project directory where +# the makefile is found +# +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source sprites +INCLUDES := include +DATA := +MUSIC := + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- +ARCH := -mthumb -mthumb-interwork + +CFLAGS := -g -Wall -O2\ + -mcpu=arm7tdmi -mtune=arm7tdmi\ + $(ARCH) + +CFLAGS += $(INCLUDE) + +CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions + +ASFLAGS := -g $(ARCH) +LDFLAGS = -g $(ARCH) -Wl,-Map,$(notdir $*.map) + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -lmm -lgba + + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(LIBGBA) + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- + + +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) \ + $(foreach dir,$(GRAPHICS),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +ifneq ($(strip $(MUSIC)),) + export AUDIOFILES := $(foreach dir,$(notdir $(wildcard $(MUSIC)/*.*)),$(CURDIR)/$(MUSIC)/$(dir)) + BINFILES += soundbank.bin +endif + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) +#--------------------------------------------------------------------------------- + export LD := $(CC) +#--------------------------------------------------------------------------------- +else +#--------------------------------------------------------------------------------- + export LD := $(CXX) +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- + +export OFILES_BIN := $(addsuffix .o,$(BINFILES)) + +export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) + +export OFILES := $(OFILES_BIN) $(OFILES_SOURCES) + +export HFILES := $(addsuffix .h,$(subst .,_,$(BINFILES))) + +export INCLUDE := $(foreach dir,$(INCLUDES),-iquote $(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) + +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(TARGET).elf $(TARGET).gba + + +#--------------------------------------------------------------------------------- +else + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- + +$(OUTPUT).gba : $(OUTPUT).elf + +$(OUTPUT).elf : $(OFILES) + +$(OFILES_SOURCES) : $(HFILES) + +#--------------------------------------------------------------------------------- +# The bin2o rule should be copied and modified +# for each extension used in the data directories +#--------------------------------------------------------------------------------- + +#--------------------------------------------------------------------------------- +# rule to build soundbank from music files +#--------------------------------------------------------------------------------- +soundbank.bin soundbank.h : $(AUDIOFILES) +#--------------------------------------------------------------------------------- + @mmutil $^ -osoundbank.bin -hsoundbank.h + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .bin extension +#--------------------------------------------------------------------------------- +%.bin.o %_bin.h : %.bin +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + + +-include $(DEPSDIR)/*.d +#--------------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------------- diff --git a/build/GBA-Dash.map b/build/GBA-Dash.map new file mode 100644 index 0000000..e1b69e4 --- /dev/null +++ b/build/GBA-Dash.map @@ -0,0 +1,499 @@ +Archive member included to satisfy reference by file (symbol) + +/opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libg.a(lib_a-init.o) + /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/gba_crt0.o (__libc_init_array) +/opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libg.a(lib_a-memcpy-stub.o) + main.o (memcpy) +/opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libsysbase.a(malloc_vars.o) + /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/gba_crt0.o (fake_heap_end) + +Discarded input sections + + .text 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/gba_crt0.o + .data 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/gba_crt0.o + .bss 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/gba_crt0.o + .text 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crti.o + .data 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crti.o + .bss 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crti.o + .text 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtbegin.o + .data 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtbegin.o + .bss 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtbegin.o + .data.__dso_handle + 0x0000000000000000 0x4 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtbegin.o + .data 0x0000000000000000 0x4 main.o + .text 0x0000000000000000 0x0 player.o + .data 0x0000000000000000 0x0 player.o + .bss 0x0000000000000000 0x0 player.o + .data 0x0000000000000000 0x0 toolbox.o + .text 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libg.a(lib_a-init.o) + .data 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libg.a(lib_a-init.o) + .bss 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libg.a(lib_a-init.o) + .text 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libg.a(lib_a-memcpy-stub.o) + .data 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libg.a(lib_a-memcpy-stub.o) + .bss 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libg.a(lib_a-memcpy-stub.o) + .text 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libsysbase.a(malloc_vars.o) + .data 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libsysbase.a(malloc_vars.o) + .bss 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libsysbase.a(malloc_vars.o) + .bss.fake_heap_start + 0x0000000000000000 0x4 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libsysbase.a(malloc_vars.o) + .text 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtend.o + .data 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtend.o + .bss 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtend.o + .text 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtn.o + .data 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtn.o + .bss 0x0000000000000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtn.o + +Memory Configuration + +Name Origin Length Attributes +rom 0x0000000008000000 0x0000000002000000 +iwram 0x0000000003000000 0x0000000000008000 +ewram 0x0000000002000000 0x0000000000040000 +*default* 0x0000000000000000 0xffffffffffffffff + +Linker script and memory map + + 0x0000000008000000 __text_start = ORIGIN (rom) + 0x0000000002040000 __eheap_end = (ORIGIN (ewram) + LENGTH (ewram)) + 0x0000000003000000 __iwram_start = ORIGIN (iwram) + 0x0000000003008000 __iwram_top = (ORIGIN (iwram) + LENGTH (iwram)) + 0x0000000003007fa0 __sp_irq = (__iwram_top - 0x60) + 0x0000000003007f00 __sp_usr = (__sp_irq - 0xa0) + 0x0000000003007ff8 __irq_flags = 0x3007ff8 + 0x0000000008000000 . = __text_start + +.crt0 0x0000000008000000 0x210 + *(.crt0) + .crt0 0x0000000008000000 0x210 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/gba_crt0.o + 0x0000000008000000 _start + 0x00000000080000c4 __boot_method + 0x00000000080000c5 __slave_number + 0x00000000080000e0 start_vector + 0x0000000008000210 . = ALIGN (0x4) + +.init 0x0000000008000210 0xc + *(SORT_NONE(.init)) + .init 0x0000000008000210 0x4 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crti.o + 0x0000000008000210 _init + .init 0x0000000008000214 0x8 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtn.o + +.plt 0x000000000800021c 0x0 + *(.plt) + 0x000000000800021c . = ALIGN (0x4) + +.text 0x000000000800021c 0x2d0 + *(EXCLUDE_FILE(*.iwram*) .text*) + .text.deregister_tm_clones + 0x000000000800021c 0x2c /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtbegin.o + .text.register_tm_clones + 0x0000000008000248 0x34 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtbegin.o + .text.__do_global_dtors_aux + 0x000000000800027c 0x30 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtbegin.o + .text.frame_dummy + 0x00000000080002ac 0x28 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtbegin.o + .text 0x00000000080002d4 0x5c main.o + 0x00000000080002d4 obj_test + .text.startup 0x0000000008000330 0x44 main.o + 0x0000000008000330 main + .text 0x0000000008000374 0x80 toolbox.o + 0x0000000008000374 oam_init + 0x00000000080003b4 oam_copy + 0x00000000080003d4 obj_copy + .text.__libc_init_array + 0x00000000080003f4 0x50 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libg.a(lib_a-init.o) + 0x00000000080003f4 __libc_init_array + .text.memcpy 0x0000000008000444 0xa8 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libg.a(lib_a-memcpy-stub.o) + 0x0000000008000444 memcpy + *(.gnu.linkonce.t.*) + *(.text.*personality*) + *(.gnu.warning) + *(.glue_7t) + .glue_7t 0x00000000080004ec 0x0 linker stubs + *(.glue_7) + .glue_7 0x00000000080004ec 0x0 linker stubs + *(.vfp11_veneer) + .vfp11_veneer 0x00000000080004ec 0x0 linker stubs + 0x00000000080004ec . = ALIGN (0x4) + 0x00000000080004ec __text_end = . + +.v4_bx 0x00000000080004ec 0x0 + .v4_bx 0x00000000080004ec 0x0 linker stubs + +.iplt 0x00000000080004ec 0x0 + .iplt 0x00000000080004ec 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/gba_crt0.o + +.fini 0x00000000080004ec 0xc + *(.fini) + .fini 0x00000000080004ec 0x4 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crti.o + 0x00000000080004ec _fini + .fini 0x00000000080004f0 0x8 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtn.o + 0x00000000080004f8 . = ALIGN (0x4) + +.rodata 0x00000000080004f8 0x280 + *(.rodata) + .rodata 0x00000000080004f8 0x280 player.o + 0x00000000080004f8 playerTiles + 0x0000000008000578 playerPal + *all.rodata*(*) + *(.roda) + *(.rodata.*) + *(.gnu.linkonce.r*) + 0x0000000008000778 . = ALIGN (0x4) + +.ARM.extab + *(.ARM.extab* .gnu.linkonce.armextab.*) + 0x0000000008000778 __exidx_start = . + +.ARM.exidx + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + 0x0000000008000778 __exidx_end = . + +.ctors 0x0000000008000778 0x0 + *crtbegin.o(.ctors) + *(EXCLUDE_FILE(*crtend.o) .ctors) + *(SORT_BY_NAME(.ctors.*)) + *(.ctors) + 0x0000000008000778 . = ALIGN (0x4) + +.dtors 0x0000000008000778 0x0 + *crtbegin.o(.dtors) + *(EXCLUDE_FILE(*crtend.o) .dtors) + *(SORT_BY_NAME(.dtors.*)) + *(.dtors) + 0x0000000008000778 . = ALIGN (0x4) + +.eh_frame 0x0000000008000778 0x4 + *(.eh_frame) + .eh_frame 0x0000000008000778 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtbegin.o + .eh_frame 0x0000000008000778 0x4 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtend.o + 0x000000000800077c . = ALIGN (0x4) + +.rel.dyn 0x000000000800077c 0x0 + .rel.iplt 0x000000000800077c 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/gba_crt0.o + +.gcc_except_table + 0x000000000800077c 0x0 + *(.gcc_except_table) + 0x000000000800077c . = ALIGN (0x4) + 0x000000000800077c __iwram_lma = . + +.iwram 0x0000000003000000 0x0 load address 0x000000000800077c + 0x0000000003000000 __iwram_start__ = ABSOLUTE (.) + *(.iwram .iwram*) + *iwram.*(.text* .data*) + 0x0000000003000000 . = ALIGN (0x4) + 0x0000000003000000 __iwram_end__ = ABSOLUTE (.) + 0x000000000800077c __data_lma = (__iwram_lma + SIZEOF (.iwram)) + +.bss 0x0000000003000000 0x424 + 0x0000000003000000 __bss_start = ABSOLUTE (.) + 0x0000000003000000 __bss_start__ = ABSOLUTE (.) + *(.dynbss) + *(.gnu.linkonce.b*) + *(.bss*) + .bss.completed.1 + 0x0000000003000000 0x1 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtbegin.o + *fill* 0x0000000003000001 0x3 + .bss.object.0 0x0000000003000004 0x18 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtbegin.o + .bss 0x000000000300001c 0x400 main.o + 0x000000000300001c obj_buffer + .bss 0x000000000300041c 0x4 toolbox.o + 0x000000000300041c __key_prev + 0x000000000300041e __key_curr + .bss.fake_heap_end + 0x0000000003000420 0x4 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libsysbase.a(malloc_vars.o) + 0x0000000003000420 fake_heap_end + *(COMMON) + 0x0000000003000424 . = ALIGN (0x4) + 0x0000000003000424 __bss_end__ = ABSOLUTE (.) + +.data 0x0000000003000424 0x0 load address 0x000000000800077c + 0x0000000003000424 __data_start__ = ABSOLUTE (.) + *(.data*) + *(.gnu.linkonce.d*) + 0x0000000003000424 . = ALIGN (0x4) + 0x000000000800077c __preinit_lma = (__data_lma + SIZEOF (.data)) + +.igot.plt 0x0000000003000000 0x0 + .igot.plt 0x0000000003000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/gba_crt0.o + +.tm_clone_table + 0x0000000003000000 0x0 + .tm_clone_table + 0x0000000003000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtbegin.o + .tm_clone_table + 0x0000000003000000 0x0 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtend.o + +.preinit_array 0x0000000003000424 0x0 load address 0x000000000800077c + 0x0000000003000424 __preinit_array_start = ABSOLUTE (.) + *(.preinit_array) + 0x0000000003000424 __preinit_array_end = ABSOLUTE (.) + 0x000000000800077c __init_lma = (__preinit_lma + SIZEOF (.preinit_array)) + +.init_array 0x0000000003000424 0x4 load address 0x000000000800077c + 0x0000000003000424 __init_array_start = ABSOLUTE (.) + *(SORT_BY_NAME(.init_array.*)) + *(.init_array) + .init_array 0x0000000003000424 0x4 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtbegin.o + 0x0000000003000428 __init_array_end = ABSOLUTE (.) + 0x0000000008000780 __fini_lma = (__init_lma + SIZEOF (.init_array)) + +.fini_array 0x0000000003000428 0x4 load address 0x0000000008000780 + 0x0000000003000428 __fini_array_start = ABSOLUTE (.) + *(SORT_BY_NAME(.fini_array.*)) + *(.fini_array) + .fini_array 0x0000000003000428 0x4 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtbegin.o + 0x000000000300042c __fini_array_end = ABSOLUTE (.) + 0x0000000008000784 __jcr_lma = (__fini_lma + SIZEOF (.fini_array)) + +.jcr 0x000000000300042c 0x0 load address 0x0000000008000784 + *(.jcr) + 0x000000000300042c __data_end__ = ABSOLUTE (.) + 0x0000000008000784 __iwram_overlay_lma = (__jcr_lma + SIZEOF (.jcr)) + 0x000000000300042c __iwram_overlay_start = . + +.iwram0 0x000000000300042c 0x0 load address 0x0000000008000784 + *(.iwram0) + 0x000000000300042c . = ALIGN (0x4) + 0x0000000008000784 PROVIDE (__load_start_iwram0 = LOADADDR (.iwram0)) + 0x0000000008000784 PROVIDE (__load_stop_iwram0 = (LOADADDR (.iwram0) + SIZEOF (.iwram0))) + +.iwram1 0x000000000300042c 0x0 + *(.iwram1) + 0x000000000300042c . = ALIGN (0x4) + [!provide] PROVIDE (__load_start_iwram1 = LOADADDR (.iwram1)) + [!provide] PROVIDE (__load_stop_iwram1 = (LOADADDR (.iwram1) + SIZEOF (.iwram1))) + +.iwram2 0x000000000300042c 0x0 + *(.iwram2) + 0x000000000300042c . = ALIGN (0x4) + [!provide] PROVIDE (__load_start_iwram2 = LOADADDR (.iwram2)) + [!provide] PROVIDE (__load_stop_iwram2 = (LOADADDR (.iwram2) + SIZEOF (.iwram2))) + +.iwram3 0x000000000300042c 0x0 + *(.iwram3) + 0x000000000300042c . = ALIGN (0x4) + [!provide] PROVIDE (__load_start_iwram3 = LOADADDR (.iwram3)) + [!provide] PROVIDE (__load_stop_iwram3 = (LOADADDR (.iwram3) + SIZEOF (.iwram3))) + +.iwram4 0x000000000300042c 0x0 + *(.iwram4) + 0x000000000300042c . = ALIGN (0x4) + [!provide] PROVIDE (__load_start_iwram4 = LOADADDR (.iwram4)) + [!provide] PROVIDE (__load_stop_iwram4 = (LOADADDR (.iwram4) + SIZEOF (.iwram4))) + +.iwram5 0x000000000300042c 0x0 + *(.iwram5) + 0x000000000300042c . = ALIGN (0x4) + [!provide] PROVIDE (__load_start_iwram5 = LOADADDR (.iwram5)) + [!provide] PROVIDE (__load_stop_iwram5 = (LOADADDR (.iwram5) + SIZEOF (.iwram5))) + +.iwram6 0x000000000300042c 0x0 + *(.iwram6) + 0x000000000300042c . = ALIGN (0x4) + [!provide] PROVIDE (__load_start_iwram6 = LOADADDR (.iwram6)) + [!provide] PROVIDE (__load_stop_iwram6 = (LOADADDR (.iwram6) + SIZEOF (.iwram6))) + +.iwram7 0x000000000300042c 0x0 + *(.iwram7) + 0x000000000300042c . = ALIGN (0x4) + [!provide] PROVIDE (__load_start_iwram7 = LOADADDR (.iwram7)) + [!provide] PROVIDE (__load_stop_iwram7 = (LOADADDR (.iwram7) + SIZEOF (.iwram7))) + +.iwram8 0x000000000300042c 0x0 + *(.iwram8) + 0x000000000300042c . = ALIGN (0x4) + [!provide] PROVIDE (__load_start_iwram8 = LOADADDR (.iwram8)) + [!provide] PROVIDE (__load_stop_iwram8 = (LOADADDR (.iwram8) + SIZEOF (.iwram8))) + +.iwram9 0x000000000300042c 0x0 + *(.iwram9) + 0x000000000300042c . = ALIGN (0x4) + [!provide] PROVIDE (__load_start_iwram9 = LOADADDR (.iwram9)) + [!provide] PROVIDE (__load_stop_iwram9 = (LOADADDR (.iwram9) + SIZEOF (.iwram9))) + 0x000000000300042c __iwram_overlay_end = . + 0x0000000008000784 __ewram_lma = (__iwram_overlay_lma + (__iwram_overlay_end - __iwram_overlay_start)) + 0x000000000300042c __iheap_start = . + 0x0000000002000000 __ewram_start = ORIGIN (ewram) + +.ewram 0x0000000002000000 0x0 load address 0x0000000008000784 + *(.ewram*) + 0x0000000002000000 . = ALIGN (0x4) + 0x0000000002000000 __ewram_end = ABSOLUTE (.) + 0x0000000008000784 __pad_lma = (__ewram_lma + SIZEOF (.ewram)) + +.sbss 0x0000000002000000 0x0 + 0x0000000002000000 __sbss_start__ = ABSOLUTE (.) + *(.sbss*) + 0x0000000002000000 . = ALIGN (0x4) + 0x0000000002000000 __sbss_end__ = ABSOLUTE (.) + 0x0000000002000000 __end__ = ABSOLUTE (.) + 0x0000000002000000 __eheap_start = ABSOLUTE (.) + +.pad 0x0000000002000000 0x8 load address 0x0000000008000784 + 0x0000000002000000 0x4 LONG 0x52416b64 + 0x0000000002000004 0x4 LONG 0x4d + 0x0000000002000008 . = ALIGN (0x4) + 0x000000000800078c __rom_end__ = (__pad_lma + SIZEOF (.pad)) + +.stab + *(.stab) + +.stabstr + *(.stabstr) + +.stab.excl + *(.stab.excl) + +.stab.exclstr + *(.stab.exclstr) + +.stab.index + *(.stab.index) + +.stab.indexstr + *(.stab.indexstr) + +.comment 0x0000000000000000 0x23 + *(.comment) + .comment 0x0000000000000000 0x23 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtbegin.o + 0x24 (size before relaxing) + .comment 0x0000000000000023 0x24 main.o + .comment 0x0000000000000023 0x24 player.o + .comment 0x0000000000000023 0x24 toolbox.o + .comment 0x0000000000000023 0x24 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libg.a(lib_a-init.o) + .comment 0x0000000000000023 0x24 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libg.a(lib_a-memcpy-stub.o) + .comment 0x0000000000000023 0x24 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libsysbase.a(malloc_vars.o) + .comment 0x0000000000000023 0x24 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtend.o + +.debug + *(.debug) + +.line + *(.line) + +.debug_srcinfo + *(.debug_srcinfo) + +.debug_sfnames + *(.debug_sfnames) + +.debug_aranges 0x0000000000000000 0x60 + *(.debug_aranges) + .debug_aranges + 0x0000000000000000 0x28 main.o + .debug_aranges + 0x0000000000000028 0x18 player.o + .debug_aranges + 0x0000000000000040 0x20 toolbox.o + +.debug_pubnames + *(.debug_pubnames) + +.debug_info 0x0000000000000000 0x7e1 + *(.debug_info) + .debug_info 0x0000000000000000 0x4d8 main.o + .debug_info 0x00000000000004d8 0x7f player.o + .debug_info 0x0000000000000557 0x28a toolbox.o + +.debug_abbrev 0x0000000000000000 0x3cb + *(.debug_abbrev) + .debug_abbrev 0x0000000000000000 0x22a main.o + .debug_abbrev 0x000000000000022a 0x47 player.o + .debug_abbrev 0x0000000000000271 0x15a toolbox.o + +.debug_line 0x0000000000000000 0x3c5 + *(.debug_line) + .debug_line 0x0000000000000000 0x1f1 main.o + .debug_line 0x00000000000001f1 0x4a player.o + .debug_line 0x000000000000023b 0x18a toolbox.o + +.debug_frame 0x0000000000000000 0xa8 + *(.debug_frame) + .debug_frame 0x0000000000000000 0x4c main.o + .debug_frame 0x000000000000004c 0x5c toolbox.o + +.debug_str 0x0000000000000000 0x274 + *(.debug_str) + .debug_str 0x0000000000000000 0x210 main.o + 0x250 (size before relaxing) + .debug_str 0x0000000000000210 0x2a player.o + 0xdc (size before relaxing) + .debug_str 0x000000000000023a 0x3a toolbox.o + 0x167 (size before relaxing) + +.debug_loc 0x0000000000000000 0x36a + *(.debug_loc) + .debug_loc 0x0000000000000000 0x90 main.o + .debug_loc 0x0000000000000090 0x2da toolbox.o + +.debug_macinfo + *(.debug_macinfo) + +.debug_weaknames + *(.debug_weaknames) + +.debug_funcnames + *(.debug_funcnames) + +.debug_typenames + *(.debug_typenames) + +.debug_varnames + *(.debug_varnames) + +.stack 0x0000000000080000 0x0 + 0x0000000000080000 _stack = . + *(.stack) + +.note.gnu.arm.ident + *(.note.gnu.arm.ident) + +.ARM.attributes + 0x0000000000000000 0x2c + *(.ARM.attributes) + .ARM.attributes + 0x0000000000000000 0x20 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/gba_crt0.o + .ARM.attributes + 0x0000000000000020 0x1c /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crti.o + .ARM.attributes + 0x000000000000003c 0x2a /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtbegin.o + .ARM.attributes + 0x0000000000000066 0x2a main.o + .ARM.attributes + 0x0000000000000090 0x30 player.o + .ARM.attributes + 0x00000000000000c0 0x2a toolbox.o + .ARM.attributes + 0x00000000000000ea 0x2a /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libg.a(lib_a-init.o) + .ARM.attributes + 0x0000000000000114 0x2a /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libg.a(lib_a-memcpy-stub.o) + .ARM.attributes + 0x000000000000013e 0x30 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libsysbase.a(malloc_vars.o) + .ARM.attributes + 0x000000000000016e 0x30 /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtend.o + .ARM.attributes + 0x000000000000019e 0x1c /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtn.o + +/DISCARD/ + *(.note.GNU-stack) +LOAD /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/gba_crt0.o +LOAD /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crti.o +LOAD /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtbegin.o +LOAD main.o +LOAD player.o +LOAD toolbox.o +LOAD /opt/devkitpro/libgba/lib/libmm.a +LOAD /opt/devkitpro/libgba/lib/libgba.a +START GROUP +LOAD /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/libgcc.a +LOAD /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libg.a +LOAD /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libc.a +LOAD /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/libsysbase.a +END GROUP +LOAD /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtend.o +LOAD /opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/10.1.0/thumb/crtn.o +OUTPUT(/home/logan/git/GBA-Dash/GBA-Dash.elf elf32-littlearm) + +.debug_ranges 0x0000000000000000 0x98 + .debug_ranges 0x0000000000000000 0x98 main.o diff --git a/build/main.d b/build/main.d new file mode 100644 index 0000000..78bc462 --- /dev/null +++ b/build/main.d @@ -0,0 +1,21 @@ +main.o: /home/logan/git/GBA-Dash/source/main.c \ + /home/logan/git/GBA-Dash/source/../include/input.h \ + /home/logan/git/GBA-Dash/source/../include/memmap.h \ + /home/logan/git/GBA-Dash/source/../include/types.h \ + /home/logan/git/GBA-Dash/source/../include/memdef.h \ + /home/logan/git/GBA-Dash/source/../include/toolbox.h \ + /home/logan/git/GBA-Dash/source/../include/input.h \ + /home/logan/git/GBA-Dash/source/../include/memmap.h \ + /home/logan/git/GBA-Dash/source/../include/types.h \ + /home/logan/git/GBA-Dash/source/../include/memdef.h \ + /home/logan/git/GBA-Dash/source/../sprites/player.h +/home/logan/git/GBA-Dash/source/../include/input.h: +/home/logan/git/GBA-Dash/source/../include/memmap.h: +/home/logan/git/GBA-Dash/source/../include/types.h: +/home/logan/git/GBA-Dash/source/../include/memdef.h: +/home/logan/git/GBA-Dash/source/../include/toolbox.h: +/home/logan/git/GBA-Dash/source/../include/input.h: +/home/logan/git/GBA-Dash/source/../include/memmap.h: +/home/logan/git/GBA-Dash/source/../include/types.h: +/home/logan/git/GBA-Dash/source/../include/memdef.h: +/home/logan/git/GBA-Dash/source/../sprites/player.h: diff --git a/build/main.o b/build/main.o new file mode 100644 index 0000000000000000000000000000000000000000..fc8766d6bc6e2cd2ec12253669022b9dcc5979a0 GIT binary patch literal 6748 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 C#~tYa literal 0 HcmV?d00001 diff --git a/build/player.d b/build/player.d new file mode 100644 index 0000000..d176045 --- /dev/null +++ b/build/player.d @@ -0,0 +1 @@ +player.o: /home/logan/git/GBA-Dash/sprites/player.c diff --git a/build/player.o b/build/player.o new file mode 100644 index 0000000000000000000000000000000000000000..1c7f9185ae5e0bacef6db1d05d6a91125ff6a09f GIT binary patch literal 2512 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 zA498&:) +// _x needs shifting +#define BFN_PREP(x, name) ( ((x)<>name##_SHIFT ) +#define BFN_SET(y, x, name) (y = ((y)&~name##_MASK) | BFN_PREP(x,name) ) + +// x already shifted +#define BFN_PREP2(x, name) ( (x) & name##_MASK ) +#define BFN_GET2(y, name) ( (y) & name##_MASK ) +#define BFN_SET2(y, x, name) (y = ((y)&~name##_MASK) | BFN_PREP2(x,name) ) + +//! Gives a tribool (-1, 0, or +1) depending on the state of some bits. +/*! Looks at the \a plus and \a minus bits of \a flags, and subtracts +* their status to give a +1, -1 or 0 result. Useful for direction flags. +* \param plus Bit number for positive result +* \param minus Bit number for negative result +* \return +1 if \a plus bit is set but \a minus bit isn't
+* -1 if \a minus bit is set and \a plus bit isn't
+* 0 if neither or both are set. +*/ +INLINE int bit_tribool(u32 flags, int plus, int minus) +{ return ((flags>>plus)&1) - ((flags>>minus)&1); } + + +// --- (tonc_video.h) ------------------------------------------------- + +//! Wait for next VBlank +INLINE void vid_vsync() +{ + while(REG_VCOUNT >= 160); // wait till VDraw + while(REG_VCOUNT < 160); // wait till VBlank +} + +//! Create a 15bit BGR color. +INLINE COLOR RGB15(u32 red, u32 green, u32 blue) +{ return red | (green<<5) | (blue<<10); } + + +// --- Objects --- + + +//! Set the attributes of an object. +INLINE OBJ_ATTR *obj_set_attr(OBJ_ATTR *obj, u16 a0, u16 a1, u16 a2) +{ + obj->attr0= a0; obj->attr1= a1; obj->attr2= a2; + return obj; +} + +//! Set the position of \a obj +INLINE void obj_set_pos(OBJ_ATTR *obj, int x, int y) +{ + BFN_SET(obj->attr0, y, ATTR0_Y); + BFN_SET(obj->attr1, x, ATTR1_X); +} + +//! Hide an object. +INLINE void obj_hide(OBJ_ATTR *obj) +{ BFN_SET2(obj->attr0, ATTR0_HIDE, ATTR0_MODE); } + +//! Unhide an object. +/*! \param obj Object to unhide. +* \param mode Object mode to unhide to. Necessary because this affects +* the affine-ness of the object. +*/ +INLINE void obj_unhide(OBJ_ATTR *obj, u16 mode) +{ BFN_SET2(obj->attr0, mode, ATTR0_MODE); } + + +#endif // TOOLBOX_H diff --git a/include/types.h b/include/types.h new file mode 100644 index 0000000..5ad8121 --- /dev/null +++ b/include/types.h @@ -0,0 +1,120 @@ +// +// Basic structs and typedefs +// +//! \file tonc_types.h +//! \author J Vijn +//! \date 20060508 - 20060508 +// +// === NOTES === +// * This is a _small_ set of typedefs, #defines and inlines that can +// be found in tonclib, and might not represent the +// final forms. + + +#ifndef __TYPES__ +#define __TYPES__ + + +// === GCC ATTRIBUTES ================================================= + +// alignment boundary +#define ALIGN(_n) __attribute__((aligned(_n))) +#define ALIGN4 __attribute__((aligned(4))) + +// pack aggregate members +#define PACKED __attribute__((packed)) + + +// === TYPES: ========================================================= + +// --- primary typedefs ----------------------------------------------- +typedef unsigned char u8, byte; +typedef unsigned short u16, hword; +typedef unsigned int u32, word; +typedef unsigned long long u64; + +typedef signed char s8; +typedef signed short s16; +typedef signed int s32; +typedef signed long long s64; + +// and volatiles for registers 'n stuff +typedef volatile u8 vu8; +typedef volatile u16 vu16; +typedef volatile u32 vu32; +typedef volatile u64 vu64; + +typedef volatile s8 vs8; +typedef volatile s16 vs16; +typedef volatile s32 vs32; +typedef volatile s64 vs64; + +// and consts too for parameters *sigh* +typedef const u8 cu8; +typedef const u16 cu16; +typedef const u32 cu32; +typedef const u64 cu64; + +typedef const s8 cs8; +typedef const s16 cs16; +typedef const s32 cs32; +typedef const s64 cs64; + +typedef struct { u32 data[8]; } BLOCK; + +// --- secondary typedefs --------------------------------------------- + +typedef u16 COLOR; + +// NOTE, u32[]! +typedef struct { u32 data[8]; } TILE, TILE4; +typedef struct { u32 data[16]; } TILE8; + + +// --- memory map structs -------------------------------------------- + +// --- PAL types --- +typedef COLOR PALBANK[16]; + +// --- VRAM types --- + +typedef COLOR M3LINE[240]; +typedef u8 M4LINE[240]; // NOTE u8, not u16!! +typedef COLOR M5LINE[160]; + +typedef TILE CHARBLOCK[512]; +typedef TILE8 CHARBLOCK8[256]; + +// --- OAM structs --- +// NOTE: OATR and OAFF are interlaced; when using affine objs, +// struct/DMA/mem copies will give bad results +typedef struct OBJ_ATTR +{ + u16 attr0; + u16 attr1; + u16 attr2; + s16 fill; +} ALIGN4 OBJ_ATTR; + +typedef struct OBJ_AFFINE +{ + u16 fill0[3]; s16 pa; + u16 fill1[3]; s16 pb; + u16 fill2[3]; s16 pc; + u16 fill3[3]; s16 pd; +} ALIGN4 OBJ_AFFINE; + + +// === DEFINES ======================================================== + +#ifndef NULL +#define NULL 0 +#endif + +// `inline' inlines the function when -O > 0 when called, +// but also creates a body for the function itself +// `static' removes the body as well +#define INLINE static inline + + +#endif // __TYPES__ diff --git a/source/main.c b/source/main.c new file mode 100644 index 0000000..a36688d --- /dev/null +++ b/source/main.c @@ -0,0 +1,46 @@ +#include +#include "../include/input.h" +#include "../include/toolbox.h" +#include "../include/memmap.h" +#include "../include/types.h" +#include "../include/memdef.h" +#include "../sprites/player.h" + +OBJ_ATTR obj_buffer[128]; +OBJ_AFFINE *obj_aff_buffer= (OBJ_AFFINE*)obj_buffer; // Object affine-buffer + +void obj_test() { + int x= 96, y= 32; + u32 tid= 0, pb= 0; + OBJ_ATTR *player = &obj_buffer[0]; + + obj_set_attr(player, + ATTR0_SQUARE, + ATTR1_SIZE_16, + ATTR2_PALBANK(pb) | tid + ); + + obj_set_pos(player, x, y); + + while(1) { + vid_vsync(); + key_poll(); + + oam_copy(oam_mem, obj_buffer, 1); + } +} + +int main() { + memcpy(&tile_mem[4][0], playerTiles, playerTilesLen); + memcpy(pal_obj_mem, playerPal, playerPalLen); + + oam_init(obj_buffer, 128); + + REG_DISPCNT= DCNT_OBJ | DCNT_OBJ_1D; + + obj_test(); + + while(1); + + return 0; +} diff --git a/sprites/player.c b/sprites/player.c new file mode 100644 index 0000000..1dafa3a --- /dev/null +++ b/sprites/player.c @@ -0,0 +1,64 @@ +//====================================================================== +// +// player, 16x16@4, +// + palette 256 entries, not compressed +// + 4 tiles not compressed +// Total size: 512 + 128 = 640 +// +// Time-stamp: 2020-08-07, 16:34:01 +// Exported by Cearn's Usenti v1.7.6 +// (comments, kudos, flames to "daytshen@hotmail.com") +// +//====================================================================== + +const unsigned short playerPal[256]= +{ + 0x0000,0x031F,0x7C00,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +}; + +const unsigned short playerTiles[64]= +{ + 0x0005,0x0000,0x1110,0x1111,0x1110,0x1111,0x1110,0x1111, + 0x1110,0x1222,0x1110,0x1222,0x1110,0x1222,0x1110,0x1111, + 0x0000,0x0000,0x1111,0x0111,0x1111,0x0111,0x1111,0x0111, + 0x2221,0x0111,0x2221,0x0111,0x2221,0x0111,0x1111,0x0111, + 0x1110,0x1111,0x1110,0x1111,0x1110,0x2222,0x1110,0x2221, + 0x1110,0x1111,0x1110,0x1111,0x1110,0x1111,0x0000,0x0000, + 0x1111,0x0111,0x1111,0x0111,0x2222,0x0111,0x1222,0x0111, + 0x1111,0x0111,0x1111,0x0111,0x1111,0x0111,0x0000,0x0000, +}; + diff --git a/sprites/player.h b/sprites/player.h new file mode 100644 index 0000000..65f840a --- /dev/null +++ b/sprites/player.h @@ -0,0 +1,24 @@ +//====================================================================== +// +// player, 16x16@4, +// + palette 256 entries, not compressed +// + 4 tiles not compressed +// Total size: 512 + 128 = 640 +// +// Time-stamp: 2020-08-07, 16:34:01 +// Exported by Cearn's Usenti v1.7.6 +// (comments, kudos, flames to "daytshen@hotmail.com") +// +//====================================================================== + +#ifndef __PLAYER__ +#define __PLAYER__ + +#define playerPalLen 512 +extern const unsigned short playerPal[256]; + +#define playerTilesLen 128 +extern const unsigned short playerTiles[64]; + +#endif // __PLAYER__ + diff --git a/sprites/toolbox.c b/sprites/toolbox.c new file mode 100644 index 0000000..e58687c --- /dev/null +++ b/sprites/toolbox.c @@ -0,0 +1,65 @@ +// +// toolbox.c +// +// Tools source for obj_demo +// +// (20060922-20060924, cearn) +// +// === NOTES === +// * This is a _small_ set of typedefs, #defines and inlines that can +// be found in tonclib, and might not represent the +// final forms. + +#include "../include/toolbox.h" + +// === (tonc_core.c) ================================================== + +u16 __key_curr= 0, __key_prev= 0; + +// === (tonc_oam.c) =================================================== + +void oam_init(OBJ_ATTR *obj, u32 count) +{ + u32 nn= count; + u32 *dst= (u32*)obj; + + // Hide each object + while(nn--) + { + *dst++= ATTR0_HIDE; + *dst++= 0; + } + // init oam + oam_copy(oam_mem, obj, count); +} + +void oam_copy(OBJ_ATTR *dst, const OBJ_ATTR *src, u32 count) +{ + +// NOTE: while struct-copying is the Right Thing to do here, +// there's a strange bug in DKP that sometimes makes it not work +// If you see problems, just use the word-copy version. +#if 1 + while(count--) + *dst++ = *src++; +#else + u32 *dstw= (u32*)dst, *srcw= (u32*)src; + while(count--) + { + *dstw++ = *srcw++; + *dstw++ = *srcw++; + } +#endif + +} + +void obj_copy(OBJ_ATTR *dst, const OBJ_ATTR *src, u32 count) +{ + int ii; + for(ii=0; ii