diff --git a/qtBuildSystem/Mu/Mu.pro b/qtBuildSystem/Mu/Mu.pro index dfefb23..3b290c5 100644 --- a/qtBuildSystem/Mu/Mu.pro +++ b/qtBuildSystem/Mu/Mu.pro @@ -184,6 +184,7 @@ support_palm_os5{ ../../src/pxa260/pxa260Ssp.h \ ../../src/pxa260/pxa260_types.h \ ../../src/pxa260/pxa260_math64.h \ + ../../src/pxa260/pxa260Accessors.c.h \ ../../src/pxa260/pxa260.h \ ../../src/armv5te/os/os.h \ ../../src/armv5te/asmcode.h \ diff --git a/src/pxa260/pxa260Accessors.c.h b/src/pxa260/pxa260Accessors.c.h index 8f31f87..738496d 100644 --- a/src/pxa260/pxa260Accessors.c.h +++ b/src/pxa260/pxa260Accessors.c.h @@ -24,9 +24,11 @@ static uint32_t pxa260_io_read_word(uint32_t addr){ case PXA260_SSP_BASE >> 16: out = pxa260SspReadWord(addr); break; + case PXA260_IC_BASE >> 16: + pxa260icPrvMemAccessF(&pxa260Ic, addr, 4, false, &out); + break; case PXA260_DMA_BASE >> 16: - case PXA260_IC_BASE >> 16: case PXA260_RTC_BASE >> 16: case PXA260_FFUART_BASE >> 16: case PXA260_BTUART_BASE >> 16: @@ -69,9 +71,11 @@ static void pxa260_io_write_word(uint32_t addr, uint32_t value){ case PXA260_SSP_BASE >> 16: pxa260SspWriteWord(addr, value); break; + case PXA260_IC_BASE >> 16: + pxa260icPrvMemAccessF(&pxa260Ic, addr, 4, true, &value); + break; case PXA260_DMA_BASE >> 16: - case PXA260_IC_BASE >> 16: case PXA260_RTC_BASE >> 16: case PXA260_FFUART_BASE >> 16: case PXA260_BTUART_BASE >> 16: diff --git a/src/pxa260/pxa260_IC.c b/src/pxa260/pxa260_IC.c index 820833f..0af5ae5 100644 --- a/src/pxa260/pxa260_IC.c +++ b/src/pxa260/pxa260_IC.c @@ -17,7 +17,7 @@ static void pxa260icPrvHandleChanges(Pxa260ic* ic){ ic->wasIrq = nowIrq; } -static Boolean pxa260icPrvMemAccessF(void* userData, UInt32 pa, UInt8 size, Boolean write, void* buf){ +Boolean pxa260icPrvMemAccessF(void* userData, UInt32 pa, UInt8 size, Boolean write, void* buf){ Pxa260ic* ic = userData; UInt32 val = 0; @@ -76,7 +76,6 @@ static Boolean pxa260icPrvMemAccessF(void* userData, UInt32 pa, UInt8 size, Bool } void pxa260icInit(Pxa260ic* ic){ - __mem_zero(ic, sizeof(Pxa260ic)); } diff --git a/src/pxa260/pxa260_IC.h b/src/pxa260/pxa260_IC.h index 5ec5564..e1a7aba 100644 --- a/src/pxa260/pxa260_IC.h +++ b/src/pxa260/pxa260_IC.h @@ -55,6 +55,7 @@ typedef struct{ }Pxa260ic; +Boolean pxa260icPrvMemAccessF(void* userData, UInt32 pa, UInt8 size, Boolean write, void* buf); void pxa260icInit(Pxa260ic* ic); void pxa260icInt(Pxa260ic* ic, UInt8 intNum, Boolean raise); //interrupt caused by emulated hardware/ interrupt handled by guest diff --git a/src/tsc2101.c b/src/tsc2101.c index a463a65..2d245a0 100644 --- a/src/tsc2101.c +++ b/src/tsc2101.c @@ -46,6 +46,7 @@ static uint8_t tsc2101CurrentPage; static uint8_t tsc2101CurrentRegister; static bool tsc2101CommandFinished; static bool tsc2101Read; +static bool tsc2101ChipSelect; static uint16_t tsc2101RegisterRead(uint8_t page, uint8_t address){ @@ -54,7 +55,7 @@ static uint16_t tsc2101RegisterRead(uint8_t page, uint8_t address){ switch(combinedRegisterNumber){ case TOUCH_CONTROL_STATUS: //simple read, no actions needed - return tsc2101Registers[combinedRegisterNumber]; + //return tsc2101Registers[combinedRegisterNumber]; default: debugLog("Unimplemented TSC2101 register read, page:0x%01X, address:0x%02X\n", page, address); @@ -81,6 +82,7 @@ void tsc2101Reset(void){ tsc2101CurrentRegister = 0; tsc2101CommandFinished = false; tsc2101Read = false; + tsc2101ChipSelect = true; //TODO: need to add all the registers here tsc2101Registers[TOUCH_CONTROL_STATUS] = 0x8000; @@ -99,8 +101,11 @@ void tsc2101LoadState(uint8_t* data){ } void tsc2101SetChipSelect(bool value){ - tsc2101CurrentWordBitsRemaining = 16; - tsc2101Read = false; + if(value && !tsc2101ChipSelect){ + tsc2101CurrentWordBitsRemaining = 16; + tsc2101Read = false; + } + tsc2101ChipSelect = value; } bool tsc2101ExchangeBit(bool bit){