HITAC10の命令表

HITAC10を、FPGAでエミュレートするにあたり、以下の基本命令と、I/O命令の一部を実装しました。付加命令は実装せす、割り込み機能を使ってソフトでエミュレートすることにしました。

HITAC10の命令。アドレス修飾の間接とゼロは、I または Z ならその機能が有効で、0または1ならOPコードの一部となります
OPコード
命令記述と呼び方
間接
ゼロ
アドレス
命令の内容
00001
L ロード
AAAAAAAAA
アドレスAAAAAAAAAのメモリ−−>AC
00010
A アッド
AAAAAAAAA
アドレスAAAAAAAAAのメモリ+AC−−>AC
00011
S サブ
AAAAAAAAA
AC−アドレスAAAAAAAAAのメモリ−−>AC
00100
N アンド
AAAAAAAAA
アドレスAAAAAAAAAのメモリ AND AC−−>AC
00101
X エクスクルーシブオア
AAAAAAAAA
アドレスAAAAAAAAAのメモリ XOR AC−−>AC
00110
O オア
AAAAAAAAA
アドレスAAAAAAAAAのメモリ OR AC−−>AC
00111
ST ストア
AAAAAAAAA
AC−−>アドレスAAAAAAAAAのメモリ
01000
B ブランチ
AAAAAAAAA
アドレスAAAAAAAAAにジャンプ
01001
BAL ブランチアンドリンク
AAAAAAAAA
アドレスAAAAAAAAAに戻り番地を書いて次ににジャンプ
01010
KCT スキップオンカウント
AAAAAAAAA
アドレスAAAAAAAAAのメモリを+1し、0ならスキップ
10000
SRL シフトライトロジカル
00000NNNN
ACをNNNN個右に論理シフト。NNNN=0なら16。キャリーは不変
10001
SLL シフトレフトロジカル
00000NNNN
ACをNNNN個右に論理シフト。NNNN=0なら16。キャリーは不変
10010
SRA シフトライトアリスメティック
00000NNNN
ACをNNNN個右に算術シフト。NNNN=0なら16。キャリーは0
10011
SLA シフトレフトアリスメティック
00000NNNN
ACをNNNN個左に算術シフト。NNNN=0なら16。キャリー=AC[15] xor AC[14]
01101
NE ノーエフェクト
000000000
何もしない
01101
LCAR ロードキャリー
100000000
キャリーをACのLSBにコピー。AC[15]--AC[1] は0
01101
SCAR セットキャリー
000000000
ACのLSBをキャリーにコピー
01101
LDSW ロードデータスイッチ
100000000
フロント・パネルのスイッチの状態をACにロード
01101
SIM セットインタラプトマスク
000000000
割り込み可能にする
01101
RIM リセットインタラプトマスク
100000000
割り込み禁止にする
01101
HALT ホールト
100000000
CPU停止
01101
KNC スキップオンノンゼロキャリー
001000001
キャリーが1なら次の命令をスキップ
01101
KZC スキップオンゼロキャリー
001100001
キャリーが0なら次の命令をスキップ
01101
KZA スキップオンゼロAC
001000010
キャリーが1なら次の命令をスキップ
01101
KNA スキップオンノンゼロAC
001100010
キャリーが0なら次の命令をスキップ
01101
KMA スキップオンマイナスAC
001000100
キャリーが1なら次の命令をスキップ
01101
KPA スキップオンポジティブAC
001100100
ACがプラス(MSB=0)なら次の命令をスキップ
01101
KPE スキップオンパワーエラー
010001000
パワーエラーフラグが1なら次の命令をスキップ
01101
KME スキップオンメモリーエラー
010000100
メモリーエラーフラグが1なら次の命令をスキップ
01101
KAE スキップオンアドレスエラー
010000010
アドレスエラーフラグが1なら次の命令をスキップ
01101
KOE スキップオンオプコードエラー
010000001
オプコードエラーフラグが1なら次の命令をスキップ
01101
KPEC スキップオンパワーエラーアンドクリア
011001000
パワーエラーフラグが1なら次の命令をスキップ、エラーフラグクリア
01101
KMEC スキップオンメモリーエラーアンドクリア
011000100
メモリーエラーフラグが1なら次の命令をスキップ、エラーフラグクリア
01101
KAEC スキップオンアドレスエラーアンドクリア
011000010
アドレスエラーフラグが1なら次の命令をスキップ、エラーフラグクリア
01101
KOEC スキップオンオプコードエラーアンドクリア
011000001
オプコードエラーフラグが1なら次の命令をスキップ、エラーフラグクリア
01101
KPE,R スキップオンノンパワーエラー
010101000
パワーエラーフラグが0なら次の命令をスキップ
01101
KME,R スキップオンノンメモリーエラー
010100100
メモリーエラーフラグが0なら次の命令をスキップ
01101
KAE,R スキップオンノンアドレスエラー
010100010
アドレスエラーフラグが0なら次の命令をスキップ
01101
KOE,R スキップオンノンオプコードエラー
010100001
オプコードエラーフラグが0なら次の命令をスキップ
01101
KPEC,R スキップオンノンパワーエラーアンドクリア
011101000
パワーエラーフラグが0なら次の命令をスキップ、エラーフラグクリア
01101
KMEC,R スキップオンノンメモリーエラーアンドクリア
011100100
メモリーエラーフラグが0なら次の命令をスキップ、エラーフラグクリア
01101
KAEC,R スキップオンノンアドレスエラーアンドクリア
011100010
アドレスエラーフラグが0なら次の命令をスキップ、エラーフラグクリア
01101
KOEC,R スキップオンノンオプコードエラーアンドクリア
011100001
オプコードエラーフラグが0なら次の命令をスキップ、エラーフラグクリア


HITAC10のI/O命令

HITAC10での周辺機器は、標準のものとして、テレタイプライタ(キーボード、紙テープリーダ付き)、紙テープリーダ、紙テープパンチ、などがありますが、基本的にはテレタイプライタ1台でプログラミングができるようになっていました。ただ、テレタイプライタ(ASR33)は110ボー(10文字/秒)でのシリアル通信だったので、紙テープを読むのが遅く、プログラム開発には高速の紙テープリーダを使って効率を上げていました。これだと、100〜500文字/秒で紙テープが読めました。
これらの周辺機器には専用のI/O命令が用意されていて、上記の表では説明できないので、以下にHITAC10オリジナルの説明書のまま記述します。

● 0x7061 KTI Skip on TI Flag (TI:Type Input). IF (TIF)=1 (PC)+1 --> PC
データ・タイプライタのキーボード/テープ読み取り部からのTIフラグをセンスし、もしflagが1であればPCに+1を加算して次の命令をスキップする。

● 0x7062 STI Start TI. 0-->TIF:[キャラクタ]-->TIB 1-->TIF
データ・タイプライタのキーボード/テープ読み取り部からのTIフラグをクリアすると同時にリーダーに対して読み取り信号を発しデータ・タイプライタのキーボード/テープ読み取り部のキャラクタ・バッファに1字読み取る

● 0x7064 RTI Read TI. (AC[7:0]) ∨(TIB) --> AC[7:0], 0-->TIF, AC[15:8] 不変
データ・タイプライタのキーボード/テープ読み取り部のキャラクタ・バッファ(8ビット)の内容とACの下位8ビットの内容をビット毎に or し、ACの下位8ビットに入れる。TIフラグはクリアされるがテープ読み取り部に対する読み取り信号は送られない。ACの上位8ビットは変わらない。

● 0x7066 RTIF Read TI and Feed. 0-->TIF, (AC[7:0]) ∨(TIB) --> AC[7:0], [キャラクタ]-->TIB, 1-->TIF AC[15:8] 不変
データ・タイプライタのキーボード/テープ読み取り部のキャラクタ・バッファ(8ビット)の内容とACの下位8ビットの内容をビット毎に or し、ACの下位8ビットに入れる。このときTIフラグをクリアし、テープ読み取り部に対して読み取り信号を発し、データ・タイプライタのキーボード/テープ読み取り部のキャラクタ・バッファに1字読み取る。(「ACの上位8ビットは変わらない。」・・・この説明文はオリジナルには無かった。)

● 0x7081 KTO Skip on TO Flag. (TO:Type out). IF (TOF)=1 (PC)+1 --> PC
データ・タイプライタのプリンタ/テープせん孔部からのTOフラグをセンスし、もしflagが1であればPCに+1を加算して次の命令をスキップする。

● 0x7082 CTO Clear TO Flag. 0-->TOF
データ・タイプライタのプリンタ/テープせん孔部からのTOフラグをクリアする。

● 0x7068 WTO Write TO. AC[7:0]-->TOB-->出力, 1-->TOF
データ・タイプライタのプリンタ/テープせん孔部のキャラクタ・バッファ(8ビット)に、ACの下位8ビットの内容を入れ、TOフラグをセットする。(オリジナルでは、TOフラグをクリアとなっているが、これは誤りだろう) 転送された文字は直ちにプリントまたはテープせん孔される。

● 0x7021 KTR Skip on TR Flag (TR:Tape Reader). IF(TRF)=1 (PC)+1-->PC
テープリーダのTRフラグをセンスし、もしフラグが1であればPCに+1を加算して次の命令をスキップする。

● 0x7022 RTR Read TR. (TR:Tape Reader). AC[7:0] ∨(TRB)-->AC[7:0] 0-->TRF AC[15:8] 不変
テープリーダのキャラクタ・バッファ(8ビット)の内容をACの下位8ビットに入れる。TRフラグはクリアされる。ACの上位8ビットは変わらない。

● 0x7024 STR Start TR. 0-->TRF, 0-->TRB, [キャラクタ]-->TRB, 1-->TRF
TRフラグおよびテープせん孔部のキャラクタ・バッファの内容をクリアし、次の1文字をキャラクタ・バッファに読み取る。この命令実行後TRフラグをセットする。

● 0x7028 DTR Send TR Status. テープリーダ動作不能の時 1-->AC[0], パリティエラーの時 1-->AC[1]
入出力機器の状態をACに転送する。テープ読み取り動作不能の時は AC[0] が1になり、パリティエラーの時は AC[1] が1になる。

● 0x7041 KTP Skip on TP Flag (TP:Tape Punch). IF(TPF)=1 (PC)+1-->PC
テープせん孔機のTPフラグをセンスし、もしフラグが1であればPCに+1を加算して次の命令をスキップする。

● 0x7042 CTP Clear TP. 0-->TPF, 0-->TPB
テープせん孔機のTPフラグおよびテープのキャラクタ・バッファをクリアする。

● 0x7068 WTP Write TO. AC[7:0]-->TPB-->出力, 1-->TPF
テープせん孔機のキャラクタ・バッファ(8ビット)に、ACの下位8ビットの内容を転送し、TPフラグをセットする。 キャラクタ・バッファに転送された内容は直ちにパンチされる。この命令実行後TPフラグは1となる。

● 0x7048 DTP Send TP Status. テープパンチ動作不能の時 1-->AC[0]
入出力機器の状態をACに転送する。テープせん孔機動作不能の時、 AC[0] が1になる。

HITAC10の付加命令

以下は、基本命令にはない、付加命令機構を備えたHITAC10でハードウエアで実行できる命令です。付加命令機構が無い場合は、割り込みが発生してソフト的に同じ動作になります。アキュームレータが32ビットに拡張され、下位16ビットがEC(エクステンディッド・アキュームレータ)という名前で操作できるようになります。AC+ECで、直列に繋がった32ビットレジスタとなる命令などが追加されます。EC単独でも操作できますが、LEとSTEとSEのみです。32ビットでは論理演算命令はありません。加減乗除、シフト命令、ロード、ストア命令です。SEは、エフェクティブアドレスが、ECにセットされますが、ECの即値命令となります。ACに即値命令はありません。

< <
HITAC10の付加命令。アドレス修飾の間接とゼロは、I または Z ならその機能が有効で、0または1ならOPコードの一部となります
OPコード
命令記述と呼び方
間接
ゼロ
アドレス
命令の内容
10100
SRDL シフトライトダブルロジカル
00000NNNN
AC・ECをNNNN個右に論理シフト。NNNN=0なら16。キャリーは不変
10101
SLDL シフトレフトダブルロジカル
00000NNNN
CAR・AC・ECをNNNN個左に論理シフト。NNNN=0なら16。
10110
SRDA シフトライトダブルアリスメティック
00000NNNN
AC・ECをNNNN個右に算術シフト。NNNN=0なら16。キャリーは0
10111
SLDA シフトレフトダブルアリスメティック
00000NNNN
AC・ECをNNNN個左に算術シフト。NNNN=0なら16。キャリー=AC[15] xor AC[14]
11000
LE ロードEC
AAAAAAAAA
アドレスAAAAAAAAAのメモリ−−>EC
11001
LD ロードダブル
AAAAAAAAA
アドレスAAAAAAAAA, +1のメモリ(2ワード)−−>AC・EC
11010
AD アッドダブル
AAAAAAAAA
アドレスAAAAAAAAA, +1のメモリ(2ワード)+AC・EC−−>AC・EC
11011
SD サブストラクトダブル
AAAAAAAAA
AC・EC−アドレスAAAAAAAAA, +1のメモリ(2ワード)−−>AC・EC
11100
M マルチプライ
AAAAAAAAA
アドレスAAAAAAAAAのメモリxEC−−>AC・EC
11101
D デバイド
AAAAAAAAA
AC・EC÷EC−−> 商EC 剰余AC
11110
STE ストアEC
AAAAAAAAA
EC−−>アドレスAAAAAAAAAのメモリ
11111
STD ストアダブル
AAAAAAAAA
AC・EC−−>アドレスAAAAAAAAA,+1のメモリ(2ワード)
01100
SE セットEC
AAAAAAAAA
アドレスAAAAAAAAA−−>EC


戻る

ホームに戻る
inserted by FC2 system