diff options
author | Ramana | 2018-06-06 14:48:14 +0530 |
---|---|---|
committer | GitHub | 2018-06-06 14:48:14 +0530 |
commit | 2307d7aa409430506eeaed03633c8c31dd7f4ac1 (patch) | |
tree | 411f4316499406d225c50fb64da5bf48240983ab /ldmicro/includes | |
parent | 8deab843fa6d616086955702c77751f631badc0d (diff) | |
parent | 0a7ef8991842872aa1cbc828619fc71a1216f748 (diff) | |
download | LDMicroGtk-2307d7aa409430506eeaed03633c8c31dd7f4ac1.tar.gz LDMicroGtk-2307d7aa409430506eeaed03633c8c31dd7f4ac1.tar.bz2 LDMicroGtk-2307d7aa409430506eeaed03633c8c31dd7f4ac1.zip |
Merge pull request #4 from Rr42/GUI_port
First merge
Diffstat (limited to 'ldmicro/includes')
-rw-r--r-- | ldmicro/includes/intcode.h | 83 | ||||
-rw-r--r-- | ldmicro/includes/ldmicro.h | 774 | ||||
-rw-r--r-- | ldmicro/includes/ldmicroVC.h | 3 | ||||
-rw-r--r-- | ldmicro/includes/ldmicroVC.h.in | 3 | ||||
-rw-r--r-- | ldmicro/includes/mcutable.h | 862 | ||||
-rw-r--r-- | ldmicro/includes/naminglist.h | 16 |
6 files changed, 1741 insertions, 0 deletions
diff --git a/ldmicro/includes/intcode.h b/ldmicro/includes/intcode.h new file mode 100644 index 0000000..f265a8d --- /dev/null +++ b/ldmicro/includes/intcode.h @@ -0,0 +1,83 @@ +//----------------------------------------------------------------------------- +// Copyright 2007 Jonathan Westhues +// +// This file is part of LDmicro. +// +// LDmicro is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// LDmicro is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with LDmicro. If not, see <http://www.gnu.org/licenses/>. +//------ +// +// Description of the intermediate code that we generate. The routines in +// intcode.cpp generate this intermediate code from the program source. Then +// either we simulate the intermediate code with the routines in simulate.cpp +// or we convert it to PIC or AVR instructions so that it can run on a +// real device. +// Jonathan Westhues, Nov 2004 +//----------------------------------------------------------------------------- + +#ifndef __INTCODE_H +#define __INTCODE_H + +#define INT_SET_BIT 1 +#define INT_CLEAR_BIT 2 +#define INT_COPY_BIT_TO_BIT 3 +#define INT_SET_VARIABLE_TO_LITERAL 4 +#define INT_SET_VARIABLE_TO_VARIABLE 5 +#define INT_INCREMENT_VARIABLE 6 +#define INT_SET_VARIABLE_ADD 7 +#define INT_SET_VARIABLE_SUBTRACT 8 +#define INT_SET_VARIABLE_MULTIPLY 9 +#define INT_SET_VARIABLE_DIVIDE 10 + +#define INT_READ_ADC 11 +#define INT_SET_PWM 12 +#define INT_UART_SEND 13 +#define INT_UART_RECV 14 +#define INT_EEPROM_BUSY_CHECK 15 +#define INT_EEPROM_READ 16 +#define INT_EEPROM_WRITE 17 + +#define INT_IF_GROUP(x) (((x) >= 50) && ((x) < 60)) +#define INT_IF_BIT_SET 50 +#define INT_IF_BIT_CLEAR 51 +#define INT_IF_VARIABLE_LES_LITERAL 52 +#define INT_IF_VARIABLE_EQUALS_VARIABLE 53 +#define INT_IF_VARIABLE_GRT_VARIABLE 54 + +#define INT_ELSE 60 +#define INT_END_IF 61 + +#define INT_SIMULATE_NODE_STATE 80 + +#define INT_COMMENT 100 + +// Only used for the interpretable code. +#define INT_END_OF_PROGRAM 255 + +#if !defined(INTCODE_H_CONSTANTS_ONLY) + typedef struct IntOpTag { + int op; + char name1[MAX_NAME_LEN]; + char name2[MAX_NAME_LEN]; + char name3[MAX_NAME_LEN]; + SWORD literal; + BOOL *poweredAfter; + } IntOp; + + #define MAX_INT_OPS (1024*16) + extern IntOp IntCode[MAX_INT_OPS]; + extern int IntCodeLen; +#endif + + +#endif diff --git a/ldmicro/includes/ldmicro.h b/ldmicro/includes/ldmicro.h new file mode 100644 index 0000000..caa154d --- /dev/null +++ b/ldmicro/includes/ldmicro.h @@ -0,0 +1,774 @@ +//----------------------------------------------------------------------------- +// Copyright 2007 Jonathan Westhues +// +// This file is part of LDmicro. +// +// LDmicro is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// LDmicro is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with LDmicro. If not, see <http://www.gnu.org/licenses/>. +//------ +// +// Constants, structures, declarations etc. for the PIC ladder logic compiler +// Jonathan Westhues, Oct 2004 +//----------------------------------------------------------------------------- + +#ifndef __LDMICRO_H +#define __LDMICRO_H + +#include <setjmp.h> +typedef signed short SWORD; +typedef signed long SDWORD; + +// #include "linuxUI.h" + +//----------------------------------------------- +// `Configuration options.' + +// The library that I use to do registry stuff. decleared in freezeLD.h due to build issues +// #define FREEZE_SUBKEY "LDMicro" + +// Size of the font that we will use to draw the ladder diagrams, in pixels +#define FONT_WIDTH 7 +#define FONT_HEIGHT 13 + +// Timer IDs associated with the main window. +#define TIMER_BLINK_CURSOR 1 +#define TIMER_SIMULATE 2 + +//----------------------------------------------- +// Constants for the GUI. We have drop-down menus, a listview for the I/Os, +// etc. + +// Menu IDs +extern HMENU MNU_NEW; +extern HMENU MNU_OPEN; +extern HMENU MNU_SAVE; +extern HMENU MNU_SAVE_AS; +extern HMENU MNU_EXPORT; +extern HMENU MNU_EXIT; + +extern HMENU MNU_UNDO; +extern HMENU MNU_REDO; +extern HMENU MNU_PUSH_RUNG_UP; +extern HMENU MNU_PUSH_RUNG_DOWN; +extern HMENU MNU_INSERT_RUNG_BEFORE; +extern HMENU MNU_INSERT_RUNG_AFTER; +extern HMENU MNU_DELETE_ELEMENT; +extern HMENU MNU_DELETE_RUNG; + +extern HMENU MNU_INSERT_COMMENT; +extern HMENU MNU_INSERT_CONTACTS; +extern HMENU MNU_INSERT_COIL; +extern HMENU MNU_INSERT_TON; +extern HMENU MNU_INSERT_TOF; +extern HMENU MNU_INSERT_RTO; +extern HMENU MNU_INSERT_RES; +extern HMENU MNU_INSERT_OSR; +extern HMENU MNU_INSERT_OSF; +extern HMENU MNU_INSERT_CTU; +extern HMENU MNU_INSERT_CTD; +extern HMENU MNU_INSERT_CTC; +extern HMENU MNU_INSERT_ADD; +extern HMENU MNU_INSERT_SUB; +extern HMENU MNU_INSERT_MUL; +extern HMENU MNU_INSERT_DIV; +extern HMENU MNU_INSERT_MOV; +extern HMENU MNU_INSERT_READ_ADC; +extern HMENU MNU_INSERT_SET_PWM; +extern HMENU MNU_INSERT_UART_SEND; +extern HMENU MNU_INSERT_UART_RECV; +extern HMENU MNU_INSERT_EQU; +extern HMENU MNU_INSERT_NEQ; +extern HMENU MNU_INSERT_GRT; +extern HMENU MNU_INSERT_GEQ; +extern HMENU MNU_INSERT_LES; +extern HMENU MNU_INSERT_LEQ; +extern HMENU MNU_INSERT_OPEN; +extern HMENU MNU_INSERT_SHORT; +extern HMENU MNU_INSERT_MASTER_RLY; +extern HMENU MNU_INSERT_SHIFT_REG; +extern HMENU MNU_INSERT_LUT; +extern HMENU MNU_INSERT_FMTD_STR; +extern HMENU MNU_INSERT_PERSIST; +extern HMENU MNU_MAKE_NORMAL; +extern HMENU MNU_NEGATE; +extern HMENU MNU_MAKE_SET_ONLY; +extern HMENU MNU_MAKE_RESET_ONLY; +extern HMENU MNU_INSERT_PWL; + +extern HMENU MNU_MCU_SETTINGS; +extern HMENU MNU_PROCESSOR_0; + +extern HMENU MNU_SIMULATION_MODE; +extern HMENU MNU_START_SIMULATION; +extern HMENU MNU_STOP_SIMULATION; +extern HMENU MNU_SINGLE_CYCLE; + +extern HMENU MNU_COMPILE; +extern HMENU MNU_COMPILE_AS; + +extern HMENU MNU_MANUAL; +extern HMENU MNU_ABOUT; + +extern HMENU MNU_ADV_SIMULATION; + + +// Columns within the I/O etc. listview. +#define LV_IO_NAME 0x00 +#define LV_IO_TYPE 0x01 +#define LV_IO_STATE 0x02 +#define LV_IO_PIN 0x03 +#define LV_IO_PORT 0x04 +//----------------------------------------------- +// Data structures for the actual ladder logic. A rung on the ladder +// is a series subcircuit. A series subcircuit contains elements or +// parallel subcircuits. A parallel subcircuit contains elements or series +// subcircuits. An element is a set of contacts (possibly negated) or a coil. + +#define MAX_ELEMENTS_IN_SUBCKT 16 + +#define ELEM_PLACEHOLDER 0x01 +#define ELEM_SERIES_SUBCKT 0x02 +#define ELEM_PARALLEL_SUBCKT 0x03 +#define ELEM_PADDING 0x04 +#define ELEM_COMMENT 0x05 + +#define ELEM_CONTACTS 0x10 +#define ELEM_COIL 0x11 +#define ELEM_TON 0x12 +#define ELEM_TOF 0x13 +#define ELEM_RTO 0x14 +#define ELEM_RES 0x15 +#define ELEM_ONE_SHOT_RISING 0x16 +#define ELEM_ONE_SHOT_FALLING 0x17 +#define ELEM_MOVE 0x18 +#define ELEM_ADD 0x19 +#define ELEM_SUB 0x1a +#define ELEM_MUL 0x1b +#define ELEM_DIV 0x1c +#define ELEM_EQU 0x1d +#define ELEM_NEQ 0x1e +#define ELEM_GRT 0x1f +#define ELEM_GEQ 0x20 +#define ELEM_LES 0x21 +#define ELEM_LEQ 0x22 +#define ELEM_CTU 0x23 +#define ELEM_CTD 0x24 +#define ELEM_CTC 0x25 +#define ELEM_SHORT 0x26 +#define ELEM_OPEN 0x27 +#define ELEM_READ_ADC 0x28 +#define ELEM_SET_PWM 0x29 +#define ELEM_UART_RECV 0x2a +#define ELEM_UART_SEND 0x2b +#define ELEM_MASTER_RELAY 0x2c +#define ELEM_SHIFT_REGISTER 0x2d +#define ELEM_LOOK_UP_TABLE 0x2e +#define ELEM_FORMATTED_STRING 0x2f +#define ELEM_PERSIST 0x30 +#define ELEM_PIECEWISE_LINEAR 0x31 + +#define CASE_LEAF \ + case ELEM_PLACEHOLDER: \ + case ELEM_COMMENT: \ + case ELEM_COIL: \ + case ELEM_CONTACTS: \ + case ELEM_TON: \ + case ELEM_TOF: \ + case ELEM_RTO: \ + case ELEM_CTD: \ + case ELEM_CTU: \ + case ELEM_CTC: \ + case ELEM_RES: \ + case ELEM_ONE_SHOT_RISING: \ + case ELEM_ONE_SHOT_FALLING: \ + case ELEM_EQU: \ + case ELEM_NEQ: \ + case ELEM_GRT: \ + case ELEM_GEQ: \ + case ELEM_LES: \ + case ELEM_LEQ: \ + case ELEM_ADD: \ + case ELEM_SUB: \ + case ELEM_MUL: \ + case ELEM_DIV: \ + case ELEM_MOVE: \ + case ELEM_SHORT: \ + case ELEM_OPEN: \ + case ELEM_READ_ADC: \ + case ELEM_SET_PWM: \ + case ELEM_UART_SEND: \ + case ELEM_UART_RECV: \ + case ELEM_MASTER_RELAY: \ + case ELEM_SHIFT_REGISTER: \ + case ELEM_LOOK_UP_TABLE: \ + case ELEM_PIECEWISE_LINEAR: \ + case ELEM_FORMATTED_STRING: \ + case ELEM_PERSIST: + +#define MAX_NAME_LEN 128 +#define MAX_COMMENT_LEN 384 +#define MAX_LOOK_UP_TABLE_LEN 60 + +typedef struct ElemSubckParallelTag ElemSubcktParallel; + +typedef struct ElemCommentTag { + char str[MAX_COMMENT_LEN]; +} ElemComment; + +typedef struct ElemContactsTag { + char name[MAX_NAME_LEN]; + BOOL negated; +} ElemContacts; + +typedef struct ElemCoilTag { + char name[MAX_NAME_LEN]; + BOOL negated; + BOOL setOnly; + BOOL resetOnly; +} ElemCoil; + +typedef struct ElemTimeTag { + char name[MAX_NAME_LEN]; + int delay; +} ElemTimer; + +typedef struct ElemResetTag { + char name[MAX_NAME_LEN]; +} ElemReset; + +typedef struct ElemMoveTag { + char src[MAX_NAME_LEN]; + char dest[MAX_NAME_LEN]; +} ElemMove; + +typedef struct ElemMathTag { + char op1[MAX_NAME_LEN]; + char op2[MAX_NAME_LEN]; + char dest[MAX_NAME_LEN]; +} ElemMath; + +typedef struct ElemCmpTag { + char op1[MAX_NAME_LEN]; + char op2[MAX_NAME_LEN]; +} ElemCmp; + +typedef struct ElemCounterTag { + char name[MAX_NAME_LEN]; + int max; +} ElemCounter; + +typedef struct ElemReadAdcTag { + char name[MAX_NAME_LEN]; +} ElemReadAdc; + +typedef struct ElemSetPwmTag { + char name[MAX_NAME_LEN]; + int targetFreq; +} ElemSetPwm; + +typedef struct ElemUartTag { + char name[MAX_NAME_LEN]; +} ElemUart; + +typedef struct ElemShiftRegisterTag { + char name[MAX_NAME_LEN]; + int stages; +} ElemShiftRegister; + +typedef struct ElemLookUpTableTag { + char dest[MAX_NAME_LEN]; + char index[MAX_NAME_LEN]; + int count; + BOOL editAsString; + SWORD vals[MAX_LOOK_UP_TABLE_LEN]; +} ElemLookUpTable; + +typedef struct ElemPiecewiseLinearTag { + char dest[MAX_NAME_LEN]; + char index[MAX_NAME_LEN]; + int count; + SWORD vals[MAX_LOOK_UP_TABLE_LEN]; +} ElemPiecewiseLinear; + +typedef struct ElemFormattedStringTag { + char var[MAX_NAME_LEN]; + char string[MAX_LOOK_UP_TABLE_LEN]; +} ElemFormattedString; + +typedef struct ElemPerisistTag { + char var[MAX_NAME_LEN]; +} ElemPersist; + +#define SELECTED_NONE 0 +#define SELECTED_ABOVE 1 +#define SELECTED_BELOW 2 +#define SELECTED_RIGHT 3 +#define SELECTED_LEFT 4 +typedef struct ElemLeafTag { + int selectedState; + BOOL poweredAfter; + union { + ElemComment comment; + ElemContacts contacts; + ElemCoil coil; + ElemTimer timer; + ElemReset reset; + ElemMove move; + ElemMath math; + ElemCmp cmp; + ElemCounter counter; + ElemReadAdc readAdc; + ElemSetPwmTag setPwm; + ElemUart uart; + ElemShiftRegister shiftRegister; + ElemFormattedString fmtdStr; + ElemLookUpTable lookUpTable; + ElemPiecewiseLinear piecewiseLinear; + ElemPersist persist; + } d; +} ElemLeaf; + +typedef struct ElemSubcktSeriesTag { + struct { + int which; + union { + void *any; + ElemSubcktParallel *parallel; + ElemLeaf *leaf; + } d; + } contents[MAX_ELEMENTS_IN_SUBCKT]; + int count; +} ElemSubcktSeries; + +typedef struct ElemSubckParallelTag { + struct { + int which; + union { + void *any; + ElemSubcktSeries *series; + ElemLeaf *leaf; + } d; + } contents[MAX_ELEMENTS_IN_SUBCKT]; + int count; +} ElemSubcktParallel; + +typedef struct McuIoInfoTag McuIoInfo; + +typedef struct PlcProgramSingleIoTag { + char name[MAX_NAME_LEN]; +#define IO_TYPE_PENDING 0 + +#define IO_TYPE_DIG_INPUT 1 +#define IO_TYPE_DIG_OUTPUT 2 +#define IO_TYPE_READ_ADC 3 +#define IO_TYPE_UART_TX 4 +#define IO_TYPE_UART_RX 5 +#define IO_TYPE_PWM_OUTPUT 6 +#define IO_TYPE_INTERNAL_RELAY 7 +#define IO_TYPE_TON 8 +#define IO_TYPE_TOF 9 +#define IO_TYPE_RTO 10 +#define IO_TYPE_COUNTER 11 +#define IO_TYPE_GENERAL 12 + int type; +#define NO_PIN_ASSIGNED 0 + int pin; +} PlcProgramSingleIo; + +#define MAX_IO 512 +typedef struct PlcProgramTag { + struct { + PlcProgramSingleIo assignment[MAX_IO]; + int count; + } io; + McuIoInfo *mcu; + int cycleTime; + int mcuClock; + int baudRate; + +#define MAX_RUNGS 99 + ElemSubcktSeries *rungs[MAX_RUNGS]; + BOOL rungPowered[MAX_RUNGS]; + int numRungs; +} PlcProgram; + +//----------------------------------------------- +// For actually drawing the ladder logic on screen; constants that determine +// how the boxes are laid out in the window, need to know that lots of +// places for figuring out if a mouse click is in a box etc. + +// dimensions, in characters, of the area reserved for 1 leaf element +#define POS_WIDTH 17 +#define POS_HEIGHT 3 + +// offset from the top left of the window at which we start drawing, in pixels +#define X_PADDING 35 +#define Y_PADDING 14 + +typedef struct PlcCursorTag { + int left; + int top; + int width; + int height; +} PlcCursor; + +//----------------------------------------------- +// The syntax highlighting style colours; a structure for the palette. + +typedef struct SyntaxHighlightingColoursTag { + COLORREF bg; // background + COLORREF def; // default foreground + COLORREF selected; // selected element + COLORREF op; // `op code' (like OSR, OSF, ADD, ...) + COLORREF punct; // punctuation, like square or curly braces + COLORREF lit; // a literal number + COLORREF name; // the name of an item + COLORREF rungNum; // rung numbers + COLORREF comment; // user-written comment text + + COLORREF bus; // the `bus' at the right and left of screen + + COLORREF simBg; // background, simulation mode + COLORREF simRungNum; // rung number, simulation mode + COLORREF simOff; // de-energized element, simulation mode + COLORREF simOn; // energzied element, simulation mode + COLORREF simBusLeft; // the `bus,' can be different colours for + COLORREF simBusRight; // right and left of the screen +} SyntaxHighlightingColours; +extern SyntaxHighlightingColours HighlightColours; + +//----------------------------------------------- +// Processor definitions. These tables tell us where to find the I/Os on +// a processor, what bit in what register goes with what pin, etc. There +// is one master SupportedMcus table, which contains entries for each +// supported microcontroller. + +typedef struct McuIoPinInfoTag { + char port; + int bit; + int pin; +} McuIoPinInfo; + +typedef struct McuAdcPinInfoTag { + int pin; + BYTE muxRegValue; +} McuAdcPinInfo; + +#define ISA_AVR 0x00 +#define ISA_PIC16 0x01 +#define ISA_ANSIC 0x02 +#define ISA_INTERPRETED 0x03 +#define ISA_ARDUINO 0x04 + +#define MAX_IO_PORTS 10 +#define MAX_RAM_SECTIONS 5 + +typedef struct McuIoInfoTag { + char *mcuName; + char portPrefix; + DWORD inputRegs[MAX_IO_PORTS]; // a is 0, j is 9 + DWORD outputRegs[MAX_IO_PORTS]; + DWORD dirRegs[MAX_IO_PORTS]; + DWORD flashWords; + struct { + DWORD start; + int len; + } ram[MAX_RAM_SECTIONS]; + McuIoPinInfo *pinInfo; + int pinCount; + McuAdcPinInfo *adcInfo; + int adcCount; + int adcMax; + struct { + int rxPin; + int txPin; + } uartNeeds; + int pwmNeedsPin; + int whichIsa; + BOOL avrUseIjmp; + DWORD configurationWord; +} McuIoInfo; + +#define NUM_SUPPORTED_MCUS 16 + +//----------------------------------------------- +// Function prototypes + +// ldmicro.cpp +void ProgramChanged(void); + +void SetMenusEnabled(BOOL canNegate, BOOL canNormal, BOOL canResetOnly, + BOOL canSetOnly, BOOL canDelete, BOOL canInsertEnd, BOOL canInsertOther, + BOOL canPushRungDown, BOOL canPushRungUp, BOOL canInsertComment); + +void SetUndoEnabled(BOOL undoEnabled, BOOL redoEnabled); +void RefreshScrollbars(void); +extern HINSTANCE Instance; +extern HWID MainWindow; +extern HDC Hdc; +extern PlcProgram Prog; +extern char CurrentSaveFile[MAX_PATH]; +extern char CurrentCompileFile[MAX_PATH]; +extern McuIoInfo SupportedMcus[NUM_SUPPORTED_MCUS]; + +// memory debugging, because I often get careless; ok() will check that the +// heap used for all the program storage is not yet corrupt, and oops() if +// it is +void CheckHeap(char *file, int line); +#define ok() CheckHeap(__FILE__, __LINE__) + +// maincontrols.cpp +void MakeMainWindowControls(void); +HMENU MakeMainWindowMenus(void); +void VscrollProc(WPARAM wParam); +void HscrollProc(WPARAM wParam); +void GenerateIoListDontLoseSelection(void); +void RefreshControlsToSettings(void); +void MainWindowResized(void); +void ToggleSimulationMode(void); +void StopSimulation(void); +void StartSimulation(void); +void UpdateMainWindowTitleBar(void); +extern int ScrollWidth; +extern int ScrollHeight; +extern BOOL NeedHoriz; +extern HWND IoList; +extern int IoListTop; +extern int IoListHeight; + +// draw.cpp +int ProgCountWidestRow(void); +int CountHeightOfElement(int which, void *elem); +BOOL DrawElement(int which, void *elem, int *cx, int *cy, BOOL poweredBefore); +void DrawEndRung(int cx, int cy); +extern int ColsAvailable; +extern BOOL SelectionActive; +extern BOOL ThisHighlighted; + +// draw_outputdev.cpp +// extern void (*DrawChars)(int, int, char *); +// void CALLBACK BlinkCursor(HWND hwnd, UINT msg, UINT_PTR id, DWORD time); +// void PaintWindow(void); +// void ExportDrawingAsText(char *file); +// void InitForDrawing(void); +// void SetUpScrollbars(BOOL *horizShown, SCROLLINFO *horiz, SCROLLINFO *vert); +// int ScreenRowsAvailable(void); +// int ScreenColsAvailable(void); +extern HFONT FixedWidthFont; +extern HFONT FixedWidthFontBold; +extern int SelectedGxAfterNextPaint; +extern int SelectedGyAfterNextPaint; +extern BOOL ScrollSelectedIntoViewAfterNextPaint; +extern int ScrollXOffset; +extern int ScrollYOffset; +extern int ScrollXOffsetMax; +extern int ScrollYOffsetMax; + +// schematic.cpp +void SelectElement(int gx, int gy, int state); +void MoveCursorKeyboard(int keyCode); +void MoveCursorMouseClick(int x, int y); +BOOL MoveCursorTopLeft(void); +void EditElementMouseDoubleclick(int x, int y); +void EditSelectedElement(void); +void MakeResetOnlySelected(void); +void MakeSetOnlySelected(void); +void MakeNormalSelected(void); +void NegateSelected(void); +void ForgetFromGrid(void *p); +void ForgetEverything(void); +void WhatCanWeDoFromCursorAndTopology(void); +BOOL FindSelected(int *gx, int *gy); +void MoveCursorNear(int gx, int gy); + +#define DISPLAY_MATRIX_X_SIZE 16 +#define DISPLAY_MATRIX_Y_SIZE 512 +extern ElemLeaf *DisplayMatrix[DISPLAY_MATRIX_X_SIZE][DISPLAY_MATRIX_Y_SIZE]; +extern int DisplayMatrixWhich[DISPLAY_MATRIX_X_SIZE][DISPLAY_MATRIX_Y_SIZE]; +extern ElemLeaf DisplayMatrixFiller; +#define PADDING_IN_DISPLAY_MATRIX (&DisplayMatrixFiller) +#define VALID_LEAF(x) ((x) != NULL && (x) != PADDING_IN_DISPLAY_MATRIX) +extern ElemLeaf *Selected; +extern int SelectedWhich; + +extern PlcCursor Cursor; +extern BOOL CanInsertEnd; +extern BOOL CanInsertOther; +extern BOOL CanInsertComment; + +// circuit.cpp +void AddTimer(int which); +void AddCoil(void); +void AddContact(void); +void AddEmpty(int which); +void AddMove(void); +void AddMath(int which); +void AddCmp(int which); +void AddReset(void); +void AddCounter(int which); +void AddReadAdc(void); +void AddSetPwm(void); +void AddUart(int which); +void AddPersist(void); +void AddComment(char *text); +void AddShiftRegister(void); +void AddMasterRelay(void); +void AddLookUpTable(void); +void AddPiecewiseLinear(void); +void AddFormattedString(void); +void DeleteSelectedFromProgram(void); +void DeleteSelectedRung(void); +void InsertRung(BOOL afterCursor); +int RungContainingSelected(void); +BOOL ItemIsLastInCircuit(ElemLeaf *item); +BOOL UartFunctionUsed(void); +BOOL PwmFunctionUsed(void); +void PushRungUp(void); +void PushRungDown(void); +void NewProgram(void); +ElemLeaf *AllocLeaf(void); +ElemSubcktSeries *AllocSubcktSeries(void); +ElemSubcktParallel *AllocSubcktParallel(void); +void FreeCircuit(int which, void *any); +void FreeEntireProgram(void); +void UndoUndo(void); +void UndoRedo(void); +void UndoRemember(void); +void UndoFlush(void); +BOOL CanUndo(void); + +// loadsave.cpp +BOOL LoadProjectFromFile(char *filename); +BOOL SaveProjectToFile(char *filename); + +// iolist.cpp +int GenerateIoList(int prevSel); +void SaveIoListToFile(FILE *f); +BOOL LoadIoListFromFile(FILE *f); +void ShowIoDialog(int item); +void IoListProc(NMHDR *h); +void ShowAnalogSliderPopup(char *name); + +// commentdialog.cpp +void ShowCommentDialog(char *comment); +// contactsdialog.cpp +void ShowContactsDialog(BOOL *negated, char *name); +// coildialog.cpp +void ShowCoilDialog(BOOL *negated, BOOL *setOnly, BOOL *resetOnly, char *name); + +//naminglist.cpp +void MakeSmplDialogClass(void); + +// simpledialog.cpp +void ShowTimerDialog(int which, int *delay, char *name); +void ShowCounterDialog(int which, int *count, char *name); +void ShowMoveDialog(char *dest, char *src); +void ShowReadAdcDialog(char *name); +void ShowSetPwmDialog(char *name, int *targetFreq); +void ShowPersistDialog(char *var); +void ShowUartDialog(int which, char *name); +void ShowCmpDialog(int which, char *op1, char *op2); +void ShowMathDialog(int which, char *dest, char *op1, char *op2); +void ShowShiftRegisterDialog(char *name, int *stages); +void ShowFormattedStringDialog(char *var, char *string); +void ShowLookUpTableDialog(ElemLeaf *l); +void ShowPiecewiseLinearDialog(ElemLeaf *l); +void ShowResetDialog(char *name); +// confdialog.cpp +void ShowConfDialog(void); +// helpdialog.cpp +void ShowHelpDialog(BOOL about); + +// miscutil.cpp +#define oops() { \ + dbp("bad at %d %s\n", __LINE__, __FILE__); \ + Error("Internal error at line %d file '%s'\n", __LINE__, __FILE__); \ + exit(1); \ + } + +void dbp(char *str, ...); +void Error(char *str, ...); +void *CheckMalloc(size_t n); +void CheckFree(void *p); +extern HANDLE MainHeap; +void StartIhex(FILE *f); +void WriteIhex(FILE *f, BYTE b); +void FinishIhex(FILE *f); +char *IoTypeToString(int ioType); +void PinNumberForIo(char *dest, PlcProgramSingleIo *io); +HWND CreateWindowClient(DWORD exStyle, char *className, char *windowName, + DWORD style, int x, int y, int width, int height, HWND parent, + HMENU menu, HINSTANCE instance, void *param); + +void MakeComponentListClass(void); +void MakeNamingListClass(void); +void MakeDialogBoxClass(void); +void NiceFont(HWND h); +void FixedFont(HWND h); +void CompileSuccessfulMessage(char *str); +extern BOOL RunningInBatchMode; +extern HFONT MyNiceFont; +extern HFONT MyFixedFont; +extern HWND OkButton; +extern HWND CancelButton; +extern BOOL DialogDone; +extern BOOL DialogCancel; + +// lang.cpp +char *_(char *in); + +// simulate.cpp +void SimulateOneCycle(BOOL forceRefresh); +void CALLBACK PlcCycleTimer(HWND hwnd, UINT msg, UINT_PTR id, DWORD time); +void StartSimulationTimer(void); +void ClearSimulationData(void); +void DescribeForIoList(char *name, char *out); +void SimulationToggleContact(char *name); +void SimulationSetContact(char* name); +void SimulationResetContact(char* name); +void SetAdcShadow(char *name, SWORD val); +SWORD GetAdcShadow(char *name); +void DestroyUartSimulationWindow(void); +void ShowUartSimulationWindow(void); +extern BOOL InSimulationMode; +extern BOOL SimulateRedrawAfterNextCycle; + +// compilecommon.cpp +void AllocStart(void); +DWORD AllocOctetRam(void); +void AllocBitRam(DWORD *addr, int *bit); +void MemForVariable(char *name, DWORD *addrl, DWORD *addrh); +BYTE MuxForAdcVariable(char *name); +void MemForSingleBit(char *name, BOOL forRead, DWORD *addr, int *bit); +void MemCheckForErrorsPostCompile(void); +void BuildDirectionRegisters(BYTE *isInput, BYTE *isOutput); +void ComplainAboutBaudRateError(int divisor, double actual, double err); +void ComplainAboutBaudRateOverflow(void); +#define CompileError() longjmp(CompileErrorBuf, 1) +extern jmp_buf CompileErrorBuf; + +// intcode.cpp +void IntDumpListing(char *outFile); +BOOL GenerateIntermediateCode(void); +// pic16.cpp +void CompilePic16(char *outFile); +// avr.cpp +void CompileAvr(char *outFile); +// ansic.cpp +void CompileAnsiC(char *outFile); +// interpreted.c +void CompileInterpreted(char *outFile); +//Arduino.cpp +void CompileArduino(char *outFile); + +#endif diff --git a/ldmicro/includes/ldmicroVC.h b/ldmicro/includes/ldmicroVC.h new file mode 100644 index 0000000..400bc42 --- /dev/null +++ b/ldmicro/includes/ldmicroVC.h @@ -0,0 +1,3 @@ +/// version control +#define LDMicro_VERSION_MAJOR 1 +#define LDMicro_VERSION_MINOR 0 diff --git a/ldmicro/includes/ldmicroVC.h.in b/ldmicro/includes/ldmicroVC.h.in new file mode 100644 index 0000000..46c0e4a --- /dev/null +++ b/ldmicro/includes/ldmicroVC.h.in @@ -0,0 +1,3 @@ +/// version control +#define LDMicro_VERSION_MAJOR @LDMicro_VERSION_MAJOR@ +#define LDMicro_VERSION_MINOR @LDMicro_VERSION_MINOR@ diff --git a/ldmicro/includes/mcutable.h b/ldmicro/includes/mcutable.h new file mode 100644 index 0000000..14964ad --- /dev/null +++ b/ldmicro/includes/mcutable.h @@ -0,0 +1,862 @@ +//----------------------------------------------------------------------------- +// Copyright 2007 Jonathan Westhues +// +// This file is part of LDmicro. +// +// LDmicro is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// LDmicro is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with LDmicro. If not, see <http://www.gnu.org/licenses/>. +//------ +// +// The table of supported MCUs, used to determine where the IOs are, what +// instruction set, what init code, etc. +// Jonathan Westhues, Oct 2004 +//----------------------------------------------------------------------------- + +//----------------------------------------------------------------------------- +// ATmega128 or ATmega64 + +McuIoPinInfo AvrAtmega128_64TQFPIoPinInfo[] = { + { 'E', 0, 2 }, + { 'E', 1, 3 }, + { 'E', 2, 4 }, + { 'E', 3, 5 }, + { 'E', 4, 6 }, + { 'E', 5, 7 }, + { 'E', 6, 8 }, + { 'E', 7, 9 }, + + { 'B', 0, 10 }, + { 'B', 1, 11 }, + { 'B', 2, 12 }, + { 'B', 3, 13 }, + { 'B', 4, 14 }, + { 'B', 5, 15 }, + { 'B', 6, 16 }, + { 'B', 7, 17 }, + + { 'G', 3, 18 }, + { 'G', 4, 19 }, + + { 'D', 0, 25 }, + { 'D', 1, 26 }, + { 'D', 2, 27 }, + { 'D', 3, 28 }, + { 'D', 4, 29 }, + { 'D', 5, 30 }, + { 'D', 6, 31 }, + { 'D', 7, 32 }, + + { 'G', 0, 33 }, + { 'G', 1, 34 }, + + { 'C', 0, 35 }, + { 'C', 1, 36 }, + { 'C', 2, 37 }, + { 'C', 3, 38 }, + { 'C', 4, 39 }, + { 'C', 5, 40 }, + { 'C', 6, 41 }, + { 'C', 7, 42 }, + + { 'G', 2, 43 }, + + { 'A', 7, 44 }, + { 'A', 6, 45 }, + { 'A', 5, 46 }, + { 'A', 4, 47 }, + { 'A', 3, 48 }, + { 'A', 2, 49 }, + { 'A', 1, 50 }, + { 'A', 0, 51 }, + + { 'F', 7, 54 }, + { 'F', 6, 55 }, + { 'F', 5, 56 }, + { 'F', 4, 57 }, + { 'F', 3, 58 }, + { 'F', 2, 59 }, + { 'F', 1, 60 }, + { 'F', 0, 61 }, +}; + +McuAdcPinInfo AvrAtmega128_64TQFPAdcPinInfo[] = { + { 61, 0x00 }, + { 60, 0x01 }, + { 59, 0x02 }, + { 58, 0x03 }, + { 57, 0x04 }, + { 56, 0x05 }, + { 55, 0x06 }, + { 54, 0x07 }, +}; + + +//----------------------------------------------------------------------------- +// ATmega162 + +McuIoPinInfo AvrAtmega162IoPinInfo[] = { + { 'B', 0, 1 }, + { 'B', 1, 2 }, + { 'B', 2, 3 }, + { 'B', 3, 4 }, + { 'B', 4, 5 }, + { 'B', 5, 6 }, + { 'B', 6, 7 }, + { 'B', 7, 8 }, + { 'D', 0, 10 }, + { 'D', 1, 11 }, + { 'D', 2, 12 }, + { 'D', 3, 13 }, + { 'D', 4, 14 }, + { 'D', 5, 15 }, + { 'D', 6, 16 }, + { 'D', 7, 17 }, + { 'C', 0, 21 }, + { 'C', 1, 22 }, + { 'C', 2, 23 }, + { 'C', 3, 24 }, + { 'C', 4, 25 }, + { 'C', 5, 26 }, + { 'C', 6, 27 }, + { 'C', 7, 28 }, + { 'E', 2, 29 }, + { 'E', 1, 30 }, + { 'E', 0, 31 }, + { 'A', 7, 32 }, + { 'A', 6, 33 }, + { 'A', 5, 34 }, + { 'A', 4, 35 }, + { 'A', 3, 36 }, + { 'A', 2, 37 }, + { 'A', 1, 38 }, + { 'A', 0, 39 }, +}; + + +//----------------------------------------------------------------------------- +// ATmega16 or ATmega32 + +McuIoPinInfo AvrAtmega16or32IoPinInfo[] = { + { 'B', 0, 1 }, + { 'B', 1, 2 }, + { 'B', 2, 3 }, + { 'B', 3, 4 }, + { 'B', 4, 5 }, + { 'B', 5, 6 }, + { 'B', 6, 7 }, + { 'B', 7, 8 }, + { 'D', 0, 14 }, + { 'D', 1, 15 }, + { 'D', 2, 16 }, + { 'D', 3, 17 }, + { 'D', 4, 18 }, + { 'D', 5, 19 }, + { 'D', 6, 20 }, + { 'D', 7, 21 }, + { 'C', 0, 22 }, + { 'C', 1, 23 }, + { 'C', 2, 24 }, + { 'C', 3, 25 }, + { 'C', 4, 26 }, + { 'C', 5, 27 }, + { 'C', 6, 28 }, + { 'C', 7, 29 }, + { 'A', 7, 33 }, + { 'A', 6, 34 }, + { 'A', 5, 35 }, + { 'A', 4, 36 }, + { 'A', 3, 37 }, + { 'A', 2, 38 }, + { 'A', 1, 39 }, + { 'A', 0, 40 }, +}; + +McuAdcPinInfo AvrAtmega16or32AdcPinInfo[] = { + { 40, 0x00 }, + { 39, 0x01 }, + { 38, 0x02 }, + { 37, 0x03 }, + { 36, 0x04 }, + { 35, 0x05 }, + { 34, 0x06 }, + { 33, 0x07 }, +}; + + +//----------------------------------------------------------------------------- +// ATmega328_28PDIP Arduino + +McuIoPinInfo AvrAtmega328_28PDIPIoPinInfo[] = { + { 'C', 6, 1 }, + { 'D', 0, 2 }, + { 'D', 1, 3 }, + { 'D', 2, 4 }, + { 'D', 3, 5 }, + { 'D', 4, 6 }, + { 'B', 6, 9 }, + { 'B', 7, 10 }, + { 'D', 5, 11 }, + { 'D', 6, 12 }, + { 'D', 7, 13 }, + { 'B', 0, 14 }, + { 'B', 1, 15 }, + { 'B', 2, 16 }, + { 'B', 3, 17 }, + { 'B', 4, 18 }, + { 'B', 5, 19 }, + { 'C', 0, 23 }, + { 'C', 1, 24 }, + { 'C', 2, 25 }, + { 'C', 3, 26 }, + { 'C', 4, 27 }, + { 'C', 5, 28 }, +}; + +McuAdcPinInfo AvrAtmega328_28PDIPAdcPinInfo[] = { + { 23, 0x00 }, + { 24, 0x01 }, + { 25, 0x02 }, + { 26, 0x03 }, + { 27, 0x04 }, +}; + + +//----------------------------------------------------------------------------- +// ATmega8 + +McuIoPinInfo AvrAtmega8IoPinInfo[] = { + { 'D', 0, 2 }, + { 'D', 1, 3 }, + { 'D', 2, 4 }, + { 'D', 3, 5 }, + { 'D', 4, 6 }, + { 'D', 5, 11 }, + { 'D', 6, 12 }, + { 'D', 7, 13 }, + { 'B', 0, 14 }, + { 'B', 1, 15 }, + { 'B', 2, 16 }, + { 'B', 3, 17 }, + { 'B', 4, 18 }, + { 'B', 5, 19 }, + { 'C', 0, 23 }, + { 'C', 1, 24 }, + { 'C', 2, 25 }, + { 'C', 3, 26 }, + { 'C', 4, 27 }, + { 'C', 5, 28 }, +}; + +McuAdcPinInfo AvrAtmega8AdcPinInfo[] = { + { 23, 0x00 }, // ADC0 + { 24, 0x01 }, + { 25, 0x02 }, + { 26, 0x03 }, + { 27, 0x04 }, + { 28, 0x05 }, // ADC5 +}; + + +//----------------------------------------------------------------------------- +// A variety of 18-pin PICs that share the same digital IO assignment. + +McuIoPinInfo Pic18PinIoInfo[] = { + { 'A', 2, 1 }, + { 'A', 3, 2 }, + { 'A', 4, 3 }, + { 'A', 5, 4 }, + { 'B', 0, 6 }, + { 'B', 1, 7 }, + { 'B', 2, 8 }, + { 'B', 3, 9 }, + { 'B', 4, 10 }, + { 'B', 5, 11 }, + { 'B', 6, 12 }, + { 'B', 7, 13 }, + { 'A', 6, 15 }, + { 'A', 7, 16 }, + { 'A', 0, 17 }, + { 'A', 1, 18 }, +}; + +McuAdcPinInfo Pic16f819AdcPinInfo[] = { + { 1, 0x02 }, + { 2, 0x03 }, + { 3, 0x04 }, + { 17, 0x00 }, + { 18, 0x01 }, +}; + +McuAdcPinInfo Pic16f88AdcPinInfo[] = { + { 1, 0x02 }, + { 2, 0x03 }, + { 3, 0x04 }, + { 12, 0x05 }, + { 13, 0x06 }, + { 17, 0x00 }, + { 18, 0x01 }, +}; + + +//----------------------------------------------------------------------------- +// PIC16F877 + +McuIoPinInfo Pic16f877IoPinInfo[] = { + { 'A', 0, 2 }, + { 'A', 1, 3 }, + { 'A', 2, 4 }, + { 'A', 3, 5 }, + { 'A', 4, 6 }, + { 'A', 5, 7 }, + { 'E', 0, 8 }, + { 'E', 1, 9 }, + { 'E', 2, 10 }, + { 'C', 0, 15 }, + { 'C', 1, 16 }, + { 'C', 2, 17 }, + { 'C', 3, 18 }, + { 'D', 0, 19 }, + { 'D', 1, 20 }, + { 'D', 2, 21 }, + { 'D', 3, 22 }, + { 'C', 4, 23 }, + { 'C', 5, 24 }, + { 'C', 6, 25 }, + { 'C', 7, 26 }, + { 'D', 4, 27 }, + { 'D', 5, 28 }, + { 'D', 6, 29 }, + { 'D', 7, 30 }, + { 'B', 0, 33 }, + { 'B', 1, 34 }, + { 'B', 2, 35 }, + { 'B', 3, 36 }, + { 'B', 4, 37 }, + { 'B', 5, 38 }, + { 'B', 6, 39 }, + { 'B', 7, 40 }, +}; + +McuAdcPinInfo Pic16f877AdcPinInfo[] = { + { 2, 0x00 }, + { 3, 0x01 }, + { 4, 0x02 }, + { 5, 0x03 }, + { 7, 0x04 }, + { 8, 0x05 }, + { 9, 0x06 }, + { 10, 0x07 }, +}; + + +//----------------------------------------------------------------------------- +// PIC16F876 + +McuIoPinInfo Pic16f876IoPinInfo[] = { + { 'A', 0, 2 }, + { 'A', 1, 3 }, + { 'A', 2, 4 }, + { 'A', 3, 5 }, + { 'A', 4, 6 }, + { 'A', 5, 7 }, + { 'C', 0, 11 }, + { 'C', 1, 12 }, + { 'C', 2, 13 }, + { 'C', 3, 14 }, + { 'C', 4, 15 }, + { 'C', 5, 16 }, + { 'C', 6, 17 }, + { 'C', 7, 18 }, + { 'B', 0, 21 }, + { 'B', 1, 22 }, + { 'B', 2, 23 }, + { 'B', 3, 24 }, + { 'B', 4, 25 }, + { 'B', 5, 26 }, + { 'B', 6, 27 }, + { 'B', 7, 28 }, +}; + +McuAdcPinInfo Pic16f876AdcPinInfo[] = { + { 2, 0x00 }, + { 3, 0x01 }, + { 4, 0x02 }, + { 5, 0x03 }, + { 7, 0x04 } +}; + + +//----------------------------------------------------------------------------- +// PIC16F887 + +McuIoPinInfo Pic16f887IoPinInfo[] = { + { 'A', 0, 2 }, + { 'A', 1, 3 }, + { 'A', 2, 4 }, + { 'A', 3, 5 }, + { 'A', 4, 6 }, + { 'A', 5, 7 }, + { 'E', 0, 8 }, + { 'E', 1, 9 }, + { 'E', 2, 10 }, + { 'C', 0, 15 }, + { 'C', 1, 16 }, + { 'C', 2, 17 }, + { 'C', 3, 18 }, + { 'D', 0, 19 }, + { 'D', 1, 20 }, + { 'D', 2, 21 }, + { 'D', 3, 22 }, + { 'C', 4, 23 }, + { 'C', 5, 24 }, + { 'C', 6, 25 }, + { 'C', 7, 26 }, + { 'D', 4, 27 }, + { 'D', 5, 28 }, + { 'D', 6, 29 }, + { 'D', 7, 30 }, + { 'B', 0, 33 }, + { 'B', 1, 34 }, + { 'B', 2, 35 }, + { 'B', 3, 36 }, + { 'B', 4, 37 }, + { 'B', 5, 38 }, + { 'B', 6, 39 }, + { 'B', 7, 40 }, +}; + +McuAdcPinInfo Pic16f887AdcPinInfo[] = { + { 2, 0x00 }, + { 3, 0x01 }, + { 4, 0x02 }, + { 5, 0x03 }, + { 7, 0x04 }, + { 8, 0x05 }, + { 9, 0x06 }, + { 10, 0x07 }, + { 33, 0x0c }, + { 34, 0x0a }, + { 35, 0x08 }, + { 36, 0x09 }, + { 37, 0x0b }, + { 38, 0x0d }, +}; + + +//----------------------------------------------------------------------------- +// PIC16F886 + +McuIoPinInfo Pic16f886IoPinInfo[] = { + { 'A', 0, 2 }, + { 'A', 1, 3 }, + { 'A', 2, 4 }, + { 'A', 3, 5 }, + { 'A', 4, 6 }, + { 'A', 5, 7 }, + { 'C', 0, 11 }, + { 'C', 1, 12 }, + { 'C', 2, 13 }, + { 'C', 3, 14 }, + { 'C', 4, 15 }, + { 'C', 5, 16 }, + { 'C', 6, 17 }, + { 'C', 7, 18 }, + { 'B', 0, 21 }, + { 'B', 1, 22 }, + { 'B', 2, 23 }, + { 'B', 3, 24 }, + { 'B', 4, 25 }, + { 'B', 5, 26 }, + { 'B', 6, 27 }, + { 'B', 7, 28 }, +}; + +McuAdcPinInfo Pic16f886AdcPinInfo[] = { + { 2, 0x00 }, + { 3, 0x01 }, + { 4, 0x02 }, + { 5, 0x03 }, + { 7, 0x04 }, + { 21, 0x0c }, + { 22, 0x0a }, + { 23, 0x08 }, + { 24, 0x09 }, + { 25, 0x0b }, + { 26, 0x0d }, +}; + + +#define arraylen(x) (sizeof(x)/sizeof((x)[0])) + +McuIoInfo SupportedMcus[NUM_SUPPORTED_MCUS] = { + { + "Atmel AVR ATmega128 64-TQFP", + 'P', + { 0x39, 0x36, 0x33, 0x30, 0x21, 0x20, 0x63 }, // PINx + { 0x3b, 0x38, 0x35, 0x32, 0x23, 0x62, 0x65 }, // PORTx + { 0x3a, 0x37, 0x34, 0x31, 0x22, 0x61, 0x64 }, // DDRx + 64*1024, + { { 0x100, 4096 } }, + AvrAtmega128_64TQFPIoPinInfo, + arraylen(AvrAtmega128_64TQFPIoPinInfo), + AvrAtmega128_64TQFPAdcPinInfo, + arraylen(AvrAtmega128_64TQFPAdcPinInfo), + 1023, + { 27, 28 }, + 17, + ISA_AVR, + TRUE, + 0 + }, + { + "Atmel AVR ATmega64 64-TQFP", + 'P', + { 0x39, 0x36, 0x33, 0x30, 0x21, 0x20, 0x63 }, // PINx + { 0x3b, 0x38, 0x35, 0x32, 0x23, 0x62, 0x65 }, // PORTx + { 0x3a, 0x37, 0x34, 0x31, 0x22, 0x61, 0x64 }, // DDRx + 32*1024, + { { 0x100, 4096 } }, + AvrAtmega128_64TQFPIoPinInfo, + arraylen(AvrAtmega128_64TQFPIoPinInfo), + AvrAtmega128_64TQFPAdcPinInfo, + arraylen(AvrAtmega128_64TQFPAdcPinInfo), + 1023, + { 27, 28 }, + 17, + ISA_AVR, + TRUE, + 0 + }, + { + "Atmel AVR ATmega162 40-PDIP", + 'P', + { 0x39, 0x36, 0x33, 0x30, 0x25 }, // PINx + { 0x3b, 0x38, 0x35, 0x32, 0x27 }, // PORTx + { 0x3a, 0x37, 0x34, 0x31, 0x26 }, // DDRx + 8*1024, + { { 0x100, 1024 } }, + AvrAtmega162IoPinInfo, + arraylen(AvrAtmega162IoPinInfo), + NULL, + 0, + 0, + { 0, 0 }, + 0, + ISA_AVR, + TRUE, + 0 + }, + { + "Atmel AVR ATmega32 40-PDIP", + 'P', + { 0x39, 0x36, 0x33, 0x30 }, // PINx + { 0x3b, 0x38, 0x35, 0x32 }, // PORTx + { 0x3a, 0x37, 0x34, 0x31 }, // DDRx + 16*1024, + { { 0x60, 2048 } }, + AvrAtmega16or32IoPinInfo, + arraylen(AvrAtmega16or32IoPinInfo), + AvrAtmega16or32AdcPinInfo, + arraylen(AvrAtmega16or32AdcPinInfo), + 1023, + { 14, 15 }, + 0, + ISA_AVR, + TRUE, + 0 + }, + { + "Atmel AVR ATmega16 40-PDIP", + 'P', + { 0x39, 0x36, 0x33, 0x30 }, // PINx + { 0x3b, 0x38, 0x35, 0x32 }, // PORTx + { 0x3a, 0x37, 0x34, 0x31 }, // DDRx + 8*1024, + { { 0x60, 1024 } }, + AvrAtmega16or32IoPinInfo, + arraylen(AvrAtmega16or32IoPinInfo), + AvrAtmega16or32AdcPinInfo, + arraylen(AvrAtmega16or32AdcPinInfo), + 1023, + { 14, 15 }, + 21, + ISA_AVR, + TRUE, + 0 + }, + { + "Atmel AVR ATmega8 28-PDIP", + 'P', + { 0xff, 0x36, 0x33, 0x30 }, // PINx (but there is no xxxA) + { 0xff, 0x38, 0x35, 0x32 }, // PORTx + { 0xff, 0x37, 0x34, 0x31 }, // DDRx + 4*1024, + { { 0x60, 1024 } }, + AvrAtmega8IoPinInfo, + arraylen(AvrAtmega8IoPinInfo), + AvrAtmega8AdcPinInfo, + arraylen(AvrAtmega8AdcPinInfo), + 1023, + { 2, 3 }, + 17, + ISA_AVR, + TRUE, + 0 + }, + { + "Atmel AVR ATmega328 28-PDIP", + 'P', + { 0xff, 0x23, 0x26, 0x29 }, // PINx (but there is no xxxA) + { 0xff, 0x25, 0x28, 0x2B }, // PORTx + { 0xff, 0x24, 0x27, 0x2A }, // DDRx + 16*1024, + { { 0x100, 1024 } }, + AvrAtmega328_28PDIPIoPinInfo, + arraylen(AvrAtmega328_28PDIPIoPinInfo), + AvrAtmega328_28PDIPAdcPinInfo, + arraylen(AvrAtmega328_28PDIPAdcPinInfo), + 1023, + { 2, 3 }, + 17, + ISA_ARDUINO, + TRUE, + 0 + }, + { + "Microchip PIC16F628 18-PDIP or 18-SOIC", + 'R', + { 0x05, 0x06 }, // PORTx + { 0x05, 0x06 }, // PORTx + { 0x85, 0x86 }, // TRISx + 2048, + { { 0x20, 96 }, { 0xa0, 80 }, { 0x120, 48 } }, + Pic18PinIoInfo, + arraylen(Pic18PinIoInfo), + NULL, + 0, + 0, + { 7, 8 }, + 0, + ISA_PIC16, + FALSE, + // code protection off, data code protection off, LVP disabled, + // BOD reset enabled, RA5/nMCLR is RA5, PWRT enabled, WDT disabled, + // HS oscillator + 0x3f62 + }, + { + "Microchip PIC16F88 18-PDIP or 18-SOIC", + 'R', + { 0x05, 0x06 }, // PORTx + { 0x05, 0x06 }, // PORTx + { 0x85, 0x86 }, // TRISx + 4096, + { { 0x20, 96 }, { 0xa0, 80 }, { 0x120, 48 } }, + Pic18PinIoInfo, + arraylen(Pic18PinIoInfo), + Pic16f88AdcPinInfo, + arraylen(Pic16f88AdcPinInfo), + 1023, + { 8, 11 }, + 0, + ISA_PIC16, + FALSE, + (1 << 13) | // CP off + (1 << 12) | // CCP on RB2 (doesn't matter) + (1 << 11) | // ICD disabled + (3 << 9) | // flash write protection off + (1 << 8) | // code protection off + (0 << 7) | // LVP disabled + (1 << 6) | // BOR enabled + (0 << 5) | // RA5/nMCLR is RA5 + (0 << 4) | // for osc sel, later + (0 << 3) | // PWRT enabled + (0 << 2) | // WDT disabled + (2 << 0), // HS oscillator + }, + { + "Microchip PIC16F819 18-PDIP or 18-SOIC", + 'R', + { 0x05, 0x06 }, // PORTx + { 0x05, 0x06 }, // PORTx + { 0x85, 0x86 }, // TRISx + 2048, + { { 0x20, 96 } }, + Pic18PinIoInfo, + arraylen(Pic18PinIoInfo), + Pic16f819AdcPinInfo, + arraylen(Pic16f819AdcPinInfo), + 1023, + { 0, 0 }, + 0, + ISA_PIC16, + FALSE, + (1 << 13) | // code protect off + (1 << 12) | // CCP1 on RB2 (doesn't matter, can't use) + (1 << 11) | // disable debugger + (3 << 9) | // flash protection off + (1 << 8) | // data protect off + (0 << 7) | // LVP disabled + (1 << 6) | // BOR enabled + (0 << 5) | // nMCLR/RA5 is RA5 + (0 << 3) | // PWRTE enabled + (0 << 2) | // WDT disabled + (2 << 0), // HS oscillator + }, + { + "Microchip PIC16F877 40-PDIP", + 'R', + { 0x05, 0x06, 0x07, 0x08, 0x09 }, // PORTx + { 0x05, 0x06, 0x07, 0x08, 0x09 }, // PORTx + { 0x85, 0x86, 0x87, 0x88, 0x89 }, // TRISx + 8*1024, + { { 0x20, 96 }, { 0xa0, 80 }, { 0x110, 96 }, { 0x190, 96 } }, + Pic16f877IoPinInfo, + arraylen(Pic16f877IoPinInfo), + Pic16f877AdcPinInfo, + arraylen(Pic16f877AdcPinInfo), + 1023, + { 26, 25 }, + 16, + ISA_PIC16, + FALSE, + // code protection off, debug off, flash write off, EE code protection + // off, LVP disabled, BOD enabled, CP off, PWRT enabled, WDT disabled, + // HS oscillator + 0x3f72 + }, + { + "Microchip PIC16F876 28-PDIP or 28-SOIC", + 'R', + { 0x05, 0x06, 0x07 }, // PORTx + { 0x05, 0x06, 0x07 }, // PORTx + { 0x85, 0x86, 0x87 }, // TRISx + 8*1024, + { { 0x20, 96 }, { 0xa0, 80 }, { 0x110, 96 }, { 0x190, 96 } }, + Pic16f876IoPinInfo, + arraylen(Pic16f876IoPinInfo), + Pic16f876AdcPinInfo, + arraylen(Pic16f876AdcPinInfo), + 1023, + { 18, 17 }, + 12, + ISA_PIC16, + FALSE, + // code protection off, debug off, flash write off, EE code protection + // off, LVP disabled, BOD enabled, CP off, PWRT enabled, WDT disabled, + // HS oscillator + 0x3f72 + }, + { + "Microchip PIC16F887 40-PDIP", + 'R', + { 0x05, 0x06, 0x07, 0x08, 0x09 }, // PORTx + { 0x05, 0x06, 0x07, 0x08, 0x09 }, // PORTx + { 0x85, 0x86, 0x87, 0x88, 0x89 }, // TRISx + 8*1024, + { { 0x20, 96 }, { 0xa0, 80 }, { 0x120, 80 }, { 0x1a0, 80 } }, + Pic16f887IoPinInfo, + arraylen(Pic16f887IoPinInfo), + Pic16f887AdcPinInfo, + arraylen(Pic16f887AdcPinInfo), + 1023, + { 26, 25 }, + 16, + ISA_PIC16, + FALSE, + (3 << (9+16)) | // flash write protection off + (0 << (8+16)) | // BOR at 2.1 V + (1 << 13) | // ICD disabled + (0 << 12) | // LVP disabled + (0 << 11) | // fail-safe clock monitor disabled + (0 << 10) | // internal/external switchover disabled + (3 << 8) | // brown-out detect enabled + (1 << 7) | // data code protection disabled + (1 << 6) | // code protection disabled + (1 << 5) | // nMCLR enabled + (0 << 4) | // PWRTE enabled + (0 << 3) | // WDTE disabled + (2 << 0) // HS oscillator + + }, + { + "Microchip PIC16F886 28-PDIP or 28-SOIC", + 'R', + { 0x05, 0x06, 0x07, 0x08, 0x09 }, // PORTx + { 0x05, 0x06, 0x07, 0x08, 0x09 }, // PORTx + { 0x85, 0x86, 0x87, 0x88, 0x89 }, // TRISx + 8*1024, + { { 0x20, 96 }, { 0xa0, 80 }, { 0x120, 80 }, { 0x1a0, 80 } }, + Pic16f886IoPinInfo, + arraylen(Pic16f886IoPinInfo), + Pic16f886AdcPinInfo, + arraylen(Pic16f886AdcPinInfo), + 1023, + { 18, 17 }, + 12, + ISA_PIC16, + FALSE, + (3 << (9+16)) | // flash write protection off + (0 << (8+16)) | // BOR at 2.1 V + (1 << 13) | // ICD disabled + (0 << 12) | // LVP disabled + (0 << 11) | // fail-safe clock monitor disabled + (0 << 10) | // internal/external switchover disabled + (3 << 8) | // brown-out detect enabled + (1 << 7) | // data code protection disabled + (1 << 6) | // code protection disabled + (1 << 5) | // nMCLR enabled + (0 << 4) | // PWRTE enabled + (0 << 3) | // WDTE disabled + (2 << 0) // HS oscillator + }, + { + "ANSI C Code", + 'x', + { 0x00 }, + { 0x00 }, + { 0x00 }, + 0, + { { 0x00, 0 } }, + NULL, + 0, + NULL, + 0, + 0, + { 0, 0 }, + 0, + ISA_ANSIC, + FALSE, + 0x00 + }, + { + "Interpretable Byte Code", + 'x', + { 0x00 }, + { 0x00 }, + { 0x00 }, + 0, + { { 0x00, 0 } }, + NULL, + 0, + NULL, + 0, + 0, + { 0, 0 }, + 0, + ISA_INTERPRETED, + FALSE, + 0x00 + } +}; + diff --git a/ldmicro/includes/naminglist.h b/ldmicro/includes/naminglist.h new file mode 100644 index 0000000..43a7a76 --- /dev/null +++ b/ldmicro/includes/naminglist.h @@ -0,0 +1,16 @@ +#ifndef _NAMING_LIST +#define _NAMING_LIST + +extern HWND NamingList; + +// void NamingListProc(NMHDR *h); + +int NameList_AddName(LPCTSTR Name, int Index); +double NameList_RegisterVolt(LPCTSTR Name, double volt); //Forcefully set voltage will not be accessible outside the cpp file +double NameList_SetVolt(int Index, double volt); //Set voltage if current voltage>specified voltage +double NameList_DeRegisterVolt(LPCTSTR Name); //Send a message to rest of the components to set new voltage +void NamingListProc(NMHDR *h); + + +// void ConfigureNamingList(int type,int PinOnProcessor, MCUPort); +#endif |