From 986acf691778085c56853c4626bcd5293ceabf75 Mon Sep 17 00:00:00 2001 From: Zellyn Hunter Date: Sun, 21 Apr 2013 16:49:28 -0700 Subject: [PATCH] Added disassembly stuff --- asm/disasm.go | 21 +++++++++++++++++++++ docs/assembler.org | 8 ++++++++ 2 files changed, 29 insertions(+) create mode 100644 docs/assembler.org diff --git a/asm/disasm.go b/asm/disasm.go index 4107fbc..25b4fe2 100644 --- a/asm/disasm.go +++ b/asm/disasm.go @@ -5,6 +5,7 @@ package asm import ( "fmt" + "io" "github.com/zellyn/go6502/opcodes" ) @@ -73,3 +74,23 @@ func Disasm(pc uint16, byte0, byte1, byte2 byte) (string, string, int) { addr := addrString(pc, byte1, byte2, length, op.Mode) return bytes, op.Name + " " + addr, length } + +// DisasmBlock disassembles an entire block, writing out the disassembly. +func DisasmBlock(block []byte, startAddr uint16, w io.Writer) { + l := len(block) + for i := 0; i < l; i++ { + byte0 := block[i] + byte1 := byte(0xFF) + byte2 := byte(0xFF) + if i+1 < l { + byte1 = block[i+1] + } + if i+2 < l { + byte2 = block[i+2] + } + addr := uint16(i) + startAddr + bytes, op, length := Disasm(addr, byte0, byte1, byte2) + fmt.Fprintf(w, "$%04X: %s %s\n", addr, bytes, op) + i += length - 1 + } +} diff --git a/docs/assembler.org b/docs/assembler.org new file mode 100644 index 0000000..80260a4 --- /dev/null +++ b/docs/assembler.org @@ -0,0 +1,8 @@ +$C030 - hex number + +Line - Label - Opcode - Operand - Comments + 1000 TONE LDA $C030 + 1010 LOOP DEY + 1020 BNE LOOP + 1030 JMP TONE +