This repository has been archived by the owner on Jun 3, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
debugcpu.py
74 lines (64 loc) · 1.92 KB
/
debugcpu.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import prettyhex
class Registers:
r = {
"a": 0,
"b": 0,
"c": 0,
"d": 0,
"e": 0,
"h": 0,
"l": 0,
"sp": 0
}
pc = 0x0
flagZ = 0
flagN = 0
flagH = 0
flagC = 0
ime_to_be_setted = 0
ime = 0
def __getitem__(self, key) -> int:
if key == "f":
return (self.flagZ << 7) + (self.flagN << 6) + (self.flagH << 5) + (self.flagC << 4)
elif key == "af":
return (self.r["a"] << 8) + self["f"]
elif key == "bc":
return (self.r["b"] << 8) + self.r["c"]
elif key == "de":
return (self.r["d"] << 8) + self.r["e"]
elif key == "hl":
return (self.r["h"] << 8) + self.r["l"]
else:
return self.r[key]
def __setitem__(self, key, value) -> None:
if key == "af":
self.r["a"] = value >> 8
self["f"] = value & 255
elif key == "bc":
self.r["b"] = value >> 8
self.r["c"] = value & 255
elif key == "de":
self.r["d"] = value >> 8
self.r["e"] = value & 255
elif key == "hl":
self.r["h"] = value >> 8
self.r["l"] = value & 255
elif key == "f":
self.flagZ = value >> 7
self.flagN = (value >> 6) & 1
self.flagH = (value >> 5) & 1
self.flagC = (value >> 4) & 1
else:
self.r[key] = value
def debug_compare(self) -> list:
return [self["af"], self["bc"], self["de"], self["hl"], self["sp"], self.pc]
class Memory:
mem = [0 for _ in range(2**16)]
def __getitem__(self, key) -> int:
if 0x0000 <= key <= 0xffff:
return self.mem[key]
def __setitem__(self, key, value) -> None:
if 0x0000 <= key <= 0xffff:
self.mem[key] = value
def reset(self) -> None:
self.mem = [0 for _ in range(2 ** 16)]