nkeynes@30: /** nkeynes@561: * $Id$ nkeynes@30: * nkeynes@30: * Miscellaneous and not-really-implemented SH4 peripheral modules. Also nkeynes@30: * responsible for including the IMPL side of the SH4 MMIO pages. nkeynes@30: * Most of these will eventually be split off into their own files. nkeynes@30: * nkeynes@30: * Copyright (c) 2005 Nathan Keynes. nkeynes@30: * nkeynes@30: * This program is free software; you can redistribute it and/or modify nkeynes@30: * it under the terms of the GNU General Public License as published by nkeynes@30: * the Free Software Foundation; either version 2 of the License, or nkeynes@30: * (at your option) any later version. nkeynes@30: * nkeynes@30: * This program is distributed in the hope that it will be useful, nkeynes@30: * but WITHOUT ANY WARRANTY; without even the implied warranty of nkeynes@30: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nkeynes@30: * GNU General Public License for more details. nkeynes@30: */ nkeynes@35: #define MODULE sh4_module nkeynes@30: nkeynes@1: #include "dream.h" nkeynes@428: #include "dreamcast.h" nkeynes@1: #include "mem.h" nkeynes@19: #include "clock.h" nkeynes@428: #include "sh4/sh4core.h" nkeynes@428: #include "sh4/sh4mmio.h" nkeynes@1: #define MMIO_IMPL nkeynes@428: #include "sh4/sh4mmio.h" nkeynes@1: nkeynes@1: /********************************* BSC *************************************/ nkeynes@1: nkeynes@323: uint32_t bsc_input = 0x0300; nkeynes@1: nkeynes@323: uint16_t bsc_read_pdtra() nkeynes@1: { nkeynes@323: int i; nkeynes@323: uint32_t pctra = MMIO_READ( BSC, PCTRA ); nkeynes@323: uint16_t output = MMIO_READ( BSC, PDTRA ); nkeynes@323: uint16_t input_mask = 0, output_mask = 0; nkeynes@323: for( i=0; i<16; i++ ) { nkeynes@736: int bits = (pctra >> (i<<1)) & 0x03; nkeynes@736: if( bits == 2 ) input_mask |= (1<> (i<<1)) & 0x03; nkeynes@736: if( bits == 2 ) input_mask |= (1<>16) & input_mask) | output; nkeynes@323: nkeynes@1: } nkeynes@1: nkeynes@336: MMIO_REGION_WRITE_DEFFN(BSC) nkeynes@323: nkeynes@1: int32_t mmio_region_BSC_read( uint32_t reg ) nkeynes@1: { nkeynes@1: int32_t val; nkeynes@1: switch( reg ) { nkeynes@736: case PDTRA: nkeynes@736: val = bsc_read_pdtra(); nkeynes@736: break; nkeynes@736: case PDTRB: nkeynes@736: val = bsc_read_pdtrb(); nkeynes@736: break; nkeynes@736: default: nkeynes@736: val = MMIO_READ( BSC, reg ); nkeynes@1: } nkeynes@1: return val; nkeynes@1: } nkeynes@1: nkeynes@1: /********************************* UBC *************************************/ nkeynes@1: nkeynes@830: int32_t mmio_region_UBC_read( uint32_t reg ) nkeynes@830: { nkeynes@830: return MMIO_READ( UBC, reg ); nkeynes@830: } nkeynes@830: nkeynes@830: void mmio_region_UBC_write( uint32_t reg, uint32_t val ) nkeynes@830: { nkeynes@830: switch( reg ) { nkeynes@830: case BAMRA: nkeynes@830: case BAMRB: nkeynes@830: val &= 0x0F; nkeynes@830: break; nkeynes@830: case BBRA: nkeynes@830: case BBRB: nkeynes@830: val &= 0x07F; nkeynes@830: if( val != 0 ) { nkeynes@830: WARN( "UBC not implemented" ); nkeynes@830: } nkeynes@830: break; nkeynes@830: case BRCR: nkeynes@830: val &= 0xC4C9; nkeynes@830: break; nkeynes@830: } nkeynes@830: MMIO_WRITE( UBC, reg, val ); nkeynes@830: } nkeynes@1: nkeynes@1: nkeynes@1: /********************************** SCI *************************************/ nkeynes@1: nkeynes@1: MMIO_REGION_STUBFNS( SCI ) nkeynes@1: