2624e5d05c
position. This should be fixed as well, but how?
85 lines
1.2 KiB
ArmAsm
85 lines
1.2 KiB
ArmAsm
.global lino,filn
|
|
.global EXIT
|
|
.global begtext,begdata,begbss
|
|
.global EARRAY,ERANGE,ESET,EIDIVZ,EHEAP,EILLINS,ECASE,EBADGTO
|
|
.global hol0,reghp,limhp,trpim,trppc
|
|
.global _start
|
|
|
|
! runtime startof for sparc on sun4
|
|
|
|
|
|
LINO_AD = 0
|
|
FILN_AD = 4
|
|
|
|
EARRAY = 0
|
|
ERANGE = 1
|
|
ESET = 2
|
|
EIDIVZ = 6
|
|
EHEAP = 17
|
|
EILLINS = 18
|
|
ECASE = 20
|
|
EBADGTO = 27
|
|
|
|
.section ".text"
|
|
|
|
begtext:
|
|
_start:
|
|
clr %fp
|
|
ld [%sp + 0x40], %o0
|
|
add %sp, 0x44, %o1
|
|
|
|
sub %sp, 32, %sp
|
|
|
|
sll %o0, 0x2, %o2
|
|
add %o2, 0x4, %o2
|
|
add %o1, %o2, %o2
|
|
set -0x100000, %g4 ! should be a few M
|
|
clr %l1
|
|
mov %sp, %l0
|
|
add %sp, %g4, %sp
|
|
dec 12, %l0
|
|
! enable divide by 0 trap and improper
|
|
! trap
|
|
st %fsr, [%l0]
|
|
ld [%l0], %o3
|
|
set 0x09000000, %o4
|
|
or %o3, %o4, %o3
|
|
st %o3, [%l0]
|
|
ld [%l0], %fsr
|
|
|
|
st %o0, [%l0]
|
|
st %o1, [%l0+4]
|
|
st %o2, [%l0+8]
|
|
|
|
call $_m_a_i_n
|
|
nop
|
|
dec 4, %l0
|
|
st %g0, [%l0]
|
|
EXIT:
|
|
call $_exit
|
|
nop
|
|
|
|
.type _start,#function
|
|
.size _start,.-_start
|
|
|
|
.section ".data"
|
|
begdata:
|
|
.word 0 ! may be at virtual address 0 with no problem
|
|
hol0:
|
|
lino:
|
|
.word 0 ! lino
|
|
filn:
|
|
.word 0 ! filn
|
|
reghp:
|
|
.word _end
|
|
limhp:
|
|
.word _end
|
|
trppc:
|
|
.word 0
|
|
trpim:
|
|
.word 0 ! USED TO BE 2 BYTES; IS THIS RIGHT?
|
|
|
|
|
|
.section ".bss"
|
|
begbss: !initialization is not needed because ALL entries are in zero space!
|