func runImage(bs []byte, dasm bool, n int) { if dasm { err := dasm8.DumpImage(bytes.NewReader(bs), os.Stdout) if err != nil { fmt.Println(err) } } if len(bs) == 0 { fmt.Println("(the image is empty)") return } m := arch8.NewMachine(new(arch8.Config)) if err := m.LoadImageBytes(bs); err != nil { fmt.Println(err) return } ncycle, exp := m.Run(n) fmt.Printf("(%d cycles)\n", ncycle) if exp != nil { if !arch8.IsHalt(exp) { fmt.Println(exp) err := arch8.FprintStack(os.Stdout, m, exp) if err != nil { fmt.Println(err) } } } else { fmt.Println("(end of time)") } }
func main() { flag.Parse() args := flag.Args() if len(args) != 1 { log.Fatal("need exactly one input file\n") } fname := args[0] if *doDasm { f, err := os.Open(fname) defer f.Close() err = dasm8.DumpImage(f, os.Stdout) if err != nil { log.Fatal(err) } } else if *printDebug { f, err := os.Open(fname) defer f.Close() secs, err := e8.Read(f) if err != nil { log.Fatal(err) } for _, sec := range secs { if sec.Type != e8.Debug { continue } tab, err := debug8.UnmarshalTable(sec.Bytes) if err != nil { log.Fatal(err) } tab.PrintTo(os.Stdout) } } else { bs, err := ioutil.ReadFile(fname) if err != nil { log.Fatal(err) } n, e := run(bs) fmt.Printf("(%d cycles)\n", n) if e != nil { if !arch8.IsHalt(e) { fmt.Println(e) } } else { fmt.Println("(end of time)") } } }
func runImage(bs []byte, dasm bool, n int) { if dasm { err := dasm8.DumpImage(bytes.NewReader(bs), os.Stdout) if err != nil { fmt.Println(err) } } if len(bs) == 0 { fmt.Println("(the image is empty)") return } ncycle, e := arch8.RunImage(bs, n) fmt.Printf("(%d cycles)\n", ncycle) if e != nil { if !arch8.IsHalt(e) { fmt.Println(e) } } else { fmt.Println("(end of time)") } }