- [NEW] Treballant en modularitzar la memòria, per a començar a implementar soport per als demes Spectrums

This commit is contained in:
2024-12-19 17:36:22 +01:00
parent da4c692283
commit dbd80694aa
10 changed files with 263 additions and 135 deletions

View File

@@ -1,7 +1,8 @@
#include "z80dis.h"
#include "z80.h"
#include "z80mem.h"
#include <string.h>
#include <stdio.h>
#include "z80.h"
#include <vector>
#include <bits/stdc++.h>
@@ -68,44 +69,41 @@ namespace z80dis
const char *getBase(const uint16_t pos)
{
const uint8_t *memory = &z80::getMem()[pos];
if (*memory == 0xCB) {
if (z80mem::get()->readMem(pos) == 0xCB) {
opcode_size=2;
return cb_opcodes[*(memory+1)];
} else if (*memory == 0xDD) {
if (*(memory+1) == 0xCB) {
return cb_opcodes[z80mem::get()->readMem(pos+1)];
} else if (z80mem::get()->readMem(pos) == 0xDD) {
if (z80mem::get()->readMem(pos+1) == 0xCB) {
opcode_size=4;
return ix_bit_opcodes[*(memory+3)];
return ix_bit_opcodes[z80mem::get()->readMem(pos+3)];
} else {
opcode_size=2;
return ix_opcodes[*(memory+1)];
return ix_opcodes[z80mem::get()->readMem(pos+1)];
}
} else if (*memory == 0xED) {
} else if (z80mem::get()->readMem(pos) == 0xED) {
opcode_size=2;
return misc_opcodes[(*(memory+1))-64];
} else if (*memory == 0xFD) {
if (*(memory+1) == 0xCB) {
return misc_opcodes[(z80mem::get()->readMem(pos+1))-64];
} else if (z80mem::get()->readMem(pos) == 0xFD) {
if (z80mem::get()->readMem(pos+1) == 0xCB) {
opcode_size=4;
return iy_bit_opcodes[*(memory+3)];
return iy_bit_opcodes[z80mem::get()->readMem(pos+3)];
} else {
opcode_size=2;
return iy_opcodes[*(memory+1)];
return iy_opcodes[z80mem::get()->readMem(pos+1)];
}
} else {
opcode_size=1;
return base_opcodes[*memory];
return base_opcodes[z80mem::get()->readMem(pos)];
}
}
void printOpcode(const uint16_t pos)
{
const uint8_t *memory = &z80::getMem()[pos];
char hex[4];
for (int i=0; i<4;++i)
{
if (opcode_size>i)
sprintf(hex, "%02x ", *(memory+i));
sprintf(hex, "%02x ", z80mem::get()->readMem(pos+i));
else
sprintf(hex, " ");
strcat(buffer, hex);
@@ -114,8 +112,6 @@ namespace z80dis
const char *getAsm(const uint16_t pos)
{
const uint8_t *memory = &z80::getMem()[pos];
opcode_size = 0;
char base[256];
strcpy(buffer, getBase(pos));
@@ -123,7 +119,9 @@ namespace z80dis
if (strstr(buffer, "4x"))
{
opcode_size+=2;
const uint16_t word = *(uint16_t*)(memory+((*memory==0xFD) || (*memory==0xDD) || (*memory==0xED)?2:1));
const uint8_t memvalue = z80mem::get()->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);
if (symbols[word][0]!=0) {
char *p = strstr(buffer, "$");
(*p)='%'; p++;
@@ -144,7 +142,7 @@ namespace z80dis
{
opcode_size = 4;
strcpy(base, buffer);
sprintf(buffer, base, *(memory+2), (int8_t)*(memory+3));
sprintf(buffer, base, z80mem::get()->readMem(pos+2), (int8_t)z80mem::get()->readMem(pos+3));
return buffer;
}
@@ -152,7 +150,7 @@ namespace z80dis
{
opcode_size+=1;
strcpy(base, buffer);
sprintf(buffer, base, *(memory+1));
sprintf(buffer, base, z80mem::get()->readMem(pos+1));
}
if (strstr(buffer, "Xx"))
@@ -163,9 +161,9 @@ namespace z80dis
if (opcode_size>4) {
opcode_size=4;
sprintf(buffer, base, pos + opcode_size + (int8_t)*(memory+2));
sprintf(buffer, base, pos + opcode_size + (int8_t)z80mem::get()->readMem(pos+2));
} else {
sprintf(buffer, base, pos + opcode_size + (int8_t)*(memory+1));
sprintf(buffer, base, pos + opcode_size + (int8_t)z80mem::get()->readMem(pos+1));
}
}
@@ -175,9 +173,9 @@ namespace z80dis
strcpy(base, buffer);
if (opcode_size>4) {
opcode_size=4;
sprintf(buffer, base, (int8_t)*(memory+3));
sprintf(buffer, base, (int8_t)z80mem::get()->readMem(pos+3));
} else {
sprintf(buffer, base, (int8_t)*(memory+2));
sprintf(buffer, base, (int8_t)z80mem::get()->readMem(pos+2));
}
}