OSDN Git Service

support exception
[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
26 function testrun(
27         d, mapper, 
28         cpu_trans, cpu_image_size, cpu_device_size,
29         ppu_trans, ppu_image_size, ppu_device_size
30 )
31 {
32         local trans_empty = 0;
33         if((board.mappernum != mapper) && (mapper != 0)){
34                 print("mapper number are not connected\n");
35                 print("af:" + board.mappernum + " image:" + mapper + "\n");
36         }
37         local cpu_loop = loopsize_get(board.cpu, cpu_trans, cpu_image_size, cpu_device_size);
38         local ppu_loop = loopsize_get(board.ppu, ppu_trans, ppu_image_size, ppu_device_size);
39         if(board.vram_mirrorfind == true){
40                 vram_mirrorfind(d);
41         }
42         initalize(d, board.cpu.banksize, board.ppu.banksize);
43         if(cpu_trans != trans_empty){
44                 cpu_transfer(d, cpu_loop.start, cpu_loop.end, board.cpu.banksize);
45         }
46         if(ppu_trans != trans_empty){
47                 ppu_transfer(d, ppu_loop.start, ppu_loop.end, board.ppu.banksize);
48         }
49 }
50
51 function program(
52         d, mapper, 
53         cpu_trans, cpu_image_size, cpu_device_size,
54         ppu_trans, ppu_image_size, ppu_device_size
55 )
56 {
57         local trans_empty = 0;
58         if((board.mappernum != mapper) && (mapper != 0)){
59                 return;
60         }
61         local cpu_loop = loopsize_get(board.cpu, cpu_trans, cpu_image_size, cpu_device_size);
62         local ppu_loop = loopsize_get(board.ppu, ppu_trans, ppu_image_size, ppu_device_size);
63         local co_cpu = newthread(cpu_transfer);
64         local co_ppu = newthread(ppu_transfer);
65         initalize(d, board.cpu.banksize, board.ppu.banksize);
66         if(cpu_trans != trans_empty){
67                 cpu_erase(d);
68         }
69         if(ppu_trans != trans_empty){
70                 ppu_erase(d);
71         }
72         erase_wait(d);
73         if(cpu_trans != trans_empty){
74                 co_cpu.call(d, cpu_loop.start, cpu_loop.end, board.cpu.banksize);
75         }
76         if(ppu_trans != trans_empty){
77                 co_ppu.call(d, ppu_loop.start, ppu_loop.end, board.ppu.banksize);
78         }
79         program_main(d, co_cpu, co_ppu)
80 }