Page 2 vectors
This commit is contained in:
parent
950d99c59f
commit
49a425b727
|
@ -54,37 +54,39 @@ func newTraceApplecorn(a *Apple2, skipConsole bool) *traceApplecorn {
|
||||||
|
|
||||||
func (t *traceApplecorn) inspect() {
|
func (t *traceApplecorn) inspect() {
|
||||||
pc, sp := t.a.cpu.GetPCAndSP()
|
pc, sp := t.a.cpu.GetPCAndSP()
|
||||||
if pc >= applecornMosVec {
|
if pc >= 0xd000 /*applecornMosVec*/ {
|
||||||
regA, regX, regY := t.a.cpu.GetAXY()
|
regA, regX, regY := t.a.cpu.GetAXY()
|
||||||
s := ""
|
|
||||||
if !t.skipConsole {
|
|
||||||
switch pc {
|
|
||||||
case 0xffc8:
|
|
||||||
ch := ""
|
|
||||||
if regA >= 0x20 && regA < 0x7f {
|
|
||||||
ch = string(regA)
|
|
||||||
}
|
|
||||||
s = fmt.Sprintf("OSNWRCH(A=%02x, '%v')", regA, ch)
|
|
||||||
case 0xffcb:
|
|
||||||
s = fmt.Sprintf("OSNRDCH()")
|
|
||||||
case 0xffe0:
|
|
||||||
s = fmt.Sprintf("OSRDCH()")
|
|
||||||
//case 0xffe3: // This fallbacks to OSWRCH
|
|
||||||
// s = "OSASCI(?)"
|
|
||||||
//case 0xffe7: // This fallbacks to OSWRCH
|
|
||||||
// s = fmt.Sprintf("OSNEWL()")
|
|
||||||
//case 0xffec: // This fallbacks to OSWRCH
|
|
||||||
// s = fmt.Sprintf("OSNECR()")
|
|
||||||
case 0xffee:
|
|
||||||
ch := ""
|
|
||||||
if regA >= 0x20 && regA < 0x7f {
|
|
||||||
ch = string(regA)
|
|
||||||
}
|
|
||||||
s = fmt.Sprintf("OSWRCH(A=%02x, '%v')", regA, ch)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
s := ""
|
||||||
|
skip := false
|
||||||
|
|
||||||
|
// Page 2 vectors
|
||||||
|
switch pc {
|
||||||
|
case t.vector(0x0208): // OSCLI vector
|
||||||
|
pc = 0xfff7
|
||||||
|
case t.vector(0x020A): // OSBYTE vector
|
||||||
|
pc = 0xfff4
|
||||||
|
case t.vector(0x020C): // OSWORD vector
|
||||||
|
pc = 0xfff1
|
||||||
|
case t.vector(0x020E): // OSWRCH vector
|
||||||
|
pc = 0xffee
|
||||||
|
case t.vector(0x0210): // OSRDCH vector
|
||||||
|
pc = 0xffe0
|
||||||
|
case t.vector(0x0212): // OSFILE vector
|
||||||
|
pc = 0xffdd
|
||||||
|
case t.vector(0x0214): // OSARGS vector
|
||||||
|
pc = 0xffda
|
||||||
|
case t.vector(0x0216): // OSBGET vector
|
||||||
|
pc = 0xffd7
|
||||||
|
case t.vector(0x0218): // OSBPUT vector
|
||||||
|
pc = 0xffd4
|
||||||
|
case t.vector(0x021A): // OSGBPB vector
|
||||||
|
pc = 0xffd1
|
||||||
|
case t.vector(0x021C): // OSFIND vector
|
||||||
|
pc = 0xffce
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Jump area
|
||||||
switch pc {
|
switch pc {
|
||||||
case 0xffb9:
|
case 0xffb9:
|
||||||
s = "OSDRM(?)"
|
s = "OSDRM(?)"
|
||||||
|
@ -96,6 +98,16 @@ func (t *traceApplecorn) inspect() {
|
||||||
s = "OSINIT(?)"
|
s = "OSINIT(?)"
|
||||||
case 0xffc5:
|
case 0xffc5:
|
||||||
s = "OSREAD(?)"
|
s = "OSREAD(?)"
|
||||||
|
case 0xffc8:
|
||||||
|
ch := ""
|
||||||
|
if regA >= 0x20 && regA < 0x7f {
|
||||||
|
ch = string(regA)
|
||||||
|
}
|
||||||
|
s = fmt.Sprintf("OSNWRCH(A=%02x, '%v')", regA, ch)
|
||||||
|
skip = t.skipConsole
|
||||||
|
case 0xffcb:
|
||||||
|
s = fmt.Sprintf("OSNRDCH()")
|
||||||
|
skip = t.skipConsole
|
||||||
case 0xffce:
|
case 0xffce:
|
||||||
s = "OSFIND(?)"
|
s = "OSFIND(?)"
|
||||||
case 0xffd1:
|
case 0xffd1:
|
||||||
|
@ -108,6 +120,27 @@ func (t *traceApplecorn) inspect() {
|
||||||
s = "OSARGS(?)"
|
s = "OSARGS(?)"
|
||||||
case 0xffdd:
|
case 0xffdd:
|
||||||
s = "OSFILE(?)"
|
s = "OSFILE(?)"
|
||||||
|
case 0xffe0:
|
||||||
|
s = fmt.Sprintf("OSRDCH()")
|
||||||
|
skip = t.skipConsole
|
||||||
|
/*
|
||||||
|
case 0xffe3: // This fallbacks to OSWRCH
|
||||||
|
s = "OSASCI(?)"
|
||||||
|
skip = t.skipConsole
|
||||||
|
case 0xffe7: // This fallbacks to OSWRCH
|
||||||
|
s = fmt.Sprintf("OSNEWL()")
|
||||||
|
skip = t.skipConsole
|
||||||
|
case 0xffec: // This fallbacks to OSWRCH
|
||||||
|
skip = t.skipConsole
|
||||||
|
s = fmt.Sprintf("OSNECR()")
|
||||||
|
*/
|
||||||
|
case 0xffee:
|
||||||
|
ch := ""
|
||||||
|
if regA >= 0x20 && regA < 0x7f {
|
||||||
|
ch = string(regA)
|
||||||
|
}
|
||||||
|
s = fmt.Sprintf("OSWRCH(A=%02x, '%v')", regA, ch)
|
||||||
|
skip = t.skipConsole
|
||||||
case 0xfff1:
|
case 0xfff1:
|
||||||
xy := uint16(regX) + uint16(regY)<<8
|
xy := uint16(regX) + uint16(regY)<<8
|
||||||
switch regA {
|
switch regA {
|
||||||
|
@ -127,11 +160,7 @@ func (t *traceApplecorn) inspect() {
|
||||||
s = "OSCLI(?)"
|
s = "OSCLI(?)"
|
||||||
}
|
}
|
||||||
|
|
||||||
//if s == "" && !(pc >= 0xffe3 && pc < 0xffee) {
|
if !skip && s != "" {
|
||||||
// s = "UNKNOWN(?)"
|
|
||||||
//}
|
|
||||||
|
|
||||||
if s != "" {
|
|
||||||
caller := t.a.mmu.peekWord(0x100+uint16(sp+1)) + 1
|
caller := t.a.mmu.peekWord(0x100+uint16(sp+1)) + 1
|
||||||
t.calls = append(t.calls, mosCallData{caller, pc, regA, regX, regY})
|
t.calls = append(t.calls, mosCallData{caller, pc, regA, regX, regY})
|
||||||
if len(t.calls) > t.lastDepth {
|
if len(t.calls) > t.lastDepth {
|
||||||
|
@ -176,3 +205,7 @@ func (t *traceApplecorn) getString(address uint16, length uint8) string {
|
||||||
}
|
}
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *traceApplecorn) vector(address uint16) uint16 {
|
||||||
|
return t.a.mmu.peekWord(address)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue