home *** CD-ROM | disk | FTP | other *** search
-
- ; StormC Startupcode
- ; $VER StormC Startupcode 1.05 (21.02.95)
-
- ; Copyright HAAGE & PARTNER Computer GmbH
-
- ; datamodel: NEAR
- ; codemodel: FAR
-
- ; This startup code is not of much use because the small datamodel a6 is
- ; mainly created for shared library programming
-
- XDEF _exit
- XDEF abort__STANDARD
- XDEF _SysBase
-
- XREF _InitModules
- XREF _CleanupModules
- XREF main_
- XREF wbmain__P09WBStartup
-
- XREF _LinkerDB
- XREF __OFFSET
- XREF __BSSBAS
- XREF __BSSLEN
- XREF RESIDENT
- XREF _DDSIZE
- XREF _DDTABLE
- XREF __DATALEN
-
- TTL "NEAR_A6"
-
- Forbid = -132
- GetMsg = -372
- ReplyMsg = -378
- WaitPort = -384
-
- SECTION "startup",CODE
-
- NEAR a6,-1
-
- move.l 4.w,a6
- move.l a7,a5 ; stackframe for _exit
-
- move.l $114(a6),a1 ; ThisTask
- tst.l $AC(a1)
- bne .cli
-
- ; Run from Workbench
- lea $5C(a1),a0
- move.l a0,-(a7)
- jsr WaitPort(a6)
- move.l (a7)+,a0
- jsr GetMsg(a6)
- move.l a6,-(a7)
- move.l d0,-(a7)
- bsr initNearData
- move.l (a7)+,StartupMessage(a6)
- move.l (a7)+,_SysBase(a6)
- move.l a5,returnAddress(a6)
- jsr _InitModules
- move.l StartupMessage(a6),-(a7)
- jsr wbmain__P09WBStartup
- addq.l #4,a7
- jsr _CleanupModules
- move.l _SysBase(a6),a4
- move.l StartupMessage(a6),-(a7)
- bsr exitNearData
- jsr Forbid(a6)
- move.l (a7)+,a1
- jsr ReplyMsg(a6)
- moveq #0,d0
- rts
-
- .cli
- move.l a0,-(a7)
- move.l d0,-(a7)
- move.l a6,-(a7)
- bsr initNearData
- move.l (a7)+,_SysBase(a6)
- move.l a5,returnAddress(a6)
- jsr _InitModules
- jsr main_
- addq.l #8,a7
- move.l d0,-(a7)
- jsr _CleanupModules
- move.l _SysBase(a6),a4
- bsr exitNearData
- move.l (a7)+,d0
- rts
-
- initNearData
- ; _SysBase is in a6, a6 gets _LinkerDB
- moveq #RESIDENT,d0
- bne .resident
- move.l #__BSSLEN,d0
- lea __BSSBAS,a0
- bra .1
- .l1
- clr.l (a0)+
- .1
- dbf d0,.l1
- lea _LinkerDB,a6
- rts
- .resident
- ; alloc DATA/BSS Hunk
- move.l #__DATALEN,d0
- add.l #__BSSLEN,d0
- lsl.l #2,d0
- moveq #0,d1
- jsr -198(a6) ; AllocMem
- tst.l d0
- beq .nomem
- move.l d0,a4
-
- ; copy DATA
- lea _LinkerDB,a0
- sub.l #__OFFSET,a0
- move.l d0,a1
- move.l #__DATALEN,d0
- lsl.l #2,d0
- jsr -630(a6) ; CopyMemQuick
-
- ; reloc DATA
- move.l #_DDSIZE,d0
- lea _DDTABLE,a0
- bra .2
- .l2
- move.l (a0)++,d1
- lsl.l #2,d1
- add.l a4,d1
- move.l d1,a1
- move.l (a1),d1
- add.l a4,d1
- move.l d1,(a1)
- .2
- dbf d0,.l2
-
- ; clear BSS
- move.l a4,a0
- move.l #__DATALEN,d0
- lsl.l #2,d0
- add.l d0,a0
- move.l #__BSSLEN,d0
- bra .3
- .l3
- clr.l (a0)++
- .3
- dbf d0,.l3
-
- move.l a4,a6
- add.l #__OFFSET,a6
- rts
- .nomem
- move.l a5,a7
- move.l #999,d0
- rts
-
- exitNearData
- ; _SysBase is in a4, is moved to a6
- moveq #RESIDENT,d0
- beq .notresident
- move.l a6,a1
- sub.l #__OFFSET,a1
- move.l #__DATALEN,d0
- add.l #__BSSLEN,d0
- lsl.l #2,d0
- move.l a4,a6
- jsr -210(a6) ; FreeMem
- .notresident
- rts
-
- SECTION "exit",CODE
-
- _exit
- move.l 4(a7),d0
- move.l returnAddress(a6),a7
- move.l d0,-(a7)
- jsr _CleanupModules
- move.l StartupMessage(a6),-(a7)
- move.l _SysBase(a6),a4
- jsr exitNearData
- move.l (a7)+,d2
- beq .nowb
- jsr Forbid(a6)
- move.l d2,a1
- jsr ReplyMsg(a6)
- .nowb
- move.l (a7)+,d0
- rts
-
- SECTION "abort_STANDARD",CODE
-
- abort__STANDARD
- move.l returnAddress(a6),a7
- move.l StartupMessage(a6),-(a7)
- move.l _SysBase(a6),a4
- jsr exitNearData
- move.l (a7)+,d2
- beq .nowb
- jsr Forbid(a6)
- move.l d2,a1
- jsr ReplyMsg(a6)
- .nowb
- moveq #20,d0
- rts
-
- SECTION "startupd",DATA
-
- _SysBase
- dc.l 0
- returnAddress
- dc.l 0
- StartupMessage
- dc.l 0
-
- END
-