PC−1251 CPU SC61860 *16進数表記は&
内部RAM CPUに&00H〜&5Fまでの96バイトの内部RAMがあります 内部RAMを指定するP、Qポインタレジスタ(7ビット) スタックを指定するRポインタレジスタ(7ビット) もう一つあるようですが未使用 他にはプログラムカウンタPC(16ビット)、 外部メモリポインタDP(16ビット) R&02 AレジスタはALUと繋がっており フラグはCとZの2つ スタックは内部RAM内に設定、(Rレジスタで指定した番地−1) ・−−−−−−−−−−−−−−−−−−−・ |番 地|名称| 機 能 | |−−−+−−+−−−−−−−−−−−−| |&00|I |カウンタ | |−−−+−−+−−−−−−−−−−−−| |&01|J |カウンタ | |−−−+−−+−−−−−−−−−−−−| |&02|A |アキュームレータ | |−−−+−−+−−−−−−−−−−−−| |&03|B |補助 | |−−−+−−+−−−−−−−−−−−−| |&04|XL|外部RAMポインタ | |&05|XH| | |−−−+−−+−−−−−−−−−−−−| |&06|YL|外部RAMポインタ | |&07|YH| | |−−−+−−+−−−−−−−−−−−−| |&08|K |汎用レジスタ | |−−−+−−+−−−−−−−−−−−−| |&09|L |汎用レジスタ | |−−−+−−+−−−−−−−−−−−−| |&0A| |汎用RAM | 〜 : 〜 〜 : 〜 |&5B| |汎用RAM | |−−−+−−+−−−−−−−−−−−−| |&5C|IA|I/Oポート出力 | |−−−+−−+−−−−−−−−−−−−| |&5D|IB|I/Oポート出力 | |−−−+−−+−−−−−−−−−−−−| |&5E|FO|I/Oポート出力 | |−−−+−−+−−−−−−−−−−−−| |&5F|OUTC|コントロールポート出力 | ・−−−−−−−−−−−−−−−−−−−・ 未定義命令(ニモニックは工学社方式です) HALT サイクル数1 OPコード:&16、&17、&2E &36、&3C、&3D、&3E、&3F、 &5C、&5E &6C、&6D、&6E &7B、&CF、&DC、&DE PCレジスタはそのままになり ホット・スタートまたは コールドスタートするしかありません CLRA サイクル数:2 フラグ変化:なし OPコード:&23 Aレジスタをクリア(&00)にします NOPT サイクル数:3 フラグ変化:なし OPコード:&33、&68、&6A 3サイクルのNOPです MVWP サイクル数:7+4×Iレジスタ フラグ変化:なし OPコード:&35 内蔵ROM(&0000−&1FFF)を内部RAMに ブロック転送を行います BA=内蔵ROMアドレス P =転送先 内部RAMアドレス I =長さ−1 の後にMVWPを実行します PCだけが内蔵ROMをアクセスできる為 PCレジスタをスタックに保存 PCレジスタ=BAレジスタ (P)=(PC) INC P、INC PC 以降I−1分繰り返されます Pレジスタは変化、BAレジスタは保存され変化なし INCM サイクル数:4 フラグ変化:C、Z OPコード:&4A Mレジスタの内容をINCします Qレジスタが破壊 DECM サイクル数:4 フラグ変化:C、Z OPコード:&4B Mレジスタの内容をDECします Qレジスタが破壊 IPXL サイクル数:Iレジスタ分全部 4×Iレジスタ+5 Iレジスタ分以内 4×カウント分+3 フラグ変化:Z OPコード:&4F コントロールポートでXINが可のとき XINがLの時間を計測 XINがLの間に4サイクル毎にIレジスタ分まで PレジスタをINC Iレジスタ分を超えるとZf=1にして終了 コントロールポートでXINが不可のとき WAIT I MVMP サイクル数:3 フラグ変化:なし OPコード:&54 PCレジスタの指すアドレスの内容を内部レジスタに転送します LDPC サイクル数:3 フラグ変化:なし OPコード:&56 PCレジスタの指すアドレスの内容をAレジスタに転送します CASE サイクル数:nn番目でコールしたとき2+7×nn 条件外コールしたとき7+7×SETの条件サブルーチンコール数 フラグ変化:なし OPコード:&69 n1 a1 b1...c1 c2 SET命令で設定した値を元に条件サブルーチンコールを事項 n1=条件 a1=コールアドレス上位* b1=コールアドレス下位* | c1=条件外 コールアドレス上位* c2=条件外 コールアドレス下位* *上位、下位の順です <例> SET &03H,&8000 CASE &81H,&1234 ;IF A=&81 GOSUB &1234 &82H,&5678 ;IF A=&82 GOSUB &5678 &FFH,&9ABC ;IF A=&FF GOSUB &9ABC &9999 ;OTHER GOSUB &9999 この場合、条件サブルーチンは3つ、リターンアドレスは&8000 条件はAレジスタとの比較になる 最後のアドレスは条件が無かったときにコールされる IPXH サイクル数:Iレジスタ分全部 4×Iレジスタ+5 Iレジスタ分以内 4×カウント分+3 フラグ変化:Z OPコード:&6F コントロールポートでXINが可のとき XINがHの時間を計測 XINがHの間に4サイクル毎にIレジスタ分まで PレジスタをINC Iレジスタ分を超えるとZf=1にして終了 コントロールポートでXINが不可のとき INC P RZ サイクル数:4 フラグ変化:Z=0 OPコード:&72 nn &73 nn &76 nn &77 nn nnのオペランドは何でもよく Zf=0になります SET サイクル数:9 フラグ変化:なし OPコード:&7A aa bb cc Aレジスタの値でサブルーチンコールを行なう為の 設定を行ないます 昔のBASICでいうとON A GOSUB... のような命令になり 分岐はCASEで行なわれます aa=条件サブルーチンコール数 bb=リターンアドレス上位* cc=リターンアドレス下位* リターンアドレスはスタックに入り コール数はSレジスタに入る(RS1?) Sレジスタはブロック転送等でカウンタで使用され SETとCASEの間にブロック転送命令を使用すると 動作がおかしくなります またSETの後にPOP、POPをいれると ON A GOTOのような命令になります *上位、下位の順です TSMA サイクル数:3 フラグ変化:Z OPコード:&C6 Pレジスタの示す内部RAMの内容とAレジスタの比較を行ないます 等しければZf=1 INCN サイクル数:4 フラグ変化:C、Z OPコード:&CA Nレジスタの内容をINCします Qレジスタが破壊 DECN サイクル数:4 フラグ変化:C、Z OPコード:&CB Nレジスタの内容をDECします Qレジスタが破壊 NOPW サイクル数:2 フラグ変化: OPコード:&CD、&D9 2サイクルのNOP NOPW サイクル数:2 フラグ変化: OPコード:&D3 アドレスバスにDPレジスタの内容が出力 メモリライト状態 データバスにPレジスタの内容が出力 対応するコントロールバスが出てない為 実質NOPWになるそうです SZ サイクル数:6 フラグ変化:Z=1 OPコード:&D7 nn (R−1)=(DP) を実行(その際にZf=1になります) 尚、nnのオペランドは何でもよい
Home へ戻る