Marius Posted April 22, 2011 Share Posted April 22, 2011 Hi, Normally I install in my Atari's a dual OS: one standard and one Qmeg. The Standard OS is used for programs/games that do not run on Qmeg. But: to all these Atari cases I connected a switch on the outside, and I really do not want to do that on all my atari's. So to be "100%" compatible I'm looking for a standard atari XL/XE OS that has only ONE extra feature and that is reboot with SHIFT+RESET or something like that. I have an Atari 800XL that I do not want to change on the outside, and I want it to be as original as possible, except for that reset-thing. If that OS version does not Exist, I'll create it myself. In that case: Who can tell me where the spare (not used) bytes are in the OS... I'll put my own routine there. Perhaps I can find this in mapping the atari... but when someone already knows it, please tell me before I use wrong locations. Thanks. M. Quote Link to comment Share on other sites More sharing options...
Rybags Posted April 22, 2011 Share Posted April 22, 2011 The Warp OSes in the AtariMax addons allow SELECT + RESET to force a reboot. Another way you could do it, if e.g. you only wanted to be able to swap among 4 OSes on a big EPROM: The OS uses 3 "magic" numbers in RAM to distinguish between a power-on condition and the user pressing RESET. If those numbers aren't at their proper values, the OS will assume a coldstart needs to take place. What you could do is use a different value in one of those numbers for each OS you put on the EPROM. Then, switching the OS and pressing RESET should always give a coldstart. Of course, that's not of much use if you wanted to just coldstart the OS you're already using. Spare ROM - the default XL OS has a bit of spare ROM around $CB00-CBFF just under the second character set. Not much, but probably enough to let you patch in a JMP somewhere in the RESET handler code and have a key check. Once that's done, you'd probably want to regenerate the proper checksums, it's documented elsewhere how to do all that. Quote Link to comment Share on other sites More sharing options...
Bunsen Posted April 22, 2011 Share Posted April 22, 2011 Take a look at Hias' ROM patch: http://www.horus.com/~hias/atari/#hipatch It adds hispeed and some hotkeys to the standard os. ...* coldstart Pressing SHIFT+RESET does a coldstart instead of a warmstart. All versions of the patch support this feature, but there are some restrictions: - This feature is not available when using patchrom to patch an "old" (rev. A or B) OS, pressing RESET always results in a coldstart. - This feature is also not available when using the MyIDE "soft" (flashcart) OSes. Please use the builtin MyIDE OS or Highspeed SIO Patch keystrokes instead. * hotkeys: The keyboard IRQ routine of the OS is patched and you can control the SIO patch using various keystrokes: SHIFT+CONTROL+S Clear SIO speed table and enable highspeed SIO SHIFT+CONTROL+N Disable highspeed SIO (normal speed) SHIFT+CONTROL+H Enable highspeed SIO SHIFT+CONTROL+DEL Coldstart Atari ... Quote Link to comment Share on other sites More sharing options...
Marius Posted April 22, 2011 Author Share Posted April 22, 2011 Thank you all folks! @Bunsen: yes that one is cool, but... I don't want highspeed. I really want an OS that is 100% the same... ok 99.99% in case of a hardreset keycombi. As soon as HighSpeed is there I can not boot demo disks like Joyride and all that. @Rybags: Same reason I don't want those WARP OS's... QMEG does the same also. HighSpeed is great, but not for what I want to accomplish. Your comment about the 4 OS'es is very interesting indeed, but not what I meant to do. I usually put a switch on the backside of my Atari. I use a 27c256 eprom, and put 2 OS's in it. That works fabulous. But... I don't want to make switches on every atari I have... I think that is ugly, and I also want to keep most atari's original. Original is cool enough ... except for that reboot option that they lack. So that's why I asked. But now I know where to put my routine. I also created such a routine already in the past (in MyIDE3.1 OS) so I can do it again Thanks again for all the info. Everytime I realise again what a fabulous community this is. People are so supportive here. Thanks guys! Greetz M. Quote Link to comment Share on other sites More sharing options...
MEtalGuy66 Posted April 22, 2011 Share Posted April 22, 2011 Well, since any DOS or application that DETECTS which OS you have installed, that's worth it's salt, probably calculates a checksum value for the entire OS rom and then compares it against a table of known values to determine which OS you have, even a difference of a few bytes of code is going to change the value and cause your OS NOT to be recognized as any "standard OS".. So, you can either install a software "hook" that checks for the key combination via installed interrupt code, or you could take a hardware approach and use something like Bob Wooley's "freezer switch" which changes the state of the cartridge-port, and causes the OS to trigger a cold-start. http://atrey.karlin.mff.cuni.cz/~pavel/atari/freezer.html Quote Link to comment Share on other sites More sharing options...
Marius Posted April 22, 2011 Author Share Posted April 22, 2011 It is for my personal use and I do not care my os will be not recognised as standard. I don't want to add switches or buttons on my ataricase but I want to be able to reboot even when I run a program that is resetprotected. The dosses I use do not check os rom so it is not important for me. Quote Link to comment Share on other sites More sharing options...
+Larry Posted April 22, 2011 Share Posted April 22, 2011 Of course, "you want what you want," but since your Black Box (and virtually all other hard drives) have cold start hot keys, why wouldn't you just use those? (BTW, I know of no OS that already has exactly what you want.) -Larry It is for my personal use and I do not care my os will be not recognised as standard. I don't want to add switches or buttons on my ataricase but I want to be able to reboot even when I run a program that is resetprotected. The dosses I use do not check os rom so it is not important for me. Quote Link to comment Share on other sites More sharing options...
sloopy Posted April 22, 2011 Share Posted April 22, 2011 change the warmstart vector at e474 to point to your routine for seeing if you want to coldstart, if so then jmp the the coldstart vector ar e477, if not continue on to the warmstart vector that was in e474... recalc the checksum and your done... i would be interested in a copy of this when you make it... also with a inverting of the option key on cold boot too if your energetic :') sloopy. Quote Link to comment Share on other sites More sharing options...
Marius Posted April 22, 2011 Author Share Posted April 22, 2011 @Larry The reason for me is clear: I have an atari on my vacation address. I don't want to take a blackbox with me. I use my sio2ide there. Sio2ide initializes rather slow so without turning the computer off I need to be able to do a reboot. Also when I play a game that is reset-proof I don't want to turn off the computer. Unfortunately qmeg does not play all games or all demo's and high speed sio also gives compatibility problems sometimes. So those are all reasons why I want a as standard possible atari os with just this one missing feature. @sloopy that is an idea too indeed! Quote Link to comment Share on other sites More sharing options...
sloopy Posted April 22, 2011 Share Posted April 22, 2011 my 800XL has 41256's in it as the ram was bad, and i have to wait 90 seconds with the machine off for a cold start, or it will be flakey... i was considering doing this myself, along with inverting the meaning of option key at boot, but 'time is (not) on my side' ;') sloopy. Quote Link to comment Share on other sites More sharing options...
+bob1200xl Posted April 22, 2011 Share Posted April 22, 2011 The XL OS uses $C4C9-$C4D9 for a test to see if you have (somehow) changed carts while the OS wasn't looking - maybe by holding down RESET and swapping them? Anyway, it is a pretty useless function, so you could test for SELECT or whatever and just JMP $C2C8 for a coldstart. Otherwise, RTS to a BEQ to continue normally. Bob Hi, Normally I install in my Atari's a dual OS: one standard and one Qmeg. The Standard OS is used for programs/games that do not run on Qmeg. But: to all these Atari cases I connected a switch on the outside, and I really do not want to do that on all my atari's. So to be "100%" compatible I'm looking for a standard atari XL/XE OS that has only ONE extra feature and that is reboot with SHIFT+RESET or something like that. I have an Atari 800XL that I do not want to change on the outside, and I want it to be as original as possible, except for that reset-thing. If that OS version does not Exist, I'll create it myself. In that case: Who can tell me where the spare (not used) bytes are in the OS... I'll put my own routine there. Perhaps I can find this in mapping the atari... but when someone already knows it, please tell me before I use wrong locations. Thanks. M. Quote Link to comment Share on other sites More sharing options...
Fox-1 / mnx Posted April 22, 2011 Share Posted April 22, 2011 Marius... If you use an 800XL you can mount a small button inside the case and let it stick thru one of the cooling vents. You know how to handle a solder iron so make one of these: http://www.b-pahl.de/atari8bit/Computer/computer.html#coldr It's using the MMU to reset. This is what you want as you won't loose your RamDisk content. It'll work with ANY o.s. I've built it into my 130XE and needed to adjust the value of a capacitor 100uF vs. 10uF) to make it work better. Maybe the original value will do fine for an 800XL. Quote Link to comment Share on other sites More sharing options...
Marius Posted April 22, 2011 Author Share Posted April 22, 2011 A few minutes ago I finished my first test version of the standard XL OS with this option. The other solutions are cool too, but this works great (so far) There is one thing I don't understand: How to calculate checksum values. There are a few things I don't understand: Why are the checksum values stored TWICE in the OS. They are on C000 and C001. But also on FFF8 and FFF9. In Mapping The Atari I read the checksum values are excluded from the calculation, but does this mean that I have to add all values from C002 to FFF7, and then from FFFA-FFFF or what? I also read that the first 8K and the second 8K are calculated. At this moment I simply switched off the checksum routine, but I want to reset it to the new values, since I don't want to use an Atari with a possible damaged OS ROM... I've done that before... and that caused trouble. So any help on the checksum part is appreciated. Greetz M. Quote Link to comment Share on other sites More sharing options...
Rybags Posted April 22, 2011 Share Posted April 22, 2011 Not totally sure. It could be that the $C000 value is used for the sub $E000 region of the OS and the $FFF8 value for the higher region. There's some checksum code in the ROM and the Self-Test uses some too (same one, not sure?) You might be able to kludge it by just taking the existing checksum, then using the same addition formula to recalculate it. But of course, you'd still need to know which regions contribute to each checksum. I might have a quick look at this XL OS source I've got here, might have some answers. Quote Link to comment Share on other sites More sharing options...
Rybags Posted April 22, 2011 Share Posted April 22, 2011 OK, looks like first 8K checksum relates to $C000-CFFF + 5000-57FF + D800-DFFF. Second one to $E000-FFFF. Here's a snip of the reverse-engineered source: ; ********************** ; ** ** ; ** Checksum Stuff ** ; ** ** ; ********************** VFR: ldx #0 ; clear checksum value stx $8B stx $8C @1: jsr FFA9 ; calculate checksum of 1st 8K ROM: cpx #12 ; C000-CFFF + 5000-57FF + D800-DFFF bne @1 lda C000 ; checksum of first ROM ldx C000+1 ; patched by XL-IT! to: CLC/RTS FF86: cmp $8B ; carry = ( A==$8B && X==$8C ) bne @1 cpx $8C bne @1 clc ; clear carry means OK rts @1: sec ; set carry means ERROR rts VSR: ldx #0 ; clear checksum value stx $8B stx $8C ldx #12 jsr FFA9 ; calculate checksum of 2nd 8K ROM: jsr FFA9 ; E000-FFF7 + FFFA-FFFF lda FFF8 ldx FFF8+1 jmp FF86 ; carry = ( A==$8B && X==$8C ) FFA9: ldy #0 ; copy 4 checksum-specifier bytes -> $9E..$9A1 @1: lda FFD7,X sta $9E,Y inx ; advance to next checksum iny cpy #4 bne @1 ldy #0 ; add ($9E) -> $8B @2: clc lda ($9E),Y adc $8B sta $8B bcc @3 inc $8C ; advance ($9E) @3: inc $9E bne @4 inc $9F @4: lda $9E cmp $A0 ; repeat until $9E-ptr == $A0-ptr bne @2 lda $9F cmp $A1 bne @2 rts ; return ; checksums FFD7: .word $C002,$D000 .word $5000,$5800 .word $D800,$E000 .word $E000,$FFF8 .word $FFFA,$0000 .byte 0,0,0 ; ROM identification .byte $10,$05,$83 ; revision date: October 5th, 1983 .byte $02 ; option byte .byte 'B','B',0,0,1 ; part number: BB001 .byte $02 ; revision number FFF8: .word $6C8C ; checksum Quote Link to comment Share on other sites More sharing options...
Roydea6 Posted April 22, 2011 Share Posted April 22, 2011 Some small basic files to checksum OS with emulator. With Atari800Plus 4.0 turn off all patches so that you will get a true checksum reading.. Then Hexedit the proper bytes on your new OS. Do not use turbobasic just regular Atari basic. rom_checksum.atr PS you need to load your rom into the emulator also. Quote Link to comment Share on other sites More sharing options...
Marius Posted April 22, 2011 Author Share Posted April 22, 2011 @rdea6 Thanks for the tool. I did not need it, since my burning software has CRC calculation itself. I only had to know which regions. In fact it is in the Eprom 0002-1FFF that had to be calculated. The other half was not altered. The result is posted here too. The only feature is the Shift+Reset = Reboot. I did leave basic the way it is. I'll check for that later, but this is just what I needed... Checksum is added too. Thanks everyone! Greetz M. 3 Quote Link to comment Share on other sites More sharing options...
telengard Posted October 23, 2014 Share Posted October 23, 2014 Just wanted to say thanks for your work on this. Was looking for a cold reset mod that didn't involve modifying my case for a switch, etc and also did nothing else. Did this over the past 2 nights and it works perfectly! 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.