PSXレジスタ
hacked by bITmASTER
email: bITmASTER@biggoot.com
last update: 09.07.99
VAGフォーマット
VAGサンプルグループ
サンプルグループは16バイトから成ります。
typedef struct { unsigned char pack_info; unsigned char flags; unsigned char packed[14 ]; }
pack_info:
高位4ビット:Predictor number
低位4ビット:Shiftfactor
flags:
0x07:サンプル終了
0x02:リピートに属するサンプル
0x06:リピート開始
0x04:リピートポイント
0x03: サンプル終了、リピートスタートから始める
レジスタサイズ:
short:2バイト
int:4バイト
SPUレジスタ
0x1f8010c0 | int | rw | SPU-DMAメモリアドレス |
0x1f801c04
(0x1f8010c4のミス?) |
int | rw |
b15...b0
b31...b16:DMAブロックサイズ(n*64バイト) |
0x1f801c08
(0x1f8010c8のミス?) |
int | rw |
b24 = 1:DMA開始
転送終了時にb24は0になる |
0x1f8010f4 | int | rw |
DMA割り込みコントロール
b15 DMA channel ?? 割り込み有効 |
0x1f80c00 | short | rw |
チャンネル0左音量
b0... b13:音量(0...0x3fff) b14: 符号 |
0x1f80c02 | short | rw |
チャンネル0右音量
b0... b13:音量(0...0x3fff) b14: 符号 |
0x1f80c04 | short | rw | 周波数 |
0x1f80c06 | short | rw | 先頭アドレス sound = SPUメモリ / 8 |
0x1f80c08 | short | rw |
b7-b14 アタックレート(0x7f=決してない)
b15: 1 Exponental |
0x1f80c0a | short | rw | ADSR2 |
0x1f80c0c | short | rw | ADSR音量(0x0000 - 0x7fff) |
0x1f80c0e | short | r | 現在のリピートアドレス |
... チャンネル1..23のため23回くりかえし
s: 1期間のサンプル数
f: 希望の再生周波数
t: 除数要因
s * f 44100 * t t = ----- * 4096 f = --------- 44100 4096 * s
0x1f801d80 | short | rw | 左主音量(0x0000-0x7fff) |
0x1f801d82 | short | rw | 右主音量(0x0000-0x7fff) |
0x1f801d84 | short | rw | 左リバーブ深さ(0x0000-0x7fff) |
0x1f801d86 | short | rw | 右リバーブ深さ(0x0000-0x7fff) |
0x1f801d88 | short | w |
サウンド再生開始
b0 = 1 チャンネル0開始 b1 = 1 チャンネル1開始 : b15 = 1 チャンネル15開始 |
0x1f801d8a | short | w |
サウンド再生開始
b0 = 1 チャンネル16開始 b1 = 1 チャンネル17開始 : b7 = 1 チャンネル23開始 |
0x1f801d8c | short | w |
サウンド再生停止
b0 = 1 チャンネル0停止 b1 = 1 チャンネル1停止 : b15 = 1 チャンネル15停止 |
0x1f801d8e | short | w |
サウンド再生停止
b0 = 1 チャンネル16停止 b1 = 1 チャンネル17停止 : b7 = 1 チャンネル23停止 |
0x1f801d90 | short | rw |
FMモードにおけるチャンネル設定
調整はチャンネルn-1から来ます。
: b15 = 1 チャンネル15 |
0x1f801d92 | short | rw |
FMモードにおけるチャンネル設定
調整はチャンネルn-1から来ます。
: b15 = 1 チャンネル15 |
0x1f801d94 | short | rw |
チャンネルをノイズジェネレータとして使用
b0 = 1 チャンネル0開始 b1 = 1 チャンネル1開始 : b15 = 1 チャンネル15開始 |
0x1f801d96 |
チャンネルをノイズジェネレータとして使用
b0 = 1 チャンネル16開始 b1 = 1 チャンネル17開始 : b7 = 1 チャンネル23開始 |
||
0x1f801d98 | short | rw |
リバーブモードにチャンネル設定
(サンプル終了後、リバーブモードは自動的にoffになる)
b0 = 1 チャンネル0リバーブモード開始 b1 = 1 チャンネル1自動スイッチ開始 : b15 = 1 チャンネル15開始 |
0x1f801d9a | short | rw |
リバーブモードにチャンネル設定
b0 = 1 チャンネル16開始 b1 = 1 チャンネル17開始 : b7 = 1 チャンネル23開始 |
0x1f801d9c | short | r |
チャンネルアクティブ
b0 = 0 チャンネル0アクティブ b1 = 0 チャンネル1アクティブ : b15 = 0 チャンネル15アクティブ |
0x1f801d9e | short | r |
チャンネルアクティブ
b0 = 0 チャンネル16アクティブ b1 = 0 チャンネル17アクティブ : b7 = 0 チャンネル23アクティブ |
0x1f801da0 | 未使用 | ||
0x1f801da2 | リバーブバッファ開始アドレス | ||
0x1f801da4 | short | rw | function unknown |
0x1f801da6 | short | rw | SPUメモリアドレス |
0x1f801da8 | short | rw | SPUへのデータ |
0x1f801daa | short | rw |
SPU制御1(0xc000)
b14=0 DAコンバータmute b13..b8: ノイズ周波数 b7 0 リバーブオフ 1 リバーブオン b6: SpuIQR b5 b4 0 0 -- 0 1 非DMAでSPU書き込み 1 0 DMAでSPU書き込み 1 1 DMAでSPU読み込み b3: EXTリバーブ b2: CDリバーブ b1: 外部デジタルaudio入力有効 b0: CD audio有効 |
0x1f801dac | short | rw | SPU制御2(4) |
0x1f801dae | short | r |
SPUステータス
b7: 1=DMA転送ready b10: wrdy b11: current decoded page |
0x1f801db0 | short | rw | CDオーディオ左ボリューム |
0x1f801db2 | short | rw | CDオーディオ右ボリューム |
0x1f801db4 | short | rw | 外部左ボリューム |
0x1f801db6 | short | rw | 外部右ボリューム |
0x1f801db8 | short | r | ??? |
0x1f801dba | short | r | ??? |
0x1f801dbc | |||
0x1f801dbe | |||
0x1f801dc0 | SPUエフェクト | ||
0x1f801dc2 | |||
0x1f801dc4 | Filter fur verzogertes Signal Tiefpas 0x0000: niedrigste Grenzfrequenz 0x7fff: hochste Grenzfrequenz, keine Filterwirkung | ||
0x1f801dc6 | Amplitude verzogertes Signal 0...32767 -32768...0 (invertiert) | ||
0x1f801dc8 | |||
0x1f801dca | |||
0x1f801dcc | |||
0x1f801dce | |||
0x1f801dd0 | |||
0x1f801dd2 | |||
0x1f801dd4 | |||
0x1f801dd6 | |||
0x1f801dd8 | Delay, in 8er Steps (???) | ||
0x1f801dda | |||
0x1f801ddc | |||
0x1f801dde | |||
0x1f801de0 | |||
0x1f801de2 | |||
0x1f801de4 | |||
0x1f801de6 | |||
0x1f801de8 | |||
0x1f801dea | |||
0x1f801dec | |||
0x1f801dee | |||
0x1f801df0 | |||
0x1f801df0 | |||
0x1f801df2 | |||
0x1f801df4 | |||
0x1f801df6 | |||
0x1f801df8 | offset left ??? | ||
0x1f801dfa | |||
0x1f801dfc | short | signed short volume left | |
0x1f801dfe | short | signed short volume right |
タイマ
タイマ周波数:33,872 MHz ?? 33,868 Mhz = 44100 * 256 * 3
Timer0
0x1f801100 | short | r | アップカウンタ、現在のカウンタ読みこみ |
0x1f801104 | short | rw | タイマモードレジスタ |
0x1f801108 | short | rw | カウンタ最終ステータス |
Timer1
0x1f801110 | short | r | アップカウンタ、現在のカウンタ読みこみ |
0x1f801114 | short | rw | タイマモードレジスタ |
0x1f801118 | short | rw | カウンタ最終ステータス |
Timer2
0x1f801120 | short | r | アップカウンタ、現在のカウンタ読みこみ |
0x1f801124 | short | rw | タイマモードレジスタ |
0x1f801128 | short | rw | カウンタ最終ステータス |
タイマモードレジスタ
0 |
1 |
|
b0 | タイマ実行 | タイマ停止 |
b1 | ||
b2 | ||
b3 | 0から65535までカウント | 0から最終ステータスまでカウント |
b4 | 割り込み有効 | |
b5 | ||
b6 | 割り込み有効 | |
b7 | ||
b8 | プリスケーラ:? | プリスケーラ:? |
割り込みレジスタ
0x1f801070 | short | rw | 割り込み承認レジスタ |
0x1f801074 | short | rw | 割り込みマスクレジスタ |
1=on |
HW-Desc |
|
b0 | VBL割り込み有効 | 0xf0000001 |
b1 | GPU | 0xf0000002 |
b2 | CD-ROM | 0xf0000003 |
b3 | DMAコントローラ | 0xf0000004 |
b4 | Timer0割り込み有効 | 0xf0000005 |
b5 | Timer1割り込み有効 | 0xf0000006 |
b6 | Timer2割り込み有効 | 0xf0000007 |
b7 | コントローラ | 0xf0000008 |
b8 | SIO | 0xf0000008 |
b9 | SPU | 0xf0000008 |
b10 | PIO | 0xf0000008 |
For acknowledge an interrupt you must write ~(int-bit) to the interrupt
acknowledge register.
割り込み承認のために、割り込み承認レジスタに ~(int-bit)を書く必要がある。
i.e. VBL
li t0,0x1f800000 li t1,~1 # ~1 = 0xfffffffe sw t1,0x1070(t0)
SIO
The SIO has a 8 Byte FIFO. The SIO can read (write not tested) 1, 2, 4 or 8 bytes
at once. For use the multiple byte feature you must enable the RX interrupt. This
interrupt occurs after the sio has get 1, 2, 4 or 8 bytes. The interrupt service
routine must get the amount of bytes in following manner:
SIOは8バイトのFIFOを持っています。
SIOは1あるいは2あるいは4あるいは8バイトを直ちに読むことができます(書き込みはテストされませんでした)。
使用のために、可能にしなければならない複合のバイト特徴、10ルピー割り込み。
sioが持った後、この割り込みは生じます、1あるいは2あるいは4あるいは8バイトを得ます。
割り込みサービスルーチンは、方法に続く際にバイトの量を得なければならない:
Buffersize 1 li t0,0x1f800000 lb t1,0x1050(t0) 2 li t0,0x1f800000 lhu t1,0x1050(t0) 4 li t0,0x1f800000 lw t1,0x1050(t0) 8 li t0,0x1f800000 lw t1,0x1050(t0) # first 4 bytes lw t1,0x1050(t0) # secound 4 bytes
This multiple byte feature avoids some interrupt load !
この複合のバイト特徴はある割り込みロードを回避します!
0x1f801050 | int | rw | SIO-Data (8, 16 or 32 Bits) |
0x1f801054 | short | r | SIO Status
b0 ready for write byte ->TX b1 ready for read byte RX-> b2 ? b3 parity error b4 overrun error b5 frame error b6 0 b7 DSR b8 CTS b9 interrupt |
0x1f801058 | short | rw | SIO Mode
b1 b0 Baudrate Prescaler 0 1 1 1 0 16 1 1 64 b3 b2 char length 0 0 5 Bit 0 1 6 Bit 1 0 7 Bit 1 1 8 Bit b4 parity 0 off 1 on b5 parity mode 0 even 1 odd b7 b6 stop bit length 0 1 1 1 0 1,5 1 1 2 |
0x1f80105a | short | rw | SIO Control
b0 TX enable b1 DTR, OpenDrain-Output b2 RX enable b3 ? b4 Interrupt Flag b5 RTS, OpenDrain-Output b6 SIO Reset b7 ? b9 b8 Buffersize 0 0 1 Byte 0 1 2 Bytes (short) 1 0 4 Bytes (int) 1 1 8 Bytes (two int) b10 TX Interrupt enable b11 RX Interrupt enable b12 DSR Interrupt enable |
0x1f80105e | short | rw | SIO Baudrate = 2,1168 Mhz / wanted baudrate |
DMA-Control
0x1f8010f0 | int | rw | DMA Enable
b3 enable DMA 0 (MDECin) b7 enable DMA 1 (MDECout) b11 enable DMA 2 (GPU) b15 enable DMA 3 (CD-ROM) b19 enable DMA 4 (SPU) b23 enable DMA 5 (PIO) b27 enable DMA 6 (OTC) |
0x1f8010f4 | int | rw | DMA Interrupt Control
b0 fast DMA 0 Transfer ??? b1 fast DMA 1 Transfer ??? b2 fast DMA 2 Transfer ??? b3 fast DMA 3 Transfer ??? b4 fast DMA 4 Transfer ??? b5 fast DMA 5 Transfer ??? b6 fast DMA 6 Transfer ??? b7 b8 DMA 0 ??? b9 DMA 1 ??? b10 DMA 2 ??? b11 DMA 3 ??? b12 DMA 4 ??? b13 DMA 5 ??? b14 DMA 6 ??? b15 b16 enable DMA 0 Interrupt b17 enable DMA 1 Interrupt b18 enable DMA 2 Interrupt b19 enable DMA 3 Interrupt b20 enable DMA 4 Interrupt b21 enable DMA 5 Interrupt b22 enable DMA 6 Interrupt b23 should be 1 b24 acknowledge interrupt DMA 0 b25 acknowledge interrupt DMA 1 b26 acknowledge interrupt DMA 2 b27 acknowledge interrupt DMA 3 b28 acknowledge interrupt DMA 4 b29 acknowledge interrupt DMA 5 b30 acknowledge interrupt DMA 6 b31 should be 1 for acknowledging |
DMA割り込みサービスルーチン終了の前に、DMA割り込みを承認(acknowledge)すべきです。
li t0,0x1f800000 lw t1,0x10f4(t0) li t2,0xffffff # mask and t1,t1,t2 li t2,0x81000000 # i.e. DMA 0 or t1,t1,t2 sw t2,0x10f4(t0)割り込み自身の承認を忘れないこと.
li t1,~4 sw t1,0x1070(t0)
メモリ変数
0x120 イベントテーブルのポインタ
0x124 イベントテーブルのバイトサイズ