2017-04-23 16:09:42 +00:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
"This tool is for configuring mtgos"
|
|
|
|
def get_from_list(p,l):
|
|
|
|
print("Select one of:")
|
|
|
|
for i,j in enumerate(l):
|
|
|
|
print(str(i)+":",j)
|
|
|
|
if len(l) == 1:
|
|
|
|
print(p+": 0 (autoselected)")
|
|
|
|
return l[0]
|
|
|
|
i=-1
|
|
|
|
while (i<0) or (i >= len(l)):
|
|
|
|
x = input(p+": ")
|
|
|
|
try:
|
|
|
|
i = int(x)
|
|
|
|
except:
|
|
|
|
i = -1
|
|
|
|
print()
|
|
|
|
return l[i]
|
|
|
|
def get_yes_no(p, default=None):
|
|
|
|
x="a"
|
|
|
|
defaultstr = "[yn]"
|
|
|
|
if default:
|
|
|
|
defaultstr = "[Yn]"
|
|
|
|
elif default == False:
|
|
|
|
defaultstr = "[yN]"
|
|
|
|
while x not in "ynYN":
|
|
|
|
x = input(p+" "+defaultstr+": ")
|
|
|
|
if (x == "") and default is not None:
|
|
|
|
return default
|
|
|
|
return x in "yY"
|
2017-04-24 16:38:22 +00:00
|
|
|
def add_driver(common, name):
|
|
|
|
if common:
|
|
|
|
drivers.append("hw/"+name+"/")
|
|
|
|
else:
|
|
|
|
drivers.append("hw/"+config["SYSTEM"]+"/"+name+"/")
|
|
|
|
drivers=[]
|
2017-04-23 16:09:42 +00:00
|
|
|
config={}
|
|
|
|
config["ARCH"] = get_from_list("Architecture", ["x86","x86_64","arm"])
|
|
|
|
exec(open("kernel/arch/"+config["ARCH"]+"/config.py").read())
|
|
|
|
exec(open("kernel/arch/"+config["ARCH"]+"/"+config["SYSTEM"]+"/config.py").read())
|
|
|
|
exec(open("kernel/cpu/"+config["ARCH"]+"/"+config["LOWEST_CPU"]+"/config.py").read())
|
|
|
|
exec(open("kernel/hw/"+config["SYSTEM"]+"/config.py").read())
|
|
|
|
exec(open("kernel/hw/config.py").read())
|
|
|
|
with open("config.cmake", "w") as f:
|
|
|
|
for key, val in config.items():
|
|
|
|
if val == True:
|
|
|
|
f.write('SET('+key+' 1)\n')
|
|
|
|
elif val != False:
|
|
|
|
f.write('SET('+key+' '+str(val)+')\n')
|
2017-04-24 16:38:22 +00:00
|
|
|
for driver in drivers:
|
|
|
|
f.write("SET(DRIVER_SRCS ${DRIVER_SRCS} "+driver+"*.c "+driver+"*.cpp "+driver+"*.s)\n")
|
2017-04-23 17:41:25 +00:00
|
|
|
|
|
|
|
with open("config.h", "w") as f:
|
|
|
|
for key, val in config.items():
|
|
|
|
if val == True:
|
|
|
|
f.write("#define "+key+" 1\n")
|
|
|
|
elif val == False:
|
|
|
|
f.write("#undef "+key+"\n")
|
|
|
|
elif isinstance(val, int):
|
|
|
|
f.write("#define "+key+" ("+str(val)+")\n")
|
|
|
|
else:
|
|
|
|
f.write("#define "+key+' "'+val+'"\n')
|
2017-04-23 20:04:39 +00:00
|
|
|
if "ENABLE_FRAMEBUFFER_UNICODE" in config:
|
|
|
|
#Write the font
|
|
|
|
chars=range(65536)
|
|
|
|
if not config["ENABLE_FRAMEBUFFER_UNICODE"]:
|
|
|
|
chars = [0x0000, 0x263A, 0x263B, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022, 0x25D8, 0x25CB, 0x25D9, 0x2642, 0x2640, 0x266A, 0x266B, 0x263C,
|
|
|
|
0x25BA, 0x25C4, 0x2195, 0x203C, 0x00B6, 0x00A7, 0x25AC, 0x21A8, 0x2191, 0x2193, 0x2192, 0x2190, 0x221F, 0x2194, 0x25B4, 0x25BC]
|
|
|
|
chars += list(range(0x20, 0x7F))
|
|
|
|
chars += [0x2302]
|
|
|
|
chars += [0xC7, 0xFC, 0xE9, 0xE2, 0xE4, 0xE0, 0xE5, 0xE7, 0xEA, 0xEB, 0xE8, 0xEF, 0xEE, 0xEC, 0xC4, 0xC5,
|
|
|
|
0xC9, 0xE6, 0xC6, 0xF4, 0xF6, 0xF2, 0xFB, 0xF9, 0xFF, 0xD6, 0xDC, 0xA2, 0xA3, 0xA5, 0x20A7, 0x0192,
|
|
|
|
0xE1, 0xED, 0xF3, 0xFA, 0xF1, 0xD1, 0xAA, 0xBA, 0xBF, 0x2310, 0xAC, 0xBD, 0xBC, 0xA1, 0xAB, 0xBB,
|
|
|
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
|
|
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
|
|
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
|
|
|
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
|
|
|
|
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0]
|
|
|
|
chars.sort()
|
|
|
|
ch=chars
|
|
|
|
chars=[]
|
|
|
|
for c in ch:
|
|
|
|
chars.append("{0:0{1}X}".format(c,4))
|
|
|
|
x=open("unifont.hex").readlines()
|
|
|
|
from subprocess import *
|
|
|
|
p = Popen(["./fontgen.py"], stdin=PIPE)
|
|
|
|
for l in x:
|
|
|
|
if l[:4] in chars:
|
|
|
|
p.stdin.write(l.encode("UTF-8"))
|
|
|
|
p.stdin.close()
|
|
|
|
p.wait()
|
2017-04-30 14:46:49 +00:00
|
|
|
|
|
|
|
print("Generating sourcecode…")
|
|
|
|
int_handler = open("kernel/arch/"+config["ARCH"]+"/int.s","w")
|
|
|
|
import os
|
|
|
|
try:
|
|
|
|
os.makedirs("kernel/arch/"+config["ARCH"]+"/include")
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
reg_struct = open("kernel/arch/"+config["ARCH"]+"/include/regs.h","w")
|
|
|
|
exec(open("kernel/arch/"+config["ARCH"]+"/sourcegen.py").read())
|
|
|
|
int_handler.close()
|
|
|
|
reg_struct.close()
|