コレコビジョン


コレコビジョンのスペック
CPUμPD780C−1(Z80A) 3.579MHz
VDPTMS9928A
PSGSN76489
ROM 8KB
RAM 1KB(拡張可)
VRAM16KB
後に日本で発売されるSG−1000に構造がよく似ている Z80にTMS9918、SN76489の始祖的なハードともいえる 拡張性もあり、ハンドルコントローラはフットペダルがついていたり アーケードゲームの移植も結構出来が良かったりする   CPU CPUはザイログZ80を使用 クロックは約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 Bit5(IE)=0) /INT 拡張端子に繋がっています     ROMカードリッジ (08000H−0FFFFH) 08000Hから始まるようにして最初のデータをIDデータとしてチェックして チェックが合えばROMカードリッジのスタートアドレスを読んで実行します チェックが合わない、ROMカートリッジが無い場合、メッセージ画面を出して止まります。  08000H−8001H:055H、0AAH IDデータ  08002H−8003H:スプライトネーム テーブル ポインタ  08004H−8005H:スプライトオーダ テーブル ポインタ  08006H−8007H:WR_SPR_NMTBLバッファ ポインタ  08008H−8009H:JOYPAD ポインタ  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 エントリアドレス  
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)を読む事でテンキーパッドのリードとなります  テンキーパッドはデータ4Bitの組み合わせで押されたキーを判断しています  つまりテンキーパッドは同時キー入力が出来ません   ジョイスティック  ポート0C0Hにデータを出力(データは何でもよい)、 JOY端子の8ピン=1になり  ジョイステックの方向、トリガー1 リードの準備が出来ています  ポート0FCH(2Pの場合は0FFH)を読む事でジョイステックのリードとなります     テンキーパッドな場合    Bit 7:0(拡張端子10ピンの内容)    Bit 6:トリガー2(右) 1=オフ、0=オン    Bit 5:JOY端子7ピン 1 未使用    Bit 4:JOY端子9ピン 1 未使用    Bit 3:キーパッドマトリックス KM3    Bit 2:キーパッドマトリックス KM2    Bit 1:キーパッドマトリックス KM1    Bit 0:キーパッドマトリックス 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=何も押されていない    ジョイステックの場合    Bit 7:0(拡張端子10ピンの内容)    Bit 6:トリガー1(左) 1=オフ、0=オン    Bit 5:JOY端子7ピン 1 未使用    Bit 4:JOY端子9ピン 1 未使用    Bit 3:左        1=オフ、0=オン    Bit 2:下        1=オフ、0=オン    Bit 1:右        1=オフ、0=オン    Bit 0:上        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ビットのデータとして    Bit15=1:Bit8=1 なら Cf=0                 0 なら    1          0:Bit8=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スティック部分     Bit7:1     Bit6:トリガー1 1=オン、0=オフ     Bit5:0     Bit4:0     Bit3:左     1=オン、0=オフ     Bit2:下     1=オン、0=オフ     Bit1:右     1=オン、0=オフ     Bit0:上     1=オン、0=オフ      073EFH JOY2スティック部分     Bit7:1     Bit6:トリガー1 1=オン、0=オフ     Bit5:0     Bit4:0     Bit3:左     1=オン、0=オフ     Bit2:下     1=オン、0=オフ     Bit1:右     1=オン、0=オフ     Bit0:上     1=オン、0=オフ      073F0H JOY1テンキー部分     Bit7:1     Bit6:トリガー2 1=オン、0=オフ     Bit5:0     Bit4:0     Bit3:TKM3     Bit2:TKM2     Bit1:TKM1     Bit0:TKM0      073F1H JOY2テンキー部分     Bit7:1     Bit6:トリガー2 1=オン、0=オフ     Bit5:0     Bit4:0     Bit3:TKM3     Bit2:TKM2     Bit1:TKM1     Bit0: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 出力:コードによって変わる 使用:A、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 英数字キャラクタの定義     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=乱数データ    
Home へ戻る