
;Hallo Independent-Members:
;so, hier die fertige Version von unserem DSP-Player.
;Bitte nur innerhalb der Independent benutzen. Falls jemand auerhalb
;der Independent die Rout benutzen mchte, mich vorher fragen
;(an sich kein Problem, aber nur damit ich Bescheid wei)!!
;
;signed: Chris of AURA of the Independent

;Version V2.2: done at Risk-HQ 30.10-1.11.93
;              DSP-Paula fuft nun auch mit anderen DSP-Programmen
;              L-R-Kanle werden nun nicht mehr vertauscht.
;
;Version V2.3: 31.1-3.2.94
;              - Der CIA-Proplayer wird nun untersttzt, d.h. alle F-
;              Kommandos werden bearbeitet. Ich lasse die Paula jedoch
;              im VBL laufen, soda ich nicht wei ob sich die Musis
;              mit diesem Verfahren korrekt anhren (da ich nur 2 Musis
;              mit dem F-Kommando habe, die laufen jedoch perfekt).
;
;              - Die Knackser beim SSI-Betrieb sind nun ENDgltig weg!!!
;
;              - Nach vielfachem Wunsch wird nun ein PC-relatives Infile
;              erzeugt.
;
;              - Nun ist der Proplayer re-enterbar, d.h. man kann mehrere
;              Module hintereinander abspielen ohne jedesmal den kompletten
;              Player neu laden zu mssen (Installationsfehler im ProPlayer).
;
;Version V2.4: 10.2-20.2.94
;              - Host-Version wurde entfernt, da sie zu viel Zeit verbraucht und die
;              SSI-Version die DSP-Programmierung nicht strt.
;              - Echtzeit-PAULA eingebunden
;              - Die Paula luft jetzt im selben Timer wie der CIA-ProPlayer, d.h. Hopser
;              beim Abspielen der Musik die bei V2.3 auftreten konnten sind nun ausgeschlossen,
;              dafr mu jedoch mit dem Blitter aufgepasst werden.
;              - Es laufen nur Module mit mehr als 115bpm (kein Nachteil, da mir DOMM
;              versichert hat, da es kein Modul mit weniger als 125bpm gibt)
;              - die Modullnge wird dank Realtime-Paula nicht mehr vergrert.

make_bin    equ 0                       ;-1=Inline-File erzeugen
bin_tst     equ -1                      ;-1= Infile testen
        mc68030

    IFNE    make_bin=-1
        org $0
    ENDIF

    IFNE    make_bin=0


        pea     prg
        move.w  #38,-(sp)
        trap    #14
        clr.w   -(sp)
        trap    #1
prg:
        bclr    #5,$fffffa09.w

;       move.w #$4EB,$ffff82a2.w



prescale:       equ 1                   ;PCM-Prescale
vga_flag:       equ 0                   ;0=ext. Lautspr./-1=int. Lautspr.

    IFNE    vga_flag=0
        move.b  #14,$ffff8800.w
        move.b  $ffff8800.w,d0
        bset    #6,d0
        move.b  d0,$ffff8802.w
    ELSE
        move.b  #14,$ffff8800.w
        move.b  $ffff8800.w,d0
        bclr    #6,d0
        move.b  d0,$ffff8802.w
    ENDIF
        lea     name1,a5
        lea     module1,a6
        bsr     load_mod

        lea     name2,a5
        lea     module2,a6
        bsr     load_mod

        lea     module1,a0              ;1. Moduladresse
        lea     module2,a2              ;2. Moduladresse
        move.w  #prescale,d0            ;PCM-Prescale-Code
        move.w  #-1,d1                  ;ADS installieren
        lea     timer_a_irq,a1          ;Timer-A-IRQ-Adr. (Player-IRQ)
        bsr     dsp_paula+0             ;Hauptinstallation

        move.w  #$8000,dsp_paula+12     ;Lautstrke
        move.w  #$3919,d0
        movec   d0,cacr

        pea info(pc)
        move.w  #9,-(sp)
        trap    #1
        addq.w  #6,sp

wait2:  cmp.b   #$39,$fffffc02.w
        bne.s   wait2

        moveq   #0,d7
        move.w  dsp_paula+12(pc),d7
fade_out:
        move.w  #37,-(sp)
        trap    #14
        addq.w  #2,sp
        move.w  d7,dsp_paula+12
        sub.l   #$200,d7
        bpl.s   fade_out

        bsr     dsp_paula+8
        move.w  #$0fff,$ffff8240.w
        bset    #5,$fffffa09.w
        rts

info:   dc.b 27,"EDSP-Realtime-Paula V2.4/Proplayer 3.0B-CIA",13,10
        dc.b    "coded by Chris of AURA/20.02.94",13,10
        dc.b    "now playing real 50 KHz/16 Bit/SSI-Output.",13,10,13,10
        dc.b    "blue       : required time to swap sampledata with DSP",13,10
        dc.b    "blue+yellow: total DSP-time",13,10
        dc.b    "white      : Proplayer-time",13,10
        dc.b    "red        : free DSP time",13,10
        dc.b    "red+yellow : free CPU time",0


timer_a_irq:
        move.w  #$007,$ffff8240.w
        move.l  #$ff,$ffff9800.w
        bsr     dsp_paula+4
        move.w  #$770,$ffff8240.w
        move.l  #$ffff0000,$ffff9800.w
        move.w  #$2300,sr
sss:    btst    #3,$ffffa202.w          ;Bit zum Testen ob DSP mit
        bne.s   sss                     ;der Vorberechnung fertig ist
        move.w  #$700,$ffff8240.w       ;und somit weiter benutzt werden
        move.l  #$ff000000,$ffff9800.w  ;kann
        rte

        IFNE bin_tst=-1
dsp_paula:
;Test der Inline-Version
        path "d:\source\dsppaula\8st_vers\"
        inline "pau_8st1.inl"
load_mod:
        clr.w   -(sp)
        pea     (a5)
        move.w  #$3d,-(sp)
        trap    #1
        addq.w  #8,sp
        move.w  d0,d7

        pea     (a6)
        move.l  #500000,-(sp)
        move.w  d7,-(sp)
        move.w  #$3f,-(sp)
        trap    #1
        lea     $c(sp),sp

        move.w  d7,-(sp)
        move.w  #$3d,-(sp)
        trap    #1
        addq.w  #4,sp
        rts

name1:  dc.b "double1a.mod",0
name2:  dc.b "double2a.mod",0
    even
    BSS
module1:        path "e:\mods\nospread\"
;           inline "double1a.mod"
            ds.b    500000
module2:
;           inline "double2a.mod"
            ds.b    500000
    TEXT
    ENDIF

*****************************************************************************
**************************    D S P - P A U L A    **************************
****************  coded by Chris of AURA of the INDEPENDENT  ****************
***********************   DSP-Realtime Paula V2.4   *************************
******************************** SSI-Version ********************************
***********************  AMIGA-Proplayer V3.0B-CIA  *************************
************************  first code  :  14.04.93  **************************
************************  last changes:  20.02.94  **************************
*****************************************************************************
************************** about 90-95% CPU free ****************************
************************** about 80-90% DSP free ****************************
****************  thanx to bITmASTER and Questor of Inter  ******************
************************** for the SSI-Information **************************
*****************************************************************************
;Hinweise zum DSP-Coding mit der DSP-Paula:
;------------------------------------------

;- r7/m7 werden fr den SSI-IRQ bentigt, sonst sind alle Register frei
;- Host-Command 1 ist belegt
;- P-Speicher $1F94 bis $4000 ist von der DSP-Paula belegt
;- whrend und nach der Ausfhrung des Hostcommands ist der SSI-IRQ aktiv
;  und mu laufende Programme unterbrechen knnen. Der SSI-IRQ bentigt
;  aber nur 6 Tz, somit ist er keine groe Bremse.

;Hinweise zum MC-Coding:
;------------------------------------------
;- der Code ist nur an den zeitkritischen Stellen optimiert, also nicht
;  schimpfen.
;- programmiert mit dem EasyAss 4.0L.
;
;1. Bra.w: Initialisierung (von CODEC, Timer-A, ProPlayer und DSP-PAULA)
;          d0.w: PCM-Prescalewert von 1-5 und 7
;          d1.w:  0: ADS nicht installieren (schon installiert)
;                -1: ADS installieren, d.h. DSP fr Paula vorbereiten
;          a0.l: Moduladr. des 1. Moduls
;          a1.l: Adr. des Timer-A-IRQs
;          a2.L: Moduladr. des 2. Moduls
;2. Bra.w: Paula-Emulation + ProPlayer 3.0B-CIA-Einsprungadr.
;          (immer in den Timer A setzen)
;3. Bra.w: Deinstallation (von CODEC und Timer-A)
;+12.w   : Main-Voice: zw. $0000(leise) und $ffff(laut)
;+14.w   : Offset in Bytes zu den Paula-Registern
;Aufbau der Paularegister:
;   DFF0A0:             dc.l $00000000  ;Amiga:Adressregister  Audio-Kanal 1 
;   DFF0A4:             dc.w $0000      ;Amiga:Sample-Lnge
;   DFF0A6:             dc.w $0000      ;Amiga:Abtastfrequenz
;   DFF0A8:             dc.w $0000      ;Amiga:Lautstrke
;   DFF0AA:             ds.w 3          ;Interne Informationen
; dasselbe in dieser Reihenfolge fr DFF0B0,DFF0C0,DFF0D0.


;
;Hinweise zur Installation:
;Die Paula luft nun im Timer und kann somit mit dem Blitter ins Gehege
;kommen. Der Blitter belegt je nach dem zu viel Buszyklen, soda er den
;Timer-A zu spt ausgelst werden kann. Die Folge whre ein Knacksen, das
;nicht zu verhindern ist, da der DSP die neuen Sampledaten bentigt, aber
;nicht rechtzeitig erhlt.

;weitere Hinweise:
;die Proplayer und DSP-Paula-Routine rettet alle notwendigen Register!!


        ELSE

    TEXT
BASE5:

;Test der ausf. Version
paula_start:
        bra.w   ap_grand_init           ;Installation
        bra.w   ap_dsp_paula_do         ;Paula samt ProPlayer ausfhren
        bra.w   ap_small_deinit         ;Deinstallation
main_voice:     dc.w    $ffff           ;Hauptlautstrke 16 Bit (0-$ffff)
paula_regs:     dc.w    DFF0A0-paula_start
txt:    dc.b "DSP-REALTIME-PAULA V2.4 coded by Chris of Aura/"
        dc.b "Independent / >20.2.94< "
