Search
lxdream.org :: lxdream/src/aica/aica.h
lxdream 0.9.1
released Jun 29
Download Now
filename src/aica/aica.h
changeset 131:4c25f1b20664
prev86:f151e63f9754
next301:1ace395139c3
author nkeynes
date Tue Dec 19 09:51:35 2006 +0000 (17 years ago)
permissions -rw-r--r--
last change First cut of port 576890 (sysreset) and ide enable/disable
file annotate diff log raw
nkeynes@11
     1
/**
nkeynes@131
     2
 * $Id: aica.h,v 1.9 2006-03-30 11:27:11 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@131
    48
MMIO_REGION_BEGIN( 0x00710000, AICARTC, "AICA Sound System RTC" )
nkeynes@131
    49
     LONG_PORT( 0x000, AICA_RTCHI, PORT_R, 0, "RTC High 16-bits" )
nkeynes@131
    50
     LONG_PORT( 0x004, AICA_RTCLO, PORT_R, 0, "RTC Low 16-bits" )
nkeynes@131
    51
MMIO_REGION_END
nkeynes@131
    52
nkeynes@11
    53
MMIO_REGION_LIST_BEGIN( spu )
nkeynes@11
    54
    MMIO_REGION( AICA0 )
nkeynes@11
    55
    MMIO_REGION( AICA1 )
nkeynes@11
    56
    MMIO_REGION( AICA2 )
nkeynes@131
    57
    MMIO_REGION( AICARTC )
nkeynes@11
    58
MMIO_REGION_LIST_END
nkeynes@11
    59
nkeynes@11
    60
void aica_init( void );
nkeynes@11
    61
void aica_reset( void );
nkeynes@86
    62
void aica_enable( void );
nkeynes@61
    63
nkeynes@61
    64
#define AICA_EVENT_TIMER 2
nkeynes@61
    65
#define AICA_EVENT_OTHER 5
nkeynes@61
    66
nkeynes@61
    67
void aica_event( int event );
nkeynes@66
    68
void aica_write_channel( int channel, uint32_t addr, uint32_t val );
nkeynes@66
    69
nkeynes@66
    70
/**
nkeynes@66
    71
 * The AICA core runs at 44100 samples/second, regardless of what we're
nkeynes@66
    72
 * actually outputing.
nkeynes@66
    73
 */
nkeynes@66
    74
#define AICA_SAMPLE_RATE 44100
nkeynes@66
    75
nkeynes@66
    76
/**
nkeynes@66
    77
 * This is only used to determine number of instructions to execute
nkeynes@66
    78
 * per sample, which isn't cycle accurate at the moment.
nkeynes@66
    79
 */
nkeynes@66
    80
#define AICA_SAMPLE_PERIOD (1000000000 / 44100)
.