[comp.sys.atari.st] Many questions

jrd@STONY-BROOK.SCRC.SYMBOLICS.COM.UUCP (12/07/87)

Hi all.  Here's my weekly batch of wierd questions.

What if anything has happened w/r/t fixing the dreaded '40 directory'
bug?  I saw a lot of discussion of the problem and symptoms, but no
mention of a fix.  I've recently gotten a hard disk, and so am now in a
position to get screwed by this bug.

Is there a recent copy of Spacewar available?  The one in the archives
appears to be mono only (I use color) and the one on UMIX.CC.UMICH.EDU
is corrupted; at least neither ARC on my ST nor ARC on a Un*x can read
it.

I'm trying to understand the difference between .O files (as produced by
C backends, I guess) and executables, ie .TTPs etc.  It looks to me like
they're the same format (both relocatable) and that the only net
difference is that in the executable, all the TEXT psects from the .Os
are concatenated together, all the DATA psects ditto, etc, and that
references are resolved.  If that's true, it seems like the linker's
pretty trivial.  If not, what am I missing?  Also, if my supposition
about the linker's true, what's RELMOD for?

Are there any PD debuggers around?

As always, thanks in advance for any info.

holloway@drivax.UUCP (Bruce Holloway) (12/10/87)

In article <19871207191413.3.JRD@GRACKLE.SCRC.Symbolics.COM> jrd@STONY-BROOK.SCRC.SYMBOLICS.COM (John R. Dunning) writes:
>Hi all.  Here's my weekly batch of wierd questions.

>What if anything has happened w/r/t fixing the dreaded '40 directory'
>bug?  I saw a lot of discussion of the problem and symptoms, but no
>mention of a fix.  I've recently gotten a hard disk, and so am now in a
>position to get screwed by this bug.

As far as I know, Atari hasn't fixed the problem, but they sort of distribute
FOLDRXXX.PRG which delays the problem, perhaps indefinitely.


>Is there a recent copy of Spacewar available?  The one in the archives
>appears to be mono only (I use color) and the one on UMIX.CC.UMICH.EDU
>is corrupted; at least neither ARC on my ST nor ARC on a Un*x can read
>it.

A color version came over the net awhile back, and is probably available on
any timesharing service you can think of (People/Link, for example...)

>I'm trying to understand the difference between .O files (as produced by
>C backends, I guess) and executables, ie .TTPs etc.  It looks to me like
>they're the same format (both relocatable) and that the only net
>difference is that in the executable, all the TEXT psects from the .Os
>are concatenated together, all the DATA psects ditto, etc, and that
>references are resolved.  If that's true, it seems like the linker's
>pretty trivial.  If not, what am I missing?  Also, if my supposition
>about the linker's true, what's RELMOD for?

The linker also can search through libraries for unresolved routines, and
only pull out the modules you need. For almost two years now, the Atari
developer's kit's linker has been LINK68, which doesn't require RELMOD.

RELMOD just translated the fixup information to a more compact format. The
format used with CP/M-68K added a LONG WORD (4 bytes) to a file for each
code or data reference. The smaller format just saves the type of reference
it is. I think. It's been a while. But you get the idea.

>Are there any PD debuggers around?

No good ones.


-- 
*******************************************************************************
* Bruce Holloway - Terminal Netnews Addict       uunet!amdahl!drivax!holloway *
* ALBATROSS, ATARI*TROS @ Plink                            ALBATROSS @ Delphi *
*******************************************************************************

johno@pnet51.cts.com (John Ogawa) (08/29/88)

[Is there still a line eater out there?  Or am I just looking foolish?]


Hi out there in Netland.  Long time no see.  I am back online again by the
gracious permission of the sysop of pnet.  I can receive mail here, but the
prefered place is my school account, lxw6035@ux.acss.umn.edu.

Anyway, on to some questions that I have been building up.

Currently I have 2 projects:  a terminal called Lazy Term, and an update of
Schizo, it will be v1.5.  I am having major problems with both.  If I can get
some help from people who know better out there, they will both be out soon. 
On to the first.

Lazy Term (why do we need another terminal emulator?) will be a SMALL,
reasonably full-featured VT52 emulator.  You will be able to call it up from
anywhere with a key combination.  I am debating XMODEM capability, but it will
surely have macro capability, and dialing capability (automatic redialing,
RS232 settings PER PHONE NUMBER, etc).  It also will answer like a real VT52
(for those of you that use qterm on UNIX).  Most everything is working, except
for the most important part, calling it up! <grin>  At first I was going to
make it a desk accessory.  But then I had major problems looking for a key
combination from the desktop (anyone know why the Desktop ignores MU_KEYBD
events?).  So, I decided to try and put a keyboard intercept in.  No go.  I
have never messed with interrupt routines before, so I don't know what the
problem is.  Right now, I can't even install a dummy routine.  I am replacing
the routine that I find from Kbdvbase in the kb_kbdsys pointer.  I use Mark
Williams' C, and the setrte routine (which saves registers) first, and then
pass control to the original routine after finishing.  This always bombs out. 
If anyone can help, I'd be thankful.  I am also wondering whether it is safe
to use system calls (like Bconout) in an interrupt routine.  Any code would be
much appreciated.

On to the second set of problems.  Schizo v1.5 will have two major
improvements:  it will have a corner clock, and it will select a desktop.inf
file that matches the current resolution.  Of course, I am having problems
with both.  The corner clock is related to the interrupt routine problems.  I
am using a VBI to keep the clock working in non-GEM programs.  I can install a
VBI, but am wondering whether it is safe to use system calls within the
routine.  The second problem is with the desktop.inf reading.  Right now,
short of reading it myself, the only way I can do this is to rename a file to
desktop.inf, and then reboot.  Obviously this is a poor answer.  Is it the
only answer though?

Those are my problems.  I apologise for asking.  I program to learn.  Every
new revision or program has taught me loads about how the ST works.  I am
obviously still learning <grin>.

Any comments, suggestions, and help is welcome.  Thanks.

John Ogawa

BITNET:         lxw6035@ux
UUCP:           lxw6035@ux.acss.umn.edu
USMail:         Institute of Child Development
                University of Minnesota
                51 E. River Rd.
                Minneapolis, MN   55455
Phone:          O:  (612)624-3347
                H:  (612)870-9103

UUCP: {rosevax, crash}!orbit!pnet51!johno
INET: johno@pnet51.cts.com

7103_300@uwovax.uwo.ca (Eric Smith) (09/02/88)

In article <30@orbit.UUCP>, johno@pnet51.cts.com (John Ogawa) writes:
> ... But then I had major problems looking for a key
> combination from the desktop (anyone know why the Desktop ignores MU_KEYBD
> events?).  So, I decided to try and put a keyboard intercept in.  No go.  I
> have never messed with interrupt routines before, so I don't know what the
> problem is.  Right now, I can't even install a dummy routine.  I am replacing
> the routine that I find from Kbdvbase in the kb_kbdsys pointer.  I use Mark
> Williams' C, and the setrte routine (which saves registers) first, and then
> pass control to the original routine after finishing.  This always bombs out. 
Your best bet is to pass control to the original keyboard handler first, after
which you can check the keyboard input buffer for the desired keys.
> ... I am also wondering whether it is safe
> to use system calls (like Bconout) in an interrupt routine.
No, not unless you expand the size of the BIOS stack (the pointer to which is
located at 0x4a2). If you replace this with a pointer to a suitably large
area of your own (say, 1 or 2K) then you can use BIOS and XBIOS calls. GEMDOS
is another story, and making GEMDOS calls from inside of an interrupt is
basically impossible (unless you want to rewrite the GEMDOS trap dispatcher).
> ...  The second problem is with the desktop.inf reading.  Right now,
> short of reading it myself, the only way I can do this is to rename a file to
> desktop.inf, and then reboot.  Obviously this is a poor answer.  Is it the
> only answer though?

> John Ogawa

No, it isn't the only answer. The best way to change the desktop.inf settings
is to tell the desktop to do it for you. That's what the control panel does.
There are 2 AES calls to do this; shel_put and shel_get. The syntaxes are
as follows:

shel_get(buf, n)
char *buf; int n;
Get n bytes of data from the desktop's current desktop.inf values, and put
them in memory starting at 'buf'. A value of n=128 gets the whole thing, I
think.

shel_put(buf, n)
char *buf; inf n;
Put n bytes of data, pointed to by 'buf', into the desktop's copy of
desktop.inf. A value of n=128 puts a whole new copy of desktop.inf in there.
When the user next selects 'Save Desktop' from appropriate menu, then this
information will be used to create (or re-create) the file desktop.inf on disk.

One last note; the control panel apparently only does one 'shel_get' (when it
is first loaded) and hence won't recognize changes made by other accessories
unless you save the desktop and reboot. I guess Atari or DRI didn't 
expect anyone else to use these calls. They're also very poorly documented,
at least in the stuff available to poor 'unregistered developer' slobs like
myself! So I can make no guarantees about the above information, but it
seems to work (a friend and I wrote a replacement VT52 emulator acc. and used
these calls to communicate with the desktop).
--
Eric R. Smith                      email:
Dept. of Mathematics               7103_300@uwovax.uwo.ca
University of Western Ontario      7103_300@uwovax.bitnet
London, Ont. Canada N6A 5B7    (a shared mailbox: put my name on
ph: (519) 661-3638              the Subj: line, please!)