pyz80
早朝待機ちう。MSX って z80 だったんスね。# 何してる
apple1emu.asm を見るか pyz80 の中身を見るか、と言いつつなんとなく pyz80 の中身を確認。コマンドラインオプションとかを処理して、とりあえず assembler_pass という手続きを 1 と 2 という値を渡して処理している模様。
どういった形になるのかは不明ですが、ここから assemble_instruction という手続きが呼び出されております。
全文引用にて以下。
def assemble_instruction(p, line): opcodeargs = line.split(None,1) if '(' in opcodeargs[0]: opcodeargs = [line[:line.index('(')] , line[line.index('('):] ] if len(opcodeargs)>1: args = opcodeargs[1].strip() else: args='' inst = opcodeargs[0].upper() if (ifstate < 2) or inst=='IF' or inst=='ELSE' or inst=='ENDIF': functioncall = 'op_'+inst+'(p,args)' if PYTHONERRORS: return eval(functioncall) else: try: return eval(functioncall) except: fatal("OpCode not recognised") else: return 0
eval って何、と思ったら op_ENDIF(p,args) な文字列をオペコード毎に作って手続き呼び出しているのか (op_ENDIF な手続きは pyz80 の中で定義済み)。
で、翻訳したソレはどこに出力されてるか、はこのあたりからは全然見えなくて、どうやってるんだろ、と思ったら dump という手続きで memory という領域に出力をしている模様。基本的には p==2 なステップで出力しているのか。
引き続き
色々な意味で面白そうなので継続して読んでみる方向。