summaryrefslogtreecommitdiff
path: root/bootblocks/bootelks.c
diff options
context:
space:
mode:
Diffstat (limited to 'bootblocks/bootelks.c')
-rw-r--r--bootblocks/bootelks.c194
1 files changed, 0 insertions, 194 deletions
diff --git a/bootblocks/bootelks.c b/bootblocks/bootelks.c
deleted file mode 100644
index a236e6f..0000000
--- a/bootblocks/bootelks.c
+++ /dev/null
@@ -1,194 +0,0 @@
-
-#include <dos.h>
-#include "minix.h"
-
-extern union REGS __argr;
-int x86_test = 0;
-unsigned int boot_mem_top = 0;
-
-void mem_check();
-
-int boot_drive = 0;
-long boot_offset = 0;
-int boot_spt = 0;
-
-char dirname[16] = "boot";
-char imagename[16] = "linux";
-
-char lbuf[80];
-
-int serr();
-int (*read_sector)() = serr;
-
-struct super_block b_super;
-d_inode b_inode[INODES_PER_BLOCK];
-zone_nr b_zone[NR_INDIRECTS];
-/* dir_struct directory[]; */
-
-main()
-{
- writes("Booting Elks....");
-
- mem_check();
-
- writes("\nSystem has ");
- writes(itoa(boot_mem_top/64));
- writes("k of low memory\n");
-
- boot_drive = __argr.h.dl;
- boot_offset = __argr.x.cx;
- boot_offset += ((long)__argr.h.dh << 16);
- boot_spt = __argr.x.si;
-
- relocator(-1);
-
- writes("Relocated code to ");
- writes(itoa(__get_cs()/64));
- writes("k.\n");
-
- writes("Booting from ");
- if( boot_drive & 0x80 ) writes("hard");
- else writes("floppy");
- writes(" drive ");
- writes(itoa(boot_drive&0x7F));
- if( boot_offset )
- {
- writes(" offset ");
- writes(ltoa(boot_offset));
- writes(" sectors");
- }
- writes("\n");
-
- if( boot_drive & 0x80 ) init_hd(boot_drive);
- else init_fd(boot_drive);
-
- if( load_dir(0) >= 0 && load_dir(dirname) >= 0 && load_file(imagename) >= 0 )
- run_elks();
- else if( load_dir(0) >= 0 && load_file(imagename) >= 0 )
- run_elks();
- else
- {
- writes("Cannot find kernel image file\n");
- read(0, lbuf, 1); exit(1);
- }
-
- read(0, lbuf, sizeof(lbuf));
-}
-
-init_fd(drive) { }
-init_hd(drive) { }
-load_dir(name) { return -1; }
-load_file(name) { return -1; }
-run_elks() { }
-
-/****************************************************************************/
-
-writes(str)
-char * str;
-{
- write(1, str, strlen(str));
-}
-
-void mem_check()
-{
-#asm
- int 0x12 ! Amount of boot memory
- mov cl,#6
- sal ax,cl ! In segments
- mov [_boot_mem_top],ax
-#endasm
-}
-
-serr()
-{
- writes("Cannot read sector, drive not initilised\n");
- return -1;
-}
-
-/****************************************************************************/
-
-load_blocks()
-{
- if( b_super.s_magic != SUPER_MAGIC ) return -1;
-
-try_again:;
-#ifdef zone_shift
- if( zone_shift != b_super.s_log_zone_size) return -1;
-#else
- zone_shift = b_super.s_log_zone_size;
-#endif
-
- inode--;
- load_block(seg_of(b_inode), inode/INODES_PER_BLOCK
- + b_super.s_imap_blocks
- + b_super.s_zmap_blocks
- + 2);
- get_now();
-
- ldaddr = LOADSEG; /* Load at 64k mark */
-
- {
- register d_inode * i_ptr;
- i_ptr = b_inode + inode%INODES_PER_BLOCK;
- next_zone = i_ptr->i_zone;
- flength = i_ptr->i_size;
- if( (i_ptr->i_mode & I_TYPE) == I_DIRECTORY )
- {
- ldaddr = seg_of(directory);
- inode = 0; /* Mark - we've no _file_ inode yet */
- }
- }
-
- end_zone = next_zone+NR_DZONE_NUM;
- load_zone(seg_of(b_zone), (indirect = next_zone[NR_DZONE_NUM]));
- get_now();
-
- for(;;)
- {
- if( next_zone >= end_zone )
- {
- if( indirect != 0 )
- {
- next_zone = b_zone;
- end_zone = next_zone + NR_INDIRECTS;
- indirect = 0;
- continue;
- }
- break;
- }
- load_zone(ldaddr, *next_zone);
- next_zone++;
- ldaddr += (seg_at(1) << zone_shift);
- }
- get_now();
-
- if(!inode)
- {
- dirptr = directory;
- while(flength > 0)
- {
-register char * s = bootfile;
-register char * p = dirptr->d_name;
-
- if( dirptr->d_inum )
- {
- for(;;)
- {
- if( *s == '\0')
- {
- if(*p == '\0')
- {
- inode = dirptr->d_inum;
- goto try_again;
- }
- break;
- }
- if( *s++ != *p++ ) break;
- }
- }
- flength -= 16;
- dirptr++;
- }
- nogood();
- }
-}