werme@Alliant.COM (Ric Werme) (07/26/89)
In article <30191@ucbvax.BERKELEY.EDU> muir@postgres.Berkeley.EDU (David Muir Sharnoff) writes: >In article <3893@phri.UUCP> roy@phri.UUCP (Roy Smith) writes: >> I always wanted to try (I don't know why I never did) using >>auto-decrement mode on r7 (i.e. the pc). I wonder what would happen? > >How about ... > > mov -(pc), -(pc) Whenever I wanted to wipe out memory on a PDP-11, I'd deposit this instruction at the high end and hit start. If you didn't blink, you could watch the PC run backward. How about: jsr pc,@pc foo: <subroutine> which was a handy way to call foo twice with only an additional word of code. One thing I did just for the shear perversity of it was to add a number to the PC. I had a routine that did a table lookup sine function. I needed to run an 11/20 (meaning I had integer add/sub, but nothing higher). The table had one entry per degree, but I wanted to interpolate down to 1/8 degree. The table was 14 bit, fixed point data, so I came up with something like: (I wrote the original over 15 years ago, and my memory is fading, so no flames if there's a bug here!) mov r0,r1 ;Copy angle (in 1/8ths degree) (e.g. 32 3/8) and #177770,r1 ;Isolate degrees (e.g 32) asr r1 ;Shift to use as index asr r1 mov sine(r1),r2 ;Get sine (e.g. sin(32)) mov sine+2(r1),r1 ;Get next sine (e.g. sin(33)) sub r1,r2 ;Get negative the distance between them asr r2 ;Divide by 8 for distance of 1/8th asr r2 asr r2 and #7,r0 ;Isolate 1/8ths to interpolate (e.g. 3/8) asl r0 ;Shift to size of sub r2,r1 instructions add r0,pc ;Jump to right interpolation point add r2,r1 ;Interpolate by backing up add r2,r1 add r2,r1 add r2,r1 ;(e.g. here for 3/8) add r2,r1 add r2,r1 add r2,r1 add r2,r1 rts pc ;Return sine in r1 I also tried writing it without the add to the PC, and came up with something an instruction or two shorter, a pity, because this was the only use I ever came up with for math to the PC. Of course, I kept this version in the final program! Also - no flames for the questionable precision of the interpolation. The output was for a 1024x1024 vector display and the above code would give at least 11 bits of accuracy and I only needed 10.-- | A pride of lions | Eric J Werme | | A gaggle of geese | uucp: decvax!linus!alliant | | An odd lot of programmers | Phone: 603-673-3993 |