IBM
Personal
Computer
MACRO
Assembler
Version
2.00
DSKETTE
- - 01
/10/86
0 I
SKETTE
ADAPTER B I
OS
1-16
01-10-86
RETRY
; ----
----
-- - - - -
----
-
--
--
----
---
-------------
---
---
-
----------
----
DETERM I NES WHETHER A RETRY I S
NECESSARY.
I F RETRY
IS
REQU I RED THEN
STATE
I NFORMAT I
ON
I S UPDATED FOR
RETRY.
SETUP
STATE
INDICATOR
FOR RETRY ATTEMPT TO NEXT
RATE
OOOOOOOOB
(500)
->
10000000B
(250)
10000000B
(250
I
->
01
OOOOOOB
(300)
01000000B
(300
I
->
OOOOOOOOB
(500)
STORE UPON RETURN
RESTORE NUMBER TRANSFERRED
GET STATUS OF
OPERATION
CHECK FOR ERROR
NO
ERROR
CLEAR NUMBER RETURNED
I SOLATE
RATE
BITS
ALL
RATES TR I ED
I F
YES,
THEN TRUE ERROR
; GET TRACK ENDED UP
ON
; I
SIT
ASKED FOR TRACK
; I F SAME TRACK
NO
INCREASE
;
ADD
SECTORS/TRACK
;
ADD
SECTORS / TRACK
; SUBTRACT START
FROM
END
;
TO
AL
; RETURN
DRIVE
TYPE
IN
(ALI
CMOS
BAD ASSUME
DEFAULT
,
TYPE
2
DRIVE?
;
YES-->ASSUME
MULTI
FORMAT
CAPABILITY
;
TYPE
4
DR
I VE ?
;
YES-->ASSUME
MULTI
FORMAT
CAPABILITY
BL,
[BP]
AL,BL
CH,ONEC
STATUS+3
CH,
[BP+T]
SAME_TRK
BL,AH
BL,AH
CLEAR CARRY
NO
RETRY
NO
RETRY RETURN
AH,RATE
500+
I ; SET
CY
FOR RATE
500
AH,I
- ;
TO
NEXT
STATE
AH,RATE
MSK
; KEEP ONLY
RATE
BITS
:g~~-~i:i~(g:
I
:~~T
RATE_~S~~~~LD~T~~W
RAT~
RATE,
DBL
STEP
OFF
ODSKETTE
STATUS,
0 ; RESET STATUS FOR RETRY
- ; SET CARRY FOR RETRY
; RETRY RETURN
ODSK_STATE[DI]
,DRV_DET+FMT_CAPA
; TURN
ON
DETERMINED
& FMT CAPA
:g~~-~i~i~(g:
I
:~~~
6~i-C~P~ARK
DR;V~U~~T~~~I~~~MAT
CAPABILITY
SHORT SETBAC - ; BACK
CMOS
TYPE
M
12-
AL,2
M
12
AL,4
M_12
ADD
MOV
CMP
JZ
ADD
SAME
TRK:
- SUB
MOV
NT_OUT:
DIF
_HD:
RET
NUM_TRANS ENDP
:-
~~;~;
-
~~~
---------------------
---
------
---------------
--
-
--
----
;
-RESTORES
OMOTOR
COUNT TO PARAMETER PROV
IDEO
I N
TABLE
;
AND
LOADS ODSKETTE STATUS TO
AH,
AND SETS
CY.
;
ON
EXIT:
-
;
AH,
ODSKETTE_STATUS,
CY
REFLECT
STATUS
OF
OPERATION
~~;~;
-
~~~
-------
;~~~
----
~~~~
-----------------------------------
--
-
MOV
DL,
2 GET THE
MOTOR
WA
IT
PARAMETER
PUSH
AX
SAVE NUMBER TRANSFERRED
CALL
GET PARM
MOV
OMOTOR
COUNT,
AH
POP
AX
-
MOV
AH,ODSKETTE
STATUS
OR
AH,AH
-
JZ
NUN ERR
XOR
AL,AL
CMP
RCR
AND
AND
OR
MOV
STC
RET
NO
RETRY:
- CLC
RET
RETRY ENDP
; ----
------
-- -- -- --
---
--
----
-
----
-----
-- -
--
-----
--
--
-
---
--
-- -
----
;
NUM
TRANS
-
THIS
ROUTINE
CALCULATES
THE NUMBER
OF
SECTORS
THAT
;
WERE
ACTUALLY
TRANSFERRED TO /
FROM
THE 0 I
SKETTE
•
;
ON
ENTRY:
[BP+
1]
= TRACK
SI-HI
= HEAD
[BP]
= START SECTOR
;
;
ON
EX
IT:
AL
= NUMBER
ACTUALLY
TRANSFERRED
~~~-;~~~~-------;~~~----~~~~-------------------------------------
-
XOR
AL
,AL
; CLEAR FOR ERROR
CMP
ODSKETTE
STATUS,O
; CHECK FOR ERROR
JNZ
NT OUT - ; I F ERROR 0 TRANSFERRED
MOV
DL
-;
4 ; SECTORS
/TRACK
OFFSET
TO
DL
CALL
GET PARM ;
AH
=
SECTORS/TRACK
MOV
BL,ONEC
STATUS+5
; GET
ENDING
SECTOR
MOV
CX,
SI - ;
CH
= HEAD # STARTED
CMP
CH,ONEC
STATUS+4
; GET HEAD ENDED UP
ON
JNZ
DIF
_HD - ;
IF
ON
SAME
HEAD,
THEN
NO
ADJUST
ON
EX
IT:
CY
= 1 FOR
RETRY,
CY
= 0 FOR
NO
RETRY
~~;~;
---
;~~~
----
~~~~
---------------------------------------------
CMP
ODSKETTE
STATUS,O
; GET STATUS OF
OPERATION
JZ
NO
RETRY-
; SUCCESSFUL
OPERATION
S~P
~gs~~i~~_STATUS,
TIME_OUT;
;
IF
TIME
OUT
NO
RETRY
MOV
AH-;ODSK
STATE[DI]
; GET
MEDIA
STATE
OF
DRIVE
TEST
AH,MED
DET
;
ESTABLISHED/DETERMINED?
JNZ
NO
RETRY ;
IF
ESTABL
I SHED
STATE
THEN TRUE ERROR
AND
AH-;RATE
MSK
; I SOLATE
RATE
MOV
CH,OLASTRATE
; GET
START
OPERATION
STATE
ROL
CH,
I ;
TO
CORRESPOND I
NG
BITS
ROL
CH,I
ROL
CH,I
ROL
CH,I
AND
CH,RATE
MSK
CMP
CH,AH-
JE
NO_RETRY
CALL
JC
CMP
JE
CMP
JE
M_120:
AND
OR
JMP
M
-
12:
OR
SETBAC:
RET
DSTATE
ENDP
1658
1659
019F
E8
08CF
R
1660
01A2
12
14
1661
01A4
3C
02
1662
01A6
14
10
1663
01A8
3C
04
1664
01AA
14
OC
1665
01AC
1666
01AC
80
A5
0090
R FD
1661
01BI
80
80
0090
R
04
1668
01B6
EB
05
1669
1610
01B8
1611
ilB8
80 80
0090
R
06
1612
1613
01BD
1614
01BD
C3
1615
01BE
1616
1611
1618
1619
1680
1681
1682
1683
01BE
1684
01BE
80
3E
0041
R
00
1685
01C3
14
3E
1686
01C5
80
3E
0041
R
80
1681
01CA
14
31
1688
01CC
8A
A5
0090
R
1689
0100
F6
C4
10
1690
0103
15
2E
1691
0105
80
E4
CO
1692
0108
8A
2E
008B
R
1693
01DC
DO
C5
1694
01DE
DO
C5
1695
OlEO
DO
C5
1696
01E2
DO
C5
1691
01E4
80
E5
CO
1698
01El
3A
EC
1699
01E9
14
18
1100
1101
1102
1103
1104
1105
1106
01EB
80
FC 01
1101
01EE
DO
DC
1108
01FO
80
E4
CO
1109
01F3
80
A5
0090
R 1F
1110
01F8
08
A5
0090
R
1111
01FC
C6
06
0041
R
00
1112
0801
F9
1113
0802
C3
1114
1115
0803
1116
0803
F8
1111
0804
C3
1118
0805
1119
1120
1121
1122
1123
1124
1125
1126
1121
1128
1129
1130
0805
1131
0805
32
CO
1132
0801
80
3E
0041
R
00
1133
080C
15
23
1134
080E
B2
04
1135
0810
E8
08FE
R
1136
0813
8A
IE
0041
R
1131
0811
8B
CE
1138
0819
3A
2E
0046
R
1139
0810
15
OB
1140
1141
081F
8A
2E
0045
R
1142
0823
3A
6E
01
1143
0826
14
04
1144
1145
0828
02
DC
1146
082A
1141
082A
02
DC
1148
082C
1149
082C
2A
5E
00
1150
082F
8A
C3
1151
1152
0831
1153
0831
C3
1154
0832
1155
1156
1151
1158
1159
1160
1161
1162
0832
1163
0832
B2
02
1164
0834
50
1165
0835
E8
08FE
R
1166
0838
88
26
0040
R
1161
083C
58
1168
0830
8A
26
0041
R
1169
0841
OA
E4
1110
0843
14
02
1111
0845
32
CO
5-38
DISKETTE
(01/10/86)