Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DrawWindow: ; (int x, int y, int w, int h)
- addiu sp, -0x24
- sw ra, 0(sp)
- sw s0, 0x4(sp)
- sw s1, 0x8(sp)
- sw s2, 0xC(sp)
- sw s3, 0x10(sp)
- sw s4, 0x14(sp)
- sw s5, 0x18(sp)
- sw s6, 0x1C(sp)
- sw s7, 0x20(sp)
- ; ---
- move s2, a2
- move s3, a3
- lw s4, 0x1f800008 ; ot
- lw s5, gfx_pool ; allocation
- la s6, window_border ; borders, 4 bytes each
- la s7, window_angle ; reference coordinates
- addu t0, a0, a2 ; x1-x3
- addu t1, a1, a3 ; y2-y3
- addiu t0, -8
- addiu t1, -8
- sb a0, 0(s7) ; x0=x
- sb a1, 1(s7) ; y0=y
- sb a2, 8(s7) ; w
- sb a3, 9(s7) ; h
- sb t0, 2(s7) ; x1=x+w-8
- sb a1, 3(s7) ; y1=y
- sb a0, 4(s7) ; x2=x
- sb t1, 5(s7) ; y2=y+h-8
- sb t0, 6(s7) ; x3=x+w-8
- sb t1, 7(s7) ; y3=y+h-8
- li s0, 4 ; int i=0
- ; -- draw corners --
- @@sort_corner:
- lbu a0, 0(s7) ; x
- lbu a1, 1(s7) ; y
- move a2, s5 ; sprt
- jal SetMapSprt
- move a3, s6 ; map
- ; append sprite
- move a0, s4 ; ot
- move a1, s5 ; prim
- jal AddPrim
- move s5, v0 ; get next
- ; ---
- addiu s0, -1 ; i++
- addiu s6, 4 ; next mapping entry
- bnez s0, @@sort_corner ; while(i<4)
- addiu s7, 2 ; next x-y couple
- ; append dr_mode
- li v1, 1
- sb v1, 3(s5)
- li v1, 0xE100000D
- sw v1, 4(s5)
- lw a0, 0x1F800008 ; ot
- move a1, s5
- jal AddPrim
- addiu s5, 2*4 ; next
- ; append tile
- li v0, 3
- sb v0, 3(s5)
- li v0, 0x60805830
- sw v0, 4(s5)
- la s7, window_angle
- lbu t0, 0(s7) ; x
- lbu t1, 1(s7) ; y
- lbu t2, 8(s7) ; w
- lbu t3, 9(s7) ; h
- sh t0, 8(s5)
- sh t1, 0xA(s5)
- sh t2, 0xC(s5)
- sh t3, 0xE(s5)
- lw a0, 0x1F800008 ; ot
- move a1, s5 ; prim
- jal AddPrim
- addiu s5, 4*4 ; next
- ; ---
- sw s5, gfx_pool
- lw ra, 0(sp)
- lw s0, 0x4(sp)
- lw s1, 0x8(sp)
- lw s2, 0xC(sp)
- lw s3, 0x10(sp)
- lw s4, 0x14(sp)
- lw s5, 0x18(sp)
- lw s6, 0x1C(sp)
- lw s7, 0x20(sp)
- jr ra
- addiu sp, 0x24
- window_angle:
- .dh 0,0,0,0,0
- _prim_tag: equ 0
- _prim_code: equ 4
- _prim_x0: equ 8
- _prim_y0: equ 0xA
- _prim_u0: equ 0xC
- _prim_v0: equ 0xD
- _prim_clut: equ 0xE
- _prim_x1: equ 0x10
- _prim_y1: equ 0x12
- _prim_u1: equ 0x14
- _prim_v1: equ 0x15
- _prim_tp: equ 0x16
- _prim_x2: equ 0x18
- _prim_y2: equ 0x1A
- _prim_u2: equ 0x1C
- _prim_v2: equ 0x1D
- _prim_pad1: equ 0x1E
- _prim_x3: equ 0x20
- _prim_y3: equ 0x22
- _prim_u3: equ 0x24
- _prim_v3: equ 0x25
- _prim_pad2: equ 0x26
- _prim_w: equ 0x10
- _prim_h: equ 0x12
- .align 4
- SetMapSprt: ; (int x, int y, SPRT *sprite, GFX_MAPPING *map)
- lbu t0, 0(a3) ; u
- lbu t1, 1(a3) ; v
- lbu t2, 2(a3) ; w
- lbu t3, 3(a3) ; h
- ; SetSprt
- li v0, 4
- sb v0, 3(a2)
- li v0, 0x64808080 ; code|rgb=128
- sw v0, _prim_code(a2)
- ; x-y
- sh a0, _prim_x0(a2)
- sh a1, _prim_y0(a2)
- ; u-v
- sb t0, _prim_u0(a2)
- sb t1, _prim_v0(a2)
- ; w-h
- sh t2, _prim_w(a2)
- sh t3, _prim_h(a2)
- ; clut
- li v0, 495<<6
- sh v0, _prim_clut(a2)
- ; ---
- jr ra
- addiu v0, a2, 5*4 ; return &sprite[1]
- SetMapPoly: ; (int x, int y, POLY_FT4 *poly, GFX_MAPPING *map)
- lbu t0, 0(a3) ; u
- lbu t1, 1(a3) ; v
- lbu t2, 2(a3) ; w
- lbu t3, 3(a3) ; h
- ; SetPolyFT4
- li v0, 9
- sb v0, 3(a2)
- li v0, 0x2C808080 ; code|rgb=128
- sb v0, _prim_code(a2)
- ; x0-x2
- sh a0, _prim_x0(a2)
- sh a0, _prim_x2(a2)
- ; x1-x3
- addu a0, t2
- sh a0, _prim_x1(a2)
- sh a0, _prim_x3(a2)
- ; y0-y1
- sh a1, _prim_y0(a2)
- sh a1, _prim_y1(a2)
- ; y2-y3
- addu a1, t3
- sh a1, _prim_y2(a2)
- sh a1, _prim_y3(a2)
- ; clut
- li v0, 495<<6
- sh v0, _prim_clut(a2)
- ; tpage
- li v0, 0x0D
- sh v0, _prim_tp(a2)
- ; u0-u2
- sb t0, _prim_u0(a2)
- sb t0, _prim_u2(a2)
- ; u1-u3
- addu t0, t2
- sb t0, _prim_u1(a2)
- sb t0, _prim_u3(a2)
- ; v0-v1
- sb t1, _prim_v0(a2)
- sb t1, _prim_v1(a2)
- ; v2-v3
- addu t1, t3
- sb t1, _prim_v2(a2)
- sb t1, _prim_v3(a2)
- ; end of mapping
- jr ra
- addiu v0, a2, 10*4 ; return &poly[1]
- window_border:
- .db 184,232,8,8 ; top left
- .db 200,232,8,8 ; top right
- .db 224,232,8,8 ; bottom left
- .db 240,232,8,8 ; bottom right
Advertisement
Add Comment
Please, Sign In to add comment