MPU 68000 シリーズの挙動いろいろ

モトローラのMPU 68000シリーズの挙動。 内容が溜まったら公開予定。
0
GIMONS @kugimoto0715

MOVEMのプリデクリメントモードはMC68000/010とMC68020/030/040で動作が違うんだね・・・ほとんどのコアは対応していない様子。XEiJはコメントが書かれてる。

2015-08-08 14:19:01
Makoto Kamada @kamadox

#XEiJ (X68000 Emulator in Java) version 0.15.08.09 を公開しました。 stdkmd.com/xeij/

2015-08-10 17:17:27
Makoto Kamada @kamadox

#XEiJ 0.15.08.09 MOVEM.wl <list>,-(Ar) で <list> に Ar が含まれているときの動作を修正しました。

2015-08-10 17:17:53
Makoto Kamada @kamadox

ソースにコメントを書いておきながら実装が間違っていたので修正しました。 twitter.com/kugimoto0715/s…

2015-08-10 17:24:33
うさ@DIVE ON BEEPで販売中! @e_usapon

プリデクリメントモードって  movem.? ????,-(??)  ですよね? 多用してるけど、特に違いを感じたことはないな・・・ twitter.com/kugimoto0715/s…

2015-08-12 08:04:35
GIMONS @kugimoto0715

@e_usapon レジスタ→メモリ転送でEAで指定されたプリデクリメントモードのアドレスレジスタがレジスタリストに含まれていた場合の違いですね。MC68020以降はデクリメントされた値がメモリに格納されます。MC68000/80は命令発行時の初期値です。

2015-08-12 08:15:27
GIMONS @kugimoto0715

@e_usapon プリデクリメントされるポインタにそのポインタを転送することはほぼ無いですからね。CPUコアを作っているとこのあたりの違いとかA7レジスタはバイト転送でも必ず2バイト単位でしかINC/DECしないとか面倒な事が多くて・・・

2015-08-12 08:18:43
うさ@DIVE ON BEEPで販売中! @e_usapon

@kugimoto0715 68000のバイト操作ってワードの上位バイトをマスクしただけって感じですよね。(ソフト側からみた場合)

2015-08-12 08:31:21
Makoto Kamada @kamadox

#XEiJ 0.15.08.12 MOVEM.wl <list>,-(Ar) で <list> に Ar が含まれているときの動作を再修正しました。

2015-08-12 19:44:04

 

Bcc.S プリフェッチ

GIMONS @kugimoto0715

x68kの各デバイスのウェイトを計測するゴミアプリの精度が悪いので計測ループとタイムアップ判定フラグをSRAMに押し込んでみた。これでDRAMのリフレッシュによるウェイト誤差は発生しなくなった。

2015-10-19 21:44:50
GIMONS @kugimoto0715

ところが計測ループは1ウェイトのSRAMで40サイクルの筈なのに41サイクル消費している。しばらく悩んだ結果…bcc.bが条件成立時であっても次命令をプリフェッチしているからだと推測。SRAMだから1サイクル消費するよね。ということでコアを修正する。

2015-10-19 21:53:00
GIMONS @kugimoto0715

bcc.wは2ワード必要だからプリフェッチ分も消費するから大丈夫だろうか…後で確認しよう。

2015-10-19 21:55:36
Makoto Kamada @kamadox

@kugimoto0715 マニュアルでもBRA.S/Bcc.Sで分岐するときのリードは2回ですね。2MB搭載機で$1FFFFEに無限ループ$60FE(BRA.S (*))を書いて飛び込むと$200000でバスエラーが出ることから直後のワードがリードされていることが分かります。

2015-10-19 23:48:24
GIMONS @kugimoto0715

@kamadox ナルホド!バスエラー境界だと確かにそうなりますねマニュアル確認してみます。ありがとうございます!

2015-10-19 23:52:39

 

68040 FSGLDIV / FSGLMUL

GIMONS @kugimoto0715

MC68040 DESIGNER'S HANDBOOKによるとFSGLDIV and FSGLMUL are mapped as FMUL and FDIV for performance reasonsだそうだ・・・これユーザーズマニュアルに書くべきことだろ!!

2016-05-08 13:04:19
GIMONS @kugimoto0715

@kugimoto0715 FSGLDIVとFSGLMULも68040ではFPSPで処理されると思っていたらFPSPにルーチンが無くてそれで気付いたよ。

2016-05-08 13:06:03

 

68881/68882 三角関数命令

Izumi Tsutsui @tsutsuii

サインコサインを使ったプラグインというものを考えていたけれど xeyes 的なものしか思い浮かばない(´・ω・`)

2015-08-30 12:00:08
Izumi Tsutsui @tsutsuii

xeyes(1): NetBSD/m68k の MC68881 FPUエミュレーション命令のうち sin, cos 等の三角関数が実装されていないという問題が実際のアプリーケーションで問題になった唯一の事案

2015-08-30 12:05:06
Izumi Tsutsui @tsutsuii

というか FPUにハードで三角関数命令を実装しようとか考えたモトローラの中の人は頭おかしい(若かりし頃にレイトレーシングにでもハマっていたのだろうか)

2015-08-30 12:07:25