home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 623a.lha / TurboDEX / ExampleSources / vector.S < prev   
Text File  |  1992-03-22  |  10KB  |  417 lines

  1.     SECTION dex,CODE
  2.     LEA arraylabcoordinates,A0
  3.     MOVE.L A0,mainvarcoordinates
  4.     MOVE.L 4,A6            ; init + open libs
  5.     LEA dosname,A1
  6.     MOVEQ #33,D0           ; we need atleast kick 1.2
  7.     JSR -552(A6)           ; open dos.library
  8.     MOVE.L D0,mainvardosbase
  9.     BEQ backwherewecamefrom
  10.     MOVE.L A6,A5
  11.     MOVE.L D0,A6           ; get std output
  12.     JSR -60(A6)
  13.     MOVE.L A5,A6
  14.     MOVE.L D0,mainvarstdout
  15.     LEA graphicsname,A1
  16.     MOVEQ #33,D0           ; we need atleast kick 1.2
  17.     JSR -552(A6)           ; open graphics.library
  18.     MOVE.L D0,mainvargraphicsbase
  19.     BEQ backwherewecamefrom
  20.     LEA intuitionname,A1
  21.     MOVEQ #33,D0           ; we need atleast kick 1.2
  22.     JSR -552(A6)           ; open intuition.library
  23.     MOVE.L D0,mainvarintuitionbase
  24.     BEQ backwherewecamefrom
  25.     MOVE.L A7,savestack    ; save stack
  26.     BSR proglabmain        ; get going ...
  27. leaveprog:
  28.     MOVE.L savestack,A7    ; close down
  29.     MOVE.L 4,A6
  30.     MOVE.L mainvardosbase,A1
  31.     JSR -414(a6)           ; close dos.library
  32.     MOVE.L mainvargraphicsbase,A1
  33.     JSR -414(a6)           ; close graphics.library
  34.     MOVE.L mainvarintuitionbase,A1
  35.     JSR -414(a6)           ; close intuition.library
  36. backwherewecamefrom:
  37.     RTS
  38.     savestack: DC.L 0
  39. rdfdump:
  40.     MOVE.B  D0,(A3)+
  41.     ADDQ.L  #1,rdflenght
  42.     RTS
  43. rdflenght:
  44.     DC.L 0
  45. printf:
  46.     MOVE.L  D1,A0
  47.     LEA     rdfdump(pc),A2
  48.     MOVE.L  4,A6
  49.     MOVE.L  276(A6),A3
  50.     MOVE.L  58(A3),A3
  51.     MOVE.L  A3,A4
  52.     CLR.L   rdflenght
  53.     JSR     -522(A6)
  54.     MOVE.L  mainvarstdout(pc),D1
  55.     MOVE.L  A4,D2
  56.     MOVE.L  rdflenght(pc),D3
  57.     MOVE.L  mainvardosbase(pc),a6
  58.     JSR     -48(a6)
  59.     RTS
  60.  
  61. proglabinit:        ; PROC init()
  62.     BSR proglabmakedata        ; VOID makedata()
  63.     MOVEQ #90,D0        ; VOID view(90,13)
  64.     MOVE.W D0,viewvarx
  65.     MOVEQ #13,D0
  66.     MOVE.W D0,viewvary
  67.     BSR proglabview
  68.     MOVEQ #0,D0        ; screenadr1 := screen(screenx,screeny,2,0,' ')
  69.     MOVE.W mainvarscreenx(pc),D0
  70.     MOVE.W D0,proglabns+4
  71.     MOVEQ #0,D0
  72.     MOVE.W mainvarscreeny(pc),D0
  73.     MOVE.W D0,proglabns+6
  74.     MOVEQ #2,D0
  75.     MOVE.W D0,proglabns+8
  76.     MOVEQ #0,D0
  77.     MOVE.W D0,proglabns+12
  78.     LEA directtextlab0(pc),A0
  79.     MOVE.L A0,D0
  80.     MOVE.L D0,proglabns+20
  81.     BSR proglabscreen
  82.     MOVE.L D0,mainvarscreenadr1
  83.     MOVE.L mainvarscreenadr1(pc),D0        ; rast1 := screenadr1+84
  84.     ADD.L #84,D0
  85.     MOVE.L D0,mainvarrast1
  86.     MOVE.L mainvarscreenadr1(pc),D0        ; VOID setcolours(screenadr1)
  87.     MOVE.L D0,setcoloursvarrastport
  88.     BSR proglabsetcolours
  89.     MOVEQ #0,D0        ; screenadr2 := screen(screenx,screeny,2,0,' ')
  90.     MOVE.W mainvarscreenx(pc),D0
  91.     MOVE.W D0,proglabns+4
  92.     MOVEQ #0,D0
  93.     MOVE.W mainvarscreeny(pc),D0
  94.     MOVE.W D0,proglabns+6
  95.     MOVEQ #2,D0
  96.     MOVE.W D0,proglabns+8
  97.     MOVEQ #0,D0
  98.     MOVE.W D0,proglabns+12
  99.     LEA directtextlab1(pc),A0
  100.     MOVE.L A0,D0
  101.     MOVE.L D0,proglabns+20
  102.     BSR proglabscreen
  103.     MOVE.L D0,mainvarscreenadr2
  104.     MOVE.L mainvarscreenadr2(pc),D0        ; rast2 := screenadr2+84
  105.     ADD.L #84,D0
  106.     MOVE.L D0,mainvarrast2
  107.     MOVE.L mainvarscreenadr2(pc),D0        ; VOID setcolours(screenadr2)
  108.     MOVE.L D0,setcoloursvarrastport
  109.     BSR proglabsetcolours
  110.     MOVE.L mainvarscreenadr1(pc),D0        ; ENDPROC screenadr1*screenadr2
  111.     MULS mainvarscreenadr2+2(pc),D0
  112.     RTS
  113. proglabmain:        ; PROC main()
  114.     BSR proglabinit        ; suxxes := init()
  115.     MOVE.L D0,mainvarsuxxes
  116.     MOVE.L mainvarsuxxes(pc),D0        ; IF suxxes=0
  117.     CMP.L #0,D0
  118.     BNE endcmplabel0
  119.     MOVEM.L D2/D3,-(A7)
  120.     LEA directtextlab2(pc),A0
  121.     MOVE.L A0,D0
  122.     MOVE.L D0,D1
  123.     MOVE.L A7,A1
  124.     BSR printf
  125.     LEA 0(A7),A7
  126.     MOVEM.L (A7)+,D2/D3
  127.     BRA endendcmplabel0        ; ELSE
  128. endcmplabel0:
  129. mouselab2:        ; MOUSE
  130.     MOVEQ #0,D0        ; FOR frame,maxframe,0,-1
  131.     MOVE.W mainvarmaxframe(pc),D0
  132.     ADDQ.W #1,D0
  133.     MOVE.W D0,mainvarframe
  134. forlabel3:
  135.     SUBQ.W #1,mainvarframe
  136.     MOVE.L mainvarrast1(pc),D0        ; rast := rast1
  137.     MOVE.L D0,mainvarrast
  138.     MOVE.L mainvarscreenadr1(pc),D0        ; screen := screenadr1
  139.     MOVE.L D0,mainvarscreen
  140.     MOVE.L mainvaractual(pc),D0        ; IF actual=1
  141.     CMP.L #1,D0
  142.     BNE endcmplabel4
  143.     MOVE.L mainvarrast2(pc),D0        ; rast := rast2
  144.     MOVE.L D0,mainvarrast
  145.     MOVE.L mainvarscreenadr2(pc),D0        ; screen := screenadr2
  146.     MOVE.L D0,mainvarscreen
  147. endcmplabel4:        ; ENDIF
  148. endendcmplabel1:
  149.     MOVE.L mainvarrast(pc),D0        ; VOID SetRast(rast,0)
  150.     MOVE.L D0,A1
  151.     MOVEQ #0,D0
  152.     MOVE.L mainvargraphicsbase,A6
  153.     JSR -234(A6)
  154.     MOVEQ #1,D4        ; colour := 1
  155.     MOVEQ #0,D3        ; frameoffset := maxline*frame*8+coordinates
  156.     MOVE.W mainvarmaxline(pc),D3
  157.     MULS mainvarframe(pc),D3
  158.     ASL.L #3,D3
  159.     ADD.L mainvarcoordinates(pc),D3
  160.     MOVEQ #0,D7        ; DOWN line,maxline
  161.     MOVE.W mainvarmaxline(pc),D7
  162.     SUBQ #1,D7
  163. countlabel5:
  164.     MOVEQ #0,D2        ; lineoffset := line*8+frameoffset
  165.     MOVE.W D7,D2
  166.     ASL.L #3,D2
  167.     ADD.L D3,D2
  168.     MOVE.L mainvarrast(pc),D0        ; VOID SetAPen(rast,colour)
  169.     MOVE.L D0,A1
  170.     MOVE.L D4,D0
  171.     MOVE.L mainvargraphicsbase,A6
  172.     JSR -342(A6)
  173.     MOVE.L D2,D0        ; x := MINT(lineoffset)
  174.     MOVE.L D0,A0
  175.     MOVE.W (A0),D0
  176.     MOVE.W D0,D6
  177.     MOVE.L D2,D0        ; y := MINT(lineoffset+2)
  178.     ADDQ.L #2,D0
  179.     MOVE.L D0,A0
  180.     MOVE.W (A0),D0
  181.     MOVE.W D0,D5
  182.     MOVE.L mainvarrast(pc),D0        ; VOID Move(rast,x,y)
  183.     MOVE.L D0,A1
  184.     MOVEQ #0,D0
  185.     MOVE.W D6,D0
  186.     MOVEQ #0,D1
  187.     MOVE.W D5,D1
  188.     MOVE.L mainvargraphicsbase,A6
  189.     JSR -240(A6)
  190.     MOVE.L D2,D0        ; x := MINT(lineoffset+4)
  191.     ADDQ.L #4,D0
  192.     MOVE.L D0,A0
  193.     MOVE.W (A0),D0
  194.     MOVE.W D0,D6
  195.     MOVE.L D2,D0        ; y := MINT(lineoffset+6)
  196.     ADDQ.L #6,D0
  197.     MOVE.L D0,A0
  198.     MOVE.W (A0),D0
  199.     MOVE.W D0,D5
  200.     MOVE.L mainvarrast(pc),D0        ; VOID Draw(rast,x,y)
  201.     MOVE.L D0,A1
  202.     MOVEQ #0,D0
  203.     MOVE.W D6,D0
  204.     MOVEQ #0,D1
  205.     MOVE.W D5,D1
  206.     MOVE.L mainvargraphicsbase,A6
  207.     JSR -246(A6)
  208.     ADDQ.L #1,D4        ; INC 1,colour
  209.     MOVE.L D4,D0        ; IF colour>3
  210.     CMP.L #3,D0
  211.     BLE endcmplabel6
  212.     MOVEQ #1,D4        ; colour := 1
  213. endcmplabel6:        ; ENDIF
  214. endendcmplabel2:
  215.     DBRA D7,countlabel5        ; ENDDOWN
  216.     SUB.L #$10000,D7
  217.     BCC countlabel5
  218.     BTST #6,$bfe001        ; JUMPMOUSE exit
  219.     BEQ proglabexit
  220.     MOVE.L mainvarscreen(pc),D0        ; VOID ScreenToFront(screen)
  221.     MOVE.L D0,A0
  222.     MOVE.L mainvarintuitionbase,A6
  223.     JSR -252(A6)
  224.     MOVEQ #32,D0        ; DMACON := 32
  225.     MOVE.W D0,$DFF096
  226.     MOVEQ #1,D0        ; actual := 1-actual
  227.     SUB.L mainvaractual(pc),D0
  228.     MOVE.L D0,mainvaractual
  229.     MOVE.L #0,D0        ; ENDFOR
  230.     CMP.W mainvarframe,D0
  231.     BLT forlabel3
  232.     BTST #6,$bfe001        ; ENDMOUSE
  233.     BNE mouselab2
  234. endcmplabel1:        ; ENDIF
  235. endendcmplabel0:
  236. proglabexit:        ; exit:
  237.     BSR proglabcleanup        ; VOID cleanup()
  238.     MOVEQ #0,D0        ; ENDPROC
  239.     RTS
  240. proglabcleanup:        ; PROC cleanup()
  241.     MOVE.L mainvarscreenadr1(pc),D0        ; IF screenadr1?0
  242.     CMP.L #0,D0
  243.     BEQ endcmplabel7
  244.     MOVE.L mainvarscreenadr1(pc),D0        ; VOID CloseScreen(screenadr1)
  245.     MOVE.L D0,A0
  246.     MOVE.L mainvarintuitionbase,A6
  247.     JSR -66(A6)
  248. endcmplabel7:        ; ENDIF
  249. endendcmplabel3:
  250.     MOVE.L mainvarscreenadr2(pc),D0        ; IF screenadr2?0
  251.     CMP.L #0,D0
  252.     BEQ endcmplabel8
  253.     MOVE.L mainvarscreenadr2(pc),D0        ; VOID CloseScreen(screenadr2)
  254.     MOVE.L D0,A0
  255.     MOVE.L mainvarintuitionbase,A6
  256.     JSR -66(A6)
  257. endcmplabel8:        ; ENDIF
  258. endendcmplabel4:
  259.     MOVE.L #129,D0        ; VOID view(129,44)
  260.     MOVE.W D0,viewvarx
  261.     MOVEQ #44,D0
  262.     MOVE.W D0,viewvary
  263.     BSR proglabview
  264.     MOVEQ #0,D0        ; ENDPROC
  265.     RTS
  266. proglabmakedata:        ; PROC makedata()
  267.     LEA proglabvectordata,A0        ; adr := {vectordata}
  268.     MOVE.L A0,D7
  269.     MOVEQ #0,D5        ; dummy := 0
  270.     MOVEQ #0,D6        ; FOR count,0,5199
  271.     SUBQ.L #1,D6
  272. forlabel9:
  273.     ADDQ.L #1,D6
  274.     MOVE.L D7,D0        ; dummy := MCHAR(adr+count)
  275.     ADD.L D6,D0
  276.     MOVE.L D0,A0
  277.     MOVE.B (A0),D0
  278.     MOVE.W D0,D5
  279.     MOVE.L #255,D0        ; AND 255,dummy
  280.     AND.W D0,D5
  281.     MOVE.L D6,D0        ; MINT count*2+coordinates,dummy*2
  282.     ASL.L #1,D0
  283.     ADD.L mainvarcoordinates(pc),D0
  284.     MOVE.L D0,A1
  285.     MOVEQ #0,D0
  286.     MOVE.W D5,D0
  287.     ASL.L #1,D0
  288.     MOVE.W D0,(A1)
  289.     MOVE.L #5199,D0        ; ENDFOR
  290.     CMP.L D6,D0
  291.     BGT forlabel9
  292.     MOVEQ #0,D0        ; ENDPROC
  293.     RTS
  294. proglabview:        ; PROC view( x, y)
  295.     MOVE.L mainvarintuitionbase,A6        ; viewadr := ViewAddress()
  296.     JSR -294(A6)
  297.     MOVE.L D0,viewvarviewadr
  298.     MOVE.L viewvarviewadr(pc),D0        ; MINT viewadr+14, x
  299.     ADD.L #14,D0
  300.     MOVE.L D0,A1
  301.     MOVEQ #0,D0
  302.     MOVE.W viewvarx(pc),D0
  303.     MOVE.W D0,(A1)
  304.     MOVE.L viewvarviewadr(pc),D0        ; MINT viewadr+12, y
  305.     ADD.L #12,D0
  306.     MOVE.L D0,A1
  307.     MOVEQ #0,D0
  308.     MOVE.W viewvary(pc),D0
  309.     MOVE.W D0,(A1)
  310.     MOVE.L mainvarintuitionbase,A6        ; VOID RemakeDisplay()
  311.     JSR -384(A6)
  312.     MOVEQ #0,D0        ; ENDPROC
  313.     RTS
  314. proglabsetcolours:        ; PROC setcolours( rastport)
  315.     MOVE.L setcoloursvarrastport(pc),D0        ; viewadr := rastport+44
  316.     ADD.L #44,D0
  317.     MOVE.L D0,setcoloursvarviewadr
  318.     MOVE.L setcoloursvarviewadr(pc),D0        ; VOID SetRGB4(viewadr,0,0,0,0)
  319.     MOVE.L D0,A0
  320.     MOVEQ #0,D0
  321.     MOVEQ #0,D1
  322.     MOVEQ #0,D2
  323.     MOVEQ #0,D3
  324.     MOVE.L mainvargraphicsbase,A6
  325.     JSR -288(A6)
  326.     MOVE.L setcoloursvarviewadr(pc),D0        ; VOID SetRGB4(viewadr,1,5,5,15)
  327.     MOVE.L D0,A0
  328.     MOVEQ #1,D0
  329.     MOVEQ #5,D1
  330.     MOVEQ #5,D2
  331.     MOVEQ #15,D3
  332.     MOVE.L mainvargraphicsbase,A6
  333.     JSR -288(A6)
  334.     MOVE.L setcoloursvarviewadr(pc),D0        ; VOID SetRGB4(viewadr,2,15,5,5)
  335.     MOVE.L D0,A0
  336.     MOVEQ #2,D0
  337.     MOVEQ #15,D1
  338.     MOVEQ #5,D2
  339.     MOVEQ #5,D3
  340.     MOVE.L mainvargraphicsbase,A6
  341.     JSR -288(A6)
  342.     MOVE.L setcoloursvarviewadr(pc),D0        ; VOID SetRGB4(viewadr,3,15,15,5)
  343.     MOVE.L D0,A0
  344.     MOVEQ #3,D0
  345.     MOVEQ #15,D1
  346.     MOVEQ #15,D2
  347.     MOVEQ #5,D3
  348.     MOVE.L mainvargraphicsbase,A6
  349.     JSR -288(A6)
  350.     MOVEQ #0,D0        ; ENDPROC
  351.     RTS
  352. proglabscreen:        ; PROC screen( width, height, depth, mode, title)
  353.     LEA proglabns,A0        ; return := OpenScreen({ns})
  354.     MOVE.L A0,D0
  355.     MOVE.L D0,A0
  356.     MOVE.L mainvarintuitionbase,A6
  357.     JSR -198(A6)
  358.     MOVE.L D0,D7
  359.     MOVE.L D7,D0        ; ENDPROC return
  360.     RTS
  361.  
  362. mainvarscreenx: DC.W 400        ; screenx=400:INT,screeny=320:INT,maxframe=49:INT,maxline=26:INT
  363. mainvarscreeny: DC.W 320
  364. mainvarmaxframe: DC.W 49
  365. mainvarmaxline: DC.W 26
  366. mainvarcoordinates: DC.L 0        ; coordinates=10400:ARRAY,screenadr1:LONG,screenadr2:LONG
  367. mainvarscreenadr1: DC.L 0
  368. mainvarscreenadr2: DC.L 0
  369. mainvarrast1: DC.L 0        ; rast1:LONG,rast2:LONG,out:LONG
  370. mainvarrast2: DC.L 0
  371. mainvarout: DC.L 0
  372. mainvarframe: DC.W 0        ; frame:INT,line:REGINT,actual=0:LONG,rast:LONG,screen:LONG
  373. mainvaractual: DC.L 0
  374. mainvarrast: DC.L 0
  375. mainvarscreen: DC.L 0
  376. mainvarsuxxes: DC.L 0
  377. viewvarx: DC.W 0        ; x:INT,y:INT,viewadr:LONG
  378. viewvary: DC.W 0
  379. viewvarviewadr: DC.L 0
  380. setcoloursvarrastport: DC.L 0        ; rastport:LONG,viewadr:LONG
  381. setcoloursvarviewadr: DC.L 0
  382. directtextlab0:
  383.     DC.B " ",0
  384.     EVEN
  385. directtextlab1:
  386.     DC.B " ",0
  387.     EVEN
  388. mainvarstdout: DC.L 0        ; WRITE 'Could not open screens!\n'
  389. directtextlab2:
  390.     DC.B "Could not open screens!",10,13,0
  391.     EVEN
  392. proglabvectordata:        ; STRUCT vectordata
  393.     INCBIN "dex:vector/TDEX.BIN"        ; INCLUDE dex:vector/TDEX.BIN
  394.     EVEN
  395. proglabvectordataend:        ; ENDSTRUCT
  396. proglabns:        ; STRUCT ns
  397.     DC.W 0,0,320,256,2,515,0,1        ; INT  0,0,320,256,2,$203,0,1
  398.     DC.L 0,0,0,0        ; LONG 0,0,0,0
  399. proglabnsend:        ; ENDSTRUCT
  400. dosname: DC.B "dos.library",0
  401.     EVEN
  402. mainvardosbase: DC.L 0
  403. graphicsname: DC.B "graphics.library",0
  404.     EVEN
  405. mainvargraphicsbase: DC.L 0
  406. intuitionname: DC.B "intuition.library",0
  407.     EVEN
  408. mainvarintuitionbase: DC.L 0
  409.     SECTION DexBSSHunk,BSS
  410. arraylabcoordinates:
  411.     DS.B 10400
  412.     EVEN
  413.  
  414.  
  415.     END
  416.  
  417.