⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 debug.c

📁 NES game Emulator in Linux.c and asm codes.
💻 C
📖 第 1 页 / 共 2 页
字号:
 printf("write: %04X, %02X\n", a & 0xFFFF, (unsigned) b);
}

void Dump_DMA(int b)
{
 if (!dumping_dma && !(b & ~0xFF)) return;

 switch (b)
 {
  case 0:
   printf("Frame %d\n", Frames);
   break;
  case 1:
   printf("HDMA relatch\n");
   break;
  case 2:
   printf("HDMA line %d\n", Current_Line_Timing);
   break;
  default:
   printf("DMA %d executed at line %d\n", b & 0xFF, Current_Line_Timing);
 }

 if (!(b & ~0xFF))
 {
  printf("HDMAEN:%02X\n", (unsigned) HDMAEN);
 }

 if (!(b & ~0xFF) || b & (1 << 0))
 {
  printf("%02X %02X %02X %02X%02X%02X %02X%02X%02X %02X%02X%02X\n",
   (unsigned) DMAP_0,(unsigned) BBAD_0,(unsigned) NTRL_0,
   (unsigned) A1B_0,(unsigned) A1TH_0,(unsigned) A1TL_0,
   (unsigned) A2B_0,(unsigned) A2H_0,(unsigned) A2L_0,
   (unsigned) DASB_0,(unsigned) DASH_0,(unsigned) DASL_0);
 }

 if (!(b & ~0xFF) || b & (1 << 1))
 {
  printf("%02X %02X %02X %02X%02X%02X %02X%02X%02X %02X%02X%02X\n",
   (unsigned) DMAP_1,(unsigned) BBAD_1,(unsigned) NTRL_1,
   (unsigned) A1B_1,(unsigned) A1TH_1,(unsigned) A1TL_1,
   (unsigned) A2B_1,(unsigned) A2H_1,(unsigned) A2L_1,
   (unsigned) DASB_1,(unsigned) DASH_1,(unsigned) DASL_1);
 }

 if (!(b & ~0xFF) || b & (1 << 2))
 {
  printf("%02X %02X %02X %02X%02X%02X %02X%02X%02X %02X%02X%02X\n",
   (unsigned) DMAP_2,(unsigned) BBAD_2,(unsigned) NTRL_2,
   (unsigned) A1B_2,(unsigned) A1TH_2,(unsigned) A1TL_2,
   (unsigned) A2B_2,(unsigned) A2H_2,(unsigned) A2L_2,
   (unsigned) DASB_2,(unsigned) DASH_2,(unsigned) DASL_2);
 }

 if (!(b & ~0xFF) || b & (1 << 3))
 {
  printf("%02X %02X %02X %02X%02X%02X %02X%02X%02X %02X%02X%02X\n",
   (unsigned) DMAP_3,(unsigned) BBAD_3,(unsigned) NTRL_3,
   (unsigned) A1B_3,(unsigned) A1TH_3,(unsigned) A1TL_3,
   (unsigned) A2B_3,(unsigned) A2H_3,(unsigned) A2L_3,
   (unsigned) DASB_3,(unsigned) DASH_3,(unsigned) DASL_3);
 }

 if (!(b & ~0xFF) || b & (1 << 4))
 {
  printf("%02X %02X %02X %02X%02X%02X %02X%02X%02X %02X%02X%02X\n",
   (unsigned) DMAP_4,(unsigned) BBAD_4,(unsigned) NTRL_4,
   (unsigned) A1B_4,(unsigned) A1TH_4,(unsigned) A1TL_4,
   (unsigned) A2B_4,(unsigned) A2H_4,(unsigned) A2L_4,
   (unsigned) DASB_4,(unsigned) DASH_4,(unsigned) DASL_4);
 }

 if (!(b & ~0xFF) || b & (1 << 5))
 {
  printf("%02X %02X %02X %02X%02X%02X %02X%02X%02X %02X%02X%02X\n",
   (unsigned) DMAP_5,(unsigned) BBAD_5,(unsigned) NTRL_5,
   (unsigned) A1B_5,(unsigned) A1TH_5,(unsigned) A1TL_5,
   (unsigned) A2B_5,(unsigned) A2H_5,(unsigned) A2L_5,
   (unsigned) DASB_5,(unsigned) DASH_5,(unsigned) DASL_5);
 }

 if (!(b & ~0xFF) || b & (1 << 6))
 {
  printf("%02X %02X %02X %02X%02X%02X %02X%02X%02X %02X%02X%02X\n",
   (unsigned) DMAP_6,(unsigned) BBAD_6,(unsigned) NTRL_6,
   (unsigned) A1B_6,(unsigned) A1TH_6,(unsigned) A1TL_6,
   (unsigned) A2B_6,(unsigned) A2H_6,(unsigned) A2L_6,
   (unsigned) DASB_6,(unsigned) DASH_6,(unsigned) DASL_6);
 }

 if (!(b & ~0xFF) || b & (1 << 7))
 {
  printf("%02X %02X %02X %02X%02X%02X %02X%02X%02X %02X%02X%02X\n",
   (unsigned) DMAP_7,(unsigned) BBAD_7,(unsigned) NTRL_7,
   (unsigned) A1B_7,(unsigned) A1TH_7,(unsigned) A1TL_7,
   (unsigned) A2B_7,(unsigned) A2H_7,(unsigned) A2L_7,
   (unsigned) DASB_7,(unsigned) DASH_7,(unsigned) DASL_7);
 }
}

void InvalidOpcode()
{
 set_gfx_mode(GFX_TEXT,0,0,0,0);

#ifdef DEBUG
 DisplayStatus();
#endif

 printf("Unemulated 65c816 opcode 0x%02X (%s)\n",
  (unsigned) Map_Byte, CPU_OpID[Map_Byte]);
 printf("At address %02X:%04X\n",(unsigned) ((Map_Address >> 24) & 0xFF),
  (unsigned) (Map_Address & 0xFFFFFF));

 save_debug_dumps();

 exit(1);
}

void InvalidJump()
{
 set_gfx_mode(GFX_TEXT,0,0,0,0);

#ifdef DEBUG
 DisplayStatus();
#endif

 printf("65c816 jump to non-linear mapped address space (%02X:%04X)\n",
  (unsigned) ((Map_Address >> 16) & 0xFF), (unsigned) (Map_Address & 0xFFFF));
 printf("Opcode %02X at address %02X:%04X\n",
  (unsigned) ((Map_Byte >> 24) & 0xFF),
  (unsigned) ((Map_Byte >> 16) & 0xFF), (unsigned) (Map_Byte & 0xFFFF));

 save_debug_dumps();

 exit(1);
}

void InvalidSPCHWRead()
{
 printf("\nRead from unsupported SPC HW address! - %04X",
  (unsigned) (Map_Address & 0xFFFF));
}

void InvalidSPCHWWrite()
{
 printf("\nWrite to unsupported SPC HW address! - %04X with 0x%02X",
  (unsigned) (Map_Address & 0xFFFF),
  (unsigned) Map_Byte);
}

void InvalidSPCROMWrite()
{
 printf("\nWrite to SPC ROM ignored - %04X with 0x%02X",
  (unsigned) (Map_Address & 0xFFFF),
  (unsigned) Map_Byte);
}

const char *SPC_OpID[256] = {
 "NOP"            ,"TCALL 0"        ,"SET1 dp.0"      ,"BBS dp.0,rel"   ,
 "OR A,dp"        ,"OR A,labs"      ,"OR A,(X)"       ,"OR A,(dp+X)"    ,
 "OR A,#imm"      ,"OR dp(d),dp(s)" ,"OR1 C,mem.bit"  ,"ASL dp"         ,
 "ASL labs"       ,"PUSH PSW"       ,"TSET1 labs"     ,"BRK"            ,

 "BPL rel"        ,"TCALL 1"        ,"CLR1 dp.0"      ,"BBC dp.0,rel"   ,
 "OR A,dp+X"      ,"OR A,labs+X"    ,"OR A,labs+Y"    ,"OR A,(dp)+Y"    ,
 "OR dp,#imm"     ,"OR (X),(Y)"     ,"DECW dp"        ,"ASL dp+X"       ,
 "ASL A"          ,"DEC X"          ,"CMP X,labs"     ,"JMP (abs,x)"    ,

 "CLRP"           ,"TCALL 2"        ,"SET1 dp.1"      ,"BBS dp.1,rel"   ,
 "AND A,dp"       ,"AND A,labs"     ,"AND A,(X)"      ,"AND A,(dp+X)"   ,
 "AND A,#imm"     ,"AND dp(d),dp(s)","OR1 C,/mem.bit" ,"ROL dp"         ,
 "ROL labs"       ,"PUSH A"         ,"CBNE dp"        ,"BRA rel"        ,

 "BMI rel"        ,"TCALL 3"        ,"CLR1 dp.1"      ,"BBC dp.1,rel"   ,
 "AND A,dp+X"     ,"AND A,labs+X"   ,"AND A,labs+Y"   ,"AND A,(dp)+Y"   ,
 "AND dp,#imm"    ,"AND (X),(Y)"    ,"INCW dp"        ,"ROL dp+X"       ,
 "ROL A"          ,"INC X"          ,"CMP X,dp"       ,"CALL labs"      ,

 "SETP"           ,"TCALL 4"        ,"SET1 dp.2"      ,"BBS dp.2,rel"   ,
 "EOR A,dp"       ,"EOR A,labs"     ,"EOR A,(X)"      ,"EOR A,(dp+X)"   ,
 "EOR A,#imm"     ,"EOR dp(d),dp(s)","AND1 C,mem.bit" ,"LSR dp"         ,
 "LSR labs"       ,"PUSH X"         ,"TCLR1 labs"     ,"PCALL upage"    ,

 "BVC rel"        ,"TCALL 5"        ,"CLR1 dp.2"      ,"BBC dp.2,rel"   ,
 "EOR A,dp+X"     ,"EOR A,labs+X"   ,"EOR A,labs+Y"   ,"EOR A,(dp)+Y"   ,
 "EOR dp,#imm"    ,"EOR (X),(Y)"    ,"CMPW YA,dp"     ,"LSR dp+X"       ,
 "LSR A"          ,"MOV X,A"        ,"CMP Y,labs"     ,"JMP labs"       ,

 "CLRC"           ,"TCALL 6"        ,"SET1 dp.3"      ,"BBS dp.3,rel"   ,
 "CMP A,dp"       ,"CMP A,labs"     ,"CMP A,(X)"      ,"CMP A,(dp+X)"   ,
 "CMP A,#imm"     ,"CMP dp(d),dp(s)","AND1 C,/mem.bit","ROR dp"         ,
 "ROR labs"       ,"PUSH Y"         ,"DBNZ dp,rel"    ,"RET"            ,

 "BVS rel"        ,"TCALL 7"        ,"CLR1 dp.3"      ,"BBC dp.3,rel"   ,
 "CMP A,dp+X"     ,"CMP A,labs+X"   ,"CMP A,labs+Y"   ,"CMP A,(dp)+Y"   ,
 "CMP dp,#imm"    ,"CMP (X),(Y)"    ,"ADDW YA,dp"     ,"ROR dp+X"       ,
 "ROR A"          ,"MOV A,X"        ,"CMP Y,dp"       ,"RETI"           ,

 "SETC"           ,"TCALL 8"        ,"SET1 dp.4"      ,"BBS dp.4,rel"   ,
 "ADC A,dp"       ,"ADC A,labs"     ,"ADC A,(X)"      ,"ADC A,(dp+X)"   ,
 "ADC A,#imm"     ,"ADC dp(d),dp(s)","EOR1 C,mem.bit" ,"DEC dp"         ,
 "DEC labs"       ,"MOV Y,#imm"     ,"POP PSW"        ,"MOV dp,#imm"    ,

 "BCC rel"        ,"TCALL 9"        ,"CLR1 dp.4"      ,"BBC dp.4,rel"   ,
 "ADC A,dp+X"     ,"ADC A,labs+X"   ,"ADC A,labs+Y"   ,"ADC A,(dp)+Y"   ,
 "ADC dp,#imm"    ,"ADC (X),(Y)"    ,"SUBW YA,dp"     ,"DEC dp+X"       ,
 "DEC A"          ,"MOV X,SP"       ,"DIV YA,X"       ,"XCN A"          ,

 "EI"             ,"TCALL 10"       ,"SET1 dp.5"      ,"BBS dp.5,rel"   ,
 "SBC A,dp"       ,"SBC A,labs"     ,"SBC A,(X)"      ,"SBC A,(dp+X)"   ,
 "SBC A,#imm"     ,"SBC dp(d),dp(s)","MOV1 C,mem.bit" ,"INC dp"         ,
 "INC labs"       ,"CMP Y,#imm"     ,"POP A"          ,"MOV (X)+,A"     ,

 "BCS rel"        ,"TCALL 11"       ,"CLR1 dp.5"      ,"BBC dp.5,rel"   ,
 "SBC A,dp+X"     ,"SBC A,labs+X"   ,"SBC A,labs+Y"   ,"SBC A,(dp)+Y"   ,
 "SBC dp,#imm"    ,"SBC (X),(Y)"    ,"MOVW YA,dp"     ,"INC dp+X"       ,
 "INC A"          ,"MOV SP,X"       ,"DAS A"          ,"MOV A,(X)+"     ,

 "DI"             ,"TCALL 12"       ,"SET1 dp.6"      ,"BBS dp.6,rel"   ,
 "MOV dp,A"       ,"MOV labs,A"     ,"MOV (X),A"      ,"MOV (dp+X),A"   ,
 "CMP X,#imm"     ,"MOV labs,X"     ,"MOV1 mem.bit,C" ,"MOV dp,Y"       ,
 "MOV labs,Y"     ,"MOV X,#imm"     ,"POP X"          ,"MUL YA"         ,

 "BNE rel"        ,"TCALL 13"       ,"CLR1 dp.6"      ,"BBC dp.6,rel"   ,
 "MOV dp+X,A"     ,"MOV labs+X,A"   ,"MOV labs+Y,A"   ,"MOV (dp)+Y,A"   ,
 "MOV dp,X"       ,"MOV dp+Y,X"     ,"MOVW dp,YA"     ,"MOV dp+X,Y"     ,
 "DEC Y"          ,"MOV A,Y"        ,"CBNE dp+X,rel"  ,"DAA A"          ,

 "CLRV"           ,"TCALL 14"       ,"SET1 dp.7"      ,"BBS dp.7,rel"   ,
 "MOV A,dp"       ,"MOV A,labs"     ,"MOV A,(X)"      ,"MOV A,(dp+X)"   ,
 "MOV A,#imm"     ,"MOV X,labs"     ,"NOT1 mem.bit"   ,"MOV Y,dp"       ,
 "MOV Y,labs"     ,"NOTC"           ,"POP Y"          ,"SLEEP"          ,

 "BEQ rel"        ,"TCALL 15"       ,"CLR1 dp.7"      ,"BBC dp.7,rel"   ,
 "MOV A,dp+X"     ,"MOV A,labs+X"   ,"MOV A,labs+Y"   ,"MOV A,(dp)+Y"   ,
 "MOV X,dp"       ,"MOV X,dp+Y"     ,"MOV dp(d),dp(s)","MOV Y,dp+X"     ,
 "INC Y"          ,"MOV Y,A"        ,"DBNZ Y,rel"     ,"STOP"
};

void DisplaySPC()
{
 char Message[9];
 int c;

 printf("SPC registers\n");
 printf("PC:%04X  SP:%04X  NVPBHIZC\n", _SPC_PC, _SPC_SP);

 _SPC_PSW = get_SPC_PSW();
 for (c = 0; c < 8; c++) Message[7 - c] = (_SPC_PSW & (1 << c)) ? '1' : '0';
 Message[8] = 0;

 printf("A:%02X  X:%02X  Y:%02X  %s\n",
  (unsigned) _SPC_A, (unsigned) _SPC_X, (unsigned) _SPC_Y, Message);

 printf("SPC R  0:%02X  1:%02X  2:%02X  3:%02X\n",
  (unsigned) SPC_PORT0R, (unsigned) SPC_PORT1R,
  (unsigned) SPC_PORT2R, (unsigned) SPC_PORT3R);
 printf("SPC W  0:%02X  1:%02X  2:%02X  3:%02X\n",
  (unsigned) SPC_PORT0W, (unsigned) SPC_PORT1W,
  (unsigned) SPC_PORT2W, (unsigned) SPC_PORT3W);
 printf("SPC counters:%1X %1X %1X targets:%02X %02X %02X CTRL:%02X\n",
  SPC_T0_counter, SPC_T1_counter, SPC_T2_counter,
  SPC_T0_target & 0xFF, SPC_T1_target & 0xFF, SPC_T2_target & 0xFF,
  SPC_CTRL);
}

/* Simple at present... register dump will be done l8r */
void InvalidSPCOpcode()
{
 set_gfx_mode(GFX_TEXT,0,0,0,0);

 DisplaySPC();

 printf("Unemulated SPC opcode 0x%02X (%s)\n",
  (unsigned) Map_Byte, SPC_OpID[Map_Byte]);
 printf("At address 0x%04X\n", (unsigned) (Map_Address & 0xFFFF));

#ifdef DEBUG
 printf("Old Address 0x%04X\n", OLD_SPC_ADDRESS);
 save_debug_dumps();
#endif

 exit(1);
}

RGB DebugPal[]={{63,63,63,0}};

unsigned char DEBUG_STRING[]="Voice : %d";

unsigned char DEBUG_VALUE1=0;
unsigned char DEBUG_VALUE2=0;
unsigned char DEBUG_VALUE3=0;
unsigned char DEBUG_VALUE4=0;
unsigned char DEBUG_VALUE5=0;
unsigned char DEBUG_VALUE6=0;
unsigned char DEBUG_VALUE7=0;
unsigned char DEBUG_VALUE8=0;

extern unsigned Timer_Counter_Throttle;
void Display_Debug()
{
/*
 set_palette_range(&DebugPal[-255],255,255,TRUE);   // Set the GUI palette up.
 textprintf(screen,font,50,50,255,"Throttle: %u",Timer_Counter_Throttle);
 textprintf(screen,font,50,50,255,DEBUG_STRING,(int)DEBUG_VALUE1);
 textprintf(screen,font,50,60,255,DEBUG_STRING,(int)DEBUG_VALUE2);
 textprintf(screen,font,50,70,255,DEBUG_STRING,(int)DEBUG_VALUE3);
 textprintf(screen,font,50,80,255,DEBUG_STRING,(int)DEBUG_VALUE4);
 textprintf(screen,font,50,90,255,DEBUG_STRING,(int)DEBUG_VALUE5);
 textprintf(screen,font,50,100,255,DEBUG_STRING,(int)DEBUG_VALUE6);
 textprintf(screen,font,50,110,255,DEBUG_STRING,(int)DEBUG_VALUE7);
 textprintf(screen,font,50,120,255,DEBUG_STRING,(int)DEBUG_VALUE8);
 */
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -