Пример #1
0
	def do_list(p, a, nw, fn = None):
		while a != 0:
			x = p.t.add(a - 4, a + nw, "XXXTBL")
			const.dot_txt(p, a - 4, a)
			if fn != None:
				fn(p, a)
			else:
				for i in range(0,nw):
					const.word(p, a + i, "%o")
			a = p.m.rd(a)
Пример #2
0
def follow_chain(p, a, f = None):
	while a != 0:
		if f != None:
			f(p, a)
		x = const.word(p, a + 2)
		x.lcmt("+2 CHAIN")
		x = const.dot_txt(p, a + 4, a + 7)
		x.lcmt("+4 NAME")
		a = p.m.rd(a + 2)
Пример #3
0
def hint(p):
    cpu = p.c["domus"]
    # See RCSL 43-GL-7915 p35
    pgd = p.a['progdesc']
    print("CATW", pgd)
    x = const.word(p, pgd + 7)
    x.cmt.append(" +7 First Area Process")
    x = const.word(p, pgd + 8)
    x.cmt.append(" +8 Top Area Process")
    x = const.word(p, pgd + 9)
    x.cmt.append(" +9 Head of Unit Chain")
    x = const.word(p, pgd + 10)
    x.cmt.append(" +10 Chain of Head of Unit Chain")
    a = pgd + 11
    while True:
        x = p.t.add(a, a + 20, "UnitDesc")

        x = const.word(p, a)
        x.cmt.append(" +0 Driver name reference")

        x = const.word(p, a + 1)
        x.cmt.append(" +1 Unit number")

        x = const.word(p, a + 2)
        x.cmt.append(" +2 chain")

        x = const.word(p, a + 3)
        x.cmt.append(" +3 size of unit desc")

        x = const.dot_txt(p, a + 4, a + 7)
        x = const.dot_txt(p, a + 7, a + 10)

        x = const.word(p, a + 10)
        x.cmt.append(" +10 Kit displacement")
        x = const.word(p, a + 11)
        x.cmt.append(" +11 Kit displacement")

        n = p.m.rd(a + 2)
        if n == 0:
            break
        a = n
Пример #4
0
def hint(p):
	cpu = p.c["domus"]
	# See RCSL 43-GL-7915 p35
	pgd = p.a['progdesc']
	print("CATW", pgd)
	x = const.word(p, pgd + 7)
	x.cmt.append(" +7 First Area Process")
	x = const.word(p, pgd + 8)
	x.cmt.append(" +8 Top Area Process")
	x = const.word(p, pgd + 9)
	x.cmt.append(" +9 Head of Unit Chain")
	x = const.word(p, pgd + 10)
	x.cmt.append(" +10 Chain of Head of Unit Chain")
	a = pgd + 11
	while True:
		x = p.t.add(a, a + 20, "UnitDesc")

		x = const.word(p, a)
		x.cmt.append(" +0 Driver name reference")

		x = const.word(p, a + 1)
		x.cmt.append(" +1 Unit number")

		x = const.word(p, a + 2)
		x.cmt.append(" +2 chain")

		x = const.word(p, a + 3)
		x.cmt.append(" +3 size of unit desc")

		x = const.dot_txt(p, a + 4, a + 7)
		x = const.dot_txt(p, a + 7, a + 10)

		x = const.word(p, a + 10)
		x.cmt.append(" +10 Kit displacement")
		x = const.word(p, a + 11)
		x.cmt.append(" +11 Kit displacement")

		n = p.m.rd(a + 2)
		if n == 0:
			break
		a = n
Пример #5
0
def do_desc(p, a, l, n, desc):

	if not 'domus_desc' in p.a:
		p.a['domus_desc'] = dict()

	id = (a, l, n, desc)
	if a in p.a['domus_desc']:
		b = p.a['domus_desc'][a]
		if b == id:
			return False

		print("Redo diff desc @ " + p.m.afmt(a), b, id)
		return False

	p.a['domus_desc'][a] = id

	dtype = n + "Descriptor"

	if l == 0:
		for i in desc:
			try:
				p.m.rd(a + l)
			except:
				break
			l += i[0]
	x = p.t.add(a, a + l, dtype)
	x.blockcmt += n + " descriptor\n"
	x.fill = False
	i = 0
	for j in desc:
		if j[1] == "name":
			x = const.dot_txt(p, a+i, a + i + j[0])
		else:
			x = const.word(p, a + i)
		x.cmt.append("+%d " % i + j[1])
		i += j[0]
		if i >= l:
			break
	while i < l:
		x = const.word(p, a + i)
		x.cmt.append("+%d" % i)
		i += 1
	return True
Пример #6
0
def hint(p):
    p.m.hex = False
    cpu = p.c["domus"]
    tbl_base = 0x800d

    # "PINTGIVEUP" ?
    cpu.disass(0xa0)

    def xx(n):
        i = n + tbl_base
        x = inter.intins[n]
        y = const.word(p, i)
        id = "op=%d: " % n + x[1] + str(x[2:])
        y.cmt.append(id)
        a = p.m.rd(i)
        if len(x) == 2:
            p.setlabel(a, x[1] + " **********")
        else:
            p.setlabel(a, x[1])
        x = p.m.rd(i)
        if x != 0:
            ins = cpu.ins[0x800c]
            ins.flow("cond", "#%d" % n, x)
            z = cpu.disass(x)
            z.lcmt(id)

    for i in inter.intins:
        xx(i)

    p.setlabel(0x1000, "TxtBreak")
    const.dot_txt(p, 0x1000, 0x1005)

    p.setlabel(0x1005, "TxtError")
    const.dot_txt(p, 0x1005, 0x100a)

    p.setlabel(0o100267, "Execute")
    p.setlabel(0o100273, "GetZoneAddr")
    p.setlabel(0o100371, "TakeAidxV")
    p.setlabel(0o100407, "Take2Addr")
    p.setlabel(0o100644, "Send2Oper")
    p.setlabel(0o100654, "_OperMsg")

    p.setlabel(0o101117, "IntGiveup")
    cpu.disass(0o101117)

    p.setlabel(0o101131, "PIntGiveup")
    cpu.disass(0o101131)

    # Empty table entries
    const.word(p, 0o100361)
    const.word(p, 0o100362)

    # Operator Message
    const.word(p, 0o100654)
    const.word(p, 0o100655)
    const.word(p, 0o100656)
    const.word(p, 0o100657)
    const.word(p, 0o100660)

    const.dot_txt(p, 0o101270, 0o101271)
    const.dot_txt(p, 0o101271, 0o101272)
    for i in range(0o101272, 0o101277):
        const.word(p, i)
    for i in (0o100325, 0o101331):
        const.word(p, i)
    const.dot_txt(p, 0o101332, 0o101333)
Пример #7
0
def hunt_outtext(p, cpu):
	""" A very crude value tracker for system calls
	"""

	did = dict()
	for i in cpu.ins:
		ins = cpu.ins[i]
		w = p.m.rd(ins.lo)
		if w & 0xff00 != 0x0c00:
			continue

		ac = [None,None,None,None]
		x = i-1
		while x in cpu.ins:
			ins1 = cpu.ins[x]
			if ins1.mne != "LDA":
				#print("!", cpu.render(p, ins1))
				break
			if len(ins1.oper) != 2:
				#print("!", cpu.render(p, ins1))
				break
			n = int(ins1.oper[0])
			ac[n] = ins1.oper[1][0]
			const.word(p, ac[n])
			x -= 1

		if ac == [None,None,None,None]:
			continue

		s = p.m.afmt(i)
		s += " "
		s += cpu.render(p, ins)[0]
		s += "  "
		for j in range(0,4):
			i = ac[j]
			if i != None:
				s += " AC%d=" % j + p.m.afmt(i)
				try:
					w = p.m.rd(i)
					q = p.m.rdqual(i)
					s += "=" + p.m.aqfmt(w, q)
				except:
					s += "=undef"

		print(s)
		if ins.mne == "SEARCHITEM":
			if ac[1] != None:
				try:
					w = p.m.rd(ac[1])
					print("  HEAD",
					    p.m.afmt(ac[1]), p.m.afmt(w))
					const.word(p, w + 2)
				except:
					pass

			if ac[2] != None:
				w = p.m.rd(ac[2])
				print("  NAME", p.m.afmt(ac[2]), p.m.afmt(w))
				try:
					const.dot_txt(p, w, w + 3)
				except:
					pass
		if ins.mne == "SENDMESSAGE":
			if ac[1] != None:
				w = p.m.rd(ac[1])
				print("  MSG", p.m.afmt(ac[1]), p.m.afmt(w))
				for j in range(0,4):
					try:
						const.word(p, w + j)
					except:
						pass
				try:
					ww = p.m.rd(w + 2)
					q = p.m.rdqual(w + 2)
					if q == 3 and ww != 0:
						const.dot_txt(p, ww >> 1)
				except:
					pass
						
			if ac[2] != None:
				w = p.m.rd(ac[2])
				print("  DST", p.m.afmt(ac[2]), p.m.afmt(w))
				try:
					const.dot_txt(p, w, w + 3)
				except:
					pass

		if ins.mne[:3] == "OUT" or ins.mne == "OPEN":
			if ac[2] != None:
				z = p.m.rd(ac[2])
				if z in did:
					continue
				did[z] = True
				print("  ZONE", p.m.afmt(z))
				p.todo(z, desc.zonedesc)
		if ins.mne == "OUTTEXT":
			if ac[0] != None:
				t = p.m.rd(ac[0])
				if t in did:
					continue
				did[t] = True
				if t != 0:
					t = t >> 1
					print("  TXT",
					    p.m.afmt(ac[0]), p.m.afmt(t))
					try:
						const.dot_txt(p, t)
					except:
						pass
Пример #8
0
def hint(p):
	p.m.hex = True
	cpu = p.c["domus"]

	#p.todo(0o20550, cpu.disass)
	#p.todo(0o14341, cpu.disass)
	desc.zonedesc(p, 0o11634)
	x = p.t.add(0o012461, 0o012474, "Func")
	x = p.t.add(0o012474, 0o012477, "Func")
	x = p.t.add(0o012477, 0o012512, "Func")
	x = p.t.add(0o013272, 0o013303, "Func")

	const.dot_txt(p, 0o012517, None)

	def do_list(p, a, nw, fn = None):
		while a != 0:
			x = p.t.add(a - 4, a + nw, "XXXTBL")
			const.dot_txt(p, a - 4, a)
			if fn != None:
				fn(p, a)
			else:
				for i in range(0,nw):
					const.word(p, a + i, "%o")
			a = p.m.rd(a)

	do_list(p, 0o016451, 2)

	def fsym(p, a):
		l = list()
		for i in range(0, 4):
			l.append(const.word(p, a + i, "%o"))
		l[3].lcmt(str(domus.inter.inter.intins[p.m.rd(a + 3)][1:]))
			

	do_list(p, 0o026100, 4)
	do_list(p, 0o026270, 4, fsym)

	for a in range(0o015673, 0o015706):
		p.todo(p.m.rd(a), cpu.disass)

	
	def c12524(p, a):
		const.word(p, a + 3)
		cpu.disass(p.m.rd(a + 3))
	follow_chain(p, 0o12524, c12524)

	def c13055(p, a):
		const.word(p, a + 0)
		const.word(p, a + 1)
		const.word(p, a + 3)
		const.word(p, a + 7)
	follow_chain(p, 0o13055, c13055)

	# calls to 20574'
	p.todo(0o20716, cpu.disass)
	p.todo(0o14600, cpu.disass)

	p.todo(0o17343, cpu.disass)

	p.todo(0o17341, cpu.disass)
	p.todo(0o015271, cpu.disass)

	p.run()

	hunt_outtext(p, cpu)
Пример #9
0
def hint(p):
	const.dot_txt(p, 0o10015, None)
Пример #10
0
def hint(p):
	p.m.hex = False
	cpu = p.c["domus"]
	tbl_base = 0x800d

	# "PINTGIVEUP" ?
	cpu.disass(0xa0)

	def xx(n):
		i  = n + tbl_base
		x = inter.intins[n]
		y = const.word(p,i)
		id = "op=%d: " % n + x[1] + str(x[2:])
		y.cmt.append(id)
		a = p.m.rd(i)
		if len(x) == 2:
			p.setlabel(a, x[1] + " **********")
		else:
			p.setlabel(a, x[1])
		x = p.m.rd(i)
		if x != 0:
			ins = cpu.ins[0x800c]
			ins.flow("cond", "#%d" % n, x)
			z = cpu.disass(x)
			z.lcmt(id)

	for i in inter.intins:
		xx(i)

	p.setlabel(0x1000, "TxtBreak")
	const.dot_txt(p, 0x1000, 0x1005)

	p.setlabel(0x1005, "TxtError")
	const.dot_txt(p, 0x1005, 0x100a)

	p.setlabel(0o100267, "Execute")
	p.setlabel(0o100273, "GetZoneAddr")
	p.setlabel(0o100371, "TakeAidxV")
	p.setlabel(0o100407, "Take2Addr")
	p.setlabel(0o100644, "Send2Oper")
	p.setlabel(0o100654, "_OperMsg")

	p.setlabel(0o101117, "IntGiveup")
	cpu.disass(0o101117)

	p.setlabel(0o101131, "PIntGiveup")
	cpu.disass(0o101131)

	# Empty table entries
	const.word(p, 0o100361)
	const.word(p, 0o100362)

	# Operator Message
	const.word(p, 0o100654)
	const.word(p, 0o100655)
	const.word(p, 0o100656)
	const.word(p, 0o100657)
	const.word(p, 0o100660)

	const.dot_txt(p, 0o101270, 0o101271)
	const.dot_txt(p, 0o101271, 0o101272)
	for i in range(0o101272, 0o101277):
		const.word(p, i)
	for i in (0o100325, 0o101331):
		const.word(p, i)
	const.dot_txt(p, 0o101332, 0o101333)
Пример #11
0
def hint(p):
    const.dot_txt(p, 0o10015, None)