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