Re: the 640k quote
>>The limit was imposed by x86 hardware, along with such lovely programming pains such as 64k maximum segment size
Well 8086 had only 16 bit registers, so addressing more than 64KB would be an issue. OTOH you had 3+1(!) different segments (cs/ds/es,ss) at the same time and even SI/DI registers. 8086 was such a wealth compared to the 3-register 6502.
The flat address mode came with 80386 as segment registers became virtually unused. Technically 80386 can address 48 bit (albeit no board would support it).