;============================================================================ ; MZ-2500 IOCSコール (SVCコール) ;============================================================================ SVC MACRO RST 18h DB %1 ENDM ;---------------------------------------------------------------------------- ; パラメータ受け渡しエリア ;---------------------------------------------------------------------------- KEYBUF EQU 0A01h ; 0A01h-0B0Fh BUF2 EQU 0B10h ; 0B10h-0C1Fh BUF3 EQU 0C20h ; 0C20h-0CBFh BUF4 EQU 0CC0h ; 0CC0h-0DBFh DIRARE EQU 1000h ; 1000h-17FFh SVCCW EQU 0CC0h ; 0CC0h-0CECh KCTRLS EQU 05D2h CURSW EQU 05D3h CURX EQU 05E2h CURY EQU 05E3h CURXST EQU 05E4h CURYST EQU 05E5h CURXED EQU 05E6h CURYED EQU 05E7h CURCOL EQU 05E8h CURLIN EQU 05E9h INSMOD EQU 05EAh CURTXT EQU 05ECh SCROLL EQU 05EDh DSPSA EQU 05EFh ;word COLORA EQU 05F4h CHRATR EQU 05F5h DSPMOD EQU 05F8h CURBGC EQU 05F9h ;word DSPSL EQU 05FBh ;word DSPEL EQU 05FDh ;word DSPSC EQU 05FFh DSPEC EQU 0600h TABTBL EQU 0602h ;byte[10] KANJI EQU 060Ch FKLIST EQU 060Dh FNTSEL EQU 0610h KANKAN EQU 0613h IE_KEY EQU 0680h IE_STO EQU 0694h IE_HEL EQU 0694h IE_COM EQU 0696h IE_MOU EQU 0698h IE_TIM EQU 069Dh IE_ITV EQU 069Eh IE_PLA EQU 069Fh I_MSTR EQU 06A2h ;---------------------------------------------------------------------------- ; プリンタ・ファイル・キー入力・OPN ;---------------------------------------------------------------------------- ;---------------------------------------------------------------------------- ; MONOP ; モニタ・モードに入る ; IN : 無 ; OUT: 無 ; DES: 全 ; _MONOP EQU 00h ;---------------------------------------------------------------------------- ; CR1 ; 改行する ; IN : 無 ; OUT: 無 ; DES: IY ; _CR1 EQU 01h ;---------------------------------------------------------------------------- ; CR2 ; 行頭でなければ改行する ; IN : 無 ; OUT: 無 ; DES: IY ; _CR2 EQU 02h ;---------------------------------------------------------------------------- ; CRT1C ; CRTへ1文字出力する ; IN : A = 文字コード ; OUT: 無 ; DES: IY ; _CRT1C EQU 03h ;---------------------------------------------------------------------------- ; CRT1X ; CRTへ1文字出力する 制御コードを実行しない ; IN : A = 文字コード ; OUT: 無 ; DES: IY ; _CRT1X EQU 04h ;---------------------------------------------------------------------------- ; CRTMSG ; CRTへ文字列を出力する ; IN : DE = ASCIIZ文字列アドレス ; OUT: 無 ; DES: AF, IY ; _CRTMSG EQU 05h ;---------------------------------------------------------------------------- ; LPTOT ; プリンタへ1文字出力 コード変換無し ; IN : A = 出力データ ; OUT: 無 ; DES: 全 ; _LPTOT EQU 06h ;---------------------------------------------------------------------------- ; LPT1C ; プリンタへ1文字出力 プリンタの種類に合わせてコード変換を行う ; IN : A = 出力データ ; OUT: 無 ; DES: 全 ; _LPT1C EQU 07h ;---------------------------------------------------------------------------- ; DISP ; 指定位置に文字を表示する 制御コードはそのコードに対応するキャラクタが表示される ; IOCS用のコールであり、ユーザが使うものではない ; IN : A = データ ; H = 横位置 ; L = 縦位置 ; OUT: 無 ; DES: 全 ; _DISP EQU 08h ;(IPL:サポート無し) _TERM EQU 09h ;---------------------------------------------------------------------------- ; GETL ; キーボードから1行入力 ; IN : DE = バッファアドレス ; OUT: Cy = 1 : SHIFT+BREAKが押された ; = 0 : SHIFT+BREAKが押されていない ; DES: BC, HL以外 ; _GETL EQU 0Ch ;---------------------------------------------------------------------------- ; INKEY ; キーボードから1文字入力する ; IN : A[Bit0] = 0 : キーが押されていなければ Zf = 1 でリターンする ; = 1 : キーが押されるまで待つ ; A[Bit1] = 0 : ファンクションキーを展開しない ; = 1 : ファンクションキーを展開する ; A[Bit2] = 0 : かな漢字変換を行わない ; = 1 : かな漢字変換を行う ; A[Bit3] = 0 : アルゴキー・COPYキーはフラグのみセットする ; = 1 : アルゴキー・COPYキーの機能を実行する ; OUT: Zf = 1 : キー入力なし ; = 0 : ; [通常キーの場合] ; B = ASCIIコード ; C[Bit7] = 0 ; C[Bit6-0] = key mode ; [特殊キーの場合] ; B = key code ; C[Bit7] = 1 ; C[Bit6-0] = key mode ; ; DES: HL, DE以外 ; _INKEY EQU 0Dh ;---------------------------------------------------------------------------- ; BRKEY ; SHIFT+BREAKが押されているかをチェック ; IN : 無 ; OUT: 押されていたら Zf=1, Cy=1 ; DES: AF ; _BREAK EQU 0Eh ;---------------------------------------------------------------------------- ; HALT ; BREAKが押されたら、キーが何か押されるまで待つ ; IN : A[0] = 1 ; OUT: 無 ; DES: AF ; _HALT EQU 0Fh ;---------------------------------------------------------------------------- ; DI ; 割り込みを禁止する ; IN : A = 0 : 1ms〜1s程度の期間割り込みを禁止する場合に使用 ; = 0以外 : 1s以上の期間割り込みを禁止する場合に使用(music wait) ; OUT: 無 ; DES: AF ; _DI EQU 10h ;---------------------------------------------------------------------------- ; EI ; 割り込みを許可する ; IN : 無 ; OUT: 無 ; DES: AF ; _EI EQU 11h ;---------------------------------------------------------------------------- ; NEWON ; RAM IOCSから機能を切り離し、メモリを開放する ; IN : A = 0 : レベルII (電卓・カラーシミュレーションなど) ; = 1 : .mouse, .voice ; = 2 : .jisho ; = 3 : .term, .kkan ; = 4 : .cls, .posck, .possv, .pset, .line, .patter, .box, ; .paint, .circle, .point, .ginit, .view, .scren, ; .color, .symbl, .hview, .crep, .gput, .gget, ; .pense, .move, .pri, .cbloc, .crti, .cocnv, .hroll ; = 5 : .lptra, .hcpy ; OUT: 無 ; DES: AF ; _NEWON EQU 12h ;---------------------------------------------------------------------------- ; DEASC ; ASCII文字列をバイナリに変換する ; 対応文字列は 10進整数(1〜65535), $xxxx, &H, &O, &B, &J, &K ; IN : HL = ASCII文字列のアドレス ; OUT: DE = バイナリデータ(&J, &Kの場合はシフトJISコード) ; HL = 変換した文字列の次のアドレス ; Cy = 0 : 正常終了 Aレジスタに変換した数値のタイプを返す ; = 1 : オーバーフロー(A=2) / エラー(A=3) ; A = 変換した数値のタイプ(正常終了時) ; 0Eh:&B 0Fh:&O 10h:&H 11h:$xxxx ; 12h:10進数 13h:&J 14h:&K ; DES: AF, HL, DE ; _DEASC EQU 13h ;---------------------------------------------------------------------------- ; DEHEX ; ASCII文字列の16進数をバイナリに変換する "$", "&H" は不要 ; IN : HL = ASCII文字列のアドレス ; OUT: DE = バイナリデータ ; HL = 変換した文字列の次のアドレス ; Cy = 1 : 正常終了 ; A = 2 : オーバーフロー ; DES: AF, HL, DE ; _DEHEX EQU 14h ;---------------------------------------------------------------------------- ; CKHEX ; ASCIIコードが16進数文字かどうかをチェック ; IN : A = ASCIIコード ; OUT: Cy = 0 : ASCIIコードは[0-9A-Fa-f] Aレジスタに00h〜0Fhの値を返す ; Cy = 1 : ASCIIコードは16進数文字ではない ; DES: AF ; _CKHEX EQU 15h ;---------------------------------------------------------------------------- ; ASCHL ; 無符号整数を10進数のASCII文字列に変換する ; IN : HL = バイナリデータ(無符号整数) ; DE = 結果を格納するバッファアドレス ; B = 0 : ゼロサプレスする ; = 0以外 : 先頭の'0'をスペースにする(結果は5バイトになる) ; OUT: DE = 格納したASCII文字列の次のアドレス ; DES: AF, DE ; _ASCHL EQU 16h ;---------------------------------------------------------------------------- ; COUNT ; 文字列の長さを返す ; IN : DE = 文字列のアドレス ; OUT: B = 文字列の長さ ; DES: AF ; _COUNT EQU 17h ;(IPL:サポート無し) _KKAN EQU 18h ;---------------------------------------------------------------------------- ; JISHO ; 辞書ROM変換 MZ-1R28が必要 ; IN : A = 機能コード ; 0 : 文節変換 第1候補取り出し ; 1 : 文節変換 次候補取り出し ; 2 : 文節変換 前候補取り出し ; 3 : 人名・地名変換 第1候補取り出し ; 4 : 人名・地名変換 次候補取り出し ; 5 : 人名・地名変換 前候補取り出し ; (KEYBUF) = 変換対象 SHIFT-JIS 最大40バイト ; OUT: HL = 候補数 ; B = 辞書ROMの有無 0:無し ; (KEYBUF) = 変換結果 ; DES: AF ;(IPL:サポート無し) ; _JISHO EQU 19h _DIOCS EQU 1Ah ;---------------------------------------------------------------------------- ; ERRX ; エラーメッセージを表示する ; IN : A = エラーコード ; Bit7 = 1 にすると、直前にアクセスしたデバイス名とファイル名も ; 表示する ; OUT: 無 ; DES: 無 ;(IPL:サポート無し) ; _ERRX EQU 1Bh ;---------------------------------------------------------------------------- ; KCONV ; 漢字コードを変換する ; IN : A = 0 : シフトJIS → JIS ; 1 : JIS → シフトJIS ; 2 : シフトJIS → 区点コード ; 3 : 区点コード → シフトJIS ; 4 : 区点コード → JIS ; 5 : JIS → 区点コード ; OUT: HL = 変換した漢字コード ; Cy = 1 : エラー(HL=81A6h "※" を返す) ; DES: AF ; _KCONV EQU 1Ch ;(IPL:サポート無し) _LPTRA EQU 1Dh ;---------------------------------------------------------------------------- ; ?PONT ; キャラクタ画面のXY座標からVRAMのアドレスを計算する ; IN : L = X座標 ; H = Y座標 ; OUT: HL = VRAMアドレス(C000h〜C7FFh) ; DES: 全 ; _?PONT EQU 1Eh ;(IPL:サポート無し) _KCALL EQU 1Fh ;---------------------------------------------------------------------------- ; BELL ; ベルを鳴らす(880Hz) ; IN : 無 ; OUT: 無 ; DES: AF ; _BELL EQU 20h ;---------------------------------------------------------------------------- ; PLAY ; 音楽を演奏する ; IN : A = チャンネル(0-5) (MCTRLで演奏中でないことを確認すること) ; = FFh : 全チャンネル ; DE = MMLアドレス ; OUT: 無 ; DES: 全 ; _PLAY EQU 21h ;---------------------------------------------------------------------------- ; SOUND ; SSGのレジスタにデータを書き込む ; IN : B = 0 : 指定時間だけ音を鳴らす ; A = 音階(0-95) ; E = 音長(0.1s単位) ; B = 1 : SSGレジスタ書き込み ; A = SSG レジスタ番号 ; E = 書き込みデータ ; OUT: 無 ; DES: AF ; _SOUND EQU 22h ;---------------------------------------------------------------------------- ; MCTRL ; 音楽演奏関連制御 ; IN : B = 0 : PSGルーチンの初期設定(music init) ; = 1 : 演奏開始 ; = 2 : 演奏停止 ; = 3 : 演奏中なら演奏が終わるまで待つ ; = 4 : 演奏中かどうか調べる(OUT: Zf=0 で演奏中) ; = 5 : システム音色データ取り出し ; A = 音色番号(0-29) ; DE = バッファアドレス(29バイト必要) ; = 6 : ユーザー作成の音色データをセット ; C = チャンネル(0-2) ; HL = 音色データのアドレス(26バイト) ; = 7 : LFOデータセット/取り出し ; A = 0 : 取り出し ; = 1 : セット ; C = チャンネル(0-5) ; HL = バッファアドレス(4バイト) ; OUT: 無 ; DES: AF ; _MCTRL EQU 23h ;---------------------------------------------------------------------------- ; PRT1C ; ファイルへ1文字出力 ; IN : A = データ ; OUT: 無 ; DES: AF ;(IPL:サポート無し) ; _PRT1C EQU 26h ;---------------------------------------------------------------------------- ; INP1C ; ファイルから1文字入力 ; IN : 無 ; OUT: A = データ ; Cy = 1 (EOF検出時) ; DES: AF ;(IPL:サポート無し) ; _INP1C EQU 27h ;---------------------------------------------------------------------------- ; CLRIO ; すべてのopenをキャンセルし、IOCSを初期化 ; 書き込み途中のものはkillする ; IN : 無 ; OUT: 無 ; DES: AF ;(IPL:サポート無し) ; _CLRIO EQU 28h ;---------------------------------------------------------------------------- ; PWD ; カレントディレクトリのパス名を得る ; IN : 無 ; OUT: DE = パス名を読み込むためのバッファアドレス ; (一般的には1000h-17FFhのDIR Areaをバッファとして使用する) ; B = パス名の長さ ; DES: 全 ;(IPL:サポート無し) ; _PWD EQU 2Ah ;---------------------------------------------------------------------------- ; MKDIR ; ディレクトリ作成 DEVNMをコールした後に呼ぶこと ; IN : 無 ; OUT: 無 ; DES: AF ;(IPL:サポート無し) ; _MKDIR EQU 2Bh ;---------------------------------------------------------------------------- ; DEVNM ; デバイス名とディレクトリ名を解釈する ; 文字列バッファとしてKEYBUFを使用 ; IN : DE = デバイス名とディレクトリ名を格納したバッファアドレス ; B = 長さ ; OUT: HL = pointer(next) ; DE = device table ; A = channel ; DES: 全 ;(IPL:サポート無し) ; _DEVNM EQU 2Ch ;---------------------------------------------------------------------------- ; DEVFN ; デバイス名とディレクトリ名とファイル名を解釈する ; 文字列バッファとしてKEYBUFを使用 ; IN : DE = デバイス名・ディレクトリ名・ファイル名を格納したバッファアドレス ; B = 長さ ; OUT: 無 ; DES: 全 ;(IPL:サポート無し) ; _DEVFN EQU 2Dh ;---------------------------------------------------------------------------- ; LUCHK ; 次に使用するlogical-unit-number(lu)を指定する ; 複数のluを使用する場合、luが変わるたびに呼び出す必要がある ; IN : A = lu ; OUT: A = 1 : Readオープンされている ; = 2 : Writeオープンされている ; = 4 : RANDOMファイルとしてオープンされている ; Cy = 1 : オープンされていない ; DES: AF ;(IPL:サポート無し) ; _LUCHK EQU 2Eh ;---------------------------------------------------------------------------- ; LOPEN ; ロードを実行するためにファイルをオープンする ; DEVFNをコールした後にコールすること ; オープン可能なファイルは BTX, OBJ のみ ; IN : 無 ; OUT: 無 ; DES: 全 ;(IPL:サポート無し) ; _LOPEN EQU 2Fh ;---------------------------------------------------------------------------- ; LOADF ; OBJ, BTXファイルをロードする ; DEVNMをコールした後でコールすること ; IN : HL = ロードアドレス ; OUT: 無 ; DES: 全 ;(IPL:サポート無し) ; _LOADF EQU 30h ;---------------------------------------------------------------------------- ; SAVEF ; ファイルをセーブする ; DEVNMをコールした後でコールすること ; IN : DE = セーブ開始アドレス ; A = 0 : ファイルの作成のみ・セーブしない ; = 0以外: ファイルを作成し、セーブする ; MLMD20,21 = セーブする長さ ; MLMD22,23 = ロードアドレス ; MLMD24,25 = 実行アドレス ; OUT: 無 ; DES: 全 ;(IPL:サポート無し) ; _SAVEF EQU 31h ;---------------------------------------------------------------------------- ; RWOPN ; ファイルをオープンする ; DEVNMをコールした後でコールすること ; IN : A = Logical Unit Number ; D = 01h : Readオープン ; = 02h : Writeオープン ; = 04h : RANDOMファイルのオープン ; = 10h : APPENDオープン ; E = field/32-1 (RANDOMファイルのオープンの場合のみ) ; OUT: 無 (RANDOMファイル以外) ; RANDOMファイルの場合 ; Zf = 1 : new file ; = 0 : file exist ; DES: AF ;(IPL:サポート無し) ; _RWOPN EQU 33h ;---------------------------------------------------------------------------- ; BGETL ; 1行入力 現在のカーソル位置から入力する ; その他はGETLと同じ ; IN : 無 ; OUT: DE = バッファアドレス ; DES: BC, HL以外 ; _BGETL EQU 34h ;---------------------------------------------------------------------------- ; INMSG ; ファイルから1行入力(0Dhまで) 末尾の0Dhは取り除かれる ; DEVNMをコールした後でコールすること ; IN : DE = 入力バッファアドレス ; OUT: B = 長さ ; Cy = 1 : EOF ; DES: DE, HL以外 ;(IPL:サポート無し) ; _INMSG EQU 35h ;---------------------------------------------------------------------------- ; UNPUT ; ファイルから読みだしたデータをファイルへ戻す ; 1バイトのみ可能 ; IN : A = 戻すデータ ; OUT: 無 ; DES: AF ;(IPL:サポート無し) ; _UNPUT EQU 36h ;---------------------------------------------------------------------------- ; PRSTR ; ファイルにnバイトデータを出力 ; IN : DE = データアドレス ; B = データ長さ ; OUT: 無 ; DES: AF ;(IPL:サポート無し) ; _PRSTR EQU 37h ;---------------------------------------------------------------------------- ; CLKL ; ファイルのCLOSE/KILL ; IN : A = 0 : 現在オープン中のすべてのファイルをclose/killする ; = 0以外: Aで指定されたLogical Unitのファイルをclose/killする ; B = 0 : KILL ; = 0以外: CLOSE ; OUT: 無 ; DES: AF ;(IPL:サポート無し) ; _CLKL EQU 38h ;---------------------------------------------------------------------------- ; DIR ; ディレクトリの内容をディレクトリバッファに読み込む・CRT/LPTに出力する ; DEVNMをコールした後でコールすること ; IN : A = 0 : ディレクトリを1000h〜17FFhに読み出し、隠し文字の処理とソートを行う ; DE = ファイル名 (隠し文字の*,?を含んでもよい) ; B = ファイル名の長さ ; A = 0以外: Aで指定されたLogical Unitにディレクトリを出力する ; 88h : CRT ; 89h : LPT ; OUT: 無 ; DES: AF ;(IPL:サポート無し) ; _DIR EQU 39h ;---------------------------------------------------------------------------- ; CHDIR ; チェンジディレクトリ ; DEVNMをコールした後でコールすること ; IN : 無 ; OUT: 無 ; DES: 無 ; _CHDIR EQU 3Ah ;---------------------------------------------------------------------------- ; FINIT ; BASICのinit commandに相当 ; DEVNMをコールした後でコールすること ; IN : 無 ; OUT: 無 ; DES: 全 ;(IPL:サポート無し) ; _FINIT EQU 3Ch ;---------------------------------------------------------------------------- ; DELET ; BASICのdelete/rmdir commandに相当 ; DEVNMをコールした後でコールすること ; IN : Cy = 0 : detele ; = 1 : rmdir ; OUT: 無 ; DES: AF ;(IPL:サポート無し) ; _DELET EQU 3Dh ;---------------------------------------------------------------------------- ; RENAM ; ファイル名を変更する ; DEVNMをコールした後でコールすること ; IN : DE = 新しいファイル名のアドレス ; B = 新しいファイル名の長さ ; OUT: 無 ; DES: AF ;(IPL:サポート無し) ; _RENAM EQU 3Eh ;---------------------------------------------------------------------------- ; LOCK ; ファイルのプロテクト設定・解除・ステータス取得 ; DEVNMをコールした後でコールすること ; IN : A = 00h : プロテクト解除 ; = 01h : ファイルをプロテクトする ; = FFh : ファイルのプロテクト状況を調べる ; Cy = 1 : file not found ; = 0, A = 0 : unlocked ; = 0, A = 1 : locked ; OUT: 無 ; DES: AF ;(IPL:サポート無し) ; _LOCK EQU 3Fh ;---------------------------------------------------------------------------- ; BRD ; ランダムファイルをアクセス ; IN : A = 0 : 次にread/writeするレコード番号を設定する ; この番号は、以下の A = 1〜4 のコールで使用する ; この番号はオートインクリメントする ; DE = record number ; A = 1, DE = 0以外: ; 1レコード読み、DEの示すアドレスに格納する ; Bに長さが入る ; BASICのinput#()に相当 ; A = 1, DE = 0: ; 1レコード読み、field-bufferに格納する ; BASICのget#に相当 ; A = 2, DE = 0以外: ; DEからB typeをファイルに出力 ; BASICのprint#()に相当 ; A = 2, DE = 0: ; field-bufferをファイルに出力する ; BASICのput#に相当 ; A = 3: ; field bufferからデータを取り出す ; DE = 読み出しアドレス ; B = オフセット(fieldの何バイトめかを示す) ; C = 読み出す長さ ; L = ファイル番号 ; A = 4: ; field bufferにデータをセットする ; BASICのlset/rsetに相当 ; 他の入力レジスタは A = 3 の場合と同様 ; A = 5: ; fieldからデータをまとめて入力する ; gload等で使用 ; HL = ロードアドレス ; D = read/writeするサイズ/256 1,2,4,8,16のいずれかを指定 ; E = 0を指定 ; BC = ファイルの先頭からの位置(バイト単位) / 256 ; この値はD reg.の倍数であること ; A = 6: ; fileへデータをまとめて出力する ; gsaveなどで使用 ; 他の入力レジスタは A = 5 の場合と同様 ; DES: 全 ;(IPL:サポート無し) ; _BRD EQU 40h ;---------------------------------------------------------------------------- ; FFUNC ; BASICのLOC/LOF/FPOSと同等の機能 ; LUCHKをコールした後でコールすること ; IN : A = 0 : BC = LOC ; A = 1 : BC = LOF ; A = 2 : BC = FPOS ; A = 3 : BC = CRを出力した後に出力した文字数(ファイル) ; カーソルの現在の桁位置(CRT) ; プリンタのヘッド位置(LPT) ; OUT: BC ; DES: DE, HL以外 ;(IPL:サポート無し) ; _FFUNC EQU 41h ;---------------------------------------------------------------------------- ; DEFNC ; レコード単位でのファイルの入出力 ; DEVNMをコールした後でコールすること ; IN : A = 0 : フリーサイズを求める ; Cy = 0 : DEにフリーサイズ(Kバイト)を出力 ; = 1 : 実行しない ; A = 1 : レコード単位の入力 ; HL = 読み出しアドレス ; DE = バイトサイズ ; BC = 読み出し開始ブロック番号 ; A = 1 : レコード単位の入力 ; HL = 書き込みデータのアドレス ; DE = バイトサイズ ; BC = 書き込み開始ブロック番号 ; DES: AF ;(IPL:サポート無し) ; _DFUNC EQU 42h _ERCVR EQU 43h ;---------------------------------------------------------------------------- ; SWAP ; テキスト・ファイルの交換・復帰を行う ; IN : A = 0 : テキスト・ファイルの交換 ; DE = セーブするテキスト先頭アドレス ; HL = セーブする長さ ; A = FFh : テキスト・ファイルの復帰 ; OUT: 無 ; DES: 全 ;(IPL:サポート無し) ; _SWAP EQU 44h ;---------------------------------------------------------------------------- ; CLS ; グラフィック画面をバックカラーでクリアする ; IN : A = バックカラー ; OUT: 無 ; DES: 全 ;(IPL:サポート無し) ; _CLS EQU 45h ;---------------------------------------------------------------------------- ; POSCK ; 指定座標がグラフィック画面上のビューポート内にあるかどうかをチェック ; IN : (HL ).w = X座標 ; (HL+2).w = Y座標 ; OUT: 無 (範囲外のときはエラー) ; DES: 全 ;(IPL:サポート無し) ; _POSCK EQU 46h ;---------------------------------------------------------------------------- ; POSSV ; 座標セット/読み出し ; IN : Cy = 0 : 座標セット ; (HL ).w = X座標 ; (HL+2).w = Y座標 ; Cy = 1 : 座標読み出し ; OUT: DE = X座標 ; HL = Y座標 ; DES: 全 ;(IPL:サポート無し) ; _POSSV EQU 47h ;---------------------------------------------------------------------------- ; PSET ; グラフィック画面上に点を描画 ; IN : (HL ) = カラーコード ; (HL+1) = 描画機能 ; (HL+2).w = X座標 ; (HL+4).w = Y座標 ; OUT: 無 ; DES: 全 ;(IPL:サポート無し) ; _PSET EQU 48h ;---------------------------------------------------------------------------- ; LINE ; グラフィック画面上に線を描画 ; IN : (HL ) = カラーコード ; (HL+1) = 描画機能 ; (HL+2).w = 始点X座標 ; (HL+4).w = 始点Y座標 ; (HL+6).w = 終点X座標 ; (HL+8).w = 終点Y座標 ; (HL+10) = ラインモード ; Bit0 = 0 : 実線 ; = 1 : ラインスタイル ; Bit1 = 0 : 新しいラインスタイル ; = 1 : 前のラインスタイル ; (HL+11).w = ラインスタイル ; OUT: 無 ; DES: 全 ;(IPL:サポート無し) ; _LINE EQU 49h ;---------------------------------------------------------------------------- ; PATTR ; グラフィック画面上にパターンを描画 ; IN : (HL ) = カラーコード ; (HL+1) = 描画機能 ; (HL+2) = バックカラー ; (HL+3) = 文字列の長さ ; (HL+4).w = 文字列のアドレス ; (HL+6) = 方向 0:上 1:下 ; (HL+7) = 高さ ; OUT: 無 ; DES: 全 ;(IPL:サポート無し) ; _PATTR EQU 4Ah ;---------------------------------------------------------------------------- ; LINE ; グラフィック画面上に長方形を描画 ; IN : (HL ) = カラーコード ; (HL+1) = 描画機能 ; (HL+2).w = 始点X座標 ; (HL+4).w = 始点Y座標 ; (HL+6).w = 終点X座標 ; (HL+8).w = 終点Y座標 ; (HL+10) = ラインモード ; 0 : 実線で枠を描画 ; 1 : ラインスタイルで枠を描画 ; 2 : 長方形を指定色で塗りつぶす ; 3 : 長方形をタイルパターンで塗りつぶす ; (HL+11).w = ラインスタイルまたはタイルパターンアドレス ; (HL+13) = タイルパターンのバイト数 ; OUT: 無 ; DES: 全 ;(IPL:サポート無し) ; _BOX EQU 4Bh ;---------------------------------------------------------------------------- ; LINE ; グラフィック画面上の閉鎖領域内を塗りつぶす ; IN : (HL ).w = 開始X座標 ; (HL+2).w = 開始Y座標 ; (HL+4).w = 境界色アドレス ; (HL+6) = 境界色の数 FFhの場合はnotモード ; (HL+7) = 0 : 指定色による塗りつぶし (HL+9) = カラー ; = 1 : タイルパターンによる塗りつぶし ; (HL+8).w = タイルパターンアドレス ; (HL+10) = タイルパターンのバイト数 ; OUT: 無 ; DES: 全 ;(IPL:サポート無し) ; _PAINT EQU 4Ch ;---------------------------------------------------------------------------- ; CIRCL ; グラフィック画面上に円を描画 ; IN : (HL ) = カラーコード ; (HL+1) = 描画機能 ; (HL+2).w = 中心X座標 ; (HL+4).w = 中心Y座標 ; (HL+6).w = 半径 ; (HL+8) = 弦描画フラグ ; Bit0 = 0 : 開始点と中心の間に弦を描かない ; = 1 : 開始点と中心の間に弦を描く ; Bit1 = 0 : 終点と中心の間に弦を描かない ; = 1 : 終点と中心の間に弦を描く ; (HL+ 9).f = 開始角(単精度) ; (HL+14).f = 終了角(単精度) ; (HL+19).f = 比率(単精度) ; OUT: 無 ; DES: 全 ;(IPL:サポート無し) ; _CIRCL EQU 4Dh ;(IPL:サポート無し) _POINT EQU 4Eh ;(IPL:サポート無し) _HCPY EQU 4Fh _DFKEY EQU 50h ;---------------------------------------------------------------------------- ; GINIT ; 画面モードの初期化を行う ; IN : A[Bit5,4] = 00 : 4色モード ; = 01 : 16色モード ; = 1x : 256色モード ; A[Bit6] = 0 : 200ラインモード ; = 1 : 400ラインモード ; A[Bit7] = 0 : 320ドットモード ; = 1 : 640ドットモード ; OUT: 無 ; DES: 全 ;(IPL:サポート無し) ; _GINIT EQU 51h ;---------------------------------------------------------------------------- ; VIEW ; ビューポートの設定 ; IN : (HL) Bit0 = 0 : 消去を行わない ; = 1 : 消去を行う ; Bit1 = 0 : 枠を描画しない ; = 1 : 枠を描画する ; (HL+1) : 消去に使う色 ; (HL+2) : 枠の描画に使う色 ; (HL+3) : 枠の描画に使うfunction ; (HL+4).w : 左端の座標 ; (HL+6).w : 上端の座標 ; (HL+8).w : 右端の座標 ; (HL+10).w : 下端の座標 ; Cy = 0 : ビューポート設定 ; = 1 : ビューポート初期化 ; OUT: 無 ; DES: 全 ;(IPL:サポート無し) ; _VIEW EQU 52h ;---------------------------------------------------------------------------- ; SCREN ; スクリーンモードの設定 ; IN : A = 0 : アクティブ画面の設定 ; L = アクティブ画面 ; A = 1 : 出力グラフィック画面の設定 ; L[Bit0] = 0 : 標準グラフィック画面を出力 ; = 1 : 拡張グラフィック画面を出力 ; L[Bit1] = 0 : 0,2面を出力しない ; = 1 : 0,2面を出力する ; L[Bit2] = 0 : 1,3面を出力しない ; = 1 : 1,3面を出力する ; ※Bit1,2は320x200・16色モード時のみ有効 ; A = 2 : アクティブプレーンの設定 ; L = アクティブプレーン ; A = 3 : 出力プレーンの設定 ; L = 第1出力プレーン ; H = 第1出力プレーン ; A = FFh : スクリーンモード初期化 ; アクティブ画面 = 第0グラフィック画面 ; 出力グラフィック画面 = 標準1面 ; アクティブプレーン = 全プレーン ; 第1出力プレーン = 全プレーン ; 第2出力プレーン = 256色時のみ全プレーン ; OUT: 無 ; DES: 全 ;(IPL:サポート無し) ; _SCREN EQU 53h ;---------------------------------------------------------------------------- ; COLOR ; パレット設定 ; IN : A = 0 : 標準パレットの設定 ; Cy = 0 : パレット設定 ; (HL ) = データ組の数(n) ; (HL+1) = パレット番号 ; (HL+2) = カラーコード ; : ; (HL+2n+1) = パレット番号 ; (HL+2n+2) = カラーコード ; Cy = 1 : 初期化 ; A = 1 : 4096色パレットの設定 ; Cy = 0 : パレット設定 ; (HL ) = データ組の数(n) ; (HL+1) = パレット番号 ; (HL+2) = 緑の輝度 ; (HL+3) = 赤の輝度 ; (HL+4) = 青の輝度 ; : ; (HL+4n+1) = パレット番号 ; (HL+4n+2) = 緑の輝度 ; (HL+4n+3) = 赤の輝度 ; (HL+4n+4) = 青の輝度 ; Cy = 1 : 初期化 ; OUT: 無 ; DES: 全 ;(IPL:サポート無し) ; _COLOR EQU 54h ;---------------------------------------------------------------------------- ; SYMBL ; グラフィック画面に文字列を描画 ; IN : (HL ) = カラーコード ; (HL+1) = 描画機能 ; (HL+2) = 文字数 ; (HL+3).w = 文字列アドレス ; (HL+5) = 縦倍率 ; (HL+6) = 横倍率 ; (HL+7) = 角度コード ; 0 : ノーマル ; 1 : 90度左回転 ; 2 : 180度左回転 ; 3 : 270度左回転 ; (HL+8) = フォントフラグ ; 0 : 8x8 ; 1 : 16x8 ; OUT: 無 ; DES: 全 ;(IPL:サポート無し) ; _SYMBL EQU 55h ;(IPL:サポート無し) _HVIEW EQU 56h ;(IPL:サポート無し) _CREP EQU 57h ;(IPL:サポート無し) _GPUT EQU 58h ;(IPL:サポート無し) _GGET EQU 59h ;(IPL:サポート無し) _PENSE EQU 5Ah ;(IPL:サポート無し) _MOVE EQU 5Bh ;(IPL:サポート無し) _PRI EQU 5Ch ;(IPL:サポート無し) _CBLOC EQU 5Dh ;(IPL:サポート無し) _CRTI EQU 5Eh ;(IPL:サポート無し) _COCNV EQU 5Fh ;(IPL:サポート無し) _HROLL EQU 60h _GRINI EQU 63h ;---------------------------------------------------------------------------- ; TINIT ; テキスト画面の初期化を行う ; IN : Cy = 0 : ; A[Bit0] = 0 : 80桁 ; = 1 : 40桁 ; A[Bit2-1] = 00 : 25行 ; = 01 : 20行 ; = 10 : 12行 ; A[Bit3] = 0 : 8x8ドットフォント使用 ; = 1 : 16x8ドットフォント使用 ; A[Bit4] = 0 : ライン・スクロール・モード ; = 1 : スムース・スクロール・モード ; Cy = 1 : ; A = 0 : ; テキスト画面を8色モードで初期化する ; 80桁のラインスクロールモードとなる ; 400ラスタCRT時には25行・16x8ドットフォント ; 200ラスタCRT時には12行・ 8x8ドットフォント ; A = 0以外: ; テキスト画面を64色モードで初期化する ; 40桁のラインスクロールモードとなる ; 400ラスタCRT時には25行・16x8ドットフォント ; 200ラスタCRT時には12行・ 8x8ドットフォント ; OUT: 無 ; DES: 全 ; _TINIT EQU 64h ;---------------------------------------------------------------------------- ; MSGX ; CRTへ文字列を出力する 制御コードを実行しない ; IN : DE = ASCIIZ文字列アドレス ; OUT: 無 ; DES: AF, IY ; _MSGX EQU 65h ;---------------------------------------------------------------------------- ; TMOD ; テキスト画面のモード設定・変更 ; IN : C = 0 : 漢字モード/疑似グラフィックモードの切り替え ; A = 0 : 疑似グラフィックモード ; A = 0以外: 漢字モード ; C = 1 : ファンクションキーリスト表示のON/OFF ; A = 0 : 表示OFF ; A = 1 : 表示ON ; A = 2 : 表示ON + 時計 ; C = 2 : カーソル点滅ON/OFF ; A = 0 : カーソル点滅OFF ; A = 1 : カーソル点滅ON ; A = 2 : キー入力待ち時のみカーソル点滅ON ; C = 3 : スクロールモード ; A = 0 : ロック ; A = 0以外: アンロック ; C = 4 : ; A = 0 : 文字のバックは透明 ; A = 0以外: 文字のバックは黒 ; C = 5 : ; A = 0 : モノクロ・ディスプレイの画面全体をノーマル表示 ; A = 0以外: モノクロ・ディスプレイの画面全体を反転表示 ; C = 6 : バックグラウンドカラー設定 ; CyをBit8, AをBit7-0として設定する ; C = 7 : ; A = 0 : モノクロ・ディスプレイにグラフィック画面を重ねる ; A = 0以外: モノクロ・ディスプレイにグラフィック画面を重ねない ; OUT: 無 ; DES: 全 ; _TMOD EQU 66h ;---------------------------------------------------------------------------- ; GPCG ; 指定された文字コード/PCGセレクト番号に対応する文字のフォントパターンを ; DEで示すバッファに格納する ; IN : DE = 文字コード ; B = PCGセレクト番号(0-3) ; ┌──────┬─┬───────────┬────┐ ; │DE │B │対象 │バイト数│ ; ├──────┼─┼───────────┼────┤ ; │ 0 - FF │ 0│PCG0 (8x8ドット) │ 8 │ ; │ │ 1│PCG1 (8x8ドット) │ 8 │ ; │ │ 2│PCG2 (8x8ドット) │ 8 │ ; │ │ 3│PCG3 (8x8ドット) │ 8 │ ; │ │他│PCG1-3 (8x8ドット) │ 24 │ ; ├──────┼─┼───────────┼────┤ ; │ 100 - 1FE │ 0│PCG0 (16x8ドット) │ 16 │ ; │ (偶数のみ)│ 1│PCG1 (16x8ドット) │ 16 │ ; │ │ 2│PCG2 (16x8ドット) │ 16 │ ; │ │ 3│PCG3 (16x8ドット) │ 16 │ ; │ │他│PCG1-3 (16x8ドット) │ 48 │ ; ├──────┼─┼───────────┼────┤ ; │ 200 - 2FF │−│ANK ROMCG (8x8ドット) │ 8 │ ; ├──────┼─┼───────────┼────┤ ; │ 300 - 3FF │−│ANK ROMCG (16x8ドット)│ 16 │ ; ├──────┼─┼───────────┼────┤ ; │8140 - EA9E │−│漢字 ROMCG │ 32 │ ; │(SHIFT JIS) │ │(16x16ドット) │ │ ; ├──────┼─┼───────────┼────┤ ; │EC9F - ECFC │−│外字 │ 32 │ ; │ED40 - ED7E │ │(16x16ドット) │ │ ; │ED80 - EDA2 │ │ │ │ ; │(SHIFT JIS) │ │ │ │ ; └──────┴─┴───────────┴────┘ ; OUT: DE = バッファアドレス ; DES: 全 ; _GPCG EQU 67h ;---------------------------------------------------------------------------- ; SPCG ; 指定された文字コード/PCGセレクト番号に対応する外字・PCGに対して ; パターンを設定する ; IN : DE = 文字コード ; B = PCGセレクト番号(0-3) ; DIRARE(1000h-) = パターン ; OUT: 無 ; DES: 全 ; _SPCG EQU 68h ;---------------------------------------------------------------------------- ; TGET ; テキスト画面からデータを読み出す ; IN : L = X座標 ; H = Y座標 ; C = バイト数 ; OUT: C = 取得バイト数 ; DE = バッファアドレス ; DES: 全 ; _TGET EQU 69h ;---------------------------------------------------------------------------- ; TSCRN ; テキストの入出力画面の設定変更を行う ; IN : A[Bit1,0] = 00 : アクティブ画面を変更しない ; = 01 : テキスト画面1をアクティブ画面にする ; = 10 : テキスト画面2をアクティブ画面にする ; A[Bit3,2] = 00 : テキスト表示画面の設定を変更しない ; = 01 : 第1面のみ出力 ; = 10 : 第2面のみ出力 ; = 11 : 第1面・第2面重ね合わせ(第1面優先) ; OUT: 無 ; DES: 全 ; _TSCRN EQU 6Ah ;---------------------------------------------------------------------------- ; TATR ; 表示中の文字の属性を変更する ; IN : C = 0 : 文字の色属性を変更 ; A = --GRBGRB (Bit5-3は64色モード時のみ有効) ; C = 1 : 文字のブリンク属性を変更 ; A = 0 : ノーマル ; = 0以外: ブリンク ; C = 2 : 文字のリバース属性を変更 ; A = 0 : ノーマル ; = 0以外: リバース ; L = 開始X座標 ; H = 開始Y座標 ; E = X方向の長さ ; D = Y方向の長さ ; OUT: 無 ; DES: 全 ; _TATR EQU 6Bh ;---------------------------------------------------------------------------- ; TWID ; テキスト画面の桁数・行数変更 ; IN : A[Bit0] = 0 : 80桁 ; = 1 : 40桁 ; A[Bit2,1] = 00 : 25行 ; = 01 : 20行 ; = 10 : 12行 ; OUT: 無 ; DES: 全 ; _TWID EQU 6Ch ;---------------------------------------------------------------------------- ; TWARE ; テキスト画面のスクロールエリアを設定 ; IN : L = 開始X座標 (0-79/0-39) ; H = 開始Y座標 (0-24/0-19/0-11) ; E = X方向の長さ (1-80/1-40) ; D = Y方向の長さ (1-25/1-20/1-12) ; OUT: 無 ; DES: 全 ; _TWARE EQU 6Dh ;---------------------------------------------------------------------------- ; TDARE ; テキスト画面の物理的表示領域を設定 ; IN : L = 開始X座標 (0-79/0-39) ; H = 開始Y座標 (0-199) ; E = X方向の長さ (0-80/0-40) ; D = Y方向の長さ (0-200) ; OUT: 無 ; DES: 全 ; _TDARE EQU 6Eh ;---------------------------------------------------------------------------- ; CMOV ; カーソル移動 ; IN : L = X座標 ; H = Y座標 ; OUT: 無 ; DES: 全 ; _CMOV EQU 6Fh ;---------------------------------------------------------------------------- ; TCLR ; テキスト画面のクリア ; IN : A[Bit1,0] = 00 : テキスト画面全体をクリア ; = 01 : アクティブ画面の文字スクロールエリア内をクリア ; = 10 : アクティブ画面の文字スクロールエリア内の指定領域をクリア ; = 11 : アクティブ画面の指定領域をクリア ; A[Bit7] = 0 : 画面クリア後、カーソルをスクロールエリアの左上に移動 ; = 1 : 画面クリア後、カーソル位置を変えない ; L = 開始X座標 (0-79/0-39) ; H = 開始Y座標 (0-24/0-19) ; E = X方向の長さ (1-80/1-40) ; D = Y方向の長さ (1-25/1-20) ; OUT: 無 ; DES: 全 ; _TCLR EQU 70h ;---------------------------------------------------------------------------- ; TSCRL ; テキスト画面の文字スクロールエリアをスクロールする ; IN : A = 0 : 上方向にスクロール ; = 0以外: 下方向にスクロール ; OUT: 無 ; DES: 全 ; _TSCRL EQU 71h ;---------------------------------------------------------------------------- ; CRPUT ; メモリに格納されているテキストデータを指定された矩形領域に表示 ; IN : HL = (略) ; OUT: 無 ; DES: 全 ; _CRPUT EQU 72h ;---------------------------------------------------------------------------- ; CRGET ; 指定された矩形領域のテキストデータをメモリに格納 ; IN : HL = (略) ; OUT: 無 ; DES: 全 ; _CRGET EQU 73h ;---------------------------------------------------------------------------- ; SETCG ; CGROMのフォントパターンをPCG0にロードする ; IN : A = 0 : MZ-2500用CGフォント(8x8ドット) ; = 0以外: MZ-2000/80B用CGフォント ; OUT: 無 ; DES: 全 ; _SETCG EQU 74h ;---------------------------------------------------------------------------- ; ?TEXT ; 指定座標の文字種類を返す ; IN : L = X座標 ; H = Y座標 ; OUT: Cy = 0 : ANK/PCG ; = 1 : 漢字 ; Zf = 1 : 漢字左 ; = 0 : 漢字右 ; DES: 全 ; _?TEXT EQU 75h ;---------------------------------------------------------------------------- ; CURBL ; タイマ割り込みによるカーソル点滅制御 ※ユーザー使用不可 ; IN : A = 0 : カーソル位置の文字/カーソル パターンを反転 ; = 1 : カーソル点滅をEnable ; = 2 : カーソル点滅をDisable ; = 3 : カーソル点滅モードにより、カーソル点滅Enable/Disable ; OUT: 無 ; DES: 全 ; _CURBL EQU 76h ;---------------------------------------------------------------------------- ; TSUB ; テキスト画面コントロール ※ユーザー使用不可 ; IN : C = 0 : 最下行のコントロール ; B = 00h : ファンクションキーリスト表示 ; = FEh : 時刻表示の更新 ; = FFh : ファンクションキーリスト消去 ; = 他 : ファンクションキーリスト表示(SHIFT) ; C = 1 : カーソル位置の1文字Del ; C = 2 : 指定位置の文字パターン取得 ; L = X座標 ; H = Y座標 ; DE = バッファアドレス ; C = 3 : 行接続コントロール ; B = 00h : カーソル行と次の行を論理的に切り離す ; = 01h : カーソル行と次の行を論理的に接続する ; = FFh : カーソル行の行接続状態を返す ; OUT: C = 2 : C = パターンバイト数 ; C = 3 : A = 0 : 切り離されている ; = 0以外: 接続している ; DES: 全 ; _TSUB EQU 77h ;---------------------------------------------------------------------------- ; RS232 ; RS-232C制御 ; IN : A = 0 : RSPARM RS-232C パラメータ設定 ; 1 : RSCTRL OPEN時もしくは送信時におけるコントロール内容設定 ; 2 : RSOPEN RS-232Cのチャネルをオープン ; 3 : RSCLOS RS-232Cのチャネルをクローズ ; 4 : RSSEND データ送信 ; 5 : RSRCV データ受信 ; 6 : RSERRS エラー状態をリセット ; 7 : RSRS 制御信号RS(RTS)のON/OFF ; 8 : RSER 制御信号ER(DTR)のON/OFF ; 9 : RSRR 制御信号RRのON/OFF ; A : RSBRK BREAK送出 ; B : RSGNRD 制御信号の状態を取得 ; C : RSBFCL 受信バッファをクリア ; D : RSLOC 受信バッファ内の有効データ数をカウント ; _RS232 EQU 78h ;---------------------------------------------------------------------------- ; RTC ; リアルタイムクロック制御 ; _RTC EQU 79h ;---------------------------------------------------------------------------- ; MOUSE ; マウスコントロール ; _MOUSE EQU 7Ah ;---------------------------------------------------------------------------- ; IOSUB ; ファイル操作サブファンクション ; IN : A = 0 : ; A = 1 : ; ; ; _IOSUB EQU 7Bh ;---------------------------------------------------------------------------- ; DVCAL ; ROMバンクをコールする ; IN : IX = CALLするアドレス ; MR01 = 01h, MR02 = 34h, MR03 = 35h の状態でCALLが行われる ; _DVCAL EQU 7Ch ;---------------------------------------------------------------------------- ; FDRES ; FDのリセットを行う ; _FDRES EQU 7Dh ;---------------------------------------------------------------------------- ; CMT ; CMT制御 ; _CMT EQU 7Eh ;---------------------------------------------------------------------------- ; VOICE ; ボイスボード制御 ;(IPL:サポート無し) ; _VOICE EQU 7Fh