Jump to content
IGNORED

Atari 800 Hard Reset Mod?


crash

Recommended Posts

Greetings,

 

Is anyone aware of a Hard Reset Mod that may be possible with the original model Atari 800? I am interested in something that does not interrupt main power, as it is necessary to maintain power to the SIO interface, but from what I understand the RESET button on the non XL/XE 800 is a soft reset. I found a couple of dead links to such a mod via Google, but nothing currently available.

 

Thanks!

Link to comment
Share on other sites

The reset button on the 400/800 is hooked to Antic and causes an NMI which causes the OS to reset. The problem is that it won't get you out of a hard CPU crash (like if the 6502 tries to execute an HCF instruction like $02). You could probably mod it pretty easily to also tie it to the power up reset delay circuit, but I believe the 400/800 OS will treat this as a coldstart every time, so you'll lose warmstart functionality.

Link to comment
Share on other sites

  • 2 weeks later...
Greetings,

 

Is anyone aware of a Hard Reset Mod that may be possible with the original model Atari 800? I am interested in something that does not interrupt main power, as it is necessary to maintain power to the SIO interface, but from what I understand the RESET button on the non XL/XE 800 is a soft reset. I found a couple of dead links to such a mod via Google, but nothing currently available.

 

Thanks!

 

I wouldn't think a soft reset would interrupt the +5V/+12V pins on SIO port. Here's a lock up reset program for Atari 400/800. You'll have to write your program in such a way that the IRQ routine + refresh cycles + background code divides up so that the IRQ occurs on exact cycles--

 

SYSTEM RESET lockout on Atari 400/800 (this compiles to a boot disk of 242 bytes):

 

;*** ATIRQ400.asm: Atari Timer IRQ measured to exact cycles so no WSYNC is required by Krishna Software Inc.

;*** This plays music on voice #1 and uses IRQ timer interrupt on timer #4. Voice #0 is for constant tone.

;*** There are three CLKs which can be used by either 8 or 16 bit divisors as controlled by 53768.

;*** The 15.6999Khz CLK and 63.921Khz CLK can be turned off via 53775 but 1.78979Mhz CLK is always on.

;*** The 15.6999Khz CLK is 1.78979Mhz/114 and gives the scanline interrupt at end of scanline.

;*** The 63.921Khz CLK is 1.78979Mhz/28 and does not divide evenly into 29868 cycles/frame so cannot be used

;*** for color clock accurate or scanline accurate interrupts. This program also attempts to write IRQ vector

;*** directly at 65534/65535 by disabling ROM for XL/XE series (should have no effect on Atari 400/800).

;*** This program locks out SYSTEM RESET on Atari 400/800 where it's a NMI.

TIMERFREQLSB = 53760

TIMERFREQMSB = 53762

WSYNC = 54282

VCOUNT = 54283

 

DOSVEC = 10

CASINI = 2

WARMSTART = 58484

VMIRQ = 534 ;hardware irq ptr

 

ORG = 600h

;DW 0FFFFh

;DW StartAdr

;DW LastOffset-1

DB 0,3 ;# of sectors to load 1..255

DW ORG

DW StartAdr

Rts

StartAdr: Lda #MyReset,L

Sta CASINI

Lda #MyReset,H

Sta CASINI+1

Lda #0

Sta 580

Lda #2

Sta 9

Jmp WARMSTART

MyReset: Lda #2

Sta 9

Lda #MyReset,L

Sta CASINI

Lda #MyReset,H

Sta CASINI+1

Sei

Lda #0 ;no VBIs nor DLIs for maximum performance

Sta 54286

Sta 53774 ;disable all IRQs

Sta 54272 ;turn off screen

Sta 54017 ;disable ROM and BASIC for XL/XE series via PORTB

Lda #TimerTwoIRQ,L ;general IRQ routine but we use only for timer #2

Sta VMIRQ

Ldy #TimerTwoIRQ,H

Sty VMIRQ+1

Sta 65534

Sty 65535

Cpy 65535

Beq ROMVectorSet

Lda #IdleLoop,L

Sta SelfModifyThis+1 ;Remove 5 cycles from background task (for Jmp [534])

Lda #IdleLoop,H

Sta SelfModifyThis+2

ROMVectorSet: Lda #40 ;+40 for join channels 3,4; +80 for channels 1+2 @1.79Mhz

Sta 53768 ;join channels at 1.79 Mhz

Lda #160

Sta 53760

Lda #143

Sta 53761

Lda #175

Sta 53763

Lda #114-7 ;lsb 114-7 or 57-7 for two irqs/scanline

Sta 53764 ;timer #2 freq = 1789790/[A+1]

Lda #0 ;msb for rate divisor A

Sta 53766

Lda #4 ;1,2,4=timer interrupts

Sta 53774 ;enable IRQ #2

Lda #128

;Sta 53248 ;unrem to show sprite using 0 CPU cycles and 0 DMA cycles

Lda #144

;Sta 53249

Lda #255

Sta 53261

Sta 53262

Sta 53256

Sta 53257

Lda #32

Sta 53275

Lda #10

Sta 53266

Lda #12

Sta 53267

Ldx #0

Ldy #4 ;load ack parameters

Lda #65

NotMidScr: Cmp VCOUNT

Bne NotMidScr ;CF=1 when A=65

Sta WSYNC

Nop

;Nop

CLI

Sta 53769 ;start timer counter

;CLI

;Nop

;Nop

;Nop

;Nop

;Lda #34

;Sta 54272

IdleLoop: ;(29868 cycles in NTSC frame - 9*262 for Refresh = 27510 cycles so to keep the IRQ

; stable, cycles must be aligned to 27510 including IRQ routine). For PAL frame, use

; 312*114 = 35568 - 312*9 = 32760 cycles.)

;(27510 factors to 2*5*7*3*131)

 

Lda #0

Sta 53274

Lda 1535

;Lda 53770 ;No longer random if bits 0,1 of 53775 = 0

ROL

Sta 53274

;Rol

Sta 53762 ;make construction site noise

Lda #48

Sta 53274

Lda #64 ;which of these two instruction to rem out depends on IRQ routine total cycles

;Sta 53274

Lda #96

Sta 53274

Lda #128

Sta 53274

Lda #144

Sta 53274

Lda #160

Sta 53274

Lda #176

Sta 53274

SelfModifyThis: Jmp Idle1 ;For Atari 400/800, this jmp and following NOP (5 cycles) will be removed since ROM vector not used

Idle1: Nop

Jmp IdleLoop

 

;*** H/W does jmp [65534] (7 cycles) and XL/XE OS does a CLD and JMP [534] for 2+5 = 7 cycles.

;*** Below routine 32 cycles+7+5 = 44 cycles on old OS (like on Atari 400/800).

;*** Optimized by using X/Y registers and not using it in main routine so PHA/PLA not needed.

TimerTwoIRQ: ;Pha ;3 cycles

;Lda #255

;Sta 53771 ;POTGO

;Nop

Inc 53274 ;change register (like color for example)

;Lda #0

;Sta 53774

;Lda #4

;Sta 53774 ;send ack to timer irq (optimized with Inc = 6 cycles)

Stx 53774

Sty 53774 ;do ack

Inc 1535

;Nop

;Lda #96

Ror 53274 ;change register (like color for example)

;Pla ;4 cycles

Rti ;6 cycles

 

;LastOffset: DW 2e0h,2e1h,ORG

Link to comment
Share on other sites

I'm not sure you need to worry about the power-on Reset delay, since the machine is already powered up and everything is nicely initialized.

 

Just resetting the 6502 should suffice, and functionally is almost the same as doing a Run to $E477, and will escape any crash condition.

 

As I recommended elsewhere, a 2-button solution might be best to avoid those accidental Resets. What would really be nice might be a Shift-Ctrl- <our Reset switch> combination, but I don't think that would be so easy.

 

I think I can recall at least one article in the pre-XL days, but no idea which magazine it was in. Might be worth browsing the Antic, Analogs and Compute magazine scans if you've downloaded them.

 

ed - I should add. Might be worth looking at any schematics for the XL or XE and see if it's got a description of the circuit involving the Reset button.

 

 

As requested by Atariksi, not totally related to all this, is the code he sent me which I modified to compile under AtAsm, which is supposed to disable System Reset without resorting to locking up the 800 (not working quite properly though, although seems OK on the XL/XE):

 

irq400.zip

Edited by Rybags
Link to comment
Share on other sites

I'm not sure you need to worry about the power-on Reset delay, since the machine is already powered up and everything is nicely initialized.

 

Just resetting the 6502 should suffice, and functionally is almost the same as doing a Run to $E477, and will escape any crash condition.

 

As I recommended elsewhere, a 2-button solution might be best to avoid those accidental Resets. What would really be nice might be a Shift-Ctrl- <our Reset switch> combination, but I don't think that would be so easy.

 

I think I can recall at least one article in the pre-XL days, but no idea which magazine it was in. Might be worth browsing the Antic, Analogs and Compute magazine scans if you've downloaded them.

 

ed - I should add. Might be worth looking at any schematics for the XL or XE and see if it's got a description of the circuit involving the Reset button.

 

 

As requested by Atariksi, not totally related to all this, is the code he sent me which I modified to compile under AtAsm, which is supposed to disable System Reset without resorting to locking up the 800 (not working quite properly though, although seems OK on the XL/XE):

 

irq400.zip

 

I am currently on a Win98SE system that does not allow me to view ZIP files...

 

But I do have it working with Atari 400 NTSC and Atari 800 NTSC so reset does not initiate a vector call. I would think Atari 400 PAL has same number of CPU cycles per scan line so it should work unless it's not properly detecting XL/XE and 400/800.

Link to comment
Share on other sites

OK... here's a cut/paste directly from the editor...

 

;*** ATIRQ400.asm: Atari Timer IRQ measured to exact cycles so no WSYNC is required by Krishna Software Inc.
;*** This plays music on voice #1 and uses IRQ timer interrupt on timer #4. Voice #0 is for constant tone.
;*** There are three CLKs which can be used by either 8 or 16 bit divisors as controlled by 53768.
;*** The 15.6999Khz CLK and 63.921Khz CLK can be turned off via 53775 but 1.78979Mhz CLK is always on.
;*** The 15.6999Khz CLK is 1.78979Mhz/114 and gives the scanline interrupt at end of scanline.
;*** The 63.921Khz CLK is 1.78979Mhz/28 and does not divide evenly into 29868 cycles/frame so cannot be used
;*** for color clock accurate or scanline accurate interrupts. This program also attempts to write IRQ vector
;*** directly at 65534/65535 by disabling ROM for XL/XE series (should have no effect on Atari 400/800).
;*** This program locks out SYSTEM RESET on Atari 400/800 where it's a NMI.
TIMERFREQLSB = 53760
TIMERFREQMSB = 53762
WSYNC = 54282
VCOUNT = 54283

DOSVEC = 10
CASINI = 2
WARMSTART = 58484
VMIRQ = 534;hardware irq ptr
origin=$600
*=$600
;DW 0FFFFh
;DW StartAdr
;DW LastOffset-1
.byte 0,3;# of sectors to load 1..255
.word origin
.word StartAdr
Rts
StartAdr
Lda #<MyReset
Sta CASINI
Lda #>MyReset
Sta CASINI+1
Lda #0
Sta 580
Lda #2
Sta 9
Jmp WARMSTART
MyReset
Lda #2
Sta 9
Lda #<MyReset
Sta CASINI
Lda #>MyReset
Sta CASINI+1
Sei
Lda #0;no VBIs nor DLIs for maximum performance
Sta 54286
Sta 53774;disable all IRQs
Sta 54272;turn off screen
Sta 54017;disable ROM and BASIC for XL/XE series via PORTB
Lda #<TimerTwoIRQ;general IRQ routine but we use only for timer #2
Sta VMIRQ
Ldy #>TimerTwoIRQ
Sty VMIRQ+1
Sta 65534
Sty 65535
Cpy 65535
Beq ROMVectorSet
Lda #<IdleLoop
Sta SelfModifyThis+1;Remove 5 cycles from background task (for Jmp [534])
Lda #>IdleLoop
Sta SelfModifyThis+2
ROMVectorSet
Lda #40;+40 for join channels 3,4; +80 for channels 1+2 @1.79Mhz
Sta 53768;join channels at 1.79 Mhz
Lda #160
Sta 53760
Lda #143
Sta 53761
Lda #175
Sta 53763
Lda #114-7;lsb 114-7 or 57-7 for two irqs/scanline
Sta 53764;timer #2 freq = 1789790/[A+1]
Lda #0;msb for rate divisor A
Sta 53766
Lda #4;1,2,4=timer interrupts
Sta 53774;enable IRQ #2
Lda #128
;Sta 53248;unrem to show sprite using 0 CPU cycles and 0 DMA cycles
Lda #144
;Sta 53249
Lda #255
Sta 53261
Sta 53262
Sta 53256
Sta 53257
Lda #32
Sta 53275
Lda #10
Sta 53266
Lda #12
Sta 53267
Ldx #0
Ldy #4;load ack parameters
Lda #65
NotMidScr
Cmp VCOUNT
Bne NotMidScr;CF=1 when A=65
Sta WSYNC
Nop
;Nop
CLI
Sta 53769;start timer counter
;CLI
;Nop
;Nop
;Nop
;Nop
;Lda #34
;Sta 54272
IdleLoop;(29868 cycles in NTSC frame - 9*262 for Refresh = 27510 cycles so to keep the IRQ
; stable, cycles must be aligned to 27510 including IRQ routine). For PAL frame, use
; 312*114 = 35568 - 312*9 = 32760 cycles.)
;(27510 factors to 2*5*7*3*131)

Lda #0
Sta 53274
Lda 1535
;Lda 53770;No longer random if bits 0,1 of 53775 = 0
ROL
Sta 53274
;Rol
Sta 53762;make construction site noise
Lda #48
Sta 53274
Lda #64;which of these two instruction to rem out depends on IRQ routine total cycles
;Sta 53274
Lda #96
Sta 53274
Lda #128
Sta 53274
Lda #144
Sta 53274
Lda #160
Sta 53274
Lda #176
Sta 53274
SelfModifyThis
Jmp Idle1;For Atari 400/800, this jmp and following NOP (5 cycles) will be removed since ROM vector not used
Idle1
Nop
Jmp IdleLoop

;*** H/W does jmp [65534] (7 cycles) and XL/XE OS does a CLD and JMP [534] for 2+5 = 7 cycles.
;*** Below routine 32 cycles+7+5 = 44 cycles on old OS (like on Atari 400/800).
;*** Optimized by using X/Y registers and not using it in main routine so PHA/PLA not needed.
TimerTwoIRQ
;Pha;3 cycles
;Lda #255
;Sta 53771;POTGO
;Nop
Inc 53274;change register (like color for example)
;Lda #0
;Sta 53774
;Lda #4
;Sta 53774;send ack to timer irq (optimized with Inc = 6 cycles)
Stx 53774
Sty 53774;do ack
Inc 1535
;Nop
;Lda #96
Ror 53274;change register (like color for example)
;Pla;4 cycles
Rti;6 cycles

;LastOffset: DW 2e0h,2e1h,ORG

Link to comment
Share on other sites

OK... here's a cut/paste directly from the editor...

 

;*** ATIRQ400.asm: Atari Timer IRQ measured to exact cycles so no WSYNC is required by Krishna Software Inc.
;*** This plays music on voice #1 and uses IRQ timer interrupt on timer #4. Voice #0 is for constant tone.
;*** There are three CLKs which can be used by either 8 or 16 bit divisors as controlled by 53768.
;*** The 15.6999Khz CLK and 63.921Khz CLK can be turned off via 53775 but 1.78979Mhz CLK is always on.
;*** The 15.6999Khz CLK is 1.78979Mhz/114 and gives the scanline interrupt at end of scanline.
;*** The 63.921Khz CLK is 1.78979Mhz/28 and does not divide evenly into 29868 cycles/frame so cannot be used
;*** for color clock accurate or scanline accurate interrupts. This program also attempts to write IRQ vector
;*** directly at 65534/65535 by disabling ROM for XL/XE series (should have no effect on Atari 400/800).
;*** This program locks out SYSTEM RESET on Atari 400/800 where it's a NMI.
TIMERFREQLSB = 53760
TIMERFREQMSB = 53762
WSYNC = 54282
VCOUNT = 54283

DOSVEC = 10
CASINI = 2
WARMSTART = 58484
VMIRQ = 534;hardware irq ptr
origin=$600
*=$600
;DW 0FFFFh
;DW StartAdr
;DW LastOffset-1
.byte 0,3;# of sectors to load 1..255
.word origin
.word StartAdr
Rts
StartAdr
Lda #<MyReset
Sta CASINI
Lda #>MyReset
Sta CASINI+1
Lda #0
Sta 580
Lda #2
Sta 9
Jmp WARMSTART
MyReset
Lda #2
Sta 9
Lda #<MyReset
Sta CASINI
Lda #>MyReset
Sta CASINI+1
Sei
Lda #0;no VBIs nor DLIs for maximum performance
Sta 54286
Sta 53774;disable all IRQs
Sta 54272;turn off screen
Sta 54017;disable ROM and BASIC for XL/XE series via PORTB
Lda #<TimerTwoIRQ;general IRQ routine but we use only for timer #2
Sta VMIRQ
Ldy #>TimerTwoIRQ
Sty VMIRQ+1
Sta 65534
Sty 65535
Cpy 65535
Beq ROMVectorSet
Lda #<IdleLoop
Sta SelfModifyThis+1;Remove 5 cycles from background task (for Jmp [534])
Lda #>IdleLoop
Sta SelfModifyThis+2
ROMVectorSet
Lda #40;+40 for join channels 3,4; +80 for channels 1+2 @1.79Mhz
Sta 53768;join channels at 1.79 Mhz
Lda #160
Sta 53760
Lda #143
Sta 53761
Lda #175
Sta 53763
Lda #114-7;lsb 114-7 or 57-7 for two irqs/scanline
Sta 53764;timer #2 freq = 1789790/[A+1]
Lda #0;msb for rate divisor A
Sta 53766
Lda #4;1,2,4=timer interrupts
Sta 53774;enable IRQ #2
Lda #128
;Sta 53248;unrem to show sprite using 0 CPU cycles and 0 DMA cycles
Lda #144
;Sta 53249
Lda #255
Sta 53261
Sta 53262
Sta 53256
Sta 53257
Lda #32
Sta 53275
Lda #10
Sta 53266
Lda #12
Sta 53267
Ldx #0
Ldy #4;load ack parameters
Lda #65
NotMidScr
Cmp VCOUNT
Bne NotMidScr;CF=1 when A=65
Sta WSYNC
Nop
;Nop
CLI
Sta 53769;start timer counter
;CLI
;Nop
;Nop
;Nop
;Nop
;Lda #34
;Sta 54272
IdleLoop;(29868 cycles in NTSC frame - 9*262 for Refresh = 27510 cycles so to keep the IRQ
; stable, cycles must be aligned to 27510 including IRQ routine). For PAL frame, use
; 312*114 = 35568 - 312*9 = 32760 cycles.)
;(27510 factors to 2*5*7*3*131)

Lda #0
Sta 53274
Lda 1535
;Lda 53770;No longer random if bits 0,1 of 53775 = 0
ROL
Sta 53274
;Rol
Sta 53762;make construction site noise
Lda #48
Sta 53274
Lda #64;which of these two instruction to rem out depends on IRQ routine total cycles
;Sta 53274
Lda #96
Sta 53274
Lda #128
Sta 53274
Lda #144
Sta 53274
Lda #160
Sta 53274
Lda #176
Sta 53274
SelfModifyThis
Jmp Idle1;For Atari 400/800, this jmp and following NOP (5 cycles) will be removed since ROM vector not used
Idle1
Nop
Jmp IdleLoop

;*** H/W does jmp [65534] (7 cycles) and XL/XE OS does a CLD and JMP [534] for 2+5 = 7 cycles.
;*** Below routine 32 cycles+7+5 = 44 cycles on old OS (like on Atari 400/800).
;*** Optimized by using X/Y registers and not using it in main routine so PHA/PLA not needed.
TimerTwoIRQ
;Pha;3 cycles
;Lda #255
;Sta 53771;POTGO
;Nop
Inc 53274;change register (like color for example)
;Lda #0
;Sta 53774
;Lda #4
;Sta 53774;send ack to timer irq (optimized with Inc = 6 cycles)
Stx 53774
Sty 53774;do ack
Inc 1535
;Nop
;Lda #96
Ror 53274;change register (like color for example)
;Pla;4 cycles
Rti;6 cycles

;LastOffset: DW 2e0h,2e1h,ORG

 

First try to get the same color bars and audio as the XE/XL. Number of cycles on 400/800 is 44 for IRQ, 9 for refresh, and 61 background. On XL/XE, it's 39 for IRQ, 9 for refresh, and 66 background. So try hardcoding Jmp Idle1 to Jmp IdleLoop. The code above compiles to 242 bytes image disk.

Link to comment
Share on other sites

If you wire between the junction of R156, CR102, and C198, and pin 1 of J114, (on the motherboard) you will get a hard RESET every time. You could put a switch in that wire to allow you to select warm/cold start of the system.

 

Or, like I just did, cut pins 5 and 9 loose from J113 (joystick #4) and wire thru the pins to complete the circuit. Use those pins as a selector - jumper them gives hard RESET, open them gives soft RESET. This is not necessary; I just don't care for extra switches. These pins are used for POT7 and POT8 - not a big seller...

 

If you really wanted to get hardcore, you could wire in some logic and make key combinations work. I didn't go there.

 

Bob Woolley

 

(not an 800 guy but I do enjoy a puzzle)

 

Greetings,

 

Is anyone aware of a Hard Reset Mod that may be possible with the original model Atari 800? I am interested in something that does not interrupt main power, as it is necessary to maintain power to the SIO interface, but from what I understand the RESET button on the non XL/XE 800 is a soft reset. I found a couple of dead links to such a mod via Google, but nothing currently available.

 

Thanks!

  • Like 1
Link to comment
Share on other sites

Atariksi: what's the dealio with the "Reset-proof" thing... is it just relying on a Timer IRQ that occurs at an exact one scanline interval?

 

I'd prefer to just write something without the colour stuff to try it out.

 

 

The 2-key thing sounds cool - an extra button plus pressing the normal Reset key sounds like a logical idea... might do one myself.

 

Haven't been a pre-XL guy myself for 20+ years till recently... so many things the newer machines have that you just take for granted.

Link to comment
Share on other sites

Atariksi: what's the dealio with the "Reset-proof" thing... is it just relying on a Timer IRQ that occurs at an exact one scanline interval?

 

I'd prefer to just write something without the colour stuff to try it out.

 

 

The 2-key thing sounds cool - an extra button plus pressing the normal Reset key sounds like a logical idea... might do one myself.

 

Haven't been a pre-XL guy myself for 20+ years till recently... so many things the newer machines have that you just take for granted.

 

You can substitute the color stuff with your own code. I was trying to upload a modified version which does LDA 54287 to read whether the RESET key is pressed or not, but when I click upload the atariage website is timing out. Anyway, just substitute the two LDA #64/#96 with a LDA 54287 (once you have it working of course). Now if you press the reset key, it will change the color of the pink bar to blue thus proving the RESET is being completely controlled like a console key. Of course, you can then make it work with SHIFT+CTRL+RESET or whatever. Or are you talking about some other 2-key stuff...

 

How about press RESET start the game like go to START menu to do shut-down under most Windows.

Link to comment
Share on other sites

Sometimes proxy problems can cause uploading/posting problems on these type of forums.

 

I might at a later stage just try a redo of that program. I forgot to mention, my 400 has a Supermon OS, I haven't checked though to see if it's IRQ timing is any different (it might be, you can hotkey into the monitor).

Link to comment
Share on other sites

Sometimes proxy problems can cause uploading/posting problems on these type of forums.

 

I might at a later stage just try a redo of that program. I forgot to mention, my 400 has a Supermon OS, I haven't checked though to see if it's IRQ timing is any different (it might be, you can hotkey into the monitor).

 

It just timed out again trying to reply to this msg so I have to recompose it again...

Link to comment
Share on other sites

Sometimes proxy problems can cause uploading/posting problems on these type of forums.

 

I might at a later stage just try a redo of that program. I forgot to mention, my 400 has a Supermon OS, I haven't checked though to see if it's IRQ timing is any different (it might be, you can hotkey into the monitor).

 

Check vector [65534] to see what instruction it's pointing to. If it's a JMP [534], the above program should work, else give me the first few asm instructions at location pointed to by IRQ vector and I should be able to adjust the above code accordingly. Normal Atari 400/800 OS has just Jmp [534] whereas XL/XE OS has a CLD there. I have tested the code on NTSC machines only but many of them and it worked on all of them.

Link to comment
Share on other sites

Hah!

 

It works!!!

 

I changed it slightly (changed a STA $D202 in the main loop to just 3 NOPs), so the timing gets skewed out a bit. It seems to then trap about 2 out of 3 presses.

 

Just tried something else. A short program with INC $D40F repeated 6x, then a JMP to the start of the sequence. It also prevents Reset to a degree.

 

Since Atariksi's routine seems to work 100% when the scanline timing is right, could indicate that Antic only causes the SysReset NMI at a certain time. If you can cause a distraction at the right time, then you're defeating it.

 

As for use in the real world... kinda limited since you're tying up the CPU 100%

Link to comment
Share on other sites

Nores.zip

 

There's the program for anyone who wants to try it.

 

Real machine required. Note that you can't get control of the machine back without powering off (unless you have a Monitor type OS).

 

NORES.XEX masks 100% of Resets.

NORES2.XEX has the altered timing and seems to have about a 2/3rds success rate.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...