* Displays a picture of the Free Space Map
* Syntax: FSDISP [/u]
*   
 XEQ START
 ORG 100H
 COPY NPTDEFS
START EQU $
SCAN MVI A,PSOPT  get string
 LXI D,BUFF  point to buffer
 CALL PSCAN  get parms [/n]
 JC ERROR
 JZ DEFAULT  default /0
 LXI H,BUFF
 MOV A,M  first parm char
 CPI '/'
 JNZ ERROR  must be /
 INX H
 MOV A,M  get disk #
 STA DISKN  save it
 STA DISKM
DEFAULT LXI D,FNAME  file name
 LXI H,BUFF  user buffer
 CALL SYS
 DB OPEOP  open file
 JMP OERROR
 STA FLNBR  save file number
 LXI H,MSG  point to message
 CALL MOUT  output
 LXI B,BUFF
 MVI D,0  counter for tracks
LOOP MVI E,10  tracks per line
 LXI H,LFCR
 CALL MOUT  start new line
 MOV A,D
 PUSH B
 CALL HBOUT  print track number
 CALL BOUT  blank
 POP B
LOOP1 LDAX B  get map of track
 MOV H,A  into HL
 INX B
 LDAX B
 MOV L,A
 INX B
 PUSH B
 CALL ADOUT  print track map
 POP B
 INR D  count tracks
 MOV A,D
 CPI 77H  done?
 JZ FINISH  done 77
 DCR E  count down
 JNZ LOOP1
 MOV A,D
 ADI 6  make it look decimal
 MOV D,A
 JMP LOOP
*   
MOUT MOV A,M  get character to output
 ORA A  set flags
 RZ .  done
 PUSH B
 CALL CONOUT  output
 POP B
 INX H  next
 JMP MOUT  more
*   
FINISH LDA FLNBR  get file number
 CALL SYS  close it
 DB CLOOP
 JMP DONE
DONE EQU $
 LXI H,MSG1  footer message
 CALL MOUT
 CALL SYS  return to PTDOS
 DB RETOP
*   
ERROR MVI A,ERSYN  syntax error
OERROR STA ECODE
 MVI A,0
 LXI H,-1  no message
 CALL UTIL
 DB UXOP
 JMP ERRTN
 DB -1  no command code
ECODE DB -1
ERRTN HLT  should never get here
*   
* Output HL as hex 16 bit value
ADOUT MOV A,H  H first
 CALL HEOUT
 MOV A,L  then L followed by blank
*   
HBOUT CALL HEOUT
BOUT MVI A,' '  blank
 JMP CONOUT  put it out
*   
HEOUT MOV C,A  get character
 RRC .  move the high four down
 RRC
 RRC
 RRC
 CALL HEOU1  put them out
 MOV A,C  now the low four
*   
HEOU1 ANI 0FH  low four
 ADI 48  add ASCII bias
 CPI 58  0-9?
 JC OUTH   yes
 ADI 7  make it A-F
OUTH JMP CONOUT  put it out
*   
FNAME ASC 'FSMAP/'
DISKN DB '0'
FLNBR DB 0
MSG DB 0DH
 ASC 'Trk      '
 ASC '     Free Space Map for Disk '
DISKM DB '0'
LFCR DDB 0D00H
MSG1 DB 0DH
 ASC '   0 = used;  1 = free'
 DDB 0D00H
BUFF DS 154
*   

