89 lines
1.6 KiB
Go
89 lines
1.6 KiB
Go
package dasmlbl
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
type Config struct {
|
|
Cpu string
|
|
InputName string
|
|
OutputName string
|
|
|
|
HexOffset int
|
|
InputOffset int
|
|
InputSize int
|
|
StartAddr int
|
|
Comments int
|
|
LabelBreak int
|
|
PageLength int
|
|
|
|
CommentColumn int
|
|
ArgumentColumn int
|
|
MnemonicColumn int
|
|
TextColumn int
|
|
|
|
NewlineAfterJMP bool
|
|
NewlineAfterRTS bool
|
|
|
|
Labels []Label
|
|
Ranges []Range
|
|
Segments []Segment
|
|
}
|
|
|
|
type Label struct {
|
|
Name string
|
|
Address int
|
|
Comment string
|
|
Size int
|
|
ParamSize int
|
|
}
|
|
|
|
func (l Label) Mlb(startRam, startRom int) string {
|
|
addr := l.Address
|
|
memType := "NesMemory"
|
|
if addr >= startRom {
|
|
addr -= startRom
|
|
memType = "NesPrgRom"
|
|
} else if addr >= startRam {
|
|
addr -= startRam
|
|
memType = "NesWorkRam"
|
|
}
|
|
|
|
addrStr := fmt.Sprintf("%04X", addr)
|
|
if l.Size > 1 {
|
|
addrStr = fmt.Sprintf("%04X-%04X", l.Address, l.Address+l.Size-1)
|
|
}
|
|
return fmt.Sprintf("%s:%s:%s:%s", memType, addrStr, l.Name, l.Comment)
|
|
|
|
//addr := fmt.Sprintf("%04X", l.Address)
|
|
//if l.Size > 1 {
|
|
// addr = fmt.Sprintf("%04X-%04X", l.Address, l.Address+l.Size-1)
|
|
//}
|
|
//return fmt.Sprintf("NesMemory:%s:%s:%s", addr, l.Name, l.Comment)
|
|
}
|
|
|
|
type Range struct {
|
|
Name string
|
|
Comment string
|
|
Start int
|
|
End int
|
|
Type string
|
|
Unit int
|
|
AddrMode string
|
|
}
|
|
|
|
func (r Range) Mlb(startRam, startRom int) string {
|
|
addr := fmt.Sprintf("%04X", r.Start)
|
|
if r.End - r.Start > 1 {
|
|
addr = fmt.Sprintf("%04X-%04X", r.Start, r.End)
|
|
}
|
|
return fmt.Sprintf("NesMemory:%s:%s:%s", addr, r.Name, r.Comment)
|
|
}
|
|
|
|
type Segment struct {
|
|
Name string
|
|
Start int
|
|
End int
|
|
}
|
|
|