Skip to content

Setting AL in extended_read_disk is senseless? #7

@TheFox

Description

@TheFox

Look at this block in the bios:

mov	ah, 0
cpu	186
shl	ax, 9
extended_read_disk
shr	ax, 9
cpu	8086
mov	ah, 0x02	; Put read code back

cmp	al, 0
je	rd_error

The extended_read_disk instruction writes the error to AL. But right after the read we shift AX back 9 bits to right (shr ax, 9) which overrides AL. So what's even the point of cmp al, 0 and setting AL in extended_read_disk?

And even when you fix the bios, the read function in 8086tiny.c is still wrong. You use AX as length to read. But read() returns, for example 512, which is 0 inside AL because of the overflow. So even if we don't shift bits after the read AL indicates "error".

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions