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 なステップで出力しているのか。

引き続き

色々な意味で面白そうなので継続して読んでみる方向。