Skip to content

kg68k/xperiment68k

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Xperiment68k

実験的なコードとかいろいろ。

無保証です。
十分なテストを行っていないので、不具合があるかもしれません。

Description

  • ADPCM
    • beep_adpcmout ... システムビープ音をIOCS _ADPCMOUTで再生
    • beep_mpcm ... システムビープ音をMPCMで効果音として再生
    • beep_zmsc3 ... システムビープ音をZMSC3.Xで効果音として再生
    • mpcm_echcnt ... MPCM.Xの効果音発声数を設定
  • BackGround Process
    • bg1pr2th ... 2個のスレッドを作成して常駐終了
    • bgchangeprc ... 常駐してスレッド切り替え回数を表示
    • bgexec ... 指定コマンドの実行指示をbgexecdスレッドに送信
    • bgexecd ... 常駐終了し、指定されたコマンドをバックグラウンドで実行
    • bggetpr ... DOS _GET_PRでスレッド情報を取得
    • bgkill ... スレッドに終了要求コマンドを送信
    • bgontime ... IOCS _ONTIMEの結果をバックグラウンドで表示
    • bgsleeppr ... DOS _SLEEP_PRでスレッドをスリープする
    • bgsprocd ... bgexecdとほぼ同じだがサブのメモリ管理を設定する
    • bgsprocess ... スレッドに対しサブのメモリ管理を設定
    • bgsuspendpr ... DOS _SUSPEND_PRでスレッドを強制スリープさせる
    • bgthreadid ... スレッドIDを表示
    • bgwakeup ... スレッドに強制スリープ解除コマンドを送信
  • Charset
    • pt_7e ... 文字コード0x7eとX68000の機種依存文字を表示
    • pt_dbhw ... X68000の機種依存文字の文字表を表示
    • pt_usk ... ユーザー定義外字の文字表を表示
    • sjis_tbl ... Shift_JISの2バイト文字の文字表を表示
  • Console
    • bputmes_cur ... IOCS _B_PUTMESのカーソル描画残留の動作検証
    • con_scroll ... コンソール画面のスクロールのテスト
    • dumpstdin ... DOS _READで標準入力から読み込み
    • esc_dsr ... エスケープシーケンスESC [6nで入力されたキーを表示
    • gaiji_ttl ... 外字でタイトルを表示するデモンストレーション
    • putmes12 ... 文字列をテキスト画面に12ドットフォントで描画
    • putmes24 ... 文字列をテキスト画面に24ドットフォントで描画
    • tpalreset ... テキストパレットをシステム設定値に戻す
  • DOS CALL
    • dos_chdir ... DOS _CHDIRでカレントディレクトリを変更
    • dos_chgdrv ... DOS _CHGDRVでカレントドライブを変更
    • dos_chmod ... DOS _CHMODでファイルの属性を取得・変更
    • dos_conctrl ... DOS _CONCTRLでコンソール制御・直接出力
    • dos_create_sp ... DOS _CREATEの特殊モードでファイルを作成
    • dos_curdir ... DOS _CURDIRでカレントディレクトリを取得
    • dos_curdrv ... DOS _CURDRVでカレントドライブを取得
    • dos_exit2 ... DOS _EXIT2で指定した終了コードで終了
    • dos_fatchk ... DOS _FATCHKでファイルのセクタを取得
    • dos_fgetc ... DOS _FGETCでファイルから文字入力
    • dos_fgets ... DOS _FGETSでファイルから行入力
    • dos_filedate ... DOS _FILEDATEでファイルのタイムスタンプを取得または設定
    • dos_getc ... DOS _GETCで標準入力から文字入力
    • dos_getchar ... DOS _GETCHARで標準入力から文字入力
    • dos_getdate ... DOS _GETDATEで日付を取得
    • dos_getenv ... DOS _GETENVで環境変数を取得
    • dos_gets ... DOS _GETSで標準入力から文字列入力
    • dos_gettim2 ... DOS _GETTIM2で時刻を取得(ロングワード)
    • dos_gettime ... DOS _GETTIMEで時刻を取得
    • dos_inkey ... DOS _INKEYで標準入力から文字入力
    • dos_inpout ... DOS _INPOUTによる文字入力または文字出力
    • dos_keyctrl01 ... DOS _KEYCTRLによるキー入力
    • dos_maketmp ... DOS _MAKETMPでテンポラリファイルを作成
    • dos_malloc2 ... DOS _MALLOC2または_S_MALLOCでメモリを確保
    • dos_mkdir ... DOS _MKDIRでディレクトリを作成
    • dos_nameck ... DOS _NAMECKでパス名を展開
    • dos_namests ... DOS _NAMESTSでパス名を展開
    • dos_putchar ... DOS _PUTCHARで標準出力に文字出力
    • dos_rmdir ... DOS _RMDIRでディレクトリを削除
    • dos_setdate ... DOS _SETDATEで日付を設定
    • dos_setenv ... DOS _SETENVで環境変数を設定
    • dos_settim2 ... DOS _SETTIM2で時刻を設定(ロングワード)
    • dos_settime ... DOS _SETTIMEで時刻を設定
    • dos_verify ... DOS _VERIFYでベリファイフラグを設定
    • dos_verifyg ... DOS _VERIFYGでベリファイフラグを取得
    • dos_vernum ... DOS _VERNUMでHuman68kのバージョンを取得
    • dos_wait ... DOS _WAITで終了したプロセスの終了コードを取得
  • Emulator
    • adpcmotchk ... IOCSによるADPCM再生後にDMACのレジスタ値を表示
    • buserr_2w ... バスエラーを発生させる。エミュレータの検証用
    • isemu_rtc ... RTCの挙動の違いを利用したエミュレータ判別
    • movem_aipi ... movem.l (a0)+,a0命令を実行する。エミュレータの検証用
    • run68_dos_test ... run68の-fオプションの動作確認用
    • sram_memsize ... SRAMのメインメモリ容量を書き換える。エミュレータの検証用
  • FEFUNC
  • File
    • appendbytes ... ファイル末尾にデータを追記
    • closerewindatr ... DOS _CLOSE時のファイル属性巻き戻りの動作検証
    • exfiles ... DOS _FILESの拡張モードでエントリを検索
    • existsdir ... ディレクトリが存在するか調べる
    • fileop ... ファイルの作成、オープンと入出力
    • files ... DOS _FILESDOS _NFILESによるエントリの列挙
    • getassign ... DOS _ASSIGN (MD=0)でドライブの割り当て状態を取得
    • ioctrl12 ... DOS _IOCTRL (MD=12, F_CODE=0)によるファイルの特殊コントロール
    • ioctrl13 ... DOS _IOCTRL (MD=13, F_CODE=0)によるドライブの特殊コントロール
    • newvol ... DOS _NEWFILEでボリュームラベルを作成
    • openedfiles ... オープン中のファイルの一覧表示
    • pathlenfix ... Human68kにパッチをあててディレクトリ名の最大長を拡張
    • rewind ... DOS _SEEK (mode=2, offset=-1)によるファイルシークの動作検証
  • Font
    • ankfont ... ANKフォントをテキスト画面に描画
    • defchr_7621 ... IOCS _DEFCHRの動作検証
    • defchr_81f8 ... SJIS:$81f8のフォントにナチュラル記号を定義
    • exchr_hex ... 拡張外字処理を有効にして常駐終了
    • fntadr ... IOCS _FNTADRでフォントアドレスを取得
    • fntget ... フォントを拡大してテキストとして表示
    • fntsize ... IOCS _FNTADRIOCS _FNTGETの結果を一覧表示
    • uskcg24 ... ユーザー定義外字の文字表をテキスト画面に描画
    • uskfontadr ... 外字フォントデータのアドレスを表示
    • uskhw_hex ... 半角外字のフォントを文字コード表記に書き換え
  • Grahic
    • colorbar ... カラーバーのような画像を描画
    • colorgradient ... カラーグラデーションの画像を描画
    • sq64k ... 画面モードを768×512、65536色に変更
  • IOCS CALL
    • iocs_akconv ... IOCS _AKCONVでANK文字コードをS-JISに変換
    • iocs_b_clr_st ... IOCS _B_CLR_STでコンソールの複数行を消去
    • iocs_b_conmod ... IOCS _B_CONMODでカーソルとスクロールを設定
    • iocs_b_del ... IOCS _B_DELでコンソールの複数行を削除
    • iocs_b_ins ... IOCS _B_INSでコンソールに複数行を挿入
    • iocs_b_putc ... IOCS _B_PUTCでコンソールに文字を表示
    • iocs_b_print ... IOCS _B_PRINTでコンソールに文字列を表示
    • iocs_datebcd ... IOCS _DATEBCDで日付データのバイナリ→BCD変換
    • iocs_datebin ... IOCS _DATEBINで日付データのBCD→バイナリ変換
    • iocs_dateget ... IOCS _DATEGETで日付を取得
    • iocs_dateset ... IOCS _DATESETで日付を設定
    • iocs_b_drvchk ... IOCS _B_DRVCHKで2HDドライブの状態設定
    • iocs_jissft ... IOCS _JISSFTでJIS文字コードをS-JISに変換
    • iocs_ms_offtm ... IOCS _MS_OFFTMでマウスボタンを離すまでの時間を計測
    • iocs_ms_ontm ... IOCS _MS_ONTMでマウスボタンを押すまでの時間を計測
    • iocs_ontime ... IOCS _ONTIMEで起動後の経過時間を取得
    • iocs_romver ... IOCS _ROMVERでROMのバージョンを取得
    • iocs_sftjis ... IOCS _SFTJISでS-JIS文字コードをJISに変換
    • iocs_timebcd ... IOCS _TIMEBCDで時刻データのバイナリ→BCD変換
    • iocs_timebin ... IOCS _TIMEBINで時刻データのBCD→バイナリ変換
    • iocs_timeget ... IOCS _TIMEGETで時刻を取得
    • iocs_timeset ... IOCS _TIMESETで時刻を設定
    • iocs_txfill ... IOCS _TXFILLのサンプル
    • iocs_txrascpy ... IOCS _TXYLINEのサンプル
    • iocs_txyline ... IOCS _TXRASCPYでラスタコピーを行う
  • Keyboard
    • bitsns ... IOCS _BITSNSでキーの押し下げ状態を表示
    • jfp_stat ... 日本語FPの各状態を表示
    • kbdctrl ... キーボード制御コマンドコードをキーボードに送信
    • keyflush ... キー入力をフラッシュしてから終了する
    • keyscan ... キーボードから受信したスキャンコードを表示
    • skeyset ... IOCS _SKEYSETによりキー入力を発生し、IOCS _B_KEYINPで取得
  • Miscellaneous
    • datetime ... IOCSで日時を取得、表示
    • dbrams ... IOCSワーク$cb8$cbaの値を再計測
    • exception ... 例外を発生させて例外処理を呼び出す
    • e_ver232c ... ERS E_VER232CでRSDRV.SYSのバージョンを取得
    • hasophash ... HAS060X.Xの命令ハッシュ値を計算
    • is31days ... 月の日数が31日まであるか確認するコード(移植版)
    • joyget ... IOCS _JOYGETによるジョイスティック入力
    • midi_reg ... MIDIボード(YM3802)のレジスタの値を表示
    • minish ... 最小限の機能(ファイルの実行だけ)しかない簡易シェル(minimal shell)
    • nminoreset ... NMIスイッチ処理でのNMIリセットの必要性の検証
    • reset68k ... trap #10命令によるソフトウェアリセット
    • rtc_reg ... RTC(RP5C15)のレジスタの値を表示
    • runwaitchk ... メモリを読み込むループの実行時間を計測
    • super_time ... IOCS _B_SUPERDOS _SUPERDOS _SUPER_JSRのベンチマーク
    • sysport ... システムポート領域の値の表示
    • s_level ... SCSI _S_LEVELでSCSI IOCSのバージョンを取得
    • tokikoe ... テキスト画面に特定のメッセージを描画
    • trap15trace ... トレース実行に対応したtrap #15処理ルーチン
    • vdispst_time ... IOCS _VDISPSTによる割り込みが発生するまでの時間を計測
  • OPMDRV*.X
    • md_on ... OPM _MD_ONでMIDIチャンネル出力許可
    • md_off ... OPM _MD_OFFでMIDIチャンネル出力禁止
    • md_stat ... OPM _MD_STATでMIDIチャンネル出力許可・禁止状態を得る
    • m_alloc ... OPM _M_ALLOCでトラックバッファ確保
    • m_antoff ... OPM _M_ANTOFFでチャンネルにオートノートオフ出力
    • m_assign ... OPM _M_ASSIGNでチャンネルにトラック番号を割り当て
    • m_atoi ... OPM _M_ATOIでトラックバッファの先頭アドレス取得
    • m_bend ... OPM _M_BENDでチャンネルのピッチベンドを設定
    • m_chan ... OPM _M_CHANで出力チャンネルを設定・取得
    • m_chget ... OPM $2eでチャンネル情報のアドレスを取得
    • m_click ... OPM _M_CLICKでメトロノームのクリック音を設定
    • m_cont ... OPM _M_CONTで演奏を再開
    • m_enable .. OPM _M_ENABLEでチャンネルの発声許可・禁止
    • m_end .. OPM _M_ENDで演奏停止小節を設定
    • m_free ... OPM _M_FREEでトラックバッファの残りバイト数を取得
    • m_freea ... OPM _M_FREEAでトラックバッファの全バイト数を取得
    • m_ifchk ... OPM _M_IFCHKでMIDIインターフェイスの有無を検出
    • m_init ... OPM _M_INITでトラックバッファ初期化
    • m_intcall ... OPM $1fでユーザーサブルーチンの登録・停止・アドレス取得
    • m_intoff ... OPM $0eで割り込みを停止
    • m_inton ... OPM $0dで割り込みを開始
    • m_mdreg ... OPM _M_MDREGでMIDIコントローラー(YM3802)のレジスタに書き込み
    • m_meas ... OPM _M_MEASで演奏中の小節番号を取得
    • m_mstvol ... OPM _M_MSTVOLでマスターボリュームを設定・取得
    • m_mod ... OPM _M_MODでチャンネルのモジュレーションを設定
    • m_modsns ... OPM _M_MODSNSでFM音源(YM2151)のモジュレーションの深さを設定・取得
    • m_opmexc ... OPM _M_OPMEXCでFM音源(YM2151)のパラメーターセットモードを設定・取得
    • m_opmlfq ... OPM _M_OPMLFQでFM音源(YM2151)の発振周波数を設定・取得
    • m_opmreg ... OPM _M_OPMREGでFM音源(YM2151)のレジスタを読み書き
    • m_pan ... OPM _M_PANでチャンネルのパンポットを設定・取得
    • m_panflt ... OPM _M_PANFLTでパンポット設定コマンドの出力フィルタを設定・取得
    • m_pcmbsy ... OPM _M_PCMBSYでPCMの実行状態を取得
    • m_pcmget ... OPM _M_PCMGETでPCMバッファに登録されたADPCMデータを取得
    • m_pcmlen ... OPM _M_PCMLENでPCMバッファに登録されたADPCMデータのサイズを取得
    • m_pcmon ... OPM _M_PCMONでPCMバッファに登録されたADPCMデータを再生
    • m_pcmrec ... OPM _M_PCMRECでオーディオ入力端子からADPCMを録音
    • m_pcmset ... OPM _M_PCMSETでPCMバッファにADPCMデータを登録
    • m_pgmflt ... OPM _M_PGMFLTでMML音色切り替えコマンドの出力フィルタを設定・取得
    • m_play ... OPM _M_PLAYで演奏を開始
    • m_tnmget ... OPM _M_PNMGETでPCM音源の音色名を取得
    • m_tnmset ... OPM _M_PNMSETでPCM音源の音色名を登録
    • m_prog ... OPM _M_PROGでチャンネルの音色番号を設定・取得
    • m_start .. OPM _M_STARTで演奏開始小節を設定
    • m_stat ... OPM _M_STATで演奏状態を取得
    • m_stop ... OPM _M_STOPで演奏を停止
    • m_sync ... OPM _M_SYNCで同期モードを設定
    • m_sysch ... OPM _M_SYSCHでチャンネル番号の割り当てモードを変更・取得
    • m_tempo ... OPM _M_TEMPOで曲のテンポを指定
    • m_tnmget ... OPM _M_TNMGETでFM音源(YM2151)の音色名を取得
    • m_tnmset ... OPM _M_TNMSETでFM音源(YM2151)の音色名を登録
    • m_trk ... OPM _M_TRKでトラックへMMLを書き込む
    • m_trkget ... OPM $2dでトラック情報のアドレスを取得
    • m_trns ... OPM _M_TRNSでチャンネルのトランスポーズを設定・取得
    • m_use ... OPM _M_USEでトラックバッファの使用容量を取得
    • m_vel ... OPM _M_VELでチャンネルのベロシティを設定・取得
    • m_version ... OPM _M_VERSIONでバージョンと作成年月日を取得
    • m_vget ... OPM _M_VGETでFM音源(YM2151)の音色データを取得
    • m_vol ... OPM _M_VOLでチャンネルのボリュームを設定・取得
    • m_volflt ... OPM _M_VOLFLTでボリューム設定コマンドの出力フィルタを設定・取得
    • m_vset ... OPM _M_VSETでFM音源(YM2151)の音色データを設定
    • m_ycom ... OPM _M_YCOMでYコマンドの使用モードを設定・取得
    • opmcallvec ... OPMコールの処理アドレスを表示
    • opmdrvtype ... 組み込まれているOPMDRV*.Xの種類を表示
  • Proof of Concept
    • bglivingdead ... DOS _KILL_PRの動作検証
    • bgzombie ... DOS _KILL_PRの動作検証
    • bkeyinpd3 ... IOCS _B_EKYINPの動作検証(d3レジスタ破壊)
    • chxdummy ... ch30inst.x、chxinst.xの共存インストール機能の動作検証
    • conctrl_so ... DOS _CONCTRLのスタックオーバーランの動作検証
    • env_sbo ... DOS _GETENVDOS _SETENVのバッファオーバーフローの動作検証
    • fatchk_bof ... DOS _FATCHKのバッファオーバーフローの動作検証
    • incdir_test ... サブディレクトリ拡張時のディスク破壊の再現補助
    • nameck_bof ... DOS _NAMECKのバッファオーバーフローの動作検証
    • namests_bof ... DOS _NAMESTSのバッファオーバーフローの動作検証
    • ns_sbo ... DOS _NAMESTSの内部ルーチンのバッファオーバーフローの動作検証
    • pathchk_bof1 ... DOS _EXEC (md=2;pathchk)のバッファオーバーフローの動作検証 その1
    • pathchk_bof2 ... DOS _EXEC (md=2;pathchk)のバッファオーバーフローの動作検証 その2
    • zerounit.sys ... ブロックデバイスのユニット数=0の動作検証
  • Process
    • a2arg ... 渡されたコマンドライン引数の内容を表示
    • a2arg_nh ... 渡されたコマンドライン引数の内容を表示(HUPAIRマークなし)
    • bindno ... DOS _EXEC (MD=5;bindno)でモジュール番号を取得
    • crampedexec ... 空きメモリ容量を指定してファイルを実行する
    • dumpenv ... 環境変数をすべて表示
    • dumpstupreg ... 起動時のレジスタ内容を表示
    • entryceil ... 上位メモリから起動する。HUPAIR準拠表示の判別コードの検証用
    • execas ... 「ファイルを別名で実行するR形式実行ファイル」を作成
    • keepceil ... 上位メモリに常駐する。常駐検査コードの検証用
    • keepcmem ... 上位メモリからメモリを確保して常駐する。常駐検査コードの検証用
    • lineage ... 自分自身と祖先のメモリ管理ポインタを表示
    • loadonly ... DOS _EXEC (MD=3;loadonly)で実行ファイルをロード
    • mallocall ... メモリブロックを可能な限り確保
    • malloc_ba_exec ... DOS _EXECの前後でメモリを確保
    • openkeep ... ファイルを開いたまま常駐終了する。DOS _KEEPPRの動作検証
    • pathchk ... DOS _EXEC (MD=2;pathchk)で実行ファイルを検索
    • sysstack_exec ... システムスタックを確保してファイルを実行
  • Show Information
    • si_acc ... 装着されているアクセラレータの種類を表示
    • si_emu ... 実行中のエミュレータの種類を表示
    • si_memory ... メインメモリとハイメモリの情報を表示
    • si_midi ... MIDIボードの種類を表示
    • si_model ... 本体の機種名を表示
    • si_mpuclk ... MPUクロック数を表示
    • si_phantomx ... PhantomXの情報を表示
    • si_scsiex ... SCSIボードの機種名を表示
    • si_sram ... SRAMの容量と使用状況を表示
  • Sprite
    • sp3tx0gr2 ... 画面間プライオリティを特殊な値に設定。エミュレータの検証用
    • spchecker ... スプライトを市松模様に表示
    • splimchk ... スプライトの表示限界の検証用
  • Test
    • divu10bench ... Divu10サブルーチンのベンチマーク
    • divu32 ... Divu32サブルーチンの動作確認用
    • parseint ... ParseIntサブルーチンの動作確認用
    • todecstrbench ... ToDecStringサブルーチンのベンチマーク
  • Z-MUSIC v2
    • zmsc2_gettrktbl ... Z-MUSIC v2の絶対チャンネルテーブル、演奏トラックテーブルを表示
    • zmsc2_mstat ... Z-MUSIC v2の演奏状態を表示
    • zmsc2_oddopm ... 奇数アドレスにあるZ-MUSIC v2のZMDデータをOPMデバイスに書き込む

数値の指定

引数に数値を指定する場合、$または0xから始まる16進数、%または0bから始まる2進数が使えます。 これらの接頭辞がない場合は10進数になります。

数値の解釈にはFEFUNCを使わず自前で処理しています。また数値の文字列化も同様です。 このため実行の際にFLOAT*.Xは不要です(一部、FEFUNCの呼び出しを目的としたプログラムを除く)。

特殊なメモリ状況を構築するプログラムについて

一般に、常駐検査を行うプログラムやプログラム本体の後にバッファを確保するプログラムでは メモリを読み書きする前にメモリブロックの大きさを確認しなければなりません。 それを怠ると、メモリブロックが期待より小さな場合にメモリブロックの範囲外を読み書きしてしまい、 他のメモリブロックの内容の破壊、バスエラーによる停止、プログラムの暴走などの問題が生じます。

crampedexeckeepceilkeepcmemなどのコードはそのようなプログラムの動作を検証するための補助として、 意図的に「小さなメモリブロック」を作り出します。

より確実に検証するためには、メインメモリ容量を11MB以下にしてください。 メインメモリが12MBだとメモリブロックの範囲外がGVRAMになるため、 スーパーバイザモードになっているとバスエラーが発生せず読み書きできてしまうためです。

Build

PCやネット上での取り扱いを用意にするために、src/内のファイルはUTF-8で記述されています。
X680x0上でビルドする際には、UTF-8からShift_JISへの変換が必要です。

必要環境

  • Human68k version 3.02
  • TwentyOne +T
    • 長いファイル名を使用しているため、ファイル名を21文字認識する環境が必要です。
  • GNU make 3.79 human68k-1.4 以降
  • HAS060.X version 3.09+91 以降
    • 作者はHAS060X.Xをhas060.xにリネームして使っています。
  • HLKX 1.1.0 以降 (必須)
  • gcc2
    • 一部の実行ファイルを作成するのに必要ですが、gcc1p でも構いません(src/common.mkを適宜書き換えてください)。
  • 文字コード変換ツール(src2build推奨)

src2buildを使用する場合

必要ツール: src2build

srcディレクトリのある場所で以下のコマンドを実行します。

src2build src
make -C build

u8tosjを使用する方法

必要ツール: u8tosj

srcディレクトリのある場所で以下のコマンドを実行します。

make
make -C build

その他の方法

src/内のファイルを適当なツールで適宜Shift_JISに変換してbuild/ディレクトリに置き、 build/内でmakeを実行してください。
UTF-8のままでは正しくビルドできません。

License

GNU General Public License version 3 or later.

Author

TcbnErik / https://github.com/kg68k/xperiment68k

About

Experimental codes for X680x0/Human68k

Topics

Resources

License

Stars

Watchers

Forks