From 4a0e2b3b7dd28c6fa41756678c5d85fb48f42b16 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Thu, 19 Dec 2024 22:33:58 +0100 Subject: [PATCH] =?UTF-8?q?-=20[NEW]=20Adaptat=20zx=5Fscreen=20per=20a=20q?= =?UTF-8?q?ue=20reba=20el=20offset=20en=20memoria=20on=20est=C3=A0=20la=20?= =?UTF-8?q?mem=C3=B2ria=20de=20video,=20per=20a=20ser=20mes=20modular.=20P?= =?UTF-8?q?ero=20crec=20que=20les=20diferencies=20en=20el=20timing=20van?= =?UTF-8?q?=20a=20fer=20necessari=20un=20modul=20nou=20per=20a=20cada=20sp?= =?UTF-8?q?ectrum.=20Ja=20vorem=20quan=20estiga=20mes=20descansat.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 2 +- zx_screen.cpp | 16 +++++++++++++--- zx_screen.h | 3 ++- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/main.cpp b/main.cpp index e39a8db..d41dcc4 100644 --- a/main.cpp +++ b/main.cpp @@ -81,7 +81,7 @@ int main(int argc, char *argv[]) SDL_Init(SDL_INIT_EVERYTHING); z80debug::init(); - zxscreen::init(); + zxscreen::init(0x4000, 0x5800); ui::menu::init(); ui::menu::setexitcallback(actions::exitMenu); diff --git a/zx_screen.cpp b/zx_screen.cpp index 7b47ac4..ba96ca9 100644 --- a/zx_screen.cpp +++ b/zx_screen.cpp @@ -33,6 +33,9 @@ namespace zxscreen int pixels_draw = 0; + uint16_t pixel_base_addr = 0x4000; + uint16_t color_base_addr = 0x5800; + uint16_t pixel_addr[69888]; uint16_t color_addr[69888]; uint8_t zx_pixels[352*296]; @@ -175,8 +178,15 @@ namespace zxscreen focus(); } - void init() + void setBaseAddresses(const uint16_t pixeladdr, const uint16_t coloraddr) { + pixel_base_addr = pixeladdr; + color_base_addr = coloraddr; + } + + void init(const uint16_t pixeladdr, const uint16_t coloraddr) + { + setBaseAddresses(pixeladdr, coloraddr); create_tables(); reinit(); } @@ -203,13 +213,13 @@ namespace zxscreen *(ptr_pixel++) = border_color; *(ptr_pixel++) = border_color; } else { - uint8_t color = z80mem::get()->readMem(0x5800+color_addr[t_screen]); + uint8_t color = z80mem::get()->readMem(color_base_addr + color_addr[t_screen]); uint8_t c1 = color&0x7, c2 = (color>>3)&0x7; if ((color&0x80) && flash) { c1=c2; c2=color&0x7; } if ((color&0x40)) { c1 |= 0x8; c2 |= 0x8; } uint16_t address = /*(0x4000) |*/ (pixel_addr[t_screen]&0x1FFF); uint8_t mask = 1 << (pixel_addr[t_screen]>>13); - uint8_t block = z80mem::get()->readMem(0x4000 + address); + uint8_t block = z80mem::get()->readMem(pixel_base_addr + address); *(ptr_pixel++)=(block&mask) ? c1 : c2; mask>>=1; *(ptr_pixel++)=(block&mask) ? c1 : c2; diff --git a/zx_screen.h b/zx_screen.h index 269a701..6b4790e 100644 --- a/zx_screen.h +++ b/zx_screen.h @@ -3,7 +3,8 @@ namespace zxscreen { - void init(); + void init(const uint16_t pixeladdr, const uint16_t coloraddr); + void setBaseAddresses(const uint16_t pixeladdr, const uint16_t coloraddr); void reinit(); void focus(); void refresh(const uint32_t dt, const bool full=false);