Clean up and attach LCD stuff

This commit is contained in:
meepingsnesroms
2019-04-21 21:05:01 -07:00
parent 34e4b9ce7c
commit ee7fd8e676
4 changed files with 30 additions and 33 deletions

View File

@@ -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){

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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