diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..e64167e6 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,33 @@ +FROM wombatant/devenv + +ENV DEVKITPRO /opt/devkitPro +ENV DEVKITARM ${DEVKITPRO}/devkitARM + +############################################################################### +# Install Ox + +RUN git clone -b release-0.1 https://github.com/wombatant/ox.git /usr/local/src/ox && \ + cd /usr/local/src/ox && \ + # setup build dirs + mkdir -p \ + /usr/local/src/ox/build/release \ + /usr/local/src/ox/build/windows \ + /usr/local/src/ox/build/gba; \ + # install Ox for native environment + cd /usr/local/src/ox/build/release && \ + cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ../../ && \ + make -j install; \ + # install Ox for GBA + cd /usr/local/src/ox/build/gba && \ + cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ + -DCMAKE_TOOLCHAIN_FILE=cmake/Modules/GBA.cmake \ + -DCMAKE_INSTALL_PREFIX=/opt/devkitPro/devkitARM \ + -DOX_USE_STDLIB=OFF ../../ && \ + make -j install; \ + # install Ox for Windows + cd /usr/local/src/ox/build/windows && \ + cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ + -DCMAKE_TOOLCHAIN_FILE=cmake/Modules/Mingw.cmake \ + -DCMAKE_INSTALL_PREFIX=/usr/x86_64-w64-mingw32 \ + -DOX_BUILD_EXEC=OFF ../../ && \ + make -j install diff --git a/Makefile b/Makefile index 3ece58c1..aaaacbb4 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ OS=$(shell uname | tr [:upper:] [:lower:]) HOST_ENV=${OS}-$(shell uname -m) DEVENV=devenv$(shell pwd | sed 's/\//-/g') -DEVENV_IMAGE=wombatant/nostalgia-devenv +DEVENV_IMAGE=nostalgia-devenv ifneq ($(shell which docker),) ifeq ($(shell docker inspect --format="{{.State.Status}}" ${DEVENV} 2>&1),running) ENV_RUN=docker exec -i -t --user $(shell id -u ${USER}) ${DEVENV} @@ -28,8 +28,9 @@ gba-run: make gdb: make gdb ./build/current/src/wombat/wombat +devenv-build: + docker build --no-cache . -t ${DEVENV_IMAGE} devenv: - docker pull ${DEVENV_IMAGE} docker run -d -v $(shell pwd):/usr/src/project \ -e LOCAL_USER_ID=$(shell id -u ${USER}) \ -e DISPLAY=$(DISPLAY) \ diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index cb207313..7f94f0ef 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -6,7 +6,6 @@ if(WOMBAT_BUILD_TYPE STREQUAL "GBA") CPP gba/gfx.cpp gba/media.cpp - gba/dirt.s ) elseif(WOMBAT_BUILD_TYPE STREQUAL "Native") set( @@ -25,6 +24,7 @@ install( FILES core.hpp gfx.hpp + gba/gba.hpp DESTINATION include/nostalgia/core ) diff --git a/src/core/gba/addresses.hpp b/src/core/gba/addresses.hpp index d8762ca8..fde6f283 100644 --- a/src/core/gba/addresses.hpp +++ b/src/core/gba/addresses.hpp @@ -39,8 +39,8 @@ ///////////////////////////////////////////////////////////////// // Memory Addresses -#define MEM_PALLETE_BG *((unsigned short*) 0x05000000) -#define MEM_PALLETE_SPRITE *((unsigned short*) 0x05000200) +#define MEM_PALLETE_BG ((uint16_t*) 0x05000000) +#define MEM_PALLETE_SPRITE ((uint16_t*) 0x05000200) typedef uint16_t BgMapTile[1024]; #define MEM_BG_MAP ((BgMapTile*) 0x06000000) diff --git a/src/core/gba/dirt.h b/src/core/gba/dirt.h deleted file mode 100644 index 910f543f..00000000 --- a/src/core/gba/dirt.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2016-2017 gtalent2@gmail.com - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -//{{BLOCK(dirt) - -//====================================================================== -// -// dirt, 80x72@4, -// + palette 256 entries, not compressed -// + 90 tiles not compressed -// Total size: 512 + 2880 = 3392 -// -// Time-stamp: 2016-07-06, 22:51:35 -// Exported by Cearn's GBA Image Transmogrifier, v0.8.12 -// ( http://www.coranac.com/projects/#grit ) -// -//====================================================================== - -#ifndef GRIT_DIRT_H -#define GRIT_DIRT_H - -#define dirtTilesLen 2880 -extern const unsigned int dirtTiles[720]; - -#define dirtPalLen 512 -extern const unsigned short dirtPal[256]; - -#endif // GRIT_DIRT_H - -//}}BLOCK(dirt) diff --git a/src/core/gba/dirt.s b/src/core/gba/dirt.s deleted file mode 100644 index 8c10a4a9..00000000 --- a/src/core/gba/dirt.s +++ /dev/null @@ -1,165 +0,0 @@ - -@{{BLOCK(dirt) - -@======================================================================= -@ -@ dirt, 80x72@4, -@ + palette 256 entries, not compressed -@ + 90 tiles not compressed -@ Total size: 512 + 2880 = 3392 -@ -@ Time-stamp: 2016-07-06, 22:51:35 -@ Exported by Cearn's GBA Image Transmogrifier, v0.8.12 -@ ( http://www.coranac.com/projects/#grit ) -@ -@======================================================================= - - .section .rodata - .align 2 - .global dirtTiles @ 2880 unsigned chars - .hidden dirtTiles -dirtTiles: - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x23324444,0x31134444,0x31134444,0x23324444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x24444444 - - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444233 - .word 0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444 - .word 0x44444444,0x32444444,0x13444444,0x13444444,0x32444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444423,0x44444431,0x44444431,0x44444423,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x34444444,0x34444444,0x24444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444311,0x44444311,0x44444233,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x32444444,0x13444444,0x13444444,0x32444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444423,0x44444431,0x44444431,0x44444423,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - - .word 0x44444444,0x44444444,0x33244444,0x11344444,0x11344444,0x33244444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444442,0x44444443,0x44444443,0x44444442,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44233244,0x44311344 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x42332444,0x43113444,0x43113444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444 - - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44311344,0x44233244,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x42332444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44442332,0x44443113,0x44443113,0x44442332,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x33244444,0x11344444,0x11344444,0x33244444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444442,0x44444443,0x44444443,0x44444442,0x44444444,0x44444444,0x44444444 - - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x42332444,0x43113444,0x43113444,0x42332444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x23324444,0x31134444,0x31134444,0x23324444 - - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x42332444,0x43113444,0x43113444,0x42332444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444 - .word 0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444 - - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x00000000,0x00000000 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x00000000,0x00000000 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x00000000,0x00000000 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x00000000,0x00000000 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x00000000,0x00000000 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x00000000,0x00000000 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x00000000,0x00000000 - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x00000000,0x00000000 - - .word 0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x44444444,0x00000000,0x00000000 - .word 0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000444,0x00000000,0x00000000 - - .section .rodata - .align 2 - .global dirtPal @ 512 unsigned chars - .hidden dirtPal -dirtPal: - .hword 0x0000,0x5EF7,0x7BDE,0x739C,0x7FFF,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - .hword 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 - -@}}BLOCK(dirt) diff --git a/src/core/gba/gba.hpp b/src/core/gba/gba.hpp index 3bfe4265..d5789897 100644 --- a/src/core/gba/gba.hpp +++ b/src/core/gba/gba.hpp @@ -8,6 +8,8 @@ #pragma once +#include + namespace nostalgia { namespace core { @@ -15,7 +17,7 @@ typedef struct { uint32_t data[8]; } Tile, Tile4; // d-tile: double-sized tile (8bpp) typedef struct { uint32_t data[16]; } Tile8; // tile block: 32x16 tiles, 16x16 d-tiles -typedef unsigned short Pallete[256]; +typedef uint16_t Pallete[256]; typedef Tile CharBlock[512]; typedef Tile8 CharBlock8[256]; diff --git a/src/core/gba/gfx.cpp b/src/core/gba/gfx.cpp index 4f511635..c42daa7b 100644 --- a/src/core/gba/gfx.cpp +++ b/src/core/gba/gfx.cpp @@ -11,7 +11,6 @@ #include "addresses.hpp" #include "media.hpp" #include "gba.hpp" -#include "dirt.h" namespace nostalgia { namespace core { @@ -29,25 +28,17 @@ ox::Error initGfx() { /* |||| */ REG_DISPCNT = 0x1100; - TILE_ADDR[0][1] = *(Tile*) dirtTiles; - - for (auto i = 0; i < (dirtPalLen / 2); i++) { - (&MEM_PALLETE_BG)[i] = dirtPal[i]; - } - auto fs = (FileStore32*) findMedia(); REG_BG0CNT = (28 << 8) | 1; + REG_BG0CNT |= (1 << 7); // set to use 8 bits per pixel + if (fs) { + FileStore32::FsSize_t readSize = 0; + fs->read(1, 511, 8 * 64 * 36, &TILE8_ADDR[0][1], nullptr); + fs->read(1, 0, 512, &MEM_PALLETE_BG[0], &readSize); + } + MEM_BG_MAP[28][106] = 1; MEM_BG_MAP[28][107] = 1; - if (fs) { - char out[6]; - FileStore32::FsSize_t outSize = 0; - fs->read(3, out, &outSize); - if (outSize == 5) { - MEM_BG_MAP[28][138] = 1; - MEM_BG_MAP[28][139] = 1; - } - } return 0; } diff --git a/src/tools/pack.cpp b/src/tools/pack.cpp index f5130973..e4e79a8d 100644 --- a/src/tools/pack.cpp +++ b/src/tools/pack.cpp @@ -59,6 +59,7 @@ int pointToIdx(int w, int x, int y) { int run(ClArgs args) { Error err = 0; + int argInode = args.getInt("inode"); QString argInPath = args.getString("img").c_str(); QString argFsPath = args.getString("fs").c_str(); auto argCompact = args.getBool("c"); @@ -100,7 +101,7 @@ int run(ClArgs args) { if (fs) { fs = expandCopyCleanup(fs, fs->size() + fs->spaceNeeded(imgDataBuffSize)); fsBuff = fs->buff(); // update fsBuff pointer in case there is a new buff - err |= fs->write(1, imgDataBuff, imgDataBuffSize); + err |= fs->write(argInode, imgDataBuff, imgDataBuffSize); if (argCompact) { fs->resize();