- [NEW] Adaptat zx_screen per a que reba el offset en memoria on està la memòria de video, per a ser mes modular. Pero crec que les diferencies en el timing van a fer necessari un modul nou per a cada spectrum. Ja vorem quan estiga mes descansat.
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user