1: / disk boot program to load and transfer
   2: / to a unix entry
   3: 
   4: / entry is made by jsr pc,*$0
   5: / so return can be rts pc
   6: 
   7: core = 28.
   8: .. = [core*2048.]-512.
   9: 
  10: / establish sp and check if running below
  11: / intended origin, if so, copy
  12: / program up to 'core' K words.
  13: start:
  14:         mov     $..,sp
  15:         mov     sp,r1
  16:         cmp     pc,r1
  17:         bhis    2f
  18:         clr     r0
  19:         cmp     (r0),$407
  20:         bne     1f
  21:         mov     $20,r0
  22: 1:
  23:         mov     (r0)+,(r1)+
  24:         cmp     r1,$end
  25:         blo     1b
  26:         jmp     (sp)
  27: 
  28: / clear core to make things clean
  29: 2:
  30:         clr     (r0)+
  31:         cmp     r0,sp
  32:         blo     2b
  33: 
  34: / at origin, read pathname,
  35: / initialize rp
  36: 
  37:         clr     *$rpcs          / selects drive zero
  38: / spread out in array 'names', one
  39: / component every 14 bytes.
  40:         mov     $names,r1
  41: 1:
  42:         mov     r1,r2
  43: 2:
  44:         jsr     pc,getc
  45:         cmp     r0,$'\n
  46:         beq     1f
  47:         cmp     r0,$'/
  48:         beq     3f
  49:         movb    r0,(r2)+
  50:         br      2b
  51: 3:
  52:         cmp     r1,r2
  53:         beq     2b
  54:         add     $14.,r1
  55:         br      1b
  56: 
  57: / now start reading the inodes
  58: / starting at the root and
  59: / going through directories
  60: 1:
  61:         mov     $names,r1
  62:         mov     $2,r0
  63: 1:
  64:         clr     bno
  65:         jsr     pc,iget
  66:         tst     (r1)
  67:         beq     1f
  68: 2:
  69:         jsr     pc,rmblk
  70:                 br start
  71:         mov     $buf,r2
  72: 3:
  73:         mov     r1,r3
  74:         mov     r2,r4
  75:         add     $16.,r2
  76:         tst     (r4)+
  77:         beq     5f
  78: 4:
  79:         cmpb    (r3)+,(r4)+
  80:         bne     5f
  81:         cmp     r4,r2
  82:         blo     4b
  83:         mov     -16.(r2),r0
  84:         add     $14.,r1
  85:         br      1b
  86: 5:
  87:         cmp     r2,$buf+512.
  88:         blo     3b
  89:         br      2b
  90: 
  91: / read file into core until
  92: / a mapping error, (no disk address)
  93: 1:
  94:         clr     r1
  95: 1:
  96:         jsr     pc,rmblk
  97:                 br 1f
  98:         mov     $buf,r2
  99: 2:
 100:         mov     (r2)+,(r1)+
 101:         cmp     r2,$buf+512.
 102:         blo     2b
 103:         br      1b
 104: / relocate core around
 105: / assembler header
 106: 1:
 107:         clr     r0
 108:         cmp     (r0),$407
 109:         bne     2f
 110: 1:
 111:         mov     20(r0),(r0)+
 112:         cmp     r0,sp
 113:         blo     1b
 114: / enter program and
 115: / restart if return
 116: 2:
 117:         jsr     pc,*$0
 118:         br      start
 119: 
 120: / get the inode specified in r0
 121: iget:
 122:         add     $15.,r0
 123:         mov     r0,r5
 124:         ash     $-3.,r0
 125:         bic     $!17777,r0
 126:         mov     r0,dno
 127:         clr     r0
 128:         jsr     pc,rblk
 129:         bic     $!7,r5
 130:         ash     $6,r5
 131:         add     $buf,r5
 132:         mov     $inod,r4
 133: 1:
 134:         mov     (r5)+,(r4)+
 135:         cmp     r4,$inod+64.
 136:         blo     1b
 137:         rts     pc
 138: 
 139: / read a mapped block
 140: / offset in file is in bno.
 141: / skip if success, no skip if fail
 142: / the algorithm only handles a single
 143: / indirect block. that means that
 144: / files longer than 10+128 blocks cannot
 145: / be loaded.
 146: rmblk:
 147:         add     $2,(sp)
 148:         mov     bno,r0
 149:         cmp     r0,$10.
 150:         blt     1f
 151:         mov     $10.,r0
 152: 1:
 153:         mov     r0,-(sp)
 154:         asl     r0
 155:         add     (sp)+,r0
 156:         add     $addr+1,r0
 157:         movb    (r0)+,dno
 158:         movb    (r0)+,dno+1
 159:         movb    -3(r0),r0
 160:         bne     1f
 161:         tst     dno
 162:         beq     2f
 163: 1:
 164:         jsr     pc,rblk
 165:         mov     bno,r0
 166:         inc     bno
 167:         sub     $10.,r0
 168:         blt     1f
 169:         ash     $2,r0
 170:         mov     buf+2(r0),dno
 171:         mov     buf(r0),r0
 172:         bne     rblk
 173:         tst     dno
 174:         bne     rblk
 175: 2:
 176:         sub     $2,(sp)
 177: 1:
 178:         rts     pc
 179: 
 180: cyl     = 0.
 181: read    = 4
 182: go      = 1
 183: 
 184: rpcs    = 176710
 185: rpda    = 176724
 186: rpca    = 176722
 187: rpba    = 176720
 188: / rp03 disk driver.
 189: / low order address in dno,
 190: / high order in r0.
 191: rblk:
 192:         mov     r1,-(sp)
 193:         mov     dno,r1
 194:         div     $20.*10.,r0
 195: /	add	$cyl,r0
 196:         mov     r0,*$rpca
 197:         clr     r0
 198:         div     $10.,r0
 199:         swab    r0
 200:         bis     r1,r0
 201:         mov     r0,*$rpda
 202:         mov     $rpba,r1
 203:         mov     $buf,(r1)
 204:         mov     $-256.,-(r1)
 205:         mov     $read+go,-(r1)
 206: 1:
 207:         tstb    (r1)
 208:         bge     1b
 209:         mov     (sp)+,r1
 210:         rts     pc
 211: 
 212: tks = 177560
 213: tkb = 177562
 214: / read and echo a teletype character
 215: getc:
 216:         mov     $tks,r0
 217:         inc     (r0)
 218: 1:
 219:         tstb    (r0)
 220:         bge     1b
 221:         mov     tkb,r0
 222:         bic     $!177,r0
 223:         cmp     r0,$'A
 224:         blo     1f
 225:         cmp     r0,$'Z
 226:         bhi     1f
 227:         add     $'a-'A,r0
 228: 1:
 229: 
 230: tps = 177564
 231: tpb = 177566
 232: / print a teletype character
 233: putc:
 234:         tstb    *$tps
 235:         bge     putc
 236:         mov     r0,*$tpb
 237:         cmp     r0,$'\r
 238:         bne     1f
 239:         mov     $'\n,r0
 240:         br      putc
 241: 1:
 242:         rts     pc
 243: 
 244: end:
 245: inod = ..-1024.
 246: addr = inod+12.
 247: buf = inod+64.
 248: bno = buf+512.
 249: dno = bno+2
 250: names = dno+2
 251: reset = 5

Defined functions

addr defined in line 246; used 1 times
bno defined in line 248; used 5 times
buf defined in line 247; used 9 times
core defined in line 7; used 1 times
  • in line 8
cyl defined in line 180; never used
dno defined in line 249; used 8 times
end defined in line 244; used 1 times
  • in line 24
getc defined in line 215; used 1 times
  • in line 44
go defined in line 182; used 1 times
iget defined in line 121; used 1 times
  • in line 65
inod defined in line 245; used 4 times
names defined in line 250; used 2 times
putc defined in line 233; used 2 times
rblk defined in line 191; used 4 times
read defined in line 181; used 1 times
rmblk defined in line 146; used 2 times
rpba defined in line 187; used 1 times
rpca defined in line 186; used 1 times
rpcs defined in line 184; used 1 times
  • in line 37
rpda defined in line 185; used 1 times
start defined in line 13; used 2 times
tkb defined in line 213; used 1 times
tks defined in line 212; used 1 times
tpb defined in line 231; used 1 times
tps defined in line 230; used 1 times
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 387
Valid CSS Valid XHTML 1.0 Strict