ScratchData LogoScratchData
Back to Mario-098's profile

SFC emulator v.0.4 #ScratchInSFCProject

MAMario-098•Created August 3, 2023
SFC emulator v.0.4  #ScratchInSFCProject
12
11
139 views
View on Scratch

Instructions

 ScratchInSFCProjectへようこそ!  このプロジェクトは、scrachでSFC(Super Family Computer、スーパーファミコン)のエミュレーターを作ってしまおうというものです。  scrachはこんなこともできます!  自分もscrachの創造性の高さを広めたい!って方は、拡散する、開発者に入るなど、ぜひ、ご協力ください! Scratch on ! 【このエミュレーターについて】 scrachでSFC(Super Family Computer、スーパーファミコン)のエミュレーターです。 turbowarp推奨です https://turbowarp.org/879538463?stuck&turbo&fps=60 開発者へ:listを使った定義は一番上に出力が来ます。 【ROMのヘッダについて】 スーパーファミコンのROMは、ヘッダと呼ばれる基本情報を格納したデータ部分と、実際にゲームを動かすプログラムやグラフィックなどを格納したデータ部分に分かれています。ヘッダは、ROMの先頭にある場合と、ROMの末尾にある場合があります。ヘッダの有無や位置は、エミュレーターがROMを正しく読み込むために重要です。 ヘッダのサイズは、通常512バイトです。ヘッダには、以下のような情報が書かれています。 - ROMのタイトル(0x00~0x0F) - ROMのマッパー(0x15~0x16) - ROMのサイズ(0x17~0x18) - ROMのチェックサム(0x1C~0x1F) - その他の情報(0x20~0xFF) これらの情報は、固定されたバイト位置に書かれています。例えば、ROMのタイトルは、ヘッダの先頭から16バイト分に書かれています。ROMのタイトルは、ASCIIコードで表現されており、例えば「SUPER MARIO WORLD」なら、「53 55 50 45 52 20 4D 41 52 49 4F 20 57 4F 52 4C」のようになります。 ROMのマッパーは、ROMのデータをメモリに割り当てる方法を示す番号です。スーパーファミコンでは、様々なマッパーが使われており、それぞれに特徴や仕様があります。例えば、「LoROM」というマッパーは、「20」、「30」、「21」、「31」などの番号で表されます。マッパーは、ヘッダの21番目と22番目のバイトに書かれています。 ROMのサイズは、ROMの容量を示す番号です。スーパーファミコンでは、1メガビット(128キロバイト)単位で表されます。例えば、「08」という番号は、「8メガビット(1メガバイト)」を意味します。ROMのサイズは、ヘッダの23番目と24番目のバイトに書かれています。 ROMのチェックサムは、ROMのデータが正しいかどうかを確認するための値です。スーパーファミコンでは、16ビット(2バイト)のチェックサムとその補数が使われます。チェックサムは、ヘッダを除いた全てのデータを足し合わせたものです。チェックサムとその補数は、ヘッダの29番目から32番目までのバイトに書かれています。 その他の情報には、ROMの国別コードやライセンスコードなどが含まれます。これらの情報は、ヘッダの33番目から256番目までのバイトに書かれています。 - [SMC(SFC/SNES)ヘッダの付加・削除システム]は、スーパーファミコンのROMのヘッダについて、その有無や位置、内容などを説明しています。また、ヘッダを追加・削除するためのツールや方法も紹介しています。 - [SNES ROM Layout] は、スーパーファミコンのROMのフォーマットやマッパーについて、詳細に解説しています。また、ヘッダの各バイトの意味や値も示しています。 - [Super NES Programming]は、スーパーファミコンのプログラミングに関する情報をまとめたWikiです。ROMの仕様やヘッダの情報だけでなく、CPUやメモリやグラフィックなどのハードウェアやソフトウェアについても説明しています。 【ROM開発の仕方】 開発手順 1. スーパーファミコン用ヘッダファイルの設定 a. ROMサイズの定義 b. メモリを8 bitで扱うか、 16 bitで扱うか c. CPU動作クロック数 2. メイン関数作る, その他アセットを用意 3. コンパイル処理,、リンカファイル作成 によりROM化 ざっくり上記で, ヘッダファイルが作れればあとはコード書くだけ。しかし画像と か音声を配置するとなると, もうちょっといろいろある。 【ROMについてもっと詳しく】 - ROMのタイトルは、スーパーファミコンのゲームソフトの名前です。ROMのヘッダの先頭から16バイト分に書かれています。ASCIIコードで表現されており、最大15文字まで記述できます。最後の1バイトは空白(00)にする必要があります。例えば、「SUPER MARIO WORLD」なら、「53 55 50 45 52 20 4D 41 52 49 4F 20 57 4F 52 4C」のようになります。ROMのタイトルは、エミュレーターなどでゲームを選択するときに表示されることがあります。 - ROMのマッパーは、ROMのデータをメモリに割り当てる方法を示す番号です。スーパーファミコンでは、様々なマッパーが使われており、それぞれに特徴や仕様があります。例えば、「LoROM」というマッパーは、「20」、「30」、「21」、「31」などの番号で表されます。LoROMは、ROMのデータを32キロバイト単位でメモリに割り当てる方法です。ROMのマッパーは、ヘッダの21番目と22番目のバイトに書かれています。エミュレーターは、ROMのマッパーを読み取って、正しくメモリにデータをロードする必要があります。 - ROMのサイズは、ROMの容量を示す番号です。スーパーファミコンでは、1メガビット(128キロバイト)単位で表されます。例えば、「08」という番号は、「8メガビット(1メガバイト)」を意味します。ROMのサイズは、ヘッダの23番目と24番目のバイトに書かれています。エミュレーターは、ROMのサイズを読み取って、正しくデータを扱う必要があります。 - ROMのチェックサムは、ROMのデータが正しいかどうかを確認するための値です。スーパーファミコンでは、16ビット(2バイト)のチェックサムとその補数が使われます。チェックサムは、ヘッダを除いた全てのデータを足し合わせたものです。チェックサムとその補数は、ヘッダの29番目から32番目までのバイトに書かれています。エミュレーターは、ROMのチェックサムを計算して、正しい値と一致するかどうかを確認することができます。 - その他の情報には、ROMの国別コードやライセンスコードなどが含まれます。これらの情報は、ヘッダの33番目から256番目までのバイトに書かれています。国別コードは、ROMが対応する国や地域を示す番号です。例えば、「01」という番号は、「日本」を意味します。ライセンスコードは、ROMが誰によって作られたかを示す番号です。例えば、「01」という番号は、「任天堂」を意味します。 【】 スーパーファミコンのROMは、ヘッダと呼ばれる基本情報を格納したデータ部分と、実際にゲームを動かすプログラムやグラフィックなどを格納したデータ部分に分かれています。ヘッダは、ROMの先頭にある場合と、ROMの末尾にある場合があります。ヘッダの有無や位置は、エミュレーターがROMを正しく読み込むために重要です。 ヘッダのサイズは、通常512バイトです。ヘッダには、ROMのタイトルやマッパーなどの情報が書かれています。これらの情報は、固定されたバイト位置に書かれています。例えば、ROMのタイトルは、ヘッダの先頭から16バイト分に書かれています。 プログラムやグラフィックなどのデータ部分は、ヘッダの次から始まります。データ部分のサイズは、ROMの容量によって異なります。スーパーファミコンでは、1メガビット(128キロバイト)単位で表されます。例えば、「08」という番号は、「8メガビット(1メガバイト)」を意味します。 データ部分は、さらにPRG-ROMとCHR-ROMに分かれます。PRG-ROMは、プログラムや音楽などを格納したデータです。CHR-ROMは、キャラクターや背景などのグラフィックを格納したデータです。PRG-ROMとCHR-ROMのサイズや位置は、ROMのマッパーによって決まります。 マッパーとは、ROMのデータをメモリに割り当てる方法を示す番号です。スーパーファミコンでは、様々なマッパーが使われており、それぞれに特徴や仕様があります。例えば、「LoROM」というマッパーは、「20」、「30」、「21」、「31」などの番号で表されます。LoROMは、ROMのデータを32キロバイト単位でメモリに割り当てる方法です。 プログラムやグラフィックなどのデータは、CPU 65816向けのアセンブリ言語で記述されています。アセンブリ言語は、CPUが直接理解できる命令を人間が読み書きできるようにしたものです。アセンブリ言語は、高級言語と比べて非常に低レベルで、機械に近い表現です。 アセンブリ言語で記述されたデータは、バイナリ形式に変換されてROMに書き込まれます。これを行うためには、アセンブラというツールを使います。アセンブラは、アセンブリ言語で書かれたソースコードをバイナリコードに変換するプログラムです。 バイナリ形式に変換されたデータは、CPUが読み取って実行します。CPUは、命令コードと呼ばれるバイナリ値を解釈して動作します。命令コードは、CPUが行うべき操作や対象となるレジスタやメモリなどを示します。例えば、「A9 01」というバイナリ値は、「A9」が「即値をAレジスタにロードする」という命令コードで、「01」がその即値を示します。 以上が、スーパーファミコンのROMで、ゲームのプログラムが書いてある領域と、そのプログラムの解釈の仕方です。もっと詳しく知りたい場合は、以下のサイトや文献を参考にしてください。 - [スーパーファミコンROM作り方/how-to-make-snes-rom](1^) は、スーパーファミコンのアーキテクチャやメモリマップ、ROMのフォーマットやマッパーなどについて、スライド形式で分かりやすく解説しています。 - [SNES ROM Layout](^2) は、スーパーファミコンのROMのフォーマットやマッパーについて、詳細に解説しています。また、ヘッダの各バイトの意味や値も示しています。 - [Super NES Programming](^3) は、スーパーファミコンのプログラミングに関する情報をまとめたWikiです。ROMの仕様やヘッダの情報だけでなく、CPUやメモリやグラフィックなどのハードウェアやソフトウェアについても説明しています。 【SFC】 メインプロセッサ リコー製 16bit 65816カスタム 1.79~3.58MHz サウンドプロセッサ SCEI製 8bit SPC700 2.05MHz ROM 最大6144KB RAM WRAM:128KB, VRAM:64KB, サウンドRAM:64KB 解像度 256x224ピクセル 最大発色数 32768色 画面 最大4画面+スプライト同時表示可能, 拡大縮小回転機能 サウンド 8チャンネルのPCM音源 コントローラ 上, 下, 左, 右, A, B, X, Y, スタート, セレクト #ScratchInSFCProject

Description

2023年9月13日 - v.0.4 ROM file を bite ごとに読み取る機能を実装 2023年8月11日 - v.0.3.1 ASCII対応(テスト中) 2023年8月6日 - v.0.3 rom file 読み取りのための base64 デコーダー に8bit変換機をつけた 2023年8月5日 - v.0.2 rom file 読み取りのための base64 デコーダー を実装 2023年8月3日 - v.0.1 共有

Project Details

Project ID879538463
CreatedAugust 3, 2023
Last ModifiedJanuary 16, 2024
SharedAugust 3, 2023
Visibilityvisible
CommentsAllowed