commit 4e022826e6ec3f40d87106a6d00985cfcec5fe66 Author: Sylvain PILLOT Date: Tue Sep 6 13:03:33 2022 +0200 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2c4f84b --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +# Build files +/build-fx +/build-cg +/*.g1a +/*.g3a + +# Python bytecode + __pycache__/ + +# Common IDE files +*.sublime-project +*.sublime-workspace +.vscode diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..0866ce5 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,34 @@ +# Configure with [fxsdk build-fx] or [fxsdk build-cg], which provide the +# toolchain file and module path of the fxSDK + +cmake_minimum_required(VERSION 3.15) +project(MyAddin) + +include(GenerateG1A) +include(GenerateG3A) +include(Fxconv) +find_package(Gint 2.9 REQUIRED) + +set(SOURCES + src/main.c + # ... +) +# Shared assets, fx-9860G-only assets and fx-CG-50-only assets +set(ASSETS + # ... +) +set(ASSETS_cg + assets-cg/ConsoleFont.png + # ... +) + +fxconv_declare_assets(${ASSETS} ${ASSETS_cg} WITH_METADATA) + +add_executable(myaddin ${SOURCES} ${ASSETS} ${ASSETS_${FXSDK_PLATFORM}}) +target_compile_options(myaddin PRIVATE -Wall -Wextra -Os) +target_link_libraries(myaddin Gint::Gint) + +if("${FXSDK_PLATFORM_LONG}" STREQUAL fxCG50) + generate_g3a(TARGET myaddin OUTPUT "Console.g3a" + NAME "Console" ICONS assets-cg/icon-uns.png assets-cg/icon-sel.png) +endif() diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/assets-cg/ConsoleFont.png b/assets-cg/ConsoleFont.png new file mode 100644 index 0000000..504e810 Binary files /dev/null and b/assets-cg/ConsoleFont.png differ diff --git a/assets-cg/fxconv-metadata.txt b/assets-cg/fxconv-metadata.txt new file mode 100644 index 0000000..1fc0d11 --- /dev/null +++ b/assets-cg/fxconv-metadata.txt @@ -0,0 +1,9 @@ +ConsoleFont.png: + type: font + name: font88 + charset: 256chars + grid.size: 8x8 + grid.padding: 1 + proportional: true + height: 8 + diff --git a/assets-cg/icon-sel.png b/assets-cg/icon-sel.png new file mode 100644 index 0000000..7137b50 Binary files /dev/null and b/assets-cg/icon-sel.png differ diff --git a/assets-cg/icon-uns.png b/assets-cg/icon-uns.png new file mode 100644 index 0000000..3c99f62 Binary files /dev/null and b/assets-cg/icon-uns.png differ diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..efa3fcc --- /dev/null +++ b/src/main.c @@ -0,0 +1,136 @@ +#include +#include + +extern font_t font88; + +#define MAX_X_GLYPHS 49 +#define MAX_Y_GLYPHS 28 +#define MAX_LINE_HISTORY 100 + + +typedef struct +{ + char myChar; + char myColor; +} ConsoleGlyph; + +ConsoleGlyph myConsoleScreen[MAX_X_GLYPHS * (MAX_Y_GLYPHS + MAX_LINE_HISTORY)] = {0}; + +ConsoleGlyph *visibleScreen; +uint8_t CursorX = 0; +uint8_t CursorY = 0; +uint8_t ScrollLineValue = 0; + +void InitConsole( void ) +{ + visibleScreen = myConsoleScreen; +} + +void ScrollToLine( uint8_t targetLine ) +{ + if (targetLine < MAX_LINE_HISTORY ) + { + ScrollLineValue = targetLine; + visibleScreen = &myConsoleScreen[MAX_X_GLYPHS*targetLine]; + } +} + +void PrintChar( uint8_t X, uint8_t Y, char c, char color ) +{ + if(X=MAX_X_GLYPHS) + { + Xi -= MAX_X_GLYPHS; + Yi++; + } + + visibleScreen[MAX_X_GLYPHS*Yi+Xi].myChar = temp; + visibleScreen[MAX_X_GLYPHS*Yi+Xi].myColor = color; + + i++; + if(str[i]==0) break; + + Xi++; + + } + } +} + + +void RenderConsole( void ) +{ + uint16_t colorGint; + + ConsoleGlyph *tempGlyph; //= &visibleScreen[MAX_X_GLYPHS*y+x]; + + for(int y=0; ymyChar != 0x00) + { + if(tempGlyph->myColor == 0) colorGint = C_BLACK; + else if(tempGlyph->myColor == 1) colorGint = C_BLUE; + else if(tempGlyph->myColor == 2) colorGint = C_RED; + else if(tempGlyph->myColor == 3) colorGint = C_GREEN; + else if(tempGlyph->myColor == 4) colorGint = C_WHITE; + else colorGint = C_BLACK; + + dprint(2+x*8, y*8, colorGint, "%lc", tempGlyph->myChar ); + } + } + + dupdate(); +} + + +int main(void) +{ + dfont(&font88); + dclear(C_WHITE); + +/* + unsigned char temp = 0; + + for(int y=0; y