]> git.sur5r.net Git - cc65/commitdiff
Added C declarations of the NES's I/O registers to <nes.h>. 229/head
authorGreg King <gregdk@users.sf.net>
Thu, 12 Nov 2015 10:40:47 +0000 (05:40 -0500)
committerGreg King <gregdk@users.sf.net>
Thu, 12 Nov 2015 10:40:47 +0000 (05:40 -0500)
include/nes.h

index 7bf56c9952dc03a8e68f57edfd83cb5fb6e81300..934b8a8025cef7055544297ad1ab209c8076e823 100644 (file)
 #define KEY_LEFT        0x40
 #define KEY_RIGHT       0x80
 
+/* Define hardware */
+
+/* Picture Processing Unit */
+struct __ppu {
+    unsigned char control;
+    unsigned char mask;                 /* color; show sprites, background */
+      signed char volatile const status;
+    struct {
+        unsigned char address;
+        unsigned char data;
+    } sprite;
+    unsigned char scroll;
+    struct {
+        unsigned char address;
+        unsigned char data;
+    } vram;
+};
+#define PPU             (*(struct __ppu*)0x2000)
+#define SPRITE_DMA      (APU.sprite.dma)
+
+/* Audio Processing Unit */
+struct __apu {
+    struct {
+        unsigned char control;          /* duty, counter halt, volume/envelope */
+        unsigned char ramp;
+        unsigned char period_low;       /* timing */
+        unsigned char len_period_high;  /* length, timing */
+    } pulse[2];
+    struct {
+        unsigned char counter;          /* counter halt, linear counter */
+        unsigned char unused;
+        unsigned char period_low;       /* timing */
+        unsigned char len_period_high;  /* length, timing */
+    } triangle;
+    struct {
+        unsigned char control;          /* counter halt, volume/envelope */
+        unsigned char unused;
+        unsigned char period;           /* loop, timing */
+        unsigned char len;              /* length */
+    } noise;
+    struct {
+        unsigned char control;          /* IRQ, loop, rate */
+        unsigned char output;           /* output value */
+        unsigned char address;
+        unsigned char length;
+    } delta_mod;                        /* delta pulse-code modulation */
+    struct {
+        unsigned char dma;
+    } sprite;
+      signed char volatile status;
+    unsigned char unused;
+    unsigned char fcontrol;
+};
+#define APU             (*(struct __apu*)0x4000)
+
+#define JOYPAD          ((unsigned char volatile const[2])0x4016)
+
 /* The addresses of the static drivers */
 extern void nes_stdjoy_joy[];       /* Referred to by joy_static_stddrv[] */
 extern void nes_64_56_2_tgi[];      /* Referred to by tgi_static_stddrv[] */