Removed Interrupt from Device (handled in bus)

This commit is contained in:
Blue 2019-05-04 14:22:51 +02:00
parent ffb39b0a61
commit b679fb48bd
4 changed files with 42 additions and 44 deletions

View file

@ -4,8 +4,6 @@ using System.Collections.Generic;
namespace ProjectPSX.Devices {
public class CDROM : Device {
private InterruptController InterruptController;
private Queue<uint> parameterBuffer = new Queue<uint>(16);
private Queue<uint> responseBuffer = new Queue<uint>(16);
private Queue<byte> dataBuffer = new Queue<byte>();
@ -64,15 +62,14 @@ namespace ProjectPSX.Devices {
private CD cd;
public CDROM(InterruptController InterruptController) {
this.InterruptController = InterruptController;
public CDROM() {
cd = new CD();
}
public void tick(uint cycles) {
public bool tick(uint cycles) {
counter += cycles;
if (counter < 10000) {
return;
return false; ;
}
if (interruptQueue.Count != 0 && IF == 0) {
@ -80,29 +77,30 @@ namespace ProjectPSX.Devices {
IF |= interruptQueue.Dequeue();
}
if ((IF & IE) != 0 && ((InterruptController.loadISTAT() & 0x4) != 0x4)) {
Console.WriteLine("[CD INT] Triggering " + IF.ToString("x8"));
InterruptController.set(Interrupt.CDROM);
if ((IF & IE) != 0 /*&& ((InterruptController.loadISTAT() & 0x4) != 0x4)*/) {
//Console.WriteLine("[CD INT] Triggering " + IF.ToString("x8"));
//InterruptController.set(Interrupt.CDROM);
return true;
}
switch (mode) {
case Mode.Idle:
if (counter < 4000 || interruptQueue.Count != 0) { //Await some cycles so interrupts are not triggered instant
return;
return false;
}
counter = 0;
break;
case Mode.Seek:
if (counter < 20000 || interruptQueue.Count != 0) {
return;
return false;
}
mode = Mode.Read; //???
break;
case Mode.Read:
if (counter < 100000 || interruptQueue.Count != 0) {
return;
return false;
}
//i should trigger here and add loc...
responseBuffer.Enqueue(STAT);
@ -112,7 +110,7 @@ namespace ProjectPSX.Devices {
case Mode.Transfer:
if (counter < 10000 || interruptQueue.Count != 0) {
return;
return false;
}
//if(dataBuffer.Count == 0)
@ -121,6 +119,7 @@ namespace ProjectPSX.Devices {
break;
}
return false;
}

View file

@ -108,22 +108,20 @@ namespace ProjectPSX.Devices {
private uint timer;
public GPU(InterruptController interruptController) {
this.InterruptController = interruptController;
public GPU() {
mode = Mode.COMMAND;
GP1_Reset();
}
private InterruptController InterruptController;
public void tick(uint cycles) {
public bool tick(uint cycles) {
timer += cycles;
if (timer >= 564480) {
//Console.WriteLine("[GPU] Request Interrupt 0x1 VBLANK");
InterruptController.set(Interrupt.VBLANK);
timer -= 564480;
window.update();
return true;
}
return false;
}
public uint loadGPUSTAT() {
@ -235,7 +233,8 @@ namespace ProjectPSX.Devices {
case 0x00: return (1, GP0_NOP);
case 0x01: return (1, GP0_MemClearCache);
case 0x02: return (3, GP0_FillRectVRAM);
case 0x2C: return (9, GP0_RenderTexturedQuadBlend);
case 0x2C: //return (9, GP0_RenderTexturedQuadBlend);
case 0x2D: return (9, GP0_RenderTexturedQuadBlend);
case 0xA0: return (3, GP0_MemCopyRectCPUtoVRAM);
case 0xC0: return (3, GP0_MemCopyRectVRAMtoCPU);
case 0xE1: return (1, GP0_SetDrawMode);
@ -248,6 +247,8 @@ namespace ProjectPSX.Devices {
case 0x30: return (6, GP0_RenderShadedTriOpaque);
case 0x38: return (8, GP0_RenderShadedQuadOpaque);
//case 0x48: return ();
case 0x60:
case 0x62: return (3, GP0_RenderMonoRectangle);
case 0x68:
@ -255,9 +256,10 @@ namespace ProjectPSX.Devices {
case 0x70:
case 0x72:
case 0x78:
case 0x7A: return (2, GP0_RenderMonoRectangle); // todo hardcode return values and rewrite this
case 0x7A: return (2, GP0_RenderMonoRectangle); // todo hardcode return values and rewrite this also semi transp not impl
default: Console.WriteLine("[GPU] Unsupported Command" + opcode.ToString("x8")); Console.ReadLine(); throw new NotImplementedException();
default: Console.WriteLine("[GPU] Unsupported Command " + opcode.ToString("x8")); /*Console.ReadLine();*/ return (1, GP0_NOP);// throw new NotImplementedException();
}
}
@ -397,7 +399,6 @@ namespace ProjectPSX.Devices {
w1_row += B20;
w2_row += B01;
}
}
private void GP0_RenderShadedTriOpaque() { // 0x30

View file

@ -8,14 +8,11 @@ namespace ProjectPSX.Devices {
public class TIMERS : Device {
TIMER[] timer = new TIMER[3];
InterruptController interruptController = new InterruptController();
public TIMERS(InterruptController interruptController) {
this.interruptController = interruptController;
timer[0] = new TIMER(0, interruptController);
timer[1] = new TIMER(1, interruptController);
timer[2] = new TIMER(2, interruptController);
public TIMERS() {
timer[0] = new TIMER();
timer[1] = new TIMER();
timer[2] = new TIMER();
}
public new void write(Width w, uint addr, uint value) {
@ -30,14 +27,13 @@ namespace ProjectPSX.Devices {
return timer[timerNumber].load(w, addr);
}
public void tick(uint cycles) {
timer[0].tick(cycles);
timer[1].tick(cycles);
timer[2].tick(cycles);
public bool tick(int timerNumber, uint cycles) {
return timer[timerNumber].tick(cycles);
}
public class TIMER {
private int timerNumber;
private static int timerCounter;
private ushort counterValue;
private uint counterTargetValue;
@ -56,11 +52,8 @@ namespace ProjectPSX.Devices {
private byte reachedTarget;
private byte reachedFFFF;
private InterruptController interruptController;
public TIMER(int timerNumber, InterruptController interruptController) {
this.timerNumber = timerNumber;
this.interruptController = interruptController;
public TIMER() {
this.timerNumber = timerCounter++;
}
public void write(Width w, uint addr, uint value) {
@ -80,16 +73,19 @@ namespace ProjectPSX.Devices {
}
}
public void tick(uint cycles) { //todo this needs rework
public bool tick(uint cycles) { //todo this needs rework
switch (timerNumber) {
case 0:
break;
return false;
case 1:
break;
return false;
case 2:
break;
return false;
default:
return false;
}
/*
counter2div8 += (ushort)cycles;
if(counter2div8 == 8) {
counterValue++;
@ -102,7 +98,7 @@ namespace ProjectPSX.Devices {
}
} else if(counterValue == 0xFFFF & irqWhenCounterFFFF == 1) {
interruptController.set(Interrupt.TIMER2);
}
}*/
}
private void setCounterMode(uint value) {

View file

@ -64,6 +64,8 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Devices\Controller.cs" />
<Compile Include="Devices\DigitalController.cs" />
<Compile Include="Util\BIOS_Disassembler.cs" />
<Compile Include="Core\GTE.cs" />
<Compile Include="Devices\JOYPAD.cs" />