/* * 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" #include "math.h" 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 = 30; 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 textClear(void) { byte mmu = PEEK(MMU_IO_CTRL); // Get current MMU state. int16_t i; int16_t count = mathUnsignedMultiply(_MAX_COL, _MAX_ROW); volatile byte *vram = (byte *)TEXT_MATRIX; POKE(MMU_IO_CTRL, MMU_IO_TEXT); // Swap I/O page 2 into bank 6. for (i=0; i 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; textPrint(c); } void textReset(void) { byte x; byte y; _fcolor = 15; _bcolor = 0; _ccolor = 240; // Make font taller for us blind people. textSetDouble(false, true); // No cursor by default. textSetCursor(0); // Set up default text colors. for (x=0; x