概要
wslで、kernel.elfのコンパイル、やってみた。
ISA DMAを叩きたい。
ISA DMAとは。
IOポートにつながるレジスタ
IOポート | レジスタ名 | Write | Read |
---|---|---|---|
0x008 | ステータスレジスター | o | |
0x008 | コマンドレジスター | o | |
0x009 | リクエストレジスター | o | |
0x00A | シングルチャンネルマスクレジスター | o | |
0x00B | モードレジスター | o | |
0x00C | クリアーバイトポインタレジスター (フリップフロップリセットレジスター) | o | |
0x00D | テンポラリーレジスター | o | |
0x00D | マスタークリアーレジスター | o | |
0x00E | マスクリセットレジスター | o | |
0x00F | オールマスクレジスター | o | o |
実験
リクエストレジスターとオールマスクレジスターを読んでみた。
サンプルコード
uint8 v = inb(0x009);
print_string("9 = ");
print_hex(v);
v = inb(0x00f);
print_string("f = ");
print_hex(v);
DMCコントローラのステータスレジスター
ビット | シンボル | 名称 | 説明 |
---|---|---|---|
0 | TC0 | チャンネル0 | DMA転送完了 0:チャンネル0のDMA転送は完了していません1:チャンネル0のDMA転送は完了しました |
1 | TC1 | チャンネル1 | DMA転送完了 0:チャンネル1のDMA転送は完了していません1:チャンネル1のDMA転送は完了しました |
2 | TC2 | チャンネル2 | DMA転送完了 0:チャンネル2のDMA転送は完了していません1:チャンネル2のDMA転送は完了しました |
3 | TC0 | チャンネル3 | DMA転送完了 0:チャンネル3のDMA転送は完了していません1:チャンネル3のDMA転送は完了しました |
4 | CH0 | チャンネル0 | DMAリクエスト保留中 0:チャンネル0はデバイスからのDMA要求を保留していません1:チャンネル0はデバイスからのDMA要求を保留しています |
5 | CH1 | チャンネル1 | DMAリクエスト保留中 0:チャンネル1はデバイスからのDMA要求を保留していません1:チャンネル1はデバイスからのDMA要求を保留しています |
6 | CH2 | チャンネル2 | DMAリクエスト保留中 0:チャンネル2はデバイスからのDMA要求を保留していません1:チャンネル2はデバイスからのDMA要求を保留しています |
7 | CH3 | チャンネル3 | DMAリクエスト保留中 0:チャンネル3はデバイスからのDMA要求を保留していません1:チャンネル3はデバイスからのDMA要求を保留しています |
DMCコントローラのオールマスクレジスター
ビット | シンボル | 名称 | 説明 |
---|---|---|---|
0 | CH0 | チャンネル0マスク | 0:チャンネル0のマスクを解除します 1:チャンネル0をマスクします |
1 | CH1 | チャンネル1マスク | 0:チャンネル1のマスクを解除します 1:チャンネル1をマスクします |
2 | CH2 | チャンネル2マスク | 0:チャンネル2のマスクを解除します 1:チャンネル2をマスクします |
3 | CH3 | チャンネル3マスク | 0:チャンネル3のマスクを解除します 1:チャンネル3をマスクします |
以上。