/ (lgl- / Mark Williams C for the Atari ST Version 1.0 / Copyright (c) 1984-1986 by Mark Williams Company, Chicago. / All rights reserved. May not be copied without permission. / -lgl) / / ST C run time startup. / / Stripped version for gem tos/aes/vdi environment: / main called with argc == argv == envp == 0, / getenv will not work / file handle 2 left pointing where ever it does, / .prvd .globl errno_ .globl environ_ .globl _stksize_ .globl _start_ errno_: .word 0 environ_: .long 0 / / a1 = end of bssd / a5 = base page pointer / _stksize_ = a long size for stack allocation / overwritten at runtime to make a stack limit / _start_ = program text base / .shri _start_: movea.l 4(a7), a5 / Fetch base page pointer movea.l 24(a5), a1 / Fetch bss base adda.l 28(a5), a1 / + size of bss / Allocate stack, a1 points beyond vectors move.l a1, d0 / Save stack limit adda.l _stksize_, a1 / Allocate _stksize_ bytes of stack move.l d0, _stksize_ / Save stack limit movea.l a1, a7 / Set the initial stack. move.l a1, 4(a5) / Save current brk for sbrk / Push arguments for main(argc, argv, envp) move.l a5, -(a7) / basepage clr.l -(a7) / envp[] clr.l -(a7) / argv[] clr -(a7) / argc / Release unused memory to the system pool. suba.l a5, a1 / Compute size of retained memory move.l a1, -(a7) move.l a5, -(a7) / Base of retained memory clr -(a7) / Must be zero move $0x4A, -(a7) / Mshrink opcode trap $1 / Gemdos adda $12, a7 / Pop arguments / Call main(argc, argv, envp) suba a6, a6 / Zero frame pointer jsr main_ / Call main line adda $10, a7 / Pop arguments / Exit with return from main move d0, -(a7) / Push status jsr exit_ / Call extended exit() move $0x4C, -(a7) / Terminate trap $1