source: trunk/platform/a490/sub/100f/movie_rec.c @ 1205

Revision 1205, 8.6 KB checked in by reyalp, 2 years ago (diff)

a490 100f beta support, thanks to mrowl in http://chdk.setepontos.com/index.php?topic=650.msg68942#msg68942

  • Property svn:eol-style set to native
Line 
1#include "conf.h"
2
3int *video_quality = &conf.video_quality;
4int *video_mode    = &conf.video_mode;
5
6long def_table[24]={0x2000, 0x38D, 0x788, 0x5800, 0x9C5, 0x14B8, 0x10000, 0x1C6A, 0x3C45, 0x8000, 0xE35, 0x1E23,
7           0x1CCD, -0x2E1, -0x579, 0x4F33, -0x7EB, -0xF0C, 0xE666, -0x170A, -0x2BC6, 0x7333, -0xB85, -0x15E3};
8
9long table[24];
10
11void change_video_tables(int a, int b){
12 int i;
13 for (i=0;i<24;i++) table[i]=(def_table[i]*a)/b;
14}
15
16long CompressionRateTable[]={0x60, 0x5D, 0x5A, 0x57, 0x54, 0x51, 0x4D, 0x48, 0x42, 0x3B, 0x32, 0x29, 0x22, 0x1D, 0x17, 0x14, 0x10, 0xE, 0xB, 9, 7, 6, 5, 4, 3, 2, 1};
17
18
19
20// ROM: 0xFFD0C8F8
21void __attribute__((naked,noinline)) movie_record_task(){
22        asm volatile(
23                        "STMFD   SP!, {R2-R8,LR}\n"
24                        "LDR     R8, =0x346\n"
25                        "LDR     R7, =0x2710\n"
26                        "LDR     R4, =0x5438\n"
27                        "MOV     R6, #0\n"
28                        "MOV     R5, #1\n"
29"loc_FFD0C910:\n"
30                        "LDR     R0, [R4,#0x18]\n"
31                        "MOV     R2, #0\n"
32                        "ADD     R1, SP, #4\n"
33                        "BL      sub_FFC28AA4\n"
34                        "LDR     R0, [R4,#0x20]\n"
35                        "CMP     R0, #0\n"
36                        "BNE     loc_FFD0C9E0\n"
37                        "LDR     R0, [SP,#4]\n"
38                        "LDR     R1, [R0]\n"
39                        "SUB     R1, R1, #2\n"
40                        "CMP     R1, #9\n"
41                        "ADDLS   PC, PC, R1,LSL#2\n"
42                        "B       loc_FFD0C9E0\n"
43                        "B       loc_FFD0C994\n"
44                        "B       loc_FFD0C9B4\n"
45                        "B       loc_FFD0C9C4\n"
46                        "B       loc_FFD0C9CC\n"
47                        "B       loc_FFD0C99C\n"
48                        "B       loc_FFD0C9D4\n"
49                        "B       loc_FFD0C9A4\n"
50                        "B       loc_FFD0C9E0\n"
51                        "B       loc_FFD0C9DC\n"
52                        "B       loc_FFD0C96C\n"
53"loc_FFD0C96C:\n"
54                        "LDR     R0, =0xFFD0C604\n"             // nullsub_258?
55                        "STR     R6, [R4,#0x34]\n"
56                        "STR     R0, [R4,#0xA8]\n"
57                        "LDR     R0, =0xFFD0C094\n"
58                        "LDR     R2, =0xFFD0BFB0\n"
59                        "LDR     R1, =0x6FA40\n"
60                        "STR     R6, [R4,#0x24]\n"
61                        "BL      sub_FFCB63C0\n"
62                        "STR     R5, [R4,#0x38]\n"
63                        "B       loc_FFD0C9E0\n"
64"loc_FFD0C994:\n"
65                        "BL      unlock_optical_zoom\n"         //  +
66                        "BL      sub_FFD0C6FC\n"
67                        "B       loc_FFD0C9E0\n"
68"loc_FFD0C99C:\n"
69                        "BL      sub_FFD0C404_my\n"                     //---------->
70                        "B       loc_FFD0C9E0\n"
71"loc_FFD0C9A4:\n"
72                        "LDR     R1, [R0,#0x10]\n"
73                        "LDR     R0, [R0,#4]\n"
74                        "BL      sub_FFDF5F2C\n"
75                        "B       loc_FFD0C9E0\n"
76"loc_FFD0C9B4:\n"
77                        "LDR     R0, [R4,#0x38]\n"
78                        "CMP     R0, #5\n"
79                        "STRNE   R5, [R4,#0x28]\n"
80                        "B       loc_FFD0C9E0\n"
81"loc_FFD0C9C4:\n"
82                        "BL      sub_FFD0C21C\n"
83                        "B       loc_FFD0C9E0\n"
84"loc_FFD0C9CC:\n"
85                        "BL      sub_FFD0C0E0\n"
86                        "B       loc_FFD0C9E0\n"
87"loc_FFD0C9D4:\n"
88                        "BL      sub_FFD0BF3C\n"
89                        "B       loc_FFD0C9E0\n"
90"loc_FFD0C9DC:\n"
91                        "BL      sub_FFD0CB48\n"
92"loc_FFD0C9E0:\n"
93                        "LDR     R1, [SP,#4]\n"
94                        "LDR     R3, =0xFFD0BDCC\n"
95                        "STR     R6, [R1]\n"
96                        "STR     R8, [SP]\n"
97                        "LDR     R0, [R4,#0x1C]\n"
98                        "MOV     R2, R7\n"
99                        "BL      sub_FFC0F5C0\n"
100                        "B       loc_FFD0C910\n"
101        );
102}
103
104
105void __attribute__((naked,noinline)) sub_FFD0C404_my(){
106        asm volatile(
107                        "STMFD   SP!, {R4-R8,LR}\n"
108                        "SUB     SP, SP, #0x40\n"
109                        "MOV     R6, #0\n"
110                        "LDR     R5, =0x5438\n"
111                        "MOV     R4, R0\n"
112                        "STR     R6, [SP,#0x30]\n"
113                        "STR     R6, [SP,#0x28]\n"
114                        "LDR     R0, [R5,#0x38]\n"
115                        "MOV     R8, #4\n"
116                        "CMP     R0, #3\n"
117                        "STREQ   R8, [R5,#0x38]\n"
118                        "LDR     R0, [R5,#0xA8]\n"
119                        "BLX     R0\n"
120                        "LDR     R0, [R5,#0x38]\n"
121                        "CMP     R0, #4\n"
122                        "BNE     loc_FFD0C4DC\n"
123                        "ADD     R3, SP, #0x28\n"
124                        "ADD     R2, SP, #0x2C\n"
125                        "ADD     R1, SP, #0x30\n"
126                        "ADD     R0, SP, #0x34\n"
127                        "BL      sub_FFDF60C0\n"
128                        "CMP     R0, #0\n"
129                        "MOV     R7, #1\n"
130                        "BNE     loc_FFD0C480\n"
131                        "LDR     R1, [R5,#0x28]\n"
132                        "CMP     R1, #1\n"
133                        "BNE     loc_FFD0C4E4\n"
134                        "LDR     R1, [R5,#0x60]\n"
135                        "LDR     R2, [R5,#0x3C]\n"
136                        "CMP     R1, R2\n"
137                        "BCC     loc_FFD0C4E4\n"
138"loc_FFD0C480:\n"
139                        "CMP     R0, #0x80000001\n"
140                        "STREQ   R8, [R5,#0x64]\n"
141                        "BEQ     loc_FFD0C4B8\n"
142                        "CMP     R0, #0x80000003\n"
143                        "STREQ   R7, [R5,#0x64]\n"
144                        "BEQ     loc_FFD0C4B8\n"
145                        "CMP     R0, #0x80000005\n"
146                        "MOVEQ   R0, #2\n"
147                        "BEQ     loc_FFD0C4B4\n"
148                        "CMP     R0, #0x80000007\n"
149                        "STRNE   R6, [R5,#0x64]\n"
150                        "BNE     loc_FFD0C4B8\n"
151                        "MOV     R0, #3\n"
152"loc_FFD0C4B4:\n"
153                        "STR     R0, [R5,#0x64]\n"
154"loc_FFD0C4B8:\n"
155                        "LDR     R0, =0x6FA70\n"
156                        "LDR     R0, [R0,#8]\n"
157                        "CMP     R0, #0\n"
158                        "BEQ     loc_FFD0C4D0\n"
159                        "BL      sub_FFC445CC\n"
160                        "B       loc_FFD0C4D4\n"
161"loc_FFD0C4D0:\n"
162                        "BL      sub_FFD0BF3C\n"
163"loc_FFD0C4D4:\n"
164                        "MOV     R0, #5\n"
165                        "STR     R0, [R5,#0x38]\n"
166"loc_FFD0C4DC:\n"
167                        "ADD     SP, SP, #0x40\n"
168                        "LDMFD   SP!, {R4-R8,PC}\n"
169"loc_FFD0C4E4:\n"
170                        "LDR     LR, [SP,#0x30]\n"
171                        "CMP     LR, #0\n"
172                        "BEQ     loc_FFD0C5AC\n"
173                        "STR     R7, [R5,#0x2C]\n"
174                        "LDR     R0, [R5,#0x7C]\n"
175                        "LDR     R1, [R4,#0x14]\n"
176                        "LDR     R2, [R4,#0x18]\n"
177                        "LDR     R12, [R4,#0xC]\n"
178                        "ADD     R3, SP, #0x38\n"
179                        "ADD     R8, SP, #0x14\n"
180                        "STMIA   R8, {R0-R3}\n"
181                        "LDR     R3, [R5,#0x68]\n"
182                        "ADD     R2, SP, #0x3C\n"
183                        "ADD     R8, SP, #8\n"
184                        "LDRD    R0, [SP,#0x28]\n"
185                        "STMIA   R8, {R0,R2,R3}\n"
186                        "STR     R1, [SP,#4]\n"
187                        "STR     LR, [SP]\n"
188                        "LDMIB   R4, {R0,R1}\n"
189                        "LDR     R3, [SP,#0x34]\n"
190                        "MOV     R2, R12\n"
191                        "BL      sub_FFDCB754\n"
192                        "LDR     R0, [R5,#0x10]\n"
193                        "LDR     R1, [R5,#0x58]\n"
194                        "BL      sub_FFC0F034\n"                // TakeSemaphore
195                        "CMP     R0, #9\n"
196                        "BNE     loc_FFD0C560\n"
197                        "BL      sub_FFDF66AC\n"
198                        "MOV     R0, #0x90000\n"
199                        "STR     R7, [R5,#0x38]\n"
200                        "B       loc_FFD0C578\n"
201"loc_FFD0C560:\n"
202                        "LDR     R0, [SP,#0x38]\n"
203                        "CMP     R0, #0\n"
204                        "BEQ     loc_FFD0C580\n"
205                        "BL      sub_FFDF66AC\n"
206                        "MOV     R0, #0xA0000\n"
207                        "STR     R7, [R5,#0x38]\n"
208"loc_FFD0C578:\n"
209                        "BL      sub_FFC6D01C\n"
210                        "B       loc_FFD0C4DC\n"
211"loc_FFD0C580:\n"
212                        "BL      sub_FFDCB818\n"
213                        "LDR     R0, [SP,#0x34]\n"
214                        "LDR     R1, [SP,#0x3C]\n"
215                        "BL      sub_FFDF6454\n"
216                        "LDR     R0, [R5,#0x5C]\n"
217                        "LDR     R1, =0x54B4\n"
218                        "ADD     R0, R0, #1\n"
219                        "STR     R0, [R5,#0x5C]\n"
220                        "LDR     R0, [SP,#0x3C]\n"
221                        "MOV     R2, #0\n"
222                        "BL      sub_FFDF4278_my\n"  //---------->
223"loc_FFD0C5AC:\n"
224                        "LDR     R0, [R5,#0x60]\n"
225                        "ADD     R0, R0, #1\n"
226                        "STR     R0, [R5,#0x60]\n"
227                        "LDR     R1, [R5,#0x4C]\n"
228                        "MUL     R0, R1, R0\n"
229                        "LDR     R1, [R5,#0x48]\n"
230                        "BL      sub_FFE7FAC0\n"
231                        "MOV     R4, R0\n"
232                        "BL      sub_FFDF66E4\n"
233                        "LDR     R1, [R5,#0x80]\n"
234                        "CMP     R1, R4\n"
235                        "BNE     loc_FFD0C5E8\n"
236                        "LDR     R0, [R5,#0x30]\n"
237                        "CMP     R0, #1\n"
238                        "BNE     loc_FFD0C5FC\n"
239"loc_FFD0C5E8:\n"
240                        "LDR     R1, [R5,#0x8C]\n"
241                        "MOV     R0, R4\n"
242                        "BLX     R1\n"
243                        "STR     R4, [R5,#0x80]\n"
244                        "STR     R6, [R5,#0x30]\n"
245"loc_FFD0C5FC:\n"
246                        "STR     R6, [R5,#0x2C]\n"
247                        "B       loc_FFD0C4DC\n"
248        );
249}
250
251void __attribute__((naked,noinline)) sub_FFDF4278_my(){
252        asm volatile(
253                        "STMFD   SP!, {R4-R8,LR}\n"
254                        "LDR     R4, =0x88A0\n"
255                        "LDR     LR, [R4]\n"
256                        "LDR     R2, [R4,#8]\n"
257                        "CMP     LR, #0\n"
258                        "LDRNE   R3, [R4,#0xC]\n"
259                        "MOV     R5, R2\n"
260                        "CMPNE   R3, #1\n"
261                        "MOVEQ   R2, #0\n"
262                        "STREQ   R0, [R4]\n"
263                        "STREQ   R2, [R4,#0xC]\n"
264                        "BEQ     loc_FFDF4344\n"
265                        "LDR     R3, [R4,#4]\n"
266                        "LDR     R7, =table\n"                  // ok
267                        "ADD     R12, R3, R3,LSL#1\n"
268                        "LDR     R3, [R7,R12,LSL#2]\n"
269                        "ADD     R6, R7, #0x30\n"
270                        "LDR     R8, [R6,R12,LSL#2]\n"
271                        "SUB     R3, LR, R3\n"
272                        "CMP     R3, #0\n"
273                        "SUB     LR, LR, R8\n"
274                        "BLE     loc_FFDF4300\n"
275                        "ADD     R12, R7, R12,LSL#2\n"
276                        "LDR     LR, [R12,#4]\n"
277                        "CMP     LR, R3\n"
278                        "ADDGE   R2, R2, #1\n"
279                        "BGE     loc_FFDF42F4\n"
280                        "LDR     R12, [R12,#8]\n"
281                        "CMP     R12, R3\n"
282                        "ADDLT   R2, R2, #3\n"
283                        "ADDGE   R2, R2, #2\n"
284"loc_FFDF42F4:\n"
285                //  "CMP     R2, #0x17\n"   // -
286                //  "MOVGE   R2, #0x16\n"   // -
287                        "CMP     R2, #0x1A\n"   // +
288                        "MOVGE   R2, #0x19\n"   // +
289                        "B       loc_FFDF4334\n"
290"loc_FFDF4300:\n"
291                        "CMP     LR, #0\n"
292                        "BGE     loc_FFDF4334\n"
293                        "ADD     R3, R6, R12,LSL#2\n"
294                        "LDR     R12, [R3,#4]\n"
295                        "CMP     R12, LR\n"
296                        "SUBLE   R2, R2, #1\n"
297                        "BLE     loc_FFDF432C\n"
298                        "LDR     R3, [R3,#8]\n"
299                        "CMP     R3, LR\n"
300                        "SUBGT   R2, R2, #3\n"
301                        "SUBLE   R2, R2, #2\n"
302"loc_FFDF432C:\n"
303                        "CMP     R2, #0\n"
304                        "MOVLT   R2, #0\n"
305"loc_FFDF4334:\n"
306                        "CMP     R2, R5\n"
307                        "STRNE   R2, [R4,#8]\n"
308                        "MOVNE   R2, #1\n"
309                        "STRNE   R2, [R4,#0xC]\n"
310"loc_FFDF4344:\n"
311                        "LDR     R2, =CompressionRateTable\n"
312                        "LDR     R3, [R4,#8]\n"
313                        "LDR     R2, [R2,R3,LSL#2]\n"
314
315                        "LDR     R3, =video_mode\n"      // +
316                        "LDR     R3, [R3]\n"             // +
317                        "LDR     R3, [R3]\n"             // +
318                        "CMP     R3, #1\n"               // +
319                        "LDREQ   R3, =video_quality\n"   // +
320                        "LDREQ   R3, [R3]\n"             // +
321                        "LDREQ   R2, [R3]\n"             // +
322
323                        "STR     R2, [R1]\n"
324                        "STR     R0, [R4]\n"
325                        "LDMFD   SP!, {R4-R8,PC}\n"
326        );
327}
Note: See TracBrowser for help on using the repository browser.