In the 16 bit BIG Real Mode we can set the DS segment register pointing to our data segment (nothing special), but together with using a 32 bit offset register in combination we can address every memory location in the 4 gb address space from the 16 bit BIG Real Mode.
wow. this might be the most detailed RUclips video about DOS memory management that currently exists, not that there's much competition. what an absolute mess.
A lot of the gaming experiences of my youth make much more sense now, thank you! I remember receiving an Ultima Collection for Christmas one year (when we were running Windows 98), and getting VII to run was practically impossible! What a fascinating era of tech history!
“then we replaced it with getting your svga card to work.” ouch! timberwolf, you are too good at digging up all the suppressed trauma! although i lived through the config.sys-fiddling, bootdisk-juggling glory days between dos 3.3 and 6.22, i never understood any of the differences between high memory, upper memory, expanded memory, extended memory, or springy stretchy memory. so in my own programming, 640kB +video ram simply had to be enough. thanks for the explainer! i am still confused by it all, but i think thats now just because it is all needlessly complicated and thankfully past!
One of the saving graces having a Trident 8900 was it being so common everything I played in the day detected it just fine. Painfully slow once it was detected, mind, but at least it worked...
Originally it was a "barrier", but later on it became more of a "rail". Basically don't whizz on the third rail. You could use everything ABOVE 1MB just fine, but between 640K and 1MB was "reserved for future expansion".
Good times indeed... I can't hardly remember how I got around the first time a DOS game asked for certain version of VESA video. I cheated a lot using QEMM386 before memmaker was bundled with MS-DOS so I never got around understanding what the hell were any of this memory stuff. So thanks for sharing this video!
QEMM was one of thoe things I missed out on - I never had a computer powerful enough to take advantage of it until long after MS-DOS 6.22 was ubiquitous.
Said Timberwolf, as he was floating under a balloon near the memory tree: “I think that the memory suspects something!” “What sort of thing?” “I don’t know. But something tells me that it’s suspicious!” “Perhaps it thinks that your game doesn’t use it.” ... “I have just been thinking, and I have come to a very important decision. This is the wrong sort of memory.” “Is it?” “Quite the wrong sort. So I should think it wouldn’t work, shouldn’t you?” “Should I?” “Yes. So I think I shall come down.”
Awesome video! Even three of my favorite games are shown in it :-) Since my IT education in school only started in mid-1995 I had no clue about the possiblity of creating a boot menu, so I ended up with 5 boot disks to make all my games run on my 486. Well not *all* of my games since one of my favorites, conincidently Digger (still awesome!), would run way to fast to play on even my dad's 12 MHz 386 NEC laptop. When I tried that it was the first time in my life that I realized backward compatibility was an issue even on PC. One of the reasons I kept one of the 8088 systems from our broader family in my possession until today (Atari PC3) like every other PC I owned afterwards. I knew your channel before, but I've now subscribed, since your content is high quality stuff! Thanks very much!
Really interesting! I'm too young to have experienced the DOS days so this is all very curious to me... Glad things are simpler now! 😅 Also smooth transition from the NFS Pioneer logo back to you; that was clever
On 80386+ (32 bit CPU) the only one difference between the 32 bit mode and the 16 bit mode is the usage of instructions with or without an operand size (66h) and with or without an address size (67h) prefix. In the 16 bit mode we have to use these prefixes for 32 bit and in the 32 bit mode for 16 bit instructions. That means in the 16 bit protected mode we have larger segment sizes in the global descriptor table of an 80386+, so we can address 4 gb memory in 16 bit protected mode too. In the 16 bit Real Address Mode of MS DOS we can use 32 bit operands/register with instructions and a operand size prefix(66h).
I must admit, it's a lot less of a bother with modern emulation, where throwing in an extra 4MB or upgrading to a more capable BIOS is only a few clicks away rather than six months of solid saving paper round money...
I remember messing about a bit with them at University and they had such a nice assembler - all those logical registers! Although even there, you had the "nobody will ever use the top 8 bits of the address register, right?" issue ..
Now that's a great video. These days programming is relatively easy. Guys and gals who programmed DOS era PCs were just built different to deal with this segmented nonsense and zero process isolation and protection features.
Good video except for one problem XENIX IS NOT LINUX. Xenix is a sublicensed version of AT&T Unix because AT&T was under antitrust limitations. Linux is a kernel licensed under GPLv2. actually i think it was pronounciation, he did say Xenix it just sounded like Linux
@@TimberwolfK "A version of Microsoft's own Unix variant, Linux" Microsoft never touched the Linux kernel in the 80s, that's because it didn't exist. MS only got involved in Linux today with Azure, WSL and various projects within FreeDesktop.
Hmm, I definitely hear that as "Xenix" (and it's in the subtitles). ETA: ah, I see you've noticed the same. Unfortunate with all those OS names not a million miles from each other!
Interesting question. I noticed while playing around with Memmaker that it struggled on the most aggressive settings to produce a stable configuration, which limited me to around 610-620K (which I think is about where my 486 with CD-ROM and soundcard also topped out in the day). Possibly Quarterdeck did more testing and had some smarter approaches at the limit to move the last few reluctant things into UMBs.
"segmented addressing just isn't complicated enough, what if we made it even worse?"
In the 16 bit BIG Real Mode we can set the DS segment register pointing to our data segment (nothing special), but together with using a 32 bit offset register in combination we can address every memory location in the 4 gb address space from the 16 bit BIG Real Mode.
Wonderful! And the first time I've heard a decent explanation of DOS=HIGH,UMB kinda means, splendid!
wow. this might be the most detailed RUclips video about DOS memory management that currently exists, not that there's much competition. what an absolute mess.
A lot of the gaming experiences of my youth make much more sense now, thank you! I remember receiving an Ultima Collection for Christmas one year (when we were running Windows 98), and getting VII to run was practically impossible! What a fascinating era of tech history!
“then we replaced it with getting your svga card to work.” ouch! timberwolf, you are too good at digging up all the suppressed trauma!
although i lived through the config.sys-fiddling, bootdisk-juggling glory days between dos 3.3 and 6.22, i never understood any of the differences between high memory, upper memory, expanded memory, extended memory, or springy stretchy memory. so in my own programming, 640kB +video ram simply had to be enough. thanks for the explainer! i am still confused by it all, but i think thats now just because it is all needlessly complicated and thankfully past!
One of the saving graces having a Trident 8900 was it being so common everything I played in the day detected it just fine. Painfully slow once it was detected, mind, but at least it worked...
Really good video made laugh several times. With really good information for those of us trying to understand how was in the good old days.
Originally it was a "barrier", but later on it became more of a "rail". Basically don't whizz on the third rail. You could use everything ABOVE 1MB just fine, but between 640K and 1MB was "reserved for future expansion".
Good times indeed... I can't hardly remember how I got around the first time a DOS game asked for certain version of VESA video.
I cheated a lot using QEMM386 before memmaker was bundled with MS-DOS so I never got around understanding what the hell were any of this memory stuff. So thanks for sharing this video!
QEMM was one of thoe things I missed out on - I never had a computer powerful enough to take advantage of it until long after MS-DOS 6.22 was ubiquitous.
Said Timberwolf, as he was floating under a balloon near the memory tree:
“I think that the memory suspects something!”
“What sort of thing?”
“I don’t know. But something tells me that it’s suspicious!”
“Perhaps it thinks that your game doesn’t use it.”
...
“I have just been thinking, and I have come to a very important decision. This is the wrong sort of memory.”
“Is it?”
“Quite the wrong sort. So I should think it wouldn’t work, shouldn’t you?”
“Should I?”
“Yes. So I think I shall come down.”
Awesome video! Even three of my favorite games are shown in it :-)
Since my IT education in school only started in mid-1995 I had no clue about the possiblity of creating a boot menu, so I ended up with 5 boot disks to make all my games run on my 486. Well not *all* of my games since one of my favorites, conincidently Digger (still awesome!), would run way to fast to play on even my dad's 12 MHz 386 NEC laptop. When I tried that it was the first time in my life that I realized backward compatibility was an issue even on PC. One of the reasons I kept one of the 8088 systems from our broader family in my possession until today (Atari PC3) like every other PC I owned afterwards.
I knew your channel before, but I've now subscribed, since your content is high quality stuff! Thanks very much!
Really interesting! I'm too young to have experienced the DOS days so this is all very curious to me... Glad things are simpler now! 😅 Also smooth transition from the NFS Pioneer logo back to you; that was clever
On 80386+ (32 bit CPU) the only one difference between the 32 bit mode and the 16 bit mode is the usage of instructions with or without an operand size (66h) and with or without an address size (67h) prefix.
In the 16 bit mode we have to use these prefixes for 32 bit and in the 32 bit mode for 16 bit instructions.
That means in the 16 bit protected mode we have larger segment sizes in the global descriptor table of an 80386+, so we can address 4 gb memory in 16 bit protected mode too.
In the 16 bit Real Address Mode of MS DOS we can use 32 bit operands/register with instructions and a operand size prefix(66h).
Oh. I had completely forgotten I used to deal with all of this.
So glad I don't need to think about this any more.
I must admit, it's a lot less of a bother with modern emulation, where throwing in an extra 4MB or upgrading to a more capable BIOS is only a few clicks away rather than six months of solid saving paper round money...
Nice one, thanks :)
Great video! :) Although I can still create customised boot menus to do all this, I forget what it was all doing behind the scenes!
As a die hard motorola 68k enjoyer that was thoroughly entertaining and educating video. Ao THAT is why the 640k...
I remember messing about a bit with them at University and they had such a nice assembler - all those logical registers!
Although even there, you had the "nobody will ever use the top 8 bits of the address register, right?" issue ..
The 68K had its own share of Bus Errors. That seriously hamstrung it, and by the time it was fixed, the x86 was already established.
Recognised Need for Speed instantly Crew represent.
It's the little-known EA/Pioneer title, The New Fish Simulator actually.
Oh man, conventional memory and the like, I remember having to ask my uncle who built my first PC how to set that up so I could run Cannon Fodder.
Wow, someone who actually knows what he's talking about 🥰 no one ever mentions the undocumented 286 calls 🎉 subbed bc i was there, too 😅
Now that's a great video. These days programming is relatively easy. Guys and gals who programmed DOS era PCs were just built different to deal with this segmented nonsense and zero process isolation and protection features.
Good video except for one problem
XENIX IS NOT LINUX. Xenix is a sublicensed version of AT&T Unix because AT&T was under antitrust limitations. Linux is a kernel licensed under GPLv2.
actually i think it was pronounciation, he did say Xenix it just sounded like Linux
I thought I clearly pronounced Unix at 10:01 and the subtitles also show "Unix variant", where did you get Linux from?
@@TimberwolfK "A version of Microsoft's own Unix variant, Linux"
Microsoft never touched the Linux kernel in the 80s, that's because it didn't exist. MS only got involved in Linux today with Azure, WSL and various projects within FreeDesktop.
Hmm, I definitely hear that as "Xenix" (and it's in the subtitles).
ETA: ah, I see you've noticed the same. Unfortunate with all those OS names not a million miles from each other!
I used QEMM back in the day a fair bit, it seemed to work a little better than Memmaker. Why actually, what was special about it?
Interesting question. I noticed while playing around with Memmaker that it struggled on the most aggressive settings to produce a stable configuration, which limited me to around 610-620K (which I think is about where my 486 with CD-ROM and soundcard also topped out in the day). Possibly Quarterdeck did more testing and had some smarter approaches at the limit to move the last few reluctant things into UMBs.