Jump to content
IGNORED

100% standard OS but WITH a Hard-Reset keycombi


Marius

Recommended Posts

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

...

Link to comment
Share on other sites

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 :D ... 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 :D

 

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

@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!

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

@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.

  • Like 3
Link to comment
Share on other sites

  • 3 years later...

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...