home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / BLEIFREI / SCHWABEL.ZIP / SCHWABEL / SCHWABEL.S < prev    next >
Text File  |  1999-04-22  |  18KB  |  442 lines

  1. ; ----------------------------------------------------------------------------
  2. ; - (RxT) 02.06.1995                                                         -
  3. ; -                                                                          -
  4. ; - 02.06.1995 : Das mit den Hardware-Registern funktioniert.                -
  5. ; - 05.06.1995 : Coper-Effekt (schwabeliges Bild) durch manipulation des     -
  6. ; -              Line-Offset-Registers innerhalb eines HBI.                  -
  7. ; - 20.12.1995 : Die 96K-MOD Routine von Bitmaster arbeitet einwandfrei.     -
  8. ; -              Sie benutzt nur den VBI. Die Module duerfen nicht größer    -
  9. ; -              als 96 KByte sein.                                          -
  10. ; ----------------------------------------------------------------------------
  11.  
  12. DspModInit      EQU 28
  13. DspModOff       EQU 32
  14. DspModPlayerOn  EQU 36
  15. DspModPlayerOff EQU 40
  16. DspModPlayMusic EQU 44
  17. DspModPlayTime  EQU 48
  18. DspModModType   EQU 52
  19. DspModFx        EQU 56
  20. not_used        EQU 60
  21. DspModFlags     EQU 61
  22. DspModSurroundDelay EQU 62
  23. DspModDspTracks EQU 64
  24. DspModPlayInfos EQU 66
  25. DspModSampleSets EQU 70
  26.  
  27. cnecin          EQU 8
  28. logbase         EQU 3
  29. super           EQU 32
  30. vsync           EQU 37
  31.  
  32. hbivec          EQU $0120       ; Horizontal-Blanking-Interrupt-Vector
  33. vbivec          EQU $70         ; Vertical-Blanking-Interrupt-Vector
  34. mkbvec          EQU $0118       ; Mouse/Keyboard-Interrupt-Vector
  35. iera            EQU $FFFFFA07   ; Interrupt-Enable-Register A
  36. ierb            EQU $FFFFFA09   ; interrupt-Enable-Register B
  37. isra            EQU $FFFFFA0F   ; Interrupt-Service-Register A
  38. imra            EQU $FFFFFA13   ; Interrupt-Mask-Register A
  39. tbcr            EQU $FFFFFA1B   ; Timer B Control-Register
  40. tbdr            EQU $FFFFFA21   ; Timer B Data-Register
  41.  
  42. vbaselow        EQU $FFFF820D
  43. vbasemid        EQU $FFFF8203
  44. vbasehigh       EQU $FFFF8201
  45. vcountlow       EQU $FFFF8209
  46. vcountmid       EQU $FFFF8207
  47. vcounthigh      EQU $FFFF8205
  48. linewid         EQU $FFFF820F
  49. hscroll         EQU $FFFF8265
  50.  
  51. keyctl          EQU $FFFFFC00
  52. keybd           EQU $FFFFFC02
  53.  
  54. DspHost         EQU $FFFFA200
  55. HostIntVec      EQU $03FC
  56.  
  57. PCookies        EQU $05A0
  58.  
  59.  
  60. start:          DC.W $A00A
  61.  
  62.                 pea     0
  63.                 move.w  #super,-(SP)
  64.                 trap    #1
  65.                 addq.l  #6,SP
  66.                 move.l  D0,ssp
  67.  
  68.                 move.w  #2,-(SP)        ; Bildschirmadressen holen
  69.                 trap    #14
  70.                 addq.l  #2,SP
  71.                 move.l  D0,oldphys      ; Bildschirmadresse in oldphys speichern
  72.                 move.w  #3,-(SP)
  73.                 trap    #14
  74.                 addq.l  #2,SP
  75.                 move.l  D0,oldlog
  76.  
  77.                 bsr     init            ; MOD-Player initialisieren
  78.  
  79. ; Gibt die Versionsnummer aus
  80.                 move.l  ver_ptr,-(SP)   ; Diese
  81.                 move.w  #9,-(SP)        ; Funktion
  82.                 trap    #1              ; auf keinen Fall löschen
  83.                 addq.l  #6,SP           ; Funktioniert sonst nicht
  84.  
  85.                 lea     mod1,A0
  86. play_mod:       lea     voltab4,A1
  87.                 movea.l A0,A6
  88.                 jsr     player+DspModPlayerOn ;Start Player
  89.  
  90.                 move.l  #bild+256,D0    ; Neue Video Adresse
  91.                 and.l   #$FFFFFF00,D0
  92.                 move.l  D0,buffscr
  93.  
  94.                 move.b  D0,$FFFF820D
  95.                 lsr.l   #8,D0
  96.                 move.b  D0,$FFFF8203
  97.                 lsr.l   #8,D0
  98.                 move.b  D0,$FFFF8201
  99.  
  100.                 bsr     Save_System
  101.  
  102.                 lea     Videl_320_200_True,A0
  103.                 bsr     Set_Res
  104.  
  105.                 move.w  #320,$FFFF820E  ; Offset bis zur nächsten Zeile
  106.  
  107.                 movea.l buffscr,A0
  108.                 lea     picture,A1
  109.                 move.w  #200,D1
  110. pic_copy:       move.w  #159,D0
  111. picture_copy:   move.l  (A1),640(A0)
  112.                 move.l  (A1)+,(A0)+
  113.                 dbra    D0,picture_copy
  114.                 adda.l  #640,A0
  115.                 dbra    D1,pic_copy
  116.  
  117.                 lea     raster_tabelle1,A0
  118.                 move.w  #49,D0
  119. rast_tab_gen1:  move.w  #320,(A0)+
  120.                 move.w  #321,(A0)+
  121.                 move.w  #322,(A0)+
  122.                 move.w  #322,(A0)+
  123.                 move.w  #321,(A0)+
  124.                 move.w  #320,(A0)+
  125.                 move.w  #319,(A0)+
  126.                 move.w  #318,(A0)+
  127.                 move.w  #318,(A0)+
  128.                 move.w  #319,(A0)+
  129.                 dbra    D0,rast_tab_gen1
  130.                 move.w  #0,raster_index
  131.  
  132.                 move.b  #1,zeilen
  133.                 move.w  #0,raster_index ; Index auf Null
  134.                 move.w  #0,raster_work
  135.                 clr.l   $FFFF9800.w     ; Rahmenfarbe auf Schwarz
  136.  
  137. ; alles für HBI's vorbereiten....
  138.                 move.l  vbivec,oldvbi+2
  139.                 move.l  #hbi,hbivec
  140.                 move.l  #vbi,vbivec
  141.                 andi.b  #$DF,ierb
  142.                 ori.b   #1,iera
  143.                 ori.b   #1,imra
  144. ; ....warten....
  145.                 move.w  #8,-(SP)
  146.                 trap    #1
  147.                 addq.l  #2,SP
  148. ; ...und tschüß.
  149.                 jsr     player+DspModPlayerOff ;Stop
  150.                 clr.b   $FFFF8901.w     ; DMA-Stoppen
  151.                 jsr     player+DspModOff
  152.  
  153.                 move.l  oldvbi+2,vbivec
  154.                 andi.b  #$FE,iera
  155.                 ori.b   #$20,ierb
  156. raus:           bsr     restore_system
  157.  
  158.                 move.l  oldlog,D0
  159.                 move.b  D0,$FFFF820D
  160.                 lsr.l   #8,D0
  161.                 move.b  D0,$FFFF8203
  162.                 lsr.l   #8,D0
  163.                 move.b  D0,$FFFF8201
  164.  
  165.                 move.l  ssp,-(SP)
  166.                 move.w  #super,-(SP)
  167.                 trap    #1
  168.                 addq.l  #6,SP
  169.  
  170.                 clr.w   -(SP)
  171.                 trap    #1
  172.  
  173. ; ------------------------------------------
  174. ; ----- A U F   V S Y N C   W A R T E N ----
  175. ; ------------------------------------------
  176.  
  177. wait_vsync:     move.l  D0,-(SP)
  178.                 move.l  $0462,D0
  179. wait_wait_x:    cmp.l   $0462,D0
  180.                 beq.s   wait_wait_x
  181.                 move.l  (SP)+,D0
  182.                 rts
  183.  
  184. ; -------------------------------------------------------
  185. ; - V E R T I C A L  B L A N K I N G  I N T E R R U P T -
  186. ; -------------------------------------------------------
  187.  
  188. vbi:            movem.l D0-A6,-(SP)
  189.                 move.b  #0,tbcr
  190.                 jsr     player+44
  191.                 move.w  raster_index,D0
  192.                 addq.w  #2,D0
  193.                 cmp.w   #22,D0          ; 10 Worte + 2
  194.                 bne.s   vbi_go_on
  195.                 clr.w   D0
  196. vbi_go_on:      move.w  D0,raster_index
  197.                 move.w  D0,raster_work
  198.                 move.b  zeilen,tbdr     ; alle ... Zeilen ein HBI
  199.                 move.b  #8,tbcr
  200.                 movem.l (SP)+,D0-A6
  201. oldvbi:         jmp     $FFFFFFFF
  202.  
  203. ; -----------------------------------------------------------
  204. ; - H O R I Z O N T A L  B L A N K I N G  I N T E R R U P T -
  205. ; -----------------------------------------------------------
  206.  
  207. ; Horizontal Blanking Interrupt
  208. hbi:            movem.l D0/A0-A1,-(SP)
  209.                 lea     raster_tabelle1,A0
  210.                 move.w  raster_work,D0
  211.                 move.w  0(A0,D0.w),$FFFF820E ; Zeilen-Offset-Register
  212.                 addi.w  #2,raster_work
  213.                 andi.b  #$FE,isra
  214.                 movem.l (SP)+,D0/A0-A1
  215.                 rte
  216.  
  217. ; ---------------------------------------------
  218. ; ------  M O D - P L A Y E R   I N I T -------
  219. ; ---------------------------------------------
  220.  
  221. init:           jsr     player+DspModInit ;install Player
  222.                 move.l  A0,ver_ptr
  223.  
  224.                 move.w  #$200B,$FFFF8932.w ;DSP-Out-> DAC & DMA-In
  225.                 clr.b   $FFFF8900.w     ;keine DMA-Interrupts
  226.                 clr.b   $FFFF8936.w     ;record 1 Track
  227.                 move.b  #$40,$FFFF8921.w ;16 Bit
  228.  
  229.                 move.b  #$80,$FFFF8901.w ;select Record-Frame-Register
  230.                 move.l  #dma_buffer,D0
  231.                 move.l  D0,D1
  232.                 move.b  D1,$FFFF8907.w  ;Basis Low
  233.                 lsr.l   #8,D1
  234.                 move.b  D1,$FFFF8905.w  ;Basis Mid
  235.                 lsr.l   #8,D1
  236.                 move.b  D1,$FFFF8903.w  ;Basis High
  237.                 add.l   #8000,D0
  238.                 move.l  D0,D1
  239.                 move.b  D1,$FFFF8913.w  ;End Low
  240.                 lsr.l   #8,D1
  241.                 move.b  D1,$FFFF8911.w  ;End Mid
  242.                 lsr.l   #8,D1
  243.                 move.b  D1,$FFFF890F.w  ;End High
  244.  
  245.                 move.b  #$B0,$FFFF8901.w ;repeated record
  246.  
  247. ;                move.l  $70.w,old_vbl
  248. ;                move.l  #vbl,$70.w
  249.                 rts
  250.  
  251. ; ---------------------------------------------
  252. ; -------- S E T  V I D E O  M O D E ----------
  253. ; ---------------------------------------------
  254. ; Parameter:
  255. ;             A0.L : Adresse der Betriebsart
  256. ;                      (aus der Tabelle)
  257. ; ---------------------------------------------
  258.  
  259. Set_Res:        move.b  #2,$FFFF820A.w  ; Horloge Interne
  260.                 clr.b   $FFFF8265.w     ; Décalage Pixel Nul
  261.                 addq.l  #4,A0
  262.                 move.w  (A0)+,$FFFF820E.w ; Offset bis zur nächsten Zeile (Words)
  263.                 move.w  (A0)+,$FFFF8210.w ; Länge der sichtbaren Zeile (Words)
  264.                 move.w  (A0)+,D0        ; Résolution ST
  265.                 move.w  (A0)+,D1        ; Résolution FALCON
  266.  
  267.                 move.w  D1,$FFFF8266.w  ; Résolution FALCON
  268.                 tst.w   (A0)+
  269.                 beq.s   FalconRez
  270.                 move.b  D0,$FFFF8260.w  ; Résolution ST
  271.                 move.w  -8(A0),$FFFF8210.w ; Largeur d'une ligne en mots
  272. FalconRez:
  273. ;                btst    #7,$FFFF8006.w  ; Ecran VGA ?
  274. ;                beq.s   R_Ok            ; Si non,saut...
  275. ;                adda.w  #16*2,A0
  276. R_Ok:           move.w  (A0)+,$FFFF8282.w ; HHT-Synchro
  277.                 move.w  (A0)+,$FFFF8284.w ; Fin du décodage de la ligne
  278.                 move.w  (A0)+,$FFFF8286.w ; Début du décodage de la ligne
  279.                 move.w  (A0)+,$FFFF8288.w ; Overscan links
  280.                 move.w  (A0)+,$FFFF828A.w ; Overscan rechts
  281.                 move.w  (A0)+,$FFFF828C.w ; HSS-Synchro
  282.                 move.w  (A0)+,$FFFF828E.w ; HFS
  283.                 move.w  (A0)+,$FFFF8290.w ; HEE
  284.                 move.w  (A0)+,$FFFF82A2.w ; VFT-Synchro
  285.                 move.w  (A0)+,$FFFF82A4.w ; Fin du décodage de l'image
  286.                 move.w  (A0)+,$FFFF82A6.w ; Début du décodage de l'image
  287.                 move.w  (A0)+,$FFFF82A8.w ; Overscan oben
  288.                 move.w  (A0)+,$FFFF82AA.w ; Overscan unten
  289.                 move.w  (A0)+,$FFFF82AC.w ; VSS-Synchro
  290.                 move.w  (A0)+,$FFFF82C0.w ; Indique résolution FALCON
  291.                 move.w  (A0),$FFFF82C2.w ; Informations résolution
  292.                 rts
  293.  
  294. ; ---------------------------------------------
  295. ; ----------  V I D E O  S A V E --------------
  296. ; ---------------------------------------------
  297.  
  298. Save_System:    lea     Old_System,A0
  299.                 move.b  $FFFF8007.w,(A0)+ ; Configuration 68030
  300.                 move.b  $FFFF820A.w,(A0)+ ; Synchronisation vidéo
  301.                 move.w  $FFFF820E.w,(A0)+ ; Offset pour prochaine ligne
  302.                 move.w  $FFFF8210.w,(A0)+ ; Largeur d'une ligne en mots
  303.                 move.b  $FFFF8260.w,(A0)+ ; Résolution ST
  304.                 move.b  $FFFF8265.w,(A0)+ ; Décalage Pixel
  305.                 move.w  $FFFF8266.w,(A0)+ ; Résolution FALCON
  306.                 move.w  $FFFF8282.w,(A0)+ ; HHT-Synchro
  307.                 move.w  $FFFF8284.w,(A0)+ ; Fin du décodage de la ligne
  308.                 move.w  $FFFF8286.w,(A0)+ ; Début du décodage de la ligne
  309.                 move.w  $FFFF8288.w,(A0)+ ; Overscan gauche
  310.                 move.w  $FFFF828A.w,(A0)+ ; Overscan droit
  311.                 move.w  $FFFF828C.w,(A0)+ ; HSS-Synchro
  312.                 move.w  $FFFF828E.w,(A0)+ ; HFS
  313.                 move.w  $FFFF8290.w,(A0)+ ; HEE
  314.                 move.w  $FFFF82A2.w,(A0)+ ; VFT-Synchro
  315.                 move.w  $FFFF82A4.w,(A0)+ ; Fin du décodage de l'image
  316.                 move.w  $FFFF82A6.w,(A0)+ ; Début du décodage de l'image
  317.                 move.w  $FFFF82A8.w,(A0)+ ; Overscan haut
  318.                 move.w  $FFFF82AA.w,(A0)+ ; Overscan bas
  319.                 move.w  $FFFF82AC.w,(A0)+ ; VSS-Synchro
  320.                 move.w  $FFFF82C0.w,(A0)+ ; Reconnaissance ST/FALCON
  321.                 move.w  $FFFF82C2.w,(A0)+ ; Informations résolution
  322.  
  323.                 lea     $FFFF8240.w,A1  ; Palette ST
  324.                 moveq   #8-1,D0         ; 8 longs...
  325. Save_ST_Palette:
  326.                 move.l  (A1)+,(A0)+     ; Sauve 2 couleurs
  327.                 dbra    D0,Save_ST_Palette ; Boucle les 16 mots !
  328.  
  329.                 lea     $FFFF9800.w,A1  ; Palette FALCON
  330.                 move.w  #256-1,D0       ; 256 longs...
  331. Save_FALCON_Palette:
  332.                 move.l  (A1)+,(A0)+     ; Sauve 1 couleur
  333.                 dbra    D0,Save_FALCON_Palette ; Boucle les 256 longs !
  334.                 rts
  335.  
  336. ; --------------------------------------------
  337. ; ------  V I D E O   R E S T O R E ----------
  338. ; --------------------------------------------
  339.  
  340. restore_system: move    #$2700,SR       ; Interrupts sperren
  341.                 lea     Old_System,A0   ; Espace de sauvegarde
  342.                 move.b  (A0)+,$FFFF8007.w ; Configuration 68030
  343.                 move.b  (A0)+,$FFFF820A.w ; Video-Syncronisation
  344.                 move.w  (A0)+,$FFFF820E.w ; Offset pour prochaine ligne
  345.                 move.w  (A0)+,$FFFF8210.w ; Largeur d'une ligne en mots
  346.                 move.b  (A0)+,D0        ; Résolution ST
  347.                 move.b  (A0)+,$FFFF8265.w ; Décalage Pixel
  348.                 move.w  (A0)+,D1        ; Résolution FALCON
  349.                 move.w  (A0)+,$FFFF8282.w ; HHT-Synchro
  350.                 move.w  (A0)+,$FFFF8284.w ; Fin du décodage de la ligne
  351.                 move.w  (A0)+,$FFFF8286.w ; Début du décodage de la ligne
  352.                 move.w  (A0)+,$FFFF8288.w ; Overscan gauche
  353.                 move.w  (A0)+,$FFFF828A.w ; Overscan droit
  354.                 move.w  (A0)+,$FFFF828C.w ; HSS-Synchro
  355.                 move.w  (A0)+,$FFFF828E.w ; HFS
  356.                 move.w  (A0)+,$FFFF8290.w ; HEE
  357.                 move.w  (A0)+,$FFFF82A2.w ; VFT-Synchro
  358.                 move.w  (A0)+,$FFFF82A4.w ; Fin du décodage de l'image
  359.                 move.w  (A0)+,$FFFF82A6.w ; Début du décodage de l'image
  360.                 move.w  (A0)+,$FFFF82A8.w ; Overscan haut
  361.                 move.w  (A0)+,$FFFF82AA.w ; Overscan bas
  362.                 move.w  (A0)+,$FFFF82AC.w ; VSS-Synchro
  363.                 move.w  (A0)+,$FFFF82C0.w ; Reconnaissance ST/FALCON
  364.                 move.w  (A0)+,$FFFF82C2.w ; Informations résolution
  365.                 move.w  D1,$FFFF8266.w  ; Fixe résolution FALCON...
  366.                 btst    #0,$FFFF82C0.w  ; Résolution FALCON ?
  367.                 bne.s   Falcon_Rez      ; Si oui,saut !
  368.                 move.b  D0,$FFFF8260.w  ; Fixe résolution ST...
  369. Falcon_Rez:     lea     $FFFF8240.w,A1  ; ST-Farbpalette restaurieren
  370.                 moveq   #7,D0           ; 8 Langwörter...
  371. Rest_ST_Palette:
  372.                 move.l  (A0)+,(A1)+     ; immer 2 Farben auf einmal
  373.                 dbra    D0,Rest_ST_Palette
  374.  
  375.                 lea     $FFFF9800.w,A1  ; FALCON-Farbpalette restaurieren
  376.                 move.w  #255,D0         ; 256 Langwörter
  377. Rest_FALCON_Palette:
  378.                 move.l  (A0)+,(A1)+     ; eine Farbe nach der anderen
  379.                 dbra    D0,Rest_FALCON_Palette
  380.                 move    #$2000,SR       ; Interrupts freigeben
  381.                 rts
  382.  
  383.  
  384.  
  385.                 DATA
  386. *************************************************
  387. *                                               *
  388. * LIBRAIRIE DE RESOLUTION EN MODE TRUE-COLOR    *
  389. *                                               *
  390. *************************************************
  391. Videl_320_100_True:
  392.                 DC.L 320*100*16/8+256 ; Général
  393.                 DC.W 0,320,0,$0100
  394.                 DC.W 0          ; Flag Ordre
  395.  
  396.                 DC.W 254,203,39,46,143,216,0,0 ; RVB
  397.  
  398.                 DC.W 625,613,47,127,527,619
  399.                 DC.W $0181,%1   ; Double Ligne
  400.  
  401. Videl_320_200_True:
  402.                 DC.L 320*200*16/8+256 ; Général
  403.                 DC.W 0,320,0,$0100
  404.                 DC.W 0          ;  Flag Ordre
  405.  
  406.                 DC.W 254,203,39,46,143,216,0,0 ; RVB
  407.                 DC.W 625,613,47,127,527,619
  408.                 DC.W $0181,%0
  409.  
  410.                 DC.W 198,150,15,682,139,150,0,0 ; VGA 47 Hz
  411.                 DC.W 1337,1300,100,315,1115,1333
  412.                 DC.W $0186,%101
  413.                 EVEN
  414. picture:        IBYTES 'VOX16.TGA'
  415. voltab4:        DC.W $7F00,$7F00,$7F00,$7F00
  416.                 DC.W 0,0,0,0
  417.  
  418. player:         IBYTES 'DSPMOD96.TCE'
  419. mod1:           IBYTES 'SLEEP_WL.MOD'
  420.                 BSS
  421.                 EVEN
  422.                 DS.B 256
  423. ssp:            DS.L 1
  424. oldlog:         DS.L 1
  425. oldphys:        DS.L 1
  426. oldmode:        DS.L 1
  427. Old_System:     DS.L 500        ; Buffer für altes System
  428. buffscr:        DS.L 1
  429. zeilen:         DS.W 1
  430. raster_index:   DS.W 1
  431. raster_work:    DS.W 1
  432. raster_tabelle1:DS.W 500
  433. raster_tabelle2:DS.W 500
  434.                 EVEN
  435. ver_ptr:        DS.L 1
  436. dma_buffer:     DS.B 8000
  437.                 DS.B 256
  438. bild:           DS.L 38400
  439.                 DS.L 38400
  440.                 DS.L 38400
  441.                 END
  442.