mz-80K SP-1002
モニタコマンド LOAD[ファイルネーム][CR] カセットテープからOBJプログラムをロードします LOADのみの場合、最初に見つけたOBJファイル ファイルネーム指定すると 指定したOBJファイルを見つけ次第ロードを行います 実行アドレスが無いOBJファイルの場合はモニタに戻ります ファイルネーム指定はLOADの後すぐに指定します(スペースはいりません) GOTO$nnnn[CR] 指定したアドレスnnnn(必ず4桁)にジャンプします SG[CR] キークリック音をオンにします SS[CR] キークリック音をオフにします FD[CR] 外部ROMを実行します フロッピーディスク システム用
ROMルーチン 00000H MONIT リセットベクタ 電源を入れたり、リセットをかけると0004AHのモニタメインに行きます <実行内容> PC3=1 MOTOR CP2=1 LED=緑 CLS、ワークエリア クリア セット/INT JP 0392H TEMPW=004H ONRYO=005H 演奏ストップ タイトル表示 コマンド待ち(格コマンドへ) 00003H GETL 1ライン入力 入力:DE=キーバッファアドレス 使用:01171H〜01172H DSPXY カーソル位置X、Y 01173H〜0118DH MANG 上のライン接続フラグ 01194H DPRNT TABカウンタ 01193H STRIGF d7:1=コントロールコード入力、0=通常入力 d6:インサート数d6 d5:インサート数d5 d4:インサート数d4 d3:インサート数d3 d2:インサート数d2 d1:インサート数d1 d0:インサート数d0 0119DH SREK 000H=クリック音オフ、0FFH=クリック音オン キーボードから1行分を入力、エンドマークは[CR]になります(00DHがセット) 最大入力文字数はエンドマークを含めて80文字 キー入力にはエコーバックが行われカーソルコントロールも受けつけられます STRIGFのd7は”が入力されるたびにオン・オフされます SHIFT+BREAKが押されたら DEのアドレスの先頭にBREAK、[CR](01BH、00DH)がセットされ LETNL(00006H)をコール、終了 0119DHが000Hになっている場合入力時にクリック音が出ます INSTで文字がインサートされSTRIGFがINCされます INCされた空白内にはコントロ−ル文字入力になります 128回超えるとコントロールコード入力モードに入るのでインサート数は無効になります コントロール入力モード オン・オフはSHIFT+2(ダブルクォーテーション) 00006H LETNL 使用:AF 01171H〜01172H DSPXY カーソル位置X、Y 01173H〜0118DH MANG 上のライン接続フラグ 01194H DPRNT TABカウンタ DPRNT=000Hにして[CR]の実行を行います 00009H NEWLIN ニューライン 使用:AF 01171H〜01172H DSPXY カーソル位置X、Y 01173H〜0118DH MANG 上のライン接続フラグ 01194H DPRNT TABカウンタ DPRNT=000HならRET 000H以外ならLETNL(00006H)をコールして終了します 0000CH PRNTS スペース表示 使用:AF 01171H〜01172H DSPXY カーソル位置X、Y 01173H〜0118DH MANG 上のライン接続フラグ 01194H DPRNT TABカウンタ 画面のカーソル位置にスペースを1つ表示、カーソルを右へ移動します 右端なら1段下の左端へ行きます この時一番下ならスクロールを行います スクロールでは一旦画面表示をオフにしてVRAM、MANGの転送を行ってから 画面表示をオン、DPRNTをINC(050Hになると000Hにする) 0000FH TABUL タブ出力 使用:AF 使用:01171H〜01172H DSPXY カーソル位置X、Y 01173H〜0118DH MANG 上のライン接続フラグ 01194H DPRNT TABカウンタ DPRNTの内容が00の場合、RET DPRNTの内容が10の倍数になるまでスペースを表示します ただしDRPNTは80を超えると00に戻る 00012H PRINT CRT1文字表示 入力:A=アスキーコード 使用:AF 01171H〜01172H DSPXY カーソル位置X、Y 01173H〜0118DH MANG 上のライン接続フラグ 01194H DPRNT TABカウンタ A=00DHならLETNを実行してRET それ以外ならPRTCH[00946H]をコールして画面の表示を行います 00015H MSG メッセージ表示 入力:DE=メッセージアドレス 使用:01171H〜01172H DSPXY カーソル位置X、Y 01173H〜0118DH MANG 上のライン接続フラグ 01194H DPRNT TABカウンタ 画面カーソル位置からVBLANK期間内に最大5バイトごとメッセージを表示します 表示はPRTCH[00946H]をコールされるので 各コントロールコードを実行、文字データなら表示 表示されるとカーソルを右へ移動します 右端なら1段下の左端へ行きます(一番下ならスクロール) スクロールでは一旦画面表示をオフにしてVRAM、MANGの転送を行ってから 画面表示をオン、DPRNTをINC(050Hになると000Hにする) メッセージデータ アスキーコードに無いコードはディスプレイコード0F0Hとして表示 カーソル、HOME、CLRはコントロールとして実行 エンドマークは00DH(その為[CR]の実行不可) コントロールコード 011H…カーソル下 012H…カーソル上 013H…カーソル右 014H…カーソル左 015H…ホーム 016H…クリア 00018H LIST リスト用メッセージ表示 入力:DE=メッセージアドレス 使用:01171H〜01172H DSPXY カーソル位置X、Y 01173H〜0118DH MANG 上のライン接続フラグ 01194H DPRNT TABカウンタ ほとんどMSG[00015H]と同じで 画面カーソル位置からVBLANK期間内に最大5バイトごとメッセージを表示します 表示はDISPLAY[00970H]をコールされるので 表示されるとカーソルを右へ移動します 右端なら1段下の左端へ行きます(一番下ならスクロール) スクロールでは一旦画面表示をオフにしてVRAM、MANGの転送を行ってから 画面表示をオン、DPRNTをINC(050Hになると000Hにする) メッセージデータ アスキーコードに無いコードはディスプレイコード0F0Hとして表示 カーソル、HOME、CLRは文字として表示 エンドマークは00DH(その為[CR]の実行不可) 0001BH GETKEY 出力:A=押されたキー(アスキーコード) 使用:AF 01170H KANAF 000H=カナモードオフ、001H=カナモードオン 01171H〜01172H DSPXY カーソル位置 X、Y 0118EH FLASH カーソル点滅用退避キャラクタ 0118FH〜01190H カーソル点滅用のカーソル位置 01191H FLSST 000H=カーソル表示する、001H=カーソル表示しない 01192H FLSDT カーソル用ディスプレイコード キーボード入力を行い1文字だけアスキーコード変換してAレジスタに出力 チャタリング防止、エコーバックは行いません 特殊キーはアスキーコードとは別のコードがAレジスタ出力されます 060H−066Hはキー入力にないキャラクタなので割り当てられます 押されていない=000H DEL =060H INST =061H 英数 =062H カナ =063H BREAK =064H CR =066H 0001EH BRKEY チェックBREAK 出力:Zf=1 SHIFT+BREAKキーが押されている 0 SHIFT+BREAKキーが押されていない 使用:AF SHFIT+BREAKキーが押されたかどうかチェックします 00021H WRINF CMTインフォーメションブロックの書き込み 使用:AF 出力:Cf=1 BREAKキーが押された 0 正常終了 使用:AF 010F0H〜0116FH IBUFE インフォメーション バッファ 01197H〜01198H SUMDT CMTチェックサムデータ(下位、上位) 0119CH TIMFG ?WRI[00436H]へジャンプします 第1ブロック(FCB)をカセットにセーブします セーブ開始時に’WRITING...’とメッセージを表示します。 2回、同じものがセーブされ1回目と2回目の間には’0’が256回書き込まれます 第1ブロックの内容はIBUFEの全範囲になり 前もってデータを作成する必要があります 00024H WRDAT CMTデータブロックの書き込み 入力:01102H〜01103H SIZE プログラムデータの長さ 01104H〜01105H DTADR プログラムデータの開始アドレス 出力:Cf=1 BREAKキーが押された 0 正常終了 使用:AF 01197H〜01198H SUMDT CMTチェックサムデータ(下位、上位) 0119CH TIMFG ?WRD[00475H]へジャンプします 第2ブロック(プログラム本体)をカセットにセーブします。 IBUFE(010F0H〜0116FH)内の DTADR(01104H〜01105H)のアドレスから SIZE (01102H〜01103H)分のデータをセーブします 2回、同じものがセーブされ1回目と2回目の間には’0’が256回書き込まれます 00027H RDINF CMTインフォーメションブロックの読み込み 出力: A=000H ロード Ok 001H ロード チェックサムエラー 002H BREAKキーが押された Cf=1 エラー有り 0 エラー無し 010F0H−0116FH IBUFE 使用:AF 0119CH TIMFG ROPEN[00027H]へジャンプします 第1ブロック(FCB)をIBUFE(010F0H−0116FH)にロードします 0002AH RDDAT CMTデータブロックの読み込み 出力: A=000H ロード Ok 001H ロード チェックサムエラー 002H BREAKキーが押された Cf=1 エラー有り 0 エラー無し 使用:AF 01102H〜01103H SIZE プログラムデータの長さ 01104H〜01105H DTADR プログラムデータの開始アドレス 0119CH TIMFG ?RDD(004F8H)へジャンプします 第2ブロック(プログラム本体)をカセットにロードします DTADRのアドレスにSIZE分のデータをCMTからロードします 0002DH VERFY 使用:AF 出力: A=000H ロード Ok 001H ロード チェックサムエラー 002H BREAKキーが押された Cf=1 エラー有り 0 エラー無し 使用:AF 01102H〜01103H SIZE プログラムデータの長さ 01104H〜01105H DTADR プログラムデータの開始アドレス 01199H〜0119AH SCMDT CMTチェックサムデータ(下位、上位) 0119CH TIMFG ?VRFY[00588H]へジャンプします 本体メモリにあるデータとCMTのデータのベリファイを行います テープには同じデータが2回セーブされているので 2回ベリファイを行います 00030H MELDY 音楽演奏の実行 入力:DE=演奏データアドレス 出力:Cf=1 BREAKによる中断 0 演奏終了 使用:AF 0119EH TEMPW テンポデータ 1から7 0119FH ONTYO 音長 0から9 011A0H OCTV オクターブ 1から3 011A1H〜011A2H RATIO (分周比データ) DEを演奏データポインタとしてエンドマークがある所まで音を鳴らします 演奏データ(音符の集まり)はBASICのMUSIC文と同じアスキーコードで記され エンドマークは00DHか0C8H 音符の指定 [オクターブ][#(嬰音)][音名][音長] オクターブ アスキーコード0D7H…高音域の指定 指定なし …中音域の指定 アスキーコード0CFH…低音域の指定 嬰音 #…半音の指定 音名 C…ド D…レ E…ミ F…ファ G…ソ A…ラ B…シ R…無音 音長 0… 32分音符、 32分休付 1… 16分音符、 16分休付 2…付点16分音符、付点16分休付 3… 8分音符、 8分休付 4…付点8分音符、付点8分休付 5… 4分音符、 4分休付 6…付点4分音符、付点4分休付 7… 2分音符、 2分休付 8…付点2分音符、付点2分休付 9… 全音符、 全休付 00033H TIMST タイマセット 入力: A=000H AM 001H PM DE=秒数 使用:AF 0119BH AMPM 000H=AM、001=PM 0119CH TIMFG 00038H /INT 01038Hのフックへジャンプします 0003BH TIMRD タイム リード 出力:DE=秒数(最大43199秒=11時59分59秒) A=000H AM 001H PM 使用:AF、DE 0119BH AMPM 000H=AM、001=PM 8253のカウンタ2(1秒ごとに+1)の内容を読みます 00:00:00だとDE=12:00:00( 43200秒)にしてAMまたはPMの切り替えてRET 00:00:01から11:59:59だとDEはそのまま、A=0119BHの内容でRET 12:00:00から23:59:59だとDEはカウンタ2の2の補数にしてAMまたはPMの切り替えてRET 0003EH BELL 使用:AF 音(約440Hz)を一定の間鳴らしますとmz−80K2Eのマニュアル等ではなっていますが mz−700と同様に約880Hzのようです ポート0E004Hに分周比データ00471Hを書き込み ソフトウェアデレェイを掛けます 00041H XTEMP テンポ セット 入力: A=テンポ(1から7 標準は4) 出力:0119EH TEMPW テンポ 002FAH(?TEMP)へジャンプ 0119EHにテンポデータとして書き込みを行います ただしテンポデータは08−入力パラメータとなります テンポ は01が遅く、07が速く テンポデータでは01が速く、07が遅くなります 00044H MSTA ミュージック スタート 使用:AF、HL 011A1H〜011A2H RATIO 分周比データ MLDST[002ABH]へジャンプして分周比の音を連続して鳴らします 00047H MSTP ミュージック ストップ 使用:AF MLDSP[002BEH]へジャンプして音の発生を止めます 00082H ST1 スタート1 モニタのウォームスタートアドレスになります プロント’*’を表示、モニタのコマンド待ちになります 00180H CMPSTR 文字列の比較 入力:DE=アスキー文字列0 HL=アスキー文字列1 B=長さ 出力:Zf=1 同じデータまたは00DHまで同じデータ 0 違うデータ B=比較する長さの残り 使用:AF 文字列0と文字列1の比較をBレジスタ分まで行います アスキー文字列0データにCR(00DH)があるとエンドマークとして戻ります この時、Bレジスタには比較する長さの残りバイト数が出力されます 002ABH MLDST 使用:AF、HL 011A1H−011A2H RATIO 分周比データ MSTA[00044H]はすぐにこのアドレスに飛びます HLに011A1H〜011A2Hの分周比データを書き込み TONE[002AEH]の実行を行います 002AEH TONE 入力:HL=分周比データ 使用:AF、HL 8253のカウンタ0にHLの分周比データを書き込み 0E008Hに001Hを出力します MSTA[00044H]、MLDST[002ABH]と同じように指定された 周比の音を連続して鳴らします パラメータの指定方法が違うだけです 分周比と発生周波数の関係は2MHz/HLレジスタ*2 002BEH MLDSP メロディ ストップ 使用:AF 8253のCWに034Hを出力 0E008Hに000Hを出力して 音の発生を止めます 002E5H ?BEL 使用:AF BELL[0003EH]はすぐにこのアドレスに飛びます 音(約440Hz)を一定の間鳴らします 002FAH ?TEMP 入力: A=テンポ(1から7 標準は4) 出力:0119EH TEMPW テンポ 0119EHにテンポデータとして書き込みを行います ただしテンポデータは08−入力パラメータとなります テンポ は01が遅く、07が速く テンポデータでは01が速く、07が遅くなります 003BAH PRTWRD 16進数2バイト表示 入力:HL=16進数データ 使用:AF HLレジスタの内容を16進数として画面に表示します 1バイトの変換、表示は003C3Hをコールします 003C3H PRTBYT 16進数1バイト表示 入力: A=16進数データ 使用:AF Aレジスタの内容を16進数データとして画面に表示(00012Hをコール)します 003DAH ASC 4ビット16進数データからアスキーコードに変換 入力: A=16進数データ 出力: A=アスキーコード(0から9、AからF) 使用:AF Aレジスタの上位4ビットは0000にして Aレジスタの16進数データをアスキーコードに変換します 003F9H HEX 1バイトアスキーから4ビットの16進数データに変換 入力: A=アスキーコード 出力: A=16進数データ Cf=1 変換エラー有り 0 変換エラー無し 使用:AF Aレジスタの1バイトをアスキーコードとして16進数に変換します Aレジスタの上位4ビットは0000に下位4ビットに16進数が出力されます このときアスキーコードが0から9とAからF以外なら変換エラーとしてCf=1になり Aレジスタのデータは壊れてRETとなります 00410H HLHEX 文字列から2バイト16進数データに変換 入力:DE=文字列データアドレス 出力:HL=2バイト16進数データ Cf=1 変換エラー有り 0 変換エラー無し 使用:AF DEレジスタを文字列データアドレスとして 第1バイトをHの上位4ビット 第2バイトをHの下位4ビット 第3バイトをLの上位4ビット 第4バイトをLの下位4ビットの16進数データとして HLレジスタに16進数データに変換します このとき文字列が0から9とAからF以外なら変換エラーとしてCf=1になり Aレジスタのデータは壊れてRETとなります 0041FH 2HEX 文字列から1バイト16進数データに変換 入力:DE=文字列データアドレス 出力:DE=文字列データアドレス+2 A=16進数データ Cf=1 変換エラー有り 0 変換エラー無し 使用:AF、DE DEレジスタを文字列データアドレスとして第1バイトを上位4ビット 第2バイトを下位4ビットの16進数データとして Aレジスタに16進数データに変換します このとき文字列が0から9とAからF以外なら変換エラーとしてCf=1になり Aレジスタのデータは壊れてRETとなります 00436H ?WRI ライト インフォメーション 使用:AF 出力:Cf=1 BREAKキーが押された 0 正常終了 使用:AF 010F0H〜0116FH IBUFE インフォメーション バッファ 01197H〜01198H SUMDT CMTチェックサムデータ(下位、上位) 0119CH TIMFG 第1ブロック(FCB)をカセットにセーブします セーブ開始時に’WRITING...’とメッセージを表示します。 2回、同じものがセーブされ1回目と2回目の間には’0’が256回書き込まれます 第1ブロックの内容はIBUFEの全範囲になり 前もってデータを作成する必要があります 00475H ?WRD ライトデータ 入力:01102H〜01103H SIZE プログラムデータの長さ 01104H〜01105H DTADR プログラムデータの開始アドレス 出力:Cf=1 BREAKキーが押された 0 正常終了 使用:AF 01197H〜01198H SUMDT CMTチェックサムデータ(下位、上位) 0119CH TIMFG 第2ブロック(プログラム本体)をカセットにセーブします。 IBUFE(010F0H〜0116FH)内の DTADR(01104H〜01105H)のアドレスから SIZE (01102H〜01103H)分のデータをセーブします 2回、同じものがセーブされ1回目と2回目の間には’0’が256回書き込まれます 004D8H ?RDI リード インフォメーション 出力: A=000H ロード Ok 001H ロード チェックサムエラー 002H BREAKキーが押された Cf=1 エラー有り 0 エラー無し 使用:AF 0119CH TIMFG 第1ブロック(FCB)を010F0H〜010FFHにロードします 004F8H ?RDD リード データ 出力: A=000H ロード Ok 001H ロード チェックサムエラー 002H BREAKキーが押された Cf=1 エラー有り 0 エラー無し 使用:AF 01102H〜01103H SIZE プログラムデータの長さ 01104H〜01105H DTADR プログラムデータの開始アドレス 0119CH TIMFG 第2ブロック(プログラム本体)をカセットにロードします DTADRのアドレスにSIZE分のデータをCMTからロードします 00510H RTAPE CMTリード 入力:HL=ロード アドレス BC=長さ 出力: A=000H ロード Ok 001H ロード チェックサムエラー 002H BREAKキーが押された Cf=1 エラー有り 0 エラー無し 使用:AF 01197H〜01198H SUMDT CMTチェックサムデータ(下位、上位) 0119CH TIMFG バイナリファイル自体のロードを行います エラーがあれば、もう1回ロードして、そこでもエラーならばエラーの内容を Aレジスタ、Cf=1にしてCMTクローズして終了になります ただしBREAKは1回目でも終了になります 00588H ?VRFY CMTベリファイ 出力: A=000H ロード Ok 001H ロード チェックサムエラー 002H BREAKキーが押された Cf=1 エラー有り 0 エラー無し 使用:AF 01102H〜01103H SIZE プログラムデータの長さ 01104H〜01105H DTADR プログラムデータの開始アドレス 01199H〜0119AH SCMDT CMTチェックサムデータ(下位、上位) 0119CH TIMFG 本体メモリにあるデータとCMTのデータのベリファイを行います テープには同じデータが2回セーブされているので 2回ベリファイを行います 00601H EDGE 入力:BC=0E001H (PPI PB) DE=0E002H (PPI PC) 出力:Cf=1 BREAKキーが押された 0 BREAKキーが押されていない 使用:AF テープの読み込み時のスタートビットの同期を取ります PPI PC5=1になるまで待ち 0になるまで待ちます この間、BREAKキーが押されているかチェックを行い 押されていればCf=1にして中断します 00624H RBYTE CMT 1バイト読み込み 出力: A=リードデータ Cf=1 BREAKキーが押された 0 − 使用:AF 01197H〜01198H SUMDT CMTチェックサムデータ(下位、上位) テープから1バイト読み込みAレジスタに送ります 00601H(EDGE)をコールして同期を取り 99μs*3のウェイトを取ってからRDATAが0か1で ビットデータの0か1の判断を行い、1ならばチェックサムデータを+1にします これを8回繰り返し1バイトのデータとして読み込みます 0065EH TMARK 入力:FCB の場合 E=0CCH データブロックの場場合 E=0D7H ベリファイ E=053H(データブロックと同じ) 出力:Cf=1 BREAKキーが押された 0 BREAKキーが押されていない 使用:AF 01195H〜01196H TMCNT テープのリーダ音を待ち、読み込みを行います 006B2H MOTOR CMT モータオン 入力:D=0D7H 書き込みメッセージ 0D7H以外 読み込みメッセージ 出力:Cf=1 BREAKキーが押された 0 BREAKキーが押されていない A=000H エラー無し すでにモータが回転していればCf=0にしてRET 回転していなければPC3 0から1にして状態の切り替え すぐにモータが回転していればCf=0にしてRET 回転はPLAY、RECORDスイッチが押されていなければなりません 回転していないと入力のパラメータによって ’PLAY’または’RECORD.’+’PLAY’の文字が出力され モータが回転されるかBREAKキーが押されるまで待ちます 00700H MSTOP CMT モータオフ すでにモータが停止していればRET 回転していればPC3 0から1にして状態の切り替え モータの状態を調べ、停止していればRET 計10回繰り返して停止しなくてもRETになります 00733H CKSUM チェックサムの作成 入力:HL=データ アドレス BC=長さ 出力:01197H〜01198H SUMDT CMTチェックサムデータ(下位、上位) 01199H〜0119AH SCMDT CMTチェックサムデータ(下位、上位) 使用:AF 指定したメモリ内の全データのビット’1’になる部分をカウントを行い テープフォーマットのチェックサムを作成します 00759H DLY1 107usディレイ 107μsのディレイをかけます。 00760H DLY2 99usディレイ 99μsのディレイをかけます。 00767H CMT ’0’書き込み CMTにビットデータ ’0’になるパルスを書き込みます 00780H CMT ’1’書き込み CMTにビットデータ ’1’になるパルスを書き込みます 007A5H:WBYTE CMT 1バイト書き込み 入力: A=ライトデータ 使用:AF Aレジスタからテープへ1バイト書き込みます ビットデータは’1’、D7、D6、D5、D4、D3、D2、D1、D0の順に書き込まれます チェックサムはカウントされません 007B8H GAP 入力:FCB の場合 E=0CCH データブロックの場場合 E=0D7H 使用:AF テープにリーダ音を書き込みます。 これは各ブロックの先頭部分を認識する為の信号になります 008CAH GETKYD キー入力からディスプレイコードの取得 入力:H=カーソルX座標 L=カーソルY座標 出力:A=CTRL付きディスプレイコード H=カーソルX座標 L=カーソルY座標 使用:AF 01170H KANAF 000H=カナモードオフ、001H=カナモードオン 01171H〜01172H DSPXY カーソル位置 X、Y 0118EH FLASH カーソル点滅用退避キャラクタ 0118FH〜01190H カーソル点滅用のカーソル位置 01191H :FLSST 000H=カーソル表示する、001H=カーソル表示しない 01192H :FLSDT カーソル用ディスプレイコード ?SWEP(00A50H)をコールしてキーマトリクインデックスを元に ディスプレイコードに変換してAレジスタに出力します ただしディスレイコードで以下はCTRL(コントロールコード)として扱われます 0C1H=カーソル下 0C2H=カーソル上 0C3H=カーソル右 0C4H=カーソル左 0C5H=HOME 0C6H=CLR 0C7H=DEL 0C8H=INST 0C9H=英数 0CAH=カナ 0CBH=SHIFT+BREAK 0CDH=C R 0F0H=NULL(何も押されていない) 00946H PRTCH キャラクタ(アスキーコード)表示 入力:C=アスキーコード 使用:AF 01171H〜01172H DSPXY カーソル位置X、Y 01173H〜0118DH MANG 上のライン接続フラグ 01194H DPRNT TABカウンタ アスキーコードをCTRL付きディスプレイコードに変換して CTRLでなければDISPLAY(00970H)をコールして一文字表示 一部のCTRLだと各処理を行います 0C0H:スクロール 0C1H:カーソル下 0C2H:カーソル上 0C3H:カーソル右 0C4H:カーソル左 0C5H:HOME 0C6H:CLR 0F0H−0FFH 何もしない 00970H DISPLAY ディスプレイコード表示 入力:A=ディスプレイコード 使用:AF 使用:01171H〜01172H DSPXY カーソル位置X、Y 01173H〜0118DH MANG 上のライン接続フラグ 01194H DPRNT TABカウンタ Aレジスタの内容をディスプレイコードとして1文字を画面に表示 カーソルを右へ移動します 右端なら1段下の左端へ行きます この時一番下ならスクロールを行います スクロールでは一旦画面表示をオフにしてVRAM、MANGの転送を行ってから 画面表示をオン、DPRNTをINC(050Hになると000Hにする) 009B3H ??KEY 使用:AF 0118EH FLASH カーソル点滅用退避キャラクタ 0118FH〜01190H カーソル点滅用のカーソル位置 01191H FLSST 000H=カーソル表示する、001H=カーソル表示しない 01192H FLSDT カーソル用 キャラクタコード カーソルを点滅させながらキーが押され、離されるまで待ちます キー入力があるとディスプレイコードに変換してAレジスタにセットして戻ります。 009FFH ?FLAS カーソルの点滅 使用:0118EH FLASH カーソル点滅用退避キャラクタ 0118FH〜01190H カーソル点滅用のカーソル位置 01191H FLSST 000H=カーソル表示する、001H=カーソル表示しない 01192H FLSDT カーソル用 キャラクタコード カーソルの点滅をするため、カーソル位置のディスプレイコードを退避 その位置にカーソルのディスプレイコードを出力します 00A44H BRKTST ブレイクキーのテスト 出力:Zf=1 BREAKキーが押されている 0 BREAKキーが押されていない 使用:AF 直接キーポートを覗いてBREAKキーが押されたか調べます 00A50H ?SWEP キーボードのスキャン 出力: B=ステータス d7:1=何かキーが押された、0=何もキーは押されていない。 d6:1=SHIFTキーが押された、0=SHIFTキーを押されていない。 C=キーマトリクスインデックス 上位4ビット:キーセレクト(0−9) 下位4ビット:7=キーデータビット7が押された 6=キーデータビット6が押された 5=キーデータビット5が押された 4=キーデータビット4が押された 3=キーデータビット3が押された 2=キーデータビット2が押された 1=キーデータビット1が押された 0=キーデータビット0が押された 使用:AF、BC キーセレクト09から00の順に何か押されているかチェックを行い 押されていればステータスのd7=1にして d7から0の順にチェックを行いキーマトリクスインデクスの出力を行います 00AC9H−00BB8H キーマトリクスデータ データはキーデータ(ポート0E001H)に対応されていますが d0が1バイト目、d7が8バイト目に並び、データはディスプレィコード KEY No.00の英数データ KEY No.00の英数+SHIFTデータ KEY No.01の英数データ KEY No.01の英数+SHIFTデータ KEY No.02の英数データ KEY No.02の英数+SHIFTデータ KEY No.03の英数データ KEY No.03の英数+SHIFTデータ KEY No.04の英数データ KEY No.04の英数+SHIFTデータ KEY No.05の英数データ KEY No.05の英数+SHIFTデータ KEY No.06の英数データ KEY No.06の英数+SHIFTデータ KEY No.07の英数データ KEY No.07の英数+SHIFTデータ KEY No.08の英数データ KEY No.08の英数+SHIFTデータ KEY No.09の英数データ KEY No.09の英数+SHIFTデータ KEY No.00のカナデータ KEY No.01のカナデータ KEY No.02のカナデータ KEY No.03のカナデータ KEY No.04のカナデータ KEY No.05のカナデータ KEY No.06のカナデータ KEY No.07のカナデータ KEY No.08のカナデータ KEY No.09のカナデータ 00BB9H ?ADCN アスキーコードからディスプレイコードの変換 入力: A=アスキーコード 出力: A=CTRL付きディスプレイコード 使用:AF Aレジスタのアスキーコードをディスプレイコードに変換してAレジスタに出力します 000H〜010H、017H〜01FHは0F0Hに変換 011H → 0C1H:カーソル下 012H → 0C2H:カーソル上 013H → 0C3H:カーソル右 014H → 0C4H:カーソル左 015H → 0C5H:HOME 016H → 0C6H:CLR 00BCEH ?DACN ディスプレイコードからアスキーコードの変換 入力: A=CTRL付きディスプレイコード 出力: A=アスキーコード 使用:AF Aレジスタのディスプレイコードをアスキーコードに変換してAレジスタに出力します 00BD6H〜00CC5H アスキーコードからディスプレイコードの変換データ データはアスキーコード010H〜0FFHまでです 00CC6H〜00DA5H ディスプレイコードからアスキーコードの変換データ データはディスプレイコード000H〜0DFHまでです 00DA6H ?BLINK /VBLANK待ち CRTの垂直ブランキングが1になるまで待ち 垂直ブランキングが0になったらRET 00DB5H DISPCH 1文字表示 入力:A=CTRL付きディスプレイコード 使用:01171H〜01172H DSPXY カーソル位置X、Y 01173H〜0118DH MANG 上のライン接続フラグ Aレジスタの内容をディスプレイコードとして1文字を画面に表示 カーソルを右へ移動します 右端なら1段下の左端へ行きます この時一番下ならスクロールを行います スクロールでは一旦画面表示をオフにしてVRAM、MANGの転送を行ってから 画面表示をオンにします 00DDCH ?DPCT ディスプレイコントロール 入力:A=CTRL付きディスプレイコード 使用:01171H〜01172H DSPXY カーソル位置X、Y 01173H〜0118DH MANG 上のライン接続フラグ 01194H DPRNT TABカウンタ CTRL付きディスプレイコードをコントロールします Aレジスタのコントロールコードは下記の通りです 0C0H:スクロール 0C1H:カーソル下 0C2H:カーソル上 0C3H:カーソル右 0C4H:カーソル左 0C5H:HOME 0C6H:CLR 0C7H:DEL 0C8H:INST 0C9H:英数 0CAH:カナ 0CDH:CR 00FB1H ?PONT カーソル位置からVRAMアドレスに変換 出力:HL=VRAMアドレス 使用: F 01171H〜01172H DSPXY カーソル位置 モニタのカーソル位置のVRAMアドレスをHLレジスタにセットします 00FB4H カーソル位置からVRAMアドレス変換 入力:H=カーソルX座標 L=カーソルY座標 出力:HL=VRAMアドレス 使用: F 01171H〜01172H DSPXY カーソル位置 指定したカーソル位置のVRAMアドレスをHLレジスタにセットします 00FC9H INITIO PPIイニシャライズ 使用:AF、HL PPIをイニシャライズします PA0〜7:出力 PB0〜7:入力 PC0〜3:入力 PC4〜7:出力 PC3=1 MOTOR PC2=1 LED 緑 00FD8H ?CLEAR バッファクリア 入力:HL=バフッファ アドレス B=バフッファの長さ 使用:AF、 B、HL 指定したバッファを000Hでクリアされます
01000H :FDD ポート0FAHの内容(出力) 01001H :FDD ポート0nnF8Hのnn(上位8ビット)の内容 01002H :FDD MOTORフラグ d0:1=オン、0=オフ 01003H :FDD ドライブ1 MOTORフラグ d0:1=オン、0=オフ 01004H :FDD ドライブ2 MOTORフラグ d0:1=オン、0=オフ 01005H :FDD ドライブ3 MOTORフラグ d0:1=オン、0=オフ 01006H :FDD ドライブ4 MOTORフラグ d0:1=オン、0=オフ 01007H :FDD リトライ用カウンタ 01008H :FDD エラーコード 01009H :FDD 使用したトラック 0100AH :FDD 使用したセクタ 0100BH〜0100DH:FDD エラーフック JP 0F05AH(IPL ROM) 0100EH :FDD リトライ用カウンタ 0100FH〜01010H:FDD 01011H :FDD ドライブNo.nn 000Hがドライブ1、最大003H 01012H〜01037H:空き 01038H〜0103AH:/INTフック 0103BH :空き 0103CH〜010EFH:SP スタックポインタ 010F0H〜0116FH:IBUFE CMT用バッファ 010F0H :ATBR CMTファイル属性 010F1H〜01101H:NAME CMTファイルネーム 01102H〜01103H:SIZE CMT大きさ 01104H〜01105H:DTADR CMTアドレス 01106H〜01107H:EXADR CMT実行アドレス SP−1002では00000H−01FFFHだと00082Hに飛ぶ 01108H〜0116FH:COMNT CMTコメント 01108H 000H =UNLIST オフ 001H〜0FFH=UNLIST オン 01109H 000H =BTXオートラン オフ 001H〜0FFH=BTXオートラン オン 01170H :KANAF 000H=カナモードオフ、001H=カナモードオン 01171H〜01172H:DSPXY カーソル位置 X=000H−027H、Y=000H−018H 01173H〜0118DH:MANG 上のライン接続フラグ 000H=接続していない、001H−0FFH=接続している 0118EH :FLASH カーソル点滅用退避キャラクタ 0118FH−01190H:FLPST カーソル点滅用のカーソル位置 01191H :FLSST 000H=カーソル表示する、001H=カーソル表示しない 01192H :FLSDT カーソル用ディスプレイコード 01193H :STRGF キー入力時のコントロール d7:インサート数 1=コントロールコード入力、0=通常入力 d6:インサート数 d6 d5:インサート数 d5 d4:インサート数 d4 d3:インサート数 d3 d2:インサート数 d2 d1:インサート数 d1 d0:インサート数 d0 01194H :DPRNT TABカウンタ 01195H〜01196H:TMCNT CMTテープマークカウンタ 01197H〜01198H:SUMDT CMTチェックサムデータ(下位、上位) 01199H〜0119AH:SCMDT CMTチェックサムデータ(下位、上位) 0119BH :AMPM タイマ 000H=AM、001=PM 0119CH :TIMFG タイマ設定 0F0H=オン、000H=オフ (CMTルーチンで使用) 0119DH :SWRK 000H=クリック音オフ、0FFH=クリック音オン 0119EH :TEMPW テンポデータ 1〜7 (SP−5030のTEMPO文と逆) 1=最も速い Molto Allegro,Presto 4=中位の速度 Moderato 7=最も遅い Lento,Adagio 0119FH :ONTYO 音長 0〜9 011A0H :OCTV オクターブ 1〜3 (1が一番高い、2が中間、3が一番低い) 011A1H〜011A2H:RATIO 分周比データ 8253 C0の分周データ 011A3H〜011F3H:BUFER ラインバッファ
mz−80Kのコーナへ Home へ戻る