Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /* dZ80 Disassembler Header */
  2.  
  3. #ifndef _MIDISSZ80_
  4. #define _MIDISSZ80_
  5.  
  6. #ifdef __cplusplus
  7. extern "C" {
  8. #endif
  9.  
  10. #ifndef _DZ80_EXCLUDE_SCRIPT
  11. #include "lua.h"
  12. #else
  13. #define LUA_VERSION             "(scripting not included)"
  14. #endif
  15.  
  16. #define DZ80_WWW                "http://www.inkland.org"
  17. #define DZ80_EMAIL              "dz80@inkland.org"
  18.  
  19. #define Z80MEMSIZE                              65536
  20.  
  21. #define D_CUSTOMSTRING_MAXLEN   6
  22.  
  23. #define DISFLAG_OPCODEDUMP              0x01
  24. #define DISFLAG_ADDRDUMP                0x02
  25. #define DISFLAG_UPPER                   0x04
  26. #define DISFLAG_SINGLE                  0x08    /* Disassemble a single instruction */
  27. #define DISFLAG_VERBOSE                 0x10
  28. #define DISFLAG_QUIET                   0x20
  29. #define DISFLAG_LABELLED                0x40
  30. #define DISFLAG_REFINPORT               0x80
  31. #define DISFLAG_REFOUTPORT              0x100
  32. #define DISFLAG_REFADDR                 0x200
  33. #define DISFLAG_REFINDIRECT     0x400
  34. #define DISFLAG_REFLIMITRANGE   0x800
  35. #define DISFLAG_USELABELADDRS   0x1000
  36. #define DISFLAG_RELCOMMENT              0x2000  /* Relative jump comments */
  37. #define DISFLAG_LINECOMMANDS    0x4000  /* Process line commands (auto blank lines) */
  38. #define DISFLAG_CALLBACK        0x8000  /* Access memory through a callback */
  39.  
  40. /* Reference listing stuff */
  41. #define DISFLAG_ANYREF                  (DISFLAG_REFINPORT | DISFLAG_REFOUTPORT | DISFLAG_REFADDR | DISFLAG_REFINDIRECT)
  42.  
  43. /* parametersModified flags (used by the GUI when importing a config file) */
  44. #define DPM_STARTADDR                   0x0001
  45. #define DPM_ENDADDR                             0x0002
  46. #define DPM_HDRSIZE                             0x0004
  47. #define DPM_FILESTARTADDR               0x0008
  48. #define DPM_CPUTYPE                             0x0010
  49. #define DPM_RADIX                               0x0020
  50. #define DPM_NUMPREFIX                   0x0040
  51. #define DPM_NUMSUFFIX                   0x0080
  52. #define DPM_OPMAP                               0x0100
  53.  
  54. /* Configuration file name */
  55. #define CONFIGFILENAME                  "dz80.ini"
  56.  
  57. enum dz80Cpus
  58.         {
  59.         DCPU_Z80GB,
  60.         DCPU_Z80,
  61.         DCPU_Z180,
  62.  
  63.         DCPU_TOTAL
  64.         };
  65.  
  66.  
  67. enum dz80Passes
  68.         {
  69.         DPASS_INIT,
  70.         DPASS_WRITE,
  71.         DPASS_ANALYSE,
  72.  
  73.         DPASS_TOTAL
  74.         };
  75.  
  76.  
  77.  
  78. enum dz80Errors
  79.         {
  80.         DERR_NONE,
  81.         DERR_OUTOFMEM,
  82.         DERR_COULDNTCREATEFILE,
  83.         DERR_COULDNTWRITETOFILE,
  84.         DERR_BADOPCODELENGTH,
  85.         DERR_INVALIDPARAMS,
  86.         DERR_SCRIPTERROR,
  87.         DERR_WRONGARGUMENTTYPE,
  88.         DERR_COULDNTOPENFILE,
  89.         DERR_SCRIPTING_NA,
  90.        
  91.         DERR_TOTAL
  92.         };
  93.  
  94.  
  95. enum DRADIX
  96. {
  97.         DRADIX_HEX,
  98.         DRADIX_DECIMAL,
  99.         DRADIX_OCTAL,          
  100.  
  101.         DRADIX_TOTAL,
  102.  
  103.         DRADIX_DEFAULT = DRADIX_HEX
  104. };
  105.  
  106.  
  107. enum DISREF_TYPES
  108. {
  109.         DISREF_INPORT,
  110.         DISREF_OUTPORT,
  111.         DISREF_ADDR,
  112.         DISREF_INDIRECT,
  113.  
  114.         DISREF_TOTAL
  115. };
  116.  
  117.  
  118. typedef struct DISREFADDR
  119. {
  120.         WORD                            RefAddress;
  121.         struct DISREFADDR       *pNext;
  122. } DISREFADDR;
  123.  
  124. typedef struct DISREF
  125. {
  126.         WORD            RefType;                                /* Reference type */
  127.         WORD            Addr;                                   /* Memory or port address */
  128.         WORD            Hits;                                   /* Number of times referenced */
  129.         DISREFADDR      *pRefAddrHead;                  /* Pointer to the list of referenced addresses */
  130.         DISREFADDR      *pRefAddrTail;                  /* Pointer to the last referenced address */
  131.  
  132.         struct DISREF *pPrev;
  133.         struct DISREF *pNext;
  134. } DISREF;
  135.  
  136.  
  137. typedef struct DISZ80
  138. {
  139.         BYTE            *mem0Start;                             /* Pointer to Z80's zero address */
  140.         BYTE            (*memCB)(void *ctx, WORD addr);         /* Indirect access through callback (DISFLAG_CALLBACK) */
  141.         WORD            start;                                          /* Starting disassembler address */
  142.         WORD            end;                                            /* Ending disassembler address */
  143.         DWORD           flags;                                          /* See DISFLAG_ defines */
  144.         DWORD           flagsModified;                          /* Which bits have been modified via config files */
  145.         DWORD           parametersModified;                     /* Which other parameters have been modified via config file */
  146.         int             numInstructions;                        /* How many instructions were disassembled */
  147.         int             createdRefOK;                           /* Set to TRUE if created .ref file OK */
  148.         char            srcFileName[_MAX_PATH];         /* Used only to display the source filename in the report header */
  149.         char            outFileName[_MAX_PATH];         /* Destination assembler file */
  150.         char            opMapFileName[_MAX_PATH];       /* Opcode map file name */
  151.         char            refFileName[_MAX_PATH];         /* Reference file name */
  152.         char            scriptFileName[_MAX_PATH];      /* Lua script file name */
  153.  
  154. /* CPU type */
  155.         BYTE            cpuType;                                        /* See the DCPU_ enums */
  156.        
  157. /* New flexible number formats */
  158.         BYTE            layoutRadix;                                                    /* Do ya want hex with that? */
  159.         char            layoutComment[D_CUSTOMSTRING_MAXLEN];   /* The string used as a comment marker */
  160.         char            layoutNumberPrefix[D_CUSTOMSTRING_MAXLEN];     
  161.         char            layoutNumberSuffix[D_CUSTOMSTRING_MAXLEN];
  162.         char            layoutDefineByte[D_CUSTOMSTRING_MAXLEN];/* Default of "db" */
  163.  
  164. /* Pointer to the function callbacks */
  165.         void            (*fnProgressCallback)(struct DISZ80 *d);
  166.         void            (*fnErrorMessage)(char *msg);
  167.         void            (*fnOutputMessage)(char *msg);
  168.  
  169. /* dZ80 private workspace stuff - hands off ;) */
  170.         char            hexDisBuf[32];                          /* Holds the hex. code bytes (easy one!) */
  171.         char            disBuf[128];                            /* Holds the disassembly */
  172.         char            commentBuf[128];
  173.         WORD            lastDisPC, lastRefAddr, disStart, disEnd;
  174.         int             op, realop, lineCmd;
  175.         BYTE            *Z80MemBase;
  176.         BYTE            (*Z80MemCB)(void *ctx, WORD addr);
  177.         signed char     IXIYDisp;                               /* The IXIY displacement (-128 to 127) */
  178.         int             Z80Flags;
  179.         int             currentPass, totalPasses;
  180.         int             numRecursions;
  181.         BYTE            *fnMap, *opMap;
  182.         DISREF          *pRefHead[DISREF_TOTAL];
  183.         DWORD           numRefs[DISREF_TOTAL];
  184.         DWORD           bytesToProcess, bytesProcessed;
  185.         FILE            *outStream, *refStream;
  186.         int             labelledOutput, dissingToConsole, haveTabbed;
  187.         int             progressCounter;
  188.         WORD            PC, lastPC;
  189.         BYTE            *pTrapMap;                              /* Pointer to the trap map */
  190.         BYTE            firstByte;
  191.         int             haveWrapped;
  192.         int                     disBufIndex;                    /* Index into the disassembly buffer */
  193.         DWORD           fileHeaderSize;                 /* The size of the file's header (to skip) */
  194.         WORD            fileStartAddr;                  /* The Z80 address of the start of the file */
  195.  
  196. #ifndef _DZ80_EXCLUDE_SCRIPT
  197.         lua_State       *ls;                                    /* Pointer to the Lua state in which the scripts are run */
  198. #endif
  199.        
  200. } DISZ80;
  201.  
  202.  
  203. int             dZ80_LoadConfiguration(DISZ80 *d, char *pConfigFile);
  204. void    dZ80_SetDefaultOptions(DISZ80 *d);
  205. int     dZ80_Disassemble(DISZ80 *d);
  206. void    dZ80_SetRadix(DISZ80 *d, int radix);
  207. int     dZ80_SingleDisassembly(DISZ80 *d);
  208. void    dZ80_InheritRadix(DISZ80 *dst, DISZ80 *src);
  209. char    *dZ80_GetVersionString(void);
  210. void    dZ80_StringToLower(char *s);
  211. void    dZ80_StringToUpper(char *s);
  212. void    dZ80_SafeStringCopy(char *dst, char *src, int dstSize);
  213. const char *dZ80_GetErrorText(int errNum);
  214. int     dZ80_LoadZ80File(DISZ80 *d, DWORD *BytesLoaded);
  215. void    dZ80_Error(DISZ80 *d, char *msg);
  216. void    dZ80_ShowMsg(DISZ80 *d, char *msg);
  217. int             dZ80_AllocateOpMap(DISZ80 *d);
  218.  
  219. extern char *dZ80CpuTypeNames[DCPU_TOTAL];
  220.  
  221. #ifdef __cplusplus
  222. }
  223. #endif
  224.  
  225. #endif          /* _MIDISSZ80_ */
  226.