mirror of https://github.com/hak5/ToorChat.git
148 lines
5.9 KiB
Python
148 lines
5.9 KiB
Python
#!/usr/bin/env python
|
|
"""
|
|
#include<compiler.h>
|
|
/* ------------------------------------------------------------------------------------------------
|
|
* Interrupt Vectors
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
#define RFTXRX_VECTOR 0 /* RF TX done / RX ready */
|
|
#define ADC_VECTOR 1 /* ADC End of Conversion */
|
|
#define URX0_VECTOR 2 /* USART0 RX Complete */
|
|
#define URX1_VECTOR 3 /* USART1 RX Complete */
|
|
#define ENC_VECTOR 4 /* AES Encryption/Decryption Complete */
|
|
#define ST_VECTOR 5 /* Sleep Timer Compare */
|
|
#define P2INT_VECTOR 6 /* Port 2 Inputs */
|
|
#define UTX0_VECTOR 7 /* USART0 TX Complete */
|
|
#define DMA_VECTOR 8 /* DMA Transfer Complete */
|
|
#define T1_VECTOR 9 /* Timer 1 (16-bit) Capture/Compare/Overflow */
|
|
#define T2_VECTOR 10 /* Timer 2 (MAC Timer) Overflow */
|
|
#define T3_VECTOR 11 /* Timer 3 (8-bit) Capture/Compare/Overflow */
|
|
#define T4_VECTOR 12 /* Timer 4 (8-bit) Capture/Compare/Overflow */
|
|
#define P0INT_VECTOR 13 /* Port 0 Inputs */
|
|
#define UTX1_VECTOR 14 /* USART1 TX Complete */
|
|
#define P1INT_VECTOR 15 /* Port 1 Inputs */
|
|
#define RF_VECTOR 16 /* RF General Interrupts */
|
|
#define WDT_VECTOR 17 /* Watchdog Overflow in Timer Mode */
|
|
|
|
SFR(P0, 0x80); // Port 0
|
|
SBIT(P0_0, 0x80, 0); // Port 0 bit 0
|
|
SBIT(P0_1, 0x80, 1); // Port 0 bit 1
|
|
SBIT(P0_2, 0x80, 2); // Port 0 bit 2
|
|
SBIT(P0_3, 0x80, 3); // Port 0 bit 3
|
|
SBIT(P0_4, 0x80, 4); // Port 0 bit 4
|
|
SBIT(P0_5, 0x80, 5); // Port 0 bit 5
|
|
SBIT(P0_6, 0x80, 6); // Port 0 bit 6
|
|
SBIT(P0_7, 0x80, 7); // Port 0 bit 7
|
|
|
|
SFR(SP, 0x81); // Stack Pointer
|
|
SFR(DPL0, 0x82); // Data Pointer 0 Low Byte
|
|
SFR(DPH0, 0x83); // Data Pointer 0 High Byte
|
|
SFR(DPL1, 0x84); // Data Pointer 1 Low Byte
|
|
SFR(DPH1, 0x85); // Data Pointer 1 High Byte
|
|
"""
|
|
import sys
|
|
|
|
|
|
def parseLines(lines):
|
|
defs = {}
|
|
incomment = False
|
|
for line in lines:
|
|
# find single-line comments
|
|
slc = line.find("//")
|
|
if (slc > -1):
|
|
line = line[:slc] + "#" + line[slc+2:]
|
|
# find /* */ comments
|
|
mlcs = line.find("/*")
|
|
mlce = line.find("*/")
|
|
if (mlcs>-1):
|
|
if (mlce>-1): # both are in this line
|
|
if (mlce>mlcs): # they are "together"
|
|
if (mlce >= len(line.strip())-3):
|
|
line = line[:mlcs] + '#' + line[mlcs+2:mlce]
|
|
else:
|
|
line = line[:mlcs] + '"""' + line[mlcs+2:mlce] + '"""' + line[mlce+2:]
|
|
else: # they are *not* together
|
|
line = line[mlce+2:mlcs]
|
|
else: # only the beginning is in this line, treat like a single-line comment for now
|
|
line = line[:mlcs]
|
|
incomment = True
|
|
elif incomment: # no mlc-starter found... are we incomment? then ignore until the end of comment
|
|
if (mlce>-1):
|
|
line = line[mlce+2:]
|
|
incomment = False
|
|
else:
|
|
line = ''
|
|
if incomment: # if we're still incomment, this whole line is comment
|
|
continue
|
|
|
|
# chop initial and trailing whitespace
|
|
line = line.strip()
|
|
|
|
# now we can actually parse the line
|
|
if (line.startswith("#define ")):
|
|
line = line[8:].strip() # peel off any additional spaces after the #define
|
|
pieces = line.split(" ", 1)
|
|
if len(pieces)<2:
|
|
continue
|
|
name, value = pieces
|
|
if "(" in name:
|
|
print >>sys.stderr,("SKIPPING: %s"%(line))
|
|
continue # skip adding "function" defines
|
|
defs[name.strip()] = value.strip()
|
|
|
|
elif (line.startswith("SFR(")):
|
|
endparen = line.find(")")
|
|
if (endparen == -1):
|
|
print >>sys.stderr,("ERROR: SFR without end parens: '%s'"%(line))
|
|
continue
|
|
line = line[4:endparen].strip()
|
|
name, value = line.split(",", 1)
|
|
defs[name.strip()] = value.strip()
|
|
elif (line.startswith("SFRX(")):
|
|
endparen = line.find(")")
|
|
if (endparen == -1):
|
|
print >>sys.stderr,("ERROR: SFRX without end parens: '%s'"%(line))
|
|
continue
|
|
line = line[5:endparen].strip()
|
|
name, value = line.split(",", 1)
|
|
defs[name.strip()] = value.strip()
|
|
elif (line.startswith("SBIT")):
|
|
endparen = line.find(")")
|
|
if (endparen == -1):
|
|
print >>sys.stderr,("ERROR: SBIT without end parens: '%s'"%(line))
|
|
continue
|
|
line = line[5:endparen].strip()
|
|
name, val1, val2 = line.split(",", 2)
|
|
defs[name.strip()] = 1 << (int(val2.strip()))
|
|
|
|
return defs
|
|
|
|
|
|
if __name__ == '__main__':
|
|
defs = {}
|
|
defs.update(parseLines(file('../includes/cc1110-ext.h')))
|
|
defs.update(parseLines(file('../includes/cc1111.h')))
|
|
defs.update(parseLines(file('/usr/share/sdcc/include/mcs51/cc1110.h')))
|
|
|
|
skeys = defs.keys()
|
|
skeys.sort()
|
|
out = ["%-30s = %s"%(key,defs[key]) for key in skeys]
|
|
|
|
trueout = []
|
|
for x in out:
|
|
try:
|
|
compile(x,'stdin','exec')
|
|
trueout.append(x)
|
|
print(x)
|
|
except:
|
|
sys.excepthook(*sys.exc_info())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|