Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.sys.acorn.programmer > #5983
| Date | 2020-02-19 08:35 +0000 |
|---|---|
| From | Matthew Phillips <spam2011m@yahoo.co.uk> |
| Newsgroups | comp.sys.acorn.programmer |
| Subject | Re: Subtracting times |
| Message-ID | <757ca84458.Matthew@sinenomine.freeserve.co.uk> (permalink) |
| References | <37f8364458.Alan.Adams@ArmX6.adamshome.org.uk> |
In message <37f8364458.Alan.Adams@ArmX6.adamshome.org.uk> on 18 Feb 2020 Alan Adams wrote: > My head is hurting. > > I need a BASIC routine to subtract one 5-byte time from another and return > a correctly signed result. > > Complications arise at the point where the low word goes from &7fffffff to > &80000000, and where the high byte increases. > > BASIC doesn't allow access to the carry or borrow from arithmetic > operations. > > I've developed the following which *seems* to work correctly. However I'm > not sure about all the edge cases. I don't think it's doing quite what you want it to do. From the above, my understanding is that you want a signed result, so that if stamp1% is three centiseconds bigger than stamp2% you want a positive number (listing the bytes in memory order): 03 00 00 00 00 and if stamp1% is three centiseconds less than stamp2% you want a negative result: FD FF FF FF FF I also take it that you want a five-byte result, but that in your use case four bytes would always contain the differences. > This is part of a timing system, Next February the high byte of times will > change from &57 to &58, and I would like this code to survive working > across this boundary. I need to reliably detect negative results, which > can occur if a spurious finish time pulse arrives before a start time. > > Subtract stamp2 from stamp1 and store the result in resultbuf. > ( Although the result is 5 bytes. the elapsed time will always be > contained in the low 4 bytes. This will only overflow after 1 year, 5 > months and 2 hours 27 minutes. The system doesn't meed to run for that > long. ) > > PROCsubstamp(resultbuf%,stamp1%,stamp2%) > LOCAL I%,J%,K%,L%,borrow% > borrow%=0 > FOR I%=0 TO3 > J%=stamp1%?I% > K%=stamp2%?I% > L%=J%-K%-borrow% > resultbuf%?I%=L%AND&FF > IF L% < 0 THEN borrow%=1 ELSE borrow%=0 > NEXT > I%=4 > J%=stamp1%?I% > K%=stamp2%?I% > L%=J%-K%-borrow% If you want a signed result, you need to remove the following three lines: > IF L% < 0 THEN > resultbuf%!0 = -(resultbuf%!0) > ENDIF If you want the absolute difference, so that in the above examples of stamp1% and stamp2% differing by 3 centiseconds you would always get 03 00 00 00 00 no matter which of the two was the larger value, you should retain the three lines above but change the following line to resultbuf%?I%=0 But that's only if you're sure the result fits in 4 bytes. > resultbuf%?I%=L%AND&FF > ENDPROC If you wnat a signed result, you can simplify by making the FOR-NEXT loop with I% run from 0 to 4 and lose all the lines after the NEXT. -- Matthew Phillips Durham
Back to comp.sys.acorn.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Subtracting times Alan Adams <alan@adamshome.org.uk> - 2020-02-18 11:55 +0000
Re: Subtracting times Jean-Michel <jmc.bruck@orange.fr> - 2020-02-18 19:11 +0100
Re: Subtracting times Steve Drain <steve@kappa.me.uk> - 2020-02-21 03:28 -0800
Re: Subtracting times Alan Adams <alan@adamshome.org.uk> - 2020-02-21 12:45 +0000
Re: Subtracting times Alan Adams <alan@adamshome.org.uk> - 2020-02-21 15:17 +0000
Re: Subtracting times Steve Drain <steve@kappa.me.uk> - 2020-02-22 10:37 +0000
Re: Subtracting times Steve Drain <steve@kappa.me.uk> - 2020-02-25 16:05 +0000
Re: Subtracting times Alan Adams <alan@adamshome.org.uk> - 2020-02-25 16:35 +0000
Re: Subtracting times Steve Drain <steve@kappa.me.uk> - 2020-02-27 17:10 +0000
Re: Subtracting times Steve Drain <steve@kappa.me.uk> - 2020-02-27 10:06 -0800
Re: Subtracting times Alan Adams <alan@adamshome.org.uk> - 2020-02-28 11:21 +0000
Re: Subtracting times jeffrey.a.doggett@gmail.com - 2020-04-22 12:00 -0700
Re: Subtracting times Martin <News03@avisoft.f9.co.uk> - 2020-04-23 00:07 +0100
Re: Subtracting times jeffrey.a.doggett@gmail.com - 2020-04-23 03:13 -0700
Re: Subtracting times Martin <News03@avisoft.f9.co.uk> - 2020-04-23 18:01 +0100
Re: Subtracting times "John Williams (News)" <UCEbin@tiscali.co.uk> - 2020-04-23 18:06 +0100
Re: Subtracting times jeffrey.a.doggett@gmail.com - 2020-04-23 11:18 -0700
Re: Subtracting times Martin <News03@avisoft.f9.co.uk> - 2020-04-23 21:23 +0100
Re: Subtracting times David Higton <dave@davehigton.me.uk> - 2020-04-24 15:24 +0100
Re: Subtracting times David Higton <dave@davehigton.me.uk> - 2020-04-23 20:57 +0100
Re: Subtracting times jgh@mdfs.net - 2020-02-23 17:39 -0800
Re: Subtracting times Steve Drain <steve@kappa.me.uk> - 2020-02-24 10:23 +0000
Re: Subtracting times Alan Adams <alan@adamshome.org.uk> - 2020-02-24 11:12 +0000
Re: Subtracting times Martin <News03@avisoft.f9.co.uk> - 2020-02-24 13:05 +0000
Re: Subtracting times Matthew Phillips <spam2011m@yahoo.co.uk> - 2020-02-19 08:35 +0000
Re: Subtracting times Alan Adams <alan@adamshome.org.uk> - 2020-02-19 10:03 +0000
Re: Subtracting times Sebastian Barthel <naitsabes@freenet.de> - 2020-02-19 13:04 +0000
Re: Subtracting times Alan Adams <alan@adamshome.org.uk> - 2020-02-19 16:41 +0000
Re: Subtracting times jgh@mdfs.net - 2020-02-19 12:01 -0800
Re: Subtracting times Matthew Phillips <spam2011m@yahoo.co.uk> - 2020-02-23 20:46 +0000
Re: Subtracting times Martin <News03@avisoft.f9.co.uk> - 2020-02-19 23:54 +0000
Re: Subtracting times Alan Adams <alan@adamshome.org.uk> - 2020-02-20 11:18 +0000
csiph-web