/ 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. .. = [core*2048.]-512. start: mov $..,sp mov sp,r1 cmp pc,r1 bhis 2f clr r0 cmp (r0),$407 bne 1f mov $20,r0 1: mov (r0)+,(r1)+ cmp r1,$core*2048. blo 1b jmp (sp) 2: mov $trvect,r5 mov $name,r4 jsr pc,rew mov $'=,r0 jsr pc,(r5) 2: mov r4,r1 1: jsr pc,getc 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,tread 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,tread jsr pc,rew br callout tapa: 0 wc: 0 ba: 0 name = ..-32. / 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,(r5) 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,(r5) inc (sp) br mesg 1: add $2,(sp) bic $1,(sp) rts pc callout: clr r0 cmp (r0),$407 bne 2f 1: mov 20(r0),(r0)+ cmp r0,sp blo 1b 2: mov $start,-(sp) clr pc trvect: br putc br getc br mesg 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,rrrec br 1b 2: jsr pc,rew br 1b 1: mov wc,r1 1: jsr pc,rrrec add $256.,r1 bmi 1b rts pc rrrec: tst tapa beq rrec / block 0 is really block 0 inc tapa / block 1->n is really block 2->n+1 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