Hallo Herr Eric Auer via Freedos-devel,

am Montag, 12. Mai 2025 um 02:03 schrieben Sie:


> Hi!

>> i posted the error and a screen shot of it in the kernel issues thing
>> https://github.com/FDOS/kernel/issues/205

> Let me type this screenshot message over and comment on it:

> Immediately after loading the "Use!UMBs" Upper Memory Block Manager
> which "Works on any PC/XT/AT, either with or without Extended or
> Expanded Memory" (Marco van Zwetselaar, public domain 1991, v2.2)
> there is a message:

> Invalid Opcode at 9063 E602 0046
> 15A3 C70D 6B06 3705 8B00
> FC46 463B 75F0 3B05 F27E
> dos mem corrupt, first_mcb=02b6
> prev  9fbf:0000 | 4d 08 00 40  46 00 00 00  53 43 00 00  00 00 00 00
> notMZ e600:0000 | 00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00

> PANIC: MCB chain corrupted
> System halted

> Some context from RBIL:

> Format of DOS memory control block:
> Offset  Size    Description     (Table 01628)
>   00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
>   01h    WORD    PSP segment of owner or special flag value (see #01629)
>   03h    WORD    size of memory block in paragraphs
>   05h  3 BYTEs   unused by MS-DOS
> ...
>   08h  8 BYTEs   ASCII program name if PSP memory block or DR DOS UMB,
>                    else garbage
>                  null-terminated if less than 8 characters

> Notes:  the next MCB is at segment (current + size + 1)
>          under DOS 3.1+, the first memory block is the DOS data segment,
>            containing installable drivers, buffers, etc.  Under DOS 4.0+ it is
>            divided into subsegments, each with its own memory control block
>            (see #01633), the first of which is at offset 0000h.
>          for DOS 5+, blocks owned by DOS may have either "SC" or "SD" in bytes
>            08h and 09h.  "SC" is system code or locked-out inter-UMB memory,
>            "SD" is system data, device drivers, etc.
> ...

> (Table 01629)
> Values for special flag PSP segments:
>   0000h  free
> ...
>   0008h  belongs to DOS
> ...

> Format of MS-DOS 5+ UMB control block:
> Offset  Size    Description     (Table 01630)
>   00h    BYTE    type: 5Ah if last block in chain, 4Dh otherwise
>   01h    WORD    first available paragraph in UMB if control block at start
>                    of UMB, 000Ah if control block at end of UMB
>   03h    WORD    length in paragraphs of following UMB or locked-out region
>   05h  3 BYTEs   unused
>   08h  8 BYTEs   block type name: "UMB" if start block, "SM" if end block in 
> UMB

> So what do we see here? A non-last MCB starting at 9fbf:0 with special
> flag value 08 (belongs to DOS) and code "SC" which means "locked-out
> inter-UMB memory". Size is 4640 paragraphs and DOS expects the next
> block, which WOULD be the one of the first UMB area, at e600:0, but
> as you can see, there are only a bunch of 00 bytes here. This could
> mean that there is no writable memory at that place or that something
> else is using the memory, which had the effect of overwriting the MCB
> with 00 bytes. Maybe you have some controller buffer at the address?
Nice analysis. on first glance:

USE!UMB should have checked that this memory is indeed writable.
It seems it's not and that is just a stupid program bug.

The cool thing is that source is provided, and some genius with too  much time
to spend caould fix this.




> What exactly is the hardware on which you are running this?
other then "genuine harris 286 @ 25MHz with 16 MB of ram and @ mb of EMS", how 
would this help you?

Tom



_______________________________________________
Freedos-devel mailing list
Freedos-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freedos-devel

Reply via email to