├── .gitattributes ├── .github └── workflows │ ├── crowdin_prep.yml │ └── crowdin_translate.yml ├── .gitignore ├── .gitlab-ci.yml ├── LICENSE ├── Makefile ├── Makefile.common ├── README.md ├── document ├── BUILD-APPENDIX.TXT ├── BUILD-OLDMAC.TXT ├── BUILD-UNIX+MAC.TXT ├── BUILD-WIN32.TXT ├── FAQ.TXT ├── FORMAT.TXT ├── GET-IMAGE.TXT ├── HISTORY.TXT ├── MANUAL.TXT └── QUASI88.TXT ├── intl ├── .gitignore ├── activate.py ├── core_option_regex.py ├── core_option_translation.py ├── crowdin.yaml ├── crowdin_prep.py ├── crowdin_source_upload.py ├── crowdin_translate.py ├── crowdin_translation_download.py ├── download_workflow.py ├── initial_sync.py ├── remove_initial_cycle.py ├── upload_workflow.py └── v1_to_v2_converter.py ├── link.T ├── mpw ├── CAUTION.sit.hqx ├── KEYCONF.prefs.sit.hqx ├── QUASI88-68k.make.sit.hqx ├── QUASI88-rsrc.rsrc.sit.hqx ├── QUASI88.make.sit.hqx └── QUASI88.prefs.sit.hqx └── src ├── LIBRETRO ├── config.h ├── device.h ├── disks.c ├── disks.h ├── file-op.c ├── filename.h ├── graph.c ├── jni │ ├── Android.mk │ └── Application.mk ├── libretro-common │ ├── compat │ │ ├── compat_fnmatch.c │ │ ├── compat_getopt.c │ │ ├── compat_ifaddrs.c │ │ ├── compat_posix_string.c │ │ ├── compat_snprintf.c │ │ ├── compat_strcasestr.c │ │ ├── compat_strl.c │ │ ├── compat_vscprintf.c │ │ └── fopen_utf8.c │ ├── encodings │ │ ├── encoding_crc32.c │ │ └── encoding_utf.c │ ├── file │ │ ├── archive_file.c │ │ ├── archive_file_7z.c │ │ ├── archive_file_zlib.c │ │ ├── config_file.c │ │ ├── config_file_userdata.c │ │ ├── file_path.c │ │ ├── nbio │ │ │ ├── nbio_intf.c │ │ │ ├── nbio_linux.c │ │ │ ├── nbio_orbis.c │ │ │ ├── nbio_stdio.c │ │ │ ├── nbio_unixmmap.c │ │ │ └── nbio_windowsmmap.c │ │ └── retro_dirent.c │ ├── include │ │ ├── boolean.h │ │ ├── compat │ │ │ ├── apple_compat.h │ │ │ ├── fnmatch.h │ │ │ ├── fopen_utf8.h │ │ │ ├── getopt.h │ │ │ ├── ifaddrs.h │ │ │ ├── intrinsics.h │ │ │ ├── msvc.h │ │ │ ├── msvc │ │ │ │ └── stdint.h │ │ │ ├── posix_string.h │ │ │ ├── strcasestr.h │ │ │ ├── strl.h │ │ │ ├── zconf.h │ │ │ ├── zconf.h.in │ │ │ ├── zlib.h │ │ │ └── zutil.h │ │ ├── encodings │ │ │ ├── crc32.h │ │ │ ├── utf.h │ │ │ └── win32.h │ │ ├── file │ │ │ ├── archive_file.h │ │ │ ├── config_file.h │ │ │ ├── config_file_userdata.h │ │ │ ├── file_path.h │ │ │ └── nbio.h │ │ ├── libretro.h │ │ ├── memmap.h │ │ ├── retro_assert.h │ │ ├── retro_common.h │ │ ├── retro_common_api.h │ │ ├── retro_endianness.h │ │ ├── retro_environment.h │ │ ├── retro_inline.h │ │ ├── retro_math.h │ │ ├── retro_miscellaneous.h │ │ ├── retro_stat.h │ │ ├── streams │ │ │ ├── chd_stream.h │ │ │ ├── file_stream.h │ │ │ ├── file_stream_transforms.h │ │ │ ├── interface_stream.h │ │ │ ├── memory_stream.h │ │ │ ├── stdin_stream.h │ │ │ └── trans_stream.h │ │ ├── string │ │ │ └── stdstring.h │ │ └── vfs │ │ │ ├── vfs.h │ │ │ ├── vfs_implementation.h │ │ │ └── vfs_implementation_cdrom.h │ ├── streams │ │ ├── chd_stream.c │ │ ├── file_stream.c │ │ ├── file_stream_transforms.c │ │ ├── interface_stream.c │ │ ├── memory_stream.c │ │ ├── stdin_stream.c │ │ ├── trans_stream.c │ │ ├── trans_stream_pipe.c │ │ └── trans_stream_zlib.c │ ├── string │ │ └── stdstring.c │ └── vfs │ │ ├── vfs_implementation.c │ │ └── vfs_implementation_uwp.cpp ├── libretro-file.h ├── libretro.c ├── libretro_core_options.h ├── libretro_core_options_intl.h ├── main.c └── pseudo_bios.h ├── MINI ├── audio.c ├── config.h ├── device.h ├── event.c └── wait.c ├── basic.h ├── crtcdmac.c ├── crtcdmac.h ├── debug.c ├── drive.h ├── emu.c ├── emu.h ├── event.h ├── fdc.c ├── fdc.h ├── file-op.h ├── fmgen ├── 00README.TXT ├── diag.h ├── fmgen.cpp ├── fmgen.h ├── fmgeninl.h ├── fmtimer.cpp ├── fmtimer.h ├── headers.h ├── misc.h ├── opna.cpp ├── opna.h ├── psg.cpp ├── psg.h ├── readme.txt └── types.h ├── fname.c ├── font.h ├── getconf.c ├── getconf.h ├── graph.h ├── help.h ├── image.c ├── image.h ├── initval.h ├── intr.c ├── intr.h ├── keyboard.c ├── keyboard.h ├── memory.c ├── memory.h ├── menu-screen.c ├── menu-screen.h ├── menu.c ├── menu.h ├── message.h ├── monitor.c ├── monitor.h ├── pause.c ├── pause.h ├── pc88cpu.h ├── pc88main.c ├── pc88main.h ├── pc88sub.c ├── pc88sub.h ├── pio.c ├── pio.h ├── q8tk-glib.c ├── q8tk-glib.h ├── q8tk.c ├── q8tk.h ├── quasi88.c ├── quasi88.h ├── romaji-table.h ├── romaji.c ├── romaji.h ├── screen-16bpp.c ├── screen-32bpp.c ├── screen-8bpp.c ├── screen-func.h ├── screen-menu-double.h ├── screen-menu-full.h ├── screen-menu-half-p.h ├── screen-menu-half.h ├── screen-menu.h ├── screen-snapshot.c ├── screen-status.h ├── screen-vram-200.h ├── screen-vram-200h-p.h ├── screen-vram-200h.h ├── screen-vram-400.h ├── screen-vram-400h.h ├── screen-vram-base.h ├── screen-vram-clear.h ├── screen-vram-double.h ├── screen-vram-full.h ├── screen-vram-half.h ├── screen-vram.h ├── screen.c ├── screen.h ├── snapshot.c ├── snapshot.h ├── snddrv.h ├── snddrv ├── 00README.TXT ├── license.txt ├── mame.txt ├── quasi88 │ ├── 2203fmgen.cpp │ ├── 2203fmgen.h │ ├── 2608fmgen.cpp │ ├── 2608fmgen.h │ ├── beep.c │ ├── beep.h │ ├── beepintf.c │ ├── beepintf.h │ ├── machine.c │ ├── mame-quasi88.c │ └── mame-quasi88.h └── src │ ├── cpuintrf.h │ ├── driver.c │ ├── driver.h │ ├── mame.h │ ├── mamecore.h │ ├── osdepend.h │ ├── profiler.h │ ├── restrack.c │ ├── restrack.h │ ├── sndintrf.c │ ├── sndintrf.h │ ├── sound.c │ ├── sound.h │ ├── sound │ ├── 2203intf.c │ ├── 2203intf.h │ ├── 2608intf.c │ ├── 2608intf.h │ ├── ay8910.c │ ├── ay8910.h │ ├── flt_rc.c │ ├── flt_rc.h │ ├── flt_vol.c │ ├── flt_vol.h │ ├── fm.c │ ├── fm.h │ ├── samples.c │ ├── samples.h │ ├── wavwrite.c │ ├── wavwrite.h │ ├── ymdeltat.c │ └── ymdeltat.h │ ├── state.h │ ├── streams.c │ ├── streams.h │ └── timer.h ├── soundbd.c ├── soundbd.h ├── status.c ├── status.h ├── suspend.c ├── suspend.h ├── utf16.c ├── utility.c ├── version.h ├── wait.h ├── z80-code.h ├── z80-codeCB.h ├── z80-codeED.h ├── z80-codeXX.h ├── z80-codeXXCB.h ├── z80-debug.c ├── z80-table.h ├── z80.c └── z80.h /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.github/workflows/crowdin_prep.yml: -------------------------------------------------------------------------------- 1 | # Prepare source texts & upload them to Crowdin 2 | 3 | name: Crowdin Source Texts Upload 4 | 5 | # on change to the English texts 6 | on: 7 | push: 8 | branches: 9 | - master 10 | paths: 11 | - 'src/LIBRETRO/libretro_core_options.h' 12 | 13 | jobs: 14 | upload_source_file: 15 | runs-on: ubuntu-latest 16 | steps: 17 | - name: Setup Java JDK 18 | uses: actions/setup-java@v1 19 | with: 20 | java-version: 1.8 21 | 22 | - name: Setup Python 23 | uses: actions/setup-python@v2 24 | 25 | - name: Checkout 26 | uses: actions/checkout@v2 27 | 28 | - name: Upload Source 29 | shell: bash 30 | env: 31 | CROWDIN_API_KEY: ${{ secrets.CROWDIN_API_KEY }} 32 | run: | 33 | python3 intl/upload_workflow.py $CROWDIN_API_KEY "quasi88-libretro" "src/LIBRETRO/libretro_core_options.h" 34 | -------------------------------------------------------------------------------- /.github/workflows/crowdin_translate.yml: -------------------------------------------------------------------------------- 1 | # Download translations form Crowdin & Recreate libretro_core_options_intl.h 2 | 3 | name: Crowdin Translation Integration 4 | 5 | on: 6 | schedule: 7 | # please choose a random time & weekday to avoid all repos synching at the same time 8 | - cron: '50 14 * * 5' # Fridays at 2:50 PM, UTC 9 | 10 | jobs: 11 | create_intl_file: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Setup Java JDK 15 | uses: actions/setup-java@v1 16 | with: 17 | java-version: 1.8 18 | 19 | - name: Setup Python 20 | uses: actions/setup-python@v2 21 | 22 | - name: Checkout 23 | uses: actions/checkout@v2 24 | with: 25 | persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of your personal access token. 26 | fetch-depth: 0 # otherwise, there would be errors pushing refs to the destination repository. 27 | 28 | - name: Create intl file 29 | shell: bash 30 | env: 31 | CROWDIN_API_KEY: ${{ secrets.CROWDIN_API_KEY }} 32 | run: | 33 | python3 intl/download_workflow.py $CROWDIN_API_KEY "quasi88-libretro" "src/LIBRETRO/libretro_core_options_intl.h" 34 | 35 | - name: Commit files 36 | run: | 37 | git config --local user.email "github-actions@github.com" 38 | git config --local user.name "github-actions[bot]" 39 | git add intl/*_workflow.py "src/LIBRETRO/libretro_core_options_intl.h" 40 | git commit -m "Fetch translations & Recreate libretro_core_options_intl.h" 41 | 42 | - name: GitHub Push 43 | uses: ad-m/github-push-action@v0.6.0 44 | with: 45 | github_token: ${{ secrets.GITHUB_TOKEN }} 46 | branch: ${{ github.ref }} 47 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | *.d 3 | 4 | # Object files 5 | *.o 6 | *.ko 7 | *.obj 8 | *.elf 9 | 10 | # Linker output 11 | *.ilk 12 | *.map 13 | *.exp 14 | 15 | # Precompiled Headers 16 | *.gch 17 | *.pch 18 | 19 | # Libraries 20 | *.lib 21 | *.a 22 | *.la 23 | *.lo 24 | 25 | # Shared objects (inc. Windows DLLs) 26 | *.dll 27 | *.so 28 | *.so.* 29 | *.dylib 30 | 31 | # Executables 32 | *.exe 33 | *.out 34 | *.app 35 | *.i*86 36 | *.x86_64 37 | *.hex 38 | 39 | # Debug files 40 | *.dSYM/ 41 | *.su 42 | *.idb 43 | *.pdb 44 | 45 | # Kernel Module Compile Results 46 | *.mod* 47 | *.cmd 48 | .tmp_versions/ 49 | modules.order 50 | Module.symvers 51 | Mkfile.old 52 | dkms.conf 53 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2019, celerizer 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Please refer to the libretro docs for information regarding BIOS and compatibility: 2 | https://docs.libretro.com/library/quasi88/ 3 | 4 | # QUASI88-libretro 5 | A port of QUASI88 to the libretro specification. This is a WIP port with some currently unsupported features: 6 | 7 | * Tape support 8 | * Loading BIOS files from multiple possible filenames 9 | * Some keys are not mapped to the libretro keyboard yet 10 | 11 | # Copyright 12 | QUASI88 is an emulator by Showzoh Fukunaga licensed under the BSD 3-Clause license. This libretro port is distributed in the same way. 13 | 14 | The sound processing portion of QUASI88 uses source code from MAME and XMAME. The copyright to this source code belongs to its corresponding authors. Please refer to license/MAME.TXT for licensing information. 15 | 16 | The sound processing portion of QUASI88 also uses source code from the FM audio generator "fmgen". The copyright to this source code belongs to cisc. Please refer to license/FMGEN.TXT (in Japanese) for licensing information. 17 | -------------------------------------------------------------------------------- /document/BUILD-APPENDIX.TXT: -------------------------------------------------------------------------------- 1 | 2 | QUASI88 のコンパイル方法 <補足> 3 | 4 | ------------------------------------------------------------------------------- 5 | 6 | ●以前のバージョンの MAME/XMAME のサウンドドライバを利用する方法 7 | 8 | QUASI88 ver 0.6.4 以降をコンパイルすると、 MAME 0.112/XMAME 0.106 の 9 | サウンドドライバが組み込まれるようになっています。 10 | 11 | QUASI88 のコンパイルの前に、以下の細工をしておくことで ver 0.6.3 以前 12 | 同様に、 MAME 0.71/XMAME 0.71.1 のサウンドドライバを組み込むことができます。 13 | 14 | 15 | ○ UNIX (Mac OS X) の場合 16 | 17 | 1) Makefile を編集し、'USE_OLD_MAME_SOUND = 1' の行のコメントを 18 | 外してください。 (行頭の # を削除してください) 19 | 20 | 2) フルコンパイルします。 21 | コンパイル方法は、 「BUILD-UNIX+MAC.TXT」を参照してください。 22 | 23 | 24 | ○ Windows / Classic Mac OS の場合 25 | 26 | 1) ソースをすべて展開します。 27 | 28 | 2) src フォルダの直下にある、 snddrv フォルダをフォルダごと削除 29 | します。( または、フォルダ名を適当なものに変更します ) 30 | 31 | 3) src フォルダの直下にある、 snddrv-old フォルダの名前を、 32 | snddrv に変更します。 33 | 34 | 4) フルコンパイルします。 35 | コンパイル方法は、 「BUILD-WIN32.TXT」「BUILD-OLDMAC.TXT」を 36 | 参照してください。 37 | 38 | 39 | 無事コンパイルが完了したら、 QUASI88 を起動し、メニューモード入って 40 | ください。ここで MAME/XMAME のバージョンが確認できます。 41 | 42 | 43 | MAME 0.71/XMAME 0.71.1 のサウンドドライバの特長を以下にあげます。 44 | 45 | ・処理速度が早くなります。 46 | ・必要とするメモリ量が減ります。 47 | ・long long 型を使用しません。 48 | ・オプションや初期値が、一部で異なります。 49 | 50 | 主観ですが、サウンドの再現度はあまり変わらないように思います。 51 | 機能的にもほとんど変わらないので、資源の乏しい環境にて動作させる場合は、 52 | こちらを使うのもいいかもしれません。 53 | -------------------------------------------------------------------------------- /document/FORMAT.TXT: -------------------------------------------------------------------------------- 1 | 2 | ディスクイメージファイルのフォーマット 3 | 4 | ------------------------------------------------------------------------------- 5 | 6 | QUASI88 で使用するディスクイメージファイルのフォーマットは、 7 | P88SR.EXE (PC8801mk-2SR emulator) で使用される、ディスクイメージファイルの 8 | フォーマットに準拠しています。 9 | このフォーマットは、通称 「D88形式」とか、「D88フォーマット」とか呼ばれる 10 | もので、拡張子に .D88 や、.d88 をつけるのが一般となっています。 11 | 12 | 例 → N88BASIC.D88、 n88demo.d88 13 | 14 | 15 | 以下に、そのフォーマットを解説をします。 16 | 17 | 18 | 19 | ※注意 20 | このフォーマットは、作者が個人的に調べたものです。 21 | 間違っても、P88SR.EXE (PC8801mk-2SR emulator) の作者に質問のメールなど 22 | を送ったりしないで下さい。 23 | 24 | 25 | 26 | ディスクイメージは、ヘッダ部とトラック部分からなります。 27 | 28 | +---------------------+ 29 | | ヘッダ部 | サイズ 0x2b0 バイト 30 | +---------------------+ 31 | |トラック部 (0 Track) | サイズ 不定 32 | +---------------------+ 33 | |トラック部 (1 Track) | サイズ 不定 34 | +---------------------+ 35 | | ・ | ・ 36 | | ・ | ・ 37 | | ・ | ・ 38 | +---------------------+ トラック部の数は不定 39 | 40 | 41 | ○ヘッダ部分の詳細 42 | 43 | offset サイズ 44 | 0x00 17 ディスクの名前(ASCII + '\0') 45 | 0x11 9 リザーブ ( 0x00 ) 46 | 0x1a 1 ライトプロテクト 0x00 なし、0x10 あり 47 | 0x1b 1 ディスクの種類 0x00 2D、 0x10 2DD、 0x20 2HD 48 | 0x1c 4 ディスクのサイズ 49 | 0x20 4*164 トラック部のオフセットテーブル 0 Track 〜 163 Track 50 | 51 | ヘッダ部のサイズは、0x2b0 バイトです。 52 | C 言語の構造体で書くと、 53 | struct{ 54 | char name[17]; 55 | char reserve[9]; 56 | char write_protect; 57 | char disk_type; 58 | long disk_size; 59 | long track_table[164]; 60 | }; 61 | こんな感じですね。 62 | 63 | ディスクのサイズとは、ヘッダ部とすべてのトラック部の合計の 64 | サイズです。 65 | 66 | トラック部のオフセットテーブルとは、各トラックのトラック部の先頭 67 | 位置が、ヘッダの先頭から数えて、何バイト目にあるかという情報です。 68 | ヘッダ部は 0x2b0 バイトあるので、0 Track のオフセット値は、0x2b0 に 69 | なります。 70 | なお、2D の場合、84〜163 Track は存在しないので、オフセット値には 71 | 0 を入れておきます。 72 | 73 | 注意: ディスクのサイズ、トラック部のオフセットテーブルは、4バイト 74 | ですが、リトルエンディアンで格納します。 75 | 76 | ○トラック部の詳細 77 | 78 | トラック部は、セクタ部を必要数連結したものです。 79 | 80 | ○セクタ部の詳細 81 | 82 | offset サイズ 83 | 0x00 1 ID の C 84 | 0x01 1 ID の H 85 | 0x02 1 ID の R 86 | 0x03 1 ID の N 87 | 0x04 2 このトラック内に存在するセクタの数 88 | 0x06 1 記録密度 0x00 倍密度、 0x40 単密度 89 | 0x07 1 DELETED MARK 0x00 ノーマル、 0x10 DELETED 90 | 0x08 1 ステータス 91 | 0x09 5 リザーブ 92 | 0x0e 2 このセクタ部のデータサイズ 93 | 0x10 不定 データ (サイズは、0x0e に格納しているバイト数) 94 | 95 | セクタ部のサイズは、不定です。 96 | C 言語の構造体で書くと、 97 | struct{ 98 | char c; 99 | char h; 100 | char r; 101 | char n; 102 | short number_of_sector; 103 | char deleted_mark; 104 | char status; 105 | char reserve[5] 106 | short size_of_data; 107 | char data[ ? ]; 108 | }; 109 | こんな感じですね。 110 | 111 | ステータスは、PC-98x1 のBIOS が返してくるステータスで、 112 | 0x00 正常 113 | 0x10 正常(DELETED DATA) 114 | 0xa0 ID CRC エラー 115 | 0xb0 データ CRC エラー 116 | 0xe0 アドレスマークなし 117 | 0xf0 データマークなし 118 | となります。 119 | 120 | 注意: セクタの数、データサイズは、2バイトですが、 121 | リトルエンディアンで格納します。 122 | 123 | 124 | 125 | ●ディスクイメージの連結について 126 | 127 | このディスクイメージは、複数連結して使用することも可能です。 128 | この場合、一つのファイルに複数のディスクイメージが存在することになります。 129 | -------------------------------------------------------------------------------- /document/GET-IMAGE.TXT: -------------------------------------------------------------------------------- 1 | 2 | ROM イメージ、DISKイメージの吸いだし方法 3 | 4 | ------------------------------------------------------------------------------- 5 | 6 | 現在のところ、QUASI88 の配布物には、ROMデータや、ディスクデータの吸いだし 7 | のツールが入っていません。つまり、QUASI88 を動かしたいひとは、なんとかして 8 | 自力でイメージを入手しなくてはなりません。 9 | 10 | ここでは、イメージを自力で入手する方法について述べます。 11 | 12 | 13 | ※注意 14 | ここで説明する方法は、作者が個人的に調べたものです。 15 | 間違っても、各ソフトの作者に質問のメールなどを送ったりしないで下さい。 16 | 17 | ここで、紹介するソフトは、各々のソフトの作者が著作権を有しています。 18 | 19 | また、各々のソフトはすべて無保証です。これらのソフトを使用したことに 20 | より発生した問題に関して、各ソフトの作者および、筆者は一切責を負い 21 | ません。 22 | 23 | 24 | 25 | ●「PC8801mk-2SR emulator」附属のツールを使用する方法 26 | 27 | この方法は、 28 | A ) 5 インチ 2D のディスクの読める NEC PC-98x1 を持っている。 29 | B ) 5 インチ のディスクの読める NEC PC-98x1 を持っていて、かつ、 30 | mシリーズのPC-8801 を持っている。 31 | のいずれかに該当する場合、可能です。 32 | 33 | 以下のウェブサイトから、「PC8801mk-2SR emulator」をダウンロードし、 34 | 附属のドキュメントのとおりにイメージを吸いだしてください。 35 | 36 | http://www1.plala.or.jp/aoto/pc88emu.htm 37 | 38 | 39 | 40 | ●「M88」附属のツールを使用する方法 41 | 42 | この方法は、 43 | A ) 5 インチ 2D のディスクの読める PC-AT互換機を持っている。 44 | B ) Windows機 と 88 が近くにある 45 | のいずれかに該当する場合、可能です。 46 | 47 | 以下のウェブサイトから、「M88 ツール」をダウンロードし、 48 | 附属のドキュメントのとおりにイメージを吸いだしてください。 49 | 50 | http://retropc.net/cisc/m88/ 51 | 52 | 53 | 54 | ●お役立ちリンク 55 | 56 | 以下は、AKATTA さんのウェブサイト、『88 Break』 です。 57 | 58 | http://www.cug.net/~akatta/ 59 | 60 | このページではイメージ吸い出しツールの他、各種88エミュレータ用のツールが 61 | 紹介されています。他にも、88エミュレータ関連のコンテンツが充実しています。 62 | -------------------------------------------------------------------------------- /intl/.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | crowdin-cli.jar 3 | *.h 4 | *.json 5 | -------------------------------------------------------------------------------- /intl/activate.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import os 4 | import glob 5 | import random as r 6 | 7 | # -------------------- MAIN -------------------- # 8 | 9 | if __name__ == '__main__': 10 | DIR_PATH = os.path.dirname(os.path.realpath(__file__)) 11 | if os.path.basename(DIR_PATH) != "intl": 12 | raise RuntimeError("Script is not in intl folder!") 13 | 14 | BASE_PATH = os.path.dirname(DIR_PATH) 15 | WORKFLOW_PATH = os.path.join(BASE_PATH, ".github", "workflows") 16 | PREP_WF = os.path.join(WORKFLOW_PATH, "crowdin_prep.yml") 17 | TRANSLATE_WF = os.path.join(WORKFLOW_PATH, "crowdin_translate.yml") 18 | CORE_NAME = os.path.basename(BASE_PATH) 19 | CORE_OP_FILE = os.path.join(BASE_PATH, "**", "libretro_core_options.h") 20 | 21 | core_options_hits = glob.glob(CORE_OP_FILE, recursive=True) 22 | 23 | if len(core_options_hits) == 0: 24 | raise RuntimeError("libretro_core_options.h not found!") 25 | elif len(core_options_hits) > 1: 26 | print("More than one libretro_core_options.h file found:\n\n") 27 | for i, file in enumerate(core_options_hits): 28 | print(f"{i} {file}\n") 29 | 30 | while True: 31 | user_choice = input("Please choose one ('q' will exit): ") 32 | if user_choice == 'q': 33 | exit(0) 34 | elif user_choice.isdigit(): 35 | core_op_file = core_options_hits[int(user_choice)] 36 | break 37 | else: 38 | print("Please make a valid choice!\n\n") 39 | else: 40 | core_op_file = core_options_hits[0] 41 | 42 | core_intl_file = os.path.join(os.path.dirname(core_op_file.replace(BASE_PATH, ''))[1:], 43 | 'libretro_core_options_intl.h') 44 | core_op_file = os.path.join(os.path.dirname(core_op_file.replace(BASE_PATH, ''))[1:], 45 | 'libretro_core_options.h') 46 | minutes = r.randrange(0, 59, 5) 47 | hour = r.randrange(0, 23) 48 | 49 | with open(PREP_WF, 'r') as wf_file: 50 | prep_txt = wf_file.read() 51 | 52 | prep_txt = prep_txt.replace("", CORE_NAME) 53 | prep_txt = prep_txt.replace("/libretro_core_options.h", 54 | core_op_file) 55 | with open(PREP_WF, 'w') as wf_file: 56 | wf_file.write(prep_txt) 57 | 58 | 59 | with open(TRANSLATE_WF, 'r') as wf_file: 60 | translate_txt = wf_file.read() 61 | 62 | translate_txt = translate_txt.replace('<0-59>', f"{minutes}") 63 | translate_txt = translate_txt.replace('<0-23>', f"{hour}") 64 | translate_txt = translate_txt.replace('# Fridays at , UTC', 65 | f"# Fridays at {hour%12}:{minutes if minutes > 9 else '0' + str(minutes)} {'AM' if hour < 12 else 'PM'}, UTC") 66 | translate_txt = translate_txt.replace("", CORE_NAME) 67 | translate_txt = translate_txt.replace('/libretro_core_options_intl.h', 68 | core_intl_file) 69 | with open(TRANSLATE_WF, 'w') as wf_file: 70 | wf_file.write(translate_txt) 71 | -------------------------------------------------------------------------------- /intl/crowdin.yaml: -------------------------------------------------------------------------------- 1 | "project_id": "380544" 2 | "api_token": "_secret_" 3 | "base_url": "https://api.crowdin.com" 4 | "preserve_hierarchy": true 5 | 6 | "files": 7 | [ 8 | { 9 | "source": "/_core_name_/_us.json", 10 | "dest": "/_core_name_/_core_name_.json", 11 | "translation": "/_core_name_/_%two_letters_code%.json", 12 | }, 13 | ] 14 | -------------------------------------------------------------------------------- /intl/crowdin_prep.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import core_option_translation as t 4 | 5 | if __name__ == '__main__': 6 | try: 7 | if t.os.path.isfile(t.sys.argv[1]) or t.sys.argv[1].endswith('.h'): 8 | _temp = t.os.path.dirname(t.sys.argv[1]) 9 | else: 10 | _temp = t.sys.argv[1] 11 | while _temp.endswith('/') or _temp.endswith('\\'): 12 | _temp = _temp[:-1] 13 | TARGET_DIR_PATH = _temp 14 | except IndexError: 15 | TARGET_DIR_PATH = t.os.path.dirname(t.os.path.dirname(t.os.path.realpath(__file__))) 16 | print("No path provided, assuming parent directory:\n" + TARGET_DIR_PATH) 17 | 18 | CORE_NAME = t.clean_file_name(t.sys.argv[2]) 19 | DIR_PATH = t.os.path.dirname(t.os.path.realpath(__file__)) 20 | H_FILE_PATH = t.os.path.join(TARGET_DIR_PATH, 'libretro_core_options.h') 21 | 22 | print('Getting texts from libretro_core_options.h') 23 | with open(H_FILE_PATH, 'r+', encoding='utf-8') as _h_file: 24 | _main_text = _h_file.read() 25 | _hash_n_str = t.get_texts(_main_text) 26 | _files = t.create_msg_hash(DIR_PATH, CORE_NAME, _hash_n_str) 27 | 28 | _source_jsons = t.h2json(_files) 29 | 30 | print('\nAll done!') 31 | -------------------------------------------------------------------------------- /intl/crowdin_translate.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import core_option_translation as t 4 | 5 | if __name__ == '__main__': 6 | try: 7 | if t.os.path.isfile(t.sys.argv[1]) or t.sys.argv[1].endswith('.h'): 8 | _temp = t.os.path.dirname(t.sys.argv[1]) 9 | else: 10 | _temp = t.sys.argv[1] 11 | while _temp.endswith('/') or _temp.endswith('\\'): 12 | _temp = _temp[:-1] 13 | TARGET_DIR_PATH = _temp 14 | except IndexError: 15 | TARGET_DIR_PATH = t.os.path.dirname(t.os.path.dirname(t.os.path.realpath(__file__))) 16 | print("No path provided, assuming parent directory:\n" + TARGET_DIR_PATH) 17 | 18 | CORE_NAME = t.clean_file_name(t.sys.argv[2]) 19 | DIR_PATH = t.os.path.dirname(t.os.path.realpath(__file__)) 20 | LOCALISATIONS_PATH = t.os.path.join(DIR_PATH, CORE_NAME) 21 | US_FILE_PATH = t.os.path.join(LOCALISATIONS_PATH, '_us.h') 22 | H_FILE_PATH = t.os.path.join(TARGET_DIR_PATH, 'libretro_core_options.h') 23 | INTL_FILE_PATH = t.os.path.join(TARGET_DIR_PATH, 'libretro_core_options_intl.h') 24 | 25 | print('Getting texts from libretro_core_options.h') 26 | with open(H_FILE_PATH, 'r+', encoding='utf-8') as _h_file: 27 | _main_text = _h_file.read() 28 | _hash_n_str = t.get_texts(_main_text) 29 | _files = t.create_msg_hash(DIR_PATH, CORE_NAME, _hash_n_str) 30 | _source_jsons = t.h2json(_files) 31 | 32 | print('Converting translations *.json to *.h:') 33 | localisation_files = t.os.scandir(LOCALISATIONS_PATH) 34 | t.json2h(LOCALISATIONS_PATH, localisation_files) 35 | 36 | print('Constructing libretro_core_options_intl.h') 37 | t.create_intl_file(INTL_FILE_PATH, LOCALISATIONS_PATH, _main_text, _files["_us"]) 38 | 39 | print('\nAll done!') 40 | -------------------------------------------------------------------------------- /intl/download_workflow.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import sys 4 | import subprocess 5 | 6 | try: 7 | api_key = sys.argv[1] 8 | core_name = sys.argv[2] 9 | dir_path = sys.argv[3] 10 | except IndexError as e: 11 | print('Please provide path to libretro_core_options.h, Crowdin API Token and core name!') 12 | raise e 13 | 14 | subprocess.run(['python3', 'intl/crowdin_prep.py', dir_path, core_name]) 15 | subprocess.run(['python3', 'intl/crowdin_translation_download.py', api_key, core_name]) 16 | subprocess.run(['python3', 'intl/crowdin_translate.py', dir_path, core_name]) 17 | -------------------------------------------------------------------------------- /intl/remove_initial_cycle.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | with open('intl/upload_workflow.py', 'r') as workflow: 4 | workflow_config = workflow.read() 5 | 6 | workflow_config = workflow_config.replace( 7 | "subprocess.run(['python3', 'intl/core_option_translation.py', dir_path, core_name])", 8 | "subprocess.run(['python3', 'intl/crowdin_prep.py', dir_path, core_name])" 9 | ) 10 | workflow_config = workflow_config.replace( 11 | "subprocess.run(['python3', 'intl/initial_sync.py', api_key, core_name])", 12 | "subprocess.run(['python3', 'intl/crowdin_source_upload.py', api_key, core_name])" 13 | ) 14 | with open('intl/upload_workflow.py', 'w') as workflow: 15 | workflow.write(workflow_config) 16 | 17 | 18 | with open('intl/download_workflow.py', 'r') as workflow: 19 | workflow_config = workflow.read() 20 | 21 | workflow_config = workflow_config.replace( 22 | "subprocess.run(['python3', 'intl/core_option_translation.py', dir_path, core_name])", 23 | "subprocess.run(['python3', 'intl/crowdin_prep.py', dir_path, core_name])" 24 | ) 25 | workflow_config = workflow_config.replace( 26 | "subprocess.run(['python3', 'intl/initial_sync.py', api_key, core_name])", 27 | "subprocess.run(['python3', 'intl/crowdin_translation_download.py', api_key, core_name])" 28 | ) 29 | with open('intl/download_workflow.py', 'w') as workflow: 30 | workflow.write(workflow_config) 31 | -------------------------------------------------------------------------------- /intl/upload_workflow.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import sys 4 | import subprocess 5 | 6 | try: 7 | api_key = sys.argv[1] 8 | core_name = sys.argv[2] 9 | dir_path = sys.argv[3] 10 | except IndexError as e: 11 | print('Please provide path to libretro_core_options.h, Crowdin API Token and core name!') 12 | raise e 13 | 14 | subprocess.run(['python3', 'intl/crowdin_prep.py', dir_path, core_name]) 15 | subprocess.run(['python3', 'intl/crowdin_source_upload.py', api_key, core_name]) 16 | -------------------------------------------------------------------------------- /link.T: -------------------------------------------------------------------------------- 1 | { 2 | global: retro_*; 3 | local: *; 4 | }; 5 | 6 | -------------------------------------------------------------------------------- /mpw/CAUTION.sit.hqx: -------------------------------------------------------------------------------- 1 | (This file must be converted with BinHex 4.0) :$*+0L012NB+V,R0TG!"6593e8dP8)3#3"!8l!*!%j096G(9QCNPd)#KM+6%j16F Y-6Nj1#""E'&NC'PZ)&0jFh4PEA-X)%PZBbiX)'KdG(!k,bphN!-ZB@aKC'4TER0 jFbjMEfd[8h4eCQC*G#m0#KS!"4!!!!8l!*!$FJ!"!*!$FRKZ$D@P8Q9cCA*fC@5 PT3#PN!3"!!""!"$*lNE`c5BNM3#3$4%RD!!!!m8!!!+*IYJ!!!d!`kh$Tm1JiS# G`kM$Um1(`V3!!H%R9%9B9(4dH(3"!!!d!83!N!U!!*!*"5!!!!(0QQF!!!d!)d3 1)R+p4P5%5ZE4dc3I28-Z1T%q3"984%Z!k-KTpkT!mjTSHeI)#C%F56FMlG&TJ-6 ([2$6[f0e[KFhII%Y'e'`NNN6McrZq%@R,9UiB1DTdfY+(-F"$TJdXE4NHXh-8aF Z1!h8iDIDb0"j0T-pirB2VCibGAA$69qI2lrZp1E)4I-E9ejjlBb&05fA0aU1Xkp EfM4Yf[$fhrlQ`SZQX8$$eUZAR(EZPUrrjG$3DDGYM`6AejqfC'&0Tai-V'pH%"a r(()rMG6a'C%b$S2M-F6SZ1EPj8564cKU'NpHFS#M'q&S`0"5%F5"*Me['NFHFKc P'2j1afKc!(&`I'cYGNiSR3$Rb2%GiF6rA@E$,3lkFEaVE*efdX+rdeldGpU,rdl RLEr6qG(IkE6mR8lVHeN`*pJklCcHIkH6p*j(jSch2$,"[p1jpqpd[[Th1Yrp1jh [[DF$qkp,KhAqR8lI[p-*ILpE0[PhfQ9rThh6hqRFmAFkUrj1CmIIkIc`lh31rjh 1NIGd10pl1YcIl56Zh,r6NAD05iMEB@ZhFali1je[rTh1-hrRFGIIc6G8alA$rFd hAke8JCM%$@!eKa4J@KV1j5cphcahk(d!N!-*SQ!Pb!!J4mQ!(RND1ACN3XQ-V@b 0--*@4PEfK,DbNl!MP*2MC#AV))qGRT5XPmF))mr)-3!J!-))2C2KXmYN+cP+f"& fC#@8V1cd#1d))ibX54MjP4&fN[ACVH6`%8DHND1%%8UBK"eKj+R(*%FMH%BBQE% M$ic[l-NDBB3G18SB34r$%c`"1#!I`$4ad@bhMSfaBIZiEENk`Ma5N!"CCKbKN!$ 2bFiiR1bFR8&&'4qK,XN,lj3N#LD6L6'q)Xk,'b)P[-,'Tk"&lk1)0mLM'6ZEHS` 5[U$'c3BGe-618J[jp&[j%USSi!0+1S6qmE"&m[XG!4Hcq3*Z(S%UhlbcM5Sh#kZ )L%Na,e*3ipIdrHMQmRqdAq)RHZ162TGEBZ0"Am3G2"J2#Jm"H%98@)5%I"[!3+I j2`SCh5bM`8iH2GBjeL'iZ#*Zm5N"qRY46la(+lQ&IE3'"RqY9'2VLBH+0I0FMi# EmB"5b++4$Lfm*!9eLS65S"Z[8&CH+pq49b3kfC2RZEN2",'B$L8,b-Xcb+'*[Dk hcJ+H3Ze-mV$b0Id0fZdeJSd-'bf0@NID!VYe3qd`88M6Q9PaJCUi$-f!5Gl$CiU hJKhkVq-&RL&lQ)K4H3@IIUHae8ZM5B+cf-8UU5j589RG8bq9[fm'kiR5fXp(84G lq#l8$C,4J16dZkkkVc288MmcMEDA[M`M%k-pEZi$eP*2X#(Qa#N4%rq6)jVSAMi b'h4l3M4"QkXdFC`bL8&E2%hR&@)`U)B'l23JVP'GC6P%MpaZ+Jq9$9&ZkBhi#M4 jAlRE&[0)*cKSLqIk5P4PQeDbm@PNdcp)b@ClMDbj*'IBl`l-XCi[,6kKe!DZ'Fq CrJ%!N!0H#!!!: -------------------------------------------------------------------------------- /mpw/KEYCONF.prefs.sit.hqx: -------------------------------------------------------------------------------- 1 | (This file must be converted with BinHex 4.0) :%8Y&@8026NBZF(*PCR-ZFfPd!&0*9$96593K!*!%#9m!N!3Z'P0dG@CQ5A3J+'- T-6Nj0bda16Ni)%&XB@4ND@iJ8hPcG'9YFb`J5@jM,L`JD(4dF$S[,hH3!bjKE'& NC'PZFhPc,Q0[E5p6G(9QCNPd,`d+'J!&%!!!#9m!N!0b!!%!N!0b%i`0TD95CA0 PFRCPC+@P!+@3"!%!!$d!%-*R(6l0FFBm!*!0$5J@!!!N6`!!"m&K$`!!$3",49P $6dj',R"bC@Cc!!&dUP4&@&4dG(Kd!3!!!3#X!*!+J!#3#3'F!*!$[CH+!!!0!"% !#"bma#')LS06ieVcG#j`X!HZAEG@,BpMDHUDe*9N#BiKVQ25TUdl*lIa43AYRqN "$i55HSDN(#+G(X[KlINk#iqqSCRmJG50Q`08#$UYEjhMPM5CQQpfmbE"LmaUAYH eSm4cSMif4f*250i9FSEJ4,LQTFDNpq6,VJYGhM&d3Jl$[C!!TfAGGja[RZhac[C Fp8'1DjX2FPalIT!!BedDIh,"!iYXk#K8AefI(*VZD#+-8NTRm5FA'@)"!*!$$D+ !%Q6J'D&N`$BjES6+SXH24Si46MDHHY+8VIBbr(8X*C5I%TUCfC[(AIXb#5Hr!X6 *F4eblB`F*mmk`JJRcdj1'''%%dDi4rL4BdFBiB4CDjc3b*L6ibFj5Sk4BbHA6&K Na-PcmX$iml+MjhNHjIJ!Q2cdCGG4-Z9N`-QF%Vi55LK3@!d!)YAE0JRi999,#D8 jQNie[YTlSZ03VJS%q)Hq4(0QRrPr-fS1SrYj1AUX,CIVDTH5EHe5fMJh)qh*bND m[Pk#-fUqCH,"f39kEJEGc$Fm)b'(dGc5c9NThlrYD-HT!ceY*`j+0IN"p*35M*d mZi#q3VI'RiaqK'C(lU#&[$cj(AS`HK(pK*l!Am!GIcLXfRHQTkkM5rBPB,AB+BC V!Kc(Klp'[i"6ck`DZc1DSrqr0hN0hB$r0TR$CLZD0A8cPfm"@qkLbf1Gk0,J0`M !ECT0!l)*YJ`9cQUS-$%rGEZUQVU89b+M1A4IfPjAGrl'f#GR#T2ck*jYa&9dQjM JhUU@d"AdH$3h039qceLZJR0jFp,XK+-28!%1NJKj4iFkc&jcd-cR@mcpD'lidF3 2D-%k(4RjpNaKr#'NC*pj#X6ld"9c[pR[**i5'$%9XbT'e+S(p(6`8h36hF[,qAl 3*PT"*fX+T0aZ$h-[q(%D-MCplZV%$E#bk-HC!S4V$MbI3ir3jfKfr'0dbBSGq,e 1C2'-A85cHCR5d1)#Jk"dS2rUkkhVcZQYa,2rfDC"lE#F8"ERjcQ`T+0`hNf!Z!9 *NKCc!6lB#*(94)#Ucqc%KbQ2E9)"6D2(8N3LRYe&mfi`pN991Cl-$fcGBYXUJCr hiH!#l6q[rTjBSH9jqk)85EKrQ9Dj&D9jJ,I`J%lD3[i$aA(qHf$pE*%ec%kN*+, CLAJAXI&6emH'l9M5PXGq-Dp#e!BjQYL66@HmT0BX3RC!mLc31HN96'a9jP)N281 l5-LbU83Ur9B+iMX,dIJjIk5i+@`Hk%c90!&#"jM$8$ilkL3d2I3K@TLFJX3qK[$ GK@)$mm$-'DqaE)6LmDHPrB9Q+3IFjpE[h&(h*XZBNl+%eKT0*j1!l1EJEEYV&,2 4P&2ph@T2qe&SP`[Ub+pJ-F4[p%HV9D8X5D8AQeUVBDc'""mF"qeXZURp*l2p`MJ QT)E@!XcQ!P[-fb,"(Vl3#ll[MKYf6jbf%MVb'lS'dFa!+JD#56c8-AB&cBc'`2B #MS#j'`+qhr`!PQCcDFTY+Z#K&kqUUKC)eMY99CATXY`DhUmD%c5b"XF%A&JQf#i )Q,"-m*SJB-)b3DdJB-)b3CdJB-)b`HZ#J!R,"'m)!LBX%p3,!LBX%q`3"%aB*SM 8P!QB8"!%hH-3V*F5*3Lkab&B,b9#S1Ra9'DC)*V@Q[mQ-+*k@PA6dB42N!#3!&2 bKJGbeLL@1b%`-QPYR3!MV1ccp63l*[#mB)*+ZcX%[-3a3DAG(3*HiTLJdZi1!5p a6#"U[bQG*0%M",c%m594qdf+5N*+#(L*idZLpQ%-%bNKi#@1,iRD"`)L*35ma2% P8IY!3+5%J(Fi[X5%P##C960a6@h'"-Pi+QXXAf*#5Q"N'c`2SV+ZK18F##P",,i h(P-F!ZXab9"PSmQre+bN0KV&*Y$NU&I3Q##H-PTML[U#!!iTqV*E)0c``#fT%J% AKJ5D[%[*&VF%*V#f5`aHaLS%U@bb1(,J@@l0[4)"K&1"9c(9-jfQeKEq48$Lr5c h,`LFNJS)I'&!J"%bXPe4,%TF'*V`,P0L!Li-#8i+!Li-#6S%!4H'"#F%!4H'"(f #J!Y$JP1#J!Y$JRpI,TF)ZJ3"%e)#XNB*3BmJB%*+30BS)HJ9"%a)#H4Bc#13!%X lLelL`M"*UY+BDG"K,ER,$"-3ND9I*B"0Pp@,5i5-&&[iFQV"(P-@2abJ"+Y$c50 38RBU')%lmpF)V+P9@P6Ze#TYX*!!)+%&,`Aq3d'&)(JTm"m++J6"5i(r8&!K#)D q2r0A#*cpVaQPdHRXIfeY1K-6fTJ5%h"K5*!!%`4F'")F&!4F'")F%J4F'"*d#J) Z$!N1#`)Z$!Q1#!)QT%9"RLm*`9&"`)58J$aI%S*MJS!*+3&j[L3%KT+-4p0UfZY hI)N*rGF03P#klPlL`M"*HRaA8fPV,8dY@rqF)+%&6kVq[&hc)+%&6kVq[+d3"%q UrVbY%,4UD[%TdCqh+`4NY4T0mG)Z*A'fG-p()c(KIDE%"&`B%V`R#,J`*'JA"&` B%J`)!Li-#3i)!Li-#Bi,!Li-#ES&!425SL#[Q,5Fi61lj8Y-@2`dcphrLKj2&lX (Af*#5N#NcX3S2PLlPjK`mAe%Geh-TQ++EN66Z[X@JLpaBCJNrAN[@UMV@H42(F5 $YAF8Vpl,h`Hj`l"#82iqb"f'&B,Jka9r'&B)i&%TSba'aNrY#J%C+G'-ATSLT*3 #AGN%99Ep3BJ*GZQb9ZSDRd"+prCep4`R)%NPmhXr'Xe'De**CIm%LICdGlFG2`J I1Hk-e'aRhlZ5C#QCM"*IY@5`Gq)F+F[LYaQH)8`BC--fSPBBdD5Ni"ZZ952Jird #DFc0!C+"56B2#+Zq'8"[X%GE62$(Dfk4J(pFJJP@[cVa#2KV"LR3P@H1)N&#+hq Uk-kr&B+0,l0IHK!-3(rqV4$m"iZS!!!: -------------------------------------------------------------------------------- /mpw/QUASI88-68k.make.sit.hqx: -------------------------------------------------------------------------------- 1 | (This file must be converted with BinHex 4.0) :&&&9390*1$JY0MKV,QeKDf8ZFfPd!&0*9$96593K!*!%#EB!N!5,Ie0dG@CQ5A3 J+'-T-6Nj0bda16Ni)%&XB@4ND@iJ8hPcG'9YFb`J5@jM,L`JD(4dF$S[,hH3!bj KE'&NC'PZFhPc,Q0[E5p6G(9QCNPd,`d+'J!&%!!!#EB!N!0b!!%!N!0bQA!0TD9 5CA0PFRCPC+@P!+@3"!%!!%!!%-N+YZl-d&(@!*!0%%fe!!!MI3!!"mP&S`!!$3" 498&656Ji,6BiDbjYB@YP!!'U5&4&@&408&-J!3!""!#3$)!!N!3"5EJ!!!'Z!!! "#FPM!!!0!"%!#"cXG3KL9Hk'95&2a3l4I(G2V0`K@[MHLB1JEe%FUK#imr*DK3p X@DpJPfi*`IB0'pDShh#J,i--T!-p6Ub@e$2N$`5alM+UN9K(MVmK68Mlmkl0Fml c!19(11)(!ce`-)fQTmr,X9p&6%"(mh9mpDSj@)aEmqK3%8P0NcJK'NfRMViYQL@ TU)lEXa3IMQr8X&k04Sh-X0NPlS8#'p`,8,0&6*QYYkq6cbP#5lm%6B1KVZ@K)(S fk"K@JpI2'8RKd!3U3"22b4q1)%!Xe)C5RSkH+fIacpl5jDjj%358FUK[ISjGaES h2[21T`[heV0!F`$REN*1J"JcaA3a(Mr9D)daNQ%,!!!06LPj2%%'!&RMj#JC-(a Xl3QR"-pA6KKjbYHH%mV92Zh)Fm)**i`!V*jVKkHR!iBI&+HYI18%DB`JJK%8F!P b!EkcmrUH8i"ERfR@G@4lK$p"#5Gl*EF#!!Nmm-+[!`!1l$jUi[rNpqTLYh0S'2U 1F90hi!h5#1!F"TFS5K!F3,@Y!-%)@94mIK8(S3A[RS&MEi#F,JV!T[%-E$8f'k" K0,HrE$B-F0V@0+fpqh,ri2"S2kdD[*J@rUlYZCEh6@chVAF*BXLS)`$@34Y$3,F 2h4X3H3!120X#!HS5AJKZVj!!#dJC2GaEB)I!m5blCb0,dcU"Z@F(V("59l-C"QC 61qPHMi9HplUT(ETQ2lC3Q1[!Hfd0r`$3E9!E*J@0DP,91YVYG!jE6D8qD1r1TD& V@F&J*Ai6`p!fM"@%p2Bc)24LejTKHXiPFTXe2$Ph$Kl2Pha!p2$1!9k[TfQY%cq b2CF2bC!!cFd)$&2b#1Ki$P%Ip'#!Rm`GSl(9!,VR4b$d%E+!MYcB!EBE!IdD#fr "eV2Y,i&ZJB[1rZ[1bFAa(RXmD(qlIkbe6[Yab#[rVi5U0@epI4ed[$J`%9fH)F! #ZPQ5eqQLb)DTLbI@V*[jT'9+-iK-bi&+M*aBkRU@iZ&eEATZ6fTY"eiLTA5M3!T [d&hAJi%Pa3jb[1"Z*R9M263$K0b&AJNpeiime3`IaU(URfmDKJ0Y95X4Kh&AD@e 2kYiBdBeqfEF9PDL9-0R,8KYi$VbfT63C&(ecTq[l5m$feK2!H0+(,[6$+bpkB#M T)jGBL+jD%@%%ScK8dKJ[B9GKhaS0hF+@lR+ZPMTQZ@"XcFDD%G!!ZDUCM(!C32r UNE$B0`a`#fe9)c9ra*pL+c)EYm,PE@deYUNAUjZqr`GZTf(mLqXLp,mZ%!lf#FT D9#`(1NKI,N2Z3+h!(L#em$NP3'%83&1YAH&RABZBQFFZCElh-b6#'BFc@epM$df Qp00mF"SHdRpSm-liDP-Y[3QVeipH"mSF5YE!krm&FrlNK0$aX4Rq%hB,"lH"(5P E0k(G1GM1BdZK,$'0+jDEMa%Lfb%Eji(Kq5jm"2JKpLCBRfB#1%*#CL3b!DbJVb` i+6+"*(&LQ8$G%f@QfM`9N!"bQJY)*8d'T$,,"U3k63H8PZB$8TSR"&,1-S+CQ+F %#m*FbT)#U8kc!UA0dS+&R1B&5NfXT96bc'#KRdZC9C*UPKa)FCNG,"&THV"%*2R "NT!!*`%2P,RiLFeb"+91N`3PCPQ#92-dBDkI+G-N3@hJ*%03QcC*$p6HqVKjNX4 !EA8@&dKeN4!SJJJ&*#(*!4E5a+c11LVF[N3`Nkrf@qEYCfZ$@IU2Df1a0&)$[jL DKlEQ&PhYKY56Uh&06IK#6&fh8Q1EVCV*I29XGc!M,H@jFji9[9`0h$&,2A2,bM! P6KPV8kpmC(F$'0M-+12RMdBjBihD-,V#Vh@FjCGPYR*'*l,)kb1$AJj)L+M92)Y Gd[-jiG#0pYh"XSCccq[Meh$*`&@JS!G08QBk((ZS"q0q"-lL,%NJ)`[!V`$863# 'iMTQT+d0@rMH`8)qQ66mRm*('+4lB"MKkje+KbXCXSZ0%5Q0$'CDR1rIPdI'4CD )FE-LD8d*15q9GTI@*AV,Mhp`&h!Eb0E)eJ'Z@f`(r&bejr$)aPG!C,4)+mLedSL q9P9359N*P@4h)V3#TdHZ2HK6"$Cf6dq20T*A%fbm-XaqqTUIP0"RiNX4[MqLbcI PHBi2F4UNqp!#M866$3!q2X%Gkj%N+Dfl"Plm!Tl6@jS22lM(mF@2(jjM'1hUZGI j[ThfY(lm(EjI`HdKT1hk&L!Y#D'&0V5eI4HI0NhRL!N#(*l9bCr*l1bE9akST9F ci(eY3RaIqlS'IJCRk#dGp'5kG1J6Tjh1maPk%pX"[U6C3d5&A$0EkrFK&pNcNi1 BR&4'AJ8XPh*HPS%9++VLP#`2+bK8a5P&0PD3!$)PTr'XV'#P1N(+NV-54'@F8mC S"5ZAFTl)e3SD%aDX+QDVJ&aG8@HiNL0bZ",&P*c'FlQ#PHS%U8MT5PJQVAKCE$I "8D@JX9bR*"%9Te54AX(LfSSiJj8F%CH8++EN0*%!&M!Qj+aT)&J35rQ8be2#Hfi URh,ck2!HQkLRe$)5[#IRK!Pp!5eC$bA+fN3-@H+B8Y"i,&R#8U&JLC5bK$%PTe@ TCF(MfT+S@!@&CjS&Ch`paAe@RR4+BUSAELV22b8ae3XAS6CpG@b9mr+S92)5ZA# ")MmYN!$909D1R)5UeHjiZ0(L4BacemFL")`AN8Hc5hT#UE"jJ2N*RC!!LT%FalV ,%NSD,d0%[rF&&$GJh2)8SI!FR&1+M5m#icNkTibAra-h343HJ+I-#bb$9"YQ0D$ b[+cF,RmAN!#aK"RJ)IB+cdKLTr+3!(X&Ck3+RSAJ[p-T5Z$6P2b*M#PL8%@#[L* RU-*cL)KpaFpC[)!bK&m9N!#cLUl2RF6iq%d`Lr"H8M-#jiT3rcFSNh0LR[6I!mF AFc3CK[eTG*J(aG%9rS!$#CK44$leJ+Y!!8PEDhDD@K,E9J-iQmiUU0-5Y+)SdS` [6Z,ST,H(kGSDqB"%!NLbf565&&qCS$,ld[8#A1b`PAeD))RaGIae#!Yr-#*VI#j $2d8!KprNQAq3!)!qXim%N!!Xr2m!lY8!!!: -------------------------------------------------------------------------------- /mpw/QUASI88-rsrc.rsrc.sit.hqx: -------------------------------------------------------------------------------- 1 | (This file must be converted with BinHex 4.0) :&9&9390*1$JYFR0bBbjbFh*M,R0TG!"6593e8dP8)3#3"!Df!*!%iLp6G(9QCNP d)#KM+6%j16FY-6Nj1#""E'&NC'PZ)&0jFh4PEA-X)%PZBbiX)'KdG(!k,bphN!- ZB@aKC'4TER0jFbjMEfd[8h4eCQC*G#m0#KS!"4!!!!Df!*!$FJ!"!*!$FTPV$D@ P8Q9cCA*fC@5PT3#PN!3"!!""!!$*#Vb-c8I8VJ#3$4%1[3#3$P&9390*1$JYFR0 bBbjbFh*M!!%NXA*cFQ058d9%!3!"$!"S!*!+J!#3"!%rmJ!!$!J!!!A41i-!!!d !#m"iHPl@fU#2-2+-h-SL"m!*(a!@iEG'eZ6dZT9&''%A2Dq"A$hQ+AeqK2AN1*j k!#Y6TZI&m!0QGZ6Ce#Bj)Sc-'1(N1H'%%dj'r!JR-dk1Na%Mab9Si'6!bB"&MT0 Rj$Jj6JBXFTc`Sd!!hc@)(f&**LabR"`RU1&Na!J(@!mB#hMJiiNd)YT`PDJErah (!IpjQfIQ4[4X+K@h(EXi))S1kL"4&r5aM,E1Y&jDr(1mY[IREk0IAe'`Yr[IECq 4m,E0T)T9FC[a`YLil$LC6HGI9!6rNC(Tk5NeDLYYaqmqr8)DcUYk6K%PSShHcl6 RUE24Lr'b0lVT*(f-@[`VaG(VrS`$p$QCp#$8XAqIj(h85hRkFE9hRYY1a6*Ca5a Ek%[imdl6&ET$paVcS[JGTAZV'h2FFBb$R*8YQkeBRYLc#p2mYlCfr+H)cPfhBKi -khA15a3l6a(G@iLRTqFSGS&kjac1aM2Tq$Y'a59kMV5i&'Q"PfhZ,,+#iA++VG+ 'V1PbZfS835p5Mekd16HCAMN'ISPkaVeUPDNQXB6FDMSp%8m0*K,0VF)jbh-`m$* &djlYi'6lq!V&VY!Qh5UlbiE0@GkV9DhLNTMCYmm`$EDpB0@-3j9A@lFCcl%*ER, EF#fEBPFahDM9UcLMc3plh#aLTBrNq@dkee6#lpq(FPD*Gm`Ra5UGmi16IUh,eI, 0"80$ZFPM!SG52P"p2EVPQ58fDKPf5A6eYcM,CN@,H$UGEfkppSh5AHK%F[KPZI" `3YBK+%1"C!#'I+#fMH3YYZb,8VaaZY"DDbd3F9r"-jPMeEKEUA&($0XJ1U!R*F@ SS%Cef9L4cH*PD,@pbEV@`cX5jEUF&(kM3C)0-MMX%h@4LqdpQKE4Lp-er8+F4&q Ue0P8a94d[9HmAA5T[8REARVbPPdcUX`49L1'6aV9FS1+YjXZYiFVNi&kh%@iRVb DXKhK5j)``f'(V*9JrM#mY6@rC8f4$#mEAP9+-)UKXpb-,m'ar-%T3RKUkDMY5hf jNG`Bil8&ALV"GF89bV@$5T,5a#L-R(!+9Rf'cS)ITQ[0A4kYG@IXbK(1"Yr8"U8 M5-r5hT!!eC!!V)CPY80@1f@9NY8Z+C,G8'#QiLcYDIT*0,eSQ%J+!j!$`DD(kIU 6TC221PMkVVahbj3V6V(I&hcDU,ZH$DP#)-TF#laS+EIG2'[8H6aE%fRR[5R,+(e !X4YrG1R'%BkZQm(bZJY(LiYC&,X9B$'%BVFERVjS,624k69mE5IGD1[kVm9&T!T 1'Tic(3k(8'mRhA`k@PlRlp(6G'[GKTV(%h*%VS-F88'1U#"(9*!!)bV)%4ANL!T b4!8j"M[GIV+61-4r1ld0afVZp#JN&0q`+iTGSiD081akN!"PRPlpM%M5`6Dr,AI T+il,Dq%#&c-+b')LXe(XA,$)I*,94!GH0b*F'qS0k-Hi($FpbJ@i4jbGT5fcA%% U32[B8B5V'EAl+c,c0i5LEGNdXQ"j,[1rHl6XDiC8Y[3R2FkHND%K*$X9'b2*C') iB)1$LH5`BYf-T4,"%(%[r$FraR3qr1UPM3J+Y%fl4j(F@(k1YY"SCQVr",irl-P NCkG3cq[C!f1BE+V2'0UadA`'RbZdmqTcKRBc0cS#q@KhkH6D'MEVlhcij9Nk)eK N&pK41LdBI3IQdLRCG`'XMXKFap`(B&8%f81ib!'`4D62"E![`%V)Mh0J[i*pL!b )6a+GDE$hNH,fJPd&HaHK$*E4H4pX&J%,qJP&`DD4Q9i!%r1QN!"jYS*G!jY%&0N )F`L"CHLXZ%Gi"H`YH$'qDR6&`(E$A2'TUQXH,!@h4)VYZJ%f"*Hl!rB$@!,br!6 h6S'pVZj+VdQe5Kh3K'5Ulp0@hj&!d#L,JF"P4'V18%maeQ5K%`,elep'p'-)dTC R&hR$""[@Z"i2@b&6TG0fj'd&kABd$a+rrd&"'+0#ke2k4'*JZQR8R8A,lC1Q&p$ (C[8r!*!$!88!!!: -------------------------------------------------------------------------------- /mpw/QUASI88.make.sit.hqx: -------------------------------------------------------------------------------- 1 | (This file must be converted with BinHex 4.0) :%&&9390*1$JZE@&VC5jcDA3!8dP8090*9#%!N!3*BJ#3"&bM8h4eCQC*G#!SBbN a16Nh,6%j16JJ3@aKC'4TEL"6HA0dC@ec,#"*EQ-Z,#"SG(4`1Lm[Gj!$,Q&XB@4 ND@jcHA-ZBfpY,e0dG@CQ5A3[$3SD!!83!!!*BJ#3!h)!!3#3!h,pFJfPT9*PFf9 bGQ9NTD8!TC!%!3!!2!!3b3UUXmda,N-!N!d-bf3!!#6i!!!(ZFed!!!0!&&9390 *1$JZE@&VC3!"l&Y849K869"6)!%!!9!#+3#3#S!!N!3"VEX!!!'Z!*!$b5IS!!! 0!"%!#"cXG3KLP6m3a*eEGF!j(C%p9r!f"(R4,0Ih)9qAEJR"pJdEqM,)30VH!ai )*I8-D6rfJ2Ied6FdNrpKRK21"+J`c@Rp3Cf$HBkCE6IF"Lfcfk,,1G2eTX)`DSi VYXbEpTke$,Uq2p1eFECVIH[1E@CZi1VMZ(li9S2AcaP*iG!%+N!6cmNICJJ3#r@ JSLICFr-XrXIa[YEc)JJSj9$Ir"blLR9[I1DG6aHqd&%S0!G`GJXj!@,-&02&H2a 8ScA'5$l@!J#3!`e1'ANm33B!SFI*-6*Jka(kGC5XI#A(#5H8dbp##AGP(UHb)`0 1"S`!V*jVKkHR!`E3dq-db8V3aJJL1%%"*qJ&lMSlVqp+J+[,bj)I18U1G33PR2# 9h!U!GF$j!V51%(VPMNJArV2IVqpfqJHG6Y[$jm4Lm&Y-6dLFiKR-Z9e+F%`F$Vi p6@MNi+XAk%e`3E`"S@Lcm`*YE@aZS)hYlVIEhDeYG05c,+Zhmm[qUi2AqeQek)H Ui%qp`(H#Ra*hj(a+m@YK(#1dMRSJ3B-4pXp4(#"m%EJ1SQ6!I"'k2#8qBQ8-i6k 4'b%[F0bK5ac,kP0lck@LD&CAYaY4Zf[eRG%HZ5!M3A23'E8F"R@Y`m(Ca"X-cVV @J@q2%SG%"BIqX*l"$k'@LpDZdhV(DjTkeG[Cl4Ud[rHk)52IFHM&#[k3!1$)lA5 H*)qPX[ji&%4"iMZ0CZLG%(r+&JdhGY-ZkUj"JejjVD1MAGPSVHM+3m&`D&R!l4k 'X4[iDEr"8"$p0dEAQAQ-@N%BSbJNa%%YiLFHF[dBYFif81X5EEeiq4eU1@,B[)I ,CmI[q[[[qiI[hZb*`eHpRrIIm)+24NNNL[i2K))YDhep(I@$K0U%6q-)!F$(9RT k-fEb,KY!1pYYZfLcR,4TE$XH0M$a%Xd0(H1$(F!1r+&QA3qI%%2k-GAJ1END"*J k'[D)&p#V"[@69Q463[`jEm$!Gq2!A%D)NmMFAfKh1Kjf6Dd-MT+"BGe!FamkmAR VC13D+k-0Q!jYcG,!`fHZ4Y0'D@eZ$m*`+ALjp5$S22#4Mm2S0)JA$S2HHpPZ-6! M)STaR%3'6@!QqdElXE-"UpdJ1CR4QZ-,'eXUBH*V!GZPB+Rac6dbqS6Lm(41cdF -Jbqafr4(YG"YN!1mj#YAf`l$[hAE'jerG30#QJP`ii'TEaD&fZ9KMl5@SqhcbSS 6TaQYRf@`b5p9E)&eU(Y"c&SJ,C4%-F@f'FjU(IBGY[,Fhhkq0Mp+BSKB['E)69C `e[eIqNlDS2RrXH'Vc[HECM41AF04r*kD&9+l,S,(&XeNhT-R`Pi)+r16l"*IA&) h0X[Ie(EP1@3%LiGCR(RDXCbS`K#l(TXi#dF3q[KH%%D``G5m$&BSZc-BJ'fk-Kc mYJq+,(k!V)[BXBSIJ1#R)TNTiiFd'K2a3rYh9@R'&J'%aRN%S8NH3QJbMb%dR38 4KZ94K%D,-%,M)SjSB"P)c!dc9)35QXjL#F2Q`F3Fjp'%SGN'T8NC6mcj'5Vf1%f ,N!"#`e9-X94N3F95N8B95d-41L`X-rM",5),3fHKKB&&E+&T'9c-q0NX&EQ&QF& TDQ&QECTCQ-Pe0h[5[%+MC84K$#U9d)BdL*LMk9EEh*Q+'l3L5aG-Jl)`3C-L3c# 6,im1QS%L%S1lJ6)I*eNq-1qe46-8#B"TK'cP0b-Pfr(R-&rU$3eE[,P-XEBh-dA Xk4S[&[1Qk19!N3ZjjX8bEPDTG"%(0YZLAlX$LUNV9QJi[PZKqkHB%LFhMJrmQ0! KYJNJjH*HHrUaXrZJk1(iY&E!$93P(#FqZrPf-,I!iC2PE4#-!)J@PKlPEbS!@%N 1$[[CA!Y%6qf4)8j'-6T1mQL#G6T#Ib,8YK'k9Xq'aYBc9K1mclKf5-Kk&2jcraK FV3"Gar#LUHDJ'#l0ARb-@B'XUl-5`l!TNYfS,K5-6DQmV&aH&-a[QPHRlMPl2`, h!"I"KNiq6D"X09cJZ,iJhPM`8)Ue'VX,pT!!Dma2kcSi8YA#NIbK#kr!'l)h+r` S4XphMSjH2dp2EI6m4rLPTeA+"%%#Lk(iXJK0Vf(@j18Yhd9CNaXq*KmAYZ,1jHZ G&JlCP[ehb@NfpVAQ6,FUQ[Ii-IQ3!,J`V''X-BViGViYh+CUE!*0(rX8TLTM+f8 &+Rejk&DU1#8YH3"A@MJP,@8B9jTb8YTN1&Hk-NkCmULZ%R&-HUVFVR39U25T)+q d#E"deEPH,C4dE@edP8F&Ij9+N!$5*S2!dT9abP6'JT8X4fYIRK01GCa80T'09#C '58ZG)CBZbGE'4PCj9(C6U33TE5Tb,'8#P+kE",)d9[L09mD5Ypi-[r%@@H@Y0U9 [V&8'H@XZ$&2lA&Uj&LAUfP6Z@HN%U@`b"keN'DKF+KDYC)+8YMSQ,Af5VBc'9He $+N3Y6IAE-,PS&FPU+94[aH3U9@5Y8e['U[A"M(MjP+a`&A(Xe*@LdMA0Cq[1Al` hNd9-)Ycl)T4-&P'N[%YlDUQe4DVj4CfDbVkD*-6,%LUE,%1Qb%ZrHXiQ"jk)QEq SZ8L+93TpkbjIZmNeUFbRCq,#8Qi*+VZHU3[,C'&im+D+FQq3!)(hA#XNp9aEM3A pN!#ZQQPI#mKGDL6)2(fP&bDeIFLmI58ATPUHjr&rfEP+kE2!rX%-&Y@S+XaIQA0 9ZE+SY(rP,ebbJ1Sp`+U!`PAHqQarQ6cc8mlb(B'fjJET9Hm,2NX&,Sh&Si0EB8E RcrTi`Sa(0h&M%6M(Tr#e$*C9NjKp9`1U)"3qlS(@XLmd),EJVL')ZI-+fV`%Ubb +AFBhKdPm10`$Zr@-IDdM&D4*F4U$UNpkF-`pm3-+a9l[jT&TqN#J))mR*(b&`i% 2Fq3Y8@$NpaK"`Xk1C36,MmAR&&MDrMm!N!2d4!!!: -------------------------------------------------------------------------------- /mpw/QUASI88.prefs.sit.hqx: -------------------------------------------------------------------------------- 1 | (This file must be converted with BinHex 4.0) :%9&9390*1$JZF(*PCR-ZFfPd!&0*9$96593K!*!%"ZF!N!58Z&0dG@CQ5A3J+'- T-6Nj0bda16Ni)%&XB@4ND@iJ8hPcG'9YFb`J5@jM,L`JD(4dF$S[,hH3!bjKE'& NC'PZFhPc,Q0[E5p6G(9QCNPd,`d+'J!&%!!!"ZF!N!0b!!%!N!0bLj80TD95CA0 PFRCPC+@P!+@3"!%!!$d!%-)-,Cr0FFA"!*!0$51i!!!*HJ!!"49[Z3!!$3"498& 656Ji,R"bC@Cc!!(C6e4&@&4dG(Kd!3$rr`"9!*!+J!#3#3&-!*!$m3TE!!!0!"% !#"c-G`LLSYjXGpRHfbC23+9pF1&1SFlT"A%Si@NS9kjMZA[+h91K8ebAEJR"pJd EqU+#pXrdJ!G#56e$8Jk46SqciB6j1ZX8I8-cq32jDK`"i1hVY!jffl0@8r#-UaA UR0`l15ZjZjVHlUP#J*YZ'4D$%jjAdmZe1r,NFU1E3rq#@b1FDq)TDRVhba0M#XE dp85Kdr-`@Vdb+hG4[XS-FVGMD[SiL4ffE"`NDRjf'R3!MeCQTN%EL*hT85&RCDD Q*IGf"XNc*`#3!!rbY+aVH24CPm'IA2$!)PUK8"XJ8`j0Gc344LQPXrL6LdJ,!*! $#k*J*FJ!)26)J"ij@S4kE'8AlFL%VmNmVYchbSR2+5G-3Kh@HQ`p[YUc[!Jl`[$ !F3Rcl2c5l$MKj$MP4eE##19UR4&''+(*+5Im#5HFd)QFi#NCFF*kFNabM2!Mc!R KNU-4*!!"A*FaMr[N1$P1'$P1%-B)AiqX!'U$YAV2'`)qPQVfrQR(bCD'KVHL-Dp 2XH"!rp!pdRLF[m1GI)"@9)Fce+-S36FleZ0QE5G(&XUkM,686`063k[$'kEF!Xf UMDp*-MqQ&I0p-AHA(Z$e-"rJh96L*lLLGY%-cG1YM*m+rGr5I5S!aU5aTK9DBEC pqr)2-Trh,HFHdk+8Zd-r'&*PT@T'Nl5H9NC(k4%X!6RS9*lMINLZdM,NYR!TVAT M3*V!2Y#DQmk-NmBD%3mRik4fm3"TQ3[$'lMHNl5TMMeRV!(m5PS9K)F+p!emQ+4 Y)3%VG8FX8,,XmML2RfDmPDHjLlG@H1cK`#@`01$RIc"#4Z,`8l`*%3M`6i3[V+8 &UQ8@a@0MK[)XEG)L!V1VeY*#fraGIS9Iii0ipeIiUS@fcYI1Vb2B(Gc,'i96B,J -KSi+C@mNSF5$lR1-5LEQ#p&r-5%HKVKAPNT&A1Gll8a[j+,NeHf*5i'VB$d+dZ6 35-8BAk`Rl&A1"D2-bQL"j9fTApMqHSE5Z!cDCGV3Q4K#XNcVq[eHiej[2-Yc"RX jEJN%Pl5"[h,6r#a-[S)mY9@JhG'%`0e0(If1JRT'5kK0"drb&$m1bmiJ)MNUjUE 4G)ZC*$deb`XH5iUb`D)K8+,FKc"em0CXhpJA)'RLcD$hQq4p@hPir`S32BNNH0c G&hU#FD-EU*Jr-TE82Dk41-AKMf'$%BPDi8"C8TV3I+arER!1G$Z4,+N1ApM[25r -pSp&RkHk"JjdmUY#%hGDZq1-13p-FKe5k1r@@$BbYJ,1##`ANUFJfSPf8)0`Aam 9IV%@kZd0DLpNKd1dQ,f0iVm$r&QkVHHYI`kjLJhpKN6pJ5[6@'N1*,G[2+'T9j+ DC"G*f+,jr#a@cX51+1D'$BAm+dePeeM02UZYMPRVEIBkD8BGXpFIf&r('U`(C*X Xe6)U$RfDr9TZNRR8H,Qi&8r)PI!T`8YH+5c0lemEr4QQ5l202#-26PR965*TXV# leDkDG*i+RrPV5FZ2j)ZdRBr6A6Ki$`964+bQ+K9b)HL*"pMqYfei#hL$rN#FfIF DR4j(MY!N2!@Sh-Y&idZ%3SSljY@6[6-HrT&G%(YQTjiVmMSVfP6DH"3cF,[r5lR Y(J0'jEhmQYSP[5mKUaXh(U)$ea'H!Uh4666d$(e2KHa@qVVU%,kFMlM$RR2HLf9 AASl%'V&,-q-[d"k5CX"0!!NKEVEDG#mUT5@lU)bRZ`D&h3@XjCCS06f1Q5RK)A' NUG2CeYUXcfaiBJJmS`8iB-KMa,b(a*a&"%5dRkF%S+j)6mc$kLA[LECM8U(E 5KK1)`$ap4C[QMMCc+1)JA1aEaT,@p+#B+TT`,XSl4VrlHbmD0pU0YX%rdCj9@%0 p+m)TZL8EBiDHd%fMZA@TNK!TTKlKH+X#cDT`TGR%8+F5A*T+c5*9@2CklmJBa5* K6c$'UJiI1RJ)`bNHLE,Q5-MMM4f%a`HVT0[Q2`h&SI[CTe3b+J6*ep119Hf0Z5) BKZD53YJ0PAPNF-Fbb*CSNRmNr`F3Xfi6qAIa$f5@L[N2-a1bJcFaSKqV6H)VE$) ",CEr!3!3eJ!!: -------------------------------------------------------------------------------- /src/LIBRETRO/config.h: -------------------------------------------------------------------------------- 1 | #ifndef CONFIG_H_INCLUDED 2 | #define CONFIG_H_INCLUDED 3 | 4 | 5 | /*----------------------------------------------------------------------*/ 6 | /* システム固有の定義 */ 7 | /*----------------------------------------------------------------------*/ 8 | 9 | /* システム固有のインクルードファイル */ 10 | /* #include */ 11 | 12 | 13 | /* このシステム専用の QUASI88 のための識別用 (必要なら) */ 14 | 15 | #ifndef QUASI88_LIBRETRO 16 | #define QUASI88_LIBRETRO 17 | #endif 18 | 19 | 20 | 21 | #include 22 | 23 | 24 | 25 | /* メニューのタイトル/バージョン表示にて追加で表示する言葉 (任意の文字列) */ 26 | 27 | #define Q_COMMENT "LIBRETRO port" 28 | 29 | 30 | 31 | /* 画面の bpp の定義。最低でもどれか一つは定義しなくてはならない */ 32 | 33 | #undef SUPPORT_8BPP 34 | #define SUPPORT_16BPP 35 | #undef SUPPORT_32BPP 36 | 37 | 38 | 39 | /* libretro makefile handles this */ 40 | /* #define INLINE static */ 41 | 42 | 43 | 44 | #if 0 45 | 46 | /* サウンド出力に対応する場合 (MAMEベース) */ 47 | #define USE_SOUND 48 | 49 | /* さらに、 fmgen にも対応する場合 */ 50 | #define USE_FMGEN 51 | 52 | /* コンパイラによっては、PI(π) と M_PI(π)の定義が必要かもしれない */ 53 | #ifndef PI 54 | #define PI 3.14159265358979323846 55 | #endif 56 | #ifndef M_PI 57 | #define M_PI PI 58 | #endif 59 | 60 | #endif 61 | 62 | #endif /* CONFIG_H_INCLUDED */ 63 | -------------------------------------------------------------------------------- /src/LIBRETRO/device.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICE_H_INCLUDED 2 | #define DEVICE_H_INCLUDED 3 | 4 | 5 | /* 6 | * 固有のインクルードファイル 7 | */ 8 | /* #include */ 9 | 10 | 11 | /* 12 | * src/MINI/ 以下でのグローバル変数 13 | */ 14 | /* extern int global_variable; */ 15 | 16 | 17 | 18 | /* 19 | * src/MINI/ 以下でのグローバル変数 (オプション設定可能な変数) 20 | */ 21 | /* extern int global_options; */ 22 | 23 | 24 | 25 | /* 26 | * src/MINI/ 以下でのグローバル関数 27 | */ 28 | /* int mini_init(void); */ 29 | /* int mini_exit(void); */ 30 | 31 | #endif /* DEVICE_H_INCLUDED */ 32 | -------------------------------------------------------------------------------- /src/LIBRETRO/disks.h: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #define MAX_DISK_COUNT 16 5 | #define MESSAGE_DISPLAY_FRAMES 180 6 | #define DRIVE_NONE -1 7 | #define NO_DISK -1 8 | 9 | typedef struct disk_t 10 | { 11 | char basename[OSD_MAX_FILENAME]; 12 | char filename[OSD_MAX_FILENAME]; 13 | 14 | /* Which drive is this disk inserted into? */ 15 | int8_t drive_index; 16 | 17 | /* Is this an arbitrary data disk for saving? */ 18 | bool is_user_disk; 19 | } disk_t; 20 | 21 | typedef struct drive_swap_t 22 | { 23 | /* Is the user swapping drive A, B, or nothing? */ 24 | uint8_t state; 25 | 26 | /* Which disk is currently loaded? */ 27 | int8_t index_a; 28 | int8_t index_b; 29 | 30 | /* How many disks exist in the buffer? */ 31 | uint8_t count; 32 | } drive_swap_t; 33 | 34 | void retro_disks_init (); 35 | bool retro_disks_append(const char *new_filename); 36 | void retro_disks_cycle (retro_environment_t cb, bool right); 37 | void retro_disks_ready (); 38 | void retro_disks_set (retro_environment_t cb); 39 | void retro_disks_start (retro_environment_t cb, bool is_first_drive); 40 | 41 | extern disk_t retro_disks[MAX_DISK_COUNT]; 42 | -------------------------------------------------------------------------------- /src/LIBRETRO/filename.h: -------------------------------------------------------------------------------- 1 | #ifndef FILENAME_H_INCLUDED 2 | #define FILENAME_H_INCLUDED 3 | 4 | #include 5 | 6 | #ifndef QUASI88_FLIBRETRO 7 | #define QUASI88_FLIBRETRO 8 | #endif 9 | 10 | #ifndef CONFIG_SUFFIX 11 | #define CONFIG_SUFFIX ".rc" 12 | #endif 13 | 14 | #ifndef CONFIG_FILENAME 15 | #define CONFIG_FILENAME "quasi88" 16 | #endif 17 | 18 | #ifndef KEYCONF_FILENAME 19 | #define KEYCONF_FILENAME "keyconf" 20 | #endif 21 | 22 | #ifndef STATE_SUFFIX 23 | #define STATE_SUFFIX ".sta" 24 | #endif 25 | 26 | #ifndef STATE_FILENAME 27 | #define STATE_FILENAME "quasi88" 28 | #endif 29 | 30 | #ifndef SNAPSHOT_FILENAME 31 | #define SNAPSHOT_FILENAME "save" 32 | #endif 33 | 34 | #ifndef WAVEOUT_FILENAME 35 | #define WAVEOUT_FILENAME "wave" 36 | #endif 37 | 38 | #ifdef _WIN32 39 | #define SLASH '\\' 40 | #else 41 | #define SLASH '/' 42 | #endif 43 | 44 | extern char *save_path; 45 | extern bool save_to_disk_image; 46 | 47 | #endif /* FILENAME_H_INCLUDED */ 48 | -------------------------------------------------------------------------------- /src/LIBRETRO/jni/Android.mk: -------------------------------------------------------------------------------- 1 | LOCAL_PATH := $(call my-dir) 2 | BASE_DIR := $(LOCAL_PATH)/../../.. 3 | CORE_DIR := $(BASE_DIR)/src 4 | 5 | INCFLAGS := -I$(CORE_DIR) \ 6 | -I$(CORE_DIR)/snddrv/quasi88 \ 7 | -I$(CORE_DIR)/snddrv/src \ 8 | -I$(CORE_DIR)/snddrv/src/sound \ 9 | -I$(CORE_DIR)/snddrv/quasi88 \ 10 | -I$(CORE_DIR)/fmgen \ 11 | -I$(CORE_DIR)/LIBRETRO 12 | 13 | include $(BASE_DIR)/Makefile.common 14 | 15 | #ROMDIR = rom/ 16 | #DISKDIR = disk/ 17 | #TAPEDIR = tape/ 18 | 19 | COREFLAGS := -DROM_DIR="" -DDISK_DIR="" -DTAPE_DIR="" \ 20 | -DQUASI88_MINI -DCLIB_DECL="" -DUSE_SOUND=1 -DUSE_FMGEN=1 $(INCFLAGS) -D__LIBRETRO__ 21 | 22 | include $(CLEAR_VARS) 23 | LOCAL_MODULE := retro 24 | LOCAL_DISABLE_FORMAT_STRING_CHECKS := true 25 | LOCAL_SRC_FILES := $(SOURCES_C) $(SOURCES_CXX) 26 | LOCAL_CFLAGS := $(COREFLAGS) 27 | LOCAL_CPPFLAGS := $(COREFLAGS) 28 | LOCAL_CXXFLAGS := $(COREFLAGS) 29 | LOCAL_LDFLAGS := -Wl,-version-script=$(BASE_DIR)/link.T 30 | include $(BUILD_SHARED_LIBRARY) 31 | -------------------------------------------------------------------------------- /src/LIBRETRO/jni/Application.mk: -------------------------------------------------------------------------------- 1 | APP_STL := c++_static 2 | APP_ABI := all 3 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/compat/compat_posix_string.c: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (compat_posix_string.c). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #include 24 | 25 | #include 26 | 27 | #ifdef _WIN32 28 | 29 | #undef strcasecmp 30 | #undef strdup 31 | #undef isblank 32 | #undef strtok_r 33 | #include 34 | #include 35 | #include 36 | #include 37 | 38 | #include 39 | 40 | int retro_strcasecmp__(const char *a, const char *b) 41 | { 42 | while (*a && *b) 43 | { 44 | int a_ = tolower(*a); 45 | int b_ = tolower(*b); 46 | 47 | if (a_ != b_) 48 | return a_ - b_; 49 | 50 | a++; 51 | b++; 52 | } 53 | 54 | return tolower(*a) - tolower(*b); 55 | } 56 | 57 | char *retro_strdup__(const char *orig) 58 | { 59 | size_t len = strlen(orig) + 1; 60 | char *ret = (char*)malloc(len); 61 | if (!ret) 62 | return NULL; 63 | 64 | strlcpy(ret, orig, len); 65 | return ret; 66 | } 67 | 68 | int retro_isblank__(int c) 69 | { 70 | return (c == ' ') || (c == '\t'); 71 | } 72 | 73 | char *retro_strtok_r__(char *str, const char *delim, char **saveptr) 74 | { 75 | char *first = NULL; 76 | if (!saveptr || !delim) 77 | return NULL; 78 | 79 | if (str) 80 | *saveptr = str; 81 | 82 | do 83 | { 84 | char *ptr = NULL; 85 | first = *saveptr; 86 | while (*first && strchr(delim, *first)) 87 | *first++ = '\0'; 88 | 89 | if (*first == '\0') 90 | return NULL; 91 | 92 | ptr = first + 1; 93 | 94 | while (*ptr && !strchr(delim, *ptr)) 95 | ptr++; 96 | 97 | *saveptr = ptr + (*ptr ? 1 : 0); 98 | *ptr = '\0'; 99 | } while (strlen(first) == 0); 100 | 101 | return first; 102 | } 103 | 104 | #endif 105 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/compat/compat_snprintf.c: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (compat_snprintf.c). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | /* THIS FILE HAS NOT BEEN VALIDATED ON PLATFORMS BESIDES MSVC */ 24 | #ifdef _MSC_VER 25 | 26 | #include 27 | #include 28 | 29 | #if _MSC_VER < 1800 30 | #define va_copy(dst, src) ((dst) = (src)) 31 | #endif 32 | 33 | #if _MSC_VER < 1300 34 | #define _vscprintf c89_vscprintf_retro__ 35 | 36 | static int c89_vscprintf_retro__(const char *format, va_list pargs) 37 | { 38 | int retval; 39 | va_list argcopy; 40 | va_copy(argcopy, pargs); 41 | retval = vsnprintf(NULL, 0, format, argcopy); 42 | va_end(argcopy); 43 | return retval; 44 | } 45 | #endif 46 | 47 | /* http://stackoverflow.com/questions/2915672/snprintf-and-visual-studio-2010 */ 48 | 49 | int c99_vsnprintf_retro__(char *outBuf, size_t size, const char *format, va_list ap) 50 | { 51 | int count = -1; 52 | 53 | if (size != 0) 54 | { 55 | #if (_MSC_VER <= 1310) 56 | count = _vsnprintf(outBuf, size - 1, format, ap); 57 | #else 58 | count = _vsnprintf_s(outBuf, size, size - 1, format, ap); 59 | #endif 60 | } 61 | 62 | if (count == -1) 63 | count = _vscprintf(format, ap); 64 | 65 | if (count == size) 66 | { 67 | /* there was no room for a NULL, so truncate the last character */ 68 | outBuf[size - 1] = '\0'; 69 | } 70 | 71 | return count; 72 | } 73 | 74 | int c99_snprintf_retro__(char *outBuf, size_t size, const char *format, ...) 75 | { 76 | int count; 77 | va_list ap; 78 | 79 | va_start(ap, format); 80 | count = c99_vsnprintf_retro__(outBuf, size, format, ap); 81 | va_end(ap); 82 | 83 | return count; 84 | } 85 | #endif 86 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/compat/compat_strcasestr.c: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (compat_strcasestr.c). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #include 24 | 25 | #include 26 | 27 | /* Pretty much strncasecmp. */ 28 | static int casencmp(const char *a, const char *b, size_t n) 29 | { 30 | size_t i; 31 | 32 | for (i = 0; i < n; i++) 33 | { 34 | int a_lower = tolower(a[i]); 35 | int b_lower = tolower(b[i]); 36 | if (a_lower != b_lower) 37 | return a_lower - b_lower; 38 | } 39 | 40 | return 0; 41 | } 42 | 43 | char *strcasestr_retro__(const char *haystack, const char *needle) 44 | { 45 | size_t i, search_off; 46 | size_t hay_len = strlen(haystack); 47 | size_t needle_len = strlen(needle); 48 | 49 | if (needle_len > hay_len) 50 | return NULL; 51 | 52 | search_off = hay_len - needle_len; 53 | for (i = 0; i <= search_off; i++) 54 | if (!casencmp(haystack + i, needle, needle_len)) 55 | return (char*)haystack + i; 56 | 57 | return NULL; 58 | } 59 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/compat/compat_strl.c: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (compat_strl.c). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #include 24 | #include 25 | 26 | #include 27 | 28 | /* Implementation of strlcpy()/strlcat() based on OpenBSD. */ 29 | 30 | #ifndef __MACH__ 31 | 32 | size_t strlcpy(char *dest, const char *source, size_t size) 33 | { 34 | size_t src_size = 0; 35 | size_t n = size; 36 | 37 | if (n) 38 | while (--n && (*dest++ = *source++)) src_size++; 39 | 40 | if (!n) 41 | { 42 | if (size) *dest = '\0'; 43 | while (*source++) src_size++; 44 | } 45 | 46 | return src_size; 47 | } 48 | 49 | size_t strlcat(char *dest, const char *source, size_t size) 50 | { 51 | size_t len = strlen(dest); 52 | 53 | dest += len; 54 | 55 | if (len > size) 56 | size = 0; 57 | else 58 | size -= len; 59 | 60 | return len + strlcpy(dest, source, size); 61 | } 62 | #endif 63 | 64 | char *strldup(const char *s, size_t n) 65 | { 66 | char *dst = (char*)malloc(sizeof(char) * (n + 1)); 67 | strlcpy(dst, s, n); 68 | return dst; 69 | } 70 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/compat/compat_vscprintf.c: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2017 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (compat_snprintf.c). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | /* THIS FILE HAS NOT BEEN VALIDATED ON PLATFORMS BESIDES MSVC */ 24 | #ifdef _MSC_VER 25 | 26 | #include 27 | 28 | #include 29 | #include 30 | 31 | #if defined(_MSC_VER) && _MSC_VER < 1800 32 | #define va_copy(dst, src) ((dst) = (src)) 33 | #endif 34 | 35 | int c89_vscprintf_retro__(const char *format, va_list pargs) 36 | { 37 | int retval; 38 | va_list argcopy; 39 | va_copy(argcopy, pargs); 40 | retval = vsnprintf(NULL, 0, format, argcopy); 41 | va_end(argcopy); 42 | return retval; 43 | } 44 | #endif 45 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/compat/fopen_utf8.c: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (fopen_utf8.c). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #include 24 | #include 25 | #include 26 | #include 27 | 28 | #if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0500 || defined(_XBOX) 29 | #ifndef LEGACY_WIN32 30 | #define LEGACY_WIN32 31 | #endif 32 | #endif 33 | 34 | #ifdef _WIN32 35 | #undef fopen 36 | 37 | void *fopen_utf8(const char * filename, const char * mode) 38 | { 39 | #if defined(LEGACY_WIN32) 40 | FILE *ret = NULL; 41 | char * filename_local = utf8_to_local_string_alloc(filename); 42 | 43 | if (!filename_local) 44 | return NULL; 45 | ret = fopen(filename_local, mode); 46 | if (filename_local) 47 | free(filename_local); 48 | return ret; 49 | #else 50 | wchar_t * filename_w = utf8_to_utf16_string_alloc(filename); 51 | wchar_t * mode_w = utf8_to_utf16_string_alloc(mode); 52 | FILE* ret = _wfopen(filename_w, mode_w); 53 | free(filename_w); 54 | free(mode_w); 55 | return ret; 56 | #endif 57 | } 58 | #endif 59 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/file/nbio/nbio_intf.c: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (nbio_intf.c). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #include 24 | #include 25 | 26 | #ifdef HAVE_CONFIG_H 27 | #include "config.h" 28 | #endif 29 | 30 | #include 31 | 32 | extern nbio_intf_t nbio_linux; 33 | extern nbio_intf_t nbio_mmap_unix; 34 | extern nbio_intf_t nbio_mmap_win32; 35 | #if defined(ORBIS) 36 | extern nbio_intf_t nbio_orbis; 37 | #endif 38 | extern nbio_intf_t nbio_stdio; 39 | 40 | #if defined(_linux__) 41 | static nbio_intf_t *internal_nbio = &nbio_linux; 42 | #elif defined(HAVE_MMAP) && defined(BSD) 43 | static nbio_intf_t *internal_nbio = &nbio_mmap_unix; 44 | #elif defined(_WIN32) && !defined(_XBOX) 45 | static nbio_intf_t *internal_nbio = &nbio_mmap_win32; 46 | #elif defined(ORBIS) 47 | static nbio_intf_t *internal_nbio = &nbio_orbis; 48 | #else 49 | static nbio_intf_t *internal_nbio = &nbio_stdio; 50 | #endif 51 | 52 | void *nbio_open(const char * filename, unsigned mode) 53 | { 54 | return internal_nbio->open(filename, mode); 55 | } 56 | 57 | void nbio_begin_read(void *data) 58 | { 59 | internal_nbio->begin_read(data); 60 | } 61 | 62 | void nbio_begin_write(void *data) 63 | { 64 | internal_nbio->begin_write(data); 65 | } 66 | 67 | bool nbio_iterate(void *data) 68 | { 69 | return internal_nbio->iterate(data); 70 | } 71 | 72 | void nbio_resize(void *data, size_t len) 73 | { 74 | internal_nbio->resize(data, len); 75 | } 76 | 77 | void *nbio_get_ptr(void *data, size_t* len) 78 | { 79 | return internal_nbio->get_ptr(data, len); 80 | } 81 | 82 | void nbio_cancel(void *data) 83 | { 84 | internal_nbio->cancel(data); 85 | } 86 | 87 | void nbio_free(void *data) 88 | { 89 | internal_nbio->free(data); 90 | } 91 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/boolean.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (boolean.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef __LIBRETRO_SDK_BOOLEAN_H 24 | #define __LIBRETRO_SDK_BOOLEAN_H 25 | 26 | #ifndef __cplusplus 27 | 28 | #if defined(_MSC_VER) && _MSC_VER < 1800 && !defined(SN_TARGET_PS3) 29 | /* Hack applied for MSVC when compiling in C89 mode as it isn't C99 compliant. */ 30 | #define bool unsigned char 31 | #define true 1 32 | #define false 0 33 | #else 34 | #include 35 | #endif 36 | 37 | #endif 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/compat/apple_compat.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (apple_compat.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef __APPLE_COMPAT_H 24 | #define __APPLE_COMPAT_H 25 | 26 | #ifdef __APPLE__ 27 | #include 28 | #endif 29 | 30 | #ifdef __OBJC__ 31 | 32 | #if (MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4) 33 | typedef int NSInteger; 34 | typedef unsigned NSUInteger; 35 | typedef float CGFloat; 36 | #endif 37 | 38 | #ifndef __has_feature 39 | /* Compatibility with non-Clang compilers. */ 40 | #define __has_feature(x) 0 41 | #endif 42 | 43 | #ifndef CF_RETURNS_RETAINED 44 | #if __has_feature(attribute_cf_returns_retained) 45 | #define CF_RETURNS_RETAINED __attribute__((cf_returns_retained)) 46 | #else 47 | #define CF_RETURNS_RETAINED 48 | #endif 49 | #endif 50 | 51 | #ifndef NS_INLINE 52 | #define NS_INLINE inline 53 | #endif 54 | 55 | NS_INLINE CF_RETURNS_RETAINED CFTypeRef CFBridgingRetainCompat(id X) 56 | { 57 | #if __has_feature(objc_arc) 58 | return (__bridge_retained CFTypeRef)X; 59 | #else 60 | return X; 61 | #endif 62 | } 63 | 64 | #endif 65 | 66 | #ifdef IOS 67 | #ifndef __IPHONE_5_0 68 | #warning "This project uses features only available in iOS SDK 5.0 and later." 69 | #endif 70 | 71 | #ifdef __OBJC__ 72 | #import 73 | #import 74 | #import 75 | #endif 76 | 77 | #else 78 | 79 | #ifdef __OBJC__ 80 | #include 81 | #endif 82 | #endif 83 | 84 | #endif 85 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/compat/fnmatch.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (fnmatch.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef __LIBRETRO_SDK_COMPAT_FNMATCH_H__ 24 | #define __LIBRETRO_SDK_COMPAT_FNMATCH_H__ 25 | 26 | #define FNM_NOMATCH 1 27 | 28 | int rl_fnmatch(const char *pattern, const char *string, int flags); 29 | 30 | #endif 31 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/compat/fopen_utf8.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (fopen_utf8.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef __LIBRETRO_SDK_COMPAT_FOPEN_UTF8_H 24 | #define __LIBRETRO_SDK_COMPAT_FOPEN_UTF8_H 25 | 26 | #ifdef _WIN32 27 | /* Defined to error rather than fopen_utf8, to make it clear to everyone reading the code that not worrying about utf16 is fine */ 28 | /* TODO: enable */ 29 | /* #define fopen (use fopen_utf8 instead) */ 30 | void *fopen_utf8(const char * filename, const char * mode); 31 | #else 32 | #define fopen_utf8 fopen 33 | #endif 34 | #endif 35 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/compat/getopt.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (getopt.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef __LIBRETRO_SDK_COMPAT_GETOPT_H 24 | #define __LIBRETRO_SDK_COMPAT_GETOPT_H 25 | 26 | #if defined(RARCH_INTERNAL) && defined(HAVE_CONFIG_H) 27 | #include "../../../config.h" 28 | #endif 29 | 30 | /* Custom implementation of the GNU getopt_long for portability. 31 | * Not designed to be fully compatible, but compatible with 32 | * the features RetroArch uses. */ 33 | 34 | #ifdef HAVE_GETOPT_LONG 35 | #include 36 | #else 37 | /* Avoid possible naming collisions during link since we 38 | * prefer to use the actual name. */ 39 | #define getopt_long(argc, argv, optstring, longopts, longindex) __getopt_long_retro(argc, argv, optstring, longopts, longindex) 40 | 41 | #include 42 | 43 | RETRO_BEGIN_DECLS 44 | 45 | struct option 46 | { 47 | const char *name; 48 | int has_arg; 49 | int *flag; 50 | int val; 51 | }; 52 | 53 | /* argv[] is declared with char * const argv[] in GNU, 54 | * but this makes no sense, as non-POSIX getopt_long 55 | * mutates argv (non-opts are moved to the end). */ 56 | int getopt_long(int argc, char *argv[], 57 | const char *optstring, const struct option *longopts, int *longindex); 58 | extern char *optarg; 59 | extern int optind, opterr, optopt; 60 | 61 | RETRO_END_DECLS 62 | 63 | /* If these are variously #defined, then we have bigger problems */ 64 | #ifndef no_argument 65 | #define no_argument 0 66 | #define required_argument 1 67 | #define optional_argument 2 68 | #endif 69 | 70 | /* HAVE_GETOPT_LONG */ 71 | #endif 72 | 73 | /* pragma once */ 74 | #endif 75 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/compat/ifaddrs.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 1995, 1999 3 | * Berkeley Software Design, Inc. All rights reserved. 4 | * 5 | * Redistribution and use in source and binary forms, with or without 6 | * modification, are permitted provided that the following conditions 7 | * are met: 8 | * 1. Redistributions of source code must retain the above copyright 9 | * notice, this list of conditions and the following disclaimer. 10 | * 11 | * THIS SOFTWARE IS PROVIDED BY Berkeley Software Design, Inc. ``AS IS'' AND 12 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 13 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 14 | * ARE DISCLAIMED. IN NO EVENT SHALL Berkeley Software Design, Inc. BE LIABLE 15 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 16 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 17 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 18 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 19 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 20 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 21 | * SUCH DAMAGE. 22 | * 23 | * BSDI ifaddrs.h,v 2.5 2000/02/23 14:51:59 dab Exp 24 | */ 25 | 26 | #ifndef _IFADDRS_H_ 27 | #define _IFADDRS_H_ 28 | 29 | struct ifaddrs 30 | { 31 | struct ifaddrs *ifa_next; 32 | char *ifa_name; 33 | unsigned int ifa_flags; 34 | struct sockaddr *ifa_addr; 35 | struct sockaddr *ifa_netmask; 36 | struct sockaddr *ifa_dstaddr; 37 | void *ifa_data; 38 | }; 39 | 40 | /* 41 | * This may have been defined in . Note that if is 42 | * to be included it must be included before this header file. 43 | */ 44 | #ifndef ifa_broadaddr 45 | #define ifa_broadaddr ifa_dstaddr /* broadcast address interface */ 46 | #endif 47 | 48 | #include 49 | 50 | extern int getifaddrs(struct ifaddrs **ifap); 51 | extern void freeifaddrs(struct ifaddrs *ifa); 52 | 53 | #endif 54 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/compat/intrinsics.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (intrinsics.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef __LIBRETRO_SDK_COMPAT_INTRINSICS_H 24 | #define __LIBRETRO_SDK_COMPAT_INTRINSICS_H 25 | 26 | #include 27 | #include 28 | #include 29 | 30 | #include 31 | #include 32 | 33 | #if defined(_MSC_VER) && !defined(_XBOX) 34 | #if (_MSC_VER > 1310) 35 | #include 36 | #endif 37 | #endif 38 | 39 | RETRO_BEGIN_DECLS 40 | 41 | /* Count Leading Zero, unsigned 16bit input value */ 42 | static INLINE unsigned compat_clz_u16(uint16_t val) 43 | { 44 | #if defined(__GNUC__) && !defined(PS2) 45 | return __builtin_clz(val << 16 | 0x8000); 46 | #else 47 | unsigned ret = 0; 48 | 49 | while(!(val & 0x8000) && ret < 16) 50 | { 51 | val <<= 1; 52 | ret++; 53 | } 54 | 55 | return ret; 56 | #endif 57 | } 58 | 59 | /* Count Trailing Zero */ 60 | static INLINE int compat_ctz(unsigned x) 61 | { 62 | #if defined(__GNUC__) && !defined(RARCH_CONSOLE) 63 | return __builtin_ctz(x); 64 | #elif _MSC_VER >= 1400 && !defined(_XBOX) && !defined(__WINRT__) 65 | unsigned long r = 0; 66 | _BitScanReverse((unsigned long*)&r, x); 67 | return (int)r; 68 | #else 69 | /* Only checks at nibble granularity, 70 | * because that's what we need. */ 71 | if (x & 0x000f) 72 | return 0; 73 | if (x & 0x00f0) 74 | return 4; 75 | if (x & 0x0f00) 76 | return 8; 77 | if (x & 0xf000) 78 | return 12; 79 | return 16; 80 | #endif 81 | } 82 | 83 | RETRO_END_DECLS 84 | 85 | #endif 86 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/compat/posix_string.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (posix_string.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef __LIBRETRO_SDK_COMPAT_POSIX_STRING_H 24 | #define __LIBRETRO_SDK_COMPAT_POSIX_STRING_H 25 | 26 | #include 27 | 28 | #ifdef _MSC_VER 29 | #include 30 | #endif 31 | 32 | #if defined(PS2) 33 | #include 34 | #endif 35 | 36 | RETRO_BEGIN_DECLS 37 | 38 | #ifdef _WIN32 39 | #undef strtok_r 40 | #define strtok_r(str, delim, saveptr) retro_strtok_r__(str, delim, saveptr) 41 | 42 | char *strtok_r(char *str, const char *delim, char **saveptr); 43 | #endif 44 | 45 | #ifdef _MSC_VER 46 | #undef strcasecmp 47 | #undef strdup 48 | #define strcasecmp(a, b) retro_strcasecmp__(a, b) 49 | #define strdup(orig) retro_strdup__(orig) 50 | int strcasecmp(const char *a, const char *b); 51 | char *strdup(const char *orig); 52 | 53 | /* isblank is available since MSVC 2013 */ 54 | #if _MSC_VER < 1800 55 | #undef isblank 56 | #define isblank(c) retro_isblank__(c) 57 | int isblank(int c); 58 | #endif 59 | 60 | #endif 61 | 62 | RETRO_END_DECLS 63 | 64 | #endif 65 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/compat/strcasestr.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (strcasestr.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef __LIBRETRO_SDK_COMPAT_STRCASESTR_H 24 | #define __LIBRETRO_SDK_COMPAT_STRCASESTR_H 25 | 26 | #include 27 | 28 | #if defined(PS2) 29 | #include 30 | #endif 31 | 32 | #if defined(RARCH_INTERNAL) && defined(HAVE_CONFIG_H) 33 | #include "../../../config.h" 34 | #endif 35 | 36 | #ifndef HAVE_STRCASESTR 37 | 38 | #include 39 | 40 | RETRO_BEGIN_DECLS 41 | 42 | /* Avoid possible naming collisions during link 43 | * since we prefer to use the actual name. */ 44 | #define strcasestr(haystack, needle) strcasestr_retro__(haystack, needle) 45 | 46 | char *strcasestr(const char *haystack, const char *needle); 47 | 48 | RETRO_END_DECLS 49 | 50 | #endif 51 | 52 | #endif 53 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/compat/strl.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (strl.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef __LIBRETRO_SDK_COMPAT_STRL_H 24 | #define __LIBRETRO_SDK_COMPAT_STRL_H 25 | 26 | #include 27 | #include 28 | 29 | #if defined(RARCH_INTERNAL) && defined(HAVE_CONFIG_H) 30 | #include "../../../config.h" 31 | #endif 32 | 33 | #include 34 | 35 | RETRO_BEGIN_DECLS 36 | 37 | #ifdef __MACH__ 38 | #ifndef HAVE_STRL 39 | #define HAVE_STRL 40 | #endif 41 | #endif 42 | 43 | #ifndef HAVE_STRL 44 | /* Avoid possible naming collisions during link since 45 | * we prefer to use the actual name. */ 46 | #define strlcpy(dst, src, size) strlcpy_retro__(dst, src, size) 47 | 48 | #define strlcat(dst, src, size) strlcat_retro__(dst, src, size) 49 | 50 | size_t strlcpy(char *dest, const char *source, size_t size); 51 | size_t strlcat(char *dest, const char *source, size_t size); 52 | 53 | #endif 54 | 55 | char *strldup(const char *s, size_t n); 56 | 57 | RETRO_END_DECLS 58 | 59 | #endif 60 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/encodings/crc32.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (crc32.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef _LIBRETRO_ENCODINGS_CRC32_H 24 | #define _LIBRETRO_ENCODINGS_CRC32_H 25 | 26 | #include 27 | #include 28 | 29 | #include 30 | 31 | RETRO_BEGIN_DECLS 32 | 33 | uint32_t encoding_crc32(uint32_t crc, const uint8_t *buf, size_t len); 34 | uint32_t file_crc32(uint32_t crc, const char *path); 35 | 36 | RETRO_END_DECLS 37 | 38 | #endif 39 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/encodings/utf.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (utf.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef _LIBRETRO_ENCODINGS_UTF_H 24 | #define _LIBRETRO_ENCODINGS_UTF_H 25 | 26 | #include 27 | #include 28 | 29 | #include 30 | 31 | #include 32 | 33 | RETRO_BEGIN_DECLS 34 | 35 | enum CodePage 36 | { 37 | CODEPAGE_LOCAL = 0, /* CP_ACP */ 38 | CODEPAGE_UTF8 = 65001 /* CP_UTF8 */ 39 | }; 40 | 41 | size_t utf8_conv_utf32(uint32_t *out, size_t out_chars, 42 | const char *in, size_t in_size); 43 | 44 | bool utf16_conv_utf8(uint8_t *out, size_t *out_chars, 45 | const uint16_t *in, size_t in_size); 46 | 47 | size_t utf8len(const char *string); 48 | 49 | size_t utf8cpy(char *d, size_t d_len, const char *s, size_t chars); 50 | 51 | const char *utf8skip(const char *str, size_t chars); 52 | 53 | uint32_t utf8_walk(const char **string); 54 | 55 | bool utf16_to_char_string(const uint16_t *in, char *s, size_t len); 56 | 57 | char* utf8_to_local_string_alloc(const char *str); 58 | 59 | char* local_to_utf8_string_alloc(const char *str); 60 | 61 | wchar_t* utf8_to_utf16_string_alloc(const char *str); 62 | 63 | char* utf16_to_utf8_string_alloc(const wchar_t *str); 64 | 65 | RETRO_END_DECLS 66 | 67 | #endif 68 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/encodings/win32.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (utf.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef _LIBRETRO_ENCODINGS_WIN32_H 24 | #define _LIBRETRO_ENCODINGS_WIN32_H 25 | 26 | #ifndef _XBOX 27 | #ifdef _WIN32 28 | /*#define UNICODE 29 | #include 30 | #include */ 31 | 32 | #ifdef __cplusplus 33 | extern "C" { 34 | #endif 35 | 36 | #include 37 | 38 | #ifdef __cplusplus 39 | } 40 | #endif 41 | 42 | #endif 43 | #endif 44 | 45 | #ifdef UNICODE 46 | #define CHAR_TO_WCHAR_ALLOC(s, ws) \ 47 | size_t ws##_size = (NULL != s && s[0] ? strlen(s) : 0) + 1; \ 48 | wchar_t *ws = (wchar_t*)calloc(ws##_size, 2); \ 49 | if (NULL != s && s[0]) \ 50 | MultiByteToWideChar(CP_UTF8, 0, s, -1, ws, ws##_size / sizeof(wchar_t)); 51 | 52 | #define WCHAR_TO_CHAR_ALLOC(ws, s) \ 53 | size_t s##_size = ((NULL != ws && ws[0] ? wcslen((const wchar_t*)ws) : 0) / 2) + 1; \ 54 | char *s = (char*)calloc(s##_size, 1); \ 55 | if (NULL != ws && ws[0]) \ 56 | utf16_to_char_string((const uint16_t*)ws, s, s##_size); 57 | 58 | #else 59 | #define CHAR_TO_WCHAR_ALLOC(s, ws) char *ws = (NULL != s && s[0] ? strdup(s) : NULL); 60 | #define WCHAR_TO_CHAR_ALLOC(ws, s) char *s = (NULL != ws && ws[0] ? strdup(ws) : NULL); 61 | #endif 62 | 63 | #endif 64 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/file/config_file_userdata.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (config_file_userdata.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef _LIBRETRO_SDK_CONFIG_FILE_USERDATA_H 24 | #define _LIBRETRO_SDK_CONFIG_FILE_USERDATA_H 25 | 26 | #include 27 | 28 | #include 29 | 30 | #include 31 | 32 | RETRO_BEGIN_DECLS 33 | 34 | struct config_file_userdata 35 | { 36 | config_file_t *conf; 37 | const char *prefix[2]; 38 | }; 39 | 40 | int config_userdata_get_float(void *userdata, const char *key_str, 41 | float *value, float default_value); 42 | 43 | int config_userdata_get_int(void *userdata, const char *key_str, 44 | int *value, int default_value); 45 | 46 | int config_userdata_get_float_array(void *userdata, const char *key_str, 47 | float **values, unsigned *out_num_values, 48 | const float *default_values, unsigned num_default_values); 49 | 50 | int config_userdata_get_int_array(void *userdata, const char *key_str, 51 | int **values, unsigned *out_num_values, 52 | const int *default_values, unsigned num_default_values); 53 | 54 | int config_userdata_get_string(void *userdata, const char *key_str, 55 | char **output, const char *default_output); 56 | 57 | void config_userdata_free(void *ptr); 58 | 59 | RETRO_END_DECLS 60 | 61 | #endif 62 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/memmap.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (memmap.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef _LIBRETRO_MEMMAP_H 24 | #define _LIBRETRO_MEMMAP_H 25 | 26 | #include 27 | #include 28 | 29 | #if defined(__CELLOS_LV2__) || defined(PSP) || defined(PS2) || defined(GEKKO) || defined(VITA) || defined(_XBOX) || defined(_3DS) || defined(WIIU) || defined(SWITCH) 30 | /* No mman available */ 31 | #elif defined(_WIN32) && !defined(_XBOX) 32 | #include 33 | #include 34 | #include 35 | #else 36 | #define HAVE_MMAN 37 | #include 38 | #endif 39 | 40 | #if !defined(HAVE_MMAN) || defined(_WIN32) 41 | void* mmap(void *addr, size_t len, int mmap_prot, int mmap_flags, int fildes, size_t off); 42 | 43 | int munmap(void *addr, size_t len); 44 | 45 | int mprotect(void *addr, size_t len, int prot); 46 | #endif 47 | 48 | int memsync(void *start, void *end); 49 | 50 | int memprotect(void *addr, size_t len); 51 | 52 | #endif 53 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/retro_assert.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (retro_assert.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef __RETRO_ASSERT_H 24 | #define __RETRO_ASSERT_H 25 | 26 | #include 27 | 28 | #ifdef RARCH_INTERNAL 29 | #include 30 | #define retro_assert(cond) do { \ 31 | if (!(cond)) { printf("Assertion failed at %s:%d.\n", __FILE__, __LINE__); abort(); } \ 32 | } while(0) 33 | #else 34 | #define retro_assert(cond) assert(cond) 35 | #endif 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/retro_common.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (retro_common.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef _LIBRETRO_COMMON_RETRO_COMMON_H 24 | #define _LIBRETRO_COMMON_RETRO_COMMON_H 25 | 26 | /* 27 | This file is designed to normalize the libretro-common compiling environment. 28 | It is not to be used in public API headers, as they should be designed as leanly as possible. 29 | Nonetheless.. in the meantime, if you do something like use ssize_t, which is not fully portable, 30 | in a public API, you may need this. 31 | */ 32 | 33 | /* conditional compilation is handled inside here */ 34 | #include 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/retro_inline.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (retro_inline.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef __LIBRETRO_SDK_INLINE_H 24 | #define __LIBRETRO_SDK_INLINE_H 25 | 26 | #ifndef INLINE 27 | 28 | #if defined(_WIN32) || defined(__INTEL_COMPILER) 29 | #define INLINE __inline 30 | #elif defined(__STDC_VERSION__) && __STDC_VERSION__>=199901L 31 | #define INLINE inline 32 | #elif defined(__GNUC__) 33 | #define INLINE __inline__ 34 | #else 35 | #define INLINE 36 | #endif 37 | 38 | #endif 39 | #endif 40 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/retro_math.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (retro_math.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef _LIBRETRO_COMMON_MATH_H 24 | #define _LIBRETRO_COMMON_MATH_H 25 | 26 | #include 27 | 28 | #if defined(_WIN32) && !defined(_XBOX) 29 | #define WIN32_LEAN_AND_MEAN 30 | #include 31 | #elif defined(_WIN32) && defined(_XBOX) 32 | #include 33 | #endif 34 | 35 | #include 36 | 37 | #ifdef _MSC_VER 38 | #include 39 | #endif 40 | #include 41 | 42 | #ifndef M_PI 43 | #if !defined(USE_MATH_DEFINES) 44 | #define M_PI 3.14159265358979323846264338327 45 | #endif 46 | #endif 47 | 48 | #ifndef MAX 49 | #define MAX(a, b) ((a) > (b) ? (a) : (b)) 50 | #endif 51 | 52 | #ifndef MIN 53 | #define MIN(a, b) ((a) < (b) ? (a) : (b)) 54 | #endif 55 | 56 | /** 57 | * next_pow2: 58 | * @v : initial value 59 | * 60 | * Get next power of 2 value based on initial value. 61 | * 62 | * Returns: next power of 2 value (derived from @v). 63 | **/ 64 | static INLINE uint32_t next_pow2(uint32_t v) 65 | { 66 | v--; 67 | v |= v >> 1; 68 | v |= v >> 2; 69 | v |= v >> 4; 70 | v |= v >> 8; 71 | v |= v >> 16; 72 | v++; 73 | return v; 74 | } 75 | 76 | /** 77 | * prev_pow2: 78 | * @v : initial value 79 | * 80 | * Get previous power of 2 value based on initial value. 81 | * 82 | * Returns: previous power of 2 value (derived from @v). 83 | **/ 84 | static INLINE uint32_t prev_pow2(uint32_t v) 85 | { 86 | v |= v >> 1; 87 | v |= v >> 2; 88 | v |= v >> 4; 89 | v |= v >> 8; 90 | v |= v >> 16; 91 | return v - (v >> 1); 92 | } 93 | 94 | #endif 95 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/retro_stat.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2016 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (retro_stat.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef __RETRO_STAT_H 24 | #define __RETRO_STAT_H 25 | 26 | #include 27 | #include 28 | 29 | #include 30 | 31 | #include 32 | 33 | RETRO_BEGIN_DECLS 34 | 35 | /** 36 | * path_is_directory: 37 | * @path : path 38 | * 39 | * Checks if path is a directory. 40 | * 41 | * Returns: true (1) if path is a directory, otherwise false (0). 42 | */ 43 | bool path_is_directory(const char *path); 44 | 45 | bool path_is_character_special(const char *path); 46 | 47 | bool path_is_valid(const char *path); 48 | 49 | int32_t path_get_size(const char *path); 50 | 51 | /** 52 | * path_mkdir_norecurse: 53 | * @dir : directory 54 | * 55 | * Create directory on filesystem. 56 | * 57 | * Returns: true (1) if directory could be created, otherwise false (0). 58 | **/ 59 | bool mkdir_norecurse(const char *dir); 60 | 61 | RETRO_END_DECLS 62 | 63 | #endif 64 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/streams/chd_stream.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (chd_stream.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef _LIBRETRO_SDK_FILE_CHD_STREAM_H 24 | #define _LIBRETRO_SDK_FILE_CHD_STREAM_H 25 | 26 | #include 27 | #include 28 | 29 | #include 30 | 31 | RETRO_BEGIN_DECLS 32 | 33 | typedef struct chdstream chdstream_t; 34 | 35 | /* First data track */ 36 | #define CHDSTREAM_TRACK_FIRST_DATA (-1) 37 | /* Last track */ 38 | #define CHDSTREAM_TRACK_LAST (-2) 39 | /* Primary (largest) data track, used for CRC identification purposes */ 40 | #define CHDSTREAM_TRACK_PRIMARY (-3) 41 | 42 | chdstream_t *chdstream_open(const char *path, int32_t track); 43 | 44 | void chdstream_close(chdstream_t *stream); 45 | 46 | ssize_t chdstream_read(chdstream_t *stream, void *data, size_t bytes); 47 | 48 | int chdstream_getc(chdstream_t *stream); 49 | 50 | char *chdstream_gets(chdstream_t *stream, char *buffer, size_t len); 51 | 52 | uint64_t chdstream_tell(chdstream_t *stream); 53 | 54 | void chdstream_rewind(chdstream_t *stream); 55 | 56 | int64_t chdstream_seek(chdstream_t *stream, int64_t offset, int whence); 57 | 58 | ssize_t chdstream_get_size(chdstream_t *stream); 59 | 60 | RETRO_END_DECLS 61 | 62 | #endif 63 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/streams/file_stream_transforms.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (file_stream_transforms.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef __LIBRETRO_SDK_FILE_STREAM_TRANSFORMS_H 24 | #define __LIBRETRO_SDK_FILE_STREAM_TRANSFORMS_H 25 | 26 | #include 27 | #include 28 | #include 29 | #include 30 | 31 | RETRO_BEGIN_DECLS 32 | 33 | #ifndef SKIP_STDIO_REDEFINES 34 | 35 | #define FILE RFILE 36 | 37 | #undef fopen 38 | #undef fclose 39 | #undef ftell 40 | #undef fseek 41 | #undef fread 42 | #undef fgets 43 | #undef fgetc 44 | #undef fwrite 45 | #undef fputc 46 | #undef fflush 47 | #undef fprintf 48 | #undef ferror 49 | #undef feof 50 | #undef fscanf 51 | 52 | #define fopen rfopen 53 | #define fclose rfclose 54 | #define ftell rftell 55 | #define fseek rfseek 56 | #define fread rfread 57 | #define fgets rfgets 58 | #define fgetc rfgetc 59 | #define fwrite rfwrite 60 | #define fputc rfputc 61 | #define fflush rfflush 62 | #define fprintf rfprintf 63 | #define ferror rferror 64 | #define feof rfeof 65 | #define fscanf rfscanf 66 | 67 | #endif 68 | 69 | RFILE* rfopen(const char *path, const char *mode); 70 | 71 | int rfclose(RFILE* stream); 72 | 73 | int64_t rftell(RFILE* stream); 74 | 75 | int64_t rfseek(RFILE* stream, int64_t offset, int origin); 76 | 77 | int64_t rfread(void* buffer, 78 | size_t elem_size, size_t elem_count, RFILE* stream); 79 | 80 | char *rfgets(char *buffer, int maxCount, RFILE* stream); 81 | 82 | int rfgetc(RFILE* stream); 83 | 84 | int64_t rfwrite(void const* buffer, 85 | size_t elem_size, size_t elem_count, RFILE* stream); 86 | 87 | int rfputc(int character, RFILE * stream); 88 | 89 | int64_t rfflush(RFILE * stream); 90 | 91 | int rfprintf(RFILE * stream, const char * format, ...); 92 | 93 | int rferror(RFILE* stream); 94 | 95 | int rfeof(RFILE* stream); 96 | 97 | int rfscanf(RFILE * stream, const char * format, ...); 98 | 99 | RETRO_END_DECLS 100 | 101 | #endif 102 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/streams/memory_stream.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (memory_stream.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef _LIBRETRO_SDK_FILE_MEMORY_STREAM_H 24 | #define _LIBRETRO_SDK_FILE_MEMORY_STREAM_H 25 | 26 | #include 27 | #include 28 | 29 | #include 30 | 31 | RETRO_BEGIN_DECLS 32 | 33 | typedef struct memstream memstream_t; 34 | 35 | memstream_t *memstream_open(unsigned writing); 36 | 37 | void memstream_close(memstream_t *stream); 38 | 39 | uint64_t memstream_read(memstream_t *stream, void *data, uint64_t bytes); 40 | 41 | uint64_t memstream_write(memstream_t *stream, const void *data, uint64_t bytes); 42 | 43 | int memstream_getc(memstream_t *stream); 44 | 45 | void memstream_putc(memstream_t *stream, int c); 46 | 47 | char *memstream_gets(memstream_t *stream, char *buffer, size_t len); 48 | 49 | uint64_t memstream_pos(memstream_t *stream); 50 | 51 | void memstream_rewind(memstream_t *stream); 52 | 53 | int64_t memstream_seek(memstream_t *stream, int64_t offset, int whence); 54 | 55 | void memstream_set_buffer(uint8_t *buffer, uint64_t size); 56 | 57 | uint64_t memstream_get_last_size(void); 58 | 59 | RETRO_END_DECLS 60 | 61 | #endif 62 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/streams/stdin_stream.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (stdin_stream.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef LIBRETRO_SDK_STDIN_STREAM_H__ 24 | #define LIBRETRO_SDK_STDIN_STREAM_H__ 25 | 26 | #include 27 | #include 28 | 29 | #include 30 | 31 | #include 32 | 33 | RETRO_BEGIN_DECLS 34 | 35 | size_t read_stdin(char *buf, size_t size); 36 | 37 | RETRO_END_DECLS 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/include/vfs/vfs_implementation_cdrom.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2019 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (vfs_implementation_cdrom.h). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #ifndef __LIBRETRO_SDK_VFS_IMPLEMENTATION_CDROM_H 24 | #define __LIBRETRO_SDK_VFS_IMPLEMENTATION_CDROM_H 25 | 26 | #include 27 | #include 28 | 29 | RETRO_BEGIN_DECLS 30 | 31 | int64_t retro_vfs_file_seek_cdrom(libretro_vfs_implementation_file *stream, int64_t offset, int whence); 32 | 33 | void retro_vfs_file_open_cdrom( 34 | libretro_vfs_implementation_file *stream, 35 | const char *path, unsigned mode, unsigned hints); 36 | 37 | int retro_vfs_file_close_cdrom(libretro_vfs_implementation_file *stream); 38 | 39 | int64_t retro_vfs_file_tell_cdrom(libretro_vfs_implementation_file *stream); 40 | 41 | int64_t retro_vfs_file_read_cdrom(libretro_vfs_implementation_file *stream, 42 | void *s, uint64_t len); 43 | 44 | int retro_vfs_file_error_cdrom(libretro_vfs_implementation_file *stream); 45 | 46 | const cdrom_toc_t* retro_vfs_file_get_cdrom_toc(void); 47 | 48 | const vfs_cdrom_t* retro_vfs_file_get_cdrom_position(const libretro_vfs_implementation_file *stream); 49 | 50 | RETRO_END_DECLS 51 | 52 | #endif 53 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-common/streams/trans_stream_pipe.c: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2010-2018 The RetroArch team 2 | * 3 | * --------------------------------------------------------------------------------------- 4 | * The following license statement only applies to this file (trans_stream_pipe.c). 5 | * --------------------------------------------------------------------------------------- 6 | * 7 | * Permission is hereby granted, free of charge, 8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), 9 | * to deal in the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | 23 | #include 24 | #include 25 | 26 | #include 27 | 28 | struct pipe_trans_stream 29 | { 30 | const uint8_t *in; 31 | uint8_t *out; 32 | uint32_t in_size, out_size; 33 | }; 34 | 35 | static void *pipe_stream_new(void) 36 | { 37 | return (struct pipe_trans_stream*)calloc(1, sizeof(struct pipe_trans_stream)); 38 | } 39 | 40 | static void pipe_stream_free(void *data) 41 | { 42 | free(data); 43 | } 44 | 45 | static void pipe_set_in(void *data, const uint8_t *in, uint32_t in_size) 46 | { 47 | struct pipe_trans_stream *p = (struct pipe_trans_stream *) data; 48 | p->in = in; 49 | p->in_size = in_size; 50 | } 51 | 52 | static void pipe_set_out(void *data, uint8_t *out, uint32_t out_size) 53 | { 54 | struct pipe_trans_stream *p = (struct pipe_trans_stream *) data; 55 | p->out = out; 56 | p->out_size = out_size; 57 | } 58 | 59 | static bool pipe_trans( 60 | void *data, bool flush, 61 | uint32_t *rd, uint32_t *wn, 62 | enum trans_stream_error *error) 63 | { 64 | struct pipe_trans_stream *p = (struct pipe_trans_stream *) data; 65 | 66 | if (p->out_size < p->in_size) 67 | { 68 | memcpy(p->out, p->in, p->out_size); 69 | *rd = *wn = p->out_size; 70 | p->in += p->out_size; 71 | p->out += p->out_size; 72 | *error = TRANS_STREAM_ERROR_BUFFER_FULL; 73 | return false; 74 | } 75 | else 76 | { 77 | memcpy(p->out, p->in, p->in_size); 78 | *rd = *wn = p->in_size; 79 | p->in += p->in_size; 80 | p->out += p->in_size; 81 | *error = TRANS_STREAM_ERROR_NONE; 82 | return true; 83 | } 84 | } 85 | 86 | const struct trans_stream_backend pipe_backend = { 87 | "pipe", 88 | &pipe_backend, 89 | pipe_stream_new, 90 | pipe_stream_free, 91 | NULL, 92 | pipe_set_in, 93 | pipe_set_out, 94 | pipe_trans 95 | }; 96 | -------------------------------------------------------------------------------- /src/LIBRETRO/libretro-file.h: -------------------------------------------------------------------------------- 1 | #include "file-op.h" 2 | 3 | OSD_FILE *osd_file_mem(char *mem, size_t size, int is_writeable); 4 | int osd_file_did_overflow(OSD_FILE * fp); 5 | void osd_fcloseall(); 6 | -------------------------------------------------------------------------------- /src/LIBRETRO/main.c: -------------------------------------------------------------------------------- 1 | /************************************************************************/ 2 | /* */ 3 | /* QUASI88 */ 4 | /* */ 5 | /************************************************************************/ 6 | 7 | #include 8 | #include 9 | 10 | #include "quasi88.h" 11 | #include "device.h" 12 | 13 | #include "getconf.h" /* config_init */ 14 | #include "suspend.h" /* stateload_system */ 15 | #include "menu.h" /* menu_about_osd_msg */ 16 | 17 | 18 | /*********************************************************************** 19 | * Main entry/exit point (main is stubbed because we enter from libretro.c) 20 | ************************************************************************/ 21 | static void finish(void); 22 | 23 | /* Called when quasi88_exit() is called */ 24 | static void finish(void) 25 | { 26 | config_exit(); 27 | } 28 | 29 | /*********************************************************************** 30 | * Savestates (more stubs) 31 | ************************************************************************/ 32 | 33 | int stateload_system(void) 34 | { 35 | return TRUE; 36 | } 37 | int statesave_system(void) 38 | { 39 | return TRUE; 40 | } 41 | 42 | /*********************************************************************** 43 | * System-specific message displayed on menu info tab 44 | ************************************************************************/ 45 | 46 | int menu_about_osd_msg(int req_japanese, int *result_code, const char *message[]) 47 | { 48 | return FALSE; 49 | } 50 | -------------------------------------------------------------------------------- /src/MINI/config.h: -------------------------------------------------------------------------------- 1 | #ifndef CONFIG_H_INCLUDED 2 | #define CONFIG_H_INCLUDED 3 | 4 | 5 | /*----------------------------------------------------------------------*/ 6 | /* システム固有の定義 */ 7 | /*----------------------------------------------------------------------*/ 8 | 9 | /* システム固有のインクルードファイル */ 10 | /* #include */ 11 | 12 | 13 | /* このシステム専用の QUASI88 のための識別用 (必要なら) */ 14 | 15 | #ifndef QUASI88_MINI 16 | #define QUASI88_MINI 17 | #endif 18 | 19 | 20 | 21 | /* エンディアンネス。これを定義しなければ、ビッグエンディアンになる */ 22 | 23 | #define LSB_FIRST 24 | 25 | 26 | 27 | /* メニューのタイトル/バージョン表示にて追加で表示する言葉 (任意の文字列) */ 28 | 29 | #define Q_COMMENT "MINI port" 30 | 31 | 32 | 33 | /* 画面の bpp の定義。最低でもどれか一つは定義しなくてはならない */ 34 | 35 | #define SUPPORT_8BPP 36 | #define SUPPORT_16BPP 37 | #define SUPPORT_32BPP 38 | 39 | 40 | 41 | /* インラインキーワードを定義。インライン使用不可なら、このままでよい */ 42 | #ifndef INLINE 43 | #define INLINE static 44 | #endif 45 | 46 | 47 | 48 | #if 0 49 | 50 | /* サウンド出力に対応する場合 (MAMEベース) */ 51 | #define USE_SOUND 52 | 53 | /* さらに、 fmgen にも対応する場合 */ 54 | #define USE_FMGEN 55 | 56 | /* コンパイラによっては、PI(π) と M_PI(π)の定義が必要かもしれない */ 57 | #ifndef PI 58 | #define PI 3.14159265358979323846 59 | #endif 60 | #ifndef M_PI 61 | #define M_PI PI 62 | #endif 63 | 64 | #endif 65 | 66 | #endif /* CONFIG_H_INCLUDED */ 67 | -------------------------------------------------------------------------------- /src/MINI/device.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICE_H_INCLUDED 2 | #define DEVICE_H_INCLUDED 3 | 4 | 5 | /* 6 | * 固有のインクルードファイル 7 | */ 8 | /* #include */ 9 | 10 | 11 | /* 12 | * src/MINI/ 以下でのグローバル変数 13 | */ 14 | /* extern int global_variable; */ 15 | 16 | 17 | 18 | /* 19 | * src/MINI/ 以下でのグローバル変数 (オプション設定可能な変数) 20 | */ 21 | /* extern int global_options; */ 22 | 23 | 24 | 25 | /* 26 | * src/MINI/ 以下でのグローバル関数 27 | */ 28 | /* int mini_init(void); */ 29 | /* int mini_exit(void); */ 30 | 31 | #endif /* DEVICE_H_INCLUDED */ 32 | -------------------------------------------------------------------------------- /src/MINI/event.c: -------------------------------------------------------------------------------- 1 | /*********************************************************************** 2 | * イベント処理 (システム依存) 3 | * 4 | * 詳細は、 event.h 参照 5 | ************************************************************************/ 6 | 7 | #include "quasi88.h" 8 | #include "device.h" 9 | 10 | #include "event.h" 11 | #include "keyboard.h" 12 | 13 | 14 | 15 | 16 | 17 | 18 | /****************************************************************************** 19 | * イベントハンドリング 20 | * 21 | * 1/60毎に呼び出される。 22 | *****************************************************************************/ 23 | 24 | /* 25 | * これは 起動時に1回だけ呼ばれる 26 | */ 27 | void event_init(void) 28 | { 29 | } 30 | 31 | 32 | 33 | /* 34 | * 約 1/60 毎に呼ばれる 35 | */ 36 | void event_update(void) 37 | { 38 | } 39 | 40 | /* 41 | * これは 終了時に1回だけ呼ばれる 42 | */ 43 | void event_exit(void) 44 | { 45 | } 46 | 47 | 48 | 49 | 50 | /*********************************************************************** 51 | * 現在のマウス座標取得関数 52 | * 53 | ************************************************************************/ 54 | 55 | void event_get_mouse_pos(int *x, int *y) 56 | { 57 | *x = 0; 58 | *y = 0; 59 | } 60 | 61 | 62 | /****************************************************************************** 63 | * ソフトウェア NumLock 有効/無効 64 | * 65 | *****************************************************************************/ 66 | 67 | int event_numlock_on (void) 68 | { 69 | return FALSE; 70 | } 71 | void event_numlock_off(void) 72 | { 73 | } 74 | 75 | 76 | 77 | /****************************************************************************** 78 | * エミュレート/メニュー/ポーズ/モニターモード の 開始時の処理 79 | * 80 | *****************************************************************************/ 81 | 82 | void event_switch(void) 83 | { 84 | } 85 | 86 | 87 | 88 | /****************************************************************************** 89 | * ジョイスティック 90 | * 91 | *****************************************************************************/ 92 | 93 | int event_get_joystick_num(void) 94 | { 95 | return 0; 96 | } 97 | -------------------------------------------------------------------------------- /src/MINI/wait.c: -------------------------------------------------------------------------------- 1 | /*********************************************************************** 2 | * ウエイト調整処理 (システム依存) 3 | * 4 | * 詳細は、 wait.h 参照 5 | ************************************************************************/ 6 | 7 | #include "quasi88.h" 8 | #include "device.h" 9 | 10 | #include "wait.h" 11 | 12 | 13 | 14 | /**************************************************************************** 15 | * ウェイト調整処理の初期化/終了 16 | *****************************************************************************/ 17 | int wait_vsync_init(void) 18 | { 19 | return TRUE; 20 | } 21 | 22 | void wait_vsync_exit(void) 23 | { 24 | } 25 | 26 | 27 | 28 | /**************************************************************************** 29 | * ウェイト調整処理の設定 30 | *****************************************************************************/ 31 | void wait_vsync_setup(long vsync_cycle_us, int do_sleep) 32 | { 33 | } 34 | 35 | 36 | 37 | /**************************************************************************** 38 | * ウェイト調整処理の実行 39 | *****************************************************************************/ 40 | int wait_vsync_update(void) 41 | { 42 | return WAIT_OVER; 43 | } 44 | -------------------------------------------------------------------------------- /src/basic.h: -------------------------------------------------------------------------------- 1 | #ifndef BASIC_H_INCLUDED 2 | #define BASIC_H_INCLUDED 3 | 4 | extern int basic_mode; 5 | 6 | int basic_encode_list(FILE *fp); 7 | int basic_load_intermediate_code(FILE *fp); 8 | int basic_decode_list(FILE *fp); 9 | int basic_save_intermediate_code(FILE *fp); 10 | 11 | #endif /* BASIC_H_INCLUDED */ 12 | -------------------------------------------------------------------------------- /src/debug.c: -------------------------------------------------------------------------------- 1 | /************************************************************************/ 2 | /* デバッグ用 */ 3 | /************************************************************************/ 4 | 5 | /*---------------------------------------------------------------------- 6 | * デバッグ用 ログ 7 | *----------------------------------------------------------------------*/ 8 | int pio_debug = 0; /* 真なら、ファイル出力 */ 9 | int fdc_debug = 0; /* 真なら、ファイル出力 */ 10 | int main_debug = 0; /* 真なら、ファイル出力 */ 11 | int sub_debug = 0; /* 真なら、ファイル出力 */ 12 | 13 | /*---------------------------------------------------------------------- 14 | * 処理時間 区間計測 15 | *----------------------------------------------------------------------*/ 16 | int debug_profiler; /* 17 | bit0: 区間ラップをファイル出力 18 | bit1: 終了時に区間ラップ平均表示 19 | bit2: 1秒毎に描画状況を表示 20 | */ 21 | -------------------------------------------------------------------------------- /src/emu.h: -------------------------------------------------------------------------------- 1 | #ifndef EMU_H_INCLUDED 2 | #define EMU_H_INCLUDED 3 | 4 | 5 | extern int cpu_timing; /* SUB-CPU 駆動方式 */ 6 | extern int select_main_cpu; /* -cpu 0 実行するCPU */ 7 | extern int dual_cpu_count; /* -cpu 1 同時処理STEP数*/ 8 | extern int CPU_1_COUNT; /* その、初期値 */ 9 | extern int cpu_slice_us; /* -cpu 2 処理時分割(us)*/ 10 | 11 | extern int trace_counter; /* TRACE 時のカウンタ */ 12 | 13 | 14 | typedef struct{ /* ブレークポイント制御 */ 15 | short type; 16 | word addr; 17 | } break_t; 18 | 19 | typedef struct{ /* FDC ブレークポイント制御 */ 20 | short type; 21 | short drive; 22 | short track; 23 | short sector; 24 | } break_drive_t; 25 | 26 | enum BPcpu { BP_MAIN, BP_SUB, EndofBPcpu }; 27 | enum BPtype{ BP_NONE, BP_PC, BP_READ, BP_WRITE, BP_IN, BP_OUT, BP_DIAG, 28 | EndofBPtype }; 29 | 30 | #define NR_BP (10) /* ブレークポイントの数 */ 31 | #define BP_NUM_FOR_SYSTEM (9) /* システムが使うBPの番号 */ 32 | extern break_t break_point[2][NR_BP]; 33 | extern break_drive_t break_point_fdc[NR_BP]; 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | /**** 関数 ****/ 44 | 45 | void emu_breakpoint_init( void ); 46 | void emu_reset( void ); 47 | void set_emu_exec_mode( int mode ); 48 | 49 | void emu_init(void); 50 | void emu_main(void); 51 | 52 | 53 | #endif /* EMU_H_INCLUDED */ 54 | -------------------------------------------------------------------------------- /src/fdc.h: -------------------------------------------------------------------------------- 1 | #ifndef FDC_H_INCLUDED 2 | #define FDC_H_INCLUDED 3 | 4 | 5 | extern int fdc_debug_mode; /* FDC デバッグモードのフラグ */ 6 | extern int disk_exchange; /* ディスク疑似入れ替えフラグ */ 7 | extern int disk_ex_drv; /* ディスク疑似入れ替えドライブ */ 8 | 9 | extern int FDC_flag; /* FDC 割り込み信号 */ 10 | extern int fdc_wait; /* FDC の ウエイト */ 11 | 12 | extern int fdc_ignore_readonly; /* 読込専用時、ライトを無視する */ 13 | 14 | 15 | 16 | int fdc_ctrl( int interval ); 17 | 18 | void fdc_write( byte data ); 19 | byte fdc_read( void ); 20 | byte fdc_status( void ); 21 | void fdc_TC( void ); 22 | 23 | 24 | void pc88fdc_break_point(void); 25 | 26 | #endif /* FDC_H_INCLUDED */ 27 | -------------------------------------------------------------------------------- /src/fmgen/00README.TXT: -------------------------------------------------------------------------------- 1 | 2 | ※ このディレクトリ以下には、fmgen008 のソースが含まれています。 3 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 4 | 5 | QUASI88 のコンパイル時に fmgen を有効にしておくと、このディレクトリ 6 | 以下のファイルが組み込まれ、fmgen008 の FM音源ジェネレータを使用する 7 | ことができるようになります。 8 | 9 | なお、この場合コンパイルしたバイナリは、fmgen008 のライセンスが適用 10 | されますのでご注意ください。このディレクトリ以下のソースファイルの再配布等に 11 | ついても同様です。 12 | 13 | 14 | fmgen008 のライセンスについては、このディレクトリにある 15 | 16 | readme.txt 17 | 18 | を参照してください。 19 | 20 | 21 | (*) fmgen は cisc氏が著作権を有する OPN/OPM の FM音源ジェネレータ 22 | です。 23 | 24 | ------------------------------------------------------------------------------- 25 | fmgen008 を組み込むにあたり、以下のファイルに変更を加えました。 26 | 27 | 全てのファイル 文字コード/改行コードの変更 28 | 29 | diag.h - 30 | file.cpp 未使用につき、削除 31 | file.h 未使用につき、削除 32 | fmgen.cpp 最新版に置き換え 33 | fmgen.h 出力を16bitに変更 (FM_SAMPLETYPE) 34 | fmgeninl.h 最新版に置き換え 35 | fmtimer.cpp - 36 | fmtimer.h - 37 | headers.h Windows依存部を修正 38 | misc.h - 39 | opm.cpp 未使用につき、削除 40 | opm.h 未使用につき、削除 41 | opna.cpp Windows依存部を修正 42 | opna.h - 43 | psg.cpp - 44 | psg.h 出力を16bitに変更 (PSG_SAMPLETYPE) 45 | readme.txt - 46 | types.h QUASI88用に修正 47 | 48 | ------------------------------------------------------------------------------- 49 | QUASI88 は、 MAME のサウンドエンジンを介して、 fmgen を使用しています。 50 | -------------------------------------------------------------------------------- /src/fmgen/diag.h: -------------------------------------------------------------------------------- 1 | #ifndef incl_diag_h 2 | #define incl_diag_h 3 | 4 | #define LOG0(m) void (0) 5 | #define LOG1(m,a) void (0) 6 | #define LOG2(m,a,b) void (0) 7 | #define LOG3(m,a,b,c) void (0) 8 | #define LOG4(m,a,b,c,d) void (0) 9 | #define LOG5(m,a,b,c,d,e) void (0) 10 | #define LOG6(m,a,b,c,d,e,f) void (0) 11 | #define LOG7(m,a,b,c,d,e,f,g) void (0) 12 | #define LOG8(m,a,b,c,d,e,f,g,h) void (0) 13 | #define LOG9(m,a,b,c,d,e,f,g,h,i) void (0) 14 | 15 | #endif // incl_diag_h 16 | -------------------------------------------------------------------------------- /src/fmgen/fmtimer.h: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------------------------- 2 | // FM sound generator common timer module 3 | // Copyright (C) cisc 1998, 2000. 4 | // --------------------------------------------------------------------------- 5 | // $Id: fmtimer.h,v 1.2 2003/04/22 13:12:53 cisc Exp $ 6 | 7 | #ifndef FM_TIMER_H 8 | #define FM_TIMER_H 9 | 10 | // --------------------------------------------------------------------------- 11 | 12 | namespace FM 13 | { 14 | class Timer 15 | { 16 | public: 17 | void Reset(); 18 | bool Count(int32 us); 19 | int32 GetNextEvent(); 20 | 21 | protected: 22 | virtual void SetStatus(uint bit) = 0; 23 | virtual void ResetStatus(uint bit) = 0; 24 | 25 | void SetTimerBase(uint clock); 26 | void SetTimerA(uint addr, uint data); 27 | void SetTimerB(uint data); 28 | void SetTimerControl(uint data); 29 | 30 | uint8 status; 31 | uint8 regtc; 32 | 33 | private: 34 | virtual void TimerA() {} 35 | uint8 regta[2]; 36 | 37 | int32 timera, timera_count; 38 | int32 timerb, timerb_count; 39 | int32 timer_step; 40 | }; 41 | 42 | // --------------------------------------------------------------------------- 43 | // 初期化 44 | // 45 | inline void Timer::Reset() 46 | { 47 | timera_count = 0; 48 | timerb_count = 0; 49 | } 50 | 51 | } // namespace FM 52 | 53 | #endif // FM_TIMER_H 54 | -------------------------------------------------------------------------------- /src/fmgen/headers.h: -------------------------------------------------------------------------------- 1 | #ifndef WIN_HEADERS_H 2 | #define WIN_HEADERS_H 3 | 4 | #define STRICT 5 | #define WIN32_LEAN_AND_MEAN 6 | 7 | #include "config.h" // for QUASI88 8 | //#include // comment out for QUASI88 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include "types.h" // for QUASI88 15 | 16 | #ifdef _MSC_VER 17 | #undef max 18 | #define max _MAX 19 | #undef min 20 | #define min _MIN 21 | #endif 22 | 23 | #endif // WIN_HEADERS_H 24 | -------------------------------------------------------------------------------- /src/fmgen/misc.h: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------------------------- 2 | // misc.h 3 | // Copyright (C) cisc 1998, 1999. 4 | // --------------------------------------------------------------------------- 5 | // $Id: misc.h,v 1.5 2002/05/31 09:45:20 cisc Exp $ 6 | 7 | #ifndef MISC_H 8 | #define MISC_H 9 | 10 | inline int Max(int x, int y) { return (x > y) ? x : y; } 11 | inline int Min(int x, int y) { return (x < y) ? x : y; } 12 | inline int Abs(int x) { return x >= 0 ? x : -x; } 13 | 14 | inline int Limit(int v, int max, int min) 15 | { 16 | return v > max ? max : (v < min ? min : v); 17 | } 18 | 19 | inline unsigned int BSwap(unsigned int a) 20 | { 21 | return (a >> 24) | ((a >> 8) & 0xff00) | ((a << 8) & 0xff0000) | (a << 24); 22 | } 23 | 24 | inline unsigned int NtoBCD(unsigned int a) 25 | { 26 | return ((a / 10) << 4) + (a % 10); 27 | } 28 | 29 | inline unsigned int BCDtoN(unsigned int v) 30 | { 31 | return (v >> 4) * 10 + (v & 15); 32 | } 33 | 34 | 35 | template 36 | inline T gcd(T x, T y) 37 | { 38 | T t; 39 | while (y) 40 | { 41 | t = x % y; 42 | x = y; 43 | y = t; 44 | } 45 | return x; 46 | } 47 | 48 | 49 | template 50 | T bessel0(T x) 51 | { 52 | T p, r, s; 53 | 54 | r = 1.0; 55 | s = 1.0; 56 | p = (x / 2.0) / s; 57 | 58 | while (p > 1.0E-10) 59 | { 60 | r += p * p; 61 | s += 1.0; 62 | p *= (x / 2.0) / s; 63 | } 64 | return r; 65 | } 66 | 67 | 68 | #endif // MISC_H 69 | 70 | -------------------------------------------------------------------------------- /src/fmgen/psg.h: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------------------------- 2 | // PSG-like sound generator 3 | // Copyright (C) cisc 1997, 1999. 4 | // --------------------------------------------------------------------------- 5 | // $Id: psg.h,v 1.8 2003/04/22 13:12:53 cisc Exp $ 6 | 7 | #ifndef PSG_H 8 | #define PSG_H 9 | 10 | //#define PSG_SAMPLETYPE int32 // int32 or int16 11 | // forQUASI88 12 | #define PSG_SAMPLETYPE int16 13 | 14 | // --------------------------------------------------------------------------- 15 | // class PSG 16 | // PSG に良く似た音を生成する音源ユニット 17 | // 18 | // interface: 19 | // bool SetClock(uint clock, uint rate) 20 | // 初期化.このクラスを使用する前にかならず呼んでおくこと. 21 | // PSG のクロックや PCM レートを設定する 22 | // 23 | // clock: PSG の動作クロック 24 | // rate: 生成する PCM のレート 25 | // retval 初期化に成功すれば true 26 | // 27 | // void Mix(Sample* dest, int nsamples) 28 | // PCM を nsamples 分合成し, dest で始まる配列に加える(加算する) 29 | // あくまで加算なので,最初に配列をゼロクリアする必要がある 30 | // 31 | // void Reset() 32 | // リセットする 33 | // 34 | // void SetReg(uint reg, uint8 data) 35 | // レジスタ reg に data を書き込む 36 | // 37 | // uint GetReg(uint reg) 38 | // レジスタ reg の内容を読み出す 39 | // 40 | // void SetVolume(int db) 41 | // 各音源の音量を調節する 42 | // 単位は約 1/2 dB 43 | // 44 | class PSG 45 | { 46 | public: 47 | typedef PSG_SAMPLETYPE Sample; 48 | 49 | enum 50 | { 51 | noisetablesize = 1 << 11, // ←メモリ使用量を減らしたいなら減らして 52 | toneshift = 24, 53 | envshift = 22, 54 | noiseshift = 14, 55 | oversampling = 2, // ← 音質より速度が優先なら減らすといいかも 56 | }; 57 | 58 | public: 59 | PSG(); 60 | ~PSG(); 61 | 62 | void Mix(Sample* dest, int nsamples); 63 | void SetClock(int clock, int rate); 64 | 65 | void SetVolume(int vol); 66 | void SetChannelMask(int c); 67 | 68 | void Reset(); 69 | void SetReg(uint regnum, uint8 data); 70 | uint GetReg(uint regnum) { return reg[regnum & 0x0f]; } 71 | 72 | protected: 73 | void MakeNoiseTable(); 74 | void MakeEnvelopTable(); 75 | static void StoreSample(Sample& dest, int32 data); 76 | 77 | uint8 reg[16]; 78 | 79 | const uint* envelop; 80 | uint olevel[3]; 81 | uint32 scount[3], speriod[3]; 82 | uint32 ecount, eperiod; 83 | uint32 ncount, nperiod; 84 | uint32 tperiodbase; 85 | uint32 eperiodbase; 86 | uint32 nperiodbase; 87 | int volume; 88 | int mask; 89 | 90 | static uint enveloptable[16][64]; 91 | static uint noisetable[noisetablesize]; 92 | static int EmitTable[32]; 93 | }; 94 | 95 | #endif // PSG_H 96 | -------------------------------------------------------------------------------- /src/fmgen/readme.txt: -------------------------------------------------------------------------------- 1 | ------------------------------------------------------------------------------ 2 | FM Sound Generator with OPN/OPM interface 3 | Copyright (C) by cisc 1998, 2003. 4 | ------------------------------------------------------------------------------ 5 | 6 | 【概要】 7 | C++ による FM/PSG 音源の実装です。 8 | 9 | AY8910, YM2203, YM2151, YM2608, YM2610 相当のインターフェースも 10 | 実装してあります。 11 | 12 | 13 | 【使い方】 14 | (TODO:中身を書く) 15 | 16 | 【注意】 17 | 以前のバージョンから幾分手を加えました。インターフェースは 18 | いじっていないつもりですが、何かしらのバグが隠れているかもしれません。 19 | 20 | YM2610 は動作チェックすらしていません。 21 | 22 | 線形補完モード(interpolation)は廃止されました。 23 | Init() の引数仕様は変わっていませんが、interpolation = true にしても 24 | 動作は変わりません。 25 | 26 | OPNA::Init/SetRate で与えるチップクロックの値の仕様が 27 | 以前の M88 に搭載されていたバージョンと異なっています. 28 | 29 | 30 | 【著作権、免責規定】 31 | 32 | ・本ソースコードは作者(cisc@retropc.net) が著作権を所有しています。 33 | 34 | ・本ソースコードはあるがままに提供されるものであり, 35 | 暗黙及び明示的な保証を一切含みません. 36 | 37 | ・本ソースコードを利用したこと,利用しなかったこと, 38 | 利用できなかったことに関して生じたあるいは生じると予測される 39 | 損害について,作者は一切責任を負いません. 40 | 41 | ・本ソースコードは,以下の制限を満たす限り自由に改変・組み込み・ 42 | 配布・利用することができます. 43 | 44 | 1. 本ソフトの由来(作者, 著作権)を明記すること. 45 | 2. 配布する際にはフリーソフトとすること. 46 | 3. 改変したソースコードを配布する際は改変内容を明示すること. 47 | 4. ソースコードを配布する際にはこのテキストを一切改変せずに 48 | そのまま添付すること. 49 | 50 | ・公開の際に作者への連絡を頂ければ幸いです. 51 | 52 | ・商用ソフト(シェアウェア含む) に本ソースコードの一部,または 53 | 全部を組み込む際には,事前に作者の合意を得る必要があります. 54 | 55 | 56 | 【変更点】 57 | 008 030902 ・出力サンプリングレートの設定を、チップ元来の合成サンプ 58 | リングレートと異なる設定にするとエンベロープがおかしく 59 | なる問題を修正。 60 | 61 | 007a 030608 ・領域外アクセスがあったのを修正 (Thanks to PI.様) 62 | 63 | 007 030607 ・再現性の向上 64 | ・OPN: SSG-EG のサポート 65 | ・線形補完の廃止 66 | ・asm 版の廃止 67 | ・マルチスレッドフリーになった? 68 | 69 | 006 010330 ・再現性に関していくらか手直し(正弦波,出力タイミング等) 70 | 71 | 005 010317 ・OPN: FM 音源の合成周波数が出力周波数よりも低いときに, 72 | 補完を使うと音痴になる/音がまともに出なくなる問題を修正. 73 | ・FM: 補完を使わない時の精度を上げてみる. 74 | 問題が起きたら fmgeninl.h の FM_RATIOBITS を 8 に戻すと吉. 75 | 76 | 004a 010311 ・OPM: ノイズをそこそこ聞けるレベル(?)まで修正. 77 | ・OPNA/OPM: FM_USE_CALC2 廃止. 78 | ・デグレ修正, なんのために cvs で管理しているんだか…(T-T 79 | OPNB: ADPCMB ROM マスク作成ミス. 80 | OPNB: ADPCMA ステータスフラグ関係の挙動修復. 81 | OPM: LFO パラメータの初期化を忘れていたのを修正. 82 | 83 | 003 010124 ・OPNA/OPM: 実際には補完前の値を出力していたバグを修正. 84 | 85 | 002 010123 ・合成周波数が出力周波数より低いときでも補間が効くようにする. 86 | ・OPN: 補間時にプリスケーラの設定を変更したときに音化けする 87 | バグを修正. 88 | ・OPNA/B: LFO が効かないバグを修正. 89 | 90 | 001 000928 ・初期バージョン 91 | 92 | 93 | $Id: readme.txt,v 1.1 2003/06/07 08:25:20 cisc Exp $ 94 | -------------------------------------------------------------------------------- /src/fmgen/types.h: -------------------------------------------------------------------------------- 1 | #if !defined(win32_types_h) 2 | #define win32_types_h 3 | 4 | // 固定長型とか 5 | typedef unsigned char uchar; 6 | typedef unsigned short ushort; 7 | typedef unsigned int uint; 8 | typedef unsigned long ulong; 9 | 10 | typedef unsigned char uint8; 11 | typedef unsigned short uint16; 12 | typedef unsigned int uint32; 13 | 14 | typedef signed char sint8; 15 | typedef signed short sint16; 16 | typedef signed int sint32; 17 | 18 | typedef signed char int8; 19 | typedef signed short int16; 20 | typedef signed int int32; 21 | 22 | // forQUASI88 23 | #define __stdcall 24 | 25 | // forQUASI88 ... MPW not support bool ??? 26 | #if defined(macintosh) 27 | #if defined(__SC__) || defined(__MRC__) 28 | 29 | typedef int bool; 30 | //enum{ false, true }; 31 | 32 | #endif 33 | #endif 34 | 35 | #endif // win32_types_h 36 | -------------------------------------------------------------------------------- /src/image.h: -------------------------------------------------------------------------------- 1 | #ifndef IMAGE_H_INCLUDED 2 | #define IMAGE_H_INCLUDED 3 | 4 | 5 | enum { 6 | D88_SUCCESS, /* 正常終了 */ 7 | D88_NO_IMAGE, /* 指定番号のイメージ無し */ 8 | D88_BAD_IMAGE, /* イメージ異常(ヘッダ破損、サイズ不足) */ 9 | D88_MANY_IMAGE, /* イメージ数オーバー */ 10 | D88_ERR_SEEK, /* シークエラー */ 11 | D88_ERR_WRITE, /* ライトエラー */ 12 | D88_ERR_READ, /* リードエラー */ 13 | D88_ERR /* */ 14 | }; 15 | 16 | int d88_read_header( OSD_FILE *fp, long offset, unsigned char header[32] ); 17 | int d88_append_blank( OSD_FILE *fp, int drv ); 18 | int d88_write_protect(OSD_FILE *fp, int drv, int img, const char *protect); 19 | int d88_write_name( OSD_FILE *fp, int drv, int img, const char *name ); 20 | int d88_write_format( OSD_FILE *fp, int drv, int img ); 21 | int d88_write_unformat( OSD_FILE *fp, int drv, int img ); 22 | 23 | 24 | #define READ_SIZE_IN_HEADER( header ) \ 25 | (long)header[DISK_SIZE ] + ((long)header[DISK_SIZE+1]<<8) + \ 26 | ((long)header[DISK_SIZE+2]<<16) + ((long)header[DISK_SIZE+3]<<24) 27 | 28 | 29 | #endif /* IMAGE_H_INCLUDED */ 30 | -------------------------------------------------------------------------------- /src/initval.h: -------------------------------------------------------------------------------- 1 | #ifndef INITVAL_H_INCLUDED 2 | #define INITVAL_H_INCLUDED 3 | 4 | 5 | /*----------------------------------------------------------------------*/ 6 | /* 定数 */ 7 | /*----------------------------------------------------------------------*/ 8 | #define CONST_4MHZ_CLOCK (3.9936) 9 | #define CONST_8MHZ_CLOCK (CONST_4MHZ_CLOCK*2.0) 10 | #define CONST_VSYNC_FREQ (55.4) 11 | 12 | 13 | /*----------------------------------------------------------------------*/ 14 | /* 起動時の初期設定値 */ 15 | /*----------------------------------------------------------------------*/ 16 | 17 | enum BasicMode { BASIC_AUTO=-1, BASIC_N, BASIC_V1S, BASIC_V1H, BASIC_V2 }; 18 | enum CpuClock { CLOCK_8MHZ, CLOCK_4MHZ }; 19 | enum BootDevice{ BOOT_AUTO =-1, BOOT_DISK, BOOT_ROM }; 20 | enum SoundBoard{ SOUND_I, SOUND_II }; 21 | enum JishoRom { NOT_JISHO, EXIST_JISHO }; 22 | enum MenuLang { MENU_ENGLISH, MENU_JAPAN }; 23 | enum BaudRate { BAUDRATE_75, BAUDRATE_150, BAUDRATE_300, BAUDRATE_600, 24 | BAUDRATE_1200, BAUDRATE_2400, BAUDRATE_4800, BAUDRATE_9600, 25 | BAUDRATE_19200 }; 26 | 27 | 28 | /* DEFAULT_BASIC BASIC モード -1:自動 / 0:N / 1:V1S / 2:V1H / 3:V2 */ 29 | /* DEFAULT_CLOCK CPUクロック -1:自動 / 0:8MHz / 1:4MHz */ 30 | /* DEFAULT_BOOT 起動デバイス -1:自動 / 0:DISK / 1:ROM */ 31 | /* DEFAULT_EXTRAM 拡張RAM 0:なし / 1〜4:あり(カード数) */ 32 | /* DEFAULT_JISHO 辞書ROM 0:なし / 1:あり */ 33 | /* DEFAULT_SOUND サウンドボード 0:搭載 / 1:サウンドボードII搭載 */ 34 | /* DEFAULT_DIPSW ディップスイッチ 16bit値を指定 */ 35 | /* DEFAULT_BAUDRATE ボーレート BADU_RATE_75 〜 BADU_RATE_19200を指定 */ 36 | 37 | /* DEFAULT_VERBOSE -verbose の初期値 */ 38 | /* DEFAULT_FRAMESKIP -frameskip の初期値 */ 39 | /* DEFAULT_CPU -cpu の初期値 */ 40 | 41 | 42 | #define DEFAULT_BASIC ( BASIC_AUTO ) 43 | #define DEFAULT_CLOCK ( CLOCK_4MHZ ) 44 | #define DEFAULT_BOOT ( BOOT_AUTO ) 45 | #define DEFAULT_SOUND ( SOUND_I ) 46 | #define DEFAULT_JISHO ( NOT_JISHO ) 47 | #define DEFAULT_EXTRAM ( 0 ) 48 | #define DEFAULT_DIPSW ( 0x391a ) 49 | #define DEFAULT_BAUDRATE ( BAUDRATE_1200 ) 50 | 51 | #define DEFAULT_VERBOSE (0x00) 52 | #define DEFAULT_FRAMESKIP (1) 53 | #define DEFAULT_CPU (0) 54 | 55 | 56 | /*----------------------------------------------------------------------*/ 57 | /* DEFAULT_CPU_CLOCK_MHZ メイン CPUのクロック double値 [MHz] */ 58 | /* DEFAULT_SOUND_CLOCK_MHZ サウンドチップのクロック double値 [MHz] */ 59 | /* DEFAULT_VSYNC_FREQ_HZ VSYNC 割り込みの周期 int値 [Hz] */ 60 | /* DEFAULT_WAIT_FREQ ウエイト調整用周波数 int値 [Hz] */ 61 | 62 | #define DEFAULT_CPU_CLOCK_MHZ CONST_4MHZ_CLOCK 63 | #define DEFAULT_SOUND_CLOCK_MHZ CONST_4MHZ_CLOCK 64 | #define DEFAULT_VSYNC_FREQ_HZ CONST_VSYNC_FREQ 65 | #define DEFAULT_WAIT_FREQ_HZ CONST_VSYNC_FREQ 66 | 67 | 68 | /*----------------------------------------------------------------------*/ 69 | /* ドライブの数 および ファイル内のイメージの最大数 */ 70 | /* ドライブの数 は 2以外の値は未対応。設定を変えないように!! */ 71 | /*----------------------------------------------------------------------*/ 72 | enum { 73 | DRIVE_1, 74 | DRIVE_2, 75 | NR_DRIVE 76 | }; 77 | #define MAX_NR_IMAGE (32) 78 | 79 | enum { 80 | CLOAD, 81 | CSAVE, 82 | NR_TAPE 83 | }; 84 | 85 | #endif /* INITVAL_H_INCLUDED */ 86 | -------------------------------------------------------------------------------- /src/intr.h: -------------------------------------------------------------------------------- 1 | #ifndef INTR_H_INCLUDED 2 | #define INTR_H_INCLUDED 3 | 4 | 5 | extern int intr_level; /* OUT[E4] 割り込みレベル */ 6 | extern int intr_priority; /* OUT[E4] 割り込み優先度 */ 7 | extern int intr_sio_enable; /* OUT[E6] 割込マスク SIO */ 8 | extern int intr_vsync_enable; /* OUT[E6] 割込マスクVSYNC*/ 9 | extern int intr_rtc_enable; /* OUT[E6] 割込マスク RTC */ 10 | 11 | 12 | 13 | extern double cpu_clock_mhz; /* メイン CPUのクロック [MHz] */ 14 | extern double sound_clock_mhz; /* サウンドチップのクロック [MHz] */ 15 | extern double vsync_freq_hz; /* VSYNC 割り込みの周期 [Hz] */ 16 | 17 | 18 | extern int state_of_cpu; /*メインCPUが処理した命令数 */ 19 | extern int state_of_vsync; /* VSYNC周期のステート数 */ 20 | 21 | extern int wait_rate; /* ウエイト調整 比率 [%] */ 22 | extern int wait_by_sleep; /* ウエイト調整時 sleep する */ 23 | 24 | extern int no_wait; /* ウエイトなし */ 25 | 26 | extern int boost; /* ブースト */ 27 | extern int boost_cnt; /* */ 28 | 29 | 30 | 31 | 32 | extern int ctrl_vrtc; /* 1:垂直帰線中 0: 表示中 */ 33 | 34 | extern int VSYNC_flag; /* 各種割り込み信号フラグ */ 35 | extern int RTC_flag; 36 | extern int SOUND_flag; 37 | extern int RS232C_flag; 38 | 39 | 40 | 41 | 42 | 43 | void interval_work_init_all( void ); 44 | 45 | void interval_work_set_RS232C( int bps, int framesize ); 46 | 47 | void interval_work_set_TIMER_A( void ); 48 | void interval_work_set_TIMER_B( void ); 49 | 50 | void interval_work_set_BDRY( void ); 51 | void interval_work_set_EOS( int length ); 52 | 53 | void change_sound_flags( int port ); 54 | void change_sound_prescaler( int new_prescaler ); 55 | 56 | void boost_change( int new_val ); 57 | 58 | 59 | void main_INT_init( void ); 60 | void main_INT_update( void ); 61 | int main_INT_chk( void ); 62 | 63 | int quasi88_info_vsync_count(void); 64 | 65 | #endif /* INTR_H_INCLUDED */ 66 | -------------------------------------------------------------------------------- /src/memory.h: -------------------------------------------------------------------------------- 1 | #ifndef MEMORY_H_INCLUDED 2 | #define MEMORY_H_INCLUDED 3 | 4 | 5 | extern int set_version; /* バージョン強制変更 '0' 〜 '9' */ 6 | extern int rom_version; /* (変更前の) BASIC ROMバージョン */ 7 | 8 | extern int use_extram; /* 128KB拡張RAMを使う */ 9 | extern int use_jisho_rom; /* 辞書ROMを使う */ 10 | extern int use_built_in_font; /* 内蔵フォントを使う */ 11 | extern int use_pcg; /* PCG-8100サポート */ 12 | extern int font_type; /* フォントの種類 */ 13 | extern int font_loaded; /* ロードしたフォント種 */ 14 | 15 | 16 | extern int memory_wait; /* メモリウェイト有無 */ 17 | 18 | extern char *file_compatrom; /* P88SR emu のROMを使う*/ 19 | 20 | extern int has_kanji_rom; /* 漢字ROMの有無 */ 21 | 22 | extern int linear_ext_ram; /* 拡張RAMを連続させる */ 23 | 24 | 25 | extern byte *main_rom; /* メイン ROM (32KB) */ 26 | extern byte (*main_rom_ext)[0x2000]; /* 拡張 ROM (8KB *4) */ 27 | extern byte *main_rom_n; /* N-BASIC (32KB) */ 28 | extern byte *main_ram; /* メイン RAM (64KB) */ 29 | extern byte *main_high_ram; /* 高速 RAM(の裏) (4KB) */ 30 | extern byte *sub_romram; /* サブ ROM/RAM (32KB) */ 31 | 32 | extern byte (*kanji_rom)[65536][2]; /* 漢字 ROM (128KB*2) */ 33 | 34 | extern byte (*ext_ram)[0x8000]; /* 拡張 RAM (32KB*4〜)*/ 35 | extern byte (*jisho_rom)[0x4000]; /* 辞書 ROM (16KB*32) */ 36 | 37 | extern byte (*main_vram)[4]; /* VRAM[0x4000][4] */ 38 | extern byte *font_rom; /* フォントイメージ */ 39 | extern byte *font_pcg; /* フォントイメージ(PCG)*/ 40 | extern byte *font_mem; /* フォントイメージ(fix)*/ 41 | extern byte *font_mem2; /* フォントイメージ(2nd)*/ 42 | extern byte *font_mem3; /* フォントイメージ(3rd)*/ 43 | 44 | 45 | /* イリーガルな方法でメモリアクセスする */ 46 | #define main_vram4 (bit32 *)main_vram /* VRAM long word accrss*/ 47 | 48 | #define ROM_VERSION main_rom[0x79d7] 49 | 50 | 51 | 52 | extern byte *dummy_rom; /* ダミーROM (32KB) */ 53 | extern byte *dummy_ram; /* ダミーRAM (32KB) */ 54 | extern byte kanji_dummy_rom[16][2]; /* 漢字ダミーROM */ 55 | 56 | 57 | 58 | int memory_allocate( void ); 59 | void memory_free( void ); 60 | 61 | void memory_reset_font( void ); 62 | void memory_set_font( void ); 63 | 64 | int memory_allocate_additional( void ); 65 | 66 | #endif /* MEMORY_H_INCLUDED */ 67 | -------------------------------------------------------------------------------- /src/menu-screen.h: -------------------------------------------------------------------------------- 1 | #ifndef MENU_SCREEN_H_INCLUDED 2 | #define MENU_SCREEN_H_INCLUDED 3 | 4 | 5 | /*-------------------------------------------------------------- 6 | * パレットに設定するカラー 7 | *--------------------------------------------------------------*/ 8 | 9 | #define MENU_COLOR_FOREGROUND (0x000000) 10 | #define MENU_COLOR_BACKGROUND (0xd6d6d6) 11 | #define MENU_COLOR_LIGHT (0xffffff) 12 | #define MENU_COLOR_SHADOW (0x000000) 13 | #define MENU_COLOR_FONT_FG (0x00009c) 14 | #define MENU_COLOR_FONT_BG (0xffffff) 15 | #define MENU_COLOR_SCALE_SLD (0xf0f0f0) 16 | #define MENU_COLOR_SCALE_BAR (0xb0b0b0) 17 | #define MENU_COLOR_SCALE_ACT (0x0000e0) 18 | #define MENU_COLOR_LOGO_FG (0x000000) 19 | #define MENU_COLOR_LOGO_BG (0xd6d6d6) 20 | 21 | 22 | 23 | /*-------------------------------------------------------------- 24 | * 25 | *--------------------------------------------------------------*/ 26 | 27 | extern byte menu_cursor_on[16]; 28 | extern byte menu_cursor_off[16]; 29 | 30 | 31 | 32 | #endif /* MENU_SCREEN_H_INCLUDED */ 33 | -------------------------------------------------------------------------------- /src/menu.h: -------------------------------------------------------------------------------- 1 | #ifndef MENU_H_INCLUDED 2 | #define MENU_H_INCLUDED 3 | 4 | extern int menu_lang; /* メニューの言語 */ 5 | extern int menu_readonly; /* ディスク選択ダイアログは */ 6 | /* 初期状態は ReadOnly ? */ 7 | extern int menu_swapdrv; /* ドライブの表示順序 */ 8 | 9 | 10 | extern int file_coding; /* ファイル名の漢字コード */ 11 | extern int filename_synchronize; /* ファイル名を同調させる */ 12 | 13 | 14 | /* メニューモード */ 15 | 16 | void menu_init(void); 17 | void menu_main(void); 18 | 19 | 20 | 21 | /*********************************************************************** 22 | * メニュー画面で表示する、システム固有のメッセージを取得する関数 23 | * 24 | * int menu_about_osd_msg(int req_japanese, 25 | * int *result_code, 26 | * const char *message[]) 27 | * 28 | * メニュー画面の初期化時に呼び出される。 29 | * 30 | * req_japanese … 真なら、日本語のメッセージ取得を、 31 | * 偽なら、英語(ASCII)メッセージ取得を要求する。 32 | * 33 | * result_code … 日本語のメッセージの場合、漢字コードをセットする。 34 | * EUC なら 1、SJIS なら 2、指定なしなら、-1。 35 | * 英語(ASCII)メッセージなら、不定でよい。 36 | * 37 | * message … メッセージ文字列へのポインタをセットする。 38 | * 39 | * 戻り値 … メッセージがある場合、真を返す。ないなら、偽を返す。 40 | * 偽を返す場合、 code, message は不定でよい。 41 | ************************************************************************/ 42 | int menu_about_osd_msg(int req_japanese, 43 | int *result_code, 44 | const char *message[]); 45 | 46 | 47 | void menu_sound_restart(int output); 48 | /*---------------------------------------------------------------------- 49 | * イベント処理の対処 50 | *----------------------------------------------------------------------*/ 51 | void q8tk_event_key_on(int code); 52 | void q8tk_event_key_off(int code); 53 | void q8tk_event_mouse_on(int code); 54 | void q8tk_event_mouse_off(int code); 55 | void q8tk_event_mouse_moved(int x, int y); 56 | void q8tk_event_quit(void); 57 | 58 | 59 | 60 | 61 | #endif /* MENU_H_INCLUDED */ 62 | -------------------------------------------------------------------------------- /src/monitor.c: -------------------------------------------------------------------------------- 1 | /************************************************************************/ 2 | /* */ 3 | /* モニターモード */ 4 | /* */ 5 | /************************************************************************/ 6 | 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | #include "quasi88.h" 14 | #include "initval.h" 15 | #include "monitor.h" 16 | 17 | #include "pc88cpu.h" 18 | #include "pc88main.h" 19 | #include "pc88sub.h" 20 | #include "crtcdmac.h" 21 | #include "memory.h" 22 | #include "graph.h" 23 | #include "intr.h" 24 | #include "keyboard.h" 25 | #include "pio.h" 26 | #include "soundbd.h" 27 | #include "screen.h" 28 | #include "fdc.h" 29 | 30 | #include "emu.h" 31 | #include "drive.h" 32 | #include "image.h" 33 | #include "file-op.h" 34 | #include "status.h" 35 | #include "menu.h" 36 | #include "pause.h" 37 | #include "snddrv.h" 38 | #include "wait.h" 39 | #include "suspend.h" 40 | #include "snapshot.h" 41 | #include "event.h" 42 | 43 | #include "basic.h" 44 | 45 | 46 | #ifdef USE_GNU_READLINE 47 | #include 48 | #include 49 | #endif 50 | 51 | #ifdef USE_LOCALE 52 | #include 53 | #include 54 | #endif /* USE_LOCALE */ 55 | 56 | 57 | 58 | /************************************************************************/ 59 | /* SIGINT発生時 (Ctrl-C) 、モニターモードへ遷移するように設定 */ 60 | /* 起動時に -debug オプション指定時のみ。未指定時は終了する。 */ 61 | /************************************************************************/ 62 | 63 | int debug_mode = FALSE; /* デバッグ機能(モニター) */ 64 | 65 | char alt_char = 'X'; /* 代替文字 */ 66 | 67 | 68 | 69 | /* モニターモード以外の時に SIGINT(Ctrl-C)を受け取ったらモニターモードに移行 */ 70 | 71 | static void sigint_handler(int dummy) 72 | { 73 | quasi88_monitor(); 74 | signal(SIGINT, sigint_handler); 75 | } 76 | 77 | /* SIGTERM を受けとったら、終了する */ 78 | 79 | static void sigterm_handler(int dummy) 80 | { 81 | quasi88_quit(); 82 | z80main_cpu.icount = 0; 83 | z80sub_cpu.icount = 0; 84 | } 85 | 86 | /*-------- 割り込み設定 -------- */ 87 | 88 | void set_signal(void) 89 | { 90 | if (debug_mode) { 91 | signal(SIGINT, sigint_handler); 92 | signal(SIGTERM, sigterm_handler); 93 | } else { 94 | signal(SIGINT, sigterm_handler); 95 | signal(SIGTERM, sigterm_handler); 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /src/monitor.h: -------------------------------------------------------------------------------- 1 | #ifndef MONITOR_H_INCLUDED 2 | #define MONITOR_H_INCLUDED 3 | 4 | 5 | 6 | extern int debug_mode; /* デバッグ機能(モニター) */ 7 | extern char alt_char; /* 代替文字 */ 8 | 9 | void set_signal( void ); 10 | 11 | void print_hankaku(FILE *fp, Uchar *str, char npc); 12 | 13 | #endif /* MONITOR_H_INCLUDED */ 14 | -------------------------------------------------------------------------------- /src/pause.c: -------------------------------------------------------------------------------- 1 | /************************************************************************/ 2 | /* */ 3 | /* ポーズ (一時停止) モード */ 4 | /* */ 5 | /************************************************************************/ 6 | 7 | /* 変数 pause_by_focus_out により処理が変わる */ 8 | /* ・pause_by_focus_out == 0 の時 */ 9 | /* ESCが押されると解除。 画面中央に PAUSEと表示 */ 10 | /* ・pause_by_focus_out != 0 の時 */ 11 | /* X のマウスが画面内に入ると解除 */ 12 | 13 | #include 14 | 15 | #include "quasi88.h" 16 | #include "pause.h" 17 | 18 | #include "emu.h" 19 | #include "initval.h" 20 | #include "status.h" 21 | #include "screen.h" 22 | #include "wait.h" 23 | #include "event.h" 24 | 25 | 26 | int need_focus = FALSE; /* フォーカスアウト停止あり */ 27 | 28 | 29 | static int pause_by_focus_out = FALSE; 30 | 31 | /* 32 | * エミュ処理中に、フォーカスが無くなった (-focus指定時は、ポーズ開始) 33 | */ 34 | void pause_event_focus_out_when_exec(void) 35 | { 36 | if (need_focus) { /* -focus 指定時は */ 37 | pause_by_focus_out = TRUE; 38 | quasi88_pause(); /* ここで PAUSE する */ 39 | } 40 | } 41 | 42 | /* 43 | * ポーズ中に、フォーカスを得た 44 | */ 45 | void pause_event_focus_in_when_pause(void) 46 | { 47 | if (pause_by_focus_out) { 48 | quasi88_exec(); 49 | } 50 | } 51 | 52 | /* 53 | * ポーズ中に、ポーズ終了のキー(ESCキー)押下検知した 54 | */ 55 | void pause_event_key_on_esc(void) 56 | { 57 | quasi88_exec(); 58 | } 59 | 60 | /* 61 | * ポーズ中に、メニュー開始のキー押下検知した 62 | */ 63 | void pause_event_key_on_menu(void) 64 | { 65 | quasi88_menu(); 66 | } 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | void pause_init(void) 77 | { 78 | status_message_default(0, " PAUSE "); 79 | status_message_default(1, " key to return"); 80 | status_message_default(2, NULL); 81 | } 82 | 83 | 84 | void pause_main(void) 85 | { 86 | /* 終了などを検知するために、イベント処理だけ実施 */ 87 | event_update(); 88 | 89 | 90 | /* 一時停止を抜けたら、ワーク再初期化 */ 91 | if (quasi88_event_flags & EVENT_MODE_CHANGED) { 92 | 93 | pause_by_focus_out = FALSE; 94 | 95 | } else { 96 | 97 | quasi88_event_flags |= EVENT_FRAME_UPDATE; 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /src/pause.h: -------------------------------------------------------------------------------- 1 | #ifndef PAUSE_H_INCLUDED 2 | #define PAUSE_H_INCLUDED 3 | 4 | /************************************************************************/ 5 | /* 一時停止モード */ 6 | /************************************************************************/ 7 | 8 | void pause_init(void); 9 | void pause_main(void); 10 | 11 | 12 | 13 | /*---------------------------------------------------------------------- 14 | * イベント処理の対処 15 | *----------------------------------------------------------------------*/ 16 | void pause_event_focus_out_when_exec(void); 17 | void pause_event_focus_in_when_pause(void); 18 | void pause_event_key_on_esc(void); 19 | void pause_event_key_on_menu(void); 20 | 21 | 22 | 23 | 24 | 25 | #endif /* PAUSE_H_INCLUDED */ 26 | -------------------------------------------------------------------------------- /src/pc88cpu.h: -------------------------------------------------------------------------------- 1 | #ifndef PC88CPU_H_INCLUDED 2 | #define PC88CPU_H_INCLUDED 3 | 4 | 5 | #include "z80.h" 6 | 7 | 8 | extern z80arch z80main_cpu; /* メイン CPU */ 9 | extern z80arch z80sub_cpu; /* サブ CPU */ 10 | 11 | 12 | #endif /* PC88CPU_H_INCLUDED */ 13 | -------------------------------------------------------------------------------- /src/pc88sub.h: -------------------------------------------------------------------------------- 1 | #ifndef PC88SUB_H_INCLUDED 2 | #define PC88SUB_H_INCLUDED 3 | 4 | 5 | /**** 螟画焚 ****/ 6 | 7 | extern int sub_load_rate; 8 | 9 | 10 | /**** 髢「謨ー ****/ 11 | 12 | 13 | void pc88sub_init( int init ); 14 | void pc88sub_term( void ); 15 | void pc88sub_bus_setup( void ); 16 | 17 | 18 | byte sub_mem_read( word addr ); 19 | void sub_mem_write( word addr, byte data ); 20 | byte sub_io_in( byte port ); 21 | void sub_io_out( byte port, byte data ); 22 | 23 | 24 | void subcpu_keyscan_draw( void ); 25 | 26 | 27 | #endif /* PC88SUB_H_INCLUDED */ 28 | -------------------------------------------------------------------------------- /src/pio.h: -------------------------------------------------------------------------------- 1 | #ifndef PIO_H_INCLUDED 2 | #define PIO_H_INCLUDED 3 | 4 | 5 | #define PIO_SIDE_M (0) 6 | #define PIO_SIDE_S (1) 7 | 8 | #define PIO_READ (0) 9 | #define PIO_WRITE (1) 10 | 11 | #define PIO_PORT_A (0) 12 | #define PIO_PORT_B (1) 13 | 14 | #define PIO_PORT_CH (0) 15 | #define PIO_PORT_CL (1) 16 | 17 | #define PIO_EMPTY (0) 18 | #define PIO_EXIST (1) 19 | 20 | typedef struct{ 21 | int type; /* PORT の 機能 READ か WRITE か */ 22 | int exist; /* PA/PB …データの有無 */ 23 | int cont_f; /* PC 連続アクセスフラグ (CPU 切替えフラグ) */ 24 | byte data; /* PA/PB …入力するデータ PC …入力する/出力したデータ */ 25 | } pio_work; 26 | 27 | extern pio_work pio_AB[2][2], pio_C[2][2]; 28 | 29 | 30 | 31 | void pio_init( void ); 32 | 33 | byte pio_read_AB( int side, int port ); 34 | void pio_write_AB( int side, int port, byte data ); 35 | byte pio_read_C( int side ); 36 | void pio_write_C( int side, byte data ); 37 | void pio_write_C_direct( int side, byte data ); 38 | void pio_set_mode( int side, byte data ); 39 | 40 | 41 | #endif /* PIO_H_INCLUDED */ 42 | -------------------------------------------------------------------------------- /src/romaji.h: -------------------------------------------------------------------------------- 1 | #ifndef ROMAJI_H_INCLUDED 2 | #define ROMAJI_H_INCLUDED 3 | 4 | /* ローマ字入力処理 */ 5 | 6 | void romaji_init( void ); 7 | void romaji_clear( void ); 8 | int romaji_input( int key ); 9 | void romaji_output( void ); 10 | 11 | 12 | #endif /* ROMAJI_H_INCLUDED */ 13 | 14 | -------------------------------------------------------------------------------- /src/screen-menu-double.h: -------------------------------------------------------------------------------- 1 | #define FONT_H 32 2 | #define FONT_W 16 3 | 4 | #define FONT_8x8() \ 5 | font_inc = 1; \ 6 | font_dup = TRUE; \ 7 | font_skip = 1; 8 | 9 | #define FONT_8x16() \ 10 | font_inc = 1; \ 11 | font_dup = FALSE; \ 12 | font_skip = 1; 13 | 14 | #define FONT_16x16() \ 15 | font_inc = 2; \ 16 | font_dup = FALSE; \ 17 | font_skip = 1; 18 | 19 | #define FONT_LOGO8x16() \ 20 | font_inc = Q8GR_LOGO_W; \ 21 | font_dup = FALSE; \ 22 | font_skip = 1; 23 | 24 | #define WORK_DEFINE() TYPE *dst2; 25 | 26 | #define GET_FONT() *font_ptr 27 | 28 | #define GET_CURSOR() *cur_ptr 29 | 30 | #define PUT_FONT() \ 31 | dst2 = dst + SCREEN_WIDTH; \ 32 | if (style & 0x80) { dst[ 0] = dst[ 1] = dst2[ 0] = dst2[ 1] = fg; } \ 33 | else { dst[ 0] = dst[ 1] = dst2[ 0] = dst2[ 1] = bg; } \ 34 | if (style & 0x40) { dst[ 2] = dst[ 3] = dst2[ 2] = dst2[ 3] = fg; } \ 35 | else { dst[ 2] = dst[ 3] = dst2[ 2] = dst2[ 3] = bg; } \ 36 | if (style & 0x20) { dst[ 4] = dst[ 5] = dst2[ 4] = dst2[ 5] = fg; } \ 37 | else { dst[ 4] = dst[ 5] = dst2[ 4] = dst2[ 5] = bg; } \ 38 | if (style & 0x10) { dst[ 6] = dst[ 7] = dst2[ 6] = dst2[ 7] = fg; } \ 39 | else { dst[ 6] = dst[ 7] = dst2[ 6] = dst2[ 7] = bg; } \ 40 | if (style & 0x08) { dst[ 8] = dst[ 9] = dst2[ 8] = dst2[ 9] = fg; } \ 41 | else { dst[ 8] = dst[ 9] = dst2[ 8] = dst2[ 9] = bg; } \ 42 | if (style & 0x04) { dst[10] = dst[11] = dst2[10] = dst2[11] = fg; } \ 43 | else { dst[10] = dst[11] = dst2[10] = dst2[11] = bg; } \ 44 | if (style & 0x02) { dst[12] = dst[13] = dst2[12] = dst2[13] = fg; } \ 45 | else { dst[12] = dst[13] = dst2[12] = dst2[13] = bg; } \ 46 | if (style & 0x01) { dst[14] = dst[15] = dst2[14] = dst2[15] = fg; } \ 47 | else { dst[14] = dst[15] = dst2[14] = dst2[15] = bg; } \ 48 | dst += 2 * SCREEN_WIDTH; 49 | 50 | 51 | #include "screen-menu.h" 52 | -------------------------------------------------------------------------------- /src/screen-menu-full.h: -------------------------------------------------------------------------------- 1 | #define FONT_H 16 2 | #define FONT_W 8 3 | 4 | #define FONT_8x8() \ 5 | font_inc = 1; \ 6 | font_dup = TRUE; \ 7 | font_skip = 1; 8 | 9 | #define FONT_8x16() \ 10 | font_inc = 1; \ 11 | font_dup = FALSE; \ 12 | font_skip = 1; 13 | 14 | #define FONT_16x16() \ 15 | font_inc = 2; \ 16 | font_dup = FALSE; \ 17 | font_skip = 1; 18 | 19 | #define FONT_LOGO8x16() \ 20 | font_inc = Q8GR_LOGO_W; \ 21 | font_dup = FALSE; \ 22 | font_skip = 1; 23 | 24 | #define WORK_DEFINE() 25 | 26 | #define GET_FONT() *font_ptr 27 | 28 | #define GET_CURSOR() *cur_ptr 29 | 30 | #define PUT_FONT() \ 31 | if (style & 0x80) { dst[0] = fg; } else { dst[0] = bg; } \ 32 | if (style & 0x40) { dst[1] = fg; } else { dst[1] = bg; } \ 33 | if (style & 0x20) { dst[2] = fg; } else { dst[2] = bg; } \ 34 | if (style & 0x10) { dst[3] = fg; } else { dst[3] = bg; } \ 35 | if (style & 0x08) { dst[4] = fg; } else { dst[4] = bg; } \ 36 | if (style & 0x04) { dst[5] = fg; } else { dst[5] = bg; } \ 37 | if (style & 0x02) { dst[6] = fg; } else { dst[6] = bg; } \ 38 | if (style & 0x01) { dst[7] = fg; } else { dst[7] = bg; } \ 39 | dst += SCREEN_WIDTH; 40 | 41 | 42 | #include "screen-menu.h" 43 | -------------------------------------------------------------------------------- /src/screen-menu-half-p.h: -------------------------------------------------------------------------------- 1 | #define FONT_H 8 2 | #define FONT_W 4 3 | 4 | #define FONT_8x8() \ 5 | font_inc = 1; \ 6 | font_dup = FALSE; \ 7 | font_skip = 2; 8 | 9 | #define FONT_8x16() \ 10 | font_inc = 2; \ 11 | font_dup = FALSE; \ 12 | font_skip = 2; 13 | 14 | #define FONT_16x16() \ 15 | font_inc = 4; \ 16 | font_dup = FALSE; \ 17 | font_skip = 2; 18 | 19 | #define FONT_LOGO8x16() \ 20 | font_inc = 2 * Q8GR_LOGO_W; \ 21 | font_dup = FALSE; \ 22 | font_skip = 2; 23 | 24 | #define WORK_DEFINE() TYPE mg = MIXED_PIXEL(src->foreground, src->background) 25 | 26 | #define GET_FONT() (*font_ptr | *(font_ptr + font_inc / 2)) 27 | 28 | #define GET_CURSOR() (*cur_ptr | *(cur_ptr + 1)) 29 | 30 | #define PUT_FONT() \ 31 | if ((style & 0xc0) == 0xc0) { dst[0] = fg; } \ 32 | else if ((style & 0xc0) == 0x00) { dst[0] = bg; } \ 33 | else { dst[0] = mg; } \ 34 | if ((style & 0x30) == 0x30) { dst[1] = fg; } \ 35 | else if ((style & 0x30) == 0x00) { dst[1] = bg; } \ 36 | else { dst[1] = mg; } \ 37 | if ((style & 0x0c) == 0x0c) { dst[2] = fg; } \ 38 | else if ((style & 0x0c) == 0x00) { dst[2] = bg; } \ 39 | else { dst[2] = mg; } \ 40 | if ((style & 0x03) == 0x03) { dst[3] = fg; } \ 41 | else if ((style & 0x03) == 0x00) { dst[3] = bg; } \ 42 | else { dst[3] = mg; } \ 43 | dst += SCREEN_WIDTH; 44 | 45 | 46 | #include "screen-menu.h" 47 | -------------------------------------------------------------------------------- /src/screen-menu-half.h: -------------------------------------------------------------------------------- 1 | #define FONT_H 8 2 | #define FONT_W 4 3 | 4 | #define FONT_8x8() \ 5 | font_inc = 1; \ 6 | font_dup = FALSE; \ 7 | font_skip = 2; 8 | 9 | #define FONT_8x16() \ 10 | font_inc = 2; \ 11 | font_dup = FALSE; \ 12 | font_skip = 2; 13 | 14 | #define FONT_16x16() \ 15 | font_inc = 4; \ 16 | font_dup = FALSE; \ 17 | font_skip = 2; 18 | 19 | #define FONT_LOGO8x16() \ 20 | font_inc = 2 * Q8GR_LOGO_W; \ 21 | font_dup = FALSE; \ 22 | font_skip = 2; 23 | 24 | #define WORK_DEFINE() 25 | 26 | #define GET_FONT() (*font_ptr | *(font_ptr + font_inc / 2)) 27 | 28 | #define GET_CURSOR() (*cur_ptr | *(cur_ptr + 1)) 29 | 30 | #define PUT_FONT() \ 31 | if (reverse) { \ 32 | if ((style & 0xc0) == 0xc0) { dst[0] = fg; } else { dst[0] = bg; } \ 33 | if ((style & 0x30) == 0x30) { dst[1] = fg; } else { dst[1] = bg; } \ 34 | if ((style & 0x0c) == 0x0c) { dst[2] = fg; } else { dst[2] = bg; } \ 35 | if ((style & 0x03) == 0x03) { dst[3] = fg; } else { dst[3] = bg; } \ 36 | } else { \ 37 | if (style & 0xc0) { dst[0] = fg; } else { dst[0] = bg; } \ 38 | if (style & 0x30) { dst[1] = fg; } else { dst[1] = bg; } \ 39 | if (style & 0x0c) { dst[2] = fg; } else { dst[2] = bg; } \ 40 | if (style & 0x03) { dst[3] = fg; } else { dst[3] = bg; } \ 41 | } \ 42 | dst += SCREEN_WIDTH; 43 | 44 | 45 | #include "screen-menu.h" 46 | -------------------------------------------------------------------------------- /src/screen-status.h: -------------------------------------------------------------------------------- 1 | #ifdef STATUS2SCREEN 2 | void STATUS2SCREEN(int kind, byte pixmap[], int w, int h) 3 | { 4 | int x, y, pos; 5 | int top, start, end; 6 | int y_limit = MIN( h, status_sy[ kind ] ); 7 | byte *src = pixmap; 8 | TYPE *dst = (TYPE *) status_start[ kind ]; 9 | 10 | if (dst == NULL) return; 11 | 12 | if (kind == 0) { /* 左揃え */ 13 | top = 0; 14 | start = 0; 15 | end = MIN( w, status_sx[ kind ] ); 16 | } 17 | else if (kind == 1) { /* 中央揃え */ 18 | if (w <= status_sx[ kind ]) { 19 | top = 0; 20 | start = (status_sx[ kind ] - w) / 2; 21 | end = start + w; 22 | } else { 23 | top = (w - status_sx[ kind ]) / 2; 24 | start = 0; 25 | end = status_sx[ kind ]; 26 | } 27 | } 28 | else { /* 右揃え */ 29 | if (w <= status_sx[ kind ]) { 30 | top = 0; 31 | start = status_sx[ kind ] - w; 32 | end = status_sx[ kind ]; 33 | } else { 34 | top = w - status_sx[ kind ]; 35 | start = 0; 36 | end = status_sx[ kind ]; 37 | } 38 | } 39 | 40 | for (y = 0; y < y_limit; y++) { 41 | for (x = 0; x < start; x++) { 42 | dst[x] = (TYPE) status_pixel[ STATUS_BG ]; 43 | } 44 | pos = top; 45 | for ( ; x < end; x++) { 46 | dst[x] = (TYPE) status_pixel[ src[ pos++ ] ]; 47 | } 48 | for ( ; x < status_sx[ kind ]; x++) { 49 | dst[x] = (TYPE) status_pixel[ STATUS_BG ]; 50 | } 51 | src += w; 52 | dst += SCREEN_WIDTH; 53 | } 54 | for ( ; y < status_sy[ kind ]; y++) { 55 | for (x = 0; x < status_sx[ kind ]; x++) { 56 | dst[x] = (TYPE) status_pixel[ STATUS_BG ]; 57 | } 58 | dst += SCREEN_WIDTH; 59 | } 60 | } 61 | #endif /* STATUS2SCREEN */ 62 | 63 | 64 | #ifdef STATUS_BUF_CLEAR 65 | void STATUS_BUF_CLEAR(void) 66 | { 67 | unsigned int i, j; 68 | TYPE *p = (TYPE *) status_buf; 69 | 70 | if (p == NULL) return; 71 | 72 | for (j = STATUS_HEIGHT; j; j--) { 73 | for (i = SCREEN_WIDTH; i; i--) { 74 | *p++ = BLACK; 75 | } 76 | } 77 | } 78 | #endif /* STATUS_BUF_CLEAR */ 79 | 80 | 81 | #ifdef STATUS_BUF_INIT 82 | void STATUS_BUF_INIT(void) 83 | { 84 | unsigned int i, j; 85 | TYPE *p = (TYPE *) status_buf; 86 | 87 | if (p == NULL) return; 88 | 89 | for (j = 0; j < STATUS_HEIGHT; j++) { 90 | for (i = SCREEN_WIDTH; i; i--) { 91 | if (j < 2) { *p++ = BLACK; } 92 | else { *p++ = (TYPE) status_pixel[ STATUS_BG ]; } 93 | } 94 | } 95 | } 96 | #endif /* STATUS_BUF_INIT */ 97 | -------------------------------------------------------------------------------- /src/screen-vram-400h.h: -------------------------------------------------------------------------------- 1 | /***************************************************************************** 2 | * ハイレゾ (640x400x1) 3 | *****************************************************************************/ 4 | 5 | /* 【TEXTのみ描画】 */ 6 | 7 | #define MASK_8DOT() for (m = 0; m < 4; m++) { dst[m] = tcol; } 8 | #define MASK_16DOT() for (m = 0; m < 8; m++) { dst[m] = tcol; } 9 | 10 | 11 | /* 【VRAMのみ描画】 */ 12 | 13 | #undef UPPER_SCREEN 14 | #if (ROWS == 20) 15 | #define UPPER_SCREEN (i<10) 16 | #elif (ROWS == 25) 17 | #define UPPER_SCREEN ((i < 12) || (i == 12 && k < 8)) 18 | #endif 19 | 20 | #define TRANS_8DOT() \ 21 | if (UPPER_SCREEN) { \ 22 | vram = *(src + k * 80); \ 23 | for (l = 0; l < 4; l++, vram <<= 2) { \ 24 | dst[l] = get_pixel_400_B( vram, tcol ); \ 25 | } \ 26 | } else { \ 27 | vram = *(src + k * 80 - 80*200); \ 28 | for (l = 0; l < 4; l++, vram <<= 2) { \ 29 | dst[l] = get_pixel_400_R( vram, tcol ); \ 30 | } \ 31 | } 32 | 33 | #define TRANS_16DOT() \ 34 | if (UPPER_SCREEN) { \ 35 | vram = *(src + k * 80); \ 36 | for (l = 0; l < 4; l++, vram <<= 2) { \ 37 | dst[l] = get_pixel_400_B( vram, tcol ); \ 38 | } \ 39 | vram = *(src + k * 80 + 1); \ 40 | for ( ; l < 8; l++, vram <<= 2) { \ 41 | dst[l] = get_pixel_400_B( vram, tcol ); \ 42 | } \ 43 | } else { \ 44 | vram = *(src + k * 80 - 80*200); \ 45 | for (l = 0; l < 4; l++, vram <<= 2) { \ 46 | dst[l] = get_pixel_400_R( vram, tcol ); \ 47 | } \ 48 | vram = *(src + k * 80 + 1 - 80*200); \ 49 | for ( ; l < 8; l++, vram <<= 2) { \ 50 | dst[l] = get_pixel_400_R( vram, tcol ); \ 51 | } \ 52 | } 53 | 54 | /* 【TEXT/VRAM重ね合わせ描画】 */ 55 | 56 | #define STORE_8DOT() \ 57 | if (UPPER_SCREEN) { \ 58 | vram = *(src + k * 80); \ 59 | for (m = 0xc0, l = 0; l < 4; l++, m >>= 2, vram <<= 2) { \ 60 | if (style & m) { dst[l] = tcol; } \ 61 | else { dst[l] = get_pixel_400_B( vram, tcol ); } \ 62 | } \ 63 | } else { \ 64 | vram = *(src + k * 80 - 80*200); \ 65 | for (m = 0xc0, l = 0; l < 4; l++, m >>= 2, vram <<= 2) { \ 66 | if (style & m) { dst[l] = tcol; } \ 67 | else { dst[l] = get_pixel_400_R( vram, tcol ); } \ 68 | } \ 69 | } 70 | 71 | #define STORE_16DOT() \ 72 | if (UPPER_SCREEN) { \ 73 | vram = *(src + k * 80); \ 74 | for (m = 0x80, l = 0; l < 4; l++, m >>= 1, vram <<= 2) { \ 75 | if (style & m) { dst[l] = tcol; } \ 76 | else { dst[l] = get_pixel_400_B( vram, tcol ); } \ 77 | } \ 78 | vram = *(src + k * 80 + 1); \ 79 | for ( ; l < 8; l++, m >>= 1, vram <<= 2) { \ 80 | if (style & m) { dst[l] = tcol; } \ 81 | else { dst[l] = get_pixel_400_B( vram, tcol ); } \ 82 | } \ 83 | } else { \ 84 | vram = *(src + k * 80 - 80*200); \ 85 | for (m = 0x80, l = 0; l < 4; l++, m >>= 1, vram <<= 2) { \ 86 | if (style & m) { dst[l] = tcol; } \ 87 | else { dst[l] = get_pixel_400_R( vram, tcol ); } \ 88 | } \ 89 | vram = *(src + k * 80 + 1 - 80*200); \ 90 | for ( ; l < 8; l++, m >>= 1, vram <<= 2) { \ 91 | if (style & m) { dst[l] = tcol; } \ 92 | else { dst[l] = get_pixel_400_R( vram, tcol ); } \ 93 | } \ 94 | } 95 | -------------------------------------------------------------------------------- /src/screen-vram-clear.h: -------------------------------------------------------------------------------- 1 | #ifdef SCREEN_BUF_INIT 2 | void SCREEN_BUF_INIT(void) 3 | { 4 | unsigned int i, j; 5 | TYPE *p = (TYPE *) SCREEN_TOP; 6 | 7 | for (j = SCREEN_HEIGHT; j; j--) { 8 | for (i = SCREEN_WIDTH; i; i--) { 9 | *p++ = BLACK; 10 | } 11 | } 12 | } 13 | #endif /* SCREEN_BUF_INIT */ 14 | -------------------------------------------------------------------------------- /src/screen-vram-half.h: -------------------------------------------------------------------------------- 1 | #include "screen-vram-base.h" 2 | 3 | /*====================================================================== 4 | * 描画先の変数定義 (dst) 5 | *======================================================================*/ 6 | 7 | #if defined (LINE200) /*-------------------------------------------*/ 8 | #define IF_LINE200_OR_EVEN_LINE() /* nothing */ 9 | 10 | #define DST_DEFINE() int dst_w = SCREEN_WIDTH; \ 11 | TYPE *dst = (TYPE *) SCREEN_START; 12 | 13 | #define DST_NEXT_LINE() dst += (dst_w); 14 | 15 | #define DST_RESTORE_LINE() dst -= CHARA_LINES * dst_w; 16 | 17 | #define DST_NEXT_CHARA() dst += 4 * COLUMN_SKIP; 18 | 19 | #define DST_NEXT_TOP_CHARA() dst += CHARA_LINES * dst_w - 320; 20 | 21 | #elif defined (LINE400) /*-------------------------------------------*/ 22 | #define IF_LINE200_OR_EVEN_LINE() if (k & 1) continue; 23 | 24 | #define DST_DEFINE() int dst_w = SCREEN_WIDTH; \ 25 | TYPE *dst = (TYPE *) SCREEN_START; 26 | 27 | #define DST_NEXT_LINE() dst += dst_w; 28 | 29 | #define DST_RESTORE_LINE() dst -= (CHARA_LINES / 2) * dst_w; 30 | 31 | #define DST_NEXT_CHARA() dst += 4 * COLUMN_SKIP; 32 | 33 | #define DST_NEXT_TOP_CHARA() dst += (CHARA_LINES / 2) * dst_w - 320; 34 | #endif 35 | 36 | /*====================================================================== 37 | * 描画マクロ定義 (MASK_DOT, TRANS_DOT, STORE_DOT, COPY_DOT) 38 | *======================================================================*/ 39 | 40 | #if defined (LINE200) 41 | #if defined (INTERPOLATE) /*-----------------------------------*/ 42 | 43 | #define COPY_8DOT() 44 | #define COPY_16DOT() 45 | 46 | #include "screen-vram-200h-p.h" /*****************/ 47 | 48 | #else /* ! INTERPOLATE */ /*-----------------------------------*/ 49 | 50 | #define COPY_8DOT() 51 | #define COPY_16DOT() 52 | 53 | #include "screen-vram-200h.h" /*****************/ 54 | 55 | #endif 56 | 57 | #elif defined (LINE400) /*-------------------------------------------*/ 58 | 59 | #define COPY_8DOT() 60 | #define COPY_16DOT() 61 | 62 | #include "screen-vram-400h.h" /*****************/ 63 | 64 | #endif 65 | 66 | /*====================================================================== 67 | * 描画関数定義 68 | *======================================================================*/ 69 | 70 | #include "screen-vram.h" 71 | -------------------------------------------------------------------------------- /src/snapshot.h: -------------------------------------------------------------------------------- 1 | #ifndef SNAPSHOT_H_INCLUDED 2 | #define SNAPSHOT_H_INCLUDED 3 | 4 | #include 5 | #include "file-op.h" 6 | 7 | 8 | #if 0 /* → file-op.h */ 9 | extern char file_snap[QUASI88_MAX_FILENAME]; /* スナップショットベース部 */ 10 | #endif 11 | 12 | 13 | 14 | enum { 15 | SNAPSHOT_FMT_BMP, 16 | SNAPSHOT_FMT_PPM, 17 | SNAPSHOT_FMT_RAW 18 | }; 19 | extern int snapshot_format; /* スナップショットフォーマット */ 20 | 21 | 22 | /* スナップショットコマンド */ 23 | #define SNAPSHOT_CMD_SIZE (1024) 24 | extern char snapshot_cmd[ SNAPSHOT_CMD_SIZE ]; 25 | extern char snapshot_cmd_do; /* コマンド実行の有無 */ 26 | 27 | extern char snapshot_cmd_enable; /* コマンド実行の可否 */ 28 | 29 | 30 | void filename_init_snap(int synchronize); 31 | void filename_set_snap_base(const char *filename); 32 | const char *filename_get_snap_base(void); 33 | 34 | void screen_snapshot_init(void); 35 | void screen_snapshot_exit(void); 36 | 37 | int screen_snapshot_save(void); 38 | 39 | 40 | 41 | 42 | void filename_init_wav(int synchronize); 43 | void filename_set_wav_base(const char *filename); 44 | const char *filename_get_wav_base(void); 45 | 46 | int waveout_save_start(void); 47 | void waveout_save_stop(void); 48 | 49 | #endif /* SNAPSHOT_H_INCLUDED */ 50 | -------------------------------------------------------------------------------- /src/snddrv/license.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 1997-2007, Nicola Salmoria and the MAME team 2 | All rights reserved. 3 | 4 | Redistribution and use of this code or any derivative works are permitted 5 | provided that the following conditions are met: 6 | 7 | * Redistributions may not be sold, nor may they be used in a commercial 8 | product or activity. 9 | 10 | * Redistributions that are modified from the original source must include the 11 | complete source code, including the source code for all components used by a 12 | binary built from the modified sources. However, as a special exception, the 13 | source code distributed need not include anything that is normally distributed 14 | (in either source or binary form) with the major components (compiler, kernel, 15 | and so on) of the operating system on which the executable runs, unless that 16 | component itself accompanies the executable. 17 | 18 | * Redistributions must reproduce the above copyright notice, this list of 19 | conditions and the following disclaimer in the documentation and/or other 20 | materials provided with the distribution. 21 | 22 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 23 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 26 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 27 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 28 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 29 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 30 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 31 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 32 | POSSIBILITY OF SUCH DAMAGE. 33 | -------------------------------------------------------------------------------- /src/snddrv/quasi88/2203fmgen.h: -------------------------------------------------------------------------------- 1 | #ifndef FMGEN2203_H 2 | #define FMGEN2203_H 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | 8 | READ8_HANDLER( FMGEN2203_status_port_0_r ); 9 | READ8_HANDLER( FMGEN2203_status_port_1_r ); 10 | READ8_HANDLER( FMGEN2203_status_port_2_r ); 11 | READ8_HANDLER( FMGEN2203_status_port_3_r ); 12 | READ8_HANDLER( FMGEN2203_status_port_4_r ); 13 | 14 | READ8_HANDLER( FMGEN2203_read_port_0_r ); 15 | READ8_HANDLER( FMGEN2203_read_port_1_r ); 16 | READ8_HANDLER( FMGEN2203_read_port_2_r ); 17 | READ8_HANDLER( FMGEN2203_read_port_3_r ); 18 | READ8_HANDLER( FMGEN2203_read_port_4_r ); 19 | 20 | WRITE8_HANDLER( FMGEN2203_control_port_0_w ); 21 | WRITE8_HANDLER( FMGEN2203_control_port_1_w ); 22 | WRITE8_HANDLER( FMGEN2203_control_port_2_w ); 23 | WRITE8_HANDLER( FMGEN2203_control_port_3_w ); 24 | WRITE8_HANDLER( FMGEN2203_control_port_4_w ); 25 | 26 | WRITE8_HANDLER( FMGEN2203_write_port_0_w ); 27 | WRITE8_HANDLER( FMGEN2203_write_port_1_w ); 28 | WRITE8_HANDLER( FMGEN2203_write_port_2_w ); 29 | WRITE8_HANDLER( FMGEN2203_write_port_3_w ); 30 | WRITE8_HANDLER( FMGEN2203_write_port_4_w ); 31 | 32 | WRITE8_HANDLER( FMGEN2203_word_0_w ); 33 | WRITE8_HANDLER( FMGEN2203_word_1_w ); 34 | 35 | extern void FMGEN2203_set_volume_0(float volume); 36 | extern void FMGEN2203_set_volume_1(float volume); 37 | 38 | #ifdef __cplusplus 39 | } 40 | #endif 41 | 42 | #endif 43 | -------------------------------------------------------------------------------- /src/snddrv/quasi88/2608fmgen.h: -------------------------------------------------------------------------------- 1 | #ifndef __FMGEN2608_H__ 2 | #define __FMGEN2608_H__ 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | 8 | #include "2608intf.h" 9 | 10 | 11 | /************************************************/ 12 | /* Chip 0 functions */ 13 | /************************************************/ 14 | READ8_HANDLER( FMGEN2608_status_port_0_A_r ); 15 | READ8_HANDLER( FMGEN2608_status_port_0_B_r ); 16 | READ8_HANDLER( FMGEN2608_read_port_0_r ); 17 | WRITE8_HANDLER( FMGEN2608_control_port_0_A_w ); 18 | WRITE8_HANDLER( FMGEN2608_control_port_0_B_w ); 19 | WRITE8_HANDLER( FMGEN2608_data_port_0_A_w ); 20 | WRITE8_HANDLER( FMGEN2608_data_port_0_B_w ); 21 | extern void FMGEN2608_set_volume_0(float volume); 22 | 23 | /************************************************/ 24 | /* Chip 1 functions */ 25 | /************************************************/ 26 | READ8_HANDLER( FMGEN2608_status_port_1_A_r ); 27 | READ8_HANDLER( FMGEN2608_status_port_1_B_r ); 28 | READ8_HANDLER( FMGEN2608_read_port_1_r ); 29 | WRITE8_HANDLER( FMGEN2608_control_port_1_A_w ); 30 | WRITE8_HANDLER( FMGEN2608_control_port_1_B_w ); 31 | WRITE8_HANDLER( FMGEN2608_data_port_1_A_w ); 32 | WRITE8_HANDLER( FMGEN2608_data_port_1_B_w ); 33 | extern void FMGEN2608_set_volume_1(float volume); 34 | 35 | #ifdef __cplusplus 36 | } 37 | #endif 38 | 39 | #endif /* __2608cINTF_H__ */ 40 | -------------------------------------------------------------------------------- /src/snddrv/quasi88/beep.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include "driver.h" 5 | #include "beep.h" 6 | 7 | 8 | #define SCALE (1) 9 | 10 | /* ---------- work of BEEP emulator ----------- */ 11 | typedef struct beep88_f { 12 | void *param; 13 | int clock; /* 2400Hz */ 14 | int sample_rate; /* 44100/22050 Hz */ 15 | int sample_bit_8; /* TRUE / FALSE */ 16 | int cnt; /* 0... */ 17 | int cnt_of_clock; /* sample_rate/clock */ 18 | int cmd_sing; /* TRUE / FALSE */ 19 | unsigned char port40; /* Output value of port 40 */ 20 | } BEEP88; 21 | 22 | 23 | /* ---------- update one of chip ----------- */ 24 | void BEEP88UpdateOne(void *chip, stream_sample_t *buffer, int length) 25 | { 26 | BEEP88 *BEEP = chip; 27 | 28 | int i, data, on_level; 29 | 30 | if (BEEP->sample_bit_8) { 31 | on_level = 0x20; 32 | } else { 33 | on_level = 0x2000; 34 | } 35 | 36 | #if 1 37 | for (i=0; i < length ; i++) { 38 | if (BEEP->port40 & 0x20) { 39 | BEEP->cnt += SCALE; 40 | if (BEEP->cnt < BEEP->cnt_of_clock/2) data = on_level; 41 | else if (BEEP->cnt < BEEP->cnt_of_clock ) data = 0x0000; 42 | else { BEEP->cnt -= BEEP->cnt_of_clock; data = on_level; } 43 | } else { 44 | data = 0x0000; 45 | } 46 | if (BEEP->cmd_sing) { 47 | if (BEEP->port40 & 0x80) data = on_level; 48 | } 49 | *buffer ++ = data; 50 | } 51 | #else 52 | for (i=0; i < length ; i++) { 53 | BEEP->cnt ++; 54 | if (BEEP->cnt >= BEEP->cnt_of_clock) { 55 | BEEP->cnt = 0; 56 | } 57 | if (BEEP->port40 & 0x20) { 58 | if (BEEP->cnt < BEEP->cnt_of_clock/2) data = on_level; 59 | else data = 0x0000; 60 | } else { 61 | data = 0x0000; 62 | } 63 | if (BEEP->cmd_sing) { 64 | if (BEEP->port40 & 0x80) data = on_level; 65 | } 66 | *buffer ++ = data; 67 | } 68 | #endif 69 | } 70 | 71 | 72 | /* ---------- reset one of chip ---------- */ 73 | void BEEP88ResetChip(void *chip) 74 | { 75 | BEEP88 *BEEP = chip; 76 | 77 | BEEP->cnt = 0; 78 | BEEP->port40 = 0; 79 | } 80 | 81 | 82 | /* ---------- Initialize BEEP emulator(s) ---------- */ 83 | void * BEEP88Init(void *param, int index, int clock, int sample_rate) 84 | { 85 | BEEP88 *BEEP; 86 | 87 | /* allocate beep88 state space */ 88 | if( (BEEP = (BEEP88 *)malloc(sizeof(BEEP88)))==NULL) 89 | return NULL; 90 | /* clear */ 91 | memset(BEEP,0,sizeof(BEEP88)); 92 | 93 | BEEP->param = param; 94 | BEEP->clock = clock; 95 | BEEP->sample_rate = sample_rate; 96 | BEEP->sample_bit_8 = FALSE; /* ...always false... */ 97 | BEEP->cnt_of_clock = sample_rate * SCALE / clock; 98 | BEEP->cmd_sing = TRUE; 99 | BEEP88ResetChip(BEEP); 100 | 101 | return BEEP; 102 | } 103 | 104 | 105 | /* ---------- shut down BEEP emulator ----------- */ 106 | void BEEP88Shutdown(void *chip) 107 | { 108 | BEEP88 *BEEP = chip; 109 | 110 | free(BEEP); 111 | } 112 | 113 | 114 | /* ---------- BEEP I/O interface ---------- */ 115 | void BEEP88Write(void *chip,int v) 116 | { 117 | BEEP88 *BEEP = chip; 118 | 119 | BEEP88UpdateRequest(BEEP->param); 120 | 121 | if( !(BEEP->port40 & 0x20) && (v & 0x20) ){ 122 | BEEP->cnt = 0; 123 | } 124 | BEEP->port40 = v; 125 | } 126 | 127 | 128 | void BEEP88Control(void *chip,int v) 129 | { 130 | BEEP88 *BEEP = chip; 131 | 132 | BEEP->cmd_sing = v; 133 | } 134 | -------------------------------------------------------------------------------- /src/snddrv/quasi88/beep.h: -------------------------------------------------------------------------------- 1 | #ifndef BEEP_H 2 | #define BEEP_H 3 | 4 | void BEEP88UpdateRequest(void *param); 5 | 6 | void * BEEP88Init(void *param, int index, int clock, int sample_rate); 7 | void BEEP88Shutdown(void *chip); 8 | void BEEP88ResetChip(void *chip); 9 | void BEEP88UpdateOne(void *chip, stream_sample_t *buffer, int length); 10 | 11 | void BEEP88Write(void *chip,int v); 12 | void BEEP88Control(void *chip,int v); 13 | 14 | #endif 15 | -------------------------------------------------------------------------------- /src/snddrv/quasi88/beepintf.h: -------------------------------------------------------------------------------- 1 | #ifndef BEEPINTF_H 2 | #define BEEPINTF_H 3 | 4 | WRITE8_HANDLER( BEEP88_write_port_0_w ); 5 | WRITE8_HANDLER( BEEP88_control_port_0_w ); 6 | 7 | extern void BEEP88_set_volume(float volume); 8 | 9 | #endif 10 | -------------------------------------------------------------------------------- /src/snddrv/src/cpuintrf.h: -------------------------------------------------------------------------------- 1 | #include "mame-quasi88.h" 2 | -------------------------------------------------------------------------------- /src/snddrv/src/driver.h: -------------------------------------------------------------------------------- 1 | #include "mame-quasi88.h" 2 | -------------------------------------------------------------------------------- /src/snddrv/src/mame.h: -------------------------------------------------------------------------------- 1 | #include "mame-quasi88.h" 2 | -------------------------------------------------------------------------------- /src/snddrv/src/mamecore.h: -------------------------------------------------------------------------------- 1 | #include "mame-quasi88.h" 2 | -------------------------------------------------------------------------------- /src/snddrv/src/osdepend.h: -------------------------------------------------------------------------------- 1 | #include "mame-quasi88.h" 2 | -------------------------------------------------------------------------------- /src/snddrv/src/profiler.h: -------------------------------------------------------------------------------- 1 | #include "mame-quasi88.h" 2 | -------------------------------------------------------------------------------- /src/snddrv/src/restrack.h: -------------------------------------------------------------------------------- 1 | #include "mame-quasi88.h" 2 | -------------------------------------------------------------------------------- /src/snddrv/src/sound/2203intf.h: -------------------------------------------------------------------------------- 1 | #ifndef YM2203INTF_H 2 | #define YM2203INTF_H 3 | 4 | #include "ay8910.h" 5 | 6 | struct YM2203interface 7 | { 8 | read8_handler portAread; 9 | read8_handler portBread; 10 | write8_handler portAwrite; 11 | write8_handler portBwrite; 12 | void (*handler)(int irq); 13 | }; 14 | 15 | 16 | READ8_HANDLER( YM2203_status_port_0_r ); 17 | READ8_HANDLER( YM2203_status_port_1_r ); 18 | READ8_HANDLER( YM2203_status_port_2_r ); 19 | READ8_HANDLER( YM2203_status_port_3_r ); 20 | READ8_HANDLER( YM2203_status_port_4_r ); 21 | 22 | READ8_HANDLER( YM2203_read_port_0_r ); 23 | READ8_HANDLER( YM2203_read_port_1_r ); 24 | READ8_HANDLER( YM2203_read_port_2_r ); 25 | READ8_HANDLER( YM2203_read_port_3_r ); 26 | READ8_HANDLER( YM2203_read_port_4_r ); 27 | 28 | WRITE8_HANDLER( YM2203_control_port_0_w ); 29 | WRITE8_HANDLER( YM2203_control_port_1_w ); 30 | WRITE8_HANDLER( YM2203_control_port_2_w ); 31 | WRITE8_HANDLER( YM2203_control_port_3_w ); 32 | WRITE8_HANDLER( YM2203_control_port_4_w ); 33 | 34 | WRITE8_HANDLER( YM2203_write_port_0_w ); 35 | WRITE8_HANDLER( YM2203_write_port_1_w ); 36 | WRITE8_HANDLER( YM2203_write_port_2_w ); 37 | WRITE8_HANDLER( YM2203_write_port_3_w ); 38 | WRITE8_HANDLER( YM2203_write_port_4_w ); 39 | 40 | WRITE8_HANDLER( YM2203_word_0_w ); 41 | WRITE8_HANDLER( YM2203_word_1_w ); 42 | 43 | #if 1 /* QUASI88 */ 44 | extern int YM2203_timer_over_0(int c); 45 | extern int YM2203_timer_over_1(int c); 46 | 47 | extern void YM2203_set_volume_0(float volume); 48 | extern void YM2203_set_volume_1(float volume); 49 | 50 | extern void YM2203_AY8910_set_volume_0(float volume); 51 | extern void YM2203_AY8910_set_volume_1(float volume); 52 | #endif /* QUASI88 */ 53 | 54 | #endif 55 | -------------------------------------------------------------------------------- /src/snddrv/src/sound/2608intf.h: -------------------------------------------------------------------------------- 1 | #ifndef __2608INTF_H__ 2 | #define __2608INTF_H__ 3 | 4 | #include "fm.h" 5 | 6 | struct YM2608interface 7 | { 8 | read8_handler portAread; 9 | read8_handler portBread; 10 | write8_handler portAwrite; 11 | write8_handler portBwrite; 12 | void ( *handler )( int irq ); /* IRQ handler for the YM2608 */ 13 | int pcmrom; /* Delta-T memory region ram/rom */ 14 | }; 15 | 16 | /************************************************/ 17 | /* Chip 0 functions */ 18 | /************************************************/ 19 | READ8_HANDLER( YM2608_status_port_0_A_r ); 20 | READ8_HANDLER( YM2608_status_port_0_B_r ); 21 | READ8_HANDLER( YM2608_read_port_0_r ); 22 | WRITE8_HANDLER( YM2608_control_port_0_A_w ); 23 | WRITE8_HANDLER( YM2608_control_port_0_B_w ); 24 | WRITE8_HANDLER( YM2608_data_port_0_A_w ); 25 | WRITE8_HANDLER( YM2608_data_port_0_B_w ); 26 | #if 1 /* QUASI88 */ 27 | extern int YM2608_timer_over_0(int c); 28 | extern void YM2608_set_volume_0(float volume); 29 | extern void YM2608_AY8910_set_volume_0(float volume); 30 | #endif /* QUASI88 */ 31 | 32 | /************************************************/ 33 | /* Chip 1 functions */ 34 | /************************************************/ 35 | READ8_HANDLER( YM2608_status_port_1_A_r ); 36 | READ8_HANDLER( YM2608_status_port_1_B_r ); 37 | READ8_HANDLER( YM2608_read_port_1_r ); 38 | WRITE8_HANDLER( YM2608_control_port_1_A_w ); 39 | WRITE8_HANDLER( YM2608_control_port_1_B_w ); 40 | WRITE8_HANDLER( YM2608_data_port_1_A_w ); 41 | WRITE8_HANDLER( YM2608_data_port_1_B_w ); 42 | #if 1 /* QUASI88 */ 43 | extern int YM2608_timer_over_1(int c); 44 | extern void YM2608_set_volume_1(float volume); 45 | extern void YM2608_AY8910_set_volume_1(float volume); 46 | #endif /* QUASI88 */ 47 | 48 | #endif /* __2608INTF_H__ */ 49 | -------------------------------------------------------------------------------- /src/snddrv/src/sound/ay8910.h: -------------------------------------------------------------------------------- 1 | #ifndef AY8910_H 2 | #define AY8910_H 3 | 4 | #define ALL_8910_CHANNELS -1 5 | 6 | struct AY8910interface 7 | { 8 | read8_handler portAread; 9 | read8_handler portBread; 10 | write8_handler portAwrite; 11 | write8_handler portBwrite; 12 | }; 13 | 14 | void AY8910_set_volume(int chip,int channel,int volume); 15 | 16 | 17 | READ8_HANDLER( AY8910_read_port_0_r ); 18 | READ8_HANDLER( AY8910_read_port_1_r ); 19 | READ8_HANDLER( AY8910_read_port_2_r ); 20 | READ8_HANDLER( AY8910_read_port_3_r ); 21 | READ8_HANDLER( AY8910_read_port_4_r ); 22 | READ16_HANDLER( AY8910_read_port_0_lsb_r ); 23 | READ16_HANDLER( AY8910_read_port_1_lsb_r ); 24 | READ16_HANDLER( AY8910_read_port_2_lsb_r ); 25 | READ16_HANDLER( AY8910_read_port_3_lsb_r ); 26 | READ16_HANDLER( AY8910_read_port_4_lsb_r ); 27 | READ16_HANDLER( AY8910_read_port_0_msb_r ); 28 | READ16_HANDLER( AY8910_read_port_1_msb_r ); 29 | READ16_HANDLER( AY8910_read_port_2_msb_r ); 30 | READ16_HANDLER( AY8910_read_port_3_msb_r ); 31 | READ16_HANDLER( AY8910_read_port_4_msb_r ); 32 | 33 | WRITE8_HANDLER( AY8910_control_port_0_w ); 34 | WRITE8_HANDLER( AY8910_control_port_1_w ); 35 | WRITE8_HANDLER( AY8910_control_port_2_w ); 36 | WRITE8_HANDLER( AY8910_control_port_3_w ); 37 | WRITE8_HANDLER( AY8910_control_port_4_w ); 38 | WRITE16_HANDLER( AY8910_control_port_0_lsb_w ); 39 | WRITE16_HANDLER( AY8910_control_port_1_lsb_w ); 40 | WRITE16_HANDLER( AY8910_control_port_2_lsb_w ); 41 | WRITE16_HANDLER( AY8910_control_port_3_lsb_w ); 42 | WRITE16_HANDLER( AY8910_control_port_4_lsb_w ); 43 | WRITE16_HANDLER( AY8910_control_port_0_msb_w ); 44 | WRITE16_HANDLER( AY8910_control_port_1_msb_w ); 45 | WRITE16_HANDLER( AY8910_control_port_2_msb_w ); 46 | WRITE16_HANDLER( AY8910_control_port_3_msb_w ); 47 | WRITE16_HANDLER( AY8910_control_port_4_msb_w ); 48 | 49 | WRITE8_HANDLER( AY8910_write_port_0_w ); 50 | WRITE8_HANDLER( AY8910_write_port_1_w ); 51 | WRITE8_HANDLER( AY8910_write_port_2_w ); 52 | WRITE8_HANDLER( AY8910_write_port_3_w ); 53 | WRITE8_HANDLER( AY8910_write_port_4_w ); 54 | WRITE16_HANDLER( AY8910_write_port_0_lsb_w ); 55 | WRITE16_HANDLER( AY8910_write_port_1_lsb_w ); 56 | WRITE16_HANDLER( AY8910_write_port_2_lsb_w ); 57 | WRITE16_HANDLER( AY8910_write_port_3_lsb_w ); 58 | WRITE16_HANDLER( AY8910_write_port_4_lsb_w ); 59 | WRITE16_HANDLER( AY8910_write_port_0_msb_w ); 60 | WRITE16_HANDLER( AY8910_write_port_1_msb_w ); 61 | WRITE16_HANDLER( AY8910_write_port_2_msb_w ); 62 | WRITE16_HANDLER( AY8910_write_port_3_msb_w ); 63 | WRITE16_HANDLER( AY8910_write_port_4_msb_w ); 64 | 65 | /*********** An interface for SSG of YM2203 ***********/ 66 | 67 | void *ay8910_start_ym(int chip_type, int sndindex, int clock, int streams, 68 | read8_handler portAread, read8_handler portBread, 69 | write8_handler portAwrite, write8_handler portBwrite); 70 | 71 | void ay8910_stop_ym(void *chip); 72 | void ay8910_reset_ym(void *chip); 73 | void ay8910_set_clock_ym(void *chip, int clock); 74 | void ay8910_write_ym(void *chip, int addr, int data); 75 | int ay8910_read_ym(void *chip); 76 | 77 | #if 1 /* QUASI88 */ 78 | void ay8910_set_volume_ym(void *chip,int channel,float volume); 79 | #endif /* QUASI88 */ 80 | 81 | #endif 82 | -------------------------------------------------------------------------------- /src/snddrv/src/sound/flt_rc.c: -------------------------------------------------------------------------------- 1 | #include "sndintrf.h" 2 | #include "streams.h" 3 | #include "flt_rc.h" 4 | #include 5 | 6 | 7 | struct filter_rc_info 8 | { 9 | sound_stream * stream; 10 | int k; 11 | int memory; 12 | }; 13 | 14 | 15 | 16 | static void filter_rc_update(void *param, stream_sample_t **inputs, stream_sample_t **outputs, int samples) 17 | { 18 | stream_sample_t *src = inputs[0]; 19 | stream_sample_t *dst = outputs[0]; 20 | struct filter_rc_info *info = param; 21 | int memory = info->memory; 22 | 23 | while (samples--) 24 | { 25 | *dst++ = *src + ((memory - *src) * info->k) / 0x10000; 26 | memory = *src++; 27 | } 28 | info->memory = memory; 29 | } 30 | 31 | 32 | static void *filter_rc_start(int sndindex, int clock, const void *config) 33 | { 34 | struct filter_rc_info *info; 35 | 36 | info = auto_malloc(sizeof(*info)); 37 | memset(info, 0, sizeof(*info)); 38 | 39 | info->stream = stream_create(1, 1, Machine->sample_rate, info, filter_rc_update); 40 | 41 | return info; 42 | } 43 | 44 | 45 | void filter_rc_set_RC(int num, int R1, int R2, int R3, int C) 46 | { 47 | struct filter_rc_info *info = sndti_token(SOUND_FILTER_RC, num); 48 | float f_R1,f_R2,f_R3,f_C; 49 | float Req; 50 | 51 | if(!info) 52 | return; 53 | 54 | stream_update(info->stream); 55 | 56 | if (C == 0) 57 | { 58 | /* filter disabled */ 59 | info->k = 0; 60 | return; 61 | } 62 | 63 | f_R1 = R1; 64 | f_R2 = R2; 65 | f_R3 = R3; 66 | f_C = (float)C * 1E-12; /* convert pF to F */ 67 | 68 | /* Cut Frequency = 1/(2*Pi*Req*C) */ 69 | 70 | Req = (f_R1 * (f_R2 + f_R3)) / (f_R1 + f_R2 + f_R3); 71 | 72 | /* k = (1-(EXP(-TIMEDELTA/RC))) */ 73 | info->k = 0x10000 * (1 - (exp(-1 / (Req * f_C) / Machine->sample_rate))); 74 | } 75 | 76 | 77 | 78 | /************************************************************************** 79 | * Generic get_info 80 | **************************************************************************/ 81 | 82 | static void filter_rc_set_info(void *token, UINT32 state, sndinfo *info) 83 | { 84 | switch (state) 85 | { 86 | /* no parameters to set */ 87 | } 88 | } 89 | 90 | 91 | void filter_rc_get_info(void *token, UINT32 state, sndinfo *info) 92 | { 93 | switch (state) 94 | { 95 | /* --- the following bits of info are returned as 64-bit signed integers --- */ 96 | 97 | /* --- the following bits of info are returned as pointers to data or functions --- */ 98 | case SNDINFO_PTR_SET_INFO: info->set_info = filter_rc_set_info; break; 99 | case SNDINFO_PTR_START: info->start = filter_rc_start; break; 100 | case SNDINFO_PTR_STOP: /* Nothing */ break; 101 | case SNDINFO_PTR_RESET: /* Nothing */ break; 102 | 103 | /* --- the following bits of info are returned as NULL-terminated strings --- */ 104 | case SNDINFO_STR_NAME: info->s = "RC Filter"; break; 105 | case SNDINFO_STR_CORE_FAMILY: info->s = "Filters"; break; 106 | case SNDINFO_STR_CORE_VERSION: info->s = "1.0"; break; 107 | case SNDINFO_STR_CORE_FILE: info->s = __FILE__; break; 108 | case SNDINFO_STR_CORE_CREDITS: info->s = "Copyright (c) 2004, The MAME Team"; break; 109 | } 110 | } 111 | 112 | -------------------------------------------------------------------------------- /src/snddrv/src/sound/flt_rc.h: -------------------------------------------------------------------------------- 1 | #ifndef FLT_RC_H 2 | #define FLT_RC_H 3 | 4 | /* 5 | signal >--R1--+--R2--+ 6 | | | 7 | C R3---> amp 8 | | | 9 | GND GND 10 | */ 11 | 12 | /* R1, R2, R3 in Ohm; C in pF */ 13 | /* set C = 0 to disable the filter */ 14 | void filter_rc_set_RC(int num, int R1, int R2, int R3, int C); 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /src/snddrv/src/sound/flt_vol.c: -------------------------------------------------------------------------------- 1 | #include "sndintrf.h" 2 | #include "streams.h" 3 | #include "flt_vol.h" 4 | 5 | 6 | struct filter_volume_info 7 | { 8 | sound_stream * stream; 9 | int gain; 10 | }; 11 | 12 | 13 | 14 | static void filter_volume_update(void *param, stream_sample_t **inputs, stream_sample_t **outputs, int samples) 15 | { 16 | stream_sample_t *src = inputs[0]; 17 | stream_sample_t *dst = outputs[0]; 18 | struct filter_volume_info *info = param; 19 | 20 | while (samples--) 21 | *dst++ = (*src++ * info->gain) >> 8; 22 | } 23 | 24 | 25 | static void *filter_volume_start(int sndindex, int clock, const void *config) 26 | { 27 | struct filter_volume_info *info; 28 | 29 | info = auto_malloc(sizeof(*info)); 30 | memset(info, 0, sizeof(*info)); 31 | 32 | info->gain = 0x100; 33 | info->stream = stream_create(1, 1, Machine->sample_rate, info, filter_volume_update); 34 | 35 | return info; 36 | } 37 | 38 | 39 | void flt_volume_set_volume(int num, float volume) 40 | { 41 | struct filter_volume_info *info = sndti_token(SOUND_FILTER_VOLUME, num); 42 | info->gain = (int)(volume * 256); 43 | } 44 | 45 | 46 | 47 | /************************************************************************** 48 | * Generic get_info 49 | **************************************************************************/ 50 | 51 | static void filter_volume_set_info(void *token, UINT32 state, sndinfo *info) 52 | { 53 | switch (state) 54 | { 55 | /* no parameters to set */ 56 | } 57 | } 58 | 59 | 60 | void filter_volume_get_info(void *token, UINT32 state, sndinfo *info) 61 | { 62 | switch (state) 63 | { 64 | /* --- the following bits of info are returned as 64-bit signed integers --- */ 65 | 66 | /* --- the following bits of info are returned as pointers to data or functions --- */ 67 | case SNDINFO_PTR_SET_INFO: info->set_info = filter_volume_set_info;break; 68 | case SNDINFO_PTR_START: info->start = filter_volume_start; break; 69 | case SNDINFO_PTR_STOP: /* Nothing */ break; 70 | case SNDINFO_PTR_RESET: /* Nothing */ break; 71 | 72 | /* --- the following bits of info are returned as NULL-terminated strings --- */ 73 | case SNDINFO_STR_NAME: info->s = "Volume Filter"; break; 74 | case SNDINFO_STR_CORE_FAMILY: info->s = "Filters"; break; 75 | case SNDINFO_STR_CORE_VERSION: info->s = "1.0"; break; 76 | case SNDINFO_STR_CORE_FILE: info->s = __FILE__; break; 77 | case SNDINFO_STR_CORE_CREDITS: info->s = "Copyright (c) 2004, The MAME Team"; break; 78 | } 79 | } 80 | 81 | -------------------------------------------------------------------------------- /src/snddrv/src/sound/flt_vol.h: -------------------------------------------------------------------------------- 1 | #ifndef FLT_VOL_H 2 | #define FLT_VOL_H 3 | 4 | void flt_volume_set_volume(int num, float volume); 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /src/snddrv/src/sound/samples.h: -------------------------------------------------------------------------------- 1 | #ifndef SAMPLES_H 2 | #define SAMPLES_H 3 | 4 | struct loaded_sample 5 | { 6 | int length; /* length in samples */ 7 | int frequency; /* frequency of the sample */ 8 | INT16 * data; /* 16-bit signed data */ 9 | }; 10 | 11 | struct loaded_samples 12 | { 13 | int total; /* number of samples */ 14 | struct loaded_sample sample[1]; /* array of samples */ 15 | }; 16 | 17 | struct Samplesinterface 18 | { 19 | int channels; /* number of discrete audio channels needed */ 20 | const char **samplenames; 21 | void (*start)(void); 22 | }; 23 | 24 | 25 | void sample_start_n(int num,int channel,int samplenum,int loop); 26 | void sample_start_raw_n(int num,int channel,INT16 *sampledata,int samples,int frequency,int loop); 27 | void sample_set_freq_n(int num,int channel,int freq); 28 | void sample_set_volume_n(int num,int channel,float volume); 29 | void sample_set_pause_n(int num,int channel,int pause); 30 | void sample_stop_n(int num,int channel); 31 | int sample_get_base_freq_n(int num,int channel); 32 | int sample_playing_n(int num,int channel); 33 | int sample_loaded_n(int num,int samplenum); 34 | 35 | /* shortcuts for backwards compatibilty */ 36 | void sample_start(int channel,int samplenum,int loop); 37 | void sample_start_raw(int channel,INT16 *sampledata,int samples,int frequency,int loop); 38 | void sample_set_freq(int channel,int freq); 39 | void sample_set_volume(int channel,float volume); 40 | void sample_set_pause(int channel,int pause); 41 | void sample_stop(int channel); 42 | int sample_get_base_freq(int channel); 43 | int sample_playing(int channel); 44 | int sample_loaded(int samplenum); 45 | 46 | /* helper function that reads samples from disk - this can be used by other */ 47 | /* drivers as well (e.g. a sound chip emulator needing drum samples) */ 48 | struct loaded_samples *readsamples(const char **samplenames, const char *name); 49 | 50 | #endif 51 | -------------------------------------------------------------------------------- /src/snddrv/src/sound/wavwrite.h: -------------------------------------------------------------------------------- 1 | #ifndef WAVWRITE_H 2 | #define WAVWRITE_H 3 | 4 | typedef struct _wav_file wav_file; 5 | 6 | wav_file *wav_open(const char *filename, int sample_rate, int channels); 7 | void wav_close(wav_file*wavptr); 8 | 9 | void wav_add_data_16(wav_file *wavptr, INT16 *data, int samples); 10 | void wav_add_data_32(wav_file *wavptr, INT32 *data, int samples, int shift); 11 | void wav_add_data_16lr(wav_file *wavptr, INT16 *left, INT16 *right, int samples); 12 | void wav_add_data_32lr(wav_file *wavptr, INT32 *left, INT32 *right, int samples, int shift); 13 | 14 | #endif /* WAVWRITE_H */ 15 | -------------------------------------------------------------------------------- /src/snddrv/src/state.h: -------------------------------------------------------------------------------- 1 | #include "mame-quasi88.h" 2 | -------------------------------------------------------------------------------- /src/snddrv/src/streams.h: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | 3 | streams.h 4 | 5 | Handle general purpose audio streams 6 | 7 | Copyright (c) 1996-2007, Nicola Salmoria and the MAME Team. 8 | Visit http://mamedev.org for licensing and usage restrictions. 9 | 10 | ***************************************************************************/ 11 | 12 | #ifndef STREAMS_H 13 | #define STREAMS_H 14 | 15 | #include "mamecore.h" 16 | 17 | 18 | /*************************************************************************** 19 | TYPE DEFINITIONS 20 | ***************************************************************************/ 21 | 22 | typedef struct _sound_stream sound_stream; 23 | 24 | typedef void (*stream_callback)(void *param, stream_sample_t **inputs, stream_sample_t **outputs, int samples); 25 | 26 | 27 | 28 | /*************************************************************************** 29 | FUNCTION PROTOTYPES 30 | ***************************************************************************/ 31 | 32 | int streams_init(void); 33 | void streams_set_tag(void *streamtag); 34 | void streams_frame_update(void); 35 | 36 | /* core stream configuration and operation */ 37 | sound_stream *stream_create(int inputs, int outputs, int sample_rate, void *param, stream_callback callback); 38 | void stream_set_input(sound_stream *stream, int index, sound_stream *input_stream, int output_index, float gain); 39 | void stream_update(sound_stream *stream); /* min_interval is in usec */ 40 | stream_sample_t *stream_consume_output(sound_stream *stream, int output, int samples); 41 | 42 | /* utilities for accessing a particular stream */ 43 | sound_stream *stream_find_by_tag(void *streamtag, int streamindex); 44 | int stream_get_inputs(sound_stream *stream); 45 | int stream_get_outputs(sound_stream *stream); 46 | void stream_set_input_gain(sound_stream *stream, int input, float gain); 47 | void stream_set_output_gain(sound_stream *stream, int output, float gain); 48 | void stream_set_sample_rate(sound_stream *stream, int sample_rate); 49 | 50 | #endif 51 | -------------------------------------------------------------------------------- /src/snddrv/src/timer.h: -------------------------------------------------------------------------------- 1 | #include "mame-quasi88.h" 2 | -------------------------------------------------------------------------------- /src/soundbd.h: -------------------------------------------------------------------------------- 1 | #ifndef SOUND_H_INCLUDED 2 | #define SOUND_H_INCLUDED 3 | 4 | 5 | extern int sound_board; /* サウンドボード */ 6 | 7 | #define SD_PORT_44_45 (0x01) /* ポート 44H〜45H 使用 */ 8 | #define SD_PORT_46_47 (0x02) /* ポート 46H〜47H 使用 */ 9 | #define SD_PORT_A8_AD (0x04) /* ポート A8H〜ADH 使用 */ 10 | extern int sound_port; /* サウンドポートの種別 */ 11 | 12 | extern int intr_sound_enable; /* 割込マスク音源 */ 13 | 14 | 15 | 16 | 17 | extern int sound_ENABLE_A; /* サウンドタイマー許可状況 */ 18 | extern int sound_ENABLE_B; 19 | extern int sound_LOAD_A; /* サウンドタイマー作動状況 */ 20 | extern int sound_LOAD_B; 21 | extern int sound_FLAG_A; /* FLAG の状態 */ 22 | extern int sound_FLAG_B; 23 | 24 | extern int sound_TIMER_A; /* サウンドタイマー割込間隔 */ 25 | extern int sound_TIMER_B; 26 | 27 | extern int sound_prescaler; /* 1/プリスケーラー (2,3,6) */ 28 | 29 | extern byte sound_reg[0x100]; 30 | extern int sound_reg_select; 31 | 32 | 33 | extern int sound2_MSK_TA; /* TIMER A 割り込みマスク */ 34 | extern int sound2_MSK_TB; /* TIMER B 割り込みマスク */ 35 | extern int sound2_MSK_EOS; /* EOS 割り込みマスク */ 36 | extern int sound2_MSK_BRDY; /* BRDY 割り込みマスク */ 37 | extern int sound2_MSK_ZERO; /* ZERO 割り込みマスク */ 38 | 39 | extern int sound2_EN_TA; /* TIMER A 割り込み許可 */ 40 | extern int sound2_EN_TB; /* TIMER B 割り込み許可 */ 41 | extern int sound2_EN_EOS; /* EOS 割り込み許可 */ 42 | extern int sound2_EN_BRDY; /* BDRY 割り込み許可 */ 43 | extern int sound2_EN_ZERO; /* ZERO 割り込み許可 */ 44 | 45 | extern int sound2_FLAG_EOS; /* FLAG EOS の状態 */ 46 | extern int sound2_FLAG_BRDY; /* FLAG BRDY の状態 */ 47 | extern int sound2_FLAG_ZERO; /* FLAG ZERO の状態 */ 48 | extern int sound2_FLAG_PCMBSY; /* FLAG PCMBSY の状態 */ 49 | 50 | extern byte sound2_reg[0x100]; 51 | extern int sound2_reg_select; 52 | extern byte *sound2_adpcm; /* ADPCM用 DRAM (256KB) */ 53 | 54 | extern int sound2_repeat; /* ADPCM リピートプレイ */ 55 | extern int sound2_intr_base; /* ADPCM 割り込みレート */ 56 | extern int sound2_notice_EOS; /* EOSチェックの要不要 */ 57 | 58 | 59 | 60 | extern int use_cmdsing; /* 真で、CMD SING有効 */ 61 | 62 | 63 | 64 | void sound_board_init( void ); 65 | 66 | void sound_out_reg( byte data ); 67 | void sound_out_data( byte data ); 68 | byte sound_in_status( void ); 69 | byte sound_in_data( int always_sound_II ); 70 | void sound2_out_reg( byte data ); 71 | void sound2_out_data( byte data ); 72 | byte sound2_in_status( void ); 73 | byte sound2_in_data( void ); 74 | 75 | 76 | void sound_output_after_stateload( void ); 77 | 78 | #endif /* SOUND_H_INCLUDED */ 79 | -------------------------------------------------------------------------------- /src/status.h: -------------------------------------------------------------------------------- 1 | #ifndef STATUS_H_INCLUDED 2 | #define STATUS_H_INCLUDED 3 | 4 | 5 | extern int status_imagename; /* イメージ名表示有無 */ 6 | 7 | 8 | typedef struct { 9 | byte *pixmap; /* ステータスのイメージ用バッファ */ 10 | int w; /* イメージ表示サイズ 幅 0〜 */ 11 | int h; /* 高 */ 12 | } T_STATUS_INFO; 13 | 14 | extern T_STATUS_INFO status_info[3]; 15 | 16 | 17 | #define STATUS_INFO_TIME (55 * 3) /* 標準の表示時間 約3秒 */ 18 | #define STATUS_WARN_TIME (55 * 10) /* 警告の表示時間 約10秒 */ 19 | 20 | 21 | void status_init(void); 22 | void status_setup(int show); 23 | void status_update(void); 24 | 25 | void status_message_default(int pos, const char *msg); 26 | void status_message(int pos, int frames, const char *msg); 27 | 28 | 29 | #endif /* STATUS_H_INCLUDED */ 30 | -------------------------------------------------------------------------------- /src/suspend.h: -------------------------------------------------------------------------------- 1 | #ifndef SUSPEND_H_INCLUDED 2 | #define SUSPEND_H_INCLUDED 3 | 4 | #include 5 | #include "file-op.h" 6 | 7 | 8 | #if 0 /* → file-op.h */ 9 | extern char file_state[QUASI88_MAX_FILENAME]; /* ステートファイル名 */ 10 | #endif 11 | 12 | extern int resume_flag; /* 起動時のレジューム */ 13 | extern int resume_force; /* 強制レジューム */ 14 | extern int resume_file; /* ファイル名指定あり */ 15 | 16 | 17 | 18 | /* ステートファイルのヘッダ内容 */ 19 | 20 | #define STATE_ID "QUASI88" /* 識別子 */ 21 | #define STATE_VER "0.6.0" /* ファイルバージョン */ 22 | #define STATE_REV "1" /* 変更バージョン */ 23 | 24 | 25 | 26 | 27 | typedef struct{ 28 | enum { 29 | TYPE_INT, 30 | TYPE_LONG, 31 | TYPE_SHORT, 32 | TYPE_CHAR, 33 | TYPE_BYTE, 34 | TYPE_WORD, 35 | TYPE_PAIR, 36 | TYPE_DOUBLE, 37 | TYPE_256, 38 | TYPE_STR, 39 | TYPE_END 40 | } type; 41 | void *work; 42 | } T_SUSPEND_W; 43 | 44 | 45 | int stateload_emu( void ); 46 | int stateload_memory( void ); 47 | int stateload_pc88main( void ); 48 | int stateload_crtcdmac( void ); 49 | int stateload_sound( void ); 50 | int stateload_pio( void ); 51 | int stateload_screen( void ); 52 | int stateload_intr( void ); 53 | int stateload_keyboard( void ); 54 | int stateload_pc88sub( void ); 55 | int stateload_fdc( void ); 56 | int stateload_system( void ); 57 | 58 | int statesave_emu( void ); 59 | int statesave_memory( void ); 60 | int statesave_pc88main( void ); 61 | int statesave_crtcdmac( void ); 62 | int statesave_sound( void ); 63 | int statesave_pio( void ); 64 | int statesave_screen( void ); 65 | int statesave_intr( void ); 66 | int statesave_keyboard( void ); 67 | int statesave_pc88sub( void ); 68 | int statesave_fdc( void ); 69 | int statesave_system( void ); 70 | 71 | 72 | 73 | 74 | 75 | void filename_init_state(int synchronize); 76 | const char *filename_get_state(void); 77 | int filename_get_state_serial(void); 78 | void filename_set_state(const char *filename); 79 | void filename_set_state_serial(int serial); 80 | 81 | 82 | void stateload_init( void ); 83 | int statesave_by_fp(OSD_FILE *fp); 84 | int statesave( void ); 85 | int stateload_by_fp( OSD_FILE *fp ); 86 | int stateload( void ); 87 | int statesave_check_file_exist(void); 88 | int stateload_check_file_exist(void); 89 | 90 | int statefile_revision( void ); 91 | 92 | #define STATE_OK (0) /* ロード/セーブ正常終了 */ 93 | #define STATE_ERR (-1) /* ロード/セーブ異常終了 */ 94 | #define STATE_ERR_ID (-2) /* ロード時 ID見つからず */ 95 | #define STATE_ERR_SIZE (-3) /* ロード時 サイズ不整合 */ 96 | int statesave_block( const char id[4], void *top, int size ); 97 | int stateload_block( const char id[4], void *top, int size ); 98 | 99 | int statesave_table( const char id[4], T_SUSPEND_W *tbl ); 100 | int stateload_table( const char id[4], T_SUSPEND_W *tbl ); 101 | 102 | 103 | #endif /* SUSPEND_H_INCLUDED */ 104 | -------------------------------------------------------------------------------- /src/version.h: -------------------------------------------------------------------------------- 1 | #ifndef VERSION_H 2 | #define VERSION_H 3 | 4 | #ifndef Q_TITLE 5 | #define Q_TITLE "QUASI88" 6 | #endif 7 | 8 | #ifndef Q_VERSION 9 | #define Q_VERSION "0.6.4" 10 | #endif 11 | 12 | #ifndef Q_COMMENT 13 | #define Q_COMMENT "" 14 | #endif 15 | 16 | 17 | 18 | 19 | #ifndef Q_COPYRIGHT 20 | #define Q_COPYRIGHT "(c) 1998-2013 S.Fukunaga" 21 | #endif 22 | 23 | #ifdef USE_SOUND 24 | #ifndef Q_MAME_COPYRIGHT 25 | #define Q_MAME_COPYRIGHT "Copyright (c) 1997-2007, Nicola Salmoria and the MAME team" 26 | #endif 27 | 28 | #ifdef USE_FMGEN 29 | #ifndef Q_FMGEN_COPYRIGHT 30 | #define Q_FMGEN_COPYRIGHT "Copyright (C) by cisc 1998, 2003." 31 | #endif 32 | #endif 33 | #endif 34 | 35 | #endif /* VERSION_H */ 36 | -------------------------------------------------------------------------------- /src/wait.h: -------------------------------------------------------------------------------- 1 | #ifndef WAIT_H_INCLUDED 2 | #define WAIT_H_INCLUDED 3 | 4 | 5 | /*********************************************************************** 6 | * ウェイト調整処理 (システム依存) 7 | ************************************************************************/ 8 | 9 | /**************************************************************************** 10 | * ウェイト調整処理の初期化/終了 11 | * 12 | * int wait_vsync_init(void) 13 | * システム依存のウェイト調整処理の初期化を行う。 14 | * 成功したら真、失敗したら偽を返す。 15 | * この関数は、起動時に 1回だけ呼び出される。 16 | * 17 | * void wait_vsync_exit(void) 18 | * システム依存のウェイト調整処理の後始末を行う。 19 | * この関数は、終了時に 1回だけ呼び出される。 20 | * 21 | *****************************************************************************/ 22 | int wait_vsync_init(void); 23 | void wait_vsync_exit(void); 24 | 25 | 26 | /**************************************************************************** 27 | * ウェイト調整処理の設定 28 | * 29 | * void wait_vsync_setup(long vsync_cycle_us, int do_sleep) 30 | * ウェイト調整処理の設定を行う。 31 | * 32 | * long vsync_cycle_us … ウェイトの周期 (us) 33 | * int do_sleep … 真なら、ウェイト中は CPU を Sleep させる。 34 | * (Sleep できない場合は、しなくてもよい) 35 | * 36 | * この関数は、各モード (エミュ/メニュー/一時停止) の開始時や、設定の 37 | * 変更時に呼び出される。 38 | * この関数が呼び出されたら、設定を変更してから、内部タイマーの初期化等を 39 | * 行い、ウェイトのタイミング合わせを開始する。 40 | * 41 | *****************************************************************************/ 42 | void wait_vsync_setup(long vsync_cycle_us, int do_sleep); 43 | 44 | 45 | /**************************************************************************** 46 | * ウェイト調整処理の実行 47 | * 48 | * int wait_vsync_update(void) 49 | * ウェイト調整を行う。 50 | * 前回この関数が呼ばれた時から、今回この関数が呼ばれた時までを計測し、 51 | * wait_vsync_setup() で設定した時間 vsync_cycle_us [μsec] が経過したかを 52 | * チェックする。 53 | * 54 | * まだ経過していない場合は、時間が経過するまで待つ。(wait_vsync_setup() 55 | * で設定した do_sleep に応じて、可能なら CPU を Sleep させて待つ) 56 | * 時間が経過したら、直ちに WAIT_JUST を返す。 57 | * 58 | * すでに経過している場合は、直ちに WAIT_OVER を返す。 59 | * (この時、ウェイト合わせのタイミングを再度調整してもよい。実装依存) 60 | * 61 | * なお、 WAIT_YET を返してはいけない。 62 | * 63 | *****************************************************************************/ 64 | enum { 65 | WAIT_YET, /* ウェイト まだ時間経過してない */ 66 | WAIT_JUST, /* ちょうど時間になった */ 67 | WAIT_OVER /* 時間超過してる! */ 68 | }; 69 | int wait_vsync_update(void); 70 | 71 | #endif /* WAIT_H_INCLUDED */ 72 | -------------------------------------------------------------------------------- /src/z80.h: -------------------------------------------------------------------------------- 1 | #ifndef Z80_H_INCLUDED 2 | #define Z80_H_INCLUDED 3 | 4 | 5 | 6 | /* --- Z80 CPU のエミュレート構造体 --- */ 7 | 8 | typedef struct{ 9 | 10 | pair AF, BC, DE, HL; /* 汎用レジスタ */ 11 | pair IX, IY, PC, SP; /* 専用レジスタ */ 12 | pair AF1,BC1,DE1,HL1; /* 裏 レジスタ */ 13 | byte I, R; /* 特殊レジスタ */ 14 | byte R_saved; /* R reg - bit7 保存用 */ 15 | Uchar IFF,IFF2; /* IFF1 、IFF2 */ 16 | Uchar IM; /* 割込モード */ 17 | Uchar HALT; /* HALT フラグ */ 18 | 19 | int INT_active; 20 | int icount; /* 次の割込発生までのステート数 */ 21 | int state0; /* 処理した総ステート数 */ 22 | /* (z80->intr_update)()呼出時に初期化*/ 23 | 24 | int skip_intr_chk; 25 | 26 | Uchar log; /* 真ならデバッグ用のログを記録 */ 27 | Uchar break_if_halt; /* HALT時に処理ループから強制脱出*/ 28 | 29 | byte (*fetch)(word); 30 | byte (*mem_read)(word); /* メモリリード関数 */ 31 | void (*mem_write)(word,byte); /* メモリライト関数 */ 32 | byte (*io_read)(byte); /* I/O 入力関数 */ 33 | void (*io_write)(byte,byte); /* I/O 出力関数 */ 34 | 35 | void (*intr_update)(void); /* 割込情報更新関数 */ 36 | int (*intr_ack)(void); /* 割込応答関数 */ 37 | 38 | pair PC_prev; /* 直前の PC (モニタ用) */ 39 | 40 | } z80arch; 41 | 42 | 43 | /* IFF の中身 */ 44 | #define INT_DISABLE (0) 45 | #define INT_ENABLE (1) 46 | 47 | 48 | 49 | /*------------------------------------------------------------------------ 50 | * 現在処理中の CPU の動作を強制的に止めるためのマクロ 51 | *------------------------------------------------------------------------*/ 52 | 53 | extern int z80_state_goal; /* このstate数分、処理を繰り返す(0で無限) */ 54 | extern int z80_state_intchk; /* このstate数実行後、割込判定する */ 55 | 56 | 57 | /* PIO制御によるCPU切替時や、メニュー遷移時などに、CPU処理を強制的に停止 */ 58 | 59 | #define CPU_BREAKOFF() do{ z80_state_intchk = 0; z80_state_goal = 1; }while(0) 60 | 61 | /* 割込発生条件変更時に、CPU処理を強制的に 割込更新処理に分岐 */ 62 | 63 | #define CPU_REFRESH_INTERRUPT() do{ z80_state_intchk = 0; }while(0) 64 | 65 | 66 | 67 | 68 | extern void z80_reset( z80arch *z80 ); 69 | extern int z80_emu( z80arch *z80, int state_of_exec ); 70 | extern void z80_debug( z80arch *z80, char *mes ); 71 | extern int z80_line_disasm( z80arch *z80, word addr ); 72 | 73 | extern void z80_logging( z80arch *z80 ); 74 | 75 | 76 | 77 | #endif /* Z80_H_INCLUDED */ 78 | --------------------------------------------------------------------------------