aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/dump/main.go23
-rw-r--r--eval.go7
-rw-r--r--parse.go25
3 files changed, 25 insertions, 30 deletions
diff --git a/cmd/dump/main.go b/cmd/dump/main.go
index afc5aca..f579c37 100644
--- a/cmd/dump/main.go
+++ b/cmd/dump/main.go
@@ -1,13 +1,15 @@
package main
import (
+ "encoding/binary"
"fmt"
+ "os"
"dim13.org/j1"
)
func main() {
- body, err := j1.ReadBin("testdata/j1.bin")
+ body, err := ReadBin("testdata/j1.bin")
if err != nil {
panic(err)
}
@@ -15,3 +17,22 @@ func main() {
fmt.Printf("%0.4X %0.4X\t%s\n", 2*i, v, j1.Decode(v))
}
}
+
+// ReadBin file
+func ReadBin(fname string) ([]uint16, error) {
+ fd, err := os.Open(fname)
+ if err != nil {
+ return nil, err
+ }
+ defer fd.Close()
+ stat, err := fd.Stat()
+ if err != nil {
+ return nil, err
+ }
+ size := stat.Size()
+ body := make([]uint16, int(size)/2)
+ if err := binary.Read(fd, binary.BigEndian, &body); err != nil {
+ return nil, err
+ }
+ return body, nil
+}
diff --git a/eval.go b/eval.go
index e51a3dd..4ca7319 100644
--- a/eval.go
+++ b/eval.go
@@ -19,11 +19,8 @@ type J1 struct {
}
func (vm *J1) String() string {
- s := fmt.Sprintf("\tPC %0.4X\n", vm.pc)
- s += fmt.Sprintf("\tST %0.4X\n", vm.st0)
- s += fmt.Sprintf("\tD %0.4X\n", vm.dstack[:vm.dsp])
- s += fmt.Sprintf("\tR %0.4X\n", vm.rstack[:vm.rsp])
- return s
+ return fmt.Sprintf("PC=%0.4X ST=%0.4X D=%0.4X R=%0.4X\n",
+ vm.pc, vm.st0, vm.dstack[:vm.dsp], vm.rstack[:vm.rsp])
}
// LoadBytes into memory
diff --git a/parse.go b/parse.go
index 1a768c6..97d1c24 100644
--- a/parse.go
+++ b/parse.go
@@ -1,29 +1,6 @@
package j1
-import (
- "encoding/binary"
- "fmt"
- "os"
-)
-
-// ReadBin file
-func ReadBin(fname string) ([]uint16, error) {
- fd, err := os.Open(fname)
- if err != nil {
- return nil, err
- }
- defer fd.Close()
- stat, err := fd.Stat()
- if err != nil {
- return nil, err
- }
- size := stat.Size()
- body := make([]uint16, int(size)/2)
- if err := binary.Read(fd, binary.BigEndian, &body); err != nil {
- return nil, err
- }
- return body, nil
-}
+import "fmt"
// Decode instruction
func Decode(v uint16) Instruction {