wok annotate linld/stuff/src/CRTLX.ASM @ rev 19546

linld/tazboot: default conf in tazboot.cmd
author Pascal Bellard <pascal.bellard@slitaz.org>
date Tue Dec 06 18:49:44 2016 +0100 (2016-12-06)
parents 7f92b23984dc
children e428345df29a
rev   line source
pascal@19515 1 ;***************************************************************
pascal@19515 2 ;****** This file is distributed under GPL
pascal@19515 3 ;***************************************************************
pascal@19515 4 ideal
pascal@19515 5 %crefref
pascal@19515 6 %noincl
pascal@19515 7 %nomacs
pascal@19515 8 p386
pascal@19515 9
pascal@19515 10 group DGROUP _TEXT,_DATA,_BSS
pascal@19515 11 assume cs:DGROUP,ds:DGROUP
pascal@19515 12
pascal@19515 13 segment _DATA byte public use16 'DATA'
pascal@19546 14
pascal@19546 15 tazboot_cmd db "tazboot.cmd",0
pascal@19546 16
pascal@19515 17 ends _DATA
pascal@19515 18
pascal@19515 19 segment _BSS byte public use16 'BSS'
pascal@19515 20
pascal@19515 21 ultoabuf db 12 dup (?)
pascal@19515 22
pascal@19515 23 ends _BSS
pascal@19515 24
pascal@19515 25 segment _TEXT byte public use16 'CODE'
pascal@19515 26
pascal@19515 27 ;***************************************************************
pascal@19515 28 ;int strcmp(const char* a,const char* b);
pascal@19515 29 ;***************************************************************
pascal@19515 30 global _strcmp:near
pascal@19515 31 proc _strcmp near
pascal@19515 32
pascal@19538 33 pop ax ;caller return address
pascal@19538 34 pop cx ; a
pascal@19538 35 pop bx ; b
pascal@19538 36 push bx
pascal@19538 37 push cx
pascal@19538 38 push ax
pascal@19538 39 push si
pascal@19538 40 mov si,cx
pascal@19538 41 sub bx,si
pascal@19538 42 @@lp:
pascal@19538 43 mov al,[bx+si]
pascal@19538 44 sub al,[si]
pascal@19538 45 jnz @@out
pascal@19538 46 lodsb
pascal@19538 47 cmp al,0
pascal@19538 48 jne @@lp
pascal@19538 49 @@out:
pascal@19538 50 cbw
pascal@19538 51 pop si
pascal@19538 52 ret
pascal@19515 53
pascal@19515 54 endp _strcmp
pascal@19515 55
pascal@19515 56
pascal@19515 57 ;***************************************************************
pascal@19515 58 ;char strstr(const char* a,const char* b);
pascal@19515 59 ;***************************************************************
pascal@19515 60 global _strstr:near
pascal@19515 61 proc _strstr near
pascal@19515 62
pascal@19515 63 pop ax ;caller return address
pascal@19538 64 pop cx ; a
pascal@19515 65 pop dx ; b
pascal@19515 66 push dx
pascal@19538 67 push cx
pascal@19515 68 push ax
pascal@19538 69 push si
pascal@19515 70 @@loop:
pascal@19515 71 xor ax,ax
pascal@19538 72 mov si,cx
pascal@19538 73 cmp [si],al ; *a
pascal@19538 74 jz @@end ; return ax = NULL
pascal@19538 75 mov bx,dx
pascal@19538 76 sub bx,si
pascal@19515 77 @@match:
pascal@19538 78 or ah,[bx+si] ; *b
pascal@19515 79 jz @@found
pascal@19538 80 lodsb
pascal@19538 81 sub ah,al
pascal@19538 82 jz @@match
pascal@19538 83 inc cx
pascal@19538 84 jmp @@loop
pascal@19515 85 @@found:
pascal@19515 86 xchg ax,cx
pascal@19515 87 @@end:
pascal@19538 88 pop si
pascal@19515 89 ret
pascal@19515 90
pascal@19515 91 endp _strstr
pascal@19515 92
pascal@19515 93
pascal@19515 94 ;***************************************************************
pascal@19515 95 ;int cpuhaslm(void)
pascal@19515 96 ;***************************************************************
pascal@19515 97 global _cpuhaslm:near
pascal@19515 98 proc _cpuhaslm near
pascal@19515 99
pascal@19515 100 pushf
pascal@19515 101 ; Check for oldies
pascal@19546 102 mov bh, 0F0h
pascal@19546 103 push bx ; < 286 : flags[12..15] are forced 1
pascal@19515 104 popf ; = 286 : flags[12..15] are forced 0
pascal@19515 105 pushf ; > 286 : only flags[15] is forced 0
pascal@19515 106 pop dx
pascal@19515 107 popf
pascal@19546 108 add dh,bh ; NS=386+, NC=286
pascal@19515 109 clc
pascal@19515 110 js @@bad ;it is a 86/186/286, not a 386+
pascal@19515 111 pushfd
pascal@19515 112 pushfd
pascal@19515 113 pop ebx
pascal@19515 114 mov ecx,ebx
pascal@19515 115 xor ebx,00100000h ; toggle CPUID feature bit 21
pascal@19515 116 push ebx
pascal@19515 117 popfd
pascal@19515 118 pushfd
pascal@19515 119 pop ebx
pascal@19515 120 popfd
pascal@19515 121 xor ebx,ecx
pascal@19515 122 shr ebx,1+21 ; CPUID feature bit ?
pascal@19515 123 jnc @@bad
pascal@19515 124 mov eax,80000001h ; Extended Processor Info and Feature Bits
pascal@19515 125 db 0Fh,0A2h ; cpuid
pascal@19515 126 shr edx,1+29 ; LM feature bit ?
pascal@19515 127 @@bad:
pascal@19515 128 sbb ax,ax
pascal@19515 129 ret
pascal@19515 130
pascal@19515 131 endp _cpuhaslm
pascal@19515 132
pascal@19515 133
pascal@19515 134 ;***************************************************************
pascal@19515 135 ;char *progname(void)
pascal@19515 136 ;***************************************************************
pascal@19515 137 global _progname:near
pascal@19515 138 proc _progname near
pascal@19515 139
pascal@19515 140 push si di es
pascal@19515 141 mov ah,30h
pascal@19515 142 int 21h
pascal@19515 143 cmp al,3
pascal@19515 144 mov ax,0
pascal@19515 145 jb @@skip
pascal@19515 146 mov es,[cs:2Ch]
pascal@19515 147 mov cx,-1
pascal@19515 148 xor di,di
pascal@19515 149 xor al,al
pascal@19515 150 @@loop1:
pascal@19515 151 repne
pascal@19515 152 scasb
pascal@19515 153 scasb
pascal@19515 154 jne @@loop1
pascal@19515 155 lea si,[di+2]
pascal@19515 156 mov bx, si
pascal@19515 157 extrn strlen:near
pascal@19515 158 call near strlen
pascal@19515 159 xchg ax,cx
pascal@19515 160 inc cx
pascal@19515 161 extrn malloc_or_die:near
pascal@19515 162 call near malloc_or_die
pascal@19515 163 xchg ax,di
pascal@19515 164 push ds
pascal@19515 165 push ds
pascal@19515 166 push es
pascal@19515 167 pop ds
pascal@19515 168 pop es
pascal@19515 169 push di
pascal@19515 170 @@loop2:
pascal@19515 171 lodsb
pascal@19515 172 stosb
pascal@19515 173 or al,al
pascal@19515 174 jnz @@loop2
pascal@19515 175 pop ax
pascal@19515 176 pop ds
pascal@19515 177 @@skip:
pascal@19515 178 pop es di si
pascal@19515 179 ret
pascal@19515 180
pascal@19515 181 endp _progname
pascal@19515 182
pascal@19515 183
pascal@19515 184 ;***************************************************************
pascal@19515 185 ;int chdir(char *path);
pascal@19515 186 ;***************************************************************
pascal@19515 187 global _chdir:near
pascal@19515 188 proc _chdir near
pascal@19515 189
pascal@19515 190 pop ax
pascal@19515 191 pop dx
pascal@19515 192 push dx
pascal@19515 193 push ax
pascal@19515 194 chdir:
pascal@19515 195 stc
pascal@19515 196 mov ax,713Bh
pascal@19515 197 int 21h
pascal@19515 198 jnc @@end
pascal@19515 199 mov ah,3Bh
pascal@19515 200 int 21h
pascal@19515 201 @@end:
pascal@19515 202 sbb ax,ax
pascal@19515 203 ret
pascal@19515 204
pascal@19515 205 endp _chdir
pascal@19515 206
pascal@19515 207
pascal@19515 208 ;***************************************************************
pascal@19515 209 ;int chdirname(char *path)
pascal@19515 210 ;***************************************************************
pascal@19515 211 global _chdirname:near
pascal@19515 212 proc _chdirname near
pascal@19515 213
pascal@19515 214 pop ax
pascal@19515 215 pop bx
pascal@19515 216 push bx
pascal@19515 217 push ax
pascal@19515 218
pascal@19515 219 cmp [byte bx+1],3Ah
pascal@19515 220 jne @@nodisk
pascal@19515 221 mov dl,[bx]
pascal@19515 222 or dl,20h
pascal@19515 223 sub dl,61h
pascal@19515 224 mov ah,0Eh
pascal@19515 225 push bx
pascal@19515 226 int 21h
pascal@19515 227 pop bx
pascal@19515 228 inc bx
pascal@19515 229 inc bx
pascal@19515 230 @@nodisk:
pascal@19515 231 mov dx,bx
pascal@19515 232 xor cx,cx
pascal@19515 233 @@next:
pascal@19515 234 mov al,[bx]
pascal@19515 235 cmp al,5Ch
pascal@19515 236 jne @@tsteos
pascal@19515 237 mov cx,bx
pascal@19515 238 @@tsteos:
pascal@19515 239 inc bx
pascal@19515 240 or al,al
pascal@19515 241 jnz @@next
pascal@19515 242 cbw
pascal@19515 243 jcxz @@end
pascal@19515 244 mov bx,cx
pascal@19515 245 push [word bx]
pascal@19515 246 mov [bx],al
pascal@19515 247 push bx
pascal@19515 248 call chdir
pascal@19515 249 pop bx
pascal@19515 250 pop [word bx]
pascal@19515 251 @@end:
pascal@19515 252 ret
pascal@19515 253
pascal@19515 254 endp _chdirname
pascal@19515 255
pascal@19515 256
pascal@19515 257 ;***************************************************************
pascal@19515 258 ;char *ultoa(unsigned long n);
pascal@19515 259 ;***************************************************************
pascal@19515 260 global _ultoa:near
pascal@19515 261 proc _ultoa near
pascal@19515 262
pascal@19515 263 pop ax
pascal@19515 264 pop cx
pascal@19515 265 pop dx
pascal@19515 266 push dx
pascal@19515 267 push cx
pascal@19515 268 push ax ; DX:CX = n
pascal@19515 269 push si
pascal@19515 270 mov si,10
pascal@19515 271 mov bx,offset ultoabuf+11
pascal@19515 272 @@loop:
pascal@19515 273 dec bx
pascal@19515 274 xchg ax,dx
pascal@19515 275 xor dx,dx
pascal@19515 276 div si ; DX:AX = 0000:hi(n)
pascal@19515 277 xchg ax,cx ; CX = hi(n)/10
pascal@19515 278 div si ; DX:AX = hi(n)%10:lo(n)
pascal@19515 279 xchg ax,cx ; CX = lo(n/10)
pascal@19515 280 xchg ax,dx ; DX = hi(n)/10 = hi(n/10)
pascal@19515 281 add al,'0'
pascal@19515 282 mov [bx],al
pascal@19515 283 mov ax,cx
pascal@19515 284 or ax,dx
pascal@19515 285 jnz @@loop
pascal@19515 286 xchg ax,bx
pascal@19515 287 pop si
pascal@19515 288 ret
pascal@19515 289
pascal@19515 290 endp _ultoa
pascal@19515 291
pascal@19515 292
pascal@19515 293 ;***************************************************************
pascal@19515 294 ;unsigned long kver2ul(char *kernel_version);
pascal@19515 295 ;***************************************************************
pascal@19515 296 global _kver2ul:near
pascal@19515 297 proc _kver2ul near
pascal@19515 298
pascal@19515 299 pop ax
pascal@19515 300 pop dx
pascal@19515 301 push dx
pascal@19515 302 push ax
pascal@19515 303 push bp si di
pascal@19515 304 xor di,di
pascal@19515 305 push di
pascal@19515 306 push di
pascal@19515 307 mov bp,sp
pascal@19515 308 mov si,dx
pascal@19515 309 inc di
pascal@19515 310 inc di
pascal@19515 311 mov cl,4
pascal@19515 312 @@number:
pascal@19515 313 xor ax,ax
pascal@19515 314 @@digit:
pascal@19515 315 shl al,cl
pascal@19515 316 shl ax,cl
pascal@19515 317 lodsb
pascal@19515 318 sub al,30h
pascal@19515 319 cmp al,9
pascal@19515 320 jbe @@digit
pascal@19515 321 mov [bp+di],ah
pascal@19515 322 dec di
pascal@19515 323 jns @@number
pascal@19515 324 pop ax
pascal@19515 325 pop dx
pascal@19515 326 pop di si bp
pascal@19546 327 kver2ulret:
pascal@19515 328 ret
pascal@19515 329
pascal@19515 330 endp _kver2ul
pascal@19515 331
pascal@19546 332
pascal@19546 333 ;***************************************************************
pascal@19546 334 ;void try_default_args();
pascal@19546 335 ;***************************************************************
pascal@19546 336 global _try_default_args:near
pascal@19546 337 proc _try_default_args near
pascal@19546 338
pascal@19546 339 mov bx,offset tazboot_cmd
pascal@19546 340 extrn open:near
pascal@19546 341 call near open
pascal@19546 342 jc kver2ulret
pascal@19546 343 mov cx,4096
pascal@19546 344 extrn _heap_top:word
pascal@19546 345 mov di,[_heap_top]
pascal@19546 346 push cx
pascal@19546 347 extrn read_cmdline:near
pascal@19546 348 jmp near read_cmdline ; read_cmdline(ax,di,cx)
pascal@19546 349
pascal@19546 350 endp _try_default_args
pascal@19546 351
pascal@19515 352 ends _TEXT
pascal@19515 353
pascal@19515 354 end
pascal@19515 355
pascal@19515 356 ;###### END OF FILE ############################################