Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 8111E678 A4001000 RSP microcode: GB 16bit video emulation
- LW GP,0FD8 (R0)
- ORI A0,R0,0A00 ;RSP= A4000A00
- LW A1,0FF0 (R0)
- ORI A2,R0,047F ;0x480 bytes
- JAL A4001D1C ;read A2 bytes between RSP A0 and rdram A1
- ADDIU A1,A1,0080 ;A1= @A4000FF0 + 0x80
- ORI T0,R0,009C
- SW R0,0E80 (T0)
- BGTZ T0,A400101C
- ADDIU T0,T0,FFFC
- ORI T0,R0,008F
- ADDIU A1,GP,7B80 ;RDRAM= GP + 0x7B80
- ORI A0,R0,0E80 ;RSP= A4000E80
- JAL A4001D14 ;write A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,009F ;0xA0 bytes
- ADDIU A1,A1,00A0
- BGTZ T0,A4001034
- ADDIU T0,T0,FFFF
- ADDIU A1,GP,9A00 ;RDRAM= GP + 0x9A00
- ORI A0,R0,0000 ;RSP= A4000000
- JAL A4001D1C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,07FF ;0x800 bytes
- ADDIU T8,GP,1200
- ORI S7,R0,0007
- ORI S6,R0,0010
- ORI A0,R0,0800 ;RSP= A4000800
- OR A1,T8,R0 ;RDRAM= GP + 0x1200
- JAL A4001D1C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,01FF ;0x200 bytes
- ORI S5,R0,008F
- ORI T0,R0,D4E0
- ADDU K0,GP,T0
- SLL S4,S5,0x3
- LBU V0,0A00 (S4)
- LBU T3,0A01 (S4)
- OR T0,S6,S7
- ANDI T1,V0,0010
- XOR T0,T0,T1
- ANDI T1,T3,0007
- XOR T0,T0,T1
- BNE T0,R0,A40011E0
- ANDI T0,V0,0081
- XORI T0,T0,0081
- BNE T0,R0,A40011E0
- LBU A3,0A02 (S4)
- ANDI T1,V0,0008
- SLL T1,T1,0x7
- SRL T2,T3,0x3
- SLL T2,T2,0x5
- ADDU T1,T1,T2
- SRL T2,A3,0x3
- OR A0,T1,T2
- LBU T0,0000 (A0)
- ADDIU T2,T2,0001
- ANDI T2,T2,001F
- SLL T0,T0,0x1
- LHU T3,0800 (T0)
- OR A0,T1,T2
- ANDI T1,V0,00A0
- XORI T1,T1,00A0
- BNE T1,R0,A4001100
- ORI T0,R0,00A0
- LBU T0,0A07 (S4)
- ADDIU T0,T0,FFF9
- ANDI T1,A3,0007
- ADDU A2,T0,T1
- XORI A1,T1,0007
- ANDI T0,T3,8080
- SRL T1,T0,0xE
- SRL T0,T0,0x5
- OR T0,T0,T1
- SB T0,0E81 (A1)
- ANDI T0,T3,4040
- SRL T1,T0,0xD
- SRL T0,T0,0x4
- OR T0,T0,T1
- SB T0,0E82 (A1)
- ANDI T0,T3,2020
- SRL T1,T0,0xC
- SRL T0,T0,0x3
- OR T0,T0,T1
- SB T0,0E83 (A1)
- ANDI T0,T3,1010
- SRL T1,T0,0xB
- SRL T0,T0,0x2
- OR T0,T0,T1
- SB T0,0E84 (A1)
- ANDI T0,T3,0808
- SRL T1,T0,0xA
- SRL T0,T0,0x1
- OR T0,T0,T1
- SB T0,0E85 (A1)
- ANDI T0,T3,0404
- SRL T1,T0,0x9
- OR T0,T0,T1
- SB T0,0E86 (A1)
- ANDI T0,T3,0202
- SRL T1,T0,0x8
- SLL T0,T0,0x1
- OR T0,T0,T1
- SB T0,0E87 (A1)
- LBU T0,0000 (A0)
- ANDI T1,T3,0101
- SRL T2,T1,0x7
- SLL T1,T1,0x2
- OR T1,T1,T2
- SB T1,0E88 (A1)
- ADDIU T2,A0,0001
- ANDI T2,T2,001F
- ANDI T1,A0,07E0
- OR A0,T1,T2
- SLL T0,T0,0x1
- LHU T3,0800 (T0)
- ADDIU A2,A2,FFF8
- BGTZ A2,A400110C
- ADDIU A1,A1,0008
- ORI A0,R0,0E88 ;RSP= A4000E88
- OR A1,K0,R0 ;RDRAM= K0
- JAL A4001D14 ;write A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,009F ;0xA0 bytes
- ADDIU K0,K0,FF60
- ADDIU S4,S4,FFF8
- BGTZ S5,A4001084
- ADDIU S5,S5,FFFF
- BEQ S6,R0,A4001210
- NOP
- ORI A0,R0,0800 ;RSP= A4000800
- ADDIU A1,T8,1000 ;RDRAM= T8 + 0x1000
- JAL A4001D1C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,00FF ;0x100 bytes
- J A4001074
- XORI S6,S6,0010
- ADDIU T8,T8,FE00
- BGTZ S7,A4001060
- ADDIU S7,S7,FFFF
- ADDIU T8,GP,1200
- ORI S7,R0,0007
- ORI S6,R0,0010
- ORI A0,R0,0800 ;RSP= A4000800
- OR A1,T8,R0 ;RDRAM= GP + 0x1200
- JAL A4001D1C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,01FF ;0x200 bytes
- ORI S5,R0,008F
- ORI T0,R0,D4E0
- ADDU K0,GP,T0
- SLL S4,S5,0x3
- LBU V0,0A00 (S4)
- LBU T3,0A06 (S4)
- OR T0,S6,S7
- ANDI T1,V0,0010
- XOR T0,T0,T1
- ANDI T1,T3,0007
- XOR T0,T0,T1
- BNE T0,R0,A400137C
- ANDI T1,V0,00A1
- XORI T1,T1,00A1
- BNE T1,R0,A400137C
- LBU T4,0A07 (S4)
- ORI A2,R0,00A7
- SUBU A2,A2,T4
- BLEZ A2,A400137C
- ORI A0,R0,0E88 ;RSP= A4000E88
- OR A1,K0,R0 ;RDRAM= K0
- JAL A4001D1C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,009F ;0xA0 bytes
- ANDI T0,V0,0040
- SLL T0,T0,0x4
- SRL T1,T3,0x3
- SLL T1,T1,0x5
- ADDU A0,T0,T1
- LBU T0,0000 (A0)
- ANDI T1,A0,07E0
- ADDIU T2,A0,0001
- SLL T0,T0,0x1
- LHU T3,0800 (T0)
- ANDI T2,T2,001F
- OR A0,T1,T2
- ANDI T0,T3,8080
- SRL T1,T0,0xE
- SRL T0,T0,0x5
- OR T0,T0,T1
- SB T0,0E81 (T4)
- ANDI T0,T3,4040
- SRL T1,T0,0xD
- SRL T0,T0,0x4
- OR T0,T0,T1
- SB T0,0E82 (T4)
- ANDI T0,T3,2020
- SRL T1,T0,0xC
- SRL T0,T0,0x3
- OR T0,T0,T1
- SB T0,0E83 (T4)
- ANDI T0,T3,1010
- SRL T1,T0,0xB
- SRL T0,T0,0x2
- OR T0,T0,T1
- SB T0,0E84 (T4)
- ANDI T0,T3,0808
- SRL T1,T0,0xA
- SRL T0,T0,0x1
- OR T0,T0,T1
- SB T0,0E85 (T4)
- ANDI T0,T3,0404
- SRL T1,T0,0x9
- OR T0,T0,T1
- SB T0,0E86 (T4)
- ANDI T0,T3,0202
- SRL T1,T0,0x8
- SLL T0,T0,0x1
- OR T0,T0,T1
- SB T0,0E87 (T4)
- ANDI T1,T3,0101
- SRL T2,T1,0x7
- SLL T1,T1,0x2
- OR T1,T1,T2
- SB T1,0E88 (T4)
- ADDIU A2,A2,FFF8
- BGTZ A2,A40012A8
- ADDIU T4,T4,0008
- ORI A0,R0,0E88 ;RSP= A4000E88
- OR A1,K0,R0 ;RDRAM= K0
- JAL A4001D14 ;write A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,009F ;0xA0 bytes
- ADDIU K0,K0,FF60
- ADDIU S4,S4,FFF8
- BGTZ S5,A4001248
- ADDIU S5,S5,FFFF
- BEQ S6,R0,A40013AC
- NOP
- ORI A0,R0,0800 ;RSP= A4000800
- ADDIU A1,T8,1000 ;RDRAM= T8 + 0x1000
- JAL A4001D1C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,00FF ;0x100 bytes
- J A4001238
- XORI S6,S6,0010
- ADDIU T8,T8,FE00
- BGTZ S7,A4001224
- ADDIU S7,S7,FFFF
- LW A1,0FF8 (R0) ;RDRAM= @A4000FF8
- ORI A0,R0,0000 ;RSP= A4000000
- JAL A4001D1C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,009F ;0xA0 bytes
- ADDIU S4,R0,009C
- SW R0,0810 (R0)
- SW R0,0814 (R0)
- SW R0,0818 (R0)
- SW R0,081C (R0)
- LBU K0,0000 (S4)
- BEQ K0,R0,A400186C
- SLTIU T0,K0,00A0
- BEQ T0,R0,A400186C
- LBU A3,0001 (S4)
- BEQ A3,R0,A400186C
- SLTIU T0,A3,00A8
- BEQ T0,R0,A400186C
- LBU S6,0002 (S4)
- ORI A0,R0,0820 ;RSP= A4000820
- ORI A2,R0,001F ;0x20 bytes
- ANDI T0,S6,00FE
- SLL T0,T0,0x4
- ADDU T0,T0,GP
- JAL A4001D1C ;read A2 bytes between RSP A0 and rdram A1
- ADDIU A1,T0,8200 ;RDRAM= GP + 0x8200 + T0*0x10
- LBU T4,0003 (S4)
- ANDI T0,S6,0001
- SLL S7,T0,0x4
- ANDI T0,T4,0080
- BNE T0,R0,A4001438
- ORI V0,R0,007F
- ANDI V0,R0,0000
- ANDI T0,T4,0010
- SRL T0,T0,0x4
- ORI S6,R0,0010
- SRLV S6,S6,T0
- ANDI T0,T4,0040
- BEQ T0,R0,A4001514
- LHU T0,082E (S7)
- LHU T1,082C (S7)
- LHU T2,082A (S7)
- LHU T3,0828 (S7)
- SH T0,0800 (R0)
- SH T1,0802 (R0)
- SH T2,0804 (R0)
- SH T3,0806 (R0)
- LHU T0,0826 (S7)
- LHU T1,0824 (S7)
- LHU T2,0822 (S7)
- LHU T3,0820 (S7)
- SH T0,0808 (R0)
- SH T1,080A (R0)
- SH T2,080C (R0)
- SH T3,080E (R0)
- LHU T0,083E (R0)
- LHU T1,083C (R0)
- LHU T2,0820 (R0)
- LHU T3,0822 (R0)
- SH T0,0820 (R0)
- SH T1,0822 (R0)
- SH T2,083E (R0)
- SH T3,083C (R0)
- LHU T0,083A (R0)
- LHU T1,0838 (R0)
- LHU T2,0824 (R0)
- LHU T3,0826 (R0)
- SH T0,0824 (R0)
- SH T1,0826 (R0)
- SH T2,083A (R0)
- SH T3,0838 (R0)
- LHU T0,0836 (R0)
- LHU T1,0834 (R0)
- LHU T2,0828 (R0)
- LHU T3,082A (R0)
- SH T0,0828 (R0)
- SH T1,082A (R0)
- SH T2,0836 (R0)
- SH T3,0834 (R0)
- LHU T0,0832 (R0)
- LHU T1,0830 (R0)
- LHU T2,082C (R0)
- LHU T3,082E (R0)
- SH T0,082C (R0)
- SH T1,082E (R0)
- SH T2,0832 (R0)
- J A4001550
- SH T3,0830 (R0)
- LHU T1,082C (S7)
- LHU T2,082A (S7)
- LHU T3,0828 (S7)
- SH T0,080E (R0)
- SH T1,080C (R0)
- SH T2,080A (R0)
- SH T3,0808 (R0)
- LHU T0,0826 (S7)
- LHU T1,0824 (S7)
- LHU T2,0822 (S7)
- LHU T3,0820 (S7)
- SH T0,0806 (R0)
- SH T1,0804 (R0)
- SH T2,0802 (R0)
- SH T3,0800 (R0)
- SLTIU T0,K0,0010
- ANDI T8,R0,0000
- ORI S7,R0,0010
- SUBU S7,S7,K0
- SLL S7,S7,0x1
- BNE T0,R0,A4001588
- OR S5,K0,R0
- ADDIU T8,K0,FFF0
- ANDI S7,R0,0000
- SLTIU T0,K0,0091
- BNE T0,R0,A4001588
- ORI S5,R0,0010
- ORI S5,R0,00A0
- SUBU S5,S5,K0
- SLL T1,T8,0x2
- ADDU T1,T1,T8
- SLL T1,T1,0x5
- ADDIU T1,T1,7B80
- ADDU A1,T1,GP
- SLL T0,T8,0x3
- LBU T0,0A00 (T0)
- ANDI T1,T0,0082
- XORI T1,T1,0082
- BNE T1,R0,A4001858
- ANDI T1,T0,0004
- SLL T1,T1,0x3
- ADDU T1,T1,S7
- LHU T3,0800 (T1)
- BEQ T3,R0,A4001858
- ORI A0,R0,0E88 ;RSP= A4000E88
- JAL A4001D1C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,009F ;0xA0 bytes
- ANDI T1,T4,0020
- BEQ T1,R0,A4001718
- ANDI T0,T3,8080
- BEQ T0,R0,A4001604
- ANDI T1,T3,4040
- LBU T9,0E87 (A3)
- SRL T2,T0,0xE
- SRL T0,T0,0x5
- AND T9,T9,V0
- BNE T9,R0,A4001604
- OR T2,T2,T0
- OR T2,T2,S6
- SB T2,0E87 (A3)
- BEQ T1,R0,A400162C
- ANDI T0,T3,2020
- LBU T9,0E86 (A3)
- SRL T2,T1,0xD
- SRL T1,T1,0x4
- AND T9,T9,V0
- BNE T9,R0,A400162C
- OR T2,T2,T1
- OR T2,T2,S6
- SB T2,0E86 (A3)
- BEQ T0,R0,A4001654
- ANDI T1,T3,1010
- LBU T9,0E85 (A3)
- SRL T2,T0,0xC
- SRL T0,T0,0x3
- AND T9,T9,V0
- BNE T9,R0,A4001654
- OR T2,T2,T0
- OR T2,T2,S6
- SB T2,0E85 (A3)
- BEQ T1,R0,A400167C
- ANDI T0,T3,0808
- LBU T9,0E84 (A3)
- SRL T2,T1,0xB
- SRL T1,T1,0x2
- AND T9,T9,V0
- BNE T9,R0,A400167C
- OR T2,T2,T1
- OR T2,T2,S6
- SB T2,0E84 (A3)
- BEQ T0,R0,A40016A4
- ANDI T1,T3,0404
- LBU T9,0E83 (A3)
- SRL T2,T0,0xA
- SRL T0,T0,0x1
- AND T9,T9,V0
- BNE T9,R0,A40016A4
- OR T2,T2,T0
- OR T2,T2,S6
- SB T2,0E83 (A3)
- BEQ T1,R0,A40016C8
- ANDI T0,T3,0202
- LBU T9,0E82 (A3)
- SRL T2,T1,0x9
- OR T2,T2,T1
- AND T9,T9,V0
- BNE T9,R0,A40016C8
- OR T2,T2,S6
- SB T2,0E82 (A3)
- BEQ T0,R0,A40016F0
- ANDI T1,T3,0101
- LBU T9,0E81 (A3)
- SRL T2,T0,0x8
- SLL T0,T0,0x1
- AND T9,T9,V0
- BNE T9,R0,A40016C8
- OR T2,T2,T0
- OR T2,T2,S6
- SB T2,0E81 (A3)
- BEQ T1,R0,A4001850
- LBU T9,0E80 (A3)
- SRL T2,T1,0x7
- SLL T1,T1,0x2
- AND T9,T9,V0
- BNE T9,R0,A40016F0
- OR T2,T2,T1
- OR T2,T2,S6
- J A4001850
- SB T2,0E80 (A3)
- BEQ T0,R0,A4001740
- ANDI T1,T3,4040
- LBU T9,0E80 (A3)
- SRL T2,T0,0xE
- SRL T0,T0,0x5
- AND T9,T9,V0
- BNE T9,R0,A4001740
- OR T2,T2,T0
- OR T2,T2,S6
- SB T2,0E80 (A3)
- BEQ T1,R0,A4001768
- ANDI T0,T3,2020
- LBU T9,0E81 (A3)
- SRL T2,T1,0xD
- SRL T1,T1,0x4
- AND T9,T9,V0
- BNE T9,R0,A4001768
- OR T2,T2,T1
- OR T2,T2,S6
- SB T2,0E81 (A3)
- BEQ T0,R0,A4001790
- ANDI T1,T3,1010
- LBU T9,0E82 (A3)
- SRL T2,T0,0xC
- SRL T0,T0,0x3
- AND T9,T9,V0
- BNE T9,R0,A4001790
- OR T2,T2,T0
- OR T2,T2,S6
- SB T2,0E82 (A3)
- BEQ T1,R0,A40017B8
- ANDI T0,T3,0808
- LBU T9,0E83 (A3)
- SRL T2,T1,0xB
- SRL T1,T1,0x2
- AND T9,T9,V0
- BNE T9,R0,A40017B8
- OR T2,T2,T1
- OR T2,T2,S6
- SB T2,0E83 (A3)
- BEQ T0,R0,A40017E0
- ANDI T1,T3,0404
- LBU T9,0E84 (A3)
- SRL T2,T0,0xA
- SRL T0,T0,0x1
- AND T9,T9,V0
- BNE T9,R0,A40017E0
- OR T2,T2,T0
- OR T2,T2,S6
- SB T2,0E84 (A3)
- BEQ T1,R0,A4001804
- ANDI T0,T3,0202
- LBU T9,0E85 (A3)
- SRL T2,T1,0x9
- OR T2,T2,T1
- AND T9,T9,V0
- BNE T9,R0,A4001804
- OR T2,T2,S6
- SB T2,0E85 (A3)
- BEQ T0,R0,A400182C
- ANDI T1,T3,0101
- LBU T9,0E86 (A3)
- SRL T2,T0,0x8
- SLL T0,T0,0x1
- AND T9,T9,V0
- BNE T9,R0,A400182C
- OR T2,T2,T0
- OR T2,T2,S6
- SB T2,0E86 (A3)
- BEQ T1,R0,A4001850
- LBU T9,0E87 (A3)
- SRL T2,T1,0x7
- SLL T1,T1,0x2
- AND T9,T9,V0
- BNE T9,R0,A400182C
- OR T2,T2,T1
- OR T2,T2,S6
- SB T2,0E87 (A3)
- JAL A4001D14 ;write A2 bytes between RSP A0 and rdram A1
- NOP
- ADDIU A1,A1,00A0
- ADDIU S7,S7,0002
- ADDIU S5,S5,FFFF
- BGTZ S5,A400159C
- ADDIU T8,T8,0001
- BGTZ S4,A40013CC
- ADDIU S4,S4,FFFC
- LBU T0,0FDF (R0)
- ANDI T1,T0,00C0
- BEQ T1,R0,A40018B4
- ANDI T1,T0,003F
- SRL T1,T1,0x1
- SUBU T0,R0,T1
- ORI T1,R0,0000
- ORI T2,R0,001F
- @A4001894
- BGEZ T0,A40018A0
- OR T3,T0,R0
- ANDI T3,R0,0000
- @A40018A0: build color conversion table
- SB T3,0FA0 (T1)
- ADDIU T0,T0,0001
- ADDIU T1,T1,0001
- BGTZ T2,A4001894
- ADDIU T2,T2,FFFF
- @A40018B4: load 10x10 c16 image at A4000700
- ORI A0,R0,0700 ;RSP= A4000700
- ADDIU A1,GP,4A00 ;RDRAM= GP + 0x4A00
- JAL A4001D1C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,01FF ;0x200 bytes
- LBU T2,0FDF (R0)
- ANDI T2,T2,0040
- BEQ T2,R0,A40018DC ;if @A4000FDF & 0x40, convert color samples
- @A40018D0: convert color samples from loaded image
- ORI A0,R0,0700 ;A0= A4000700
- JAL A4001DA4 ;translate A2 16bit pixels at A0 with color table A4000FA0
- ORI A2,R0,0100 ;0x100 pixels (0x200)
- @A40018DC
- ORI T1,R0,027E
- @A40018E0: initialize A4000400 to A4000680
- SH R0,0400 (T1)
- BGTZ T1,A40018E0 ;initialize 0x280 bytes at A4000400
- ADDIU T1,T1,FFFE
- @A40018EC
- LBU T1,0FDE (R0)
- LBU T0,0FDD (R0)
- LBU S7,0FDC (R0)
- LW K1,0FE8 (R0)
- SLL S7,S7,0x1
- BEQ T1,R0,A4001A00
- ANDI T8,R0,0000
- LW T8,0FE0 (R0)
- ORI T1,R0,EF00
- ADDU T8,T8,T1
- SLTIU T2,T0,0060
- BEQ T2,R0,A4001A00
- ADDIU T2,T0,008F
- LUI T1,0002
- ORI T1,T1,5580
- ADDU T9,K1,T1
- LBU V0,0FD4 (R0)
- BEQ V0,R0,A4001958
- LBU T1,0FD5 (R0)
- LW A3,0FD0 (R0)
- ADDIU T3,V0,FFFF
- ADDIU T0,V0,FF0F
- ADDU V0,T0,T1
- SLL T0,T3,0x2
- ADDU T0,T0,T3
- SLL T0,T0,0x7
- ADDU A3,A3,T0
- @A4001958
- ADDIU S5,T2,FF12
- ORI A0,R0,0900 ;RSP= A4000900
- OR A1,T8,R0 ;RDRAM= T8
- JAL A4001D1C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,00FF ;0x100 bytes
- JAL A4001D64
- ORI A2,R0,027F
- BEQ V0,R0,A40019E0
- NOP
- BLTZ V0,A4001998
- NOP
- ADDIU V0,V0,FFFF
- BNE V0,R0,A40019A8
- NOP
- J A40019E0
- NOP
- @A4001998
- ADDIU V0,V0,0001
- BNE V0,R0,A40019E0
- NOP
- LBU V0,0FD4 (R0)
- @A40019A8
- ORI A0,R0,0180 ;RSP= A4000180
- JAL A4001D1C ;read A2 bytes between RSP A0 and rdram A1
- OR A1,A3,R0 ;RDRAM= A1
- ADDIU A3,A3,FD80
- ORI A0,R0,027C
- @A40019BC
- LHU T0,0180 (A0)
- LHU T1,0182 (A0)
- BEQ T0,R0,A40019D0
- NOP
- SH T0,0400 (A0)
- @A40019D0
- BEQ T1,R0,A40019DC
- ADDIU A0,A0,FFFC
- SH T1,0406 (A0)
- @A40019DC
- BGTZ A0,A40019BC
- @A40019E0
- OR A1,T9,R0 ;RDRAM= T9
- JAL A4001D14 ;write A2 bytes between RSP A0 and rdram A1
- ORI A0,R0,0400 ;RSP= A4000400
- ADDIU T8,T8,FF00
- ADDIU S5,S5,0001
- BLEZ S5,A400195C
- ADDIU T9,T9,FD80
- LBU T0,0FDD (R0)
- @A4001A00
- ADDIU T0,T0,008F
- SLL T1,T0,0x2
- ADDU T1,T1,T0
- SLL T1,T1,0x7
- ADDU T9,K1,T1
- ORI A0,R0,0000 ;RSP= A4000000
- ADDIU A1,GP,2F20 ;RDRAM= GP + 0x2F20
- JAL A4001D1C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,0167 ;0x168 bytes
- ORI A0,R0,0F80 ;RSP= A4000F80
- ADDIU A1,GP,2F00 ;RDRAM= GP + 0x2F00
- JAL A4001D1C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,001F ;0x20 bytes
- LBU T1,0FDF (R0)
- ANDI T1,T1,0080
- BEQ T1,R0,A4001A4C
- ORI A0,R0,0F80 ;A0= A4000F80
- JAL A4001DA4 ;translate A2 16bit pixels at A0 with color table A4000FA0
- ORI A2,R0,0010 ;0x10 pixels (0x20)
- @A4001A4C
- ORI S5,R0,008F
- ORI T0,R0,D4E0
- ADDU K0,GP,T0
- SLL S4,S5,0x3
- ORI V0,R0,0153
- ORI A0,R0,0E80 ;RSP= A4000E80
- OR A1,K0,R0 ;RDRAM= K0
- JAL A4001D1C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,009F ;0xA0 bytes
- BEQ T8,R0,A4001ABC
- ORI A0,R0,0900 ;RSP= A4000900
- OR A1,T8,R0 ;RDRAM= T8
- JAL A4001D1C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,00FF ;0x100 bytes
- ORI T0,R0,0030
- SLL T1,T0,0x1
- ADDU T1,T1,S7
- @A4001A90
- LBU T2,08FF (T0)
- LBU T3,09CF (T0)
- ADDIU T0,T0,FFFF
- SLL T2,T2,0x1
- SLL T3,T3,0x1
- LHU T2,0700 (T2)
- LHU T3,0700 (T3)
- ADDIU T1,T1,FFFE
- SH T2,0400 (T1)
- BGTZ T0,A4001A90
- SH T3,05A0 (T1)
- @A4001ABC
- LB T2,0A00 (S4)
- LBU T0,0A03 (S4)
- LHU T1,0A04 (S4)
- ORI A1,R0,0098
- ADDIU A2,S7,0190
- BLTZ T2,A4001B14
- SLL T0,T0,0x1
- ANDI T3,T0,0006
- LHU T3,0F80 (T3)
- SH T3,040E (A2)
- SH T3,040C (A2)
- SH T3,040A (A2)
- SH T3,0408 (A2)
- SH T3,0406 (A2)
- SH T3,0404 (A2)
- SH T3,0402 (A2)
- ADDIU A2,A2,FFF0
- ADDIU A1,A1,FFF8
- BGEZ A1,A4001AE0
- SH T3,0410 (A2)
- J A4001BF4
- NOP
- @A4001B14
- SLL T1,T1,0x9
- OR S6,T0,T1
- ADDIU V0,V0,0014
- @A4001B20
- LBU A3,0E87 (A1)
- LBU T4,0000 (V0)
- ADDIU V0,V0,FFFF
- SRLV A3,S6,A3
- ANDI A3,A3,0006
- LBU T3,0E86 (A1)
- OR A3,A3,T4
- LHU A3,0F80 (A3)
- SRLV T3,S6,T3
- ANDI T3,T3,0006
- SH A3,040E (A2)
- LBU A3,0E85 (A1)
- OR T3,T3,T4
- LHU T3,0F80 (T3)
- SRLV A3,S6,A3
- ANDI A3,A3,0006
- SH T3,040C (A2)
- LBU T3,0E84 (A1)
- OR A3,A3,T4
- LHU A3,0F80 (A3)
- SRLV T3,S6,T3
- ANDI T3,T3,0006
- SH A3,040A (A2)
- LBU A3,0E83 (A1)
- OR T3,T3,T4
- LHU T3,0F80 (T3)
- SRLV A3,S6,A3
- ANDI A3,A3,0006
- SH T3,0408 (A2)
- LBU T3,0E82 (A1)
- OR A3,A3,T4
- LHU A3,0F80 (A3)
- SRLV T3,S6,T3
- ANDI T3,T3,0006
- SH A3,0406 (A2)
- LBU A3,0E81 (A1)
- OR T3,T3,T4
- LHU T3,0F80 (T3)
- SRLV A3,S6,A3
- ANDI A3,A3,0006
- SH T3,0404 (A2)
- LBU T3,0E80 (A1)
- OR A3,A3,T4
- LHU A3,0F80 (A3)
- SRLV T3,S6,T3
- ANDI T3,T3,0006
- SH A3,0402 (A2)
- OR T3,T3,T4
- LHU T3,0F80 (T3)
- ADDIU A2,A2,FFF0
- ADDIU A1,A1,FFF8
- BGEZ A1,A4001B20
- SH T3,0410 (A2)
- @A4001BF4
- ADDIU A0,S7,0460
- ADDIU A1,T9,0060
- ADDU A1,A1,S7
- BEQ T8,R0,A4001C14
- ORI A2,R0,013F
- @A4001C08
- ADDIU A0,R0,0400 ;RSP= A4000400
- ORI A2,R0,027F ;0x280 bytes
- OR A1,T9,R0 ;RDRAM= T9
- @A4001C14
- JAL A4001D14 ;write A2 bytes between RSP A0 and rdram A1
- NOP
- BEQ T8,R0,A4001C28
- ADDIU T9,T9,FD80
- ADDIU T8,T8,FF00
- @A4001C28
- ADDIU K0,K0,FF60
- ANDI T0,S5,0007
- BNE T0,R0,A4001A60
- ADDIU S5,S5,FFFF
- BGEZ S5,A4001A60
- ADDIU V0,V0,FFEC
- BEQ T8,R0,A4001C94
- LBU T0,0FDD (R0)
- BEQ T0,R0,A4001C94
- ADDIU S5,T0,FFFF
- ORI T0,R0,027C
- SW R0,0400 (T0)
- BGTZ T0,A4001C54
- ADDIU T0,T0,FFFC
- @A4001C60
- ORI A0,R0,0900 ;RSP= A4000900
- OR A1,T8,R0 ;RDRAM= T8
- JAL A4001D1C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,00FF ;0x100 bytes
- JAL A4001D64
- ORI A0,R0,0400
- OR A1,T9,R0 ;RDRAM= T9
- JAL A4001D14 ;write A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,027F ;0x280 bytes
- ADDIU T8,T8,FF00
- ADDIU S5,S5,FFFF
- BGEZ S5,A4001C60
- ADDIU T9,T9,FD80
- @A4001C94
- NOP
- ORI T0,R0,027C
- @A4001C9C
- SW R0,0400 (T0)
- BGTZ T0,A4001C9C
- ADDIU T0,T0,FFFC
- @A4001CA8
- ORI S5,R0,0007
- ORI A0,R0,0400 ;RSP= A4000400
- OR A1,K1,R0 ;RDRAM= K1
- @A4001CB4
- JAL A4001D14 ;write A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,027F ;0x280 bytes
- ADDIU A1,A1,0280
- BGTZ S5,A4001CB4
- ADDIU S5,S5,FFFF
- @A4001CC8
- ORI S5,R0,0007
- LUI T0,0002
- ORI T0,T0,4400
- ADDU A1,K1,T0 ;RDRAM= K1 + 0x24400
- @A4001CD8
- JAL A4001D14 ;write A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,027F ;0x280 bytes
- ADDIU A1,A1,0280
- BGTZ S5,A4001CD8
- ADDIU S5,S5,FFFF
- @A4001CEC
- ORI AT,R0,4000
- MTC0 AT,SP-Status ;SP Status: set signal 2
- BREAK 00000000
- NOP
- @A4001CFC
- LUI A1,0061 ;RDRAM= 0x610000
- ORI A0,R0,0000 ;RSP= A4000000
- JAL A4001D14 ;write A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,0FFF ;0x1000 bytes
- J A4001CEC
- NOP
- A4001D14 write A2 bytes between RSP A0 and rdram A1
- J A4001D20 ;read or write (A0 & 0x8000) A2 bytes between RSP A0 and rdram A1
- ORI A0,A0,8000 ;A0|=0x8000 write
- A4001D1C read A2 bytes between RSP A0 and rdram A1
- ANDI A0,A0,7FFF
- A4001D20 read or write (A0 & 0x8000) A2 bytes between RSP A0 and rdram A1
- accepts: A0=mode|address, A1=p->rdram, A2=length
- MFC0 AT,SP-Semaphore
- BNE AT,R0,A4001D20 ;loop while semaphore flag set
- @ A4001D28
- MFC0 AT,SP-DMA Full
- BNE AT,R0,A4001D28 ;loop until DMA can take more input
- @ A4001D30
- ANDI AT,A0,8000
- ANDI A0,A0,7FFF
- MTC0 A0,SP-Memory Address
- BNE AT,R0,A4001D4C ;if 0x8000 set, write
- MTC0 A1,SP-DRAM Address
- J A4001D50
- MTC0 A2,SP-Read Length
- @ A4001D4C
- MTC0 A2,SP-Write Length
- @ A4001D50
- MFC0 AT,SP-DMA Busy
- BNE AT,R0,A4001D50 ;loop until data written
- NOP
- JR RA
- MTC0 R0,SP-Semaphore ;reset semaphore flag
- A4001D64
- ORI T0,R0,0100
- SLL T1,T0,0x1
- ADDU T1,T1,S7
- @ A4001D70
- LBU T2,08FF (T0)
- LBU T3,08FE (T0)
- ADDIU T0,T0,FFFE
- SLL T2,T2,0x1
- SLL T3,T3,0x1
- LHU T2,0700 (T2)
- LHU T3,0700 (T3)
- ADDIU T1,T1,FFFC
- SH T2,0402 (T1)
- BGTZ T0,A4001D70
- SH T3,0400 (T1)
- @ A4001D9C
- JR RA
- NOP
- A4001DA4 translate A2 16bit pixels at A0 with color table A4000FA0
- accepts: A0=RSP address, A1=(unused), A2=#pixels
- LHU T0,0000 (A0) ;T0= @A0: 16bit pixel
- ADDIU A2,A2,FFFF ;count-=1
- ADDIU A0,A0,0002
- SRL T1,T0,0xB ;T1= T0 / 0x800: range(0:0x1F) F800: red
- LBU T1,0FA0 (T1) ;T1= A4000FA0[T1]: color correction for red
- SRL T2,T0,0x6
- ANDI T2,T2,001F ;T2= T0 / 0x40: range(0:0x1F) 07C0: green
- LBU T2,0FA0 (T2) ;T2= A4000FA0[T2]: color correction for green
- SRL T3,T0,0x1
- ANDI T3,T3,001F ;T3= T0 / 2: range(0:0x1F) 003E: blue
- LBU T3,0FA0 (T3) ;T3= A4000FA0[T3]: color correction for blue
- SLL T1,T1,0xB
- SLL T2,T2,0x6
- SLL T3,T3,0x1
- OR T1,T1,T2
- OR T1,T1,T3 ;T1= red | green | blue (no alpha set)
- BGTZ A2,A4001DA4
- SH T1,FFFE (A0) ;update pixel
- @ A4001DEC: return
- JR RA
- NOP
- A4000000 0x800 ???; GP+0x9A00
- A4000800 0x200 GB image data; GP+0x1200, GB pixels
- A4000A00 0x480 ???; @A4000FF0 + 0x80, 8 ea.
- A4000E80 0xA0 line of converted GB image data
- A4000F20
- A4000
- A4000FA0 0x20 color translation samples
- A4000FC0
- A4000
- A4000FD8 4 p->???; set as GP
- A4000FF0 4 p->???; RDRAM source
- 8111F470 A4001000 RSP microcode: GB 32bit video emulation
- LW GP,0FD8 (R0) ;GP= @A4000FD8
- ORI A0,R0,0A00 ;RSP= A4000A00
- LW A1,0FF0 (R0)
- ORI A2,R0,047F ;0x480 bytes
- JAL A4001D5C ;read A2 bytes between RSP A0 and rdram A1
- ADDIU A1,A1,0080 ;RDRAM= @A4000FF0 + 0x80
- ORI T0,R0,009C
- @A400101C: initialize 0xA0 bytes at A4000E80 (initialize line)
- SW R0,0E80 (T0) ;A4000E80[0:0x9C]= 0
- BGTZ T0,A400101C
- ADDIU T0,T0,FFFC
- @A4001028
- ORI T0,R0,008F
- ADDIU A1,GP,7B80 ;RDRAM= GP + 0x7B80
- ORI A0,R0,0E80 ;RSP= A4000E80
- @A4001034: intialize visible area: initialize 0xA0 x 0x90 bytes from GP+0x7B80 to GP+0xD580
- JAL A4001D54 ;write A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,009F ;0xA0 bytes
- ADDIU A1,A1,00A0
- BGTZ T0,A4001034 ;copy 0x90 times
- ADDIU T0,T0,FFFF
- @A4001048
- ADDIU A1,GP,9A00 ;RDRAM= GP + 0x9A00
- ORI A0,R0,0000 ;RSP= A4000000
- JAL A4001D5C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,07FF ;0x800 bytes
- ADDIU T8,GP,1200
- ORI S7,R0,0007
- ORI S6,R0,0010 ;S6= 0x10
- ORI A0,R0,0800 ;RSP= A4000800
- OR A1,T8,R0 ;RDRAM= GP + 0x1200
- JAL A4001D5C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,01FF ;0x200 bytes
- ORI S5,R0,008F ;S5= 0x8F: #lines
- ORI T0,R0,D4E0
- ADDU K0,GP,T0 ;K0= GP + 0xD4E0: line 0x8F (last line)
- SLL S4,S5,0x3 ;S4= #lines * 8
- @A4001084
- LBU V0,0A00 (S4) ;V0= A4000A00[S5]
- LBU T3,0A01 (S4) ;T3= A4000A01[S5]
- OR T0,S6,S7
- ANDI T1,V0,0010 ;T1= 0x10 flag in V0
- XOR T0,T0,T1
- ANDI T1,T3,0007 ;T1= 0x7 flags in T3
- XOR T0,T0,T1 ;T0= S6 | S7 ^ V0&0x10 ^ T3&7
- BNE T0,R0,A40011E0 ;if any flags set, skip to previous line
- ANDI T0,V0,0081
- XORI T0,T0,0081 ;T0 ^= V0 & 0x81
- BNE T0,R0,A40011E0 ;if either flag set, skip to previous line
- @A40010B0
- LBU A3,0A02 (S4) ;A3= A4000A02[S5]
- ANDI T1,V0,0008
- SLL T1,T1,0x7 ;T1= (V0 & 8) * 0x80
- SRL T2,T3,0x3
- SLL T2,T2,0x5 ;T2= (T3 / 8) * 0x20: (T3 & 0x3FF8)<<2
- ADDU T1,T1,T2 ;T1 += T2
- SRL T2,A3,0x3 ;T2= A4000A02[S5] / 8: index
- OR A0,T1,T2 ;A0= T1 | index
- LBU T0,0000 (A0) ;T0= A4000000 + A0
- ADDIU T2,T2,0001
- ANDI T2,T2,001F ;index += 1, rolled around 0x20
- SLL T0,T0,0x1
- LHU T3,0800 (T0) ;T3= A4000800[T0]: set of 8 GB pixels
- OR A0,T1,T2 ;A0= T1 | index
- ANDI T1,V0,00A0
- XORI T1,T1,00A0
- BNE T1,R0,A4001100 ;T0= @A4000A07[S5]-7 if 0xA0 flags set in V0 else 0xA0
- ORI T0,R0,00A0 ;T0= 0xA0
- LBU T0,0A07 (S4)
- ADDIU T0,T0,FFF9 ;T0= @A4000A07[S5] - 7
- @A4001100
- ANDI T1,A3,0007
- ADDU A2,T0,T1 ;A2= T0 + (A3 & 7): # pixels
- XORI A1,T1,0007 ;A1= not(A3 & 7)
- @A400110C: convert GB image type to array of 8 bytes
- ANDI T0,T3,8080
- SRL T1,T0,0xE
- SRL T0,T0,0x5
- OR T0,T0,T1
- SB T0,0E81 (A1) ;A4000E81[A1] = GB[0]>>6 | GB[1]>>5: palette entry 0-3
- ANDI T0,T3,4040
- SRL T1,T0,0xD
- SRL T0,T0,0x4
- OR T0,T0,T1
- SB T0,0E82 (A1) ;A4000E82[A1] = GB[0]>>5 | GB[1]>>4: palette entry 0-3
- ANDI T0,T3,2020
- SRL T1,T0,0xC
- SRL T0,T0,0x3
- OR T0,T0,T1
- SB T0,0E83 (A1) ;A4000E83[A1] = GB[0]>>4 | GB[1]>>3: palette entry 0-3
- ANDI T0,T3,1010
- SRL T1,T0,0xB
- SRL T0,T0,0x2
- OR T0,T0,T1
- SB T0,0E84 (A1) ;A4000E84[A1] = GB[0]>>3 | GB[1]>>2: palette entry 0-3
- ANDI T0,T3,0808
- SRL T1,T0,0xA
- SRL T0,T0,0x1
- OR T0,T0,T1
- SB T0,0E85 (A1) ;A4000E85[A1] = GB[0]>>2 | GB[1]>>1: palette entry 0-3
- ANDI T0,T3,0404
- SRL T1,T0,0x9
- OR T0,T0,T1
- SB T0,0E86 (A1) ;A4000E86[A1] = GB[0]>>1 | GB[1]>>0: palette entry 0-3
- ANDI T0,T3,0202
- SRL T1,T0,0x8
- SLL T0,T0,0x1
- OR T0,T0,T1
- SB T0,0E87 (A1) ;A4000E87[A1] = GB[0]>>0 | GB[1]<<1: palette entry 0-3
- LBU T0,0000 (A0) ;A0= T1 | index
- ANDI T1,T3,0101
- SRL T2,T1,0x7
- SLL T1,T1,0x2
- OR T1,T1,T2
- SB T1,0E88 (A1) ;A4000E88[A1] = GB[0]<<1 | GB[1]<<2: palette entry 0-3
- ADDIU T2,A0,0001
- ANDI T2,T2,001F
- ANDI T1,A0,07E0
- OR A0,T1,T2
- SLL T0,T0,0x1
- LHU T3,0800 (T0) ;T3= A4000800[index]: next set of 8 GB pixels
- ADDIU A2,A2,FFF8 ;#pixels -= 8
- BGTZ A2,A400110C ;loop for remaining pixels
- ADDIU A1,A1,0008 ;target += 8
- @A40011D0: write line back to RDRAM
- ORI A0,R0,0E88 ;RSP= A4000E88
- OR A1,K0,R0 ;RDRAM= K0
- JAL A4001D54 ;write A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,009F ;0xA0 bytes
- @A40011E0: loop for each line
- ADDIU K0,K0,FF60 ;K0 -= 0xA0: previous line
- ADDIU S4,S4,FFF8 ;S4-=8: previous set of display flags
- BGTZ S5,A4001084 ;lopo for remaining lines
- ADDIU S5,S5,FFFF ;line count -=1
- BEQ S6,R0,A4001210
- NOP
- @A40011F8: push this window to display buffer
- ORI A0,R0,0800 ;RSP= A4000800
- ADDIU A1,T8,1000 ;RDRAM= T8 + 0x1000
- JAL A4001D5C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,00FF ;0x100 bytes
- J A4001074
- XORI S6,S6,0010
- @A4001210
- ADDIU T8,T8,FE00 ;T8-= 0x200
- BGTZ S7,A4001060 ;repeat for banks 0-7
- ADDIU S7,S7,FFFF ;S7-=1
- @A400121C
- ADDIU T8,GP,1200
- ORI S7,R0,0007 ;S7= 7
- ORI S6,R0,0010 ;S6= 0x10
- ORI A0,R0,0800 ;RSP= A4000800
- OR A1,T8,R0 ;RDRAM= GP + 0x1200
- JAL A4001D5C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,01FF ;0x200 bytes
- @A4001238
- ORI S5,R0,008F ;S5= 0x8F: line#
- ORI T0,R0,D4E0
- ADDU K0,GP,T0 ;K0= GP + 0xD4E0: p->last line
- SLL S4,S5,0x3 ;S4= line# * 8
- LBU V0,0A00 (S4) ;V0= A4000A00[S5]
- LBU T3,0A06 (S4) ;T3= A4000A06[S5]
- OR T0,S6,S7
- ANDI T1,V0,0010
- XOR T0,T0,T1
- ANDI T1,T3,0007
- XOR T0,T0,T1
- BNE T0,R0,A400137C
- ANDI T1,V0,00A1
- XORI T1,T1,00A1
- BNE T1,R0,A400137C
- LBU T4,0A07 (S4)
- ORI A2,R0,00A7
- SUBU A2,A2,T4
- BLEZ A2,A400137C
- ORI A0,R0,0E88 ;RSP= A4000E88
- OR A1,K0,R0 ;RDRAM= K0
- JAL A4001D5C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,009F ;0xA0 bytes
- ANDI T0,V0,0040
- SLL T0,T0,0x4
- SRL T1,T3,0x3
- SLL T1,T1,0x5
- ADDU A0,T0,T1
- @A40012A8: convert GB pixels at A4000800[@A0] to 8 palette indices
- LBU T0,0000 (A0)
- ANDI T1,A0,07E0
- ADDIU T2,A0,0001
- SLL T0,T0,0x1
- LHU T3,0800 (T0)
- ANDI T2,T2,001F
- OR A0,T1,T2
- ANDI T0,T3,8080
- SRL T1,T0,0xE
- SRL T0,T0,0x5
- OR T0,T0,T1
- SB T0,0E81 (T4)
- ANDI T0,T3,4040
- SRL T1,T0,0xD
- SRL T0,T0,0x4
- OR T0,T0,T1
- SB T0,0E82 (T4)
- ANDI T0,T3,2020
- SRL T1,T0,0xC
- SRL T0,T0,0x3
- OR T0,T0,T1
- SB T0,0E83 (T4)
- ANDI T0,T3,1010
- SRL T1,T0,0xB
- SRL T0,T0,0x2
- OR T0,T0,T1
- SB T0,0E84 (T4)
- ANDI T0,T3,0808
- SRL T1,T0,0xA
- SRL T0,T0,0x1
- OR T0,T0,T1
- SB T0,0E85 (T4)
- ANDI T0,T3,0404
- SRL T1,T0,0x9
- OR T0,T0,T1
- SB T0,0E86 (T4)
- ANDI T0,T3,0202
- SRL T1,T0,0x8
- SLL T0,T0,0x1
- OR T0,T0,T1
- SB T0,0E87 (T4)
- ANDI T1,T3,0101
- SRL T2,T1,0x7
- SLL T1,T1,0x2
- OR T1,T1,T2
- SB T1,0E88 (T4)
- ADDIU A2,A2,FFF8
- BGTZ A2,A40012A8
- ADDIU T4,T4,0008
- @A400136C
- ORI A0,R0,0E88 ;RSP= A4000E88
- OR A1,K0,R0 ;RDRAM= K0
- JAL A4001D54 ;write A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,009F ;0xA0 bytes
- @A400137C: loop for each line
- ADDIU K0,K0,FF60 ;target -= 0xA0
- ADDIU S4,S4,FFF8 ;#pixels -= 8
- BGTZ S5,A4001248 ;loop for each line
- ADDIU S5,S5,FFFF ;line# -=1
- @A400138C
- BEQ S6,R0,A40013AC
- NOP
- ORI A0,R0,0800 ;RSP= A4000800
- ADDIU A1,T8,1000 ;RDRAM= T8 + 0x1000
- JAL A4001D5C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,00FF ;0x100 bytes
- J A4001238
- XORI S6,S6,0010 ;S6 ^= 0x10
- @A40013AC
- ADDIU T8,T8,FE00 ;RDRAM -= 0x200
- BGTZ S7,A4001224
- ADDIU S7,S7,FFFF ;S7-=1
- @A40013B8
- LW A1,0FF8 (R0) ;RDRAM= @A4000FF8
- ORI A0,R0,0000 ;RSP= A4000000
- JAL A4001D5C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,009F ;0xA0 bytes
- ADDIU S4,R0,009C
- SW R0,0810 (R0)
- SW R0,0814 (R0)
- SW R0,0818 (R0)
- SW R0,081C (R0)
- LBU K0,0000 (S4) ;K0= A4000000[S4]
- BEQ K0,R0,A400186C
- SLTIU T0,K0,00A0
- BEQ T0,R0,A400186C
- LBU A3,0001 (S4)
- BEQ A3,R0,A400186C
- SLTIU T0,A3,00A8
- BEQ T0,R0,A400186C
- LBU S6,0002 (S4)
- @A4001400
- ORI A0,R0,0820 ;RSP= A4000820
- ORI A2,R0,001F ;0x20 bytes
- ANDI T0,S6,00FE
- SLL T0,T0,0x4
- ADDU T0,T0,GP
- JAL A4001D5C ;read A2 bytes between RSP A0 and rdram A1
- ADDIU A1,T0,8200 ;RDRAM= T0 - 0x7E00
- LBU T4,0003 (S4)
- ANDI T0,S6,0001
- SLL S7,T0,0x4
- ANDI T0,T4,0080
- BNE T0,R0,A4001438
- ORI V0,R0,007F
- ANDI V0,R0,0000
- @A4001438
- ANDI T0,T4,0010
- SRL T0,T0,0x4
- ORI S6,R0,0010
- SRLV S6,S6,T0
- ANDI T0,T4,0040
- BEQ T0,R0,A4001514
- LHU T0,082E (S7)
- LHU T1,082C (S7)
- LHU T2,082A (S7)
- LHU T3,0828 (S7)
- SH T0,0800 (R0)
- SH T1,0802 (R0)
- SH T2,0804 (R0)
- SH T3,0806 (R0)
- LHU T0,0826 (S7)
- LHU T1,0824 (S7)
- LHU T2,0822 (S7)
- LHU T3,0820 (S7)
- SH T0,0808 (R0)
- SH T1,080A (R0)
- SH T2,080C (R0)
- SH T3,080E (R0)
- LHU T0,083E (R0)
- LHU T1,083C (R0)
- LHU T2,0820 (R0)
- LHU T3,0822 (R0)
- SH T0,0820 (R0)
- SH T1,0822 (R0)
- SH T2,083E (R0)
- SH T3,083C (R0)
- LHU T0,083A (R0)
- LHU T1,0838 (R0)
- LHU T2,0824 (R0)
- LHU T3,0826 (R0)
- SH T0,0824 (R0)
- SH T1,0826 (R0)
- SH T2,083A (R0)
- SH T3,0838 (R0)
- LHU T0,0836 (R0)
- LHU T1,0834 (R0)
- LHU T2,0828 (R0)
- LHU T3,082A (R0)
- SH T0,0828 (R0)
- SH T1,082A (R0)
- SH T2,0836 (R0)
- SH T3,0834 (R0)
- LHU T0,0832 (R0)
- LHU T1,0830 (R0)
- LHU T2,082C (R0)
- LHU T3,082E (R0)
- SH T0,082C (R0)
- SH T1,082E (R0)
- SH T2,0832 (R0)
- J A4001550
- SH T3,0830 (R0)
- LHU T1,082C (S7)
- LHU T2,082A (S7)
- LHU T3,0828 (S7)
- SH T0,080E (R0)
- SH T1,080C (R0)
- SH T2,080A (R0)
- SH T3,0808 (R0)
- LHU T0,0826 (S7)
- LHU T1,0824 (S7)
- LHU T2,0822 (S7)
- LHU T3,0820 (S7)
- SH T0,0806 (R0)
- SH T1,0804 (R0)
- SH T2,0802 (R0)
- SH T3,0800 (R0)
- SLTIU T0,K0,0010
- ANDI T8,R0,0000
- ORI S7,R0,0010
- SUBU S7,S7,K0
- SLL S7,S7,0x1
- BNE T0,R0,A4001588
- OR S5,K0,R0
- ADDIU T8,K0,FFF0
- ANDI S7,R0,0000
- SLTIU T0,K0,0091
- BNE T0,R0,A4001588
- ORI S5,R0,0010
- ORI S5,R0,00A0
- SUBU S5,S5,K0
- SLL T1,T8,0x2
- ADDU T1,T1,T8
- SLL T1,T1,0x5
- ADDIU T1,T1,7B80
- ADDU A1,T1,GP
- SLL T0,T8,0x3
- LBU T0,0A00 (T0)
- ANDI T1,T0,0082
- XORI T1,T1,0082
- BNE T1,R0,A4001858
- ANDI T1,T0,0004
- SLL T1,T1,0x3
- ADDU T1,T1,S7
- LHU T3,0800 (T1)
- BEQ T3,R0,A4001858
- ORI A0,R0,0E88 ;RSP= A4000E88
- JAL A4001D5C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,009F ;0xA0 bytes
- ANDI T1,T4,0020
- BEQ T1,R0,A4001718
- ANDI T0,T3,8080
- BEQ T0,R0,A4001604
- ANDI T1,T3,4040
- LBU T9,0E87 (A3)
- SRL T2,T0,0xE
- SRL T0,T0,0x5
- AND T9,T9,V0
- BNE T9,R0,A4001604
- OR T2,T2,T0
- OR T2,T2,S6
- SB T2,0E87 (A3)
- BEQ T1,R0,A400162C
- ANDI T0,T3,2020
- LBU T9,0E86 (A3)
- SRL T2,T1,0xD
- SRL T1,T1,0x4
- AND T9,T9,V0
- BNE T9,R0,A400162C
- OR T2,T2,T1
- OR T2,T2,S6
- SB T2,0E86 (A3)
- BEQ T0,R0,A4001654
- ANDI T1,T3,1010
- LBU T9,0E85 (A3)
- SRL T2,T0,0xC
- SRL T0,T0,0x3
- AND T9,T9,V0
- BNE T9,R0,A4001654
- OR T2,T2,T0
- OR T2,T2,S6
- SB T2,0E85 (A3)
- BEQ T1,R0,A400167C
- ANDI T0,T3,0808
- LBU T9,0E84 (A3)
- SRL T2,T1,0xB
- SRL T1,T1,0x2
- AND T9,T9,V0
- BNE T9,R0,A400167C
- OR T2,T2,T1
- OR T2,T2,S6
- SB T2,0E84 (A3)
- BEQ T0,R0,A40016A4
- ANDI T1,T3,0404
- LBU T9,0E83 (A3)
- SRL T2,T0,0xA
- SRL T0,T0,0x1
- AND T9,T9,V0
- BNE T9,R0,A40016A4
- OR T2,T2,T0
- OR T2,T2,S6
- SB T2,0E83 (A3)
- BEQ T1,R0,A40016C8
- ANDI T0,T3,0202
- LBU T9,0E82 (A3)
- SRL T2,T1,0x9
- OR T2,T2,T1
- AND T9,T9,V0
- BNE T9,R0,A40016C8
- OR T2,T2,S6
- SB T2,0E82 (A3)
- BEQ T0,R0,A40016F0
- ANDI T1,T3,0101
- LBU T9,0E81 (A3)
- SRL T2,T0,0x8
- SLL T0,T0,0x1
- AND T9,T9,V0
- BNE T9,R0,A40016C8
- OR T2,T2,T0
- OR T2,T2,S6
- SB T2,0E81 (A3)
- BEQ T1,R0,A4001850
- LBU T9,0E80 (A3)
- SRL T2,T1,0x7
- SLL T1,T1,0x2
- AND T9,T9,V0
- BNE T9,R0,A40016F0
- OR T2,T2,T1
- OR T2,T2,S6
- J A4001850
- SB T2,0E80 (A3)
- BEQ T0,R0,A4001740
- ANDI T1,T3,4040
- LBU T9,0E80 (A3)
- SRL T2,T0,0xE
- SRL T0,T0,0x5
- AND T9,T9,V0
- BNE T9,R0,A4001740
- OR T2,T2,T0
- OR T2,T2,S6
- SB T2,0E80 (A3)
- BEQ T1,R0,A4001768
- ANDI T0,T3,2020
- LBU T9,0E81 (A3)
- SRL T2,T1,0xD
- SRL T1,T1,0x4
- AND T9,T9,V0
- BNE T9,R0,A4001768
- OR T2,T2,T1
- OR T2,T2,S6
- SB T2,0E81 (A3)
- BEQ T0,R0,A4001790
- ANDI T1,T3,1010
- LBU T9,0E82 (A3)
- SRL T2,T0,0xC
- SRL T0,T0,0x3
- AND T9,T9,V0
- BNE T9,R0,A4001790
- OR T2,T2,T0
- OR T2,T2,S6
- SB T2,0E82 (A3)
- BEQ T1,R0,A40017B8
- ANDI T0,T3,0808
- LBU T9,0E83 (A3)
- SRL T2,T1,0xB
- SRL T1,T1,0x2
- AND T9,T9,V0
- BNE T9,R0,A40017B8
- OR T2,T2,T1
- OR T2,T2,S6
- SB T2,0E83 (A3)
- BEQ T0,R0,A40017E0
- ANDI T1,T3,0404
- LBU T9,0E84 (A3)
- SRL T2,T0,0xA
- SRL T0,T0,0x1
- AND T9,T9,V0
- BNE T9,R0,A40017E0
- OR T2,T2,T0
- OR T2,T2,S6
- SB T2,0E84 (A3)
- BEQ T1,R0,A4001804
- ANDI T0,T3,0202
- LBU T9,0E85 (A3)
- SRL T2,T1,0x9
- OR T2,T2,T1
- AND T9,T9,V0
- BNE T9,R0,A4001804
- OR T2,T2,S6
- SB T2,0E85 (A3)
- BEQ T0,R0,A400182C
- ANDI T1,T3,0101
- LBU T9,0E86 (A3)
- SRL T2,T0,0x8
- SLL T0,T0,0x1
- AND T9,T9,V0
- BNE T9,R0,A400182C
- OR T2,T2,T0
- OR T2,T2,S6
- SB T2,0E86 (A3)
- BEQ T1,R0,A4001850
- LBU T9,0E87 (A3)
- SRL T2,T1,0x7
- SLL T1,T1,0x2
- AND T9,T9,V0
- BNE T9,R0,A400182C
- OR T2,T2,T1
- OR T2,T2,S6
- SB T2,0E87 (A3)
- JAL A4001D54 ;write A2 bytes between RSP A0 and rdram A1
- NOP
- ADDIU A1,A1,00A0 ;A1+=0xA0: target's next line
- ADDIU S7,S7,0002
- ADDIU S5,S5,FFFF
- BGTZ S5,A400159C
- ADDIU T8,T8,0001
- BGTZ S4,A40013CC
- ADDIU S4,S4,FFFC
- LBU T0,0FDF (R0) ;T0= @A4000FDF
- ANDI T1,T0,00C0
- BEQ T1,R0,A40018B4 ;skip if 0xC0 flags not set
- ANDI T1,T0,003F
- SRL T1,T1,0x1 ;T1= (T0 & 0x3E)>>1: #initial color conversion index
- SUBU T0,R0,T1 ;T0= ~T1
- ORI T1,R0,0000 ;T1= 0: count
- ORI T2,R0,001F ;T2= 0x1F: #entries
- @ A4001894: roll conversion around
- BGEZ T0,A40018A0
- OR T3,T0,R0
- ANDI T3,R0,0000
- @ A40018A0: build color conversion table
- SB T3,0FA0 (T1)
- ADDIU T0,T0,0001
- ADDIU T1,T1,0001
- BGTZ T2,A4001894
- ADDIU T2,T2,FFFF
- @ A40018B4
- ORI A0,R0,0700 ;RSP= A4000700
- ADDIU A1,GP,4A00 ;RDRAM= GP + 0x4A00
- JAL A4001D5C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,01FF ;0x200 bytes
- LBU T2,0FDF (R0)
- ANDI T2,T2,0040
- BEQ T2,R0,A40018DC
- ORI A0,R0,0700 ;A0= A4000700
- JAL A4001DE4 ;translate A2 16bit pixels at A0 with color table A4000FA0
- ORI A2,R0,0100 ;0x100 pixels (0x200)
- ORI T1,R0,027E
- SH R0,0400 (T1)
- BGTZ T1,A40018E0
- ADDIU T1,T1,FFFE
- LBU T1,0FDE (R0)
- LBU T0,0FDD (R0)
- LBU S7,0FDC (R0)
- LW K1,0FE8 (R0)
- SLL S7,S7,0x1
- BEQ T1,R0,A4001A00
- ANDI T8,R0,0000
- LW T8,0FE0 (R0)
- ORI T1,R0,EF00
- ADDU T8,T8,T1
- SLTIU T2,T0,0060
- BEQ T2,R0,A4001A00
- ADDIU T2,T0,008F
- LUI T1,0002
- ORI T1,T1,5580
- ADDU T9,K1,T1
- LBU V0,0FD4 (R0)
- BEQ V0,R0,A4001958
- LBU T1,0FD5 (R0)
- LW A3,0FD0 (R0)
- ADDIU T3,V0,FFFF
- ADDIU T0,V0,FF0F
- ADDU V0,T0,T1
- SLL T0,T3,0x2
- ADDU T0,T0,T3
- SLL T0,T0,0x7
- ADDU A3,A3,T0
- ADDIU S5,T2,FF12
- ORI A0,R0,0900 ;RSP= A4000900
- OR A1,T8,R0 ;RDRAM= T8
- JAL A4001D5C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,00FF ;0x100 bytes
- JAL A4001DA4
- ORI A2,R0,027F
- BEQ V0,R0,A40019E0
- NOP
- BLTZ V0,A4001998
- NOP
- ADDIU V0,V0,FFFF
- BNE V0,R0,A40019A8
- NOP
- J A40019E0
- NOP
- ADDIU V0,V0,0001
- BNE V0,R0,A40019E0
- NOP
- LBU V0,0FD4 (R0)
- ORI A0,R0,0180 ;RSP= A4000180
- JAL A4001D5C ;read A2 bytes between RSP A0 and rdram A1
- OR A1,A3,R0 ;RDRAM= A3
- ADDIU A3,A3,FD80
- ORI A0,R0,027C
- LHU T0,0180 (A0)
- LHU T1,0182 (A0)
- BEQ T0,R0,A40019D0
- NOP
- SH T0,0400 (A0)
- BEQ T1,R0,A40019DC
- ADDIU A0,A0,FFFC
- SH T1,0406 (A0)
- BGTZ A0,A40019BC
- OR A1,T9,R0 ;RDRAM= T9
- JAL A4001D54 ;write A2 bytes between RSP A0 and rdram A1
- ORI A0,R0,0400 ;RSP= A4000400
- ADDIU T8,T8,FF00
- ADDIU S5,S5,0001
- BLEZ S5,A400195C
- ADDIU T9,T9,FD80
- LBU T0,0FDD (R0)
- BEQ T8,R0,A4001A9C
- ADDIU T0,T0,008F
- SLL T1,T0,0x2
- ADDU T1,T1,T0
- SLL T1,T1,0x7
- ADDU T9,K1,T1
- ADDIU S5,R0,FF71
- ORI A0,R0,0400 ;RSP= A4000400
- OR A1,T9,R0 ;RDRAM= T9
- JAL A4001D5C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,027F ;0x280 bytes
- ORI A0,R0,0900 ;A4000900
- OR A1,T8,R0 ;RDRAM= T8
- JAL A4001D5C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,00FF ;0x100 bytes
- ORI T0,R0,0030
- SLL T1,T0,0x1
- ADDU T1,T1,S7
- @ A4001A48
- LBU T2,09CF (T0)
- LBU T3,09CE (T0)
- ADDIU T0,T0,FFFE
- SLL T2,T2,0x1
- SLL T3,T3,0x1
- LHU T2,0700 (T2)
- LHU T3,0700 (T3)
- ADDIU T1,T1,FFFC
- SH T2,05A2 (T1)
- BGTZ T0,A4001A48
- SH T3,05A0 (T1)
- ORI T0,R0,0030
- JAL A4001DA8
- ORI A2,R0,027F
- OR A1,T9,R0 ;RDRAM= T9
- JAL A4001D54 ;write A2 bytes between RSP A0 and rdram A1
- ORI A0,R0,0400 ;RSP= A4000400
- ADDIU T8,T8,FF00
- ADDIU S5,S5,0001
- BLEZ S5,A4001A1C
- ADDIU T9,T9,FD80
- @ A4001A9C
- ADDIU T9,GP,4000
- ORI S5,R0,0060
- ORI T0,R0,B780
- ADDU K0,GP,T0
- SLL S4,S5,0x3
- ORI A0,R0,0000 ;RSP= A4000000
- OR A1,K0,R0 ;RDRAM= K0
- JAL A4001D5C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,04FF ;0x500 bytes
- LBU T0,0A03 (S4)
- LHU T1,0A04 (S4)
- ORI A1,R0,0098
- ORI A2,R0,0130
- SLL T0,T0,0x1
- SLL T1,T1,0x9
- OR S6,T0,T1
- @ A4001ADC: convert 1 line of pixels at T1 back to GB format at T2
- ADDIU T1,A1,0460 ;T1= A1+0x460: line 7
- JAL A4001B70 ;set GB pixels at T2 from palette entries at T1
- ADDIU T2,A2,000E ;T2= A4000130+0xE: p->target
- ADDIU T1,A1,03C0 ;T1= A1+0x3C0: line 6
- JAL A4001B70 ;set GB pixels at T2 from palette entries at T1
- ADDIU T2,A2,000C ;T2= A4000130+0xC: p->target
- ADDIU T1,A1,0320 ;T1= A1+0x320: line 5
- JAL A4001B70 ;set GB pixels at T2 from palette entries at T1
- ADDIU T2,A2,000A ;T2= A4000130+0xA: p->target
- ADDIU T1,A1,0280 ;T1= A1+0x280: line 4
- JAL A4001B70 ;set GB pixels at T2 from palette entries at T1
- ADDIU T2,A2,0008 ;T2= A4000130+8: p->target
- ADDIU T1,A1,01E0 ;T1= A1+0x1E0: line 3
- JAL A4001B70 ;set GB pixels at T2 from palette entries at T1
- ADDIU T2,A2,0006 ;T2= A4000130+6: p->target
- ADDIU T1,A1,0140 ;T1= A1+0x140: line 2
- JAL A4001B70 ;set GB pixels at T2 from palette entries at T1
- ADDIU T2,A2,0004 ;T2= A4000130+4: p->target
- ADDIU T1,A1,00A0 ;T1= A1+0xA0: line 1
- JAL A4001B70 ;set GB pixels at T2 from palette entries at T1
- ADDIU T2,A2,0002 ;T2= A4000130+2: p->target
- ADDIU T1,A1,0000 ;T1= A1+0: line 0
- JAL A4001B70 ;set GB pixels at T2 from palette entries at T1
- ADDIU T2,A2,0000 ;T2= A4000130+0: p->target
- ADDIU A1,A1,FFF8
- BGEZ A1,A4001ADC
- ADDIU A2,A2,FFF0
- @ A4001B48: write GB pixel data back to rdram at T9
- ORI A0,R0,0500 ;RSP= A4000500
- OR A1,T9,R0 ;RDRAM= T9
- JAL A4001D54 ;write A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,013F ;0x140 bytes
- ADDIU T9,T9,FEC0
- ADDIU K0,K0,FB00 ;K0 -= 0x500
- BGTZ S5,A4001AB0 ;write to each of 7 buffers
- ADDIU S5,S5,FFF8
- J A4001C70
- NOP
- A4001B70 set GB pixels at T2 from palette entries at T1
- LBU A3,0000 (T1) ;A3= source[0]
- SRLV A3,S6,A3
- ANDI T0,A3,0002
- SLL T4,T0,0xE ;T4= 0x4000 if A3 & 2 else 0
- ANDI T0,A3,0004
- SLL T0,T0,0x5 ;T0= 0x20 if A3 & 4 else 0
- OR T4,T4,T0 ;T4= 4020
- LBU T3,0001 (T1) ;T3= source[1]
- SRLV T3,S6,T3
- ANDI T0,T3,0002
- SLL T0,T0,0xD ;T0= 0x2000 if T3 & 2 else 0
- OR T4,T4,T0 ;T4= 6020
- ANDI T0,T3,0004
- SLL T0,T0,0x4 ;T0= 0x10 if T3 & 4 else 0
- OR T4,T4,T0 ;T4= 6030
- LBU A3,0002 (T1)
- SRLV A3,S6,A3
- ANDI T0,A3,0002
- SLL T0,T0,0xC
- OR T4,T4,T0
- ANDI T0,A3,0004
- SLL T0,T0,0x3
- OR T4,T4,T0
- LBU T3,0003 (T1)
- SRLV T3,S6,T3
- ANDI T0,T3,0002
- SLL T0,T0,0xB
- OR T4,T4,T0
- ANDI T0,T3,0004
- SLL T0,T0,0x2
- OR T4,T4,T0
- LBU A3,0004 (T1)
- SRLV A3,S6,A3
- ANDI T0,A3,0002
- SLL T0,T0,0xA
- OR T4,T4,T0
- ANDI T0,A3,0004
- SLL T0,T0,0x1
- OR T4,T4,T0
- LBU T3,0005 (T1)
- SRLV T3,S6,T3
- ANDI T0,T3,0002
- SLL T0,T0,0x9
- OR T4,T4,T0
- ANDI T0,T3,0004
- OR T4,T4,T0
- LBU A3,0006 (T1)
- SRLV A3,S6,A3
- ANDI T0,A3,0002
- SLL T0,T0,0x8
- OR T4,T4,T0
- ANDI T0,A3,0004
- SRL T0,T0,0x1
- OR T4,T4,T0
- LBU T3,0007 (T1)
- SRLV T3,S6,T3
- ANDI T0,T3,0002
- SLL T0,T0,0x7
- OR T4,T4,T0
- ANDI T0,T3,0004
- SRL T0,T0,0x2
- OR T4,T4,T0
- JR RA
- SH T4,0500 (T2) ;T2+500= pixel
- A4001C70
- BEQ T8,R0,A4001CD4
- LBU T0,0FDD (R0)
- BEQ T0,R0,A4001CD4
- ADDIU S5,T0,FFFF
- ORI T0,R0,027C
- SW R0,0400 (T0)
- BGTZ T0,A4001C84
- ADDIU T0,T0,FFFC
- SLL T1,S5,0x2
- ADDU T1,T1,S5
- SLL T1,T1,0x7 ;T1= S5 * 0x280
- ADDU T9,K1,T1
- @ A4001CA0
- ORI A0,R0,0900 ;RSP= A4000900
- OR A1,T8,R0 ;RDRAM= T8
- JAL A4001D5C ;read A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,00FF ;0x100 bytes
- JAL A4001DA4
- ORI A0,R0,0400 ;RSP= A4000400
- OR A1,T9,R0 ;RDRAM= T9
- JAL A4001D54 ;write A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,027F ;0x280 bytes
- ADDIU T8,T8,FF00
- ADDIU S5,S5,FFFF
- BGEZ S5,A4001CA0
- ADDIU T9,T9,FD80
- NOP
- ORI T0,R0,027C
- @ A4001CDC
- SW R0,0400 (T0)
- BGTZ T0,A4001CDC
- ADDIU T0,T0,FFFC
- ORI S5,R0,0007
- ORI A0,R0,0400 ;RSP =A4000400
- OR A1,K1,R0 ;RDRAM= K1
- @ A4001CF4: copy buffer 7 times to rdram
- JAL A4001D54 ;write A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,027F ;0x280 bytes
- ADDIU A1,A1,0280 ;target += 0x280
- BGTZ S5,A4001CF4 ;count -= 1
- ADDIU S5,S5,FFFF
- ORI S5,R0,0007 ;S5= 7: count
- LUI T0,0002
- ORI T0,T0,4400
- ADDU A1,K1,T0 ;RDRAM= K1 + 0x24400
- @ A4001D18: copy buffer 7 times to rdram+0x24400
- JAL A4001D54 ;write A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,027F ;0x280 bytes
- ADDIU A1,A1,0280 ;target += 0x280
- BGTZ S5,A4001D18 ;count -= 1
- ADDIU S5,S5,FFFF
- @ A4001D2C: send signal and break function
- ORI AT,R0,4000
- MTC0 AT,SP-Status ;SP Status: set signal 2
- BREAK 00000000
- NOP
- @ A4001D3C
- LUI A1,0061 ;RDRAM= 0x610000
- ORI A0,R0,0000 ;RSP= A4000000
- JAL A4001D54 ;write A2 bytes between RSP A0 and rdram A1
- ORI A2,R0,0FFF ;0x1000 bytes
- J A4001D2C
- NOP
- A4001D54 write A2 bytes between RSP A0 and rdram A1
- J A4001D60 ;read or write (A0 & 0x8000) A2 bytes between RSP A0 and rdram A1
- ORI A0,A0,8000 ;length | = 0x8000: write
- A4001D5C read A2 bytes between RSP A0 and rdram A1
- ANDI A0,A0,7FFF
- A4001D60 read or write (A0 & 0x8000) A2 bytes between RSP A0 and rdram A1
- accepts: A0=mode|address, A1=p->rdram, A2=length
- MFC0 AT,SP-Semaphore
- BNE AT,R0,A4001D60
- MFC0 AT,SP-DMA Full
- BNE AT,R0,A4001D68
- ANDI AT,A0,8000
- ANDI A0,A0,7FFF
- MTC0 A0,SP-Memory Address
- BNE AT,R0,A4001D8C
- MTC0 A1,SP-DRAM Address
- J A4001D90
- MTC0 A2,SP-Read Length
- @ A4001D8C
- MTC0 A2,SP-Write Length
- @ A4001D90
- MFC0 AT,SP-DMA Busy
- BNE AT,R0,A4001D90
- NOP
- JR RA
- MTC0 R0,SP-Semaphore
- A4001DA4
- ORI T0,R0,0100
- SLL T1,T0,0x1
- ADDU T1,T1,S7
- LBU T2,08FF (T0)
- LBU T3,08FE (T0)
- ADDIU T0,T0,FFFE
- SLL T2,T2,0x1
- SLL T3,T3,0x1
- LHU T2,0700 (T2)
- LHU T3,0700 (T3)
- ADDIU T1,T1,FFFC
- SH T2,0402 (T1)
- BGTZ T0,A4001DB0
- SH T3,0400 (T1)
- JR RA
- NOP
- A4001DE4 translate A2 16bit pixels at A0 with color table A4000FA0
- accepts: A0=p->image, A1=(unused), A2=#pixels
- LHU T0,0000 (A0) ;T0= next pixel
- ADDIU A2,A2,FFFF ;count-=1
- ADDIU A0,A0,0002 ;source+=2
- SRL T1,T0,0xB ;T1= pixel / 0x800: range(0:0x1F) F800: red
- LBU T1,0FA0 (T1) ;T1= A4000FA0[T1]: corrected red
- SRL T2,T0,0x6
- ANDI T2,T2,001F ;T2= pixel / 0x40: range(0:0x1F) 07E0: green
- LBU T2,0FA0 (T2) ;T2= A4000FA0[T2]: corrected green
- SRL T3,T0,0x1
- ANDI T3,T3,001F ;T3= pixel / 2: range(0:0x1F) 003E: blue
- LBU T3,0FA0 (T3) ;T3= A4000FA0[T3]: corrected blue
- SLL T1,T1,0xB
- SLL T2,T2,0x6
- SLL T3,T3,0x1
- OR T1,T1,T2
- OR T1,T1,T3 ;T1= red | green | blue (no alpha)
- BGTZ A2,A4001DE4 ;loop for count
- SH T1,FFFE (A0) ;update pixel
- @ 8112029C: return
- JR RA
- NOP
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement