mirror of
https://github.com/ARMSX2/ARMSX1.git
synced 2026-08-24 16:53:35 -07:00
Start working on MDEC
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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*);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user