AUSAM/source/mdec/hthp.s
/ copy mag tape to disk
/ load with proper tape and disk drivers
begin:
5 ///// reset
mov $100000,sp
jsr pc,rew
jsr pc,mesg
<\n***\n\0>
.even
2:
jsr pc,mesg
<filesys cyl= \0>
.even
jsr pc,numb
mov r0,dskc
jsr pc,mesg
<block no= \0>
.even
jsr pc,numb
mov r0,dska
jsr pc,mesg
<tape offset= \0>
.even
jsr pc,numb
mov r0,tapa
jsr pc,mesg
<count= \0>
.even
jsr pc,numb
mov r0,r2
1:
jsr pc,tread
jsr pc,wblk
inc tapa
inc dska
dec r2
bne 1b
jsr pc,rew
jbr begin
numb:
clr r1
1:
jsr pc,getc
cmp r0,$'\n
beq 1f
sub $'0,r0
cmp r0,$9
bhi 2f
mul $10.,r1
add r0,r1
br 1b
1:
mov r1,r0
rts pc
2:
jsr pc,mesg
<??\n\0>
.even
jbr begin
ba: buf
wc: -256.
.bss
buf: .=.+512.
dskc: .=.+2 ///// filesystem start address
dska: .=.+2 ///// block address in the filesystem
tapa: .=.+2
.text
////////////////////////////////////////////////// ht.s ////////////
htcs1 = 172440
htba = 172444
htfc = 172446
htcs2 = 172450
htds = 172452
httc = 172472
P800 = 1300
P1600 = 2300
PIP = 20000
MOL = 10000
ERR = 40000
REV = 33
READ = 71
REW = 7
tread:
1:
mov ba,mtma
cmp mtapa,tapa
beq 1f
bhi 2f
jsr pc,rrec
br 1b
2:
jsr pc,rew
br 1b
1:
mov wc,r1
1:
jsr pc,rrec
add $256.,r1
bmi 1b
rts pc
rrec:
mov $htds,r0
tstb (r0)
bpl rrec
bit $PIP,(r0)
bne rrec
bit $MOL,(r0)
beq rrec
mov $htfc,r0
mov $-512.,(r0)
mov mtma,-(r0)
mov $-256.,-(r0)
mov $READ,-(r0)
1:
tstb (r0)
bpl 1b
bit $ERR,*$htds
bpl 1f
mov $-1,*$htfc
mov $REV,(r0)
br rrec
1:
add $512.,mtma
inc mtapa
rts pc
rew:
clr *$htcs2
mov $P800,*$httc
mov $REW,*$htcs1
clr mtapa
rts pc
mtapa: 0
mtma: 0
///////////////////////////////////////////////// hp.s /////////////
/ rp04 disk driver
hpcs1 = 176700
hpda = 176706
hpcs2 = 176710
hpof = 176732
hpca = 176734
fmt22 = 010000
preset = 021
clear = 040
wblk:
first = .+2 / dirty, but i need the space
tst $0
bne 1f
mov $clear,*$hpcs2
mov $preset,*$hpcs1
mov $fmt22,*$hpof
inc first
1:
mov dska,r1
clr r0
div $22.,r0
mov r1,-(sp)
mov r0,r1
clr r0
div $19.,r0
bisb r1,1(sp)
add dskc,r0 //// relocate this cylinder address, for desired filesystem
mov r0,*$hpca
mov $hpda,r1
mov (sp)+,(r1)
mov ba,-(r1)
mov wc,-(r1)
mov $61,-(r1) //// write
1:
tstb (r1)
bpl 1b
rts pc
///////////////////////////////////////////////// tty.s ////////////
/ read and echo character from tty.
/ perform normal cr/lf uc/lc mapping.
tks = 177560
tkb = 177562
getc:
tstb *$tks
bge getc
mov tkb,r0
bic $!177,r0
cmp r0,$'A
blo 1f
cmp r0,$'Z
bhi 1f
add $'a-'A,r0
1:
cmp r0,$'\r
bne putc
mov $'\n,r0
/ put a character on the tty.
/ also performs delay.
tps = 177564
tpb = 177566
putc:
cmp r0,$'\n
bne 1f
mov $'\r,r0
jsr pc,putc
mov $'\n,r0
1:
tstb tps
bpl 1b
mov r0,tpb
rts pc
/ write a string to tty
/ jsr pc, mesg; <string\0>; .even
mesg:
movb *(sp),r0
beq 1f
jsr pc,putc
inc (sp)
br mesg
1:
add $2,(sp)
bic $1,(sp)
rts pc