PV-2000 ROMの内容 まだ、完全に解析できていません。(内容が変わる場合があります。)
00000H:プログラムスタート 電源をいれるとオートリセットが掛かり、当然ココからはじまります。 単に01824Hへ飛びます。
00008H:バッファ内のスペース(020H)をスキップする DEで指定した場所からスペース(020H)をスキップします。 チェックをしているのはスペース(020H)だけです。 入力:DE=バッファアドレス 出力:A=最初にヒットしたデータ、DE=最初にヒットしたデータアドレス 変更:AF,DE
00010H:VDPライト時のWait VRAMのアドレスを設定したとき等にココに飛んでWaitをかけます。 実際にはINC HL、DEC HLをして帰ってきます。 入力:なし 出力:なし 変更:なし
00013H:LD BC,(HL) BCにHLで指定したアドレスの内容がロードされます。 このときHLレジスタは2回インクリメントされます。 入力:HL=アドレス 出力:BC=HLで指定したアドレスの内容 HL=HL+02H 変更:BC,HL
00018H:バッファの中の”,”が、あるか調べる まず、DEで指定した場所からスペース(020H)をスキップします。 次に最初にヒットしたのが”,”(02CH)なら一つスキップして戻ります。 それ以外ならその場のヒットしたアドレスになります。 入力:DE=バッファアドレス 出力:DE=最初にヒットしたデータアドレス(ただし”,"なら+01H) A=最初にヒットしたデータ 変更:AF,DE
0001EH:VDP 設定用データ 画面表示:0054DHで使用するデータです 内容は0E2H、000HでVDP R#01=0E2H R#00=000Hです。
00020H:002Hが、あるか調べる まず、DEで指定した場所からスペース(020H)をスキップします。 次に最初にヒットしたのが002H以下ならCf=1にして戻ります。 002H以上ならそのまま戻ります。 002Hなら02D30Hへジャンプします。 入力:DE=データアドレス 出力:A=最初にヒットしたデータ、DE=最初にヒットしたデータアドレス、Cf=Aの内容が002H以下なら1 変更:AF,DE
00028H:002H以上が無いか調べてそれ以上ならSN Error まず、00020HへRSTジャンプしてCf=1で帰ってきたのならそのまま戻ります。 Aの内容が002H以上だったらSN Errorへジャンプします。 入力:DE=データアドレス 出力:Cf=1 Aの内容が002H以下の場合 0 SN Error DE=最初にヒットしたデータアドレス A=最初にヒットしたデータ 変更:AF,DE
00030H:CP HL,DE HLとDEを比較して00000Hかどうか調べます。 入力:HL=データ0 DE=データ1 出力:Zf=1 データ0とデータ1が同じ 0 データ0とデータ1が違う 変更:AF
00038H:INTルーチン(主にキーボード入力、先頭にフックがある) 割りこみを許可していてキーボードが押されるとココに飛びます。 一番最初に0749BH(フック)にコールしていきます(通常はRET) 次にSTOPキーのチェック、何のキーが押されたかチェック クリック音、BAISCの処理を行い、EI(割り込み許可)を実行してRETします。 変更:フックで何もしない場合 なし
0005FH:キークリック、キー入力処理クローズ キークリックをして、次のINT割りこみ(キー入力)が出来るようにセット 最後は各レジスタのPOPを行い、EI(割り込み許可)を実行してRETしますので ここから実行する場合にはスタックに注意して下さい
00066H:NMIルーチン VDPのV−Sync割りこみベクタです。 07498H(フック)に飛びます。 通常は0069Hへ飛ぶように設定されています。 変更:割り込みルーチンによる
00069H:NMIメイン(フックで換えることも可) VDPのVーSync割りこみが発生された時の処理を行います。 変更:なし
000B0H:ストップキー フラグをセットして、キー入力クローズ ストップキー フラグを0FFHにして、キークリック音をだして 次のキー割りこみ出来るようにします(0005FHへジャンプ)
000BDH:LD (HL),BC HLで指定したアドレスにBCの内容がロードされます。 このときHLレジスタは2回インクリメントされます。 入力:HL=ストア データアドレス BC=データ 出力:(HL)=BC HL=HL+02H 変更:HL
000C2H:キー入力 メイン INTで使用されるルーチンです。 変更:AF
000EFH:キーポート クローズ スタックを調節し、キーポートをクローズします。
00100H:RET RETして帰るだけです。 市販のゲームで最初にコールしているのもあります。 入力:なし 出力:なし 変更:なし
00103H:Port 040H出力 I/Oポート040Hにデータを出力するだけです。 入力:A=データ 出力:なし 変更:なし
00106H:NMI フックをセットする HLで指定したアドレスをNMIのフックにします。 BASICではココを使用していません。 入力:HL=フックするアドレス 出力:07499H 変更:なし
0010FH:キー#08を読む キー#08の下位4ビットを読みます。 入力:なし 出力:A=キーデータ(Bit3―0) Bit7 Bit6 Bit5 Bit4 Bit3:キーデータ#08のBit3 Bit2:キーデータ#08のBit2 Bit1:キーデータ#08のBit1 Bit0:キーデータ#08のBit0 変更:AF
00119H:キーデータを読む
0019AH:キーデータを読む(Port 020H) Bで指定したキー#nnのポート020H下位4ビットポートを読みます。 入力:B=キー#nn 出力:A=キーデータ(Bit3―0) Bit7 Bit6 Bit5 Bit4 Bit3:キーデータ#nnのBit3 Bit2:キーデータ#nnのBit2 Bit1:キーデータ#nnのBit1 Bit0:キーデータ#nnのBit0 変更:AF
0019CH:キーデータを読む Bで指定したキー#nn、Cで読み込むキーポートの選択(010Hか020H)をして キーデータ4ビットを読みます。 入力:B=キー#nn C=キーポート(010H又は020H) 出力:A=キーデータ(Bit3―0) Bit7 Bit6 Bit5 Bit4 Bit3:キーデータのBit7(ポート010H)又はBit3(ポート020H) Bit2:キーデータのBit6(ポート010H)又はBit2(ポート020H) Bit1:キーデータのBit5(ポート010H)又はBit1(ポート020H) Bit0:キーデータのBit4(ポート010H)又はBit0(ポート020H) 変更:AF
001A9H:???カーソルキーを読む
001F8H:STOPキーチェック STOPキーが押されているかチェックをします 入力:なし 出力:Cf=1 STOPが押されている 0 STOPが押されていない 変更:AF
0020DH:キーポート オフ キーポート020Hに00FHを出力します。 これにより次からキーが押されるとINT割りこみが行われます。 入力:なし 出力:なし 変更:なし
00214H:PLAY文 メイン
00282H:PSG OFF PSG全チャンネルのアッテネータ(音量)を0にします。 入力:なし 出力:なし 変更:AF
0028BH―004AAH:キーマトリクスデータ キー入力で参照するマトリクスデータです。
004BBH−004EDH:PSG データ
004EEH:HL=HL+A HLとAの足し算です。 結果はHLに出力されます。 入力:HL=データ0 A=データ1 出力:HL=データ Cf=1 LとAを足したときに繰上りした 0 LとAを足したときに繰上りしていない 変更:HL,AF
004F3H:スプライトアトリビュート計算 A=No
004FAH:スプライトパターンジェネレータ計算 A=No
00536H:VDP初期化 VDPの初期設定を行い、VDPのステータス参照フラグ(074C8H)を 禁止(000H)にします。 ます 入力:074BEH(VDPステータスデータ) 出力:074C8H(VDPステータス参照フラグ)=000H 変更:AF,BC,DE,HL
0054DH:画面表示オン 画面表示をオンにします。 入力:なし 出力:なし 変更:AF,BC,DE,HL
00571H:VDP 使用許可、ステータスレジスタ セット、074C8:00
0057BH:VDPのステータス参照フラグのセット VDPのステータス参照フラグ(074C8H)を禁止(0FFH)にします。 入力:なし 出力:074C8H=0FFH 変更:なし
00583H:VRAMアドレス下位の設定 ROMルーチン0592H,059BHで使用されます。(パラメータはそこで参照して下さい) VDPのステータス参照フラグ(074C8H)を禁止(0FFH)にし、 VRAMの下位アドレスを設定してAに上位アドレスを設定します。 このルーチンをコールした後すぐにVRAMの上位アドレスを設定します。 入力:HL=VRAMアドレス 出力:074C8H=0FFH A=VRAMアドレス上位 変更:AF,HL
00592H:VDPアクセス(リード) VRAMのデータを読み込む為の設定を行います。 コールした後はHLの内容が04000Hになるので HLからデータを読む事ができます。 入力:HL=VRAMアドレス 出力:HL=04000H(VDPのデータポート) 074C8H=0FFH 変更:AF,HL
0059BH:VDPアクセス(ライト) VRAMにデータを書き込む為の設定を行います。 コールした後はHLの内容が04000Hになるので HLからデータを書く事ができます。 入力:HL=VRAMアドレス 出力:HL=04000H(VDPのデータポート) 074C8H=0FFH 変更:AF,HL
005A6H:VRAMからメモリへ転送 指定したVRAMから本体のメモリへ最大256バイトブロック転送します。 Aの内容は破壊されます。 入力:HL=VRAMアドレス DE=データアドレス C=長さ 出力:074C8H=000H 変更:DE,AF
0060DH:07554H−0755CHを000Hで埋める VDP用のバッファをクリアします。 入力:なし 出力:07554H−0755CH:00 A=000H 変更:AF,B,DE
00850H:テキストカラー0をクリア VDP R#07のテキストカラーの設定をします。 テキストカラー0を0 テキストカラー1またはバックドロップカラーを設定します。 設定した後0555Hをコールします。 入力:074CAH=カラーデータ 出力:074CAH=カラーデータ(上位4Bitは0000Bになる) 変更:AF
00856H:テキストカラーの設定 VDP R#07のテキストカラーの設定をします。 設定した後0555Hをコールします。 入力:074CAH=カラーデータ 出力:なし 変更:AF
00B3DH:VRAMにデータを8バイト埋める HLで指定したVRAMからAのデータを8バイト書き込みます。 入力:HL=VRAMアドレス A=埋めるデータ 出力:0734BEH 変更:BC
00E9EH:CMT Port クローズ
00EA8H:CMT 1ビット ライト
00EB0H:CMT 1バイト ライト (A=ライトデータ)
00EF1H:CMT 1ビット リード
00FECH:Data Block リード
01005H:CMT 1バイト リード CMTからデータを1バイトリードします 入力:なし 出力:A=リードしたデータ 変更:AF
01030H:07200H−0732BHを000Hで埋める Buffer Clear 入力:なし 出力:なし 変更:AF,HL,BC
01036H:指定したアドレスを000Hで埋める HLで指定したバッファを000Hで埋めます。 入力:HL=バッファアドレス BC=長さ 出力:なし 変更:AF,HL,BC
0106BH:??? 07277:00 00
01084H:CMT ロード メイン
01115H:ファイルネームチェック
0117CH:CMT セーブ メイン
01258H:スペースを1つ出力 スペースを画面かプリンタに表示します。 入力:074D5H:0=CRT 1=PRT 出力:なし 変更:なし
01292H:ファイルネームの比較
0139EH:LD HL,(HL) HLの指すアドレスの内容をHLにロードします。 入力:HL=ポインタアドレス 出力:HL=ポインタの内容 変更:AF
013DFH:プリンタ出力
01405H:キークリック音をだす。
01437H−01616H:キャラクタ CGデータ (020H−07FH) 画面表示をする為のキャラクタデータです。 5バイトで構成され右へ90度回転された形になっています。 Aのデータだと07EH、009H、009H、009H、07EHになります。
01617H−01823H:ヒラガナ CGデータ 画面表示をする為のキャラクタデータです。 7バイトで構成されています。
01824H:プログラムスタート 電源を入れたら、00000Hからココにとびます。 スタック、各周辺機器への初期化、フックの設定をして ROMカードリッジのオートスタートチェック、 拡張RAMのチェック。ワークエリアの設定等をします。
01901H:MENU 最初のMENU画面です。 スタックを設定し直し、074B3Hにフック ワーク設定、CMTポートのクローズ等をして MENU画面を書き、コマンド入力待ちにします。
0197FH:PICTURE
0198FH:NORMAL BASIC 初期化 通常のBASICをMENUで選択したらココに飛びます。 専用の設定をしたらBASICメッセージを表示して 019D9Hへ飛びます。
01992H:4LINE BASIC 初期化 4LINE BASICをMENUで選択したらココに飛びます。 専用の設定をしたらBASICメッセージを表示して 019D9Hへ飛びます。
019D8H:BASICメイン BASICのコマンドを実行したらココに戻ります。 RST 028Hを実行して次に進みます
019D9H:BASICメイン
019F8H:STOPキーフラグ クリア
01B7CH:キーバッファ クリア
01F28H:CLS文
01F2FH:CLS メイン
0203AH:CRを出力 画面もしくはプリンタにCRを表示します。 入力:074D5H:0=CRT 1=PRT 出力:A=00AH 変更:なし
02041H:1文字プリント(A=コード) 画面もしくはプリンタにキャラクタを1文字表示します。 入力:A=キャラクターデータ 074D5H:0=CRT 1=PRT 出力:なし 変更:なし
020D7H:文字列表示 HLの指す文字列データを画面表示します。 エンドマークは000Hです。 入力:HL=データアドレス(000H=エンドマーク) 出力:074D5H=0 変更:HL
020E4H:Print Lengrh HL=Data Address,B=Counter
02237H:ANIMATION
02346H:インプット (A=押されたキー)
02767H:OM Error
02769H:SN Error
0276CH:IO Error
0276FH:ST Error
02772H:TC Error
02775H:BV Error
02778H:RW Error
0277BH:OV Error
0277EH:MA Error
02781H:DD Error
02784H:BS Error
02787H:FC Error
0278AH:UL Error
0278DH:MO Error
02790H:TM Error
02998H−02B1DH:中間言語DATA
02CE3H:16進数から10進ASCIIに変換 In:HL=データ Out:DE=ストアするアドレス
02D46H:’,’のチェック
02D83H:’(’のチェック
02D88H:’)’のチェック
02D8DH:’=’のチェック
02E22H:REM文、DATA文
0345EH:パラメータの上限をチェック In:A=上限の数値
03525H:HL AND BC
0352CH:HL OR BC
03533H:HL XOR BC
03558H:PEEK(nnmm)文 出力:HL=PEEKした内容(8ビット)
035A6H:RND(n)文
035E2H:ATTACK文
03626H:テーブルジャンプの計算(A=No、HL=ジャンプテーブル)
03672H:テーブルジャンプ(A=No、HL=ジャンプテーブル)
036E0H:CHR$(nn)文
036EDH:INKEY$文
036FEH:’(n)’のチェック
03724H:BASIC用のスタックポインタチェック
03A0BH:LET文
03AC6H:PRINT文
03B37H:スペース表示 (A=表示する個数)
03B5AH:LOCATE文
03B76H:CLEAR文
03C88H:NEW文
03CB2H:CALL文、ワークエリアで、レジスタにパラメータを渡すことも可
03CCDH:POKE文
03D19H:TIME(n)文
03D54H:ANIMOFF、ANIMSTOP
03D6AH:ANIMON
03E2AH:COORD
03E85H:SOUND文
03ECEH:PLAY文
03F70H:10進数変換用データ
Home へ戻る