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