そういえばアセンブラってまったくといっていいほどわからなかったなー
ということで4ビットマイコンのエミュレータを作ってみることにします。
えーっと開始時間は21:51分
4ビットマイコン 大人の科学マガジンvol.24
というのはこのPDFをみたからです。
技術者の気合が感じられます。
FX−マイコン R165プログラム集
10ヶ月ほど前
こんな設計書で
こんなエミュレートはしたことがあるので、できるはず...
プログラム集の30ページあたりから開始
23:53脳が完全に思考停止状態
まず、仕様の理解だけでなんか頭がくらくらする。特にキャリーフラグ
pythonでrangeでループした際、添字の値を変更できないようでここに相当ハマった。
あとキー入力ぐらいではと思ってますが、後頭部がやられそうで一時中断
pythonだからprint文使いまくってなんとか解析できているけど、これを脳内だけでやるのは…
久しぶりに脳のスペックがちょっと足りていないことを自覚してます。
2:00 1群ようやくバグ取れたか状態
キー入力とかキースキャンにしないといけなかったり
ここからはpygameとか使わないと難しいので終了
なんていったけど4:00ぐらいまで少し追加
無理してしまったので、翌日から風邪
ということで4ビットマイコンのエミュレータを作ってみることにします。
えーっと開始時間は21:51分
4ビットマイコン 大人の科学マガジンvol.24
というのはこのPDFをみたからです。
技術者の気合が感じられます。
FX−マイコン R165プログラム集
10ヶ月ほど前
こんな設計書で
こんなエミュレートはしたことがあるので、できるはず...
プログラム集の30ページあたりから開始
23:53脳が完全に思考停止状態
まず、仕様の理解だけでなんか頭がくらくらする。特にキャリーフラグ
pythonでrangeでループした際、添字の値を変更できないようでここに相当ハマった。
あとキー入力ぐらいではと思ってますが、後頭部がやられそうで一時中断
pythonだからprint文使いまくってなんとか解析できているけど、これを脳内だけでやるのは…
久しぶりに脳のスペックがちょっと足りていないことを自覚してます。
2:00 1群ようやくバグ取れたか状態
キー入力とかキースキャンにしないといけなかったり
ここからはpygameとか使わないと難しいので終了
なんていったけど4:00ぐらいまで少し追加
無理してしまったので、翌日から風邪
#fx-r-165 エミュレータ 1群のみ def getNum(i): return "0123456789abcdef".find(prg[i]) # 0123456789abcedf0123456 #prg="80120f0429120f13f0c2f02"#no.12 #prg="81120f0429220f13f0c2f02"#no.13 #prg="82120f04292f0b20f16f0f2f02"#no.14 #prg="811921931941951"#original1+2+3+4+5 prg="a00f0210f0ef074b1f11f02" hx="0123456789abcdef" r=[0,0,0,0,0,0,0,0]#Ar Br Yr Zr A'r B'r Y'r Z'r m=[0 for i in range(16)] cf=1 p=0 while p#print("add prg",hex(p),prg[p],r) o=prg[p] if o=="0":#KA inp=input()#押していないはenter押下で代用 key=-1 if inp!="":key="0123456789abcdef".find(inp) if inp=="m":print("memory",m) if key>-1: r[0]=key p+=1 cf=0 continue elif o=="1":#AO print("print",hx[r[0]]) elif o=="2":#CH r[0],r[1]=r[1],r[0] r[2],r[3]=r[3],r[2] elif o=="3":#CY r[0],r[3]=r[3],r[0] elif o=="4":#AM m[r[2]]=r[0] elif o=="5":#MA r[0]=m[r[2]] elif o=="6":#M+ a=r[0]+m[r[2]] p+=2 if a>15: r[0]=a-16 cf=1 continue else: r[0]=a cf=0 continue elif o=="7":#M- a=r[0]-m[r[2]] p+=2 if a<0: cf=1 continue else: r[0]=a cf=0 continue elif o=="8":#TIA r[0]=getNum(p+1) p+=2 cf=1 continue elif o=="9":#AIA a=r[0]+getNum(p+1) p+=2 if a>15: r[0]=a-16 cf=1 continue else: r[0]=a cf=0 continue elif o=="a":#TIY r[2]=getNum(p+1) p+=2 cf=1 continue elif o=="b":#AIY a=r[2]+getNum(p+1) p+=2 if a>15: r[2]=a-16 cf=1 continue else: r[2]=a cf=0 continue elif o=="c":#CIA p+=2 if r[0]!=getNum(p+1):cf=1 else:cf=0 continue elif o=="d":#CIY p+=2 if r[2]!=getNum(p+1):cf=1 else:cf=0 continue elif o=="f":#JUMP if cf==1: q=getNum(p+1)*16+getNum(p+2) p=q cf=1 continue else: p+=3 cf=1 continue p+=1 cf=1