Gemini

Untitled

Apr 10th, 2011
305
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. DrawWindow:                 ; (int x, int y, int w, int h)
  2.     addiu sp, -0x24
  3.     sw ra, 0(sp)
  4.     sw s0, 0x4(sp)
  5.     sw s1, 0x8(sp)
  6.     sw s2, 0xC(sp)
  7.     sw s3, 0x10(sp)
  8.     sw s4, 0x14(sp)
  9.     sw s5, 0x18(sp)
  10.     sw s6, 0x1C(sp)
  11.     sw s7, 0x20(sp)
  12.     ; ---
  13.     move s2, a2
  14.     move s3, a3
  15.     lw s4, 0x1f800008       ; ot
  16.     lw s5, gfx_pool         ; allocation
  17.     la s6, window_border    ; borders, 4 bytes each
  18.     la s7, window_angle     ; reference coordinates
  19.     addu t0, a0, a2 ; x1-x3
  20.     addu t1, a1, a3 ; y2-y3
  21.     addiu t0, -8
  22.     addiu t1, -8
  23.     sb a0, 0(s7)            ; x0=x
  24.     sb a1, 1(s7)            ; y0=y
  25.     sb a2, 8(s7)            ; w
  26.     sb a3, 9(s7)            ; h
  27.     sb t0, 2(s7)            ; x1=x+w-8
  28.     sb a1, 3(s7)            ; y1=y
  29.     sb a0, 4(s7)            ; x2=x
  30.     sb t1, 5(s7)            ; y2=y+h-8
  31.     sb t0, 6(s7)            ; x3=x+w-8
  32.     sb t1, 7(s7)            ; y3=y+h-8
  33.     li s0, 4                ; int i=0
  34.     ; -- draw corners --
  35. @@sort_corner:
  36.     lbu a0, 0(s7)           ; x
  37.     lbu a1, 1(s7)           ; y
  38.     move a2, s5             ; sprt
  39.     jal SetMapSprt
  40.     move a3, s6             ; map
  41.     ; append sprite
  42.     move a0, s4             ; ot
  43.     move a1, s5             ; prim
  44.     jal AddPrim
  45.     move s5, v0             ; get next
  46.     ; ---
  47.     addiu s0, -1            ; i++
  48.     addiu s6, 4             ; next mapping entry
  49.     bnez s0, @@sort_corner  ; while(i<4)
  50.     addiu s7, 2             ; next x-y couple
  51.     ; append dr_mode
  52.     li v1, 1
  53.     sb v1, 3(s5)
  54.     li v1, 0xE100000D
  55.     sw v1, 4(s5)
  56.     lw a0, 0x1F800008       ; ot
  57.     move a1, s5
  58.     jal AddPrim
  59.     addiu s5, 2*4           ; next
  60.     ; append tile
  61.     li v0, 3
  62.     sb v0, 3(s5)
  63.     li v0, 0x60805830
  64.     sw v0, 4(s5)
  65.     la s7, window_angle
  66.     lbu t0, 0(s7)           ; x
  67.     lbu t1, 1(s7)           ; y
  68.     lbu t2, 8(s7)           ; w
  69.     lbu t3, 9(s7)           ; h
  70.     sh t0, 8(s5)
  71.     sh t1, 0xA(s5)
  72.     sh t2, 0xC(s5)
  73.     sh t3, 0xE(s5)
  74.     lw a0, 0x1F800008       ; ot
  75.     move a1, s5             ; prim
  76.     jal AddPrim
  77.     addiu s5, 4*4           ; next
  78.     ; ---
  79.     sw s5, gfx_pool
  80.     lw ra, 0(sp)
  81.     lw s0, 0x4(sp)
  82.     lw s1, 0x8(sp)
  83.     lw s2, 0xC(sp)
  84.     lw s3, 0x10(sp)
  85.     lw s4, 0x14(sp)
  86.     lw s5, 0x18(sp)
  87.     lw s6, 0x1C(sp)
  88.     lw s7, 0x20(sp)
  89.     jr ra
  90.     addiu sp, 0x24
  91.  
  92. window_angle:
  93. .dh 0,0,0,0,0
  94.  
  95. _prim_tag:  equ 0
  96. _prim_code: equ 4
  97. _prim_x0:   equ 8
  98. _prim_y0:   equ 0xA
  99. _prim_u0:   equ 0xC
  100. _prim_v0:   equ 0xD
  101. _prim_clut: equ 0xE
  102. _prim_x1:   equ 0x10
  103. _prim_y1:   equ 0x12
  104. _prim_u1:   equ 0x14
  105. _prim_v1:   equ 0x15
  106. _prim_tp:   equ 0x16
  107. _prim_x2:   equ 0x18
  108. _prim_y2:   equ 0x1A
  109. _prim_u2:   equ 0x1C
  110. _prim_v2:   equ 0x1D
  111. _prim_pad1: equ 0x1E
  112. _prim_x3:   equ 0x20
  113. _prim_y3:   equ 0x22
  114. _prim_u3:   equ 0x24
  115. _prim_v3:   equ 0x25
  116. _prim_pad2: equ 0x26
  117.  
  118. _prim_w:    equ 0x10
  119. _prim_h:    equ 0x12
  120.  
  121. .align 4
  122. SetMapSprt:                 ; (int x, int y, SPRT *sprite, GFX_MAPPING *map)
  123.     lbu t0, 0(a3)   ; u
  124.     lbu t1, 1(a3)   ; v
  125.     lbu t2, 2(a3)   ; w
  126.     lbu t3, 3(a3)   ; h
  127.     ; SetSprt
  128.     li v0, 4
  129.     sb v0, 3(a2)
  130.     li v0, 0x64808080   ; code|rgb=128
  131.     sw v0, _prim_code(a2)
  132.     ; x-y
  133.     sh a0, _prim_x0(a2)
  134.     sh a1, _prim_y0(a2)
  135.     ; u-v
  136.     sb t0, _prim_u0(a2)
  137.     sb t1, _prim_v0(a2)
  138.     ; w-h
  139.     sh t2, _prim_w(a2)
  140.     sh t3, _prim_h(a2)
  141.     ; clut
  142.     li v0, 495<<6
  143.     sh v0, _prim_clut(a2)
  144.     ; ---
  145.     jr ra
  146.     addiu v0, a2, 5*4       ; return &sprite[1]
  147.  
  148. SetMapPoly:                 ; (int x, int y, POLY_FT4 *poly, GFX_MAPPING *map)
  149.     lbu t0, 0(a3)   ; u
  150.     lbu t1, 1(a3)   ; v
  151.     lbu t2, 2(a3)   ; w
  152.     lbu t3, 3(a3)   ; h
  153.     ; SetPolyFT4
  154.     li v0, 9
  155.     sb v0, 3(a2)
  156.     li v0, 0x2C808080   ; code|rgb=128
  157.     sb v0, _prim_code(a2)
  158.     ; x0-x2
  159.     sh a0, _prim_x0(a2)
  160.     sh a0, _prim_x2(a2)
  161.     ; x1-x3
  162.     addu a0, t2
  163.     sh a0, _prim_x1(a2)
  164.     sh a0, _prim_x3(a2)
  165.     ; y0-y1
  166.     sh a1, _prim_y0(a2)
  167.     sh a1, _prim_y1(a2)
  168.     ; y2-y3
  169.     addu a1, t3
  170.     sh a1, _prim_y2(a2)
  171.     sh a1, _prim_y3(a2)
  172.     ; clut
  173.     li v0, 495<<6
  174.     sh v0, _prim_clut(a2)
  175.     ; tpage
  176.     li v0, 0x0D
  177.     sh v0, _prim_tp(a2)
  178.     ; u0-u2
  179.     sb t0, _prim_u0(a2)
  180.     sb t0, _prim_u2(a2)
  181.     ; u1-u3
  182.     addu t0, t2
  183.     sb t0, _prim_u1(a2)
  184.     sb t0, _prim_u3(a2)
  185.     ; v0-v1
  186.     sb t1, _prim_v0(a2)
  187.     sb t1, _prim_v1(a2)
  188.     ; v2-v3
  189.     addu t1, t3
  190.     sb t1, _prim_v2(a2)
  191.     sb t1, _prim_v3(a2)
  192.     ; end of mapping
  193.     jr ra
  194.     addiu v0, a2, 10*4      ; return &poly[1]
  195.  
  196. window_border:
  197. .db 184,232,8,8     ; top left
  198. .db 200,232,8,8     ; top right
  199. .db 224,232,8,8     ; bottom left
  200. .db 240,232,8,8     ; bottom right
Advertisement
Add Comment
Please, Sign In to add comment