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

1.1       root        1: /*
1.1.1.6   root        2:   Hatari - main.h
                      3: 
                      4:   This file is distributed under the GNU Public License, version 2 or at
                      5:   your option any later version. Read the file gpl.txt for details.
1.1       root        6: */
                      7: 
1.1.1.6   root        8: #ifndef HATARI_MAIN_H
                      9: #define HATARI_MAIN_H
1.1       root       10: 
                     11: typedef int BOOL;
                     12: 
1.1.1.10! root       13: #define PROG_NAME      "Hatari v0.70" /* Name, version for window title */
        !            14: #define PROG_VERSION   "v0.70"
1.1       root       15: 
                     16: 
                     17: #include <stdio.h>
                     18: #include <stdlib.h>
                     19: #include <string.h>
                     20: #include <math.h>
                     21: #include <time.h>
                     22: 
1.1.1.8   root       23: #include <SDL_types.h>
                     24: 
                     25: 
1.1       root       26: #ifndef FALSE
                     27: #define FALSE 0
                     28: #define TRUE (!0)
                     29: #endif
                     30: 
                     31: #define CALL_VAR(func)  { ((void(*)(void))func)(); }
                     32: 
                     33: 
1.1.1.4   root       34: /* 68000 operand sizes */
1.1       root       35: #define SIZE_BYTE  1
                     36: #define SIZE_WORD  2
                     37: #define SIZE_LONG  4
                     38: 
                     39: /* 68000 Register defines */
                     40: enum {
                     41:   REG_D0,    /* D0.. */
                     42:   REG_D1,
                     43:   REG_D2,
                     44:   REG_D3,
                     45:   REG_D4,
                     46:   REG_D5,
                     47:   REG_D6,
                     48:   REG_D7,    /* ..D7 */
                     49:   REG_A0,    /* A0.. */
                     50:   REG_A1,
                     51:   REG_A2,
                     52:   REG_A3,
                     53:   REG_A4,
                     54:   REG_A5,
                     55:   REG_A6,
1.1.1.8   root       56:   REG_A7,    /* ..A7 (also SP) */
1.1       root       57: };
                     58: 
                     59: /* 68000 Condition code's */
1.1.1.10! root       60: #define SR_AUX              0x0010
        !            61: #define SR_NEG              0x0008
        !            62: #define SR_ZERO             0x0004
        !            63: #define SR_OVERFLOW         0x0002
        !            64: #define SR_CARRY            0x0001
        !            65: 
        !            66: #define SR_CLEAR_AUX        0xffef
        !            67: #define SR_CLEAR_NEG        0xfff7
        !            68: #define SR_CLEAR_ZERO       0xfffb
        !            69: #define SR_CLEAR_OVERFLOW   0xfffd
        !            70: #define SR_CLEAR_CARRY      0xfffe
        !            71: 
        !            72: #define SR_CCODE_MASK       (SR_AUX|SR_NEG|SR_ZERO|SR_OVERFLOW|SR_CARRY)
        !            73: #define SR_MASK             0xFFE0
        !            74: 
        !            75: #define SR_TRACEMODE        0x8000
        !            76: #define SR_SUPERMODE        0x2000
        !            77: #define SR_IPL              0x0700
1.1       root       78: 
1.1.1.10! root       79: #define SR_CLEAR_IPL        0xf8ff
1.1       root       80: #define SR_CLEAR_TRACEMODE  0x7fff
                     81: #define SR_CLEAR_SUPERMODE  0xdfff
                     82: 
                     83: /* Exception vectors */
1.1.1.6   root       84: #define  EXCEPTION_BUSERROR   0x00000008
1.1       root       85: #define  EXCEPTION_ADDRERROR  0x0000000c
1.1.1.6   root       86: #define  EXCEPTION_ILLEGALINS 0x00000010
                     87: #define  EXCEPTION_DIVZERO    0x00000014
                     88: #define  EXCEPTION_CHK        0x00000018
                     89: #define  EXCEPTION_TRAPV      0x0000001c
                     90: #define  EXCEPTION_TRACE      0x00000024
                     91: #define  EXCEPTION_LINE_A     0x00000028
                     92: #define  EXCEPTION_LINE_F     0x0000002c
                     93: #define  EXCEPTION_HBLANK     0x00000068
                     94: #define  EXCEPTION_VBLANK     0x00000070
                     95: #define  EXCEPTION_TRAP0      0x00000080
                     96: #define  EXCEPTION_TRAP1      0x00000084
                     97: #define  EXCEPTION_TRAP2      0x00000088
                     98: #define  EXCEPTION_TRAP13     0x000000B4
                     99: #define  EXCEPTION_TRAP14     0x000000B8
1.1       root      100: 
1.1.1.6   root      101: /* Find IPL - don't forget to call MakeSR() before you use it! */
1.1       root      102: #define FIND_IPL    ((SR>>8)&0x7)
                    103: 
                    104: /* Size of 68000 instructions */
                    105: #define MAX_68000_INSTRUCTION_SIZE  10  /* Longest 68000 instruction is 10 bytes(6+4) */
                    106: #define MIN_68000_INSTRUCTION_SIZE  2   /* Smallest 68000 instruction is 2 bytes(ie NOP) */
                    107: 
                    108: /*
                    109:   All the following processor timings are based on a bog standard 8MHz 68000 as found in all standard ST's
                    110: 
                    111:   Clock cycles per line (50Hz)      : 512
                    112:   NOPs per scan line (50Hz)         : 128
1.1.1.7   root      113:   Scan lines per VBL (50Hz)         : 313 (64 at top,200 screen,49 bottom)
1.1       root      114: 
                    115:   Clock cycles per line (60Hz)      : 508
                    116:   NOPs per scan line (60Hz)         : 127
1.1.1.7   root      117:   Scan lines per VBL (60Hz)         : 263
1.1       root      118: 
1.1.1.7   root      119:   Clock cycles per VBL (50Hz)       : 160256
                    120:   NOPs per VBL (50Hz)               : 40064
1.1       root      121: 
                    122:   Pixels per clock cycle (low res)  : 1
                    123:   Pixels per clock cycle (med res)  : 2
                    124:   Pixels per clock cycle (high res) : 4
                    125:   Pixels per NOP (low res)          : 4
                    126:   Pixels per NOP (med res)          : 8
                    127:   Pixels per NOP (high res)         : 16
                    128: */
1.1.1.6   root      129: #define SCREEN_START_HBL   64           /* This is usually the first line of the displayed screen */
1.1       root      130: #define SCREEN_HEIGHT_HBL  200          /* This is usually the height of the screen */
                    131: #define FIRST_VISIBLE_HBL  (SCREEN_START_HBL-OVERSCAN_TOP)    /* Normal screen starts 64 lines in, top border is 28 lines */
1.1.1.6   root      132: #define NUM_VISIBLE_LINES  (OVERSCAN_TOP+SCREEN_HEIGHT_HBL+OVERSCAN_BOTTOM)  /* Number of visible screen lines including top/bottom borders */
1.1       root      133: 
                    134: /* Assumes 32 pixels left+right */
                    135: #define SCREENBYTES_LEFT    16          /* Bytes for left border in ST screen */
1.1.1.6   root      136: #define SCREENBYTES_MIDDLE  160         /* Middle(320 pixels) */
                    137: #define SCREENBYTES_RIGHT   16          /* right border */
1.1       root      138: #define SCREENBYTES_LINE    (SCREENBYTES_LEFT+SCREENBYTES_MIDDLE+SCREENBYTES_RIGHT)
                    139: 
                    140: /* Overscan values */
1.1.1.6   root      141: #define OVERSCAN_LEFT       (SCREENBYTES_LEFT*2)    /* Number of pixels in each border */
1.1       root      142: #define OVERSCAN_RIGHT      (SCREENBYTES_RIGHT*2)
1.1.1.6   root      143: #define OVERSCAN_TOP        29
                    144: #define OVERSCAN_BOTTOM     38
                    145: #define OVERSCAN_MIDDLE     320         /* Number of pixels across screen(low res) */
                    146: 
                    147: #define SCREEN_START_CYCLE  96          /* Cycle first normal pixel appears on */
                    148: #define SCANLINES_PER_FRAME 313         /* Number of scan lines per frame */
                    149: #define CYCLES_PER_LINE     512         /* Cycles per horiztonal line scan */
1.1.1.7   root      150: #define CYCLES_VBL_IN       (SCREEN_START_HBL*CYCLES_PER_LINE)     /* ((28+64)*CYCLES_PER_LINE) */
1.1       root      151: #define CYCLES_PER_FRAME    (SCANLINES_PER_FRAME*CYCLES_PER_LINE)  /* Cycles per VBL @ 50fps = 160256 */
1.1.1.6   root      152: #define CYCLES_PER_SEC      (CYCLES_PER_FRAME*50) /* Cycles per second */
                    153: #define CYCLES_ENDLINE      (64+320+88+40)        /* DE(Display Enable) */
                    154: #define CYCLES_HBL          (CYCLES_PER_LINE+96)  /* Cycles for first HBL - very inaccurate on ST */
1.1       root      155: 
                    156: /* Illegal Opcode used to help emulation. eg. free entries are 8 to 15 inc' */
                    157: #define  GEMDOS_OPCODE        8  /* Free op-code to intercept GemDOS trap */
1.1.1.7   root      158: #define  SYSINIT_OPCODE      10  /* Free op-code to initialize system (connected drives etc.) */
1.1       root      159: #define  VDI_OPCODE          12  /* Free op-code to call VDI handlers AFTER Trap#2 */
1.1.1.6   root      160: 
1.1       root      161: 
                    162: #define PRG_HEADER_SIZE    0x1c  /* Size of header at start of ST .prg files */
                    163: 
                    164: 
                    165: extern BOOL bQuitProgram;
1.1.1.2   root      166: extern BOOL bEnableDebug;
1.1       root      167: extern BOOL bEmulationActive;
1.1.1.8   root      168: extern char szBootDiscImage[FILENAME_MAX];
                    169: extern char szWorkingDir[FILENAME_MAX];
                    170: 
1.1       root      171: 
                    172: extern void Main_MemorySnapShot_Capture(BOOL bSave);
                    173: extern void Main_PauseEmulation(void);
                    174: extern void Main_UnPauseEmulation(void);
1.1.1.9   root      175: extern void Main_WarpMouse(int x, int y);
                    176: extern void Main_EventHandler(void);
1.1       root      177: 
1.1.1.6   root      178: #endif /* ifndef HATARI_MAIN_H */

unix.superglobalmegacorp.com

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