wok diff 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 diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/syslinux/stuff/iso2exe/libdos.c Tue Dec 18 16:09:07 2012 +0100 1.3 @@ -0,0 +1,130 @@ 1.4 +#include "libdos.h" 1.5 + 1.6 +char *progname(void) 1.7 +{ 1.8 +#asm 1.9 + .bss 1.10 +._name lcomm 80 1.11 + .text 1.12 + push es 1.13 + seg cs 1.14 + mov es, [0x2C] 1.15 + mov cx, #-1 1.16 + xor di, di 1.17 + xor al, al 1.18 +loop1: 1.19 + repne 1.20 + scasb 1.21 + scasb 1.22 + jne loop1 1.23 + lea si, [di+2] 1.24 + push ds 1.25 + push ds 1.26 + push es 1.27 + pop ds 1.28 + pop es 1.29 + mov di, ._name 1.30 + push di 1.31 +loop2: 1.32 + lodsb 1.33 + stosb 1.34 + or al, al 1.35 + jnz loop2 1.36 + pop ax 1.37 + pop ds 1.38 + pop es 1.39 +#endasm 1.40 +} 1.41 + 1.42 +#ifdef __SLEEP 1.43 +void sleep(int seconds) 1.44 +{ 1.45 + unsigned long n; 1.46 + 1.47 + n = (seconds * 182) / 10; 1.48 +#asm 1.49 + push es 1.50 + push #0 1.51 + pop es 1.52 + mov di, #0x46C 1.53 +sleeplp: 1.54 + mov cx, #0x8000 1.55 + or dx, dx 1.56 + jne siok 1.57 + mov cx, ax 1.58 + jcxz done 1.59 +siok: 1.60 + sub ax, cx 1.61 + sbb dx, #0 1.62 + seg es 1.63 + add cx, [di] 1.64 +zzz: 1.65 + seg es 1.66 + cmp cx, [di] 1.67 + jne zzz 1.68 + jmp sleeplp 1.69 +done: 1.70 + pop es 1.71 +#endasm 1.72 +} 1.73 +#endif 1.74 + 1.75 +int chdirname(char *path) 1.76 +{ 1.77 +#asm 1.78 + pop ax 1.79 + pop bx 1.80 + push bx 1.81 + push ax 1.82 + cmp byte ptr [bx+1], #0x3A 1.83 + jne nodisk 1.84 + mov dl, [bx] 1.85 + or dl, #0x20 1.86 + sub dl, #0x61 1.87 + mov ah, #0x0E 1.88 + push bx 1.89 + int 0x21 1.90 + pop bx 1.91 + inc bx 1.92 + inc bx 1.93 +nodisk: 1.94 + mov dx, bx 1.95 + xor cx, cx 1.96 +next: 1.97 + mov al, [bx] 1.98 + cmp al, #0x5C 1.99 + jne tsteos 1.100 + mov cx, bx 1.101 +tsteos: 1.102 + inc bx 1.103 + or al, al 1.104 + jnz next 1.105 + cbw 1.106 + jcxz quit 1.107 + mov bx, cx 1.108 + push [bx] 1.109 + mov [bx], al 1.110 + push bx 1.111 + call chdir 1.112 + pop bx 1.113 + pop [bx] 1.114 +quit: 1.115 + ret 1.116 + 1.117 +// int chdir(char *path) 1.118 +_chdir: 1.119 + pop ax 1.120 + pop dx 1.121 + push dx 1.122 + push ax 1.123 +chdir: 1.124 + stc 1.125 + mov ax, #0x713B 1.126 + int 0x21 1.127 + jnc chdireturn 1.128 + mov ah, #0x3B 1.129 + int 0x21 1.130 +chdireturn: 1.131 + sbb ax, ax 1.132 +#endasm 1.133 +}