Ben Eater 6502 Kit — Day 22

in Project HOPE3 years ago

3.jpeg

The interrupt requests are meant to be shared between several advanced devices. The breadboard 65C02 computer has only one of those: The 65C22 VIA (versatile interface adapter). First we need to attach a button to the VIA and connect to VIAs IRQ-Out with the CPUs IRQ-In. I'll add a 2nd button and keep the NMI button for now:

2.jpeg
2nd interrupt button.

Next we need a new IRQ handler. I'm going to write the the program in expandable way that multiple IRQs can be handled. Resulting in another over engineered software.

;;
;   Increment Counter
;
.proc     Inc_Counter
    INC  Counter   ; 16 bit increment
    BNE  Exit
    INC  Counter + 1
Exit:     RTS
.endproc

;;
;   NMI (non-maskable interrupt) handler
;
.proc     Do_NMI
    JSR  Inc_Counter  ; just increment the counter
    RTI
.endproc

;;
;   Handle interrupts from VIA
;
.proc     Do_VIA_IRQ
    PHA
    LDA  #%00000010  ; Check CA1 interrupt.
    BIT  VIA::IFR
    BZE  Next   ; Interrupt wasn't CA1, check next
    JSR  Inc_Counter  ; increment the counter
    BIT  VIA::ORA  ; Clear CA1 interrupt

Next:     PLA     ; No more interrupt sources to check.
    RTS
.endproc

;;
;   IRQ (interrupt request) hander
;
.proc     Do_IRQ
    BIT  VIA::IFR
    BPL  Next   ; Interrupt wasn't from VIA, check next
    JSR  Do_VIA_IRQ
Next:     RTI     ; No more interrupt sources to check.
.endproc

I first check if the IRQ originates from the VIA, using the BIT operation, and if so call a subroutine for VIA IRQs. I use a subroutine as branch commands can only jump 127 addresses forward and as the program get's more complex I would need to change to JMPs instead.

The VIA itself also has several interrupt sources to next I check if the IRQ came from them CA1 line. The BIT operation can check bit 6 and 7 without the accumulator for bit 1 I need to load the accumulator with the bit I wish to test.

And here the IRQ handler in stunning action.

1.jpeg
All wired up and running

This is the last one in the series. Ben Eater went on to creating the worlds worse graphic card. Very interesting watch but too much for me to build.



You find the source code for the program with makefile, linker configuration file, include files and assembler source code on GitLab: 6502Tutorial — Kit/Interrupt/IRQ

Sort:  

cuddle_serenade.png

Congratulations @krischik! You received a personal badge!

Happy Hive Birthday! You are on the Hive blockchain for 3 years!

You can view your badges on your board and compare yourself to others in the Ranking

Do not miss the last post from @hivebuzz:

The Hive Gamification Proposal #2

I quite like these posts you made... shame you are not showing stuff again around this. I kind of would like it...

I planned to make another chapter over the holidays. And I'll still post it on Hive.

However, the series was posted in „C/Project HOPE“ — the „C/Project HOPE“ which was driven off the site by acidyo earlier this year.

With „C/Project HOPE“ I got 50 upvotes. For the next chapter I will use „C/STEMGeeks“. However my last posting on „C/STEMGeeks“ was only 7 upvotes.

The payout is never even close to the point that it's worse mentioning. I'm here for engagement.

I'm here for engagement.

Great... me too. And I can see you know a few things. Which is nice. I love a great contesting conversation.

I don't want to comment about that project because I have been disconnected for a while and I am focusing my time on other stuff.