Adjust memory layout for 2.6.22+ kernels with 32KB setup code
[mknbi.git] / rmrd.S
1 ; rmrd.S  -  DOS program to remove ramdisk
2 ;
3 ; Copyright (C) 1996-1998 Gero Kuhlmann   <gero@gkminix.han.de>
4 ;
5 ;  This program is free software; you can redistribute it and/or modify
6 ;  it under the terms of the GNU General Public License as published by
7 ;  the Free Software Foundation; either version 2 of the License, or
8 ;  any later version.
9 ;
10 ;  This program is distributed in the hope that it will be useful,
11 ;  but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 ;  GNU General Public License for more details.
14 ;
15 ;  You should have received a copy of the GNU General Public License
16 ;  along with this program; if not, write to the Free Software
17 ;  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18
19 #if     !defined(USE_NASM) && !defined(USE_AS86)
20 #define USE_AS86
21 #endif
22
23 #ifdef  USE_AS86
24 #define CON(x)          *x
25 #define BCON(x)         *x
26 #define JMP(x)          jmp x
27 #define STRDECL(s)      .ascii  s
28 #endif
29
30 #ifdef  USE_NASM
31 #define CON(x)          x
32 #define BCON(x)         byte x
33 #define JMP(x)          jmp short x
34 #define STRDECL(s)      db      s
35 #endif
36
37 #ifdef  USE_AS86
38         .text
39         entry   start
40 #endif
41 #ifdef  USE_NASM
42         text
43 #endif
44
45         org     0x100
46 start:  push    cs
47         pop     ds
48         xor     ax,ax
49         mov     es,ax
50         mov     si,CON(rdsig)
51         mov     di,CON(0xF1) * 4        ; check ramdisk driver signature
52         mov     cx,CON(4)
53         repz
54         cmpsb
55         jnz     start4
56
57         mov     ax,CON(0x9C00)
58         int     0xF8                    ; check if a ramdisk driver is
59         cmp     ax,CON(0x009C)          ; installed
60         je      start1
61 start4: mov     al,BCON(1)
62         mov     dx,CON(noramd)
63         JMP(start9)
64
65 start1: mov     ax,CON(0x9C03)
66         int     0xF8                    ; get ramdisk ID
67         or      cl,cl                   ; has to be drive A: (e.g. floppy)
68         jz      start2
69         mov     al,BCON(2)
70         mov     dx,CON(noflop)
71         JMP(start9)
72
73 start2: mov     ax,CON(0x9C04)
74         int     0xF8                    ; remove ramdisk
75         or      al,al
76         jz      start3
77         mov     al,BCON(3)
78         mov     dx,CON(rderr)
79         JMP(start9)
80
81 start3: xor     al,al
82         mov     dx,CON(rdok)
83 start9: push    ax
84         mov     ah,BCON(0x09)
85         int     0x21                    ; print error message
86         mov     dx,CON(crlf)
87         mov     ah,BCON(0x09)
88         int     0x21                    ; print CR/LF
89         pop     ax
90         mov     ah,BCON(0x4C)
91         int     0x21                    ; terminate program
92
93 ; Data area
94
95 rdsig:  STRDECL("NetB")
96 noramd: STRDECL("No ramdisk found$")
97 noflop: STRDECL("Ramdisk is not drive A:$")
98 rderr:  STRDECL("Can't remove ramdisk$")
99 rdok:   STRDECL("Ramdisk removed$")
100 crlf:   db      0x0D,0x0A
101         STRDECL("$")