ghull@raider (Gordon Hull) (07/05/88)
It looks like Microsoft has introduced a potentially dangerous, and certainly exasperating, undocumented incompatibility between QuickBASIC 2.x - 3.0 and 4.0 regarding external assembly language routines. Here's a quick rundown of the situation and my analysis of same: One of the modules of a program I'm working on uses an assembly language routine (that I wrote) to quickly side-scroll characters on the CGA medium res. screen (320x200, 4 color). The routine is no big deal; it just computes some addresses and does a REPNZ MOVSW instruction for each scan line involved, with the direction flag cleared (forward move, for a left scroll), or set (backwards move, for a right scroll). The routine appeared to be working fine under 3.0. Then, several months later, as I was porting the module to 4.0, the right scroll suddenly and inexplicably caused the machine to crash. Cold. The left scroll still worked fine. I tried everything I could think of - recompiling the routine, re-linking it, and going over the code by hand several times. I could not find a bug. Frustrated and confused, I tried the BLOCKMOVE routine in ADVBAS 3.4 and a QuickBASIC routine to accomplish the scrolling; again, the right scroll hung the machine and the left scroll worked (albeit slowly). Then, a flash of inspiration hit me. I added a PUSHF instruction to the right scroll, and everything worked fine. The only conclusion that I can come to is that QB4 must have not have the direction flag set at the end of a machine language routine; it keeps it cleared and then doesn't bother to execute a CLD before its string moves. The manual, of course, says nothing about this. Has anybody else experienced the same problem? ________________________ Gordon Hull USENET: ghull@raider.UUCP FIDO: Gordon Hull at 1:116/12 USMAIL: Gordon Hull, 907 Kay St. Murfreesboro, TN 37130 FROM CommStuff IMPORT StdDisclaimer; ________________________ --- * Origin: Raiders Roost: Mid TN's FIRST FIDO<->UUCP GATEWAY ! (Opus 1:116/12) SEEN-BY: 116/12 -- ______ / / * Middle Tennessee's FIDO<->UUCP Gateway * (615) 896-7964 /_____/ ___ o ___ ___ ___ * Murfreesboro, Tennessee * / \ /__/ / / / /__ /__/ Bob Reineri - System Operator _/ \___/ /__/__/__/__/__ __/ \_ Mark Bailey - UUCP Project Mgr. UUCP: !{ames,osu-cis,rutgers,decwrl,mit-eddie}!killer!raider FIDO: 1:116/12