mirror of
https://github.com/libretro/libretro-meowPC98.git
synced 2024-11-23 08:19:58 +00:00
Neko Project 2 (PC98 emulator) port for libretro/RetroArch
accessories | ||
android-project | ||
bios | ||
cbus | ||
codecnv | ||
common | ||
embed | ||
fdd | ||
font | ||
generic | ||
i286c | ||
i286x | ||
i386c | ||
io | ||
libretro | ||
libretro-alt | ||
lio | ||
mem | ||
np2tool | ||
romimage | ||
sdl2 | ||
sound | ||
trap | ||
vram | ||
win9x | ||
x11 | ||
zlib | ||
.gitignore | ||
.travis.yml | ||
calendar.c | ||
calendar.h | ||
common.h | ||
debugsub386.c | ||
debugsub.c | ||
debugsub.h | ||
keystat.c | ||
keystat.h | ||
keystat.tbl | ||
LICENSE | ||
nevent.c | ||
nevent.h | ||
np2ver.h | ||
pccore.c | ||
pccore.h | ||
readme.txt | ||
statsave.c | ||
statsave.h | ||
statsave.tbl | ||
timing.c | ||
timing.h | ||
update.txt |
// ---- 定義 最適化の為のメモリ使用量の抑制 MEMOPTIMIZE = 0~2 CPUにより以下の数値をセットされることを期待している MEMOPTIMIZE未定義 … Celeron333A以降のセカンドキャッシュ有効機 MEMOPTIMIZE = 0 … x86 MEMOPTIMIZE = 1 … PowerPC等のデスクトップ用RISC MEMOPTIMIZE = 2 … StrongARM等の組み込み用RISC コンパイラの引き数・戻り値の最適化 引き数・戻り値でint型以外を指定した場合に、最適化が有効に働かない コンパイラ向けの定義です。 通常は common.h の物を使用します。 REG8 … UINT8型 / (sizeof(REG8) != 1)の場合 上位ビットを0fillする事 REG16 … UINT16型 / (sizeof(REG16) != 2)の場合 上位ビットを0fillする事 いずれも値をセットする側が0fillし、参照側は0fillしたものと見なします。 OSの言語の選択 OSLANG_SJIS … Shift-JISの漢字コードを解釈する OSLANG_EUC … EUCの漢字コードを解釈する OSLINEBREAK_CR … MacOS "\r" OSLINEBREAK_LF … Unix "\n" OSLINEBREAK_CRLF … Windows "\r\n" ※現在は以下のソースコード内で個別に設定しています。 (Windowsが APIによって \r\nの場合と\nの場合があるので…) ・common/_memory.c ・debugsub.c ・statsave.c (milstr.h選択用) SUPPORT_ANK … ANK文字列操作関数をリンクする SUPPORT_SJIS … SJIS文字列操作関数をリンクする SUPPORT_EUC … EUC文字列操作関数をリンクする ※現在milstr.hですべて定義されたままになっています。 ver0.73でmilstr.hの定義を外し compiler.hで指定した物となります。 CPUCORE_IA32 IA32アーキテクチャを採用 i386cを使用する場合の注意点 ・CPU panic や警告表示時に msgbox() という API を使用します。 compiler.h あたりで適当に定義してください。 ・sigsetjmp(3), siglongjmp(3) が無いアーキテクチャは以下の define を compiler.h あたりに追加してください。 ---------------------------------------------------------------------- #define sigjmp_buf jmp_buf #define sigsetjmp(env, mask) setjmp(env) #define siglongjmp(env, val) longjmp(env, val) ---------------------------------------------------------------------- CPUSTRUC_MEMWAIT cpucore構造体にメモリウェイト値を移動する(vramop) SUPPORT_CRT15KHZ 水平走査15.98kHzをサポートする(DIPSW1-1) SUPPORT_CRT31KHZ 水平走査31.47kHzをサポートする Fellowタイプはこれ SUPPORT_PC9821 PC-9821拡張のサポート 当然ですが 386必須です。 また SUPPORT_CRT31KHZも必要です(ハイレゾBIOSを使用する為) SUPPORT_PC9861K PC-9861K(RS-232C拡張I/F)をサポート SUPPORT_IDEIO IDEの I/Oレベルでのサポート でも ATAのリード程度しかできない… SUPPORT_SASI SASI HDDをサポート 定義がなければ常時IDEとして作動します。 SUPPORT_SCSI SCSI HDDをサポート…全然動かない SUPPORT_S98 S98ログを取得 SUPPORT_WAVEREC Soundレベルで waveファイルの書き出し関数をサポート 但し書き出し中は サウンド出力が止まるので ほぼデバグ用 // ---- screen PC-9801シリーズの画面サイズは標準で 641x400。 VGAでは収まらないので 強制的にVGAに収める為に 画面横サイズは width + extend とする。 8 < width < 640 8 < height < 480 extend = 0 or 1 typedef struct { BYTE *ptr; // VRAMポインタ int xalign; // x方向オフセット int yalign; // y方向オフセット int width; // 横幅 int height; // 縦幅 UINT bpp; // スクリーン色ビット int extend; // 幅拡張 } SCRNSURF; サーフェスサイズは (width + extern) x height。 const SCRNSURF *scrnmng_surflock(void); 画面描画開始 void scrnmng_surfunlock(const SCRNSURF *surf); 画面描画終了(このタイミングで描画) void scrnmng_setwidth(int posx, int width) void scrnmng_setextend(int extend) void scrnmng_setheight(int posy, int height) 描画サイズの変更 ウィンドウサイズの変更する フルスクリーン中であれば 表示領域を変更。 SCRNSURFではこの値を返すようにする posx, widthは 8の倍数 BOOL scrnmng_isfullscreen(void) … NP2コアでは未使用 フルスクリーン状態の取得 return: 非0でフルスクリーン BOOL scrnmng_haveextend(void) 横幅状態の取得 return: 非0で 横幅拡張サポート UINT scrnmng_getbpp(void) スクリーン色ビット数の取得 return: ビット数(8/16/24/32) void scrnmng_palchanged(void) パレット更新の通知(8bitスクリーンサポート時のみ) RGB16 scrnmng_makepal16(RGB32 pal32) RGB32から 16bit色を作成する。(16bitスクリーンサポート時のみ) // ---- sound NP2のサウンドデータは sound.cの以下の関数より取得 const SINT32 *sound_pcmlock(void) void sound_pcmunlock(const SINT32 *hdl) SOUND_CRITICAL セマフォを入れる(see sndcsec.c) SOUNDRESERVE 予約バッファのサイズ(ミリ秒) サウンドを割り込み処理する場合の指定。 割り込みの最大延滞時間をSOUNDRESERVEで指定。 (Win9xの場合、自前でリングバッファを見張るので 割り込み無し・指定時間通りに サウンドライトが来るので、この処理は不要だった) UINT soundmng_create(UINT rate, UINT ms) サウンドストリームの確保 input: rate サンプリングレート(11025/22050/44100) ms サンプリングバッファサイズ(ミリ秒) return: 獲得したバッファのサンプリング数 msに従う必要はない(SDLとかバッファサイズが限定されるので) NP2のサウンドバッファ操作は 返り値のみを利用しています。 void soundmng_destroy(void) サウンドストリームの終了 void soundmng_reset(void) サウンドストリームのリセット void soundmng_play(void) サウンドストリームの再生 void soundmng_stop(void) サウンドストリームの停止 void soundmng_sync(void) サウンドストリームのコールバック void soundmng_setreverse(BOOL reverse) サウンドストリームの出力反転設定 input: reverse 非0で左右反転 BOOL soundmng_pcmplay(UINT num, BOOL loop) PCM再生 input: num PCM番号 loop 非0でループ void soundmng_pcmstop(UINT num) PCM停止 input: num PCM番号 // ---- mouse BYTE mousemng_getstat(SINT16 *x, SINT16 *y, int clear) マウスの状態取得 input: clear 非0で 状態を取得後にカウンタをリセットする output: *x clearからのx方向カウント *y clearからのy方向カウント return: bit7 左ボタンの状態 (0:押下) bit5 右ボタンの状態 (0:押下) // ---- serial/parallel/midi COMMNG commng_create(UINT device) シリアルオープン input: デバイス番号 return: ハンドル (失敗時NULL) void commng_destroy(COMMNG hdl) シリアルクローズ input: ハンドル (失敗時NULL) // ---- joy stick BYTE joymng_getstat(void) ジョイスティックの状態取得 return: bit0 上ボタンの状態 (0:押下) bit1 下ボタンの状態 bit2 左ボタンの状態 bit3 右ボタンの状態 bit4 連射ボタン1の状態 bit5 連射ボタン2の状態 bit6 ボタン1の状態 bit7 ボタン2の状態 // ---- void sysmng_update(UINT bitmap) 状態が変化した場合にコールされる。 void sysmng_cpureset(void) リセット時にコールされる void taskmng_exit(void) システムを終了する。