Hi,
I just looked at the recent SVN commits to fix that CALL 5 stuff. The new
commentary about it contains some errors. I'm appending the things I would
improve about it. It's not meant to annoy you, although I imagine it
could. (Does it?)
Regards,
Christian
---
This comment was put into the PSP structure in one of the header files:
/* offsets 5-9 are a far call to absolute address 0:000Ch
coded so that CP/M apps can do a near call to psp:5, does a
far call but ensures word at offset 6 is size of COM file
e.g. FEF0h by using 1MB wrap around address 0F01D:FEF0
(jmp code stored at 0:000C should be duplicated in HMA FFFF:00D0)
Note: MS-DOS has value as FEEE which wraps to 0:00BEh */
The address of 0:000Ch is wrong and should read 0000:00C0h. (It might be
interesting that this is where interrupt vectors 30h and 31h should be
stored, and this is the reason these interrupts can't be used/called in
DOS.) The word at offset 6 is usually not the exact size of the first
segment, because at least the low nibble is fixed to zero. It does not
depend on the size of the .COM file. If pointing out that a duplicate is
stored in the HMA, it might be interesting why this is done: to catch
"call 5"s while the A20 line is on.
The note seems not really correct, as mentioned in RBIL (Int21.26, PSP
description) this is a bug of MS-DOS's DEBUG program (not duplicated by FD
DEBUG as far as I know). Might be that RBIL is wrong with that however. Is
it?
---
This comment was put into entry.asm:
; For CP/M compatibility allow a program to invoke any DOS API function
; between 0 and 24h by doing a near call to psp:0005h which embeds a far
call
; to absolute address 0:00C0h (int vector 30h & 31h) or FFFF:00D0 (hma).
; Note: int 31h is also used for DPMI
; Upon entry the stack has a near return offset (desired return address)
and
; far return seg:offset (useless return to data at offset 0ah after far
call
; in psp). We convert it to a normal call and correct the stack to appear
same
; as if invoked via an int 21h call including proper return address.
The note is inappropriate (or incomplete) because DPMI explicitely uses
Int31 only in Protected Mode, and therefore only modifies the Protected
Mode IVT's entry 31h. It might be noted that not the complete return data
is useless, only the ip (offset) value. (Unless you assume cs = current
PSP, which the code doesn't.)
---
Might be just my conclusion, but won't it be better to document this just
in one file? Then you could as well add a short notice to the header file,
pointing to entry.asm (or the other way around, I just personally prefer
NASM style "%if 0" comments over C's star-and-slash constructs, and
usually write such extensive commentary into source rather than header
files). Some correct information (like the Int30 & Int31 notice, and
(incomplete) mention of DPMI) was present in one of the files but not in
the other one.
---
------------------------------------------------------------------------------
The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your
production scanning environment may not be a perfect world - but thanks to
Kodak, there's a perfect scanner to get the job done! With the NEW KODAK i700
Series Scanner you'll get full speed at 300 dpi even with all image
processing features enabled. http://p.sf.net/sfu/kodak-com
_______________________________________________
Freedos-kernel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freedos-kernel