source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Inc/CustomDPT.inc@ 234

Last change on this file since 234 was 233, checked in by gregli@…, 12 years ago

Serial Port: split single byte port and baud into two bytes, taking advantage of the two bytes in DPT_SERIAL, which supports more serial baud rates and in particular fixed a bug where a 4x client machine couldn't talk to a 115.2K server machine. This is a wide change, touching lots of files, but most are shallow changes. DetectPrint.asm took the most significant changes, now it calculates the baud rate to display instead of using characters provided by the Configurator. The Configurator now has a new menu flag, FLG_MENUITEM_CHOICESTRINGS, for specifying that values are not linear and they should be lookedup rather than indexed. Finally, another important bug fixed here is that in some error cases, the serial port code could get into an infinite loop waiting ont the hardware; now it has a timeout.

File size: 3.2 KB
RevLine 
[99]1; Project name : XTIDE Universal BIOS
[3]2; Description : Defines for DPT structs containing custom
3; Disk Parameter Table used by this BIOS.
4%ifndef CUSTOMDPT_INC
5%define CUSTOMDPT_INC
6
[150]7; Base DPT for all device types
[173]8struc DPT ; 10 bytes
[3]9 ; General Disk Parameter Table related
[158]10 .wFlags:
11 .bFlagsLow resb 1
12 .bFlagsHigh resb 1
[150]13 .bIdevarsOffset resb 1 ; Offset to IDEVARS for this drive
[3]14
[150]15 ; IDE Drive related
[227]16 ; .twLbaSectors is used for LBA addressing only.
17 ; .wPchsCylinders and .bPchsSectors are used for CHS addressing only.
18 .bLbaHeads: ; Number of LBA assisted heads (1...255)
19 .twLbaSectors resb 2 ; 48-bit sector count for LBA addressing
20 .wPchsCylinders resb 2 ; Number of P-CHS Cylinders (1...16383)
21 .wPchsHeadsAndSectors:
22 .bPchsHeads resb 1 ; Number of P-CHS heads (1...16)
23 .bPchsSectors resb 1 ; Number of P-CHS Sectors per Track (1...63)
[150]24endstruc
[3]25
[150]26; DPT for ATA devices
[173]27struc DPT_ATA ; 10 + 2 bytes = 12 bytes
[150]28 .dpt resb DPT_size
29
[233]30 ; Block size is specified in sectors (1, 2, 4, 8, 16, 32 or 64).
31 ; 128 is not allowed to prevent offset overflow during data transfer.
[3]32 .wSetAndMaxBlock:
[150]33 .bSetBlock resb 1 ; Current block size (at least 1)
34 .bMaxBlock resb 1 ; Maximum block size, 0 = block mode not supported
[3]35endstruc
36
[226]37%ifdef MODULE_SERIAL
38; DPT for Serial devices
39struc DPT_SERIAL
40 .dpt resb DPT_size
41
[233]42 .wSerialPortAndBaud:
43 .bSerialPort resb 1 ; Serial connection I/O port address, divided by 4
44 .bSerialBaud resb 1 ; Serial connection baud rate divisor
[226]45endstruc
46%endif
47
[150]48LARGEST_DPT_SIZE EQU DPT_ATA_size
[3]49
50
[158]51; Bit definitions for DPT.bFlagsLow
52MASKL_DPT_CHS_SHIFT_COUNT EQU (7<<0) ; Bits 0...3, P-CHS to L-CHS bit shift count (0...4)
53FLGL_DPT_SLAVE EQU FLG_DRVNHEAD_DRV ; (1<<4), Drive is slave drive
54MASKL_DPT_ADDRESSING_MODE EQU (3<<5) ; Bits 5..6, Addressing Mode (bit 6 == FLG_DRVNHEAD_LBA)
55FLGL_DPT_ENABLE_IRQ EQU (1<<7)
[3]56
[158]57; Bit definitions for DPT.bFlagsHigh
58FLGH_DPT_REVERSED_A0_AND_A3 EQU (1<<0) ; XTIDE mod, Address lines 0 and 3 reversed
[165]59FLGH_DPT_BLOCK_MODE_SUPPORTED EQU (1<<1) ; Use block transfer commands (must be bit 1!)
[175]60%ifdef MODULE_SERIAL
[165]61FLGH_DPT_SERIAL_DEVICE EQU (1<<2) ; Serial Port Device
[175]62%endif
[158]63FLGH_DPT_INTERRUPT_IN_SERVICE EQU (1<<3) ; Set when waiting for IRQ
64FLGH_DPT_RESET_nDRDY EQU (1<<4) ; Drive ready to accept commands
65FLGH_DPT_RESET_nINITPRMS EQU (1<<5) ; Initialize Device Parameters successfull
66FLGH_DPT_RESET_nRECALIBRATE EQU (1<<6) ; Recalibrate successfull
67FLGH_DPT_RESET_nSETBLOCK EQU (1<<7) ; Initialize Block Mode successfull
68MASKH_DPT_RESET EQU 0F0h
69
[150]70; Addressing modes for DPT.wFlags
71ADDRESSING_MODE_FIELD_POSITION EQU 5
72ADDRESSING_MODE_LCHS EQU 0 ; L-CHS Addressing Mode (NORMAL in many other BIOSes)
73ADDRESSING_MODE_PCHS EQU 1 ; P-CHS Addressing Mode (LARGE in many other BIOSes)
74ADDRESSING_MODE_LBA28 EQU 2 ; 28-bit LBA Addressing Mode
75ADDRESSING_MODE_LBA48 EQU 3 ; 48-bit LBA Addressing Mode
[3]76
[173]77; Number of Sectors per Track is fixed to 63 for LBA assist calculation.
78; 1024 cylinders, 256 heads, 63 sectors = 8.4 GB limit (but DOS does not support more than 255 heads)
79MAX_LCHS_CYLINDERS EQU 1024
80LBA_ASSIST_SPT EQU 63
[3]81
[173]82
[3]83%endif ; CUSTOMDPT_INC
Note: See TracBrowser for help on using the repository browser.