summary refs log tree commit diff stats
path: root/gitlab/issues/target_missing/host_missing/accel_missing/2959.toml
blob: 431c47f057ad286d94d6929355d6bf27cf8894bf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
id = 2959
title = "int 0x10 teletype output cuts final character in custom MBR on QEMU (i386 real mode)"
state = "opened"
created_at = "2025-05-09T05:37:00.393Z"
closed_at = "n/a"
labels = []
url = "https://gitlab.com/qemu-project/qemu/-/issues/2959"
host-os = "Ubuntu 12 (x86)"
host-arch = "x86"
qemu-version = "QEMU emulator version 7.2.15 (Debian 1:7.2+dfsg-7+deb12u12)"
guest-os = "n/a"
guest-arch = "n/a"
description = """When using QEMU to test a custom bootloader in 16-bit real mode (i386), the BIOS interrupt `int 0x10` with AH=0x0E (teletype output) fails to display the last character of the printed message. For example, printing `"hello"` only renders `"hell"`.

This happens only with this exact combination:

real mode `int 0x10` teletype output

message ends with `13, 10, 0`

`QEMU` output cuts off the last character consistently

All buffer and code logic has been verified to be correct. The same code, when run on Bochs or physical hardware, prints properly."""
reproduce = """1.Assemble the following boot.asm:
```nasm
[org 0x7C00]
[BITS 16]

_start:
    cli
    xor ax, ax
    mov ds, ax
    mov es, ax
    mov ss, ax
    mov sp, 0x7C00

    mov si, msg
    call print

    hlt
    jmp $

print:
    pusha
.loop:
    lodsb
    or al, al
    jz .done
    mov ah, 0x0E
    int 0x10
    jmp .loop
.done:
    popa
    ret

msg db 'hello', 13, 10, 0
times 510 - ($ - $$) db 0
dw 0xAA55
```

2. Compile and run:
```bash
$ nasm -f bin boot.asm -o boot.img
$ qemu-system-i386 -nographic -boot a -drive format=raw,file=boot.img,index=0,if=floppy
```

3. Output will be:
```text
Booting from Floppy...
hell
```
Expected output:
```text
Booting from Floppy...
hello
```"""
additional = """- Adding padding (extra 13, 10) does not solve the problem.

- Confirmed that boot.img includes all bytes (xxd dump is correct).

- Tested on multiple machines with same QEMU version.

- May relate to VGA character output buffer not flushing after last INT 0x10?

- This makes QEMU inaccurate for BIOS-level debugging of bootloaders."""