I received Visual Studio 1.52 from an Ebay order a
couple of days ago. I also got Visual Studio 1.0 on
3.5" floppy disks.
Anyway, here is an executable from 1.52:
D:\scratch\zzz>hexdump \msvc15\bin\cl.exe | more
000000 4D5A8000 33000E00 08004102 FFFF6106 MZ..3.....A...a.
000010 00200000 18212000 40000000 00000000 . ...! .@.......
000020 00000000 00000000 00000000 00000000 ................
000030 00000000 00000000 00000000 80660000 .............f..
000040 3C000000 40000000 44000000 48000000 <...@...D...H...
000050 4C000000 0400ED04 ED0D2000 6A0DED04 L......... .j...
000060 6E0DED04 18000506 26212000 FF212000 n.......&! ..! .
000070 0000E804 E30DED04 00000000 00000000 ................
000080 436F7079 72696768 74202843 29203139 Copyright (C) 19
000090 38362D31 39393120 50686172 204C6170 86-1991 Phar Lap
0000A0 20536F66 74776172 652C2049 6E632E00 Software, Inc..
0000B0 00004335 53325332 504D0000 0000DC4F ..C5S2S2PM.....O
0000C0 0000DE51 0000EA51 0000F651 00007652 ...Q...Q...Q..vR
0000D0 00000000 00000000 00000000 00000000 ................
0000E0 00000000 00000000 00000000 00000000 ................
0000F0 00000000 00000000 00001C2E 4101DC7C ............A..|
000100 A8B55860 D138D2BC 161CA36C 348395DD ..X`.8.....l4...
000110 0778A1B9 AC4705EE 7D7D3BA7 18E40150 .x...G..}};....P
000120 598A5396 5ABA6B64 7901C7E6 512A2288 Y.S.Z.kdy...Q*".
000130 BE4079F7 DC92061D 08A94728 DD53F784 .@y.......G(.S..
I was surprised to find that this ran under Windows 10.
I thought that Windows 10 had no 16-bit support and
only ran PE executables. But I don't see any PE
signature.
According to this:
https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B#16-bit_versions
Visual C++ 1.0 came with Phar Lap 286.
No mention of whether 1.52 switched to Phar Lap 386.
Also it is unclear to me whether my CDROM is 1.52
or 1.52c. I don't know how to tell the difference.
Also, it has huge memory model support:
D:\scratch\zzz>type foo.c
char *foo(char *x, long y)
{
return (x + y);
}
D:\scratch\zzz>cl /AH /Fa /c /Gs foo.c
Microsoft (R) C/C++ Optimizing Compiler Version 8.00c
Copyright (c) Microsoft Corp 1984-1993. All rights reserved.
foo.c
D:\scratch\zzz>type foo.asm
; File foo.c
; Line 2
; x = 0006
; y = 000a
_foo:
push bp
mov bp,sp
sub sp,OFFSET L00106
push si
push di
; Line 3
mov ax,WORD PTR 10[bp]
mov dx,WORD PTR 12[bp]
mov cx,WORD PTR 6[bp]
mov bx,WORD PTR 8[bp]
add ax,cx
adc dx,OFFSET 0
mov cx,OFFSET __AHSHIFT
shl dx,cx
add dx,bx
jmp L00105
; Line 4
; Line 4
L00105:
pop di
pop si
mov sp,bp
pop bp
ret OFFSET 0
D:\scratch\zzz>
Microsoft C++ 5.1 which I also recently received on floppy
disks has huge pointer support, but not huge memory model.
ie I have to use the "huge" keyword everywhere.
So this is good.
But unfortunately the method of doing huge pointers
effectively hardcodes a 4-bit shift into executables.
Unlike Watcom, that simply calls an external routine
and you are free to put in a more complicated pointer
manipulation algorithm suitable for an appropriate
PM16 OS.
Also, I don't know how to assemble that assembler.
D:\scratch\zzz>ml foo.asm
Microsoft (R) Macro Assembler Version 6.15.8803
Copyright (C) Microsoft Corp 1981-2000. All rights reserved.
Assembling: foo.asm
foo.asm(5) : error A2034: must be in segment block
foo.asm(6) : error A2034: must be in segment block
foo.asm(7) : error A2034: must be in segment block
foo.asm(8) : error A2034: must be in segment block
foo.asm(9) : error A2034: must be in segment block
foo.asm(10) : error A2034: must be in segment block
foo.asm(12) : error A2034: must be in segment block
foo.asm(13) : error A2034: must be in segment block
foo.asm(14) : error A2034: must be in segment block
foo.asm(15) : error A2034: must be in segment block
foo.asm(16) : error A2034: must be in segment block
foo.asm(17) : error A2034: must be in segment block
foo.asm(18) : error A2034: must be in segment block
foo.asm(19) : error A2034: must be in segment block
foo.asm(20) : error A2034: must be in segment block
foo.asm(21) : error A2034: must be in segment block
foo.asm(24) : error A2034: must be in segment block
foo.asm(25) : error A2034: must be in segment block
foo.asm(26) : error A2034: must be in segment block
foo.asm(27) : error A2034: must be in segment block
foo.asm(28) : error A2034: must be in segment block
foo.asm(29) : error A2034: must be in segment block
foo.asm(29) : error A2088: END directive required at end of file
D:\scratch\zzz>
Any idea what I've scored?
My hope was that I could use this to build the
io.sys (16/32-bit) of PDOS/386, and the entire
PDOS/86. I was surprised that masm doesn't
appear to come with Visual Studio 1.52.
Although checking the physical CD I don't see
any mention of "professional", so maybe that
is why.
Thanks. Paul. |