diff --git a/s/jhdr b/s/jhdr
new file mode 100644
index 0000000000000000000000000000000000000000..3d281e0fcde9ebed60f48079e586f503c8477eb4
--- /dev/null
+++ b/s/jhdr
@@ -0,0 +1,28 @@
+; Copyright 1996 Acorn Computers Ltd
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+; s.JHdr, generated by MakeJHdr Mar 17 1995 16:36:01.
+
+huff_tbl_maxcode * 276
+huff_tbl_valptr * 348
+huff_tbl_huffval * 17
+huff_tbl_shortcut * 416
+
+cinfo_next_input_byte * 52
+cinfo_get_buffer * 260
+cinfo_bits_left * 264
+cinfo_buffer_end * 56
+
+        END
+
diff --git a/s/putscaled b/s/putscaled
new file mode 100644
index 0000000000000000000000000000000000000000..e394b476a2015dbafa4ddc8f3ac17b7bdb6e1a1f
--- /dev/null
+++ b/s/putscaled
@@ -0,0 +1,10535 @@
+; Copyright 1996 Acorn Computers Ltd
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+; generated by Norcroft RISC OS ARM C vsn 5.05 (Acorn Computers Ltd) [Dec 23 1994]
+
+        AREA |C$$code|, CODE, READONLY
+|x$codeseg|
+
+        EXPORT  memcpy
+memcpy
+        MOV      a4,a1
+        MOV      ip,a3
+        SUB      a3,a3,#1
+        CMP      ip,#0
+        MOVLSS   pc,lr
+|L000014.J4.memcpy|
+        LDRB     ip,[a2],#1
+        STRB     ip,[a4],#1
+        MOV      ip,a3
+        SUB      a3,a3,#1
+        CMP      ip,#0
+        BHI      |L000014.J4.memcpy|
+        MOVS     pc,lr
+
+        EXPORT  strcpy
+strcpy
+        MOV      a3,a1
+        LDRB     a4,[a2,#0]
+        CMP      a4,#&1f
+        MOVLES   pc,lr
+|L000040.J4.strcpy|
+        LDRB     a4,[a2],#1
+        STRB     a4,[a3],#1
+        LDRB     a4,[a2,#0]
+        CMP      a4,#&1f
+        BGT      |L000040.J4.strcpy|
+        MOVS     pc,lr
+
+        EXPORT  memset
+memset
+        MOV      a4,a1
+        MOV      ip,a3
+        SUB      a3,a3,#1
+        CMP      ip,#0
+        MOVLSS   pc,lr
+        AND      a2,a2,#&ff
+|L000070.J4.memset|
+        STRB     a2,[a4],#1
+        MOV      ip,a3
+        SUB      a3,a3,#1
+        CMP      ip,#0
+        BHI      |L000070.J4.memset|
+        MOVS     pc,lr
+
+        IMPORT  exit
+        EXPORT  panic_exit
+panic_exit
+        B        exit
+
+get_2bytes
+        MOV      a4,#&ff
+        LDR      a2,[a1,#&38]
+        LDR      a3,[a1,#&34]
+        CMP      a3,a2
+        LDRCCB   a2,[a3],#1
+        STRCC    a3,[a1,#&34]
+        MOVCS    a2,a4
+        MOV      a3,a2
+        ADD      ip,a1,#&34
+        LDMIA    ip,{a2,ip}
+        CMP      a2,ip
+        LDRCCB   a4,[a2],#1
+        STRCC    a2,[a1,#&34]!
+        ADD      a1,a4,a3,LSL #8
+        MOVS     pc,lr
+
+skip_variable
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       get_2bytes
+        SUB      a1,a1,#2
+        CMP      a1,#0
+        LDMLEDB  fp,{v1,fp,sp,pc}^
+        LDR      a2,[v1,#&38]
+|L0000ec.J4.skip_variable|
+        LDR      a3,[v1,#&34]
+        CMP      a3,a2
+        ADDCC    a3,a3,#1
+        STRCC    a3,[v1,#&34]
+        SUB      a1,a1,#1
+        CMP      a1,#0
+        BGT      |L0000ec.J4.skip_variable|
+        LDMDB    fp,{v1,fp,sp,pc}^
+
+get_dht
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        SUB      sp,sp,#&114
+        BL       get_2bytes
+        SUB      v4,a1,#2
+        CMP      v4,#0
+        BLE      |L000250.J37.get_dht|
+        MOV      v6,#0
+        MOV      v5,#&ff
+|L000138.J4.get_dht|
+        ADD      a2,v1,#&34
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        LDRCCB   a2,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a2,v5
+        MOV      v2,a2
+        STRB     v6,[sp,#&100]
+        MOV      v3,#0
+        MOV      a1,#1
+|L000160.J10.get_dht|
+        ADD      a3,v1,#&34
+        LDMIA    a3,{a2,a3}
+        CMP      a2,a3
+        MOVCS    a2,v5
+        BCS      |L000180.J11.get_dht|
+        LDRB     a3,[a2],#1
+        STR      a2,[v1,#&34]
+        MOV      a2,a3
+|L000180.J11.get_dht|
+        ADD      a3,sp,#&100
+        STRB     a2,[a3,a1]
+        ADD      a2,sp,#&100
+        LDRB     a2,[a2,a1]
+        ADD      v3,a2,v3
+        ADD      a1,a1,#1
+        CMP      a1,#&10
+        BLE      |L000160.J10.get_dht|
+        CMP      v3,#&100
+        MOVGT    a1,#&b9
+        ADDGT    a1,a1,#&4e00
+        BLGT     exit
+        MOV      a1,#0
+        CMP      v3,#0
+        BLE      |L0001ec.J18.get_dht|
+|L0001bc.J17.get_dht|
+        ADD      a3,v1,#&34
+        LDMIA    a3,{a2,a3}
+        CMP      a2,a3
+        MOVCS    a2,v5
+        BCS      |L0001dc.J20.get_dht|
+        LDRB     a3,[a2],#1
+        STR      a2,[v1,#&34]
+        MOV      a2,a3
+|L0001dc.J20.get_dht|
+        STRB     a2,[sp,a1]
+        ADD      a1,a1,#1
+        CMP      a1,v3
+        BLT      |L0001bc.J17.get_dht|
+|L0001ec.J18.get_dht|
+        ADD      a1,v3,#&11
+        SUB      v4,v4,a1
+        TST      v2,#&10
+        SUBNE    v2,v2,#&10
+        ADD      a1,v1,v2,LSL #2
+        ADDEQ    v3,a1,#&64
+        ADDNE    v3,a1,#&74
+        CMP      v2,#0
+        BLT      |L000218.J28.get_dht|
+        CMP      v2,#4
+        BLT      |L000224.J27.get_dht|
+|L000218.J28.get_dht|
+        MOV      a1,#&2c8
+        ADD      a1,a1,#&4c00
+        BL       exit
+|L000224.J27.get_dht|
+        ADD      a2,sp,#&100
+        MOV      a3,#&11
+        LDR      a1,[v3,#0]
+        BL       memcpy
+        LDR      a1,[v3,#0]
+        ADD      a1,a1,#&11
+        MOV      a2,sp
+        MOV      a3,#&100
+        BL       memcpy
+        CMP      v4,#0
+        BGT      |L000138.J4.get_dht|
+|L000250.J37.get_dht|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+get_dac
+        MOV      ip,sp
+        STMDB    sp!,{v1-v5,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       get_2bytes
+        SUB      v4,a1,#2
+        CMP      v4,#0
+        LDMLEDB  fp,{v1-v5,fp,sp,pc}^
+        MOV      v5,#&ff
+|L000278.J4.get_dac|
+        ADD      a2,v1,#&34
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        LDRCCB   a3,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a3,v5
+        MOV      v2,a3
+        LDR      a1,[v1,#&34]
+        CMP      a1,a2
+        LDRCCB   a2,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a2,v5
+        MOV      v3,a2
+        CMP      v2,#0
+        BLT      |L0002bc.J14.get_dac|
+        CMP      v2,#&20
+        BLT      |L0002c8.J13.get_dac|
+|L0002bc.J14.get_dac|
+        MOV      a1,#&2e8
+        ADD      a1,a1,#&4c00
+        BL       exit
+|L0002c8.J13.get_dac|
+        CMP      v2,#&10
+        MOVGE    a1,v3
+        ADDGE    a2,v1,v2
+        STRGEB   a1,[a2,#&94]
+        BGE      |L000304.J19.get_dac|
+        AND      a1,v3,#&f
+        ADD      a2,v1,v2
+        STRB     a1,[a2,#&84]
+        MOV      a3,v3,ASR #4
+        AND      a3,a3,#&ff
+        STRB     a3,[a2,#&94]
+        CMP      a1,a3
+        MOVGT    a1,#&ef0
+        ADDGT    a1,a1,#&4000
+        BLGT     exit
+|L000304.J19.get_dac|
+        SUB      v4,v4,#2
+        CMP      v4,#0
+        BGT      |L000278.J4.get_dac|
+        LDMDB    fp,{v1-v5,fp,sp,pc}^
+
+get_dqt
+        MOV      ip,sp
+        STMDB    sp!,{v1-v5,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       get_2bytes
+        SUB      v2,a1,#2
+        CMP      v2,#0
+        LDMLEDB  fp,{v1-v5,fp,sp,pc}^
+        MOV      v4,#&ff
+|L000338.J4.get_dqt|
+        ADD      a2,v1,#&34
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        MOVCS    a1,v4
+        BCS      |L000358.J7.get_dqt|
+        LDRB     a2,[a1],#1
+        STR      a1,[v1,#&34]
+        MOV      a1,a2
+|L000358.J7.get_dqt|
+        MOV      v3,a1,ASR #4
+        AND      v5,a1,#&f
+        CMP      v5,#4
+        MOVGE    a1,#&30c
+        ADDGE    a1,a1,#&4c00
+        BLGE     exit
+        ADD      a1,v1,v5,LSL #2
+        LDR      a4,[a1,#&54]!
+        MOV      a1,#0
+|L00037c.J12.get_dqt|
+        ADD      ip,v1,#&34
+        LDMIA    ip,{a3,ip}
+        CMP      a3,ip
+        LDRCCB   a2,[a3],#1
+        STRCC    a3,[v1,#&34]
+        MOVCS    a2,v4
+        MOV      a2,a2,LSL #16
+        MOV      a2,a2,LSR #16
+        TEQ      v3,#0
+        BEQ      |L0003c4.J16.get_dqt|
+        LDR      a3,[v1,#&34]
+        CMP      a3,ip
+        LDRCCB   ip,[a3],#1
+        STRCC    a3,[v1,#&34]
+        MOVCS    ip,v4
+        ADD      a2,ip,a2,LSL #8
+        MOV      a2,a2,LSL #16
+        MOV      a2,a2,LSR #16
+|L0003c4.J16.get_dqt|
+        STR      a2,[a4,a1,LSL #2]
+        ADD      a1,a1,#1
+        CMP      a1,#&40
+        BLT      |L00037c.J12.get_dqt|
+        MOV      a1,#0
+|L0003d8.J22.get_dqt|
+        ADD      a1,a1,#8
+        CMP      a1,#&40
+        BLT      |L0003d8.J22.get_dqt|
+        SUB      v2,v2,#&41
+        TEQ      v3,#0
+        SUBNE    v2,v2,#&40
+        CMP      v2,#0
+        BGT      |L000338.J4.get_dqt|
+        LDMDB    fp,{v1-v5,fp,sp,pc}^
+
+get_dri
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       get_2bytes
+        TEQ      a1,#4
+        MOVNE    a1,#&2d
+        ADDNE    a1,a1,#&4f00
+        BLNE     exit
+        MOV      a1,v1
+        BL       get_2bytes
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,LSR #16
+        STR      a1,[v1,#&bc]!
+        LDMDB    fp,{v1,fp,sp,pc}^
+
+get_app0
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        SUB      sp,sp,#&10
+        BL       get_2bytes
+        SUB      v2,a1,#2
+        CMP      v2,#&e
+        BLT      |L000508.J25.get_app0|
+        MOV      a1,#0
+        MOV      a2,#&ff
+|L000464.J6.get_app0|
+        LDR      a3,[v1,#&38]
+        LDR      a4,[v1,#&34]
+        CMP      a4,a3
+        LDRCCB   a3,[a4],#1
+        STRCC    a4,[v1,#&34]
+        MOVCS    a3,a2
+        STRB     a3,[sp,a1]
+        ADD      a1,a1,#1
+        CMP      a1,#&e
+        BLT      |L000464.J6.get_app0|
+        SUB      v2,v2,#&e
+        LDRB     a1,[sp,#0]
+        TEQ      a1,#&4a
+        LDREQB   a1,[sp,#1]
+        TEQEQ    a1,#&46
+        LDREQB   a1,[sp,#2]
+        TEQEQ    a1,#&49
+        LDREQB   a1,[sp,#3]
+        TEQEQ    a1,#&46
+        LDREQB   a1,[sp,#4]
+        TEQEQ    a1,#0
+        BNE      |L000508.J25.get_app0|
+        LDRB     a1,[sp,#5]
+        TEQ      a1,#1
+        MOVNE    a1,#&4d
+        ADDNE    a1,a1,#&4f00
+        BLNE     exit
+        LDRB     a1,[sp,#7]
+        STR      a1,[v1,#&40]
+        LDRB     a1,[sp,#9]
+        LDRB     a2,[sp,#8]
+        ADD      a1,a1,a2,LSL #8
+        STR      a1,[v1,#&44]
+        LDRB     a2,[sp,#&b]
+        LDRB     a1,[sp,#&a]
+        ADD      a1,a2,a1,LSL #8
+        STR      a1,[v1,#&48]
+        LDR      a1,[v1,#&1c]
+        TEQ      a1,#0
+        MOVEQ    a1,#3
+        STREQ    a1,[v1,#&1c]
+|L000508.J25.get_app0|
+        MOV      a1,v2
+        SUB      v2,v2,#1
+        CMP      a1,#0
+        BLE      |L00053c.J37.get_app0|
+        LDR      a2,[v1,#&38]
+|L00051c.J26.get_app0|
+        LDR      a1,[v1,#&34]
+        CMP      a1,a2
+        ADDCC    a1,a1,#1
+        STRCC    a1,[v1,#&34]
+        MOV      a1,v2
+        SUB      v2,v2,#1
+        CMP      a1,#0
+        BGT      |L00051c.J26.get_app0|
+|L00053c.J37.get_app0|
+        LDMDB    fp,{v1,v2,fp,sp,pc}^
+
+get_sof
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       get_2bytes
+        MOV      v3,a1
+        MOV      v2,#&ff
+        ADD      a2,v1,#&34
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        LDRCCB   a2,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a2,v2
+        STR      a2,[v1,#&3c]
+        MOV      a1,v1
+        BL       get_2bytes
+        STR      a1,[v1,#&18]
+        MOV      a1,v1
+        BL       get_2bytes
+        STR      a1,[v1,#&14]
+        MOV      a2,a1
+        ADD      a3,v1,#&34
+        LDMIA    a3,{a1,a3}
+        CMP      a1,a3
+        MOVCS    a1,v2
+        BCS      |L0005b4.J7.get_sof|
+        LDRB     a3,[a1],#1
+        STR      a1,[v1,#&34]
+        MOV      a1,a3
+|L0005b4.J7.get_sof|
+        STR      a1,[v1,#&4c]
+        LDR      a3,[v1,#&18]
+        CMP      a3,#0
+        CMPGT    a2,#0
+        CMPGT    a1,#0
+        MOVLE    a1,#&82
+        ADDLE    a1,a1,#&4f00
+        BLLE     exit
+        LDR      a1,[v1,#&3c]
+        TEQ      a1,#8
+        MOVNE    a1,#&86
+        ADDNE    a1,a1,#&4f00
+        BLNE     exit
+        LDR      a1,[v1,#&4c]
+        ADD      a1,a1,a1,LSL #1
+        ADD      a1,a1,#8
+        TEQ      a1,v3
+        MOVNE    a1,#&92
+        ADDNE    a1,a1,#&4f00
+        BLNE     exit
+        LDR      a1,[v1,#&4c]
+        CMP      a1,#3
+        MOVGT    a1,#&96
+        ADDGT    a1,a1,#&4f00
+        BLGT     exit
+        MOV      a1,#0
+        LDR      a2,[v1,#&4c]
+        CMP      a2,#0
+        LDMLEDB  fp,{v1-v3,fp,sp,pc}^
+        MOV      a2,#&f
+|L00062c.J21.get_sof|
+        RSB      a4,a1,a1,LSL #3
+        LDR      a3,[v1,#&50]
+        ADD      a3,a3,a4,LSL #3
+        STR      a1,[a3,#4]
+        ADD      ip,v1,#&34
+        LDMIA    ip,{a4,ip}
+        CMP      a4,ip
+        LDRCCB   ip,[a4],#1
+        STRCC    a4,[v1,#&34]
+        MOVCS    ip,v2
+        STR      ip,[a3,#0]
+        ADD      ip,v1,#&34
+        LDMIA    ip,{a4,ip}
+        CMP      a4,ip
+        MOVCS    a4,v2
+        BCS      |L00067c.J27.get_sof|
+        MOV      ip,a4
+        LDRB     a4,[a4,#0]
+        ADD      ip,ip,#1
+        STR      ip,[v1,#&34]
+|L00067c.J27.get_sof|
+        AND      ip,a2,a4,ASR #4
+        AND      a4,a4,#&f
+        STR      a4,[a3,#&c]
+        STR      ip,[a3,#8]
+        ADD      ip,v1,#&34
+        LDMIA    ip,{a4,ip}
+        CMP      a4,ip
+        LDRCCB   ip,[a4],#1
+        STRCC    a4,[v1,#&34]
+        MOVCS    ip,v2
+        ADD      a1,a1,#1
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        STR      ip,[a3,#&10]!
+        LDR      a3,[v1,#&4c]
+        CMP      a1,a3
+        BLT      |L00062c.J21.get_sof|
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+
+get_sos
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       get_2bytes
+        MOV      v4,#&ff
+        ADD      a3,v1,#&34
+        LDMIA    a3,{a2,a3}
+        CMP      a2,a3
+        LDRCCB   a3,[a2],#1
+        STRCC    a2,[v1,#&34]
+        MOVCS    a3,v4
+        MOV      v3,a3
+        SUB      v2,a1,#3
+        MOV      a1,#3
+        STR      a3,[v1,#&c8]
+        ADD      a1,a1,a3,LSL #1
+        TEQ      a1,v2
+        BNE      |L000720.J8.get_sos|
+        CMP      v3,#1
+        BLT      |L000720.J8.get_sos|
+        CMP      v3,#4
+        BLE      |L00072c.J7.get_sos|
+|L000720.J8.get_sos|
+        MOV      a1,#&3bc
+        ADD      a1,a1,#&4c00
+        BL       exit
+|L00072c.J7.get_sos|
+        MOV      v5,#0
+        CMP      v3,#0
+        BLE      |L0007e4.J13.get_sos|
+|L000738.J12.get_sos|
+        ADD      a2,v1,#&34
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        LDRCCB   a3,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a3,#&ff
+        LDR      a1,[v1,#&34]
+        CMP      a1,a2
+        LDRCCB   a2,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a2,#&ff
+        MOV      v6,a2
+        SUB      v2,v2,#2
+        MOV      v4,#0
+        LDR      a1,[v1,#&4c]
+        CMP      a1,#0
+        BLE      |L0007a0.J22.get_sos|
+        LDR      a2,[v1,#&50]
+|L000780.J21.get_sos|
+        RSB      a4,v4,v4,LSL #3
+        ADD      a4,a2,a4,LSL #3
+        LDR      a4,[a4,#0]
+        TEQ      a4,a3
+        BEQ      |L0007a0.J22.get_sos|
+        ADD      v4,v4,#1
+        CMP      v4,a1
+        BLT      |L000780.J21.get_sos|
+|L0007a0.J22.get_sos|
+        CMP      v4,a1
+        MOVGE    a1,#&ca
+        ADDGE    a1,a1,#&4f00
+        BLGE     exit
+        RSB      a1,v4,v4,LSL #3
+        LDR      a2,[v1,#&50]
+        ADD      a1,a2,a1,LSL #3
+        ADD      a2,v1,v5,LSL #2
+        STR      a1,[a2,#&cc]!
+        MOV      a2,#&f
+        AND      a2,a2,v6,ASR #4
+        STR      a2,[a1,#&14]
+        AND      a2,v6,#&f
+        ADD      v5,v5,#1
+        CMP      v5,v3
+        STR      a2,[a1,#&18]!
+        BLT      |L000738.J12.get_sos|
+|L0007e4.J13.get_sos|
+        CMP      v2,#0
+        LDMLEDB  fp,{v1-v6,fp,sp,pc}^
+        LDR      a1,[v1,#&38]
+|L0007f0.J30.get_sos|
+        LDR      a2,[v1,#&34]
+        CMP      a2,a1
+        ADDCC    a2,a2,#1
+        STRCC    a2,[v1,#&34]
+        SUB      v2,v2,#1
+        CMP      v2,#0
+        BGT      |L0007f0.J30.get_sos|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+get_soi
+        STMDB    sp!,{lr}
+        MOV      a2,#0
+        MOV      ip,#0
+        MOV      a4,#1
+        MOV      lr,#5
+|L000824.J4.get_soi|
+        ADD      a3,a1,a2
+        STRB     ip,[a3,#&84]
+        STRB     a4,[a3,#&94]
+        STRB     lr,[a3,#&a4]
+        ADD      a2,a2,#1
+        CMP      a2,#&10
+        BLT      |L000824.J4.get_soi|
+        STR      ip,[a1,#&bc]
+        STR      a4,[a1,#&44]
+        STR      ip,[a1,#&40]
+        STR      a4,[a1,#&48]!
+        STR      ip,[a1,#&70]!
+        LDMIA    sp!,{pc}^
+
+next_marker
+        MOV      a3,#&ff
+        LDR      a2,[a1,#&38]
+|L000860.J5.next_marker|
+        LDR      ip,[a1,#&34]
+        CMP      ip,a2
+        LDRCCB   a4,[ip],#1
+        STRCC    ip,[a1,#&34]
+        MOVCS    a4,a3
+        TEQ      a4,#&ff
+        BNE      |L000860.J5.next_marker|
+|L00087c.J10.next_marker|
+        LDR      ip,[a1,#&34]
+        CMP      ip,a2
+        LDRCCB   a4,[ip],#1
+        STRCC    ip,[a1,#&34]
+        MOVCS    a4,a3
+        TEQ      a4,#&ff
+        BEQ      |L00087c.J10.next_marker|
+        TEQ      a4,#0
+        BEQ      |L000860.J5.next_marker|
+        MOV      a1,a4
+        MOVS     pc,lr
+
+process_tables
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+|L0008b8.J4.process_tables|
+        MOV      a1,v1
+        BL       next_marker
+        MOV      a2,a1
+        CMP      a1,#&ce
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        BGT      |L000950.J39.process_tables|
+        CMP      a1,#&c6
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        BGT      |L000924.J42.process_tables|
+        CMP      a1,#&c2
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        BGT      |L000900.J45.process_tables|
+        TEQ      a1,#1
+        BEQ      |L0008b8.J4.process_tables|
+        TEQ      a1,#&c0
+        TEQNE    a1,#&c1
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        B        |L0009d4.J7.process_tables|
+|L000900.J45.process_tables|
+        TEQ      a1,#&c3
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        TEQ      a1,#&c4
+        MOVEQ    a1,v1
+        BLEQ     get_dht
+        BEQ      |L0008b8.J4.process_tables|
+        TEQ      a1,#&c5
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        B        |L0009d4.J7.process_tables|
+|L000924.J42.process_tables|
+        SUB      a3,a1,#&c7
+        CMP      a3,#6
+        ADDLS    pc,pc,a3,LSL #2
+        B        |L0009d4.J7.process_tables|
+        LDMDB    fp,{v1,fp,sp,pc}^
+        LDMDB    fp,{v1,fp,sp,pc}^
+        LDMDB    fp,{v1,fp,sp,pc}^
+        LDMDB    fp,{v1,fp,sp,pc}^
+        LDMDB    fp,{v1,fp,sp,pc}^
+        B        |L0009b0.J25.process_tables|
+        LDMDB    fp,{v1,fp,sp,pc}^
+|L000950.J39.process_tables|
+        SUB      a3,a1,#&cf
+        CMP      a3,#&11
+        ADDLS    pc,pc,a3,LSL #2
+        B        |L0009d4.J7.process_tables|
+        LDMDB    fp,{v1,fp,sp,pc}^
+        B        |L0008b8.J4.process_tables|
+        B        |L0008b8.J4.process_tables|
+        B        |L0008b8.J4.process_tables|
+        B        |L0008b8.J4.process_tables|
+        B        |L0008b8.J4.process_tables|
+        B        |L0008b8.J4.process_tables|
+        B        |L0008b8.J4.process_tables|
+        B        |L0008b8.J4.process_tables|
+        LDMDB    fp,{v1,fp,sp,pc}^
+        LDMDB    fp,{v1,fp,sp,pc}^
+        LDMDB    fp,{v1,fp,sp,pc}^
+        B        |L0009bc.J10.process_tables|
+        B        |L0009d4.J7.process_tables|
+        B        |L0009c8.J9.process_tables|
+        B        |L0009d4.J7.process_tables|
+        B        |L0009d4.J7.process_tables|
+        MOV      a1,v1
+        BL       get_app0
+        B        |L0008b8.J4.process_tables|
+|L0009b0.J25.process_tables|
+        MOV      a1,v1
+        BL       get_dac
+        B        |L0008b8.J4.process_tables|
+|L0009bc.J10.process_tables|
+        MOV      a1,v1
+        BL       get_dqt
+        B        |L0008b8.J4.process_tables|
+|L0009c8.J9.process_tables|
+        MOV      a1,v1
+        BL       get_dri
+        B        |L0008b8.J4.process_tables|
+|L0009d4.J7.process_tables|
+        MOV      a1,v1
+        BL       skip_variable
+        B        |L0008b8.J4.process_tables|
+
+read_file_header
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        LDR      a3,[a1,#&34]
+        LDR      a1,[a1,#&38]
+        MOV      a2,#&ff
+        CMP      a3,a1
+        LDRCCB   a1,[a3],#1
+        STRCC    a3,[v1,#&34]
+        MOVCS    a1,a2
+        TEQ      a1,#&ff
+        BNE      |L000a30.J5.read_file_header|
+        ADD      a3,v1,#&34
+        LDMIA    a3,{a1,a3}
+        CMP      a1,a3
+        LDRCCB   a2,[a1],#1
+        STRCC    a1,[v1,#&34]
+        TEQ      a2,#&d8
+        BEQ      |L000a3c.J4.read_file_header|
+|L000a30.J5.read_file_header|
+        MOV      a1,#&67
+        ADD      a1,a1,#&5000
+        BL       exit
+|L000a3c.J4.read_file_header|
+        MOV      a1,v1
+        BL       get_soi
+        MOV      a1,v1
+        BL       process_tables
+        MOV      v3,#0
+        MOV      v2,#1
+        TEQ      a1,#&c0
+        TEQNE    a1,#&c1
+        BEQ      |L000a7c.J17.read_file_header|
+        TEQ      a1,#&c9
+        BNE      |L000a90.J15.read_file_header|
+        MOV      a2,a1
+        MOV      a1,v1
+        BL       get_sof
+        STR      v2,[v1,#&b4]
+        B        |L000a9c.J14.read_file_header|
+|L000a7c.J17.read_file_header|
+        MOV      a2,a1
+        MOV      a1,v1
+        BL       get_sof
+        STR      v3,[v1,#&b4]
+        B        |L000a9c.J14.read_file_header|
+|L000a90.J15.read_file_header|
+        MOV      a1,#&7b
+        ADD      a1,a1,#&5000
+        BL       exit
+|L000a9c.J14.read_file_header|
+        LDR      a1,[v1,#&4c]
+        TEQ      a1,#1
+        STREQ    v2,[v1,#&1c]!
+        LDMEQDB  fp,{v1-v3,fp,sp,pc}^
+        TEQ      a1,#3
+        BEQ      |L000ac8.J25.read_file_header|
+        TEQ      a1,#4
+        STRNE    v3,[v1,#&1c]!
+        LDMNEDB  fp,{v1-v3,fp,sp,pc}^
+        MOV      a1,#5
+        B        |L000b28.J44.read_file_header|
+|L000ac8.J25.read_file_header|
+        LDR      a1,[v1,#&1c]
+        TEQ      a1,#0
+        LDMNEDB  fp,{v1-v3,fp,sp,pc}^
+        LDR      a2,[v1,#&50]
+        LDR      a1,[a2,#0]
+        MOV      a4,a1,LSL #16
+        MOV      a4,a4,ASR #16
+        LDR      a1,[a2,#&38]
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        LDR      a2,[a2,#&70]
+        MOV      a2,a2,LSL #16
+        MOV      a2,a2,ASR #16
+        MOV      a3,#3
+        CMP      a4,#1
+        BNE      |L000b14.J32.read_file_header|
+        TEQ      a1,#2
+        BEQ      |L000b30.J37.read_file_header|
+        B        |L000b18.J38.read_file_header|
+|L000b14.J32.read_file_header|
+        BNE      |L000b30.J37.read_file_header|
+|L000b18.J38.read_file_header|
+        TEQ      a1,#4
+        TEQEQ    a2,#5
+        BNE      |L000b30.J37.read_file_header|
+        MOV      a1,#4
+|L000b28.J44.read_file_header|
+        STR      a1,[v1,#&1c]!
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+|L000b30.J37.read_file_header|
+        STR      a3,[v1,#&1c]!
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+
+read_scan_header
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       process_tables
+        TEQ      a1,#&d9
+        BEQ      |L000b74.J4.read_scan_header|
+        TEQ      a1,#&da
+        MOVEQ    a1,v1
+        BLEQ     get_sos
+        MOVEQ    a1,#1
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        MOV      a1,#&be
+        ADD      a1,a1,#&5000
+        BL       exit
+|L000b74.J4.read_scan_header|
+        MOV      a1,#0
+        LDMDB    fp,{v1,fp,sp,pc}^
+
+        ;MPORT  huff_DECODE_buildshortcut
+        IMPORT  exit_c
+fix_huff_tbl
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        SUB      sp,sp,#&308
+        MOV      a2,#0
+        MOV      a3,#1
+|L000b9c.J4.fix_huff_tbl|
+        MOV      a1,#1
+        ADD      lr,v1,a3
+        LDRB     a4,[lr,#0]
+        CMP      a4,#1
+        BLT      |L000bd4.J6.fix_huff_tbl|
+        AND      a4,a3,#&ff
+|L000bb4.J5.fix_huff_tbl|
+        MOV      v3,a2
+        ADD      a2,a2,#1
+        ADD      ip,sp,#&204
+        STRB     a4,[ip,v3]
+        ADD      a1,a1,#1
+        LDRB     v3,[lr,#0]
+        CMP      v3,a1
+        BGE      |L000bb4.J5.fix_huff_tbl|
+|L000bd4.J6.fix_huff_tbl|
+        ADD      a3,a3,#1
+        CMP      a3,#&10
+        BLE      |L000b9c.J4.fix_huff_tbl|
+        MOV      v6,#0
+        ADD      a1,sp,#&204
+        STRB     v6,[a1,a2]
+        MOV      a1,#0
+        LDRB     a3,[sp,#&204]
+        MOV      a2,#0
+        LDRB     a4,[sp,#&204]
+        TEQ      a4,#0
+        BEQ      |L000c68.J11.fix_huff_tbl|
+|L000c04.J10.fix_huff_tbl|
+        ADD      a4,sp,#&204
+        LDRB     a4,[a4,a2]
+        TEQ      a4,a3
+        BNE      |L000c48.J14.fix_huff_tbl|
+|L000c14.J13.fix_huff_tbl|
+        MOV      a4,a2
+        ADD      a2,a2,#1
+        ADD      a4,sp,a4,LSL #1
+        STRB     a1,[a4,#0]
+        MOV      ip,a1,ASR #8
+        STRB     ip,[a4,#1]
+        ADD      a1,a1,#1
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,LSR #16
+        ADD      a4,sp,#&204
+        LDRB     a4,[a4,a2]
+        TEQ      a4,a3
+        BEQ      |L000c14.J13.fix_huff_tbl|
+|L000c48.J14.fix_huff_tbl|
+        MOV      a1,a1,LSL #1
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,LSR #16
+        ADD      a3,a3,#1
+        ADD      a4,sp,#&204
+        LDRB     a4,[a4,a2]
+        TEQ      a4,#0
+        BNE      |L000c04.J10.fix_huff_tbl|
+|L000c68.J11.fix_huff_tbl|
+        MOV      a2,#0
+        MOV      a3,#1
+        MVN      a1,#0
+|L000c74.J18.fix_huff_tbl|
+        ADD      v3,v1,a3
+        LDRB     a4,[v3,#0]
+        TEQ      a4,#0
+        BEQ      |L000cc8.J19.fix_huff_tbl|
+        ADD      lr,v1,a3,LSL #2
+        STR      a2,[lr,#&15c]
+        ADD      a4,lr,#&15c
+        LDR      v4,[sp,a2,LSL #1]
+        MOV      v4,v4,LSL #16
+        MOV      v4,v4,LSR #16
+        LDR      ip,[a4,#0]
+        SUB      v4,ip,v4
+        STR      v4,[a4,#0]
+        LDRB     a4,[v3,#0]
+        ADD      a2,a4,a2
+        ADD      a4,sp,a2,LSL #1
+        LDR      a4,[a4,#-2]
+        MOV      a4,a4,LSL #16
+        MOV      a4,a4,LSR #16
+        STR      a4,[lr,#&114]!
+        B        |L000cd0.J21.fix_huff_tbl|
+|L000cc8.J19.fix_huff_tbl|
+        ADD      a4,v1,a3,LSL #2
+        STR      a1,[a4,#&114]!
+|L000cd0.J21.fix_huff_tbl|
+        ADD      a3,a3,#1
+        CMP      a3,#&10
+        BLE      |L000c74.J18.fix_huff_tbl|
+        MVN      a2,#&ff00000
+        ADD      a2,a2,#&10000000
+        MOV      v3,#0
+        MOV      v5,#&20
+        STR      a2,[v1,#&158]
+|L000cf0.J23.fix_huff_tbl|
+        MOV      a1,v3,LSL #24
+        MOV      a2,v1
+        ADD      v2,v2,#&104
+        STMIA    v2,{a1,v5}
+        SUB      v2,v2,#&104
+        MOV      a1,v2
+        BL       huff_DECODE_buildshortcut
+        MOV      v4,a1
+        LDR      a1,[v2,#&108]
+        CMP      a1,#&18
+        MVNLT    a1,#0
+        BLT      |L000d3c.J39.fix_huff_tbl|
+        CMP      v4,#0
+        MOVLT    a2,#4
+        MOVLT    a1,#&69
+        BLLT     exit_c
+        LDR      a1,[v2,#&108]
+        SUB      a1,v5,a1
+        ORR      a1,v4,a1,LSL #24
+|L000d3c.J39.fix_huff_tbl|
+        ADD      a2,v1,v3,LSL #2
+        ADD      v3,v3,#1
+        CMP      v3,#&100
+        STR      a1,[a2,#&1a0]!
+        BLT      |L000cf0.J23.fix_huff_tbl|
+        STR      v6,[v2,#&108]
+        STR      v6,[v2,#&104]!
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+get_bits
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      v2,a2
+        LDR      a1,[a1,#&108]
+        CMP      a2,a1
+        BLE      |L000df0.J5.get_bits|
+        MOV      v3,#&ff
+|L000d80.J4.get_bits|
+        ADD      a2,v1,#&34
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        MOVCS    a1,v3
+        BCS      |L000da0.J7.get_bits|
+        LDRB     a3,[a1],#1
+        STR      a1,[v1,#&34]
+        MOV      a1,a3
+|L000da0.J7.get_bits|
+        LDR      a3,[v1,#&104]
+        ORR      a3,a1,a3,LSL #8
+        STR      a3,[v1,#&104]
+        LDR      a3,[v1,#&108]
+        ADD      a3,a3,#8
+        TEQ      a1,#&ff
+        STR      a3,[v1,#&108]
+        BNE      |L000de4.J10.get_bits|
+        LDR      a1,[v1,#&34]
+        CMP      a1,a2
+        LDRCCB   a2,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a2,v3
+        TEQ      a2,#0
+        MOVNE    a1,#&394
+        ADDNE    a1,a1,#&2400
+        BLNE     exit
+|L000de4.J10.get_bits|
+        LDR      a1,[v1,#&108]
+        CMP      v2,a1
+        BGT      |L000d80.J4.get_bits|
+|L000df0.J5.get_bits|
+        LDR      a1,[v1,#&108]
+        SUB      a1,a1,v2
+        STR      a1,[v1,#&108]
+        LDR      a2,[v1,#&104]!
+        MOV      a1,a2,ASR a1
+        MOV      a2,#1
+        MOV      a2,a2,LSL v2
+        SUB      a2,a2,#1
+        AND      a1,a1,a2
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+
+huff_DECODE_buildshortcut
+        MOV      ip,sp
+        STMDB    sp!,{v1-v4,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      v2,a2
+        LDR      a2,[a1,#&108]
+        TEQ      a2,#0
+        BEQ      |L000e50.J5.huff_DECODE_buildshortcut|
+        SUB      a2,a2,#1
+        STR      a2,[v1,#&108]
+        LDR      a1,[v1,#&104]
+        MOV      a1,a1,ASR a2
+        AND      a1,a1,#1
+        B        |L000e58.J4.huff_DECODE_buildshortcut|
+|L000e50.J5.huff_DECODE_buildshortcut|
+        MOV      a2,#1
+        BL       get_bits
+|L000e58.J4.huff_DECODE_buildshortcut|
+        MOV      v4,a1
+        MOV      v3,#1
+        B        |L000e9c.J8.huff_DECODE_buildshortcut|
+|L000e64.J7.huff_DECODE_buildshortcut|
+        LDR      a1,[v1,#&108]
+        TEQ      a1,#0
+        BEQ      |L000e88.J10.huff_DECODE_buildshortcut|
+        SUB      a1,a1,#1
+        STR      a1,[v1,#&108]
+        LDR      a2,[v1,#&104]
+        MOV      a1,a2,ASR a1
+        AND      a1,a1,#1
+        B        |L000e94.J9.huff_DECODE_buildshortcut|
+|L000e88.J10.huff_DECODE_buildshortcut|
+        MOV      a1,v1
+        MOV      a2,#1
+        BL       get_bits
+|L000e94.J9.huff_DECODE_buildshortcut|
+        ADD      v4,a1,v4,LSL #1
+        ADD      v3,v3,#1
+|L000e9c.J8.huff_DECODE_buildshortcut|
+        ADD      a1,v2,v3,LSL #2
+        LDR      a1,[a1,#&114]
+        CMP      a1,v4
+        BGE      |L000eb4.J12.huff_DECODE_buildshortcut|
+        CMP      v3,#8
+        BLE      |L000e64.J7.huff_DECODE_buildshortcut|
+|L000eb4.J12.huff_DECODE_buildshortcut|
+        CMP      v3,#8
+        MVNGT    a1,#0
+        LDMGTDB  fp,{v1-v4,fp,sp,pc}^
+        ADD      a1,v2,v3,LSL #2
+        LDR      a1,[a1,#&15c]
+        ADD      a1,a1,v4
+        ADD      a1,v2,a1
+        LDRB     a1,[a1,#&11]
+        LDMDB    fp,{v1-v4,fp,sp,pc}^
+
+huff_decoder_init
+        MOV      a2,#0
+        STR      a2,[a1,#&108]!
+        MOVS     pc,lr
+
+mono_convert_block
+        STMDB    sp!,{v1,lr}
+        MOV      ip,#0
+|L000eec.J4.mono_convert_block|
+        MOV      a4,#0
+|L000ef0.J5.mono_convert_block|
+        ADD      lr,ip,a4,LSL #3
+        LDR      lr,[a1,lr,LSL #2]
+        ADD      lr,lr,#&40000
+        MOV      lr,lr,ASR #19
+        ADDS     lr,lr,#&80
+        MOVMI    lr,#0
+        BMI      |L000f14.J8.mono_convert_block|
+        CMP      lr,#&ff
+        MOVGT    lr,#&ff
+|L000f14.J8.mono_convert_block|
+        ORR      v1,lr,lr,LSL #8
+        ORR      lr,v1,lr,LSL #16
+        STR      lr,[a2,a4,LSL #2]
+        ADD      a4,a4,#1
+        CMP      a4,#8
+        BLT      |L000ef0.J5.mono_convert_block|
+        ADD      a2,a2,a3,LSL #2
+        ADD      ip,ip,#1
+        CMP      ip,#8
+        BLT      |L000eec.J4.mono_convert_block|
+        LDMIA    sp!,{v1,pc}^
+
+mono_convert_pixel
+        ADDS     a1,a2,#&80
+        MOVMI    a1,#0
+        BMI      |L000f54.J6.mono_convert_pixel|
+        CMP      a1,#&ff
+        MOVGT    a1,#&ff
+|L000f54.J6.mono_convert_pixel|
+        ORR      a2,a1,a1,LSL #8
+        ORR      a1,a2,a1,LSL #16
+        MOVS     pc,lr
+
+colour_convert_block
+        MOV      ip,sp
+        STMDB    sp!,{a1-a3,v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        SUB      sp,sp,#&14
+        MOV      v5,a1
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#&10]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#&c]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#8]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#4]
+        ADD      a1,a1,#&100
+        MOV      a3,#0
+        STR      a1,[sp,#0]
+|L000fa0.J4.colour_convert_block|
+        MOV      a1,#0
+        AND      v3,a3,#7
+        MOV      v2,a3,ASR #1
+|L000fac.J5.colour_convert_block|
+        AND      a4,a1,#7
+        ADD      ip,v3,a4,LSL #3
+        CMP      a3,#8
+        BGE      |L000fcc.J7.colour_convert_block|
+        CMP      a1,#8
+        LDRGE    a4,[sp,#&10]
+        MOVLT    a4,v5
+        B        |L000fd8.J6.colour_convert_block|
+|L000fcc.J7.colour_convert_block|
+        CMP      a1,#8
+        LDRGE    a4,[sp,#8]
+        LDRLT    a4,[sp,#&c]
+|L000fd8.J6.colour_convert_block|
+        LDR      a4,[a4,ip,LSL #2]
+        MOV      ip,a1,ASR #1
+        ADD      ip,v2,ip,LSL #3
+        LDR      lr,[sp,#4]
+        LDR      lr,[lr,ip,LSL #2]
+        LDR      v1,[sp,#0]
+        LDR      ip,[v1,ip,LSL #2]
+        ADD      a4,a4,#&40000
+        MOV      a4,a4,ASR #19
+        ADD      a4,a4,#&80
+        ADD      lr,lr,#&40000
+        MOV      lr,lr,ASR #19
+        ADD      ip,ip,#&40000
+        MOV      v1,ip,ASR #19
+        ADD      v4,v1,v1,LSL #5
+        RSB      v4,v4,v4,LSL #3
+        ADD      v4,v4,v1,LSL #7
+        ADD      ip,lr,lr,LSL #1
+        ADD      ip,ip,lr,LSL #3
+        MOV      ip,ip,LSL #3
+        RSB      v6,ip,#0
+        ADD      ip,v1,v1,LSL #1
+        RSB      ip,ip,v1,LSL #6
+        ADD      ip,ip,ip,LSL #1
+        SUB      v1,v6,ip
+        ADD      ip,lr,lr,LSL #5
+        RSB      ip,ip,lr,LSL #8
+        ADD      ip,ip,lr,LSL #2
+        MOV      ip,ip,LSL #1
+        ADD      lr,v4,#&80
+        ADDS     lr,a4,lr,ASR #8
+        MOVMI    lr,#0
+        BMI      |L001064.J15.colour_convert_block|
+        CMP      lr,#&ff
+        MOVGT    lr,#&ff
+|L001064.J15.colour_convert_block|
+        ADD      v1,v1,#&80
+        ADDS     v1,a4,v1,ASR #8
+        MOVMI    v1,#0
+        BMI      |L00107c.J19.colour_convert_block|
+        CMP      v1,#&ff
+        MOVGT    v1,#&ff
+|L00107c.J19.colour_convert_block|
+        ADD      ip,ip,#&80
+        ADDS     a4,a4,ip,ASR #8
+        MOVMI    a4,#0
+        BMI      |L001094.J23.colour_convert_block|
+        CMP      a4,#&ff
+        MOVGT    a4,#&ff
+|L001094.J23.colour_convert_block|
+        ORR      ip,lr,v1,LSL #8
+        ORR      a4,ip,a4,LSL #16
+        STR      a4,[a2,a1,LSL #2]
+        ADD      a1,a1,#1
+        CMP      a1,#&10
+        BLT      |L000fac.J5.colour_convert_block|
+        LDR      a1,[fp,#-&28]
+        ADD      a2,a2,a1,LSL #2
+        ADD      a3,a3,#1
+        CMP      a3,#&10
+        BLT      |L000fa0.J4.colour_convert_block|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+colour_convert_unusual_block
+        MOV      ip,sp
+        STMDB    sp!,{a1-a4}
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#&14
+        SUB      sp,sp,#&20
+        LDR      v3,[fp,#&14]
+        STR      a1,[sp,#&14]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#&10]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#&c]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#8]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#4]
+        ADD      a1,a1,#&100
+        MOV      a3,#0
+        CMP      a3,v3,LSL #3
+        STR      a1,[sp,#0]
+        BGE      |L001254.J35.colour_convert_unusual_block|
+        SUB      a1,a4,#1
+        STR      a1,[sp,#&1c]
+|L00111c.J4.colour_convert_unusual_block|
+        MOV      a1,#0
+        CMP      a1,a4,LSL #3
+        BGE      |L001240.J8.colour_convert_unusual_block|
+        AND      v4,a3,#7
+        SUB      lr,v3,#1
+        MOV      ip,a3,ASR lr
+        STR      ip,[sp,#&18]
+|L001138.J7.colour_convert_unusual_block|
+        AND      ip,a1,#7
+        ADD      lr,v4,ip,LSL #3
+        CMP      a3,#8
+        BGE      |L001158.J11.colour_convert_unusual_block|
+        CMP      a1,#8
+        LDRGE    ip,[sp,#&10]
+        LDRLT    ip,[sp,#&14]
+        B        |L001164.J10.colour_convert_unusual_block|
+|L001158.J11.colour_convert_unusual_block|
+        CMP      a1,#8
+        LDRGE    ip,[sp,#8]
+        LDRLT    ip,[sp,#&c]
+|L001164.J10.colour_convert_unusual_block|
+        LDR      lr,[ip,lr,LSL #2]
+        LDR      v1,[sp,#&1c]
+        MOV      v1,a1,ASR v1
+        LDR      ip,[sp,#&18]
+        ADD      ip,ip,v1,LSL #3
+        LDR      v1,[sp,#4]
+        LDR      v1,[v1,ip,LSL #2]
+        LDR      v2,[sp,#0]
+        LDR      ip,[v2,ip,LSL #2]
+        ADD      lr,lr,#&40000
+        MOV      lr,lr,ASR #19
+        ADD      lr,lr,#&80
+        ADD      v1,v1,#&40000
+        MOV      v1,v1,ASR #19
+        ADD      ip,ip,#&40000
+        MOV      v2,ip,ASR #19
+        ADD      v5,v2,v2,LSL #5
+        RSB      v5,v5,v5,LSL #3
+        ADD      v5,v5,v2,LSL #7
+        ADD      ip,v1,v1,LSL #1
+        ADD      ip,ip,v1,LSL #3
+        MOV      ip,ip,LSL #3
+        RSB      v6,ip,#0
+        ADD      ip,v2,v2,LSL #1
+        RSB      ip,ip,v2,LSL #6
+        ADD      ip,ip,ip,LSL #1
+        SUB      v2,v6,ip
+        ADD      ip,v1,v1,LSL #5
+        RSB      ip,ip,v1,LSL #8
+        ADD      ip,ip,v1,LSL #2
+        MOV      ip,ip,LSL #1
+        ADD      v1,v5,#&80
+        ADDS     v1,lr,v1,ASR #8
+        MOVMI    v1,#0
+        BMI      |L0011f8.J19.colour_convert_unusual_block|
+        CMP      v1,#&ff
+        MOVGT    v1,#&ff
+|L0011f8.J19.colour_convert_unusual_block|
+        ADD      v2,v2,#&80
+        ADDS     v2,lr,v2,ASR #8
+        MOVMI    v2,#0
+        BMI      |L001210.J23.colour_convert_unusual_block|
+        CMP      v2,#&ff
+        MOVGT    v2,#&ff
+|L001210.J23.colour_convert_unusual_block|
+        ADD      ip,ip,#&80
+        ADDS     ip,lr,ip,ASR #8
+        MOVMI    ip,#0
+        BMI      |L001228.J27.colour_convert_unusual_block|
+        CMP      ip,#&ff
+        MOVGT    ip,#&ff
+|L001228.J27.colour_convert_unusual_block|
+        ORR      lr,v1,v2,LSL #8
+        ORR      ip,lr,ip,LSL #16
+        STR      ip,[a2,a1,LSL #2]
+        ADD      a1,a1,#1
+        CMP      a1,a4,LSL #3
+        BLT      |L001138.J7.colour_convert_unusual_block|
+|L001240.J8.colour_convert_unusual_block|
+        LDR      a1,[fp,#&c]
+        ADD      a2,a2,a1,LSL #2
+        ADD      a3,a3,#1
+        CMP      a3,v3,LSL #3
+        BLT      |L00111c.J4.colour_convert_unusual_block|
+|L001254.J35.colour_convert_unusual_block|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+colour_convert_pixels
+        STMDB    sp!,{v1-v3,lr}
+        ADD      a2,a2,#4
+        MOV      a2,a2,ASR #3
+        ADD      a3,a3,#4
+        MOV      a3,a3,ASR #3
+        ADD      a4,a3,a3,LSL #5
+        RSB      a4,a4,a4,LSL #3
+        ADD      a4,a4,a3,LSL #7
+        ADD      ip,a2,a2,LSL #1
+        ADD      ip,ip,a2,LSL #3
+        MOV      ip,ip,LSL #3
+        RSB      lr,ip,#0
+        ADD      ip,a3,a3,LSL #1
+        RSB      a3,ip,a3,LSL #6
+        ADD      a3,a3,a3,LSL #1
+        SUB      a3,lr,a3
+        ADD      ip,a2,a2,LSL #5
+        RSB      ip,ip,a2,LSL #8
+        ADD      a2,ip,a2,LSL #2
+        MOV      a2,a2,LSL #1
+        ADD      a4,a4,#&80
+        MOV      v2,a4,ASR #8
+        ADD      a3,a3,#&80
+        MOV      v1,a3,ASR #8
+        ADD      a2,a2,#&80
+        MOV      lr,a2,ASR #8
+        MOV      a4,#0
+        MOV      v3,#&80
+|L0012c8.J4.colour_convert_pixels|
+        LDR      a2,[a1,a4,LSL #2]
+        ADD      a2,a2,#4
+        ADD      ip,v3,a2,ASR #3
+        ADDS     a3,v2,ip
+        MOVMI    a3,#0
+        BMI      |L0012e8.J7.colour_convert_pixels|
+        CMP      a3,#&ff
+        MOVGT    a3,#&ff
+|L0012e8.J7.colour_convert_pixels|
+        ADDS     a2,v1,ip
+        MOVMI    a2,#0
+        BMI      |L0012fc.J11.colour_convert_pixels|
+        CMP      a2,#&ff
+        MOVGT    a2,#&ff
+|L0012fc.J11.colour_convert_pixels|
+        ADDS     ip,lr,ip
+        MOVMI    ip,#0
+        BMI      |L001310.J15.colour_convert_pixels|
+        CMP      ip,#&ff
+        MOVGT    ip,#&ff
+|L001310.J15.colour_convert_pixels|
+        ORR      a2,a3,a2,LSL #8
+        ORR      a2,a2,ip,LSL #16
+        STR      a2,[a1,a4,LSL #2]
+        ADD      a4,a4,#1
+        CMP      a4,#4
+        BLT      |L0012c8.J4.colour_convert_pixels|
+        LDMIA    sp!,{v1-v3,pc}^
+
+        EXPORT  assembler_panic
+assembler_panic
+        MOVS     pc,lr
+
+init_workspace
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      a3,a2
+        MOV      a2,#0
+        LDR      v2,[a1,#&20]
+        LDR      v3,[a1,#&10]
+        BL       memset
+        STR      v2,[v1,#&20]
+        STR      v3,[v1,#&10]
+        ADD      a1,v1,#&1c
+        ADD      a1,a1,#&800
+        STR      a1,[v1,#&50]
+        MOV      a1,#0
+|L00136c.J4.init_workspace|
+        ADD      a2,v1,a1,LSL #8
+        ADD      a2,a2,#&fc
+        ADD      a2,a2,#&800
+        ADD      a3,v1,a1,LSL #2
+        ADD      a1,a1,#1
+        CMP      a1,#4
+        STR      a2,[a3,#&54]!
+        BLT      |L00136c.J4.init_workspace|
+        MOV      a1,#0
+|L001390.J6.init_workspace|
+        RSB      a2,a1,a1,LSL #4
+        ADD      a2,a2,a2,LSL #1
+        ADD      a3,v1,a2,LSL #5
+        SUB      a4,a3,#&304
+        ADD      a4,a4,#&1000
+        ADD      a2,v1,a1,LSL #2
+        ADD      a3,a3,#&37c
+        ADD      a3,a3,#&2000
+        ADD      a1,a1,#1
+        CMP      a1,#4
+        STR      a4,[a2,#&64]!
+        STR      a3,[a2,#&10]
+        BLT      |L001390.J6.init_workspace|
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+
+save_huff_stream
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      v2,a2
+        LDR      a1,[a1,#&108]
+        CMP      a1,#&20
+        MOVGE    a2,#2
+        MOVGE    a1,#&d8
+        BLGE     exit_c
+        LDR      a1,[v1,#&108]
+        CMP      a1,#0
+        MOVLT    a2,#2
+        MOVLT    a1,#&d9
+        BLLT     exit_c
+        LDR      a1,[v1,#&34]
+        LDR      a2,[v1,#&30]
+        CMP      a2,a1
+        MOVCS    a2,#2
+        MOVCS    a1,#&da
+        BLCS     exit_c
+        LDR      a1,[v1,#&38]
+        LDR      a2,[v1,#&34]
+        CMP      a2,a1
+        MOVCS    a2,#2
+        MOVCS    a1,#&db
+        BLCS     exit_c
+        ADD      a2,v1,#&30
+        LDMIA    a2,{a1,a2}
+        SUB      a1,a2,a1
+        LDR      a2,[v1,#&108]
+        ADD      a1,a2,a1,LSL #5
+        STR      a1,[v2,#0]
+        LDR      a1,[v1,#&104]
+        STR      a1,[v2,#4]
+        LDR      a1,[v1,#&e4]
+        STRB     a1,[v2,#8]
+        MOV      a1,a1,ASR #8
+        STRB     a1,[v2,#9]
+        LDR      a1,[v1,#&e8]
+        STRB     a1,[v2,#&a]
+        MOV      a1,a1,ASR #8
+        STRB     a1,[v2,#&b]
+        LDR      a1,[v1,#&ec]
+        STRB     a1,[v2,#&c]
+        MOV      a1,a1,ASR #8
+        STRB     a1,[v2,#&d]
+        LDR      a1,[v1,#&c0]
+        STRB     a1,[v2,#&10]
+        MOV      a1,a1,ASR #8
+        STRB     a1,[v2,#&11]
+        LDR      a1,[v1,#&c4]!
+        STRB     a1,[v2,#&12]
+        MOV      a1,a1,ASR #8
+        STRB     a1,[v2,#&13]
+        LDMDB    fp,{v1,v2,fp,sp,pc}^
+
+restore_huff_stream
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        LDR      a1,[a2,#4]
+        STR      a1,[v1,#&104]
+        LDR      a1,[a2,#0]
+        CMP      a1,#0
+        ADDLT    a1,a1,#&1f
+        LDR      a3,[v1,#&30]
+        ADD      a1,a3,a1,ASR #5
+        STR      a1,[v1,#&34]
+        LDR      a1,[a2,#0]
+        AND      a1,a1,#&1f
+        STR      a1,[v1,#&108]
+        LDR      a1,[a2,#8]
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        STR      a1,[v1,#&e4]
+        LDR      a1,[a2,#&a]
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        STR      a1,[v1,#&e8]
+        LDR      a1,[a2,#&c]
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        STR      a1,[v1,#&ec]
+        LDR      a1,[a2,#&10]
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        STR      a1,[v1,#&c0]
+        LDR      a1,[a2,#&12]
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        STR      a1,[v1,#&c4]
+        ADD      a2,v1,#&30
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        MOVCS    a2,#4
+        MOVCS    a1,#&fa
+        BLCS     exit_c
+        ADD      v1,v1,#&30
+        LDMIB    v1!,{a1,a2}
+        CMP      a1,a2
+        MOVCS    a2,#4
+        MOVCS    a1,#&fb
+        LDMCSDB  fp,{v1,fp,sp,lr}
+        BCS      exit_c
+        LDMDB    fp,{v1,fp,sp,pc}^
+
+process_restart
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        LDR      a1,[a1,#&34]
+        LDRB     v2,[a1],#1
+        STR      a1,[v1,#&34]
+        LDR      a1,[v1,#&108]
+        CMP      a1,#7
+        MOVGT    a2,#2
+        MOVGT    a1,#&12
+        ADDGT    a1,a1,#&100
+        BLGT     exit_c
+        TEQ      v2,#&ff
+        MOVNE    a2,#2
+        MOVNE    a1,#&13
+        ADDNE    a1,a1,#&100
+        BLNE     exit_c
+        LDR      a1,[v1,#&34]
+        LDRB     a1,[a1,#0]
+        TEQ      a1,#&ff
+        BNE      |L0015dc.J9.process_restart|
+|L0015c4.J8.process_restart|
+        LDR      a1,[v1,#&34]
+        ADD      a1,a1,#1
+        STR      a1,[v1,#&34]
+        LDRB     a1,[a1,#0]
+        TEQ      a1,#&ff
+        BEQ      |L0015c4.J8.process_restart|
+|L0015dc.J9.process_restart|
+        LDR      a1,[v1,#&34]
+        LDRB     v2,[a1],#1
+        STR      a1,[v1,#&34]
+        AND      a1,v2,#&f8
+        TEQ      a1,#&d0
+        MOVNE    a2,#2
+        MOVNE    a1,#&16
+        ADDNE    a1,a1,#&100
+        BLNE     exit_c
+        AND      a2,v2,#7
+        LDR      a1,[v1,#&c4]
+        TEQ      a2,a1
+        MOVNE    a2,#2
+        MOVNE    a1,#&17
+        ADDNE    a1,a1,#&100
+        BLNE     exit_c
+        MOV      a2,#0
+        STR      a2,[v1,#&108]
+        STR      a2,[v1,#&104]
+        LDR      a1,[v1,#&bc]
+        STR      a1,[v1,#&c0]
+        LDR      a1,[v1,#&c4]
+        ADD      a1,a1,#1
+        AND      a1,a1,#7
+        STR      a1,[v1,#&c4]
+        MOV      a1,#0
+        LDR      a3,[v1,#&c8]
+        CMP      a3,#0
+        LDMLEDB  fp,{v1,v2,fp,sp,pc}^
+|L001650.J16.process_restart|
+        ADD      a3,v1,a1,LSL #2
+        ADD      a1,a1,#1
+        STR      a2,[a3,#&e4]!
+        LDR      a3,[v1,#&c8]
+        CMP      a1,a3
+        BLT      |L001650.J16.process_restart|
+        LDMDB    fp,{v1,v2,fp,sp,pc}^
+
+        IMPORT  asm_huff_skip_blocks
+do_huff_skip_blocks
+        MOV      ip,sp
+        STMDB    sp!,{a1-a4}
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#&14
+        MOV      v1,a1
+        MOV      v2,a2
+        MOV      v3,a3
+        LDR      v4,[fp,#&1c]
+        LDR      v5,[fp,#&18]
+        LDR      v6,[fp,#&14]
+        LDR      a2,[a1,#&bc]
+        TEQ      a2,#0
+        BEQ      |L001710.J4.do_huff_skip_blocks|
+        CMP      v4,#0
+        LDMLEDB  fp,{v1-v6,fp,sp,pc}^
+        B        |L0016b4.J10.do_huff_skip_blocks|
+|L0016ac.J6.do_huff_skip_blocks|
+        TEQ      a1,#0
+        BEQ      |L0016d0.J9.do_huff_skip_blocks|
+|L0016b4.J10.do_huff_skip_blocks|
+        LDR      a1,[v1,#&c0]
+        TEQ      a1,#0
+        MOVEQ    a1,v1
+        BLEQ     process_restart
+        LDR      a1,[v1,#&c0]
+        SUB      a1,a1,#1
+        STR      a1,[v1,#&c0]
+|L0016d0.J9.do_huff_skip_blocks|
+        MOV      a4,#1
+        MOV      a3,v5
+        MOV      a2,v6
+        STMDB    sp!,{a2-a4}
+        MOV      a3,v3
+        MOV      a2,v2
+        MOV      a1,v1
+        LDR      a4,[fp,#&10]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        SUB      v4,v4,#1
+        ADD      v2,v2,#&100
+        CMP      v4,#0
+        LDR      a1,[fp,#&20]
+        BGT      |L0016ac.J6.do_huff_skip_blocks|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+|L001710.J4.do_huff_skip_blocks|
+        MOV      a4,v4
+        MOV      a3,v5
+        MOV      a2,v6
+        STMDB    sp!,{a2-a4}
+        MOV      a3,v3
+        MOV      a2,v2
+        LDR      a4,[fp,#&10]
+        BL       asm_huff_skip_blocks
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+        IMPORT  asm_huff_decode_blocks
+do_huff_decode_blocks
+        MOV      ip,sp
+        STMDB    sp!,{a1-a4}
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#&14
+        MOV      v1,a1
+        MOV      v2,a2
+        MOV      v3,a3
+        LDR      v4,[fp,#&1c]
+        LDR      v5,[fp,#&18]
+        LDR      v6,[fp,#&14]
+        LDR      a2,[a1,#&bc]
+        TEQ      a2,#0
+        BEQ      |L0017d8.J4.do_huff_decode_blocks|
+        CMP      v4,#0
+        LDMLEDB  fp,{v1-v6,fp,sp,pc}^
+        B        |L00177c.J10.do_huff_decode_blocks|
+|L001774.J6.do_huff_decode_blocks|
+        TEQ      a1,#0
+        BEQ      |L001798.J9.do_huff_decode_blocks|
+|L00177c.J10.do_huff_decode_blocks|
+        LDR      a1,[v1,#&c0]
+        TEQ      a1,#0
+        MOVEQ    a1,v1
+        BLEQ     process_restart
+        LDR      a1,[v1,#&c0]
+        SUB      a1,a1,#1
+        STR      a1,[v1,#&c0]
+|L001798.J9.do_huff_decode_blocks|
+        MOV      a4,#1
+        MOV      a3,v5
+        MOV      a2,v6
+        STMDB    sp!,{a2-a4}
+        MOV      a3,v3
+        MOV      a2,v2
+        MOV      a1,v1
+        LDR      a4,[fp,#&10]
+        BL       asm_huff_decode_blocks
+        ADD      sp,sp,#&c
+        SUB      v4,v4,#1
+        ADD      v2,v2,#&100
+        CMP      v4,#0
+        LDR      a1,[fp,#&20]
+        BGT      |L001774.J6.do_huff_decode_blocks|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+|L0017d8.J4.do_huff_decode_blocks|
+        MOV      a4,v4
+        MOV      a3,v5
+        MOV      a2,v6
+        STMDB    sp!,{a2-a4}
+        MOV      a3,v3
+        MOV      a2,v2
+        LDR      a4,[fp,#&10]
+        BL       asm_huff_decode_blocks
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+        ;MPORT  jpeg_scan_file
+do_jpeg_scan_file
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      lr,a3
+        MOV      ip,a4
+        MOV      v1,a1
+        STR      a2,[a1,#&10]
+        MVN      a1,#0
+        MOV      a4,#0
+        MVN      a3,#0
+        MVN      a2,#0
+        STR      a1,[v1,#0]
+        MVN      a1,#&80000000
+        STMDB    sp!,{a1-a4}
+        MOV      a3,ip
+        MOV      a2,lr
+        MOV      a1,v1
+        BL       jpeg_scan_file
+        LDMDB    fp,{v1,fp,sp,pc}^
+
+do_jpeg_scan_file_16
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      lr,a3
+        MOV      ip,a4
+        MOV      v1,a1
+        STR      a2,[a1,#&10]
+        MVN      a1,#0
+        MOV      a4,#&10
+        MVN      a3,#0
+        MVN      a2,#0
+        STR      a1,[v1,#0]
+        MVN      a1,#&80000000
+        STMDB    sp!,{a1-a4}
+        MOV      a3,ip
+        MOV      a2,lr
+        MOV      a1,v1
+        MOV      a4,#0
+        BL       jpeg_scan_file
+        LDMDB    fp,{v1,fp,sp,pc}^
+
+        IMPORT  |__rt_sdiv|
+jpeg_scan_file
+        MOV      ip,sp
+        STMDB    sp!,{a1-a4}
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#&14
+        MOV      v1,a1
+        MOV      v5,a2
+        MOV      v4,a3
+        MOV      v3,a4
+        SUB      sp,sp,#&20
+        LDR      v2,[fp,#&20]
+        TST      v2,#2
+        LDR      v6,[fp,#&14]
+        BICNE    v2,v2,#&38
+        CMP      v3,#0
+        MOVLT    v3,#0
+        TST      v2,#&28
+        BEQ      |L0018ec.J8.jpeg_scan_file|
+        SUBS     v3,v3,#&10
+        MOVMI    v3,#0
+        BIC      v3,v3,#&f
+        ADD      v6,v6,#&10
+|L0018ec.J8.jpeg_scan_file|
+        LDR      a2,[v1,#0]
+        CMP      a2,#0
+        BNE      |L0019fc.J12.jpeg_scan_file|
+        LDR      a2,[v1,#&30]
+        TEQ      a2,v5
+        BNE      |L001a04.J42.jpeg_scan_file|
+        LDR      a3,[v1,#&38]
+        SUB      a2,a3,a2
+        TEQ      a2,v4
+        BNE      |L001a04.J42.jpeg_scan_file|
+        LDR      a2,[fp,#&18]
+        CMN      a2,#1
+        LDRNE    a2,[v1,#&14]
+        LDRNE    a3,[fp,#&18]
+        TEQNE    a2,a3
+        BNE      |L001a04.J42.jpeg_scan_file|
+        LDR      a2,[fp,#&1c]
+        CMN      a2,#1
+        LDRNE    a2,[v1,#&18]
+        LDRNE    a3,[fp,#&1c]
+        TEQNE    a2,a3
+        BNE      |L001a04.J42.jpeg_scan_file|
+        MOVS     a2,v4
+        ADDMI    a2,a2,#7
+        MOV      a2,a2,ASR #3
+        LDR      a2,[v5,a2,LSL #2]
+        LDR      a3,[v1,#&10c]
+        TEQ      a2,a3
+        BNE      |L001a04.J42.jpeg_scan_file|
+        MOV      a3,v4
+        CMP      v4,#0
+        ADDLT    a3,a3,#3
+        MOV      a3,a3,ASR #2
+        MOV      a2,v4
+        ADDLT    a2,a2,#&f
+        SUB      a2,a3,a2,ASR #4
+        LDR      a3,[v5,a2,LSL #2]
+        LDR      a2,[v1,#&110]
+        TEQ      a3,a2
+        BNE      |L001a04.J42.jpeg_scan_file|
+        MOV      a2,v4
+        CMP      v4,#0
+        ADDLT    a2,a2,#3
+        MOV      a2,a2,ASR #2
+        MOV      a3,v4
+        ADDLT    a3,a3,#&1f
+        SUB      a2,a2,a3,ASR #5
+        LDR      a3,[v5,a2,LSL #2]
+        LDR      a2,[v1,#&114]
+        TEQ      a3,a2
+        LDREQ    a2,[v1,#&100]
+        TEQEQ    a2,v2
+        BNE      |L001a04.J42.jpeg_scan_file|
+        LDR      a1,[v1,#&14]
+        CMP      v6,a1
+        MOVGT    v6,a1
+        LDR      a1,[v1,#&f8]
+        CMP      v3,a1
+        BLT      |L0019e4.J39.jpeg_scan_file|
+        LDR      a1,[v1,#&fc]
+        CMP      v6,a1
+        BLE      |L0019ec.J38.jpeg_scan_file|
+|L0019e4.J39.jpeg_scan_file|
+        MVN      a1,#0
+        STR      a1,[v1,#&f4]
+|L0019ec.J38.jpeg_scan_file|
+        MOV      a1,#0
+        ADD      v1,v1,#&f4
+        STMIB    v1!,{v3,v6}
+        B        |L002040.J135.jpeg_scan_file|
+|L0019fc.J12.jpeg_scan_file|
+        MOVLT    a2,#0
+        STRLT    a2,[v1,#&20]
+|L001a04.J42.jpeg_scan_file|
+        LDR      a2,[v1,#&10]
+        BL       init_workspace
+        LDR      a1,[v1,#&10]
+        TEQ      a1,#0
+        STREQ    a1,[v1,#&28]
+        LDREQ    a1,[pc, #L001b48-.-8]
+        BEQ      |L001a3c.J134.jpeg_scan_file|
+        ADD      a2,v1,#&1fc
+        ADD      a2,a2,#&3800
+        ADD      a1,a1,#&204
+        SUB      a1,a1,#&3c00
+        MOV      a1,a1,LSR #2
+        BIC      a1,a1,#&f
+        STR      a2,[v1,#&28]
+|L001a3c.J134.jpeg_scan_file|
+        STR      a1,[v1,#&2c]
+        MOV      a1,v4
+        CMP      v4,#0
+        ADDLT    a1,a1,#7
+        MOV      a1,a1,ASR #3
+        LDR      a1,[v5,a1,LSL #2]
+        MOV      a2,v4
+        STR      a1,[v1,#&10c]
+        ADDLT    a2,a2,#3
+        MOV      a2,a2,ASR #2
+        MOV      a1,v4
+        ADDLT    a1,a1,#&f
+        SUB      a1,a2,a1,ASR #4
+        LDR      a1,[v5,a1,LSL #2]
+        MOV      a2,v4
+        STR      a1,[v1,#&110]
+        ADDLT    a2,a2,#3
+        MOV      a2,a2,ASR #2
+        MOV      a1,v4
+        ADDLT    a1,a1,#&1f
+        SUB      a1,a2,a1,ASR #5
+        LDR      a1,[v5,a1,LSL #2]
+        STR      a1,[v1,#&114]
+        STR      v5,[v1,#&30]
+        STR      v5,[v1,#&34]
+        ADD      a1,v5,v4
+        STR      a1,[v1,#&38]
+        MOV      a1,v1
+        BL       read_file_header
+        MOV      a1,v1
+        BL       read_scan_header
+        MOV      v4,#0
+|L001abc.J57.jpeg_scan_file|
+        ADD      v5,v1,v4,LSL #2
+        MOV      a1,v1
+        LDR      a2,[v5,#&64]
+        BL       fix_huff_tbl
+        MOV      a1,v1
+        LDR      a2,[v5,#&74]!
+        BL       fix_huff_tbl
+        ADD      v4,v4,#1
+        CMP      v4,#4
+        BLT      |L001abc.J57.jpeg_scan_file|
+        MOV      a1,v1
+        BL       huff_decoder_init
+        MVN      a1,#0
+        STR      a1,[v1,#&f4]
+        LDR      a1,[v1,#&bc]
+        STR      a1,[v1,#&c0]
+        MOV      a1,#0
+        STR      a1,[v1,#&c4]
+        LDR      v4,[v1,#&14]
+        CMP      v6,v4
+        MOVGT    v6,v4
+        CMP      v3,v6
+        MOVGT    v3,v6
+        STR      v2,[v1,#&100]
+        ADD      v1,v1,#&f8
+        STMIA    v1,{v3,v6}
+        SUB      v1,v1,#&f8
+        LDR      a1,[v1,#&3c]
+        TEQ      a1,#8
+        BEQ      |L001b4c.J63.jpeg_scan_file|
+        MOV      a2,#1
+        STR      a1,[v1,#4]
+        STR      a2,[v1,#0]
+        MOV      a1,#1
+        B        |L002040.J135.jpeg_scan_file|
+L001b48
+        DCD     &05f5e100
+|L001b4c.J63.jpeg_scan_file|
+        LDR      a1,[v1,#&c8]
+        LDR      v3,[v1,#&4c]
+        TEQ      v3,a1
+        MOVNE    a1,#3
+        STRNE    a1,[v1,#0]
+        BNE      |L002040.J135.jpeg_scan_file|
+        LDR      a1,[fp,#&18]
+        TEQ      v4,a1
+        LDRNE    a1,[fp,#&18]
+        CMNNE    a1,#1
+        BEQ      |L001b84.J67.jpeg_scan_file|
+        MOV      a1,#7
+        STMIA    v1,{a1,v4}
+        B        |L002040.J135.jpeg_scan_file|
+|L001b84.J67.jpeg_scan_file|
+        LDR      a2,[v1,#&18]
+        STR      a2,[sp,#&1c]
+        LDR      a1,[fp,#&1c]
+        TEQ      a2,a1
+        LDRNE    a1,[fp,#&1c]
+        CMNNE    a1,#1
+        BEQ      |L001bb8.J70.jpeg_scan_file|
+        MOV      a1,#6
+        STR      a1,[v1,#0]
+        LDR      a1,[sp,#&1c]
+        STR      a1,[v1,#4]!
+        MOV      a1,#6
+        B        |L002040.J135.jpeg_scan_file|
+|L001bb8.J70.jpeg_scan_file|
+        LDR      v6,[v1,#&50]
+        LDR      a1,[v6,#&c]
+        MOV      v5,a1,LSL #3
+        LDR      a1,[sp,#&1c]
+        ADD      a1,a1,v5
+        SUB      a2,a1,#1
+        MOV      a1,v5
+        BL       |__rt_sdiv|
+        ADD      a1,a1,a1,LSL #2
+        MOV      a1,a1,LSL #2
+        LDR      a2,[v1,#&28]
+        MOV      a1,a1,LSR #2
+        STR      a2,[v1,#&818]
+        ADD      a2,a2,a1,LSL #2
+        STR      a2,[v1,#&28]
+        LDR      a2,[v1,#&2c]
+        SUB      a2,a2,a1
+        MOV      a1,v5
+        STR      a2,[v1,#&2c]
+        BL       |__rt_sdiv|
+        MOV      a2,a1
+        CMP      a1,v4
+        BGE      |L001c2c.J73.jpeg_scan_file|
+        MOV      a1,#&a
+        STMIA    v1,{a1,v4}
+        MOV      a1,a2
+        STR      a1,[v1,#8]!
+        MOV      a1,#&a
+        B        |L002040.J135.jpeg_scan_file|
+|L001c2c.J73.jpeg_scan_file|
+        MOV      a2,#8
+        MOV      a1,#5
+        ADD      v5,v1,#&e4
+        TEQ      v3,#1
+        BNE      |L001d3c.J75.jpeg_scan_file|
+        LDR      a3,[v1,#&1c]
+        TEQ      a3,#1
+        MOVNE    a1,#8
+        STMNEIA  v1,{a2,a3}
+        BNE      |L002040.J135.jpeg_scan_file|
+        LDR      a2,[v6,#8]
+        TEQ      a2,#1
+        LDREQ    a2,[v6,#&c]
+        TEQEQ    a2,#1
+        BEQ      |L001c84.J79.jpeg_scan_file|
+        STR      a1,[v1,#0]
+        LDR      a1,[v6,#8]
+        STR      a1,[v1,#4]
+        LDR      a1,[v6,#&c]!
+        STR      a1,[v1,#8]!
+        MOV      a1,#5
+        B        |L002040.J135.jpeg_scan_file|
+|L001c84.J79.jpeg_scan_file|
+        SUB      sp,sp,#8
+        MOV      v4,#0
+        LDR      a1,[v1,#&cc]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      v6,[a2,#&64]!
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#4]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        MOV      v3,#0
+        STR      a1,[sp,#0]
+        LDR      a1,[sp,#&24]
+        CMP      a1,#0
+        BLE      |L001d30.J84.jpeg_scan_file|
+        ADD      a1,v1,#&118
+        STR      a1,[sp,#&20]
+|L001cd4.J83.jpeg_scan_file|
+        ADD      a1,v3,v3,LSL #2
+        LDR      a2,[v1,#&818]
+        ADD      a2,a2,a1,LSL #2
+        MOV      a1,v1
+        BL       save_huff_stream
+        ADD      v3,v3,#1
+        MOV      a4,#1
+        LDR      a1,[v1,#&14]
+        ADD      a1,a1,#7
+        MOV      a3,a1,ASR #3
+        MOV      a2,v5
+        LDR      a1,[sp,#0]
+        STMDB    sp!,{a1-a4}
+        MOV      a3,v6
+        MOV      a1,v1
+        LDR      a2,[sp,#&30]
+        LDR      a4,[sp,#&14]
+        BL       do_huff_skip_blocks
+        ADD      sp,sp,#&10
+        ADD      v4,v4,#8
+        LDR      a1,[v1,#&18]
+        CMP      v4,a1
+        BLT      |L001cd4.J83.jpeg_scan_file|
+|L001d30.J84.jpeg_scan_file|
+        ADD      sp,sp,#8
+        BIC      v2,v2,#&30
+        B        |L001fc0.J87.jpeg_scan_file|
+|L001d3c.J75.jpeg_scan_file|
+        TEQ      v3,#3
+        BNE      |L002038.J88.jpeg_scan_file|
+        LDR      a3,[v6,#&c]
+        STR      a3,[sp,#-4]!
+        LDR      a4,[v6,#8]
+        MOV      v3,a4
+        CMP      a4,#2
+        CMPLE    a3,#2
+        BLE      |L001d74.J90.jpeg_scan_file|
+        STR      a1,[v1,#0]
+        LDR      a1,[v6,#8]
+        STR      a1,[v1,#4]
+        LDR      a1,[v6,#&c]!
+        B        |L001dc0.J137.jpeg_scan_file|
+|L001d74.J90.jpeg_scan_file|
+        LDR      a3,[v6,#&40]
+        TEQ      a3,#1
+        LDREQ    a3,[v6,#&44]
+        TEQEQ    a3,#1
+        BEQ      |L001d9c.J94.jpeg_scan_file|
+        STR      a1,[v1,#0]
+        LDR      a1,[v6,#&40]
+        STR      a1,[v1,#4]
+        LDR      a1,[v6,#&44]!
+        B        |L001dc0.J137.jpeg_scan_file|
+|L001d9c.J94.jpeg_scan_file|
+        LDR      a3,[v6,#&78]
+        TEQ      a3,#1
+        LDREQ    a3,[v6,#&7c]
+        TEQEQ    a3,#1
+        BEQ      |L001dcc.J98.jpeg_scan_file|
+        STR      a1,[v1,#0]
+        LDR      a1,[v6,#&78]
+        STR      a1,[v1,#4]
+        LDR      a1,[v6,#&7c]!
+|L001dc0.J137.jpeg_scan_file|
+        STR      a1,[v1,#8]!
+        MOV      a1,#5
+        B        |L001de4.J138.jpeg_scan_file|
+|L001dcc.J98.jpeg_scan_file|
+        LDR      a1,[v1,#&1c]
+        TEQ      a1,#3
+        BEQ      |L001de8.J102.jpeg_scan_file|
+        STR      a1,[v1,#4]
+        STR      a2,[v1,#0]
+        MOV      a1,#8
+|L001de4.J138.jpeg_scan_file|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+|L001de8.J102.jpeg_scan_file|
+        TEQ      v3,#2
+        LDREQ    a1,[sp,#0]
+        TEQEQ    a1,#2
+        BICNE    v2,v2,#&30
+        SUB      sp,sp,#&28
+        MOV      a1,#0
+        MOV      v4,#0
+        STR      a1,[sp,#&24]
+        LDR      a1,[v1,#&cc]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#&20]
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#&1c]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        STR      a1,[sp,#&18]
+        LDR      a1,[v1,#&d0]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#&14]
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#&10]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        STR      a1,[sp,#&c]
+        LDR      a1,[v1,#&d4]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#8]
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#4]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        STR      a1,[sp,#0]
+        LDR      a1,[sp,#&48]
+        CMP      a1,#0
+        BLE      |L001fbc.J109.jpeg_scan_file|
+        LDR      a2,[sp,#&28]
+        MUL      a1,a2,v3
+        ADD      a2,v1,#&218
+        STR      a2,[sp,#&3c]
+        ADD      a2,v1,#&e8
+        STR      a2,[sp,#&38]
+        ADD      a2,v1,#&218
+        ADD      a2,a2,#&400
+        STR      a2,[sp,#&34]
+        ADD      a2,v1,#&ec
+        STR      a1,[sp,#&40]
+        ADD      a1,v1,#&318
+        ADD      a1,a1,#&400
+        STR      a1,[sp,#&2c]
+        STR      a2,[sp,#&30]
+|L001eec.J108.jpeg_scan_file|
+        ADD      a1,v4,v4,LSL #2
+        LDR      a2,[v1,#&818]
+        ADD      a2,a2,a1,LSL #2
+        MOV      a1,v1
+        BL       save_huff_stream
+        ADD      v4,v4,#1
+        MOV      v6,#0
+        LDR      a1,[v1,#&14]
+        CMP      a1,#0
+        BLE      |L001fa0.J112.jpeg_scan_file|
+|L001f14.J111.jpeg_scan_file|
+        MOV      a4,#0
+        MOV      a2,v5
+        LDR      a1,[sp,#&18]
+        LDR      a3,[sp,#&40]
+        STMDB    sp!,{a1-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&4c]
+        LDR      a3,[sp,#&30]
+        LDR      a4,[sp,#&2c]
+        BL       do_huff_skip_blocks
+        ADD      sp,sp,#&10
+        MOV      a4,#1
+        LDR      a2,[sp,#&c]
+        LDR      a3,[sp,#&38]
+        STMDB    sp!,{a2-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&40]
+        LDR      a3,[sp,#&20]
+        LDR      a4,[sp,#&1c]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        MOV      a4,#1
+        LDR      a2,[sp,#0]
+        LDR      a3,[sp,#&30]
+        STMDB    sp!,{a2-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&38]
+        LDR      a3,[sp,#&14]
+        LDR      a4,[sp,#&10]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        ADD      v6,v6,v3,LSL #3
+        LDR      a1,[v1,#&14]
+        CMP      v6,a1
+        BLT      |L001f14.J111.jpeg_scan_file|
+|L001fa0.J112.jpeg_scan_file|
+        ADD      a2,sp,#&24
+        LDMIA    a2,{a1,a2}
+        ADD      a2,a1,a2,LSL #3
+        STR      a2,[sp,#&24]
+        LDR      a1,[v1,#&18]
+        CMP      a2,a1
+        BLT      |L001eec.J108.jpeg_scan_file|
+|L001fbc.J109.jpeg_scan_file|
+        ADD      sp,sp,#&2c
+|L001fc0.J87.jpeg_scan_file|
+        TST      v2,#4
+        BEQ      |L001ffc.J117.jpeg_scan_file|
+        LDR      a1,[v1,#&50]
+        LDR      a1,[a1,#8]
+        MOV      a1,a1,LSL #3
+        LDR      a2,[v1,#&2c]
+        BL       |__rt_sdiv|
+        LDR      a2,[v1,#&14]
+        CMP      a1,a2,LSL #1
+        LDRLT    a1,[v1,#&100]
+        BICLT    a1,a1,#4
+        STRLT    a1,[v1,#&100]
+        LDRGE    a1,[v1,#4]
+        ORRGE    a1,a1,#4
+        STRGE    a1,[v1,#4]
+|L001ffc.J117.jpeg_scan_file|
+        TST      v2,#8
+        LDRNE    a1,[v1,#4]
+        ORRNE    a1,a1,#8
+        STRNE    a1,[v1,#4]
+        TST      v2,#&10
+        LDRNE    a1,[v1,#4]
+        ORRNE    a1,a1,#&10
+        STRNE    a1,[v1,#4]
+        TST      v2,#&20
+        LDRNE    a1,[v1,#4]
+        ORRNE    a1,a1,#&20
+        STRNE    a1,[v1,#4]
+        STR      v2,[v1,#&100]
+        LDR      a1,[v1,#0]
+        B        |L002040.J135.jpeg_scan_file|
+|L002038.J88.jpeg_scan_file|
+        MOV      a1,#9
+        STMIA    v1,{a1,v3}
+|L002040.J135.jpeg_scan_file|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+        IMPORT  asm_j_rev_dct
+        IMPORT  asm_mono_convert_block
+        IMPORT  asm_colour_convert_block_16
+        IMPORT  asm_colour_convert_block
+        IMPORT  asm_colour_convert_block_8
+        IMPORT  asm_get_table32k
+        IMPORT  asm_diffuse_to_8bpp
+jpeg_find_line
+        MOV      ip,sp
+        STMDB    sp!,{a1-a3,v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        LDR      a1,[a1,#&50]
+        LDR      a1,[a1,#&c]
+        ADD      a1,a1,#2
+        STR      a1,[sp,#-&34]!
+        LDR      a1,[v1,#&2c]
+        LDR      a2,[sp,#0]
+        MOV      v4,a1,ASR a2
+        LDR      a1,[v1,#&18]
+        LDR      a2,[fp,#-&2c]
+        SUB      a1,a1,a2
+        SUBS     a1,a1,#1
+        STR      a1,[fp,#-&2c]
+        MOVMI    a2,#4
+        MOVMI    a1,#&8e
+        ADDMI    a1,a1,#&200
+        BLMI     exit_c
+        LDR      a2,[fp,#-&2c]
+        LDR      a1,[v1,#&18]
+        CMP      a2,a1
+        MOVGE    a2,#4
+        MOVGE    a1,#&8f
+        ADDGE    a1,a1,#&200
+        BLGE     exit_c
+        LDR      a2,[fp,#-&2c]
+        LDR      a1,[sp,#0]
+        MOV      a2,a2,ASR a1
+        STR      a2,[sp,#4]
+        LDR      a1,[v1,#&f4]
+        TEQ      a2,a1
+        BEQ      |L002900.J8.jpeg_find_line|
+        SUB      sp,sp,#4
+        LDR      a1,[v1,#&28]
+        TEQ      a1,#0
+        MOVEQ    a2,#4
+        MOVEQ    a1,#&a2
+        ADDEQ    a1,a1,#&200
+        BLEQ     exit_c
+        MVN      a1,#0
+        STR      a1,[v1,#&f4]
+        LDR      a1,[sp,#8]
+        ADD      a2,a1,a1,LSL #2
+        LDR      a1,[v1,#&818]
+        ADD      a2,a1,a2,LSL #2
+        MOV      a1,v1
+        BL       restore_huff_stream
+        LDR      a1,[v1,#&4c]
+        ADD      a3,v1,#&e4
+        ADD      v6,v1,#&118
+        ADD      a2,v1,#&218
+        TEQ      a1,#1
+        STR      a2,[sp,#&30]
+        STR      a3,[sp,#&34]
+        BNE      |L0022bc.J12.jpeg_find_line|
+        SUB      sp,sp,#8
+        MOV      v3,#0
+        LDR      a1,[v1,#&cc]
+        LDR      v2,[v1,#&28]
+        LDR      a2,[a1,#&10]
+        ADD      a2,v1,a2,LSL #2
+        LDR      v5,[a2,#&54]!
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#4]
+        LDR      a1,[a1,#&18]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&74]
+        STR      a1,[sp,#0]
+        LDR      a1,[v1,#&f8]
+        CMP      a1,#8
+        BLT      |L0021b4.J14.jpeg_find_line|
+        SUB      a1,a1,#8
+        MOV      a1,a1,ASR #3
+        MOV      a4,#1
+        STR      a1,[sp,#-4]!
+        MOV      a3,a1
+        MOV      a1,v5
+        LDR      a2,[sp,#&40]
+        STMDB    sp!,{a1-a4}
+        MOV      a2,v6
+        MOV      a1,v1
+        LDR      a3,[sp,#&18]
+        LDR      a4,[sp,#&14]
+        BL       do_huff_skip_blocks
+        LDR      a1,[sp,#&10]!
+        ADD      v3,v3,a1,LSL #3
+        ADD      v2,v2,a1,LSL #5
+        ADD      sp,sp,#4
+|L0021b4.J14.jpeg_find_line|
+        LDR      a1,[v1,#&100]
+        TST      a1,#2
+        LDR      a1,[v1,#&fc]
+        BEQ      |L002248.J16.jpeg_find_line|
+        CMP      v3,a1
+        BGE      |L002240.J19.jpeg_find_line|
+|L0021cc.J18.jpeg_find_line|
+        MOV      a4,#1
+        MOV      a3,#1
+        MOV      a1,v5
+        LDR      a2,[sp,#&3c]
+        STMDB    sp!,{a1-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&48]
+        LDR      a3,[sp,#&14]
+        LDR      a4,[sp,#&10]
+        BL       do_huff_skip_blocks
+        ADD      sp,sp,#&10
+        LDR      a2,[v1,#&e4]
+        LDR      a1,[v5,#0]
+        MUL      a2,a1,a2
+        MOV      a1,v1
+        BL       mono_convert_pixel
+        STR      a1,[v2,#0]
+        STR      a1,[v2,#4]
+        STR      a1,[v2,#8]
+        STR      a1,[v2,#&c]
+        STR      a1,[v2,#&10]
+        STR      a1,[v2,#&14]
+        STR      a1,[v2,#&18]
+        ADD      v3,v3,#8
+        STR      a1,[v2,#&1c]!
+        ADD      v2,v2,#4
+        LDR      a1,[v1,#&fc]
+        CMP      v3,a1
+        BLT      |L0021cc.J18.jpeg_find_line|
+|L002240.J19.jpeg_find_line|
+        MOV      a1,#1
+        B        |L0022b4.J127.jpeg_find_line|
+|L002248.J16.jpeg_find_line|
+        CMP      v3,a1
+        BGE      |L0022b0.J24.jpeg_find_line|
+|L002250.J23.jpeg_find_line|
+        MOV      a4,#1
+        MOV      a3,#1
+        MOV      a1,v5
+        LDR      a2,[sp,#&3c]
+        STMDB    sp!,{a1-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&48]
+        LDR      a3,[sp,#&14]
+        LDR      a4,[sp,#&10]
+        BL       do_huff_decode_blocks
+        ADD      sp,sp,#&10
+        MOV      a1,v1
+        MOV      a3,#1
+        LDR      a2,[sp,#&38]
+        BL       asm_j_rev_dct
+        MOV      a1,v6
+        MOV      a3,v4
+        MOV      a2,v2
+        BL       asm_mono_convert_block
+        ADD      v3,v3,#8
+        ADD      v2,v2,#&20
+        LDR      a1,[v1,#&fc]
+        CMP      v3,a1
+        BLT      |L002250.J23.jpeg_find_line|
+|L0022b0.J24.jpeg_find_line|
+        MOV      a1,#8
+|L0022b4.J127.jpeg_find_line|
+        STR      a1,[sp,#8]!
+        B        |L002828.J27.jpeg_find_line|
+|L0022bc.J12.jpeg_find_line|
+        SUB      sp,sp,#&28
+        MOV      v5,#0
+        LDR      a1,[v1,#&cc]
+        LDR      v2,[v1,#&28]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#&24]
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#&20]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        STR      a1,[sp,#&1c]
+        LDR      a1,[v1,#&d0]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#&18]
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#&14]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        STR      a1,[sp,#&10]
+        LDR      a1,[v1,#&d4]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#&c]
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#8]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        STR      a1,[sp,#4]
+        LDR      a1,[v1,#&50]
+        LDR      a2,[a1,#&c]
+        STR      a2,[sp,#0]
+        LDR      v3,[a1,#8]!
+        ADD      a1,v5,v3,LSL #3
+        LDR      a2,[v1,#&f8]
+        ADD      a4,v1,#&e8
+        ADD      a3,v1,#&ec
+        CMP      a1,a2
+        STR      a3,[sp,#&50]
+        STR      a4,[sp,#&54]
+        BGT      |L00244c.J29.jpeg_find_line|
+        LDR      a2,[sp,#0]
+        MUL      a1,a2,v3
+        STR      a1,[sp,#&4c]
+|L0023a0.J28.jpeg_find_line|
+        MOV      a4,#0
+        LDR      a1,[sp,#&1c]
+        LDR      a2,[sp,#&5c]
+        LDR      a3,[sp,#&4c]
+        STMDB    sp!,{a1-a4}
+        MOV      a2,v6
+        MOV      a1,v1
+        LDR      a3,[sp,#&34]
+        LDR      a4,[sp,#&30]
+        BL       do_huff_skip_blocks
+        ADD      sp,sp,#&10
+        MOV      a4,#1
+        LDR      a2,[sp,#&10]
+        LDR      a3,[sp,#&54]
+        STMDB    sp!,{a2-a4}
+        MOV      a2,v6
+        MOV      a1,v1
+        LDR      a3,[sp,#&24]
+        LDR      a4,[sp,#&20]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        MOV      a4,#1
+        LDR      a2,[sp,#4]
+        LDR      a3,[sp,#&50]
+        STMDB    sp!,{a2-a4}
+        MOV      a2,v6
+        MOV      a1,v1
+        LDR      a3,[sp,#&18]
+        LDR      a4,[sp,#&14]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        ADD      v5,v5,v3,LSL #3
+        LDR      a1,[v1,#&100]
+        TST      a1,#&10
+        ADDNE    v2,v2,v3,LSL #4
+        BNE      |L00243c.J33.jpeg_find_line|
+        TST      a1,#&20
+        ADDEQ    v2,v2,v3,LSL #5
+        ADDNE    v2,v2,v3,LSL #3
+|L00243c.J33.jpeg_find_line|
+        ADD      a2,v5,v3,LSL #3
+        LDR      a1,[v1,#&f8]
+        CMP      a2,a1
+        BLE      |L0023a0.J28.jpeg_find_line|
+|L00244c.J29.jpeg_find_line|
+        LDR      a1,[v1,#&100]
+        TST      a1,#2
+        ADD      a1,v1,#&318
+        ADD      a1,a1,#&400
+        STR      a1,[sp,#&48]
+        MOV      a1,#2
+        ADD      a3,v1,#&218
+        ADD      a3,a3,#&400
+        STR      a3,[sp,#&44]
+        LDR      a2,[v1,#&fc]
+        BEQ      |L002628.J38.jpeg_find_line|
+        CMP      v5,a2
+        BGE      |L002620.J41.jpeg_find_line|
+        LDR      a2,[sp,#0]
+        MUL      a1,a2,v3
+        STR      a1,[sp,#&40]
+|L00248c.J40.jpeg_find_line|
+        SUB      sp,sp,#&10
+        MOV      a4,#0
+        MOV      a3,#1
+        LDR      a1,[sp,#&2c]
+        LDR      a2,[sp,#&6c]
+        STMDB    sp!,{a1-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&78]
+        LDR      a3,[sp,#&44]
+        LDR      a4,[sp,#&40]
+        BL       do_huff_skip_blocks
+        ADD      sp,sp,#&10
+        LDR      a2,[v1,#&e4]
+        LDR      a1,[sp,#&2c]
+        LDR      a1,[a1,#0]
+        MUL      a2,a1,a2
+        MOV      v6,#1
+        STR      a2,[sp,#0]
+        LDR      a1,[sp,#&50]
+        CMP      a1,#1
+        BLE      |L002530.J44.jpeg_find_line|
+|L0024e0.J43.jpeg_find_line|
+        MOV      a4,#1
+        LDR      a2,[sp,#&2c]
+        LDR      a3,[sp,#&6c]
+        STMDB    sp!,{a2-a4}
+        ADD      a1,v1,v6,LSL #8
+        ADD      a2,a1,#&218
+        MOV      a1,v1
+        LDR      a3,[sp,#&40]
+        LDR      a4,[sp,#&3c]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        LDR      a2,[v1,#&e4]
+        LDR      a1,[sp,#&2c]
+        LDR      a1,[a1,#0]
+        MUL      a2,a1,a2
+        STR      a2,[sp,v6,LSL #2]
+        ADD      v6,v6,#1
+        LDR      a1,[sp,#&50]
+        CMP      a1,v6
+        BGT      |L0024e0.J43.jpeg_find_line|
+|L002530.J44.jpeg_find_line|
+        MOV      a4,#1
+        LDR      a2,[sp,#&20]
+        LDR      a3,[sp,#&64]
+        STMDB    sp!,{a2-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&60]
+        LDR      a3,[sp,#&34]
+        LDR      a4,[sp,#&30]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        MOV      a4,#1
+        LDR      a2,[sp,#&14]
+        LDR      a3,[sp,#&60]
+        STMDB    sp!,{a2-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&64]
+        LDR      a3,[sp,#&28]
+        LDR      a4,[sp,#&24]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        LDR      a2,[v1,#&e8]
+        LDR      a1,[sp,#&20]
+        LDR      a1,[a1,#0]
+        MUL      a2,a1,a2
+        LDR      a3,[v1,#&ec]
+        LDR      a1,[sp,#&14]
+        LDR      a1,[a1,#0]
+        MUL      a3,a1,a3
+        MOV      a1,sp
+        BL       colour_convert_pixels
+        MOV      v6,#0
+        MOV      a3,#2
+        MOV      a4,#1
+|L0025b4.J47.jpeg_find_line|
+        LDR      a1,[sp,#0]
+        STR      a1,[v2,v6,LSL #2]
+        TEQ      v3,#2
+        ADDEQ    a2,v2,v6,LSL #2
+        LDREQ    a1,[sp,#4]
+        STREQ    a1,[a2,#&20]!
+        LDR      a1,[sp,#&10]
+        TEQ      a1,#2
+        BNE      |L0025fc.J50.jpeg_find_line|
+        CMP      v3,#2
+        MOVNE    a1,a4
+        MOVEQ    a1,a3
+        LDR      a2,[sp,a1,LSL #2]
+        ADD      a1,v4,v6
+        STR      a2,[v2,a1,LSL #2]
+        ADDEQ    a1,v2,a1,LSL #2
+        LDREQ    a2,[sp,#&c]
+        STREQ    a2,[a1,#&20]!
+|L0025fc.J50.jpeg_find_line|
+        ADD      v6,v6,#1
+        CMP      v6,#8
+        BLT      |L0025b4.J47.jpeg_find_line|
+        ADD      v5,v5,v3,LSL #3
+        ADD      v2,v2,v3,LSL #5
+        ADD      sp,sp,#&10
+        LDR      a1,[v1,#&fc]
+        CMP      v5,a1
+        BLT      |L00248c.J40.jpeg_find_line|
+|L002620.J41.jpeg_find_line|
+        LDR      a1,[sp,#0]
+        B        |L002824.J128.jpeg_find_line|
+|L002628.J38.jpeg_find_line|
+        CMP      v5,a2
+        BGE      |L00281c.J61.jpeg_find_line|
+        ADD      a1,v1,#&18
+        ADD      a1,a1,#&400
+        STR      a1,[sp,#&3c]
+        LDR      a2,[sp,#0]
+        MUL      a1,a2,v3
+        STR      a1,[sp,#&38]
+|L002648.J60.jpeg_find_line|
+        MOV      a4,#0
+        LDR      a1,[sp,#&1c]
+        LDR      a2,[sp,#&5c]
+        LDR      a3,[sp,#&38]
+        STMDB    sp!,{a1-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&68]
+        LDR      a3,[sp,#&34]
+        LDR      a4,[sp,#&30]
+        BL       do_huff_decode_blocks
+        ADD      sp,sp,#&10
+        MOV      a4,#1
+        LDR      a2,[sp,#&10]
+        LDR      a3,[sp,#&54]
+        STMDB    sp!,{a2-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&50]
+        LDR      a3,[sp,#&24]
+        LDR      a4,[sp,#&20]
+        BL       asm_huff_decode_blocks
+        ADD      sp,sp,#&c
+        MOV      a4,#1
+        LDR      a2,[sp,#4]
+        LDR      a3,[sp,#&50]
+        STMDB    sp!,{a2-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&54]
+        LDR      a3,[sp,#&18]
+        LDR      a4,[sp,#&14]
+        BL       asm_huff_decode_blocks
+        ADD      sp,sp,#&c
+        LDR      a1,[v1,#&100]
+        TST      a1,#1
+        BEQ      |L002758.J63.jpeg_find_line|
+        MOV      a1,v1
+        LDR      a2,[sp,#&58]
+        LDR      a3,[sp,#&38]
+        BL       asm_j_rev_dct
+        MOV      a1,v6
+        MOV      a3,v4
+        MOV      a2,v2
+        BL       asm_mono_convert_block
+        TEQ      v3,#2
+        BNE      |L002708.J65.jpeg_find_line|
+        ADD      a2,v2,#&20
+        MOV      a3,v4
+        LDR      a1,[sp,#&58]
+        BL       asm_mono_convert_block
+|L002708.J65.jpeg_find_line|
+        LDR      a1,[sp,#0]
+        TEQ      a1,#2
+        BNE      |L0027f0.J74.jpeg_find_line|
+        ADD      a2,v2,v4,LSL #5
+        TEQ      v3,#1
+        STR      a2,[sp,#&34]
+        MOVNE    a1,#2
+        MOVEQ    a1,#1
+        ADD      a1,v1,a1,LSL #8
+        ADD      a1,a1,#&118
+        MOV      a3,v4
+        BL       asm_mono_convert_block
+        TEQ      v3,#2
+        BNE      |L0027f0.J74.jpeg_find_line|
+        LDR      a1,[sp,#&34]
+        ADD      a2,a1,#&20
+        MOV      a3,v4
+        LDR      a1,[sp,#&3c]
+        BL       asm_mono_convert_block
+        B        |L0027f0.J74.jpeg_find_line|
+|L002758.J63.jpeg_find_line|
+        LDR      a1,[sp,#&38]
+        TEQ      a1,#4
+        BNE      |L0027b0.J75.jpeg_find_line|
+        MOV      a1,v1
+        MOV      a3,#6
+        LDR      a2,[sp,#&58]
+        BL       asm_j_rev_dct
+        LDR      a1,[v1,#&100]
+        TST      a1,#&10
+        BEQ      |L002794.J77.jpeg_find_line|
+        MOV      a1,v6
+        MOV      a3,v4
+        MOV      a2,v2
+        BL       asm_colour_convert_block_16
+        B        |L0027f0.J74.jpeg_find_line|
+|L002794.J77.jpeg_find_line|
+        TST      a1,#&20
+        MOV      a1,v6
+        MOV      a3,v4
+        MOV      a2,v2
+        BLEQ     asm_colour_convert_block
+        BLNE     asm_colour_convert_block_8
+        B        |L0027f0.J74.jpeg_find_line|
+|L0027b0.J75.jpeg_find_line|
+        MOV      a1,v1
+        LDR      a2,[sp,#&58]
+        LDR      a3,[sp,#&38]
+        BL       asm_j_rev_dct
+        MOV      a1,v1
+        MOV      a3,#2
+        LDR      a2,[sp,#&44]
+        BL       asm_j_rev_dct
+        LDR      a4,[sp,#0]
+        STMDB    sp!,{a4}
+        MOV      a1,v6
+        MOV      a4,v3
+        MOV      a3,v4
+        MOV      a2,v2
+        BL       colour_convert_unusual_block
+        ADD      sp,sp,#4
+|L0027f0.J74.jpeg_find_line|
+        ADD      v5,v5,v3,LSL #3
+        LDR      a1,[v1,#&100]
+        TST      a1,#&10
+        ADDNE    v2,v2,v3,LSL #4
+        BNE      |L002810.J86.jpeg_find_line|
+        TST      a1,#&20
+        ADDEQ    v2,v2,v3,LSL #5
+        ADDNE    v2,v2,v3,LSL #3
+|L002810.J86.jpeg_find_line|
+        LDR      a1,[v1,#&fc]
+        CMP      v5,a1
+        BLT      |L002648.J60.jpeg_find_line|
+|L00281c.J61.jpeg_find_line|
+        LDR      a1,[sp,#0]
+        MOV      a1,a1,LSL #3
+|L002824.J128.jpeg_find_line|
+        STR      a1,[sp,#&28]!
+|L002828.J27.jpeg_find_line|
+        LDR      a1,[v1,#&100]
+        TST      a1,#8
+        BEQ      |L0028f4.J91.jpeg_find_line|
+        LDR      a1,[v1,#&20]
+        TEQ      a1,#0
+        BNE      |L002860.J93.jpeg_find_line|
+        LDR      a1,[v1,#&24]
+        TEQ      a1,#0
+        BNE      |L002860.J93.jpeg_find_line|
+        BL       asm_get_table32k
+        STR      a1,[v1,#&20]
+        TEQ      a1,#0
+        MOVEQ    a1,#1
+        STREQ    a1,[v1,#&24]
+|L002860.J93.jpeg_find_line|
+        LDR      a1,[v1,#&f8]
+        MOV      a2,a1
+        LDR      a4,[v1,#&28]
+        ADD      v3,a4,a1,LSL #2
+        LDR      a3,[v1,#&fc]
+        SUB      a3,a3,a1
+        ADD      v6,a4,a1
+        ADD      a3,a3,#&f
+        BIC      v2,a3,#&f
+        LDR      a3,[v1,#&14]
+        SUB      a1,a3,a1
+        CMP      a1,v2
+        MOVLT    v2,a1
+        LDR      a1,[v1,#&100]
+        TST      a1,#4
+        ADDNE    v3,v3,a2,LSL #2
+        MOVNE    v2,v2,LSL #1
+        CMP      v2,#0
+        BLE      |L0028f4.J91.jpeg_find_line|
+|L0028ac.J102.jpeg_find_line|
+        CMP      v2,#&20
+        MOVLT    v5,v2
+        MOVGE    v5,#&10
+        MOV      a3,v4
+        LDR      a4,[fp,#-&28]
+        LDR      a2,[sp,#0]
+        STMDB    sp!,{a2-a4}
+        MOV      a3,v6
+        MOV      a2,v5
+        MOV      a1,v3
+        LDR      a4,[v1,#&20]
+        BL       asm_diffuse_to_8bpp
+        ADD      sp,sp,#&c
+        ADD      v3,v3,v5,LSL #2
+        ADD      v6,v6,v5
+        SUB      v2,v2,v5
+        CMP      v2,#0
+        BGT      |L0028ac.J102.jpeg_find_line|
+|L0028f4.J91.jpeg_find_line|
+        LDR      a1,[sp,#8]
+        ADD      sp,sp,#4
+        STR      a1,[v1,#&f4]
+|L002900.J8.jpeg_find_line|
+        LDR      a1,[v1,#&28]!
+        LDR      a2,[v1,#&d8]!
+        TST      a2,#2
+        LDR      a2,[sp,#0]
+        BEQ      |L002930.J109.jpeg_find_line|
+        TEQ      a2,#4
+        BNE      |L00294c.J129.jpeg_find_line|
+        LDR      a2,[fp,#-&2c]
+        AND      a2,a2,#&f
+        CMP      a2,#8
+        ADDGE    a1,a1,v4,LSL #2
+        B        |L00294c.J129.jpeg_find_line|
+|L002930.J109.jpeg_find_line|
+        MOV      a3,#1
+        MOV      a2,a3,LSL a2
+        SUB      a2,a2,#1
+        LDR      a3,[fp,#-&2c]
+        AND      a2,a2,a3
+        MUL      a2,v4,a2
+        ADD      a1,a1,a2,LSL #2
+|L00294c.J129.jpeg_find_line|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+looks_like_jpeg
+        LDR      a2,[a1,#0]
+        ADD      ip,a2,#&1f000000
+        ADD      ip,ip,#&2700
+        CMN      ip,#1
+        BNE      |L002994.J5.looks_like_jpeg|
+        LDRB     a2,[a1,#6]
+        TEQ      a2,#&4a
+        LDREQB   a2,[a1,#7]
+        TEQEQ    a2,#&46
+        LDREQB   a2,[a1,#8]
+        TEQEQ    a2,#&49
+        LDREQB   a2,[a1,#9]
+        TEQEQ    a2,#&46
+        LDREQB   a1,[a1,#&a]
+        TEQEQ    a1,#0
+        MOVEQ    a1,#1
+        MOVEQS   pc,lr
+|L002994.J5.looks_like_jpeg|
+        MOV      a1,#0
+        MOVS     pc,lr
+
+        IMPORT  |_swix|
+find_image_dims
+        MOV      ip,sp
+        STMDB    sp!,{a1-a4}
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#&14
+        MOV      v4,a1
+        SUB      sp,sp,#&14
+        SUB      sp,sp,#&400
+        MOV      a1,#0
+        LDR      v1,[fp,#&1c]
+        LDR      v3,[fp,#&18]
+        MOV      v2,#0
+        STR      a1,[sp,#&40c]
+        AND      a1,v3,#3
+        TEQ      a1,#1
+        BNE      |L002a60.J6.find_image_dims|
+        MOV      v2,#1
+        ADD      a4,sp,#8
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a3,#&4f
+        MOV      a2,#&80000003
+        MOV      a1,#&d
+        BL       |_swix|
+        ADD      sp,sp,#4
+        MOVS     a2,a1
+        BEQ      |L002a0c.J8.find_image_dims|
+|L002a04.J9.find_image_dims|
+        STR      a2,[v1,#0]
+        B        |L002dec.J95.find_image_dims|
+|L002a0c.J8.find_image_dims|
+        ADD      v4,sp,#&c
+        ADD      a4,sp,#4
+        MOV      a3,#&400
+        MOV      a2,v4
+        STMDB    sp!,{a2-a4}
+        MOV      a3,#4
+        MOV      a2,#&2000000f
+        MOV      a1,#&c
+        LDR      a4,[sp,#&14]
+        BL       |_swix|
+        ADD      sp,sp,#&c
+        MOVS     v5,a1
+        BEQ      |L002a60.J6.find_image_dims|
+        MOV      a3,#0
+        MOV      a2,#3
+        MOV      a1,#&d
+        LDR      a4,[sp,#8]
+        BL       |_swix|
+        STR      v5,[v1,#0]
+        MOV      a1,v5
+        B        |L002dec.J95.find_image_dims|
+|L002a60.J6.find_image_dims|
+        MOV      a1,v4
+        BL       looks_like_jpeg
+        TEQ      a1,#0
+        BNE      |L002a9c.J12.find_image_dims|
+        TEQ      v2,#0
+        BEQ      |L002a94.J14.find_image_dims|
+        MOV      a3,#0
+        MOV      a2,#3
+        MOV      a1,#&d
+        LDR      a4,[sp,#8]
+        BL       |_swix|
+        MOVS     a2,a1
+        BNE      |L002a04.J9.find_image_dims|
+|L002a94.J14.find_image_dims|
+        MOV      a1,#1
+        B        |L002dec.J95.find_image_dims|
+|L002a9c.J12.find_image_dims|
+        LDRB     a1,[v4,#&d]
+        TEQ      a1,#1
+        BNE      |L002acc.J18.find_image_dims|
+        LDRB     a1,[v4,#&e]
+        MOV      a1,a1,LSL #24
+        LDRB     a2,[v4,#&f]
+        ADD      a1,a1,a2,LSL #16
+        LDRB     a2,[v4,#&10]
+        ADD      a1,a1,a2,LSL #8
+        LDRB     a2,[v4,#&11]
+        ADD      a1,a1,a2
+        B        |L002b40.J92.find_image_dims|
+|L002acc.J18.find_image_dims|
+        TEQ      a1,#2
+        BNE      |L002b48.J21.find_image_dims|
+        LDRB     a1,[v4,#&e]
+        RSB      a2,a1,a1,LSL #7
+        MOV      a2,a2,LSL #1
+        MOV      a1,#&64
+        BL       |__rt_sdiv|
+        MOV      v5,a1
+        LDRB     a1,[v4,#&f]
+        RSB      a2,a1,a1,LSL #7
+        MOV      a2,a2,LSL #1
+        MOV      a1,#&64
+        BL       |__rt_sdiv|
+        ADD      a1,a1,#&18
+        MOV      v5,v5,LSL a1
+        LDRB     a1,[v4,#&10]
+        RSB      a2,a1,a1,LSL #7
+        MOV      a2,a2,LSL #1
+        MOV      a1,#&64
+        BL       |__rt_sdiv|
+        ADD      a1,a1,#&10
+        MOV      v5,v5,LSL a1
+        LDRB     a1,[v4,#&11]
+        RSB      a2,a1,a1,LSL #7
+        MOV      a2,a2,LSL #1
+        MOV      a1,#&64
+        BL       |__rt_sdiv|
+        ADD      a1,a1,#8
+        MOV      a1,v5,LSL a1
+|L002b40.J92.find_image_dims|
+        STR      a1,[sp,#0]
+        B        |L002b8c.J20.find_image_dims|
+|L002b48.J21.find_image_dims|
+        LDRB     a1,[v4,#&f]
+        LDRB     a2,[v4,#&e]
+        ADDS     a1,a1,a2,LSL #8
+        MOVEQ    a1,#1
+        LDRB     a2,[v4,#&11]
+        LDRB     a3,[v4,#&10]
+        ADD      a2,a2,a3,LSL #8
+        BL       |__rt_sdiv|
+        TEQ      a1,#0
+        RSBNE    a1,a1,a1,LSL #4
+        ADDNE    a1,a1,a1,LSL #1
+        MOVNE    a1,a1,LSL #1
+        MOVEQ    a1,#&5a
+        ORR      a1,a1,#&5a0000
+        STR      a1,[sp,#0]
+        MOV      a1,#&100
+        STR      a1,[sp,#&40c]
+|L002b8c.J20.find_image_dims|
+        ADD      v4,v4,#2
+|L002b90.J88.find_image_dims|
+        LDR      a1,[sp,#4]
+        B        |L002c60.J30.find_image_dims|
+|L002b98.J29.find_image_dims|
+        LDRB     a2,[v4,#3]
+        LDRB     a3,[v4,#2]
+        ADD      a2,a2,a3,LSL #8
+        ADD      a2,a2,v4
+        ADD      v4,a2,#2
+        TEQ      v2,#0
+        BEQ      |L002c60.J30.find_image_dims|
+        CMP      v4,a1
+        BLT      |L002c60.J30.find_image_dims|
+        SUB      v5,v4,a1
+        ADD      v4,sp,#&c
+        ADD      a4,sp,#4
+        MOV      a3,#&400
+        MOV      a2,v4
+        STMDB    sp!,{a2-a4}
+        MOV      a3,#4
+        MOV      a2,#&2000000f
+        MOV      a1,#&c
+        LDR      a4,[sp,#&14]
+        BL       |_swix|
+        ADD      sp,sp,#&c
+        MOVS     v6,a1
+        BEQ      |L002c14.J35.find_image_dims|
+|L002bf4.J36.find_image_dims|
+        MOV      a3,#0
+        MOV      a2,#3
+        MOV      a1,#&d
+        LDR      a4,[sp,#8]
+        BL       |_swix|
+        STR      v6,[v1,#0]
+        MOV      a1,v6
+        B        |L002dec.J95.find_image_dims|
+|L002c14.J35.find_image_dims|
+        CMP      v5,#&400
+        BLE      |L002c58.J38.find_image_dims|
+|L002c1c.J37.find_image_dims|
+        ADD      a4,sp,#4
+        MOV      a3,#&400
+        MOV      a2,v4
+        STMDB    sp!,{a2-a4}
+        MOV      a3,#4
+        MOV      a2,#&2000000f
+        MOV      a1,#&c
+        LDR      a4,[sp,#&14]
+        BL       |_swix|
+        ADD      sp,sp,#&c
+        MOVS     v6,a1
+        BNE      |L002bf4.J36.find_image_dims|
+        SUB      v5,v5,#&400
+        CMP      v5,#&400
+        BGT      |L002c1c.J37.find_image_dims|
+|L002c58.J38.find_image_dims|
+        ADD      v4,v4,v5
+        B        |L002b90.J88.find_image_dims|
+|L002c60.J30.find_image_dims|
+        LDRB     a2,[v4,#0]
+        TEQ      a2,#&ff
+        BNE      |L002c84.J43.find_image_dims|
+        LDRB     a2,[v4,#1]
+        TEQ      a2,#&c0
+        TEQNE    a2,#&c1
+        TEQNE    a2,#&c9
+        BNE      |L002b98.J29.find_image_dims|
+        B        |L002c98.J49.find_image_dims|
+|L002c84.J43.find_image_dims|
+        LDRB     a1,[v4,#1]
+        TEQ      a1,#&c0
+        TEQNE    a1,#&c1
+        TEQNE    a1,#&c9
+        BNE      |L002a94.J14.find_image_dims|
+|L002c98.J49.find_image_dims|
+        LDRB     a1,[v4,#6]
+        LDRB     a2,[v4,#5]
+        ADD      v5,a1,a2,LSL #8
+        LDRB     a1,[v4,#8]
+        LDRB     a2,[v4,#7]
+        ADD      a1,a1,a2,LSL #8
+        STR      a1,[sp,#&410]
+        LDRB     a1,[v4,#9]
+        LDR      a2,[sp,#&40c]
+        ORR      v6,a1,a2
+        CMP      v3,#3
+        BLE      |L002d78.J54.find_image_dims|
+        SUB      sp,sp,#8
+        BIC      v3,v3,#3
+        LDR      a1,[v3,#0]
+        CMP      v6,#1
+        STR      a1,[sp,#4]
+        MOVNE    a1,#&10
+        MOVEQ    a1,#8
+        LDR      a2,[sp,#&418]
+        ADD      a2,a2,#&f
+        MUL      a1,a2,a1
+        MOV      a2,a1,LSL #2
+        BNE      |L002d08.J60.find_image_dims|
+        ADDS     a1,v5,#7
+        ADDMI    a1,a1,#7
+        MOV      a1,a1,ASR #3
+        B        |L002d0c.J59.find_image_dims|
+|L002d08.J60.find_image_dims|
+        MOV      a1,v5
+|L002d0c.J59.find_image_dims|
+        ADD      a1,a1,a1,LSL #2
+        ADD      a1,a2,a1,LSL #2
+        ADD      a1,a1,#&ff
+        ADD      a1,a1,#&3d00
+        BIC      v4,a1,#3
+        MOV      a3,sp
+        MOV      a2,#&80000000
+        MOV      a1,#&51
+        BL       |_swix|
+        LDR      a1,[sp,#4]
+        TEQ      a1,#0
+        LDREQ    a1,[sp,#0]
+        ADDEQ    a2,v4,a1
+        BEQ      |L002d64.J93.find_image_dims|
+        LDR      a1,[sp,#4]
+        LDR      a1,[a1,#&10]
+        CMP      a1,v4
+        MOVGE    a1,#0
+        BGE      |L002d70.J66.find_image_dims|
+        SUB      a2,v4,a1
+        LDR      a1,[sp,#0]
+        ADD      a2,a2,a1
+|L002d64.J93.find_image_dims|
+        SUB      a2,a2,#1
+        SUB      a1,a1,#1
+        BIC      a1,a2,a1
+|L002d70.J66.find_image_dims|
+        ADD      sp,sp,#8
+        STR      a1,[v3,#0]
+|L002d78.J54.find_image_dims|
+        LDR      a1,[fp,#&c]
+        TEQ      a1,#0
+        LDRNE    a1,[fp,#&c]
+        STRNE    v5,[a1,#0]
+        LDR      a1,[fp,#8]
+        TEQ      a1,#0
+        LDRNE    a1,[sp,#&410]
+        LDRNE    a2,[fp,#8]
+        STRNE    a1,[a2,#0]
+        LDR      a1,[fp,#&10]
+        TEQ      a1,#0
+        MOVNE    a1,v6
+        LDRNE    a2,[fp,#&10]
+        STRNE    a1,[a2,#0]
+        LDR      a1,[fp,#&14]
+        CMP      a1,#0
+        LDRNE    a1,[sp,#0]
+        LDRNE    a2,[fp,#&14]
+        STRNE    a1,[a2,#0]
+        TEQ      v2,#0
+        BEQ      |L002de8.J80.find_image_dims|
+        MOV      a3,#0
+        MOV      a2,#3
+        MOV      a1,#&d
+        LDR      a4,[sp,#8]
+        BL       |_swix|
+        MOVS     a2,a1
+        BNE      |L002a04.J9.find_image_dims|
+|L002de8.J80.find_image_dims|
+        MOV      a1,#0
+|L002dec.J95.find_image_dims|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+check_sprite_area
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        SUB      sp,sp,#&10
+        LDMIA    a1,{a2,a3}
+        STR      a3,[sp,#8]
+        ADD      a4,a1,#8
+        LDMIA    a4,{a3,a4}
+        CMP      a3,a4
+        CMPLE    a4,a2
+        MOVGT    a1,#1
+        BGT      |L002fc0.J55.check_sprite_area|
+        ADD      v1,a1,a3
+        MOV      a3,#0
+        STR      a3,[sp,#4]
+        LDR      a3,[sp,#8]
+        CMP      a3,#0
+        BLE      |L002fbc.J9.check_sprite_area|
+        ADD      v5,a1,a2
+|L002e3c.J8.check_sprite_area|
+        ADD      a2,v1,#&18
+        LDMIA    a2,{a1,a2}
+        LDR      a4,[v1,#&14]
+        LDR      v3,[v1,#0]
+        LDR      v6,[v1,#&10]
+        STR      a2,[sp,#-4]!
+        LDR      a3,[v1,#&28]
+        LDR      v2,[v1,#&24]
+        LDR      v4,[v1,#&20]
+        ADD      a2,v3,v1
+        CMP      a2,v5
+        CMPLE    a1,#&1f
+        LDRLE    a2,[sp,#0]
+        CMPLE    a2,#&1f
+        ADDLE    a2,v4,v1
+        CMPLE    a2,v5
+        ADDLE    a2,v2,v1
+        CMPLE    a2,v5
+        BGT      |L002fa0.J50.check_sprite_area|
+        MOV      a2,#0
+        CMP      a2,a3,ASR #24
+        BGE      |L002e9c.J21.check_sprite_area|
+        TEQ      a1,#0
+        BNE      |L002fa0.J50.check_sprite_area|
+|L002e9c.J21.check_sprite_area|
+        TEQ      v4,v2
+        BEQ      |L002f54.J25.check_sprite_area|
+        ADD      a1,v6,#1
+        ADD      a4,a4,#1
+        STR      a4,[sp,#&10]
+        MUL      a1,a4,a1
+        ADD      a4,v4,a1,LSL #2
+        CMP      a4,v2
+        BGT      |L002fa0.J50.check_sprite_area|
+        TEQ      a2,a3,ASR #24
+        BNE      |L002ee8.J29.check_sprite_area|
+        ADD      a1,v2,a1,LSL #2
+        CMP      a1,v3
+        BGT      |L002fa0.J50.check_sprite_area|
+        SUB      a1,v3,v2
+        SUB      a2,v2,v4
+        TEQ      a1,a2
+        BNE      |L002fa0.J50.check_sprite_area|
+        B        |L002f6c.J43.check_sprite_area|
+|L002ee8.J29.check_sprite_area|
+        CMP      a3,#&ff
+        BLE      |L002ef8.J36.check_sprite_area|
+        TST      a3,#1
+        BEQ      |L002fa0.J50.check_sprite_area|
+|L002ef8.J36.check_sprite_area|
+        ADD      a4,sp,#4
+        STMDB    sp!,{a4}
+        MOV      a4,#9
+        MOV      a2,#&20000003
+        MOV      a1,#&35
+        BL       |_swix|
+        ADD      sp,sp,#4
+        TEQ      a1,#0
+        BNE      |L002fa0.J50.check_sprite_area|
+        LDR      a1,[sp,#4]
+        RSB      a2,a1,#5
+        MOV      a2,v6,LSL a2
+        LDR      a3,[sp,#0]
+        ADD      a3,a3,#1
+        ADD      a1,a2,a3,ASR a1
+        ADD      a1,a1,#&1f
+        BIC      a1,a1,#&1f
+        MOV      a1,a1,LSR #3
+        LDR      a2,[sp,#&10]
+        MLA      a1,a2,a1,v2
+        TEQ      a1,v3
+        BNE      |L002fa0.J50.check_sprite_area|
+        B        |L002f6c.J43.check_sprite_area|
+|L002f54.J25.check_sprite_area|
+        ADD      a1,v6,#1
+        ADD      a2,a4,#1
+        MUL      a1,a2,a1
+        ADD      a1,v4,a1,LSL #2
+        CMP      a1,v3
+        BGT      |L002fa0.J50.check_sprite_area|
+|L002f6c.J43.check_sprite_area|
+        ORR      a1,v3,v4
+        ORR      a1,a1,v2
+        TST      a1,#3
+        BNE      |L002fa0.J50.check_sprite_area|
+        ADD      v1,v1,v3
+        LDR      a1,[sp,#8]
+        ADD      a1,a1,#1
+        LDR      a2,[sp,#&c]
+        CMP      a1,a2
+        BGE      |L002fa8.J48.check_sprite_area|
+        ADD      a2,v1,#&2c
+        CMP      a2,v5
+        BLE      |L002fa8.J48.check_sprite_area|
+|L002fa0.J50.check_sprite_area|
+        MOV      a1,#1
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+|L002fa8.J48.check_sprite_area|
+        ADD      sp,sp,#4
+        STR      a1,[sp,#4]
+        LDR      a2,[sp,#8]
+        CMP      a1,a2
+        BLT      |L002e3c.J8.check_sprite_area|
+|L002fbc.J9.check_sprite_area|
+        MOV      a1,#0
+|L002fc0.J55.check_sprite_area|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+rr
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        CMN      a1,#1
+        MOVEQ    a2,#4
+        MOVEQ    a1,#&bd
+        ADDEQ    a1,a1,#&200
+        BLEQ     exit_c
+        MOV      a1,v1
+        LDMDB    fp,{v1,fp,sp,pc}^
+
+check_workspace
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOVS     v1,a1
+        MOVEQ    a2,#1
+        MOVEQ    a1,#&2fc
+        BLEQ     exit_c
+        LDR      a3,[v1,#0]
+        LDR      a2,[pc, #L003074-.-8]
+        ADD      a1,v1,#&2000
+        TEQ      a3,a2
+        BEQ      |L003054.J6.check_workspace|
+        STR      a2,[v1,#0]
+        MOV      a3,#0
+        STR      a2,[a1,#&2ec]
+        STR      a3,[v1,#8]
+        ADD      a3,v1,#&22c
+        ADD      a4,v1,#&2ec
+        ADD      a4,a4,#&2000
+        MVN      ip,#0
+        CMP      a4,a3
+        BLS      |L003054.J6.check_workspace|
+|L003048.J8.check_workspace|
+        STR      ip,[a3],#&418
+        CMP      a4,a3
+        BHI      |L003048.J8.check_workspace|
+|L003054.J6.check_workspace|
+        LDR      a1,[a1,#&2ec]
+        TEQ      a1,a2
+        MOVNE    a2,#4
+        MOVNE    a1,#&67
+        ADDNE    a1,a1,#&300
+        LDMNEDB  fp,{v1,fp,sp,lr}
+        BNE      exit_c
+        LDMDB    fp,{v1,fp,sp,pc}^
+L003074
+        DCD     &075bcd15
+
+compile_word
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      v2,a2
+        LDR      a1,[a1,#&10]
+        LDR      a2,[v1,#&14]
+        CMP      a1,a2
+        MOVCS    a2,#1
+        MOVCS    a1,#&2e
+        ADDCS    a1,a1,#&400
+        BLCS     exit_c
+        LDR      a1,[v1,#&10]
+        STR      v2,[a1],#4
+        STR      a1,[v1,#&10]!
+        LDMDB    fp,{v1,v2,fp,sp,pc}^
+
+do_ins
+        AND      a3,a2,#&f0000000
+        TEQ      a3,#&f0000000
+        BICEQ    a2,a2,#&f0000000
+        BEQ      |L0030d0.J6.do_ins|
+        TEQ      a3,#0
+        ORREQ    a2,a2,#&e0000000
+|L0030d0.J6.do_ins|
+        B        compile_word
+
+define_label
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a2,#0]
+        TEQ      a1,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&5f
+        ADDNE    a1,a1,#&400
+        BLNE     exit_c
+        LDR      a2,[v2,#&10]!
+        STR      a2,[v1,#0]
+        LDR      a1,[v1,#4]
+        TEQ      a1,#0
+        LDMEQDB  fp,{v1,v2,fp,sp,pc}^
+        ADD      a3,a1,#8
+        SUBS     a2,a2,a3
+        ADDMI    a2,a2,#3
+        MOV      a2,a2,ASR #2
+        BIC      a2,a2,#&ff000000
+        LDR      a3,[a1,#0]
+        ORR      a2,a2,a3
+        STR      a2,[a1,#0]
+        MOV      a1,#0
+        STR      a1,[v1,#4]!
+        LDMDB    fp,{v1,v2,fp,sp,pc}^
+
+do_branch
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v3,a2
+        MOV      v1,a3
+        LDR      a1,[a3,#0]
+        TEQ      a1,#0
+        LDR      a1,[a3,#4]
+        BNE      |L003194.J4.do_branch|
+        TEQ      a1,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&7e
+        ADDNE    a1,a1,#&400
+        BLNE     exit_c
+        LDR      a1,[v2,#&10]
+        MOV      a2,v3
+        STR      a1,[v1,#4]!
+        MOV      a1,v2
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L003194.J4.do_branch|
+        TEQ      a1,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&84
+        ADDNE    a1,a1,#&400
+        BLNE     exit_c
+        LDR      a1,[v2,#&10]
+        ADD      a1,a1,#8
+        LDR      a2,[v1,#0]
+        SUBS     a1,a2,a1
+        ADDMI    a1,a1,#3
+        MOV      a1,a1,ASR #2
+        BIC      a1,a1,#&ff000000
+        ORR      a2,a1,v3
+        MOV      a1,v2
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+
+do_set_regname
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v3,a2
+        MOV      v1,a3
+        CMN      a3,#1
+        BNE      |L003240.J4.do_set_regname|
+        LDR      a1,[v2,#&1e0]
+        MOVS     v1,a1
+        ADD      a1,a1,#1
+        STR      a1,[v2,#&1e0]
+        BMI      |L003210.J7.do_set_regname|
+        CMP      v1,#&c
+        BLE      |L003220.J6.do_set_regname|
+|L003210.J7.do_set_regname|
+        MOV      a2,#4
+        MOV      a1,#&97
+        ADD      a1,a1,#&400
+        BL       exit_c
+|L003220.J6.do_set_regname|
+        TEQ      v1,#&c
+        BNE      |L003240.J4.do_set_regname|
+        LDR      a1,[v2,#&1e4]!
+        TEQ      a1,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&98
+        ADDNE    a1,a1,#&400
+        BLNE     exit_c
+|L003240.J4.do_set_regname|
+        STR      v1,[v3,#0]
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+
+compile_buffer_init
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a2
+        LDR      a1,[a2,#8]
+        ADD      ip,a1,a1,LSL #1
+        ADD      a1,ip,a1,LSL #7
+        ADD      a1,a2,a1,LSL #3
+        ADD      a1,a1,#&244
+        STR      a1,[a2,#&c]
+        STR      a1,[a2,#&10]
+        LDR      a1,[a2,#&c]
+        ADD      a1,a1,#&400
+        STR      a1,[a2,#&14]
+        ADD      a1,a2,#&18
+        ADD      a2,v1,#&150
+        MOV      v3,#0
+        CMP      a2,a1
+        BCC      |L0032a8.J5.compile_buffer_init|
+|L003294.J4.compile_buffer_init|
+        STR      v3,[a1,#0]
+        STR      v3,[a1,#4]!
+        ADD      a1,a1,#4
+        CMP      a2,a1
+        BCS      |L003294.J4.compile_buffer_init|
+|L0032a8.J5.compile_buffer_init|
+        ADD      a1,v1,#&158
+        ADD      v2,v1,#&1dc
+        MVN      a2,#0
+        CMP      v2,a1
+        BCC      |L0032c8.J9.compile_buffer_init|
+|L0032bc.J8.compile_buffer_init|
+        STR      a2,[a1],#4
+        CMP      v2,a1
+        BCS      |L0032bc.J8.compile_buffer_init|
+|L0032c8.J9.compile_buffer_init|
+        STR      v3,[v1,#&1e0]
+        ADD      a2,v1,#&1c4
+        MOV      a1,v1
+        MOV      a3,#1
+        BL       do_set_regname
+        ADD      a2,v1,#&1c8
+        MOV      a1,v1
+        MOV      a3,#2
+        BL       do_set_regname
+        ADD      a2,v1,#&1cc
+        MOV      a1,v1
+        MOV      a3,#3
+        BL       do_set_regname
+        ADD      a2,v1,#&1d0
+        MOV      a1,v1
+        MOV      a3,#&c
+        BL       do_set_regname
+        ADD      a2,v1,#&1d4
+        MOV      a1,v1
+        MOV      a3,#&d
+        BL       do_set_regname
+        ADD      a2,v1,#&1d8
+        MOV      a1,v1
+        MOV      a3,#&e
+        BL       do_set_regname
+        MOV      a2,v2
+        MOV      a1,v1
+        MOV      a3,#&f
+        BL       do_set_regname
+        STR      v3,[v1,#&1e4]!
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+
+compile_buffer_done
+        LDR      a2,[a1,#8]
+        ADD      a2,a2,#1
+        STR      a2,[a1,#8]
+        CMP      a2,#8
+        MOVGE    a2,#0
+        STRGE    a2,[a1,#8]!
+        MOVS     pc,lr
+
+simple_x_scale
+        ADD      ip,a1,#&40
+        LDMIA    ip,{a3,ip}
+        MOV      a4,a3
+        SUB      ip,ip,a3
+        TEQ      ip,a3
+        BNE      |L0033ac.J5.simple_x_scale|
+        LDR      a3,[a1,#&30]
+        CMP      a4,a3
+        BGT      |L0033ac.J5.simple_x_scale|
+        LDR      a1,[a1,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BEQ      |L0033ac.J5.simple_x_scale|
+        LDR      a1,[a2,#&1e8]
+        TEQ      a1,#0
+        LDREQ    a1,[a2,#&1f4]!
+        TEQEQ    a1,#0
+        MOVEQ    a1,#1
+        MOVEQS   pc,lr
+|L0033ac.J5.simple_x_scale|
+        MOV      a1,#0
+        MOVS     pc,lr
+
+x_block_move
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      v2,a2
+        BL       simple_x_scale
+        TEQ      a1,#0
+        BEQ      |L00341c.J5.x_block_move|
+        MOV      a1,#1
+        LDR      a2,[v1,#&78]
+        MOV      a2,a1,LSL a2
+        LDR      a1,[v1,#&100]
+        TEQ      a2,a1
+        LDREQ    a1,[v2,#&1e8]
+        TEQEQ    a1,#0
+        LDREQ    a1,[v2,#&1ec]!
+        TEQEQ    a1,#0
+        LDREQ    a1,[v1,#&b4]
+        TEQEQ    a1,#0
+        LDREQ    a1,[v1,#&f8]
+        TEQEQ    a1,#0
+        BNE      |L00341c.J5.x_block_move|
+        LDR      a1,[v1,#&10c]!
+        TEQ      a1,#0
+        MOVEQ    a1,#1
+        LDMEQDB  fp,{v1,v2,fp,sp,pc}^
+|L00341c.J5.x_block_move|
+        MOV      a1,#0
+        LDMDB    fp,{v1,v2,fp,sp,pc}^
+
+simple_y_scale
+        ADD      a2,a1,#&10
+        LDMIA    a2,{a1,a2}
+        TEQ      a2,a1
+        MOVNE    a1,#0
+        MOVEQ    a1,#1
+        MOVS     pc,lr
+
+ptrs_rn
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        ADD      a2,a2,#&158
+        MOV      a1,v1
+        MOV      a3,#&e
+        BL       do_set_regname
+        ADD      a2,v1,#&15c
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        ADD      a2,v1,#&198
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BNE      |L00349c.J5.ptrs_rn|
+        LDR      a1,[v2,#&f4]!
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L0034ac.J4.ptrs_rn|
+|L00349c.J5.ptrs_rn|
+        ADD      a2,v1,#&168
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+|L0034ac.J4.ptrs_rn|
+        LDR      a1,[v1,#&1f4]
+        TEQ      a1,#0
+        LDMEQDB  fp,{v1,v2,fp,sp,pc}^
+        ADD      a2,v1,#&184
+        MOV      a1,v1
+        MVN      a3,#0
+        LDMDB    fp,{v1,v2,fp,sp,lr}
+        B        do_set_regname
+
+xloop_rn
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        MOV      v3,#0
+        BL       x_block_move
+        ADD      a2,v1,#&160
+        ADD      v6,v1,#&1a0
+        ADD      v5,v1,#&1a8
+        TEQ      a1,#0
+        BEQ      |L0035b8.J4.xloop_rn|
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        MOV      a2,v6
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        MOV      a2,v5
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        ADD      a2,v1,#&188
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        LDR      a1,[v1,#&15c]
+        TEQ      a1,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&f5
+        ADDNE    a1,a1,#&500
+        BLNE     exit_c
+        LDR      a1,[v1,#&198]
+        TEQ      a1,#1
+        MOVNE    a2,#4
+        MOVNE    a1,#&f6
+        ADDNE    a1,a1,#&500
+        BLNE     exit_c
+        LDR      a1,[v1,#&160]
+        TEQ      a1,#2
+        MOVNE    a2,#4
+        MOVNE    a1,#&f7
+        ADDNE    a1,a1,#&500
+        BLNE     exit_c
+        LDR      a1,[v1,#&1a0]
+        TEQ      a1,#3
+        MOVNE    a2,#4
+        MOVNE    a1,#&1f8
+        ADDNE    a1,a1,#&400
+        BLNE     exit_c
+        LDR      a1,[v1,#&1a8]!
+        TEQ      a1,#4
+        MOVNE    a2,#4
+        MOVNE    a1,#&f9
+        ADDNE    a1,a1,#&500
+        LDMNEDB  fp,{v1-v6,fp,sp,lr}
+        BNE      exit_c
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+|L0035b8.J4.xloop_rn|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        ADD      v4,v1,#&164
+        TEQ      a1,#&32
+        BNE      |L0035e0.J17.xloop_rn|
+|L0035cc.J18.xloop_rn|
+        MOV      a2,v4
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        B        |L0035f8.J19.xloop_rn|
+|L0035e0.J17.xloop_rn|
+        LDR      a1,[v2,#&74]
+        TEQ      a1,#5
+        MOVNE    a1,v1
+        MVNNE    a3,#0
+        BLNE     do_set_regname
+        BNE      |L0035cc.J18.xloop_rn|
+|L0035f8.J19.xloop_rn|
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        BEQ      |L003644.J30.xloop_rn|
+        ADD      a2,v1,#&16c
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BNE      |L003634.J25.xloop_rn|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        ADDNE    a2,v1,#&174
+        BNE      |L003638.J67.xloop_rn|
+|L003634.J25.xloop_rn|
+        ADD      a2,v1,#&170
+|L003638.J67.xloop_rn|
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+|L003644.J30.xloop_rn|
+        LDR      a1,[v1,#&1e8]
+        TEQ      a1,#0
+        BEQ      |L00365c.J29.xloop_rn|
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        MOVEQ    v3,#1
+|L00365c.J29.xloop_rn|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L003690.J33.xloop_rn|
+        ADD      a2,v1,#&18c
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        ADD      a2,v1,#&190
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        B        |L003734.J35.xloop_rn|
+|L003690.J33.xloop_rn|
+        LDR      a1,[v2,#&b4]
+        TEQ      a1,#0
+        LDREQ    a1,[v2,#&f8]
+        TEQEQ    a1,#0
+        BNE      |L0036b0.J37.xloop_rn|
+        LDR      a1,[v2,#&10c]
+        TEQ      a1,#0
+        BEQ      |L0036c0.J36.xloop_rn|
+|L0036b0.J37.xloop_rn|
+        ADD      a2,v1,#&1a4
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+|L0036c0.J36.xloop_rn|
+        LDR      a2,[v2,#&f8]
+        TEQ      a2,#0
+        LDR      a1,[v2,#&74]
+        LDRNE    a2,[v2,#&104]
+        TEQNE    a2,#&10
+        BNE      |L0036e0.J45.xloop_rn|
+        TEQ      a1,#5
+        BNE      |L0036f0.J44.xloop_rn|
+|L0036e0.J45.xloop_rn|
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        MOVNE    v3,#2
+        B        |L003714.J47.xloop_rn|
+|L0036f0.J44.xloop_rn|
+        TEQ      a1,#4
+        LDREQ    a1,[v2,#&104]
+        TEQEQ    a1,#&20
+        BNE      |L003714.J47.xloop_rn|
+        MOV      v3,#2
+        ADD      a2,v1,#&180
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+|L003714.J47.xloop_rn|
+        TEQ      v3,#0
+        LDREQ    a1,[v2,#&40]
+        LDREQ    a2,[v2,#&68]
+        BLEQ     |__rt_sdiv|
+        TEQEQ    a2,#0
+        BNE      |L003734.J35.xloop_rn|
+        CMP      a1,#4
+        MOVGT    v3,#1
+|L003734.J35.xloop_rn|
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        BEQ      |L003760.J54.xloop_rn|
+        ADD      a2,v1,#&19c
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        MOV      a2,v6
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+|L003760.J54.xloop_rn|
+        LDR      a1,[v2,#&74]
+        CMP      a1,#3
+        BGT      |L003790.J56.xloop_rn|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       simple_x_scale
+        TEQ      a1,#0
+        BEQ      |L003790.J56.xloop_rn|
+        ADD      a2,v1,#&1c0
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+|L003790.J56.xloop_rn|
+        MOV      a2,v5
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       simple_x_scale
+        TEQ      a1,#0
+        BNE      |L0037c4.J16.xloop_rn|
+        ADD      a2,v1,#&1ac
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+|L0037c4.J16.xloop_rn|
+        CMP      v3,#1
+        BLT      |L0037dc.J61.xloop_rn|
+        ADD      a2,v1,#&178
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+|L0037dc.J61.xloop_rn|
+        CMP      v3,#2
+        LDMLTDB  fp,{v1-v6,fp,sp,pc}^
+        ADD      a2,v1,#&17c
+        MOV      a1,v1
+        MVN      a3,#0
+        LDMDB    fp,{v1-v6,fp,sp,lr}
+        B        do_set_regname
+
+yloop_rn_count
+        MOV      a3,#2
+        LDR      a4,[a1,#&14]
+        LDR      ip,[a1,#&10]
+        TEQ      a4,ip
+        MOVNE    a3,#3
+        LDR      a2,[a2,#&1f0]
+        TEQ      a2,#0
+        BNE      |L003828.J7.yloop_rn_count|
+        LDR      a2,[a1,#&f4]
+        AND      a2,a2,#&ff
+        TEQ      a2,#&32
+        BNE      |L00382c.J6.yloop_rn_count|
+|L003828.J7.yloop_rn_count|
+        ADD      a3,a3,#1
+|L00382c.J6.yloop_rn_count|
+        LDR      a1,[a1,#&110]
+        TEQ      a1,#0
+        ADDNE    a3,a3,#1
+        MOV      a1,a3
+        MOVS     pc,lr
+
+yloop_rn
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        ADD      a2,a2,#&1b0
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       simple_y_scale
+        TEQ      a1,#0
+        BNE      |L003888.J4.yloop_rn|
+        ADD      a2,v1,#&1b4
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+|L003888.J4.yloop_rn|
+        ADD      a2,v1,#&1b8
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BNE      |L0038b4.J7.yloop_rn|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L0038c4.J6.yloop_rn|
+|L0038b4.J7.yloop_rn|
+        ADD      a2,v1,#&1bc
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+|L0038c4.J6.yloop_rn|
+        LDR      a1,[v2,#&110]!
+        TEQ      a1,#0
+        LDMEQDB  fp,{v1,v2,fp,sp,pc}^
+        ADD      a2,v1,#&194
+        MOV      a1,v1
+        MVN      a3,#0
+        LDMDB    fp,{v1,v2,fp,sp,lr}
+        B        do_set_regname
+
+get_in_shift
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a1,#&110]
+        TEQ      a1,#0
+        LDRNE    a1,[v2,#&74]
+        TEQNE    a1,#5
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        BEQ      |L003a24.J4.get_in_shift|
+        ADD      a3,v2,#&114
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v2,#&74]!
+        TEQ      a1,#4
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&160]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        BNE      |L0039c0.J7.get_in_shift|
+        ORR      a2,a1,#&2100000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      a2,#&1a00000
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&f2000000
+        ORR      a2,a2,#2
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&160]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&200
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L0039c0.J7.get_in_shift|
+        ORR      a2,a1,#&2100000
+        ORR      a2,a2,#3
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&160]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&160]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&180
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L003a24.J4.get_in_shift|
+        ADD      a1,v2,#&20
+        SUB      a1,a1,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&160]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+
+fetch_pixel_init
+        MOV      ip,sp
+        STMDB    sp!,{v1-v5,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a1,#&f4]
+        AND      a1,a1,#&ff
+        ADD      a3,v2,#8
+        SUB      a2,a3,v2
+        ORR      v4,a2,#&1800000
+        TEQ      a1,#&32
+        BNE      |L003ac8.J4.fetch_pixel_init|
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a3,a1,#&4100000
+        ADD      a2,v2,#&38
+        SUB      a1,a2,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a3,a1
+        B        |L003b08.J49.fetch_pixel_init|
+|L003ac8.J4.fetch_pixel_init|
+        LDR      a1,[v2,#&110]
+        TEQ      a1,#0
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORREQ    a1,a1,#&4100000
+        ADDEQ    a2,a1,v4
+        BEQ      |L003b08.J49.fetch_pixel_init|
+        ORR      a2,a1,#&4100000
+        ADD      a3,v2,#&118
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+|L003b08.J49.fetch_pixel_init|
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       x_block_move
+        TEQ      a1,#0
+        BEQ      |L003b68.J10.fetch_pixel_init|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       get_in_shift
+        LDR      a1,[v1,#&188]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a1,v2,#&108
+        SUB      a1,a1,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        LDMDB    fp,{v1-v5,fp,sp,lr}
+        B        do_ins
+|L003b68.J10.fetch_pixel_init|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L003c34.J13.fetch_pixel_init|
+        LDR      a1,[v1,#&18c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a3,v2,#&34
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&18c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#&18
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&800000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&190]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a3,a1,#&4100000
+        ADD      a2,v2,#&130
+        SUB      a1,a2,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a3,a1
+        B        |L003c6c.J50.fetch_pixel_init|
+|L003c34.J13.fetch_pixel_init|
+        LDR      a1,[v2,#&74]
+        TEQ      a1,#5
+        BEQ      |L003c74.J15.fetch_pixel_init|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       get_in_shift
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&160]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&d80
+|L003c6c.J50.fetch_pixel_init|
+        MOV      a1,v1
+        BL       do_ins
+|L003c74.J15.fetch_pixel_init|
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        BEQ      |L003e04.J18.fetch_pixel_init|
+        ADD      a3,v2,#&48
+        SUB      a2,a3,v2
+        ORR      v3,a2,#&1800000
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BNE      |L003ca8.J21.fetch_pixel_init|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L003ddc.J20.fetch_pixel_init|
+|L003ca8.J21.fetch_pixel_init|
+        LDR      a1,[v1,#&170]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+        ORR      a3,a1,#&4100000
+        ADD      a2,v2,#&88
+        SUB      a1,a2,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a3,a1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        LDR      a1,[v1,#&168]
+        BL       rr
+        BEQ      |L003d18.J24.fetch_pixel_init|
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a3,v2,#&8c
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        B        |L003d88.J51.fetch_pixel_init|
+|L003d18.J24.fetch_pixel_init|
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,v4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v4,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,v3
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&168]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&168]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&800000
+|L003d88.J51.fetch_pixel_init|
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&170]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&170]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&170]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&170]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&d80
+        B        |L003dfc.J52.fetch_pixel_init|
+|L003ddc.J20.fetch_pixel_init|
+        LDR      a1,[v1,#&174]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v4,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,v3
+|L003dfc.J52.fetch_pixel_init|
+        MOV      a1,v1
+        BL       do_ins
+|L003e04.J18.fetch_pixel_init|
+        LDR      a1,[v2,#&10c]
+        TEQ      a1,#0
+        BEQ      |L003e40.J28.fetch_pixel_init|
+        LDR      a1,[v1,#&1a4]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a3,v2,#&10c
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        B        |L003ef4.J53.fetch_pixel_init|
+|L003e40.J28.fetch_pixel_init|
+        LDR      a1,[v2,#&f8]
+        TEQ      a1,#0
+        BEQ      |L003e7c.J31.fetch_pixel_init|
+        LDR      a1,[v1,#&1a4]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a3,a1,#&4100000
+        ADD      a2,v2,#&f8
+        SUB      a1,a2,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a3,a1
+        B        |L003ef4.J53.fetch_pixel_init|
+|L003e7c.J31.fetch_pixel_init|
+        LDR      a1,[v2,#&b4]
+        TEQ      a1,#0
+        BEQ      |L003efc.J30.fetch_pixel_init|
+        LDR      a1,[v1,#&1a4]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a3,v2,#&b4
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v2,#&104]
+        CMP      a1,#8
+        BGT      |L003efc.J30.fetch_pixel_init|
+        LDR      a1,[v2,#&74]
+        CMP      a1,#4
+        BLT      |L003efc.J30.fetch_pixel_init|
+        LDR      a1,[v1,#&1a4]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a4]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&5900000
+        ORR      a2,a2,#4
+|L003ef4.J53.fetch_pixel_init|
+        MOV      a1,v1
+        BL       do_ins
+|L003efc.J30.fetch_pixel_init|
+        LDR      a1,[v2,#&74]
+        CMP      a1,#3
+        BGT      |L003f38.J39.fetch_pixel_init|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       simple_x_scale
+        TEQ      a1,#0
+        BEQ      |L003f38.J39.fetch_pixel_init|
+        LDR      a1,[v1,#&1c0]
+        BL       rr
+        LDR      a2,[v1,#&200]
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&3a00000
+        MOV      a1,v1
+        BL       do_ins
+|L003f38.J39.fetch_pixel_init|
+        LDR      a1,[v1,#&180]
+        CMN      a1,#1
+        BEQ      |L003fc4.J42.fetch_pixel_init|
+        BL       rr
+        MOV      a2,#&3a00000
+        ADD      a2,a2,#&e0
+        ORR      a2,a2,a1,LSL #12
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&180]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&180]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&180]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        ORR      a2,a2,#&400
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&180]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&180]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&180]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        ORR      a2,a2,#&400
+        MOV      a1,v1
+        BL       do_ins
+|L003fc4.J42.fetch_pixel_init|
+        LDR      a1,[v1,#&1f4]
+        TEQ      a1,#0
+        LDMEQDB  fp,{v1-v5,fp,sp,pc}^
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a3,a1,#&4100000
+        ADD      a2,v2,#&4c
+        SUB      a1,a2,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a3,a1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&184]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a3,v2,#&50
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&184]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&184]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&184]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&200000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&184]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&184]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        ORR      a2,a2,#&80
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,#&c10
+        ADD      v3,v3,#&3a00000
+        ORR      a2,v3,a1,LSL #12
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v4,a1,LSL #16
+        ORR      a2,a1,#&5900000
+        ORR      a2,a2,#&1fc
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      a2,#&3100000
+        ADD      a2,a2,#1
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&184]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&184]
+        BL       rr
+        ORR      a1,v4,a1,LSL #16
+        ORR      a2,a1,#&10000000
+        ORR      a2,a2,#&2200000
+        ORR      a2,a2,#3
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a2,v3,a1,LSL #12
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&5900000
+        ORR      a2,a2,#&1f8
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        LDR      a2,[v2,#&104]!
+        ORR      a1,a2,a1,LSL #16
+        ORR      a2,a1,#&3100000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&184]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&184]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&10000000
+        ORR      a2,a2,#&2200000
+        ORR      a2,a2,#2
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&184]
+        BL       rr
+        LDR      a2,[v1,#&1f4]
+        ADD      a2,a2,#&17
+        ORR      v2,a1,a2,LSL #7
+        LDR      a1,[v1,#&184]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v5,fp,sp,lr}
+        B        do_ins
+
+save_pixel_init
+        MOV      ip,sp
+        STMDB    sp!,{v1-v4,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a2,#&198]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a3,v2,#&c
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       x_block_move
+        ADD      a3,v2,#&4c
+        SUB      a2,a3,v2
+        ORR      v3,a2,#&1800000
+        TEQ      a1,#0
+        BEQ      |L004340.J4.save_pixel_init|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,v3
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        LDR      a2,[v1,#&220]
+        SUB      a2,a2,#1
+        ORR      a1,a1,a2
+        ORR      a2,a1,#&2000000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        LDR      a2,[v1,#&214]
+        ORR      v2,a1,a2,LSL #7
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        LDMDB    fp,{v1-v4,fp,sp,lr}
+        B        do_ins
+|L004340.J4.save_pixel_init|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BEQ      |L00435c.J8.save_pixel_init|
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        BEQ      |L004384.J7.save_pixel_init|
+|L00435c.J8.save_pixel_init|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v4,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,v3
+        MOV      a1,v1
+        BL       do_ins
+|L004384.J7.save_pixel_init|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L004434.J11.save_pixel_init|
+        LDR      a1,[v1,#&18c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a2,v3,a1,LSL #16
+        LDR      a1,[v1,#&220]
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&2000000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&224]
+        CMP      a1,#2
+        BLE      |L0043fc.J13.save_pixel_init|
+        LDR      a1,[v1,#&18c]
+        BL       rr
+        LDR      a2,[v1,#&224]
+        SUB      a2,a2,#2
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&18c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+|L0043fc.J13.save_pixel_init|
+        LDR      a1,[v1,#&224]
+        CMP      a1,#2
+        BGE      |L004434.J11.save_pixel_init|
+        LDR      a1,[v1,#&18c]
+        BL       rr
+        LDR      a2,[v1,#&224]
+        RSB      a2,a2,#2
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&18c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+|L004434.J11.save_pixel_init|
+        LDR      a1,[v2,#&104]!
+        TEQ      a1,#&20
+        LDMEQDB  fp,{v1-v4,fp,sp,pc}^
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        LDR      a2,[v1,#&220]
+        SUB      a2,a2,#1
+        ORR      a1,a1,a2
+        ORR      a2,a1,#&2000000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        LDR      a2,[v1,#&214]
+        ORR      v2,a1,a2,LSL #7
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&d80
+        MOV      a1,v1
+        LDMDB    fp,{v1-v4,fp,sp,lr}
+        B        do_ins
+
+xloop_init
+        MOV      ip,sp
+        STMDB    sp!,{v1-v4,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a2,#&1a8]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a3,a1,#&4100000
+        ADD      a2,v2,#&2c
+        SUB      a1,a2,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a3,a1
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       simple_x_scale
+        TEQ      a1,#0
+        BNE      |L004598.J4.xloop_init|
+        ADD      a3,v2,#&30
+        SUB      a2,a3,v2
+        ORR      v3,a2,#&1800000
+        LDR      a1,[v1,#&1f4]
+        TEQ      a1,#0
+        BEQ      |L004570.J6.xloop_init|
+        LDR      a1,[v2,#&74]
+        TEQ      a1,#4
+        LDREQ    a1,[v1,#&158]
+        BEQ      |L004574.J14.xloop_init|
+|L004570.J6.xloop_init|
+        LDR      a1,[v1,#&1ac]
+|L004574.J14.xloop_init|
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v4,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,v3
+        MOV      a1,v1
+        BL       do_ins
+|L004598.J4.xloop_init|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       x_block_move
+        TEQ      a1,#0
+        LDMEQDB  fp,{v1-v4,fp,sp,pc}^
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        LDR      a2,[v1,#&214]
+        ORR      v2,a1,a2,LSL #7
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v4,fp,sp,lr}
+        B        do_ins
+
+yloop_init
+        MOV      ip,sp
+        STMDB    sp!,{v1-v4,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a1,#&110]
+        TEQ      a1,#0
+        BEQ      |L00462c.J4.yloop_init|
+        LDR      a1,[v1,#&194]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a3,v2,#&11c
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        BL       do_ins
+|L00462c.J4.yloop_init|
+        LDR      a1,[v1,#&1b0]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a3,a1,#&4100000
+        ADD      a2,v2,#&18
+        SUB      a1,a2,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a3,a1
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       simple_y_scale
+        TEQ      a1,#0
+        BNE      |L0046a8.J6.yloop_init|
+        LDR      a1,[v1,#&1b4]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a3,a1,#&4100000
+        ADD      a2,v2,#&1c
+        SUB      a1,a2,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a3,a1
+        MOV      a1,v1
+        BL       do_ins
+|L0046a8.J6.yloop_init|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        ADD      a3,v2,#4
+        SUB      a2,a3,v2
+        ORR      v3,a2,#&1800000
+        TEQ      a1,#&32
+        BEQ      |L004704.J8.yloop_init|
+        LDR      a1,[v2,#&110]
+        TEQ      a1,#0
+        LDR      a1,[v1,#&1b8]
+        BL       rr
+        MOVNE    a2,#&3a00000
+        ADDNE    a2,a2,#1
+        ORRNE    a2,a2,a1,LSL #12
+        BNE      |L0046fc.J20.yloop_init|
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v4,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,v3
+|L0046fc.J20.yloop_init|
+        MOV      a1,v1
+        BL       do_ins
+|L004704.J8.yloop_init|
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BEQ      |L004748.J13.yloop_init|
+        LDR      a1,[v1,#&1bc]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a1,v2,#&90
+        SUB      a1,a1,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        LDMDB    fp,{v1-v4,fp,sp,lr}
+        B        do_ins
+|L004748.J13.yloop_init|
+        LDR      a1,[v2,#&f4]!
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        LDMNEDB  fp,{v1-v4,fp,sp,pc}^
+        LDR      a1,[v1,#&1bc]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,v3
+        MOV      a1,v1
+        LDMDB    fp,{v1-v4,fp,sp,lr}
+        B        do_ins
+
+fetch_pixel_unmasked
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a2
+        LDR      a2,[a1,#&f4]
+        AND      a2,a2,#&ff
+        TEQ      a2,#&32
+        BNE      |L00489c.J4.fetch_pixel_unmasked|
+        LDR      a1,[a1,#&104]
+        TEQ      a1,#&20
+        BNE      |L0047e4.J6.fetch_pixel_unmasked|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&18c]
+        BL       rr
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&7900000
+        MOV      a1,v1
+        LDMDB    fp,{v1,v2,fp,sp,lr}
+        B        do_ins
+|L0047e4.J6.fetch_pixel_unmasked|
+        TEQ      a1,#&10
+        BNE      |L004840.J9.fetch_pixel_unmasked|
+        LDR      a1,[v1,#&164]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&800
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&820
+        MOV      a1,v1
+        LDMDB    fp,{v1,v2,fp,sp,lr}
+        B        do_ins
+|L004840.J9.fetch_pixel_unmasked|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&164]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        LDR      a2,[v1,#&218]
+        ORR      a1,a1,a2
+        ORR      a2,a1,#&2000000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&190]
+        BL       rr
+        ORR      a2,v2,a1
+        MOV      a1,v1
+        LDMDB    fp,{v1,v2,fp,sp,lr}
+        B        do_ins
+|L00489c.J4.fetch_pixel_unmasked|
+        LDR      a1,[a1,#&74]
+        TEQ      a1,#5
+        BNE      |L0048d0.J13.fetch_pixel_unmasked|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&4900000
+        MOV      a1,v1
+        LDMDB    fp,{v1,v2,fp,sp,lr}
+        B        do_ins
+|L0048d0.J13.fetch_pixel_unmasked|
+        TEQ      a1,#4
+        BNE      |L00492c.J16.fetch_pixel_unmasked|
+        LDR      a1,[v1,#&164]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&800
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&820
+        MOV      a1,v1
+        LDMDB    fp,{v1,v2,fp,sp,lr}
+        B        do_ins
+|L00492c.J16.fetch_pixel_unmasked|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&164]
+        BL       rr
+        ORR      a2,v2,a1,LSL #16
+        LDR      a1,[v1,#&200]
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&2000000
+        MOV      a1,v1
+        LDMDB    fp,{v1,v2,fp,sp,lr}
+        B        do_ins
+
+fetch_pixel
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        MOV      v3,a3
+        LDR      a1,[a2,#&1ec]
+        TEQ      a1,#0
+        BEQ      |L0049ac.J4.fetch_pixel|
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        MOV      a2,#&3100000
+        ADD      a2,a2,#1
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+|L0049ac.J4.fetch_pixel|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_unmasked
+        LDR      a1,[v1,#&1ec]!
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+
+fetch_pixel2
+        MOV      ip,sp
+        STMDB    sp!,{v1-v4,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        MOV      v3,a3
+        LDR      a1,[a1,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        MOVEQ    a2,#4
+        MOVEQ    a1,#&37
+        ADDEQ    a1,a1,#&800
+        BLEQ     exit_c
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        BEQ      |L004af0.J6.fetch_pixel2|
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        LDR      a2,[v1,#&204]
+        BEQ      |L004aac.J8.fetch_pixel2|
+        ORR      v4,a1,a2,LSL #7
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        ORR      a1,v4,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&170]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&170]
+        BL       rr
+        ORR      a2,v4,a1,LSL #16
+        LDR      a1,[v1,#&204]
+        ORR      a1,a2,a1,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&168]
+        BL       rr
+        ORR      a1,v4,a1,LSL #16
+        ORR      a2,a1,#&f0000000
+        ORR      a2,a2,#&5b00000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        MOV      a2,#&3100000
+        ADD      a2,a2,#1
+        ORR      a2,a2,a1,LSL #16
+        B        |L004ad8.J22.fetch_pixel2|
+|L004aac.J8.fetch_pixel2|
+        TEQ      a2,#1
+        MOVEQ    a2,#&2000000
+        ADDEQ    a2,a2,#2
+        BEQ      |L004ad0.J11.fetch_pixel2|
+        LDR      a2,[v1,#&208]
+        RSB      a2,a2,#&20
+        MOV      a3,#&2000000
+        ADD      a3,a3,#1
+        ORR      a2,a3,a2,LSL #7
+|L004ad0.J11.fetch_pixel2|
+        ORR      a1,a2,a1,LSL #16
+        ORR      a2,a1,#&1100000
+|L004ad8.J22.fetch_pixel2|
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+|L004af0.J6.fetch_pixel2|
+        LDR      a1,[v2,#&74]!
+        TEQ      a1,#5
+        BNE      |L004b20.J14.fetch_pixel2|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&5900000
+        ORR      a2,a2,#4
+        B        |L004b7c.J23.fetch_pixel2|
+|L004b20.J14.fetch_pixel2|
+        TEQ      a1,#4
+        BNE      |L004b4c.J17.fetch_pixel2|
+        LDR      a1,[v1,#&164]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&820
+        B        |L004b7c.J23.fetch_pixel2|
+|L004b4c.J17.fetch_pixel2|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1c0]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&164]
+        BL       rr
+        LDR      a2,[v1,#&1fc]
+        ORR      a1,a1,a2,LSL #7
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&20
+|L004b7c.J23.fetch_pixel2|
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ec]!
+        LDMDB    fp,{v1-v4,fp,sp,pc}^
+
+do_add_ordered_dither_gun
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a2
+        RSB      a1,a3,#&20
+        SUB      v2,a1,a4
+        LDR      a1,[a2,#&158]
+        BL       rr
+        ORR      v3,a1,v2,LSL #7
+        LDR      a1,[v1,#&184]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&1700000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&184]
+        BL       rr
+        ORR      a1,a1,v2,LSL #7
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&30800000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+
+add_ordered_dither
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v3,a1
+        MOV      v2,a2
+        MOV      v1,a3
+        LDR      a4,[a2,#&1f4]
+        TEQ      a4,#0
+        LDMEQDB  fp,{v1-v3,fp,sp,pc}^
+        MOV      a4,v1,LSL #1
+        BL       do_add_ordered_dither_gun
+        MOV      a4,v1
+        MOV      a3,v1
+        MOV      a2,v2
+        MOV      a1,v3
+        BL       do_add_ordered_dither_gun
+        MOV      a3,v1
+        MOV      a2,v2
+        MOV      a1,v3
+        MOV      a4,#0
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_add_ordered_dither_gun
+
+translate_pixel
+        MOV      ip,sp
+        STMDB    sp!,{v1-v5,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a3,[a1,#&f4]
+        AND      a3,a3,#&ff
+        MOV      v5,#&1f
+        TEQ      a3,#&32
+        LDR      v3,[a1,#&74]
+        BNE      |L004d24.J4.translate_pixel|
+        LDR      a1,[v1,#&1e8]
+        AND      a1,a1,#7
+        TEQ      a1,#2
+        LDMNEDB  fp,{v1-v5,fp,sp,pc}^
+        LDR      a1,[v1,#&158]
+        BL       rr
+        LDR      a2,[v2,#&104]
+        SUB      a2,v5,a2
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&3800000
+        ORR      a2,a2,#&100
+        ORR      a2,a2,#2
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        LDR      a2,[v2,#&104]!
+        SUB      a2,v5,a2
+        ORR      v2,a1,a2,LSL #7
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&40
+        MOV      a1,v1
+        LDMDB    fp,{v1-v5,fp,sp,lr}
+        B        do_ins
+|L004d24.J4.translate_pixel|
+        LDR      a3,[v1,#&1f4]
+        TEQ      a3,#0
+        BEQ      |L004d40.J8.translate_pixel|
+        TEQ      v3,#5
+        MOVNE    a3,#5
+        MOVEQ    a3,#8
+        BL       add_ordered_dither
+|L004d40.J8.translate_pixel|
+        LDR      a1,[v2,#&f8]
+        TEQ      a1,#0
+        BEQ      |L004dd8.J13.translate_pixel|
+        CMP      v3,#3
+        MOVGT    a2,#4
+        MOVGT    a1,#&9d
+        ADDGT    a1,a1,#&800
+        BLGT     exit_c
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&10
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a4]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1
+        ORREQ    a2,a1,#&7900000
+        ORREQ    a2,a2,#&100
+        BEQ      |L004f1c.J58.translate_pixel|
+        ORR      a2,a1,#&7900000
+        ORR      a2,a2,#&180
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&420
+        MOV      a1,v1
+        BL       do_ins
+        MOV      v3,#5
+        B        |L004de0.J21.translate_pixel|
+|L004dd8.J13.translate_pixel|
+        TEQ      v3,#5
+        BNE      |L004f2c.J20.translate_pixel|
+|L004de0.J21.translate_pixel|
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        BEQ      |L0050d8.J23.translate_pixel|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#&800
+        ORR      a2,a2,#&f8
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&380
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#&c00
+        ORR      a2,a2,#&f8
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        ORR      a2,a2,#&500
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#&f8
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        ORR      a2,a2,#&680
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&820
+|L004f1c.J58.translate_pixel|
+        MOV      a1,v1
+        BL       do_ins
+        MOV      v3,#4
+        B        |L004f34.J24.translate_pixel|
+|L004f2c.J20.translate_pixel|
+        TEQ      v3,#4
+        BNE      |L0050d8.J23.translate_pixel|
+|L004f34.J24.translate_pixel|
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        BNE      |L0050d8.J23.translate_pixel|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&800
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&d20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&980
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#&600
+        ORR      a2,a2,#&3e
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        ORR      a2,a2,#&520
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&580
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        ORR      a2,a2,#&c20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&180]
+        BL       rr
+        ORR      a2,v3,a1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        ORR      a2,a2,#&2a0
+        MOV      a1,v1
+        BL       do_ins
+        MOV      v3,#5
+|L0050d8.J23.translate_pixel|
+        LDR      a1,[v2,#&b4]
+        TEQ      a1,#0
+        BEQ      |L005180.J26.translate_pixel|
+        LDR      a1,[v1,#&210]
+        CMP      a1,#3
+        BGT      |L005130.J28.translate_pixel|
+        CMP      v3,#4
+        MOVGT    a2,#4
+        MOVGT    a1,#&f6
+        ADDGT    a1,a1,#&800
+        BLGT     exit_c
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a4]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&7d00000
+        B        |L005170.J59.translate_pixel|
+|L005130.J28.translate_pixel|
+        CMP      v3,#3
+        MOVGT    a2,#4
+        MOVGT    a1,#&fc
+        ADDGT    a1,a1,#&800
+        BLGT     exit_c
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a4]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&7900000
+        ORR      a2,a2,#&100
+|L005170.J59.translate_pixel|
+        MOV      a1,v1
+        BL       do_ins
+        LDR      v3,[v1,#&210]
+        B        |L005624.J35.translate_pixel|
+|L005180.J26.translate_pixel|
+        TEQ      v3,#4
+        BNE      |L005624.J35.translate_pixel|
+        LDR      a1,[v1,#&210]
+        CMP      a1,#4
+        BGE      |L005624.J35.translate_pixel|
+        MOV      v4,#&3100000
+        ADD      v4,v4,#&10
+        TEQ      a1,#0
+        BNE      |L0051f8.J39.translate_pixel|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a2,v4,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      a2,#&3a00000
+        ADD      a2,a2,#1
+        ORR      a2,a2,a1,LSL #12
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      a2,#&3a00000
+        ADD      a2,a2,#&10000000
+        ORR      a2,a2,a1,LSL #12
+        MOV      a1,v1
+        BL       do_ins
+        MOV      v3,#0
+        B        |L00527c.J41.translate_pixel|
+|L0051f8.J39.translate_pixel|
+        TEQ      a1,#1
+        BNE      |L00527c.J41.translate_pixel|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&1a0
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#3
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#3
+        MOV      a1,v1
+        BL       do_ins
+        MOV      v3,#1
+|L00527c.J41.translate_pixel|
+        LDR      a1,[v1,#&210]
+        TEQ      a1,#2
+        BNE      |L005308.J44.translate_pixel|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&120
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#7
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#7
+        MOV      a1,v1
+        BL       do_ins
+        MOV      v3,#2
+        B        |L005624.J35.translate_pixel|
+|L005308.J44.translate_pixel|
+        TEQ      a1,#3
+        BNE      |L005624.J35.translate_pixel|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#&c00
+        ORR      a2,a2,#&1c
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&520
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#&e0
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&800000
+        ORR      a2,a2,#&2a0
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#7
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&800000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&800000
+        ORR      a2,a2,#&100
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      a2,#&3a00000
+        ORR      a2,a2,a1,LSL #12
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      a2,#&c40
+        ADD      a2,a2,#&3100000
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&13800000
+        ORR      a2,a2,#&80
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      a2,#&c20
+        ADD      a2,a2,#&3100000
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&13800000
+        ORR      a2,a2,#8
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        LDR      a2,[pc, #L005728-.-8]
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&13800000
+        ORR      a2,a2,#&40
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        LDR      a2,[pc, #L00572c-.-8]
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&13800000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a2,v4,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&13800000
+        ORR      a2,a2,#&10
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      a2,#&3100000
+        ADD      a2,a2,#8
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&13800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        ORR      a2,a2,#&2a0
+        MOV      a1,v1
+        BL       do_ins
+        MOV      v3,#3
+|L005624.J35.translate_pixel|
+        LDR      a1,[v1,#&210]
+        TEQ      v3,a1
+        MOVNE    a2,#4
+        MOVNE    a1,#&56
+        ADDNE    a1,a1,#&900
+        BLNE     exit_c
+        LDR      a1,[v1,#&1e8]
+        AND      a1,a1,#7
+        TEQ      a1,#2
+        BNE      |L0056dc.J51.translate_pixel|
+        TEQ      v3,#5
+        BEQ      |L0056dc.J51.translate_pixel|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        LDR      a2,[v2,#&104]
+        SUB      a2,v5,a2
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&3800000
+        ORR      a2,a2,#&100
+        ORR      a2,a2,#2
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        LDR      a2,[v2,#&104]
+        SUB      a2,v5,a2
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&40
+        MOV      a1,v1
+        BL       do_ins
+|L0056dc.J51.translate_pixel|
+        LDR      a1,[v2,#&104]
+        LDR      a2,[v2,#&100]
+        TEQ      a1,a2
+        LDMEQDB  fp,{v1-v5,fp,sp,pc}^
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        LDR      a2,[v2,#&104]!
+        ORR      a1,a1,a2,LSL #7
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v5,fp,sp,lr}
+        B        do_ins
+L005728
+        DCD     &03100c02
+L00572c
+        DCD     &03100c01
+
+save_pixel
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a1,#&104]
+        TEQ      a1,#&20
+        LDR      a1,[a2,#&1e8]
+        BNE      |L00591c.J4.save_pixel|
+        TEQ      a1,#0
+        BEQ      |L0058f4.J6.save_pixel|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&4900000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1e8]
+        SUB      a1,a1,#1
+        CMP      a1,#6
+        ADDLS    pc,pc,a1,LSL #2
+        B        |L005898.J8.save_pixel|
+        B        |L0057d0.J14.save_pixel|
+        B        |L005820.J13.save_pixel|
+        B        |L005848.J12.save_pixel|
+        B        |L005874.J11.save_pixel|
+        B        |L005898.J8.save_pixel|
+        B        |L0057fc.J10.save_pixel|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1e00000
+        MOV      a1,v1
+        BL       do_ins
+|L0057d0.J14.save_pixel|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&1800000
+        B        |L005890.J54.save_pixel|
+|L0057fc.J10.save_pixel|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1e00000
+        MOV      a1,v1
+        BL       do_ins
+|L005820.J13.save_pixel|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a2,v2,a1
+        B        |L005890.J54.save_pixel|
+|L005848.J12.save_pixel|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&200000
+        B        |L005890.J54.save_pixel|
+|L005874.J11.save_pixel|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1e00000
+|L005890.J54.save_pixel|
+        MOV      a1,v1
+        BL       do_ins
+|L005898.J8.save_pixel|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&4800000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1e8]
+        TEQ      a1,#7
+        TEQNE    a1,#6
+        LDMNEDB  fp,{v1-v3,fp,sp,pc}^
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1e00000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L0058f4.J6.save_pixel|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&4800000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L00591c.J4.save_pixel|
+        TEQ      a1,#6
+        TEQNE    a1,#7
+        BNE      |L005994.J21.save_pixel|
+        LDR      a1,[v2,#&100]
+        TEQ      a1,#&10
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        LDRNE    a2,[v1,#&21c]
+        ORRNE    a1,a1,a2
+        ORRNE    a2,a1,#&2200000
+        BNE      |L00598c.J55.save_pixel|
+        ORR      a2,a1,#&2200000
+        ORR      a2,a2,#&ff
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2200000
+        ORR      a2,a2,#&c00
+        ORR      a2,a2,#&ff
+|L00598c.J55.save_pixel|
+        MOV      a1,v1
+        BL       do_ins
+|L005994.J21.save_pixel|
+        LDR      a1,[v1,#&1e8]
+        CMP      a1,#7
+        ADDLS    pc,pc,a1,LSL #2
+        B        |L005b38.J28.save_pixel|
+        B        |L0059c4.J36.save_pixel|
+        B        |L005a44.J35.save_pixel|
+        B        |L005a70.J34.save_pixel|
+        B        |L005a98.J33.save_pixel|
+        B        |L005ac4.J32.save_pixel|
+        B        |L005b38.J28.save_pixel|
+        B        |L005a70.J34.save_pixel|
+        B        |L005a44.J35.save_pixel|
+|L0059c4.J36.save_pixel|
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        BEQ      |L005a44.J35.save_pixel|
+        LDR      a1,[v2,#&100]
+        TEQ      a1,#&10
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        BNE      |L005a2c.J39.save_pixel|
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&3c00000
+        ORR      a2,a2,#&ff
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&3c00000
+        ORR      a2,a2,#&c00
+        ORR      a2,a2,#&ff
+        B        |L005a3c.J56.save_pixel|
+|L005a2c.J39.save_pixel|
+        ORR      a2,v3,a1,LSL #16
+        LDR      a1,[v1,#&21c]
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&3c00000
+|L005a3c.J56.save_pixel|
+        MOV      a1,v1
+        BL       do_ins
+|L005a44.J35.save_pixel|
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        B        |L005b30.J57.save_pixel|
+|L005a70.J34.save_pixel|
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a2,v3,a1
+        B        |L005b30.J57.save_pixel|
+|L005a98.J33.save_pixel|
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&200000
+        B        |L005b30.J57.save_pixel|
+|L005ac4.J32.save_pixel|
+        LDR      a1,[v2,#&100]
+        TEQ      a1,#&10
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        BNE      |L005b20.J42.save_pixel|
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2200000
+        ORR      a2,a2,#&ff
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2200000
+        ORR      a2,a2,#&c00
+        ORR      a2,a2,#&ff
+        B        |L005b30.J57.save_pixel|
+|L005b20.J42.save_pixel|
+        ORR      a2,v3,a1,LSL #16
+        LDR      a1,[v1,#&21c]
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&2200000
+|L005b30.J57.save_pixel|
+        MOV      a1,v1
+        BL       do_ins
+|L005b38.J28.save_pixel|
+        LDR      a1,[v1,#&1e8]
+        TEQ      a1,#6
+        TEQNE    a1,#7
+        LDMNEDB  fp,{v1-v3,fp,sp,pc}^
+        LDR      a1,[v2,#&100]!
+        TEQ      a1,#&10
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        BNE      |L005bac.J49.save_pixel|
+        ORR      a2,a1,#&2200000
+        ORR      a2,a2,#&ff
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&2200000
+        ORR      a2,a2,#&c00
+        ORR      a2,a2,#&ff
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L005bac.J49.save_pixel|
+        LDR      a2,[v1,#&21c]
+        ORR      a1,a1,a2
+        ORR      a2,a1,#&2200000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+
+save_pixel_opt
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a2
+        LDR      a1,[a1,#&100]
+        TEQ      a1,#&10
+        LDR      a1,[a2,#&19c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        BNE      |L005c30.J4.save_pixel_opt|
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&3c00000
+        ORR      a2,a2,#&ff
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&3c00000
+        ORR      a2,a2,#&c00
+        ORR      a2,a2,#&ff
+        B        |L005c40.J9.save_pixel_opt|
+|L005c30.J4.save_pixel_opt|
+        ORR      a2,v2,a1,LSL #16
+        LDR      a1,[v1,#&21c]
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&3c00000
+|L005c40.J9.save_pixel_opt|
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&1800000
+        MOV      a1,v1
+        LDMDB    fp,{v1,v2,fp,sp,lr}
+        B        do_ins
+
+save_pixel2
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a2,#&1e8]
+        TEQ      a1,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&eb
+        ADDNE    a1,a1,#&900
+        BLNE     exit_c
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        BNE      |L005ce0.J6.save_pixel2|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&5800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L005ce0.J6.save_pixel2|
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        BEQ      |L005d84.J9.save_pixel2|
+        LDR      a1,[v2,#&100]
+        TEQ      a1,#&10
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        BNE      |L005d4c.J11.save_pixel2|
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&3c00000
+        ORR      a2,a2,#&800
+        ORR      a2,a2,#&ff
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&3c00000
+        ORR      a2,a2,#&400
+        ORR      a2,a2,#&ff
+        B        |L005d7c.J19.save_pixel2|
+|L005d4c.J11.save_pixel2|
+        ORR      a2,v3,a1,LSL #16
+        LDR      a1,[v2,#&100]
+        TEQ      a1,#1
+        MOVEQ    a1,#&2000000
+        ADDEQ    a1,a1,#2
+        BEQ      |L005d74.J14.save_pixel2|
+        RSB      a3,a1,#&20
+        LDR      a1,[v1,#&21c]
+        ORR      a1,a1,a3,LSL #7
+        ORR      a1,a1,#&2000000
+|L005d74.J14.save_pixel2|
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&1c00000
+|L005d7c.J19.save_pixel2|
+        MOV      a1,v1
+        BL       do_ins
+|L005d84.J9.save_pixel2|
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        LDR      a2,[v2,#&100]!
+        ORR      a1,a1,a2,LSL #7
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+
+fetch_pixel_inc
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a1,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BEQ      |L005ee4.J4.fetch_pixel_inc|
+        LDR      a1,[v2,#&74]
+        TEQ      a1,#5
+        BNE      |L005e14.J6.fetch_pixel_inc|
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2800000
+        ORR      a2,a2,#4
+        B        |L005edc.J25.fetch_pixel_inc|
+|L005e14.J6.fetch_pixel_inc|
+        LDR      a1,[v1,#&164]
+        BL       rr
+        LDR      a2,[v1,#&1fc]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&164]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        MOVNE    a1,#0
+        MOVEQ    a1,#1
+        LDR      a2,[v1,#&1ec]
+        TST      a1,a2
+        BEQ      |L005e88.J9.fetch_pixel_inc|
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        LDR      a2,[v1,#&1fc]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+|L005e88.J9.fetch_pixel_inc|
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&160]
+        BL       rr
+        ORR      a2,v3,a1,LSL #16
+        LDR      a1,[v1,#&1fc]
+        ORR      a1,a2,a1,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&164]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&f0000000
+        ORR      a2,a2,#&5b00000
+        ORR      a2,a2,#4
+|L005edc.J25.fetch_pixel_inc|
+        MOV      a1,v1
+        BL       do_ins
+|L005ee4.J4.fetch_pixel_inc|
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        LDMEQDB  fp,{v1-v3,fp,sp,pc}^
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BNE      |L005f0c.J17.fetch_pixel_inc|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L005f98.J16.fetch_pixel_inc|
+|L005f0c.J17.fetch_pixel_inc|
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        LDR      a2,[v1,#&204]
+        ORR      v2,a1,a2,LSL #7
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&170]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&170]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        LDR      a2,[v1,#&204]
+        ORR      a1,a1,a2,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&168]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&f0000000
+        ORR      a2,a2,#&5b00000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L005f98.J16.fetch_pixel_inc|
+        LDR      a1,[v2,#&74]!
+        TEQ      a1,#5
+        MOVEQ    a2,#4
+        MOVEQ    a1,#&31
+        ADDEQ    a1,a1,#&a00
+        BLEQ     exit_c
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      v2,a1,#&4100000
+        LDR      a1,[v1,#&174]
+        BL       rr
+        ORR      a1,a1,#&3800000
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&f0000000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+
+fetch_pixel_inc2
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a1,#&74]
+        TEQ      a1,#5
+        BNE      |L006030.J4.fetch_pixel_inc2|
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2800000
+        ORR      a2,a2,#8
+        B        |L006128.J24.fetch_pixel_inc2|
+|L006030.J4.fetch_pixel_inc2|
+        LDR      a1,[v2,#&78]
+        TEQ      a1,#4
+        LDR      a1,[v1,#&164]
+        BL       rr
+        BNE      |L006060.J7.fetch_pixel_inc2|
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&5b00000
+        ORR      a2,a2,#4
+        B        |L006128.J24.fetch_pixel_inc2|
+|L006060.J7.fetch_pixel_inc2|
+        LDR      a2,[v1,#&1fc]
+        MOV      a2,a2,LSL #1
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&164]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        MOVNE    a2,#0
+        MOVEQ    a2,#1
+        LDR      a1,[v1,#&1ec]
+        TST      a2,a1
+        BEQ      |L0060d4.J10.fetch_pixel_inc2|
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        LDR      a2,[v1,#&1fc]
+        MOV      a2,a2,LSL #1
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+|L0060d4.J10.fetch_pixel_inc2|
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&160]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        LDR      a2,[v1,#&1fc]
+        ORR      a1,a1,a2
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&200
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&164]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&f0000000
+        ORR      a2,a2,#&5b00000
+        ORR      a2,a2,#4
+|L006128.J24.fetch_pixel_inc2|
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        LDMEQDB  fp,{v1-v3,fp,sp,pc}^
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BEQ      |L0061d4.J17.fetch_pixel_inc2|
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        LDR      a2,[v1,#&204]
+        ORR      v2,a1,a2,LSL #7
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&170]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&170]
+        BL       rr
+        ORR      a2,v2,a1,LSL #16
+        LDR      a1,[v1,#&204]
+        ORR      a1,a2,a1,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&168]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&f0000000
+        ORR      a2,a2,#&5b00000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L0061d4.J17.fetch_pixel_inc2|
+        LDR      a1,[v2,#&74]!
+        TEQ      a1,#5
+        MOVEQ    a2,#4
+        MOVEQ    a1,#&6a
+        ADDEQ    a1,a1,#&a00
+        BLEQ     exit_c
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      v2,a1,#&4100000
+        LDR      a1,[v1,#&174]
+        BL       rr
+        ORR      a1,a1,#&3800000
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&f0000000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+
+odither_inc
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a2
+        MOV      v2,a3
+        LDR      a1,[a2,#&1f4]
+        TEQ      a1,#0
+        LDMEQDB  fp,{v1-v3,fp,sp,pc}^
+        LDR      a1,[v1,#&184]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&184]
+        BL       rr
+        ORR      a2,v3,a1,LSL #16
+        LDR      a1,[v1,#&1f4]
+        SUB      a3,a1,v2
+        MOV      a1,#1
+        ORR      a1,a2,a1,LSL a3
+        ORR      a2,a1,#&2200000
+        ORR      a2,a2,#&400
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+
+skip_current_output_words
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a2
+        LDR      a1,[a1,#&104]
+        MOV      v2,#&3a00000
+        TEQ      a1,#&20
+        BNE      |L0062f0.J4.skip_current_output_words|
+        LDR      a1,[v1,#&198]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&800000
+        ORR      a2,a2,#&100
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a2,v2,a1,LSL #12
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L0062f0.J4.skip_current_output_words|
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&400000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        LDR      a2,[v1,#&214]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      v3,v3,a1,LSL #8
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&70
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a2,v2,a1,LSL #12
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        LDR      a2,[v1,#&224]
+        ORR      v2,a1,a2,LSL #7
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1b00000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&198]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&10800000
+        ORR      a2,a2,#&100
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&4900000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        LDR      a2,[v1,#&224]
+        ORR      a1,a1,a2,LSL #7
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&400000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+
+skip_some_pixels
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a2
+        LDR      a1,[a2,#&1ac]
+        BL       rr
+        LDR      a2,[v1,#&214]
+        ORR      v2,a1,a2,LSL #7
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      v2,v2,a1,LSL #8
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&70
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&400000
+        ORR      a2,a2,#&d80
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      a2,#&3a00000
+        ORR      a2,a2,a1,LSL #12
+        MOV      a1,v1
+        LDMDB    fp,{v1,v2,fp,sp,lr}
+        B        do_ins
+
+save_pixel_inc
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a1,#&104]
+        TEQ      a1,#&20
+        BNE      |L006590.J4.save_pixel_inc|
+        LDR      a1,[v1,#&198]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L0066dc.J8.save_pixel_inc|
+        B        |L0066ac.J16.save_pixel_inc|
+|L006590.J4.save_pixel_inc|
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[v2,#&100]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L0065f8.J9.save_pixel_inc|
+        LDR      a1,[v1,#&164]
+        BL       rr
+        LDR      a2,[v2,#&100]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&164]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+|L0065f8.J9.save_pixel_inc|
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a2,v3,a1,LSL #16
+        LDR      a1,[v2,#&100]
+        ORR      a1,a2,a1,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&c0000000
+        ORR      a2,a2,#&34800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1e8]
+        TEQ      a1,#0
+        LDREQ    a1,[v1,#&1ec]
+        TEQEQ    a1,#0
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOVEQ    a2,#&1a00000
+        ORREQ    a1,a2,a1,LSL #12
+        ORREQ    a2,a1,#&f2000000
+        BEQ      |L006694.J19.save_pixel_inc|
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&f0000000
+        ORR      a2,a2,#&4900000
+|L006694.J19.save_pixel_inc|
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L0066dc.J8.save_pixel_inc|
+|L0066ac.J16.save_pixel_inc|
+        LDR      a1,[v1,#&164]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&18c]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&7900000
+        MOV      a1,v1
+        BL       do_ins
+|L0066dc.J8.save_pixel_inc|
+        MOV      a2,v1
+        MOV      a1,v2
+        MOV      a3,#0
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        odither_inc
+
+save_pixel_inc2
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a1,#&104]
+        TEQ      a1,#&20
+        BNE      |L006734.J4.save_pixel_inc2|
+        LDR      a1,[v1,#&198]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2800000
+        ORR      a2,a2,#8
+        B        |L006858.J18.save_pixel_inc2|
+|L006734.J4.save_pixel_inc2|
+        LDR      a1,[v2,#&100]
+        TEQ      a1,#&10
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        BNE      |L00679c.J7.save_pixel_inc2|
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOVEQ    a2,#&3a00000
+        ORREQ    a2,a2,a1,LSL #12
+        BEQ      |L006858.J18.save_pixel_inc2|
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4900000
+        B        |L006858.J18.save_pixel_inc2|
+|L00679c.J7.save_pixel_inc2|
+        LDR      a2,[v2,#&100]
+        MOV      a2,a2,LSL #1
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        LDR      a2,[v2,#&100]
+        ORR      a1,a1,a2
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&200
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&c0000000
+        ORR      a2,a2,#&34800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOVEQ    a2,#&1a00000
+        ORREQ    a1,a2,a1,LSL #12
+        ORREQ    a2,a1,#&f2000000
+        BEQ      |L006858.J18.save_pixel_inc2|
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&f0000000
+        ORR      a2,a2,#&4900000
+|L006858.J18.save_pixel_inc2|
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a2,v1
+        MOV      a1,v2
+        MOV      a3,#0
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        odither_inc
+
+plot_current_output_words
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        MOV      v5,a3
+        LDR      a1,[a1,#&104]
+        ADD      v4,a2,#&110
+        ADD      v3,a2,#&108
+        TEQ      a1,#&20
+        BNE      |L006ab0.J4.plot_current_output_words|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&4800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        CMP      v5,#&15
+        BGE      |L006968.J6.plot_current_output_words|
+        MOV      v6,#1
+        CMP      v5,#1
+        LDMLEDB  fp,{v1-v6,fp,sp,pc}^
+|L006904.J8.plot_current_output_words|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&14800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&10000000
+        ORR      a2,a2,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        ADD      v6,v6,#1
+        CMP      v6,v5
+        BLT      |L006904.J8.plot_current_output_words|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+|L006968.J6.plot_current_output_words|
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v2,#&3500000
+        ADD      v2,v2,#&a
+        ORR      a2,v2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v4
+        MOV      a1,v1
+        MOV      a2,#&da000000
+        BL       do_branch
+        MOV      a2,v3
+        MOV      a1,v1
+        BL       define_label
+        MOV      v6,#0
+|L0069a4.J13.plot_current_output_words|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+        ORR      a2,a1,#&4800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        ADD      v6,v6,#1
+        CMP      v6,#&a
+        BLT      |L0069a4.J13.plot_current_output_words|
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+        ORR      a2,a1,#&2400000
+        ORR      a2,a2,#&a
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a2,v2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v3
+        MOV      a1,v1
+        MOV      a2,#&ca000000
+        BL       do_branch
+        MOV      a2,v4
+        MOV      a1,v1
+        BL       define_label
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      a2,#&3500000
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        MOV      v6,#0
+|L006a4c.J15.plot_current_output_words|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&14800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&10000000
+        ORR      a2,a2,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        ADD      v6,v6,#1
+        CMP      v6,#&a
+        BLT      |L006a4c.J15.plot_current_output_words|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+|L006ab0.J4.plot_current_output_words|
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      v5,v5,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v5,a1
+        ORR      a2,a1,#&400000
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a2,v1,#&100
+        MOV      v6,a2
+        MOV      a1,v1
+        BL       define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_opt
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[v2,#&100]
+        ORR      v5,a1,a2,LSL #7
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v5,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a2,v5,a1,LSL #16
+        LDR      a1,[v2,#&100]
+        ORR      a1,a2,a1,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_opt
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[v2,#&100]
+        ORR      v5,a1,a2,LSL #7
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v5,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+        LDR      a2,[v2,#&100]
+        ORR      a1,a1,a2,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v4
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_opt
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[v2,#&100]
+        ORR      v5,a1,a2,LSL #7
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v5,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a2,v5,a1,LSL #16
+        LDR      a1,[v2,#&100]
+        ORR      a1,a2,a1,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a3,v1,#&118
+        MOV      v5,a3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_opt
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[v2,#&100]
+        ORR      a2,a1,a2,LSL #7
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #16
+        LDR      a2,[v2,#&100]
+        ORR      a1,a1,a2,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v6
+        MOV      a1,v1
+        MOV      a2,#&1a000000
+        BL       do_branch
+        MOV      a2,v3
+        MOV      a1,v1
+        BL       define_label
+        MOV      a2,v4
+        MOV      a1,v1
+        BL       define_label
+        MOV      a2,v5
+        MOV      a1,v1
+        BL       define_label
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        LDR      a2,[v1,#&224]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1b00000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a3,v1,#&128
+        MOV      v3,a3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        LDR      v6,[v2,#&104]
+        CMP      v6,#&20
+        BGE      |L006dbc.J19.plot_current_output_words|
+|L006d7c.J18.plot_current_output_words|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v4,v4,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,a1,v6,LSL #7
+        ORR      a1,v4,a1
+        ORR      a2,a1,#&1800000
+        MOV      a1,v1
+        BL       do_ins
+        MOV      v6,v6,LSL #1
+        CMP      v6,#&20
+        BLT      |L006d7c.J18.plot_current_output_words|
+|L006dbc.J19.plot_current_output_words|
+        ADD      a2,v1,#&120
+        MOV      v4,a2
+        MOV      a1,v1
+        BL       define_label
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+        ORR      a2,a1,#&4800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a2,v5,a1,LSL #16
+        LDR      a1,[v1,#&220]
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&2400000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v4
+        MOV      a1,v1
+        MOV      a2,#&1a000000
+        BL       do_branch
+        LDR      a1,[v2,#&100]!
+        TEQ      a1,#&10
+        LDR      a1,[v1,#&158]
+        BL       rr
+        BNE      |L006eb0.J22.plot_current_output_words|
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&800
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&820
+        B        |L006ecc.J32.plot_current_output_words|
+|L006eb0.J22.plot_current_output_words|
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a2,v2,a1,LSL #16
+        LDR      a1,[v1,#&21c]
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&2000000
+|L006ecc.J32.plot_current_output_words|
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a2,v3
+        MOV      a1,v1
+        BL       define_label
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&4900000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v6,fp,sp,lr}
+        B        do_ins
+
+plot_some_pixels
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        ADD      a2,a2,#&130
+        MOV      v6,a2
+        MOV      a1,v1
+        BL       define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_opt
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[v2,#&100]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a2,v3,a1,LSL #16
+        LDR      a1,[v2,#&100]
+        ORR      a1,a2,a1,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a3,v1,#&138
+        MOV      v5,a3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_opt
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[v2,#&100]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        LDR      a2,[v2,#&100]
+        ORR      a1,a1,a2,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a3,v1,#&140
+        MOV      v4,a3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_opt
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[v2,#&100]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        LDR      a2,[v2,#&100]
+        ORR      a1,a1,a2,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a3,v1,#&148
+        MOV      v3,a3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_opt
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[v2,#&100]
+        ORR      a2,a1,a2,LSL #7
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #16
+        LDR      a2,[v2,#&100]!
+        ORR      a1,a1,a2,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v6
+        MOV      a1,v1
+        MOV      a2,#&1a000000
+        BL       do_branch
+        MOV      a2,v5
+        MOV      a1,v1
+        BL       define_label
+        MOV      a2,v4
+        MOV      a1,v1
+        BL       define_label
+        MOV      a2,v3
+        MOV      a1,v1
+        LDMDB    fp,{v1-v6,fp,sp,lr}
+        B        define_label
+
+arbitrary_add
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a4
+        MOV      ip,#1
+        MOV      a4,#0
+        LDR      v3,[fp,#4]
+        CMP      v3,#0
+        BGE      |L007228.J4.arbitrary_add|
+        RSB      v3,v3,#0
+        TEQ      a2,#0
+        MOVNE    a2,a4
+        MOVEQ    a2,ip
+|L007228.J4.arbitrary_add|
+        TEQ      v3,#0
+        BNE      |L00724c.J9.arbitrary_add|
+        TEQ      a3,#0
+        LDMEQDB  fp,{v1-v6,fp,sp,pc}^
+        MOV      a2,#&3500000
+        LDR      a3,[v1,#0]
+        ORR      a2,a2,a3,LSL #16
+        LDMDB    fp,{v1-v6,fp,sp,lr}
+        B        do_ins
+|L00724c.J9.arbitrary_add|
+        TEQ      a2,#0
+        MOVEQ    v6,#&400000
+        MOVNE    v6,#&800000
+        TEQ      a3,#0
+        MOVEQ    v5,a4
+        MOVNE    v5,#&100000
+        MOV      v4,#0
+|L007268.J20.arbitrary_add|
+        CMP      v3,#&ff
+        BLE      |L007288.J23.arbitrary_add|
+        TST      v3,#3
+        BNE      |L007288.J23.arbitrary_add|
+|L007278.J25.arbitrary_add|
+        MOV      v3,v3,ASR #2
+        ADD      v4,v4,#2
+        TST      v3,#3
+        BEQ      |L007278.J25.arbitrary_add|
+|L007288.J23.arbitrary_add|
+        AND      a2,v3,#&ff
+        BICS     v3,v3,#&ff
+        MOVNE    a1,#0
+        MOVEQ    a1,#1
+        TEQ      a1,#0
+        MOVNE    a1,v5
+        ORR      a3,a1,v6
+        LDR      a1,[v1,#0]
+        ORR      a3,a3,a1,LSL #12
+        ORR      a1,a3,a1,LSL #16
+        ORR      a1,a1,a2
+        RSB      a2,v4,#&20
+        AND      a2,a2,#&1e
+        ORR      a1,a1,a2,LSL #7
+        ORR      a2,a1,#&2000000
+        MOV      a1,v2
+        BL       do_ins
+        TEQ      v3,#0
+        BNE      |L007268.J20.arbitrary_add|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+init_word_registers
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a1,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        LDRNE    a1,[v2,#&74]
+        TEQNE    a1,#5
+        BEQ      |L0073b0.J4.init_word_registers|
+        LDR      a1,[v1,#&164]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,#&800000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&da0
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&164]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v3,v3,a1,LSL #8
+        LDR      a1,[v1,#&164]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&70
+        MOV      a1,v1
+        BL       do_ins
+|L0073b0.J4.init_word_registers|
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        BEQ      |L0074b0.J8.init_word_registers|
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BNE      |L0073d8.J11.init_word_registers|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L00744c.J10.init_word_registers|
+|L0073d8.J11.init_word_registers|
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&168]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,#&800000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&170]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&da0
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#&20
+        B        |L007474.J25.init_word_registers|
+|L00744c.J10.init_word_registers|
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&174]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&7900000
+|L007474.J25.init_word_registers|
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v3,v3,a1,LSL #8
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&70
+        MOV      a1,v1
+        BL       do_ins
+|L0074b0.J8.init_word_registers|
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        LDMEQDB  fp,{v1-v3,fp,sp,pc}^
+        LDR      a1,[v1,#&1e8]
+        TEQ      a1,#0
+        LDREQ    a1,[v1,#&1ec]
+        TEQEQ    a1,#0
+        BNE      |L00757c.J17.init_word_registers|
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1b00000
+        ORR      a2,a2,#&da0
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a1,a1,#&800000
+        ORR      a2,a1,#&10000000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v2,v2,a1,LSL #8
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&10000000
+        ORR      a2,a2,#&1a00000
+        ORR      a2,a2,#&10
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      a2,#&1a00000
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&f2000000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L00757c.J17.init_word_registers|
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,#&800000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&da0
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v3,v3,a1,LSL #8
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&70
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v2,#&f4]!
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        LDMNEDB  fp,{v1-v3,fp,sp,pc}^
+        LDR      a1,[v1,#&164]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&18c]
+        BL       rr
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&7900000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&164]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v2,v2,a1,LSL #8
+        LDR      a1,[v1,#&164]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&70
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+
+align16
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a2
+        LDR      a1,[a2,#&10]
+        TST      a1,#1
+        LDMEQDB  fp,{v1,v2,fp,sp,pc}^
+|L0076bc.J4.align16|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&10]
+        TST      a1,#1
+        BNE      |L0076bc.J4.align16|
+        LDMDB    fp,{v1,v2,fp,sp,pc}^
+
+loop_x
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        SUB      sp,sp,#&24
+        BL       x_block_move
+        TEQ      a1,#0
+        BEQ      |L007758.J4.loop_x|
+        LDR      a1,[v1,#&1dc]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&1d8]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&188]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&1dc]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        B        |L008670.J80.loop_x|
+|L007758.J4.loop_x|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       init_word_registers
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       simple_x_scale
+        ADD      v5,v1,#&30
+        TEQ      a1,#0
+        BEQ      |L007cb8.J7.loop_x|
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        BEQ      |L00785c.J9.loop_x|
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      a2,a1,LSL #16
+        LDR      a1,[v2,#&100]
+        ORR      a1,a2,a1,LSL #1
+        ORR      a2,a1,#&3100000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a3,v1,#&70
+        MOV      v3,a3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        ADD      a3,v1,#&78
+        MOV      v6,a3
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel
+        MOV      v4,a1
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       translate_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel
+        TEQ      v4,#0
+        MOVNE    a2,v6
+        MOVNE    a1,v1
+        BLNE     define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_inc
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_inc
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        ORR      a1,v4,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v5
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a2,v3
+        MOV      a1,v1
+        BL       define_label
+|L00785c.J9.loop_x|
+        ADD      v3,v1,#&a0
+        LDR      a1,[v2,#&74]
+        TEQ      a1,#5
+        BEQ      |L0078a0.J13.loop_x|
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      a2,a1,LSL #16
+        LDR      a1,[v1,#&1fc]
+        ORR      a1,a2,a1,LSL #1
+        ORR      a2,a1,#&3100000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v3
+        MOV      a1,v1
+        MOV      a2,#&1a000000
+        BL       do_branch
+|L0078a0.J13.loop_x|
+        ADD      a3,v1,#&88
+        MOV      v6,a3
+        MOV      a1,v1
+        MOV      a2,#&a000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       align16
+        ADD      a2,v1,#&80
+        MOV      a1,v1
+        STR      a2,[sp,#&20]
+        BL       define_label
+        ADD      a3,v1,#&90
+        MOV      a2,v1
+        MOV      a1,v2
+        STR      a3,[sp,#&1c]
+        BL       fetch_pixel
+        MOV      v4,a1
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       translate_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel
+        TEQ      v4,#0
+        MOVNE    a1,v1
+        LDRNE    a2,[sp,#&1c]
+        BLNE     define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        MOV      a3,#0
+        BL       odither_inc
+        ADD      a3,v1,#&98
+        MOV      a2,v1
+        MOV      a1,v2
+        STR      a3,[sp,#&18]
+        BL       fetch_pixel2
+        MOV      v4,a1
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       translate_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel2
+        TEQ      v4,#0
+        MOVNE    a1,v1
+        LDRNE    a2,[sp,#&18]
+        BLNE     define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_inc2
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_inc2
+        MOV      a2,v6
+        MOV      a1,v1
+        BL       define_label
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        ORR      a1,v4,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#2
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a1,v1
+        MOV      a2,#&aa000000
+        LDR      a3,[sp,#&20]
+        BL       do_branch
+        LDR      a1,[v2,#&74]
+        TEQ      a1,#5
+        BEQ      |L007c14.J32.loop_x|
+        ADD      a3,v1,#&c8
+        MOV      v4,a3
+        MOV      a1,v1
+        MOV      a2,#&a000000
+        BL       do_branch
+        MOV      a2,v3
+        MOV      a1,v1
+        BL       define_label
+        LDR      a1,[v2,#&74]
+        TEQ      a1,#5
+        BNE      |L007a18.J21.loop_x|
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2400000
+        ORR      a2,a2,#4
+        B        |L007a68.J76.loop_x|
+|L007a18.J21.loop_x|
+        LDR      a1,[v1,#&164]
+        BL       rr
+        LDR      a2,[v1,#&1f8]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&164]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&160]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        LDR      a2,[v1,#&1f8]
+        ORR      a1,a1,a2,LSL #1
+        ORR      a2,a1,#&2800000
+        ORR      a2,a2,#&300
+|L007a68.J76.loop_x|
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        BEQ      |L007ae0.J24.loop_x|
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        LDR      a2,[v1,#&204]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BEQ      |L007ae0.J24.loop_x|
+        LDR      a1,[v1,#&170]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&170]
+        BL       rr
+        ORR      a2,v3,a1,LSL #16
+        LDR      a1,[v1,#&204]
+        ORR      a1,a2,a1,LSL #1
+        ORR      a2,a1,#&2800000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+|L007ae0.J24.loop_x|
+        ADD      a3,v1,#&b0
+        MOV      v3,a3
+        MOV      a1,v1
+        MOV      a2,#&a000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       align16
+        ADD      a2,v1,#&a8
+        MOV      a1,v1
+        STR      a2,[sp,#&14]
+        BL       define_label
+        ADD      a3,v1,#&b8
+        MOV      a2,v1
+        MOV      a1,v2
+        STR      a3,[sp,#&10]
+        BL       fetch_pixel2
+        MOV      v6,a1
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       translate_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel
+        TEQ      v6,#0
+        MOVNE    a1,v1
+        LDRNE    a2,[sp,#&10]
+        BLNE     define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_inc2
+        MOV      a2,v1
+        MOV      a1,v2
+        MOV      a3,#0
+        BL       odither_inc
+        ADD      a3,v1,#&c0
+        MOV      a2,v1
+        MOV      a1,v2
+        STR      a3,[sp,#&c]
+        BL       fetch_pixel
+        MOV      v6,a1
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       translate_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel2
+        TEQ      v6,#0
+        MOVNE    a1,v1
+        LDRNE    a2,[sp,#&c]
+        BLNE     define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_inc2
+        MOV      a2,v3
+        MOV      a1,v1
+        BL       define_label
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#2
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a1,v1
+        MOV      a2,#&aa000000
+        LDR      a3,[sp,#&14]
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_inc
+        MOV      a2,v4
+        MOV      a1,v1
+        BL       define_label
+|L007c14.J32.loop_x|
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2900000
+        ORR      a2,a2,#2
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a3,v1,#&d8
+        MOV      v4,a3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        ADD      a3,v1,#&d0
+        MOV      v3,a3
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel
+        MOV      v6,a1
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       translate_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel
+        TEQ      v6,#0
+        MOVNE    a2,v3
+        MOVNE    a1,v1
+        BLNE     define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_inc
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_inc
+        MOV      a2,v4
+        MOV      a1,v1
+        BL       define_label
+        B        |L0084e0.J35.loop_x|
+|L007cb8.J7.loop_x|
+        LDR      a1,[v1,#&1f4]
+        ADD      a3,v1,#&38
+        ADD      v3,v1,#&28
+        ADD      v6,v1,#&40
+        ADD      v4,v1,#&1ac
+        TEQ      a1,#0
+        STR      a3,[sp,#8]
+        BEQ      |L007e28.J36.loop_x|
+        ADD      a2,v2,#&40
+        LDMIA    a2,{a1,a2}
+        SUB      a3,a2,a1
+        CMP      a3,a1
+        BLE      |L007e28.J36.loop_x|
+        MOV      a4,a2
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a1,v1
+        MOV      a3,#0
+        MOV      a2,#0
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a2,v3
+        MOV      a1,v1
+        BL       define_label
+        LDR      a4,[v2,#&44]
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a1,v1
+        MOV      a3,#0
+        MOV      a2,#1
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a2,v1
+        MOV      a1,v2
+        LDR      a3,[sp,#8]
+        BL       fetch_pixel
+        STR      a1,[sp,#0]
+        LDR      a4,[v2,#&40]
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a1,v1
+        MOV      a3,#1
+        MOV      a2,#0
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a2,v6
+        MOV      a1,v1
+        BL       define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       translate_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_inc
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v5
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_unmasked
+        LDR      a4,[v2,#&40]
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a1,v1
+        MOV      a3,#1
+        MOV      a2,#0
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a3,v6
+        MOV      a1,v1
+        MOV      a2,#&5a000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_inc
+        B        |L0080c4.J50.loop_x|
+|L007e28.J36.loop_x|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BEQ      |L008110.J40.loop_x|
+        LDR      a1,[v2,#&40]
+        LDR      a2,[v2,#&68]
+        BL       |__rt_sdiv|
+        TEQ      a2,#0
+        BNE      |L008110.J40.loop_x|
+        CMP      a1,#4
+        BLE      |L008110.J40.loop_x|
+        LDR      a2,[v1,#&1e8]
+        TEQ      a2,#0
+        BNE      |L008110.J40.loop_x|
+        MOV      v6,a1
+        MOV      a4,a1
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a1,v1
+        MOV      a3,#0
+        MOV      a2,#0
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a2,v3
+        MOV      a1,v1
+        BL       define_label
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      a2,#&3300000
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a2,v1,#&e0
+        MOV      a1,v1
+        BL       define_label
+        MOV      a3,v5
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a4,v6
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a1,v1
+        MOV      a3,#0
+        MOV      a2,#1
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a2,v1
+        MOV      a1,v2
+        LDR      a3,[sp,#8]
+        BL       fetch_pixel
+        MOV      a2,v1
+        STR      a1,[sp,#0]
+        MOV      a1,v2
+        BL       translate_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_inc
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      a2,a1
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&178]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        LDR      a2,[sp,#0]
+        ORR      a2,a2,a1,LSL #16
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&500000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      a2,#&3a00000
+        ADD      a2,a2,#&40000000
+        ORR      a2,a2,a1,LSL #12
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      a2,a1
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&40000000
+        ORR      a2,a2,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a2,v1,#&f0
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        STR      a2,[sp,#4]
+        BEQ      |L0080a8.J45.loop_x|
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      a2,a1
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&178]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&1b00000
+        ORR      a2,a2,#&da0
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      a2,#&1a00000
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&f2000000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v2,#&100]
+        TEQ      a1,#1
+        BEQ      |L00806c.J47.loop_x|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        LDR      a2,[v1,#&214]
+        ORR      a2,a1,a2,LSL #7
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&178]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+|L00806c.J47.loop_x|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      a2,a1
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #16
+        ORR      a2,a1,#&1500000
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a1,v1
+        MOV      a2,#&ba000000
+        LDR      a3,[sp,#4]
+        BL       do_branch
+|L0080a8.J45.loop_x|
+        MOV      a3,v6
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       plot_current_output_words
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        BNE      |L0080cc.J49.loop_x|
+|L0080c4.J50.loop_x|
+        MOV      a3,v3
+        B        |L008220.J77.loop_x|
+|L0080cc.J49.loop_x|
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      a2,#&3300000
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a1,v1
+        LDR      a2,[sp,#4]
+        BL       define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       plot_some_pixels
+        B        |L0080c4.J50.loop_x|
+|L008110.J40.loop_x|
+        LDR      a4,[v2,#&44]
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a1,v1
+        MOV      a3,#0
+        MOV      a2,#0
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a2,v3
+        MOV      a1,v1
+        BL       define_label
+        LDR      a4,[v2,#&44]
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a1,v1
+        MOV      a3,#0
+        MOV      a2,#1
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a2,v1
+        MOV      a1,v2
+        LDR      a3,[sp,#8]
+        BL       fetch_pixel
+        MOV      a2,v1
+        STR      a1,[sp,#0]
+        MOV      a1,v2
+        BL       translate_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_inc
+        MOV      a2,v6
+        MOV      a1,v1
+        BL       define_label
+        LDR      a4,[v2,#&40]
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a1,v1
+        MOV      a3,#1
+        MOV      a2,#0
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a3,v3
+        MOV      a1,v1
+        MOV      a2,#&4a000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_inc
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v6
+        MOV      a1,v1
+        MOV      a2,#&1a000000
+        BL       do_branch
+        MOV      a3,v5
+|L008220.J77.loop_x|
+        MOV      a1,v1
+        MOV      a2,#&a000000
+        BL       do_branch
+        LDR      a1,[sp,#0]
+        TEQ      a1,#0
+        BEQ      |L0084e0.J35.loop_x|
+        MOV      a1,v1
+        LDR      a2,[sp,#8]
+        BL       define_label
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BEQ      |L008450.J55.loop_x|
+        LDR      a1,[v2,#&40]
+        LDR      a2,[v2,#&68]
+        BL       |__rt_sdiv|
+        TEQ      a2,#0
+        BNE      |L008450.J55.loop_x|
+        CMP      a1,#4
+        BLE      |L008450.J55.loop_x|
+        LDR      a1,[v1,#&1e8]
+        TEQ      a1,#0
+        BNE      |L008450.J55.loop_x|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_inc
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      v4,a1
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v4,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        ORR      v4,v4,a1,LSL #16
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v4,a1
+        ORR      a2,a1,#&500000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      a2,#&3a00000
+        ADD      a2,a2,#&40000000
+        ORR      a2,a2,a1,LSL #12
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v4,a1
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v4,a1,LSL #12
+        ORR      a2,a1,#&40000000
+        ORR      a2,a2,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        ADD      v4,v1,#&e8
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        BEQ      |L0083e4.J60.loop_x|
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v6,a1
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v6,a1,LSL #12
+        ORR      a2,a1,#&1b00000
+        ORR      a2,a2,#&da0
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      a2,#&1a00000
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&f2000000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v2,#&100]
+        TEQ      a1,#1
+        BEQ      |L0083b0.J62.loop_x|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        LDR      a2,[v1,#&214]
+        ORR      v6,a1,a2,LSL #7
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v6,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+|L0083b0.J62.loop_x|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v6,a1
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v6,a1,LSL #16
+        ORR      a2,a1,#&1500000
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v4
+        MOV      a1,v1
+        MOV      a2,#&ba000000
+        BL       do_branch
+|L0083e4.J60.loop_x|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       skip_current_output_words
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        BNE      |L00840c.J64.loop_x|
+|L0083fc.J65.loop_x|
+        MOV      a3,v3
+        MOV      a1,v1
+        MOV      a2,#&a000000
+        B        |L0084dc.J78.loop_x|
+|L00840c.J64.loop_x|
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      a2,#&3300000
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a2,v4
+        MOV      a1,v1
+        BL       define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       skip_some_pixels
+        B        |L0083fc.J65.loop_x|
+|L008450.J55.loop_x|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_inc
+        ADD      a2,v1,#&48
+        MOV      v6,a2
+        MOV      a1,v1
+        BL       define_label
+        LDR      a4,[v2,#&40]
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a1,v1
+        MOV      a3,#1
+        MOV      a2,#0
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a3,v3
+        MOV      a1,v1
+        MOV      a2,#&4a000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_inc
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v6
+        MOV      a1,v1
+        MOV      a2,#&1a000000
+|L0084dc.J78.loop_x|
+        BL       do_branch
+|L0084e0.J35.loop_x|
+        MOV      a2,v5
+        MOV      a1,v1
+        BL       define_label
+        LDR      a1,[v2,#&104]!
+        TEQ      a1,#&20
+        BEQ      |L008678.J81.loop_x|
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1b00000
+        ORR      a2,a2,#&da0
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      a2,#&1a00000
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&f2000000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1e8]
+        TEQ      a1,#0
+        LDREQ    a1,[v1,#&1ec]
+        TEQEQ    a1,#0
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      v2,v2,a1,LSL #8
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORRNE    a2,a1,#&1a00000
+        ORRNE    a2,a2,#&70
+        BNE      |L00864c.J79.loop_x|
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&30
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&4900000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      v2,v2,a1,LSL #8
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&30
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      v3,v2,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #8
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        ORR      a2,a2,#&10
+|L00864c.J79.loop_x|
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&4800000
+|L008670.J80.loop_x|
+        MOV      a1,v1
+        BL       do_ins
+|L008678.J81.loop_x|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+loop_y
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        SUB      sp,sp,#&10
+        LDR      a1,[a1,#&74]
+        MOV      v3,#1
+        MOV      a1,v3,LSL a1
+        STR      a1,[a2,#&1f8]
+        LDR      a1,[v2,#&78]
+        MOV      a1,v3,LSL a1
+        STR      a1,[a2,#&1fc]
+        LDR      a1,[a2,#&1f8]
+        MOV      a1,v3,LSL a1
+        SUB      a1,a1,#1
+        STR      a1,[v1,#&200]
+        LDR      a2,[v1,#&1ec]
+        TEQ      a2,#0
+        LDR      a1,[v1,#&1f8]
+        BEQ      |L0086fc.J17.loop_y|
+        LDR      a2,[v1,#&1f0]
+        TEQ      a2,#0
+        STRNE    v3,[v1,#&204]
+        STRNE    v3,[v1,#&208]
+        STRNE    v3,[v1,#&20c]
+        BNE      |L0086fc.J17.loop_y|
+        STR      a1,[v1,#&204]
+        LDR      a1,[v1,#&1fc]
+        STR      a1,[v1,#&208]
+        LDR      a1,[v1,#&200]
+        STR      a1,[v1,#&20c]
+|L0086fc.J17.loop_y|
+        LDR      a2,[v1,#&214]
+        RSB      a1,a2,#5
+        STR      a1,[v1,#&224]
+        MOV      a1,v3,LSL a1
+        STR      a1,[v1,#&220]
+        LDR      a1,[v2,#&104]
+        MOV      a1,v3,LSL a1
+        SUB      a1,a1,#1
+        STR      a1,[v1,#&218]
+        LDR      a1,[v2,#&100]
+        MOV      a1,v3,LSL a1
+        SUB      a1,a1,#1
+        STR      a1,[v1,#&21c]
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BEQ      |L0087a4.J20.loop_y|
+        LDR      a2,[v1,#&1f8]
+        CMP      a2,#&10
+        BLT      |L0087a4.J20.loop_y|
+        LDR      a1,[v2,#&104]
+        CMP      a1,a2
+        BGE      |L0087a4.J20.loop_y|
+        LDR      a2,[v2,#&138]
+        TST      a2,#1
+        BEQ      |L0087a4.J20.loop_y|
+        TEQ      a1,#&10
+        MOVEQ    a1,#2
+        BEQ      |L0087a0.J111.loop_y|
+        LDR      a1,[v1,#&210]
+        TEQ      a1,#3
+        RSBNE    a1,a1,#6
+        BNE      |L0087a0.J111.loop_y|
+        LDR      a1,[v2,#&110]
+        TEQ      a1,#0
+        BEQ      |L00879c.J30.loop_y|
+        LDR      a1,[a3,#&1c]!
+        TEQ      a1,#1
+        MOVEQ    a1,#3
+        BEQ      |L0087a0.J111.loop_y|
+|L00879c.J30.loop_y|
+        MOV      a1,#4
+|L0087a0.J111.loop_y|
+        STR      a1,[v1,#&1f4]
+|L0087a4.J20.loop_y|
+        MOV      a1,v1
+        MVN      a2,#&2a000
+        ADD      a2,a2,#&9300000
+        BL       do_ins
+        LDR      a1,[v2,#&110]
+        TEQ      a1,#0
+        STRNE    v3,[v1,#&1e4]
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       ptrs_rn
+        LDR      a1,[v1,#&1e0]
+        MOV      a1,v3,LSL a1
+        SUB      v5,a1,#1
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BNE      |L0087f4.J39.loop_y|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L0087fc.J38.loop_y|
+|L0087f4.J39.loop_y|
+        MOV      v6,#&c
+        B        |L008800.J37.loop_y|
+|L0087fc.J38.loop_y|
+        MOV      v6,#8
+|L008800.J37.loop_y|
+        LDR      a1,[v1,#&1f4]
+        TEQ      a1,#0
+        ADDNE    v6,v6,#4
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       xloop_rn
+        MOV      a2,#1
+        LDR      a1,[v1,#&1e0]
+        MOV      a2,a2,LSL a1
+        SUB      a3,a2,#1
+        BIC      v3,a3,v5
+        RSB      v4,v6,a1,LSL #2
+        LDR      a1,[v1,#&164]
+        CMN      a1,#1
+        BEQ      |L00884c.J44.loop_y|
+        MOV      a2,#1
+        MVN      a1,a2,LSL a1
+        AND      v3,a1,v3
+        SUB      v4,v4,#4
+|L00884c.J44.loop_y|
+        LDR      a1,[v1,#&19c]
+        CMN      a1,#1
+        BEQ      |L008868.J46.loop_y|
+        MOV      a2,#1
+        MVN      a1,a2,LSL a1
+        AND      v3,a1,v3
+        SUB      v4,v4,#4
+|L008868.J46.loop_y|
+        LDR      a1,[v1,#&16c]
+        CMN      a1,#1
+        BEQ      |L008884.J48.loop_y|
+        MOV      a2,#1
+        MVN      a1,a2,LSL a1
+        AND      v3,a1,v3
+        SUB      v4,v4,#4
+|L008884.J48.loop_y|
+        LDR      a1,[v1,#&178]
+        CMN      a1,#1
+        BEQ      |L0088a0.J50.loop_y|
+        MOV      a2,#1
+        MVN      a1,a2,LSL a1
+        AND      v3,a1,v3
+        SUB      v4,v4,#4
+|L0088a0.J50.loop_y|
+        LDR      a1,[v1,#&17c]
+        CMN      a1,#1
+        BEQ      |L0088bc.J52.loop_y|
+        MOV      a2,#1
+        MVN      a1,a2,LSL a1
+        AND      v3,a1,v3
+        SUB      v4,v4,#4
+|L0088bc.J52.loop_y|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       yloop_rn_count
+        LDR      a2,[v1,#&1e0]
+        ADD      a2,a1,a2
+        LDR      a1,[v1,#&1e4]
+        ADD      a1,a2,a1
+        CMP      a1,#&d
+        MOVGT    a1,#0
+        MOVLE    a1,#1
+        STR      a1,[sp,#0]
+        CMP      a1,#0
+        MOVEQ    a1,#4
+        STREQ    a1,[v1,#&1e0]
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       yloop_rn
+        BNE      |L00891c.J59.loop_y|
+        MOV      a2,#1
+        LDR      a1,[v1,#&1e0]
+        MOV      a1,a2,LSL a1
+        SUB      a1,a1,#1
+        BIC      a1,a1,#&f
+        STR      a1,[sp,#4]
+|L00891c.J59.loop_y|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_init
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_init
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       xloop_init
+        LDR      a1,[v1,#&1f4]
+        TEQ      a1,#0
+        BEQ      |L0089a8.J61.loop_y|
+        LDR      a1,[v2,#&74]
+        TEQ      a1,#4
+        BNE      |L0089a8.J61.loop_y|
+        MOV      a2,#1
+        LDR      a1,[v1,#&1ac]
+        MVN      a1,a2,LSL a1
+        AND      a1,a1,v3
+        MOV      a3,#1
+        LDR      a2,[v1,#&158]
+        ORR      v3,a1,a3,LSL a2
+        ORR      a1,v3,v5
+        ORR      a2,a1,#&9000000
+        ORR      a2,a2,#&2d0000
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a2,#1
+        LDR      a1,[v1,#&1ac]
+        ORR      a1,v3,a2,LSL a1
+        MOV      a3,#1
+        LDR      a2,[v1,#&158]
+        MVN      a2,a3,LSL a2
+        AND      v3,a2,a1
+        B        |L0089bc.J64.loop_y|
+|L0089a8.J61.loop_y|
+        ORR      a1,v3,v5
+        ORR      a2,a1,#&9000000
+        ORR      a2,a2,#&2d0000
+        MOV      a1,v1
+        BL       do_ins
+|L0089bc.J64.loop_y|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       yloop_init
+        LDR      a1,[v1,#&1f4]
+        TEQ      a1,#0
+        BEQ      |L008a0c.J65.loop_y|
+        LDR      a1,[v2,#&74]
+        TEQ      a1,#4
+        BNE      |L008a0c.J65.loop_y|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      a2,a1
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+|L008a0c.J65.loop_y|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       simple_y_scale
+        ADD      a2,v1,#&58
+        TEQ      a1,#0
+        STR      a2,[sp,#&c]
+        BNE      |L008a38.J68.loop_y|
+        MOV      a1,v1
+        MOV      a2,#&a000000
+        LDR      a3,[sp,#&c]
+        BL       do_branch
+|L008a38.J68.loop_y|
+        ADD      a2,v1,#&50
+        MOV      a1,v1
+        STR      a2,[sp,#8]
+        BL       define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       simple_y_scale
+        TEQ      a1,#0
+        BNE      |L008a74.J70.loop_y|
+        LDR      a1,[v1,#&1d4]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+        ORR      a2,a1,#&8800000
+        MOV      a1,v1
+        BL       do_ins
+|L008a74.J70.loop_y|
+        LDR      a1,[v2,#&110]
+        TEQ      a1,#0
+        BEQ      |L008c10.J72.loop_y|
+        LDR      a1,[v1,#&1dc]
+        BL       rr
+        MOV      a2,a1
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1d8]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&194]
+        BL       rr
+        MOV      a2,a1
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1dc]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1d8]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a3,v2,#&114
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v2,#&74]
+        CMP      a1,#5
+        BGE      |L008bcc.J74.loop_y|
+        TEQ      a1,#3
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        SUB      sp,sp,#4
+        BNE      |L008b68.J76.loop_y|
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        LDR      a2,[sp,#0]
+        ORR      a2,a2,a1,LSL #16
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&1d8]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&800000
+        B        |L008b98.J112.loop_y|
+|L008b68.J76.loop_y|
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        LDR      a2,[sp,#0]
+        ORR      a2,a2,a1,LSL #16
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&1d8]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&800000
+        ORR      a2,a2,#&80
+|L008b98.J112.loop_y|
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #16
+        ORR      a2,a1,#&3c00000
+        ORR      a2,a2,#3
+        B        |L008c08.J113.loop_y|
+|L008bcc.J74.loop_y|
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        LDR      a2,[sp,#0]
+        ORR      a2,a2,a1,LSL #16
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&1d8]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&800000
+        ORR      a2,a2,#&100
+|L008c08.J113.loop_y|
+        MOV      a1,v1
+        BL       do_ins
+|L008c10.J72.loop_y|
+        LDR      a1,[sp,#0]
+        CMP      a1,#0
+        BNE      |L008c78.J82.loop_y|
+        LDR      a1,[v1,#&1d8]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1d4]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #16
+        ORR      a1,a1,v6
+        ORR      a2,a1,#&2800000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[sp,#4]
+        ORR      a2,a1,#&9000000
+        ORR      a2,a2,#&2d0000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1d8]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&8900000
+        MOV      a1,v1
+        BL       do_ins
+|L008c78.J82.loop_y|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       loop_x
+        BEQ      |L008c9c.J83.loop_y|
+        LDR      a1,[v1,#&1d4]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a1,a1,v5
+        B        |L008cbc.J114.loop_y|
+|L008c9c.J83.loop_y|
+        LDR      a1,[sp,#4]
+        ORR      a2,a1,#&8000000
+        ORR      a2,a2,#&bd0000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1d4]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+|L008cbc.J114.loop_y|
+        ORR      a2,a1,#&8900000
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       simple_y_scale
+        ADD      v3,v1,#&198
+        TEQ      a1,#0
+        BEQ      |L008e40.J86.loop_y|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BEQ      |L008d60.J88.loop_y|
+        LDR      a1,[v2,#&110]
+        TEQ      a1,#0
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        SUB      sp,sp,#4
+        BEQ      |L008d2c.J90.loop_y|
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #16
+        ORR      a2,a1,#&2800000
+        ORR      a2,a2,#1
+        B        |L008d58.J115.loop_y|
+|L008d2c.J90.loop_y|
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        LDR      a2,[sp,#0]
+        ORR      a2,a2,a1,LSL #16
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&1b8]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&400000
+|L008d58.J115.loop_y|
+        MOV      a1,v1
+        BL       do_ins
+|L008d60.J88.loop_y|
+        LDR      a4,[v2,#0]
+        STMDB    sp!,{a4}
+        MOV      a4,v3
+        MOV      a1,v1
+        MOV      a3,#0
+        MOV      a2,#0
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a2,v1
+        MOV      a1,v2
+        MOV      a3,#1
+        BL       odither_inc
+        MOV      a2,v1
+        MOV      a1,v2
+        MOV      a3,#0
+        BL       odither_inc
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BNE      |L008dbc.J94.loop_y|
+        LDR      a1,[v2,#&f4]!
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L008dec.J93.loop_y|
+|L008dbc.J94.loop_y|
+        LDR      a1,[v1,#&168]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&168]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&1bc]
+        BL       rr
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&400000
+        MOV      a1,v1
+        BL       do_ins
+|L008dec.J93.loop_y|
+        LDR      a1,[v1,#&1d4]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+        ORR      a2,a1,#&8800000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1b0]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1b0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a1,v1
+        MOV      a2,#&ca000000
+        LDR      a3,[sp,#8]
+        BL       do_branch
+        B        |L0090d8.J97.loop_y|
+|L008e40.J86.loop_y|
+        LDR      a1,[v1,#&1b0]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&1b0]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a3,v1,#&60
+        MOV      v5,a3
+        MOV      a1,v1
+        MOV      a2,#&da000000
+        BL       do_branch
+        LDR      a4,[v2,#0]
+        STMDB    sp!,{a4}
+        MOV      a4,v3
+        MOV      a1,v1
+        MOV      a3,#0
+        MOV      a2,#0
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a2,v1
+        MOV      a1,v2
+        MOV      a3,#1
+        BL       odither_inc
+        MOV      a2,v1
+        MOV      a1,v2
+        MOV      a3,#0
+        BL       odither_inc
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L008f78.J98.loop_y|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a3,v2,#&38
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&1500000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&c0000000
+        ORR      a2,a2,#&32800000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2400000
+        ORR      a2,a2,#8
+        MOV      a1,v1
+        BL       do_ins
+|L008f78.J98.loop_y|
+        MOV      a1,v1
+        LDR      a2,[sp,#&c]
+        BL       define_label
+        LDR      a4,[v2,#&10]
+        STMDB    sp!,{a4}
+        ADD      a4,v1,#&1b4
+        MOV      v3,a4
+        MOV      a1,v1
+        MOV      a3,#1
+        MOV      a2,#0
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a1,v1
+        MOV      a2,#&5a000000
+        LDR      a3,[sp,#8]
+        BL       do_branch
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BEQ      |L009038.J100.loop_y|
+        LDR      a1,[v2,#&110]
+        TEQ      a1,#0
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        SUB      sp,sp,#4
+        BEQ      |L009004.J102.loop_y|
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #16
+        ORR      a2,a1,#&2800000
+        ORR      a2,a2,#1
+        B        |L009030.J116.loop_y|
+|L009004.J102.loop_y|
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        LDR      a2,[sp,#0]
+        ORR      a2,a2,a1,LSL #16
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&1b8]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&400000
+|L009030.J116.loop_y|
+        MOV      a1,v1
+        BL       do_ins
+|L009038.J100.loop_y|
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BNE      |L009054.J106.loop_y|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L009094.J105.loop_y|
+|L009054.J106.loop_y|
+        LDR      a1,[v1,#&168]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&168]
+        BL       rr
+        LDR      a2,[sp,#0]
+        ORR      a2,a2,a1,LSL #16
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&1bc]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&400000
+        MOV      a1,v1
+        BL       do_ins
+|L009094.J105.loop_y|
+        ADD      v2,v2,#&c
+        LDMIB    v2!,{a1,a2}
+        ADD      a4,a1,a2
+        STMDB    sp!,{a4}
+        MOV      a4,v3
+        MOV      a1,v1
+        MOV      a3,#0
+        MOV      a2,#1
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a1,v1
+        MOV      a2,#&a000000
+        LDR      a3,[sp,#&c]
+        BL       do_branch
+        MOV      a2,v5
+        MOV      a1,v1
+        BL       define_label
+|L0090d8.J97.loop_y|
+        LDR      a1,[v1,#&1d4]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1d4]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ADD      a2,v4,v6
+        ORR      a1,a1,a2
+        ORR      a2,a1,#&2800000
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a1,v1
+        MVN      a2,#&2a000
+        ADD      a2,a2,#&8c00000
+        BL       do_ins
+        LDR      a1,[v1,#&1d8]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&1dc]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+find_or_compile_code
+        MOV      ip,sp
+        STMDB    sp!,{v1-v5,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      v2,a2
+        MOV      v3,a3
+        LDR      a1,[a1,#&74]
+        LDR      a2,[a2,#&210]
+        ADD      a3,a1,a2,LSL #3
+        LDR      a2,[v2,#&1e8]
+        ADD      v4,a3,a2,LSL #6
+        LDR      a2,[v2,#&1ec]
+        TEQ      a2,#0
+        ORRNE    v4,v4,#&200
+        LDR      a2,[v2,#&1f0]
+        TEQ      a2,#0
+        ORRNE    v4,v4,#&400
+        LDR      a2,[v1,#&f8]
+        TEQ      a2,#0
+        ORRNE    v4,v4,#&800
+        LDR      a2,[v1,#&b4]
+        TEQ      a2,#0
+        ORRNE    v4,v4,#&1000
+        LDR      a2,[v1,#&104]
+        LDR      a3,[v1,#&100]
+        TEQ      a2,a3
+        ORRNE    v4,v4,#&2000
+        LDR      a2,[v1,#&78]
+        TEQ      a1,a2
+        ORRNE    v4,v4,#&4000
+        LDR      a1,[v1,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        ORREQ    v4,v4,#&8000
+        LDR      a2,[v1,#&110]
+        CMP      a2,#0
+        BEQ      |L0091e4.J20.find_or_compile_code|
+        ORR      v4,v4,#&10000
+        BEQ      |L0091e4.J20.find_or_compile_code|
+        LDR      a1,[v3,#&1c]
+        TEQ      a1,#1
+        ORREQ    v4,v4,#&20000
+|L0091e4.J20.find_or_compile_code|
+        LDR      a1,[v1,#&10c]
+        TEQ      a1,#0
+        BEQ      |L00920c.J23.find_or_compile_code|
+        ORR      v4,v4,#&40000
+        LDR      a3,[v2,#&228]
+        TEQ      a3,#0
+        ORRNE    v4,v4,#&80000
+        LDR      a1,[a1,#&10]
+        TEQ      a1,#3
+        ORREQ    v4,v4,#&100000
+|L00920c.J23.find_or_compile_code|
+        TEQ      a2,#0
+        LDRNE    a1,[v1,#&138]
+        ANDNE    a1,a1,#1
+        TEQNE    a1,#0
+        ORRNE    v4,v4,#&200000
+        ADD      a1,v2,#&22c
+        ADD      a2,v2,#&2ec
+        ADD      a2,a2,#&2000
+        CMP      a2,a1
+        BLS      |L009290.J33.find_or_compile_code|
+|L009234.J32.find_or_compile_code|
+        LDR      a3,[a1,#0]
+        TEQ      a3,v4
+        LDREQ    a3,[a1,#4]
+        LDREQ    a4,[v1,#&44]
+        TEQEQ    a3,a4
+        LDREQ    a3,[a1,#8]
+        LDREQ    a4,[v1,#&40]
+        TEQEQ    a3,a4
+        LDREQ    a4,[a1,#&c]
+        LDREQ    a3,[v1,#&14]
+        TEQEQ    a4,a3
+        LDREQ    a3,[a1,#&10]
+        LDREQ    a4,[v1,#&10]
+        TEQEQ    a3,a4
+        LDREQ    a4,[a1,#&14]
+        LDREQ    a3,[v1,#0]
+        TEQEQ    a4,a3
+        ADDEQ    a1,a1,#&18
+        LDMEQDB  fp,{v1-v5,fp,sp,pc}^
+        ADD      a1,a1,#&18
+        ADD      a1,a1,#&400
+        CMP      a2,a1
+        BHI      |L009234.J32.find_or_compile_code|
+|L009290.J33.find_or_compile_code|
+        LDR      a1,[v2,#8]
+        ADD      ip,a1,a1,LSL #1
+        ADD      a1,ip,a1,LSL #7
+        ADD      a1,v2,a1,LSL #3
+        ADD      v5,a1,#&22c
+        MVN      a1,#0
+        STR      a1,[v5,#0]
+        LDR      a1,[v1,#&44]
+        STR      a1,[v5,#4]
+        LDR      a1,[v1,#&40]
+        STR      a1,[v5,#8]
+        LDR      a1,[v1,#&14]
+        STR      a1,[v5,#&c]
+        LDR      a1,[v1,#&10]
+        STR      a1,[v5,#&10]
+        LDR      a1,[v1,#0]
+        MOV      a2,v2
+        STR      a1,[v5,#&14]
+        MOV      a1,v1
+        BL       compile_buffer_init
+        MOV      a3,v3
+        MOV      a2,v2
+        MOV      a1,v1
+        BL       loop_y
+        MOV      a1,v2
+        BL       compile_buffer_done
+        STR      v4,[v5,#0]
+        LDR      a1,[v2,#&c]!
+        LDMDB    fp,{v1-v5,fp,sp,pc}^
+
+        IMPORT  create_dynamic_area
+putscaled_compiler
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      v2,a2
+        MOV      v3,a4
+        SUB      sp,sp,#4
+        ADD      a1,a2,#&2f0
+        ADD      a1,a1,#&2000
+        CMP      a1,a3
+        MOVHI    a2,#4
+        MOVHI    a1,#&5a
+        ADDHI    a1,a1,#&f00
+        BLHI     exit_c
+        MOV      a1,v2
+        BL       check_workspace
+        AND      a1,v3,#7
+        STR      a1,[v2,#&1e8]
+        TST      v3,#8
+        MOV      a3,#0
+        MOVEQ    a1,a3
+        MOVNE    a1,#1
+        STR      a1,[v2,#&1ec]
+        MOV      a3,#0
+        LDR      a2,[v1,#&80]
+        TEQ      a3,a2,ASR #27
+        MOVEQ    a2,#0
+        MOVNE    a2,#1
+        AND      a1,a2,a1
+        STR      a1,[v2,#&1f0]
+        LDR      a1,[v1,#&110]
+        TEQ      a1,#0
+        BEQ      |L009780.J12.putscaled_compiler|
+        LDR      v4,[v1,#&120]
+        LDR      a1,[v4,#&20]
+        ADD      a1,v4,a1
+        MOV      a2,#0
+        STR      a2,[sp,#-8]!
+        LDR      a2,[a1,#0]
+        CMN      a2,#1
+        LDREQ    v5,[a1,#4]
+        LDREQ    a1,[a1,#8]
+        BEQ      |L0093c8.J123.putscaled_compiler|
+        LDR      a1,[v4,#&20]
+        ADD      a2,v4,a1
+        ADD      v5,a2,#4
+        LDR      a2,[v4,#0]
+        SUB      a1,a2,a1
+        SUB      a1,a1,#4
+|L0093c8.J123.putscaled_compiler|
+        MOV      a4,#0
+        STR      a1,[sp,#4]
+        MOV      a3,sp
+        MOV      a2,#0
+        STMDB    sp!,{a2-a4}
+        MOV      a1,v5
+        MOV      a3,#0
+        BL       find_image_dims
+        ADD      sp,sp,#&c
+        TEQ      a1,#0
+        MOVNE    a2,#2
+        MOVNE    a1,#&87
+        ADDNE    a1,a1,#&f00
+        BLNE     exit_c
+        LDR      a1,[v1,#&124]
+        STR      a1,[sp,#8]
+        TEQ      a1,#0
+        SUB      sp,sp,#4
+        BNE      |L009490.J19.putscaled_compiler|
+        LDR      a1,[sp,#4]
+        BL       create_dynamic_area
+        MOVS     v3,a1
+        MOVEQ    a2,#1
+        MOVEQ    a1,#&95
+        ADDEQ    a1,a1,#&f00
+        BLEQ     exit_c
+        MOV      a4,sp
+        STMDB    sp!,{a4}
+        ADD      a4,sp,#&10
+        MOV      a3,v3
+        MOV      a2,#&c0000001
+        MOV      a1,#&5c
+        BL       |_swix|
+        ADD      sp,sp,#4
+        TEQ      a1,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&9b
+        ADDNE    a1,a1,#&f00
+        BLNE     exit_c
+        LDR      a1,[sp,#&c]
+        MVN      a2,#0
+        ADD      v1,v1,#&124
+        STMIA    v1,{a1,v3}
+        SUB      v1,v1,#&124
+        LDR      a1,[sp,#&c]
+        STR      a2,[a1,#0]
+        LDR      a1,[sp,#&c]
+        LDR      a2,[sp,#0]
+        STR      a2,[a1,#&10]!
+        B        |L009550.J32.putscaled_compiler|
+|L009490.J19.putscaled_compiler|
+        MOV      a4,sp
+        MOV      a2,#&40000001
+        MOV      a1,#&5c
+        LDR      a3,[v1,#&128]
+        BL       |_swix|
+        MOV      a3,a1
+        LDR      a1,[sp,#0]
+        CMP      a1,#0
+        BLE      |L0094d4.J26.putscaled_compiler|
+        LDR      a2,[sp,#&c]
+        LDR      a4,[a2,#&10]
+        TEQ      a1,a4
+        BEQ      |L0094d4.J26.putscaled_compiler|
+        MVN      a4,#0
+        STR      a4,[a2,#0]
+        LDR      a2,[sp,#&c]
+        STR      a1,[a2,#&10]!
+|L0094d4.J26.putscaled_compiler|
+        TEQ      a3,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&b9
+        ADDNE    a1,a1,#&f00
+        BLNE     exit_c
+        LDR      a1,[sp,#4]
+        LDR      a2,[sp,#0]
+        CMP      a2,a1
+        BGE      |L009550.J32.putscaled_compiler|
+        SUB      sp,sp,#4
+        MOV      a4,sp
+        STMDB    sp!,{a4}
+        SUB      a4,a1,a2
+        MOV      a2,#&40000003
+        MOV      a1,#&2a
+        LDR      a3,[v1,#&128]
+        BL       |_swix|
+        ADD      sp,sp,#4
+        TEQ      a1,#0
+        MOVNE    a2,#1
+        MOVNE    a1,#&c1
+        ADDNE    a1,a1,#&f00
+        BLNE     exit_c
+        MVN      a2,#0
+        LDR      a1,[sp,#&10]
+        STR      a2,[a1,#0]
+        LDR      a2,[sp],#4
+        LDR      a1,[sp,#0]
+        ADD      a1,a1,a2
+        LDR      a2,[sp,#&c]
+        STR      a1,[a2,#&10]!
+|L009550.J32.putscaled_compiler|
+        ADD      sp,sp,#4
+        LDR      a1,[v1,#&74]
+        TEQ      a1,#5
+        MOVNE    a2,#4
+        MOVNE    a1,#&3dc
+        ADDNE    a1,a1,#&c00
+        BLNE     exit_c
+        LDR      a1,[v2,#&1ec]
+        TEQ      a1,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&dd
+        ADDNE    a1,a1,#&f00
+        BLNE     exit_c
+        MOV      a2,#0
+        LDR      a1,[v1,#&80]
+        TEQ      a2,a1,ASR #24
+        MOVEQ    a1,#0
+        STREQ    a1,[v1,#&b4]
+        STREQ    a1,[v1,#&f8]
+        SUB      sp,sp,#4
+        LDR      a1,[v1,#&40]
+        LDR      a2,[v1,#&2c]
+        MUL      a2,a1,a2
+        LDR      a3,[v1,#&44]
+        SUB      a1,a3,a1
+        BL       |__rt_sdiv|
+        LDR      a2,[v1,#&114]
+        ADD      a1,a1,a2
+        ADD      v6,a1,#2
+        MOV      v3,#0
+        STR      v3,[sp,#0]
+        LDR      a1,[v1,#&104]
+        CMP      a1,#4
+        BGT      |L0095ec.J42.putscaled_compiler|
+        MOV      v3,#1
+        LDR      a2,[v1,#&134]
+        TST      a2,#2
+        MOVEQ    a2,#0
+        STREQ    a2,[v1,#&b4]
+|L0095ec.J42.putscaled_compiler|
+        CMP      v6,#0
+        LDRLT    a2,[v4,#&10]!
+        SUBLT    v6,a2,#1
+        ADD      a3,v1,#&40
+        LDMIA    a3,{a2,a3}
+        SUB      a3,a3,a2
+        ADD      a3,a3,a3,LSL #1
+        CMP      a2,a3,LSL #1
+        BLT      |L009628.J48.putscaled_compiler|
+        ADD      a3,v1,#&10
+        LDMIA    a3,{a2,a3}
+        SUB      a3,a3,a2
+        ADD      a3,a3,a3,LSL #1
+        CMP      a2,a3,LSL #1
+        ORRGE    v3,v3,#2
+|L009628.J48.putscaled_compiler|
+        LDR      a2,[v1,#&134]
+        TST      a2,#2
+        BNE      |L009704.J51.putscaled_compiler|
+        LDR      a2,[v1,#&138]
+        TST      a2,#1
+        BEQ      |L009704.J51.putscaled_compiler|
+        SUB      sp,sp,#4
+        TEQ      a1,#8
+        BNE      |L0096f8.J54.putscaled_compiler|
+        MOV      a4,sp
+        MOV      a3,#0
+        MOV      a2,#&400
+        MOV      a1,#0
+        STMDB    sp!,{a1-a4}
+        MVN      a4,#0
+        MVN      a3,#0
+        MOV      a2,#&1000000f
+        ADD      a2,a2,#&10
+        LDR      a1,[pc, #L0096c4-.-8]
+        BL       |_swix|
+        ADD      sp,sp,#&10
+        MOV      a4,#0
+        MOV      a3,#&400
+        ADD      a2,v1,#&13c
+        STMDB    sp!,{a2-a4}
+        MVN      a4,#0
+        MVN      a3,#0
+        MOV      a2,#&1f
+        LDR      a1,[pc, #L0096c4-.-8]
+        BL       |_swix|
+        ADD      sp,sp,#&c
+        LDR      a1,[v1,#&138]
+        TST      a1,#2
+        BEQ      |L0096c8.J56.putscaled_compiler|
+        ORR      v3,v3,#8
+        MVN      a1,#0
+        LDR      a2,[sp,#&10]
+        STR      a1,[a2,#0]
+        B        |L009700.J61.putscaled_compiler|
+L0096c4
+        DCD     &0004075c
+|L0096c8.J56.putscaled_compiler|
+        ADD      a4,sp,#4
+        STMDB    sp!,{a4}
+        MOV      a4,#0
+        MVN      a3,#0
+        MOV      a2,#&20000003
+        MOV      a1,#&35
+        BL       |_swix|
+        ADD      sp,sp,#4
+        LDR      a1,[sp,#4]
+        TST      a1,#&80
+        ORREQ    v3,v3,#&20
+        B        |L009700.J61.putscaled_compiler|
+|L0096f8.J54.putscaled_compiler|
+        TEQ      a1,#&10
+        ORREQ    v3,v3,#&10
+|L009700.J61.putscaled_compiler|
+        ADD      sp,sp,#4
+|L009704.J51.putscaled_compiler|
+        MOV      a4,v3
+        MVN      a3,#0
+        MVN      a2,#0
+        MOV      a1,v6
+        STMDB    sp!,{a1-a4}
+        LDR      a4,[v1,#&114]
+        MOV      a2,v5
+        LDR      a1,[sp,#&1c]
+        LDR      a3,[sp,#&18]
+        BL       jpeg_scan_file
+        ADD      sp,sp,#&10
+        TEQ      a1,#0
+        MOVNE    a2,#2
+        MOVNE    a1,#&3a
+        ADDNE    a1,a1,#&1000
+        BLNE     exit_c
+        LDR      a1,[sp,#&c]
+        LDR      a1,[a1,#4]
+        TST      a1,#&28
+        BEQ      |L00976c.J66.putscaled_compiler|
+        MOV      a1,#3
+        STR      a1,[v1,#&78]
+        STR      a1,[v1,#&74]
+        MOV      a1,#0
+        STR      a1,[v1,#&b4]
+        B        |L00977c.J68.putscaled_compiler|
+|L00976c.J66.putscaled_compiler|
+        TST      a1,#&10
+        MOVNE    a1,#4
+        STRNE    a1,[v1,#&78]
+        STRNE    a1,[v1,#&74]
+|L00977c.J68.putscaled_compiler|
+        ADD      sp,sp,#&c
+|L009780.J12.putscaled_compiler|
+        MOV      v3,#0
+        STR      v3,[v2,#&1f4]
+        LDR      v4,[v1,#&10c]
+        TEQ      v4,#0
+        BEQ      |L00982c.J71.putscaled_compiler|
+        LDR      a1,[v4,#4]
+        TEQ      a1,#0
+        BNE      |L0097bc.J74.putscaled_compiler|
+        LDR      a1,[v4,#8]
+        CMN      a1,#&100
+        BNE      |L0097bc.J74.putscaled_compiler|
+        LDR      a1,[v4,#&c]
+        TEQ      a1,#0
+        MOVEQ    a1,#1
+        BEQ      |L0097c0.J73.putscaled_compiler|
+|L0097bc.J74.putscaled_compiler|
+        MOV      a1,v3
+|L0097c0.J73.putscaled_compiler|
+        STR      a1,[v2,#&228]
+        LDR      a1,[v1,#&104]
+        TEQ      a1,#&20
+        MOVNE    a2,#4
+        MOVNE    a1,#&98
+        ADDNE    a1,a1,#&1000
+        BLNE     exit_c
+        LDR      a1,[v1,#&74]
+        CMP      a1,#4
+        MOVLT    a2,#4
+        MOVLT    a1,#&99
+        ADDLT    a1,a1,#&1000
+        BLLT     exit_c
+        LDR      a1,[v1,#&b4]
+        TEQ      a1,#0
+        LDREQ    a1,[v1,#&f8]
+        TEQEQ    a1,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&9a
+        ADDNE    a1,a1,#&1000
+        BLNE     exit_c
+        LDR      a1,[v4,#0]
+        TEQ      a1,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&9b
+        ADDNE    a1,a1,#&1000
+        BLNE     exit_c
+|L00982c.J71.putscaled_compiler|
+        MOV      a1,#0
+        LDR      a2,[v1,#&104]
+        CMP      a2,#1
+        BLE      |L00984c.J89.putscaled_compiler|
+|L00983c.J88.putscaled_compiler|
+        MOV      a2,a2,ASR #1
+        ADD      a1,a1,#1
+        CMP      a2,#1
+        BGT      |L00983c.J88.putscaled_compiler|
+|L00984c.J89.putscaled_compiler|
+        STR      a1,[v2,#&210]
+        STR      a1,[v2,#&214]
+        LDR      a2,[v1,#&104]
+        LDR      a3,[v1,#&100]
+        TEQ      a2,a3
+        ADDNE    a1,a1,#1
+        STRNE    a1,[v2,#&214]
+        LDR      a1,[v1,#&f8]
+        TEQ      a1,#0
+        STRNE    v3,[v1,#&b4]
+        LDR      a1,[v1,#&44]
+        CMP      a1,#0
+        MOVLE    a2,#4
+        MOVLE    a1,#&ac
+        ADDLE    a1,a1,#&1000
+        BLLE     exit_c
+        LDR      a1,[v1,#&40]
+        CMP      a1,#0
+        MOVLE    a2,#4
+        MOVLE    a1,#&ad
+        ADDLE    a1,a1,#&1000
+        BLLE     exit_c
+        LDR      a1,[v1,#&10]
+        CMP      a1,#0
+        MOVLE    a2,#4
+        MOVLE    a1,#&ae
+        ADDLE    a1,a1,#&1000
+        BLLE     exit_c
+        LDR      a1,[v1,#&10]
+        CMP      a1,#0
+        MOVLE    a2,#4
+        MOVLE    a1,#&af
+        ADDLE    a1,a1,#&1000
+        BLLE     exit_c
+        B        |L0098fc.J105.putscaled_compiler|
+|L0098d8.J104.putscaled_compiler|
+        MOV      a4,a4,ASR #1
+        MOV      a2,a2,ASR #1
+        ADD      v1,v1,#&40
+        STMIA    v1,{a2,a4}
+        SUB      v1,v1,#&40
+        MOV      a2,a3,ASR #1
+        MOV      a1,a1,ASR #1
+        STR      a1,[v1,#&68]
+        STR      a2,[v1,#&30]
+|L0098fc.J105.putscaled_compiler|
+        LDR      a4,[v1,#&44]
+        TST      a4,#1
+        LDREQ    a2,[v1,#&40]
+        ANDEQ    a1,a2,#1
+        TEQEQ    a1,#0
+        LDREQ    a3,[v1,#&30]
+        ANDEQ    a1,a3,#1
+        TEQEQ    a1,#0
+        LDREQ    a1,[v1,#&68]
+        ANDEQ    ip,a1,#1
+        TEQEQ    ip,#0
+        BEQ      |L0098d8.J104.putscaled_compiler|
+        B        |L00994c.J112.putscaled_compiler|
+|L009930.J111.putscaled_compiler|
+        MOV      a3,a3,ASR #1
+        MOV      a2,a2,ASR #1
+        MOV      a1,a1,ASR #1
+        STR      a1,[v1,#&1c]
+        ADD      v1,v1,#&10
+        STMIA    v1,{a2,a3}
+        SUB      v1,v1,#&10
+|L00994c.J112.putscaled_compiler|
+        LDR      a3,[v1,#&14]
+        TST      a3,#1
+        LDREQ    a2,[v1,#&10]
+        ANDEQ    a1,a2,#1
+        TEQEQ    a1,#0
+        LDREQ    a1,[v1,#&1c]
+        ANDEQ    a4,a1,#1
+        TEQEQ    a4,#0
+        BEQ      |L009930.J111.putscaled_compiler|
+        LDR      a1,[v1,#&104]
+        LDR      v3,[v1,#&100]
+        LDR      v4,[v1,#&78]
+        STR      a1,[v1,#&100]
+        LDR      a1,[v1,#&74]
+        STR      a1,[v1,#&78]
+        MOV      a2,v2
+        MOV      a1,v1
+        LDR      a3,[sp,#0]
+        BL       find_or_compile_code
+        STR      v4,[v1,#&78]!
+        STR      v3,[v1,#&88]
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+        AREA |C$$data|,DATA
+
+|x$dataseg|
+
+        END
diff --git a/s/rojpeg b/s/rojpeg
new file mode 100644
index 0000000000000000000000000000000000000000..1c71444373cf87faea500a3d79582c86c6aeaedf
--- /dev/null
+++ b/s/rojpeg
@@ -0,0 +1,3078 @@
+; Copyright 1996 Acorn Computers Ltd
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+; generated by Norcroft RISC OS ARM C vsn 5.05 (Acorn Computers Ltd) [Dec 23 1994]
+
+        AREA |C$$code|, CODE, READONLY
+|x$codeseg|
+
+        EXPORT  memcpy
+memcpy
+        MOV      a4,a1
+        MOV      ip,a3
+        SUB      a3,a3,#1
+        CMP      ip,#0
+        MOVLSS   pc,lr
+|L000014.J4.memcpy|
+        LDRB     ip,[a2],#1
+        STRB     ip,[a4],#1
+        MOV      ip,a3
+        SUB      a3,a3,#1
+        CMP      ip,#0
+        BHI      |L000014.J4.memcpy|
+        MOVS     pc,lr
+
+        EXPORT  strcpy
+strcpy
+        MOV      a3,a1
+        LDRB     a4,[a2,#0]
+        CMP      a4,#&1f
+        MOVLES   pc,lr
+|L000040.J4.strcpy|
+        LDRB     a4,[a2],#1
+        STRB     a4,[a3],#1
+        LDRB     a4,[a2,#0]
+        CMP      a4,#&1f
+        BGT      |L000040.J4.strcpy|
+        MOVS     pc,lr
+
+        EXPORT  memset
+memset
+        MOV      a4,a1
+        MOV      ip,a3
+        SUB      a3,a3,#1
+        CMP      ip,#0
+        MOVLSS   pc,lr
+        AND      a2,a2,#&ff
+|L000070.J4.memset|
+        STRB     a2,[a4],#1
+        MOV      ip,a3
+        SUB      a3,a3,#1
+        CMP      ip,#0
+        BHI      |L000070.J4.memset|
+        MOVS     pc,lr
+
+        IMPORT  exit
+        EXPORT  panic_exit
+panic_exit
+        B        exit
+
+get_2bytes
+        MOV      a4,#&ff
+        LDR      a2,[a1,#&38]
+        LDR      a3,[a1,#&34]
+        CMP      a3,a2
+        LDRCCB   a2,[a3],#1
+        STRCC    a3,[a1,#&34]
+        MOVCS    a2,a4
+        MOV      a3,a2
+        ADD      ip,a1,#&34
+        LDMIA    ip,{a2,ip}
+        CMP      a2,ip
+        LDRCCB   a4,[a2],#1
+        STRCC    a2,[a1,#&34]!
+        ADD      a1,a4,a3,LSL #8
+        MOVS     pc,lr
+
+skip_variable
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       get_2bytes
+        SUB      a1,a1,#2
+        CMP      a1,#0
+        LDMLEDB  fp,{v1,fp,sp,pc}^
+        LDR      a2,[v1,#&38]
+|L0000ec.J4.skip_variable|
+        LDR      a3,[v1,#&34]
+        CMP      a3,a2
+        ADDCC    a3,a3,#1
+        STRCC    a3,[v1,#&34]
+        SUB      a1,a1,#1
+        CMP      a1,#0
+        BGT      |L0000ec.J4.skip_variable|
+        LDMDB    fp,{v1,fp,sp,pc}^
+
+        IMPORT  newline
+get_dht
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        SUB      sp,sp,#&114
+        BL       get_2bytes
+        SUB      v4,a1,#2
+        CMP      v4,#0
+        BLE      |L000258.J37.get_dht|
+        MOV      v6,#0
+        MOV      v5,#&ff
+|L000138.J4.get_dht|
+        ADD      a2,v1,#&34
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        LDRCCB   a2,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a2,v5
+        MOV      v2,a2
+        STRB     v6,[sp,#&100]
+        MOV      v3,#0
+        MOV      a1,#1
+|L000160.J10.get_dht|
+        ADD      a3,v1,#&34
+        LDMIA    a3,{a2,a3}
+        CMP      a2,a3
+        MOVCS    a2,v5
+        BCS      |L000180.J11.get_dht|
+        LDRB     a3,[a2],#1
+        STR      a2,[v1,#&34]
+        MOV      a2,a3
+|L000180.J11.get_dht|
+        ADD      a3,sp,#&100
+        STRB     a2,[a3,a1]
+        ADD      a2,sp,#&100
+        LDRB     a2,[a2,a1]
+        ADD      v3,a2,v3
+        ADD      a1,a1,#1
+        CMP      a1,#&10
+        BLE      |L000160.J10.get_dht|
+        CMP      v3,#&100
+        BLGT     newline
+        MOVGT    a1,#&b9
+        ADDGT    a1,a1,#&4e00
+        BLGT     exit
+        MOV      a1,#0
+        CMP      v3,#0
+        BLE      |L0001f0.J18.get_dht|
+|L0001c0.J17.get_dht|
+        ADD      a3,v1,#&34
+        LDMIA    a3,{a2,a3}
+        CMP      a2,a3
+        MOVCS    a2,v5
+        BCS      |L0001e0.J20.get_dht|
+        LDRB     a3,[a2],#1
+        STR      a2,[v1,#&34]
+        MOV      a2,a3
+|L0001e0.J20.get_dht|
+        STRB     a2,[sp,a1]
+        ADD      a1,a1,#1
+        CMP      a1,v3
+        BLT      |L0001c0.J17.get_dht|
+|L0001f0.J18.get_dht|
+        ADD      a1,v3,#&11
+        SUB      v4,v4,a1
+        TST      v2,#&10
+        SUBNE    v2,v2,#&10
+        ADD      a1,v1,v2,LSL #2
+        ADDEQ    v3,a1,#&64
+        ADDNE    v3,a1,#&74
+        CMP      v2,#0
+        BLT      |L00021c.J28.get_dht|
+        CMP      v2,#4
+        BLT      |L00022c.J27.get_dht|
+|L00021c.J28.get_dht|
+        BL       newline
+        MOV      a1,#&2c8
+        ADD      a1,a1,#&4c00
+        BL       exit
+|L00022c.J27.get_dht|
+        ADD      a2,sp,#&100
+        MOV      a3,#&11
+        LDR      a1,[v3,#0]
+        BL       memcpy
+        LDR      a1,[v3,#0]
+        ADD      a1,a1,#&11
+        MOV      a2,sp
+        MOV      a3,#&100
+        BL       memcpy
+        CMP      v4,#0
+        BGT      |L000138.J4.get_dht|
+|L000258.J37.get_dht|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+get_dac
+        MOV      ip,sp
+        STMDB    sp!,{v1-v5,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       get_2bytes
+        SUB      v4,a1,#2
+        CMP      v4,#0
+        LDMLEDB  fp,{v1-v5,fp,sp,pc}^
+        MOV      v5,#&ff
+|L000280.J4.get_dac|
+        ADD      a2,v1,#&34
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        LDRCCB   a3,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a3,v5
+        MOV      v2,a3
+        LDR      a1,[v1,#&34]
+        CMP      a1,a2
+        LDRCCB   a2,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a2,v5
+        MOV      v3,a2
+        CMP      v2,#0
+        BLT      |L0002c4.J14.get_dac|
+        CMP      v2,#&20
+        BLT      |L0002d4.J13.get_dac|
+|L0002c4.J14.get_dac|
+        BL       newline
+        MOV      a1,#&2e8
+        ADD      a1,a1,#&4c00
+        BL       exit
+|L0002d4.J13.get_dac|
+        CMP      v2,#&10
+        MOVGE    a1,v3
+        ADDGE    a2,v1,v2
+        STRGEB   a1,[a2,#&94]
+        BGE      |L000314.J19.get_dac|
+        AND      a1,v3,#&f
+        ADD      a2,v1,v2
+        STRB     a1,[a2,#&84]
+        MOV      a3,v3,ASR #4
+        AND      a3,a3,#&ff
+        STRB     a3,[a2,#&94]
+        CMP      a1,a3
+        BLGT     newline
+        MOVGT    a1,#&ef0
+        ADDGT    a1,a1,#&4000
+        BLGT     exit
+|L000314.J19.get_dac|
+        SUB      v4,v4,#2
+        CMP      v4,#0
+        BGT      |L000280.J4.get_dac|
+        LDMDB    fp,{v1-v5,fp,sp,pc}^
+
+get_dqt
+        MOV      ip,sp
+        STMDB    sp!,{v1-v5,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       get_2bytes
+        SUB      v2,a1,#2
+        CMP      v2,#0
+        LDMLEDB  fp,{v1-v5,fp,sp,pc}^
+        MOV      v4,#&ff
+|L000348.J4.get_dqt|
+        ADD      a2,v1,#&34
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        MOVCS    a1,v4
+        BCS      |L000368.J7.get_dqt|
+        LDRB     a2,[a1],#1
+        STR      a1,[v1,#&34]
+        MOV      a1,a2
+|L000368.J7.get_dqt|
+        MOV      v3,a1,ASR #4
+        AND      v5,a1,#&f
+        CMP      v5,#4
+        BLGE     newline
+        MOVGE    a1,#&30c
+        ADDGE    a1,a1,#&4c00
+        BLGE     exit
+        ADD      a1,v1,v5,LSL #2
+        LDR      a4,[a1,#&54]!
+        MOV      a1,#0
+|L000390.J12.get_dqt|
+        ADD      ip,v1,#&34
+        LDMIA    ip,{a3,ip}
+        CMP      a3,ip
+        LDRCCB   a2,[a3],#1
+        STRCC    a3,[v1,#&34]
+        MOVCS    a2,v4
+        MOV      a2,a2,LSL #16
+        MOV      a2,a2,LSR #16
+        TEQ      v3,#0
+        BEQ      |L0003d8.J16.get_dqt|
+        LDR      a3,[v1,#&34]
+        CMP      a3,ip
+        LDRCCB   ip,[a3],#1
+        STRCC    a3,[v1,#&34]
+        MOVCS    ip,v4
+        ADD      a2,ip,a2,LSL #8
+        MOV      a2,a2,LSL #16
+        MOV      a2,a2,LSR #16
+|L0003d8.J16.get_dqt|
+        STR      a2,[a4,a1,LSL #2]
+        ADD      a1,a1,#1
+        CMP      a1,#&40
+        BLT      |L000390.J12.get_dqt|
+        MOV      a1,#0
+|L0003ec.J22.get_dqt|
+        ADD      a1,a1,#8
+        CMP      a1,#&40
+        BLT      |L0003ec.J22.get_dqt|
+        SUB      v2,v2,#&41
+        TEQ      v3,#0
+        SUBNE    v2,v2,#&40
+        CMP      v2,#0
+        BGT      |L000348.J4.get_dqt|
+        LDMDB    fp,{v1-v5,fp,sp,pc}^
+
+get_dri
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       get_2bytes
+        TEQ      a1,#4
+        BLNE     newline
+        MOVNE    a1,#&2d
+        ADDNE    a1,a1,#&4f00
+        BLNE     exit
+        MOV      a1,v1
+        BL       get_2bytes
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,LSR #16
+        STR      a1,[v1,#&bc]!
+        LDMDB    fp,{v1,fp,sp,pc}^
+
+get_app0
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        SUB      sp,sp,#&10
+        BL       get_2bytes
+        SUB      v2,a1,#2
+        CMP      v2,#&e
+        BLT      |L000524.J25.get_app0|
+        MOV      a1,#0
+        MOV      a2,#&ff
+|L00047c.J6.get_app0|
+        LDR      a3,[v1,#&38]
+        LDR      a4,[v1,#&34]
+        CMP      a4,a3
+        LDRCCB   a3,[a4],#1
+        STRCC    a4,[v1,#&34]
+        MOVCS    a3,a2
+        STRB     a3,[sp,a1]
+        ADD      a1,a1,#1
+        CMP      a1,#&e
+        BLT      |L00047c.J6.get_app0|
+        SUB      v2,v2,#&e
+        LDRB     a1,[sp,#0]
+        TEQ      a1,#&4a
+        LDREQB   a1,[sp,#1]
+        TEQEQ    a1,#&46
+        LDREQB   a1,[sp,#2]
+        TEQEQ    a1,#&49
+        LDREQB   a1,[sp,#3]
+        TEQEQ    a1,#&46
+        LDREQB   a1,[sp,#4]
+        TEQEQ    a1,#0
+        BNE      |L000524.J25.get_app0|
+        LDRB     a1,[sp,#5]
+        TEQ      a1,#1
+        BLNE     newline
+        MOVNE    a1,#&4d
+        ADDNE    a1,a1,#&4f00
+        BLNE     exit
+        LDRB     a1,[sp,#7]
+        STR      a1,[v1,#&40]
+        LDRB     a1,[sp,#9]
+        LDRB     a2,[sp,#8]
+        ADD      a1,a1,a2,LSL #8
+        STR      a1,[v1,#&44]
+        LDRB     a2,[sp,#&b]
+        LDRB     a1,[sp,#&a]
+        ADD      a1,a2,a1,LSL #8
+        STR      a1,[v1,#&48]
+        LDR      a1,[v1,#&1c]
+        TEQ      a1,#0
+        MOVEQ    a1,#3
+        STREQ    a1,[v1,#&1c]
+|L000524.J25.get_app0|
+        MOV      a1,v2
+        SUB      v2,v2,#1
+        CMP      a1,#0
+        BLE      |L000558.J37.get_app0|
+        LDR      a2,[v1,#&38]
+|L000538.J26.get_app0|
+        LDR      a1,[v1,#&34]
+        CMP      a1,a2
+        ADDCC    a1,a1,#1
+        STRCC    a1,[v1,#&34]
+        MOV      a1,v2
+        SUB      v2,v2,#1
+        CMP      a1,#0
+        BGT      |L000538.J26.get_app0|
+|L000558.J37.get_app0|
+        LDMDB    fp,{v1,v2,fp,sp,pc}^
+
+get_sof
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       get_2bytes
+        MOV      v3,a1
+        MOV      v2,#&ff
+        ADD      a2,v1,#&34
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        LDRCCB   a2,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a2,v2
+        STR      a2,[v1,#&3c]
+        MOV      a1,v1
+        BL       get_2bytes
+        STR      a1,[v1,#&18]
+        MOV      a1,v1
+        BL       get_2bytes
+        STR      a1,[v1,#&14]
+        MOV      a2,a1
+        ADD      a3,v1,#&34
+        LDMIA    a3,{a1,a3}
+        CMP      a1,a3
+        MOVCS    a1,v2
+        BCS      |L0005d0.J7.get_sof|
+        LDRB     a3,[a1],#1
+        STR      a1,[v1,#&34]
+        MOV      a1,a3
+|L0005d0.J7.get_sof|
+        STR      a1,[v1,#&4c]
+        LDR      a3,[v1,#&18]
+        CMP      a3,#0
+        CMPGT    a2,#0
+        CMPGT    a1,#0
+        BLLE     newline
+        MOVLE    a1,#&82
+        ADDLE    a1,a1,#&4f00
+        BLLE     exit
+        LDR      a1,[v1,#&3c]
+        TEQ      a1,#8
+        BLNE     newline
+        MOVNE    a1,#&86
+        ADDNE    a1,a1,#&4f00
+        BLNE     exit
+        LDR      a1,[v1,#&4c]
+        ADD      a1,a1,a1,LSL #1
+        ADD      a1,a1,#8
+        TEQ      a1,v3
+        BLNE     newline
+        MOVNE    a1,#&92
+        ADDNE    a1,a1,#&4f00
+        BLNE     exit
+        LDR      a1,[v1,#&4c]
+        CMP      a1,#3
+        BLGT     newline
+        MOVGT    a1,#&96
+        ADDGT    a1,a1,#&4f00
+        BLGT     exit
+        MOV      a1,#0
+        LDR      a2,[v1,#&4c]
+        CMP      a2,#0
+        LDMLEDB  fp,{v1-v3,fp,sp,pc}^
+        MOV      a2,#&f
+|L000658.J21.get_sof|
+        RSB      a4,a1,a1,LSL #3
+        LDR      a3,[v1,#&50]
+        ADD      a3,a3,a4,LSL #3
+        STR      a1,[a3,#4]
+        ADD      ip,v1,#&34
+        LDMIA    ip,{a4,ip}
+        CMP      a4,ip
+        LDRCCB   ip,[a4],#1
+        STRCC    a4,[v1,#&34]
+        MOVCS    ip,v2
+        STR      ip,[a3,#0]
+        ADD      ip,v1,#&34
+        LDMIA    ip,{a4,ip}
+        CMP      a4,ip
+        MOVCS    a4,v2
+        BCS      |L0006a8.J27.get_sof|
+        MOV      ip,a4
+        LDRB     a4,[a4,#0]
+        ADD      ip,ip,#1
+        STR      ip,[v1,#&34]
+|L0006a8.J27.get_sof|
+        AND      ip,a2,a4,ASR #4
+        AND      a4,a4,#&f
+        STR      a4,[a3,#&c]
+        STR      ip,[a3,#8]
+        ADD      ip,v1,#&34
+        LDMIA    ip,{a4,ip}
+        CMP      a4,ip
+        LDRCCB   ip,[a4],#1
+        STRCC    a4,[v1,#&34]
+        MOVCS    ip,v2
+        ADD      a1,a1,#1
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        STR      ip,[a3,#&10]!
+        LDR      a3,[v1,#&4c]
+        CMP      a1,a3
+        BLT      |L000658.J21.get_sof|
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+
+get_sos
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       get_2bytes
+        MOV      v4,#&ff
+        ADD      a3,v1,#&34
+        LDMIA    a3,{a2,a3}
+        CMP      a2,a3
+        LDRCCB   a3,[a2],#1
+        STRCC    a2,[v1,#&34]
+        MOVCS    a3,v4
+        MOV      v3,a3
+        SUB      v2,a1,#3
+        MOV      a1,#3
+        STR      a3,[v1,#&c8]
+        ADD      a1,a1,a3,LSL #1
+        TEQ      a1,v2
+        BNE      |L00074c.J8.get_sos|
+        CMP      v3,#1
+        BLT      |L00074c.J8.get_sos|
+        CMP      v3,#4
+        BLE      |L00075c.J7.get_sos|
+|L00074c.J8.get_sos|
+        BL       newline
+        MOV      a1,#&3bc
+        ADD      a1,a1,#&4c00
+        BL       exit
+|L00075c.J7.get_sos|
+        MOV      v5,#0
+        CMP      v3,#0
+        BLE      |L000818.J13.get_sos|
+|L000768.J12.get_sos|
+        ADD      a2,v1,#&34
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        LDRCCB   a3,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a3,#&ff
+        LDR      a1,[v1,#&34]
+        CMP      a1,a2
+        LDRCCB   a2,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a2,#&ff
+        MOV      v6,a2
+        SUB      v2,v2,#2
+        MOV      v4,#0
+        LDR      a1,[v1,#&4c]
+        CMP      a1,#0
+        BLE      |L0007d0.J22.get_sos|
+        LDR      a2,[v1,#&50]
+|L0007b0.J21.get_sos|
+        RSB      a4,v4,v4,LSL #3
+        ADD      a4,a2,a4,LSL #3
+        LDR      a4,[a4,#0]
+        TEQ      a4,a3
+        BEQ      |L0007d0.J22.get_sos|
+        ADD      v4,v4,#1
+        CMP      v4,a1
+        BLT      |L0007b0.J21.get_sos|
+|L0007d0.J22.get_sos|
+        CMP      v4,a1
+        BLGE     newline
+        MOVGE    a1,#&ca
+        ADDGE    a1,a1,#&4f00
+        BLGE     exit
+        RSB      a1,v4,v4,LSL #3
+        LDR      a2,[v1,#&50]
+        ADD      a1,a2,a1,LSL #3
+        ADD      a2,v1,v5,LSL #2
+        STR      a1,[a2,#&cc]!
+        MOV      a2,#&f
+        AND      a2,a2,v6,ASR #4
+        STR      a2,[a1,#&14]
+        AND      a2,v6,#&f
+        ADD      v5,v5,#1
+        CMP      v5,v3
+        STR      a2,[a1,#&18]!
+        BLT      |L000768.J12.get_sos|
+|L000818.J13.get_sos|
+        CMP      v2,#0
+        LDMLEDB  fp,{v1-v6,fp,sp,pc}^
+        LDR      a1,[v1,#&38]
+|L000824.J30.get_sos|
+        LDR      a2,[v1,#&34]
+        CMP      a2,a1
+        ADDCC    a2,a2,#1
+        STRCC    a2,[v1,#&34]
+        SUB      v2,v2,#1
+        CMP      v2,#0
+        BGT      |L000824.J30.get_sos|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+get_soi
+        STMDB    sp!,{lr}
+        MOV      a2,#0
+        MOV      ip,#0
+        MOV      a4,#1
+        MOV      lr,#5
+|L000858.J4.get_soi|
+        ADD      a3,a1,a2
+        STRB     ip,[a3,#&84]
+        STRB     a4,[a3,#&94]
+        STRB     lr,[a3,#&a4]
+        ADD      a2,a2,#1
+        CMP      a2,#&10
+        BLT      |L000858.J4.get_soi|
+        STR      ip,[a1,#&bc]
+        STR      a4,[a1,#&44]
+        STR      ip,[a1,#&40]
+        STR      a4,[a1,#&48]!
+        STR      ip,[a1,#&70]!
+        LDMIA    sp!,{pc}^
+
+next_marker
+        MOV      a3,#&ff
+        LDR      a2,[a1,#&38]
+|L000894.J5.next_marker|
+        LDR      ip,[a1,#&34]
+        CMP      ip,a2
+        LDRCCB   a4,[ip],#1
+        STRCC    ip,[a1,#&34]
+        MOVCS    a4,a3
+        TEQ      a4,#&ff
+        BNE      |L000894.J5.next_marker|
+|L0008b0.J10.next_marker|
+        LDR      ip,[a1,#&34]
+        CMP      ip,a2
+        LDRCCB   a4,[ip],#1
+        STRCC    ip,[a1,#&34]
+        MOVCS    a4,a3
+        TEQ      a4,#&ff
+        BEQ      |L0008b0.J10.next_marker|
+        TEQ      a4,#0
+        BEQ      |L000894.J5.next_marker|
+        MOV      a1,a4
+        MOVS     pc,lr
+
+process_tables
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+|L0008ec.J4.process_tables|
+        MOV      a1,v1
+        BL       next_marker
+        MOV      a2,a1
+        CMP      a1,#&ce
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        BGT      |L000984.J39.process_tables|
+        CMP      a1,#&c6
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        BGT      |L000958.J42.process_tables|
+        CMP      a1,#&c2
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        BGT      |L000934.J45.process_tables|
+        TEQ      a1,#1
+        BEQ      |L0008ec.J4.process_tables|
+        TEQ      a1,#&c0
+        TEQNE    a1,#&c1
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        B        |L000a08.J7.process_tables|
+|L000934.J45.process_tables|
+        TEQ      a1,#&c3
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        TEQ      a1,#&c4
+        MOVEQ    a1,v1
+        BLEQ     get_dht
+        BEQ      |L0008ec.J4.process_tables|
+        TEQ      a1,#&c5
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        B        |L000a08.J7.process_tables|
+|L000958.J42.process_tables|
+        SUB      a3,a1,#&c7
+        CMP      a3,#6
+        ADDLS    pc,pc,a3,LSL #2
+        B        |L000a08.J7.process_tables|
+        LDMDB    fp,{v1,fp,sp,pc}^
+        LDMDB    fp,{v1,fp,sp,pc}^
+        LDMDB    fp,{v1,fp,sp,pc}^
+        LDMDB    fp,{v1,fp,sp,pc}^
+        LDMDB    fp,{v1,fp,sp,pc}^
+        B        |L0009e4.J25.process_tables|
+        LDMDB    fp,{v1,fp,sp,pc}^
+|L000984.J39.process_tables|
+        SUB      a3,a1,#&cf
+        CMP      a3,#&11
+        ADDLS    pc,pc,a3,LSL #2
+        B        |L000a08.J7.process_tables|
+        LDMDB    fp,{v1,fp,sp,pc}^
+        B        |L0008ec.J4.process_tables|
+        B        |L0008ec.J4.process_tables|
+        B        |L0008ec.J4.process_tables|
+        B        |L0008ec.J4.process_tables|
+        B        |L0008ec.J4.process_tables|
+        B        |L0008ec.J4.process_tables|
+        B        |L0008ec.J4.process_tables|
+        B        |L0008ec.J4.process_tables|
+        LDMDB    fp,{v1,fp,sp,pc}^
+        LDMDB    fp,{v1,fp,sp,pc}^
+        LDMDB    fp,{v1,fp,sp,pc}^
+        B        |L0009f0.J10.process_tables|
+        B        |L000a08.J7.process_tables|
+        B        |L0009fc.J9.process_tables|
+        B        |L000a08.J7.process_tables|
+        B        |L000a08.J7.process_tables|
+        MOV      a1,v1
+        BL       get_app0
+        B        |L0008ec.J4.process_tables|
+|L0009e4.J25.process_tables|
+        MOV      a1,v1
+        BL       get_dac
+        B        |L0008ec.J4.process_tables|
+|L0009f0.J10.process_tables|
+        MOV      a1,v1
+        BL       get_dqt
+        B        |L0008ec.J4.process_tables|
+|L0009fc.J9.process_tables|
+        MOV      a1,v1
+        BL       get_dri
+        B        |L0008ec.J4.process_tables|
+|L000a08.J7.process_tables|
+        MOV      a1,v1
+        BL       skip_variable
+        B        |L0008ec.J4.process_tables|
+
+read_file_header
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        LDR      a3,[a1,#&34]
+        LDR      a1,[a1,#&38]
+        MOV      a2,#&ff
+        CMP      a3,a1
+        LDRCCB   a1,[a3],#1
+        STRCC    a3,[v1,#&34]
+        MOVCS    a1,a2
+        TEQ      a1,#&ff
+        BNE      |L000a64.J5.read_file_header|
+        ADD      a3,v1,#&34
+        LDMIA    a3,{a1,a3}
+        CMP      a1,a3
+        LDRCCB   a2,[a1],#1
+        STRCC    a1,[v1,#&34]
+        TEQ      a2,#&d8
+        BEQ      |L000a74.J4.read_file_header|
+|L000a64.J5.read_file_header|
+        BL       newline
+        MOV      a1,#&67
+        ADD      a1,a1,#&5000
+        BL       exit
+|L000a74.J4.read_file_header|
+        MOV      a1,v1
+        BL       get_soi
+        MOV      a1,v1
+        BL       process_tables
+        MOV      v3,#0
+        MOV      v2,#1
+        TEQ      a1,#&c0
+        TEQNE    a1,#&c1
+        BEQ      |L000ab4.J17.read_file_header|
+        TEQ      a1,#&c9
+        BNE      |L000ac8.J15.read_file_header|
+        MOV      a2,a1
+        MOV      a1,v1
+        BL       get_sof
+        STR      v2,[v1,#&b4]
+        B        |L000ad8.J14.read_file_header|
+|L000ab4.J17.read_file_header|
+        MOV      a2,a1
+        MOV      a1,v1
+        BL       get_sof
+        STR      v3,[v1,#&b4]
+        B        |L000ad8.J14.read_file_header|
+|L000ac8.J15.read_file_header|
+        BL       newline
+        MOV      a1,#&7b
+        ADD      a1,a1,#&5000
+        BL       exit
+|L000ad8.J14.read_file_header|
+        LDR      a1,[v1,#&4c]
+        TEQ      a1,#1
+        STREQ    v2,[v1,#&1c]!
+        LDMEQDB  fp,{v1-v3,fp,sp,pc}^
+        TEQ      a1,#3
+        BEQ      |L000b04.J25.read_file_header|
+        TEQ      a1,#4
+        STRNE    v3,[v1,#&1c]!
+        LDMNEDB  fp,{v1-v3,fp,sp,pc}^
+        MOV      a1,#5
+        B        |L000b64.J44.read_file_header|
+|L000b04.J25.read_file_header|
+        LDR      a1,[v1,#&1c]
+        TEQ      a1,#0
+        LDMNEDB  fp,{v1-v3,fp,sp,pc}^
+        LDR      a2,[v1,#&50]
+        LDR      a1,[a2,#0]
+        MOV      a4,a1,LSL #16
+        MOV      a4,a4,ASR #16
+        LDR      a1,[a2,#&38]
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        LDR      a2,[a2,#&70]
+        MOV      a2,a2,LSL #16
+        MOV      a2,a2,ASR #16
+        MOV      a3,#3
+        CMP      a4,#1
+        BNE      |L000b50.J32.read_file_header|
+        TEQ      a1,#2
+        BEQ      |L000b6c.J37.read_file_header|
+        B        |L000b54.J38.read_file_header|
+|L000b50.J32.read_file_header|
+        BNE      |L000b6c.J37.read_file_header|
+|L000b54.J38.read_file_header|
+        TEQ      a1,#4
+        TEQEQ    a2,#5
+        BNE      |L000b6c.J37.read_file_header|
+        MOV      a1,#4
+|L000b64.J44.read_file_header|
+        STR      a1,[v1,#&1c]!
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+|L000b6c.J37.read_file_header|
+        STR      a3,[v1,#&1c]!
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+
+read_scan_header
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       process_tables
+        TEQ      a1,#&d9
+        BEQ      |L000bb4.J4.read_scan_header|
+        TEQ      a1,#&da
+        MOVEQ    a1,v1
+        BLEQ     get_sos
+        MOVEQ    a1,#1
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        BL       newline
+        MOV      a1,#&be
+        ADD      a1,a1,#&5000
+        BL       exit
+|L000bb4.J4.read_scan_header|
+        MOV      a1,#0
+        LDMDB    fp,{v1,fp,sp,pc}^
+
+        ;MPORT  huff_DECODE_buildshortcut
+        IMPORT  assert
+fix_huff_tbl
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        SUB      sp,sp,#&308
+        MOV      a2,#0
+        MOV      a3,#1
+|L000bdc.J4.fix_huff_tbl|
+        MOV      a1,#1
+        ADD      lr,v1,a3
+        LDRB     a4,[lr,#0]
+        CMP      a4,#1
+        BLT      |L000c14.J6.fix_huff_tbl|
+        AND      a4,a3,#&ff
+|L000bf4.J5.fix_huff_tbl|
+        MOV      v3,a2
+        ADD      a2,a2,#1
+        ADD      ip,sp,#&204
+        STRB     a4,[ip,v3]
+        ADD      a1,a1,#1
+        LDRB     v3,[lr,#0]
+        CMP      v3,a1
+        BGE      |L000bf4.J5.fix_huff_tbl|
+|L000c14.J6.fix_huff_tbl|
+        ADD      a3,a3,#1
+        CMP      a3,#&10
+        BLE      |L000bdc.J4.fix_huff_tbl|
+        MOV      a1,#0
+        ADD      a3,sp,#&204
+        STRB     a1,[a3,a2]
+        MOV      a3,#0
+        LDRB     a4,[sp,#&204]
+        MOV      a2,#0
+        LDRB     ip,[sp,#&204]
+        TEQ      ip,#0
+        BEQ      |L000ca8.J11.fix_huff_tbl|
+|L000c44.J10.fix_huff_tbl|
+        ADD      lr,sp,#&204
+        LDRB     lr,[lr,a2]
+        TEQ      lr,a4
+        BNE      |L000c88.J14.fix_huff_tbl|
+|L000c54.J13.fix_huff_tbl|
+        MOV      lr,a2
+        ADD      a2,a2,#1
+        ADD      ip,sp,lr,LSL #1
+        STRB     a3,[ip,#0]
+        MOV      lr,a3,ASR #8
+        STRB     lr,[ip,#1]
+        ADD      a3,a3,#1
+        MOV      a3,a3,LSL #16
+        MOV      a3,a3,LSR #16
+        ADD      lr,sp,#&204
+        LDRB     lr,[lr,a2]
+        TEQ      lr,a4
+        BEQ      |L000c54.J13.fix_huff_tbl|
+|L000c88.J14.fix_huff_tbl|
+        MOV      a3,a3,LSL #1
+        MOV      a3,a3,LSL #16
+        MOV      a3,a3,LSR #16
+        ADD      a4,a4,#1
+        ADD      lr,sp,#&204
+        LDRB     ip,[lr,a2]
+        TEQ      ip,#0
+        BNE      |L000c44.J10.fix_huff_tbl|
+|L000ca8.J11.fix_huff_tbl|
+        MOV      a2,#0
+        MOV      a3,#1
+        MVN      v6,#0
+|L000cb4.J18.fix_huff_tbl|
+        ADD      v3,v1,a3
+        LDRB     a4,[v3,#0]
+        TEQ      a4,#0
+        BEQ      |L000d08.J19.fix_huff_tbl|
+        ADD      lr,v1,a3,LSL #2
+        STR      a2,[lr,#&15c]
+        ADD      a4,lr,#&15c
+        LDR      v4,[sp,a2,LSL #1]
+        MOV      v4,v4,LSL #16
+        MOV      v4,v4,LSR #16
+        LDR      ip,[a4,#0]
+        SUB      v4,ip,v4
+        STR      v4,[a4,#0]
+        LDRB     a4,[v3,#0]
+        ADD      a2,a4,a2
+        ADD      a4,sp,a2,LSL #1
+        LDR      a4,[a4,#-2]
+        MOV      a4,a4,LSL #16
+        MOV      a4,a4,LSR #16
+        STR      a4,[lr,#&114]!
+        B        |L000d10.J21.fix_huff_tbl|
+|L000d08.J19.fix_huff_tbl|
+        ADD      a4,v1,a3,LSL #2
+        STR      v6,[a4,#&114]!
+|L000d10.J21.fix_huff_tbl|
+        ADD      a3,a3,#1
+        CMP      a3,#&10
+        BLE      |L000cb4.J18.fix_huff_tbl|
+        MVN      a2,#&ff00000
+        ADD      a2,a2,#&10000000
+        MOV      v3,#0
+        MOV      v5,#&20
+        STR      a2,[v1,#&158]
+|L000d30.J23.fix_huff_tbl|
+        MOV      a1,v3,LSL #24
+        MOV      a2,v1
+        ADD      v2,v2,#&104
+        STMIA    v2,{a1,v5}
+        SUB      v2,v2,#&104
+        MOV      a1,v2
+        BL       huff_DECODE_buildshortcut
+        MOV      v4,a1
+        LDR      a1,[v2,#&108]
+        CMP      a1,#&18
+        ADDLT    a1,v1,v3,LSL #2
+        STRLT    v6,[a1,#&1a0]!
+        BLT      |L000d8c.J26.fix_huff_tbl|
+        CMP      v4,#0
+        MOVLT    a1,#0
+        MOVGE    a1,#1
+        MOV      a2,#4
+        BL       assert
+        LDR      a1,[v2,#&108]
+        SUB      a1,v5,a1
+        ORR      a1,v4,a1,LSL #24
+        ADD      a2,v1,v3,LSL #2
+        STR      a1,[a2,#&1a0]!
+|L000d8c.J26.fix_huff_tbl|
+        ADD      v3,v3,#1
+        CMP      v3,#&100
+        BLT      |L000d30.J23.fix_huff_tbl|
+        MOV      a1,#0
+        STR      a1,[v2,#&108]
+        STR      a1,[v2,#&104]!
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+get_bits
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      v2,a2
+        LDR      a1,[a1,#&108]
+        CMP      a2,a1
+        BLE      |L000e40.J5.get_bits|
+        MOV      v3,#&ff
+|L000dcc.J4.get_bits|
+        ADD      a2,v1,#&34
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        MOVCS    a1,v3
+        BCS      |L000dec.J7.get_bits|
+        LDRB     a3,[a1],#1
+        STR      a1,[v1,#&34]
+        MOV      a1,a3
+|L000dec.J7.get_bits|
+        LDR      a3,[v1,#&104]
+        ORR      a3,a1,a3,LSL #8
+        STR      a3,[v1,#&104]
+        LDR      a3,[v1,#&108]
+        ADD      a3,a3,#8
+        TEQ      a1,#&ff
+        STR      a3,[v1,#&108]
+        BNE      |L000e34.J10.get_bits|
+        LDR      a1,[v1,#&34]
+        CMP      a1,a2
+        LDRCCB   a2,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a2,v3
+        TEQ      a2,#0
+        BLNE     newline
+        MOVNE    a1,#&394
+        ADDNE    a1,a1,#&2400
+        BLNE     exit
+|L000e34.J10.get_bits|
+        LDR      a1,[v1,#&108]
+        CMP      v2,a1
+        BGT      |L000dcc.J4.get_bits|
+|L000e40.J5.get_bits|
+        LDR      a1,[v1,#&108]
+        SUB      a1,a1,v2
+        STR      a1,[v1,#&108]
+        LDR      a2,[v1,#&104]!
+        MOV      a1,a2,ASR a1
+        MOV      a2,#1
+        MOV      a2,a2,LSL v2
+        SUB      a2,a2,#1
+        AND      a1,a1,a2
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+
+huff_DECODE_buildshortcut
+        MOV      ip,sp
+        STMDB    sp!,{v1-v4,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      v2,a2
+        LDR      a2,[a1,#&108]
+        TEQ      a2,#0
+        BEQ      |L000ea0.J5.huff_DECODE_buildshortcut|
+        SUB      a2,a2,#1
+        STR      a2,[v1,#&108]
+        LDR      a1,[v1,#&104]
+        MOV      a1,a1,ASR a2
+        AND      a1,a1,#1
+        B        |L000ea8.J4.huff_DECODE_buildshortcut|
+|L000ea0.J5.huff_DECODE_buildshortcut|
+        MOV      a2,#1
+        BL       get_bits
+|L000ea8.J4.huff_DECODE_buildshortcut|
+        MOV      v4,a1
+        MOV      v3,#1
+        B        |L000eec.J8.huff_DECODE_buildshortcut|
+|L000eb4.J7.huff_DECODE_buildshortcut|
+        LDR      a1,[v1,#&108]
+        TEQ      a1,#0
+        BEQ      |L000ed8.J10.huff_DECODE_buildshortcut|
+        SUB      a1,a1,#1
+        STR      a1,[v1,#&108]
+        LDR      a2,[v1,#&104]
+        MOV      a1,a2,ASR a1
+        AND      a1,a1,#1
+        B        |L000ee4.J9.huff_DECODE_buildshortcut|
+|L000ed8.J10.huff_DECODE_buildshortcut|
+        MOV      a1,v1
+        MOV      a2,#1
+        BL       get_bits
+|L000ee4.J9.huff_DECODE_buildshortcut|
+        ADD      v4,a1,v4,LSL #1
+        ADD      v3,v3,#1
+|L000eec.J8.huff_DECODE_buildshortcut|
+        ADD      a1,v2,v3,LSL #2
+        LDR      a1,[a1,#&114]
+        CMP      a1,v4
+        BGE      |L000f04.J12.huff_DECODE_buildshortcut|
+        CMP      v3,#8
+        BLE      |L000eb4.J7.huff_DECODE_buildshortcut|
+|L000f04.J12.huff_DECODE_buildshortcut|
+        CMP      v3,#8
+        MVNGT    a1,#0
+        LDMGTDB  fp,{v1-v4,fp,sp,pc}^
+        ADD      a1,v2,v3,LSL #2
+        LDR      a1,[a1,#&15c]
+        ADD      a1,a1,v4
+        ADD      a1,v2,a1
+        LDRB     a1,[a1,#&11]
+        LDMDB    fp,{v1-v4,fp,sp,pc}^
+
+huff_decoder_init
+        MOV      a2,#0
+        STR      a2,[a1,#&108]!
+        MOVS     pc,lr
+
+mono_convert_block
+        STMDB    sp!,{v1,lr}
+        MOV      ip,#0
+|L000f3c.J4.mono_convert_block|
+        MOV      a4,#0
+|L000f40.J5.mono_convert_block|
+        ADD      lr,ip,a4,LSL #3
+        LDR      lr,[a1,lr,LSL #2]
+        ADD      lr,lr,#&40000
+        MOV      lr,lr,ASR #19
+        ADDS     lr,lr,#&80
+        MOVMI    lr,#0
+        BMI      |L000f64.J8.mono_convert_block|
+        CMP      lr,#&ff
+        MOVGT    lr,#&ff
+|L000f64.J8.mono_convert_block|
+        ORR      v1,lr,lr,LSL #8
+        ORR      lr,v1,lr,LSL #16
+        STR      lr,[a2,a4,LSL #2]
+        ADD      a4,a4,#1
+        CMP      a4,#8
+        BLT      |L000f40.J5.mono_convert_block|
+        ADD      a2,a2,a3,LSL #2
+        ADD      ip,ip,#1
+        CMP      ip,#8
+        BLT      |L000f3c.J4.mono_convert_block|
+        LDMIA    sp!,{v1,pc}^
+
+mono_convert_pixel
+        ADDS     a1,a2,#&80
+        MOVMI    a1,#0
+        BMI      |L000fa4.J6.mono_convert_pixel|
+        CMP      a1,#&ff
+        MOVGT    a1,#&ff
+|L000fa4.J6.mono_convert_pixel|
+        ORR      a2,a1,a1,LSL #8
+        ORR      a1,a2,a1,LSL #16
+        MOVS     pc,lr
+
+colour_convert_block
+        MOV      ip,sp
+        STMDB    sp!,{a1-a3,v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        SUB      sp,sp,#&14
+        MOV      v5,a1
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#&10]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#&c]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#8]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#4]
+        ADD      a1,a1,#&100
+        MOV      a3,#0
+        STR      a1,[sp,#0]
+|L000ff0.J4.colour_convert_block|
+        MOV      a1,#0
+        AND      v3,a3,#7
+        MOV      v2,a3,ASR #1
+|L000ffc.J5.colour_convert_block|
+        AND      a4,a1,#7
+        ADD      ip,v3,a4,LSL #3
+        CMP      a3,#8
+        BGE      |L00101c.J7.colour_convert_block|
+        CMP      a1,#8
+        LDRGE    a4,[sp,#&10]
+        MOVLT    a4,v5
+        B        |L001028.J6.colour_convert_block|
+|L00101c.J7.colour_convert_block|
+        CMP      a1,#8
+        LDRGE    a4,[sp,#8]
+        LDRLT    a4,[sp,#&c]
+|L001028.J6.colour_convert_block|
+        LDR      a4,[a4,ip,LSL #2]
+        MOV      ip,a1,ASR #1
+        ADD      ip,v2,ip,LSL #3
+        LDR      lr,[sp,#4]
+        LDR      lr,[lr,ip,LSL #2]
+        LDR      v1,[sp,#0]
+        LDR      ip,[v1,ip,LSL #2]
+        ADD      a4,a4,#&40000
+        MOV      a4,a4,ASR #19
+        ADD      a4,a4,#&80
+        ADD      lr,lr,#&40000
+        MOV      lr,lr,ASR #19
+        ADD      ip,ip,#&40000
+        MOV      v1,ip,ASR #19
+        ADD      v4,v1,v1,LSL #5
+        RSB      v4,v4,v4,LSL #3
+        ADD      v4,v4,v1,LSL #7
+        ADD      ip,lr,lr,LSL #1
+        ADD      ip,ip,lr,LSL #3
+        MOV      ip,ip,LSL #3
+        RSB      v6,ip,#0
+        ADD      ip,v1,v1,LSL #1
+        RSB      ip,ip,v1,LSL #6
+        ADD      ip,ip,ip,LSL #1
+        SUB      v1,v6,ip
+        ADD      ip,lr,lr,LSL #5
+        RSB      ip,ip,lr,LSL #8
+        ADD      ip,ip,lr,LSL #2
+        MOV      ip,ip,LSL #1
+        ADD      lr,v4,#&80
+        ADDS     lr,a4,lr,ASR #8
+        MOVMI    lr,#0
+        BMI      |L0010b4.J15.colour_convert_block|
+        CMP      lr,#&ff
+        MOVGT    lr,#&ff
+|L0010b4.J15.colour_convert_block|
+        ADD      v1,v1,#&80
+        ADDS     v1,a4,v1,ASR #8
+        MOVMI    v1,#0
+        BMI      |L0010cc.J19.colour_convert_block|
+        CMP      v1,#&ff
+        MOVGT    v1,#&ff
+|L0010cc.J19.colour_convert_block|
+        ADD      ip,ip,#&80
+        ADDS     a4,a4,ip,ASR #8
+        MOVMI    a4,#0
+        BMI      |L0010e4.J23.colour_convert_block|
+        CMP      a4,#&ff
+        MOVGT    a4,#&ff
+|L0010e4.J23.colour_convert_block|
+        ORR      ip,lr,v1,LSL #8
+        ORR      a4,ip,a4,LSL #16
+        STR      a4,[a2,a1,LSL #2]
+        ADD      a1,a1,#1
+        CMP      a1,#&10
+        BLT      |L000ffc.J5.colour_convert_block|
+        LDR      a1,[fp,#-&28]
+        ADD      a2,a2,a1,LSL #2
+        ADD      a3,a3,#1
+        CMP      a3,#&10
+        BLT      |L000ff0.J4.colour_convert_block|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+colour_convert_unusual_block
+        MOV      ip,sp
+        STMDB    sp!,{a1-a4}
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#&14
+        SUB      sp,sp,#&20
+        LDR      v3,[fp,#&14]
+        STR      a1,[sp,#&14]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#&10]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#&c]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#8]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#4]
+        ADD      a1,a1,#&100
+        MOV      a3,#0
+        CMP      a3,v3,LSL #3
+        STR      a1,[sp,#0]
+        BGE      |L0012a4.J35.colour_convert_unusual_block|
+        SUB      a1,a4,#1
+        STR      a1,[sp,#&1c]
+|L00116c.J4.colour_convert_unusual_block|
+        MOV      a1,#0
+        CMP      a1,a4,LSL #3
+        BGE      |L001290.J8.colour_convert_unusual_block|
+        AND      v4,a3,#7
+        SUB      lr,v3,#1
+        MOV      ip,a3,ASR lr
+        STR      ip,[sp,#&18]
+|L001188.J7.colour_convert_unusual_block|
+        AND      ip,a1,#7
+        ADD      lr,v4,ip,LSL #3
+        CMP      a3,#8
+        BGE      |L0011a8.J11.colour_convert_unusual_block|
+        CMP      a1,#8
+        LDRGE    ip,[sp,#&10]
+        LDRLT    ip,[sp,#&14]
+        B        |L0011b4.J10.colour_convert_unusual_block|
+|L0011a8.J11.colour_convert_unusual_block|
+        CMP      a1,#8
+        LDRGE    ip,[sp,#8]
+        LDRLT    ip,[sp,#&c]
+|L0011b4.J10.colour_convert_unusual_block|
+        LDR      lr,[ip,lr,LSL #2]
+        LDR      v1,[sp,#&1c]
+        MOV      v1,a1,ASR v1
+        LDR      ip,[sp,#&18]
+        ADD      ip,ip,v1,LSL #3
+        LDR      v1,[sp,#4]
+        LDR      v1,[v1,ip,LSL #2]
+        LDR      v2,[sp,#0]
+        LDR      ip,[v2,ip,LSL #2]
+        ADD      lr,lr,#&40000
+        MOV      lr,lr,ASR #19
+        ADD      lr,lr,#&80
+        ADD      v1,v1,#&40000
+        MOV      v1,v1,ASR #19
+        ADD      ip,ip,#&40000
+        MOV      v2,ip,ASR #19
+        ADD      v5,v2,v2,LSL #5
+        RSB      v5,v5,v5,LSL #3
+        ADD      v5,v5,v2,LSL #7
+        ADD      ip,v1,v1,LSL #1
+        ADD      ip,ip,v1,LSL #3
+        MOV      ip,ip,LSL #3
+        RSB      v6,ip,#0
+        ADD      ip,v2,v2,LSL #1
+        RSB      ip,ip,v2,LSL #6
+        ADD      ip,ip,ip,LSL #1
+        SUB      v2,v6,ip
+        ADD      ip,v1,v1,LSL #5
+        RSB      ip,ip,v1,LSL #8
+        ADD      ip,ip,v1,LSL #2
+        MOV      ip,ip,LSL #1
+        ADD      v1,v5,#&80
+        ADDS     v1,lr,v1,ASR #8
+        MOVMI    v1,#0
+        BMI      |L001248.J19.colour_convert_unusual_block|
+        CMP      v1,#&ff
+        MOVGT    v1,#&ff
+|L001248.J19.colour_convert_unusual_block|
+        ADD      v2,v2,#&80
+        ADDS     v2,lr,v2,ASR #8
+        MOVMI    v2,#0
+        BMI      |L001260.J23.colour_convert_unusual_block|
+        CMP      v2,#&ff
+        MOVGT    v2,#&ff
+|L001260.J23.colour_convert_unusual_block|
+        ADD      ip,ip,#&80
+        ADDS     ip,lr,ip,ASR #8
+        MOVMI    ip,#0
+        BMI      |L001278.J27.colour_convert_unusual_block|
+        CMP      ip,#&ff
+        MOVGT    ip,#&ff
+|L001278.J27.colour_convert_unusual_block|
+        ORR      lr,v1,v2,LSL #8
+        ORR      ip,lr,ip,LSL #16
+        STR      ip,[a2,a1,LSL #2]
+        ADD      a1,a1,#1
+        CMP      a1,a4,LSL #3
+        BLT      |L001188.J7.colour_convert_unusual_block|
+|L001290.J8.colour_convert_unusual_block|
+        LDR      a1,[fp,#&c]
+        ADD      a2,a2,a1,LSL #2
+        ADD      a3,a3,#1
+        CMP      a3,v3,LSL #3
+        BLT      |L00116c.J4.colour_convert_unusual_block|
+|L0012a4.J35.colour_convert_unusual_block|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+colour_convert_pixels
+        STMDB    sp!,{v1-v3,lr}
+        ADD      a2,a2,#4
+        MOV      a2,a2,ASR #3
+        ADD      a3,a3,#4
+        MOV      a3,a3,ASR #3
+        ADD      a4,a3,a3,LSL #5
+        RSB      a4,a4,a4,LSL #3
+        ADD      a4,a4,a3,LSL #7
+        ADD      ip,a2,a2,LSL #1
+        ADD      ip,ip,a2,LSL #3
+        MOV      ip,ip,LSL #3
+        RSB      lr,ip,#0
+        ADD      ip,a3,a3,LSL #1
+        RSB      a3,ip,a3,LSL #6
+        ADD      a3,a3,a3,LSL #1
+        SUB      a3,lr,a3
+        ADD      ip,a2,a2,LSL #5
+        RSB      ip,ip,a2,LSL #8
+        ADD      a2,ip,a2,LSL #2
+        MOV      a2,a2,LSL #1
+        ADD      a4,a4,#&80
+        MOV      v2,a4,ASR #8
+        ADD      a3,a3,#&80
+        MOV      v1,a3,ASR #8
+        ADD      a2,a2,#&80
+        MOV      lr,a2,ASR #8
+        MOV      a4,#0
+        MOV      v3,#&80
+|L001318.J4.colour_convert_pixels|
+        LDR      a2,[a1,a4,LSL #2]
+        ADD      a2,a2,#4
+        ADD      ip,v3,a2,ASR #3
+        ADDS     a3,v2,ip
+        MOVMI    a3,#0
+        BMI      |L001338.J7.colour_convert_pixels|
+        CMP      a3,#&ff
+        MOVGT    a3,#&ff
+|L001338.J7.colour_convert_pixels|
+        ADDS     a2,v1,ip
+        MOVMI    a2,#0
+        BMI      |L00134c.J11.colour_convert_pixels|
+        CMP      a2,#&ff
+        MOVGT    a2,#&ff
+|L00134c.J11.colour_convert_pixels|
+        ADDS     ip,lr,ip
+        MOVMI    ip,#0
+        BMI      |L001360.J15.colour_convert_pixels|
+        CMP      ip,#&ff
+        MOVGT    ip,#&ff
+|L001360.J15.colour_convert_pixels|
+        ORR      a2,a3,a2,LSL #8
+        ORR      a2,a2,ip,LSL #16
+        STR      a2,[a1,a4,LSL #2]
+        ADD      a4,a4,#1
+        CMP      a4,#4
+        BLT      |L001318.J4.colour_convert_pixels|
+        LDMIA    sp!,{v1-v3,pc}^
+
+        EXPORT  assembler_panic
+assembler_panic
+        MOVS     pc,lr
+
+init_workspace
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      a3,a2
+        MOV      a2,#0
+        LDR      v2,[a1,#&20]
+        LDR      v3,[a1,#&10]
+        BL       memset
+        STR      v2,[v1,#&20]
+        STR      v3,[v1,#&10]
+        ADD      a1,v1,#&1c
+        ADD      a1,a1,#&800
+        STR      a1,[v1,#&50]
+        MOV      a1,#0
+|L0013bc.J4.init_workspace|
+        ADD      a2,v1,a1,LSL #8
+        ADD      a2,a2,#&fc
+        ADD      a2,a2,#&800
+        ADD      a3,v1,a1,LSL #2
+        ADD      a1,a1,#1
+        CMP      a1,#4
+        STR      a2,[a3,#&54]!
+        BLT      |L0013bc.J4.init_workspace|
+        MOV      a1,#0
+|L0013e0.J6.init_workspace|
+        RSB      a2,a1,a1,LSL #4
+        ADD      a2,a2,a2,LSL #1
+        ADD      a3,v1,a2,LSL #5
+        SUB      a4,a3,#&304
+        ADD      a4,a4,#&1000
+        ADD      a2,v1,a1,LSL #2
+        ADD      a3,a3,#&37c
+        ADD      a3,a3,#&2000
+        ADD      a1,a1,#1
+        CMP      a1,#4
+        STR      a4,[a2,#&64]!
+        STR      a3,[a2,#&10]
+        BLT      |L0013e0.J6.init_workspace|
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+
+save_huff_stream
+        MOV      ip,sp
+        STMDB    sp!,{v1-v4,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      v2,a2
+        LDR      a1,[a1,#&108]
+        MOV      v4,#1
+        MOV      v3,#0
+        CMP      a1,#&20
+        MOVGE    a1,v3
+        MOVLT    a1,v4
+        MOV      a2,#2
+        BL       assert
+        LDR      a1,[v1,#&108]
+        CMP      a1,#0
+        MOVLT    a1,v3
+        MOVGE    a1,v4
+        MOV      a2,#2
+        BL       assert
+        ADD      a2,v1,#&30
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        MOVCS    a1,v3
+        MOVCC    a1,v4
+        MOV      a2,#2
+        BL       assert
+        LDR      a1,[v1,#&38]
+        LDR      a2,[v1,#&34]
+        CMP      a2,a1
+        MOVCS    a1,v3
+        MOVCC    a1,v4
+        MOV      a2,#2
+        BL       assert
+        ADD      a2,v1,#&30
+        LDMIA    a2,{a1,a2}
+        SUB      a2,a2,a1
+        LDR      a1,[v1,#&108]
+        ADD      a1,a1,a2,LSL #5
+        STR      a1,[v2,#0]
+        LDR      a1,[v1,#&104]
+        STR      a1,[v2,#4]
+        LDR      a1,[v1,#&e4]
+        STRB     a1,[v2,#8]
+        MOV      a1,a1,ASR #8
+        STRB     a1,[v2,#9]
+        LDR      a1,[v1,#&e8]
+        STRB     a1,[v2,#&a]
+        MOV      a1,a1,ASR #8
+        STRB     a1,[v2,#&b]
+        LDR      a1,[v1,#&ec]
+        STRB     a1,[v2,#&c]
+        MOV      a1,a1,ASR #8
+        STRB     a1,[v2,#&d]
+        LDR      a1,[v1,#&c0]
+        STRB     a1,[v2,#&10]
+        MOV      a1,a1,ASR #8
+        STRB     a1,[v2,#&11]
+        LDR      a1,[v1,#&c4]!
+        STRB     a1,[v2,#&12]
+        MOV      a1,a1,ASR #8
+        STRB     a1,[v2,#&13]
+        LDMDB    fp,{v1-v4,fp,sp,pc}^
+
+restore_huff_stream
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        LDR      a1,[a2,#4]
+        STR      a1,[v1,#&104]
+        LDR      a1,[a2,#0]
+        CMP      a1,#0
+        ADDLT    a1,a1,#&1f
+        LDR      a3,[v1,#&30]
+        ADD      a1,a3,a1,ASR #5
+        STR      a1,[v1,#&34]
+        LDR      a1,[a2,#0]
+        AND      a1,a1,#&1f
+        STR      a1,[v1,#&108]
+        LDR      a1,[a2,#8]
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        STR      a1,[v1,#&e4]
+        LDR      a1,[a2,#&a]
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        STR      a1,[v1,#&e8]
+        LDR      a1,[a2,#&c]
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        STR      a1,[v1,#&ec]
+        LDR      a1,[a2,#&10]
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        STR      a1,[v1,#&c0]
+        LDR      a1,[a2,#&12]
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        STR      a1,[v1,#&c4]
+        MOV      v3,#1
+        MOV      v2,#0
+        ADD      a2,v1,#&30
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        MOVCS    a1,v2
+        MOVCC    a1,v3
+        MOV      a2,#4
+        BL       assert
+        ADD      v1,v1,#&30
+        LDMIB    v1!,{a1,a2}
+        CMP      a1,a2
+        MOVCS    a1,v2
+        MOVCC    a1,v3
+        MOV      a2,#4
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        assert
+
+process_restart
+        MOV      ip,sp
+        STMDB    sp!,{v1-v4,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        LDR      a1,[a1,#&34]
+        LDRB     v4,[a1],#1
+        STR      a1,[v1,#&34]
+        MOV      v3,#1
+        MOV      v2,#0
+        LDR      a1,[v1,#&108]
+        CMP      a1,#7
+        MOVGT    a1,v2
+        MOVLE    a1,v3
+        MOV      a2,#2
+        BL       assert
+        TEQ      v4,#&ff
+        MOVNE    a1,v2
+        MOVEQ    a1,v3
+        MOV      a2,#2
+        BL       assert
+        LDR      a1,[v1,#&34]
+        LDRB     a1,[a1,#0]
+        TEQ      a1,#&ff
+        BNE      |L001658.J11.process_restart|
+|L001640.J10.process_restart|
+        LDR      a1,[v1,#&34]
+        ADD      a1,a1,#1
+        STR      a1,[v1,#&34]
+        LDRB     a1,[a1,#0]
+        TEQ      a1,#&ff
+        BEQ      |L001640.J10.process_restart|
+|L001658.J11.process_restart|
+        LDR      a1,[v1,#&34]
+        LDRB     v4,[a1],#1
+        STR      a1,[v1,#&34]
+        AND      a1,v4,#&f8
+        TEQ      a1,#&d0
+        MOVNE    a1,v2
+        MOVEQ    a1,v3
+        MOV      a2,#2
+        BL       assert
+        AND      a1,v4,#7
+        LDR      a2,[v1,#&c4]
+        TEQ      a1,a2
+        MOVNE    a1,v2
+        MOVEQ    a1,v3
+        MOV      a2,#2
+        BL       assert
+        MOV      a2,v2
+        STR      a2,[v1,#&108]
+        STR      a2,[v1,#&104]
+        LDR      a1,[v1,#&bc]
+        STR      a1,[v1,#&c0]
+        LDR      a1,[v1,#&c4]
+        ADD      a1,a1,#1
+        AND      a1,a1,#7
+        STR      a1,[v1,#&c4]
+        MOV      a1,#0
+        LDR      a3,[v1,#&c8]
+        CMP      a3,#0
+        LDMLEDB  fp,{v1-v4,fp,sp,pc}^
+|L0016cc.J20.process_restart|
+        ADD      a3,v1,a1,LSL #2
+        ADD      a1,a1,#1
+        STR      a2,[a3,#&e4]!
+        LDR      a3,[v1,#&c8]
+        CMP      a1,a3
+        BLT      |L0016cc.J20.process_restart|
+        LDMDB    fp,{v1-v4,fp,sp,pc}^
+
+        IMPORT  asm_huff_skip_blocks
+do_huff_skip_blocks
+        MOV      ip,sp
+        STMDB    sp!,{a1-a4}
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#&14
+        MOV      v1,a1
+        MOV      v2,a2
+        MOV      v3,a3
+        LDR      v4,[fp,#&1c]
+        LDR      v5,[fp,#&18]
+        LDR      v6,[fp,#&14]
+        LDR      a2,[a1,#&bc]
+        TEQ      a2,#0
+        BEQ      |L00178c.J4.do_huff_skip_blocks|
+        CMP      v4,#0
+        LDMLEDB  fp,{v1-v6,fp,sp,pc}^
+        B        |L001730.J10.do_huff_skip_blocks|
+|L001728.J6.do_huff_skip_blocks|
+        TEQ      a1,#0
+        BEQ      |L00174c.J9.do_huff_skip_blocks|
+|L001730.J10.do_huff_skip_blocks|
+        LDR      a1,[v1,#&c0]
+        TEQ      a1,#0
+        MOVEQ    a1,v1
+        BLEQ     process_restart
+        LDR      a1,[v1,#&c0]
+        SUB      a1,a1,#1
+        STR      a1,[v1,#&c0]
+|L00174c.J9.do_huff_skip_blocks|
+        MOV      a4,#1
+        MOV      a3,v5
+        MOV      a2,v6
+        STMDB    sp!,{a2-a4}
+        MOV      a3,v3
+        MOV      a2,v2
+        MOV      a1,v1
+        LDR      a4,[fp,#&10]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        SUB      v4,v4,#1
+        ADD      v2,v2,#&100
+        CMP      v4,#0
+        LDR      a1,[fp,#&20]
+        BGT      |L001728.J6.do_huff_skip_blocks|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+|L00178c.J4.do_huff_skip_blocks|
+        MOV      a4,v4
+        MOV      a3,v5
+        MOV      a2,v6
+        STMDB    sp!,{a2-a4}
+        MOV      a3,v3
+        MOV      a2,v2
+        LDR      a4,[fp,#&10]
+        BL       asm_huff_skip_blocks
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+        IMPORT  asm_huff_decode_blocks
+do_huff_decode_blocks
+        MOV      ip,sp
+        STMDB    sp!,{a1-a4}
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#&14
+        MOV      v1,a1
+        MOV      v2,a2
+        MOV      v3,a3
+        LDR      v4,[fp,#&1c]
+        LDR      v5,[fp,#&18]
+        LDR      v6,[fp,#&14]
+        LDR      a2,[a1,#&bc]
+        TEQ      a2,#0
+        BEQ      |L001854.J4.do_huff_decode_blocks|
+        CMP      v4,#0
+        LDMLEDB  fp,{v1-v6,fp,sp,pc}^
+        B        |L0017f8.J10.do_huff_decode_blocks|
+|L0017f0.J6.do_huff_decode_blocks|
+        TEQ      a1,#0
+        BEQ      |L001814.J9.do_huff_decode_blocks|
+|L0017f8.J10.do_huff_decode_blocks|
+        LDR      a1,[v1,#&c0]
+        TEQ      a1,#0
+        MOVEQ    a1,v1
+        BLEQ     process_restart
+        LDR      a1,[v1,#&c0]
+        SUB      a1,a1,#1
+        STR      a1,[v1,#&c0]
+|L001814.J9.do_huff_decode_blocks|
+        MOV      a4,#1
+        MOV      a3,v5
+        MOV      a2,v6
+        STMDB    sp!,{a2-a4}
+        MOV      a3,v3
+        MOV      a2,v2
+        MOV      a1,v1
+        LDR      a4,[fp,#&10]
+        BL       asm_huff_decode_blocks
+        ADD      sp,sp,#&c
+        SUB      v4,v4,#1
+        ADD      v2,v2,#&100
+        CMP      v4,#0
+        LDR      a1,[fp,#&20]
+        BGT      |L0017f0.J6.do_huff_decode_blocks|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+|L001854.J4.do_huff_decode_blocks|
+        MOV      a4,v4
+        MOV      a3,v5
+        MOV      a2,v6
+        STMDB    sp!,{a2-a4}
+        MOV      a3,v3
+        MOV      a2,v2
+        LDR      a4,[fp,#&10]
+        BL       asm_huff_decode_blocks
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+        ;MPORT  jpeg_scan_file
+do_jpeg_scan_file
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      lr,a3
+        MOV      ip,a4
+        MOV      v1,a1
+        STR      a2,[a1,#&10]
+        MVN      a1,#0
+        MOV      a4,#0
+        MVN      a3,#0
+        MVN      a2,#0
+        STR      a1,[v1,#0]
+        MVN      a1,#&80000000
+        STMDB    sp!,{a1-a4}
+        MOV      a3,ip
+        MOV      a2,lr
+        MOV      a1,v1
+        BL       jpeg_scan_file
+        LDMDB    fp,{v1,fp,sp,pc}^
+
+do_jpeg_scan_file_16
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      lr,a3
+        MOV      ip,a4
+        MOV      v1,a1
+        STR      a2,[a1,#&10]
+        MVN      a1,#0
+        MOV      a4,#&10
+        MVN      a3,#0
+        MVN      a2,#0
+        STR      a1,[v1,#0]
+        MVN      a1,#&80000000
+        STMDB    sp!,{a1-a4}
+        MOV      a3,ip
+        MOV      a2,lr
+        MOV      a1,v1
+        MOV      a4,#0
+        BL       jpeg_scan_file
+        LDMDB    fp,{v1,fp,sp,pc}^
+
+        IMPORT  |__rt_sdiv|
+jpeg_scan_file
+        MOV      ip,sp
+        STMDB    sp!,{a1-a4}
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#&14
+        MOV      v1,a1
+        MOV      v5,a2
+        MOV      v4,a3
+        MOV      v3,a4
+        SUB      sp,sp,#&20
+        LDR      v2,[fp,#&20]
+        TST      v2,#2
+        LDR      v6,[fp,#&14]
+        BICNE    v2,v2,#&38
+        CMP      v3,#0
+        MOVLT    v3,#0
+        TST      v2,#&28
+        BEQ      |L001968.J8.jpeg_scan_file|
+        SUBS     v3,v3,#&10
+        MOVMI    v3,#0
+        BIC      v3,v3,#&f
+        ADD      v6,v6,#&10
+|L001968.J8.jpeg_scan_file|
+        LDR      a2,[v1,#0]
+        CMP      a2,#0
+        BNE      |L001a78.J12.jpeg_scan_file|
+        LDR      a2,[v1,#&30]
+        TEQ      a2,v5
+        BNE      |L001a80.J42.jpeg_scan_file|
+        LDR      a3,[v1,#&38]
+        SUB      a2,a3,a2
+        TEQ      a2,v4
+        BNE      |L001a80.J42.jpeg_scan_file|
+        LDR      a2,[fp,#&18]
+        CMN      a2,#1
+        LDRNE    a2,[v1,#&14]
+        LDRNE    a3,[fp,#&18]
+        TEQNE    a2,a3
+        BNE      |L001a80.J42.jpeg_scan_file|
+        LDR      a2,[fp,#&1c]
+        CMN      a2,#1
+        LDRNE    a2,[v1,#&18]
+        LDRNE    a3,[fp,#&1c]
+        TEQNE    a2,a3
+        BNE      |L001a80.J42.jpeg_scan_file|
+        MOVS     a2,v4
+        ADDMI    a2,a2,#7
+        MOV      a2,a2,ASR #3
+        LDR      a2,[v5,a2,LSL #2]
+        LDR      a3,[v1,#&10c]
+        TEQ      a2,a3
+        BNE      |L001a80.J42.jpeg_scan_file|
+        MOV      a3,v4
+        CMP      v4,#0
+        ADDLT    a3,a3,#3
+        MOV      a3,a3,ASR #2
+        MOV      a2,v4
+        ADDLT    a2,a2,#&f
+        SUB      a2,a3,a2,ASR #4
+        LDR      a3,[v5,a2,LSL #2]
+        LDR      a2,[v1,#&110]
+        TEQ      a3,a2
+        BNE      |L001a80.J42.jpeg_scan_file|
+        MOV      a2,v4
+        CMP      v4,#0
+        ADDLT    a2,a2,#3
+        MOV      a2,a2,ASR #2
+        MOV      a3,v4
+        ADDLT    a3,a3,#&1f
+        SUB      a2,a2,a3,ASR #5
+        LDR      a3,[v5,a2,LSL #2]
+        LDR      a2,[v1,#&114]
+        TEQ      a3,a2
+        LDREQ    a2,[v1,#&100]
+        TEQEQ    a2,v2
+        BNE      |L001a80.J42.jpeg_scan_file|
+        LDR      a1,[v1,#&14]
+        CMP      v6,a1
+        MOVGT    v6,a1
+        LDR      a1,[v1,#&f8]
+        CMP      v3,a1
+        BLT      |L001a60.J39.jpeg_scan_file|
+        LDR      a1,[v1,#&fc]
+        CMP      v6,a1
+        BLE      |L001a68.J38.jpeg_scan_file|
+|L001a60.J39.jpeg_scan_file|
+        MVN      a1,#0
+        STR      a1,[v1,#&f4]
+|L001a68.J38.jpeg_scan_file|
+        MOV      a1,#0
+        ADD      v1,v1,#&f4
+        STMIB    v1!,{v3,v6}
+        B        |L0020bc.J135.jpeg_scan_file|
+|L001a78.J12.jpeg_scan_file|
+        MOVLT    a2,#0
+        STRLT    a2,[v1,#&20]
+|L001a80.J42.jpeg_scan_file|
+        LDR      a2,[v1,#&10]
+        BL       init_workspace
+        LDR      a1,[v1,#&10]
+        TEQ      a1,#0
+        STREQ    a1,[v1,#&28]
+        LDREQ    a1,[pc, #L001bc4-.-8]
+        BEQ      |L001ab8.J134.jpeg_scan_file|
+        ADD      a2,v1,#&1fc
+        ADD      a2,a2,#&3800
+        ADD      a1,a1,#&204
+        SUB      a1,a1,#&3c00
+        MOV      a1,a1,LSR #2
+        BIC      a1,a1,#&f
+        STR      a2,[v1,#&28]
+|L001ab8.J134.jpeg_scan_file|
+        STR      a1,[v1,#&2c]
+        MOV      a1,v4
+        CMP      v4,#0
+        ADDLT    a1,a1,#7
+        MOV      a1,a1,ASR #3
+        LDR      a1,[v5,a1,LSL #2]
+        MOV      a2,v4
+        STR      a1,[v1,#&10c]
+        ADDLT    a2,a2,#3
+        MOV      a2,a2,ASR #2
+        MOV      a1,v4
+        ADDLT    a1,a1,#&f
+        SUB      a1,a2,a1,ASR #4
+        LDR      a1,[v5,a1,LSL #2]
+        MOV      a2,v4
+        STR      a1,[v1,#&110]
+        ADDLT    a2,a2,#3
+        MOV      a2,a2,ASR #2
+        MOV      a1,v4
+        ADDLT    a1,a1,#&1f
+        SUB      a1,a2,a1,ASR #5
+        LDR      a1,[v5,a1,LSL #2]
+        STR      a1,[v1,#&114]
+        STR      v5,[v1,#&30]
+        STR      v5,[v1,#&34]
+        ADD      a1,v5,v4
+        STR      a1,[v1,#&38]
+        MOV      a1,v1
+        BL       read_file_header
+        MOV      a1,v1
+        BL       read_scan_header
+        MOV      v4,#0
+|L001b38.J57.jpeg_scan_file|
+        ADD      v5,v1,v4,LSL #2
+        MOV      a1,v1
+        LDR      a2,[v5,#&64]
+        BL       fix_huff_tbl
+        MOV      a1,v1
+        LDR      a2,[v5,#&74]!
+        BL       fix_huff_tbl
+        ADD      v4,v4,#1
+        CMP      v4,#4
+        BLT      |L001b38.J57.jpeg_scan_file|
+        MOV      a1,v1
+        BL       huff_decoder_init
+        MVN      a1,#0
+        STR      a1,[v1,#&f4]
+        LDR      a1,[v1,#&bc]
+        STR      a1,[v1,#&c0]
+        MOV      a1,#0
+        STR      a1,[v1,#&c4]
+        LDR      v4,[v1,#&14]
+        CMP      v6,v4
+        MOVGT    v6,v4
+        CMP      v3,v6
+        MOVGT    v3,v6
+        STR      v2,[v1,#&100]
+        ADD      v1,v1,#&f8
+        STMIA    v1,{v3,v6}
+        SUB      v1,v1,#&f8
+        LDR      a1,[v1,#&3c]
+        TEQ      a1,#8
+        BEQ      |L001bc8.J63.jpeg_scan_file|
+        MOV      a2,#1
+        STR      a1,[v1,#4]
+        STR      a2,[v1,#0]
+        MOV      a1,#1
+        B        |L0020bc.J135.jpeg_scan_file|
+L001bc4
+        DCD     &05f5e100
+|L001bc8.J63.jpeg_scan_file|
+        LDR      a1,[v1,#&c8]
+        LDR      v3,[v1,#&4c]
+        TEQ      v3,a1
+        MOVNE    a1,#3
+        STRNE    a1,[v1,#0]
+        BNE      |L0020bc.J135.jpeg_scan_file|
+        LDR      a1,[fp,#&18]
+        TEQ      v4,a1
+        LDRNE    a1,[fp,#&18]
+        CMNNE    a1,#1
+        BEQ      |L001c00.J67.jpeg_scan_file|
+        MOV      a1,#7
+        STMIA    v1,{a1,v4}
+        B        |L0020bc.J135.jpeg_scan_file|
+|L001c00.J67.jpeg_scan_file|
+        LDR      a2,[v1,#&18]
+        STR      a2,[sp,#&1c]
+        LDR      a1,[fp,#&1c]
+        TEQ      a2,a1
+        LDRNE    a1,[fp,#&1c]
+        CMNNE    a1,#1
+        BEQ      |L001c34.J70.jpeg_scan_file|
+        MOV      a1,#6
+        STR      a1,[v1,#0]
+        LDR      a1,[sp,#&1c]
+        STR      a1,[v1,#4]!
+        MOV      a1,#6
+        B        |L0020bc.J135.jpeg_scan_file|
+|L001c34.J70.jpeg_scan_file|
+        LDR      v6,[v1,#&50]
+        LDR      a1,[v6,#&c]
+        MOV      v5,a1,LSL #3
+        LDR      a1,[sp,#&1c]
+        ADD      a1,a1,v5
+        SUB      a2,a1,#1
+        MOV      a1,v5
+        BL       |__rt_sdiv|
+        ADD      a1,a1,a1,LSL #2
+        MOV      a1,a1,LSL #2
+        LDR      a2,[v1,#&28]
+        MOV      a1,a1,LSR #2
+        STR      a2,[v1,#&818]
+        ADD      a2,a2,a1,LSL #2
+        STR      a2,[v1,#&28]
+        LDR      a2,[v1,#&2c]
+        SUB      a2,a2,a1
+        MOV      a1,v5
+        STR      a2,[v1,#&2c]
+        BL       |__rt_sdiv|
+        MOV      a2,a1
+        CMP      a1,v4
+        BGE      |L001ca8.J73.jpeg_scan_file|
+        MOV      a1,#&a
+        STMIA    v1,{a1,v4}
+        MOV      a1,a2
+        STR      a1,[v1,#8]!
+        MOV      a1,#&a
+        B        |L0020bc.J135.jpeg_scan_file|
+|L001ca8.J73.jpeg_scan_file|
+        MOV      a2,#8
+        MOV      a1,#5
+        ADD      v5,v1,#&e4
+        TEQ      v3,#1
+        BNE      |L001db8.J75.jpeg_scan_file|
+        LDR      a3,[v1,#&1c]
+        TEQ      a3,#1
+        MOVNE    a1,#8
+        STMNEIA  v1,{a2,a3}
+        BNE      |L0020bc.J135.jpeg_scan_file|
+        LDR      a2,[v6,#8]
+        TEQ      a2,#1
+        LDREQ    a2,[v6,#&c]
+        TEQEQ    a2,#1
+        BEQ      |L001d00.J79.jpeg_scan_file|
+        STR      a1,[v1,#0]
+        LDR      a1,[v6,#8]
+        STR      a1,[v1,#4]
+        LDR      a1,[v6,#&c]!
+        STR      a1,[v1,#8]!
+        MOV      a1,#5
+        B        |L0020bc.J135.jpeg_scan_file|
+|L001d00.J79.jpeg_scan_file|
+        SUB      sp,sp,#8
+        MOV      v4,#0
+        LDR      a1,[v1,#&cc]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      v6,[a2,#&64]!
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#4]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        MOV      v3,#0
+        STR      a1,[sp,#0]
+        LDR      a1,[sp,#&24]
+        CMP      a1,#0
+        BLE      |L001dac.J84.jpeg_scan_file|
+        ADD      a1,v1,#&118
+        STR      a1,[sp,#&20]
+|L001d50.J83.jpeg_scan_file|
+        ADD      a1,v3,v3,LSL #2
+        LDR      a2,[v1,#&818]
+        ADD      a2,a2,a1,LSL #2
+        MOV      a1,v1
+        BL       save_huff_stream
+        ADD      v3,v3,#1
+        MOV      a4,#1
+        LDR      a1,[v1,#&14]
+        ADD      a1,a1,#7
+        MOV      a3,a1,ASR #3
+        MOV      a2,v5
+        LDR      a1,[sp,#0]
+        STMDB    sp!,{a1-a4}
+        MOV      a3,v6
+        MOV      a1,v1
+        LDR      a2,[sp,#&30]
+        LDR      a4,[sp,#&14]
+        BL       do_huff_skip_blocks
+        ADD      sp,sp,#&10
+        ADD      v4,v4,#8
+        LDR      a1,[v1,#&18]
+        CMP      v4,a1
+        BLT      |L001d50.J83.jpeg_scan_file|
+|L001dac.J84.jpeg_scan_file|
+        ADD      sp,sp,#8
+        BIC      v2,v2,#&30
+        B        |L00203c.J87.jpeg_scan_file|
+|L001db8.J75.jpeg_scan_file|
+        TEQ      v3,#3
+        BNE      |L0020b4.J88.jpeg_scan_file|
+        LDR      a3,[v6,#&c]
+        STR      a3,[sp,#-4]!
+        LDR      a4,[v6,#8]
+        MOV      v3,a4
+        CMP      a4,#2
+        CMPLE    a3,#2
+        BLE      |L001df0.J90.jpeg_scan_file|
+        STR      a1,[v1,#0]
+        LDR      a1,[v6,#8]
+        STR      a1,[v1,#4]
+        LDR      a1,[v6,#&c]!
+        B        |L001e3c.J137.jpeg_scan_file|
+|L001df0.J90.jpeg_scan_file|
+        LDR      a3,[v6,#&40]
+        TEQ      a3,#1
+        LDREQ    a3,[v6,#&44]
+        TEQEQ    a3,#1
+        BEQ      |L001e18.J94.jpeg_scan_file|
+        STR      a1,[v1,#0]
+        LDR      a1,[v6,#&40]
+        STR      a1,[v1,#4]
+        LDR      a1,[v6,#&44]!
+        B        |L001e3c.J137.jpeg_scan_file|
+|L001e18.J94.jpeg_scan_file|
+        LDR      a3,[v6,#&78]
+        TEQ      a3,#1
+        LDREQ    a3,[v6,#&7c]
+        TEQEQ    a3,#1
+        BEQ      |L001e48.J98.jpeg_scan_file|
+        STR      a1,[v1,#0]
+        LDR      a1,[v6,#&78]
+        STR      a1,[v1,#4]
+        LDR      a1,[v6,#&7c]!
+|L001e3c.J137.jpeg_scan_file|
+        STR      a1,[v1,#8]!
+        MOV      a1,#5
+        B        |L001e60.J138.jpeg_scan_file|
+|L001e48.J98.jpeg_scan_file|
+        LDR      a1,[v1,#&1c]
+        TEQ      a1,#3
+        BEQ      |L001e64.J102.jpeg_scan_file|
+        STR      a1,[v1,#4]
+        STR      a2,[v1,#0]
+        MOV      a1,#8
+|L001e60.J138.jpeg_scan_file|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+|L001e64.J102.jpeg_scan_file|
+        TEQ      v3,#2
+        LDREQ    a1,[sp,#0]
+        TEQEQ    a1,#2
+        BICNE    v2,v2,#&30
+        SUB      sp,sp,#&28
+        MOV      a1,#0
+        MOV      v4,#0
+        STR      a1,[sp,#&24]
+        LDR      a1,[v1,#&cc]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#&20]
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#&1c]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        STR      a1,[sp,#&18]
+        LDR      a1,[v1,#&d0]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#&14]
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#&10]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        STR      a1,[sp,#&c]
+        LDR      a1,[v1,#&d4]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#8]
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#4]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        STR      a1,[sp,#0]
+        LDR      a1,[sp,#&48]
+        CMP      a1,#0
+        BLE      |L002038.J109.jpeg_scan_file|
+        LDR      a2,[sp,#&28]
+        MUL      a1,a2,v3
+        ADD      a2,v1,#&218
+        STR      a2,[sp,#&3c]
+        ADD      a2,v1,#&e8
+        STR      a2,[sp,#&38]
+        ADD      a2,v1,#&218
+        ADD      a2,a2,#&400
+        STR      a2,[sp,#&34]
+        ADD      a2,v1,#&ec
+        STR      a1,[sp,#&40]
+        ADD      a1,v1,#&318
+        ADD      a1,a1,#&400
+        STR      a1,[sp,#&2c]
+        STR      a2,[sp,#&30]
+|L001f68.J108.jpeg_scan_file|
+        ADD      a1,v4,v4,LSL #2
+        LDR      a2,[v1,#&818]
+        ADD      a2,a2,a1,LSL #2
+        MOV      a1,v1
+        BL       save_huff_stream
+        ADD      v4,v4,#1
+        MOV      v6,#0
+        LDR      a1,[v1,#&14]
+        CMP      a1,#0
+        BLE      |L00201c.J112.jpeg_scan_file|
+|L001f90.J111.jpeg_scan_file|
+        MOV      a4,#0
+        MOV      a2,v5
+        LDR      a1,[sp,#&18]
+        LDR      a3,[sp,#&40]
+        STMDB    sp!,{a1-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&4c]
+        LDR      a3,[sp,#&30]
+        LDR      a4,[sp,#&2c]
+        BL       do_huff_skip_blocks
+        ADD      sp,sp,#&10
+        MOV      a4,#1
+        LDR      a2,[sp,#&c]
+        LDR      a3,[sp,#&38]
+        STMDB    sp!,{a2-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&40]
+        LDR      a3,[sp,#&20]
+        LDR      a4,[sp,#&1c]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        MOV      a4,#1
+        LDR      a2,[sp,#0]
+        LDR      a3,[sp,#&30]
+        STMDB    sp!,{a2-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&38]
+        LDR      a3,[sp,#&14]
+        LDR      a4,[sp,#&10]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        ADD      v6,v6,v3,LSL #3
+        LDR      a1,[v1,#&14]
+        CMP      v6,a1
+        BLT      |L001f90.J111.jpeg_scan_file|
+|L00201c.J112.jpeg_scan_file|
+        ADD      a2,sp,#&24
+        LDMIA    a2,{a1,a2}
+        ADD      a2,a1,a2,LSL #3
+        STR      a2,[sp,#&24]
+        LDR      a1,[v1,#&18]
+        CMP      a2,a1
+        BLT      |L001f68.J108.jpeg_scan_file|
+|L002038.J109.jpeg_scan_file|
+        ADD      sp,sp,#&2c
+|L00203c.J87.jpeg_scan_file|
+        TST      v2,#4
+        BEQ      |L002078.J117.jpeg_scan_file|
+        LDR      a1,[v1,#&50]
+        LDR      a1,[a1,#8]
+        MOV      a1,a1,LSL #3
+        LDR      a2,[v1,#&2c]
+        BL       |__rt_sdiv|
+        LDR      a2,[v1,#&14]
+        CMP      a1,a2,LSL #1
+        LDRLT    a1,[v1,#&100]
+        BICLT    a1,a1,#4
+        STRLT    a1,[v1,#&100]
+        LDRGE    a1,[v1,#4]
+        ORRGE    a1,a1,#4
+        STRGE    a1,[v1,#4]
+|L002078.J117.jpeg_scan_file|
+        TST      v2,#8
+        LDRNE    a1,[v1,#4]
+        ORRNE    a1,a1,#8
+        STRNE    a1,[v1,#4]
+        TST      v2,#&10
+        LDRNE    a1,[v1,#4]
+        ORRNE    a1,a1,#&10
+        STRNE    a1,[v1,#4]
+        TST      v2,#&20
+        LDRNE    a1,[v1,#4]
+        ORRNE    a1,a1,#&20
+        STRNE    a1,[v1,#4]
+        STR      v2,[v1,#&100]
+        LDR      a1,[v1,#0]
+        B        |L0020bc.J135.jpeg_scan_file|
+|L0020b4.J88.jpeg_scan_file|
+        MOV      a1,#9
+        STMIA    v1,{a1,v3}
+|L0020bc.J135.jpeg_scan_file|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+        IMPORT  asm_j_rev_dct
+        IMPORT  asm_mono_convert_block
+        IMPORT  asm_colour_convert_block_16
+        IMPORT  asm_colour_convert_block
+        IMPORT  asm_colour_convert_block_8
+        IMPORT  asm_get_table32k
+        IMPORT  asm_diffuse_to_8bpp
+jpeg_find_line
+        MOV      ip,sp
+        STMDB    sp!,{a1-a3,v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        LDR      a1,[a1,#&50]
+        LDR      a1,[a1,#&c]
+        ADD      a1,a1,#2
+        STR      a1,[sp,#-&34]!
+        LDR      a1,[v1,#&2c]
+        LDR      a2,[sp,#0]
+        MOV      v4,a1,ASR a2
+        LDR      a1,[v1,#&18]
+        LDR      a2,[fp,#-&2c]
+        SUB      a1,a1,a2
+        SUBS     a1,a1,#1
+        MOV      v2,#0
+        STR      a1,[fp,#-&2c]
+        MOVMI    a1,v2
+        MOVPL    a1,#1
+        MOV      a2,#4
+        BL       assert
+        LDR      a2,[fp,#-&2c]
+        LDR      a1,[v1,#&18]
+        CMP      a2,a1
+        MOVGE    a1,v2
+        MOVLT    a1,#1
+        MOV      a2,#4
+        BL       assert
+        LDR      a2,[fp,#-&2c]
+        LDR      a1,[sp,#0]
+        MOV      a2,a2,ASR a1
+        STR      a2,[sp,#4]
+        LDR      a1,[v1,#&f4]
+        TEQ      a2,a1
+        BEQ      |L00297c.J10.jpeg_find_line|
+        SUB      sp,sp,#4
+        LDR      a1,[v1,#&28]
+        TEQ      a1,#0
+        MOVEQ    a1,v2
+        MOVNE    a1,#1
+        MOV      a2,#4
+        BL       assert
+        MVN      a1,#0
+        STR      a1,[v1,#&f4]
+        LDR      a1,[sp,#8]
+        ADD      a2,a1,a1,LSL #2
+        LDR      a1,[v1,#&818]
+        ADD      a2,a1,a2,LSL #2
+        MOV      a1,v1
+        BL       restore_huff_stream
+        LDR      a1,[v1,#&4c]
+        ADD      a3,v1,#&e4
+        ADD      v6,v1,#&118
+        ADD      a2,v1,#&218
+        TEQ      a1,#1
+        STR      a2,[sp,#&30]
+        STR      a3,[sp,#&34]
+        BNE      |L00233c.J15.jpeg_find_line|
+        SUB      sp,sp,#8
+        MOV      v3,#0
+        LDR      a1,[v1,#&cc]
+        LDR      v2,[v1,#&28]
+        LDR      a2,[a1,#&10]
+        ADD      a2,v1,a2,LSL #2
+        LDR      v5,[a2,#&54]!
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#4]
+        LDR      a1,[a1,#&18]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&74]
+        STR      a1,[sp,#0]
+        LDR      a1,[v1,#&f8]
+        CMP      a1,#8
+        BLT      |L002234.J17.jpeg_find_line|
+        SUB      a1,a1,#8
+        MOV      a1,a1,ASR #3
+        MOV      a4,#1
+        STR      a1,[sp,#-4]!
+        MOV      a3,a1
+        MOV      a1,v5
+        LDR      a2,[sp,#&40]
+        STMDB    sp!,{a1-a4}
+        MOV      a2,v6
+        MOV      a1,v1
+        LDR      a3,[sp,#&18]
+        LDR      a4,[sp,#&14]
+        BL       do_huff_skip_blocks
+        LDR      a1,[sp,#&10]!
+        ADD      v3,v3,a1,LSL #3
+        ADD      v2,v2,a1,LSL #5
+        ADD      sp,sp,#4
+|L002234.J17.jpeg_find_line|
+        LDR      a1,[v1,#&100]
+        TST      a1,#2
+        LDR      a1,[v1,#&fc]
+        BEQ      |L0022c8.J19.jpeg_find_line|
+        CMP      v3,a1
+        BGE      |L0022c0.J22.jpeg_find_line|
+|L00224c.J21.jpeg_find_line|
+        MOV      a4,#1
+        MOV      a3,#1
+        MOV      a1,v5
+        LDR      a2,[sp,#&3c]
+        STMDB    sp!,{a1-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&48]
+        LDR      a3,[sp,#&14]
+        LDR      a4,[sp,#&10]
+        BL       do_huff_skip_blocks
+        ADD      sp,sp,#&10
+        LDR      a2,[v1,#&e4]
+        LDR      a1,[v5,#0]
+        MUL      a2,a1,a2
+        MOV      a1,v1
+        BL       mono_convert_pixel
+        STR      a1,[v2,#0]
+        STR      a1,[v2,#4]
+        STR      a1,[v2,#8]
+        STR      a1,[v2,#&c]
+        STR      a1,[v2,#&10]
+        STR      a1,[v2,#&14]
+        STR      a1,[v2,#&18]
+        ADD      v3,v3,#8
+        STR      a1,[v2,#&1c]!
+        ADD      v2,v2,#4
+        LDR      a1,[v1,#&fc]
+        CMP      v3,a1
+        BLT      |L00224c.J21.jpeg_find_line|
+|L0022c0.J22.jpeg_find_line|
+        MOV      a1,#1
+        B        |L002334.J130.jpeg_find_line|
+|L0022c8.J19.jpeg_find_line|
+        CMP      v3,a1
+        BGE      |L002330.J27.jpeg_find_line|
+|L0022d0.J26.jpeg_find_line|
+        MOV      a4,#1
+        MOV      a3,#1
+        MOV      a1,v5
+        LDR      a2,[sp,#&3c]
+        STMDB    sp!,{a1-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&48]
+        LDR      a3,[sp,#&14]
+        LDR      a4,[sp,#&10]
+        BL       do_huff_decode_blocks
+        ADD      sp,sp,#&10
+        MOV      a1,v1
+        MOV      a3,#1
+        LDR      a2,[sp,#&38]
+        BL       asm_j_rev_dct
+        MOV      a1,v6
+        MOV      a3,v4
+        MOV      a2,v2
+        BL       asm_mono_convert_block
+        ADD      v3,v3,#8
+        ADD      v2,v2,#&20
+        LDR      a1,[v1,#&fc]
+        CMP      v3,a1
+        BLT      |L0022d0.J26.jpeg_find_line|
+|L002330.J27.jpeg_find_line|
+        MOV      a1,#8
+|L002334.J130.jpeg_find_line|
+        STR      a1,[sp,#8]!
+        B        |L0028a8.J30.jpeg_find_line|
+|L00233c.J15.jpeg_find_line|
+        SUB      sp,sp,#&28
+        MOV      v5,#0
+        LDR      a1,[v1,#&cc]
+        LDR      v2,[v1,#&28]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#&24]
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#&20]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        STR      a1,[sp,#&1c]
+        LDR      a1,[v1,#&d0]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#&18]
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#&14]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        STR      a1,[sp,#&10]
+        LDR      a1,[v1,#&d4]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#&c]
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#8]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        STR      a1,[sp,#4]
+        LDR      a1,[v1,#&50]
+        LDR      a2,[a1,#&c]
+        STR      a2,[sp,#0]
+        LDR      v3,[a1,#8]!
+        ADD      a2,v5,v3,LSL #3
+        LDR      a1,[v1,#&f8]
+        ADD      a4,v1,#&e8
+        ADD      a3,v1,#&ec
+        CMP      a2,a1
+        STR      a3,[sp,#&50]
+        STR      a4,[sp,#&54]
+        BGT      |L0024cc.J32.jpeg_find_line|
+        LDR      a2,[sp,#0]
+        MUL      a1,a2,v3
+        STR      a1,[sp,#&4c]
+|L002420.J31.jpeg_find_line|
+        MOV      a4,#0
+        LDR      a1,[sp,#&1c]
+        LDR      a2,[sp,#&5c]
+        LDR      a3,[sp,#&4c]
+        STMDB    sp!,{a1-a4}
+        MOV      a2,v6
+        MOV      a1,v1
+        LDR      a3,[sp,#&34]
+        LDR      a4,[sp,#&30]
+        BL       do_huff_skip_blocks
+        ADD      sp,sp,#&10
+        MOV      a4,#1
+        LDR      a2,[sp,#&10]
+        LDR      a3,[sp,#&54]
+        STMDB    sp!,{a2-a4}
+        MOV      a2,v6
+        MOV      a1,v1
+        LDR      a3,[sp,#&24]
+        LDR      a4,[sp,#&20]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        MOV      a4,#1
+        LDR      a2,[sp,#4]
+        LDR      a3,[sp,#&50]
+        STMDB    sp!,{a2-a4}
+        MOV      a2,v6
+        MOV      a1,v1
+        LDR      a3,[sp,#&18]
+        LDR      a4,[sp,#&14]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        ADD      v5,v5,v3,LSL #3
+        LDR      a1,[v1,#&100]
+        TST      a1,#&10
+        ADDNE    v2,v2,v3,LSL #4
+        BNE      |L0024bc.J36.jpeg_find_line|
+        TST      a1,#&20
+        ADDEQ    v2,v2,v3,LSL #5
+        ADDNE    v2,v2,v3,LSL #3
+|L0024bc.J36.jpeg_find_line|
+        ADD      a1,v5,v3,LSL #3
+        LDR      a2,[v1,#&f8]
+        CMP      a1,a2
+        BLE      |L002420.J31.jpeg_find_line|
+|L0024cc.J32.jpeg_find_line|
+        LDR      a1,[v1,#&100]
+        TST      a1,#2
+        ADD      a1,v1,#&318
+        ADD      a1,a1,#&400
+        STR      a1,[sp,#&48]
+        MOV      a1,#2
+        ADD      a3,v1,#&218
+        ADD      a3,a3,#&400
+        STR      a3,[sp,#&44]
+        LDR      a2,[v1,#&fc]
+        BEQ      |L0026a8.J41.jpeg_find_line|
+        CMP      v5,a2
+        BGE      |L0026a0.J44.jpeg_find_line|
+        LDR      a2,[sp,#0]
+        MUL      a1,a2,v3
+        STR      a1,[sp,#&40]
+|L00250c.J43.jpeg_find_line|
+        SUB      sp,sp,#&10
+        MOV      a4,#0
+        MOV      a3,#1
+        LDR      a1,[sp,#&2c]
+        LDR      a2,[sp,#&6c]
+        STMDB    sp!,{a1-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&78]
+        LDR      a3,[sp,#&44]
+        LDR      a4,[sp,#&40]
+        BL       do_huff_skip_blocks
+        ADD      sp,sp,#&10
+        LDR      a1,[v1,#&e4]
+        LDR      a2,[sp,#&2c]
+        LDR      a2,[a2,#0]
+        MUL      a1,a2,a1
+        MOV      v6,#1
+        STR      a1,[sp,#0]
+        LDR      a1,[sp,#&50]
+        CMP      a1,#1
+        BLE      |L0025b0.J47.jpeg_find_line|
+|L002560.J46.jpeg_find_line|
+        MOV      a4,#1
+        LDR      a2,[sp,#&2c]
+        LDR      a3,[sp,#&6c]
+        STMDB    sp!,{a2-a4}
+        ADD      a1,v1,v6,LSL #8
+        ADD      a2,a1,#&218
+        MOV      a1,v1
+        LDR      a3,[sp,#&40]
+        LDR      a4,[sp,#&3c]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        LDR      a2,[v1,#&e4]
+        LDR      a1,[sp,#&2c]
+        LDR      a1,[a1,#0]
+        MUL      a2,a1,a2
+        STR      a2,[sp,v6,LSL #2]
+        ADD      v6,v6,#1
+        LDR      a1,[sp,#&50]
+        CMP      a1,v6
+        BGT      |L002560.J46.jpeg_find_line|
+|L0025b0.J47.jpeg_find_line|
+        MOV      a4,#1
+        LDR      a2,[sp,#&20]
+        LDR      a3,[sp,#&64]
+        STMDB    sp!,{a2-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&60]
+        LDR      a3,[sp,#&34]
+        LDR      a4,[sp,#&30]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        MOV      a4,#1
+        LDR      a2,[sp,#&14]
+        LDR      a3,[sp,#&60]
+        STMDB    sp!,{a2-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&64]
+        LDR      a3,[sp,#&28]
+        LDR      a4,[sp,#&24]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        LDR      a2,[v1,#&e8]
+        LDR      a1,[sp,#&20]
+        LDR      a1,[a1,#0]
+        MUL      a2,a1,a2
+        LDR      a3,[v1,#&ec]
+        LDR      a1,[sp,#&14]
+        LDR      a1,[a1,#0]
+        MUL      a3,a1,a3
+        MOV      a1,sp
+        BL       colour_convert_pixels
+        MOV      v6,#0
+        MOV      a3,#2
+        MOV      a4,#1
+|L002634.J50.jpeg_find_line|
+        LDR      a1,[sp,#0]
+        STR      a1,[v2,v6,LSL #2]
+        TEQ      v3,#2
+        ADDEQ    a2,v2,v6,LSL #2
+        LDREQ    a1,[sp,#4]
+        STREQ    a1,[a2,#&20]!
+        LDR      a1,[sp,#&10]
+        TEQ      a1,#2
+        BNE      |L00267c.J53.jpeg_find_line|
+        CMP      v3,#2
+        MOVNE    a1,a4
+        MOVEQ    a1,a3
+        LDR      a2,[sp,a1,LSL #2]
+        ADD      a1,v4,v6
+        STR      a2,[v2,a1,LSL #2]
+        ADDEQ    a1,v2,a1,LSL #2
+        LDREQ    a2,[sp,#&c]
+        STREQ    a2,[a1,#&20]!
+|L00267c.J53.jpeg_find_line|
+        ADD      v6,v6,#1
+        CMP      v6,#8
+        BLT      |L002634.J50.jpeg_find_line|
+        ADD      v5,v5,v3,LSL #3
+        ADD      v2,v2,v3,LSL #5
+        ADD      sp,sp,#&10
+        LDR      a1,[v1,#&fc]
+        CMP      v5,a1
+        BLT      |L00250c.J43.jpeg_find_line|
+|L0026a0.J44.jpeg_find_line|
+        LDR      a1,[sp,#0]
+        B        |L0028a4.J131.jpeg_find_line|
+|L0026a8.J41.jpeg_find_line|
+        CMP      v5,a2
+        BGE      |L00289c.J64.jpeg_find_line|
+        ADD      a1,v1,#&18
+        ADD      a1,a1,#&400
+        STR      a1,[sp,#&3c]
+        LDR      a2,[sp,#0]
+        MUL      a1,a2,v3
+        STR      a1,[sp,#&38]
+|L0026c8.J63.jpeg_find_line|
+        MOV      a4,#0
+        LDR      a1,[sp,#&1c]
+        LDR      a2,[sp,#&5c]
+        LDR      a3,[sp,#&38]
+        STMDB    sp!,{a1-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&68]
+        LDR      a3,[sp,#&34]
+        LDR      a4,[sp,#&30]
+        BL       do_huff_decode_blocks
+        ADD      sp,sp,#&10
+        MOV      a4,#1
+        LDR      a2,[sp,#&10]
+        LDR      a3,[sp,#&54]
+        STMDB    sp!,{a2-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&50]
+        LDR      a3,[sp,#&24]
+        LDR      a4,[sp,#&20]
+        BL       asm_huff_decode_blocks
+        ADD      sp,sp,#&c
+        MOV      a4,#1
+        LDR      a2,[sp,#4]
+        LDR      a3,[sp,#&50]
+        STMDB    sp!,{a2-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&54]
+        LDR      a3,[sp,#&18]
+        LDR      a4,[sp,#&14]
+        BL       asm_huff_decode_blocks
+        ADD      sp,sp,#&c
+        LDR      a1,[v1,#&100]
+        TST      a1,#1
+        BEQ      |L0027d8.J66.jpeg_find_line|
+        MOV      a1,v1
+        LDR      a2,[sp,#&58]
+        LDR      a3,[sp,#&38]
+        BL       asm_j_rev_dct
+        MOV      a1,v6
+        MOV      a3,v4
+        MOV      a2,v2
+        BL       asm_mono_convert_block
+        TEQ      v3,#2
+        BNE      |L002788.J68.jpeg_find_line|
+        ADD      a2,v2,#&20
+        MOV      a3,v4
+        LDR      a1,[sp,#&58]
+        BL       asm_mono_convert_block
+|L002788.J68.jpeg_find_line|
+        LDR      a1,[sp,#0]
+        TEQ      a1,#2
+        BNE      |L002870.J77.jpeg_find_line|
+        ADD      a2,v2,v4,LSL #5
+        TEQ      v3,#1
+        STR      a2,[sp,#&34]
+        MOVNE    a1,#2
+        MOVEQ    a1,#1
+        ADD      a1,v1,a1,LSL #8
+        ADD      a1,a1,#&118
+        MOV      a3,v4
+        BL       asm_mono_convert_block
+        TEQ      v3,#2
+        BNE      |L002870.J77.jpeg_find_line|
+        LDR      a1,[sp,#&34]
+        ADD      a2,a1,#&20
+        MOV      a3,v4
+        LDR      a1,[sp,#&3c]
+        BL       asm_mono_convert_block
+        B        |L002870.J77.jpeg_find_line|
+|L0027d8.J66.jpeg_find_line|
+        LDR      a1,[sp,#&38]
+        TEQ      a1,#4
+        BNE      |L002830.J78.jpeg_find_line|
+        MOV      a1,v1
+        MOV      a3,#6
+        LDR      a2,[sp,#&58]
+        BL       asm_j_rev_dct
+        LDR      a1,[v1,#&100]
+        TST      a1,#&10
+        BEQ      |L002814.J80.jpeg_find_line|
+        MOV      a1,v6
+        MOV      a3,v4
+        MOV      a2,v2
+        BL       asm_colour_convert_block_16
+        B        |L002870.J77.jpeg_find_line|
+|L002814.J80.jpeg_find_line|
+        TST      a1,#&20
+        MOV      a1,v6
+        MOV      a3,v4
+        MOV      a2,v2
+        BLEQ     asm_colour_convert_block
+        BLNE     asm_colour_convert_block_8
+        B        |L002870.J77.jpeg_find_line|
+|L002830.J78.jpeg_find_line|
+        MOV      a1,v1
+        LDR      a2,[sp,#&58]
+        LDR      a3,[sp,#&38]
+        BL       asm_j_rev_dct
+        MOV      a1,v1
+        MOV      a3,#2
+        LDR      a2,[sp,#&44]
+        BL       asm_j_rev_dct
+        LDR      a4,[sp,#0]
+        STMDB    sp!,{a4}
+        MOV      a1,v6
+        MOV      a4,v3
+        MOV      a3,v4
+        MOV      a2,v2
+        BL       colour_convert_unusual_block
+        ADD      sp,sp,#4
+|L002870.J77.jpeg_find_line|
+        ADD      v5,v5,v3,LSL #3
+        LDR      a1,[v1,#&100]
+        TST      a1,#&10
+        ADDNE    v2,v2,v3,LSL #4
+        BNE      |L002890.J89.jpeg_find_line|
+        TST      a1,#&20
+        ADDEQ    v2,v2,v3,LSL #5
+        ADDNE    v2,v2,v3,LSL #3
+|L002890.J89.jpeg_find_line|
+        LDR      a1,[v1,#&fc]
+        CMP      v5,a1
+        BLT      |L0026c8.J63.jpeg_find_line|
+|L00289c.J64.jpeg_find_line|
+        LDR      a1,[sp,#0]
+        MOV      a1,a1,LSL #3
+|L0028a4.J131.jpeg_find_line|
+        STR      a1,[sp,#&28]!
+|L0028a8.J30.jpeg_find_line|
+        LDR      a1,[v1,#&100]
+        TST      a1,#8
+        BEQ      |L002970.J94.jpeg_find_line|
+        LDR      a1,[v1,#&20]
+        TEQ      a1,#0
+        BNE      |L0028e0.J96.jpeg_find_line|
+        LDR      a1,[v1,#&24]
+        TEQ      a1,#0
+        BNE      |L0028e0.J96.jpeg_find_line|
+        BL       asm_get_table32k
+        STR      a1,[v1,#&20]
+        TEQ      a1,#0
+        MOVEQ    a1,#1
+        STREQ    a1,[v1,#&24]
+|L0028e0.J96.jpeg_find_line|
+        LDR      a1,[v1,#&f8]
+        LDR      a4,[v1,#&28]
+        ADD      v3,a4,a1,LSL #2
+        LDR      a3,[v1,#&fc]
+        SUB      a3,a3,a1
+        ADD      v6,a4,a1
+        ADD      a3,a3,#&f
+        BIC      v2,a3,#&f
+        LDR      a3,[v1,#&14]
+        SUB      a2,a3,a1
+        CMP      a2,v2
+        MOVLT    v2,a2
+        LDR      a2,[v1,#&100]
+        TST      a2,#4
+        ADDNE    v3,v3,a1,LSL #2
+        MOVNE    v2,v2,LSL #1
+        CMP      v2,#0
+        BLE      |L002970.J94.jpeg_find_line|
+|L002928.J105.jpeg_find_line|
+        CMP      v2,#&20
+        MOVLT    v5,v2
+        MOVGE    v5,#&10
+        MOV      a3,v4
+        LDR      a4,[fp,#-&28]
+        LDR      a2,[sp,#0]
+        STMDB    sp!,{a2-a4}
+        MOV      a3,v6
+        MOV      a2,v5
+        MOV      a1,v3
+        LDR      a4,[v1,#&20]
+        BL       asm_diffuse_to_8bpp
+        ADD      sp,sp,#&c
+        ADD      v3,v3,v5,LSL #2
+        ADD      v6,v6,v5
+        SUB      v2,v2,v5
+        CMP      v2,#0
+        BGT      |L002928.J105.jpeg_find_line|
+|L002970.J94.jpeg_find_line|
+        LDR      a1,[sp,#8]
+        ADD      sp,sp,#4
+        STR      a1,[v1,#&f4]
+|L00297c.J10.jpeg_find_line|
+        LDR      a1,[v1,#&28]!
+        LDR      a2,[v1,#&d8]!
+        TST      a2,#2
+        LDR      a2,[sp,#0]
+        BEQ      |L0029ac.J112.jpeg_find_line|
+        TEQ      a2,#4
+        BNE      |L0029c8.J132.jpeg_find_line|
+        LDR      a2,[fp,#-&2c]
+        AND      a2,a2,#&f
+        CMP      a2,#8
+        ADDGE    a1,a1,v4,LSL #2
+        B        |L0029c8.J132.jpeg_find_line|
+|L0029ac.J112.jpeg_find_line|
+        MOV      a3,#1
+        MOV      a2,a3,LSL a2
+        SUB      a2,a2,#1
+        LDR      a3,[fp,#-&2c]
+        AND      a2,a2,a3
+        MUL      a2,v4,a2
+        ADD      a1,a1,a2,LSL #2
+|L0029c8.J132.jpeg_find_line|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+looks_like_jpeg
+        LDR      a2,[a1,#0]
+        ADD      ip,a2,#&1f000000
+        ADD      ip,ip,#&2700
+        CMN      ip,#1
+        BNE      |L002a10.J5.looks_like_jpeg|
+        LDRB     a2,[a1,#6]
+        TEQ      a2,#&4a
+        LDREQB   a2,[a1,#7]
+        TEQEQ    a2,#&46
+        LDREQB   a2,[a1,#8]
+        TEQEQ    a2,#&49
+        LDREQB   a2,[a1,#9]
+        TEQEQ    a2,#&46
+        LDREQB   a1,[a1,#&a]
+        TEQEQ    a1,#0
+        MOVEQ    a1,#1
+        MOVEQS   pc,lr
+|L002a10.J5.looks_like_jpeg|
+        MOV      a1,#0
+        MOVS     pc,lr
+
+find_image_dims
+        MOV      ip,sp
+        STMDB    sp!,{v1-v4,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      v2,a2
+        MOV      v4,#0
+        LDR      v3,[fp,#4]
+        AND      a2,v3,#3
+        BL       looks_like_jpeg
+        TEQ      a1,#0
+        ADDNE    v1,v1,#2
+        BNE      |L002a60.J9.find_image_dims|
+        B        |L002ae8.J15.find_image_dims|
+|L002a4c.J8.find_image_dims|
+        LDRB     a2,[v1,#3]
+        LDRB     a1,[v1,#2]
+        ADD      a1,a2,a1,LSL #8
+        ADD      a1,a1,v1
+        ADD      v1,a1,#2
+|L002a60.J9.find_image_dims|
+        LDRB     a1,[v1,#0]
+        TEQ      a1,#&ff
+        LDRB     a1,[v1,#1]
+        BNE      |L002a84.J10.find_image_dims|
+        TEQ      a1,#&c0
+        TEQNE    a1,#&c1
+        TEQNE    a1,#&c9
+        BNE      |L002a4c.J8.find_image_dims|
+        B        |L002a94.J16.find_image_dims|
+|L002a84.J10.find_image_dims|
+        TEQ      a1,#&c0
+        TEQNE    a1,#&c1
+        TEQNE    a1,#&c9
+        BNE      |L002ae8.J15.find_image_dims|
+|L002a94.J16.find_image_dims|
+        LDRB     a1,[v1,#6]
+        LDRB     a2,[v1,#5]
+        ADD      a1,a1,a2,LSL #8
+        LDRB     a2,[v1,#8]
+        LDRB     ip,[v1,#7]
+        ADD      a2,a2,ip,LSL #8
+        LDRB     ip,[v1,#9]
+        ORR      lr,ip,v4
+        CMP      v3,#1
+        BLE      |L002b0c.J21.find_image_dims|
+        CMP      lr,#1
+        MOVNE    ip,#&10
+        MOVEQ    ip,#8
+        ADD      v1,a2,#&f
+        MUL      ip,v1,ip
+        MOV      v4,ip,LSL #2
+        BNE      |L002af0.J27.find_image_dims|
+        ADDS     v1,a1,#7
+        ADDMI    v1,v1,#7
+        MOV      v1,v1,ASR #3
+        B        |L002af4.J26.find_image_dims|
+|L002ae8.J15.find_image_dims|
+        MOV      a1,#1
+        LDMDB    fp,{v1-v4,fp,sp,pc}^
+|L002af0.J27.find_image_dims|
+        MOV      v1,a1
+|L002af4.J26.find_image_dims|
+        ADD      ip,v1,v1,LSL #2
+        ADD      ip,v4,ip,LSL #2
+        ADD      ip,ip,#&ff
+        ADD      ip,ip,#&3d00
+        BIC      ip,ip,#3
+        STR      ip,[v3,#0]
+|L002b0c.J21.find_image_dims|
+        TEQ      a3,#0
+        STRNE    a1,[a3,#0]
+        TEQ      v2,#0
+        STRNE    a2,[v2,#0]
+        TEQ      a4,#0
+        STRNE    lr,[a4,#0]
+        MOV      a1,#0
+        LDMDB    fp,{v1-v4,fp,sp,pc}^
+
+        AREA |C$$data|,DATA
+
+|x$dataseg|
+
+        END
diff --git a/s/stdpalette b/s/stdpalette
new file mode 100644
index 0000000000000000000000000000000000000000..89015e2f50715994b3ef0f427c052ad0056abb68
--- /dev/null
+++ b/s/stdpalette
@@ -0,0 +1,276 @@
+; Copyright 1996 Acorn Computers Ltd
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+; s.genpalette, generated by c.genpalette
+; The table consists of 256 16bit entries, containing the true RGB values
+; of the 256 pixel values of the standard 8bpp palette.
+; The 8bpp pixels are bggrbrtt, the words are 0BGR
+        DCB     0,0,0,0
+        DCB     17,17,17,0
+        DCB     34,34,34,0
+        DCB     51,51,51,0
+        DCB     68,0,0,0
+        DCB     85,17,17,0
+        DCB     102,34,34,0
+        DCB     119,51,51,0
+        DCB     0,0,68,0
+        DCB     17,17,85,0
+        DCB     34,34,102,0
+        DCB     51,51,119,0
+        DCB     68,0,68,0
+        DCB     85,17,85,0
+        DCB     102,34,102,0
+        DCB     119,51,119,0
+        DCB     136,0,0,0
+        DCB     153,17,17,0
+        DCB     170,34,34,0
+        DCB     187,51,51,0
+        DCB     204,0,0,0
+        DCB     221,17,17,0
+        DCB     238,34,34,0
+        DCB     255,51,51,0
+        DCB     136,0,68,0
+        DCB     153,17,85,0
+        DCB     170,34,102,0
+        DCB     187,51,119,0
+        DCB     204,0,68,0
+        DCB     221,17,85,0
+        DCB     238,34,102,0
+        DCB     255,51,119,0
+        DCB     0,68,0,0
+        DCB     17,85,17,0
+        DCB     34,102,34,0
+        DCB     51,119,51,0
+        DCB     68,68,0,0
+        DCB     85,85,17,0
+        DCB     102,102,34,0
+        DCB     119,119,51,0
+        DCB     0,68,68,0
+        DCB     17,85,85,0
+        DCB     34,102,102,0
+        DCB     51,119,119,0
+        DCB     68,68,68,0
+        DCB     85,85,85,0
+        DCB     102,102,102,0
+        DCB     119,119,119,0
+        DCB     136,68,0,0
+        DCB     153,85,17,0
+        DCB     170,102,34,0
+        DCB     187,119,51,0
+        DCB     204,68,0,0
+        DCB     221,85,17,0
+        DCB     238,102,34,0
+        DCB     255,119,51,0
+        DCB     136,68,68,0
+        DCB     153,85,85,0
+        DCB     170,102,102,0
+        DCB     187,119,119,0
+        DCB     204,68,68,0
+        DCB     221,85,85,0
+        DCB     238,102,102,0
+        DCB     255,119,119,0
+        DCB     0,136,0,0
+        DCB     17,153,17,0
+        DCB     34,170,34,0
+        DCB     51,187,51,0
+        DCB     68,136,0,0
+        DCB     85,153,17,0
+        DCB     102,170,34,0
+        DCB     119,187,51,0
+        DCB     0,136,68,0
+        DCB     17,153,85,0
+        DCB     34,170,102,0
+        DCB     51,187,119,0
+        DCB     68,136,68,0
+        DCB     85,153,85,0
+        DCB     102,170,102,0
+        DCB     119,187,119,0
+        DCB     136,136,0,0
+        DCB     153,153,17,0
+        DCB     170,170,34,0
+        DCB     187,187,51,0
+        DCB     204,136,0,0
+        DCB     221,153,17,0
+        DCB     238,170,34,0
+        DCB     255,187,51,0
+        DCB     136,136,68,0
+        DCB     153,153,85,0
+        DCB     170,170,102,0
+        DCB     187,187,119,0
+        DCB     204,136,68,0
+        DCB     221,153,85,0
+        DCB     238,170,102,0
+        DCB     255,187,119,0
+        DCB     0,204,0,0
+        DCB     17,221,17,0
+        DCB     34,238,34,0
+        DCB     51,255,51,0
+        DCB     68,204,0,0
+        DCB     85,221,17,0
+        DCB     102,238,34,0
+        DCB     119,255,51,0
+        DCB     0,204,68,0
+        DCB     17,221,85,0
+        DCB     34,238,102,0
+        DCB     51,255,119,0
+        DCB     68,204,68,0
+        DCB     85,221,85,0
+        DCB     102,238,102,0
+        DCB     119,255,119,0
+        DCB     136,204,0,0
+        DCB     153,221,17,0
+        DCB     170,238,34,0
+        DCB     187,255,51,0
+        DCB     204,204,0,0
+        DCB     221,221,17,0
+        DCB     238,238,34,0
+        DCB     255,255,51,0
+        DCB     136,204,68,0
+        DCB     153,221,85,0
+        DCB     170,238,102,0
+        DCB     187,255,119,0
+        DCB     204,204,68,0
+        DCB     221,221,85,0
+        DCB     238,238,102,0
+        DCB     255,255,119,0
+        DCB     0,0,136,0
+        DCB     17,17,153,0
+        DCB     34,34,170,0
+        DCB     51,51,187,0
+        DCB     68,0,136,0
+        DCB     85,17,153,0
+        DCB     102,34,170,0
+        DCB     119,51,187,0
+        DCB     0,0,204,0
+        DCB     17,17,221,0
+        DCB     34,34,238,0
+        DCB     51,51,255,0
+        DCB     68,0,204,0
+        DCB     85,17,221,0
+        DCB     102,34,238,0
+        DCB     119,51,255,0
+        DCB     136,0,136,0
+        DCB     153,17,153,0
+        DCB     170,34,170,0
+        DCB     187,51,187,0
+        DCB     204,0,136,0
+        DCB     221,17,153,0
+        DCB     238,34,170,0
+        DCB     255,51,187,0
+        DCB     136,0,204,0
+        DCB     153,17,221,0
+        DCB     170,34,238,0
+        DCB     187,51,255,0
+        DCB     204,0,204,0
+        DCB     221,17,221,0
+        DCB     238,34,238,0
+        DCB     255,51,255,0
+        DCB     0,68,136,0
+        DCB     17,85,153,0
+        DCB     34,102,170,0
+        DCB     51,119,187,0
+        DCB     68,68,136,0
+        DCB     85,85,153,0
+        DCB     102,102,170,0
+        DCB     119,119,187,0
+        DCB     0,68,204,0
+        DCB     17,85,221,0
+        DCB     34,102,238,0
+        DCB     51,119,255,0
+        DCB     68,68,204,0
+        DCB     85,85,221,0
+        DCB     102,102,238,0
+        DCB     119,119,255,0
+        DCB     136,68,136,0
+        DCB     153,85,153,0
+        DCB     170,102,170,0
+        DCB     187,119,187,0
+        DCB     204,68,136,0
+        DCB     221,85,153,0
+        DCB     238,102,170,0
+        DCB     255,119,187,0
+        DCB     136,68,204,0
+        DCB     153,85,221,0
+        DCB     170,102,238,0
+        DCB     187,119,255,0
+        DCB     204,68,204,0
+        DCB     221,85,221,0
+        DCB     238,102,238,0
+        DCB     255,119,255,0
+        DCB     0,136,136,0
+        DCB     17,153,153,0
+        DCB     34,170,170,0
+        DCB     51,187,187,0
+        DCB     68,136,136,0
+        DCB     85,153,153,0
+        DCB     102,170,170,0
+        DCB     119,187,187,0
+        DCB     0,136,204,0
+        DCB     17,153,221,0
+        DCB     34,170,238,0
+        DCB     51,187,255,0
+        DCB     68,136,204,0
+        DCB     85,153,221,0
+        DCB     102,170,238,0
+        DCB     119,187,255,0
+        DCB     136,136,136,0
+        DCB     153,153,153,0
+        DCB     170,170,170,0
+        DCB     187,187,187,0
+        DCB     204,136,136,0
+        DCB     221,153,153,0
+        DCB     238,170,170,0
+        DCB     255,187,187,0
+        DCB     136,136,204,0
+        DCB     153,153,221,0
+        DCB     170,170,238,0
+        DCB     187,187,255,0
+        DCB     204,136,204,0
+        DCB     221,153,221,0
+        DCB     238,170,238,0
+        DCB     255,187,255,0
+        DCB     0,204,136,0
+        DCB     17,221,153,0
+        DCB     34,238,170,0
+        DCB     51,255,187,0
+        DCB     68,204,136,0
+        DCB     85,221,153,0
+        DCB     102,238,170,0
+        DCB     119,255,187,0
+        DCB     0,204,204,0
+        DCB     17,221,221,0
+        DCB     34,238,238,0
+        DCB     51,255,255,0
+        DCB     68,204,204,0
+        DCB     85,221,221,0
+        DCB     102,238,238,0
+        DCB     119,255,255,0
+        DCB     136,204,136,0
+        DCB     153,221,153,0
+        DCB     170,238,170,0
+        DCB     187,255,187,0
+        DCB     204,204,136,0
+        DCB     221,221,153,0
+        DCB     238,238,170,0
+        DCB     255,255,187,0
+        DCB     136,204,204,0
+        DCB     153,221,221,0
+        DCB     170,238,238,0
+        DCB     187,255,255,0
+        DCB     204,204,204,0
+        DCB     221,221,221,0
+        DCB     238,238,238,0
+        DCB     255,255,255,0
+        ALIGN
+        END
diff --git a/s/temp b/s/temp
new file mode 100644
index 0000000000000000000000000000000000000000..7ac51e425a098b0bc8ea85b1ecb8346cd41583db
--- /dev/null
+++ b/s/temp
@@ -0,0 +1,10535 @@
+; Copyright 1996 Acorn Computers Ltd
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+; generated by Norcroft RISC OS ARM C vsn 5.05 (Acorn Computers Ltd) [Dec 23 1994]
+
+        AREA |C$$code|, CODE, READONLY
+|x$codeseg|
+
+        EXPORT  memcpy
+memcpy
+        MOV      a4,a1
+        MOV      ip,a3
+        SUB      a3,a3,#1
+        CMP      ip,#0
+        MOVLSS   pc,lr
+|L000014.J4.memcpy|
+        LDRB     ip,[a2],#1
+        STRB     ip,[a4],#1
+        MOV      ip,a3
+        SUB      a3,a3,#1
+        CMP      ip,#0
+        BHI      |L000014.J4.memcpy|
+        MOVS     pc,lr
+
+        EXPORT  strcpy
+strcpy
+        MOV      a3,a1
+        LDRB     a4,[a2,#0]
+        CMP      a4,#&1f
+        MOVLES   pc,lr
+|L000040.J4.strcpy|
+        LDRB     a4,[a2],#1
+        STRB     a4,[a3],#1
+        LDRB     a4,[a2,#0]
+        CMP      a4,#&1f
+        BGT      |L000040.J4.strcpy|
+        MOVS     pc,lr
+
+        EXPORT  memset
+memset
+        MOV      a4,a1
+        MOV      ip,a3
+        SUB      a3,a3,#1
+        CMP      ip,#0
+        MOVLSS   pc,lr
+        AND      a2,a2,#&ff
+|L000070.J4.memset|
+        STRB     a2,[a4],#1
+        MOV      ip,a3
+        SUB      a3,a3,#1
+        CMP      ip,#0
+        BHI      |L000070.J4.memset|
+        MOVS     pc,lr
+
+        IMPORT  exit
+        EXPORT  panic_exit
+panic_exit
+        B        exit
+
+get_2bytes
+        MOV      a4,#&ff
+        LDR      a2,[a1,#&38]
+        LDR      a3,[a1,#&34]
+        CMP      a3,a2
+        LDRCCB   a2,[a3],#1
+        STRCC    a3,[a1,#&34]
+        MOVCS    a2,a4
+        MOV      a3,a2
+        ADD      ip,a1,#&34
+        LDMIA    ip,{a2,ip}
+        CMP      a2,ip
+        LDRCCB   a4,[a2],#1
+        STRCC    a2,[a1,#&34]!
+        ADD      a1,a4,a3,LSL #8
+        MOVS     pc,lr
+
+skip_variable
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       get_2bytes
+        SUB      a1,a1,#2
+        CMP      a1,#0
+        LDMLEDB  fp,{v1,fp,sp,pc}^
+        LDR      a2,[v1,#&38]
+|L0000ec.J4.skip_variable|
+        LDR      a3,[v1,#&34]
+        CMP      a3,a2
+        ADDCC    a3,a3,#1
+        STRCC    a3,[v1,#&34]
+        SUB      a1,a1,#1
+        CMP      a1,#0
+        BGT      |L0000ec.J4.skip_variable|
+        LDMDB    fp,{v1,fp,sp,pc}^
+
+get_dht
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        SUB      sp,sp,#&114
+        BL       get_2bytes
+        SUB      v4,a1,#2
+        CMP      v4,#0
+        BLE      |L000250.J37.get_dht|
+        MOV      v6,#0
+        MOV      v5,#&ff
+|L000138.J4.get_dht|
+        ADD      a2,v1,#&34
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        LDRCCB   a2,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a2,v5
+        MOV      v2,a2
+        STRB     v6,[sp,#&100]
+        MOV      v3,#0
+        MOV      a1,#1
+|L000160.J10.get_dht|
+        ADD      a3,v1,#&34
+        LDMIA    a3,{a2,a3}
+        CMP      a2,a3
+        MOVCS    a2,v5
+        BCS      |L000180.J11.get_dht|
+        LDRB     a3,[a2],#1
+        STR      a2,[v1,#&34]
+        MOV      a2,a3
+|L000180.J11.get_dht|
+        ADD      a3,sp,#&100
+        STRB     a2,[a3,a1]
+        ADD      a2,sp,#&100
+        LDRB     a2,[a2,a1]
+        ADD      v3,a2,v3
+        ADD      a1,a1,#1
+        CMP      a1,#&10
+        BLE      |L000160.J10.get_dht|
+        CMP      v3,#&100
+        MOVGT    a1,#&b9
+        ADDGT    a1,a1,#&4e00
+        BLGT     exit
+        MOV      a1,#0
+        CMP      v3,#0
+        BLE      |L0001ec.J18.get_dht|
+|L0001bc.J17.get_dht|
+        ADD      a3,v1,#&34
+        LDMIA    a3,{a2,a3}
+        CMP      a2,a3
+        MOVCS    a2,v5
+        BCS      |L0001dc.J20.get_dht|
+        LDRB     a3,[a2],#1
+        STR      a2,[v1,#&34]
+        MOV      a2,a3
+|L0001dc.J20.get_dht|
+        STRB     a2,[sp,a1]
+        ADD      a1,a1,#1
+        CMP      a1,v3
+        BLT      |L0001bc.J17.get_dht|
+|L0001ec.J18.get_dht|
+        ADD      a1,v3,#&11
+        SUB      v4,v4,a1
+        TST      v2,#&10
+        SUBNE    v2,v2,#&10
+        ADD      a1,v1,v2,LSL #2
+        ADDEQ    v3,a1,#&64
+        ADDNE    v3,a1,#&74
+        CMP      v2,#0
+        BLT      |L000218.J28.get_dht|
+        CMP      v2,#4
+        BLT      |L000224.J27.get_dht|
+|L000218.J28.get_dht|
+        MOV      a1,#&2c8
+        ADD      a1,a1,#&4c00
+        BL       exit
+|L000224.J27.get_dht|
+        ADD      a2,sp,#&100
+        MOV      a3,#&11
+        LDR      a1,[v3,#0]
+        BL       memcpy
+        LDR      a1,[v3,#0]
+        ADD      a1,a1,#&11
+        MOV      a2,sp
+        MOV      a3,#&100
+        BL       memcpy
+        CMP      v4,#0
+        BGT      |L000138.J4.get_dht|
+|L000250.J37.get_dht|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+get_dac
+        MOV      ip,sp
+        STMDB    sp!,{v1-v5,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       get_2bytes
+        SUB      v4,a1,#2
+        CMP      v4,#0
+        LDMLEDB  fp,{v1-v5,fp,sp,pc}^
+        MOV      v5,#&ff
+|L000278.J4.get_dac|
+        ADD      a2,v1,#&34
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        LDRCCB   a3,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a3,v5
+        MOV      v2,a3
+        LDR      a1,[v1,#&34]
+        CMP      a1,a2
+        LDRCCB   a2,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a2,v5
+        MOV      v3,a2
+        CMP      v2,#0
+        BLT      |L0002bc.J14.get_dac|
+        CMP      v2,#&20
+        BLT      |L0002c8.J13.get_dac|
+|L0002bc.J14.get_dac|
+        MOV      a1,#&2e8
+        ADD      a1,a1,#&4c00
+        BL       exit
+|L0002c8.J13.get_dac|
+        CMP      v2,#&10
+        MOVGE    a1,v3
+        ADDGE    a2,v1,v2
+        STRGEB   a1,[a2,#&94]
+        BGE      |L000304.J19.get_dac|
+        AND      a1,v3,#&f
+        ADD      a2,v1,v2
+        STRB     a1,[a2,#&84]
+        MOV      a3,v3,ASR #4
+        AND      a3,a3,#&ff
+        STRB     a3,[a2,#&94]
+        CMP      a1,a3
+        MOVGT    a1,#&ef0
+        ADDGT    a1,a1,#&4000
+        BLGT     exit
+|L000304.J19.get_dac|
+        SUB      v4,v4,#2
+        CMP      v4,#0
+        BGT      |L000278.J4.get_dac|
+        LDMDB    fp,{v1-v5,fp,sp,pc}^
+
+get_dqt
+        MOV      ip,sp
+        STMDB    sp!,{v1-v5,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       get_2bytes
+        SUB      v2,a1,#2
+        CMP      v2,#0
+        LDMLEDB  fp,{v1-v5,fp,sp,pc}^
+        MOV      v4,#&ff
+|L000338.J4.get_dqt|
+        ADD      a2,v1,#&34
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        MOVCS    a1,v4
+        BCS      |L000358.J7.get_dqt|
+        LDRB     a2,[a1],#1
+        STR      a1,[v1,#&34]
+        MOV      a1,a2
+|L000358.J7.get_dqt|
+        MOV      v3,a1,ASR #4
+        AND      v5,a1,#&f
+        CMP      v5,#4
+        MOVGE    a1,#&30c
+        ADDGE    a1,a1,#&4c00
+        BLGE     exit
+        ADD      a1,v1,v5,LSL #2
+        LDR      a4,[a1,#&54]!
+        MOV      a1,#0
+|L00037c.J12.get_dqt|
+        ADD      ip,v1,#&34
+        LDMIA    ip,{a3,ip}
+        CMP      a3,ip
+        LDRCCB   a2,[a3],#1
+        STRCC    a3,[v1,#&34]
+        MOVCS    a2,v4
+        MOV      a2,a2,LSL #16
+        MOV      a2,a2,LSR #16
+        TEQ      v3,#0
+        BEQ      |L0003c4.J16.get_dqt|
+        LDR      a3,[v1,#&34]
+        CMP      a3,ip
+        LDRCCB   ip,[a3],#1
+        STRCC    a3,[v1,#&34]
+        MOVCS    ip,v4
+        ADD      a2,ip,a2,LSL #8
+        MOV      a2,a2,LSL #16
+        MOV      a2,a2,LSR #16
+|L0003c4.J16.get_dqt|
+        STR      a2,[a4,a1,LSL #2]
+        ADD      a1,a1,#1
+        CMP      a1,#&40
+        BLT      |L00037c.J12.get_dqt|
+        MOV      a1,#0
+|L0003d8.J22.get_dqt|
+        ADD      a1,a1,#8
+        CMP      a1,#&40
+        BLT      |L0003d8.J22.get_dqt|
+        SUB      v2,v2,#&41
+        TEQ      v3,#0
+        SUBNE    v2,v2,#&40
+        CMP      v2,#0
+        BGT      |L000338.J4.get_dqt|
+        LDMDB    fp,{v1-v5,fp,sp,pc}^
+
+get_dri
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       get_2bytes
+        TEQ      a1,#4
+        MOVNE    a1,#&2d
+        ADDNE    a1,a1,#&4f00
+        BLNE     exit
+        MOV      a1,v1
+        BL       get_2bytes
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,LSR #16
+        STR      a1,[v1,#&bc]!
+        LDMDB    fp,{v1,fp,sp,pc}^
+
+get_app0
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        SUB      sp,sp,#&10
+        BL       get_2bytes
+        SUB      v2,a1,#2
+        CMP      v2,#&e
+        BLT      |L000508.J25.get_app0|
+        MOV      a1,#0
+        MOV      a2,#&ff
+|L000464.J6.get_app0|
+        LDR      a3,[v1,#&38]
+        LDR      a4,[v1,#&34]
+        CMP      a4,a3
+        LDRCCB   a3,[a4],#1
+        STRCC    a4,[v1,#&34]
+        MOVCS    a3,a2
+        STRB     a3,[sp,a1]
+        ADD      a1,a1,#1
+        CMP      a1,#&e
+        BLT      |L000464.J6.get_app0|
+        SUB      v2,v2,#&e
+        LDRB     a1,[sp,#0]
+        TEQ      a1,#&4a
+        LDREQB   a1,[sp,#1]
+        TEQEQ    a1,#&46
+        LDREQB   a1,[sp,#2]
+        TEQEQ    a1,#&49
+        LDREQB   a1,[sp,#3]
+        TEQEQ    a1,#&46
+        LDREQB   a1,[sp,#4]
+        TEQEQ    a1,#0
+        BNE      |L000508.J25.get_app0|
+        LDRB     a1,[sp,#5]
+        TEQ      a1,#1
+        MOVNE    a1,#&4d
+        ADDNE    a1,a1,#&4f00
+        BLNE     exit
+        LDRB     a1,[sp,#7]
+        STR      a1,[v1,#&40]
+        LDRB     a1,[sp,#9]
+        LDRB     a2,[sp,#8]
+        ADD      a1,a1,a2,LSL #8
+        STR      a1,[v1,#&44]
+        LDRB     a2,[sp,#&b]
+        LDRB     a1,[sp,#&a]
+        ADD      a1,a2,a1,LSL #8
+        STR      a1,[v1,#&48]
+        LDR      a1,[v1,#&1c]
+        TEQ      a1,#0
+        MOVEQ    a1,#3
+        STREQ    a1,[v1,#&1c]
+|L000508.J25.get_app0|
+        MOV      a1,v2
+        SUB      v2,v2,#1
+        CMP      a1,#0
+        BLE      |L00053c.J37.get_app0|
+        LDR      a2,[v1,#&38]
+|L00051c.J26.get_app0|
+        LDR      a1,[v1,#&34]
+        CMP      a1,a2
+        ADDCC    a1,a1,#1
+        STRCC    a1,[v1,#&34]
+        MOV      a1,v2
+        SUB      v2,v2,#1
+        CMP      a1,#0
+        BGT      |L00051c.J26.get_app0|
+|L00053c.J37.get_app0|
+        LDMDB    fp,{v1,v2,fp,sp,pc}^
+
+get_sof
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       get_2bytes
+        MOV      v3,a1
+        MOV      v2,#&ff
+        ADD      a2,v1,#&34
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        LDRCCB   a2,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a2,v2
+        STR      a2,[v1,#&3c]
+        MOV      a1,v1
+        BL       get_2bytes
+        STR      a1,[v1,#&18]
+        MOV      a1,v1
+        BL       get_2bytes
+        STR      a1,[v1,#&14]
+        MOV      a2,a1
+        ADD      a3,v1,#&34
+        LDMIA    a3,{a1,a3}
+        CMP      a1,a3
+        MOVCS    a1,v2
+        BCS      |L0005b4.J7.get_sof|
+        LDRB     a3,[a1],#1
+        STR      a1,[v1,#&34]
+        MOV      a1,a3
+|L0005b4.J7.get_sof|
+        STR      a1,[v1,#&4c]
+        LDR      a3,[v1,#&18]
+        CMP      a3,#0
+        CMPGT    a2,#0
+        CMPGT    a1,#0
+        MOVLE    a1,#&82
+        ADDLE    a1,a1,#&4f00
+        BLLE     exit
+        LDR      a1,[v1,#&3c]
+        TEQ      a1,#8
+        MOVNE    a1,#&86
+        ADDNE    a1,a1,#&4f00
+        BLNE     exit
+        LDR      a1,[v1,#&4c]
+        ADD      a1,a1,a1,LSL #1
+        ADD      a1,a1,#8
+        TEQ      a1,v3
+        MOVNE    a1,#&92
+        ADDNE    a1,a1,#&4f00
+        BLNE     exit
+        LDR      a1,[v1,#&4c]
+        CMP      a1,#3
+        MOVGT    a1,#&96
+        ADDGT    a1,a1,#&4f00
+        BLGT     exit
+        MOV      a1,#0
+        LDR      a2,[v1,#&4c]
+        CMP      a2,#0
+        LDMLEDB  fp,{v1-v3,fp,sp,pc}^
+        MOV      a2,#&f
+|L00062c.J21.get_sof|
+        RSB      a4,a1,a1,LSL #3
+        LDR      a3,[v1,#&50]
+        ADD      a3,a3,a4,LSL #3
+        STR      a1,[a3,#4]
+        ADD      ip,v1,#&34
+        LDMIA    ip,{a4,ip}
+        CMP      a4,ip
+        LDRCCB   ip,[a4],#1
+        STRCC    a4,[v1,#&34]
+        MOVCS    ip,v2
+        STR      ip,[a3,#0]
+        ADD      ip,v1,#&34
+        LDMIA    ip,{a4,ip}
+        CMP      a4,ip
+        MOVCS    a4,v2
+        BCS      |L00067c.J27.get_sof|
+        MOV      ip,a4
+        LDRB     a4,[a4,#0]
+        ADD      ip,ip,#1
+        STR      ip,[v1,#&34]
+|L00067c.J27.get_sof|
+        AND      ip,a2,a4,ASR #4
+        AND      a4,a4,#&f
+        STR      a4,[a3,#&c]
+        STR      ip,[a3,#8]
+        ADD      ip,v1,#&34
+        LDMIA    ip,{a4,ip}
+        CMP      a4,ip
+        LDRCCB   ip,[a4],#1
+        STRCC    a4,[v1,#&34]
+        MOVCS    ip,v2
+        ADD      a1,a1,#1
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        STR      ip,[a3,#&10]!
+        LDR      a3,[v1,#&4c]
+        CMP      a1,a3
+        BLT      |L00062c.J21.get_sof|
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+
+get_sos
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       get_2bytes
+        MOV      v4,#&ff
+        ADD      a3,v1,#&34
+        LDMIA    a3,{a2,a3}
+        CMP      a2,a3
+        LDRCCB   a3,[a2],#1
+        STRCC    a2,[v1,#&34]
+        MOVCS    a3,v4
+        MOV      v3,a3
+        SUB      v2,a1,#3
+        MOV      a1,#3
+        STR      a3,[v1,#&c8]
+        ADD      a1,a1,a3,LSL #1
+        TEQ      a1,v2
+        BNE      |L000720.J8.get_sos|
+        CMP      v3,#1
+        BLT      |L000720.J8.get_sos|
+        CMP      v3,#4
+        BLE      |L00072c.J7.get_sos|
+|L000720.J8.get_sos|
+        MOV      a1,#&3bc
+        ADD      a1,a1,#&4c00
+        BL       exit
+|L00072c.J7.get_sos|
+        MOV      v5,#0
+        CMP      v3,#0
+        BLE      |L0007e4.J13.get_sos|
+|L000738.J12.get_sos|
+        ADD      a2,v1,#&34
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        LDRCCB   a3,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a3,#&ff
+        LDR      a1,[v1,#&34]
+        CMP      a1,a2
+        LDRCCB   a2,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a2,#&ff
+        MOV      v6,a2
+        SUB      v2,v2,#2
+        MOV      v4,#0
+        LDR      a1,[v1,#&4c]
+        CMP      a1,#0
+        BLE      |L0007a0.J22.get_sos|
+        LDR      a2,[v1,#&50]
+|L000780.J21.get_sos|
+        RSB      a4,v4,v4,LSL #3
+        ADD      a4,a2,a4,LSL #3
+        LDR      a4,[a4,#0]
+        TEQ      a4,a3
+        BEQ      |L0007a0.J22.get_sos|
+        ADD      v4,v4,#1
+        CMP      v4,a1
+        BLT      |L000780.J21.get_sos|
+|L0007a0.J22.get_sos|
+        CMP      v4,a1
+        MOVGE    a1,#&ca
+        ADDGE    a1,a1,#&4f00
+        BLGE     exit
+        RSB      a1,v4,v4,LSL #3
+        LDR      a2,[v1,#&50]
+        ADD      a1,a2,a1,LSL #3
+        ADD      a2,v1,v5,LSL #2
+        STR      a1,[a2,#&cc]!
+        MOV      a2,#&f
+        AND      a2,a2,v6,ASR #4
+        STR      a2,[a1,#&14]
+        AND      a2,v6,#&f
+        ADD      v5,v5,#1
+        CMP      v5,v3
+        STR      a2,[a1,#&18]!
+        BLT      |L000738.J12.get_sos|
+|L0007e4.J13.get_sos|
+        CMP      v2,#0
+        LDMLEDB  fp,{v1-v6,fp,sp,pc}^
+        LDR      a1,[v1,#&38]
+|L0007f0.J30.get_sos|
+        LDR      a2,[v1,#&34]
+        CMP      a2,a1
+        ADDCC    a2,a2,#1
+        STRCC    a2,[v1,#&34]
+        SUB      v2,v2,#1
+        CMP      v2,#0
+        BGT      |L0007f0.J30.get_sos|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+get_soi
+        STMDB    sp!,{lr}
+        MOV      a2,#0
+        MOV      ip,#0
+        MOV      a4,#1
+        MOV      lr,#5
+|L000824.J4.get_soi|
+        ADD      a3,a1,a2
+        STRB     ip,[a3,#&84]
+        STRB     a4,[a3,#&94]
+        STRB     lr,[a3,#&a4]
+        ADD      a2,a2,#1
+        CMP      a2,#&10
+        BLT      |L000824.J4.get_soi|
+        STR      ip,[a1,#&bc]
+        STR      a4,[a1,#&44]
+        STR      ip,[a1,#&40]
+        STR      a4,[a1,#&48]!
+        STR      ip,[a1,#&70]!
+        LDMIA    sp!,{pc}^
+
+next_marker
+        MOV      a3,#&ff
+        LDR      a2,[a1,#&38]
+|L000860.J5.next_marker|
+        LDR      ip,[a1,#&34]
+        CMP      ip,a2
+        LDRCCB   a4,[ip],#1
+        STRCC    ip,[a1,#&34]
+        MOVCS    a4,a3
+        TEQ      a4,#&ff
+        BNE      |L000860.J5.next_marker|
+|L00087c.J10.next_marker|
+        LDR      ip,[a1,#&34]
+        CMP      ip,a2
+        LDRCCB   a4,[ip],#1
+        STRCC    ip,[a1,#&34]
+        MOVCS    a4,a3
+        TEQ      a4,#&ff
+        BEQ      |L00087c.J10.next_marker|
+        TEQ      a4,#0
+        BEQ      |L000860.J5.next_marker|
+        MOV      a1,a4
+        MOVS     pc,lr
+
+process_tables
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+|L0008b8.J4.process_tables|
+        MOV      a1,v1
+        BL       next_marker
+        MOV      a2,a1
+        CMP      a1,#&ce
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        BGT      |L000950.J39.process_tables|
+        CMP      a1,#&c6
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        BGT      |L000924.J42.process_tables|
+        CMP      a1,#&c2
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        BGT      |L000900.J45.process_tables|
+        TEQ      a1,#1
+        BEQ      |L0008b8.J4.process_tables|
+        TEQ      a1,#&c0
+        TEQNE    a1,#&c1
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        B        |L0009d4.J7.process_tables|
+|L000900.J45.process_tables|
+        TEQ      a1,#&c3
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        TEQ      a1,#&c4
+        MOVEQ    a1,v1
+        BLEQ     get_dht
+        BEQ      |L0008b8.J4.process_tables|
+        TEQ      a1,#&c5
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        B        |L0009d4.J7.process_tables|
+|L000924.J42.process_tables|
+        SUB      a3,a1,#&c7
+        CMP      a3,#6
+        ADDLS    pc,pc,a3,LSL #2
+        B        |L0009d4.J7.process_tables|
+        LDMDB    fp,{v1,fp,sp,pc}^
+        LDMDB    fp,{v1,fp,sp,pc}^
+        LDMDB    fp,{v1,fp,sp,pc}^
+        LDMDB    fp,{v1,fp,sp,pc}^
+        LDMDB    fp,{v1,fp,sp,pc}^
+        B        |L0009b0.J25.process_tables|
+        LDMDB    fp,{v1,fp,sp,pc}^
+|L000950.J39.process_tables|
+        SUB      a3,a1,#&cf
+        CMP      a3,#&11
+        ADDLS    pc,pc,a3,LSL #2
+        B        |L0009d4.J7.process_tables|
+        LDMDB    fp,{v1,fp,sp,pc}^
+        B        |L0008b8.J4.process_tables|
+        B        |L0008b8.J4.process_tables|
+        B        |L0008b8.J4.process_tables|
+        B        |L0008b8.J4.process_tables|
+        B        |L0008b8.J4.process_tables|
+        B        |L0008b8.J4.process_tables|
+        B        |L0008b8.J4.process_tables|
+        B        |L0008b8.J4.process_tables|
+        LDMDB    fp,{v1,fp,sp,pc}^
+        LDMDB    fp,{v1,fp,sp,pc}^
+        LDMDB    fp,{v1,fp,sp,pc}^
+        B        |L0009bc.J10.process_tables|
+        B        |L0009d4.J7.process_tables|
+        B        |L0009c8.J9.process_tables|
+        B        |L0009d4.J7.process_tables|
+        B        |L0009d4.J7.process_tables|
+        MOV      a1,v1
+        BL       get_app0
+        B        |L0008b8.J4.process_tables|
+|L0009b0.J25.process_tables|
+        MOV      a1,v1
+        BL       get_dac
+        B        |L0008b8.J4.process_tables|
+|L0009bc.J10.process_tables|
+        MOV      a1,v1
+        BL       get_dqt
+        B        |L0008b8.J4.process_tables|
+|L0009c8.J9.process_tables|
+        MOV      a1,v1
+        BL       get_dri
+        B        |L0008b8.J4.process_tables|
+|L0009d4.J7.process_tables|
+        MOV      a1,v1
+        BL       skip_variable
+        B        |L0008b8.J4.process_tables|
+
+read_file_header
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        LDR      a3,[a1,#&34]
+        LDR      a1,[a1,#&38]
+        MOV      a2,#&ff
+        CMP      a3,a1
+        LDRCCB   a1,[a3],#1
+        STRCC    a3,[v1,#&34]
+        MOVCS    a1,a2
+        TEQ      a1,#&ff
+        BNE      |L000a30.J5.read_file_header|
+        ADD      a3,v1,#&34
+        LDMIA    a3,{a1,a3}
+        CMP      a1,a3
+        LDRCCB   a2,[a1],#1
+        STRCC    a1,[v1,#&34]
+        TEQ      a2,#&d8
+        BEQ      |L000a3c.J4.read_file_header|
+|L000a30.J5.read_file_header|
+        MOV      a1,#&67
+        ADD      a1,a1,#&5000
+        BL       exit
+|L000a3c.J4.read_file_header|
+        MOV      a1,v1
+        BL       get_soi
+        MOV      a1,v1
+        BL       process_tables
+        MOV      v3,#0
+        MOV      v2,#1
+        TEQ      a1,#&c0
+        TEQNE    a1,#&c1
+        BEQ      |L000a7c.J17.read_file_header|
+        TEQ      a1,#&c9
+        BNE      |L000a90.J15.read_file_header|
+        MOV      a2,a1
+        MOV      a1,v1
+        BL       get_sof
+        STR      v2,[v1,#&b4]
+        B        |L000a9c.J14.read_file_header|
+|L000a7c.J17.read_file_header|
+        MOV      a2,a1
+        MOV      a1,v1
+        BL       get_sof
+        STR      v3,[v1,#&b4]
+        B        |L000a9c.J14.read_file_header|
+|L000a90.J15.read_file_header|
+        MOV      a1,#&7b
+        ADD      a1,a1,#&5000
+        BL       exit
+|L000a9c.J14.read_file_header|
+        LDR      a1,[v1,#&4c]
+        TEQ      a1,#1
+        STREQ    v2,[v1,#&1c]!
+        LDMEQDB  fp,{v1-v3,fp,sp,pc}^
+        TEQ      a1,#3
+        BEQ      |L000ac8.J25.read_file_header|
+        TEQ      a1,#4
+        STRNE    v3,[v1,#&1c]!
+        LDMNEDB  fp,{v1-v3,fp,sp,pc}^
+        MOV      a1,#5
+        B        |L000b28.J44.read_file_header|
+|L000ac8.J25.read_file_header|
+        LDR      a1,[v1,#&1c]
+        TEQ      a1,#0
+        LDMNEDB  fp,{v1-v3,fp,sp,pc}^
+        LDR      a2,[v1,#&50]
+        LDR      a1,[a2,#0]
+        MOV      a4,a1,LSL #16
+        MOV      a4,a4,ASR #16
+        LDR      a1,[a2,#&38]
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        LDR      a2,[a2,#&70]
+        MOV      a2,a2,LSL #16
+        MOV      a2,a2,ASR #16
+        MOV      a3,#3
+        CMP      a4,#1
+        BNE      |L000b14.J32.read_file_header|
+        TEQ      a1,#2
+        BEQ      |L000b30.J37.read_file_header|
+        B        |L000b18.J38.read_file_header|
+|L000b14.J32.read_file_header|
+        BNE      |L000b30.J37.read_file_header|
+|L000b18.J38.read_file_header|
+        TEQ      a1,#4
+        TEQEQ    a2,#5
+        BNE      |L000b30.J37.read_file_header|
+        MOV      a1,#4
+|L000b28.J44.read_file_header|
+        STR      a1,[v1,#&1c]!
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+|L000b30.J37.read_file_header|
+        STR      a3,[v1,#&1c]!
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+
+read_scan_header
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        BL       process_tables
+        TEQ      a1,#&d9
+        BEQ      |L000b74.J4.read_scan_header|
+        TEQ      a1,#&da
+        MOVEQ    a1,v1
+        BLEQ     get_sos
+        MOVEQ    a1,#1
+        LDMEQDB  fp,{v1,fp,sp,pc}^
+        MOV      a1,#&be
+        ADD      a1,a1,#&5000
+        BL       exit
+|L000b74.J4.read_scan_header|
+        MOV      a1,#0
+        LDMDB    fp,{v1,fp,sp,pc}^
+
+        ;MPORT  huff_DECODE_buildshortcut
+        IMPORT  exit_c
+fix_huff_tbl
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        SUB      sp,sp,#&308
+        MOV      a2,#0
+        MOV      a3,#1
+|L000b9c.J4.fix_huff_tbl|
+        MOV      a1,#1
+        ADD      lr,v1,a3
+        LDRB     a4,[lr,#0]
+        CMP      a4,#1
+        BLT      |L000bd4.J6.fix_huff_tbl|
+        AND      a4,a3,#&ff
+|L000bb4.J5.fix_huff_tbl|
+        MOV      v3,a2
+        ADD      a2,a2,#1
+        ADD      ip,sp,#&204
+        STRB     a4,[ip,v3]
+        ADD      a1,a1,#1
+        LDRB     v3,[lr,#0]
+        CMP      v3,a1
+        BGE      |L000bb4.J5.fix_huff_tbl|
+|L000bd4.J6.fix_huff_tbl|
+        ADD      a3,a3,#1
+        CMP      a3,#&10
+        BLE      |L000b9c.J4.fix_huff_tbl|
+        MOV      v6,#0
+        ADD      a1,sp,#&204
+        STRB     v6,[a1,a2]
+        MOV      a1,#0
+        LDRB     a3,[sp,#&204]
+        MOV      a2,#0
+        LDRB     a4,[sp,#&204]
+        TEQ      a4,#0
+        BEQ      |L000c68.J11.fix_huff_tbl|
+|L000c04.J10.fix_huff_tbl|
+        ADD      a4,sp,#&204
+        LDRB     a4,[a4,a2]
+        TEQ      a4,a3
+        BNE      |L000c48.J14.fix_huff_tbl|
+|L000c14.J13.fix_huff_tbl|
+        MOV      a4,a2
+        ADD      a2,a2,#1
+        ADD      a4,sp,a4,LSL #1
+        STRB     a1,[a4,#0]
+        MOV      ip,a1,ASR #8
+        STRB     ip,[a4,#1]
+        ADD      a1,a1,#1
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,LSR #16
+        ADD      a4,sp,#&204
+        LDRB     a4,[a4,a2]
+        TEQ      a4,a3
+        BEQ      |L000c14.J13.fix_huff_tbl|
+|L000c48.J14.fix_huff_tbl|
+        MOV      a1,a1,LSL #1
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,LSR #16
+        ADD      a3,a3,#1
+        ADD      a4,sp,#&204
+        LDRB     a4,[a4,a2]
+        TEQ      a4,#0
+        BNE      |L000c04.J10.fix_huff_tbl|
+|L000c68.J11.fix_huff_tbl|
+        MOV      a2,#0
+        MOV      a3,#1
+        MVN      a1,#0
+|L000c74.J18.fix_huff_tbl|
+        ADD      v3,v1,a3
+        LDRB     a4,[v3,#0]
+        TEQ      a4,#0
+        BEQ      |L000cc8.J19.fix_huff_tbl|
+        ADD      lr,v1,a3,LSL #2
+        STR      a2,[lr,#&15c]
+        ADD      a4,lr,#&15c
+        LDR      v4,[sp,a2,LSL #1]
+        MOV      v4,v4,LSL #16
+        MOV      v4,v4,LSR #16
+        LDR      ip,[a4,#0]
+        SUB      v4,ip,v4
+        STR      v4,[a4,#0]
+        LDRB     a4,[v3,#0]
+        ADD      a2,a4,a2
+        ADD      a4,sp,a2,LSL #1
+        LDR      a4,[a4,#-2]
+        MOV      a4,a4,LSL #16
+        MOV      a4,a4,LSR #16
+        STR      a4,[lr,#&114]!
+        B        |L000cd0.J21.fix_huff_tbl|
+|L000cc8.J19.fix_huff_tbl|
+        ADD      a4,v1,a3,LSL #2
+        STR      a1,[a4,#&114]!
+|L000cd0.J21.fix_huff_tbl|
+        ADD      a3,a3,#1
+        CMP      a3,#&10
+        BLE      |L000c74.J18.fix_huff_tbl|
+        MVN      a2,#&ff00000
+        ADD      a2,a2,#&10000000
+        MOV      v3,#0
+        MOV      v5,#&20
+        STR      a2,[v1,#&158]
+|L000cf0.J23.fix_huff_tbl|
+        MOV      a1,v3,LSL #24
+        MOV      a2,v1
+        ADD      v2,v2,#&104
+        STMIA    v2,{a1,v5}
+        SUB      v2,v2,#&104
+        MOV      a1,v2
+        BL       huff_DECODE_buildshortcut
+        MOV      v4,a1
+        LDR      a1,[v2,#&108]
+        CMP      a1,#&18
+        MVNLT    a1,#0
+        BLT      |L000d3c.J39.fix_huff_tbl|
+        CMP      v4,#0
+        MOVLT    a2,#4
+        MOVLT    a1,#&69
+        BLLT     exit_c
+        LDR      a1,[v2,#&108]
+        SUB      a1,v5,a1
+        ORR      a1,v4,a1,LSL #24
+|L000d3c.J39.fix_huff_tbl|
+        ADD      a2,v1,v3,LSL #2
+        ADD      v3,v3,#1
+        CMP      v3,#&100
+        STR      a1,[a2,#&1a0]!
+        BLT      |L000cf0.J23.fix_huff_tbl|
+        STR      v6,[v2,#&108]
+        STR      v6,[v2,#&104]!
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+get_bits
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      v2,a2
+        LDR      a1,[a1,#&108]
+        CMP      a2,a1
+        BLE      |L000df0.J5.get_bits|
+        MOV      v3,#&ff
+|L000d80.J4.get_bits|
+        ADD      a2,v1,#&34
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        MOVCS    a1,v3
+        BCS      |L000da0.J7.get_bits|
+        LDRB     a3,[a1],#1
+        STR      a1,[v1,#&34]
+        MOV      a1,a3
+|L000da0.J7.get_bits|
+        LDR      a3,[v1,#&104]
+        ORR      a3,a1,a3,LSL #8
+        STR      a3,[v1,#&104]
+        LDR      a3,[v1,#&108]
+        ADD      a3,a3,#8
+        TEQ      a1,#&ff
+        STR      a3,[v1,#&108]
+        BNE      |L000de4.J10.get_bits|
+        LDR      a1,[v1,#&34]
+        CMP      a1,a2
+        LDRCCB   a2,[a1],#1
+        STRCC    a1,[v1,#&34]
+        MOVCS    a2,v3
+        TEQ      a2,#0
+        MOVNE    a1,#&394
+        ADDNE    a1,a1,#&2400
+        BLNE     exit
+|L000de4.J10.get_bits|
+        LDR      a1,[v1,#&108]
+        CMP      v2,a1
+        BGT      |L000d80.J4.get_bits|
+|L000df0.J5.get_bits|
+        LDR      a1,[v1,#&108]
+        SUB      a1,a1,v2
+        STR      a1,[v1,#&108]
+        LDR      a2,[v1,#&104]!
+        MOV      a1,a2,ASR a1
+        MOV      a2,#1
+        MOV      a2,a2,LSL v2
+        SUB      a2,a2,#1
+        AND      a1,a1,a2
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+
+huff_DECODE_buildshortcut
+        MOV      ip,sp
+        STMDB    sp!,{v1-v4,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      v2,a2
+        LDR      a2,[a1,#&108]
+        TEQ      a2,#0
+        BEQ      |L000e50.J5.huff_DECODE_buildshortcut|
+        SUB      a2,a2,#1
+        STR      a2,[v1,#&108]
+        LDR      a1,[v1,#&104]
+        MOV      a1,a1,ASR a2
+        AND      a1,a1,#1
+        B        |L000e58.J4.huff_DECODE_buildshortcut|
+|L000e50.J5.huff_DECODE_buildshortcut|
+        MOV      a2,#1
+        BL       get_bits
+|L000e58.J4.huff_DECODE_buildshortcut|
+        MOV      v4,a1
+        MOV      v3,#1
+        B        |L000e9c.J8.huff_DECODE_buildshortcut|
+|L000e64.J7.huff_DECODE_buildshortcut|
+        LDR      a1,[v1,#&108]
+        TEQ      a1,#0
+        BEQ      |L000e88.J10.huff_DECODE_buildshortcut|
+        SUB      a1,a1,#1
+        STR      a1,[v1,#&108]
+        LDR      a2,[v1,#&104]
+        MOV      a1,a2,ASR a1
+        AND      a1,a1,#1
+        B        |L000e94.J9.huff_DECODE_buildshortcut|
+|L000e88.J10.huff_DECODE_buildshortcut|
+        MOV      a1,v1
+        MOV      a2,#1
+        BL       get_bits
+|L000e94.J9.huff_DECODE_buildshortcut|
+        ADD      v4,a1,v4,LSL #1
+        ADD      v3,v3,#1
+|L000e9c.J8.huff_DECODE_buildshortcut|
+        ADD      a1,v2,v3,LSL #2
+        LDR      a1,[a1,#&114]
+        CMP      a1,v4
+        BGE      |L000eb4.J12.huff_DECODE_buildshortcut|
+        CMP      v3,#8
+        BLE      |L000e64.J7.huff_DECODE_buildshortcut|
+|L000eb4.J12.huff_DECODE_buildshortcut|
+        CMP      v3,#8
+        MVNGT    a1,#0
+        LDMGTDB  fp,{v1-v4,fp,sp,pc}^
+        ADD      a1,v2,v3,LSL #2
+        LDR      a1,[a1,#&15c]
+        ADD      a1,a1,v4
+        ADD      a1,v2,a1
+        LDRB     a1,[a1,#&11]
+        LDMDB    fp,{v1-v4,fp,sp,pc}^
+
+huff_decoder_init
+        MOV      a2,#0
+        STR      a2,[a1,#&108]!
+        MOVS     pc,lr
+
+mono_convert_block
+        STMDB    sp!,{v1,lr}
+        MOV      ip,#0
+|L000eec.J4.mono_convert_block|
+        MOV      a4,#0
+|L000ef0.J5.mono_convert_block|
+        ADD      lr,ip,a4,LSL #3
+        LDR      lr,[a1,lr,LSL #2]
+        ADD      lr,lr,#&40000
+        MOV      lr,lr,ASR #19
+        ADDS     lr,lr,#&80
+        MOVMI    lr,#0
+        BMI      |L000f14.J8.mono_convert_block|
+        CMP      lr,#&ff
+        MOVGT    lr,#&ff
+|L000f14.J8.mono_convert_block|
+        ORR      v1,lr,lr,LSL #8
+        ORR      lr,v1,lr,LSL #16
+        STR      lr,[a2,a4,LSL #2]
+        ADD      a4,a4,#1
+        CMP      a4,#8
+        BLT      |L000ef0.J5.mono_convert_block|
+        ADD      a2,a2,a3,LSL #2
+        ADD      ip,ip,#1
+        CMP      ip,#8
+        BLT      |L000eec.J4.mono_convert_block|
+        LDMIA    sp!,{v1,pc}^
+
+mono_convert_pixel
+        ADDS     a1,a2,#&80
+        MOVMI    a1,#0
+        BMI      |L000f54.J6.mono_convert_pixel|
+        CMP      a1,#&ff
+        MOVGT    a1,#&ff
+|L000f54.J6.mono_convert_pixel|
+        ORR      a2,a1,a1,LSL #8
+        ORR      a1,a2,a1,LSL #16
+        MOVS     pc,lr
+
+colour_convert_block
+        MOV      ip,sp
+        STMDB    sp!,{a1-a3,v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        SUB      sp,sp,#&14
+        MOV      v5,a1
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#&10]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#&c]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#8]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#4]
+        ADD      a1,a1,#&100
+        MOV      a3,#0
+        STR      a1,[sp,#0]
+|L000fa0.J4.colour_convert_block|
+        MOV      a1,#0
+        AND      v3,a3,#7
+        MOV      v2,a3,ASR #1
+|L000fac.J5.colour_convert_block|
+        AND      a4,a1,#7
+        ADD      ip,v3,a4,LSL #3
+        CMP      a3,#8
+        BGE      |L000fcc.J7.colour_convert_block|
+        CMP      a1,#8
+        LDRGE    a4,[sp,#&10]
+        MOVLT    a4,v5
+        B        |L000fd8.J6.colour_convert_block|
+|L000fcc.J7.colour_convert_block|
+        CMP      a1,#8
+        LDRGE    a4,[sp,#8]
+        LDRLT    a4,[sp,#&c]
+|L000fd8.J6.colour_convert_block|
+        LDR      a4,[a4,ip,LSL #2]
+        MOV      ip,a1,ASR #1
+        ADD      ip,v2,ip,LSL #3
+        LDR      lr,[sp,#4]
+        LDR      lr,[lr,ip,LSL #2]
+        LDR      v1,[sp,#0]
+        LDR      ip,[v1,ip,LSL #2]
+        ADD      a4,a4,#&40000
+        MOV      a4,a4,ASR #19
+        ADD      a4,a4,#&80
+        ADD      lr,lr,#&40000
+        MOV      lr,lr,ASR #19
+        ADD      ip,ip,#&40000
+        MOV      v1,ip,ASR #19
+        ADD      v4,v1,v1,LSL #5
+        RSB      v4,v4,v4,LSL #3
+        ADD      v4,v4,v1,LSL #7
+        ADD      ip,lr,lr,LSL #1
+        ADD      ip,ip,lr,LSL #3
+        MOV      ip,ip,LSL #3
+        RSB      v6,ip,#0
+        ADD      ip,v1,v1,LSL #1
+        RSB      ip,ip,v1,LSL #6
+        ADD      ip,ip,ip,LSL #1
+        SUB      v1,v6,ip
+        ADD      ip,lr,lr,LSL #5
+        RSB      ip,ip,lr,LSL #8
+        ADD      ip,ip,lr,LSL #2
+        MOV      ip,ip,LSL #1
+        ADD      lr,v4,#&80
+        ADDS     lr,a4,lr,ASR #8
+        MOVMI    lr,#0
+        BMI      |L001064.J15.colour_convert_block|
+        CMP      lr,#&ff
+        MOVGT    lr,#&ff
+|L001064.J15.colour_convert_block|
+        ADD      v1,v1,#&80
+        ADDS     v1,a4,v1,ASR #8
+        MOVMI    v1,#0
+        BMI      |L00107c.J19.colour_convert_block|
+        CMP      v1,#&ff
+        MOVGT    v1,#&ff
+|L00107c.J19.colour_convert_block|
+        ADD      ip,ip,#&80
+        ADDS     a4,a4,ip,ASR #8
+        MOVMI    a4,#0
+        BMI      |L001094.J23.colour_convert_block|
+        CMP      a4,#&ff
+        MOVGT    a4,#&ff
+|L001094.J23.colour_convert_block|
+        ORR      ip,lr,v1,LSL #8
+        ORR      a4,ip,a4,LSL #16
+        STR      a4,[a2,a1,LSL #2]
+        ADD      a1,a1,#1
+        CMP      a1,#&10
+        BLT      |L000fac.J5.colour_convert_block|
+        LDR      a1,[fp,#-&28]
+        ADD      a2,a2,a1,LSL #2
+        ADD      a3,a3,#1
+        CMP      a3,#&10
+        BLT      |L000fa0.J4.colour_convert_block|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+colour_convert_unusual_block
+        MOV      ip,sp
+        STMDB    sp!,{a1-a4}
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#&14
+        SUB      sp,sp,#&20
+        LDR      v3,[fp,#&14]
+        STR      a1,[sp,#&14]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#&10]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#&c]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#8]
+        ADD      a1,a1,#&100
+        STR      a1,[sp,#4]
+        ADD      a1,a1,#&100
+        MOV      a3,#0
+        CMP      a3,v3,LSL #3
+        STR      a1,[sp,#0]
+        BGE      |L001254.J35.colour_convert_unusual_block|
+        SUB      a1,a4,#1
+        STR      a1,[sp,#&1c]
+|L00111c.J4.colour_convert_unusual_block|
+        MOV      a1,#0
+        CMP      a1,a4,LSL #3
+        BGE      |L001240.J8.colour_convert_unusual_block|
+        AND      v4,a3,#7
+        SUB      lr,v3,#1
+        MOV      ip,a3,ASR lr
+        STR      ip,[sp,#&18]
+|L001138.J7.colour_convert_unusual_block|
+        AND      ip,a1,#7
+        ADD      lr,v4,ip,LSL #3
+        CMP      a3,#8
+        BGE      |L001158.J11.colour_convert_unusual_block|
+        CMP      a1,#8
+        LDRGE    ip,[sp,#&10]
+        LDRLT    ip,[sp,#&14]
+        B        |L001164.J10.colour_convert_unusual_block|
+|L001158.J11.colour_convert_unusual_block|
+        CMP      a1,#8
+        LDRGE    ip,[sp,#8]
+        LDRLT    ip,[sp,#&c]
+|L001164.J10.colour_convert_unusual_block|
+        LDR      lr,[ip,lr,LSL #2]
+        LDR      v1,[sp,#&1c]
+        MOV      v1,a1,ASR v1
+        LDR      ip,[sp,#&18]
+        ADD      ip,ip,v1,LSL #3
+        LDR      v1,[sp,#4]
+        LDR      v1,[v1,ip,LSL #2]
+        LDR      v2,[sp,#0]
+        LDR      ip,[v2,ip,LSL #2]
+        ADD      lr,lr,#&40000
+        MOV      lr,lr,ASR #19
+        ADD      lr,lr,#&80
+        ADD      v1,v1,#&40000
+        MOV      v1,v1,ASR #19
+        ADD      ip,ip,#&40000
+        MOV      v2,ip,ASR #19
+        ADD      v5,v2,v2,LSL #5
+        RSB      v5,v5,v5,LSL #3
+        ADD      v5,v5,v2,LSL #7
+        ADD      ip,v1,v1,LSL #1
+        ADD      ip,ip,v1,LSL #3
+        MOV      ip,ip,LSL #3
+        RSB      v6,ip,#0
+        ADD      ip,v2,v2,LSL #1
+        RSB      ip,ip,v2,LSL #6
+        ADD      ip,ip,ip,LSL #1
+        SUB      v2,v6,ip
+        ADD      ip,v1,v1,LSL #5
+        RSB      ip,ip,v1,LSL #8
+        ADD      ip,ip,v1,LSL #2
+        MOV      ip,ip,LSL #1
+        ADD      v1,v5,#&80
+        ADDS     v1,lr,v1,ASR #8
+        MOVMI    v1,#0
+        BMI      |L0011f8.J19.colour_convert_unusual_block|
+        CMP      v1,#&ff
+        MOVGT    v1,#&ff
+|L0011f8.J19.colour_convert_unusual_block|
+        ADD      v2,v2,#&80
+        ADDS     v2,lr,v2,ASR #8
+        MOVMI    v2,#0
+        BMI      |L001210.J23.colour_convert_unusual_block|
+        CMP      v2,#&ff
+        MOVGT    v2,#&ff
+|L001210.J23.colour_convert_unusual_block|
+        ADD      ip,ip,#&80
+        ADDS     ip,lr,ip,ASR #8
+        MOVMI    ip,#0
+        BMI      |L001228.J27.colour_convert_unusual_block|
+        CMP      ip,#&ff
+        MOVGT    ip,#&ff
+|L001228.J27.colour_convert_unusual_block|
+        ORR      lr,v1,v2,LSL #8
+        ORR      ip,lr,ip,LSL #16
+        STR      ip,[a2,a1,LSL #2]
+        ADD      a1,a1,#1
+        CMP      a1,a4,LSL #3
+        BLT      |L001138.J7.colour_convert_unusual_block|
+|L001240.J8.colour_convert_unusual_block|
+        LDR      a1,[fp,#&c]
+        ADD      a2,a2,a1,LSL #2
+        ADD      a3,a3,#1
+        CMP      a3,v3,LSL #3
+        BLT      |L00111c.J4.colour_convert_unusual_block|
+|L001254.J35.colour_convert_unusual_block|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+colour_convert_pixels
+        STMDB    sp!,{v1-v3,lr}
+        ADD      a2,a2,#4
+        MOV      a2,a2,ASR #3
+        ADD      a3,a3,#4
+        MOV      a3,a3,ASR #3
+        ADD      a4,a3,a3,LSL #5
+        RSB      a4,a4,a4,LSL #3
+        ADD      a4,a4,a3,LSL #7
+        ADD      ip,a2,a2,LSL #1
+        ADD      ip,ip,a2,LSL #3
+        MOV      ip,ip,LSL #3
+        RSB      lr,ip,#0
+        ADD      ip,a3,a3,LSL #1
+        RSB      a3,ip,a3,LSL #6
+        ADD      a3,a3,a3,LSL #1
+        SUB      a3,lr,a3
+        ADD      ip,a2,a2,LSL #5
+        RSB      ip,ip,a2,LSL #8
+        ADD      a2,ip,a2,LSL #2
+        MOV      a2,a2,LSL #1
+        ADD      a4,a4,#&80
+        MOV      v2,a4,ASR #8
+        ADD      a3,a3,#&80
+        MOV      v1,a3,ASR #8
+        ADD      a2,a2,#&80
+        MOV      lr,a2,ASR #8
+        MOV      a4,#0
+        MOV      v3,#&80
+|L0012c8.J4.colour_convert_pixels|
+        LDR      a2,[a1,a4,LSL #2]
+        ADD      a2,a2,#4
+        ADD      ip,v3,a2,ASR #3
+        ADDS     a3,v2,ip
+        MOVMI    a3,#0
+        BMI      |L0012e8.J7.colour_convert_pixels|
+        CMP      a3,#&ff
+        MOVGT    a3,#&ff
+|L0012e8.J7.colour_convert_pixels|
+        ADDS     a2,v1,ip
+        MOVMI    a2,#0
+        BMI      |L0012fc.J11.colour_convert_pixels|
+        CMP      a2,#&ff
+        MOVGT    a2,#&ff
+|L0012fc.J11.colour_convert_pixels|
+        ADDS     ip,lr,ip
+        MOVMI    ip,#0
+        BMI      |L001310.J15.colour_convert_pixels|
+        CMP      ip,#&ff
+        MOVGT    ip,#&ff
+|L001310.J15.colour_convert_pixels|
+        ORR      a2,a3,a2,LSL #8
+        ORR      a2,a2,ip,LSL #16
+        STR      a2,[a1,a4,LSL #2]
+        ADD      a4,a4,#1
+        CMP      a4,#4
+        BLT      |L0012c8.J4.colour_convert_pixels|
+        LDMIA    sp!,{v1-v3,pc}^
+
+        EXPORT  assembler_panic
+assembler_panic
+        MOVS     pc,lr
+
+init_workspace
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      a3,a2
+        MOV      a2,#0
+        LDR      v2,[a1,#&20]
+        LDR      v3,[a1,#&10]
+        BL       memset
+        STR      v2,[v1,#&20]
+        STR      v3,[v1,#&10]
+        ADD      a1,v1,#&1c
+        ADD      a1,a1,#&800
+        STR      a1,[v1,#&50]
+        MOV      a1,#0
+|L00136c.J4.init_workspace|
+        ADD      a2,v1,a1,LSL #8
+        ADD      a2,a2,#&fc
+        ADD      a2,a2,#&800
+        ADD      a3,v1,a1,LSL #2
+        ADD      a1,a1,#1
+        CMP      a1,#4
+        STR      a2,[a3,#&54]!
+        BLT      |L00136c.J4.init_workspace|
+        MOV      a1,#0
+|L001390.J6.init_workspace|
+        RSB      a2,a1,a1,LSL #4
+        ADD      a2,a2,a2,LSL #1
+        ADD      a3,v1,a2,LSL #5
+        SUB      a4,a3,#&304
+        ADD      a4,a4,#&1000
+        ADD      a2,v1,a1,LSL #2
+        ADD      a3,a3,#&37c
+        ADD      a3,a3,#&2000
+        ADD      a1,a1,#1
+        CMP      a1,#4
+        STR      a4,[a2,#&64]!
+        STR      a3,[a2,#&10]
+        BLT      |L001390.J6.init_workspace|
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+
+save_huff_stream
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      v2,a2
+        LDR      a1,[a1,#&108]
+        CMP      a1,#&20
+        MOVGE    a2,#2
+        MOVGE    a1,#&d8
+        BLGE     exit_c
+        LDR      a1,[v1,#&108]
+        CMP      a1,#0
+        MOVLT    a2,#2
+        MOVLT    a1,#&d9
+        BLLT     exit_c
+        LDR      a1,[v1,#&34]
+        LDR      a2,[v1,#&30]
+        CMP      a2,a1
+        MOVCS    a2,#2
+        MOVCS    a1,#&da
+        BLCS     exit_c
+        LDR      a1,[v1,#&38]
+        LDR      a2,[v1,#&34]
+        CMP      a2,a1
+        MOVCS    a2,#2
+        MOVCS    a1,#&db
+        BLCS     exit_c
+        ADD      a2,v1,#&30
+        LDMIA    a2,{a1,a2}
+        SUB      a1,a2,a1
+        LDR      a2,[v1,#&108]
+        ADD      a1,a2,a1,LSL #5
+        STR      a1,[v2,#0]
+        LDR      a1,[v1,#&104]
+        STR      a1,[v2,#4]
+        LDR      a1,[v1,#&e4]
+        STRB     a1,[v2,#8]
+        MOV      a1,a1,ASR #8
+        STRB     a1,[v2,#9]
+        LDR      a1,[v1,#&e8]
+        STRB     a1,[v2,#&a]
+        MOV      a1,a1,ASR #8
+        STRB     a1,[v2,#&b]
+        LDR      a1,[v1,#&ec]
+        STRB     a1,[v2,#&c]
+        MOV      a1,a1,ASR #8
+        STRB     a1,[v2,#&d]
+        LDR      a1,[v1,#&c0]
+        STRB     a1,[v2,#&10]
+        MOV      a1,a1,ASR #8
+        STRB     a1,[v2,#&11]
+        LDR      a1,[v1,#&c4]!
+        STRB     a1,[v2,#&12]
+        MOV      a1,a1,ASR #8
+        STRB     a1,[v2,#&13]
+        LDMDB    fp,{v1,v2,fp,sp,pc}^
+
+restore_huff_stream
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        LDR      a1,[a2,#4]
+        STR      a1,[v1,#&104]
+        LDR      a1,[a2,#0]
+        CMP      a1,#0
+        ADDLT    a1,a1,#&1f
+        LDR      a3,[v1,#&30]
+        ADD      a1,a3,a1,ASR #5
+        STR      a1,[v1,#&34]
+        LDR      a1,[a2,#0]
+        AND      a1,a1,#&1f
+        STR      a1,[v1,#&108]
+        LDR      a1,[a2,#8]
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        STR      a1,[v1,#&e4]
+        LDR      a1,[a2,#&a]
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        STR      a1,[v1,#&e8]
+        LDR      a1,[a2,#&c]
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        STR      a1,[v1,#&ec]
+        LDR      a1,[a2,#&10]
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        STR      a1,[v1,#&c0]
+        LDR      a1,[a2,#&12]
+        MOV      a1,a1,LSL #16
+        MOV      a1,a1,ASR #16
+        STR      a1,[v1,#&c4]
+        ADD      a2,v1,#&30
+        LDMIA    a2,{a1,a2}
+        CMP      a1,a2
+        MOVCS    a2,#4
+        MOVCS    a1,#&fa
+        BLCS     exit_c
+        ADD      v1,v1,#&30
+        LDMIB    v1!,{a1,a2}
+        CMP      a1,a2
+        MOVCS    a2,#4
+        MOVCS    a1,#&fb
+        LDMCSDB  fp,{v1,fp,sp,lr}
+        BCS      exit_c
+        LDMDB    fp,{v1,fp,sp,pc}^
+
+process_restart
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        LDR      a1,[a1,#&34]
+        LDRB     v2,[a1],#1
+        STR      a1,[v1,#&34]
+        LDR      a1,[v1,#&108]
+        CMP      a1,#7
+        MOVGT    a2,#2
+        MOVGT    a1,#&12
+        ADDGT    a1,a1,#&100
+        BLGT     exit_c
+        TEQ      v2,#&ff
+        MOVNE    a2,#2
+        MOVNE    a1,#&13
+        ADDNE    a1,a1,#&100
+        BLNE     exit_c
+        LDR      a1,[v1,#&34]
+        LDRB     a1,[a1,#0]
+        TEQ      a1,#&ff
+        BNE      |L0015dc.J9.process_restart|
+|L0015c4.J8.process_restart|
+        LDR      a1,[v1,#&34]
+        ADD      a1,a1,#1
+        STR      a1,[v1,#&34]
+        LDRB     a1,[a1,#0]
+        TEQ      a1,#&ff
+        BEQ      |L0015c4.J8.process_restart|
+|L0015dc.J9.process_restart|
+        LDR      a1,[v1,#&34]
+        LDRB     v2,[a1],#1
+        STR      a1,[v1,#&34]
+        AND      a1,v2,#&f8
+        TEQ      a1,#&d0
+        MOVNE    a2,#2
+        MOVNE    a1,#&16
+        ADDNE    a1,a1,#&100
+        BLNE     exit_c
+        AND      a2,v2,#7
+        LDR      a1,[v1,#&c4]
+        TEQ      a2,a1
+        MOVNE    a2,#2
+        MOVNE    a1,#&17
+        ADDNE    a1,a1,#&100
+        BLNE     exit_c
+        MOV      a2,#0
+        STR      a2,[v1,#&108]
+        STR      a2,[v1,#&104]
+        LDR      a1,[v1,#&bc]
+        STR      a1,[v1,#&c0]
+        LDR      a1,[v1,#&c4]
+        ADD      a1,a1,#1
+        AND      a1,a1,#7
+        STR      a1,[v1,#&c4]
+        MOV      a1,#0
+        LDR      a3,[v1,#&c8]
+        CMP      a3,#0
+        LDMLEDB  fp,{v1,v2,fp,sp,pc}^
+|L001650.J16.process_restart|
+        ADD      a3,v1,a1,LSL #2
+        ADD      a1,a1,#1
+        STR      a2,[a3,#&e4]!
+        LDR      a3,[v1,#&c8]
+        CMP      a1,a3
+        BLT      |L001650.J16.process_restart|
+        LDMDB    fp,{v1,v2,fp,sp,pc}^
+
+        IMPORT  asm_huff_skip_blocks
+do_huff_skip_blocks
+        MOV      ip,sp
+        STMDB    sp!,{a1-a4}
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#&14
+        MOV      v1,a1
+        MOV      v2,a2
+        MOV      v3,a3
+        LDR      v4,[fp,#&1c]
+        LDR      v5,[fp,#&18]
+        LDR      v6,[fp,#&14]
+        LDR      a2,[a1,#&bc]
+        TEQ      a2,#0
+        BEQ      |L001710.J4.do_huff_skip_blocks|
+        CMP      v4,#0
+        LDMLEDB  fp,{v1-v6,fp,sp,pc}^
+        B        |L0016b4.J10.do_huff_skip_blocks|
+|L0016ac.J6.do_huff_skip_blocks|
+        TEQ      a1,#0
+        BEQ      |L0016d0.J9.do_huff_skip_blocks|
+|L0016b4.J10.do_huff_skip_blocks|
+        LDR      a1,[v1,#&c0]
+        TEQ      a1,#0
+        MOVEQ    a1,v1
+        BLEQ     process_restart
+        LDR      a1,[v1,#&c0]
+        SUB      a1,a1,#1
+        STR      a1,[v1,#&c0]
+|L0016d0.J9.do_huff_skip_blocks|
+        MOV      a4,#1
+        MOV      a3,v5
+        MOV      a2,v6
+        STMDB    sp!,{a2-a4}
+        MOV      a3,v3
+        MOV      a2,v2
+        MOV      a1,v1
+        LDR      a4,[fp,#&10]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        SUB      v4,v4,#1
+        ADD      v2,v2,#&100
+        CMP      v4,#0
+        LDR      a1,[fp,#&20]
+        BGT      |L0016ac.J6.do_huff_skip_blocks|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+|L001710.J4.do_huff_skip_blocks|
+        MOV      a4,v4
+        MOV      a3,v5
+        MOV      a2,v6
+        STMDB    sp!,{a2-a4}
+        MOV      a3,v3
+        MOV      a2,v2
+        LDR      a4,[fp,#&10]
+        BL       asm_huff_skip_blocks
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+        IMPORT  asm_huff_decode_blocks
+do_huff_decode_blocks
+        MOV      ip,sp
+        STMDB    sp!,{a1-a4}
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#&14
+        MOV      v1,a1
+        MOV      v2,a2
+        MOV      v3,a3
+        LDR      v4,[fp,#&1c]
+        LDR      v5,[fp,#&18]
+        LDR      v6,[fp,#&14]
+        LDR      a2,[a1,#&bc]
+        TEQ      a2,#0
+        BEQ      |L0017d8.J4.do_huff_decode_blocks|
+        CMP      v4,#0
+        LDMLEDB  fp,{v1-v6,fp,sp,pc}^
+        B        |L00177c.J10.do_huff_decode_blocks|
+|L001774.J6.do_huff_decode_blocks|
+        TEQ      a1,#0
+        BEQ      |L001798.J9.do_huff_decode_blocks|
+|L00177c.J10.do_huff_decode_blocks|
+        LDR      a1,[v1,#&c0]
+        TEQ      a1,#0
+        MOVEQ    a1,v1
+        BLEQ     process_restart
+        LDR      a1,[v1,#&c0]
+        SUB      a1,a1,#1
+        STR      a1,[v1,#&c0]
+|L001798.J9.do_huff_decode_blocks|
+        MOV      a4,#1
+        MOV      a3,v5
+        MOV      a2,v6
+        STMDB    sp!,{a2-a4}
+        MOV      a3,v3
+        MOV      a2,v2
+        MOV      a1,v1
+        LDR      a4,[fp,#&10]
+        BL       asm_huff_decode_blocks
+        ADD      sp,sp,#&c
+        SUB      v4,v4,#1
+        ADD      v2,v2,#&100
+        CMP      v4,#0
+        LDR      a1,[fp,#&20]
+        BGT      |L001774.J6.do_huff_decode_blocks|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+|L0017d8.J4.do_huff_decode_blocks|
+        MOV      a4,v4
+        MOV      a3,v5
+        MOV      a2,v6
+        STMDB    sp!,{a2-a4}
+        MOV      a3,v3
+        MOV      a2,v2
+        LDR      a4,[fp,#&10]
+        BL       asm_huff_decode_blocks
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+        ;MPORT  jpeg_scan_file
+do_jpeg_scan_file
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      lr,a3
+        MOV      ip,a4
+        MOV      v1,a1
+        STR      a2,[a1,#&10]
+        MVN      a1,#0
+        MOV      a4,#0
+        MVN      a3,#0
+        MVN      a2,#0
+        STR      a1,[v1,#0]
+        MVN      a1,#&80000000
+        STMDB    sp!,{a1-a4}
+        MOV      a3,ip
+        MOV      a2,lr
+        MOV      a1,v1
+        BL       jpeg_scan_file
+        LDMDB    fp,{v1,fp,sp,pc}^
+
+do_jpeg_scan_file_16
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      lr,a3
+        MOV      ip,a4
+        MOV      v1,a1
+        STR      a2,[a1,#&10]
+        MVN      a1,#0
+        MOV      a4,#&10
+        MVN      a3,#0
+        MVN      a2,#0
+        STR      a1,[v1,#0]
+        MVN      a1,#&80000000
+        STMDB    sp!,{a1-a4}
+        MOV      a3,ip
+        MOV      a2,lr
+        MOV      a1,v1
+        MOV      a4,#0
+        BL       jpeg_scan_file
+        LDMDB    fp,{v1,fp,sp,pc}^
+
+        IMPORT  |__rt_sdiv|
+jpeg_scan_file
+        MOV      ip,sp
+        STMDB    sp!,{a1-a4}
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#&14
+        MOV      v1,a1
+        MOV      v5,a2
+        MOV      v4,a3
+        MOV      v3,a4
+        SUB      sp,sp,#&20
+        LDR      v2,[fp,#&20]
+        TST      v2,#2
+        LDR      v6,[fp,#&14]
+        BICNE    v2,v2,#&38
+        CMP      v3,#0
+        MOVLT    v3,#0
+        TST      v2,#&28
+        BEQ      |L0018ec.J8.jpeg_scan_file|
+        SUBS     v3,v3,#&10
+        MOVMI    v3,#0
+        BIC      v3,v3,#&f
+        ADD      v6,v6,#&10
+|L0018ec.J8.jpeg_scan_file|
+        LDR      a2,[v1,#0]
+        CMP      a2,#0
+        BNE      |L0019fc.J12.jpeg_scan_file|
+        LDR      a2,[v1,#&30]
+        TEQ      a2,v5
+        BNE      |L001a04.J42.jpeg_scan_file|
+        LDR      a3,[v1,#&38]
+        SUB      a2,a3,a2
+        TEQ      a2,v4
+        BNE      |L001a04.J42.jpeg_scan_file|
+        LDR      a2,[fp,#&18]
+        CMN      a2,#1
+        LDRNE    a2,[v1,#&14]
+        LDRNE    a3,[fp,#&18]
+        TEQNE    a2,a3
+        BNE      |L001a04.J42.jpeg_scan_file|
+        LDR      a2,[fp,#&1c]
+        CMN      a2,#1
+        LDRNE    a2,[v1,#&18]
+        LDRNE    a3,[fp,#&1c]
+        TEQNE    a2,a3
+        BNE      |L001a04.J42.jpeg_scan_file|
+        MOVS     a2,v4
+        ADDMI    a2,a2,#7
+        MOV      a2,a2,ASR #3
+        LDR      a2,[v5,a2,LSL #2]
+        LDR      a3,[v1,#&10c]
+        TEQ      a2,a3
+        BNE      |L001a04.J42.jpeg_scan_file|
+        MOV      a3,v4
+        CMP      v4,#0
+        ADDLT    a3,a3,#3
+        MOV      a3,a3,ASR #2
+        MOV      a2,v4
+        ADDLT    a2,a2,#&f
+        SUB      a2,a3,a2,ASR #4
+        LDR      a3,[v5,a2,LSL #2]
+        LDR      a2,[v1,#&110]
+        TEQ      a3,a2
+        BNE      |L001a04.J42.jpeg_scan_file|
+        MOV      a2,v4
+        CMP      v4,#0
+        ADDLT    a2,a2,#3
+        MOV      a2,a2,ASR #2
+        MOV      a3,v4
+        ADDLT    a3,a3,#&1f
+        SUB      a2,a2,a3,ASR #5
+        LDR      a3,[v5,a2,LSL #2]
+        LDR      a2,[v1,#&114]
+        TEQ      a3,a2
+        LDREQ    a2,[v1,#&100]
+        TEQEQ    a2,v2
+        BNE      |L001a04.J42.jpeg_scan_file|
+        LDR      a1,[v1,#&14]
+        CMP      v6,a1
+        MOVGT    v6,a1
+        LDR      a1,[v1,#&f8]
+        CMP      v3,a1
+        BLT      |L0019e4.J39.jpeg_scan_file|
+        LDR      a1,[v1,#&fc]
+        CMP      v6,a1
+        BLE      |L0019ec.J38.jpeg_scan_file|
+|L0019e4.J39.jpeg_scan_file|
+        MVN      a1,#0
+        STR      a1,[v1,#&f4]
+|L0019ec.J38.jpeg_scan_file|
+        MOV      a1,#0
+        ADD      v1,v1,#&f4
+        STMIB    v1!,{v3,v6}
+        B        |L002040.J135.jpeg_scan_file|
+|L0019fc.J12.jpeg_scan_file|
+        MOVLT    a2,#0
+        STRLT    a2,[v1,#&20]
+|L001a04.J42.jpeg_scan_file|
+        LDR      a2,[v1,#&10]
+        BL       init_workspace
+        LDR      a1,[v1,#&10]
+        TEQ      a1,#0
+        STREQ    a1,[v1,#&28]
+        LDREQ    a1,[pc, #L001b48-.-8]
+        BEQ      |L001a3c.J134.jpeg_scan_file|
+        ADD      a2,v1,#&1fc
+        ADD      a2,a2,#&3800
+        ADD      a1,a1,#&204
+        SUB      a1,a1,#&3c00
+        MOV      a1,a1,LSR #2
+        BIC      a1,a1,#&f
+        STR      a2,[v1,#&28]
+|L001a3c.J134.jpeg_scan_file|
+        STR      a1,[v1,#&2c]
+        MOV      a1,v4
+        CMP      v4,#0
+        ADDLT    a1,a1,#7
+        MOV      a1,a1,ASR #3
+        LDR      a1,[v5,a1,LSL #2]
+        MOV      a2,v4
+        STR      a1,[v1,#&10c]
+        ADDLT    a2,a2,#3
+        MOV      a2,a2,ASR #2
+        MOV      a1,v4
+        ADDLT    a1,a1,#&f
+        SUB      a1,a2,a1,ASR #4
+        LDR      a1,[v5,a1,LSL #2]
+        MOV      a2,v4
+        STR      a1,[v1,#&110]
+        ADDLT    a2,a2,#3
+        MOV      a2,a2,ASR #2
+        MOV      a1,v4
+        ADDLT    a1,a1,#&1f
+        SUB      a1,a2,a1,ASR #5
+        LDR      a1,[v5,a1,LSL #2]
+        STR      a1,[v1,#&114]
+        STR      v5,[v1,#&30]
+        STR      v5,[v1,#&34]
+        ADD      a1,v5,v4
+        STR      a1,[v1,#&38]
+        MOV      a1,v1
+        BL       read_file_header
+        MOV      a1,v1
+        BL       read_scan_header
+        MOV      v4,#0
+|L001abc.J57.jpeg_scan_file|
+        ADD      v5,v1,v4,LSL #2
+        MOV      a1,v1
+        LDR      a2,[v5,#&64]
+        BL       fix_huff_tbl
+        MOV      a1,v1
+        LDR      a2,[v5,#&74]!
+        BL       fix_huff_tbl
+        ADD      v4,v4,#1
+        CMP      v4,#4
+        BLT      |L001abc.J57.jpeg_scan_file|
+        MOV      a1,v1
+        BL       huff_decoder_init
+        MVN      a1,#0
+        STR      a1,[v1,#&f4]
+        LDR      a1,[v1,#&bc]
+        STR      a1,[v1,#&c0]
+        MOV      a1,#0
+        STR      a1,[v1,#&c4]
+        LDR      v4,[v1,#&14]
+        CMP      v6,v4
+        MOVGT    v6,v4
+        CMP      v3,v6
+        MOVGT    v3,v6
+        STR      v2,[v1,#&100]
+        ADD      v1,v1,#&f8
+        STMIA    v1,{v3,v6}
+        SUB      v1,v1,#&f8
+        LDR      a1,[v1,#&3c]
+        TEQ      a1,#8
+        BEQ      |L001b4c.J63.jpeg_scan_file|
+        MOV      a2,#1
+        STR      a1,[v1,#4]
+        STR      a2,[v1,#0]
+        MOV      a1,#1
+        B        |L002040.J135.jpeg_scan_file|
+L001b48
+        DCD     &05f5e100
+|L001b4c.J63.jpeg_scan_file|
+        LDR      a1,[v1,#&c8]
+        LDR      v3,[v1,#&4c]
+        TEQ      v3,a1
+        MOVNE    a1,#3
+        STRNE    a1,[v1,#0]
+        BNE      |L002040.J135.jpeg_scan_file|
+        LDR      a1,[fp,#&18]
+        TEQ      v4,a1
+        LDRNE    a1,[fp,#&18]
+        CMNNE    a1,#1
+        BEQ      |L001b84.J67.jpeg_scan_file|
+        MOV      a1,#7
+        STMIA    v1,{a1,v4}
+        B        |L002040.J135.jpeg_scan_file|
+|L001b84.J67.jpeg_scan_file|
+        LDR      a2,[v1,#&18]
+        STR      a2,[sp,#&1c]
+        LDR      a1,[fp,#&1c]
+        TEQ      a2,a1
+        LDRNE    a1,[fp,#&1c]
+        CMNNE    a1,#1
+        BEQ      |L001bb8.J70.jpeg_scan_file|
+        MOV      a1,#6
+        STR      a1,[v1,#0]
+        LDR      a1,[sp,#&1c]
+        STR      a1,[v1,#4]!
+        MOV      a1,#6
+        B        |L002040.J135.jpeg_scan_file|
+|L001bb8.J70.jpeg_scan_file|
+        LDR      v6,[v1,#&50]
+        LDR      a1,[v6,#&c]
+        MOV      v5,a1,LSL #3
+        LDR      a1,[sp,#&1c]
+        ADD      a1,a1,v5
+        SUB      a2,a1,#1
+        MOV      a1,v5
+        BL       |__rt_sdiv|
+        ADD      a1,a1,a1,LSL #2
+        MOV      a1,a1,LSL #2
+        LDR      a2,[v1,#&28]
+        MOV      a1,a1,LSR #2
+        STR      a2,[v1,#&818]
+        ADD      a2,a2,a1,LSL #2
+        STR      a2,[v1,#&28]
+        LDR      a2,[v1,#&2c]
+        SUB      a2,a2,a1
+        MOV      a1,v5
+        STR      a2,[v1,#&2c]
+        BL       |__rt_sdiv|
+        MOV      a2,a1
+        CMP      a1,v4
+        BGE      |L001c2c.J73.jpeg_scan_file|
+        MOV      a1,#&a
+        STMIA    v1,{a1,v4}
+        MOV      a1,a2
+        STR      a1,[v1,#8]!
+        MOV      a1,#&a
+        B        |L002040.J135.jpeg_scan_file|
+|L001c2c.J73.jpeg_scan_file|
+        MOV      a2,#8
+        MOV      a1,#5
+        ADD      v5,v1,#&e4
+        TEQ      v3,#1
+        BNE      |L001d3c.J75.jpeg_scan_file|
+        LDR      a3,[v1,#&1c]
+        TEQ      a3,#1
+        MOVNE    a1,#8
+        STMNEIA  v1,{a2,a3}
+        BNE      |L002040.J135.jpeg_scan_file|
+        LDR      a2,[v6,#8]
+        TEQ      a2,#1
+        LDREQ    a2,[v6,#&c]
+        TEQEQ    a2,#1
+        BEQ      |L001c84.J79.jpeg_scan_file|
+        STR      a1,[v1,#0]
+        LDR      a1,[v6,#8]
+        STR      a1,[v1,#4]
+        LDR      a1,[v6,#&c]!
+        STR      a1,[v1,#8]!
+        MOV      a1,#5
+        B        |L002040.J135.jpeg_scan_file|
+|L001c84.J79.jpeg_scan_file|
+        SUB      sp,sp,#8
+        MOV      v4,#0
+        LDR      a1,[v1,#&cc]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      v6,[a2,#&64]!
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#4]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        MOV      v3,#0
+        STR      a1,[sp,#0]
+        LDR      a1,[sp,#&24]
+        CMP      a1,#0
+        BLE      |L001d30.J84.jpeg_scan_file|
+        ADD      a1,v1,#&118
+        STR      a1,[sp,#&20]
+|L001cd4.J83.jpeg_scan_file|
+        ADD      a1,v3,v3,LSL #2
+        LDR      a2,[v1,#&818]
+        ADD      a2,a2,a1,LSL #2
+        MOV      a1,v1
+        BL       save_huff_stream
+        ADD      v3,v3,#1
+        MOV      a4,#1
+        LDR      a1,[v1,#&14]
+        ADD      a1,a1,#7
+        MOV      a3,a1,ASR #3
+        MOV      a2,v5
+        LDR      a1,[sp,#0]
+        STMDB    sp!,{a1-a4}
+        MOV      a3,v6
+        MOV      a1,v1
+        LDR      a2,[sp,#&30]
+        LDR      a4,[sp,#&14]
+        BL       do_huff_skip_blocks
+        ADD      sp,sp,#&10
+        ADD      v4,v4,#8
+        LDR      a1,[v1,#&18]
+        CMP      v4,a1
+        BLT      |L001cd4.J83.jpeg_scan_file|
+|L001d30.J84.jpeg_scan_file|
+        ADD      sp,sp,#8
+        BIC      v2,v2,#&30
+        B        |L001fc0.J87.jpeg_scan_file|
+|L001d3c.J75.jpeg_scan_file|
+        TEQ      v3,#3
+        BNE      |L002038.J88.jpeg_scan_file|
+        LDR      a3,[v6,#&c]
+        STR      a3,[sp,#-4]!
+        LDR      a4,[v6,#8]
+        MOV      v3,a4
+        CMP      a4,#2
+        CMPLE    a3,#2
+        BLE      |L001d74.J90.jpeg_scan_file|
+        STR      a1,[v1,#0]
+        LDR      a1,[v6,#8]
+        STR      a1,[v1,#4]
+        LDR      a1,[v6,#&c]!
+        B        |L001dc0.J137.jpeg_scan_file|
+|L001d74.J90.jpeg_scan_file|
+        LDR      a3,[v6,#&40]
+        TEQ      a3,#1
+        LDREQ    a3,[v6,#&44]
+        TEQEQ    a3,#1
+        BEQ      |L001d9c.J94.jpeg_scan_file|
+        STR      a1,[v1,#0]
+        LDR      a1,[v6,#&40]
+        STR      a1,[v1,#4]
+        LDR      a1,[v6,#&44]!
+        B        |L001dc0.J137.jpeg_scan_file|
+|L001d9c.J94.jpeg_scan_file|
+        LDR      a3,[v6,#&78]
+        TEQ      a3,#1
+        LDREQ    a3,[v6,#&7c]
+        TEQEQ    a3,#1
+        BEQ      |L001dcc.J98.jpeg_scan_file|
+        STR      a1,[v1,#0]
+        LDR      a1,[v6,#&78]
+        STR      a1,[v1,#4]
+        LDR      a1,[v6,#&7c]!
+|L001dc0.J137.jpeg_scan_file|
+        STR      a1,[v1,#8]!
+        MOV      a1,#5
+        B        |L001de4.J138.jpeg_scan_file|
+|L001dcc.J98.jpeg_scan_file|
+        LDR      a1,[v1,#&1c]
+        TEQ      a1,#3
+        BEQ      |L001de8.J102.jpeg_scan_file|
+        STR      a1,[v1,#4]
+        STR      a2,[v1,#0]
+        MOV      a1,#8
+|L001de4.J138.jpeg_scan_file|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+|L001de8.J102.jpeg_scan_file|
+        TEQ      v3,#2
+        LDREQ    a1,[sp,#0]
+        TEQEQ    a1,#2
+        BICNE    v2,v2,#&30
+        SUB      sp,sp,#&28
+        MOV      a1,#0
+        MOV      v4,#0
+        STR      a1,[sp,#&24]
+        LDR      a1,[v1,#&cc]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#&20]
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#&1c]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        STR      a1,[sp,#&18]
+        LDR      a1,[v1,#&d0]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#&14]
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#&10]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        STR      a1,[sp,#&c]
+        LDR      a1,[v1,#&d4]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#8]
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#4]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        STR      a1,[sp,#0]
+        LDR      a1,[sp,#&48]
+        CMP      a1,#0
+        BLE      |L001fbc.J109.jpeg_scan_file|
+        LDR      a2,[sp,#&28]
+        MUL      a1,a2,v3
+        ADD      a2,v1,#&218
+        STR      a2,[sp,#&3c]
+        ADD      a2,v1,#&e8
+        STR      a2,[sp,#&38]
+        ADD      a2,v1,#&218
+        ADD      a2,a2,#&400
+        STR      a2,[sp,#&34]
+        ADD      a2,v1,#&ec
+        STR      a1,[sp,#&40]
+        ADD      a1,v1,#&318
+        ADD      a1,a1,#&400
+        STR      a1,[sp,#&2c]
+        STR      a2,[sp,#&30]
+|L001eec.J108.jpeg_scan_file|
+        ADD      a1,v4,v4,LSL #2
+        LDR      a2,[v1,#&818]
+        ADD      a2,a2,a1,LSL #2
+        MOV      a1,v1
+        BL       save_huff_stream
+        ADD      v4,v4,#1
+        MOV      v6,#0
+        LDR      a1,[v1,#&14]
+        CMP      a1,#0
+        BLE      |L001fa0.J112.jpeg_scan_file|
+|L001f14.J111.jpeg_scan_file|
+        MOV      a4,#0
+        MOV      a2,v5
+        LDR      a1,[sp,#&18]
+        LDR      a3,[sp,#&40]
+        STMDB    sp!,{a1-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&4c]
+        LDR      a3,[sp,#&30]
+        LDR      a4,[sp,#&2c]
+        BL       do_huff_skip_blocks
+        ADD      sp,sp,#&10
+        MOV      a4,#1
+        LDR      a2,[sp,#&c]
+        LDR      a3,[sp,#&38]
+        STMDB    sp!,{a2-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&40]
+        LDR      a3,[sp,#&20]
+        LDR      a4,[sp,#&1c]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        MOV      a4,#1
+        LDR      a2,[sp,#0]
+        LDR      a3,[sp,#&30]
+        STMDB    sp!,{a2-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&38]
+        LDR      a3,[sp,#&14]
+        LDR      a4,[sp,#&10]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        ADD      v6,v6,v3,LSL #3
+        LDR      a1,[v1,#&14]
+        CMP      v6,a1
+        BLT      |L001f14.J111.jpeg_scan_file|
+|L001fa0.J112.jpeg_scan_file|
+        ADD      a2,sp,#&24
+        LDMIA    a2,{a1,a2}
+        ADD      a2,a1,a2,LSL #3
+        STR      a2,[sp,#&24]
+        LDR      a1,[v1,#&18]
+        CMP      a2,a1
+        BLT      |L001eec.J108.jpeg_scan_file|
+|L001fbc.J109.jpeg_scan_file|
+        ADD      sp,sp,#&2c
+|L001fc0.J87.jpeg_scan_file|
+        TST      v2,#4
+        BEQ      |L001ffc.J117.jpeg_scan_file|
+        LDR      a1,[v1,#&50]
+        LDR      a1,[a1,#8]
+        MOV      a1,a1,LSL #3
+        LDR      a2,[v1,#&2c]
+        BL       |__rt_sdiv|
+        LDR      a2,[v1,#&14]
+        CMP      a1,a2,LSL #1
+        LDRLT    a1,[v1,#&100]
+        BICLT    a1,a1,#4
+        STRLT    a1,[v1,#&100]
+        LDRGE    a1,[v1,#4]
+        ORRGE    a1,a1,#4
+        STRGE    a1,[v1,#4]
+|L001ffc.J117.jpeg_scan_file|
+        TST      v2,#8
+        LDRNE    a1,[v1,#4]
+        ORRNE    a1,a1,#8
+        STRNE    a1,[v1,#4]
+        TST      v2,#&10
+        LDRNE    a1,[v1,#4]
+        ORRNE    a1,a1,#&10
+        STRNE    a1,[v1,#4]
+        TST      v2,#&20
+        LDRNE    a1,[v1,#4]
+        ORRNE    a1,a1,#&20
+        STRNE    a1,[v1,#4]
+        STR      v2,[v1,#&100]
+        LDR      a1,[v1,#0]
+        B        |L002040.J135.jpeg_scan_file|
+|L002038.J88.jpeg_scan_file|
+        MOV      a1,#9
+        STMIA    v1,{a1,v3}
+|L002040.J135.jpeg_scan_file|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+        IMPORT  asm_j_rev_dct
+        IMPORT  asm_mono_convert_block
+        IMPORT  asm_colour_convert_block_16
+        IMPORT  asm_colour_convert_block
+        IMPORT  asm_colour_convert_block_8
+        IMPORT  asm_get_table32k
+        IMPORT  asm_diffuse_to_8bpp
+jpeg_find_line
+        MOV      ip,sp
+        STMDB    sp!,{a1-a3,v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        LDR      a1,[a1,#&50]
+        LDR      a1,[a1,#&c]
+        ADD      a1,a1,#2
+        STR      a1,[sp,#-&34]!
+        LDR      a1,[v1,#&2c]
+        LDR      a2,[sp,#0]
+        MOV      v4,a1,ASR a2
+        LDR      a1,[v1,#&18]
+        LDR      a2,[fp,#-&2c]
+        SUB      a1,a1,a2
+        SUBS     a1,a1,#1
+        STR      a1,[fp,#-&2c]
+        MOVMI    a2,#4
+        MOVMI    a1,#&8e
+        ADDMI    a1,a1,#&200
+        BLMI     exit_c
+        LDR      a2,[fp,#-&2c]
+        LDR      a1,[v1,#&18]
+        CMP      a2,a1
+        MOVGE    a2,#4
+        MOVGE    a1,#&8f
+        ADDGE    a1,a1,#&200
+        BLGE     exit_c
+        LDR      a2,[fp,#-&2c]
+        LDR      a1,[sp,#0]
+        MOV      a2,a2,ASR a1
+        STR      a2,[sp,#4]
+        LDR      a1,[v1,#&f4]
+        TEQ      a2,a1
+        BEQ      |L002900.J8.jpeg_find_line|
+        SUB      sp,sp,#4
+        LDR      a1,[v1,#&28]
+        TEQ      a1,#0
+        MOVEQ    a2,#4
+        MOVEQ    a1,#&a2
+        ADDEQ    a1,a1,#&200
+        BLEQ     exit_c
+        MVN      a1,#0
+        STR      a1,[v1,#&f4]
+        LDR      a1,[sp,#8]
+        ADD      a2,a1,a1,LSL #2
+        LDR      a1,[v1,#&818]
+        ADD      a2,a1,a2,LSL #2
+        MOV      a1,v1
+        BL       restore_huff_stream
+        LDR      a1,[v1,#&4c]
+        ADD      a3,v1,#&e4
+        ADD      v6,v1,#&118
+        ADD      a2,v1,#&218
+        TEQ      a1,#1
+        STR      a2,[sp,#&30]
+        STR      a3,[sp,#&34]
+        BNE      |L0022bc.J12.jpeg_find_line|
+        SUB      sp,sp,#8
+        MOV      v3,#0
+        LDR      a1,[v1,#&cc]
+        LDR      v2,[v1,#&28]
+        LDR      a2,[a1,#&10]
+        ADD      a2,v1,a2,LSL #2
+        LDR      v5,[a2,#&54]!
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#4]
+        LDR      a1,[a1,#&18]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&74]
+        STR      a1,[sp,#0]
+        LDR      a1,[v1,#&f8]
+        CMP      a1,#8
+        BLT      |L0021b4.J14.jpeg_find_line|
+        SUB      a1,a1,#8
+        MOV      a1,a1,ASR #3
+        MOV      a4,#1
+        STR      a1,[sp,#-4]!
+        MOV      a3,a1
+        MOV      a1,v5
+        LDR      a2,[sp,#&40]
+        STMDB    sp!,{a1-a4}
+        MOV      a2,v6
+        MOV      a1,v1
+        LDR      a3,[sp,#&18]
+        LDR      a4,[sp,#&14]
+        BL       do_huff_skip_blocks
+        LDR      a1,[sp,#&10]!
+        ADD      v3,v3,a1,LSL #3
+        ADD      v2,v2,a1,LSL #5
+        ADD      sp,sp,#4
+|L0021b4.J14.jpeg_find_line|
+        LDR      a1,[v1,#&100]
+        TST      a1,#2
+        LDR      a1,[v1,#&fc]
+        BEQ      |L002248.J16.jpeg_find_line|
+        CMP      v3,a1
+        BGE      |L002240.J19.jpeg_find_line|
+|L0021cc.J18.jpeg_find_line|
+        MOV      a4,#1
+        MOV      a3,#1
+        MOV      a1,v5
+        LDR      a2,[sp,#&3c]
+        STMDB    sp!,{a1-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&48]
+        LDR      a3,[sp,#&14]
+        LDR      a4,[sp,#&10]
+        BL       do_huff_skip_blocks
+        ADD      sp,sp,#&10
+        LDR      a2,[v1,#&e4]
+        LDR      a1,[v5,#0]
+        MUL      a2,a1,a2
+        MOV      a1,v1
+        BL       mono_convert_pixel
+        STR      a1,[v2,#0]
+        STR      a1,[v2,#4]
+        STR      a1,[v2,#8]
+        STR      a1,[v2,#&c]
+        STR      a1,[v2,#&10]
+        STR      a1,[v2,#&14]
+        STR      a1,[v2,#&18]
+        ADD      v3,v3,#8
+        STR      a1,[v2,#&1c]!
+        ADD      v2,v2,#4
+        LDR      a1,[v1,#&fc]
+        CMP      v3,a1
+        BLT      |L0021cc.J18.jpeg_find_line|
+|L002240.J19.jpeg_find_line|
+        MOV      a1,#1
+        B        |L0022b4.J127.jpeg_find_line|
+|L002248.J16.jpeg_find_line|
+        CMP      v3,a1
+        BGE      |L0022b0.J24.jpeg_find_line|
+|L002250.J23.jpeg_find_line|
+        MOV      a4,#1
+        MOV      a3,#1
+        MOV      a1,v5
+        LDR      a2,[sp,#&3c]
+        STMDB    sp!,{a1-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&48]
+        LDR      a3,[sp,#&14]
+        LDR      a4,[sp,#&10]
+        BL       do_huff_decode_blocks
+        ADD      sp,sp,#&10
+        MOV      a1,v1
+        MOV      a3,#1
+        LDR      a2,[sp,#&38]
+        BL       asm_j_rev_dct
+        MOV      a1,v6
+        MOV      a3,v4
+        MOV      a2,v2
+        BL       asm_mono_convert_block
+        ADD      v3,v3,#8
+        ADD      v2,v2,#&20
+        LDR      a1,[v1,#&fc]
+        CMP      v3,a1
+        BLT      |L002250.J23.jpeg_find_line|
+|L0022b0.J24.jpeg_find_line|
+        MOV      a1,#8
+|L0022b4.J127.jpeg_find_line|
+        STR      a1,[sp,#8]!
+        B        |L002828.J27.jpeg_find_line|
+|L0022bc.J12.jpeg_find_line|
+        SUB      sp,sp,#&28
+        MOV      v5,#0
+        LDR      a1,[v1,#&cc]
+        LDR      v2,[v1,#&28]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#&24]
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#&20]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        STR      a1,[sp,#&1c]
+        LDR      a1,[v1,#&d0]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#&18]
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#&14]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        STR      a1,[sp,#&10]
+        LDR      a1,[v1,#&d4]
+        LDR      a2,[a1,#&14]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&64]
+        STR      a2,[sp,#&c]
+        LDR      a2,[a1,#&18]
+        ADD      a2,v1,a2,LSL #2
+        LDR      a2,[a2,#&74]
+        STR      a2,[sp,#8]
+        LDR      a1,[a1,#&10]
+        ADD      a1,v1,a1,LSL #2
+        LDR      a1,[a1,#&54]
+        STR      a1,[sp,#4]
+        LDR      a1,[v1,#&50]
+        LDR      a2,[a1,#&c]
+        STR      a2,[sp,#0]
+        LDR      v3,[a1,#8]!
+        ADD      a1,v5,v3,LSL #3
+        LDR      a2,[v1,#&f8]
+        ADD      a4,v1,#&e8
+        ADD      a3,v1,#&ec
+        CMP      a1,a2
+        STR      a3,[sp,#&50]
+        STR      a4,[sp,#&54]
+        BGT      |L00244c.J29.jpeg_find_line|
+        LDR      a2,[sp,#0]
+        MUL      a1,a2,v3
+        STR      a1,[sp,#&4c]
+|L0023a0.J28.jpeg_find_line|
+        MOV      a4,#0
+        LDR      a1,[sp,#&1c]
+        LDR      a2,[sp,#&5c]
+        LDR      a3,[sp,#&4c]
+        STMDB    sp!,{a1-a4}
+        MOV      a2,v6
+        MOV      a1,v1
+        LDR      a3,[sp,#&34]
+        LDR      a4,[sp,#&30]
+        BL       do_huff_skip_blocks
+        ADD      sp,sp,#&10
+        MOV      a4,#1
+        LDR      a2,[sp,#&10]
+        LDR      a3,[sp,#&54]
+        STMDB    sp!,{a2-a4}
+        MOV      a2,v6
+        MOV      a1,v1
+        LDR      a3,[sp,#&24]
+        LDR      a4,[sp,#&20]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        MOV      a4,#1
+        LDR      a2,[sp,#4]
+        LDR      a3,[sp,#&50]
+        STMDB    sp!,{a2-a4}
+        MOV      a2,v6
+        MOV      a1,v1
+        LDR      a3,[sp,#&18]
+        LDR      a4,[sp,#&14]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        ADD      v5,v5,v3,LSL #3
+        LDR      a1,[v1,#&100]
+        TST      a1,#&10
+        ADDNE    v2,v2,v3,LSL #4
+        BNE      |L00243c.J33.jpeg_find_line|
+        TST      a1,#&20
+        ADDEQ    v2,v2,v3,LSL #5
+        ADDNE    v2,v2,v3,LSL #3
+|L00243c.J33.jpeg_find_line|
+        ADD      a2,v5,v3,LSL #3
+        LDR      a1,[v1,#&f8]
+        CMP      a2,a1
+        BLE      |L0023a0.J28.jpeg_find_line|
+|L00244c.J29.jpeg_find_line|
+        LDR      a1,[v1,#&100]
+        TST      a1,#2
+        ADD      a1,v1,#&318
+        ADD      a1,a1,#&400
+        STR      a1,[sp,#&48]
+        MOV      a1,#2
+        ADD      a3,v1,#&218
+        ADD      a3,a3,#&400
+        STR      a3,[sp,#&44]
+        LDR      a2,[v1,#&fc]
+        BEQ      |L002628.J38.jpeg_find_line|
+        CMP      v5,a2
+        BGE      |L002620.J41.jpeg_find_line|
+        LDR      a2,[sp,#0]
+        MUL      a1,a2,v3
+        STR      a1,[sp,#&40]
+|L00248c.J40.jpeg_find_line|
+        SUB      sp,sp,#&10
+        MOV      a4,#0
+        MOV      a3,#1
+        LDR      a1,[sp,#&2c]
+        LDR      a2,[sp,#&6c]
+        STMDB    sp!,{a1-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&78]
+        LDR      a3,[sp,#&44]
+        LDR      a4,[sp,#&40]
+        BL       do_huff_skip_blocks
+        ADD      sp,sp,#&10
+        LDR      a2,[v1,#&e4]
+        LDR      a1,[sp,#&2c]
+        LDR      a1,[a1,#0]
+        MUL      a2,a1,a2
+        MOV      v6,#1
+        STR      a2,[sp,#0]
+        LDR      a1,[sp,#&50]
+        CMP      a1,#1
+        BLE      |L002530.J44.jpeg_find_line|
+|L0024e0.J43.jpeg_find_line|
+        MOV      a4,#1
+        LDR      a2,[sp,#&2c]
+        LDR      a3,[sp,#&6c]
+        STMDB    sp!,{a2-a4}
+        ADD      a1,v1,v6,LSL #8
+        ADD      a2,a1,#&218
+        MOV      a1,v1
+        LDR      a3,[sp,#&40]
+        LDR      a4,[sp,#&3c]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        LDR      a2,[v1,#&e4]
+        LDR      a1,[sp,#&2c]
+        LDR      a1,[a1,#0]
+        MUL      a2,a1,a2
+        STR      a2,[sp,v6,LSL #2]
+        ADD      v6,v6,#1
+        LDR      a1,[sp,#&50]
+        CMP      a1,v6
+        BGT      |L0024e0.J43.jpeg_find_line|
+|L002530.J44.jpeg_find_line|
+        MOV      a4,#1
+        LDR      a2,[sp,#&20]
+        LDR      a3,[sp,#&64]
+        STMDB    sp!,{a2-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&60]
+        LDR      a3,[sp,#&34]
+        LDR      a4,[sp,#&30]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        MOV      a4,#1
+        LDR      a2,[sp,#&14]
+        LDR      a3,[sp,#&60]
+        STMDB    sp!,{a2-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&64]
+        LDR      a3,[sp,#&28]
+        LDR      a4,[sp,#&24]
+        BL       asm_huff_skip_blocks
+        ADD      sp,sp,#&c
+        LDR      a2,[v1,#&e8]
+        LDR      a1,[sp,#&20]
+        LDR      a1,[a1,#0]
+        MUL      a2,a1,a2
+        LDR      a3,[v1,#&ec]
+        LDR      a1,[sp,#&14]
+        LDR      a1,[a1,#0]
+        MUL      a3,a1,a3
+        MOV      a1,sp
+        BL       colour_convert_pixels
+        MOV      v6,#0
+        MOV      a3,#2
+        MOV      a4,#1
+|L0025b4.J47.jpeg_find_line|
+        LDR      a1,[sp,#0]
+        STR      a1,[v2,v6,LSL #2]
+        TEQ      v3,#2
+        ADDEQ    a2,v2,v6,LSL #2
+        LDREQ    a1,[sp,#4]
+        STREQ    a1,[a2,#&20]!
+        LDR      a1,[sp,#&10]
+        TEQ      a1,#2
+        BNE      |L0025fc.J50.jpeg_find_line|
+        CMP      v3,#2
+        MOVNE    a1,a4
+        MOVEQ    a1,a3
+        LDR      a2,[sp,a1,LSL #2]
+        ADD      a1,v4,v6
+        STR      a2,[v2,a1,LSL #2]
+        ADDEQ    a1,v2,a1,LSL #2
+        LDREQ    a2,[sp,#&c]
+        STREQ    a2,[a1,#&20]!
+|L0025fc.J50.jpeg_find_line|
+        ADD      v6,v6,#1
+        CMP      v6,#8
+        BLT      |L0025b4.J47.jpeg_find_line|
+        ADD      v5,v5,v3,LSL #3
+        ADD      v2,v2,v3,LSL #5
+        ADD      sp,sp,#&10
+        LDR      a1,[v1,#&fc]
+        CMP      v5,a1
+        BLT      |L00248c.J40.jpeg_find_line|
+|L002620.J41.jpeg_find_line|
+        LDR      a1,[sp,#0]
+        B        |L002824.J128.jpeg_find_line|
+|L002628.J38.jpeg_find_line|
+        CMP      v5,a2
+        BGE      |L00281c.J61.jpeg_find_line|
+        ADD      a1,v1,#&18
+        ADD      a1,a1,#&400
+        STR      a1,[sp,#&3c]
+        LDR      a2,[sp,#0]
+        MUL      a1,a2,v3
+        STR      a1,[sp,#&38]
+|L002648.J60.jpeg_find_line|
+        MOV      a4,#0
+        LDR      a1,[sp,#&1c]
+        LDR      a2,[sp,#&5c]
+        LDR      a3,[sp,#&38]
+        STMDB    sp!,{a1-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&68]
+        LDR      a3,[sp,#&34]
+        LDR      a4,[sp,#&30]
+        BL       do_huff_decode_blocks
+        ADD      sp,sp,#&10
+        MOV      a4,#1
+        LDR      a2,[sp,#&10]
+        LDR      a3,[sp,#&54]
+        STMDB    sp!,{a2-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&50]
+        LDR      a3,[sp,#&24]
+        LDR      a4,[sp,#&20]
+        BL       asm_huff_decode_blocks
+        ADD      sp,sp,#&c
+        MOV      a4,#1
+        LDR      a2,[sp,#4]
+        LDR      a3,[sp,#&50]
+        STMDB    sp!,{a2-a4}
+        MOV      a1,v1
+        LDR      a2,[sp,#&54]
+        LDR      a3,[sp,#&18]
+        LDR      a4,[sp,#&14]
+        BL       asm_huff_decode_blocks
+        ADD      sp,sp,#&c
+        LDR      a1,[v1,#&100]
+        TST      a1,#1
+        BEQ      |L002758.J63.jpeg_find_line|
+        MOV      a1,v1
+        LDR      a2,[sp,#&58]
+        LDR      a3,[sp,#&38]
+        BL       asm_j_rev_dct
+        MOV      a1,v6
+        MOV      a3,v4
+        MOV      a2,v2
+        BL       asm_mono_convert_block
+        TEQ      v3,#2
+        BNE      |L002708.J65.jpeg_find_line|
+        ADD      a2,v2,#&20
+        MOV      a3,v4
+        LDR      a1,[sp,#&58]
+        BL       asm_mono_convert_block
+|L002708.J65.jpeg_find_line|
+        LDR      a1,[sp,#0]
+        TEQ      a1,#2
+        BNE      |L0027f0.J74.jpeg_find_line|
+        ADD      a2,v2,v4,LSL #5
+        TEQ      v3,#1
+        STR      a2,[sp,#&34]
+        MOVNE    a1,#2
+        MOVEQ    a1,#1
+        ADD      a1,v1,a1,LSL #8
+        ADD      a1,a1,#&118
+        MOV      a3,v4
+        BL       asm_mono_convert_block
+        TEQ      v3,#2
+        BNE      |L0027f0.J74.jpeg_find_line|
+        LDR      a1,[sp,#&34]
+        ADD      a2,a1,#&20
+        MOV      a3,v4
+        LDR      a1,[sp,#&3c]
+        BL       asm_mono_convert_block
+        B        |L0027f0.J74.jpeg_find_line|
+|L002758.J63.jpeg_find_line|
+        LDR      a1,[sp,#&38]
+        TEQ      a1,#4
+        BNE      |L0027b0.J75.jpeg_find_line|
+        MOV      a1,v1
+        MOV      a3,#6
+        LDR      a2,[sp,#&58]
+        BL       asm_j_rev_dct
+        LDR      a1,[v1,#&100]
+        TST      a1,#&10
+        BEQ      |L002794.J77.jpeg_find_line|
+        MOV      a1,v6
+        MOV      a3,v4
+        MOV      a2,v2
+        BL       asm_colour_convert_block_16
+        B        |L0027f0.J74.jpeg_find_line|
+|L002794.J77.jpeg_find_line|
+        TST      a1,#&20
+        MOV      a1,v6
+        MOV      a3,v4
+        MOV      a2,v2
+        BLEQ     asm_colour_convert_block
+        BLNE     asm_colour_convert_block_8
+        B        |L0027f0.J74.jpeg_find_line|
+|L0027b0.J75.jpeg_find_line|
+        MOV      a1,v1
+        LDR      a2,[sp,#&58]
+        LDR      a3,[sp,#&38]
+        BL       asm_j_rev_dct
+        MOV      a1,v1
+        MOV      a3,#2
+        LDR      a2,[sp,#&44]
+        BL       asm_j_rev_dct
+        LDR      a4,[sp,#0]
+        STMDB    sp!,{a4}
+        MOV      a1,v6
+        MOV      a4,v3
+        MOV      a3,v4
+        MOV      a2,v2
+        BL       colour_convert_unusual_block
+        ADD      sp,sp,#4
+|L0027f0.J74.jpeg_find_line|
+        ADD      v5,v5,v3,LSL #3
+        LDR      a1,[v1,#&100]
+        TST      a1,#&10
+        ADDNE    v2,v2,v3,LSL #4
+        BNE      |L002810.J86.jpeg_find_line|
+        TST      a1,#&20
+        ADDEQ    v2,v2,v3,LSL #5
+        ADDNE    v2,v2,v3,LSL #3
+|L002810.J86.jpeg_find_line|
+        LDR      a1,[v1,#&fc]
+        CMP      v5,a1
+        BLT      |L002648.J60.jpeg_find_line|
+|L00281c.J61.jpeg_find_line|
+        LDR      a1,[sp,#0]
+        MOV      a1,a1,LSL #3
+|L002824.J128.jpeg_find_line|
+        STR      a1,[sp,#&28]!
+|L002828.J27.jpeg_find_line|
+        LDR      a1,[v1,#&100]
+        TST      a1,#8
+        BEQ      |L0028f4.J91.jpeg_find_line|
+        LDR      a1,[v1,#&20]
+        TEQ      a1,#0
+        BNE      |L002860.J93.jpeg_find_line|
+        LDR      a1,[v1,#&24]
+        TEQ      a1,#0
+        BNE      |L002860.J93.jpeg_find_line|
+        BL       asm_get_table32k
+        STR      a1,[v1,#&20]
+        TEQ      a1,#0
+        MOVEQ    a1,#1
+        STREQ    a1,[v1,#&24]
+|L002860.J93.jpeg_find_line|
+        LDR      a1,[v1,#&f8]
+        MOV      a2,a1
+        LDR      a4,[v1,#&28]
+        ADD      v3,a4,a1,LSL #2
+        LDR      a3,[v1,#&fc]
+        SUB      a3,a3,a1
+        ADD      v6,a4,a1
+        ADD      a3,a3,#&f
+        BIC      v2,a3,#&f
+        LDR      a3,[v1,#&14]
+        SUB      a1,a3,a1
+        CMP      a1,v2
+        MOVLT    v2,a1
+        LDR      a1,[v1,#&100]
+        TST      a1,#4
+        ADDNE    v3,v3,a2,LSL #2
+        MOVNE    v2,v2,LSL #1
+        CMP      v2,#0
+        BLE      |L0028f4.J91.jpeg_find_line|
+|L0028ac.J102.jpeg_find_line|
+        CMP      v2,#&20
+        MOVLT    v5,v2
+        MOVGE    v5,#&10
+        MOV      a3,v4
+        LDR      a4,[fp,#-&28]
+        LDR      a2,[sp,#0]
+        STMDB    sp!,{a2-a4}
+        MOV      a3,v6
+        MOV      a2,v5
+        MOV      a1,v3
+        LDR      a4,[v1,#&20]
+        BL       asm_diffuse_to_8bpp
+        ADD      sp,sp,#&c
+        ADD      v3,v3,v5,LSL #2
+        ADD      v6,v6,v5
+        SUB      v2,v2,v5
+        CMP      v2,#0
+        BGT      |L0028ac.J102.jpeg_find_line|
+|L0028f4.J91.jpeg_find_line|
+        LDR      a1,[sp,#8]
+        ADD      sp,sp,#4
+        STR      a1,[v1,#&f4]
+|L002900.J8.jpeg_find_line|
+        LDR      a1,[v1,#&28]!
+        LDR      a2,[v1,#&d8]!
+        TST      a2,#2
+        LDR      a2,[sp,#0]
+        BEQ      |L002930.J109.jpeg_find_line|
+        TEQ      a2,#4
+        BNE      |L00294c.J129.jpeg_find_line|
+        LDR      a2,[fp,#-&2c]
+        AND      a2,a2,#&f
+        CMP      a2,#8
+        ADDGE    a1,a1,v4,LSL #2
+        B        |L00294c.J129.jpeg_find_line|
+|L002930.J109.jpeg_find_line|
+        MOV      a3,#1
+        MOV      a2,a3,LSL a2
+        SUB      a2,a2,#1
+        LDR      a3,[fp,#-&2c]
+        AND      a2,a2,a3
+        MUL      a2,v4,a2
+        ADD      a1,a1,a2,LSL #2
+|L00294c.J129.jpeg_find_line|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+looks_like_jpeg
+        LDR      a2,[a1,#0]
+        ADD      ip,a2,#&1f000000
+        ADD      ip,ip,#&2700
+        CMN      ip,#1
+        BNE      |L002994.J5.looks_like_jpeg|
+        LDRB     a2,[a1,#6]
+        TEQ      a2,#&4a
+        LDREQB   a2,[a1,#7]
+        TEQEQ    a2,#&46
+        LDREQB   a2,[a1,#8]
+        TEQEQ    a2,#&49
+        LDREQB   a2,[a1,#9]
+        TEQEQ    a2,#&46
+        LDREQB   a1,[a1,#&a]
+        TEQEQ    a1,#0
+        MOVEQ    a1,#1
+        MOVEQS   pc,lr
+|L002994.J5.looks_like_jpeg|
+        MOV      a1,#0
+        MOVS     pc,lr
+
+        IMPORT  _swix
+find_image_dims
+        MOV      ip,sp
+        STMDB    sp!,{a1-a4}
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#&14
+        MOV      v4,a1
+        SUB      sp,sp,#&14
+        SUB      sp,sp,#&400
+        MOV      a1,#0
+        LDR      v1,[fp,#&1c]
+        LDR      v3,[fp,#&18]
+        MOV      v2,#0
+        STR      a1,[sp,#&40c]
+        AND      a1,v3,#3
+        TEQ      a1,#1
+        BNE      |L002a60.J6.find_image_dims|
+        MOV      v2,#1
+        ADD      a4,sp,#8
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a3,#&4f
+        MOV      a2,#&80000003
+        MOV      a1,#&d
+        BL       _swix
+        ADD      sp,sp,#4
+        MOVS     a2,a1
+        BEQ      |L002a0c.J8.find_image_dims|
+|L002a04.J9.find_image_dims|
+        STR      a2,[v1,#0]
+        B        |L002dec.J95.find_image_dims|
+|L002a0c.J8.find_image_dims|
+        ADD      v4,sp,#&c
+        ADD      a4,sp,#4
+        MOV      a3,#&400
+        MOV      a2,v4
+        STMDB    sp!,{a2-a4}
+        MOV      a3,#4
+        MOV      a2,#&2000000f
+        MOV      a1,#&c
+        LDR      a4,[sp,#&14]
+        BL       _swix
+        ADD      sp,sp,#&c
+        MOVS     v5,a1
+        BEQ      |L002a60.J6.find_image_dims|
+        MOV      a3,#0
+        MOV      a2,#3
+        MOV      a1,#&d
+        LDR      a4,[sp,#8]
+        BL       _swix
+        STR      v5,[v1,#0]
+        MOV      a1,v5
+        B        |L002dec.J95.find_image_dims|
+|L002a60.J6.find_image_dims|
+        MOV      a1,v4
+        BL       looks_like_jpeg
+        TEQ      a1,#0
+        BNE      |L002a9c.J12.find_image_dims|
+        TEQ      v2,#0
+        BEQ      |L002a94.J14.find_image_dims|
+        MOV      a3,#0
+        MOV      a2,#3
+        MOV      a1,#&d
+        LDR      a4,[sp,#8]
+        BL       _swix
+        MOVS     a2,a1
+        BNE      |L002a04.J9.find_image_dims|
+|L002a94.J14.find_image_dims|
+        MOV      a1,#1
+        B        |L002dec.J95.find_image_dims|
+|L002a9c.J12.find_image_dims|
+        LDRB     a1,[v4,#&d]
+        TEQ      a1,#1
+        BNE      |L002acc.J18.find_image_dims|
+        LDRB     a1,[v4,#&e]
+        MOV      a1,a1,LSL #24
+        LDRB     a2,[v4,#&f]
+        ADD      a1,a1,a2,LSL #16
+        LDRB     a2,[v4,#&10]
+        ADD      a1,a1,a2,LSL #8
+        LDRB     a2,[v4,#&11]
+        ADD      a1,a1,a2
+        B        |L002b40.J92.find_image_dims|
+|L002acc.J18.find_image_dims|
+        TEQ      a1,#2
+        BNE      |L002b48.J21.find_image_dims|
+        LDRB     a1,[v4,#&e]
+        RSB      a2,a1,a1,LSL #7
+        MOV      a2,a2,LSL #1
+        MOV      a1,#&64
+        BL       |__rt_sdiv|
+        MOV      v5,a1
+        LDRB     a1,[v4,#&f]
+        RSB      a2,a1,a1,LSL #7
+        MOV      a2,a2,LSL #1
+        MOV      a1,#&64
+        BL       |__rt_sdiv|
+        ADD      a1,a1,#&18
+        MOV      v5,v5,LSL a1
+        LDRB     a1,[v4,#&10]
+        RSB      a2,a1,a1,LSL #7
+        MOV      a2,a2,LSL #1
+        MOV      a1,#&64
+        BL       |__rt_sdiv|
+        ADD      a1,a1,#&10
+        MOV      v5,v5,LSL a1
+        LDRB     a1,[v4,#&11]
+        RSB      a2,a1,a1,LSL #7
+        MOV      a2,a2,LSL #1
+        MOV      a1,#&64
+        BL       |__rt_sdiv|
+        ADD      a1,a1,#8
+        MOV      a1,v5,LSL a1
+|L002b40.J92.find_image_dims|
+        STR      a1,[sp,#0]
+        B        |L002b8c.J20.find_image_dims|
+|L002b48.J21.find_image_dims|
+        LDRB     a1,[v4,#&f]
+        LDRB     a2,[v4,#&e]
+        ADDS     a1,a1,a2,LSL #8
+        MOVEQ    a1,#1
+        LDRB     a2,[v4,#&11]
+        LDRB     a3,[v4,#&10]
+        ADD      a2,a2,a3,LSL #8
+        BL       |__rt_sdiv|
+        TEQ      a1,#0
+        RSBNE    a1,a1,a1,LSL #4
+        ADDNE    a1,a1,a1,LSL #1
+        MOVNE    a1,a1,LSL #1
+        MOVEQ    a1,#&5a
+        ORR      a1,a1,#&5a0000
+        STR      a1,[sp,#0]
+        MOV      a1,#&100
+        STR      a1,[sp,#&40c]
+|L002b8c.J20.find_image_dims|
+        ADD      v4,v4,#2
+|L002b90.J88.find_image_dims|
+        LDR      a1,[sp,#4]
+        B        |L002c60.J30.find_image_dims|
+|L002b98.J29.find_image_dims|
+        LDRB     a2,[v4,#3]
+        LDRB     a3,[v4,#2]
+        ADD      a2,a2,a3,LSL #8
+        ADD      a2,a2,v4
+        ADD      v4,a2,#2
+        TEQ      v2,#0
+        BEQ      |L002c60.J30.find_image_dims|
+        CMP      v4,a1
+        BLT      |L002c60.J30.find_image_dims|
+        SUB      v5,v4,a1
+        ADD      v4,sp,#&c
+        ADD      a4,sp,#4
+        MOV      a3,#&400
+        MOV      a2,v4
+        STMDB    sp!,{a2-a4}
+        MOV      a3,#4
+        MOV      a2,#&2000000f
+        MOV      a1,#&c
+        LDR      a4,[sp,#&14]
+        BL       _swix
+        ADD      sp,sp,#&c
+        MOVS     v6,a1
+        BEQ      |L002c14.J35.find_image_dims|
+|L002bf4.J36.find_image_dims|
+        MOV      a3,#0
+        MOV      a2,#3
+        MOV      a1,#&d
+        LDR      a4,[sp,#8]
+        BL       _swix
+        STR      v6,[v1,#0]
+        MOV      a1,v6
+        B        |L002dec.J95.find_image_dims|
+|L002c14.J35.find_image_dims|
+        CMP      v5,#&400
+        BLE      |L002c58.J38.find_image_dims|
+|L002c1c.J37.find_image_dims|
+        ADD      a4,sp,#4
+        MOV      a3,#&400
+        MOV      a2,v4
+        STMDB    sp!,{a2-a4}
+        MOV      a3,#4
+        MOV      a2,#&2000000f
+        MOV      a1,#&c
+        LDR      a4,[sp,#&14]
+        BL       _swix
+        ADD      sp,sp,#&c
+        MOVS     v6,a1
+        BNE      |L002bf4.J36.find_image_dims|
+        SUB      v5,v5,#&400
+        CMP      v5,#&400
+        BGT      |L002c1c.J37.find_image_dims|
+|L002c58.J38.find_image_dims|
+        ADD      v4,v4,v5
+        B        |L002b90.J88.find_image_dims|
+|L002c60.J30.find_image_dims|
+        LDRB     a2,[v4,#0]
+        TEQ      a2,#&ff
+        BNE      |L002c84.J43.find_image_dims|
+        LDRB     a2,[v4,#1]
+        TEQ      a2,#&c0
+        TEQNE    a2,#&c1
+        TEQNE    a2,#&c9
+        BNE      |L002b98.J29.find_image_dims|
+        B        |L002c98.J49.find_image_dims|
+|L002c84.J43.find_image_dims|
+        LDRB     a1,[v4,#1]
+        TEQ      a1,#&c0
+        TEQNE    a1,#&c1
+        TEQNE    a1,#&c9
+        BNE      |L002a94.J14.find_image_dims|
+|L002c98.J49.find_image_dims|
+        LDRB     a1,[v4,#6]
+        LDRB     a2,[v4,#5]
+        ADD      v5,a1,a2,LSL #8
+        LDRB     a1,[v4,#8]
+        LDRB     a2,[v4,#7]
+        ADD      a1,a1,a2,LSL #8
+        STR      a1,[sp,#&410]
+        LDRB     a1,[v4,#9]
+        LDR      a2,[sp,#&40c]
+        ORR      v6,a1,a2
+        CMP      v3,#3
+        BLE      |L002d78.J54.find_image_dims|
+        SUB      sp,sp,#8
+        BIC      v3,v3,#3
+        LDR      a1,[v3,#0]
+        CMP      v6,#1
+        STR      a1,[sp,#4]
+        MOVNE    a1,#&10
+        MOVEQ    a1,#8
+        LDR      a2,[sp,#&418]
+        ADD      a2,a2,#&f
+        MUL      a1,a2,a1
+        MOV      a2,a1,LSL #2
+        BNE      |L002d08.J60.find_image_dims|
+        ADDS     a1,v5,#7
+        ADDMI    a1,a1,#7
+        MOV      a1,a1,ASR #3
+        B        |L002d0c.J59.find_image_dims|
+|L002d08.J60.find_image_dims|
+        MOV      a1,v5
+|L002d0c.J59.find_image_dims|
+        ADD      a1,a1,a1,LSL #2
+        ADD      a1,a2,a1,LSL #2
+        ADD      a1,a1,#&ff
+        ADD      a1,a1,#&3d00
+        BIC      v4,a1,#3
+        MOV      a3,sp
+        MOV      a2,#&80000000
+        MOV      a1,#&51
+        BL       _swix
+        LDR      a1,[sp,#4]
+        TEQ      a1,#0
+        LDREQ    a1,[sp,#0]
+        ADDEQ    a2,v4,a1
+        BEQ      |L002d64.J93.find_image_dims|
+        LDR      a1,[sp,#4]
+        LDR      a1,[a1,#&10]
+        CMP      a1,v4
+        MOVGE    a1,#0
+        BGE      |L002d70.J66.find_image_dims|
+        SUB      a2,v4,a1
+        LDR      a1,[sp,#0]
+        ADD      a2,a2,a1
+|L002d64.J93.find_image_dims|
+        SUB      a2,a2,#1
+        SUB      a1,a1,#1
+        BIC      a1,a2,a1
+|L002d70.J66.find_image_dims|
+        ADD      sp,sp,#8
+        STR      a1,[v3,#0]
+|L002d78.J54.find_image_dims|
+        LDR      a1,[fp,#&c]
+        TEQ      a1,#0
+        LDRNE    a1,[fp,#&c]
+        STRNE    v5,[a1,#0]
+        LDR      a1,[fp,#8]
+        TEQ      a1,#0
+        LDRNE    a1,[sp,#&410]
+        LDRNE    a2,[fp,#8]
+        STRNE    a1,[a2,#0]
+        LDR      a1,[fp,#&10]
+        TEQ      a1,#0
+        MOVNE    a1,v6
+        LDRNE    a2,[fp,#&10]
+        STRNE    a1,[a2,#0]
+        LDR      a1,[fp,#&14]
+        CMP      a1,#0
+        LDRNE    a1,[sp,#0]
+        LDRNE    a2,[fp,#&14]
+        STRNE    a1,[a2,#0]
+        TEQ      v2,#0
+        BEQ      |L002de8.J80.find_image_dims|
+        MOV      a3,#0
+        MOV      a2,#3
+        MOV      a1,#&d
+        LDR      a4,[sp,#8]
+        BL       _swix
+        MOVS     a2,a1
+        BNE      |L002a04.J9.find_image_dims|
+|L002de8.J80.find_image_dims|
+        MOV      a1,#0
+|L002dec.J95.find_image_dims|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+check_sprite_area
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        SUB      sp,sp,#&10
+        LDMIA    a1,{a2,a3}
+        STR      a3,[sp,#8]
+        ADD      a4,a1,#8
+        LDMIA    a4,{a3,a4}
+        CMP      a3,a4
+        CMPLE    a4,a2
+        MOVGT    a1,#1
+        BGT      |L002fc0.J55.check_sprite_area|
+        ADD      v1,a1,a3
+        MOV      a3,#0
+        STR      a3,[sp,#4]
+        LDR      a3,[sp,#8]
+        CMP      a3,#0
+        BLE      |L002fbc.J9.check_sprite_area|
+        ADD      v5,a1,a2
+|L002e3c.J8.check_sprite_area|
+        ADD      a2,v1,#&18
+        LDMIA    a2,{a1,a2}
+        LDR      a4,[v1,#&14]
+        LDR      v3,[v1,#0]
+        LDR      v6,[v1,#&10]
+        STR      a2,[sp,#-4]!
+        LDR      a3,[v1,#&28]
+        LDR      v2,[v1,#&24]
+        LDR      v4,[v1,#&20]
+        ADD      a2,v3,v1
+        CMP      a2,v5
+        CMPLE    a1,#&1f
+        LDRLE    a2,[sp,#0]
+        CMPLE    a2,#&1f
+        ADDLE    a2,v4,v1
+        CMPLE    a2,v5
+        ADDLE    a2,v2,v1
+        CMPLE    a2,v5
+        BGT      |L002fa0.J50.check_sprite_area|
+        MOV      a2,#0
+        CMP      a2,a3,ASR #24
+        BGE      |L002e9c.J21.check_sprite_area|
+        TEQ      a1,#0
+        BNE      |L002fa0.J50.check_sprite_area|
+|L002e9c.J21.check_sprite_area|
+        TEQ      v4,v2
+        BEQ      |L002f54.J25.check_sprite_area|
+        ADD      a1,v6,#1
+        ADD      a4,a4,#1
+        STR      a4,[sp,#&10]
+        MUL      a1,a4,a1
+        ADD      a4,v4,a1,LSL #2
+        CMP      a4,v2
+        BGT      |L002fa0.J50.check_sprite_area|
+        TEQ      a2,a3,ASR #24
+        BNE      |L002ee8.J29.check_sprite_area|
+        ADD      a1,v2,a1,LSL #2
+        CMP      a1,v3
+        BGT      |L002fa0.J50.check_sprite_area|
+        SUB      a1,v3,v2
+        SUB      a2,v2,v4
+        TEQ      a1,a2
+        BNE      |L002fa0.J50.check_sprite_area|
+        B        |L002f6c.J43.check_sprite_area|
+|L002ee8.J29.check_sprite_area|
+        CMP      a3,#&ff
+        BLE      |L002ef8.J36.check_sprite_area|
+        TST      a3,#1
+        BEQ      |L002fa0.J50.check_sprite_area|
+|L002ef8.J36.check_sprite_area|
+        ADD      a4,sp,#4
+        STMDB    sp!,{a4}
+        MOV      a4,#9
+        MOV      a2,#&20000003
+        MOV      a1,#&35
+        BL       _swix
+        ADD      sp,sp,#4
+        TEQ      a1,#0
+        BNE      |L002fa0.J50.check_sprite_area|
+        LDR      a1,[sp,#4]
+        RSB      a2,a1,#5
+        MOV      a2,v6,LSL a2
+        LDR      a3,[sp,#0]
+        ADD      a3,a3,#1
+        ADD      a1,a2,a3,ASR a1
+        ADD      a1,a1,#&1f
+        BIC      a1,a1,#&1f
+        MOV      a1,a1,LSR #3
+        LDR      a2,[sp,#&10]
+        MLA      a1,a2,a1,v2
+        TEQ      a1,v3
+        BNE      |L002fa0.J50.check_sprite_area|
+        B        |L002f6c.J43.check_sprite_area|
+|L002f54.J25.check_sprite_area|
+        ADD      a1,v6,#1
+        ADD      a2,a4,#1
+        MUL      a1,a2,a1
+        ADD      a1,v4,a1,LSL #2
+        CMP      a1,v3
+        BGT      |L002fa0.J50.check_sprite_area|
+|L002f6c.J43.check_sprite_area|
+        ORR      a1,v3,v4
+        ORR      a1,a1,v2
+        TST      a1,#3
+        BNE      |L002fa0.J50.check_sprite_area|
+        ADD      v1,v1,v3
+        LDR      a1,[sp,#8]
+        ADD      a1,a1,#1
+        LDR      a2,[sp,#&c]
+        CMP      a1,a2
+        BGE      |L002fa8.J48.check_sprite_area|
+        ADD      a2,v1,#&2c
+        CMP      a2,v5
+        BLE      |L002fa8.J48.check_sprite_area|
+|L002fa0.J50.check_sprite_area|
+        MOV      a1,#1
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+|L002fa8.J48.check_sprite_area|
+        ADD      sp,sp,#4
+        STR      a1,[sp,#4]
+        LDR      a2,[sp,#8]
+        CMP      a1,a2
+        BLT      |L002e3c.J8.check_sprite_area|
+|L002fbc.J9.check_sprite_area|
+        MOV      a1,#0
+|L002fc0.J55.check_sprite_area|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+rr
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        CMN      a1,#1
+        MOVEQ    a2,#4
+        MOVEQ    a1,#&bd
+        ADDEQ    a1,a1,#&200
+        BLEQ     exit_c
+        MOV      a1,v1
+        LDMDB    fp,{v1,fp,sp,pc}^
+
+check_workspace
+        MOV      ip,sp
+        STMDB    sp!,{v1,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOVS     v1,a1
+        MOVEQ    a2,#1
+        MOVEQ    a1,#&2fc
+        BLEQ     exit_c
+        LDR      a3,[v1,#0]
+        LDR      a2,[pc, #L003074-.-8]
+        ADD      a1,v1,#&2000
+        TEQ      a3,a2
+        BEQ      |L003054.J6.check_workspace|
+        STR      a2,[v1,#0]
+        MOV      a3,#0
+        STR      a2,[a1,#&2ec]
+        STR      a3,[v1,#8]
+        ADD      a3,v1,#&22c
+        ADD      a4,v1,#&2ec
+        ADD      a4,a4,#&2000
+        MVN      ip,#0
+        CMP      a4,a3
+        BLS      |L003054.J6.check_workspace|
+|L003048.J8.check_workspace|
+        STR      ip,[a3],#&418
+        CMP      a4,a3
+        BHI      |L003048.J8.check_workspace|
+|L003054.J6.check_workspace|
+        LDR      a1,[a1,#&2ec]
+        TEQ      a1,a2
+        MOVNE    a2,#4
+        MOVNE    a1,#&67
+        ADDNE    a1,a1,#&300
+        LDMNEDB  fp,{v1,fp,sp,lr}
+        BNE      exit_c
+        LDMDB    fp,{v1,fp,sp,pc}^
+L003074
+        DCD     &075bcd15
+
+compile_word
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      v2,a2
+        LDR      a1,[a1,#&10]
+        LDR      a2,[v1,#&14]
+        CMP      a1,a2
+        MOVCS    a2,#1
+        MOVCS    a1,#&2e
+        ADDCS    a1,a1,#&400
+        BLCS     exit_c
+        LDR      a1,[v1,#&10]
+        STR      v2,[a1],#4
+        STR      a1,[v1,#&10]!
+        LDMDB    fp,{v1,v2,fp,sp,pc}^
+
+do_ins
+        AND      a3,a2,#&f0000000
+        TEQ      a3,#&f0000000
+        BICEQ    a2,a2,#&f0000000
+        BEQ      |L0030d0.J6.do_ins|
+        TEQ      a3,#0
+        ORREQ    a2,a2,#&e0000000
+|L0030d0.J6.do_ins|
+        B        compile_word
+
+define_label
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a2,#0]
+        TEQ      a1,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&5f
+        ADDNE    a1,a1,#&400
+        BLNE     exit_c
+        LDR      a2,[v2,#&10]!
+        STR      a2,[v1,#0]
+        LDR      a1,[v1,#4]
+        TEQ      a1,#0
+        LDMEQDB  fp,{v1,v2,fp,sp,pc}^
+        ADD      a3,a1,#8
+        SUBS     a2,a2,a3
+        ADDMI    a2,a2,#3
+        MOV      a2,a2,ASR #2
+        BIC      a2,a2,#&ff000000
+        LDR      a3,[a1,#0]
+        ORR      a2,a2,a3
+        STR      a2,[a1,#0]
+        MOV      a1,#0
+        STR      a1,[v1,#4]!
+        LDMDB    fp,{v1,v2,fp,sp,pc}^
+
+do_branch
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v3,a2
+        MOV      v1,a3
+        LDR      a1,[a3,#0]
+        TEQ      a1,#0
+        LDR      a1,[a3,#4]
+        BNE      |L003194.J4.do_branch|
+        TEQ      a1,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&7e
+        ADDNE    a1,a1,#&400
+        BLNE     exit_c
+        LDR      a1,[v2,#&10]
+        MOV      a2,v3
+        STR      a1,[v1,#4]!
+        MOV      a1,v2
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L003194.J4.do_branch|
+        TEQ      a1,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&84
+        ADDNE    a1,a1,#&400
+        BLNE     exit_c
+        LDR      a1,[v2,#&10]
+        ADD      a1,a1,#8
+        LDR      a2,[v1,#0]
+        SUBS     a1,a2,a1
+        ADDMI    a1,a1,#3
+        MOV      a1,a1,ASR #2
+        BIC      a1,a1,#&ff000000
+        ORR      a2,a1,v3
+        MOV      a1,v2
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+
+do_set_regname
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v3,a2
+        MOV      v1,a3
+        CMN      a3,#1
+        BNE      |L003240.J4.do_set_regname|
+        LDR      a1,[v2,#&1e0]
+        MOVS     v1,a1
+        ADD      a1,a1,#1
+        STR      a1,[v2,#&1e0]
+        BMI      |L003210.J7.do_set_regname|
+        CMP      v1,#&c
+        BLE      |L003220.J6.do_set_regname|
+|L003210.J7.do_set_regname|
+        MOV      a2,#4
+        MOV      a1,#&97
+        ADD      a1,a1,#&400
+        BL       exit_c
+|L003220.J6.do_set_regname|
+        TEQ      v1,#&c
+        BNE      |L003240.J4.do_set_regname|
+        LDR      a1,[v2,#&1e4]!
+        TEQ      a1,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&98
+        ADDNE    a1,a1,#&400
+        BLNE     exit_c
+|L003240.J4.do_set_regname|
+        STR      v1,[v3,#0]
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+
+compile_buffer_init
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a2
+        LDR      a1,[a2,#8]
+        ADD      ip,a1,a1,LSL #1
+        ADD      a1,ip,a1,LSL #7
+        ADD      a1,a2,a1,LSL #3
+        ADD      a1,a1,#&244
+        STR      a1,[a2,#&c]
+        STR      a1,[a2,#&10]
+        LDR      a1,[a2,#&c]
+        ADD      a1,a1,#&400
+        STR      a1,[a2,#&14]
+        ADD      a1,a2,#&18
+        ADD      a2,v1,#&150
+        MOV      v3,#0
+        CMP      a2,a1
+        BCC      |L0032a8.J5.compile_buffer_init|
+|L003294.J4.compile_buffer_init|
+        STR      v3,[a1,#0]
+        STR      v3,[a1,#4]!
+        ADD      a1,a1,#4
+        CMP      a2,a1
+        BCS      |L003294.J4.compile_buffer_init|
+|L0032a8.J5.compile_buffer_init|
+        ADD      a1,v1,#&158
+        ADD      v2,v1,#&1dc
+        MVN      a2,#0
+        CMP      v2,a1
+        BCC      |L0032c8.J9.compile_buffer_init|
+|L0032bc.J8.compile_buffer_init|
+        STR      a2,[a1],#4
+        CMP      v2,a1
+        BCS      |L0032bc.J8.compile_buffer_init|
+|L0032c8.J9.compile_buffer_init|
+        STR      v3,[v1,#&1e0]
+        ADD      a2,v1,#&1c4
+        MOV      a1,v1
+        MOV      a3,#1
+        BL       do_set_regname
+        ADD      a2,v1,#&1c8
+        MOV      a1,v1
+        MOV      a3,#2
+        BL       do_set_regname
+        ADD      a2,v1,#&1cc
+        MOV      a1,v1
+        MOV      a3,#3
+        BL       do_set_regname
+        ADD      a2,v1,#&1d0
+        MOV      a1,v1
+        MOV      a3,#&c
+        BL       do_set_regname
+        ADD      a2,v1,#&1d4
+        MOV      a1,v1
+        MOV      a3,#&d
+        BL       do_set_regname
+        ADD      a2,v1,#&1d8
+        MOV      a1,v1
+        MOV      a3,#&e
+        BL       do_set_regname
+        MOV      a2,v2
+        MOV      a1,v1
+        MOV      a3,#&f
+        BL       do_set_regname
+        STR      v3,[v1,#&1e4]!
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+
+compile_buffer_done
+        LDR      a2,[a1,#8]
+        ADD      a2,a2,#1
+        STR      a2,[a1,#8]
+        CMP      a2,#8
+        MOVGE    a2,#0
+        STRGE    a2,[a1,#8]!
+        MOVS     pc,lr
+
+simple_x_scale
+        ADD      ip,a1,#&40
+        LDMIA    ip,{a3,ip}
+        MOV      a4,a3
+        SUB      ip,ip,a3
+        TEQ      ip,a3
+        BNE      |L0033ac.J5.simple_x_scale|
+        LDR      a3,[a1,#&30]
+        CMP      a4,a3
+        BGT      |L0033ac.J5.simple_x_scale|
+        LDR      a1,[a1,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BEQ      |L0033ac.J5.simple_x_scale|
+        LDR      a1,[a2,#&1e8]
+        TEQ      a1,#0
+        LDREQ    a1,[a2,#&1f4]!
+        TEQEQ    a1,#0
+        MOVEQ    a1,#1
+        MOVEQS   pc,lr
+|L0033ac.J5.simple_x_scale|
+        MOV      a1,#0
+        MOVS     pc,lr
+
+x_block_move
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      v2,a2
+        BL       simple_x_scale
+        TEQ      a1,#0
+        BEQ      |L00341c.J5.x_block_move|
+        MOV      a1,#1
+        LDR      a2,[v1,#&78]
+        MOV      a2,a1,LSL a2
+        LDR      a1,[v1,#&100]
+        TEQ      a2,a1
+        LDREQ    a1,[v2,#&1e8]
+        TEQEQ    a1,#0
+        LDREQ    a1,[v2,#&1ec]!
+        TEQEQ    a1,#0
+        LDREQ    a1,[v1,#&b4]
+        TEQEQ    a1,#0
+        LDREQ    a1,[v1,#&f8]
+        TEQEQ    a1,#0
+        BNE      |L00341c.J5.x_block_move|
+        LDR      a1,[v1,#&10c]!
+        TEQ      a1,#0
+        MOVEQ    a1,#1
+        LDMEQDB  fp,{v1,v2,fp,sp,pc}^
+|L00341c.J5.x_block_move|
+        MOV      a1,#0
+        LDMDB    fp,{v1,v2,fp,sp,pc}^
+
+simple_y_scale
+        ADD      a2,a1,#&10
+        LDMIA    a2,{a1,a2}
+        TEQ      a2,a1
+        MOVNE    a1,#0
+        MOVEQ    a1,#1
+        MOVS     pc,lr
+
+ptrs_rn
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        ADD      a2,a2,#&158
+        MOV      a1,v1
+        MOV      a3,#&e
+        BL       do_set_regname
+        ADD      a2,v1,#&15c
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        ADD      a2,v1,#&198
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BNE      |L00349c.J5.ptrs_rn|
+        LDR      a1,[v2,#&f4]!
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L0034ac.J4.ptrs_rn|
+|L00349c.J5.ptrs_rn|
+        ADD      a2,v1,#&168
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+|L0034ac.J4.ptrs_rn|
+        LDR      a1,[v1,#&1f4]
+        TEQ      a1,#0
+        LDMEQDB  fp,{v1,v2,fp,sp,pc}^
+        ADD      a2,v1,#&184
+        MOV      a1,v1
+        MVN      a3,#0
+        LDMDB    fp,{v1,v2,fp,sp,lr}
+        B        do_set_regname
+
+xloop_rn
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        MOV      v3,#0
+        BL       x_block_move
+        ADD      a2,v1,#&160
+        ADD      v6,v1,#&1a0
+        ADD      v5,v1,#&1a8
+        TEQ      a1,#0
+        BEQ      |L0035b8.J4.xloop_rn|
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        MOV      a2,v6
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        MOV      a2,v5
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        ADD      a2,v1,#&188
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        LDR      a1,[v1,#&15c]
+        TEQ      a1,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&f5
+        ADDNE    a1,a1,#&500
+        BLNE     exit_c
+        LDR      a1,[v1,#&198]
+        TEQ      a1,#1
+        MOVNE    a2,#4
+        MOVNE    a1,#&f6
+        ADDNE    a1,a1,#&500
+        BLNE     exit_c
+        LDR      a1,[v1,#&160]
+        TEQ      a1,#2
+        MOVNE    a2,#4
+        MOVNE    a1,#&f7
+        ADDNE    a1,a1,#&500
+        BLNE     exit_c
+        LDR      a1,[v1,#&1a0]
+        TEQ      a1,#3
+        MOVNE    a2,#4
+        MOVNE    a1,#&1f8
+        ADDNE    a1,a1,#&400
+        BLNE     exit_c
+        LDR      a1,[v1,#&1a8]!
+        TEQ      a1,#4
+        MOVNE    a2,#4
+        MOVNE    a1,#&f9
+        ADDNE    a1,a1,#&500
+        LDMNEDB  fp,{v1-v6,fp,sp,lr}
+        BNE      exit_c
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+|L0035b8.J4.xloop_rn|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        ADD      v4,v1,#&164
+        TEQ      a1,#&32
+        BNE      |L0035e0.J17.xloop_rn|
+|L0035cc.J18.xloop_rn|
+        MOV      a2,v4
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        B        |L0035f8.J19.xloop_rn|
+|L0035e0.J17.xloop_rn|
+        LDR      a1,[v2,#&74]
+        TEQ      a1,#5
+        MOVNE    a1,v1
+        MVNNE    a3,#0
+        BLNE     do_set_regname
+        BNE      |L0035cc.J18.xloop_rn|
+|L0035f8.J19.xloop_rn|
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        BEQ      |L003644.J30.xloop_rn|
+        ADD      a2,v1,#&16c
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BNE      |L003634.J25.xloop_rn|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        ADDNE    a2,v1,#&174
+        BNE      |L003638.J67.xloop_rn|
+|L003634.J25.xloop_rn|
+        ADD      a2,v1,#&170
+|L003638.J67.xloop_rn|
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+|L003644.J30.xloop_rn|
+        LDR      a1,[v1,#&1e8]
+        TEQ      a1,#0
+        BEQ      |L00365c.J29.xloop_rn|
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        MOVEQ    v3,#1
+|L00365c.J29.xloop_rn|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L003690.J33.xloop_rn|
+        ADD      a2,v1,#&18c
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        ADD      a2,v1,#&190
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        B        |L003734.J35.xloop_rn|
+|L003690.J33.xloop_rn|
+        LDR      a1,[v2,#&b4]
+        TEQ      a1,#0
+        LDREQ    a1,[v2,#&f8]
+        TEQEQ    a1,#0
+        BNE      |L0036b0.J37.xloop_rn|
+        LDR      a1,[v2,#&10c]
+        TEQ      a1,#0
+        BEQ      |L0036c0.J36.xloop_rn|
+|L0036b0.J37.xloop_rn|
+        ADD      a2,v1,#&1a4
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+|L0036c0.J36.xloop_rn|
+        LDR      a2,[v2,#&f8]
+        TEQ      a2,#0
+        LDR      a1,[v2,#&74]
+        LDRNE    a2,[v2,#&104]
+        TEQNE    a2,#&10
+        BNE      |L0036e0.J45.xloop_rn|
+        TEQ      a1,#5
+        BNE      |L0036f0.J44.xloop_rn|
+|L0036e0.J45.xloop_rn|
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        MOVNE    v3,#2
+        B        |L003714.J47.xloop_rn|
+|L0036f0.J44.xloop_rn|
+        TEQ      a1,#4
+        LDREQ    a1,[v2,#&104]
+        TEQEQ    a1,#&20
+        BNE      |L003714.J47.xloop_rn|
+        MOV      v3,#2
+        ADD      a2,v1,#&180
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+|L003714.J47.xloop_rn|
+        TEQ      v3,#0
+        LDREQ    a1,[v2,#&40]
+        LDREQ    a2,[v2,#&68]
+        BLEQ     |__rt_sdiv|
+        TEQEQ    a2,#0
+        BNE      |L003734.J35.xloop_rn|
+        CMP      a1,#4
+        MOVGT    v3,#1
+|L003734.J35.xloop_rn|
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        BEQ      |L003760.J54.xloop_rn|
+        ADD      a2,v1,#&19c
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        MOV      a2,v6
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+|L003760.J54.xloop_rn|
+        LDR      a1,[v2,#&74]
+        CMP      a1,#3
+        BGT      |L003790.J56.xloop_rn|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       simple_x_scale
+        TEQ      a1,#0
+        BEQ      |L003790.J56.xloop_rn|
+        ADD      a2,v1,#&1c0
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+|L003790.J56.xloop_rn|
+        MOV      a2,v5
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       simple_x_scale
+        TEQ      a1,#0
+        BNE      |L0037c4.J16.xloop_rn|
+        ADD      a2,v1,#&1ac
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+|L0037c4.J16.xloop_rn|
+        CMP      v3,#1
+        BLT      |L0037dc.J61.xloop_rn|
+        ADD      a2,v1,#&178
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+|L0037dc.J61.xloop_rn|
+        CMP      v3,#2
+        LDMLTDB  fp,{v1-v6,fp,sp,pc}^
+        ADD      a2,v1,#&17c
+        MOV      a1,v1
+        MVN      a3,#0
+        LDMDB    fp,{v1-v6,fp,sp,lr}
+        B        do_set_regname
+
+yloop_rn_count
+        MOV      a3,#2
+        LDR      a4,[a1,#&14]
+        LDR      ip,[a1,#&10]
+        TEQ      a4,ip
+        MOVNE    a3,#3
+        LDR      a2,[a2,#&1f0]
+        TEQ      a2,#0
+        BNE      |L003828.J7.yloop_rn_count|
+        LDR      a2,[a1,#&f4]
+        AND      a2,a2,#&ff
+        TEQ      a2,#&32
+        BNE      |L00382c.J6.yloop_rn_count|
+|L003828.J7.yloop_rn_count|
+        ADD      a3,a3,#1
+|L00382c.J6.yloop_rn_count|
+        LDR      a1,[a1,#&110]
+        TEQ      a1,#0
+        ADDNE    a3,a3,#1
+        MOV      a1,a3
+        MOVS     pc,lr
+
+yloop_rn
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        ADD      a2,a2,#&1b0
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       simple_y_scale
+        TEQ      a1,#0
+        BNE      |L003888.J4.yloop_rn|
+        ADD      a2,v1,#&1b4
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+|L003888.J4.yloop_rn|
+        ADD      a2,v1,#&1b8
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BNE      |L0038b4.J7.yloop_rn|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L0038c4.J6.yloop_rn|
+|L0038b4.J7.yloop_rn|
+        ADD      a2,v1,#&1bc
+        MOV      a1,v1
+        MVN      a3,#0
+        BL       do_set_regname
+|L0038c4.J6.yloop_rn|
+        LDR      a1,[v2,#&110]!
+        TEQ      a1,#0
+        LDMEQDB  fp,{v1,v2,fp,sp,pc}^
+        ADD      a2,v1,#&194
+        MOV      a1,v1
+        MVN      a3,#0
+        LDMDB    fp,{v1,v2,fp,sp,lr}
+        B        do_set_regname
+
+get_in_shift
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a1,#&110]
+        TEQ      a1,#0
+        LDRNE    a1,[v2,#&74]
+        TEQNE    a1,#5
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        BEQ      |L003a24.J4.get_in_shift|
+        ADD      a3,v2,#&114
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v2,#&74]!
+        TEQ      a1,#4
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&160]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        BNE      |L0039c0.J7.get_in_shift|
+        ORR      a2,a1,#&2100000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      a2,#&1a00000
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&f2000000
+        ORR      a2,a2,#2
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&160]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&200
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L0039c0.J7.get_in_shift|
+        ORR      a2,a1,#&2100000
+        ORR      a2,a2,#3
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&160]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&160]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&180
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L003a24.J4.get_in_shift|
+        ADD      a1,v2,#&20
+        SUB      a1,a1,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&160]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+
+fetch_pixel_init
+        MOV      ip,sp
+        STMDB    sp!,{v1-v5,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a1,#&f4]
+        AND      a1,a1,#&ff
+        ADD      a3,v2,#8
+        SUB      a2,a3,v2
+        ORR      v4,a2,#&1800000
+        TEQ      a1,#&32
+        BNE      |L003ac8.J4.fetch_pixel_init|
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a3,a1,#&4100000
+        ADD      a2,v2,#&38
+        SUB      a1,a2,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a3,a1
+        B        |L003b08.J49.fetch_pixel_init|
+|L003ac8.J4.fetch_pixel_init|
+        LDR      a1,[v2,#&110]
+        TEQ      a1,#0
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORREQ    a1,a1,#&4100000
+        ADDEQ    a2,a1,v4
+        BEQ      |L003b08.J49.fetch_pixel_init|
+        ORR      a2,a1,#&4100000
+        ADD      a3,v2,#&118
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+|L003b08.J49.fetch_pixel_init|
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       x_block_move
+        TEQ      a1,#0
+        BEQ      |L003b68.J10.fetch_pixel_init|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       get_in_shift
+        LDR      a1,[v1,#&188]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a1,v2,#&108
+        SUB      a1,a1,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        LDMDB    fp,{v1-v5,fp,sp,lr}
+        B        do_ins
+|L003b68.J10.fetch_pixel_init|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L003c34.J13.fetch_pixel_init|
+        LDR      a1,[v1,#&18c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a3,v2,#&34
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&18c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#&18
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&800000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&190]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a3,a1,#&4100000
+        ADD      a2,v2,#&130
+        SUB      a1,a2,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a3,a1
+        B        |L003c6c.J50.fetch_pixel_init|
+|L003c34.J13.fetch_pixel_init|
+        LDR      a1,[v2,#&74]
+        TEQ      a1,#5
+        BEQ      |L003c74.J15.fetch_pixel_init|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       get_in_shift
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&160]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&d80
+|L003c6c.J50.fetch_pixel_init|
+        MOV      a1,v1
+        BL       do_ins
+|L003c74.J15.fetch_pixel_init|
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        BEQ      |L003e04.J18.fetch_pixel_init|
+        ADD      a3,v2,#&48
+        SUB      a2,a3,v2
+        ORR      v3,a2,#&1800000
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BNE      |L003ca8.J21.fetch_pixel_init|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L003ddc.J20.fetch_pixel_init|
+|L003ca8.J21.fetch_pixel_init|
+        LDR      a1,[v1,#&170]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+        ORR      a3,a1,#&4100000
+        ADD      a2,v2,#&88
+        SUB      a1,a2,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a3,a1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        LDR      a1,[v1,#&168]
+        BL       rr
+        BEQ      |L003d18.J24.fetch_pixel_init|
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a3,v2,#&8c
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        B        |L003d88.J51.fetch_pixel_init|
+|L003d18.J24.fetch_pixel_init|
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,v4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v4,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,v3
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&168]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&168]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&800000
+|L003d88.J51.fetch_pixel_init|
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&170]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&170]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&170]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&170]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&d80
+        B        |L003dfc.J52.fetch_pixel_init|
+|L003ddc.J20.fetch_pixel_init|
+        LDR      a1,[v1,#&174]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v4,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,v3
+|L003dfc.J52.fetch_pixel_init|
+        MOV      a1,v1
+        BL       do_ins
+|L003e04.J18.fetch_pixel_init|
+        LDR      a1,[v2,#&10c]
+        TEQ      a1,#0
+        BEQ      |L003e40.J28.fetch_pixel_init|
+        LDR      a1,[v1,#&1a4]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a3,v2,#&10c
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        B        |L003ef4.J53.fetch_pixel_init|
+|L003e40.J28.fetch_pixel_init|
+        LDR      a1,[v2,#&f8]
+        TEQ      a1,#0
+        BEQ      |L003e7c.J31.fetch_pixel_init|
+        LDR      a1,[v1,#&1a4]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a3,a1,#&4100000
+        ADD      a2,v2,#&f8
+        SUB      a1,a2,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a3,a1
+        B        |L003ef4.J53.fetch_pixel_init|
+|L003e7c.J31.fetch_pixel_init|
+        LDR      a1,[v2,#&b4]
+        TEQ      a1,#0
+        BEQ      |L003efc.J30.fetch_pixel_init|
+        LDR      a1,[v1,#&1a4]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a3,v2,#&b4
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v2,#&104]
+        CMP      a1,#8
+        BGT      |L003efc.J30.fetch_pixel_init|
+        LDR      a1,[v2,#&74]
+        CMP      a1,#4
+        BLT      |L003efc.J30.fetch_pixel_init|
+        LDR      a1,[v1,#&1a4]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a4]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&5900000
+        ORR      a2,a2,#4
+|L003ef4.J53.fetch_pixel_init|
+        MOV      a1,v1
+        BL       do_ins
+|L003efc.J30.fetch_pixel_init|
+        LDR      a1,[v2,#&74]
+        CMP      a1,#3
+        BGT      |L003f38.J39.fetch_pixel_init|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       simple_x_scale
+        TEQ      a1,#0
+        BEQ      |L003f38.J39.fetch_pixel_init|
+        LDR      a1,[v1,#&1c0]
+        BL       rr
+        LDR      a2,[v1,#&200]
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&3a00000
+        MOV      a1,v1
+        BL       do_ins
+|L003f38.J39.fetch_pixel_init|
+        LDR      a1,[v1,#&180]
+        CMN      a1,#1
+        BEQ      |L003fc4.J42.fetch_pixel_init|
+        BL       rr
+        MOV      a2,#&3a00000
+        ADD      a2,a2,#&e0
+        ORR      a2,a2,a1,LSL #12
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&180]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&180]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&180]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        ORR      a2,a2,#&400
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&180]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&180]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&180]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        ORR      a2,a2,#&400
+        MOV      a1,v1
+        BL       do_ins
+|L003fc4.J42.fetch_pixel_init|
+        LDR      a1,[v1,#&1f4]
+        TEQ      a1,#0
+        LDMEQDB  fp,{v1-v5,fp,sp,pc}^
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a3,a1,#&4100000
+        ADD      a2,v2,#&4c
+        SUB      a1,a2,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a3,a1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&184]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a3,v2,#&50
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&184]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&184]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&184]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&200000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&184]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&184]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        ORR      a2,a2,#&80
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,#&c10
+        ADD      v3,v3,#&3a00000
+        ORR      a2,v3,a1,LSL #12
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v4,a1,LSL #16
+        ORR      a2,a1,#&5900000
+        ORR      a2,a2,#&1fc
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      a2,#&3100000
+        ADD      a2,a2,#1
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&184]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&184]
+        BL       rr
+        ORR      a1,v4,a1,LSL #16
+        ORR      a2,a1,#&10000000
+        ORR      a2,a2,#&2200000
+        ORR      a2,a2,#3
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a2,v3,a1,LSL #12
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&5900000
+        ORR      a2,a2,#&1f8
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        LDR      a2,[v2,#&104]!
+        ORR      a1,a2,a1,LSL #16
+        ORR      a2,a1,#&3100000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&184]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&184]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&10000000
+        ORR      a2,a2,#&2200000
+        ORR      a2,a2,#2
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&184]
+        BL       rr
+        LDR      a2,[v1,#&1f4]
+        ADD      a2,a2,#&17
+        ORR      v2,a1,a2,LSL #7
+        LDR      a1,[v1,#&184]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v5,fp,sp,lr}
+        B        do_ins
+
+save_pixel_init
+        MOV      ip,sp
+        STMDB    sp!,{v1-v4,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a2,#&198]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a3,v2,#&c
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       x_block_move
+        ADD      a3,v2,#&4c
+        SUB      a2,a3,v2
+        ORR      v3,a2,#&1800000
+        TEQ      a1,#0
+        BEQ      |L004340.J4.save_pixel_init|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,v3
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        LDR      a2,[v1,#&220]
+        SUB      a2,a2,#1
+        ORR      a1,a1,a2
+        ORR      a2,a1,#&2000000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        LDR      a2,[v1,#&214]
+        ORR      v2,a1,a2,LSL #7
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        LDMDB    fp,{v1-v4,fp,sp,lr}
+        B        do_ins
+|L004340.J4.save_pixel_init|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BEQ      |L00435c.J8.save_pixel_init|
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        BEQ      |L004384.J7.save_pixel_init|
+|L00435c.J8.save_pixel_init|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v4,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,v3
+        MOV      a1,v1
+        BL       do_ins
+|L004384.J7.save_pixel_init|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L004434.J11.save_pixel_init|
+        LDR      a1,[v1,#&18c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a2,v3,a1,LSL #16
+        LDR      a1,[v1,#&220]
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&2000000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&224]
+        CMP      a1,#2
+        BLE      |L0043fc.J13.save_pixel_init|
+        LDR      a1,[v1,#&18c]
+        BL       rr
+        LDR      a2,[v1,#&224]
+        SUB      a2,a2,#2
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&18c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+|L0043fc.J13.save_pixel_init|
+        LDR      a1,[v1,#&224]
+        CMP      a1,#2
+        BGE      |L004434.J11.save_pixel_init|
+        LDR      a1,[v1,#&18c]
+        BL       rr
+        LDR      a2,[v1,#&224]
+        RSB      a2,a2,#2
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&18c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+|L004434.J11.save_pixel_init|
+        LDR      a1,[v2,#&104]!
+        TEQ      a1,#&20
+        LDMEQDB  fp,{v1-v4,fp,sp,pc}^
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        LDR      a2,[v1,#&220]
+        SUB      a2,a2,#1
+        ORR      a1,a1,a2
+        ORR      a2,a1,#&2000000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        LDR      a2,[v1,#&214]
+        ORR      v2,a1,a2,LSL #7
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&d80
+        MOV      a1,v1
+        LDMDB    fp,{v1-v4,fp,sp,lr}
+        B        do_ins
+
+xloop_init
+        MOV      ip,sp
+        STMDB    sp!,{v1-v4,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a2,#&1a8]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a3,a1,#&4100000
+        ADD      a2,v2,#&2c
+        SUB      a1,a2,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a3,a1
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       simple_x_scale
+        TEQ      a1,#0
+        BNE      |L004598.J4.xloop_init|
+        ADD      a3,v2,#&30
+        SUB      a2,a3,v2
+        ORR      v3,a2,#&1800000
+        LDR      a1,[v1,#&1f4]
+        TEQ      a1,#0
+        BEQ      |L004570.J6.xloop_init|
+        LDR      a1,[v2,#&74]
+        TEQ      a1,#4
+        LDREQ    a1,[v1,#&158]
+        BEQ      |L004574.J14.xloop_init|
+|L004570.J6.xloop_init|
+        LDR      a1,[v1,#&1ac]
+|L004574.J14.xloop_init|
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v4,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,v3
+        MOV      a1,v1
+        BL       do_ins
+|L004598.J4.xloop_init|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       x_block_move
+        TEQ      a1,#0
+        LDMEQDB  fp,{v1-v4,fp,sp,pc}^
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        LDR      a2,[v1,#&214]
+        ORR      v2,a1,a2,LSL #7
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v4,fp,sp,lr}
+        B        do_ins
+
+yloop_init
+        MOV      ip,sp
+        STMDB    sp!,{v1-v4,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a1,#&110]
+        TEQ      a1,#0
+        BEQ      |L00462c.J4.yloop_init|
+        LDR      a1,[v1,#&194]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a3,v2,#&11c
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        BL       do_ins
+|L00462c.J4.yloop_init|
+        LDR      a1,[v1,#&1b0]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a3,a1,#&4100000
+        ADD      a2,v2,#&18
+        SUB      a1,a2,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a3,a1
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       simple_y_scale
+        TEQ      a1,#0
+        BNE      |L0046a8.J6.yloop_init|
+        LDR      a1,[v1,#&1b4]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a3,a1,#&4100000
+        ADD      a2,v2,#&1c
+        SUB      a1,a2,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a3,a1
+        MOV      a1,v1
+        BL       do_ins
+|L0046a8.J6.yloop_init|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        ADD      a3,v2,#4
+        SUB      a2,a3,v2
+        ORR      v3,a2,#&1800000
+        TEQ      a1,#&32
+        BEQ      |L004704.J8.yloop_init|
+        LDR      a1,[v2,#&110]
+        TEQ      a1,#0
+        LDR      a1,[v1,#&1b8]
+        BL       rr
+        MOVNE    a2,#&3a00000
+        ADDNE    a2,a2,#1
+        ORRNE    a2,a2,a1,LSL #12
+        BNE      |L0046fc.J20.yloop_init|
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v4,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,v3
+|L0046fc.J20.yloop_init|
+        MOV      a1,v1
+        BL       do_ins
+|L004704.J8.yloop_init|
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BEQ      |L004748.J13.yloop_init|
+        LDR      a1,[v1,#&1bc]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a1,v2,#&90
+        SUB      a1,a1,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        LDMDB    fp,{v1-v4,fp,sp,lr}
+        B        do_ins
+|L004748.J13.yloop_init|
+        LDR      a1,[v2,#&f4]!
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        LDMNEDB  fp,{v1-v4,fp,sp,pc}^
+        LDR      a1,[v1,#&1bc]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,v3
+        MOV      a1,v1
+        LDMDB    fp,{v1-v4,fp,sp,lr}
+        B        do_ins
+
+fetch_pixel_unmasked
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a2
+        LDR      a2,[a1,#&f4]
+        AND      a2,a2,#&ff
+        TEQ      a2,#&32
+        BNE      |L00489c.J4.fetch_pixel_unmasked|
+        LDR      a1,[a1,#&104]
+        TEQ      a1,#&20
+        BNE      |L0047e4.J6.fetch_pixel_unmasked|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&18c]
+        BL       rr
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&7900000
+        MOV      a1,v1
+        LDMDB    fp,{v1,v2,fp,sp,lr}
+        B        do_ins
+|L0047e4.J6.fetch_pixel_unmasked|
+        TEQ      a1,#&10
+        BNE      |L004840.J9.fetch_pixel_unmasked|
+        LDR      a1,[v1,#&164]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&800
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&820
+        MOV      a1,v1
+        LDMDB    fp,{v1,v2,fp,sp,lr}
+        B        do_ins
+|L004840.J9.fetch_pixel_unmasked|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&164]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        LDR      a2,[v1,#&218]
+        ORR      a1,a1,a2
+        ORR      a2,a1,#&2000000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&190]
+        BL       rr
+        ORR      a2,v2,a1
+        MOV      a1,v1
+        LDMDB    fp,{v1,v2,fp,sp,lr}
+        B        do_ins
+|L00489c.J4.fetch_pixel_unmasked|
+        LDR      a1,[a1,#&74]
+        TEQ      a1,#5
+        BNE      |L0048d0.J13.fetch_pixel_unmasked|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&4900000
+        MOV      a1,v1
+        LDMDB    fp,{v1,v2,fp,sp,lr}
+        B        do_ins
+|L0048d0.J13.fetch_pixel_unmasked|
+        TEQ      a1,#4
+        BNE      |L00492c.J16.fetch_pixel_unmasked|
+        LDR      a1,[v1,#&164]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&800
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&820
+        MOV      a1,v1
+        LDMDB    fp,{v1,v2,fp,sp,lr}
+        B        do_ins
+|L00492c.J16.fetch_pixel_unmasked|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&164]
+        BL       rr
+        ORR      a2,v2,a1,LSL #16
+        LDR      a1,[v1,#&200]
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&2000000
+        MOV      a1,v1
+        LDMDB    fp,{v1,v2,fp,sp,lr}
+        B        do_ins
+
+fetch_pixel
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        MOV      v3,a3
+        LDR      a1,[a2,#&1ec]
+        TEQ      a1,#0
+        BEQ      |L0049ac.J4.fetch_pixel|
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        MOV      a2,#&3100000
+        ADD      a2,a2,#1
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+|L0049ac.J4.fetch_pixel|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_unmasked
+        LDR      a1,[v1,#&1ec]!
+        LDMDB    fp,{v1-v3,fp,sp,pc}^
+
+fetch_pixel2
+        MOV      ip,sp
+        STMDB    sp!,{v1-v4,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        MOV      v3,a3
+        LDR      a1,[a1,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        MOVEQ    a2,#4
+        MOVEQ    a1,#&37
+        ADDEQ    a1,a1,#&800
+        BLEQ     exit_c
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        BEQ      |L004af0.J6.fetch_pixel2|
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        LDR      a2,[v1,#&204]
+        BEQ      |L004aac.J8.fetch_pixel2|
+        ORR      v4,a1,a2,LSL #7
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        ORR      a1,v4,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&170]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&170]
+        BL       rr
+        ORR      a2,v4,a1,LSL #16
+        LDR      a1,[v1,#&204]
+        ORR      a1,a2,a1,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&168]
+        BL       rr
+        ORR      a1,v4,a1,LSL #16
+        ORR      a2,a1,#&f0000000
+        ORR      a2,a2,#&5b00000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        MOV      a2,#&3100000
+        ADD      a2,a2,#1
+        ORR      a2,a2,a1,LSL #16
+        B        |L004ad8.J22.fetch_pixel2|
+|L004aac.J8.fetch_pixel2|
+        TEQ      a2,#1
+        MOVEQ    a2,#&2000000
+        ADDEQ    a2,a2,#2
+        BEQ      |L004ad0.J11.fetch_pixel2|
+        LDR      a2,[v1,#&208]
+        RSB      a2,a2,#&20
+        MOV      a3,#&2000000
+        ADD      a3,a3,#1
+        ORR      a2,a3,a2,LSL #7
+|L004ad0.J11.fetch_pixel2|
+        ORR      a1,a2,a1,LSL #16
+        ORR      a2,a1,#&1100000
+|L004ad8.J22.fetch_pixel2|
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+|L004af0.J6.fetch_pixel2|
+        LDR      a1,[v2,#&74]!
+        TEQ      a1,#5
+        BNE      |L004b20.J14.fetch_pixel2|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&5900000
+        ORR      a2,a2,#4
+        B        |L004b7c.J23.fetch_pixel2|
+|L004b20.J14.fetch_pixel2|
+        TEQ      a1,#4
+        BNE      |L004b4c.J17.fetch_pixel2|
+        LDR      a1,[v1,#&164]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&820
+        B        |L004b7c.J23.fetch_pixel2|
+|L004b4c.J17.fetch_pixel2|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1c0]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&164]
+        BL       rr
+        LDR      a2,[v1,#&1fc]
+        ORR      a1,a1,a2,LSL #7
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&20
+|L004b7c.J23.fetch_pixel2|
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ec]!
+        LDMDB    fp,{v1-v4,fp,sp,pc}^
+
+do_add_ordered_dither_gun
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a2
+        RSB      a1,a3,#&20
+        SUB      v2,a1,a4
+        LDR      a1,[a2,#&158]
+        BL       rr
+        ORR      v3,a1,v2,LSL #7
+        LDR      a1,[v1,#&184]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&1700000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&184]
+        BL       rr
+        ORR      a1,a1,v2,LSL #7
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&30800000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+
+add_ordered_dither
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v3,a1
+        MOV      v2,a2
+        MOV      v1,a3
+        LDR      a4,[a2,#&1f4]
+        TEQ      a4,#0
+        LDMEQDB  fp,{v1-v3,fp,sp,pc}^
+        MOV      a4,v1,LSL #1
+        BL       do_add_ordered_dither_gun
+        MOV      a4,v1
+        MOV      a3,v1
+        MOV      a2,v2
+        MOV      a1,v3
+        BL       do_add_ordered_dither_gun
+        MOV      a3,v1
+        MOV      a2,v2
+        MOV      a1,v3
+        MOV      a4,#0
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_add_ordered_dither_gun
+
+translate_pixel
+        MOV      ip,sp
+        STMDB    sp!,{v1-v5,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a3,[a1,#&f4]
+        AND      a3,a3,#&ff
+        MOV      v5,#&1f
+        TEQ      a3,#&32
+        LDR      v3,[a1,#&74]
+        BNE      |L004d24.J4.translate_pixel|
+        LDR      a1,[v1,#&1e8]
+        AND      a1,a1,#7
+        TEQ      a1,#2
+        LDMNEDB  fp,{v1-v5,fp,sp,pc}^
+        LDR      a1,[v1,#&158]
+        BL       rr
+        LDR      a2,[v2,#&104]
+        SUB      a2,v5,a2
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&3800000
+        ORR      a2,a2,#&100
+        ORR      a2,a2,#2
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        LDR      a2,[v2,#&104]!
+        SUB      a2,v5,a2
+        ORR      v2,a1,a2,LSL #7
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&40
+        MOV      a1,v1
+        LDMDB    fp,{v1-v5,fp,sp,lr}
+        B        do_ins
+|L004d24.J4.translate_pixel|
+        LDR      a3,[v1,#&1f4]
+        TEQ      a3,#0
+        BEQ      |L004d40.J8.translate_pixel|
+        TEQ      v3,#5
+        MOVNE    a3,#5
+        MOVEQ    a3,#8
+        BL       add_ordered_dither
+|L004d40.J8.translate_pixel|
+        LDR      a1,[v2,#&f8]
+        TEQ      a1,#0
+        BEQ      |L004dd8.J13.translate_pixel|
+        CMP      v3,#3
+        MOVGT    a2,#4
+        MOVGT    a1,#&9d
+        ADDGT    a1,a1,#&800
+        BLGT     exit_c
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&10
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a4]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1
+        ORREQ    a2,a1,#&7900000
+        ORREQ    a2,a2,#&100
+        BEQ      |L004f1c.J58.translate_pixel|
+        ORR      a2,a1,#&7900000
+        ORR      a2,a2,#&180
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&420
+        MOV      a1,v1
+        BL       do_ins
+        MOV      v3,#5
+        B        |L004de0.J21.translate_pixel|
+|L004dd8.J13.translate_pixel|
+        TEQ      v3,#5
+        BNE      |L004f2c.J20.translate_pixel|
+|L004de0.J21.translate_pixel|
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        BEQ      |L0050d8.J23.translate_pixel|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#&800
+        ORR      a2,a2,#&f8
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&380
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#&c00
+        ORR      a2,a2,#&f8
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        ORR      a2,a2,#&500
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#&f8
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        ORR      a2,a2,#&680
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&820
+|L004f1c.J58.translate_pixel|
+        MOV      a1,v1
+        BL       do_ins
+        MOV      v3,#4
+        B        |L004f34.J24.translate_pixel|
+|L004f2c.J20.translate_pixel|
+        TEQ      v3,#4
+        BNE      |L0050d8.J23.translate_pixel|
+|L004f34.J24.translate_pixel|
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        BNE      |L0050d8.J23.translate_pixel|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&800
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&d20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&980
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#&600
+        ORR      a2,a2,#&3e
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        ORR      a2,a2,#&520
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&580
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        ORR      a2,a2,#&c20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&180]
+        BL       rr
+        ORR      a2,v3,a1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        ORR      a2,a2,#&2a0
+        MOV      a1,v1
+        BL       do_ins
+        MOV      v3,#5
+|L0050d8.J23.translate_pixel|
+        LDR      a1,[v2,#&b4]
+        TEQ      a1,#0
+        BEQ      |L005180.J26.translate_pixel|
+        LDR      a1,[v1,#&210]
+        CMP      a1,#3
+        BGT      |L005130.J28.translate_pixel|
+        CMP      v3,#4
+        MOVGT    a2,#4
+        MOVGT    a1,#&f6
+        ADDGT    a1,a1,#&800
+        BLGT     exit_c
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a4]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&7d00000
+        B        |L005170.J59.translate_pixel|
+|L005130.J28.translate_pixel|
+        CMP      v3,#3
+        MOVGT    a2,#4
+        MOVGT    a1,#&fc
+        ADDGT    a1,a1,#&800
+        BLGT     exit_c
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a4]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&7900000
+        ORR      a2,a2,#&100
+|L005170.J59.translate_pixel|
+        MOV      a1,v1
+        BL       do_ins
+        LDR      v3,[v1,#&210]
+        B        |L005624.J35.translate_pixel|
+|L005180.J26.translate_pixel|
+        TEQ      v3,#4
+        BNE      |L005624.J35.translate_pixel|
+        LDR      a1,[v1,#&210]
+        CMP      a1,#4
+        BGE      |L005624.J35.translate_pixel|
+        MOV      v4,#&3100000
+        ADD      v4,v4,#&10
+        TEQ      a1,#0
+        BNE      |L0051f8.J39.translate_pixel|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a2,v4,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      a2,#&3a00000
+        ADD      a2,a2,#1
+        ORR      a2,a2,a1,LSL #12
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      a2,#&3a00000
+        ADD      a2,a2,#&10000000
+        ORR      a2,a2,a1,LSL #12
+        MOV      a1,v1
+        BL       do_ins
+        MOV      v3,#0
+        B        |L00527c.J41.translate_pixel|
+|L0051f8.J39.translate_pixel|
+        TEQ      a1,#1
+        BNE      |L00527c.J41.translate_pixel|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&1a0
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#3
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#3
+        MOV      a1,v1
+        BL       do_ins
+        MOV      v3,#1
+|L00527c.J41.translate_pixel|
+        LDR      a1,[v1,#&210]
+        TEQ      a1,#2
+        BNE      |L005308.J44.translate_pixel|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&120
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#7
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#7
+        MOV      a1,v1
+        BL       do_ins
+        MOV      v3,#2
+        B        |L005624.J35.translate_pixel|
+|L005308.J44.translate_pixel|
+        TEQ      a1,#3
+        BNE      |L005624.J35.translate_pixel|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#&c00
+        ORR      a2,a2,#&1c
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&520
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#&e0
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&800000
+        ORR      a2,a2,#&2a0
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2000000
+        ORR      a2,a2,#7
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&800000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&800000
+        ORR      a2,a2,#&100
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      a2,#&3a00000
+        ORR      a2,a2,a1,LSL #12
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      a2,#&c40
+        ADD      a2,a2,#&3100000
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&13800000
+        ORR      a2,a2,#&80
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      a2,#&c20
+        ADD      a2,a2,#&3100000
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&13800000
+        ORR      a2,a2,#8
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        LDR      a2,[pc, #L005728-.-8]
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&13800000
+        ORR      a2,a2,#&40
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        LDR      a2,[pc, #L00572c-.-8]
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&13800000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a2,v4,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&13800000
+        ORR      a2,a2,#&10
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      a2,#&3100000
+        ADD      a2,a2,#8
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&13800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&17c]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        ORR      a2,a2,#&2a0
+        MOV      a1,v1
+        BL       do_ins
+        MOV      v3,#3
+|L005624.J35.translate_pixel|
+        LDR      a1,[v1,#&210]
+        TEQ      v3,a1
+        MOVNE    a2,#4
+        MOVNE    a1,#&56
+        ADDNE    a1,a1,#&900
+        BLNE     exit_c
+        LDR      a1,[v1,#&1e8]
+        AND      a1,a1,#7
+        TEQ      a1,#2
+        BNE      |L0056dc.J51.translate_pixel|
+        TEQ      v3,#5
+        BEQ      |L0056dc.J51.translate_pixel|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        LDR      a2,[v2,#&104]
+        SUB      a2,v5,a2
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&3800000
+        ORR      a2,a2,#&100
+        ORR      a2,a2,#2
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        LDR      a2,[v2,#&104]
+        SUB      a2,v5,a2
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&40
+        MOV      a1,v1
+        BL       do_ins
+|L0056dc.J51.translate_pixel|
+        LDR      a1,[v2,#&104]
+        LDR      a2,[v2,#&100]
+        TEQ      a1,a2
+        LDMEQDB  fp,{v1-v5,fp,sp,pc}^
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        LDR      a2,[v2,#&104]!
+        ORR      a1,a1,a2,LSL #7
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v5,fp,sp,lr}
+        B        do_ins
+L005728
+        DCD     &03100c02
+L00572c
+        DCD     &03100c01
+
+save_pixel
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a1,#&104]
+        TEQ      a1,#&20
+        LDR      a1,[a2,#&1e8]
+        BNE      |L00591c.J4.save_pixel|
+        TEQ      a1,#0
+        BEQ      |L0058f4.J6.save_pixel|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&4900000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1e8]
+        SUB      a1,a1,#1
+        CMP      a1,#6
+        ADDLS    pc,pc,a1,LSL #2
+        B        |L005898.J8.save_pixel|
+        B        |L0057d0.J14.save_pixel|
+        B        |L005820.J13.save_pixel|
+        B        |L005848.J12.save_pixel|
+        B        |L005874.J11.save_pixel|
+        B        |L005898.J8.save_pixel|
+        B        |L0057fc.J10.save_pixel|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1e00000
+        MOV      a1,v1
+        BL       do_ins
+|L0057d0.J14.save_pixel|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&1800000
+        B        |L005890.J54.save_pixel|
+|L0057fc.J10.save_pixel|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1e00000
+        MOV      a1,v1
+        BL       do_ins
+|L005820.J13.save_pixel|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a2,v2,a1
+        B        |L005890.J54.save_pixel|
+|L005848.J12.save_pixel|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&200000
+        B        |L005890.J54.save_pixel|
+|L005874.J11.save_pixel|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1e00000
+|L005890.J54.save_pixel|
+        MOV      a1,v1
+        BL       do_ins
+|L005898.J8.save_pixel|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&4800000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1e8]
+        TEQ      a1,#7
+        TEQNE    a1,#6
+        LDMNEDB  fp,{v1-v3,fp,sp,pc}^
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1e00000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L0058f4.J6.save_pixel|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&4800000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L00591c.J4.save_pixel|
+        TEQ      a1,#6
+        TEQNE    a1,#7
+        BNE      |L005994.J21.save_pixel|
+        LDR      a1,[v2,#&100]
+        TEQ      a1,#&10
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        LDRNE    a2,[v1,#&21c]
+        ORRNE    a1,a1,a2
+        ORRNE    a2,a1,#&2200000
+        BNE      |L00598c.J55.save_pixel|
+        ORR      a2,a1,#&2200000
+        ORR      a2,a2,#&ff
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2200000
+        ORR      a2,a2,#&c00
+        ORR      a2,a2,#&ff
+|L00598c.J55.save_pixel|
+        MOV      a1,v1
+        BL       do_ins
+|L005994.J21.save_pixel|
+        LDR      a1,[v1,#&1e8]
+        CMP      a1,#7
+        ADDLS    pc,pc,a1,LSL #2
+        B        |L005b38.J28.save_pixel|
+        B        |L0059c4.J36.save_pixel|
+        B        |L005a44.J35.save_pixel|
+        B        |L005a70.J34.save_pixel|
+        B        |L005a98.J33.save_pixel|
+        B        |L005ac4.J32.save_pixel|
+        B        |L005b38.J28.save_pixel|
+        B        |L005a70.J34.save_pixel|
+        B        |L005a44.J35.save_pixel|
+|L0059c4.J36.save_pixel|
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        BEQ      |L005a44.J35.save_pixel|
+        LDR      a1,[v2,#&100]
+        TEQ      a1,#&10
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        BNE      |L005a2c.J39.save_pixel|
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&3c00000
+        ORR      a2,a2,#&ff
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&3c00000
+        ORR      a2,a2,#&c00
+        ORR      a2,a2,#&ff
+        B        |L005a3c.J56.save_pixel|
+|L005a2c.J39.save_pixel|
+        ORR      a2,v3,a1,LSL #16
+        LDR      a1,[v1,#&21c]
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&3c00000
+|L005a3c.J56.save_pixel|
+        MOV      a1,v1
+        BL       do_ins
+|L005a44.J35.save_pixel|
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        B        |L005b30.J57.save_pixel|
+|L005a70.J34.save_pixel|
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a2,v3,a1
+        B        |L005b30.J57.save_pixel|
+|L005a98.J33.save_pixel|
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&200000
+        B        |L005b30.J57.save_pixel|
+|L005ac4.J32.save_pixel|
+        LDR      a1,[v2,#&100]
+        TEQ      a1,#&10
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        BNE      |L005b20.J42.save_pixel|
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2200000
+        ORR      a2,a2,#&ff
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2200000
+        ORR      a2,a2,#&c00
+        ORR      a2,a2,#&ff
+        B        |L005b30.J57.save_pixel|
+|L005b20.J42.save_pixel|
+        ORR      a2,v3,a1,LSL #16
+        LDR      a1,[v1,#&21c]
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&2200000
+|L005b30.J57.save_pixel|
+        MOV      a1,v1
+        BL       do_ins
+|L005b38.J28.save_pixel|
+        LDR      a1,[v1,#&1e8]
+        TEQ      a1,#6
+        TEQNE    a1,#7
+        LDMNEDB  fp,{v1-v3,fp,sp,pc}^
+        LDR      a1,[v2,#&100]!
+        TEQ      a1,#&10
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        BNE      |L005bac.J49.save_pixel|
+        ORR      a2,a1,#&2200000
+        ORR      a2,a2,#&ff
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&2200000
+        ORR      a2,a2,#&c00
+        ORR      a2,a2,#&ff
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L005bac.J49.save_pixel|
+        LDR      a2,[v1,#&21c]
+        ORR      a1,a1,a2
+        ORR      a2,a1,#&2200000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+
+save_pixel_opt
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a2
+        LDR      a1,[a1,#&100]
+        TEQ      a1,#&10
+        LDR      a1,[a2,#&19c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        BNE      |L005c30.J4.save_pixel_opt|
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&3c00000
+        ORR      a2,a2,#&ff
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&3c00000
+        ORR      a2,a2,#&c00
+        ORR      a2,a2,#&ff
+        B        |L005c40.J9.save_pixel_opt|
+|L005c30.J4.save_pixel_opt|
+        ORR      a2,v2,a1,LSL #16
+        LDR      a1,[v1,#&21c]
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&3c00000
+|L005c40.J9.save_pixel_opt|
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&1800000
+        MOV      a1,v1
+        LDMDB    fp,{v1,v2,fp,sp,lr}
+        B        do_ins
+
+save_pixel2
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a2,#&1e8]
+        TEQ      a1,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&eb
+        ADDNE    a1,a1,#&900
+        BLNE     exit_c
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        BNE      |L005ce0.J6.save_pixel2|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&5800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L005ce0.J6.save_pixel2|
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        BEQ      |L005d84.J9.save_pixel2|
+        LDR      a1,[v2,#&100]
+        TEQ      a1,#&10
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        BNE      |L005d4c.J11.save_pixel2|
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&3c00000
+        ORR      a2,a2,#&800
+        ORR      a2,a2,#&ff
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&3c00000
+        ORR      a2,a2,#&400
+        ORR      a2,a2,#&ff
+        B        |L005d7c.J19.save_pixel2|
+|L005d4c.J11.save_pixel2|
+        ORR      a2,v3,a1,LSL #16
+        LDR      a1,[v2,#&100]
+        TEQ      a1,#1
+        MOVEQ    a1,#&2000000
+        ADDEQ    a1,a1,#2
+        BEQ      |L005d74.J14.save_pixel2|
+        RSB      a3,a1,#&20
+        LDR      a1,[v1,#&21c]
+        ORR      a1,a1,a3,LSL #7
+        ORR      a1,a1,#&2000000
+|L005d74.J14.save_pixel2|
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&1c00000
+|L005d7c.J19.save_pixel2|
+        MOV      a1,v1
+        BL       do_ins
+|L005d84.J9.save_pixel2|
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        LDR      a2,[v2,#&100]!
+        ORR      a1,a1,a2,LSL #7
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+
+fetch_pixel_inc
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a1,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BEQ      |L005ee4.J4.fetch_pixel_inc|
+        LDR      a1,[v2,#&74]
+        TEQ      a1,#5
+        BNE      |L005e14.J6.fetch_pixel_inc|
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2800000
+        ORR      a2,a2,#4
+        B        |L005edc.J25.fetch_pixel_inc|
+|L005e14.J6.fetch_pixel_inc|
+        LDR      a1,[v1,#&164]
+        BL       rr
+        LDR      a2,[v1,#&1fc]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&164]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        MOVNE    a1,#0
+        MOVEQ    a1,#1
+        LDR      a2,[v1,#&1ec]
+        TST      a1,a2
+        BEQ      |L005e88.J9.fetch_pixel_inc|
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        LDR      a2,[v1,#&1fc]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+|L005e88.J9.fetch_pixel_inc|
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&160]
+        BL       rr
+        ORR      a2,v3,a1,LSL #16
+        LDR      a1,[v1,#&1fc]
+        ORR      a1,a2,a1,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&164]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&f0000000
+        ORR      a2,a2,#&5b00000
+        ORR      a2,a2,#4
+|L005edc.J25.fetch_pixel_inc|
+        MOV      a1,v1
+        BL       do_ins
+|L005ee4.J4.fetch_pixel_inc|
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        LDMEQDB  fp,{v1-v3,fp,sp,pc}^
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BNE      |L005f0c.J17.fetch_pixel_inc|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L005f98.J16.fetch_pixel_inc|
+|L005f0c.J17.fetch_pixel_inc|
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        LDR      a2,[v1,#&204]
+        ORR      v2,a1,a2,LSL #7
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&170]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&170]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        LDR      a2,[v1,#&204]
+        ORR      a1,a1,a2,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&168]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&f0000000
+        ORR      a2,a2,#&5b00000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L005f98.J16.fetch_pixel_inc|
+        LDR      a1,[v2,#&74]!
+        TEQ      a1,#5
+        MOVEQ    a2,#4
+        MOVEQ    a1,#&31
+        ADDEQ    a1,a1,#&a00
+        BLEQ     exit_c
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      v2,a1,#&4100000
+        LDR      a1,[v1,#&174]
+        BL       rr
+        ORR      a1,a1,#&3800000
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&f0000000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+
+fetch_pixel_inc2
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a1,#&74]
+        TEQ      a1,#5
+        BNE      |L006030.J4.fetch_pixel_inc2|
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2800000
+        ORR      a2,a2,#8
+        B        |L006128.J24.fetch_pixel_inc2|
+|L006030.J4.fetch_pixel_inc2|
+        LDR      a1,[v2,#&78]
+        TEQ      a1,#4
+        LDR      a1,[v1,#&164]
+        BL       rr
+        BNE      |L006060.J7.fetch_pixel_inc2|
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&5b00000
+        ORR      a2,a2,#4
+        B        |L006128.J24.fetch_pixel_inc2|
+|L006060.J7.fetch_pixel_inc2|
+        LDR      a2,[v1,#&1fc]
+        MOV      a2,a2,LSL #1
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&164]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        MOVNE    a2,#0
+        MOVEQ    a2,#1
+        LDR      a1,[v1,#&1ec]
+        TST      a2,a1
+        BEQ      |L0060d4.J10.fetch_pixel_inc2|
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        LDR      a2,[v1,#&1fc]
+        MOV      a2,a2,LSL #1
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+|L0060d4.J10.fetch_pixel_inc2|
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&160]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        LDR      a2,[v1,#&1fc]
+        ORR      a1,a1,a2
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&200
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&164]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&f0000000
+        ORR      a2,a2,#&5b00000
+        ORR      a2,a2,#4
+|L006128.J24.fetch_pixel_inc2|
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        LDMEQDB  fp,{v1-v3,fp,sp,pc}^
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BEQ      |L0061d4.J17.fetch_pixel_inc2|
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        LDR      a2,[v1,#&204]
+        ORR      v2,a1,a2,LSL #7
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&170]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&170]
+        BL       rr
+        ORR      a2,v2,a1,LSL #16
+        LDR      a1,[v1,#&204]
+        ORR      a1,a2,a1,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&168]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&f0000000
+        ORR      a2,a2,#&5b00000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L0061d4.J17.fetch_pixel_inc2|
+        LDR      a1,[v2,#&74]!
+        TEQ      a1,#5
+        MOVEQ    a2,#4
+        MOVEQ    a1,#&6a
+        ADDEQ    a1,a1,#&a00
+        BLEQ     exit_c
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      v2,a1,#&4100000
+        LDR      a1,[v1,#&174]
+        BL       rr
+        ORR      a1,a1,#&3800000
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&f0000000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+
+odither_inc
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a2
+        MOV      v2,a3
+        LDR      a1,[a2,#&1f4]
+        TEQ      a1,#0
+        LDMEQDB  fp,{v1-v3,fp,sp,pc}^
+        LDR      a1,[v1,#&184]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&184]
+        BL       rr
+        ORR      a2,v3,a1,LSL #16
+        LDR      a1,[v1,#&1f4]
+        SUB      a3,a1,v2
+        MOV      a1,#1
+        ORR      a1,a2,a1,LSL a3
+        ORR      a2,a1,#&2200000
+        ORR      a2,a2,#&400
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+
+skip_current_output_words
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a2
+        LDR      a1,[a1,#&104]
+        MOV      v2,#&3a00000
+        TEQ      a1,#&20
+        BNE      |L0062f0.J4.skip_current_output_words|
+        LDR      a1,[v1,#&198]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&800000
+        ORR      a2,a2,#&100
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a2,v2,a1,LSL #12
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L0062f0.J4.skip_current_output_words|
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&400000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        LDR      a2,[v1,#&214]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      v3,v3,a1,LSL #8
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&70
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a2,v2,a1,LSL #12
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        LDR      a2,[v1,#&224]
+        ORR      v2,a1,a2,LSL #7
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1b00000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&198]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&10800000
+        ORR      a2,a2,#&100
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&4900000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        LDR      a2,[v1,#&224]
+        ORR      a1,a1,a2,LSL #7
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&400000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+
+skip_some_pixels
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a2
+        LDR      a1,[a2,#&1ac]
+        BL       rr
+        LDR      a2,[v1,#&214]
+        ORR      v2,a1,a2,LSL #7
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      v2,v2,a1,LSL #8
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&70
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&400000
+        ORR      a2,a2,#&d80
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      a2,#&3a00000
+        ORR      a2,a2,a1,LSL #12
+        MOV      a1,v1
+        LDMDB    fp,{v1,v2,fp,sp,lr}
+        B        do_ins
+
+save_pixel_inc
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a1,#&104]
+        TEQ      a1,#&20
+        BNE      |L006590.J4.save_pixel_inc|
+        LDR      a1,[v1,#&198]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L0066dc.J8.save_pixel_inc|
+        B        |L0066ac.J16.save_pixel_inc|
+|L006590.J4.save_pixel_inc|
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[v2,#&100]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L0065f8.J9.save_pixel_inc|
+        LDR      a1,[v1,#&164]
+        BL       rr
+        LDR      a2,[v2,#&100]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&164]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+|L0065f8.J9.save_pixel_inc|
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a2,v3,a1,LSL #16
+        LDR      a1,[v2,#&100]
+        ORR      a1,a2,a1,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&c0000000
+        ORR      a2,a2,#&34800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1e8]
+        TEQ      a1,#0
+        LDREQ    a1,[v1,#&1ec]
+        TEQEQ    a1,#0
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOVEQ    a2,#&1a00000
+        ORREQ    a1,a2,a1,LSL #12
+        ORREQ    a2,a1,#&f2000000
+        BEQ      |L006694.J19.save_pixel_inc|
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&f0000000
+        ORR      a2,a2,#&4900000
+|L006694.J19.save_pixel_inc|
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L0066dc.J8.save_pixel_inc|
+|L0066ac.J16.save_pixel_inc|
+        LDR      a1,[v1,#&164]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&18c]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&7900000
+        MOV      a1,v1
+        BL       do_ins
+|L0066dc.J8.save_pixel_inc|
+        MOV      a2,v1
+        MOV      a1,v2
+        MOV      a3,#0
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        odither_inc
+
+save_pixel_inc2
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a1,#&104]
+        TEQ      a1,#&20
+        BNE      |L006734.J4.save_pixel_inc2|
+        LDR      a1,[v1,#&198]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2800000
+        ORR      a2,a2,#8
+        B        |L006858.J18.save_pixel_inc2|
+|L006734.J4.save_pixel_inc2|
+        LDR      a1,[v2,#&100]
+        TEQ      a1,#&10
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        BNE      |L00679c.J7.save_pixel_inc2|
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOVEQ    a2,#&3a00000
+        ORREQ    a2,a2,a1,LSL #12
+        BEQ      |L006858.J18.save_pixel_inc2|
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4900000
+        B        |L006858.J18.save_pixel_inc2|
+|L00679c.J7.save_pixel_inc2|
+        LDR      a2,[v2,#&100]
+        MOV      a2,a2,LSL #1
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        LDR      a2,[v2,#&100]
+        ORR      a1,a1,a2
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&200
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&c0000000
+        ORR      a2,a2,#&34800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOVEQ    a2,#&1a00000
+        ORREQ    a1,a2,a1,LSL #12
+        ORREQ    a2,a1,#&f2000000
+        BEQ      |L006858.J18.save_pixel_inc2|
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&f0000000
+        ORR      a2,a2,#&4900000
+|L006858.J18.save_pixel_inc2|
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a2,v1
+        MOV      a1,v2
+        MOV      a3,#0
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        odither_inc
+
+plot_current_output_words
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        MOV      v5,a3
+        LDR      a1,[a1,#&104]
+        ADD      v4,a2,#&110
+        ADD      v3,a2,#&108
+        TEQ      a1,#&20
+        BNE      |L006ab0.J4.plot_current_output_words|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&4800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        CMP      v5,#&15
+        BGE      |L006968.J6.plot_current_output_words|
+        MOV      v6,#1
+        CMP      v5,#1
+        LDMLEDB  fp,{v1-v6,fp,sp,pc}^
+|L006904.J8.plot_current_output_words|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&14800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&10000000
+        ORR      a2,a2,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        ADD      v6,v6,#1
+        CMP      v6,v5
+        BLT      |L006904.J8.plot_current_output_words|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+|L006968.J6.plot_current_output_words|
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v2,#&3500000
+        ADD      v2,v2,#&a
+        ORR      a2,v2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v4
+        MOV      a1,v1
+        MOV      a2,#&da000000
+        BL       do_branch
+        MOV      a2,v3
+        MOV      a1,v1
+        BL       define_label
+        MOV      v6,#0
+|L0069a4.J13.plot_current_output_words|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+        ORR      a2,a1,#&4800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        ADD      v6,v6,#1
+        CMP      v6,#&a
+        BLT      |L0069a4.J13.plot_current_output_words|
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+        ORR      a2,a1,#&2400000
+        ORR      a2,a2,#&a
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a2,v2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v3
+        MOV      a1,v1
+        MOV      a2,#&ca000000
+        BL       do_branch
+        MOV      a2,v4
+        MOV      a1,v1
+        BL       define_label
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      a2,#&3500000
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        MOV      v6,#0
+|L006a4c.J15.plot_current_output_words|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&14800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&10000000
+        ORR      a2,a2,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        ADD      v6,v6,#1
+        CMP      v6,#&a
+        BLT      |L006a4c.J15.plot_current_output_words|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+|L006ab0.J4.plot_current_output_words|
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      v5,v5,a1,LSL #16
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v5,a1
+        ORR      a2,a1,#&400000
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a2,v1,#&100
+        MOV      v6,a2
+        MOV      a1,v1
+        BL       define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_opt
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[v2,#&100]
+        ORR      v5,a1,a2,LSL #7
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v5,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a2,v5,a1,LSL #16
+        LDR      a1,[v2,#&100]
+        ORR      a1,a2,a1,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_opt
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[v2,#&100]
+        ORR      v5,a1,a2,LSL #7
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v5,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+        LDR      a2,[v2,#&100]
+        ORR      a1,a1,a2,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v4
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_opt
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[v2,#&100]
+        ORR      v5,a1,a2,LSL #7
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v5,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a2,v5,a1,LSL #16
+        LDR      a1,[v2,#&100]
+        ORR      a1,a2,a1,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a3,v1,#&118
+        MOV      v5,a3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_opt
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[v2,#&100]
+        ORR      a2,a1,a2,LSL #7
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #16
+        LDR      a2,[v2,#&100]
+        ORR      a1,a1,a2,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v6
+        MOV      a1,v1
+        MOV      a2,#&1a000000
+        BL       do_branch
+        MOV      a2,v3
+        MOV      a1,v1
+        BL       define_label
+        MOV      a2,v4
+        MOV      a1,v1
+        BL       define_label
+        MOV      a2,v5
+        MOV      a1,v1
+        BL       define_label
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        LDR      a2,[v1,#&224]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1b00000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a3,v1,#&128
+        MOV      v3,a3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        LDR      v6,[v2,#&104]
+        CMP      v6,#&20
+        BGE      |L006dbc.J19.plot_current_output_words|
+|L006d7c.J18.plot_current_output_words|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v4,v4,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,a1,v6,LSL #7
+        ORR      a1,v4,a1
+        ORR      a2,a1,#&1800000
+        MOV      a1,v1
+        BL       do_ins
+        MOV      v6,v6,LSL #1
+        CMP      v6,#&20
+        BLT      |L006d7c.J18.plot_current_output_words|
+|L006dbc.J19.plot_current_output_words|
+        ADD      a2,v1,#&120
+        MOV      v4,a2
+        MOV      a1,v1
+        BL       define_label
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+        ORR      a2,a1,#&4800000
+        ORR      a2,a2,#4
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a2,v5,a1,LSL #16
+        LDR      a1,[v1,#&220]
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&2400000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v4
+        MOV      a1,v1
+        MOV      a2,#&1a000000
+        BL       do_branch
+        LDR      a1,[v2,#&100]!
+        TEQ      a1,#&10
+        LDR      a1,[v1,#&158]
+        BL       rr
+        BNE      |L006eb0.J22.plot_current_output_words|
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&800
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&820
+        B        |L006ecc.J32.plot_current_output_words|
+|L006eb0.J22.plot_current_output_words|
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a2,v2,a1,LSL #16
+        LDR      a1,[v1,#&21c]
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&2000000
+|L006ecc.J32.plot_current_output_words|
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a2,v3
+        MOV      a1,v1
+        BL       define_label
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&4900000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v6,fp,sp,lr}
+        B        do_ins
+
+plot_some_pixels
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        ADD      a2,a2,#&130
+        MOV      v6,a2
+        MOV      a1,v1
+        BL       define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_opt
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[v2,#&100]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a2,v3,a1,LSL #16
+        LDR      a1,[v2,#&100]
+        ORR      a1,a2,a1,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a3,v1,#&138
+        MOV      v5,a3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_opt
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[v2,#&100]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        LDR      a2,[v2,#&100]
+        ORR      a1,a1,a2,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a3,v1,#&140
+        MOV      v4,a3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_opt
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[v2,#&100]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        LDR      a2,[v2,#&100]
+        ORR      a1,a1,a2,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a3,v1,#&148
+        MOV      v3,a3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_opt
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[v2,#&100]
+        ORR      a2,a1,a2,LSL #7
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&60
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #16
+        LDR      a2,[v2,#&100]!
+        ORR      a1,a1,a2,LSL #1
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v6
+        MOV      a1,v1
+        MOV      a2,#&1a000000
+        BL       do_branch
+        MOV      a2,v5
+        MOV      a1,v1
+        BL       define_label
+        MOV      a2,v4
+        MOV      a1,v1
+        BL       define_label
+        MOV      a2,v3
+        MOV      a1,v1
+        LDMDB    fp,{v1-v6,fp,sp,lr}
+        B        define_label
+
+arbitrary_add
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a4
+        MOV      ip,#1
+        MOV      a4,#0
+        LDR      v3,[fp,#4]
+        CMP      v3,#0
+        BGE      |L007228.J4.arbitrary_add|
+        RSB      v3,v3,#0
+        TEQ      a2,#0
+        MOVNE    a2,a4
+        MOVEQ    a2,ip
+|L007228.J4.arbitrary_add|
+        TEQ      v3,#0
+        BNE      |L00724c.J9.arbitrary_add|
+        TEQ      a3,#0
+        LDMEQDB  fp,{v1-v6,fp,sp,pc}^
+        MOV      a2,#&3500000
+        LDR      a3,[v1,#0]
+        ORR      a2,a2,a3,LSL #16
+        LDMDB    fp,{v1-v6,fp,sp,lr}
+        B        do_ins
+|L00724c.J9.arbitrary_add|
+        TEQ      a2,#0
+        MOVEQ    v6,#&400000
+        MOVNE    v6,#&800000
+        TEQ      a3,#0
+        MOVEQ    v5,a4
+        MOVNE    v5,#&100000
+        MOV      v4,#0
+|L007268.J20.arbitrary_add|
+        CMP      v3,#&ff
+        BLE      |L007288.J23.arbitrary_add|
+        TST      v3,#3
+        BNE      |L007288.J23.arbitrary_add|
+|L007278.J25.arbitrary_add|
+        MOV      v3,v3,ASR #2
+        ADD      v4,v4,#2
+        TST      v3,#3
+        BEQ      |L007278.J25.arbitrary_add|
+|L007288.J23.arbitrary_add|
+        AND      a2,v3,#&ff
+        BICS     v3,v3,#&ff
+        MOVNE    a1,#0
+        MOVEQ    a1,#1
+        TEQ      a1,#0
+        MOVNE    a1,v5
+        ORR      a3,a1,v6
+        LDR      a1,[v1,#0]
+        ORR      a3,a3,a1,LSL #12
+        ORR      a1,a3,a1,LSL #16
+        ORR      a1,a1,a2
+        RSB      a2,v4,#&20
+        AND      a2,a2,#&1e
+        ORR      a1,a1,a2,LSL #7
+        ORR      a2,a1,#&2000000
+        MOV      a1,v2
+        BL       do_ins
+        TEQ      v3,#0
+        BNE      |L007268.J20.arbitrary_add|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+init_word_registers
+        MOV      ip,sp
+        STMDB    sp!,{v1-v3,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        LDR      a1,[a1,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        LDRNE    a1,[v2,#&74]
+        TEQNE    a1,#5
+        BEQ      |L0073b0.J4.init_word_registers|
+        LDR      a1,[v1,#&164]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,#&800000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&da0
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&164]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v3,v3,a1,LSL #8
+        LDR      a1,[v1,#&164]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&70
+        MOV      a1,v1
+        BL       do_ins
+|L0073b0.J4.init_word_registers|
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        BEQ      |L0074b0.J8.init_word_registers|
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BNE      |L0073d8.J11.init_word_registers|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L00744c.J10.init_word_registers|
+|L0073d8.J11.init_word_registers|
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&168]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,#&800000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&170]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&da0
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#&20
+        B        |L007474.J25.init_word_registers|
+|L00744c.J10.init_word_registers|
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      v3,v3,a1,LSL #16
+        LDR      a1,[v1,#&174]
+        BL       rr
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&7900000
+|L007474.J25.init_word_registers|
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v3,v3,a1,LSL #8
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&70
+        MOV      a1,v1
+        BL       do_ins
+|L0074b0.J8.init_word_registers|
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        LDMEQDB  fp,{v1-v3,fp,sp,pc}^
+        LDR      a1,[v1,#&1e8]
+        TEQ      a1,#0
+        LDREQ    a1,[v1,#&1ec]
+        TEQEQ    a1,#0
+        BNE      |L00757c.J17.init_word_registers|
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1b00000
+        ORR      a2,a2,#&da0
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a1,a1,#&800000
+        ORR      a2,a1,#&10000000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v2,v2,a1,LSL #8
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&10000000
+        ORR      a2,a2,#&1a00000
+        ORR      a2,a2,#&10
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      a2,#&1a00000
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&f2000000
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+|L00757c.J17.init_word_registers|
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a1,a1,#&4100000
+        ADD      a2,a1,#&800000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&da0
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v3,v3,a1,LSL #8
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&70
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v2,#&f4]!
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        LDMNEDB  fp,{v1-v3,fp,sp,pc}^
+        LDR      a1,[v1,#&164]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&18c]
+        BL       rr
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&7900000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&164]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      v2,v2,a1,LSL #8
+        LDR      a1,[v1,#&164]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&70
+        MOV      a1,v1
+        LDMDB    fp,{v1-v3,fp,sp,lr}
+        B        do_ins
+
+align16
+        MOV      ip,sp
+        STMDB    sp!,{v1,v2,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a2
+        LDR      a1,[a2,#&10]
+        TST      a1,#1
+        LDMEQDB  fp,{v1,v2,fp,sp,pc}^
+|L0076bc.J4.align16|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&10]
+        TST      a1,#1
+        BNE      |L0076bc.J4.align16|
+        LDMDB    fp,{v1,v2,fp,sp,pc}^
+
+loop_x
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        SUB      sp,sp,#&24
+        BL       x_block_move
+        TEQ      a1,#0
+        BEQ      |L007758.J4.loop_x|
+        LDR      a1,[v1,#&1dc]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&1d8]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&188]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&1dc]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        B        |L008670.J80.loop_x|
+|L007758.J4.loop_x|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       init_word_registers
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       simple_x_scale
+        ADD      v5,v1,#&30
+        TEQ      a1,#0
+        BEQ      |L007cb8.J7.loop_x|
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        BEQ      |L00785c.J9.loop_x|
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      a2,a1,LSL #16
+        LDR      a1,[v2,#&100]
+        ORR      a1,a2,a1,LSL #1
+        ORR      a2,a1,#&3100000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a3,v1,#&70
+        MOV      v3,a3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        ADD      a3,v1,#&78
+        MOV      v6,a3
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel
+        MOV      v4,a1
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       translate_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel
+        TEQ      v4,#0
+        MOVNE    a2,v6
+        MOVNE    a1,v1
+        BLNE     define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_inc
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_inc
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        ORR      a1,v4,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v5
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a2,v3
+        MOV      a1,v1
+        BL       define_label
+|L00785c.J9.loop_x|
+        ADD      v3,v1,#&a0
+        LDR      a1,[v2,#&74]
+        TEQ      a1,#5
+        BEQ      |L0078a0.J13.loop_x|
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      a2,a1,LSL #16
+        LDR      a1,[v1,#&1fc]
+        ORR      a1,a2,a1,LSL #1
+        ORR      a2,a1,#&3100000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v3
+        MOV      a1,v1
+        MOV      a2,#&1a000000
+        BL       do_branch
+|L0078a0.J13.loop_x|
+        ADD      a3,v1,#&88
+        MOV      v6,a3
+        MOV      a1,v1
+        MOV      a2,#&a000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       align16
+        ADD      a2,v1,#&80
+        MOV      a1,v1
+        STR      a2,[sp,#&20]
+        BL       define_label
+        ADD      a3,v1,#&90
+        MOV      a2,v1
+        MOV      a1,v2
+        STR      a3,[sp,#&1c]
+        BL       fetch_pixel
+        MOV      v4,a1
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       translate_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel
+        TEQ      v4,#0
+        MOVNE    a1,v1
+        LDRNE    a2,[sp,#&1c]
+        BLNE     define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        MOV      a3,#0
+        BL       odither_inc
+        ADD      a3,v1,#&98
+        MOV      a2,v1
+        MOV      a1,v2
+        STR      a3,[sp,#&18]
+        BL       fetch_pixel2
+        MOV      v4,a1
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       translate_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel2
+        TEQ      v4,#0
+        MOVNE    a1,v1
+        LDRNE    a2,[sp,#&18]
+        BLNE     define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_inc2
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_inc2
+        MOV      a2,v6
+        MOV      a1,v1
+        BL       define_label
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        ORR      a1,v4,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#2
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a1,v1
+        MOV      a2,#&aa000000
+        LDR      a3,[sp,#&20]
+        BL       do_branch
+        LDR      a1,[v2,#&74]
+        TEQ      a1,#5
+        BEQ      |L007c14.J32.loop_x|
+        ADD      a3,v1,#&c8
+        MOV      v4,a3
+        MOV      a1,v1
+        MOV      a2,#&a000000
+        BL       do_branch
+        MOV      a2,v3
+        MOV      a1,v1
+        BL       define_label
+        LDR      a1,[v2,#&74]
+        TEQ      a1,#5
+        BNE      |L007a18.J21.loop_x|
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2400000
+        ORR      a2,a2,#4
+        B        |L007a68.J76.loop_x|
+|L007a18.J21.loop_x|
+        LDR      a1,[v1,#&164]
+        BL       rr
+        LDR      a2,[v1,#&1f8]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&164]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&160]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&160]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        LDR      a2,[v1,#&1f8]
+        ORR      a1,a1,a2,LSL #1
+        ORR      a2,a1,#&2800000
+        ORR      a2,a2,#&300
+|L007a68.J76.loop_x|
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1ec]
+        TEQ      a1,#0
+        BEQ      |L007ae0.J24.loop_x|
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        LDR      a2,[v1,#&204]
+        ORR      v3,a1,a2,LSL #7
+        LDR      a1,[v1,#&16c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BEQ      |L007ae0.J24.loop_x|
+        LDR      a1,[v1,#&170]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&170]
+        BL       rr
+        ORR      a2,v3,a1,LSL #16
+        LDR      a1,[v1,#&204]
+        ORR      a1,a2,a1,LSL #1
+        ORR      a2,a1,#&2800000
+        ORR      a2,a2,#&300
+        MOV      a1,v1
+        BL       do_ins
+|L007ae0.J24.loop_x|
+        ADD      a3,v1,#&b0
+        MOV      v3,a3
+        MOV      a1,v1
+        MOV      a2,#&a000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       align16
+        ADD      a2,v1,#&a8
+        MOV      a1,v1
+        STR      a2,[sp,#&14]
+        BL       define_label
+        ADD      a3,v1,#&b8
+        MOV      a2,v1
+        MOV      a1,v2
+        STR      a3,[sp,#&10]
+        BL       fetch_pixel2
+        MOV      v6,a1
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       translate_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel
+        TEQ      v6,#0
+        MOVNE    a1,v1
+        LDRNE    a2,[sp,#&10]
+        BLNE     define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_inc2
+        MOV      a2,v1
+        MOV      a1,v2
+        MOV      a3,#0
+        BL       odither_inc
+        ADD      a3,v1,#&c0
+        MOV      a2,v1
+        MOV      a1,v2
+        STR      a3,[sp,#&c]
+        BL       fetch_pixel
+        MOV      v6,a1
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       translate_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel2
+        TEQ      v6,#0
+        MOVNE    a1,v1
+        LDRNE    a2,[sp,#&c]
+        BLNE     define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_inc2
+        MOV      a2,v3
+        MOV      a1,v1
+        BL       define_label
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#2
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a1,v1
+        MOV      a2,#&aa000000
+        LDR      a3,[sp,#&14]
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_inc
+        MOV      a2,v4
+        MOV      a1,v1
+        BL       define_label
+|L007c14.J32.loop_x|
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2900000
+        ORR      a2,a2,#2
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a3,v1,#&d8
+        MOV      v4,a3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        ADD      a3,v1,#&d0
+        MOV      v3,a3
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel
+        MOV      v6,a1
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       translate_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel
+        TEQ      v6,#0
+        MOVNE    a2,v3
+        MOVNE    a1,v1
+        BLNE     define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_inc
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_inc
+        MOV      a2,v4
+        MOV      a1,v1
+        BL       define_label
+        B        |L0084e0.J35.loop_x|
+|L007cb8.J7.loop_x|
+        LDR      a1,[v1,#&1f4]
+        ADD      a3,v1,#&38
+        ADD      v3,v1,#&28
+        ADD      v6,v1,#&40
+        ADD      v4,v1,#&1ac
+        TEQ      a1,#0
+        STR      a3,[sp,#8]
+        BEQ      |L007e28.J36.loop_x|
+        ADD      a2,v2,#&40
+        LDMIA    a2,{a1,a2}
+        SUB      a3,a2,a1
+        CMP      a3,a1
+        BLE      |L007e28.J36.loop_x|
+        MOV      a4,a2
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a1,v1
+        MOV      a3,#0
+        MOV      a2,#0
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a2,v3
+        MOV      a1,v1
+        BL       define_label
+        LDR      a4,[v2,#&44]
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a1,v1
+        MOV      a3,#0
+        MOV      a2,#1
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a2,v1
+        MOV      a1,v2
+        LDR      a3,[sp,#8]
+        BL       fetch_pixel
+        STR      a1,[sp,#0]
+        LDR      a4,[v2,#&40]
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a1,v1
+        MOV      a3,#1
+        MOV      a2,#0
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a2,v6
+        MOV      a1,v1
+        BL       define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       translate_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_inc
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v5
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_unmasked
+        LDR      a4,[v2,#&40]
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a1,v1
+        MOV      a3,#1
+        MOV      a2,#0
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a3,v6
+        MOV      a1,v1
+        MOV      a2,#&5a000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_inc
+        B        |L0080c4.J50.loop_x|
+|L007e28.J36.loop_x|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BEQ      |L008110.J40.loop_x|
+        LDR      a1,[v2,#&40]
+        LDR      a2,[v2,#&68]
+        BL       |__rt_sdiv|
+        TEQ      a2,#0
+        BNE      |L008110.J40.loop_x|
+        CMP      a1,#4
+        BLE      |L008110.J40.loop_x|
+        LDR      a2,[v1,#&1e8]
+        TEQ      a2,#0
+        BNE      |L008110.J40.loop_x|
+        MOV      v6,a1
+        MOV      a4,a1
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a1,v1
+        MOV      a3,#0
+        MOV      a2,#0
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a2,v3
+        MOV      a1,v1
+        BL       define_label
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      a2,#&3300000
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a2,v1,#&e0
+        MOV      a1,v1
+        BL       define_label
+        MOV      a3,v5
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a4,v6
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a1,v1
+        MOV      a3,#0
+        MOV      a2,#1
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a2,v1
+        MOV      a1,v2
+        LDR      a3,[sp,#8]
+        BL       fetch_pixel
+        MOV      a2,v1
+        STR      a1,[sp,#0]
+        MOV      a1,v2
+        BL       translate_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_inc
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      a2,a1
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&178]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        LDR      a2,[sp,#0]
+        ORR      a2,a2,a1,LSL #16
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&500000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      a2,#&3a00000
+        ADD      a2,a2,#&40000000
+        ORR      a2,a2,a1,LSL #12
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      a2,a1
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&40000000
+        ORR      a2,a2,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a2,v1,#&f0
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        STR      a2,[sp,#4]
+        BEQ      |L0080a8.J45.loop_x|
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      a2,a1
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&178]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&1b00000
+        ORR      a2,a2,#&da0
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      a2,#&1a00000
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&f2000000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v2,#&100]
+        TEQ      a1,#1
+        BEQ      |L00806c.J47.loop_x|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        LDR      a2,[v1,#&214]
+        ORR      a2,a1,a2,LSL #7
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&178]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+|L00806c.J47.loop_x|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      a2,a1
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #16
+        ORR      a2,a1,#&1500000
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a1,v1
+        MOV      a2,#&ba000000
+        LDR      a3,[sp,#4]
+        BL       do_branch
+|L0080a8.J45.loop_x|
+        MOV      a3,v6
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       plot_current_output_words
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        BNE      |L0080cc.J49.loop_x|
+|L0080c4.J50.loop_x|
+        MOV      a3,v3
+        B        |L008220.J77.loop_x|
+|L0080cc.J49.loop_x|
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      a2,#&3300000
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a1,v1
+        LDR      a2,[sp,#4]
+        BL       define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       plot_some_pixels
+        B        |L0080c4.J50.loop_x|
+|L008110.J40.loop_x|
+        LDR      a4,[v2,#&44]
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a1,v1
+        MOV      a3,#0
+        MOV      a2,#0
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a2,v3
+        MOV      a1,v1
+        BL       define_label
+        LDR      a4,[v2,#&44]
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a1,v1
+        MOV      a3,#0
+        MOV      a2,#1
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a2,v1
+        MOV      a1,v2
+        LDR      a3,[sp,#8]
+        BL       fetch_pixel
+        MOV      a2,v1
+        STR      a1,[sp,#0]
+        MOV      a1,v2
+        BL       translate_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_inc
+        MOV      a2,v6
+        MOV      a1,v1
+        BL       define_label
+        LDR      a4,[v2,#&40]
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a1,v1
+        MOV      a3,#1
+        MOV      a2,#0
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a3,v3
+        MOV      a1,v1
+        MOV      a2,#&4a000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_inc
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v6
+        MOV      a1,v1
+        MOV      a2,#&1a000000
+        BL       do_branch
+        MOV      a3,v5
+|L008220.J77.loop_x|
+        MOV      a1,v1
+        MOV      a2,#&a000000
+        BL       do_branch
+        LDR      a1,[sp,#0]
+        TEQ      a1,#0
+        BEQ      |L0084e0.J35.loop_x|
+        MOV      a1,v1
+        LDR      a2,[sp,#8]
+        BL       define_label
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BEQ      |L008450.J55.loop_x|
+        LDR      a1,[v2,#&40]
+        LDR      a2,[v2,#&68]
+        BL       |__rt_sdiv|
+        TEQ      a2,#0
+        BNE      |L008450.J55.loop_x|
+        CMP      a1,#4
+        BLE      |L008450.J55.loop_x|
+        LDR      a1,[v1,#&1e8]
+        TEQ      a1,#0
+        BNE      |L008450.J55.loop_x|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_inc
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      v4,a1
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v4,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      v4,a1,LSL #12
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        ORR      v4,v4,a1,LSL #16
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v4,a1
+        ORR      a2,a1,#&500000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      a2,#&3a00000
+        ADD      a2,a2,#&40000000
+        ORR      a2,a2,a1,LSL #12
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v4,a1
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v4,a1,LSL #12
+        ORR      a2,a1,#&40000000
+        ORR      a2,a2,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        ADD      v4,v1,#&e8
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        BEQ      |L0083e4.J60.loop_x|
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v6,a1
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v6,a1,LSL #12
+        ORR      a2,a1,#&1b00000
+        ORR      a2,a2,#&da0
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      a2,#&1a00000
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&f2000000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v2,#&100]
+        TEQ      a1,#1
+        BEQ      |L0083b0.J62.loop_x|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        LDR      a2,[v1,#&214]
+        ORR      v6,a1,a2,LSL #7
+        LDR      a1,[v1,#&178]
+        BL       rr
+        ORR      a1,v6,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+|L0083b0.J62.loop_x|
+        LDR      a1,[v1,#&178]
+        BL       rr
+        MOV      v6,a1
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        ORR      a1,v6,a1,LSL #16
+        ORR      a2,a1,#&1500000
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v4
+        MOV      a1,v1
+        MOV      a2,#&ba000000
+        BL       do_branch
+|L0083e4.J60.loop_x|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       skip_current_output_words
+        LDR      a1,[v2,#&104]
+        TEQ      a1,#&20
+        BNE      |L00840c.J64.loop_x|
+|L0083fc.J65.loop_x|
+        MOV      a3,v3
+        MOV      a1,v1
+        MOV      a2,#&a000000
+        B        |L0084dc.J78.loop_x|
+|L00840c.J64.loop_x|
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        MOV      a2,#&3300000
+        ORR      a2,a2,a1,LSL #16
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v3
+        MOV      a1,v1
+        MOV      a2,#&fa000000
+        BL       do_branch
+        MOV      a2,v4
+        MOV      a1,v1
+        BL       define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       skip_some_pixels
+        B        |L0083fc.J65.loop_x|
+|L008450.J55.loop_x|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_inc
+        ADD      a2,v1,#&48
+        MOV      v6,a2
+        MOV      a1,v1
+        BL       define_label
+        LDR      a4,[v2,#&40]
+        STMDB    sp!,{a4}
+        MOV      a4,v4
+        MOV      a1,v1
+        MOV      a3,#1
+        MOV      a2,#0
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a3,v3
+        MOV      a1,v1
+        MOV      a2,#&4a000000
+        BL       do_branch
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_inc
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1a8]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a3,v6
+        MOV      a1,v1
+        MOV      a2,#&1a000000
+|L0084dc.J78.loop_x|
+        BL       do_branch
+|L0084e0.J35.loop_x|
+        MOV      a2,v5
+        MOV      a1,v1
+        BL       define_label
+        LDR      a1,[v2,#&104]!
+        TEQ      a1,#&20
+        BEQ      |L008678.J81.loop_x|
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1b00000
+        ORR      a2,a2,#&da0
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      a2,#&1a00000
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&f2000000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1e8]
+        TEQ      a1,#0
+        LDREQ    a1,[v1,#&1ec]
+        TEQEQ    a1,#0
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      v2,v2,a1,LSL #8
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORRNE    a2,a1,#&1a00000
+        ORRNE    a2,a2,#&70
+        BNE      |L00864c.J79.loop_x|
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&30
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&4900000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&2600000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      v2,v2,a1,LSL #8
+        LDR      a1,[v1,#&158]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        ORR      a2,a2,#&30
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        ORR      v3,v2,a1,LSL #16
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&1a0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #8
+        ORR      a1,v3,a1
+        ORR      a2,a1,#&1800000
+        ORR      a2,a2,#&10
+|L00864c.J79.loop_x|
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&19c]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&198]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&4800000
+|L008670.J80.loop_x|
+        MOV      a1,v1
+        BL       do_ins
+|L008678.J81.loop_x|
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+loop_y
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v2,a1
+        MOV      v1,a2
+        SUB      sp,sp,#&10
+        LDR      a1,[a1,#&74]
+        MOV      v3,#1
+        MOV      a1,v3,LSL a1
+        STR      a1,[a2,#&1f8]
+        LDR      a1,[v2,#&78]
+        MOV      a1,v3,LSL a1
+        STR      a1,[a2,#&1fc]
+        LDR      a1,[a2,#&1f8]
+        MOV      a1,v3,LSL a1
+        SUB      a1,a1,#1
+        STR      a1,[v1,#&200]
+        LDR      a2,[v1,#&1ec]
+        TEQ      a2,#0
+        LDR      a1,[v1,#&1f8]
+        BEQ      |L0086fc.J17.loop_y|
+        LDR      a2,[v1,#&1f0]
+        TEQ      a2,#0
+        STRNE    v3,[v1,#&204]
+        STRNE    v3,[v1,#&208]
+        STRNE    v3,[v1,#&20c]
+        BNE      |L0086fc.J17.loop_y|
+        STR      a1,[v1,#&204]
+        LDR      a1,[v1,#&1fc]
+        STR      a1,[v1,#&208]
+        LDR      a1,[v1,#&200]
+        STR      a1,[v1,#&20c]
+|L0086fc.J17.loop_y|
+        LDR      a2,[v1,#&214]
+        RSB      a1,a2,#5
+        STR      a1,[v1,#&224]
+        MOV      a1,v3,LSL a1
+        STR      a1,[v1,#&220]
+        LDR      a1,[v2,#&104]
+        MOV      a1,v3,LSL a1
+        SUB      a1,a1,#1
+        STR      a1,[v1,#&218]
+        LDR      a1,[v2,#&100]
+        MOV      a1,v3,LSL a1
+        SUB      a1,a1,#1
+        STR      a1,[v1,#&21c]
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BEQ      |L0087a4.J20.loop_y|
+        LDR      a2,[v1,#&1f8]
+        CMP      a2,#&10
+        BLT      |L0087a4.J20.loop_y|
+        LDR      a1,[v2,#&104]
+        CMP      a1,a2
+        BGE      |L0087a4.J20.loop_y|
+        LDR      a2,[v2,#&138]
+        TST      a2,#1
+        BEQ      |L0087a4.J20.loop_y|
+        TEQ      a1,#&10
+        MOVEQ    a1,#2
+        BEQ      |L0087a0.J111.loop_y|
+        LDR      a1,[v1,#&210]
+        TEQ      a1,#3
+        RSBNE    a1,a1,#6
+        BNE      |L0087a0.J111.loop_y|
+        LDR      a1,[v2,#&110]
+        TEQ      a1,#0
+        BEQ      |L00879c.J30.loop_y|
+        LDR      a1,[a3,#&1c]!
+        TEQ      a1,#1
+        MOVEQ    a1,#3
+        BEQ      |L0087a0.J111.loop_y|
+|L00879c.J30.loop_y|
+        MOV      a1,#4
+|L0087a0.J111.loop_y|
+        STR      a1,[v1,#&1f4]
+|L0087a4.J20.loop_y|
+        MOV      a1,v1
+        MVN      a2,#&2a000
+        ADD      a2,a2,#&9300000
+        BL       do_ins
+        LDR      a1,[v2,#&110]
+        TEQ      a1,#0
+        STRNE    v3,[v1,#&1e4]
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       ptrs_rn
+        LDR      a1,[v1,#&1e0]
+        MOV      a1,v3,LSL a1
+        SUB      v5,a1,#1
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BNE      |L0087f4.J39.loop_y|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L0087fc.J38.loop_y|
+|L0087f4.J39.loop_y|
+        MOV      v6,#&c
+        B        |L008800.J37.loop_y|
+|L0087fc.J38.loop_y|
+        MOV      v6,#8
+|L008800.J37.loop_y|
+        LDR      a1,[v1,#&1f4]
+        TEQ      a1,#0
+        ADDNE    v6,v6,#4
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       xloop_rn
+        MOV      a2,#1
+        LDR      a1,[v1,#&1e0]
+        MOV      a2,a2,LSL a1
+        SUB      a3,a2,#1
+        BIC      v3,a3,v5
+        RSB      v4,v6,a1,LSL #2
+        LDR      a1,[v1,#&164]
+        CMN      a1,#1
+        BEQ      |L00884c.J44.loop_y|
+        MOV      a2,#1
+        MVN      a1,a2,LSL a1
+        AND      v3,a1,v3
+        SUB      v4,v4,#4
+|L00884c.J44.loop_y|
+        LDR      a1,[v1,#&19c]
+        CMN      a1,#1
+        BEQ      |L008868.J46.loop_y|
+        MOV      a2,#1
+        MVN      a1,a2,LSL a1
+        AND      v3,a1,v3
+        SUB      v4,v4,#4
+|L008868.J46.loop_y|
+        LDR      a1,[v1,#&16c]
+        CMN      a1,#1
+        BEQ      |L008884.J48.loop_y|
+        MOV      a2,#1
+        MVN      a1,a2,LSL a1
+        AND      v3,a1,v3
+        SUB      v4,v4,#4
+|L008884.J48.loop_y|
+        LDR      a1,[v1,#&178]
+        CMN      a1,#1
+        BEQ      |L0088a0.J50.loop_y|
+        MOV      a2,#1
+        MVN      a1,a2,LSL a1
+        AND      v3,a1,v3
+        SUB      v4,v4,#4
+|L0088a0.J50.loop_y|
+        LDR      a1,[v1,#&17c]
+        CMN      a1,#1
+        BEQ      |L0088bc.J52.loop_y|
+        MOV      a2,#1
+        MVN      a1,a2,LSL a1
+        AND      v3,a1,v3
+        SUB      v4,v4,#4
+|L0088bc.J52.loop_y|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       yloop_rn_count
+        LDR      a2,[v1,#&1e0]
+        ADD      a2,a1,a2
+        LDR      a1,[v1,#&1e4]
+        ADD      a1,a2,a1
+        CMP      a1,#&d
+        MOVGT    a1,#0
+        MOVLE    a1,#1
+        STR      a1,[sp,#0]
+        CMP      a1,#0
+        MOVEQ    a1,#4
+        STREQ    a1,[v1,#&1e0]
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       yloop_rn
+        BNE      |L00891c.J59.loop_y|
+        MOV      a2,#1
+        LDR      a1,[v1,#&1e0]
+        MOV      a1,a2,LSL a1
+        SUB      a1,a1,#1
+        BIC      a1,a1,#&f
+        STR      a1,[sp,#4]
+|L00891c.J59.loop_y|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       fetch_pixel_init
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       save_pixel_init
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       xloop_init
+        LDR      a1,[v1,#&1f4]
+        TEQ      a1,#0
+        BEQ      |L0089a8.J61.loop_y|
+        LDR      a1,[v2,#&74]
+        TEQ      a1,#4
+        BNE      |L0089a8.J61.loop_y|
+        MOV      a2,#1
+        LDR      a1,[v1,#&1ac]
+        MVN      a1,a2,LSL a1
+        AND      a1,a1,v3
+        MOV      a3,#1
+        LDR      a2,[v1,#&158]
+        ORR      v3,a1,a3,LSL a2
+        ORR      a1,v3,v5
+        ORR      a2,a1,#&9000000
+        ORR      a2,a2,#&2d0000
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a2,#1
+        LDR      a1,[v1,#&1ac]
+        ORR      a1,v3,a2,LSL a1
+        MOV      a3,#1
+        LDR      a2,[v1,#&158]
+        MVN      a2,a3,LSL a2
+        AND      v3,a2,a1
+        B        |L0089bc.J64.loop_y|
+|L0089a8.J61.loop_y|
+        ORR      a1,v3,v5
+        ORR      a2,a1,#&9000000
+        ORR      a2,a2,#&2d0000
+        MOV      a1,v1
+        BL       do_ins
+|L0089bc.J64.loop_y|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       yloop_init
+        LDR      a1,[v1,#&1f4]
+        TEQ      a1,#0
+        BEQ      |L008a0c.J65.loop_y|
+        LDR      a1,[v2,#&74]
+        TEQ      a1,#4
+        BNE      |L008a0c.J65.loop_y|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      a2,a1
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1ac]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+|L008a0c.J65.loop_y|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       simple_y_scale
+        ADD      a2,v1,#&58
+        TEQ      a1,#0
+        STR      a2,[sp,#&c]
+        BNE      |L008a38.J68.loop_y|
+        MOV      a1,v1
+        MOV      a2,#&a000000
+        LDR      a3,[sp,#&c]
+        BL       do_branch
+|L008a38.J68.loop_y|
+        ADD      a2,v1,#&50
+        MOV      a1,v1
+        STR      a2,[sp,#8]
+        BL       define_label
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       simple_y_scale
+        TEQ      a1,#0
+        BNE      |L008a74.J70.loop_y|
+        LDR      a1,[v1,#&1d4]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+        ORR      a2,a1,#&8800000
+        MOV      a1,v1
+        BL       do_ins
+|L008a74.J70.loop_y|
+        LDR      a1,[v2,#&110]
+        TEQ      a1,#0
+        BEQ      |L008c10.J72.loop_y|
+        LDR      a1,[v1,#&1dc]
+        BL       rr
+        MOV      a2,a1
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1d8]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&194]
+        BL       rr
+        MOV      a2,a1
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1dc]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1d8]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a3,v2,#&114
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v2,#&74]
+        CMP      a1,#5
+        BGE      |L008bcc.J74.loop_y|
+        TEQ      a1,#3
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        SUB      sp,sp,#4
+        BNE      |L008b68.J76.loop_y|
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        LDR      a2,[sp,#0]
+        ORR      a2,a2,a1,LSL #16
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&1d8]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&800000
+        B        |L008b98.J112.loop_y|
+|L008b68.J76.loop_y|
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        LDR      a2,[sp,#0]
+        ORR      a2,a2,a1,LSL #16
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&1d8]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&800000
+        ORR      a2,a2,#&80
+|L008b98.J112.loop_y|
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #16
+        ORR      a2,a1,#&3c00000
+        ORR      a2,a2,#3
+        B        |L008c08.J113.loop_y|
+|L008bcc.J74.loop_y|
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        LDR      a2,[sp,#0]
+        ORR      a2,a2,a1,LSL #16
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&1d8]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&800000
+        ORR      a2,a2,#&100
+|L008c08.J113.loop_y|
+        MOV      a1,v1
+        BL       do_ins
+|L008c10.J72.loop_y|
+        LDR      a1,[sp,#0]
+        CMP      a1,#0
+        BNE      |L008c78.J82.loop_y|
+        LDR      a1,[v1,#&1d8]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&1d4]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #16
+        ORR      a1,a1,v6
+        ORR      a2,a1,#&2800000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[sp,#4]
+        ORR      a2,a1,#&9000000
+        ORR      a2,a2,#&2d0000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1d8]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&8900000
+        MOV      a1,v1
+        BL       do_ins
+|L008c78.J82.loop_y|
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       loop_x
+        BEQ      |L008c9c.J83.loop_y|
+        LDR      a1,[v1,#&1d4]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a1,a1,v5
+        B        |L008cbc.J114.loop_y|
+|L008c9c.J83.loop_y|
+        LDR      a1,[sp,#4]
+        ORR      a2,a1,#&8000000
+        ORR      a2,a2,#&bd0000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1d4]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+|L008cbc.J114.loop_y|
+        ORR      a2,a1,#&8900000
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a2,v1
+        MOV      a1,v2
+        BL       simple_y_scale
+        ADD      v3,v1,#&198
+        TEQ      a1,#0
+        BEQ      |L008e40.J86.loop_y|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BEQ      |L008d60.J88.loop_y|
+        LDR      a1,[v2,#&110]
+        TEQ      a1,#0
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        SUB      sp,sp,#4
+        BEQ      |L008d2c.J90.loop_y|
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #16
+        ORR      a2,a1,#&2800000
+        ORR      a2,a2,#1
+        B        |L008d58.J115.loop_y|
+|L008d2c.J90.loop_y|
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        LDR      a2,[sp,#0]
+        ORR      a2,a2,a1,LSL #16
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&1b8]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&400000
+|L008d58.J115.loop_y|
+        MOV      a1,v1
+        BL       do_ins
+|L008d60.J88.loop_y|
+        LDR      a4,[v2,#0]
+        STMDB    sp!,{a4}
+        MOV      a4,v3
+        MOV      a1,v1
+        MOV      a3,#0
+        MOV      a2,#0
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a2,v1
+        MOV      a1,v2
+        MOV      a3,#1
+        BL       odither_inc
+        MOV      a2,v1
+        MOV      a1,v2
+        MOV      a3,#0
+        BL       odither_inc
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BNE      |L008dbc.J94.loop_y|
+        LDR      a1,[v2,#&f4]!
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L008dec.J93.loop_y|
+|L008dbc.J94.loop_y|
+        LDR      a1,[v1,#&168]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&168]
+        BL       rr
+        ORR      v2,v2,a1,LSL #16
+        LDR      a1,[v1,#&1bc]
+        BL       rr
+        ORR      a1,v2,a1
+        ORR      a2,a1,#&400000
+        MOV      a1,v1
+        BL       do_ins
+|L008dec.J93.loop_y|
+        LDR      a1,[v1,#&1d4]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+        ORR      a2,a1,#&8800000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&1b0]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1b0]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a1,v1
+        MOV      a2,#&ca000000
+        LDR      a3,[sp,#8]
+        BL       do_branch
+        B        |L0090d8.J97.loop_y|
+|L008e40.J86.loop_y|
+        LDR      a1,[v1,#&1b0]
+        BL       rr
+        MOV      v5,a1,LSL #12
+        LDR      a1,[v1,#&1b0]
+        BL       rr
+        ORR      a1,v5,a1,LSL #16
+        ORR      a2,a1,#&2500000
+        ORR      a2,a2,#1
+        MOV      a1,v1
+        BL       do_ins
+        ADD      a3,v1,#&60
+        MOV      v5,a3
+        MOV      a1,v1
+        MOV      a2,#&da000000
+        BL       do_branch
+        LDR      a4,[v2,#0]
+        STMDB    sp!,{a4}
+        MOV      a4,v3
+        MOV      a1,v1
+        MOV      a3,#0
+        MOV      a2,#0
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a2,v1
+        MOV      a1,v2
+        MOV      a3,#1
+        BL       odither_inc
+        MOV      a2,v1
+        MOV      a1,v2
+        MOV      a3,#0
+        BL       odither_inc
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L008f78.J98.loop_y|
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&1d0]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&4100000
+        ADD      a3,v2,#&38
+        SUB      a1,a3,v2
+        ORR      a1,a1,#&1800000
+        ADD      a2,a2,a1
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&158]
+        BL       rr
+        MOV      v3,a1
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&1500000
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&c0000000
+        ORR      a2,a2,#&32800000
+        ORR      a2,a2,#&20
+        MOV      a1,v1
+        BL       do_ins
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      v3,a1,LSL #12
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        ORR      a1,v3,a1,LSL #16
+        ORR      a2,a1,#&2400000
+        ORR      a2,a2,#8
+        MOV      a1,v1
+        BL       do_ins
+|L008f78.J98.loop_y|
+        MOV      a1,v1
+        LDR      a2,[sp,#&c]
+        BL       define_label
+        LDR      a4,[v2,#&10]
+        STMDB    sp!,{a4}
+        ADD      a4,v1,#&1b4
+        MOV      v3,a4
+        MOV      a1,v1
+        MOV      a3,#1
+        MOV      a2,#0
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a1,v1
+        MOV      a2,#&5a000000
+        LDR      a3,[sp,#8]
+        BL       do_branch
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BEQ      |L009038.J100.loop_y|
+        LDR      a1,[v2,#&110]
+        TEQ      a1,#0
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        SUB      sp,sp,#4
+        BEQ      |L009004.J102.loop_y|
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1,LSL #16
+        ORR      a2,a1,#&2800000
+        ORR      a2,a2,#1
+        B        |L009030.J116.loop_y|
+|L009004.J102.loop_y|
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&15c]
+        BL       rr
+        LDR      a2,[sp,#0]
+        ORR      a2,a2,a1,LSL #16
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&1b8]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&400000
+|L009030.J116.loop_y|
+        MOV      a1,v1
+        BL       do_ins
+|L009038.J100.loop_y|
+        LDR      a1,[v1,#&1f0]
+        TEQ      a1,#0
+        BNE      |L009054.J106.loop_y|
+        LDR      a1,[v2,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        BNE      |L009094.J105.loop_y|
+|L009054.J106.loop_y|
+        LDR      a1,[v1,#&168]
+        BL       rr
+        MOV      a2,a1,LSL #12
+        STR      a2,[sp,#-4]!
+        LDR      a1,[v1,#&168]
+        BL       rr
+        LDR      a2,[sp,#0]
+        ORR      a2,a2,a1,LSL #16
+        STR      a2,[sp,#0]
+        LDR      a1,[v1,#&1bc]
+        BL       rr
+        LDR      a2,[sp],#4
+        ORR      a1,a2,a1
+        ORR      a2,a1,#&400000
+        MOV      a1,v1
+        BL       do_ins
+|L009094.J105.loop_y|
+        ADD      v2,v2,#&c
+        LDMIB    v2!,{a1,a2}
+        ADD      a4,a1,a2
+        STMDB    sp!,{a4}
+        MOV      a4,v3
+        MOV      a1,v1
+        MOV      a3,#0
+        MOV      a2,#1
+        BL       arbitrary_add
+        ADD      sp,sp,#4
+        MOV      a1,v1
+        MOV      a2,#&a000000
+        LDR      a3,[sp,#&c]
+        BL       do_branch
+        MOV      a2,v5
+        MOV      a1,v1
+        BL       define_label
+|L0090d8.J97.loop_y|
+        LDR      a1,[v1,#&1d4]
+        BL       rr
+        MOV      v2,a1,LSL #12
+        LDR      a1,[v1,#&1d4]
+        BL       rr
+        ORR      a1,v2,a1,LSL #16
+        ADD      a2,v4,v6
+        ORR      a1,a1,a2
+        ORR      a2,a1,#&2800000
+        MOV      a1,v1
+        BL       do_ins
+        MOV      a1,v1
+        MVN      a2,#&2a000
+        ADD      a2,a2,#&8c00000
+        BL       do_ins
+        LDR      a1,[v1,#&1d8]
+        BL       rr
+        MOV      v2,a1
+        LDR      a1,[v1,#&1dc]
+        BL       rr
+        ORR      a1,v2,a1,LSL #12
+        ORR      a2,a1,#&1a00000
+        MOV      a1,v1
+        BL       do_ins
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+find_or_compile_code
+        MOV      ip,sp
+        STMDB    sp!,{v1-v5,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      v2,a2
+        MOV      v3,a3
+        LDR      a1,[a1,#&74]
+        LDR      a2,[a2,#&210]
+        ADD      a3,a1,a2,LSL #3
+        LDR      a2,[v2,#&1e8]
+        ADD      v4,a3,a2,LSL #6
+        LDR      a2,[v2,#&1ec]
+        TEQ      a2,#0
+        ORRNE    v4,v4,#&200
+        LDR      a2,[v2,#&1f0]
+        TEQ      a2,#0
+        ORRNE    v4,v4,#&400
+        LDR      a2,[v1,#&f8]
+        TEQ      a2,#0
+        ORRNE    v4,v4,#&800
+        LDR      a2,[v1,#&b4]
+        TEQ      a2,#0
+        ORRNE    v4,v4,#&1000
+        LDR      a2,[v1,#&104]
+        LDR      a3,[v1,#&100]
+        TEQ      a2,a3
+        ORRNE    v4,v4,#&2000
+        LDR      a2,[v1,#&78]
+        TEQ      a1,a2
+        ORRNE    v4,v4,#&4000
+        LDR      a1,[v1,#&f4]
+        AND      a1,a1,#&ff
+        TEQ      a1,#&32
+        ORREQ    v4,v4,#&8000
+        LDR      a2,[v1,#&110]
+        CMP      a2,#0
+        BEQ      |L0091e4.J20.find_or_compile_code|
+        ORR      v4,v4,#&10000
+        BEQ      |L0091e4.J20.find_or_compile_code|
+        LDR      a1,[v3,#&1c]
+        TEQ      a1,#1
+        ORREQ    v4,v4,#&20000
+|L0091e4.J20.find_or_compile_code|
+        LDR      a1,[v1,#&10c]
+        TEQ      a1,#0
+        BEQ      |L00920c.J23.find_or_compile_code|
+        ORR      v4,v4,#&40000
+        LDR      a3,[v2,#&228]
+        TEQ      a3,#0
+        ORRNE    v4,v4,#&80000
+        LDR      a1,[a1,#&10]
+        TEQ      a1,#3
+        ORREQ    v4,v4,#&100000
+|L00920c.J23.find_or_compile_code|
+        TEQ      a2,#0
+        LDRNE    a1,[v1,#&138]
+        ANDNE    a1,a1,#1
+        TEQNE    a1,#0
+        ORRNE    v4,v4,#&200000
+        ADD      a1,v2,#&22c
+        ADD      a2,v2,#&2ec
+        ADD      a2,a2,#&2000
+        CMP      a2,a1
+        BLS      |L009290.J33.find_or_compile_code|
+|L009234.J32.find_or_compile_code|
+        LDR      a3,[a1,#0]
+        TEQ      a3,v4
+        LDREQ    a3,[a1,#4]
+        LDREQ    a4,[v1,#&44]
+        TEQEQ    a3,a4
+        LDREQ    a3,[a1,#8]
+        LDREQ    a4,[v1,#&40]
+        TEQEQ    a3,a4
+        LDREQ    a4,[a1,#&c]
+        LDREQ    a3,[v1,#&14]
+        TEQEQ    a4,a3
+        LDREQ    a3,[a1,#&10]
+        LDREQ    a4,[v1,#&10]
+        TEQEQ    a3,a4
+        LDREQ    a4,[a1,#&14]
+        LDREQ    a3,[v1,#0]
+        TEQEQ    a4,a3
+        ADDEQ    a1,a1,#&18
+        LDMEQDB  fp,{v1-v5,fp,sp,pc}^
+        ADD      a1,a1,#&18
+        ADD      a1,a1,#&400
+        CMP      a2,a1
+        BHI      |L009234.J32.find_or_compile_code|
+|L009290.J33.find_or_compile_code|
+        LDR      a1,[v2,#8]
+        ADD      ip,a1,a1,LSL #1
+        ADD      a1,ip,a1,LSL #7
+        ADD      a1,v2,a1,LSL #3
+        ADD      v5,a1,#&22c
+        MVN      a1,#0
+        STR      a1,[v5,#0]
+        LDR      a1,[v1,#&44]
+        STR      a1,[v5,#4]
+        LDR      a1,[v1,#&40]
+        STR      a1,[v5,#8]
+        LDR      a1,[v1,#&14]
+        STR      a1,[v5,#&c]
+        LDR      a1,[v1,#&10]
+        STR      a1,[v5,#&10]
+        LDR      a1,[v1,#0]
+        MOV      a2,v2
+        STR      a1,[v5,#&14]
+        MOV      a1,v1
+        BL       compile_buffer_init
+        MOV      a3,v3
+        MOV      a2,v2
+        MOV      a1,v1
+        BL       loop_y
+        MOV      a1,v2
+        BL       compile_buffer_done
+        STR      v4,[v5,#0]
+        LDR      a1,[v2,#&c]!
+        LDMDB    fp,{v1-v5,fp,sp,pc}^
+
+        IMPORT  create_dynamic_area
+putscaled_compiler
+        MOV      ip,sp
+        STMDB    sp!,{v1-v6,fp,ip,lr,pc}
+        SUB      fp,ip,#4
+        MOV      v1,a1
+        MOV      v2,a2
+        MOV      v3,a4
+        SUB      sp,sp,#4
+        ADD      a1,a2,#&2f0
+        ADD      a1,a1,#&2000
+        CMP      a1,a3
+        MOVHI    a2,#4
+        MOVHI    a1,#&5a
+        ADDHI    a1,a1,#&f00
+        BLHI     exit_c
+        MOV      a1,v2
+        BL       check_workspace
+        AND      a1,v3,#7
+        STR      a1,[v2,#&1e8]
+        TST      v3,#8
+        MOV      a3,#0
+        MOVEQ    a1,a3
+        MOVNE    a1,#1
+        STR      a1,[v2,#&1ec]
+        MOV      a3,#0
+        LDR      a2,[v1,#&80]
+        TEQ      a3,a2,ASR #27
+        MOVEQ    a2,#0
+        MOVNE    a2,#1
+        AND      a1,a2,a1
+        STR      a1,[v2,#&1f0]
+        LDR      a1,[v1,#&110]
+        TEQ      a1,#0
+        BEQ      |L009780.J12.putscaled_compiler|
+        LDR      v4,[v1,#&120]
+        LDR      a1,[v4,#&20]
+        ADD      a1,v4,a1
+        MOV      a2,#0
+        STR      a2,[sp,#-8]!
+        LDR      a2,[a1,#0]
+        CMN      a2,#1
+        LDREQ    v5,[a1,#4]
+        LDREQ    a1,[a1,#8]
+        BEQ      |L0093c8.J123.putscaled_compiler|
+        LDR      a1,[v4,#&20]
+        ADD      a2,v4,a1
+        ADD      v5,a2,#4
+        LDR      a2,[v4,#0]
+        SUB      a1,a2,a1
+        SUB      a1,a1,#4
+|L0093c8.J123.putscaled_compiler|
+        MOV      a4,#0
+        STR      a1,[sp,#4]
+        MOV      a3,sp
+        MOV      a2,#0
+        STMDB    sp!,{a2-a4}
+        MOV      a1,v5
+        MOV      a3,#0
+        BL       find_image_dims
+        ADD      sp,sp,#&c
+        TEQ      a1,#0
+        MOVNE    a2,#2
+        MOVNE    a1,#&87
+        ADDNE    a1,a1,#&f00
+        BLNE     exit_c
+        LDR      a1,[v1,#&124]
+        STR      a1,[sp,#8]
+        TEQ      a1,#0
+        SUB      sp,sp,#4
+        BNE      |L009490.J19.putscaled_compiler|
+        LDR      a1,[sp,#4]
+        BL       create_dynamic_area
+        MOVS     v3,a1
+        MOVEQ    a2,#1
+        MOVEQ    a1,#&95
+        ADDEQ    a1,a1,#&f00
+        BLEQ     exit_c
+        MOV      a4,sp
+        STMDB    sp!,{a4}
+        ADD      a4,sp,#&10
+        MOV      a3,v3
+        MOV      a2,#&c0000001
+        MOV      a1,#&5c
+        BL       _swix
+        ADD      sp,sp,#4
+        TEQ      a1,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&9b
+        ADDNE    a1,a1,#&f00
+        BLNE     exit_c
+        LDR      a1,[sp,#&c]
+        MVN      a2,#0
+        ADD      v1,v1,#&124
+        STMIA    v1,{a1,v3}
+        SUB      v1,v1,#&124
+        LDR      a1,[sp,#&c]
+        STR      a2,[a1,#0]
+        LDR      a1,[sp,#&c]
+        LDR      a2,[sp,#0]
+        STR      a2,[a1,#&10]!
+        B        |L009550.J32.putscaled_compiler|
+|L009490.J19.putscaled_compiler|
+        MOV      a4,sp
+        MOV      a2,#&40000001
+        MOV      a1,#&5c
+        LDR      a3,[v1,#&128]
+        BL       _swix
+        MOV      a3,a1
+        LDR      a1,[sp,#0]
+        CMP      a1,#0
+        BLE      |L0094d4.J26.putscaled_compiler|
+        LDR      a2,[sp,#&c]
+        LDR      a4,[a2,#&10]
+        TEQ      a1,a4
+        BEQ      |L0094d4.J26.putscaled_compiler|
+        MVN      a4,#0
+        STR      a4,[a2,#0]
+        LDR      a2,[sp,#&c]
+        STR      a1,[a2,#&10]!
+|L0094d4.J26.putscaled_compiler|
+        TEQ      a3,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&b9
+        ADDNE    a1,a1,#&f00
+        BLNE     exit_c
+        LDR      a1,[sp,#4]
+        LDR      a2,[sp,#0]
+        CMP      a2,a1
+        BGE      |L009550.J32.putscaled_compiler|
+        SUB      sp,sp,#4
+        MOV      a4,sp
+        STMDB    sp!,{a4}
+        SUB      a4,a1,a2
+        MOV      a2,#&40000003
+        MOV      a1,#&2a
+        LDR      a3,[v1,#&128]
+        BL       _swix
+        ADD      sp,sp,#4
+        TEQ      a1,#0
+        MOVNE    a2,#1
+        MOVNE    a1,#&c1
+        ADDNE    a1,a1,#&f00
+        BLNE     exit_c
+        MVN      a2,#0
+        LDR      a1,[sp,#&10]
+        STR      a2,[a1,#0]
+        LDR      a2,[sp],#4
+        LDR      a1,[sp,#0]
+        ADD      a1,a1,a2
+        LDR      a2,[sp,#&c]
+        STR      a1,[a2,#&10]!
+|L009550.J32.putscaled_compiler|
+        ADD      sp,sp,#4
+        LDR      a1,[v1,#&74]
+        TEQ      a1,#5
+        MOVNE    a2,#4
+        MOVNE    a1,#&3dc
+        ADDNE    a1,a1,#&c00
+        BLNE     exit_c
+        LDR      a1,[v2,#&1ec]
+        TEQ      a1,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&dd
+        ADDNE    a1,a1,#&f00
+        BLNE     exit_c
+        MOV      a2,#0
+        LDR      a1,[v1,#&80]
+        TEQ      a2,a1,ASR #24
+        MOVEQ    a1,#0
+        STREQ    a1,[v1,#&b4]
+        STREQ    a1,[v1,#&f8]
+        SUB      sp,sp,#4
+        LDR      a1,[v1,#&40]
+        LDR      a2,[v1,#&2c]
+        MUL      a2,a1,a2
+        LDR      a3,[v1,#&44]
+        SUB      a1,a3,a1
+        BL       |__rt_sdiv|
+        LDR      a2,[v1,#&114]
+        ADD      a1,a1,a2
+        ADD      v6,a1,#2
+        MOV      v3,#0
+        STR      v3,[sp,#0]
+        LDR      a1,[v1,#&104]
+        CMP      a1,#4
+        BGT      |L0095ec.J42.putscaled_compiler|
+        MOV      v3,#1
+        LDR      a2,[v1,#&134]
+        TST      a2,#2
+        MOVEQ    a2,#0
+        STREQ    a2,[v1,#&b4]
+|L0095ec.J42.putscaled_compiler|
+        CMP      v6,#0
+        LDRLT    a2,[v4,#&10]!
+        SUBLT    v6,a2,#1
+        ADD      a3,v1,#&40
+        LDMIA    a3,{a2,a3}
+        SUB      a3,a3,a2
+        ADD      a3,a3,a3,LSL #1
+        CMP      a2,a3,LSL #1
+        BLT      |L009628.J48.putscaled_compiler|
+        ADD      a3,v1,#&10
+        LDMIA    a3,{a2,a3}
+        SUB      a3,a3,a2
+        ADD      a3,a3,a3,LSL #1
+        CMP      a2,a3,LSL #1
+        ORRGE    v3,v3,#2
+|L009628.J48.putscaled_compiler|
+        LDR      a2,[v1,#&134]
+        TST      a2,#2
+        BNE      |L009704.J51.putscaled_compiler|
+        LDR      a2,[v1,#&138]
+        TST      a2,#1
+        BEQ      |L009704.J51.putscaled_compiler|
+        SUB      sp,sp,#4
+        TEQ      a1,#8
+        BNE      |L0096f8.J54.putscaled_compiler|
+        MOV      a4,sp
+        MOV      a3,#0
+        MOV      a2,#&400
+        MOV      a1,#0
+        STMDB    sp!,{a1-a4}
+        MVN      a4,#0
+        MVN      a3,#0
+        MOV      a2,#&1000000f
+        ADD      a2,a2,#&10
+        LDR      a1,[pc, #L0096c4-.-8]
+        BL       _swix
+        ADD      sp,sp,#&10
+        MOV      a4,#0
+        MOV      a3,#&400
+        ADD      a2,v1,#&13c
+        STMDB    sp!,{a2-a4}
+        MVN      a4,#0
+        MVN      a3,#0
+        MOV      a2,#&1f
+        LDR      a1,[pc, #L0096c4-.-8]
+        BL       _swix
+        ADD      sp,sp,#&c
+        LDR      a1,[v1,#&138]
+        TST      a1,#2
+        BEQ      |L0096c8.J56.putscaled_compiler|
+        ORR      v3,v3,#8
+        MVN      a1,#0
+        LDR      a2,[sp,#&10]
+        STR      a1,[a2,#0]
+        B        |L009700.J61.putscaled_compiler|
+L0096c4
+        DCD     &0004075c
+|L0096c8.J56.putscaled_compiler|
+        ADD      a4,sp,#4
+        STMDB    sp!,{a4}
+        MOV      a4,#0
+        MVN      a3,#0
+        MOV      a2,#&20000003
+        MOV      a1,#&35
+        BL       _swix
+        ADD      sp,sp,#4
+        LDR      a1,[sp,#4]
+        TST      a1,#&80
+        ORREQ    v3,v3,#&20
+        B        |L009700.J61.putscaled_compiler|
+|L0096f8.J54.putscaled_compiler|
+        TEQ      a1,#&10
+        ORREQ    v3,v3,#&10
+|L009700.J61.putscaled_compiler|
+        ADD      sp,sp,#4
+|L009704.J51.putscaled_compiler|
+        MOV      a4,v3
+        MVN      a3,#0
+        MVN      a2,#0
+        MOV      a1,v6
+        STMDB    sp!,{a1-a4}
+        LDR      a4,[v1,#&114]
+        MOV      a2,v5
+        LDR      a1,[sp,#&1c]
+        LDR      a3,[sp,#&18]
+        BL       jpeg_scan_file
+        ADD      sp,sp,#&10
+        TEQ      a1,#0
+        MOVNE    a2,#2
+        MOVNE    a1,#&3a
+        ADDNE    a1,a1,#&1000
+        BLNE     exit_c
+        LDR      a1,[sp,#&c]
+        LDR      a1,[a1,#4]
+        TST      a1,#&28
+        BEQ      |L00976c.J66.putscaled_compiler|
+        MOV      a1,#3
+        STR      a1,[v1,#&78]
+        STR      a1,[v1,#&74]
+        MOV      a1,#0
+        STR      a1,[v1,#&b4]
+        B        |L00977c.J68.putscaled_compiler|
+|L00976c.J66.putscaled_compiler|
+        TST      a1,#&10
+        MOVNE    a1,#4
+        STRNE    a1,[v1,#&78]
+        STRNE    a1,[v1,#&74]
+|L00977c.J68.putscaled_compiler|
+        ADD      sp,sp,#&c
+|L009780.J12.putscaled_compiler|
+        MOV      v3,#0
+        STR      v3,[v2,#&1f4]
+        LDR      v4,[v1,#&10c]
+        TEQ      v4,#0
+        BEQ      |L00982c.J71.putscaled_compiler|
+        LDR      a1,[v4,#4]
+        TEQ      a1,#0
+        BNE      |L0097bc.J74.putscaled_compiler|
+        LDR      a1,[v4,#8]
+        CMN      a1,#&100
+        BNE      |L0097bc.J74.putscaled_compiler|
+        LDR      a1,[v4,#&c]
+        TEQ      a1,#0
+        MOVEQ    a1,#1
+        BEQ      |L0097c0.J73.putscaled_compiler|
+|L0097bc.J74.putscaled_compiler|
+        MOV      a1,v3
+|L0097c0.J73.putscaled_compiler|
+        STR      a1,[v2,#&228]
+        LDR      a1,[v1,#&104]
+        TEQ      a1,#&20
+        MOVNE    a2,#4
+        MOVNE    a1,#&98
+        ADDNE    a1,a1,#&1000
+        BLNE     exit_c
+        LDR      a1,[v1,#&74]
+        CMP      a1,#4
+        MOVLT    a2,#4
+        MOVLT    a1,#&99
+        ADDLT    a1,a1,#&1000
+        BLLT     exit_c
+        LDR      a1,[v1,#&b4]
+        TEQ      a1,#0
+        LDREQ    a1,[v1,#&f8]
+        TEQEQ    a1,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&9a
+        ADDNE    a1,a1,#&1000
+        BLNE     exit_c
+        LDR      a1,[v4,#0]
+        TEQ      a1,#0
+        MOVNE    a2,#4
+        MOVNE    a1,#&9b
+        ADDNE    a1,a1,#&1000
+        BLNE     exit_c
+|L00982c.J71.putscaled_compiler|
+        MOV      a1,#0
+        LDR      a2,[v1,#&104]
+        CMP      a2,#1
+        BLE      |L00984c.J89.putscaled_compiler|
+|L00983c.J88.putscaled_compiler|
+        MOV      a2,a2,ASR #1
+        ADD      a1,a1,#1
+        CMP      a2,#1
+        BGT      |L00983c.J88.putscaled_compiler|
+|L00984c.J89.putscaled_compiler|
+        STR      a1,[v2,#&210]
+        STR      a1,[v2,#&214]
+        LDR      a2,[v1,#&104]
+        LDR      a3,[v1,#&100]
+        TEQ      a2,a3
+        ADDNE    a1,a1,#1
+        STRNE    a1,[v2,#&214]
+        LDR      a1,[v1,#&f8]
+        TEQ      a1,#0
+        STRNE    v3,[v1,#&b4]
+        LDR      a1,[v1,#&44]
+        CMP      a1,#0
+        MOVLE    a2,#4
+        MOVLE    a1,#&ac
+        ADDLE    a1,a1,#&1000
+        BLLE     exit_c
+        LDR      a1,[v1,#&40]
+        CMP      a1,#0
+        MOVLE    a2,#4
+        MOVLE    a1,#&ad
+        ADDLE    a1,a1,#&1000
+        BLLE     exit_c
+        LDR      a1,[v1,#&10]
+        CMP      a1,#0
+        MOVLE    a2,#4
+        MOVLE    a1,#&ae
+        ADDLE    a1,a1,#&1000
+        BLLE     exit_c
+        LDR      a1,[v1,#&10]
+        CMP      a1,#0
+        MOVLE    a2,#4
+        MOVLE    a1,#&af
+        ADDLE    a1,a1,#&1000
+        BLLE     exit_c
+        B        |L0098fc.J105.putscaled_compiler|
+|L0098d8.J104.putscaled_compiler|
+        MOV      a4,a4,ASR #1
+        MOV      a2,a2,ASR #1
+        ADD      v1,v1,#&40
+        STMIA    v1,{a2,a4}
+        SUB      v1,v1,#&40
+        MOV      a2,a3,ASR #1
+        MOV      a1,a1,ASR #1
+        STR      a1,[v1,#&68]
+        STR      a2,[v1,#&30]
+|L0098fc.J105.putscaled_compiler|
+        LDR      a4,[v1,#&44]
+        TST      a4,#1
+        LDREQ    a2,[v1,#&40]
+        ANDEQ    a1,a2,#1
+        TEQEQ    a1,#0
+        LDREQ    a3,[v1,#&30]
+        ANDEQ    a1,a3,#1
+        TEQEQ    a1,#0
+        LDREQ    a1,[v1,#&68]
+        ANDEQ    ip,a1,#1
+        TEQEQ    ip,#0
+        BEQ      |L0098d8.J104.putscaled_compiler|
+        B        |L00994c.J112.putscaled_compiler|
+|L009930.J111.putscaled_compiler|
+        MOV      a3,a3,ASR #1
+        MOV      a2,a2,ASR #1
+        MOV      a1,a1,ASR #1
+        STR      a1,[v1,#&1c]
+        ADD      v1,v1,#&10
+        STMIA    v1,{a2,a3}
+        SUB      v1,v1,#&10
+|L00994c.J112.putscaled_compiler|
+        LDR      a3,[v1,#&14]
+        TST      a3,#1
+        LDREQ    a2,[v1,#&10]
+        ANDEQ    a1,a2,#1
+        TEQEQ    a1,#0
+        LDREQ    a1,[v1,#&1c]
+        ANDEQ    a4,a1,#1
+        TEQEQ    a4,#0
+        BEQ      |L009930.J111.putscaled_compiler|
+        LDR      a1,[v1,#&104]
+        LDR      v3,[v1,#&100]
+        LDR      v4,[v1,#&78]
+        STR      a1,[v1,#&100]
+        LDR      a1,[v1,#&74]
+        STR      a1,[v1,#&78]
+        MOV      a2,v2
+        MOV      a1,v1
+        LDR      a3,[sp,#0]
+        BL       find_or_compile_code
+        STR      v4,[v1,#&78]!
+        STR      v3,[v1,#&88]
+        LDMDB    fp,{v1-v6,fp,sp,pc}^
+
+        AREA |C$$data|,DATA
+
+|x$dataseg|
+
+        END
diff --git a/s/yuvtabs b/s/yuvtabs
new file mode 100644
index 0000000000000000000000000000000000000000..5aeaeb5215dbd407021ff4413ed1257bf6cedd02
--- /dev/null
+++ b/s/yuvtabs
@@ -0,0 +1,633 @@
+; Copyright 1996 Acorn Computers Ltd
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+; YUV<->pixel tables, generated Mar 17 1995
+pixel_to_yuv_table ; word i is the closest yuv value to VIDC1 8bpp pixel i
+ DCB 128, 128, 0, 0, 128, 128, 17, 0, 128, 128, 34, 0, 128, 128, 50, 0
+ DCB 162, 116, 20, 0, 162, 116, 37, 0, 162, 116, 54, 0, 162, 116, 71, 0
+ DCB 122, 162, 7, 0, 122, 162, 24, 0, 122, 162, 41, 0, 122, 162, 58, 0
+ DCB 156, 150, 28, 0, 156, 150, 45, 0, 156, 150, 62, 0, 156, 150, 79, 0
+ DCB 196, 105, 40, 0, 196, 105, 57, 0, 196, 105, 74, 0, 196, 105, 91, 0
+ DCB 230, 93, 60, 0, 230, 93, 77, 0, 230, 93, 94, 0, 230, 93, 111, 0
+ DCB 190, 139, 48, 0, 190, 139, 65, 0, 190, 139, 82, 0, 190, 139, 99, 0
+ DCB 224, 127, 68, 0, 224, 127, 85, 0, 224, 127, 102, 0, 224, 127, 119, 0
+ DCB 99, 105, 39, 0, 99, 105, 56, 0, 99, 105, 73, 0, 99, 105, 90, 0
+ DCB 133, 94, 60, 0, 133, 94, 77, 0, 133, 94, 94, 0, 133, 94, 111, 0
+ DCB 94, 139, 47, 0, 94, 139, 64, 0, 94, 139, 81, 0, 94, 139, 98, 0
+ DCB 128, 128, 68, 0, 128, 128, 85, 0, 128, 128, 101, 0, 128, 128, 119, 0
+ DCB 167, 82, 80, 0, 167, 82, 97, 0, 167, 82, 114, 0, 167, 82, 131, 0
+ DCB 201, 71, 100, 0, 201, 71, 117, 0, 201, 71, 134, 0, 201, 71, 151, 0
+ DCB 162, 116, 88, 0, 162, 116, 105, 0, 162, 116, 122, 0, 162, 116, 139, 0
+ DCB 196, 105, 108, 0, 196, 105, 125, 0, 196, 105, 142, 0, 196, 105, 159, 0
+ DCB 71, 82, 79, 0, 71, 82, 96, 0, 71, 82, 113, 0, 71, 82, 130, 0
+ DCB 105, 71, 100, 0, 105, 71, 117, 0, 105, 71, 134, 0, 105, 71, 151, 0
+ DCB 65, 116, 87, 0, 65, 116, 104, 0, 65, 116, 121, 0, 65, 116, 138, 0
+ DCB 99, 105, 107, 0, 99, 105, 124, 0, 99, 105, 141, 0, 99, 105, 158, 0
+ DCB 139, 60, 120, 0, 139, 60, 137, 0, 139, 60, 154, 0, 139, 60, 171, 0
+ DCB 173, 48, 140, 0, 173, 48, 157, 0, 173, 48, 174, 0, 173, 48, 191, 0
+ DCB 133, 94, 128, 0, 133, 94, 145, 0, 133, 94, 162, 0, 133, 94, 179, 0
+ DCB 167, 82, 148, 0, 167, 82, 165, 0, 167, 82, 182, 0, 167, 82, 199, 0
+ DCB 42, 60, 119, 0, 42, 60, 136, 0, 42, 60, 153, 0, 42, 60, 170, 0
+ DCB 76, 48, 140, 0, 76, 48, 157, 0, 76, 48, 174, 0, 76, 48, 191, 0
+ DCB 37, 94, 127, 0, 37, 94, 144, 0, 37, 94, 161, 0, 37, 94, 178, 0
+ DCB 71, 82, 147, 0, 71, 82, 164, 0, 71, 82, 181, 0, 71, 82, 198, 0
+ DCB 110, 37, 160, 0, 110, 37, 177, 0, 110, 37, 194, 0, 110, 37, 211, 0
+ DCB 144, 26, 180, 0, 144, 26, 197, 0, 144, 26, 214, 0, 144, 26, 231, 0
+ DCB 105, 71, 168, 0, 105, 71, 185, 0, 105, 71, 202, 0, 105, 71, 219, 0
+ DCB 139, 60, 188, 0, 139, 60, 205, 0, 139, 60, 222, 0, 139, 60, 239, 0
+ DCB 116, 196, 15, 0, 116, 196, 32, 0, 116, 196, 49, 0, 116, 196, 66, 0
+ DCB 150, 184, 35, 0, 150, 184, 52, 0, 150, 184, 69, 0, 150, 184, 86, 0
+ DCB 111, 230, 23, 0, 111, 230, 40, 0, 111, 230, 57, 0, 111, 230, 74, 0
+ DCB 145, 218, 43, 0, 145, 218, 60, 0, 145, 218, 77, 0, 145, 218, 94, 0
+ DCB 184, 173, 56, 0, 184, 173, 73, 0, 184, 173, 90, 0, 184, 173, 107, 0
+ DCB 218, 161, 76, 0, 218, 161, 93, 0, 218, 161, 110, 0, 218, 161, 127, 0
+ DCB 179, 207, 63, 0, 179, 207, 80, 0, 179, 207, 97, 0, 179, 207, 114, 0
+ DCB 213, 195, 84, 0, 213, 195, 101, 0, 213, 195, 118, 0, 213, 195, 135, 0
+ DCB 88, 173, 55, 0, 88, 173, 72, 0, 88, 173, 89, 0, 88, 173, 106, 0
+ DCB 122, 162, 75, 0, 122, 162, 92, 0, 122, 162, 109, 0, 122, 162, 126, 0
+ DCB 82, 207, 63, 0, 82, 207, 80, 0, 82, 207, 97, 0, 82, 207, 114, 0
+ DCB 116, 196, 83, 0, 116, 196, 100, 0, 116, 196, 117, 0, 116, 196, 134, 0
+ DCB 156, 150, 96, 0, 156, 150, 113, 0, 156, 150, 130, 0, 156, 150, 147, 0
+ DCB 190, 139, 116, 0, 190, 139, 133, 0, 190, 139, 150, 0, 190, 139, 167, 0
+ DCB 150, 184, 103, 0, 150, 184, 120, 0, 150, 184, 137, 0, 150, 184, 154, 0
+ DCB 184, 173, 124, 0, 184, 173, 141, 0, 184, 173, 158, 0, 184, 173, 175, 0
+ DCB 60, 150, 95, 0, 60, 150, 112, 0, 60, 150, 129, 0, 60, 150, 146, 0
+ DCB 94, 139, 115, 0, 94, 139, 132, 0, 94, 139, 149, 0, 94, 139, 166, 0
+ DCB 54, 184, 103, 0, 54, 184, 120, 0, 54, 184, 137, 0, 54, 184, 154, 0
+ DCB 88, 173, 123, 0, 88, 173, 140, 0, 88, 173, 157, 0, 88, 173, 174, 0
+ DCB 128, 128, 136, 0, 128, 128, 153, 0, 128, 128, 170, 0, 128, 128, 187, 0
+ DCB 162, 116, 156, 0, 162, 116, 173, 0, 162, 116, 190, 0, 162, 116, 207, 0
+ DCB 122, 162, 143, 0, 122, 162, 160, 0, 122, 162, 177, 0, 122, 162, 194, 0
+ DCB 156, 150, 164, 0, 156, 150, 181, 0, 156, 150, 198, 0, 156, 150, 215, 0
+ DCB 31, 128, 135, 0, 31, 128, 152, 0, 31, 128, 169, 0, 31, 128, 186, 0
+ DCB 65, 116, 155, 0, 65, 116, 172, 0, 65, 116, 189, 0, 65, 116, 206, 0
+ DCB 26, 162, 143, 0, 26, 162, 160, 0, 26, 162, 177, 0, 26, 162, 194, 0
+ DCB 60, 150, 163, 0, 60, 150, 180, 0, 60, 150, 197, 0, 60, 150, 214, 0
+ DCB 99, 105, 175, 0, 99, 105, 192, 0, 99, 105, 209, 0, 99, 105, 226, 0
+ DCB 133, 94, 196, 0, 133, 94, 213, 0, 133, 94, 230, 0, 133, 94, 247, 0
+ DCB 94, 139, 183, 0, 94, 139, 200, 0, 94, 139, 217, 0, 94, 139, 234, 0
+ DCB 128, 128, 203, 0, 128, 128, 221, 0, 128, 128, 238, 0, 128, 128, 255, 0
+
+yuv_to_pixel_table
+yuvtab_ybits * 5
+yuvtab_ubits * 4
+yuvtab_vbits * 4
+; A byte table indexed by yuv value, returns the closest 8bpp pixel
+ ; y=0
+ DCB 64, 64, 64, 33, 32, 32, 32, 32, 1, 1, 4, 4, 16, 16, 16, 20
+ DCB 64, 64, 64, 32, 32, 32, 32, 32, 1, 1, 4, 4, 16, 16, 16, 20
+ DCB 64, 64, 33, 32, 32, 32, 32, 32, 1, 1, 4, 4, 16, 16, 16, 20
+ DCB 64, 64, 32, 32, 32, 32, 32, 1, 1, 1, 4, 4, 16, 16, 16, 20
+ DCB 64, 33, 32, 32, 32, 32, 32, 1, 0, 1, 4, 4, 16, 16, 16, 20
+ DCB 64, 33, 32, 32, 32, 32, 1, 0, 0, 1, 4, 4, 16, 16, 16, 20
+ DCB 33, 32, 32, 32, 32, 32, 1, 0, 0, 1, 4, 4, 16, 16, 16, 20
+ DCB 33, 32, 32, 32, 32, 1, 0, 0, 0, 1, 4, 4, 16, 16, 16, 20
+ DCB 33, 32, 32, 32, 1, 1, 1, 0, 0, 1, 4, 5, 5, 16, 17, 20
+ DCB 40, 40, 40, 40, 2, 1, 8, 8, 8, 2, 12, 12, 6, 24, 24, 28
+ DCB 40, 40, 40, 40, 9, 8, 8, 8, 8, 9, 12, 12, 13, 24, 24, 28
+ DCB 41, 160, 10, 9, 9, 9, 9, 9, 9, 9, 132, 13, 13, 144, 25, 26
+ DCB 160, 160, 160, 129, 128, 128, 128, 128, 128, 129, 132, 132, 144, 144, 144, 148
+ DCB 160, 160, 129, 129, 129, 129, 129, 129, 129, 129, 132, 133, 133, 144, 145, 145
+ DCB 168, 168, 136, 136, 136, 136, 136, 136, 136, 140, 140, 140, 152, 152, 152, 156
+ DCB 168, 137, 137, 137, 136, 136, 136, 136, 137, 137, 140, 141, 141, 152, 153, 153
+ ; y=8
+ DCB 64, 64, 64, 64, 33, 32, 32, 32, 32, 2, 4, 5, 16, 16, 17, 20
+ DCB 64, 64, 64, 33, 32, 32, 32, 32, 1, 1, 4, 5, 16, 16, 17, 20
+ DCB 64, 64, 64, 33, 32, 32, 32, 32, 1, 1, 4, 4, 16, 16, 17, 20
+ DCB 64, 64, 33, 32, 32, 32, 32, 32, 1, 4, 4, 4, 16, 16, 17, 20
+ DCB 64, 64, 33, 32, 32, 32, 32, 1, 1, 4, 4, 4, 16, 16, 17, 20
+ DCB 64, 33, 32, 32, 32, 32, 32, 1, 1, 4, 4, 4, 16, 16, 17, 20
+ DCB 64, 33, 32, 32, 32, 32, 1, 0, 1, 4, 4, 4, 16, 16, 17, 20
+ DCB 33, 32, 32, 32, 32, 32, 1, 0, 0, 4, 4, 4, 16, 16, 17, 20
+ DCB 33, 33, 33, 32, 32, 1, 1, 1, 1, 1, 4, 5, 16, 16, 17, 20
+ DCB 40, 40, 40, 40, 40, 8, 8, 8, 8, 12, 12, 12, 24, 24, 24, 28
+ DCB 41, 40, 40, 40, 9, 9, 9, 8, 9, 12, 12, 13, 24, 24, 25, 28
+ DCB 160, 160, 160, 160, 9, 128, 128, 128, 128, 132, 132, 13, 144, 144, 25, 148
+ DCB 160, 160, 160, 129, 129, 128, 128, 128, 128, 132, 132, 133, 144, 144, 145, 148
+ DCB 161, 168, 130, 129, 129, 129, 129, 129, 129, 130, 133, 133, 134, 145, 145, 156
+ DCB 168, 168, 168, 136, 136, 136, 136, 136, 136, 140, 140, 140, 152, 152, 152, 156
+ DCB 168, 137, 137, 137, 137, 137, 137, 137, 137, 137, 141, 141, 141, 153, 153, 156
+ ; y=16
+ DCB 64, 64, 64, 64, 33, 32, 32, 32, 32, 36, 5, 5, 16, 16, 17, 20
+ DCB 64, 64, 64, 64, 33, 32, 32, 32, 32, 36, 5, 5, 16, 16, 17, 20
+ DCB 64, 64, 64, 33, 32, 32, 32, 32, 1, 4, 4, 5, 16, 16, 17, 20
+ DCB 64, 64, 64, 33, 32, 32, 32, 32, 1, 4, 4, 5, 16, 16, 17, 20
+ DCB 64, 64, 33, 32, 32, 32, 32, 32, 1, 4, 4, 5, 16, 16, 17, 20
+ DCB 64, 64, 33, 32, 32, 32, 32, 1, 1, 4, 4, 5, 16, 16, 17, 20
+ DCB 64, 33, 32, 32, 32, 32, 32, 1, 1, 4, 4, 5, 16, 16, 17, 20
+ DCB 64, 33, 32, 32, 32, 32, 32, 1, 1, 4, 4, 5, 16, 16, 17, 20
+ DCB 33, 33, 33, 33, 32, 1, 1, 1, 1, 4, 5, 5, 16, 17, 17, 20
+ DCB 40, 40, 40, 40, 40, 40, 8, 8, 8, 12, 12, 12, 24, 24, 25, 28
+ DCB 41, 41, 40, 40, 9, 9, 9, 9, 9, 12, 13, 13, 24, 25, 25, 28
+ DCB 160, 160, 160, 160, 160, 128, 128, 128, 128, 132, 132, 132, 144, 144, 144, 148
+ DCB 161, 160, 160, 160, 129, 129, 128, 128, 129, 132, 132, 133, 144, 144, 145, 148
+ DCB 168, 168, 168, 130, 129, 136, 136, 136, 129, 140, 140, 133, 152, 152, 146, 156
+ DCB 168, 168, 168, 137, 137, 136, 136, 136, 137, 140, 140, 141, 152, 152, 153, 156
+ DCB 169, 138, 137, 137, 137, 137, 137, 137, 137, 138, 141, 141, 142, 153, 153, 157
+ ; y=24
+ DCB 64, 64, 64, 64, 64, 33, 32, 32, 36, 36, 5, 5, 16, 16, 20, 20
+ DCB 64, 64, 64, 64, 64, 32, 32, 32, 36, 36, 5, 5, 16, 16, 20, 20
+ DCB 64, 64, 64, 64, 33, 32, 32, 32, 2, 36, 5, 5, 16, 16, 20, 20
+ DCB 64, 64, 64, 64, 32, 32, 32, 32, 2, 4, 5, 5, 16, 16, 20, 20
+ DCB 64, 64, 64, 33, 32, 32, 32, 32, 1, 4, 5, 16, 16, 16, 20, 20
+ DCB 64, 64, 64, 32, 32, 32, 32, 32, 1, 4, 4, 16, 16, 16, 20, 20
+ DCB 64, 64, 33, 32, 32, 32, 32, 1, 1, 4, 4, 16, 16, 16, 20, 20
+ DCB 64, 33, 33, 32, 32, 32, 32, 1, 1, 4, 4, 5, 16, 17, 20, 20
+ DCB 34, 33, 33, 33, 40, 40, 2, 1, 2, 12, 5, 5, 24, 17, 18, 28
+ DCB 72, 41, 40, 40, 40, 40, 9, 9, 9, 12, 12, 24, 24, 24, 28, 28
+ DCB 41, 41, 41, 41, 40, 9, 9, 9, 9, 12, 13, 13, 24, 25, 25, 29
+ DCB 160, 160, 160, 160, 160, 129, 128, 128, 132, 132, 132, 144, 144, 144, 148, 148
+ DCB 161, 161, 160, 160, 129, 129, 129, 129, 129, 132, 133, 133, 144, 145, 145, 148
+ DCB 168, 168, 168, 168, 136, 136, 136, 136, 140, 140, 140, 152, 152, 152, 156, 156
+ DCB 168, 168, 168, 137, 137, 137, 136, 136, 137, 140, 141, 141, 152, 153, 156, 156
+ DCB 169, 169, 138, 138, 137, 137, 137, 137, 138, 141, 141, 142, 153, 153, 154, 157
+ ; y=32
+ DCB 65, 64, 64, 64, 64, 64, 33, 33, 36, 36, 36, 6, 16, 17, 20, 20
+ DCB 65, 64, 64, 64, 64, 33, 32, 33, 36, 36, 5, 16, 16, 17, 20, 20
+ DCB 64, 64, 64, 64, 64, 33, 32, 32, 36, 36, 5, 16, 16, 17, 20, 20
+ DCB 64, 64, 64, 64, 33, 32, 32, 32, 36, 36, 5, 16, 16, 17, 20, 20
+ DCB 64, 64, 64, 64, 33, 32, 32, 32, 36, 5, 5, 16, 16, 17, 20, 20
+ DCB 64, 64, 64, 33, 32, 32, 32, 32, 36, 5, 5, 16, 16, 17, 20, 20
+ DCB 64, 64, 64, 33, 32, 32, 32, 32, 2, 4, 5, 16, 16, 17, 20, 20
+ DCB 64, 64, 33, 33, 33, 32, 32, 2, 2, 5, 5, 16, 16, 17, 20, 20
+ DCB 72, 72, 40, 40, 40, 40, 40, 2, 2, 12, 12, 24, 24, 24, 28, 28
+ DCB 72, 41, 41, 40, 40, 40, 40, 9, 9, 12, 13, 24, 24, 25, 28, 28
+ DCB 42, 41, 41, 160, 160, 160, 9, 10, 10, 132, 13, 144, 144, 25, 148, 29
+ DCB 161, 160, 160, 160, 160, 160, 129, 129, 132, 132, 132, 144, 144, 145, 148, 148
+ DCB 161, 161, 161, 160, 160, 129, 129, 129, 129, 133, 133, 134, 145, 145, 148, 149
+ DCB 168, 168, 168, 168, 168, 136, 136, 136, 140, 140, 140, 152, 152, 152, 156, 156
+ DCB 169, 169, 168, 168, 137, 137, 137, 137, 137, 140, 141, 152, 153, 153, 156, 157
+ DCB 169, 169, 138, 138, 138, 137, 137, 137, 138, 141, 141, 142, 153, 154, 154, 157
+ ; y=40
+ DCB 96, 65, 64, 64, 64, 64, 33, 33, 36, 36, 36, 48, 17, 17, 20, 20
+ DCB 65, 64, 64, 64, 64, 64, 33, 33, 36, 36, 36, 48, 17, 17, 20, 20
+ DCB 65, 64, 64, 64, 64, 33, 33, 33, 36, 36, 5, 16, 17, 17, 20, 20
+ DCB 64, 64, 64, 64, 64, 33, 32, 33, 36, 36, 5, 16, 16, 17, 20, 20
+ DCB 64, 64, 64, 64, 33, 32, 32, 33, 36, 36, 5, 16, 16, 17, 20, 20
+ DCB 64, 64, 64, 64, 33, 32, 32, 32, 36, 5, 5, 16, 16, 17, 20, 20
+ DCB 64, 64, 64, 33, 32, 32, 32, 32, 36, 5, 5, 16, 16, 17, 20, 20
+ DCB 64, 64, 33, 33, 33, 33, 32, 2, 2, 5, 5, 16, 17, 17, 20, 21
+ DCB 72, 72, 72, 40, 40, 40, 40, 2, 3, 12, 6, 24, 24, 28, 28, 28
+ DCB 72, 72, 41, 41, 40, 40, 40, 10, 10, 13, 13, 24, 25, 25, 28, 29
+ DCB 192, 42, 160, 160, 160, 160, 160, 10, 10, 132, 14, 144, 144, 26, 148, 148
+ DCB 192, 161, 161, 160, 160, 160, 129, 129, 132, 132, 133, 144, 144, 145, 148, 148
+ DCB 162, 161, 161, 168, 168, 130, 129, 130, 130, 133, 133, 152, 145, 145, 156, 149
+ DCB 169, 168, 168, 168, 168, 168, 137, 137, 140, 140, 141, 152, 152, 153, 156, 156
+ DCB 169, 169, 169, 168, 137, 137, 137, 137, 140, 141, 141, 152, 153, 153, 156, 157
+ DCB 169, 169, 169, 138, 138, 138, 137, 138, 138, 141, 142, 142, 153, 154, 154, 157
+ ; y=48
+ DCB 96, 65, 64, 64, 64, 64, 64, 33, 36, 36, 48, 48, 17, 17, 20, 20
+ DCB 96, 65, 64, 64, 64, 64, 33, 33, 36, 36, 48, 48, 17, 17, 20, 20
+ DCB 65, 64, 64, 64, 64, 64, 33, 33, 36, 36, 48, 48, 17, 20, 20, 20
+ DCB 65, 64, 64, 64, 64, 64, 33, 33, 36, 36, 6, 17, 17, 20, 20, 20
+ DCB 64, 64, 64, 64, 64, 33, 33, 33, 36, 36, 6, 16, 17, 20, 20, 20
+ DCB 64, 64, 64, 64, 64, 33, 33, 33, 36, 36, 5, 16, 17, 20, 20, 20
+ DCB 64, 64, 64, 64, 33, 32, 32, 33, 36, 5, 5, 16, 16, 20, 20, 20
+ DCB 65, 65, 64, 33, 33, 33, 33, 2, 3, 6, 6, 17, 17, 17, 21, 21
+ DCB 72, 72, 72, 41, 40, 40, 40, 3, 3, 13, 13, 24, 24, 28, 28, 28
+ DCB 72, 72, 41, 41, 41, 41, 41, 10, 10, 13, 13, 24, 25, 25, 28, 29
+ DCB 192, 192, 160, 160, 160, 160, 160, 11, 11, 132, 144, 144, 144, 148, 148, 148
+ DCB 192, 161, 161, 161, 160, 160, 160, 130, 133, 133, 133, 144, 145, 148, 148, 149
+ DCB 200, 162, 168, 168, 168, 168, 130, 130, 140, 140, 152, 152, 152, 156, 156, 156
+ DCB 200, 169, 168, 168, 168, 168, 137, 137, 140, 140, 141, 152, 153, 156, 156, 157
+ DCB 169, 169, 169, 169, 138, 138, 138, 138, 141, 141, 142, 153, 153, 154, 157, 157
+ DCB 170, 169, 169, 169, 138, 138, 138, 138, 141, 141, 142, 153, 153, 154, 157, 157
+ ; y=56
+ DCB 96, 96, 65, 64, 64, 64, 64, 34, 37, 37, 48, 48, 48, 18, 21, 21
+ DCB 96, 96, 65, 64, 64, 64, 64, 34, 36, 37, 48, 48, 17, 20, 20, 21
+ DCB 96, 65, 64, 64, 64, 64, 33, 33, 36, 37, 48, 48, 17, 20, 20, 21
+ DCB 96, 65, 64, 64, 64, 64, 33, 36, 36, 36, 48, 48, 17, 20, 20, 21
+ DCB 65, 64, 64, 64, 64, 64, 33, 36, 36, 36, 48, 17, 17, 20, 20, 21
+ DCB 65, 64, 64, 64, 64, 33, 33, 36, 36, 36, 48, 17, 17, 20, 20, 21
+ DCB 65, 64, 64, 64, 33, 33, 33, 36, 36, 6, 6, 17, 17, 20, 20, 21
+ DCB 65, 72, 72, 72, 33, 33, 33, 3, 3, 6, 6, 17, 17, 28, 28, 21
+ DCB 72, 72, 72, 72, 41, 40, 41, 3, 44, 13, 24, 24, 25, 28, 28, 29
+ DCB 73, 72, 42, 41, 41, 41, 41, 11, 11, 14, 14, 25, 25, 28, 29, 29
+ DCB 192, 192, 192, 160, 160, 160, 160, 11, 11, 133, 144, 144, 144, 148, 148, 149
+ DCB 192, 192, 161, 161, 161, 160, 130, 130, 133, 133, 134, 145, 145, 148, 149, 149
+ DCB 200, 200, 168, 168, 168, 168, 130, 131, 140, 140, 152, 152, 152, 156, 156, 156
+ DCB 200, 169, 169, 169, 168, 168, 138, 138, 141, 141, 152, 152, 153, 156, 156, 157
+ DCB 170, 170, 169, 169, 169, 138, 138, 138, 141, 141, 142, 153, 153, 154, 157, 158
+ DCB 170, 169, 169, 169, 138, 138, 138, 138, 141, 141, 142, 153, 154, 154, 157, 158
+ ; y=64
+ DCB 96, 96, 96, 65, 64, 64, 64, 68, 37, 37, 48, 48, 52, 52, 21, 21
+ DCB 96, 96, 65, 64, 64, 64, 64, 68, 37, 37, 48, 48, 18, 52, 21, 21
+ DCB 96, 96, 65, 64, 64, 64, 64, 68, 37, 37, 48, 48, 18, 20, 21, 21
+ DCB 96, 65, 64, 64, 64, 64, 33, 36, 37, 37, 48, 48, 17, 20, 21, 21
+ DCB 96, 65, 64, 64, 64, 64, 33, 36, 36, 37, 48, 48, 17, 20, 20, 21
+ DCB 65, 64, 64, 64, 64, 64, 33, 36, 36, 37, 48, 17, 17, 20, 20, 21
+ DCB 65, 65, 64, 64, 64, 33, 33, 36, 37, 6, 6, 17, 17, 20, 21, 21
+ DCB 72, 72, 72, 72, 72, 34, 34, 3, 44, 7, 7, 18, 18, 28, 28, 22
+ DCB 73, 72, 72, 72, 41, 41, 41, 44, 44, 14, 14, 25, 25, 28, 29, 29
+ DCB 192, 192, 192, 192, 41, 41, 42, 11, 11, 14, 14, 25, 26, 148, 29, 30
+ DCB 192, 192, 192, 161, 161, 160, 161, 164, 164, 133, 144, 144, 145, 148, 148, 149
+ DCB 193, 192, 162, 161, 161, 161, 161, 131, 134, 134, 134, 145, 145, 149, 149, 149
+ DCB 200, 200, 200, 168, 168, 168, 131, 131, 141, 141, 152, 152, 156, 156, 156, 157
+ DCB 200, 169, 169, 169, 169, 169, 138, 138, 141, 141, 152, 153, 153, 156, 157, 157
+ DCB 170, 170, 170, 169, 169, 138, 138, 139, 142, 142, 142, 153, 154, 157, 157, 158
+ DCB 170, 170, 169, 169, 169, 138, 138, 139, 141, 142, 142, 153, 154, 157, 157, 158
+ ; y=72
+ DCB 96, 96, 96, 96, 64, 64, 68, 68, 68, 37, 48, 49, 52, 52, 21, 21
+ DCB 96, 96, 96, 65, 64, 64, 68, 68, 37, 37, 48, 48, 52, 52, 21, 21
+ DCB 96, 96, 96, 64, 64, 64, 68, 68, 37, 37, 48, 48, 52, 52, 21, 21
+ DCB 96, 96, 65, 64, 64, 64, 68, 68, 37, 37, 48, 48, 52, 21, 21, 21
+ DCB 96, 96, 64, 64, 64, 64, 34, 37, 37, 48, 48, 48, 18, 21, 21, 21
+ DCB 96, 65, 64, 64, 64, 64, 33, 36, 37, 48, 48, 48, 18, 20, 21, 21
+ DCB 65, 65, 65, 65, 64, 34, 34, 37, 37, 7, 7, 18, 18, 21, 21, 21
+ DCB 72, 72, 72, 72, 72, 34, 34, 44, 44, 7, 7, 18, 18, 28, 28, 22
+ DCB 73, 73, 72, 72, 72, 41, 42, 44, 45, 14, 25, 25, 26, 28, 29, 29
+ DCB 192, 192, 192, 192, 192, 42, 42, 164, 164, 15, 15, 26, 26, 148, 148, 30
+ DCB 193, 192, 192, 192, 161, 161, 161, 164, 164, 134, 145, 145, 148, 148, 149, 149
+ DCB 200, 200, 200, 162, 161, 161, 131, 131, 134, 134, 135, 145, 156, 156, 149, 150
+ DCB 200, 200, 200, 169, 169, 169, 131, 172, 141, 141, 152, 153, 156, 156, 157, 157
+ DCB 201, 200, 169, 169, 169, 169, 139, 139, 142, 142, 153, 153, 154, 157, 157, 158
+ DCB 170, 170, 170, 169, 169, 169, 139, 139, 142, 142, 153, 153, 154, 157, 157, 158
+ DCB 170, 170, 170, 169, 169, 138, 139, 139, 142, 142, 153, 153, 154, 157, 157, 158
+ ; y=80
+ DCB 96, 96, 96, 96, 65, 65, 68, 68, 68, 80, 49, 49, 52, 52, 22, 22
+ DCB 96, 96, 96, 96, 65, 65, 68, 68, 68, 38, 49, 49, 52, 52, 21, 22
+ DCB 96, 96, 96, 65, 64, 65, 68, 68, 37, 48, 48, 49, 52, 52, 21, 21
+ DCB 96, 96, 96, 65, 64, 64, 68, 68, 37, 48, 48, 49, 52, 52, 21, 21
+ DCB 96, 96, 65, 64, 64, 64, 68, 68, 37, 48, 48, 48, 52, 21, 21, 21
+ DCB 96, 96, 65, 64, 64, 64, 68, 37, 37, 48, 48, 48, 52, 21, 21, 21
+ DCB 66, 65, 65, 65, 65, 34, 34, 37, 38, 7, 7, 18, 18, 21, 22, 22
+ DCB 104, 73, 72, 72, 72, 72, 35, 44, 45, 56, 56, 19, 19, 28, 29, 29
+ DCB 73, 73, 73, 73, 72, 42, 42, 45, 45, 15, 15, 26, 26, 29, 29, 30
+ DCB 192, 192, 192, 192, 192, 42, 42, 164, 164, 15, 15, 26, 148, 148, 148, 30
+ DCB 193, 193, 192, 192, 161, 161, 162, 165, 165, 134, 145, 145, 148, 149, 149, 149
+ DCB 200, 200, 200, 200, 200, 162, 162, 172, 135, 135, 135, 146, 156, 156, 156, 150
+ DCB 200, 200, 200, 200, 169, 169, 172, 172, 142, 142, 153, 153, 156, 156, 157, 157
+ DCB 201, 201, 170, 170, 169, 169, 139, 139, 142, 142, 153, 154, 154, 157, 157, 158
+ DCB 201, 170, 170, 170, 169, 170, 139, 139, 142, 142, 153, 154, 154, 157, 158, 158
+ DCB 201, 170, 170, 169, 169, 139, 139, 139, 142, 142, 153, 154, 154, 157, 158, 158
+ ; y=88
+ DCB 96, 96, 96, 96, 96, 65, 68, 68, 68, 80, 49, 49, 52, 52, 22, 22
+ DCB 96, 96, 96, 96, 65, 65, 68, 68, 68, 80, 49, 49, 52, 52, 22, 22
+ DCB 96, 96, 96, 96, 65, 65, 68, 68, 38, 80, 49, 49, 52, 52, 22, 22
+ DCB 96, 96, 96, 65, 65, 65, 68, 68, 37, 48, 49, 49, 52, 52, 22, 21
+ DCB 96, 96, 96, 65, 64, 65, 68, 68, 37, 48, 48, 49, 52, 52, 21, 21
+ DCB 96, 96, 65, 65, 65, 65, 68, 37, 38, 48, 49, 49, 52, 21, 22, 22
+ DCB 104, 66, 65, 72, 72, 35, 35, 38, 38, 56, 56, 19, 19, 22, 22, 22
+ DCB 104, 73, 73, 72, 72, 35, 35, 45, 45, 56, 56, 19, 19, 29, 29, 29
+ DCB 74, 73, 73, 73, 73, 42, 42, 45, 46, 15, 26, 26, 27, 29, 30, 30
+ DCB 193, 192, 192, 192, 192, 43, 43, 165, 165, 176, 176, 27, 148, 149, 149, 149
+ DCB 193, 193, 193, 192, 162, 162, 162, 165, 165, 135, 146, 146, 149, 149, 149, 150
+ DCB 200, 200, 200, 200, 200, 162, 172, 172, 135, 135, 135, 146, 156, 156, 157, 150
+ DCB 201, 201, 200, 200, 169, 169, 172, 173, 142, 142, 153, 154, 156, 157, 157, 157
+ DCB 201, 201, 170, 170, 170, 170, 139, 139, 143, 143, 154, 154, 154, 157, 158, 158
+ DCB 201, 201, 170, 170, 170, 170, 139, 139, 143, 143, 154, 154, 157, 157, 158, 158
+ DCB 201, 170, 170, 170, 170, 170, 139, 139, 142, 143, 154, 154, 157, 157, 158, 158
+ ; y=96
+ DCB 97, 96, 96, 96, 96, 65, 68, 69, 80, 80, 80, 50, 52, 53, 53, 22
+ DCB 96, 96, 96, 96, 96, 65, 68, 68, 80, 80, 49, 49, 52, 53, 22, 22
+ DCB 96, 96, 96, 96, 65, 65, 68, 68, 80, 80, 49, 52, 52, 52, 22, 22
+ DCB 96, 96, 96, 96, 65, 65, 68, 68, 80, 80, 49, 52, 52, 52, 22, 22
+ DCB 96, 96, 96, 96, 65, 65, 68, 68, 80, 49, 49, 52, 52, 52, 22, 22
+ DCB 96, 96, 65, 65, 65, 65, 68, 38, 38, 49, 49, 49, 52, 22, 22, 22
+ DCB 104, 104, 104, 72, 72, 35, 35, 38, 39, 56, 56, 19, 19, 22, 23, 22
+ DCB 104, 104, 73, 73, 73, 73, 76, 45, 46, 57, 57, 60, 60, 29, 30, 30
+ DCB 224, 74, 73, 192, 192, 43, 43, 46, 46, 176, 176, 27, 27, 30, 30, 30
+ DCB 224, 193, 193, 192, 192, 43, 43, 165, 165, 176, 176, 27, 149, 149, 149, 149
+ DCB 193, 193, 193, 193, 162, 162, 163, 166, 166, 135, 146, 146, 149, 150, 150, 150
+ DCB 201, 200, 200, 200, 200, 163, 163, 173, 184, 184, 184, 147, 156, 157, 157, 157
+ DCB 201, 201, 201, 200, 170, 170, 173, 173, 143, 143, 154, 154, 157, 157, 158, 158
+ DCB 201, 201, 201, 170, 170, 170, 139, 173, 143, 143, 154, 154, 157, 157, 158, 158
+ DCB 201, 201, 201, 170, 170, 170, 139, 143, 143, 143, 154, 154, 157, 157, 158, 158
+ DCB 201, 201, 170, 170, 170, 170, 139, 143, 143, 143, 154, 154, 157, 157, 158, 158
+ ; y=104
+ DCB 97, 97, 96, 96, 96, 100, 69, 69, 80, 80, 80, 84, 53, 53, 53, 53
+ DCB 97, 96, 96, 96, 96, 66, 69, 69, 80, 80, 80, 84, 53, 53, 53, 22
+ DCB 97, 96, 96, 96, 96, 66, 68, 69, 80, 80, 49, 52, 53, 53, 53, 22
+ DCB 96, 96, 96, 96, 65, 65, 68, 69, 80, 80, 49, 52, 52, 53, 22, 22
+ DCB 96, 96, 96, 96, 65, 68, 68, 68, 80, 80, 49, 52, 52, 53, 22, 22
+ DCB 97, 97, 96, 65, 66, 66, 69, 38, 39, 49, 50, 50, 53, 22, 22, 22
+ DCB 104, 104, 104, 73, 73, 76, 76, 39, 39, 57, 57, 60, 60, 23, 23, 23
+ DCB 104, 104, 73, 73, 73, 76, 76, 46, 46, 57, 57, 60, 60, 30, 30, 30
+ DCB 224, 224, 224, 192, 192, 43, 43, 46, 47, 176, 27, 27, 180, 30, 31, 30
+ DCB 224, 193, 193, 193, 193, 196, 196, 166, 166, 177, 177, 180, 149, 150, 150, 149
+ DCB 232, 194, 200, 200, 200, 163, 163, 166, 166, 184, 147, 147, 150, 150, 150, 150
+ DCB 232, 201, 200, 200, 200, 163, 173, 173, 184, 184, 184, 147, 157, 157, 157, 157
+ DCB 201, 201, 201, 201, 170, 170, 173, 174, 143, 143, 154, 155, 157, 158, 158, 158
+ DCB 202, 201, 201, 201, 170, 171, 171, 174, 143, 143, 154, 155, 158, 158, 158, 158
+ DCB 201, 201, 201, 170, 170, 171, 171, 174, 143, 143, 154, 155, 157, 158, 158, 158
+ DCB 201, 201, 201, 170, 170, 170, 139, 143, 143, 143, 154, 154, 157, 158, 158, 158
+ ; y=112
+ DCB 97, 97, 96, 96, 97, 100, 100, 69, 80, 80, 84, 84, 53, 53, 53, 53
+ DCB 97, 97, 96, 96, 96, 100, 69, 69, 80, 80, 84, 84, 53, 53, 53, 53
+ DCB 97, 96, 96, 96, 96, 100, 69, 69, 80, 80, 84, 84, 53, 53, 53, 22
+ DCB 97, 96, 96, 96, 96, 100, 69, 69, 80, 80, 50, 52, 53, 53, 53, 22
+ DCB 97, 96, 96, 96, 66, 66, 69, 69, 80, 80, 50, 53, 53, 53, 22, 22
+ DCB 97, 97, 104, 66, 66, 66, 69, 39, 39, 50, 50, 50, 53, 23, 23, 23
+ DCB 104, 104, 104, 104, 73, 76, 76, 39, 39, 57, 57, 60, 60, 23, 23, 23
+ DCB 105, 104, 104, 73, 74, 74, 77, 46, 47, 58, 58, 61, 61, 30, 30, 30
+ DCB 224, 224, 224, 193, 193, 196, 196, 47, 47, 177, 177, 180, 180, 31, 31, 31
+ DCB 224, 224, 193, 193, 193, 196, 196, 166, 166, 177, 177, 180, 150, 150, 150, 150
+ DCB 232, 232, 200, 200, 163, 163, 204, 166, 167, 184, 147, 147, 150, 151, 150, 150
+ DCB 232, 201, 201, 201, 201, 204, 173, 174, 184, 185, 185, 188, 157, 158, 158, 157
+ DCB 202, 202, 201, 201, 171, 171, 174, 174, 174, 185, 155, 155, 158, 158, 158, 158
+ DCB 202, 202, 201, 201, 171, 171, 174, 174, 143, 143, 155, 155, 158, 158, 158, 158
+ DCB 202, 201, 201, 201, 171, 171, 174, 174, 143, 143, 155, 155, 158, 158, 158, 158
+ DCB 202, 201, 201, 170, 170, 171, 174, 174, 143, 143, 155, 155, 158, 158, 158, 158
+ ; y=120
+ DCB 97, 97, 97, 97, 97, 100, 100, 70, 80, 81, 84, 84, 53, 54, 53, 53
+ DCB 97, 97, 96, 97, 100, 100, 100, 69, 80, 81, 84, 84, 53, 53, 53, 53
+ DCB 97, 97, 96, 96, 100, 100, 69, 69, 80, 80, 84, 84, 53, 53, 53, 53
+ DCB 97, 96, 96, 96, 100, 100, 69, 69, 80, 80, 84, 84, 53, 53, 53, 22
+ DCB 97, 97, 96, 96, 66, 69, 69, 69, 80, 81, 50, 53, 53, 53, 23, 22
+ DCB 104, 104, 104, 104, 67, 67, 70, 39, 39, 50, 51, 51, 54, 23, 23, 23
+ DCB 105, 104, 104, 104, 74, 77, 77, 88, 88, 57, 58, 61, 61, 23, 23, 23
+ DCB 105, 224, 224, 74, 74, 74, 77, 47, 47, 58, 58, 61, 61, 31, 31, 30
+ DCB 224, 224, 224, 193, 193, 196, 196, 47, 208, 177, 180, 180, 180, 31, 31, 31
+ DCB 225, 224, 193, 194, 194, 197, 197, 166, 167, 178, 178, 181, 150, 150, 150, 150
+ DCB 232, 232, 232, 201, 201, 204, 204, 167, 167, 185, 188, 188, 151, 151, 151, 151
+ DCB 232, 232, 201, 201, 201, 204, 174, 174, 185, 185, 185, 188, 158, 158, 158, 158
+ DCB 202, 202, 202, 202, 171, 171, 174, 175, 175, 186, 155, 155, 158, 159, 158, 158
+ DCB 202, 202, 201, 201, 171, 171, 174, 174, 143, 186, 155, 155, 158, 158, 158, 158
+ DCB 202, 202, 201, 201, 171, 171, 174, 174, 143, 155, 155, 155, 158, 158, 158, 158
+ DCB 202, 201, 201, 171, 171, 171, 174, 174, 143, 155, 155, 155, 158, 158, 158, 158
+ ; y=128
+ DCB 97, 97, 97, 97, 100, 100, 100, 112, 81, 81, 84, 84, 84, 54, 54, 53
+ DCB 97, 97, 97, 97, 100, 100, 100, 112, 81, 81, 84, 84, 54, 54, 53, 53
+ DCB 97, 97, 97, 97, 100, 100, 100, 70, 81, 81, 84, 84, 53, 54, 53, 53
+ DCB 97, 97, 96, 97, 100, 100, 69, 80, 80, 81, 84, 84, 53, 53, 53, 53
+ DCB 97, 97, 97, 97, 67, 100, 70, 70, 81, 81, 51, 54, 54, 54, 54, 23
+ DCB 104, 104, 104, 104, 67, 67, 70, 88, 88, 51, 51, 51, 54, 23, 23, 23
+ DCB 105, 105, 104, 105, 74, 77, 77, 88, 88, 58, 58, 61, 61, 61, 23, 30
+ DCB 224, 224, 224, 74, 75, 75, 78, 47, 208, 59, 59, 62, 62, 31, 31, 31
+ DCB 225, 224, 224, 194, 194, 197, 197, 208, 208, 178, 178, 181, 181, 31, 31, 150
+ DCB 225, 232, 232, 194, 194, 197, 197, 167, 167, 178, 178, 181, 151, 151, 151, 150
+ DCB 232, 232, 232, 201, 204, 204, 205, 167, 216, 185, 188, 188, 151, 151, 151, 151
+ DCB 233, 232, 201, 202, 202, 205, 174, 175, 185, 186, 186, 189, 158, 159, 158, 158
+ DCB 233, 202, 202, 202, 171, 171, 175, 175, 175, 186, 155, 155, 159, 159, 159, 158
+ DCB 202, 202, 202, 202, 171, 171, 175, 175, 186, 186, 155, 155, 159, 159, 158, 158
+ DCB 202, 202, 201, 202, 171, 171, 174, 175, 186, 186, 155, 155, 158, 159, 158, 158
+ DCB 202, 202, 201, 202, 171, 171, 174, 175, 185, 155, 155, 155, 158, 158, 158, 158
+ ; y=136
+ DCB 97, 97, 97, 97, 100, 100, 101, 112, 112, 81, 84, 84, 85, 54, 54, 53
+ DCB 97, 97, 97, 97, 100, 100, 112, 112, 81, 81, 84, 84, 54, 54, 54, 53
+ DCB 97, 97, 97, 97, 100, 100, 112, 112, 81, 81, 84, 84, 54, 54, 53, 53
+ DCB 97, 97, 97, 97, 100, 100, 70, 112, 81, 81, 84, 84, 54, 54, 53, 53
+ DCB 98, 97, 97, 97, 67, 70, 70, 70, 81, 82, 51, 54, 54, 54, 54, 23
+ DCB 105, 104, 104, 105, 108, 108, 71, 88, 88, 51, 92, 92, 55, 55, 23, 23
+ DCB 105, 105, 105, 105, 75, 78, 78, 89, 89, 58, 59, 62, 62, 62, 31, 31
+ DCB 224, 224, 224, 75, 75, 75, 78, 208, 208, 59, 59, 62, 62, 31, 31, 31
+ DCB 225, 225, 225, 194, 194, 197, 197, 208, 209, 178, 181, 181, 181, 181, 150, 150
+ DCB 232, 232, 232, 195, 195, 198, 198, 167, 216, 179, 179, 182, 151, 151, 151, 151
+ DCB 232, 232, 232, 202, 202, 205, 205, 216, 216, 186, 189, 189, 189, 151, 151, 158
+ DCB 233, 233, 202, 202, 202, 205, 175, 175, 186, 186, 186, 189, 159, 159, 159, 158
+ DCB 233, 202, 202, 202, 202, 205, 175, 175, 186, 186, 155, 189, 159, 159, 159, 158
+ DCB 233, 202, 202, 202, 171, 171, 175, 175, 186, 186, 155, 159, 159, 159, 159, 158
+ DCB 202, 202, 202, 202, 171, 171, 175, 175, 186, 186, 155, 159, 159, 159, 158, 158
+ DCB 202, 202, 202, 202, 171, 171, 175, 175, 186, 155, 155, 158, 159, 159, 158, 158
+ ; y=144
+ DCB 97, 97, 97, 98, 100, 101, 112, 112, 112, 82, 85, 85, 85, 54, 54, 54
+ DCB 97, 97, 97, 98, 100, 101, 112, 112, 81, 82, 84, 85, 85, 54, 54, 54
+ DCB 97, 97, 97, 97, 100, 101, 112, 112, 81, 84, 84, 85, 54, 54, 54, 53
+ DCB 97, 97, 97, 97, 100, 101, 112, 112, 81, 82, 84, 85, 54, 54, 54, 54
+ DCB 98, 98, 98, 98, 108, 101, 71, 71, 82, 82, 92, 54, 55, 54, 54, 23
+ DCB 105, 105, 105, 105, 108, 108, 71, 89, 89, 92, 92, 92, 55, 55, 61, 23
+ DCB 106, 105, 105, 106, 75, 78, 78, 89, 89, 59, 59, 62, 62, 62, 62, 31
+ DCB 225, 224, 225, 75, 228, 228, 79, 208, 209, 59, 212, 63, 63, 31, 31, 31
+ DCB 225, 225, 225, 195, 195, 198, 198, 209, 209, 179, 179, 182, 182, 182, 151, 151
+ DCB 232, 232, 232, 195, 195, 198, 198, 216, 216, 179, 179, 182, 182, 151, 151, 151
+ DCB 233, 233, 233, 202, 205, 205, 206, 216, 217, 186, 189, 189, 190, 159, 158, 158
+ DCB 233, 233, 202, 203, 203, 206, 175, 175, 186, 187, 187, 190, 159, 159, 159, 159
+ DCB 233, 233, 202, 203, 203, 206, 175, 175, 186, 187, 187, 190, 159, 159, 159, 159
+ DCB 233, 202, 202, 202, 203, 206, 175, 175, 186, 187, 189, 159, 159, 159, 159, 158
+ DCB 233, 202, 202, 202, 171, 205, 175, 175, 186, 186, 155, 159, 159, 159, 159, 158
+ DCB 202, 202, 202, 202, 171, 175, 175, 175, 186, 186, 155, 159, 159, 159, 158, 158
+ ; y=152
+ DCB 97, 97, 97, 98, 101, 101, 112, 112, 112, 116, 85, 85, 85, 85, 54, 54
+ DCB 97, 97, 97, 98, 101, 101, 112, 112, 112, 116, 85, 85, 85, 54, 54, 54
+ DCB 97, 97, 97, 98, 101, 101, 112, 112, 82, 84, 85, 85, 85, 54, 54, 54
+ DCB 97, 97, 98, 98, 101, 101, 112, 112, 82, 82, 85, 85, 55, 54, 54, 54
+ DCB 98, 98, 98, 98, 108, 71, 71, 71, 82, 82, 92, 55, 55, 55, 55, 54
+ DCB 105, 105, 105, 106, 108, 109, 120, 89, 89, 92, 92, 93, 55, 62, 62, 61
+ DCB 106, 106, 106, 106, 228, 78, 79, 90, 90, 59, 212, 63, 63, 62, 62, 31
+ DCB 225, 225, 225, 228, 228, 228, 79, 209, 209, 212, 212, 63, 63, 63, 31, 31
+ DCB 225, 225, 225, 195, 195, 198, 198, 209, 209, 179, 182, 182, 182, 182, 151, 151
+ DCB 233, 232, 233, 195, 236, 199, 199, 216, 217, 220, 220, 183, 183, 151, 151, 151
+ DCB 233, 233, 233, 203, 203, 206, 206, 217, 217, 187, 190, 190, 190, 190, 159, 158
+ DCB 233, 233, 203, 203, 203, 206, 206, 175, 187, 187, 190, 190, 159, 159, 159, 159
+ DCB 233, 233, 203, 203, 203, 206, 175, 175, 187, 187, 190, 190, 159, 159, 159, 159
+ DCB 233, 233, 203, 203, 203, 206, 175, 175, 187, 187, 190, 190, 159, 159, 159, 159
+ DCB 233, 233, 202, 203, 203, 206, 175, 175, 186, 187, 190, 159, 159, 159, 159, 159
+ DCB 233, 202, 202, 203, 205, 206, 175, 175, 186, 187, 189, 159, 159, 159, 159, 158
+ ; y=160
+ DCB 97, 97, 98, 98, 101, 101, 112, 113, 116, 116, 85, 85, 85, 85, 85, 54
+ DCB 97, 97, 98, 98, 101, 101, 112, 112, 116, 116, 85, 85, 85, 85, 54, 54
+ DCB 97, 97, 98, 98, 101, 101, 112, 112, 116, 116, 85, 85, 85, 85, 54, 54
+ DCB 98, 98, 98, 98, 101, 102, 113, 113, 82, 83, 85, 86, 55, 55, 54, 54
+ DCB 98, 98, 99, 99, 109, 102, 120, 120, 83, 83, 93, 55, 55, 55, 55, 55
+ DCB 105, 106, 106, 106, 109, 109, 120, 90, 90, 93, 93, 93, 63, 62, 62, 62
+ DCB 106, 106, 106, 107, 228, 79, 79, 90, 90, 212, 212, 63, 63, 63, 63, 62
+ DCB 225, 225, 226, 228, 229, 229, 240, 209, 210, 212, 213, 63, 182, 182, 182, 181
+ DCB 226, 226, 226, 236, 236, 199, 199, 210, 210, 220, 220, 183, 183, 182, 182, 151
+ DCB 233, 233, 233, 236, 236, 199, 199, 217, 217, 220, 220, 183, 183, 190, 151, 151
+ DCB 233, 233, 234, 203, 206, 206, 207, 217, 218, 187, 190, 190, 190, 190, 159, 159
+ DCB 234, 234, 203, 203, 203, 206, 207, 218, 187, 187, 190, 191, 190, 159, 159, 159
+ DCB 234, 233, 203, 203, 203, 206, 207, 217, 187, 187, 190, 190, 190, 159, 159, 159
+ DCB 233, 233, 203, 203, 206, 206, 175, 217, 187, 187, 190, 190, 159, 159, 159, 159
+ DCB 233, 233, 203, 203, 206, 206, 175, 175, 187, 187, 190, 190, 159, 159, 159, 159
+ DCB 233, 233, 203, 203, 206, 206, 175, 175, 187, 187, 190, 159, 159, 159, 159, 159
+ ; y=168
+ DCB 97, 97, 98, 101, 101, 102, 113, 113, 116, 116, 116, 86, 86, 85, 85, 54
+ DCB 97, 97, 98, 101, 101, 102, 112, 113, 116, 116, 85, 86, 85, 85, 85, 54
+ DCB 97, 97, 98, 101, 101, 102, 112, 113, 116, 116, 85, 86, 85, 85, 54, 54
+ DCB 98, 98, 99, 99, 102, 102, 113, 113, 83, 83, 86, 86, 55, 55, 55, 54
+ DCB 105, 99, 99, 99, 109, 120, 120, 120, 83, 83, 93, 55, 55, 55, 55, 55
+ DCB 106, 106, 106, 107, 109, 110, 121, 90, 90, 93, 93, 94, 63, 63, 62, 62
+ DCB 106, 106, 107, 107, 229, 79, 240, 91, 91, 212, 213, 63, 63, 63, 63, 63
+ DCB 225, 226, 226, 229, 229, 229, 240, 210, 210, 213, 213, 183, 182, 182, 182, 182
+ DCB 226, 226, 226, 236, 236, 199, 199, 210, 210, 220, 183, 183, 183, 183, 182, 151
+ DCB 233, 233, 234, 236, 237, 248, 248, 217, 218, 221, 221, 183, 190, 190, 190, 189
+ DCB 234, 234, 234, 203, 237, 207, 207, 218, 218, 187, 191, 191, 191, 190, 159, 159
+ DCB 234, 234, 234, 203, 207, 207, 207, 218, 187, 187, 191, 191, 191, 190, 159, 159
+ DCB 234, 234, 203, 203, 206, 207, 207, 218, 187, 187, 190, 191, 190, 159, 159, 159
+ DCB 234, 234, 203, 203, 206, 207, 207, 218, 187, 187, 190, 191, 190, 159, 159, 159
+ DCB 233, 234, 203, 203, 206, 206, 175, 187, 187, 187, 190, 190, 159, 159, 159, 159
+ DCB 233, 233, 203, 203, 206, 206, 175, 187, 187, 187, 190, 190, 159, 159, 159, 159
+ ; y=176
+ DCB 97, 97, 98, 101, 102, 102, 113, 113, 116, 116, 117, 86, 86, 85, 85, 85
+ DCB 97, 97, 98, 101, 102, 102, 113, 113, 116, 116, 116, 86, 86, 85, 85, 85
+ DCB 97, 98, 98, 101, 102, 102, 113, 113, 116, 116, 86, 86, 86, 85, 85, 54
+ DCB 98, 98, 99, 99, 102, 103, 113, 114, 83, 83, 86, 86, 86, 55, 55, 55
+ DCB 105, 106, 99, 99, 109, 103, 121, 121, 124, 124, 93, 94, 55, 55, 55, 55
+ DCB 106, 106, 107, 107, 110, 110, 121, 91, 91, 94, 94, 94, 63, 63, 63, 62
+ DCB 225, 107, 107, 107, 229, 240, 240, 91, 91, 213, 213, 63, 63, 63, 63, 63
+ DCB 226, 226, 226, 229, 230, 230, 241, 210, 210, 213, 214, 183, 183, 183, 182, 182
+ DCB 226, 227, 227, 236, 237, 248, 248, 211, 211, 221, 221, 183, 183, 183, 183, 183
+ DCB 233, 234, 234, 237, 237, 248, 248, 218, 218, 221, 221, 191, 190, 190, 190, 190
+ DCB 234, 234, 235, 237, 207, 207, 207, 218, 219, 221, 191, 191, 191, 191, 190, 159
+ DCB 234, 234, 234, 203, 207, 207, 207, 218, 218, 221, 191, 191, 191, 191, 159, 159
+ DCB 234, 234, 234, 203, 207, 207, 207, 218, 187, 187, 191, 191, 191, 190, 159, 159
+ DCB 234, 234, 203, 203, 207, 207, 218, 218, 187, 187, 191, 191, 191, 159, 159, 159
+ DCB 234, 234, 203, 203, 207, 207, 218, 218, 187, 187, 191, 191, 190, 159, 159, 159
+ DCB 233, 234, 203, 203, 206, 207, 218, 187, 187, 187, 190, 191, 190, 159, 159, 159
+ ; y=184
+ DCB 97, 98, 98, 101, 102, 113, 113, 113, 116, 117, 117, 86, 86, 86, 85, 85
+ DCB 97, 98, 98, 101, 102, 113, 113, 113, 116, 116, 117, 86, 86, 85, 85, 85
+ DCB 98, 98, 99, 102, 102, 103, 113, 114, 117, 117, 86, 86, 86, 86, 86, 55
+ DCB 98, 99, 99, 99, 103, 103, 114, 114, 124, 124, 87, 87, 87, 55, 55, 55
+ DCB 105, 106, 99, 110, 110, 121, 121, 121, 124, 124, 94, 94, 94, 93, 55, 62
+ DCB 106, 107, 107, 110, 110, 111, 122, 91, 91, 94, 94, 94, 94, 63, 63, 63
+ DCB 225, 107, 107, 229, 230, 240, 241, 244, 244, 213, 214, 213, 63, 63, 63, 63
+ DCB 226, 226, 227, 230, 230, 230, 241, 211, 211, 214, 214, 214, 183, 183, 183, 182
+ DCB 233, 227, 227, 237, 237, 248, 248, 211, 211, 221, 221, 183, 183, 183, 183, 183
+ DCB 234, 234, 235, 237, 238, 249, 249, 218, 219, 221, 222, 191, 191, 190, 190, 190
+ DCB 234, 235, 235, 238, 238, 207, 207, 219, 219, 222, 191, 191, 191, 191, 191, 190
+ DCB 234, 234, 235, 238, 207, 207, 218, 219, 219, 222, 191, 191, 191, 191, 190, 159
+ DCB 234, 234, 235, 238, 207, 207, 218, 218, 219, 222, 191, 191, 191, 191, 190, 159
+ DCB 234, 234, 235, 237, 207, 207, 218, 218, 187, 191, 191, 191, 191, 190, 159, 159
+ DCB 234, 234, 203, 203, 207, 207, 218, 218, 187, 191, 191, 191, 191, 190, 159, 159
+ DCB 234, 234, 203, 203, 207, 207, 218, 218, 187, 191, 191, 191, 190, 159, 159, 159
+ ; y=192
+ DCB 97, 98, 101, 101, 102, 113, 113, 114, 117, 117, 117, 117, 86, 86, 86, 85
+ DCB 97, 98, 101, 101, 102, 113, 113, 114, 117, 117, 117, 86, 86, 86, 85, 85
+ DCB 98, 98, 99, 102, 102, 103, 114, 114, 117, 117, 87, 87, 86, 86, 86, 55
+ DCB 99, 99, 99, 103, 103, 103, 114, 115, 124, 124, 87, 87, 87, 87, 55, 55
+ DCB 106, 106, 107, 110, 110, 121, 122, 122, 125, 125, 94, 94, 94, 94, 63, 63
+ DCB 106, 107, 107, 110, 111, 111, 122, 244, 244, 95, 95, 95, 94, 63, 63, 63
+ DCB 226, 226, 107, 230, 230, 241, 241, 244, 244, 214, 214, 214, 214, 213, 63, 182
+ DCB 226, 227, 227, 230, 231, 231, 242, 211, 211, 214, 215, 214, 183, 183, 183, 183
+ DCB 234, 227, 227, 237, 238, 249, 249, 252, 252, 222, 222, 221, 183, 183, 183, 183
+ DCB 234, 235, 235, 238, 238, 249, 249, 219, 219, 222, 222, 222, 191, 191, 191, 190
+ DCB 234, 235, 235, 238, 238, 207, 219, 219, 219, 222, 222, 191, 191, 191, 191, 190
+ DCB 234, 235, 235, 238, 238, 207, 219, 219, 219, 222, 191, 191, 191, 191, 191, 190
+ DCB 234, 235, 235, 238, 207, 207, 219, 219, 219, 222, 191, 191, 191, 191, 190, 159
+ DCB 234, 235, 235, 238, 207, 207, 218, 219, 219, 222, 191, 191, 191, 191, 190, 159
+ DCB 234, 235, 235, 238, 207, 207, 218, 219, 221, 191, 191, 191, 191, 190, 159, 159
+ DCB 234, 234, 203, 238, 207, 207, 218, 218, 187, 191, 191, 191, 191, 190, 159, 159
+ ; y=200
+ DCB 98, 98, 101, 102, 102, 113, 114, 114, 117, 117, 117, 117, 86, 86, 86, 85
+ DCB 98, 98, 101, 102, 102, 113, 114, 114, 117, 117, 117, 117, 86, 86, 86, 86
+ DCB 98, 99, 99, 102, 103, 103, 114, 115, 118, 118, 87, 87, 87, 86, 86, 86
+ DCB 99, 99, 99, 103, 103, 103, 115, 115, 125, 125, 87, 87, 87, 87, 93, 55
+ DCB 106, 107, 107, 110, 111, 122, 122, 122, 125, 125, 95, 95, 94, 94, 94, 63
+ DCB 107, 107, 107, 111, 111, 111, 123, 244, 244, 95, 95, 95, 95, 95, 63, 63
+ DCB 226, 226, 230, 230, 230, 241, 242, 245, 245, 214, 214, 214, 214, 214, 183, 183
+ DCB 227, 227, 227, 231, 231, 231, 242, 252, 252, 215, 215, 215, 214, 183, 183, 183
+ DCB 234, 234, 237, 238, 238, 249, 249, 252, 252, 222, 222, 222, 222, 183, 190, 190
+ DCB 234, 235, 235, 238, 239, 250, 250, 219, 219, 222, 223, 222, 191, 191, 191, 191
+ DCB 235, 235, 235, 238, 239, 250, 219, 219, 219, 222, 222, 191, 191, 191, 191, 191
+ DCB 235, 235, 235, 238, 239, 249, 219, 219, 222, 222, 222, 191, 191, 191, 191, 191
+ DCB 235, 235, 235, 238, 238, 207, 219, 219, 222, 222, 191, 191, 191, 191, 191, 190
+ DCB 235, 235, 235, 238, 207, 207, 219, 219, 222, 222, 191, 191, 191, 191, 191, 190
+ DCB 235, 235, 235, 238, 207, 207, 219, 219, 222, 222, 191, 191, 191, 191, 190, 159
+ DCB 234, 235, 238, 238, 207, 207, 219, 219, 222, 191, 191, 191, 191, 191, 190, 159
+ ; y=208
+ DCB 98, 98, 101, 102, 113, 113, 114, 117, 117, 118, 117, 117, 117, 86, 86, 86
+ DCB 98, 98, 102, 102, 103, 114, 114, 115, 118, 118, 118, 117, 87, 86, 86, 86
+ DCB 99, 99, 102, 103, 103, 114, 115, 115, 118, 118, 87, 87, 87, 87, 87, 86
+ DCB 106, 99, 109, 103, 103, 122, 115, 115, 125, 125, 87, 87, 87, 87, 94, 93
+ DCB 106, 107, 110, 111, 111, 122, 123, 123, 126, 126, 95, 95, 95, 94, 94, 63
+ DCB 107, 107, 107, 111, 111, 241, 123, 245, 245, 95, 95, 95, 95, 95, 63, 63
+ DCB 226, 227, 230, 230, 231, 242, 242, 245, 245, 215, 215, 214, 214, 214, 214, 183
+ DCB 227, 227, 227, 231, 231, 242, 243, 252, 252, 215, 215, 215, 215, 183, 183, 183
+ DCB 234, 235, 238, 238, 239, 250, 250, 253, 253, 222, 222, 222, 222, 222, 191, 190
+ DCB 235, 235, 235, 239, 239, 250, 250, 219, 223, 223, 223, 223, 222, 191, 191, 191
+ DCB 235, 235, 235, 239, 239, 250, 250, 219, 223, 223, 223, 222, 191, 191, 191, 191
+ DCB 235, 235, 235, 239, 239, 250, 219, 219, 222, 223, 223, 222, 191, 191, 191, 191
+ DCB 235, 235, 238, 238, 239, 250, 219, 219, 222, 223, 222, 191, 191, 191, 191, 191
+ DCB 235, 235, 238, 238, 239, 249, 219, 219, 222, 222, 222, 191, 191, 191, 191, 190
+ DCB 235, 235, 238, 238, 207, 249, 219, 219, 222, 222, 191, 191, 191, 191, 191, 190
+ DCB 235, 235, 238, 238, 207, 207, 219, 219, 222, 222, 191, 191, 191, 191, 190, 159
+ ; y=216
+ DCB 98, 101, 101, 102, 113, 113, 114, 117, 118, 118, 118, 117, 117, 117, 86, 86
+ DCB 98, 99, 102, 102, 103, 114, 114, 115, 118, 118, 118, 118, 87, 87, 86, 86
+ DCB 99, 99, 103, 103, 103, 115, 115, 115, 119, 119, 118, 87, 87, 87, 87, 87
+ DCB 106, 99, 110, 110, 121, 122, 122, 125, 126, 126, 126, 125, 94, 94, 94, 94
+ DCB 107, 107, 110, 111, 111, 122, 123, 123, 126, 126, 95, 95, 95, 95, 94, 94
+ DCB 107, 107, 230, 111, 111, 242, 123, 245, 245, 245, 95, 95, 95, 214, 214, 213
+ DCB 227, 227, 230, 231, 231, 242, 243, 246, 246, 215, 215, 215, 215, 214, 214, 183
+ DCB 227, 227, 231, 231, 231, 243, 243, 253, 253, 215, 215, 215, 215, 215, 183, 183
+ DCB 234, 235, 238, 239, 239, 250, 250, 253, 253, 223, 223, 222, 222, 222, 191, 191
+ DCB 235, 235, 238, 239, 239, 250, 250, 253, 223, 223, 223, 223, 222, 191, 191, 191
+ DCB 235, 235, 238, 239, 239, 250, 250, 219, 223, 223, 223, 223, 222, 191, 191, 191
+ DCB 235, 235, 238, 239, 239, 250, 250, 219, 223, 223, 223, 222, 191, 191, 191, 191
+ DCB 235, 235, 238, 239, 239, 250, 219, 219, 223, 223, 223, 222, 191, 191, 191, 191
+ DCB 235, 235, 238, 239, 239, 250, 219, 219, 223, 223, 222, 191, 191, 191, 191, 191
+ DCB 235, 235, 238, 239, 239, 250, 219, 219, 222, 223, 222, 191, 191, 191, 191, 190
+ DCB 235, 235, 238, 238, 249, 219, 219, 219, 222, 222, 191, 191, 191, 191, 191, 190
+ ; y=224
+ DCB 98, 101, 102, 102, 113, 114, 114, 117, 118, 118, 118, 118, 117, 117, 86, 86
+ DCB 99, 99, 102, 103, 114, 114, 115, 118, 118, 119, 118, 118, 118, 87, 87, 86
+ DCB 99, 99, 103, 103, 103, 115, 115, 115, 119, 119, 119, 87, 87, 87, 87, 87
+ DCB 107, 110, 110, 111, 122, 122, 123, 126, 126, 126, 126, 126, 95, 95, 94, 94
+ DCB 107, 107, 111, 111, 111, 123, 123, 123, 127, 127, 126, 95, 95, 95, 95, 95
+ DCB 226, 229, 230, 230, 242, 242, 242, 246, 246, 246, 246, 215, 214, 214, 214, 214
+ DCB 227, 227, 231, 231, 231, 243, 243, 246, 246, 246, 215, 215, 215, 215, 214, 183
+ DCB 227, 237, 238, 231, 249, 250, 243, 253, 253, 253, 215, 215, 215, 222, 222, 221
+ DCB 235, 235, 238, 239, 239, 250, 251, 254, 254, 223, 223, 223, 223, 222, 222, 191
+ DCB 235, 235, 239, 239, 239, 251, 251, 254, 254, 223, 223, 223, 223, 222, 191, 191
+ DCB 235, 235, 239, 239, 239, 251, 251, 254, 223, 223, 223, 223, 223, 191, 191, 191
+ DCB 235, 235, 239, 239, 239, 250, 251, 254, 223, 223, 223, 223, 222, 191, 191, 191
+ DCB 235, 235, 239, 239, 239, 250, 251, 253, 223, 223, 223, 223, 191, 191, 191, 191
+ DCB 235, 235, 239, 239, 250, 250, 219, 219, 223, 223, 223, 222, 191, 191, 191, 191
+ DCB 235, 235, 239, 239, 250, 250, 219, 219, 223, 223, 223, 222, 191, 191, 191, 191
+ DCB 235, 235, 239, 239, 250, 250, 219, 219, 223, 223, 222, 191, 191, 191, 191, 191
+ ; y=232
+ DCB 98, 102, 102, 102, 114, 114, 117, 118, 118, 118, 118, 118, 118, 117, 117, 86
+ DCB 99, 102, 103, 103, 114, 115, 115, 118, 119, 119, 119, 118, 118, 87, 87, 87
+ DCB 99, 109, 103, 103, 121, 115, 115, 119, 119, 119, 119, 119, 87, 87, 87, 87
+ DCB 107, 110, 110, 111, 122, 122, 123, 126, 127, 127, 126, 126, 95, 95, 95, 94
+ DCB 107, 107, 111, 111, 123, 123, 123, 127, 127, 127, 127, 95, 95, 95, 95, 95
+ DCB 227, 230, 230, 231, 242, 242, 243, 246, 246, 246, 246, 246, 215, 215, 214, 214
+ DCB 227, 227, 231, 231, 242, 243, 243, 247, 247, 247, 215, 215, 215, 215, 215, 215
+ DCB 235, 238, 238, 239, 250, 250, 251, 254, 254, 254, 254, 223, 222, 222, 222, 222
+ DCB 235, 238, 239, 239, 250, 251, 251, 254, 254, 254, 223, 223, 223, 223, 222, 191
+ DCB 235, 238, 239, 239, 250, 251, 251, 254, 254, 223, 223, 223, 223, 223, 222, 191
+ DCB 235, 238, 239, 239, 250, 251, 251, 254, 254, 223, 223, 223, 223, 222, 191, 191
+ DCB 235, 238, 239, 239, 250, 251, 251, 254, 223, 223, 223, 223, 223, 222, 191, 191
+ DCB 235, 238, 239, 239, 250, 251, 251, 254, 223, 223, 223, 223, 222, 191, 191, 191
+ DCB 235, 238, 239, 239, 250, 250, 251, 254, 223, 223, 223, 223, 222, 191, 191, 191
+ DCB 235, 238, 239, 239, 250, 250, 219, 223, 223, 223, 223, 222, 191, 191, 191, 191
+ DCB 235, 238, 239, 239, 250, 250, 219, 223, 223, 223, 223, 222, 191, 191, 191, 191
+ ; y=240
+ DCB 99, 102, 102, 103, 114, 114, 118, 118, 118, 118, 118, 118, 118, 118, 118, 87
+ DCB 99, 102, 103, 103, 114, 115, 115, 119, 119, 119, 119, 119, 118, 118, 87, 87
+ DCB 99, 110, 103, 103, 122, 115, 125, 126, 119, 119, 119, 126, 126, 125, 87, 87
+ DCB 107, 110, 111, 111, 122, 123, 123, 126, 127, 127, 127, 126, 126, 95, 95, 95
+ DCB 107, 111, 111, 111, 123, 123, 123, 127, 127, 127, 127, 127, 95, 95, 95, 95
+ DCB 227, 230, 231, 231, 242, 243, 243, 246, 247, 246, 246, 246, 215, 215, 215, 214
+ DCB 227, 231, 231, 231, 243, 243, 243, 247, 247, 247, 247, 215, 215, 215, 215, 215
+ DCB 235, 238, 238, 239, 250, 251, 251, 254, 254, 254, 254, 223, 223, 222, 222, 222
+ DCB 235, 238, 239, 239, 251, 251, 251, 254, 255, 254, 223, 223, 223, 223, 223, 222
+ DCB 235, 238, 239, 239, 251, 251, 251, 254, 255, 254, 223, 223, 223, 223, 222, 191
+ DCB 235, 238, 239, 239, 251, 251, 251, 254, 254, 223, 223, 223, 223, 223, 222, 191
+ DCB 235, 238, 239, 239, 251, 251, 251, 254, 254, 223, 223, 223, 223, 222, 191, 191
+ DCB 235, 238, 239, 239, 251, 251, 251, 254, 223, 223, 223, 223, 223, 222, 191, 191
+ DCB 235, 238, 239, 239, 251, 251, 251, 254, 223, 223, 223, 223, 222, 191, 191, 191
+ DCB 235, 238, 239, 239, 250, 251, 254, 254, 223, 223, 223, 223, 222, 191, 191, 191
+ DCB 235, 238, 239, 239, 250, 251, 253, 223, 223, 223, 223, 222, 191, 191, 191, 191
+ ; y=248
+ DCB 102, 102, 103, 114, 114, 115, 118, 118, 119, 119, 119, 119, 118, 118, 118, 87
+ DCB 99, 103, 103, 103, 115, 115, 115, 119, 119, 119, 119, 119, 119, 119, 87, 87
+ DCB 110, 110, 110, 122, 122, 123, 126, 126, 126, 126, 126, 126, 126, 126, 125, 95
+ DCB 107, 111, 111, 111, 123, 123, 126, 127, 127, 127, 127, 127, 126, 95, 95, 95
+ DCB 229, 230, 111, 241, 242, 123, 246, 246, 127, 127, 246, 246, 246, 95, 95, 95
+ DCB 227, 230, 231, 231, 242, 243, 246, 247, 247, 247, 247, 246, 215, 215, 215, 215
+ DCB 227, 231, 231, 231, 243, 243, 253, 247, 247, 247, 247, 253, 215, 215, 215, 215
+ DCB 235, 238, 239, 250, 250, 251, 254, 254, 255, 254, 254, 254, 223, 223, 223, 222
+ DCB 235, 239, 239, 239, 251, 251, 251, 255, 255, 255, 254, 223, 223, 223, 223, 222
+ DCB 235, 239, 239, 239, 251, 251, 251, 255, 255, 254, 223, 223, 223, 223, 223, 222
+ DCB 235, 239, 239, 239, 251, 251, 251, 255, 255, 254, 223, 223, 223, 223, 222, 191
+ DCB 235, 239, 239, 239, 251, 251, 254, 254, 254, 223, 223, 223, 223, 223, 222, 191
+ DCB 235, 239, 239, 239, 251, 251, 254, 254, 254, 223, 223, 223, 223, 223, 191, 191
+ DCB 235, 239, 239, 239, 251, 251, 254, 254, 223, 223, 223, 223, 223, 222, 191, 191
+ DCB 235, 239, 239, 239, 251, 251, 254, 254, 223, 223, 223, 223, 223, 191, 191, 191
+ DCB 235, 239, 239, 239, 251, 251, 254, 254, 223, 223, 223, 223, 222, 191, 191, 191
+
+
+ END
diff --git a/utils/genpalette,ff8 b/utils/genpalette,ff8
new file mode 100644
index 0000000000000000000000000000000000000000..b0077decccee2f4339a6a94319844e56a156187c
Binary files /dev/null and b/utils/genpalette,ff8 differ
diff --git a/utils/genyuvtabs,ff8 b/utils/genyuvtabs,ff8
new file mode 100644
index 0000000000000000000000000000000000000000..be3e7072de6d94a30f62efe330fad60d309b6c99
Binary files /dev/null and b/utils/genyuvtabs,ff8 differ
diff --git a/utils/makejhdr,ff8 b/utils/makejhdr,ff8
new file mode 100644
index 0000000000000000000000000000000000000000..0986e24702eb412a764e719de7e42065ee5ecfc2
Binary files /dev/null and b/utils/makejhdr,ff8 differ