wok view syslinux/stuff/iso2exe/libdos.c @ rev 17160

syslinux/iso2exe: full zImage support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed Sep 17 11:38:34 2014 +0200 (2014-09-17)
parents 7d300004a3b8
children 6aed6fc5819d
line source
1 #include "libdos.h"
3 char *progname(void)
4 {
5 #asm
6 .bss
7 ._name lcomm 80
8 .text
9 push es
10 seg cs
11 mov es, [0x2C]
12 mov cx, #-1
13 xor di, di
14 xor al, al
15 loop1:
16 repne
17 scasb
18 scasb
19 jne loop1
20 lea si, [di+2]
21 push ds
22 push ds
23 push es
24 pop ds
25 pop es
26 mov di, ._name
27 push di
28 loop2:
29 lodsb
30 stosb
31 or al, al
32 jnz loop2
33 pop ax
34 pop ds
35 pop es
36 #endasm
37 }
39 #ifdef __SLEEP
40 void sleep(int seconds)
41 {
42 unsigned long n;
44 n = (seconds * 182) / 10;
45 #asm
46 push es
47 push #0
48 pop es
49 mov di, #0x46C
50 sleeplp:
51 mov cx, #0x8000
52 or dx, dx
53 jne siok
54 mov cx, ax
55 jcxz done
56 siok:
57 sub ax, cx
58 sbb dx, #0
59 seg es
60 add cx, [di]
61 zzz:
62 seg es
63 cmp cx, [di]
64 jne zzz
65 jmp sleeplp
66 done:
67 pop es
68 #endasm
69 }
70 #endif
72 int chdirname(char *path)
73 {
74 #asm
75 pop ax
76 pop bx
77 push bx
78 push ax
79 cmp byte ptr [bx+1], #0x3A
80 jne nodisk
81 mov dl, [bx]
82 or dl, #0x20
83 sub dl, #0x61
84 mov ah, #0x0E
85 push bx
86 int 0x21
87 pop bx
88 inc bx
89 inc bx
90 nodisk:
91 mov dx, bx
92 xor cx, cx
93 next:
94 mov al, [bx]
95 cmp al, #0x5C
96 jne tsteos
97 mov cx, bx
98 tsteos:
99 inc bx
100 or al, al
101 jnz next
102 cbw
103 jcxz quit
104 mov bx, cx
105 push [bx]
106 mov [bx], al
107 push bx
108 call chdir
109 pop bx
110 pop [bx]
111 quit:
112 ret
114 // int chdir(char *path)
115 _chdir:
116 pop ax
117 pop dx
118 push dx
119 push ax
120 chdir:
121 stc
122 mov ax, #0x713B
123 int 0x21
124 jnc chdireturn
125 mov ah, #0x3B
126 int 0x21
127 chdireturn:
128 sbb ax, ax
129 #endasm
130 }
132 void dosshutdown(void)
133 {
134 #asm
135 push bp
136 push si
137 push di
138 push ds
139 seg cs
140 mov stack+2, ss
141 seg cs
142 mov stack,sp
143 xor bx, bx
144 mov ds, bx // ds = 0
145 mov [bx+4], #step
146 mov [bx+6], cs
147 pushf
148 pop ax
149 or ax, #0x100 // set TF
150 push ax
151 popf
152 jmp far [bx+4*0x19]
153 stack:
154 .long 0
155 stepagain:
156 iret
157 step:
158 push si
159 push ds
160 mov si, sp
161 seg ss
162 lds si, [si+4]
163 cmp word ptr [si], #0x19CD
164 pop ds
165 pop si
166 jne stepagain
167 seg cs
168 lss sp, stack
169 pop ds
170 pop di
171 pop si
172 pop bp
173 #endasm
174 }
176 int versiondos;
177 int dosversion(void)
178 {
179 #asm
180 mov ah, #0x30
181 int 0x21
182 cbw
183 mov _versiondos, ax
184 #endasm
185 }