home *** CD-ROM | disk | FTP | other *** search
- ;An example program to show the use of the BTST, the ASL, the AND,
- ;the LSL, the LSR, and the OR commands.
- ;Published with ShareWorld 7 - by Matthew Goode 27/9/96
- ;Try to work out how everything works, explanations will be given
- ;next time. An important skill to develope is being able to read
- ;other peoples code, and understand it.
- ;Note:Uses non-op friendly code, which should not be practised in real
- ;programs (IE:DON'T use memory address directly!). Also the loops used
- ;here are bad because they suck up processor time (and don't run at
- ;the same speed on all Amigas).
-
- ; -------------------------------------------------------------------
- ; ---------------------------Constants-------------------------------
-
-
- backgroundColourLoc = $dff180
- buttonInfoLoc = $bfe001
-
- ; -------------------------------------------------------------------
- ; -------------------------Main program------------------------------
-
-
- Start
- Move.l #100000,d0
- Move.l #4,d1
- Bsr MultiplyLong
-
- Cmp.l #400000,d2
- Bne noFlash ;Just checking that the routine works
- Bsr StrobeRedYellow
- ;Bsr StretchedStrobeBlue ;Try this one later
- noFlash
- move.l #0,d0 ;Set no error condition code
- Rts
-
- ; -------------------------------------------------------------------
- ; -------------------------Sub-routines------------------------------
-
- MultiplyLong
- ; A simple routine to take two long values (in d0,d1) and
- ;return (in d2) the product of these two values.
- ;Altered: d1,d2,d3
-
- Move.w #0,d3 ;D3 will become a 'bit counter'
- Move.l #0,d2
- loopML1
- Btst d3,d0
- beq NoSet ;Is bit 'd2' set?
- Set
- Add.l d1,d2
- NoSet
- Asl.l #1,d1 ;Multiply d1 by 2
- Add.w #1,d3
- Cmp.w #32,d3 ;Have we checked every bit?
- Bne loopML1
- Rts
-
- ; -------------------------------------------------------------------
-
- StrobeRedYellow
- ;Will strobe the background colour through various shades of green
- ;until the mouse button is pushed.
- ;An example of the And command, and shifting.
- ;Altered:d0,d1
-
- Move.w #0,d0 ;Our counter
- loopSRY1
- Add.w #1,d0
- And.w #%1111,d0 ;Increment our counter, keeping it within the
- ;range of 0-15
- Move.w d0,d1 ;Move d0 to workspace
- Lsl.w #4,d1 ;Shift value to 'green' area of an RGB value
- ;(bits 0-3 are blue, 4-7 are green, and 8-11 are red)
- Or.w #%111100000000,d1 ;Set Red component to full
- Move.w d1,backgroundColourLoc ;Set Background colour
- Btst #6,buttonInfoLoc ;Here we are testing the bit in memory that tells
- ;us information about the state of the left mouse
- ;button.
- ;If the bit is set it means the button is NOT pushed
- Bne loopSRY1
- Rts
-
- ; -------------------------------------------------------------------
-
- StretchedStrobeBlue
- ;Will strobe the background colour through various shades of blue
- ;until the mouse button is pushed.
- ;The pattern is streched out more that with StrobeGreen, try and
- ;see why? (Again explained next time).
- ;An example of the And command, and shifting.
- ;Altered:d0,d1
-
- Move.w #0,d0 ;Our counter
- loopSSB1
- Add.w #1,d0 ;Increment our counter.
-
- Move.w d0,d1 ;Move d0 to workspace
- Lsr.w #8,d1 ;Shift to make d0 much smaller (will only change every
- ;256 times this loop execute)
- And.w #%1111,d1 ;Increment our counter
- ;(bits 0-3 are blue, 4-7 are green, and 8-11 are red)
- Move.w d1,backgroundColourLoc ;Set Background colour
- Btst #6,buttonInfoLoc ;Here we are testing the bit in memory that tells
- ;us information about the state of the left mouse
- ;button.
- Bne loopSSB1
- Rts
-
-
-