257 lines
2.6 KiB
ArmAsm
257 lines
2.6 KiB
ArmAsm
/ tape boot program to load and transfer
|
|
/ to a 'tp' entry
|
|
|
|
/ entry is made by jsr pc,*$0
|
|
/ so return can be rts pc
|
|
/ jsr pc,(r5) is putc
|
|
/ jsr pc,2(r5) is getc
|
|
/ jsr pc,4(r5) is mesg
|
|
|
|
core = 24.
|
|
.mt. = 1
|
|
.. = [core*2048.]-512.
|
|
start:
|
|
mov $..,sp
|
|
mov $name,r4
|
|
mov sp,r1
|
|
cmp pc,r1
|
|
bhis 2f
|
|
clr r0
|
|
cmp (r0),$407
|
|
bne 1f
|
|
mov $20,r0
|
|
1:
|
|
mov (r0)+,(r1)+
|
|
cmp r1,$end
|
|
blo 1b
|
|
jmp (sp)
|
|
|
|
2:
|
|
jsr pc,rew
|
|
mov $tvec,r5
|
|
mov $'=,r0
|
|
jsr pc,(r5)
|
|
2:
|
|
mov r4,r1
|
|
1:
|
|
jsr pc,2(r5)
|
|
cmp r0,$'\n
|
|
beq 1f
|
|
cmp r0,$'@
|
|
beq 2b
|
|
movb r0,(r1)+
|
|
cmp r0,$'#
|
|
bne 1b
|
|
sub $2,r1
|
|
cmp r1,r4
|
|
blo 2b
|
|
br 1b
|
|
1:
|
|
clrb (r1)
|
|
cmp r1,r4
|
|
blos start
|
|
mov $1,tapa
|
|
mov $-6144.,wc
|
|
jsr pc,taper
|
|
clr r1
|
|
1:
|
|
mov r1,r2
|
|
mov r4,r0
|
|
2:
|
|
cmpb (r0)+,(r1)
|
|
bne 2f
|
|
tstb (r1)+
|
|
bne 2b
|
|
br 1f
|
|
2:
|
|
mov r2,r1
|
|
add $64.,r1
|
|
cmp r1,$12288.
|
|
blo 1b
|
|
jsr pc,rew
|
|
br start
|
|
1:
|
|
mov 44.(r2),tapa
|
|
mov 38.(r2),r0
|
|
inc r0
|
|
clc
|
|
ror r0
|
|
neg r0
|
|
mov r0,wc
|
|
clr r0
|
|
1:
|
|
clr (r0)+
|
|
cmp r0,sp
|
|
blo 1b
|
|
jsr pc,taper
|
|
jsr pc,rew
|
|
clr r0
|
|
cmp (r0),$407 / unix a.out?
|
|
bne 2f
|
|
1:
|
|
mov 20(r0),(r0)+
|
|
cmp r0,sp
|
|
blo 1b
|
|
2:
|
|
jsr pc,*$0
|
|
br start
|
|
|
|
.if .mt.
|
|
mts = 172520
|
|
mtc = 172522
|
|
mtbrc = 172524
|
|
mtcma = 172526
|
|
|
|
taper:
|
|
clr mtma
|
|
cmp mtapa,tapa
|
|
beq 1f
|
|
bhi 2f
|
|
jsr pc,rrec
|
|
br taper
|
|
2:
|
|
jsr pc,rew
|
|
br taper
|
|
1:
|
|
mov wc,r1
|
|
1:
|
|
jsr pc,rrec
|
|
add $256.,r1
|
|
bmi 1b
|
|
rts pc
|
|
|
|
rrec:
|
|
bit $2,*$mts
|
|
bne rrec
|
|
tstb *$mtc
|
|
bge rrec
|
|
mov $-512.,*$mtbrc
|
|
mov mtma,*$mtcma
|
|
mov $60003,*$mtc
|
|
1:
|
|
tstb *$mtc
|
|
bge 1b
|
|
tst *$mtc
|
|
bge 1f
|
|
mov $-1,*$mtbrc
|
|
mov $60013,*$mtc
|
|
br rrec
|
|
1:
|
|
add $512.,mtma
|
|
inc mtapa
|
|
rts pc
|
|
|
|
rew:
|
|
mov $60017,*$mtc
|
|
clr mtapa
|
|
rts pc
|
|
.endif
|
|
|
|
.if .mt.-1
|
|
tcdt = 177350
|
|
tccm = 177342
|
|
taper:
|
|
mov $tcdt,r0
|
|
mov $tccm,r1
|
|
for:
|
|
mov $3,(r1) / rbn for
|
|
1:
|
|
tstb (r1)
|
|
bge 1b
|
|
tst (r1)
|
|
blt rev
|
|
cmp tapa,(r0)
|
|
beq rd
|
|
bgt for
|
|
|
|
rev:
|
|
mov $4003,(r1) / rbn bac
|
|
1:
|
|
tstb (r1)
|
|
bge 1b
|
|
tst (r1)
|
|
blt for
|
|
mov (r0),r2
|
|
add $5,r2
|
|
cmp tapa,r2
|
|
blt rev
|
|
br for
|
|
|
|
rd:
|
|
clr -(r0) / bus addr
|
|
mov wc,-(r0) / wc
|
|
mov $5,-(r0) / read
|
|
1:
|
|
tstb (r1)
|
|
bge 1b
|
|
tst (r1)
|
|
blt taper
|
|
rts pc
|
|
|
|
rew:
|
|
mov $4003,tccm
|
|
rts pc
|
|
.endif
|
|
|
|
tvec:
|
|
br putc
|
|
br getc
|
|
br mesg
|
|
|
|
tks = 177560
|
|
tkb = 177562
|
|
getc:
|
|
mov $tks,r0
|
|
inc (r0)
|
|
1:
|
|
tstb (r0)
|
|
bge 1b
|
|
mov tkb,r0
|
|
bic $!177,r0
|
|
cmp r0,$'A
|
|
blo 1f
|
|
cmp r0,$'Z
|
|
bhi 1f
|
|
add $40,r0
|
|
1:
|
|
cmp r0,$'\r
|
|
bne putc
|
|
mov $'\n,r0
|
|
|
|
tps = 177564
|
|
tpb = 177566
|
|
putc:
|
|
tstb tps
|
|
bge putc
|
|
cmp r0,$'\n
|
|
bne 1f
|
|
mov $'\r,r0
|
|
jsr pc,(r5)
|
|
mov $'\n+200,r0
|
|
jsr pc,(r5)
|
|
clr r0
|
|
jsr pc,(r5)
|
|
mov $'\n,r0
|
|
rts pc
|
|
1:
|
|
mov r0,tpb
|
|
rts pc
|
|
|
|
mesg:
|
|
movb *(sp),r0
|
|
beq 1f
|
|
jsr pc,(r5)
|
|
inc (sp)
|
|
br mesg
|
|
1:
|
|
add $2,(sp)
|
|
bic $1,(sp)
|
|
rts pc
|
|
|
|
end:
|
|
tapa: .=.+2
|
|
mtapa: .=.+2
|
|
mtma: .=.+2
|
|
wc: .=.+2
|
|
name: .=.+32.
|