source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Inc/RomVars.inc @ 200

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

Added logic to skip scanning COM ports if a COM port was already found during the normal detection process, to avoid finding the same serial drive twice and preseting the OS with two drives which in reality point to the same physical file on the server. Also added logic to skip scanning for the slave serial drive if the master was not found. And various small optimizations.

File size: 6.4 KB
Line 
1; Project name  :   XTIDE Universal BIOS
2; Description   :   Defines for ROMVARS struct containing variables stored
3;                   in BIOS ROM.
4%ifndef ROMVARS_INC
5%define ROMVARS_INC
6
7; ROM Variables. Written to the ROM image before flashing.
8struc ROMVARS
9    .wRomSign           resb    2   ; ROM Signature (AA55h)
10    .bRomSize           resb    1   ; ROM size in 512 byte blocks
11    .rgbJump            resb    3   ; First instruction to ROM init (jmp)
12
13    .rgbSign            resb    8   ; Signature for XTIDE Configurator Program
14    .szTitle            resb    31  ; BIOS title string
15    .szVersion          resb    25  ; BIOS version string
16
17    .wFlags             resb    2   ; Word for ROM flags
18    .wDisplayMode       resb    2   ; Display mode for boot menu
19    .wBootTimeout       resb    2   ; Boot Menu selection timeout in system timer ticks
20    .bIdeCnt            resb    1   ; Number of available IDE controllers
21    .bBootDrv           resb    1   ; Boot Menu default drive
22    .bMinFddCnt         resb    1   ; Minimum number of Floppy Drives
23    .bStealSize         resb    1   ; Number of 1kB blocks stolen from 640kB base RAM
24
25    .ideVars0           resb    IDEVARS_size
26    .ideVars1           resb    IDEVARS_size
27    .ideVars2           resb    IDEVARS_size
28    .ideVars3           resb    IDEVARS_size
29
30%ifdef MODULE_SERIAL
31    .ideVarsSerialAuto  resb    IDEVARS_size
32%endif
33endstruc
34
35; Bit defines for ROMVARS.wFlags
36FLG_ROMVARS_FULLMODE                EQU (1<<0)  ; Full operating mode (steals base RAM, supports EBIOS etc.)
37FLG_ROMVARS_DRVXLAT                 EQU (1<<2)  ; Enable drive number translation
38FLG_ROMVARS_SERIAL_SCANDETECT       EQU (1<<3)  ; Scan COM ports at the end of drive detection.  Can also be invoked
39                                                ; by holding down the ALT key at the end of drive detection.
40                                                ; (Conveniently, this is 8, a fact we exploit when testing the bit)
41FLG_ROMVARS_MODULE_SERIAL           EQU (1<<6)  ; Here in case the configuration needs to know functionality is present
42FLG_ROMVARS_MODULE_EBIOS            EQU (1<<7)  ; Here in case the configuration needs to know functionality is present
43
44; Boot Menu Display Modes (see Assembly Library Display.inc for standard modes)
45DEFAULT_TEXT_MODE       EQU 4
46
47
48; Controller specific variables
49struc IDEVARS
50    .wPort:                                 ; IDE Base Port for Command Block (usual) Registers
51    .bSerialCOMDigit            resb    1   ; Serial Device COM Port digit
52    .bSerialPackedPortAndBaud   resb    1   ; Serial Device packed port and baud
53
54    .wPortCtrl:                             ; IDE Base Port for Control Block Registers
55    .wSerialPackedPrintBaud     resb    2   ; Serial Device packed baud rate for printing
56
57    .bDevice                    resb    1   ; Device type
58    .bIRQ                       resb    1   ; Interrupt Request Number
59    .drvParamsMaster            resb    DRVPARAMS_size
60    .drvParamsSlave             resb    DRVPARAMS_size
61endstruc
62
63; Default values for Port and PortCtrl, shared with the configurator
64;
65DEVICE_XTIDE_DEFAULT_PORT               EQU     300h
66DEVICE_XTIDE_DEFAULT_PORTCTRL           EQU     308h
67DEVICE_ATA_DEFAULT_PORT                 EQU     1F0h
68DEVICE_ATA_DEFAULT_PORTCTRL             EQU     3F0h
69DEVICE_SERIAL_DEFAULT_COM               EQU     0       ; COM1
70DEVICE_SERIAL_DEFAULT_BAUD              EQU     1       ; 9600
71
72; Device types for IDEVARS.bDevice
73;
74DEVICE_8BIT_DUAL_PORT_XTIDE             EQU (0<<1)
75DEVICE_XTIDE_WITH_REVERSED_A3_AND_A0    EQU (1<<1)
76DEVICE_8BIT_SINGLE_PORT                 EQU (2<<1)
77DEVICE_16BIT_ATA                        EQU (3<<1)
78DEVICE_32BIT_ATA                        EQU (4<<1)
79DEVICE_SERIAL_PORT                      EQU (5<<1)
80
81
82; Master/Slave drive specific parameters
83struc DRVPARAMS
84    .wFlags         resb    2   ; Drive flags
85    .wCylinders     resb    2   ; User specified cylinders (1...16383)
86    .wHeadsAndSectors:
87    .bHeads         resb    1   ; User specified Heads (1...16)
88    .bSect          resb    1   ; User specified Sectors per track (1...63)
89endstruc
90
91; Bit defines for DRVPARAMS.wFlags
92FLG_DRVPARAMS_USERCHS   EQU (1<<0)  ; User specified P-CHS values
93FLG_DRVPARAMS_BLOCKMODE EQU (1<<1)  ; Enable Block mode transfers
94
95
96; Defines for IDEVARS.bSerialPackedPortAndBaud (same format used by DPT.bSerialPortAndBaud)
97;
98; pppp ppbb
99;   i/o port address = p * 2 + 240h
100;   baud rate = b, where 00 = 2400, 01 = 9600, 10 = 38.4K, 11 = 115.2K
101;
102; 240h/2400baud corresponds to 0 for a PackedPortAndBaud value, which is reserved (in case we need
103; it to know if a value has been set).  Which is why ..._MINPORT is 248h.
104;
105DEVICE_SERIAL_PACKEDPORTANDBAUD_PORTMASK            EQU     0fch
106DEVICE_SERIAL_PACKEDPORTANDBAUD_PORTBITS            EQU     03fh
107DEVICE_SERIAL_PACKEDPORTANDBAUD_PORT_FIELD_POSITION EQU     2
108DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT        EQU     240h
109DEVICE_SERIAL_PACKEDPORTANDBAUD_MINPORT             EQU     248h        ; minimum port value that the user can set
110DEVICE_SERIAL_PACKEDPORTANDBAUD_MAXPORT             EQU     438h        ; or (..._PORTMASK << 1) + ..._STARTINGPORT
111
112DEVICE_SERIAL_PACKEDPORTANDBAUD_BAUDMASK            EQU     3h
113DEVICE_SERIAL_PACKEDPORTANDBAUD_BAUDBITS            EQU     3h
114DEVICE_SERIAL_PACKEDPORTANDBAUD_BAUD_FIELD_POSITION EQU     0
115
116; Defines for IDEVARS.wSerialPrintBaud
117;
118; pppp ppnn nnnn nnnn
119;   unsigned number to output = n
120;   postfix character = p + '0' (designed for '0' and 'K', although other values are possible)
121;
122; Note that the contents of this word is only used for printing by the BIOS when a drive is detected. 
123; It is not used for any other purpose, and so long as it conforms to the structure, any values can be used.
124;
125DEVICE_SERIAL_PRINTBAUD_NUMBERMASK      EQU     003ffh
126DEVICE_SERIAL_PRINTBAUD_POSTCHARMASK    EQU     0fc00h
127DEVICE_SERIAL_PRINTBAUD_POSTCHARADD     EQU     '0'
128;
129; These are defined here (instead of in the configurator) for consistency since they could also be used
130; in main.asm as a default for an IDEVARS structure.
131;
132DEVICE_SERIAL_PRINTBAUD_2400  EQU ((('0'-DEVICE_SERIAL_PRINTBAUD_POSTCHARADD)<<10) | 240)       ; Prints "2400"
133DEVICE_SERIAL_PRINTBAUD_9600  EQU ((('0'-DEVICE_SERIAL_PRINTBAUD_POSTCHARADD)<<10) | 960)       ; Prints "9600"
134DEVICE_SERIAL_PRINTBAUD_38_4  EQU ((('K'-DEVICE_SERIAL_PRINTBAUD_POSTCHARADD)<<10) | 38)        ; Prints "38K"
135DEVICE_SERIAL_PRINTBAUD_115_2 EQU ((('K'-DEVICE_SERIAL_PRINTBAUD_POSTCHARADD)<<10) | 115)       ; Prints "115K"
136
137;
138; COM Number to I/O Port Address Mapping
139;
140; COM Number:                               1,    2,    3,    4,    5,    6,    7,    8,    9,   10,   11,   12     
141; Corresponds to I/O port:                3f8,  2f8,  3e8,  2e8,  2f0,  3e0,  2e0,  260,  368,  268,  360,  270
142; Corresponds to Packed I/O port (hex):    37,   17,   35,   15,   16,   34,   14,    4,   25,    5,   24,    6
143;
144DEVICE_SERIAL_COM1  EQU     3f8h
145DEVICE_SERIAL_COM2  EQU     2f8h
146DEVICE_SERIAL_COM3  EQU     3e8h
147DEVICE_SERIAL_COM4  EQU     2e8h
148DEVICE_SERIAL_COM5  EQU     2f0h
149DEVICE_SERIAL_COM6  EQU     3e0h
150DEVICE_SERIAL_COM7  EQU     2e0h
151DEVICE_SERIAL_COM8  EQU     260h
152DEVICE_SERIAL_COM9  EQU     368h
153DEVICE_SERIAL_COMA  EQU     268h
154DEVICE_SERIAL_COMB  EQU     360h
155DEVICE_SERIAL_COMC  EQU     270h
156
157
158%endif ; ROMVARS_INC
Note: See TracBrowser for help on using the repository browser.