Article View: comp.sys.atari.st
Article #5979Re: Software Reset
From: Howard Chu
Date: Tue, 21 Nov 1989 18:57
Date: Tue, 21 Nov 1989 18:57
75 lines
2869 bytes
2869 bytes
Just a couple comments on this...
In article <866@lzaz.ATT.COM> hcj@lzaz.ATT.COM (HC Johnson) writes:
%In article <89112004371539@masnet.uucp>, tellabs.canada@canremote.uucp (TELLABS CANADA) writes:
%> Required with the utmost urgency is a (C, Modula2 <-preffered) routine
%> to perform a rather cold reset (re-load auto folder etc.) in pre tos1.4
%> and tos1.4 machines. I'd be eternally grateful.
%>
%
%
%Howard C. Johnson
%ATT Bell Labs
%att!lzaz!hcj
%hcj@lzaz.att.com
%
%
%Subject: Simple program to reboot an Atari ST
%Message-ID: <152@decvax.UUCP>
%Date: 20 Sep 87 19:04:56 GMT
%Reply-To: minow@decvax.UUCP (Martin Minow)
%Distribution: world
%Organization: Digital Eq. Corp. - Merrimack NH.
%Lines: 40
%
%#if 0
%This illustrates how to emulate the white button (warmstart) or
%power-switch on an Atari. It *should* be compatible with the new roms.
%Normally, you would add the guts to an existing program.
%
%Martin Minow
%decvax!minow
%#endif
%
%/*
% * Reboot an Atari ST. This program is in the public-domain.
% * Martin Minow, Arlington MA 02174, USA.
% */
%
%#include <osbind.h>
%#include <linea.h>
%
%#define OS_memvalid (*((long *) 0x420L))
%#define OS_memval2 (*((long *) 0x43AL))
%#define OS_resvalid (*((long *) 0x426L))
%#define OS_restart (*((int(*)()) 0xFC0000L))
%
%main()
%{
% int hardboot;
% long oldstack;
%
% hidemouse();
% Cconws("\033EX or x to hardboot, anything else to softboot: ");
% hardboot = Cconin() & 0xFF;
% oldstack = Super(0L); /* Get into super mode */
% if (hardboot == 'X'
% || hardboot == 'x') {
% OS_memvalid = 0L; /* Invalidate the OS */
% OS_memval2 = 0L; /* "up and running" */
% OS_resvalid = 0L; /* flags. */
% }
% OS_restart(); /* Imitate system reset */
% Super(oldstack); /* We never get here */
%}
Lessee if I can get in before kbad does. }-) You shouldn't assume that
the ROM lives at 0xFC0000, 'cause it can move around on you.
A better way would have been to declare a pointer to the reset function,
and set that the 0x42a, the resvector system variable. Then jump
thru the pointer.
A question - why doesn't anyone just use the 68000 RESET instruction?
--
-=- PrayerMail: Send 100Mbits to holyghost@father.son[127.0.0.1]
and You Too can have a Personal Electronic Relationship with God!
Technical Details
Message-ID:
<10141@stag.math.lsa.umich.edu>Path:
arc1-ca.pugleaf.net!utzoo!attcan!uunet!samsung!shadooby!sharkey!math.lsa.umich.edu!hycReferences:
<89112004371539@masnet.uucp> <866@lzaz.ATT.COM>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!attcan!uunet!samsung!shadooby!sharkey!math.lsa.umich.edu!hyc
From: hyc@math.lsa.umich.edu (Howard Chu)
Newsgroups: comp.sys.atari.st
Subject: Re: Software Reset
Message-ID: <10141@stag.math.lsa.umich.edu>
Date: 21 Nov 89 18:57:08 GMT
References: <89112004371539@masnet.uucp> <866@lzaz.ATT.COM>
Sender: news@math.lsa.umich.edu
Reply-To: hyc@math.lsa.umich.edu (Howard Chu)
Organization: University of Michigan Math Dept., Ann Arbor
Lines: 75
UUCP-Path: {mailrus,umix}!um-math!hyc