aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2018-01-16 00:31:13 +0100
committerDimitri Sokolyuk <demon@dim13.org>2018-01-16 00:31:13 +0100
commitfe98486c8baef779bdf7f2f73f6ffe7ee1281822 (patch)
tree6bac838dc41a005f00beae4a265483b672ad7a57
parent78526ca97410f4ae2ed727243e28b182a1dc1633 (diff)
rename
-rw-r--r--core.go10
-rw-r--r--stack.go15
2 files changed, 13 insertions, 12 deletions
diff --git a/core.go b/core.go
index 32f37fb..9a82b36 100644
--- a/core.go
+++ b/core.go
@@ -118,26 +118,26 @@ func (c *Core) Eval(ins Instruction) {
c.st0 = c.d.pop()
case ALU:
if v.RtoPC {
- c.pc = c.r.get() >> 1
+ c.pc = c.r.peek() >> 1
}
if v.NtoAtT {
- c.writeAt(c.st0, c.d.get())
+ c.writeAt(c.st0, c.d.peek())
}
st0 := c.newST0(v.Opcode)
c.d.move(v.Ddir)
c.r.move(v.Rdir)
if v.TtoN {
- c.d.set(c.st0)
+ c.d.replace(c.st0)
}
if v.TtoR {
- c.r.set(c.st0)
+ c.r.replace(c.st0)
}
c.st0 = st0
}
}
func (c *Core) newST0(opcode uint16) uint16 {
- T, N, R := c.st0, c.d.get(), c.r.get()
+ T, N, R := c.st0, c.d.peek(), c.r.peek()
switch opcode {
case opT: // T
return T
diff --git a/stack.go b/stack.go
index aed4e6a..c116c5a 100644
--- a/stack.go
+++ b/stack.go
@@ -8,24 +8,25 @@ type stack struct {
}
func (s *stack) move(dir int8) {
- s.sp = (s.sp + dir + stackSize) % stackSize
+ s.sp = (s.sp + dir) & (stackSize - 1)
}
func (s *stack) push(v uint16) {
- s.move(1)
- s.set(v)
+ s.sp = (s.sp + 1) & (stackSize - 1)
+ s.data[s.sp] = v
}
func (s *stack) pop() uint16 {
- defer s.move(-1)
- return s.get()
+ v := s.data[s.sp]
+ s.sp = (s.sp - 1) & (stackSize - 1)
+ return v
}
-func (s *stack) get() uint16 {
+func (s *stack) peek() uint16 {
return s.data[s.sp]
}
-func (s *stack) set(v uint16) {
+func (s *stack) replace(v uint16) {
s.data[s.sp] = v
}