- 仮想ディレクトリまわりの処理がまだ完全には解決していないはず。
- STUDIO KAMADA > X680x0 のメーカー純正ソフトウェアの不具合について > 4. XC ライブラリの不具合
- INCLUDE\TIME.Hで
CLOCKS_PER_SEC
が定義されていない。 (@towser_meow/1638474969494724609)- 代わりにINCLUDE\STDDEF.Hで
CLOCKS_PAR_SEC
が定義されている。
- 代わりにINCLUDE\STDDEF.Hで
- ライブラリディスクの\ASK30\FILES.Cの93行目の条件式が
ftotal <= MAXFILES
となっているため、ファイルが多いとバッファオーバーフローが起きる。} while (nfiles() == 0 && ftotal <= MAXFILES);
- 無償公開版に特有と思われる不具合。
- XC2103.LZH, XC2103I.LZH: \ASK30\MAKEFILEの内容がACI.Hと同一。
- (おそらく全バージョン) DOSLIBの
IOCTRLFDCTL()
とIOCTRLDVCTL()
が入れ替わっている。
NEW KITの拡張マニュアルにはIOCTRLFDCTL()
がドライブ番号drive
を指定する関数という説明が記載されている。 - SCD.X
- (おそらくv3系すべて?) gcc -gで生成した実行ファイルのソースコードデバッグでステップ実行するとアドレスエラーが発生することがある。
-finline-functionsを指定する(または環境変数
GCC_OPTION1=I
)と発生しない。SCD.X側の問題かどうかは不明。
- (おそらくv3系すべて?) gcc -gで生成した実行ファイルのソースコードデバッグでステップ実行するとアドレスエラーが発生することがある。
-finline-functionsを指定する(または環境変数
- HAS060.X - アセンブラ - プログラミング - ソフトウェアライブラリ - X68000 LIBRARY > 既知の不具合
- ベースディスプレースメントにサイズを指定しないと「オフセットが範囲外です」になることがある。
.cpu 68020
b:
lea (a,pc,d0.l),a0
.ds.b 32758
lea (b,pc,d0.l),a0
a:
あるいは
.cpu 68020
moveq #0,d0
tst.b (foo,pc,d0.l) ;Error: オフセットが範囲外です
tst.b (bar,pc,d0.l)
; tst.b (foo,pc,d0.l) ;barに.lをつければOK
; tst.b (bar.l,pc,d0.l)
; tst.b (foo+1,pc,d0.l) ;foo+1またはfoo-1にしてもOK
; tst.b (bar,pc,d0.l)
.dc $ff00
.ds.b 32755
foo: .ds.b 9
bar: .ds.b 1
.end
- DEKOのアヤシいお部屋。 > ぴゅあぱすかる。 > 既知の問題 (ver 1.01)
- kofunc.docの
の関数名は
DrawCardMono( wno;int, x;int, y;int, num;int, card;int )
DrawMonoCard
が正しい。 (@ShirohSuzuki/1672859593654022146)
print using "#,";1e308
で「おかしな命令を実行しました」等のエラーが発生する。
- corlib.a::
DefGraphicPalet()
が動作しない(libcor.aのバグを見つけました)。 インラインアセンブラの記述にtrap #15
が抜けているため。- コンパイル済みのライブラリファイルはないが、 Ko-Window ソースセット 2.24+14.2 のソースコードは修正されている。詳しく調査はしていないが、他にも更新されたファイルがある。
- crt0.S
で間違ったサイズでBSSをクリアしている
(Charlie Balogh: "Did I catch a bug in the X6800…" - Mastodon)。
- そもそもOSがクリアしているのでプログラム側によるクリアは不要。
- (参考情報) ヘッダ構造: PCMデータ数 1バイト、{ID 1バイト、データサイズ 2バイト}×データ数、PCMデータ×データ数
- PCMファイルのサイズが131072バイトを超えるとバスエラー等が発生する(読み込みバッファが固定サイズでファイルサイズをチェックしていないため)。
- PCMファイルのサイズの下位16ビットしかヘッダに書き込まれない。
このためPCMファイルがサイズが65536(0x10000)バイト以上の場合に問題が発生する。
- 未確認だがSFXVIでのゲーム中、途中までしか再生されない、別IDのPCMが途中から再生される、などの問題があるかもしれない。
- SMP2PCM.Xで正しくないファイルサイズで書き出される。
- 実行時にMFP TCDR($e88023; Timer-Cデータレジスタ)の値を本来の値200から256相当に書き換えるが、
終了時に戻さないためTimer-C割り込みの間隔が1.28倍に変わってしまう。
(@kg68k/1492793567512711170)
- カーソル点滅速度やSystem Informationのprocessor performance値に影響する。
- 最新バージョンはv1.33R4だが実行時の表示はVer 1.30R4となっている(integerの綴りが直っているのがv1.33R4)。
- float performanceは実質的に「integer performance」の別バージョン。 (@kamadox/1684887533090660352)
- 日曜日に実行すると時計の曜日が「?」になる。 (@kamadox/1684880439541215232)
DOS _MALLOC2
でメモリを確保しているプロセスがあるときにGRAD.rを-g -b
オプションで登録しようとするとエラー終了するが、 その際にグラフィック画面の使用モード(IOCS _TGUSEMD
)が「1:システムが使用中」に変更されてしまう。- GRADXで修正されている。
- SCSI IOCS未登録時に実行すると白帯エラー($01F5)が発生する。なおV1.14Aでは問題なく、V1.15Aはエラーになる。
- トラブルシューティングの手順(OPT.1によるFD起動、
SCSIDEV=OFF
)で発生する。 - SUSIEXで修正されている。
- トラブルシューティングの手順(OPT.1によるFD起動、
DOS _KEEPPR
に渡す常駐バイト数にデータセクションの大きさが含まれておらず、またスタック範囲外の値を加算している。 他の部分のコードの影響により結果として問題が顕在化しないことが多いと思われるが、場合(値)によっては異常動作を引き起こす。
- 奇数アドレスに配置したZMDデータをOPMデバイスに書き込むとアドレスエラーが発生する。不具合として扱うべきかは検討の余地あり。 (@kg68k/1886460468925227335)
@Kn
の設定可能範囲は-768≦n≦768だが、±769~6144の値がエラーにならない。@Kn1,n2,dly
の設定可能範囲は-768≦n?≦768だが、±769~6144の値がエラーにならない。@Kn1,n2,dly
でn1==n2やdly>32767でエラーになったとき「@B COMMAND ERROR (No.29)」と表示される。- ピッチベンドの際に時折計算を間違えてデータ2バイトの最上位ビットが立ってしまう事がある
(A ♪SOUND mind in a SOUND : Z-MUSIC for the Web - Qiita)
- ZMDコマンド$d1において、MIDIデータを$e0, lower @b, higher @bと送信しているが、higher @bの最上位ビットが立つ。
@M
(数値なしのスイッチング・オフ)実行時にp_detune_m + p_port_work2
を求めたあとクランピングしていない。- 前述の
@Kn
、@Kn1,n2,dly
でZMDコマンドが不正な値になっている場合。
- ファンクション
$09 m_stat
- ベースチャンネルモードがMIDIチャンネル基準モード(
(b1)
)に設定されている場合、引数d2.l = 0
で呼び出すと正しい値が取得できない (d0.lのビット31~25が常に0になる、ビット22~16がPCM2~8との論理和になる)。 (b1)
モードの場合、引数d2.l
の最上位ビットを1にすると上記挙動の影響を受け正しい値が取得できない。
- ベースチャンネルモードがMIDIチャンネル基準モード(
- ZMSC.X
- 総トラック数が32を超えるZMDデータを再生するとバッファオーバーフローを起こし、最悪白帯になる。 (@kg68k/1886531820357120282)
- ZP.R version 2.02
- 常駐検査時に常駐プロセスではないメモリブロックを検査したり、メモリブロックの範囲外を参照することがある。
これにより誤判定やバスエラーが起きることがある。
- 派生版も修正されていなければ同じ不具合あり(ZP3.Rでは修正されている)。
- 空きメモリが少ない状態で実行するとプロセスのメモリブロック範囲外を読み書きすることがある。 これによりバスエラーやハングアップなどが起きる。
- 常駐検査時に常駐プロセスではないメモリブロックを検査したり、メモリブロックの範囲外を参照することがある。
これにより誤判定やバスエラーが起きることがある。
- マニュアル(ZMSC2MAN.LZH)
- 備考:配布アーカイブ(MANUAL.LZH)によっては全ファイルにMacBinaryが書き込まれている場合がある。 当アカウントのzmusic2リポジトリや、現在のX68000 LIBRARYの Z-MUSIC ver2にあるものは問題ない。
- ZM3.MAN
m_tempo(tm)
の引数「tm=トラック番号」は「tm=テンポ値」が正しい。m_stat(ch)
の引数2行目の「全て」は不要。m_assign2(ch,tr)
のコード例のchとtrが逆になっている。 (X-Basic_Manual.pdf Page 170)m_wave_form()
の「オルタニティヴ」は「オルタナティヴ」が正しいと思われる (ソースコードで該当する機能が「alternative」なので)。
- ZM4.MAN
.WAVE_FORM
の「オルタニティヴ」は「オルタナティヴ」が正しいと思われる。
- ZM5.MAN
- 備考:1735行~で解説されているスイッチング・オフについて、
@B
と@K
の場合はオートベンドスイッチオフとなるが、 ZM12.MANにはオートベンド・スイッチ (MML @B) $BD
として載っている($BD
を用いてオンにするMMLはない)。
- 備考:1735行~で解説されているスイッチング・オフについて、
- ZM10.MAN
- ファンクション
$3a get_trk_tbl
: ADPCM2~8のチャンネルが記載されていない。末尾に25~31が並び合計32バイト。 - ファンクション
$58 call_int_play_ope
が記載されていない(ZMSC208.LZHのZMVER_UP.DOCに詳細あり)。 - ちなみにファンクション
$53
はMMLで~
/_
に割り当てられてる機能を相対ボリュームアップ/ダウンから 相対ベロシティアップ/ダウンに変更するかどうかを設定する機能。初期化コマンド(Un)
から呼び出されている。
- ファンクション
- ZM12.MAN
- 「ベースチャンネル設定 (ZMS (B)コマンド)」はZMDデータには出力されない (ただし再生は対応している。v1.09Dまでは出力していたが、v1.09Eで仕様が変更された)。
- ZM16.MAN
m_stat()
の引数「track_bit_pattern
」は「channel_no
」が正しい。詳しくはZMUSIC.Lの項を参照のこと。
- ZPCONV.R version 2.04d
- X68000(MPU 68000)で実行すると
IOCS _SYS_STAT
を呼び出して白帯になる。 - Z-MUSIC Version 2.08に同梱のZPCONV.R version 2.04を使えばよい。
- X68000(MPU 68000)で実行すると
zm_ver()
: スーパーバイザモードで呼び出すとバスエラーが発生する。- スーパーバイザになるための
DOS _SUPER
の返り値を見てユーザーモードに戻るための_SUPER
を省略しなければならないが、 その処理が抜けているため。 - X-BASIC用外部関数MUSICZ.FNCのライブラリ版という位置付けのため、もともとスーパーバイザモードを想定していないのかも。
- スーパーバイザになるための
zm_ver()
: Z-MUSIC Ver.3が常駐していると、0
(常駐していない)ではなくZ-MUSIC Ver.3のバージョン番号を返す。m_stat()
: 引数はチャンネル番号(または0=全チャンネル指定)なので、zmusic.hでの引数名track_bit_pattern
は正しくない。m_assign()
に合わせるとchannel_no
が適切。- 備考:Z-MUSICのファンクション
$09
はビットマップで複数チャンネルを指定できるが、 MUSICZ.FNCとZMUSIC.Lはその呼び出し方法には対応していない。
- 備考:Z-MUSICのファンクション
m_play()
,m_stop()
,m_cont()
: track_no?=='NASI'以降を無視しない。m_out()
: 引数に-1または'NASI'がない場合、スタック上の引数列の末尾を超えてメモリを読み込む。m_mute()
,m_solo()
: ch_no?=='NASI'以降を無視しない。- zmusic.hのコメントの「全トラック」は「全チャンネル」が正しい。
- zmusic.h: m_trk()のMML_ptrなど、書き換えをしないchar*引数にconstが付いていない。
- ZMSC3.X
- メモリブロックの状況によっては、常駐解除時にメモリブロック範囲外を参照しバスエラーが発生したり、 他のプロセスが確保したメモリを誤認して解放してしまう。
- ファンクション
$13 ZM_SE_ADPCM1
- MPCM.X非常駐時、優先度が低くて再生されない場合の戻り値
d0.l
の値が不定(0以外の値にはなる)。 - MPCM.X常駐時、成功すると
d0.l
に0以外の値が返る。- MPCMの不具合の影響を受けているが、それだけではなく、マニュアル記載の仕様ではMPCM
M_EFCT_OUT
は「d0.l≧0 正常終了」であるのに対し、 ZMSC3.XZM_SE_ADPCM1
は「d0.l=0:正常終了」であるので、戻り値の上書きが必要だがこれをしていない。
- MPCMの不具合の影響を受けているが、それだけではなく、マニュアル記載の仕様ではMPCM
- MPCM.X非常駐時、優先度が低くて再生されない場合の戻り値
- メモリ確保ルーチン(
get_mem:
): 下記不具合はファンクション$70 ZM_GET_MEM
など、メモリ確保を行う機能すべてに影響する。- 確保サイズ(
d2.l
)に-8
を指定するとエラー(ILLEGAL_MEMORY_BLOCK_SIZE
)にならず、確保したメモリブロック範囲外に 書き込みを行いバスエラーが発生したり、メモリ内容を破壊してしまう。 - メモリが確保できなかった場合、エラー処理ルーチンが呼ばれエラー情報用のメモリが確保される。 このメモリも確保できなかった場合はエラー処理が繰り返されるため、スタックオーバーフローを起こしてハングアップ等が発生する。
- 確保サイズ(
- ZMC.X
- 上限下限あり8ビット値の配列で、値の直後の2連続セパレータが単独のセパレータとして解釈されてしまう。 (@kg68k/1482025079017926658)
- 上限下限あり16ビット値の配列で、上限値・下限値が正しく適用されないことがある。 (@kg68k/1482027532736245763)
.FM_TUNE_SETUP
をint16_tではなくint8_tとしてコンパイルしてしまう。 (@arith_rose/1481388558246051842)- 参考情報:隠し機能かもしれない挙動。
@Kn1,n2,dly,bnd
、@Bn1,n2,dly,bnd
のdlyに-32768~-1を指定できる。
- 参考情報:ZMDフォーマット(ZM12.MAN)では対応しているが、ZMC.Xの動作やMMLコマンド解説(ZM5.MAN)では使用できない数値指定。
U±n
、@U±n
、Kn
、@P±n
、[VOLUME v]
、[@VOLUME v]
、[VELOCITY u]
、[@VELOCITY u]
、[PANPOT p]
、[@PANPOT p]
、[CH_PRESSURE n]
の下限は-127だが、ZMD仕様では-128。_n
の上限は127だが、ZMD仕様では128(ZMDデータ上は-128)。@Kn1,n2,dly,bnd
と@Bn1,n2,dly,bnd
のbnd、@Qn
の下限は-32767だが、ZMD仕様では-32768。
- ZP3.R
- ファイル名を大文字ドライブ名指定すると、そのドライブに対し特殊ブロックデバイス用の
DOS _DRVCTRL (MD=$34xx)
を発行し、返り値によってはファイルがあってもオープンできない。- FOPEN.HAS::check_drvchgで
d0
レジスタ(の上位バイト)を初期化していないため。
- FOPEN.HAS::check_drvchgで
- 空きメモリが少ない状態で実行するとプロセスのメモリブロック範囲外を読み書きすることがある。 これによりバスエラーやハングアップなどが起きる。
- ファイル名を大文字ドライブ名指定すると、そのドライブに対し特殊ブロックデバイス用の
- ZVT.X version 2.09
- グラフィック画面の使用状況が3(破壊)だとエラー終了してしまう。
- グラフィック画面が使用できない場合にエラーメッセージの後に使用法を表示してしまう。
- version 2.09 patchlevel 1で修正されている。
- マニュアル(ZM302_M.LZH)
- ZM4.MAN
.FM_TUNE_SETUP
、.ADPCM_TUNE_SETUP
のt1~t128の値の上限が+32768と書かれている(本文は正しい)。
- ZM5.MAN
- 値の範囲をA-Bと表記しているものと、A~Bと表記しているものがあり統一されていない。
[TRACK_DELAY n]
のnの上限は32768ではなく32767。[VELOCITY u]
の「・u:-127~+127」は「・u:0~127」が正しい。
- ZM10.MAN
- ファンクション
$13 ZM_SE_ADPCM1
、$14 ZM_SE_ADPCM2
の「d4.lw:再生チャンネル(0-15)」は、 正しくは「d4.lw:再生チャンネル(0-7)」。
- ファンクション
- ZM15.MAN
- ファンクション
$10xx M_EFCT_OUT
の「ファンクション$8005」は、正しくは「ファンクション$8006」。
- ファンクション
- ZM4.MAN
- ZMCHECKZMSC.HAS
zm_check_zmsc()
: スーパーバイザモードで呼び出すとアドレスエラーが発生する。- スーパーバイザになるための
IOCS _B_SUPER
の返り値を見てユーザーモードに戻るための_B_SUPER
を省略しなければならないが、 その処理が抜けているため。 - X-BASIC用外部関数MUSICZ3.FNCのライブラリ版という位置付けのため、もともとスーパーバイザモードを想定していないのかも。
- スーパーバイザになるための
- ZMADPCM1.HAS
zm_se_adpcm1()
: スタックに積まれた引数を正しく受け取れず、正しく動作しない。move.b param2(sp),d1
ではなくmove.b param2+3(sp),d1
のように読み込む必要がある。
- ZMADPCM2.HAS
zm_se_adpcm2()
: スタックに積まれた引数を正しく受け取れず、正しく動作しない。 - ZM_ATOI.HAS
zm_atoi()
:ZM_STOP
ファンクションが呼ばれているため、正しく動作しない。 - ZMPCMREAD.HAS
zm_pcm_read()
:char *param
引数が無視され、a1
レジスタが不定なため正しく動作しない。エラー時に0以外の値が返る。
- ファンクション
$10xx M_EFCT_OUT
- 再生中(DMA使用中)であっても常にDMAの転送開始設定を行ってしまい、音が乱れることがある。
- ほかのファンクションと違い、ここだけ
func_00xx_DMA_start
を呼ぶ前にplay_flag
を見ていないため。
- ほかのファンクションと違い、ここだけ
- 成功時に
d0.l
に戻り値が代入されないため、エラーを正しく検出することができない。- チャンネル番号0~7または
$ff
を指定した場合、d0.l
には負数を含む不定値が返る。 - チャンネル番号
$e0
を指定した場合、d0.l
の上位ワードには負数を含む不定値が返る (一応、下位ワードには割り当てたチャンネル番号が返る)。
- チャンネル番号0~7または
- チャンネル番号
$e0
を指定した場合、IOCS用のチャンネルで再生されることがある(d0.l
の下位ワードには8が返る)。
- 再生中(DMA使用中)であっても常にDMAの転送開始設定を行ってしまい、音が乱れることがある。
- ファンクション
$8006 M_SET_ECHCNT
- 起動時の初期状態および
d1.l = 0
を指定すると、効果音発声数が不正な値に設定される (チャンネル0-7とIOCS用チャンネルの合計9チャンネルで発声される挙動)。
- 起動時の初期状態および
IOCS _CRTMOD
をd1.w = $ffff
(現在の画面モードの取得)で呼び出すと、常にd0.l = $10
が返される。
IOCS _CRTMOD
を呼び出した際に低解像度から高解像度への変更が正しく行われない(例:モード3を指定するとモード2に変更される)。- 画面モード18以上に対応していない(例:モード18を指定するとモード17に変更される)。
この節では修正パッチや改造版があるソフトウェアも掲載しています。
- bup -l/-lmでファイルの日付の表示が乱れる。パッチあり。
- ファイルの日付の表示が乱れる。パッチあり。
- セレクタ画面のファイルの日付の表示が乱れる。パッチあり。
- セレクタ画面のファイルの日付の表示が乱れる。パッチあり。
- 現在の日付の表示が乱れる。パッチあり。
- 現在日時やファイルの日付の表示が乱れる。
- DI V0.51+14Aは問題なし。
- STUDIO KAMADA > X680x0 のメーカー純正ソフトウェアの不具合について
- C Compiler PRO-68K ver2.1 NEW KIT
- バッファ容量指定で大きい数値を指定した場合に「バッファーサイズが正しくありません」のエラーにならず、小さい容量として扱われることがある。 (@kg68k/1887513728209563689)
- ヘルプメッセージの誤字「常時使用可能ななオプション」。
- 西暦2000年以降で表示が乱れる。パッチあり。
- セーブデータの日付の表示が乱れる。 (@huye_4589/1720698235961155723)
- 4月8日に起動するとデモプレイ開始直後にバスエラーが発生する。
(@bml3mk5/1512402885682012163)
- 4月8日、4月9日、6月1日でメインメモリ6MB未満の場合? (@bml3mk5/1512694332721344520)
IOCS _CRTMOD
でグラフィックパレットの初期化が正しく行われない不具合を利用しているため、_CRTMOD
が修正されると逆に問題が発生する(起動時のローディング画像の表示が乱れる)。- 修正環境としてXEiJやcrtmod16.xがあり、対策としてあえて不具合を再現するcrtmod16b.xがある。
- 同じ牌が5枚でる。フロッピーディスクでプレイするとアニメーションリプレイが正常に機能しない。メーカーから修正版送付あり。 (@Nitro_alpha/1791821035995865367)
- 不明。メーカーから修正版送付あり。 (@Nitro_alpha/1785976214827782479)
- 不明。メーカーから修正版送付あり(1993年7月に2回目の送付)。 (@Nitro_alpha/1782721863371927840)
- 移動・メッセージ表示の設定を変更しても速くならないのはX68000のマシンパワー不足。
- 進行不能? メーカーから修正版送付あり(1993年1月28日)。 (@Nitro_alpha/1779152524244914584)
- ファイルサイズがクラスタサイズの倍数でFATの確保数が余計に1だけ多いファイル(例:2HDイメージ内の1024バイトのファイル) を取り出すと、ファイルサイズがクラスタサイズだけ大きくなる。