Source file: /~heha/basteln/PC/Programmiergeräte/PEPS-III/peps4win32.zip/src/peps.h

/*--------------------------------------------------------------
 Peps.h — Kopfdatei für peps.exe
 VERSION konnte auf PC, AMIGA, (ATARI noch nicht verfügbar) gesetzt werden
 Codepage: UTF-8 ohne BOM, Zeilenenden: LF, Tabweite: 8
--------------------------------------------------------------*/

#define PEPSIII		// Compilieren als PEPS-III-Version
// Der Unterschied zu PEPS-II ist mir unbekannt.
// Vermutlich ist jener ein EPROM-Simulator ohne Rücklesemöglichkeit

#ifdef WIN32
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <io.h>
// alte MSVCRT.DLL exportiert kein __iob_func() sondern __iob (Tabelle)
// (Problem entsteht durch msvcrt-light.lib)
#ifdef _M_IX86
_CRTIMP FILE _iob[3];
#undef stdout
#define stdout (_iob+0)
#undef stdin
#define stdin (_iob+1)
#undef stderr
#define stderr (_iob+2)
#endif

#define T(x) TEXT(x)
#define lseek _lseek
#define read _read
#define write _write
#define close _close

#else	// Linux

#define _cdecl			// Keine Aufrufkonvention
#define _ttoi atoi		// fehlende <tchar.h>
#define _tcstoul strtoul
#define _tcstol strtol
#define _tfopen fopen
#define _tcsstr strstr
#define _tunlink unlink
#define _isatty isatty
#define _fileno fileno
typedef char TCHAR;		// Windows-Typen
typedef unsigned short WORD;
typedef unsigned long DWORD, DWORD_PTR;
typedef unsigned char BYTE;
typedef int HANDLE;
#define O_BINARY 0
#include <stdio.h>	// printf()
#include <stdlib.h>
#include <errno.h>	// errno
#include <fcntl.h>	// open(), O_RDWR usw.
#include <sys/types.h>
#include <sys/stat.h>
#include <ctype.h>
#include <string.h>
#include <unistd.h>
#include <stdarg.h>
#define T(x) x
#define MulDiv(a,b,c) (int)((long long)(a)*(b)/(c))

#endif

#define elemof(x) (sizeof(x)/sizeof(*(x)))
#define nobreak

#ifndef __cplusplus
typedef enum {false, true} bool;	// Enum-Größe?
#endif


/*--------------------- Prototypes -----------------------*/
extern void _cdecl DoExit(int RCode,...);
extern void Fortschritt(long, long);
extern void newline();

/* hexload.c */
typedef struct _MEMAREA {
 struct _MEMAREA *next;	// EVL (einfach verkettete Liste)
 long a;	// Startadresse
 long e;	// Endadresse + 1
}MEMAREA;	// beschreibt einen gefüllten Speicherbereich

extern MEMAREA *areas;	// sortierte (!) Speicherbereiche
extern BYTE buffer[];	// 2 MiB Platz, zum Aufsammeln von HEX-Dateien
extern long LoadOffset;	// Verschiebung der HEX- oder BIN-Daten
//extern long TargetSize;	// Platz in den PEPSen = Puffergröße
FILE *InFile;

void InitBuffer(long size);
void AddArea(long a, long e);
void AddBytes(const BYTE*p, long a, long len);
// Loader laden von <InFile> mit <LoadOffset> nach <buffer>
void LoadObjModule();
void LoadIntel();
void LoadMotorola();
void LoadBinary();


/* sendiii.c */
typedef enum {PARPORT,INPOUT32,USB2PRN,USB2LPT} IODEVICE;
/*══════════════╤═══════════════════════╤═══════════════════════╗
║		│	WINDOWS		│	LINUX		║
╟───────────────┼───────────────────────┼───────────────────────╢
║ PARPORT	│ Direktzugriff		│ Direktzugriff		║
║	davor:	│  DirectNT.sys laden	│  ioperm()-Aufruf	║
╟───────────────┼───────────────────────┼───────────────────────╢
║ INPOUT32	│ DLL-Funktionen	│ioctl auf /dev/parportX║
║	davor:	│  InpOut32.dll laden	│  /dev/parportX öffnen	║
╟───────────────┼───────────────────────┼───────────────────────╢
║ USB2PRN	│ ioctl auf USB2PRN	│ioctl auf /dev/usb/lpX	║
║	davor:	│  Handle beschaffen	│  /dev/usb/lpX öffnen	║
╟───────────────┼───────────────────────┼───────────────────────╢
║ USB2LPT	│ ioctl auf USB2LPT	│ [ungelöst]		║
║	davor:	│  Handle beschaffen	│  [libusb laden?]	║
╚═══════════════╧═══════════════════════╧══════════════════════*/
#ifdef WIN32
# define IOLOGICAL 2	// ab USB2PRN (hier: /dev/usb/lpX) logische Nummern
#else
# define IOLOGICAL 1	// ab INPOUT32 (hier: /dev/parportX) logische Nummern
#endif
extern IODEVICE iodevice;
extern BYTE Cen_Clk;	// High-Nibble = Bitmaske für Taktbits, 0 = Auto-Detect
extern WORD PPort;	// Parallelport-Basisadresse oder Geräte-Index
extern BYTE outcycles;	// Anzahl wiederholender OUT-Befehle, Warteschleifen wenn >1; 0 = Auto-Detect
extern bool debug;	// Loggen der Portzugriffe auf stderr
// E/A-Schnittstelle vorbereiten bzw. aufräumen
void iodeviceInit();	// mehrfacher Aufruf schadet nicht
void iodeviceDone();	// mehrfacher Aufruf schadet nicht
// PEPS-Zugriffe (Die DIL-Schalterstellungen lassen sich nicht abfragen)
typedef enum {CHECK_DELAY=1, CHECK_SRG=2, CHECK_RAM=4, CHECK_SIZE=8} CHECK_FLAGS;
// CHECK_SIZE dauert am längsten, weil dem Adresszähler 512K Takte übermittelt werden müssen.
void InitPeps3(CHECK_FLAGS check);	// Auto-Detect, RAM-Prüfung usw.
void HoldReset();	// Mikrocontroller in RESET halten
void Simulate();	// Simulator und Mikrocontroller freigeben
long GetPepsSize();	// Gesamte RAM-Größe in Erfahrung bringen
void SendData(const BYTE *Base,long Size,long addr);
void ReadData(      BYTE *Base,long Size,long addr,bool verify);

/* resu.c bzw. resw.c */
extern void InitRes();
extern void vrprintf(int,va_list);
extern void _cdecl rprintf(int,...);
extern int mygetch(bool noblock);
#ifdef WIN32
extern void usleep(DWORD);
#ifdef _M_IX86
extern bool InstallDirectNT(bool);
#else
#define InstallDirectNT(x) true
#endif
#else
extern DWORD GetTickCount();
#endif
extern WORD GetParportAddr(int n);
Detected encoding: UTF-80