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