home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaDemoCD1.iso / DEMOS / ?-NamelessIssue1.DMS / ?-NamelessIssue1.adf / COMPUTER / Beispiel2.asm < prev    next >
Encoding:
Assembly Source File  |  1978-03-11  |  24.2 KB  |  773 lines

  1. ;*** Versuch3/Autor:U.Zschuckelt Datum:23.12.91 ***
  2. ;*** CodeX-Assembler                            ***
  3.  
  4. ;-----------------------
  5. ; Offsets !!!!!
  6. ;-----------------------
  7.  
  8. openscreen:    equ -$c6           ;intuition Funktionen
  9. closescreen:   equ -$42
  10. openwindow:    equ -$cc
  11. closewindow:   equ -$48
  12. printitext:    equ -$d8
  13.  
  14. spmul:         equ -$4e           :mathffp Funktionen
  15. spdiv:         equ -$54
  16. spfix:         equ -$1e
  17. spflt:         equ -$24
  18. spsub:         equ -$48
  19.  
  20. ;-----------------------
  21. ; Hauptprogramm
  22. ;-----------------------
  23.  
  24.  bsr openlibs                     ;Libraries öffnen
  25.  beq abbruch                      ;Fehler ->Abbruch
  26.  
  27. ;*** Screen öffnen ***
  28.  
  29.  move.l intuitionbase(pc),a6      ;Vector base holen
  30.  lea screen,a0                    ;Struktur holen
  31.  jsr openscreen(a6)               ;Screen öffnen
  32.  move.l d0,screenpointer          ;Pointer retten
  33.  beq abbruch1                     ;Fehler -> Abbruch1
  34.  
  35. ;*** Window öffnen ***
  36.  
  37.  move.l screenpointer(pc),scr     ;Pointer auf Screen Struktur
  38.  lea window(pc),a0                ;Struktur Window
  39.  jsr openwindow(a6)               ;Window Öffnen
  40.  move.l d0,windowpointer          ;Pointer retten
  41.  
  42. ;*** Text ausgeben ***
  43.  
  44. ;Rastport für Window
  45.  move.l windowpointer(pc),a0
  46.  move.l 50(a0),a0
  47.  
  48.  lea text1(pc),a1                 ;Text Struktur
  49.  moveq #0,d0                      ;Left Offset
  50.  moveq #0,d1                      ;Top Offset
  51.  move.l intuitionbase(pc),a6      ;Vector Base
  52.  jsr printitext(a6)               ;Text über Intuition ausgeben
  53.  
  54. ;*** Grafik aufbauen ***
  55.  
  56.  move.l screenpointer(pc),a0      ;Adresse Bitmap
  57.  move.l $58(a0),a0                ;holen
  58.  move.l $08(a0),a4
  59.  
  60.  
  61.  move.l #255,d7                   ;x-Radius
  62.  move.l #107,d6                   ;y-Radius
  63.  move.l #320,d5                   ;x-Mittelpunkt
  64.  move.l #128,d4                   ;y-Mittelpunkt
  65.  
  66.  move.l #26,zaehler
  67.  clr.b modus                      ;Modus = 0
  68.  clr.l startwinkel                ;Startwinkel = 0 Grad
  69.  move.l #$c90fd943,endwinkel      ;Endwinkel =1.999 * PI
  70.  
  71. l1:
  72.  move.l startwinkel(pc),d2        ;Startwinkel -> d2
  73.  move.l endwinkel(pc),d3          ;Endwinkel ->d3
  74.  bsr ellipse                      ;Ellipse setzen
  75.  subi.l #10,d7
  76.  subq.l #1,zaehler
  77.  bne l1
  78.  
  79.  move.l #255,d7                   ;x-Radius
  80.  move.l #27,zaehler
  81.  
  82. l2:
  83.  move.l startwinkel(pc),d2
  84.  move.l endwinkel(pc),d3
  85.  bsr ellipse                      ;Ellipse setzen
  86.  subq.l #4,d6
  87.  subq.l #1,zaehler
  88.  bne l2
  89.  
  90. ;*** Mausclick ***
  91.  
  92.  bsr mausclick                    ;auf Mausklick warten
  93.  
  94. ;*** alles schließen ***
  95.  
  96.  move.l intuitionbase(pc),a6      ;Vector Base
  97.  move.l windowpointer(pc),d0      ;Window Pointer
  98.  move.l d0,a0                     ;-> a0
  99.  beq.s abbruch1                   ;nicht geöffnet -> nicht schließen
  100.  jsr closewindow(a6)              ;Window schließen
  101.  
  102. abbruch1:
  103.  move.l intuitionbase(pc),a6      ;Vector Base
  104.  move.l screenpointer(pc),d0      ;Pointer auf Screen Struktur
  105.  move.l d0,a0                     ;-> a0
  106.  beq.s abbruch                    ;nicht geöffnet ->
  107.  jsr closescreen(a6)              ;Screen wieder schließen
  108.  
  109. abbruch:
  110.  bsr closelibs                    ;Libraries schließen
  111.  moveq #0,d0                      ;ok
  112.  rts
  113.  
  114. zaehler: dc.l 0
  115.  even
  116.  
  117. ;*** Library Manager einbinden ***
  118.  
  119.  include "LibMan.asm"
  120.  
  121. ;***********************************
  122. ; Datenfelder Screen + Window + Text
  123. ;***********************************
  124.  
  125. screen:       dc.w 0              ;linke Ecke
  126.               dc.w 0              ;obere Ecke
  127.               dc.w 640            ;Breite
  128.               dc.w 256            ;Höhe
  129.               dc.w 2              ;Tiefe (Farben)
  130.               dc.b 2,3            ;Farben
  131.               dc.w $8000          ;Modus: Hi-Res
  132.               dc.w 15             ;Screentyp
  133.               dc.l 0              ;kein Zeichensatz
  134.               dc.l screentitle    ;Screentitel
  135.               dc.l 0              ;keine Gatgets
  136.               dc.l 0              ;keine Bitmap
  137. screentitle:  dc.b "©1991 SSC-Software/Autor: Ulf Zschuckelt",0
  138.               even
  139. screenpointer: dc.l 0
  140.                even
  141.  
  142. window:       dc.w 0              ;linke Ecke
  143.               dc.w 0              ;obere Ecke
  144.               dc.w 640            ;Breite
  145.               dc.w 256            ;Höhe
  146.               dc.b 0,1            ;Farben
  147.               dc.l $200           ;Flags für Events
  148.               dc.l $1006          ;Window Flags
  149. ets
  150.               dc.l 0              ;Zeiger auf erstes Gatget
  151.               dc.l 0              ;Check Mark
  152.               dc.l windowtitle    ;Windowname
  153. scr:          dc.l 0              ;Screenpointer
  154.               dc.l 0              ;keine Bit Map
  155.               dc.w 640            ;min. Breite
  156.               dc.w 256            ;min. Höhe
  157.               dc.w 640            ;max. Breite
  158.               dc.w 256            ;max. Höhe
  159.               dc.w 15             ;Window-Typ
  160.               even
  161. windowtitle:  dc.b "Grafik",0
  162.               even
  163. windowpointer: dc.l 0
  164.                even
  165.  
  166. text1:        dc.b 1,3            ;Vordergrund,Hintergrund
  167.               dc.b 0,0            ;Zeichenmodus: JAM1, Pad
  168.               dc.w 10,12          ;Position x,y
  169.               dc.l 0              ;Zeichensatz: default
  170.               dc.l zeichenkette1  ;Pointer auf String
  171.               dc.l text2          ;Text weiter
  172. zeichenkette1: dc.b "Grafik mit direkter Bitplanprogrammierung",0
  173.                even
  174.  
  175. text2:        dc.b 1,3
  176.               dc.b 0,0
  177.               dc.w 400,240
  178.               dc.l 0
  179.               dc.l zeichenkette2
  180.               dc.l 0
  181. zeichenkette2: dc.b "Ende mit Mausclick !!!",0
  182.                even
  183.  
  184.  
  185. ;
  186. ;----------------------
  187. ; ENDE HAUPTPROGRAMM
  188. ;----------------------
  189. ;
  190.  
  191. ;
  192. ;----------------------
  193. ; UNTERPROGRAMME
  194. ;----------------------
  195. ;
  196.  
  197. ;*** Ellipsenroutine ***
  198.  
  199. ;*Üebergabe :         D7: X-Radius           D6:Y-Radius
  200. ;*(alle word)         D5: X-Mittelpunkt      D4: Y-Mittelpunkt
  201. ;*                    D2: Startwinkel (FFP)  D3: Endwinkel  (FFP)
  202. ;*                    A4: Zeiger auf Bitmap
  203. ;*                    modus : 0=setzen, 1=invertieren, 255=löschen
  204.  
  205.  
  206. ellipse:
  207.  move.l d2,d0
  208.   bsr winkel                      ;Startpunktberechnung
  209.  move.b d2,startqua               ;Startquadrant
  210.  move.w d0,startpunkt             ;Startpunkt
  211.  move.l d3,d0
  212.   bsr winkel                      ;Endpunktberechnung
  213.  move.b d2,endqua                 ;Endquadrant
  214.  move.w d0,endpunkt               ;Endpunkt
  215.  move.b startqua(pc),d0
  216.  cmpi.b #1,d0                     ;erster Quadrant ?
  217.   bne ausschnitt                  ;Nein, nur Ausschnitt
  218.  move.w startpunkt(pc),d0         ;Stratpunkt = 0 ?
  219.   bne ausschnitt                  ;Nein, nur Ausschnitt
  220.  move.b endqua(pc),d0
  221.  cmpi.b #4,d0                     ;letzter Quadrant ?
  222.   bne ausschnitt                  ;Nein, nur Ausschnitt
  223.  move.w endpunkt(pc),d0
  224.  cmpi.w #390,d0                   ;Endpunkt = 390 ?
  225.   bne ausschnitt                  ;Nein, nur Ausschnitt
  226.  
  227.  
  228. ;* Ganzen Kreis oder Ellipse zeichnen (ca. 2.5 - 8 * schneller als DrawEllipse)
  229.  
  230.  
  231. vollellipse:    move.w #391,d3          ;Zähler setzen
  232.                 move.w #1,d2
  233.                 lea cos-1(pc),a5        ;Zeiger auf SIN/COS- und Bit-
  234.                 lea bittab(pc),a2       ;Tabbellen
  235. elloop:         clr.l d0
  236.                 clr.l d1
  237.                 move.b (a5,d3.w),d0     ;Tabellenwert
  238.                 mulu d7,d0              ;* x-Radius
  239.                 divu #255,d0            ;/ 255
  240.                 move.w d0,xoff          ;= x-Offset
  241.                 move.b (a5,d2.w),d1     ;Tabellenwert
  242.                 mulu d6,d1              ;* y-Radius
  243.                 divu #255,d1            ;/ 255
  244.                 move.w d1,yoff          ;= y-Offset
  245.                 add.w d5,d0             ;Mittelpunkts-
  246.                 move.w d0,xkoord        ;Koordinaten x
  247.                 cmpi.w #639,d0          ;hinzuaddieren
  248.                 bge notpunkt1           ;auf Bereichsüberschreitung
  249.                 add.w d4,d1             ;prüfen
  250.                 move.w d1,ykoord
  251.                 cmpi.w #255,d1
  252.                 bge notpunkt1           ;Das gleiche mit y
  253.                 bsr plot                ;Punkt 1 = xm+xoff/ym+yoff
  254. notpunkt1:      move.w xkoord(pc),d0
  255.                 cmpi.w #639,d0
  256.                 bge notpunkt2
  257.                 move.w d4,d1            ;wie oben für Punkt 2
  258.                 sub.w yoff,d1
  259.                 move.w d1,ykoord1
  260.                 blt notpunkt2
  261.                 bsr plot                ;Punkt 2 = xm+xoff/ym-yoff
  262. notpunkt2:      move.w d5,d0
  263.                 sub.w xoff,d0
  264.                 move.w d0,xkoord1
  265.                 blt notpunkt3           ;wie oben für Punkt 3
  266.                 move.w ykoord(pc),d1
  267.                 cmpi.w #255,d1
  268.                 bge notpunkt3
  269.                 bsr plot                ;Punkt 3 = xm-xoff/ym+yoff
  270. notpunkt3:      move.w xkoord1(pc),d0
  271.                 blt notpunkt4
  272.                 move.w ykoord1(pc),d1   ;wie oben für Punkt 4
  273.                 blt notpunkt4
  274.                 bsr plot                ;Punkt 4 = xm-xoff/ym-yoff
  275. notpunkt4:      addq.w #1,d2
  276.                 subq.w #1,d3
  277.                 bne elloop
  278.                 rts
  279.  
  280.  
  281. * Kreis- oder Ellipsenteil zeichnen
  282.  
  283. ausschnitt:     move.l #391,d0          ;Tabellen mit Tabellenwerten
  284.                 moveq.l #1,d1           ;*Radius/255 aufbauen
  285.                 clr.l d2
  286.                 lea cos-1(pc),a2
  287.                 lea austab1(pc),a5
  288.                 lea austab2(pc),a6
  289. ausloop1:       clr.l d3
  290.                 move.b (a2,d0.w),d3
  291.                 mulu d7,d3
  292.                 divu #255,d3
  293.                 move.w d3,(a5,d2.w)
  294.                 clr.l d3
  295.                 move.b (a2,d1.w),d3
  296.                 mulu d6,d3
  297.                 divu #255,d3
  298.                 move.w d3,(a6,d2.w)
  299.                 addq.w #1,d1
  300.                 addq.w #2,d2
  301.                 subq.w #1,d0
  302.                 bne ausloop1
  303.                 lea bittab(pc),a2
  304.                 move.w endpunkt,d0      ;Wenn Endpunkt = 0 oder 1, dann
  305.                 cmpi.w #1,d0
  306.                 bhi weiter1             ;2 setzen, da sonst Fehler
  307.                 move.w #2,endpunkt
  308. weiter1:        clr.l d0
  309.                 clr.l d1
  310.                 move.b startqua,d0
  311.                 subi.b #1,d0
  312.                 mulu #16,d0             ;(Startquadrant-1) * 16
  313.                 move.b endqua,d1        ;plus (Endquadrant-1) * 4
  314.                 subi.b #1,d1
  315.                 mulu #4,d1
  316.                 add.b d1,d0
  317.                 addi.l #sprung,d0       ;Tabellenstart
  318.                 move.l d0,a0            ;Tabellenadresse
  319.                 move.l (a0),a0          ;Startadresse auslesen
  320.                 jmp (a0)                ;und anspringen
  321.  
  322. sprung:         dc.l s1e1,s1e2,s1e3,s1e4
  323.                 dc.l s2e1,s2e2,s2e3,s2e4
  324.                 dc.l s3e1,s3e2,s3e3,s3e4
  325.                 dc.l s4e1,s4e2,s4e3,s4e4
  326.  
  327.                 cnop 0,4
  328.  
  329. austab1:        ds.w 392
  330. austab2:        ds.w 392
  331.  
  332.  
  333.  
  334. * Start im 1., Ende im 1. Quadranten
  335.  
  336. s1e1:           move.w startpunkt,d0
  337.                 cmp.w endpunkt,d0
  338.                 blt s1e11
  339.                 move.w #391,d1
  340.                 bsr erster
  341.                 move.w #1,d0
  342.                 bra s2e11
  343. s1e11:          move.w endpunkt,d1
  344.                 bra erster
  345.  
  346.  
  347. * Start im 1., Ende im 2. Quadranten
  348.  
  349. s1e2:           move.w startpunkt,d0
  350. s1e22:          move.w #391,d1
  351.                 bsr erster
  352.                 move.w #1,d0
  353.                 move.w endpunkt,d1
  354.                 bra zweiter
  355.  
  356. * Start im 1., Ende im 3. Quadranten
  357.  
  358. s1e3:           move.w startpunkt,d0
  359. s1e333:         move.w #391,d1
  360.                 bsr erster
  361.                 move.w #1,d0
  362. s1e33:          move.w #391,d1
  363.                 bsr zweiter
  364.                 move.w #1,d0
  365.                 move.w endpunkt,d1
  366.                 bra dritter
  367.  
  368.  
  369. * Start im 1., Ende im 4. Quadranten
  370.  
  371. s1e4:           move.w startpunkt,d0
  372. s1e4444:        move.w #391,d1
  373.                 bsr erster
  374.                 move.w #1,d0
  375. s1e44:          move.w #391,d1
  376.                 bsr zweiter
  377.                 move.w #1,d0
  378. s1e444:         move.w #391,d1
  379.                 bsr dritter
  380.                 move.w #1,d0
  381.                 move.w endpunkt,d1
  382.                 bra vierter
  383.  
  384.  
  385. * Start im 2., Ende im 1. Quadranten
  386.  
  387. s2e1:           move.w startpunkt,d0
  388. s2e11:          move.w #391,d1
  389.                 bsr zweiter
  390.                 move.w #1,d0
  391. s2e111          move.w #391,d1
  392.                 bsr dritter
  393.                 move.w #1,d0
  394. s2e1111         move.w #391,d1
  395.                 bsr vierter
  396.                 move.w #1,d0
  397.                 move.w endpunkt,d1
  398.                 bra erster
  399.  
  400.  
  401. * Start im 2., Ende im 2. Quadranten
  402.  
  403. s2e2            move.w startpunkt,d0
  404.                 cmp.w endpunkt,d0
  405.                 blt s2e22
  406.                 move.w #391,d1
  407.                 bsr zweiter
  408.                 move.w #1,d0
  409.                 bra s3e22
  410. s2e22           move.w endpunkt,d1
  411.                 bra zweiter
  412.  
  413.  
  414. * Start im 2., Ende im 3. Quadranten
  415.  
  416. s2e3            move.w startpunkt,d0
  417.                 bra s1e33
  418.  
  419.  
  420.  
  421. * Start im 2., Ende im 4. Quadranten
  422.  
  423. s2e4            move.w startpunkt,d0
  424.                 bra s1e44
  425.  
  426.  
  427.  
  428. * Start im 3., Ende im 1. Quadranten
  429.  
  430. s3e1            move.w startpunkt,d0
  431.                 bra s2e111
  432.  
  433.  
  434.  
  435. * Start im 3., Ende im 2. Quadranten
  436.  
  437. s3e2            move.w startpunkt,d0
  438. s3e22           move.w #391,d1
  439.                 bsr dritter
  440.                 move.w #1,d0
  441. s3e222          move.w #391,d1
  442.                 bsr vierter
  443.                 move.w #1,d0
  444.                 bra s1e22
  445.  
  446.  
  447. * Start im 3., Ende im 3. Quadranten
  448.  
  449. s3e3            move.w startpunkt,d0
  450.                 cmp.w endpunkt,d0
  451.                 blt s3e33
  452.                 move.w #391,d1
  453.                 bsr dritter
  454.                 move.w #1,d0
  455.                 bra s4e33
  456. s3e33           move.w endpunkt,d1
  457.                 bra dritter
  458.  
  459.  
  460. * Start im 3., Ende im 4. Quadranten
  461.  
  462. s3e4            move.w startpunkt,d0
  463.                 bra s1e444
  464.  
  465.  
  466. * Start im 4., Ende im 1. Quadranten
  467.  
  468. s4e1            move.w startpunkt,d0
  469.                 bra s2e1111
  470.  
  471.  
  472. * Start im 4., Ende im 2. Quadranten
  473.  
  474. s4e2            move.w startpunkt,d0
  475.                 bra s3e222
  476.  
  477.  
  478.  
  479. * Start im 4., Ende im 3. Quadranten
  480.  
  481. s4e3            move.w startpunkt,d0
  482. s4e33           move.w #391,d1
  483.                 bsr vierter
  484.                 move.w #1,d0
  485.                 bra s1e333
  486.  
  487.  
  488. * Start im 4., Ende im 4. Quadranten
  489.  
  490. s4e4            move.w startpunkt,d0
  491.                 cmp.w endpunkt,d0
  492.                 blt s4e44
  493.                 move.w #391,d1
  494.                 bsr vierter
  495.                 move.w #1,d0
  496.                 bra s1e4444
  497. s4e44           move.w endpunkt,d1
  498.                 bra vierter
  499.  
  500.  
  501.  
  502. * Ersten Quadranten zeichnen *
  503.  
  504. erster          move.w #391,d2          ;Zähler setzen und
  505.                 sub.w d0,d2
  506.                 move.w d2,zaehl1
  507.                 move.w #391,d2          ;invertieren
  508.                 sub.w d1,d2
  509.                 move.w d2,zaehl2
  510. loopq1          move.w zaehl2,d2
  511.                 lsl #1,d2               ;Zähler mal 2
  512.                 move.w (a5,d2.w),d0
  513.                 add.w d5,d0
  514.                 cmpi.w #639,d0          ;x = xr + xoff
  515.                 bge noeins
  516.                 move.w (a6,d2.w),d3
  517.                 move.w d4,d1
  518.                 sub.w d3,d1             ;y = yr - yoff
  519.                 blt noeins
  520.                 bsr plot
  521. noeins          addq.w #1,zaehl2
  522.                 move.w zaehl1,d0
  523.                 cmp.w zaehl2,d0
  524.                 bne loopq1
  525.                 rts
  526.  
  527.  
  528. * Zweiten Quadranten zeichnen *
  529.  
  530. zweiter         move.w d1,zaehl1        ;Zähler setzen
  531.                 move.w d0,zaehl2
  532. loopq2          move.w zaehl2,d2
  533.                 lsl #1,d2               ;Zähler mal 2
  534.                 move.w (a5,d2.w),d0
  535.                 add.w d5,d0
  536.                 cmpi.w #639,d0          ;x = xr + xoff
  537.                 bge nozwei
  538.                 move.w (a6,d2.w),d1
  539.                 add.w d4,d1             ;y = yr + yoff
  540.                 cmpi.w #255,d1
  541.                 bge nozwei
  542.                 bsr plot
  543. nozwei          addq.w #1,zaehl2
  544.                 move.w zaehl1,d0
  545.                 cmp.w zaehl2,d0
  546.                 bne loopq2
  547.                 rts
  548.  
  549.  
  550. * Dritten Quadranten zeichnen *
  551.  
  552. dritter         move.w #391,d2          ;Zähler setzen und
  553.                 sub.w d0,d2
  554.                 move.w d2,zaehl1
  555.                 move.w #391,d2          ;invertieren
  556.                 sub.w d1,d2
  557.                 move.w d2,zaehl2
  558. loopq3          move.w zaehl2,d2
  559.                 lsl #1,d2               ;Zähler mal 2
  560.                 move.w (a5,d2.w),d3
  561.                 move.w d5,d0
  562.                 sub.w d3,d0             ;x = xr - xoff
  563.                 blt nodrei
  564.                 move.w (a6,d2.w),d1
  565.                 add.w d4,d1             ;y = yr + yoff
  566.                 cmpi.w #255,d1
  567.                 bge nodrei
  568.                 bsr plot
  569. nodrei          addq.w #1,zaehl2
  570.                 move.w zaehl1,d0
  571.                 cmp.w zaehl2,d0
  572.                 bne loopq3
  573.                 rts
  574.  
  575.  
  576. * Vierten Quadranten zeichnen *
  577.  
  578. vierter         move.w d1,zaehl1        ;Zähler setzen
  579.                 move.w d0,zaehl2
  580. loopq4          move.w zaehl2,d2
  581.                 lsl #1,d2               ;Zähler mal 2
  582.                 move.w (a5,d2.w),d3
  583.                 move.w d5,d0
  584.                 sub.w d3,d0
  585.                 blt novier
  586.                 move.w (a6,d2.w),d3
  587.                 move.w d4,d1
  588.                 sub.w d3,d1             ;y = yr - yoff
  589.                 blt novier
  590.                 bsr plot
  591. novier          addq.w #1,zaehl2
  592.                 move.w zaehl1,d0
  593.                 cmp.w zaehl2,d0
  594.                 bne loopq4
  595.                 rts
  596.  
  597.  
  598. xkoord          dc.w 0
  599. xkoord1         dc.w 0
  600. ykoord          dc.w 0
  601. ykoord1         dc.w 0
  602. xoff            dc.w 0
  603. yoff            dc.w 0
  604. startqua        dc.b 0
  605.                 even
  606. endqua          dc.b 0
  607.                 even
  608. startpunkt      dc.w 0
  609. endpunkt        dc.w 0
  610. zaehl1          dc.w 0
  611. zaehl2          dc.w 0
  612. modus           dc.b 0
  613.                 even
  614. startwinkel     dc.l 0
  615. endwinkel       dc.l 0
  616.                 even
  617.  
  618.  
  619. * Quadranten- und Punktberechnung
  620.  
  621. winkel:
  622.  move.l mathffpbase(pc),a6        ;Vector holen
  623.                 move.l d0,a5            ;merken
  624.                 move.l #$80000043,d1    ;Ausdruck * 4
  625.                 jsr spmul(a6)
  626.                 move.l #$C90FDA43,d1    ;durch 2*PI dividieren
  627.                 jsr spdiv(a6)
  628.                 jsr spfix(a6)           ;In Integer wandeln
  629.                 move.l d0,a3            ;merken
  630.                 addi.b #1,d0            ;Plus 1
  631.                 move.b d0,d2            ;merken
  632.                 move.l a3,d0            ;Quadrant-1 ins FFP-Format
  633.                 jsr spflt(a6)           ;wandeln
  634.                 move.l #$C90FDA41,d1    ;mit PI/2 multiplizieren
  635.                 jsr spmul(a6)
  636.                 move.l d0,d1            ;von Winkel abziehen
  637.                 move.l a5,d0
  638.                 jsr spsub(a6)
  639.                 move.l #$C3800049,d1    ;mit 391 multiplizieren
  640.                 jsr spmul(a6)
  641.                 move.l #$C90FDA41,d1    ;durch PI/2 dividieren
  642.                 jsr spdiv(a6)
  643.                 jsr spfix(a6)           ;in Integer wandeln
  644.                 rts
  645.  
  646.  
  647. * Tabelle mit Cosinus- (vorwärts) und Sinus- (rückwärts) Werten
  648.  
  649.  
  650. cos     dc.b 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
  651.         dc.b 20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35
  652.         dc.b 36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51
  653.         dc.b 52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67
  654.         dc.b 68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83
  655.         dc.b 84,85,86,87,88,89,90,91,92,93,94,94,95,96,97,98
  656.         dc.b 99,100,101,102,103,104,105,106,107,108,109,109,110
  657.         dc.b 111,112,113,114,115,116,117,118,119,120,120,121
  658.         dc.b 122,123,124,125,126,127,128,128,129,130,131,132
  659.         dc.b 133,134,135,135,136,137,138,139,140,141,141,142
  660.         dc.b 143,144,145,146,147,147,148,149,150,151,152,152
  661.         dc.b 153,154,155,156,156,157,158,159,160,160,161,162
  662.         dc.b 163,164,164,165,166,167,167,168,169,170,171,171
  663.         dc.b 172,173,174,174,175,176,177,177,178,179,179,180
  664.         dc.b 181,182,182,183,184,184,185,186,187,187,188,189
  665.         dc.b 189,190,191,191,192,193,193,194,195,195,196,197
  666.         dc.b 197,198,199,199,200,200,201,202,202,203,204,204
  667.         dc.b 205,205,206,207,207,208,208,209,210,210,211,211
  668.         dc.b 212,212,213,214,214,215,215,216,216,217,217,218
  669.         dc.b 218,219,219,220,221,221,222,222,223,223,224,224
  670.         dc.b 224,225,225,226,226,227,227,228,228,229,229,230
  671.         dc.b 230,230,231,231,232,232,233,233,233,234,234,235
  672.         dc.b 235,235,236,236,237,237,237,238,238,238,239,239
  673.         dc.b 239,240,240,240,241,241,241,242,242,242,243,243
  674.         dc.b 243,244,244,244,244,245,245,245,246,246,246,246
  675.         dc.b 247,247,247,247,248,248,248,248,249,249,249,249
  676.         dc.b 249,250,250,250,250,250,251,251,251,251,251,251
  677.         dc.b 252,252,252,252,252,252,252,253,253,253,253,253
  678.         dc.b 253,253,253,253,254,254,254,254,254,254,254,254
  679.         dc.b 254,254,254,254,254,254,254,254,254,254,254,254
  680.         dc.b 254,254
  681.         even
  682.  
  683. * Punt setzen/löschen/invertiern
  684.  
  685. plot    and.l #$FFFF,d0         ;INT(X/8)*8 = Byte in Zeile
  686.         move.w d0,a1
  687.         divu #8,d0
  688.         and.l #$FF,d1           ;y*80 = Zeilenoffset
  689.         mulu #80,d1
  690.         add.l a4,d1             ;Start Bitmap
  691.         add.w d0,d1
  692.         move.l a1,d0
  693.         move.b (a2,d0.w),d0     ;Bit holen
  694.         move.l d1,a1
  695.         move.b (a1),d1          ;Grafikbyte holen
  696.         tst.b modus             ;Modus holen
  697.         beq setz                ;Punkt setzen
  698.         bmi lösch               ;Punkt löschen
  699.  
  700. * Punkt invertieren
  701.  
  702.         eor.b d0,d1             ;Bit invertieren
  703.         move.b d1,(a1)          ;Byte setzen
  704.         rts
  705.  
  706. * Punkt setzen
  707.  
  708. setz    or.b d0,d1              ;Bit setzen
  709.         move.b d1,(a1)          ;Byte setzen
  710.         rts
  711.  
  712. * Punkt löschen
  713.  
  714. lösch   eor.b #$FF,d0           ;Byte umdrehen
  715.         and.b d0,d1             ;Bit löschen
  716.         move.b d1,(a1)          ;Byte setzen
  717.         rts
  718.  
  719.  
  720. * Bits der x-Koordinaten
  721.  
  722. bittab          dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  723.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  724.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  725.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  726.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  727.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  728.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  729.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  730.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  731.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  732.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  733.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  734.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  735.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  736.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  737.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  738.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  739.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  740.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  741.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  742.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  743.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  744.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  745.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  746.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  747.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  748.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  749.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  750.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  751.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  752.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  753.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  754.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  755.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  756.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  757.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  758.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  759.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  760.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  761.                 dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
  762.                 even
  763.  
  764. ;*** Mausclick ***
  765.  
  766. mausclick:
  767.  btst #6,$bfe001                  ;6.Bit von $bfe001 = Mausclick
  768.  bne.s mausclick                  ;wenn Bit =0 dann ->
  769.  rts
  770.  
  771.  end                              ;ENDE DES PROGRAMMS
  772.  
  773.