Working on bitmaps.
This commit is contained in:
parent
7f259eb824
commit
949258c1ab
23 changed files with 942 additions and 272 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -25,6 +25,8 @@ llvm-mos/
|
|||
llvm-mos-source/
|
||||
llvm-mos-sdk-source/
|
||||
FoenixMgr/
|
||||
FoenixIDE-source/
|
||||
FoenixIDE/
|
||||
depot_tools/
|
||||
skia/
|
||||
aseprite/
|
||||
|
|
21
LICENSE
Normal file
21
LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2023 Jason Andersen
|
||||
|
||||
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.
|
|
@ -1,5 +1,28 @@
|
|||
#!/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.
|
||||
#
|
||||
|
||||
|
||||
if [[ ! -d depot_tools ]]; then
|
||||
sudo apt-get install -y libgnutls28-dev libbz2-dev libharfbuzz-dev g++ cmake ninja-build libx11-dev libxcursor-dev libgl1-mesa-dev libfontconfig1-dev
|
||||
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
|
||||
|
|
|
@ -1,5 +1,28 @@
|
|||
#!/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.
|
||||
#
|
||||
|
||||
|
||||
pushd header
|
||||
cc header.c -o header -lm
|
||||
popd
|
||||
|
|
|
@ -1,5 +1,28 @@
|
|||
#!/bin/bash -e
|
||||
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
|
||||
INSTALL=$(pwd)/llvm-mos
|
||||
|
||||
if [[ "${1,,}" == "all" ]]; then
|
||||
|
|
|
@ -1,5 +1,28 @@
|
|||
#!/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.
|
||||
#
|
||||
|
||||
|
||||
PREFIX=$(pwd)/merlin32
|
||||
|
||||
if [[ ! -d merlin32-source ]]; then
|
||||
|
|
|
@ -1,5 +1,28 @@
|
|||
#!/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.
|
||||
#
|
||||
|
||||
|
||||
F256=$(pwd)/../..
|
||||
LLVM=${F256}/llvm-mos
|
||||
SETTINGS=${LLVM}/mos-platform/f256k/lib/settings.ld
|
||||
|
|
|
@ -1 +1,24 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
int main(void) { return 0; }
|
||||
|
|
|
@ -1,3 +1,26 @@
|
|||
#
|
||||
# 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
|
||||
|
@ -11,7 +34,6 @@ set(DEFINES ${CMAKE_SOURCE_DIR}/../../include)
|
|||
set(F256LIB ${CMAKE_SOURCE_DIR}/../../f256lib)
|
||||
|
||||
set(PGZTEST_SOURCE
|
||||
${F256LIB}/api.h
|
||||
${F256LIB}/f256.h
|
||||
${F256LIB}/f256.c
|
||||
pgztest.c
|
||||
|
|
|
@ -1,5 +1,28 @@
|
|||
#!/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.
|
||||
#
|
||||
|
||||
|
||||
F256=$(pwd)/../..
|
||||
LLVM=${F256}/llvm-mos
|
||||
SETTINGS=${LLVM}/mos-platform/f256k/lib/settings.ld
|
||||
|
@ -24,6 +47,6 @@ ${F256}/header/header \
|
|||
${START} \
|
||||
pgztest.bin ${START}
|
||||
|
||||
#llvm-nm pgztest.elf
|
||||
#llvm-objdump -d --print-imm-hex pgztest.elf
|
||||
#hexdump -C pgztest.pgz
|
||||
#llvm-nm pgztest.elf > pgztest.lst
|
||||
llvm-objdump -d --print-imm-hex pgztest.elf > pgztest.lst
|
||||
hexdump -C pgztest.pgz > pgztest.hex
|
||||
|
|
|
@ -1,10 +1,40 @@
|
|||
/*
|
||||
* 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"
|
||||
|
||||
|
||||
int main(void) {
|
||||
reset();
|
||||
f256Init();
|
||||
|
||||
/*
|
||||
resetText();
|
||||
print("F256 LIVES!\n");
|
||||
setTextColor(LIGHT_GREEN, BLACK);
|
||||
print("Green!");
|
||||
*/
|
||||
|
||||
resetGraphics();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,29 @@
|
|||
#!/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 --boot FLASH
|
||||
python ../../FoenixMgr/FoenixMgr/fnxmgr.py --run-pgz pgztest.pgz
|
||||
#python ../../FoenixMgr/FoenixMgr/fnxmgr.py --dump 2000 --count 200
|
||||
#python ../../FoenixMgr/FoenixMgr/fnxmgr.py --dump 10000 --count 10
|
||||
#python ../../FoenixMgr/FoenixMgr/fnxmgr.py --copy pgztest.pgz
|
||||
|
|
126
f256lib/bitmap.c
Normal file
126
f256lib/bitmap.c
Normal file
|
@ -0,0 +1,126 @@
|
|||
/*
|
||||
* 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 "bitmap.h"
|
||||
|
||||
|
||||
static int _MAX_X = 320;
|
||||
static int _MAX_Y = 200;
|
||||
static uint32_t _BITMAP_BASE = 0x10000;
|
||||
static byte _color = 255;
|
||||
|
||||
|
||||
char error;
|
||||
|
||||
|
||||
void clear(void) {
|
||||
int x;
|
||||
int y;
|
||||
|
||||
//***TODO*** Use DMA
|
||||
|
||||
// This is just test code.
|
||||
for (y=0; y<_MAX_Y; y++) {
|
||||
for (x=0; x<_MAX_X; x++) {
|
||||
putpixel(x, y);
|
||||
}
|
||||
_color++; // Let it roll over.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void defineGraphicsColor(byte slot, byte r, byte g, byte b) {
|
||||
byte mmu = PEEK(MMU_IO_CTRL); // Get current MMU state.
|
||||
byte *write;
|
||||
|
||||
POKE(MMU_IO_CTRL, MMU_IO_PAGE_1); // Swap I/O page 1 into bank 6.
|
||||
|
||||
write = (byte *)VKY_GR_CLUT_0 + slot * 4;
|
||||
*write++ = b;
|
||||
*write++ = g;
|
||||
*write++ = r;
|
||||
*write++ = 0xff;
|
||||
|
||||
POKE(MMU_IO_CTRL, mmu); // Restore MMU state.
|
||||
}
|
||||
|
||||
|
||||
void putpixel(int x, int y) {
|
||||
uint32_t pixelRAM;
|
||||
byte block;
|
||||
|
||||
// We only map 8k of the bitmap into CPU RAM at once.
|
||||
// We use slot 5 for this. We need to figure out
|
||||
// where our pixel lands and bring that into RAM.
|
||||
pixelRAM = _BITMAP_BASE + (y * _MAX_X) + x;
|
||||
block = pixelRAM / 0x2000;
|
||||
POKE(MMU_MEM_BANK_5, block);
|
||||
//pixelRAM -= 0x2000 * block; // Find offset into this block.
|
||||
pixelRAM &= 0x1FFF;
|
||||
POKE(0xa000 + pixelRAM, _color);
|
||||
POKE(MMU_MEM_BANK_5, 5);
|
||||
}
|
||||
|
||||
|
||||
void resetGraphics(void) {
|
||||
byte mmu = PEEK(MMU_IO_CTRL); // Get current MMU state.
|
||||
byte x;
|
||||
int y;
|
||||
|
||||
_MAX_X = 320;
|
||||
_MAX_Y = 200;
|
||||
_BITMAP_BASE = 0x10000;
|
||||
_color = 255;
|
||||
|
||||
POKE(MMU_IO_CTRL, MMU_IO_PAGE_0); // Swap I/O page 0 into bank 6.
|
||||
|
||||
POKE(VKY_LAYER_CTRL_0, 16); // Bitmaps on all layers.
|
||||
POKE(VKY_LAYER_CTRL_1, 1); // Bitmaps on all layers.
|
||||
POKE(VKY_BM1_CTRL, 0); // Disable bitmap 1.
|
||||
POKE(VKY_BM2_CTRL, 0); // Disable bitmap 2.
|
||||
|
||||
// Set up bitmap 0.
|
||||
POKE(VKY_BM0_CTRL, 1); // Enable bitmap 0, GLUT 0.
|
||||
//POKED(VKY_BM0_ADDR_L, _BITMAP_BASE); // Location of bitmap data.
|
||||
POKE(VKY_BM0_ADDR_L, _BITMAP_BASE & 0xFF); // Location of bitmap data.
|
||||
POKE(VKY_BM0_ADDR_M, (_BITMAP_BASE >> 8) & 0xFF); // Location of bitmap data.
|
||||
POKE(VKY_BM0_ADDR_H, (_BITMAP_BASE >> 16) & 0xFF); // Location of bitmap data.
|
||||
|
||||
// Set palette to a gradient so there's at least *something*.
|
||||
for (x=0; x<=255; x++) defineGraphicsColor(x, x, x, x);
|
||||
|
||||
clear();
|
||||
|
||||
/*
|
||||
POKE(MMU_MEM_BANK_5, 8);
|
||||
for (y=0; y<8192; y++) POKE(0xa000 + y, 255);
|
||||
POKE(MMU_MEM_BANK_5, 5);
|
||||
*/
|
||||
|
||||
POKE(MMU_IO_CTRL, mmu); // Restore MMU state.
|
||||
}
|
||||
|
||||
|
||||
void setGraphicsColor(byte c) {
|
||||
_color = c;
|
||||
}
|
49
f256lib/bitmap.h
Normal file
49
f256lib/bitmap.h
Normal file
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef BITMAP_H
|
||||
#define BITMAP_H
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
|
||||
#include "f256.h"
|
||||
|
||||
|
||||
void clear(void);
|
||||
void defineGraphicsColor(byte slot, byte r, byte g, byte b);
|
||||
void putpixel(int x, int y);
|
||||
void resetGraphics(void);
|
||||
void setGraphicsColor(byte c);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif // BITMAP_H
|
226
f256lib/f256.c
226
f256lib/f256.c
|
@ -1,198 +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.
|
||||
*/
|
||||
|
||||
|
||||
#include "f256.h"
|
||||
|
||||
|
||||
char error;
|
||||
|
||||
colorT textColors[16] = {
|
||||
{ 0x00, 0x00, 0x00 }, // 0 Black
|
||||
{ 0xdd, 0x00, 0x33 }, // 1 Deep Red
|
||||
{ 0x00, 0x00, 0x99 }, // 2 Dark Blue
|
||||
{ 0xdd, 0x22, 0xdd }, // 3 Purple
|
||||
{ 0x00, 0x77, 0x22 }, // 4 Dark Green
|
||||
{ 0x55, 0x55, 0x55 }, // 5 Dark Gray
|
||||
{ 0x22, 0x22, 0xff }, // 6 Medium Blue
|
||||
{ 0x66, 0xaa, 0xff }, // 7 Light Blue
|
||||
{ 0x88, 0x55, 0x00 }, // 8 Brown
|
||||
{ 0xff, 0x66, 0x00 }, // 9 Orange
|
||||
{ 0xaa, 0xaa, 0xaa }, // A Light Gray
|
||||
{ 0xff, 0x99, 0x88 }, // B Pink
|
||||
{ 0x00, 0xdd, 0x00 }, // C Light Green
|
||||
{ 0xff, 0xff, 0x00 }, // D Yellow
|
||||
{ 0x55, 0xff, 0x99 }, // E Aquamarine
|
||||
{ 0xff, 0xff, 0xff } // F White
|
||||
};
|
||||
#include "text.c"
|
||||
#include "bitmap.c"
|
||||
|
||||
|
||||
static byte _MAX_COL = 80;
|
||||
static byte _MAX_ROW = 60;
|
||||
static byte _row = 0;
|
||||
static byte _col = 0;
|
||||
static byte _fcolor = 15;
|
||||
static byte _bcolor = 0;
|
||||
static byte _ccolor = 240;
|
||||
|
||||
|
||||
// Clear screen to current text attributes.
|
||||
void cls(void) {
|
||||
int i;
|
||||
byte *vram = (byte *)TEXT_MATRIX;
|
||||
void f256Init(void) {
|
||||
byte mmu = PEEK(MMU_IO_CTRL); // Get current MMU state.
|
||||
|
||||
POKE(MMU_IO_CTRL, MMU_IO_TEXT); // Swap I/O page 2 into bank 6.
|
||||
for (i = 0; i < _MAX_COL * _MAX_ROW; i++) *vram++ = 32;
|
||||
|
||||
POKE(MMU_IO_CTRL, MMU_IO_COLOR); // Swap I/O page 3 into bank 6.
|
||||
vram = (byte *)TEXT_MATRIX;
|
||||
for (i = 0; i < _MAX_COL * _MAX_ROW; i++) *vram++ = _ccolor;
|
||||
|
||||
POKE(MMU_IO_CTRL, mmu); // Restore MMU state.
|
||||
|
||||
gotoxy(0, 0);
|
||||
}
|
||||
|
||||
|
||||
// Define text color.
|
||||
void defineTextColor(byte slot, byte fr, byte fg, byte fb, byte br, byte bg, byte bb) {
|
||||
byte mmu;
|
||||
byte *write;
|
||||
|
||||
mmu = PEEK(MMU_IO_CTRL); // Get current MMU state.
|
||||
POKE(MMU_IO_CTRL, MMU_IO_PAGE_0); // Swap I/O page 0 into bank 6.
|
||||
|
||||
write = (byte *)VKY_TXT_FGLUT + slot * 4;
|
||||
*write++ = fb;
|
||||
*write++ = fg;
|
||||
*write++ = fr;
|
||||
*write++ = 0xff;
|
||||
|
||||
write = (byte *)VKY_TXT_BGLUT + slot * 4;
|
||||
*write++ = bb;
|
||||
*write++ = bg;
|
||||
*write++ = br;
|
||||
*write++ = 0xff;
|
||||
|
||||
POKE(MMU_IO_CTRL, mmu); // Restore MMU state.
|
||||
}
|
||||
|
||||
|
||||
// Move cursor.
|
||||
void gotoxy(byte x, byte y) {
|
||||
byte mmu;
|
||||
|
||||
mmu = PEEK(MMU_IO_CTRL); // Get current MMU state.
|
||||
POKE(MMU_IO_CTRL, MMU_IO_PAGE_0); // Swap I/O page 0 into bank 6.
|
||||
|
||||
_col = x;
|
||||
POKE(VKY_CRSR_X_L, _col); // Set cursor X position.
|
||||
POKE(VKY_CRSR_X_H, 0);
|
||||
|
||||
_row = y;
|
||||
POKE(VKY_CRSR_Y_L, _row); // Set cursor Y position.
|
||||
POKE(VKY_CRSR_Y_H, 0);
|
||||
|
||||
POKE(MMU_IO_CTRL, mmu); // Restore MMU state.
|
||||
}
|
||||
|
||||
|
||||
// Print a string to the screen.
|
||||
void print(char *message) {
|
||||
int x = 0;
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
byte *vram = (byte *)TEXT_MATRIX + _col + (_MAX_COL * _row);
|
||||
byte *save = 0;
|
||||
byte mmu = PEEK(MMU_IO_CTRL); // Get current MMU state.
|
||||
|
||||
while (message[x] != 0) {
|
||||
switch (message[x]) {
|
||||
default:
|
||||
POKE(MMU_IO_CTRL, MMU_IO_COLOR); // Swap I/O page 3 into bank 6.
|
||||
vram[_col] = _ccolor;
|
||||
POKE(MMU_IO_CTRL, MMU_IO_TEXT); // Swap I/O page 2 into bank 6.
|
||||
vram[_col] = message[x];
|
||||
_col++;
|
||||
if (_col != _MAX_COL) break;
|
||||
// Fall through.
|
||||
case 10:
|
||||
case 13:
|
||||
_col = 0;
|
||||
_row++;
|
||||
if (_row == _MAX_ROW) {
|
||||
// Scroll contents up one line.
|
||||
vram = (byte *)TEXT_MATRIX;
|
||||
POKE(MMU_IO_CTRL, MMU_IO_COLOR); // Swap I/O page 3 into bank 6.
|
||||
for (j=0; j<2; j++) {
|
||||
for (i = 0; i < _MAX_COL * (_MAX_ROW - 1); i++) vram[i] = vram[i+_MAX_COL];
|
||||
POKE(MMU_IO_CTRL, MMU_IO_TEXT); // Swap I/O page 2 into bank 6.
|
||||
}
|
||||
// Clear bottom line.
|
||||
vram += i;
|
||||
save = vram;
|
||||
POKE(MMU_IO_CTRL, MMU_IO_COLOR); // Swap I/O page 3 into bank 6.
|
||||
for (i = 0; i < _MAX_COL; i++) *vram++ = _ccolor;
|
||||
POKE(MMU_IO_CTRL, MMU_IO_TEXT); // Swap I/O page 2 into bank 6.
|
||||
vram = save;
|
||||
for (i = 0; i < _MAX_COL; i++) *vram++ = 32;
|
||||
// Set up on bottom line.
|
||||
_row--;
|
||||
vram = (byte *)TEXT_MATRIX + _MAX_COL * (_MAX_ROW - 2) + 1;
|
||||
break;
|
||||
}
|
||||
vram += _MAX_COL;
|
||||
break;
|
||||
}
|
||||
x++;
|
||||
}
|
||||
POKE(VKY_MSTR_CTRL_0, 12); // Enable bitmaps.
|
||||
//POKE(VKY_MSTR_CTRL_0, 15); // Enable text and bitmaps.
|
||||
//POKE(VKY_MSTR_CTRL_0, 63); // Enable text and all graphics.
|
||||
POKE(VKY_MSTR_CTRL_1, 16); // Enable FON_OVLY.
|
||||
|
||||
POKE(MMU_IO_CTRL, mmu); // Restore MMU state.
|
||||
|
||||
gotoxy(_col, _row);
|
||||
}
|
||||
|
||||
|
||||
// Reset display to text, "standard" colors.
|
||||
void reset(void) {
|
||||
byte mmu;
|
||||
byte x;
|
||||
byte y;
|
||||
|
||||
mmu = PEEK(MMU_IO_CTRL); // Get current MMU state.
|
||||
POKE(MMU_IO_CTRL, MMU_IO_TEXT); // Swap I/O page 2 into bank 6.
|
||||
|
||||
// If we set 0xD000 to 0x01 and 0xD001 to 0x00, that will put us into text mode at 80 × 60.
|
||||
POKE(VKY_MSTR_CTRL_0, 1);
|
||||
POKE(VKY_MSTR_CTRL_1, 0);
|
||||
|
||||
_MAX_COL = 80;
|
||||
_MAX_ROW = 60;
|
||||
|
||||
_fcolor = 15;
|
||||
_bcolor = 0;
|
||||
_ccolor = 240;
|
||||
|
||||
POKE(MMU_IO_CTRL, MMU_IO_PAGE_0); // Swap I/O page 0 into bank 6.
|
||||
|
||||
POKE(VKY_CRSR_CTRL, 3); // Enable cursor, 1/2s flash.
|
||||
POKE(VKY_CRSR_CHAR, '_'); // Set cursor shape. (199 = Checkerboard)
|
||||
|
||||
// Set up default text colors.
|
||||
for (x=0; x<TEXTCOLORS_COUNT; x++)
|
||||
defineTextColor(x,
|
||||
textColors[x].r,
|
||||
textColors[x].g,
|
||||
textColors[x].b,
|
||||
textColors[x].r,
|
||||
textColors[x].g,
|
||||
textColors[x].b);
|
||||
|
||||
POKE(MMU_IO_CTRL, mmu); // Restore MMU state.
|
||||
|
||||
cls();
|
||||
}
|
||||
|
||||
|
||||
void setTextColor(byte f, byte b) {
|
||||
_fcolor = f;
|
||||
_bcolor = b;
|
||||
_ccolor = (f << 4) + b;
|
||||
POKE(MMU_MEM_CTRL, 0xb3); // MLUT editing enabled, editing 3, 3 is active.
|
||||
// Set all memory slots to be CPU memory.
|
||||
POKE(MMU_MEM_BANK_0, 0);
|
||||
POKE(MMU_MEM_BANK_1, 1);
|
||||
POKE(MMU_MEM_BANK_2, 2);
|
||||
POKE(MMU_MEM_BANK_3, 3);
|
||||
POKE(MMU_MEM_BANK_4, 4);
|
||||
POKE(MMU_MEM_BANK_5, 5);
|
||||
// MMU_MEM_BANK_6 is always mapped to I/O.
|
||||
// MMU_MEM_BANK_7 belongs to the MicroKernel.
|
||||
}
|
||||
|
|
|
@ -1,3 +1,26 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef F256_H
|
||||
#define F256_H
|
||||
|
||||
|
@ -12,6 +35,7 @@ extern "C"
|
|||
#include "stddclmr.h"
|
||||
|
||||
#include "api.h"
|
||||
|
||||
#include "f256_dma.h"
|
||||
#include "f256_intmath.h"
|
||||
#include "f256_irq.h"
|
||||
|
@ -23,43 +47,20 @@ extern "C"
|
|||
#include "f256_via.h"
|
||||
#include "f256_xymath.h"
|
||||
|
||||
/*
|
||||
#define MMU_MEM_CTRL 0x0000
|
||||
#define MMU_IO_CTRL 0x0001
|
||||
|
||||
#define VICKY_MASTER_0 0xd000
|
||||
#define VICKY_MASTER_1 0xd001
|
||||
#define VICKY_GR_CLUT_0 0xd000 // I/O Page 1
|
||||
#define VICKY_GR_CLUT_1 0xd400 // I/O Page 1
|
||||
#define VICKY_GR_CLUT_2 0xd800 // I/O Page 1
|
||||
#define VICKY_GR_CLUT_3 0xdc00 // I/O Page 1
|
||||
*/
|
||||
|
||||
|
||||
typedef unsigned char byte;
|
||||
|
||||
#define TEXT_MATRIX 0xc000 // I/O Page 2
|
||||
/*
|
||||
#define TEXT_COLOR_MATRIX 0xc000 // I/O Page 3
|
||||
#define TEXT_LUT_FOREGROUND 0xd800 // I/O Page 0
|
||||
#define TEXT_LUT_BACKGROUND 0xd840 // I/O Page 0
|
||||
#define TEXT_FONT_0 0xc000 // I/O Page 1
|
||||
#define TEXT_FONT_1 0xc800 // I/O Page 1
|
||||
|
||||
#define CURSOR_SETTINGS 0xd010
|
||||
#define CURSOR_CHARACTER 0xd012
|
||||
#define CURSOR_X_LOW 0xd014
|
||||
#define CURSOR_X_HIGH 0xd015
|
||||
#define CURSOR_Y_LOW 0xd016
|
||||
#define CURSOR_Y_HIGH 0xd017
|
||||
*/
|
||||
|
||||
#define PEEK(addy) ((byte)*(volatile byte *)(addy))
|
||||
#define POKE(addy, value) (*(volatile byte *)(addy) = (value))
|
||||
#define PEEKW(addy) ((uint_16)*(volatile uint16_t *)(addy))
|
||||
#define POKEW(addy,value) (*(volatile uint16_t *)(addy) = (value))
|
||||
#define PEEKD(addy) ((uint_32)*(volatile uint32_t *)(addy))
|
||||
#define POKED(addy,value) (*(volatile uint32_t *)(addy) = (value))
|
||||
#define VECTOR(member) (size_t)(&((struct call *)0xff00)->member)
|
||||
#define EVENT(member) (size_t)(&((struct events *)0)->member)
|
||||
#define CALL(fn) \
|
||||
asm("jsr %[addy] \n" \
|
||||
asm("jsr %[addy] \n" \
|
||||
"stz %[err] \n" \
|
||||
"ror %[err]" \
|
||||
: [err] "+m"(error) \
|
||||
|
@ -67,47 +68,15 @@ typedef unsigned char byte;
|
|||
: "a", "x", "y", "c", "v");
|
||||
|
||||
|
||||
|
||||
extern struct event_t event; // The event struct is allocated in crt0.
|
||||
extern char error;
|
||||
|
||||
|
||||
// Apple IIgs Colors, because that's how we roll.
|
||||
typedef enum textColorsE {
|
||||
BLACK = 0,
|
||||
DEEP_RED,
|
||||
DARK_BLUE,
|
||||
PURPLE,
|
||||
DARK_GREEN,
|
||||
DARK_GRAY,
|
||||
MEDIUM_BLUE,
|
||||
LIGHT_BLUE,
|
||||
BROWN,
|
||||
ORANGE,
|
||||
LIGHT_GRAY,
|
||||
PINK,
|
||||
LIGHT_GREEN,
|
||||
YELLOW,
|
||||
AQUAMARINE,
|
||||
WHITE,
|
||||
TEXTCOLORS_COUNT
|
||||
} textColorsT;
|
||||
|
||||
typedef struct colorS {
|
||||
byte r;
|
||||
byte g;
|
||||
byte b;
|
||||
} colorT;
|
||||
|
||||
extern colorT textColors[16];
|
||||
void f256Init(void);
|
||||
|
||||
|
||||
void cls(void);
|
||||
void defineTextColor(byte slot, byte fr, byte fg, byte fb, byte br, byte bg, byte bb);
|
||||
void gotoxy(byte x, byte y);
|
||||
void print(char *message);
|
||||
void reset(void);
|
||||
void setTextColor(byte f, byte b);
|
||||
#include "text.h"
|
||||
#include "bitmap.h"
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
214
f256lib/text.c
Normal file
214
f256lib/text.c
Normal file
|
@ -0,0 +1,214 @@
|
|||
/*
|
||||
* 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 "text.h"
|
||||
|
||||
|
||||
char error;
|
||||
|
||||
|
||||
colorT textColors[16] = {
|
||||
{ 0x00, 0x00, 0x00 }, // 0 Black
|
||||
{ 0xdd, 0x00, 0x33 }, // 1 Deep Red
|
||||
{ 0x00, 0x00, 0x99 }, // 2 Dark Blue
|
||||
{ 0xdd, 0x22, 0xdd }, // 3 Purple
|
||||
{ 0x00, 0x77, 0x22 }, // 4 Dark Green
|
||||
{ 0x55, 0x55, 0x55 }, // 5 Dark Gray
|
||||
{ 0x22, 0x22, 0xff }, // 6 Medium Blue
|
||||
{ 0x66, 0xaa, 0xff }, // 7 Light Blue
|
||||
{ 0x88, 0x55, 0x00 }, // 8 Brown
|
||||
{ 0xff, 0x66, 0x00 }, // 9 Orange
|
||||
{ 0xaa, 0xaa, 0xaa }, // A Light Gray
|
||||
{ 0xff, 0x99, 0x88 }, // B Pink
|
||||
{ 0x00, 0xdd, 0x00 }, // C Light Green
|
||||
{ 0xff, 0xff, 0x00 }, // D Yellow
|
||||
{ 0x55, 0xff, 0x99 }, // E Aquamarine
|
||||
{ 0xff, 0xff, 0xff } // F White
|
||||
};
|
||||
|
||||
|
||||
static byte _MAX_COL = 80;
|
||||
static byte _MAX_ROW = 60;
|
||||
static byte _row = 0;
|
||||
static byte _col = 0;
|
||||
static byte _fcolor = 15;
|
||||
static byte _bcolor = 0;
|
||||
static byte _ccolor = 240;
|
||||
|
||||
|
||||
// Clear screen to current text attributes.
|
||||
void cls(void) {
|
||||
int i;
|
||||
byte *vram = (byte *)TEXT_MATRIX;
|
||||
byte mmu = PEEK(MMU_IO_CTRL); // Get current MMU state.
|
||||
|
||||
POKE(MMU_IO_CTRL, MMU_IO_TEXT); // Swap I/O page 2 into bank 6.
|
||||
for (i = 0; i < _MAX_COL * _MAX_ROW; i++) *vram++ = 32;
|
||||
|
||||
POKE(MMU_IO_CTRL, MMU_IO_COLOR); // Swap I/O page 3 into bank 6.
|
||||
vram = (byte *)TEXT_MATRIX;
|
||||
for (i = 0; i < _MAX_COL * _MAX_ROW; i++) *vram++ = _ccolor;
|
||||
|
||||
POKE(MMU_IO_CTRL, mmu); // Restore MMU state.
|
||||
|
||||
gotoxy(0, 0);
|
||||
}
|
||||
|
||||
|
||||
// Define text color.
|
||||
void defineTextColor(byte slot, byte fr, byte fg, byte fb, byte br, byte bg, byte bb) {
|
||||
byte mmu = PEEK(MMU_IO_CTRL); // Get current MMU state.
|
||||
byte *write;
|
||||
|
||||
POKE(MMU_IO_CTRL, MMU_IO_PAGE_0); // Swap I/O page 0 into bank 6.
|
||||
|
||||
write = (byte *)VKY_TXT_FGLUT + slot * 4;
|
||||
*write++ = fb;
|
||||
*write++ = fg;
|
||||
*write++ = fr;
|
||||
*write++ = 0xff;
|
||||
|
||||
write = (byte *)VKY_TXT_BGLUT + slot * 4;
|
||||
*write++ = bb;
|
||||
*write++ = bg;
|
||||
*write++ = br;
|
||||
*write++ = 0xff;
|
||||
|
||||
POKE(MMU_IO_CTRL, mmu); // Restore MMU state.
|
||||
}
|
||||
|
||||
|
||||
// Move cursor.
|
||||
void gotoxy(byte x, byte y) {
|
||||
byte mmu;
|
||||
|
||||
mmu = PEEK(MMU_IO_CTRL); // Get current MMU state.
|
||||
POKE(MMU_IO_CTRL, MMU_IO_PAGE_0); // Swap I/O page 0 into bank 6.
|
||||
|
||||
_col = x;
|
||||
POKE(VKY_CRSR_X_L, _col); // Set cursor X position.
|
||||
POKE(VKY_CRSR_X_H, 0);
|
||||
|
||||
_row = y;
|
||||
POKE(VKY_CRSR_Y_L, _row); // Set cursor Y position.
|
||||
POKE(VKY_CRSR_Y_H, 0);
|
||||
|
||||
POKE(MMU_IO_CTRL, mmu); // Restore MMU state.
|
||||
}
|
||||
|
||||
|
||||
// Print a string to the screen.
|
||||
void print(char *message) {
|
||||
int x = 0;
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
byte *vram = (byte *)TEXT_MATRIX + _col + (_MAX_COL * _row);
|
||||
byte *save = 0;
|
||||
byte mmu = PEEK(MMU_IO_CTRL); // Get current MMU state.
|
||||
|
||||
while (message[x] != 0) {
|
||||
switch (message[x]) {
|
||||
default:
|
||||
POKE(MMU_IO_CTRL, MMU_IO_COLOR); // Swap I/O page 3 into bank 6.
|
||||
vram[_col] = _ccolor;
|
||||
POKE(MMU_IO_CTRL, MMU_IO_TEXT); // Swap I/O page 2 into bank 6.
|
||||
vram[_col] = message[x];
|
||||
_col++;
|
||||
if (_col != _MAX_COL) break;
|
||||
// Fall through.
|
||||
case 10:
|
||||
case 13:
|
||||
_col = 0;
|
||||
_row++;
|
||||
if (_row == _MAX_ROW) {
|
||||
// Scroll contents up one line.
|
||||
vram = (byte *)TEXT_MATRIX;
|
||||
POKE(MMU_IO_CTRL, MMU_IO_COLOR); // Swap I/O page 3 into bank 6.
|
||||
for (j=0; j<2; j++) {
|
||||
for (i = 0; i < _MAX_COL * (_MAX_ROW - 1); i++) vram[i] = vram[i+_MAX_COL];
|
||||
POKE(MMU_IO_CTRL, MMU_IO_TEXT); // Swap I/O page 2 into bank 6.
|
||||
}
|
||||
// Clear bottom line.
|
||||
vram += i;
|
||||
save = vram;
|
||||
POKE(MMU_IO_CTRL, MMU_IO_COLOR); // Swap I/O page 3 into bank 6.
|
||||
for (i = 0; i < _MAX_COL; i++) *vram++ = _ccolor;
|
||||
POKE(MMU_IO_CTRL, MMU_IO_TEXT); // Swap I/O page 2 into bank 6.
|
||||
vram = save;
|
||||
for (i = 0; i < _MAX_COL; i++) *vram++ = 32;
|
||||
// Set up on bottom line.
|
||||
_row--;
|
||||
vram = (byte *)TEXT_MATRIX + _MAX_COL * (_MAX_ROW - 2) + 1;
|
||||
break;
|
||||
}
|
||||
vram += _MAX_COL;
|
||||
break;
|
||||
}
|
||||
x++;
|
||||
}
|
||||
|
||||
POKE(MMU_IO_CTRL, mmu); // Restore MMU state.
|
||||
|
||||
gotoxy(_col, _row);
|
||||
}
|
||||
|
||||
|
||||
// Reset display to text, "standard" colors.
|
||||
void resetText(void) {
|
||||
byte mmu = PEEK(MMU_IO_CTRL); // Get current MMU state.
|
||||
byte x;
|
||||
byte y;
|
||||
|
||||
_MAX_COL = 80;
|
||||
_MAX_ROW = 60;
|
||||
|
||||
_fcolor = 15;
|
||||
_bcolor = 0;
|
||||
_ccolor = 240;
|
||||
|
||||
POKE(MMU_IO_CTRL, MMU_IO_PAGE_0); // Swap I/O page 0 into bank 6.
|
||||
|
||||
POKE(VKY_CRSR_CTRL, 3); // Enable cursor, 1/2s flash.
|
||||
POKE(VKY_CRSR_CHAR, '_'); // Set cursor shape. (199 = Checkerboard)
|
||||
|
||||
// Set up default text colors.
|
||||
for (x=0; x<TEXTCOLORS_COUNT; x++)
|
||||
defineTextColor(x,
|
||||
textColors[x].r,
|
||||
textColors[x].g,
|
||||
textColors[x].b,
|
||||
textColors[x].r,
|
||||
textColors[x].g,
|
||||
textColors[x].b);
|
||||
|
||||
POKE(MMU_IO_CTRL, mmu); // Restore MMU state.
|
||||
|
||||
cls();
|
||||
}
|
||||
|
||||
|
||||
void setTextColor(byte f, byte b) {
|
||||
_fcolor = f;
|
||||
_bcolor = b;
|
||||
_ccolor = (f << 4) + b;
|
||||
}
|
83
f256lib/text.h
Normal file
83
f256lib/text.h
Normal file
|
@ -0,0 +1,83 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef TEXT_H
|
||||
#define TEXT_H
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
|
||||
#include "f256.h"
|
||||
|
||||
|
||||
#define TEXT_MATRIX 0xc000 // I/O Page 2
|
||||
|
||||
|
||||
// Apple IIgs Colors, because that's how we roll.
|
||||
typedef enum textColorsE {
|
||||
BLACK = 0,
|
||||
DEEP_RED,
|
||||
DARK_BLUE,
|
||||
PURPLE,
|
||||
DARK_GREEN,
|
||||
DARK_GRAY,
|
||||
MEDIUM_BLUE,
|
||||
LIGHT_BLUE,
|
||||
BROWN,
|
||||
ORANGE,
|
||||
LIGHT_GRAY,
|
||||
PINK,
|
||||
LIGHT_GREEN,
|
||||
YELLOW,
|
||||
AQUAMARINE,
|
||||
WHITE,
|
||||
TEXTCOLORS_COUNT
|
||||
} textColorsT;
|
||||
|
||||
typedef struct colorS {
|
||||
byte r;
|
||||
byte g;
|
||||
byte b;
|
||||
} colorT;
|
||||
|
||||
extern colorT textColors[16];
|
||||
|
||||
|
||||
void cls(void);
|
||||
void defineTextColor(byte slot, byte fr, byte fg, byte fb, byte br, byte bg, byte bb);
|
||||
void gotoxy(byte x, byte y);
|
||||
void print(char *message);
|
||||
void resetText(void);
|
||||
void setTextColor(byte f, byte b);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif // TEXT_H
|
|
@ -1,5 +1,28 @@
|
|||
#!/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.
|
||||
#
|
||||
|
||||
|
||||
if [[ ! -d FoenixMgr ]]; then
|
||||
sudo apt-get install -y pip
|
||||
git clone https://github.com/pweingar/FoenixMgr.git
|
||||
|
|
|
@ -1,3 +1,26 @@
|
|||
/*
|
||||
* 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 <arpa/inet.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
|
|
|
@ -1,5 +1,28 @@
|
|||
#!/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.
|
||||
#
|
||||
|
||||
|
||||
BIN=$(pwd)/intelFPGA_lite/23.1std/quartus/bin
|
||||
|
||||
${BIN}/jtagconfig
|
||||
|
|
|
@ -1,5 +1,28 @@
|
|||
#!/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.
|
||||
#
|
||||
|
||||
|
||||
INC=$(pwd)/include
|
||||
mkdir -p ${INC}
|
||||
|
||||
|
|
|
@ -1,5 +1,28 @@
|
|||
#!/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.
|
||||
#
|
||||
|
||||
|
||||
if [[ ! -d f256-firmware ]]; then
|
||||
git clone https://github.com/FoenixRetro/f256-firmware.git
|
||||
else
|
||||
|
|
Loading…
Add table
Reference in a new issue