メガドライブの検討 - カートリッジ編

検討するのがたのしいだけで、実際にはつくらないのであしからず。

http://www.ibiblio.org/pub/micro/games/sega/docs/hardware.txt

verilog もどきで表現してみる。

/C_OE

drives the cartridge ROM's output enable. It's taken low on
any 68000 read from locations $000000 to $0dfffff, but doesn't really
matter unless !C_CE is low.

if (rw == 0) && (address >= 0 && address[23:1] < 22'he0_0000)
	cce = 0;
else
	cce = 1;

/C_CE

C_CE is the cartridge ROM's chip enable, and is taken low when the
processor accesses memory locations $000000 to $3fffff.

if (address >=0 && address[23:1] < 22'h40_0000)
	coe = 0;
else
	coe = 1;

/LO_MEM

looks similar to !C_CE, but is taken low on accesses to
locations $000000 to $7fffff. I haven't tried tying anything to this
yet. Not used by the ROM.

if (address >=0 && address[23:1] < 22'h7f_0000)
	lomem = 0;
else
	lomem = 1;

ROM につながれてないので、ROM カートリッジ用途には不要?

CLK

CPU の clock 及び、 VDP の clock. ROM にはつながれていない。

/AS

68000 の /AS だが、ROM にはつながれていない。他の信号でデコードされているので不要。

/RESET

68000 の /RESET だが、ROM にはつながれていない(当たり前)。

/S_RESET, /H_RESET

ROM にはつながれていない。一部の flash memory に /RESET 端子があるからつなぐのもいいかもしれない。

/CART_IN

カートリッジ挿入検知らしい。

HS_CLOCK, VIDEO, VSync, HSync

メモリに関係ないので無視。

/LDSW, /UDSW

flash に重要な write 信号のことは詳細に書いてないのが常か...

LDSW = RW & LDS
UDSW = RW & UDS

RW & [LU]DS & AS じゃないの??

メガドライブの検討 - AVR編

  • PORT A:D0-D7
  • PORT B:D8-D15
  • PORT C
    • 0: Address Latch A1-A7, A8-15 (to 74574 x2)
    • 1: Address Latch A16-A23 (to 74574)
    • 2: /C_OE
    • 3: /C_CE
    • 4: /LO_MEM
    • 5: /AS
    • 6: /LDSW
    • 7: /UDSW
  • PORTD
    • 0: /CART_IN
    • 2: USB D+
    • 4: USB D-

残りは空き。 /AS がでてるのは救いだが、 R/W がでてないのがちょっとな...

address の latch は下記。

HC574_1_D[8:1] = cartridge_data[7:0];
HC574_1_CLK = portd0;
HC574_1_OE = 0;
cartridge_address[7:1] = HC574_1_Q[8:2];

HC574_2_D[8:1] = cartridge_data[15:8];
HC574_2_CLK = portd0;
HC574_2_OE = 0;
cartridge_address[15:8] = HC574_2_Q[8:1];

HC574_3_D[8:1] = cartridge_data[7:0];
HC574_3_CLK = portd1;
HC574_3_OE = 0;
cartridge_address[23:16] = HC574_3_Q[8:1];

メガドライブの検討 - flash 編

そもそもメガドライブflash cartrdige は怪しいアジア製品が存在しているので設計する必要がない気がする。

8bit memory x2

//flash memory for D0-D7
flash_low_address[19:0] = cartridge_address[20:1];
flash_low_data[7:0] = cartridge_data[7:0];
flash_low_oe = cartridge_coe & ~cartridge_ldsw;
flash_low_cs = cartridge_cce;
flash_low_we = cartridge_ldsw;

//flash memory for D15-D8
flash_high_address[19:0] = cartridge_address[20:1];
flash_high_data[7:0] = cartridge_data[15:8];
flash_high_oe = cartridge_coe & ~cartridge_udsw;
flash_high_cs = cartridge_cce;
flash_high_we = cartridge_udsw;

純粋な UDS と LDS がでてないから、正しく write できんな。仮に出来たら、 kazzo の CPU/PPU 並行みたいな形かな?

16bit memory x1

http://www.spansion.com/Products/Pages/ProductDetails.aspx?ProdID=Am29F160D
こいつかな。

flash_address[19:0] = cartridge_address[20:1];
flash_data[15:0] = cartridge_data[15:0];
flash_oe = cartridge_coe;
flash_cs = cartridge_cce;
flash_we = cartridge_ldsw & cartridge_udsw;
flash_wp = 1;
flash_byte = 1; //keep 16bit mode
flash_reset = cartridge_h_reset;

16bit flash memory のデータシートをはじめて見たけど、 byte/word programming をともにサポートしてる模様。byte/word 切り替え機能付きは必須ではないので word 専用メモリにしたほうがいいかも。

こっちならできそう。メガドライブはバンクを使っているソフトがほとんどないので、これを1つ作ればすべてできるって感じだと思う。あとは、データ量が多いので、 V-USB の USB 1.1 もどきよりかは、AT90USBxx2 の USB 2.0 を使うのが無難なんだろうな。

追記

MX29F1615 は dip で 27C160 (EPROM) と同じピン配置... なのだが、書き込みに 10 Volt が必要。昇圧するのもありだが、安定供給できなさそう。

そうなるとやはり表面実装なのでカートリッジの基板をおこすところからはじめる必要がある。当然ながら結構なコストがかかる。