LSX/sys/low.s
/ Copyright 1975 Bell Telephone Laboratories Inc
/ low core
br4 = 340
br5 = 340
br6 = 340
br7 = 340
. = 0^.
br 1f
4
/ trap vectors
trap; br7+0. / bus error
.if EIS
trap; br7+1. / illegal instruction
.endif
.if EIS-1
.globl trapem
trapem; br7+1. / emulation package
.endif
trap; br7+2. / bpt-trace trap
trap; br7+3. / iot trap
trap; br7+4. / power fail
trap; br7+5. / emulator trap
trap; br7+6. / system entry
. = 40^.
.globl start
1: jmp start
jmp dump
.if RXROM
jmp reboot
.endif
.if KL
. = 60^.
klin; br4
klou; br4
.endif
.if CLOCK
. = 100^.
kwlp; br6
kwlp; br6
.endif
.if PER
. = 124^.
fdintr; br5
.endif
//////////////////////////////////////////////////////
/ interface code to C
//////////////////////////////////////////////////////
.globl call, trap
.if KL
.globl _klrint, _klxint
klin: jsr r0,call; _klrint
klou: jsr r0,call; _klxint
.endif
.if CLOCK
.globl _clock
kwlp: jsr r0,call; _clock
.endif
.globl _fdintr
fdintr: jsr r0,call; _fdintr
.globl _panic
_panic:
dump:
0
.if AED
. = 170^.
fdintr; br5
.endif
.if PER
. = 174^.
fdintr; br5
.endif
.if SYK
. = 174^.
fdintr; br5
.endif
.if TVT
. = 200^.
klin; br5
.endif
.if RF
. = 204^.
fdintr; br5
.endif
.if DEC
.if EIS-1
.globl _decmch
rxcs = 177170
rxdb = 177172
_decmch:
mov r2,-(sp)
mov $rxdb,r1
mov 4(sp),r0
asl r0
add 4(sp),r0
clr r2
0:
sub $26.,r0
bmi 0f
inc r2
br 0b
0:
add $26.,r0
inc r0
mov r0,(r1) / sector number
0:
bit $200,-2(r1)
beq 0b
mov r2,r0
clr r2
0:
sub $3.,r0
bmi 0f
inc r2
br 0b
0:
.if IBMS
inc r2
cmp $77.,r2
bne 0f
clr r2
0:
.endif
mov r2,(r1) / track number
mov (sp)+,r2
rts pc
.endif
. = 264^.
fdintr; br5
.endif
.if FLTVECT
. = 300^.
. = .+40
.endif
.if RXROM
reboot:
/
/ rxrom.p -- is similar to the DEC rom bootstrap
/ programs for the rx11 floppy disk units.
/
unit_0 =0
go =1
empty =2
rdrx =6
unit_1 =20
done =40
treq =200
error =100000
rxcs =177170
/
.globl rxrom
/
rxrom:
/can use unit_1 below to boot from unit 1
mov $error+treq+done+unit_0+rdrx+go,r2 /mask reg
x0:
mov $rxcs,r1 /pointer to status reg
x1:
bitb r2,(r1) /test done bit
jeq x1
movb $7,r3 /3 bits for loop counter
mov r1,r0 /pointer - rxcs then rxdb
mov r2,(r0)+ /read sector command
jbr x3
x2:
mov $1,(r0) /sector 1; track 1; nop
x3:
asr r3 /shift out bits for loop count
jcs x5 /jmp if r3 not zero
movb (pc)+,(r1) /the following immediate operand
/111023 looks like an empty function
/023 == 3 == (empty + go)
x4:
movb (r0),(r3)+ /read a byte into core from zero
x5:
bit r2,(r1) /error, "treq", done
jeq x5 /until ready
jmi x0 /error condition
jcs x2 /jmp if set by "x3:"
tstb (r1) /is treq set
jmi x4 /jmp if treq high
clr r0 /pointer to location zero
cmp $240,(r0) /nop instruction at location zero
jne x0 /retry if test fails
cmpb $treq+done+rdrx+go,r2 /clear carry if equal
adc r0 /id unit number 0,1 (see rxrom:)
clr pc /execute the bootstrap
/
/ the following is the octal of the above program.
/ this program can be loaded anywhere after location 1000
/
/ 012702
/ 100247 /this can be 100267 for booting from unit 1
/ 012701
/ 177170
/ 130211
/ 001776
/ 112703
/ 000007
/ 010100
/ 010220
/ 000402
/ 012710
/ 000001
/ 006203
/ 103402
/ 112711
/ 111023
/ 030211
/ 001776
/ 100756
/ 103766
/ 105711
/ 100771
/ 005000
/ 022710
/ 000240
/ 001347
/ 122702
/ 000247
/ 005500
/ 005007
/
/ end of hardware type rom program
/
/ .end rxrom.p
.endif