その他
PC-6001/mkII/6601用拡張漢字ROM PC-6601-01 デコード部分 通常PC-6001のI/Oポートは8Bitなのですがコレは16Bit(256KBit*1ワード)として制御します。 また使用ポートは0FCH-0FFHを使用しています。 0FCH:Bit7=漢字ROMのアクセス許可 0=許可,1=禁止 Bit6-0=漢字ROMの上位アドレス 0FDH:漢字ROMの下位データ?(8Bit) 0FEH:漢字ROMの上位データ?(8Bit) 0FFH:漢字ROMを読み出すときに000H、読み終わったら0FFH また、制御はPC-6601はKANJI文でサポートしており、PC-6001/mkIIはソフトを組まないといけません。 PC−6001のポート 080H:RS−232C用8251 データ 081H:RS−232C用8251 コントロール 090H:8225 PA (入出力 8049のB7−B0) 091H:8225 PB (出力 プリンタデータ D7−D0) 092H:8225 PC d7:OBFA (入力)8049の/INT d6:ACKA (出力)8049の/RD d5:IBFA (入力)8049のT0 d4:STBA (出力)8049の/WR d3:INTRA (入力)8049??? d2:/CGSW (出力)1=CG Off、0=CG On d1:/CRTKILL(出力)1=表示する、0=表示しない d0:PRT /STB(出力) 093H:8225 CW 0A0H:PSG レジスタ 0A1H:PSG リードデータ 0A2H:PSG ライトデータ 0A3H:PSG インアクティブ 0B0H:システム d7: d6: d5: d4: d3:CMT モーター (出力)1=On、0=Off d2:VRAMアドレス (出力) 00=0C000H d1:VRAMアドレス (出力) 01=0E000H 10=08000H 11=0A000H d0:タイマ割り込み (出力)1=On、0=Off 0B0H:PRT BUSY d7:− d6:− d5:− d4:− d3:− d2:− d1:1=READY、0=BUSY d0:− 0D0H:FDD PC−6031 8255 PA 0D1H:FDD PC−6031 8255 PB 0D2H:FDD PC−6031 8255 PC 0D3H:FDD PC−6031 8255 CW
考え中のモノ(VDP) 家にある部品でできるだけ手を抜くとこんな感じになるかなと思っただけで 当然未完成です。 上の回路図は某ベクタースキャンのジョイスティックですが動作確認していません またコネクタ部分を加工しないと 本体にささりません 参考資料モドキっていうことでこれを元に作って本体を壊しても私は何の責任も持ちません。 それと以前の回路図には配線する為のピンが表記されていませんでした(Mr.Tさん御指摘ありがとう) でもJOYSTICKを作るつもりですか?
VIC−1001 6560のレジスタ $9000:CR0 d7:インターレーススイッチ 1=On、0=Off d6−0:テキストエリアの水平位置 $9001:CR1 テキストエリアの垂直位置 $9002:CR2 d7:カラーVRAMのA9 d6−0:テキスト文字数 $9003:CR3 d7:ラスタースキャンの位置 D0 d1−6:テキストの列 d0:文字モード 1=8*16ドット、0=8*8ドット $9004:CR4 d7:ラスタースキャンの位置 D8 d6:ラスタースキャンの位置 D7 d5:ラスタースキャンの位置 D6 d4:ラスタースキャンの位置 D5 d3:ラスタースキャンの位置 D4 d2:ラスタースキャンの位置 D3 d1:ラスタースキャンの位置 D2 d0:ラスタースキャンの位置 D1 $9005:CR5 d7:VRAMのA12 d6:VRAMのA11 d5:VRAMのA10 d4:VRAMのA9 d3:キャラクタジェネレータのセレクト3 d2:キャラクタジェネレータのセレクト2 d1:キャラクタジェネレータのセレクト1 d0:キャラクタジェネレータのセレクト0 $9006:CR6 ライトペンの水平ラッチポジション $9007:CR7 ライトペンの垂直ラッチポジション $9008:CR8 POTX $9009:CR9 POTY $900A:CRA d7:サウンドジェネレータ1のスイッチ 1=On、0=Off d6−0:サウンドジェネレータ1の周波数 $900B:CRB d7:サウンドジェネレータ2のスイッチ 1=On、0=Off d6−0:サウンドジェネレータ2の周波数 $900C:CRC d7:サウンドジェネレータ3のスイッチ 1=On、0=Off d6−0:サウンドジェネレータ3の周波数 $900D:CRD d7:ノイズジェネレータのスイッチ 1=On、0=Off d6−0:ノイズジェネレータの周波数 $900E:CRE d7−4:マルチカラーモードの補助色 d3−0:オーディオボリューム $900F:CRF d7−4:バックグラウンドカラー d3:リバーススイッチ 1=通常、0=反転 d2−0:ボーダーカラー VRAM(スクリーンRAM) VICはRAMの容量によってVRAMの位置の設定が変ります。 拡張RAM(3KRAMを除く)を付けていない場合は$1E00(7680)に設定されます。 そこにキャラクタジェネレータで登録されているコードを書きます。 またキャラクタジェネレータとVRAMは重複してもかまいません。 ただし、重なっている部分にデータを書き込むと画面にもコードして現れるので注意が必要です。 また、カラーVRAMでデータ(0−8)をセットするとVRAMに色がつけられます。 アドレスは設定で$9600にセットされています。 VRAMアドレス:000* ***0|0000 0000B ;*=CR5のd7−4 カラーVRAMアドレス:1001 01*0|0000 0000B ;*=CR2のd7 キャラクタージェネエータセレクト:0000B=$8000 0001B=$8400 0010B=$8800 0011B=$8C00 1000B= − 1001B= − 1010B= − 1011B= − 1100B=$1000 1101B=$1400 1110B=$1800 1111B=$1C00 よくBASICプログラムでは$9005:F0から$9005:FFに切り換えているものがありますが、 これはVRAMは$1E00で、キャラクタジェネレータを$8000から VRAMは$1E00で、キャラクタジェネレータを$1C00にしています。 POKE36869,255 POKE36869,240 また、キャラクタジェネレータが$1C00からすると範囲は$1C00−$2BFFまでになります。 更にVRAMは$1E00から$1FFFで$2000以降は空き領域になります(拡張RAM,+3KRAMの場合) つまりキャラジェネはRAM領域の$1C00−$1DFFの$200で$40(64)個の定義が出来ます。
主なMSX1 BIOSルーチン RST・割り込み関係 00000H:CHKRAM RAMのチェックとメモリスロットの状態をチェック 初期化ルーチンへジャンプします。 入力 :なし Out:なし 変化:すべて 00004H:キャラクタジェネレータ(フォント)の下位アドレス 00005H:キャラクタジェネレータ(フォント)の上位アドレス 00006H:VDPアクセス リードポート 00007H:VDPアクセス ライトポート 00008H:SYNCHR HLの指しているデータと第1バイトと比較します。 第1バイトはRST 008Hの後すぐにくるデータです。 <例>0C000Hのデータと’A’を比較する LD HL,0C000H RST 008H DB ’A’ 比較が違っていればSyntax errorを出し 比較が同じならCHRGTR(0010H)へジャンプします。 HLは+1されます。 BASIC用 入力:HL=データポインタ 第1バイト=比較するデータ 出力:HL=データポインタ+1 Cf=1 データが数字 Zf=1 ステートメントの終わり(エンドマーク(000H)か’:’(03AH)) 変化:すべて 0000C:RDSLT Aで指定されるメモリスロットから、メモリの内容を読み込みます。 DI(割り込み禁止)が掛かるので場合によっては このルーチンの実行後EI(割り込み許可)を実行する 入力:HL=読み込むアドレス A=スロットデータ d7:F 1=拡張スロット、0=基本スロット d6:− d5:− d4:− d3:E 拡張スロット D1 d2:E 拡張スロット D0 d1:P 基本スロット D1 d0:P 基本スロット D0 出力:A=読み込んだデータ 変化:AF,BC,DE 00010H:CHRGTR BASICテキストの次の文字、又は中間言語を取り込む HLにアドレス、Aには文字が入る 入力:HL=アドレス 出力:HL=アドレス+1 A=文字またはトークン Zf=1ステートメントの終わり 変化:AF,HL 00014H:WRSLT Aで指定されるメモリスロットのメモリにEの内容を書き込み。 DI(割り込み禁止)が掛かるので場合によっては このルーチンの実行後EI(割り込み許可)を実行する 入力:HL=書き込むアドレス A=スロットデータ d7:F 1=拡張スロット、0=基本スロット d6:− d5:− d4:− d3:E 拡張スロット D1 d2:E 拡張スロット D0 d1:P 基本スロット D1 d0:P 基本スロット D0 E=書き込むデータ 出力:なし 変化:AF,BC,D 00018H:OUTDO 現在使用中のデバイスへデータをおくります。 入力:A PRTFLG(0F416H)=000H以外ならプリンタ出力 PTRFIL(0F864H)=000H以外ならPTRFILで指定するファイルへ出力 出力:なし 変化:なし 0001CH:CALSLT インタースロットコール IY上位の値によりメモリスロットを選び、メモリ上のプログラムをコールします。 入力:IYの上位=スロットデータ d7:F 1=拡張スロット、0=基本スロット d6:− d5:− d4:− d3:E 拡張スロット D1 d2:E 拡張スロット D0 d1:P 基本スロット D1 d0:P 基本スロット D0 IX=コールするアドレス 出力:不明(コールするルーチンによる) 変化:不明(コールするルーチンによる) 00020H:DCOMPR HLとDEの比較 入力:HL=データ1 DE=データ2 出力:Cf=1 HL<DE Zf=1 HL=DE 変化:AF 00024H:ENASLT Aで指定されるメモリスロットを使用可能にします。 入力:HL=使用するアドレス A=スロットデータ d7:F 1=拡張スロット、0=基本スロット d6:− d5:− d4:− d3:E 拡張スロット D1 d2:E 拡張スロット D0 d1:P 基本スロット D1 d0:P 基本スロット D0 出力:なし 変化:すべて 00028H:GETYPR FACのタイプを返します。 入力:FAC 出力: Sf=1 整数型 Zf=1 文字列型 P/Vf=0 単精度 Cf=0 倍精度 変化:AF 0002BH:IDバイト0 d7:割り込み周期 1=1/50秒、0=1/60秒 d6:Y2 Y=000:年−月−日 d5:Y1 Y=001:月−日−年 d4:Y0 Y=002:日−月−年 d3:C3 C=0000 日本キャラクタ d2:C2 C=0001 インターナショナル d1:C1 d0:C0 0002CH:IDバイト1 d7:BV3 BV=000 日本版BASIC d6:BV2 BV=001 インターナショナル BASIC d5:BV1 d4:BV0 d3:K3 K=0000 日本のキーボード d2:K2 K=0001 インターナショナルのキーボード d1:K1 K=0002 フランスのキーボード d0:K0 K=0003 イギリスのキーボード K=0004 ドイツのキーボード 00030H:CALLF スロットを切り替えてプログラムコールします。 第1バイトはRST 008Hの後すぐにくるデータです。 入力:第1バイト=コールするスロットデータ d7:F 1=拡張スロット、0=基本スロット d6:− d5:− d4:− d3:E 拡張スロット D1 d2:E 拡張スロット D0 d1:P 基本スロット D1 d0:P 基本スロット D0 第2バイト=コールスするアドレス下位 第3バイト=コールスするアドレス上位 出力:不明(コールするルーチンによる) 変化:不明(コールするルーチンによる) 00038H:KEYINT INTベクタです(NTSC=1/60秒毎、PAL=1/50秒毎) 入力:なし 出力:なし 変化:なし −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− I/O初期設定 0003BH:INIIO I/Oデバイスの初期化を行います。 入力:なし 出力:なし 変化:すべて 0003EH:INIFNK ファンクションキーの初期化を行います。 入力:なし 出力:なし 変化:すべて −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− VPDアクセス 00041H:DISSCR 画面を表示しない 入力:なし 出力:なし 変化:AF,BC 00044H:ENASCR 画面を表示する 入力:なし 出力:なし 変化:AF,BC 00047H:WRTVDP VDPレジスタ 書き込み 入力:C=VDPレジスタ B=データ 出力:なし 変化:AF,BC 0004AH:RDVRM 1バイト VRAMリード 入力:HL=VRAMアドレス 出力:A=VRAMの内容 変化:AF 0004DH:WRTVRM 1バイト VRAMライト 入力:HL=VRAMアドレス A=データ 出力:なし 変化:AF 00050H:SETRD VRAMを読み込み状態にする 入力:HL 出力:なし 変化:AF 00053H:SETWRT VRAMを書き込み状態にする 入力:HL 出力:なし 変化:AF 00056H:FILRVM VRAM FILL 入力:HL=VRAMアドレス BC=長さ A=データ 出力:なし 変化:AF,BC 00059H:LDIRMV VRAM−>メモリのブロック転送 入力:HL=VRAMアドレス DE=アドレス BC=長さ 出力:なし 変化:すべて 0005CH:LDIRVM メモリ−>VRAMのブロック転送 入力:HL=アドレス DE=VRAMアドレス BC=長さ 出力:なし 変化:すべて 0005FH:CHGMOD VDPのモードを設定します。 入力:A=0 テキストモード40×24 1 テキストモード32×24 2 ハイレゾリュージョンモード 3 マルチカラーローレゾリュージョンモード 出力:なし 変化:すべて 00062H:CHGCLR スクリーンの色を設定します。 入力:FORCLR(0F3E9H)=フォアグラウンドカラー BAKCLR(0F3EAH)=バックグラウンドカラー BDRCLR(0F3EBH)=ボーダーカラー 出力:なし 変化:すべて 00066H:NMI NMIベクタです(使用していません) 入力:なし 出力:なし 変化:なし 00069H:CLRSPR スプライトの初期化、全てのスプライト・パターンをヌルで埋め、 カラーはフォアグラウンドと同一、スプライトの垂直位置は209(表示をしない)に設定します。 入力:SCRMOD(0FCAFH)=スクリーンモード 出力:なし 変化:すべて 0006CH:INITXT テキストモード画面(40×24)の初期化 VDP及びワークエリアの設定を行います。 入力:LINL40(0F3AEH)=1行の幅 TATNAM(0F3B3H)=パターンネーム・テーブル TXTCGP(0F3B7H)=パターンジェネレータ・テーブル 出力:なし 変化:すべて 0006FH:INIT32 テキストモード画面(32×24)の初期化 VDP及びワークエリアの設定を行います。 入力:T32NAM(0F3BDH)=パターンネーム・テーブル T32COL(0F3BFH)=カラーテーブル T32CGP(0F3C1H)=パターンジェネレータ・テーブル T32ATR(0F3C3H)=スプライトアトリビュート・テーブル T32PAT(0F3C5H)=スプライトジェネレータ・テーブル 出力:なし 変化:すべて 00072H:INIGRP ハイレゾリューションモード画面の初期化 VDP及びワークエリアの設定を行います。 入力:GRPNAM(0F3C7H)=パターンネーム・テーブル GRPCOL(0F3C9H)=カラーテーブル GRPCGP(0F3CBH)=パターンジェネレータ・テーブル GRPATR(0F3CDH)=スプライトアトリビュート・テーブル GRPPAT(0F3CFH)=スプライトジェネレータ・テーブル 出力:なし 変化:すべて 00075H:INIMLT マルチカラー・ローレゾリューションモード画面の初期化 VDP及びワークエリアの設定を行います。 入力:MLTNAM(0F3D1H)=パターンネーム・テーブル MLTCOL(0F3D3H)=カラーテーブル MLTCGP(0F3D5H)=パターンジェネレータ・テーブル MLTATR(0F3D7H)=スプライトアトリビュート・テーブル MLTPAT(0F3D9H)=スプライトジェネレータ・テーブル 出力:なし 変化:すべて 00078H:SETTXT テキストモード画面(40×24)の初期化 VDPのみ設定を行います。 入力:LINL40(0F3AEH)=1行の幅 TATNAM(0F3B3H)=パターンネーム・テーブル TXTCGP(0F3B7H)=パターンジェネレータ・テーブル 出力:なし 変化:すべて 0007BH:SETT32 テキストモード画面(32×24)の初期化 VDPのみ設定を行います。 入力:T32NAM(0F3BDH)=パターンネーム・テーブル T32COL(0F3BFH)=カラーテーブル T32CGP(0F3C1H)=パターンジェネレータ・テーブル T32ATR(0F3C3H)=スプライトアトリビュート・テーブル T32PAT(0F3C5H)=スプライトジェネレータ・テーブル 出力:なし 変化:すべて 0007EH:SETGRP ハイレゾリューションモード画面の初期化 VDPのみ設定を行います。 入力:GRPNAM(0F3C7H)=パターンネーム・テーブル GRPCOL(0F3C9H)=カラーテーブル GRPCGP(0F3CBH)=パターンジェネレータ・テーブル GRPATR(0F3CDH)=スプライトアトリビュート・テーブル GRPPAT(0F3CFH)=スプライトジェネレータ・テーブル 出力:なし 変化:すべて 00081:SETMLT マルチカラー・ローレゾリューションモード画面の初期化 VDPのみ設定を行います。 入力:MLTNAM(0F3D1H)=パターンネーム・テーブル MLTCOL(0F3D3H)=カラーテーブル MLTCGP(0F3D5H)=パターンジェネレータ・テーブル MLTATR(0F3D7H)=スプライトアトリビュート・テーブル MLTPAT(0F3D9H)=スプライトジェネレータ・テーブル 出力:なし 変化:すべて 00084H:CALPAT スプライト・パターン・テーブルのアドレスを返します。 入力:A=スプライトNo.nn 出力:HL=スプライト・パターン・テーブル・アドレス 変化:AF,DE,HL 00087H:CALPAT スプライト・属性・テーブルのアドレスを返します。 入力:A=スプライトNo.nn 出力:HL=スプライト・属性・テーブル・アドレス 変化:AF,DE,HL 0008AH:GSPSIZ 現在のスプライト・サイズを返します。 入力:なし 出力: A=スプライト・サイズ(バイト数) Cf=1 16×16 0 16×16以外 変化:AF 0008DH:GRPPRT グラフィック画面に文字を表示します。 入力:A=キャラクタコード 出力:なし 変化:なし −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− PSGアクセス 00090H:GICINI PSGの初期化、PLAY文の初期化を行います。 入力:なし 出力:なし 変化:すべて 00093H:WRTPSG PSGレジスタにデータを書き込みます。 入力:A=PSG R#nn E=データ 出力:なし 変化:なし 00096H:RDPPSG PSGレジスタの内容を読み込みます。 入力:A=PSG R#nn 出力:A= PSG R#nnの内容 レジスタ なし 00099H:STRTMS バックグラウンド処理されるPLAY文の状態をチェックします。 実行中でなければ PLAY文の実行を開始します。 入力:なし 出力:なし 変化:すべて −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− コンソールアクセス 0009CH:CHSNS キーボード・バッファの状態をチェックを行います。 入力:なし 出力:Zf=1 バッファに文字が無い(空) 0 バッファに文字がある 変化:AF 0009FH:CHGET 1文字入力 (入力待ちあり) キーボードからキャラクタを取り込みます。 入力があるまで待ちます。 入力:なし 出力:A=入力されたキャラクタコード 変化:AF 000A2H:CHPUT 1文字表示 画面に1文字出力を行います。 CSRX,CSRYで位置を指定、コールすると次の位置が入ります。 入力:A=キャラクタコード CSRX CSRY 出力:なし 変化:なし 000A5H:LPTOUT 1文字プリンタ出力 プリンタに1文字出力を行います。 入力:A=キャラクタコード 出力:Cf=エラー(アボート) 変化:F 000A8H:LPTSTT プリンタステータスをチェック 入力:なし 出力:A=0FFH、Zf=1ならREADY A=000H、Zf=0ならNot READY 000ABH:CNVCHR グラフィック・ヘッダーバイトとコンバートコードのチェックを行います。 入力:A=キャラクタコード 出力:Cf=1、Zf=1 コンバートされたグラフィックコード Cf=1、Zf=0 コンバートされていない Cf=0 グラフィック・ヘッダーバイト 変化:AF 000AEH:PINLIN CR,STOPが入力される以前の文字列を、 常に画面の左端よりバッファに取り込みます。 入力:なし 出力:HL=バッファの先頭アドレス−1 Cf=1 STOPキーが押された 0 STOPキーが押されていない 変化:すべて 000B1H:INLIN CR,STOPが入力される以前の文字列を、 常に現在のカーソル位置から右側の文字列を バッファに取り込みます。 入力:なし 出力:HL=バッファの先頭アドレス−1 Cf=1 STOPキーが押された 0 STOPキーが押されていない 変化:すべて 000B4H:QINLIN ”? ”(03FH,020H)を出力してINLINへジャンプします。 入力:なし 出力:HL=バッファの先頭アドレス−1 Cf=1 STOPキーが押された 0 STOPキーが押されていない 変化:すべて 000B7H:BREAKX CTRL+STOPキーが押されているかチェックを行います。 割り込みを禁止されているときに使用します。 入力:なし 出力:Cf=1 CTRL+STOPキーが押されている 0 CTRL+STOPキーが押されていない 変化:AF 000C0H:BEEP ブザーを鳴らします 入力:なし 出力:なし 変化:すべて 000C3H:CLS 画面をクリアします 入力:なし 出力:なし 変化:AF,BC,DE 000C6H:POSIT カーソル位置を指定します。 入力:H=カーソルのX座標 L=カーソルのY座標 出力:なし 変化:AF 000C9H:FNKSB ファンクション・キーの表示をチェックし FNKFLG(0FBCEH)がアクティブなら表示 アクティブでなければ消します。 入力:FNKFLG(0FBCEH) 出力:なし 変化:すべて 000CCH:ERAFNK ファンクション・キーの表示を消します。 入力:なし 出力:なし 変化:すべて 000CFH:DSPFNK ファンクション・キーの表示を行います。 入力:なし 出力:なし 変化:すべて 000D2H:TOTEXT 画面をテキストモードにします。 BASICインタプリタ用 入力:なし 出力:なし 変化:すべて −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− ゲームI/Oアクセス 000D5H:GTSTCK ジョイスティックの状態を返します。 入力:A=0 キーボードのカーソルキー 1 ジョイスティック#1 2 ジョイスティック#2 出力:A=ジョイスティックの方向 変化:すべて 000D8H:GTTRIG トリガボタンの状態を返します。 入力:A=0 スペースキー 1 ジョイスティック#1−A 2 ジョイスティック#1−B 3 ジョイスティック#2−A 4 ジョイスティック#2−B 出力:A=000H トリガボタンは押されていない 0FFH トリガボタンは押されている 変化:AF 000DBH:GTPAD タッチパッドの状態を返します。 入力:A=タッチパッドの番号(0−7) 出力:A=現在の値 変化:すべて 000DEH:GTPDL パドルの状態を返します。 入力:A=パドルの番号(1−12) 出力;A=パドルの値 レジスタ すべて −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− カセットテープアクセス 000E1H:TAPION モーターONの後、ヘッダ・ブロックを読み込みます。 入力:なし 出力:Cf=1 エラー(アボート) 変更:すべて 000E4H:TAPIN CMT1バイト リード テープからデータを読み込みます。 入力:なし 出力:A=入力データ Cf=1 エラー(アボート) 変化:すべて 000E7H:TAPIOF テープからの読み込みを停止します。 入力:なし 出力:なし 変化:なし 000EAH:TAPOON モーターONの後、ヘッダ・ブロックを書き込みます。 入力:A=0 ショート・ヘッダ 0以外 ロング・ヘッダ 出力:Cf=1 エラー(アボート) 変化:すべて 000EDH:TAPOUT CMT1バイト ライト テープにデータを書き込みます。 入力:A出力データ 出力:Cf=1 エラー(アボート) 変化:すべて 000F0H:TAPOOF テープへの書き込みを停止します。 入力:なし 出力:Cf=1 エラー(アボート) 変化:すべて 000F3H:STMOTR モーターの状態を設定します。 入力:A=000H モーターストップ 001H モーターオン 0FFH 現在の状態と反転する 出力:なし 変化:AF −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− BASICインタプリタ専用ルーチン 000F6H:LFTQ キューの残りバイトを返します。 000F9H:PUTQ キューへ1バイト送ります。 000FCH:RIGHTC ピクセルを右へ1つ動かします。 000FFH:LEFTC ピクセルを左へ1つ動かします。 00102H:UPC ピクセルを上へ1つ動かします。 00105H:TUOC ピクセルを上へ1つ動かします。 00108H:DOWNC ピクセルを下へ1つ動かします。 0010BH:TDOWNC ピクセルを下へ1つ動かします。 0010EH:SCALXY XYスケールを調整します。 00111H:MAPXYC 実アドレスの配置を調整します。 00114H:FETCHC 現在の実アドレスとパターンをフェッチします。 入力:なし 出力:HL=実アドレス A=マスクパターン 変化:AF,HL 00117H:STOREC 現在の実アドレスとパターンをストアします。 入力:HL=実アドレス A=マスクパターン 出力:なし 変化:なし 0011AH:SETATR 属性バイトを書き込みます。 0011DH:READC ピクセルの属性を読み込みます。 00120H:SETC ピクセルの属性を書き込みます。 00123H:NSETCX 水平方向に線を描きます。 00126H:GTASPC アスペクト比を返します。 入力:なし 出力:DE=256/アスペクト比 HL=256×アスペクト比の整数部分 00129H:PNTINI PAINT文の初期化を行います。 0012CH:ピクセルの右方向移動 0012FH:ピクセルの左方向移動 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− その他のルーチン 00132H:CHGCAP CAPランプの制御 入力:A=0 ランプを消灯 0以外 ランプの点灯 出力:なし 変化:AF 00135H:CHGSND 1Bitサウンドポートの制御を行います。 入力:A=0 OFF 0以外 ON 出力:なし 変化:AF 00138H:RSLREG 基本スロット・レジスタの状態を読み込みます。 入力:なし 出力:A=スロット・レジスタ 状態:A 0013BH:WSLREG 基本スロット・レジスタにデータを書き込む 入力:A=スロット・データ 出力:なし 変化:なし 0013EH:RDVDP VDPステータス・レジスタを読込みます。 入力:なし 出力:A=VDPステータス・レジスタ 変化:A 00141H:SNSMAT キーボード・マトリクスから指定したKEY#nnの値を読み込みます。 入力:A=KEY#nn 出力:A=KEY#nnのデータ (1=押されていない、0=押されている) 変化:AF 00144H:PHYDIO マスストレージデバイス(拡張用)の制御を行います。 入力:拡張ルーチンによる 出力:拡張ルーチンによる 変化:拡張ルーチンによる 00147H:FORMAT マスストレージデバイス(拡張用)の初期化を行います。 入力:拡張ルーチンによる 出力:拡張ルーチンによる 変化:拡張ルーチンによる 0014AH:ISFLIO デバイスI/Oの使用をチェック BASICインタープリタ用 入力:なし 出力:A=0 使用中 0以外 使用をしていない 変化:AF 0014DH:OUTDLP プリンタ出力 LPTOUTとの相違点 TABはスペースに変換 MSX仕様でないプリンタへ、ひらがなやグラフィックキャラクターを変換 エラー(アボート)になったら”Device I/O error”を出力 入力:A=プリント・データ 出力:なし 変化:F 00150H:GETVCP バックグランドでサウンド出力を行います。 BASICインタープリタ用 00153H:GETVC2 バックグランドでサウンド出力を行います。 BASICインタープリタ用 00156H:KILBUF キーボード・バッファをクリアします。 入力:なし 出力:なし 変化:HL 00159H:CALBAS BASICのあるスロットを強制コールします。 入力:IX=コールするアドレス 出力:ルーチンによる 変化:ルーチンによる −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− CP/M システム・コール一覧表 0(000H) システム・リセット ・システムがリセットされる(BOOTと同じ) 入力:なし 出力:なし 1(001H) CON:(コンソール) からの入力 入力:なし 出力:A=アスキー 2(002H) CON:(コンソール)への出力 入力:E=アスキー 出力:なし 3(003H) RDR:(リーダ)からの入力 入力:なし 出力:A=アスキー 4(004H) PUN:(パンチ)への出力 入力:E=アスキー 出力:なし 5(005H) LST:(リスト)への出力 入力:E=アスキー 出力:なし 6(006H) ダイレクト・コンソール入出力 入力:コンソール入力 E=0FFH コンソール出力 E=アスキー(無い場合 000H) 出力:コンソール入力 A=アスキー コンソール出力 なし 7(007H) I/Oバイト取り出し 入力:なし 出力:A=I/O バイト 8(008H) I/Oバイト・セット 入力:E=I/O バイト 出力:なし 9(009H) 文字列プリント 入力:DE=文字列アドレス(エンドマーク'$') 出力:なし 10(00AH) コンソール・バッファ読み込み 入力:DE=バッファ・アドレス 出力:バッファ=入力文字数、入力文字 11(00BH) CON:(コンソール)入力ステータス 入力:なし 出力:A=0FFH 入力あり 000H 入力なし 12(00CH) バージョンNoの取り出し 入力:なし 出力:H=001H=MP/M 000H=CP/M L=バージョンNo 13(00DH) ディスク・システム・リセット ・システムの再読み込みなしでディスク交換時に使用 入力:なし 出力:なし 14(00EH) ディスク・ドライブ選択 ・カレント・ディスク変更 入力:E=ドライブNo. 出力:なし 15(00FH) ファイル・オープン 入力:DE=FCBアドレス 出力:A=ディレクトリコード(0FFH ファイル未定義) 16(010H) ファイル・クローズ 入力:DE=FCBアドレス 出力:A=ディレクトリコード(0FFH ファイル未定義) 17(011H) 最初のファイル名サーチ 入力:DE=FCBアドレス 出力:A=ディレクトリコード(0FFH ファイル未定義) 18(012H) 次のファイル名サーチ 入力:なし 出力:A=ディレクトリコード(0FFH ファイル未定義) 19(013H) ファイル削除 入力:DE=FCBアドレス 出力:A=ディレクトリコード(0FFH ファイル未定義) 20(014H) シーケンシャル・リード 入力:DE=FCBアドレス 出力:A=エラーコード(000H エラーなし) (0FFH エンド・オブファイル) 21(015H) シーケンシャル・ライト 入力:DE=FCBアドレス 出力:A=エラーコード(000H エラーなし) (0FFH ディスク・フル) 22(016H) ファイル作成 入力:DE=FCBアドレス 出力:A=ディレクトリ・コード(0FFH ディレクトリ・フル) 23(017H) ファイル名変更 入力:DE=FCBアドレス 出力:A=ディレクトリ・コード(0FFH ファイル未定義) 24(018H) ログイン・ベクトル取り出し ・ディスク・ドライブの状況 入力:なし 出力:HL=ログイン・ベクトル 25(019H) カレント・ディスクNo.の取り出し 入力:なし 出力:A=カレント・ディスクNo. 26(01AH) DMAアドレスセット 入力:DE=DMAアドレス 出力:なし 27(01BH) アロケーション・アドレスの取り出し ・システム変更 入力:なし 出力:HL=アロケーション・ベクトル・アドレス 28(01CH) ライト・プロテクト ・カレンント・ディスクを読み込み専用にする 入力:なし 29(01DH) R/Oベクトルの取り出し ・読み出し専用になっているディスク・ドライブの情報 入力:なし 出力:HL=ベクトル 30(01EH) ファイル・アトリビュートのセット 入力:DE=FCBアドレス 出力:A=ディレクトリ・コード(0FFH ファイルがない) 31(01FH)ディスク・パラメータ・アドレス取り出し 入力:なし 出力:HL=ディスク・パラメタ・アドレス 32(020H)ユーザー・コードのセット/取り出し 入力:セット E=ユーザー・コード 取り出し:E=0FFH 出力:セット なし 取り出し:A=ユーザー・コード 33(021H)ランダム・リード 入力:DE=FCBアドレス 出力:A=エラーコード(000H 正常) 34(022H)ランダム・ライト 入力:DE=FCBアドレス 出力:A=エラーコード(000H 正常) 35(023H)ファイル・サイズ計算 入力:DE=FCBアドレス 出力:FCB r0〜r2=ファイル・サイズ(ファイルレコード数+1) 36(024H)ランダム・レコード゙のセット 入力:DE=FCBアドレス 出力:FCB r0〜r2=ランダム・レコードNo 出力:A=なし 37(025H)ディスク・ドライブのリセット 入力:DE=ドライブ・ベクトル 38(026H) 未使用 39(027H) 未使用 40(028H)ゼロ・フィルを伴うランダム・ライト 入力:DE=FCBアドレス 出力:A=エラーコード(000H 正常) FCB dev: 1バイト ディスク・ドライブ・コード 0 =カレント・ディスク 1〜16=ドライブA〜P fn : 8バイト ファイルネーム ft : 3バイト エクステンション(拡張子) ex : 1バイト ファイルの論理的領域の位置(ロジカル・エクステント) s : 2バイト システム用 rc : 1バイト exで示された論理的領域のレコード数 dm :16バイト ディスク位置(1Kバイト単位) cr : 1バイト シーケンシャルファイル 次のレコード番号 rn : 3バイト ランダムファイルレコード番号(r0〜r2) *ex, s,rc,crが通常初期値としてそれぞれ000Hにする必要があります
Home へ戻る