00001
00002
00003
00004 #ifndef DEBUG
00005 #define DEBUG 0
00006 #endif
00007
00008
00009
00010 #define SECTOR_SIZE 512
00011 #define SECTOR_SHIFT 9
00012 #define RATIO(b) ((b) / SECTOR_SIZE)
00013
00014 #define PARAMSEC 1
00015
00016 #define DSKBASE 0x1E
00017 #define DSKPARSIZE 11
00018
00019 #define ESC '\33'
00020
00021 #define HEADERPOS 0x00600L
00022
00023 #define FREEPOS 0x08000L
00024
00025
00026 #if BIOS
00027 #define MSEC_PER_TICK 55
00028 #define TICKS_PER_DAY 0x1800B0L
00029 #endif
00030
00031 #if UNIX
00032 #define MSEC_PER_TICK 1000
00033 #define TICKS_PER_DAY 86400L
00034 #endif
00035
00036 #define BOOTPOS 0x07C00L
00037 #define SIGNATURE 0xAA55
00038 #define SIGNATOFF 510
00039
00040
00041 #define MONO_MODE 0x07
00042 #define COLOR_MODE 0x03
00043
00044
00045
00046 #ifndef EXTERN
00047 #define EXTERN extern
00048 #endif
00049
00050 typedef struct vector {
00051 u16_t offset;
00052 u16_t segment;
00053 } vector;
00054
00055 EXTERN vector rem_part;
00056
00057 EXTERN u32_t caddr, daddr;
00058 EXTERN u32_t runsize;
00059
00060 EXTERN u16_t device;
00061
00062 typedef struct {
00063 u32_t base;
00064 u32_t size;
00065 } memory;
00066
00067 EXTERN memory mem[3];
00068 EXTERN int mon_return;
00069
00070 typedef struct bios_env
00071 {
00072 u16_t ax;
00073 u16_t bx;
00074 u16_t cx;
00075 u16_t flags;
00076 } bios_env_t;
00077
00078 #define FL_CARRY 0x0001
00079
00080
00081
00082 void exit(int code);
00083
00084 u32_t mon2abs(void *ptr);
00085
00086 u32_t vec2abs(vector *vec);
00087
00088 void raw_copy(u32_t dstaddr, u32_t srcaddr, u32_t count);
00089
00090 u16_t get_word(u32_t addr);
00091
00092 void put_word(u32_t addr, U16_t word);
00093
00094 void relocate(void);
00095
00096 int dev_open(void), dev_close(void);
00097
00098 int dev_boundary(u32_t sector);
00099
00100 int readsectors(u32_t bufaddr, u32_t sector, U8_t count);
00101
00102 int writesectors(u32_t bufaddr, u32_t sector, U8_t count);
00103
00104 int getch(void);
00105
00106 void scan_keyboard(void);
00107
00108 void ungetch(int c);
00109
00110 int escape(void);
00111
00112 void putch(int c);
00113
00114 #if BIOS
00115 void pause(void);
00116
00117 void serial_init(int line);
00118 #endif
00119
00120 void set_mode(unsigned mode);
00121 void clear_screen(void);
00122
00123
00124 u16_t get_bus(void);
00125
00126 u16_t get_video(void);
00127
00128 u32_t get_tick(void);
00129
00130
00131 void bootstrap(int device, struct part_entry *entry);
00132
00133 void minix(u32_t koff, u32_t kcs, u32_t kds,
00134 char *bootparams, size_t paramsize, u32_t aout);
00135
00136 void int15(bios_env_t *);
00137
00138
00139
00140
00141
00142 #define E_SPECIAL 0x01
00143 #define E_DEV 0x02
00144 #define E_RESERVED 0x04
00145 #define E_STICKY 0x07
00146
00147
00148 #define E_VAR 0x08
00149 #define E_FUNCTION 0x10
00150
00151
00152 typedef struct environment {
00153 struct environment *next;
00154 char flags;
00155 char *name;
00156 char *arg;
00157 char *value;
00158 char *defval;
00159 } environment;
00160
00161 EXTERN environment *env;
00162
00163 char *b_value(char *name);
00164 int b_setvar(int flags, char *name, char *value);
00165
00166 void parse_code(char *code);
00167
00168 extern int fsok;
00169 EXTERN u32_t lowsec;
00170
00171
00172
00173 void bootminix(void);
00174
00175
00176
00177
00178 void readerr(off_t sec, int err);
00179
00180 char *ul2a(u32_t n, unsigned b), *ul2a10(u32_t n);
00181
00182 long a2l(char *a);
00183
00184 unsigned a2x(char *a);
00185
00186 dev_t name2dev(char *name);
00187
00188 int numprefix(char *s, char **ps);
00189
00190 int numeric(char *s);
00191
00192 char *unix_err(int err);
00193
00194 int run_trailer(void);
00195
00196
00197 #if DOS
00198
00199 extern char PSP[256];
00200 EXTERN char *vdisk;
00201 EXTERN char *drun;
00202 #else
00203
00204 #define DOS 0
00205 #endif
00206
00207 void readblock(off_t, char *, int);
00208 void delay(char *);
00209
00210
00211
00212