URL
https://opencores.org/ocsvn/thor/thor/trunk
Go to most recent revision |
Only display areas with differences |
Details |
Blame |
View Log
Rev 30 |
Rev 32 |
#pragma once
|
#pragma once
|
#include "clsDevice.h"
|
#include "stdafx.h"
|
#include "clsCPU.h"
|
|
#include "clsThor.h"
|
|
|
|
extern clsThor cpu1;
|
extern clsSystem system1;
|
|
|
class clsPIC : public clsDevice
|
class clsPIC : public clsDevice
|
{
|
{
|
bool enables[16];
|
|
public:
|
public:
|
|
bool enables[16];
|
bool irq30Hz;
|
bool irq30Hz;
|
bool irq1024Hz;
|
bool irq1024Hz;
|
bool irqKeyboard;
|
bool irqKeyboard;
|
|
bool irqUart;
|
|
bool irq;
|
|
bool nmi;
|
unsigned int vecno;
|
unsigned int vecno;
|
clsPIC(void);
|
clsPIC(void);
|
void Reset();
|
void Reset();
|
bool IsSelected(unsigned int ad) {
|
bool IsSelected(unsigned int ad) {
|
return ((ad & 0xFFFFFFC0)==0xFFDC0FC0);
|
return ((ad & 0xFFFFFFC0)==0xFFDC0FC0);
|
};
|
};
|
unsigned int Read(unsigned int ad) {
|
unsigned int Read(unsigned int ad);
|
int nn;
|
void Write(unsigned int ad, unsigned int dat, unsigned int mask);
|
unsigned int dat;
|
void Step(void);
|
switch((ad >> 2) & 15) {
|
|
case 0:
|
|
return vecno;
|
|
default:
|
|
dat = 0;
|
|
for (nn = 0; nn < 16; nn++)
|
|
dat |= (enables[nn] << nn);
|
|
return dat;
|
|
}
|
|
};
|
|
void Write(unsigned int ad, unsigned int dat, unsigned int mask) {
|
|
int nn;
|
|
switch((ad >> 2) & 15) {
|
|
case 1:
|
|
for (nn = 0; nn < 16; nn++)
|
|
enables[nn] = dat & (1 << nn);
|
|
break;
|
|
case 2:
|
|
enables[dat & 15] = false;
|
|
break;
|
|
case 3:
|
|
enables[dat & 15] = true;
|
|
break;
|
|
case 5:
|
|
if (dat==2)
|
|
irq1024Hz = false;
|
|
if (dat==3)
|
|
irq30Hz = false;
|
|
if (dat==15)
|
|
irqKeyboard = false;
|
|
break;
|
|
}
|
|
};
|
|
void Step(void) {
|
|
vecno = 448;
|
|
cpu1.irq = false;
|
|
if (enables[15] & irqKeyboard) {
|
|
cpu1.irq = true;
|
|
vecno = 448+15;
|
|
}
|
|
if (enables[3] & irq30Hz) {
|
|
cpu1.irq = true;
|
|
vecno = 448+3;
|
|
}
|
|
if (enables[2] & irq1024Hz) {
|
|
cpu1.irq = true;
|
|
vecno = 448+2;
|
|
}
|
|
cpu1.vecno = vecno;
|
|
};
|
|
};
|
};
|
|
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.