home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 4: The Falcon Archive / nf_archive_four_v1.0.iso / ARCHIVE / DEMOS / LAZER / LAZEROS.ZIP / LAZEROS / ROTATOR / ROT_01.S < prev    next >
Text File  |  1995-10-03  |  63KB  |  1,634 lines

  1.                         >PART 'EQU JDS'
  2. jds                     EQU 2 ; 0 = Routine mit JDS (NUR MIT JDS-SOURCEN!!!)
  3. ;                               1 = Unterroutine vom JDS; wird nachgeladen und
  4. ;                                   soll die JDS-Routinen über deren Offset
  5. ;                                   anspringen... (SA-Version)
  6. ;                               2 = DV-Version; JDS wird als File mit einge-
  7. ;                                   bunden. Zur Programmentwicklung von Modulen
  8. ;                                   ohne die ganzen JDS-Sourcen
  9. jds_version             EQU 12
  10. ;
  11. yes                     EQU -1
  12. no                      EQU 0
  13. nil                     EQU 0
  14. ;
  15. module_on               EQU no
  16.                         ENDPART
  17. ; WICHTIG: Beim Verlassen des Stand-Alone-Moduls wird ein Bereich von
  18. ;          184320 Bytes (384x240xTC) in den Bildspeicher vom JDS übertragen und
  19. ;          umgeschaltet. Sollte der benötigte Bildspeicher größer sein, so
  20. ;          sollte COPY_PHYS_SCREEN auf 0 gesetzt werden.
  21. ; Wenn no_own_screens=yes, dann benutzt das Nachlademodul ausschließlich den
  22. ; Übergabe-Bildschirm des JDS! (Nur für Überblend-Effekte interessant...)
  23. ; copy_phys_screen und no_own_screens haben nur eine Wirkung wenn SA-Version!
  24. copy_phys_screen        EQU yes
  25. no_own_screens          EQU no
  26.  
  27.                         OPT X+
  28.                         OUTPUT 'S_ALONE.PRG'
  29.                         >PART 'EQU Lucky'
  30. scankey_esc             EQU 1
  31. scankey_1               EQU 2
  32. scankey_2               EQU 3
  33. scankey_3               EQU 4
  34. scankey_4               EQU 5
  35. scankey_5               EQU 6
  36. scankey_6               EQU 7
  37. scankey_7               EQU 8
  38. scankey_8               EQU 9
  39. scankey_9               EQU 10
  40. scankey_0               EQU 11
  41. scankey_ß               EQU 12
  42. scankey_apostroph       EQU 13
  43. scankey_backspace       EQU 14
  44. scankey_tab             EQU 15
  45. scankey_q               EQU 16
  46. scankey_w               EQU 17
  47. scankey_e               EQU 18
  48. scankey_r               EQU 19
  49. scankey_t               EQU 20
  50. scankey_z               EQU 21
  51. scankey_u               EQU 22
  52. scankey_i               EQU 23
  53. scankey_o               EQU 24
  54. scankey_p               EQU 25
  55. scankey_ü               EQU 26
  56. scankey_plus            EQU 27
  57. scankey_return          EQU 28
  58. scankey_control         EQU 29
  59. scankey_a               EQU 30
  60. scankey_s               EQU 31
  61. scankey_d               EQU 32
  62. scankey_f               EQU 33
  63. scankey_g               EQU 34
  64. scankey_h               EQU 35
  65. scankey_j               EQU 36
  66. scankey_k               EQU 37
  67. scankey_l               EQU 38
  68. scankey_ö               EQU 39
  69. scankey_ä               EQU 40
  70. scankey_#               EQU 41
  71. scankey_milbe           EQU 43
  72. scankey_y               EQU 44
  73. scankey_x               EQU 45
  74. scankey_c               EQU 46
  75. scankey_v               EQU 47
  76. scankey_b               EQU 48
  77. scankey_n               EQU 49
  78. scankey_m               EQU 50
  79. scankey_komma           EQU 51
  80. scankey_punkt           EQU 52
  81. scankey_minus           EQU 53
  82. scankey_space           EQU 57
  83. scankey_f1              EQU 59
  84. scankey_f2              EQU 60
  85. scankey_f3              EQU 61
  86. scankey_f4              EQU 62
  87. scankey_f5              EQU 63
  88. scankey_f6              EQU 64
  89. scankey_f7              EQU 65
  90. scankey_f8              EQU 66
  91. scankey_f9              EQU 67
  92. scankey_f10             EQU 68
  93. scankey_clrhome         EQU 71
  94. scankey_cursor_up       EQU 72
  95. scankey_minus_ziffblk   EQU 74
  96. scankey_cursor_left     EQU 75
  97. scankey_cursor_right    EQU 77
  98. scankey_plus_ziffblk    EQU 78
  99. scankey_cursor_down     EQU 80
  100. scankey_insert          EQU 82
  101. scankey_delete          EQU 83
  102. scankey_shift_f1        EQU 84
  103. scankey_shift_f2        EQU 85
  104. scankey_shift_f3        EQU 86
  105. scankey_shift_f4        EQU 87
  106. scankey_shift_f5        EQU 88
  107. scankey_shift_f6        EQU 89
  108. scankey_shift_f7        EQU 90
  109. scankey_shfit_f8        EQU 91
  110. scankey_shift_f9        EQU 92
  111. scankey_shift_f10       EQU 93
  112. scankey_kleiner         EQU 96
  113. scankey_undo            EQU 97
  114. scankey_help            EQU 98
  115. scankey_klammer_auf     EQU 99
  116. scankey_klammer_zu      EQU 100
  117. scankey_durch           EQU 101
  118. scankey_mal             EQU 102
  119. scankey_7_ziffblk       EQU 103
  120. scankey_8_ziffblk       EQU 104
  121. scankey_9_ziffblk       EQU 105
  122. scankey_4_ziffblk       EQU 106
  123. scankey_5_ziffblk       EQU 107
  124. scankey_6_ziffblk       EQU 108
  125. scankey_1_ziffblk       EQU 109
  126. scankey_2_ziffblk       EQU 110
  127. scankey_3_ziffblk       EQU 111
  128. scankey_0_ziffblk       EQU 112
  129. scankey_punkt_ziffblk   EQU 113
  130. scankey_enter           EQU 114
  131. scankey_alt_1           EQU 120
  132. scankey_alt_2           EQU 121
  133. scankey_alt_3           EQU 122
  134. scankey_alt_4           EQU 123
  135. scankey_alt_5           EQU 124
  136. scankey_alt_6           EQU 125
  137. scankey_alt_7           EQU 126
  138. scankey_alt_8           EQU 127
  139. scankey_alt_9           EQU 128
  140. scankey_alt_0           EQU 129
  141. scankey_alt_ß           EQU 130
  142. scankey_alt_apostroph   EQU 131
  143.                         ENDPART
  144.  
  145.                         >PART 'Init JDS-Modul'
  146.                         lea     _bssstart,A0
  147.                         move.l  #(_bssende-_bssstart+3)/4-1,D1
  148. _jdsloop1:              clr.l   (A0)+
  149.                         subq.l  #1,D1
  150.                         bpl.s   _jdsloop1
  151.  
  152.                         IF jds=2
  153.                         tst.l   D0
  154.                         bne     start_from_jds
  155.                         lea     jds_include(PC),A0
  156.                         move.l  2(A0),D0
  157.                         add.l   6(A0),D0
  158.                         add.l   14(A0),D0
  159.                         adda.l  #$0000001C,A0
  160.                         move.l  A0,D1
  161.                         movea.l A0,A1
  162.                         movea.l A1,A2
  163.                         adda.l  D0,A1
  164.                         move.l  (A1)+,D0
  165.                         adda.l  D0,A2
  166.                         add.l   D1,(A2)
  167.                         clr.l   D0
  168. initbin_reloziere_l0:   move.b  (A1)+,D0
  169.                         beq.s   initbin_reloziere_w0
  170.                         cmp.b   #1,D0
  171.                         beq.s   initbin_reloziere_l1
  172.                         adda.l  D0,A2
  173.                         add.l   D1,(A2)
  174.                         bra.s   initbin_reloziere_l0
  175. initbin_reloziere_l1:   adda.l  #$000000FE,A2
  176.                         bra.s   initbin_reloziere_l0
  177. initbin_reloziere_w0:   lea     own_stack,A0
  178.                         lea     start_from_jds(PC),A1
  179.                         bra.s   jds_include
  180.                         CNOP 0,16
  181.                         PATH 'D:\JDS\'
  182. jds_include:            IBYTES 'JDS.BIN'
  183.                         EVEN
  184.                         ENDC
  185. ; Initialisierung eines Nachlademoduls für das JDS.
  186. ; Nicht als Subroutine aufrufen! Diese Sequenz muß als Programmstart stehen!
  187. start_from_jds:         movea.l 4(SP),A0
  188.                         move.l  A0,jds_block_adr
  189.                         move.l  -26(A0),params_adr
  190.                         move.l  -22(A0),background_color_oadr
  191.                         move.l  #background_color_4,-22(A0)
  192.                         move.l  -18(A0),background_color_4
  193.                         move.l  -14(A0),background_color_8
  194.                         move.l  -10(A0),background_color_tc
  195.                         move.w  -2(A0),system_flag
  196.                         move.l  (A0),log_orig_scr_adr
  197.                         movea.l (A0),A1
  198.                         move.l  (A1),log_scr
  199.                         addq.l  #4,A0
  200.                         move.l  (A0),phys_orig_scr_adr
  201.                         movea.l (A0),A1
  202.                         move.l  (A1),phys_scr
  203.                         addq.l  #4,A0
  204.                         move.l  (A0)+,dentro_exit+2
  205.                         move.l  (A0)+,init_soundchip+2
  206.                         move.l  (A0)+,add_vblrout+2
  207.                         move.l  (A0)+,sub_vblrout+2
  208.                         move.l  (A0)+,subskript+2
  209.                         move.l  (A0)+,return+2
  210.                         move.l  (A0)+,wvbl_anz+2
  211.                         move.l  (A0)+,wvbl+2
  212.                         move.l  (A0)+,wait_swap_colors+2
  213.                         move.l  (A0)+,wait_for_space+2
  214.                         move.l  (A0)+,set_falconres+2
  215.                         move.l  (A0)+,swap_16_colors+2
  216.                         move.l  (A0)+,swap_256_colors+2
  217.                         move.l  (A0)+,depack_pic+2
  218.                         move.l  (A0)+,play_module+2
  219.                         move.l  (A0)+,textkonverter+2
  220.                         move.l  (A0)+,clear_4_planes+2
  221.                         move.l  (A0)+,clear_8_planes+2
  222.                         move.l  (A0)+,swap_screens+2
  223.                         move.l  (A0)+,reloziere+2
  224.                         move.l  (A0)+,hdplay_init+2
  225.                         move.l  (A0)+,hdplay+2
  226.                         move.l  (A0)+,hdplay_stop+2
  227.                         move.l  (A0)+,load+2
  228.                         move.l  (A0)+,save+2
  229.                         move.l  (A0)+,run_file+2
  230.                         move.l  (A0)+,set_scradr+2
  231.                         move.l  (A0)+,load_prog+2
  232.                         move.l  (A0)+,run_prog+2
  233.                         move.l  (A0)+,wait_timer+2
  234.                         move.l  (A0)+,clear_timer+2
  235.                         move.l  (A0)+,depack_ice+2
  236.                         move.l  (A0)+,run_packed_file+2
  237.                         move.l  (A0)+,load_packed_prog+2
  238.                         move.l  (A0)+,copy_block+2
  239.                         move.l  (A0)+,clear_block+2
  240.                         move.l  (A0)+,mouse_on+2
  241.                         move.l  (A0)+,mouse_off+2
  242.                         move.l  (A0)+,inst_cache_on+2
  243.                         move.l  (A0)+,inst_cache_off+2
  244.                         move.l  (A0)+,data_cache_on+2
  245.                         move.l  (A0)+,data_cache_off+2
  246.                         move.l  (A0)+,cpu_16mhz+2
  247.                         move.l  (A0)+,cpu_8mhz+2
  248.                         move.l  (A0)+,blitter_16mhz+2
  249.                         move.l  (A0)+,blitter_8mhz+2
  250.                         move.l  (A0)+,shadowregs_on+2
  251.                         move.l  (A0)+,shadowregs_off+2
  252.                         move.l  (A0)+,clear_key_vectors+2
  253.                         move.l  (A0)+,set_key_vector+2
  254.                         move.l  (A0)+,clear_key_vector+2
  255.                         move.l  (A0)+,calc_tc_ausblender+2
  256.                         move.l  (A0)+,autoscroller_tc_init+2
  257.                         move.l  (A0)+,autoscroller_tc+2
  258.                         move.l  (A0)+,calc_sintab+2
  259.                         move.l  (A0)+,wvbl_swap_screens+2
  260.                         move.l  (A0)+,install_acia_block+2
  261.                         move.l  (A0)+,destall_acia_block+2
  262.                         move.l  (A0)+,wait_to_modpos+2
  263.                         move.l  (A0)+,error_exit+2
  264.                         move.l  (A0)+,depack_ifp+2
  265.                         move.l  (A0)+,calc_zoomtab+2
  266.                         move.l  (A0)+,zoom_dotfield+2
  267.                         move.l  (A0)+,rotate_dotfield+2
  268.                         move.l  (A0)+,calc_morphfield+2
  269.                         move.l  (A0)+,calc_morphstep+2
  270.                         move.l  (A0)+,set_background_color+2
  271.                         move.l  (A0)+,blitter_on+2
  272.                         move.l  (A0)+,blitter_off+2
  273.                         move.l  (A0)+,fade_module+2
  274.                         move.l  (A0)+,install_midi_handler+2
  275.                         move.l  (A0)+,destall_midi_handler+2
  276.                         move.l  (A0)+,swap_acia_vbl_routs+2
  277.                         move.l  (A0)+,set_max_sample_anz+2
  278.                         move.l  (A0)+,init_swap_256_colors+2
  279.                         move.l  (A0)+,do_swap_256_colors+2
  280.  
  281.                         cmpi.l  #jds_version,8(SP)
  282.                         blt     jds_version_error
  283.  
  284.                         pea     phys_scr
  285.                         pea     log_scr
  286.                         movea.l SP,A0
  287.                         bsr     set_scradr
  288.                         addq.l  #8,SP
  289.  
  290.                         pea     acia_block
  291.                         movea.l SP,A0
  292.                         bsr     install_acia_block
  293.                         addq.l  #4,SP
  294.  
  295.                         move.l  SP,orig_sp
  296.                         IF jds<>2
  297.                         lea     own_stack,SP
  298.                         ENDC
  299.                         IF module_on<>0&jds=2
  300.                         move.w  #100,-(SP)
  301.                         move.w  #$7FFF,-(SP)
  302.                         pea     module(PC)
  303.                         movea.l SP,A0
  304.                         bsr     play_module
  305.                         addq.l  #8,SP
  306.                         ENDC
  307.                         movea.l params_adr(PC),A0
  308.                         bsr     jdsrout_start
  309.                         movea.l orig_sp,SP
  310.  
  311.                         pea     acia_block
  312.                         movea.l SP,A0
  313.                         bsr     destall_acia_block
  314.                         addq.l  #4,SP
  315.  
  316.                         IF jds=2
  317.                         bra.s   _jdsw1
  318.                         ENDC
  319.                         IF no_own_screens=yes
  320.                         bra.s   _jdsw0
  321.                         ENDC
  322.                         IF copy_phys_screen=yes
  323.                         movea.l phys_scr,A0
  324.                         movea.l log_orig_scr_adr(PC),A1
  325.                         movea.l (A1),A1
  326.                         move.w  #46079,D0
  327. _jdsloop0:              move.l  (A0)+,(A1)+
  328.                         dbra    D0,_jdsloop0
  329.                         ENDC
  330. _jdsw0:                 move.l  phys_orig_scr_adr(PC),-(SP)
  331.                         move.l  log_orig_scr_adr(PC),-(SP)
  332.                         movea.l SP,A0
  333.                         bsr     set_scradr
  334.                         addq.l  #8,SP
  335.                         IF no_own_screens=no
  336.                         bsr     swap_screens
  337.                         ENDC
  338. _jdsw1:                 movea.l jds_block_adr,A0
  339.                         move.l  background_color_oadr,-22(A0)
  340.                         move.l  background_color_4,-18(A0)
  341.                         move.l  background_color_8,-14(A0)
  342.                         move.l  background_color_tc,-10(A0)
  343.                         rts
  344.  
  345. jds_version_error:      lea     jds_version_error$(PC),A0
  346. error_exit:             jmp     0
  347. jds_version_error$:     DC.B "Modul setzt auf eine veraltete JDS-Version auf!",0
  348.                         EVEN
  349.  
  350. dentro_exit:            jmp     0
  351. init_soundchip:         jmp     0
  352. add_vblrout:            jmp     0
  353. sub_vblrout:            jmp     0
  354. subskript:              jmp     0
  355. return:                 jmp     0
  356. wvbl_anz:               jmp     0
  357. wvbl:                   jmp     0
  358. wait_swap_colors:       jmp     0
  359. wait_for_space:         jmp     0
  360. set_falconres:          jmp     0
  361. swap_16_colors:         jmp     0
  362. swap_256_colors:        jmp     0
  363. depack_pic:             jmp     0
  364. play_module:            jmp     0
  365. textkonverter:          jmp     0
  366. clear_4_planes:         jmp     0
  367. clear_8_planes:         jmp     0
  368. swap_screens:           jmp     0
  369. reloziere:              jmp     0
  370. hdplay_init:            jmp     0
  371. hdplay:                 jmp     0
  372. hdplay_stop:            jmp     0
  373. load:                   jmp     0
  374. save:                   jmp     0
  375. run_file:               jmp     0
  376. set_scradr:             jmp     0
  377. load_prog:              jmp     0
  378. run_prog:               jmp     0
  379. wait_timer:             jmp     0
  380. clear_timer:            jmp     0
  381. depack_ice:             jmp     0
  382. run_packed_file:        jmp     0
  383. load_packed_prog:       jmp     0
  384. copy_block:             jmp     0
  385. clear_block:            jmp     0
  386. mouse_on:               jmp     0
  387. mouse_off:              jmp     0
  388. inst_cache_on:          jmp     0
  389. inst_cache_off:         jmp     0
  390. data_cache_on:          jmp     0
  391. data_cache_off:         jmp     0
  392. cpu_16mhz:              jmp     0
  393. cpu_8mhz:               jmp     0
  394. blitter_16mhz:          jmp     0
  395. blitter_8mhz:           jmp     0
  396. shadowregs_on:          jmp     0
  397. shadowregs_off:         jmp     0
  398. clear_key_vectors:      jmp     0
  399. set_key_vector:         jmp     0
  400. clear_key_vector:       jmp     0
  401. calc_tc_ausblender:     jmp     0
  402. autoscroller_tc_init:   jmp     0
  403. autoscroller_tc:        jmp     0
  404. calc_sintab:            jmp     0
  405. wvbl_swap_screens:      jmp     0
  406. install_acia_block:     jmp     0
  407. destall_acia_block:     jmp     0
  408. wait_to_modpos:         jmp     0
  409. depack_ifp:             jmp     0
  410. calc_zoomtab:           jmp     0
  411. zoom_dotfield:          jmp     0
  412. rotate_dotfield:        jmp     0
  413. calc_morphfield:        jmp     0
  414. calc_morphstep:         jmp     0
  415. set_background_color:   jmp     0
  416. blitter_on:             jmp     0
  417. blitter_off:            jmp     0
  418. fade_module:            jmp     0
  419. install_midi_handler:   jmp     0
  420. destall_midi_handler:   jmp     0
  421. swap_acia_vbl_routs:    jmp     0
  422. set_max_sample_anz:     jmp     0
  423. init_swap_256_colors:   jmp     0
  424. do_swap_256_colors:     jmp     0
  425.  
  426. log_orig_scr_adr:       DS.L 1
  427. phys_orig_scr_adr:      DS.L 1
  428. system_flag:            DS.W 1
  429. params_adr:             DS.L 1
  430.  
  431. jdsrout_start:
  432.                         ENDPART
  433.                         >PART 'TEXT Programm'
  434. x_size                  EQU 320
  435. y_size                  EQU 256
  436.  
  437. ; Geschwindigkeiten einstellen
  438. rout:                   move.l  A0,-(SP)
  439.                         bsr     shadowregs_on ; FALCON auf Full-Power
  440.                         bsr     cpu_16mhz
  441.                         bsr     blitter_16mhz
  442.                         bsr     inst_cache_on
  443.                         bsr     data_cache_on
  444. ; Bildschirme einrichten
  445.                         lea     screen0,A0
  446.                         lea     screen1,A1
  447.                         move.l  A0,log_scr
  448.                         move.l  A1,phys_scr
  449.                         move.l  background_color_8,D1
  450.                         moveq   #0,D1
  451.                         move.w  #x_size*y_size/4-1,D0 ; * Diese Zeilen löschen,
  452. rout_l0:                move.l  D1,(A0)+ ;              * wenn der Bildschirm
  453.                         move.l  D1,(A1)+ ;              * nicht gelöscht werden
  454.                         dbra    D0,rout_l0 ;            * soll...
  455.                         bsr     wvbl_swap_screens ;     *
  456.                         pea     vmode(PC)
  457.                         movea.l SP,A0
  458.                         bsr     set_falconres
  459.                         addq.l  #4,SP
  460.                         movea.l (SP)+,A0
  461. * Hier kommt die eigene Routine:
  462.                         bsr.s   xxx
  463.  
  464. * Hier ist das Ende der Routine:
  465.                         movea.l log_scr,A0 ;       * Diese Zeilen löschen,
  466.                         move.w  #x_size*y_size/2-1,D0 ;* wenn der Bildschirm
  467. rout_l1:                clr.l   (A0)+   ;              * am Routinenende nicht
  468.                         dbra    D0,rout_l1 ;           * gelöscht werden soll!
  469.                         bsr     wvbl_swap_screens ;
  470.                         rts
  471.                         ENDPART
  472.                         >PART 'XXX'
  473. xxx:
  474.                         addi.w  #20,$FFFF8284.w
  475.  
  476.                         bset    #0,$FFFF82C3.w
  477.  
  478.                         lea     maglogo+0*640*50+0*60(PC),A0
  479.                         lea     orig_gfx,A1
  480.                         move.w  #128-1,D0
  481. mag_l0:                 move.w  #128-1,D1
  482. mag_l1:
  483.                         move.w  (A0),512(A1)
  484.                         move.w  (A0),256(A1)
  485.                         move.w  (A0),512+256(A1)
  486.                         move.w  (A0)+,(A1)+
  487.                         dbra    D1,mag_l1
  488. ;>                        lea     (320-128)*2(A0),A0
  489. ;>                        lea     512(A1),A1
  490.                         lea     256+512(A1),A1
  491.                         dbra    D0,mag_l0
  492.  
  493.  
  494.                         bsr     mouse_on
  495.                         bsr.s   singen
  496.                         bsr.s   rotator
  497.  
  498.                         rts
  499.                         ENDPART
  500.                         >PART 'Taylor sinus generator'
  501. ;512 Werte im Padded-24-Format (für den DSP geeignet !)
  502. ;d.h. 0 ... $007fffff ... 0 ... $00800001 ...
  503. singen:
  504. size                    EQU 512 ;nicht ändern !
  505.  
  506. sin_gen:                lea     sin,A0
  507.                         moveq   #0,D6
  508.                         lea     size*2+4(A0),A1
  509.                         movea.l A0,A2
  510.                         moveq   #size/4-1,D7
  511. sin_gen1:               lea     sin_fakdiv+16,A3
  512.                         move.l  D6,D5
  513.                         moveq   #7,D2
  514. sin_gen2:               move.w  D2,D1
  515.                         move.l  D6,D3
  516. sin_gen3:               mulu.l  D6,D4:D3
  517.                         rol.l   #8,D3
  518.                         rol.l   #8,D4
  519.                         move.b  D3,D4
  520.                         move.l  D4,D3
  521.                         dbra    D1,sin_gen3
  522.                         divs.l  -(A3),D3
  523.                         add.l   D3,D5
  524.                         subq.w  #2,D2
  525.                         bcc.s   sin_gen2
  526. sin_gen4:               asr.l   #1,D5
  527.                         move.l  D5,(A0)+
  528.                         move.l  D5,-(A1)
  529.                         add.l   #$06487ED5/size,D6 ;2*pi*(2^24)
  530.                         dbra    D7,sin_gen1
  531.                         move.l  #$007FFFFF,-(A1)
  532.                         lea     size(A1),A1
  533.                         move.w  #size/2+size/4-1,D1
  534. sin_gen6:               move.l  (A2)+,(A1)
  535.                         neg.l   (A1)+
  536.                         dbra    D1,sin_gen6
  537.                         rts
  538.                         ENDPART
  539.                         >PART 'TEXT rotator'
  540. rotator:
  541. ; Tabelle zum Abdunkeln berechnen
  542.                         move.w  #2,-(SP)
  543.                         pea     helltab
  544.                         movea.l SP,A0
  545.                         bsr     calc_tc_ausblender
  546.                         addq.w  #6,SP
  547. ; Grafik doppeln
  548.                         lea     orig_gfx+2*65536,A0
  549.                         lea     gfx+4*65536,A1
  550.                         lea     helltab,A2
  551.                         moveq   #0,D1
  552.                         move.w  #$00010000>>1-1,D0
  553. rotator_gengfx_l0:      move.w  -(A0),D1
  554.                         move.w  D1,-(A1)
  555.                         move.w  0(A2,D1.l*2),-(A1)
  556.                         move.w  -(A0),D1
  557.                         move.w  0(A2,D1.l*2),-(A1)
  558.                         move.w  D1,-(A1)
  559.                         dbra    D0,rotator_gengfx_l0
  560. ; Inverse Grafik generieren
  561.                         lea     gfx,A0
  562.                         lea     inverse_gfx,A1
  563.                         moveq   #-1,D0
  564. rotator_genigfx_l0:     REPT 2
  565.                         move.w  (A0)+,D1
  566. ;>                    eori.l  #-1,D1
  567.                         move.w  D1,D2
  568.                         move.w  D2,D3
  569.                         and.w   #%0000000000011111,D1
  570.                         and.w   #%0000011111100000,D2
  571.                         and.w   #%1111100000000000,D3
  572.                         ror.w   #5,D1
  573.                         rol.w   #5,D3
  574.                         or.w    D2,D1
  575.                         or.w    D3,D1
  576.                         move.w  D1,(A1)+
  577.                         ENDR
  578.                         dbra    D0,rotator_genigfx_l0
  579. ; Doubletab generieren...
  580. abdunkelwert            EQU 4
  581.                         lea     doubletab,A0
  582.                         move.l  #$0000FFFF,D0
  583. rota_gendouble_l0:      move.w  D0,D1
  584.                         and.w   #%0000000000011111,D1
  585.                         subq.w  #abdunkelwert,D1
  586.                         bpl.s   rota_gendouble_w0
  587.                         moveq   #0,D1
  588. rota_gendouble_w0:      move.w  D0,D2
  589.                         and.w   #%0000011111100000,D2
  590.                         sub.w   #abdunkelwert<<6,D2
  591.                         bmi.s   rota_gendouble_w2
  592.                         or.w    D2,D1
  593. rota_gendouble_w2:      move.w  D0,D2
  594.                         and.w   #%1111100000000000,D2
  595.                         sub.w   #abdunkelwert<<11,D2
  596.                         bcs.s   rota_gendouble_w3
  597.                         or.w    D2,D1
  598. rota_gendouble_w3:      move.w  D1,0(A0,D0.l*4)
  599.                         move.w  D1,2(A0,D0.l*4)
  600.                         dbra    D0,rota_gendouble_l0
  601.  
  602. ;»w%=30
  603.                         move.w  #0,w
  604. ;»si%=SINQ(w%)*65536
  605.  
  606. rotator_l0:
  607.                         bsr     gen_rotdist
  608.  
  609.                         lea     sin,A0
  610.                         move.w  w,D0
  611.                         move.l  0(A0,D0.w*4),si
  612.  
  613.  
  614.                         moveq   #8,D3
  615.                         move.l  si,D6
  616.                         asr.l   D3,D6
  617.                         move.l  D6,si
  618. ;»co%=COSQ(w%)*65536
  619.                         lea     cos,A0
  620.                         move.l  0(A0,D0.w*4),co
  621.  
  622.                         move.l  co,D6
  623.                         asr.l   D3,D6
  624.                         move.l  D6,co
  625.  
  626.                         lea     gfx+128*1024,A0
  627.                         tst.b   inverse
  628.                         beq.s   rotator_w2
  629.                         adda.l  #256*256*4,A0
  630.                         subq.b  #1,inverse
  631. rotator_w2:             movea.l log_scr,A1
  632.                         adda.l  #640*200/2,A1
  633.                         lea     magnetic,A2
  634.  
  635.                         lea     rotdist+100*4,A4
  636. ;»FOR y%=-50 TO 49
  637.                         move.l  #-50,y
  638. rotator_next_y:         move.l  -(A4),D6
  639.                         cmp.l   #$00000A00,D6
  640.                         ble.s   dorot
  641. ;>                        lea     -640(A1),A1
  642.                         move.w  #640/4-1,D7
  643. norot_l0:
  644.                         move.l  -(A2),-(A1)
  645. ;>                        clr.l   -(A1)
  646.                         dbra    D7,norot_l0
  647.                         bra     norot
  648. dorot:
  649. ;»xstart%=(-50*faktor%) DIV 256
  650.                         move.l  #-80,D3
  651.                         muls    D6,D3
  652.                         asr.l   #8,D3
  653. ;»ystart%=(y%*faktor%) DIV 256
  654.                         move.l  y,D4
  655.                         add.l   #70-20,D4
  656.                         muls    D6,D4
  657.                         asr.l   #8,D4
  658. ;»xpos%=xstart%*si%+ystart%*co%
  659. ;»ypos%=ystart%*si%-xstart%*co%
  660.                         move.l  D3,D0
  661.                         move.l  D4,D1
  662.                         muls.l  si,D0
  663.                         muls.l  co,D4
  664.                         add.l   D4,D0
  665.                         muls.l  si,D1
  666.                         muls.l  co,D3
  667.                         sub.l   D3,D1
  668. ;»xofs%=(si%*faktor%) DIV 256
  669.                         move.l  si,D2
  670.                         muls.l  D6,D2
  671.                         clr.w   D2
  672.                         swap    D2
  673. ;»yofs%=-(co%*faktor%) DIV 256
  674.                         move.l  co,D3
  675.                         muls.l  D6,D3
  676.                         asr.l   #8,D3
  677. ;»FOR x%=0 TO 99
  678.                         neg.l   D3
  679.                         lsr.l   #8,D0
  680.                         swap    D1
  681.                         swap    D3
  682.                         move.l  D1,D7
  683.                         clr.w   D7
  684.                         add.l   D7,D0
  685.                         move.l  D3,D7
  686.                         clr.w   D7
  687.                         add.l   D7,D2
  688.                         move.w  #160/10-1,D7
  689. rotator_next_x:
  690. ;»WORD{scrcntr%+(ypos% DIV 65536)*640+(xpos% DIV 65536)*2}=-1
  691. ; d0 xpos  yn|00|xv|xn
  692. ; d1 ypos  00|00|00|yv
  693. ; d2 xofs  yn|00|xv|xn
  694. ; d3 yofs  00|00|00|yv
  695.                         REPT 10
  696.                         move.w  D0,D4
  697.                         move.b  D1,D4
  698.                         move.l  0(A0,D4.w*4),-(A1)
  699.                         add.l   D2,D0
  700.                         addx.b  D3,D1
  701.                         ENDR
  702.  
  703. ;>                        add.l   #$70000050,D2
  704. ;>                        moveq   #0,D4
  705. ;>                        addx.b  D4,D3
  706.  
  707. ;»NEXT x%
  708.                         dbra    D7,rotator_next_x
  709. ;»ADD faktor%,3
  710.  
  711. ;»NEXT y%
  712. norot:
  713. ;>                        lea     -640(A1),A1
  714.                         addq.l  #1,y
  715.                         cmpi.l  #50,y
  716.                         bne     rotator_next_y
  717.  
  718.                         addi.w  #3+2,w
  719.                         cmpi.w  #512,w
  720.                         blt.s   rotator_winkel_w0
  721.                         subi.w  #512,w
  722. rotator_winkel_w0:
  723.  
  724.                         tst.b   schrift_on
  725.                         beq.s   rotator_w1
  726.                         movea.l log_scr,A1
  727.                         adda.l  schrift_pos,A1
  728.                         movea.l schrift_block,A0
  729.                         bsr     schrift
  730. rotator_w1:
  731.  
  732.                         cmpi.b  #scankey_return,key
  733.                         bne.s   rotator_w0
  734.                         bsr     do_command
  735. rotator_w0:
  736.  
  737.                         clr.l   $FFFF9800.w
  738.                         bsr     wvbl_swap_screens
  739. ;>                        bsr     swap_screens
  740.                         move.l  #160,$FFFF9800.w
  741.  
  742.                         bra     rotator_l0
  743.                         rts
  744.                         ENDPART
  745. splinewerte:            DS.W 10
  746. splines:                DC.W $A000,$A000,$A000,$0000
  747.                         DC.W $0000,$0000,$0000,$0D00
  748.                         DC.W $0000,$3000,-$1000,$3000+$2000
  749. splinecnt:              DC.W 0
  750.  
  751.                         >PART 'TEXT Rotdist'
  752. ;> a = 60                      d0   <<20
  753. ;> b = 20
  754. ;> aofs = b/100                d1   <<20
  755. ;> h = 50                      d2   <<20
  756. ;» FOR c=0 TO 99               d3
  757. ;»   d=h/(TAN(RAD(a))/16)      d4
  758. ;»   PRINT #1,MKL$(d);
  759. ;»   ADD a,aofs
  760. ;» NEXT c
  761.  
  762. gen_rotdist:
  763.                         lea     splinewerte,A0
  764.                         lea     splines,A1
  765.                         move.w  splinecnt,D0
  766.                         moveq   #3-1,D6
  767.                         bsr     spline
  768.  
  769.                         addi.w  #$0150,splinecnt
  770.                         tst.w   splinecnt
  771.                         bpl.s   gen_w0
  772.                         bsr     wait_for_space
  773. gen_w0:
  774.                         andi.w  #$7FFF,splinecnt
  775.  
  776.                         lea     splinewerte,A0
  777.                         moveq   #0,D0
  778. ;>                        BREAKPT ' '
  779.                         move.w  (A0)+,D0
  780.                         lsl.l   #8,D0
  781. ;>                        move.l  #10<<16<<4,D0
  782.  
  783.                         moveq   #0,D1
  784.                         move.w  (A0)+,D1
  785.                         lsl.l   #8,D1
  786. ;>                        swap    D1
  787. ;>                        lsr.l   #1,D1
  788. ;>                        move.l  #$000D0000,D1
  789.  
  790.                         moveq   #0,D2
  791.                         move.w  (A0)+,D2
  792.                         lsl.l   #8,D2
  793. ;>                        swap    D2
  794. ;>                        move.l  #$00300000,D2
  795.  
  796.                         IFNE 0
  797.                         move.l  #10<<16<<4,D0
  798.                         moveq   #0,D0
  799.  
  800.                         move.w  mousey,D2
  801.                         cmp.w   #14,D2
  802.                         bge.s   w4
  803.                         moveq   #14,D2
  804. w4:                     move.w  D2,mousey
  805.                         swap    D2
  806.                         clr.w   D2
  807.                         move.l  #$00300000,D2
  808.  
  809.                         moveq   #0,D1
  810.                         move.w  mousex,D1
  811.                         ext.l   D1
  812.                         bmi.s   gen_rotdist_m
  813. ;>                        neg.l   D1
  814.  
  815.                         lsl.l   #8,D1
  816.                         lsl.l   #3,D1
  817. ;>                        cmp.l   #-$080000,D1
  818. ;>                        bge.s   w1
  819. ;>                        move.l  #-$080000,D1
  820. ;>                        BREAKPT ' '
  821. ;>
  822. ;>w1:
  823.  
  824.                         cmp.l   #$00080000,D1
  825.                         ble.s   w0
  826.                         move.l  #$00080000,D1
  827. w0:
  828.                         move.l  #$000D0000,D1
  829.                         ENDC
  830.  
  831.                         lea     rotdist,A0
  832.                         lea     tan,A1
  833.                         moveq   #128-1,D3
  834. gen_rotdist_l0:         move.l  D2,D4
  835.                         move.l  D0,D5
  836.                         swap    D5
  837.                         ext.l   D5
  838.                         divs.l  0(A1,D5.w*4),D4
  839.                         move.l  D4,(A0)+
  840.                         add.l   D1,D0
  841.                         dbra    D3,gen_rotdist_l0
  842.                         rts
  843.  
  844. gen_rotdist_m:
  845.                         neg.l   D1
  846.  
  847.                         lsl.l   #8,D1
  848.                         lsl.l   #3,D1
  849.  
  850.                         cmp.l   #$00080000,D1
  851.                         ble.s   w1
  852.                         move.l  #$00080000,D1
  853. w1:
  854.                         lea     rotdist+400,A0
  855.                         lea     tan,A1
  856.                         moveq   #100-1,D3
  857. gen_rotdist_l1:         move.l  D2,D4
  858.                         move.l  D0,D5
  859.                         swap    D5
  860.                         ext.l   D5
  861.                         divs.l  0(A1,D5.w*4),D4
  862.                         move.l  D4,-(A0)
  863.                         add.l   D1,D0
  864.                         dbra    D3,gen_rotdist_l1
  865.                         rts
  866.                         ENDPART
  867.                         >PART 'Schrift'
  868. ; a0 BLOCK
  869. ; a1 screenpos
  870. schrift:
  871.  
  872.                         move.l  schrift_sub,D6
  873.                         sub.l   D6,brightness
  874.                         bcc.s   schrift_w1
  875.                         clr.w   brightness
  876. schrift_w1:
  877.                         move.w  brightness,D6
  878.                         move.w  D6,D4
  879.                         lsl.w   #5,D4
  880.                         or.w    D6,D4
  881.                         lsl.w   #6,D4
  882.                         or.w    D6,D4
  883.                         subq.w  #8,D6
  884.                         bcc.s   schrift_w3
  885.                         moveq   #0,D6
  886. schrift_w3:             move.w  D6,D5
  887.                         lsl.w   #5,D5
  888.                         or.w    D6,D5
  889.                         lsl.w   #6,D5
  890.                         or.w    D6,D5
  891.  
  892.                         move.w  #31,D6
  893.                         sub.w   brightness,D6
  894.                         move.w  D6,D3
  895.                         lsl.w   #5,D3
  896.                         or.w    D6,D3
  897.                         lsl.w   #6,D3
  898.                         or.w    D6,D3
  899.                         or.w    #%0000000000100000,D3
  900.                         move.w  D3,D6
  901.                         swap    D3
  902.                         move.w  D6,D3
  903.  
  904.                         move.w  (A0)+,D7
  905.                         move.w  (A0)+,D0
  906.  
  907.                         move.w  D0,D1
  908.                         addq.w  #1,D1
  909.                         movea.l A1,A6
  910. schrift_l3:             movea.l A6,A5
  911.                         move.w  D7,D6
  912. schrift_l4:             REPT 4
  913.                         clr.l   (A5)+
  914.                         ENDR
  915.                         dbra    D6,schrift_l4
  916.                         lea     640*2(A6),A6
  917.                         dbra    D1,schrift_l3
  918.  
  919.                         move.l  schrift_scroll,D6
  920.                         add.l   D6,schrift_pos
  921.                         adda.l  D6,A1
  922.                         adda.l  D6,A1
  923.  
  924. schrift_l0:             move.w  D7,D6
  925.                         movea.l A1,A3
  926. schrift_l2:             move.b  (A0)+,D2
  927.                         moveq   #8-1,D1
  928. schrift_l1:             add.b   D2,D2
  929.                         bcc.s   schrift_w0
  930.                         move.w  D4,(A3)
  931.                         or.w    D5,640(A3)
  932.                         and.l   D3,642(A3)
  933.                         and.l   D3,640*3+2(A3)
  934.  
  935. schrift_w0:             addq.w  #2,A3
  936.                         dbra    D1,schrift_l1
  937.                         dbra    D6,schrift_l2
  938.                         lea     640*2(A1),A1
  939.                         dbra    D0,schrift_l0
  940.                         rts
  941.                         ENDPART
  942.                         >PART 'Do Command'
  943. do_command:             movea.l cmd_pos,A0
  944.                         move.w  (A0)+,D0
  945.                         cmp.w   #cmd_schrift_on,D0
  946.                         bne.s   do_cmd_w0
  947.                         move.l  (A0)+,schrift_pos
  948.                         move.l  (A0)+,schrift_block
  949.                         clr.l   schrift_sub
  950.                         move.l  #31<<16,brightness
  951.                         clr.l   schrift_scroll
  952.                         st      schrift_on
  953.                         bra.s   do_cmd_e
  954. do_cmd_w0:              cmp.w   #cmd_schrift_weg,D0
  955.                         bne.s   do_cmd_w1
  956.                         move.l  #$00010000,schrift_sub
  957.                         move.l  #-640*2,schrift_scroll
  958.                         bra.s   do_cmd_e
  959. do_cmd_w1:              cmp.w   #cmd_schrift_off,D0
  960.                         bne.s   do_cmd_w2
  961.                         sf      schrift_on
  962.                         bra.s   do_cmd_e
  963. do_cmd_w2:
  964.                         cmp.w   #cmd_inverse,D0
  965.                         bne.s   do_cmd_w3
  966.                         move.b  #3,inverse
  967.                         bra.s   do_cmd_w3
  968. do_cmd_w3:
  969.                         lea     cmd_list,A0
  970.  
  971. do_cmd_e:               move.l  A0,cmd_pos
  972.                         clr.b   key
  973.                         rts
  974.                         ENDPART
  975.                         >PART 'Spline-Rout'
  976. ; a0 Zielspiecher für die Spline-Werte
  977. ; a1 Spline-Stützpunkte
  978. ; d0 Counter (0-$7fff)
  979. ; d6 dimension der Spline-1 (normal 2-1)
  980.                         IFNE 1
  981. spline:
  982.                         moveq   #15,D7
  983. *       move.l  #$7FFF,D0 ; t%    d0
  984. .l0:                    lea     tbuff,A2
  985.                         move.l  D0,D1
  986.                         eori.w  #$7FFF,D0 ; t2%   d1
  987.                         move.w  D0,D2
  988.                         move.w  D1,D3
  989.                         mulu    D0,D2
  990.                         lsr.l   D7,D2   ; t_2
  991.                         move.w  D2,D4
  992.                         mulu    D0,D4
  993.                         lsr.l   D7,D4   ; t_3  >>1
  994.                         move.w  D4,(A2)+
  995.                         move.w  D1,D4
  996.                         mulu    D2,D4
  997.                         lsr.l   D7,D4   ; 3*t_2_m_t2 >>2
  998.                         move.w  D4,(A2)+
  999.                         mulu    D1,D3
  1000.                         lsr.l   D7,D3
  1001.                         move.w  D3,D4
  1002.                         mulu    D0,D4
  1003.                         lsr.l   D7,D4   ; 3*t_m_t2_2 >>3
  1004.                         move.w  D4,(A2)+
  1005.                         mulu    D1,D3
  1006.                         lsr.l   D7,D3   ; t2_3 >>4
  1007.                         move.w  D3,(A2)+
  1008. *       lea     spline_point,A0
  1009. *       moveq   #2-1,D6
  1010. *       lea     pts(PC),A1
  1011. .l1:                    lea     tbuff,A2
  1012.                         move.w  (A2)+,D1
  1013.                         muls    (A1)+,D1
  1014.                         REPT 2
  1015.                         move.w  (A2)+,D2
  1016.                         muls    (A1)+,D2
  1017.                         muls.l  #3,D2
  1018.                         add.l   D2,D1
  1019.                         ENDR
  1020.                         move.w  (A2)+,D2
  1021.                         muls    (A1)+,D2
  1022.                         add.l   D2,D1
  1023.                         add.l   D1,D1
  1024.                         swap    D1
  1025.                         move.w  D1,(A0)+
  1026.                         dbra    D6,.l1
  1027.  
  1028. *       sub.w   #200,D0 ; Zähler...
  1029. *       bpl     .l0
  1030.                         rts
  1031.                         ENDC
  1032.                         ENDPART
  1033.  
  1034.                         DATA
  1035.                         >PART 'DATA Programm'
  1036.                         PATH 'D:\JDS\SCP'
  1037. vmode:                  IBYTES 'R_TC__PF.SCP'
  1038. ;>                        IBYTES 'DBA.SCP'
  1039.  
  1040.                         IF module_on<>0
  1041. module:                 PATH 'C:\'
  1042.                         IBYTES 'FOLLOW.MOD'
  1043.                         ENDC
  1044.  
  1045.                         ENDPART
  1046.                         >PART 'DATA Rotator'
  1047.                         PATH 'D:\4K'
  1048. maglogo:                IBYTES 'YY.TRU',,8
  1049. magnetic:
  1050.  
  1051. cmd_pos:                DC.L cmd_list
  1052.  
  1053. cmd_schrift_on          EQU 0
  1054. cmd_schrift_weg         EQU 1
  1055. cmd_last_cmd            EQU 2
  1056. cmd_schrift_off         EQU 3
  1057. cmd_inverse             EQU 4
  1058.  
  1059. cmd_list:
  1060.                         DC.W cmd_schrift_on
  1061.                         DC.L 640*88+320-10*8,block0
  1062.                         DC.W cmd_schrift_weg
  1063.                         DC.W cmd_schrift_on
  1064.                         DC.L 640*88+320-6*8,block1
  1065.                         DC.W cmd_schrift_weg
  1066.                         DC.W cmd_schrift_on
  1067.                         DC.L 640*88+320-9*8,block2
  1068.                         DC.W cmd_schrift_weg
  1069.                         DC.W cmd_schrift_off
  1070.                         DC.W cmd_inverse
  1071.                         DC.W cmd_last_cmd
  1072.  
  1073.                         PATH 'D:\4K\'
  1074. tan:                    IBYTES 'TAN.BIN'
  1075.  
  1076. sin_fakdiv:             DC.L -6,120,-5040,362880 ;-3!, 5!, -7!, 9!
  1077.  
  1078. block2:                 DC.W 9-1,7-1
  1079.                         DC.B %11100111,%00011100,%11111111,%11100111,%11111001,%11111110,%00000000,%00000000,%00000000
  1080.                         DC.B %11100111,%10011100,%00001110,%00000111,%00000001,%11000111,%00000000,%11000000,%00000000
  1081.                         DC.B %11100111,%11011100,%00001110,%00000111,%00000001,%11000111,%00000000,%00000000,%00000000
  1082.                         DC.B %11100111,%11111100,%00001110,%00000111,%11100001,%11001110,%11000110,%11001110,%01100011
  1083.                         DC.B %11100111,%01111100,%00001110,%00000111,%00000001,%11111100,%11000110,%11011011,%01101011
  1084.                         DC.B %11100111,%00111100,%00001110,%00000111,%00000001,%11001110,%01101100,%11011000,%01101011
  1085.                         DC.B %11100111,%00011100,%00001110,%00000111,%11111001,%11000111,%00111000,%11001111,%00110110
  1086.  
  1087. block0:                 DC.W 10-1,7-1
  1088.                         DC.W %1110000001110000,%1110011111100111,%0011101110111000,%0111110001111000
  1089.                         DC.W %0011111001111111
  1090.                         DC.W %1110000001110000,%1110111001110111,%0011101110111000,%1110111011101100
  1091.                         DC.W %0111011101111111
  1092.                         DC.W %1110000001110000,%1110111000000111,%0111001110111000,%1110111011100000
  1093.                         DC.W %0111000000011100
  1094.                         DC.W %1110000001110000,%1110111000000111,%1110000111110000,%1110111011111000
  1095.                         DC.W %0011111000011100
  1096.                         DC.W %1110000001110000,%1110111000000111,%0111000011100000,%1110111011100000
  1097.                         DC.W %0000011100011100
  1098.                         DC.W %1111111101110000,%1110111001110111,%0011100011100000,%1110111011100000
  1099.                         DC.W %0111011100011100
  1100.                         DC.W %1111111100111111,%1100011111100111,%0011100011100000,%0111110011100000
  1101.                         DC.W %0011111000011100
  1102.  
  1103. block1:                 DC.W 6-1,9-1
  1104.                         DC.W %0000000000000000,%0000000000000000,%0000110000000000
  1105.                         DC.W %0000000000000000,%0000000000000000,%0000111110000000
  1106.                         DC.W %1111000111001110,%0011100111001101,%1100111000011100
  1107.                         DC.W %1101101100011011,%0110001101101111,%0110110000110000
  1108.                         DC.W %1101101100011110,%0011001111001110,%0110110000011000
  1109.                         DC.W %1101101100011000,%0001101100001100,%0110110110001100
  1110.                         DC.W %1111001100001110,%0111000111001100,%0110011100111000
  1111.                         DC.W %1100000000000000,%0000000000000000,%0000000000000000
  1112.                         DC.W %1100000000000000,%0000000000000000,%0000000000000000
  1113.  
  1114. schrift_on:             DC.B 0
  1115. inverse:                DC.B 0
  1116.                         EVEN
  1117.  
  1118.                         PATH 'C:\'
  1119. orig_gfx:               IBYTES 'ORIG.TPI',,128
  1120.                         ENDPART
  1121.  
  1122. _bssstart:              BSS
  1123.  
  1124.                         >PART 'BSS Allgemein'
  1125. orig_sp:                DS.L 1
  1126.                         DS.B 8192
  1127. own_stack               EQU *
  1128.  
  1129. jds_block_adr:          DS.L 1
  1130. background_color_oadr:  DS.L 1
  1131. background_color_4:     DS.L 1
  1132. background_color_8:     DS.L 1
  1133. background_color_tc:    DS.L 1
  1134. phys_scr:               DS.L 1
  1135. log_scr:                DS.L 1
  1136. acia_block              EQU *
  1137. key:                    DS.B 1
  1138. joystick0:              DS.B 1
  1139. joystick1:              DS.B 1
  1140. mousek:                 DS.B 1
  1141. mousex:                 DS.W 1
  1142. mousey:                 DS.W 1
  1143. last_acia_block:        DS.L 1
  1144.  
  1145.                         ENDPART
  1146.                         >PART 'BSS Programm'
  1147.  
  1148.                         CNOP 0,4
  1149. screen0:                DS.L x_size*y_size/2
  1150. screen1:                DS.L x_size*y_size/2
  1151.  
  1152.                         ENDPART
  1153.                         >PART 'BSS Rotator'
  1154. rotdist:                DS.L 128
  1155. schrift_scroll:         DS.L 1
  1156. schrift_sub:            DS.L 1
  1157. schrift_pos:            DS.L 1
  1158. schrift_block:          DS.L 1
  1159. sin:                    DS.L 512/4
  1160. cos:                    DS.L 512
  1161. w:                      DS.W 1
  1162. si:                     DS.L 1
  1163. co:                     DS.L 1
  1164. y:                      DS.L 1
  1165. doubletab:              REPT 4
  1166.                         DS.L 65536/2
  1167.                         ENDR
  1168. brightness:             DS.L 1
  1169. helltab:                DS.L 65536/2
  1170. gfx:                    DS.L 256*256
  1171. inverse_gfx:            DS.L 256*256
  1172.                         ENDPART
  1173. tbuff:                  DS.L 6
  1174.  
  1175. _bssende:
  1176. prg_ende:               END
  1177.  
  1178.                         >PART 'JDS-Dokumentation'
  1179. ; Julian Dentro System - Kurzdokumentation der Befehle
  1180. ; Alle Routinen mit der Milbe (~) vor der Programmierer-Kennung sind mit
  1181. ; Vorsicht zu geniesen. Sie wurden zwar implementiert aber noch nie verwendet
  1182. ; bzw. getestet!
  1183. ;
  1184. ;
  1185. ; dentro_exit                           Lucky
  1186. ; Dentro Abbrechen und verlassen.
  1187. ;
  1188. ; init_soundchip                        Lucky
  1189. ; Soundchipinitialisierung (Lautsprecher beim Falcon wird ausgeschaltet!)
  1190. ;
  1191. ; add_vblrout                           Lucky
  1192. ; .w   Priorität (0=hoch..3=niedrig)
  1193. ; .l   Adr. Routine
  1194. ; Neue VBL-Routine installieren
  1195. ;
  1196. ; sub_vblrout                           Lucky
  1197. ; .l   Adr. Routine
  1198. ; VBL-Routine aus seinem Slot entfernen
  1199. ;
  1200. ; subskript                             Lucky
  1201. ; .l  Adr. des Subskripts
  1202. ; Aufruf von "Unterskripts", vergleichbar mit Unterprogrammen in GFA
  1203. ;
  1204. ; return                                Lucky
  1205. ; Zum letzten "Oberskript" zurückkehren. Es sind 16 Verschachtelungen erlaubt.
  1206. ;
  1207. ; wvbl_anz                              Lucky
  1208. ; .w  Anz. der VBLs
  1209. ; Wartet eine bestimmte Anzahl von VBLs.
  1210. ;
  1211. ; wvbl                                  Lucky
  1212. ; Wartet auf den nächsten VBL.
  1213. ;
  1214. ; wvbl_swap_screens                     Lucky
  1215. ; Wartet auf den nächsten VBL und vertauscht die Bildschirme.
  1216. ;
  1217. ; wait_swap_colors                      Lucky
  1218. ; Auf Ende der Überblendung warten
  1219. ;
  1220. ; wait_for_space                        Lucky
  1221. ; Auf Space warten
  1222. ;
  1223. ; wait_until_faded                      Lucky
  1224. ; Warten, bis Modul auf Ziel gefaded
  1225. ;
  1226. ; set_falconres                         Lucky
  1227. ; .l  Zeiger auf eine mit Screens Pain (Mugwumps/Aura) erzeugte SCP-Datei
  1228. ; Auflösung beim Falcon setzen
  1229. ;
  1230. ; swap_16_colors                        Lucky
  1231. ; swap_256_colors                     ~ Lucky
  1232. ; .l  Adr. Zielpalette
  1233. ; .w  Anz. der Schritte (gesamt)
  1234. ; Überblend-Routinen für 16 und 256 Farben.
  1235. ;
  1236. ; depack_pic                            Lucky
  1237. ; .l  Bildadresse
  1238. ; .w  Plane-Offset (Plane-Nr. * 2)
  1239. ; Entpackroutinen für 1 Plane in 8-Plane-Pic; Cacheoptimierte Falcon-Version
  1240. ; Eigenes Format, siehe "PACK.GFA"...
  1241. ;
  1242. ; play_module                           Lucky
  1243. ; .l  Adr. Module
  1244. ; .w  (Anfangs-)Lautstärke (0=Laut; $40=Leise)
  1245. ; .w  Surround-Delay (0..$800); 0 = Aus
  1246. ; Module-Player (Falcon) [Routine von bITmASTER]
  1247. ; Init und Deinit automatisch. Vorzeitig mit stop_module stoppen.
  1248. ;
  1249. ; stop_module                           Lucky
  1250. ; Stopt das aktuelle Module.
  1251. ;
  1252. ; fade_module                           Lucky
  1253. ; .w  Ziellautstärke
  1254. ; .w  Speed (Anzahl VBLs)
  1255. ; Fadet das aktuelle Modul ein/aus. FUNKTIONIERT MOMENTAN NICHT!
  1256. ;
  1257. ; wait_to_modpos                        Lucky
  1258. ; Wartet auf ein 8-Kommando im Modul
  1259. ;
  1260. ; textkonverter                       ~ Lucky
  1261. ; .l  Text-Adresse (Textende=0.b)
  1262. ; .l  Adr. Umwandlungstabelle
  1263. ; Wandelt ASCII-Text in beliebiges andere Format um.
  1264. ;
  1265. ; clear_4_planes                      ~ Lucky
  1266. ; clear_8_planes                        Lucky
  1267. ; .w  Start-Offset (=2*plane_nr+planes_anz*40*startzeile)
  1268. ; .w  Zeilenanzahl-1
  1269. ; Plane-Löschroutinen. Löscht jeweils nur eine Plane...
  1270. ;
  1271. ; swap_screens                          Lucky
  1272. ; Wechselt zwischen Logischen und Physikalischen Bildschirm.
  1273. ;
  1274. ; reloziere                             Lucky
  1275. ; .l  Zeiger auf Routine
  1276. ; Relozierroutine (für nachgeladene Programme etc.)
  1277. ;
  1278. ; Hardisk-Playroutine (HD-Recording...) Lucky
  1279. ; hdplay_init (Initialisieren von der Playroutine)
  1280. ; .l  Zeiger auf HD-Skript: .l  0 = Ende
  1281. ;                               >0: Länge der Daten
  1282. ;                                   .l Startposition im aktuellen File
  1283. ;                               <0: -Länge der Daten
  1284. ;                                   .l Pointer auf Dateinamen
  1285. ;                                   .l Startposition im File
  1286. ; Es wird MFP-Interrupt 7 benötigt!
  1287. ; hdplay (Möglichst oft aufrufen; NICHT IM VBL!!!)
  1288. ; hdplay_stop (Abbrechen...)
  1289. ;
  1290. ; load                                  Lucky
  1291. ; .l  Zeiger fname, mit 0-Byte abgeschlossen
  1292. ; .l  Zieladresse
  1293. ; Lädt eine Datei an die Zieladresse
  1294. ;
  1295. ; save                                  Lucky
  1296. ; .l  Zeiger fname, mit 0-Byte abgeschlossen
  1297. ; .l  Startadresse
  1298. ; .l  Anzahl Bytes
  1299. ; Speichert den angegebenen Speicherbereich in eine Datei
  1300. ;
  1301. ; run_file                              Lucky
  1302. ; .l  Zeiger auf fname, mit 0-Byte abgeschlossen
  1303. ; .l  Zieladresse des Files
  1304. ; Lädt eine Programmdatei nach, reloziert diese und startet sie.
  1305. ; Bei 4(sp) wird der Datei ein Zeiger auf den JDS-Block übergeben. Rücksprung mit
  1306. ; rts.
  1307. ;
  1308. ; set_scradr                            Lucky
  1309. ; .l  Adresse von log_scr-Variable
  1310. ; .l  Adresse von phys_scr-Variable
  1311. ; Teilt den JDS-Funktionen die Adresse der beiden Variablen mit. So ist es
  1312. ; möglich, daß jedes Programm seine eigene Variablen hierfür hat und trotzdem
  1313. ; die JDS-Funktionen benutzen kann.
  1314. ;
  1315. ; load_prog                             Lucky
  1316. ; .l  Zeiger auf fname, mit 0-Byte abgeschlossen
  1317. ; .l  Zieladresse des Files
  1318. ; Lädt eine Programmdatei nach, reloziert diese aber startet sie nicht.
  1319. ; Bei 4(sp) wird der Datei ein Zeiger auf den JDS-Block übergeben. Rücksprung mit
  1320. ; rts.
  1321. ;
  1322. ; run_prog                              Lucky
  1323. ; .l  Adresse des mit load_prog geladenen Programmes
  1324. ; Startet eine mit load_prog geladene Programmdatei
  1325. ; Bei 4(sp) wird der Datei ein Zeiger auf den JDS-Block übergeben. Rücksprung mit
  1326. ; rts.
  1327. ;
  1328. ; wait_timer                            Lucky
  1329. ; .l  Mindestzahl der VBLs
  1330. ; Wartet, bis der VBL-Zähler in $466.w (long) einen bestimmten Wert mindestens
  1331. ; erreicht hat.
  1332. ;
  1333. ; clear_timer                           Lucky
  1334. ; Löscht den VBL-Zähler in $466.w (long).
  1335. ;
  1336. ; depack_ice                            Lucky
  1337. ; .l  Zeiger auf die zu entpackenden Daten
  1338. ; Entpackt die Daten in ihrem Bereich. Es wird Ice 2.4 verwendet.
  1339. ; ACHTUNG: Die Daten verlängern sich dabei natürlich!!!!
  1340. ;
  1341. ; run_packed_file                       Lucky
  1342. ; .l  Zeiger auf fname, mit 0-Byte abgeschlossen
  1343. ; .l  Zieladresse des Files
  1344. ; Lädt eine Programmdatei nach, entpackt, reloziert und startet diese.
  1345. ; Bei 4(sp) wird der Datei ein Zeiger auf den JDS-Block übergeben. Rücksprung mit
  1346. ; rts.
  1347. ;
  1348. ; load_packed_prog                      Lucky
  1349. ; .l  Zeiger auf fname, mit 0-Byte abgeschlossen
  1350. ; .l  Zieladresse des Files
  1351. ; Lädt eine Programmdatei nach, entpackt und reloziert diese, aber startet sie
  1352. ; nicht.
  1353. ;
  1354. ; copy_block                          ~ Nightmare
  1355. ; .l  Adr. Quelle
  1356. ; .l  Adr. Ziel
  1357. ; .l  Anzahl Bytes
  1358. ; Kopiert einen Speicherbereich. Überlappungen werden hierbei berücksichtigt.
  1359. ;
  1360. ; clear_block                         ~ Nightmare
  1361. ; .l  Adr.
  1362. ; .l  Anzahl Bytes
  1363. ; Löscht den angegebenen Speicherbereich
  1364. ;
  1365. ; mouse_on                              Nightmare
  1366. ; mouse_off                             Nightmare
  1367. ; Schaltet die Maus ein/aus
  1368. ;
  1369. ; inst_cache_on                         Nightmare
  1370. ; inst_cache_off                        Nightmare
  1371. ; Schalten den Befehls-Cache vom 68030er ein/aus.
  1372. ;
  1373. ; data_cache_on                         Nightmare
  1374. ; data_cache_off                        Nightmare
  1375. ; Schalten den Daten-Cache vom 68030er ein/aus.
  1376. ;
  1377. ; cpu_16mhz                             Nightmare
  1378. ; cpu_8mhz                              Nightmare
  1379. ; Stellen die CPU-Geschwindigkeit ein.
  1380. ;
  1381. ; blitter_16mhz                         Nightmare
  1382. ; blitter_8mhz                          Nightmare
  1383. ; Stellen die Blitter-Geschwindigkeit ein.
  1384. ;
  1385. ; shadowregs_on                         Nightmare
  1386. ; shadowregs_off                        Nightmare
  1387. ; Bestimmen, ob die ST-Shadowregister angeschaltet sind oder nicht.
  1388. ;
  1389. ; blitter_on                            Nightmare
  1390. ; blitter_off                           Nightmare
  1391. ; Schalten den Blitter ein bzw. aus
  1392. ;
  1393. ; clear_key_vectors                     Lucky
  1394. ; Löscht die Key-Vektoren vom Tastaturhandler.
  1395. ;
  1396. ; set_key_vector                        Lucky
  1397. ; .w  Tasten-Scancode
  1398. ; .l  Adr. Routine
  1399. ; Setzt einen Keyvector auf die entsprechende Routine. Der Acia-Handler ruft
  1400. ; diese automatisch auf, wenn die entsprechende Taste gedrückt wird.
  1401. ; WICHTIG: Die Routine muß mit RTS enden und darf nur die Register D0-D1/A0
  1402. ;          verändern! Alle anderen Register müssen von der Routine gerettet
  1403. ;          werden. Die Routine sollte auch sehr kurz sein, da sie zur Laufzeit
  1404. ;          des ACIA-Interrupts ausgeführt wird!
  1405. ;
  1406. ; clear_key_vector                      Lucky
  1407. ; .w  Tasten-Scancode
  1408. ; Löscht den Keyvector der angegebenen Taste
  1409. ;
  1410. ; calc_tc_ausblender                    Lucky
  1411. ; .l  Zieladresse (Platz für 32768 Longs!)
  1412. ; .w  Abdunklungsgeschwindigkeit
  1413. ; Berechnet eine Ausblend-Tabelle für den TrueColor-Modus.
  1414. ;
  1415. ; autoscroller_tc_init                  Lucky
  1416. ; autoscroller_tc                       Lucky
  1417. ; .l  Adr. Scroll-Tabelle
  1418. ; .w  X-Size in Pixeln
  1419. ; Wartet auf den nächsten VBL, schaltet die Bildschirme um und zeigt den
  1420. ; den neuen Bildschirm an der gewünschten Scrollposition an.
  1421. ; An autoscroll_ready kann man sehen, ob das Scrollskript abgearbeitet ist (-1.b)
  1422. ; autoscroll_tc_init muß vorher einmal aufgerufen werden.
  1423. ; (TrueColor!) ==> Es kann nur auf gerade X-Offsets gescrollt werden!
  1424. ;                  Hierbei wird automatisch gerundent...
  1425. ;
  1426. ; calc_sintab                           Lucky
  1427. ; .l  Adr. der Zieltabelle (40960 Words):
  1428. ;              Je Gradschritte 256 Bytes
  1429. ;               255 = Drehung um 360 Grad
  1430. ;              ==> Cosinus = Sinus + 256*64
  1431. ; Berechnet eine Sinus/Cosinus-Tabelle in einem speziellen Format. Beispiel:
  1432. ; Rotation um die X-Achse, wenn A0=Sinus xw, A1=Cosinus xw, d0=x, d1=y, d2=z
  1433. ; Oberes Bytes von d0,d1,d2 jeweils=0 (!)
  1434. ;                       move.w  d1,d4
  1435. ;                       move.b  (a1,d1.w),d1
  1436. ;                       add.b   (a0,d2.w),d1
  1437. ;                       move.b  (a1,d2.w),d2
  1438. ;                       sub.b   (a0,d4.w),d2
  1439. ; Rotation um die Y-Achse, A2=Sinus yw, A3=Cosinus yw
  1440. ;                       move.b  d0,d4
  1441. ;                       move.b  (a3,d0.w),d0
  1442. ;                       add.b   (a2,d2.w),d0
  1443. ;                       move.b  (a3,d2.w),d2
  1444. ;                       sub.b   (a2,d4.w),d2
  1445. ; Rotation um die Z-Achse, A4=Sinus zw, A5=Cosinus zw
  1446. ;                       move.b  d0,d4
  1447. ;                       move.b  (a5,d0.w),d0
  1448. ;                       add.b   (a4,d1.w),d0
  1449. ;                       move.b  (a5,d1.w),d1
  1450. ;                       sub.b   (a4,d4.w),d1
  1451. ;
  1452. ; rotate_dotfield                       Lucky
  1453. ; A0.l  Adr. Quellpunktefeld (Je Punkt -128..127)
  1454. ; A1.l  Adr. Zielpunktefeld
  1455. ; A2.l  Adr. Sinus/Cosinus-Tabelle
  1456. ; D0.l  xw (0..255)
  1457. ; D1.l  yw (0..255)
  1458. ; D2.w  Basistiefe
  1459. ; D3.w  Anzahl Punkte-1
  1460. ; Rotiert das Punktefeld um die X- und Y-Achse und legt die errechneten Daten
  1461. ; in das Zielpunktefeld ab. Die Sinus/Cosinus-Tabelle muß zuvor mit
  1462. ; calc_sintab erzeugt worden sein. Punkte sind jeweils Bytes
  1463. ;
  1464. ; calc_zoomtab                          Lucky
  1465. ; .l  Adr. Zoomtab (Max. Anzahl Punkte*2 Words)
  1466. ; Berechnet die für den 3D-Zoomer benötigte Zoomtabelle
  1467. ;
  1468. ; zoom_dotfield                         Lucky
  1469. ; A0.l  Punktefeld (von rotate_dotfield)
  1470. ; A1.l  Zielfeld (Anzahl Punkte*2 Words)
  1471. ; A2.l  Adr. Zoomtab
  1472. ; D0.w  Anzahl Punkte-1
  1473. ; Rechnet ein mit rotate_dotfield gedrehtes 3D-Punktesystem auf gezoomte
  1474. ; Koordinaten um. Ergebnis im X.w, Y.w - Format
  1475. ;
  1476. ; calc_morphfield                       Lucky
  1477. ; A0.l  Adr Dotfield Original
  1478. ; A1.l  Adr Dotfield Ziel
  1479. ; A2.l  Adr Morphing-Schrittfeld (Anz. Punkte * 3 Words)
  1480. ; A3.l  Adr Morphing-Dotfield (Anz. Punkte * 3 Words)
  1481. ; D0.w  Anzahl Punkte-1
  1482. ; D1.w  Anzahl Schritte
  1483. ; D2.b  0 = Einmal; -1 = Unendlich
  1484. ; Berechnet ein für ein Dotfield-Morphing benötigtes Feld...
  1485. ;
  1486. ; calc_morphstep                        Lucky
  1487. ; A0.l  Adr Morphing-Dotfield
  1488. ; A1.l  Adr Morphing-Schrittfeld
  1489. ; A2.l  Adr Dotfield für rotate_dotfield
  1490. ; D0.w  Anzahl Punkte-1
  1491. ; Einfach vor jedem Abarbeiten von rotate_dotfield aufrufen...
  1492. ; (Berechnet den nächsten Schritt zum neuen Objekt)
  1493. ;
  1494. ; install_acia_block                    Lucky
  1495. ; .l  Adresse des Acia-Blocks des Moduls
  1496. ; Installiert die Variablen für den Acia-Handler im JDS
  1497. ;
  1498. ; destall_acia_block                    Lucky
  1499. ; .l  Adresse des aktuellen Blocks
  1500. ; Destalliert den Acia-Handler wieder. Nicht vergessen!!!
  1501. ;
  1502. ; error_exit                            Lucky
  1503. ; A0.l  Adr. Fehlertext
  1504. ; Bricht die Programmausführung ab und gibt den Fehlertext aus.
  1505. ;
  1506. ; depack_ipf                            Lucky
  1507. ; .l  Adr. IFP-Film
  1508. ; Spielt eine Filmsequenz im IFP-Format (Inter Film - Packed) ab. Diese Routine
  1509. ; löscht nicht den Startbildschirm und setzt nicht die Auflösung. Sie muß in
  1510. ; einem 320x100 - Videomodus gestartet werden. (TrueColor) Es eignet sich z.B.
  1511. ; 'R_TC_DPF.SCP'. Der Bildschirm wird auch beim Verlassen nicht gelöscht.
  1512. ;
  1513. ; set_background_color
  1514. ; .b  Leer
  1515. ; .b  Rot  0..255
  1516. ; .b  Blau 0..255
  1517. ; .b  Grün 0..255
  1518. ; Berechnet die Hintergrundfarbe für alle Folgeeffekte
  1519. ;
  1520. ; install_midi_handler
  1521. ; .l  Adr. Midi-Handler (endet auf rts; darf d0-d1/a0 verändern)
  1522. ; Installiert eine Empfangsroutine für den Midi-Port
  1523. ;
  1524. ; destall_midi_handler
  1525. ; Entfernt einen installierten Midi-Handler
  1526. ;
  1527. ; swap_acia_vbr_routs
  1528. ; Vertauscht die aktuelle Acia & VBR-Routine gegen die Original-Routinen.
  1529.                         ENDPART
  1530.                         >PART 'Vordefinierte Rout.sammlungen'
  1531. ; PAL_GEN                               Lucky
  1532. ; Hier sind einige Routinen um Farbpaletten im 256-Farben-Modus zu bearbeiten.
  1533. ; Insbesonders um Farbadditionen und Farbgebung einzelner Planes usw. zu
  1534. ; berechnen. Die meisten Routinen sind nicht optimiert.
  1535.                         ENDPART
  1536.                         >PART 'Vordefinierte Effekte'
  1537. ; TC_ROUTIN.SRC                         Nightmare (JDS-modulized by Lucky)
  1538. ; Diese Routine blendet ein TC-Bild, daß innerhalb der Routine definiert ist,
  1539. ; durch drehen kleiner Bereiche ein. Es wird der aktuelle Videomodus genommen,
  1540. ; jedoch muß die Bildschirmgröße über die Size-EQUs in der Routine eingestellt
  1541. ; werden.
  1542.                         ENDPART
  1543.                         >PART 'Kleine Standard-Routinen'
  1544. ; AUSBLEND.S                            Lucky
  1545. ; Blendet den aktuellen TC-Bildschirm aus. Konzept von Nightmare.
  1546. ;
  1547. ; DIVIDE.S                              Lucky
  1548. ; Versuch einer schnellen Divisions-Routine...
  1549.                         ENDPART
  1550.                         END
  1551.                         >PART 'TEXT Rotdist'
  1552. ;>;> a = 60                      d0   <<20
  1553. ;>;> b = 20
  1554. ;>;> aofs = b/100                d1   <<20
  1555. ;>;> h = 50                      d2   <<20
  1556. ;>;» FOR c=0 TO 99               d3
  1557. ;>;»   d=h/(TAN(RAD(a))/16)      d4
  1558. ;>;»   PRINT #1,MKL$(d);0
  1559. ;>;»   ADD a,aofs
  1560. ;>;» NEXT c
  1561. ;>
  1562. ;>gen_rotdist:            move.l  #10<<16<<4,D0
  1563. ;>
  1564. ;>                        move.w  mousey,D2
  1565. ;>                        cmp.w   #14,D2
  1566. ;>                        bge.s   w4
  1567. ;>                        moveq   #14,D2
  1568. ;>w4:                     move.w  D2,mousey
  1569. ;>                        swap    D2
  1570. ;>                        clr.w   D2
  1571. ;>;>                        move.l  #$00300000,D2
  1572. ;>
  1573. ;>                        moveq   #0,D1
  1574. ;>                        move.w  mousex,D1
  1575. ;>                        ext.l   D1
  1576. ;>                        bmi.s   gen_rotdist_m
  1577. ;>                        neg.l   D1
  1578. ;>
  1579. ;>                        lsl.l   #8,D1
  1580. ;>                        lsl.l   #3,D1
  1581. ;>;>                        cmp.l   #-$00080000,D1
  1582. ;>;>                        bge.s   w1
  1583. ;>;>                        move.l  #-$00080000,D1
  1584. ;>;>                        BREAKPT ' '
  1585. ;>;>
  1586. ;>;>w1:
  1587. ;>
  1588. ;>                        cmp.l   #$00080000,D1
  1589. ;>                        ble.s   w0
  1590. ;>;>                        move.l  #$000D0000,D1
  1591. ;>
  1592. ;>w0:
  1593. ;>
  1594. ;>                        lea     rotdist+100,A0
  1595. ;>                        lea     tan,A1
  1596. ;>                        moveq   #100-1,D3
  1597. ;>gen_rotdist_l0:         move.l  D2,D4
  1598. ;>                        move.l  D0,D5
  1599. ;>                        swap    D5
  1600. ;>                        ext.l   D5
  1601. ;>                        divs.l  0(A1,D5.w*4),D4
  1602. ;>;>                        asr.l   #1,D4  ; Vergrößern...
  1603. ;>                        move.l  D4,(A0)+
  1604. ;>                        add.l   D1,D0
  1605. ;>                        dbra    D3,gen_rotdist_l0
  1606. ;>                        rts
  1607. ;>
  1608. ;>gen_rotdist_m:
  1609. ;>                        IFNE 0
  1610. ;>                        neg.l   D1
  1611. ;>
  1612. ;>                        lsl.l   #8,D1
  1613. ;>                        lsl.l   #3,D1
  1614. ;>
  1615. ;>                        cmp.l   #$00080000,D1
  1616. ;>                        ble.s   w1
  1617. ;>                        move.l  #$00080000,D1
  1618. ;>w1:
  1619. ;>                        lea     rotdist+400,A0
  1620. ;>                        lea     tan,A1
  1621. ;>                        moveq   #100-1,D3
  1622. ;>gen_rotdist_l1:         move.l  D2,D4
  1623. ;>                        move.l  D0,D5
  1624. ;>                        swap    D5
  1625. ;>                        ext.l   D5
  1626. ;>                        divs.l  0(A1,D5.w*4),D4
  1627. ;>                        move.l  D4,-(A0)
  1628. ;>                        add.l   D1,D0
  1629. ;>                        dbra    D3,gen_rotdist_l1
  1630. ;>                        ENDC
  1631. ;>                        rts
  1632.                         ENDPART
  1633.                         END
  1634.