filename | src/aica/aica.h |
changeset | 86:f151e63f9754 |
prev | 66:2ec5b6eb75e5 |
next | 131:4c25f1b20664 |
author | nkeynes |
date | Sun Jan 22 22:40:05 2006 +0000 (17 years ago) |
permissions | -rw-r--r-- |
last change | Add aica_enable() function for aica-only mode, disable by default Halt ARM on invalid address but leave everything else running Error if ESD can't start |
file | annotate | diff | log | raw |
nkeynes@11 | 1 | /** |
nkeynes@86 | 2 | * $Id: aica.h,v 1.8 2006-01-22 22:40:05 nkeynes Exp $ |
nkeynes@11 | 3 | * |
nkeynes@11 | 4 | * MMIO definitions for the AICA sound chip. Note that the regions defined |
nkeynes@11 | 5 | * here are relative to the SH4 memory map (0x00700000 based), rather than |
nkeynes@11 | 6 | * the ARM addresses (0x00800000 based). |
nkeynes@11 | 7 | * |
nkeynes@11 | 8 | * Copyright (c) 2005 Nathan Keynes. |
nkeynes@11 | 9 | * |
nkeynes@11 | 10 | * This program is free software; you can redistribute it and/or modify |
nkeynes@11 | 11 | * it under the terms of the GNU General Public License as published by |
nkeynes@11 | 12 | * the Free Software Foundation; either version 2 of the License, or |
nkeynes@11 | 13 | * (at your option) any later version. |
nkeynes@11 | 14 | * |
nkeynes@11 | 15 | * This program is distributed in the hope that it will be useful, |
nkeynes@11 | 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
nkeynes@11 | 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
nkeynes@11 | 18 | * GNU General Public License for more details. |
nkeynes@11 | 19 | */ |
nkeynes@11 | 20 | |
nkeynes@11 | 21 | #include "mmio.h" |
nkeynes@11 | 22 | |
nkeynes@11 | 23 | MMIO_REGION_BEGIN( 0x00700000, AICA0, "AICA Sound System 0-31" ) |
nkeynes@11 | 24 | LONG_PORT( 0x000, AICACH0, PORT_MRW, UNDEFINED, "Channel 0" ) |
nkeynes@11 | 25 | MMIO_REGION_END |
nkeynes@11 | 26 | |
nkeynes@11 | 27 | MMIO_REGION_BEGIN( 0x00701000, AICA1, "AICA Sound System 32-63" ) |
nkeynes@11 | 28 | LONG_PORT( 0x000, AICACH32, PORT_MRW, UNDEFINED, "Channel 32" ) |
nkeynes@11 | 29 | MMIO_REGION_END |
nkeynes@11 | 30 | |
nkeynes@11 | 31 | MMIO_REGION_BEGIN( 0x00702000, AICA2, "AICA Sound System Control" ) |
nkeynes@40 | 32 | LONG_PORT( 0x040, CDDA_VOL_L, PORT_MRW, 0, "CDDA Volume left" ) |
nkeynes@40 | 33 | LONG_PORT( 0x044, CDDA_VOL_R, PORT_MRW, 0, "CDDA Volume right" ) |
nkeynes@40 | 34 | LONG_PORT( 0x800, VOL_MASTER, PORT_MRW, UNDEFINED, "Master volume" ) |
nkeynes@61 | 35 | LONG_PORT( 0x808, AICA_UNK7, PORT_MRW, 0, "AICA ??? 7" ) |
nkeynes@66 | 36 | LONG_PORT( 0x880, AICA_UNK6, PORT_MRW, 0, "AICA ??? 6" ) |
nkeynes@66 | 37 | LONG_PORT( 0x890, AICA_TIMER, PORT_MRW, 0, "AICA Timer" ) |
nkeynes@46 | 38 | LONG_PORT( 0x89C, AICA_UNK1, PORT_MRW, 0, "AICA ??? 1" ) |
nkeynes@66 | 39 | LONG_PORT( 0x8A4, AICA_TCR, PORT_MRW, 0, "AICA Timer Control?" ) |
nkeynes@46 | 40 | BYTE_PORT( 0x8A8, AICA_UNK3, PORT_MRW, 0, "AICA ??? 3" ) |
nkeynes@46 | 41 | BYTE_PORT( 0x8AC, AICA_UNK4, PORT_MRW, 0, "AICA ??? 4" ) |
nkeynes@46 | 42 | BYTE_PORT( 0x8B0, AICA_UNK5, PORT_MRW, 0, "AICA ??? 5" ) |
nkeynes@86 | 43 | LONG_PORT( 0xC00, AICA_RESET,PORT_MRW, 1, "AICA reset" ) |
nkeynes@62 | 44 | LONG_PORT( 0xD00, AICA_IRQ, PORT_MR, 0, "AICA IRQ Pending" ) |
nkeynes@61 | 45 | LONG_PORT( 0xD04, AICA_IRQCLEAR, PORT_MRW, 0, "AICA IRQ Clear" ) |
nkeynes@11 | 46 | MMIO_REGION_END |
nkeynes@11 | 47 | |
nkeynes@11 | 48 | MMIO_REGION_LIST_BEGIN( spu ) |
nkeynes@11 | 49 | MMIO_REGION( AICA0 ) |
nkeynes@11 | 50 | MMIO_REGION( AICA1 ) |
nkeynes@11 | 51 | MMIO_REGION( AICA2 ) |
nkeynes@11 | 52 | MMIO_REGION_LIST_END |
nkeynes@11 | 53 | |
nkeynes@11 | 54 | void aica_init( void ); |
nkeynes@11 | 55 | void aica_reset( void ); |
nkeynes@86 | 56 | void aica_enable( void ); |
nkeynes@61 | 57 | |
nkeynes@61 | 58 | #define AICA_EVENT_TIMER 2 |
nkeynes@61 | 59 | #define AICA_EVENT_OTHER 5 |
nkeynes@61 | 60 | |
nkeynes@61 | 61 | void aica_event( int event ); |
nkeynes@66 | 62 | void aica_write_channel( int channel, uint32_t addr, uint32_t val ); |
nkeynes@66 | 63 | |
nkeynes@66 | 64 | /** |
nkeynes@66 | 65 | * The AICA core runs at 44100 samples/second, regardless of what we're |
nkeynes@66 | 66 | * actually outputing. |
nkeynes@66 | 67 | */ |
nkeynes@66 | 68 | #define AICA_SAMPLE_RATE 44100 |
nkeynes@66 | 69 | |
nkeynes@66 | 70 | /** |
nkeynes@66 | 71 | * This is only used to determine number of instructions to execute |
nkeynes@66 | 72 | * per sample, which isn't cycle accurate at the moment. |
nkeynes@66 | 73 | */ |
nkeynes@66 | 74 | #define AICA_SAMPLE_PERIOD (1000000000 / 44100) |
.