BBS: Inland Empire Archive Date: 06-12-92 (06:12) Number: 199 From: PHIL HODGES Refer#: NONE To: ALL Recvd: NO Subj: Interrupts Conf: (2) Quik_Bas
In order to further myself as a programmer (and to prove to myself that you don't have to know C to use complicated DOS features), I went out and purchased a book called "MS-DOS Functions" by Ray Duncan. This book covers each system service accessed via interrupts 20H through 2FH along with a list of the params or args the service requires, the results it returns, etc. It's really a great book. Thing is, I'm not sure if I fully understand still how to use them. Looking at the online example for CALL INTERRUPT helped a little (but WHY did they use INT86OLD ???). Still, I'm not totally clear on this. Here's why I'm so confused. This is an example (don't remember where I got it) of how to check DOS version: '$INCLUDE: 'QB.BI' DIM Regs AS RegType Regs.ax = &H3000 CALL INTERRUPT(&H21, Regs, Regs) MajorVersion = Regs.ax MOD 256 MinorVersion = Regs.ax \ 256 PRINT USING "Current DOS version #!##"; MajorVersion; "."; MinorVersion The book says that 21H function 30H gets the DOS version number. From the above example I can conclude that the H is 00, therefore &H3000 is function 30H. Seems easy enough to understand. What I _don't_ understand is how the above code works. The book lists the returns as: AL = major version number AH = minor version number BH = original equipment manufacturers serial number BL:CX =24-bit user serial number (optional, OEM dependent) Anyone know enough about this to help me out a little? The book is really good...on the back it says "Whether you're a casual programmer or a professional assembly-language or C programmer..." Hehe..CASUAL? This book is for moderately advanced programmers at minimum. So... any help? {a little later} Well, this message is getting rather lengthy...I think I have a better grasp on it now! After a little tinkering, I figured out how to successfully use Int 21H, function 09H (display string...didn't want to start with something dangerous!).... ___--------------------------------------------------- 'TESTING INTERRUPTS (AGAIN) '$INCLUDE: 'QB.BI' DEFINT A-Z DIM SHARED InRegs AS RegTypeX, OutRegs AS RegTypeX CLS Strng$ = "This is ONLY a test!$" '$ necessary to terminate string InRegs.ds = VARSEG(Strng$) ' Load DS:DX with InRegs.dx = SADD(Strng$) ' address of Strng$ InRegs.ax = &H900 CALL INTERRUPTX(&H21, InRegs, OutRegs) ___--------------------------------------------------- Et voila! Now onto others...still, any help? ___ X SLMR 2.1a X Stack Overflow...WAY too much syrup! --- Maximus 2.00 * Origin: The Gamorian Vortex Project (1:105/601)
Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET