#!/bin/python3 jedec_file = "sac.jed" # map index to pin number # PAL16L8 map - no pin 19 or 12 pin_map = [ 2, 1, 3, 18, 4, 17, 5, 16, 6, 15, 7, 14, 8, 13, 9, 11 ] # On this project, everything after "wait" is an output pin_name_str = "xxx addr* iowr* iord* a9 a8 a7 a3 a2 a1 ggg wait iordy enp-161 clr-161 cable(10)-2E0 u2io cable(9)-read cable(22)-write u1io" # only relevant for output pins. Do we invert the logic? flip = [ False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False ] pin_names = pin_name_str.split() # Called once per output pin with an array of 8 lines def process ( out, group ) : xout = 20 - out oname = pin_names[xout] #alines = [] olist = [] for l in group: if l == "11111111111111111111111111111111" : continue if l == "00000000000000000000000000000000" : continue alist = [] #print ( l ) #print ( "o-", nout, ' ', sep='', end='' ) #print ( name, ' = ', sep='', end='' ) #rv = name + " = " # process a single line xin = 0 inv = False for cc in l : if cc == '0' : #print ( "new cc" ) pin = pin_map[xin] name = pin_names[pin] #print ( 'I', pin, sep='', end='' ) #print ( name, sep='', end='' ) if inv : #print ( '*', end='' ) alist.append ( name + '*' ) else : alist.append ( name ) #print ( " ", end='' ) if not inv : inv = True else : inv = False xin += 1 #aline = ' + '.join ( alist ) #olist.append ( aline ) olist.append ( alist ) if len(olist) == 1 : print ( oname + " = " + ' + '.join ( olist[0] ) ) return oolist = [] for o in olist : if len(o) == 1 : oolist.append ( o[0] ) else : aa = ' + '.join ( o ) oolist.append ( '( ' + aa + ' )' ) print ( oname + " = " + ' | '.join ( oolist ) ) #for a in alines: # print ( a ); # ---------- f = open ( jedec_file, 'r') lines = f.readlines() f.close () skip = True count = 0 group = [] out = 0 for line in lines: l = line.strip() if l[-1] == "*" : l = l[:-1] if skip and l == "L0000" : skip = False continue if skip : continue if l == "L2048" : break group.append ( l ) count += 1 if count == 8 : out += 1 process ( out, group ) group = [] count = 0