dan@uwmacc.UUCP (dan jatnieks) (05/29/86)
*** This line reserved for a future use as yet unrevealed to me ***
For the past several months I have been using Apple's UCSD Pascal system to
write a program that has several routines written in Assembler. The assembler
part is basically an interface to the Apple's graphics routines in the
Applesoft ROM. Currently there are about 10 assembly ".PROC"'s some of which
are for high res. and the others for low res. I haven't found the Apple manuals
to be very useful in the area of calling assembly routines, and have the
following questions about it:
1. I haven't found a good way to share data (labels) between two or more
".PROC"'s. Supposedly, using ".DEF" and ".REF" will make a label
globally available, but I had problems with this. If the routine in
which the label is defined is *not* the first routine (sequentially) that
uses it it seemed to assemble and link o.k., but it wouldn't run
correctly. The only way it will run correctly is if the label is defined
in the first routine that uses it. i.e. (NOT a literal example)
This works: .PROC R1 This doesn't: .PROC R1
.DEF labl .REF labl
LDA labl LDA labl
RTS RTS
labl: .BYTE 1
.PROC R2 .PROC R2
.REF labl .DEF labl
LDA labl LDA labl
RTS RTS
labl: .BYTE 1
There is no mention of this in the manual, and besides causing me
headaches, doesn't seem reasonable. I can work around it, but when
a variable (label) inherantly belongs in a routine I would rather not
move it just because that routine is not first. Has anyone else run
into this problem? What is the cause? Is there a better solution?
2. I tried to write a Pascal program that would test all of the assembly
routines that I wrote. In this program all the assembly routines were
declared as "EXTERNAL". Compiling this program kept giving me a very
cryptic "Stack Overflow" message followed by a reboot. Eventually I
removed some of the "EXTERNAL" declarations, and presto! it worked. It
apparently wasn't just because there were too many "EXTERNAL"
declarations, because there is a different error message for that. Why
would just declarations cause a stack overflow? There were maybe ten
"EXTERNAL"s and two other Procedures (both small), and I can't imagine
that much stack space would be needed during such a small compilation.
3. Does anyone know of a GOOD technical manual about Apple Pascal and using
assembler from it?
[ If anyone is interested enough, I can mail the actual code. It's small and
might help to understand the problem. I would send a version that works
and a version that doesn't to compare. I'm not crazy about doing it, and
it might be hard to explain (via written word) what each part does, but
I'll try. ]
What I am trying to do is not that difficult or complicated. The Pascal
assembler seems to be overly restrictive about many things. If I could use
my MERLIN assembler, I could finish it in an hour or two. Does anyone know
if there exists an assembler that can produce relocatable code compatable
with Apple Pascal? The whole process is agonizingly slow under Pascal, and
I would love to do it some other way.
Does anyone have any experience with the new PRODOS version of Apple Pascal
that I hear about every now and then? Is it compatable with code from the
UCSD version? More importantly, is the assembler better?
Thanks in advance for any help or suggestions.
--danj.
--
----------
"How often have I said to you that when you have eliminated the impossible,
whatever remains, however improbable, must be the truth"
-- Sir Arthur Conan Doyle
dan jatnieks
Univ. of Wisconsin - Madison C.S. Dept.
Univ. of Wisconsin - Madison Academic Computing Center (MACC) Micro Consultant
UUCP : ...{allegra,ihnp4,seismo}!uwvax!uwmacc!dan
ARPA : dan@easter
USMAIL: Work - c/o MACC-MIC Home - 1301 Spring St.
1210 W. Dayton Apt.#601
Madison, WI 53706 Madison, WI 53715
(608) 263-7744 (608) 251-6302
----------ags@pucc-h (Dave Seaman) (06/09/86)
In article <2236@uwmacc.UUCP> dan@uwmacc.UUCP (dan jatnieks) writes: > 1. I haven't found a good way to share data (labels) between two or more > ".PROC"'s. Supposedly, using ".DEF" and ".REF" will make a label > globally available, but I had problems with this. If the routine in > which the label is defined is *not* the first routine (sequentially) that > uses it it seemed to assemble and link o.k., but it wouldn't run > correctly. I have not run into this, even though I have used quite a few .DEFs and .REFs. Are you using version 1.2? I seem to recall there was a bug in the version 1.1 linker that might explain this. > 2. I tried to write a Pascal program that would test all of the assembly > routines that I wrote. In this program all the assembly routines were > declared as "EXTERNAL". Compiling this program kept giving me a very > cryptic "Stack Overflow" message followed by a reboot. There are two solutions to this: use the compiler swapping {$S+} option, or (under version 1.2) use the system configured for 128K. Note the amount of free space reported by the compiler at the beginning of each procedure. If that number gets too small, a stack overflow is likely. > 3. Does anyone know of a GOOD technical manual about Apple Pascal and using > assembler from it? I am not aware of any better source than the Apple documentation. Sorry. -- Dave Seaman pur-ee!pucc-h!ags "I wish I had time to explain Dimensional Transcendentalism!"