crash Posted March 4, 2009 Share Posted March 4, 2009 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! Quote Link to comment Share on other sites More sharing options...
Bryan Posted March 4, 2009 Share Posted March 4, 2009 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. Quote Link to comment Share on other sites More sharing options...
atariksi Posted March 17, 2009 Share Posted March 17, 2009 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 Quote Link to comment Share on other sites More sharing options...
Rybags Posted March 17, 2009 Share Posted March 17, 2009 (edited) 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 March 17, 2009 by Rybags Quote Link to comment Share on other sites More sharing options...
atariksi Posted March 17, 2009 Share Posted March 17, 2009 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. Quote Link to comment Share on other sites More sharing options...
Rybags Posted March 17, 2009 Share Posted March 17, 2009 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 Quote Link to comment Share on other sites More sharing options...
atariksi Posted March 17, 2009 Share Posted March 17, 2009 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. Quote Link to comment Share on other sites More sharing options...
atariksi Posted March 18, 2009 Share Posted March 18, 2009 [quote name='atarik Quote Link to comment Share on other sites More sharing options...
atariksi Posted March 18, 2009 Share Posted March 18, 2009 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 Quote Link to comment Share on other sites More sharing options...
+bob1200xl Posted March 19, 2009 Share Posted March 19, 2009 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! 1 Quote Link to comment Share on other sites More sharing options...
atariksi Posted March 19, 2009 Share Posted March 19, 2009 Sorry, my internet connection is logging me off occasionally so got some partial posts.... probably need to remove spyware. Quote Link to comment Share on other sites More sharing options...
Rybags Posted March 19, 2009 Share Posted March 19, 2009 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. Quote Link to comment Share on other sites More sharing options...
Urchlay Posted March 19, 2009 Share Posted March 19, 2009 The 2-key thing sounds cool - an extra button plus pressing the normal Reset key sounds like a logical idea... might do one myself. How about Ctrl-Atari-Delete (without the Reset key)? Quote Link to comment Share on other sites More sharing options...
Rybags Posted March 19, 2009 Share Posted March 19, 2009 That falls into the "complex" arena as previously discussed. Additionally... half the reason we use our old Ataris is to get away from the IBM and Microsoft bullshit. Quote Link to comment Share on other sites More sharing options...
atariksi Posted March 19, 2009 Share Posted March 19, 2009 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. Quote Link to comment Share on other sites More sharing options...
Rybags Posted March 19, 2009 Share Posted March 19, 2009 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). Quote Link to comment Share on other sites More sharing options...
atariksi Posted March 19, 2009 Share Posted March 19, 2009 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... Quote Link to comment Share on other sites More sharing options...
atariksi Posted March 19, 2009 Share Posted March 19, 2009 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. Quote Link to comment Share on other sites More sharing options...
Rybags Posted March 19, 2009 Share Posted March 19, 2009 Just a JMP ($216), so it should act as normal. If you're still having trouble uploading, you can email it to me rybagz [at] gmail <dot> com, and I can post it up here. Quote Link to comment Share on other sites More sharing options...
atariksi Posted March 19, 2009 Share Posted March 19, 2009 Just a JMP ($216), so it should act as normal. If you're still having trouble uploading, you can email it to me rybagz [at] gmail <dot> com, and I can post it up here. Just emailed you the binary file so you can compare with the one you compiled. Quote Link to comment Share on other sites More sharing options...
atariksi Posted March 19, 2009 Share Posted March 19, 2009 Just a JMP ($216), so it should act as normal. If you're still having trouble uploading, you can email it to me rybagz [at] gmail <dot> com, and I can post it up here. Just emailed you the binary file so you can compare with the one you compiled. Quote Link to comment Share on other sites More sharing options...
Rybags Posted March 19, 2009 Share Posted March 19, 2009 Got it. Great - seems to work fine on the emu in both XL and OS-B modes. I'll try it on the real deal a bit later. Quote Link to comment Share on other sites More sharing options...
Rybags Posted March 19, 2009 Share Posted March 19, 2009 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% Quote Link to comment Share on other sites More sharing options...
Rybags Posted March 19, 2009 Share Posted March 19, 2009 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. Quote Link to comment Share on other sites More sharing options...
atariksi Posted March 19, 2009 Share Posted March 19, 2009 Got it. Great - seems to work fine on the emu in both XL and OS-B modes. I'll try it on the real deal a bit later. I guess you mean the colors work fine on the emu. I doubt it locks up the CTRL-ALT-DELETE. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.