OSDN Git Service

988be95503ed21522ca499f203516ae202105a26
[unagi/old-svn-converted.git] / client / trunk / anago / flashcore.nut
1 mega <- 0x20000;
2 function loopsize_get(t, trans, image_size, device_size)
3 {
4         local trans_full = 3, trans_top = 1, trans_bottom = 2; //header.h enum transtype
5         local loop = {start = 0, end = 0};
6         switch(trans){
7         case trans_full:{
8                 local size = device_size < t.maxsize ? device_size : t.maxsize;
9                 loop.end = size / t.banksize;
10                 }break;
11         case trans_top:
12                 loop.end = image_size / t.banksize;
13                 break;
14         case trans_bottom:
15                 loop.start = (t.maxsize - image_size) / t.banksize;
16                 loop.end = t.maxsize / t.banksize;
17                 break;
18         default:
19                 loop.start = 0;
20                 loop.end = 0;
21                 break;
22         }
23         return loop;
24 }
25 function program(
26         d, mapper, 
27         cpu_trans, cpu_image_size, cpu_device_size,
28         ppu_trans, ppu_image_size, ppu_device_size
29 )
30 {
31         local trans_empty = 0;
32         if(board.mappernum != mapper){
33                 print("mapper number not connected\n");
34                 return;
35         }
36         local cpu_loop = loopsize_get(board.cpu, cpu_trans, cpu_image_size, cpu_device_size);
37         local ppu_loop = loopsize_get(board.ppu, ppu_trans, ppu_image_size, ppu_device_size);
38         local co_cpu = newthread(cpu_transfer);
39         local co_ppu = newthread(ppu_transfer);
40         if(board.vram_mirrorfind == true){
41                 vram_mirrorfind(d);
42         }
43         initalize(d, board.cpu.banksize, board.ppu.banksize);
44         if(cpu_trans != trans_empty){
45                 cpu_erase(d);
46         }
47         if(ppu_trans != trans_empty){
48                 ppu_erase(d);
49         }
50         erase_wait(d);
51         if(cpu_trans != trans_empty){
52                 //cpu_transfer(d, cpu_loop.start, cpu_loop.end, board.cpu.banksize);
53                 co_cpu.call(d, cpu_loop.start, cpu_loop.end, board.cpu.banksize);
54         }
55         if(ppu_trans != trans_empty){
56                 co_ppu.call(d, ppu_loop.start, ppu_loop.end, board.ppu.banksize);
57         }
58         program_main(d, co_cpu, co_ppu)
59 }
60