1
0
mirror of https://github.com/DoctorWkt/unix-jun72.git synced 2026-01-21 10:22:23 +00:00
2008-05-02 17:50:21 +00:00

56 lines
1.5 KiB
Plaintext

tst (sp)+ / bump sp
jsr r0,3f / have found a free block
bic r3,(r2) / set bit for this block i.e. assign block
br 2f
free:
mov r2,-(sp) / save r2, r3
mov r3,-(sp)
jsr r0,3f / set up bit mask and word no. in free storage map
/ for block
bis r3,(r2) / set free storage block bit; indicates free block
2:
mov (sp)+,r3 / restore r2, r3
mov (sp)+,r2
tst cdev / cdev = 0, block structured, drum; cdev = 1
/ mountable device
bne 1f
incb smod / set super block modified for drum
rts r0
1:
incb mmod / set super block modified for mountable device
rts r0
3:
mov r1,r2 / block number, k, = 1
bic $!7,r2 / clear all bits but 0,1,2; r2 = (k) mod (8)
clr r3
bisb 2f(r2),r3 / use mask to set bit in r3 corresponding to
/ (k) mod 8
mov r1,r2 / divide block number by 16
asr r2
asr r2
asr r2
asr r2
bcc 1f / branch if bit 3 in r1 was 0 i.e., bit for block is in
/ lower half of word
swab r3 / swap bytes in r3; bit in upper half of word in free
/ storage map
1:
asl r2 / multiply block number by 2; r2 = k/8
add $systm+2,r2 / address of word of free storage map for drum
/ with block bit in it
tst cdev
beq 1f / cdev = 0 indicates device is drum
add $mount-systm,r2 / address of word of free storage map for
/ mountable device with bit of block to be
/ freed
1:
rts r0 / return to 'free'
2:
.byte 1,2,4,10,20,40,100,200 / masks for bits 0,...,7
access:
jsr r0,iget / read in i-node for current directory (i-number
/ passed in r1)
mov i.flgs,r2