mz-80K SP-1002


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                   Bit7:1=コントロールコード入力、0=通常入力                   Bit6:インサート数d6                   Bit5:インサート数d5                   Bit4:インサート数d4                   Bit3:インサート数d3                   Bit2:インサート数d2                   Bit1:インサート数d1                   Bit0:インサート数d0    0119DH        SREK   000H=クリック音オフ、0FFH=クリック音オン      キーボードから1行分を入力、エンドマークは[CR]になります(00DHがセット)    最大入力文字数はエンドマークを含めて80文字    キー入力にはエコーバックが行われカーソルコントロールも受けつけられます    STRIGFのBit7は”が入力されるたびにオン・オフされます      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レジスタの上位4BiTは0000に下位4Bitに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=ステータス        Bit7:1=何かキーが押された、0=何もキーは押されていない。        Bit6: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の順に何か押されているかチェックを行い    押されていればステータスのBit7=1にして    Bit7から0の順にチェックを行いキーマトリクスインデクスの出力を行います           00AC9H−00BB8H キーマトリクスデータ    データはキーデータ(ポート0E001H)に対応されていますが    Bit0が1バイト目、Bit7が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(上位8Bit)の内容 01002H       :FDD MOTORフラグ Bit0:1=オン、0=オフ 01003H       :FDD ドライブ1 MOTORフラグ Bit0:1=オン、0=オフ 01004H       :FDD ドライブ2 MOTORフラグ Bit0:1=オン、0=オフ 01005H       :FDD ドライブ3 MOTORフラグ Bit0:1=オン、0=オフ 01006H       :FDD ドライブ4 MOTORフラグ Bit0: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 キー入力時のコントロール                Bit7:インサート数 1=コントロールコード入力、0=通常入力                Bit6:インサート数 d6                Bit5:インサート数 d5                Bit4:インサート数 d4                Bit3:インサート数 d3                Bit2:インサート数 d2                Bit1:インサート数 d1                Bit0:インサート数 d0 01194H       :DPRNT TABカウンタ 01195H−01196H:TMCNT CMTテープマークカウンタ 01197H−01198H:SUMDT CMTチェックサムデータ(下位、上位) 01199H−0119AH:SCMDT CMTチェックサムデータ(下位、上位)     0119BH       :AMPM  タイマ 000H=AM、001=PM 0119CH       :TIMFG タイマフラグ 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 へ戻る