Date: Fri, 26 Jan 1996 03:11:49 -0501 (EST) From: Cuthalion / Sliced Bread To: Eli Zaretskii cc: djgpp AT delorie DOT com Subject: Re: Waiting for retraces........................................ Message-ID: MIME-Version: 1.0 On Thu, 25 Jan 1996, Eli Zaretskii wrote: > > Eventually I figured out what was wrong, after making a couple of > > really stupid mistakes (I tried a whole bunch of times, it stands to > > reason that some of the attempts will be really messed up.. :) The > > problem was that I was using -O3. Evidently, GCC took this to mean that > > I didn't expect the values of any hardware ports to change ever, and it > > was okay if it would cache them. Is this a problem with GCC in general, > > or the port to the Intel chips? (Can't it be told that some stuff, like > > hardware status, will change, without GCC changing it?) > The PC motherboard chipset is built in a way that prevents the CPU from > caching memory-mapped peripheral devices and I/O ports, so it cannot be a > caching problem. It might be that GCC has optimized out your code where > you read the ports. Usually, the way to tell it not to do this is to > declare the variable `volatile'. You didn't tell enough details to help > you more. For instance, what version of DJGPP are you using? did you use > inport/outport library functions? can you post some code fragments where > this happens? > The basic code was while((inportb(0x3DA)&8)!=1); I also tried: int temp = 0; while(temp & 8 != 1) temp = inportb(0x3DA); So, how come Csaba Beigl uses his own inport_b(port)? Does that have anything to do with this? Oh, I am using DJGPP v2.0b3, with (I think) beta 8 of CWSDPMI. > One thing that you should know is that -O3 inlines functions which were > declared inline. So if you, for example, are using inport/outport > function, it might be a problem with the way they are written or with the > way you use them (depends on your version of DJGPP and the actual code of > your program). > I have a near-satisfactory workaround - I isolated that function in a separate C file, which I can then compile on it's own. So all of my code except for the waiting gets optimized, which is really fine. /*********************************************************************** * Jesse Morris * cuth AT gryphon DOT ccs DOT brandeis DOT edu * jrmorris AT macalstr DOT edu * **************** Cuthalion / Sliced Bread ************************* \*********************************/