Z80エミュレーターモジュール by hirokirepo このモジュールはZ80をエミュレートできます。 命令 ====関数==== z80run メモリアドレスが入ったint変数,メモリの内容が入った変数(65536Byte),Z80CPUの番号(0(-255)) メモリアドレスが入ったint変数のオフセットからZ80の命令を実行します ioportpoke ioアドレス,8-bitデーター ioポートに8-bitデーターを書き込みます。 stackpoke Z80CPUの番号(0(-255)),スタックの裏表,スタックの番号,スタックに書き込む8-bitデーター スタックにデーターを書き込みます。 z80interrupt メモリアドレスが入ったint変数,メモリの内容が入った変数(65536Byte),Z80CPUの番号(0(-255)),割り込みする命令 Z80に対して割り込みをします。 z80stackreset Z80CPUの番号(0(-255)) スタックをクリアーします。 z80hltendset Z80CPUの番号(0(-255)),halt命令のモード(2:オリジナルと同価、1:スタックのリセットが入る、0:プログラムを終了する) halt命令の挙動を設定します。 ====コールバック関数==== z80run_c メモリアドレスが入ったint変数,メモリの内容が入った変数(65536Byte),Z80CPUの番号(0(-255)) z80runと同価のコールバック変数です。 ioportpeek ioアドレス ioポートから8-bitデータを取り出します。 stackpeek Z80CPUの番号(0(-255)),レジスタの裏表,レジスタの番号 スタックから8-bitデータを取り出します。 isioportcalled 書き込まれたioポートのアドレス(8-bit)を取得します。 isioportcalled16 書き込まれたioポートのアドレス(16-bit)を取得します。 getioportread16bitaddr メモリアドレスが入ったint変数,メモリの内容が入った変数(65536Byte) 読み込み要求のあるioポートの取得します。 また、z80.asをインクルードする前にz80memaccess関数を以下のような形で定義することによりz80仮想マシンモニターを簡単に実装できメモリー空間の変数が必要なくなります(z80runの場合はz80run address,memory,threadnoがz80run address,threadnoでよくなります)。 #module #deffunc z80memaccess int addrbus,int datain,int actype switch actype case 0 poke memory@,addrbus,datain swbreak case 1 dataout=peek(memory@,addrbus) swbreak case 2 swbreak case 3 dataout=0xFF swbreak case 4 dataout=peek(memory@,addrbus) swbreak swend return dataout #global actypeはbit0が0だとデータの書き込み1だと読み込みでbit1がTrueだとi/o空間のアクセスでbit2がTrueだとdramのリフレッシュ信号です。