wok annotate syslinux/stuff/iso2exe/libdos.c @ rev 23824

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