From 1a731649909c651f315fc7a3275d0281193a7572 Mon Sep 17 00:00:00 2001 From: JailDoctor Date: Wed, 8 Dec 2021 07:47:39 +0100 Subject: [PATCH] =?UTF-8?q?[CHANGE]=20Nou=20model=20de=20mem=C3=B2ria?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ascii.cpp | 48 +++++++++++++++++++++++++----------------------- font.c => rom.c | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 70 insertions(+), 25 deletions(-) rename font.c => rom.c (80%) diff --git a/ascii.cpp b/ascii.cpp index 9f49f78..1bd026d 100644 --- a/ascii.cpp +++ b/ascii.cpp @@ -2,13 +2,13 @@ #include #include #include "lua.h" -#include "font.c" +#include "rom.c" #define swap(a, b) {auto tmp=a;a=b;b=tmp;} char lua_filename[1024]; char window_title[256]; -uint8_t mem[2560]; //2400 +uint8_t mem[8192]; //2400 uint8_t *char_screen = NULL; uint8_t *color_screen = NULL; uint8_t screen_width = 40; @@ -24,6 +24,9 @@ uint32_t audio_len = 0; #define CHRSCR(x, y) char_screen[x+y*screen_width] #define COLSCR(x, y) color_screen[x+y*screen_width] +#define MEM_CHAR_OFFSET 2560 +#define MEM_BOOT_OFFSET 4608 + SDL_Window *mini_win; SDL_Renderer *mini_ren; SDL_Texture *mini_bak = NULL; @@ -104,6 +107,10 @@ void audioCallback(void * userdata, uint8_t * stream, int len) { uint8_t old_mode = 0; +void romcpy() { + SDL_memcpy(&mem[2560], rom, rom_size); +} + int main(int argc,char*argv[]) { SDL_strlcpy(lua_filename, "game.lua", 9); if (argc > 1) SDL_strlcpy(lua_filename, argv[1], 1023); @@ -122,7 +129,8 @@ int main(int argc,char*argv[]) { SDL_AudioSpec audioSpec = {44100, AUDIO_S8, 1, 0, 512, 0, 0, audioCallback, NULL}; mini_audio_device = SDL_OpenAudioDevice(NULL, 0, &audioSpec, NULL, 0); SDL_PauseAudioDevice(mini_audio_device, 0); - + + romcpy(); reinit(); debug("ASCII SYSTEM BOOTING..."); lua_init(lua_filename); @@ -192,7 +200,7 @@ int main(int argc,char*argv[]) { const uint32_t paper_color = palette[chr_color >> 4]; const uint8_t chr = CHRSCR(x,y); for (int l=0; l<8; ++l) { - const uint8_t line = font[chr*8+l]; + const uint8_t line = mem[MEM_CHAR_OFFSET+chr*8+l]; for (int b=0; b<8; ++b) { if ((line >> (7-b)) & 0x01) { pixels[b+(x*8)+((y*8)+l)*(screen_width*8)] = ink_color; @@ -213,7 +221,7 @@ int main(int argc,char*argv[]) { const uint32_t paper_color = palette[chr_color >> 4]; const uint8_t chr = CHRSCR(x,y); for (int l=0; l<8; ++l) { - const uint8_t line = font[chr*8+l]; + const uint8_t line = mem[MEM_CHAR_OFFSET+chr*8+l]; for (int b=0; b<8; ++b) { if ((line >> (7-b)) & 0x01) { pixels[b+(x*8)+((y*8)+l)*(screen_width*8)] = ink_color; @@ -443,30 +451,24 @@ const char* chr(uint8_t ascii) { } void setchar(uint8_t index, uint8_t b0, uint8_t b1, uint8_t b2, uint8_t b3, uint8_t b4, uint8_t b5, uint8_t b6, uint8_t b7) { - font[index*8] = b0; - font[index*8+1] = b1; - font[index*8+2] = b2; - font[index*8+3] = b3; - font[index*8+4] = b4; - font[index*8+5] = b5; - font[index*8+6] = b6; - font[index*8+7] = b7; + mem[MEM_CHAR_OFFSET+index*8] = b0; + mem[MEM_CHAR_OFFSET+index*8+1] = b1; + mem[MEM_CHAR_OFFSET+index*8+2] = b2; + mem[MEM_CHAR_OFFSET+index*8+3] = b3; + mem[MEM_CHAR_OFFSET+index*8+4] = b4; + mem[MEM_CHAR_OFFSET+index*8+5] = b5; + mem[MEM_CHAR_OFFSET+index*8+6] = b6; + mem[MEM_CHAR_OFFSET+index*8+7] = b7; } uint8_t peek(uint16_t addr) { - if (addr < 0xA00) { - return mem[addr]; - } else { - return font[addr-0xA00]; - } + if (addr >= 0x2000) return 0; + return mem[addr]; } void poke(uint16_t addr, uint8_t val) { - if (addr < 0xA00) { - mem[addr] = val; - } else { - font[addr-0xA00] = val; - } + if (addr >= 0x2000) return; + mem[addr] = val; } void memcpy(uint16_t dst, uint16_t src, uint16_t size) { diff --git a/font.c b/rom.c similarity index 80% rename from font.c rename to rom.c index a283f6a..ab19ec5 100644 --- a/font.c +++ b/rom.c @@ -1,6 +1,8 @@ #pragma once -unsigned char font[2048] = { +const int rom_size = 2528; + +unsigned char rom[rom_size] = { 0xFF, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xFF, 0xFF, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xFF, 0x0C, 0x18, 0x30, 0x7E, @@ -171,5 +173,46 @@ unsigned char font[2048] = { 0x90, 0x28, 0x24, 0x22, 0x38, 0x38, 0x90, 0x7C, 0x12, 0x28, 0x48, 0x88, 0x00, 0x3C, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x00, 0x3C, 0xFF, 0xFF, 0x18, 0x0C, 0x18, 0x30, 0x18, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x7E, 0x3C, 0x18, - 0x00, 0x24, 0x66, 0xFF, 0x66, 0x24, 0x00, 0x00 + 0x00, 0x24, 0x66, 0xFF, 0x66, 0x24, 0x00, 0x00, + // BOOT LOGO + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xD6, 0x8F, 0x8F, 0x8F, + 0x8F, 0xD4, 0xD6, 0x8F, 0x8F, 0x8F, 0x8F, 0xD4, 0xD6, 0x8F, 0x8F, 0x8F, + 0x8F, 0xD4, 0xD6, 0x8F, 0xD4, 0xD6, 0x8F, 0xD4, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0xD4, + 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0xD4, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, + 0xD4, 0x8F, 0x8F, 0xD4, 0x8F, 0x8F, 0x8F, 0x20, 0x20, 0x20, 0x8F, 0x8F, + 0xD4, 0x8F, 0x8F, 0x8F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x8F, 0x8F, 0xD4, 0x8F, + 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x20, + 0x20, 0x20, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0xD6, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0xD6, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, + 0x8F, 0x8F, 0xD4, 0x8F, 0x8F, 0xD4, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x8F, 0x8F, 0xD4, 0x8F, 0x8F, 0xD4, 0x8F, 0x8F, + 0x8F, 0x8F, 0x8F, 0xD4, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0xD4, 0x8F, 0x8F, + 0xD4, 0x8F, 0x8F, 0xD4, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x87, 0x07, 0x07, 0x07, 0x07, 0x07, 0x87, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x87, 0x01, 0x01, 0x91, 0x07, 0x07, 0x87, 0x0F, 0x0F, 0x0F, 0x0F, + 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, + 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x78, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x08, + 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x08, 0x8B, 0x8B, 0x89, 0x0F, 0x0F, 0x78, + 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, + 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x78, 0x0F, 0x0F, 0x78, 0x0F, 0x0F, + 0x78, 0x07, 0x07, 0x87, 0x0F, 0x0F, 0x78, 0x0F, 0x0F, 0x0F, 0x8B, 0x8B, + 0x89, 0x0F, 0x0F, 0x78, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, + 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x78, 0x0F, + 0x0F, 0x78, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x78, 0x0F, 0x0F, 0x78, 0x0F, + 0x0F, 0x0F, 0x0F, 0x0F, 0x78, 0x0F, 0x0F, 0x84, 0x0F, 0x0F, 0x0F, 0x0F, + 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, + 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x78, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x78, + 0x0F, 0x0F, 0x78, 0x07, 0x07, 0x87, 0x0F, 0x0F, 0x78, 0x0C, 0x0C, 0x84, + 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, + 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x08, 0x0F, 0x0F, 0x08, 0x0F, 0x0F, + 0x0F, 0x0F, 0x0F, 0x08, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x08, 0x0F, 0x0F, + 0x08, 0x0C, 0x0C, 0x04, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F };