ぴゅう太 (TP1000)

密かに、くろーびす氏の協力に感謝
メニュー:GRAPHIC/G−BASICへ BASIC1へ   ぴゅう太のスペック
CPU TMS9995 10.738MHz
VDP TMS9918
PSG SN76489
ROM 32KB(使用領域20KB)
RAM なし(CPU内に256B)
V-RAM 16KB
TI社のチップで固められた稀有なパソコン 日本で発売された同じようなハードといったら一応TI−99ぐらいしかない(CPUはTMS9990) 更に独特なニホンゴBASICが異才を放ち、海外ではTomy Tutorという名前で発売されており、 ロットによってはマスクROMを使用したり、拡張性もあったり以外と本格的なハード(G−BASICだけが冗談で作られたとしか思えない) ワークエリアはなく、CPUの内の16ワード*8バンクの計256バイトとVDPで使われない領域を使用 尚、初代ぴゅう太は少なくとも3種類のバージョンがあるみたいなのですが回路図は当然手持ちのハードのみです。 製造番号はZTST 038581です。(恐らく中期バージョン) 初期は256KBitPROM1個らしく、中期は256KBitマスクROM1個、後期はマスクROM2つになっているみたいです (注)TI社のチップはMSBとLSBが通常と逆になっています。(ROMの部分ではアドレス、データバスの並びが逆なのはその為です  
拡張性 BASIC1  予定していたBASIC Iは16KのROMカートリッジでしたが  実際にはシステムV2.3+BASIC 1となり  内蔵システム禁止になりTUTORと同システムになります  背面の拡張ポートが塞がり、その為にプリンタIF内蔵になります  mkII用はBASIC1のみになります  システムV2.3におけるMENUのBASICはBASIC1を指します  したがってmkIIのMENUでBASIC1が無い状態で  BASICを選択するとタイトルに戻ります  GBASICはGRAPHICモード、MONモードにしてから  GBASICコマンド呼び出します     BASIC2(未発売)  マザーボックスに内蔵されROM32K、RAM16K  このマザーボックスに  プリンタ、音響カプラ、FDD、ボイスシンセサイザーが接続される     E−BASIC(未発売)  G−BASICの命令を拡張する様に設計されているようです    
機種による文字化け 左がぴゅう太、右がぴゅう太Jr.による画面となります 画面下のスコア部分のカナ文字部分が正しく表示されません これはカナ文字か英小文字の定義がされているか機種によって違い 文字化けが起こる問題が生じます   その為後期のソフトになるとカナ文字を表示を止めて 英大文字表記になり文字化けの問題を回避しています ただしプレイヤー選択ルーチンはBIOSコールで行う為 メッセージ表示が機種ごとに変化します  
CPU CPUはTI社のTMS9995を使用クロックは10.738MHz(内部2.6845MHz) このクロックはVDPと共用で使われています   システムROM CRC:7553bb6a 256KBit マスクROMみたいです。(実際に256KBitとして読む事ができます。)   I/O周辺 CMT−IFはトーンバースト方式です   キーボード、コントローラ周り CRUINでシリアルでキーデータを読み込んでいます J−2はキーボード、J−3はコントローラ端子になりキーボードとデータが重なります A9〜A11で読むデータのセレクト(/Y0〜/Y7) A12〜A14で読むビットのセレクトになります   キーマトリクス   コントローラ TP1101   PSG SN76489Aを使用、 クロックはVDPから出力されるCPUCLK 3.7597MHz   VDP TMS9918を使用、CPUCLK端子はPSGのクロックに使用しています。   コネクタ 端子名は、とりあえずつけてみただけです J−1はカートリッジ端子(偶数が前) C-1は背面にある拡張端子(奇数が上) J−2はカセットIF /KILL SROMを0にすると本体内のシステムROMの使用禁止 SELEXM 1=拡張メモリを選択        0=本体、カードリッジメモリ、I/Oを選択   /EXM00 拡張メモリ>0000〜>3FFF /EXM40 拡張メモリ>4000〜>7FFF /EXM80 拡張メモリ>8000〜>BFFF /EXMC0 拡張メモリ>C000〜>FFFF /EXP0  >E600〜>E7FF ROM? E600:55のチェックあり /EXP1  >E800〜>E8FF プリンタ用I/Oポート /EXP2  >EA00〜>EBFF /EXP3  >EC00〜>EDFF ???テンキーポート   /CROM0 >8000〜>BFFF カートリッジメモリ /CROM1 >E400〜>E5FF カートリッジI/Oポート用?   /IOPORT 1=>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   >0018 CPU RAM >F00C〜>F083のクリア  入力:WP=>EFEC    CPU内蔵RAM >F00C〜>F083を>00で埋めます  BLWP命令でコールします   >001C CPU RAM >F00C〜>F081のクリア  入力:WP=>EFEC    CPU内蔵RAM >F00C〜>F081を>00で埋めます  BLWP命令でコールします     ------------------------------------------------------------------------- >0020 VDP初期化  入力:R8=VDPデータ アドレス  出力:R0=VDPステータス(d0〜7)  使用:R9、R10、R11、R12     >F070 d6    VDPのR#00−#08までの設定を行います     >0024 VDP レジスタの設定  入力:R9=設定データ 上位=データ、下位=>80+レジスタ  出力:R0=VDPステータス(d0〜7)  使用:R10、R11     >F070 d6    VDPのレジスタの設定を行います  レジスタ指定は+>80にしておく必要があります    <例>   LI 9,>0786   ;VDP R#06=07   BL @>0024       :     >0028 VRAMオールクリア  出力:R0=VDPステータス(d0−7)  使用:R7、R8、R9、R10、R11、R13、R14     >F070 d6    VRAM >0000〜>3FFFを>00で埋めます     >002C VRAM FILL  入力:R8=埋めるデータ(上位のみ)     R9=VRAM先頭アドレス     R7=長さ  出力:R0=VDPステータス(d0−7)  使用:R7、R11、R13、R14     >F070 d6    VRAMにデータを埋めます     >0030 VRAMアドレスの設定 ライト  入力:R9=VRAMアドレス  使用:R11     >F070 d6    書き込みを行う為のVRAM指定を行います  またR9は入力の値に直して返します     >0034 VRAMアドレスの設定 リード  入力:R7=VRAMアドレス  出力:>F074=VRAMアドレス  使用:R11     >F070 d1=1           d6    読み込みを行う為のVRAM指定を行います     >0038 VRAM 1バイト書き込み  入力:R8=ライトデータ(上位のみ)     R9=VRAMアドレス  出力:R8=ライトデータ(上位のみ)     R9=VRAMアドレス+1     >F074=VRAMアドレス+1  使用:R9、R11、R14     >F070 d6    VRAMに1バイト書き込みを行います     >003C VRAM 1バイト読み込み  入力:R7=VRAMアドレス  出力:R8=リードデータ(上位のみ)     R7=VRAMアドレス+1     >F074=VRAMアドレス+1  使用:R11、R14     >F070 d6    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=d0〜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=d0〜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アドレス     R10 d0  =1 2×2キャラクタ定義             0 1×1キャラクタ定義        d1〜7=0        d8〜15=定義するキャラクタ数    使用:R5、R7、R8、R9、R10、R11、R12     >F070 d6    キャラクタデータを左右反転して定義を行います  ただし2×2キャラクタ定義の場合  データアドレス+>10 2キャラクタ定義  データアドレス     2キャラクタ定義の順になります    定義するキャラクタ数は1×1で0、2×2で1となります       >0058 1P スコア+加算とハイスコアの十進数表示  入力:R12=d0〜2 加算する得点(0〜7)        d3〜5 加算する倍率(×0〜×7)        d6〜15 表示するスコア オフセットアドレス     >F0EE〜>F0EF 表示するハイスコア オフセットアドレス     >F0F8〜>F0FA ハイスコア  出力:>F0F0〜>F0F2 1Pスコア     >F0F8〜>F0FA ハイスコア  使用:R3、R8、R9、R10、R11、R12、R13     >F0F0〜>F0F2    1P スコアを加算、ハイスコアの十進数表示を行います  また1P スコアがハイスコアを越えると  ハイスコアが書き換えられます     >005C 2P スコア+加算とハイスコアの十進数表示  入力:R12=d0〜2 加算する得点(0〜7)        d3〜5 加算する倍率(×0〜×7)        d6〜15 表示するスコア オフセットアドレス     >F0EE〜>F0EF 表示するハイスコア オフセットアドレス     >F0F8〜>F0FA ハイスコア  出力:>F0F4〜>F0F7 1Pスコア     >F0F8〜>F0FA ハイスコア  使用:R3、R8、R9、R10、R11、R12、R13     >F0F4〜>F0F7    2P スコアを加算、ハイスコアの十進数表示を行います  また2P スコアがハイスコアを越えると  ハイスコアが書き換えられます     >0060 キャラクタの指定方向へ連続表示1  入力:R7=パターン・ネーム・テーブル オフセットアドレス     R8=d0〜2:方向        d3〜7:長さ−1        d8〜15:表示するキャラクタ  出力:R7=最後に表示したパターン・ネーム・テーブル オフセットアドレス  使用:R5、R6、R7、R8、R9、R11、R13、R14、     F070、F074、F075    キャラクタを指定方向に連続表示します     方向:000=上 、001=右上、010=右 、011=右下      100=下 、101=左下、110=左 、111=左上     ------------------------------------------------------------------------- >0064 PSG オ−ルオフ  使用:R9、R11     >F0CA=PSGトラック0コマンド     >F0CB=PSGトラック0コマンド     >F0CC=PSGトラック0コマンド     >F0E2=PSGトラックデータアドレス       PSGの全チャンネルを音量オフにする為のデータを設定します  またPSGアクセス自体は別の処理(割込み)で行われます     >0068 PSGトラック0セット  入力:R9=PSGトラック0データアドレス  出力:>F0CA=PSGトラック0コマンド >01     >F0E2=PSGトラック0データアドレス  使用:R11    PSGトラック0の演奏を行います     PSGコマンドは割込み内のルーチンでDECされます    >01     PSGポート>E200に書き込み    >02〜>7F 演奏する長さ    >00     演奏終了開始    >FF〜>80 演奏終了(DECされて>80で停止)    <例>演奏データ   BYTE >06     ;ポートに書き込むバイト数   BYTE >8A,>05 ;周波数A >05A ―・   BYTE >90     ;音量 A >00   |ポートに書き込むデータ   BYTE >A1,>07 ;周波数B >071  |   BYTE >B0     ;音量 B >00  ―・   BYTE >4C     ;PSGコマンド(長さ)    :    :   BYTE >02     ;ポートに書き込むバイト数   BYTE >9F     ;音量 A >0F   BYTE >BF     ;音量 B >0F   BYTE >00     ;終了     >006C PSGトラック1セット  入力:R9=PSGトラック1データアドレス  出力:>F0CB=PSGトラック1コマンド >01     >F0E4=PSGトラック1データアドレス  使用:R11    PSGトラック1の演奏を行います   >0070 PSGトラック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へジャンプ     ------------------------------------------------------------------------- >007C メモリアクセスアドレスの取得  入力:R9=d0〜3 番号 0−F        d4〜15 オフセットアドレス  出力:R9=VRAMアドレスまたはCPUアドレス  使用:R11、R12    まずR9の内容を番号と加算する値に分け  番号に対応する範囲とオフセットアドレスを合成します  チェックする範囲外だと>0014のベクタを実行    番号|チェックする範囲  −−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−   0|>1C00〜>1EFF VRAMアドレス パターン・ネーム・テーブル(セル)   1|>0000〜>07FF VRAMアドレス パターン・ジェネレータ・テーブル トップ   2|>0800〜>0FFF VRAMアドレス パターン・ジェネレータ・テーブル ミドル   3|>1000〜>17FF VRAMアドレス パターン・ジェネレータ・テーブル ロウ   4|>2000〜>27FF VRAMアドレス カラー・テーブル トップ   5|>2800〜>2FFF VRAMアドレス カラー・テーブル ミドル   6|>3000〜>37FF VRAMアドレス カラー・テーブル ロウ   7|>1F00〜>1F7F VRAMアドレス スプライト属性テーブル   8|>1800〜>1BFF VRAMアドレス スプライト・パターン・ジェネレータ・テーブル   9|>3800〜>3FFF VRAMアドレス 変数領域(オフセット>640から)   A|>1F80〜>1FFF VRAMアドレス スタック領域、ワーク   B|>1880〜>1BFF VRAMアドレス モニター領域パターン、カラー退避用   C|>1F10〜>1F7F VRAMアドレス   D|>3800〜>3FFF VRAMアドレス プログラム領域   E|>3800〜>3FFF VRAMアドレス プログラム領域   F|>F000〜>FFFF CPUアドレス     >0080 VRAM連続読み込み  入力:R8=転送先CPUアドレス     R9=>007Cパラメータ(転送元VRAMアドレス)         d0〜3 番号 0−E         d4〜15 オフセットアドレス     R10=長さ  出力:R12=転送元VRAMアドレス+>1000  使用:R11    転送先アドレスにVRAMデータをメモリに連続転送します     >0084 VRAM1バイトリード  入力:R8=転送先アドレス     R9=>007Cパラメータ(転送元VRAMアドレス)  使用:R11、R12    VRAMの内容1バイトをメモリに転送します     >0088 オフセットアドレスからキャラクタパターン取得  入力:R7=転送先アドレス     R8=VRAMアドレス     R9=オフセットアドレス(>007C用)  出力:キャラクタパターン  使用:R11、R12    >00C4でパラメータ パターン・ジェネレータ・テーブルを取得して  R8アドレスに8バイトのパターンを取得します >008C オフセットアドレスからキャラクタカラー取得  入力:R7=転送先アドレス     R8=VRAMアドレス     R9=オフセットアドレス(>007C用)  出力:キャラクタカラー  使用:R11、R12    >00C8でパラメータ カラー・テーブルを取得して  R8アドレスに8バイトのパターンを取得します     >0090 スプライトATBの4バイト取得  入力:R7=転送先アドレス     R8=スプライトATBデータアドレス     R9=スプライト#nn(>00〜>1F)  出力:スプライトATBデータ  使用:R11、R12    >00C0でスプライト番号からパラメータの取得して  R8アドレスに4バイトの属性データを取得します     >0094 スプライトATBのY、X座標取得  入力:R7=転送先アドレス     R8=スプライトATB Y、Xデータアドレス     R9=スプライト#nn  出力:スプライトATB Y、Xデータ  使用:R11、R12    >00C0でスプライト番号からパラメータの取得して  R8アドレスに2バイトの属性データ前2バイトを取得します     >0098 スプライトATBのスプライト#nn取得  入力:R7=転送先アドレス     R8=スプライトATB #nnデータアドレス     R9=スプライト#nn  出力:スプライトATB #nnデータ  使用:R11、R12    >00C0でスプライト番号からパラメータの取得して  R8アドレスに属性データ スプライト#nnを取得します     >009C スプライトATBのカラー取得  入力:R7=転送先アドレス     R8=スプライトATBカラーデータアドレス     R9=スプライト#nn  出力:スプライトATBカラーデータ  使用:R11、R12    >00C0でスプライトATBを取得して  R8アドレスに属性データ カラーを取得します     >00A0 VRAM連続書き込み  入力:R8=転送元アドレス     R9=>007Cパラメータ(転送先VRAMアドレス)        d0〜3 番号 0〜F        d4〜15 オフセットアドレス     R10=長さ  出力:R12=転送元VRAMアドレス+>1000  使用:R11    転送元アドレスにあるデータをVRAMに転送します  ゲームカートリッジではキャラクタ定義に使用     >00A4 VRAM1バイト書き込み  入力:R8=転送元アドレス     R9=>007Cパラメータ(転送先VRAMアドレス)  使用:R11    転送元アドレスにあるデータを1バイトだけVRAMに転送します     >00A8 オフセットアドレスからキャラクタパターン定義  入力:R8=データアドレス     R9=オフセットアドレス(>007C用)  使用:R11、R12    >00C4でパラメータ パターン・ジェネレータ・テーブルを取得して  R8アドレスから8バイトのパターン定義を行います >00AC オフセットアドレスからカラー・テーブル定義  入力:R8=データアドレス     R9=オフセットアドレス  使用:R11、R12    >00C8でカラー・テーブルを取得して  R8アドレスから8バイトのカラー・テーブル定義を行います     >00B0 スプライトATBの4バイト設定  入力:R8=スプライトATBデータアドレス     R9=スプライト#nn(>00〜>1F)  使用:R11、R12    スプライト属性の4バイト書き込みを行います     >00B4 スプライト 座標の設定  入力:R8=設定する座標データのあるアドレス     R9=スプライト#nn(>00〜>1F)  使用:R11、R12    スプライト座標の書き込みを行います     >00B8 スプライト属性 番号の設定  入力:R8=データアドレス     R9=スプライト#nn(>00〜>1F)     R10=長さ(通常は>0001か>0002)  使用:R11、R12    指定したスプライト属性の+02スプライト#nnからの  データの書き込みを行います  長さを>0002にするとカラー設定まで行えます  それ以降の長さだと次のスプライト属性の設定になります     >00BC スプライト属性 カラーの設定  入力:R8=データアドレス     R9=スプライト#nn(>00〜>1F)     R10=長さ(通常は>0001)  使用:R11、R12    指定したスプライト属性の+03 カラーの  データの書き込みを行います  長さを>0002以降の長さだと  次のスプライト属性の設定になります     >00C0 スプライト番号からパラメータの取得  入力:R9=スプライト No.nn(>00〜>1F)  出力:R9=>007Cパラメータ 番号、オフセット(スプライト属性テーブル)     R10=>0001 (転送する為の長さ)  使用:R11    スプライト番号から>007Cのパラメータに変換を行います  R10は>00B4で使用するためのデータになります     >00C4 オフセットアドレスからパターンジェネレータ・テーブル計算  入力:R9=オフセットアドレス  出力:R9=>007Cパラメータ パターン・ジェネレータ・テーブル オフセット     R10=>0008  使用:R6、R9、R10、R11、R13    R9で指定したパターン・ネーム・テーブルのオフセットからCHRを取得  そのパターン・ジェネレータ・テーブルに対応する  >007C用のパラメータをR9に出力  R10は>0008が出力されるので次に転送する為     >00C8 オフセットアドレスからカラー・テーブル計算  入力:R9=オフセットアドレス  出力:R9=>007Cパラメータ パターン・ジェネレータ・テーブル オフセット     R10=>0008  使用:R6、R9、R10、R11、R13    R9で指定したパターン・ネーム・テーブルのオフセットからCHRを取得  そのCHRのカラー・テーブルに対応する  >007C用のパラメータをR9に出力  R10は>0008が出力されるので次に転送する為     >00CC VRAMブロック転送  入力:R8=転送元 >007Cパラメータ 番号、オフセット     R9=転送先 >007Cパラメータ 番号、オフセット     R10=長さ  使用:R11、R12    VRAM間のブロック転送を行います     ------------------------------------------------------------------------- >00D0 タイマn スタート  入力:R9=タイマn(0〜7)  出力:EQ=1  使用:R12    >0050を実行する為にパラメータを調節し、コールされ  指定したタイマnのカウンタを0、EQ=1にして  タイマのカウント開始を行います     >00D4 タイマn チェック  入力:R10=d0〜d2 タイマn(0〜7)        d3〜d15 チェックする値の1/2  使用:R11    指定したINC タイマn(0〜7)の値をチェックします  タイマと同じになったら内蔵カウンタの値がタイマnにセットされます  タイマと同じ値なら、コールした次のアドレスに戻る  タイマと違う値なら、コールした次のアドレス+4に戻る    <例>  NOTOUT   LI  10,>0258 ;タイマ2、チェック値 >04B0 (1200)   BL  @>00D4   ;タイマチェック   B   @TOUT    ;タイムアウト処理へ   JMP @NOTOUT  ;処理へ    TOUT    :    :     ------------------------------------------------------------------------- >00D8 乱数セット  出力:>F06A=乱数データ  使用:R11、R12    >F06Aに乱数値を置きます   >00DC スコア用加算+十進数表示  入力:R9=d0〜2 000   未使用        d3   1=2Pを表示(>F0F4)、0=1Pを表示(>F0F0)        d4〜5 00    未使用        d6〜10 Y座標        d11〜15 X座標     R10=d0〜4 00000 未使用        d5〜7 加算する得点(0〜7)        d8〜12 00000 未使用        d13〜15 加算する倍率    スコア用の10進数を表示します  加算する倍率は   0=一の位から表示される   1=十の位から表示される   2=百の位から表示される   3=千の位から表示される   4=表示されない      :   7=表示されない  例えば>0101だと得点1、十の位からなので10点とされます  80点加算したい場合は8回ループする事になります  16進数から10進数には変換はしていないのと  事前にキャラクタ定義をする必要があります     >00E0> キャラクタの指定方向へ連続表示2  入力:R7=長さ(0〜16)−1     R8=表示するキャラクタ(上位のみ)     R9=パターン・ネーム・テーブル オフセット     R10=方向(0〜7)  出力:R9=最後に表示したパターン・ネーム・テーブル オフセット  使用:R7、R11、R13     F05A、F070、F074、F075    入力パラメータを合成して  キャラクタを指定方向に連続表示(>0060)を実行します     方向:000=上 、001=右上、010=右 、011=右下      100=下 、101=左下、110=左 、111=左上     >00E4 左右反転のキャラクタ定義  入力:R9=>007Cパラメータ(VRAMアドレス)     R7=定義するキャラクタアドレス     R10 d0  =1 2×2キャラクタ定義             0 1×1キャラクタ定義        d1〜7=0        d8〜15=定義するキャラクタ数    使用:R11、>F070 d6    >007Cパラメータを用いて  キャラクタデータを左右反転定義(>0054)を行います    ただし2×2キャラクタ定義の場合  データアドレス+>10 2キャラクタ定義  データアドレス     2キャラクタ定義の順になります    定義するキャラクタ数は1×1で0、2×2で1となります     >00E8 VRAM FILL  入力:R8=埋めるデータ(上位のみ)     R9=>007Cパラメータ(転送先VRAMアドレス)        d0〜3 番号 0〜F        d4〜15 オフセットアドレス     R10=長さ  出力:R0=VDPステータス(d0〜7)  使用:R11、R13、R14     >F070 d6    VRAMをR8のデータで埋めます     >00EC VRAM >00 FILL  入力:R9=>007Cパラメータ(転送先VRAMアドレス)        d0〜3 番号 0〜F        d4〜15 オフセットアドレス     R10=長さ  出力:R0=VDPステータス(d0〜7)  使用:R11、R13、R14     >F070 d6    VRAMを>00で埋めます     ------------------------------------------------------------------------- >00F0 コントローラ入力  入力:R7=>0000 コントローラ1        >0001 コントローラ2  出力:何か押された場合      R8=d0 0         d1 0         d2 0         d3 0         d4 0         d5 0         d6 SLキー         d7 SRキー         d8 0         d9 0         d10 0         d11 0         d12 0         d13 0         d14 0         d15 1=入力あり、0=入力なし        R9=d0 0         d1 0         d2 0         d3 0         d4 0         d5 0         d6 0         d7 1=方向キー入力あり、0=方向キー入力なし         d8 0         d9 0         d10 0         d11 0         d12 0         d13 0         d14 0         d15 1=シュートキー入力あり、0=シュートキー入力なし        R10=方向キー番号          0=上          1=右上          2=右          3=右下          4=下          5=左下          6=左          7=左上     コールした次のアドレスに戻る       何も押されない場合      なし     コールした次のアドレス+4に戻る  使用:R11、R12    割込みで得たキーデータを元に入力データに変換します  BL @>00F0でコールして次の2つのアドレスに分岐されます    <例>   BL >00F0  ;コントローラ入力   B  @TRUE  ;何か押された   B  @FAIL  ;何も押されていない        :     >00F4 10進数アスキーから16進数変換  入力:R9=10進数アスキーデータアドレス     R10=データの長さ  出力:R8=16進数データ  使用:R8、R11、R12    R9で指定したアドレスのデータを16進数に変換します  変換出来ない場合(65535以上のデータ、長さ=0等)、  コールした次のアドレスに戻る  変換出来た場合、コールした次のアドレス+2に戻ります  1バイトデータはシフト演算で下位4ビットで整えるだけなので  >00〜>09でも>30〜>39でも同様に変換されます  範囲チェックは行わないので>0A〜>0Fも誤変換されます     >00F8 16進数から10進数アスキー変換  入力:R8=16進数データ     R9=10進数アスキー出力アドレス  出力:R9で指定したアドレス〜指定したアドレス+5にアスキーコード    16進数を10進数アスキーコードに変換します  出力バイト数は5桁バイトで>30〜>39の値になります  出力データは上位から下位の方向    <例>  >2710 → ’10000’  データは31 30 30 30 30として収納される     >00FC 指定範囲内の表示  入力:R8=表示するデータアドレス     R9=>007Cパラメータ(転送元VRAMアドレス)        d0〜3 番号 0〜F        d4〜15 オフセットアドレス     R10上位=表示する縦範囲     R10下位=表示する横範囲  使用:R11、R12    R9で指定した場所から縦×横のメッセージを表示を行います  ゲームのタイトル(スクランブル)に使用されています     >0100 10進数アスキー文字列の左端の’0’を’ ’に変換  入力:R9=10進数アスキー文字列アドレス     R10=文字列の長さ  出力:R9、R10、R11、R13    16進数から10進数アスキー変換(>00F8)等で作成した  10進数アスキー文字列の左端(上位)の’0’を’ ’に変換    <例>  ’01230’ → ’ 1230’     >0104 >0108     >010C DRAW  入力:R8=DRAWキャラクタ アドレス     R9=>007Cパラメータ(転送先VRAMアドレス)        d0〜3 番号 0        d4〜15 オフセットアドレス     R10=DRAWデータアドレス  使用:R11     >F056=R11退避用    設定したオフセット座標にDRAWキャラクタを書きます  ゲームのタイトル描画(フロッガー等)に使用  DRAWデータはデータの長さ、オフセット座標、オフセット座標...となります    <例>   LI 8 ,@DRAWCHR   LI 9 ,>0100    ;パターン・ネーム・テーブル>1D00   LI 10,@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 メモリアクセスアドレスの取得  入力:R6=データアドレス     R9=>007Cパラメータ(転送先VRAMアドレス)  出力:R8=データアドレス     R13=VRAMアドレスまたはCPUアドレス  使用:R6、R7、R8、R9、R11、R12    >007Cをコールしてアドレスを取得しR13に入ります  R6の内容はR8に移動するだけです       >0128 >012C >0130 S.E. >0134 S.E. >0138 S.E.0(キークリック音) >013C S.E.1 >0140 >0144     >0148 アルファベット アスキーの範囲チェック 入力:R6H=データ 使用:R6、R11、R12    R6Hが>41〜>5Aの範囲内チェックを行います  範囲内ならコールした次のアドレス  に戻る  範囲外ならコールした次のアドレス+2に戻る     >014C 数字 アスキーの範囲チェック    R6Hが>30〜>39の範囲内チェックを行います  チェックを行います  範囲内ならコールした次のアドレス  に戻る  範囲外ならコールした次のアドレス+2に戻る     >0150 >A6〜>DFの範囲チェック  R6Hが>A6〜>DFの範囲内チェックを行います  範囲内ならコールした次のアドレス  に戻る  範囲外ならコールした次のアドレス+2に戻る     >0154 R12H〜R12Lの範囲チェック  R6HがR12H〜R12Lの範囲内チェックを行います  範囲内ならコールした次のアドレス  に戻る  範囲外ならコールした次のアドレス+2に戻る     >0158 >015C     >0160 指定アドレスを>20で埋める  入力:R6=アドレス     R12=長さ  使用:R6、R11、R12、R13    指定アドレスからデータ>20で連続書き込みを行います     >0164 指定アドレスを>00で埋める  入力:R6=アドレス     R12=長さ  使用:R6、R11、R12、R13    指定アドレスからデータ>00で連続書き込みを行います     >0168 指定アドレスを指定データで埋める  入力:R6=アドレス     R12=長さ     R13=埋めるデータ(上位のみ)  使用:R6、R11、R12、R13    指定アドレスから任意のデータで連続書き込みを行います     ------------------------------------------------------------------------- >016C PSGトラック0演奏終了のチェック  出力:Zf=1 演奏終了        0 演奏中  使用:R11、R12     >F0CA=PSGトラック0コマンド     PSGトラック0の演奏が終わったかチェック(PSGコマンド>80)を行います     >0170 PSGトラック1演奏終了のチェック  出力:Zf=1 演奏終了        0 演奏中  使用:R11、R12     >F0CB=PSGトラック1コマンド    PSGトラック1の演奏が終わったかチェック(PSGコマンド>80)を行います     >0174 PSGトラック2演奏終了のチェック  出力:Zf=1 演奏終了        0 演奏中  使用:R11、R12     >F0CC=PSGトラック2コマンド    PSGトラック2の演奏が終わったかチェック(PSGコマンド>80)を行います     ------------------------------------------------------------------------- >0178 VRAM 2バイト書き込み  入力:R8上位=第1バイト ライトデータ     R8下位=第2バイト ライトデータ     R9=VRAMアドレス  出力:>F074=VRAMアドレス+2  使用:R11、R14     >F070 d6    VRAMに2バイトデータを書き込みます     >017C VRAM 2バイト読み込み  入力:R9=VRAMアドレス  出力:R8上位=第1バイト リードデータ     R8下位=第2バイト リードデータ     >F074=VRAMアドレス+2  使用:R11、R13、R14     >F070 d6    VRAMに2バイト読み込みを行います         >0180 カーソルの設定     >0184 VRAM 8バイト書き込み  入力:R9=VRAMアドレス     R8=ライトデータ(上位のみ)  出力:R8=ライトデータ(上位のみ)     R9=VRAMアドレス+8     R10=>0000     >F074=VRAMアドレス+8  使用:R9、R10、R11、R14     >F070 d6    VRAMに同じデータを8バイト書き込みを行います     >0188 ソフトウェアディレイ  入力:R13=ディレイ数  使用:R11、R12    ソフトウェアディレイをかけます     >018C カーソル位置からスプライトY−1,Xに変換  入力:R8=カーソル位置 >02E0〜>02FF  出力:R8上位=スプライトY−1     R8下位=スプライトX  使用:R8、R11、R13    カーソル位置(セル番号)から  スプライト属性テーブルで使用するX、Yに変換します  Y−1にするのはVDPのスプライトが1ドット下にずれる為     >0190 本体内蔵フォント先頭アドレスの取得  出力:R8  使用:R11    本体内にある文字フォントがある先頭アドレスの取得(定義はしない)  ゲームで内蔵フォントを使用する場合に使用  カナはぴゅう太のみで  ぴゅう太Jr./mkIIではカナ部分は英小文字となる      システムCHR   CHR >00 〜 >0F 記号   CHR >10 〜 >1F 数字   CHR >20 〜 >3F 英字   CHR >40 〜 >6F カナ     >0194 VRAM8バイト書き込み  入力:R7=データアドレス     R9=VRAMアドレス  出力:R8=>0000  使用:R8、R10、R11    8バイトのデータをVRAMに書き込みを行います     >0198 VDPの初期化  出力:>F06F=>87  使用:R0、R8、R9、R10、R11、R12、R13    VDPの初期化を行い  ワーク>F06Fを>87にします     >019C セルの初期化  出力:>F06F=>87     >F070 d0=1  使用:R0、R2、R8、R9、R10、R11、R12、R13    全パターンネームテーブル>1C00〜>1EFFに  >00、>01…>FFとセルを敷き詰め  VDPの初期化(>0198)を行います  セル自身のキャラクタ(グリッド)は定義しません     >01A0 >F072の設定  入力:R12=書き込むデータ(上位のみ)  出力:>F072  使用:R11、R12  >F072にR12データの書き込み     >01A4 8ビットの乗算  入力:R12上位=8ビットデータ0     R12下位=8ビットデータ1  出力:R13=乗算データ     R12=>0000  使用:R11、R12、R13    R12の上位と下位の乗算を行います     >01A8 4ビットデータの合成  入力:R8=データ  出力:R8=合成データ  使用:R11、R12    R8上位の下位4ビットとR8下位の下位4ビットを  R8上位に合成します(R8下位は>00)   R8=>0A0Bの場合   R8=>AB00となります     >01AC 4ビットデータの分離  入力:R8=データ  出力:R8=分離データ  使用:R11、R12     R8上位の8ビットを分離します   R8=>AB00の場合   R8=>0A0Bとなります     >01B0 ハイスコア十進数表示用VRAMアドレス オフセットの指定  入力:R12=指定VRAMアドレス オフセット  出力:>F0EE  使用:R11、R12  >F0EEにR12データの書き込みます     >01B4 ゲームプレイ人数の内容を読む  入力:>F0E8  出力:R12=>00 一人用 (上位のみ)        >01 二人用  使用:R11、R12  R12上位にゲームプレイ人数(一人用か二人用)の内容を読む     >01B8 ゲームプレイ人数の設定  入力:R12=>00 一人用 (上位のみ)        >01 二人用  出力:>F0E8  使用:R11、R12  R12上位にゲームプレイ人数(一人用か二人用)の設定     >01BC VDP IEの設定  入力:R12=>0000 INTオフ        >0001 INTオン  使用:R11、R12、R13     >F06F    VDP割込みの設定     >01C0 MAGの設定  入力:R12=>0000 拡大しない        >0001 拡大する  使用:R11、R12、R13     >F06F    スプライトの拡大の有無の設定     >01C4 画面の表示(BLANK) オン・オフ  入力:R12=>0000 画面の表示オフ        >0001 画面の表示オン  使用:R11、R12、R13     >F06F    VDP R#01のBLANKの設定     >01C8 スプライトSIZEの設定  入力:R12=>0000 8×8ドット        >0001 16×16ドット  使用:R11、R12、R13     >F06F    スプライトのサイズ設定     >01CC     >01D0 スプライト移動先チェック  入力:R9=現在のY座標、Y座標     R10=移動先の方向 >0000〜>0007     R12=移動量 >0001または>0008  出力:移動可能の場合      R9=移動先のY座標、Y座標      R10=移動先の方向(入力値のまま)      R12=移動先の方向       移動不可の場合      R9=現在のY座標、Y座標(入力値のまま)      R10=移動先の方向(入力値のまま)      R12=移動先の反対方向  使用:R9、R10、R11、R12、R13、>F060    現在位置から方向先へ移動出来るか調べます  スプライト自身は移動しません  移動不可なら、コールした次のアドレスに戻る  移動可なら、 コールした次のアドレス+4に戻る  また返ってくるレジスタの意味が変わります  移動量は何ドット単位での移動かの指定  移動先は>00F0のコントローラ入力で  方向キーが押された場合に出力されるR10と同様ですが  R12になっているので注意    R12=移動先の方向先     0=上     1=右上     2=右     3=右下     4=下     5=左下     6=左     7=左上     >01D4 オフセットアドレスからスプライトY−1,Xに変換  入力:R8=パターン・ネーム・テーブル オフセットアドレス  出力:R8上位=スプライトY−1     R8下位=スプライトX  使用:R8、R11、R12    パターン・ネーム・テーブル オフセットアドレスから  セル位置からスプライト座標変換  スプライト属性テーブルで使用するY、Xに変換します  X=>00の場合    コールした次のアドレスに戻る  X=>01〜>FF場合 コールした次のアドレス+4に戻る >01D8 16×16スプライトY、Xからオフセットアドレスに変換 >01DC 8×8スプライトY、Xからオフセットアドレスに変換 >01E0 オフセットアドレスからY、X座標に変換       >01E4 Y、X座標からオフセットアドレスに変換  入力:R12=X座標     R13=Y座標  出力:R8=オフセットアドレス     R13=Y座標の左端のオフセットアドレス  使用:R8、R11、R13    座標からパターン・ネーム・テーブル用のオフセットアドレスに変換を行います       >01E8 4桁16進数の分割  入力:R9=16進数  出力:R12=16進数下位     R13=16進数上位  使用:R8、R11、R12、R13    4桁の16進数をR13、R12に上下8ビットに分割します  分割したR13、R12の各上位8ビットは0になります  またR9の内容は変化しません       >01EC >01F0     >01F4 スコア十進データの取得  入力:R10=d0〜14 未使用        d15   1=2P側 (>F0F4)             0=1P側 (>F0F0)  出力:R12=千、百、十、一の位     R13=   十万、万の位(上位のみ下位は>00になる)  使用:R11、>F0F0または>F0F4    ゲーム用のスコアを取得します  元の内容は十進数になります     >01F8 スコア十進ワークのクリア  入力:R12=>0000 1P側   >F0F0〜>F0F2をクリア        >0001 2P側   >F0F4〜>F0F6をクリア        >0002 1P+2P >F0F0〜>F0F2、>F0F4〜>F0F6をクリア  使用:R11、R13    スコア十進数表示用のワークをクリアします     >01FC カラー設定  入力:R9=カラー(VDP R#07データ)  使用:R0、R11、R12、R13    カラー(VDP R#07)の設定     ------------------------------------------------------------------------- >0200 PSG0の停止  入力:R9=PSGトラック0データアドレス  出力:R9、>F0E2=PSGトラック0データアドレス     >F0CA=>81  使用:R9、R11   >0204 PSG1の停止  入力:R9=PSGトラック1データアドレス  出力:R9、>F0E4=PSGトラック1データアドレス     >F0CB=>81  使用:R9、R11   >0208 PSG2の停止  入力:R9=PSGトラック2データアドレス  出力:R9、>F0E6=PSGトラック2データアドレス     >F0CC=>81  使用:R9、R11     ------------------------------------------------------------------------- >020C   >0210 VRAMアドレスの取得  出力:R9=VRAMアドレス  使用:R9、R11    R9に>F074〜>F075の内容(VRAMアドレス)を出力ます >0214 VRAMアドレスの設定  入力:R9=VRAMアドレス  使用:R9、R11    >F074〜>F075(VRAMアドレス)にR9の内容を出力ます     >0218 2倍拡大文字の定義  入力:R9=定義するCHR VRAMアドレス(パターンジェネレータテーブル)     R10=拡大したいCHRデータアドレス  出力:R9=定義するCHR VRAMアドレス+>20(4キャラクタ分)  使用:R0    8×8ドット文字データを  2倍の16×16ドット文字データに変換して  キャラクタ定義にします(4キャラクタ分消費される)  主にゲームタイトル用のキャラクタ定義に使用     >021C キー入力チェック  入力:R6=チェックするキー (上位のみアスキー)  使用:R11     >F0E9    チェックしたいキー入力があるか調べます  チェックしたいキーが押されれば、コールした次のアドレスに戻る  何も押されなければ、      コールした次のアドレス+2に戻る  また通常キー入力はカナ文字となるので注意が必要    <例1>   LI  6,>0D00 ;チェックするキーは>0D(RT)   BL  @>021C  ;キー入力チェック   JMP @RTKEY  ;RTキーが押された処理へ   JMP @NOKEY  ;キーが押されていない処理へ    <例2>   CLR 6       ;チェックするキーは>00(何も押されていない)   BL  @>021C  ;キー入力チェック   JMP @NOKEY  ;キーが押されていない処理へ   JMP @ANYKEY ;何かキーが押された処理へ     >0220 RTキー入力チェック  使用:R11     >F0E9    RTキー入力があるか調べます  RTキーが押されれば、コールした次のアドレスに戻る  何も押されなければ、 コールした次のアドレス+2に戻る    <例>   BL  @>0220  ;RTキー入力チェック   JMP @RTKEY  ;RTキーが押された処理へ   JMP @NORTKEY;RTキーが押されていない処理へ     >0224 モニタ枠 1文字表示  入力:R6=表示するCHR (>00〜>BF)     R9=パターン・ジェネレータ・テーブル アドレス(通常は>1600)  出力:R9=表示するVRAMアドレス+1  使用:R0、R11、>F068    モニタ枠の文字をグラフィック表示します  表示するCHR >C0〜>FFは  モニタ枠表示として配置使用するため使用禁止で  >C0〜>FFを指定すると何もせず返ってきます     >0228 カラーテーブルの初期化+システムCHR設定  入力:R1=パターン・ジェネレータ・テーブル トップ(通常は>0000)     R8=カラー(上位のみ)  使用:R10、R11    >2000〜>2FFFのカラーテーブルをR8上位のデータで埋めて  システムCHRキャラクタ設定を全て行います     CHR >00〜>0F 記号   CHR >10〜>1F 数字   CHR >20〜>3F 英字   CHR >40〜>6F カナ     >022C プレイヤー人数の選択  入力:R9=表示するメッセージ VRAM オフセットアドレス    :R10=>0000または>000C(通常は>0000)  出力:>F0E8=>00 1人用           >01 2人用     1または2キーが押された場合      >F0E8に人数−1をセット、コールした次のアドレスに戻る     何も押されていない場合      コールした次のアドレス+2に戻る  使用:R1、R11    ’フ゜レイヤー 1,2 ?’を表示して  1キーか2キーが押されたかチェックを行います  メッセージを表示するので事前にキャラクタ定義する必要があります  ぴゅう太のみカナ表示でその他の機種では  ’PLAYER 1,2 ?’の英語表示になる    *R10の入力パラメータを>0000にすると   システム上のCHRコードで表示され   >000Cにすると   各CHRコードに+>90で表示される     >0000の場合    5C 6F 6A 42 64 0D 00 11 0C 12 00 1F     >000Cの場合    EC FF FA D2 F4 9D 90 A1 9C A2 90 AF     >0230 カーソル表示  入力:R4上位=スプライト属性テーブルデータ スプライト#nn     R4下位=スプライト属性テーブルデータ カラー     R5  =スプライト属性テーブル アドレス  使用:R0、R11     タイマー0     >F0E0=カーソル オフセットアドレス     >F0F3 d0 1=カーソルオフ、0=カーソルオン    タイマー0を用いてカーソルの点滅を行います  カーソルはスプライトで表示され  F0F3 d0=1 入力パラメータR4のカラーで表示(通常は>00の透明)          0 白で表示  カラーの有無で点滅を行います     >0234 VRAMにデータ列の書き込み (メッセージの表示)  入力:R7=表示するデータアドレス     R9=d0 長さ        d1 長さ        d2 長さ        d3 長さ        d4 長さ        d5 VRAMオフセット アドレス A5 (残りのA0〜A4は0になる)        d6 VRAMオフセット アドレス A6        d7 VRAMオフセット アドレス A7        d8 VRAMオフセット アドレス A8        d9 VRAMオフセット アドレス A9        d10 VRAMオフセット アドレス A10        d11 VRAMオフセット アドレス A11        d12 VRAMオフセット アドレス A12        d13 VRAMオフセット アドレス A13        d14 VRAMオフセット アドレス A14        d15 VRAMオフセット アドレス A15  使用:R0、R9、R12     >F074=VRAMアドレス    VRAMパターン・ネーム・テーブルにデータ列の書き込み  ゲームの“SL−AMA SR−PRO”の表示等に使用  長さは5ビットなので注意  >7000なら長さ>0C、オフセットアドレス>1000となる     ------------------------------------------------------------------------- >0238 ライン インプット >023C クリア バッファ+ライン インプット     >0240 モニタ画面内消去+メッセージ表示  入力:R6=VRAMアドレス    (通常は>=1EC0)     R7=メッセージアドレス     R10=長さ+オフセットアドレス(>0234の入力のR9)  使用:R1、R11    モニタ画面枠(画面下の青い2ライン分)を消去して  その中にメッセージを表示します     >0244 モニタ画面枠作成+メッセージ表示  入力:R5=メッセージの長さ       (通常は>=0008)     R6=モニタ画面枠開始アドレス   (通常は>=1600)     R7=メッセージアドレス     R10=メッセージ表示VRAMアドレス(通常は>=1660)  使用:R1、R11    モニタ画面枠(画面下の青い2ライン分)を描画して  その中にメッセージを表示します  枠はR6で指定できますがパターン・ジェネレータ・テーブルになります  通常>$1600〜17FF(ロウ CHR$>C0〜$FF)を  全て$>00で定義、対応するカラーを全て白/青に設定  メッセージ表示も同様にパターン・ジェネレータ・テーブルになるので  通常>1660(ロウ CHR$CC)から再定義を行います  つまりモニタ枠はグラフィック描画になる     >0248 ブロック群のメモリ転送  入力:R4=データ群アドレスポインタ     R10=d0   転送方向        d1〜15 ブロック数  使用:R4、R10    データ群からブロック数分メモリ転送(>004C)を行います  転送方向によってパラメータの振り分けが変わります    転送方向=1   >004C用のパラメータR9、R8、R7の順で1つのブロック数    転送方向=0   >004C用のパラメータR7、R8、R9の順で1つのブロック数      <例>    LI  4 ,@BDAT ;データ群    LI  10,>0002 ;メモリからVRAM 2ブロック分    BL  @>0248          :          :   BDAT    DATA  >1800 ;#01 転送元  >1800    DATA  >C008 ;    コマンド 11+>0008    DATA  >3FEB ;    転送先  >3FEB      DATA  >1F00 ;#02 転送元  >1F00    DATA  >C005 ;    コマンド 11+>0005    DATA  >3FF3 ;    転送先  >3FE3       >024C メッセージ表示  入力:R8=d0 メッセージ 1=VRAM、0=CPU        d1 −        d2 −        d3 −        d4 −        d5 VRAM a2        d6   〃  a3        d7   〃  a4        d8   〃  a5        d9   〃  a6        d10   〃  a7        d11   〃  a8        d12   〃  a9        d13   〃  a10        d14   〃  a11        d15   〃  a12     R9=メッセージアドレス     R10=カラー(上位)+長さ(下位)  出力:R9=表示するVRAMアドレス+1  使用:R11    入力領域に文字列を表示します  R8=d0は転送先アドレスの指定で   1=VRAMからVRAM   0=VCPUメモリ(WP)からVRAM    <例>白い文字、バック緑で’  タイフ゜ イン OK’の表示    LI  8 ,>02C0 ;CPU、VRAM >1600    LI  9 ,@MESTO;メッセージのあるアドレス    LI  10,>F20C ;白−緑、長さ12バイト    BL  @>024C          :          :  MESTO    BYTE >20,>20,>C0,>B2    BYTE >CC,>DF,>20,>B2    BYTE >DD,>20,>4F,>4B     >0250 ライン インプット     >5000〜>7FFF:メモリ 未使用   -------------------------------------------------------------------------   >8000〜>BFFF:メモリ ROMカートリッジまたは拡張RAM  >8000〜>8002:ここに>FFFFを書き込んでチェックしている              書き込みが出来たら>F06E d5=0              また、INT3では>F0F3 d6=0のとき              >8000に>1587を書き込んでチェックしている              書き込みが出来たら>F06E d0=1       >C000〜>DFFF:メモリ ??? 拡張ROM   -------------------------------------------------------------------------   >E000      :I/O VDP データ >E002      :I/O VDP レジスタ >E200      :I/O SN76489 >E400〜>E5FF:/CS GROM1 カードリッジ拡張用 >E600〜>E6FF:/EXP0 メニユー行く前に、E600に>55があるとE600にジャンプ >E800〜>E8FF:/EXP1 プリンタ >EA00〜>EAFF:/EXP2 >EC00〜>EC7E:I/O KEY BORAD SELECT  >EC00〜>EC0F:キーライン0 12QWASZXの選択 A15は無視、1バイトで1つのキー >EC10〜>EC1F:キーライン1 34ERDFCVの選択 押した判断はCRUで読む >EC20〜>EC2F:キーライン2 56TYGHBNの選択 >EC30〜>EC3F:キーライン3 789UIJKMの選択 >EC40〜>EC4F:キーライン4 0−OPL;.,の選択 >EC50〜>EC5F:キーライン5   ¥@:ム/ロの選択 >EC60〜>EC6F:キーライン6  英記モRT MO の選択 >EC70〜>EC7F:キーライン7 左上下右    の選択     >EE00:I/O CMT OUT ’0’ >EE20:I/O CMT OUT ’1’ >EE40:I/O CMT OUT Interrupt On >EE60:I/O CMT OUT Interrupt Off >EE80:I/O CMT OUT Interrupt RESET >EEA0:I/O KB/CMT LS74のF.F リセット >EEC0:I/O 不明 ???拡張用 テンキー >EEE0:I/O 不明 ???拡張用 CMTモータオン/オフ   ------------------------------------------------------------------------- >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の内容             G−BASIC    >F05E、>F05Fの内容 >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の内容             アニメ作成モードでRT(選択)を押した回数 >F00C〜>F00D:VRAM >1FFC〜>1FFDの内容             GRAPHIC MODキーの状態              >0000=オン              >FFFF=オフ             GRAPHIC パレット スペースキーの状態              >0000=オン              >FFFF=オフ >F00E〜>F00F:VRAM >1FFE〜>1FFFの内容             GRAPHIC キーの状態              >0000=オン              >0001=オフ           >F010〜>F011:GRAPHIC スペースキーを押した回数 >F012〜>F013:GRAPHIC MOD キーを押した回数   >F014〜>F015:アニメ1 Y,X >F016      :アニメ1 スプライト#nn >F017      :アニメ1 カラー   >F018〜>F019:アニメ2 Y,X >F01A      :アニメ2 スプライト#nn >F01B      :アニメ2 カラー   >F018〜>F01D:変数領域データ     >F01C〜>F01D:アニメ3 Y,X >F01E      :アニメ3 スプライト#nn >F01F      :アニメ3 カラー   >F020〜>F021:アニメ4 Y,X >F022      :アニメ4 スプライト#nn >F023      :アニメ4 カラー   >F020〜>F03F:プログラム1行表示用     >F024      :GRAPHIC カーソル、アニメ方向              >10 左              >20 上              >40 右              >80 下       >F030      :GRAPHIC パレット内 セル番号 万の桁(アスキーコード未使用) >F031      :GRAPHIC パレット内 セル番号 千の桁(アスキーコード未使用) >F032      :GRAPHIC パレット内 セル番号 百の桁(アスキーコード) >F033      :GRAPHIC パレット内 セル番号 十の桁(アスキーコード) >F034      :GRAPHIC パレット内 セル番号 一の桁(アスキーコード)   >F038〜>F039:   >F040〜>F05A:BASICプログラムコード変換用バッファ >F05A〜>F05B:R11退避用 >F05C〜>F05D:VRAMスタック インデックス   >F05E   d0   d1   d2   d3   d4   d5 不明 拡張ハード? 1=接続していない?、0=接続している?   d6   d7   >F060〜>F061 レジスタ退避用(R0) >F062〜>F063 R6退避用 >F064〜>F065 R7退避用 >F066〜>F067 R8退避用 >F068〜>F069 R9退避用 >F06A〜>F06B R10退避用 >F06C〜>F06D R12退避用   >F06E:メニュー モード   d0 拡張RAM       1=オン 、0=オフ   d1   d2 メニューモード     1=オン 、0=オフ   d3 カードリッジID>AA 1=オン 、0=オフ   d4 カードリッジID>55 1=オン 、0=オフ   d5 カードリッジID>66 1=オン 、0=オフ*   d6 G−BASICモード  1=オン 、0=オフ   d7 GRAPHICモード  1=オン 、0=オフ      カードリッジ ID>AAで>5000を実行(E−BASIC)           ID>66で>8002を実行(???E−MENUE)           ID>55で>8002を実行(ゲームカードリッジ)      *EMEN、EBASコマンドで変化する     >F06F:VDP R#01データ+アルファ   d0 4/16K   d1 BLANK   d2 IE   d3 不明 通常は0   d4 不明 通常は0   d5 VDPを初期化したときに1   d6 SIZE   d7 MAG   >F070:   d0 セル画面の初期化 1=オン、0=オフ   d1 ファイル名入力  1=オン、0=オフ   d2 M3   d3   d4   d5   d6 VDPアクセス  1=オン、0=オフ   d7 ???システム  1=英語、0=日本語    *セル画面の初期化はGRAPHICモードで     グリット表示のキャラクタ定義    システムはぴゅう太         =0         mkII、Jr.、TUROR=1 >F071:CMT   d0 不明 通常は1   d1 1=L4INTオン、1=L4INTオフ   d2    d3 1=オシエテ オン、0=オシエテ オフ   d4 1=カクニン オン、0=カクニン オフ   d5 1=ロード  オン、0=ロード  オフ   d6 1=セーブ  オン、0=セーブ  オフ   d7 1=OK     、0=エラー    *L4INTはLEVEL4 INT      オン=INT内のプログラムを実行      オフ=INT内のプログラムを実行せずRTWP   >F072:   d0   d1 1=G−BASIC  、0=GRAPHIC   d2   d3   d4 1=システム実行   、0=カードリッジ実行   d5 1=EMENオン   、0=EMENオフ   d6 1=EBASオン   、0=EBASオフ   d7 1=GRAPHICオン、0=GRAPHICオフ     d8   d9   d10   d11   d12   d13   d14   d15     >F074〜>F075:VRAMアドレス >F076〜>F077:PSG R11 >F078〜>F079:PSG R12   >F07A〜>F07B:INT4 R0、PSG R13 >F07C〜>F07D:INT4 R1、PSG R14 PSGコマンドアドレス >F07E〜>F07F:INT4 R2、PSG R15 PSGデータアドレス >F080〜>F081:INT4 R3、タイマ0H >F082〜>F083:INT4 R4、タイマ0L >F084〜>F085:INT4 R5、タイマ1H >F086〜>F087:INT4 R6、タイマ1L >F088〜>F089:INT4 R7、タイマ2H >F08A〜>F08B:INT4 R8、タイマ2L >F08C〜>F08D:INT4 R9、タイマ3H >F08E〜>F08F:INT4 R10、タイマ3L >F090〜>F091:INT4 R11、タイマ4H >F092〜>F093:INT4 R12、タイマ4L >F094〜>F095:INT4 R13、タイマ5H >F096〜>F097:INT4 R14、タイマ5L >F098〜>F099:INT4 R15、タイマ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:タイマ割込みR0             システム             GRAPHICのG−BASIC初期値 >0420             GbBASIC、E−BASIC初期値 >05E0              d0 不明 張スクリーンエディット拡張用d0              d1 不明 張スクリーンエディット拡張用d1              d2 不明 張スクリーンエディット拡張用d2              d3 不明 張スクリーンエディット拡張用d3              d4 不明 張スクリーンエディット拡張用d4              d5 カーソル表示  1=オン、0=オフ              d6               d7                 d8               d9               d10 不明              d11               d12 入力した行数d0 プログラム入力した時に+1              d13 入力した行数d1 上限>Fから+1の場合>0にならず>Fのまま              d14 入力した行数d2 またGRAPHICのG−BASICでは上限>1になる              d15 入力した行数d3      >F0C2〜>F0C3:タイマ割込みR1 キーデータ1、0 >F0C4〜>F0C5:タイマ割込みR2 キーデータ3、2 >F0C6〜>F0C7:タイマ割込みR3 キーデータ5、4 >F0C8〜>F0C9:タイマ割込みR4 キーデータ7、6 >F0CA〜>F0CB:タイマ割込みR5 PSGトラック0、1コマンド >F0CC〜>F0CD:タイマ割込みR6 PSGトラック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:カーソル位置のセル番号 >02E0〜>02FF   >F0E2〜>F0E3:PSGトラック0データアドレス >F0E4〜>F0E5:PSGトラック1データアドレス >F0E6〜>F0E7:PSGトラック2データアドレス   >F0E8:ゲームプレイ人数 >00=一人用、>01=二人用 >F0E9:キー入力データ(アスキーコード)   >F0EA:コントローラ1   d0 1=入力あり、0=入力なし   d1 −   d2 SL 1=オン、0=オフ   d3 SR 1=オン、0=オフ   d4 下  1=オン、0=オフ   d5 左  1=オン、0=オフ   d6 上  1=オン、0=オフ   d7 右  1=オン、0=オフ >F0EB:コントローラ2   d0 1=入力あり、0=入力なし   d1 −   d2 SL 1=オン、0=オフ   d3 SR 1=オン、0=オフ   d4 下  1=オン、0=オフ   d5 左  1=オン、0=オフ   d6 上  1=オン、0=オフ   d7 右  1=オン、0=オフ   >F0EC〜>F0ED:汎用 >F0EE〜>F0EF:ハイスコア十進数表示用VRAMアドレス オフセット   >F0F0:1Pスコア 十進数  千、百の桁 >F0F1:1Pスコア 十進数  十、一の桁 >F0F2:1Pスコア 十進数 十万、万の桁   >F0F3:   d0 カーソル          1=オフ、0=オン   d1 キー入力          1=オン、0=オフ   d2   d3 G−BASIC       1=オン、0=オフ   d4 不明 E−BASIC?   1=オン、0=オフ   d5 カードリッジまたはシステム 1=オン、0=オフ   d6 タイマ割込みサブルーチン  1=オフ、0=オン   d7 拡張ハードキー入力     1=オン、0=オフ   >F0F4:2Pスコア 十進数  千、百の桁 >F0F5:2Pスコア 十進数  十、一の桁 >F0F6:2Pスコア 十進数 十万、万の桁   >F0F7:キー入力モード   d0   d1   d2   d3   d4   d5 記号モード 1=オン、0=オフ   d6 英数モード 1=オン、0=オフ   d7 カナモード 1=オン、0=オフ   >F0F8:ハイスコア 十進数  千、百の桁 >F0F9:ハイスコア 十進数  十、一の桁 >F0FA:ハイスコア 十進数 十万、万の桁       >FFFA〜>FFFB:CPU内蔵タイマ >FFFC〜>FFFF:CPU NMIベクトル     >8000に>55があれば(ゲームROMの先頭) メニューでゲームカートリッジの選択が出来る様になります 選択すると>8002へジャンプします >8000に>66の場合 メニューでゲームカートリッジの選択が出来る様になります 選択すると>8002へジャンプします >8000に>AAの場合 >F06Eのd3=1にして>5000にジャンプします   メニュー前に>E600に>55があると >E600にジャンプしますが OPコードが>55なのでE600:5555にしておくと SZCB *R5,*R5として実行され 次のE602からプログラムを置く事が出来ます     起動時に>8000に書き込みが出来るかチェックを行っているが 通常のシステムが拡張RAMにも対応可なのかは不明     ------------------------------------------------------------------------- VRAM   >0000〜>07FF パターンジェネレータトップ >0800〜>0FFF パターンジェネレータミドル >1000〜>17FF パターンジェネレータロウ   >1800〜>187F スプライトパターン 16×16 4枚分(#00はカーソル兼用) >1880〜>1BFF 保存用 >1C00〜>1CFF パターン・ネーム・テーブル トップ >1D00〜>1DFF パターン・ネーム・テーブル ミドル >1E00〜>1FFF パターン・ネーム・テーブル ロウ >1F00〜>1FFF スプライト属性テーブル   >2000〜>27FF カラー・テーブル トップ >2800〜>2FFF カラー・テーブル ミドル >3000〜>377F カラー・テーブル ロウ >3780〜>37FF >1F00〜>1F7F保存用     >3800〜>3F7F GRAPHIC BGトップまたはロウ保存用(サンプルカラー、パレット)             G−BASIC プログラム領域 >3E40〜      変数領域 1組6バイト >3F9C〜>3FBC キーバッファ エンドマーク>0D   >3FDD〜>3FEA レジスタ保存用 R0、R6〜R10、R12 >3FEB〜>3FF2 スプライト#00保存用 (カーソル) >3FF3〜>3FF7 スプライト属性テーブル#00保存用 (カーソル) >3FF9〜>3FFE レジスタ保存用 R13〜R15  
Home へ戻る