wok annotate 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
rev   line source
pascal@13691 1 #include "libdos.h"
pascal@13691 2
pascal@13691 3 char *progname(void)
pascal@13691 4 {
pascal@13691 5 #asm
pascal@13691 6 .bss
pascal@13691 7 ._name lcomm 80
pascal@13691 8 .text
pascal@13691 9 push es
pascal@13691 10 seg cs
pascal@13691 11 mov es, [0x2C]
pascal@13691 12 mov cx, #-1
pascal@13691 13 xor di, di
pascal@13691 14 xor al, al
pascal@13691 15 loop1:
pascal@13691 16 repne
pascal@13691 17 scasb
pascal@13691 18 scasb
pascal@13691 19 jne loop1
pascal@13691 20 lea si, [di+2]
pascal@13691 21 push ds
pascal@13691 22 push ds
pascal@13691 23 push es
pascal@13691 24 pop ds
pascal@13691 25 pop es
pascal@13691 26 mov di, ._name
pascal@13691 27 push di
pascal@13691 28 loop2:
pascal@13691 29 lodsb
pascal@13691 30 stosb
pascal@13691 31 or al, al
pascal@13691 32 jnz loop2
pascal@13691 33 pop ax
pascal@13691 34 pop ds
pascal@13691 35 pop es
pascal@13691 36 #endasm
pascal@13691 37 }
pascal@13691 38
pascal@13691 39 #ifdef __SLEEP
pascal@13691 40 void sleep(int seconds)
pascal@13691 41 {
pascal@13691 42 unsigned long n;
pascal@13691 43
pascal@13691 44 n = (seconds * 182) / 10;
pascal@13691 45 #asm
pascal@13691 46 push es
pascal@13691 47 push #0
pascal@13691 48 pop es
pascal@13691 49 mov di, #0x46C
pascal@13691 50 sleeplp:
pascal@13691 51 mov cx, #0x8000
pascal@13691 52 or dx, dx
pascal@13691 53 jne siok
pascal@13691 54 mov cx, ax
pascal@13691 55 jcxz done
pascal@13691 56 siok:
pascal@13691 57 sub ax, cx
pascal@13691 58 sbb dx, #0
pascal@13691 59 seg es
pascal@13691 60 add cx, [di]
pascal@13691 61 zzz:
pascal@13691 62 seg es
pascal@13691 63 cmp cx, [di]
pascal@13691 64 jne zzz
pascal@13691 65 jmp sleeplp
pascal@13691 66 done:
pascal@13691 67 pop es
pascal@13691 68 #endasm
pascal@13691 69 }
pascal@13691 70 #endif
pascal@13691 71
pascal@13691 72 int chdirname(char *path)
pascal@13691 73 {
pascal@13691 74 #asm
pascal@13691 75 pop ax
pascal@13691 76 pop bx
pascal@13691 77 push bx
pascal@13691 78 push ax
pascal@13691 79 cmp byte ptr [bx+1], #0x3A
pascal@13691 80 jne nodisk
pascal@13691 81 mov dl, [bx]
pascal@13691 82 or dl, #0x20
pascal@13691 83 sub dl, #0x61
pascal@13691 84 mov ah, #0x0E
pascal@13691 85 push bx
pascal@13691 86 int 0x21
pascal@13691 87 pop bx
pascal@13691 88 inc bx
pascal@13691 89 inc bx
pascal@13691 90 nodisk:
pascal@13691 91 mov dx, bx
pascal@13691 92 xor cx, cx
pascal@13691 93 next:
pascal@13691 94 mov al, [bx]
pascal@13691 95 cmp al, #0x5C
pascal@13691 96 jne tsteos
pascal@13691 97 mov cx, bx
pascal@13691 98 tsteos:
pascal@13691 99 inc bx
pascal@13691 100 or al, al
pascal@13691 101 jnz next
pascal@13691 102 cbw
pascal@13691 103 jcxz quit
pascal@13691 104 mov bx, cx
pascal@13691 105 push [bx]
pascal@13691 106 mov [bx], al
pascal@13691 107 push bx
pascal@13691 108 call chdir
pascal@13691 109 pop bx
pascal@13691 110 pop [bx]
pascal@13691 111 quit:
pascal@13691 112 ret
pascal@13691 113
pascal@13691 114 // int chdir(char *path)
pascal@13691 115 _chdir:
pascal@13691 116 pop ax
pascal@13691 117 pop dx
pascal@13691 118 push dx
pascal@13691 119 push ax
pascal@13691 120 chdir:
pascal@13691 121 stc
pascal@13691 122 mov ax, #0x713B
pascal@13691 123 int 0x21
pascal@13691 124 jnc chdireturn
pascal@13691 125 mov ah, #0x3B
pascal@13691 126 int 0x21
pascal@13691 127 chdireturn:
pascal@13691 128 sbb ax, ax
pascal@13691 129 #endasm
pascal@13691 130 }