TIP: Click on subject to list as thread! ANSI
echo: os2prog
to: John Poltorak
from: Mike Bilow
date: 1995-06-08 16:38:48
subject: IBMs OS/2 Programming Books page (announcement)

John Poltorak wrote in a message to Mike Bilow:

 hl>> "Blain et al" and "Mastrianni" did get good
reviews in this
 hl>> echo.

 MB> calling the DevHelp API from C -- when IBM provides, at no additional
 MB> cost, their own DHCALLS.LIB as part of the DDK.

 MB> Mastrianni also decides to do things in ways directly opposite to the IBM
 MB> docs for no particular reason that I can understand.  For example,
 MB> Mastrianni says that DevHelp_VerifyAccess should be called before
 MB> DevHelp_Lock, while IBM says to call DevHelp_Lock before calling
 MB> DevHelp_VerifyAccess.  Using Mastrianni's method will cause a pointer
 MB> error in the application to pull Trap D, and will also run the risk of
 MB> verifying a selector that gets swapped out between the call to
 MB> DevHelp_VerifyAccess and the call to DevHelp_Lock.  The only reasonable
 MB> interpretation is that Mastrianni is clearly wrong, but he takes pains to
 MB> emphasize that he really does mean to contradict the IBM docs.

 JP> Is this Steve Mastrianni? I just came across an article by
 JP> him in Developer Connection News Vol 7. which is published
 JP> by IBM, so I would have thought IBM would have vetted him as
 JP> a reliable source of info... 

Corporate IBM thinks of him as the definitive expert on writing OS/2 device
drivers, but you will get a radically different impression if you talk to
the people who actually write the device drivers.

Nearly everyone who wants to write an OS/2 device driver buys Mastrianni's
book, "Writing OS/2 2.1 Device Drivers in C."  Among other
issues, his book is the only one available on the subject.  Then everyone
attempts to read the book and begins thinking that the subject must be
beyond them, because no one ever actually understands Mastrianni's book. 
Some people probably give up, but other people fight their way through.

Eventually, some people manage to get to the point where they can write
perfectly serviceable OS/2 device drivers.  I invested a lot of time in
reading the official IBM docs that come with the DDK, and I also spent a
lot of time tracing through the source code to the real OS/2 device drivers
provided on the DDK.  I also spent a lot of time learning things the hard
way, watching my drivers trap out and go nuts, methodically using the
debugging kernel to figure out why.

The opinions I formed in due course are these:

1.  Mastrianni's book is totally useless.  Much of it is an abbreviated
regurgitation of the official IBM docs, but the parts chosen to be
regurgitated have no rhyme or reason.  For example, the virtual device
helper API is explored in excruciating detail, but nowhere does Mastrianni
ever explain true fundamentals such as the difference between a
"virtual" and a "linear" address.

2.  The official IBM docs are remarkably good.  They are in reference form,
but they have very few inaccuracies and are quite reliable.

3.  There are several books which device driver writers would find useful,
and these are not obvious.  (I should probably sit down and compile a
list.)  For example, the most readable explanation of the protected mode
architecture is in Robert Hummel's "The Processor and
Coprocessor," usually considered a very specialized book aimed at
assembly language programmers.

4.  A lot of Mastrianni's popularity is pure economics.  When the IBM DDK
first came out (as the DDSK), it cost about US$300 per year.  IBM justified
this, believe it or not, by saying that they only expected to sell about
1000 subscriptions per year, and they had to recover costs somehow.  When
reason finally prevailed and the DDK became available as a US$75 add-on to
a DevCon subscription, Mastrianni's book ceased to be such a relative
bargain.  People buying Mastrianni's book as a cheaper alternative to the
IBM DDK are making a huge mistake.

5.  If someone ever does write a device driver book, they need to
concentrate on an architectural overview of OS/2 internals, not on the
DevHelp API.  How does memory work?  When and how do you lock and unlock
memory?  What are you really looking at with the debugging kernel?  What
arbitrary conventions are used inside OS/2?  What happens from the driver
point of view whan an application calls DosOpen(), DosRead(),
DosDevIOCtl(), and so on?  This is the stuff that is either lacking or
buried in the IBM docs.

-- Mike


---
* Origin: N1BEE BBS +1 401 944 8498 V.34/V.FC/V.32bis/HST16.8 (1:323/107)
SEEN-BY: 105/42 620/243 711/401 409 410 413 430 807 808 809 934 955 712/407
SEEN-BY: 712/515 628 704 713/888 800/1 7877/2809
@PATH: 323/107 150 3615/50 396/1 270/101 105/103 42 712/515 711/808 809 934

SOURCE: echomail via fidonet.ozzmosis.com

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.