From 1a2fc959c6cf10900af311ef354c34a871a9bfbf Mon Sep 17 00:00:00 2001 From: Scott Duensing Date: Sat, 20 Jan 2024 19:48:23 -0600 Subject: [PATCH] Sprite example. --- .gitattributes | 2 + .gitignore | 1 + examples/cube-pre/cube-pre.c | 3 - examples/sprites/CMakeLists.txt | 52 ++++ examples/sprites/assets/apache-left-front.png | 3 + examples/sprites/assets/apache-left.png | 3 + .../sprites/assets/apache-right-front.png | 3 + examples/sprites/assets/apache-right.png | 3 + examples/sprites/assets/apache.png | 3 + examples/sprites/assets/apache.xcf | Bin 0 -> 33840 bytes examples/sprites/build.sh | 58 ++++ examples/sprites/foenixmgr.ini | 7 + examples/sprites/helicopter.c | 271 ++++++++++++++++++ examples/sprites/make-sprites.sh | 37 +++ examples/sprites/run.sh | 26 ++ f256lib/graphics.c | 2 +- f256lib/text.c | 16 +- f256lib/text.h | 1 + tools/imageconvert/imageconvert.c | 17 +- 19 files changed, 493 insertions(+), 15 deletions(-) create mode 100644 examples/sprites/CMakeLists.txt create mode 100644 examples/sprites/assets/apache-left-front.png create mode 100644 examples/sprites/assets/apache-left.png create mode 100644 examples/sprites/assets/apache-right-front.png create mode 100644 examples/sprites/assets/apache-right.png create mode 100644 examples/sprites/assets/apache.png create mode 100644 examples/sprites/assets/apache.xcf create mode 100755 examples/sprites/build.sh create mode 100644 examples/sprites/foenixmgr.ini create mode 100644 examples/sprites/helicopter.c create mode 100755 examples/sprites/make-sprites.sh create mode 100755 examples/sprites/run.sh diff --git a/.gitattributes b/.gitattributes index 83bffea..365ff3a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,4 @@ +*.xcf filter=lfs diff=lfs merge=lfs -text *.png filter=lfs diff=lfs merge=lfs -text *.jpg filter=lfs diff=lfs merge=lfs -text *.gif filter=lfs diff=lfs merge=lfs -text @@ -8,3 +9,4 @@ *.map filter=lfs diff=lfs merge=lfs -text *.clut filter=lfs diff=lfs merge=lfs -text *.indexed filter=lfs diff=lfs merge=lfs -text +*.sprite filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore index aba9957..e854154 100644 --- a/.gitignore +++ b/.gitignore @@ -40,6 +40,7 @@ intelFPGA_lite/ /header /imageconvert include/ +generated/ # Dumb QtCreator junk build-*/ diff --git a/examples/cube-pre/cube-pre.c b/examples/cube-pre/cube-pre.c index 43c08b0..3d12053 100644 --- a/examples/cube-pre/cube-pre.c +++ b/examples/cube-pre/cube-pre.c @@ -152,7 +152,6 @@ int main(void) { f256Init(); - textSetCursor(0); // No cursor. textSetColor(15, 0); // Clear two graphics pages. @@ -204,8 +203,6 @@ int main(void) { line[l][t].y2 = cubeProjY[edges[i + 1]]; l++; } - - kernelUpdate(); } textClear(); diff --git a/examples/sprites/CMakeLists.txt b/examples/sprites/CMakeLists.txt new file mode 100644 index 0000000..99ed457 --- /dev/null +++ b/examples/sprites/CMakeLists.txt @@ -0,0 +1,52 @@ +# +# 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} +) diff --git a/examples/sprites/assets/apache-left-front.png b/examples/sprites/assets/apache-left-front.png new file mode 100644 index 0000000..88e4305 --- /dev/null +++ b/examples/sprites/assets/apache-left-front.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e694d644504948a9061bb77d503196d9967f560315fd9d13b50ce046785f1f17 +size 2465 diff --git a/examples/sprites/assets/apache-left.png b/examples/sprites/assets/apache-left.png new file mode 100644 index 0000000..abaca97 --- /dev/null +++ b/examples/sprites/assets/apache-left.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:690b2ff880ddb4a5125580cf608bd2fe16b15f9d170a90cb63c7aac230208127 +size 3268 diff --git a/examples/sprites/assets/apache-right-front.png b/examples/sprites/assets/apache-right-front.png new file mode 100644 index 0000000..8de9184 --- /dev/null +++ b/examples/sprites/assets/apache-right-front.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5d8a2f016f76bd9449ff3cd1734d6e858fed8d1711f479e6c9bb4791cac9830 +size 2481 diff --git a/examples/sprites/assets/apache-right.png b/examples/sprites/assets/apache-right.png new file mode 100644 index 0000000..ed8ba58 --- /dev/null +++ b/examples/sprites/assets/apache-right.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8460052017311222adc0a618464f3e77b2f1cd3034278f7813894d874e1d1bd9 +size 3246 diff --git a/examples/sprites/assets/apache.png b/examples/sprites/assets/apache.png new file mode 100644 index 0000000..fc9c61c --- /dev/null +++ b/examples/sprites/assets/apache.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b00d366f8d29498153644c81b8b40033663c0883072333a42ff024310357640d +size 4329 diff --git a/examples/sprites/assets/apache.xcf b/examples/sprites/assets/apache.xcf new file mode 100644 index 0000000000000000000000000000000000000000..8844ea3ee578382db634086af0476eeab3c19a21 GIT binary patch literal 33840 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 LkeAsb!QcM@=AIgt literal 0 HcmV?d00001 diff --git a/examples/sprites/build.sh b/examples/sprites/build.sh new file mode 100755 index 0000000..b3e55e9 --- /dev/null +++ b/examples/sprites/build.sh @@ -0,0 +1,58 @@ +#!/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 diff --git a/examples/sprites/foenixmgr.ini b/examples/sprites/foenixmgr.ini new file mode 100644 index 0000000..c6ab319 --- /dev/null +++ b/examples/sprites/foenixmgr.ini @@ -0,0 +1,7 @@ +[DEFAULT] +port=/dev/ttyUSB1 +labels=sample.lbl +flash_address=380000 +chunk_size=1024 +cpu=65c02 +data_rate=6000000 \ No newline at end of file diff --git a/examples/sprites/helicopter.c b/examples/sprites/helicopter.c new file mode 100644 index 0000000..a33458b --- /dev/null +++ b/examples/sprites/helicopter.c @@ -0,0 +1,271 @@ +/* + * 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. + */ + + +#include "f256.h" + + +#define SPRITE_COUNT 4 +#define SPRITE_SIZE 32 +#define SPRITE_WIDTH 5 +#define SPRITE_HEIGHT 2 + +#define SPR_LEFT 0 +#define SPR_LEFT_ADDR 0x10000 + +#define SPR_LEFT_FRONT 1 +#define SPR_LEFT_FRONT_ADDR 0x12800 + +#define SPR_RIGHT_FRONT 2 +#define SPR_RIGHT_FRONT_ADDR 0x15000 + +#define SPR_RIGHT 3 +#define SPR_RIGHT_ADDR 0x17800 + +#define SPR_CLUT 0x1a000 +#define SPR_CLUT_COLORS 32 + +#define TURN_SPEED 25 + + +static byte sprites[SPRITE_COUNT] = { SPR_LEFT, SPR_LEFT_FRONT, SPR_RIGHT_FRONT, SPR_RIGHT }; +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 byte spriteIds[SPRITE_COUNT][SPRITE_WIDTH][SPRITE_HEIGHT]; +static byte anyJoy; + + +void drawHelicopter(void) { + static byte last = SPR_RIGHT; // Last frame used, can be anything other than "frame". + static byte frame = SPR_RIGHT_FRONT; + static byte lag = 0; + static uint16_t xSize = (SPRITE_WIDTH * SPRITE_SIZE); + static uint16_t ySize = (SPRITE_HEIGHT * SPRITE_SIZE); + static uint16_t xPos = 96; // (352 / 2) - (xSize / 2); + static uint16_t yPos = 104; // (272 / 2) - (ySize / 2); + byte i; + byte j; + + // New frame? + if (last != frame) { + for (j=0; j 32) yPos--; + } + + if (anyJoy & JOY_DOWN) { + if (yPos + ySize < 271) yPos++; + } + + if (anyJoy & JOY_LEFT) { + if (xPos > 32) xPos--; + if (frame > SPR_LEFT) { + if (lag == 0) { + lag = TURN_SPEED; + } else { + lag--; + if (lag == 0) frame--; + } + } + } + + if (anyJoy & JOY_RIGHT) { + if (xPos + xSize < 351) xPos++; + if (frame < SPR_RIGHT) { + if (lag == 0) { + lag = TURN_SPEED; + } else { + lag--; + if (lag == 0) frame++; + } + } + } + + // Update sprite positions. + for (j=0; j generated/${NAME}.sprite + + rm generated/*.indexed +} + + +makeSprite apache-left +makeSprite apache-left-front +makeSprite apache-right-front +makeSprite apache-right diff --git a/examples/sprites/run.sh b/examples/sprites/run.sh new file mode 100755 index 0000000..659d6a2 --- /dev/null +++ b/examples/sprites/run.sh @@ -0,0 +1,26 @@ +#!/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 diff --git a/f256lib/graphics.c b/f256lib/graphics.c index 4badb69..6f1c253 100644 --- a/f256lib/graphics.c +++ b/f256lib/graphics.c @@ -85,7 +85,7 @@ void graphicsSetLayerBitmap(byte layer, byte which) { POKE(VKY_LAYER_CTRL_0, (PEEK(VKY_LAYER_CTRL_0) & 0x0f) | (which << 4)); break; case 2: - POKE(VKY_LAYER_CTRL_1, which); + POKE(VKY_LAYER_CTRL_1, which); //***TODO*** This doesn't work? break; } } diff --git a/f256lib/text.c b/f256lib/text.c index 4466f35..3ca4904 100644 --- a/f256lib/text.c +++ b/f256lib/text.c @@ -167,14 +167,24 @@ void textPrint(char *message) { void textPrintInt(int32_t value){ - char c[2]; - if (value < 0) { textPrint("-"); value = -value; } + textPrintUInt(value); +} - if (value > 9) textPrintInt(mathUnsignedDivision(value, 10)); + +void textPrintUInt(uint32_t value){ + char c[2]; + + if (value > 9) { + if (value > 65535) { + textPrintUInt(value / 10); // Can't use the coprocessor for uint32. + } else { + textPrintUInt(mathUnsignedDivision(value, 10)); + } + } c[0] = '0' + (value % 10); c[1] = 0; diff --git a/f256lib/text.h b/f256lib/text.h index cf0ff5b..c1c119c 100644 --- a/f256lib/text.h +++ b/f256lib/text.h @@ -65,6 +65,7 @@ void textGetXY(byte *x, byte *y); void textGotoXY(byte x, byte y); void textPrint(char *message); void textPrintInt(int32_t value); +void textPrintUInt(uint32_t value); void textReset(void); void textSetColor(byte f, byte b); void textSetCursor(byte c); diff --git a/tools/imageconvert/imageconvert.c b/tools/imageconvert/imageconvert.c index a4647dc..a9e08bf 100644 --- a/tools/imageconvert/imageconvert.c +++ b/tools/imageconvert/imageconvert.c @@ -30,11 +30,11 @@ #include "../shared/util.h" -int writeImage(byte *data, colorT *palette, int colors, char *filename, int xs, int ys, int width, int height) { +int writeImage(byte *data, int imageWidth, colorT *palette, int colors, char *filename, int xs, int ys, int width, int height) { int x; int y; int n; - byte *p; + int a; colorT c; FILE *out; @@ -46,16 +46,17 @@ int writeImage(byte *data, colorT *palette, int colors, char *filename, int xs, } for (y=ys; y