wok-current rev 20528
linld: pascal convention calls
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Fri Nov 09 16:37:55 2018 +0100 (2018-11-09) |
parents | 17c0ad41f5bf |
children | 1e49fb3e5dd0 |
files | linld/stuff/src/COMMON.H linld/stuff/src/CRTL.ASM linld/stuff/src/CRTL.H linld/stuff/src/CRTLX.H linld/stuff/src/HIMEM.CPP linld/stuff/src/ISO9660.CPP linld/stuff/src/ISO9660.H linld/stuff/src/JUMP.ASM linld/stuff/src/LINLD.CPP linld/stuff/src/LOAD.CPP linld/stuff/src/MEMCPY32.ASM linld/stuff/src/MEMTOP.ASM linld/stuff/src/TAZBOOT.CPP linld/stuff/src/XMM.ASM linld/stuff/src/_BEG.ASM linld/stuff/src/pipehole.awk |
line diff
1.1 --- a/linld/stuff/src/COMMON.H Thu Nov 08 23:37:09 2018 +0100 1.2 +++ b/linld/stuff/src/COMMON.H Fri Nov 09 16:37:55 2018 +0100 1.3 @@ -56,10 +56,10 @@ 1.4 extern int skip_alloc; 1.5 extern u32 base_himem; 1.6 1.7 -extern "C" void memcpy_image(struct image_himem *m); 1.8 -extern "C" void storepage(u32 *dst, u16 src); 1.9 +extern pascal void memcpy_image(struct image_himem *m); 1.10 +extern pascal void storepage(u32 *dst, u16 src); 1.11 #ifdef LARGE_IMAGES 1.12 -extern "C" void reset_bufv(unsigned long *p); 1.13 +extern pascal void reset_bufv(unsigned long *p); 1.14 extern "C" unsigned long* prev_bufv(); 1.15 extern "C" unsigned long* next_bufv(); 1.16 #define next(p) p = next_bufv() 1.17 @@ -73,10 +73,10 @@ 1.18 extern const char* kernel_name; 1.19 extern const char* initrd_name; 1.20 extern const char* cmdline; 1.21 -extern u16 root_dev; 1.22 -extern u16 vid_mode; 1.23 +extern u32 root_dev; 1.24 +extern u32 vid_mode; 1.25 // External asm helpers 1.26 -extern "C" void xmm_alloc(struct image_himem *m); 1.27 +extern pascal void xmm_alloc(struct image_himem *m); 1.28 extern u32 topmem; 1.29 extern "C" u32 memtop(); 1.30 extern "C" void enable_a20_or_die(); 1.31 @@ -89,8 +89,8 @@ 1.32 #endif 1.33 1.34 void load_image(struct image_himem *m); 1.35 -extern "C" void open_image(const char *name, struct image_himem *m); 1.36 -extern "C" int read_image(struct image_himem *m, void* data, int sz); 1.37 +extern pascal void open_image(const char *name, struct image_himem *m); 1.38 +extern pascal int read_image(struct image_himem *m, void* data, int sz); 1.39 char* load_kernel(); 1.40 void load_initrd(); 1.41 extern "C" void boot_kernel();
2.1 --- a/linld/stuff/src/CRTL.ASM Thu Nov 08 23:37:09 2018 +0100 2.2 +++ b/linld/stuff/src/CRTL.ASM Fri Nov 09 16:37:55 2018 +0100 2.3 @@ -47,29 +47,27 @@ 2.4 segment _TEXT byte public use16 'CODE' 2.5 2.6 ;*************************************************************** 2.7 -;char* strcpy(const char* a, const char* b); 2.8 -;char* strcat(const char* a, const char* b); 2.9 -;char* strcatb(const char* a, const char* b); 2.10 +;pascal void strcpy(const char* a, const char* b); 2.11 +;pascal void strcat(const char* a, const char* b); 2.12 +;pascal void strcatb(const char* a, const char* b); 2.13 ;*************************************************************** 2.14 - global _strcatb:near 2.15 - proc _strcatb near 2.16 + global @strcatb$qpxzct1:near 2.17 + proc @strcatb$qpxzct1 near 2.18 2.19 ifdef EXTRA 2.20 mov cl,7Fh 2.21 db 0bbh ; mov bx,imm opcode 2.22 - global _strcat:near 2.23 -_strcat: 2.24 + global @strcat$qpxzct1:near 2.25 +@strcat$qpxzct1: 2.26 mov cl,80h 2.27 db 0bbh ; mov bx,imm opcode 2.28 - global _strcpy:near 2.29 -_strcpy: 2.30 + global @strcpy$qpxzct1:near 2.31 +@strcpy$qpxzct1: 2.32 xor cx,cx 2.33 endif 2.34 pop ax ;caller return address 2.35 + pop bx ; b 2.36 pop dx ; a 2.37 - pop bx ; b 2.38 - push bx 2.39 - push dx 2.40 push ax 2.41 push si 2.42 mov si,dx 2.43 @@ -102,22 +100,20 @@ 2.44 pop si 2.45 ret 2.46 2.47 - endp _strcatb 2.48 + endp @strcatb$qpxzct1 2.49 2.50 2.51 ifdef EXTRA 2.52 p8086 2.53 ;*************************************************************** 2.54 -;char strstr(const char* a,const char* b); 2.55 +;pascal char strstr(const char* a,const char* b); 2.56 ;*************************************************************** 2.57 - global _strstr:near 2.58 - proc _strstr near 2.59 + global @strstr$qpxzct1:near 2.60 + proc @strstr$qpxzct1 near 2.61 2.62 pop ax ;caller return address 2.63 + pop cx ; b 2.64 pop dx ; a 2.65 - pop cx ; b 2.66 - push cx 2.67 - push dx 2.68 push ax 2.69 push si 2.70 @@loop: 2.71 @@ -136,20 +132,18 @@ 2.72 inc dx 2.73 jmp @@loop 2.74 2.75 - endp _strstr 2.76 + endp @strstr$qpxzct1 2.77 2.78 2.79 ;*************************************************************** 2.80 -;int strcmp(const char* a,const char* b); 2.81 +;pascal int strcmp(const char* a,const char* b); 2.82 ;*************************************************************** 2.83 - global _strcmp:near 2.84 - proc _strcmp near 2.85 + global @strcmp$qpxzct1:near 2.86 + proc @strcmp$qpxzct1 near 2.87 2.88 pop cx ;caller return address 2.89 + pop ax ; b 2.90 pop bx ; a 2.91 - pop ax ; b 2.92 - push ax 2.93 - push bx 2.94 push cx 2.95 push si 2.96 xchg ax,si 2.97 @@ -166,19 +160,18 @@ 2.98 pop si 2.99 ret 2.100 2.101 - endp _strcmp 2.102 + endp @strcmp$qpxzct1 2.103 endif 2.104 2.105 2.106 ;*************************************************************** 2.107 -;void puts(const char* s): 2.108 +;pascal void puts(const char* s): 2.109 ;*************************************************************** 2.110 - global _puts:near 2.111 - proc _puts near 2.112 + global @puts$qpxzc:near 2.113 + proc @puts$qpxzc near 2.114 2.115 pop ax ;caller return address 2.116 pop bx ; s 2.117 - push bx 2.118 push ax 2.119 ; global puts:near ; puts(bx) 2.120 puts: 2.121 @@ -195,36 +188,34 @@ 2.122 jne @@putcz ; ZF=1 (for malloc failure) 2.123 ret 2.124 2.125 - endp _puts 2.126 + endp @puts$qpxzc 2.127 2.128 2.129 ;*************************************************************** 2.130 -;int fileattr(const char* name); 2.131 +;pascal int fileattr(const char* name); 2.132 ;*************************************************************** 2.133 - global _fileattr:near 2.134 - proc _fileattr near 2.135 + global @fileattr$qpxzc:near 2.136 + proc @fileattr$qpxzc near 2.137 2.138 pop ax ;caller return address 2.139 pop dx ; name 2.140 - push dx 2.141 push ax 2.142 mov ax,4300h 2.143 int 21h 2.144 xchg ax,cx 2.145 jmp chkc 2.146 2.147 - endp _fileattr 2.148 + endp @fileattr$qpxzc 2.149 2.150 2.151 ;*************************************************************** 2.152 -;int open(const char* name, int flags=O_RDONLY); 2.153 +;pascal int open(const char* name, int flags=O_RDONLY); 2.154 ;*************************************************************** 2.155 - global _open:near 2.156 - proc _open near 2.157 + global @open$qpxzc:near 2.158 + proc @open$qpxzc near 2.159 2.160 pop ax ;caller return address 2.161 pop bx ; name 2.162 - push bx 2.163 push ax 2.164 global open:near ; open(bx) 2.165 open: 2.166 @@ -246,18 +237,25 @@ 2.167 endif 2.168 ret 2.169 2.170 - endp _open 2.171 + global openargs:near ; openargs(bx) 2.172 +openargs: 2.173 + cmp [byte bx],'@' 2.174 + stc 2.175 + jne fail 2.176 + inc bx 2.177 + jmp open 2.178 + 2.179 + endp @open$qpxzc 2.180 2.181 2.182 ;*************************************************************** 2.183 -;int close(int fd); 2.184 +;pascal int close(int fd); 2.185 ;*************************************************************** 2.186 - global _close:near 2.187 - proc _close near 2.188 + global @close$qi:near 2.189 + proc @close$qi near 2.190 2.191 pop ax ;caller return address 2.192 pop bx ; fd 2.193 - push bx 2.194 push ax 2.195 global close:near ; close(bx) 2.196 close: 2.197 @@ -266,56 +264,53 @@ 2.198 jnz dos 2.199 ret 2.200 2.201 - endp _close 2.202 + endp @close$qi 2.203 2.204 2.205 ;*************************************************************** 2.206 -;int read(int fd, void* data, int sz); 2.207 -;int write(int fd, const void* data, int sz); 2.208 +;pascal int read(int fd, void* data, int sz); 2.209 +;pascal int write(int fd, const void* data, int sz); 2.210 ;*************************************************************** 2.211 - global _read:near 2.212 - proc _read near 2.213 + global @read$qipvi:near 2.214 + proc @read$qipvi near 2.215 2.216 ifdef WRITE 2.217 stc 2.218 db 0B0h ; mov al,im 2.219 - global _write:near 2.220 + global @write$qipvi:near 2.221 +@write$qipvi: 2.222 clc 2.223 endif 2.224 pop ax ;caller return address 2.225 + pop cx ; sz 2.226 + pop dx ; data 2.227 pop bx ; fd 2.228 - pop dx ; data 2.229 - pop cx ; sz 2.230 - push cx 2.231 - push dx 2.232 - push bx 2.233 push ax 2.234 ifdef WRITE 2.235 mov ah,40h 2.236 sbb ah,0 2.237 else 2.238 + global @read$cxdxbx:near 2.239 +@read$cxdxbx: 2.240 mov ah,3Fh 2.241 endif 2.242 jcxz fail 2.243 jmp dos 2.244 2.245 - endp _read 2.246 + endp @read$qipvi 2.247 2.248 - proc _lseekset near 2.249 ;ifdef EXTRA 2.250 ;*************************************************************** 2.251 -;long lseekset(int fd, unsigned long sz); 2.252 +;pascal long lseekset(int fd, unsigned long sz); 2.253 ;*************************************************************** 2.254 2.255 - global _lseekset:near 2.256 + global @lseekset$qiul:near 2.257 + proc @lseekset$qiul near 2.258 2.259 pop ax ;caller return address 2.260 - pop bx ; fd 2.261 pop dx ; sz lo 2.262 pop cx ; sz hi 2.263 - push cx 2.264 - push dx 2.265 - push bx 2.266 + pop bx ; fd 2.267 push ax 2.268 ;endif 2.269 ; global lseekset:near 2.270 @@ -332,7 +327,7 @@ 2.271 xor cx,cx 2.272 jmp dos 2.273 2.274 - endp _lseekset 2.275 + endp @lseekset$qiul 2.276 2.277 ifdef EXTRA 2.278 struc isostate ; struct isostate { 2.279 @@ -348,36 +343,36 @@ 2.280 curpos dd ? ;28 unsigned long curpos; 2.281 ends ; } isostate; 2.282 ;*************************************************************** 2.283 -;unsigned long isolseek(const unsigned long *offset); 2.284 +;pascal int isolseek(const unsigned long *offset); 2.285 ;*************************************************************** 2.286 - global _isolseek:near 2.287 - proc _isolseek near 2.288 + global @isolseek$qpxul:near 2.289 + proc @isolseek$qpxul near 2.290 2.291 pop ax 2.292 pop bx 2.293 - push bx 2.294 push ax 2.295 mov dx,[bx] 2.296 mov cx,[bx+2] 2.297 extrn _isostate:isostate 2.298 mov bx,[_isostate.fd] 2.299 - jmp lseekset ; (bx=fd, sz=cx:dx) 2.300 + call lseekset ; (bx=fd, sz=cx:dx) 2.301 + and ax,dx 2.302 + inc ax 2.303 + ret 2.304 2.305 - endp _isolseek 2.306 + endp @isolseek$qpxul 2.307 endif 2.308 2.309 2.310 ;*************************************************************** 2.311 -;int strhead(const char* a,const char* b); 2.312 +;pascal int strhead(const char* a,const char* b); 2.313 ;*************************************************************** 2.314 - global _strhead:near 2.315 - proc _strhead near 2.316 + global @strhead$qpxzct1:near 2.317 + proc @strhead$qpxzct1 near 2.318 2.319 pop cx ;caller return address 2.320 + pop ax ; b 2.321 pop bx ; a 2.322 - pop ax ; b 2.323 - push ax 2.324 - push bx 2.325 push cx 2.326 @@loop: 2.327 xchg ax,bx 2.328 @@ -392,18 +387,17 @@ 2.329 jz @@loop 2.330 ret ; return b (is not 0) 2.331 2.332 - endp _strhead 2.333 + endp @strhead$qpxzct1 2.334 2.335 2.336 ;*************************************************************** 2.337 -;char* malloc_or_die(unsigned size); 2.338 +;pascal char* malloc_or_die(unsigned size); 2.339 ;*************************************************************** 2.340 - global _malloc_or_die:near 2.341 - proc _malloc_or_die near 2.342 + global @malloc_or_die$qui:near 2.343 + proc @malloc_or_die$qui near 2.344 2.345 pop ax ;caller return address 2.346 pop cx ; size 2.347 - push cx 2.348 push ax 2.349 global malloc_or_die:near ; malloc_or_die(cx) 2.350 malloc_or_die: 2.351 @@ -417,20 +411,19 @@ 2.352 add [_heap_top],cx ; _BEG has zero'd heap 2.353 ret 2.354 2.355 - endp _malloc_or_die 2.356 + endp @malloc_or_die$qui 2.357 2.358 2.359 ;*************************************************************** 2.360 -;int die(const char* msg); 2.361 +;pascal int die(const char* msg); 2.362 ;int exit(); 2.363 ;int abort(); 2.364 ;*************************************************************** 2.365 - global _die:near 2.366 - proc _die near 2.367 - 2.368 + global @die$qpxzc:near 2.369 + proc @die$qpxzc near 2.370 +@die$qpxzc: 2.371 pop ax ;caller return address 2.372 pop bx ; s 2.373 - ;push bx 2.374 ;push ax 2.375 global die:near ; die(bx) 2.376 die: 2.377 @@ -453,7 +446,7 @@ 2.378 hlt 2.379 jmp @@stop 2.380 2.381 - endp _die 2.382 + endp @die$qpxzc 2.383 2.384 struc image_himem ;struct image_himem { 2.385 fd dw ? ; 0 int fd; 2.386 @@ -546,15 +539,14 @@ 2.387 endif 2.388 2.389 ;*************************************************************** 2.390 -;u32* malloc_bufv_or_die(struct image_himem *m); 2.391 +;pascal u32* malloc_bufv_or_die(struct image_himem *m); 2.392 ;*************************************************************** 2.393 - global _malloc_bufv_or_die:near 2.394 - proc _malloc_bufv_or_die near 2.395 + global @malloc_bufv_or_die$qp11image_himem:near 2.396 + proc @malloc_bufv_or_die$qp11image_himem near 2.397 2.398 p386 2.399 pop bx ;caller return address 2.400 pop ax 2.401 - push ax 2.402 push bx 2.403 push si 2.404 xchg ax,si 2.405 @@ -666,18 +658,17 @@ 2.406 p8086 2.407 endif 2.408 2.409 - endp _malloc_bufv_or_die 2.410 + endp @malloc_bufv_or_die$qp11image_himem 2.411 2.412 2.413 ;*************************************************************** 2.414 -; void memcpy_image(struct image_himem *m); 2.415 +;pascal void memcpy_image(struct image_himem *m); 2.416 ;*************************************************************** 2.417 - global _memcpy_image:near 2.418 - proc _memcpy_image near 2.419 + global @memcpy_image$qp11image_himem:near 2.420 + proc @memcpy_image$qp11image_himem near 2.421 2.422 pop ax ;caller return address 2.423 pop bx 2.424 - push bx 2.425 push ax 2.426 ifndef NO386 2.427 mov edx,[(image_himem bx).fallback] 2.428 @@ -727,25 +718,22 @@ 2.429 endif 2.430 endif 2.431 @@memcpy: 2.432 - extrn _memcpy32:near 2.433 - call near _memcpy32 2.434 - add sp,14 2.435 + extrn memcpy32:near 2.436 + call near memcpy32 2.437 @@skip: 2.438 ret 2.439 2.440 - endp _memcpy_image 2.441 + endp @memcpy_image$qp11image_himem 2.442 2.443 ;*************************************************************** 2.444 -;void storepage(u32 *dst, u16 src); 2.445 +;pascal void storepage(u32 *dst, u16 src); 2.446 ;*************************************************************** 2.447 - global _storepage:near 2.448 - proc _storepage near 2.449 + global @storepage$qpulus:near 2.450 + proc @storepage$qpulus near 2.451 2.452 pop ax ;caller return address 2.453 + pop cx 2.454 pop bx 2.455 - pop cx 2.456 - push cx 2.457 - push bx 2.458 push ax 2.459 ifndef NO386 2.460 mov edx,[bx] 2.461 @@ -770,26 +758,25 @@ 2.462 push ds 2.463 jmp call_memcpy32 2.464 2.465 - endp _storepage 2.466 + endp @storepage$qpulus 2.467 2.468 2.469 ifdef LARGE_IMAGES 2.470 p386 2.471 ;*************************************************************** 2.472 -;void reset_bufv(u32 *p); 2.473 +;pascal void reset_bufv(u32 *p); 2.474 ;*************************************************************** 2.475 - global _reset_bufv:near 2.476 - proc _reset_bufv near 2.477 + global @reset_bufv$qpul:near 2.478 + proc @reset_bufv$qpul near 2.479 2.480 pop ax ;caller return address 2.481 pop bx 2.482 - push bx 2.483 push ax 2.484 mov [curdata],bx 2.485 and [dword (data_himem bx).cacheidx],0 2.486 ret 2.487 2.488 - endp _reset_bufv 2.489 + endp @reset_bufv$qpul 2.490 2.491 ;*************************************************************** 2.492 ;u32* prev_bufv(); 2.493 @@ -803,12 +790,12 @@ 2.494 db 73h ; jnc 2.495 _next_bufv: 2.496 clc 2.497 + push si 2.498 + mov si,[curdata] 2.499 sbb ax,ax 2.500 cmc 2.501 adc ax,[(data_himem si).cacheidx] ; -1/+1 2.502 xor ecx,ecx 2.503 - push si 2.504 - mov si,[curdata] 2.505 test ax,0fc00h 2.506 jz @@gotpage 2.507 push ax ; FFFF / 0400 2.508 @@ -854,16 +841,14 @@ 2.509 endif 2.510 2.511 ;*************************************************************** 2.512 -;void open_image(const char *name, struct image_himem *m); 2.513 +;pascal void open_image(const char *name, struct image_himem *m); 2.514 ;*************************************************************** 2.515 - global _open_image:near 2.516 - proc _open_image near 2.517 + global @open_image$qpxzcp11image_himem:near 2.518 + proc @open_image$qpxzcp11image_himem near 2.519 2.520 pop cx ;caller return address 2.521 + pop ax ; m 2.522 pop bx ; name 2.523 - pop ax ; m 2.524 - push ax 2.525 - push bx 2.526 push cx 2.527 push di 2.528 xchg ax,di 2.529 @@ -891,37 +876,34 @@ 2.530 pop di 2.531 ret 2.532 2.533 - endp _open_image 2.534 + endp @open_image$qpxzcp11image_himem 2.535 2.536 2.537 ;*************************************************************** 2.538 -;int read_image(struct image_himem *m, char* data, int sz); 2.539 +;pascal int read_image(struct image_himem *m, char* data, int sz); 2.540 ;*************************************************************** 2.541 - global _read_image:near 2.542 - proc _read_image near 2.543 + global @read_image$qp11image_himempvi:near 2.544 + proc @read_image$qp11image_himempvi near 2.545 2.546 - arg m :word, \ 2.547 + arg sz :word, \ 2.548 data :word, \ 2.549 - sz :word = PARAM_SIZE 2.550 + m :word = PARAM_SIZE 2.551 2.552 push bp 2.553 mov bp,sp 2.554 - push di 2.555 - ifndef NO386 2.556 - push 0 ; return value 2.557 - else 2.558 - xor ax,ax 2.559 - push ax 2.560 - endif 2.561 + push si di 2.562 mov di,[m] 2.563 + mov si,[data] 2.564 + mov bp,[sz] 2.565 + push bp ; original size 2.566 @@loop: 2.567 ifndef NO386 2.568 - movzx ecx,[word sz] 2.569 + movzx ecx,bp 2.570 mov eax,[(image_himem di).chunk_size] 2.571 cmp ecx,eax 2.572 jb @@szok 2.573 else 2.574 - mov cx,[word sz] 2.575 + mov cx,bp 2.576 mov ax,[word (image_himem di).chunk_size] 2.577 cmp cx,ax 2.578 jb @@szok 2.579 @@ -931,15 +913,11 @@ 2.580 xchg ax,cx 2.581 @@szok: 2.582 jcxz image_done 2.583 - push cx 2.584 - push [word data] 2.585 - push [word di] 2.586 - call _read 2.587 - pop dx 2.588 - pop bx 2.589 - pop cx 2.590 + mov dx,si 2.591 + mov bx,[word di] 2.592 + call @read$cxdxbx 2.593 jc image_done 2.594 - add bx,ax 2.595 + add si,ax 2.596 xor cx,cx 2.597 ifndef NO386 2.598 cwde ; ax < 8000h 2.599 @@ -952,12 +930,12 @@ 2.600 cmp [word (image_himem di).chunk_size],dx 2.601 endif 2.602 jnz @@fill 2.603 - dec cx 2.604 + inc cx 2.605 @@fill: 2.606 test al,3 2.607 je @@filled 2.608 - mov [bx],dh 2.609 - inc bx 2.610 + mov [si],ch 2.611 + inc si 2.612 inc ax 2.613 jmp @@fill 2.614 @@filled: 2.615 @@ -967,9 +945,7 @@ 2.616 sub [word (image_himem di).remaining],ax 2.617 sbb [word ((image_himem di).remaining)+2],dx 2.618 endif 2.619 - add [bp-2-2],ax 2.620 - add [word data],ax 2.621 - sub [word sz],ax 2.622 + sub bp,ax 2.623 pushf 2.624 jcxz @@same_chunk 2.625 call [(image_himem di).next_chunk] 2.626 @@ -977,24 +953,24 @@ 2.627 popf 2.628 jnz @@loop 2.629 image_done: 2.630 - pop ax 2.631 - pop di bp 2.632 - ret 2.633 + pop ax ; original size 2.634 + sub ax,bp 2.635 + pop di si bp 2.636 + ret 6 2.637 2.638 - endp _read_image 2.639 + endp @read_image$qp11image_himempvi 2.640 2.641 2.642 ;*************************************************************** 2.643 -;unsigned long strtol(const char *s); 2.644 +;pascal unsigned long strtol(const char *s); 2.645 ;*************************************************************** 2.646 - global _strtol:near 2.647 - proc _strtol near 2.648 + global @strtol$qpxzc:near 2.649 + proc @strtol$qpxzc near 2.650 2.651 - ifndef NO386 2.652 pop ax ;caller return address 2.653 pop cx ; s 2.654 - push cx 2.655 push ax 2.656 + ifndef NO386 2.657 xor ebx,ebx 2.658 push si 2.659 jcxz @@end 2.660 @@ -1080,10 +1056,6 @@ 2.661 @@popsiret: 2.662 pop si 2.663 else 2.664 - pop ax ;caller return address 2.665 - pop cx ; s 2.666 - push cx 2.667 - push ax 2.668 push si 2.669 push di 2.670 xor ax,ax 2.671 @@ -1189,9 +1161,10 @@ 2.672 pop di 2.673 pop si 2.674 endif 2.675 +strtol_ret: 2.676 ret 2.677 2.678 - endp _strtol 2.679 + endp @strtol$qpxzc 2.680 2.681 2.682 ifdef NO386 2.683 @@ -1262,14 +1235,13 @@ 2.684 2.685 2.686 ;*************************************************************** 2.687 -;void chdirname(char *path) 2.688 +;pascal void chdirname(char *path) 2.689 ;*************************************************************** 2.690 - global _chdirname:near 2.691 - proc _chdirname near 2.692 + global @chdirname$qpzc:near 2.693 + proc @chdirname$qpzc near 2.694 2.695 pop ax 2.696 pop bx 2.697 - push bx 2.698 push ax 2.699 2.700 cmp [byte bx+1],3Ah ; ':' 2.701 @@ -1308,54 +1280,50 @@ 2.702 @@end: 2.703 ret 2.704 2.705 - endp _chdirname 2.706 + endp @chdirname$qpzc 2.707 2.708 2.709 ;*************************************************************** 2.710 -;char *ultoa(unsigned long n); 2.711 +;pascal char *ultoa(unsigned long n); 2.712 ;*************************************************************** 2.713 - global _ultoa:near 2.714 - proc _ultoa near 2.715 + global @ultoa$qul:near 2.716 + proc @ultoa$qul near 2.717 2.718 + pop dx 2.719 + pop cx 2.720 pop ax 2.721 - pop cx 2.722 - pop dx 2.723 - push dx 2.724 - push cx 2.725 - push ax ; DX:CX = n 2.726 + push dx ; AX:CX = n 2.727 push si 2.728 mov si,10 2.729 mov bx,offset ultoabuf+11 2.730 @@loop: 2.731 dec bx 2.732 - xchg ax,dx 2.733 xor dx,dx 2.734 div si ; DX:AX = 0000:hi(n) 2.735 xchg ax,cx ; CX = hi(n)/10 2.736 div si ; DX:AX = hi(n)%10:lo(n) 2.737 xchg ax,cx ; CX = lo(n/10) 2.738 - xchg ax,dx ; DX = hi(n)/10 = hi(n/10) 2.739 - add al,'0' 2.740 - mov [bx],al 2.741 - mov ax,cx 2.742 - or ax,dx 2.743 + ; AX = hi(n)/10 = hi(n/10) 2.744 + mov [byte bx],'0' 2.745 + add [bx],dl ; DL = n%10 2.746 + mov dx,ax 2.747 + or dx,cx 2.748 jnz @@loop 2.749 xchg ax,bx 2.750 pop si 2.751 ret 2.752 2.753 - endp _ultoa 2.754 + endp @ultoa$qul 2.755 2.756 2.757 ;*************************************************************** 2.758 -;unsigned long kver2ul(char *kernel_version); 2.759 +;pascal unsigned long kver2ul(char *kernel_version); 2.760 ;*************************************************************** 2.761 - global _kver2ul:near 2.762 - proc _kver2ul near 2.763 + global @kver2ul$qpzc:near 2.764 + proc @kver2ul$qpzc near 2.765 2.766 pop bx 2.767 pop ax 2.768 - push ax 2.769 push bx 2.770 push si 2.771 xchg ax,si 2.772 @@ -1381,12 +1349,16 @@ 2.773 kver2ulret: 2.774 ret 2.775 2.776 - endp _kver2ul 2.777 + endp @kver2ul$qpzc 2.778 2.779 + endif 2.780 2.781 ;*************************************************************** 2.782 ;void try_default_args(); 2.783 +;pascal void set_cmdline(const char *filename); 2.784 ;*************************************************************** 2.785 + ifdef EXTRA 2.786 + 2.787 global _try_default_args:near 2.788 proc _try_default_args near 2.789 2.790 @@ -1395,13 +1367,12 @@ 2.791 jc kver2ulret 2.792 mov cx,4096 2.793 mov di,[_heap_top] 2.794 - push cx 2.795 extrn read_cmdline:near 2.796 jmp near read_cmdline ; read_cmdline(ax,di,cx) 2.797 2.798 endp _try_default_args 2.799 2.800 - endif 2.801 + endif 2.802 2.803 ends _TEXT 2.804
3.1 --- a/linld/stuff/src/CRTL.H Thu Nov 08 23:37:09 2018 +0100 3.2 +++ b/linld/stuff/src/CRTL.H Fri Nov 09 16:37:55 2018 +0100 3.3 @@ -5,6 +5,7 @@ 3.4 #define MK_FP(seg,ofs) ((void _seg *)(seg) + (void near *)(ofs)) 3.5 #define FP_SEG(fp) ((unsigned) (void _seg*) (void far*)(fp)) 3.6 #define FP_OFF(fp) ((unsigned) (fp)) 3.7 +#define NULL 0 3.8 3.9 const unsigned MIN_STACK = 0x400; 3.10 const unsigned MAX_MALLOC = 0xF000; 3.11 @@ -26,16 +27,16 @@ 3.12 extern char* heap_top; 3.13 3.14 void parse_cmdline(); 3.15 -extern "C" char* strcatb(const char* a,const char* b); 3.16 -extern "C" int strhead(const char* a,const char* b); 3.17 -extern "C" int fileattr(const char* name); 3.18 +extern pascal void strcatb(const char* a,const char* b); 3.19 +extern pascal int strhead(const char* a,const char* head); 3.20 +extern pascal int fileattr(const char* name); 3.21 //extern "C" int open(const char* name, int flags); 3.22 -extern "C" int open(const char* name); 3.23 -extern "C" int close(int fd); 3.24 -extern "C" int read(int fd, void* data, int sz); 3.25 -extern "C" long lseekset(int fd, unsigned long sz); 3.26 -extern "C" int puts(const char* s); 3.27 -extern "C" unsigned long strtol(const char *s); 3.28 +extern pascal int open(const char* name); 3.29 +extern pascal int close(int fd); 3.30 +extern pascal int read(int fd, void* data, int sz); 3.31 +extern pascal long lseekset(int fd, unsigned long sz); 3.32 +extern pascal int puts(const char* s); 3.33 +extern pascal unsigned long strtol(const char *s); 3.34 3.35 // Extensions 3.36 #define cli() do { asm { cli } } while(0) 3.37 @@ -43,6 +44,9 @@ 3.38 #define int3() do { asm { db 0cch } } while(0) 3.39 #define nop() do { asm { db 90h } } while(0) 3.40 extern char no_exit; 3.41 -extern "C" int die(const char* msg); 3.42 -extern "C" char* malloc_or_die(unsigned size); 3.43 -extern "C" unsigned long* malloc_bufv_or_die(struct image_himem *m); 3.44 +extern pascal int die(const char* msg); 3.45 +//extern "C" char* malloc_or_die(unsigned size); 3.46 +//extern "C" unsigned long* malloc_bufv_or_die(struct image_himem *m); 3.47 +extern pascal int malloc_or_die(unsigned size); 3.48 +extern pascal int malloc_bufv_or_die(struct image_himem *m); 3.49 +extern pascal void set_cmdline(const char *filename);
4.1 --- a/linld/stuff/src/CRTLX.H Thu Nov 08 23:37:09 2018 +0100 4.2 +++ b/linld/stuff/src/CRTLX.H Fri Nov 09 16:37:55 2018 +0100 4.3 @@ -1,14 +1,16 @@ 4.4 // This file is distributed under GPL 4.5 // 4.6 -#define NULL 0 4.7 -extern "C" char* strcpy(const char* a,const char* b); 4.8 -extern "C" char* strcat(const char* a,const char* b); 4.9 -extern "C" int strcmp(const char* a,const char* b); 4.10 -extern "C" char* strstr(const char* a,const char* b); 4.11 +extern pascal void strcpy(const char* a,const char* b); 4.12 +extern pascal void strcat(const char* a,const char* b); 4.13 +extern pascal int strcmp(const char* a,const char* b); 4.14 +//extern "C" char* strstr(const char* a,const char* b); 4.15 +extern pascal int strstr(const char* a,const char* b); 4.16 extern "C" char *progname(void); 4.17 -extern "C" void chdirname(char *path); 4.18 -extern "C" unsigned long kver2ul(char *kernel_version); 4.19 -extern "C" char *ultoa(unsigned long n); 4.20 +extern pascal void chdirname(char *path); 4.21 +extern pascal unsigned long kver2ul(char *kernel_version); 4.22 +//extern "C" char *ultoa(unsigned long n); 4.23 +extern pascal int ultoa(unsigned long n); 4.24 extern "C" void try_default_args(); 4.25 extern char cpu_features[]; 4.26 -#define cpuhaslm() (cpu_features[3]&0x20) 4.27 +#define CPUMASKLM (0x20) 4.28 +#define cpuhaslm() (cpu_features[3]&CPUMASKLM)
5.1 --- a/linld/stuff/src/HIMEM.CPP Thu Nov 08 23:37:09 2018 +0100 5.2 +++ b/linld/stuff/src/HIMEM.CPP Fri Nov 09 16:37:55 2018 +0100 5.3 @@ -61,7 +61,7 @@ 5.4 u32* bufv= &buf; 5.5 if(((u16 *)&m->fallback)[1] >= 0x10 && !skip_alloc) { // >= _1m ? 5.6 if(vcpi) { 5.7 - bufv = malloc_bufv_or_die(m); // update m->bufv 5.8 + bufv = (u32 *)malloc_bufv_or_die(m); // update m->bufv 5.9 } 5.10 else { 5.11 xmm_alloc(m); // update m->buf
6.1 --- a/linld/stuff/src/ISO9660.CPP Thu Nov 08 23:37:09 2018 +0100 6.2 +++ b/linld/stuff/src/ISO9660.CPP Fri Nov 09 16:37:55 2018 +0100 6.3 @@ -10,7 +10,7 @@ 6.4 6.5 static int readsector(const unsigned long *offset) 6.6 { 6.7 - return (isolseek(offset) != -1 6.8 + return (isolseek(offset) != 0 6.9 && read(isostate.fd, buffer, sizeof(buffer)) >= SECTORSZ); 6.10 } 6.11 6.12 @@ -113,7 +113,7 @@ 6.13 char _64bits = cpuhaslm(); 6.14 struct isostate *x=&isostate; 6.15 6.16 - retry32: 6.17 + do { 6.18 for (s = (char *) filename; *s == '/' ; s++) { 6.19 isoreset(NULL); 6.20 } 6.21 @@ -138,9 +138,6 @@ 6.22 isolseek(&x->fileofs); 6.23 return 0; 6.24 } 6.25 - if (_64bits) { 6.26 - _64bits = 0; 6.27 - goto retry32; 6.28 - } 6.29 + } while ((_64bits ^= CPUMASKLM) == 0); 6.30 return -1; 6.31 }
7.1 --- a/linld/stuff/src/ISO9660.H Thu Nov 08 23:37:09 2018 +0100 7.2 +++ b/linld/stuff/src/ISO9660.H Fri Nov 09 16:37:55 2018 +0100 7.3 @@ -22,7 +22,7 @@ 7.4 #define isofilesize isostate.filesize 7.5 #define isofilemod isostate.filemod 7.6 #define isofilename isostate.filename 7.7 -extern "C" unsigned long isolseek(const unsigned long *offset); 7.8 +extern pascal int isolseek(const unsigned long *offset); 7.9 extern int isoreset(char *name); 7.10 extern int isoopen(const char *name); 7.11 extern int isoreaddir(int restart);
8.1 --- a/linld/stuff/src/JUMP.ASM Thu Nov 08 23:37:09 2018 +0100 8.2 +++ b/linld/stuff/src/JUMP.ASM Fri Nov 09 16:37:55 2018 +0100 8.3 @@ -196,9 +196,8 @@ 8.4 push 1 ; dst ofs hi 8.5 endif 8.6 push di ; dst ofs lo : 64k 8.7 - extrn _memcpy32:near 8.8 - call _memcpy32 8.9 - add sp,14 8.10 + extrn memcpy32:near 8.11 + call memcpy32 8.12 8.13 ifndef noelks 8.14 ifndef NO386
9.1 --- a/linld/stuff/src/LINLD.CPP Thu Nov 08 23:37:09 2018 +0100 9.2 +++ b/linld/stuff/src/LINLD.CPP Fri Nov 09 16:37:55 2018 +0100 9.3 @@ -8,11 +8,12 @@ 9.4 const char* kernel_name = "bzImage"; 9.5 const char* initrd_name; 9.6 const char* cmdline = "auto"; 9.7 -u16 root_dev; 9.8 -u16 vid_mode; // -3 = ask 9.9 - // -2 = Extended VGA 9.10 - // -1 = Normal VGA 9.11 - // n = as "n" was pressed 9.12 +u32 root_dev; 9.13 +u32 vid_mode; // -3 = ask 9.14 + // -2 = Extended VGA 9.15 + // -1 = Normal VGA 9.16 + // n = as "n" was pressed 9.17 +u32 topmem; 9.18 9.19 inline void syntax() { 9.20 die("Syntax:" NL
10.1 --- a/linld/stuff/src/LOAD.CPP Thu Nov 08 23:37:09 2018 +0100 10.2 +++ b/linld/stuff/src/LOAD.CPP Fri Nov 09 16:37:55 2018 +0100 10.3 @@ -140,7 +140,7 @@ 10.4 { 10.5 struct first1k_t *first1k; 10.6 struct kernelparams_t *kernelparams; 10.7 - kernelparams = &(((first1k_t*) (rm_buf = malloc_or_die(_32k)))->params); 10.8 + kernelparams = &(((first1k_t*) (rm_buf = (u8 *)malloc_or_die(_32k)))->params); 10.9 #define first1k ((first1k_t*)((u8 *)kernelparams-0x1F1)) 10.10 { 10.11 u16 rm_seek; 10.12 @@ -177,8 +177,8 @@ 10.13 10.14 // Tell rm loader some info 10.15 10.16 - if(vid_mode) kernelparams->vid_mode = vid_mode; 10.17 - if(root_dev) kernelparams->root_dev = root_dev; 10.18 + if((int)vid_mode) kernelparams->vid_mode = vid_mode; 10.19 + if((int)root_dev) kernelparams->root_dev = root_dev; 10.20 version_string = ""; 10.21 10.22 #if 1
11.1 --- a/linld/stuff/src/MEMCPY32.ASM Thu Nov 08 23:37:09 2018 +0100 11.2 +++ b/linld/stuff/src/MEMCPY32.ASM Fri Nov 09 16:37:55 2018 +0100 11.3 @@ -21,8 +21,8 @@ 11.4 ;*************************************************************** 11.5 ;****** Uses: Flags 11.6 ;*************************************************************** 11.7 - global _memcpy32:near 11.8 - proc _memcpy32 near 11.9 + global memcpy32:near 11.10 + proc memcpy32 near 11.11 11.12 ; rm32,imm16 helper 11.13 macro addzx_e rm,i 11.14 @@ -91,9 +91,8 @@ 11.15 xor si,si 11.16 mov ax,[srcseg] 11.17 xor dx,dx 11.18 - mov cl,4 11.19 - extrn N_LXLSH@:near 11.20 - call near N_LXLSH@ 11.21 + extrn N_LXLSH@4:near 11.22 + call near ptr N_LXLSH@4 11.23 add [word srcofs],ax 11.24 adc [word srcofs+2],dx 11.25 @@2flat: 11.26 @@ -213,7 +212,7 @@ 11.27 mov sp,bp 11.28 pop bp 11.29 endif 11.30 - ret 11.31 + ret 14 11.32 11.33 ;****** Const data ********************************************* 11.34 org $-8 ;save 8 bytes - they are unused anyway 11.35 @@ -226,7 +225,7 @@ 11.36 ; base_med P S D A G ??l_hi base_hi 11.37 ; Pl E W D 11.38 11.39 - endp _memcpy32 11.40 + endp memcpy32 11.41 11.42 ends _TEXT 11.43
12.1 --- a/linld/stuff/src/MEMTOP.ASM Thu Nov 08 23:37:09 2018 +0100 12.2 +++ b/linld/stuff/src/MEMTOP.ASM Fri Nov 09 16:37:55 2018 +0100 12.3 @@ -90,6 +90,10 @@ 12.4 shld dx,ax,cl 12.5 shl ax,cl ; (kbytes -> bytes) 12.6 else 12.7 + db 0A9h ; test ax,04B1h 12.8 + global N_LXLSH@4:near 12.9 +N_LXLSH@4: 12.10 + mov cl,4 12.11 global N_LXLSH@:near 12.12 N_LXLSH@: 12.13 mov ch,0 12.14 @@ -153,7 +157,11 @@ 12.15 cmp dx,cx 12.16 jb @@set 12.17 extrn _topmem:dword 12.18 - mov cx,[word _topmem+2] ; max 256m ? 12.19 + mov cx,[word _topmem+2] 12.20 + inc cx ; jcxnz 12.21 + loop @@topmemset 12.22 + mov ch,10h ; default = max 256m 12.23 +@@topmemset: 12.24 ; Kernel can have trouble with initrd at very high addr: 12.25 ; limit mem top to 256m 12.26 cmp dh,ch
13.1 --- a/linld/stuff/src/TAZBOOT.CPP Thu Nov 08 23:37:09 2018 +0100 13.2 +++ b/linld/stuff/src/TAZBOOT.CPP Fri Nov 09 16:37:55 2018 +0100 13.3 @@ -129,7 +129,7 @@ 13.4 if (isoopen(initrdfilename) >= 0) { 13.5 addinitrd(); 13.6 } 13.7 - if (*init && isolseek(&initrddesc) != -1) { 13.8 + if (*init && isolseek(&initrddesc) != 0) { 13.9 read(x->fd, &x->filemod, 10); // + x->fileofs & x->filesize 13.10 magic = x->filemod; 13.11 x->fileofs &= 0xFFFFL; 13.12 @@ -143,7 +143,7 @@ 13.13 strcatb(buf_cmdline,"mode="); 13.14 strcat(buf_cmdline,mode); 13.15 strcatb(buf_cmdline,"magic="); 13.16 - strcat(buf_cmdline,ultoa(magic)); 13.17 + strcat(buf_cmdline,(char *)ultoa(magic)); 13.18 } 13.19 load_initrds(); 13.20 if (isknoppix) { 13.21 @@ -157,13 +157,15 @@ 13.22 boot_kernel(); 13.23 } 13.24 13.25 -u16 root_dev; 13.26 -u16 vid_mode; 13.27 +u32 root_dev; 13.28 +u32 vid_mode; 13.29 +u32 topmem; 13.30 const char* kernel_name = "bzImage"; 13.31 const char* initrd_name; 13.32 +char* iso; 13.33 + 13.34 int main(int argc, char *argv[]) 13.35 { 13.36 - char *iso = NULL; 13.37 argv[0] = progname(); 13.38 bootiso(argv); // iso ? parsing is /init.exe stuff ! 13.39
14.1 --- a/linld/stuff/src/XMM.ASM Thu Nov 08 23:37:09 2018 +0100 14.2 +++ b/linld/stuff/src/XMM.ASM Fri Nov 09 16:37:55 2018 +0100 14.3 @@ -93,16 +93,15 @@ 14.4 ends ;}; 14.5 14.6 ;*************************************************************** 14.7 -;void xmm_alloc(struct image_himem *m) 14.8 +;pascal void xmm_alloc(struct image_himem *m) 14.9 ;*************************************************************** 14.10 - global _xmm_alloc:near 14.11 - proc _xmm_alloc near 14.12 + global @xmm_alloc$qp11image_himem:near 14.13 + proc @xmm_alloc$qp11image_himem near 14.14 14.15 - ret ; TO BE FIXED 14.16 pop ax 14.17 pop bx 14.18 - push bx 14.19 push ax 14.20 + ret ; TO BE FIXED 14.21 ifndef NO386 14.22 mov edx,[(image_himem bx).size] ; m->size 14.23 ;dec edx 14.24 @@ -138,7 +137,7 @@ 14.25 @@err: 14.26 ret 14.27 14.28 - endp _xmm_alloc 14.29 + endp @xmm_alloc$qp11image_himem 14.30 14.31 ends _TEXT 14.32
15.1 --- a/linld/stuff/src/_BEG.ASM Thu Nov 08 23:37:09 2018 +0100 15.2 +++ b/linld/stuff/src/_BEG.ASM Fri Nov 09 16:37:55 2018 +0100 15.3 @@ -21,9 +21,7 @@ 15.4 endif 15.5 global _vcpi:byte 15.6 _vcpi db 0 15.7 -msg_badmapping db "VCPI: low 640k need 1:1 mapping" 15.8 - global _topmem:dword 15.9 -_topmem dd 10000000h ; max 256m 15.10 +msg_badmapping db "VCPI: low 640k need 1:1 mapping",0 15.11 15.12 ends _DATA 15.13 15.14 @@ -230,25 +228,22 @@ 15.15 push bx ; argc 15.16 ifndef filearg 15.17 mov bx,[di+2] ; argv[1] 15.18 - cmp [byte bx],'@' 15.19 - jne argend 15.20 - inc bx 15.21 - extrn open:near 15.22 - call near open 15.23 + extrn openargs:near 15.24 + call near openargs 15.25 jc argend 15.26 pop bx ; trash argc, argv >> 1Kb ! 15.27 - ifdef EXTRA 15.28 global read_cmdline:near 15.29 - endif 15.30 + pop cx ; sizemax=argv 15.31 read_cmdline: 15.32 - push di 15.33 + mov dx,di 15.34 + push dx 15.35 push ax 15.36 - extrn _read:near 15.37 - call near _read 15.38 + xchg ax,bx 15.39 + extrn @read$cxdxbx:near ; read(fd=bx,buffer=dx,size=cx) 15.40 + call near @read$cxdxbx 15.41 pop bx ; fd for close 15.42 pop si ; si=buffer=argv 15.43 add di,ax 15.44 - pop ax ; trash sizemax=argv 15.45 extrn close:near 15.46 call near close 15.47 jmp argbuild
16.1 --- a/linld/stuff/src/pipehole.awk Thu Nov 08 23:37:09 2018 +0100 16.2 +++ b/linld/stuff/src/pipehole.awk Fri Nov 09 16:37:55 2018 +0100 16.3 @@ -59,6 +59,11 @@ 16.4 print " call near ptr N_LXURSH@4" 16.5 next 16.6 } 16.7 + if (/^ call near ptr N_LXLSH@$/) { 16.8 + print " extrn N_LXLSH@4:near" 16.9 + print " call near ptr N_LXLSH@4" 16.10 + next 16.11 + } 16.12 print s 16.13 } 16.14 s=$0