1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216
|
/*
* first.inc - constants for assembler module for DOS boot loader
*
* Copyright (C) 1996-1998 Gero Kuhlmann <gero@gkminix.han.de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
*====================================================================
*
* Definitions for accessing the BIOS data area
*/
#define BIOS_SEG 0x0040 /* Segment of BIOS data area */
#define BIOS_FDSTAT 0x0041 /* Floppy disk status byte */
#define BIOS_HDSTAT 0x0074 /* Hard disk status byte */
#define I13_INT 0x13 * 4 /* interrupt vector 13h */
#define I2F_INT 0x2F * 4 /* interrupt vector 2Fh */
#define IF1_INT 0xF1 * 4 /* interrupt vector F1h */
#define IF8_INT 0xF8 * 4 /* interrupt vector F8h */
/*
*====================================================================
*
* Layout of disk boot sector
*/
#define SECT_SIZE 512 /* sector size must be 512 bytes */
#define DISK_BPS 11 /* offset of bytes per sectors */
#define DISK_SECTS 19 /* offset of total number of sects */
#define DISK_SPT 24 /* offset of sectors per track */
#define DISK_HEADS 26 /* offset of number of heads */
#define DISK_BOOT 36 /* offset of disk ID to boot from */
#define PART_STATUS 0x01BE /* offset of partition status */
#define PART_FRST_HEAD 0x01BF /* offset of first head number */
#define PART_FRST_SECT 0x01C0 /* offset of first sector number */
#define PART_FRST_CYL 0x01C1 /* offset of first cylinder number */
#define PART_TYPE 0x01C2 /* offset of partition id */
#define PART_LAST_HEAD 0x01C3 /* offset of last head number */
#define PART_LAST_SECT 0x01C4 /* offset of last sector number */
#define PART_LAST_CYL 0x01C5 /* offset of last cylinder number */
#define PART_ABS_SECT 0x01C6 /* offset of first sector number */
#define PART_SEC_NUM 0x01CA /* offset of number of sectors */
#define PART_ACTIVE 0x80 /* indicates active partition */
#define PART_FAT12 0x01 /* indicates partition type */
#define PART_FAT16 0x04 /* indicates partition type */
#define BOOT_ID_FD 0x00 /* BIOS id of floppy boot disk */
#define BOOT_ID_HD 0x80 /* BIOS id of hard boot disk */
#define BOOT_OFFSET 0x7C00 /* offset for boot block in segment 0 */
#define TEMP_SEGMENT 0x7000 /* segment for temporary storage */
/*
*====================================================================
*
* Layout of BIOS parameter block as used by DOS
*/
#define BPB_BPS 0 /* offset to bytes per sector */
#define BPB_SPC 2 /* offset to sectors per cluster */
#define BPB_RES 3 /* offset to # of reserved sectors */
#define BPB_FATS 5 /* offset to # of FATs */
#define BPB_DIR 6 /* offset to # of root dir entries */
#define BPB_TOT_SECTS 8 /* offset to total # of sectors */
#define BPB_MEDIA_ID 10 /* offset to media ID */
#define BPB_SPF 11 /* offset to # of sectors per FAT */
#define BPB_SPT 13 /* offset to # of sectors per track */
#define BPB_HEADS 15 /* offset to # of heads */
#define BPB_HIDDEN 17 /* offset to # of hidden sectors */
/*
*====================================================================
*
* Flags for DOS drive parameter block
*/
#define DPB_F_FIXED 0x0001 /* fixed media */
#define DPB_F_DOOR 0x0002 /* drive supports door lock status */
#define DPB_F_TSIZE 0x0004 /* all sectors in track are same size */
#define DPB_F_MULTI 0x0008 /* multiple logical units in drive */
#define DPB_F_SHARED 0x0010 /* logical for shared physical drive */
#define DPB_F_CHANGE 0x0020 /* disk change detected */
#define DPB_F_NEWPARA 0x0040 /* device parameters were changed */
#define DPB_F_FORMAT 0x0080 /* disk reformatted */
#define DPB_F_ACCESS 0x0100 /* access flag - fixed media only */
#define DPB_F_DEFAULT DPB_F_CHANGE + DPB_F_NEWPARA
#define DPB_T_360 0 /* type ID for 360kB disk */
#define DPB_T_1200 1 /* type ID for 1.2MB disk */
#define DPB_T_720 2 /* type ID for 720kB disk */
#define DPB_T_SD8 3 /* type ID for SD 8 inch disk */
#define DPB_T_HD8 4 /* type ID for HD 8 inch disk */
#define DPB_T_FIXED 5 /* type ID for fixed disk */
#define DPB_T_TAPE 6 /* type ID for tape drive */
#define DPB_T_1440 7 /* type ID for 1.44MB disk */
#define DPB_T_OPTICAL 8 /* type ID for optical disk */
#define DPB_T_2880 9 /* type ID for 2.88MB disk */
/*
*====================================================================
*
* Vendor information for the boot rom image. These values have to be
* identical to those in mknbi.h.
*/
#ifdef FREEDOS
#define VENDOR_SIZE 5 /* sizeof "mknbi-fdos-1.x-y" in dwords */
#else
#define VENDOR_SIZE 4 /* sizeof "mknbi-dos-1.x-y" in dwords */
#endif
#define VENDOR_BOOTL 16 /* tag for boot loader segment */
#ifdef FREEDOS
#define VENDOR_RAMDISK 18 /* tag for ramdisk image */
#else
#define VENDOR_RAMDISK 17 /* tag for ramdisk image */
#endif
/*
*====================================================================
*
* Layout and magic ID of boot rom image header. These values have to
* be identical to those used by the boot rom. See SPEC.DOC of the
* boot rom source for further information.
*/
#define BOOT_MAGIC 0x1B031336 /* boot image header magic cookie */
#define BOOT_SIZE 512 /* total size of boot image header */
#define BOOT_HD_SIZE 4 /* size of header in dwords */
#define BOOT_HD_MAGIC 0 /* offset for header magic number */
#define BOOT_HD_LENGTH 4 /* offset for header length */
#define BOOT_HD_FLAG1 5 /* offset for header flag 1 */
#define BOOT_HD_FLAG2 6 /* offset for header flag 2 */
#define BOOT_HD_FLAG3 7 /* offset for header flag 3 */
#define BOOT_HD_LOCN 8 /* offset for header location */
#define BOOT_HD_EXEC 12 /* offset for execute address */
#define BOOT_HD_VENDOR 16 /* offset for header vendor information */
#define BOOT_LD_SIZE 4 /* size of load record in dwords */
#define BOOT_LD_LENGTH 0 /* offset for load record length */
#define BOOT_LD_TAG1 1 /* offset for load record tag 1 */
#define BOOT_LD_TAG2 2 /* offset for load record tag 2 */
#define BOOT_LD_FLAGS 3 /* offset for load record flags */
#define BOOT_LD_ADDR 4 /* offset for absolute address */
#define BOOT_LD_ILENGTH 8 /* offset for image length */
#define BOOT_LD_MLENGTH 12 /* offset for memory length */
#define BOOT_LD_VENDOR 16 /* offset for vendor information */
#define BOOT_FLAG_B0 0x01 /* mask for load record flag B0 */
#define BOOT_FLAG_B1 0x02 /* mask for load record flag B1 */
#define BOOT_FLAG_EOF 0x04 /* mask for load record flag EOF */
#define BOOT_LD_SECNUM 0 /* offset of total number of sectors */
#define BOOT_LD_HEADS 4 /* offset of head count */
#define BOOT_LD_SPT 6 /* offset of sectors per track */
#define BOOT_LD_CYL 8 /* offset of number of cylinders */
#define BOOT_LD_DRIVE 10 /* offset of boot drive ID */
#define BOOT_LD_NOHD 11 /* offset of no-hard-disk flag */
/*
*====================================================================
*
* Layout and magic ID of bootp record. Refer to RFC 951, RFC 1048
* and RFC 1533 for further information. The BOOTP record can be
* longer than the standard length as the bootrom might be able to
* load a vendor extension file via tftp.
*/
#define BOOTP_MAGIC_RFC 0x63, 0x82, 0x53, 0x63 /* RFC 1048 vendor ID */
#define BOOTP_MAGIC_CMU 0x43, 0x4D, 0x55, 0x00 /* CMU vendor ID */
#define BOOTP_MAGIC_STA 0x53, 0x54, 0x41, 0x4E /* Stanford vendor ID */
#define BOOTP_MAGIC_LEN 4 /* length of vendor ID */
#define BOOTP_REQUEST 1 /* bootp OP-code */
#define BOOTP_REPLY 2
#define BOOTP_OP 0 /* offset to bootp OP-code */
#define BOOTP_VEND 236 /* offset to vendor information */
#define BOOTP_SIZE 300 /* size of complete bootp record */
#define BOOTP_RFC_NOP 0 /* RFC vendor tag for NO-OP */
#define BOOTP_RFC_END 255 /* RFC vendor tag for end of record */
|