qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

a-b-bootblock.S (2189B)


      1 # x86 bootblock used in migration test
      2 #  repeatedly increments the first byte of each page in a 100MB
      3 #  range.
      4 #  Outputs an initial 'A' on serial followed by repeated 'B's
      5 #
      6 # Copyright (c) 2016 Red Hat, Inc. and/or its affiliates
      7 # This work is licensed under the terms of the GNU GPL, version 2 or later.
      8 # See the COPYING file in the top-level directory.
      9 #
     10 # Author: dgilbert@redhat.com
     11 
     12 
     13 .code16
     14 .org 0x7c00
     15         .file   "fill.s"
     16         .text
     17         .globl  start
     18         .type   start, @function
     19 start:             # at 0x7c00 ?
     20         cli
     21         lgdt gdtdesc
     22         mov $1,%eax
     23         mov %eax,%cr0  # Protected mode enable
     24         data32 ljmp $8,$0x7c20
     25 
     26 .org 0x7c20
     27 .code32
     28         # A20 enable - not sure I actually need this
     29         inb $0x92,%al
     30         or  $2,%al
     31         outb %al, $0x92
     32 
     33         # set up DS for the whole of RAM (needed on KVM)
     34         mov $16,%eax
     35         mov %eax,%ds
     36 
     37         mov $65,%ax
     38         mov $0x3f8,%dx
     39         outb %al,%dx
     40 
     41         # bl keeps a counter so we limit the output speed
     42         mov $0, %bl
     43 mainloop:
     44         # Start from 1MB
     45         mov $(1024*1024),%eax
     46 innerloop:
     47         incb (%eax)
     48         add $4096,%eax
     49         cmp $(100*1024*1024),%eax
     50         jl innerloop
     51 
     52         inc %bl
     53         andb $0x3f,%bl
     54         jnz mainloop
     55 
     56         mov $66,%ax
     57         mov $0x3f8,%dx
     58         outb %al,%dx
     59 
     60         jmp mainloop
     61 
     62         # GDT magic from old (GPLv2)  Grub startup.S
     63         .p2align        2       /* force 4-byte alignment */
     64 gdt:
     65         .word   0, 0
     66         .byte   0, 0, 0, 0
     67 
     68         /* -- code segment --
     69          * base = 0x00000000, limit = 0xFFFFF (4 KiB Granularity), present
     70          * type = 32bit code execute/read, DPL = 0
     71          */
     72         .word   0xFFFF, 0
     73         .byte   0, 0x9A, 0xCF, 0
     74 
     75         /* -- data segment --
     76          * base = 0x00000000, limit 0xFFFFF (4 KiB Granularity), present
     77          * type = 32 bit data read/write, DPL = 0
     78          */
     79         .word   0xFFFF, 0
     80         .byte   0, 0x92, 0xCF, 0
     81 
     82 gdtdesc:
     83         .word   0x27                    /* limit */
     84         .long   gdt                     /* addr */
     85 
     86 /* I'm a bootable disk */
     87 .org 0x7dfe
     88         .byte 0x55
     89         .byte 0xAA