やはり8080やZ80はアドレッシングモードが貧弱で悲しい
初心者でもプログラミングし易いのと逆アセンブルでの解析が比較的易しいのは
利点だが LD --(IX), BC
LD BC, (IX)++
LD (IX)+,(IY)+
LD (IX)++, (IY)++
ADD (HL),A
ADC (IX),BC
ADC (HL)+,A
ADD (IX)++,BC
LD BC,(PC,<LABEL>)
INW (IX) ;インデクスレジスタ間接16bitインクリメント
みたいのが欲しいかというと、それほどでもなく
理由:どーせ命令長が伸びて「それほどメモリ節約にならんやんけ!8080な範囲でやりくりした方が動作早いやんけ!」となる HとLがそれぞれ8bitアキュームレータ扱いで
ADD L,A
ADC H,0
とか書けたら良かったんだろうか 命令数が限られた8bitだから厳選してるんだよな
使われないアドレッシングの命令があると無駄になるし 6502や6809に演算結果をメモリ側に残す命令が欲しかった
OPコードマップは空いてるんだし LDA #$01
STA <$01
LDA #$7F ;A9 7F 2clk
ACM <$01 ;67 01 (仮) 4clk A=($01)=#$80
;LDA <$01 ;A9 01 3clk
;ADC #$7F ;69 7F 2clk
;STA <$01 ;85 01 3clk
;2byte 2clk オトク
LDA #$0F ;A9 0F 2clk
ANM $0100 ;2F 00 01(仮) 5clk A = ($0100)
;LDA $0100 ;AD 00 01 4clk
;AND #$0F ;29 0F 2clk
;STA $0100 ;8D 00 01 4clk
;3byte 3clk オトク
6502風、こんな感じ? ブロック転送やブロックサーチの命令なんか無くても困らんから
乗算や除算を1ステップだけ実行する命令が欲しかった CPUとDMAが別チップになってるけど不可分だったならブロック転送やブロックサーチはいらない分、それも可能だったりしたかもね。 Z80は相対ジャンプ使えるからいいね。逆に8080が人気無いのはこの為か?
ゲームボーイのCPUは洗練されていて相対ジャンプはあるけど、裏レジスタ無しの
シンプル設計 8086パソコンで初めてパソコン触った口で
8086のセグメントが大嫌いだったけど、後でZ80を触るようになって
8086は8bit CPUに比べれば非常に高機能だったんだなと改めて認識したなぁ 相対ジャンプ、遅くなってあんまり嬉しくなかったなぁ(DJNZを除く) >>12
リフレッシュ機能の有無
当時のホビーストが出始めのDRAM使うにはリフレッシュ機能自分で組み込む必要あったから あと8080との比較なら+5V単一電源って言うのもあるな >>5
AレジスタとHLレジスタに分けちゃったのがなんでやという気がする
アキュムレータAH,ALに拡張して8ビットはALで計算して一命令でAHALに拡張(符号あり、なし)できるようにしたらよかったと思う >>17
でもその代わり、メモリポインタ計算であるHL系とアキュムレータとで別々に計算できて良かったかもね。
8080だとHLではなく Mだし、そういう思想かと思うわ。 >>15
それってプログラマーが意識してプログラム中に随時、リフレッシュ処理をはさむようにしなきゃならなかったって事? >>16
そういやそれも大きいね
>>19
Z80が出始めのころの自作マイコンボードの話
SRAMより容量多いDRAMが登場してみんな使いたかったんだけどフレッシュ回路を付けなくちゃいけないから面倒だった
それがZ80だとCPUにその機能があるんで付ける必要ないから人気になった >>19
そうじゃなくてCPU止めてリフレッシュする回路を別に組まないといけないって話だろ 内部16bitにしてHLもIXも同一クロックで回せばいいのに
Z80コードから内部コードに変換して Z80の子孫は[HL+d8] [DE+d8] [SP+d8] [HL+B] [HL+C] [d16+B] [d16+C] [d16+BC]
とかができるがやはりインストラクションセットは醜い
なぜR8Cの方を残さない >>10
除算で内部的には剰余が判ってる筈なんで何処かのレジスタに剰余を入れて欲しかった 今なら1MBぐらいでSRAMで実装できそうですけどね。 >>26
日立 HD64180(似非Z80)に SRAM1M入りが 1985年にあったら組込み用途でヒットしただろね X1でZ80,X68000で68000を使ってたのであれくらいが丁度良い
覚えることが少ないほうが良い NEC V30とか使えば実質仮想8080モードが使える GB CPUって何か中途半端だな
Z80から多くの機能が削られて8080に近いかと思えば
余り使わないCB+xxのビット命令は存在していたりとか レジスタを8080と同じにしただけで、命令は極力削らない方針でまとめたのでは というか皆どうやって知ったのだろうか
使い方・・・・
だいぶ後でCは本があったので覚えたけど
仕事の研修でルネサスのアセンブラを知ったのが最初だったわ(笑)
(どんだけ後なんだよ(笑))
研修内容
RS232Cとのデータ通信割込み みたいな
組み込み系 >>34
そうか?以下に書いてるように割と考えられてるように思えるが。
https://www.wizforest.com/diary/120123.html
6502のゼロページアドレッシングもどきで6502系の経験活かせるようにしてる感じ 8080系が幅をきかせていたのはやっぱインテルだから? 初期のインテル製品は日本メーカで製造してたのが多い(セカンドソース含む)から販社の推しも強かったのもあるかもしれない むっちゃクチャ面白い記事を見つけた
https://www.saluteweb.net/~oss_8080.html
https://www.saluteweb.net/~oss_z80.html
なんでZ80アセンブラは「あれ?こういう書き方できないの?」って事になるのかわかったよ