Skip to content

Commit 81093f1

Browse files
committed
dsr behavior
1 parent 0d4b935 commit 81093f1

File tree

4 files changed

+17
-13
lines changed

4 files changed

+17
-13
lines changed

emulator/src/Chipset/CPU.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "Chipset.hpp"
77
#include "MMU.hpp"
88

9+
#include <cstdint>
910
#include <iomanip>
1011
#include <sstream>
1112

@@ -468,4 +469,12 @@ namespace casioemu {
468469
}
469470
return output.str();
470471
}
472+
473+
uint8_t CPU::GetDSR() const {
474+
return impl_last_dsr;
475+
}
476+
477+
void CPU::SetDSR(uint8_t dsr) {
478+
impl_last_dsr = dsr;
479+
}
471480
} // namespace casioemu

emulator/src/Chipset/CPU.hpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ namespace casioemu {
1818
struct RegisterStub {
1919
size_t type_size;
2020
std::string name;
21-
2221
uint16_t raw;
2322
};
2423

@@ -28,32 +27,25 @@ namespace casioemu {
2827
type_size = sizeof(value_type);
2928
name = "?";
3029
}
31-
3230
operator value_type() {
3331
return raw;
3432
}
35-
3633
Register<value_type> &operator=(value_type value) {
3734
raw = value;
3835
return *this;
3936
}
40-
4137
Register<value_type> &operator&=(value_type value) {
4238
return *this = raw & value;
4339
}
44-
4540
Register<value_type> &operator|=(value_type value) {
4641
return *this = raw | value;
4742
}
48-
4943
Register<value_type> &operator^=(value_type value) {
5044
return *this = raw ^ value;
5145
}
52-
5346
Register<value_type> &operator+=(value_type value) {
5447
return *this = raw + value;
5548
}
56-
5749
Register<value_type> &operator-=(value_type value) {
5850
return *this = raw - value;
5951
}
@@ -120,6 +112,8 @@ namespace casioemu {
120112
size_t GetExceptionLevel();
121113
bool GetMasterInterruptEnable();
122114
std::string GetBacktrace() const;
115+
uint8_t GetDSR() const;
116+
void SetDSR(uint8_t);
123117

124118
private:
125119
struct StackFrame {

emulator/src/Chipset/MMU.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,16 @@
88

99
namespace casioemu {
1010
const uint8_t UNMAPPED_VALUE = 0x00;
11+
const size_t NSEGS = 0x100;
1112

1213
MMU::MMU(Emulator &_emulator) : emulator(_emulator) {
13-
segment_dispatch = new MemoryByte *[0x10];
14-
for (size_t ix = 0; ix != 0x10; ++ix)
14+
segment_dispatch = new MemoryByte *[NSEGS];
15+
for (size_t ix = 0; ix != NSEGS; ++ix)
1516
segment_dispatch[ix] = nullptr;
1617
}
1718

1819
MMU::~MMU() {
19-
for (size_t ix = 0; ix != 0x10; ++ix)
20+
for (size_t ix = 0; ix != NSEGS; ++ix)
2021
if (segment_dispatch[ix])
2122
delete[] segment_dispatch[ix];
2223
delete[] segment_dispatch;

emulator/src/Peripheral/Miscellaneous.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ namespace casioemu {
1414
void Miscellaneous::Initialise() {
1515
region_dsr.Setup(
1616
0xF000, 1, "Miscellaneous/DSR", this,
17-
[](MMURegion *region, size_t) { return (uint8_t)((Miscellaneous *)region->userdata)->emulator.chipset.cpu.reg_dsr; },
18-
[](MMURegion *region, size_t, uint8_t data) { ((Miscellaneous *)region->userdata)->emulator.chipset.cpu.reg_dsr = data; },
17+
[](MMURegion *region, size_t) { return ((Miscellaneous *)region->userdata)->emulator.chipset.cpu.GetDSR(); },
18+
[](MMURegion *region, size_t, uint8_t data) { ((Miscellaneous *)region->userdata)->emulator.chipset.cpu.SetDSR(data); },
1919
emulator);
2020

2121
// * TODO: figure out what these are

0 commit comments

Comments
 (0)