goapple2/a2/disasm.go

47 lines
1.0 KiB
Go

package main
import (
"io/ioutil"
"log"
"os"
"github.com/gonuts/commander"
"github.com/zellyn/go6502/asm"
)
var cmdDisasm = &commander.Command{
Run: runDisasm,
UsageLine: "disasm [-a address] filename",
Short: "disassemble binary files",
Long: `
Disasm is a very simple disassembler for 6502 binary files.
`,
}
var disasmAddress uint // disasm -a flag
func init() {
cmdDisasm.Flag.UintVar(&disasmAddress, "a", 0, "The starting memory address.")
}
func runDisasm(cmd *commander.Command, args []string) {
if len(args) != 1 {
cmd.Usage()
return
}
bytes, err := ioutil.ReadFile(args[0])
if err != nil {
log.Fatal(err)
}
if len(bytes) > 0x10000 {
log.Fatalf("File %s is %04X bytes long, which is more than $10000.", args[0], len(bytes))
}
if int(disasmAddress)+len(bytes) > 0x10000 {
log.Fatalf("Starting address ($%04X) + file length ($%04X) = $%X, which is > $10000",
disasmAddress, len(bytes), int(disasmAddress)+len(bytes))
}
asm.DisasmBlock(bytes, uint16(disasmAddress), os.Stdout)
}