- [NEW] La posició del cursor se marca amb un requadre blau (no relleno) en el desensamblador

- [NEW] setcursor corregeix l'adreça si no coincideix amb una instrucció
- [FIX] Corregits els opcodes FD34 i FD35
- [NEW] Ara en el analitzador es borra o es fixa la memòria amb DELETE i RETURN
- [NEW] Fent click en un pixel del analitzador du a la posició de memòria que toca en el desensamblador
- [NEW] ui::printvoidrect()
- [NEW] la finestra del analitzador pilla el foco nomes amb pasar per damunt
- [NEW] Fent click en una linea del desensamblador fica o lleva un breakpoint en eixa adreça
- [FIX] les accions en el analitzador actualitzen la finestra del debugger
- [FIX] El cursor del analitzador nomes es deu moure al estar damunt de al finestra del analitzador
- [FIX] El desensamblador, quan el tag de memoria era MIXED no reconixia part de la instrucció
- [FIX] El desensamblador usava el color incorrecte per a codi amb el tag REPEAT
This commit is contained in:
2024-12-14 09:31:52 +01:00
parent c9aceeb387
commit 6768c01c81
6 changed files with 83 additions and 25 deletions

View File

@@ -64,6 +64,8 @@ namespace z80debug
uint8_t use[7][256];
uint16_t line_address[256];
char temp[256];
const char *tohex(int value, int numdigits)
{
@@ -183,6 +185,15 @@ namespace z80debug
}
}
if (e->type == SDL_MOUSEBUTTONDOWN) {
if ( (e->button.x<midx*CHR_W) && (e->button.y<(mem_y-1)*CHR_H) && (e->button.y>CHR_H) ) {
const uint16_t address = ((e->button.y)/CHR_H)-1;
if (breakpoints[line_address[address]]==0)
breakpoints[line_address[address]]=1;
else
breakpoints[line_address[address]]=0;
refresh();
}
if (!resizing && resizing_type != RESIZING_NONE) {
resizing = true;
}
@@ -278,7 +289,7 @@ namespace z80debug
uint16_t find_previous_opcode(uint16_t pc)
{
pc--;
if (z80::getMemTag(pc)!=MEMTAG_CODE && z80::getMemTag(pc)!=MEMTAG_INST) return pc;
if (z80::getMemTag(pc)!=MEMTAG_CODE && z80::getMemTag(pc)!=MEMTAG_MIXED && z80::getMemTag(pc)!=MEMTAG_INST) return pc;
while (z80::getMemTag(pc)!=MEMTAG_INST) pc--;
@@ -299,8 +310,8 @@ namespace z80debug
void printDissasemblerLine(const uint16_t address, const int line, const bool heuristics=false)
{
uint8_t colors[4] = { COLOR_RED, COLOR_CYAN, COLOR_GRAY, COLOR_WHITE};
if (z80::getMemTouched(address)!=MEMTAG_INST) colors[3]=COLOR_GRAY;
uint8_t colors[4] = { COLOR_RED, COLOR_CYAN, COLOR_WHITE, COLOR_WHITE};
if (z80::getMemTouched(address)!=MEMTAG_INST && z80::getMemTouched(address)!=MEMTAG_REPEAT) colors[3]=COLOR_GRAY;
if (z80::getMemTouched(address)==MEMTAG_NONE) colors[1]=COLOR_GRAY;
if (is_debugging && (address == z80::getPC())) {
@@ -325,7 +336,8 @@ namespace z80debug
ui::printtxt(19,line, z80dis::getOpcode(address), colors[2]);
ui::printtxt(31,line, z80dis::getAsm(address), colors[3]);
} else {
ui::printtxt(19,line, tohex(z80::getMem()[address],2), COLOR_GRAY);
ui::printrect(19,line,2,1,COLOR_GRAY);
ui::printtxt(19,line, tohex(z80::getMem()[address],2), COLOR_WHITE);
ui::printtxt(31,line, "?????????", COLOR_GRAY);
}
}
@@ -351,16 +363,20 @@ namespace z80debug
uint16_t pc = cursor; //z80::getPC();
uint16_t pos = pc;
int num_lines = mem_y-2;
line_address[(num_lines/2)-1] = pos;
ui::printvoidrect(0,(num_lines/2)-1, midx-2,1, COLOR_BLUE);
printDissasemblerLine(pc, (num_lines/2)-1, true);
for (int i=num_lines/2;i<num_lines;++i) {
pos += z80dis::getOpcodeSize(pos);
line_address[i] = pos;
printDissasemblerLine(pos, i, true);
}
pos = pc;
for (int i=(num_lines/2)-2;i>=0;--i) {
pos = find_previous_opcode(pos);
line_address[i] = pos;
printDissasemblerLine(pos, i);
}
@@ -852,7 +868,10 @@ namespace z80debug
void setcursor(const uint16_t address)
{
cursor = address;
if (z80::getMemTag(address)!=MEMTAG_INST)
cursor = find_previous_opcode(address);
else
cursor = address;
}
void cursorfwd()