; Musics done by TAO of ACF
; with some C64-conversions...

	pea	0.w
	move	#$20,-(sp)
	trap	#1
	addq.l	#6,sp

	moveq	#0,d0
	bsr	music

	move.l	#music+8,$4e2.w
	jmp	raster
	move	#7,-(sp)
	trap	#1
	addq.l	#2,sp

	clr.l	$4e2.w

	moveq	#1,d0
	bsr	music

	move.b	#7,$484.w

	move	#$20,-(sp)
	trap	#1
	addq.l	#6,sp

	clr	-(sp)
	trap #1

music:
	incbin	SANXION.MUS
	;incbin	SPELL.MUS
	;incbin	CATS.MUS
	;incbin	MASTER.MUS
	even

raster:

          TEXT

          OPT X-


modulflag EQU 0                    ; das wichtigste Flag fr die Final-Version !

***********************************************
*          >PART 'init_keys_etc'
	clr.l	$4e2
        ;  DEFAULT 5
         ; IF modulflag=0
          ;DEFAULT 1
          pea       anfang(pc)
          move.w    #$0026,-(sp)
          trap      #14
          addq.l    #6,sp
          clr.w     -(sp)          ;Mu durch eine einfaches RTS ersetzt werden
          trap      #1
         ; ENDC

anfang:   lea       bssstart(pc),a6
          lea       bssende,a5
          moveq     #0,d7
clr_bss:  move.w    d7,(a6)+
          cmpa.l    a5,a6
          blt.s     clr_bss

          bsr       retten

          move.w    #$0012,$fffffc02.w
          move.w    #0,$00000484.w

          move.l    #screen,d0
          clr.b     d0
          move.l    d0,log
          lsr.w     #8,d0
          move.l    d0,$ffff8200.w

          bsr       clear_cols

          bsr.s     cls

;          bsr.s     vsync
          move.b    #0,$ffff8260.w
          bsr.s     vsync

          move      #$2300,sr

          clr.b     $fffffa07.w
          clr.b     $fffffa09.w

          ori.b     #$21,$fffffa07.w
          ori.b     #$21,$fffffa13.w

          move.l    #nix,$00000120.w
          move.l    #vbl0,$00000070.w
          bclr      #6,$fffffa09.w
          move.l    #nix,$00000118.w
          bset      #6,$fffffa09.w
          bclr      #3,$fffffa17.w

wait:     move.b    waitvbl(pc),d0
www0:     cmp.b     waitvbl(pc),d0
          beq.s     www0

          cmpi.b    #$39,$fffffc02.w
          bne.s     wait

          bsr       backretten
          ;IF modulflag=0
          clr.w     -(sp)
          trap      #1
         ; ELSE
          move.l    #$deadface,d0  ;jetzt mu wieder destalliert werden!
          rts
          ;ENDC

*          ENDPART
***********************************************
*          >PART 'cls'

cls:      movea.l   log(pc),a0
          move.l    #40*260-1,d0
          moveq     #0,d1
cls2:     move.l    d1,(a0)+
          dbra      d0,cls2
          rts

*          ENDPART
***********************************************
*          >PART 'vsync'

vsync:    movem.l   d0-d1/a0,-(sp)
          lea       $ffff8209.w,a0
          movep.w   -8(a0),d0
vsync1:   tst.b     (a0)
          beq.s     vsync1
vsync2:   tst.b     (a0)
          bne.s     vsync2
          movep.w   -4(a0),d1
          cmp.w     d0,d1
          bne.s     vsync2
          movem.l   (sp)+,d0-d1/a0
          rts

*          ENDPART
***********************************************
*          >PART 'retten'

retten:
          move      usp,a0
          move.l    a0,old_usp
          move      sr,old_sr
          move      #$2700,sr
          movem.l   $ffff8240.w,d0-d7
          movem.l   d0-d7,oldcols
          move.l    $00000068.w,old_68
          move.l    $00000070.w,old_70
          move.l    $00000110.w,old_110
          move.l    $00000114.w,old_114
          move.l    $00000118.w,old_118
          move.l    $00000120.w,old_120
          move.l    $00000134.w,old_134
          move.b    $00000484.w,old_484
          move.b    $fffffa03.w,mfp_03
          move.b    $fffffa07.w,mfp_07
          move.b    $fffffa09.w,mfp_09
          move.b    $fffffa11.w,mfp_11
          move.b    $fffffa13.w,mfp_13
          move.b    $fffffa15.w,mfp_15
          move.b    $fffffa17.w,mfp_17
          move.b    $fffffa19.w,mfp_19
          move.b    $fffffa1b.w,mfp_1b
          move.b    $fffffa1d.w,mfp_1d
          move.b    $fffffa1f.w,mfp_1f
          move.b    $fffffa21.w,mfp_21
          bsr       vsync
          move.l    $ffff8200.w,old8200
          bsr       vsync
          move.b    $ffff820a.w,old_sync
          bsr       vsync
          move.b    $ffff8260.w,oldres
          bsr       vsync
          rts

*          ENDPART
***********************************************
*          >PART 'backretten'
backretten:
          move      #$2700,sr
          move.l    old_68(pc),$00000068.w
          move.l    old_70(pc),$00000070.w
          move.l    old_110(pc),$00000110.w
          move.l    old_114(pc),$00000114.w
          move.l    old_118(pc),$00000118.w
          move.l    old_120(pc),$00000120.w
          move.l    old_134(pc),$00000134.w
          move.b    old_484(pc),$00000484.w
;Soundchip durchpusten:
          lea       $ffff8800.w,a0
          move.l    #$08000000,(a0)
          move.l    #$09000000,(a0)
          move.l    #$0a000000,(a0)

          move.b    mfp_03(pc),$fffffa03.w
          move.b    mfp_07(pc),$fffffa07.w
          move.b    mfp_09(pc),$fffffa09.w
          move.b    mfp_11(pc),$fffffa11.w
          move.b    mfp_13(pc),$fffffa13.w
          move.b    mfp_15(pc),$fffffa15.w
          move.b    mfp_17(pc),$fffffa17.w
          move.b    mfp_19(pc),$fffffa19.w
          move.b    mfp_1b(pc),$fffffa1b.w
          move.b    mfp_1d(pc),$fffffa1d.w
          move.b    mfp_1f(pc),$fffffa1f.w
          move.b    mfp_21(pc),$fffffa21.w
          movem.l   oldcols(pc),d0-d7
          movem.l   d0-d7,$ffff8240.w
          bsr       vsync
          move.b    oldres(pc),$ffff8260.w
          bsr       vsync
          move.l    old8200(pc),$ffff8200.w
          bsr       vsync
          move.b    old_sync(pc),$ffff820a.w
          bsr       vsync

          move.w    #$0008,$fffffc02.w

          move      old_sr(pc),sr
          movea.l   old_usp(pc),a0
          move      a0,usp
          rts

*          ENDPART
***********************************************
*          >PART 'vbl & raster'


vbl0:     clr.b     $fffffa1b.w
          move.b    #30,$fffffa21.w
          move.b    #8,$fffffa1b.w
          move.l    #hbl01,$00000120.w

          move.b    #0,$ffff8260.w

          movem.l   d0-a6,-(sp)

          addq.b    #1,waitvbl
          movem.l   (sp)+,d0-a6
          rte


hbl01:    move.l    #$00230777,$ffff8240.w
          clr.b     $fffffa1b.w
          move.b    #1,$fffffa21.w
          move.b    #8,$fffffa1b.w
          move.l    #hbl01b,$00000120.w
          rte
hbl01b:   move.w    #$0045,$ffff8240.w
          move.l    #hbl01c,$00000120.w
          rte
hbl01c:   move.w    #$0067,$ffff8240.w
          move.l    #hbl01d,$00000120.w
          rte
hbl01d:   move.w    #$0045,$ffff8240.w
          move.l    #hbl01e,$00000120.w
          rte
hbl01e:   move.w    #$0023,$ffff8240.w
          move.l    #hbl01f,$00000120.w
          rte
hbl01f:   move.w    #$0001,$ffff8240.w
          clr.b     $fffffa1b.w
          move.b    #160,$fffffa21.w
          move.b    #8,$fffffa1b.w
          move.l    #hbl02,$00000120.w
          rte

hbl02:    move.l    #$00230023,$ffff8240.w
          clr.b     $fffffa1b.w
          move.b    #1,$fffffa21.w
          move.b    #8,$fffffa1b.w
          move.l    #hbl02b,$00000120.w
          rte
hbl02b:   move.l    #$00450045,$ffff8240.w
          move.l    #hbl02c,$00000120.w
          rte
hbl02c:   move.l    #$00670067,$ffff8240.w
          move.l    #hbl02d,$00000120.w
          rte
hbl02d:   move.l    #$00350035,$ffff8240.w
          move.l    #hbl02e,$00000120.w
          rte
hbl02e:   move.l    #$00230023,$ffff8240.w
          move.l    #hbl02f,$00000120.w
          rte
hbl02f:   move.l    #$00010001,$ffff8240.w
          clr.b     $fffffa1b.w
          move.b    #40,$fffffa21.w
          move.b    #8,$fffffa1b.w
          rte


nix:      rte


clear_cols:
          move.l    #$00000000,$ffff8240.w
          move.l    #$00000000,$ffff8244.w
          move.l    #$00000000,$ffff8248.w
          move.l    #$00000000,$ffff824c.w
          move.l    #$00000000,$ffff8250.w
          move.l    #$00000000,$ffff8254.w
          move.l    #$00000000,$ffff8258.w
          move.l    #$00000000,$ffff825c.w
          rts

*          ENDPART
***********************************************
*          >PART 'data'

          DATA

old_68:   DC.L 0
old_70:   DC.L 0
old_110:  DC.L 0
old_114:  DC.L 0
old_118:  DC.L 0
old_120:  DC.L 0
old_134:  DC.L 0
old_484:  DC.B 0
          EVEN
old8200:  DC.L 0
old_sync: DC.B 0
oldres:   DC.B 0
          EVEN
mfp_03:   DC.B 0
mfp_07:   DC.B 0
mfp_09:   DC.B 0
mfp_11:   DC.B 0
mfp_13:   DC.B 0
mfp_15:   DC.B 0
mfp_17:   DC.B 0
mfp_19:   DC.B 0
mfp_1b:   DC.B 0
mfp_1d:   DC.B 0
mfp_1f:   DC.B 0
mfp_21:   DC.B 0
          EVEN
old_sr:   DC.L 0
old_usp:  DC.L 0
oldstack: DC.L 0
          EVEN

          BSS
bssstart:
waitvbl:  DS.B 1
          EVEN
log:      DS.L 1
oldcols:  DS.L 8
          EVEN
          DS.B 256
screen:   DS.B 160*260
bssende:
*          ENDPART
***********************************************
	
          END
	