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

📄 memory.c

📁 psp上的GBA模拟器
💻 C
📖 第 1 页 / 共 5 页
字号:
      address8(io_registers, address) = value;      break;    // Sound FIFO A    case 0xA0:      sound_timer_queue8(0, value);      break;    // Sound FIFO B    case 0xA4:      sound_timer_queue8(1, value);      break;    // DMA control (trigger byte)    case 0xBB:      access_register8_low(0xBA);      trigger_dma(0);      break;    case 0xC7:      access_register8_low(0xC6);      trigger_dma(1);      break;    case 0xD3:      access_register8_low(0xD2);      trigger_dma(2);      break;    case 0xDF:      access_register8_low(0xDE);      trigger_dma(3);      break;    // Timer counts    case 0x100:      access_register8_low(0x100);      count_timer(0);      break;    case 0x101:      access_register8_high(0x100);      count_timer(0);      break;    case 0x104:      access_register8_low(0x104);      count_timer(1);      break;    case 0x105:      access_register8_high(0x104);      count_timer(1);      break;    case 0x108:      access_register8_low(0x108);      count_timer(2);      break;    case 0x109:      access_register8_high(0x108);      count_timer(2);      break;    case 0x10C:      access_register8_low(0x10C);      count_timer(3);      break;    case 0x10D:      access_register8_high(0x10C);      count_timer(3);      break;    // Timer control (trigger byte)    case 0x103:      access_register8_low(0x102);      trigger_timer(0);      break;    case 0x107:      access_register8_low(0x106);      trigger_timer(1);      break;    case 0x10B:      access_register8_low(0x10A);      trigger_timer(2);      break;    case 0x10F:      access_register8_low(0x10E);      trigger_timer(3);      break;    // IF    case 0x202:      address8(io_registers, 0x202) &= ~value;      break;    case 0x203:      address8(io_registers, 0x203) &= ~value;      break;    // Halt    case 0x301:      if((value & 0x01) == 0)        reg[CPU_HALT_STATE] = CPU_HALT;      else        reg[CPU_HALT_STATE] = CPU_STOP;      return CPU_ALERT_HALT;      break;    default:      address8(io_registers, address) = value;      break;  }  return CPU_ALERT_NONE;}cpu_alert_type function_cc write_io_register16(u32 address, u32 value){  switch(address)  {    case 0x00:    {      u32 dispcnt = io_registers[REG_DISPCNT];      if(value != dispcnt)        oam_update = 1;      address16(io_registers, 0x00) = value;      break;    }    // DISPSTAT    case 0x04:      address16(io_registers, 0x04) =       (address16(io_registers, 0x04) & 0x07) | (value & ~0x07);      break;    // VCOUNT    case 0x06:      break;    // BG2 reference X    case 0x28:      access_register16_low(0x28);      affine_reference_x[0] = (s32)(value << 4) >> 4;      address32(io_registers, 0x28) = value;      break;    case 0x2A:      access_register16_high(0x28);      affine_reference_x[0] = (s32)(value << 4) >> 4;      address32(io_registers, 0x28) = value;      break;    // BG2 reference Y    case 0x2C:      access_register16_low(0x2C);      affine_reference_y[0] = (s32)(value << 4) >> 4;      address32(io_registers, 0x2C) = value;      break;    case 0x2E:      access_register16_high(0x2C);      affine_reference_y[0] = (s32)(value << 4) >> 4;      address32(io_registers, 0x2C) = value;      break;    // BG3 reference X    case 0x38:      access_register16_low(0x38);      affine_reference_x[1] = (s32)(value << 4) >> 4;      address32(io_registers, 0x38) = value;      break;    case 0x3A:      access_register16_high(0x38);      affine_reference_x[1] = (s32)(value << 4) >> 4;      address32(io_registers, 0x38) = value;      break;    // BG3 reference Y    case 0x3C:      access_register16_low(0x3C);      affine_reference_y[1] = (s32)(value << 4) >> 4;      address32(io_registers, 0x3C) = value;      break;    case 0x3E:      access_register16_high(0x3C);      affine_reference_y[1] = (s32)(value << 4) >> 4;      address32(io_registers, 0x3C) = value;      break;    // Sound 1 control sweep    case 0x60:      gbc_sound_tone_control_sweep();      break;    // Sound 1 control duty/length/envelope    case 0x62:      gbc_sound_tone_control_low(0, 0x62);      break;    // Sound 1 control frequency    case 0x64:      gbc_sound_tone_control_high(0, 0x64);      break;    // Sound 2 control duty/length/envelope    case 0x68:      gbc_sound_tone_control_low(1, 0x68);      break;    // Sound 2 control frequency    case 0x6C:      gbc_sound_tone_control_high(1, 0x6C);      break;    // Sound 3 control wave    case 0x70:      gbc_sound_wave_control();      break;    // Sound 3 control length/volume    case 0x72:      gbc_sound_tone_control_low_wave();      break;    // Sound 3 control frequency    case 0x74:      gbc_sound_tone_control_high_wave();      break;    // Sound 4 control length/envelope    case 0x78:      gbc_sound_tone_control_low(3, 0x78);      break;    // Sound 4 control frequency    case 0x7C:      gbc_sound_noise_control();      break;    // Sound control L    case 0x80:      gbc_trigger_sound();      break;    // Sound control H    case 0x82:      trigger_sound();      break;    // Sound control X    case 0x84:      sound_on();      break;    // Sound wave RAM    case 0x90 ... 0x9E:      gbc_sound_wave_update = 1;      address16(io_registers, address) = value;      break;    // Sound FIFO A    case 0xA0:      sound_timer_queue16(0, value);      break;    // Sound FIFO B    case 0xA4:      sound_timer_queue16(1, value);      break;    // DMA control    case 0xBA:      trigger_dma(0);      break;    case 0xC6:      trigger_dma(1);      break;    case 0xD2:      trigger_dma(2);      break;    case 0xDE:      trigger_dma(3);      break;    // Timer counts    case 0x100:      count_timer(0);      break;    case 0x104:      count_timer(1);      break;    case 0x108:      count_timer(2);      break;    case 0x10C:      count_timer(3);      break;    // Timer control    case 0x102:      trigger_timer(0);      break;    case 0x106:      trigger_timer(1);      break;    case 0x10A:      trigger_timer(2);      break;    case 0x10E:      trigger_timer(3);      break;    // P1    case 0x130:      break;    // Interrupt flag    case 0x202:      address16(io_registers, 0x202) &= ~value;      break;    // WAITCNT    case 0x204:      break;    // Halt    case 0x300:      if(((value >> 8) & 0x01) == 0)        reg[CPU_HALT_STATE] = CPU_HALT;      else        reg[CPU_HALT_STATE] = CPU_STOP;      return CPU_ALERT_HALT;    default:      address16(io_registers, address) = value;      break;  }  return CPU_ALERT_NONE;}cpu_alert_type function_cc write_io_register32(u32 address, u32 value){  switch(address)  {    // BG2 reference X    case 0x28:      affine_reference_x[0] = (s32)(value << 4) >> 4;      address32(io_registers, 0x28) = value;      break;    // BG2 reference Y    case 0x2C:      affine_reference_y[0] = (s32)(value << 4) >> 4;      address32(io_registers, 0x2C) = value;      break;    // BG3 reference X    case 0x38:      affine_reference_x[1] = (s32)(value << 4) >> 4;      address32(io_registers, 0x38) = value;      break;    // BG3 reference Y    case 0x3C:      affine_reference_y[1] = (s32)(value << 4) >> 4;      address32(io_registers, 0x3C) = value;      break;    // Sound FIFO A    case 0xA0:      sound_timer_queue32(0, value);      break;    // Sound FIFO B    case 0xA4:      sound_timer_queue32(1, value);      break;    default:    {      cpu_alert_type alert_low =        write_io_register16(address, value & 0xFFFF);      cpu_alert_type alert_high =        write_io_register16(address + 2, value >> 16);      if(alert_high)        return alert_high;      return alert_low;    }  }  return CPU_ALERT_NONE;}#define write_palette8(address, value)                                        \#define write_palette16(address, value)                                       \{                                                                             \  u32 palette_address = address;                                              \  address16(palette_ram, palette_address) = value;                            \  convert_palette(value);                                                     \  address16(palette_ram_converted, palette_address) = value;                  \}                                                                             \#define write_palette32(address, value)                                       \{                                                                             \  u32 palette_address = address;                                              \  u32 value_high = value >> 16;                                               \  u32 value_low = value & 0xFFFF;                                             \

⌨️ 快捷键说明

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