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

syslinux/iso2exe: add loram support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Tue Dec 18 16:09:07 2012 +0100 (2012-12-18)
parents
children 3e7ad70145ce
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 }