I am following this awsome series in LINUX (ubuntu 16.04), until now I have sucessfully run boot loader stage 1 but there is some issue in loading stage 2 in bochs (It works fine in virtual box though). here is bootloader stage one code:
Code: Select all
bits 16
org 0 ;we will set segments later
start: jmp main
;***** BPB Parameter block *****
;must start 3 bytes after start (jmp main is of 3 byte)
bpbOEM db "My OS " ; OEM identifier (Cannot exceed 8 bytes!)
bpbBytesPerSector: DW 512
bpbSectorsPerCluster: DB 1
bpbReservedSectors: DW 1
bpbNumberOfFATs: DB 2
bpbRootEntries: DW 224
bpbTotalSectors: DW 2880
bpbMedia: DB 0xf8 ;; 0xF1
bpbSectorsPerFAT: DW 9
bpbSectorsPerTrack: DW 18
bpbHeadsPerCylinder: DW 2
bpbHiddenSectors: DD 0
bpbTotalSectorsBig: DD 0
bsDriveNumber: DB 0
bsUnused: DB 0
bsExtBootSignature: DB 0x29
bsSerialNumber: DD 0xa0a1a2a3
bsVolumeLabel: DB "MOS FLOPPY "
bsFileSystem: DB "FAT12 "
Print:
;string pointed by ds:si, terminated by 0
lodsb ;load next byte pointed by si to al
or al, al ;if al is zero
jz PrintDone
mov ah, 0eh ;prepare fro bios vedio interuppt call
int 10h
jmp Print
PrintDone:
ret
ReadSectors :
;cx = no fo sectors to ReadSectors
;ax = strating sectors
;ES:BX = buffer to read to
.MAIN :
mov di, 0x0005 ;we will try 5 times if failed
.SECTORLOOP :
push ax
push bx
push cx
call LBACHS ;we will get absolute sector, absolute head and absolute track information from here
mov ah, 0x02 ;prepare bios read interrupt
mov al, 0x01 ;we will read one sector
mov ch, byte[absoluteTrack]
mov cl, byte[absoluteSector]
mov dh, byte[absoluteHead]
mov dl, byte[bsDriveNumber]
int 0x13 ;bios read interrupt call
jnc .SUCCESS ;if sucessful
xor ax, ax ;retying again
int 0x13 ;reset disk interuppt call
dec di ;decrease a try
pop cx
pop bx
pop ax
jnz .SECTORLOOP
int 0x18 ;start basic
.SUCCESS:
pop cx
pop bx
pop ax
add bx, word[bpbBytesPerSector] ;next read buffer location
inc ax ;next sector to read
loop .MAIN
ret
ClusterLBA:
;convert custer no to LBACHS
;LBA = (cluster - 2)*sectors per cluster
sub ax, 0x0002
xor cx, cx
mov cl, byte[bpbSectorsPerCluster]
mul cx
add ax, word[datasector] ;base of data sectors
ret
LBACHS:
;convert LBA to CHS
;absolute sector = (logical sector % sector per track) + 1
;absolute head = (logical sector / sectors per track) % no of heads
;absoluteTrack = logical sector / (sectors per track * no of heads)
xor dx, dx
div word [bpbSectorsPerTrack]
inc dl
mov byte[absoluteSector], dl
xor dx, dx
div word[bpbHeadsPerCylinder]
mov byte[absoluteHead], dl
mov byte[absoluteTrack], al
ret
main:
cli
mov ax, 0x07C0 ;0x7C0*2^4 = 0x7C00
mov ds, ax ;setup segment registers
mov es, ax
mov fs, ax
mov gs, ax
;create stack
mov ax, 0x0000
mov ss, ax
mov sp, 0xFFFF
sti
;display Starting
mov si, msgStart
call Print
;load root directory table
LOAD_ROOT:
;size of root directory = 32*(no of root entries)/(bytes per sector) SECTORS
xor cx, cx
xor dx, dx
mov ax, 0x0020
mul word[bpbRootEntries]
div word[bpbBytesPerSector]
xchg ax, cx ;size of root in cx
;location root directory = reserved sectors + (no of FATS * sectors per FAT)
mov al, byte [bpbNumberOfFATs]
mul word [bpbSectorsPerFAT]
add ax, word[bpbReservedSectors]
mov word [datasector], ax
add word [datasector], cx ;start of data sector
;read root directory into memory 0x7C0:0x0200 = 7C00+0200
mov bx, 0x0200
call ReadSectors
;find stage2 boot loader
mov cx, word[bpbRootEntries]
mov di, 0x0200 ;address of root table in memory
.LOOP:
push cx
mov cx, 0x000B ;11 character name
mov si, ImageName ;Image name
push di
rep cmpsb
pop di
je LOAD_FAT
pop cx
add di, 0x0020 ;next entry in root table
loop .LOOP
jmp FAILURE
LOAD_FAT:
;save starting cluster of boot image
mov dx, word[di+0x001A]
mov word[cluster], dx
;compute size of FAT and store in cx = no of FAT * sectors per FAT
xor ax, ax
mov al, byte[bpbNumberOfFATs]
mul word[bpbSectorsPerFAT]
mov cx, ax
;location of FAT in ax = no of reserved Sectors
mov ax, word[bpbReservedSectors]
;read FAT in memory at 0x7C0:0x0200
mov bx, 0x0200
call ReadSectors
;load image file into memory at 0050:0000 => 0x500)
mov ax, 0x0050
mov es, ax
mov bx, 0x0000
push bx
LOAD_IMAGE:
mov ax, word[cluster]
pop bx
call ClusterLBA
xor cx, cx
mov cl, byte[bpbSectorsPerCluster]
call ReadSectors
push bx
;compute next cluster, remember cluster entries are of 12 bits = 3/2 bytes
mov ax, word[cluster]
mov cx, ax
mov dx, ax
shr dx, 0x0001 ;devide by 2
add cx, dx ;equals to 3/2*cluster number
mov bx, 0x0200 ;location of FAT in memory
add bx, cx ;we moved 3/2*cluster no bytes from start
mov dx, word[bx] ;read 2 bytes in dx
test ax, 0x0001 ;if this was odd cluster => lower 12 bits, else =>higher 12 bits will be used
jnz .ODD_CLUSTER
.EVEN_CLUSTER:
and dx, 0000111111111111b
jmp .DONE
.ODD_CLUSTER:
shr dx, 0x0004
.DONE:
mov word[cluster], dx ;new cluster location
cmp dx, 0x0FF0 ;if this was last cluster
jb LOAD_IMAGE
DONE:
mov si, msgStageTwo
call Print
push word 0x0050 ;segment address
push word 0x0000 ;offset in segment
retf ;far return, both of the above value will be used
FAILURE:
mov si, msgFailure
call Print
mov ah, 0x00
int 0x16 ;wait for key press
int 0x19 ;reboot
absoluteSector db 0x00
absoluteHead db 0x00
absoluteTrack db 0x00
datasector dw 0x0000
cluster dw 0x0000
ImageName db "KRNLDR SYS" ;must be 11 bytes
msgStart db 0x0D,0x0A, "Boot Loader starting (0x7c00)....", 0x0D, 0x0A, 0x00
msgStageTwo db "Jumping to stage2 (0x500)", 0x0D, 0x0A, 0x0D, 0x0A, 0x00
msgFailure db 0x0D, 0x0A, "ERROR : Press Key to Reboot", 0x0A, 0x00
times 510-($-$$) db 0
dw 0xAA55 ;boot signature
It seems stage 2 is not correctly loaded in memory at 0x0500, Bochs debugger is showing some unknown instruction at 0x0500, it just hungs after printing "jumping to stage two" (print call just before RETF instruction). Here is my bochs configuration file:
Code: Select all
romimage: file="/usr/share/bochs/BIOS-bochs-latest"
vgaromimage: file ="/usr/share/bochs/VGABIOS-lgpl-latest"
floppya: 1_44=/dev/loop0, status=inserted
display_library: x, options="gui_debug"
log: bochsout.txt
And here is bochs log:
Code: Select all
00000000000i[ ] Bochs x86 Emulator 2.6
00000000000i[ ] Built from SVN snapshot on September 2nd, 2012
00000000000i[ ] System configuration
00000000000i[ ] processors: 1 (cores=1, HT threads=1)
00000000000i[ ] A20 line support: yes
00000000000i[ ] IPS is set to 4000000
00000000000i[ ] CPU configuration
00000000000i[ ] level: 6
00000000000i[ ] SMP support: no
00000000000i[ ] APIC support: xapic
00000000000i[ ] FPU support: yes
00000000000i[ ] MMX support: yes
00000000000i[ ] 3dnow! support: no
00000000000i[ ] SEP support: yes
00000000000i[ ] SSE support: sse2
00000000000i[ ] XSAVE support: no
00000000000i[ ] AES support: no
00000000000i[ ] MOVBE support: no
00000000000i[ ] ADX support: no
00000000000i[ ] x86-64 support: yes
00000000000i[ ] 1G paging support: no
00000000000i[ ] MWAIT support: yes
00000000000i[ ] AVX support: no
00000000000i[ ] VMX support: 1
00000000000i[ ] Optimization configuration
00000000000i[ ] RepeatSpeedups support: yes
00000000000i[ ] Fast function calls: yes
00000000000i[ ] Handlers Chaining speedups: no
00000000000i[ ] Devices configuration
00000000000i[ ] NE2000 support: yes
00000000000i[ ] PCI support: yes, enabled=yes
00000000000i[ ] SB16 support: yes
00000000000i[ ] USB support: yes
00000000000i[ ] VGA extension support: vbe cirrus
00000000000i[MEM0 ] allocated memory at 0x7fe974eb4010. after alignment, vector=0x7fe974eb5000
00000000000i[MEM0 ] 32.00MB
00000000000i[MEM0 ] mem block size = 0x00100000, blocks=32
00000000000i[MEM0 ] rom at 0xfffe0000/131072 ('/usr/share/bochs/BIOS-bochs-latest')
00000000000i[ ] lt_dlhandle is 0x2f17540
00000000000i[PLGIN] loaded plugin libbx_hdimage.so
00000000000i[ ] lt_dlhandle is 0x2f17ed0
00000000000i[PLGIN] loaded plugin libbx_pci.so
00000000000i[ ] lt_dlhandle is 0x2f18a50
00000000000i[PLGIN] loaded plugin libbx_pci2isa.so
00000000000i[ ] lt_dlhandle is 0x2f19460
00000000000i[PLGIN] loaded plugin libbx_acpi.so
00000000000i[ ] lt_dlhandle is 0x2f19e60
00000000000i[PLGIN] loaded plugin libbx_cmos.so
00000000000i[ ] lt_dlhandle is 0x2f1a7a0
00000000000i[PLGIN] loaded plugin libbx_dma.so
00000000000i[ ] lt_dlhandle is 0x2f1b230
00000000000i[PLGIN] loaded plugin libbx_pic.so
00000000000i[ ] lt_dlhandle is 0x2f1bad0
00000000000i[PLGIN] loaded plugin libbx_pit.so
00000000000i[ ] lt_dlhandle is 0x2f1c500
00000000000i[PLGIN] loaded plugin libbx_floppy.so
00000000000i[ ] lt_dlhandle is 0x2f1d0f0
00000000000i[PLGIN] loaded plugin libbx_vga.so
00000000000i[ ] lt_dlhandle is 0x2f1d880
00000000000i[PLGIN] loaded plugin libbx_ioapic.so
00000000000i[ ] lt_dlhandle is 0x2f1e2c0
00000000000i[PLGIN] loaded plugin libbx_keyboard.so
00000000000i[ ] lt_dlhandle is 0x2f1eb60
00000000000i[PLGIN] loaded plugin libbx_harddrv.so
00000000000i[ ] lt_dlhandle is 0x2f30c50
00000000000i[PLGIN] loaded plugin libbx_pci_ide.so
00000000000i[PLGIN] init_dev of 'pci' plugin device by virtual method
00000000000i[PCI ] 440FX Host bridge present at device 0, function 0
00000000000i[PLGIN] init_dev of 'pci2isa' plugin device by virtual method
00000000000i[PCI ] PIIX3 PCI-to-ISA bridge present at device 1, function 0
00000000000i[PLGIN] init_dev of 'cmos' plugin device by virtual method
00000000000i[CMOS ] Using local time for initial clock
00000000000i[CMOS ] Setting initial clock to: Fri Jan 5 19:33:21 2018 (time0=1515161001)
00000000000i[PLGIN] init_dev of 'dma' plugin device by virtual method
00000000000i[DMA ] channel 4 used by cascade
00000000000i[PLGIN] init_dev of 'pic' plugin device by virtual method
00000000000i[PLGIN] init_dev of 'pit' plugin device by virtual method
00000000000i[PLGIN] init_dev of 'floppy' plugin device by virtual method
00000000000i[DMA ] channel 2 used by Floppy Drive
00000000000e[FDD ] cannot determine media geometry, trying to use defaults
00000000000i[FDD ] fd0: '/dev/loop0' ro=0, h=2,t=80,spt=18
00000000000i[PLGIN] init_dev of 'vga' plugin device by virtual method
00000000000i[MEM0 ] Register memory access handlers: 0x00000000000a0000 - 0x00000000000bffff
00000000000i[VGA ] interval=200000
00000000000i[MEM0 ] Register memory access handlers: 0x00000000e0000000 - 0x00000000e0ffffff
00000000000i[BXVGA] VBE Bochs Display Extension Enabled
00000000000i[XGUI ] test_alloc_colors: 16 colors available out of 16 colors tried
00000000000i[XGUI ] font 8 wide x 16 high, display depth = 24
00000000000i[MEM0 ] rom at 0xc0000/41472 ('/usr/share/bochs/VGABIOS-lgpl-latest')
00000000000i[PLGIN] init_dev of 'acpi' plugin device by virtual method
00000000000i[PCI ] ACPI Controller present at device 1, function 3
00000000000i[PLGIN] init_dev of 'ioapic' plugin device by virtual method
00000000000i[IOAP ] initializing I/O APIC
00000000000i[MEM0 ] Register memory access handlers: 0x00000000fec00000 - 0x00000000fec00fff
00000000000i[PLGIN] init_dev of 'keyboard' plugin device by virtual method
00000000000i[KBD ] will paste characters every 1000 keyboard ticks
00000000000i[PLGIN] init_dev of 'harddrv' plugin device by virtual method
00000000000i[HD ] Using boot sequence floppy, none, none
00000000000i[HD ] Floppy boot signature check is enabled
00000000000i[PLGIN] init_dev of 'pci_ide' plugin device by virtual method
00000000000i[PCI ] PIIX3 PCI IDE controller present at device 1, function 1
00000000000i[PLGIN] init_dev of 'unmapped' plugin device by virtual method
00000000000i[PLGIN] init_dev of 'biosdev' plugin device by virtual method
00000000000i[PLGIN] init_dev of 'speaker' plugin device by virtual method
00000000000i[PLGIN] init_dev of 'extfpuirq' plugin device by virtual method
00000000000i[PLGIN] init_dev of 'parallel' plugin device by virtual method
00000000000i[PAR ] parallel port 1 at 0x0378 irq 7
00000000000i[PLGIN] init_dev of 'serial' plugin device by virtual method
00000000000i[SER ] com1 at 0x03f8 irq 4
00000000000i[PLGIN] init_dev of 'gameport' plugin device by virtual method
00000000000i[PLGIN] init_dev of 'iodebug' plugin device by virtual method
00000000000i[PLGIN] register state of 'pci' plugin device by virtual method
00000000000i[PLGIN] register state of 'pci2isa' plugin device by virtual method
00000000000i[PLGIN] register state of 'cmos' plugin device by virtual method
00000000000i[PLGIN] register state of 'dma' plugin device by virtual method
00000000000i[PLGIN] register state of 'pic' plugin device by virtual method
00000000000i[PLGIN] register state of 'pit' plugin device by virtual method
00000000000i[PLGIN] register state of 'floppy' plugin device by virtual method
00000000000i[PLGIN] register state of 'vga' plugin device by virtual method
00000000000i[PLGIN] register state of 'unmapped' plugin device by virtual method
00000000000i[PLGIN] register state of 'biosdev' plugin device by virtual method
00000000000i[PLGIN] register state of 'speaker' plugin device by virtual method
00000000000i[PLGIN] register state of 'extfpuirq' plugin device by virtual method
00000000000i[PLGIN] register state of 'parallel' plugin device by virtual method
00000000000i[PLGIN] register state of 'serial' plugin device by virtual method
00000000000i[PLGIN] register state of 'gameport' plugin device by virtual method
00000000000i[PLGIN] register state of 'iodebug' plugin device by virtual method
00000000000i[PLGIN] register state of 'acpi' plugin device by virtual method
00000000000i[PLGIN] register state of 'ioapic' plugin device by virtual method
00000000000i[PLGIN] register state of 'keyboard' plugin device by virtual method
00000000000i[PLGIN] register state of 'harddrv' plugin device by virtual method
00000000000i[PLGIN] register state of 'pci_ide' plugin device by virtual method
00000000000i[SYS ] bx_pc_system_c::Reset(HARDWARE) called
00000000000i[CPU0 ] cpu hardware reset
00000000000i[APIC0] allocate APIC id=0 (MMIO enabled) to 0x00000000fee00000
00000000000i[CPU0 ] CPUID[0x00000000]: 00000002 756e6547 6c65746e 49656e69
00000000000i[CPU0 ] CPUID[0x00000001]: 00000633 00010800 00002028 1fcbfbff
00000000000i[CPU0 ] CPUID[0x00000002]: 00410601 00000000 00000000 00000000
00000000000i[CPU0 ] CPUID[0x80000000]: 80000008 00000000 00000000 00000000
00000000000i[CPU0 ] CPUID[0x80000001]: 00000000 00000000 00000101 2a100000
00000000000i[CPU0 ] CPUID[0x80000002]: 20202020 20202020 20202020 6e492020
00000000000i[CPU0 ] CPUID[0x80000003]: 286c6574 50202952 69746e65 52286d75
00000000000i[CPU0 ] CPUID[0x80000004]: 20342029 20555043 20202020 00202020
00000000000i[CPU0 ] CPUID[0x80000005]: 01ff01ff 01ff01ff 40020140 40020140
00000000000i[CPU0 ] CPUID[0x80000006]: 00000000 42004200 02008140 00000000
00000000000i[CPU0 ] CPUID[0x80000007]: 00000000 00000000 00000000 00000000
00000000000i[CPU0 ] CPUID[0x80000008]: 00003028 00000000 00000000 00000000
00000000000i[PLGIN] reset of 'pci' plugin device by virtual method
00000000000i[PLGIN] reset of 'pci2isa' plugin device by virtual method
00000000000i[PLGIN] reset of 'cmos' plugin device by virtual method
00000000000i[PLGIN] reset of 'dma' plugin device by virtual method
00000000000i[PLGIN] reset of 'pic' plugin device by virtual method
00000000000i[PLGIN] reset of 'pit' plugin device by virtual method
00000000000i[PLGIN] reset of 'floppy' plugin device by virtual method
00000000000i[PLGIN] reset of 'vga' plugin device by virtual method
00000000000i[PLGIN] reset of 'acpi' plugin device by virtual method
00000000000i[PLGIN] reset of 'ioapic' plugin device by virtual method
00000000000i[PLGIN] reset of 'keyboard' plugin device by virtual method
00000000000i[PLGIN] reset of 'harddrv' plugin device by virtual method
00000000000i[PLGIN] reset of 'pci_ide' plugin device by virtual method
00000000000i[PLGIN] reset of 'unmapped' plugin device by virtual method
00000000000i[PLGIN] reset of 'biosdev' plugin device by virtual method
00000000000i[PLGIN] reset of 'speaker' plugin device by virtual method
00000000000i[SPEAK] Using /dev/console for output
00000000000i[PLGIN] reset of 'extfpuirq' plugin device by virtual method
00000000000i[PLGIN] reset of 'parallel' plugin device by virtual method
00000000000i[PLGIN] reset of 'serial' plugin device by virtual method
00000000000i[PLGIN] reset of 'gameport' plugin device by virtual method
00000000000i[PLGIN] reset of 'iodebug' plugin device by virtual method
00000000000i[XGUI ] Mouse capture off
00000000000i[XGUI ] Mouse capture off
00000000000i[MEM0 ] allocate_block: block=0x0 used 0x1 of 0x20
00000004661i[BIOS ] $Revision: 11318 $ $Date: 2012-08-06 19:59:54 +0200 (Mo, 06. Aug 2012) $
00000319051i[KBD ] reset-disable command received
00000321813i[BIOS ] Starting rombios32
00000322255i[BIOS ] Shutdown flag 0
00000322852i[BIOS ] ram_size=0x02000000
00000323280i[BIOS ] ram_end=32MB
00000363809i[BIOS ] Found 1 cpu(s)
00000377990i[BIOS ] bios_table_addr: 0x000fa438 end=0x000fcc00
00000705785i[PCI ] 440FX PMC write to PAM register 59 (TLB Flush)
00001033717i[P2I ] PCI IRQ routing: PIRQA# set to 0x0b
00001033741i[P2I ] PCI IRQ routing: PIRQB# set to 0x09
00001033765i[P2I ] PCI IRQ routing: PIRQC# set to 0x0b
00001033789i[P2I ] PCI IRQ routing: PIRQD# set to 0x09
00001033799i[P2I ] write: ELCR2 = 0x0a
00001034578i[BIOS ] PIIX3/PIIX4 init: elcr=00 0a
00001042258i[BIOS ] PCI: bus=0 devfn=0x00: vendor_id=0x8086 device_id=0x1237 class=0x0600
00001044537i[BIOS ] PCI: bus=0 devfn=0x08: vendor_id=0x8086 device_id=0x7000 class=0x0601
00001046655i[BIOS ] PCI: bus=0 devfn=0x09: vendor_id=0x8086 device_id=0x7010 class=0x0101
00001046884i[PIDE ] new BM-DMA address: 0xc000
00001047504i[BIOS ] region 4: 0x0000c000
00001049538i[BIOS ] PCI: bus=0 devfn=0x0b: vendor_id=0x8086 device_id=0x7113 class=0x0680
00001049768i[ACPI ] new irq line = 11
00001049782i[ACPI ] new irq line = 9
00001049809i[ACPI ] new PM base address: 0xb000
00001049823i[ACPI ] new SM base address: 0xb100
00001049851i[PCI ] setting SMRAM control register to 0x4a
00001213945i[CPU0 ] Enter to System Management Mode
00001213945i[CPU0 ] enter_system_management_mode: temporary disable VMX while in SMM mode
00001213955i[CPU0 ] RSM: Resuming from System Management Mode
00001377976i[PCI ] setting SMRAM control register to 0x0a
00001392878i[BIOS ] MP table addr=0x000fa510 MPC table addr=0x000fa440 size=0xc8
00001394693i[BIOS ] SMBIOS table addr=0x000fa520
00001394744i[MEM0 ] allocate_block: block=0x1f used 0x2 of 0x20
00001397672i[BIOS ] Firmware waking vector 0x1ff00cc
00001402531i[BIOS ] ACPI tables: RSDP addr=0x000fa640 ACPI DATA addr=0x01ff0000 size=0x1f22
00001402568i[PCI ] 440FX PMC write to PAM register 59 (TLB Flush)
00001403299i[BIOS ] bios_table_cur_addr: 0x000fa664
00001530917i[VBIOS] VGABios $Id: vgabios.c,v 1.75 2011/10/15 14:07:21 vruppert Exp $
00001530988i[BXVGA] VBE known Display Interface b0c0
00001531020i[BXVGA] VBE known Display Interface b0c5
00001533945i[VBIOS] VBE Bios $Id: vbe.c,v 1.64 2011/07/19 18:25:05 vruppert Exp $
00001600003i[XGUI ] charmap update. Font Height is 16
00014040953i[BIOS ] Booting from 0000:7c00
00121936267i[XGUI ] Mouse capture off
00121936267i[MEM0 ] allocate_block: block=0x1 used 0x3 of 0x20
00121936267i[ ] dbg: Quit
00121936267i[CPU0 ] CPU is in real mode (active)
00121936267i[CPU0 ] CS.mode = 16 bit
00121936267i[CPU0 ] SS.mode = 16 bit
00121936267i[CPU0 ] EFER = 0x00000000
00121936267i[CPU0 ] | EAX=00000005 EBX=00000207 ECX=00090007 EDX=00000fff
00121936267i[CPU0 ] | ESP=0000fff5 EBP=00000000 ESI=000e01d7 EDI=00000005
00121936267i[CPU0 ] | IOPL=0 id vip vif ac vm rf nt of df if tf sf zf af PF cf
00121936267i[CPU0 ] | SEG sltr(index|ti|rpl) base limit G D
00121936267i[CPU0 ] | CS:f000( 0004| 0| 0) 000f0000 0000ffff 0 0
00121936267i[CPU0 ] | DS:07c0( 0005| 0| 0) 00007c00 0000ffff 0 0
00121936267i[CPU0 ] | SS:0000( 0005| 0| 0) 00000000 0000ffff 0 0
00121936267i[CPU0 ] | ES:0050( 0005| 0| 0) 00000500 0000ffff 0 0
00121936267i[CPU0 ] | FS:07c0( 0005| 0| 0) 00007c00 0000ffff 0 0
00121936267i[CPU0 ] | GS:07c0( 0005| 0| 0) 00007c00 0000ffff 0 0
00121936267i[CPU0 ] | EIP=0000ff53 (00000230)
00121936267i[CPU0 ] | CR0=0x60000010 CR2=0x00000000
00121936267i[CPU0 ] | CR3=0x00000000 CR4=0x00000000
00121936267i[CMOS ] Last time is 1515161031 (Fri Jan 5 19:33:51 2018)
00121936267i[XGUI ] Exit
00121936267i[CTRL ] quit_sim called with exit code 0
dd if=/dev/zero of=myfloppy.img bs=512 ... /dev/loop0
Thank you for reading, please help I want to follow this series to the end.