def doVblank(): try : uc = vice.get_mem(0xd018) bg = vice.get_mem(0xd021) & 0xf if bg != old_bg : setupColors(viccolors[bg]) x = stdscr.getch() if x != curses.ERR : if x >= curses.KEY_F1 and x <= curses.KEY_F8 : x = x - curses.KEY_F1 elif x == curses.KEY_RIGHT : x = 0x10 elif x == curses.KEY_LEFT : x = 0x11 elif x == curses.KEY_DOWN : x = 0x12 elif x == curses.KEY_UP : x = 0x13 elif x == curses.KEY_HOME : x = 0xc elif x == curses.KEY_F9 : x = 0xf elif x == curses.KEY_BACKSPACE : x = 8 vice.put_key(x) mem = vice.read_memory(0x400, 25*40) colors = vice.read_memory(0xd800, 25*40) for i in range(0,len(mem)) : x = i % 40 y = i / 40 code = ord(mem[i]) c = ord(colors[i]) & 0xf a = curses.color_pair(c + 1) if c in (1,10,13,14,7,2) : a |= curses.A_BOLD if code >= 0x80 : code %= 0x80 a |= curses.A_REVERSE if code < len(screencodes) : if uc & 2 == 0 : stdscr.addstr(y, x, screencodes[code].encode('utf-8'), a) else : stdscr.addstr(y, x, screencodes2[code].encode('utf-8'), a) #stdscr.refresh() except : print "Unexpected error:", sys.exc_info()[1]
def charOutput(a,x,y) : if a == 10 : return elif a == 13 : a = 10 sys.stdout.write(chr(a)) sp = vice.get_sp() stack = vice.read_memory(0x100 + sp-2, 2) ra = ord(stack[0]) | (ord(stack[1])<<8)