home *** CD-ROM | disk | FTP | other *** search
- ; Initial startup routine for Aztec 'C' and ARP using RESIDENT.
- ; NB: This should allow access to all Aztec Features, math, etc.
- ; Could be made smaller if only for CLI, only for Workbench,
- ; Could be made smaller if only this or that.
- ;
- ; Created 02-18-88 by -+=SDB+=- from arpcrt0.s
- ; Copyright (c) 1988 by Scott Ballantyne, may be freely
- ; used by Arp Supporters/users.
- ; Use at your own risk.
- ;
- ; NB: References to the ___fromdisk__ long have to be handled carefully,
- ; since they are somewhat shizophrenic, sometimes referring to copied
- ; data, sometimes not. Note that they should fine for the C code without
- ; special handling as long as small model is used.
- ;
- INCLUDE "exec/types.i"
- INCLUDE "exec/exec_lib.i"
- INCLUDE "exec/execbase.i"
- INCLUDE "exec/memory.i"
- INCLUDE "exec/tasks.i"
- INCLUDE "exec/alerts.i"
-
- IFND MANX
- MANX SET 1
- ENDC
-
- INCLUDE "libraries/arpbase.i"
-
- mc68881
- entry .begin
- public .begin
- public _geta4
-
- * If you need more or less stack, change the first number below
- * For example, if your program only needs 4000 bytes of stack, the
- * line below would read:
- * RESIDENT 4000,__H2_end-__H1_org,loaded
- *
-
- .begin
- RESIDENT 10240,__H2_end-__H1_org,loaded
- moveq.l #0,d7 ; flag resident code
- move.l a4,a3 ; copy base
- add.l #32766,a4 ; bias
- bra.s clonedata ; and copy the data segment only
- loaded: moveq.l #-1,d7 ; flag not resident (start if from disk)
- far data
- move.l d7,___fromdisk__ ; needs to be set for _geta4
- near data
- bsr _geta4
- isresident:
- lea __H1_end,a1
- lea __H2_org,a2
- cmp.l a1,a2 ;check if BSS and DATA together
- bne normal ; this would actually be an error.
- move.w #((__H2_end-__H2_org)/4)-1,d1
- bmi normal
- move.l #0,d2
- loop
- move.l d2,(a1)+ ;clear out memory
- dbra d1,loop
- bra.s normal
- clonedata:
- move.l #((__H1_end-__H1_org)/4)-1,d1
- bmi.s normal
- far data
- lea __H1_end,a1
- lea __H2_org,a2
- cmp.l a1,a2
- beq.s 1$
- move.l #500,d0 ; error, must be same hunk, so scram
- rts
- 1$: lea.l __H1_org,a1 ; clone data and bss
- near data
- 0$ move.l (a1)+,(a3)+ ; a3 set to point to base
- dbra d1,0$
- normal: move.l sp,__savsp ; save stack pointer
- move.l 4,a6 ; get Exec's library base pointer
- move.l a6,_SysBase ; put where we can get it
- movem.l d0/a0,-(sp) ; save CLI command parameters
-
- btst.b #4,$129(a6) ;check for 68881 flag in AttnFlags
- beq 1$ ;skip if not
- lea 2$,a5
- jsr -30(a6) ;do it in supervisor mode
- bra 1$
- 2$
- clr.l -(sp)
- frestore (sp)+ ;reset the ffp stuff
- rte ;and return
- 1$
-
- lea ARPNAME,a1 ;get name of arp_library
- moveq.l #ArpVersion,d0
- SYSCALL OpenLibrary
- move.l d0,_ArpBase ; set up pointer
- move.l d0,_DOSBase ; also as Dos pointer
- beq AhOhNoARP ; go away if not ok.
- move.l d0,a0
- move.l GfxBase(a0),_GfxBase ; Give free graphics.library
- move.l IntuiBase(a0),_IntuitionBase ; and free intuition.library
- jsr __main ;call the startup stuff
- 4$
- add.w #8,sp ;pop args
- rts ;and return
-
- dosname dc.b 'dos.library',0
- alibmsg dc.b 'you need '
- ARPNAME: ArpName
- dc.b ' V34+',10
- ds.w 0
-
- near data
-
- AhOhNoARP:
- lea.l dosname,a1
- SYSCALL OpenLibrary
- tst.l d0
- beq.s 1$
- move.l d0,a6
- SYSCALL Output
- move.l d0,d1
- beq.s 1$
- move.l #alibmsg,d2
- move.l #ALIBLNG,d3
- SYSCALL Write
- 1$: addq #8,sp
- rts
-
- public __main,__H0_org
-
- dseg
-
- public _SysBase,__savsp,_DOSBase
- public __H1_org,__H1_end,__H2_org,__H2_end
- public _ArpBase
- public _IntuitionBase,_GfxBase
- public ___fromdisk__
-