いまだにちゃんと動かないソフト/ハードの解析情報

概要

カラオケスタジオは1987年に発売された、マイクとサブカートリッジスロットを持つカートリッジ。

今回は Enri 氏の調査とほぼ同じなので、該当部分も参照すること。
http://www43.tok2.com/home/cmpslv/Famic/Famic.htm

wiring information (main cartridge)

PCB

  • name: 未記載
  • device: M60001-0115P, program ROM, Charcter RAM

memory controller

[label]
BANDAI
M60001-0115P
728100

[pinout]
PDIP 28 pin
 1 i? 青          |28 s   +5V
 2 i? 黄          |27 o  internal ROM EN#
 3 i? 橙          |26 o  external ROM EN#
 4 i  PPU A11     |25 o  VRAM A10
 5 i  PPU A10     |24 o  output PORT
 6 i  CPU ROM R/W |23 o  program ROM A14
 7 i  CPU ROMSEL# |22 o  program ROM A15
 8 i  CPU A14     |21 o  program ROM A16
 9 i  CPU A13     |20 o  program ROM A17
10 i  CPU A12     |19 ?
11 io CPU D0      |18 i  CPU D6
12 io CPU D1      |17 i  CPU D5
13 io CPU D2      |16 i  CPU D4
14 s  GND         |15 i  CPU D3

[凡例]
s: power supply
i: input
o: output
io: input and output

ピン番号別における特記事項
  • 1,2,3: マイクからのケーブルの色が基板上にレジストで漢字で書いてあるのでその表記にした
  • 19: L level 固定??
  • 20: main cartridge ROM には未接続。 external ROM 向け。
  • 24: output port だが、基板上には配線されてないので実質無効
  • 26,27: CPU address $8000-$ffff のデコードのみで、 R/W は無関係。よって write 時は bus 衝突する。

[代替論理式]
always @(posedge CPU_R/W) begin
	if(CPU_ROMSEL# == 1'b0) begin
		reg[6:0] <= CPU_D[6:0];
	end
end

PORT = reg[6];
VRAM_A10 = reg[5] == 1'b0 ? PPU_A10 : PPU_A11;
internal ROM EN# = ~(
	(CPU_ROMSEL# == 0 && CPU_A14 == 1) ||
	(reg[4] == 1'b1 && CPU_ROMSEL# == 0 && CPU_A14 == 0)
);
external ROM EN# = ~(
	reg[4] == 1'b0 && CPU_ROMSEL# == 0 && CPU_A14 == 0
);
program ROM A[17:14] = CPU_A14 == 0 ? reg[3:0] : 4'b1111; 
		//↑ reg[3:0] | 4{CPU_A[14]};
cpu_d[2:0] = (CPU_ROMSEL# == 1'b1 && CPU_A14 == 1'b1) ? {mic_ad, mic_b, mic_a} : 3'bzzz;

program ROM

Enri 氏の調査結果と同じなので省略

charcter RAM, 60pin edge connector

Enri 氏の調査結果と同じなので省略

wiring information (subcartridge, トップヒット20 Vol.1)

PCB

  • name: 未記載
  • device: ROM

ROM

BANDAI
87 KARAOKE A

ピン配置は, 28pin 1Mbit ROM と一般的な配置. 基板自体は 27C301 の接続を想定しており、program ROM A17 は基板内部に配置されていない。
他の人の調査(Enri氏とnesdev.FCdev の Guest 投稿)では 27C301 を使用しているようだ。

30pin edge connector

Enri 氏の調査結果にはピン番号の配置がない。
  • UP-RIGHT -> 1
  • UP-LEFT -> 15
  • DOWN-RIGHT -> 16
  • DOWN-LEFT ->30

software specification

memory map

[CPU - read]
$6000-$7fff MIC input
$8000-$bfff program ROM bank #0 (switchabale)
$c000-$ffff program ROM bank #1 (fixed, bottom page)

[CPU - write]
$8000-$ffff VRAM control, program ROM bank #0 register
$8000-$ffff ROM (bus conflict)

[PPU - read and write]
0x0000-0x1fff cartridge RAM
0x2000-0x2fff system VRAM

register

[MIC input]
address: CPU $6000-$7fff read
bit assignments
---------------
2   MIC input A/D coneveted data??? (おそらく 0:on, 1:off)
1   MIC button B
0   MIC button A

マイクに向けて声をいれて bit2 を見ると 0 になるようだ。

[VRAM control, program ROM bank #0 register]
address: CPU $8000-$ffff write (and read)
bit assignments
---------------
6   pin 24 output (disabled)
5   VRAM A10 connection (0:PPU A10, 1:PPU A11)
4   ROM select (0: sub cartridge, 1:main cartridge)
3:0 program ROM A17:14
  • busconflict があるので、sta $c000,x の形式で write する。
  • 実際の所は $8000-$ffff の領域で反応する。
  • bit6 は IC から出力されているが基板上でどこにも配線されてないので無効。

考察

2つの ROM と mirror について

sub, main の ROM の address MSB ともに A16 なので、 A17 は未デコードの為、2 つの mirror を持つ。 register に書かれる値とそれに対応する ROM は下記となる。

value
----------------------------
0x00-0x07 sub cartridge ROM
0x08-0x0f sub cartridge ROM (市販品2つはmirror)
0x10-0x17 main cartridge ROM
0x18-0x1f main cartridge ROM (mirror)

mapper 188 の image 構成

offset  length
---------------------------------
0x00000 0x00010 NES header
0x00010 0x20000 main cartridge ROM
0x20010 0x20000 sub cartridge ROM (optional)
  • 2つの mirror は含まず、 ROM select register とは逆の順番に持つので注意すること。
  • NES file はこのような ROM 構成を想定していないのでこのような無理のある構成になっている。
  • 再現度を上げるのであれば2つの ROM image は分離したほうがよい。

special thanks

  • 外道猫氏 (いつも希少品を提供していただきありがとうございます)
  • Enri 氏

メンバーのみ編集できます