Commit a082d5beb7735f4067d3acb3397338761ecea223

Authored by Imanol-Mikel Barba Sabariego
1 parent 1135c706

--no commit message

Makefile
1   -TARGETS = boot_floppy.bin boot_usb.bin
  1 +TARGETS = boot_floppy.bin boot_usb.bin second_binary.bin
2 2  
3 3  
4 4 boot_floppy.bin: boot_floppy.asm floppy.img
5 5 nasm boot_floppy.asm -f bin -o boot_floppy.bin
6 6 dd if=boot_floppy.bin of=floppy.img bs=512 count=1 conv=notrunc
7 7  
8   -boot_usb.bin: boot_usb.asm
  8 +boot_usb.bin: boot_usb.asm usb.img
9 9 nasm boot_usb.asm -f bin -o boot_usb.bin
  10 + dd if=boot_usb.bin of=usb.img bs=512 count=1 conv=notrunc
  11 +
  12 +second_binary.bin: second_binary.asm floppy.img usb.img
  13 + nasm second_binary.asm -f bin -o second_binary.bin
  14 + dd if=second_binary.bin of=floppy.img bs=512 count=1 seek=3 conv=notrunc
  15 + dd if=second_binary.bin of=usb.img bs=512 count=1 seek=3 conv=notrunc
  16 +
10 17  
11 18 floppy.img:
12 19 dd if=/dev/zero of=floppy.img bs=512 count=2880
13 20  
  21 +usb.img:
  22 + dd if=/dev/zero of=usb.img bs=512 count=2880
  23 +
14 24 clean:
15 25 rm -rf $(TARGETS)
16 26  
... ...
bochsout
... ... @@ -32,41 +32,41 @@
32 32 00000000000i[ ] SB16 support: yes
33 33 00000000000i[ ] USB support: yes
34 34 00000000000i[ ] VGA extension support: vbe
35   -00000000000i[MEM0 ] allocated memory at 0x7f93f621d010. after alignment, vector=0x7f93f621e000
  35 +00000000000i[MEM0 ] allocated memory at 0x7fe55d4ff010. after alignment, vector=0x7fe55d500000
36 36 00000000000i[MEM0 ] 32,00MB
37 37 00000000000i[MEM0 ] mem block size = 0x00100000, blocks=32
38 38 00000000000i[MEM0 ] rom at 0xfffe0000/131072 ('/usr/local/share/bochs/BIOS-bochs-latest')
39   -00000000000i[ ] lt_dlhandle is 0x1cbb760
  39 +00000000000i[ ] lt_dlhandle is 0x23ee760
40 40 00000000000i[PLGIN] loaded plugin libbx_hdimage.so
41   -00000000000i[ ] lt_dlhandle is 0x1cbc220
  41 +00000000000i[ ] lt_dlhandle is 0x23ef220
42 42 00000000000i[PLGIN] loaded plugin libbx_pci.so
43   -00000000000i[ ] lt_dlhandle is 0x1cbcb10
  43 +00000000000i[ ] lt_dlhandle is 0x23efb10
44 44 00000000000i[PLGIN] loaded plugin libbx_pci2isa.so
45   -00000000000i[ ] lt_dlhandle is 0x1cbd650
  45 +00000000000i[ ] lt_dlhandle is 0x23f0650
46 46 00000000000i[PLGIN] loaded plugin libbx_usb_uhci.so
47   -00000000000i[ ] lt_dlhandle is 0x1cbfcf0
  47 +00000000000i[ ] lt_dlhandle is 0x23f2cf0
48 48 00000000000i[PLGIN] loaded plugin libbx_usb_common.so
49   -00000000000i[ ] lt_dlhandle is 0x1cc0690
  49 +00000000000i[ ] lt_dlhandle is 0x23f3690
50 50 00000000000i[PLGIN] loaded plugin libbx_acpi.so
51   -00000000000i[ ] lt_dlhandle is 0x1cc1080
  51 +00000000000i[ ] lt_dlhandle is 0x23f4080
52 52 00000000000i[PLGIN] loaded plugin libbx_cmos.so
53   -00000000000i[ ] lt_dlhandle is 0x1cc19a0
  53 +00000000000i[ ] lt_dlhandle is 0x23f49a0
54 54 00000000000i[PLGIN] loaded plugin libbx_dma.so
55   -00000000000i[ ] lt_dlhandle is 0x1cc2420
  55 +00000000000i[ ] lt_dlhandle is 0x23f5420
56 56 00000000000i[PLGIN] loaded plugin libbx_pic.so
57   -00000000000i[ ] lt_dlhandle is 0x1cc2d10
  57 +00000000000i[ ] lt_dlhandle is 0x23f5d10
58 58 00000000000i[PLGIN] loaded plugin libbx_pit.so
59   -00000000000i[ ] lt_dlhandle is 0x1cc3790
  59 +00000000000i[ ] lt_dlhandle is 0x23f6790
60 60 00000000000i[PLGIN] loaded plugin libbx_floppy.so
61   -00000000000i[ ] lt_dlhandle is 0x1cc4470
  61 +00000000000i[ ] lt_dlhandle is 0x23f7470
62 62 00000000000i[PLGIN] loaded plugin libbx_vga.so
63   -00000000000i[ ] lt_dlhandle is 0x1cc3ea0
  63 +00000000000i[ ] lt_dlhandle is 0x23f6ea0
64 64 00000000000i[PLGIN] loaded plugin libbx_ioapic.so
65   -00000000000i[ ] lt_dlhandle is 0x1cc5670
  65 +00000000000i[ ] lt_dlhandle is 0x23f8670
66 66 00000000000i[PLGIN] loaded plugin libbx_keyboard.so
67   -00000000000i[ ] lt_dlhandle is 0x1cc6050
  67 +00000000000i[ ] lt_dlhandle is 0x23f9050
68 68 00000000000i[PLGIN] loaded plugin libbx_harddrv.so
69   -00000000000i[ ] lt_dlhandle is 0x1cc5330
  69 +00000000000i[ ] lt_dlhandle is 0x23f8330
70 70 00000000000i[PLGIN] loaded plugin libbx_pci_ide.so
71 71 00000000000i[PLGIN] init_dev of 'pci' plugin device by virtual method
72 72 00000000000i[DEV ] i440FX PMC present at device 0, function 0
... ... @@ -74,7 +74,7 @@
74 74 00000000000i[DEV ] PIIX3 PCI-to-ISA bridge present at device 1, function 0
75 75 00000000000i[PLGIN] init_dev of 'cmos' plugin device by virtual method
76 76 00000000000i[CMOS ] Using local time for initial clock
77   -00000000000i[CMOS ] Setting initial clock to: Sun Mar 30 18:09:12 2014 (time0=1396195752)
  77 +00000000000i[CMOS ] Setting initial clock to: Sun Mar 30 21:56:18 2014 (time0=1396209378)
78 78 00000000000i[PLGIN] init_dev of 'dma' plugin device by virtual method
79 79 00000000000i[DMA ] channel 4 used by cascade
80 80 00000000000i[PLGIN] init_dev of 'pic' plugin device by virtual method
... ... @@ -184,7 +184,6 @@
184 184 00000000000i[XGUI ] Mouse capture off
185 185 00000000000i[XGUI ] Mouse capture off
186 186 00000000000i[MEM0 ] allocate_block: block=0x0 used 0x1 of 0x20
187   -00000000000i[XGUI ] Mouse capture off
188 187 00000004661i[BIOS ] $Revision: 11545 $ $Date: 2012-11-11 09:11:17 +0100 (So, 11. Nov 2012) $
189 188 00000318067i[KBD ] reset-disable command received
190 189 00000320801i[BIOS ] Starting rombios32
... ... @@ -231,114 +230,25 @@
231 230 00001534975i[VBIOS] VBE Bios $Id: vbe.c,v 1.64 2011/07/19 18:25:05 vruppert Exp $
232 231 00001600000i[XGUI ] charmap update. Font Height is 16
233 232 00014040328i[BIOS ] Booting from 0000:7c00
234   -00014040383i[XGUI ] Mouse capture off
235   -00014237238i[XGUI ] charmap update. Font Height is 16
236   -00014237238i[XGUI ] Mouse capture off
237   -00014240000i[XGUI ] system RESET callback
238   -00014240000i[SYS ] bx_pc_system_c::Reset(HARDWARE) called
239   -00014240000i[CPU0 ] cpu hardware reset
240   -00014240000i[APIC0] allocate APIC id=0 (MMIO enabled) to 0x0000fee00000
241   -00014240000i[CPU0 ] CPU[0] is the bootstrap processor
242   -00014240000i[CPU0 ] CPUID[0x00000000]: 00000005 756e6547 6c65746e 49656e69
243   -00014240000i[CPU0 ] CPUID[0x00000001]: 00000633 00010800 00002008 1fcbfbff
244   -00014240000i[CPU0 ] CPUID[0x00000002]: 00410601 00000000 00000000 00000000
245   -00014240000i[CPU0 ] CPUID[0x00000003]: 00000000 00000000 00000000 00000000
246   -00014240000i[CPU0 ] CPUID[0x00000004]: 00000000 00000000 00000000 00000000
247   -00014240000i[CPU0 ] CPUID[0x00000005]: 00000040 00000040 00000003 00000020
248   -00014240000i[CPU0 ] CPUID[0x80000000]: 80000008 00000000 00000000 00000000
249   -00014240000i[CPU0 ] CPUID[0x80000001]: 00000000 00000000 00000101 2a100000
250   -00014240000i[CPU0 ] CPUID[0x80000002]: 20202020 20202020 20202020 6e492020
251   -00014240000i[CPU0 ] CPUID[0x80000003]: 286c6574 50202952 69746e65 52286d75
252   -00014240000i[CPU0 ] CPUID[0x80000004]: 20342029 20555043 20202020 00202020
253   -00014240000i[CPU0 ] CPUID[0x80000005]: 01ff01ff 01ff01ff 40020140 40020140
254   -00014240000i[CPU0 ] CPUID[0x80000006]: 00000000 42004200 02008140 00000000
255   -00014240000i[CPU0 ] CPUID[0x80000007]: 00000000 00000000 00000000 00000000
256   -00014240000i[CPU0 ] CPUID[0x80000008]: 00003028 00000000 00000000 00000000
257   -00014240000i[PLGIN] reset of 'pci' plugin device by virtual method
258   -00014240000i[PLGIN] reset of 'pci2isa' plugin device by virtual method
259   -00014240000i[PLGIN] reset of 'cmos' plugin device by virtual method
260   -00014240000i[PLGIN] reset of 'dma' plugin device by virtual method
261   -00014240000i[PLGIN] reset of 'pic' plugin device by virtual method
262   -00014240000i[PLGIN] reset of 'pit' plugin device by virtual method
263   -00014240000i[PLGIN] reset of 'floppy' plugin device by virtual method
264   -00014240000i[PLGIN] reset of 'vga' plugin device by virtual method
265   -00014240000i[PLGIN] reset of 'acpi' plugin device by virtual method
266   -00014240000i[PLGIN] reset of 'ioapic' plugin device by virtual method
267   -00014240000i[PLGIN] reset of 'keyboard' plugin device by virtual method
268   -00014240000i[PLGIN] reset of 'harddrv' plugin device by virtual method
269   -00014240000i[PLGIN] reset of 'pci_ide' plugin device by virtual method
270   -00014240000i[PLGIN] reset of 'unmapped' plugin device by virtual method
271   -00014240000i[PLGIN] reset of 'biosdev' plugin device by virtual method
272   -00014240000i[PLGIN] reset of 'speaker' plugin device by virtual method
273   -00014240000i[PLGIN] reset of 'extfpuirq' plugin device by virtual method
274   -00014240000i[PLGIN] reset of 'parallel' plugin device by virtual method
275   -00014240000i[PLGIN] reset of 'serial' plugin device by virtual method
276   -00014240000i[PLGIN] reset of 'gameport' plugin device by virtual method
277   -00014240000i[PLGIN] reset of 'iodebug' plugin device by virtual method
278   -00014240000i[PLGIN] reset of 'usb_uhci' plugin device by virtual method
279   -00014244661i[BIOS ] $Revision: 11545 $ $Date: 2012-11-11 09:11:17 +0100 (So, 11. Nov 2012) $
280   -00014558067i[KBD ] reset-disable command received
281   -00014560801i[BIOS ] Starting rombios32
282   -00014561235i[BIOS ] Shutdown flag 0
283   -00014561830i[BIOS ] ram_size=0x02000000
284   -00014562251i[BIOS ] ram_end=32MB
285   -00014602744i[BIOS ] Found 1 cpu(s)
286   -00014616931i[BIOS ] bios_table_addr: 0x000fa448 end=0x000fcc00
287   -00014944728i[PCI ] i440FX PMC write to PAM register 59 (TLB Flush)
288   -00015272655i[P2I ] PCI IRQ routing: PIRQA# set to 0x0b
289   -00015272674i[P2I ] PCI IRQ routing: PIRQB# set to 0x09
290   -00015272693i[P2I ] PCI IRQ routing: PIRQC# set to 0x0b
291   -00015272712i[P2I ] PCI IRQ routing: PIRQD# set to 0x09
292   -00015272722i[P2I ] write: ELCR2 = 0x0a
293   -00015273488i[BIOS ] PIIX3/PIIX4 init: elcr=00 0a
294   -00015281204i[BIOS ] PCI: bus=0 devfn=0x00: vendor_id=0x8086 device_id=0x1237 class=0x0600
295   -00015283474i[BIOS ] PCI: bus=0 devfn=0x08: vendor_id=0x8086 device_id=0x7000 class=0x0601
296   -00015285583i[BIOS ] PCI: bus=0 devfn=0x09: vendor_id=0x8086 device_id=0x7010 class=0x0101
297   -00015286429i[BIOS ] region 4: 0x0000c000
298   -00015288431i[BIOS ] PCI: bus=0 devfn=0x0a: vendor_id=0x8086 device_id=0x7020 class=0x0c03
299   -00015289252i[BIOS ] region 4: 0x0000c020
300   -00015289378i[UHCI ] new irq line = 9
301   -00015291263i[BIOS ] PCI: bus=0 devfn=0x0b: vendor_id=0x8086 device_id=0x7113 class=0x0680
302   -00015291496i[ACPI ] new irq line = 11
303   -00015291508i[ACPI ] new irq line = 9
304   -00015291579i[PCI ] setting SMRAM control register to 0x4a
305   -00015455670i[CPU0 ] Enter to System Management Mode
306   -00015455680i[CPU0 ] RSM: Resuming from System Management Mode
307   -00015619698i[PCI ] setting SMRAM control register to 0x0a
308   -00015634632i[BIOS ] MP table addr=0x000fa520 MPC table addr=0x000fa450 size=0xc8
309   -00015636388i[BIOS ] SMBIOS table addr=0x000fa530
310   -00015638583i[BIOS ] ACPI tables: RSDP addr=0x000fa650 ACPI DATA addr=0x01ff0000 size=0xf72
311   -00015641780i[BIOS ] Firmware waking vector 0x1ff00cc
312   -00015643578i[PCI ] i440FX PMC write to PAM register 59 (TLB Flush)
313   -00015644306i[BIOS ] bios_table_cur_addr: 0x000fa674
314   -00015771923i[VBIOS] VGABios $Id: vgabios.c,v 1.75 2011/10/15 14:07:21 vruppert Exp $
315   -00015771994i[BXVGA] VBE known Display Interface b0c0
316   -00015772026i[BXVGA] VBE known Display Interface b0c5
317   -00015774951i[VBIOS] VBE Bios $Id: vbe.c,v 1.64 2011/07/19 18:25:05 vruppert Exp $
318   -00016000000i[XGUI ] charmap update. Font Height is 16
319   -00028280324i[BIOS ] Booting from 0000:7c00
320   -00028280379i[XGUI ] Mouse capture off
321   -00028338761i[XGUI ] charmap update. Font Height is 16
322   -00028338761i[XGUI ] Mouse capture off
323   -00028477234i[XGUI ] Mouse capture off
324   -00095588000p[XGUI ] >>PANIC<< POWER button turned off.
325   -00095588000i[CPU0 ] CPU is in real mode (active)
326   -00095588000i[CPU0 ] CS.mode = 16 bit
327   -00095588000i[CPU0 ] SS.mode = 16 bit
328   -00095588000i[CPU0 ] EFER = 0x00000000
329   -00095588000i[CPU0 ] | EAX=00001000 EBX=00000000 ECX=00090006 EDX=00000000
330   -00095588000i[CPU0 ] | ESP=0000ffd6 EBP=00000000 ESI=000e7c0b EDI=00000400
331   -00095588000i[CPU0 ] | IOPL=0 id vip vif ac vm rf nt of df if tf sf ZF af PF cf
332   -00095588000i[CPU0 ] | SEG sltr(index|ti|rpl) base limit G D
333   -00095588000i[CPU0 ] | CS:0000( 0004| 0| 0) 00000000 0000ffff 0 0
334   -00095588000i[CPU0 ] | DS:0000( 0005| 0| 0) 00000000 0000ffff 0 0
335   -00095588000i[CPU0 ] | SS:0000( 0005| 0| 0) 00000000 0000ffff 0 0
336   -00095588000i[CPU0 ] | ES:1000( 0005| 0| 0) 00010000 0000ffff 0 0
337   -00095588000i[CPU0 ] | FS:0000( 0005| 0| 0) 00000000 0000ffff 0 0
338   -00095588000i[CPU0 ] | GS:0000( 0005| 0| 0) 00000000 0000ffff 0 0
339   -00095588000i[CPU0 ] | EIP=00007c94 (00007c94)
340   -00095588000i[CPU0 ] | CR0=0x60000010 CR2=0x00000000
341   -00095588000i[CPU0 ] | CR3=0x00000000 CR4=0x00000000
342   -00095588000i[CMOS ] Last time is 1396195775 (Sun Mar 30 18:09:35 2014)
343   -00095588000i[XGUI ] Exit
344   -00095588000i[CTRL ] quit_sim called with exit code 1
  233 +00014400000i[XGUI ] charmap update. Font Height is 16
  234 +00088108000p[XGUI ] >>PANIC<< POWER button turned off.
  235 +00088108000i[CPU0 ] CPU is in real mode (active)
  236 +00088108000i[CPU0 ] CS.mode = 16 bit
  237 +00088108000i[CPU0 ] SS.mode = 16 bit
  238 +00088108000i[CPU0 ] EFER = 0x00000000
  239 +00088108000i[CPU0 ] | EAX=00000e00 EBX=00000002 ECX=00090004 EDX=00000000
  240 +00088108000i[CPU0 ] | ESP=0000ffc2 EBP=0000ffca ESI=000e8047 EDI=00000400
  241 +00088108000i[CPU0 ] | IOPL=0 id vip vif ac vm rf nt of df if tf sf ZF af PF cf
  242 +00088108000i[CPU0 ] | SEG sltr(index|ti|rpl) base limit G D
  243 +00088108000i[CPU0 ] | CS:0800( 0004| 0| 0) 00008000 0000ffff 0 0
  244 +00088108000i[CPU0 ] | DS:0000( 0005| 0| 0) 00000000 0000ffff 0 0
  245 +00088108000i[CPU0 ] | SS:0000( 0005| 0| 0) 00000000 0000ffff 0 0
  246 +00088108000i[CPU0 ] | ES:1000( 0005| 0| 0) 00010000 0000ffff 0 0
  247 +00088108000i[CPU0 ] | FS:0000( 0005| 0| 0) 00000000 0000ffff 0 0
  248 +00088108000i[CPU0 ] | GS:0000( 0005| 0| 0) 00000000 0000ffff 0 0
  249 +00088108000i[CPU0 ] | EIP=00000029 (00000029)
  250 +00088108000i[CPU0 ] | CR0=0x60000010 CR2=0x00000000
  251 +00088108000i[CPU0 ] | CR3=0x00000000 CR4=0x00000000
  252 +00088108000i[CMOS ] Last time is 1396209400 (Sun Mar 30 21:56:40 2014)
  253 +00088108000i[XGUI ] Exit
  254 +00088108000i[CTRL ] quit_sim called with exit code 1
... ...
boot_floppy.asm
... ... @@ -18,9 +18,7 @@
18 18 [BITS 16]
19 19 [org 0x7C00]
20 20  
21   -JMP short Start
22   -
23   -str: db 'THE GAME ',0x00
  21 +JMP Start
24 22  
25 23 clear_screen:
26 24 PUSH ax
... ... @@ -53,8 +51,8 @@ print_sector:
53 51 PUSH bx
54 52 PUSH cx
55 53 PUSH dx
56   - MOV al, [6 + ebp] ; num
57   - MOV cl, [8 + ebp] ; offset
  54 + MOV al, [8 + ebp] ; num
  55 + MOV cl, [6 + ebp] ; offset
58 56 MOV ah, 2
59 57 XOR ch, ch
60 58 XOR dx,dx
... ... @@ -82,7 +80,7 @@ print_sector:
82 80 POP ebp
83 81 RETN
84 82  
85   -print_char:
  83 +print_char:
86 84 PUSH ax
87 85 PUSH bx
88 86 MOV ah,0x0E ; Specifies that we want to write a character to the screen
... ... @@ -93,6 +91,27 @@ print_char:
93 91 POP ax
94 92 RETN
95 93  
  94 +execute_sector:
  95 + PUSH ebp
  96 + MOV ebp, esp
  97 + PUSH ax
  98 + PUSH bx
  99 + PUSH cx
  100 + PUSH dx
  101 + MOV ax, [10 + ebp] ; base address
  102 + MOV es, ax
  103 + MOV al, [8 + ebp] ; num
  104 + MOV cl, [6 + ebp] ; offset
  105 + MOV ah, 2 ; Function read
  106 + XOR ch, ch ; cylinder
  107 + XOR dx,dx ; Head and drive
  108 + INT 0x13
  109 + XOR si, si
  110 + PUSH es
  111 + PUSH bx
  112 + RETF
  113 +
  114 +
96 115 Start:
97 116 XOR ax, ax
98 117 MOV ds, ax
... ... @@ -104,12 +123,15 @@ PUSH 2 ; num
104 123 PUSH 2 ; offset
105 124 CALL print_sector ; (offset, num)
106 125 ADD esp, 4
107   -for_start_0:
108   - MOV si,str
109   - CALL print_string
110   - ;JMP for_start_0
111   - JMP $
  126 +MOV si,str
  127 +CALL print_string
  128 +PUSH 0x800; Base address, offset is 0
  129 +PUSH 1 ; num
  130 +PUSH 4 ; offset
  131 +XOR bx, bx;
  132 +CALL execute_sector
112 133  
  134 +str: db 'THE GAME',0x0A,0x0D,0x00
113 135  
114 136 TIMES 510 - ($ - $$) db 0
115 137 DW 0xAA55
... ...
boot_floppy.bin
No preview for this file type
boot_usb.asm 0 → 100644
  1 +;BLACK 0x0
  2 +;BLUE 0x1
  3 +;GREEN 0x2
  4 +;CYAN 0x3
  5 +;RED 0x4
  6 +;MAGENTA 0x5
  7 +;BROWN 0x6
  8 +;GREY 0x7
  9 +;DARK_GREY 0x8
  10 +;LIGHT_BLUE 0x9
  11 +;LIGHT_GREEN 0xA
  12 +;LIGHT_CYAN 0xB
  13 +;LIGHT_RED 0xC
  14 +;LIGHT_MAGENTA 0xD
  15 +;LIGHT_BROWN 0xE
  16 +;WHITE 0xF
  17 +
  18 +[BITS 16]
  19 +[org 0x7C00]
  20 +
  21 +JMP Start
  22 +
  23 +clear_screen:
  24 + PUSH ax
  25 + MOV al, 03h ; Setting the graphical mode 80x25(text)
  26 + MOV ah, 00h ; Code of the function of changing video mode
  27 + INT 10h ; Call interruption
  28 + MOV cl, 0x06
  29 + MOV ah, 0x01
  30 + INT 10h
  31 + POP ax
  32 + RETN
  33 +
  34 +print_string: ; Expects null terminated message in si
  35 + PUSH ax
  36 + for_print_string_0:
  37 + MOV al,[si]
  38 + OR al,al
  39 + JZ end_for_print_string_0
  40 + INC si
  41 + CALL print_char
  42 + JMP for_print_string_0
  43 + end_for_print_string_0:
  44 + POP ax
  45 + RETN
  46 +
  47 +print_sector:
  48 + PUSH ebp
  49 + MOV ebp, esp
  50 + PUSH ax
  51 + PUSH bx
  52 + PUSH cx
  53 + PUSH dx
  54 + MOV al, [8 + ebp] ; num
  55 + MOV cl, [6 + ebp] ; offset
  56 + MOV ah, 2
  57 + XOR ch, ch
  58 + XOR dh, dh
  59 + MOV dl, 0x80
  60 + INT 0x13
  61 + MOV di, 512
  62 + XOR ah, ah
  63 + IMUL di, ax
  64 + XOR si, si
  65 + for_print_sector_0:
  66 + CMP si, di
  67 + JZ end_for_print_sector_0
  68 + MOV al,[es:si]
  69 + OR al, al
  70 + JZ end_print_char_0
  71 + CALL print_char
  72 + end_print_char_0:
  73 + INC si
  74 + JMP for_print_sector_0
  75 + end_for_print_sector_0:
  76 + POP dx
  77 + POP cx
  78 + POP bx
  79 + POP ax
  80 + MOV esp, ebp
  81 + POP ebp
  82 + RETN
  83 +
  84 +print_char:
  85 + PUSH ax
  86 + PUSH bx
  87 + MOV ah,0x0E ; Specifies that we want to write a character to the screen
  88 + MOV bl,0x02 ; Specifies output text color. Not required, but useful to know
  89 + MOV bh,0x00 ; Page number. Leave this alone.
  90 + INT 0x10 ; Signal video interrupt to BIOS
  91 + POP bx
  92 + POP ax
  93 + RETN
  94 +
  95 +execute_sector:
  96 + PUSH ebp
  97 + MOV ebp, esp
  98 + PUSH ax
  99 + PUSH bx
  100 + PUSH cx
  101 + PUSH dx
  102 + MOV ax, [10 + ebp] ; base address
  103 + MOV es, ax
  104 + MOV al, [8 + ebp] ; num
  105 + MOV cl, [6 + ebp] ; offset
  106 + MOV ah, 2 ; Function read
  107 + XOR ch, ch ; cylinder
  108 + XOR dh, dh ; head
  109 + MOV dl, 0x80 ; drive
  110 + INT 0x13
  111 + XOR si, si
  112 + PUSH es
  113 + PUSH bx
  114 + RETF
  115 +
  116 +Start:
  117 +XOR ax, ax
  118 +MOV ds, ax
  119 +MOV ax, 0x1000
  120 +MOV es, ax
  121 +XOR bx, bx
  122 +CALL clear_screen
  123 +PUSH 2 ; num
  124 +PUSH 2 ; offset
  125 +CALL print_sector ; (offset, num)
  126 +ADD esp, 4
  127 +MOV si,str
  128 +CALL print_string
  129 +PUSH 0x800; Base address, offset is 0
  130 +PUSH 1 ; num
  131 +PUSH 4 ; offset
  132 +XOR bx, bx;
  133 +CALL execute_sector
  134 +
  135 +
  136 +str: db 'THE GAME',0x0A,0x0D,0x00
  137 +
  138 +TIMES 510 - ($ - $$) db 0
  139 +DW 0xAA55
  140 +
  141 +
  142 +
... ...
boot_usb.bin 0 → 100644
No preview for this file type
floppy.img
No preview for this file type
second_binary.asm 0 → 100644
  1 +[BITS 16]
  2 +[org 0x8000]
  3 +
  4 +JMP short Start
  5 +
  6 +print_string: ; Expects null terminated message in si
  7 + for_print_string_0:
  8 + MOV al,[si]
  9 + OR al,al
  10 + JZ end_for_print_string_0
  11 + INC si
  12 + CALL print_char
  13 + JMP for_print_string_0
  14 + end_for_print_string_0:
  15 + RETN
  16 +
  17 +print_char:
  18 + MOV ah,0x0E ; Specifies that we want to write a character to the screen
  19 + MOV bl,0x02 ; Specifies output text color. Not required, but useful to know
  20 + MOV bh,0x00 ; Page number. Leave this alone.
  21 + INT 0x10 ; Signal video interrupt to BIOS
  22 + RETN
  23 +
  24 +Start:
  25 +XOR ax, ax
  26 +MOV ds, ax
  27 +MOV ax, 0x1000
  28 +MOV es, ax
  29 +XOR bx, bx
  30 +for_start_0:
  31 + MOV si, str
  32 + CALL print_string
  33 + ;JMP for_start_0
  34 + JMP $
  35 +
  36 +str: db 'Hi! I',0x27,'m the second binary!',0x0A,0x0D,0x00
  37 +
  38 +TIMES 510 - ($ - $$) db 0
  39 +
  40 +
  41 +
... ...
second_binary.bin 0 → 100644
No preview for this file type
usb.img 0 → 100644
No preview for this file type