Files
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

79 lines
2.3 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; Figure 5-22
;
; SFA
; Set File Attributes
; This subroutine takes a compressed bit map of all the
; File Attribute bits, expands them out into an existing
; File Control Block and then requests CP/M to set the
; Attributes in the File Directory.
;
; Entry Parameters
;
; DE -> File Control Block
; HL = Bit Map. Only the most significant 11 bits
; are used, and correspond directly with the
; possible attribute bytes.
;
; Exit Parameters
;
; Carry Clear if operation successful (A = 0,1,2,3)
; Carry Set if error (A = 0FFH)
;
; Calling Sequence
;
; LXI D,FCB
; LXI H,0000$0000$1100$0000B ;Bit Map
; CALL SFA
; JC ERROR
;
; File Attribute Equates
;
FA$F1 EQU 1000$0000$0000$0000B ;F1' )
FA$F2 EQU 0100$0000$0000$0000B ;F2' ) Available for use
FA$F3 EQU 0010$0000$0000$0000B ;F3' ) by Application Programs
FA$F4 EQU 0001$0000$0000$0000B ;F4' )
FA$F5 EQU 0000$1000$0000$0000B ;F5' ]
FA$F6 EQU 0000$0100$0000$0000B ;F6' ] Reserved for CP/M
FA$F7 EQU 0000$0010$0000$0000B ;F7' ]
FA$F8 EQU 0000$0001$0000$0000B ;F8' ]
;
FA$T1 EQU 0000$0000$1000$0000B ;T1' - Read/Only File
FA$RO EQU FA$T1
FA$T2 EQU 0000$0000$0100$0000B ;T2' - System Files
FA$SYS EQU FA$T2
FA$T3 EQU 0000$0000$0010$0000B ;T3' - Reserved for CP/M
;
;
B$SETFAT EQU 30 ;Set File Attributes
BDOS EQU 5 ;BDOS Entry Point
;
;
SFA:
PUSH D ;Save FCB Pointer
INX D ;HL -> 1st character of file name
MVI C,8+3 ;Loop Count for File Name and Type
SFAL: ;Main Processing Loop
XRA A ;Clear Carry and A
DAD H ;Shift next MS Bit into Carry
ACI 0 ;A = 0 or 1 depending on Carry
RRC ;Rotate LS bit of A into MS bit
MOV B,A ;Save result (00H or 80H)
XCHG ;HL -> FCB character
MOV A,M ;Get FCB character
ANI 7FH ;Isolate all but Attribute bit
ORA B ;Set Attribute with result
MOV M,A ;and store back into FCB
XCHG ;DE -> FCB, HL = remaining bit map
INX D ;DE -> Next character in FCB
DCR C ;Downdate character count
JNZ SFAL ;Loop back for next character
MVI C,B$SETFAT ;Set File Attribute function code
POP D ;Recover FCB Pointer
CALL BDOS
CPI 0FFH ;Carry set if OK, clear if error
CMC ;Invert to use Carry set if error
RET