|
@@ -19,22 +19,102 @@
|
|
|
.globl _start
|
|
|
.align 4
|
|
|
_start:
|
|
|
- stwu 1,-64(1)
|
|
|
+ stwu 1,-16(1)
|
|
|
mflr 0
|
|
|
- stw 29,52(1)
|
|
|
- stw 30,56(1)
|
|
|
- stw 31,60(1)
|
|
|
- stw 0,68(1)
|
|
|
-
|
|
|
- /* Save Stackpointer */
|
|
|
- lis 4,OriginalStkPtr@ha
|
|
|
- stw 1,OriginalStkPtr@l(4)
|
|
|
+ stw 0,20(1)
|
|
|
|
|
|
/* Get ExecBase */
|
|
|
lwz 3,4(0)
|
|
|
lis 4,_ExecBase@ha
|
|
|
stw 3,_ExecBase@l(4)
|
|
|
|
|
|
+ /* Allocating new stack */
|
|
|
+ lis 4,__stklen@ha
|
|
|
+ lwz 3,__stklen@l(4)
|
|
|
+ stw 3,0(2)
|
|
|
+ li 3,1
|
|
|
+ stw 3,4(2)
|
|
|
+ lwz 3,4(0)
|
|
|
+ stw 3,56(2)
|
|
|
+ lwz 3,100(2)
|
|
|
+ mtlr 3
|
|
|
+ li 3,-684
|
|
|
+ blrl
|
|
|
+ lis 4,stackArea@ha
|
|
|
+ stw 3,stackArea@l(4)
|
|
|
+
|
|
|
+ /* Setting up stackSwap struct */
|
|
|
+ lis 4,stackSwap@ha
|
|
|
+ addi 4,4,stackSwap@l
|
|
|
+ stw 3,0(4)
|
|
|
+ lis 5,__stklen@ha
|
|
|
+ lwz 6,__stklen@l(5)
|
|
|
+ add 3,3,6
|
|
|
+ stw 3,4(4)
|
|
|
+ stw 3,8(4)
|
|
|
+
|
|
|
+ /* Calling main function with the new stack */
|
|
|
+ stw 4,32(2)
|
|
|
+ lis 4,_initproc@ha
|
|
|
+ addi 4,4,_initproc@l
|
|
|
+ stw 4,36(2)
|
|
|
+ li 3,0
|
|
|
+ stw 3,40(2)
|
|
|
+ lwz 4,100(2)
|
|
|
+ mtlr 4
|
|
|
+ li 3,-804
|
|
|
+ blrl
|
|
|
+
|
|
|
+ /* Freeing up stack area */
|
|
|
+ lis 4,stackArea@ha
|
|
|
+ lwz 3,stackArea@l(4)
|
|
|
+ stw 3,36(2)
|
|
|
+ lwz 3,4(0)
|
|
|
+ stw 3,56(2)
|
|
|
+ lwz 3,100(2)
|
|
|
+ mtlr 3
|
|
|
+ li 3,-690
|
|
|
+ blrl
|
|
|
+
|
|
|
+ /* Setting return value */
|
|
|
+ lis 4,returnValue@ha
|
|
|
+ lwz 3,returnValue@l(4)
|
|
|
+
|
|
|
+ lwz 4,0(1)
|
|
|
+ lwz 0,4(4)
|
|
|
+ mtlr 0
|
|
|
+ mr 1,4
|
|
|
+ blr
|
|
|
+
|
|
|
+_initproc:
|
|
|
+ /* Save Linkregister */
|
|
|
+ stwu 1,-128(1)
|
|
|
+ mflr 0
|
|
|
+ stw 13,52(1)
|
|
|
+ stw 14,56(1)
|
|
|
+ stw 15,60(1)
|
|
|
+ stw 16,64(1)
|
|
|
+ stw 17,68(1)
|
|
|
+ stw 18,72(1)
|
|
|
+ stw 19,76(1)
|
|
|
+ stw 20,80(1)
|
|
|
+ stw 21,84(1)
|
|
|
+ stw 22,88(1)
|
|
|
+ stw 23,92(1)
|
|
|
+ stw 24,96(1)
|
|
|
+ stw 25,100(1)
|
|
|
+ stw 26,104(1)
|
|
|
+ stw 27,108(1)
|
|
|
+ stw 28,112(1)
|
|
|
+ stw 29,116(1)
|
|
|
+ stw 30,120(1)
|
|
|
+ stw 31,124(1)
|
|
|
+ stw 0,132(1)
|
|
|
+
|
|
|
+ /* Save Stackpointer */
|
|
|
+ lis 4,OriginalStkPtr@ha
|
|
|
+ stw 1,OriginalStkPtr@l(4)
|
|
|
+
|
|
|
bl PASCALMAIN
|
|
|
|
|
|
.globl _haltproc
|
|
@@ -43,13 +123,33 @@ _haltproc:
|
|
|
lis 4,OriginalStkPtr@ha
|
|
|
lwz 1,OriginalStkPtr@l(4)
|
|
|
|
|
|
- lwz 11,0(1)
|
|
|
- lwz 0,4(11)
|
|
|
+ /* Store return value */
|
|
|
+ lis 4,returnValue@ha
|
|
|
+ stw 3,returnValue@l(4)
|
|
|
+
|
|
|
+ lwz 4,0(1)
|
|
|
+ lwz 0,4(4)
|
|
|
mtlr 0
|
|
|
- lwz 29,-12(11)
|
|
|
- lwz 30,-8(11)
|
|
|
- lwz 31,-4(11)
|
|
|
- mr 1,11
|
|
|
+ lwz 13,-76(4)
|
|
|
+ lwz 14,-72(4)
|
|
|
+ lwz 15,-68(4)
|
|
|
+ lwz 16,-64(4)
|
|
|
+ lwz 17,-60(4)
|
|
|
+ lwz 18,-56(4)
|
|
|
+ lwz 19,-52(4)
|
|
|
+ lwz 20,-48(4)
|
|
|
+ lwz 21,-44(4)
|
|
|
+ lwz 22,-40(4)
|
|
|
+ lwz 23,-36(4)
|
|
|
+ lwz 24,-32(4)
|
|
|
+ lwz 25,-28(4)
|
|
|
+ lwz 26,-24(4)
|
|
|
+ lwz 27,-20(4)
|
|
|
+ lwz 28,-16(4)
|
|
|
+ lwz 29,-12(4)
|
|
|
+ lwz 30,-8(4)
|
|
|
+ lwz 31,-4(4)
|
|
|
+ mr 1,4
|
|
|
blr
|
|
|
|
|
|
.globl _ExecBase
|
|
@@ -64,6 +164,28 @@ _ExecBase:
|
|
|
OriginalStkPtr:
|
|
|
.long 0
|
|
|
|
|
|
+ .globl OriginalLinkRegister
|
|
|
+ .align 4
|
|
|
+OriginalLinkRegister:
|
|
|
+ .long 0
|
|
|
+
|
|
|
+ .globl returnValue
|
|
|
+ .align 4
|
|
|
+returnValue:
|
|
|
+ .long 0
|
|
|
+
|
|
|
+ .globl stackArea
|
|
|
+ .align 4
|
|
|
+stackArea:
|
|
|
+ .long 0
|
|
|
+
|
|
|
+ .globl stackSwap
|
|
|
+ .align 4
|
|
|
+stackSwap:
|
|
|
+ .long 0
|
|
|
+ .long 0
|
|
|
+ .long 0
|
|
|
+
|
|
|
/* This is needed to be a proper MOS ABox executable */
|
|
|
/* This symbol _MUST NOT_ be stripped out from the executable */
|
|
|
/* or else... */
|
|
@@ -75,7 +197,10 @@ __abox__:
|
|
|
|
|
|
/*
|
|
|
$Log$
|
|
|
- Revision 1.7 2004-05-13 01:15:42 karoly
|
|
|
+ Revision 1.8 2004-06-05 19:25:12 karoly
|
|
|
+ + reworked to support resizing of stack
|
|
|
+
|
|
|
+ Revision 1.7 2004/05/13 01:15:42 karoly
|
|
|
- removed comment about argc/argv, made it work another way
|
|
|
|
|
|
Revision 1.6 2004/05/01 15:08:57 karoly
|