Sweet Rammy
フラッシュカートリッジを持っている人の為のバックアップツールです。
大量のバス配線やAVR/PICの様なマイコンを使わないので簡単に出来ます。
一通り全てのSRAM・EEPROM・FRAMの読み書きと、一部のROMの読み出しが出来る様になる予定です。
Sweet Rammy is a backup tool for saved data of your Megadrive/Genesis cartridges.
If you have a flashcart and soldering skill,
you will backup SRAM, FRAM, EEPROM and ROM without large scale cart reader.
No 16bit data bus and 24bit address bus wiring, No AVR/PIC microcontroller is needed.
もしフラッシュカートリッジは持ってないけどメガCDなら持ってるという人は、
retrodevにメガCDを使ったバックアップツールがあるから、こっちの方が楽かも。
但しEEPROMの読み書きは出来ない様子。
If you have a Mega-CD/Sega-CD and not have a flashcart, please visit retrodev and review his cart dump tool.
http://www.retrodev.com/
開発のきっかけ
ぽんRev!! に 「メガドライブ セーブデータ読み書きの実験」 という話があって、
オリジナルのカートリッジに簡単にセーブデータを書き込めたら面白いなと思って、
実験してみたのが始まり。
「ぽんRev!! 個人的備忘録」の2011/09/30のログ
Download
開発者向けのベータバージョンです。
消えると困るセーブデータの読み書きには使わない方が良いでしょう。
Current version is Beta version. Do not use with your important carts.
Sweet Rammy Version 0.11
Sweet Rammy Version 0.12
Hardware
- メガドライブ本体に、68000をHALTさせるスイッチを1個付ける
(17番ピンをGNDに落とすとHALTする)
Attach a switch to 68000 HALT pin (When pull down the pin 17, 68000 take a halt state.) - メガドライブの2PポートとPCのCOMポートを繋ぐシリアルケーブル
Connect a cable (4800bps cable or AVR cable) to Player2 port and COM port of Windows PC. - 読み書きプログラムを焼いたカートリッジ
A flashcart with burned Sweet Rammy program. - オリジナルのカートリッジ
Original carts.
4800bps Cable (Low speed) and HALT Switch
AVR Cable (High speed, 115.2kbps)
First procedure
- 読み書きプログラムを焼いたフラッシュカートをメガドライブに差して起動します。
Insert a burned flashcart to Megadrive and power on. - HALTをONにします。
Switch HALT to enable. - オリジナルのカートリッジに差し替えます。
Remove the flashcart and insert a target cart. - HALTをOFFにします。
Switch HALT to disable. - PC側のターミナルソフトから以下の設定でメガドライブに接続します。
Connect to Megadrive/Genesis with the following settings. - 4800bps
- 8bit
- Parity = None
- Stop Bit = 1
- Flow Ctrl = Hardware
- Local Eco = Yes
- PC側のターミナルソフトから読み書きコマンドとデータを送ります。
Send commands and data form PC.
Reading procedure for SRAM
- Type "AT.000000"
- Type "RD.000000"
- Received reading data. (Hex form)
Writing procedure for SRAM
- Type "AT.000000"
- Type "WD.000000"
- Send text data. (Hex form, Not binary)
Task List
何するか忘れて、ぽんRev!!のログを探りまくる羽目になるので。ぉ
- 32kBytesを超えるデータを1度でSRAM/FRAMに書き込める → Version 0.07
- AVRをプログラムする → 組み込み中
- SDカードから転送する
- PS/2キーボードを繋ぐ
- バイナリー転送モード
- ファンタシースター復刻版に書き込む
- メガCDのSRAMを読み書きする
- 32XのBIOSを読み書きする
07/13/2013 - New Beta Version
長らく放置してたRammy、最近再開してます。
開発環境をRammyに向かないSGCCからGCCに変えて、手抜きだったUIを真面目に作ってます。
画面レイアウトが変わって、ウィンドウ枠が付いてます。
過去のバージョンは古いブラウン管テレビで表示させた時に、
文字が画面外になってしまう致命的な問題があったので。
「?」でヘルプを表示します。
Device = 29F Ok Address = 2M ← 数字に単位 (k, M) を付ける事が出来る。 Ok Length = 0x08 ← 「0x」と「$」で16進表記可能。 Ok Data bus=16 bit ← スペースとタブの有無は区別しない。 Ok Data FormaT = binarY ← 大文字・小文字は区別しない。 Ok read 007F7F202020202 Ok
コマンドは最後に改行を入れる事で確定になります。
改行コードは「CRLF」から「LF」に変わりました。
成功すると「Ok」が帰ってくる点は従来通りです。
10/13/2012 - Order made PCB
AVR Cableのプリント基板をぽんさんに作って貰った。(笑)
コネクターは秋月電子のD-Sub 9pin Femaleのシールドを剥がした物を使ってます。
09/14/2012 - PCB Layout for AVR Cable
AVR Cableのプリント基板を作る方法を考えて見た。
Atariコネクターの入手性に難があるんで、
D-Subのピンに合うピンソケットだけ用意して、そのピンソケットを基板に実装するのはどうかと思って見た。
で、この方法だと必然的に基板が垂直になるんで、
USBコネクターは下の方が安定するなと思った。
1Pと2Pまでの距離と、ポートのピンから床までの距離が結構あるから、
この方法でいけそうな予感がします。実寸でレイアウトした訳じゃないから予感だけど。
ちなみに組み立てる時は
- 表面実装部品を半田付けする
- ピンソケットをメガドライブのポートに刺す
- ピンソケットを半田付けする
- メガドライブのポートから抜く
- USBコネクターを半田付けする
08/18/2012 - Version 1.00の予定
Version 0.XX に見切りをつけて、Version 1.XX に移行しようとしている今日この頃。
今まで Sozobon C (SGCC) で開発してたのだけど、
ROM用に生成されたコードをRAMにロードして実行する為に割とウンコ臭い事してたのと、
SRAM読み書きしてみるテストが何時の間にか色々機能を後付けし続けてゴチャゴチャしまったから、
整理してGCCで開発する事にしました。
Version 1.XX系は多分こんな感じ。
- 主にGUI。 CUI付きにするか未定。
- パッド・セガマウス・PS/2マウス・PS/2キーボード・シリアルケーブルに対応したい。
- 入力・変換・出力の3項目を指定する。
- 変換ってのは、Hex → Bin とか。
変換に Bin → Hex を指定して出力にシリアルケーブルを指定すれば従来通りのダンプ方式。
変換無しでCOMポート出力ならバイナリーデータを受信出来る。 テキストより2倍早い。 - 気が向いたらSDカードと、Tape Dumpみたいな音声出力に対応したい。
- AVR Cableを高速化する。 メガドライブ - AVR 間のハンドシェイク方法を変える。 回路は変わらない。
- メガドライブ同士をシリアルケーブル接続して、 メガドライブ(1号) → メガドライブ(2号) と言う用途不明な転送が出来る。
- 開発者用に高速バスアダプターを作りたい。 メガドライブの拡張スロット使う方法で。
昔々、あるゲーム会社に居たプログラマーにスーファミソフトの開発環境を見せてもらった事があるけど、 なかなか使い易そうだったので。
08/01/2012 - Version 0.12
Version 0.12を公開しました。 AVRケーブルのファームウェアをメガドライブから書き込める様にしました。 使い方はReadMe.txt。 ファームウェア自体は今までと同じで何もバージョンアップしてないんで、 既にAVR Cableを作った人にとっては今の所様の無い機能です。 将来ファームウェア更新があった時に役に立つ機能です。 今の所マニュアル更新だけど、そのうち古いファームウェアだったら自動更新する様にしたいです。
07/16/2012 - USB to RS232C Cable
ぽんさんの方でやってた セラロックを使ったAVR Cableの動作テスト の結果。 どうやらセラロックでもさほど問題無い様です。 但し実験中にセラロックとは別の問題を見つけてしまって、 USB to RS232C Cableのいくつかはラミーで使えない事が判明しました。 但しラミーで使えないUSB to RS232C Cableはラミー以外のハードウェアでも使えない事が多いです。 と言うのも、ラミーで使えないUSB to RS232C Cableは具体的にはPL2303を使ったUSB to RS232C Cableで、 以下の致命的なバグを抱えています。
- RTS/CTSコントロール (ハードウェアフロー制御) が出来ない。 → 仕様?
- 特定の接続速度でバッファーにゴミが残る。
結果的にPL2303はソフトウェアフロー制御かフロー制御無しで且つ、
115.2kbps等のバグ付き接続速度を避ける事の出来る条件下でしか使えない事になります。
ちなみにFT232RL等を使ったUSB to RS232C Cableだとこれらのバグは無いです。
参考までに、FT232RLを使ったUSB to RS232C CableをAVR Cableに繋ぐんじゃなくて、
FT232RLをAVR Cableに組み込んで一体化した場合、以下の様な回路になるかと思います。
PL2303は自身のEEPROMに動作設定を記憶しているから、
組み立てたらメガドライブに繋がずにPCに繋いだ状態で、
動作設定を済ませないとエケないです。
詳しい事はぽんさんの
「FT232RLでRammyAVR、セラロック16MHzもOK」
にあります。
07/11/2012 - Version 0.11を再Upload
Version 0.11のZIPファイルに、リソースをリンクする前のバイナリーを入れてしまいました。
今ダウンロード出来るZIPファイルは修正済みです。(´ω`;)
ぽんさんの方で今、
セラロックを使ったAVR Cableの動作テスト
をしているのだけど、
どうやら115.2kbps@16MHzだとPCによってはデータ落ちするようです。
57.6kbpsや19.2kbpsに落として見るとどうでしょうね。
あんまし覚えてないけど57.6kbpsで転送速度が頭打ちだった気がしたから、
もしそうなら57.6kbpsでもさほど困らないですね。
AVR側には大き目のFIFO (送信128bytes/受信128bytes) を持たせてるから、
一応PCからメガドライブへ連続送信する時に最初の数百bytesだけフルスピードになると言う性質はあるのだけど、
数百bytesの差なんてほとんど判りません。w
で、今ELM ChaNの
AVPSP
をラミーに移植中。
ラミーにAVRプログラマーを内蔵させてます。
これが出来れば、AVRプログラマーを用意しなくてもAVR Cableを組み立ててラミーを起動するだけで勝手にプログラムされる様に出来ます。
07/10/2012 - Version 0.11
Version 0.11を公開しました。
前回言っていた
「バス幅が 8bit のFlash ROM 1個だけに対しても書き込みが出来る様に」
対応しました。
基本的に読み書き手順はPTコマンドの引数でFlash ROMを指定する以外、SRAMと同じです。
消去に関してはELコマンドの仕様が変わりました。
以下、下位8bitに割り当てたROM 1個のデータを消去して、書き読みする例。
PT.00029F ← デバイスタイプに29Fシリーズを指定する OK PB.000008 ← デバイスのバス幅を8bitとする OK P+.000002 ← 且つ、引数に0x000002を指定すると8bit FlashROM 1個に対する操作になる OK EL.000000 ← 引数が0x000000なら、下位8bitに割り当てたデバイスのデータをを削除 OK *** 書き込みテスト *** PW.000000 OK WD.000004AABBCCDD 0x000004 OK *** 読み込みテスト *** PR.000000 OK RD.000004 AABBCCDD OK
以下、上位8bitに割り当てたROM 1個のデータを消去して、書き読みする例。
PT.00029F OK PB.000008 ← デバイスのバス幅を8bitとする OK P+.000002 ← 且つ、引数に0x000002を指定すると8bit FlashROM 1個に対する操作になる OK EL.000001 ← 引数が0x000001なら、上位8bitに割り当てたデバイスのデータをを削除 OK *** 書き込みテスト *** PW.000001 ← 上位8bitに割り当てたデバイスに書き込むので引数は0x000001 OK WD.00000400112233 0x000004 OK *** 読み込みテスト *** PR.000001 ← 上位8bitに割り当てたデバイスから読み込むので引数は0x000001 OK RD.000004 00112233 OK
その他はReadMe.txtに書いてあります。
ちなみに今回のテストの為にこんなカートリッジを作りました。
既に日記の方で紹介したヤツだけど。
Version 0.10 の2段重ねFlashROMのテスト時にロックが掛かったままどうしようもなくなったEN29F002が載っていた基板からEN29F002を1個外して、PLCC 32pin ソケットを付けただけです。ソケット式だとデバイスを色々載せ変えてテスト出来るから便利ですね。
PLCC to DIP変換基板はaitendo製なのだけど、
aitendoでは配線の違いによって
- ピンアサインを変更しないPLCC to DIP変換基板
- ピンアサインがROM焼き器用になるPLCC to DIP変換基板
- ピンアサインがぐちゃぐちゃで用途不明なPLCC to DIP変換基板
そしてこのPLCC to DIP変換基板のカートリッジからはみ出たピンとカートリッジ基板を繋いでるのは、 絶縁体にNomex紙を使ったフラットケーブルです。 昔は秋葉原で中古を見かける事があったのだけど、もう無いですね。 安いしハサミで裂いてピン数を調整出来るから好きなのだけど。
05/08/2012 - Built on Rammy
Flash ROM の書き込みが出来る様になった事から、
汎用Flash ROM Programerとして注目され始めた様です。(笑)
そこで次回 Version 0.11 はちょっと仕様を変えて、
バス幅が 8bit のFlash ROM 1個だけに対しても書き込みが出来る様にしようと企んでいます。
合わせてラミーを汎用Flash ROM Programerもしくはマジコン的な使い方をする場合に限って
「カートリッジをぶっこ抜く時に斜めってるとハングする問題」
と
「メガドライブにHALTスイッチを付ける本体改造」
を回避する意味も含めて、
ラミーのROMと焼かれるROM (ターゲットROM)
が1つのカートリッジに搭載されたカートリッジの作り方を2通り考えて見ました。
ただ、
この回路で動くかどうか検証する為の材料を既に引っ越しのダンボールに詰め込んでしまってるから、
しばらくの間検証出来なさそうです・・・。(´ω`;)
まずシンプルにラミーROMとターゲットROMをスイッチで切り替える方法。
多分この回路をカートリッジに加えればOK。
で、スイッチなんてダセぇと言う方には、
多分この回路をカートリッジに加えれば、
コンソール上で切り替えられるかと思います。
この回路での切り替えは Version 0.10 でも可能だけど、
いちいちいくつもコマンドを打って切り替えるのは面倒だから、
Version 0.11 では以下の方法でも切り替えられる様にしようと思います。
- CH.000000でラミーROM、CH.000001でターゲットROMに切り替えられる。
- 起動時にBボタンが押されていると、Target ROMに切り替わる。
- ラミーROMの120bytes目を「SWeet」にしておくと、起動時に自動でターゲットROMに切り替わる。
3番目の手段については言い換えると、バイナリエディターで予め SRAM.BIN
の先頭から120bytes目の 「Sweet」 を 「SWeet」 に置換しておくと言う事になります。
ちなみにどちらも回路も、ターゲットROMに切り替えた状態でリセットボタンを押した場合、
ターゲットROMのバス幅が16bit (8bit x2個 か 16bit x1個) で且つメガドライブソフトのROMなら、
そのソフトが起動します。
(マジコン的な使い方)
05/02/2012 - PlayStation の MemoryCard
スケルトンなプレステのメモリーカードは中にFladhROMが2個乗ってるのが見えたから買ってみた。
50円。
SST29EE020 と W29EE012 が1個づつ乗ってます。
こいつらはページ単位で書き込むタイプだから Version 0.10 では使えないです。
オマケでPIC16C62Aも乗ってるけど、これは書き換え出来ないから役に立ちませんね。
05/01/2012 - PRO STRIKER と PHANTASY STAR II
最近分解したカートリッジ。
1つ目はファンタシースター2。
これは 8bit MaskROM が使われています。 1989年製です。
但しROM容量が 6Mbit と中途半端だから、
多分 256k x 8bit ROM と 512k x 8bit ROM を SEGA MPR-12377 で 768k x 16bit にまとめてる様な気がします。
SEGA MPR-12377 は裏面にもあります。
当時はICの数を増やしてでもMaskROMの容量が少ない方が安上がりだった様です。
もしこの予想が当ってたとすると、SRAMカートリッジは作れても、Flashカートリッジは作れないですね。
(FlashROMアドレスと68000から見たアドレスが違う)
2つ目はプロストライカー。
プロストライカー2がSRAMなのに対して、
プロストライカー未完全版とプロストライカー完全版はFRAMです。
で、このFRAMなのだけど、
容量は4kBytesしか無い上にアクセスタイムが 250ns とか 200ns とか異常に遅いから、
FRAMカートリッジは作れない罠。
8MHzで動いてる68000のプログラムROMとしては150nsくらい必要です。
ちなみにFRAMのデカップリング コンデンサーは2個刺さってます。
1個じゃ足りないようです。
大概のカートリッジ基板は2種類のコンデンサーの大きさに対応出来る様にスルーホールが3個空いてるけど、
実際には2個のコンデンサーを並列挿入出来る様に設計した方が現実的だった様です。
ちなみにこれって自動挿入出来ないよね?
03/28/2012 - うなぎの蒲焼 (2)
昨日の続き。
コマンドにオフセットを足さないとエケ無い事を忘れてました。
なのでやっぱり2段重ねFlashROMの読み書きはラミー側のバージョンアップが必要です。
Version 0.10の更新内容はELコマンドの変更だけです。
Version 0.09はELコマンドの引数が無かったから常に「EL.000000」としていたけど、
Version 0.10はELコマンドの引数として消去対象FlashROMの先頭アドレスを取るようになりました。
つまり2段重ねの2枚目以降は「EL.000000」では消去出来ません。
2枚目なら2枚目の消去対象FlashROMの先頭アドレスを指定する必要があります。
計算方法は「先頭アドレス = 128 * 1024 * f * (n - 1)」です。
f = FlashROM容量 (byte)、n = 何枚目のFlashROMか? です。
f は例えばMBM29F800みたいな 4M * 16bit のROMなら f = 8 になります。
EN29F002みたいな 2M * 8bit * 2個 のROMなら f = 4 になります。
引数は16進数で指定するから、Windowsの電卓を使って計算結果を16進数表示にすると良いでしょう。
そしてVersion 0.10と関係あるか分からないのだけど、
MBM29F800TA 1個のカートリッジでテストし終えた後、
EN29F002T 2個のカートリッジでテストしたら何でか2個の内の片方だけ、
プロテクト掛かった様な状態になってしまいました。
データとMfg IDの読み込みは出来るけど、消去と書き込みが出来ません。
物理的にどこか配線が取れたのか、チップ内部が壊れたのか謎です。
ちなみにプロテクトは+12Vを!RESETピンに入れられるようなハードウェアでないと出来ないから、
プロテクトは掛からないはず・・・。(´ω`;)
03/26/2012 - うなぎの蒲焼 (1)
元のカートリッジの半分の容量のFlashROMを2枚重ねて、
元のカートリッジと同じ容量にする方法。
多分この回路図であってるハズ・・・。まだ検証してないです。
ラミー側はFlashROM 1個の時と同じ様に書き込めば良いです。
特別な設定は要らないです。
03/23/2012 - Sound Rammy
少し前にSound Rammyと言う音声信号でSRAM/FlashMemoryカートリッジに書き込むシステムを思いついていたのだけど、
最近その回路図を少し考え直してみたら、
ロジックIC (NJU3714) 3個とアナログIC (LM339) 1個で済みそうな事が分かりました。
しかもこれらのICをカードエッジコネクターを取り囲む様に配置するから、
66%くらいのアドレス/データバス配線にジャンパー線を使わずに済みそうです。
以下メリット。
- IC 4個しか使わない (IC単価合計 = 500円)
- Retrode並みにコンパクト
- 配線が楽
- 配線を変えればBIOSプログラマー・他のゲーム機に対応可能
- 書き込み時のホストコンピューターは何でも良い (iPhone, Mac, CDプレーヤー...)
- ROMイメージを音声ファイル (.wav) に変換するプログラムがシンプルなので移植しやすい
以下デメリット。
- 書き込み速度が遅い
- 最大8Mbitまで、大容量カートリッジに対応しない
- 読み出し・ベリファイが出来ない
と言う事でSweet Rammyは少し放置して、Sound Rammy作ってみようと企んでいる今日この頃。
03/23/2012 - Sweet Rammy Version 0.09
やぁみんな。 良い子の見方、ラミーだよ。
Version 0.09を公開しました。
FlashMemoryの書き込みに対応しました。
詳しくは ReadMe.txt に書いてあるから、具体例だけ。
まず書き込みシーケンス。
PB.000008 ← 8bit x2個なら 0x000008, 16bit x1個なら 0x000016 OK PT.00029F ← 必ず 0x00029F (Device type = 29F/49F series) OK PW.000000 ← 試しにアドレス 0x000000 に書き込んでみる OK WD.0000080011223344556677 ← 試しに「0x0011223344556677」を書き込んでみる 0x000008 OK PR.000000 OK RD.000000 0011223344556677 ← 正常に読み出せた OK
次、消去シーケンス。
PB.000008 ← 8bit x2個なら 0x000008, 16bit x1個なら 0x000016 OK PT.00029F ← 必ず 0x00029F (Device type = 29F/49F series) OK EL.000000 ← 消去コマンド OK
ちなみに49Fと29Fの違いは、セクターサイズだけだと思う。
そしてKazzoと同じで使えるFlashMemoryと使えないFlashMemoryがありそうな気がします。
EN29F002Tとか8bitバスのFlashMemoryを2個使う場合 (PB.000008の時) は、
1個づつ消去・書き込みすると、16bitバスのFlashMemory 1個に比べて2倍時間が掛かるから、
2個同時に消去・書き込みしてます。
この都合上、WDコマンドで書き込むサイズも2bytes単位になります。
WD.000003とか奇数サイズを指定すると、端数が切り捨てられます。
03/20/2012 - Sweet Rammy Version 0.08
花粉が減ったらしく脳みそが動くようになったのでVersion 0.08を公開しました。 XModemはまだ実装していないです。 むしろXModemよりも先にFlashROMを焼く機能を付けてしまいそうです。
- メガドライブ側にもコンソールを表示した。
- Sweet RammyのROMイメージを32k x 16bit = 64kBytes ROMに納まるようにした。
実際のファイルサイズは128kBytesありますが、後半64kBytesはダミーデータです。 32k x 16bit = 64kBytes ROMに焼く時は、後半64kBytesで上書きされない様に注意して下さい。 これで元々32k x 8bitのSRAMが乗っているカートリッジに、 もう1個SRAMを足すと言う方法でもラミーを作れます。
03/16/2012 - 149円FlashROMカートリッジ (3)
ぽんさんの方で
説明されてる
からここで更に説明する必要は無いと思うけど、
一応aitendoのMBM29F800TA-70PFTNを買おうかどうか迷ってる人や、
何となく買って放置してる人の為に、ピンアインをPDIP/SOP互換にする図をこさえてみた。
03/15/2012 - 149円FlashROMカートリッジ (2)
99円のMBM29F800TAと50円のJリーグ基板を使った、149円FlashROMカートリッジの続き。
Jリーグカレーが1食130円だから、2食我慢すれば十分です。
半田付けが終わってテストしてみたら何をしても 0xFF しか読み出せなくて 「?」 と思ってたけど、
よく基板を眺めたら、左右を間違えて配線してる箇所がありました。
それを直したら素直にManufacture ID、全消去、プログラムが出来ました。
ところでこのMBM29F800TAはモーター制御プログラムが入っているのだけど、
何でモーター制御の為に8Mbitもある大容量ROMが必要なのだろうと思ってダンプしてみたら、
先頭14kBytesくらいしか使って無いのね。
あとの残りは全部 0xFF で埋まっています。(´ω`;)
ちなみにMBM29F800TAが載ってる変換基板の表面のピンは出っ張って邪魔だから、
ニッパーで切り落としました。
裏面の不要なピンも切り落として更にヤスリで思いっきり削って、
基板に当らない様にしてから半田付けしました。
更に、カートリッジの殻の内側の邪魔な所
(中央の●丸い出っ張りと、ネジ穴の通ってる柱の一部) もカッターで切り落としました。
こうしないとカートリッジの殻が閉じないです。
以下、EN29F002Tと同じくラミーでMBM29F800TAの各コマンドを実行する例。
[Read/Reset] 何かしたら1度リセットしないと期待通りに動かない。 pb.000016 pw.000AAA wd.00000200AA pw.000554 wd.0000020055 pw.000AAA wd.00000200F0 pr.000000 rd.000002 [AutoSelect Mfg ID] 0x04 が読み出せれば正常。 pb.000016 pw.000AAA wd.00000200AA pw.000554 wd.0000020055 pw.000AAA wd.0000020090 pr.000000 rd.000002 [Chip Elase] 消去後は 0xFF で埋まる。 最大で2分以上掛かる。 pb.000016 pw.000AAA wd.00000200AA pw.000554 wd.0000020055 pw.000AAA wd.0000020080 pw.000AAA wd.00000200AA pw.000554 wd.0000020055 pw.000AAA wd.0000020010 [Byte Program] アドレス 0x000000 に 0x1234 を書き込む例。 pb.000016 pw.000AAA wd.00000200AA pw.000554 wd.0000020055 pw.000AAA wd.00000200A0 pw.000000 wd.0000021234
で、EN29F002Tの時と同じ事をもう1回言うけど、 現行のラミーだと速度的にあまり実用的じゃないです。
03/14/2012 - 149円FlashROMカートリッジ (1)
今度はMBM29F800TAを使ったFlashROMカートリッジをこさえてみた。
デンセツノオトコDとかデンセツエノミチDとか数種類のギャンブル基板に載ってる1M x 16bit = 8Mbit ROMです。
aitendoで99円です。
aitendoはこいつらの在庫を時々チャージしてますね。
たまに200円の時があるから気を付けて下さい。
使った基板はJリーグカレーです。1食130円です。
秋葉原行くとこいつが50円で大量に転がってるから、
デンセツノオトコD 99円とJリーグ50円の合計149円でFlashROMカートリッジが作れます。
MBM29F800TAが載ってる変換基板は
ぽんさんのログ
の通りにピンスワップしてSOP/PDIP互換にしたら、そのままJリーグ基板にぽん付けです。
実際には1番ピン (RY/!BYピン) は未接続のままで良いです。
あとはJリーグ基板の42番ピン (A19ピン) に繋がってる配線パターンを切断して、
替わりにSRAMの!WEピンを結線します。
書き込みの時は常に16bitアクセスなのでこれで良いです。
MBM29F800TAの44番ピン (!RESETピン) はVccに繋ぎます。
03/07/2012 - EN29F002Tを使ったFlashROMカートリッジ (2)
EN29F002Tを使ったFlashROMカートリッジの、
下位バイトのEN29F002Tにコマンドを送る例。
上位バイトのEN29F002Tはアドレスが+1されます。
[Read and Reset] 各コマンドを実行する前にこのコマンドでEN29F002Tをリセットする。 pw.000000 wd.000001f0 pr.000000 rd.000001 [AutoSelect Mfr ID] 製造者IDを読み出す。 動作チェック用。 pw.00aaaa wd.000001aa pw.005554 wd.00000155 pw.00aaaa wd.00000190 pr.000000 rd.000001 (読み出した結果が 7F なら正常) [Chip Elase] フォーマットする。 しばらく時間がかかる。 pw.00aaaa wd.000001aa pw.005554 wd.00000155 pw.00aaaa wd.00000180 pw.00aaaa wd.000001aa pw.005554 wd.00000155 pw.00aaaa wd.00000110 [Byte Program] 1byte書き込む。1byte毎にこのコマンドが必要。 pw.00aaaa wd.000001aa pw.005554 wd.00000155 pw.00aaaa wd.000001a0 pw.?????? ← 書き込むアドレス。 16bitバスの下位8bitなので2倍する。 wd.000001?? ← 書き込む値。と説明してみたものの、 実際にはターミナルソフトのマクロで自動化したとしても速度的にあまり実用的じゃないですね。
03/03/2012 - EN29F002Tを使ったFlashROMカートリッジ (1)
何となくEN29F002Tを使ったFlashROMカートリッジを作ってみた。
ラミーを起動してコレを刺してコマンド送ればROMに書き込めます。
元々2Mbit ROMが2個載っていたやきうかゴルフのカセットにPLCCパッケージの2Mbit FlashROMを乗せたから、
配線はピンスワップが無くて楽でした。
※写真では1番ピンが未接続だけど、Vcc (+5V) へ接続しないと動きません。
実際に書き込む時は、ROMアドレスが違う事に気を付けて下さい。
例えばEN29F002Tのプログラムコマンドアドレスの1つ 0x2AAA は、
下位バイトに割り当てたEN29F002Tなら2倍の 0x5554 になります。
上位バイトに割り当てたEN29F002Tなら2倍 + 1 の 0x5555 になります。
って雑な説明してみたけど、
ラミー自体Flash ROMカートリッジが無いと動かせないから、
既にFlash ROMカートリッジを持ってるのに更にもう1つFlash ROMカートリッジを作る人はいなさそうですね。
メガドライブ用マジコン持ってる人が、
他のゲーム機のFlashROMカートリッジを作る手段としては使えそうですけど。
- オリジナル → 下位bit or 上位bit
- 0x5555 → 0xAAAA or 0xAAAB
- 0x2AAA → 0x5554 or 0x5555
所でEN29F002T、 データシートのページによってコマンドアドレスが違ってるのだけど、 コマンドとして認識する有効ビット数は12bitで良いみたいです。 今日は半田付けしただけで実際に書き込みテストしてないから、 自分が検証した訳では無いけど。
02/12/2012 - トランジスター版4800bpsケーブル
前回ブレッドボード上に組んだトランジスター版4800bpsケーブルを、基板上に組んで見ました。
74HC04や28pin AVRと違って、表面実装品やジャンピングワイヤー無しでもかなりコンパクトです。
02/03/2012 - トランジスター版4800bpsケーブル
回路図を追加しました。
4800bps ケーブルの今までの回路図は74HC14を使っていたのだけど、
74HC14の代わりにトランジスターを使った回路図も挙げてみました。
とりあえづ自分のPCにインストールしてあるRS232Cカードでは正常に通信できてます。
片方のトランジスターがプルアップされてないのは、
メガドライブ側に30kΩのプルアップがあるからです。
PC側が正常に受信出来ない場合は、
赤字の抵抗値を下げて見ると良いかも知れません。
ブレッドボードで組むとこんな感じ。
01/23/2012 - 花粉
ウチは花粉が富んでるこの時期はプログラム書かない習慣がある様です。
去年もBad Apple!!をこの時期に中断して忘れた頃に再開してましたね。(´ω`)
以下、最近思いついて少し考えてみた物。
・Sound Rammy
ヘッドフォンの音声出力でSRAMカートリッジにデータを書き込む変態システム。
iPhoneだのAndroidだのでも書き込めると言う、メリットかどうか分からない特徴があります。
マジコンやROM焼き出来る環境が無くても安上がりにSweet Rammyのカートリッジを用意出来る方法を考えて思いつきました。
でも回路図描いたら、割と部品数が多くて (74HCシリーズ6個 + オペアンプ1個) 、
「AVRプログラマー (74HCシリーズ1個) と、AVR搭載のSRAMカートリッジ作った方が簡単じゃん」
と言うオチでボツりました。
・Serial Rammy
Sound Rammyが音声なのに対して、こっちはシリアル通信でSRAMに書き個込むシステム。
シリアルはシリアルでも、専用の制御ソフトやマイコンを使わずに、ROMコンバーターソフトとターミナルソフトと74HCシリーズだけを使った物。
これも部品数が多いのが目に見えてるんで却下。
・Tape Rammy
Sound Rammy又はSerial Rammyを紙テープに対応させた物。
ウケ狙い。実用性はまったく無いです。
01/08/2012 - ラミー様とラミン様
Sweet Rammyと言う名前は30秒くらい考えて思い付いた適当な名前なのだけど、
同時にこんな感じのキャラクターも思い付いていたり。
初めからラベル用に描こうかと思っていたのだけど、
気が向いた時しか絵描かないから、今更になりました。
で、描いたからラベルも作れば良いのだけど、
これ描いた時点で力尽きました。ぉ
とりあえづ元データ置いておくから、もしラベル作りたいとか言う場合はどうぞ。
RAM15A.png
左がラミーで右がラミンなのだけど、ラミンのケツより下の部分はオマケだから、
使う時はこのカットみたいに足が見えない方がラミンが喜びます。(´ω`;)
01/01/2012 - TV側のコンソール表示
これ書こうとしてたら、M7.0の地震が来ました。
ウチの部屋の場合、ドアが少しの気圧の変化や微振動でもドタドタ言うから、
遠くで起きた地震なら大きな揺れが来る前にドアの音で分かる仕組み。
で、XMODEMのデバッグするのにメガドライブ側もコンソールが表示されている方が都合が良いから、
こんな感じで実装して見た。