/*
 * setdisk — сменить текущий диск (0=A, 1=B, ...) через ESTEX
 * CHDISK ($01).  Возвращает число дисков в системе (из A) или
 * -1 + errno при ошибке (EINVDRV, если диска нет).
 */

#include <dos.h>
#include <errno.h>

int setdisk(uint8_t drive) __naked
{
    (void)drive;
    __asm
        ;; __sdcccall(1): uint8_t-аргумент уже в A.
        push  ix
        ld    c, #0x01              ; ESTEX CHDISK
        rst   #0x10
        pop   ix
        jr    c, _setdisk_err
        ld    e, a                  ; A = число дисков
        ld    d, #0
        ret
    _setdisk_err:
        call  __errno_set
        ld    de, #-1
        ret
    __endasm;
}
