summaryrefslogtreecommitdiff
path: root/vdp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'vdp.cpp')
-rw-r--r--vdp.cpp58
1 files changed, 45 insertions, 13 deletions
diff --git a/vdp.cpp b/vdp.cpp
index df3a7cc..6acb7ea 100644
--- a/vdp.cpp
+++ b/vdp.cpp
@@ -131,7 +131,8 @@ static constexpr uint16_t kScrollSpeedMask = BitsCountToMask(10);
// Each pixel has 4 bit depth color
static constexpr uint16_t kPixelColorMask = BitsCountToMask(kBitsPerPixel);
-static const char* reg_mode_set_1_bits[8] = {
+static const char* reg_mode_set_1_bits_desc[16] = {
+ "", "", "", "", "", "", "", "",
"Unused(7)",
"Unused(6)",
"Unused(5)",
@@ -142,7 +143,8 @@ static const char* reg_mode_set_1_bits[8] = {
"Unused(0)",
};
-static const char* reg_mode_set_2_bits[8] = {
+static const char* reg_mode_set_2_bits_desc[16] = {
+ "", "", "", "", "", "", "", "",
"Unused(7)",
"Display(6)",
"VInt(5)",
@@ -153,7 +155,8 @@ static const char* reg_mode_set_2_bits[8] = {
"Unused(0)",
};
-static const char* reg_mode_set_3_bits[8] = {
+static const char* reg_mode_set_3_bits_desc[16] = {
+ "", "", "", "", "", "", "", "",
"Unused(7)",
"Unused(6)",
"Unused(5)",
@@ -164,7 +167,8 @@ static const char* reg_mode_set_3_bits[8] = {
"HScrollLo(0)",
};
-static const char* reg_mode_set_4_bits[8] = {
+static const char* reg_mode_set_4_bits_desc[16] = {
+ "", "", "", "", "", "", "", "",
"H40CellHi(7)",
"Unused(6)",
"Unused(5)",
@@ -175,12 +179,26 @@ static const char* reg_mode_set_4_bits[8] = {
"H40CellLo(0)",
};
-static void TraceRegBits(FILE* s, const char* bits_desc[8], const uint8_t val)
+static const char* reg_status_bits_desc[16] = {
+ "", "", "", "", "", "",
+ "FIFOEmpty(9)",
+ "FIFOFull(8)",
+ "VInt(7)",
+ "SpriteOverflow(6)",
+ "SpriteCollision(5)",
+ "OddFrame(4)",
+ "InVBlank(3)",
+ "InHBlank(2)",
+ "DMABusy(1)",
+ "PAL(0)",
+};
+
+static void TraceRegBits(FILE* s, const char* bits_desc[16], const uint16_t val)
{
- fprintf(s, "(");
+ fprintf(s, " (");
bool separator{};
- for (size_t i = 0; i < 8; i++) {
- if (val & (1 << (7 - i))) {
+ for (size_t i = 0; i < 16; i++) {
+ if (val & (1 << (15 - i))) {
if (separator) {
fprintf(s, " | ");
separator = false;
@@ -198,26 +216,31 @@ static void TraceRegWrite(FILE* const s, const uint8_t reg, const uint8_t val)
fprintf(s, ": reg 0x%02x(%s) = 0x%02x", reg, VDP::RegIDToString(reg_id), val);
switch (reg_id) {
case VDP::RegID::kModeSet1:
- return TraceRegBits(s, reg_mode_set_1_bits, val);
+ return TraceRegBits(s, reg_mode_set_1_bits_desc, val);
case VDP::RegID::kModeSet2:
- return TraceRegBits(s, reg_mode_set_2_bits, val);
+ return TraceRegBits(s, reg_mode_set_2_bits_desc, val);
case VDP::RegID::kScrollAAddress:
+ fprintf(s, " (0x%04x)", uint16_t(val & 0x38) << 10);
break;
case VDP::RegID::kWindowAddress:
+ fprintf(s, " (0x%04x)", uint16_t(val & 0x3e) << 10);
break;
case VDP::RegID::kScrollBAddress:
+ fprintf(s, " (0x%04x)", uint16_t(val & 0x7) << 13);
break;
case VDP::RegID::kSpritesTableAddress:
+ fprintf(s, " (0x%04x)", uint16_t(val & 0x7f) << 9);
break;
case VDP::RegID::kBackgroundColor:
break;
case VDP::RegID::kHint:
break;
case VDP::RegID::kModeSet3:
- return TraceRegBits(s, reg_mode_set_3_bits, val);
+ return TraceRegBits(s, reg_mode_set_3_bits_desc, val);
case VDP::RegID::kModeSet4:
- return TraceRegBits(s, reg_mode_set_4_bits, val);
+ return TraceRegBits(s, reg_mode_set_4_bits_desc, val);
case VDP::RegID::kHScrollTableAddress:
+ fprintf(s, " (0x%04x)", uint16_t(val & 0x3f) << 10);
break;
case VDP::RegID::kAutoIncrement:
break;
@@ -232,10 +255,18 @@ static void TraceRegWrite(FILE* const s, const uint8_t reg, const uint8_t val)
case VDP::RegID::kDMALengthCounterHigh:
break;
case VDP::RegID::kDMASourceAddressLow:
+ fprintf(s, " (0xXXXX%02x)", val);
break;
case VDP::RegID::kDMASourceAddressMid:
+ fprintf(s, " (0xXX%02xXX)", val);
break;
case VDP::RegID::kDMASourceAddressHigh:
+ {
+ const char* op = (val & 0x80)
+ ? ((val & 0x40) ? "VRAM Copy" : "VRAM Fill")
+ : "MemToVRAM";
+ fprintf(s, " (%s 0x%02xXXXX)", op, val & ((val & 0x80) ? 0x3f : 0x7f));
+ }
break;
case VDP::RegID::kRegistersCount:
break;
@@ -837,7 +868,8 @@ uint16_t VDP::readStatusRegister() const
| (_status.pal_mode << 0)
;
if (DEBUG_TRACE_VDP_ACCESS) {
- printf(": Status %04x", value);
+ fprintf(stdout, ": Status %04x", value);
+ TraceRegBits(stdout, reg_status_bits_desc, value);
}
return value;
}