Trivial Solutions The LoseThos 64-bit PC Operating System File:/LT/Opt/Boot/BootMHD2.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 2*BLK_SIZE #define BOOT_HIGH_LOC ((BOOT_RAM_LIMIT-(BOOT_STK_SIZE+MODULE_SIZE))>>4) USE16 BMHD2_START:: MOV U32 FS:[0],'B'+0x2000+('2'+0x2000)<<16 MOV AX,BOOT_HIGH_LOC MOV ES,AX //Copy this bootloader code to just under 0x80000 MOV AX,CS MOV DS,AX MOV U32 [BMHD2_OLD_CS_IP],EBX MOV U8 [BMHD2_BIOS_DRV_NUM],DL 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:BMHD2_HISTART DU16 BMHD2_HISTART,BOOT_HIGH_LOC; BMHD2_BOOT_MSG:: DU8 256 DUP(0); BMHD2_BIOS_DRV_NUM: DU8 0; BMHD2_PAGE: DU8 0; BMHD2_BLK_ARRAY:: DU64 8 DUP(0); BMHD2_DAP: DU8 16,0,1,0; //One blk at a time BMHD2_DAP_BUF: DU16 0,0; BMHD2_DAP_BLK:: //64-bit BMHD2_DAP_BLK_LO: DU32 0; BMHD2_DAP_BLK_HI: DU32 0; BMHD2_PUTCHAR:: MOV AH,0xE MOV BH,U8 [BMHD2_PAGE] INT 0x10 BMHD2_RET:: RET BMHD2_PUTS:: @@1: LODSB OR AL,AL JZ BMHD2_RET CALL BMHD2_PUTCHAR JMP @@1 BMHD2_GETCHAR: XOR AH,AH INT 0x16 PUSH AX MOV AH,0x0E MOV BX,0x07 INT 0x10 POP AX RET BMHD2_HISTART: MOV AH,0xF INT 0x10 MOV U8 [BMHD2_PAGE],BH //video page MOV U32 FS:[0],0 @@5: MOV SI,BMHD2_BOOT_MSG CALL BMHD2_PUTS CALL BMHD2_GETCHAR CMP AL,'0' JB @@5 CMP AL,'8' JAE @@5 AND EAX,7 MOV EBX,U32 BMHD2_BLK_ARRAY[EAX*8] MOV EAX,U32 BMHD2_BLK_ARRAY+4[EAX*8] OR EBX,EBX JNZ @@10 OR EAX,EAX JZ @@5 @@10: MOV U32 [BMHD2_DAP_BLK_LO],EBX MOV U32 [BMHD2_DAP_BLK_HI],EAX MOV AX,U16 [BMHD2_OLD_CS_IP] SHR AX,4 ADD AX,U16 [BMHD2_OLD_CS_IP+2] MOV U16 [BMHD2_DAP_BUF+2],AX //ES:0000 MOV SI,BMHD2_DAP //DS:SI=DAP MOV DL,U8 [BMHD2_BIOS_DRV_NUM] MOV AH,0x42 INT 0x13 POP EBP POP EDX POP EBX POP ECX XOR EAX,EAX POP GS POP FS POP ES POP DS POPFW //My assembler doesn't support 16-bit very well. DU8 0xEA; //JMP xxxx:yyyy BMHD2_OLD_CS_IP: DU16 0,0; BMHD2_END:: //Continues here ::/LT/Opt/Boot/BootHD.SPZ #assert $<MODULE_SIZE END }