;*********************************************************************
;*                         SOUNDTRACKER 64
;*             Idea, Format, Editor and Design by Edel
;*********************************************************************
;* KOMMENTZ:   Display does NOT use 'DoubleBuffer'!
;*             ALL *UNDERSCORT LABELZl* HAVE 2 B REACHT FROM USRMODE!
;*             SEARCH FOR ";SYLEN!" TO CHANGE SYVARLEN HARDVALZ!
;*             As most PC Relative as possible (IRQ101%).
;*             No Blitter Uzed.
;*             "'"/ "~" to select colorpalette (not now!)
;*********************************************************************
WBStartup : NoCli
INCLUDE           "Blitz2:GTB/include/Intuition.bbi"
#CIACOUNT       = 2000                  ; CIAPresetSpeed
#DiskWait       = 64                    ; !! Keep as hi as possible !!
#VsrWait        = 54                    ; !! Keep as hi as possible !!
#screenmode     = 0                     ; !! DO NOT FCKN CHANGE !!! OUTOFDATE !!! REMOVED !!! DO NOT FCKN CHANGE !!! OUTOFDATE
#clrmem         = $10000                ; Flag DONT CHANGE
#chipmem        = 2                     ; Flag DONT CHANGE
#bmm            = 0                     ; mainbitmap
#slm            = 0                     ; mainslice
#positions      = 128                   ; numofposses (dont change cauz bit7 will uzet for jump)
#pats           = 64                    ; maxpatternz
#patofs         = #pats * 2             ; PLAYEROFFSETZ
#channels       = 4                     ; AudioChannels
#tracklines     = 128                   ; Lines in Pattern
#trackentry     = 2                     ; Bytez per ChannelLineEntry
#strk           = #trackentry * #tracklines   ; tracksize (one channel)
#sline          = #channels * #trackentry     ; linesize
#spat           = #strk * #channels     ; patternsize
#patmem         = #spat * #pats         ; patternmem
#ins            = 64                    ; max.instrumentz
#insofs         = #ins                  ; PLAYEROFFSETZ.B (MULTI WITH 64)
#sins           = 64                    ; singlebytelen
#insmem         = #ins * #sins          ; instmem
#wavez          = 256                   ; maximal wavez
#wavofs         = #wavez                ; PATTERNOFS.B (MULTI WITH 128)
#wave           = 128                   ; single wave size
#wavmem         = #wavez * #wave        ;  wave size
#cpmemblk       = #strk                 ; size for copybuffer
#cpmemtrk       = #strk                 ; size for copybuffer
#cpmempat       = #spat                 ; size for copybuffer
#cpmemins       = #sins                 ; size for copybuffer
#cpmemwav       = #wave                 ; size for copybuffer
#cpundpat       = #spat                 ; size for undobuffer
#cpundins       = #sins                 ; size for undobuffer
#cpundwav       = #wave                 ; size for undobuffer
#cpmem          = #cpmemblk+#cpmemtrk+#cpmempat+#cpmemins+#cpmemwav+#cpundwav+#cpundins+#cpundpat  ;totalsize for copybuffer
#vibtabmem      = 256 * 48
#scpbufmem      = 40*(64+16)            ; plane
#cpbaseblk      = 0                     ; offset
#cpbasetrk      = #cpbaseblk+#cpmemblk  ; offset
#cpbasepat      = #cpbasetrk+#cpmemtrk  ; offset
#cpbaseins      = #cpbasepat+#cpmempat  ; offset
#cpbasewav      = #cpbaseins+#cpmemins  ; offset
#undbaspat      = #cpbasewav+#cpmemwav  ; offset
#undbasins      = #undbaspat+#cpundpat  ; offset
#undbaswav      = #undbasins+#cpundins  ; offset
#bkpub          = 1                     ; pubmembank
;pubmemspace
#bkspubclear    = #positions+#patofs+#insofs+#wavofs+#patmem+#insmem+#wavmem
#bkspub         = #bkspubclear+#vibtabmem+#scpbufmem+#cpmem
#posbase        = 0                     ; offset
#patofsbase     = #posbase+#positions   ; offset
#insofsbase     = #patofsbase+#patofs   ; offset
#wavofsbase     = #insofsbase+#insofs   ; offset
#patbase        = #wavofsbase+#wavofs   ; offset
#insbase        = #patbase+#patmem      ; offset
#wavbase        = #insbase+#insmem      ; offset
#vibtab         = #wavbase+#wavmem      ; offset
#scpbuf         = #vibtab+#vibtabmem    ; offset
#cpbase         = #scpbuf+#scpbufmem    ; offset
#scpmem         = 256                   ; size
#bkchip         = 0                     ; chipmembank
#bkschip        = #scpmem               ; bkchipsize
#scpbase        = 0                     ; offset
#shcurs         = 0                     ; cursor shape
#shpointer      = 1                     ; pointer shape
#shstore        = 2                     ; stores patdezign (shape)
#shsynth        = 3                     ; synthdezigner shape
#shmeter        = 4                     ; meter  shape
#spcurs         = 0                     ; cursor sprite
#sppointer      = 1                     ; pointer sprite
#spmeter        = 2                     ; meter  sprite
#sppointerchan  = 0                     ; pointer sprite channel
#spcurschan     = 2                     ; cursor sprite channel
#spmstmetchan   = 3                     ; mstmet sprchn
#spmeterchan0   = 4                     ; met    sprchn
#spmeterchan1   = 5                     ; met    sprchn
#spmeterchan2   = 6                     ; met    sprchn
#spmeterchan3   = 7                     ; met    sprchn
#arpofs         = 14                    ; pl-offset
#noizofs        = 62                    ; pl-offset
                MaxLen taslpath$=192    : MaxLen taslfile$=192
                MaxLen waslpath$=192    : MaxLen waslfile$=192
                MaxLen tunename$=30     : MaxLen autorname$=30
                MaxLen copyright$=30
                taslpath$="RaM:"        : waslpath$="ST64:wAVeZ"
                tunename$="(Unknown)"
                autorname$="(Lamer)"
                copyright$="(NoDate)(NoGroup)"
                LoadFont  0,"topaz.font",8
_s:
_sprites:       LoadShape  #shcurs,"ST64:64System/Curs.bsh"
                LoadShape  #shpointer,"ST64:64System/Pointer.bsh"
                LoadShape  #shstore,"ST64:64System/Tracker.bsh"
                LoadShape  #shsynth,"ST64:64System/Synth.bsh"
                LoadShape  #shmeter,"ST64:64System/meter1.bsh"
                GetaSprite #spcurs,#shcurs
                GetaSprite #sppointer,#shpointer
                GetaSprite #spmeter,#shmeter
                BitMap     #bmm,320,256,4
                DecodeILBM #bmm,?Iffdat
                *bm.bitmap = Addr BitMap (#bmm) : work.l=*bm\_data[0]
                GetReg      d0,work.l      : LEA pnbmm,a0
                MOVE.l      d0,(a0)
                ; alloc mem
                InitBank #bkchip,#bkschip,#chipmem+#clrmem
                work.l = Bank (#bkchip) : GetReg d0,work.l
                TST.l d0                : BNE _bkchip : End
_bkchip:        LEA pnbkchip,a0         : MOVE.l d0,(a0)
                LEA pnscp,a0            : MOVE.l #scpbase,d1
                ADD.l d0,d1             : MOVE.l d1,(a0)
                InitBank #bkpub,#bkspub,#clrmem
                work.l = Bank (#bkpub)  : GetReg d0,work.l
                TST.l d0                : BNE _bkpub : End
_bkpub:         LEA pnbkpub,a0          : MOVE.l d0,(a0)
                LEA pnposbase,a0        : MOVE.l #posbase,d1
                ADD.l d0,d1             : MOVE.l d1,(a0)
                LEA pnpatbase,a0        : MOVE.l #patbase,d1
                ADD.l d0,d1             : MOVE.l d1,(a0)
                LEA pnpat,a0            : MOVE.l d1,(a0)
                LEA pninsbase,a0        : MOVE.l #insbase,d1
                ADD.l d0,d1             : MOVE.l d1,(a0)
                LEA pnins,a0            : ADD.l  #sins,d1 ;instr#1
                MOVE.l d1,(a0)
                LEA pnwavebase,a0       : MOVE.l #wavbase,d1
                ADD.l d0,d1             : MOVE.l d1,(a0)
                LEA pnwave,a0           : MOVE.l d1,(a0)
                LEA pncpbase,a0         : MOVE.l #cpbase,d1
                ADD.l d0,d1             : MOVE.l d1,(a0)
                LEA pnscpbuf,a0         : MOVE.l #scpbuf,d1
                ADD.l d0,d1             : MOVE.l d1,(a0)
                LEA pnvibtab,a0         : MOVE.l #vibtab,d1
                ADD.l d0,d1             : MOVE.l d1,(a0)
                Gosub calcvib
                Gosub openwindow
                MOVE.l pnbkpub,d0       : PutReg d0,pubadr.l
                JSR initfillscp         ; ULTRA ULTRA IMPORTANT
._INTUI:
  ev.l = WaitEvent
  GetReg d0,ev : CMP.l #IDCMP_CLOSEWINDOW,d0 : BEQ _QUITALL
  CMP.l #IDCMP_GADGETUP,d0 : BEQ _INTUIGADS
  BRA _INTUI
._INTUIGADS:
  GetReg d1,GadgetHit
  CMP.l #0,d1 : BNE _nonewtunename
  tunename$ = GTGetString (0,0)             : BRA _INTUI
_nonewtunename:
  CMP.l #1,d1 : BNE _nonewautor
  autorname$ = GTGetString (0,1)            : BRA _INTUI
_nonewautor:
  CMP.l #2,d1 : BNE _nonewcopyright
  copyright$ = GTGetString (0,2)            : BRA _INTUI
_nonewcopyright:
  CMP.l #3,d1 : BNE _notsupervisor : BSR GO : BRA _INTUI
_notsupervisor:
  CMP.l #4,d1 : BNE _nosavemod
  ;*** SAVE MODULE ***
  taslfile$="S64."+tunename$
  myfile$=ASLFileRequest$("Save Tune",taslpath$,taslfile$,"S64.#?")
  If myfile$=" "
  NOP
  Else
  If Exists (myfile$) : KillFile myfile$ : EndIf
  If OpenFile (0,myfile$) : FileOutput 0
       ; ---0     ----2   ---1     ---2     ---3     ---4     ---5
  Print "S64{" + "####"+ "}V1." + "00 S" + "OUND" + "MODU" + "LE: "
  Print tunename$+SPACE$((30 - Len(tunename$)))
  Print " by "+autorname$+SPACE$((30 - Len(autorname$)))
  Print " (c)"+copyright$+SPACE$((30 - Len(copyright$)))
  Print Mkl$(734)+"...."+"...."+"...."+"...."+"...."+"...."+"...." ;OFFSETZ/STATUS
  ;0=PAT / 1=INS / 2=WAVE
  ;SAVE POSITIONS + FIND HIEST PATTERN
  a=0
  For i.w = 0 To 127
  b.b=Peek.b(pubadr+#posbase+i)
  If b>a Then a=b                       ;a=hiest
  Print Chr$(b)
  Next i
  ;CLR OFFSETABZ
  For i.w=1 To #patofs+#insofs+#wavofs : Print Chr$(0) : Next i
  ;SAVE PATS
._LAMESAVE:
  For i.w=0 To a ;hiest
  workl.l=pubadr+#patbase+(#spat*i)
  WriteMem 0,workl,#spat
  Next i
  curloc.l=Loc(0) ;beyond patternz
  FileSeek 0,158+128                    ;seek patofs'
  For i=0 To a*#spat Step #spat
   Print Mki$(i)
  Next i
  FileSeek 0,126+4                      ;seek instrstart-offset
  Print Mkl$(curloc.l)
  FileSeek 0,158+#positions+#patofs     ;seek insofz
  savenum.w = 1                         ;the offset
  For i=0 To #ins-1
    workl.l = i*#sins+pubadr+#insbase
    tb.b = 0
    For w.w=0 To #sins-1
      tb = tb OR Peek.b(workl+w)
    Next w
    If i=0
     Print Chr$(0) : seekloc.l = Loc(0) : FileSeek 0,curloc
     WriteMem 0,workl,#sins : curloc.l + #sins : FileSeek 0,seekloc
    Else
      If tb=0
        Print Chr$(0)
      Else
        Print Chr$(savenum)
        seekloc.l = Loc(0) : FileSeek 0,curloc
        WriteMem 0,workl,#sins
        curloc.l  + #sins : FileSeek 0,seekloc
        savenum.w + 1
     EndIf
   EndIf
  Next i
  FileSeek 0,126+8                      ;seek wavezstart-offset
  Print Mkl$(curloc.l)
  FileSeek 0,158+#positions+#patofs+#insofs  ;ZEEK WAVOFZ'Z
  savenum.w = 1
  For i=0 To #wavez-1
    workl.l = i*#wave+pubadr+#wavbase
    tb.b = 0
    For w.w=0 To #wave-1
      tb = tb OR Peek.b(workl+w)
    Next w
    If i=0
     Print Chr$(0) : seekloc.l = Loc(0) : FileSeek 0,curloc
     WriteMem 0,workl,#wave : curloc.l + #wave : FileSeek 0,seekloc
    Else
      If tb=0
        Print Chr$(0)
      Else
        Print Chr$(savenum)
        seekloc.l = Loc(0) : FileSeek 0,curloc
        WriteMem 0,workl,#wave
        curloc.l  + #wave : FileSeek 0,seekloc
        savenum.w + 1
     EndIf
   EndIf
  Next i
_endsavetune: CloseFile 0  : DefaultOutput : VWait #DiskWait : EndIf : EndIf
  BRA _INTUI
_nosavemod:
  CMP.w #5,d1   : BNE _noloadmod:      ;!!!!!CHECK PAKSIZ OF PATLOAD LATER
  ;*** LOAD MOD ***
  taslfile$="S64."+tunename$
  myfile$=ASLFileRequest$("Load Tune",taslpath$,taslfile$,"S64.#?")
  If myfile$=" "
  NOP
  Else
  If ReadFile (0,myfile$)
   flen.l=Lof (0) : If flen < 734 Then Goto _fileerror
   ;ClrMyStuff
   For il.l=pubadr To pubadr+#bkspubclear-1
    Poke.b il,0
   Next il
   ;EndClr
   ReadMem  0,pubadr,8 : MOVE.l pnbkpub,a0 : CMP.l #"S64{",(a0) : BNE _fileerror
   FileSeek 0,28 : ReadMem 0,pubadr,30 : Gosub decodestring :  tunename$=workstring$
   FileSeek 0,62 : ReadMem 0,pubadr,30 : Gosub decodestring : autorname$=workstring$
   FileSeek 0,96 : ReadMem 0,pubadr,30 : Gosub decodestring : copyright$=workstring$
   GTSetString 0,0,tunename$ : GTSetString 0,1,autorname$   : GTSetString 0,2,copyright$
   FileSeek 0,126 ;OFFSETZ !! ( and maybe more )
   ReadMem  0,?loaddata,32
   FileSeek 0,158                   ;seek positions + offzettablez
   ReadMem  0,pubadr+#posbase,576
   fileofs.l= Peek.l(?loaddata)
   dest.l   = pubadr+#patbase
   w.w      = 0
_readlop:
   ofs.l    = Peek.w(pubadr+#patofsbase+w) AND $ffff
   If w=0 Then Goto _bloed
   If ofs.l = 0 Then Goto _patred
_bloed:
   FileSeek   0,fileofs+ofs
   wlen.l   = Lof(0) - Loc(0) : If wlen > #spat Then wlen = #spat
   ReadMem    0,dest,wlen     :    dest + #spat
   w + 2    : If w = #pats Then   Goto _patred
   Goto _readlop
_patred:
   Poke.w ?curpos,0 : Poke.w ?curpat,0 : Poke.w ?curline,0
   ;-
   FileSeek  0,Peek.l (?loaddata+4)
   dest.l    = pubadr+#insbase-#sins
   w = -1
_insreadlop:
   dest + #sins
   w+1 : If w=#ins Goto _insred
   ofs.l = Peek.b(pubadr+#insofsbase+w) * #sins
   If w=0 Then Goto _bloed2
   If ofs = 0 Then Goto _insreadlop
_bloed2:
   If Lof(0)-Loc(0)<#sins Then Goto _fileerror
   ReadMem 0,dest,#sins
   Goto _insreadlop
_insred:
   FileSeek  0,Peek.l (?loaddata+8)
   dest.l    = pubadr+#wavbase-#wave
   w = -1
_wavzreadlop:
   dest + #wave
   w+1 : If w=#wavez Goto _wavzred
   ofs.l = Peek.b(pubadr+#wavofsbase+w) * #wave
   If w=0 Then Goto _bloed3
   If ofs = 0 Then Goto _wavzreadlop
_bloed3:
   If Lof(0)-Loc(0)<#wave Then Goto _fileerror
   ReadMem 0,dest,#wave
   Goto _wavzreadlop
_wavzred:
_fileerror:
   CloseFile 0 : VWait #DiskWait
   EndIf
  EndIf
  BRA _INTUI
_noloadmod:
  CMP.w #10,d1  : BNE _nosavewav
  MOVE.l pnwave(pc),d0    : PutReg d0,workl.l
  myfile$=ASLFileRequest$("Save Wave",waslpath$,waslfile$)
  If myfile$=" "
  NOP
  Else
  If Exists (myfile$)     : KillFile myfile$ : EndIf
  If OpenFile (0,myfile$) : FileOutput 0
  WriteMem 0,workl,#wave
  CloseFile 0   : DefaultOutput : VWait #DiskWait : EndIf : EndIf : BRA _INTUI
_nosavewav:
  CMP.w #11,d1  : BNE _noloadwav
  MOVE.l pnwave(pc),d0    : PutReg d0,workl.l
  myfile$=ASLFileRequest$("Load Wave",waslpath$,waslfile$)
  If myfile$=" "
  NOP
  Else
  If Exists (myfile$)
    If ReadFile (0,myfile$) : FileInput 0
      If Lof(0) = #wave
        ReadMem 0,workl,#wave
      EndIf
      CloseFile 0 : DefaultInput : VWait #DiskWait
    EndIf
  EndIf           : EndIf        : BRA _INTUI
_noloadwav:
  BRA _INTUI
._QUITALL:
  End
decodestring:
workstring$=Chr$(Peek.b (pubadr))
For subclass_a = 1 To 29
workstring$+Chr$(Peek.b (pubadr+subclass_a))
Next subclass_a
workstring$=StripTrail$(workstring$,32)
Return
.GO:           ;SUPERVISOR ---------------------------------------
                VWait #VsrWait
                BLITZ
                MOVE.w firstrun(pc),d0 : BNE notfirstrun
                Slice #slm,44,4+(#screenmode*8) : BitMapOutput #bmm
                LEA firstrun(pc),a0    : MOVE.w #-1,(a0)
._VBL:          BRA _tovbl
_vbldone:    ;   cop$=Mkl$($1007fffe)
                cop$=Mkl$($01800000)  ;DEF #0 Back I
                cop$=Mkl$($0182005b)  ;DEF #1 Font I
                cop$+Mkl$($01840030)  ;DEF #2 Scope Back
                cop$+Mkl$($01860080)  ;DEF #3 Scope Pen
                cop$+Mkl$($01880603)  ;DEF #4 Logo  Pen
                cop$+Mkl$($018a082f)  ;DEF #5 Logo  FontMix
                cop$+Mkl$($018c0000)  ;DEF #6 Back II
                cop$+Mkl$($018e005b)  ;DEF #7 Font II
                cop$+Mkl$($01900666)  ;DEF #8 Half Dark
                cop$+Mkl$($01920aaa)  ;DEF #9 Half Lite
                cop$+Mkl$($01940040)  ;DEF #a Scope Dezign Back
                cop$+Mkl$($019600b0)  ;DEF #b Scope Dezign Pen
                cop$+Mkl$($01980888)  ;DEF #c Medium
                cop$+Mkl$($019a0000)  ;DEF #d Font CurLine
                cop$+Mkl$($019c0444)  ;DEF #e Dark
                cop$+Mkl$($019e0ccc)  ;DEF #f Lite
                cop$+Mkl$($01a00111)  ;DEF 10 ---------
                cop$+Mkl$($01a20ccc)  ;DEF 11 Sprite0+1 Pointer Hi
                cop$+Mkl$($01a40888)  ;DEF 12 Sprite0+1 Pointer Med
                cop$+Mkl$($01a60444)  ;DEF 13 Sprite0+1 Pointer Low
                cop$+Mkl$($01a80111)  ;DEF 14 ---------
                cop$+Mkl$($01aa0ff0)  ;DEF 15 Sprite2+3 Curs Hi
                cop$+Mkl$($01ac0aa0)  ;DEF 16 Sprite2+3 Curs Med
                cop$+Mkl$($01ae0660)  ;DEF 17 Sprite2+3 Curs Low
                cop$+Mkl$($01b00111)  ;DEF 18 ---------
                cop$+Mkl$($01b20505)  ;DEF 19 Sprite4+5 Vu 1 Low
                cop$+Mkl$($01b40c0c)  ;DEF 1a Sprite4+5 Vu 1 Hi
                cop$+Mkl$($01b60808)  ;DEF 1b Sprite4+5 Vu 1 Med
                cop$+Mkl$($01b80111)  ;DEF 1c ---------
                cop$+Mkl$($01ba0060)  ;DEF 1d Sprite6+7 Vu 2 Low
                cop$+Mkl$($01bc00e0)  ;DEF 1e Sprite6+7 Vu 2 Hi
                cop$+Mkl$($01be00a0)  ;DEF 1f Sprite6+7 Vu 2 Med
                Show #bmm,0,0
                CustomCop cop$,43
                BRA first
notfirstrun:    ShowBlitz
first:          ;VERY IMPORTANT
                InFront 4 ;ab met0.
                MouseArea 0,2,320,256 : Mouse On : BlitzKeys On
                BSR setchannelz
                Pointer #sppointer,#sppointerchan
                BSR startpated
                LEA vbl_on(pc),a0 : MOVE.w #1,(a0)
                BSR INIT_CIA_B
                LEA pause(pc),a0  : MOVE.w #0,(a0)
                LEA lastpos(pc),a0 : NOT.w (a0)
                LEA lastpat(pc),a0 : NOT.w (a0)
                BSR pat2undo
                BRA MAINLOP
VUMET: MOVEM.l d0-d7/a0-a6,-(a7)
 MOVE.w prtrkon(pc),d0 : BEQ novu
 LEA synth0(pc),a0 : MOVE.w $64(a0),d0 : PutReg d0,w.w
 MOVE.b $94(a0),d0 : ASR.b #3,d0 : EXT.w d0 : ADD.w #56,d0  : PutReg d0,i.w
 ShowSprite #spmeter,i,180-w,#spmeterchan0
 LEA synth1(pc),a0 : MOVE.w $64(a0),d0 : PutReg d0,w.w
 MOVE.b $94(a0),d0 : ASR.b #3,d0 : EXT.w d0 : ADD.w #112,d0 : PutReg d0,i.w
 ShowSprite #spmeter,i,180-w,#spmeterchan1
 LEA synth2(pc),a0 : MOVE.w $64(a0),d0 : PutReg d0,w.w
 MOVE.b $94(a0),d0 : ASR.b #3,d0 : EXT.w d0 : ADD.w #168,d0 : PutReg d0,i.w
 ShowSprite #spmeter,i,180-w,#spmeterchan2
 LEA synth3(pc),a0 : MOVE.w $64(a0),d0 : PutReg d0,w.w
 MOVE.b $94(a0),d0 : ASR.b #3,d0 : EXT.w d0 : ADD.w #224,d0 : PutReg d0,i.w
 ShowSprite #spmeter,i,180-w,#spmeterchan3
 BRA vut
novu:
 ShowSprite #spmeter,321,100,#spmeterchan0
 ShowSprite #spmeter,321,100,#spmeterchan1
 ShowSprite #spmeter,321,100,#spmeterchan2
 ShowSprite #spmeter,321,100,#spmeterchan3
vut: MOVEM.l (a7)+,d0-d7/a0-a6 : RTS
.MAINLOP:       ;**** MainLoop ****
                BSR VUMET
                BTST #6,$bfe001          : BEQ MOUZ
MOUZDUN:        ;REMOUZ
;keyboard request
checkctrl:      GetReg d0,RawStatus($63) : BEQ checklalt
                MOVE.w prtrkon(pc),d3    : BEQ noed
                MOVE.w ed(pc),d3         : BEQ noed
                MOVE.w curline(pc),d0    : MOVE.w d0,d1 ;**D1=LINE**
                ASL.w #3,d0              : EXT.l d0
                MOVE.l pnpat(pc),a0      : ADD.l d0,a0
                MOVE.w curchan(pc),d0    : ADD.w d0,d0 : EXT.l d0
                ADD.l d0,a0              ; **A0=PAT**
                GetReg d0,RawStatus($27) : BEQ noctrlk
                MOVE.w #127,d0           : SUB.w d1,d0
clrk:           MOVE.w #0,(a0)           : ADD.l #sline,a0
                DBNE d0,clrk
                BRA patchng
noctrlk:        GetReg d0,RawStatus($16) : BEQ noctrlu
                BSR undoswappat
                MOVE.w #6,$dff180
                BSR waitmouzv
                BRA patchng
noctrlu:        GetReg d0,RawStatus($35) : BEQ noctrlb
                LEA blockstart(pc),a0    : MOVE.w d1,(a0)
                MOVE.w #$f0,$dff180
                BRA patchng
noctrlb:        GetReg d0,RawStatus($33) : BEQ noctrlc
                LEA blockstart(pc),a0    : MOVE.w (a0),d0
                BMI cbout                ; Just Savety ... isn't really needed.
                CMP.w d0,d1              : BGT noswapblk
                EXG.l d0,d1
noswapblk:      SUB.w d0,d1              : LEA blocklen(pc),a0
                MOVE.w d1,(a0)           ; Set 'BlockLen'
                ASL.w #3,d0              : EXT.l d0
                MOVE.l pnpat(pc),a0      : ADD.l d0,a0
                MOVE.w curchan(pc),d0    : ADD.w d0,d0
                EXT.l d0                 : ADD.l d0,a0
                MOVE.l pncpbase(pc),a1   : ADD.l #cpbaseblk,a1
copy2buf:       MOVE.w (a0),(a1) : ADD.l #sline,a0 : ADD.l #sline,a1 : SUBQ.w #1,d1 : BPL copy2buf : MOVE.w #$f0,$dff180
cbout:          BRA MAINLOP
noctrlc:        GetReg d0,RawStatus($19) : BEQ noctrlp
                MOVE.w d1,d0             ; 'LineNum'
                MOVE.w blocklen(pc),d1   : BEQ nocpout
                MOVE.w #tracklines,d2
                SUB.w  d0,d2
                CMP.w  d1,d2
                BGT    nocalcpaste
                MOVE.w d2,d1
                SUBQ.w #1,d1
nocalcpaste:    MOVE.w d1,d0
                MOVE.l pncpbase(pc),a1   : ADD.l #cpbaseblk,a1
buf2pat:        MOVE.w (a1),(a0) : ADD.l #sline,a0 : ADD.l #sline,a1 : SUBQ.w #1,d1 : BPL buf2pat
                LEA curline(pc),a0
                MOVE.w d0,(a0)
                BRA patchng
nocpout:        BRA MAINLOP
noctrlp:
noed:
noctrlleft:     LEA curins(pc),a0
                GetReg d0,RawStatus($4d) : BEQ noctrldown
ctrlinslop:     MOVE.w (a0),d0 : SUBQ.w #1,d0 : AND.w #63,d0
                MOVE.w d0,(a0)
                ASL.w #6,d0   : EXT.l d0 : LEA pnins(pc),a1   : MOVE.l pninsbase(pc),d1 : ADD.l d1,d0 : MOVE.l d0,(a1)
                NOT d0  : LEA lastins(pc),a1 : MOVE.w d0,(a1) : LEA lastsynins(pc),a1 : MOVE.w d0,(a1)
                BSR waitmouzv
                GetReg d0,RawStatus($4d) : BNE ctrlinslop     : BRA MAINLOP
noctrldown:     GetReg d0,RawStatus($4c) : BEQ noctrlup
ctrlinslop2:    MOVE.w (a0),d0 : ADDQ.w #1,d0 : AND.w #63,d0
                MOVE.w d0,(a0)
                ASL.w #6,d0   : EXT.l d0 : LEA pnins(pc),a1   : MOVE.l pninsbase(pc),d1 : ADD.l d1,d0 : MOVE.l d0,(a1)
                NOT d0  : LEA lastins(pc),a1 : MOVE.w d0,(a1) : LEA lastsynins(pc),a1 : MOVE.w d0,(a1)
                BSR waitmouzv
                GetReg d0,RawStatus($4c) : BNE ctrlinslop2
noctrlup:       BRA MAINLOP
checklalt:      GetReg d0,RawStatus($64) : BEQ nolalt
                GetReg d0,RawStatus($66) : BEQ nolamiga2
                LEA curpos(pc),a0        : MOVE.w #0,(a0)
                LEA curline(pc),a0       : MOVE.w #0,(a0)
                LEA patrun(pc),a0        : MOVE.w #0,(a0)
                BSR preplay
                LEA playstate(pc),a0     : MOVE.w #1,(a0)
lamiga2lop:     GetReg d0,RawStatus($66) : BNE lamiga2lop : BRA MAINLOP
nolamiga2:      MOVE.w playstate(pc),d0  : BNE smart
                GetReg d0,RawStatus($4c) : BEQ nolaltdown
                BSR down
                BSR myvwait              : BRA MAINLOP
nolaltdown:     GetReg d0,RawStatus($4d) : BEQ nolaltup
                BSR up
                BSR myvwait              : BRA MAINLOP
smart:
nolaltup:       LEA curpat(pc),a0 : LEA lastpat(pc),a1
                GetReg d0,RawStatus($4f)  : BEQ nolaltleft
laltpatlop:     MOVE.w (a0),d0 : SUBQ.w #1,d0 : AND.w #63,d0
                MOVE.w d0,(a0) : NOT.w d0 : MOVE.w d0,(a1)
                BSR waitmouzv
                MOVE.l a0,-(a7) : MOVE.l a1,-(a7)
                BSR pat2undo
                MOVE.l (a7)+,a1 : MOVE.l (a7)+,a0
                GetReg d0,RawStatus($4f) : BNE laltpatlop
                BRA MAINLOP
nolaltleft:     GetReg d0,RawStatus($4e) : BEQ nolaltright
laltpatlop2:    MOVE.w (a0),d0 : ADDQ.w #1,d0 : AND.w #63,d0
                MOVE.w d0,(a0) : NOT.w d0 : MOVE.w d0,(a1)
                BSR waitmouzv
                MOVE.l a0,-(a7) : MOVE.l a1,-(a7)
                BSR pat2undo
                MOVE.l (a7)+,a1 : MOVE.l (a7)+,a0
                GetReg d0,RawStatus($4e) : BNE laltpatlop2
                BRA MAINLOP
nolaltright:    GetReg d0,RawStatus($42) : BEQ nolalttab
                LEA curchan(pc),a0       : MOVE.w (a0),d0
                SUBQ.w #1,d0             : AND.w #3,d0
                MOVE.w d0,(a0)           : LEA curfig(pc),a0
                MOVE.w #0,(a0)           : BSR patcursmark
                BSR waitmouzv            : BRA MAINLOP
nolalttab:
                BRA MAINLOP
nolalt:
checkshift:     GetReg d0,RawStatus($60)  : BEQ noshift
;CHECK SH-DELETE
                MOVE.w prtrkon(pc),d3     : BEQ noshdel
                MOVE.w ed(pc),d3          : BEQ noshdel
                GetReg d0,RawStatus($46)  : BEQ noshdel
                MOVE.l pnpat(pc),a0       : MOVE.w curpatbyte(pc),d0
                MOVE.w #0,0(a0,d0.w)
                LEA lastpat(pc),a0        : NOT.w (a0)  : BSR myvwait
                BSR myvwait : BSR myvwait : BRA jmpdown
noshdel:
                MOVE.l playstate(pc),d0  : BNE smart2
                GetReg d0,RawStatus($4c) : BEQ noshdown
                BSR down                 : BSR myvwait
                BSR myvwait              : BRA MAINLOP
noshdown:       GetReg d0,RawStatus($4d) : BEQ noshup
                BSR up                   : BSR myvwait
                BSR myvwait              : BRA MAINLOP
noshup:         LEA curpos(pc),a0 : LEA lastpos(pc),a1
                GetReg d0,RawStatus($4f) : BEQ noshleft
shposlop:       MOVE.w (a0),d0 : SUBQ.w #1,d0 : AND.w #63,d0
                MOVE.w d0,(a0) : NOT d0  : MOVE.w d0,(a1)
                BSR waitmouzv
                GetReg d0,RawStatus($4f) : BNE shposlop
                BRA MAINLOP
smart2:
noshleft:       GetReg d0,RawStatus($4e) : BEQ noshright
shposlop2:      MOVE.w (a0),d0 : ADDQ.w #1,d0 : AND.w #63,d0
                MOVE.w d0,(a0) : NOT d0  : MOVE.w d0,(a1)
                BSR waitmouzv
                GetReg d0,RawStatus($4e) : BNE shposlop2
                BRA MAINLOP
noshright:      GetReg d0,RawStatus($42) : BEQ noshtab
                LEA curchan(pc),a0       : MOVE.w (a0),d0
                SUBQ.w #1,d0             : AND.w #3,d0
                MOVE.w d0,(a0)           : LEA curfig(pc),a0
                MOVE.w #0,(a0)           : BSR patcursmark
                BSR waitmouzv            : BRA MAINLOP
noshtab:
                BRA MAINLOP
;**** HOLD PC RELATIVITY ****
._tovbl:        BRA _TheVBL
_backvbl:       BRA _vbldone
;****************************
noshift:        ;------------------------+-----------------------------
Ret:            GetReg d0,RawStatus($44) : BEQ F1
                LEA patrun(pc),a0        : MOVE.w #1,(a0)   ;It's 'PatOnly'
                LEA playstate(pc),a0     : LEA tracing(pc),a1
                MOVE.w #0,(a0)           : MOVE.w #1,(a1)
                MOVEM.l d0-d7/a0-a6,-(a7)
                BSR TRACE
                MOVEM.l (a7)+,d0-d7/a0-a6
                MOVE.w #0,(a1)
RetLop:         BSR myvwait : GetReg d0,RawStatus($44) : BNE RetLop : BRA MAINLOP
F1:             GetReg d0,RawStatus($50) : BEQ F2
                LEA keytrans(pc),a0      : MOVE.w #0,(a0)
                LEA edmode(pc),a0        : MOVE.w #0,(a0) : BRA MAINLOP
F2:             GetReg d0,RawStatus($51) : BEQ F3
                LEA keytrans(pc),a0      : MOVE.w #5,(a0)
                LEA edmode(pc),a0        : MOVE.w #0,(a0) : BRA MAINLOP
F3:             GetReg d0,RawStatus($52) : BEQ F4
                LEA keytrans(pc),a0      : MOVE.w #10,(a0)
                LEA edmode(pc),a0        : MOVE.w #0,(a0) : BRA MAINLOP
F4:             GetReg d0,RawStatus($53) : BEQ F5
                LEA keytrans(pc),a0      : MOVE.w #15,(a0)
                LEA edmode(pc),a0        : MOVE.w #0,(a0) : BRA MAINLOP
F5:             GetReg d0,RawStatus($54) : BEQ F6
                LEA keytrans(pc),a0      : MOVE.w #0,(a0)
                LEA edmode(pc),a0        : MOVE.w #1,(a0) : BRA MAINLOP
F6:             LEA curline(pc),a0       : MOVE.w (a0),d1 : AND.w #%01000000,d1
                GetReg d0,RawStatus($55) : BEQ F7
                MOVE.w d1,(a0)           : BRA linechng
F7:             GetReg d0,RawStatus($56) : BEQ F8         : OR.w #16,d1
                MOVE.w d1,(a0)           : BRA linechng
F8:             GetReg d0,RawStatus($57) : BEQ F9         : OR.w #32,d1
                MOVE.w d1,(a0)           : BRA linechng
F9:             GetReg d0,RawStatus($58) : BEQ F10        : OR.w #48,d1
                MOVE.w d1,(a0)           : BRA linechng
F10:            GetReg d0,RawStatus($59) : BEQ rshift     : MOVE.w (a0),d1
                EOR.w #%01000000,d1      : MOVE.w d1,(a0) : LEA lastline(pc),a0 : NOT.w (a0)
F10LOP:         GetReg d0,RawStatus($59) : BEQ MAINLOP
                BSR VUMET                : BRA F10LOP
rshift:         GetReg d0,RawStatus($61) : BEQ lamiga
                LEA patrun(pc),a0        : MOVE.w #1,(a0)
                LEA curline(pc),a0       : MOVE.w #0,(a0)
                LEA playstate(pc),a0     : MOVE.w #1,(a0)
rshiftlop:      GetReg d0,RawStatus($61) : BNE rshiftlop : BRA MAINLOP
lamiga:         GetReg d0,RawStatus($66) : BEQ nolami
                LEA patrun(pc),a0        : MOVE.w #0,(a0)
                LEA curline(pc),a0       : MOVE.w #0,(a0)
                LEA playstate(pc),a0     : MOVE.w #1,(a0)
                BSR preplay
lamigalop:      GetReg d0,RawStatus($66) : BNE lamigalop : BRA MAINLOP
nolami:         ;------------------------+-----------------------------
;**** PRE EDIT ****    ; CHK FOR RLS KEY
         MOVE.w lvrow0(pc),d0 : BEQ chklvr1 : PutReg d0,w.w : GetReg d0,RawStatus(w) : BNE chklvr1
LEA lvrow0(pc),a0 : MOVE.w #0,(a0)          ; KEYOFF
LEA synth0(pc),a0 : MOVE.b #0,$7d(a0)       ; Set 'HoldTime'
chklvr1: MOVE.w lvrow1(pc),d0 : BEQ chklvr2 : PutReg d0,w.w : GetReg d0,RawStatus(w) : BNE chklvr2
LEA lvrow1(pc),a0 : MOVE.w #0,(a0)          ; KEYOFF
LEA synth1(pc),a0 : MOVE.b #0,$7d(a0)       ; Set 'HoldTime'
chklvr2: MOVE.w lvrow2(pc),d0 : BEQ chklvr3 : PutReg d0,w.w : GetReg d0,RawStatus(w) : BNE chklvr3
LEA lvrow2(pc),a0 : MOVE.w #0,(a0)          ; KEYOFF
LEA synth2(pc),a0 : MOVE.b #0,$7d(a0)       ; Set 'HoldTime'
chklvr3: MOVE.w lvrow3(pc),d0 : BEQ nolvr   : PutReg d0,w.w : GetReg d0,RawStatus(w) : BNE nolvr
LEA lvrow3(pc),a0 : MOVE.w #0,(a0)          ; KEYOFF
LEA synth3(pc),a0 : MOVE.b #0,$7d(a0)       ; Set 'HoldTime'
nolvr:
;****  - EDIT -  ****
MOVE.w prtrkon(pc),d0    : BEQ edfigur0
MOVE.w ed(pc),d0         : BEQ edfigur0
MOVE.w curfig(pc),d0     : BEQ edfigur0
CMP.w #1,d0              : BNE edval
GetReg d0,RawStatus($A)  : MOVE.b   #0,d1 : TST.w d0 : BNE donefxsym ;0
GetReg d0,RawStatus($2)  : MOVE.b  #64,d1 : TST.w d0 : BNE donefxsym ;2
GetReg d0,RawStatus($1)  : MOVE.b #128,d1 : TST.w d0 : BNE donefxsym ;1
GetReg d0,RawStatus($3)  : MOVE.b #192,d1 : TST.w d0 : BNE donefxsym ;3
GetReg d0,RawStatus($46) : MOVE.b   #0,d1 : TST.w d0 : BNE donefxsym ;DEL
GetReg d0,RawStatus($17) : MOVE.b  #64,d1 : TST.w d0 : BNE donefxsym ;I
GetReg d0,RawStatus($21) : MOVE.b #128,d1 : TST.w d0 : BNE donefxsym ;S
GetReg d0,RawStatus($34) : MOVE.b #192,d1 : TST.w d0 : BNE donefxsym ;V
BRA noedit
donefxsym: MOVE.l pnpat(pc),a0 : MOVE.w curpatbyte(pc),d0
MOVE.b 0(a0,d0.w),d2 : AND.b #63,d2 : OR.b d1,d2     : MOVE.b d2,0(a0,d0.w)
LEA lastpat(pc),a0   : NOT.w (a0)   : BRA jmpdown
edval:
MOVE.b #$11,d2 : GetReg d1,RawStatus(1)   : BNE donenib
MOVE.b #$22,d2 : GetReg d1,RawStatus(2)   : BNE donenib
MOVE.b #$33,d2 : GetReg d1,RawStatus(3)   : BNE donenib
MOVE.b #$44,d2 : GetReg d1,RawStatus(4)   : BNE donenib
MOVE.b #$55,d2 : GetReg d1,RawStatus(5)   : BNE donenib
MOVE.b #$66,d2 : GetReg d1,RawStatus(6)   : BNE donenib
MOVE.b #$77,d2 : GetReg d1,RawStatus(7)   : BNE donenib
MOVE.b #$88,d2 : GetReg d1,RawStatus(8)   : BNE donenib
MOVE.b #$99,d2 : GetReg d1,RawStatus(9)   : BNE donenib
MOVE.b #$00,d2 : GetReg d1,RawStatus(10)  : BNE donenib
MOVE.b #$aa,d2 : GetReg d1,RawStatus($20) : BNE donenib
MOVE.b #$bb,d2 : GetReg d1,RawStatus($35) : BNE donenib
MOVE.b #$cc,d2 : GetReg d1,RawStatus($33) : BNE donenib
MOVE.b #$dd,d2 : GetReg d1,RawStatus($22) : BNE donenib
MOVE.b #$ee,d2 : GetReg d1,RawStatus($12) : BNE donenib
MOVE.b #$ff,d2 : GetReg d1,RawStatus($23) : BNE donenib
BRA noedit
donenib:
BTST #0,d0 : BEQ notleast
AND.w #15,d2 : MOVE.b #$f0,d3 : BRA most
notleast: AND.w #$f0,d2 : MOVE.b #15,d3
most: MOVE.l pnpat(pc),a0 : MOVE.w curpatbyte(pc),d4
MOVE.b 0(a0,d4.w),d5 : AND.b d3,d5 : OR.b d2,d5 : MOVE.b d5,0(a0,d4.w)
LEA lastpat(pc),a0 : NOT.w (a0) : BRA jmpdown
edfigur0:   ; get note from keyboard
;CHECK DELETE
MOVE.w prtrkon(pc),d3     : BEQ nodel
MOVE.w ed(pc),d3          : BEQ nodel
GetReg d0,RawStatus($46)  : BEQ nodel
MOVE.l pnpat(pc),a0  : MOVE.w curpatbyte(pc),d0
MOVE.b 0(a0,d0.w),d1 : AND.b #%11000000,d1 : MOVE.b d1,0(a0,d0.w)
LEA lastpat(pc),a0   : NOT.w (a0)          : BSR myvwait
BSR myvwait          : BRA jmpdown
nodel:
;CHECKEND
MOVE.w edmode(pc),d0 : BNE octav
MOVE.w lvrow0(pc),d0 : BNE notgr0
BSR getrow0 : TST d2 : BMI notgr0                : LEA synth0(pc),a2 : BRA writenote
notgr0: MOVE.w lvrow1(pc),d0 : BNE notgr1
BSR getrow1 : TST d2 : BMI notgr1 : ADDQ.w #5,d2 : LEA synth1(pc),a2 : BRA writenote
notgr1: MOVE.w lvrow2(pc),d0 : BNE notgr2
BSR getrow2 : TST d2 : BMI notgr2 : ADD.w #10,d2 : LEA synth2(pc),a2 : BRA writenote
notgr2: MOVE.w lvrow3(pc),d0 : BNE notgr3
BSR getrow3 : TST d2 : BMI noedit : ADD.w #15,d2 : LEA synth3(pc),a2 : BRA writenote
notgr3:
BRA noedit
octav: MOVE.w lvrow0(pc),d0 : BNE notor0
BSR getrow0 : TST d2 : BMI notor0                : LEA synth0(pc),a2 : BRA writenote
notor0: MOVE.w lvrow1(pc),d0 : BNE notor1
BSR getrow1 : TST d2 : BMI notor1 : ADD.w #12,d2 : LEA synth1(pc),a2 : BRA writenote
notor1: MOVE.w lvrow2(pc),d0 : BNE notor2
BSR getrow2 : TST d2 : BMI notor2 : ADD.w #24,d2 : LEA synth2(pc),a2 : BRA writenote
notor2: MOVE.w lvrow3(pc),d0 : BNE notor3
BSR getrow3 : TST d2 : BMI noedit : ADD.w #36,d2 : LEA synth3(pc),a2 : BRA writenote
notor3:
BRA noedit
.writenote:
LEA keytrans(pc),a0  : ADD.w (a0),d2 : LEA notedata(pc),a1
MOVE.b 0(a1,d2.w),d2 ; note in d2
;PLAY
MOVE.w curins(pc),d1  : ROL.w #8,d1 : MOVE.b d2,d0 : AND.w #255,d0
OR.w d1,d0
MOVE.b #0,$95(a2)     ; CLR 'NewHold'
MOVE.w d0,2(a2)       ; SET 'Instrument & Note'
MOVE.w #0,$7a(a2)     ; IT'S NOT A TRACE NOTE
MOVE.w prtrkon(pc),d3 : BEQ nowrite
MOVE.w ed(pc),d3      : BEQ nowrite
;WRITE
MOVE.l pnpat(pc),a0  : MOVE.w curpatbyte(pc),d0
MOVE.b 0(a0,d0.w),d1 : AND.b #%11000000,d1 : OR.b d2,d1 : MOVE.b d1,0(a0,d0.w)
LEA lastpat(pc),a0   : NOT.w (a0)          ; pattern has changed
LEA change(pc),a0    : MOVE.w #1,(a0)      ; pattern has changed
MOVE.w playstate(pc),d0 : BNE nowrite      ; NoWrite => NoDown !
BRA jmpdown2
nowrite:
BRA noedit
;BRA MAINLOP
getrow0:
MOVE.w #$31,d0 : MOVEQ.l  #0,d2 : GetReg d1,RawStatus($31) : BNE donerow0
MOVE.w #$32,d0 : MOVEQ.l  #1,d2 : GetReg d1,RawStatus($32) : BNE donerow0
MOVE.w #$33,d0 : MOVEQ.l  #2,d2 : GetReg d1,RawStatus($33) : BNE donerow0
MOVE.w #$34,d0 : MOVEQ.l  #3,d2 : GetReg d1,RawStatus($34) : BNE donerow0
MOVE.w #$35,d0 : MOVEQ.l  #4,d2 : GetReg d1,RawStatus($35) : BNE donerow0
MOVE.w #$36,d0 : MOVEQ.l  #5,d2 : GetReg d1,RawStatus($36) : BNE donerow0
MOVE.w #$37,d0 : MOVEQ.l  #6,d2 : GetReg d1,RawStatus($37) : BNE donerow0
MOVE.w #$38,d0 : MOVEQ.l  #7,d2 : GetReg d1,RawStatus($38) : BNE donerow0
MOVE.w #$39,d0 : MOVE.w   #8,d2 : GetReg d1,RawStatus($39) : BNE donerow0
MOVE.w #$3a,d0 : MOVE.w   #9,d2 : GetReg d1,RawStatus($3a) : BNE donerow0
MOVE.w #$67,d0 : MOVE.w  #10,d2 : GetReg d1,RawStatus($67) : BNE donerow0
MOVE.w #$65,d0 : MOVE.w  #11,d2 : GetReg d1,RawStatus($65) : BNE donerow0
MOVE.w   #0,d0 : MOVEQ.l #-1,d2
donerow0:     LEA lvrow0(pc),a0 : MOVE.w d0,(a0)
RTS
getrow1:
MOVE.w #$20,d0 : MOVEQ.l  #0,d2 : GetReg d1,RawStatus($20) : BNE donerow1
MOVE.w #$21,d0 : MOVEQ.l  #1,d2 : GetReg d1,RawStatus($21) : BNE donerow1
MOVE.w #$22,d0 : MOVEQ.l  #2,d2 : GetReg d1,RawStatus($22) : BNE donerow1
MOVE.w #$23,d0 : MOVEQ.l  #3,d2 : GetReg d1,RawStatus($23) : BNE donerow1
MOVE.w #$24,d0 : MOVEQ.l  #4,d2 : GetReg d1,RawStatus($24) : BNE donerow1
MOVE.w #$25,d0 : MOVEQ.l  #5,d2 : GetReg d1,RawStatus($25) : BNE donerow1
MOVE.w #$26,d0 : MOVEQ.l  #6,d2 : GetReg d1,RawStatus($26) : BNE donerow1
MOVE.w #$27,d0 : MOVEQ.l  #7,d2 : GetReg d1,RawStatus($27) : BNE donerow1
MOVE.w #$28,d0 : MOVE.w   #8,d2 : GetReg d1,RawStatus($28) : BNE donerow1
MOVE.w #$29,d0 : MOVE.w   #9,d2 : GetReg d1,RawStatus($29) : BNE donerow1
MOVE.w #$2a,d0 : MOVE.w  #10,d2 : GetReg d1,RawStatus($2a) : BNE donerow1
MOVE.w #$2b,d0 : MOVE.w  #11,d2 : GetReg d1,RawStatus($2b) : BNE donerow1
MOVE.w   #0,d0 : MOVEQ.l #-1,d2
donerow1:     LEA lvrow1(pc),a0 : MOVE.w d0,(a0)
RTS
getrow2:
MOVE.w #$10,d0 : MOVEQ.l  #0,d2 : GetReg d1,RawStatus($10) : BNE donerow2
MOVE.w #$11,d0 : MOVEQ.l  #1,d2 : GetReg d1,RawStatus($11) : BNE donerow2
MOVE.w #$12,d0 : MOVEQ.l  #2,d2 : GetReg d1,RawStatus($12) : BNE donerow2
MOVE.w #$13,d0 : MOVEQ.l  #3,d2 : GetReg d1,RawStatus($13) : BNE donerow2
MOVE.w #$14,d0 : MOVEQ.l  #4,d2 : GetReg d1,RawStatus($14) : BNE donerow2
MOVE.w #$15,d0 : MOVEQ.l  #5,d2 : GetReg d1,RawStatus($15) : BNE donerow2
MOVE.w #$16,d0 : MOVEQ.l  #6,d2 : GetReg d1,RawStatus($16) : BNE donerow2
MOVE.w #$17,d0 : MOVEQ.l  #7,d2 : GetReg d1,RawStatus($17) : BNE donerow2
MOVE.w #$18,d0 : MOVE.w   #8,d2 : GetReg d1,RawStatus($18) : BNE donerow2
MOVE.w #$19,d0 : MOVE.w   #9,d2 : GetReg d1,RawStatus($19) : BNE donerow2
MOVE.w #$1a,d0 : MOVE.w  #10,d2 : GetReg d1,RawStatus($1a) : BNE donerow2
MOVE.w #$1b,d0 : MOVE.w  #11,d2 : GetReg d1,RawStatus($1b) : BNE donerow2
MOVE.w   #0,d0 : MOVEQ.l #-1,d2
donerow2:     LEA lvrow2(pc),a0 : MOVE.w d0,(a0)
RTS
getrow3:
MOVE.w #$1,d0 : MOVEQ.l  #0,d2 : GetReg d1,RawStatus($1)  : BNE donerow3
MOVE.w #$2,d0 : MOVEQ.l  #1,d2 : GetReg d1,RawStatus($2)  : BNE donerow3
MOVE.w #$3,d0 : MOVEQ.l  #2,d2 : GetReg d1,RawStatus($3)  : BNE donerow3
MOVE.w #$4,d0 : MOVEQ.l  #3,d2 : GetReg d1,RawStatus($4)  : BNE donerow3
MOVE.w #$5,d0 : MOVEQ.l  #4,d2 : GetReg d1,RawStatus($5)  : BNE donerow3
MOVE.w #$6,d0 : MOVEQ.l  #5,d2 : GetReg d1,RawStatus($6)  : BNE donerow3
MOVE.w #$7,d0 : MOVEQ.l  #6,d2 : GetReg d1,RawStatus($7)  : BNE donerow3
MOVE.w #$8,d0 : MOVEQ.l  #7,d2 : GetReg d1,RawStatus($8)  : BNE donerow3
MOVE.w #$9,d0 : MOVE.w   #8,d2 : GetReg d1,RawStatus($9)  : BNE donerow3
MOVE.w #$a,d0 : MOVE.w   #9,d2 : GetReg d1,RawStatus($a)  : BNE donerow3
MOVE.w #$b,d0 : MOVE.w  #10,d2 : GetReg d1,RawStatus($b)  : BNE donerow3
MOVE.w #$c,d0 : MOVE.w  #11,d2 : GetReg d1,RawStatus($c)  : BNE donerow3
MOVE.w  #0,d0 : MOVEQ.l #-1,d2
donerow3:    LEA lvrow3(pc),a0 : MOVE.w d0,(a0)
RTS
noedit:
;****  END EDIT  ****
                GetReg d0,RawStatus($45) : BEQ noESC
                MOVE.w prtrkon(pc),d0    : BEQ switchon
                BSR startsynthed         : BRA waithelp
switchon:       BSR startpated
waithelp:       GetReg d0,RawStatus($45) : BNE waithelp : BRA MAINLOP
noESC:          GetReg d0,RawStatus($4e) : BEQ noleft
                LEA curfig(pc),a0        : MOVE.w (a0),d0
                ADDQ.w #1,d0             : AND.w #3,d0
                BNE nozerof              : LEA curchan(pc),a1
                MOVE.w (a1),d1           : ADDQ.w #1,d1
                AND.w #3,d1              : MOVE.w d1,(a1)
nozerof:
                MOVE.w d0,(a0)           : BSR patcursmark
                BSR waitmouzv            : BRA MAINLOP
noleft:         GetReg d0,RawStatus($4f) : BEQ noright
                LEA curfig(pc),a0        : MOVE.w (a0),d0
                SUBQ.w #1,d0             : AND.w #3,d0
                CMP.w #3,d0              : BNE notthree
                LEA curchan(pc),a1       : MOVE.w (a1),d1
                SUBQ.w #1,d1             : AND.w #3,d1
                MOVE.w d1,(a1)
notthree:
                MOVE.w d0,(a0)           : BSR patcursmark
                BSR waitmouzv            : BRA MAINLOP
noright:        MOVE.w playstate(pc),d0  : BNE smart3
                GetReg d0,RawStatus($4c) : BEQ nodown
                BSR down
                BSR waitmouzv            : BRA MAINLOP
nodown:         GetReg d0,RawStatus($4d) : BEQ noup
                BSR up
                BSR waitmouzv            : BRA MAINLOP
.linechng:      LEA lastline(pc),a0      : NOT.w (a0) : BRA MAINLOP
patchng:        LEA lastpat(pc),a0       : NOT.w (a0) : BRA MAINLOP
jmpdown:        BSR up                   : BSR waitmouzv : BSR myvwait
                BSR myvwait              : BSR myvwait   : BRA MAINLOP
jmpdown2:       BSR up                   : BRA MAINLOP
.preplay:       LEA curpos(pc),a0        : MOVE.w (a0),d0 : AND.w #127,d0
                MOVE.l pnposbase(pc),a0  : MOVE.b 0(a0,d0.w),d0 : EXT.w d0
                LEA curpat(pc),a0        : MOVE.w d0,(a0)
                RTS
smart3:
noup:           GetReg d0,RawStatus($42) : BEQ notab
                LEA curchan(pc),a0       : MOVE.w (a0),d0
                ADDQ.w #1,d0             : AND.w #3,d0
                MOVE.w d0,(a0)           : LEA curfig(pc),a0
                MOVE.w #0,(a0)           : BSR patcursmark
                BSR waitmouzv            : BRA MAINLOP
notab:          GetReg d0,RawStatus($40) : BEQ nospace
                LEA playstate(pc),a0     : MOVE.w #0,(a0)
                LEA ed(pc),a0  : MOVE.w (a0),d0 : BEQ zeroed
                MOVE.w #0,(a0)
                ;RGB 17,10,10,10 ;pointer sprite
                ;RGB 18,7,7,7
                ;RGB 19,5,5,5
                BRA waited
zeroed:         MOVE.w #1,(a0)
                ;RGB 17,0,5,10 ;pointer sprite
                ;RGB 18,0,3,7
                ;RGB 19,0,0,5
                LEA change(pc),a0        : MOVE.w #0,(a0)
waited:         GetReg d0,RawStatus($40) : BNE waited : BRA MAINLOP
nospace:
;numblock "[]/*"
                LEA curins(pc),a0 : LEA inshi(pc),a1 : MOVE.w (a1),d1
                GetReg d0,RawStatus($5a)    ; "["
                BEQ norow10 : OR.w #$1,d1 : MOVE.w d1,(a0) : BRA changeins
norow10:        GetReg d0,RawStatus($5b)    ; "]"
                BEQ norow11 : OR.w #$2,d1 : MOVE.w d1,(a0) : BRA changeins
norow11:        GetReg d0,RawStatus($5c)    ; "/"
                BEQ norow12 : OR.w #$3,d1 : MOVE.w d1,(a0) : BRA changeins
norow12:        GetReg d0,RawStatus($5d)    ; "*"
                BEQ norow13 : OR.w #$4,d1 : MOVE.w d1,(a0) : BRA changeins
norow13:        GetReg d0,RawStatus($3d)    ; "7"
                BEQ norow20 : OR.w #$5,d1 : MOVE.w d1,(a0) : BRA changeins
norow20:        GetReg d0,RawStatus($3e)    ; "8"
                BEQ norow21 : OR.w #$6,d1 : MOVE.w d1,(a0) : BRA changeins
norow21:        GetReg d0,RawStatus($3f)    ; "9"
                BEQ norow22 : OR.w #$7,d1 : MOVE.w d1,(a0) : BRA changeins
norow22:        GetReg d0,RawStatus($4a)    ; "-"
                BEQ norow23 : OR.w #$8,d1 : MOVE.w d1,(a0) : BRA changeins
norow23:        GetReg d0,RawStatus($2d)    ; "4"
                BEQ norow30 : OR.w #$9,d1 : MOVE.w d1,(a0) : BRA changeins
norow30:        GetReg d0,RawStatus($2e)    ; "5"
                BEQ norow31 : OR.w #$a,d1 : MOVE.w d1,(a0) : BRA changeins
norow31:        GetReg d0,RawStatus($2f)    ; "6"
                BEQ norow32 : OR.w #$b,d1 : MOVE.w d1,(a0) : BRA changeins
norow32:        GetReg d0,RawStatus($5e)    ; "+"
                BEQ norow33 : OR.w #$c,d1 : MOVE.w d1,(a0) : BRA changeins
norow33:        GetReg d0,RawStatus($1d)    ; "1"
                BEQ norow40 : OR.w #$d,d1 : MOVE.w d1,(a0) : BRA changeins
norow40:        GetReg d0,RawStatus($1e)    ; "2"
                BEQ norow41 : OR.w #$e,d1 : MOVE.w d1,(a0) : BRA changeins
norow41:        GetReg d0,RawStatus($1f)    ; "3"
                BEQ norow42 : OR.w #$f,d1 : MOVE.w d1,(a0) : BRA changeins
norow42:        GetReg d0,RawStatus($0f)    ; "0"
                BEQ norow43 : OR.w #$0,d1 : MOVE.w d1,(a0): BRA changeins
norow43:        GetReg d0,RawStatus($3c)    ; "."
                BEQ nohisub : SUB.w #16,d1  : AND.w #$30,d1 : MOVE.w d1,(a1)
                MOVE.w curins(pc),d0        : AND.w #15,d0  : OR.w d0,d1 : MOVE.w d1,(a0)
pointkeylop:    GetReg d0,RawStatus($3c) : BEQ changeins : BRA pointkeylop
nohisub:        GetReg d0,RawStatus($43)    ; "enter"
                BEQ nohiadd : ADD.w #16,d1  : AND.w #$30,d1 : MOVE.w d1,(a1)
                MOVE.w curins(pc),d0        : AND.w #15,d0  : OR.w d0,d1 : MOVE.w d1,(a0)
enterkeylop:    GetReg d0,RawStatus($43) : BEQ changeins : BRA enterkeylop
changeins:      MOVE.w curins(pc),d0     : ASL.w #6,d0   : EXT.l d0
                LEA pnins(pc),a0         : MOVE.l pninsbase(pc),d1 : ADD.l d1,d0 : MOVE.l d0,(a0)
                LEA lastsynins(pc),a0    : NOT.w (a0)
nohiadd:        ;** END OF NUMERIC KEYPAD **

                BRA MAINLOP
;------------------------------------------------------------------------------------------------
.VARZ:
firstrun:    Dc.w 0 ; ULTRAIMPORTANT
ed:          Dc.w 0 ; 0/1 Edit
change:      Dc.w 0 ; 0/1 for UNDO
edmode:      Dc.w 0 ; 0=Guitar, 1=Octav ... 2 B Continued
keytrans:    Dc.w 0 ; for "keyboard" ACCESS AS BYTE! (NOT WORD!)
tracing:     Dc.w 0 ; for TRACE
backtrack:   Dc.w 0 ; for TRACE
pause:       Dc.w 1 ; noplay
vbl_on:      Dc.w 0 ; 0/1
vchange:     Dc.w 0 ; 0/1
playstate:   Dc.w 0 ; 0/1 PATTERNPLAY
patrun:      Dc.w 0 ; 0/1 SONGPLAY/PATTERNPLAY
prscpon:     Dc.w 1 ; 0/1
prtrkon:     Dc.w 0 ; 0/1
mastspeed:   Dc.w 6
mastcount:   Dc.w 6
curfig:      Dc.w 0 ; note / ev / value
curchan:     Dc.w 0
curpat:      Dc.w 0
lastpat:     Dc.w 5
curline:     Dc.w 0
lastline:    Dc.w 13
curins:      Dc.w 1
inshi:       Dc.w 0
lastins:     Dc.w 4
lastsynins:  Dc.w 24
curarpbyte:  Dc.w 0
curwave:     Dc.w 0
lastwave:    Dc.w 3
modcnt:      Dc.w 0 ; test !!
curpos:      Dc.w 0 ; positioned
lastpos:     Dc.w 4
curpatbyte:  Dc.w 0
lvrow0:      Dc.w 0 ;'LeaveKey'
lvrow1:      Dc.w 0 ;'LeaveKey'
lvrow2:      Dc.w 0 ;'LeaveKey'
lvrow3:      Dc.w 0 ;'LeaveKey'
blockstart:  Dc.w 0 ; COPYBLOCK
blocklen:    Dc.w 0 ; COPYBLOCK

.POINTER:
pnscpbuf:    Dc.l 0 ; scpbufplane
pnbmm:       Dc.l 0
pnbkpub:     Dc.l 0
pnposbase:   Dc.l 0
pnpatbase:   Dc.l 0
pnpat:       Dc.l 0 ; (curpat asl$a) + pnpatbase
pninsbase:   Dc.l 0
pnins:       Dc.l 0
pnwavebase:  Dc.l 0
pnwave:      Dc.l 0
pncpbase:    Dc.l 0 ; for the copy buffer (wavez,pats,ins etc.)
pnbkchip:    Dc.l 0
pnscp:       Dc.l 0
pnvibtab:    Dc.l 0 ; pointer to vibrator conversion-table

._TheVBL:       SetInt 5
                ;-I-M-P-O-R-T-A-N-T-
                LEA vchange(pc),a0    : BCHG.w #0,(a0) ;VI2B1
                MOVE.w vbl_on(pc),d0  : BEQ novbl      ;VI2B2
                ;-I-M-P-O-R-T-A-N-T-
                ;---------------
                MOVE.w prscpon(pc),d0 : BEQ noprvu
                BSR updatescope       ; calced last!
                BSR polyvu
noprvu:         ;---------------
                ;---------------
  ;-------------------------------------------------------;
  ;   DO THE PLAYER HERE, AND THE SYNFX AT BOTTOM VBL !   ;
  ;-------------------------------------------------------;
                MOVE.w playstate(pc),d0
                BNE PLAYER
pl_rts:         ;-I-M-P-O-R-T-A-N-T-
  ;-------------------------------------------------------;
  ;        END OF PLAYER => SYN IZ AT VBL BOTTOM !        ;
  ;-------------------------------------------------------;
                ;positioned
                MOVE.w curpos(pc),d0  : LEA lastpos(pc),a0
                MOVE.w (a0),d1        : MOVE.w d0,(a0)
                CMP.w d0,d1           : BEQ noprpos
                MOVE.l pnposbase(pc),a0 : MOVE.b 0(a0,d0.w),d1
                MOVE.l pnbmm(pc),a0   : ADD.l #poslistxy,a0
                BSR dprint
noprpos:        ;---------------
                ;pattern/synthed
                ;---------------
                MOVE.w prtrkon(pc),d0 : BNE trkprt
                MOVE.w curpat(pc),d0  : MOVE.w lastpat(pc),d1
                CMP.w d0,d1           : BEQ nonewpatnum
                LEA lastpat(pc),a0    : MOVE.w d0,(a0)
                BSR prpatnum
nonewpatnum:    ;---------------
                BSR prcurinsnum
                MOVE.w curwave(pc),d0 : LEA lastwave(pc),a0
                MOVE.w (a0),d1        : MOVE.w d0,(a0)
                CMP.w d0,d1           : BEQ nonewav
                BSR dowaveeditor
nonewav:        ;---------------
                BSR printsyned
                ;---------------
                BRA nonewinstr
trkprt:         BSR prcurinsnum
                BSR dopat
nonewinstr:     ;---------------
                BSR SYNTHESIZER2
novbl:          ;-I-M-P-O-R-T-A-N-T-
                MOVE.w prscpon(pc),d0 : BEQ noprscp
                BSR doscp
noprscp:        ;---------------
                End SetInt
                BRA _backvbl
.SYNTHVARZ:
synth0:  Dc.b -1 ;-1=NOIZ       ;$00 ;0/1
         Dc.b 1 ;OLDINS       ;$01
         Dc.b 63 ;NEWSYNTH NUMBER (NEG=OFF) (MUST BE INITED IN EXTERNPLAYER)
         Dc.b 21 ;NEWNOTE     ;$03
         Dc.l 0 ;INST ADDRESS ;$04
         Dc.l 0 ;WAVE ADDRESS ;$08
         Dc.l 0 ;ADSR ADDRESS ;$0C
         Dc.l 0 ;LFO  ADDRESS ;$10
         Dc.l 0 ;F0   ADDRESS ;$14
         Dc.l 0 ;F1   ADDRESS ;$18
         Dc.l 0 ;F2   ADDRESS ;$1C
         Dc.l 0 ;F3   ADDRESS ;$20
         Dc.l 0 ;F4   ADDRESS ;$24
         Dc.l 0 ;F5   ADDRESS ;$28
         Dc.l 0 ;F6   ADDRESS ;$2C
         Dc.l 0 ;F7   ADDRESS ;$30
         Dc.l 0 ;F8   ADDRESS ;$34
         Dc.l 0 ;F9   ADDRESS ;$38
         Dc.l 0 ;FA   ADDRESS ;$3C
         Dc.l 0 ;FB   ADDRESS ;$40
         Dc.l 0 ;FC   ADDRESS ;$44
         Dc.l 0 ;FD   ADDRESS ;$48
         Dc.l 0 ;FE   ADDRESS ;$4C
         Dc.l 0 ;FF   ADDRESS ;$50
         Dc.l 0 ;ADSR LOOPADR ;$54
         Dc.w 0 ;ADSR LENGHT  ;$58
         Dc.w 0 ;ADSR LOOPLEN ;$5A
         Dc.l 0 ;LFO  LOOPADR ;$5C
         Dc.w 0 ;LFO  LENGHT  ;$60
         Dc.w 0 ;LFO  LOOPLEN ;$62
         Dc.w 0 ;CUR  VOLUME  ;$64
         Dc.w 0 ;HARDCUT      ;$66
         Dc.l 0 ;CUR ADSRADR  ;$68
         Dc.w 0 ;CUR ADSRLEN  ;$6C
         Dc.w 63 ;MUTE        ;$6E
         Dc.l 0 ;CUR LFOADR   ;$70
         Dc.w 0 ;CUR LFOLEN   ;$74
         Dc.w 0 ;CUR PERIOD   ;$76
         Dc.w 0 ;CUR PITCH    ;$78
         Dc.w 0 ;TRACING      ;$7A
         Dc.b 0 ;GroundNote   ;$7C
         Dc.b 0 ;HoldTime     ;$7D
         Dc.b 0 ;CURARP       ;$7E ;ARP'S WERDEN IN EXTERNER PLAY RUECKWARTS GESPIELT! (DAFEUR ROUTINE FLIPARPS+NOISE+RESTART!)
         Dc.b 0 ;ARPCOUNT     ;$7F ;FOR SLOWMOTION
         Dc.b 0 ;ARPNOTE      ;$80
         Dc.b 0 ;LFOSloCount  ;$81
         Dc.w 0 ;LFOLastVib   ;$82
         Dc.l 0 ;LastNoiz     ;$84
         Dc.b 0 ;Upsamp       ;$88
         Dc.b 0 ;Offset       ;$89
         Dc.w 0 ;MiniCount    ;$8a
         Dc.l 0 ;MiniTabWave  ;$8c
         Dc.l 0 ;MiniLoopAddr ;$90
         Dc.b 0 ;VisualVibrato;$94
         Dc.b 0 ;NewHold      ;$95
         Dc.w 0 ;PitchMod     ;$96
         Dc.w 0 ;free
#synthlenght=$9a
synth1:  Dc.b -1 ;-1=NOIZ
         Dc.b 1 ;OLDINS
         Dc.b 63 ;NEWSYNTH NUMBER (NEG=OFF) (MUST BE INITED IN EXTERNPLAYER)
         Dc.b 21 ;NEWNOTE
         Dc.l 0 ;INST ADDRESS
         Dc.l 0 ;WAVE ADDRESS
         Dc.l 0 ;ADSR ADDRESS
         Dc.l 0 ;LFO  ADDRESS
         Dc.l 0 ;F0   ADDRESS
         Dc.l 0 ;F1   ADDRESS
         Dc.l 0 ;F2   ADDRESS
         Dc.l 0 ;F3   ADDRESS
         Dc.l 0 ;F4   ADDRESS
         Dc.l 0 ;F5   ADDRESS
         Dc.l 0 ;F6   ADDRESS
         Dc.l 0 ;F7   ADDRESS
         Dc.l 0 ;F8   ADDRESS
         Dc.l 0 ;F9   ADDRESS
         Dc.l 0 ;FA   ADDRESS
         Dc.l 0 ;FB   ADDRESS
         Dc.l 0 ;FC   ADDRESS
         Dc.l 0 ;FD   ADDRESS
         Dc.l 0 ;FE   ADDRESS
         Dc.l 0 ;FF   ADDRESS
         Dc.l 0 ;ADSR LOOPADR ;$54
         Dc.w 0 ;ADSR LENGHT  ;$58
         Dc.w 0 ;ADSR LOOPLEN ;$5A
         Dc.l 0 ;LFO  LOOPADR ;$5C
         Dc.w 0 ;LFO  LENGHT  ;$60
         Dc.w 0 ;LFO  LOOPLEN ;$62
         Dc.w 0 ;CUR  VOLUME  ;$64
         Dc.w 0 ;HARDCUT      ;$66
         Dc.l 0 ;CUR ADSRADR  ;$68
         Dc.w 0 ;CUR ADSRLEN  ;$6C
         Dc.w 63 ;MUTE         ;$6E
         Dc.l 0 ;CUR LFOADR   ;$70
         Dc.w 0 ;CUR LFOLEN   ;$74
         Dc.w 0 ;CUR PERIOD   ;$76
         Dc.w 0 ;CUR PITCH    ;$78
         Dc.w 0 ;TRACING      ;$7A
         Dc.b 0 ;GroundNote   ;$7C
         Dc.b 0 ;HoldTime     ;$7D
         Dc.b 0 ;CURARP       ;$7E ;ARP'S WERDEN IN EXTERNER PLAY RUECKWARTS GESPIELT! (DAFEUR ROUTINE FLIPARPS+NOISE+RESTART!)
         Dc.b 0 ;ARPCOUNT     ;$7F
         Dc.b 0 ;ARPNOTE      ;$80
         Dc.b 0 ;LFOSloCount  ;$81
         Dc.w 0 ;LFOLastVib   ;$82
         Dc.l 0 ;LastNoiz     ;$84
         Dc.b 0 ;Upsamp       ;$88
         Dc.b 0 ;Offset       ;$89
         Dc.w 0 ;MiniCount    ;$8a
         Dc.l 0 ;MiniTabWave  ;$8c
         Dc.l 0 ;MiniLoopAddr ;$90
         Dc.b 0 ;VisualVibrato;$94
         Dc.b 0 ;NewHold      ;$95
         Dc.w 0 ;PitchMod     ;$96
         Dc.w 0 ;
synth2:  Dc.b -1 ;-1=NOIZ
         Dc.b 1 ;OLDINS
         Dc.b 63 ;NEWSYNTH NUMBER (NEG=OFF) (MUST BE INITED IN EXTERNPLAYER)
         Dc.b 21 ;NEWNOTE
         Dc.l 0 ;INST ADDRESS
         Dc.l 0 ;WAVE ADDRESS
         Dc.l 0 ;ADSR ADDRESS
         Dc.l 0 ;LFO  ADDRESS
         Dc.l 0 ;F0   ADDRESS
         Dc.l 0 ;F1   ADDRESS
         Dc.l 0 ;F2   ADDRESS
         Dc.l 0 ;F3   ADDRESS
         Dc.l 0 ;F4   ADDRESS
         Dc.l 0 ;F5   ADDRESS
         Dc.l 0 ;F6   ADDRESS
         Dc.l 0 ;F7   ADDRESS
         Dc.l 0 ;F8   ADDRESS
         Dc.l 0 ;F9   ADDRESS
         Dc.l 0 ;FA   ADDRESS
         Dc.l 0 ;FB   ADDRESS
         Dc.l 0 ;FC   ADDRESS
         Dc.l 0 ;FD   ADDRESS
         Dc.l 0 ;FE   ADDRESS
         Dc.l 0 ;FF   ADDRESS
         Dc.l 0 ;ADSR LOOPADR ;$54
         Dc.w 0 ;ADSR LENGHT  ;$58
         Dc.w 0 ;ADSR LOOPLEN ;$5A
         Dc.l 0 ;LFO  LOOPADR ;$5C
         Dc.w 0 ;LFO  LENGHT  ;$60
         Dc.w 0 ;LFO  LOOPLEN ;$62
         Dc.w 0 ;CUR  VOLUME  ;$64
         Dc.w 0 ;HARDCUT      ;$66
         Dc.l 0 ;CUR ADSRADR  ;$68
         Dc.w 0 ;CUR ADSRLEN  ;$6C
         Dc.w 63 ;MUTE         ;$6E
         Dc.l 0 ;CUR LFOADR   ;$70
         Dc.w 0 ;CUR LFOLEN   ;$74
         Dc.w 0 ;CUR PERIOD   ;$76
         Dc.w 0 ;CUR PITCH    ;$78
         Dc.w 0 ;TRACING      ;$7A
         Dc.b 0 ;GroundNote   ;$7C
         Dc.b 0 ;HoldTime     ;$7D
         Dc.b 0 ;CURARP       ;$7E ;ARP'S WERDEN IN EXTERNER PLAY RUECKWARTS GESPIELT! (DAFEUR ROUTINE FLIPARPS+NOISE+RESTART!)
         Dc.b 0 ;ARPCOUNT     ;$7F
         Dc.b 0 ;ARPNOTE      ;$80
         Dc.b 0 ;LFOSloCount  ;$81
         Dc.w 0 ;LFOLastVib   ;$82
         Dc.l 0 ;LastNoiz     ;$84
         Dc.b 0 ;Upsamp       ;$88
         Dc.b 0 ;Offset       ;$89
         Dc.w 0 ;MiniCount    ;$8a
         Dc.l 0 ;MiniTabWave  ;$8c
         Dc.l 0 ;MiniLoopAddr ;$90
         Dc.b 0 ;VisualVibrato;$94
         Dc.b 0 ;NewHold      ;$95
         Dc.w 0 ;PitchMod     ;$96
         Dc.w 0 ;
synth3:  Dc.b -1 ;-1=NOIZ
         Dc.b 1 ;OLDINS
         Dc.b 63 ;NEWSYNTH NUMBER (NEG=OFF) (MUST BE INITED IN EXTERNPLAYER)
         Dc.b 63 ;NEWNOTE
         Dc.l 0 ;INST ADDRESS
         Dc.l 0 ;WAVE ADDRESS
         Dc.l 0 ;ADSR ADDRESS
         Dc.l 0 ;LFO  ADDRESS
         Dc.l 0 ;F0   ADDRESS
         Dc.l 0 ;F1   ADDRESS
         Dc.l 0 ;F2   ADDRESS
         Dc.l 0 ;F3   ADDRESS
         Dc.l 0 ;F4   ADDRESS
         Dc.l 0 ;F5   ADDRESS
         Dc.l 0 ;F6   ADDRESS
         Dc.l 0 ;F7   ADDRESS
         Dc.l 0 ;F8   ADDRESS
         Dc.l 0 ;F9   ADDRESS
         Dc.l 0 ;FA   ADDRESS
         Dc.l 0 ;FB   ADDRESS
         Dc.l 0 ;FC   ADDRESS
         Dc.l 0 ;FD   ADDRESS
         Dc.l 0 ;FE   ADDRESS
         Dc.l 0 ;FF   ADDRESS
         Dc.l 0 ;ADSR LOOPADR ;$54
         Dc.w 0 ;ADSR LENGHT  ;$58
         Dc.w 0 ;ADSR LOOPLEN ;$5A
         Dc.l 0 ;LFO  LOOPADR ;$5C
         Dc.w 0 ;LFO  LENGHT  ;$60
         Dc.w 0 ;LFO  LOOPLEN ;$62
         Dc.w 0 ;CUR  VOLUME  ;$64
         Dc.w 0 ;HARDCUT      ;$66
         Dc.l 0 ;CUR ADSRADR  ;$68
         Dc.w 0 ;CUR ADSRLEN  ;$6C
         Dc.w 63 ;MUTE        ;$6E
         Dc.l 0 ;CUR LFOADR   ;$70
         Dc.w 0 ;CUR LFOLEN   ;$74
         Dc.w 0 ;CUR PERIOD   ;$76
         Dc.w 0 ;CUR PITCH    ;$78
         Dc.w 0 ;TRACING      ;$7A
         Dc.b 0 ;GroundNote   ;$7C
         Dc.b 0 ;HoldTime     ;$7D
         Dc.b 0 ;CURARP       ;$7E ;ARP'S WERDEN IN EXTERNER PLAY RUECKWARTS GESPIELT! (DAFEUR ROUTINE FLIPARPS+NOISE+RESTART!)
         Dc.b 0 ;ARPCOUNT     ;$7F
         Dc.b 0 ;ARPNOTE      ;$80
         Dc.b 0 ;LFOSloCount  ;$81
         Dc.w 0 ;LFOLastVib   ;$82
         Dc.l 0 ;LastNoiz     ;$84
         Dc.b 0 ;Upsamp       ;$88
         Dc.b 0 ;Offset       ;$89
         Dc.w 0 ;MiniCount    ;$8a
         Dc.l 0 ;MiniTabWave  ;$8c
         Dc.l 0 ;MiniLoopAddr ;$90
         Dc.b 0 ;VisualVibrato;$94
         Dc.b 0 ;NewHold      ;$95
         Dc.w 0 ;PitchMod     ;$96
         Dc.w 0 ;
MOUZ:  ;**** MouzRequest ****
GetReg d0,MouseX    : GetReg d1,MouseY
;**** quit ****
CMP.l #14,d1        : BLT QUITEDITOR
;**** mute chn ****
CMP.w #81,d1        : BGT nochmut
CMP.w #14,d1        : BLT nochmut
CMP.w #13,d0        : BGT nochmut
MOVE.l pnbmm(pc),a0 : ADD.l #640,a0
ADD.l #10240,a0     : MOVE.b #13,d2 : MOVEQ.l #0,d3
CMP.w #31,d1        : BLT mutgfxjmp
ADD.l #680,a0       : MOVEQ.l #1,d3
CMP.w #48,d1        : BLT mutgfxjmp
ADD.l #680,a0       : MOVEQ.l #2,d3
CMP.w #65,d1        : BLT mutgfxjmp
ADD.l #680,a0       : MOVEQ.l #3,d3
mutgfxjmp:
;SYLEN!
LEA synth0(pc),a1   : MULU.w #$9A,d3   ;**** DANGER !! HARDSYNLENGHT !!  ****
ADD.l d3,a1         : ADD.l #$6e,a1
EOR.w #63,(a1)      :
mutgfxlop:
BSR myvwait
EOR.w #%0011111111111000,(a0) : ADD.l #40,a0
SUBQ.b #1,d2      : BNE mutgfxlop
BRA leavemouz
nochmut:
;*** Switch Syneditor State ***
CMP.w #95,d1      : BGT nosyned
CMP.w #82,d1      : BLT nosyned
CMP.w #156,d0     : BLT trackon
BSR startsynthed  : BRA leavemouz
trackon:            BSR startpated
nosyned:
;*** PositionEditor
CMP.w #50,d0      : BLT noposed ;X1
CMP.w #114,d1     : BGT noposed ;Y2
CMP.w #67,d0      : BGT noposed ;X2
CMP.w #99,d1      : BLT noposed ;Y1
CMP.w #106,d1     : BGT posbytz
LEA curpos(pc),a0 : MOVE.w #$7f,d2
CMP.w #58,d0      : BLT decpos
BSR incvalw       : BRA noposed
decpos:             BSR decvalw
                    BRA noposed
posbytz:            MOVE.w curpos(pc),d2
MOVE.l pnposbase(pc),a0 : EXT.l d2 : ADD.l d2,a0 : MOVE.b #63,d2
LEA lastpos(pc),a1
CMP.w #59,d0      : BLT decposbyt
BSR incvalb       : BRA noposed
decposbyt:          BSR decvalb
noposed:
;*** NOW SYNTH OR PAT ? ***
MOVE.w prtrkon(pc),d2  : BNE dotrackinstead
CMP.w #119,d1          : BLT notrackinstead
CMP.w #127,d0          : BGT nowaved
CMP.w #247,d1          : BLT nowavedgads
LEA curwave(pc),a0     : LEA lastwave(pc),a1 : MOVE.w #255,d2
CMP.w #119,d0          : BLT notwavinc
BSR incvalw            : BRA notrackinstead
notwavinc:
CMP.w #110,d0          : BLT notwavdec
BSR decvalw            : BRA notrackinstead
notwavdec:
CMP.w #82,d0           : BGT notrackinstead ; <-"Here" is the Ins#Drawn
CMP.w #41,d0           : BLT notpastewav
MOVE.l pnwave(pc),a1   : MOVE.l pncpbase(pc),a0
ADD.l #cpbasewav,a0    : MOVE.l #cpmemwav,d2
BSR mycpmem            : LEA lastwave(pc),a0
NOT.w (a0)             : BRA notrackinstead
notpastewav:           ; copy wave!
MOVE.l pnwave(pc),a0   : MOVE.l pncpbase(pc),a1
ADD.l #cpbasewav,a1    : MOVE.l #cpmemwav,d2
BSR mycpmem            : LEA lastwave(pc),a0
NOT.w (a0)             : BRA notrackinstead
nowavedgads:           ; draw wave !
GetReg d0,MouseX       : GetReg d1,MouseY
MOVE.w d0,d2           : MOVE.w d1,d3
AND.w #$7f,d2          : NEG.w d3
SUB.w #74,d3           : ADD.w d3,d3
MOVE.l pnwave(pc),a0   : MOVE.b d3,0(a0,d2.w)
LEA    lastwave(pc),a0 : NOT.w (a0)
BTST #6,$bfe001        : BEQ nowavedgads
BRA notrackinstead
nowaved:               ; instrumentedgads
CMP.w #227,d1          : BLT nonoizchng
CMP.w #234,d1          : BGT nonoizchng
CMP.w #138,d0          : BLT nonoizchng
CMP.w #176,d0          : BGT nonoizchng
MOVE.l pnins(pc),a0    : ADD.l #noizofs,a0  : MOVE.w curarpbyte(pc),d2 : AND.l #15,d2
MOVE.w (a0),d3         : BCHG.w d2,d3       : MOVE.w d3,(a0)
AND.l #$ffff,d3        : BTST.l d2,d3       : BEQ clearnoiz
BSR setnoiz            : BRA noizdone
clearnoiz:               BSR clrnoiz
noizdone: BSR waitmouzv : BRA leavemouz
nonoizchng:
CMP.w #123,d1          : BLT nosynrows
CMP.w #250,d1          : BGT nosynrows
;checkstandardrow
CMP.w #219,d0          : BGT nosynr0
CMP.w #202,d0          : BLT nosynr0
CMP.w #218,d1          : BGT arpspeedetc
SUB.w #202,d0 : MOVE.w #255,d2 : MOVE.l pnins(pc),a0 : LEA lastsynins(pc),a1
BSR multiset
BRA leavemouz
arpspeedetc:CMP.w #218+17,d1 : BLT arpeggiorequest
SUB.w #202,d0 : MOVE.w #255,d2 : MOVE.l pnins(pc),a0 : LEA lastsynins(pc),a1 : SUB.l #2,a0
BSR multiset
BRA leavemouz
arpeggiorequest:
CMP.w #226,d1 : BGT arp ;now follows "arpbyte"
LEA curarpbyte(pc),a0 : ADD.l #1,a0 : LEA lastsynins(pc),a1 : MOVE.b #15,d2
CMP.w #210,d0 : BGT incarpbyte : BSR decvalb : BRA leavemouz
incarpbyte: BSR incvalb : BRA leavemouz
arp: ;the arp itself
CMP.w #236,d1 : BGT restsynr0
MOVE.l pnins(pc),a0 : MOVE.w curarpbyte(pc),d2 : EXT.l d2 : ADD.l d2,a0
ADD.l #arpofs,a0 : LEA lastsynins(pc),a1 : MOVE.b #255,d2
CMP.w #210,d0 : BGT incarp : BSR decvalb : BRA leavemouz
incarp: BSR incvalb : BRA leavemouz
BRA leavemouz
restsynr0:
nosynr0:               ; COPY/PASTE INSTRUMENT
CMP.w #224,d0          : BLT nocopaste
CMP.w #237,d0          : BGT nocopaste
CMP.w #123,d1          : BLT nocopaste
CMP.w #185,d1          : BGT noinscopy
MOVE.l pnins(pc),a0    : MOVE.l pncpbase(pc),a1     : ADD.l #cpbaseins,a1
dobothins:
MOVE.l #sins,d2        : BSR mycpmem
LEA lastsynins(pc),a0  : NOT.w (a0)
BRA leavemouz
noinscopy:             ; PASTE INSTRUMENT
CMP.w #188,d1          : BLT nocopaste
CMP.w #250,d1          : BGT nocopaste
BSR inst2undo
MOVE.l pnins(pc),a1    : MOVE.l pncpbase(pc),a0     : ADD.l #cpbaseins,a0
BRA dobothins
nocopaste:             ; NO COPY/PASTE INSTRUMENT
CMP.w #219+56,d0       : BGT nosynr1
CMP.w #202+56,d0       : BLT nosynr1
SUB.w #202+56,d0       : MOVE.w #255,d2 : MOVE.l pnins(pc),a0 : ADD.l #$1e,a0 : LEA lastsynins(pc),a1
BSR multiset
BRA leavemouz
nosynr1:
CMP.w #219+96,d0    : BGT nosynr2
CMP.w #202+96,d0    : BLT nosynr2
SUB.w #202+96,d0    : MOVE.w #255,d2 : MOVE.l pnins(pc),a0 : ADD.l #$2e,a0 : LEA lastsynins(pc),a1
BSR multiset
BRA leavemouz
nosynr2:
nosynrows:
dotrackinstead:
 ;no gads attached up to know.
notrackinstead:
leavemouz: BTST #6,$bfe001 : BSR VUMET : BEQ leavemouz
BRA MOUZDUN
;----------
;----------
down:
LEA curline(pc),a0       : MOVE.w (a0),d0 : SUBQ.w #1,d0 : AND.w #$7f,d0
MOVE.w d0,(a0)           : NOT d0 : LEA lastline(pc),a0  : MOVE.w d0,(a0)
RTS
up:
LEA curline(pc),a0       : MOVE.w (a0),d0 : ADDQ.w #1,d0 : AND.w #$7f,d0
MOVE.w d0,(a0)           : NOT d0 : LEA lastline(pc),a0  : MOVE.w d0,(a0)
RTS
.LeaveD2Key: ;Key.b in D2     **** for Opti - NOT used NOW!! ****
PutReg d2,byte.b
LK: GetReg d0,RawStatus(byte) : BNE LK : BRA MAINLOP
.mycpmem: MOVE.b (a0)+,(a1)+ : SUBQ.l #1,d2 : BNE mycpmem : RTS
.myswapmem: MOVE.b (a0),d0 : MOVE.b (a1),(a0)+ : MOVE.b d0,(a1)+ : SUBQ.l #1,d2 : BNE myswapmem : RTS
multiset: ;<ADDRESS IN A0> / <FILTER IN D2> / <CHANGE ADRESS IN A1>
SUB.w #123,d1 : ASR.w #3,d1 : EXT.l d1 : ADD.l d1,a0
CMP.w #8,d0   : BGT incvalb : BRA decvalb
incvalb: ;<ADDRESS IN A0> / <FILTER IN D2> / <CHANGE ADRESS IN A1>
BSR VUMET
MOVE.b (a0),d3 : BTST #10,$dff016 : BNE noexincb
ADD.b #16,d3 : AND.b d2,d3 : MOVE.b d3,(a0) : BRA exincbt
noexincb: ADDQ.b #1,d3 : AND.b d2,d3 : MOVE.b d3,(a0)
exincbt: NOT.w (a1)
BSR waitmouzv  : BTST #6,$bfe001 : BEQ incvalb
RTS
decvalb: ;<ADDRESS IN A0> / <FILTER IN D2> / <CHANGE ADRESS IN A1>
BSR VUMET
MOVE.b (a0),d3 : BTST #10,$dff016 : BNE noexdecb
SUB.b #16,d3 : AND.b d2,d3 : MOVE.b d3,(a0) : BRA exdecbt
noexdecb: SUBQ.b #1,d3 : AND.b d2,d3 : MOVE.b d3,(a0)
exdecbt: NOT.w (a1)
BSR waitmouzv : BTST #6,$bfe001 : BEQ decvalb
RTS
incvalw: ;<ADDRESS IN A0> / <FILTER IN D2>
BSR VUMET
MOVE.w (a0),d3 : BTST #10,$dff016 : BNE noexincw
ADD.w #16,d3 : AND.w d2,d3 : MOVE.w d3,(a0) : BRA exincwt
noexincw: ADDQ.w #1,d3 : AND.w d2,d3 : MOVE.w d3,(a0)
exincwt : BSR waitmouzv  : BTST #6,$bfe001 : BEQ incvalw
RTS
decvalw: ;<ADDRESS IN A0> / <FILTER IN D2>
BSR VUMET
MOVE.w (a0),d3 : BTST #10,$dff016 : BNE noexdecw
SUB.w #16,d3 : AND.w d2,d3 : MOVE.w d3,(a0) : BRA exdecwt
noexdecw: SUBQ.w #1,d3 : AND.w d2,d3 : MOVE.w d3,(a0)
exdecwt: BSR waitmouzv  : BTST #6,$bfe001 : BEQ decvalw
RTS
waitmouzv
BSR myvwait
BSR myvwait
BSR myvwait
BSR myvwait
BSR myvwait
BSR myvwait
RTS
startsynthed:
MOVE.w prtrkon(pc),d2  : BEQ synalready
ShowSprite #spcurs,323,177,#spcurschan
LEA prtrkon(pc),a0     : MOVE.w #0,(a0)
BSR myvwait
Boxf 0,117,320,254,0
Blit #shsynth,0,117
LEA lastwave(pc),a0    : NOT.w (a0)
LEA lastsynins(pc),a0  : NOT.w (a0)
synalready:
RTS
startpated:
MOVE.w prtrkon(pc),d2 : BNE patalready
BSR myvwait
LEA prtrkon(pc),a0    : MOVE.w #1,(a0)
Boxf 0,117,320,254,0
Blit #shstore,0,117
LEA lastpat(pc),a0    : NOT.w (a0)
BSR patcursmark
patalready:
RTS
patcursmark:
MOVE.w prtrkon(pc),d0 : BEQ ToRTS
MOVE.w curchan(pc),d0 : ADD.w d0,d0 : ADD.w d0,d0 : ADD.w d0,d0 : MOVE.w d0,d1 : ADD.w d0,d0 : ADD.w d0,d0 : ADD.w d1,d0
ADD.w d1,d0 : ADD.w d1,d0
MOVE.w curfig(pc),d1  : BEQ figure0
ADD.w d1,d1 : ADD.w d1,d1 : ADD.w d1,d1 : ADD.w d1,d0 : ADD.w #8,d0
figure0: ADD.w #40,d0 : PutReg d0,workw.w
ShowSprite #spcurs,workw,177,#spcurschan          ; NO RTS !!
calcpatbyte:
MOVE.w curline(pc),d0 : ADD.w d0,d0 : ADD.w d0,d0 : ADD.w d0,d0
MOVE.w curchan(pc),d1 : ADD.w d1,d1 : ADD.w d1,d0
MOVE.w curfig(pc),d1  : ASR.w #1,d1 : ADD.w d1,d0
LEA curpatbyte(pc),a0 : MOVE.w d0,(a0)
ToRTS: RTS
myvwait:
MOVE.w vchange(pc),d6
vlop: BSR VUMET : MOVE.w vchange(pc),d7 : CMP.w d6,d7 : BEQ vlop
RTS
QUITEDITOR:           BTST #6,$bfe001 : BEQ QUITEDITOR
JSR waitmouzv        : BTST #6,$bfe001 : BEQ QUITEDITOR
JSR waitmouzv        : BTST #6,$bfe001 : BEQ QUITEDITOR
LEA vbl_on(pc),a0    : MOVE.w #0,(a0)
LEA pause(pc),a0     : MOVE.w #1,(a0)
BSR RMOV_CIA_B       : MOVE.w #15,$dff096
mou: BTST #6,$bfe001 : BEQ mou
AMIGA
RTS
setchannelz:
MOVE.l pnscp(pc),d0 : MOVE.l d0,$dff0a0
MOVE.w #32,$dff0a4  : MOVE.w #100,$dff0a6
MOVE.w  #0,$dff0a8
ADD.l  #64,d0       : MOVE.l d0,$dff0b0
MOVE.w #32,$dff0b4  : MOVE.w #100,$dff0b6
MOVE.w  #0,$dff0b8
ADD.l  #64,d0       : MOVE.l d0,$dff0c0
MOVE.w #32,$dff0c4  : MOVE.w #100,$dff0c6
MOVE.w  #0,$dff0c8
ADD.l  #64,d0       : MOVE.l d0,$dff0d0
MOVE.w #32,$dff0d4  : MOVE.w #100,$dff0d6
MOVE.w  #0,$dff0d8
MOVE.w #$820F,$dff096
RTS
inst2undo: RTS
.PLAYER:
LEA mastcount(pc),a0    : MOVE.w (a0),d0 : BNE nomast
MOVE.w mastspeed(pc),(a0)
BSR TRACE
BRA pl_rts
TRACE:
MOVE.w curline(pc),d0   : ASL.w #3,d0    : EXT.l d0
MOVE.l pnpat(pc),a6     : ADD.l d0,a6    ; PATTERNLINE IN A6
LEA synth0(pc),a5       : BSR ChkPat
LEA synth1(pc),a5       : BSR ChkPat
LEA synth2(pc),a5       : BSR ChkPat
LEA synth3(pc),a5       : BSR ChkPat
LEA curline(pc),a1      : MOVE.w (a1),d2 : ADDQ.w #1,d2
CMP.w #128,d2           : BNE nonextpos
MOVE.w patrun(pc),d0    : BNE patonly
LEA curpos(pc),a0       : MOVE.w (a0),d0 : ADDQ.w #1,d0 : AND.w #127,d0 : MOVE.w d0,(a0)
MOVE.l pnposbase(pc),a0 : MOVE.b 0(a0,d0.w),d0          : EXT.w d0
LEA curpat(pc),a0       : MOVE.w d0,(a0) : EXT.l d0
ASL.l #8,d0             : ADD.l d0,d0    : ADD.l d0,d0
MOVE.l pnpatbase(pc),d1 : ADD.l d1,d0
LEA pnpat(pc),a0        : MOVE.l d0,(a0)
MOVEM.l d2/a0-a1,-(a7)
BSR pat2undo
MOVEM.l (a7)+,d2/a0-a1
patonly: MOVE.w #0,d2
nonextpos: MOVE.w d2,(a1)
;INTERN & TWICE ! <CHANGE PATTERN>
MOVE.w curpat(pc),d0    : EXT.l d0
ASL.l #8,d0             : ADD.l d0,d0    : ADD.l d0,d0
MOVE.l pnpatbase(pc),d1 : ADD.l d1,d0
LEA pnpat(pc),a0        : MOVE.l d0,(a0)
;ENDINTERN
RTS
nomast: SUBQ.w #1,d0    : MOVE.w d0,(a0)
BRA pl_rts
ChkPat: MOVE.b (a6)+,d1 : MOVE.b d1,d2 ;Make Copy for Note
MOVEQ #0,d0
MOVE.b (a6)+,d0         ; EVENTBYTE
MOVE.w #0,$96(a5)       ; Clr 'Slide'
AND.b #%11000000,d1     : BEQ NoFx
CMP.b #64,d1            : BEQ setins
BTST.b #6,d1            : BNE NoSlide
EXT.w d0
MOVE.w d0,$96(a5)
BRA settedins
NoSlide:                ; Volume Settings
BTST.b #7,d0            : BEQ SetNewHold
MOVE.b 1(a5),2(a5)      ; Set 'OldInstrument'
BRA settedins
SetNewHold:
MOVE.b d0,$7d(a5)       ; Set 'Hold'
MOVE.b d0,$95(a5)       ; Set 'NewHold'
BRA settedins
setins: TST.b d0        : BNE setins2
LEA curline(pc),a0      : MOVE.w #127,(a0) : BRA settedins ;'BreakPat'
setins2: CMP.b #$ff,d0  : BEQ RestartSong
CMP.w #$3f,d0           : BGT SetSpeed
MOVE.b #0,$95(a5)       ; Kill 'NewHold'
MOVE.b d0,1(a5)         : BRA settedins ;'RealSetIns'
SetSpeed: SUB.b #$3f,d0 : EXT.w d0
LEA mastspeed(pc),a0    : MOVE.w d0,(a0)
LEA mastcount(pc),a0    : MOVE.w d0,(a0)
BRA settedins
RestartSong:
LEA curpos(pc),a0       : MOVE.w #127,(a0)
LEA curline(pc),a0      : MOVE.w #127,(a0)
settedins:
NoFx:
AND.b #63,d2            : BEQ nonote
MOVE.b d2,3(a5)         ; Set 'Note'
MOVE.b 1(a5),2(a5)      ; Set 'LastSynth'
MOVEQ.l #0,d2
MOVE.w d2,$78(a5)       ; Clr 'Pitch'
MOVE.w tracing(pc),d0   : BEQ notrace
MOVEQ.l #1,d2
notrace: MOVE.w d2,$7a(a5)
nonote:
RTS
#noisexy = (40*227)+17
clrnoiz:
MOVE.l pnbmm(pc),a0 : ADD.l #noisexy,a0
BSR clrnoiz2        : RTS
setnoiz:
MOVE.l pnbmm(pc),a0 : ADD.l #noisexy,a0
BSR setnoiz2        : RTS
INIT_CIA_B:
    LEA OldAutoVektor6(pc),a0 : MOVE.l $78,(a0)
    LEA TimerIRQ(pc),a0   : MOVE.l a0,$78
    MOVE.w $dff01c,d0     ; INTENAR
    BSET #15,d0
    LEA OldIntena(pc),a0  : MOVE.w d0,(a0)
    BSET #13,d0
    MOVE.w d0,$dff09a     ; INTENA
   ;init TimerA
    MOVE.l #65,$bfdd00    ; ICR CIAB / TA,TimerA = Bit0 / SetClr = Bit7
    MOVE.w #CIACOUNT,d0   ; Zaehlwert in den Timer schreiben
    MOVE.b d0,$bfd400     ; CIA-B / TimerA (TALO)
    LSR.w  #8,d0
    MOVE.b d0,$bfd500     ; TAHI
    MOVEQ.l #0,d0         ; CRA CIAB
    BCLR   #3,d0          ; Cont. Mode
    BCLR   #5,d0          ; INMODE
    BSET   #0,d0          ; StartBit
    MOVE.b d0,$bfde00     ; CRA
    RTS
RMOV_CIA_B:
    MOVE.w  #$7fff,$dff09a ;INTENA,
    MOVE.l  OldAutoVektor6(pc),$78
    MOVE.w  OldIntena(pc),$dff09a
    RTS
notedata: ; for easy rotating the keyboard
            Dc.b 16,17,18,19,20,21,22,23,24,25,26,27
            Dc.b 28,29,30,31,32,33,34,35,36,37,38,39
            Dc.b 40,41,42,43,44,45,46,47,48,49,50,51
            Dc.b 52,53,54,55,56,57,58,59,60,61,62,63
            ;rot1 lineoffset
            Dc.b 16,17,18,19,20,21,22,23,24,25,26,27
            Dc.b 28,29,30,31,32,33,34,35,36,37,38,39
            Dc.b 40,41,42,43,44,45,46,47,48,49,50,51
            Dc.b 52,53,54,55,56,57,58,59,60,61,62,63
            ;rot2 keyoffset
            Dc.b 16,17,18,19,20,21,22,23,24,25,26,27
            Dc.b 28,29,30,31,32,33,34,35,36,37,38,39
            Dc.b 40,41,42,43,44,45,46,47,48,49,50,51
            Dc.b 52,53,54,55,56,57,58,59,60,61,62,63
periods: Dc.w 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  Dc.w $06b0,$0650,$05f4,$05a0,$054c,$0500,$04b8,$0474,$0434,$03f8,$03c0,$038a
  Dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0,$01c5
  Dc.w $01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe,$00f0,$00e2
  Dc.w $00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087,$007f,$0078,$0071
  Dc.w $0000,$0000
pat2undo:    MOVE.l pnpat(pc),a0   : MOVE.l pncpbase(pc),a1 : ADD.l #undbaspat,a1
             MOVE.l #spat,d2       : BSR mycpmem            : RTS
undoswappat: MOVE.l pnpat(pc),a0   : MOVE.l pncpbase(pc),a1 : ADD.l #undbaspat,a1
             MOVE.l #spat,d2       : BSR myswapmem          : RTS
.SYNTHESIZER1: ;ONLY FOR HQ EFFECTZ (FE NOIZ..)
MOVE.l pnscp(pc),a0  :                 LEA synth0(pc),a5 : BSR hisynth
MOVE.l pnscp(pc),a0  : ADD.l #64,a0  : LEA synth1(pc),a5 : BSR hisynth
MOVE.l pnscp(pc),a0  : ADD.l #128,a0 : LEA synth2(pc),a5 : BSR hisynth
MOVE.l pnscp(pc),a0  : ADD.l #192,a0 : LEA synth3(pc),a5 : BSR hisynth
RTS
hisynth: MOVE.l 4(a5),a2
         MOVE.b (a5),d0 : BPL no_noiz
         MOVE.l $84(a5),d1 : MOVE.w #64,d0 : MOVE.b 1(a2),d7 : MOVE.b d7,d6
noizlop: MOVE.l d1,d2   : ROL.l d7,d1 : NOT d2 : SUB.l d1,d2
         MOVE.b d2,(a0)+
         SUBQ.w #1,d0   : BNE noizlop   : MOVE.l d2,$84(a5)
no_noiz: RTS
SYNTHESIZER2:
MOVE.l #$dff000,a6 : MOVE.l pnscp(pc),a4
LEA synth0(pc),a5  : MOVE.w #$a0,d7 : BSR dosynth : ADD.l #64,a4
LEA synth1(pc),a5  : MOVE.w #$b0,d7 : BSR dosynth : ADD.l #64,a4
LEA synth2(pc),a5  : MOVE.w #$c0,d7 : BSR dosynth : ADD.l #64,a4
LEA synth3(pc),a5  : MOVE.w #$d0,d7 : BSR dosynth
RTS
.dosynth: ;*d7/a4-a6*
MOVE.b 3(a5),d0       : BMI NoNewNote
MOVE.b d0,$7c(a5)     ; Set 'GroundNote.b'
MOVE.b #-1,3(a5)      ; NoteSet now.
MOVE.b 2(a5),d0       : BMI NoNewInstrument
EXT.w d0              : ASL.w #6,d0             : EXT.l d0
MOVE.l pnbkpub(pc),a0 : ADD.l #insbase,a0       : ADD.l d0,a0
MOVE.l a0,4(a5)       ; Set 'INST ADDRESS'
MOVE.l pnbkpub(pc),a1 : ADD.l #wavbase,a1       : MOVEQ.l #0,d0
MOVE.b (a0),d0        : AND.b #$f,d0 : ADDQ.b #1,d0 : MOVE.b d0,$88(a5) ; 'Upsamp'
MOVE.b $2e(a0),$89(a5) ; 'Offset'
MOVE.b $1e(a0),d0     ; Wave
AND.w  #255,d0        : ASL.w  #7,d0            : EXT.l d0 : ADD.l a1,d0  : MOVE.l d0,$8(a5)   ; Set 'Wave Address'
MOVE.b $2e(a0),d0     ; Mini
AND.w  #255,d0        : ASL.w  #7,d0            : EXT.l d0 : ADD.l a1,d0  : MOVE.l d0,$8c(a5)  ; Set 'Mini Address'
MOVE.b $1f(a0),d1
AND.l #$7f,d1         : MOVE.b d1,$8a(a5)       ; Set 'MiniTabLenght'
ADD.l d1,d0           : MOVE.l d0,$90(a5)       ; Set 'MiniTab LoopAddress'
MOVE.b #1,(a5)        ; Clr 'Noiz' / Set 'RefreshWave'
;---------------------
MOVE.b 2(a0),d0       : AND.w #$ff,d0           ; Get 'Level Wave'
ASL.w  #7,d0          : EXT.l d0 : ADD.l a1,d0  : MOVE.l d0,12(a5)  ; Set 'ADSR Address'
MOVE.l d0,$68(a5)     ; Set 'Cur ADSR Address'
MOVE.b 3(a0),d1       : AND.l #127,d1           : MOVE.w d1,$58(a5) ; Set 'ADSR Lenght'
MOVE.w d1,$6c(a5)     ; Set 'Cur ADSR Lenght'
ADD.l  d1,d0          : MOVE.l d0,$54(a5)       ; Set 'ADSR LoopAddress'
MOVE.b 4(a0),d1       : AND.w #127,d1           : MOVE.w d1,$5a(a5) ; Set 'ADSR LoopLenght'
;---------------------
MOVE.b $95(a5),d0     ; Get 'NewHold'
BNE   OverrideHold
MOVE.b 5(a0),d0       ; Get 'HoldTime'
OverrideHold:
MOVE.b d0,$7d(a5)     ; Set 'HoldTime'
MOVE.w #0,$66(a5)     ; Clr 'HardCut'
MOVEQ.l #0,d1
MOVE.b 8(a0),d0       : AND.w #255,d0           ; Get 'LFO Wave'
ASL.w  #7,d0          : EXT.l d0 : ADD.l a1,d0  : MOVE.l d0,16(a5)  ; Set 'LFO Address'
MOVE.l d0,$70(a5)     ; Set 'Cur LFO Address'
MOVEQ.l #0,d1
MOVE.b 9(a0),d1       : AND.l #127,d1           : MOVE.w d1,$60(a5) ; Set 'LFO Lenght'
MOVE.w d1,$74(a5)     ; Set 'Cur LFO Len'
ADD.l  d1,d0          : MOVE.l d0,$5c(a5)       ; Set 'LFO LoopAddress'
MOVE.b 10(a0),d1      : AND.w #127,d1           : MOVE.w d1,$62(a5) ; Set 'LFO LoopLenght'
MOVE.b #0,$7e(a5)     ; Clr 'CurrentArpeggio'
MOVE.b #0,$7f(a5)     ; Clr 'ArpeggioCount'
MOVE.b #-1,2(a5)      ; InstrumentSet now.
NoNewInstrument:
NoNewNote:
DoReleaze:  MOVE.b $7d(a5),d0 : BNE Hold        ; Chk 'HoldTime'
MOVE.w $64(a5),d0             : BEQ VolumeOut
MOVE.l 4(a5),a0               : MOVE.b 6(a0),d1 ; Get 'Releaze'
AND.w #63,d1                  : SUB.w d1,d0     : BPL nominusvol
MOVEQ.l #0,d0
nominusvol:
BRA VolumeOut
Hold:                           SUBQ.b #1,d0    : MOVE.b d0,$7d(a5)
nohold:
DoADSR: MOVE.w $66(a5),d0     : BEQ NoHardcut   ; ** CHK ADSR **
NOP : NOP
NoHardcut:
MOVE.w $6c(a5),d0       : BPL NoSetADSRLoop     ;'CUR ADSR LENGHT'
MOVE.l $54(a5),$68(a5)  : MOVE.w $5a(a5),d0     : MOVE.w d0,$6c(a5) ;IF YOU THINK OPTI, FALSE!: D0 MUST BE UPDATED!
NoSetADSRLoop:
SUBQ.w #1,d0 : MOVE.w d0,$6c(a5)
MOVE.l $68(a5),a0       : MOVE.b (a0)+,d0       : MOVE.l a0,$68(a5)
VolumeOut:              ; **** Needs 'CurVolume' in d0
AND.w #$3f,d0           : MOVE.w $7a(a5),d1     : BNE notall ;TRACENOTE
MOVE.w playstate(pc),d1 : BEQ blastall
notall: AND.w $6e(a5),d0
blastall:
MOVE.w d0,$64(a5)                               ; Set 'CUR VOLUME'
MOVE.w d0,8(a6,d7.w)                            ; **** BLAST'EM! ****
TestArpeggio:             MOVE.l 4(a5),a1       ; 'InstrumentAddress'
MOVEQ.l #0,d0
MOVE.b $7f(a5),d0       : BEQ DoArpeggio        ; Get 'Arpcount' (Slowmotion)
SUBQ.b #1,d0            : MOVE.b d0,$7f(a5)     : BRA NoArpeggio
DoArpeggio:
MOVE.b  $d(a1),$7f(a5)  ; Set 'Arpspeed'
MOVE.b $7e(a5),d0       : CMP.b #16,d0          : BNE NoReArp  ; 'CurrentArpeggio'
MOVE.b  $c(a1),d0       ; Set 'ArpeggioRestart'
NoReArp: ADDQ.b #1,d0   : MOVE.b d0,$7e(a5)     : SUBQ.b #1,d0 : EXT.w d0
ChkNoiz:
MOVE.w $3e(a1),d1       : BTST.w d0,d1          : BEQ nonoiz
MOVE.b #-1,(a5)         ; Bang 'Noiz'
BRA noizdun
nonoiz:
MOVE.b (a5),d1          : BEQ noizdun
MOVE.b #1,(a5)          ; Clr 'Noiz' / Set 'RefreshWave'
MOVE.b (a1),d1          : AND.b #$f0,d1 : BNE noizdun ; NoRawChip
MOVE.l 8(a5),a2         ; Get 'WAVE ADDRESS'
MOVE.b $89(a5),d1       : AND.l #$3f,d1 : ADD.l d1,a2 ; Add 'Offset'
BSR SpecialWaveCopy
MOVE.b #0,(a5)          ; Clr 'Noiz' / Clr 'RefreshWave'
noizdun:
MOVE.b 14(a1,d0.w),d1   ; ArpeggioNote
TST.b (a5)              : BMI FixedNoice   ;(NOIZ IZ ALWAIZ FIXT)
ADD.b $7c(a5),d1        ; Add 'GroundNote'
FixedNoice:
MOVE.b d1,$80(a5)       ; Set 'ArpNote'
LEA periods(pc),a0      : EXT.w d1 : ADD.w d1,d1 : MOVE.w 0(a0,d1.w),d1
MOVE.w d1,$76(a5)       ; Set 'Cur Period'
NoArpeggio:
MOVE.b $81(a5),d0       : BEQ DoLFO
SUB.b  #1,$81(a5)       ; Dec 'LFO SlowMotion Count'
MOVE.w $82(a5),d0       : BRA NoVibbing
DoLFO: MOVE.b $b(a1),$81(a5) ; Set 'SlowMotionCount'
MOVE.w $74(a5),d0       : BPL NoSetLFOLoop      ; Chk 'Cur LFO Lenght'
MOVE.l $5c(a5),$70(a5)  : MOVE.w $62(a5),d0     : MOVE.w d0,$74(a5) ;IF YOU THINK OPTI, FALSE!: D0 MUST BE UPDATED!
NoSetLFOLoop:
SUBQ.w #1,d0            : MOVE.w d0,$74(a5)
MOVE.l $70(a5),a0       : MOVE.b (a0)+,d0       : MOVE.l a0,$70(a5) ; "LFO Sample" in d0
MOVE.b d0,$94(a5)       ; Set 'VisualVibrator' for Levelmeter !
MOVE.b $80(a5),d1       : SUB.b #16,d1          : AND.w #$3f,d1 ; Get 'ArpNote'
ASL.w  #7,d1            : ADD.w d1,d1           : AND.w #255,d0
ADD.w d0,d1             :
MOVE.l pnvibtab(pc),a0  : MOVE.b 0(a0,d1.w),d0  : EXT.w d0   ; Vibrator
MOVE.w d0,$82(a5)       ; Set 'LastVib'
NoVibbing:
ADD.w  $76(a5),d0                               ; Add 'Cur Period'
MOVE.w $78(a5),d1                               ; Get 'Cur Pitch'
ADD.w  d1,d0
SUB.w  $96(a5),d1                               ; Bend Pitch
MOVE.w d1,$78(a5)                               ; Store Pitch
MOVE.w d0,6(a6,d7.w)                            ; Bang Period!
;**SynthSection**
MOVE.b (a1),d0          : AND.b #$f0,d0 : BEQ RawChip ; NoSyntheffects
MOVE.b (a5),d1          : CMP.b #1,d1   : BNE RawChip ; NoWaveRefres
MOVE.b $8a(a5),d1       : BNE NoReLop
MOVE.l $90(a5),$8c(a5)  : MOVE.b $2f(a1),$8a(a5)  : BRA ReIn
NoReLop:
SUB.b #1,$8a(a5)
ReIn: MOVE.l $8c(a5),a0 : MOVE.b (a0)+,d1         : MOVE.l a0,$8c(a5)
MOVE.l 8(a5),a2         ; Get 'WAVE ADDRESS'
ROR.b #1,d1             : AND.l #$3f,d1           : ADD.l d1,a2            ; Add 'Offset'
BSR SpecialWaveCopy
RawChip:
RTS
SpecialWaveCopy:
MOVE.b $88(a5),d1       ; Upsample
MOVEQ.l #0,d3           ; Index
MOVE.w #64,d2
wclop: AND.w #$3f,d3 : MOVE.b 0(a2,d3.w),(a4)+ : ADD.b d1,d3
SUBQ.w #1,d2         : BNE wclop               : SUB.l #64,a4
RTS
#scpstrt  = 2
#scpy     = 16
#scpymod  = 40*(#screenmode+1)
#scpdisx  = 9
#scp0x    = #scpstrt
#scp0y    = #scpy
#scp0xy   = #scp0y*#scpymod+#scp0x
#scp0ofs  = 0
#scp1x    = #scp0x+#scpdisx
#scp1y    = #scpy
#scp1xy   = #scp1y*#scpymod+#scp1x
#scp1ofs  = 64
#scp2x    = #scp1x+#scpdisx
#scp2y    = #scpy
#scp2xy   = #scp2y*#scpymod+#scp2x
#scp2ofs  = 128
#scp3x    = #scp2x+#scpdisx
#scp3y    = #scpy
#scp3xy   = #scp3y*#scpymod+#scp3x
#scp3ofs  = 192
#scpsl    = 3+#screenmode
#plotclr  = (32+(40*#screenmode))
doscp:
                MOVE.l #scp0xy,d0 : MOVE.l #scp0ofs,d3 : BSR pltscp
                MOVE.l #scp1xy,d0 : MOVE.l #scp1ofs,d3 : BSR pltscp
                MOVE.l #scp2xy,d0 : MOVE.l #scp2ofs,d3 : BSR pltscp
                MOVE.l #scp3xy,d0 : MOVE.l #scp3ofs,d3 : BSR pltscp
                RTS
pltscp:        ;d0=xy ;d3=scp?ofs
                MOVE.l pnscpbuf(pc),a0  : ADD.l d0,a0
                MOVE.l a0,a1            : MOVE.l #plotclr,d0
                MOVEQ.l #0,d2           : MOVEQ.l #4,d1
                BSR pltclr
                BRA fillscp
plotscp:
 MOVE.l pnscp(pc),a0 : ADD.l d3,a0 : MOVE.w #8,d0
pltlop:
 MOVEQ.l #7,d1
pltlo2:
 MOVEQ.l #0,d2   : MOVE.b (a0)+,d2 : ASR.b #2,d2 : ADD.b #$e1,d2 : NEG.b d2 : BCLR #31,d2 : EXT.l d2
 ASL.l #scpsl,d2 : MOVE.l d2,d3    : ADD.l d2,d2 : ADD.l d2,d2   : ADD.l d3,d2
 MOVE.l a1,a2    : ADD.l d2,a2
 BCHG d1,(a2)    : SUBQ.l #1,d1    : BPL pltlo2
 ADD.l #1,a1     : SUBQ.w #1,d0    : BNE pltlop
 RTS
fillscp:
 MOVE.l pnscp(pc),a0 : ADD.l d3,a0 : MOVE.w #8,d6
 ADD.l  #1240,a1
 MOVE.l a1,a2
.fillop:
 MOVEQ.l #7,d1
fillop2:
 MOVE.b (a0)+,d2         : AND.l #$00fc,d2
 LEA wavfilcontab(pc),a3 : ADD.l d2,a3
 MOVE.l (a3),a3 ;: MOVE.l (a3)+,d4 : CMP.l #$fed3,d4 : BNE nodraw
 JSR (a3)
nodraw:
; TST.b d3        : BPL prefillop3b
; LSR.b #2,d2     : AND.b #$1f,d2
;fillop3a:
; BSET d1,(a2)    : ADD.l #40,a2 : DBMI d2,fillop3a
; BRA fillblkend
;prefillop3b:     : NEG.b d2     : LSR.b #2,d2  : AND.b #$1f,d2
;fillop3b:
; BSET d1,(a2)    : SUB.l #40,a2 : DBMI d2,fillop3b
;fillblkend:
 SUBQ.w #1,d1     : BPL fillop2
 ADD.l #1,a2      : SUBQ.w #1,d6 : BNE fillop
 RTS
.updatescope
 MOVE.l pnscpbuf(pc),a0 : MOVE.l pnbmm(pc),a1
 ADD.l #602,a0 : ADD.l #602,a1
 BSR updlop                     ;Channel0
 ADD.l #9,a0   : ADD.l #9,a1
 BSR updlop                     ;Channel1
 ADD.l #9,a0   : ADD.l #9,a1
 BSR updlop                     ;Channel2
 ADD.l #9,a0   : ADD.l #9,a1
 BSR updlop                     ;Channel3
 RTS
updlop: MOVE.l    (a0),(a1)    : MOVE.l   4(a0),4(a1)
        MOVE.l  40(a0),40(a1)  : MOVE.l  44(a0),44(a1)
        MOVE.l  80(a0),80(a1)  : MOVE.l  84(a0),84(a1)
        MOVE.l 120(a0),120(a1) : MOVE.l 124(a0),124(a1)
        MOVE.l 160(a0),160(a1) : MOVE.l 164(a0),164(a1)
        MOVE.l 200(a0),200(a1) : MOVE.l 204(a0),204(a1)
        MOVE.l 240(a0),240(a1) : MOVE.l 244(a0),244(a1)
        MOVE.l 280(a0),280(a1) : MOVE.l 284(a0),284(a1)
        MOVE.l 320(a0),320(a1) : MOVE.l 324(a0),324(a1)
        MOVE.l 360(a0),360(a1) : MOVE.l 364(a0),364(a1)
        MOVE.l 400(a0),400(a1) : MOVE.l 404(a0),404(a1)
        MOVE.l 440(a0),440(a1) : MOVE.l 444(a0),444(a1)
        MOVE.l 480(a0),480(a1) : MOVE.l 484(a0),484(a1)
        MOVE.l 520(a0),520(a1) : MOVE.l 524(a0),524(a1)
        MOVE.l 560(a0),560(a1) : MOVE.l 564(a0),564(a1)
        MOVE.l 600(a0),600(a1) : MOVE.l 604(a0),604(a1)
        MOVE.l 640(a0),640(a1) : MOVE.l 644(a0),644(a1)
        MOVE.l 680(a0),680(a1) : MOVE.l 684(a0),684(a1)
        MOVE.l 720(a0),720(a1) : MOVE.l 724(a0),724(a1)
        MOVE.l 760(a0),760(a1) : MOVE.l 764(a0),764(a1)
        MOVE.l 800(a0),800(a1) : MOVE.l 804(a0),804(a1)
        MOVE.l 840(a0),840(a1) : MOVE.l 844(a0),844(a1)
        MOVE.l 880(a0),880(a1) : MOVE.l 884(a0),884(a1)
        MOVE.l 920(a0),920(a1) : MOVE.l 924(a0),924(a1)
        MOVE.l 960(a0),960(a1) : MOVE.l 964(a0),964(a1)
        MOVE.l 1000(a0),1000(a1) : MOVE.l 1004(a0),1004(a1)
        MOVE.l 1040(a0),1040(a1) : MOVE.l 1044(a0),1044(a1)
        MOVE.l 1080(a0),1080(a1) : MOVE.l 1084(a0),1084(a1)
        MOVE.l 1120(a0),1120(a1) : MOVE.l 1124(a0),1124(a1)
        MOVE.l 1160(a0),1160(a1) : MOVE.l 1164(a0),1164(a1)
        MOVE.l 1200(a0),1200(a1) : MOVE.l 1204(a0),1204(a1)
        MOVE.l 1240(a0),1240(a1) : MOVE.l 1244(a0),1244(a1)
        MOVE.l 1280(a0),1280(a1) : MOVE.l 1284(a0),1284(a1)
        MOVE.l 1320(a0),1320(a1) : MOVE.l 1324(a0),1324(a1)
        MOVE.l 1360(a0),1360(a1) : MOVE.l 1364(a0),1364(a1)
        MOVE.l 1400(a0),1400(a1) : MOVE.l 1404(a0),1404(a1)
        MOVE.l 1440(a0),1440(a1) : MOVE.l 1444(a0),1444(a1)
        MOVE.l 1480(a0),1480(a1) : MOVE.l 1484(a0),1484(a1)
        MOVE.l 1520(a0),1520(a1) : MOVE.l 1524(a0),1524(a1)
        MOVE.l 1560(a0),1560(a1) : MOVE.l 1564(a0),1564(a1)
        MOVE.l 1600(a0),1600(a1) : MOVE.l 1604(a0),1604(a1)
        MOVE.l 1640(a0),1640(a1) : MOVE.l 1644(a0),1644(a1)
        MOVE.l 1680(a0),1680(a1) : MOVE.l 1684(a0),1684(a1)
        MOVE.l 1720(a0),1720(a1) : MOVE.l 1724(a0),1724(a1)
        MOVE.l 1760(a0),1760(a1) : MOVE.l 1764(a0),1764(a1)
        MOVE.l 1800(a0),1800(a1) : MOVE.l 1804(a0),1804(a1)
        MOVE.l 1840(a0),1840(a1) : MOVE.l 1844(a0),1844(a1)
        MOVE.l 1880(a0),1880(a1) : MOVE.l 1884(a0),1884(a1)
        MOVE.l 1920(a0),1920(a1) : MOVE.l 1924(a0),1924(a1)
        MOVE.l 1960(a0),1960(a1) : MOVE.l 1964(a0),1964(a1)
        MOVE.l 2000(a0),2000(a1) : MOVE.l 2004(a0),2004(a1)
        MOVE.l 2040(a0),2040(a1) : MOVE.l 2044(a0),2044(a1)
        MOVE.l 2080(a0),2080(a1) : MOVE.l 2084(a0),2084(a1)
        MOVE.l 2120(a0),2120(a1) : MOVE.l 2124(a0),2124(a1)
        MOVE.l 2160(a0),2160(a1) : MOVE.l 2164(a0),2164(a1)
        MOVE.l 2200(a0),2200(a1) : MOVE.l 2204(a0),2204(a1)
        MOVE.l 2240(a0),2240(a1) : MOVE.l 2244(a0),2244(a1)
        MOVE.l 2280(a0),2280(a1) : MOVE.l 2284(a0),2284(a1)
        MOVE.l 2320(a0),2320(a1) : MOVE.l 2324(a0),2324(a1)
        MOVE.l 2360(a0),2360(a1) : MOVE.l 2364(a0),2364(a1)
        MOVE.l 2400(a0),2400(a1) : MOVE.l 2404(a0),2404(a1)
        MOVE.l 2440(a0),2440(a1) : MOVE.l 2444(a0),2444(a1)
        MOVE.l 2480(a0),2480(a1) : MOVE.l 2484(a0),2484(a1)
        MOVE.l 2520(a0),2520(a1) : MOVE.l 2524(a0),2524(a1)
        MOVE.l 2560(a0),2560(a1) : MOVE.l 2564(a0),2564(a1)
        RTS
TimerIRQ:
    MOVEM.l d0-d7/a0-a6,-(a7)
    MOVE.b  $bfdd00,d0  ; Read Interrupt Register (ICR). - That clears the Register.
    MOVE.w  $dff01e,d0  ; Test CIA-B Interrupt (IntReqR)
    BTST    #13,d0      : BEQ no
    MOVEQ.l #0,d0       : BSET #13,d0
    MOVE.w  d0,$dff09c  ; INTREQ
    MOVE.l TimerVariable(pc),d0
    ADDQ.l #1,d0 : CMP.l #999,d0  : BLE LimitTV : MOVEQ #0,d0
LimitTV: LEA TimerVariable(pc),a0 : MOVE.l d0,(a0)
    MOVE.w pause(pc),d0 : BNE dopause
    BSR SYNTHESIZER1
dopause: ;-------------------
no: MOVEM.l (a7)+,d0-d7/a0-a6
    RTE
#patx     = 1
#paty     = 122
#patymod  = 40*(#screenmode+1)
#patxy    = #paty*#patymod+#patx
#patclrofs= 6+(#screenmode*40)
#prbmofs  = #patymod-7
#patlines = 7
#patbits  = 6
#patsub   = 232+1 ;312-123
#patadd   = 280+5 ;280
#patsub2  = #patsub+240
#linefeed = 80
#patnumprofs = (40*101)+1

#insnumprofs = (40*101)+37 ;insed will follow !!!

dopat:
 MOVE.w curpat(pc),d0    : MOVE.w lastpat(pc),d1
 CMP.w d0,d1             : BNE newpat
 MOVE.w curline(pc),d4   : MOVE.w lastline(pc),d1
 CMP.w d4,d1             : BNE printe
 RTS
newpat:
 LEA lastpat(pc),a0      : MOVE.w d0,(a0)
 BSR prpatnum
 EXT.l d0 : ASL.l #8,d0  : ADD.l d0,d0          : ADD.l d0,d0
 MOVE.l pnpatbase(pc),d1 : ADD.l d1,d0
 LEA pnpat(pc),a0        : MOVE.l d0,(a0)
 LEA plst(pc),a3         : MOVE.l pnpat(pc),a0
 LEA ntcontab(pc),a1     : LEA evcontab(pc),a2
 MOVE.b #128,d0          : MOVE.w #0,d4
 BSR newloop
 MOVE.w curline(pc),d4
printe:
 BSR calcpatbyte
 LEA lastline(pc),a2 : MOVE.w d4,(a2)
 MOVE.l pnbmm(pc),a2 : ADD.l #patxy,a2 : LEA chars(pc),a1
 LEA elst(pc),a0 : MOVE.w d4,d0
 ADD.w d0,d0  : ADD.w d0,d0 : ADD.w d4,d0
 ADD.w d0,d0  : ADD.w d0,d0 : ADD.w d4,d0 : ADD.w d4,d0
 EXT.l d0 : ADD.l d0,a0
 MOVE.b #patlines,d0        : MOVE.l #prbmofs,d7
prlopa:
 MOVE.b (a0)+,d1 : EXT.w d1 : ADD.w d1,d1 : ADD.w d1,d1 : ADD.w d1,d1 ;posh
 MOVE.b (a0)+,d2 : EXT.w d2 : ADD.w d2,d2 : ADD.w d2,d2 : ADD.w d2,d2 ;posl
 MOVE.b (a0)+,d3 : EXT.w d3 : ADD.w d3,d3 : ADD.w d3,d3 : ADD.w d3,d3;n0h
 MOVE.b (a0)+,d4 : EXT.w d4 : ADD.w d4,d4 : ADD.w d4,d4 : ADD.w d4,d4;n0l
 MOVE.b (a0)+,d5 : EXT.w d5 : ADD.w d5,d5 : ADD.w d5,d5 : ADD.w d5,d5 ;fx0
 MOVE.b #patbits,d6
lop1a:
 MOVE.b 0(a1,d1.w),(a2)+  : MOVE.b 0(a1,d2.w),(a2)  : ADD.l #3,a2
 MOVE.b 0(a1,d3.w),(a2)+  : MOVE.b 0(a1,d4.w),(a2)+
 MOVE.b 0(a1,d5.w),(a2)   : ADD.l #1,a1 : ADD.l #34,a2
 SUBQ.b #1,d6 : BNE lop1a : SUB.l #patbits,a1 : SUB.l #patsub,a2

 MOVE.b (a0)+,d1 : EXT.w d1 : ADD.w d1,d1 : ADD.w d1,d1 : ADD.w d1,d1 ;val0h
 MOVE.b (a0)+,d2 : EXT.w d2 : ADD.w d2,d2 : ADD.w d2,d2 : ADD.w d2,d2 ;val0l
 MOVE.b (a0)+,d3 : EXT.w d3 : ADD.w d3,d3 : ADD.w d3,d3 : ADD.w d3,d3 ;n1h0
 MOVE.b (a0)+,d4 : EXT.w d4 : ADD.w d4,d4 : ADD.w d4,d4 : ADD.w d4,d4 ;n1l
 MOVE.b (a0)+,d5 : EXT.w d5 : ADD.w d5,d5 : ADD.w d5,d5 : ADD.w d5,d5 ;fx1
 MOVE.b #patbits,d6
lop2a:
 MOVE.b 0(a1,d1.w),(a2)+  : MOVE.b 0(a1,d2.w),(a2)  : ADD.l #3,a2
 MOVE.b 0(a1,d3.w),(a2)+  : MOVE.b 0(a1,d4.w),(a2)+
 MOVE.b 0(a1,d5.w),(a2)   : ADD.l #1,a1 : ADD.l #34,a2
 SUBQ.b #1,d6 : BNE lop2a : SUB.l #patbits,a1 : SUB.l #patsub,a2

 MOVE.b (a0)+,d1 : EXT.w d1 : ADD.w d1,d1 : ADD.w d1,d1 : ADD.w d1,d1 ;val1h
 MOVE.b (a0)+,d2 : EXT.w d2 : ADD.w d2,d2 : ADD.w d2,d2 : ADD.w d2,d2 ;val1l
 MOVE.b (a0)+,d3 : EXT.w d3 : ADD.w d3,d3 : ADD.w d3,d3 : ADD.w d3,d3 ;n2h
 MOVE.b (a0)+,d4 : EXT.w d4 : ADD.w d4,d4 : ADD.w d4,d4 : ADD.w d4,d4 ;n2l
 MOVE.b (a0)+,d5 : EXT.w d5 : ADD.w d5,d5 : ADD.w d5,d5 : ADD.w d5,d5 ;fx2
 MOVE.b #patbits,d6
lop3a:
 MOVE.b 0(a1,d1.w),(a2)+  : MOVE.b 0(a1,d2.w),(a2)  : ADD.l #3,a2
 MOVE.b 0(a1,d3.w),(a2)+  : MOVE.b 0(a1,d4.w),(a2)+
 MOVE.b 0(a1,d5.w),(a2)   : ADD.l #1,a1 : ADD.l #34,a2
 SUBQ.b #1,d6 : BNE lop3a : SUB.l #patbits,a1 : SUB.l #patsub,a2

 MOVE.b (a0)+,d1 : EXT.w d1 : ADD.w d1,d1 : ADD.w d1,d1 : ADD.w d1,d1 ;val2h
 MOVE.b (a0)+,d2 : EXT.w d2 : ADD.w d2,d2 : ADD.w d2,d2 : ADD.w d2,d2 ;val2l
 MOVE.b (a0)+,d3 : EXT.w d3 : ADD.w d3,d3 : ADD.w d3,d3 : ADD.w d3,d3 ;n3h
 MOVE.b (a0)+,d4 : EXT.w d4 : ADD.w d4,d4 : ADD.w d4,d4 : ADD.w d4,d4 ;n3l
 MOVE.b (a0)+,d5 : EXT.w d5 : ADD.w d5,d5 : ADD.w d5,d5 : ADD.w d5,d5 ;fx3
 MOVE.b #patbits,d6
lop4a:
 MOVE.b 0(a1,d1.w),(a2)+  : MOVE.b 0(a1,d2.w),(a2)  : ADD.l #3,a2
 MOVE.b 0(a1,d3.w),(a2)+  : MOVE.b 0(a1,d4.w),(a2)+
 MOVE.b 0(a1,d5.w),(a2)   : ADD.l #1,a1 : ADD.l #34,a2
 SUBQ.b #1,d6 : BNE lop4a : SUB.l #patbits,a1 : SUB.l #patsub,a2

 MOVE.b (a0)+,d1 : EXT.w d1 : ADD.w d1,d1 : ADD.w d1,d1 : ADD.w d1,d1 ;val3h
 MOVE.b (a0)+,d2 : EXT.w d2 : ADD.w d2,d2 : ADD.w d2,d2 : ADD.w d2,d2 ;val3l
 MOVE.b #patbits,d6
lop5a:
 MOVE.b 0(a1,d1.w),(a2)+  : MOVE.b 0(a1,d2.w),(a2)  : ADD.l #39,a2 : ADD.l #1,a1
 SUBQ.b #1,d6 : BNE lop5a : SUB.l #patbits,a1 : SUB.l #patsub,a2
 SUBQ.b #1,d0 : ADD.l #patadd,a2 : BNE prlopa
 ADD.l #linefeed,a2
 MOVE.b #1,d0   : MOVE.l #prbmofs,d7
prlopb:
 MOVE.b (a0)+,d1 : EXT.w d1 : ADD.w d1,d1 : ADD.w d1,d1 : ADD.w d1,d1 ;posh
 MOVE.b (a0)+,d2 : EXT.w d2 : ADD.w d2,d2 : ADD.w d2,d2 : ADD.w d2,d2 ;posl
 MOVE.b (a0)+,d3 : EXT.w d3 : ADD.w d3,d3 : ADD.w d3,d3 : ADD.w d3,d3 ;n0h
 MOVE.b (a0)+,d4 : EXT.w d4 : ADD.w d4,d4 : ADD.w d4,d4 : ADD.w d4,d4 ;n0l
 MOVE.b (a0)+,d5 : EXT.w d5 : ADD.w d5,d5 : ADD.w d5,d5 : ADD.w d5,d5 ;fx0
 MOVE.b #patbits,d6
lop1b:
 MOVE.b 0(a1,d1.w),(a2)+  : MOVE.b 0(a1,d2.w),(a2)  : ADD.l #3,a2
 MOVE.b 0(a1,d3.w),(a2)+  : MOVE.b 0(a1,d4.w),(a2)+
 MOVE.b 0(a1,d5.w),(a2)   : ADD.l #34,a2

 MOVE.b 0(a1,d1.w),(a2)+  : MOVE.b 0(a1,d2.w),(a2)  : ADD.l #3,a2
 MOVE.b 0(a1,d3.w),(a2)+  : MOVE.b 0(a1,d4.w),(a2)+
 MOVE.b 0(a1,d5.w),(a2)   : ADD.l #1,a1 : ADD.l #34,a2
 SUBQ.b #1,d6 : BNE lop1b : SUB.l #patbits,a1 : SUB.l #patsub2,a2

 MOVE.b (a0)+,d1 : EXT.w d1 : ADD.w d1,d1 : ADD.w d1,d1 : ADD.w d1,d1 ;val0h
 MOVE.b (a0)+,d2 : EXT.w d2 : ADD.w d2,d2 : ADD.w d2,d2 : ADD.w d2,d2 ;val0l
 MOVE.b (a0)+,d3 : EXT.w d3 : ADD.w d3,d3 : ADD.w d3,d3 : ADD.w d3,d3 ;n1h0
 MOVE.b (a0)+,d4 : EXT.w d4 : ADD.w d4,d4 : ADD.w d4,d4 : ADD.w d4,d4 ;n1l
 MOVE.b (a0)+,d5 : EXT.w d5 : ADD.w d5,d5 : ADD.w d5,d5 : ADD.w d5,d5 ;fx1
 MOVE.b #patbits,d6
lop2b:
 MOVE.b 0(a1,d1.w),(a2)+ : MOVE.b 0(a1,d2.w),(a2)  : ADD.l #3,a2
 MOVE.b 0(a1,d3.w),(a2)+ : MOVE.b 0(a1,d4.w),(a2)+
 MOVE.b 0(a1,d5.w),(a2)  : ADD.l #34,a2

 MOVE.b 0(a1,d1.w),(a2)+ : MOVE.b 0(a1,d2.w),(a2)  : ADD.l #3,a2
 MOVE.b 0(a1,d3.w),(a2)+ : MOVE.b 0(a1,d4.w),(a2)+
 MOVE.b 0(a1,d5.w),(a2)  : ADD.l #1,a1 : ADD.l #34,a2

 SUBQ.b #1,d6 : BNE lop2b : SUB.l #patbits,a1 : SUB.l #patsub2,a2

 MOVE.b (a0)+,d1 : EXT.w d1 : ADD.w d1,d1 : ADD.w d1,d1 : ADD.w d1,d1 ;val1h
 MOVE.b (a0)+,d2 : EXT.w d2 : ADD.w d2,d2 : ADD.w d2,d2 : ADD.w d2,d2 ;val1l
 MOVE.b (a0)+,d3 : EXT.w d3 : ADD.w d3,d3 : ADD.w d3,d3 : ADD.w d3,d3 ;n2h
 MOVE.b (a0)+,d4 : EXT.w d4 : ADD.w d4,d4 : ADD.w d4,d4 : ADD.w d4,d4 ;n2l
 MOVE.b (a0)+,d5 : EXT.w d5 : ADD.w d5,d5 : ADD.w d5,d5 : ADD.w d5,d5 ;fx2
 MOVE.b #patbits,d6
lop3b:
 MOVE.b 0(a1,d1.w),(a2)+ : MOVE.b 0(a1,d2.w),(a2)  : ADD.l #3,a2
 MOVE.b 0(a1,d3.w),(a2)+ : MOVE.b 0(a1,d4.w),(a2)+
 MOVE.b 0(a1,d5.w),(a2)  : ADD.l #34,a2

 MOVE.b 0(a1,d1.w),(a2)+  : MOVE.b 0(a1,d2.w),(a2)  : ADD.l #3,a2
 MOVE.b 0(a1,d3.w),(a2)+  : MOVE.b 0(a1,d4.w),(a2)+
 MOVE.b 0(a1,d5.w),(a2)   : ADD.l #1,a1 : ADD.l #34,a2
 SUBQ.b #1,d6 : BNE lop3b : SUB.l #patbits,a1 : SUB.l #patsub2,a2

 MOVE.b (a0)+,d1 : EXT.w d1 : ADD.w d1,d1 : ADD.w d1,d1 : ADD.w d1,d1 ;val2h
 MOVE.b (a0)+,d2 : EXT.w d2 : ADD.w d2,d2 : ADD.w d2,d2 : ADD.w d2,d2 ;val2l
 MOVE.b (a0)+,d3 : EXT.w d3 : ADD.w d3,d3 : ADD.w d3,d3 : ADD.w d3,d3 ;n3h
 MOVE.b (a0)+,d4 : EXT.w d4 : ADD.w d4,d4 : ADD.w d4,d4 : ADD.w d4,d4 ;n3l
 MOVE.b (a0)+,d5 : EXT.w d5 : ADD.w d5,d5 : ADD.w d5,d5 : ADD.w d5,d5 ;fx3
 MOVE.b #patbits,d6
lop4b:
 MOVE.b 0(a1,d1.w),(a2)+  : MOVE.b 0(a1,d2.w),(a2)  : ADD.l #3,a2
 MOVE.b 0(a1,d3.w),(a2)+  : MOVE.b 0(a1,d4.w),(a2)+
 MOVE.b 0(a1,d5.w),(a2)   : ADD.l #34,a2

 MOVE.b 0(a1,d1.w),(a2)+  : MOVE.b 0(a1,d2.w),(a2)  : ADD.l #3,a2
 MOVE.b 0(a1,d3.w),(a2)+  : MOVE.b 0(a1,d4.w),(a2)+
 MOVE.b 0(a1,d5.w),(a2)   : ADD.l #1,a1 : ADD.l #34,a2
 SUBQ.b #1,d6 : BNE lop4b : SUB.l #patbits,a1 : SUB.l #patsub2,a2

 MOVE.b (a0)+,d1 : EXT.w d1 : ADD.w d1,d1 : ADD.w d1,d1 : ADD.w d1,d1 ;val3h
 MOVE.b (a0)+,d2 : EXT.w d2 : ADD.w d2,d2 : ADD.w d2,d2 : ADD.w d2,d2 ;val3l
 MOVE.b #patbits,d6
lop5b:
 MOVE.b 0(a1,d1.w),(a2)+  : MOVE.b 0(a1,d2.w),(a2)  : ADD.l #39,a2
 MOVE.b 0(a1,d1.w),(a2)+  : MOVE.b 0(a1,d2.w),(a2)  : ADD.l #39,a2 : ADD.l #1,a1
 SUBQ.b #1,d6 : BNE lop5b : SUB.l #patbits,a1 : SUB.l #patsub,a2
 SUBQ.b #1,d0 : ADD.l #patadd,a2 : BNE prlopb

 ADD.l #linefeed,a2
 MOVE.b #patlines,d0   : MOVE.l #prbmofs,d7
prlopc:
 MOVE.b (a0)+,d1 : EXT.w d1 : ADD.w d1,d1 : ADD.w d1,d1 : ADD.w d1,d1 ;posh
 MOVE.b (a0)+,d2 : EXT.w d2 : ADD.w d2,d2 : ADD.w d2,d2 : ADD.w d2,d2 ;posl
 MOVE.b (a0)+,d3 : EXT.w d3 : ADD.w d3,d3 : ADD.w d3,d3 : ADD.w d3,d3 ;n0h
 MOVE.b (a0)+,d4 : EXT.w d4 : ADD.w d4,d4 : ADD.w d4,d4 : ADD.w d4,d4 ;n0l
 MOVE.b (a0)+,d5 : EXT.w d5 : ADD.w d5,d5 : ADD.w d5,d5 : ADD.w d5,d5 ;fx0
 MOVE.b #patbits,d6
lop1c:
 MOVE.b 0(a1,d1.w),(a2)+  : MOVE.b 0(a1,d2.w),(a2)  : ADD.l #3,a2
 MOVE.b 0(a1,d3.w),(a2)+  : MOVE.b 0(a1,d4.w),(a2)+
 MOVE.b 0(a1,d5.w),(a2)   : ADD.l #1,a1 : ADD.l #34,a2
 SUBQ.b #1,d6 : BNE lop1c : SUB.l #patbits,a1 : SUB.l #patsub,a2

 MOVE.b (a0)+,d1 : EXT.w d1 : ADD.w d1,d1 : ADD.w d1,d1 : ADD.w d1,d1 ;val0h
 MOVE.b (a0)+,d2 : EXT.w d2 : ADD.w d2,d2 : ADD.w d2,d2 : ADD.w d2,d2 ;val0l
 MOVE.b (a0)+,d3 : EXT.w d3 : ADD.w d3,d3 : ADD.w d3,d3 : ADD.w d3,d3;n1h0
 MOVE.b (a0)+,d4 : EXT.w d4 : ADD.w d4,d4 : ADD.w d4,d4 : ADD.w d4,d4;n1l
 MOVE.b (a0)+,d5 : EXT.w d5 : ADD.w d5,d5 : ADD.w d5,d5 : ADD.w d5,d5 ;fx1
 MOVE.b #patbits,d6
lop2c:
 MOVE.b 0(a1,d1.w),(a2)+  : MOVE.b 0(a1,d2.w),(a2)  : ADD.l #3,a2
 MOVE.b 0(a1,d3.w),(a2)+  : MOVE.b 0(a1,d4.w),(a2)+
 MOVE.b 0(a1,d5.w),(a2)   : ADD.l #1,a1 : ADD.l #34,a2
 SUBQ.b #1,d6 : BNE lop2c : SUB.l #patbits,a1 : SUB.l #patsub,a2

 MOVE.b (a0)+,d1 : EXT.w d1 : ADD.w d1,d1 : ADD.w d1,d1 : ADD.w d1,d1 ;val1h
 MOVE.b (a0)+,d2 : EXT.w d2 : ADD.w d2,d2 : ADD.w d2,d2 : ADD.w d2,d2 ;val1l
 MOVE.b (a0)+,d3 : EXT.w d3 : ADD.w d3,d3 : ADD.w d3,d3 : ADD.w d3,d3;n2h
 MOVE.b (a0)+,d4 : EXT.w d4 : ADD.w d4,d4 : ADD.w d4,d4 : ADD.w d4,d4;n2l
 MOVE.b (a0)+,d5 : EXT.w d5 : ADD.w d5,d5 : ADD.w d5,d5 : ADD.w d5,d5 ;fx2
 MOVE.b #patbits,d6
lop3c:
 MOVE.b 0(a1,d1.w),(a2)+ : MOVE.b 0(a1,d2.w),(a2)  : ADD.l #3,a2
 MOVE.b 0(a1,d3.w),(a2)+ : MOVE.b 0(a1,d4.w),(a2)+
 MOVE.b 0(a1,d5.w),(a2)  : ADD.l #1,a1 : ADD.l #34,a2
 SUBQ.b #1,d6 : BNE lop3c : SUB.l #patbits,a1 : SUB.l #patsub,a2

 MOVE.b (a0)+,d1 : EXT.w d1 : ADD.w d1,d1 : ADD.w d1,d1 : ADD.w d1,d1 ;val2h
 MOVE.b (a0)+,d2 : EXT.w d2 : ADD.w d2,d2 : ADD.w d2,d2 : ADD.w d2,d2 ;val2l
 MOVE.b (a0)+,d3 : EXT.w d3 : ADD.w d3,d3 : ADD.w d3,d3 : ADD.w d3,d3 ;n3h
 MOVE.b (a0)+,d4 : EXT.w d4 : ADD.w d4,d4 : ADD.w d4,d4 : ADD.w d4,d4 ;n3l
 MOVE.b (a0)+,d5 : EXT.w d5 : ADD.w d5,d5 : ADD.w d5,d5 : ADD.w d5,d5 ;fx3
 MOVE.b #patbits,d6
lop4c:
 MOVE.b 0(a1,d1.w),(a2)+ : MOVE.b 0(a1,d2.w),(a2)  : ADD.l #3,a2
 MOVE.b 0(a1,d3.w),(a2)+ : MOVE.b 0(a1,d4.w),(a2)+
 MOVE.b 0(a1,d5.w),(a2)     : ADD.l #1,a1 : ADD.l #34,a2
 SUBQ.b #1,d6 : BNE lop4c   : SUB.l #patbits,a1 : SUB.l #patsub,a2

 MOVE.b (a0)+,d1 : EXT.w d1 : ADD.w d1,d1 : ADD.w d1,d1 : ADD.w d1,d1 ;val3h
 MOVE.b (a0)+,d2 : EXT.w d2 : ADD.w d2,d2 : ADD.w d2,d2 : ADD.w d2,d2 ;val3l
 MOVE.b #patbits,d6
lop5c:
 MOVE.b 0(a1,d1.w),(a2)+ : MOVE.b 0(a1,d2.w),(a2)  : ADD.l #39,a2 : ADD.l #1,a1
 SUBQ.b #1,d6    : BNE lop5c : SUB.l #patbits,a1   : SUB.l #patsub,a2
 SUBQ.b #1,d0    : ADD.l #patadd,a2 : BNE prlopc
 RTS

prpatnum:   ;  <DO NOT CLR D0>  /  <NEEDS PATNUM IN D0>
 MOVE.w d0,d1    : ADD.w d0,d1            : LEA evcontab(pc),a0
 EXT.l d1        : ADD.l d1,a0
 MOVE.b (a0),d2  : EXT.w d2 : ADD.w d2,d2 : ADD.w d2,d2 : ADD.w d2,d2
 MOVE.b 1(a0),d3 : EXT.w d3 : ADD.w d3,d3 : ADD.w d3,d3 : ADD.w d3,d3
 MOVE.w #6,d4
 LEA chars(pc),a1           : MOVE.l pnbmm(pc),a2
 ADD.l #patnumprofs,a2
patnumpr:
 MOVE.b 0(a1,d2.w),(a2)+    : MOVE.b 0(a1,d3.w),(a2) : ADD.l #39,a2
 MOVE.b 0(a1,d2.w),(a2)+    : MOVE.b 0(a1,d3.w),(a2) : ADD.l #39,a2
 ADD.l #1,a1 : SUBQ.b #1,d4 : BNE patnumpr
RTS
#carpxy = #scpymod*220+23
;!!! #arpofs is uzed as Hardval (14), Register-Indirect !!!
prcurinsnum:
 MOVE.w curins(pc),d0 : LEA lastins(pc),a0 : MOVE.w (a0),d1
 CMP.w d0,d1 : BNE newins : RTS
newins:
 MOVE.w d0,(a0)  ; Replace 'lastins'
 MOVE.w d0,d1    : ADD.w d0,d1 : LEA evcontab(pc),a0
 EXT.l d1        : ADD.l d1,a0
 MOVE.b (a0),d2  : EXT.w d2    : ADD.w d2,d2 : ADD.w d2,d2 : ADD.w d2,d2
 MOVE.b 1(a0),d3 : EXT.w d3    : ADD.w d3,d3 : ADD.w d3,d3 : ADD.w d3,d3
 MOVE.w #6,d4
 LEA chars(pc),a1              : MOVE.l pnbmm(pc),a2
 ADD.l #insnumprofs,a2
insnumpr:
 MOVE.b 0(a1,d2.w),(a2)+     : MOVE.b 0(a1,d3.w),(a2) : ADD.l #39,a2
 MOVE.b 0(a1,d2.w),(a2)+     : MOVE.b 0(a1,d3.w),(a2) : ADD.l #39,a2
 ADD.l #1,a1                 : SUBQ.b #1,d4           : BNE insnumpr
 RTS
printsyned:
 MOVE.w curins(pc),d0        : MOVE.w lastsynins(pc),d1
 CMP.w d0,d1                 : BNE doins
 RTS
doins: LEA lastsynins(pc),a0 : MOVE.w d0,(a0)
 MOVE.l pnins(pc),a0         : LEA ilst(pc),a1 :  LEA evcontab(pc),a2
 MOVE.l #62,d0
doinslop:
 MOVE.b (a0)+,d1 : AND.w #255,d1 : ADD.w d1,d1 : MOVE.w 0(a2,d1.w),(a1)+
 SUB.w #1,d0 : BNE doinslop
;check noize
 MOVE.l pnins(pc),a0 : ADD.l #noizofs,a0 : MOVE.w curarpbyte(pc),d0 : AND.l #15,d0
 MOVE.w (a0),d1 : AND.l #$ffff,d1 : BTST.w d0,d1 : BEQ nonoize : BSR setnoiz : BRA nonoizchng2
nonoize : BSR clrnoiz
nonoizchng2:
;row0
 MOVE.l #12,d0 : MOVEQ.l #0,d1 : LEA ilst(pc),a0 : MOVE.l pnbmm(pc),a1 : ADD.l #4983,a1
 BSR printnum
 MOVE.w curarpbyte(pc),d0  : MOVE.l pnbmm(pc),a0 : ADD.l #carpxy,a0
 BSR sprint ; 'single word print'
 MOVE.w curarpbyte(pc),d0 : MOVE.l pnins(pc),a0
 MOVE.b 14(a0,d0.w),d0 : AND.w #255,d0 : MOVE.l pnbmm(pc),a0 : ADD.l #carpxy+320,a0
 BSR sprint
 MOVE.l #2,d0 : MOVEQ.l #0,d1 : LEA ilst(pc),a0 : ADD.l #24,a0 : MOVE.l pnbmm(pc),a1 : ADD.l #4983+4480,a1
 BSR printnum
 ;row1
 MOVE.l #16,d0 : MOVEQ.l #0,d1 : LEA ilst(pc),a0 : ADD.l #$3c,a0 : MOVE.l pnbmm(pc),a1 : ADD.l #4983+7,a1
 BSR printnum
 ;row2
 MOVE.l #16,d0 : MOVEQ.l #0,d1 : LEA ilst(pc),a0 : ADD.l #$5c,a0 : MOVE.l pnbmm(pc),a1 : ADD.l #4983+8+4,a1
 BSR printnum
 RTS
#prnumofs  = 280+40
printnum: ;<YBYTEZ in D0>  / <BYTESTART in D1>
           ;<POINTER in A0> / <SCRPOS in A1>
 ADD.l d1,a0
printnumlop:
 MOVE.b (a0)+,d2      : EXT.w d2 : ADD.w d2,d2 : ADD.w d2,d2 : ADD.w d2,d2
 MOVE.b (a0)+,d3      : EXT.w d3 : ADD.w d3,d3 : ADD.w d3,d3 : ADD.w d3,d3
 LEA chars(pc),a2     : MOVE.l a2,a3
 EXT.l d2             : EXT.l d3
 ADD.l d2,a2          : ADD.l d3,a3
 MOVE.b (a2)+,   (a1) : MOVE.b (a3)+,  1(a1)
 MOVE.b (a2)+, 40(a1) : MOVE.b (a3)+, 41(a1)
 MOVE.b (a2)+, 80(a1) : MOVE.b (a3)+, 81(a1)
 MOVE.b (a2)+,120(a1) : MOVE.b (a3)+,121(a1)
 MOVE.b (a2)+,160(a1) : MOVE.b (a3)+,161(a1)
 MOVE.b (a2)+,200(a1) : MOVE.b (a3)+,201(a1)
 ADD.l #prnumofs,a1
 SUBQ.w #1,d0 : BNE printnumlop
 RTS
sprint: ;SINGLEPRINT
; <WORD in D0> / <SCRPOS in A0>        trashes d0-d3/a0-a5
 LEA evcontab(pc),a1
 ADD.w d0,d0 : MOVE.b 1(a1,d0.w),d1 : MOVE.b 0(a1,d0.w),d0
sprint_precon: ;*** SAME AS SPRINT, BUT ALREADY OFFSETS !!
 EXT.w d0 : ADD.w d0,d0 : ADD.w d0,d0 : ADD.w d0,d0
 EXT.w d1 : ADD.w d1,d1 : ADD.w d1,d1 : ADD.w d1,d1
 LEA chars(pc),a1     : MOVE.l a1,a2
 EXT.l d0             : EXT.l d1
 ADD.l d0,a1          : ADD.l d1,a2
 MOVE.b (a1)+,   (a0) : MOVE.b (a2)+,  1(a0)
 MOVE.b (a1)+, 40(a0) : MOVE.b (a2)+, 41(a0)
 MOVE.b (a1)+, 80(a0) : MOVE.b (a2)+, 81(a0)
 MOVE.b (a1)+,120(a0) : MOVE.b (a2)+,121(a0)
 MOVE.b (a1)+,160(a0) : MOVE.b (a2)+,161(a0)
 MOVE.b (a1)+,200(a0) : MOVE.b (a2)+,201(a0)
 RTS
dprint: ;DOUBLEPRINT
; <BYTEZ in D0&D1> / <SCRPOS in A0>        trashes d0-d3/a0-a5
 LEA evcontab(pc),a1
 AND.w #255,d1 : ADD.w d1,d1 : MOVE.b 0(a1,d1.w),d2 : MOVE.b 1(a1,d1.w),d3
 AND.w #255,d0 : ADD.w d0,d0 : MOVE.b 1(a1,d0.w),d1 : MOVE.b 0(a1,d0.w),d0
dprint_precon: ;*** SAME AS DPRINT, BUT ALREADY OFFSETS !!
 EXT.w d0 : ADD.w d0,d0 : ADD.w d0,d0               : ADD.w d0,d0
 EXT.w d1 : ADD.w d1,d1 : ADD.w d1,d1               : ADD.w d1,d1
 EXT.w d2 : ADD.w d2,d2 : ADD.w d2,d2               : ADD.w d2,d2
 EXT.w d3 : ADD.w d3,d3 : ADD.w d3,d3               : ADD.w d3,d3
 LEA chars(pc),a1       : MOVE.l a1,a2
 MOVE.l a1,a3           : MOVE.l a1,a4
 MOVE.l a0,a5           : ADD.l #prnumofs,a5
 EXT.l d0               : EXT.l d1
 EXT.l d2               : EXT.l d3
 ADD.l d0,a1            : ADD.l d1,a2
 ADD.l d2,a3            : ADD.l d3,a4
 MOVE.b (a1)+,   (a0)   : MOVE.b (a2)+,  1(a0) : MOVE.b (a3)+,   (a5) : MOVE.b (a4)+,  1(a5)
 MOVE.b (a1)+, 40(a0)   : MOVE.b (a2)+, 41(a0) : MOVE.b (a3)+, 40(a5) : MOVE.b (a4)+, 41(a5)
 MOVE.b (a1)+, 80(a0)   : MOVE.b (a2)+, 81(a0) : MOVE.b (a3)+, 80(a5) : MOVE.b (a4)+, 81(a5)
 MOVE.b (a1)+,120(a0)   : MOVE.b (a2)+,121(a0) : MOVE.b (a3)+,120(a5) : MOVE.b (a4)+,121(a5)
 MOVE.b (a1)+,160(a0)   : MOVE.b (a2)+,161(a0) : MOVE.b (a3)+,160(a5) : MOVE.b (a4)+,161(a5)
 MOVE.b (a1)+,200(a0)   : MOVE.b (a2)+,201(a0) : MOVE.b (a3)+,200(a5) : MOVE.b (a4)+,201(a5)
 RTS
.polyvu:
MOVE.l pnbmm(pc),a0 : ADD.l #678,a0   : MOVE.b #63,d0
pvc: MOVE.b #0,(a0) : ADD.l #40,a0    : DBMI d0,pvc
LEA synth0(pc),a1 : MOVE.w $64(a1),d0 : AND.w #63,d0 : ASR.w #2,d0
LEA synth1(pc),a1 : MOVE.w $64(a1),d1 : AND.w #63,d1 : ASR.w #2,d1 : ADD.w d1,d0
LEA synth2(pc),a1 : MOVE.w $64(a1),d1 : AND.w #63,d1 : ASR.w #2,d1 : ADD.w d1,d0
LEA synth3(pc),a1 : MOVE.w $64(a1),d1 : AND.w #63,d1 : ASR.w #2,d1 : ADD.w d1,d0 : BEQ nothin
MOVE.l pnbmm(pc),a0 : ADD.l #678+2560,a0
pvl: MOVE.b #255,(a0) : SUB.l #40,a0 : SUBQ.w #1,d0  : BPL pvl
nothin:
RTS
#wavstrt  = 0
#wavy     = 119
#wavymod  = 40*(#screenmode+1)
#wavdisx  = 9
#wav0x    = #wavstrt
#wav0y    = #wavy
#wav0xy   = #wav0y*#wavymod+#wav0x
#wav0ofs  = 0
#wavsl    = 3+#screenmode
#wavclr   = (24+(40*#screenmode))
#wavnumxy = 11+(248*#wavymod)
dowaveeditor:
                MOVE.l #wav0xy,d0
pltwav:
                MOVE.l pnbmm(pc),a0     : ADD.l d0,a0
                MOVE.l a0,a1            : MOVE.l #wavclr,d0
                MOVEQ.l #0,d2           : MOVEQ.l #8,d1
                BSR plotwavclr

plotwav:       ;clrend
 LEA    pnwave(pc),a0                   : MOVE.l pnwavebase(pc),d0
 MOVE.w curwave(pc),d1                  : AND.l #255,d1
 ASL.l #7,d1                            : ADD.l d1,d0
 MOVE.l d0,(a0)                         : MOVE.l d0,a0
 MOVE.w #16,d0
pltwavlop:
 MOVEQ.l #7,d1
pltwavlo2:
 MOVEQ.l #0,d2   : MOVE.b (a0)+,d2 : ASR.b #1,d2 : ADD.b #$c1,d2 : NEG.b d2 : BCLR #31,d2 : EXT.l d2
 ASL.l #wavsl,d2 : MOVE.l d2,d3    : ADD.l d2,d2 : ADD.l d2,d2   : ADD.l d3,d2
 MOVE.l a1,a2    : ADD.l d2,a2
 BCHG d1,(a2)    : SUBQ.l #1,d1    : BPL pltwavlo2
 ADD.l #1,a1     : SUBQ.w #1,d0    : BNE pltwavlop
;endplot
;***DO NOW***:
;<YBYTEZ in D0>  / <BYTESTART in D1>
;<POINTER in A0> / <SCRPOS in A1>
 MOVE.w curwave(pc),d0 : MOVE.l pnbmm(pc),a0
 ADD.l #wavnumxy,a0    : BSR sprint
 RTS

; *************************************************
; ****       Daten fuer Timer-Interrupt        ****
; *************************************************

OldAutoVektor6 :Dc.l  0
OldIntena:      Dc.w  0
TimerVariable:  Dc.l  0

.VARZ2:
loaddata:
  Dc.l 0,0,0,0,0,0,0,0 ;32

.spack: ;PACK SINGLE PATTERN 2 DIZ BLK FIRZT
       Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;00-07
       Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;08-0F
       Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;10-17
       Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;18-1F
       Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;20-27
       Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;28-2F
       Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;30-37
       Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;38-3F
       Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;40-47
       Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;48-4F
       Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;50-57
       Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;58-5F
       Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;60-67
       Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;68-6F
       Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;70-77
       Dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;78-7F
elst:
;empty_front_bytez
       Dc.w $1111
       Dc.l $11111111,$11111111,$11111111
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111
plst:  ;16lines*4*(2pos 2nt 1fx 2val)           * (8+2)
;00-xF
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;0
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;1
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;2
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;3
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;4
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;5
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;6
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;7
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;8
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;9
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;A
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;B
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;C
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;D
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;E
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;F
;10-xF
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;0
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;1
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;2
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;3
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;4
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;5
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;6
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;7
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;8
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;9
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;A
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;B
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;C
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;D
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;E
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;F
;20-xF
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;0
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;1
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;2
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;3
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;4
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;5
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;6
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;7
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;8
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;9
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;A
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;B
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;C
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;D
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;E
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;F
;30-xF
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;0
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;1
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;2
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;3
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;4
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;5
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;6
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;7
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;8
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;9
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;A
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;B
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;C
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;D
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;E
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;F
;40-xF
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;0
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;1
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;2
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;3
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;4
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;5
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;6
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;7
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;8
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;9
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;A
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;B
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;C
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;D
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;E
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;F
;50-xF
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;0
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;1
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;2
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;3
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;4
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;5
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;6
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;7
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;8
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;9
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;A
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;B
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;C
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;D
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;E
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;F
;60-xF
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;0
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;1
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;2
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;3
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;4
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;5
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;6
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;7
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;8
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;9
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;A
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;B
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;C
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;D
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;E
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;F
;70-xF
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;0
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;1
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;2
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;3
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;4
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;5
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;6
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;7
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;8
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;9
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;A
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;B
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;C
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;D
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;E
       Dc.l $00000000,$00000000,$00000000,$00000000,$00000000 ;F
;last_emptylinez
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111 ;0
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111 ;1
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111 ;2
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111 ;3
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111 ;4
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111 ;5
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111 ;6
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111 ;7
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111 ;8
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111 ;9
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111 ;A
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111 ;B
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111 ;C
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111 ;D
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111 ;E
       Dc.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111 ;F
ilst: ;precalc instdisplay
       Dc.w $11   ;samplenumber/ 0 = fouriersynthesiz
       Dc.w $11   ;samplestart (x 256)
       Dc.w $11   ;level wave
       Dc.w $11   ;loop start
       Dc.w $11   ;loop lenght
       Dc.w $11   ;hold
       Dc.w $11   ;releaze
       Dc.w $11   ;hardcut
       Dc.w $11   ;lfo depht wave
       Dc.w $11   ;lfo loop start
       Dc.w $11   ;lfo loop lenght
       Dc.w $11   ;lfo speed
       Dc.w $11   ;Arpspeed
       Dc.w $11   ;Arprestart
       Dc.w $11   ;Arp0
       Dc.w $11   ;Arp1
       Dc.w $11   ;Arp2
       Dc.w $11   ;Arp3
       Dc.w $11   ;Arp4
       Dc.w $11   ;Arp5
       Dc.w $11   ;Arp6
       Dc.w $11   ;Arp7
       Dc.w $11   ;Arp8
       Dc.w $11   ;Arp9
       Dc.w $11   ;ArpA
       Dc.w $11   ;ArpB
       Dc.w $11   ;ArpC
       Dc.w $11   ;ArpD
       Dc.w $11   ;ArpE
       Dc.w $11   ;ArpF
       Dc.w $11   ;SoundEVA0
       Dc.w $11   ;SoundEVA1
       Dc.w $11   ;SoundEVA2
       Dc.w $11   ;SoundEVA3
       Dc.w $11   ;SoundEVA4
       Dc.w $11   ;SoundEVA5
       Dc.w $11   ;SoundEVA6
       Dc.w $11   ;SoundEVA7
       Dc.w $11   ;SoundEVA8
       Dc.w $11   ;SoundEVA9
       Dc.w $11   ;SoundEVAA
       Dc.w $11   ;SoundEVAB
       Dc.w $11   ;SoundEVAC
       Dc.w $11   ;SoundEVAD
       Dc.w $11   ;SoundEVAE
       Dc.w $11   ;SoundEVAF
       Dc.w $11   ;SoundEVB0
       Dc.w $11   ;SoundEVB1
       Dc.w $11   ;SoundEVB2
       Dc.w $11   ;SoundEVB3
       Dc.w $11   ;SoundEVB4
       Dc.b $11   ;SoundEVB5
       Dc.w $11   ;SoundEVB6
       Dc.w $11   ;SoundEVB7
       Dc.w $11   ;SoundEVB8
       Dc.w $11   ;SoundEVB9
       Dc.w $11   ;SoundEVBA
       Dc.w $11   ;SoundEVBB
       Dc.w $11   ;SoundEVBC
       Dc.w $11   ;SoundEVBD
       Dc.w $11   ;SoundEVBE
       Dc.w $11   ;SoundEVBF
       Dc.w $1111 ;NOISE.W >>>DIRECT INPUT!!!! NO(!)CONVERT ETC!!!!
worklst: Dc.w 0,0,0,0

chars:
       Dc.b %00111110
       Dc.b %01100011
       Dc.b %01100011
       Dc.b %01110011
       Dc.b %01110011
       Dc.b %00111110
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %00001100
       Dc.b %00011100
       Dc.b %00001100
       Dc.b %00001100
       Dc.b %00001100
       Dc.b %00011110
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %00111110
       Dc.b %00000011
       Dc.b %00111110
       Dc.b %01100000
       Dc.b %01100011
       Dc.b %01111111
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %00111110
       Dc.b %00000011
       Dc.b %00011100
       Dc.b %00000011
       Dc.b %01100011
       Dc.b %00111110
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %00000110
       Dc.b %00001110
       Dc.b %00010110
       Dc.b %00100110
       Dc.b %01111111
       Dc.b %00000110
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %01111111
       Dc.b %01100000
       Dc.b %01111110
       Dc.b %00000011
       Dc.b %01100011
       Dc.b %00111110
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %00111110
       Dc.b %01100000
       Dc.b %01111110
       Dc.b %01100011
       Dc.b %01100011
       Dc.b %00111110
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %01111111
       Dc.b %00000110
       Dc.b %00001100
       Dc.b %00011000
       Dc.b %00110000
       Dc.b %01100000
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %00111110
       Dc.b %01100011
       Dc.b %00111110
       Dc.b %01100011
       Dc.b %01100011
       Dc.b %00111110
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %00111110
       Dc.b %01100011
       Dc.b %01100011
       Dc.b %00111111
       Dc.b %00000011
       Dc.b %00111110
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %00111110
       Dc.b %01010101
       Dc.b %10110110
       Dc.b %10111110
       Dc.b %01100011
       Dc.b %00011100
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %01111110
       Dc.b %01100011
       Dc.b %01111110
       Dc.b %01100011
       Dc.b %01100011
       Dc.b %01111110
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %00111110
       Dc.b %01100110
       Dc.b %01100000
       Dc.b %01100000
       Dc.b %01100011
       Dc.b %00111110
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %01111110
       Dc.b %01100011
       Dc.b %01100011
       Dc.b %01100011
       Dc.b %01100011
       Dc.b %01111110
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %01111111
       Dc.b %01100000
       Dc.b %01111100
       Dc.b %01100000
       Dc.b %01100000
       Dc.b %01111111
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %01111111
       Dc.b %01100000
       Dc.b %01111100
       Dc.b %01100000
       Dc.b %01100000
       Dc.b %01100000
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000 ; <= FrontZero (copy 0() to it, if u want)
       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000 ; <= U Z E D  ! !  !
       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000 ; <= point
       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %00110000
       Dc.b %01110000
       Dc.b %00110000
       Dc.b %00110000
       Dc.b %01111000
       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %00110000
       Dc.b %01011000
       Dc.b %00011000
       Dc.b %00110000
       Dc.b %01111000
       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %01110000
       Dc.b %00011000
       Dc.b %01111000
       Dc.b %00011000
       Dc.b %01110000
       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %00011000
       Dc.b %00111000
       Dc.b %01011000
       Dc.b %11111100
       Dc.b %00011000
       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000   ; <= no fx
       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %00111100
       Dc.b %00011000
       Dc.b %00011000
       Dc.b %00011000
       Dc.b %00011000
       Dc.b %00111100
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %00111110
       Dc.b %01100000
       Dc.b %00111110
       Dc.b %00000011
       Dc.b %01100011
       Dc.b %00111110
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %01100011
       Dc.b %01100011
       Dc.b %00110110
       Dc.b %00110110
       Dc.b %00011100
       Dc.b %00001000
       Dc.b %00000000
       Dc.b %00000000

       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00111110
       Dc.b %00111110   ; <= line
       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000
       Dc.b %00000000
ntcontab:
       Dc.b 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27 ;0-7 Empty..
       Dc.b 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27 ;8-F Empty, too !
       Dc.b  0,19,1,19,2,19,3,19,4,19,5,19,6,19,7,19,8,19,9,19,10,19,11,19
       Dc.b  0,20,1,20,2,20,3,20,4,20,5,20,6,20,7,20,8,20,9,20,10,20,11,20
       Dc.b  0,21,1,21,2,21,3,21,4,21,5,21,6,21,7,21,8,21,9,21,10,21,11,21
       Dc.b  0,22,1,22,2,22,3,22,4,22,5,22,6,22,7,22,8,22,9,22,10,22,11,22
evcontab:
       Dc.b 16,0,16,1,16,2,16,3,16,4,16,5,16,6,16,7,16,8,16,9,16,10,16,11,16,12,16,13,16,14,16,15
       Dc.b 1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15
       Dc.b 2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15
       Dc.b 3,0,3,1,3,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12,3,13,3,14,3,15
       Dc.b 4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7,4,8,4,9,4,10,4,11,4,12,4,13,4,14,4,15
       Dc.b 5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7,5,8,5,9,5,10,5,11,5,12,5,13,5,14,5,15
       Dc.b 6,0,6,1,6,2,6,3,6,4,6,5,6,6,6,7,6,8,6,9,6,10,6,11,6,12,6,13,6,14,6,15
       Dc.b 7,0,7,1,7,2,7,3,7,4,7,5,7,6,7,7,7,8,7,9,7,10,7,11,7,12,7,13,7,14,7,15
       Dc.b 8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7,8,8,8,9,8,10,8,11,8,12,8,13,8,14,8,15
       Dc.b 9,0,9,1,9,2,9,3,9,4,9,5,9,6,9,7,9,8,9,9,9,10,9,11,9,12,9,13,9,14,9,15
       Dc.b 10,0,10,1,10,2,10,3,10,4,10,5,10,6,10,7,10,8,10,9,10,10,10,11,10,12,10,13,10,14,10,15
       Dc.b 11,0,11,1,11,2,11,3,11,4,11,5,11,6,11,7,11,8,11,9,11,10,11,11,11,12,11,13,11,14,11,15
       Dc.b 12,0,12,1,12,2,12,3,12,4,12,5,12,6,12,7,12,8,12,9,12,10,12,11,12,12,12,13,12,14,12,15
       Dc.b 13,0,13,1,13,2,13,3,13,4,13,5,13,6,13,7,13,8,13,9,13,10,13,11,13,12,13,13,13,14,13,15
       Dc.b 14,0,14,1,14,2,14,3,14,4,14,5,14,6,14,7,14,8,14,9,14,10,14,11,14,12,14,13,14,14,14,15
       Dc.b 15,0,15,1,15,2,15,3,15,4,15,5,15,6,15,7,15,8,15,9,15,10,15,11,15,12,15,13,15,14,15,15
clrnoiz2:
MOVE.l #%111111111111111111111111111111,(a0)    : MOVE.b #%11111111,4(a0)
MOVE.b #%100000, 40(a0) : MOVE.b #%00000000, 45(a0)
MOVE.l #%100000000000000000000000000000, 80(a0) : MOVE.b #%00000000, 84(a0) : MOVE.b #%00000000, 85(a0)
MOVE.l #%100000000000000000000000000000,120(a0) : MOVE.b #%00000000,124(a0) : MOVE.b #%00000000,125(a0)
MOVE.l #%100000000000000000000000000000,160(a0) : MOVE.b #%00000000,164(a0) : MOVE.b #%00000000,165(a0)
MOVE.l #%100000000000000000000000000000,200(a0) : MOVE.b #%00000000,204(a0) : MOVE.b #%00000000,205(a0)
MOVE.b #%100000,240(a0) : MOVE.b #%00000000,245(a0)
MOVE.l #%00000000000000000000000000000,280(a0)  : MOVE.b #%00000000,284(a0) : MOVE.b #%00000000,285(a0)
RTS
setnoiz2:
MOVE.l #%000000000000000000000000000000,(a0)    : MOVE.b #%00000000,4(a0)
MOVE.b #%000000, 40(a0) : MOVE.b #%10000000, 45(a0)
MOVE.l #%000000011110001110011011111111, 80(a0) : MOVE.b #%11000000, 84(a0) : MOVE.b #%10000000, 85(a0)
MOVE.l #%000000011011011011011011000110,120(a0) : MOVE.b #%11000000,124(a0) : MOVE.b #%10000000,125(a0)
MOVE.l #%000000011011011011011000110111,160(a0) : MOVE.b #%00000000,164(a0) : MOVE.b #%10000000,165(a0)
MOVE.l #%000000011011001110011111110111,200(a0) : MOVE.b #%11000000,204(a0) : MOVE.b #%10000000,205(a0)
MOVE.b #%000000,240(a0) : MOVE.b #%10000000,245(a0)
MOVE.l #%11111111111111111111111111111,280(a0)  : MOVE.b #%11111111,284(a0) : MOVE.b #%10000000,285(a0)
RTS
plotwavclr:     MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;1
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;2
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;3
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;4
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;5
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;6
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;7
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;8
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;9
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;a
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;b
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;c
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;d
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;e
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;f
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+
                ADD.l d0,a0
                SUBQ.w #1,d1            : BNE plotwavclr : RTS
initfillscp: ;ULTRAIMPORTANT
LEA wavfilcontab(pc),a0
LEA waved00,a1 : MOVE.l a1,(a0)+
LEA waved01,a1 : MOVE.l a1,(a0)+
LEA waved02,a1 : MOVE.l a1,(a0)+
LEA waved03,a1 : MOVE.l a1,(a0)+
LEA waved04,a1 : MOVE.l a1,(a0)+
LEA waved05,a1 : MOVE.l a1,(a0)+
LEA waved06,a1 : MOVE.l a1,(a0)+
LEA waved07,a1 : MOVE.l a1,(a0)+
LEA waved08,a1 : MOVE.l a1,(a0)+
LEA waved09,a1 : MOVE.l a1,(a0)+
LEA waved0a,a1 : MOVE.l a1,(a0)+
LEA waved0b,a1 : MOVE.l a1,(a0)+
LEA waved0c,a1 : MOVE.l a1,(a0)+
LEA waved0d,a1 : MOVE.l a1,(a0)+
LEA waved0e,a1 : MOVE.l a1,(a0)+
LEA waved0f,a1 : MOVE.l a1,(a0)+
LEA waved10,a1 : MOVE.l a1,(a0)+
LEA waved11,a1 : MOVE.l a1,(a0)+
LEA waved12,a1 : MOVE.l a1,(a0)+
LEA waved13,a1 : MOVE.l a1,(a0)+
LEA waved14,a1 : MOVE.l a1,(a0)+
LEA waved15,a1 : MOVE.l a1,(a0)+
LEA waved16,a1 : MOVE.l a1,(a0)+
LEA waved17,a1 : MOVE.l a1,(a0)+
LEA waved18,a1 : MOVE.l a1,(a0)+
LEA waved19,a1 : MOVE.l a1,(a0)+
LEA waved1a,a1 : MOVE.l a1,(a0)+
LEA waved1b,a1 : MOVE.l a1,(a0)+
LEA waved1c,a1 : MOVE.l a1,(a0)+
LEA waved1d,a1 : MOVE.l a1,(a0)+
LEA waved1e,a1 : MOVE.l a1,(a0)+
LEA waved1f,a1 : MOVE.l a1,(a0)+
LEA waved20,a1 : MOVE.l a1,(a0)+
LEA waved21,a1 : MOVE.l a1,(a0)+
LEA waved22,a1 : MOVE.l a1,(a0)+
LEA waved23,a1 : MOVE.l a1,(a0)+
LEA waved24,a1 : MOVE.l a1,(a0)+
LEA waved25,a1 : MOVE.l a1,(a0)+
LEA waved26,a1 : MOVE.l a1,(a0)+
LEA waved27,a1 : MOVE.l a1,(a0)+
LEA waved28,a1 : MOVE.l a1,(a0)+
LEA waved29,a1 : MOVE.l a1,(a0)+
LEA waved2a,a1 : MOVE.l a1,(a0)+
LEA waved2b,a1 : MOVE.l a1,(a0)+
LEA waved2c,a1 : MOVE.l a1,(a0)+
LEA waved2d,a1 : MOVE.l a1,(a0)+
LEA waved2e,a1 : MOVE.l a1,(a0)+
LEA waved2f,a1 : MOVE.l a1,(a0)+
LEA waved30,a1 : MOVE.l a1,(a0)+
LEA waved31,a1 : MOVE.l a1,(a0)+
LEA waved32,a1 : MOVE.l a1,(a0)+
LEA waved33,a1 : MOVE.l a1,(a0)+
LEA waved34,a1 : MOVE.l a1,(a0)+
LEA waved35,a1 : MOVE.l a1,(a0)+
LEA waved36,a1 : MOVE.l a1,(a0)+
LEA waved37,a1 : MOVE.l a1,(a0)+
LEA waved38,a1 : MOVE.l a1,(a0)+
LEA waved39,a1 : MOVE.l a1,(a0)+
LEA waved3a,a1 : MOVE.l a1,(a0)+
LEA waved3b,a1 : MOVE.l a1,(a0)+
LEA waved3c,a1 : MOVE.l a1,(a0)+
LEA waved3d,a1 : MOVE.l a1,(a0)+
LEA waved3e,a1 : MOVE.l a1,(a0)+
LEA waved3f,a1 : MOVE.l a1,(a0)+
RTS
wavfilcontab:   Dc.l 0 ;00            ; for Scope
                Dc.l 0 ;01
                Dc.l 0 ;02
                Dc.l 0 ;03
                Dc.l 0 ;04
                Dc.l 0 ;05
                Dc.l 0 ;06
                Dc.l 0 ;07
                Dc.l 0 ;08
                Dc.l 0 ;09
                Dc.l 0 ;0a
                Dc.l 0 ;0b
                Dc.l 0 ;0c
                Dc.l 0 ;0d
                Dc.l 0 ;0e
                Dc.l 0 ;0f
                Dc.l 0 ;10
                Dc.l 0 ;11
                Dc.l 0 ;12
                Dc.l 0 ;13
                Dc.l 0 ;14
                Dc.l 0 ;15
                Dc.l 0 ;16
                Dc.l 0 ;17
                Dc.l 0 ;18
                Dc.l 0 ;19
                Dc.l 0 ;1a
                Dc.l 0 ;1b
                Dc.l 0 ;1c
                Dc.l 0 ;1d
                Dc.l 0 ;1e
                Dc.l 0 ;1f
                Dc.l 0 ;20
                Dc.l 0 ;21
                Dc.l 0 ;22
                Dc.l 0 ;23
                Dc.l 0 ;24
                Dc.l 0 ;25
                Dc.l 0 ;26
                Dc.l 0 ;27
                Dc.l 0 ;28
                Dc.l 0 ;29
                Dc.l 0 ;2a
                Dc.l 0 ;2b
                Dc.l 0 ;2c
                Dc.l 0 ;2d
                Dc.l 0 ;2e
                Dc.l 0 ;2f
                Dc.l 0 ;30
                Dc.l 0 ;31
                Dc.l 0 ;32
                Dc.l 0 ;33
                Dc.l 0 ;34
                Dc.l 0 ;35
                Dc.l 0 ;36
                Dc.l 0 ;37
                Dc.l 0 ;38
                Dc.l 0 ;39
                Dc.l 0 ;3a
                Dc.l 0 ;3b
                Dc.l 0 ;3c
                Dc.l 0 ;3d
                Dc.l 0 ;3e
                Dc.l 0 ;3f
pltclr:         MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;0
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;1
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;2
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;3
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;4
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;5
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;6
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;7
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;8
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;9
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;a
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;b
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;c
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;d
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;e
                ADD.l d0,a0
                MOVE.l d2,(a0)+         : MOVE.l d2,(a0)+ ;f
                ADD.l d0,a0
                SUBQ.w #1,d1            : BNE pltclr
                RTS
newloop:        ;calcpattern
;pos
 MOVE.w 0(a2,d4.w),(a3)+         : ADDQ.w #2,d4 : AND.w #$ff,d4 ;nx0
 MOVE.b (a0)+,d2 : MOVE.b d2,d3  : AND.w #63,d2 : ADD.w d2,d2
 MOVE.w 0(a1,d2.w),(a3)+
 ASR.b #6,d3     : AND.b #%11,d3 : ADD.b #23,d3 : MOVE.b d3,(a3)+
 MOVE.b (a0)+,d2 : AND.w #255,d2 : ADD.w d2,d2
 MOVE.w 0(a2,d2.w),(a3)+                         ;nx1
 MOVE.b (a0)+,d2 : MOVE.b d2,d3  : AND.w #63,d2 : ADD.w d2,d2
 MOVE.w 0(a1,d2.w),(a3)+
 ASR.b #6,d3     : AND.b #%11,d3 : ADD.b #23,d3 : MOVE.b d3,(a3)+
 MOVE.b (a0)+,d2 : AND.w #255,d2 : ADD.w d2,d2
 MOVE.w 0(a2,d2.w),(a3)+                         ;nx2
 MOVE.b (a0)+,d2 : MOVE.b d2,d3  : AND.w #63,d2 : ADD.w d2,d2
 MOVE.w 0(a1,d2.w),(a3)+
 ASR.b #6,d3     : AND.b #%11,d3 : ADD.b #23,d3 : MOVE.b d3,(a3)+
 MOVE.b (a0)+,d2 : AND.w #255,d2 : ADD.w d2,d2
 MOVE.w 0(a2,d2.w),(a3)+                         ;nx3
 MOVE.b (a0)+,d2 : MOVE.b d2,d3  : AND.w #63,d2 : ADD.w d2,d2
 MOVE.w 0(a1,d2.w),(a3)+
 ASR.b #6,d3     : AND.b #%11,d3 : ADD.b #23,d3 : MOVE.b d3,(a3)+
 MOVE.b (a0)+,d2 : AND.w #255,d2 : ADD.w d2,d2
 MOVE.w 0(a2,d2.w),(a3)+
 SUBQ.b #1,d0 : BNE newloop
 RTS
Iffdat:IncBin "ST64:64System/ed.iff"
openwindow:
  #poslistxy = (40*100)+4
  #gtxmod  = 202
  #gtxmod2 = 201
  #gtymod  = 56
  #gtxsub  = 70
  Use IntuiFont 0 : WbToScreen 0
  Window        0,0,11,309,125,$100E,"ST64 - Disk Menu",1,2 :
  GTString      0,0,4+31,2,262,13,"?",$0021,30,tunename$
  GTString      0,1,4+31,16,262,13,"By",$0021,30,autorname$
  GTString      0,2,4+31,30,262,13,"(c)",$0021,30,copyright$
  GTButton      0,3,4,45,363-#gtxsub,13,"\   /\\/^\^\/^- GO -v/\v\v/\\/   \",$0010
  GTButton      0,4,4,58,98,13,"Save Tune",$0010
  GTButton      0,5,102,58,99,13,"Load Tune",$0010
  GTButton      0,6,4,71,98,13,"Save Track",$0050
  GTButton      0,7,102,71,99,13,"Load Track",$0050
  GTButton      0,8,4,84,98,13,"Save Inst",$0050
  GTButton      0,9,102,84,99,13,"Load Inst",$0050
  GTButton      0,10,4,97,98,13,"Save Wave",$0010
  GTButton      0,11,102,97,99,13,"Load Wave",$0010
  GTCheckBox    0,12,#gtxmod2+2,125-#gtymod-10,26,11,"Shorten",$0062
  GTCycle       0,13,#gtxmod2,137-#gtymod-10,131-#gtxsub,13,"PAK",$0062,"Off|God|Lam"
  GTCycle       0,14,#gtxmod2,151-#gtymod-11,131-#gtxsub,13,"BUF",$0042,"Big|Med|Tny"
  GTButton      0,15,#gtxmod2,165-#gtymod-12,164-#gtxsub,13,"Minimize",$0050
  AttachGTList  0,0
  WTitle        "ST64 - Disk Menu","EDITOR FORBIDS TASKSWITCHIN'! RUN NO STUFF ACCESSIN' HD!!"
  Return
INCLUDE         "Blitz2:ST64/FatScope_fix.bbi"
calcvib:
MOVE.l pnvibtab,d0  : PutReg d0,work.l
;FillFirstBank (Period C-0)
Dim PerCalc.f (256) : i.w = -1
For w = 0 To 127 : PerCalc (w)     = i : i-1 : Next w : i = 128
For w = 0 To 127 : PerCalc (w+128) = i : i-1 : Next w
;Copy first
For w = 0 To 255 : Poke.b work,PerCalc(w)    : Next w
;Calc all others
For i = 0 To 47
For w.w  = 0 To 255
PerCalc.f(w) = PerCalc(w) * 0.9442
Poke.b work,Int(PerCalc(w))
work + 1
Next w
Next i
Return
