cscg22-gearboy

CSCG 2022 Challenge 'Gearboy'
git clone https://git.sinitax.com/sinitax/cscg22-gearboy
Log | Files | Refs | sfeed.txt

hardware.h (5196B)


      1/** @file msx/hardware.h
      2    Defines that let the MSX hardware registers be accessed
      3    from C.
      4*/
      5#ifndef _HARDWARE_H
      6#define _HARDWARE_H
      7
      8#include <types.h>
      9
     10#define __BYTES extern UBYTE
     11#define __BYTE_REG extern volatile UBYTE
     12
     13static volatile SFR AT(0x3E) MEMORY_CTL;
     14
     15#define MEMCTL_JOYON   0b00000000
     16#define MEMCTL_JOYOFF  0b00000100
     17#define MEMCTL_BASEON  0b00000000
     18#define MEMCTL_BASEOFF 0b00001000
     19#define MEMCTL_RAMON   0b00000000
     20#define MEMCTL_RAMOFF  0b00010000
     21#define MEMCTL_CROMON  0b00000000
     22#define MEMCTL_CROMOFF 0b00100000
     23#define MEMCTL_ROMON   0b00000000
     24#define MEMCTL_ROMOFF  0b01000000
     25#define MEMCTL_EXTON   0b00000000
     26#define MEMCTL_EXTOFF  0b10000000
     27
     28static volatile SFR AT(0x3F) JOY_CTL;
     29
     30#define JOY_P1_LATCH   0b00000010
     31#define JOY_P2_LATCH   0b00001000
     32
     33static volatile SFR AT(0x7E) VCOUNTER;
     34
     35static volatile SFR AT(0x7F) PSG;
     36
     37#define PSG_LATCH      0x80
     38
     39#define PSG_CH0        0b00000000
     40#define PSG_CH1        0b00100000
     41#define PSG_CH2        0b01000000
     42#define PSG_CH3        0b01100000
     43
     44#define PSG_VOLUME     0b00010000
     45
     46static volatile SFR AT(0x7F) HCOUNTER;
     47
     48static volatile SFR AT(0x98) VDP_DATA;
     49static volatile SFR AT(0x99) VDP_CMD;
     50static volatile SFR AT(0x99) VDP_STATUS;
     51
     52#define STATF_INT_VBL  0b10000000
     53#define STATF_9_SPR    0b01000000
     54#define STATF_SPR_COLL 0b00100000
     55
     56#define VDP_REG_MASK   0b10000000
     57#define VDP_R0         0b10000000
     58extern UBYTE shadow_VDP_R0;
     59
     60#define R0_DEFAULT     0b00000000
     61#define R0_CB_OUTPUT   0b00000000
     62#define R0_CB_INPUT    0b01000000
     63#define R0_IE2_OFF     0b00000000
     64#define R0_IE2         0b00100000
     65#define R0_IE1_OFF     0b00000000
     66#define R0_IE1         0b00010000
     67#define R0_SCR_MODE1   0b00000000
     68#define R0_SCR_MODE2   0b00000010
     69#define R0_SCR_MODE3   0b00000100
     70#define R0_ES_OFF      0b00000000
     71#define R0_ES          0b00000001
     72
     73#define VDP_R1         0b10000001
     74extern UBYTE shadow_VDP_R1;
     75
     76#define R1_DEFAULT     0b10000000
     77#define R1_DISP_OFF    0b00000000
     78#define R1_DISP_ON     0b01000000
     79#define R1_IE_OFF      0b00000000
     80#define R1_IE          0b00100000
     81#define R1_SCR_MODE1   0b00010000
     82#define R1_SCR_MODE2   0b00000000
     83#define R1_SCR_MODE3   0b00000000
     84#define R1_SPR_8X8     0b00000000
     85#define R1_SPR_16X16   0b00000010
     86#define R1_SPR_MAG     0b00000001
     87#define R1_SPR_MAG_OFF 0b00000000
     88
     89#define VDP_R2         0b10000010
     90extern UBYTE shadow_VDP_R2;
     91
     92#define R2_MAP_0x3800  0xFF
     93#define R2_MAP_0x3000  0xFD
     94#define R2_MAP_0x2800  0xFB
     95#define R2_MAP_0x2000  0xF9
     96#define R2_MAP_0x1800  0xF7
     97#define R2_MAP_0x1000  0xF5
     98#define R2_MAP_0x0800  0xF3
     99#define R2_MAP_0x0000  0xF1
    100
    101#define VDP_R3         0b10000011
    102extern UBYTE shadow_VDP_R3;
    103#define VDP_R4         0b10000100
    104extern UBYTE shadow_VDP_R4;
    105#define VDP_R5         0b10000101
    106extern UBYTE shadow_VDP_R5;
    107
    108#define R5_SAT_0x3F00  0xFF
    109#define R5_SAT_MASK    0b10000001
    110
    111#define VDP_R6         0b10000110
    112extern UBYTE shadow_VDP_R6;
    113
    114#define R6_BANK0       0xFB
    115#define R6_DATA_0x0000 0xFB
    116#define R6_BANK1       0xFF
    117#define R6_DATA_0x2000 0xFF
    118
    119#define VDP_R7         0b10000111
    120extern UBYTE shadow_VDP_R7;
    121#define VDP_RBORDER    0b10000111
    122extern UBYTE shadow_VDP_RBORDER;
    123
    124#define R7_COLOR_MASK  0b11110000
    125
    126#define VDP_R8         0b10001000
    127extern UBYTE shadow_VDP_R8;
    128#define VDP_RSCX       0b10001000
    129extern UBYTE shadow_VDP_RSCX;
    130
    131#define VDP_R9         0b10001001
    132extern UBYTE shadow_VDP_R9;
    133#define VDP_RSCY       0b10001001
    134extern UBYTE shadow_VDP_RSCY;
    135
    136#define VDP_R10        0b10001010
    137extern UBYTE shadow_VDP_R10;
    138
    139#define R10_INT_OFF    0xFF
    140#define R10_INT_EVERY  0x00
    141
    142static volatile SFR AT(0xDC) JOY_PORT1;
    143
    144#define JOY_P1_UP      0b00000001
    145#define JOY_P1_DOWN    0b00000010
    146#define JOY_P1_LEFT    0b00000100
    147#define JOY_P1_RIGHT   0b00001000
    148#define JOY_P1_SW1     0b00010000
    149#define JOY_P1_TRIGGER 0b00010000
    150#define JOY_P1_SW2     0b00100000
    151#define JOY_P2_UP      0b01000000
    152#define JOY_P2_DOWN    0b10000000
    153
    154static volatile SFR AT(0xDD) JOY_PORT2;
    155
    156#define JOY_P2_LEFT    0b00000001
    157#define JOY_P2_RIGHT   0b00000010
    158#define JOY_P2_SW1     0b00000100
    159#define JOY_P2_TRIGGER 0b00000100
    160#define JOY_P2_SW2     0b00001000
    161#define JOY_RESET      0b00010000
    162#define JOY_P1_LIGHT   0b01000000
    163#define JOY_P2_LIGHT   0b10000000
    164
    165static volatile SFR AT(0xF0) FMADDRESS;
    166static volatile SFR AT(0xF1) FMDATA;
    167static volatile SFR AT(0xF2) AUDIOCTRL;
    168
    169static volatile SFR AT(0xfc) MAP_FRAME0;
    170static volatile SFR AT(0xfd) MAP_FRAME1;
    171static volatile SFR AT(0xfe) MAP_FRAME2;
    172static volatile SFR AT(0xff) MAP_FRAME3;
    173
    174extern const UBYTE _BIOS;
    175
    176extern const UBYTE _SYSTEM;
    177
    178#define SYSTEM_PAL     0x00
    179#define SYSTEM_NTSC    0x01
    180
    181extern volatile UBYTE VDP_ATTR_SHIFT;
    182
    183#define VDP_SAT_TERM   0xD0
    184
    185#if defined(__TARGET_msxdos)
    186#define DEVICE_SCREEN_X_OFFSET 0
    187#define DEVICE_SCREEN_Y_OFFSET 0
    188#define DEVICE_SCREEN_WIDTH 32
    189#define DEVICE_SCREEN_HEIGHT 24
    190#define DEVICE_SCREEN_BUFFER_WIDTH 32
    191#define DEVICE_SCREEN_BUFFER_HEIGHT 28
    192#define DEVICE_SCREEN_MAP_ENTRY_SIZE 2
    193#define DEVICE_SPRITE_PX_OFFSET_X 0
    194#define DEVICE_SPRITE_PX_OFFSET_Y -1
    195#else
    196#error Unrecognized port
    197#endif
    198#define DEVICE_SCREEN_PX_WIDTH (DEVICE_SCREEN_WIDTH * 8)
    199#define DEVICE_SCREEN_PX_HEIGHT (DEVICE_SCREEN_HEIGHT * 8)
    200
    201#endif