syslinux/dos/int2526.S
<<
>>
Prefs
   1/* ----------------------------------------------------------------------- *
   2 *
   3 *   Copyright 1998-2008 H. Peter Anvin - All Rights Reserved
   4 *   Copyright 2009 Intel Corporation; author: H. Peter Anvin
   5 *
   6 *   This program is free software; you can redistribute it and/or modify
   7 *   it under the terms of the GNU General Public License as published by
   8 *   the Free Software Foundation, Inc., 53 Temple Place Ste 330,
   9 *   Boston MA 02111-1307, USA; either version 2 of the License, or
  10 *   (at your option) any later version; incorporated herein by reference.
  11 *
  12 * ----------------------------------------------------------------------- */
  13
  14/*
  15 * int 0x25 and 0x26 direct sector access
  16 *
  17 * Use assembly wrapper functions for these system calls, since unlike
  18 * int 0x21 calls they are "dirty" and can destroy unrelated registers.
  19 *
  20 * NOTE: these all assume the data buffer is in the data segment, i.e.
  21 * %ds == %es == dio.bufseg.
  22 *
  23 * Usage: int int25_read_sector(drive, dio)
  24 * Usage: int int26_write_sector(drive, dio)
  25 */
  26
  27        .code16gcc
  28        .text
  29
  30        .globl  int25_read_sector
  31        .type   int25_read_sector, @function
  32int25_read_sector:
  33        pushl   %ebp
  34        pushl   %edi
  35        pushl   %esi
  36        pushl   %ebx
  37
  38        decw    %ax             /* AL = drive number (0 = A:) */
  39        movw    %dx, %bx        /* BX = dio structure */
  40        movw    6(%bx), %dx     /* DX = data buffer */
  41        movw    $-1, %cx
  42        int     $0x25
  43        jc      1f
  44        xorw    %ax, %ax        /* Error code: 0 = no error */
  451:
  46        popfw
  47        movzwl  %ax, %eax
  48        popl    %ebx
  49        popl    %esi
  50        popl    %edi
  51        popl    %ebp
  52        retl
  53        .size   int25_read_sector, .-int25_read_sector
  54
  55        .globl  int26_write_sector
  56        .type   int26_write_sector, @function
  57int26_write_sector:
  58        pushl   %ebp
  59        pushl   %edi
  60        pushl   %esi
  61        pushl   %ebx
  62
  63        decw    %ax             /* AL = drive number (0 = A:) */
  64        movw    %dx, %bx        /* BX = dio structure */
  65        movw    6(%bx), %dx     /* DX = data buffer */
  66        movw    $-1, %cx
  67        int     $0x26
  68        jc      1f
  69        xorw    %ax, %ax        /* Error code: 0 = no error */
  701:
  71        popfw
  72        movzwl  %ax, %eax
  73        popl    %ebx
  74        popl    %esi
  75        popl    %edi
  76        popl    %ebp
  77        retl
  78        .size   int26_write_sector, .-int26_write_sector
  79
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.