Improved Applecorn traces
This commit is contained in:
parent
4a2c094198
commit
da45f0468f
|
@ -29,8 +29,10 @@ type mosCallData struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
applecornKernelStart uint16 = 0xd000 // Code above this is out of BBC territory
|
applecornKernelStart uint16 = 0xc000 // Code above this is out of BBC territory
|
||||||
applecornNoCaller uint16 = 0xffff
|
applecornTraceAreaStart uint16 = 0xd000
|
||||||
|
applecornNoCaller uint16 = 0xffff
|
||||||
|
applecornRomTitle uint16 = 0x8009
|
||||||
)
|
)
|
||||||
|
|
||||||
func newTraceApplecorn(a *Apple2, skipConsole bool) *traceApplecorn {
|
func newTraceApplecorn(a *Apple2, skipConsole bool) *traceApplecorn {
|
||||||
|
@ -64,18 +66,49 @@ func (t *traceApplecorn) inspect() {
|
||||||
pc, sp := t.a.cpu.GetPCAndSP()
|
pc, sp := t.a.cpu.GetPCAndSP()
|
||||||
|
|
||||||
if pc == 0x8000 {
|
if pc == 0x8000 {
|
||||||
|
activeROM := t.getTerminatedString(applecornRomTitle, 0)
|
||||||
regA, _, _, _ := t.a.cpu.GetAXYP()
|
regA, _, _, _ := t.a.cpu.GetAXYP()
|
||||||
fmt.Printf("BBC MOS call to $%04x LANGUAGE(%02x)\n", pc, regA)
|
fmt.Printf("BBC MOS call to $%04x LANGUAGE(ROM=\"%s\", A=%02x)\n", pc, activeROM, regA)
|
||||||
} else if pc == 0x8003 {
|
} else if pc == 0x8003 {
|
||||||
regA, _, regY, _ := t.a.cpu.GetAXYP()
|
activeROM := t.getTerminatedString(applecornRomTitle, 0)
|
||||||
address := t.a.mmu.peekWord(0xf2 + uint16(regY))
|
service, _, regY, _ := t.a.cpu.GetAXYP()
|
||||||
command := t.getTerminatedString(address, 0x0d)
|
switch service {
|
||||||
fmt.Printf("BBC MOS call to $%04x SERVICE(A=%v, \"%s\")\n", pc, regA, command)
|
case 4: // OSCLI
|
||||||
|
address := t.a.mmu.peekWord(0xf2 + uint16(regY))
|
||||||
|
command := t.getTerminatedString(address, 0x0d)
|
||||||
|
fmt.Printf("BBC MOS call to $%04x SERVICE_OSCLI(ROM=\"%s\", A=%v, \"%s\")\n",
|
||||||
|
pc, activeROM, service, command)
|
||||||
|
case 6: // Error
|
||||||
|
address := t.a.mmu.peekWord(0xfd)
|
||||||
|
faultNumber := t.a.mmu.Peek(address)
|
||||||
|
faultMessage := address + 1
|
||||||
|
faultString := t.getTerminatedString(faultMessage, 0)
|
||||||
|
fmt.Printf("BBC MOS call to $%04x SERVICE_ERROR(ROM=\"%s\", A=%v, #=%v, \"%s\")\n",
|
||||||
|
pc, activeROM, service, faultNumber, faultString)
|
||||||
|
case 7: // OSBYTE
|
||||||
|
pA := t.a.mmu.Peek(0xef)
|
||||||
|
pX := t.a.mmu.Peek(0xf0)
|
||||||
|
pY := t.a.mmu.Peek(0xf1)
|
||||||
|
fmt.Printf("BBC MOS call to $%04x SERVICE_OSBYTE%02x(ROM=\"%s\", A=%v, pX=%02x, pY=%02x)\n",
|
||||||
|
pc, pA, activeROM, service, pX, pY)
|
||||||
|
case 8: // OSWORD
|
||||||
|
pA := t.a.mmu.Peek(0xef)
|
||||||
|
fmt.Printf("BBC MOS call to $%04x SERVICE_OSWORD%02x(ROM=\"%s\", A=%v)\n",
|
||||||
|
pc, pA, activeROM, service)
|
||||||
|
case 9: // *HELP
|
||||||
|
address := t.a.mmu.peekWord(0xf2 + uint16(regY))
|
||||||
|
command := t.getTerminatedString(address, 0x0d)
|
||||||
|
fmt.Printf("BBC MOS call to $%04x SERVICE_HELP(ROM=\"%s\", A=%v, \"%s\")\n",
|
||||||
|
pc, activeROM, service, command)
|
||||||
|
default:
|
||||||
|
fmt.Printf("BBC MOS call to $%04x SERVICE(ROM=\"%s\", A=%v)\n",
|
||||||
|
pc, activeROM, service)
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inKernel := pc >= applecornKernelStart
|
inKernel := pc >= applecornKernelStart
|
||||||
if !t.wasInKernel && inKernel {
|
if !t.wasInKernel && inKernel && pc >= applecornTraceAreaStart {
|
||||||
regA, regX, regY, _ := t.a.cpu.GetAXYP()
|
regA, regX, regY, _ := t.a.cpu.GetAXYP()
|
||||||
|
|
||||||
s := "UNKNOWN"
|
s := "UNKNOWN"
|
||||||
|
|
Loading…
Reference in New Issue