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
}
Historical capture: 2011-04-07. Home | Power on LoseThos | Sources and changes