blob: 70c7f0666fa6ad323a886cdc4e959dcf9fd863ef (
plain)
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
package cpu
import BitManipulation as bm
class Registers {
// General purpose registers
var B: Int = 0
set(value) {
bm.validateUnsigned8Bit(value)
field = value
}
var C: Int = 0
set(value) {
bm.validateUnsigned8Bit(value)
field = value
}
var D: Int = 0
set(value) {
bm.validateUnsigned8Bit(value)
field = value
}
var E: Int = 0
set(value) {
bm.validateUnsigned8Bit(value)
field = value
}
var H: Int = 0
set(value) {
bm.validateUnsigned8Bit(value)
field = value
}
var L: Int = 0
set(value) {
bm.validateUnsigned8Bit(value)
field = value
}
// Special registers
var A: Int = 0
set(value) {
bm.validateUnsigned8Bit(value)
field = value
}
var F: Int = 0
set(value) {
bm.validateUnsigned8Bit(value)
field = value
}
var SP: Int = 0
set(value) {
bm.validateUnsigned16Bit(value)
field = value
}
var PC: Int = 0
set(value) {
bm.validateUnsigned16Bit(value)
field = value
}
// 16-Bit accessors
var AF: Int
get() {
return bm.bytesToWord(A, F)
}
set(value) {
bm.validateUnsigned16Bit(value)
A = bm.getMsb(value)
F = bm.getLsb(value)
}
var BC: Int
get() {
return bm.bytesToWord(B, C)
}
set(value) {
bm.validateUnsigned16Bit(value)
B = bm.getMsb(value)
C = bm.getLsb(value)
}
var DE: Int
get() {
return bm.bytesToWord(D, E)
}
set(value) {
bm.validateUnsigned16Bit(value)
D = bm.getMsb(value)
E = bm.getLsb(value)
}
var HL: Int
get() {
return bm.bytesToWord(H, L)
}
set(value) {
bm.validateUnsigned16Bit(value)
H = bm.getMsb(value)
L = bm.getLsb(value)
}
fun getAndDecrementHL(): Int {
val currentHL = HL
if(HL > 0x0000) { // TODO - is this correct? Or should it underflow to 0xFFFF?. Also for increment op.
HL--
}
return currentHL
}
fun getAndIncrementHL(): Int {
val currentHL = HL
if(HL < 0xFFFF) {
HL++
}
return currentHL
}
fun decrementAndGetSP(): Int {
return if(SP > 0x0000) {
--SP
} else {
SP
}
}
fun getAndIncrementSP(): Int {
val currentSP = SP
if(SP < 0xFFFF) {
SP++
}
return currentSP
}
}
|