53 lines
1.1 KiB
ArmAsm
53 lines
1.1 KiB
ArmAsm
/* Bootstrap program for HARP. */
|
|
|
|
.perm x
|
|
.entry
|
|
|
|
boot: ldi %r5, kernEnt;
|
|
skep %r5;
|
|
|
|
/* ldi %r0, #1;
|
|
ldi %r1, #033;
|
|
ldi %r2, __WORD;
|
|
muli %r2, %r2, #8;
|
|
subi %r2, %r2, #1;
|
|
shl %r0, %r0, %r2;
|
|
tlbadd %r0, %r0, %r1; */
|
|
|
|
ei;
|
|
|
|
ldi %r5, entry;
|
|
jmpru %r5;
|
|
|
|
.perm x
|
|
/* The Kernel Entry Point / Interrupt service routine. */
|
|
kernEnt: subi %r0, %r0, #1;
|
|
rtop @p0, %r0;
|
|
@p0 ? jmpi kernEnt1; /* If it's not page not found, try again. */
|
|
|
|
ldi %r0, #077; /* Just map virt to phys, any address. */
|
|
tlbadd %r1, %r1, %r0;
|
|
reti;
|
|
|
|
kernEnt1: subi %r0, %r0, #7; /* If it's not console input, halt.*/
|
|
rtop @p0, %r0;
|
|
@p0 ? halt;
|
|
|
|
ldi %r8, #1;
|
|
ldi %r1, __WORD;
|
|
muli %r1, %r1, #8;
|
|
subi %r1, %r1, #1;
|
|
shl %r8, %r8, %r1;
|
|
|
|
ld %r0, %r8, #0;
|
|
subi %r1, %r0, #0x71
|
|
rtop @p0, %r1
|
|
notp @p0, @p0
|
|
@p0 ? halt; /* If it's 'q', halt. */
|
|
st %r0, %r8, #0;
|
|
ldi %r0, #0xa;
|
|
st %r0, %r8, #0;
|
|
reti;
|
|
|
|
|