コレコビジョン


コレコビジョンのスペック
CPUμPD780C−1(Z80A) 3.579MHz
VDPTMS9928A
PSGSN76489
ROM 8KB
RAM 1KB(拡張可)
VRAM16KB
後に日本で発売されるSG−1000に構造がよく似ている Z80にTMS9918A、SN76489の始祖的なハードともいえる 拡張性もあり、ハンドルコントローラはフットペダルがついていたり アーケードゲームの移植も結構出来が良かったりする   CPU CPUはザイログZ80Aを使用 クロックは約3.579MHz   VDP VDPはTI製TMS9928Aを使用、16KB   PSG SN76489、クロック3.759MHz MSBはD0、LSBはD7   BIOS (00000H〜01FFFH) 汎用ルーチン、文字フォントが入っています カードリッジが刺さってなければメッセージが出ます   RAM 本体RAMは2114*2の1Kバイト内蔵 06000H〜063FFHの1KB、 以降07FFFHまでミラーになります 実際アクセスしている領域は07000H〜073FFH   割り込み モード1を使用 /NMI VDP VBLANK割り込み (禁止はVDP R#1 d5(IE)=0) /INT 拡張端子に繋がっています     ROMカートリッジ (08000H〜0FFFFH) 08000Hから始まるようにして 最初のデータをIDデータとしてチェックして チェックが合えばROMカートリッジのスタートアドレスを読んで実行します チェックが合わない、ROMカートリッジが無い場合、 メッセージ画面を出して止まります   08000H〜8001H:055H、0AAH IDデータ 08002H〜8003H:スプライトネーム テーブル アドレス 08004H〜8005H:スプライトオーダ テーブル アドレス 08006H〜8007H:スプライト属性テーブルバッファ アドレス 08008H〜8009H:コントローラワーク アドレス 0800AH〜800BH:スタートアドレス 0800CH〜800EH:RST 008H エントリアドレス 0800FH〜8011H:RST 010H エントリアドレス 08012H〜8014H:RST 018H エントリアドレス 08015H〜8017H:RST 020H エントリアドレス 08018H〜801AH:RST 028H エントリアドレス 0801BH〜801DH:RST 030H エントリアドレス 0801EH〜8020H:    /INT エントリアドレス 08021H〜8023H:    /NMI エントリアドレス   08024H〜     :起動メッセージ0(改行は/)              起動メッセージ1(改行は/)              制作年(4桁)    
I/Oポート デーコーダはLS138を使用 (G1がA7、Aが/WR、BがA5、CがA6) 拡張端子からの禁止も可  000H〜07FH:未使用  080H〜09FH:テンキー     イネーブル  0A0H〜0BFH:VDP  0C0H〜0DFH:ジョイスティック イネーブル  0E0H〜0FFH:PSG/JOY端子データ   ポート080H〜09FH コントローラ選択  コントローラ テンキーのイネーブル     (W)   ポート0BEH〜0BFH VDPのポート  使用ポートは0BEH:VDPデータ   (R/W)        0BFH:VDPコントロール(R/W)   ポート0C0H〜0DFH コントローラ選択  コントローラ ジョイスティックのイネーブル (W)   ポート0E0H〜0FFH PSG/JOY端子  使用ポートは0FCH:JOY1データ(R)        0FFH:JOY2データ(R)        0FFH:PSG    (W)    
キー入力 本体付属のパッドは上にジョイステックにトリガーボタン*2、 下にテンキーパッド(3*4ライン) ダイオードを使用した単純な回路で全てのキーリードを行います またテンキーとジョィステックの2つに分けて読みます 尚BIOSコールの場合データが反転されています   テンキーパッド  ポート080Hにデータを出力(データは何でもよい)  JOY端子の5ピン=1になり  テンキーパッド、トリガー2データ リードの準備が出来ます  ポート0FCH(2Pの場合は0FFH)を読む事で  テンキーパッドのリードとなります  テンキーパッドはデータ4ビットの組み合わせで  押されたキーを判断しています  つまりテンキーパッドは同時キー入力が出来ません   ジョイスティック  ポート0C0Hにデータを出力(データは何でもよい)、  JOY端子の8ピン=1になり  ジョイステックの方向、トリガー1 リードの準備が出来ます  ポート0FCH(2Pの場合は0FFH)を読む事で  ジョイステックのリードとなります     テンキーパッドの場合  d7:0(拡張端子10ピンの内容)  d6:トリガー2(右) 1=オフ、0=オン  d5:JOY端子7ピン 1 (未使用)  d4:JOY端子9ピン 1 (未使用)  d3:キーパッドマトリックス KM3  d2:キーパッドマトリックス KM2  d1:キーパッドマトリックス KM1  d0:キーパッドマトリックス KM0     キーパッドマトリックス KM3〜0    0=未使用、1=’8’、2=’4’、3=’5’    4=未使用、5=’7’、6=’#’、7=’2’    8=未使用、9=゜*’、A=’0’、B=’9’    C=’3’、D=’1’、E=’6’、F=何も押されていない   ジョイステックの場合  d7:0(拡張端子10ピンの内容)  d6:トリガー1(左) 1=オフ、0=オン  d5:JOY端子7ピン 1 未使用  d4:JOY端子9ピン 1 未使用  d3:左        1=オフ、0=オン  d2:下        1=オフ、0=オン  d1:右        1=オフ、0=オン  d0:上        1=オフ、0=オン    
ROMルーチン 00000H:リセット  スタックポインタ 073B9Hに指定して  0006EHへジャンプします     00008H:RST 008H  0800CHへジャンプします     00010H:RST 010H  0800FHへジャンプします     00018H:RST 018H  08012Hへジャンプします     00020H:RST 020H  08015Hへジャンプします     00028H:RST 028H  08018Hへジャンプします     00030H:RST 030H  0801BHへジャンプします     00038H:RST 038H (/INT)  0801EHへジャンプします     0003BH:RANDOM 出力:073C8H〜073C9H 乱数発生データ    A=乱数 使用:AF、HL    073C8H〜073C9H(初期値00033H)      乱数を発生します    075C8H〜073C9Hを16ビットのデータとして    d15=1:d8=1 なら Cf=0            0 なら    1       0:d8=1 なら Cf=1            0 なら    0    HL<−Cf 左シフトを行い073C8H〜073C9Hへセット    LレジスタをAレジスタにコピーします     00066H:/NMI VDPの割り込み  08021Hへジャンプします     0006EH:カードリッジのチェック 使用:AF、B、HL    ロムカードリッジがセットされているかチェックを行い    セットされていればそのカードリッジをスタート       されていなければバナー画面を表示(無限ループ)     00081H:バナー画面を表示    ロムカードリッジがセットされないとここへ来ます     01F61H:PLAY_SONGS 01F64H:ACTIVATEP 01F67H:PUTOBJP 01F6AH:REFLECT_VERTICAL 01F6DH:REFLECT_HORIZONTAL 01F70H:ROTATE_90 01F73H:ENLARGE     01F76H:CONTROLLER_SCAN コントローラの読み込み 出力:073EEH JOY1スティック部分     d7:1     d6:トリガー1 1=オン、0=オフ     d5:0     d4:0     d3:左     1=オン、0=オフ     d2:下     1=オン、0=オフ     d1:右     1=オン、0=オフ     d0:上     1=オン、0=オフ      073EFH JOY2スティック部分     d7:1     d6:トリガー1 1=オン、0=オフ     d5:0     d4:0     d3:左     1=オン、0=オフ     d2:下     1=オン、0=オフ     d1:右     1=オン、0=オフ     d0:上     1=オン、0=オフ      073F0H JOY1テンキー部分     d7:1     d6:トリガー2 1=オン、0=オフ     d5:0     d4:0     d3:TKM3     d2:TKM2     d1:TKM1     d0:TKM0      073F1H JOY2テンキー部分     d7:1     d6:トリガー2 1=オン、0=オフ     d5:0     d4:0     d3:TKM3     d2:TKM2     d1:TKM1     d0:TKM0        TKM0=Nul、1=’6’、2=’1’、3=’3’         4=’9’、5=’0’、6=’*’、7=Nul         8=’2’、9=’#’、A=’7’、B=Nul         C=’5’、D=’4’、E=’8’、F=Nul             Nul=何も押されていない   01F79H:DECODER テンキーの読み込み 入力:H=000H JOY1を選択      001H JOY2を選択    L=コード000Hまたは001H 出力:コードによって変わる 使用:AF、BC、DE、HL      コード000H     H=000H(JOY1)073EBHの内容をEレジスタにして073EBHをクリア                 H=ポート0FCHの    トリガーデータ1(反転)                 L=ポート0FCHのジョイスティックデータ (反転)     H=001H(JOY2)073ECHの内容をEレジスタにして073ECHをクリア                 H=ポート0FFHの    トリガーデータ1(反転)                 L=ポート0FFHのジョイスティックデータ (反転)       尚、前もってジョイスティックイネーブルにする必要がありますが     システムを使っているかぎり     常にジョイスティックイネーブルになっているハズです        コード001H     H=000H(JOY1) H=ポート0FCHのトリガーデータ2(反転)                  L=キーデータ1     H=001H(JOY2) H=ポート0FFHのトリガーデータ2(反転)                  L=キーデータ2        キーデータはテンキーの押されたボタンを数値データに変換したものです       0ボタン…000H、1ボタン…001H、2ボタン…002H       3ボタン…003H、4ボタン…004H、5ボタン…005H       6ボタン…006H、7ボタン…007H、8ボタン…008H       9ボタン…009H、*ボタン…00AH、#ボタン…00CH       何も押されていない…00FH     01F7CH:GAME_OPT ゲーム オプション VRAM全クリア、スクリーンモード1、英数字キャラクタの定義をして ゲームの難易度等の画面表示を行います     01F7FH:LOAD_ASCII 英数字キャラクタの定義 使用:AF、BC、DE、HL、IY       01F82H:FILL_VRAM 入力:HL=VRAMアドレス    DE=長さ     A=書き込むデータ VRAMを1バイトデータで埋めます     01F85H:MODE_1 スクリーンモード1     01F88H:UPDATE_SPINNER 01F8BH:INIT_TABLEP 01F8EH:GET_VRAMP 01F91H:PUT_VRAMP 01F94H:INIT_SPR_ORDERP 01F97H:WR_SPR_NM_TBLP 01F9AH:INIT_TIMERP 01F9DH:FREE_SIGNALP 01FA0H:REQUEST_SIGNALP 01FA3H:TEST_SIGNALP 01FA6H:WRITE_REGISTERP 01FA9H:WRITE_VRAMP 01FACH:READ_VRAMP 01FAFH:INIT_WRITERP 01FB2H:SOUND_INITP 01FB5H:PLAY_ITP 01FB8H:INIT_TABLE 01FBBH:GET_VRAM 01FBEH:PUT_VRAM 01FC1H:INIT_SPR_ORDER 01FC4H:WR_SPR_NM_TBL 01FC7H:INIT_TIMER 01FCAH:FREE_SIGNAL 01FCDH:REQUEST_SIGNAL 01FD0H:TEST_SIGNAL 01FD3H:TIME_MGR     01FD6H:TURN_OFF_SOUND PSGオフ 出力:A=0FFH PSGアッテネータ全オフにします     01FD9H:WRITE_REGISTER VDPレジスタの設定 入力:B=VDP#nn(0ー7)    C=VDPデータ 出力:073C3H R#00の内容(R#00を設定した場合に出力)    073C4H R#01の内容(R#01を設定した場合に出力)     01FDCH:READ_REGISTER VDPステータスレジスタ リード 出力:A=VDPステータスレジスタの内容     01FDFH:WRITE_VRAM メモリからVRAMへのブロック転送 入力:HL=転送元データアドレス    DE=転送先VRAMアドレス(00000H−03FFFH)    BC=長さ     01FE2H:READ_VRAM  VRAMからメモリへのブロック転送 入力:HL=転送先データアドレス    DE=転送元VRAMアドレス(00000H−03FFFH)    BC=長さ     01FE5H:INIT_WRITER 01FE8H:WRITER 01FEBH:POLLER 01FEEH:SOUND_INIT 01FF1H:PLAY_IT 01FF4H:SOUND_MAN 01FF7H:ACTIVATE 01FFAH:PUTOBJ     01FFDH:RAND_GEN 乱数の発生 出力:A=乱数データ         07020H〜07021H:サウンドアドレス 07022H〜07023H:ノイズワークアドレス 07024H〜07025H:Ch1ワークアドレス 07026H〜07027H:Ch2ワークアドレス 07028H〜07025H:Ch3ワークアドレス 0702AH       :サウンドコントロール           〜073B9H:スタック   073BAH〜073BBH:パラメータ用 073BCH〜073BDH:パラメータ用 073BEH〜073BFH:パラメータ用   073C0H〜073C1H:タイマ   073C2H       :   073C3H       :VDP R#0の内容 073C4H       :VDP R#1の内容 073C5H       :VDPステータス 073C6H       :スプライト定義用 073C7H       :スプライト用     073C8H〜073C9H:乱数用     073CAH       : 073CBH       : 073CCH       : 073CDH〜073CEH: 073CFH〜073D0H: 073D1H〜073D2H:   073D3H〜073D4H:タイマテーブルベース 073D5H〜073D6H:次のタイマアドレス   073D7H〜073EAH:JOY 073EBH       :JOY1テンキー 073ECH       :JOY2テンキー 073EDH       :予約 073EEH       :JOY1 スティックポート反転データ 073EFH       :JOY2 スティックポート反転データ 073F0H       :JOY1 テンキーポート 反転データ 073F1H       :JOY2 テンキーポート 反転データ   073F2H〜073F3H:スプライト属性テーブル・ベース・先頭アドレス 073F4H〜073F5H:プライト・パターン・ジェネレータ・テーブル・先頭アドレス 073F6H〜073F7H:パターン名称テーブル・先頭アドレス 073F8H〜073F9H:ターン・ジェネレータ・テーブル・先頭アドレス 073FAH〜073FBH:カラーテーブル・ベース・先頭アドレス   073FCH〜073FDH: 073FEH〜073FFH:  
Home へ戻る