source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Inc/Controllers/XTCF.inc @ 588

Last change on this file since 588 was 588, checked in by krille_n_@…, 9 years ago

Changes:

  • Fixed a bug in AH24h_HSetBlocks.asm from r550. Trying to set a too large block size with an XT-CF card in DMA transfer mode would corrupt the stack.
  • Fixed a bug from r545 where the list of devices under g_szDeviceTypeValues in Strings.asm was no longer up to date causing the boot menu to display the wrong string for devices numbered higher than DEVICE_8BIT_XTCF_PIO8.
  • Made some fairly significant changes to the XT-CF code to reduce size. Two changes in functionality; 1) Added a simple check to validate the request for a change of the XT-CF transfer mode. 2) Changing transfer mode to use DMA no longer calls AH24h_SetBlockSize if the block size already is within the limits of DMA transfers. UNTESTED
  • XTIDECFG now clears IDEVARS.bIRQ when changing IDE controller to a serial device to keep the boot menu from displaying it since the serial device doesn't use IRQs at all.
  • Other minor optimizations.
File size: 3.8 KB
Line 
1; Project name  :   XTIDE Universal BIOS
2; Description   :   Lo-tech XT-CF board specifications.
3;
4; More information at http://www.lo-tech.co.uk/XT-CF
5
6;
7; XTIDE Universal BIOS and Associated Tools
8; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
9;
10; This program is free software; you can redistribute it and/or modify
11; it under the terms of the GNU General Public License as published by
12; the Free Software Foundation; either version 2 of the License, or
13; (at your option) any later version.
14;
15; This program is distributed in the hope that it will be useful,
16; but WITHOUT ANY WARRANTY; without even the implied warranty of
17; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18; GNU General Public License for more details.
19; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20;
21
22%ifndef XTCF_INC
23%define XTCF_INC
24
25; XT-CF requires that block must be less than 128 sectors (64 kiB) for DMA transfers.
26;
27; Note: XT-CFv3 DMA will not interfere with PC & PC/XT memory refresh,
28; since the XT-CFv3 detaches itself from the bus every 16 bytes transferred.
29;
30XTCF_DMA_MODE_MAX_BLOCK_SIZE        EQU     64      ; Sectors
31
32; Possible base addresses. Note that all XT-CF IDE registers are SHL 1 compared
33; to standard IDE registers.
34XTCF_BASE_PORT_1                    EQU     200h
35XTCF_BASE_PORT_2                    EQU     240h
36XTCF_BASE_PORT_3                    EQU     300h    ; Default setting
37XTCF_BASE_PORT_4                    EQU     340h
38
39
40; XT-CF Control Register (do not SHL 1 these!)
41; Note: XT-CFv3 control register is used *only* to raise DRQ.  The register cannot be read.
42;
43XTCF_CONTROL_REGISTER               EQU     1Eh
44
45; Transfer Mode Constants
46;
47; Available transfer modes depend on the controller.  All XT-CF controllers
48; support 8-bit PIO, either with 8-bit or 16-bit instructions (i.e., data
49; can be fetched from the controller with REP INSW or REP INSB since A0 is
50; not decoded).  However, errors in the implementation of the BIU on some
51; machines will prevent 16-bit instructions delivering data correctly.
52;
53; For XT-CFv3 adapter, DMA transfers are also supported via channel 3.
54;
55; XT-CFv3 cannot be distinguished by software, so user must decide and set
56; the mode via a call to Int 13h function 1Eh accordingly (see AH1Eh_XTCF.asm).
57;
58XTCF_8BIT_PIO_MODE                  EQU     0   ; XT-CF using 8-bit PIO mode
59XTCF_8BIT_PIO_MODE_WITH_BIU_OFFLOAD EQU     1   ; XT-CF using 8-bit PIO mode, but with 16-bit instructions
60XTCF_16BIT_PIO_WITH_BIU_OFFLOAD     EQU     2   ; Lo-tech 8-bit IDE Adapter
61XTCF_DMA_MODE                       EQU     3   ; XT-CFv3 using DMA
62
63
64; Subcommands for AH=1Eh, Lo-tech XT-CF features.
65; Return values common for all subcommands:
66;       AH:     RET_HD_SUCCESS if drive is XT-CF
67;               RET_HD_INVALID if drive is not XT-CF
68;       CF:     0 if successful, 1 if error
69
70;--------------------------------------------------------------------
71; IS_THIS_DRIVE_XTCF
72;   Parameters:
73;       DL:     Drive Number
74;--------------------------------------------------------------------
75IS_THIS_DRIVE_XTCF                  EQU     0
76
77;--------------------------------------------------------------------
78; SET_XTCF_TRANSFER_MODE
79;   Parameters:
80;       DH:     Mode to select, i.e. XTCF_8BIT_PIO_MODE
81;               Note there's no way to know if an XT-CF adapter
82;               supports DMA, so the user should enable DMA
83;               only if a DMA-enabled XT-CFv3 is fitted.
84;       DL:     Drive Number
85;--------------------------------------------------------------------
86SET_XTCF_TRANSFER_MODE              EQU     1
87
88;--------------------------------------------------------------------
89; GET_XTCF_TRANSFER_MODE
90;   Parameters:
91;       DL:     Drive Number
92;   Returns:
93;       DH:     One of the mode values listed above,
94;               i.e. XTCF_8BIT_PIO_MODE
95;       DL:     Block mode sectors per block configured
96;--------------------------------------------------------------------
97GET_XTCF_TRANSFER_MODE              EQU     2
98
99
100%endif ; XTCF_INC
Note: See TracBrowser for help on using the repository browser.