misc. > アタリ仕様ジョイスティック研究 > 機器側の仕様 > PC-6001系列(Vcc:pin5, GND:pin9) > 日立S1(1984)

日立S1(1984)

ハードウェア概要

1984年5月に日立製作所より発表・発売開始されたパソコン。富士通のFMシリーズと同様CPUはモトローラ6809を採用している。グラフィック描画が非常に高速であり、またメモリも512kBまで拡張できOS-9 Level2[1]が動作することから最強の8ビット機を議論する際に必ず候補の一角として挙げられるパソコンである。

コントローラ端子の特徴

本機にはオプションとしてジョイスティックインターフェースカードが用意されている。カードにはコントローラ端子が2つ実装されており、ジョイスティックを最大2つ接続可能である。

このジョイスティックカードでサポートされていたのは1ボタンジョイスティックのみ[2]とのことだが、後に登場した純正品のPSG+ジョイスティックインターフェースカードではMSXタブレットもサポートされており、PC-6001/MSX相当であったようだ[3]

この純正品のジョイスティックインターフェースカードや、PSG+ジョイスティックインターフェースカード(型番MPC-PJ01)が内蔵されていたS1/10AVは非常に数が少なかったようで、資料に乏しい状態である。そんな中でもサードパーティー製品の解析や、BASICのリバースエンジニアリングをやられている方々がおり、本記事はその方々による下記のサイトの内容を自分なりに整理したものである(多謝!)。

pin#

Joystick IF card

MPC-PJ01

1

Digital in

Digital in

2

Digital in

Digital in

3

Digital in

Digital in

4

Digital in

Digital in

5

不明

VCC

6

Digital in

Digital in / Digital out

7

N/A

Digital in / Digital out

8

GND

Digital out

9

不明

GND

MPC-PJ01を使用する場合、ピン8をコモンピンとする多くのジョイスティックを使用するのであればピン8の出力をLに設定する必要がある。

ハードウェア実装

S1シリーズはモトローラのペリフェラルコントローラであるMC6821(PIA)を内蔵している[4]。PIAは8ビットI/Oを2系統(PA、PB)持っており、そのうちPAはマザーボード上にコネクタが設けられている[5]。ジョイスティックインターフェースカードはこのPAコネクタとケーブルで接続される。

PIAはI/Oの端子ごとに入力/出力を指定可能であり、ジョイスティック使用時はPA0〜PA7は以下のように設定される。

port

IN/OUT

Function

PA0

IN

pin 1

PA1

IN

pin 2

PA2

IN

pin 3

PA3

IN

pin 4

PA5

IN

pin 6

PA6

OUT

SELECT PORT

また、PIAはABの各系統ごとに割り込み入力を2つ(CA1、CA2、CB1、CB2)持っている。S1のジョイスティック端子においては、端子1のピン6がHからLになるとCA1に、端子2のピン6がHからLになるとCA2に、それぞれ割り込み入力が入るようになっている。つまり、ジョイスティックのトリガボタン入力の検出は、PA5のポーリングのみならず、割り込み処理で行うこともできる。ただし、割り込みによる検出では「ボタンが押されたか」は検出できても「ボタンが離されたか」は検出できない。

PAはI/Oアドレス$FE40[6]にアサインされている。またI/Oアドレス$FE41はPIAのコントロールレジスタAに対応している。

なお、MPC-PJ01で拡張されたピン7入力及びピン6〜8出力については不明。

検出手順

BASICやシステムコールによってジョイスティックの状態を検出可能である。システムコールについては、S1 WikiのSTICK2STRIG2を参照のこと。

I/Oポートを使用する場合は以下の通りとなる(はず)。

  1. アドレス$FFEBのビット1に0を書き込む(PAの使用許可)

  2. アドレス$FE41のビット2に0を書き込む($FE40書き込みで入出力を指定できるようにする)

  3. アドレス$FE40に$40を書き込む(PA6をOUT、それ以外をINにする)

  4. アドレス$FE41のビット0を1、ビット1を0、ビット2を1、ビット3を1、ビット4を0、ビット5を0にする(アドレス$FE40でPAの読み書きができるようにするとともに、CA1、CA2のたち下がりで割り込みが発生するようにする)

  5. アドレス$FE40のビット6に0を書き込む(端子1を指定)

  6. アドレス$FE40を読む(端子1のピン1〜4、6の状態を得る。Hの時は1、Lの時は0)

  7. アドレス$FE40のビット6に1を書き込む(端子2を指定)

  8. アドレス$FE40を読む(端子1のピン1〜4、6の状態を得る)

  9. アドレス$FFEBのビット1に1を書き込む(読み取り終了)

また、割り込み処理でアドレス$FE41を読み出するようにすることでジョイスティックのボタンが押されたかどうかを検知可能である。すなわち、アドレス$FE41のビット7が1なら押されたのは端子1のボタンであり、ビット6が1なら押されたのは端子2のボタンとなる。


コメント(0)


Note

本サイトのハイパーリンクの一部は、オリジナルのサイトが閉鎖してしまったため"Internet archive Wayback Machine"へのリンクとなっています。そのようなリンクにはアイコン[archive]を付与しています。

本サイトはCookieを使用しています。本サイトにおけるCookieは以下の三種類のみであり、Cookieの内容に基づいてサイトの表示を変更する以外の用途には用いておりません。