tuxanci2-engine
Game engine for tuxanci2
Log | Files | Refs | README | LICENSE
commit 3d85c968743fbdddb4b7d24326501bb858300c39
parent ccfcc639a03022d80d16d4f9b7ac56c6014b1577
Author: Connor Thomson <connor@gnufault.org>
Date:   Sun, 18 Oct 2026 15:21:01 -0700

Add xbox target

Diffstat:
A.gitmodules | 3+++
Aplatforms/xbox/.gitignore | 2++
Aplatforms/xbox/Makefile | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
Aplatforms/xbox/xbox.c | 49+++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 106 insertions(+), 0 deletions(-)

diff --git a/.gitmodules b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "platforms/xbox/nxdk"] + path = platforms/xbox/nxdk + url = https://github.com/XboxDev/nxdk.git diff --git a/platforms/xbox/.gitignore b/platforms/xbox/.gitignore @@ -0,0 +1,2 @@ +tuxanci2.iso +nxdk diff --git a/platforms/xbox/Makefile b/platforms/xbox/Makefile @@ -0,0 +1,52 @@ +MAKEFILE_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) +ROOT_DIR := $(abspath $(MAKEFILE_DIR)/../..) + +NXDK_DIR ?= $(MAKEFILE_DIR)nxdk +NXDK_DIR := $(abspath $(NXDK_DIR)) +export NXDK_DIR +export PATH := $(NXDK_DIR)/bin:$(PATH) +XBOX_BUILD_DIR ?= $(ROOT_DIR)/build/xbox +XBOX_BUILD_DIR := $(abspath $(XBOX_BUILD_DIR)) +XXD ?= xxd + +ROOT_SOURCES := $(shell find $(ROOT_DIR)/src -type f -name '*.c') +STAGED_SOURCES := $(patsubst $(ROOT_DIR)/src/%.c,$(XBOX_BUILD_DIR)/src/%.c,$(ROOT_SOURCES)) +STAGED_ENTRY := $(XBOX_BUILD_DIR)/src/xbox.c +ASSETS := $(shell find $(ROOT_DIR)/files -type f -not -name 'LICENSE') +ASSET_PATHS := $(patsubst $(ROOT_DIR)/files/%,%,$(ASSETS)) +ASSET_SOURCES := $(addprefix $(XBOX_BUILD_DIR)/assets/,$(addsuffix .c,$(basename $(ASSET_PATHS)))) +CONFIG_HEADER := $(XBOX_BUILD_DIR)/ta_config.h + +SRCS := $(STAGED_ENTRY) $(STAGED_SOURCES) $(ASSET_SOURCES) +NXDK_CFLAGS += -I$(ROOT_DIR)/include -I$(XBOX_BUILD_DIR) + +.DEFAULT_GOAL := all +.PHONY: all clean + +all: $(STAGED_ENTRY) $(STAGED_SOURCES) $(ASSET_SOURCES) $(CONFIG_HEADER) + $(MAKE) -C "$(XBOX_BUILD_DIR)" -f "$(NXDK_DIR)/Makefile" NXDK_DIR="$(NXDK_DIR)" OUTPUT_DIR="$(XBOX_BUILD_DIR)" 'XBE_TITLE=Tuxanci\ 2' GEN_XISO="$(MAKEFILE_DIR)tuxanci2.iso" "SRCS=$(SRCS)" "NXDK_CFLAGS=-I$(ROOT_DIR)/include -I$(XBOX_BUILD_DIR)" + +$(STAGED_ENTRY): $(MAKEFILE_DIR)xbox.c + mkdir -p $(@D) + printf '#include "%s"\n' '$(abspath $<)' > $@ + +$(XBOX_BUILD_DIR)/src/%.c: $(ROOT_DIR)/src/%.c + mkdir -p $(@D) + printf '#include "%s"\n' '$(abspath $<)' > $@ + +define ASSET_C_RULE +$(XBOX_BUILD_DIR)/assets/$(basename $(patsubst $(ROOT_DIR)/files/%,%,$(1))).c: $(1) + mkdir -p $$(dir $$@) + $$(XXD) -i -n ta_file_$$(notdir $$(basename $(1))) $$< $$@ +endef + +$(foreach asset,$(ASSETS),$(eval $(call ASSET_C_RULE,$(asset)))) + +$(CONFIG_HEADER): + mkdir -p $(@D) + printf '#ifndef TA_CONFIG_H\n#define TA_CONFIG_H\n\n#define TA_BITS 32\n\n#endif\n' > $@ + +clean: + rm -rf "$(XBOX_BUILD_DIR)" + rm -rf "$(MAKEFILE_DIR)build" + rm -f "$(MAKEFILE_DIR)main.exe" "$(MAKEFILE_DIR)Tuxanci 2.iso" "$(MAKEFILE_DIR)tuxanci2.iso" diff --git a/platforms/xbox/xbox.c b/platforms/xbox/xbox.c @@ -0,0 +1,49 @@ +#include "ta_api.h" +#include <hal/video.h> +#include <windows.h> +#include <stdint.h> +#include <stdlib.h> + +#define SCREEN_WIDTH 640 +#define SCREEN_HEIGHT 480 +#define WINDOW_BPP 32 +#define TARGET_FPS 60 +#define FRAME_TIME_MS (1000 / TARGET_FPS) + +int main(void) { + if (!XVideoSetMode(SCREEN_WIDTH, SCREEN_HEIGHT, WINDOW_BPP, REFRESH_DEFAULT)) { + return 1; + } + + ta_fb.width = SCREEN_WIDTH; + ta_fb.height = SCREEN_HEIGHT; + ta_fb.bpp = WINDOW_BPP; + + ta_main_init(); + + while (1) { + ta_main_update(); + + uint32_t *dest = (uint32_t *)XVideoGetFB(); + uint32_t *src = (uint32_t *)ta_fb.buffers[0]; + + if (dest && src) { + for (int i = 0; i < SCREEN_WIDTH * SCREEN_HEIGHT; i++) { + dest[i] = src[i]; + } + } + + XVideoFlushFB(); + Sleep(FRAME_TIME_MS); + } + + return 0; +} + +void *ta_malloc(ta_size size) { + return malloc(size); +} + +void ta_free(void *ptr) { + free(ptr); +}