home *** CD-ROM | disk | FTP | other *** search
/ ST-Computer Leser 2002 January / STC_CD_01_2002.iso / JAGUAR / JAG_SRC / SOURCE / JAGUAR.H < prev    next >
C/C++ Source or Header  |  2001-08-14  |  32KB  |  670 lines

  1. ////////////////////////////////////////////////////////////////////////////////
  2. // Jagulator: Atari Jaguar Console Emulation Project (jaguar.h)
  3. // -----------------------------------------------------------------------------
  4. // Jagulator is the Copyright (c) RealityMan 1998-2001 and is provided "as is" 
  5. // without any expressed or implied warranty. I have no Trademarks, Legal or 
  6. // otherwise. Atari, Jaguar and the Atari Logo are copyright Hasbro Inc. All 
  7. // other Copyrights and Trademarks are acknowledged. This project is in no way 
  8. // linked to Atari/Hasbro or other associated Atari companies.                
  9.  
  10. #ifndef JAGUAR_H
  11. #define JAGUAR_H
  12.  
  13. ////////////////////////////////////////////////////////////////////////////////
  14. // Generic Defines 
  15.  
  16. #define DRAM         0x000000          // Physical Start of RAM          
  17. #define USERRAM      0x004000          // Start of Available RAM         
  18. #define ENDRAM       0x200000          // End of RAM                     
  19. #define INITSTACK    (ENDRAM-4)        // Recommended Stack Location     
  20.  
  21. #define LEVEL0       0x100             // 68000 Level 0 Autovector       
  22. #define USER0        0x100             // Pseudonym                      
  23.  
  24. ////////////////////////////////////////////////////////////////////////////////
  25. // Masks for INT1 CPU Interrupt Control 
  26.  
  27. #define C_VIDENA     0x0001            // Enable CPU Video Interrupts    
  28. #define C_GPUENA     0x0002            // Enable CPU GPU Interrupts      
  29. #define C_OPENA      0x0004            // Enable CPU OP Interrupts
  30. #define C_PITENA     0x0008            // Enable CPU PIT Interrupts
  31. #define C_JERENA     0x0010            // Enable CPU Jerry Interrupts
  32.  
  33. #define C_VIDCLR     0x0100            // Clear CPU Video Interrupts
  34. #define C_GPUCLR     0x0200            // Clear CPU GPU Interrupts
  35. #define C_OPCLR      0x0400            // Clear CPU OP Interrupts
  36. #define C_PITCLR     0x0800            // Clear CPU PIT Interrupts
  37. #define C_JERCLR     0x1000            // Clear CPU Jerry Interrupts
  38.                                                     
  39. ////////////////////////////////////////////////////////////////////////////////
  40. // Jaguar Registers
  41.  
  42. #define BASE         0xF00000          // TOM Internal Register Base
  43. #define MEMCON1      0xF00000
  44. #define MEMCON2      0xF00002
  45.  
  46. #define HC           0xF00004          // Horizontal Count
  47. #define VC           0xF00006          // Vertical Count
  48. #define LPH          0xF00008          // Horizontal Lightpen 
  49. #define LPV          0xF0000A          // Vertical LightPen
  50. #define OB0          0xF00010          // Current Object Phrase 
  51. #define OB1          0xF00012
  52. #define OB2          0xF00014
  53. #define OB3          0xF00016
  54. #define OLP          0xF00020          // Object List Pointer 
  55. #define OLPLO        0xF00020
  56. #define OLPHI        0xF00022
  57. #define ODP          0xF00024
  58. #define OBF          0xF00026          // Object Processor Flag
  59. #define VMODE        0xF00028          // Video Mode
  60. #define BORD         0xF0002A          
  61. #define BORD1        0xF0002A          // Border Color (Red & Green)
  62. #define BORD2        0xF0002C          // Border Color (Blue)
  63. #define HP           0xF0002E
  64. #define HBB          0xF00030
  65. #define HBE          0xF00032
  66. #define HS           0xF00034
  67. #define HVS          0xF00036
  68. #define HDB1         0xF00038          // Horizontal Display Begin One
  69. #define HDB2         0xF0003A          // Horizontal Display Begin Two
  70. #define HDE          0xF0003C          // Horizontal Display End
  71. #define VP           0xF0003E
  72. #define VBB          0xF00040
  73. #define VBE          0xF00042
  74. #define VS           0xF00044          // Vertical Sync
  75. #define VDB          0xF00046          // Vertical Display Begin
  76. #define VDE          0xF00048          // Vertical Display End
  77. #define VEB          0xF0004A
  78. #define VEE          0xF0004C
  79. #define VI           0xF0004E          // Vertical Interrupt
  80. #define PIT          0xF00050
  81. #define PIT0         0xF00050          // Programmable Interrupt Timer (Lo)
  82. #define PIT1         0xF00052          // Programmable Interrupt Timer (Hi)
  83. #define HEQ          0xF00054
  84. #define BG           0xF00058          // Background Color
  85.  
  86. #define INT1         0xF000E0          // CPU Interrupt Control Register
  87. #define INT2         0xF000E2          // CPU Interrupt Resume Register
  88.  
  89. #define CLUT         0xF00400          // Color Lookup Table
  90.  
  91. #define LBUFA        0xF00800          // Line Buffer A
  92. #define LBUFB        0xF01000          // Line Buffer B
  93. #define LBUFC        0xF01800          // Line Buffer Current
  94.  
  95. ////////////////////////////////////////////////////////////////////////////////
  96. // Object Processor Equates
  97.  
  98. #define O_MASK_TYPE  0x00000007        // Mask off Object Type Field
  99.  
  100. #define BITOBJ       0                 // Bitmap Object Type
  101. #define SCBITOBJ     1                 // Scaled Bitmap Object Type
  102. #define GPUOBJ       2                 // GPU Interrupt Object Type
  103. #define BRANCHOBJ    3                 // Branch Object Type
  104. #define STOPOBJ      4                 // Stop Object Type
  105.  
  106. #define O_REFLECT    0x00002000        // OR with top LONG of BITMAP Object
  107. #define O_RMW        0x00004000
  108. #define O_TRANS      0x00008000
  109. #define O_RELEASE    0x00010000
  110.  
  111. #define O_DEPTH1     (0<<12)           // DEPTH Field for BITMAP Objects
  112. #define O_DEPTH2     (1<<12)
  113. #define O_DEPTH4     (2<<12)
  114. #define O_DEPTH8     (3<<12)
  115. #define O_DEPTH16    (4<<12)
  116. #define O_DEPTH32    (5<<12)
  117.  
  118. #define O_NOGAP      (1<<15)           // Phrase GAP Between Image Phrases
  119. #define O_1GAP       (2<<15)
  120. #define O_2GAP       (3<<15)
  121. #define O_3GAP       (4<<15)
  122. #define O_4GAP       (5<<15)
  123. #define O_5GAP       (6<<15)
  124. #define O_6GAP       (7<<15)
  125.  
  126. #define O_BREQ       0                 // CC Field of BRANCH Objects 
  127. #define O_BRGT       1
  128. #define O_BRLT       2
  129. #define O_BROP       3
  130. #define O_BRHALF     4
  131.  
  132. #define O_STOPINTS   0x00000008        // Enable Interrupts in STOP Object
  133.  
  134. // Bitmap and Scaled Bitmap Defines
  135. #define O_YPOS       0x00003FF8        // Y Position
  136. #define O_HEIGHT     0x00FFC000        // Number of Data Lines in Object
  137. #define O_LINK1      0xFF000000        // Part 1 of Next Object Address
  138. #define O_LINK2      0x000007FF        // Part 2 of Next Object Address
  139. #define O_DATA       0xFFFFF800        // Address of Pixel Data
  140. #define O_XPOS       0x00000FFF        // X Position of First Pixel
  141. #define O_DEPTH      0x00007000        // Bits Per Pixel
  142. #define O_PITCH      0x00038000        // Space to be Skipped
  143. #define O_DWIDTH     0x0FFC0000        // Data Width in Phrases
  144. #define O_IWIDTH1    0xF0000000        // Part 1 of Image Width in Phrases 
  145. #define O_IWIDTH2    0x0000003F        // Part 2 of Image Width in Phrases 
  146. #define O_INDEX      0x00001FC0        // Palette Address Element
  147. #define O_FLAGS      0x0001E000        // Reflect, RMW, Trans, Release
  148. #define O_1STPIX     0x007E0000        // First Pixel to be Displayed
  149. #define O_HSCALE     0x000000FF        // Horizontal Scaling
  150. #define O_VSCALE     0x0000FF00        // Vertical Scaling
  151. #define O_REMAIN     0x00FF0000        // Scaling Remainder
  152.  
  153. ////////////////////////////////////////////////////////////////////////////////
  154. // Video Initialisation Constants
  155.  
  156. #define NTSC_WIDTH   1409              // Width of Screen in Clocks
  157. #define NTSC_HMID    823               // Middle of Screen in Clocks
  158. #define NTSC_HEIGHT  241               // Height of Screen in Pixels
  159. #define NTSC_VMID       266               // Middle of Screen in Half-Lines
  160.  
  161. #define PAL_WIDTH    1381              // Same as above for PAL 
  162. #define PAL_HMID     843
  163. #define PAL_HEIGHT   287
  164. #define PAL_VMID     322
  165.  
  166. ////////////////////////////////////////////////////////////////////////////////
  167. // The following mask will extract the PAL/NTSC flag bit from the 
  168. // CONFIG register. NTSC = Bit Set, PAL = Bit Clear               
  169.  
  170. #define VIDTYPE      0x10
  171.  
  172. ////////////////////////////////////////////////////////////////////////////////
  173. // The following are Video Mode Register Masks
  174.  
  175. #define VIDEN        0x0001            // Enable Video Interrupts 
  176.  
  177. #define CRY16        0x0000            // 16-bit CRY Mode
  178. #define RGB24        0x0002            // 24-bit RGB Mode
  179. #define DIRECT16     0x0004            // 16-bit Direct Mode
  180. #define RGB16        0x0006            // 16-bit RGB Mode
  181.  
  182. #define GENLOCK      0x0008            // Not Supported on Jaguar Console
  183. #define INCEN        0x0010            // Enable Encrustation
  184. #define BINC         0x0020            // Select Local Border Color
  185. #define CSYNC        0x0040            // Enable Composite Sync
  186. #define BGEN         0x0080            // Clear Line Buffer to BG Register
  187. #define VARMOD       0x0100            // Enable Variable Resolution mode
  188.  
  189. #define PWIDTH1      0x0000            // Pixel Dividers
  190. #define PWIDTH2      0x0200
  191. #define PWIDTH3      0x0400
  192. #define PWIDTH4      0x0600
  193. #define PWIDTH5      0x0800
  194. #define PWIDTH6      0x0A00
  195. #define PWIDTH7      0x0C00
  196. #define PWIDTH8      0x0E00  
  197.  
  198. #define G_FLAGS      0xF02100          // GPU Flags
  199. #define G_MTXC       0xF02104          // GPU Matrix Control
  200. #define G_MTXA       0xF02108          // GPU Matrix Address
  201. #define G_END        0xF0210C          // GPU Data Organization
  202. #define G_PC         0xF02110          // GPU Program Counter
  203. #define G_CTRL       0xF02114          // GPU Operation Control/Status
  204. #define G_HIDATA     0xF02118          // GPU Bus Interface High Data
  205. #define G_REMAIN     0xF0211C          // GPU Division Remainder
  206. #define G_DIVCTRL    0xF0211C          // GPU Divider Control
  207. #define G_RAM        0xF03000          // GPU Internal RAM 
  208. #define G_ENDRAM     0xF04000          // GPU End of Internal RAM
  209.  
  210. ////////////////////////////////////////////////////////////////////////////////
  211. // GPU Flags Register Equates
  212.  
  213. #define G_CPUENA     0x00000010        // CPU Interrupt Enable Bits
  214. #define G_DSPENA     0x00000020        // DSP Interrupt Enable Bits
  215. #define G_PITENA     0x00000040        // PIT Interrupt Enable Bits
  216. #define G_OPENA      0x00000080        // Object Processor Interrupt Enable Bits
  217. #define G_BLITENA    0x00000100        // Blitter Interrupt Enable Bits
  218. #define G_CPUCLR     0x00000200        // CPU Interrupt Clear Bits
  219. #define G_DSPCLR     0x00000400        // DSP Interrupt Clear Bits
  220. #define G_PITCLR     0x00000800        // PIT Interrupt Clear Bits
  221. #define G_OPCLR      0x00001000        // Object Processor Interrupt Clear Bits
  222. #define G_BLITCLR    0x00002000        // Blitter Interrupt Clear Bits
  223.  
  224. ////////////////////////////////////////////////////////////////////////////////
  225. // GPU Control/Status Register
  226.  
  227. #define GPUGO        0x00000001        // Start and Stop the GPU
  228. #define GPUINT0      0x00000004        // Generate a GPU Type 0 Interrupt
  229.  
  230. #define G_CPULAT     0x00000040        // Interrupt Latches 
  231. #define G_DSPLAT     0x00000080
  232. #define G_PITLAT     0x00000100
  233. #define G_OPLAT      0x00000200
  234. #define G_BLITLAT    0x00000400
  235.  
  236. #define A1_BASE      0xF02200          // A1 Base Address
  237. #define A1_FLAGS     0xF02204          // A1 Control Flags
  238. #define A1_CLIP      0xF02208          // A1 Clipping Size
  239. #define A1_PIXEL     0xF0220C          // A1 Pixel Pointer
  240. #define A1_STEP      0xF02210          // A1 Step (Integer Part)
  241. #define A1_FSTEP     0xF02214          // A1 Step (Fractional Part)
  242. #define A1_FPIXEL    0xF02218          // A1 Pixel Pointer (Fractional)
  243. #define A1_INC       0xF0221C          // A1 Increment (Integer Part)
  244. #define A1_FINC      0xF02220          // A1 Increment (Fractional Part)
  245.  
  246. #define A2_BASE      0xF02224          // A2 Base Address
  247. #define A2_FLAGS     0xF02228          // A2 Control Flags
  248. #define A2_MASK      0xF0222C          // A2 Address Mask
  249. #define A2_PIXEL     0xF02230          // A2 PIXEL
  250. #define A2_STEP      0xF02234          // A2 Step (Integer)
  251.  
  252. #define B_CMD        0xF02238          // Command
  253. #define B_COUNT      0xF0223C          // Counters
  254. #define B_SRCD       0xF02240          // Source Data
  255. #define B_DSTD       0xF02248          // Destination Data
  256. #define B_DSTZ       0xF02250          // Destination Z
  257. #define B_SRCZ1      0xF02258          // Source Z (Integer)
  258. #define B_SRCZ2      0xF02260          // Source Z (Fractional)
  259. #define B_PATD       0xF02268          // Pattern Data
  260. #define B_PATD0      0xF02268          
  261. #define B_PATD1      0xF0226C
  262. #define B_IINC       0xF02270          // Intensity Increment
  263. #define B_ZINC       0xF02274          // Z Increment
  264. #define B_STOP       0xF02278          // Collision Stop Control
  265.  
  266. #define B_I3         0xF0227C          // Blitter Intensity 3
  267. #define B_I2         0xF02280          // Blitter Intensity 2
  268. #define B_I1         0xF02284          // Blitter Intensity 1
  269. #define B_I0         0xF02288          // Blitter Intensity 0
  270.  
  271. #define B_Z3         0xF0228C          // Blitter Z 3
  272. #define B_Z2         0xF02290          // Blitter Z 2
  273. #define B_Z1         0xF02294          // Blitter Z 1
  274. #define B_Z0         0xF02298          // Blitter Z 0
  275.  
  276. ////////////////////////////////////////////////////////////////////////////////
  277. // BLITTER Command Register Defines 
  278.  
  279. #define SRCEN        0x00000001        // d00:     Source Data Read (Inner Loop)
  280. #define SRCENZ       0x00000002        // d01:     Source Z Read (Inner Loop)
  281. #define SRCENX       0x00000004        // d02:     Source Data Read (Realign)
  282. #define DSTEN        0x00000008        // d03:     Destination Data Read (Inner Loop)
  283. #define DSTENZ       0x00000010        // d04:     Destination Z Read (Inner Loop)
  284. #define DSTWRZ       0x00000020        // d05:     Destination Z Write (Inner Loop)
  285. #define CLIP_A1      0x00000040        // d06:     A1 Clipping Enable
  286. #define UPDA1F       0x00000100        // d08:     A1 Update Step Fraction
  287. #define UPDA1        0x00000200        // d09:     A1 Update Step
  288. #define UPDA2        0x00000400        // d10:     A2 Update Step
  289. #define DSTA2        0x00000800        // d11:     Reverse Usage of A1 and A2
  290. #define GOURD        0x00001000        // d12:     Enable Gouraud Shading
  291. #define ZBUFF        0x00002000        // d13:     Polygon Z Data Updates
  292. #define TOPBEN       0x00004000        // d14:     Intensity Carry into Byte
  293. #define TOPNEN       0x00008000        // d15:     Intensity Carry into Nibble
  294. #define PATDSEL      0x00010000        // d16:     Select Pattern Data
  295. #define ADDDSEL      0x00020000        // d17:     Diagnostic
  296.                                        // d18-d20: Z Comparator Inhibit
  297. #define ZMODELT      0x00040000        //          Source < Destination
  298. #define ZMODEEQ      0x00080000        //          Source = Destination
  299. #define ZMODEGT      0x00100000        //          Source > Destination
  300.                                        // d21-d24: Logic Function Control
  301. #define LFU_NAN      0x00200000        //          !Source & !Destination
  302. #define LFU_NA       0x00400000        //          !Source &  Destination
  303. #define LFU_AN       0x00800000        //          Source & !Destination
  304. #define LFU_A        0x01000000        //          Source &  Destination
  305. #define CMPDST       0x02000000        // d25:     Pixel Compare Pattern & Dest
  306. #define BCOMPEN      0x04000000        // d26:     Bit Compare Write Inhibit
  307. #define DCOMPEN      0x08000000        // d27:     Data Compare Write Inhibit
  308. #define BKGWREN      0x10000000        // d28:     Data Write Back
  309. #define BUSHI        0x20000000        // d29      Blitter Priority
  310. #define SRCSHADE     0x40000000        // d30:     Shade Src Data w/IINC Value
  311.  
  312. ////////////////////////////////////////////////////////////////////////////////
  313. // The following are ALL 16 possible Logical Operations of the LFUs
  314.  
  315. #define LFU_ZERO     0x00000000        // All Zeros
  316. #define LFU_NSAND    0x00200000        // NOT Source AND NOT Destination
  317. #define LFU_NSAD     0x00400000        // NOT Source AND Destination
  318. #define LFU_NOTS     0x00600000        // NOT Source
  319. #define LFU_SAND     0x00800000        // Source AND NOT Destination
  320. #define LFU_NOTD     0x00A00000        // NOT Destination
  321. #define LFU_N_SXORD  0x00C00000        // NOT (Source XOR Destination)
  322. #define LFU_NSORND   0x00E00000        // NOT Source OR NOT Destination
  323. #define LFU_SAD      0x01000000        // Source AND Destination
  324. #define LFU_SXORD    0x01200000        // Source XOR Destination
  325. #define LFU_D        0x01400000        // Destination
  326. #define LFU_NSORD    0x01600000        // NOT Source OR Destination
  327. #define LFU_S        0x01800000        // Source
  328. #define LFU_SORND    0x01A00000        // Source OR NOT Destination
  329. #define LFU_SORD     0x01C00000        // Source OR Destination
  330. #define LFU_ONE      0x01E00000        // All Ones
  331.  
  332. ////////////////////////////////////////////////////////////////////////////////
  333. // These are some Common Combinations with Less Boolean Names
  334.  
  335. #define LFU_REPLACE  0x01800000        // Source REPLACEs Destination
  336. #define LFU_XOR      0x01200000        // Source XOR with Destination
  337. #define LFU_CLEAR    0x00000000        // CLEAR Destination
  338.  
  339. ////////////////////////////////////////////////////////////////////////////////
  340. // BLITTER Flags (A1 or A2) Register Defines
  341.  
  342. // Pitch d00-d01: Distance Between Pixel Phrases
  343.  
  344. #define PITCH1       0x00000000        // 0 Phrase Gap
  345. #define PITCH2       0x00000001        // 1 Phrase Gap
  346. #define PITCH4       0x00000002        // 3 Phrase Gap
  347. #define PITCH3       0x00000003        // 2 Phrase Gap
  348.  
  349. // Pixel d03-d05: bit depth (2^n)
  350.  
  351. #define PIXEL1       0x00000000        // n = 0
  352. #define PIXEL2       0x00000008        // n = 1
  353. #define PIXEL4       0x00000010        // n = 2
  354. #define PIXEL8       0x00000018        // n = 3
  355. #define PIXEL16      0x00000020        // n = 4
  356. #define PIXEL32      0x00000028        // n = 5
  357.  
  358. // Z offset d06-d08: Offset from phrase of pixel data from its corresponding
  359. // Z data phrases.
  360.  
  361. #define ZOFFS0       0x00000000        // Offset = 0 UNUSED
  362. #define ZOFFS1       0x00000040        // Offset = 1
  363. #define ZOFFS2       0x00000080        // Offset = 2
  364. #define ZOFFS3       0x000000C0        // Offset = 3
  365. #define ZOFFS4       0x00000100        // Offset = 4
  366. #define ZOFFS5       0x00000140        // Offset = 5
  367. #define ZOFFS6       0x00000180        // Offset = 6
  368. #define ZOFFS7       0x000001C0        // Offset = 7 UNUSED
  369.  
  370. // Width d09-d14: Width used for Address Generation
  371. // This is a 6-bit floating point value in pixels
  372. // 4-bit unsigned exponent
  373. // 2-bit mantissa with implied 3rd bit of 1
  374.  
  375. #define WID2         0x00000800        // 1.00 X 2^1  ( 4<<9)
  376. #define WID4         0x00001000        // 1.00 X 2^2  ( 8<<9)
  377. #define WID6         0x00001400        // 1.10 X 2^2  (10<<9)
  378. #define WID8         0x00001800        // 1.00 x 2^3  (12<<9)
  379. #define WID10        0x00001A00        // 1.01 X 2^3  (13<<9)
  380. #define WID12        0x00001C00        // 1.10 X 2^3  (14<<9)
  381. #define WID14        0x00001E00        // 1.11 X 2^3  (15<<9)
  382. #define WID16        0x00002000        // 1.00 X 2^4  (16<<9)
  383. #define WID20        0x00002200        // 1.01 X 2^4  (17<<9)
  384. #define WID24        0x00002400        // 1.10 X 2^4  (18<<9)
  385. #define WID28        0x00002600        // 1.11 X 2^4  (19<<9)
  386. #define WID32        0x00002800        // 1.00 X 2^5  (20<<9)
  387. #define WID40        0x00002A00        // 1.01 X 2^5  (21<<9)
  388. #define WID48        0x00002C00        // 1.10 X 2^5  (22<<9)
  389. #define WID56        0x00002E00        // 1.11 X 2^5  (23<<9)
  390. #define WID64        0x00003000        // 1.00 X 2^6  (24<<9)
  391. #define WID80        0x00003200        // 1.01 X 2^6  (25<<9)
  392. #define WID96        0x00003400        // 1.10 X 2^6  (26<<9)
  393. #define WID112       0x00003600        // 1.11 X 2^6  (27<<9)
  394. #define WID128       0x00003800        // 1.00 X 2^7  (28<<9)
  395. #define WID160       0x00003A00        // 1.01 X 2^7  (29<<9)
  396. #define WID192       0x00003C00        // 1.10 X 2^7  (30<<9)
  397. #define WID224       0x00003E00        // 1.11 X 2^7  (31<<9)
  398. #define WID256       0x00004000        // 1.00 X 2^8  (32<<9)
  399. #define WID320       0x00004200        // 1.01 X 2^8  (33<<9)
  400. #define WID384       0x00004400        // 1.10 X 2^8  (34<<9)
  401. #define WID448       0x00004600        // 1.11 X 2^8  (35<<9)
  402. #define WID512       0x00004800        // 1.00 X 2^9  (36<<9)
  403. #define WID640       0x00004A00        // 1.01 X 2^9  (37<<9)
  404. #define WID768       0x00004C00        // 1.10 X 2^9  (38<<9)
  405. #define WID896       0x00004E00        // 1.11 X 2^9  (39<<9)
  406. #define WID1024      0x00005000        // 1.00 X 2^10 (40<<9)
  407. #define WID1280      0x00005200        // 1.01 X 2^10 (41<<9)
  408. #define WID1536      0x00005400        // 1.10 X 2^10 (42<<9)
  409. #define WID1792      0x00005600        // 1.11 X 2^10 (43<<9)
  410. #define WID2048      0x00005800        // 1.00 X 2^11 (44<<9)
  411. #define WID2560      0x00005A00        // 1.01 X 2^11 (45<<9)
  412. #define WID3072      0x00005C00        // 1.10 X 2^11 (46<<9)
  413. #define WID3584      0x00005E00        // 1.11 X 2^11 (47<<9)
  414.                         
  415. // X add control d16-d17: Controls the update of the X pointer on each pass
  416. // round the inner loop
  417.  
  418. #define XADDPHR      0x00000000        // 00 - Add Phrase Width and Truncate
  419. #define XADDPIX      0x00010000        // 01 - Add Pixel Size (Add 1)
  420. #define XADD0        0x00020000        // 10 - Add Zero
  421. #define XADDINC      0x00030000        // 11 - Add the Increment
  422.  
  423. // Y add control d18: 
  424. // Controls the update of the Y pointer within the inner loop.
  425. // It is overridden by the X add control if they are in add increment.
  426.  
  427. #define YADD0        0x00000000        // 00 - Add Zero
  428. #define YADD1        0x00040000        // 01 - Add 1
  429.  
  430. // X sign d19: Add or subtract pixel size if X add control = 01 (XADDPIX)
  431.  
  432. #define XSIGNADD     0x00000000        // 0 - Add Pixel Size
  433. #define XSIGNSUB     0x00080000        // 1 - Subtract Pixel Size
  434.  
  435. // Y sign d20: Add or subtract pixel size if Y add control = 01 (YADD1)
  436.  
  437. #define YSIGNADD     0x00000000        // 0 - Add 1
  438. #define YSIGNSUB     0x00100000        // 1 - Sub 1
  439.                                                      
  440. ////////////////////////////////////////////////////////////////////////////////
  441. // Jerry Registers
  442.  
  443. #define JPIT1        0xF10000          // Timer 1 Pre-Scaler
  444. #define JPIT2        0xF10002          // Timer 1 Divider
  445. #define JPIT3        0xF10004          // Timer 2 Pre-Scaler
  446. #define JPIT4        0xF10006          // Timer 2 Divider
  447.  
  448. #define J_INT        0xF10020          // Jerry Interrupt Control (to TOM)
  449.                                                      
  450. #define CLK1         0xF10010
  451. #define CLK2         0xF10012
  452. #define CHRO_CLK     0xF10014
  453.  
  454. #define R_DAC        0xF1A148
  455. #define L_I2S        0xF1A148          // Left I2S Serial
  456. #define L_DAC        0xF1A14C
  457. #define R_I2S        0xF1A14C          // Right I2S Serial
  458. #define SCLK         0xF1A150          // SSI Clock Frequency
  459. #define SMODE        0xF1A154          // SSI Control
  460.  
  461. #define ASIDATA      0xF10030
  462. #define ASICTRL      0xF10032
  463. #define ASISTAT      0xF10032
  464. #define ASICLK       0xF10034
  465.  
  466. #define JOYSTICK     0xF14000          // Joystick Register and Mute
  467. #define JOYBUTS      0xF14002          // Joystick Register
  468. #define CONFIG       0xF14002          // Also has NTSC/PAL
  469.  
  470. #define PADDLE       0xF15000
  471.  
  472. #define ANALOGJOY    0xF17C00
  473.  
  474. ////////////////////////////////////////////////////////////////////////////////
  475. // Jerry Interrupt Control Flags
  476.  
  477. #define J_EXTENA     0x0001            // Enable Jerry External Ints
  478. #define J_DSPENA     0x0002            // Enable Jerry DSP Ints
  479. #define J_TIM1ENA    0x0004            // Enable Jerry Timer 1 Ints
  480. #define J_TIM2ENA    0x0008            // Enable Jerry Timer 2 Ints
  481. #define J_ASYNENA    0x0010            // Enable Jerry Asynch Serial Ints
  482. #define J_SYNENA     0x0020            // Enable Jerry Synch Serial Ints
  483.  
  484. #define J_EXTCLR     0x0100            // Clear Pending External Ints 
  485. #define J_DSPCLR     0x0200            // Clear Pending DSP Ints
  486. #define J_TIM1CLR    0x0400            // Clear Pending Timer 1 Ints
  487. #define J_TIM2CLR    0x0800            // Clear Pending Timer 2 Ints 
  488. #define J_ASYNCLR    0x1000            // Clear Pending Asynch Serial Ints
  489. #define J_SYNCLR     0x2000            // Clear Pending Synch Serial Ints
  490.  
  491. ////////////////////////////////////////////////////////////////////////////////
  492. // Joystick Equates
  493. // Bits when LONGword is formatted as below (from JOYTEST\JT_LOOP.S).
  494. // Format: xxApxxBx RLDU147* xxCxxxox 2580369#
  495.  
  496. #define JOY_UP       20                // Joypad 
  497. #define JOY_DOWN     21
  498. #define JOY_LEFT     22
  499. #define JOY_RIGHT    23
  500.  
  501. #define FIRE_A       29                // Fire Buttons 
  502. #define FIRE_B       25
  503. #define FIRE_C       13
  504. #define OPTION       9
  505. #define PAUSE        28
  506.  
  507. #define KEY_STAR     16                // Keypad 
  508. #define KEY_7        17
  509. #define KEY_4        18
  510. #define KEY_1        19
  511.  
  512. #define KEY_0        4
  513. #define KEY_8        5
  514. #define KEY_5        6
  515. #define KEY_2        7
  516.  
  517. #define KEY_HASH     0
  518. #define KEY_9        1  
  519. #define KEY_6        2
  520. #define KEY_3        3
  521.  
  522. // AND Joyedge with this - Joypad was Pressed if Result is not 0
  523. #define ANY_JOY      0x00F00000
  524. // AND Joyedge with this - A,B C Option or Pause was Pressed if Result is not 0
  525. #define ANY_FIRE     0x32002200
  526. // AND Joyedge with this - 123456789*0# was Pressed if Result is not 0
  527. #define ANY_KEY      0x000F00FF
  528.  
  529. ////////////////////////////////////////////////////////////////////////////////
  530. // ROM Tables Built into Jerry - 128 Samples Each
  531. // 16 Bit Samples Sign Extended to 32
  532.  
  533. #define ROM_TABLE    0xF1D000          // Base of Tables
  534.  
  535. #define ROM_TRI      0xF1D000          // A Triangle Wave
  536. #define ROM_SINE     0xF1D200          // Full Amplitude SINE
  537. #define ROM_AMSIN    0xF1D400          // Linear (?) ramp SINE
  538. #define ROM_12W      0xF1D600          // SINE(X)+SINE(2*X) : (was ROM_SINE12W)
  539. #define ROM_CHIRP    0xF1D800          // Short Sweep
  540. #define ROM_NTRI     0xF1DA00          // Triangle with NOISE
  541. #define ROM_DELTA    0xF1DC00          // Positive Spike
  542. #define ROM_NOISE    0xF1DE00          // Noise
  543.  
  544. ////////////////////////////////////////////////////////////////////////////////
  545. // JERRY Registers (DSP)
  546.  
  547. #define D_FLAGS      0xF1A100          // DSP Flags
  548. #define D_MTXC       0xF1A104          // DSP Matrix Control
  549. #define D_MTXA       0xF1A108          // DSP Matrix Address
  550. #define D_END        0xF1A10C          // DSP Data Organisation
  551. #define D_PC         0xF1A110          // DSP Program Counter
  552. #define D_CTRL       0xF1A114          // DSP Operation Control/Status
  553. #define D_MOD        0xF1A118          // DSP Modulo Instruction Mask
  554. #define MOD_MASK     0xF1A118          // Mask for ADDQ(SUBQ)MOD
  555. #define D_REMAIN     0xF1A11C          // DSP Division Remainder
  556. #define D_DIVCTRL    0xF1A11C          // DSP Divider Control
  557. #define D_MACHI      0xF1A120          // DSP Hi Byte of MAC Operations
  558. #define D_RAM        0xF1B000          // DSP Internal RAM
  559. #define D_ENDRAM     0xF1D000
  560.  
  561. ////////////////////////////////////////////////////////////////////////////////
  562. // JERRY Flag Register Equates
  563.  
  564. #define D_CPUENA     0x00000010        // CPU Interrupt Enable Bit
  565. #define D_I2SENA     0x00000020        // I2S Interrupt Enable Bit
  566. #define D_TIM1ENA    0x00000040        // Timer 1 Interrupt Enable Bit
  567. #define D_TIM2ENA    0x00000080        // Timer 2 Interrupt Enable Bit
  568. #define D_EXT0ENA    0x00000100        // External Interrupt 0 Enable Bit
  569. #define D_EXT1ENA    0x00010000        // External Interrupt 1 Enable Bit
  570.  
  571. #define D_CPUCLR     0x00000200        // CPU Interrupt Clear Bit
  572. #define D_I2SCLR     0x00000400        // I2S Interrupt Clear Bit
  573. #define D_TIM1CLR    0x00000800        // Timer 1 Interrupt Clear Bit
  574. #define D_TIM2CLR    0x00001000        // Timer 2 Interrupt Clear Bit
  575. #define D_EXT0CLR    0x00002000        // External Interrupt 0 Clear Bit
  576. #define D_EXT1CLR    0x00020000        // External Interrupt 1 Clear Bit
  577.  
  578. ////////////////////////////////////////////////////////////////////////////////
  579. // JERRY Control/Status Register
  580.  
  581. #define DSPGO        0x00000001        // Start DSP 
  582. #define DSPINT0      0x00000004        // Generate a DSP Interrupt 0
  583.  
  584. #define D_CPULAT     0x00000040        // Interrupt Latches
  585. #define D_I2SLAT     0x00000080
  586. #define D_TIM1LAT    0x00000100
  587. #define D_TIM2LAT    0x00000200
  588. #define D_EXT1LAT    0x00000400
  589. #define D_EXT2LAT    0x00010000
  590.  
  591. ////////////////////////////////////////////////////////////////////////////////
  592. // JERRY Modulo Instruction Masks
  593.  
  594. #define MODMASK2     0xFFFFFFFE        // 2 Byte Circular Buffer
  595. #define MODMASK4     0xFFFFFFFC        // 4 Byte Circular Buffer
  596. #define MODMASK8     0xFFFFFFF8        // 8 Byte Circular Buffer
  597. #define MODMASK16    0xFFFFFFF0        // 16 Byte Circular Buffer
  598. #define MODMASK32    0xFFFFFFE0        // 32 Byte Circular Buffer
  599. #define MODMASK64    0xFFFFFFC0        // 64 Byte Circular Buffer
  600. #define MODMASK128   0xFFFFFF80        // 128 Byte Circular Buffer
  601. #define MODMASK256   0xFFFFFF00        // 256 Byte Circular Buffer
  602. #define MODMASK512   0xFFFFFE00        // 512 Byte Circular Buffer
  603. #define MODMASK1K    0xFFFFFC00        // 1k Circular Buffer 
  604. #define MODMASK2K    0xFFFFF800        // 2k Circular Buffer
  605. #define MODMASK4K    0xFFFFF000        // 4k Circular Buffer
  606. #define MODMASK8K    0xFFFFE000        // 8k Circular Buffer
  607. #define MODMASK16K   0xFFFFC000        // 16k Circular Buffer
  608. #define MODMASK32K   0xFFFF8000        // 32k Circular Buffer
  609. #define MODMASK64K   0xFFFF0000        // 64k Circular Buffer
  610. #define MODMASK128K  0xFFFE0000        // 128k Circular Buffer
  611. #define MODMASK256K  0xFFFC0000        // 256k Circular Buffer
  612. #define MODMASK512K  0xFFF80000        // 512k Circular Buffer
  613. #define MODMASK1M    0xFFF00000        // 1M Circular Buffer
  614.  
  615. ////////////////////////////////////////////////////////////////////////////////
  616. // SHARED Equates for TOM (GPU) and JERRY (DSP)
  617.  
  618. // Control/Status Registers
  619.  
  620. #define RISCGO       0x00000001        // Start GPU or DSP
  621. #define CPUINT       0x00000002        // Allow the GPU/DSP to interrupt CPU
  622. #define FORCEINT0    0x00000004        // Cause an INT 0 on GPU or DSP
  623. #define SINGLE_STEP  0x00000008        // Enter SINGLE_STEP mode
  624. #define SINGLE_GO    0x00000010        // Execute one instruction
  625.  
  626. #define REGPAGE      0x00004000        // Register Bank Select
  627. #define DMAEN        0x00008000        // Enable DMA LOAD and STORE
  628.  
  629. // Flags Register
  630.  
  631. #define ZERO_FLAG    0x00000001        // ALU Zero Flag
  632. #define CARRY_FLAG   0x00000002        // ALU Carry Flag
  633. #define NEGA_FLAG    0x00000004        // ALU Negative Flag
  634.  
  635. #define IMASK        0x00000008        // Interrupt Service Mask
  636.  
  637. // Matrix Control Register
  638.  
  639. #define MATRIX3      0x00000003        // Use for 3x1 Matrix
  640. #define MATRIX4      0x00000004        // etc...
  641. #define MATRIX5      0x00000005
  642. #define MATRIX6      0x00000006
  643. #define MATRIX7      0x00000007
  644. #define MATRIX8      0x00000008
  645. #define MATRIX9      0x00000009
  646. #define MATRIX10     0x0000000A
  647. #define MATRIX11     0x0000000B
  648. #define MATRIX12     0x0000000C
  649. #define MATRIX13     0x0000000D
  650. #define MATRIX14     0x0000000E
  651. #define MATRIX15     0x0000000F
  652.  
  653. #define MATROW       0x00000000        // Access Matrix by Row
  654. #define MATCOL       0x00000010        // Access Matrix by Column
  655.  
  656. // Data Organisation Register
  657.  
  658. #define BIG_IO       0x00010001        // Make I/O Big-Endian
  659. #define BIG_PIX      0x00020002        // Access Pixels in Big-Endian
  660. #define BIG_INST     0x00040004        // Fetch Instructions in Big-Endian
  661. #define BIG_END      0x00070007        
  662.  
  663. // Divide Unit Control
  664.  
  665. #define DIV_OFFSET   0x00000001        // Divide 16.16 values if set
  666.  
  667. #endif // JAGUAR_H
  668.  
  669.  
  670.