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

Subversion Repositories thor

[/] [thor/] [trunk/] [software/] [emuThor/] [source/] [clsPIC.h] - Diff between revs 30 and 32

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 30 Rev 32
Line 1... Line 1...
#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;
 
        };
 
};
};
 
 
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

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