aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/cpu/opcodes/Loads16Bit.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/cpu/opcodes/Loads16Bit.kt')
-rw-r--r--src/main/kotlin/cpu/opcodes/Loads16Bit.kt15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/main/kotlin/cpu/opcodes/Loads16Bit.kt b/src/main/kotlin/cpu/opcodes/Loads16Bit.kt
index 6c915cf..671a02d 100644
--- a/src/main/kotlin/cpu/opcodes/Loads16Bit.kt
+++ b/src/main/kotlin/cpu/opcodes/Loads16Bit.kt
@@ -1,6 +1,8 @@
package cpu.opcodes
import cpu.Operation
+import cpu.Registers
+import ram.Ram
import BitManipulation as bm
// 8-Bit Loads
@@ -35,6 +37,17 @@ var loads16Bit = mapOf(
0xE5 to Operation("PUSH HL", 0, 16, {r, m, _ ->
m.writeByte(r.decrementAndGetSP(), bm.getMsb(r.HL))
m.writeByte(r.decrementAndGetSP(), bm.getLsb(r.HL))
- })
+ }),
+
+ 0xF1 to Operation("POP AF", 0, 12, {r, m, _ -> r.AF = pop(r, m)}),
+ 0xC1 to Operation("POP BC", 0, 12, {r, m, _ -> r.BC = pop(r, m)}),
+ 0xD1 to Operation("POP DE", 0, 12, {r, m, _ -> r.DE = pop(r, m)}),
+ 0xE1 to Operation("POP HL", 0, 12, {r, m, _ -> r.HL = pop(r, m)})
)
+
+fun pop(r: Registers, m: Ram): Int {
+ val lsb = m.readByte(r.getAndIncrementSP())
+ val msb = m.readByte(r.getAndIncrementSP())
+ return bm.bytesToWord(msb, lsb)
+}