ぴゅう太(TP1000)
密かに、くろーびす氏の協力に感謝
TI社のチップで固められた稀有なパソコン
日本で発売された同じようなハードといったら一応TI-99ぐらいしかない(CPUはTMS9990)
更に独特なニホンゴBASICが異才を放ち、海外ではTomy Tutorという名前で発売されており、
ロットによってはマスクROMを使用したり、拡張性もあったり以外と本格的なハード(G-BASICだけが冗談で作られたとしか思えない)
ワークエリアはなく、CPUの内の16ワード*8バンクの計256バイトとVDPで使われない領域を使用
尚、初代ぴゅう太は少なくとも3種類のバージョンがあるみたいなのですが回路図は当然手持ちのハードのみです。
製造番号はZTST038581です。(恐らく中期バージョン)
初期は256KBitPROM1個らしく、中期は256KBitマスクROM1個、後期はマスクROM2つになっているみたいです
(注)TI社のチップはMSBとLSBが通常と逆になっています。(ROMの部分ではアドレス、データバスの並びが逆なのはその為です
Enri's HP
http://www43.tok2.com/home/cmpslv/
■機種による文字化け
左がぴゅう太、右がぴゅう太Jr.による画面となります
カナ文字か英小文字の定義がされているか機種によって違い
文字化けが起こる問題が生じます
その為後期のソフトになると英大文字表記になり文字化けの問題を回避しています
ただしプレイヤー選択ルーチンはBIOSコールで行う為
メッセージ表示が機種ごとに変化します
グラフィックモード
メニューでGRAPHICを選択するとグラフィックモードになります
このときMODキーを押すと
背景作成モード→全背景作成モード→アニメ作成モード→背景・アニメ作成モード
と状態が変わり4回押すと、背景作成モードに戻ります
背景作成モード
画面は32×24のセル(キャラクタ)に分かれていますが下1/3に
サンプルカラーとパレットがありセルの一部分は隠れています
メインカーソルが隠れている場所に行くと、サンプルカラー、パレットは上に移動し
隠れていたセルが出現します
メインカーソル
ロケット型をしていてセルの位置及び移動方向を示しています
移動はカーソルキーで押し続けると連続して移動します
パレット
パレットは8×8ドットが8倍に拡大されている場所で
スペースキーを押すとメインカーソルの位置のセルが表示されます
同時にパレットの左上にサブカーソルが点滅します
サブカーソル
サブカーソルはパレットの中と左側1列の中を移動が出来ます
移動はカーソルキーでパレットの外(左側)にある時にカラーキーを押すと
パレットの中の横1列がその色になります(サブカーソルは移動方向に1つ進みます)
パレットの中にある場合はカラーキーを押すと、その位置のドットに色がつきます
ただしパレットの横1ライン中2色までしか色をつける事ができません。
カラーキー
カラーキーはサンプルカラーに表示された英数字を使います
カラーキーはサブカーソルが表示されている場合のみ有効
メインカーソルが表示されているときは押したキーの文字を表示します
1=透明、2=黒、3=灰色、4=白
5=淡い黄、6=黄、7=淡い緑、8=緑
9=濃い赤、0=淡い赤、Q=赤、W=濃い赤
E=紫、R=淡い青、T=青、Y=濃い青
スペースキーでセルを表示したときサンプルカラーYの下に数字が表示されます
これは個々のセルのナンバーを表します。
メインカーソルはパレットにかかれたデータを記憶しています
RTキーを押すことでパレットのデータをセルに書き込みます。
全背景出力モード
全背景出力モードでカラーキーを押すと画面の地色(バックドロップ画面)を変える事が出来ます
Enri's HP
http://www43.tok2.com/home/cmpslv/
■アニメ作成モード
画面は背景作成モードと同じようにサンプルカラーとパレットが表示されます
違う所はメインカーソルが無くなり”ABCD”のブロックが4つ表示されます
この”ABCD”のブロックをアニメ(スプライト)として背景と同じように絵を描きます
アニメは4つあり左から順にアニメ(4)、アニメ(3)、アニメ(2)、アニメ(1)とします
最初はアニメ(4)が点滅していますがRTキーを押すごとに順番に点滅していきます
点滅しているアニメはカーソルキーで移動する事が出来ます
アニメはA、B、C、Dの4つに分かれていて、この1つ1つを順番にパレットに呼び出す事によって
背景作成モードと同様に絵を作成します
アニメが点滅しているときにスペースキーを押すと4分の1の”A”の部分がパレットに呼び出されます
スペースキーを押すごとに”A”→”B”→”C”→”D”…と変わります
パレットの中はアニメの色に関係無く透明部分(”0”)は灰色で色のついた部分(”1”)は青で表示
1つのアニメには1色だけしか色をつけられません
アニメには優先順位があり重ねた場合アニメ(4)が一番奥、アニメ(1)が一番手前(手前が優先順位が高い)になります
背景・アニメ出力モード
サンプルカラー、パレットが消え背景とアニメが全面に現れます
カラーキーで画面の地色(バックドロップ画面)の変更
コントローラでアニメを動かす事ができます
コントローラ1でアニメ(4)、コントローラ2でアニメ(2)を操作します
アニメ(4)とアニメ(2)しか操作できませんがアニメ(3)とアニメ(1)は
アニメ(4)あるいはアニメ(2)を重ねることで一緒に操作出来ます
全てのアニメを重ねるとコントローラ1か2のどちらでも操作出来ます
背景・アニメ出力モードでMONキーを押す事でモニターへ飛びます
グラフィックモードのモニター
メニユ-:画面データの消去を行いメニュー画面に飛びます
GRAPHIC:グラフィックモードに戻ります
GBASIC:G-BASICに飛びます(BASICプログラムは消去される)
セ-ブ:データをテープにセーブします(ナマエはカナ文字か英字で4文字以内、2文字目からは数字、記号の使用可)
ロ-ド:データをテープにロードします(ナマエを忘れた場合、名前の入力でオシエテと入力してロードすると表示される)
カクニン:テープにセーブしたデータの確認を行います(ナマエを忘れた場合、名前の入力でオシエテと入力してロードすると表示される)
他のモードに変えるとカクニンの使用不可
G-BASICモード
メニューからG-BASICモード、
グラフィックモードのモニターからGBASICコマンドで
G-BASICを呼び出すと
画面一番下に”タイプインOK”というメッセージとその下にカーソルが点滅します
カーソルは画面一番下の行だけしか移動できませんが、文字や記号が書かれた画面を上下移動で
プログラムの自由な位置に移動出来ます
カーソルの下を押すとすでにタイプインしたプログラムを1行ずつ下がってきます
カーソルの上を押すとすでにタイプインしたプログラムを1行ずつ上げていきます
モニターモードーへ行く方法
タイプイン:行番号オワリ
プログラム実行中および後:MONキー
シングルステップ実行中:RTキーを押しながらMONキー(タイミングが合わないとモニターへ飛ばない)
G-BASICモードのモニター(先頭4文字で識別可)
メニユ-:画面データの消去を行いメニュー画面に飛びます
GRAPHIC:グラフィックモードに飛びます(BASICプログラムは消去される)
GBASIC:G-BASICに飛びます(BASICプログラムは消去される)
ジッコウ:プログラムの実行を行います
ステツプ:シングルステップを行います
ヘンシユウ:プログラムの編集を行います
セ-ブ:データをテープにセーブします(ナマエはカナ文字か英字で4文字以内、2文字目からは数字、記号の使用可)
ロ-ド:データをテープにロードします(ナマエを忘れた場合、名前の入力でオシエテと入力してロードすると表示される)
カクニン:テープにセーブしたデータの確認を行います(ナマエを忘れた場合、名前の入力でオシエテと入力してロードすると表示される)
EMENU:不明
EBASIC:不明
テレホン:不明
EDIT:不明
DEBUG:不明
ソノタ1:不明
他のモードに変えるとカクニンの使用不可
Enri's HP
http://www43.tok2.com/home/cmpslv/
■プログラム
プログラムの制限
行番号は1~9999までで行番号のすぐ後はスペースを1文字の空白が必要になります
1つの命令文の長さは行番号+空白を含めて31文字までです
プログラムの行数は約100ステップです
扱える数値
0~65535の整数
演算結果が65535を超えると0から加算された値として表示されます
演算結果表示
655360
655371
655382
演算結果が0よりも小さくなった場合は、65535から順次減算されます
演算結果表示
-165535
-265534
-365533
-32768~+32767の負の数
演算結果が+32767を超えると-327678から1つずつ加算された値として表示されます
演算結果表示
32768-32768
32769-32767
32770-32766
また演算結果が-32768より小さくなった場合は+32767から1つずつ減算された値として表示されます
演算結果表示
-3276932767
-3277032766
-3277132765
正と負のまたがる場合は加減計算しかできません
演算結果に少数点を含む数値は少数点以下は切り捨てになります
定数と変数
数値定数0~65535の整数
文字定数8文字
変数名最大4桁(アルファベット、2文字目以降は数字の使用可)
文字定数は最後に$をつける
1つのプログラムで数値変数と文字変数で同じ名前は使えません
AとA$、ABとAB$等の使用不可
1つのプログラムの中で使用出来る変数の数は最大47個までです
演算の優先順位
1:*と/
2:+と-
BASICの命令
行番号シキ変数=定数
変数
式
代入を行います
シキの文字はタイプインの時は省略可ただしリストを取るとシキの文字は出現する)
行番号カケセル番号,定数
変数
文字定数
画面に文字を書きます
セル番号は1~761(範囲外だと表示されません)
数値の範囲は2種類あります
0~65535の範囲の場合カケセル番号,変数
-32768~+32767の範囲の場合カケセル番号,+変数
セル番号対応図
行番号オワリ
プログラムの宣言終了でモニターへ飛びます
行番号行番号ニイケ
指定した行番号に飛びます
行番号マワレ”トジル”の行番号変数=初期値カラ最終値[カンカク[間隔値]
|
行番号トジル
変数に初期値から最終値までの間の値を間隔値ごとにきざんで代入を行います
マワレの文からトジルの文にはさまれたプログラムが数値の値が変わるたびに繰り返し実行されまsy
マワレの後には必ずトジル文の行番号が必要
初期値、最終値、間隔値には1~65535の整数のみ変数の使用不可
カンカクを省略すると間隔値は1になる
行番号モシ条件式ナラバ行番号ニイケ
条件式判断を行います
値が指定した条件を満たす場合はナラバの後の>行番号に飛びます
値が指定した条件を満たさない合は次の行番号に行きます
条件式に使われる関係演算子
等しい=
より小さい<
より大きい>
小さいか等しい<=
大きいか等しい>=
等しくない<>
行番号トマレ
プログラムの実行が一時停止されます
実行を続行させる場合はRTキーを押します
行番号行番号ヲヨベ
サブルーチンを呼びます
行番号カエレ
サブルーチンから帰ります
行番号タイマ番号オン
タイマーの使用を行います
タイマの番号は1~7で7つのタイマがあります
タイマーは0.01秒~40秒の0.01秒ごとカウントです
またタイマーは条件式判断文でチェック出来ます
モシタイマ番号=条件式ナラバ行番号ニイケ
ただし一度条件式判断文でチェックを行い条件式を満たした場合
タイマーは0になり再びカウントされます
行番号オト種類
種類
イチオンピッという音(一般キーのタイプの音)
ニオンブッという音(エラーの音)
サンオンピロンという音(メニューでRTキーを押したときの音)
シオンバーンという音
4種類の音が出力出来ますが続けて実行すると最後に指定した音しか出ません
行番号変数=ランスウ(n)
n=最大値1~65535(ただし768を超えると上の方に偏る傾向があります)
0~最大値の乱数を発生します
行番号アフレオン
演算結果でオーバーフローを起こしたときにプログラムを停止させRTキーを押すとモニターへ飛びます
行番号アフレオフ
演算結果でオーバーフローを起こしてもプログラムは停止ないようにします
演算結果で-32768~+32767の範囲(負と正にまたがる計算)では
アフレオンだと邪魔になるのでアフレオフを使用します
G-BASICの最初はアフレオフの状態になります
行番号セル(n)=セル(m)
セル番号mをセル番号nの絵柄にコピーします
n、mは定数、変数、式
行番号アニメn=イチ(y,x)
n=1~4アニメの番号
y=Y座標1~192(256を超えると256を引いた数値)
x=X座標1~256(256を超えると256を引いた数値)
アニメ(スプライト)の左上を指定した座標で表示します
表示範囲はY座標1~192、X座標1~256ですが
アニメを表示したくない場合がY座標を200辺りにする
変数=ヨコ(アニメn)
n=1~4アニメの番号
アニメ(スプライト)の位置(X座標)を調べます
変数=タテ(アニメn)
n=1~4アニメの番号
アニメ(スプライト)の位置(X座標)を調べます
行番号キイn変数1,変数2
n1=コントローラ1
2=コントローラ2
変数1方向キーの状態
0=何も押されていない
1=上
2=右上
3=右
4=右下
5=下
6=左下
7=左
8=左上
変数2シュートキーの常態
0=何も押されてない
1=LEFT
2=RIGHT
コントローラの状態を変数1と変数2に送ります
コントローラは特定のキーを押したのと同じになります
CPU
CPUはTI社のTMS9995を使用クロックは10.738MHz(内部2.6845MHz)
このクロックはVDPと共用で使われています
システムROMCRC:7553bb6a
256KBitマスクROMみたいです。(実際に256KBitとして読む事ができます。)
I/O周辺
CMT-IFはトーンバースト方式です
キーボード、コントローラ周り
CRUINでシリアルでキーデータを読み込んでいます
J-2はキーボード、J-3はコントローラ端子になりキーボードとデータが重なります
A9~A11で読むデータのセレクト(/Y0~/Y7)
A12~A14で読むビットのセレクトになります
キーマトリクス
コントローラTP1101
PSG
SN76489を使用、クロックはVDPから出力されるCPUCLK3.7597MHz
VDP
TMS9918を使用、CPUCLK端子はPSGのクロックに使用しています。
コネクタ
端子名は、とりあえずつけてみただけです
J-1はカートリッジ端子(偶数が前)
C-1は背面にある拡張端子(奇数が上)
J-2はカセットIF
/KILLSROMを0にすると本体内のシステムROMの使用禁止
SELEXM1=拡張メモリを選択
0=本体、カードリッジメモリ、I/Oを選択
/EXM00拡張メモリ>0000->3FFF
/EXM40拡張メモリ>4000->7FFF
/EXM80拡張メモリ>8000->BFFF
/EXMC0拡張メモリ>C000->FFFF
/EXP0>E600->E7FFROM?E600:55のチェックあり
/EXP1>E800->E8FFプリンタ用I/Oポート
/EXP2>EA00->EBFF
/EXP3>EC00->EDFF???キーボードポート
/CROM0>8000->BFFFカートリッジメモリ
/CROM1>E400->E5FFカートリッジI/Oポート用?
/IOPORT1=>0000->BFFFアクセスもしくは外部メモリアクセス
0=>C000->FFFFアクセス(I/Oポート)
ゲームカートリッジ(64KBit)回路図
手持ちの全ての64KBitソフトはこうなっていました(初期のロットでは2732を2つ使っているのもあるそうです)
尚、ROMは64KBitのマスクです。(データバスとアドレスバスは通常のROMと同じ表記にしています)
メモリマップ
>0000リセット
WP=>F0A0にして>0254へジャンプします
>0004
WP=>F0A0にして>0254へジャンプします
>0008
WP=>F0A0にして>0254へジャンプします
>000C内蔵タイマベクタ
DATA>F0C0
DATA>16DA
>0010
DATA>F07A
DATA>095E
>0014
DATA>F0C0
DATA>055A
>0018CPURAM>F00C->F083のクリア
入力:WP=>EFEC
CPU内蔵RAM>F00C->F083を>00で埋めます
BLWP命令でコールします
>001CCPURAM>F00C->F081のクリア
入力:WP=>EFEC
CPU内蔵RAM>F00C->F081を>00で埋めます
BLWP命令でコールします
>0020VDP初期化
入力:R8=VDPデータアドレス
出力:R0=VDPステータス(Bit0-7)
使用:R9、R10、R11、R12
>F070Bit6
VDPのR#00-#08までの設定を行います
>0024VDPレジスタの設定
入力:R9=設定データ上位=データ、下位=レジスタ
出力:R0=VDPステータス(Bit0-7)
使用:R10、R11
>F070Bit6
VDPのレジスタの設定を行います
>0028VRAMオールクリア
出力:R0=VDPステータス(Bit0-7)
使用:R7、R8、R9、R10、R11、R13、R14
>F070Bit6
VRAM>0000->3FFFを>00で埋めます
>002CVRAMFILL
入力:R8=埋めるデータ(上位のみ)
R9=VRAM先頭アドレス
R7=長さ
出力:R0=VDPステータス(Bit0-7)
使用:R7、R11、R13、R14
>F070Bit6
VRAMにデータを埋めます
>0030VRAMアドレスの設定ライト
入力:R9=VRAMアドレス
使用:R11
>F070Bit6
書き込みを行う為のVRAM指定を行います
またR9は入力の値に直して返します
>0034VRAMアドレスの設定リード
入力:R7=VRAMアドレス
出力:>F074=VRAMアドレス
使用:R11
>F070Bit1=1
Bit6
読み込みを行う為のVRAM指定を行います
>0038VRAM1バイト書き込み
入力:R9=VRAMアドレス
R8=ライトデータ(上位のみ)
出力:>F074=VRAMアドレス+1
使用:R11、R14
>F070Bit6
RAMに1バイト書き込みを行います
>003CVRAM1バイト読み込み
入力:R9=VRAMアドレス
出力:R8=リードデータ(上位のみ)
>F074=VRAMアドレス+1
使用:R11、R14
>F070Bit6
VRAMに1バイト読み込みを行います
>0040キーデータからアスキーコードに変換
出力:>F0E9=アスキーコード
使用:R11、R12
キーデータ(>F0C2->F0C9)から
押されているキーをアスキーコードに変換
ただし、コントロールコードは下記のみ
RTキー>0D
上キー>F0
左キー>F1
下キー>F2
右キー>F3
MOD>F4
>0044コントローラの内容を読む
出力:R10=コントローラデータ
使用:R8、R9、R10、R11、R12
>F0EA->F0EB
>F0EC->F0ED
>F0C6と>F0C7を読み
コントローラデータに変換
>0048乱数発生
入力:R10=範囲
出力:R8=乱数
使用:R9、R10、R11
>F0D8->F0D9
>F0EA->F0EB
>F0C0->F0C1
乱数の発生を行います
>004Cメモリ転送
入力:R7=転送元アドレス
R8=Bit0-1コマンド
2-15長さ
R9=転送先アドレス
出力:R9=転送先最終アドレス+1
R7=転送元の最終アドレス+1
使用:R11、R12
>F074=VRAMアドレス
R8のコマンドで各メモリの転送を行います
00:メモリからメモリへ転送
01:メモリからVRAMへ転送
10:VRAMからメモリへ転送
11:VRAMからVRAMへ転送
>0050タイマnの選択またはタイマnのチェック
入力:R8=Bit0-2タイマn(n=0-7)
3-15チェックするタイマnカウントデータ下位のみ(0でタイマn指定)
出力:EQ=1チェックするカウンタ値未満
0チェックするカウンタ値以上
使用:R6、R7、R8、R11
>F080->F09E=タイマ0から7のうち1つ
>F0D6->F0D7=カウンタH
>F0D8->F0D9=カウンタL
タイマnをカウンタを利用してカウント、チェックします
このルーチンでは2種類の動作ができます
タイマnを選択:カウンタ0000でコール
タイマnに内蔵カウンタH、Lの値をコピー
EQ=1
タイマnのチェック:カウンタ0000以外でコール
カウンタがチェック値未満
R8=>0000
EQ=1
カウンタがチェック値以上
R8=カウントデータ
EQ=0
>0054左右反転のキャラクタ定義
入力:R8=定義するキャラクタアドレス
R9=定義するVRAMアドレス
R10Bit0=12×2キャラクタ定義
01×1キャラクタ定義
Bit1-7=0
Bit8-15=定義するキャラクタ数
使用:R5、R7、R8、R9、R10、R11、R12
>F070Bit6
キャラクタデータを左右反転して定義を行います
ただし1×2キャラクタ定義の場合
データアドレス+>102キャラクタ定義
データアドレス2キャラクタ定義の順になります
定義するキャラクタ数は1×1で1、2×2で1となります
>0058十進数表示F0F0
>005C十進数表示F0F4
>0060キャラクタの指定方向へ表示
入力:R7=パターン・ネーム・テーブルオフセットアドレス
R8=Bit0-2:方向
Bit3-7:長さ-1
Bit8-15:表示するキャラクタ
キャラクタを指定方向に表示します
R7の値は>1C00を引いた値になります
方向:000=上、001=右上、010=右、011=右下
100=下、101=左下、110=左、111=左上
>0064PSGオ-ルオフ
使用:R9、R11
>F0CA=PSGトラック0コマンド
>F0CB=PSGトラック0コマンド
>F0CC=PSGトラック0コマンド
>F0E2=PSGトラックデータアドレス
PSGの全チャンネルを音量オフにする為のデータを設定します
またPSGアクセス自体は別の処理(割込み)で行われます
>0068PSGトラック0セット
入力:R9=PSGトラック0データアドレス
出力:>F0CA=PSGトラック0コマンド>01
>F0E2=PSGトラック0データアドレス
使用:R11
PSGトラック0の演奏を行います
PSGコマンドは割込み内のルーチンでDECされます
>01PSGポート>E200に書き込み
>02->7F演奏する長さ
>00演奏終了開始
>FF->80演奏終了(DECされて>80で停止)
<例>演奏データ
BYTE>06;ポートに書き込むバイト数
BYTE>8A,>05,>90,>A1,>07,>B0;ポートに書き込むデータ
BYTE>4C;PSGコマンド
|
BYTE>02
BYTE>9F,>BF
BYTE>00
>006CPSGトラック1セット
入力:R9=PSGトラック1データアドレス
出力:>F0CB=PSGトラック1コマンド>01
>F0E4=PSGトラック1データアドレス
使用:R11
PSGトラック1の演奏を行います
>0070PSGトラック2セット
入力:R9=PSGトラック2データアドレス
出力:>F0CC=PSGトラック2コマンド>01
>F0E6=PSGトラック2データアドレス
使用:R11
PSGトラック2の演奏を行います
>0074レジスタVRAM退避
入力:R0~R12
出力:>F05C=スタック領域インデックス(+>0016)
レジスタの内容をVRAM内のスタック領域に退避します
>F060->F06B(R0、R6-R12)
>F0A2->F0AB(R1-R5)の順で退避
>0078レジスタVRAM復帰
出力:R0~R12
>F05C=スタック領域インデックス(->0016)
VRAM内のスタック領域からレジスタに復帰します
>F05C=>0000で復帰しようとすると>0014へジャンプ
>007CVRAMアクセスアドレスの取得
入力:R9=Bit0-3番号0-F
Bit4-15オフセットアドレス
出力:R9=VRAMアドレス
使用:R11、R12
まずR9の内容を番号と加算する値に分け
チェックする範囲外だと>0014へジャンプ
範囲内なら番号のチェックする先頭VRAMアドレス+R9(Bit4から15)がR9に入る
番号|チェックする範囲
--+--------------------------------------------
0|>1C00->1EFFVRAMアドレスパターン・ネーム・テーブル(セル)
1|>0000->07FFVRAMアドレスパターン・ジェネレータ・テーブルトップ
2|>0800->0FFFVRAMアドレスパターン・ジェネレータ・テーブルミドル
3|>1000->17FFVRAMアドレスパターン・ジェネレータ・テーブルロウ
4|>2000->27FFVRAMアドレスカラー・テーブルトップ
5|>2800->2FFFVRAMアドレスカラー・テーブルミドル
6|>3000->37FFVRAMアドレスカラー・テーブルロウ
7|>1F00->1F7FVRAMアドレススプライト属性テーブル
8|>1800->1BFFVRAMアドレススプライト・パターン・ジェネレータ・テーブル
9|>3800->3FFFVRAMアドレス
A|>1F80->1FFFVRAMアドレススタック領域、ワーク
B|>1880->1BFFVRAMアドレス
C|>1F10->1F7FVRAMアドレス
D|>3800->3FFFVRAMアドレスプログラム領域
E|>3800->3FFFVRAMアドレスプログラム領域
F|>F000->FFFFCPUアドレス
>0080VRAM連続読み込み
入力:R8=転送先アドレス
R9=>007Cパラメータ(転送元VRAMアドレス)
Bit0-3番号0-F
Bit4-15オフセットアドレス
R10=長さ
出力:R12=転送元VRAMアドレス+>1000
使用:R11
転送元アドレスにVRAMデータをメモリに転送します
>0084VRAMからメモリへの1バイト転送
入力:R7=転送先アドレス
R9=>007Cパラメータ(転送元VRAMアドレス)
使用:R11、R12
VRAMの内容1バイトをメモリに転送します
>0088
>008C
>0090
>0094
>0098
>009C
>00A0VRAM連続書き込み
入力:R8=転送先アドレス
R9=>007Cパラメータ(転送先VRAMアドレス)
Bit0-3番号0-F
Bit4-15オフセットアドレス
R10=長さ
出力:R12=転送元VRAMアドレス+>1000
使用:R11
転送元アドレスにあるデータをVRAMに転送します
ゲームカートリッジではキャラクタ定義に使用
>00A4
>00A8
>00AC
>00B0
>00B4スプライト座標の設定
入力:R8=設定する座標データのあるアドレス
R9=スプライトNo.nn(>00->1F)
使用:R11、R12
スプライト座標の書き込みを行います
>00B8
>00BC
>00C0スプライト番号からパラメータの取得
入力:R9=スプライトNo.nn(>00->1F)
出力:R9=>007Cパラメータ番号、オフセット
R10=>0001(転送する為の長さ)
使用:R11
スプライト番号から>007Cのパラメータに変換を行います
R10は>00B4で使用するためのデータになります
>00C4アドレス計算
>00C8アドレス計算
>00CCVRAMコピー
>00D0タイマnスタート
>00D4タイマnチェック
>00D8乱数セット
出力:>F06A=乱数データ
使用:R11、R12
>F06Aに乱数値を置きます
>00DC十進数表示
入力:R9=Bit0-2未使用
Bit31=>F0F4を表示、0=>F0F0を表示
Bit4-5未使用?
Bit6-10Y座標
Bit11-15X座標
R10=Bit0-2???
Bit3-5???
十進数を表示します
十六進数から十進数には変換はしていないのと
事前にキャラクタ定義をする必要があります
>00E0
>00E4データを反転してキャラクタ定義
>00E8VRAMFILL
入力:R8=埋めるデータ(上位のみ)
R9=>007Cパラメータ(転送先VRAMアドレス)
Bit0-3番号0-F
Bit4-15オフセットアドレス
R10=長さ
出力:R0=VDPステータス(Bit0-7)
使用:R11、R13、R14
>F070Bit6
VRAMをR8のデータで埋めます
>00ECVRAM>00FILL
入力:R9=>007Cパラメータ(転送先VRAMアドレス)
Bit0-3番号0-F
Bit4-15オフセットアドレス
R10=長さ
出力:R0=VDPステータス(Bit0-7)
使用:R11、R13、R14
>F070Bit6
VRAMを>00で埋めます
>00F0コントローラ入力
入力:R7=>0000コントローラ1
>0001コントローラ2
出力:何か押された場合
R8=Bit00
Bit10
Bit20
Bit30
Bit40
Bit50
Bit6SLキー
Bit7SRキー
Bit80
Bit90
Bit100
Bit110
Bit120
Bit130
Bit140
Bit151=入力あり、0=入力なし
R9=Bit00
Bit10
Bit20
Bit30
Bit40
Bit50
Bit60
Bit71=方向キー入力あり、0=方向キー入力なし
Bit80
Bit90
Bit100
Bit110
Bit120
Bit130
Bit140
Bit151=シュートキー入力あり、0=シュートキー入力なし
R10=方向キー番号
0=上
1=右上
2=右
3=右下
4=下
5=左下
6=左
7=左上
コールした次のアドレスに戻る
何も押されない場合
なし
コールした次のアドレス+4に戻る
使用:R11、R12
割込みで得たキーデータを元に入力データに変換します
BL@>00F0でコールして次の2つのアドレスに分岐されます
<例>
BL@>00F0;コントローラ入力
B@TRUE;何か押された
B@FAIL;何も押されていない
|
>00F4
>00F8
>00FC指定範囲内の表示
入力:R8=表示するデータアドレス
R9=>007Cパラメータ(転送元VRAMアドレス)
Bit0-3番号0-F
Bit4-15オフセットアドレス
R10上位=表示する縦範囲
R10下位=表示する横範囲
使用:R11、R12
R9で指定した場所から縦×横のメッセージを表示を行います
ゲームのタイトル(スクランブル)に使用されています
>0100
>0104
>0108
>010CDRAW
入力:R8=DRAWキャラクタアドレス
R9=>007Cパラメータ(転送元VRAMアドレス)
Bit0-3番号0
Bit4-15オフセットアドレス
R10=DRAWデータアドレス
使用:R11
>F056=R11退避用
設定したオフセット座標にDRAWキャラクタを書きます
ゲームのタイトル描画(フロッガー等)に使用
DRAWデータはデータの長さ、オフセット座標、オフセット座標...となります
<例>
LIR8,>DRAWCHR
LIR9,>0100;パターン・ネーム・テーブル>1D00
LIR10,>DRAWDATA
DRAWCHR:
BYTE>FF;CHR>FFで書く
DRAWDATA:
BYTE>03;オフセット座標3バイト
BYTE>00;一番左上>1D00に書く
BYTE>20;一番左上から下>1D20に書く
BYTE>01;一番左上から+1>1D01に書く
>0110
>0114
>0118
>011Cレジスタ退避
出力:>F062->F063=R6の内容
>F064->F065=R7の内容
>F066->F067=R8の内容
>F068->F069=R9の内容
>F06A->F06B=R10の内容
>F06C->F06D=R12の内容
使用:>F060->F061=レジスタ退避用(R0)
R11
レジスタ退避を行います
>0120レジスタ復帰
出力:R0=>F060->F061の内容
R6=>F062->F063の内容
R7=>F064->F065の内容
R8=>F066->F067の内容
R9=>F068->F069の内容
R10=>F06A->F06Bの内容
R11=>F06C->F06Dの内容
使用:R11、R12
レジスタ復帰を行います
>0124
>0128
>012C
>0130
>0134
>0138S.E.0
>013CS.E.1
>0140
>0144
>0148
>014C
>0150
>0154
>0158
>015C
>0160
>0164クリアワークメモリ
>0168
>016CPSGトラック0演奏終了のチェック
出力:Zf=1演奏終了
0演奏中
使用:R11、R12
>F0CA=PSGトラック0コマンド
PSGトラック0の演奏が終わったかチェック(PSGコマンド>80)を行います
>0170PSGトラック1演奏終了のチェック
出力:Zf=1演奏終了
0演奏中
使用:R11、R12
>F0CB=PSGトラック1コマンド
PSGトラック1の演奏が終わったかチェック(PSGコマンド>80)を行います
>0174PSGトラック2演奏終了のチェック
出力:Zf=1演奏終了
0演奏中
使用:R11、R12
>F0CC=PSGトラック2コマンド
PSGトラック2の演奏が終わったかチェック(PSGコマンド>80)を行います
>0178VRAM2バイト書き込み
入力:R8上位=第1バイトライトデータ
R8下位=第2バイトライトデータ
R9=VRAMアドレス
出力:>F074=VRAMアドレス+2
使用:R11、R14
>F070Bit6
VRAMに2バイトデータを書き込みます
>017CVRAM2バイト読み込み
入力:R9=VRAMアドレス
出力:R8上位=第1バイトリードデータ
R8下位=第2バイトリードデータ
>F074=VRAMアドレス+2
使用:R11、R14
>F070Bit6
VRAMに2バイト読み込みを行います
>0180
>0184
>0188ソフトウェアディレイ
入力:R13=ディレイ数
使用:R11、R12
ソフトウェアデイレイをかけます
>018CオフセットアドレスからスプライトX、Yに変換
入力:R8=パターン・ネーム・テーブルオフセットアドレス
出力:R8上位=スプライトY
R8下位=スプライトX
使用:R8、R11、R13
パターン・ネーム・テーブルオフセットアドレスから
スプライト属性テーブルで使用するX、Yに変換します
システムではカーソル表示に使用
>0190本体内蔵フォントアドレスの取得
出力:R8
使用:R11
本体内にある文字フォントがあるアドレスを取得(定義はしない)
ゲームで内蔵フォントを使用する場合に使用
CHR$00-$0F記号
CHR$10-$1F数字
CHR$20-$3F英字
CHR$40-$6Fカナ
>0190
>0194VRAM8バイト書き込み
入力:R7=データアドレス
R9=VRAMアドレス
出力:R8=>0000
使用:R8、R10、R11
8バイトのデータをVRAMに書き込みを行います
>0198VDPの初期化
>019Cセルの初期化
>01A0
>01A4
>01A8
>01AC
>01B0
>01B4
>01B8
>01BC
>01C0MAGスプライトの拡大
入力:R12=>0000拡大しない
>0001拡大する
使用:R11、R12、R13
>F06F
スプライトの拡大の有無の設定
>01C4
>01C8
>01CC
>01D0
>01D4
>01D8
>01DC
>01E0
>01E4X、Y座標からオフセットアドレスに変換
入力:R12=X座標
R13=Y座標
出力:R8=オフセットアドレス
R13=Y座標の左端のオフセットアドレス
使用:R8、R11、R13
座標からパターン・ネーム・テーブル用のオフセットアドレスに変換を行います
>01E8
>01EC
>01F0
>01F4
>01F8十進ワークのクリア
入力:R12=>0000>F0F0->F0F2をクリア
>0001>F0F4->F0F6をクリア
>0002>F0F0->F0F2、>F0F4->F0F6をクリア
使用:R11、R13
十進数表示用のワークをクリアします
>01FCカラー設定
入力:R9=カラー(VDPR#07データ)
使用:R0、R11、R12、R13
カラー(VDPR#07)の設定
>0200
>0204
>0208
>020C
>0210
>0214
>02182倍拡大文字の定義
入力:R9=定義するCHRVRAMアドレス
R10=拡大したいCHRデータ
出力:R9=定義するCHRVRAMアドレス+>20(+4キャラクタ)
使用:R0
8×8ドット文字を2倍の16×16ドット文字に変換して
キャラクタ定義にします(4キャラクタ分消費される)
>021Cキー入力チェック
入力:R6=チェックするキー(上位のみアスキー)
使用:R11
>F0E9
チェックしたいキー入力があるか調べます
チェックしたいキーが押されれば、コールした次のアドレスに戻る
何も押されなければ、コールした次のアドレス+2に戻る
また通常キー入力はカナ文字となるので注意が必要
<例>
CLRR6;チェックするキーは>00なので何か押されたかとなる
BL@>021C;キー入力チェック
JMP@ANYKEY;何かキーが押された処理へ
JMP@NOKEY;キーが押されていない処理へ
>0220RTキー入力チェック
使用:R11
>F0E9
RTキー入力があるか調べます
RTキーが押されれば、コールした次のアドレスに戻る
何も押されなければ、コールした次のアドレス+2に戻る
<例>
BL@>0220;RTキー入力チェック
JMP@RTKEY;RTキーが押された処理へ
JMP@NORTKEY;RTキーが押されていない処理へ
>0224
>0228
>022Cプレイヤー人数の選択
入力:R10=>0000
出力:>F0E8=>001人用
>012人用
1または2キーが押された場合
>F0E8に人数-1をセット、コールした次のアドレスに戻る
何も押されていない場合
コールした次のアドレス+2に戻る
使用:R1、R11
’プレイヤー1,2?’を表示して
1キーか2キーが押されたかチェックを行います
メッセージを表示するので事前にキャラクタ定義する必要があります
>0230カーソル表示
入力:R4上位=スプライト属性テーブルデータスプライト#nn
R4下位=スプライト属性テーブルデータカラー
R5=スプライト属性テーブルアドレス
使用:R0、R11
タイマー0
>F0E0=カーソルオフセットアドレス
>F0F3Bit01=カーソルオフ、0=カーソルオン
タイマー0を用いてカーソルの点滅を行います
カーソルはスプライトで表示され
F0F3Bit0=1入力パラメータR4のカラーで表示(通常は>00の透明)
0白で表示
カラーの有無で点滅を行います
>0234VRAMにデータ列の書き込み(メッセージの表示)
入力:R7=表示するデータアドレス
R9=Bit0長さ
Bit1長さ
Bit2長さ
Bit3長さ
Bit4長さ
Bit5VRAMアドレスA5(残りのA0-A4は0になる)
Bit6VRAMアドレスA6
Bit7VRAMアドレスA7
Bit8VRAMアドレスA8
Bit9VRAMアドレスA9
Bit10VRAMアドレスA10
Bit11VRAMアドレスA11
Bit12VRAMアドレスA12
Bit13VRAMアドレスA13
Bit14VRAMアドレスA14
Bit15VRAMアドレスA15
使用:R0、R9、R12
>F074=VRAMアドレス
VRAMにデータ列の書き込みを行います
主に画面に文字列の表示で使用
>5000->7FFF:メモリ未使用
>8000->BFFF:メモリROMカートリッジまたは拡張RAM
>8000->8002:ここに>1578を書き込んでチェックしている
書き込みが出来たらF06EBit5=0
また>5581のチェックもある
>0238
>023Cラインインプット
>0240
>0244
>0248
>024C
>0250
>C000->DFFF:メモリ???拡張ROM
>E000:I/OVDPデータ
>E002:I/OVDPレジスタ
>E200:I/OSN76489
>E400->E5FF:/CSGROM1カードリッジ拡張用
>E600->E6FF:/EXP0メニユー行く前に、E600に>55があるとE600にジャンプ
>E800->E8FF:/EXP1プリンタ
>EA00->EAFF:/EXP2
>EC00->EC7E:I/OKEYBORADSELECT
>EC00->EC0F:キーライン012QWASZXの選択A15は無視、1バイトで1つのキー
>EC10->EC1F:キーライン134ERDFCVの選択押した判断はCRUで読む
>EC20->EC2F:キーライン256TYGHBNの選択
>EC30->EC3F:キーライン3789UIJKMの選択
>EC40->EC4F:キーライン40-OPL;.,の選択
>EC50->EC5F:キーライン5¥@:ム/ロの選択
>EC60->EC6F:キーライン6英記モRTMOの選択
>EC70->EC7F:キーライン7左上下右の選択
>EE00:I/OCMTOUT’0’
>EE20:I/OCMTOUT’1’
>EE40:I/OCMTOUTInterruptOn
>EE60:I/OCMTOUTInterruptOff
>EE80:I/OCMTOUTInterruptRESET
>EEA0:I/OKB/CMTLS74のF.Fリセット
>EEC0:拡張用?
>EEE0:拡張用音響カプラ?
>EFEC->EFED:*初期化R0
>EFEE->EFEF:*初期化R1
>EFF0->EFF1:*初期化R2
>EFF2->EFF3:*初期化R3
>EFF4->EFF5:*初期化R4
>EFF6->EFF7:*初期化R5
>EFF8->EFF9:*初期化R6
>EFFA->EFFB:*初期化R7
>EFFC->EFFD:*初期化R8
>EFFE->EFFF:*初期化R9
>F000->F001:初期化R10、VRAM>1FF0、>1FF1の内容
>F002->F003:初期化R11、VRAM>1FF2、>1FF3の内容
>F004->F005:初期化R12、VRAM>1FF4、>1FF5の内容
>0000=GRAPHIC背景内
>FFFF=GRAPHICパレット内
>F006->F007:初期化R13、VRAM>1FF6、>1FF7の内容
パレット内カーソルオフセットアドレス
>F008->F009:初期化R14、VRAM>1FF8、>1FF9の内容
>0000=GRAPHICパレット下部に表示
>FFFF=GRAPHICパレット上部に表示
>F00A->F00B:初期化R15、VRAM>1FFA、>1FFBの内容
>F00C->F00D:VRAM>1FFC、>1FFDの内容
>F00E->F00F:VRAM>1FFE、>1FFFの内容
>F010->F011:GRAPHICスペースキーを押した回数
>F012->F013:GRAPHICMODキーを押した回数
>F014->F015:アニメ4位置オフセット
>F016:アニメ4スプライト#nn
>F017:アニメ4カラー
>F018->F019:アニメ3位置オフセット
>F01A:アニメ3スプライト#nn
>F01B:アニメ3カラー
>F01C->F01D:アニメ2位置オフセット
>F01E:アニメ2スプライト#nn
>F01F:アニメ2カラー
>F020->F021:アニメ1位置オフセット
>F022:アニメ1スプライト#nn
>F023:アニメ1カラー
>F024:GRAPHICカーソル方向
>F030:GRAPHICパレット内セル番号万の桁(アスキーコード未使用)
>F031:GRAPHICパレット内セル番号千の桁(アスキーコード未使用)
>F032:GRAPHICパレット内セル番号百の桁(アスキーコード)
>F033:GRAPHICパレット内セル番号十の桁(アスキーコード)
>F034:GRAPHICパレット内セル番号一の桁(アスキーコード)
>F05A->F05B:R11退避用
>F05C->F05D:VRAMスタックインデックス
>F05E
Bit0
Bit1
Bit2
Bit3
Bit5不明拡張ハード?1=接続していない?、0=接続している?
Bit6
Bit7
>F062->F063R6退避用
>F064->F065R7退避用
>F066->F067R8退避用
>F068->F069R9退避用
>F06A->F06BR10退避用
>F06C->F06DR12退避用
>F06E:メニューモード
Bit0拡張RAM1=あり、0=なし
Bit1
Bit2メニューモード1=オン、0=オフ
Bit3拡張BASIC1=あり、0=なし
Bit4カードリッジ1=あり、0=なし
Bit5カードリッジID1=>66、0=>55
Bit6G-BASICモード1=オン、0=オフ
Bit7GRAPHICモード1=オン、0=オフ
拡張用はカードリッジID>AAで>5000を実行
ID>66で>8002を実行
ID>55で>8002を実行(ゲームカードリッジ)
>F06F:VDPR#01データ+アルファ
Bit04/16K
Bit1BLANK
Bit2IE
Bit3不明通常は0
Bit4不明通常は0
Bit6SIZE
Bit7MAG
>F070:
Bit0GRAPHIC、BASIC1=オン、0=オフ
Bit1ファイル名入力1=オン、0=オフ
Bit2M3
Bit3
Bit4
Bit5
Bit6VDPアクセス1=アクセス中、0=アクセスしていない
Bit7
Bit0
Bit11=INT4サブルーチンを実行する、0=INT4サブルーチンを実行しない
Bit2
Bit3
Bit4
Bit5
Bit6
Bit7
>F072:
Bit0
Bit11=G-BASIC、0=GRAPHIC
Bit2
Bit3
Bit41=システム実行、0=カードリッジ実行
Bit51=EMEM実行可、0=EMEM実行不可
Bit61=EBAS実行可、0=EBAS実行不可
Bit7
Bit8
Bit9
Bit10
Bit11
Bit12
Bit13
Bit14
Bit15
>F076->F077:PSGR11
>F078->F079:PSGR12
>F07A->F07B:INT4R0、PSGR13
>F07C->F07D:INT4R1、PSGR14PSGコマンドアドレス
>F07E->F07F:INT4R2、PSGR15PSGデータアドレス
>F080->F081:INT4R3、タイマ0H
>F082->F083:INT4R4、タイマ0L
>F084->F085:INT4R5、タイマ1H
>F086->F087:INT4R6、タイマ1L
>F088->F089:INT4R7、タイマ2H
>F08A->F08B:INT4R8、タイマ2L
>F08C->F08D:INT4R9、タイマ3H
>F08E->F08F:INT4R10、タイマ3L
>F090->F091:INT4R11、タイマ4H
>F092->F093:INT4R12、タイマ4L
>F094->F095:INT4R13、タイマ5H
>F096->F097:INT4R14、タイマ5L
>F098->F099:INT4R15、タイマ6H
>F09A->F09B:タイマ6L
>F09C->F09D:タイマ7H
>F09E->F09F:タイマ7L
>F0A0->F0A1:R0
>F0A2->F0A3:R1
>F0A4->F0A5:R2
>F0A6->F0A7:R3
>F0A8->F0A9:R4
>F0AA->F0AB:R5
>F0AC->F0AD:R6
>F0AE->F0AF:R7
>F0B0->F0B1:R8
>F0B2->F0B3:R9
>F0B4->F0B5:R10
>F0B6->F0B7:R11
>F0B8->F0B9:R12
>F0BA->F0BB:R13
>F0BC->F0BD:R14
>F0BE->F0BF:R15
>F0C0->F0C1:タイマ割込みR0G-BAISC>0420、EBAS>05E0
Bit0
Bit1
Bit2
Bit3
Bit4
Bit5
Bit6
Bit7
Bit8
Bit9
Bit10
Bit11
Bit12
Bit13
Bit14
Bit15
>F0C2->F0C3:タイマ割込みR1キーデータ1、0
>F0C4->F0C5:タイマ割込みR2キーデータ3、2
>F0C6->F0C7:タイマ割込みR3キーデータ5、4
>F0C8->F0C9:タイマ割込みR4キーデータ7、6
>F0CA->F0CB:タイマ割込みR5PSGトラック0、1コマンド
>F0CC->F0CD:タイマ割込みR6PSGトラック2コマンド
>F0CE->F0CF:タイマ割込みR7
>F0D0->F0D1:タイマ割込みR8
>F0D2->F0D3:タイマ割込みR9
>F0D4->F0D5:タイマ割込みR10
>F0D6->F0D7:タイマ割込みR11カウンタH
>F0D8->F0D9:タイマ割込みR12カウンタL割込み毎で+1、>2EE0でカウンタH+1
>F0DA->F0DB:タイマ割込みR13
>F0DC->F0DD:タイマ割込みR14
>F0DE->F0DF:タイマ割込みR15
>F0E0->F0E1:カーソル位置オフセットアドレス
>F0E2->F0E3:PSGトラック0データアドレス
>F0E4->F0E5:PSGトラック1データアドレス
>F0E6->F0E7:PSGトラック2データアドレス
>F0E8:ゲームプレイ人数>00=一人用、>01=二人用
>F0E9:キーデータ変換アスキーコード
>F0EA:コントローラ1
Bit01=入力あり、0=入力なし
Bit1-
Bit2SL1=オン、0=オフ
Bit3SR1=オン、0=オフ
Bit4下1=オン、0=オフ
Bit5左1=オン、0=オフ
Bit6上1=オン、0=オフ
Bit7右1=オン、0=オフ
>F0EB:コントローラ2
Bit01=入力あり、0=入力なし
Bit1-
Bit2SL1=オン、0=オフ
Bit3SR1=オン、0=オフ
Bit4下1=オン、0=オフ
Bit5左1=オン、0=オフ
Bit6上1=オン、0=オフ
Bit7右1=オン、0=オフ
>F0EC->F0ED:汎用
>F0EE->F0EF:十進数表示用VRAMアドレス
>F0F0:十進数A千、百の桁
>F0F1:十進数A十、一の桁
>F0F2:十進数A十万、万の桁
>F0F3:
Bit01=カーソルオフ、0=カーソルオン
Bit11=キーが押された、0=キーが離された
Bit2
Bit3
Bit4
Bit51=カードリッジまたはシステムを実行、0=実行していない
Bit61=タイマ割込みサブルーチンを実行しない、0=タイマ割込みサブルーチンを実行する
Bit71=拡張ハードでキー入力可、0=拡張ハードでキー入力不可
>F0F4:十進数B千、百の桁
>F0F5:十進数B十、一の桁
>F0F6:十進数B十万、万の桁
>F0F7:キー入力モード
Bit0
Bit1
Bit2
Bit3
Bit4
Bit51=記号モードオン、0=記号モードオフ
Bit61=英数モードオン、0=英数モードオフ
Bit71=カナモードオン、0=カナモードオフ
>F0F8:十進数表示ワーク千、百の桁
>F0F9:十進数表示ワーク十、一の桁
>F0FA:十進数表示ワーク十万、万の桁
>FFFA->FFFB:CPU内蔵タイマ
>FFFC->FFFF:CPUNMIベクトル
>8000に>55があれば(ゲームROMの先頭)
メニューでゲームカートリッジの選択が出来る様になります
選択すると>8002へジャンプします
>8000に>66の場合
メニューでゲームカートリッジの選択が出来る様になります
選択すると>8002へジャンプします
>8000に>AAの場合
>F06EのBit3=1にして>5000にジャンプします
起動時に>8000に書き込みが出来るかチェックを行っているが
通常のシステムが拡張RAMにも対応可なのかは不明
VRAM
>0000->07FFパターンジェネレータトップ
>0800->0FFFパターンジェネレータミドル
>1000->17FFパターンジェネレータロウ
>1800->187Fスプライトパターン
>1880->1883???カーソルワーク
>1C00->1CFFパターン・ネーム・テーブルトップ
>1D00->1DFFパターン・ネーム・テーブルミドル
>1E00->1FFFパターン・ネーム・テーブルロウ
>2000->27FFカラー・テーブルトップ
>2800->2FFFカラー・テーブルミドル
>3000->37FFカラー・テーブルロウ
>3800->3F7FGRAPHICBGトップまたはロウ保存用(サンプルカラー、パレット)
G-BASICプログラム領域
>3F9C->3FBBキーバッファ
>3FBC>0Dキーバッファエンドマーク?
>3FDD->3FEAレジスタ保存用R0、R6-R10、R12
>3FF9->3FFEレジスタ保存用R13-R15
Enri's HP
http://www43.tok2.com/home/cmpslv/