87 lines
1.2 KiB
ArmAsm
87 lines
1.2 KiB
ArmAsm
|
.define CERASE,CKILL,CSTOP,CSTART
|
||
|
.define .lino,.filn
|
||
|
|
||
|
.define F_DUM,EXIT
|
||
|
|
||
|
.define begtext,begdata,begbss
|
||
|
.define EARRAY,ERANGE,ESET,EIDIVZ,EHEAP,EILLINS,ECASE,EBADGTO
|
||
|
.define hol0,.reghp,.limhp,.trpim,.trppc
|
||
|
.define LINO_AD,FILN_AD
|
||
|
|
||
|
! EM runtime start-off for the Bleasdale 68000 system
|
||
|
|
||
|
|
||
|
CERASE = 010
|
||
|
CKILL = 030
|
||
|
CSTART = 021
|
||
|
CSTOP = 023
|
||
|
F_DUM = 0
|
||
|
|
||
|
|
||
|
LINO_AD = 0
|
||
|
FILN_AD = 4
|
||
|
|
||
|
EARRAY = 0
|
||
|
ERANGE = 1
|
||
|
ESET = 2
|
||
|
EIDIVZ = 6
|
||
|
EHEAP = 17
|
||
|
EILLINS = 18
|
||
|
ECASE = 20
|
||
|
EBADGTO = 27
|
||
|
|
||
|
.base 0x20000
|
||
|
.text
|
||
|
begtext:
|
||
|
! Bleasdale puts the argument and environment vectors
|
||
|
! themselves on top of the stack, instead of POINTERS
|
||
|
! to these vectors. We get things right here.
|
||
|
move.l 4(sp),a0
|
||
|
clr.l -4(a0)
|
||
|
move.l sp,a0
|
||
|
sub.l #8,sp
|
||
|
move.l (a0),(sp)
|
||
|
add.l #4,a0
|
||
|
move.l a0,4(sp)
|
||
|
1:
|
||
|
tst.l (a0)+
|
||
|
bne 1b
|
||
|
move.l 4(sp),a1
|
||
|
cmp.l (a1),a0
|
||
|
blt 2f
|
||
|
sub.l #4,a0
|
||
|
2:
|
||
|
move.l a0,8(sp)
|
||
|
|
||
|
! Now the stack contains an argc (4 bytes), argv-pointer and
|
||
|
! envp pointer.
|
||
|
|
||
|
add.l #2,sp !convert argc from 4-byte to 2-byte
|
||
|
pea endbss
|
||
|
jsr _brk
|
||
|
add.l #4,sp
|
||
|
jsr _m_a_i_n
|
||
|
add #010,sp
|
||
|
EXIT:
|
||
|
jsr __exit
|
||
|
|
||
|
.data
|
||
|
begdata:
|
||
|
hol0:
|
||
|
.lino:
|
||
|
.short 0,0 ! lino
|
||
|
.filn:
|
||
|
.long 0 ! filn
|
||
|
.reghp:
|
||
|
.long endbss
|
||
|
.limhp:
|
||
|
.long endbss
|
||
|
.trppc:
|
||
|
.long 0
|
||
|
.trpim:
|
||
|
.short 0
|
||
|
|
||
|
|
||
|
.bss
|
||
|
begbss:
|