testpico: 32x reset + other tests
[megadrive.git] / idc / mida_s68k.idc
CommitLineData
5e6cf6b2 1//\r
2// IDC File to disassemble Sega Genesis/Megadrive rom\r
3// by Kaneda\r
4//\r
5// Useage:\r
6// launch IDA with "idag -a -p68000 -Smida.idc"\r
7// Select your .bin file\r
8// Press OK to the 2 dialog boxes following\r
9//\r
10// 0.1 (12 Nov 2004 ): Initial release\r
11// 0.2 (01 Jun 2005 ): Support for start adress <0x200 (skip header)\r
12//\r
13// Update on http://www.consoledev.fr.st\r
14//\r
15\r
16#include <idc.idc>\r
17\r
18//-------------------------------------------------------------------------\r
19static CW(off,name,cmt) {\r
20 auto x;\r
21 x = off;\r
22 MakeWord(x);\r
23 MakeName(x,name);\r
24 MakeRptCmt(x,cmt);\r
25}\r
26\r
27//-------------------------------------------------------------------------\r
28static CD(off,name,cmt) {\r
29 auto x;\r
30 x = off;\r
31 MakeDword(x);\r
32 MakeName(x,name);\r
33 MakeRptCmt(x,cmt);\r
34}\r
35\r
36//-------------------------------------------------------------------------\r
37static CB(off,name,cmt) {\r
38 auto x;\r
39 x = off;\r
40 MakeByte(x);\r
41 MakeName(x,name);\r
42 MakeRptCmt(x,cmt);\r
43}\r
44\r
45static CS(off,end,name,cmt) {\r
46 auto x;\r
47 x = off;\r
48 MakeStr(x, end);\r
49 MakeName(x,name);\r
50 MakeRptCmt(x,cmt);\r
51}\r
52\r
53static mdVector( ) {\r
54auto i, addr;\r
55\r
56CD(0x00, "initStack", "Initial Stack");\r
57CD(0x04, "startAddress", "Start Address");\r
58CD(0x08, "", "Bus Error");\r
59CD(0x0C, "", "Address Error");\r
60CD(0x10, "", "Illegal instruction");\r
61CD(0x14, "", "Zero Divide");\r
62CD(0x18, "", "CHK instruction");\r
63CD(0x1C, "", "TRAPV instruction");\r
64CD(0x20, "", "Privilege Violation");\r
65CD(0x24, "", "Trace");\r
66CD(0x28, "", "Line 1010 Emulator");\r
67CD(0x2C, "", "Line 1111 Emulator");\r
68CD(0x30, "", "Reserved");\r
69CD(0x34, "", "Reserved");\r
70CD(0x38, "", "Reserved");\r
71CD(0x3C, "", "Unitialized Interrrupt");\r
72CD(0x40, "", "Reserved");\r
73CD(0x44, "", "Reserved");\r
74CD(0x48, "", "Reserved");\r
75CD(0x4C, "", "Reserved");\r
76CD(0x50, "", "Reserved");\r
77CD(0x54, "", "Reserved");\r
78CD(0x58, "", "Reserved");\r
79CD(0x5C, "", "Reserved");\r
80CD(0x60, "", "Spurious Interrupt");\r
81CD(0x64, "", "Level 1/gfx interrupt");\r
82CD(0x68, "", "Level 2/md interrupt");\r
83CD(0x6C, "", "Level 3/timer interrupt");\r
84CD(0x70, "", "Level 4/cdd interrupt");\r
85CD(0x74, "", "Level 5/cdc interrupt");\r
86CD(0x78, "", "Level 6/subcode interrupt");\r
87CD(0x7C, "", "Level 7 interrupt");\r
88\r
89i=0x80;\r
90while (i <= 0xBC){\r
91 CD(i,"", "Trap");\r
92 i = i+1;\r
93}\r
94\r
95i=0xC0;\r
96while (i <= 0xFF){\r
97 CD(i,"", "Reserved");\r
98 i = i+1;\r
99 }\r
100\r
101for ( i=0x08; i< 0x200; i=i+4 ) {\r
102 addr = Dword( i );\r
103 MakeCode(addr);\r
104 }\r
105}\r
106\r
107static mdHeader( ) {\r
108auto addr;\r
109\r
110addr = Dword( 0x04 );\r
111if (addr < 0x200)\r
112{\r
113 Warning("Start address unusual");\r
114 return;\r
115}\r
116CS(0x100,0x110,"","");\r
117 CS(0x110,0x120,"","");\r
118 CS(0x120,0x130,"","");\r
119 CS(0x130,0x140,"","");\r
120 CS(0x140,0x150,"","");\r
121 CS(0x150,0x160,"","");\r
122 CS(0x160,0x170,"","");\r
123 CS(0x170,0x180,"","");\r
124 CS(0x180,0x18D,"","Serial Number");\r
125 CW(0x18E, "CheckSum","");\r
126 CS(0x190,0x1A0,"","");\r
127 CD(0x1A0, "RomStartAdr", "Rom Start Adress");\r
128 CD(0x1A4, "RomEndAdr", "Rom End Adress");\r
129 CD(0x1A8, "RamStartAdr", "Ram Start Adress");\r
130 CD(0x1AC, "RamEndAdr", "Ram End Adress");\r
131 CS(0x1B0, 0x1BC, "", "SRam data");\r
132 CS(0x1BC, 0x1C8, "", "Modem data");\r
133 CS(0x1C8, 0x1DC, "", "Memo");\r
134 CS(0x1DC, 0x1F0, "", "");\r
135 CS(0x1F0, 0x200, "Country", "Countries codes");\r
136 }\r
137 \r
138static mdAddress( ){\r
139 // CD(0xC00000, "VDP_Data","");\r
140}\r
141 \r
142//-------------------------------------------------------------------------\r
143static MakeIrq(addr,name) {\r
144 MakeName(addr,name);\r
145 //MakeCode(addr);\r
146 MakeFunction(addr,BADADDR);\r
147 Wait( );\r
148}\r
149\r
150static main() {\r
151 auto addr;\r
152 \r
153 SetPrcsr( "68000");\r
154\r
155 SegCreate(0x000000,0x07FFFF,0,1,0,2);\r
156 SegRename(0x000000,"prg_ram");\r
157\r
158 SegCreate(0xFE0000,0xFE3FFF,0,1,0,2);\r
159 SegRename(0xFE0000,"bram");\r
160\r
161 SegCreate(0xFF0000,0xFF3FFF,0,1,0,2);\r
162 SegRename(0xFF0000,"pcm");\r
163\r
164 SegCreate(0xFF8000,0xFF81FF,0,1,0,2);\r
165 SegRename(0xFF8000,"regs");\r
166 \r
167 mdVector( );\r
168 mdHeader( );\r
169 mdAddress( );\r
170\r
171 MakeIrq(Dword(0x04), "main");\r
172 MakeIrq(Dword(0x64), "gfx_irq");\r
173 MakeIrq(Dword(0x68), "md_irq");\r
174 MakeIrq(Dword(0x6c), "timer_irq");\r
175 MakeIrq(Dword(0x70), "cdd_irq");\r
176 MakeIrq(Dword(0x74), "cdc_irq");\r
177 MakeIrq(Dword(0x78), "subcode_irq");\r
178}\r