Z80 IX,IYのテクニック 涼しくなってきてつい夜更かし。i8080上位互換(拡張部分はZ80非互換)CPUの自作中に際し、Z80などを復習中。 Z80に存在しない命令の代用コードを考えてみました。HLとIXが等価という割に EX DE,IX が出来ない仕様がもにょる。 > ADD IX,HL 2+2+2バイト、4+15+4クロック EX DE,HL ADD IX,DE EX DE,HL > LD IX,BC 3+2バイト、14+15クロック LD IX,0 ADD IX,BC > LD D,(IX+A) 2+1+1+1+2+2+1+1+1+3+2バイト、15+4+4+4+7+15+4+4+4+19+14クロック PUSH IX LD D,E LD E,A LD A,D LD D,0 ADD IX,DE LD D,E LD E,A LD A,D LD D,(IX+0) POP IX 自作CPUはここを参考にして、リソースの追加をWレジスタのみとし、AとW,(W:nn),(HL+nn),(HL+BC)の演算、AとWの交換、AとFの論理演算、CFとA(n)の論理演算、A..LとW,(W:nn),(HL+nn),(HL+BC)の移動、DEペアと(W:nn),(HL+nn),(HL+BC)の加減算・移動、DEペアとPC+nn,PC-nn,PC+nnnn,PC+DEの分岐命令を拡張した。 返信
Z80 IX,IYのテクニック
涼しくなってきてつい夜更かし。i8080上位互換(拡張部分はZ80非互換)CPUの自作中に際し、Z80などを復習中。
Z80に存在しない命令の代用コードを考えてみました。HLとIXが等価という割に EX DE,IX が出来ない仕様がもにょる。
> ADD IX,HL
2+2+2バイト、4+15+4クロック
EX DE,HL
ADD IX,DE
EX DE,HL
> LD IX,BC
3+2バイト、14+15クロック
LD IX,0
ADD IX,BC
> LD D,(IX+A)
2+1+1+1+2+2+1+1+1+3+2バイト、15+4+4+4+7+15+4+4+4+19+14クロック
PUSH IX
LD D,E
LD E,A
LD A,D
LD D,0
ADD IX,DE
LD D,E
LD E,A
LD A,D
LD D,(IX+0)
POP IX
自作CPUはここを参考にして、リソースの追加をWレジスタのみとし、AとW,(W:nn),(HL+nn),(HL+BC)の演算、AとWの交換、AとFの論理演算、CFとA(n)の論理演算、A..LとW,(W:nn),(HL+nn),(HL+BC)の移動、DEペアと(W:nn),(HL+nn),(HL+BC)の加減算・移動、DEペアとPC+nn,PC-nn,PC+nnnn,PC+DEの分岐命令を拡張した。