📄 history.txt
字号:
Saves the idx reference. The second call (for a FAT12 entry that is divided in two sectors) can be much simpler, no need to recalculate. Merged next_cluster and link_fat into one function depending on a special Cluster2 value. * fattab.c: Calculate the nibble/word/dword index of the FAT entry in the sector centrally in getFATblock. * fattab.c: "clussec" can be of CLUSTER size if we divide by an adjusted "words per sector"(FAT16), or "dwords per sector"(FAT32) value instead of multiplying it first. For FAT12 the *3/2 works out a little differently: here we first multiply by 3 and then divide by the number of "nibbles per sector". * main.c: Config.cfgInitTail is a pointer now so sizeof isn't good. Just using strcpy helps F5 and F8. * main.c: "copyright" is near now so we have to use %s and not %S * blockio.c, dosfns.c, int2f.asm, network.c, proto.h, task.c: reduced the number of network redirector functions in int2f.asm. The remote_ functions (with one far pointer argument) are now called with the help of a network_redirector() wrapper in C by one multiplex function using a generic void *arg argument to pass the third parameter which can be various things. Split int2f.asm functions, don't let them preserve as many registers, use pascal calling convention for the "open" (but really: multiplex) function. * dsk.c: floppy determination type optimization for format -- based on Arkady's suggestions a long time ago. + a few other small optimizations (~70 bytes total).2004 Apr 17 - Build 2034-------- Bart Oldeman (bart@dosemu.org) * break.c, chario.c, inthndlr.c, proto.h: Improve ctrl-c/ctrl-break handling: - read_char_sft_dev handles ^C at a fairly high level. - ^C didn't work for int21/ah=3f. Corrected - Do_DosIdle_loop still needs to wait even if it doesn't call the idle int - ^C needs to be echoed to STDOUT for low character functions (ah<0xd) but to the device that is read from for handle functions. So we need to pass either the STDOUT sft or that device on to the ^C echoer which now correctly prints ^C\r\n. - misc cleanups in break.c. * main.c: Move memset up a little else it would overwrite too much. * build.txt, config.c, init-mod.h, initdisk.c, inithma.c, main.c: Lucho reported that MSC compiled kernels now work after all. Let's mark those nasty "BSS" variables explicitly then to try to avoid future problems. Also DATASTART should be FAR and not DOSFAR for MSC * stacks.inc, generic.mak, entry.asm, int2f.asm, kernel.asm, segs.inc: (suggested by Arkady): use CPU to enforce 8086 etc instructions. * ioctl.c: Correct int21/ax=4401: returned AL = old value, should set CY and DE_INVLDDATA if DH!=0 (RBIL is a little confusing here). * memmgr.c: Converted nxtMCBsize back to a macro. There is no need to use far2para; FP_SEG works fine since MCBs always have offset 0. * build.txt, config.c, config.h, kernel.asm, main.c, segs.inc, task.c: Removed obsolete BYTE cfgCSYS_fnam[NAMEMAX]; config variable. Changed cfgInit and cfgInitTail to pointers, adjusted some code to cooperate. * chario.c: The screen position (for TABs) is only for raw *CONOUT* devices already updated in dosfns.c * memmgr.c, proto.h: Make unnecessary far pointers near. * device.h, dsk.c, initdisk.c: Move the ddt bitfields to df_descflags. Let SetLogDev call GetLogdev, eliminating common code. * init-mod.h, mscl8.mak: Some vars need to be DOSFAR; init code is no longer tiny but small. * segs.inc, inithma.c, main.c, asmsupt.asm, execrh.asm, init-mod.h, kernel.asm, watcom.mak: Make CS the same for INIT and HMA text for Watcom. Move HMA text up in kernel.asm. Use std for the memory move: helps if there's overlap (PCs with a very low amount of RAM). No longer include duplicate execrh, asmsupt, and u8m/d functions for the init text in the Watcom compiled kernel, since they can be called "near" in the resident code. * portab.h, kernel.asm, main.c, segs.inc: Use the "small" model for the init code (split code/data). * main.c: Use pointer to MK_FP(0,0x5e0) to save a bit of code. * initdisk.c: Move some common code into a "push_ddt" function. * sys.c: Correct int25/26 pragmas. Need to explicitly preserve bp and pop flags. * initdisk.c: fmemcpy->memcpy where possible * config.c, init-mod.h, inithma.c, int2f.asm: Make UMB_get_largest "pascal". Let it use the xms driver address from the HMA code. Misc small config.c cleanups. * initdisk.c: "Cache" far drive data table near. Enables elimination of many far pointers in initdisk.c. Also clear up the unnecessary casts in ConvPartTableEntryToIntern. * drivers/getvec.asm, drivers/rdpcclk.asm, drivers/wratclk.asm, drivers/wrpcclk.asm, globals.h: Use pascal calling conventions for all clock related asm functions. * drivers/floppy.asm, dsk.c: Use pascal calling conventions for floppy asm functions. * init-mod.h, intr.asm, proto.h, kernel.asm: Use the pascal calling convention for all intr.asm functions, and let them pop the stack (smaller code than using bx). Tell Watcom which registers are clobbered; save some more registers for intr() -- especially for intr() this helps. * device.h, execrh.asm, init-mod.h: Use pascal calling conventions for execrh(). * mkfiles/watcom.mak: Use the "-r" switch for Watcom to preserve ES around calls -- saves ~350 bytes. * sys.c, init-mod.h, fdkrncfg.c, portab.h, prf.c, proto.h: Introduce VA_CDECL: only Turbo C 2.01 needs an explicit cdecl for printf, all other compilers can use it with pascal or "register" calling conventions. Saves ~50 bytes for the init code. * asmsupt.asm, config.c, init-mod.h: Use strchr and strlen more often; also use strchr in the init code. * memmgr.c: Better to call fmemset than to do things manually. * asmsupt.asm, proto.h, init-mod.h: Be more specific about which registers are clobbered by asmsupt.asm functions. Preserve "ES" for Watcom. Saves ~150 bytes resident, ~90 bytes nonresident, more for 386 kernels. Preserve bx and cx for WATCOMC as well. Saves another 200 bytes. * inthndlr.c: Simplify memory access mode check. * dsk.c: Remove wrong "512" value for number of root directory entries on FAT32 partitions. * file.h, sft.h, dosfns.c, fcbfns.c: Get rid of SFT_M* mode values. O_* values are sufficient. * file.h, fatfs.c: Define O_ACCMODE and use it instead of "3" for the open access mask. * config.c, init-mod.h: Change default STACKS= size to 256. * config.c, init-mod.h, main.c: Remove lpOldTop variable. It is no longer necessary (has not been for some time) and the assignment in config_init_buffers() was wrong (screwed up fnodes, so that buffers overlapped fnodes...). * lol.h, config.c, fatfs.c, globals.h, kernel.asm, proto.h: Made the main fnodes far so they can be in the HMA. Internally the kernel uses two near fnodes though, to save on codesize and fmemcpy's if necessary. Having memory management on two fnodes is a little silly but I just want to make sure with the panic message that we never accidentally try to use three near fnodes at the same time (two are used at the same time by rename, commit, and merge_file_changes). This can be cleaned up later. * fatfs.c: - Merge three almost identical pieces of code used to allocate a new directory entry in creat, rename, and mkdir into alloc_find_free. - Merge find_fat_free() and extend() -- they were almost identical. Have a simplified clause for f_cluster == FREE. Set f_cluster = FREE in shrink_file if the file is set to 0 bytes; in that case we should set the current cluster to FREE even if it is currently a LONG_LAST_CLUSTER. * fnode.h, fatdir.c, fatfs.c, lfnapi.c: - Eliminate f_back field. extend() now uses f_cluster instead of f_back, while map_cluster makes sure it's not set to LONG_LAST_CLUSTER (but to the cluster before it) when calling extend(). extend() and first_fat() now return the new cluster number or LONG_LAST_CLUSTER, just like find_fat_free(). - Eliminated f_sector and f_boff fields from fnodes. - Avoid bitfields for fnodes, using flags instead. Replaced droot field by checks for f_dirstart == 0. - Make f_diroff an entry offset so it can be 16bits. Enforce the 65536 entry limit in dir_read(), except for root directories. For root directories it's checked against a different limit later. Saves 80 bytes or so + 2 bytes in every f_node. * dsk.c, fatfs.c, memmgr.c: Remove add_far. adjust_far can do the job. * chario.c: Echo input LF as CR-LF unless it's the first character. Never store LF in the buffer. * memmgr.c, task.c: Eliminated long2para and avoided use of "long"s in DosExeLoader, using paragraphs to measure size instead. Saves ~130 bytes together. * prf.c, asmsupt.asm: Saved ~75 bytes in printf and by elimination of fstrlen. There's only one call; inlining doesn't increase the size. * dosfns.c, int2f.asm, intr.asm, nls.c: Eliminate intr() from resident code. Saves ~200 bytes of HMA resident code. Also made the nls.c functions SS!=DS safe. * init-mod.h, inthndlr.c, intr.asm, main.c, proto.h, task.c: int21/ah=26: new_psp now copies the old psp and just sets a few fields int21/ah=55: child_psp does the rest init code does the init (fixed values are always copied now) * dosfns.c: Commit each close, even if the ref count is > 0. * prf.c: Borland C didn't like one pseudo register use. * initdisk.c: Merge "suspect partition" copy/paste code into functions. * asmsupt.asm: Save a couple bytes by moving the strncmp_retzero block. * fcbfns.c, proto.h: Don't call truename from FcbNameInit(). It was only necessary for "FcbRename", which can call it itself. Fixes for FcbOpen/FcbFindFirstNext a consequence of truename's funny behaviour: truename(c:nul) = c:/nul and truename(c:/nul) = c:\nul. Fixes the EJECT problem from Lucho. Remove unused variable lpFcb. * portab.h, dsk.c, main.c, newstuff.c: Define I386 and I186 more cleanly. Add (UWORD) casts to silence the compiler. Optimize (head*sector) to secs_per_cyl. Add BORLANDC to compiler list and simplify startup printf to one message. #pragma enable_message(130) for Watcom C causes it to behave a little more like Borland in terms of warnings. * exeflat.c, fatfs.c, fattab.c, fcbfns.c, inthndlr.c, memmgr.c, task.c, blockio.c, fatdir.c: Added explicit (UWORD) type casts to avoid compiler warnings and sometimes save a few bytes too. Also changed the FcbParseFname return value: returns offset portion of pointer (SI) instead of the number of bytes to be added to SI.+ Changes Lucho * task.c: fixes the CHKDSK I: "Invalid drive specification" bug * mcb.h, inthndlr.c: save 33 bytes by eliminating a switch for memory/UMB access modes. * talloc.c: talloc won't work with MSC (no sbrk or brk available) + fix * stacks.inc: smaller Protect/Restore 386 register macros. * inthndlr.c: Code size reduction and dead code removal. * dosnames.c: Remove wrong automatic "*.*" code from Lixing Yuan -- return DE_PATHNOTFND or D_NFILES instead * ioctl.c: move the lock/unlock simulation of success before the device GENIOCTL check so that it applies to any device. * filelist, dosnames.h, dosfns.c, dosnames.c, fatdir.c, fatfs.c, globals.h, init-mod.h: (with Bart) -- remove the dosnames path 67 length check. Review the places where it really matters (chdir and mkdir). * init-mod.h, intr.asm, kernel.asm, main.c, procsupt.asm, proto.h, task.c: enable interactive re-execution of the SHELL. * nls.h, config.h, globals.h, init-mod.h: move NLS #defines to nls.h. Move config structure to config.h. Some cosmetic changes. * contrib.txt: From Lucho: update contributors list. * config.c: From Lucho: fix EBDA problems with INSTALL. This fixes the weird fmemcpy lockup; in reality kernel init code was overwritten. * asmsupt.asm, config.c, init-mod.h, inithma.c, main.c, makefile, prf.c: Use asmsupt string and mem functions for the init code too.+ Changes Arkady * task.c: A few suggestions. Saves 5 bytes. * inthndlr.c: Use AL, not AX, for int2f/ax=1213, as per RBIL * inthndlr.c: Use xreg struct and macros to optimize the int2f/12,4a handler a bit ~25 bytes * config.c: Buffer config fixes. * inthndlr.c, proto.h: Corrections to int2f/ax=4a01/2. * blockio.c: buffer intersection check should use > instead of >=. small optimization -- the segment in bp == firstbuf is always the same so we just need to compare offsets. AllocateHMASpace needs to check FP_SEG(firstbuf) for 0xffff, since the buffers may not live in the HMA. * *.bat, config.b, kernel/makefile, generic.mak: .BAT file and makefile cleanups. Also Lucho reported that nmake/nologo doesn't always work in 4dos, but nmake /nologo works.2004 Jan 31 - Build 2033-------- Bart Oldeman (bart@dosemu.org)+ Changes Bart * config.c: allow "0" in full-screen config menus and plug a few potential related overflows. * sys.c: correct sectors/track, head and hidden sector values if the boot sector disagrees with the default bpb (unless the default bpb says that the number of hidden sectors is zero (usual for floppies)). * config.c, main.c: Only put PATH= in the environment if it's still empty just before executing the shell. This repairs SET PATH=.... in config.sys without confusing anyone. * fatdir.c, fatfs.c: Fixed bug #1722: dir_close() was called for normal files (via map_cluster and find_fat_free). This completely messed up rwblock. Removed these calls (for directories they are already covered at a higher level) and added a few sanity checks to dir_close and dir_write. * chario.c, inthndlr.c: Expand tabs for int21/ah=2,9 even in raw device modes and if stdout is redirected. This solves bug 1737 (grep2msg problem) * ioctl.c: Adapted from Chris Rodie's patch for bugzilla #1730: do a device input status request for int21/ax=4406 for devices (not for files). Save ~100 bytes by replacing s->sft_flags with flags, s->sft_dev->dh_attr with attr and simplifying the if() statement a bit * hdr/sft.h, dosfns.c: Adapted from Chris Rodie's patch (bugzilla #1729): "open" and "close" should call the open/close functions for devices using a device request when appropriate.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -