simulpic-2005-1-28/0040755000175200017520000000000010176345647012321 5ustar devadevasimulpic-2005-1-28/Copyright0100600000175200017520000000366510176072107014177 0ustar devadeva/* * Copyright (c) 2004 Deva Seetharam deva@alum.mit.edu * All rights reserved. * Copyright (c) 1996 Tommaso Cucinotta, Alessandro Evangelista, Luigi Rizzo * All rights reserved. * * Dip. di Ingegneria dell'Informazione, Universita of Pisa, * via Diotisalvi 2 -- 56126 Pisa. * email: simulpic@iet.unipi.it * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by * Tommaso Cucinotta, Alessandro Evangelista and Luigi Rizzo * 4. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ simulpic-2005-1-28/tfile.cc0100600000175200017520000001047710176072107013715 0ustar devadeva/* * Copyright (c) 2004 Deva Seetharam deva@alum.mit.edu * All rights reserved. * Copyright (c) 1996 Tommaso Cucinotta, Alessandro Evangelista, Luigi Rizzo * All rights reserved. * * Dip. di Ingegneria dell'Informazione, Universita of Pisa, * via Diotisalvi 2 -- 56126 Pisa. * email: simulpic@iet.unipi.it * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by * Tommaso Cucinotta, Alessandro Evangelista and Luigi Rizzo * 4. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /* * tfile.cc */ #include "tfile.h" #include #include TByte TFile::Ascii_To_Num(char c) { if(c >= '0' && c <= '9') return ((TByte) c - '0'); if(c >= 'A' && c <= 'F') return ((TByte) c - ('A' - 10)); if(c >= 'a' && c <= 'f') return ((TByte) c - ('a' - 10)); return(0xFF); } TByte TFile::Hex_Byte(char* s) { return (Ascii_To_Num(s[0]) << 4) | Ascii_To_Num(s[1]); } TWord TFile::Hex_Word(char* s) { return (Hex_Byte(s) << 8) + Hex_Byte(s + 2); } /* Chiudere il file ... */ TError TFile::Load_File(TString filename, TWord* external_buffer, TBool& WDT_Fuse) { FILE* file_pointer; char file_buffer[256]; char* fb = NULL; TByte cnt, check; TWord pc; TByte Hi, Low; for (int i=0; i < ALLMEM_SIZE; i++) external_buffer[i]=0; if ((file_pointer = fopen(filename, "rb")) == NULL) return CANNOT_OPEN_FILE; do { do { if(fgets(file_buffer, sizeof(file_buffer)-1, file_pointer) == NULL) { fclose(file_pointer); return UNEXPECTED_EOF; } if(file_buffer[0] != ':') continue; if (strlen(file_buffer) < 10) { fclose(file_pointer); return UNEXPECTED_EOLN; } Low = Hex_Byte(&file_buffer[7]); } while( Low!=0 && Low!=1); if(Low==1) { fclose(file_pointer); return NO_ERROR; /* End of object file */ } cnt = Hex_Byte(&file_buffer[1]); pc = Hex_Word(&file_buffer[3]); if((cnt & 1) != 0 || (pc & 1) != 0) { fclose(file_pointer); return ODD_LEN_ADDR; } check = cnt + (TByte) (pc >> 8) + (TByte) (pc & 0xFF); cnt >>=1; pc >>=1; fb = &file_buffer[9]; do { Low = Hex_Byte(fb); check += Low; fb += 2; Hi = Hex_Byte(fb); check += Hi; fb += 2; if(--cnt == 0) { if(((0x100 - (check & 0xff)) & 0xff) != Hex_Byte(fb)) { fclose(file_pointer); return CHECKSUM; } fb = NULL; } if (pc==0x2007) WDT_Fuse=((Low >> 2) & 0x01); else if (pc < ALLMEM_SIZE) external_buffer[pc] = Low | ((Hi & 0x3F) << 8); else printf("--- Warning: mem[0x%04x]= %04x\n", pc, Low | ((Hi & 0x3F) << 8) ); pc++; } while(fb != NULL); } while(TRUE); }; simulpic-2005-1-28/simulpic.h0100644000175200017520000000375710176072107014314 0ustar devadeva/* * Copyright (c) 2004 Deva Seetharam deva@alum.mit.edu * All rights reserved. * Copyright (c) 1996 Tommaso Cucinotta, Alessandro Evangelista, Luigi Rizzo * All rights reserved. * * Dip. di Ingegneria dell'Informazione, Universita of Pisa, * via Diotisalvi 2 -- 56126 Pisa. * email: simulpic@iet.unipi.it * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by * Tommaso Cucinotta, Alessandro Evangelista and Luigi Rizzo * 4. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include "tparser.h" #include TParser Parser; simulpic-2005-1-28/Makefile0100600000175200017520000000112410176345507013737 0ustar devadevaIECSRC=iec.cc INCLUDES= pictype.h tfile.h tiofile.h tparser.h tpic.h \ tprogmem.h tregfile.h tstack.h tstring.h simulpic.h SRCS=simulpic.cc tfile.cc tiofile.cc tparser.cc \ tpic.cc tprogmem.cc tregfile.cc tstack.cc ALLSRC=$(IECSRC) $(SRCS) $(INCLUDES) Makefile Copyright README simulpic.doc simulpic.1 CFLAGS= -g -fPIC -O -Wall -fwritable-strings -fno-exceptions \ -I. -I/usr/include/g++-3 CXX= g++ $(CFLAGS) OBJS= $(SRCS:.cc=.o) simulpic: $(OBJS) g++ -g -o simulpic $(OBJS) clean: - rm -f $(OBJS) a.out *.core simulpic tarball: $(ALLSRC) - tar cvzf simulpic.tgz $(ALLSRC) simulpic-2005-1-28/iec.cc0100600000175200017520000002065210176072107013346 0ustar devadeva/* * Copyright (c) 2004 Deva Seetharam deva@alum.mit.edu * All rights reserved. * * Copyright (c) 1996 Tommaso Cucinotta, Alessandro Evangelista, Luigi Rizzo * All rights reserved. * * Dip. di Ingegneria dell'Informazione, Universita of Pisa, * via Diotisalvi 2 -- 56126 Pisa. * email: simulpic@iet.unipi.it * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by * Tommaso Cucinotta, Alessandro Evangelista and Luigi Rizzo * 4. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /* * * Project: SimulPIC * Program: IEC (Input Event Compiler) * * Notes: Compiles input event files before using SimulPIC.EXE * */ #include #include #include typedef enum { IN_0, IN_1, OUT } state; #define OK 0x00 #define SYNTAX 0x01 #define MCLR_VALUE 0x02 #define RB_VALUE 0x03 #define RA_VALUE 0x04 #define UNEXPECTED_EOF 0x05 #define CANNOT_OPEN 0x06 #define MCLR_RAB 0x07 #define BAD_ARG 0x08 #define BEGIN_EXPECTED 0x09 #define TIME 0x0A #define EQUAL 0x0B #define BAD_TIME 0x0C void get_next(); int get_token(); int get_time(); int get_line(); void quit(int); void set_pin(state *port, int pin); void write_line(); void main(int argc, char *argv[]); FILE *input, *output; char line[256]; char tokbuf[80]; char* token; char* lptr; long double Time; struct { state RA[5]; state RB[8]; char MCLR; } pin; void get_next() { if (*token == NULL) if(!get_token()) quit(SYNTAX); } int get_token() { if(sscanf(lptr, "%s", tokbuf)== 1) { while(*lptr ==' ') lptr++; while((*lptr !=' ') && (*lptr != NULL)) lptr++; token = tokbuf; return 1; } else return 0; } int get_time() { static double last_time = -1E-10; if (sscanf(token, "%lf", &Time) == 1) if((Time > last_time)) { last_time = Time; return 1; } else quit(BAD_TIME); if(strcmp(token,"end")==0) quit(OK); return 0; } int get_line() { if (fgets(line, sizeof(line)-1, input) != NULL) { lptr = line; printf(line); return 1; } else return 0; } void set_pin(state* port, int pin) { switch(*token) { case '0': port[pin] = IN_0; break; case '1' : port[pin] = IN_1; break; case '-' : port[pin] = OUT; break; default: quit(RB_VALUE); } } char state_to_char(state s) { switch(s) { case IN_0: return '0'; case IN_1: return '1'; case OUT: return '-'; } return '?'; } void write_line() { for(int i=4; i>=0; i--) fprintf(output,"%c", state_to_char(pin.RA[i])); fprintf(output," "); for(i=7; i>=0; i--) fprintf(output,"%c", state_to_char(pin.RB[i])); fprintf(output, " %d", pin.MCLR); fprintf(output, " %6.2lf\n", Time); } void quit(int s) { switch(s) { case OK: fclose(input); fclose(output); exit(0); case SYNTAX: puts("Error: syntax error"); break; case MCLR_VALUE: puts("Error: MCLR value expected"); break; case RB_VALUE: puts("Error: RB value expected"); break; case RA_VALUE: puts("Error: RA value expected"); break; case UNEXPECTED_EOF: puts("Error: unexpected end of file"); break; case CANNOT_OPEN: puts("Error: can't open file"); break; case MCLR_RAB: puts("Error: 'MCLR','RAx','RBx' expected"); break; case BAD_ARG: puts("Usage: ic "); break; case BEGIN_EXPECTED: puts("Error: 'begin' expected"); break; case TIME: puts("Error: