Просмотр исходного кода

+ support the 6502 zero page virtual registers in dwarf_reg and dwarf_reg_no_error

Nikolay Nikolov 3 месяцев назад
Родитель
Сommit
cb0ce3bbf0
1 измененных файлов с 22 добавлено и 2 удалено
  1. 22 2
      compiler/mos6502/cpubase.pas

+ 22 - 2
compiler/mos6502/cpubase.pas

@@ -480,7 +480,17 @@ unit cpubase;
       var
         reg : shortint;
       begin
-        reg:=regdwarf_table[findreg_by_number(r)];
+        if is_6502_zero_page_register(r) then
+          begin
+            if (getsupreg(r)>=RS_RZB_FIRST) and (getsupreg(r)<=RS_RZB_LAST) then
+              reg:=get_6502_zero_page_register_address(r)+$20000
+            else if (getsupreg(r)>=RS_RZW_FIRST) and (getsupreg(r)<=RS_RZW_LAST) then
+              reg:=(get_6502_zero_page_register_address(r) shr 1)+$30000
+            else
+              internalerror(2025102701);
+          end
+        else
+          reg:=regdwarf_table[findreg_by_number(r)];
         if reg=-1 then
           internalerror(200603251);
         result:=reg;
@@ -489,7 +499,17 @@ unit cpubase;
 
     function dwarf_reg_no_error(r:tregister):shortint;
       begin
-        result:=regdwarf_table[findreg_by_number(r)];
+        if is_6502_zero_page_register(r) then
+          begin
+            if (getsupreg(r)>=RS_RZB_FIRST) and (getsupreg(r)<=RS_RZB_LAST) then
+              result:=get_6502_zero_page_register_address(r)+$20000
+            else if (getsupreg(r)>=RS_RZW_FIRST) and (getsupreg(r)<=RS_RZW_LAST) then
+              result:=(get_6502_zero_page_register_address(r) shr 1)+$30000
+            else
+              internalerror(2025102701);
+          end
+        else
+          result:=regdwarf_table[findreg_by_number(r)];
       end;