【CPU】8080やZ80ってリロケータブルなプログラム書けないよな
■ このスレッドは過去ログ倉庫に格納されています
メモリが絶対番地だから、プログラムを置く位置が常に決まっている。
6800や6501や8086は相対番地も使える。
http://xyz.abc >>86
コンサルからVBAまで
なんでも任せてくれや >>109
昔TNCのキットを頒布していたサークルがあって、それを
そういえば、そのTNCもZ84C015が載ってるんだった >>121
仮想記憶有るから、リロケータブルで有る必要ないしな。 Z80は裏レジスタやら隠し命令だのあった記憶が
CALL先で裏レジスタ使ってPUSH,POP省くという技
とある会社からZ80用のMMUチップが売られてたが流行らなかったな
64180の方が魅力的だったからか お前らいくつだよ?
ってか現在はC言語でプログラム書いてる組み込み屋? >>44
そのあとZフラグ参照する系の命令があった時に死ぬ奴 ファミべやディスクシステムで6502マシン語、MSXでZ80マシン語、X68000でGCC&HAS
PC98でROM BASIC&マシン語モニタやDOSでデバッガやLSI-C試食版で遊んでたのは
40歳前後でも稀によくある(それら以前となると、若干つらい) >>1
Z80は相対ジャンプできるけど?
8080にはない
そのへんごっちゃになってるようじゃあなあ… c使える話でも、ポインタのやり取りで遅くなるから、いつも番地指定で取得、評価、書き換えの繰り返し >>122
ゼビウスのコードはLD A,0だったらしいな 今時のインテルは
xor eax,eax
mov eax,0
どっちもワンクロックで実行可能 今は、普通にアセンブルなんてしなくなったし
コンパイラ任せだから気にもして無かったわ >>93
MYCALL: (^_^;) に出来るようにとかした。 >>135
今時のマイコンは ゼロクリア命令有る。
MIPSとかは、値が常にゼロのレジスタを用意してる。 >>136
コンパイラのバグにはまる事もあるんだ…
以前に別スレで出ていたが、確か20年位前の LSI-C80 で
static char err = 0;
なコードをコンパイルすると、毎回0クリアするバイナリを吐いたりな。 こんなのもあった。何もかも懐かしい。
SUBR1:DB 3E
SUBR2:XOR A
...
...
AND A
JR Z, LABEL1
...
...
LABEL1:
...
...
オペコード 3E は LD A, n R800は速いZ80としてしか使わなかったな。勿体ない。 たまにお前らのことスゲーって思うことあるけど今がそれだわ
伊達にハゲ散らかしてるわけじゃなかったんだな CPU作れば?って言っても何も無かったな?お前らw そもそもZ80で相対分岐を使うのは速度アップの方が大きかったしな
高級言語でリンカを使うのなら重要でない Z80の条件相対分岐はZ,NZ,C,NCしかなかった。 >>148 絶対ジャンプの方が速かった
JR XX - 12 cycle
JP XXXX - 10 cycle
http://clrhome.org/table/ >>135
xorはフラグ書き換えるからアウトオブオーダーやスーパースカラと相性悪そう パチ台スロ台業界じゃZ80互換の石がバリバリ現役なんでそこの開発に聞け >>155 あーそうだった
JR Z,XX 条件成立 12 cycles, 条件不成立 7 cycles 受験が終わったら68000で原始的ワンボードマイコンでも造りますかね・・・と思ってたらメガドライブが出た。 あとインデックスレジスタ関係の命令のためのコードDD(IX用)あるいはFD(IY用)を前置すると、これらのレジスタを8ビット汎用レジスタ的に使える裏命令があった気がする
命令表には載ってないので正式に使うのはまずかっただろうが 未定義命令ね、HとLの代わりに使ったことあります。
いちおうNECの型番忘れたけど互換CPUでは使えた。 思い出した
Z80はI/O空間256バイトって仕様だけど、裏技使うと64k使えたんだよな
ソニーのSMCがVRAM置いてたような、って調べたらWikipediaのZ80 - I/Oポートのところに書いてあったわ >>163>>164
種というかそのままリフレッシュカウンタを読み出して使うことが多かったんじゃね?時代的に
>>166
X1でそんなんアリ?とか思ったけどシャープはZ80のセカンドソース作ってたから動作保証できる、アリだわなと思った >>168
Z80 (というか Intel系 CPU)は、メモリ空間・アクセスと I/Oのそれが完全に別概念で存在する。
アドレス・データバスは共用だけど、それぞれ ~MREQ、~IORQ という負論理な信号線で、
メモリか I/O かを区別する。 out (c), a (ED 79)
という命令があるけど、実際の動作は
out (bc), a
となり、16 ビット I/O アドレス空間へのアクセスが可能っていう裏技 ■ このスレッドは過去ログ倉庫に格納されています