Trivial Solutions The LoseThos 64-bit PC Operating System File:/LT/Opt/Boot/BootHD.SPZ This, and all LoseThos files, are public domain. Do whatever you like. God is watching; God is just; God is never out-done in generosity. He talks! LoseThos code compiles with the 64-bit LoseThos compiler/assembler I wrote. Boot the LoseThos CD and you can compile it. Not in Kansas anymore! Click here for preliminary compiler information you need. asm { #include "/LT/OSMain/BootDefs.HPZ" #define MODULE_SIZE 1*BLK_SIZE #define BOOT_HIGH_LOC ((BOOT_RAM_LIMIT-(BOOT_STK_SIZE+MODULE_SIZE))>>4) USE16 BHD_START:: DU8 0x5A DUP(0); BHD_CODE:: CLD MOV AX,VGA_TEXT_MEM_BASE/16 MOV FS,AX MOV U32 FS:[4],0 MOV U32 FS:[0],'B'+0x2000+('3'+0x2000)<<16 MOV AX,BOOT_HIGH_LOC MOV ES,AX CLI MOV SS,AX MOV SP,BOOT_STK_SIZE+MODULE_SIZE STI CALL GET_IP GET_IP: POP BX SUB BX,GET_IP SHR BX,4 //Copy this bootloader code to just under 0x80000 MOV AX,CS ADD AX,BX MOV DS,AX MOV CX,MODULE_SIZE XOR SI,SI XOR DI,DI REP_MOVSB MOV AX,BOOT_HIGH_LOC MOV DS,AX //My assembler doesn't support 16-bit very well. DU8 0xEA; //JMP BOOT_HIGH_LOC:BHD_HISTART DU16 BHD_HISTART,BOOT_HIGH_LOC; BHD_BIOS_DRV_NUM: DU8 0; //Gets patched by InstallBoot(). BHD_BLK_CNT:: DU16 0; BHD_DAP: DU8 16,0,1,0; //One blk at a time BHD_DAP_BUF: DU16 0,0; //Gets patched by InstallBoot(). BHD_DAP_BLK:: //64-bit BHD_DAP_BLK_LO: DU32 0; BHD_DAP_BLK_HI: DU32 0; BHD_HISTART: MOV U8 [BHD_BIOS_DRV_NUM],DL //Passed in by BIOS MOV AX,BOOT_RAM_BASE/16 MOV ES,AX XOR ECX,ECX MOV CX,U16 [BHD_BLK_CNT] @@05: PUSH CX //Blk cnt //READ BLK PUSH ES //Buf seg MOV AX,ES MOV U16 [BHD_DAP_BUF+2],AX //ES:0000 MOV SI,BHD_DAP //DS:SI=DAP MOV AH,0x42 MOV DL,U8 [BHD_BIOS_DRV_NUM] INT 0x13 POP AX //ES ADD AX,BLK_SIZE/16 MOV ES,AX INC U32 [BHD_DAP_BLK_LO] JNZ @@10 INC U32 [BHD_DAP_BLK_HI] @@10: POP CX LOOP @@05 MOV EBX,BOOT_CODE_HARDDRV //See sys_boot_code //My assembler doesn't support 16-bit very well. DU8 0xEA; //JMP BOOT_RAM_BASE:0000 DU16 0,BOOT_RAM_BASE/16; //Continues here ::/LT/OSMain/OSStartUp.CPZ BHD_END:: #assert $<MODULE_SIZE-2 END }