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

Last change on this file since 592 was 592, checked in by krille_n_, 6 years ago

Changes:

  • The problem with NASM in the previous revision (r591) has been fixed.
  • The colors used by the boot menu and hotkey bar can now be customized by selecting one of a number of pre-defined color themes. Suggestions for additional themes are more than welcome!
  • Large builds are now 10 KB. Small builds are still 8 KB with the exception of the Tiny build which is now 4 KB. In other words, builds are now as small as possible to make it easier to combine them with other BIOSes.
  • Added code to the library to improve drive error handling. XTIDECFG can now handle "Drive Not Ready" errors.
  • Fixed a couple of potential bugs in AtaID.asm (AtaID_GetMaxPioModeToAXandMinCycleTimeToCX); 1) ATA1.bPioMode was treated as a WORD variable. 2) ATA2.bPIOSupp was assumed to be non-zero which would result in PIO mode 3 being returned if the assumption was wrong.
  • Made the same changes in the equivalent function used by BIOSDRVS (DisplayPioModeInformationUsingAtaInfoFromDSBX in AtaInfo.asm).
  • Fixed a bug from r587 in PDC20x30.asm in PDC20x30_GetMaxPioModeToALandMinPioCycleTimeToBX.
  • Fixed a bug from r523 in XTIDECFG where Auto Configure would only set the IRQ on one IDE interface on AT-builds.
  • XTIDECFG will now restore the default settings for the "Serial port virtual device" when reselecting it in the list of device types. This makes it behave consistently for all device types.
  • The eAAM macro is now used regardless if USE_UNDOC_INTEL is defined or not because it is apparently supported on all processors including the NEC V20/V30 CPUs.
  • Renamed the EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS define to EXCLUDE_FROM_XUB.
  • Added a define to exclude unused library code from BIOSDRVS (EXCLUDE_FROM_BIOSDRVS). This makes it a lot smaller than in previous revisions.
  • All unnecessary CLD-instructions are now under a new define 'CLD_NEEDED' which is only enabled for the BIOS. It is disabled for XTIDECFG and BIOSDRVS but can be enabled if needed by adding this define to the respective makefile. This change was made because these unnecessary instructions are wasteful and should never be needed. In fact, they only serve to hide bugs (in other peoples code) which I strongly believe should be avoided. I recommend people making their own BIOSes from source to not use this define as it's extremely unlikely to be needed.
  • Updated the copyright info in SerDrive and changed an URL to point to the new site.
  • Updated the copyright info and version number in BIOSDRVS.
  • Updated the copyright info in XTIDECFG.
  • Optimizations in general.
File size: 9.1 KB
Line 
1; Project name  :   XTIDE Universal BIOS
2; Description   :   Defines for ROMVARS struct containing variables stored
3;                   in BIOS ROM.
4
5;
6; XTIDE Universal BIOS and Associated Tools
7; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
8;
9; This program is free software; you can redistribute it and/or modify
10; it under the terms of the GNU General Public License as published by
11; the Free Software Foundation; either version 2 of the License, or
12; (at your option) any later version.
13;
14; This program is distributed in the hope that it will be useful,
15; but WITHOUT ANY WARRANTY; without even the implied warranty of
16; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17; GNU General Public License for more details.
18; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
19;
20
21%ifndef ROMVARS_INC
22%define ROMVARS_INC
23
24; ROM Variables. Written to the ROM image before flashing.
25struc ROMVARS
26    .wRomSign           resb    2   ; ROM Signature (AA55h)
27    .bRomSize           resb    1   ; ROM size in 512 byte blocks
28    .rgbJump            resb    3   ; First instruction to ROM init (jmp)
29
30    .rgbSign            resb    8   ; Signature for XTIDE Configurator Program
31    .szTitle            resb    31  ; BIOS title string
32    .szVersion          resb    25  ; BIOS version string
33
34    .wFlags             resb    2   ; Word for ROM flags
35    .wDisplayMode       resb    2   ; Display mode for boot menu
36    .wBootTimeout       resb    2   ; Boot Menu selection timeout in system timer ticks
37    .pColorTheme        resb    2   ; Ptr to the color attribute struc used by the boot menu and hotkey bar
38    .bIdeCnt            resb    1   ; Number of available IDE controllers
39    .bBootDrv           resb    1   ; Default drive to boot from
40    .bMinFddCnt         resb    1   ; Minimum number of Floppy Drives
41    .bStealSize         resb    1   ; Number of 1kB blocks stolen from 640kB base RAM
42    .bIdleTimeout       resb    1   ; Standby timer value
43
44    .ideVarsBegin:
45    .ideVars0           resb    IDEVARS_size
46    .ideVars1           resb    IDEVARS_size
47    .ideVars2           resb    IDEVARS_size
48    .ideVars3           resb    IDEVARS_size
49
50%ifdef MODULE_SERIAL
51    .ideVarsSerialAuto  resb    IDEVARS_size
52%endif
53
54    .ideVarsEnd:
55endstruc
56
57%ifndef CHECK_FOR_UNUSED_ENTRYPOINTS
58    %if ROMVARS.ideVarsEnd & 0xff00 <> 0
59        %error ".ideVars structures must fit within the first 256 bytes of the ROM image"
60    %endif
61    %if (ROMVARS.ideVarsEnd - ROMVARS.ideVarsBegin) = 0
62        %error "there must be at least one .ideVars structure, it would be bizarre if this were not true, but it is assumed in the ah0h reset code."
63    %endif
64%endif
65
66NUMBER_OF_IDEVARS                   EQU ((ROMVARS.ideVarsEnd - ROMVARS.ideVarsBegin) / IDEVARS_size)
67
68; Bit defines for ROMVARS.wFlags
69FLG_ROMVARS_FULLMODE                EQU (1<<0)  ; Full operating mode (steals base RAM, supports EBIOS etc.)
70FLG_ROMVARS_SERIAL_SCANDETECT       EQU (1<<3)  ; Scan COM ports at the end of drive detection.  Can also be invoked
71                                                ; by holding down the ALT key at the end of drive detection.
72                                                ; (Conveniently, this is 8, a fact we exploit when testing the bit)
73
74; Here in case the configuration needs to know functionality is present. Note! Changing the order/location of these flags
75; also requires changes elsewhere as they are usually tested using byte-accesses for efficiency.
76FLG_ROMVARS_MODULE_POWER_MANAGEMENT     EQU (1<<5)
77FLG_ROMVARS_MODULE_8BIT_IDE             EQU (1<<6)
78FLG_ROMVARS_MODULE_8BIT_IDE_ADVANCED    EQU (1<<7)
79FLG_ROMVARS_MODULE_ADVANCED_ATA         EQU (1<<8)
80FLG_ROMVARS_MODULE_BOOT_MENU            EQU (1<<9)
81FLG_ROMVARS_MODULE_EBIOS                EQU (1<<10)
82FLG_ROMVARS_MODULE_HOTKEYS              EQU (1<<11)
83FLG_ROMVARS_MODULE_IRQ                  EQU (1<<12)
84FLG_ROMVARS_MODULE_SERIAL               EQU (1<<13)
85FLG_ROMVARS_MODULE_SERIAL_FLOPPY        EQU (1<<14)
86FLG_ROMVARS_MODULE_STRINGS_COMPRESSED   EQU (1<<15)
87
88
89; Boot Menu Display Modes (see Assembly Library Display.inc for standard modes)
90DEFAULT_TEXT_MODE       EQU 4
91
92
93; Controller specific variables
94struc IDEVARS
95;;; Word 0
96    .wSerialPortAndBaud:                    ; Serial connection port (low, divided by 4) and baud rate divisor (high)
97    .wBasePort:                             ; IDE Base Port for Command Block (usual) Registers
98    .bSerialPort                resb    1
99    .bSerialBaud                resb    1
100
101;;; Word 1
102    .wControlBlockPort:
103    .bSerialUnused              resb    1   ; IDE Base Port for Control Block Registers
104
105    .wSerialCOMPortCharAndDevice:           ; In DetectPrint, we grab the COM Port char and Device at the same time
106    .bSerialCOMPortChar         resb    1   ; Serial connection COM port number/letter
107
108;;; Word 2
109    .bDevice                    resb    1   ; Device type
110    .bIRQ                       resb    1   ; Interrupt Request Number
111
112;;; And more...
113    .drvParamsMaster            resb    DRVPARAMS_size
114    .drvParamsSlave             resb    DRVPARAMS_size
115endstruc
116
117%ifndef CHECK_FOR_UNUSED_ENTRYPOINTS
118    %if IDEVARS.bSerialCOMPortChar+1 != IDEVARS.bDevice
119        %error "IDEVARS.bSerialCOMPortChar needs to come immediately before IDEVARS.bDevice so that both bytes can be fetched at the same time inside DetectPrint.asm"
120    %endif
121%endif
122
123STANDARD_CONTROL_BLOCK_OFFSET           EQU     200h
124XTIDE_CONTROL_BLOCK_OFFSET              EQU     8h      ; for XTIDE, A3 is used to control selected register (CS0 vs CS1)...
125XTCF_CONTROL_BLOCK_OFFSET               EQU     10h     ; ...and for XT-CF (all variants), it's A4
126ADP50L_CONTROL_BLOCK_OFFSET             EQU     10h
127
128; Default values for Port and PortCtrl, shared with the configurator
129;
130DEVICE_XTIDE_DEFAULT_PORT               EQU     300h    ; Also the default port for XT-CF
131DEVICE_XTIDE_DEFAULT_PORTCTRL           EQU     (DEVICE_XTIDE_DEFAULT_PORT + XTIDE_CONTROL_BLOCK_OFFSET)
132; Note XT-CF control port is SHL 1 relative to XTIDE, and coded that way hence no need for specific definition like...
133; DEVICE_XTCF_DEFAULT_PORTCTRL          EQU     (DEVICE_XTIDE_DEFAULT_PORT + XTCF_CONTROL_BLOCK_OFFSET)
134
135DEVICE_ATA_PRIMARY_PORT                 EQU     1F0h
136DEVICE_ATA_PRIMARY_PORTCTRL             EQU     (DEVICE_ATA_PRIMARY_PORT + STANDARD_CONTROL_BLOCK_OFFSET)
137
138DEVICE_ATA_SECONDARY_PORT               EQU     170h
139DEVICE_ATA_SECONDARY_PORTCTRL           EQU     (DEVICE_ATA_SECONDARY_PORT + STANDARD_CONTROL_BLOCK_OFFSET)
140
141DEVICE_ATA_TERTIARY_PORT                EQU     1E8h
142DEVICE_ATA_TERTIARY_PORTCTRL            EQU     (DEVICE_ATA_TERTIARY_PORT + STANDARD_CONTROL_BLOCK_OFFSET)
143
144DEVICE_ATA_QUATERNARY_PORT              EQU     168h
145DEVICE_ATA_QUATERNARY_PORTCTRL          EQU     (DEVICE_ATA_QUATERNARY_PORT + STANDARD_CONTROL_BLOCK_OFFSET)
146
147
148; Device types for IDEVARS.bDevice
149; IDE Devices are grouped so device numbers cannot be changed without modifying code elsewhere!
150COUNT_OF_STANDARD_IDE_DEVICES           EQU 2   ; 16- and 32-bit controllers
151COUNT_OF_8BIT_IDE_DEVICES               EQU 9
152COUNT_OF_ALL_IDE_DEVICES                EQU (COUNT_OF_8BIT_IDE_DEVICES + COUNT_OF_STANDARD_IDE_DEVICES)
153; Standard port mapped I/O
154DEVICE_16BIT_ATA                        EQU (0<<1)
155DEVICE_32BIT_ATA                        EQU (1<<1)
156DEVICE_8BIT_ATA                         EQU ((COUNT_OF_STANDARD_IDE_DEVICES+0)<<1)  ; 16- or 32-bit controller in 8-bit mode
157DEVICE_8BIT_XTIDE_REV1                  EQU ((COUNT_OF_STANDARD_IDE_DEVICES+1)<<1)
158; Address lines A0 and A3 are swapped
159DEVICE_8BIT_XTIDE_REV2                  EQU ((COUNT_OF_STANDARD_IDE_DEVICES+2)<<1)  ; Or rev 1 with swapped A0 and A3
160; IDE Register offsets are SHL 1
161DEVICE_8BIT_XTCF_PIO8                   EQU ((COUNT_OF_STANDARD_IDE_DEVICES+3)<<1)  ; XT-CF using 8-bit PIO mode
162DEVICE_8BIT_XTCF_PIO8_WITH_BIU_OFFLOAD  EQU ((COUNT_OF_STANDARD_IDE_DEVICES+4)<<1)  ; XT-CF using 8-bit PIO mode, but with 16-bit instructions
163DEVICE_8BIT_XTCF_PIO16_WITH_BIU_OFFLOAD EQU ((COUNT_OF_STANDARD_IDE_DEVICES+5)<<1)  ; Lo-tech 8-bit IDE Adapter
164DEVICE_8BIT_XTCF_DMA                    EQU ((COUNT_OF_STANDARD_IDE_DEVICES+6)<<1)  ; XT-CFv3 using DMA
165; Memory Mapped I/O
166DEVICE_8BIT_JRIDE_ISA                   EQU ((COUNT_OF_STANDARD_IDE_DEVICES+7)<<1)  ; JR-IDE/ISA (Memory Mapped I/O)
167DEVICE_8BIT_ADP50L                      EQU ((COUNT_OF_STANDARD_IDE_DEVICES+8)<<1)  ; SVC ADP50L (Memory Mapped I/O)
168; Virtual devices
169DEVICE_SERIAL_PORT                      EQU (COUNT_OF_ALL_IDE_DEVICES<<1)
170
171FIRST_XTCF_DEVICE                       EQU DEVICE_8BIT_XTCF_PIO8
172LAST_XTCF_DEVICE                        EQU DEVICE_8BIT_XTCF_DMA
173XTCF_DEVICE_OFFSET                      EQU FIRST_XTCF_DEVICE                       ; Used for XT-CF device <--> mode conversion
174
175; Master/Slave drive specific parameters
176struc DRVPARAMS
177    .wFlags         resb    2   ; Drive flags
178    .dwMaximumLBA:              ; User specified maximum number of sectors
179    .wCylinders     resb    2   ; User specified cylinders (1...16383)
180    .wHeadsAndSectors:
181    .bHeads         resb    1   ; User specified Heads (1...16)
182    .bSect          resb    1   ; User specified Sectors per track (1...63)
183endstruc
184
185; Bit defines for DRVPARAMS.wFlags - these flags are accessed as bytes so changes here might require changes elsewhere
186MASK_DRVPARAMS_WRITECACHE       EQU (3<<0)  ; Bits 0...1, Drive internal write cache settings (must start at bit 0)
187    DEFAULT_WRITE_CACHE             EQU 0   ; Must be 0
188    DISABLE_WRITE_CACHE             EQU 1
189    ENABLE_WRITE_CACHE              EQU 2
190MASK_DRVPARAMS_TRANSLATEMODE    EQU (3<<TRANSLATEMODE_FIELD_POSITION)   ; Bits 2...3, Position shared with DPT
191    TRANSLATEMODE_FIELD_POSITION    EQU 2
192    TRANSLATEMODE_NORMAL            EQU 0   ; Must be zero
193    TRANSLATEMODE_LARGE             EQU 1
194    TRANSLATEMODE_ASSISTED_LBA      EQU 2   ; 28-bit or 48-bit LBA
195    TRANSLATEMODE_AUTO              EQU 3   ; Only available in ROMVARS, not in DPTs
196FLG_DRVPARAMS_BLOCKMODE         EQU (1<<4)  ; Enable Block mode transfers
197FLG_DRVPARAMS_USERCHS           EQU (1<<5)  ; User specified P-CHS values
198    MAX_PCHS_CYLINDERS              EQU 16383
199    MAX_PCHS_HEADS                  EQU 16
200    MAX_PCHS_SECTORS_PER_TRACK      EQU 63
201    MAX_PCHS_TOTAL_SECTOR_COUNT     EQU (MAX_PCHS_CYLINDERS * MAX_PCHS_HEADS * MAX_PCHS_SECTORS_PER_TRACK)  ; 16,514,064
202FLG_DRVPARAMS_USERLBA           EQU (1<<6)  ; User specified LBA value
203
204%endif ; ROMVARS_INC
Note: See TracBrowser for help on using the repository browser.