Annotation of hatari/src/includes/main.h, revision 1.1

1.1     ! root        1: /*
        !             2:   Hatari
        !             3: */
        !             4: 
        !             5: #ifndef MAIN_H
        !             6: #define MAIN_H
        !             7: 
        !             8: typedef int BOOL;
        !             9: 
        !            10: #define PROG_NAME      "Hatari v0.05" /* Name, version for window title */
        !            11: #define PROG_VERSION      "v0.05"
        !            12: #define VERSION_STRING      "0.05 "   /* Always 6 bytes(inc' NULL) */
        !            13: #define VERSION_STRING_SIZE    6      /* Size of above(inc' NULL) */
        !            14: 
        !            15: //#define TOTALLY_FINAL_VERSION       /* Web release version... */
        !            16: 
        !            17: #define FINAL_VERSION                 /* Full-speed non-debug version for release */
        !            18: //#define DEBUG_TO_FILE               /* Use debug.txt files */
        !            19: #define FIND_PERFORMANCE
        !            20: 
        !            21: #ifndef FINAL_VERSION
        !            22:   #define USE_DEBUGGER                /* Debugger version(non-release) */
        !            23:   #define DEBUG_TO_FILE               /* Use debug.txt files */
        !            24: #endif
        !            25: 
        !            26: #ifndef TOTALLY_FINAL_VERSION
        !            27:   #define FORCE_WORKING_DIR           /* Set default directory when running in MsDev */
        !            28: #endif
        !            29: 
        !            30: #ifdef TOTALLY_FINAL_VERSION
        !            31:   #undef DEBUG_TO_FILE                /* Don't use debug files for final release */
        !            32:   #undef FIND_PERFORMANCE
        !            33: #endif
        !            34: 
        !            35: #define MAX_FILENAME_LENGTH  256
        !            36: #define MAX_STRING_LENGTH  512
        !            37: 
        !            38: #define  DIRECTINPUT_VERSION  0x0500
        !            39: 
        !            40: #define MAX_PASSED_PARAMETERS  4      /* Number of passed parameters from command line */
        !            41: 
        !            42: #include <stdio.h>
        !            43: #include <stdlib.h>
        !            44: #include <string.h>
        !            45: #include <math.h>
        !            46: #include <time.h>
        !            47: #include <assert.h>
        !            48: 
        !            49: 
        !            50: #ifndef FALSE
        !            51: #define FALSE 0
        !            52: #define TRUE (!0)
        !            53: #endif
        !            54: 
        !            55: #define CALL_VAR(func)  { ((void(*)(void))func)(); }
        !            56: 
        !            57: // Binary conversion macro's
        !            58: #define BIN2(a,b) ((a<<1)+(b))
        !            59: #define BIN3(a,b,c) ((a<<2)+(b<<1)+(c))
        !            60: #define BIN4(a,b,c,d) ((a<<3)+(b<<2)+(c<<1)+(d))
        !            61: #define BIN5(a,b,c,d,e) ((a<<4)+(b<<3)+(c<<2)+(d<<1)+(e))
        !            62: #define BIN6(a,b,c,d,e,f) ((a<<5)+(b<<4)+(c<<3)+(d<<2)+(e<<1)+(f))
        !            63: #define BIN7(a,b,c,d,e,f,g) ((a<<6)+(b<<5)+(c<<4)+(d<<3)+(e<<2)+(f<<1)+(g))
        !            64: #define BIN8(a,b,c,d,e,f,g,h) ((a<<7)+(b<<6)+(c<<5)+(d<<4)+(e<<3)+(f<<2)+(g<<1)+(h))
        !            65: #define BIN10(a,b,c,d,e,f,g,h,i,j) ((a<<9)+(b<<8)+(c<<7)+(d<<6)+(e<<5)+(f<<4)+(g<<3)+(h<<2)+(i<<1)+(j))
        !            66: #define BIN12(a,b,c,d,e,f,g,h,i,j,k,l) ((a<<11)+(b<<10)+(c<<9)+(d<<8)+(e<<7)+(f<<6)+(g<<5)+(h<<4)+(i<<3)+(j<<2)+(k<<1)+(l))
        !            67: #define BIN14(a,b,c,d,e,f,g,h,i,j,k,l,m,n) ((a<<13)+(b<<12)+(c<<11)+(d<<10)+(e<<9)+(f<<8)+(g<<7)+(h<<6)+(i<<5)+(j<<4)+(k<<3)+(l<<2)+(m<<1)+(n))
        !            68: #define BIN16(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) ((a<<15)+(b<<14)+(c<<13)+(d<<12)+(e<<11)+(f<<10)+(g<<9)+(h<<8)+(i<<7)+(j<<6)+(k<<5)+(l<<4)+(m<<3)+(n<<2)+(o<<1)+(p))
        !            69: 
        !            70: // 68000 operand sizes
        !            71: #define SIZE_BYTE  1
        !            72: #define SIZE_WORD  2
        !            73: #define SIZE_LONG  4
        !            74: 
        !            75: /* 68000 Register defines */
        !            76: enum {
        !            77:   REG_D0,    /* D0.. */
        !            78:   REG_D1,
        !            79:   REG_D2,
        !            80:   REG_D3,
        !            81:   REG_D4,
        !            82:   REG_D5,
        !            83:   REG_D6,
        !            84:   REG_D7,    /* ..D7 */
        !            85:   REG_A0,    /* A0.. */
        !            86:   REG_A1,
        !            87:   REG_A2,
        !            88:   REG_A3,
        !            89:   REG_A4,
        !            90:   REG_A5,
        !            91:   REG_A6,
        !            92:   REG_A7,    /* ..A7(also SP) */
        !            93:   REG_A8=17  /* User/Super Stack Pointer */ /* FIXME: Nasty remap to regs.isp in decode.h */
        !            94: };
        !            95: 
        !            96: /* PC Condition code's */
        !            97: #define PC_CARRY    0x0001  // Bit 0
        !            98: #define PC_AUX      0x0010  // Bit 4
        !            99: #define PC_ZERO      0x0040  // Bit 6
        !           100: #define PC_NEG      0x0080  // Bit 7
        !           101: #define PC_OVERFLOW    0x0800  // Bit 11
        !           102: 
        !           103: /* 68000 Condition code's */
        !           104: #define SR_AUX      0x0010
        !           105: #define SR_NEG      0x0008
        !           106: #define SR_ZERO      0x0004
        !           107: #define SR_OVERFLOW    0x0002
        !           108: #define SR_CARRY    0x0001
        !           109: 
        !           110: #define SR_CLEAR_AUX    0xffef
        !           111: #define SR_CLEAR_NEG    0xfff7
        !           112: #define SR_CLEAR_ZERO    0xfffb
        !           113: #define SR_CLEAR_OVERFLOW  0xfffd
        !           114: #define SR_CLEAR_CARRY    0xfffe
        !           115: 
        !           116: #define SR_CCODE_MASK    (SR_AUX|SR_NEG|SR_ZERO|SR_OVERFLOW|SR_CARRY)
        !           117: #define SR_MASK      0xFFE0
        !           118: 
        !           119: #define SR_TRACEMODE    0x8000
        !           120: #define SR_SUPERMODE    0x2000
        !           121: #define SR_IPL      0x0700
        !           122: 
        !           123: #define SR_CLEAR_IPL    0xf8ff
        !           124: #define SR_CLEAR_TRACEMODE  0x7fff
        !           125: #define SR_CLEAR_SUPERMODE  0xdfff
        !           126: 
        !           127: /* Emuation condition codes, ordered so can do 'xor al,al' to set XNZVC -0000 */
        !           128: #define  EMU_X    0x0100
        !           129: #define  EMU_N    0x0080
        !           130: #define  EMU_Z    0x0040
        !           131: #define  EMU_V    0x0020
        !           132: #define  EMU_C    0x0010
        !           133: 
        !           134: #define  EMU_CLEAR_X  0xfeff
        !           135: #define  EMU_CLEAR_N  0xff7f
        !           136: #define  EMU_CLEAR_Z  0xffbf
        !           137: #define  EMU_CLEAR_V  0xffdf
        !           138: #define  EMU_CLEAR_C  0xffef
        !           139: 
        !           140: /* Exception vectors */
        !           141: #define  EXCEPTION_BUSERROR  0x00000008
        !           142: #define  EXCEPTION_ADDRERROR  0x0000000c
        !           143: #define EXCEPTION_ILLEGALINS  0x00000010
        !           144: #define  EXCEPTION_DIVZERO  0x00000014
        !           145: #define EXCEPTION_CHK    0x00000018
        !           146: #define EXCEPTION_TRAPV    0x0000001c
        !           147: #define EXCEPTION_TRACE    0x00000024
        !           148: #define  EXCEPTION_LINE_A  0x00000028
        !           149: #define  EXCEPTION_LINE_F  0x0000002c
        !           150: #define  EXCEPTION_HBLANK  0x00000068
        !           151: #define  EXCEPTION_VBLANK  0x00000070
        !           152: #define EXCEPTION_TRAP0    0x00000080
        !           153: #define EXCEPTION_TRAP1    0x00000084
        !           154: #define EXCEPTION_TRAP2    0x00000088
        !           155: #define EXCEPTION_TRAP13  0x000000B4
        !           156: #define EXCEPTION_TRAP14  0x000000B8
        !           157: 
        !           158: /* Find IPL */
        !           159: #define FIND_IPL    ((SR>>8)&0x7)
        !           160: 
        !           161: /* Size of 68000 instructions */
        !           162: #define MAX_68000_INSTRUCTION_SIZE  10  /* Longest 68000 instruction is 10 bytes(6+4) */
        !           163: #define MIN_68000_INSTRUCTION_SIZE  2   /* Smallest 68000 instruction is 2 bytes(ie NOP) */
        !           164: 
        !           165: /*
        !           166:   All the following processor timings are based on a bog standard 8MHz 68000 as found in all standard ST's
        !           167: 
        !           168:   Clock cycles per line (50Hz)      : 512
        !           169:   NOPs per scan line (50Hz)         : 128
        !           170:   Scan lines per VBL (50Hz)         : 313(64 at top,200 screen,49 bottom)
        !           171: 
        !           172:   Clock cycles per line (60Hz)      : 508
        !           173:   NOPs per scan line (60Hz)         : 127
        !           174:   Scan lines per VBL (60Hz)         : 315
        !           175: 
        !           176:   Clock cycles per VBL              : 160256
        !           177:   NOPs per VBL                      : 40064
        !           178: 
        !           179:   Pixels per clock cycle (low res)  : 1
        !           180:   Pixels per clock cycle (med res)  : 2
        !           181:   Pixels per clock cycle (high res) : 4
        !           182:   Pixels per NOP (low res)          : 4
        !           183:   Pixels per NOP (med res)          : 8
        !           184:   Pixels per NOP (high res)         : 16
        !           185: */
        !           186: #define SCREEN_START_HBL  64            /* This is usually the first line of the displayed screen */
        !           187: #define SCREEN_HEIGHT_HBL  200          /* This is usually the height of the screen */
        !           188: #define FIRST_VISIBLE_HBL  (SCREEN_START_HBL-OVERSCAN_TOP)    /* Normal screen starts 64 lines in, top border is 28 lines */
        !           189: #define  NUM_VISIBLE_LINES  (OVERSCAN_TOP+SCREEN_HEIGHT_HBL+OVERSCAN_BOTTOM)  /* Number of visible screen lines including top/bottom borders */
        !           190: 
        !           191: /* Assumes 32 pixels left+right */
        !           192: #define SCREENBYTES_LEFT    16          /* Bytes for left border in ST screen */
        !           193: #define SCREENBYTES_MIDDLE    160       /* Middle(320 pixels) */
        !           194: #define SCREENBYTES_RIGHT    16         /* right border */
        !           195: #define SCREENBYTES_LINE    (SCREENBYTES_LEFT+SCREENBYTES_MIDDLE+SCREENBYTES_RIGHT)
        !           196: 
        !           197: /* Overscan values */
        !           198: #define OVERSCAN_LEFT      (SCREENBYTES_LEFT*2)    /* Number of pixels in each border */
        !           199: #define OVERSCAN_RIGHT      (SCREENBYTES_RIGHT*2)
        !           200: #define OVERSCAN_TOP      29
        !           201: #define OVERSCAN_BOTTOM      38
        !           202: #define OVERSCAN_MIDDLE      320        /* Number of pixels across screen(low res) */
        !           203: 
        !           204: #define SCREEN_START_CYCLE    96        /* Cycle first normal pixel appears on */
        !           205: #define SCANLINES_PER_FRAME    313      /* Number of scan lines per frame */
        !           206: #define CYCLES_PER_LINE      512        /* Cycles per horiztonal line scan */
        !           207: #define CYCLES_PER_FRAME    (SCANLINES_PER_FRAME*CYCLES_PER_LINE)  /* Cycles per VBL @ 50fps = 160256 */
        !           208: #define CYCLES_VBL_IN      (SCREEN_START_HBL*CYCLES_PER_LINE)  /*((28+64)*CYCLES_PER_LINE) */
        !           209: #define CYCLES_PER_SEC      (CYCLES_PER_FRAME*50)    /* Cycles per second */
        !           210: #define CYCLES_ENDLINE      (64+320+88+40)      /* DE(Display Enable) */
        !           211: #define CYCLES_HBL      (CYCLES_PER_LINE+96)    /* Cycles for first HBL - very inaccurate on ST */
        !           212: #define CYCLES_DEBUGGER      3000       /* Check debugger every 'x' cycles */
        !           213: 
        !           214: /* Illegal Opcode used to help emulation. eg. free entries are 8 to 15 inc' */
        !           215: #define  GEMDOS_OPCODE        8  /* Free op-code to intercept GemDOS trap */
        !           216: #define  RUNOLDGEMDOS_OPCODE  9  /* Free op-code to set PC to old GemDOS vector(if doesn't need to intercept) */
        !           217: #define  CONDRV_OPCODE       10  /* Free op-code to intercept set up connected drives */
        !           218: #define  TIMERD_OPCODE       11  /* Free op-code to prevent Timer D starting in GemDOS */
        !           219: #define  VDI_OPCODE          12  /* Free op-code to call VDI handlers AFTER Trap#2 */
        !           220: #define  LINEA_OPCODE        13  /* Free op-code to call handlers AFTER Line-A */
        !           221: /* Other Opcodes */
        !           222: #define RTS_OPCODE  BIN16(0,1,0,0,1,1,1,0,0,1,1,1,0,1,0,1)
        !           223: #define NOP_OPCODE  BIN16(0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,1)
        !           224: #define BRAW_OPCODE  BIN16(0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0)
        !           225: 
        !           226: /* Handy invalid address for flags(24-bit address can never be this) */
        !           227: #define BRK_DISABLED      0xffffffff
        !           228: #define BRK_SINGLE_INSTRUCTION    0xfffffffe
        !           229: #define  BRK_STOP      0xfffffffd
        !           230: 
        !           231: #define PRG_HEADER_SIZE    0x1c  /* Size of header at start of ST .prg files */
        !           232: 
        !           233: /* Emulation states */
        !           234: enum {
        !           235:   EMULATION_INACTIVE,
        !           236:   EMULATION_ACTIVE
        !           237: };
        !           238: 
        !           239: extern BOOL bQuitProgram;
        !           240: extern BOOL bEmulationActive;
        !           241: extern char szName[];
        !           242: extern char szBootDiscImage[MAX_FILENAME_LENGTH];
        !           243: extern char szWorkingDir[MAX_FILENAME_LENGTH];
        !           244: extern char szCurrentDir[MAX_FILENAME_LENGTH];
        !           245: 
        !           246: extern void Main_MemorySnapShot_Capture(BOOL bSave);
        !           247: extern void Main_SysError(char *Error,char *Title);
        !           248: extern int Main_Message(char *lpText, char *lpCaption /*, unsigned int uType*/);
        !           249: extern void Main_PauseEmulation(void);
        !           250: extern void Main_UnPauseEmulation(void);
        !           251: extern void Main_EventHandler();
        !           252: extern void Main_WaitVBLEvent(void);
        !           253: extern BOOL Main_AlreadyWaitingVBLEvent(void);
        !           254: /*extern void CALLBACK Main_SoundThreadFunc( UINT wTimerID, UINT msg, DWORD dwUsers, DWORD dw1, DWORD dw2 );*/
        !           255: extern void Main_SetSpeedThreadTimer(int nMinMaxSpeed);
        !           256: 
        !           257: #endif /* ifndef MAIN_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.