From 3fd28136f6f78f14761cc5eaa729fd34806ca35e Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Tue, 22 Jul 2025 13:31:21 +0200 Subject: [PATCH] =?UTF-8?q?-=20[NEW]=20ui::placetext()=20i=20ui::placechar?= =?UTF-8?q?,=20pa=20ficar=20text=20en=20qualsevol=20pixel=20-=20[NEW]=20[Z?= =?UTF-8?q?80Analize]=20backspace=20esborra=20tots=20els=20tags=20-=20[NEW?= =?UTF-8?q?]=20[zx-128bankviewer]=20Es=20mostra=20quina=20p=C3=A0gina=20de?= =?UTF-8?q?=20mem=C3=B2ria=20est=C3=A0=20asignada=20a=20cada=20bank=20-=20?= =?UTF-8?q?[FIX]=20[zx=5F128mem]=20es=20filtra=20el=20port=20al=20que=20es?= =?UTF-8?q?colta=20la=20mem=C3=B2ria=20-=20[NEW]=20[zx=5Fscreen]=20Es=20mo?= =?UTF-8?q?stra=20en=20quina=20pantalla=20estem=20(normal=20o=20shadow)=20?= =?UTF-8?q?-=20[FIX]=20[zx=5Fscreen]=20tots=20els=20tipos=20per=20al=20cal?= =?UTF-8?q?cul=20de=20adreces=20passats=20a=20uint32=5Ft=20-=20[NEW]=20[zx?= =?UTF-8?q?=5Fula]=20afegides=20combinacions=20de=20cursors=20per=20a=20ma?= =?UTF-8?q?jor=20comoditat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui.cpp | 16 ++++++++++++++++ ui.h | 3 +++ z80analyze.cpp | 3 ++- zx_128bankviewer.cpp | 20 +++++++++++++++++++- zx_128mem.cpp | 24 ++++++++++++++++++++++++ zx_128mem.h | 3 +++ zx_screen.cpp | 20 ++++++++++++-------- zx_ula.cpp | 6 ++++++ 8 files changed, 85 insertions(+), 10 deletions(-) diff --git a/ui.cpp b/ui.cpp index abbda53..0618628 100644 --- a/ui.cpp +++ b/ui.cpp @@ -88,6 +88,22 @@ namespace ui for (int i=0; i127) chr = '.'; + SDL_Rect src {((chr-32)&0xf)*CHR_W, ((chr-32)>>4)*CHR_H, CHR_W, CHR_H}; + SDL_Rect dst {x, y, CHR_W*2, CHR_H*2}; + SDL_RenderCopy(ren, tex, &src, &dst); + } + + void placetxt(int x, int y, const char *text, uint8_t color) + { + SDL_SetTextureColorMod(tex, colors[color][0], colors[color][1], colors[color][2]); + for (int i=0; ikey.keysym.scancode == SDL_SCANCODE_BACKSPACE) { const uint32_t size = z80mem::get()->getSize(); - for (int i=0; isetTag(i, z80mem::get()->getTag(i) & ~MEMTAG_TOUCHED); + //for (int i=0; isetTag(i, z80mem::get()->getTag(i) & ~MEMTAG_TOUCHED); + for (int i=0; isetTag(i, MEMTAG_NONE); refresh(); z80debug::refresh(); } diff --git a/zx_128bankviewer.cpp b/zx_128bankviewer.cpp index ab5dae6..b057f2f 100644 --- a/zx_128bankviewer.cpp +++ b/zx_128bankviewer.cpp @@ -1,14 +1,18 @@ #include "zx_128bankviewer.h" #include "z80.h" #include "z80mem.h" +#include "zx_128mem.h" +#include "ui.h" +//#include "ui_window.h" void zx_128bankviewer::show() { if (!win) { - win = SDL_CreateWindow("Z80 Analyzer", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 128, 512, SDL_WINDOW_SHOWN); + win = SDL_CreateWindow("Z80 Bank Viewer", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 128, 512, SDL_WINDOW_SHOWN); ren = SDL_CreateRenderer(win, -1, 0); tex = SDL_CreateTexture(ren, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, 128, 512); + uitex = ui::createtexture(ren); //ui::window::registerWindow(SDL_GetWindowID(win), handleEvent); } @@ -20,6 +24,8 @@ void zx_128bankviewer::refresh() { if (!win) return; + ui::setrenderer(ren, uitex); + Uint32 *pixels; int pitch; SDL_LockTexture(tex, NULL, (void**)&pixels, &pitch); @@ -35,6 +41,18 @@ void zx_128bankviewer::refresh() SDL_UnlockTexture(tex); SDL_RenderCopy(ren, tex, NULL, NULL); + + char temp[256]; + zx_128mem* mem = ((zx_128mem*)z80mem::get()); + sprintf(temp, "%u", mem->getPage(0)); + ui::placetxt(1,1,temp, COLOR_WHITE); + sprintf(temp, "%u", mem->getPage(1)); + ui::placetxt(1,129,temp, COLOR_WHITE); + sprintf(temp, "%u", mem->getPage(2)); + ui::placetxt(1,257,temp, COLOR_WHITE); + sprintf(temp, "%u", mem->getPage(3)); + ui::placetxt(1,385,temp, COLOR_WHITE); + SDL_RenderPresent(ren); } diff --git a/zx_128mem.cpp b/zx_128mem.cpp index 75571de..554f6d7 100644 --- a/zx_128mem.cpp +++ b/zx_128mem.cpp @@ -22,6 +22,7 @@ zx_128mem::zx_128mem() void zx_128mem::port_out(int port, int val) { + if (port != 0x7ffd) return; if (config & ZX_128MEM_DISPAG) return; const bool shadow = config & ZX_128MEM_SCREEN; config = val; @@ -163,3 +164,26 @@ uint8_t *zx_128mem::rawTagPtr(uint32_t address) { return &tags[address]; } + +uint8_t zx_128mem::getPage(uint8_t bank) +{ + switch(bank) { + case 0: + return (config & ZX_128MEM_ROM) ? 1 : 0; + break; + case 1: + return 5; + break; + case 2: + return 2; + break; + case 3: + return config & ZX_128MEM_PAGE; + break; + } +} + +bool zx_128mem::getShadowScreen() +{ + return config & ZX_128MEM_SCREEN; +} diff --git a/zx_128mem.h b/zx_128mem.h index af467ac..f451ce4 100644 --- a/zx_128mem.h +++ b/zx_128mem.h @@ -28,6 +28,9 @@ class zx_128mem : public z80mem uint8_t *rawPtr(uint32_t address); uint8_t *rawTagPtr(uint32_t address); + uint8_t getPage(uint8_t bank); + bool getShadowScreen(); + protected: uint8_t config; diff --git a/zx_screen.cpp b/zx_screen.cpp index 6292463..b2bc161 100644 --- a/zx_screen.cpp +++ b/zx_screen.cpp @@ -7,6 +7,7 @@ #include "ui_window.h" #include "z80debug.h" #include "ui.h" +#include "zx_128mem.h" namespace zxscreen { @@ -39,11 +40,11 @@ namespace zxscreen int pixels_draw = 0; - uint16_t pixel_base_addr = 0x4000; - uint16_t color_base_addr = 0x5800; + uint32_t pixel_base_addr = 0x4000; + uint32_t color_base_addr = 0x5800; - uint16_t *pixel_addr = nullptr; //[69888]; - uint16_t *color_addr = nullptr; //[69888]; + uint32_t *pixel_addr = nullptr; //[69888]; + uint32_t *color_addr = nullptr; //[69888]; uint8_t zx_pixels[352*296]; uint8_t *ptr_pixel = zx_pixels; @@ -56,11 +57,11 @@ namespace zxscreen if (pixel_addr) free(pixel_addr); if (color_addr) free(color_addr); - pixel_addr = (uint16_t*)malloc(t_states_total*sizeof(uint16_t)); - color_addr = (uint16_t*)malloc(t_states_total*sizeof(uint16_t)); + pixel_addr = (uint32_t*)malloc(t_states_total*sizeof(uint32_t)); + color_addr = (uint32_t*)malloc(t_states_total*sizeof(uint32_t)); - uint16_t *ptr_pixel = pixel_addr; - uint16_t *ptr_color = color_addr; + uint32_t *ptr_pixel = pixel_addr; + uint32_t *ptr_color = color_addr; // vsync for (int i=0; igetShadowScreen()?"SHADOW":"NORMAL", COLOR_WHITE); + if (present) SDL_RenderPresent(ren); else diff --git a/zx_ula.cpp b/zx_ula.cpp index f862690..9409520 100644 --- a/zx_ula.cpp +++ b/zx_ula.cpp @@ -131,6 +131,12 @@ namespace zx_ula // Keys in a normal keyboard that ara combinations in the zx one if (keys[SDL_SCANCODE_BACKSPACE]) zx_keyboard[KEY_SHIFT] = zx_keyboard[KEY_0] = 1; if (keys[SDL_SCANCODE_PERIOD]) zx_keyboard[KEY_SYMBOL] = zx_keyboard[KEY_M] = 1; + + if (keys[SDL_SCANCODE_UP]) zx_keyboard[KEY_SHIFT] = zx_keyboard[KEY_7] = 1; + if (keys[SDL_SCANCODE_DOWN]) zx_keyboard[KEY_SHIFT] = zx_keyboard[KEY_6] = 1; + if (keys[SDL_SCANCODE_LEFT]) zx_keyboard[KEY_SHIFT] = zx_keyboard[KEY_5] = 1; + if (keys[SDL_SCANCODE_RIGHT]) zx_keyboard[KEY_SHIFT] = zx_keyboard[KEY_8] = 1; + } int port_in(int port)