home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
488.lha
/
FDStub_v0.6a
/
CodeGen.DOC
< prev
next >
Wrap
Text File
|
1991-02-08
|
3KB
|
108 lines
FDStub
The C to ASM interface generator
Written by Bruce Mackey
(c) 1991
All rights reserved.
Version 0.6a
-=== CODE GENERATION DOCUMENTATION ===-
Here are a few things to know about FDStub.
0. I am completly self taught in programming.
So I am explaining things as I understand them,
its possible that I am wrong about everything..
but not probable. :)
1. D0 REGISTER. FDstub NEVER SAVES the D0 register. If D0
is declared in the function definition the register
WILL BE loaded from the stack BUT FDStub WILL NOT save
D0 to the stack before loading.
2. MOVEM INSTUCTIONS. This is my understanding:
MOVEM always saves DATA regs first followed by
the ADDRESS regs EVEN if you specify the regs in
a different order.
SomeFunction(a1,d1) which has a stack like
|------|
| D1 |
|------|
| A1 | lowest
|------|
and issuing a MOVEM.L A1/D1,-(SP) will cause reg A1
to be loaded with the value intended for D1 and
visa versa.
So the trick is to try to use the most efficient
way of getting parameters off the stack while
maitaining the LEFT to RIGHT order.
here's an example:
these are the registers for BltBitMap
(A0,D0/D1,A1,D2/D3/D4/D5/D6/D7/A2)
if you issued a command like this
MOVEM.L 44(sp),A0/D0/D1/A1/D2/D3/D4/D5/D6/D7/A2
DON'T expect the registers to be loaded correctly.
registers D0-D7 will be loaded first followed by
A0-A2 defeating the LEFT to RIGHT order of the regs,
This is what FDStub does instead:
_BltBitMap:
MOVEM.L D1-D7/A0-A2,-(SP)
MOVE.L 44(SP),A0
MOVEM.L 52(SP),D0-D1
MOVE.L 64(SP),A1
MOVEM.L 72(SP),D2-D7
MOVE.L 100(SP),A2
MOVE.L _GfxBase,A6
JSR _LVOBltBitMap(A6)
MOVEM.L (SP)+,D1-D7/A0-A2
RTS
which is better than 11 MOVE.L instructions!
3. SAVING/RESTORING REGISTERS TO THE STACK.
FDStub makes what I consider a logical assumtion:
that all LIKE regs defined for a function will
have a progression from lowest reg to highest
WITHOUT SKIPPING a register.
Now to expalin what I mean by that. Let's use AmigaDOS
function Write(d1/d2/d3), when 'Write' was created the
author started at D1 and progressed up to D3 and didn't
skip any registers. If you were to redefine 'Write' to
Write(d1/d2/d4), FDStub will pull registers D1-D4
you'll get 4 registers instead of 3.
you can see what will happen if this rule is not followed,
when you use the stub in question your computer will do
some stange things.
(I thought about using a bad pun.. about stubbing... but...)
My pain has a name... that name is "WRITING DOCUMENTATION".