1 {Unit containing the devices supported by the directive $PROCESSOR.
2 The list of devices supported doesn't have to be complete, because the use
3 of directive $PROCESSOR is no recommended. It's preferred using units with
4 device definition like PIC16F84.pas.
5 }
6 unit Pic16Devices;
7 {$mode objfpc}{$H+}
8 interface
9 uses
10 Classes, SysUtils , PicCore, Pic16Utils;
11
12 procedure GetSupportedDevices(list: TStrings);
GetHardwareInfonull13 function GetHardwareInfo(pic: TPIC16; model: string): boolean;
14
15 implementation
16
17 procedure GetSupportedDevices(list: TStrings);
18 {Devuelve la lista de dispositivos soportados. Esta lista debe ser la misma que hay en
19 GetHardwareInfo. }
20 begin
21 list.Add('PIC16C63');
22 list.Add('PIC16CR63');
23 list.Add('PIC16C65');
24 list.Add('PIC16C65A');
25 list.Add('PIC16CR65');
26
27 list.Add('PIC16F72');
28 list.Add('PIC16F83');
29 list.Add('PIC16CR83');
30 list.Add('PIC16F84');
31 list.Add('PIC16CR84');
32 list.Add('PIC16F84A');
33
34 list.Add('PIC16F870');
35 list.Add('PIC16F871');
36 list.Add('PIC16F872');
37 list.Add('PIC16F873');
38 list.Add('PIC16F873A');
39 list.Add('PIC16F874');
40 list.Add('PIC16F874A');
41 list.Add('PIC16F876');
42 list.Add('PIC16F876A');
43 list.Add('PIC16F877');
44 list.Add('PIC16F877A');
45 list.Add('PIC16F887');
46 list.Add('PIC16F627A');
47 list.Add('PIC16F628A');
48 list.Add('PIC16F648A');
49 end;
GetHardwareInfonull50 function GetHardwareInfo(pic: TPIC16; model: string): boolean;
51 {Obtiene información parra un modelo de PIC en especial. Si no lo encuentra, devuelve
52 FALSE}
53 begin
54 Result := true;
55 pic.MaxFlash := 0; //inicia valor
56 pic.MaxFreq := 0;
57 pic.DisableAllRAM;
58 pic.Model := model;
59 case Upcase(model) of
60 'DEFAULT': begin //Configuración por defecto. Se toma la del PIC16F84
61 pic.MaxFreq:=20000000; //Pero a 20MHz
62 pic.NumBanks:=2;
63 pic.NumPages:=1; pic.MaxFlash:=1024; //banco 0 implementado parcialmente
64 pic.SetMappRAMCom('080-080:bnk0, 082-084:bnk0, 08A-08B:bnk0');
65 pic.SetStatRAMCom('000-00B:SFR, 00C-04F:GPR');
66 pic.SetStatRAMCom('080-08B:SFR, 08C-0CF:GPR');
67 pic.SetMappRAMCom('08C-0CF:bnk0');
68 //Hardware definition
69 pic.Npins := 18;
70 pic.SetUnimpBITS('003:3F,083:3F,005:1F,085:1F,00A:1F,08A:1F');
71 pic.ram[$005].name := 'PORTA'; //Pone un nombre, para que MapRAMtoPIN, asigne nombre a los pines
72 pic.MapRAMtoPIN('005:0-17,1-18,2-1,3-2,4-3');
73 pic.ram[$006].name := 'PORTB'; //Pone un nombre, para que MapRAMtoPIN, asigne nombre a los pines
74 pic.MapRAMtoPIN('006:0-6,1-7,2-8,3-9,4-10,5-11,6-12,7-13');
75 PIC.SetPin(5, 'VSS', pptGND);
76 PIC.SetPin(14, 'VDD', pptVcc);
77 end;
78 'PIC16C63',
79 'PIC16CR63':begin
80 pic.MaxFreq:=20000000;
81 pic.Npins := 28;
82 pic.NumBanks:=2;
83 pic.NumPages:=2; pic.MaxFlash:=4096;
84 pic.SetMappRAMCom('080-080:bnk0, 082-084:bnk0, 08A-08B:bnk0');
85 pic.SetStatRAMCom('000-01D:SFR, 020-07F:GPR');
86 pic.SetStatRAMCom('080-08E:SFR, 092-094:SFR, 098-099:SFR, 0A0-0FF:GPR');
87 end;
88 'PIC16C65',
89 'PIC16C65A',
90 'PIC16CR65': begin
91 pic.MaxFreq:=20000000;
92 pic.Npins := 40;
93 pic.NumBanks:=2;
94 pic.NumPages:=2; pic.MaxFlash:=4096;
95 pic.SetMappRAMCom('080-080:bnk0, 082-084:bnk0, 08A-08B:bnk0');
96 pic.SetStatRAMCom('000-01D:SFR, 020-07F:GPR');
97 pic.SetStatRAMCom('080-08E:SFR, 092-094:SFR, 098-099:SFR, 0A0-0FF:GPR');
98 end;
99 'PIC16F72': begin
100 pic.MaxFreq:=20000000;
101 pic.Npins := 28;
102 pic.NumBanks:=4; //los bancos 2 y 3 están reflejados
103 pic.NumPages:=1; pic.MaxFlash:=2048;
104 pic.SetMappRAMCom('080-080:bnk0, 082-084:bnk0, 08A-08B:bnk0');
105 pic.SetStatRAMCom('000-017:SFR, 01E-01F:SFR, 020-07F:GPR');
106 pic.SetStatRAMCom('080-094:SFR, 09F-09F:SFR, 0A0-0FF:GPR');
107 pic.SetStatRAMCom('100-10F:SFR, 120-17F:GPR');
108 pic.SetStatRAMCom('180-18C:SFR, 1A0-1FF:GPR');
109 pic.SetMappRAMCom('0C0-0FF:bnk0');
110 pic.SetMappRAMCom('120-17F:bnk0');
111 pic.SetMappRAMCom('1A0-1BF:bnk1, 1C0-1FF:bnk0');
112 end;
113 'PIC16F83',
114 'PIC16CR83': begin
115 pic.MaxFreq:=10000000;
116 pic.Npins := 18;
117 pic.NumBanks:=2; //los bancos 2 y 3 están reflejados
118 pic.NumPages:=1; pic.MaxFlash:=512; //banco 0 implementado parcialmente
119 pic.SetMappRAMCom('080-080:bnk0, 082-084:bnk0, 08A-08B:bnk0');
120 pic.SetStatRAMCom('000-00B:SFR, 00C-02F:GPR');
121 pic.SetStatRAMCom('080-08B:SFR, 08C-0AF:GPR');
122 pic.SetMappRAMCom('08C-0AF:bnk0');
123 end;
124 'PIC16F84',
125 'PIC16CR84': begin
126 pic.MaxFreq:=10000000;
127 pic.NumBanks:=2;
128 pic.NumPages:=1; pic.MaxFlash:=1024; //banco 0 implementado parcialmente
129 pic.SetMappRAMCom('080-080:bnk0, 082-084:bnk0, 08A-08B:bnk0');
130 pic.SetStatRAMCom('000-006:SFR, 008-00B:SFR, 00C-04F:GPR');
131 pic.SetStatRAMCom('080-086:SFR, 088-08B:SFR, 08C-0CF:GPR');
132 pic.SetMappRAMCom('08C-0CF:bnk0');
133 //Hardware definition
134 pic.Npins := 18;
135 pic.SetUnimpBITS('003:FF,083:3F,005:1F,085:1F,00A:1F,08A:1F');
136 pic.ram[$005].name := 'PORTA'; //Pone un nombre, para que MapRAMtoPIN, asigne nombre a los pines
137 pic.MapRAMtoPIN('005:0-17,1-18,2-1,3-2,4-3');
138 pic.ram[$006].name := 'PORTB'; //Pone un nombre, para que MapRAMtoPIN, asigne nombre a los pines
139 pic.MapRAMtoPIN('006:0-6,1-7,2-8,3-9,4-10,5-11,6-12,7-13');
140 PIC.SetPin(5, 'VSS', pptGND);
141 PIC.SetPin(14, 'VDD', pptVcc);
142 end;
143 'PIC16F84A': begin
144 pic.MaxFreq:=20000000;
145 pic.NumBanks:=2; //los bancos 2 y 3 están reflejados
146 pic.NumPages:=1; pic.MaxFlash:=1024; //banco 0 implementado parcialmente
147 pic.SetMappRAMCom('080-080:bnk0, 082-084:bnk0, 08A-08B:bnk0');
148 pic.SetStatRAMCom('000-006:SFR, 008-00B:SFR, 00C-04F:GPR');
149 pic.SetStatRAMCom('080-086:SFR, 088-08B:SFR, 08C-0CF:GPR');
150 pic.SetMappRAMCom('08C-0CF:bnk0');
151 //Hardware definition
152 pic.Npins := 18;
153 pic.SetUnimpBITS('003:3F,083:3F,005:1F,085:1F,00A:1F,08A:1F');
154 pic.ram[$005].name := 'PORTA'; //Pone un nombre, para que MapRAMtoPIN, asigne nombre a los pines
155 pic.MapRAMtoPIN('005:0-17,1-18,2-1,3-2,4-3');
156 pic.ram[$006].name := 'PORTB'; //Pone un nombre, para que MapRAMtoPIN, asigne nombre a los pines
157 pic.MapRAMtoPIN('006:0-6,1-7,2-8,3-9,4-10,5-11,6-12,7-13');
158 PIC.SetPin(5, 'VSS', pptGND);
159 PIC.SetPin(14, 'VDD', pptVcc);
160 end;
161 'PIC16F870': begin
162 pic.MaxFreq:=20000000;
163 pic.Npins := 28;
164 pic.NumBanks := 4; //tiene un bloque sin usar en el banco 1 y reflejado los bancos 2 y 3
165 pic.NumPages:=1; pic.MaxFlash:=2048;
166 pic.SetMappRAMCom('080-080:bnk0, 082-084:bnk0, 08A-08B:bnk0');
167 pic.SetMappRAMCom('100-100:bnk0, 102-104:bnk0, 10A-10B:bnk0');
168 pic.SetMappRAMCom('180-180:bnk0, 182-184:bnk0, 18A-18B:bnk0');
169 pic.SetMappRAMCom('101-101:bnk0');
170 pic.SetMappRAMCom('181-181:bnk1');
171
172 pic.SetStatRAMCom('000-012:SFR, 015-01A:SFR, 01E-01F:SFR, 020-07F:GPR');
173 pic.SetStatRAMCom('080-08E:SFR, 092-092:SFR, 098-099:SFR, 09E-09F:SFR, 0A0-0BF:GPR, 0F0-0FF:GPR');
174 pic.SetStatRAMCom('100-104:SFR, 106-106:SFR, 10A-10F:SFR, 120-17F:GPR');
175 pic.SetStatRAMCom('180-184:SFR, 186-186:SFR, 18A-18F:SFR, 1A0-1BF:GPR, 1F0-1FF:GPR');
176 //Direcciones mapeadas
177 pic.SetMappRAMCom('0F0-1FF:bnk0');
178 pic.SetMappRAMCom('120-17F:bnk0');
179 pic.SetMappRAMCom('1A0-1BF:bnk1, 1F0-1FF:bnk0');
180 end;
181 'PIC16F871': begin
182 pic.MaxFreq:=20000000;
183 pic.Npins := 40;
184 pic.NumBanks := 4; //tiene un bloque sin usar en el banco 1 y reflejado los bancos 2 y 3
185 pic.NumPages:=1; pic.MaxFlash:=2048;
186 pic.SetMappRAMCom('080-080:bnk0, 082-084:bnk0, 08A-08B:bnk0');
187 pic.SetMappRAMCom('100-100:bnk0, 102-104:bnk0, 10A-10B:bnk0');
188 pic.SetMappRAMCom('180-180:bnk0, 182-184:bnk0, 18A-18B:bnk0');
189 pic.SetMappRAMCom('101-101:bnk0');
190 pic.SetMappRAMCom('181-181:bnk1');
191
192 pic.SetStatRAMCom('000-012:SFR, 015-01A:SFR, 01E-01F:SFR, 020-07F:GPR');
193 pic.SetStatRAMCom('080-08E:SFR, 092-092:SFR, 098-099:SFR, 09E-09F:SFR, 0A0-0BF:GPR, 0F0-0FF:GPR');
194 pic.SetStatRAMCom('100-104:SFR, 106-106:SFR, 10A-10F:SFR, 120-17F:GPR');
195 pic.SetStatRAMCom('180-184:SFR, 186-186:SFR, 18A-18F:SFR, 1A0-1BF:GPR, 1F0-1FF:GPR');
196 //Direcciones mapeadas
197 pic.SetMappRAMCom('0F0-1FF:bnk0');
198 pic.SetMappRAMCom('120-17F:bnk0');
199 pic.SetMappRAMCom('1A0-1BF:bnk1, 1F0-1FF:bnk0');
200 end;
201 'PIC16F872': begin
202 pic.MaxFreq:=20000000;
203 pic.Npins := 28;
204 pic.NumBanks := 2; //tiene un bloque sin usar en el banco 1 y reflejado los bancos 2 y 3
205 pic.NumPages:=1; pic.MaxFlash:=2048;
206 pic.SetMappRAMCom('080-080:bnk0, 082-084:bnk0, 08A-08B:bnk0');
207 pic.SetMappRAMCom('100-100:bnk0, 102-104:bnk0, 10A-10B:bnk0');
208 pic.SetMappRAMCom('180-180:bnk0, 182-184:bnk0, 18A-18B:bnk0');
209 pic.SetMappRAMCom('101-101:bnk0');
210 pic.SetMappRAMCom('181-181:bnk1');
211
212 pic.SetStatRAMCom('000-007:SFR, 00A-017:SFR, 01E-01F:SFR, 020-07F:GPR');
213 pic.SetStatRAMCom('080-087:SFR, 08A-08E:SFR, 091-094:SFR, 09E-09F:SFR, 0A0-0BF:GPR, 0F0-0FF:GPR');
214 pic.SetStatRAMCom('100-104:SFR, 106-106:SFR, 10A-10F:SFR, 120-17F:GPR');
215 pic.SetStatRAMCom('180-184:SFR, 186-186:SFR, 18A-18F:SFR, 1A0-1BF:GPR, 1F0-1FF:GPR');
216 //Direcciones mapeadas
217 pic.SetMappRAMCom('0F0-1FF:bnk0');
218 pic.SetMappRAMCom('120-17F:bnk0');
219 pic.SetMappRAMCom('1A0-1BF:bnk1, 1F0-1FF:bnk0');
220 end;
221 'PIC16F873',
222 'PIC16F873A': begin
223 pic.MaxFreq:=20000000;
224 pic.Npins := 28;
225 pic.NumBanks:=4; //los bancos 2 y 3 están reflejados
226 pic.NumPages:=2; pic.MaxFlash:=4096;
227 pic.SetMappRAMCom('080-080:bnk0, 082-084:bnk0, 08A-08B:bnk0');
228 pic.SetMappRAMCom('100-100:bnk0, 102-104:bnk0, 10A-10B:bnk0');
229 pic.SetMappRAMCom('180-180:bnk0, 182-184:bnk0, 18A-18B:bnk0');
230 pic.SetMappRAMCom('101-101:bnk0');
231 pic.SetMappRAMCom('181-181:bnk1');
232
233 pic.SetStatRAMCom('000-01F:SFR, 020-07F:GPR');
234 pic.SetStatRAMCom('080-08E:SFR, 091-094:SFR, 098-099:SFR, 09E-09F:SFR, 0A0-0FF:GPR');
235 pic.SetStatRAMCom('100-104:SFR, 106-106:SFR, 10A-10F:SFR, 120-17F:GPR');
236 pic.SetStatRAMCom('180-184:SFR, 186-186:SFR, 18A-18F:SFR, 1A0-1FF:GPR');
237 pic.SetMappRAMCom('120-17F:bnk0, 1A0-1FF:bnk1');
238 pic.ram[$005].name := 'PORTA'; //Pone un nombre, para que MapRAMtoPIN, asigne nombre a los pines
239 pic.MapRAMtoPIN('005:0-2,1-3,2-4,3-5,4-6,5-7');
240 pic.ram[$006].name := 'PORTB'; //Pone un nombre, para que MapRAMtoPIN, asigne nombre a los pines
241 pic.MapRAMtoPIN('006:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28');
242 pic.ram[$007].name := 'PORTC'; //Pone un nombre, para que MapRAMtoPIN, asigne nombre a los pines
243 pic.MapRAMtoPIN('007:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18');
244 PIC.SetPin(8, 'VSS', pptGND);
245 PIC.SetPin(19, 'VSS', pptGND);
246 PIC.SetPin(20, 'VDD', pptVcc);
247 end;
248 'PIC16F874',
249 'PIC16F874A': begin
250 pic.MaxFreq:=20000000;
251 pic.Npins := 40;
252 pic.NumBanks:=4; //los bancos 2 y 3 están reflejados
253 pic.NumPages:=2; pic.MaxFlash:=4096;
254 pic.SetMappRAMCom('080-080:bnk0, 082-084:bnk0, 08A-08B:bnk0');
255 pic.SetMappRAMCom('100-100:bnk0, 102-104:bnk0, 10A-10B:bnk0');
256 pic.SetMappRAMCom('180-180:bnk0, 182-184:bnk0, 18A-18B:bnk0');
257 pic.SetMappRAMCom('101-101:bnk0');
258 pic.SetMappRAMCom('181-181:bnk1');
259
260 pic.SetStatRAMCom('000-01F:SFR, 020-07F:GPR');
261 pic.SetStatRAMCom('080-08E:SFR, 091-094:SFR, 098-099:SFR, 09E-09F:SFR, 0A0-0FF:GPR');
262 pic.SetStatRAMCom('100-104:SFR, 106-106:SFR, 10A-10F:SFR, 120-17F:GPR');
263 pic.SetStatRAMCom('180-184:SFR, 186-186:SFR, 18A-18F:SFR, 1A0-1FF:GPR');
264 pic.SetMappRAMCom('120-17F:bnk0, 1A0-1FF:bnk1');
265 end;
266 'PIC16F876',
267 'PIC16F876A': begin
268 pic.MaxFreq:=20000000;
269 pic.Npins := 28;
270 pic.NumBanks:=4;
271 pic.NumPages:=4; pic.MaxFlash:=8192;
272 pic.SetMappRAMCom('080-080:bnk0, 082-084:bnk0, 08A-08B:bnk0');
273 pic.SetMappRAMCom('100-100:bnk0, 102-104:bnk0, 10A-10B:bnk0');
274 pic.SetMappRAMCom('180-180:bnk0, 182-184:bnk0, 18A-18B:bnk0');
275 pic.SetMappRAMCom('101-101:bnk0');
276 pic.SetMappRAMCom('181-181:bnk1');
277
278 pic.SetStatRAMCom('000-01F:SFR, 020-07F:GPR');
279 pic.SetStatRAMCom('080-08E:SFR, 091-094:SFR, 098-099:SFR, 09E-09F:SFR, 0A0-0FF:GPR');
280 pic.SetStatRAMCom('100-104:SFR, 106-106:SFR, 10A-10F:SFR, 110-17F:GPR');
281 pic.SetStatRAMCom('180-184:SFR, 186-186:SFR, 18A-18F:SFR, 190-1FF:GPR');
282 pic.SetMappRAMCom('0F0-0FF:bnk0, 170-17F:bnk0, 1F0-1FF:bnk0');
283 pic.ram[$005].name := 'PORTA'; //Pone un nombre, para que MapRAMtoPIN, asigne nombre a los pines
284 pic.MapRAMtoPIN('005:0-2,1-3,2-4,3-5,4-6,5-7');
285 pic.ram[$006].name := 'PORTB'; //Pone un nombre, para que MapRAMtoPIN, asigne nombre a los pines
286 pic.MapRAMtoPIN('006:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28');
287 pic.ram[$007].name := 'PORTC'; //Pone un nombre, para que MapRAMtoPIN, asigne nombre a los pines
288 pic.MapRAMtoPIN('007:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18');
289 PIC.SetPin(8, 'VSS', pptGND);
290 PIC.SetPin(19, 'VSS', pptGND);
291 PIC.SetPin(20, 'VDD', pptVcc);
292 end;
293 'PIC16F877',
294 'PIC16F877A': begin
295 pic.MaxFreq:=20000000;
296 pic.NumBanks:=4;
297 pic.NumPages:=4; pic.MaxFlash:=8192;
298 pic.SetMappRAMCom('080-080:bnk0, 082-084:bnk0, 08A-08B:bnk0');
299 pic.SetMappRAMCom('100-100:bnk0, 102-104:bnk0, 10A-10B:bnk0');
300 pic.SetMappRAMCom('180-180:bnk0, 182-184:bnk0, 18A-18B:bnk0');
301 pic.SetMappRAMCom('101-101:bnk0');
302 pic.SetMappRAMCom('181-181:bnk1');
303
304 pic.SetStatRAMCom('000-01F:SFR, 020-07F:GPR');
305 if Upcase(model) = 'PIC16F877' then
306 pic.SetStatRAMCom('080-08E:SFR, 091-094:SFR, 098-099:SFR, 09E-09F:SFR, 0A0-0FF:GPR')
307 else
308 pic.SetStatRAMCom('080-08E:SFR, 091-094:SFR, 098-099:SFR, 09C-09F:SFR, 0A0-0FF:GPR');
309 pic.SetStatRAMCom('100-104:SFR, 106-106:SFR, 10A-10F:SFR, 110-17F:GPR');
310 pic.SetStatRAMCom('180-184:SFR, 186-186:SFR, 18A-18F:SFR, 190-1FF:GPR');
311 pic.SetMappRAMCom('0F0-0FF:bnk0, 170-17F:bnk0, 1F0-1FF:bnk0');
312 //Hardware definition
313 pic.Npins := 40;
314 pic.SetUnimpBITS('005:3F,009:03,00A:1F,00D:59,010:3F,012:7F,017:3F,01D:3F');
315 if Upcase(model) = 'PIC16F877' then
316 pic.SetUnimpBITS('085:3F,089:F7,08A:1F,08D:59,08E:03,09F:8F')
317 else
318 pic.SetUnimpBITS('085:3F,089:F7,08A:1F,08D:59,08E:03,09D:EF,09F:CF');
319 PIC.SetUnimpBITS('10A:1F,10E:3F,10F:1F,18A:1F,18C:8F');
320 pic.ram[$005].name := 'PORTA'; //Pone un nombre, para que MapRAMtoPIN, asigne nombre a los pines
321 pic.MapRAMtoPIN('005:0-2,1-3,2-4,3-5,4-6,5-7');
322 pic.ram[$006].name := 'PORTB'; //Pone un nombre, para que MapRAMtoPIN, asigne nombre a los pines
323 pic.MapRAMtoPIN('006:0-33,1-34,2-35,3-36,4-37,5-38,6-39,7-40');
324 pic.ram[$007].name := 'PORTC'; //Pone un nombre, para que MapRAMtoPIN, asigne nombre a los pines
325 pic.MapRAMtoPIN('007:0-15,1-16,2-17,3-18,4-23,5-24,6-25,7-26');
326 pic.ram[$008].name := 'PORTD'; //Pone un nombre, para que MapRAMtoPIN, asigne nombre a los pines
327 pic.MapRAMtoPIN('008:0-19,1-20,2-21,3-22,4-27,5-28,6-29,7-30');
328 pic.ram[$009].name := 'PORTE'; //Pone un nombre, para que MapRAMtoPIN, asigne nombre a los pines
329 pic.MapRAMtoPIN('009:0-8,1-9,2-10');
330 PIC.SetPin(12, 'VSS', pptGND);
331 PIC.SetPin(31, 'VSS', pptGND);
332 PIC.SetPin(11, 'VDD', pptVcc);
333 PIC.SetPin(12, 'VDD', pptVcc);
334 end;
335 'PIC16F887': begin
336 pic.MaxFreq:=20000000;
337 pic.Npins := 40;
338 pic.NumBanks:=4;
339 pic.NumPages:=4; pic.MaxFlash:=8192;
340 pic.SetMappRAMCom('080-080:bnk0, 082-084:bnk0, 08A-08B:bnk0');
341 pic.SetMappRAMCom('100-100:bnk0, 102-104:bnk0, 10A-10B:bnk0');
342 pic.SetMappRAMCom('180-180:bnk0, 182-184:bnk0, 18A-18B:bnk0');
343 pic.SetMappRAMCom('101-101:bnk0');
344 pic.SetMappRAMCom('181-181:bnk1');
345
346 pic.SetStatRAMCom('000-01F:SFR, 020-07F:GPR');
347 pic.SetStatRAMCom('080-08E:SFR, 091-094:SFR, 098-099:SFR, 09E-09F:SFR, 0A0-0FF:GPR');
348 pic.SetStatRAMCom('100-104:SFR, 106-106:SFR, 10A-10F:SFR, 110-17F:GPR');
349 pic.SetStatRAMCom('180-184:SFR, 186-186:SFR, 18A-18F:SFR, 190-1FF:GPR');
350 pic.SetMappRAMCom('0F0-0FF:bnk0, 170-17F:bnk0, 1F0-1FF:bnk0');
351 //Falta definir bits no implementados.
352 end;
353 'PIC16F627A': begin
354 pic.MaxFreq:=20000000;
355 pic.Npins := 16;
356 pic.NumBanks:=4;
357 pic.NumPages:=1; pic.MaxFlash:=1024; //banco 0 implementado parcialmente
358
359 pic.SetMappRAMCom('080-080:bnk0, 082-084:bnk0, 08A-08B:bnk0');
360 pic.SetMappRAMCom('100-100:bnk0, 102-104:bnk0, 10A-10B:bnk0');
361 pic.SetMappRAMCom('180-180:bnk0, 182-184:bnk0, 18A-18B:bnk0');
362 pic.SetMappRAMCom('101-101:bnk0');
363 pic.SetMappRAMCom('181-181:bnk1');
364
365 pic.SetStatRAMCom('000-006:SFR, 00A-00C:SFR, 00E-012:SFR, 015-01A:SFR, 01F-01F:SFR, 020-07F:GPR');
366 pic.SetStatRAMCom('080-086:SFR, 08A-08C:SFR, 08E-08E:SFR, 092-092:SFR, 098-09D:SFR, 09F-09F:SFR, 0A0-0FF:GPR');
367 pic.SetStatRAMCom('100-104:SFR, 106-106:SFR, 10A-10B:SFR, 120-14F:GPR, 170-17F:GPR');
368 pic.SetStatRAMCom('180-184:SFR, 186-186:SFR, 18A-18B:SFR, 1F0-1FF:GPR');
369 pic.SetMappRAMCom('0F0-0FF:bnk0, 170-17F:bnk0, 1F0-1FF:bnk0');
370 end;
371 'PIC16F628A': begin
372 pic.MaxFreq:=20000000;
373 pic.Npins := 16;
374 pic.NumBanks:=4;
375 pic.NumPages:=1; pic.MaxFlash:=2048;
376
377 pic.SetMappRAMCom('080-080:bnk0, 082-084:bnk0, 08A-08B:bnk0');
378 pic.SetMappRAMCom('100-100:bnk0, 102-104:bnk0, 10A-10B:bnk0');
379 pic.SetMappRAMCom('180-180:bnk0, 182-184:bnk0, 18A-18B:bnk0');
380 pic.SetMappRAMCom('101-101:bnk0');
381 pic.SetMappRAMCom('181-181:bnk1');
382
383 pic.SetStatRAMCom('000-006:SFR, 00A-00C:SFR, 00E-012:SFR, 015-01A:SFR, 01F-01F:SFR, 020-07F:GPR');
384 pic.SetStatRAMCom('080-086:SFR, 08A-08C:SFR, 08E-08E:SFR, 092-092:SFR, 098-09D:SFR, 09F-09F:SFR, 0A0-0FF:GPR');
385 pic.SetStatRAMCom('100-104:SFR, 106-106:SFR, 10A-10B:SFR, 120-14F:GPR, 170-17F:GPR');
386 pic.SetStatRAMCom('180-184:SFR, 186-186:SFR, 18A-18B:SFR, 1F0-1FF:GPR');
387 pic.SetMappRAMCom('0F0-0FF:bnk0, 170-17F:bnk0, 1F0-1FF:bnk0');
388 end;
389 'PIC16F648A': begin
390 pic.MaxFreq:=20000000;
391 pic.Npins := 16;
392 pic.NumBanks:=4;
393 pic.NumPages:=2; pic.MaxFlash:=4096;
394
395 pic.SetMappRAMCom('080-080:bnk0, 082-084:bnk0, 08A-08B:bnk0');
396 pic.SetMappRAMCom('100-100:bnk0, 102-104:bnk0, 10A-10B:bnk0');
397 pic.SetMappRAMCom('180-180:bnk0, 182-184:bnk0, 18A-18B:bnk0');
398 pic.SetMappRAMCom('101-101:bnk0');
399 pic.SetMappRAMCom('181-181:bnk1');
400
401 pic.SetStatRAMCom('000-006:SFR, 00A-00C:SFR, 00E-012:SFR, 015-01A:SFR, 01F-01F:SFR, 020-07F:GPR');
402 pic.SetStatRAMCom('080-086:SFR, 08A-08C:SFR, 08E-08E:SFR, 092-092:SFR, 098-09D:SFR, 09F-09F:SFR, 0A0-0FF:GPR');
403 pic.SetStatRAMCom('100-104:SFR, 106-106:SFR, 10A-10B:SFR, 120-17F:GPR');
404 pic.SetStatRAMCom('180-184:SFR, 186-186:SFR, 18A-18B:SFR, 1F0-1FF:GPR');
405 pic.SetMappRAMCom('0F0-0FF:bnk0, 170-17F:bnk0, 1F0-1FF:bnk0');
406 end
407 else
408 exit(false);
409 end;
410 end;
411
412 end.
413
414