IBM PC CONVERTIBLE Technical Reference page 156

Table of Contents

Advertisement

-- -- -
- - -- - -
- - -
- - --
--
- - -
- - -- - -
- -
- - - - - -
- - -
-- - - - - - -
- -
- - - - - --
-
- - - - - -- - -
-
- - --
DMiLSETUP
THIS ROUTINE SETS UP THE DMA FOR READ/WRITE/VERIFY OPERATIONS.
INPUT
(AL) = MODE BYTE FOR THE DMA
(ES) - SEGMENT TO READ/WRITE THE DATA
(BP) - STACK POINTER (TO GET INPUT PARAMETERS)
OUTPUT
(AX,CX) DESTROYED
---
- -- -- -- -- - - - - - - - - - - -
-
- - - - - - -
- - -
- - - - - -
- - - -
- - - - -
- -
-- - - - - -
-
- - - - -- - -
- - -
--
02Fl
DMiLSETUP
PROC
NEAR
02Fl
FA
CLI
NO MORE INTERRUPTS
02F2
E6 OC
OUT
DMA+12,AL
SET THE FIRST/LAST F/F
02F4
EB 00
JMP
$+2
DELAY FOR DMA CONTROLLER
02F6
E6 OB
OUT
DMA+11,AL
OUTPUT THE MODE BYTE
02F8
50
PUSH
AX
SAVE COMMAND
02F9
8C CO
MOV
AX, ES
GET THE ES VALUE
02FB
Bl 04
MOV
CL,4
SHI FT COUNT
02FD
03 CO
ROL
AX,CL
ROTATE LEFT
02FF
8A E8
MOV
CH,AL
GET HIGHEST NYBLE OF ES TO CH
0301
24 FO
AND
AL,OFOH
ZERO THE LOW NYBBLE FROM SEGMENT
0303
03 46 OC
ADD
AX,BXSAVE[BP]
ADD ADDRESS OFFSET
0306
73 02
JNC
J33
TEST FOR CARRY FROM ADDITION
0308
FE C5
INC
CH
CARRY MEANS HIGH 4 BITS MUST BE INC
030A
J33 :
030A
50
PUSH
AX
SAVE START ADDRESS
030B
E6 04
OUT
DMA+4,AL
OUTPUT LOW ADDRESS
0300
8A C4
MOV
AL,AH
030F
E6 04
OUT
DMA+4,AL
OUTPUT HIGH ADDRESS
0311
8A C5
MOV
AL,CH
GET HIGH 4 BITS
0313
24 OF
AND
AL ,OFH
0315
E6 81
OUT
DMiLPAGE2,AL
OUTPUT THE HIGH 4 BITS TO
DETERMINE COUNT
0317
8A 66 OE
MOV
AH,ALSAVE[BP]
NUMBER OF SECTORS (AL SAVE)
031A
2A CO
SUB
AL,AL
TIMES 256 INTO AX
031C
01 E8
SHR
AX,1
SECTORS
*
128 INTO AX
031E
50
PUSH
AX
031F
BB 0006
MOV
BX,6
GET THE BYTES/SECTOR PARM
0322
E8 0259 R
CALL
GELPARM
0325
8A CC
MOV
CL,AH
USE AS SHIFT COUNT (0=128, 1=256 ETC)
0327
58
POP
AX
0328
03 EO
SHL
AX,CL
MUL TIPLY BY CORRECT AMOUNT
032A
48
DEC
AX
-1
FOR DMA VALUE
032B
50
PUSH
AX
SAVE COUNT VALUE
032C
E6 05
OUT
DMA+5,AL
LOW BYTE OF COUNT
032E
8A C4
MOV
AL,AH
0330
E6 05
OUT
DMA+5,AL
HIGH BYTE OF COUNT
0332
FB
STI
I NTERRUPTS BACK ON
0333
59
POP
CX
RECOVER COUNT VALUE
0334
58
POP
AX
RECOVER ADDRESS VALUE
0335
03 Cl
ADD
AX,CX
ADD, TEST FOR 64K OVERFLOW
0337
BO 02
MOV
AL,2
MODE FOR 8237
0339
E6 OA
OUT
DMA+lO,AL
INITIALIZE THE DISKETTE CHANNEL
033B
58
POP
AX
RESTORE COMMAND
033C
73 OE
JNC
DMiLOUT
033E
3C 42
CMP
AL,42H
NON-DMA OPERATION?
0340
74 OA
JE
DMiLOUT
I F SO THEN NO BOUNDRY ERROR
0342
C6 06 0041 R 09
MOV
DISKETTE_STATUS,DMA_BOUNDARY ; SET DMA BOUNDRY ERROR
0347
C6 46 OE 00
MOV
BYTE PTR [BP+14] ,0
NO SECTORS TRANSFERRED (AL SAVE)
034B
F9
STC
SET CARRY TO INDICATE ERROR
034C
DMA_OUT:
034C
C3
RET
RETURN TO CALLER,
CARRY SET BY ABOV ElF ERROR
0340
DMiLSETUP
ENDP
ROM BIOS 2-131

Hide quick links:

Advertisement

Table of Contents
loading

Table of Contents