home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 4: The Falcon Archive / nf_archive_four_v1.0.iso / ARCHIVE / WORK / MSX / GTK08777.ZIP / GTK.DEV / SOURCES.NEW / INST_KER.S < prev    next >
Text File  |  1995-12-15  |  10KB  |  260 lines

  1. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  2. *≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
  3. *                            *
  4. *               DSP-replay routine            *
  5. *        for Graoumf Tracker modules (.GT2)        *
  6. *            Falcon 030                *
  7. *            Code 68030                *
  8. *                            *
  9. *≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
  10. *                            *
  11. *    Installation du noyau en résident            *
  12. *                            *
  13. *≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
  14. * Version     : 15/12/1995, v0.742                *
  15. * Tab setting : 11                        *
  16. *≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈(C)oderight L. de Soras 1994-95*
  17. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  18.  
  19. ;     Fichier à assembler sous Devpac, Assemble ou logiciel compatible. Vous
  20. ; pouvez utiliser et distribuer ces routines ou parties comme bon vous semble,
  21. ; et si vous vous en servez dans un but non-lucratif, signalez-le moi. Pour
  22. ; une utilisation à fin commerciale, il faudra me demander mon autorisation.
  23. ;
  24. ;        Laurent de SORAS
  25. ;        92 avenue Albert 1er
  26. ;        92500 Rueil-Malmaison
  27. ;        FRANCE
  28. ;
  29. ;     Ceci est le source d'un noyau sonore pour Falcon 030. Son but est de
  30. ; faciliter la sonorisation des programmes grâce à une bibliothèque de
  31. ; routines. Vous pouvez alors utiliser jusqu'à 32 voies en 16 bits/50 KHz pour
  32. ; rejouer des sample. Les possibilités sont alors très vastes, cela va de la
  33. ; simple gestion de bruitages (pour un jeu par exemple) au replay de sound-
  34. ; tracks. L'intéret réside également dans le fait que plusieurs applications
  35. ; peuvent utiliser le noyau en même temps, car on peut le laisser en temps que
  36. ; programme résident. Le noyau monopolise le DSP, donc vous ne pourrez pas
  37. ; l'utiliser pour d'autres applications tant qu'il est installé.
  38. ;     Ce programme est donc prévu pour être résident; ce qui implique que vos
  39. ; applications DEVRONT passer uniquement par les routines de la bibliothèque,
  40. ; sans connaître les adresses contenues dans ce listing, un peu comme pour le
  41. ; TOS. Ces routines sont d'ailleurs appelables par le TRAP #8, en empilant les
  42. ; paramètres à l'envers puis le numéro de fonction, comme d'habitude.
  43. ;     Au point de vue du fonctionnement, pour qu'une application puisse
  44. ; utiliser le noyau, elle devra d'abord réserver des voies. Attention,
  45. ; plusieurs application pouvant cohabiter ensemble, les voies réservées ne
  46. ; seront pas toujours les mêmes d'une fois sur l'autre, donc faites bien la
  47. ; différence entre le numéro de VOS voies, et celui de celles qui leur corres-
  48. ; pond dans le noyau. Quand l'application est terminée ou qu'elle n'a plus
  49. ; besoin du noyau, elle devra libérer les voies qu'elle avait réservées. Et
  50. ; surtout, ne modifiez que VOS voies.
  51. ;     Encore une précision au niveau de la programmation, il est possible de
  52. ; demander au noyau l'adresse des informations sur les voies, pour y avoir
  53. ; accès plus rapidement qu'avec les Traps. N'utilisez que les structures
  54. ; documentées! Il est également possible de changer cette adresse, mais cette
  55. ; opération est fortement déconseillée, l'adresse pouvant être changée
  56. ; seulement si l'app est seule à utiliser le noyau.
  57. ;
  58. ;     Donc un programme utilisant le noyau devrait se structurer comme ceci :
  59. ;     - Si le noyau n'est pas déjà là, installation. S'il est là, vous devrez
  60. ;       trouver le cookie 'SKER', dont la valeur est un mot long pointant sur
  61. ;       son numéro de version (mot court: $xx.xx).
  62. ;     - Activation du noyau si cela n'est pas fait
  63. ;     - Réservation de N voies utiles à l'application
  64. ;     - Corps du programme : contrôle des sons grâce aux routines
  65. ;     - Libérations des N voies réservées
  66. ;     - A la sortie, vous pouvez soit retirer le noyau de la mémoire s'il est
  67. ;       totalement libre (nb de voies libres = nb de voies max), c'est le plus
  68. ;       conseillé d'ailleurs; soit le laisser, activé ou non.
  69. ;
  70. ;     Si certaines choses ne sont pas encore très claires sur le fonction-
  71. ; nement de ce noyau, allez lire les commentaires, certaines choses s'éclair-
  72. ; ciront sans doute. Les *** signalent un point délicat.
  73. ;     D'autre part je tiens à dire que la routine de replay n'est volontaire-
  74. ; ment pas optimisée (à part les transferts de samples), pour pouvoir sup-
  75. ; porter des évolutions. Encore une fois, lisez les commentaires, il a des
  76. ; optimisations évidentes. Par contre les transferts de samples sont très
  77. ; rapides et s'effectuent synchros avec le DSP : si vous utilisez des cartes
  78. ; accélératrices, il sera sans doute nécessaire de rajouter des NOPs dans les
  79. ; boucles ou des tests du type "writhost" optimisés (macro définie plus bas).
  80.  
  81.  
  82.  
  83.     opt    p=68030
  84.  
  85.  
  86.  
  87. *~~~ Constantes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  88.  
  89. ;--- Indispensables pour le noyau lui-même -----------------------------------
  90. RESIDENT_KER:    Equ    1
  91. KERNEL_TRAP_NUM:    Equ    8
  92. CONST_T:        Equ    1    ; Taille fixe pour les descripteurs de voies
  93. USER_T:        Equ    $40    ; Dans les descripteur de voies, donne la position
  94.                 ; de début des données réservées à l'utilisateur
  95. TOTAL_T:        Equ    $100    ; Taille d'un descripteur d'une voie
  96. next_t:        Equ    TOTAL_T    ; Puisqu'il ne sera pas défini, il faut le créer
  97.  
  98. ;--- Pour l'installation -----------------------------------------------------
  99. KERNEL_COOKIE:    Equ    'SKER'    ; Cookie du noyau
  100. COOKIEJAR_SIZE:    Equ    64    ; Jar de 64 cookie: raisonnable
  101.  
  102.  
  103.  
  104. *~~~ Macros ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  105.  
  106. jump_r:    Macro            ; Sauts dans les routines
  107. n_\2:    Equ    \1
  108.     cmp.w    #\1,d7        ; Comparaison avec d7
  109.     beq    \2        ; L'adresse de retour doit déjà être dans la pile !
  110.     EndM
  111.  
  112.  
  113.  
  114. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  115.  
  116. gtkr_source_first_byte:
  117.  
  118. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  119.  
  120.     bra    install
  121.  
  122.     Include    'cookie.s'        ; Les routines de gestion de cookie
  123.     Include    'sndkernl.s'    ; Les routines du noyau
  124.  
  125.  
  126.  
  127. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  128.  
  129.     Section    Text
  130.  
  131.  
  132.  
  133. ;-----------------------------------------------------------------------------
  134. ;    Installation du programme en mémoire
  135. ;-----------------------------------------------------------------------------
  136. install:
  137.     clr.l    -(sp)
  138.     move.w    #$20,-(sp)
  139.     trap    #1        ; Superviseur
  140.     addq.l    #6,sp
  141.  
  142.     readcookie    #KERNEL_COOKIE    ; On est déjà là ?
  143.     tst.l    d0
  144.     bne.s    already_installed    ; Oui, on repart tout de suite
  145.  
  146. ;--- Trap et cookie ----------------------------------------------------------
  147.     move.l    #gtkr_trap_routine,$80+KERNEL_TRAP_NUM*4
  148.  
  149.     newcookie    #KERNEL_COOKIE,#gtkr_kernel_info,#cookiejar
  150.  
  151. ;--- Programme résident ------------------------------------------------------
  152.     pea    message1        ; Tout va bien, on signale qu'on est là
  153.     move.w    #9,-(sp)
  154.     trap    #1
  155.     addq.l    #6,sp
  156.  
  157.     clr.w    -(sp)
  158.     move.l    #gtkr_source_last_byte-gtkr_source_first_byte+256,-(sp)
  159.     move.w    #$31,-(sp)
  160.     trap    #1        ; Programme résident
  161.  
  162. ;--- Déjà là -----------------------------------------------------------------
  163. already_installed:
  164.     pea    message2
  165.     move.w    #9,-(sp)
  166.     trap    #1
  167.     addq.l    #6,sp
  168.  
  169.     clr.w    -(sp)
  170.     trap    #1
  171.  
  172.  
  173.  
  174. ;-----------------------------------------------------------------------------
  175. ;    Routine appelée par le Trap, servant à exécuter la fonction
  176. ;    demandée
  177. ;-----------------------------------------------------------------------------
  178. gtkr_trap_routine:
  179.     movem.l    d7/a6,-(sp)
  180.     lea    8+8(sp),a6        ; Place a6 sur la pile avant le Trap (movem + stack frame)
  181.     btst    #5,-8(a6)        ; Mais au fait, USP ou SSP ?
  182.     bne.s    .ssp        ; Tout va bien, on était en superviseur
  183.     move.l    usp,a6        ; Non, c'était donc USP qui pointait sur le numéro de fonction
  184. .ssp:    move.w    (a6)+,d7        ; On prend le numéro de fnc dans d7, a6 sur 1er paramètre
  185.     pea    .retour        ; Empile l'adresse de retour car branchement ss-prg
  186.  
  187. ;··· Les sauts aux routines ··················································
  188.     jump_r    $000,gtkr_remove_kernel
  189.     jump_r    $001,gtkr_kernel_status
  190.     jump_r    $002,gtkr_kernel_on
  191.     jump_r    $003,gtkr_kernel_off
  192.     jump_r    $004,gtkr_reset_kernel_tracks
  193.     jump_r    $005,gtkr_reserve_track
  194.     jump_r    $006,gtkr_free_track
  195.     jump_r    $007,gtkr_make_rbuffer
  196.     jump_r    $008,gtkr_play_sample
  197.     jump_r    $009,gtkr_stop_track
  198.     jump_r    $00A,gtkr_pause_track
  199.     jump_r    $00B,gtkr_cont_track
  200.     jump_r    $00C,gtkr_add_routine
  201.     jump_r    $00D,gtkr_remove_routine
  202.     jump_r    $00E,gtkr_get_master_vol
  203.     jump_r    $00F,gtkr_set_master_vol
  204.     jump_r    $010,gtkr_get_vblsize
  205.     jump_r    $011,gtkr_set_vblsize
  206.     jump_r    $012,gtkr_get_track_adr
  207.     jump_r    $013,gtkr_set_track_adr
  208.     jump_r    $014,gtkr_get_replay_freq
  209.     jump_r    $015,gtkr_set_replay_freq
  210.     jump_r    $016,gtkr_total_nbr_of_tracks
  211.     jump_r    $017,gtkr_nbr_of_free_tracks
  212.     jump_r    $018,gtkr_put_new_app_id
  213.     jump_r    $019,gtkr_get_app_id
  214.     jump_r    $01A,gtkr_remove_app_id
  215.     jump_r    $01B,gtkr_nbr_of_app_id
  216.     jump_r    $01C,gtkr_interpolate_track
  217.  
  218.     addq.l    #4,sp        ; Mauvais numéro de fonction
  219. .retour:    movem.l    (sp)+,d7/a6
  220.     rte
  221.  
  222.  
  223.  
  224. ;-----------------------------------------------------------------------------
  225. ;    Déplie les routines de gestion de cookie
  226. ;-----------------------------------------------------------------------------
  227.     cookie_routines
  228.  
  229.  
  230.  
  231. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  232.  
  233.     Section    Data
  234.  
  235.  
  236.  
  237. message1:        Dc.b    'Sound Kernel installed',10,13    ; Message d'installation
  238.         Dc.b    'By Laurent de SORAS (Dumbo/BiG NoZ) - 1995',10,13,0
  239. message2:        Dc.b    'Sound Kernel already installed!',10,13,0
  240.         Even
  241. gtkr_kernel_info:    Dc.w    KERNEL_VERSION
  242.  
  243.  
  244.  
  245. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  246.  
  247.     Section    Bss
  248.  
  249.  
  250.  
  251. cookiejar:        Ds.b    COOKIEJAR_SIZE*8
  252.  
  253.  
  254.  
  255. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  256.  
  257. gtkr_source_last_byte:
  258.  
  259. *~~~ FIN ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  260.