1 /***************************************************************************
2 * Copyright (C) 2003-2004 by David Saxton *
3 * david@bluehaze.org *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 ***************************************************************************/
10
11 #include "micropackage.h"
12 #include "picinfo16bit.h"
13
14 #include <KLocalizedString>
15 // #include <k3staticdeleter.h>
16
17 #include <QGlobalStatic>
18
19 // PicAsm16bit *PicAsm16bit::m_self = 0;
20 // static K3StaticDeleter<PicAsm16bit> picAsm16BitStaticDeleter;
21
22 Q_GLOBAL_STATIC(PicAsm16bit, globalPicAsm16bit);
23
self()24 PicAsm16bit *PicAsm16bit::self()
25 {
26 // if ( !m_self )
27 // picAsm16BitStaticDeleter.setObject( m_self, new PicAsm16bit() );
28 // return m_self;
29 return globalPicAsm16bit;
30 }
31
PicInfo16bit()32 PicInfo16bit::PicInfo16bit()
33 : PicInfo()
34 {
35 }
36
37
~PicInfo16bit()38 PicInfo16bit::~PicInfo16bit()
39 {
40 }
41
42
PicAsm16bit()43 PicAsm16bit::PicAsm16bit()
44 : AsmInfo()
45 {
46 // 16 bit Asm instructions for PICs
47
48 // Byte-orientated file register operations
49 addInstruction( "ADDWF", nullptr, "000111dfffffff" );
50 addInstruction( "ANDWF", nullptr, "000101dfffffff" );
51 addInstruction( "CLRF", nullptr, "0000011fffffff" );
52 addInstruction( "CLRW", nullptr, "0000010xxxxxxx" );
53 addInstruction( "COMF", nullptr, "001001dfffffff" );
54 addInstruction( "DECF", nullptr, "000011dfffffff" );
55 addInstruction( "DECFSZ", nullptr, "001011dfffffff" );
56 addInstruction( "INCF", nullptr, "001010dfffffff" );
57 addInstruction( "INCFSZ", nullptr, "001111dfffffff" );
58 addInstruction( "IORWF", nullptr, "000100dfffffff" );
59 addInstruction( "MOVF", nullptr, "001000dfffffff" );
60 addInstruction( "MOVWF", nullptr, "0000001fffffff" );
61 addInstruction( "NOP", nullptr, "0000000xx00000" );
62 addInstruction( "RLF", nullptr, "001101dfffffff" );
63 addInstruction( "RRF", nullptr, "001100dfffffff" );
64 addInstruction( "SUBWF", nullptr, "000010dfffffff" );
65 addInstruction( "SWAPF", nullptr, "001110dfffffff" );
66 addInstruction( "XORWF", nullptr, "000110dfffffff" );
67
68 // Bit-orientated file register operations
69 addInstruction( "BCF", nullptr, "0100bbbfffffff" );
70 addInstruction( "BSF", nullptr, "0101bbbfffffff" );
71 addInstruction( "BTFSC", nullptr, "0110bbbfffffff" );
72 addInstruction( "BTFSS", nullptr, "0111bbbfffffff" );
73
74 // Literal and control operations
75 addInstruction( "ADDLW", nullptr, "11111xkkkkkkkk" );
76 addInstruction( "ANDLW", nullptr, "111001kkkkkkkk" );
77 addInstruction( "CALL", nullptr, "100kkkkkkkkkkk" );
78 addInstruction( "CLRWDT", nullptr, "00000001100100" );
79 addInstruction( "GOTO", nullptr, "101kkkkkkkkkkk" );
80 addInstruction( "IORLW", nullptr, "111000kkkkkkkk" );
81 addInstruction( "MOVLW", nullptr, "1100xxkkkkkkkk" );
82 addInstruction( "RETFIE", nullptr, "00000000001001" );
83 addInstruction( "RETLW", nullptr, "1101xxkkkkkkkk" );
84 addInstruction( "RETURN", nullptr, "00000000001000" );
85 addInstruction( "SLEEP", nullptr, "00000000000011" );
86 addInstruction( "SUBLW", nullptr, "11110xkkkkkkkk" );
87 addInstruction( "XORLW", nullptr, "111010kkkkkkkk" );
88 }
89
90
PicInfo17C7xx()91 PicInfo17C7xx::PicInfo17C7xx()
92 : PicInfo16bit()
93 {
94 m_id = "P17C7xx";
95 }
96
~PicInfo17C7xx()97 PicInfo17C7xx::~PicInfo17C7xx()
98 {
99 }
100
PicInfo17C75x()101 PicInfo17C75x::PicInfo17C75x()
102 : PicInfo17C7xx()
103 {
104 m_id = "P17C75x";
105 }
106
~PicInfo17C75x()107 PicInfo17C75x::~PicInfo17C75x()
108 {
109 }
110
PicInfo17C752()111 PicInfo17C752::PicInfo17C752()
112 : PicInfo17C75x()
113 {
114 m_id = "P17C752";
115 }
116
~PicInfo17C752()117 PicInfo17C752::~PicInfo17C752()
118 {
119 }
120
PicInfo17C756()121 PicInfo17C756::PicInfo17C756()
122 : PicInfo17C75x()
123 {
124 m_id = "P17C756";
125 }
126
~PicInfo17C756()127 PicInfo17C756::~PicInfo17C756()
128 {
129 }
130
PicInfo17C756A()131 PicInfo17C756A::PicInfo17C756A()
132 : PicInfo17C75x()
133 {
134 m_id = "P17C756A";
135 }
136
~PicInfo17C756A()137 PicInfo17C756A::~PicInfo17C756A()
138 {
139 }
140
PicInfo17C762()141 PicInfo17C762::PicInfo17C762()
142 : PicInfo17C75x()
143 {
144 m_id = "P17C762";
145 }
146
~PicInfo17C762()147 PicInfo17C762::~PicInfo17C762()
148 {
149 }
150
PicInfo17C766()151 PicInfo17C766::PicInfo17C766()
152 : PicInfo17C75x()
153 {
154 m_id = "P17C766";
155 }
156
~PicInfo17C766()157 PicInfo17C766::~PicInfo17C766()
158 {
159 }
160
PicInfo18Cxx2()161 PicInfo18Cxx2::PicInfo18Cxx2()
162 : PicInfo16bit()
163 {
164 m_id = "P18Cxx2";
165 }
166
~PicInfo18Cxx2()167 PicInfo18Cxx2::~PicInfo18Cxx2()
168 {
169 }
170
PicInfo18C2x2()171 PicInfo18C2x2::PicInfo18C2x2()
172 : PicInfo16bit()
173 {
174 m_id = "P18C2x2";
175 }
176
~PicInfo18C2x2()177 PicInfo18C2x2::~PicInfo18C2x2()
178 {
179 }
180
PicInfo18C242()181 PicInfo18C242::PicInfo18C242()
182 : PicInfo18C2x2()
183 {
184 m_id = "P18C242";
185 }
186
187
~PicInfo18C242()188 PicInfo18C242::~PicInfo18C242()
189 {
190 }
191
PicInfo18C252()192 PicInfo18C252::PicInfo18C252()
193 : PicInfo18C242()
194 {
195 m_id = "P18C252";
196 }
197
~PicInfo18C252()198 PicInfo18C252::~PicInfo18C252()
199 {
200 }
201
PicInfo18C4x2()202 PicInfo18C4x2::PicInfo18C4x2()
203 : PicInfo16bit()
204 {
205 m_id = QString::fromLatin1("P18C4x2");
206
207 delete m_package;
208 m_package = new MicroPackage(40);
209
210 m_package->assignPin( 2, PicPin::type_bidir, "RA0", "PORTA", 0 );
211 m_package->assignPin( 3, PicPin::type_bidir, "RA1", "PORTA", 1 );
212 m_package->assignPin( 4, PicPin::type_bidir, "RA2", "PORTA", 2 );
213 m_package->assignPin( 5, PicPin::type_bidir, "RA3", "PORTA", 3 );
214 m_package->assignPin( 6, PicPin::type_open, "RA4", "PORTA", 4 );
215 m_package->assignPin( 7, PicPin::type_bidir, "RA5", "PORTB", 5 );
216
217 m_package->assignPin( 33, PicPin::type_bidir, "RB0", "PORTB", 0 );
218 m_package->assignPin( 34, PicPin::type_bidir, "RB1", "PORTB", 1 );
219 m_package->assignPin( 35, PicPin::type_bidir, "RB2", "PORTB", 2 );
220 m_package->assignPin( 36, PicPin::type_bidir, "RB3", "PORTB", 3 );
221 m_package->assignPin( 37, PicPin::type_bidir, "RB4", "PORTB", 4 );
222 m_package->assignPin( 38, PicPin::type_bidir, "RB5", "PORTB", 5 );
223 m_package->assignPin( 39, PicPin::type_bidir, "RB6", "PORTB", 6 );
224 m_package->assignPin( 40, PicPin::type_bidir, "RB7", "PORTB", 7 );
225
226 m_package->assignPin( 15, PicPin::type_bidir, "RC0", "PORTC", 0 );
227 m_package->assignPin( 16, PicPin::type_bidir, "RC1", "PORTC", 1 );
228 m_package->assignPin( 17, PicPin::type_bidir, "RC2", "PORTC", 2 );
229 m_package->assignPin( 18, PicPin::type_bidir, "RC3", "PORTC", 3 );
230 m_package->assignPin( 23, PicPin::type_bidir, "RC4", "PORTC", 4 );
231 m_package->assignPin( 24, PicPin::type_bidir, "RC5", "PORTC", 5 );
232 m_package->assignPin( 25, PicPin::type_bidir, "RC6", "PORTC", 6 );
233 m_package->assignPin( 26, PicPin::type_bidir, "RC7", "PORTC", 7 );
234
235 m_package->assignPin( 19, PicPin::type_bidir, "RD0", "PORTD", 0 );
236 m_package->assignPin( 20, PicPin::type_bidir, "RD1", "PORTD", 1 );
237 m_package->assignPin( 21, PicPin::type_bidir, "RD2", "PORTD", 2 );
238 m_package->assignPin( 22, PicPin::type_bidir, "RD3", "PORTD", 3 );
239 m_package->assignPin( 27, PicPin::type_bidir, "RD4", "PORTD", 4 );
240 m_package->assignPin( 28, PicPin::type_bidir, "RD5", "PORTD", 5 );
241 m_package->assignPin( 29, PicPin::type_bidir, "RD6", "PORTD", 6 );
242 m_package->assignPin( 30, PicPin::type_bidir, "RD7", "PORTD", 7 );
243
244 m_package->assignPin( 8, PicPin::type_bidir, "RE0", "PORTE", 0 );
245 m_package->assignPin( 9, PicPin::type_bidir, "RE1", "PORTE", 1 );
246 m_package->assignPin( 10, PicPin::type_bidir, "RE2", "PORTE", 2 );
247
248 m_package->assignPin( 1, PicPin::type_mclr, "MCLR" );
249 m_package->assignPin( 11, PicPin::type_vdd, "VDD" );
250 m_package->assignPin( 12, PicPin::type_vss, "VSS" );
251 m_package->assignPin( 13, PicPin::type_osc, "OSC1" );
252 m_package->assignPin( 14, PicPin::type_osc, "OSC2" );
253 m_package->assignPin( 31, PicPin::type_vss, "VSS" );
254 m_package->assignPin( 32, PicPin::type_vdd, "VDD" );
255 }
256
~PicInfo18C4x2()257 PicInfo18C4x2::~PicInfo18C4x2()
258 {
259 delete m_package;
260 m_package = nullptr;
261 }
262
PicInfo18C442()263 PicInfo18C442::PicInfo18C442()
264 : PicInfo18C4x2()
265 {
266 m_id = QString::fromLatin1("P18C442");
267 }
268
~PicInfo18C442()269 PicInfo18C442::~PicInfo18C442()
270 {
271 }
272
PicInfo18C452()273 PicInfo18C452::PicInfo18C452()
274 : PicInfo18C442()
275 {
276 m_id = QString::fromLatin1("P18C452");
277 }
278
~PicInfo18C452()279 PicInfo18C452::~PicInfo18C452()
280 {
281 }
282
PicInfo18F442()283 PicInfo18F442::PicInfo18F442()
284 : PicInfo18C442()
285 {
286 m_id = QString::fromLatin1("P18F442");
287 }
288
~PicInfo18F442()289 PicInfo18F442::~PicInfo18F442()
290 {
291 }
292
PicInfo18F248()293 PicInfo18F248::PicInfo18F248()
294 : PicInfo18F442()
295 {
296 m_id = QString::fromLatin1("P18F248");
297 }
298
~PicInfo18F248()299 PicInfo18F248::~PicInfo18F248()
300 {
301 }
302
PicInfo18F452()303 PicInfo18F452::PicInfo18F452()
304 : PicInfo18F442()
305 {
306 m_id = QString::fromLatin1("P18F452");
307 }
308
~PicInfo18F452()309 PicInfo18F452::~PicInfo18F452()
310 {
311 }
312
PicInfo18Fxx20()313 PicInfo18Fxx20::PicInfo18Fxx20()
314 : PicInfo16bit()
315 {
316 m_id = QString::fromLatin1("P18Fxx20");
317 }
318
~PicInfo18Fxx20()319 PicInfo18Fxx20::~PicInfo18Fxx20()
320 {
321 }
322
PicInfo18F1220()323 PicInfo18F1220::PicInfo18F1220()
324 : PicInfo18Fxx20()
325 {
326 m_id = QString::fromLatin1("P18F1220");
327
328 delete m_package;
329 m_package = new MicroPackage(18);
330
331 m_package->assignPin( 1, PicPin::type_bidir, "RA0", "PORTA", 0 );
332 m_package->assignPin( 2, PicPin::type_bidir, "RA1", "PORTA", 1 );
333 m_package->assignPin( 6, PicPin::type_bidir, "RA2", "PORTA", 2 );
334 m_package->assignPin( 7, PicPin::type_bidir, "RA3", "PORTA", 3 );
335 m_package->assignPin( 3, PicPin::type_open, "RA4", "PORTA", 4 );
336 m_package->assignPin( 4, PicPin::type_open, "RA5", "PORTA", 5 );
337 m_package->assignPin( 15, PicPin::type_open, "RA6", "PORTA", 6 );
338 m_package->assignPin( 16, PicPin::type_open, "RA7", "PORTA", 7 );
339
340 m_package->assignPin( 8, PicPin::type_bidir, "RB0", "PORTB", 0 );
341 m_package->assignPin( 9, PicPin::type_bidir, "RB1", "PORTB", 1 );
342 m_package->assignPin( 17, PicPin::type_bidir, "RB2", "PORTB", 2 );
343 m_package->assignPin( 18, PicPin::type_bidir, "RB3", "PORTB", 3 );
344 m_package->assignPin( 10, PicPin::type_bidir, "RB4", "PORTB", 4 );
345 m_package->assignPin( 11, PicPin::type_bidir, "RB5", "PORTB", 5 );
346 m_package->assignPin( 12, PicPin::type_bidir, "RB6", "PORTB", 6 );
347 m_package->assignPin( 13, PicPin::type_bidir, "RB7", "PORTB", 7 );
348
349 m_package->assignPin( 5, PicPin::type_vss, "VSS" );
350 m_package->assignPin( 14, PicPin::type_vdd, "VDD" );
351 }
352
~PicInfo18F1220()353 PicInfo18F1220::~PicInfo18F1220()
354 {
355
356 }
357
PicInfo18F1320()358 PicInfo18F1320::PicInfo18F1320()
359 : PicInfo18F1220()
360 {
361 m_id = QString::fromLatin1("P18F1320");
362 }
363
~PicInfo18F1320()364 PicInfo18F1320::~PicInfo18F1320()
365 {
366 }
367
368