mirror of
https://github.com/libretro/Mu.git
synced 2026-09-22 14:45:57 +00:00
Clean up and attach LCD stuff
This commit is contained in:
@@ -23,30 +23,34 @@ uint16_t* pxa255Framebuffer;
|
||||
static Pxa255lcd tungstenCLcd;
|
||||
|
||||
|
||||
//LCD accesses
|
||||
static uint32_t pxa255LcdRead32(uint32_t addr){uint32_t out; pxa255lcdPrvMemAccessF(&tungstenCLcd, addr, 4, false, &out); return out;}
|
||||
static void pxa255LcdWrite32(uint32_t addr, uint32_t value){pxa255lcdPrvMemAccessF(&tungstenCLcd, addr, 4, true, &value);}
|
||||
|
||||
bool pxa255Init(uint8_t** returnRom, uint8_t** returnRam){
|
||||
uint32_t total_mem = 0;
|
||||
int i;
|
||||
uint32_t mem_offset = 0;
|
||||
uint8_t i;
|
||||
|
||||
mem_and_flags = os_reserve(MEM_MAXSIZE * 2);
|
||||
if(!mem_and_flags)
|
||||
return false;
|
||||
|
||||
//ROM
|
||||
mem_areas[0].base = PXA255_ROM_START_ADDRESS;
|
||||
mem_areas[0].size = TUNGSTEN_C_ROM_SIZE;
|
||||
mem_areas[0].ptr = mem_and_flags + mem_offset;
|
||||
mem_offset += TUNGSTEN_C_ROM_SIZE;
|
||||
|
||||
//RAM
|
||||
mem_areas[1].base = PXA255_RAM_START_ADDRESS;
|
||||
mem_areas[1].size = TUNGSTEN_C_RAM_SIZE;
|
||||
mem_areas[1].ptr = mem_and_flags + mem_offset;
|
||||
mem_offset += TUNGSTEN_C_RAM_SIZE;
|
||||
|
||||
//LCD
|
||||
mem_areas[2].base = PXA255_LCD_START_ADDRESS;
|
||||
mem_areas[2].size = PXA255_LCD_SIZE;
|
||||
|
||||
for (i = 0; i < sizeof(mem_areas)/sizeof(*mem_areas); i++) {
|
||||
if (mem_areas[i].size) {
|
||||
mem_areas[i].ptr = mem_and_flags + total_mem;
|
||||
total_mem += mem_areas[i].size;
|
||||
}
|
||||
}
|
||||
mem_areas[2].ptr = NULL;
|
||||
|
||||
for (i = 0; i < 64; i++) {
|
||||
// will fallback to bad_* on non-memory addresses
|
||||
@@ -57,6 +61,15 @@ bool pxa255Init(uint8_t** returnRom, uint8_t** returnRam){
|
||||
write_half_map[i] = memory_write_half;
|
||||
write_word_map[i] = memory_write_word;
|
||||
}
|
||||
|
||||
read_byte_map[PXA255_START_BANK(PXA255_LCD_START_ADDRESS)] = bad_read_byte;
|
||||
read_half_map[PXA255_START_BANK(PXA255_LCD_START_ADDRESS)] = bad_read_half;
|
||||
read_word_map[PXA255_START_BANK(PXA255_LCD_START_ADDRESS)] = pxa255LcdRead32;
|
||||
write_byte_map[PXA255_START_BANK(PXA255_LCD_START_ADDRESS)] = bad_write_byte;
|
||||
write_half_map[PXA255_START_BANK(PXA255_LCD_START_ADDRESS)] = bad_write_half;
|
||||
write_word_map[PXA255_START_BANK(PXA255_LCD_START_ADDRESS)] = pxa255LcdWrite32;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void pxa255Deinit(void){
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "pxa255_LCD.h"
|
||||
#include "pxa255_mem.h"
|
||||
#include "pxa255.h"
|
||||
#include "../armv5te/mem.h"
|
||||
|
||||
#define UNMASKABLE_INTS 0x7C8E
|
||||
|
||||
@@ -15,7 +16,7 @@ static void pxa255lcdPrvUpdateInts(Pxa255lcd* lcd){
|
||||
}
|
||||
}
|
||||
|
||||
static Boolean pxa255lcdPrvMemAccessF(void* userData, UInt32 pa, UInt8 size, Boolean write, void* buf){
|
||||
Boolean pxa255lcdPrvMemAccessF(void* userData, UInt32 pa, UInt8 size, Boolean write, void* buf){
|
||||
|
||||
Pxa255lcd* lcd = userData;
|
||||
UInt32 val = 0;
|
||||
@@ -194,14 +195,7 @@ static Boolean pxa255lcdPrvMemAccessF(void* userData, UInt32 pa, UInt8 size, Boo
|
||||
return true;
|
||||
}
|
||||
|
||||
static UInt32 pxa255PrvGetWord(Pxa255lcd* lcd, UInt32 addr){
|
||||
|
||||
UInt32 v;
|
||||
|
||||
if(!memAccess(lcd->mem, addr, 4, false, &v)) return 0;
|
||||
|
||||
return v;
|
||||
}
|
||||
#define pxa255PrvGetWord(x, addr) mmio_read_word(addr)
|
||||
|
||||
static void pxa255LcdPrvDma(Pxa255lcd* lcd, void* dest, UInt32 addr, UInt32 len){
|
||||
|
||||
@@ -359,20 +353,9 @@ void pxa255lcdFrame(Pxa255lcd* lcd){
|
||||
pxa255lcdPrvUpdateInts(lcd);
|
||||
}
|
||||
|
||||
|
||||
Boolean pxa255lcdInit(Pxa255lcd* lcd, ArmMem* physMem, Pxa255ic* ic){
|
||||
|
||||
|
||||
void pxa255lcdInit(Pxa255lcd* lcd, Pxa255ic* ic){
|
||||
__mem_zero(lcd, sizeof(Pxa255lcd));
|
||||
|
||||
lcd->ic = ic;
|
||||
lcd->mem = physMem;
|
||||
lcd->intMask = UNMASKABLE_INTS;
|
||||
|
||||
return memRegionAdd(physMem, PXA255_LCD_BASE, PXA255_LCD_SIZE, pxa255lcdPrvMemAccessF, lcd);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -27,7 +27,6 @@ uint16_t* pxa255Framebuffer;
|
||||
typedef struct{
|
||||
|
||||
Pxa255ic* ic;
|
||||
ArmMem* mem;
|
||||
|
||||
//registers
|
||||
UInt32 lccr0, lccr1, lccr2, lccr3, fbr0, fbr1, liicr, trgbr, tcr;
|
||||
@@ -48,9 +47,9 @@ typedef struct{
|
||||
|
||||
}Pxa255lcd;
|
||||
|
||||
Boolean pxa255lcdInit(Pxa255lcd* lcd, ArmMem* physMem, Pxa255ic* ic);
|
||||
Boolean pxa255lcdPrvMemAccessF(void* userData, UInt32 pa, UInt8 size, Boolean write, void* buf);
|
||||
void pxa255lcdInit(Pxa255lcd* lcd, Pxa255ic* ic);
|
||||
void pxa255lcdFrame(Pxa255lcd* lcd);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
#define TUNGSTEN_C_RAM_SIZE (64 * 0x100000)//64mb RAM
|
||||
#define PXA255_LCD_SIZE 0x00001000
|
||||
|
||||
#define PXA255_START_BANK(address) ((address) >> 26)
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user