Trivial Solutions
                    The LoseThos 64-bit PC Operating System
File:/LT/Opt/Boot/BootMHD.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
BMHD_START::
BMHD_CODE::
        CLD

        MOV     AX,BOOT_HIGH_LOC

        CLI
        MOV     SS,AX
        MOV     SP,BOOT_STK_SIZE+MODULE_SIZE
        STI

        PUSHFW
        PUSH    DS
        PUSH    ES
        PUSH    FS
        PUSH    GS
        PUSH    ECX
        PUSH    EBX
        PUSH    EDX
        PUSH    EBP

        MOV     ES,AX

        MOV     AX,VGA_TEXT_MEM_BASE/16
        MOV     FS,AX
        MOV     U32 FS:[0],'B'+0x2000+('1'+0x2000)<<16
        CALL    GET_IP
GET_IP:
        POP     BX
        SUB     BX,GET_IP
        MOV     CX,BX
        SHR     BX,4
//Copy this bootloader code to just under 0x80000
        MOV     AX,CS
        PUSH    AX
        ADD     AX,BX
        MOV     DS,AX
        MOV     U16 [BMHD_OLD_CS_IP],CX
        POP     U16 [BMHD_OLD_CS_IP+2]

        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:BMHD_HISTART
        DU16    BMHD_HISTART,BOOT_HIGH_LOC;

BMHD_BIOS_DRV_NUM:      DU8     0;
BMHD_OLD_CS_IP:         DU16    0,0;
//Gets patched by InstallBoot().
BMHD_BLK_CNT::          DU16    0;

BMHD_DAP:               DU8     16,0,1,0; //One blk at a time
BMHD_DAP_BUF:           DU16    0,0;
//Gets patched by InstallBoot().
BMHD_DAP_BLK::  //64-bit
BMHD_DAP_BLK_LO:        DU32    0;
BMHD_DAP_BLK_HI:        DU32    0;

BMHD_HISTART:
        MOV     U8 [BMHD_BIOS_DRV_NUM],DL //Passed in by BIOS
        MOV     AX,BOOT_RAM_BASE/16
        MOV     ES,AX
        XOR     ECX,ECX
        MOV     CX,U16 [BMHD_BLK_CNT]

@@05:   PUSH    CX      //Blk cnt

//READ BLK
        PUSH    ES      //Buf seg
        MOV     AX,ES
        MOV     U16 [BMHD_DAP_BUF+2],AX //ES:0000
        MOV     SI,BMHD_DAP //DS:SI=DAP
        MOV     AH,0x42
        MOV     DL,U8 [BMHD_BIOS_DRV_NUM]
        INT     0x13

        POP     AX      //ES
        ADD     AX,BLK_SIZE/16
        MOV     ES,AX
        INC     U32 [BMHD_DAP_BLK_LO]
        JNZ     @@10
        INC     U32 [BMHD_DAP_BLK_HI]

@@10:   POP     CX
        LOOP    @@05

        MOV     DL,U8 [BMHD_BIOS_DRV_NUM]
        MOV     EBX,U32 [BMHD_OLD_CS_IP]
//My assembler doesn't support 16-bit very well.
        DU8     0xEA;   //JMP BOOT_RAM_BASE:0000
        DU16    0,BOOT_RAM_BASE/16;
//Continues here BMHD2_START
BMHD_END::
        END
#assert $<=440
}
Historical capture: 2011-04-07. Home | Power on LoseThos | Sources and changes