[CHANGE] Nou model de memòria

This commit is contained in:
2021-12-08 07:47:39 +01:00
parent 290d50e32f
commit 1a73164990
2 changed files with 70 additions and 25 deletions

View File

@@ -2,13 +2,13 @@
#include <stdio.h>
#include <string.h>
#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) {