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 +}