Пример #1
0
def dispatch_table_arg(p, adr, cpu):
	assert p.m.rd(adr) == 0xce
	assert p.m.rd(adr + 3) == 0x7e
	ptr = p.m.b16(adr + 1)
	ii = cpu.disass(adr + 3, "ins")

	const.ptr(p, ptr, 2)
	tbl = p.m.b16(ptr)
	
	aa = tbl
	xx = dict()
	for i in p.hpib_cmd:
		if len(i) == 1:
			break
		for j in range(i[1], i[2] + 1):
			x = const.ptr(p, aa, 2)
			y = i[0] + "%d" % j
			dd = p.m.b16(aa)
			cpu.disass(dd)
			if dd not in xx:
				ii.flow("call", "XFUNC", dd)
				xx[dd] = True
			p.setlabel(dd, "CMD_" + y + "_" + gpib_expl[y])
			aa += 2
	x = p.t.add(tbl, aa, "idx-table")
	x.blockcmt += "-\nDispatch table for HPIB cmds with arg"
Пример #2
0
def keyboard_dispatch(p, cpu, adr = 0x7962):
	assert p.m.rd(adr) == 0xce
	assert p.m.rd(adr + 3) == 0x7e
	ptr = p.m.b16(adr + 1)

	ii = cpu.disass(adr + 3, "ins")

	const.ptr(p, ptr, 2)
	tbl = p.m.b16(ptr)

	aa = tbl
	xx = dict()
	for col in range(8,0,-1):
		p.setlabel(aa, "Keyboard_Column_%d" % col)
		for row in range(1,5):
			x = const.ptr(p, aa, 2)
			dd = p.m.b16(aa)
			cpu.disass(dd)
			if dd not in xx:
				ii.flow("call", "XFUNC", dd)
				xx[dd] = True
			aa += 2
	x = p.t.add(tbl, aa, "tbl")
	x.blockcmt += "-\nDispatch table for Keyboard commands\n"

	p.setlabel(p.m.b16(tbl + 4), "KEY_Ext_Arm")
	p.setlabel(p.m.b16(tbl + 6), "KEY_UNDEF")
	p.setlabel(p.m.b16(tbl + 10), "KEY_Ext_Hold_Off")
	p.setlabel(p.m.b16(tbl + 14), "KEY_Reset")
Пример #3
0
def jmptbl(p, jmp, low, high, name, flow="call"):
    x = p.t.add(low, high, "tbl")
    print("Call table for", name)
    ins = cpu.ins[jmp]
    for i in range(low, high, 2):
        const.ptr(p, i)
        y = p.m.b16(i)
        ins.flow(flow, name, y)
        cpu.disass(y)
Пример #4
0
def jmptbl(p, jmp, low, high, name, flow="call"):
	x = p.t.add(low, high, "tbl")
	print("Call table for", name)
	ins = cpu.ins[jmp]
	for i in range(low, high, 2):
		const.ptr(p, i)
		y = p.m.b16(i)
		ins.flow(flow, name, y)
		cpu.disass(y)
Пример #5
0
 def __vector(self, adr, nm):
     x = const.ptr(self.p, adr, 2)
     x.cmt.append("Vector: " + nm)
     w = self.p.m.w16(adr)
     x.a['flow'] = (("cond", "T", w), )
     self.disass(w)
     self.p.setlabel(w, nm + "_VECTOR")
Пример #6
0
	def __vector(self, adr, nm):
		x = const.ptr(self.p, adr, 2)
		x.cmt.append("Vector: " + nm)
		w = self.p.m.w16(adr)
		x.a['flow'] = (("cond", "T", w),)
		self.disass(w)
		self.p.setlabel(w, nm + "_VECTOR")
Пример #7
0
def dsp_dispatch(p, cpu, adr = 0x683b):
	assert p.m.rd(adr) == 0xce
	assert p.m.rd(adr + 3) == 0xbd
	tbl = p.m.b16(adr + 1)
	ii = cpu.disass(adr + 3)

	p.setlabel(tbl, "DSP_FUNC_TABLE")
	x=p.t.add(tbl, tbl + 8 * 2, "tbl")
	x.blockcmt += "-\nTable of display functions\n"
	dspf= ("AVG", "STD", "MIN", "MAX", "REF", "EVT", "DS6", "ALL")
	j=0
	for i in range(tbl, tbl + 8 * 2, 2):
		x = const.ptr(p, i, 2)
		w = p.m.b16(i)
		p.setlabel(w, "DSP_" + dspf[j])
		ii.flow("call", "DSPFUNC", w)
		cpu.disass(w)
		j += 1
Пример #8
0
dot_24bit(p, 0x6b35, 1, "%d")
dot_24bit(p, 0x6b38, 1, "%d")

#######################################################################

#######################################################################

const.txtlen(p,0x78f3,4)
const.txtlen(p,0x78f7,6)
const.txtlen(p,0x78fd,2)

p.setlabel(0x77d9, "OUT_STRINGS")
for i in range(0x77d9, 0x77f9, 4):
	const.txtlen(p,i,4)

const.ptr(p, 0x7915, 2)

#######################################################################

hp5370.chargen(p, 0x7e29)
hp5370.hpib_cmd_table(p, 0x7c5d)
hp5370.keyboard_dispatch(p, cpu)
hp5370.hpib_arg_range(p, 0x7d65)
hp5370.hpib_tbl_idx(p, 0x7d81)
hp5370.dispatch_table_arg(p, 0x7d5f, cpu)
hp5370.dispatch_table_noarg(p, 0x7d29, cpu)
hp5370.dsp_dispatch(p, cpu)
hp5370.square_table(p)
hp53xx.wr_test_val(p)

if True:
Пример #9
0
dot_24bit(p, 0x6b32, 1, "%d")
dot_24bit(p, 0x6b35, 1, "%d")
dot_24bit(p, 0x6b38, 1, "%d")

#######################################################################

# strings
const.txtlen(p,0x78f3,4)
const.txtlen(p,0x78f7,6)
const.txtlen(p,0x78fd,2)

p.setlabel(0x77d7, "OUT_STRINGS")
for i in range(0x77d7,0x77f7,4):
	const.txtlen(p,i,4)

const.ptr(p, 0x7915, 2)

#######################################################################
# BCD->7seg table

hp5370.chargen(p, 0x7e30)
hp5370.hpib_cmd_table(p, 0x7c64)
hp5370.keyboard_dispatch(p, cpu)
hp5370.hpib_arg_range(p, 0x7d6c)
hp5370.hpib_tbl_idx(p, 0x7d88)
hp5370.dispatch_table_arg(p, 0x7d66, cpu)
hp5370.dispatch_table_noarg(p, 0x7d30, cpu)
hp5370.dsp_dispatch(p, cpu)
hp5370.square_table(p)
hp53xx.wr_test_val(p)