On Thu, 18 May 2006 23:59:20 +1200 (NZST), you wrote: Jack,
I'm afraid Bart may interpret your idea wrong, so let you check this. I'll try to respond with low profile. >> Quote a few lines from his email: >> >> ===== >> I did not "model" QHIMEM after Microsoft HIMEM V2.03, like you know. >> QHIMEM's source or binary files are very different from V2.03 HIMEM. >> Disassemblies may only confuse folks. But they are welcome to try. >> ===== > >Hey, I always like a challenge, so if I was welcome to try, I disassembled >a bit. > >Some observations: > >QHIMEM is indeed not modelled after MS HIMEM. You can see that the MS >source has been referenced, e.g. in the algorithm for allocating an EMB >(very similar) and how to decide when to use PS/2 A20 switching (the >"MCA" bit for int15/ah=c0). It certainly doesn't have a "clean-room" feel >(purely coded from XMS spec), but that may not be necessary. > >Just like FD-HIMEM and FDXMS it either uses INT15/AH=87, or temporarily >switches to protected mode (almost the same GDT setup) to copy. However, >and that is what the interrupt stuff is all about, it copies in chunks of >8K: for every 8K it returns to real mode, STI's, CLI's and gets back into >protected mode. QHIMEM, unlike MS-HIMEM, does not use flat real mode (aka >unreal mode). > >I'm not sure where Jack got the 8K from -- maybe the timing on the slowest >possible machine (386SX 16MHz) has something to do with it. > >The value for int15/87 is 1K, where FD-HIMEM and FDXMS use 8K chunks. > >QHIMEM uses a few tricks to save memory, e.g.: >* the KBD A20 switching code is overwritten with PS/2 A20 switching code > when necessary >* eax is initialized to 0 and is exploited that way (saves 1-3 bytes in > various asm instructions, versus an immediate 0 operand) >* comparisons versus number of handles are patched in the code to save on > an extra variable in the data segment >* the XMS spec requires that " In order to maintain compatibility with > existing device drivers, DOS XMS drivers must not hook INT 15h until > the first non-Version Number call to the control function is made." > the "hook int15" code + various other delayed init code is copied to > (hardcoded) segment 0x7030, and called from there so it does not stay > resident. > This is somewhat risky: it relies on the fact that the DOS kernel does > not overwrite anything there, and will make XMS calls itself. > That usually happens, or QHIMEM would crash. > Segment 7030 is also used for communication between QHMBOOT and QHIMEM. > >That's the gist of it, at least from my mileage. > >Bart Rgds, Johnson. ------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid0709&bid&3057&dat1642 _______________________________________________ Freedos-user mailing list Freedos-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freedos-user