OpenCores
URL https://opencores.org/ocsvn/thor/thor/trunk

Subversion Repositories thor

[/] [thor/] [trunk/] [software/] [emuThor/] [source/] [clsPIC.h] - Blame information for rev 30

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 30 robfinch
#pragma once
2
#include "clsDevice.h"
3
#include "clsCPU.h"
4
#include "clsThor.h"
5
 
6
extern clsThor cpu1;
7
 
8
class clsPIC : public clsDevice
9
{
10
        bool enables[16];
11
public:
12
        bool irq30Hz;
13
        bool irq1024Hz;
14
        bool irqKeyboard;
15
        unsigned int vecno;
16
        clsPIC(void);
17
        void Reset();
18
        bool IsSelected(unsigned int ad) {
19
                return ((ad & 0xFFFFFFC0)==0xFFDC0FC0);
20
        };
21
        unsigned int Read(unsigned int ad) {
22
                int nn;
23
                unsigned int dat;
24
                switch((ad >> 2) & 15) {
25
                case 0:
26
                        return vecno;
27
                default:
28
                        dat = 0;
29
                        for (nn = 0; nn < 16; nn++)
30
                                dat |= (enables[nn] << nn);
31
                        return dat;
32
                }
33
        };
34
        void Write(unsigned int ad, unsigned int dat, unsigned int mask) {
35
                int nn;
36
                switch((ad >> 2) & 15) {
37
                case 1:
38
                        for (nn = 0; nn < 16; nn++)
39
                                enables[nn] = dat & (1 << nn);
40
                        break;
41
                case 2:
42
                        enables[dat & 15] = false;
43
                        break;
44
                case 3:
45
                        enables[dat & 15] = true;
46
                        break;
47
                case 5:
48
                        if (dat==2)
49
                                irq1024Hz = false;
50
                        if (dat==3)
51
                                irq30Hz = false;
52
                        if (dat==15)
53
                                irqKeyboard = false;
54
                        break;
55
                }
56
        };
57
        void Step(void) {
58
                vecno = 448;
59
                cpu1.irq = false;
60
                if (enables[15] & irqKeyboard) {
61
                        cpu1.irq = true;
62
                        vecno = 448+15;
63
                }
64
                if (enables[3] & irq30Hz) {
65
                        cpu1.irq = true;
66
                        vecno = 448+3;
67
                }
68
                if (enables[2] & irq1024Hz) {
69
                        cpu1.irq = true;
70
                        vecno = 448+2;
71
                }
72
                cpu1.vecno = vecno;
73
        };
74
};
75
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.