NTIU    ==      1       ; entry in use (account or file)
ENTDE   ==      2       ; deleted entry
;
;
;  File Types
;
FTMI    ==      1       ; memory image file
FTBP    ==      2       ; BASIC program file
FTBD    ==      3       ; BASIC data file
FTRD    ==      4       ; BACKUP/RECOVERY compressed directory
FTRP    ==      5       ; BACKUP/RECOVERY packets
FTCC    ==      6       ; CP/M work file
FTCU    ==      7       ; CP/M unit
FTPC    ==      10      ; PASCAL connection table
FTPV    ==      11      ; PASCAL volume
FTAS    ==      18      ; ASP sequential file
FTAR    ==      19      ; ASP random file
FTAI    ==      20      ; ASP index file
;
;
;  FMLX Option Codes
;
LXRLE   ==      0       ; return load errors, execute loaded code
LXALE   ==      1       ; use FMABT for load errors, execute code
LXRET   ==      2       ; return on load errors, donot execute
LXXPO   ==      080H    ; extended path option bit
;
;
;  FMTFR Operation Codes
;
TCORD   ==      1       ; read
TCOWR   ==      0       ; write
TCOVF   ==      2       ; verify
TCOWC   ==      3       ; write 'clean'
;
;
;  Disk Label Structure
;
DLILL   ==      0               ; illegal directory address
DLALX   ==      DLILL+2         ; auto-load-and-execute path name
DLASZ   ==      35              ; auto load&execute pathname length
DLMAJOR ==      DLALX+DLASZ     ; major disk structure revision level
DLMINOR ==      DLMAJOR+1       ; minor disk structure revision level
DLDSZE  ==      DLMINOR+1       ; disk size
DLNSRT  ==      DLDSZE+2        ; number of sectors reserved for testing
DLNHSZ  ==      DLNSRT+2        ; hunk size as a power of two
DLDRSZ  ==      DLNHSZ+1        ; directory size (sectors)
DLDIR   ==      DLDRSZ+2        ; base disk address for the unit's directory
DLXXX   ==      DLDIR+2         ; reserved space
DLSIZ   ==      BPS-DLXXX       ; structure size
;
;
;  Hunk Table Structure
;
HTALC   ==      0               ; the count of allocated hunks
HTMAP   ==      HTALC+2         ; the bit map of hunks, a 1 bit means inuse
;
;
;  Directory Entry Structure
;
DETYP   ==      0               ; entry type
DESYM   ==      DETYP+1         ; The entry's symbol
DEACN   ==      DESYM           ; the account number
DENAM   ==      DEACN+2         ; the name protion of the symbol
DENMZ   ==      14              ; name length in symbol
DESYZ   ==      DENAM+DENMZ-DESYM       ; symbol length
DEBAS   ==      DESYM+DESYZ     ; base for account and file data
DESIZ   ==      32              ; the size of an entry
DESZ2   ==      5               ; the size of an entry as a power of 2
DEPS    ==      4               ; directory entries per sector (2^DEPS)
EPD     ==      2048            ; entries per directory
DIRM    ==      07H             ; entry number upper mask
DEOSM   ==      0FH             ; entry-of-sector lower mask
;
;
;  File Structure Discriptor
;
FSDAT   ==      0               ; attributes
FSDFZ   ==      FSDAT+1         ; file size in sectors
FSDLB   ==      FSDFZ+2         ; bytes in use in last sector
FSDHS   ==      FSDLB+2         ; nHunk size as a power of 2
FSDMU   ==      FSDHS+1         ; unit number
FSDH0   ==      FSDMU+1         ; hunk 0 address divided by SPH
FSDSZ   ==      FSDH0+2         ; structure descriptor size
;
;
;  File Directory Entry
;
FDESD   ==      DEBAS           ; structure descriptor
FDEAT   ==      FDESD+FSDAT     ; attributes
FDEFZ   ==      FDESD+FSDFZ     ; file size in sectors
FDELB   ==      FDESD+FSDLB     ; bytes in use in the last sector
FDEHS   ==      FDESD+FSDHS     ; sectors per nHunk as a power of 2
FDEX1   ==      FDESD+FSDMU     ; reserved space
FDEH0   ==      FDESD+FSDH0     ; hunk 0 disk addr divided by SPH
FDEFT   ==      FDEH0+2         ; file type
FDETD   ==      FDEFT+1         ; type dependant data
FDEXX   ==      FDETD+3         ; reserved space, 2 bytes
;
;
;  Account Directory Entry
;
ADEAN   ==      DESYM+DESYZ     ; account number
ADEXX   ==      ADEAN+2         ; reserved space, 13 bytes
;
;
;  Index block
;
IXSIZ   ==      BPS/2           ; one half sector long
EPI     ==      129             ; entries per index
;
;
;  Open FIle Block (OFB)
;
OFBDE   ==      0               ; directory entry number
OFBDB   ==      OFBDE+2         ; base disk address for directory
OFBIL   ==      OFBDB+2         ; index length (1..EPI)
OFBSD   ==      OFBIL+1         ; the file's structure descriptor
OFBAT   ==      OFBSD+FSDAT     ; attributes
OFBFZ   ==      OFBSD+FSDFZ     ; file size in sectors
OFBLB   ==      OFBSD+FSDLB     ; bytes in last sectorH+37H     ; Sector address of last HDCOM error
HDEDN   ==      DSPCH+39H       ; Drive number of last HDCOM error
MDCB    ==      DSPCH+3AH       ; Personalization byte, address of Micro Disk Controller
FTPTM   ==      DSPCH+3BH       ; Storage for processor speed indicator
HMEM    ==      DSPCH+3CH       ; Memory limit indicator
ADEV    ==      DSPCH+3DH       ; Additional output device number
AOUT    ==      DSPCH+3EH       ; Character output bypassing additional device feature
ISTAT   ==      DSPCH+41H       ; Input device status check
OSTAT   ==      DSPCH+44H       ; Output device status check
LINED   ==      DSPCH+47H       ; Line input editor
FMNGR   ==      DSPCH+4AH       ; Hard disk file manager entry point
HDCOM   ==      DSPCH+4DH       ; Lowest level hard disk driver entry point
;
; ORIGINS OF SYSTEM MODULES
;
LINE    ==      DSPCH+100H-NLINE        ; Space for a line of text
TSTAK   ==      LINE                    ; Space for small argument stack for overlays
BUFF    ==      DSPCH+100H              ; Shared sector buffer
UIOB    ==      BUFF+200H               ; Users' I/O block
HDCORG  ==      0500H                   ; Hard Disk driver
FMGORG  ==      0D00H                   ; File manager origin
TSSORG  ==      01F00H                  ; Transient system border
CMPORG  ==      02600H                  ; Command Processor

;
;
;
;            MFDOS result codes
;
;
;
MFSNF   ==      1       ; sync not found
MFCRC   ==      2       ; CRC error
MFVFY   ==      3       ; verify compare error
MFNIP   ==      4       ; no index pulse found
MFDMM   ==      5       ; density mismatch on read or verify
MFWRP   ==      6       ; attempt to write on protected diskette
MFCCX   ==      7       ; control C detected from console
MFIDW   ==      8       ; illegal call to DWRIT
MFIDN   ==      9       ; illegal drive number
MFIDA   ==      10      ; illegal disk address
MFITL   ==      11      ; illegal transfer length
MFIDC   ==      12      ; illegal command to DCOM
MFTDM   ==      13      ; track density mismatch error
;
;
;
;
;            File Manager Definitions
;
;
;
;
;  File Manager Operation Codes
;
FMCRE   ==      00H             ; create file
FMDEL   ==      FMCRE+1         ; delete file
FMOPN   ==      FMDEL+1         ; open file
FMCLO   ==      FMOPN+1         ; close file
FMTFR   ==      FMCLO+1         ; transfer sectors to/from file
FMLOK   ==      FMTFR+1         ; lookup file information
FMLAC   ==      FMLOK+1         ; lookup account information
FMCTY   ==      FMLAC+1         ; change file type
FMCAT   ==      FMCTY+1         ; change file attributes
FMCFS   ==      FMCAT+1         ; change file size
FMCAP   ==      FMCFS+1         ; change the auto-load-and-go pathname
FMABT   ==      FMCAP+1         ; abort the calling program
FMRST   ==      FMABT+1         ; reset the File Manager
FMLX    ==      FMRST+1         ; load and execute a file of type FTMI
FMFSZ   ==      FMLX+1          ; return a file's size to the caller
FMCA    ==      FMFSZ+1         ; create account
FMDA    ==      FMCA+1          ; delete account
FMSDV   ==      FMDA+1          ; set/return default values
FMCM    ==      FMSDV+1         ; compose a standard message code message
FMFIN   ==      FMCM+1          ; finish executing the calling program
FMRDS   ==      FMFIN+1         ; return disk statistics to the calling prog
FMADE   ==      FMRDS+1         ; access directory entry
FMRDV   ==      FMADE+1         ; return default values to the calling prog
FMCAN   ==      FMRDV+1         ; change account name
FMPD    ==      FMCAN+1         ; power down a specific unit
FMPU    ==      FMPD+1          ; power up a specific unit
FMFBU   ==      FMPU+1          ; flag buffer used
FMINI   ==      FMFBU+1         ; initialize after bootstrap
FMEOL   ==      FMINI           ; end of FM list
;
;
;  Message Codes
;
MOK     ==      00H             ; ok, must be zero!
MANE    ==      20              ; account not empty
MDDUP   ==      MANE+1          ; directory: attempt to add duplicate symbol
MDFUL   ==      MDDUP+1         ; directory: directory is full
MDFND   ==      MDFUL+1         ; directory: matching symbol found
MDBAD   ==      MDFND+1         ; directory: bad directory structure
MDFNF   ==      MDBAD+1         ; directory: file name not found
MDANF   ==      MDFNF+1         ; directory: account name not found
MCADS   ==      MDANF+1         ; cant allocate disk space, disk possibly full
MOFUL   ==      MCADS+1         ; cant open file, Open File Table full
MOAVL   ==      MOFUL+1         ; OFT entry available
MILDN   ==      MOAVL+1         ; illegal decimal number
MILFN   ==      MILDN+1         ; illegal file name
MILAN   ==      MILFN+1         ; illegal account name
MILUN   ==      MILAN+1         ; illegal unit number
MILID   ==      MILUN+1         ; illegal account ID
MWRP    ==      MILID+1         ; write protect
MDEP    ==      MWRP+1          ; delete protect
MADEP   ==      MDEP+1          ; account delete protected
MCCPF   ==      MADEP+1         ; can't change protected field
MPARA   ==      MCCPF+1         ; pramater in error or out of range
MFRT    ==      MPARA+1         ; file of wrong type specified
MFNO    ==      MFRT+1          ; file not open
MFOPN   ==      MFNO+1          ; file is open
MFAIL   ==      MFOPN+1         ; general failur
MEOLA   ==      MFAIL+1         ; end of list with available space
MEOL    ==      MEOLA+1         ; end of list with no available space
MIFMR   ==      MEOL+1          ; illegal File Manager request
MFZNZ   ==      MIFMR+1         ; file size not zero
MIFZ    ==      MFZNZ+1         ; illegal file size
MEOF    ==      MIFZ+1          ; end of file reached during transfer
MPEOF   ==      MEOF+1          ; transfer attempted past EOF
MMEMP   ==      MPEOF+1         ; memory protect violation
MUNPU   ==      MMEMP+1         ; unit not powered up
MNYI    ==      MUNPU+1         ; function not yet implimented
MFMO    ==      MNYI+1          ; file is multiply opened
MDLRE   ==      MFMO+1          ; Disk level revision error
MDNSL   ==      MDLRE+1         ; Drive label mismatch error
MDNSS   ==      MDNSL+1         ; Drive size mismatch error
MDNRDY  ==      127             ; drive not ready-out of speed
MDNACC  ==      126             ; drive not ready for command
MCNPR   ==      125             ; controller not there
MDWNR   ==      124             ; drive went not ready after command started
MCNFTS  ==      123             ; can not find target sector
MDRDFL  ==      122             ; failure in drive read elel CRASH!!!      ") � � =� ��M$�"   There is a hierarchy to the functions--e.g., ") =� ��M$�"you cannot eliminate SIN/COS and retain ATN.  In") =� ��M$�"the following table, to eliminate a function,   ") =� ��M$�"you must also eliminate all functions ABOVE it. ") � � I� ��M$�"Which function (and the ones ABOVE it) should be eliminated?") � � � ��M$�"A)tn       ") � ��M$�"S)in & Cos ") � ��M$�"L)og       ") � ��M$�"E)xp & ^   ") " ��M$�"X) exit to BASIC menu")  � 3 X��P�"Select  [ A, S, L, E, or X ]: ","ASLEX") & � X�5 � �� 0 � #1 %24 � 2�X �1,&L,&H #: � #1 %6,&L1,&H1 \� get old end !D � #1 %6,&L,&H,� \� shrink it %N � #1 %15,&1,� \� off auto�start�
X � �(# ;b ��M$��256��H1�H)�L1�L)�" bytes have been recovered.") l � v � � � ;� ��M$�"You CANNOT now auto-start "�F$�" using SYSGEN!") � � � � >� ��M$�"You should rename "�F$�" to avoid accidental use!") � � � � =� ��M$�"Press any key to return to the main menu..."),��0) �  � $o� verify default name, open file
p � �(# 9z ��M$�"Is "�F$�" the desired file to be configured?") � � � � � � )� ��M$�"  Y)es, use this name       ") )� ��M$�"  N)o,  fetch alternate name") � � � ��M$�"E)xit to main menu") � � � � � � �  Q7�1 \� used default <�  � �P�"Select  [ Y, N, or E ]: ", "EYN" ) � ��,�B,�� � � � �   �   �   � >$  ��M$�"Enter desired file name (including drive number)") ..  ��M$�"followed by a CARRIAGE RETURN: "), 8  �"",F$ =  Q7�0 \� typed own name
B � �@ V� "W�  write to DOS command buffer "X � #1 %D1,� \� start of buffer b � I�1 � ��L$) l   � #1,&��L$�I,I)) v � � � #1,&13,� \� trailing CR � � :� +;�  open file F$ �with imbedded drive #) <� Ok, E1�0, T�type of file )=� No, E1�0 �no want menu exit),  T��1 0>�     E1�1 �want to menu exit),  T�undefined ?� '@  � �h,L1,E1 \� trap floppy errors J  T� ��F$) \� file type T  � \� good access Y  E1�0 \� clear exit to menu ^  � �� h   � �(# 1m   ���7),"There has been a disk drive error!" ,r   �"Re-mount the diskette, THEN" \�\�\� A�  � �P�"Type  R)e-try, or  E)xit to main menu ","RE")�1 � �@ �   E1�1 \� set menu exit �   � \� to main menu �   � T��1 � �� \� exists? �   � �(# $�     ���7),F$," does not exist!" $�     � \� with cleared menu exit �  � �  � #1 %T, F$ �  � �� (#� Clear the screen <#  � I�1 � C   F#    � P#  � Z#  � �#� $�#� Center text line L$ in width W �# � �M$�L$) 2�#  � ��L$)�W � � L$ � �  B$�1, �W���L$))�2 )�L$ �# �� �#� �$� C�$� Get char CR, convert to upper case, return position in string �$ � �P�L$,P$) �$  ��M$�L$), �$  �1"",K$ 7�$  � ��K$)�1 � ��K$)�0 � � % \� accept exactly 1 key �$   P9���K$) B�$   K$� �� P9 � 32��P9��"a") � P9��"z")) ) \� upper case only .�$   � P9�1 � ��P$) \� see if legal response �$    � K$�P$�P9,P9) � � �% %   �  %  ���7),��13), %   � ��$ %  �
%  � P9 % �� &% � ' � c����� ��������O�|��B#B�PSelect  [ D, B, or E ]: rogram must terminate with .SBTTL     "********* EQUATES FOR HDOS *********"
PAGE    132,60
;
;
;              EQUS
;         NOVEMBER 13, 1981
;
; This file contains the equates for use in all modules of the
;       North Star Hard Disk Operating System.
;
RLEAS   ==      2*16+0          ; Release 2.0.0
MAJORRV ==      1               ; Major disk revision level
MINORRV ==      0               ; Minor disk revision level
DSPCH   ==      100H            ; SYSTEM ORIGIN
BADDR   ==      0E800H          ; Micro Disk Controller address
PADDR   ==      0               ; Motherboard I/O ports
NTRAC   ==      35              ; Number of tracks per side on a Micro Disk
ZTRAC   ==      18+35+35+1      ; Initial track counter value for Micro Disks
MAXIO   ==      7               ; Maximum legal I/O device number
NLINE   ==      80              ; Length of input line for Command Processor
DFSTP   ==      26              ; Default processor speed constant (Z80A)
;
; SYSTEM DISPATCH TABLE ADDRESSES
;
TRAKT   ==      DSPCH           ; Micro Disk track table
REVN    ==      DSPCH+4         ; Sequential revision number
CNFG2   ==      DSPCH+5         ; Secondary configuration byte
SUNIT   ==      DSPCH+6         ; Last used Micro Disk drive
OFTEN   ==      DSPCH+7         ; Poling vector