m42a / xnp2 Goto Github PK
View Code? Open in Web Editor NEWThis project forked from nonakap/xnp2
Xnp2 is a port for UNIX with X11 of "Neko Project II" PC-9801 emulator.
Home Page: http://www.nonakap.org/np2/
This project forked from nonakap/xnp2
Xnp2 is a port for UNIX with X11 of "Neko Project II" PC-9801 emulator.
Home Page: http://www.nonakap.org/np2/
// ---- 定義 最適化の為のメモリ使用量の抑制 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) CGWND_FONTPTR cgwindowにフォントポインタを持たせる 現状、あまり意味を持ちません 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) システムを終了する。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.