Giter Site home page Giter Site logo

Comments (3)

mathias110 avatar mathias110 commented on June 12, 2024 1

Hi,

I have attached two patches to the chips-test and the chips repositories.
The two new test runs a small program with branches and asserts nmi/irq at different cycles. The interrupts can either be pulsed for a single cycle or stay asserted.With the chips-patch either configuration passes, without it the NMI test fails.

/Mathias

chips_test_nmi.patch.txt
chips_nmi.patch.txt

from chips.

Moosfet avatar Moosfet commented on June 12, 2024 1

I fixed this before bothering to look here, so here's an alternative solution. Since the 'pip' variables are 16-bit and only use 3 of those bits, I just shifted everything left 8 bits, which is probably 7 more than necessary, and also I don't know that I needed to do the same with the IRQ 'pip' variables, but it seemed like it couldn't hurt, so I did just in case the same problem affects the IRQ.

--- old/m6502.h 2021-10-22 09:40:10.797447442 -0400
+++ new/m6502.h 2021-10-22 09:40:32.946032197 -0400
@@ -654,11 +654,11 @@
         
         // NMI is edge-triggered
         if (0 != ((pins & (pins ^ c->PINS)) & M6502_NMI)) {
-            c->nmi_pip |= 1;
+            c->nmi_pip |= 0x100;
         }
         // IRQ test is level triggered
         if ((pins & M6502_IRQ) && (0 == (c->P & M6502_IF))) {
-            c->irq_pip |= 1;
+            c->irq_pip |= 0x100;
         }
         
         // RDY pin is only checked during read cycles
@@ -681,10 +681,10 @@
             //  - RES behaves slightly different than on a real 6502, we go
             //    into RES state as soon as the pin goes active, from there
             //    on, behaviour is 'standard'
-            if (0 != (c->irq_pip & 4)) {
+            if (0 != (c->irq_pip & 0x400)) {
                 c->brk_flags |= M6502_BRK_IRQ;
             }
-            if (0 != (c->nmi_pip & 0xFFFC)) {
+            if (0 != (c->nmi_pip & 0xFC00)) {
                 c->brk_flags |= M6502_BRK_NMI;
             }
             if (0 != (pins & M6502_RES)) {
@@ -694,8 +694,8 @@
                 c->io_inp = 0;
                 c->io_pins = 0;
             }
-            c->irq_pip &= 3;
-            c->nmi_pip &= 3;
+            c->irq_pip &= 0x3FF;
+            c->nmi_pip &= 0x3FF;
 
             // if interrupt or reset was requested, force a BRK instruction
             if (c->brk_flags) {

from chips.

floooh avatar floooh commented on June 12, 2024

Oki, better late then never, I have added the test from @mathias110, but used the fix from @Moosfet, it's currently in the branch z80-ticked, but this will soon-ish be merged back into master.

Many thanks!

from chips.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.