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から来ます。
b0 = 1 チャンネル0
b1 = 1 チャンネル1

:

b15 = 1 チャンネル15

0x1f801d92 short rw FMモードにおけるチャンネル設定

調整はチャンネルn-1から来ます。
b0 = 1 チャンネル0
b1 = 1 チャンネル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 !
この複合のバイト特徴はある割り込みロードを回避します!

0x1f801050intrwSIO-Data (8, 16 or 32 Bits)
0x1f801054shortrSIO 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
0x1f801058shortrwSIO 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
0x1f80105ashortrwSIO 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
0x1f80105eshortrwSIO Baudrate = 2,1168 Mhz / wanted baudrate

DMA-Control

0x1f8010f0intrwDMA 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)
0x1f8010f4intrwDMA 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 イベントテーブルのバイトサイズ

 1