- [FIX] Corregit el acces als port amb OUT

- [NEW] Nou model de gestió de memòria
This commit is contained in:
2025-07-23 13:51:51 +02:00
parent 3fd28136f6
commit 6e3e8e9b69
16 changed files with 315 additions and 94 deletions

View File

@@ -1,6 +1,6 @@
#include "z80dis.h"
#include "z80.h"
#include "z80mem.h"
#include "zx_mem.h"
#include <string.h>
#include <stdio.h>
#include <vector>
@@ -69,31 +69,31 @@ namespace z80dis
const char *getBase(const uint16_t pos)
{
if (z80mem::get()->readMem(pos) == 0xCB) {
if (mem::readMem(pos) == 0xCB) {
opcode_size=2;
return cb_opcodes[z80mem::get()->readMem(pos+1)];
} else if (z80mem::get()->readMem(pos) == 0xDD) {
if (z80mem::get()->readMem(pos+1) == 0xCB) {
return cb_opcodes[mem::readMem(pos+1)];
} else if (mem::readMem(pos) == 0xDD) {
if (mem::readMem(pos+1) == 0xCB) {
opcode_size=4;
return ix_bit_opcodes[z80mem::get()->readMem(pos+3)];
return ix_bit_opcodes[mem::readMem(pos+3)];
} else {
opcode_size=2;
return ix_opcodes[z80mem::get()->readMem(pos+1)];
return ix_opcodes[mem::readMem(pos+1)];
}
} else if (z80mem::get()->readMem(pos) == 0xED) {
} else if (mem::readMem(pos) == 0xED) {
opcode_size=2;
return misc_opcodes[(z80mem::get()->readMem(pos+1))-64];
} else if (z80mem::get()->readMem(pos) == 0xFD) {
if (z80mem::get()->readMem(pos+1) == 0xCB) {
return misc_opcodes[(mem::readMem(pos+1))-64];
} else if (mem::readMem(pos) == 0xFD) {
if (mem::readMem(pos+1) == 0xCB) {
opcode_size=4;
return iy_bit_opcodes[z80mem::get()->readMem(pos+3)];
return iy_bit_opcodes[mem::readMem(pos+3)];
} else {
opcode_size=2;
return iy_opcodes[z80mem::get()->readMem(pos+1)];
return iy_opcodes[mem::readMem(pos+1)];
}
} else {
opcode_size=1;
return base_opcodes[z80mem::get()->readMem(pos)];
return base_opcodes[mem::readMem(pos)];
}
}
@@ -103,7 +103,7 @@ namespace z80dis
for (int i=0; i<4;++i)
{
if (opcode_size>i)
sprintf(hex, "%02x ", z80mem::get()->readMem(pos+i));
sprintf(hex, "%02x ", mem::readMem(pos+i));
else
sprintf(hex, " ");
strcat(buffer, hex);
@@ -119,9 +119,9 @@ namespace z80dis
if (strstr(buffer, "4x"))
{
opcode_size+=2;
const uint8_t memvalue = z80mem::get()->readMem(pos);
const uint8_t memvalue = mem::readMem(pos);
const uint16_t address = pos + ((memvalue==0xFD) || (memvalue==0xDD) || (memvalue==0xED)?2:1);
const uint16_t word = z80mem::get()->readMem(address) + (z80mem::get()->readMem(address+1)<<8);
const uint16_t word = mem::readMem(address) + (mem::readMem(address+1)<<8);
if (symbols[word][0]!=0) {
char *p = strstr(buffer, "$");
(*p)='%'; p++;
@@ -142,7 +142,7 @@ namespace z80dis
{
opcode_size = 4;
strcpy(base, buffer);
sprintf(buffer, base, z80mem::get()->readMem(pos+2), (int8_t)z80mem::get()->readMem(pos+3));
sprintf(buffer, base, mem::readMem(pos+2), (int8_t)mem::readMem(pos+3));
return buffer;
}
@@ -150,7 +150,7 @@ namespace z80dis
{
opcode_size+=1;
strcpy(base, buffer);
sprintf(buffer, base, z80mem::get()->readMem(pos+1));
sprintf(buffer, base, mem::readMem(pos+1));
}
if (strstr(buffer, "Xx"))
@@ -161,9 +161,9 @@ namespace z80dis
if (opcode_size>4) {
opcode_size=4;
sprintf(buffer, base, pos + opcode_size + (int8_t)z80mem::get()->readMem(pos+2));
sprintf(buffer, base, pos + opcode_size + (int8_t)mem::readMem(pos+2));
} else {
sprintf(buffer, base, pos + opcode_size + (int8_t)z80mem::get()->readMem(pos+1));
sprintf(buffer, base, pos + opcode_size + (int8_t)mem::readMem(pos+1));
}
}
@@ -173,9 +173,9 @@ namespace z80dis
strcpy(base, buffer);
if (opcode_size>4) {
opcode_size=4;
sprintf(buffer, base, (int8_t)z80mem::get()->readMem(pos+3));
sprintf(buffer, base, (int8_t)mem::readMem(pos+3));
} else {
sprintf(buffer, base, (int8_t)z80mem::get()->readMem(pos+2));
sprintf(buffer, base, (int8_t)mem::readMem(pos+2));
}
}