might have fixed some of the boot_drive issues with ext_read
This commit is contained in:
21
bochsrc.bxrc
21
bochsrc.bxrc
@@ -1,20 +1,18 @@
|
||||
# configuration file generated by Bochs
|
||||
plugin_ctrl: voodoo=false, unmapped=true, biosdev=true, speaker=true, extfpuirq=true, parallel=true, serial=true, busmouse=false, e1000=false, es1370=false, gameport=true, ne2k=false, sb16=false, usb_uhci=false, usb_ohci=false, usb_ehci=false, usb_xhci=false
|
||||
plugin_ctrl: voodoo=false, unmapped=true, biosdev=true, speaker=true, extfpuirq=true, parallel=true, serial=true, busmouse=false, e1000=false, es1370=false, gameport=true, iodebug=true, ne2k=false, sb16=false, usb_uhci=false, usb_ohci=false, usb_ehci=false, usb_xhci=false
|
||||
config_interface: win32config
|
||||
display_library: win32
|
||||
memory: guest=64, host=64, block_size=128
|
||||
romimage: file="C:\Program Files\Bochs-2.8\BIOS-bochs-latest", address=0x00000000, options=none, flash_data=none
|
||||
romimage: file="C:\Program Files\Bochs-2.8\BIOS-bochs-legacy", address=0x00000000, options=none, flash_data=none
|
||||
vgaromimage: file="C:\Program Files\Bochs-2.8\VGABIOS-lgpl-latest"
|
||||
boot: disk
|
||||
floppy_bootsig_check: disabled=0
|
||||
floppy_bootsig_check: disabled=1
|
||||
floppya: type=1_44
|
||||
# no floppyb
|
||||
ata0: enabled=true, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
|
||||
ata0-master: type=disk, path=".\disk.img", mode=flat, cylinders=0, heads=0, spt=0, sect_size=512, model="Stevia Disk", biosdetect=auto, translation=lba
|
||||
ata0-master: type=disk, path=".\disk.img", mode=flat, cylinders=0, heads=16, spt=63, sect_size=512, model="Stevia Disk", biosdetect=auto, translation=auto
|
||||
ata0-slave: type=none
|
||||
ata1: type=none
|
||||
ata1-master: type=none
|
||||
ata1-slave: type=none
|
||||
ata1: enabled=false
|
||||
ata2: enabled=false
|
||||
ata3: enabled=false
|
||||
optromimage1: file=none
|
||||
@@ -29,7 +27,10 @@ pci: enabled=1, chipset=i440fx, slot1=none, slot2=none, slot3=none, slot4=none,
|
||||
vga: extension=vbe, update_freq=10, realtime=1, ddc=builtin
|
||||
cpu: count=1, ips=1000000, model=p3_katmai, reset_on_triple_fault=1, cpuid_limit_winnt=0, ignore_bad_msrs=1, mwait_is_nop=0
|
||||
print_timestamps: enabled=0
|
||||
port_e9_hack: enabled=false, all_rings=false
|
||||
debugger_log: -
|
||||
magic_break: enabled=1
|
||||
port_e9_hack: enabled=true, all_rings=false
|
||||
iodebug: all_rings=0
|
||||
private_colormap: enabled=0
|
||||
clock: sync=none, time0=local, rtc_sync=0
|
||||
# no cmosimage
|
||||
@@ -43,9 +44,9 @@ keyboard: type=mf, serial_delay=150, paste_delay=100000, user_shortcut=none
|
||||
mouse: type=none, enabled=false, toggle=ctrl+mbutton
|
||||
sound: waveoutdrv=dummy, waveout=none, waveindrv=dummy, wavein=none, midioutdrv=dummy, midiout=none
|
||||
speaker: enabled=true, mode=sound, volume=15
|
||||
parport1: enabled=true, file=none
|
||||
parport1: enabled=false
|
||||
parport2: enabled=false
|
||||
com1: enabled=true, mode=null
|
||||
com1: enabled=false
|
||||
com2: enabled=false
|
||||
com3: enabled=false
|
||||
com4: enabled=false
|
||||
@@ -38,8 +38,7 @@ InitFATDriver:
|
||||
sub sp, 0x6
|
||||
|
||||
.calc_active_part:
|
||||
mov bx, [partition_offset_ptr]
|
||||
mov ax, word [ds:bx]
|
||||
mov ax, word partition_offset
|
||||
|
||||
mov dx, partition_table
|
||||
add dx, ax ; dx points to the partition that was booted from
|
||||
@@ -114,7 +113,7 @@ SearchFATDIR:
|
||||
add sp, 0x4
|
||||
|
||||
cmp eax, 0x0fff_fff7
|
||||
je SearchFATDIR.bad_cluster
|
||||
;je SearchFATDIR.bad_cluster ; TODO: Implement Bad cluster checks
|
||||
jb SearchFATDIR.load_next_dir_next_OK
|
||||
ERROR STAGE2_FAT32_END_OF_CHAIN
|
||||
|
||||
@@ -234,8 +233,8 @@ NextCluster:
|
||||
add eax, ecx ; fat_sector + first_fat_sector
|
||||
mov dword [si + FAT32_NextClusterData_t.fat_sector], eax
|
||||
.load_fat_table:
|
||||
mov bx, word [boot_drive_ptr]
|
||||
movzx ax, byte [ds:bx]
|
||||
xor ax, ax
|
||||
mov al, boot_drive
|
||||
push ax
|
||||
|
||||
mov ax, 0x1
|
||||
@@ -306,8 +305,8 @@ ReadFATCluster:
|
||||
.func:
|
||||
print_string ReadFATCluster_INFO_cstr
|
||||
|
||||
mov bx, word [boot_drive_ptr]
|
||||
movzx ax, byte [ds:bx]
|
||||
xor ax, ax
|
||||
mov al, boot_drive
|
||||
push ax
|
||||
|
||||
mov ax, 0x1 ; count = 1
|
||||
|
||||
@@ -49,14 +49,18 @@
|
||||
section .text
|
||||
begin_text:
|
||||
; dl = byte boot_drive
|
||||
; si = word part_offset (active partition offset)
|
||||
; bx = ptr PartTable_t partition_table
|
||||
; dx = ptr FAT32_bpb_t fat32_bpb
|
||||
; ax = word part_offset (active partition offset)
|
||||
; si = ptr PartTable_t partition_table
|
||||
; di = ptr FAT32_bpb_t fat32_bpb
|
||||
ALIGN 4, db 0x90
|
||||
init:
|
||||
__BOCHS_MAGIC_DEBUG
|
||||
cli ; We do not want to be interrupted
|
||||
|
||||
mov [vbr_part_table_ptr], bx ; pointer to partition_table
|
||||
mov [vbr_fat32_bpb_ptr], dx ; pointer to fat32_bpb
|
||||
mov [boot_drive], dl ; copy boot_drive to globals
|
||||
mov [partition_offset], ax ; copy partition_offset to globals
|
||||
|
||||
mov ax, __STAGE2_SEGMENT ; set all our segments to the configured segment, excep es
|
||||
mov ds, ax ; *
|
||||
mov fs, ax ; *
|
||||
@@ -81,7 +85,7 @@ init:
|
||||
|
||||
mov sp, stack_top
|
||||
mov bp, sp
|
||||
sub sp, 0x20
|
||||
sub sp, 0x10
|
||||
push bp ; setup a somewhat normal stack frame, minus a ret ptr
|
||||
|
||||
sti
|
||||
@@ -121,22 +125,9 @@ struc EarlyBootStruct_t
|
||||
.fat32_ebpb resb FAT32_ebpb_t_size
|
||||
endstruc
|
||||
|
||||
; bp - 2 : byte boot_drive
|
||||
; bp - 4 : word part_offset
|
||||
; bp - 6 : ptr PartTable_t partition_table
|
||||
; bp - 8 : ptr FAT32_bpb_t fat32_bpb
|
||||
ALIGN 4, db 0x90
|
||||
main:
|
||||
lea ax, [bp - 2]
|
||||
mov [boot_drive_ptr], ax
|
||||
|
||||
lea ax, [bp - 4]
|
||||
mov [partition_offset_ptr], ax ; setup pointers to boot_drive and partition offset on stack
|
||||
|
||||
mov byte [bp - 2], dl ; boot_drive (probably 0x80)
|
||||
mov word [bp - 4], si ; partition_offset
|
||||
mov word [bp - 6], bx ; partition_table
|
||||
mov word [bp - 8], dx ; fat32_bpb
|
||||
__BOCHS_MAGIC_DEBUG
|
||||
.check_sig:
|
||||
mov eax, dword [STAGE2_SIG]
|
||||
cmp eax, 0xDEADBEEF
|
||||
@@ -145,7 +136,7 @@ main:
|
||||
.stage2_main:
|
||||
mov ax, PartTable_t_size
|
||||
push ax
|
||||
mov ax, [bp - 6] ; ptr partition_table
|
||||
mov ax, word [vbr_part_table_ptr] ; ptr partition_table
|
||||
push ax
|
||||
mov ax, partition_table
|
||||
push ax
|
||||
@@ -154,7 +145,7 @@ main:
|
||||
|
||||
mov ax, (FAT32_bpb_t_size + FAT32_ebpb_t_size) ; size in byte
|
||||
push ax
|
||||
mov ax, [bp - 8]
|
||||
mov ax, word [vbr_fat32_bpb_ptr]
|
||||
push ax
|
||||
mov ax, fat32_bpb ; defined in memory.inc, destination
|
||||
push ax
|
||||
@@ -503,33 +494,44 @@ section .bss follows=.sign
|
||||
begin_bss:
|
||||
; structures
|
||||
|
||||
align 16, resb 1
|
||||
align 8, resb 1
|
||||
partition_table resb PartTable_t_size
|
||||
|
||||
align 16, resb 1
|
||||
align 8, resb 1
|
||||
fat32_bpb resb FAT32_bpb_t_size
|
||||
fat32_ebpb resb FAT32_ebpb_t_size
|
||||
|
||||
align 16, resb 1
|
||||
align 8, resb 1
|
||||
fat32_nc_data resb 16
|
||||
|
||||
align 16, resb 1
|
||||
align 8, resb 1
|
||||
lba_packet resb LBAPkt_t_size
|
||||
|
||||
align 16, resb 1
|
||||
align 8, resb 1
|
||||
fat32_state:
|
||||
resb FAT32_State_t_size
|
||||
|
||||
align 16, resb 1
|
||||
align 8, resb 1
|
||||
SteviaInfo:
|
||||
resd 4
|
||||
|
||||
;
|
||||
; locals
|
||||
; globals
|
||||
;
|
||||
boot_drive_ptr:
|
||||
align 8, resb 1
|
||||
boot_drive:
|
||||
resb 1
|
||||
|
||||
align 8, resb 1
|
||||
partition_offset:
|
||||
resw 1
|
||||
partition_offset_ptr:
|
||||
|
||||
align 8, resb 1
|
||||
vbr_fat32_bpb_ptr:
|
||||
resw 1
|
||||
|
||||
align 8, resb 1
|
||||
vbr_part_table_ptr:
|
||||
resw 1
|
||||
|
||||
;
|
||||
|
||||
@@ -152,10 +152,10 @@ main:
|
||||
call read_disk_raw
|
||||
add sp, 0xC
|
||||
.enter_stage2:
|
||||
mov dl, byte [bp - 2] ; boot_drive
|
||||
mov si, word [bp - 4] ; part_offset
|
||||
mov bx, partition_table
|
||||
mov dx, fat32_bpb
|
||||
mov dl, byte [bp - 2] ; byte boot_drive
|
||||
mov ax, word [bp - 4] ; word part_offset
|
||||
mov si, partition_table ; ptr partition_table
|
||||
mov di, fat32_bpb ; ptr fat32_bpb
|
||||
jmp word 0x0000:STAGE2_ENTRY
|
||||
|
||||
; ###############
|
||||
|
||||
Reference in New Issue
Block a user