* Partially implement new VPE_STAT register.

This commit is contained in:
Ian Carmichael
1998-02-16 21:44:45 +00:00
parent b86c0dd361
commit 9c577d9a94
3 changed files with 25 additions and 12 deletions

View File

@ -24,7 +24,7 @@ else
lose_these_too="${r5900_files} ${lose_these_too}" lose_these_too="${r5900_files} ${lose_these_too}"
fi fi
sky_files="ChangeLog.sky sky-device.c sky-device.h sky-dma.c sky-dma.h" sky_files="ChangeLog.sky sky-device.c sky-device.h sky-dma.c sky-dma.h sky-bits.h"
sky_files="$sky_files sky-engine.c sky-gpuif.c sky-gpuif.h" sky_files="$sky_files sky-engine.c sky-gpuif.c sky-gpuif.h"
sky_files="$sky_files sky-hardware.c sky-hardware.h" sky_files="$sky_files sky-hardware.c sky-hardware.h"
sky_files="$sky_files sky-libvpe.c sky-libvpe.h sky-pke.c sky-pke.h" sky_files="$sky_files sky-libvpe.c sky-libvpe.h sky-pke.c sky-pke.h"

View File

@ -9,6 +9,9 @@
#include "sky-vu1.h" #include "sky-vu1.h"
#include "sky-libvpe.h" #include "sky-libvpe.h"
#include "sky-vu.h" #include "sky-vu.h"
#include "sky-bits.h"
#include <assert.h>
VectorUnitState vu1_state; VectorUnitState vu1_state;
@ -36,11 +39,14 @@ vu1_io_read_register_window(device *me,
{ {
/* Slow and crappy hack ... */ /* Slow and crappy hack ... */
int i; int i;
char source_buffer[VU1_REGISTER_WINDOW_SIZE]; char source_buffer[VU1_REGISTER_WINDOW_SIZE];
char* src; char* src;
assert(nr_bytes == 1 || nr_bytes == 2 || nr_bytes == 4 || nr_bytes == 8 || nr_bytes == 16);
memcpy(source_buffer, &vu1_state.regs.VF[0][0], 0x200); /* copy VF registers */ memcpy(source_buffer, &vu1_state.regs.VF[0][0], 0x200); /* copy VF registers */
for (i = 0; i<16; i++ ) { for (i = 0; i<16; i++ ) {
*(short*)&source_buffer[0x200 + i*16] = vu1_state.regs.VI[i]; *(short*)&source_buffer[0x200 + i*16] = vu1_state.regs.VI[i];
@ -53,7 +59,15 @@ vu1_io_read_register_window(device *me,
*(u_long*)&source_buffer[VU1_MQ - VU1_REGISTER_WINDOW_START] = vu1_state.regs.MQ; *(u_long*)&source_buffer[VU1_MQ - VU1_REGISTER_WINDOW_START] = vu1_state.regs.MQ;
*(u_long*)&source_buffer[VU1_MP - VU1_REGISTER_WINDOW_START] = vu1_state.regs.MP; *(u_long*)&source_buffer[VU1_MP - VU1_REGISTER_WINDOW_START] = vu1_state.regs.MP;
*(u_long*)&source_buffer[VU1_MTPC - VU1_REGISTER_WINDOW_START] = vu1_state.regs.MTPC; *(u_long*)&source_buffer[VU1_MTPC - VU1_REGISTER_WINDOW_START] = vu1_state.regs.MTPC;
*(VpeStat*)&source_buffer[VPE1_STAT - VU1_REGISTER_WINDOW_START] = vu1_state.regs.VPE_STAT;
{
u_long stat;
stat = 0;
if (vu1_state.runState == VU_RUN || vu1_state.runState == VU_BREAK)
SET_BIT(stat, VPU_STAT_VBS1_BIT);
*(u_long*)&source_buffer[VPE1_STAT - VU1_REGISTER_WINDOW_START] = stat;
}
#if 0 #if 0
printf("%s: Read: %x, %d, dest: %x, space: %d, %x!\n", me->name, (int)addr, nr_bytes, (int)dest, space, *(int*)&(vu1_state.regs.VPE_STAT)); printf("%s: Read: %x, %d, dest: %x, space: %d, %x!\n", me->name, (int)addr, nr_bytes, (int)dest, space, *(int*)&(vu1_state.regs.VPE_STAT));
@ -84,7 +98,6 @@ vu1_io_write_register_window(device *me,
if (addr == VPE1_STAT && nr_bytes == 4) { if (addr == VPE1_STAT && nr_bytes == 4) {
/* Magic to switch VU to run state, until other methods are available. */ /* Magic to switch VU to run state, until other methods are available. */
vu1_state.runState = VU_RUN; vu1_state.runState = VU_RUN;
vu1_state.regs.VPE_STAT.vbs = 1;
vu1_state.junk.eflag = 0; vu1_state.junk.eflag = 0;
vu1_state.junk.peflag = 0; vu1_state.junk.peflag = 0;
/*printf("Magic start run...\n");*/ /*printf("Magic start run...\n");*/

View File

@ -7,9 +7,9 @@
#include "sim-main.h" #include "sim-main.h"
void vu1_attach(SIM_DESC sd);
void vu1_issue(void); void vu1_issue(void);
void vu1_init(SIM_DESC sd); void vu1_init(SIM_DESC sd);
int vu1_status(void);
#define VU1_MEM0_WINDOW_START 0x11008000 #define VU1_MEM0_WINDOW_START 0x11008000
#define VU1_MEM0_SIZE 0x4000 /* 16K = 16384 */ #define VU1_MEM0_SIZE 0x4000 /* 16K = 16384 */