mirror of
https://github.com/thug1src/thug.git
synced 2025-01-22 05:43:47 +00:00
277 lines
7.5 KiB
Plaintext
277 lines
7.5 KiB
Plaintext
|
|
|
|
;------------------------------------------------------------------------------------------------------------------------------------
|
|
; post-process fog effect
|
|
; (this will be replaced by a vu1 routine)
|
|
|
|
.global FogDma
|
|
.global FogPalette
|
|
|
|
.align 7 ; align to multiple of 8 qwords (2^7 bytes) to give fastest dma transfer
|
|
FogDma:
|
|
|
|
|
|
; preswizzled 256-colour palette, 32-bit entries
|
|
|
|
|
|
DMAcnt *
|
|
|
|
DIRECT *
|
|
|
|
; set registers for palette transfer to vram
|
|
.quad 0x00000000_0000000E_10000000_00000004 ; GifTag (GS_A_D,1,PACKED,0,0,0,4)
|
|
.quad 0x00000000_00000050_00013000_00000000 ; BITBLTBUF (0,0,0,0x3000,1,PSMCT32)
|
|
.quad 0x00000000_00000051_00000000_00000000 ; TRXPOS (0,0,0,0,0)
|
|
.quad 0x00000000_00000052_00000010_00000010 ; TRXREG (16,16)
|
|
.quad 0x00000000_00000053_00000000_00000000 ; TRXDIR (0)
|
|
|
|
; image mode giftag for palette
|
|
.quad 0x00000000_00000000_08000000_00000040 ; GifTag (0,0,IMAGE,0,0,0,64)
|
|
|
|
FogPalette:
|
|
|
|
; the palette itself (which is filled in at run-time)
|
|
.rept 256
|
|
.int 0
|
|
.endr
|
|
|
|
|
|
|
|
.quad 0x00000000_0000000E_10AB4000_00008008 ; GifTag (GS_A_D,1,PACKED,SPRITE|TME|ABE|FST,1,1,8)
|
|
.quad 0x00000000_0000003F_00000000_00000000 ; TEXFLUSH (0)
|
|
.quad 0x00000000_00000014_00000000_00000001 ; TEX1_1 (1,0,NEAREST,NEAREST,0,0,0)
|
|
.quad 0x00000000_00000008_00000000_00003F73 ; CLAMP_1 (REGION_REPEAT,REPEAT,0x3F7,0,0,0)
|
|
.quad 0x00000000_00000040_01BF0000_027F0000 ; SCISSOR_1 (0,447,0,639)
|
|
.quad 0x00000000_00000042_00000000_00000044 ; ALPHA_1 (Cs,Cd,As,Cd,0)
|
|
.quad 0x00000000_00000047_00000000_00050000 ; TEST_1 (ZGEQUAL,1,0,0,0,0,0,0)
|
|
.quad 0x00000000_0000004C_00000000_000A0000 ; FRAME_1 (0,10,PSMCT32,0)
|
|
.quad 0x00000000_0000004E_00000001_010000D2 ; ZBUF_1 (0xD2,PSMZ24,1)
|
|
|
|
.EndDirect
|
|
|
|
.EndDmaData
|
|
|
|
|
|
|
|
; break screen into halves, otherwise source texture > 1024 in width
|
|
; left half
|
|
DMAcall *,HalfScreen
|
|
|
|
DIRECT *
|
|
|
|
; set up source and dest coordinate origins
|
|
.quad 0x00000000_0000000E_10AB4000_00008002 ; GifTag (GS_A_D,1,PACKED,SPRITE|TME|ABE|FST,1,1,1)
|
|
.quad 0x00000000_00000006_2006000E_A9351A40 ; TEX0_1 (0x1A40,20,PSMT8,10,10,RGBA,DECAL,0x3000,PSMCT32,CSM1,0,1)
|
|
.quad 0x00000000_00000018_00000000_00001400 ; XYOFFSET_1(0x1400,0)
|
|
|
|
.EndDirect
|
|
|
|
.EndDmaData
|
|
|
|
|
|
|
|
; right half
|
|
DMAcall *,HalfScreen
|
|
|
|
DIRECT *
|
|
|
|
; set up source and dest coordinate origins
|
|
.quad 0x00000000_0000000E_10AB4000_00008002 ; GifTag (GS_A_D,1,PACKED,SPRITE|TME|ABE|FST,1,1,1)
|
|
.quad 0x00000000_00000006_2006000E_A9351AE0 ; TEX0_1 (0x1AE0,20,PSMT8,10,10,RGBA,DECAL,0x3000,PSMCT32,CSM1,0,1)
|
|
.quad 0x00000000_00000018_00000000_00000000 ; XYOFFSET_1(0,0)
|
|
|
|
.EndDirect
|
|
|
|
.EndDmaData
|
|
|
|
|
|
|
|
; restore and return
|
|
DMAret *
|
|
|
|
DIRECT *
|
|
|
|
; restore any GS regs that we shouldn't have knackered
|
|
.quad 0x00000000_0000000E_10000000_00008001 ; GifTag (GS_A_D,1,PACKED,0,0,1,1)
|
|
.quad 0x00000000_00000008_00000000_00000000 ; CLAMP_1 (REPEAT,REPEAT,0,0,0,0)
|
|
|
|
.EndDirect
|
|
|
|
.EndDmaData
|
|
|
|
|
|
|
|
; apply fogging effect to half of the screen (left or right)
|
|
|
|
.align 7 ; align to 8 qwords
|
|
HalfScreen:
|
|
|
|
; This innocent-looking piece of assembler generates 280K of dma data!
|
|
; (It will eventually be replaced with a small VU1 progam that generates it on the fly, saving memory and dma bandwidth.)
|
|
|
|
DMAret *
|
|
|
|
DIRECT *
|
|
|
|
.if 0 ; Change to 1 to get the full-screen fog back, and lose 280K of memory
|
|
.quad 0x00000000_00005353_44000000_0000A300 ; GifTag (UV|XYZ2<<4|UV<<8|XYZ2<<12,4,REGLIST,0,0,1,8960)
|
|
|
|
; loop over quarter-pages
|
|
qpageX = 0
|
|
.rept 10
|
|
|
|
; use diagonally facing quarter-page as the source
|
|
qpageU = (qpageX^0x200)*2+8
|
|
|
|
qpageY = 0
|
|
.rept 28
|
|
|
|
; use diagonally facing quarter-page as the source
|
|
qpageV = (qpageY^0x100)*2+8
|
|
|
|
X = qpageX+0x1400
|
|
U = qpageU
|
|
.rept 4
|
|
|
|
Y = qpageY
|
|
V = qpageV+0x20
|
|
.rept 4
|
|
|
|
; even column
|
|
.short U+0x40,V,0,0
|
|
.short X,Y,0xFFFF,0x0080
|
|
.short U+0xC0,V+0x20,0,0
|
|
.short X+0x80,Y+0x20,0xFFFF,0x0080
|
|
|
|
; odd column
|
|
.short U,V+0x40,0,0
|
|
.short X,Y+0x20,0xFFFF,0x0080
|
|
.short U+0x80,V+0x60,0,0
|
|
.short X+0x80,Y+0x40,0xFFFF,0x0080
|
|
|
|
Y = Y+0x40
|
|
V = V+0x80
|
|
.endr
|
|
|
|
X = X+0x80
|
|
U = U+0x100
|
|
.endr
|
|
|
|
qpageY = qpageY+0x100
|
|
.endr
|
|
|
|
qpageX = qpageX+0x200
|
|
.endr
|
|
.else
|
|
; Mick: Just bunged in something to make it not crash
|
|
.quad 0x00000000_0000000E_10000000_00008001 ; GifTag (GS_A_D,1,PACKED,0,0,1,1)
|
|
.quad 0x00000000_00000008_00000000_00000000 ; CLAMP_1 (REPEAT,REPEAT,0,0,0,0)
|
|
.endif
|
|
|
|
.EndDirect
|
|
|
|
.EndDmaData
|
|
|
|
;------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
.if 0
|
|
|
|
; BILLBOARD TEST
|
|
|
|
.global BillboardDma
|
|
.global BillboardContext
|
|
.global BillboardMats
|
|
|
|
.align 4
|
|
BillboardDma:
|
|
DMAret *
|
|
|
|
UNPACK 1, 1, V4_32, 0, *
|
|
|
|
; VU context... 32
|
|
.quad 0x0000000C_0000000F_10000020_3400000C
|
|
BillboardContext:
|
|
.quad 0,0,0,0
|
|
BillboardMats:
|
|
.quad 0,0,0,0 ; world to camera matrix
|
|
.quad 0,0,0,0 ; camera to screen matrix
|
|
|
|
; axial billboards... 86
|
|
.quad 0x00000024_00000512_300E4056_35C0000C
|
|
|
|
.float 0,0,1,0 ; stq0
|
|
.int 90,45,15,128 ; rgba0
|
|
.float 0,100,0,0 ; xyz
|
|
.float 1,0,1,0 ; stq1
|
|
.int 30,15,5,128 ; rgba1
|
|
.float 10,100,0,0 ; w/2,h/2
|
|
.float 0,1,1,0 ; stq2
|
|
.int 90,45,15,128 ; rgba2
|
|
.float 0,0,0,0 ; tx,ty,tz
|
|
.float 1,1,1,0 ; stq3
|
|
.int 30,15,5,128 ; rgba3
|
|
.float 0,1,0,0 ; axis
|
|
|
|
.float 0,0,1,0 ; stq0
|
|
.int 90,45,15,128 ; rgba0
|
|
.float 70.71,270.71,0,0 ; xyz
|
|
.float 1,0,1,0 ; stq1
|
|
.int 30,15,5,128 ; rgba1
|
|
.float 10,100,0,0 ; w/2,h/2
|
|
.float 0,1,1,0 ; stq2
|
|
.int 90,45,15,128 ; rgba2
|
|
.float 0,0,0,0 ; tx,ty,tz
|
|
.float 1,1,1,0 ; stq3
|
|
.int 30,15,5,128 ; rgba3
|
|
.float 0.7071,0.7071,0,0 ; axis
|
|
|
|
.float 0,0,1,0 ; stq0
|
|
.int 90,45,15,128 ; rgba0
|
|
.float -70.71,270.71,0,0 ; xyz
|
|
.float 1,0,1,0 ; stq1
|
|
.int 30,15,5,128 ; rgba1
|
|
.float 10,100,0,0 ; w/2,h/2
|
|
.float 0,1,1,0 ; stq2
|
|
.int 90,45,15,128 ; rgba2
|
|
.float 0,0,0,0 ; tx,ty,tz
|
|
.float 1,1,1,0 ; stq3
|
|
.int 30,15,5,128 ; rgba3
|
|
.float -0.7071,0.7071,0,0 ; axis
|
|
|
|
; screen-aligned billboards... 84
|
|
.quad 0x00000018_00000512_302E4054_35C08008
|
|
|
|
.float 0,0,1,0 ; stq0
|
|
.int 0,100,0,64 ; rgba0
|
|
.float 141.42,341.42,0,0 ; xyz
|
|
.float 1,0,1,0 ; stq1
|
|
.int 0,100,0,64 ; rgba1
|
|
.float 60,60,0,0 ; w/2,h/2
|
|
.float 0,1,1,0 ; stq2
|
|
.int 0,100,0,64 ; rgba2
|
|
.float 0,0,10,0 ; tx,ty,tz
|
|
.float 1,1,1,0 ; stq3
|
|
.int 0,100,0,64 ; rgba3
|
|
.float 0,0,0,0 ; axis
|
|
|
|
.float 0,0,1,0 ; stq0
|
|
.int 0,100,0,64 ; rgba0
|
|
.float -141.42,341.42,0,0 ; xyz
|
|
.float 1,0,1,0 ; stq1
|
|
.int 0,100,0,64 ; rgba1
|
|
.float 60,60,0,0 ; w/2,h/2
|
|
.float 0,1,1,0 ; stq2
|
|
.int 0,100,0,64 ; rgba2
|
|
.float 0,0,10,0 ; tx,ty,tz
|
|
.float 1,1,1,0 ; stq3
|
|
.int 0,100,0,64 ; rgba3
|
|
.float 0,0,0,0 ; axis
|
|
.EndUnpack
|
|
|
|
.EndDmaData
|
|
|
|
.endif
|
|
|
|
;------------------------------------------------------------------------------------------------------------------------------------
|
|
|