koreth%panarthea.ebay@sun.com (Steven Grimm) (08/21/89)
Submitted-by: SQ79%liverpool.ac.uk@NSFnet-Relay.AC.UK (Mark Powell)
Posting-number: Volume 2, Issue 80
Archive-name: mandel
Here is the source to the Mandelbrot generator that has just been posted
to the binaries newsgroup. Sorry about the lack of comments, but thats
just the sloppy way I program.
Mark Powell
ARPAnet : sq79%liv.ac.uk@{ucl-cs.arpa,cs.ucl.ac.uk}
USENET : ...!mcvax!ukc!liv.ac.uk!sq79
---------------------cut here------------------------------------------
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of shell archive."
# Contents: MANDEL.S
# Wrapped by koreth@panarthea on Sun Aug 20 15:06:22 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'MANDEL.S' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'MANDEL.S'\"
else
echo shar: Extracting \"'MANDEL.S'\" \(17097 characters\)
sed "s/^X//" >'MANDEL.S' <<'END_OF_FILE'
X
Xtemp equ $30
X
X move.l 4(sp),a5
X move.l #end+4096,d0
X move.l a5,d1
X add.l d0,d1
X bclr #0,d1
X move.l d1,sp
X move.l d0,-(sp)
X move.l a5,-(sp)
X pea $4a0000
X trap #1
X lea 12(sp),sp
X tst d0
X beq.s okay
X
X lea nomem(pc),a1
X bsr prmes
X bsr anykey
X bra exit
X
Xokay clr.l -(sp)
X move #32,-(sp)
X trap #1
X addq.l #6,sp
X move.l d0,oldssp
X
X dc.w $a00a
X
X movem.l $8240.w,d0-d7
X movem.l d0-d7,oldpal
X
X pea -1.w
X move.l (sp),-(sp)
X move.l (sp),-(sp)
X move #16,-(sp)
X trap #14
X lea 14(sp),sp
X move.l d0,a0
X move.l 8(a0),keytable
X
X move #2,-(sp)
X trap #14
X addq.l #2,sp
X move.l d0,phybase
X move #3,-(sp)
X trap #14
X addq.l #2,sp
X move.l d0,logbase
X
X move #4,-(sp)
X trap #14
X addq.l #2,sp
X move d0,oldres
X cmp #2,d0
X bne.s colour
X
X lea nomono(pc),a1
X bsr prmes
X bsr anykey
X bra exit1
X
Xcolour clr -(sp)
X pea -1.w
X move.l (sp),-(sp)
X move #5,-(sp)
X trap #14
X lea 12(sp),sp
X
X move #$2700,sr
X move.l $fa06.w,oldier
X clr.b $fa07.w
X move.b #$40,$fa09.w
X bclr #6,$fa0d.w
X bclr #6,$fa11.w
X bset #6,$fa15.w
X move.l $118.w,oldkeyb
X move.l #keybrd,$118.w
X move.l $456.w,a0
X move.l (a0),oldvblq
X move.l #vbl,(a0)
X move.l #palette,$45a.w
X move #$2300,sr
X
X lea keydat(pc),a0
X moveq #3-1,d0
X bsr sendikbd
X
Xdrawfull
X move.l #$a0000000,a3
X move.l #$c0000000,a4
X move.l #$a3d70a,a1
X
X bsr mandel
X
X bsr mouseon
X
X* Main loop
X
Xmain bsr wvbl
X
X move keys(pc),d0
X
X cmp #$13,d0 'r' redraw current
X beq domand
X cmp #1,d0 esc exit from program
X beq desktop
X cmp #$17,d0 'i' alter iterations
X bne noti
X
X* Alter iteration
X
X movem.l a1/a3/a4,-(sp)
X bsr screendown
X lea inpmes(pc),a1
X bsr prmes
X
Xwni cmp #$17,keys
X beq.s wni
X
X lea inpbuf(pc),a5
X move.l a5,a6
Xnokey move keys(pc),d7
X cmp #$74,d7
X bge.s nokey
X move.l keytable(pc),a0
X move.b 0(a0,d7),d1
X beq.s nokey
X cmp.b #13,d1
X beq.s return
X cmp.b #8,d1
X beq.s delete
X cmp.l #inpbuf+10,a6
X beq.s nokey
X cmp.b #'0',d1
X blt.s nokey
X cmp.b #'9',d1
X bgt.s nokey
X move.b d1,(a6)+
X move d1,d0
X bsr prchar
Xwaitnk cmp keys(pc),d7
X beq.s waitnk
X bra.s nokey
X
Xdelete cmp.l a5,a6
X beq.s nokey
X subq.l #1,a6
X lea delmes(pc),a1
X bsr prmes
X bra.s waitnk
X
Xreturn cmp.l a5,a6 anything in the buffer?
X beq.s restscr if not then leave iterations unchanged
X
X moveq #0,d0
X moveq #0,d1
Xnxtchar move.b (a5)+,d0
X sub #'0',d0
X move.l d1,d2
X add.l d1,d1
X add.l d1,d1
X add.l d2,d1
X add.l d1,d1
X add.l d0,d1
X cmp.l a5,a6
X bne.s nxtchar
X move.l d1,iterations+2
X
Xrestscr moveq #27,d0 put screen back up
X bsr prchar
X moveq #'f',d0
X bsr prchar
X bsr screenup
X movem.l (sp)+,a1/a3/a4
X
Xnoti cmp #$21,d0 'f' draw full set
X bne.s notf
X
X bsr mouseoff
X bra drawfull
X
Xnotf cmp #$61,d0 'undo' redraw last picture
X bne.s notundo
X
X movem.l lastmand(pc),a1/a3/a4
X bra domand
X
Xnotundo cmp #$2d,d0
X bne.s notx
X
X move.l a1,-(sp)
X bsr screendown
X lea xmes(pc),a1
X bsr prmes
X move.l a3,d0
X bsr prhex32
X bsr space
X move.l a4,d0
X bsr prhex32
X bsr space
X move.l (sp),d0
X bsr prhex32
X bsr space
Xwaitnx cmp #$2d,keys
X beq.s waitnx
Xwaitkey tst keys
X beq.s waitkey
X bsr screenup
X move.l (sp)+,a1
X
Xnotx cmp #$39,d0 space
X bne main
X
X moveq #0,d4
X move box_width(pc),d4
X move.l a1,d0
X move d0,d1
X mulu d4,d1
X swap d0
X mulu d4,d0
X swap d0
X clr d0
X add.l d0,d1
X
X* divide d1 by 200
X move.l #200,d5
X moveq #0,d2
X moveq #32-2,d3
X addq #1,d3
Xdivlp addx.l d1,d1
X addx.l d2,d2
X sub.l d5,d2
X bcc.s subok
X add.l d5,d2
Xsubok eor #$10,sr
X dbra d3,divlp
X addx.l d1,d1
X tst.l d1
X bne.s zoomok
X
X move #$2700,sr
X not $8240.w
X lea $8800.w,a0
X lea beepdat(pc),a2
X moveq #7-1,d0
Xsndlp move (a2)+,d1
X movep d1,0(a0)
X dbra d0,sndlp
X not $8240.w
X move #$2300,sr
X bra main
X
Xzoomok movem.l a1/a3/a4,lastmand
X
X move mousex(pc),d2 Calculate top left corner of box, position
X move mousey(pc),d3 in d2,d3
X sub d4,d3
X lsl #3,d4
X divu #5,d4
X sub d4,d2
X
X move.l a1,d4
X move d4,d5
X mulu d2,d5
X swap d4
X mulu d2,d4
X swap d4
X clr d4
X add.l d4,d5
X add.l d5,a3 a3=a3+x*a1
X
X move.l a1,d4
X move d4,d5
X mulu d3,d5
X swap d4
X mulu d3,d4
X swap d4
X clr d4
X add.l d4,d5
X add.l d5,a4 a4=a4+y*a1
X
X move.l d1,a1
X
Xdomand bsr mouseoff
X
X bsr.s mandel
X
X bsr mouseon
X bra main
X
X*
X* Display portion of Mandelbrot set with top left corner a3+a4i
X* height and width a1*200
X*
X
Xmandel movem.l a1/a3/a4/a7,regstor
X move #1,manding
X
X move.l $44e.w,a5
X
X lea 200*160(a5),a6
X move.l a6,compare+2
X
X move.l a4,d4 bc=sy
X moveq #2-1,d0
Xrow2lp move d0,-(sp)
X move.l a3,d3 ac=sx
X bsr calculate
X lea store1(pc),a2
X move d1,(a2)+
X add.l a1,d3
X bsr calculate
X move d1,(a2)+
X
X move #318/2-1,d7
Xpairlp add.l a1,d3
X move.l d3,d2
X add.l a1,d3
X bsr calculate
X move d1,2(a2)
X cmp -2(a2),d1
X beq.s same
X exg d3,d2
X bsr calculate
X move d1,(a2)
X move.l d2,d3
X bra.s nxt1
Xsame move d1,(a2)
Xnxt1 addq.l #4,a2
X dbra d7,pairlp
X
X lea store1(pc),a2
X moveq #20-1,d0
Xwordlp move d0,-(sp)
X moveq #16-1,d2
Xbitlp move (a2)+,d1
X lsr #1,d1
X roxl #1,d0
X lsr #1,d1
X roxl #1,d5
X lsr #1,d1
X roxl #1,d6
X lsr #1,d1
X roxl #1,d7
X dbra d2,bitlp
X move d0,(a5)+
X move d5,(a5)+
X move d6,(a5)+
X move d7,(a5)+
X move (sp)+,d0
X dbra d0,wordlp
X
X add.l a1,d4
X move (sp)+,d0
X dbra d0,row2lp
X
X lea store2(pc),a2
X lea store1(pc),a4
X*
X* Calculate lines in pairs
X*
X
Xpair2lp movem.l d4/a2/a4,-(sp)
X add.l a1,d4
X
X move.l a3,d3 ac=sx
X bsr calculate
X move d1,(a2)+
X add.l a1,d3
X bsr calculate
X move d1,(a2)+
X
X move #318/2-1,d7
Xpairlp0 add.l a1,d3
X move.l d3,d2
X add.l a1,d3
X bsr calculate
X move d1,2(a2)
X cmp -2(a2),d1
X beq.s same0
X exg d3,d2
X bsr calculate
X move d1,(a2)
X move.l d2,d3
X bra.s nxt10
Xsame0 move d1,(a2)
Xnxt10 addq.l #4,a2
X dbra d7,pairlp0
X
X move.l 4(sp),a2
X move.l a5,a6
X lea 160(a5),a5
X moveq #20-1,d0
Xwordlp0 move d0,-(sp)
X moveq #16-1,d2
Xbitlp0 move (a2)+,d1
X lsr #1,d1
X roxl #1,d0
X lsr #1,d1
X roxl #1,d5
X lsr #1,d1
X roxl #1,d6
X lsr #1,d1
X roxl #1,d7
X dbra d2,bitlp0
X move d0,(a5)+
X move d5,(a5)+
X move d6,(a5)+
X move d7,(a5)+
X move (sp)+,d0
X dbra d0,wordlp0
X
X move.l (sp)+,d5
X movem.l (sp),a2/a4
X move.l d4,-(sp)
X move.l d5,d4
X move.l a3,d3
X moveq #20-1,d0
Xwordlp1 move d0,-(sp)
X moveq #16-1,d2
Xbitlp1 move (a2)+,d1
X cmp (a4)+,d1
X beq.s same1
X bsr.s calculate
Xsame1 add.l a1,d3
X lsr #1,d1
X roxl #1,d0
X lsr #1,d1
X roxl #1,d5
X lsr #1,d1
X roxl #1,d6
X lsr #1,d1
X roxl #1,d7
X dbra d2,bitlp1
X move d0,(a6)+
X move d5,(a6)+
X move d6,(a6)+
X move d7,(a6)+
X move (sp)+,d0
X dbra d0,wordlp1
X
X movem.l (sp)+,d4/a2/a4
X exg a2,a4
X add.l a1,d4
X
Xcompare cmp.l #0,a5
X bne pair2lp
X
Xmandout clr manding
X movem.l regstor(pc),a1/a3/a4/a7
X rts done mandelbrot
X
X
X* Calculate point at d3+d4i
X
Xcalculate
X movem.l d0/d2-d7,-(sp)
X
X move.l d3,d5
X move.l d4,d6
X sub.l a0,a0
X
Xcalc move.l d5,d2
X bsr square
X bmi.s out_of_range
X move.l d2,(temp).w
X move.l d6,d2
X bsr square
X bmi.s out_of_range
X move.l (temp).w,d1
X add.l d2,d1
X bcs.s done
X cmp.l #$80000000,d1
X bcc.s out_of_range
Xiterations
X cmp.l #100,a0
X beq.s done
X add.l d6,d6
X bsr multiply
X add.l d4,d6
X move.l (temp).w,d5
X sub.l d2,d5
X add.l d3,d5
X addq #1,a0
X bra.s calc
X
Xout_of_range
X moveq #0,d1
X move a0,d1
X divu #15,d1
X swap d1
X addq #1,d1
X movem.l (sp)+,d0/d2-d7
X rts
X
Xdone moveq #0,d1
X movem.l (sp)+,d0/d2-d7
X rts
X
X* Square a number in d2
X
Xsquare movem.l d3/d4,-(sp)
X tst.l d2
X bpl.s splus
X neg.l d2
Xsplus moveq #0,d0
X moveq #0,d1
X move.l d2,d3
X moveq #0,d4
X
X move d2,d3
X move d2,d0
X mulu d2,d0
X swap d2
X move d2,d1
X mulu d2,d1
X mulu d2,d3
X swap d3
X moveq #0,d4
X move d3,d4
X clr d3
X add.l d3,d0
X addx.l d4,d1
X add.l d3,d0
X addx.l d4,d1
X
X rol.l #3,d0
X and #7,d0
X cmp.l #$10000000,d1
X bcc.s overflow
X lsl.l #3,d1
X or d0,d1
X move.l d1,d2
X movem.l (sp)+,d3/d4
X rts
X
Xoverflow
X moveq #-1,d0
X movem.l (sp)+,d3-d4
X rts
X
X* Multiply d6 by d5
X
Xmultiply
X movem.l d2-d4,-(sp)
X
X moveq #0,d3
X move.l d5,d2
X
X tst.l d2
X bpl.s d2plus
X moveq #1,d3
X neg.l d2
Xd2plus tst.l d6
X bpl.s d6plus
X eor #1,d3
X neg.l d6
Xd6plus moveq #0,d0
X moveq #0,d1
X moveq #0,d4
X move d3,-(sp)
X
X move d2,d7
X move d2,d0
X mulu d6,d0
X swap d2
X move d2,d3
X mulu d6,d3
X swap d6
X move d2,d1
X mulu d6,d1
X swap d3
X moveq #0,d4
X move d3,d4
X clr d3
X add.l d3,d0
X addx.l d4,d1
X mulu d6,d7
X swap d7
X move d7,d4
X clr d7
X add.l d7,d0
X addx.l d4,d1
X
X rol.l #3,d0
X and #7,d0
X lsl.l #3,d1
X or d0,d1
X move.l d1,d6
X move (sp)+,d2
X tst d2
X beq.s mokay
X neg.l d6
Xmokay movem.l (sp)+,d2-d4
X rts
X
X
X* Various routines
X
Xscreendown
X move.l phybase(pc),a0
X lea -1280(a0),a0
X move #-1,-(sp)
X pea (a0)
X pea (a0)
X move #5,-(sp)
X trap #14
X lea 12(sp),sp
X rts
X
Xscreenup
X move #-1,-(sp)
X move.l phybase(pc),-(sp)
X move.l (sp),-(sp)
X move #5,-(sp)
X trap #14
X lea 12(sp),sp
X rts
X
Xprhex32 move d0,-(sp)
X swap d0
X bsr.s prhex16
X move (sp)+,d0
Xprhex16 move d0,-(sp)
X lsr #8,d0
X bsr.s prhex8
X move (sp)+,d0
Xprhex8 move d0,-(sp)
X lsr #4,d0
X bsr.s prhex4
X move (sp)+,d0
Xprhex4 and #$f,d0
X move.b hexdat(pc,d0),d0
X bra.s prchar
X
Xhexdat dc.b '0123456789ABCDEF'
X
Xspace moveq #32,d0
Xprchar move d0,-(sp)
X pea $30002
X trap #13
X addq.l #6,sp
X rts
X
Xprmes pea (a1)
X move #9,-(sp)
X trap #1
X addq.l #6,sp
X rts
X
Xanykey lea anymes(pc),a1
X bsr.s prmes
X pea $20002
X trap #13
X addq.l #4,sp
X rts
X
Xsendikbd
Xkeylp move.b (a0)+,d1
X bsr.s sendkb
X dbra d0,keylp
X rts
X
Xsendkb btst #1,$fc00.w
X beq.s sendkb
X move.b d1,$fc02.w
X rts
X
Xwvbl move.l $466.w,d0
Xwaitlp cmp.l $466.w,d0
X beq.s waitlp
X rts
X
Xmouseon movem.l d0-d7/a0-a6,-(sp)
X bsr drawbox
X bsr drawm
X move.l mousex(pc),nmousex
X movem.l (sp)+,d0-d7/a0-a6
X move #1,mouse
X rts
X
Xmouseoff
X clr mouse
X movem.l d0-d7/a0-a6,-(sp)
X bsr undraw
X bsr undrawbox
X movem.l (sp)+,d0-d7/a0-a6
X rts
X
X
X* Vertical blank handler
X
Xvbl move keys(pc),d0
X
X cmp #$32,d0 m set multi-colours
X bne.s notm
X
X movem.l palette(pc),d0-d7
X movem.l d0-d7,$8240.w
X
Xnotm cmp #$1f,d0 s set up single colours
X bne.s nots
X
X lea $8242.w,a0
X move.l #$7770606,(a0)+
X move.l #$7770606,(a0)+
X move.l #$7770606,(a0)+
X move.l #$7770606,(a0)+
X move.l #$7770606,(a0)+
X move.l #$7770606,(a0)+
X move.l #$7770606,(a0)+
X move #$777,(a0)
X
Xnots cmp #$2e,d0 c start cycling
X bne.s noc
X
X move #1,cycle
X move #5,tmpdel
X
Xnoc cmp #$2f,d0 v stop cycling
X bne.s notsp
X
X clr cycle
X
Xnotsp tst cycle
X beq.s nocyc
X
X cmp #$4e,d0 + on keypad speed up cycling
X bne.s notdec
X
X cmp #1,delay
X beq.s notdec
X subq #1,delay
X
Xnotdec cmp #$4a,d0 - on keypad slow down cycling
X bne.s notinc
X
X addq #1,delay
X
Xnotinc subq #1,tmpdel
X bne.s nocyc
X move delay(pc),tmpdel
X lea $8260.w,a0
X lea $825e.w,a1
X move (a1),d0
X move -(a1),-(a0)
X move -(a1),-(a0)
X move -(a1),-(a0)
X move -(a1),-(a0)
X move -(a1),-(a0)
X move -(a1),-(a0)
X move -(a1),-(a0)
X move -(a1),-(a0)
X move -(a1),-(a0)
X move -(a1),-(a0)
X move -(a1),-(a0)
X move -(a1),-(a0)
X move -(a1),-(a0)
X move -(a1),-(a0)
X move d0,(a1)
X
Xnocyc tst mouse
X beq nomouse
X
X bsr undraw
X bsr undrawbox
X
X move keys(pc),d0
X move.l nmousex(pc),d2
X move.l d2,d1
X swap d1
X cmp #$48,d0
X bne.s notup
X subq #1,d2
Xnotup cmp #$50,d0
X bne.s notdown
X addq #1,d2
Xnotdown cmp #$4b,d0
X bne.s notleft
X subq #1,d1
Xnotleft cmp #$4d,d0
X bne.s notrigh
X addq #1,d1
X
Xnotrigh tst d1 make sure d1 & d2 are on screen
X bpl.s kmxok
X clr d1
Xkmxok cmp #319,d1
X ble.s kmxok1
X move #319,d1
Xkmxok1 tst d2
X bpl.s kmyok
X clr d2
Xkmyok cmp #199,d2
X ble.s kmyok1
X move #199,d2
Xkmyok1 move d1,mousex
X move d2,mousey
X
X tst leftbutton
X beq.s nolb
X cmp #1,box_width
X beq.s nolb
X subq #1,box_width
Xnolb tst rightbutton
X beq.s norb
X cmp #100,box_width
X beq.s norb
X addq #1,box_width
X
Xnorb move box_width(pc),d5
X moveq #0,d6
X move d5,d6
X lsl #3,d6
X divu #5,d6
X cmp mousex(pc),d6
X ble.s mxokay
X move d6,mousex
Xmxokay cmp mousey(pc),d5
X ble.s myokay
X move d5,mousey
Xmyokay bsr drawbox
X bsr drawm
X move.l mousex(pc),nmousex
X
Xnomouse rts
X
X
Xdrawm moveq #0,d0
X move mousey(pc),d0
X move d0,d1
X add d0,d0
X add d0,d0
X add d1,d0
X lsl #5,d0
X move mousex(pc),d1
X move d1,d2
X lsr #1,d1
X and #$fff8,d1
X add d1,d0
X move.l phybase(pc),a0
X add.l d0,a0
X and #$f,d2
X lea trash(pc),a1
X move.l mousedatapnt(pc),a2
X move.l a0,(a1)+
X move #200,d3
X sub mousey(pc),d3
X cmp #16,d3
X ble.s fulsize
X moveq #16,d3
Xfulsize subq #1,d3
X move d3,(a1)+
X cmp #152,d1
X beq.s rightedge
Xdrawlp movem.l (a0),d4-d7
X movem.l d4-d7,(a1)
X lea 16(a1),a1
X moveq #0,d0
X move (a2)+,d0
X not d0
X swap d0
X lsr.l d2,d0
X not.l d0
X move.l a0,a4
X swap d0
X and d0,(a4)+
X and d0,(a4)+
X and d0,(a4)+
X and d0,(a4)+
X swap d0
X and d0,(a4)+
X and d0,(a4)+
X and d0,(a4)+
X and d0,(a4)+
X moveq #0,d0
X move (a2)+,d0
X swap d0
X lsr.l d2,d0
X or d0,8(a0)
X swap d0
X or d0,(a0)
X moveq #0,d0
X move (a2)+,d0
X swap d0
X lsr.l d2,d0
X or d0,10(a0)
X swap d0
X or d0,2(a0)
X lea 160(a0),a0
X dbra d3,drawlp
X rts
Xrightedge
X movem.l (a0),d4-d7
X movem.l d4-d7,(a1)
X lea 16(a1),a1
X move (a2)+,d0
X not d0
X lsr d2,d0
X not d0
X move.l a0,a4
X and d0,(a4)+
X and d0,(a4)+
X and d0,(a4)+
X and d0,(a4)+
X move (a2)+,d0
X lsr d2,d0
X or d0,(a0)
X move (a2)+,d0
X lsr d2,d0
X or d0,2(a0)
X lea 160(a0),a0
X dbra d3,rightedge
X rts
X
Xundraw lea trash(pc),a0
X move.l (a0)+,a1
X move (a0)+,d4
Xundrlp movem.l (a0)+,d0-d3
X movem.l d0-d3,(a1)
X lea 160(a1),a1
X dbra d4,undrlp
X rts
X
Xundrawbox
X move.l oldbxy(pc),d1
X bra.s db
X
Xdrawbox move.l mousex(pc),d1
X move.l d1,oldbxy
Xdb move.l d1,d0
X swap d0
X move box_width(pc),d2
X moveq #0,d3
X move d2,d3
X lsl #3,d3
X divu #5,d3
X
X move d1,d4
X add d1,d1
X add d1,d1
X add d4,d1
X lsl #5,d1
X move.l phybase(pc),a0
X add d1,a0
X move d0,d7
X and #$f,d7
X eor #$f,d7
X lsr #1,d0
X and #$fff8,d0
X add d0,a0 a0=address of bottom right corner of box
X move d2,d0
X add d0,d0
X add d0,d0
X add d2,d0
X lsl #5,d0
X neg d0
X lea 0(a0,d0),a2
X move d7,d6
X
X moveq #0,d1
Xhorizlp bset d7,d1
X subq #1,d3
X bmi.s donehor
X addq #1,d7
X cmp #16,d7
X bne.s horizlp
X moveq #0,d7
X eor d1,(a0)
X eor d1,0(a0,d0)
X moveq #0,d1
X subq.l #8,a0
X bra.s horizlp
X
Xdonehor eor d1,(a0)
X eor d1,0(a0,d0)
X
X add d0,a0
X cmp #8,d7
X bge.s upby
X addq.l #1,a0
X bra.s chkd6
Xupby and #7,d7
Xchkd6 cmp #8,d6
X bge.s upby1
X addq.l #1,a2
X bra.s vertlp
Xupby1 and #7,d6
X
Xvertlp lea 160(a0),a0
X lea 160(a2),a2
X subq #1,d2
X beq.s donever
X bchg d7,(a0)
X bchg d6,(a2)
X bra.s vertlp
X
Xdonever rts
X
X
X* Keyboard handler
X
Xkeybrd movem.l d0/d1/a0,-(sp)
X
Xagain move.b $fc00.w,d1
X btst #7,d1
X beq keyout
X btst #0,d1
X beq keyo
X
X moveq #0,d0
X move.b $fc02.w,d0
X tst length
X beq.s nopack
X
X move.l bufpnt(pc),a0
X move.b d0,(a0)+
X move.l a0,bufpnt
X subq #1,length
X bne keyo
X
X lea keybuf(pc),a0
X and.b #$fc,(a0)
X cmp.b #$f8,(a0)+
X bne keyo
X
X move.b (a0)+,d0
X ext d0
X add d0,nmousex
X move.b (a0)+,d0
X ext d0
X add d0,nmousey
X bra keyo
X
Xnopack cmp #$f6,d0
X blt.s akey
X
X lea keybuf(pc),a0
X move.b d0,(a0)+
X move.l a0,bufpnt
X sub #$f6,d0
X move.b lengths(pc,d0),d0
X move d0,length
X bra keyo
X
Xlengths dc.b 7,5,2,2,2,2,6,2,1,1
X
Xakey cmp #$52,d0 Test for mouse simulating keys
X beq.s leftb
X cmp #$74,d0
X bne.s notlon
Xleftb move #1,leftbutton
X bra keyo
Xnotlon cmp #$d2,d0
X beq.s lefto
X cmp #$f4,d0
X bne.s notloff
Xlefto clr leftbutton
X bra.s keyo
Xnotloff cmp #$47,d0
X beq.s rightb
X cmp #$75,d0
X bne.s notron
Xrightb move #1,rightbutton
X bra.s keyo
Xnotron cmp #$c7,d0
X beq.s righto
X cmp #$f5,d0
X bne.s notmkey
Xrighto clr rightbutton
X bra.s keyo
X
X* if not a mouse key then it's a keyboard key
X
Xnotmkey tst.b d0 Is it a on or off key
X bmi.s keyoff
X
X move keys(pc),lastkey
X move d0,keys
X bra.s keyo
X
Xkeyoff and #$7f,d0
X cmp keys(pc),d0 Is it current key going off
X bne.s notkeys
X
X move lastkey(pc),keys bring lastkey into current
X clr lastkey current key off
X bra.s keyo
X
Xnotkeys cmp lastkey(pc),d0
X bne.s keyo
X
X clr lastkey lastkey off
X
Xkeyo move leftbutton(pc),d0
X and rightbutton(pc),d0
X beq.s noexm
X
X tst manding
X beq.s noexm
X
X move.l #mandout,14(sp)
X
Xnoexm btst #5,d1
X beq.s keyout
X
X tst.b $fc02.w
X
Xkeyout btst #4,$fa01.w
X beq again
X
X movem.l (sp)+,d0/d1/a0
X bclr #6,$fa11.w
X rte
X
X* Return to desktop
X
Xdesktop move #$2700,sr
X move.l oldier(pc),$fa06.w
X move.l oldkeyb(pc),$118.w
X move.l $456.w,a0
X move.l oldvblq(pc),(a0)
X move #$2300,sr
X
X lea keydat1(pc),a0
X moveq #2-1,d0
X bsr sendikbd
X
X movem.l oldpal(pc),d0-d7
X movem.l d0-d7,$8240.w
X
Xexit1 move oldres(pc),-(sp)
X move.l phybase(pc),-(sp)
X move.l logbase(pc),-(sp)
X move #5,-(sp)
X trap #14
X lea 12(sp),sp
X move.l oldssp(pc),-(sp)
X move #32,-(sp)
X trap #1
X addq.l #6,sp
Xexit clr -(sp)
X trap #1
X
X
X* Various data
X
Xnomem dc.b 27,'EOut of memory',0
Xnomono dc.b 27,'EColour monitors only',0
Xanymes dc.b 13,10,13,10,'Press any key',0
Xinpmes dc.b 27,'e',27,'H',27,'b',1,27,'K'
X dc.b 'Enter number of iterations ',0
Xdelmes dc.b 8,32,8,0
Xxmes dc.b 27,'H',27,'K',27,'b',1,0
X
X even
X
Xmousedatapnt
X dc.l mousedata
Xmousedata
X dc.w $7F,$FF80,0,$7F,$FF80,$7F00,$FF,$FF00
X dc.w $7E00,$1FF,$FE00,$7C00,$3FF,$FC00,$7800,$1FF
X dc.w $FE00,$7400,$8FF,$F700,$6200,$1C7F,$E380,$4100
X dc.w $3E3F,$C1C0,$80,$FF1F,$E0,$40,$FF8F,$70
X dc.w $20,$FFC7,$38,$10,$FFE3,$1C,8,$FFF1
X dc.w 14,4,$FFFB,4,0,$FFFF,0,0
X
Xbox_width
X dc.w 60
X
Xmouse dc.w 0
Xkeys dc.w 0
Xlastkey dc.w 0
Xleftbutton dc.w 0
Xrightbutton dc.w 0
Xmousex dc.w 120
Xmousey dc.w 100
Xnmousex dc.w 0
Xnmousey dc.w 0
Xoldbxy dc.l 0
Xlength dc.w 0
Xbufpnt dc.l 0
Xkeybuf ds.b 8
Xkeydat dc.b 7,4,8
Xkeydat1 dc.b 7,0
X
Xoldier dc.l 0
Xoldkeyb dc.l 0
Xoldssp dc.l 0
Xoldvblq dc.l 0
Xoldres dc.w 0
Xphybase dc.l 0
Xlogbase dc.l 0
Xkeytable dc.l 0
X
Xbeepdat dc.w $068,$104,$b00,$c49,$d00,$810,$7fe
X
Xpalette dc.w $000,$072,$062,$153,$243,$234,$324,$415
X dc.w $414,$413,$412,$500,$410,$320,$241,$062
X
Xcycle dc.w 0
Xdelay dc.w 5
Xtmpdel dc.w 5
X
Xpattern dc.w $ffff
X
Xmanding dc.w 0
Xregstor ds.l 4
Xlastmand
X dc.l $a3d70a,$a0000000,$c0000000
X
Xinpbuf ds.b 10
X
Xoldpal
Xbuffer equ oldpal+32
Xtrash equ buffer+512
Xstore1 equ trash+300
Xstore2 equ store1+640
Xend equ store2+640
END_OF_FILE
if test 17097 -ne `wc -c <'MANDEL.S'`; then
echo shar: \"'MANDEL.S'\" unpacked with wrong size!
fi
# end of 'MANDEL.S'
fi
echo shar: End of shell archive.
exit 0