#define MONGOOSE_MONGOOSE 0x10000
struct mongoose_regs {
u_int8_t version;
u_int8_t lock;
u_int8_t liowait;
u_int8_t clock;
u_int8_t reserved[0xf000 - 4];
u_int8_t intack;
};
#define MONGOOSE_CTRL 0x00000
#define MONGOOSE_NINTS 16
struct mongoose_ctrl {
struct dma0 {
struct {
u_int16_t addr : 8;
u_int16_t count: 8;
} ch[4];
u_int8_t command;
u_int8_t request;
u_int8_t mask_channel;
u_int8_t mode;
u_int8_t clr_byte_ptr;
u_int8_t master_clear;
u_int8_t mask_clear;
u_int8_t master_write;
u_int8_t pad[15];
} dma0;
u_int8_t irr0;
u_int8_t imr0;
u_int8_t iack;
u_int8_t pad0[29];
struct timers {
u_int8_t sysclk;
u_int8_t refresh;
u_int8_t spkr;
u_int8_t ctrl;
u_int32_t pad;
} tmr[2];
u_int8_t pad1[16];
u_int16_t inmi;
u_int8_t pad2[30];
struct {
u_int8_t pad0;
u_int8_t ch2;
u_int8_t ch3;
u_int8_t ch1;
u_int8_t pad1;
u_int8_t pad2[3];
u_int8_t ch0;
u_int8_t pad4;
u_int8_t ch6;
u_int8_t ch7;
u_int8_t ch5;
u_int8_t pad5[3];
u_int8_t pad6[16];
} pr;
u_int8_t irr1;
u_int8_t imr1;
u_int8_t pad3[30];
struct dma1 {
struct {
u_int32_t addr : 16;
u_int32_t count: 16;
} ch[4];
u_int16_t command;
u_int16_t request;
u_int16_t mask_channel;
u_int16_t mode;
u_int16_t clr_byte_ptr;
u_int16_t master_clear;
u_int16_t mask_clear;
u_int16_t master_write;
} dma1;
u_int8_t master_req;
u_int8_t pad4[31];
u_int8_t pad5[0x3d0];
u_int8_t pic0;
u_int8_t pic1;
u_int8_t pad6[0x460];
u_int8_t nmi;
u_int8_t nmi_ext;
#define MONGOOSE_NMI_BUSRESET 0x01
#define MONGOOSE_NMI_IOPORT_EN 0x02
#define MONGOOSE_NMI_EN 0x04
#define MONGOOSE_NMI_MTMO_EN 0x08
#define MONGOOSE_NMI_RES4 0x10
#define MONGOOSE_NMI_IOPORT_INT 0x20
#define MONGOOSE_NMI_MASTER_INT 0x40
#define MONGOOSE_NMI_INT 0x80
};
#define MONGOOSE_IOMAP 0x100000