More examples, Several bug fixes. Start of docs.

This commit is contained in:
Scott Duensing 2024-04-30 20:02:22 -05:00
parent 8536240e75
commit 45ead870a1
36 changed files with 380 additions and 295 deletions

1
.gitattributes vendored
View file

@ -10,3 +10,4 @@
*.clut filter=lfs diff=lfs merge=lfs -text *.clut filter=lfs diff=lfs merge=lfs -text
*.indexed filter=lfs diff=lfs merge=lfs -text *.indexed filter=lfs diff=lfs merge=lfs -text
*.sprite filter=lfs diff=lfs merge=lfs -text *.sprite filter=lfs diff=lfs merge=lfs -text
*.bin filter=lfs diff=lfs merge=lfs -text

View file

@ -80,6 +80,7 @@ pushd distro
cp -f ${ROOT}/f256lib.h . cp -f ${ROOT}/f256lib.h .
cp -f ${ROOT}/pgz-thunk.py . cp -f ${ROOT}/pgz-thunk.py .
cp -f ../README .
cp -f ../f256build.bat . cp -f ../f256build.bat .
cp -f ../f256run.bat . cp -f ../f256run.bat .

106
distro/README Normal file
View file

@ -0,0 +1,106 @@
_____ ____ ____ __ _ _
| ___|___ \| ___| / /_ | | |_ ___ __ ___ _ __ ___ ___ ___
| |_ __) |___ \| '_ \ | | \ \ / / '_ ` _ \ _____| '_ ` _ \ / _ \/ __|
| _| / __/ ___) | (_) | | | |\ V /| | | | | |_____| | | | | | (_) \__ \
|_| |_____|____/ \___/ |_|_| \_/ |_| |_| |_| |_| |_| |_|\___/|___/
Welcome to LLVM-MOS for the Foenix F256 family of computers!
REQUIREMENTS
============
The compiler toolchain and utilites will run on recent versions of Windows,
Linux, and Apple Silicon MacOS. There is currently no support for Intel MacOS.
On Windows, you will need:
* WinRAR (https://www.rarlab.com/) or 7-Zip (https://www.7zip.com/) installed.
* Python 3.x (https://www.python.org/) installed and in your PATH.
INSTALLATION
============
Download the appropriate installation script:
* 64 bit Intel Windows: f256-install-windows.bat
* 64 bit Intel Linux: f256-install-linux.sh
* 64 bit ARM MacOS: f256-install-macos.sh
Create a new, empty directory, with no spaces in the name (or in the names of
the parent directories) and place this file into it. From that folder, execute
the script. It will download additional dependencies and install them. Aside
from some Python modules needed by FoenixManager, everything will stay inside
this new folder. Uninstalling is just a matter of deleting it.
CONFIGURATION
=============
You will need to modify foenixmgr.ini in the main installation folder. The
only thing that should need updated is the COM port used to communicate with
your F256. See: https://github.com/pweingar/FoenixMgr
ASSUMPTIONS
===========
This package was designed to be easy to use for new programmers. As such, some
liberties were taken that aren't entirely common practice. There are no
project files, makefiles, or other build configuration systems. The included
f256build and f256run scripts assume you have arranged your code in directories
like the example programs. The main requirement is that each program have its
own parent directory named for that program and inside it, a "src" directory
where the actual code lives. Example:
C:\FOENIX\CODE\MYPROGRAM\SRC
This would be a project named "MYPROGRAM" located in a CODE folder under the
folder you installed the toolkit in. (You do not have to locate your projects
under the toolkit folder.) To build this, you would run f256build from the
C:\FOENIX folder as follows:
f256build code\myprogram
UNIX folks, flip your slashes!
USAGE
=====
As shown above, f256build is used to build projects using the default linker
settings. If you do not have linker settings in your project already, the
defaults will be added (in a file named f256.ld in your project directory).
Unless you need to use embedded binary data in your project, the defaults are
all you need. Embedded data examples are included. See SPRITES and TILEMAP in
the EXAMPLES folder. More details can be found in the f256lib documentation.
When building your project f256build will create a ".builddir" folder in your
project directory. In here you will find copies of your source code that have
been modified by the overlay tool (for creating programs larger than 64k),
"trampoline" headers (again, generated by the overlay tool), intermediate
binary files, symbol listings, assembler source listings, memory maps,
additional linker information, and more. These can be safely ignored or used
to assist in debugging your application.
To run your program on the F256 using a USB debug cable, use f256run just as
you did f256build. Example:
f256run code\myprogram
If you do not have a debug cable, you can copy the PGZ for your program from
its project directory to the SD card used in your F256.
SUPPORT
=======
Drop by the Foenix Retro Systems Discord! https://discord.gg/e32efF7FGy I am
almost always online as "sduensin".
Additional information on the F256 family of computers can be found on the F256
wiki: http://wiki.f256foenix.com/
As a last resort, you can email me, Scott Duensing, at scott@kangaroopunch.com
and I'll probably ask you to join the Discord. :-)

View file

@ -105,11 +105,17 @@ ren overlay.windows overlay.exe
if exist *.sh del *.sh > NUL if exist *.sh del *.sh > NUL
ren FoenixMgr-master FoenixMgr ren FoenixMgr-master FoenixMgr
copy FoenixMgr\foenixmgr.ini . > NUL
pushd FoenixMgr pushd FoenixMgr
pip.exe install -r requirements.txt pip.exe install -r requirements.txt
popd popd
echo [DEFAULT] > foenixmgr.ini
echo port=COM3 >> foenixmgr.ini
echo labels=sample.lbl >> foenixmgr.ini
echo flash_address=380000 >> foenixmgr.ini
echo chunk_size=1024 >> foenixmgr.ini
echo cpu=65c02 >> foenixmgr.ini
echo @"%%~dp0mos-clang++.exe" --config mos-f256.cfg %%* > llvm-mos\bin\mos-f256-clang++.bat echo @"%%~dp0mos-clang++.exe" --config mos-f256.cfg %%* > llvm-mos\bin\mos-f256-clang++.bat
echo @"%%~dp0mos-clang-cpp.exe" --config mos-f256.cfg %%* > llvm-mos\bin\mos-f256-clang-cpp.bat echo @"%%~dp0mos-clang-cpp.exe" --config mos-f256.cfg %%* > llvm-mos\bin\mos-f256-clang-cpp.bat
echo @"%%~dp0mos-clang.exe" --config mos-f256.cfg %%* > llvm-mos\bin\mos-f256-clang.bat echo @"%%~dp0mos-clang.exe" --config mos-f256.cfg %%* > llvm-mos\bin\mos-f256-clang.bat

View file

@ -51,12 +51,12 @@ pushd "%PROJECT%"
cd .builddir cd .builddir
"%ROOT%\overlay.exe" 5 "%BUILD%" "%SOURCE%" "%ROOT%\overlay.exe" 5 "%BUILD%" "%SOURCE%"
if not exist "%PROJECT%\f256.ld" copy /y "%ROOT%\llvm-mos\mos-platform\f256\lib\link.ld" "%PROJECT%\f256.ld" > NUL if not exist "%PROJECT%\f256.ld" copy /y "%ROOT%\llvm-mos\mos-platform\f256\lib\link.ld" "%PROJECT%\f256.ld" > NUL
call mos-f256-clang -T ..\f256.ld -Wl,-Map=%NAME%.map -o %NAME% -I"%ROOT%" -Wall -lm *.c call mos-f256-clang.bat -T ..\f256.ld -Wl,-Map=%NAME%.map -o %NAME% -I"%ROOT%" -Os -Wall -lm *.c
if errorlevel 1 goto failed if errorlevel 1 goto failed
ren %NAME% %NAME%.pgz ren %NAME% %NAME%.pgz
llvm-nm %NAME%.elf > %NAME%.sym llvm-nm.exe %NAME%.elf > %NAME%.sym
llvm-objdump --syms -d --print-imm-hex %NAME%.elf > %NAME%.lst llvm-objdump.exe --syms -d --print-imm-hex %NAME%.elf > %NAME%.lst
python %ROOT%\pgz-thunk.py %NAME%.pgz python.exe %ROOT%\pgz-thunk.py %NAME%.pgz
move %NAME%.pgz ..\. > NUL move %NAME%.pgz ..\. > NUL
:failed :failed
popd popd

View file

@ -43,4 +43,5 @@ echo No PGZ found.
exit /b exit /b
:foundPgz :foundPgz
python.exe "%ROOT%/FoenixMgr/FoenixMgr/fnxmgr.py --run-pgz "%PROJECT%\%NAME%.pgz" python.exe "%ROOT%\FoenixMgr\FoenixMgr\fnxmgr.py" --boot FLASH
python.exe "%ROOT%\FoenixMgr\FoenixMgr\fnxmgr.py" --run-pgz "%PROJECT%\%NAME%.pgz"

111
examples/sprites/f256.ld Normal file
View file

@ -0,0 +1,111 @@
/* fake C Stack */
PROVIDE(__stack = 0xA000);
/* entry point to my program - 0x200 to 0x2ff are command line arguments */
PROVIDE(__f256_start = 0x300);
/* page size of a block of memory */
PROVIDE(__BLOCK_SIZE = 0x2000);
/* swappable block address */
PROVIDE(__SLOT_ADDR = 0xA000);
/* f256k uses first 16 bytes of ZP for mmu control? */
__rc0 = 0x10;
INCLUDE imag-regs.ld
ASSERT(__rc0 == 0x10, "Inconsistent zero page map.")
ASSERT(__rc31 == 0x2f, "Inconsistent zero page map.")
MEMORY {
/* kernel uses 0xf0-0xff for parameter passing */
zp : ORIGIN = __rc31 + 1, LENGTH = 0xF0 - (__rc31 + 1)
ram (rw) : ORIGIN = __f256_start, LENGTH = __stack-__f256_start
}
/* LMAs */
__block8_lma = ( 8<<24)|__SLOT_ADDR;
__block9_lma = ( 9<<24)|__SLOT_ADDR;
__block10_lma = (10<<24)|__SLOT_ADDR;
__block11_lma = (11<<24)|__SLOT_ADDR;
__block12_lma = (12<<24)|__SLOT_ADDR;
__block13_lma = (13<<24)|__SLOT_ADDR;
__block14_lma = (14<<24)|__SLOT_ADDR;
__block15_lma = (15<<24)|__SLOT_ADDR;
__block16_lma = (16<<24)|__SLOT_ADDR;
__block17_lma = (17<<24)|__SLOT_ADDR;
__block18_lma = (18<<24)|__SLOT_ADDR;
__block19_lma = (19<<24)|__SLOT_ADDR;
__block20_lma = (20<<24)|__SLOT_ADDR;
__block21_lma = (21<<24)|__SLOT_ADDR;
__block22_lma = (22<<24)|__SLOT_ADDR;
__block23_lma = (23<<24)|__SLOT_ADDR;
/* Stash preloaded binary data */
__binarydata_lma = 0x10000;
__BINARYDATA_SIZE = 0xA081; /* Size of sprites.bin + 1 */
MEMORY {
block8 : ORIGIN = __block8_lma, LENGTH = __BLOCK_SIZE
block9 : ORIGIN = __block9_lma, LENGTH = __BLOCK_SIZE
block10 : ORIGIN = __block10_lma, LENGTH = __BLOCK_SIZE
block11 : ORIGIN = __block11_lma, LENGTH = __BLOCK_SIZE
block12 : ORIGIN = __block12_lma, LENGTH = __BLOCK_SIZE
block13 : ORIGIN = __block13_lma, LENGTH = __BLOCK_SIZE
block14 : ORIGIN = __block14_lma, LENGTH = __BLOCK_SIZE
block15 : ORIGIN = __block15_lma, LENGTH = __BLOCK_SIZE
block16 : ORIGIN = __block16_lma, LENGTH = __BLOCK_SIZE
block17 : ORIGIN = __block17_lma, LENGTH = __BLOCK_SIZE
block18 : ORIGIN = __block18_lma, LENGTH = __BLOCK_SIZE
block19 : ORIGIN = __block19_lma, LENGTH = __BLOCK_SIZE
block20 : ORIGIN = __block20_lma, LENGTH = __BLOCK_SIZE
block21 : ORIGIN = __block21_lma, LENGTH = __BLOCK_SIZE
block22 : ORIGIN = __block22_lma, LENGTH = __BLOCK_SIZE
block23 : ORIGIN = __block23_lma, LENGTH = __BLOCK_SIZE
binarydata : ORIGIN = __binarydata_lma, LENGTH = __BINARYDATA_SIZE
}
REGION_ALIAS("c_writeable", ram)
REGION_ALIAS("c_readonly", ram)
SECTIONS {
INCLUDE c.ld
.block8 : { *(.block8 .block8.*) } >block8 end_block8 = .;
.block9 : { *(.block9 .block9.*) } >block9 end_block9 = .;
.block10 : { *(.block10 .block10.*) } >block10 end_block10 = .;
.block11 : { *(.block11 .block11.*) } >block11 end_block11 = .;
.block12 : { *(.block12 .block12.*) } >block12 end_block12 = .;
.block13 : { *(.block13 .block13.*) } >block13 end_block13 = .;
.block14 : { *(.block14 .block14.*) } >block14 end_block14 = .;
.block15 : { *(.block15 .block15.*) } >block15 end_block15 = .;
.block16 : { *(.block16 .block16.*) } >block16 end_block16 = .;
.block17 : { *(.block17 .block17.*) } >block17 end_block17 = .;
.block18 : { *(.block18 .block18.*) } >block18 end_block18 = .;
.block19 : { *(.block19 .block19.*) } >block19 end_block19 = .;
.block20 : { *(.block20 .block20.*) } >block20 end_block20 = .;
.block21 : { *(.block21 .block21.*) } >block21 end_block21 = .;
.block22 : { *(.block22 .block22.*) } >block22 end_block22 = .;
.block23 : { *(.block23 .block23.*) } >block23 end_block23 = .;
.binarydata : { *(.binarydata .binarydata.*) } >binarydata end_binarydata = .;
}
OUTPUT_FORMAT {
BYTE(0x5A) /* pgZ */
/* RAM Segment */
SHORT(ORIGIN(ram)) /* where to load it, 24 bits */
BYTE(0x00)
SHORT(__bss_start-ORIGIN(ram)) /* size to load */
BYTE(0x00)
TRIM(ram)
/* Overlay Segments */
INCLUDE output.ld
/* Binary Data */
SHORT(ORIGIN(binarydata))
BYTE(ORIGIN(binarydata)>>16)
SHORT(end_binarydata - __binarydata_lma)
BYTE((end_binarydata - __binarydata_lma)>>16)
TRIM(binarydata)
/* Launch the program, at _start */
SHORT(_start)
LONG(0)
}

View file

@ -15,7 +15,8 @@ function makeSprite() {
mv assets/*.clut generated/. mv assets/*.clut generated/.
mv assets/*.indexed generated/. mv assets/*.indexed generated/.
cat generated/${NAME}-1x1.indexed \ cat \
generated/${NAME}-1x1.indexed \
generated/${NAME}-2x1.indexed \ generated/${NAME}-2x1.indexed \
generated/${NAME}-3x1.indexed \ generated/${NAME}-3x1.indexed \
generated/${NAME}-4x1.indexed \ generated/${NAME}-4x1.indexed \
@ -35,3 +36,11 @@ makeSprite apache-left
makeSprite apache-left-front makeSprite apache-left-front
makeSprite apache-right-front makeSprite apache-right-front
makeSprite apache-right makeSprite apache-right
cat \
generated/apache-left.sprite \
generated/apache-left-front.sprite \
generated/apache-right-front.sprite \
generated/apache-right.sprite \
generated/apache-left.clut \
> generated/sprites.bin

View file

@ -21,7 +21,8 @@
*/ */
#include "f256.h" #define F256LIB_IMPLEMENTATION
#include "f256lib.h"
#define SPRITE_COUNT 4 #define SPRITE_COUNT 4
@ -47,7 +48,9 @@
#define TURN_SPEED 25 #define TURN_SPEED 25
static byte sprites[SPRITE_COUNT] = { SPR_LEFT, SPR_LEFT_FRONT, SPR_RIGHT_FRONT, SPR_RIGHT }; EMBED(".binarydata.embedded", embedded, "../generated/sprites.bin");
static uint32_t spriteStartAddrs[SPRITE_COUNT] = { SPR_LEFT_ADDR, SPR_LEFT_FRONT_ADDR, SPR_RIGHT_FRONT_ADDR, SPR_RIGHT_ADDR }; static uint32_t spriteStartAddrs[SPRITE_COUNT] = { SPR_LEFT_ADDR, SPR_LEFT_FRONT_ADDR, SPR_RIGHT_FRONT_ADDR, SPR_RIGHT_ADDR };
static uint32_t spriteAddrs[SPRITE_COUNT][SPRITE_WIDTH][SPRITE_HEIGHT]; static uint32_t spriteAddrs[SPRITE_COUNT][SPRITE_WIDTH][SPRITE_HEIGHT];
static byte spriteIds[SPRITE_COUNT][SPRITE_WIDTH][SPRITE_HEIGHT]; static byte spriteIds[SPRITE_COUNT][SPRITE_WIDTH][SPRITE_HEIGHT];
@ -255,8 +258,7 @@ void setup(void) {
} }
int main(void) { int main(int argc, char *argv[]) {
f256Init();
setup(); setup();

111
examples/tilemap/f256.ld Normal file
View file

@ -0,0 +1,111 @@
/* fake C Stack */
PROVIDE(__stack = 0xA000);
/* entry point to my program - 0x200 to 0x2ff are command line arguments */
PROVIDE(__f256_start = 0x300);
/* page size of a block of memory */
PROVIDE(__BLOCK_SIZE = 0x2000);
/* swappable block address */
PROVIDE(__SLOT_ADDR = 0xA000);
/* f256k uses first 16 bytes of ZP for mmu control? */
__rc0 = 0x10;
INCLUDE imag-regs.ld
ASSERT(__rc0 == 0x10, "Inconsistent zero page map.")
ASSERT(__rc31 == 0x2f, "Inconsistent zero page map.")
MEMORY {
/* kernel uses 0xf0-0xff for parameter passing */
zp : ORIGIN = __rc31 + 1, LENGTH = 0xF0 - (__rc31 + 1)
ram (rw) : ORIGIN = __f256_start, LENGTH = __stack-__f256_start
}
/* LMAs */
__block8_lma = ( 8<<24)|__SLOT_ADDR;
__block9_lma = ( 9<<24)|__SLOT_ADDR;
__block10_lma = (10<<24)|__SLOT_ADDR;
__block11_lma = (11<<24)|__SLOT_ADDR;
__block12_lma = (12<<24)|__SLOT_ADDR;
__block13_lma = (13<<24)|__SLOT_ADDR;
__block14_lma = (14<<24)|__SLOT_ADDR;
__block15_lma = (15<<24)|__SLOT_ADDR;
__block16_lma = (16<<24)|__SLOT_ADDR;
__block17_lma = (17<<24)|__SLOT_ADDR;
__block18_lma = (18<<24)|__SLOT_ADDR;
__block19_lma = (19<<24)|__SLOT_ADDR;
__block20_lma = (20<<24)|__SLOT_ADDR;
__block21_lma = (21<<24)|__SLOT_ADDR;
__block22_lma = (22<<24)|__SLOT_ADDR;
__block23_lma = (23<<24)|__SLOT_ADDR;
/* Stash preloaded binary data */
__binarydata_lma = 0x10000;
__BINARYDATA_SIZE = 0x5f845; /* Size of tiles.bin + 1 */
MEMORY {
block8 : ORIGIN = __block8_lma, LENGTH = __BLOCK_SIZE
block9 : ORIGIN = __block9_lma, LENGTH = __BLOCK_SIZE
block10 : ORIGIN = __block10_lma, LENGTH = __BLOCK_SIZE
block11 : ORIGIN = __block11_lma, LENGTH = __BLOCK_SIZE
block12 : ORIGIN = __block12_lma, LENGTH = __BLOCK_SIZE
block13 : ORIGIN = __block13_lma, LENGTH = __BLOCK_SIZE
block14 : ORIGIN = __block14_lma, LENGTH = __BLOCK_SIZE
block15 : ORIGIN = __block15_lma, LENGTH = __BLOCK_SIZE
block16 : ORIGIN = __block16_lma, LENGTH = __BLOCK_SIZE
block17 : ORIGIN = __block17_lma, LENGTH = __BLOCK_SIZE
block18 : ORIGIN = __block18_lma, LENGTH = __BLOCK_SIZE
block19 : ORIGIN = __block19_lma, LENGTH = __BLOCK_SIZE
block20 : ORIGIN = __block20_lma, LENGTH = __BLOCK_SIZE
block21 : ORIGIN = __block21_lma, LENGTH = __BLOCK_SIZE
block22 : ORIGIN = __block22_lma, LENGTH = __BLOCK_SIZE
block23 : ORIGIN = __block23_lma, LENGTH = __BLOCK_SIZE
binarydata : ORIGIN = __binarydata_lma, LENGTH = __BINARYDATA_SIZE
}
REGION_ALIAS("c_writeable", ram)
REGION_ALIAS("c_readonly", ram)
SECTIONS {
INCLUDE c.ld
.block8 : { *(.block8 .block8.*) } >block8 end_block8 = .;
.block9 : { *(.block9 .block9.*) } >block9 end_block9 = .;
.block10 : { *(.block10 .block10.*) } >block10 end_block10 = .;
.block11 : { *(.block11 .block11.*) } >block11 end_block11 = .;
.block12 : { *(.block12 .block12.*) } >block12 end_block12 = .;
.block13 : { *(.block13 .block13.*) } >block13 end_block13 = .;
.block14 : { *(.block14 .block14.*) } >block14 end_block14 = .;
.block15 : { *(.block15 .block15.*) } >block15 end_block15 = .;
.block16 : { *(.block16 .block16.*) } >block16 end_block16 = .;
.block17 : { *(.block17 .block17.*) } >block17 end_block17 = .;
.block18 : { *(.block18 .block18.*) } >block18 end_block18 = .;
.block19 : { *(.block19 .block19.*) } >block19 end_block19 = .;
.block20 : { *(.block20 .block20.*) } >block20 end_block20 = .;
.block21 : { *(.block21 .block21.*) } >block21 end_block21 = .;
.block22 : { *(.block22 .block22.*) } >block22 end_block22 = .;
.block23 : { *(.block23 .block23.*) } >block23 end_block23 = .;
.binarydata : { *(.binarydata .binarydata.*) } >binarydata end_binarydata = .;
}
OUTPUT_FORMAT {
BYTE(0x5A) /* pgZ */
/* RAM Segment */
SHORT(ORIGIN(ram)) /* where to load it, 24 bits */
BYTE(0x00)
SHORT(__bss_start-ORIGIN(ram)) /* size to load */
BYTE(0x00)
TRIM(ram)
/* Overlay Segments */
INCLUDE output.ld
/* Binary Data */
SHORT(ORIGIN(binarydata))
BYTE(ORIGIN(binarydata)>>16)
SHORT(end_binarydata - __binarydata_lma)
BYTE((end_binarydata - __binarydata_lma)>>16)
TRIM(binarydata)
/* Launch the program, at _start */
SHORT(_start)
LONG(0)
}

View file

@ -21,17 +21,21 @@
*/ */
#include "f256.h" #define F256LIB_IMPLEMENTATION
#include "f256lib.h"
#define MAP_BRITANIA 0x10000 #define MAP_BRITANIA 0x10000 // Len: 0x1fc02
#define MAP_UNDERWORLD 0x30000 #define MAP_UNDERWORLD 0x2fc02 // Len: 0x1fc02
#define TILES_IMAGE_TOP 0x50000 #define TILES_IMAGE_TOP 0x4f804 // Len: 0x20000
#define TILES_IMAGE_BOTTOM 0x60000 #define TILES_IMAGE_BOTTOM 0x5f804 // Halfway through TILES_IMAGE_TOP
#define TILES_CLUT 0x70000 #define TILES_CLUT 0x6f804 // Len: 0x40
int main(void) { EMBED(".binarydata.embedded", embedded, "../tiles/tiles.bin");
int main(int argc, char *argv[]) {
byte x; byte x;
byte r; byte r;
byte g; byte g;
@ -40,8 +44,6 @@ int main(void) {
uint16_t xs = 75; uint16_t xs = 75;
uint16_t ys = 99; uint16_t ys = 99;
f256Init();
// Set up CLUT0. // Set up CLUT0.
c = TILES_CLUT; c = TILES_CLUT;
for (x=0; x<16; x++) { for (x=0; x<16; x++) {
@ -55,7 +57,7 @@ int main(void) {
graphicsSetLayerTile(0, 0); graphicsSetLayerTile(0, 0);
tileDefineTileSet(0, TILES_IMAGE_TOP, true); tileDefineTileSet(0, TILES_IMAGE_TOP, true);
tileDefineTileSet(1, TILES_IMAGE_BOTTOM, true); tileDefineTileSet(1, TILES_IMAGE_BOTTOM, true);
tileDefineTileMap(0, MAP_BRITANIA, 16, 255, 255); tileDefineTileMap(0, MAP_BRITANIA, 16, 255, 255); // Change to MAP_UNDERWORLD for more fun.
tileSetVisible(0, true); tileSetVisible(0, true);
tileSetScroll(0, 0, xs, 0, ys); tileSetScroll(0, 0, xs, 0, ys);

View file

@ -0,0 +1,8 @@
#!/bin/bash
cat \
brita.tiles \
under.tiles \
u5tiles.indexed \
u5tiles.clut \
> tiles.bin

View file

@ -38,7 +38,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdint.h> #include <stdint.h>
#include "../../tools/shared/util.h" #include "../../../tools/shared/util.h"
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {

View file

@ -1,52 +0,0 @@
#
# Copyright (c) 2024 Scott Duensing, scott@kangaroopunch.com
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
# This is only to make my IDE happy.
# We can't actually build with it until I get llvm-mos integrated into
# toolchains. -- SCD
cmake_minimum_required(VERSION 3.22)
set(CMAKE_C_STANDARD 17)
project(helicopter)
set(F256DIR ${CMAKE_SOURCE_DIR}/../..)
set(DEFINES ${F256DIR}/include)
set(F256LIB ${F256DIR}/f256lib)
set(HELICOPTER_SOURCE
${F256LIB}/f256.h
${F256LIB}/f256.c
helicopter.c
)
add_executable(${CMAKE_PROJECT_NAME}
${HELICOPTER_SOURCE}
)
target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC
${CMAKE_SOURCE_DIR}
${DEFINES}
${F256LIB}
)

View file

@ -1,58 +0,0 @@
#!/bin/bash -ex
#
# Copyright (c) 2024 Scott Duensing, scott@kangaroopunch.com
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
PROJECT=helicopter
START=0x200
F256=../..
LLVM=${F256}/llvm-mos
SETTINGS=${LLVM}/mos-platform/f256k/lib/settings.ld
PATH=${LLVM}/bin:${PATH}
echo "__f256_start = ${START};" > ${SETTINGS}
CLANG="mos-f256k-clang -I${F256}/include -I${F256}/f256lib -O3"
${CLANG} -c ${F256}/f256lib/f256.c
${CLANG} -c ${PROJECT}.c
${CLANG} -o ${PROJECT} ${PROJECT}.o f256.o
mv -f ${PROJECT} ${PROJECT}.bin
${F256}/header \
pgz 24 \
${PROJECT}.pgz \
${START} \
${PROJECT}.bin ${START} \
generated/apache-left.sprite 0x10000 \
generated/apache-left-front.sprite 0x12800 \
generated/apache-right-front.sprite 0x15000 \
generated/apache-right.sprite 0x17800 \
generated/apache-left.clut 0x1a000
llvm-nm ${PROJECT}.elf > ${PROJECT}.sym
llvm-objdump -d --print-imm-hex ${PROJECT}.elf > ${PROJECT}.lst
hexdump -C ${PROJECT}.pgz > ${PROJECT}.hex

View file

@ -1,26 +0,0 @@
#!/bin/bash
#
# Copyright (c) 2024 Scott Duensing, scott@kangaroopunch.com
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
python ../../FoenixMgr/FoenixMgr/fnxmgr.py --run-pgz helicopter.pgz

View file

@ -1,55 +0,0 @@
#
# Copyright (c) 2024 Scott Duensing, scott@kangaroopunch.com
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
# This is only to make my IDE happy.
# We can't actually build with it until I get llvm-mos integrated into
# toolchains. -- SCD
cmake_minimum_required(VERSION 3.22)
set(CMAKE_C_STANDARD 17)
project(u5map)
set(DEFINES ${CMAKE_SOURCE_DIR}/../../include)
set(F256LIB ${CMAKE_SOURCE_DIR}/../../f256lib)
set(DATA_SOURCE
${F256LIB}/f256.h
${F256LIB}/f256.c
u5map.c
)
add_executable(${CMAKE_PROJECT_NAME}
${DATA_SOURCE}
makemap.c
)
target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC
${CMAKE_SOURCE_DIR}
${DEFINES}
${F256LIB}
)
#target_link_libraries(${CMAKE_PROJECT_NAME}
# -lm
#)

View file

@ -1,56 +0,0 @@
#!/bin/bash -ex
#
# Copyright (c) 2024 Scott Duensing, scott@kangaroopunch.com
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
PROJECT=u5map
START=0x200
F256=$(pwd)/../..
LLVM=${F256}/llvm-mos
SETTINGS=${LLVM}/mos-platform/f256k/lib/settings.ld
PATH=${LLVM}/bin:${PATH}
echo "__f256_start = ${START};" > ${SETTINGS}
CLANG="mos-f256k-clang -I${F256}/include -I${F256}/f256lib -O3"
${CLANG} -c ${F256}/f256lib/f256.c
${CLANG} -c ${PROJECT}.c
${CLANG} -o ${PROJECT} ${PROJECT}.o f256.o
mv -f ${PROJECT} ${PROJECT}.bin
${F256}/header \
pgz 24 \
${PROJECT}.pgz \
${START} \
${PROJECT}.bin ${START} \
brita.tiles 0x10000 \
under.tiles 0x30000 \
u5tiles.indexed 0x50000 \
u5tiles.clut 0x70000
#llvm-nm ${PROJECT}.elf > ${PROJECT}.lst
llvm-objdump -d --print-imm-hex ${PROJECT}.elf > ${PROJECT}.lst
hexdump -C ${PROJECT}.pgz > ${PROJECT}.hex

View file

@ -1,26 +0,0 @@
#!/bin/bash
#
# Copyright (c) 2024 Scott Duensing, scott@kangaroopunch.com
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
python ../../FoenixMgr/FoenixMgr/fnxmgr.py --run-pgz u5map.pgz