M68000のmovem命令のレジスタリストがオールゼロのやつ

2
TcbnErik / 立花@桑島技研 @kg68k

movemのレジスタリストがオールゼロとかいう逆アセンブラ界の与太者 pic.twitter.com/JbaMH4pAPX

2022-12-16 22:28:00
拡大
TcbnErik / 立花@桑島技研 @kg68k

@akuzo2p 思いついたのが3日前なので、エミュで実行できる(0バイト転送=何も起きないのと同義)のは確認しましたが、実MPUで試したことはないです。

2022-12-16 22:38:50
TcbnErik / 立花@桑島技研 @kg68k

GNU assembler version 2.35 (m68k-elf)だと movem.l#0,-(%sp) movem.l(%sp)+,#0 これで通るけど、モトローラ書式というかHAS系ではどうすれば… #M68000

2022-12-17 17:21:09

Makoto Kamada @kamadox

緩募。X68000実機(X68030を含まない)でこれをやったらどうなるかの確認。 twitter.com/kg68k/status/1… pic.twitter.com/tKuC04sTv6

2022-12-17 09:04:22
拡大
Makoto Kamada @kamadox

メモリ不足でmewがバスエラーになる場合は200000を適宜減らしてください。

2022-12-17 09:08:51
Makoto Kamada @kamadox

@x68trap ありがとうございます! 同じ結果で安心しました。MOVEMは過去に何度も修正していてレジスタリストが空の場合も確認した覚えがあるのですがメモを見つけられなくて不安になったのでした。MOVEMの呪い再びとならなくてよかったです。

2022-12-17 12:22:58
トラップ @x68trap

@kamadox お役に立てて光栄です。XEiJのみならず、昔から色々な物にお世話になっております。あらためまして感謝申し上げます m(_ _)m

2022-12-17 12:48:35
Motorolaer @MB25015

@x68trap @kamadox 030などでも試してみました。 XVI+xellent30 ・68000使用時はアドレスエラー ・68030使用時は何事もなく戻ってくる 020以降は奇数アドレスのワードアクセス可能な事がここでも有効。 pic.twitter.com/SY7ha4Cgxz

2022-12-17 16:30:17
拡大
拡大
Motorolaer @MB25015

@x68trap @kamadox X68030+060turbo ・68030使用時 正常終了 ・68060使用時 正常終了 異常なし。 ちなみに、060→030切り替えのために電源を切りましたがDRAMの内容は揮発していなかったので横着してそのまま実行。。 pic.twitter.com/qhzA2Rq2Wa

2022-12-17 16:34:22
拡大
拡大
Makoto Kamada @kamadox

@MB25015 @x68trap ありがとうございます。68030と68060のMOVEM.wl <ea>,<list>は<list>が空のとき<ea>をリードしないので、アドレスが奇数かどうかに関係なく何も起こらないのだろうと思います。

2022-12-17 16:52:00

isaki @isaki68k

あのgasのmovemの書式はd0-d7/a0-a7が複雑すぎてパース出来なかったかする気がなかった賜物だと思うけど(知らんけど)、movemのリストがなかった時のニーモニック誰か考案してほしい…。>RT

2022-12-18 16:07:15
isaki @isaki68k

nonoは仕方ないので movem noregs,-(sp) fmovem nofpn,-(sp) fmovem nofpc,-(sp) と表示してる。いまいちしっくりは来ていない。

2022-12-18 16:11:53
isaki @isaki68k

movem だけなら何でもよかったんだけど(XM6iの時は nolist,-(sp)て単語にしてたはず)、fmovemはFP0-7かFPcrレジスタかによってバイナリも違うし空だった時の挙動も違うので区別しないといけないんだけど、命令語側で区別できなくてレジスタリストで区別しないといけないので難易度高い。

2022-12-18 16:15:37
isaki @isaki68k

リストが空の{,f}movemなんてバイナリエディタで置かないと出てこんからまあええやろ…と普通は思うところだけど、LUNA-IとかいうマシンのPROMには普通にサブルーチンごとにこの命令が現れてだな…。

2022-12-18 16:18:00
isaki @isaki68k

なので fmovem のリストが空の時やらEAが正しくない組み合わせの時の挙動を調べるテストコードを何年か前に書いた。今見るとソースにコメントなさすぎてつらいけど nono のソースアーカイブの exp/fmovem{c,n}.has がそれなので興味ある人はどうぞ。

2022-12-18 16:32:27
isaki @isaki68k

fmovem FP0-7 が空の場合は転送しないだけで済むけど、fmovem FPcr のほうが空だと FPIAR を転送するっぽいという挙動をする。

2022-12-18 16:35:09
isaki @isaki68k

一見謎だけどたぶん中身こうだよね? 0来るとは思ってなかった的な。 if (立ってるビット数>1) { // 複数レジスタ転送 } else if (FPCRのビット) { // FPCRを転送 } else if (FPSRのビット) { // FPSRを転送 } else { // FPIARを転送 }

2022-12-18 16:40:11
isaki @isaki68k

なので話は戻って fmovem の空リストを2種類区別するデファクトな名前を誰かー。

2022-12-18 16:42:51