Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module common.rp6502.interrupts;
- import common.rp6502.pins;
- enum
- {
- VECTOR_NMI = 0xfffa,
- VECTOR_RES = 0xfffc,
- VECTOR_IRQ = 0xfffe
- }
- class Interrupts
- {
- private Pins pins;
- private bool irq;
- private bool nmi, nmi_latch;
- private bool res;
- this(Pins pins)
- {
- this.pins = pins;
- }
- public void update()
- {
- irq = pins.irq;
- res = pins.res;
- if (pins.nmi & !nmi_latch)
- {
- nmi = 1;
- }
- nmi_latch = pins.nmi;
- }
- public bool available(bool i)
- {
- return nmi | (irq & !i) | res;
- }
- public ushort vector()
- {
- if (res) { res = 0; return VECTOR_RES; }
- if (nmi) { nmi = 0; return VECTOR_NMI; }
- if (irq) { irq = 0; return VECTOR_IRQ; }
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement