home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Between Heaven & Hell 2
/
BetweenHeavenHell.cdr
/
500
/
471
/
rccl146
< prev
next >
Wrap
Text File
|
1987-03-02
|
5KB
|
225 lines
/ modified to add asleep function which allowes one to turn off
/ the clock interrupt fifo service sept 84
/ Stand alone C runtime startoff
/ Trap handler for system calls
/ Clock interrupt handler
.globl _end / data space addresses generated by the loader
.globl _edata
.globl __trap / system call simulator in Unix kernel code
.globl _zexit / system exit
.globl _main / user entry point
.globl _tick / interrupt enable and disable
.globl _onclk / addresse of clock interrupt routine
.globl _asleep / serial port control of clock interrupt enable/disable
.globl start / startoff entry point
.globl _wait / wait for bus interrupt
.globl _halt / halt processor
.globl savr5 / C run time save area
/ interrupt vectors
timeout=4
illegal=10
break=14
iott=20
pwr=24
emtt=30
trap=34
clock=100
vax=200
halt=0 / halt instruction
wait=1 / wait for bus interrupt
rti=2 / return from interrupt
bpt=3 / break point
.=timeout^. / bus timeout
panic1
340
.=illegal^. / illegal instructions
panic2
340
.=break^. / break point
panic3
340
.=iott^. / iot trap
panic4
340
.=pwr^. / power fail
panic5
340
.=emtt^. / emt instruction
panic6
340
.=trap^. /trap handler
traph
0
.=clock^. /clock
clock+2
rti
.=vax^.
panic7
340
panic8
340
.=2000^. /start address
start:
0106427 /mtps
0340 /max priority
mov $2000,sp /set up stack
clr _tick
mov $60,_asleep
clr inserf
mov $340,*$clock+2 /set up clock interrupt vector
mov $service,*$clock
mov $_edata,r0 /clear bss area
2: cmp r0,$_end
beq 3f
clrb (r0)+
br 2b
3:
mov $-1,-(sp)
mov $sname,-(sp) /simulate exec with dummy name
mov $1,-(sp)
mov sp,r0
mov (r0),-(sp)
tst (r0)+
mov r0,2(sp)
0106427 /mtps
0 /low priority
jsr pc,_main
clr (sp) / code 0
jsr pc,_zexit
cmp (sp)+,(sp)+
mov r0,(sp)
_halt:
halt
traph: /trap handler
mov r0,-(sp)
mov r1,-(sp)
jsr pc,__trap
mov (sp)+,r1
mov (sp)+,r0
rti
service:
bit $2000,*$-1300 / (DLV1->rcsr & READY)
jne L4 / == 0 then L4
mov *$-1276,_asleep / else _asleep = DLV1->rbuf
L4: cmp $60,_asleep / asleep??
bne 1f / NO then interrupt
rti / YES then return
1:
tst _tick / if tick is set equal to
bne 1f / zero,ignor interrupt
rti
1:
inc tcount / check for the proper no. of
cmp _tick,tcount / ticks before servicing the
beq 1f / interrupt
rti
1:
tst inserf / if routine still in service
beq 1f
mov $9,code
mov $_zexit,_onclk
1:
0106427 /mtps
0 /low priority
inc inserf
clr tcount
mov r0,-(sp) / save
mov r1,-(sp) / regs
mov r2,-(sp)
mov r3,-(sp)
mov r4,-(sp)
mov r5,-(sp)
mov code,-(sp)
jsr pc,*_onclk / call routine
tst (sp)+
mov (sp)+,r5 / restore
mov (sp)+,r4 / regs
mov (sp)+,r3
mov (sp)+,r2
mov (sp)+,r1
mov (sp)+,r0
clr inserf
clr code
clkrti: rti
_wait: / wait for bus interrupt and return
wait
rts pc
panic1: mov $1,code
br 1f
panic2: mov $2,code
br 1f
panic3: mov $3,code
br 1f
panic4: mov $4,code
br 1f
panic5: mov $5,code
br 1f
panic6: mov $6,code
br 1f
panic7: mov $7,code
br 1f
panic8: mov $8,code
1: 0106427 /mtps
0 /low priority
mov r0,-(sp) / save
mov r1,-(sp) / regs
mov r2,-(sp)
mov r3,-(sp)
mov r4,-(sp)
mov r5,-(sp)
mov code,-(sp)
jsr pc,_zexit
tst (sp)+
mov (sp)+,r5 / restore
mov (sp)+,r4 / regs
mov (sp)+,r3
mov (sp)+,r2
mov (sp)+,r1
mov (sp)+,r0
clr code
rti
retu: rts pc
.bss
savr5: .=.+2
.data
.=.+2 / loc 0 for I/D; null ptr points here.
sname: <dummy\0>
inserf: 0 / int routine in service
tcount: 0 / tick count
code : 0
_tick : 0 / global tick number
_onclk: retu / address of clock interupt routine
_asleep: 1