今回,os自作入門のharibote
osをusbから起動できるように改造したいのですが、下記のmbrを使い、os本体を0x8000後に移動させる事に成功しました。しかし、肝心のos本体は起動してくれません。メモリを変えてくれないって感じですね。真っ黒の画面にはいってしまいます。理由はなんでしょうか？

```

    [bits 16]
    [ORG 0x7c00]
            ;; BPB Structure                                                                                                                     
    JMP     entry           ;BS_jmpBoot                                                                                                  
    BS_OEMName      DB "HARIBOTE"
    BPB_BytsPerSec  DW 0x0200
    BPB_SecPerClus  DB 0x01
    BPB_RsvdSecCnt  DW 0x0020
    BPB_NumFATs     DB 0x02
    BPB_RootEntCnt  DW 0x0000
    BPB_TotSec16    DW 0x0000
    BPB_Media       DB 0xf8
    BPB_FATSz16     DW 0x0000
    BPB_SecPerTrk   DW 0x0001
    BPB_NumHeads    DW 0x0001
    BPB_HiDDSec     DD 0x00000000
    BPB_TotSec32    DD 0x00ee5000
    BPB_FATSz32     DD 0x00000020
    BPB_ExtFlags    DW 0x0000
    BPB_FSVer       DW 0x0000
    BPB_RootClus    DD 0x00000002
    BPB_FSInfo      DW 0x0001
    BPB_BkBootSec   DW 0x0006
            times   12      DB 0    ;BPB_Reserverd                                                                                               
    BS_DrvNum       DB 0x80
    BS_Reserved1    DB 0x00
    BS_BootSig      DB 0x29
    BS_VolID        DD 0xa0a615c
    BS_VolLab       DB "ISHIHA BOOT"
    BS_FileSysType  DB "FAT32   "
    
    entry:  
    
            MOV AX, 0 
            MOV DS, AX   
            MOV ES, AX
            MOV BX, AX
        MOV CX, 0
        MOV SP, 0x7c00
    
    prepare:
        mov ah, 0x41                ; Set Function 0x41
            mov word bx, 0x55AA          
            push dx                     ; Save old Drive Identifier
            mov dl, 0x80                ; Load 'Active' ID Into dl, commented out to keep bios setting of dl (should be active drive)
            int 0x13                    ; Call Interupt
            jc unsupported        ; If Extentions aren't Supported, Jump
            xor ax, ax
            add ax, 1                   ; clear carry flag
        XOR EDI, EDI
    loop:
        MOV CL, 0
    retry:
            MOV DL, 0x80
            MOV AH, 0x42
            MOV SI, DAPS 
            INT 0x13
            JNC next
            ADD CL, 1
            MOV DL, 0x80 
            MOV AH, 0x00
            INT 0x13
            CMP CL, 6
            JAE error
            JMP retry
    next:
    
        XOR EAX, EAX
        XOR ECX, ECX
    
        ADD EDI, 1
        MOV ECX, lba0
        MOV [ECX], EDI
    
        XOR EAX, EAX
        XOR ECX, ECX
        XOR EBP, EBP
        XOR EBP, EBP
    
        MOV AX, [addr]
        MOV ECX, addr
        MOV EBX, segm
        ADD AX, 0x200
        ADC BP, 0
        SHL BP, 12
        ADD BP, [segm]
        MOV [EBX], BP
    
        MOV [ECX], AX
        MOV [EBX], BP
    
        CMP EDI, 0x169
        JB loop
    
            JMP 0xc200
    error:
            MOV     SI,msg
    putloop:
            MOV     AL,[SI]
            ADD     SI,1            
            CMP     AL,0
            JE      fin
            MOV     AH,0x0e         
            MOV     BX,15       
            INT     0x10           
            JMP     putloop
    fin:
            HLT                     
            JMP     fin            
    msg:
            DB      0x0a, 0x0a      
            DB      "load error"
            DB      0x0a            
            DB      0
    msg1:
            DB      0x0a, 0x0a      
            DB      "not supported"
            DB      0x0a            
            DB      0
    
    unsupported:
        MOV SI, msg1
        JMP putloop
    
    drv:    DB     0x80
    DAPS:   DB 0x10               ; Size of Structure (16 bytes, always this for DAPS)
            DB 0                  ; Always 0
            DB 1                  ; Number of Sectors to Read (1x512)
            DB 0                  ; Always 0 
    addr:   DW 0x8000             ; Target Location for Reading To (0x8000 = 0x0800:0x0000)  
    segm:   DW 0x0000             ; Page Table (0, Disabled)
    lba0:   DD 1                  ; Read from 2nd block (code I want to load)
        DD 0                  ; Large LBAs, dunno what this does
            RESB    0x01fe-($-$$)       
            DB      0x55, 0xaa
    
```
CC BY-SA 3.0
2018-04-13T12:22:40.170
43216
2018-04-14T06:52:36.720
2018-04-14T06:52:36.720
3060
24226
question
linux operating-system qemu
qemuによるusbブートーー『30日でできるOS自作入門』