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

Subversion Repositories thor

[/] [thor/] [trunk/] [software/] [emuThor/] [source/] [clsPIC.cpp] - Blame information for rev 35

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 30 robfinch
#include "StdAfx.h"
2
#include "clsPIC.h"
3
 
4
clsPIC::clsPIC(void)
5
{
6
        Reset();
7
}
8
 
9
void clsPIC::Reset(void)
10
{
11
        int nn;
12
 
13
        for (nn = 0; nn < 16; nn++) {
14
                enables[nn] = false;
15 35 robfinch
                edges[nn] = false;
16 30 robfinch
        }
17
        irq30Hz = false;
18
        irq1024Hz = false;
19
        irqKeyboard = false;
20 35 robfinch
        irqUart = false;
21 30 robfinch
}
22 32 robfinch
 
23
unsigned int clsPIC::Read(unsigned int ad) {
24
        int nn;
25
        unsigned int dat;
26
        switch((ad >> 3) & 7) {
27
        case 0:
28
                return vecno;
29
        default:
30
                dat = 0;
31
                for (nn = 0; nn < 16; nn++)
32
                        dat |= (enables[nn] << nn);
33
                return dat;
34
        }
35
}
36
 
37
void clsPIC::Write(unsigned int ad, unsigned int dat, unsigned int mask) {
38
        int nn;
39
        switch((ad >> 3) & 7) {
40
        case 1:
41
                for (nn = 0; nn < 16; nn++)
42
                        enables[nn] = (dat & (1 << nn)) != 0;
43
                break;
44
        case 2:
45
                enables[dat & 15] = false;
46
                break;
47
        case 3:
48
                enables[dat & 15] = true;
49
                break;
50 35 robfinch
        case 4:
51
                for (nn = 0; nn < 16; nn++)
52
                        edges[nn] = (dat & (1 << nn)) != 0;
53
                break;
54 32 robfinch
        case 5:
55
                if (dat==1)
56
                        irq1024Hz = false;
57
                if (dat==2)
58
                        irq30Hz = false;
59
                if (dat==7)
60
                        irqUart = false;
61
                if (dat==3)
62
                        irqKeyboard = false;
63
                break;
64
        }
65
}
66
 
67
void clsPIC::Step(void) {
68
        vecno = 192;
69
        irq = system1.cpu2.irq = false;
70
        if (enables[7] & irqUart) {
71
                irq = system1.cpu2.irq = true;
72
                vecno = 192+7;
73
        }
74
        if (enables[3] & irqKeyboard) {
75
                irq = system1.cpu2.irq = true;
76
                vecno = 192+3;
77
        }
78
        if (enables[2] & irq30Hz) {
79
                irq = system1.cpu2.irq = true;
80
                vecno = 192+2;
81
        }
82
        if (enables[1] & irq1024Hz) {
83
                irq = system1.cpu2.irq = true;
84
                vecno = 192+1;
85
        }
86
        system1.cpu2.vecno = vecno;
87
}
88
 
89
 

powered by: WebSVN 2.1.0

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