Difference between revisions of "Talk:RAMBO-1"

From Nesdev wiki
Jump to: navigation, search
m (Alternate IRQ timing: Tweaks.)
(Alternate IRQ timing: Figured out the IRQ timing!)
Line 20: Line 20:
 
== Alternate IRQ timing  ==
 
== Alternate IRQ timing  ==
  
This is an hack to get 3 games working: Klax, Skull&Crossbones and Hard Drivin'.
+
This is how to get 3 games working: Klax, Skull&Crossbones and Hard Drivin'.
 
*Address mask: $E001.
 
*Address mask: $E001.
*Writing to the registers $E000 '''or''' $E001 acknowledges the IRQ.
+
 
*Register $C001 sets the ''IRQ clear flag'' to '''true''' (it's cleared at the next IRQ clock).
+
*Register $C000: IRQ_latch = value AND $FE (last bit is NOT used), IRQ_clear = '''true'''.
 +
*Register $C001: IRQ_mode = value AND $01, IRQ_clear = '''true'''.
 +
*Register $E000: IRQ_enable = '''false''', acknowledges IRQ.
 +
*Register $E001: IRQ_enable = '''true''', acknowledges IRQ.
 +
 
  
 
'''When the IRQ is clocked by CPU or scanline modes:'''
 
'''When the IRQ is clocked by CPU or scanline modes:'''
 
*If the IRQ counter++ == IRQ latch:
 
*If the IRQ counter++ == IRQ latch:
**If IRQs are enabled, trigger an IRQ 2 CPU cycles later.
+
**If IRQ_enabled == true, wait 4 CPU cycles then trigger an IRQ AND clear IRQ_counter.
**Set ''IRQ clear flag'' to '''true'''.
+
*ELSE if the IRQ_clear == '''true''':
*If the ''IRQ clear flag'' is '''true''':
+
 
**''IRQ counter'' is set to zero.
 
**''IRQ counter'' is set to zero.
 
**''IRQ clear flag'' is set to '''false'''.
 
**''IRQ clear flag'' is set to '''false'''.
  
''Notice!''
+
--[[User:Zepper|Zepper]] ([[User talk:Zepper|talk]]) 16:22, 7 July 2017 (MDT)
*Skull&Crossbones has a glitched scanlined at the top of the scorebar, but NOT on the continue screen. Plus, the bottom line of the scorebar is NOT missing.
+
*Hard Drivin' works, but the title screen has 2 glitched scanlines.
+
*Klax is perfect, no problems.
+
--[[User:Zepper|Zepper]] ([[User talk:Zepper|talk]]) 17:12, 3 July 2017 (MDT)
+

Revision as of 15:22, 7 July 2017

As for the 2mb PRG, I'm not sure if the cart actually supports that much ROM, but the PRG registers apparently are 8 bits, and 8kb * $100 = 2048kb = 2mb. --Drag 03:05, 9 November 2011 (UTC)

IRQ related - Hard Drivin'

Suggested changes for the Mapper64 IRQ. It makes Hard Drivin' to work fine. No other games are affected with this change. Every cycle on 6502 is either a read or a write cycle. So, you update the IRQ counter in the next CPU cycle:

  • IF $C001 was written to after previous clock
    • reload IRQ counter with IRQ Reload value PLUS ONE
  • ELSE IF IRQ counter is 0
    • reload IRQ counter with IRQ Reload value

When the IRQ is clocked by the mapper (in scanline or cycle mode):

    • Decrement IRQ counter by 1
    • IF IRQ counter is now 0 AND IRQs are enabled
      • wait one M2 cycle, then trigger IRQ

Hard Drivin' works. --Zepper (talk) 17:57, 14 January 2014 (MST)

Alternate IRQ timing

This is how to get 3 games working: Klax, Skull&Crossbones and Hard Drivin'.

  • Address mask: $E001.
  • Register $C000: IRQ_latch = value AND $FE (last bit is NOT used), IRQ_clear = true.
  • Register $C001: IRQ_mode = value AND $01, IRQ_clear = true.
  • Register $E000: IRQ_enable = false, acknowledges IRQ.
  • Register $E001: IRQ_enable = true, acknowledges IRQ.


When the IRQ is clocked by CPU or scanline modes:

  • If the IRQ counter++ == IRQ latch:
    • If IRQ_enabled == true, wait 4 CPU cycles then trigger an IRQ AND clear IRQ_counter.
  • ELSE if the IRQ_clear == true:
    • IRQ counter is set to zero.
    • IRQ clear flag is set to false.

--Zepper (talk) 16:22, 7 July 2017 (MDT)