ファミリーコンピューター(仮)


ファミコンのPPUへ ファミコン ディスクシステムへ ファミリー ベーシックへ ファミコン ステーション(仮)へ シャープ C1(仮)へ ファミリーコンピューターのスペック
CPU N2A03 1.789772MHz
PPU RP2C02
ROM 無し
RAM 2KB
V-RAM 2KB
CPUは6502の機能を一部削り、サウンドジェネレータ、スプライトDMA、I/Oポート等を追加かなりの機能を誇る。 ただし、コストダウンの為、本体はフルデコードされなかったり色々と機能が削られているのが不満といえば不満。
CPU周り    *CPU30ピンが/SPECIALとなっています。  未確認なのですがCPUの停止をするみたいです。(PC10で使用)  CPUによってはこの機能は無い可能性があります。(ファミコンでは関係はありません) ワークRAM    $0000−$07FFの2Kバイトなのですがデコードされていないので  $0800−$1FFFがミラーイメージになります。  ただしファミコン以外の機種ではデコードされているのもあります。
PPU周り    RP2C02の39ピンALEで下位アドレスバスとデータバスを切り換えて使用しているのがわかります。  PPU内のアドレスの設定が上位、下位の順からみると68系のMPU用として開発された?    $2000:PPUコントロール1(出力)        Bit7 VBLANK時にNMIの発生 (1=発生する、0=発生しない)        Bit6 PPU セレクト(1=スレーブ、0=マスター)        Bit5 スプライトサイズ(1=8×16、0=8×8)        Bit4 BGパターンテーブルアドレス(1=$1000、0=$0000)        Bit3 スプライトパターンテーブルアドレス(1=$1000、0=$0000)        Bit2 PPUアクセス時のアドレスの増加する値(1=+32、0=+1)        Bit1-0 基準ネームテーブル 11=$2C00                      10=$2800                      01=$2400                      00=$2000  $2001:PPUコントロール2(出力)        Bit7-5 RGB強調            (000:強調なし)        Bit4 スプライト表示           (1=表示する、0=表示しない)        Bit3 BG画面表示            (1=表示する、0=表示しない)        Bit2 画面左端8ドットのBGクリップ   (1=クリップしない、0=クリップする)        Bit1 画面左端8ドットのスプライトクリップ(1=クリップしない、0=クリップする)        Bit0 画面モード             (1=モノクロ、0=カラー)  $2002:PPUステータス(入力)        Bit7 VBLANK(1=VBLANK中  READ後クリアされる、1=スキャンライン描画中)        Bit6 スプライト#0ヒット (1=ヒット、0=ヒットしていない)        Bit5 スキャンラインスプライト数 (1=9個以上、0=8個以下)        Bit4 VRAM書き込みフラグ (1=書き込み不可、0=書き込み可)        Bit3-0 未使用  $2003:スプライトRAMアドレス(出力)   スプライトRAMにアクセスする場合にアドレスを指定する。  $2004;スプライトRAMアクセス(出力)   スプライトRAMにデータを出力します。  $2005:スクロール(出力)   $2002を読むとリセットされ、   その後、X方向スクロール値(0−255)   その次にY方向スクロール値(0−240)の順に書き込む。  $2006(出力) PPUアドレスレジスタ   PPU内のアドレスをセットします。   $2002を読み(リセット)、上位アドレス、下位アドレスでセットします。  $2007(出力) PPUデータセット   $2006でセットしたPPU内のアドレスのデータを書きます。  $2007(入力) PPUデータリード   $2006でセットしたPPU内のアドレスのデータを読みます(ただし一番最初のデータは無効なので最初は2回読む事が必要)
APUポート周り  $4000:APU Ch1矩形波        Bit7-6 デュティー比             11=25.0%             10=50.0%             01=75.0%             00=87.5%        Bit5  カウンタ (1=有効、0=無効)        Bit4  音響        Bit0-3 音量  $4001:APU Ch1矩形波        Bit7  周波数変化 (1=可変する、0=可変しない)        Bit6-4 周波数変化速度        Bit3  周波数変化 (1=増加する、0=減少する)        Bit2-0 周波数範囲  $4002:APU Ch1矩形波        周波数下位データ  $4003:APU Ch1矩形波        Bit7-3 再生時間        Bit0-3 周波数上位データ  $4004:APU Ch2矩形波        Bit7-6 デュティー比             11=25.0%             10=50.0%             01=75.0%             00=87.5%        Bit5  カウンタ (1=有効、0=無効)        Bit4  音響        Bit0-3 音量  $4005:APU Ch2矩形波        Bit7  周波数変化 (1=可変する、0=可変しない)        Bit6-4 周波数変化速度        Bit3  周波数変化 (1=増加する、0=減少する)        Bit2-0 周波数範囲  $4006:APU Ch2矩形波        周波数下位データ  $4007:APU Ch2矩形波        Bit7-3 再生時間        Bit0-3 周波数上位データ  $4008:APU Ch3三角波        Bit7  カウンタ (1=有効、0=無効)        Bit6-0 再生時間  $4009:APU Ch3三角波  $400A:APU Ch3三角波        周波数下位データ  $400B:APU Ch3三角波        Bit7-3 再生時間        Bit0-3 周波数上位データ  $400C:APU Ch4ノイズ  $400D:APU Ch4ノイズ  $400E:APU Ch4ノイズ  $400F:APU Ch4ノイズ  $4010:APU Ch5DMC  $4011:APU Ch5DMC  $4012:APU Ch5DMC  $4013:APU Ch5DMC  $4014:スプライトDMAレジスタ(出力)   CPUメモリからスプライトRAMへDMA転送を行います。   CPUメモリのアドレス上位をセットします。  $4015:APUチャンネル、IRQスイッチ        Bit7 IRQDMC ステータス        Bit6 IRQフレーム ステータス        Bit5        Bit4 Ch5DMC 1=オン、0=オフ        Bit3 Ch4ノイズ 1=オン、0=オフ        Bit2 Ch3三角波 1=オン、0=オフ        Bit1 Ch2矩形波 1=オン、0=オフ        Bit0 Ch1矩形波 1=オン、0=オフ
I/Oポート周り    40H368を使用しているためポートは1方向です。  $4016:INP0        Bit7 未使用        Bit6 未使用        Bit5 未使用        Bit4 未使用        Bit3 未使用        Bit2 MIC  (入力)|OUT2(出力)        Bit1 P0 D1(入力)|OUT1(出力)        Bit0 J1 D0(入力)|OUT0(出力)  $4017:INP1/OUTP        Bit7 未使用     |フレームシーケンサのモード        Bit6 未使用      |IRQ 1=禁止、0=許可(出力)        Bit5 未使用        Bit4 P1 D4  (入力)        Bit3 P1 D3   (入力)        Bit2 P1 D2   (入力)        Bit1 P1 D1  (入力)        Bit0 P1 D0,J2 D0 (入力)
コントローラ、その他    コントローラは4021を使用してパラレルからシリアルにして転送します。  内容は、Iコンの場合”A”,”B”、”SELECT”、”START”、”下”、”上”、”左”、”右”の順  1だとボタンが押されていない、0=ボタンが押されている  IIコンの場合”A”,”B”、0、0、”下”、”上”、”左”、”右”の順
カートリッジコネクタ  
カラオケスタジオの回路図    メインの回路図です。  尚BANK3は実際には使われていないので違う場合があります。  当然マッパの端子名は不明なので勝手につけています。   $6000:入力ポート?    Bit2:???IN0 マイク    Bit1:IN1 START (Bボタン)    Bit0:IN2 SELECT (Aボタン)   $C000:バンク切り換え用 ポート    Bit4:1=M ROM(本体ROM)、0=E ROM(専用カセット)    Bit3:BANK3    Bit2:BANK2    Bit1:BANK1    Bit0:BANK0  *回路図を見て分ると思いますが、画面のミラーリングはポートによって切り換えることが出来ます。   恐らく$C000のBit5か6ぐらいに当てはまると思いますが不明です。  後ろにさすオプションの回路図です。(ただし手持ちは試作品のボードなので市販品と若干違うと思われます。)
BB−10 バトルボックスの回路図    シリアルEEROMを2つ使用で16ビットモードなので128*16Bit*2つの容量(256ワード)です。   左のJKフリップ・フロップはOUT0が入力で2つあるシリアルEEROMのどちらかを選択します。   右のJKフリップ・フロップはP1 CLKが0から1になるたびにQと/Qの値が反転されます。   またOUT0は各シリアルEEROMの/CLKにも繋がっています。   シリアルEEROMにデータを書き込む    左のQはシリアルEEROMにデータを出力します。    左の/Qは$4017のBit4に繋がっており、データの出力した反対のデータを読むことが出来ます。    シリアルEEROMにデータ入力はP1 CLKで”1”と”0”が常にセットされることになります、    右のQと/Qは各EEROMの/CSなのでROMの選択。    OUT0がROMの選択、兼ROMの/CLKに使われます。    OUT0のデータをそのままにしておくとP1 CLKで動作する4027の出力データは反転されます。    したがってデータ入力はタイミングを見計らって($4017のBit4)、    シリアルEEROMの/CLK($4017のBit0)を制御する事になります。   シリアルEEROMのデータを読み込む    シリアルEEROMの/CLK($4017のBit0)を制御して、    P1 D3($4017のBit3)を読みます。 使用ポート  $4017    Bit7:−    Bit6:−    Bit5:−    Bit4:P1 D4 =DIの反転の状態で切り替わりのタイミングはP1 CLK(入力)    Bit3:P1 D3 =シリアルEEROMのDO(入力)    Bit2:−    Bit1:−    Bit0:P1 OUT0=シリアルEEROMの/CLK(出力)  シリアルEEROMなので/CLKとDIでコマンドを送ります。    Command1 Read     A0,A1,A2,A3,A4,A5,A6,0,1,0,0,0,0,0,0,0    Command2 Program     A0,A1,A2,A3,A4,A5,A6,0,0,1,1,0,0,0,0,0,D0,D1,D2,D3,D4,D5,..D14,D15    Command3 Chip Erase     /CLK*9,0,0,1,1,0,0,0,0    Command4 Busy Monitor     /CLK*9,1,0,1,1,0,0,0,0    Command5 E/W Enable     /CLK*9,1,0,0,1,0,0,0,0    Command6 Busy Monitor     /CLK*9,1,1,0,1,0,0,0,0
ターボファイル      74HC368がコントロール、74HC573でシリアル転送、  4024と4040でアドレスのカウンタを行います。  つまり、アドレスの指定してのアクセスは出来ませんので  アドレスカウンタをリセットして  最初のアドレスからアクセスしてアドレスをカウントしていくしかありません。   アドレスカウンタリセット         LDA #$002         STA $4016         NOP*6         LDA #$000         STA $4016         NOP*6   データリード         LDY #$08    LOOP:LDA $4017         AND #$04         LSR A         LSR A         ORA #$06         STA $4016         AND #$03         STA $4016         LSR A         ROR WRITE_DATA         DEY         BNE LOOP   データライト         LDY #$08    LOOP:LDA READ_DATA         AND #$01         ORA #$06         STA $4016         AND #$03         STA $4016         LSR READ_DATA         DEY         BNE LOOP
Home へ戻る