Start working on MDEC

This commit is contained in:
allkern
2023-08-06 10:58:19 -03:00
parent 923f2f1b66
commit fb110f6a1e
6 changed files with 106 additions and 4 deletions
+10
View File
@@ -58,6 +58,7 @@ uint32_t psx_bus_read32(psx_bus_t* bus, uint32_t addr) {
HANDLE_READ(timer, 32);
HANDLE_READ(cdrom, 32);
HANDLE_READ(pad, 32);
HANDLE_READ(mdec, 32);
log_warn("Unhandled 32-bit read from %08x:%08x", vaddr, addr);
@@ -89,6 +90,7 @@ uint16_t psx_bus_read16(psx_bus_t* bus, uint32_t addr) {
HANDLE_READ(timer, 16);
HANDLE_READ(cdrom, 16);
HANDLE_READ(pad, 16);
HANDLE_READ(mdec, 16);
log_warn("Unhandled 16-bit read from %08x:%08x", vaddr, addr);
@@ -116,6 +118,7 @@ uint8_t psx_bus_read8(psx_bus_t* bus, uint32_t addr) {
HANDLE_READ(timer, 8);
HANDLE_READ(cdrom, 8);
HANDLE_READ(pad, 8);
HANDLE_READ(mdec, 8);
log_warn("Unhandled 8-bit read from %08x:%08x", vaddr, addr);
@@ -147,6 +150,7 @@ void psx_bus_write32(psx_bus_t* bus, uint32_t addr, uint32_t value) {
HANDLE_WRITE(timer, 32);
HANDLE_WRITE(cdrom, 32);
HANDLE_WRITE(pad, 32);
HANDLE_WRITE(mdec, 32);
log_warn("Unhandled 32-bit write to %08x:%08x (%08x)", vaddr, addr, value);
}
@@ -176,6 +180,7 @@ void psx_bus_write16(psx_bus_t* bus, uint32_t addr, uint16_t value) {
HANDLE_WRITE(timer, 16);
HANDLE_WRITE(cdrom, 16);
HANDLE_WRITE(pad, 16);
HANDLE_WRITE(mdec, 16);
log_warn("Unhandled 16-bit write to %08x:%08x (%04x)", vaddr, addr, value);
}
@@ -201,6 +206,7 @@ void psx_bus_write8(psx_bus_t* bus, uint32_t addr, uint8_t value) {
HANDLE_WRITE(timer, 8);
HANDLE_WRITE(cdrom, 8);
HANDLE_WRITE(pad, 8);
HANDLE_WRITE(mdec, 8);
log_warn("Unhandled 8-bit write to %08x:%08x (%02x)", vaddr, addr, value);
}
@@ -261,6 +267,10 @@ void psx_bus_init_pad(psx_bus_t* bus, psx_pad_t* pad) {
bus->pad = pad;
}
void psx_bus_init_pad(psx_bus_t* bus, psx_mdec_t* mdec) {
bus->mdec = mdec;
}
uint32_t psx_bus_get_access_cycles(psx_bus_t* bus) {
uint32_t cycles = bus->access_cycles;
+3
View File
@@ -15,6 +15,7 @@
#include "dev/timer.h"
#include "dev/cdrom.h"
#include "dev/pad.h"
#include "dev/mdec.h"
struct psx_bus_t {
psx_bios_t* bios;
@@ -31,6 +32,7 @@ struct psx_bus_t {
psx_timer_t* timer;
psx_cdrom_t* cdrom;
psx_pad_t* pad;
psx_mdec_t* mdec;
uint32_t access_cycles;
};
@@ -49,5 +51,6 @@ void psx_bus_init_spu(psx_bus_t*, psx_spu_t*);
void psx_bus_init_timer(psx_bus_t*, psx_timer_t*);
void psx_bus_init_cdrom(psx_bus_t*, psx_cdrom_t*);
void psx_bus_init_pad(psx_bus_t*, psx_pad_t*);
void psx_bus_init_mdec(psx_bus_t*, psx_mdec_t*);
#endif
+53
View File
@@ -0,0 +1,53 @@
#include "mdec.h"
#include "../log.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
psx_mdec_t* psx_mdec_create() {
return (psx_mdec_t*)malloc(sizeof(psx_mdec_t));
}
void psx_mdec_init(psx_mdec_t* mdec) {
memset(mdec, 0, sizeof(psx_mdec_t));
mdec->io_base = PSX_MDEC_BEGIN;
mdec->io_size = PSX_MDEC_SIZE;
}
uint32_t psx_mdec_read32(psx_mdec_t* mdec, uint32_t offset) {
log_fatal("32-bit MDEC read offset=%u", offset);
}
uint16_t psx_mdec_read16(psx_mdec_t* mdec, uint32_t offset) {
log_fatal("Unhandled 16-bit MDEC read offset=%u", offset);
exit(1);
}
uint8_t psx_mdec_read8(psx_mdec_t* mdec, uint32_t offset) {
log_fatal("Unhandled 8-bit MDEC read offset=%u", offset);
exit(1);
}
void psx_mdec_write32(psx_mdec_t* mdec, uint32_t offset, uint32_t value) {
log_fatal("32-bit MDEC write offset=%u, value=%08x", offset, value);
}
void psx_mdec_write16(psx_mdec_t* mdec, uint32_t offset, uint16_t value) {
log_fatal("Unhandled 16-bit MDEC write offset=%u, value=%04x", offset, value);
exit(1);
}
void psx_mdec_write8(psx_mdec_t* mdec, uint32_t offset, uint8_t value) {
log_fatal("Unhandled 8-bit MDEC write offset=%u, value=%02x", offset, value);
exit(1);
}
void psx_mdec_destroy(psx_mdec_t* mdec) {
free(mdec);
}
+26
View File
@@ -0,0 +1,26 @@
#ifndef MDEC_H
#define MDEC_H
#include <stdint.h>
#include "../log.h"
#define PSX_MDEC_SIZE 0x8
#define PSX_MDEC_BEGIN 0x1f801820
#define PSX_MDEC_END 0x1f801827
typedef struct {
uint32_t io_base, io_size;
} psx_mdec_t;
psx_mdec_t* psx_mdec_create();
void psx_mdec_init(psx_mdec_t*);
uint32_t psx_mdec_read32(psx_mdec_t*, uint32_t);
uint16_t psx_mdec_read16(psx_mdec_t*, uint32_t);
uint8_t psx_mdec_read8(psx_mdec_t*, uint32_t);
void psx_mdec_write32(psx_mdec_t*, uint32_t, uint32_t);
void psx_mdec_write16(psx_mdec_t*, uint32_t, uint16_t);
void psx_mdec_write8(psx_mdec_t*, uint32_t, uint8_t);
void psx_mdec_destroy(psx_mdec_t*);
#endif
+12 -4
View File
@@ -91,6 +91,7 @@ void psx_init(psx_t* psx, const char* bios_path) {
psx->timer = psx_timer_create();
psx->cdrom = psx_cdrom_create();
psx->pad = psx_pad_create();
psx->mdec = psx_mdec_create();
psx_bus_init(psx->bus);
@@ -108,15 +109,17 @@ void psx_init(psx_t* psx, const char* bios_path) {
psx_bus_init_timer(psx->bus, psx->timer);
psx_bus_init_cdrom(psx->bus, psx->cdrom);
psx_bus_init_pad(psx->bus, psx->pad);
psx_bus_init_mdec(psx->bus, psx->mdec);
// Init devices
psx_bios_init(psx->bios);
psx_ram_init(psx->ram, psx->mc2);
psx_dma_init(psx->dma, psx->bus, psx->ic);
psx_exp1_init(psx->exp1, psx->mc1);
psx_bios_load(psx->bios, bios_path);
psx_mc1_init(psx->mc1);
psx_mc2_init(psx->mc2);
psx_mc3_init(psx->mc3);
psx_ram_init(psx->ram, psx->mc2);
psx_dma_init(psx->dma, psx->bus, psx->ic);
psx_exp1_init(psx->exp1, psx->mc1);
psx_ic_init(psx->ic, psx->cpu);
psx_scratchpad_init(psx->scratchpad);
psx_gpu_init(psx->gpu, psx->ic);
@@ -124,7 +127,7 @@ void psx_init(psx_t* psx, const char* bios_path) {
psx_timer_init(psx->timer, psx->ic);
psx_cdrom_init(psx->cdrom, psx->ic);
psx_pad_init(psx->pad, psx->ic);
psx_bios_load(psx->bios, bios_path);
psx_mdec_init(psx->mdec);
psx_cpu_init(psx->cpu, psx->bus);
}
@@ -162,6 +165,7 @@ void psx_destroy(psx_t* psx) {
psx_timer_destroy(psx->timer);
psx_cdrom_destroy(psx->cdrom);
psx_pad_destroy(psx->pad);
psx_mdec_destroy(psx->mdec);
free(psx);
}
@@ -226,6 +230,10 @@ psx_pad_t* psx_get_pad(psx_t* psx) {
return psx->pad;
}
psx_mdec_t* psx_get_mdec(psx_t* psx) {
return psx->mdec;
}
psx_cpu_t* psx_get_cpu(psx_t* psx) {
return psx->cpu;
}
+2
View File
@@ -24,6 +24,7 @@ typedef struct {
psx_timer_t* timer;
psx_cdrom_t* cdrom;
psx_pad_t* pad;
psx_mdec_t* mdec;
} psx_t;
psx_t* psx_create();
@@ -57,6 +58,7 @@ psx_bus_t* psx_get_bus(psx_t*);
psx_timer_t* psx_get_timer(psx_t*);
psx_cdrom_t* psx_get_cdrom(psx_t*);
psx_pad_t* psx_get_pad(psx_t*);
psx_mdec_t* psx_get_mdec(psx_t*);
psx_cpu_t* psx_get_cpu(psx_t*);
void psx_destroy(psx_t*);