コレコビジョン
コレコビジョンのスペック
CPU | μPD780C−1(Z80A) 3.579MHz |
VDP | TMS9928A |
PSG | SN76489 |
ROM | 8KB |
RAM | 1KB(拡張可) |
VRAM | 16KB |
後に日本で発売される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 へ戻る