1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
|
IF1 ;
%OUT COMPONENT=DISKCOPY, INCLUDING DISKCOPY.EQU... ;
ENDIF ;
; $SALUT (4,21,26,36)
;---------------------------------------------------------------------------;
; EQUATES ;
;---------------------------------------------------------------------------;
; *** CONSTANTS ***
ZERO EQU 0 ;
ONE EQU 1 ;
TWO EQU 2 ;
THREE EQU 3 ;
FOUR EQU 4 ;
TYPE_4 EQU 4 ;
FIVE EQU 5 ;
SIX EQU 6 ;
SEVEN EQU 7 ;
EIGHT EQU 8 ;
NINE EQU 9 ;
TEN EQU 0AH ;
ON EQU 1 ;
OFF EQU 0 ;
TRUE EQU 01 ;
FALSE EQU 00 ;
GOOD EQU 0 ;
BAD EQU 1 ;
FIRST EQU 1 ;
SECOND EQU 2 ;
NO_ERROR EQU 0 ;
SOFT_ERROR EQU 1 ;
HARD_ERROR EQU 2 ;
BLANK EQU 20H ;BLANK IN ASCII (32 DEC)
CLEAR_SEGMENT EQU 0E0H ;USED TO CLEAR SEGMENT BITS (ROUND UP
;TO NEXT SECTOR)
SECTOR8 EQU 8 ;
SECTOR9 EQU 9 ;
SECTOR14 EQU 14 ;
SECTOR15 EQU 15 ;
DRV_48TPI EQU 0 ;48 TPI DRIVE
DRV_96TPI EQU 1 ;96 TPI DRIVE
DRV_720 EQU 2 ;3.5", 720 KB DRIVE (FOR CASHEW OR P14)
NRLFUNC EQU 5F02H ;GET NETWORK-REDIRECTION-LIST FUNCTION
NRLMAX EQU 1CH ;(MAXIMUM # OF NAMES ON NRL) - 1
DOS20 EQU 2 ;DOS VERSION 2.0
PUBLIC FINE ;AN000;PARSER NEEDS IT
FINE EQU -1 ;"FINE AND DANDY", USED FOR RETURN CODE
;(-1 WAS USED TO AVOID CONFUSION WITH ERROR
;OFFSET WHICH CAN BE ZERO)
LOCAL_DRV EQU -1 ;DEVICE NOT DIRECTED
REMOTE_DRV EQU 1000H ;REMOTE DRIVE TEST BITS
NO_OPTION EQU -1 ;NO OPTION "/1" SPECIFIED
OPTION_1 EQU 1 ;OPTION "/1" SPECIFIED
REMOVABLE EQU 0000H ;REMOVABLE FILE
INVAL_PARM EQU -9 ;INVALID PARAMETER ENTERED
; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
; *** COPY STATUS BYTE ***
FATAL EQU 01H ;FATAL COPY ERROR, ABORT
OK EQU 00H ;OK, PROCEED
; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
; *** PROGRAM SEGMENT PREFIX ***
FCB1_DRV_ID EQU 5CH ;DRIVE NUMBER ADDR IN FILE CONTROL BLOCK 1
FCB1_FILENM EQU 5DH ;FILE NAME ADDR IN FILE CONTROL BLOCK 1
FCB2_DRV_ID EQU 6CH ;DRIVE NUMBER ADDR IN FILE CONTROL BLOCK 2
FCB2_FILENM EQU 6DH ;FILE NAME ADDR IN FILE CONTROL BLOCK 2
BEGIN_UNFORM_AREA EQU 80H ;BEGINNING @ OF THE UNFORMATTED AREA
END_UNFORM_AREA EQU 100H ;ENDING @ OF THE UNFORMATTED AREA
; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
; *** DOS FUNCTONS ***
KB_INPUT_FUNC EQU 01H ;DOS KEYBOARD INPUT FUNCTION
PRINT_FUNC EQU 09H ;DOS PRINT STRING FUNCTION
REDIRECTED_FUNC EQU 09H ;IOCTL SUB FUNCTION ****** TO BE CHECKED ****
CURRENTDRV_FUNC EQU 19H ;GET CURRENT DRIVE FUNCTION CALL
DOSVER_FUNC EQU 30H ;DOS VERSION FUNCTION CALL
IOCTL_FUNC EQU 44H ;IOCTL FUNCTION CALL
GET_DISKBASE_VECTOR EQU 351EH ;
SET_DISKBASE_VECTOR EQU 251EH ;
GET_CTL_BREAK_VECT EQU 3523H ;AN000;GET VECTOR FOR INT 23H (CTRL-BREAK)
SET_CTL_BREAK_VECT EQU 2523H ;AN000;SET VECTOR FOR INT 23H (CTRL-BREAK)
DRIVE_CHECK EQU 4408H ;DOS CHECK FOR REMOVABLE DRIVE IOCTL CALL
STD_ERROR EQU 0002H ;STANDARD ERROR FILE HANDLE
WRITE_FILE EQU 40H ;WRITE TO FILE OR DEVICE FUNCTION CALL
GET_ASSIGN_MODE EQU 5F00H ;SET ASSIGN MODE COMMAND
SET_ASSIGN_MODE EQU 5F01H ;SET ASSIGN MODE COMMAND
SERVER EQU 2AH ;NETWORK SERVER INTERUPT
SHARED EQU 03H ;DEVICE SHARED CHECK
EXTENDED_ERROR EQU 59H ;EXTENDED ERROR
GET_DATE EQU 2AH ;AN000;READ SYSTEM DATE
GET_TIME EQU 2CH ;AN000;READ SYSTEM TIME CLOCK
RET_CD_EXIT EQU 4CH ;AN000;EXIT TO DOS, PASSING RETURN CODE
GET_EXT_CNTRY_INFO EQU 65H ;AN000;GET EXTENDED COUNTRY INFORMATION
YESNO_CHECK EQU 23H ;AN000;REQUEST (Y/N) CHECK OF GET_EXT_CNTRY_INFO
NO EQU 0 ;AN006;(Y/N) RESPONSE IS "NO"
YES EQU 1 ;AN000;(Y/N) RESPONSE IS "YES"
BAD_YESNO EQU 2 ;AN000;(Y/N) RESPONSE IS NEITHER "Y" NOR "N"
; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
; *** IOCTL DISKETTE I/O FUNCTONS ***
GENERIC_IOCTL_CODE EQU 0DH ;GENERIC IOCTL REQUEST
MAJOR_CODE EQU 08H ;GENERIC IOCTL MAJOR CODE
READ_FUNC EQU 61H ;IOCTL DISKETTE READ FUNCTION
WRITE_FUNC EQU 41H ;IOCTL DISKETTE WRITE FUNCTION
VERIFY_FUNC EQU 62H ;IOCTL DISKETTE VERIFY FUNCTION
FORMAT_FUNC EQU 42H ;IOCTL DISKETTE FORMAT FUNCTION
GETDEVPARM EQU 60H ;IOCTL GET DEVICE PARAMETER
SETDEVPARM EQU 40H ;IOCTL SET DEVICE PARAMETER
SET_LOGIC_DRIVE EQU 0FH ;AN000;IOCTL SET LOGICAL DRIVE
;(deleted ;AN013) GSET_MEDIA_ID EQU 69H ;GET OR SET MEDIA ID ;AN009;
;(deleted ;AN013) GET_ID EQU 0 ;AL=0;GET MEDIA ID ;AN009;
;(deleted ;AN013) SET_ID EQU 1 ;AL=1;SET MEDIA ID ;AN009;
;special Functions
GET_SP_FUNC_DEF EQU 00000000B ;GET DEVICE PARM. DEFAULT BPB
GET_SP_FUNC_MED EQU 00000001B ;GET DEVICE PARM. BOOT BPB
SET_SP_FUNC_DEF EQU 00000100B ;SET DEFAULT DEVICE PARM
SET_SP_FUNC_DOS EQU 00000100B ;SET DEVICE PARM BEFORE RETURN TO DOS.
SET_SP_BF_FORM EQU 00000101B ;SET DEV PARM BEFORE FORMAT
R_W_SP_FUNC EQU 00000000B ;READ, WRITE
STATUS_CHK EQU 00000001B ;USED IN FORMAT PACKET AND VALIDATE
;THE "SET DEVICE PARM" REQUEST.
FORMAT_SP_FUNC EQU 00000000B ;FORMAT
.XLIST ;
;READ_DASD_FUNC EQU 15H ;BIOS READ DASD TYPE (DISKETTE DRIVE TYPE)
;SET_DASD_FUNC EQU 17H ;BIOS SET DASD TYPE
;COMPARE_FUNC EQU 03H ;BIOS COMPARE FUNC # FOR ERROR MSG PROC
.LIST ;
; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
; *** BIOS DISKETTE I/O ERROR CODES ***
;NOT_READY EQU 80H ;DISKETTE I/O NOT READY ERROR
;CHANG_LINE EQU 06H ;CHANGE LINE ERROR
;BAD_CONTROLLER EQU 20H ;BAD DISKETTE/DISK CONTOROLLER
;WRITE_PROTECT EQU 03H ;DISKETTE I/O WRITE PROTECT ERROR
;BAD_ADDR_MARK EQU 02H ;DISKETTE I/O BAD ADDRESS MARK ERROR
;REC_NOT_FOUND EQU 04H ;DISETTTE I/O RECORD NOT FOUND ERROR
;BAD_CRC EQU 10H ;DISKETTE I/O BAD CRC ERROR
;HARD_WR_ERROR EQU 03H ;DISKETTE WRITE HARD ERROR COUNT
;HARD_FMT_ERROR EQU 02H ;DISKETTE FORMAT HARD ERROR COUNT
;SINGLE_SIDE_COPY EQU 00H ;WHEN READING TRACK 0 SIDE 1 IF HARD ERROR
;OCCURS, WE WILL ASSUME IT WILL BE SINGLE
;SIDED COPY AND AL WILL BE SET TO 0, SO THAT
;BUFFER_PTR WILL NOT BE ADVANCED AND
;IF THE TRACK HAPPENS TO FALL INTO DMA BOUNDRY
;IT WILL SKIP THE SECOND PART OF READ_TRACK
; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
; SYSTEM MESSAGE HANDLER EQUATES
EXT_ERR_CLASS EQU 01H ;AN000;DOS Extended error class
PARSE_ERR_CLASS EQU 02H ;AN000;Parse error class
UTILITY_MSG_CLASS EQU 0FFH ;AN000;Utility message class
CLASS_A EQU UTILITY_MSG_CLASS ;AN000;IN MSG DESCRIPTOR
MAX_0 EQU 0 ;AN000;MAXIMUM WIDTH OF STRING FIELD (0=NO LIMIT)
PAD_BLK EQU " " ;AN000;CHAR FOR PAD FIELD
STDOUT EQU 0001H ;AN000;Standard Output device handle
STDERR EQU 0002H ;AN000;Standard Error Output device handle
; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
; SELECT MULTIPLEXOR INTERFACE
SELECT_MPX EQU 0ADC1H ;AN006;THE SELECT MULTIPLEXOR ID
SELECT_PRESENT EQU 0FFH ;AN006;RESPONSE IN AL, IF SELECT IS PRESENT
MULTIPLEXOR EQU 2FH ;AN006;THE MULTIPLEXOR INTERRUPT NUMBER
;---------------------------------------------------------------------------;
; CONTROL BLOCKS (STRUCS) ;
;---------------------------------------------------------------------------;
MSG_DESC STRUC ;
MSG_NUM DW 0 ;AN000;MESSAGE NUMBER (TO AX)
MSG_HANDLE DW STDOUT ;AN000;HANDLE OF OUTPUT DEVICE (TO BX)
MSG_SUBLIST DW 0 ;AN000;POINTER TO SUBLIST (TO SI)
MSG_COUNT DW 0 ;AN000;SUBSTITUTION COUNT (TO CX)
MSG_CLASS DW CLASS_A SHL 8 ;AN000;MESSAGE CLASS (IN HIGH BYTE, TO DH)
; LOW BYTE HAS 0 (FUNCTION "NO INPUT", TO DL);AN000;
MSG_DESC ENDS ;AN000;
; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
SUBLIST STRUC ;AN000;
SUB_SIZE DB 11 ;AN000;SUBLIST SIZE (POINTER TO NEXT SUBLIST)
SUB_RES DB 0 ;AN000;RESERVED
;NEXT FIELD IS TO BE USED AS A DOUBLE WORD
SUB_VALUE DW 0 ;AN000;TIME, DATE, OR PTR TO DATA ITEM
SUB_VALUE_SEG DW 0 ;AN000;SEG ID OF PTR
;(ABOVE FIELD MUST BE FILLED AT EXECUTION
; TIME, IF THIS IS A .COM FILE)
SUB_ID DB 0 ;AN000;N OF %N
SUB_FLAGS DB 0 ;AN000;DATA TYPE FLAGS
SUB_MAX_WIDTH DB MAX_0 ;AN000;MAXIMUM FIELD WIDTH (0=UNLIMITED)
SUB_MIN_WIDTH DB 0 ;AN000;MINIMUM FIELD WIDTH
SUB_PAD_CHAR DB PAD_BLK ;AN000;CHARACTER FOR PAD FIELD
; CAN BE " ", "0" OR ",".
; "," CAUSES INSERTION OF THE ACTIVE
; THOUSANDS SEPARATOR BETWEEN EVERY
; 3 DIGITS.
SUBLIST ENDS ;AN000;
; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
;BUFFER AREA FOR COMMUNICATION WITH GET/SET MEDIA ID FUNCTION CALL
; (USED BY VOLSER PROC)
;(deleted ;AN013;) A_MEDIA_ID_INFO STRUC ; ;AN000;
;(deleted ;AN013;) MI_LEVEL DW 0 ;INFO LEVEL ;AN000;
;(deleted ;AN013;) MI_SERIAL DD 0 ;SERIAL # ;AN000;
;(deleted ;AN013;) MI_LABEL DB 11 DUP (' ') ;VOLUME LABEL ;AN000;
;(deleted ;AN013;) MI_SYSTEM DB 8 DUP (' ') ;FILE SYSTEM TYPE ;AN000;
;(deleted ;AN013;) A_MEDIA_ID_INFO ENDS ; ;AN000;
;END OF DISKCOPY.EQU
|