> FREE/SRC " Z80 Source code for FREE.COM * v0.01 28-Nov-88 JGH: Initial version (: 2$ mcode% &800:start%=&100:BDOS=5 <: F P=0 1 PO%=mcode%:P%=start% Z[OPT P*3+4 d4LD C,25: BDOS:PUSH AF :\ Read current drive n5LD A,(&5C): A:JR Z,NoDrive :\ No drive parameter x.DEC A:LD E,A:LD C,14: BDOS:\ Select drive .NoDrive : >LD C,27: BDOS:PUSH HL :\ Get allocation table address BLD C,31: BDOS :\ Get disk parameter block address 1INC HL:INC HL:LD A,(HL) :\ A=BlockShift 4INC HL:INC HL:INC HL :\ HL=>DiskSizeMax 3LD E,(HL):INC HL:LD D,(HL) :\ DE=DiskSizeMax : :POP IX:PUSH DE:PUSH AF:LD HL,0:\ Save size, zero total 9\ IX=> alloc, B=8 loop, C=byte, DE=DSM, HL=used count : .Loop0 @LD B,8:LD C,(IX+0) :\ Set up inner loop, get byte  .Loop1 9SLA C:JR NC,BitZero:INC HL :\ Inc total if bit set  .BitZero "'DEC DE:LD A,D: E:JR Z,TotalCounted ,=DJNZ Loop1:INC IX:JR Loop0 :\ Fetch another Alloc byte 6: @.TotalCounted J2POP AF:POP DE :\ A=BSH, DE=DSM T3EX DE,HL: A:SBC HL,DE :\ DE=used, HL=free ^ DEC A h .Loop3 r9SLA E:RL D:SLA L:RL H :\ Shift DE and HL left |DEC A:JR NZ,Loop3 : PUSH DE: PrNumbers LD DE,StrFree: PrString POP HL: PrNumbers LD DE,StrUsed: PrString : 2POP AF:LD E,A:LD C,14:JP BDOS :\ Restore drive : .PrNumbers LLD (Total+1),HL:SLA L:RL H :\ Store, convert to 128-byte sector count 7LD A,H: PrHex:LD A,L: PrHex:\ Print sector total LD DE,StrSectors: PrString LD A," ":LD (Lead),A LD C,&F:LD DE,&4240: PrDec :  PrComma &LD C,&1:LD DE,&86A0: PrDec 0LD DE,10000: PrDec0 :LD DE,1000: PrDec0 D: N PrComma XLD DE,100: PrDec0 bLD DE,10: PrDec0 lLD A,(Total): PrNybble vLD DE,StrBytes :  .PrString LD C,9:JP BDOS :  .PrHex PUSH AF:RRA:RRA:RRA:RRA  PrNybble:POP AF :  .PrNybble  15:CP 10 JR C,P%+4:ADD A,7 ADD A,"0"  .OUTCHR  PUSH HL  LD E,A:LD C,2: BDOS POP HL:RET  : * .PrDec0 4 LD C,0 > .PrDec H LD B,&FF R LD A,(Total+2):LD HL,(Total) \ .DecLoop fINC B: A:SBC HL,DE:SBC A,C pJR NC,DecLoop zADD HL,DE:ADC A,C  LD (Total+2),A:LD (Total),HL LD A,B: A:JR Z,PrZero LD A,"0":LD (Lead),A LD A,B:JP PrNybble  .PrZero LD A,(Lead):JP OUTCHR :  .PrComma #LD A,(Lead):CP " ":JR Z,OUTCHR LD A,",":JP OUTCHR : RET :  .Lead  M " " : $ .Total . B 0:W 0 8: B.StrSectors LM " Sectors = $" V: ` .StrBytes jM " Bytes $" t .StrFree ~ M "Free":B 13:B 10:M "$"  .StrUsed  M "Used":B 13:B 10:M "$" : ] *A$="*SAVE FREE.COM "+~mcode%+" "+~O%  A$