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 へ戻る