Advertisement
Guest User

Untitled

a guest
Jun 13th, 2017
795
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;**********************************************************
  2. ;*                                                        *
  3. ;*  Protracker Version 2.0 - Release A                    *
  4. ;*  Amiga Freelancers 1991                                *
  5. ;*                                                        *
  6. ;*  Based on Soundtracker V2.5 / Noisetracker x.x)        *
  7. ;*  Coded by Lars Hamre  (larsha@frodo.uninett)           *
  8. ;*  with some "Resource" help from Anders Hamre           *
  9. ;*  Thanks to Rune, and a hi there to Sven, Morten,       *
  10. ;*  Per and Torgeir.                                      *
  11. ;*                                                        *
  12. ;*--------------------------------------------------------*
  13. ;*  First Update   1.0 : 04/05-1990 First version         *
  14. ;* Middle Update   1.0 : 13/08-1990 -                     *
  15. ;*   Last Update   1.0 : 25/08-1990 -                     *
  16. ;* Final Version   1.0 : 26/08-1990 Released to Crusaders *
  17. ;* Rev. B Update 1 1.0B: 29/08-1990 -                     *
  18. ;* Rev. B Update 2 1.0B: 06/09-1990 Released to Crusaders *
  19. ;* Rev. C Update 1 1.0C: 16/10-1990 -                     *
  20. ;* Rev. C Update 2 1.0C: 18/10-1990 -                     *
  21. ;* Start V1.1A     1.1A: 23/10-1990 Second version        *
  22. ;* Rev. C Update 3 1.0C: 06/11-1990 Released to Crusaders *
  23. ;* Rev. A Update 1 1.1A: 15/11-1990 InputEvent Handler    *
  24. ;* Rev. A Update 2 1.1A: 21/11-1990 RunBack Hunk, KbdBuf. *
  25. ;* Rev. A Update 3 1.1A: 02/12-1990 iffld,loopspr,scopefix*
  26. ;* Rev. A Update 4 1.1A: 05/12-1990 virusattack,dirbrowse *
  27. ;* Rev. A Update 5 1.1A: 20/12-1990 Testversion to Awesome*
  28. ;* Rev. A Update 6 1.1A: 27/12-1990 Party-release (w/bugs)*
  29. ;* Rev. B Update 1 1.1B: 01/01-1991 Bugfixing...          *
  30. ;* Rev. B Update 2 1.1B: 05/01-1991 ---                   *
  31. ;* Rev. B Update 3 1.1B: 08/01-1991 ScopeGfx, loadbug.    *
  32. ;* Start V2.0A     2.0A: 12/02-1991 Wow! a new version... *
  33. ;**********************************************************
  34.  
  35. ; FileFormat
  36. sd_songname EQU 0
  37. sd_sampleinfo   EQU 20
  38. sd_numofpatt    EQU 950
  39. sd_pattpos  EQU 952
  40. sd_mahokakt EQU 1080
  41. sd_patterndata  EQU 1084
  42.  
  43. ; audXtemp offsets
  44. n_note      EQU 0  ; W
  45. n_cmd       EQU 2  ; W
  46. n_cmdlo     EQU 3  ; low B of cmd
  47. n_start     EQU 4  ; L
  48. n_length    EQU 8  ; W
  49. n_loopstart EQU 10 ; L
  50. n_replen    EQU 14 ; W
  51. n_period    EQU 16 ; W
  52. n_finetune  EQU 18 ; B
  53. n_volume    EQU 19 ; B
  54. n_dmabit    EQU 20 ; W
  55. n_toneportdirec EQU 22 ; B
  56. n_toneportspeed EQU 23 ; B
  57. n_wantedperiod  EQU 24 ; W
  58. n_vibratocmd    EQU 26 ; B
  59. n_vibratopos    EQU 27 ; B
  60. n_tremolocmd    EQU 28 ; B
  61. n_tremolopos    EQU 29 ; B
  62. n_wavecontrol   EQU 30 ; B
  63. n_glissfunk EQU 31 ; B
  64. n_sampleoffset  EQU 32 ; B
  65. n_pattpos   EQU 33 ; B
  66. n_loopcount EQU 34 ; B
  67. n_funkoffset    EQU 35 ; B
  68. n_wavestart EQU 36 ; L
  69. n_reallength    EQU 40 ; W
  70. n_trigger   EQU 42 ; B
  71. n_samplenum EQU 43 ; B
  72.  
  73. ; Exec Library Offsets
  74. LVOFindTask EQU -294
  75. LVOFindName EQU -276
  76. LVOForbid   EQU -132
  77. LVOPermit   EQU -138
  78. LVOAddPort  EQU -354
  79. LVORemPort  EQU -360
  80. LVOWaitPort EQU -384
  81. LVOOpenLibrary  EQU -552
  82. LVOCloseLibrary EQU -414
  83. LVOOpenDevice   EQU -444
  84. LVOCloseDevice  EQU -450
  85. LVODoIO     EQU -456
  86. LVOGetMsg   EQU -372
  87. LVOReplyMsg EQU -378
  88. LVOAllocMem EQU -198
  89. LVOAllocAbs EQU -204
  90. LVOFreeMem  EQU -210
  91. LVOAvailMem EQU -216
  92. LVOAddIntServer EQU -168
  93. LVORemIntServer EQU -174
  94. LVOOpenResource EQU -498
  95. LVOSetFunction  EQU -420
  96.  
  97. ; CIA Resource Offsets
  98. AddICRVector    EQU -6
  99. RemICRVector    EQU -12
  100.  
  101. ; DOS Library Offsets
  102. LVOOpen     EQU -30
  103. LVOClose    EQU -36
  104. LVORead     EQU -42
  105. LVOWrite    EQU -48
  106. LVODeleteFile   EQU -72
  107. LVORename   EQU -78
  108. LVOLock     EQU -84
  109. LVOUnLock   EQU -90
  110. LVOExamine  EQU -102
  111. LVOExNext   EQU -108
  112. LVOInfo     EQU -114
  113. LVOSeek     EQU -66
  114. LVOCreateDir    EQU -120
  115. LVODateStamp    EQU -192
  116. LVODelay    EQU -198
  117. LVOExecute  EQU -222
  118. LVOUnLoadSeg    EQU -156
  119.  
  120. ; Intuition Library Offsets
  121. LVOAutoRequest    EQU   -348
  122. LVODisplayAlert   EQU   -90  
  123. LVOOpenWorkbench  EQU   -210
  124. LVOCloseWorkbench EQU   -78
  125. LVOWBenchToFront  EQU   -342
  126.  
  127. ; Graphics Library Offsets
  128. LVOBltBitMap    EQU -30
  129. LVOWaitBlit EQU -228
  130. LVOOwnBlitter   EQU -456
  131. LVODisownBlitter EQU    -462
  132.  
  133. ; DateStamp
  134. ofib_DateStamp  EQU $84
  135. ds_Days     EQU $00
  136. ds_Minute   EQU $04
  137. ds_Tick     EQU $08
  138.  
  139. ; Memory Alloc Flags
  140. MEMF_PUBLIC EQU $0001
  141. MEMF_CHIP   EQU $0002
  142. MEMF_FAST   EQU $0004
  143. MEMF_CLEAR  EQU $10000
  144. MEMF_LARGEST    EQU $20000
  145.  
  146. ; IO Block Offsets
  147. IO_COMMAND  EQU $1C
  148. IO_ACTUAL   EQU $20
  149. IO_LENGTH   EQU $24
  150. IO_DATA     EQU $28
  151. IO_OFFSET   EQU $2C
  152.  
  153. ; Device Commands
  154. CMD_READ    EQU $2
  155. CMD_WRITE   EQU $3
  156. CMD_UPDATE  EQU $4
  157. TD_MOTOR    EQU $9
  158. TD_FORMAT   EQU $B
  159. TD_CHANGESTATE  EQU $E
  160. TD_PROTSTATUS   EQU $F
  161.  
  162.  
  163. DirNameLength       EQU 30
  164. ConfigFileSize      EQU 1024
  165. KeyBufSize      EQU 20
  166.  
  167. ;**************************************************************************
  168.  
  169. ; RunBack Hunk for Protracker
  170. ; Written by Lars Hamre/Amiga Freelancers 1990
  171. ; NOTE: This version will not pass arguments or WBMsg to the new Process!
  172.  
  173.     SECTION ptrunback,CODE
  174.  
  175. rb_HunkStart
  176.     SUB.L   A1,A1
  177.     MOVE.L  4.W,A6
  178.     JSR -294(A6)    ; FindTask
  179.     MOVE.L  D0,A4
  180.     MOVEQ   #0,D0
  181.     TST.L   $AC(A4)     ; pr_CLI
  182.     BNE.S   rb_FromCLI
  183.     LEA $5C(A4),A0  ; pr_MsgPort
  184.     JSR -384(A6)    ; WaitPort
  185.     LEA $5C(A4),A0
  186.     JSR -372(A6)    ; GetMsg
  187. rb_FromCLI
  188.     MOVE.L  D0,D7       ; D7 = WBmsg
  189.     LEA rb_DOSname(PC),A1
  190.     MOVEQ   #0,D0
  191.     JSR -552(A6)    ; OpenLibrary
  192.     TST.L   D0
  193.     BEQ.S   rb_dexit
  194.     MOVE.L  D0,A5
  195.     EXG A5,A6       ; A6=DOS
  196.     MOVE.L  $98(A4),D1  ; pr_CurrentDir
  197.     JSR -96(A6)     ; DupLock
  198.     MOVE.L  D0,rb_CurrentDir
  199.     EXG A5,A6 ; A6=exec
  200.     JSR -132(A6) ; Forbid
  201.     MOVE.L  #rb_ProgName,D1
  202.     MOVEQ.L #0,D2
  203.     MOVE.B  9(A4),D2    ; priority
  204.     LEA rb_HunkStart-4(PC),A0
  205.     MOVE.L  (A0),D3     ; Ptr to next segment
  206.     CLR.L   (A0)        ; Unlink next segment
  207.     MOVE.L  #4000,D4
  208.     EXG A5,A6       ; A6=DOS
  209.     JSR -138(A6)    ; CreateProc
  210.     EXG A5,A6       ; A6=exec
  211.     JSR -138(A6)    ; Permit
  212.     MOVE.L  A5,A1
  213.     JSR -414(A6)    ; CloseLibrary
  214. rb_dexit
  215.     TST.L   D7
  216.     BEQ.S   rb_exit
  217.     JSR -132(A6)    ; Forbid
  218.     MOVE.L  D7,A1
  219.     JSR -378(A6)    ; ReplyMsg
  220. rb_exit MOVEQ   #0,D0
  221.     RTS
  222.  
  223. rb_DOSname  dc.b    "dos.library",0
  224.  
  225. ; End of runback hunk
  226.  
  227. ;******************** CODE HUNK *********************
  228.  
  229.     SECTION ptcode,CODE
  230.  
  231. START   MOVE.L  4.W,A6
  232.     SUB.L   A1,A1
  233.     JSR LVOFindTask(A6)
  234.     MOVE.L  D0,PTProcess
  235.     BSR.S   Main
  236.     MOVE.L  4.W,A6
  237.     JSR LVOForbid(A6)
  238.     MOVE.L  DOSbase,A6
  239.     MOVE.L  rb_CurrentDir(PC),D1
  240.     JSR LVOUnLock(A6)
  241.     LEA START-4(PC),A0
  242.     MOVE.L  A0,D1
  243.     LSR.L   #2,D1
  244.     JSR LVOUnLoadSeg(A6)
  245.     MOVEQ   #0,D0
  246.     RTS
  247.  
  248. Main    MOVE.L  SP,StackSave
  249.     BSR OpenLotsOfThings
  250.     BSR SetVBInt
  251.     BSR SetMusicInt
  252.     BSR SetInputHandler
  253.     BSR SetAutoReq
  254. ;   BSR SetDispAlert
  255.     BSR SetPatternPos
  256.     BSR SetNormalPtrCol
  257.     BSR StorePtrCol
  258.     BSR RedrawToggles
  259.     BSR DoShowFreeMem
  260.     BSR SetTempo
  261.     BSR SetCopList
  262.     BSR CheckInitError
  263.     LEA VersionText(PC),A0
  264.     JSR ShowStatusText
  265. MainLoop
  266.     BSR DoKeyBuffer
  267.     BSR CheckTransKeys
  268.     BSR CheckCtrlKeys
  269.     BSR CheckAltKeys
  270.     BSR CheckKeyboard
  271.     BSR CheckF1_F2
  272.     BSR CheckF3_F5
  273.     BSR CheckF6_F10
  274.     BSR CheckPlayKeys
  275.     BSR CheckHelpKey
  276.     BSR ArrowKeys2
  277.     BSR ShowTimer
  278.     BSR ShowFreeMem
  279.     BSR CheckBlockPos
  280.     BSR CheckSampleLength
  281.     BSR CheckRedraw
  282.     JSR CheckMIDIin
  283.     BTST    #6,$BFE001
  284.     BNE.S   MainLoop    ; Loop if not pressed
  285.     TST.W   CurrScreen
  286.     BNE.S   MainSkip
  287.     MOVE.W  #1,notogfl
  288.     BSR DisplayMainScreen
  289.     JSR ShowAllRight
  290.     BSR WaitForButtonUp
  291. MainSkip
  292.     BSR ArrowKeys
  293.     BRA CheckGadgets
  294.  
  295. notogfl     dc.w 0
  296. PTProcess   dc.l 0
  297. rb_CurrentDir   dc.l 0
  298. rb_Progname dc.b "PT2.0A",0
  299. VersionText dc.b 'V2.0 - RELEASE A',0
  300.  
  301. CheckInitError
  302.     MOVE.B  InitError,D0
  303.     BEQ Return1
  304.     BTST    #0,D0
  305.     BEQ.S   cieskp1
  306.     JSR PLSTMemErr
  307. cieskp1 MOVE.B  InitError,D0
  308.     BTST    #1,D0
  309.     BEQ.S   cieskp2
  310.     JSR PLSTOpenErr
  311.     JSR FreePLST
  312. cieskp2 MOVE.B  InitError,D0
  313.     BTST    #2,D0
  314.     BEQ.S   cieskp3
  315.     BSR ConfigErr
  316. cieskp3 MOVE.B  InitError,D0
  317.     BTST    #3,D0
  318.     BEQ Return1
  319.     BSR ConfigErr2
  320.     BSR SetNormalPtrCol
  321.     BRA StorePtrCol
  322.  
  323. CheckRedraw
  324.     TST.B   UpdateTempo
  325.     BEQ.S   chkredr
  326.     CLR.B   UpdateTempo
  327.     BSR SetTempo
  328. chkredr CMP.L   #'patp',RunMode
  329.     BNE Return1
  330.     JSR ShowPosition
  331.     TST.B   PattRfsh
  332.     BEQ Return1
  333.     MOVE.L  PattRfshNum,PatternNumber
  334.     JMP RedrawPattern
  335.  
  336. ;---- Cleanup upon exit from PT ----
  337.  
  338. ExitCleanup
  339.     JSR StopIt
  340.     SF  EdEnable
  341.     BSR EscPressed
  342.     BSR EscPressed
  343.     BSR ResetVBInt
  344.     BSR ResetMusicInt
  345.     BSR ResetInputHandler
  346.     BSR ResetAutoReq
  347. ;   BSR ResetDispAlert
  348.     BSR ResetCopList
  349.     JSR CloseMIDI
  350.     JSR FreeCopyBuf
  351. errorexit1
  352. errorexit2
  353.     MOVE.L  StackSave,SP
  354.     MOVE.L  4.W,A6
  355.     MOVE.L  GfxBase,A1
  356.     JSR LVOCloseLibrary(A6)
  357.     MOVE.L  IntuitionBase,A1
  358.     JSR LVOCloseLibrary(A6)
  359.     MOVE.L  DOSbase,A1
  360.     JSR LVOCloseLibrary(A6)
  361.  
  362.     MOVE.L  TextBplPtr,D1
  363.     BEQ.S   exex1
  364.     MOVE.L  D1,A1
  365.     MOVE.L  #27760,D0
  366.     JSR LVOFreeMem(A6)
  367. exex1   MOVE.L  SongDataPtr,D1
  368.     BEQ.S   exex2
  369.     MOVE.L  D1,A1
  370.     MOVE.L  #70716,D0
  371.     JSR LVOFreeMem(A6)
  372. exex2   BSR FreeDirMem
  373.     BSR GiveBackInstrMem
  374.     JSR FreePLST
  375.     JSR TurnOffVoices
  376.     BCLR    #1,$BFE001
  377.     MOVE.B  LEDStatus,D0
  378.     AND.B   #2,D0
  379.     OR.B    D0,$BFE001 ; Restore LED Status
  380.     MOVEQ   #0,D0
  381. Return1 RTS
  382.  
  383. ;---- Open Lots Of Things ----
  384.  
  385. OpenLotsOfThings
  386.     MOVE.B  $BFE001,LEDStatus
  387.     BSET    #1,$BFE001
  388.     JSR TurnOffVoices
  389.     MOVE.L  4.W,A6
  390.     LEA DOSname(PC),A1      ; Open DOS library
  391.     MOVEQ   #0,D0
  392.     JSR LVOOpenLibrary(A6)
  393.     MOVE.L  D0,DOSbase
  394.     LEA GraphicsName(PC),A1 ; Open graphics library
  395.     MOVEQ   #0,D0
  396.     JSR LVOOpenLibrary(A6)
  397.     MOVE.L  D0,GfxBase
  398.     LEA IntuitionName(PC),A1    ; Open Intuition library
  399.     MOVEQ   #0,D0
  400.     JSR LVOOpenLibrary(A6)
  401.     MOVE.L  D0,IntuitionBase
  402.  
  403.     MOVE.L  #27760,D0       ; Alloc 27k CHIP textbpl
  404.     MOVE.L  #MEMF_CHIP!MEMF_CLEAR,D1
  405.     JSR LVOAllocMem(A6)
  406.     MOVE.L  D0,TextBplPtr
  407.     BEQ errorexit1
  408.     MOVE.W  D0,NoteBplptrLow    ; set low word
  409.     SWAP    D0
  410.     MOVE.W  D0,NoteBplptrHigh   ; set high word
  411.  
  412.     MOVE.L  #70716,D0       ; Alloc 70k patternmemory
  413.     MOVE.L  #MEMF_PUBLIC!MEMF_CLEAR,D1
  414.     JSR LVOAllocMem(A6)
  415.     MOVE.L  D0,SongDataPtr
  416.     BEQ errorexit2
  417.  
  418.     MOVE.L  D0,A0
  419.     LEA $0014(A0),A0
  420.     MOVEQ   #30,D0
  421. alotloop1
  422.     MOVE.W  #1,$001C(A0)
  423.     LEA $001E(A0),A0
  424.     DBRA    D0,alotloop1
  425.     MOVE.L  SongDataPtr,A0
  426.     MOVE.W  #$017F,sd_numofpatt(A0)
  427.     MOVE.L  #'M.K.',sd_mahokakt(A0) ; M.K. again...
  428.  
  429.     MOVEQ   #6,D0
  430.     MOVE.L  D0,CurrSpeed
  431.     MOVE.W  #1,PEDpos
  432.     MOVE.L  #ModulesPath2,PathPtr
  433.     MOVE.L  #CopList,CopListPtr
  434.     MOVE.L  #CopListBitplanes,CopListBplPtr
  435.     MOVE.L  #CopListColors,CopListColorPtr
  436.     MOVE.L  #CopListBpl4,CopListBpl4Ptr
  437.     MOVE.L  #KbdTransTable2,KeyTransTabPtr
  438.     MOVE.L  #NoteNames1,NoteNamesPtr
  439.     MOVE.L  #VUMeterColors,TheRightColors
  440.  
  441.     MOVE.L  #BitplaneData,D0 ; Set pointers to bitplane data
  442.     LEA CopListBitplanes,A1
  443.     MOVE.W  D0,6(A1)
  444.     SWAP    D0
  445.     MOVE.W  D0,2(A1)
  446.     SWAP    D0
  447.     ADD.L   #10240,D0
  448.     MOVE.W  D0,14(A1)
  449.     SWAP    D0
  450.     MOVE.W  D0,10(A1)
  451.     BSR SetDefSpritePtrs
  452.     BSR UpdateCursorPos
  453.     JSR RedrawPattern
  454.     JSR ShowPosition
  455.     JSR ShowSongLength
  456.     MOVE.W  #1,InsNum
  457.     JSR ShowSampleInfo
  458.  
  459.     LEA TopMenusPos,A0
  460.     LEA TopMenusBuffer,A1
  461.     MOVEQ   #43,D0
  462. stmloop MOVEQ   #24,D1
  463. stmloop2
  464.     MOVE.B  (A0)+,(A1)+
  465.     MOVE.B  $27FF(A0),$044B(A1)
  466.     DBRA    D1,stmloop2
  467.     LEA 15(A0),A0
  468.     DBRA    D0,stmloop
  469.  
  470.     BSR DoResetAll
  471.     BSR DoLoadConfig
  472.     JSR DoLoadPLST
  473. ChangeCopList
  474.     TST.W   SamScrEnable
  475.     BNE Return1
  476.     BSR SetupAnaCols
  477. SetupVUCols
  478.     TST.W   SamScrEnable
  479.     BNE Return1
  480.     LEA CopListMark2,A0 ; VUmeter coloring
  481.     MOVE.W  #$BA07,D5   ; Start position
  482.     LEA VUmeterColors,A5
  483.     MOVEQ   #47,D7  ; Change 48 lines
  484. alotlp4 MOVE.W  D5,(A0)+
  485.     MOVE.W  #$FFFE,(A0)+
  486.     LEA VUmeterColRegs(PC),A1
  487.     MOVEQ   #1,D6
  488. alotlp5 MOVE.W  (A5),D4
  489.     MOVE.W  (A1)+,(A0)+
  490.     MOVE.W  #3,FadeX
  491.     MOVE.W  D4,D0
  492.     BSR FadeCol
  493.     MOVE.W  D0,(A0)+
  494.     MOVE.W  (A1)+,(A0)+
  495.     MOVE.W  D4,(A0)+
  496.     MOVE.W  (A1)+,(A0)+
  497.     MOVE.W  #-3,FadeX
  498.     MOVE.W  D4,D0
  499.     BSR FadeCol
  500.     MOVE.W  D0,(A0)+
  501.     DBRA    D6,alotlp5
  502.     ADDQ.W  #2,A5
  503.     ADD.W   #$0100,D5   ; Next line...
  504.     DBRA    D7,alotlp4
  505.     RTS
  506.  
  507. VUmeterColRegs
  508.     dc.w    $01B2,$01B4,$01B6,$01BA,$01BC,$01BE
  509.  
  510. CopListBpl4Ptr  dc.l    0
  511. CopListPtr  dc.l    0
  512. CopListBplPtr   dc.l    0
  513. CopListColorPtr dc.l    0
  514. DOSname     dc.b    'dos.library',0
  515. IntuitionName   dc.b    'intuition.library',0
  516. GraphicsName    dc.b    'graphics.library',0,0
  517.  
  518. SetupAnaCols
  519.     LEA CopListAnalyzer,A5
  520.     MOVE.W  ColorTable+12,D2
  521.     MOVEQ   #39,D0      ; Change col 40 lines
  522.     MOVE.W  #$687D,D1   ; Start pos
  523. sacloop MOVE.W  D1,(A5)+    ; Set wait
  524.     MOVE.W  #$FFFE,(A5)+
  525.     MOVE.W  #$018C,(A5)+    ; Set analyzer color
  526.     ADDQ.L  #2,A5
  527.     ADD.W   #$0060,D1   ; Move x-pos
  528.     MOVE.W  D1,(A5)+    ; Wait
  529.     MOVE.W  #$FFFE,(A5)+
  530.     MOVE.W  #$018C,(A5)+    ; Set text color
  531.     MOVE.W  D2,(A5)+
  532.     ADD.W   #$0100,D1   ; Next line...
  533.     SUB.W   #$0060,D1
  534.     DBRA    D0,sacloop
  535.     TST.B   DisableAnalyzer
  536.     BNE.S   ClearAnalyzerColors
  537. SetAnalyzerColors
  538.     LEA CopListAnalyzer+6,A1
  539.     LEA AnalyzerColors,A0
  540.     MOVEQ   #39,D0  ; 40 lines
  541. sanclop MOVE.W  (A0)+,(A1)
  542.     LEA 16(A1),A1
  543.     DBRA    D0,sanclop
  544.     RTS
  545.  
  546. ClearAnalyzerColors
  547.     LEA CopListAnalyzer+6,A0
  548.     MOVE.W  ColorTable+12,D1
  549.     MOVEQ   #39,D0  ; 40 lines.
  550. cacloop MOVE.W  D1,(A0)
  551.     LEA 16(A0),A0
  552.     DBRA    D0,cacloop
  553.     RTS
  554.  
  555. SetSamSpritePtrs
  556.     MOVE.L  #LoopSpriteData1,Ch1SpritePtr
  557.     MOVE.L  #LoopSpriteData2,Ch2SpritePtr
  558.     MOVE.L  #PlayPosSpriteData,Ch3SpritePtr
  559.     MOVE.L  #NoSpriteData,Ch4SpritePtr
  560.     BRA.S   sdsp2
  561. SetDefSpritePtrs
  562.     MOVE.L  #VUSpriteData1,Ch1SpritePtr
  563.     MOVE.L  #VUSpriteData2,Ch2SpritePtr
  564.     MOVE.L  #VUSpriteData3,Ch3SpritePtr
  565.     MOVE.L  #VUSpriteData4,Ch4SpritePtr
  566. sdsp2   MOVE.L  #CursorSpriteData,CursorPosPtr
  567.     MOVE.L  #PointerSpriteData,PointerSpritePtr
  568.     MOVE.L  #LineCurSpriteData,LineCurPosPtr
  569.     MOVE.L  #NoSpriteData,NoSpritePtr
  570.     MOVE.L  PointerSpritePtr,SpritePtrsPtr
  571.  
  572.     LEA SpritePtrsPtr,A0    ; Set pointers to spritedata
  573.     LEA CopList,A1
  574.     MOVEQ   #15,D2
  575. alotloop2
  576.     MOVE.W  (A0)+,2(A1)
  577.     ADDQ.L  #4,A1
  578.     DBRA    D2,alotloop2
  579.     RTS
  580.  
  581. PointerSpritePtr
  582.     dc.l    0
  583.  
  584. ;---- AutoRequest() ----
  585.  
  586. SetAutoReq
  587.     MOVE.L  4.W,A6
  588.     JSR LVOForbid(A6)
  589.     MOVE.L  IntuitionBase,A1
  590.     MOVE.L  #NewAutoRequest,D0
  591.     MOVE.L  #LVOAutoRequest,A0
  592.     JSR LVOSetFunction(A6)
  593.     MOVE.L  D0,AutoReqSave
  594.     MOVE.L  D0,xyzza+2
  595.     JSR LVOPermit(A6)
  596.     RTS
  597.  
  598. ResetAutoReq
  599.     MOVE.L  4.W,A6
  600.     MOVE.L  IntuitionBase,A1
  601.     MOVE.L  AutoReqSave(PC),D0
  602.     MOVE.L  #LVOAutoRequest,A0
  603.     JSR LVOSetFunction(A6)
  604.     RTS
  605.  
  606. NewAutoRequest
  607.     TST.W   MountFlag
  608.     BNE PositiveReturn
  609.     TST.B   AutoReqRunning
  610.     BNE.S   xyzza
  611.     ST  AutoReqRunning
  612.     MOVE.L  A0,-(SP)
  613.     MOVE.L  GfxBase,A0
  614.     MOVE.L  38(A0),$DFF080
  615.     MOVE.L  (SP)+,A0
  616. xyzzy   JSR $0
  617.     MOVE.L  #CopList,$DFF080
  618.     SF  AutoReqRunning
  619.     RTS
  620. xyzza   JMP $0
  621.  
  622. AutoReqSave EQU xyzzy+2
  623.  
  624. ;---- DisplayAlert() ----
  625.  
  626. SetDispAlert
  627.     MOVE.L  IntuitionBase,A0
  628.     MOVE.L  LVODisplayAlert+2(A0),DispAlertSave
  629.     MOVE.L  #NewDispAlert,LVODisplayAlert+2(A0)
  630.     RTS
  631.  
  632. ResetDispAlert
  633.     MOVE.L  IntuitionBase,A0
  634.     MOVE.L  DispAlertSave,LVODisplayAlert+2(A0)
  635.     RTS
  636.  
  637. NewDispAlert
  638.     MOVEM.L D0-D7/A0-A6,-(SP)
  639.     LEA SoftFailText(PC),A1
  640.     ADDQ.L  #3,A0
  641.     MOVEQ   #16,D0
  642. ndaloop CMP.B   (A1)+,(A0)+
  643.     BNE.S   ndaexit
  644.     DBRA    D0,ndaloop
  645.     BSR FindAdr
  646.     TST.L   D0
  647.     BEQ.S   ndaexit
  648.     MOVE.L  D0,A1
  649.     MOVE.L  SongDataPtr,A0
  650.     MOVE.L  #70716,D0
  651. ndalop2 MOVE.B  (A0)+,D1
  652.     MOVE.W  D1,$DFF180
  653.     MOVE.B  D1,(A1)+
  654.     SUBQ.L  #1,D0
  655.     BNE.S   ndalop2
  656. ndaexit MOVEM.L (SP)+,D0-D7/A0-A6
  657. xyzzy2  JMP $FC0000
  658.        
  659. DispAlertSave EQU xyzzy2+2
  660. SoftFailText    dc.b    "Software Failure.",0
  661.  
  662. ;---- Copper List ----
  663.  
  664. SetCopList
  665.     MOVE.L  #CopList,$DFF080
  666.     RTS
  667.  
  668. ResetCopList
  669.     MOVE.L  GfxBase,A0
  670.     MOVE.L  38(A0),$DFF080
  671.     RTS
  672.  
  673. ;---- Vertical Blank Interrupt ----
  674.  
  675. SetVBInt
  676.     MOVEQ   #5,D0
  677.     LEA VBIntServer,A1
  678.     MOVE.L  4.W,A6
  679.     JSR LVOAddIntServer(A6)
  680.     RTS
  681.  
  682. ResetVBInt
  683.     MOVEQ   #5,D0
  684.     LEA VBIntServer,A1
  685.     MOVE.L  4.W,A6
  686.     JSR LVORemIntServer(A6)
  687.     RTS
  688.  
  689. vbint   MOVEM.L D0-D7/A0-A6,-(SP)
  690.     BSR UpdatePointerPos
  691.     BSR VUmeters
  692.     BSR Scope
  693.     BSR SpecAnaInt
  694.     BSR ArrowKeys
  695.     BSR CheckKeyRepeat
  696.     BSR UpdateTicks
  697.     MOVEM.L (SP)+,D0-D7/A0-A6
  698.     RTS
  699.  
  700. VBIntServer
  701.     dc.l 0,0
  702.     dc.b 2,0 ; type, priority
  703.     dc.l vbintname
  704.     dc.l 0,vbint
  705.  
  706. vbintname
  707.     dc.b "Protracker VBlank",0
  708.  
  709. ;---- Music Interrupt ----
  710.  
  711. SetMusicInt
  712.     TST.B   IntMode
  713.     BNE.S   SetCIAInt
  714.     MOVEQ   #5,D0
  715.     LEA MusicIntServer,A1
  716.     MOVE.L  4.W,A6
  717.     JSR LVOAddIntServer(A6)
  718.     RTS
  719.  
  720. ResetMusicInt
  721.     TST.B   IntMode
  722.     BNE ResetCIAInt
  723.     MOVEQ   #5,D0
  724.     LEA MusicIntServer,A1
  725.     MOVE.L  4.W,A6
  726.     JSR LVORemIntServer(A6)
  727.     RTS
  728.  
  729. MusicIntServer
  730.     dc.l 0,0
  731.     dc.b 2,1 ; type, priority
  732.     dc.l musintname
  733.     dc.l 0,IntMusic
  734.  
  735. musintname  dc.b "Protracker MusicInt",0
  736.  
  737. ;---- CIA Interrupt ----
  738.  
  739. ciatalo = $400
  740. ciatahi = $500
  741. ciatblo = $600
  742. ciatbhi = $700
  743. ciacra  = $E00
  744. ciacrb  = $F00
  745.  
  746. SetCIAInt
  747.     MOVEQ   #2,D6
  748.     LEA $BFD000,A5
  749.     MOVE.B  #'b',CIAAname+3
  750. SetCIALoop
  751.     MOVEQ   #0,D0
  752.     LEA CIAAname(PC),A1
  753.     MOVE.L  4.W,A6
  754.     JSR LVOOpenResource(A6)
  755.     MOVE.L  D0,CIAAbase
  756.     BEQ Return1
  757.     MOVE.L  D0,A6
  758.  
  759.     MOVE.L  GfxBase,A0
  760.     MOVE.W  206(A0),D0  ; DisplayFlags
  761.     BTST    #2,D0       ; PAL?
  762.     BEQ.S   WasNTSC
  763.     MOVE.L  #1773447,D7 ; PAL
  764.     BRA.S   sciask
  765. WasNTSC MOVE.L  #1789773,D7 ; NTSC
  766. sciask  MOVE.L  D7,TimerValue
  767.     DIVU    #125,D7 ; Default to normal 50 Hz timer
  768.  
  769.     CMP.W   #2,D6
  770.     BEQ.S   TryTimerA
  771. TryTimerB
  772.     LEA MusicIntServer(PC),A1
  773.     MOVEQ   #1,D0   ; Bit 1: Timer B
  774.     JSR AddICRVector(A6)
  775.     MOVE.L  #1,TimerFlag
  776.     TST.L   D0
  777.     BNE.S   CIAError
  778.     MOVE.L  A5,CIAAaddr
  779.     MOVE.B  D7,ciatblo(A5)
  780.     LSR.W   #8,D7
  781.     MOVE.B  D7,ciatbhi(A5)
  782.     BSET    #0,ciacrb(A5)
  783.     BRA SetTempo
  784.  
  785. TryTimerA
  786.     LEA MusicIntServer(PC),A1
  787.     MOVEQ   #0,D0   ; Bit 0: Timer A
  788.     JSR AddICRVector(A6)
  789.     CLR.L   TimerFlag
  790.     TST.L   D0
  791.     BNE.S   CIAError
  792.     MOVE.L  A5,CIAAaddr
  793.     MOVE.B  D7,ciatalo(A5)
  794.     LSR.W   #8,D7
  795.     MOVE.B  D7,ciatahi(A5)
  796.     BSET    #0,ciacra(A5)
  797.     BRA SetTempo
  798.  
  799. CIAError
  800.     MOVE.B  #'a',CIAAname+3
  801.     LEA $BFE001,A5
  802.     SUBQ.W  #1,D6
  803.     BNE SetCIALoop
  804.     CLR.L   CIAAbase
  805.     RTS
  806.  
  807. ResetCIAInt
  808.     MOVE.L  CIAAbase(PC),D0
  809.     BEQ Return1
  810.     CLR.L   CIAAbase
  811.     MOVE.L  D0,A6
  812.     MOVE.L  CIAAaddr(PC),A5
  813.     TST.L   TimerFlag
  814.     BEQ.S   ResTimerA
  815.  
  816.     BCLR    #0,ciacrb(A5)
  817.     MOVEQ   #1,D0
  818.     BRA.S   RemInt
  819.  
  820. ResTimerA
  821.     BCLR    #0,ciacra(A5)
  822.     MOVEQ   #0,D0
  823. RemInt  LEA MusicIntServer(PC),A1
  824.     MOVEQ   #0,d0
  825.     JSR RemICRVector(A6)
  826.     RTS
  827.  
  828. CIAAname    dc.b 'ciaa.resource',0
  829. CIAAbase    dc.l 0
  830. TimerFlag   dc.l 0
  831. TimerValue  dc.l 0
  832.  
  833. ;---- Tempo ----
  834.  
  835. TempoGadg
  836.     CMP.W   #60,D0
  837.     BHS Return1
  838.     CMP.W   #44,D0
  839.     BHS.S   TemDown
  840. TemUp   MOVE.W  RealTempo(PC),D0
  841.     ADDQ.W  #1,D0
  842.     BTST    #2,$DFF016
  843.     BNE.S   teupsk
  844.     ADDQ.W  #8,D0
  845.     ADDQ.W  #1,D0
  846. teupsk  CMP.W   #255,D0
  847.     BLS.S   teposk
  848.     MOVE.W  #255,D0
  849. teposk  MOVE.W  D0,RealTempo
  850.     BSR SetTempo
  851.     BRA Wait_4000
  852.  
  853. TemDown MOVE.W  RealTempo(PC),D0
  854.     SUBQ.W  #1,D0
  855.     BTST    #2,$DFF016
  856.     BNE.S   tednsk
  857.     SUBQ.W  #8,D0
  858.     SUBQ.W  #1,D0
  859. tednsk  CMP.W   #32,D0
  860.     BHS.S   teposk
  861.     MOVE.W  #32,D0
  862.     BRA.S   teposk
  863.  
  864.  
  865. ChangeTempo
  866.     CMP.W   #94,D0
  867.     BHS.S   TempoDown
  868.     CMP.W   #80,D0
  869.     BHS.S   TempoUp
  870.     RTS
  871.  
  872. TempoUp MOVE.W  Tempo,D0
  873.     ADDQ.W  #1,D0
  874.     BTST    #2,$DFF016
  875.     BNE.S   temupsk
  876.     ADDQ.W  #8,D0
  877.     ADDQ.W  #1,D0
  878. temupsk CMP.W   #255,D0
  879.     BLS.S   temposk
  880.     MOVE.W  #255,D0
  881. temposk MOVE.W  D0,Tempo
  882.     MOVE.W  D0,RealTempo
  883.     BSR.S   ShowTempo
  884.     BSR.S   SetTempo
  885.     BRA Wait_4000
  886.  
  887. TempoDown
  888.     MOVE.W  Tempo,D0
  889.     SUBQ.W  #1,D0
  890.     BTST    #2,$DFF016
  891.     BNE.S   temdnsk
  892.     SUBQ.W  #8,D0
  893.     SUBQ.W  #1,D0
  894. temdnsk CMP.W   #32,D0
  895.     BHS.S   temposk
  896.     MOVE.W  #32,D0
  897.     BRA.S   temposk
  898.  
  899. ShowTempo
  900.     MOVE.W  #607,TextOffset
  901.     MOVE.W  RealTempo(PC),WordNumber
  902.     JMP Print3DecDigits
  903.  
  904. SetTempo
  905.     MOVEQ   #125,D0
  906.     MOVE.L  CIAAbase(PC),D1
  907.     BEQ.S   setesk3
  908.     MOVE.W  RealTempo(PC),D0
  909.     CMP.W   #32,D0
  910.     BHS.S   setemsk
  911.     MOVEQ   #32,D0
  912. setemsk MOVE.W  D0,RealTempo
  913. setesk3 TST.W   SamScrEnable
  914.     BNE.S   setesk2
  915.     MOVE.W  #4964,TextOffset
  916.     MOVE.W  D0,WordNumber
  917.     JSR Print3DecDigits
  918. setesk2 MOVE.L  CIAAbase(PC),D0
  919.     BEQ Return1
  920.     MOVE.W  RealTempo(PC),D0
  921.     MOVE.L  TimerValue(PC),D1
  922.     DIVU    D0,D1
  923.     MOVE.L  CIAAaddr(PC),A5
  924.     MOVE.L  TimerFlag(PC),D0
  925.     BEQ.S   SetTemA
  926.     MOVE.B  D1,ciatblo(A5)  ;and set the CIA timer
  927.     LSR.W   #8,D1
  928.     MOVE.B  D1,ciatbhi(A5)
  929.     RTS
  930.  
  931. SetTemA MOVE.B  D1,ciatalo(A5)
  932.     LSR.W   #8,D1
  933.     MOVE.B  D1,ciatahi(A5)
  934.     RTS
  935.  
  936. RealTempo   dc.w 125
  937. CIAAaddr    dc.l 0
  938.  
  939. ;---- Input Event Handler ----
  940.  
  941. SetInputHandler
  942.     MOVE.L  4.W,A6
  943.     LEA InpEvPort,A1
  944.     JSR LVOAddPort(A6)
  945.     LEA InputDevName,A0
  946.     MOVEQ   #0,D0
  947.     LEA InpEvIOReq,A1
  948.     MOVEQ   #0,D1
  949.     MOVE.L  #InpEvPort,14(A1)
  950.     JSR LVOOpenDevice(A6)
  951.     LEA InpEvIOReq,A1
  952.     MOVE.W  #9,IO_COMMAND(A1) ; IND_ADDHANDLER
  953.     MOVE.L  #InpEvStuff,IO_DATA(A1)
  954.     JSR LVODoIO(A6)
  955.     RTS
  956.  
  957. ResetInputHandler
  958.     MOVE.L  4.W,A6
  959.     LEA InpEvIOReq,A1
  960.     MOVE.W  #10,IO_COMMAND(A1) ; IND_REMHANDLER
  961.     MOVE.L  #InpEvStuff,IO_DATA(A1)
  962.     JSR LVODoIO(A6)
  963.     LEA InpEvIOReq,A1
  964.     JSR LVOCloseDevice(A6)
  965.     LEA InpEvPort,A1
  966.     JSR LVORemPort(A6)
  967.     RTS
  968.  
  969.  
  970. InpEvStuff
  971.     dc.l    0,0
  972.     dc.b    2,52 ; type, priority
  973.     dc.l    inpevname
  974.     dc.l    0,InputHandler
  975.  
  976. inpevname
  977.     dc.b "Protracker InputHandler",0
  978.  
  979. InputHandler ; A0-InputEvent, A1-Data Area
  980.     MOVE.L  A2,-(SP)
  981.     TST.B   AutoReqRunning
  982.     BNE.S   inphend
  983.     SUB.L   A2,A2
  984.     MOVE.L  A0,A1
  985.     MOVE.B  4(A1),D0 ; ie_Class
  986.     CMP.B   #1,D0    ; RAWKEY
  987.     BEQ.S   InpRawkey
  988.     CMP.B   #2,D0    ; RAWMOUSE
  989.     BEQ.S   InpRawmouse
  990.     MOVE.L  A1,A2
  991. InpNext MOVE.L  (A1),A1
  992.     MOVE.L  A1,D0
  993.     BNE.S   InputHandler
  994. inphend MOVE.L  A0,D0
  995.     MOVE.L  (SP)+,A2
  996.     RTS
  997.  
  998. InpRawkey
  999.     BSR InpUnchain
  1000.     MOVE.W  6(A1),D0
  1001.     BSR ProcessRawkey
  1002.     BRA InpNext
  1003.  
  1004. InpRawmouse
  1005.     BSR InpUnchain
  1006.     MOVE.W  MouseX3,D0
  1007.     MOVE.W  MouseY3,D1
  1008.     ADD.W   10(A1),D0
  1009.     ADD.W   12(A1),D1
  1010.     TST.W   D0
  1011.     BPL.S   irskip1
  1012.     MOVEQ   #0,D0
  1013. irskip1 TST.W   D1
  1014.     BPL.S   irskip2
  1015.     MOVEQ   #0,D1
  1016. irskip2 CMP.W   #640,D0
  1017.     BLO.S   irskip3
  1018.     MOVE.W  #639,D0
  1019. irskip3 CMP.W   #512,D1
  1020.     BLO.S   irskip4
  1021.     MOVE.W  #511,D1
  1022. irskip4 MOVE.W  D0,MouseX3
  1023.     MOVE.W  D1,MouseY3
  1024.     LSR.W   #1,D0
  1025.     LSR.W   #1,D1
  1026.     MOVE.W  D0,MouseX
  1027.     MOVE.W  D1,MouseY
  1028.     BRA.S   InpNext
  1029.  
  1030. InpUnchain
  1031.     MOVE.L  A2,D0
  1032.     BNE.S   InpUnc2
  1033.     MOVE.L  (A1),A0
  1034.     RTS
  1035. InpUnc2 MOVE.L  (A1),(A2)
  1036.     RTS
  1037.  
  1038. ;---- Process rawkey code from the keyboard ----
  1039.  
  1040. ProcessRawkey
  1041.     CMP.B   LastRawkey,D0
  1042.     BEQ Return1
  1043.     MOVE.B  D0,LastRawkey
  1044.     CMP.B   #67+128,D0
  1045.     BEQ LowerInstr2
  1046.     CMP.B   #96,D0
  1047.     BEQ ShiftOn
  1048.     CMP.B   #97,D0
  1049.     BEQ ShiftOn2
  1050.     CMP.B   #100,D0
  1051.     BEQ AltOn
  1052.     CMP.B   #101,D0
  1053.     BEQ AltOn2
  1054.     CMP.B   #99,D0
  1055.     BEQ CtrlOn
  1056.     CMP.B   #102,D0
  1057.     BEQ LeftAmigaOn
  1058.     CMP.B   #99+128,D0
  1059.     BEQ CtrlOff
  1060.     CMP.B   #100+128,D0
  1061.     BEQ AltOff
  1062.     CMP.B   #96+128,D0
  1063.     BEQ.S   ShiftOff
  1064.     CMP.B   #101+128,D0
  1065.     BEQ AltOff
  1066.     CMP.B   #97+128,D0
  1067.     BEQ.S   ShiftOff
  1068.     CMP.B   #102+128,D0
  1069.     BEQ LeftAmigaOff
  1070.     CMP.B   #98,D0
  1071.     BEQ.S   KeyRepOn
  1072.     CMP.B   #98+128,D0
  1073.     BEQ.S   KeyRepOff
  1074. kbintSetKey
  1075.     TST.B   D0
  1076.     BNE.S   kbintDoSet
  1077.     MOVE.B  #127,D0
  1078. kbintDoSet
  1079.     MOVE.W  KeyBufPos(PC),D1
  1080.     CMP.W   #KeyBufSize,D1
  1081.     BHS Return1
  1082.     LEA KeyBuffer(PC),A3
  1083.     MOVE.B  D0,(A3,D1.W)
  1084.     ADDQ.W  #1,KeyBufPos
  1085.     RTS
  1086.  
  1087. LowerInstr2
  1088.     CLR.W   HiLowInstr
  1089.     BRA.S   kbintsetkey
  1090.  
  1091. KeyRepOn
  1092.     ST  KeyRepeat
  1093.     RTS
  1094.  
  1095. KeyRepOff
  1096.     SF  KeyRepeat
  1097.     RTS
  1098.  
  1099. ShiftOn MOVE.W  #1,ShiftKeyStatus
  1100.     RTS
  1101.  
  1102. ShiftOn2
  1103.     MOVE.W  #1,ShiftKeyStatus
  1104.     BRA.S   kbintsetkey
  1105.  
  1106. ShiftOff
  1107.     CLR.W   ShiftKeyStatus
  1108.     RTS
  1109.  
  1110. AltOn   MOVE.W  #1,AltKeyStatus
  1111.     RTS
  1112.  
  1113. AltOn2  MOVE.W  #1,AltKeyStatus
  1114.     BRA.S   kbintsetkey
  1115.  
  1116. AltOff  CLR.W   AltKeyStatus
  1117.     RTS
  1118.  
  1119. CtrlOn  MOVE.W  #1,CtrlKeyStatus
  1120.     RTS
  1121.  
  1122. CtrlOff CLR.W   CtrlKeyStatus
  1123.     RTS
  1124.  
  1125. LeftAmigaOn
  1126.     MOVE.W  #1,LeftAmigaStatus
  1127.     RTS
  1128.  
  1129. LeftAmigaOff
  1130.     CLR.W   LeftAmigaStatus
  1131.     RTS
  1132.  
  1133. DoKeyBuffer
  1134.     MOVE.W  KeyBufPos(PC),D0
  1135.     BEQ Return1
  1136.     SUBQ.W  #1,D0
  1137.     LEA KeyBuffer(PC),A0
  1138.     MOVE.B  (A0,D0.W),D1
  1139.     MOVE.W  D0,KeyBufPos
  1140.     MOVE.B  D1,RawKeyCode
  1141.     MOVE.B  D1,SaveKey
  1142.     MOVE.W  KeyRepDelay,KeyRepCounter
  1143.     BTST    #7,D1
  1144.     BEQ.S   dkbend
  1145.     CLR.W   KeyRepCounter
  1146. dkbend  RTS
  1147.  
  1148. KeyBufPos   dc.w    0
  1149. KeyBuffer   dcb.b   KeyBufSize,0
  1150. ShiftKeyStatus  dc.w    0
  1151. AltKeyStatus    dc.w    0
  1152. CtrlKeyStatus   dc.w    0
  1153. LeftAmigaStatus dc.w    0
  1154. LastRawkey  dc.b    255,0
  1155. SaveKey     dc.b 0
  1156. KeyRepeat   dc.b 0
  1157. KeyRepCounter   dc.w 0
  1158.  
  1159. ;---- Key repeat ----
  1160.  
  1161. CheckKeyRepeat
  1162.     TST.B   KeyRepeat
  1163.     BEQ Return1
  1164.     MOVE.W  KeyRepCounter(PC),D0
  1165.     BEQ Return1
  1166.     SUBQ.W  #1,D0
  1167.     BEQ.S   RepDown
  1168.     MOVE.W  D0,KeyRepCounter
  1169.     RTS
  1170.  
  1171. RepDown MOVE.B  SaveKey(PC),RawKeyCode
  1172.     MOVE.W  KeyRepSpeed,KeyRepCounter
  1173.     RTS
  1174.  
  1175. ;---- Update Mousepointer Position ----
  1176.  
  1177. UpdatePointerPos
  1178.     MOVE.W  MouseX,D0
  1179.     ADDQ.W  #3,D0
  1180.     MOVE.W  MouseY,D1
  1181.     MOVEQ   #16,D2
  1182.     MOVE.L  PointerSpritePtr,A0
  1183.     JMP SetSpritePos
  1184.  
  1185. ;---- Timer ----
  1186.  
  1187. UpdateTicks
  1188.     CMP.L   #'patp',RunMode
  1189.     BNE Return1
  1190.     ADDQ.W  #1,PatternTicks
  1191.     MOVE.W  PatternTicks(PC),D0
  1192.     MOVE.L  4.W,A0
  1193.     CMP.B   $0212(A0),D0
  1194.     BNE Return1
  1195.     CLR.W   PatternTicks
  1196.     ADDQ.L  #1,TimerTicks
  1197.     RTS
  1198.  
  1199. ShowTimer
  1200.     CMP.W   #4,CurrScreen
  1201.     BEQ Return1
  1202.     MOVE.L  TimerTicks(PC),D0
  1203.     DIVU    #60,D0
  1204.     MOVE.W  D0,WordNumber
  1205.     SWAP    D0
  1206.     MOVE.W  D0,D7
  1207.     MOVE.W  #4154,TextOffset
  1208.     JSR Print2DecDigits
  1209.     MOVE.W  D7,WordNumber
  1210.     ADDQ.W  #1,TextOffset
  1211.     JMP Print2DecDigits
  1212.  
  1213. PatternTicks    dc.w    0
  1214. TimerTicks  dc.l    0
  1215.  
  1216. ;---- Spectrum Analyzer ----
  1217.  
  1218. SpecAnaInt
  1219.     CMP.W   #1,CurrScreen
  1220.     BNE Return1
  1221.     TST.B   DisableAnalyzer
  1222.     BNE Return1
  1223.     TST.B   AnaDrawFlag
  1224.     BNE Return1
  1225.     MOVEQ   #40,D5
  1226.     MOVEQ   #126,D6
  1227.     LEA AnalyzerHeights,A0
  1228.     LEA AnalyzerOpplegg,A1
  1229.     LEA AnalyzerOffsets(PC),A2
  1230.     MOVE.L  TextBplPtr,A3
  1231.     LEA 1976(A3),A3
  1232.     MOVEQ   #$16,D7
  1233. spanlab1
  1234.     MOVE.W  (A0)+,D0
  1235.     CMP.W   #36,D0
  1236.     BLO.S   spanskip2
  1237.     MOVE.W  #36,D0
  1238. spanskip2
  1239.     MOVE.W  (A1)+,D1
  1240.     CMP.W   D0,D1
  1241.     BEQ.S   spanskip3
  1242.     BLO.S   span_r2
  1243.     SUB.W   D0,D1
  1244.     SUBQ.W  #1,D1
  1245.     ADD.W   D0,D0
  1246.     MOVE.W  0(A2,D0.W),D0
  1247. spanloop
  1248.     CLR.B   0(A3,D0.W)
  1249.     SUB.W   D5,D0
  1250.     DBRA    D1,spanloop
  1251.     BRA.S   spanskip3
  1252.  
  1253. span_r2 SUB.W   D1,D0
  1254.     SUBQ.W  #1,D0
  1255.     LSL.W   #1,D1
  1256.     MOVE.W  0(A2,D1.W),D1
  1257. spanloop2   MOVE.B  D6,0(A3,D1.W)
  1258.     SUB.W   D5,D1
  1259.     DBRA    D0,spanloop2
  1260. spanskip3   ADDQ.L  #1,A3
  1261.     DBRA    D7,spanlab1
  1262.     LEA AnalyzerHeights,A0
  1263.     LEA AnalyzerOpplegg,A1
  1264.     MOVEQ   #22,D7
  1265. spanloop3   MOVE.W  (A0),D0
  1266.     MOVE.W  D0,(A1)+
  1267.     BEQ.S   spanskip4
  1268.     SUBQ.W  #1,D0
  1269. spanskip4   MOVE.W  D0,(A0)+
  1270.     DBRA    D7,spanloop3
  1271.     RTS
  1272.  
  1273. ClearAnaHeights
  1274.     LEA AnalyzerOpplegg,A0
  1275.     LEA AnalyzerHeights,A1
  1276.     MOVEQ   #22,D7
  1277.     MOVEQ   #0,D0
  1278. cahloop MOVE.W  D0,(A0)+
  1279.     MOVE.W  D0,(A1)+
  1280.     DBRA    D7,cahloop
  1281.     RTS
  1282.  
  1283. PlayNoteAnalyze
  1284.     MOVEM.L D0-D3/A0,-(SP)
  1285.     MOVEQ   #0,D2
  1286.     MOVE.W  2(A6),D2
  1287.     BRA.S   SpecAna2
  1288.  
  1289. SpectrumAnalyzer
  1290.     TST.W   (A4)
  1291.     BEQ Return1
  1292.     MOVEM.L D0-D3/A0,-(SP)
  1293.     MOVEQ   #0,D2
  1294.     MOVE.B  n_volume(A6),D2 ; Get channel volume
  1295. SpecAna2
  1296.     ST  AnaDrawFlag
  1297.     BSR SetAnalyzerVolumes
  1298.     BEQ.S   saend
  1299.     LSL.W   #8,D2
  1300.     DIVU    #682,D2
  1301.     MOVE.W  D2,D3
  1302.     LSR.W   #1,D3
  1303.     LEA AnalyzerHeights,A0
  1304.     SUB.W   #113,D0 ; Subtract 113 (highest rate)
  1305.     MOVE.W  #743,D1
  1306.     SUB.W   D0,D1   ; Invert range 0-743
  1307.     MULU    D1,D1   ; 0 - 743^2
  1308.     DIVU    #25093,D1
  1309.     MOVE.W  D1,D0
  1310.     CMP.W   #46,D0
  1311.     BLO.S   saskip
  1312.     MOVEQ   #45,D0
  1313. saskip  LSL.W   #1,D0
  1314.     ADD.W   D2,(A0,D0.W)
  1315.     CMP.W   #36,(A0,D0.W)
  1316.     BLO.S   saskip2
  1317.     MOVE.W  #36,(A0,D0.W)
  1318. saskip2 TST.W   D0
  1319.     BEQ.S   saskip3
  1320.     ADD.W   D3,-2(A0,D0.W)
  1321.     CMP.W   #36,-2(A0,D0.W)
  1322.     BLO.S   saskip3
  1323.     MOVE.W  #36,-2(A0,D0.W)
  1324. saskip3 CMP.W   #44,D0
  1325.     BEQ.S   saend
  1326.     ADD.W   D3,2(A0,D0.W)
  1327.     CMP.W   #36,2(A0,D0.W)
  1328.     BLO.S   saend
  1329.     MOVE.W  #36,2(A0,D0.W)
  1330. saend   SF  AnaDrawFlag
  1331.     MOVEM.L (SP)+,D0-D3/A0
  1332.     RTS
  1333.  
  1334. AnalyzerOffsets
  1335.     dc.w $0730,$0708,$06E0,$06B8,$0690,$0668,$0640,$0618
  1336.     dc.w $05F0,$05C8,$05A0,$0578,$0550,$0528,$0500,$04D8
  1337.     dc.w $04B0,$0488,$0460,$0438,$0410,$03E8,$03C0,$0398
  1338.     dc.w $0370,$0348,$0320,$02F8,$02D0,$02A8,$0280,$0258
  1339.     dc.w $0230,$0208,$01E0,$01B8,$0190,$0168,$0140,$0118
  1340.     dc.w $00F0
  1341.  
  1342. AnaDrawFlag dc.b 0,0
  1343.  
  1344. ;---- Scope ----
  1345.  
  1346. ns_sampleptr =  0
  1347. ns_endptr    =  4
  1348. ns_repeatptr =  8
  1349. ns_rependptr = 12
  1350. ns_period    = 16
  1351. ns_volume    = 18
  1352.  
  1353. Scope   LEA audchan1temp,A0
  1354.     LEA ScopeInfo,A2
  1355.     LEA ScopeSamInfo,A1
  1356.     LEA BlankSample,A3
  1357.     MOVEQ.L #3,D6
  1358. ScoLoop MOVE.W  (A0),D0
  1359.     AND.W   #$0FFF,D0
  1360.     OR.W    n_period(A0),D0
  1361.     BEQ ScoSampleEnd ; end if no note & no period
  1362.  
  1363.     MOVE.W  n_period(A0),ns_period(A2)
  1364.     MOVE.B  n_volume(A0),ns_volume(A2)
  1365.  
  1366.  
  1367.     TST.B   n_trigger(A0)
  1368.     BEQ ScoContinue
  1369. ScoRetrig
  1370.     SF  n_trigger(A0)
  1371.     BSR SetScope
  1372.     MOVEQ   #0,D0
  1373.     MOVE.B  n_samplenum(A0),D0
  1374.     SUBQ.W  #1,D0
  1375.     LSL.W   #4,D0
  1376.     MOVE.L  ns_sampleptr(A1,D0.W),ns_sampleptr(A2)
  1377.     MOVE.L  ns_endptr(A1,D0.W),ns_endptr(A2)
  1378.     MOVE.L  ns_repeatptr(A1,D0.W),ns_repeatptr(A2)
  1379.     MOVE.L  ns_rependptr(A1,D0.W),ns_rependptr(A2)
  1380.     MOVE.L  ns_sampleptr(A2),D0
  1381.     CMP.L   A3,D0 ; at end of sample...
  1382.     BEQ.S   ScoNextChan
  1383.     BRA ScoChk
  1384. ScoContinue
  1385.     MOVE.L  ns_sampleptr(A2),D0
  1386.     CMP.L   A3,D0 ; at end of sample...
  1387.     BEQ.S   ScoNextChan
  1388.     MOVEQ.L #0,D1
  1389.     MOVE.W  ns_period(A2),D1
  1390.     LSR.W   #1,D1
  1391.     BEQ.S   ScoNextChan
  1392.     MOVE.L  #35469,D2
  1393.     DIVU    D1,D2
  1394.     EXT.L   D2
  1395.     ADD.L   D2,D0
  1396. ScoChk  CMP.L   ns_endptr(A2),D0
  1397.     BLO.S   ScoUpdatePtr
  1398.     TST.L   ns_repeatptr(A2)
  1399.     BNE.S   ScoSamLoop
  1400. ScoSampleEnd
  1401.     MOVE.L  A3,D0
  1402.     BRA.S   ScoUpdatePtr
  1403.  
  1404. ScoSamLoop
  1405.     SUB.L   ns_endptr(A2),D0
  1406.     ADD.L   ns_repeatptr(A2),D0
  1407.     MOVE.L  ns_rependptr(A2),ns_endptr(A2)
  1408.     CMP.L   ns_endptr(A2),D0
  1409.     BHS ScoSamLoop
  1410. ScoUpdatePtr
  1411.     MOVE.L  D0,ns_sampleptr(A2)
  1412. ScoNextChan
  1413.     ADD.L   #20,A2
  1414.     ADD.L   #44,A0
  1415.     DBRA    D6,ScoLoop
  1416.  
  1417. ; now draw channels
  1418.     TST.B   ScopeEnable
  1419.     BEQ.S   clsnot
  1420.     CMP.W   #1,CurrScreen
  1421.     BNE.S   clsnot
  1422.     TST.B   EdEnable
  1423.     BNE.S   clsnot
  1424.  
  1425.     MOVE.L  TextBplPtr,A0
  1426.     ADD.L   #2256,A0
  1427.     MOVEQ   #0,D0
  1428.     MOVEQ   #32,D1
  1429. clscop1 MOVEQ   #5,D2
  1430. clscop2 MOVE.L  D0,(A0)+
  1431.     DBRA    D2,clscop2
  1432.     LEA 16(A0),A0
  1433.     DBRA    D1,clscop1
  1434.  
  1435. clsnot  MOVEQ   #-1,D4
  1436.     TST.W   SamScrEnable
  1437.     BEQ.S   ScoNClr
  1438.     MOVEQ   #0,D4
  1439. ScoNClr MOVEQ   #0,D7
  1440.     MOVE.W  $DFF002,D6 ; dmaconr
  1441.     MOVEQ   #0,D5
  1442.     MOVE.L  #72*40+16,A1
  1443.     LEA xBlankSample,A2
  1444.     BTST    #0,D6
  1445.     BEQ.S   ScoSkp1
  1446.     LEA ScopeInfo,A2
  1447.     MOVE.B  ns_volume(A2),D5
  1448. ScoSkp1 BSR.S   ScoDraw
  1449.  
  1450.     MOVEQ   #0,D5
  1451.     MOVE.L  #72*40+22,A1
  1452.     LEA xBlankSample,A2
  1453.     BTST    #1,D6
  1454.     BEQ.S   ScoSkp2
  1455.     LEA ScopeInfo+20,A2
  1456.     MOVE.B  ns_volume(A2),D5
  1457. ScoSkp2 BSR.S   ScoDraw
  1458.  
  1459.     MOVEQ   #0,D5
  1460.     MOVE.L  #72*40+28,A1
  1461.     LEA xBlankSample,A2
  1462.     BTST    #2,D6
  1463.     BEQ.S   ScoSkp3
  1464.     LEA ScopeInfo+40,A2
  1465.     MOVE.B  ns_volume(A2),D5
  1466. ScoSkp3 BSR.S   ScoDraw
  1467.  
  1468.     MOVEQ   #0,D5
  1469.     MOVE.L  #72*40+34,A1
  1470.     LEA xBlankSample,A2
  1471.     BTST    #3,D6
  1472.     BEQ.S   ScoSkp4
  1473.     LEA ScopeInfo+60,A2
  1474.     MOVE.B  ns_volume(A2),D5
  1475. ScoSkp4 BSR ScoDraw
  1476.     TST.L   D7
  1477.     BEQ sdloscr
  1478. ScoRTS  RTS
  1479.  
  1480. ScoDraw TST.B   ScopeEnable
  1481.     BEQ.S   sdlpos
  1482.     CMP.W   #1,CurrScreen
  1483.     BNE.S   sdlpos
  1484.     TST.B   EdEnable
  1485.     BNE.S   sdlpos
  1486.     LSR.W   #1,D5
  1487.     CMP.W   #32,D5
  1488.     BLS.S   sdsk1
  1489.     MOVEQ   #32,D5
  1490. sdsk1   MOVE.L  (A2),A0
  1491.     ADD.L   TextBplPtr,A1
  1492.     MOVEQ   #4,D2
  1493. sdlp1   MOVEQ   #7,D3
  1494. sdlp2   MOVE.B  (A0)+,D0    ; get byte
  1495.     EXT.W   D0      ; extend to word
  1496.     NEG.W   D0      ; negate
  1497.     MULS    D5,D0       ; multiply by volume
  1498.     ASR.W   #8,D0       ; shift down
  1499.     MOVE.W  D0,D1
  1500.     ASL.W   #5,D0       ; * 32
  1501.     ASL.W   #3,D1       ; * 8
  1502.     ADD.W   D1,D0       ; (32+8) = * 40
  1503.     BSET    D3,(A1,D0.W)    ; set a bit
  1504.     DBRA    D3,sdlp2
  1505.     ADDQ.L  #1,A1       ; yes
  1506. sdlskip DBRA    D2,sdlp1
  1507.  
  1508. sdlpos  TST.B   D4
  1509.     BNE.S   ScoRTS
  1510.     LEA xBlankSample(PC),A0
  1511.     CMP.L   A0,A2
  1512.     BEQ.S   sdloscr
  1513.     MOVE.L  (A2),D1
  1514.     MOVE.L  SamDrawStart(PC),D0
  1515.     CMP.L   D0,D1
  1516.     BLS.S   ScoRTS
  1517.     CMP.L   SamDrawEnd(PC),D1
  1518.     BHS.S   ScoRTS
  1519.     SUB.L   D0,D1
  1520.     MULU    #314,D1
  1521.     MOVE.L  SamDisplay,D0
  1522.     BEQ.S   ScoRTS
  1523.     DIVU    D0,D1
  1524.     ST  D4
  1525.     ST  D7
  1526.     MOVE.L  D1,D0
  1527.     ADDQ.W  #6,D0
  1528.     MOVE.W  #139,D1
  1529. sdlpspr MOVEQ   #64,D2
  1530.     LEA PlayPosSpriteData,A0
  1531.     JMP SetSpritePos
  1532.  
  1533. sdloscr MOVEQ   #0,D0
  1534.     MOVE.W  #270,D1
  1535.     BRA.S   sdlpspr
  1536.  
  1537. SetScope
  1538.     MOVEQ   #0,D1
  1539.     MOVE.B  n_samplenum(A0),D1
  1540.     SUBQ.W  #1,D1
  1541.     LSL.W   #4,D1
  1542.     LEA ScopeSamInfo,A4
  1543.     LEA (A4,D1.W),A4
  1544.  
  1545.     MOVE.L  n_start(A0),D0
  1546.     MOVE.L  D0,ns_sampleptr(A4)
  1547.     MOVEQ   #0,D1
  1548.     MOVE.W  n_length(A0),D1
  1549.     ADD.L   D1,D0
  1550.     ADD.L   D1,D0
  1551.     MOVE.L  D0,ns_endptr(A4)
  1552.  
  1553.     MOVE.L  n_loopstart(A0),D0
  1554.     MOVE.L  D0,ns_repeatptr(A4)
  1555.     MOVEQ   #0,D1
  1556.     MOVE.W  n_replen(A0),D1
  1557.     CMP.W   #1,D1
  1558.     BEQ.S   sconorep
  1559.     ADD.L   D1,D0
  1560.     ADD.L   D1,D0
  1561.     MOVE.L  D0,ns_rependptr(A4)
  1562.     BRA Return1
  1563. sconorep
  1564.     CLR.L   ns_repeatptr(A4)
  1565.     RTS
  1566.  
  1567. ToggleAnaScope
  1568.     TST.W   notogfl
  1569.     BNE return1
  1570.     BSR WaitForButtonUp
  1571.     MOVEQ   #0,D4
  1572.     TST.B   AnaScopFlag
  1573.     BNE.S   tasana
  1574.     ST  AnaScopFlag
  1575.     BRA RedrawAnaScope
  1576. tasana  SF  AnaScopFlag
  1577.     BRA RedrawAnaScope
  1578.  
  1579. ScopeEnable dc.b 0
  1580. AnaScopFlag dc.b 1
  1581. xBlankSample    dc.l BlankSample
  1582. SamDrawStart    dc.l 0
  1583. SamDrawEnd  dc.l 0
  1584.  
  1585. ;---- Show Free/Tune Memory ----
  1586.  
  1587. DoShowFreeMem
  1588.     MOVE.W  #1,UpdateFreeMem
  1589. ShowFreeMem
  1590.     MOVEM.L D0-D7/A0-A6,-(SP)
  1591.     TST.W   UpdateFreeMem
  1592.     BEQ.S   sfmskp
  1593.     CLR.W   UpdateFreeMem
  1594.     CLR.L   FreeMemory
  1595.     CLR.L   TuneMemory
  1596. sfmskp  BSR ShowTuneMem
  1597.     MOVEQ   #MEMF_CHIP,D1
  1598.     TST.B   ShowPublicFlag
  1599.     BEQ sfmskp2
  1600.     MOVEQ   #MEMF_PUBLIC,D1
  1601. sfmskp2 MOVE.L  4.W,A6
  1602.     JSR LVOAvailMem(A6)
  1603.     CMP.L   FreeMemory(PC),D0
  1604.     BEQ.S   fremend
  1605.     MOVE.L  D0,FreeMemory
  1606.     TST.B   ShowDecFlag
  1607.     BNE.S   shfrdec
  1608.     MOVE.L  D0,D6
  1609.     MOVE.W  #5273,TextOffset
  1610.     SWAP    D0
  1611.     AND.W   #$FF,D0
  1612.     MOVE.W  D0,WordNumber
  1613.     JSR PrintHexByte
  1614.     MOVE.W  D6,WordNumber
  1615.     JSR PrintHexWord
  1616. fremend MOVEM.L (SP)+,D0-D7/A0-A6
  1617.     RTS
  1618.  
  1619. shfrdec MOVE.L  FreeMemory(PC),D0
  1620.     MOVE.W  #5273,TextOffset
  1621.     JSR Print6DecDigits
  1622.     BRA.S   fremend
  1623.  
  1624. ShowTuneMem
  1625.     MOVE.L  SongDataPtr,A0
  1626.     LEA 42(A0),A0
  1627.     MOVE.W  TuneUp(PC),D7
  1628.     SUBQ.W  #1,D7
  1629.     MOVE.W  #31,TuneUp
  1630.     MOVEQ   #0,D0   ; Zero length
  1631. stumeloop
  1632.     MOVEQ   #0,D1
  1633.     MOVE.W  (A0),D1
  1634.     ASL.W   #1,D1
  1635.     ADD.L   D1,D0   ; Add samplelength
  1636.     ADD.L   #30,A0
  1637.     DBRA    D7,stumeloop
  1638.     ADD.L   #1084,D0    ; Add 1084 to length
  1639.     MOVE.L  SongDataPtr,A0
  1640.     MOVEQ   #127,D7
  1641.     ADD.L   #952,A0
  1642.     MOVEQ   #0,D6
  1643. stumeloop2
  1644.     MOVE.B  (A0)+,D5
  1645.     CMP.B   D5,D6
  1646.     BHI.S   stumeskip
  1647.     MOVE.B  D5,D6
  1648. stumeskip
  1649.     DBRA    D7,stumeloop2
  1650.     ADDQ.W  #1,D6
  1651.     ASL.L   #8,D6
  1652.     ASL.L   #2,D6
  1653.     ADD.L   D6,D0   ; Add 1024 x Number of patterns
  1654.     CMP.L   TuneMemory(PC),D0
  1655.     BEQ Return1
  1656.     MOVE.L  D0,TuneMemory
  1657.     TST.B   ShowDecFlag
  1658.     BNE.S   shtudec
  1659.     MOVE.L  D0,D6
  1660.     MOVE.W  #4993,TextOffset
  1661.     SWAP    D0
  1662.     AND.W   #$FF,D0
  1663.     MOVE.W  D0,WordNumber
  1664.     JSR PrintHexByte
  1665.     MOVE.W  D6,WordNumber
  1666.     JMP PrintHexWord
  1667.  
  1668. shtudec MOVE.L  TuneMemory(PC),D0
  1669.     MOVE.W  #4993,TextOffset
  1670.     JMP Print6DecDigits
  1671.  
  1672. UpdateFreeMem   dc.w    0
  1673. FreeMemory  dc.l    0
  1674. TuneMemory  dc.l    0
  1675. TuneUp      dc.w    31
  1676.  
  1677. ;---- Audio Channel Toggles ----
  1678.  
  1679. CheckToggle
  1680.     MOVE.W  MouseY2,D0
  1681.     CMP.W   #1,CurrScreen
  1682.     BNE Return1
  1683.     CMP.W   #44,D0
  1684.     BHS Return1
  1685. DoToggleMute
  1686.     CMP.W   #34,D0
  1687.     BHS.S   ToggleCh4
  1688.     CMP.W   #23,D0
  1689.     BHS.S   ToggleCh3
  1690.     CMP.W   #12,D0
  1691.     BHS.S   ToggleCh2
  1692. ToggleCh1
  1693.     LEA audchan1toggle(PC),A0
  1694.     BRA.S   TogCh
  1695. ToggleCh2
  1696.     LEA audchan2toggle(PC),A0
  1697.     BRA.S   TogCh
  1698. ToggleCh3
  1699.     LEA audchan3toggle(PC),A0
  1700.     BRA.S   TogCh
  1701. ToggleCh4
  1702.     LEA audchan4toggle(PC),A0
  1703. TogCh   CLR.B   RawKeyCode
  1704.     EOR.W   #1,(A0)
  1705.     BSR WaitForButtonUp
  1706.     CLR.W   D0
  1707.     MOVE.W  audchan4toggle(PC),D0
  1708.     LSL.B   #1,D0
  1709.     OR.W    audchan3toggle(PC),D0
  1710.     LSL.B   #1,D0
  1711.     OR.W    audchan2toggle(PC),D0
  1712.     LSL.B   #1,D0
  1713.     OR.W    audchan1toggle(PC),D0
  1714.     MOVE.W  D0,ActiveChannels
  1715.     BSR.S   RedrawToggles
  1716.     BSR Wait_4000
  1717.     BRA Wait_4000
  1718.  
  1719. RedrawToggles
  1720.     CMP.W   #1,CurrScreen
  1721.     BNE Return1
  1722.     LEA audchan1toggle(PC),A0
  1723.     BSR.S   RedrawSingleTogg
  1724.     LEA audchan2toggle(PC),A0
  1725.     BSR.S   RedrawSingleTogg
  1726.     LEA audchan3toggle(PC),A0
  1727.     BSR.S   RedrawSingleTogg
  1728.     LEA audchan4toggle(PC),A0
  1729. RedrawSingleTogg
  1730.     LEA BitplaneData,A1
  1731.     MOVEQ   #0,D0
  1732.     MOVE.W  2(A0),D0
  1733.     ADD.L   D0,A1
  1734.     MOVEQ   #0,D0
  1735.     MOVE.W  4(A0),D0
  1736.     LEA ToggleONdata,A2
  1737.     TST.W   (A0)
  1738.     BNE.S   rtskip
  1739.     LEA ToggleOFFdata,A2
  1740. rtskip  ADD.L   D0,A2
  1741.     MOVEQ   #10,D4
  1742. rtloop2 MOVE.W  88(A2),10240(A1)
  1743.     MOVE.W  (A2)+,(A1)
  1744.     LEA 40(A1),A1
  1745.     DBRA    D4,rtloop2
  1746.     RTS
  1747.  
  1748. rtdoit  MOVEQ   #10,D4
  1749. rtloop  MOVE.W  132(A2),10240(A1)
  1750.     MOVE.W  (A2)+,(A1)
  1751.     LEA 40(A1),A1
  1752.     DBRA    D4,rtloop
  1753.     RTS
  1754.  
  1755. ;---- VU Meters ----
  1756.  
  1757. VUmeters
  1758.     LEA audchan1temp,A1
  1759.     LEA VUSpriteData1,A2
  1760.     MOVE.W  audchan1toggle(PC),D0
  1761.     BSR.S   OneVUmeter
  1762.     LEA audchan2temp,A1
  1763.     LEA VUSpriteData2,A2
  1764.     MOVE.W  audchan2toggle(PC),D0
  1765.     BSR.S   OneVUmeter
  1766.     LEA audchan3temp,A1
  1767.     LEA VUSpriteData3,A2
  1768.     MOVE.W  audchan3toggle,D0
  1769.     BSR.S   OneVUmeter
  1770.     LEA audchan4temp,A1
  1771.     LEA VUSpriteData4,A2
  1772.     MOVE.W  audchan4toggle,D0
  1773. OneVUmeter
  1774.     TST.L   RunMode
  1775.     BEQ.S   VUmeterDown
  1776.     TST.W   (A1)
  1777.     BEQ.S   VUmeterDown
  1778.     TST.W   D0
  1779.     BEQ.S   VUmeterDown
  1780.     TST.L   Counter
  1781.     BNE.S   VUmeterDown
  1782.     MOVEQ   #0,D0   ; New note
  1783.     MOVE.B  n_volume(A1),D0 ; Get volume
  1784.     CMP.W   #$40,D0 ; Higher than $40 ?
  1785.     BLS.S   iccskip ; No, skip
  1786.     MOVEQ   #$40,D0 ; Yes, set to $40
  1787. iccskip LEA VUmeterHeights(PC),A3
  1788.     MOVE.B  #233,D7     ; Set to 233
  1789.     SUB.B   0(A3,D0.W),D7   ; Subtract to get new height
  1790.     MOVE.B  D7,(A2)
  1791.     RTS
  1792.  
  1793. VUmeterDown
  1794.     CMP.B   #233,(A2)
  1795.     BEQ Return1
  1796.     ADDQ.B  #1,(A2)
  1797.     RTS
  1798.  
  1799. audchan1toggle  dc.w    1,78,0
  1800. Chan1Volume dc.w    0
  1801. audchan2toggle  dc.w    1,518,$16
  1802. Chan2Volume dc.w    0
  1803. audchan3toggle  dc.w    1,958,$2C
  1804. Chan3Volume dc.w    0
  1805. audchan4toggle  dc.w    1,1398,$42
  1806. Chan4Volume dc.w    0
  1807. ActiveChannels  dc.w    15
  1808.  
  1809. VUmeterHeights
  1810.     dc.b    0,0,1,2,2,3,4,5,5,6,7,8,8,9,10,11
  1811.     dc.b    11,12,13,14,14,15,16,17,17,18,19,20,20,21,22,23
  1812.     dc.b    23,24,25,26,26,27,28,29,29,30,31,32,32,33,34,35
  1813.     dc.b    35,36,37,38,38,39,40,41,41,42,43,44,44,45,46,47
  1814.     dc.b    47,0
  1815.  
  1816. SetAnalyzerVolumes
  1817.     MOVEM.L D0-D3/A0,-(SP)
  1818.     LSL.W   #8,D2
  1819.     DIVU    #640,D2
  1820.     CMP.W   #$F0A0,A5
  1821.     BNE.S   savCh2
  1822.     TST.W   audchan1toggle
  1823.     BEQ.S   savCh2
  1824.     CMP.W   Chan1Volume,D2 ; volume
  1825.     BLO.S   savCh2
  1826.     MOVE.W  D2,Chan1Volume
  1827. savCh2  CMP.W   #$F0B0,A5
  1828.     BNE.S   savCh3
  1829.     TST.W   audchan2toggle
  1830.     BEQ.S   savCh3
  1831.     CMP.W   Chan2Volume,D2
  1832.     BLO.S   savCh3
  1833.     MOVE.W  D2,Chan2Volume
  1834. savCh3  CMP.W   #$F0C0,A5
  1835.     BNE.S   savCh4
  1836.     TST.W   audchan3toggle
  1837.     BEQ.S   savCh4
  1838.     CMP.W   Chan3Volume,D2
  1839.     BLO.S   savCh4
  1840.     MOVE.W  D2,Chan3Volume
  1841. savCh4  CMP.W   #$F0D0,A5
  1842.     BNE.S   savNone
  1843.     TST.W   audchan4toggle
  1844.     BEQ.S   savNone
  1845.     CMP.W   Chan4Volume,D2
  1846.     BLO.S   savNone
  1847.     MOVE.W  D2,Chan4Volume
  1848. savNone MOVEM.L (SP)+,D0-D3/A0
  1849.     MOVEQ   #1,D4
  1850.     RTS
  1851.  
  1852. ;---- Disk Op. ----
  1853.  
  1854. DiskOp  CLR.B   RawKeyCode
  1855.     MOVE.W  CurrScreen,D0
  1856.     CMP.W   #3,D0
  1857.     BEQ ExitFromDir
  1858.     CMP.W   #1,D0
  1859.     BNE Return1
  1860. ShowDirScreen
  1861.     BSR WaitForButtonUp
  1862.     MOVE.W  #3,CurrScreen
  1863.     ST  DisableAnalyzer
  1864.     ST  NoSampleInfo
  1865.     JSR ClearAnalyzerColors
  1866.     BSR Clear100Lines
  1867.     BSR.S   SwapDirScreen
  1868.     BEQ DisplayMainAll
  1869.     BSR ShowDiskSpace
  1870.     BSR ShowModPackMode
  1871.     BSR ShowPackMode
  1872.     BSR ShowRAWIFFmode
  1873. DoAutoDir
  1874.     TST.B   AutoDirFlag
  1875.     BEQ SelectPath
  1876.     MOVE.W  DirPathNum,D0
  1877.     BEQ LoadModuleGadg
  1878.     CMP.W   #1,D0
  1879.     BEQ LoadSongGadg
  1880.     CMP.W   #2,D0
  1881.     BEQ LoadSampleGadg
  1882.     BRA SelectModules
  1883. SelectPath
  1884.     MOVE.W  DirPathNum,D0
  1885.     BEQ SelectModules
  1886.     CMP.W   #1,D0
  1887.     BEQ SelectSongs
  1888.     BRA SelectSamples
  1889.  
  1890. SwapDirScreen
  1891.     MOVE.L  DecompMemPtr,D0
  1892.     BEQ.S   sdirs2
  1893.     MOVE.L  D0,A1
  1894.     BSR.S   ssets3
  1895.     BRA FreeDecompMem
  1896. sdirs2  LEA DirScreenData,A0
  1897.     MOVE.L  #DirScreenSize,D0
  1898.     BSR Decompact
  1899.     BEQ Return1
  1900. ssets3  LEA BitplaneData,A0
  1901.     MOVEQ   #1,D2
  1902. sxloop1 MOVE.W  #999,D0
  1903. sxloop2 MOVE.L  (A0),D1
  1904.     MOVE.L  (A1),(A0)+
  1905.     MOVE.L  D1,(A1)+
  1906.     DBRA    D0,sxloop2
  1907.     LEA 6240(A0),A0
  1908.     DBRA    D2,sxloop1
  1909.     RTS
  1910.  
  1911. CheckDirGadgets
  1912.     MOVEM.W MouseX2,D0/D1
  1913.     CMP.W   #44,D1
  1914.     BHI CheckDirGadgets2
  1915.     CMP.W   #33,D1
  1916.     BLS.S   ExtrasMenu
  1917.     CMP.W   #11,D0
  1918.     BLO DirBrowseGadg
  1919.     CMP.W   #187,D0
  1920.     BLO DirPathGadg
  1921.     CMP.W   #216,D0
  1922.     BLO ParentDirGadg
  1923.     CMP.W   #307,D0
  1924.     BLO ShowFreeDiskGadg
  1925.     BRA CheckDirGadgets2
  1926.  
  1927. ExtrasMenu
  1928.     CMP.W   #94,D0
  1929.     BHS ToggleMenu
  1930.     CMP.W   #22,D1
  1931.     BHI.S   DeleteFileGadg
  1932.     CMP.W   #11,D1
  1933.     BHI.S   RenameFileGadg
  1934.     BRA DiskFormatGadg
  1935.  
  1936. RenameFileGadg
  1937.     BSR StorePtrCol
  1938.     BSR WaitForButtonUp
  1939.     BSR ClearFileNames
  1940.     MOVE.L  PathPtr,A4
  1941.     BSR ShowDirPath
  1942.     LEA FileNamesPtr(PC),A5
  1943.     BSR HasDiskChanged
  1944.     BEQ.S   RenameFileDirOk
  1945.     BSR ClearDirTotal
  1946.     BSR DirDisk
  1947.     BNE RestorePtrCol
  1948.  
  1949. RenameFileDirOk
  1950.     MOVE.W  FileNameScrollPos,D0
  1951.     BSR RedrawFileNames
  1952.     MOVE.W  #10,Action
  1953.     LEA SelectFileText,A0
  1954.     JSR ShowStatusText
  1955.     BRA RestorePtrCol
  1956.  
  1957. DeleteFileGadg
  1958.     MOVE.W  DirPathNum,D0
  1959.     BEQ DeleteModuleGadg
  1960.     CMP.W   #1,D0
  1961.     BEQ DeleteSongGadg
  1962.     CMP.W   #2,D0
  1963.     BEQ DeleteSampleGadg
  1964.     RTS
  1965.  
  1966. ToggleMenu
  1967.     CMP.W   #146,D0
  1968.     BHS SelectMenu
  1969.     CMP.W   #22,D1
  1970.     BHI ToggleIFFSave
  1971.     CMP.W   #11,D1
  1972.     BHI.S   ToggleSongPack
  1973. ToggleModPack
  1974.     CLR.B   ModPackMode
  1975.     BSR ShowNotImpl
  1976. ShowModPackMode
  1977.     LEA ToggleOFFText(PC),A0
  1978.     TST.B   ModPackMode
  1979.     BEQ.S   smpmskp
  1980.     LEA ToggleONText2(PC),A0
  1981. smpmskp MOVEQ   #3,D0
  1982.     MOVE.W  #175,D1
  1983.     JSR ShowText3
  1984.     BRA WaitForButtonUp
  1985.  
  1986. ShowNotImpl
  1987.     LEA NotImplText(PC),A0
  1988.     JSR ShowStatusText
  1989.     BRA SetErrorPtrCol
  1990.  
  1991. NotImplText dc.b    'Not implemented',0
  1992.  
  1993. ToggleSongPack
  1994.     EOR.B   #1,PackMode
  1995. ShowPackMode
  1996.     LEA ToggleOFFText(PC),A0
  1997.     TST.B   PackMode
  1998.     BEQ.S   spsskip
  1999.     LEA ToggleONText2(PC),A0
  2000. spsskip MOVEQ   #3,D0
  2001.     MOVE.W  #615,D1
  2002.     JSR ShowText3
  2003.     BRA WaitForButtonUp
  2004.  
  2005. ToggleIFFSave
  2006.     EOR.B   #1,RAWIFFMode
  2007. ShowRAWIFFMode
  2008.     LEA RAWText(PC),A0
  2009.     TST.B   RAWIFFMode
  2010.     BEQ.S   sraffu
  2011.     LEA IFFText(PC),A0
  2012. sraffu  MOVEQ   #3,D0
  2013.     MOVE.W  #1055,D1
  2014.     JSR ShowText3
  2015.     BRA WaitForButtonUp
  2016.  
  2017. RAWText dc.b "RAW",0
  2018. IFFText dc.b "IFF",0
  2019.  
  2020. SelectMenu
  2021.     CMP.W   #156,D0
  2022.     BHS LoadMenu
  2023.     CMP.W   #22,D1
  2024.     BHI SelectSamples
  2025.     CMP.W   #11,D1
  2026.     BHI SelectSongs
  2027.     BRA SelectModules
  2028.  
  2029. LoadMenu
  2030.     CMP.W   #238,D0
  2031.     BHS.S   SaveMenu
  2032.     CMP.W   #22,D1
  2033.     BHI LoadSampleGadg
  2034.     CMP.W   #11,D1
  2035.     BHI LoadSongGadg
  2036.     BRA LoadModuleGadg
  2037.  
  2038. SaveMenu
  2039.     CMP.W   #22,D1
  2040.     BHI SaveSampleGadg
  2041.     CMP.W   #11,D1
  2042.     BHI SaveSongGadg
  2043.     BRA SaveModuleGadg
  2044.  
  2045. CheckDirGadgets2
  2046.     MOVEM.W MouseX2,D0/D1
  2047.     CMP.W   #3,CurrScreen
  2048.     BNE Return1
  2049.     CMP.W   #307,D0
  2050.     BLO FileNamePressed
  2051.     CMP.W   #44,D1
  2052.     BLS FileNameOneUp
  2053.     CMP.W   #89,D1
  2054.     BLO.S   ExitFromDir
  2055.     BRA FileNameOneDown
  2056.  
  2057. ExitFromDir
  2058.     BSR WaitForButtonUp
  2059.     CLR.B   RawKeyCode
  2060.     BSR SwapDirScreen
  2061.     BSR Clear100Lines
  2062. DisplayMainAll
  2063.     BSR DisplayMainScreen
  2064.     JSR ShowSongLength
  2065.     JSR ShowSampleInfo
  2066.     JSR ShowSongName
  2067.     BSR Show_MS
  2068.     TST.W   LoadInProgress
  2069.     BNE.S   dimaskp
  2070.     JSR ShowAllRight
  2071. dimaskp JMP ShowPosition
  2072.  
  2073. DirBrowseGadg
  2074.     MOVEQ   #0,D3
  2075.     MOVE.W  DirPathNum,D3
  2076.     LEA dpnum(PC),A0
  2077.     ADD.L   D3,A0
  2078.     MOVEQ   #0,D0
  2079.     MOVE.B  (A0),D0
  2080.     ADDQ.B  #1,D0
  2081.     CMP.B   #7,D0
  2082.     BLO.S   dbgskip
  2083.     MOVEQ   #0,D0
  2084. dbgskip MOVE.B  D0,(A0)
  2085.     MULU    #5,D0
  2086.     MOVE.L  PathPtr,A0
  2087.     MOVEQ   #63,D1
  2088.     MOVEQ   #0,D2
  2089. dbglop1 MOVE.B  D2,(A0)+
  2090.     DBRA    D1,dbglop1
  2091.     LEA dirpaths(PC),A0
  2092.     LEA -5(A0,D0.W),A0
  2093.     TST.W   D0
  2094.     BNE.S   dbgskp2
  2095.     LEA ModulesPath,A0
  2096.     TST.W   D3
  2097.     BEQ.S   dbgskp2
  2098.     LEA SongsPath,A0
  2099.     CMP.W   #1,D3
  2100.     BEQ.S   dbgskp2
  2101.     LEA SamplePath,A0
  2102. dbgskp2 MOVE.L  PathPtr,A1
  2103. dbglop2 MOVE.B  (A0)+,(A1)+
  2104.     BNE.S   dbglop2
  2105.     BSR ShowDirPath
  2106.     MOVE.W  #3,WaitTime
  2107.     BRA WaitALittle
  2108.  
  2109. dirpaths
  2110.     dc.b "DF0:",0,"DF1:",0,"DH0:",0,"DH1:",0,"RAM:",0,"ST-00:",0
  2111. dpnum   dc.b 0,0,0,0
  2112. DirPathNum
  2113.     dc.w 3
  2114.  
  2115. SelectModules
  2116.     MOVEQ   #0,D0
  2117.     BRA.S   ChangePath
  2118. SelectSongs
  2119.     MOVEQ   #1,D0
  2120.     BRA.S   ChangePath
  2121. SelectSamples
  2122.     MOVEQ   #2,D0
  2123. ChangePath
  2124.     MOVE.L  TextBplPtr,A0
  2125.     LEA 178(A0),A0
  2126.     MOVEQ   #0,D2
  2127.     MOVEQ   #26,D1
  2128. chpalop MOVE.W  D2,(A0)
  2129.     LEA 40(A0),A0
  2130.     DBRA    D1,chpalop
  2131.     LEA ModulesPath2,A4
  2132.     MOVE.W  #178,D1
  2133.     MOVE.W  D0,DirPathNum
  2134.     BEQ.S   chpaski
  2135.     LEA SongsPath2,A4
  2136.     MOVE.W  #618,D1
  2137.     CMP.W   #1,D0
  2138.     BEQ.S   chpaski
  2139.     LEA SamplePath2,A4
  2140.     MOVE.W  #1058,D1
  2141. chpaski MOVE.L  TextBplPtr,A0
  2142.     LEA (A0,D1.W),A0
  2143.     MOVE.W  #$0100,(A0)
  2144.     MOVE.W  #$0F80,40(A0)
  2145.     MOVE.W  #$0FC0,80(A0)
  2146.     MOVE.W  #$0F80,120(A0)
  2147.     MOVE.W  #$0100,160(A0)
  2148.     MOVE.L  A4,PathPtr
  2149.     BSR ShowDirPath
  2150.     BRA WaitForButtonUp
  2151.  
  2152. ;---- Song Gadgets ----
  2153.  
  2154. LoadSongGadg
  2155.     BSR StorePtrCol
  2156.     BSR WaitForButtonUp
  2157.     BSR ClearFileNames
  2158.     BSR SelectSongs
  2159.     LEA FileNamesPtr(PC),A5
  2160.     BSR HasDiskChanged
  2161.     BEQ LoadSongDirOk
  2162.     BSR ClearDirTotal
  2163.     BSR DirDisk
  2164.     BNE RestorePtrCol
  2165. LoadSongDirOk
  2166.     MOVE.W  FileNameScrollPos,D0
  2167.     BSR RedrawFileNames
  2168.     MOVE.W  #1,Action
  2169.     LEA SelectSongText,A0
  2170.     JSR ShowStatusText
  2171.     BRA RestorePtrCol
  2172.  
  2173. SaveSongGadg
  2174.     BSR SelectSongs
  2175.     LEA SaveSongText,A0
  2176.     BSR AreYouSure
  2177.     BNE Return1
  2178.     BSR RestorePtrCol
  2179.     BSR ClearFileNames
  2180.     BSR StopIt
  2181.     JSR SaveSong
  2182.     MOVE.W  #1,Action
  2183.     RTS
  2184.  
  2185. DeleteSongGadg
  2186.     BSR WaitForButtonUp
  2187.     BSR ClearFileNames
  2188.     BSR SelectSongs
  2189.     LEA FileNamesPtr(PC),A5
  2190.     BSR HasDiskChanged
  2191.     BEQ.S   DeleteSongDirOk
  2192.     BSR ClearDirTotal
  2193.     BSR DirDisk
  2194.     BEQ.S   DeleteSongDirOk
  2195.     BRA RestorePtrCol
  2196.  
  2197. DeleteSongDirOk
  2198.     MOVE.W  FileNameScrollPos,D0
  2199.     BSR RedrawFileNames
  2200.     MOVE.W  #2,Action
  2201.     LEA SelectSongText,A0
  2202.     JSR ShowStatusText
  2203.     BRA SetDeletePtrCol
  2204.  
  2205. ;---- Module Gadgets ----
  2206.  
  2207. LoadModuleGadg
  2208.     BSR StorePtrCol
  2209.     BSR WaitForButtonUp
  2210.     BSR ClearFileNames
  2211.     BSR SelectModules
  2212.     LEA FileNamesPtr(PC),A5
  2213.     BSR HasDiskChanged
  2214.     BEQ.S   LoadModDirOk
  2215.     BSR ClearDirTotal
  2216.     BSR DirDisk
  2217.     BEQ.S   LoadModDirOk
  2218.     BRA RestorePtrCol
  2219.  
  2220. LoadModDirOk
  2221.     MOVE.W  FileNameScrollPos,D0
  2222.     BSR RedrawFileNames
  2223.     MOVE.W  #3,Action
  2224.     LEA SelectModuleText,A0
  2225.     JSR ShowStatusText
  2226.     BRA RestorePtrCol
  2227.  
  2228. SaveModuleGadg
  2229.     BSR SelectModules
  2230.     LEA SaveModuleText,A0
  2231.     BSR AreYouSure
  2232.     BNE Return1
  2233.     JSR SaveModule
  2234.     MOVE.W  #3,Action
  2235.     JMP ShowAllRight
  2236.  
  2237. DeleteModuleGadg
  2238.     BSR WaitForButtonUp
  2239.     BSR ClearFileNames
  2240.     BSR SelectModules
  2241.     LEA FileNamesPtr(PC),A5
  2242.     BSR HasDiskChanged
  2243.     BEQ.S   DeleteModDirOk
  2244.     BSR ClearDirTotal
  2245.     BSR DirDisk
  2246.     BEQ.S   DeleteModDirOk
  2247.     BRA RestorePtrCol
  2248.  
  2249. DeleteModDirOk
  2250.     MOVE.W  FileNameScrollPos(PC),D0
  2251.     BSR RedrawFileNames
  2252.     MOVE.W  #4,Action
  2253.     LEA SelectModuleText,A0
  2254.     JSR ShowStatusText
  2255.     BRA SetDeletePtrCol
  2256.  
  2257. ;---- Sample Gadgets ----
  2258.  
  2259. LoadSampleGadg
  2260.     BSR StorePtrCol
  2261.     BSR WaitForButtonUp
  2262.     BSR ClearFileNames
  2263.     BSR SelectSamples
  2264.     LEA FileNamesPtr(PC),A5
  2265.     BSR HasDiskChanged
  2266.     BEQ.S   LoadSampleDirOk
  2267.     BSR ClearDirTotal
  2268.     BSR DirDisk
  2269.     BEQ.S   LoadSampleDirOk
  2270.     BRA RestorePtrCol
  2271.  
  2272. LoadSampleDirOk
  2273.     MOVE.W  FileNameScrollPos,D0
  2274.     BSR RedrawFileNames
  2275.     MOVE.W  #5,Action
  2276.     LEA SelectSampleText,A0
  2277.     JSR ShowStatusText
  2278.     BRA RestorePtrCol
  2279.  
  2280. SaveSampleGadg
  2281.     BSR SelectSamples
  2282.     CLR.B   RawKeyCode
  2283.     MOVE.W  InsNum,D0
  2284.     BEQ NotSampleNull
  2285.     LEA SaveSampleText,A0
  2286.     BSR AreYouSure
  2287.     BNE Return1
  2288.     BSR StorePtrCol
  2289.     BSR CreateSampleName
  2290.     MOVEQ   #0,D1
  2291.     MOVE.W  InsNum,D1
  2292.     LSL.L   #2,D1
  2293.     LEA SamplePtrs,A0
  2294.     MOVE.L  0(A0,D1.W),DiskDataPtr
  2295.  
  2296.     BSR SetDiskPtrCol
  2297.     MOVE.L  DOSbase,A6
  2298.     MOVE.L  FileNamePtr,D1
  2299.     MOVE.L  #1006,D2
  2300.     JSR LVOOpen(A6)
  2301.     MOVE.L  D0,FileHandle
  2302.     BNE SaveSample
  2303.     JSR CantOpenFile
  2304.     BRA ErrorRestoreCol
  2305.  
  2306. SaveSample
  2307.     LEA SavingSampleText,A0
  2308.     JSR ShowStatusText
  2309.     TST.B   RAWIFFMode
  2310.     BEQ savesam
  2311.     MOVE.L  FileHandle,D1
  2312.     MOVE.L  #IFFFORM,D2
  2313.     MOVEQ   #IFFEND-IFFFORM,D3
  2314.     JSR LVOWrite(A6)
  2315. savesam MOVE.L  FileHandle,D1
  2316.     MOVE.L  DiskDataPtr,D2
  2317.     MOVE.L  DiskDataLength,D3
  2318.     JSR LVOWrite(A6)
  2319.  
  2320.     MOVE.L  FileHandle,D1
  2321.     JSR LVOClose(A6)
  2322.     CLR.L   FileHandle
  2323.     MOVE.W  #5,Action
  2324.     JSR ShowAllRight
  2325.     BRA RestorePtrCol
  2326.  
  2327. IFFFORM dc.b    "FORM"
  2328.     dc.l    0
  2329.     dc.b    "8SVX"
  2330. IFFVHDR dc.b    "VHDR"
  2331.     dc.l    20
  2332.     dc.l    0,0,32  ; oneshot, repeat, hisamples
  2333.     dc.w    16726   ; This is really NTSC (16574 for PAL!!!)
  2334.     dc.b    1,0 ; octaves, compression
  2335.     dc.l    $10000  ; volume
  2336. IFFNAME dc.b    "NAME"
  2337.     dc.l    24
  2338.     dcb.b   24,0
  2339.     dc.b    "ANNO"
  2340.     dc.l    16
  2341.     dc.b    "Protracker 2.0A",0
  2342. IFFBODY dc.b    "BODY"
  2343.     dc.l    0
  2344. IFFEND
  2345.  
  2346.  
  2347. ;---- Delete Sample ----
  2348.  
  2349. DeleteSampleGadg
  2350.     BSR StorePtrCol
  2351.     BSR WaitForButtonUp
  2352.     BSR ClearFileNames
  2353.     BSR SelectSamples
  2354.     LEA FileNamesPtr(PC),A5
  2355.     BSR HasDiskChanged
  2356.     BEQ.S   DeleteSamDirOk
  2357.     BSR ClearDirTotal
  2358.     BSR DirDisk
  2359.     BEQ.S   DeleteSamDirOk
  2360.     BRA RestorePtrCol
  2361.  
  2362. DeleteSamDirOk
  2363.     MOVE.W  FileNameScrollPos(PC),D0
  2364.     BSR RedrawFileNames
  2365.     MOVE.W  #6,Action
  2366.     LEA SelectSampleText,A0
  2367.     JSR ShowStatusText
  2368.     BRA SetDeletePtrCol
  2369.  
  2370. ;---- Directory Path Gadget ----
  2371.  
  2372. DirPathGadg
  2373.     BSR StorePtrCol
  2374.     BSR SetWaitPtrCol
  2375.     MOVE.L  PathPtr,A6
  2376.     MOVE.L  A6,ShowTextPtr
  2377.     MOVE.L  A6,TextEndPtr
  2378.     ADD.L   #63,TextEndPtr
  2379.     MOVE.W  #19,TextLength
  2380.     MOVE.W  #1484,A4
  2381.     BSR GetTextLine
  2382.     BRA RestorePtrCol
  2383.  
  2384.  
  2385. CopyPath
  2386.     LEA FileName,A1
  2387.     TST.B   (A0)        ; If no path
  2388.     BEQ Return1
  2389. cploop  MOVE.B  (A0)+,(A1)+ ; Copy path to filename
  2390.     BNE.S   cploop
  2391.     CMP.B   #':',-2(A1) ; If ending with ':' it's ok
  2392.     BEQ.S   PathCharBack
  2393.     CMP.B   #'/',-2(A1) ; If ending with '/' it's ok
  2394.     BEQ.S   PathCharBack
  2395.     MOVE.B  #'/',-1(A1) ; Add '/' to end path
  2396.     RTS
  2397.  
  2398. PathCharBack
  2399.     SUBQ.L  #1,A1
  2400.     RTS
  2401.  
  2402. ShowDirPath
  2403.     CMP.W   #3,CurrScreen
  2404.     BNE Return1
  2405.     MOVEM.L D0-D7/A0-A6,-(SP)
  2406.     MOVE.L  PathPtr,A0
  2407.     MOVEQ   #19,D0
  2408.     MOVE.W  #1484,D1
  2409.     JSR ShowText3
  2410.     MOVEM.L (SP)+,D0-D7/A0-A6
  2411.     RTS
  2412.  
  2413. ;---- File List Gadgets ----
  2414.  
  2415. FileNameOneUp
  2416.     TST.W   Action
  2417.     BEQ Return1
  2418.     LEA FileNamesPtr(PC),A5
  2419.     MOVE.W  FileNameScrollPos(PC),D0
  2420.     BEQ Return1
  2421.     SUBQ.W  #1,D0
  2422.     BTST    #2,$DFF016
  2423.     BNE RedrawFileNames
  2424.     SUBQ.W  #3,D0
  2425.     BPL RedrawFileNames
  2426.     MOVEQ   #0,D0
  2427.     BRA RedrawFileNames
  2428.  
  2429. FileNameOneDown
  2430.     TST.W   Action
  2431.     BEQ Return1
  2432.     LEA FileNamesPtr(PC),A5
  2433.     MOVE.W  FileNameScrollPos(PC),D0
  2434.     ADDQ.W  #1,D0
  2435.     BTST    #2,$DFF016
  2436.     BNE.S   fnod2
  2437.     ADDQ.W  #3,D0
  2438. fnod2   MOVE.W  16(A5),D1
  2439.     SUBQ.W  #8,D1
  2440.     BMI Return1
  2441.     CMP.W   D1,D0
  2442.     BLS RedrawFileNames
  2443.     MOVE.W  D1,D0
  2444.     BRA RedrawFileNames
  2445.  
  2446. ;---- Clicked on a filename ----
  2447.  
  2448. FileNamePressed
  2449.     SUB.W   #44,D1
  2450.     MOVE.W  #1,UpdateFreeMem
  2451.     TST.W   Action
  2452.     BEQ Return1
  2453.     CMP.W   #3,D1
  2454.     BLO Return1
  2455.     CMP.W   #50,D1
  2456.     BHI Return1
  2457.     SUBQ.W  #3,D1
  2458.     AND.L   #$FFFF,D1
  2459.     DIVU    #6,D1
  2460.     MOVE.W  D1,FileNameScrollPos+2
  2461.     LEA FileNamesPtr(PC),A5
  2462.     MOVE.W  FileNameScrollPos(PC),D0
  2463.     ADD.W   D1,D0
  2464.     CMP.W   16(A5),D0
  2465.     BHS Return1
  2466.     MULU    #36,D0
  2467.     ADD.L   (A5),D0
  2468.     MOVE.L  D0,A0
  2469.     TST.L   32(A0)
  2470.     BMI.S   AddDirectory
  2471.     MOVEQ   #DirNameLength-1,D0
  2472.     LEA DirInputName,A1
  2473. fnploop MOVE.B  (A0)+,(A1)+
  2474.     DBRA    D0,fnploop
  2475.     MOVE.W  Action,D6
  2476.     CMP.W   #1,D6
  2477.     BEQ LoadSong
  2478.     CMP.W   #2,D6
  2479.     BEQ DeleteSong
  2480.     CMP.W   #3,D6
  2481.     BEQ xLoadModule
  2482.     CMP.W   #4,D6
  2483.     BEQ DeleteModule
  2484.     CMP.W   #5,D6
  2485.     BEQ LoadSample
  2486.     CMP.W   #6,D6
  2487.     BEQ DeleteSample
  2488.     CMP.W   #10,D6
  2489.     BEQ RenameFile
  2490.     RTS
  2491.  
  2492. xLoadModule JMP LoadModule
  2493.  
  2494. AddDirectory
  2495.     MOVE.L  A0,-(SP)
  2496.     MOVE.L  PathPtr,A0
  2497.     BSR CopyPath
  2498.     MOVE.L  (SP)+,A0
  2499.     MOVEQ   #DirNameLength-1,D0
  2500. addplop MOVE.B  (A0)+,(A1)+
  2501.     DBRA    D0,addplop
  2502.     LEA FileName,A0
  2503.     MOVE.L  PathPtr,A1
  2504.     MOVEQ   #62,D0
  2505. addplp2 MOVE.B  (A0)+,(A1)+
  2506.     DBRA    D0,addplp2
  2507. addpdir BSR ShowDirPath
  2508.     MOVE.W  Action,D6
  2509.     CMP.W   #1,D6
  2510.     BEQ LoadSongGadg
  2511.     CMP.W   #2,D6
  2512.     BEQ DeleteSongGadg
  2513.     CMP.W   #3,D6
  2514.     BEQ LoadModuleGadg
  2515.     CMP.W   #4,D6
  2516.     BEQ DeleteModuleGadg
  2517.     CMP.W   #5,D6
  2518.     BEQ LoadSampleGadg
  2519.     CMP.W   #6,D6
  2520.     BEQ DeleteSampleGadg
  2521.     CMP.W   #10,D6
  2522.     BEQ RenameFileGadg
  2523.     RTS
  2524.  
  2525. ParentDirGadg
  2526.     BSR WaitForButtonUp
  2527.     MOVE.L  PathPtr,A0
  2528.     MOVE.L  A0,A1
  2529. pdgloop TST.B   (A1)+
  2530.     BNE.S   pdgloop
  2531.     SUBQ.L  #1,A1
  2532.     CMP.L   A0,A1
  2533.     BLS Return1
  2534.     SUBQ.L  #1,A1
  2535.     CMP.B   #'/',(A1)
  2536.     BNE.S   pdgskp1
  2537.     CLR.B   (A1)
  2538. pdgskp1 CMP.B   #':',(A1)
  2539.     BEQ.S   addpdir
  2540.     CMP.B   #'/',(A1)
  2541.     BEQ pdgslsh
  2542.     CLR.B   (A1)
  2543.     CMP.L   A0,A1
  2544.     BLS.S   addpdir
  2545.     SUBQ.L  #1,A1
  2546.     BRA.S   pdgskp1
  2547.  
  2548. pdgslsh CLR.B   (A1)
  2549.     BRA addpdir
  2550.  
  2551. FileNamesPtr
  2552.     dc.l    0  ; A5+ 0
  2553.     dc.l    0  ;   + 4
  2554.     dc.l    0  ;   + 8
  2555.     dc.l    0  ;   +12
  2556.     dc.w    0  ;   +16
  2557.     dc.w    24 ;   +18
  2558. FileNameScrollPos
  2559.     dc.w    0
  2560.     dc.w    0
  2561.  
  2562. ;---- Has Disk Changed ----
  2563.  
  2564. HasDiskChanged
  2565.     MOVE.L  DOSbase,A6
  2566.     MOVE.L  A4,D1
  2567.     MOVEQ   #-2,D2
  2568.     JSR LVOLock(A6)
  2569.     MOVE.L  D0,FileLock
  2570.     BEQ.S   ExamineError
  2571.     MOVE.L  FileLock,D1
  2572.     MOVE.L  #FileInfoBlock,D2
  2573.     JSR LVOExamine(A6)
  2574.     TST.L   D0
  2575.     BEQ.S   ExamineError
  2576.     LEA FileInfoBlock,A0
  2577.     MOVE.L  ofib_DateStamp+ds_Days(A0),D0
  2578.     CMP.L   4(A5),D0
  2579.     BNE.S   DiskChanged
  2580.     MOVE.L  ofib_DateStamp+ds_Minute(A0),D0
  2581.     CMP.L   8(A5),D0
  2582.     BNE.S   DiskChanged
  2583.     MOVE.L  ofib_DateStamp+ds_Tick(A0),D0
  2584.     CMP.L   12(A5),D0
  2585.     BNE.S   DiskChanged
  2586.     MOVE.L  FileLock,D1
  2587.     JSR LVOUnLock(A6)
  2588.     MOVEQ   #0,D0
  2589.     RTS
  2590.  
  2591. DiskChanged
  2592.     MOVE.L  ofib_DateStamp+ds_Days(A0),4(A5)
  2593.     MOVE.L  ofib_DateStamp+ds_Minute(A0),8(A5)
  2594.     MOVE.L  ofib_DateStamp+ds_Tick(A0),12(A5)
  2595.     MOVE.L  FileLock,D1
  2596.     JSR LVOUnLock(A6)
  2597.     MOVEQ   #-1,D0
  2598.     RTS
  2599.  
  2600. ExamineError
  2601.     CLR.L   4(A5)
  2602.     MOVEQ   #-1,D0
  2603.     RTS
  2604.  
  2605. ShowFreeDiskGadg
  2606.     BSR WaitForButtonUp
  2607.     BSR.S   LockAndGetInfo
  2608.     BSR DirDiskUnlock
  2609.     JMP ShowAllRight
  2610.  
  2611. LockAndGetInfo
  2612.     BSR StorePtrCol
  2613.     BSR SetDiskPtrCol
  2614.     CLR.W   FileNameScrollPos
  2615.     MOVE.L  DOSbase,A6
  2616.     MOVE.L  A4,D1   ; Dir-path in A4
  2617.     MOVEQ   #-2,D2
  2618.     JSR LVOLock(A6)
  2619.     MOVE.L  D0,FileLock
  2620.     BEQ DirDiskError
  2621.     LEA ReadingDirText,A0
  2622.     JSR ShowStatusText
  2623.     MOVE.L  FileLock,D1
  2624.     MOVE.L  #InfoData,D2
  2625.     JSR LVOInfo(A6)
  2626.     LEA InfoData,A0
  2627.     MOVE.L  12(A0),D0 ; id_NumBlocks
  2628.     SUB.L   16(A0),D0 ; id_NumBlocksUsed
  2629.     MULU    22(A0),D0 ; id_BytesPerBlock + 2
  2630.     MOVE.L  D0,FreeDiskSpace
  2631. ShowDiskSpace
  2632.     MOVE.W  #1510,TextOffset
  2633.     MOVE.L  FreeDiskSpace,D7
  2634.     TST.B   ShowDecFlag
  2635.     BNE.S   sdsdec
  2636.     SWAP    D7
  2637.     MOVE.W  D7,WordNumber
  2638.     JSR PrintHexWord
  2639.     SWAP    D7
  2640.     MOVE.W  D7,WordNumber
  2641.     JSR PrintHexWord
  2642.     MOVEQ   #0,D0
  2643.     RTS
  2644.  
  2645. sdsdec  DIVU    #10000,D7
  2646.     MOVE.W  D7,WordNumber
  2647.     JSR Print4DecDigits
  2648.     SWAP    D7
  2649.     MOVE.W  D7,WordNumber
  2650.     JSR Print4DecDigits
  2651.     MOVEQ   #0,D0
  2652.     RTS
  2653.  
  2654. ;---- Get Disk Directory ----
  2655.  
  2656. AllocDirMem
  2657.     ADD.W   #50,DirEntries
  2658.     MOVE.W  DirEntries,D0
  2659.     MULU    #36,D0
  2660.     MOVE.L  DirAllocSize(PC),D6
  2661.     MOVE.L  D0,DirAllocSize
  2662.     MOVE.L  #MEMF_PUBLIC!MEMF_CLEAR,D1
  2663.     MOVE.L  4.W,A6
  2664.     JSR LVOAllocMem(A6)
  2665.     MOVE.L  D0,D7
  2666.     BEQ.S   baehsj
  2667.  
  2668.     MOVE.L  FileNamesPtr(PC),D1
  2669.     MOVE.L  D7,FileNamesPtr
  2670.     TST.L   D1
  2671.     BEQ Return1
  2672.     TST.L   D6
  2673.     BEQ Return1
  2674.     MOVE.L  D1,A0
  2675.     MOVE.L  D7,A1
  2676.     MOVE.L  D6,D0
  2677. admloop MOVE.B  (A0)+,(A1)+
  2678.     SUBQ.L  #1,D6
  2679.     BNE.S   admloop
  2680.     MOVE.L  D1,A1
  2681.     MOVE.L  4.W,A6
  2682.     JSR LVOFreeMem(A6)
  2683.     RTS
  2684.  
  2685. FreeDirMem
  2686.     MOVE.L  FileNamesPtr(PC),D1
  2687.     BEQ Return1
  2688.     MOVE.L  D1,A1
  2689.     MOVE.L  DirAllocSize(PC),D0
  2690.     MOVE.L  4.W,A6
  2691.     JSR LVOFreeMem(A6)
  2692.     CLR.L   FileNamesPtr
  2693.     CLR.W   DirAllocSize
  2694.     CLR.W   DirEntries
  2695.     RTS
  2696.  
  2697. baehsj  BSR OutOfMemErr
  2698.     MOVEQ   #-1,D0
  2699.     RTS
  2700.  
  2701. DirAllocSize    dc.l    0
  2702. DirEntries  dc.w    0
  2703.  
  2704. DirDisk BSR FreeDirMem
  2705.     BSR AllocDirMem
  2706.     BSR LockAndGetInfo
  2707.     BNE Return1
  2708.     MOVE.L  FileLock,D1
  2709.     MOVE.L  #FileInfoBlock,D2
  2710.     JSR LVOExamine(A6)
  2711.     TST.L   D0
  2712.     BEQ DirDiskError
  2713. ddloop1 MOVE.L  FileLock,D1
  2714.     MOVE.L  #FileInfoBlock,D2
  2715.     MOVE.L  DOSBase,A6
  2716.     JSR LVOExNext(A6)
  2717.     TST.L   D0
  2718.     BEQ DirDiskUnlock
  2719.     BTST    #2,$DFF016
  2720.     BEQ.S   AbortDir
  2721.     BSR NewDirEntry
  2722.     BRA.S   ddloop1
  2723.  
  2724. AbortDir
  2725.     CLR.L   4(A5)
  2726.     LEA DirAbortedText(PC),A0
  2727.     JSR ShowStatusText
  2728.     BSR.S   DirDiskUnlock
  2729.     BSR WaitALittle
  2730.     JSR ShowAllRight
  2731.     MOVEQ   #0,D0
  2732.     RTS
  2733.  
  2734. DirDiskUnlock
  2735.     MOVE.L  FileLock,D1
  2736.     JSR LVOUnLock(A6)
  2737.     BSR RestorePtrCol
  2738.     MOVEQ   #0,D0
  2739.     RTS
  2740.  
  2741. DirAbortedText  dc.b 'dir aborted !',0
  2742.  
  2743. DirDiskError
  2744.     TST.L   FileLock
  2745.     BEQ.S   ddeskip
  2746.     MOVE.L  FileLock,D1
  2747.     JSR LVOUnLock(A6)
  2748. ddeskip BSR RestorePtrCol
  2749.     LEA CantFindDirText,A0
  2750.     JSR ShowStatusText
  2751.     BSR SetErrorPtrCol
  2752.     MOVEQ   #-1,D0
  2753.     RTS
  2754.  
  2755. ClearDirTotal
  2756.     CLR.W   16(A5)
  2757.     RTS
  2758.  
  2759. CantFindDirText dc.b "can't find dir !",0,0
  2760.  
  2761.  
  2762. NewDirEntry
  2763.     LEA FIB_FileName,A0
  2764.     TST.B   ShowDirsFlag
  2765.     BNE.S   ndeok1
  2766.     TST.L   FIB_EntryType
  2767.     BPL Return1
  2768. ndeok1  TST.L   FIB_EntryType
  2769.     BPL ndeok2
  2770.     TST.B   ModOnlyFlag
  2771.     BEQ.S   ndeok2
  2772.     TST.W   DirPathNum
  2773.     BNE.S   ndeok2
  2774.     MOVE.L  (A0),D0
  2775.     AND.L   #$CFCFCFCF,D0
  2776.     CMP.L   #$4D4F440E,D0 ; MOD.
  2777.     BNE Return1
  2778. ndeok2  MOVE.W  16(A5),D0
  2779.     CMP.W   DirEntries,D0
  2780.     BLO.S   ndeok3
  2781.     MOVE.L  A0,-(SP)
  2782.     BSR AllocDirMem
  2783.     MOVE.L  (SP)+,A0
  2784. ndeok3  MOVE.W  16(A5),D6
  2785.     BEQ.S   ndeadd1     ; If first entry
  2786.     SUBQ.W  #1,D6
  2787.     MOVE.L  (A5),A1
  2788. ndeloopname
  2789.     MOVEQ   #0,D2
  2790.     MOVE.L  FIB_EntryType,D0
  2791.     MOVE.L  32(A1),D1
  2792.     TST.L   D0
  2793.     BPL.S   ndesfil ; if directory, all is well
  2794.     TST.L   D1
  2795.     BMI.S   ndenext ; was file, so skip if directory
  2796.     BRA.S   ndelopc
  2797. ndesfil TST.L   D1  ; if file
  2798.     BPL.S   ndeinse
  2799. ndelopc MOVE.B  (A0,D2.W),D0 ; Get a character
  2800.     BEQ.S   ndeinse
  2801.     CMP.B   #96,D0  ; Lowercase?
  2802.     BLO.S   ndeskp1
  2803.     SUB.B   #32,D0  ; Switch to upper
  2804. ndeskp1 MOVE.B  (A1,D2.W),D1
  2805.     BEQ.S   ndenext
  2806.     CMP.B   #96,D1
  2807.     BLO.S   ndeskp2
  2808.     SUB.B   #32,D1
  2809. ndeskp2 CMP.B   D0,D1
  2810.     BHI.S   ndeinse
  2811.     BNE.S   ndenext
  2812.     ADDQ.W  #1,D2
  2813.     BRA.S   ndelopc
  2814. ndenext LEA 36(A1),A1   ; next entry
  2815.     DBRA    D6,ndeloopname  ; loop entries
  2816.     MOVE.L  (A5),A1
  2817.     MOVE.W  16(A5),D0
  2818.     MULU    #36,D0
  2819.     ADD.W   D0,A1
  2820.     BRA.S   ndeadd2
  2821.  
  2822. ndeinse MOVE.L  (A5),A2
  2823.     MOVE.W  16(A5),D0
  2824.     MULU    #36,D0
  2825.     ADD.W   D0,A2
  2826.     MOVE.L  A2,A3
  2827.     LEA 36(A3),A3
  2828. nde3loop
  2829.     MOVE.W  -(A2),-(A3)
  2830.     CMP.L   A2,A1
  2831.     BNE.S   nde3loop
  2832.     BRA.S   ndeadd2
  2833.  
  2834. ndeadd1 MOVE.L  (A5),A1            ; Put new filename into list
  2835. ndeadd2 LEA FIB_FileName,A0
  2836.     MOVE.L  A1,A3
  2837.     MOVEQ   #35,D0             ; Clear old filename
  2838. nde4loop
  2839.     CLR.B   (A3)+
  2840.     DBRA    D0,nde4loop
  2841.     MOVE.W  FIB_DateStamp+ds_Days+2,30(A1)
  2842.     MOVEQ   #-1,D0
  2843.     TST.L   FIB_EntryType
  2844.     BPL ndefskp
  2845.     MOVE.L  FIB_FileSize,D0
  2846. ndefskp MOVE.L  D0,32(A1)
  2847.     MOVEQ   #29,D0             ; Copy new filename
  2848. nde4loop2
  2849.     MOVE.B  (A0)+,D1
  2850.     MOVE.B  D1,(A1)+
  2851.     TST.B   D1
  2852.     BEQ.S   nde4skip
  2853.     DBRA    D0,nde4loop2
  2854. nde4skip
  2855.     ADDQ.W  #1,16(A5)   ; Files + 1
  2856.     RTS
  2857.  
  2858. RedrawFileNames
  2859.     MOVE.W  D0,-(SP)
  2860.     BSR ShowDirPath
  2861.     MOVE.W  (SP)+,D0
  2862.     MOVE.W  D0,FileNameScrollPos
  2863.     TST.W   16(A5)
  2864.     BEQ Return1
  2865.     MOVE.L  #1881,A6
  2866.     MOVE.W  A6,TextOffset
  2867.     MOVE.L  (A5),D6
  2868.     MULU    #36,D0
  2869.     ADD.L   D0,D6
  2870.     MOVE.W  16(A5),D0
  2871.     SUB.W   FileNameScrollPos,D0
  2872.     CMP.W   #8,D0
  2873.     BHS.S   ShowFileNames
  2874.     SUBQ.W  #1,D0
  2875.     MOVE.W  D0,D7
  2876.     BRA.S   sfnloop
  2877.  
  2878. ShowFileNames
  2879.     MOVE.W  #$91,D0
  2880.     BSR WaitForVBlank
  2881.     MOVEQ   #7,D7
  2882. sfnloop MOVE.W  A6,TextOffset
  2883.     MOVE.L  D6,A0
  2884.     MOVEQ   #0,D0
  2885.     MOVE.W  30(A0),D0
  2886.     BSR CalculateDate
  2887.     MOVE.W  TheDay(PC),WordNumber  
  2888.     JSR Print2DecDigits
  2889.     MOVE.W  TheMonth(PC),WordNumber
  2890.     JSR Print2DecDigits
  2891.     MOVE.W  TheYear(PC),WordNumber 
  2892.     JSR Print2DecDigits
  2893.     ADDQ.W  #1,TextOffset
  2894.     MOVE.L  D6,ShowTextPtr
  2895.     MOVE.W  #24,TextLength
  2896.     TST.W   DirPathNum
  2897.     BNE.S   sfnskip
  2898.     TST.B   ModOnlyFlag
  2899.     BEQ.S   sfnskip
  2900.     MOVE.L  D6,A0
  2901.     CMP.L   #"mod.",(A0)
  2902.     BNE.S   sfnskip
  2903.     ADDQ.L  #4,ShowTextPtr
  2904. sfnskip JSR SpaceShowText
  2905.     LEA 32(A6),A6
  2906.     MOVE.W  A6,TextOffset
  2907.     MOVE.L  D6,A0
  2908.     MOVE.L  32(A0),D1
  2909.     BMI.S   sfndir
  2910.     TST.B   ShowDecFlag
  2911.     BNE.S   sfndec
  2912.     SWAP    D1
  2913.     AND.W   #$000F,D1
  2914.     BSR ShowOneDigit
  2915.     MOVE.L  D6,A0
  2916.     MOVE.W  34(A0),WordNumber
  2917.     JSR PrintHexWord
  2918. sfnend  ADD.L   #36,D6
  2919.     LEA 208(A6),A6
  2920.     DBRA    D7,sfnloop
  2921.     RTS
  2922.  
  2923. sfndec  MOVE.L  D1,D0
  2924.     SUBQ.W  #1,TextOffset
  2925.     JSR Print6DecDigits
  2926.     BRA.S   sfnend
  2927.  
  2928. sfndir  MOVE.L  #DirText,ShowTextPtr
  2929.     SUBQ.W  #1,TextOffset
  2930.     MOVE.W  #6,TextLength
  2931.     JSR ShowText
  2932.     BRA.S   sfnend
  2933.  
  2934. ClrFileText dc.b "    "
  2935.  
  2936. CalculateDate
  2937.     DIVU    #1461,D0
  2938.     LSL.W   #2,D0
  2939.     MOVE.W  D0,TheYear
  2940.     CLR.W   D0
  2941.     SWAP    D0
  2942.     CMP.W   #789,D0
  2943.     BEQ.S   cadleap
  2944.     BLO.S   cadskp2
  2945.     SUBQ.W  #1,D0
  2946. cadskp2 DIVU    #365,D0
  2947.     MOVE.L  D0,D1
  2948.     SWAP    D1
  2949.     CMP.W   #4,D0
  2950.     BLO.S   cadskip
  2951.     SUBQ.W  #1,D0
  2952. cadskip ADD.W   D0,TheYear
  2953.     LEA MonthTable(PC),A1
  2954.     MOVEQ   #24,D0
  2955. cadloop SUBQ.W  #2,D0
  2956.     MOVE.W  (A1,D0.W),D2
  2957.     CMP.W   D2,D1
  2958.     BHS.S   cadskp3
  2959.     TST.W   D0
  2960.     BNE.S   cadloop
  2961. cadskp3 LSR.W   #1,D0
  2962.     ADDQ.W  #1,D0
  2963.     MOVE.W  D0,TheMonth
  2964.     SUB.W   D2,D1
  2965.     ADDQ.W  #1,D1
  2966.     MOVE.W  D1,TheDay
  2967. cadend  MOVEQ   #0,D0
  2968.     MOVE.W  TheYear(PC),D0
  2969.     ADD.W   #78,D0
  2970.     DIVU    #100,D0
  2971.     SWAP    D0
  2972.     MOVE.W  D0,TheYear
  2973.     RTS
  2974. cadleap ADD.W   #2,TheYear
  2975.     MOVE.W  #2,TheMonth
  2976.     MOVE.W  #29,TheDay
  2977.     BRA cadend
  2978.  
  2979. TheYear     dc.w 0
  2980. TheMonth    dc.w 0
  2981. TheDay      dc.w 0
  2982. MonthTable  dc.w 0,31,59,90,120,151,181,212,243,273,304,334
  2983. DirText     dc.b " (DIR)"
  2984.  
  2985. ;---- Play Song ----
  2986.  
  2987. PlaySong
  2988.     MOVEQ   #0,D0
  2989. SongFrom
  2990.     BSR StopIt
  2991.     BTST    #2,$DFF016
  2992.     BNE.S   sofr1
  2993.     MOVE.W  PlayFromPos,D0
  2994. sofr1   MOVE.W  D0,ScrPattPos
  2995.     LSL.W   #4,D0
  2996.     AND.L   #$FFFF,D0
  2997.     MOVE.L  D0,PatternPosition
  2998. wfbu1   BTST    #6,$BFE001
  2999.     BEQ.S   wfbu1
  3000.     CLR.B   RawKeyCode
  3001.     CLR.B   SaveKey
  3002.     BSR SetPlayPtrCol
  3003.     CLR.W   PatternTicks
  3004.     CLR.L   TimerTicks
  3005.     MOVE.L  #'patp',RunMode
  3006.     CLR.W   DidQuantize
  3007.     MOVE.L  #-1,LongFFFF
  3008.     BSR SetScrPatternPos
  3009. SetPlayPosition
  3010.     MOVE.L  CurrPos,D0
  3011.     MOVE.L  SongDataPtr,A0
  3012.     CMP.B   sd_numofpatt(A0),D0
  3013.     BHS.S   SongPosToZero
  3014.     MOVE.L  CurrPos,SongPosition
  3015.     RTS
  3016.  
  3017. SongPosToZero
  3018.     CLR.L   SongPosition
  3019.     CLR.L   CurrPos
  3020.     RTS
  3021.  
  3022. ;---- Play Pattern ----
  3023.  
  3024. PlayPattern
  3025.     MOVEQ   #0,D0
  3026. PattFrom
  3027.     BSR StopIt
  3028.     BTST    #2,$DFF016
  3029.     BNE.S   pafr1
  3030.     MOVE.W  PlayFromPos,D0
  3031. pafr1   MOVE.W  D0,ScrPattPos
  3032.     LSL.W   #4,D0
  3033.     AND.L   #$FFF,D0
  3034.     MOVE.L  D0,PatternPosition
  3035. wfbu2   BTST    #6,$BFE001
  3036.     BEQ.S   wfbu2
  3037.     CLR.B   RawKeyCode
  3038.     CLR.B   SaveKey
  3039.     MOVE.L  #'patt',RunMode
  3040.     BSR SetPlayPtrCol
  3041. ResetPosition
  3042.     MOVE.L  PatternNumber,SongPosition
  3043.     RTS
  3044.  
  3045. ;---- Record Pattern/Song ----
  3046.  
  3047. RecordPattern
  3048.     MOVEQ   #0,D0
  3049. RecordFrom
  3050.     TST.W   SamScrEnable
  3051.     BNE Return1
  3052.     BSR StopIt
  3053.     BTST    #2,$DFF016
  3054.     BNE.S   refr1
  3055.     MOVE.W  PlayFromPos,D0
  3056. refr1   MOVE.W  D0,ScrPattPos
  3057.     LSL.W   #4,D0
  3058.     AND.L   #$FFF,D0
  3059.     MOVE.L  D0,PatternPosition
  3060. wfbu3   BTST    #6,$BFE001
  3061.     BEQ.S   wfbu3
  3062.     BSR SetEditPtrCol
  3063.     CLR.B   RawKeyCode
  3064.     CLR.B   SaveKey
  3065.     BSR SaveUndo
  3066.     MOVE.L  #'edit',EditMode
  3067.     MOVE.L  #'patt',RunMode
  3068.     TST.B   RecordMode
  3069.     BEQ.S   ResetPosition
  3070.     MOVE.L  #'patp',RunMode
  3071.     BRA SetPlayPosition
  3072.  
  3073. ;---- Show Main Screen ----
  3074.  
  3075. DisplayMainScreen
  3076.     CLR.W   BlockMarkFlag
  3077.     MOVE.W  #1,CurrScreen
  3078.     SF  NoSampleInfo
  3079.     TST.W   LoadInProgress
  3080.     BNE.S   dmsskp3
  3081.     BSR SetNormalPtrCol
  3082.     TST.W   RunMode
  3083.     BEQ.S   dmsskip
  3084.     BSR SetPlayPtrCol
  3085. dmsskip TST.L   EditMode
  3086.     BEQ.S   dmsskp2
  3087.     BSR SetEditPtrCol
  3088. dmsskp2 BSR StorePtrCol
  3089. dmsskp3 ST  DisableAnalyzer
  3090.     BSR ClearAnaHeights
  3091.     BSR ClearRightArea
  3092.     LEA TopMenusPos,A0
  3093.     LEA TopMenusBuffer,A1
  3094.     MOVEQ   #43,D0
  3095. cgloop4 MOVEQ   #24,D1
  3096. cgloop5 MOVE.B  (A1)+,(A0)+
  3097.     MOVE.B  1099(A1),10239(A0)
  3098.     DBRA    D1,cgloop5
  3099.     LEA 15(A0),A0
  3100.     DBRA    D0,cgloop4
  3101.     BSR RedrawToggles
  3102.     TST.B   EdEnable
  3103.     BNE EditOp
  3104.     MOVEQ   #0,D4
  3105. RedrawAnaScope
  3106.     MOVE.W  #145,D0
  3107.     BSR WaitForVBlank
  3108.     SF  ScopeEnable
  3109.     ST  DisableAnalyzer
  3110.     BSR ClearRightArea
  3111.     LEA SpectrumAnaData,A0
  3112.     MOVE.L  #SpectrumAnaSize,D0
  3113.     TST.B   AnaScopFlag
  3114.     BEQ.S   cgjojo
  3115.     LEA ScopeData,A0
  3116.     MOVE.L  #ScopeSize,D0
  3117.  
  3118. cgjojo  BSR Decompact
  3119.     BEQ cgjaja
  3120.     LEA SpectrumAnaPos,A0
  3121.     MOVEQ   #1,D7
  3122. cgloop1 MOVEQ   #54,D6  ; 55 lines in picture.
  3123. cgloop2 MOVEQ   #24,D5  ; 25 bytes(x8)
  3124. cgloop3 MOVE.B  (A1)+,(A0)+
  3125.     DBRA    D5,cgloop3
  3126.     ADDQ.L  #1,A1
  3127.     LEA 15(A0),A0
  3128.     DBRA    D6,cgloop2
  3129.     LEA $1F68(A0),A0
  3130.     DBRA    D7,cgloop1
  3131.     BSR FreeDecompMem
  3132. cgjaja  TST.L   D4
  3133.     BNE Return1
  3134.     TST.B   AnaScopFlag
  3135.     BNE cgscope
  3136.     BSR ClearAnaHeights
  3137.     BSR ClearRightArea
  3138.     SF  DisableAnalyzer
  3139.     BRA SetAnalyzerColors
  3140. cgscope ST  ScopeEnable
  3141.     BRA ClearAnalyzerColors
  3142.    
  3143. ;---- Clear Areas ----
  3144.  
  3145. ClearFileNames  MOVE.W  #145,D0
  3146.     BSR WaitForVBlank
  3147.     MOVE.L  TextBplPtr,A1
  3148.     LEA 1800(A1),A1
  3149.     MOVE.W  #549,D0
  3150.     MOVEQ   #0,D1
  3151. cfnloop MOVE.L  D1,(A1)+
  3152.     DBRA    D0,cfnloop
  3153.     RTS
  3154.  
  3155. ClearRightArea
  3156.     MOVE.L  TextBplPtr,A0
  3157.     LEA 55(A0),A0
  3158.     MOVEQ   #0,D2
  3159.     MOVEQ   #98,D0
  3160. cnblloop1
  3161.     MOVEQ   #24,D1
  3162. cnblloop2
  3163.     MOVE.B  D2,(A0)+
  3164.     DBRA    D1,cnblloop2
  3165.     LEA 15(A0),A0
  3166.     DBRA    D0,cnblloop1
  3167.     RTS
  3168.  
  3169. Clear100Lines
  3170.     MOVE.L  TextBplPtr,A0
  3171.     MOVE.W  #999,D0
  3172.     MOVEQ   #0,D1
  3173. chlloop MOVE.L  D1,(A0)+
  3174.     DBRA    D0,chlloop
  3175.     RTS
  3176.  
  3177. ;---- Are You Sure Requester ----
  3178.  
  3179. AreYouSure
  3180.     MOVE.B  DisableAnalyzer,SaveDA
  3181.     MOVE.B  ScopeEnable,SaveScope
  3182.     SF  ScopeEnable
  3183.     JSR ShowStatusText
  3184.     BSR StorePtrCol
  3185.     BSR SetWaitPtrCol
  3186.     BSR Wait_4000
  3187.     CMP #1,CurrScreen
  3188.     BNE.S   aysskip
  3189.     TST.B   DisableAnalyzer
  3190.     BNE.S   aysskip
  3191.     ST  DisableAnalyzer
  3192.     BSR ClearAnaHeights
  3193.     BSR ClearRightArea
  3194. aysskip LEA SureBoxData,A1
  3195.     BSR SwapBoxMem
  3196.     BSR WaitForButtonUp
  3197.     BSR Wait_4000
  3198.     CLR.B   RawKeyCode
  3199. surebuttoncheck
  3200.     BTST    #2,$DFF016
  3201.     BEQ.S   SureAnswerNo
  3202.     BSR DoKeyBuffer
  3203.     MOVE.B  RawKeyCode,D0
  3204.     CMP.B   #21,D0 ; Pressed Y
  3205.     BEQ SureAnswerYes
  3206.     CMP.B   #68,D0 ; Pressed Return
  3207.     BEQ.S   SureAnswerYes
  3208.     CMP.B   #54,D0 ; Pressed N
  3209.     BEQ.S   SureAnswerNo
  3210.     CMP.B   #69,D0 ; Pressed Esc
  3211.     BEQ.S   SureAnswerNo
  3212.     BTST    #6,$BFE001  ; Left Mousebutton
  3213.     BNE.S   surebuttoncheck
  3214.     MOVEM.W MouseX,D0/D1
  3215.     CMP.W   #$AB,D0
  3216.     BLO.S   surebuttoncheck
  3217.     CMP.W   #$FC,D0
  3218.     BHI.S   surebuttoncheck
  3219.     CMP.W   #$48,D1
  3220.     BLO.S   surebuttoncheck
  3221.     CMP.W   #$52,D1
  3222.     BHI.S   surebuttoncheck
  3223.     CMP.W   #$C5,D0
  3224.     BLO.S   SureAnswerYes
  3225.     CMP.W   #$EA,D0
  3226.     BLO.S   surebuttoncheck
  3227. SureAnswerNo
  3228.     LEA SureBoxData,A1
  3229.     BSR.S   SwapBoxMem
  3230.     JSR ShowAllRight
  3231.     BSR ClearAnaHeights
  3232.     MOVE.B  SaveDA,DisableAnalyzer
  3233.     MOVE.B  SaveScope,ScopeEnable
  3234.     BSR ErrorRestoreCol
  3235.     BSR WaitForButtonUp
  3236.     BSR Wait_4000
  3237.     CLR.B   RawKeyCode
  3238.     MOVEQ   #-1,D0
  3239.     RTS
  3240.  
  3241. SureAnswerYes
  3242.     LEA SureBoxData,A1
  3243.     BSR.S   SwapBoxMem
  3244.     JSR ShowAllRight
  3245.     BSR ClearAnaHeights
  3246.     MOVE.B  SaveDA,DisableAnalyzer
  3247.     MOVE.B  SaveScope,ScopeEnable
  3248.     BSR RestorePtrCol
  3249.     BSR WaitForButtonUp
  3250.     BSR Wait_4000
  3251.     CLR.B   RawKeyCode
  3252.     MOVEQ   #0,D0
  3253.     RTS
  3254.  
  3255. SwapBoxMem
  3256.     LEA SureBoxPos,A0
  3257.     MOVEQ   #38,D0
  3258. ssbmloop1
  3259.     MOVEQ   #12,D1
  3260. ssbmloop2
  3261.     MOVE.B  10240(A0),D2
  3262.     MOVE.B  546(A1),10240(A0)
  3263.     MOVE.B  D2,546(A1)
  3264.     MOVE.B  (A0),D2
  3265.     MOVE.B  (A1),(A0)+
  3266.     MOVE.B  D2,(A1)+
  3267.     DBRA    D1,ssbmloop2
  3268.     LEA $001B(A0),A0
  3269.     ADDQ.L  #1,A1
  3270.     DBRA    D0,ssbmloop1
  3271.     MOVE.L  TextBplPtr,A0   ; Swap text...
  3272.     LEA 2100(A0),A0
  3273.     LEA TextDataBuffer,A1
  3274.     MOVEQ   #38,D0
  3275. ssbmloop3
  3276.     MOVEQ   #12,D1
  3277. ssbmloop4
  3278.     MOVE.B  (A0),D2
  3279.     MOVE.B  (A1),(A0)+
  3280.     MOVE.B  D2,(A1)+
  3281.     DBRA    D1,ssbmloop4
  3282.     LEA $001B(A0),A0
  3283.     ADDQ.L  #1,A1
  3284.     DBRA    D0,ssbmloop3
  3285.     RTS
  3286.  
  3287. WaitForButtonUp
  3288.     BTST    #6,$BFE001  ; Check Left Mousebutton
  3289.     BEQ.S   WaitForButtonUp
  3290.     BTST    #2,$DFF016  ; Check Right Mousebutton
  3291.     BEQ.S   WaitForButtonUp
  3292.     MOVE.W  #$91,D0
  3293. WaitForVBlank
  3294.     MOVE.L  $DFF004,D1
  3295.     LSR.L   #8,D1
  3296.     AND.W   #$1FF,D1
  3297.     CMP.W   D1,D0
  3298.     BNE.S   WaitForVBlank
  3299.     RTS
  3300.  
  3301. ;---- Set Pointercolors ----
  3302.  
  3303. SetDeletePtrCol
  3304.     MOVE.L  A6,-(SP)
  3305.     MOVE.L  CopListColorPtr,A6
  3306.     MOVE.W  #$0AA,2(A6)
  3307.     MOVE.W  #$077,6(A6)
  3308.     MOVE.W  #$044,10(A6)
  3309.     MOVE.L  (SP)+,A6
  3310.     RTS
  3311.  
  3312. SetNormalPtrCol
  3313.     MOVE.L  A6,-(SP)
  3314.     MOVE.L  CopListColorPtr,A6
  3315.     MOVE.W  #$AAA,2(A6)
  3316.     MOVE.W  #$777,6(A6)
  3317.     MOVE.W  #$444,10(A6)
  3318.     MOVE.L  (SP)+,A6
  3319.     RTS
  3320.  
  3321. SetDiskPtrCol
  3322.     MOVE.L  A6,-(SP)
  3323.     MOVE.L  CopListColorPtr,A6
  3324.     MOVE.W  #$0A0,2(A6)
  3325.     MOVE.W  #$070,6(A6)
  3326.     MOVE.W  #$040,10(A6)
  3327.     MOVE.L  (SP)+,A6
  3328.     RTS
  3329.  
  3330. SetPlayPtrCol
  3331.     MOVE.L  A6,-(SP)
  3332.     MOVE.L  CopListColorPtr,A6
  3333.     MOVE.W  #$AA0,2(A6)
  3334.     MOVE.W  #$770,6(A6)
  3335.     MOVE.W  #$440,10(A6)
  3336.     MOVE.L  (SP)+,A6
  3337.     RTS
  3338.  
  3339. SetEditPtrCol
  3340.     MOVE.L  A6,-(SP)
  3341.     MOVE.L  CopListColorPtr,A6
  3342.     MOVE.W  #$05B,2(A6)
  3343.     MOVE.W  #$049,6(A6)
  3344.     MOVE.W  #$006,10(A6)
  3345.     MOVE.L  (SP)+,A6
  3346.     RTS
  3347.  
  3348. SetWaitPtrCol
  3349.     MOVE.L  A6,-(SP)
  3350.     MOVE.L  CopListColorPtr,A6
  3351.     MOVE.W  #$A5A,2(A6)
  3352.     MOVE.W  #$727,6(A6)
  3353.     MOVE.W  #$404,10(A6)
  3354.     MOVE.L  (SP)+,A6
  3355.     RTS
  3356.  
  3357. SetErrorPtrCol
  3358.     MOVE.L  A6,-(SP)
  3359.     MOVE.L  CopListColorPtr,A6
  3360.     MOVE.W  #$C00,2(A6)
  3361.     MOVE.W  #$900,6(A6)
  3362.     MOVE.W  #$700,10(A6)
  3363.     MOVE.L  (SP)+,A6
  3364.     MOVE.W  #1,UpdateFreeMem
  3365.     BSR WaitALittle
  3366.     JSR ShowAllRight
  3367.     BSR SetNormalPtrCol
  3368.     MOVEQ   #0,D0
  3369.     RTS
  3370.  
  3371. WaitALittle
  3372.     MOVE.W  WaitTime(PC),D1
  3373. errorwaitloop
  3374.     BSR Wait_4000
  3375.     DBRA    D1,errorwaitloop
  3376.     MOVE.W  #23,WaitTime
  3377.     RTS
  3378.  
  3379. WaitTime dc.w 23
  3380.  
  3381. StorePtrCol
  3382.     MOVE.L  A6,-(SP)
  3383.     MOVE.L  CopListColorPtr,A6
  3384.     MOVE.W  2(A6),PointerCol1Save
  3385.     MOVE.W  6(A6),PointerCol2Save
  3386.     MOVE.W  10(A6),PointerCol3Save
  3387.     MOVE.L  (SP)+,A6
  3388.     RTS
  3389.  
  3390. ErrorRestoreCol
  3391.     BSR SetErrorPtrCol
  3392. RestorePtrCol
  3393.     MOVE.L  A6,-(SP)
  3394.     MOVE.W  #1,UpdateFreeMem
  3395.     MOVE.L  CopListColorPtr,A6
  3396.     MOVE.W  PointerCol1Save,2(A6)
  3397.     MOVE.W  PointerCol2Save,6(A6)
  3398.     MOVE.W  PointerCol3Save,10(A6)
  3399.     MOVE.L  (SP)+,A6
  3400.     RTS
  3401.  
  3402.  
  3403. ;---- Check special keys ----
  3404.  
  3405. CheckPlayKeys
  3406.     MOVE.B  RawKeyCode,D0
  3407.     CMP.B   #101,D0
  3408.     BEQ PlaySong
  3409.     CMP.B   #103,D0
  3410.     BEQ PlayPattern
  3411.     CMP.B   #64,D0
  3412.     BNE.S   cpkskip
  3413.     TST.L   RunMode
  3414.     BNE StopIt
  3415.     TST.L   EditMode
  3416.     BNE StopIt 
  3417.     BRA Edit
  3418. cpkskip CMP.B   #97,D0
  3419.     BEQ RecordPattern
  3420.     CMP.B   #69,D0
  3421.     BEQ EscPressed
  3422.     CMP.B   #66,D0
  3423.     BEQ TabulateCursor
  3424.     CMP.B   #127,D0
  3425.     BEQ GotoCLI
  3426.     CMP.B   #48,D0
  3427.     BEQ TurnOffVoices
  3428.     CMP.B   #60,D0
  3429.     BEQ KillSample
  3430.     CMP.B   #13,D0
  3431.     BEQ togglepnote
  3432.  
  3433.     CMP.B   #67,D0
  3434.     BEQ.S   HigherInstr
  3435.     CMP.B   #67+128,D0
  3436.     BEQ.S   LowerInstr
  3437.     MOVE.W  HiLowInstr,D1
  3438.     LEA kpinstable(PC),A0
  3439.     MOVEQ   #0,D2
  3440. kpinsloop
  3441.     CMP.B   (A0,D2.W),D0
  3442.     BEQ.S   kpinsfound
  3443.     ADDQ.W  #1,D2
  3444.     CMP.W   #16,D2
  3445.     BLO.S   kpinsloop
  3446.     RTS
  3447.  
  3448. kpinsfound
  3449.     ADD.W   D2,D1
  3450.     BEQ.S   insnull
  3451.     BRA.S   redrsa2
  3452.  
  3453. LowerInstr
  3454.     CLR.W   HiLowInstr
  3455.     RTS
  3456. HigherInstr
  3457.     MOVE.W  #16,HiLowInstr
  3458.     MOVE.W  #16,D1
  3459.     BRA.S   redrsa2
  3460.  
  3461. redrsa3 MOVE.W  D1,InsNum
  3462. redrsam CLR.B   RawKeyCode
  3463.     CLR.L   SavSamInf
  3464.     JSR ShowSampleInfo
  3465.     JMP RedrawSample
  3466.  
  3467. insnull TST.W   InsNum
  3468.     BEQ.S   insnul2
  3469.     MOVE.W  InsNum,LastInsNum
  3470.     CLR.W   InsNum
  3471.     MOVEQ   #0,D1
  3472.     BRA.S   redrsa2
  3473.  
  3474. insnul2 JMP ShowSampleInfo
  3475.  
  3476. kpinstable
  3477.     dc.b 15,90,91,92
  3478.     dc.b 93,61,62,63,74
  3479.     dc.b 45,46,47,94,29,30
  3480.     dc.b 31
  3481.  
  3482. redrsa2 TST.B   pnoteflag
  3483.     BEQ.S   redrsa3
  3484.     CLR.B   RawKeyCode
  3485.     TST.W   AltKeyStatus
  3486.     BNE.S   setpnote
  3487.     MOVE.W  D1,InsNum
  3488.     JSR ShowSampleInfo
  3489.     MOVE.W  InsNum,D0
  3490.     ADD.W   D0,D0
  3491.     MOVE.W  pnotetable(PC,D0.W),D0
  3492.     MOVEQ   #-1,D2
  3493.     BSR playtheinstr
  3494.     JMP RedrawSample
  3495.  
  3496. pnotetable
  3497.     dc.w 24,24,24,24,24,24,24,24,24,24
  3498.     dc.w 24,24,24,24,24,24,24,24,24,24
  3499.     dc.w 24,24,24,24,24,24,24,24,24,24
  3500.     dc.w 24,24
  3501.  
  3502. setpnote
  3503.     ADD.W   D1,D1
  3504.     LEA pnotetable(PC,D1.W),A0
  3505.     MOVE.L  A0,SplitAddress
  3506.     MOVE.W  #4,SamNoteType
  3507.     LEA selnotetext(PC),A0
  3508.     JMP ShowStatusText
  3509.  
  3510. selnotetext dc.b "select note",0
  3511.  
  3512. togglepnote
  3513.     CLR.B   RawKeyCode
  3514.     MOVEQ   #0,D0
  3515.     MOVE.B  pnoteflag,D0
  3516.     ADDQ.B  #1,D0
  3517.     CMP.B   #3,D0
  3518.     BLO.S   tpnskp
  3519.     MOVEQ   #0,D0
  3520. tpnskp  MOVE.B  D0,pnoteflag
  3521.     LEA pnotechar(PC,D0.W),A0
  3522.     MOVEQ   #1,D0
  3523.     MOVE.W  #5159,D1
  3524.     JMP ShowText3
  3525.  
  3526. pnotechar   dc.b 32,128,129
  3527. pnoteflag   dc.b 0
  3528.  
  3529. ;---- Check transpose keys ----
  3530.  
  3531. CheckTransKeys
  3532.     TST.W   LeftAmigaStatus
  3533.     BEQ Return1
  3534.     MOVE.W  PattCurPos,D0
  3535.     BSR GetPositionPtr
  3536.     MOVE.B  RawKeyCode,D1
  3537.     CLR.B   RawKeyCode
  3538.     MOVE.B  SampleAllFlag,-(SP)
  3539.     BSR.S   ctksub
  3540.     MOVE.B  (SP)+,SampleAllFlag
  3541.     RTS
  3542.  
  3543. ctksub  MOVEQ   #0,D0
  3544.     CLR.B   SampleAllFlag
  3545.     CMP.B   #1,D1
  3546.     BEQ NoteUp
  3547.     CMP.B   #16,D1
  3548.     BEQ NoteDown
  3549.     CMP.B   #32,D1
  3550.     BEQ OctaveUp
  3551.     CMP.B   #49,D1
  3552.     BEQ OctaveDown
  3553.  
  3554.     MOVE.W  #300,D0
  3555.     CMP.B   #2,D1
  3556.     BEQ NoteUp
  3557.     CMP.B   #17,D1
  3558.     BEQ NoteDown
  3559.     CMP.B   #33,D1
  3560.     BEQ OctaveUp
  3561.     CMP.B   #50,D1
  3562.     BEQ OctaveDown
  3563.  
  3564.     MOVEQ   #0,D0
  3565.     MOVE.B  #1,SampleAllFlag
  3566.     CMP.B   #3,D1
  3567.     BEQ NoteUp
  3568.     CMP.B   #18,D1
  3569.     BEQ NoteDown
  3570.     CMP.B   #34,D1
  3571.     BEQ OctaveUp
  3572.     CMP.B   #51,D1
  3573.     BEQ OctaveDown
  3574.    
  3575.     MOVE.W  #300,D0
  3576.     CMP.B   #4,D1
  3577.     BEQ NoteUp
  3578.     CMP.B   #19,D1
  3579.     BEQ NoteDown
  3580.     CMP.B   #35,D1
  3581.     BEQ OctaveUp
  3582.     CMP.B   #52,D1
  3583.     BEQ OctaveDown
  3584.     RTS
  3585.  
  3586. ;---- Check control keys ----
  3587.  
  3588. CheckCtrlKeys
  3589.     TST.W   CtrlKeyStatus
  3590.     BEQ Return1
  3591.     MOVEQ   #0,D0
  3592.     MOVE.B  RawKeyCode,D0
  3593.     CMP.B   #35,D0 ; F
  3594.     BEQ ToggleFilter
  3595.     CMP.B   #33,D0 ; S
  3596.     BEQ ToggleSplit
  3597.     CMP.B   #55,D0 ; M
  3598.     BEQ ToggleMultiMode
  3599.     CMP.B   #16,D0 ; Q
  3600.     BEQ UnmuteAll
  3601.     CMP.B   #32,D0 ; A
  3602.     BEQ ToggleMute
  3603.     CMP.B   #49,D0 ; Z
  3604.     BEQ RestoreEffects
  3605.     CMP.B   #19,D0 ; R
  3606.     BEQ RestoreFKeyPos
  3607.     CMP.B   #20,D0 ; T
  3608.     BEQ SwapTrack
  3609.  
  3610.     CMP.B   #53,D0 ; B
  3611.     BEQ BeginBlock
  3612.     CMP.B   #51,D0 ; C
  3613.     BEQ CopyBlock
  3614.     CMP.B   #50,D0 ; X
  3615.     BEQ CutBlock
  3616.     CMP.B   #34,D0 ; D
  3617.     BEQ DeleteBlock
  3618.     CMP.B   #25,D0 ; P
  3619.     BEQ PasteBlock
  3620.     CMP.B   #23,D0 ; I
  3621.     BEQ InsertBlock
  3622.     CMP.B   #38,D0 ; J
  3623.     BEQ JoinPasteBlock
  3624.     CMP.B   #54,D0 ; N
  3625.     BEQ Re_MarkBlock
  3626.     CMP.B   #21,D0 ; Y
  3627.     BEQ BackwardsBlock
  3628.     CMP.B   #17,D0 ; W
  3629.     BEQ PolyphonizeBlock
  3630.  
  3631.     CMP.B   #18,D0 ; E
  3632.     BEQ ExpandTrack
  3633.     CMP.B   #24,D0 ; O
  3634.     BEQ ContractTrack
  3635.     CMP.B   #37,D0 ; H
  3636.     BEQ TransBlockUp
  3637.     CMP.B   #40,D0 ; L
  3638.     BEQ TransBlockDown
  3639.     CMP.B   #39,D0 ; K
  3640.     BEQ KillToEndOfTrack
  3641.     CMP.B   #22,D0 ; U
  3642.     BEQ UndoLastChange
  3643.  
  3644.     CMP.B   #68,D0 ; CR
  3645.     BEQ InsCmdTrack
  3646.     CMP.B   #65,D0 ; Del
  3647.     BEQ DelCmdTrack
  3648.     CMP.B   #36,D0 ; G
  3649.     BEQ BoostAll
  3650.     CMP.B   #52,D0 ; V
  3651.     BEQ FilterAll
  3652.  
  3653.     CMP.B   #1,D0
  3654.     BLO Return1
  3655.     CMP.B   #10,D0
  3656.     BHI Return1
  3657.     BNE.S   cckskip
  3658.     MOVEQ   #0,D0
  3659. cckskip MOVE.W  D0,EditMoveAdd
  3660.     CLR.B   RawKeyCode
  3661.     ADD.B   #'0',D0
  3662.     LEA ematext(PC),A0
  3663.     MOVE.B  D0,11(A0)
  3664.     BSR ShowStatusText
  3665.     MOVE.W  #10,WaitTime
  3666.     BSR WaitALittle
  3667.     BRA ShowAllRight
  3668.  
  3669. ematext dc.b "editskip = 0",0,0
  3670.  
  3671. ;---- Check alt keys ----
  3672.  
  3673. CheckAltKeys
  3674.     TST.W   AltKeyStatus
  3675.     BEQ Return1
  3676.     MOVEQ   #0,D0
  3677.     MOVE.B  RawKeyCode,D0
  3678.     CMP.B   #49,D0 ; Z
  3679.     BEQ ToggleCh1
  3680.     CMP.B   #50,D0 ; X
  3681.     BEQ ToggleCh2
  3682.     CMP.B   #51,D0 ; C
  3683.     BEQ ToggleCh3
  3684.     CMP.B   #52,D0 ; V
  3685.     BEQ ToggleCh4
  3686.     CMP.B   #53,D0 ; B
  3687.     BEQ Boost
  3688.     CMP.B   #35,D0 ; F
  3689.     BEQ Filter
  3690.     CMP.B   #20,D0 ; T
  3691.     BEQ.S   xTuningTone
  3692.     CMP.B   #33,D0 ; S
  3693.     BEQ.S   xSamplerScreen
  3694.     CMP.B   #19,D0 ; R
  3695.     BEQ.S   xResample
  3696.     CMP.B   #18,D0 ; E
  3697.     BEQ DoEditOp
  3698.     CMP.B   #23,D0 ; I
  3699.     BEQ.S   AutoInsert
  3700.     CMP.B   #34,D0 ; D
  3701.     BEQ DiskOp
  3702.     CMP.B   #39,D0 ; K
  3703.     BEQ KillInstrTrack
  3704. ;   CMP.B   #17,D0 ; W
  3705. ;   BEQ.S   WaitForNote
  3706.     CMP.B   #32,D0 ; A
  3707.     BEQ.S   xSampler
  3708.     CMP.B   #16,D0 ; Q
  3709.     BEQ ChkQuit
  3710.  
  3711. ;   CMP.B   #55,D0 ; M
  3712. ;   CMP.B   #25,D0 ; P
  3713. ;   CMP.B   #38,D0 ; J
  3714. ;   CMP.B   #54,D0 ; N
  3715. ;   CMP.B   #21,D0 ; Y
  3716. ;   CMP.B   #24,D0 ; O
  3717. ;   CMP.B   #37,D0 ; H
  3718. ;   CMP.B   #40,D0 ; L
  3719. ;   CMP.B   #22,D0 ; U
  3720. ;   CMP.B   #36,D0 ; G
  3721.     RTS
  3722.  
  3723. xTuningTone JMP TuningTone
  3724. xSamplerScreen  JMP SamplerScreen
  3725. xResample   JMP Resample
  3726. xSampler    JMP Sampler
  3727.  
  3728. AutoInsert
  3729.     CLR.B   RawKeyCode
  3730.     EOR.B   #1,AutoInsFlag
  3731. ShowAutoInsert
  3732.     CMP.W   #4,CurrScreen
  3733.     BEQ Return1
  3734.     MOVE.B  #' ',D0
  3735.     TST.B   AutoInsFlag
  3736.     BEQ.S   auins2
  3737.     MOVE.B  #'I',D0
  3738. auins2  MOVE.B  D0,AutoInsText
  3739.     MOVE.W  #4561,D1
  3740.     MOVEQ   #1,D0
  3741.     LEA AutoInsText(PC),A0
  3742.     JMP ShowText3
  3743.  
  3744. AutoInsText dc.b 0
  3745. AutoInsFlag dc.b 0
  3746.  
  3747. ;---- Jump between channels ----
  3748.  
  3749. TabulateCursor
  3750.     CLR.B   RawKeyCode
  3751.     TST.W   ShiftKeyStatus
  3752.     BNE.S   TabCurRight
  3753.     MOVE.W  PattCurPos,D0
  3754.     DIVU    #6,D0
  3755.     ADDQ.W  #1,D0
  3756.     CMP.W   #4,D0
  3757.     BNE.S   tacskip
  3758.     MOVEQ   #0,D0
  3759. tacskip MULU    #6,D0
  3760.     MOVE.W  D0,PattCurPos
  3761.     BRA UpdateCursorPos
  3762.  
  3763. TabCurRight
  3764.     MOVE.W  PattCurPos,D0
  3765.     ADDQ.W  #5,D0
  3766.     DIVU    #6,D0
  3767.     SUBQ.W  #1,D0
  3768.     BPL.S   tacskip
  3769.     MOVEQ   #3,D0
  3770.     BRA.S   tacskip
  3771.  
  3772. ;---- Escape was pressed ----
  3773.  
  3774. EscPressed
  3775.     CLR.B   RawKeyCode
  3776.     CLR.B   SaveKey
  3777.     MOVE.W  CurrScreen,D0
  3778.     CMP.W   #2,D0
  3779.     BLO.S   BotExit
  3780. TopExit MOVE.W  CurrScreen,D0
  3781.     CMP.W   #2,D0
  3782.     BEQ ExitHelpScreen
  3783.     CMP.W   #3,D0
  3784.     BEQ ExitFromDir
  3785.     CMP.W   #4,D0
  3786.     BEQ.S   pedexit
  3787.     CMP.W   #5,D0
  3788.     BEQ ExitSetup
  3789.     CMP.W   #6,D0
  3790.     BEQ.S   plstexit
  3791.     CMP.W   #7,D0
  3792.     BEQ ExitSetup
  3793.     RTS
  3794.  
  3795. BotExit TST.W   SamScrEnable
  3796.     BNE.S   samplerexit
  3797.     TST.W   BlockMarkFlag
  3798.     BNE blkunma
  3799.     CMP.W   #1,CurrScreen
  3800.     BNE Return1
  3801.     TST.B   EdEnable
  3802.     BNE ExitEditOp
  3803.     RTS
  3804.  
  3805. samplerexit
  3806.      JMP    ExitFromSam
  3807. pedexit  JMP    PED_Exit
  3808. plstexit JMP    ExitPLST
  3809.  
  3810. GotoCLI CLR.B   RawKeyCode
  3811.     CLR.B   SaveKey
  3812.     TST.L   RunMode
  3813.     BNE.S   cliskp1
  3814.     BSR StopIt
  3815.     BSR ResetMusicInt
  3816. cliskp1 BSR ResetVBInt
  3817.     BSR ResetInputHandler
  3818.     BSR ResetAutoReq
  3819.     BSR ResetCopList
  3820.     MOVE.L  ExtCmdAddress,D1
  3821.     BEQ.S   gcliskp
  3822.     CLR.L   ExtCmdAddress
  3823.     MOVE.L  ExtCmdWindow,D2
  3824.     MOVEQ   #0,D3
  3825.     MOVE.L  DOSBase,A6
  3826.     JSR LVOExecute(A6)
  3827. gcliskp SUB.L   A0,A0
  3828.     LEA BackToProText(PC),A1
  3829.     LEA OKGadgetText(PC),A2
  3830.     MOVE.L  A2,A3
  3831.     MOVEQ   #0,D0
  3832.     MOVEQ   #0,D1
  3833.     MOVE.W  #196,D2
  3834.     MOVEQ   #50,D3
  3835.     MOVE.L  IntuitionBase,A6
  3836.     JSR LVOAutoRequest(A6)
  3837.     ADDQ.B  #1,LastRawkey
  3838.     TST.L   RunMode
  3839.     BNE.S   cliskp2
  3840.     BSR SetMusicInt
  3841. cliskp2 BSR SetVBInt
  3842.     BSR SetInputHandler
  3843.     BSR SetAutoReq
  3844.     BRA SetCopList
  3845.  
  3846. BackToProText
  3847.     dc.b 0,1,1,0
  3848.     dc.w 14,6
  3849.     dc.l 0,btptext,0
  3850. btptext dc.b 'Back to Protracker',0,0
  3851.  
  3852. OKGadgetText
  3853.     dc.b 0,1,1,0
  3854.     dc.w 6,3
  3855.     dc.l 0,okgtext,0
  3856. okgtext dc.b 'OK',0,0
  3857.  
  3858. ;---- Check Help Key ----
  3859.  
  3860. HelpSelectText  dc.b    '* help selected *',0
  3861. PLSTSelectText  dc.b    '* plst selected *',0
  3862. PLSTHelpFlag    dc.b    0,0 ; free 0
  3863.  
  3864. CheckHelpKey
  3865.     CMP.B   #95,RawKeyCode  ; Help Key pressed ?
  3866.     BNE Return1
  3867.     CLR.B   RawKeyCode
  3868.     TST.W   ShiftKeyStatus
  3869.     BEQ.S   realhlp
  3870.     LEA HelpSelectText,A0
  3871.     EOR.B   #1,PLSTHelpFlag
  3872.     BEQ.S   chksel
  3873.     LEA PLSTSelectText,A0
  3874. chksel  BSR ShowStatusText
  3875.     BSR WaitALittle
  3876.     BRA ShowAllRight
  3877.  
  3878. gtoPLST JMP PLST
  3879.  
  3880. realhlp TST.B   PLSTHelpFlag
  3881.     BNE.S   gtoPLST
  3882.     CMP.W   #2,CurrScreen
  3883.     BEQ ExitHelpScreen
  3884.     BSR TopExit
  3885.     MOVE.W  CurrScreen,SaveCurrScreen
  3886.     SF  ScopeEnable
  3887.     ST  DisableAnalyzer
  3888.     ST  NoSampleInfo
  3889.     BSR ClearAnalyzerColors
  3890.     BSR SwapHelpScreen
  3891.     BEQ exithlp
  3892.     BSR Clear100Lines
  3893.     TST.L   HelpTextIndex+4
  3894.     BNE.S   chkskip
  3895.     BSR GetHelpIndex
  3896. chkskip MOVE.L  #HelpFileName,D1
  3897.     MOVE.L  #1005,D2
  3898.     MOVE.L  DOSBase,A6
  3899.     JSR LVOOpen(A6)
  3900.     MOVE.L  D0,FileHandle
  3901.     BNE ShowHelpPage
  3902.     LEA PTPath,A0
  3903.     BSR CopyPath
  3904.     LEA HelpFileName(PC),A0
  3905.     MOVEQ   #7,D0
  3906. hefilop MOVE.B  (A0)+,(A1)+
  3907.     DBRA    D0,hefilop
  3908.     MOVE.L  #FileName,D1
  3909.     MOVE.L  #1005,D2
  3910.     MOVE.L  DOSBase,A6
  3911.     JSR LVOOpen(A6)
  3912.     MOVE.L  D0,FileHandle
  3913.     BEQ HelpFileError
  3914.     BRA.S   ShowHelpPage
  3915.  
  3916. ExitHelpScreen
  3917.     MOVE.L  FileHandle,D1
  3918.     BEQ.S   ehsskip
  3919.     MOVE.L  DOSBase,A6
  3920.     JSR LVOClose(A6)
  3921. ehsskip BSR Clear100Lines
  3922.     BSR.S   SwapHelpScreen
  3923. exithlp MOVE.W  SaveCurrScreen,CurrScreen
  3924.     BRA DisplayMainAll
  3925.  
  3926. SwapHelpScreen
  3927.     MOVE.L  DecompMemPtr,D0
  3928.     BEQ.S   shelps2
  3929.     MOVE.L  D0,A1
  3930.     BSR ssets3
  3931.     BRA FreeDecompMem
  3932. shelps2 LEA HelpScreenData,A0
  3933.     MOVE.L  #HelpScreenSize,D0
  3934.     BSR Decompact
  3935.     BEQ Return1
  3936.     BRA ssets3
  3937.  
  3938. ShowHelpPage
  3939.     MOVE.W  #2,CurrScreen
  3940.     MOVE.W  HelpPage,D0
  3941.     AND.W   #$00FF,D0
  3942.     LSL.W   #2,D0
  3943.     LEA HelpTextIndex,A0
  3944.     MOVE.L  FileHandle,D1
  3945.     BEQ Return1
  3946.     MOVE.L  (A0,D0.W),D2
  3947.     ADD.L   #1024,D2
  3948.     MOVEQ   #-1,D3
  3949.     MOVE.L  DOSBase,A6
  3950.     JSR LVOSeek(A6)
  3951.     MOVE.L  FileHandle,D1
  3952.     MOVE.L  #HelpTextData,D2
  3953.     MOVE.L  #656,D3
  3954.     JSR LVORead(A6)
  3955.     BSR Clear100Lines
  3956.     LEA HelpTextData+16,A6
  3957.     MOVEQ   #120,D6
  3958.     MOVEQ   #15,D7
  3959. shploop MOVEQ   #0,D0
  3960.     MOVE.L  A6,A1
  3961. shplop2 CMP.B   #10,(A1)+
  3962.     BEQ.S   ShowHelpLine
  3963.     TST.B   -1(A1)
  3964.     BEQ.S   ShowHelpLine
  3965.     ADDQ.W  #1,D0
  3966.     BRA.S   shplop2
  3967. ShowHelpLine
  3968.     MOVE.L  A6,ShowTextPtr
  3969.     MOVE.L  A1,A6
  3970.     MOVE.W  D6,TextOffset
  3971.     MOVE.W  D0,TextLength
  3972.     BEQ.S   shlskip
  3973.     JSR ShowText
  3974. shlskip ADD.W   #240,D6
  3975.     DBRA    D7,shploop
  3976.     BSR Wait_4000
  3977.     BRA Wait_4000
  3978.  
  3979. HelpPage    dc.w    1
  3980.  
  3981. HelpUp  LEA HelpTextData+7,A0
  3982.     BRA.S   HelpMove
  3983. HelpDown
  3984.     LEA HelpTextData+10,A0
  3985.     BRA.S   HelpMove
  3986. HelpLeft
  3987.     LEA HelpTextData+4,A0
  3988.     BRA.S   HelpMove
  3989. HelpRight
  3990.     LEA HelpTextData+13,A0
  3991. HelpMove
  3992.     CLR.B   RawKeyCode
  3993.     MOVEQ   #0,D0
  3994.     JSR HexToInteger2
  3995.     TST.W   D0
  3996.     BEQ Return1
  3997.     AND.W   #$00FF,D0
  3998.     MOVE.W  D0,HelpPage
  3999.     BRA ShowHelpPage
  4000.  
  4001. GetHelpIndex
  4002.     MOVE.L  LaHeTx,D0
  4003.     CMP.L   HelpTextIndex,D0
  4004.     BEQ Return1
  4005.     MOVE.L  #HelpFileName,D1
  4006.     MOVE.L  #1005,D2
  4007.     MOVE.L  DOSBase,A6
  4008.     JSR LVOOpen(A6)
  4009.     MOVE.L  D0,FileHandle
  4010.     BNE.S   gehein
  4011.     LEA PTPath,A0
  4012.     BSR CopyPath
  4013.     LEA HelpFileName(PC),A0
  4014.     MOVEQ   #7,D0
  4015. hefilp2 MOVE.B  (A0)+,(A1)+
  4016.     DBRA    D0,hefilp2
  4017.     MOVE.L  #FileName,D1
  4018.     MOVE.L  #1005,D2
  4019.     MOVE.L  DOSBase,A6
  4020.     JSR LVOOpen(A6)
  4021.     MOVE.L  D0,FileHandle
  4022.     BEQ.S   HelpFileError
  4023. gehein  MOVE.L  D0,D1
  4024.     MOVE.L  #HelpTextIndex,D2
  4025.     MOVE.L  #256*4,D3
  4026.     JSR LVORead(A6)
  4027.     MOVE.L  FileHandle,D1
  4028.     JSR LVOClose(A6)
  4029.     MOVE.L  HelpTextIndex,LaHeTx
  4030.     RTS
  4031.  
  4032. HelpFileError
  4033.     MOVE.W  #2,CurrScreen
  4034.     LEA NoHelpText(PC),A0
  4035.     MOVE.W  #1887,D1
  4036.     MOVEQ   #24,D0
  4037.     BRA ShowText3
  4038.  
  4039. NoHelpText  dc.b 'Unable to open helpfile!'
  4040. HelpFileName    dc.b 'PT.help',0
  4041.  
  4042.  
  4043. ;---- Check Function Keys F6-F10 ----
  4044.  
  4045. CheckF6_F10
  4046.     CMP.B   #85,RawKeyCode
  4047.     BNE.S   CheckF7
  4048.     CLR.B   RawKeyCode
  4049.     TST.W   ShiftKeyStatus
  4050.     BEQ.S   cf6skip
  4051.     MOVE.W  ScrPattPos,F6pos
  4052. ShowPosSetText
  4053.     LEA PosSetText,A0
  4054.     BSR ShowStatusText
  4055.     MOVEQ   #8,D2
  4056. spsloop BSR Wait_4000
  4057.     DBRA    D2,spsloop
  4058.     BRA ShowAllRight   
  4059. cf6skip MOVE.W  F6pos,D0
  4060. chkalt  TST.W   AltKeyStatus
  4061.     BNE PattFrom
  4062.     TST.W   CtrlKeyStatus
  4063.     BNE RecordFrom
  4064.     TST.W   LeftAmigaStatus
  4065.     BNE SongFrom
  4066.     TST.W   RunMode
  4067.     BNE Return1
  4068.     MOVE.W  D0,ScrPattPos
  4069.     BRA SetScrPatternPos
  4070.  
  4071. CheckF7 CMP.B   #86,RawKeyCode
  4072.     BNE.S   CheckF8
  4073.     CLR.B   RawKeyCode
  4074.     TST.W   ShiftKeyStatus
  4075.     BEQ.S   cf7skip
  4076.     MOVE.W  ScrPattPos,F7pos
  4077.     BRA.S   ShowPosSetText 
  4078. cf7skip MOVE.W  F7pos,D0
  4079.     BRA.S   chkalt
  4080.  
  4081. CheckF8 CMP.B   #87,RawKeyCode
  4082.     BNE.S   CheckF9
  4083.     CLR.B   RawKeyCode
  4084.     TST.W   ShiftKeyStatus
  4085.     BEQ.S   cf8skip
  4086.     MOVE.W  ScrPattPos,F8pos
  4087.     BRA ShowPosSetText 
  4088. cf8skip MOVE.W  F8pos,D0
  4089.     BRA chkalt
  4090.  
  4091. CheckF9 CMP.B   #88,RawKeyCode
  4092.     BNE.S   CheckF10
  4093.     CLR.B   RawKeyCode
  4094.     TST.W   ShiftKeyStatus
  4095.     BEQ.S   cf9skip
  4096.     MOVE.W  ScrPattPos,F9pos
  4097.     BRA ShowPosSetText
  4098. cf9skip MOVE.W  F9pos,D0
  4099.     BRA chkalt
  4100.  
  4101. CheckF10
  4102.     CMP.B   #89,RawKeyCode
  4103.     BNE Return1
  4104.     CLR.B   RawKeyCode
  4105.     TST.W   ShiftKeyStatus
  4106.     BEQ.S   cf10skip
  4107.     MOVE.W  ScrPattPos,F10pos
  4108.     BRA ShowPosSetText 
  4109. cf10skip
  4110.     MOVE.W  F10pos,D0
  4111.     BRA chkalt
  4112.  
  4113. F6pos   dc.w  0
  4114. F7pos   dc.w 16
  4115. F8pos   dc.w 32
  4116. F9pos   dc.w 48
  4117. F10pos  dc.w 63
  4118.  
  4119. ;---- Check Function Keys F3-F5 ----
  4120.  
  4121. CheckF3_F5
  4122.     MOVEQ   #0,D0
  4123.     MOVE.L  D0,A0
  4124.     TST.W   ShiftKeyStatus
  4125.     BNE CCP4
  4126.     TST.W   CtrlKeyStatus
  4127.     BNE CCP4
  4128.     TST.W   AltKeyStatus
  4129.     BNE CutCopPas
  4130.     CMP.B   #68,RawKeyCode
  4131.     BEQ.S   StepPlayForward
  4132.     CMP.B   #65,RawKeyCode
  4133.     BEQ.S   StepPlayBackward
  4134.     TST.W   SamScrEnable
  4135.     BEQ Return1
  4136.     CMP.B   #82,RawKeyCode
  4137.     BEQ.S   xSamCut
  4138.     CMP.B   #83,RawKeyCode
  4139.     BEQ.S   xSamCop
  4140.     CMP.B   #84,RawKeyCode
  4141.     BEQ.S   xSamPas
  4142.     RTS
  4143.  
  4144. xSamCut JMP SamCut
  4145. xSamCop JMP SamCopy
  4146. xSamPas JMP SamPaste
  4147.  
  4148. StepPlayForward
  4149.     MOVE.W  #1,StepPlayEnable
  4150.     BSR DoStopIt
  4151.     MOVE.W  ScrPattPos,D0
  4152.     BRA pafr1
  4153.  
  4154. StepPlayBackward
  4155.     MOVE.W  #1,StepPlayEnable
  4156.     BSR DoStopIt
  4157.     MOVE.W  ScrPattPos,D0
  4158.     SUBQ.W  #1,D0
  4159.     AND.W   #63,D0
  4160.     BRA pafr1
  4161.  
  4162. StepPlayEnable  dc.w    0
  4163.  
  4164. CCP4    MOVEQ   #0,D0
  4165.     MOVE.W  PattCurPos,D0
  4166.     DIVU    #6,D0
  4167.     AND.L   #3,D0
  4168.     LSL.L   #2,D0
  4169.     MOVE.L  D0,A0
  4170. CutCopPas
  4171.     ADD.L   SongDataPtr,A0
  4172.     LEA sd_patterndata(A0),A0
  4173.     MOVE.L  PatternNumber,D0
  4174.     LSL.L   #8,D0
  4175.     LSL.L   #2,D0
  4176.     ADD.L   D0,A0
  4177.     TST.W   AltKeyStatus
  4178.     BNE.S   CutCopPasPatt
  4179.     TST.W   CtrlKeyStatus
  4180.     BNE.S   CutCopPasCmds
  4181. CutCopPasTrack 
  4182.     CMP.B   #82,RawKeyCode
  4183.     BEQ CutTrack
  4184.     CMP.B   #83,RawKeyCode
  4185.     BEQ CopyTrack
  4186.     CMP.B   #84,RawKeyCode
  4187.     BEQ PasteTrack
  4188.     CMP.B   #68,RawKeyCode
  4189.     BEQ InsNoteTrack
  4190.     CMP.B   #65,RawKeyCode
  4191.     BEQ DelNoteTrack
  4192.     RTS
  4193.  
  4194. CutCopPasPatt
  4195.     CMP.B   #82,RawKeyCode
  4196.     BEQ.S   CutPattern
  4197.     CMP.B   #83,RawKeyCode
  4198.     BEQ.S   CopyPattern
  4199.     CMP.B   #84,RawKeyCode
  4200.     BEQ PastePattern
  4201.     CMP.B   #68,RawKeyCode
  4202.     BEQ InsNotePattern
  4203.     CMP.B   #65,RawKeyCode
  4204.     BEQ DelNotePattern
  4205.     RTS
  4206.  
  4207. CutCopPasCmds  
  4208.     CMP.B   #82,RawKeyCode
  4209.     BEQ CutCmds
  4210.     CMP.B   #83,RawKeyCode
  4211.     BEQ CopyCmds
  4212.     CMP.B   #84,RawKeyCode
  4213.     BEQ PasteCmds
  4214.     RTS
  4215.  
  4216. CutPattern
  4217.     BSR SaveUndo
  4218.     LEA PatternBuffer,A1
  4219.     MOVE.W  #255,D0
  4220.     MOVEQ   #0,D1
  4221. cupaloop
  4222.     MOVE.L  (A0),(A1)+
  4223.     MOVE.L  D1,(A0)+
  4224.     DBRA    D0,cupaloop
  4225.     CLR.B   RawKeyCode
  4226.     BRA RedrawPattern
  4227.  
  4228. CopyPattern
  4229.     LEA PatternBuffer,A1
  4230.     MOVE.W  #255,D0
  4231. copaloop
  4232.     MOVE.L  (A0)+,(A1)+
  4233.     DBRA    D0,copaloop
  4234.     CLR.B   RawKeyCode
  4235.     RTS
  4236.  
  4237. PastePattern
  4238.     BSR SaveUndo
  4239.     LEA PatternBuffer,A1
  4240.     MOVE.W  #255,D0
  4241. papaloop
  4242.     MOVE.L  (A1)+,(A0)+
  4243.     DBRA    D0,papaloop
  4244.     CLR.B   RawKeyCode
  4245.     BRA RedrawPattern
  4246.  
  4247.  
  4248. CutTrack
  4249.     BSR SaveUndo
  4250.     LEA TrackBuffer,A1
  4251.     MOVEQ   #63,D0
  4252.     MOVEQ   #0,D1
  4253. cutrloop
  4254.     MOVE.L  (A0),(A1)+
  4255.     MOVE.L  D1,(A0)
  4256.     LEA 16(A0),A0
  4257.     DBRA    D0,cutrloop
  4258.     CLR.B   RawKeyCode
  4259.     BRA RedrawPattern
  4260.  
  4261. CopyTrack
  4262.     LEA TrackBuffer,A1
  4263.     MOVEQ   #63,D0
  4264. cotrloop
  4265.     MOVE.L  (A0),(A1)+
  4266.     LEA 16(A0),A0
  4267.     DBRA    D0,cotrloop
  4268.     CLR.B   RawKeyCode
  4269.     RTS
  4270.  
  4271. PasteTrack
  4272.     BSR SaveUndo
  4273.     LEA TrackBuffer,A1
  4274.     MOVEQ   #63,D0
  4275. patrloop
  4276.     MOVE.L  (A1)+,(A0)
  4277.     LEA 16(A0),A0
  4278.     DBRA    D0,patrloop
  4279.     CLR.B   RawKeyCode
  4280.     BRA RedrawPattern
  4281.  
  4282. InsNotePattern
  4283.     BSR SaveUndo
  4284.     MOVEQ   #0,D0
  4285.     BSR GetPositionPtr
  4286.     BSR.S   inotr
  4287.     MOVEQ   #6,D0
  4288.     BSR GetPositionPtr
  4289.     BSR.S   inotr
  4290.     MOVEQ   #12,D0
  4291.     BSR GetPositionPtr
  4292.     BSR.S   inotr
  4293.     MOVEQ   #18,D0
  4294.     BSR GetPositionPtr
  4295.     BSR.S   inotr
  4296.     BRA.S   intskip
  4297. InsNoteTrack
  4298.     BSR SaveUndo
  4299.     BSR.S   inotr
  4300. intskip CLR.B   RawKeyCode
  4301.     ADD.W   D2,ScrPattPos
  4302.     AND.W   #$3F,ScrPattPos
  4303.     BSR SetScrPatternPos
  4304.     BRA RedrawPattern
  4305.  
  4306. inotr   MOVE.W  ScrPattPos,D1
  4307.     LSL.W   #4,D1
  4308.     CMP.W   #63*16,D1
  4309.     BEQ.S   inoskip
  4310.     MOVE.W  #992,D0
  4311. intloop MOVE.L  (A0,D0.W),16(A0,D0.W)
  4312.     SUB.W   #16,D0
  4313.     CMP.W   D1,D0
  4314.     BGE.S   intloop
  4315. inoskip MOVEQ   #1,D2
  4316.     CLR.L   (A0,D1.W)
  4317.     RTS
  4318.  
  4319. InsCmdTrack
  4320.     BSR SaveUndo
  4321.     MOVE.W  PattCurPos,D0
  4322.     BSR GetPositionPtr
  4323.     BSR.S   icmtr
  4324.     BRA.S   intskip
  4325. icmtr   MOVE.W  ScrPattPos,D1
  4326.     LSL.W   #4,D1
  4327.     CMP.W   #63*16,D1
  4328.     BEQ.S   icmskip
  4329.     MOVE.W  #992,D0
  4330. icmloop MOVE.W  2(A0,D0.W),D2
  4331.     AND.W   #$0FFF,D2
  4332.     AND.W   #$F000,18(A0,D0.W)
  4333.     OR.W    D2,18(A0,D0.W)
  4334.     SUB.W   #16,D0
  4335.     CMP.W   D1,D0
  4336.     BGE.S   icmloop
  4337. icmskip MOVEQ   #1,D2
  4338.     AND.W   #$F000,2(A0,D1.W)
  4339.     RTS
  4340.  
  4341. DelNotePattern
  4342.     BSR SaveUndo
  4343.     MOVEQ   #0,D0
  4344.     BSR GetPositionPtr
  4345.     BSR.S   dnt
  4346.     MOVEQ   #6,D0
  4347.     BSR GetPositionPtr
  4348.     BSR.S   dnt
  4349.     MOVEQ   #12,D0
  4350.     BSR GetPositionPtr
  4351.     BSR.S   dnt
  4352.     MOVEQ   #18,D0
  4353.     BSR GetPositionPtr
  4354.     BSR.S   dnt
  4355.     BRA intskip
  4356. DelNoteTrack
  4357.     BSR SaveUndo
  4358.     BSR.S   dnt
  4359.     BRA intskip
  4360.  
  4361. dnt MOVE.W  ScrPattPos,D0
  4362.     BEQ Return1
  4363.     SUBQ.W  #1,D0
  4364.     LSL.W   #4,D0
  4365. dntloop MOVE.L  16(A0,D0.W),(A0,D0.W)
  4366.     ADD.W   #16,D0
  4367.     CMP.W   #1024,D0
  4368.     BLO.S   dntloop
  4369.     MOVE.W  #1008,D1
  4370.     MOVEQ   #-1,D2
  4371.     CLR.L   (A0,D1.W)
  4372.     RTS
  4373.  
  4374. DelCmdTrack
  4375.     BSR SaveUndo
  4376.     MOVE.W  PattCurPos,D0
  4377.     BSR GetPositionPtr
  4378.     BSR.S   dct
  4379.     BRA intskip
  4380. dct MOVE.W  ScrPattPos,D0
  4381.     BEQ Return1
  4382.     SUBQ.W  #1,D0
  4383.     LSL.W   #4,D0
  4384. dctloop MOVE.W  18(A0,D0.W),D2
  4385.     AND.W   #$0FFF,D2
  4386.     AND.W   #$F000,2(A0,D0.W)
  4387.     OR.W    D2,2(A0,D0.W)
  4388.     ADD.W   #16,D0
  4389.     CMP.W   #1024,D0
  4390.     BLO.S   dctloop
  4391.     MOVE.W  #1008,D1
  4392.     MOVEQ   #-1,D2
  4393.     AND.W   #$F000,2(A0,D1.W)
  4394.     RTS
  4395.  
  4396. CutCmds BSR SaveUndo
  4397.     LEA CmdsBuffer,A1
  4398.     CLR.W   D0
  4399. cucmloop
  4400.     MOVE.L  0(A0,D0.W),(A1)+
  4401.     AND.L   #$FFFFF000,(A0,D0.W)
  4402.     ADD.W   #16,D0
  4403.     CMP.W   #1024,D0
  4404.     BNE.S   cucmloop
  4405.     CLR.B   RawKeyCode
  4406.     BRA RedrawPattern
  4407.  
  4408. CopyCmds
  4409.     LEA CmdsBuffer,A1
  4410.     CLR.W   D0
  4411. cocmloop
  4412.     MOVE.L  0(A0,D0.W),(A1)+
  4413.     ADD.W   #16,D0
  4414.     CMP.W   #1024,D0
  4415.     BNE.S   cocmloop
  4416.     CLR.B   RawKeyCode
  4417.     RTS
  4418.  
  4419. PasteCmds
  4420.     BSR SaveUndo
  4421.     LEA CmdsBuffer,A1
  4422.     CLR.W   D0
  4423. pacmloop
  4424.     MOVE.L  0(A0,D0.W),D1
  4425.     AND.L   #$FFFFF000,D1
  4426.     MOVE.L  (A1)+,D2
  4427.     AND.L   #$00000FFF,D2
  4428.     OR.L    D2,D1
  4429.     MOVE.L  D1,(A0,D0.W)
  4430.     ADD.W   #16,D0
  4431.     CMP.W   #1024,D0
  4432.     BNE.S   pacmloop
  4433.     CLR.B   RawKeyCode
  4434.     BRA RedrawPattern
  4435.  
  4436. ;---- Swap Tracks ----
  4437.  
  4438. SwapTrack
  4439.     BSR StorePtrCol
  4440.     BSR SetWaitPtrCol
  4441.     LEA SwapTrackText,A0
  4442.     BSR ShowStatusText
  4443. swtloop BSR GetHexKey
  4444.     TST.B   D1
  4445.     BEQ.S   swtabor
  4446.     CMP.B   #4,D1
  4447.     BHI.S   swtloop
  4448.     BSR SaveUndo
  4449.     SUBQ.L  #1,D1
  4450.     LSL.L   #2,D1
  4451.     MOVE.L  D1,D0
  4452.     MOVE.L  SongDataPtr,A0
  4453.     LEA sd_patterndata(A0),A0
  4454.     MOVE.L  PatternNumber,D1
  4455.     LSL.L   #8,D1
  4456.     LSL.L   #2,D1
  4457.     ADD.L   D1,A0
  4458.     MOVE.L  A0,A1
  4459.     ADD.L   D0,A0
  4460.     MOVE.W  PattCurPos,D0
  4461.     DIVU    #6,D0
  4462.     AND.L   #$F,D0
  4463.     LSL.L   #2,D0
  4464.     ADD.L   D0,A1
  4465.     MOVEQ   #63,D1
  4466. swtloop2
  4467.     MOVE.L  (A0),D0
  4468.     MOVE.L  (A1),(A0)
  4469.     MOVE.L  D0,(A1)
  4470.     LEA 16(A0),A0
  4471.     LEA 16(A1),A1
  4472.     DBRA    D1,swtloop2
  4473.     BSR RedrawPattern
  4474. swtabor BSR ShowAllRight
  4475.     BRA RestorePtrCol
  4476.  
  4477. SwapTrackText   dc.b 'Swap (1/2/3/4) ?',0,0
  4478.  
  4479. ;---- Block Commands ----
  4480.  
  4481. BlockMarkText   dc.b 'mark block 00-00',0,0
  4482. BlockErrorText  dc.b 'no block marked !',0
  4483. BufEmptyText    dc.b 'buffer is empty !',0
  4484. BlockFromPos    dc.w 0
  4485. BlockToPos  dc.w 0
  4486. BlockMarkFlag   dc.w 0
  4487. BlockBufferFlag dc.w 0
  4488. JoinPasteFlag   dc.w 0
  4489. PolyPasteFlag   dc.w 0
  4490. BuffFromPos dc.w 0
  4491. BuffToPos   dc.w 0
  4492.  
  4493. BeginBlock
  4494.     CLR.B   RawKeyCode
  4495.     TST.W   BlockMarkFlag
  4496.     BEQ.S   beblskp
  4497. blkunma CLR.W   BlockMarkFlag
  4498.     BRA ShowAllRight
  4499. beblskp MOVE.W  #1,BlockMarkFlag
  4500.     MOVE.W  ScrPattPos,BlockFromPos
  4501.     MOVE.W  ScrPattPos,BlockToPos
  4502. ShowBlockPos
  4503.     MOVE.W  BlockFromPos,D0
  4504.     MOVE.W  BlockToPos,D1
  4505.     CMP.W   D0,D1
  4506.     BHS.S   sbpskip
  4507.     EXG D0,D1
  4508. sbpskip LEA BlockMarkText+12(PC),A0
  4509.     BSR IntTo2DecAscii
  4510.     LEA BlockMarkText+15(PC),A0
  4511.     MOVE.W  D1,D0
  4512.     BSR IntTo2DecAscii
  4513.     LEA BlockMarkText(PC),A0
  4514.     BRA ShowStatusText
  4515.  
  4516. Re_MarkBlock
  4517.     CLR.B   RawKeyCode
  4518.     MOVE.W  #1,BlockMarkFlag
  4519.     MOVE.W  BlockToPos,ScrPattPos
  4520.     BSR SetScrPatternPos
  4521.     BRA.S   ShowBlockPos
  4522.  
  4523. CheckBlockPos
  4524.     TST.W   BlockMarkFlag
  4525.     BEQ Return1
  4526.     MOVE.W  ScrPattPos,D0
  4527.     CMP.W   BlockToPos,D0
  4528.     BEQ Return1
  4529.     MOVE.W  D0,BlockToPos
  4530.     BRA.S   ShowBlockPos
  4531.  
  4532. IntTo2DecAscii
  4533.     AND.L   #$FF,D0
  4534.     DIVU    #10,D0
  4535.     ADD.B   #'0',D0
  4536.     MOVE.B  D0,-1(A0)
  4537.     SWAP    D0
  4538.     ADD.B   #'0',D0
  4539.     MOVE.B  D0,(A0)
  4540.     RTS
  4541.  
  4542. CutBlock
  4543.     CLR.B   RawKeyCode
  4544.     TST.W   BlockMarkFlag
  4545.     BEQ BlockError
  4546.     BSR.S   cobldo
  4547.     MOVE.W  #1,BlockMarkFlag
  4548.     BRA ClearBlock
  4549.  
  4550. CopyBlock
  4551.     CLR.B   RawKeyCode
  4552.     TST.W   BlockMarkFlag
  4553.     BEQ BlockError
  4554. cobldo  CLR.W   BlockMarkFlag
  4555.     MOVE.W  #1,BlockBufferFlag
  4556.     MOVE.W  PattCurPos,D0
  4557.     BSR GetPositionPtr
  4558.     LEA BlockBuffer,A1
  4559.     MOVEQ   #63,D0
  4560. cobllop MOVE.L  (A0),(A1)
  4561.     LEA 16(A0),A0
  4562.     LEA 16(A1),A1
  4563.     DBRA    D0,cobllop
  4564.     MOVE.W  BlockFromPos,D0
  4565.     MOVE.W  BlockToPos,D1
  4566.     CMP.W   D0,D1
  4567.     BHS.S   coblskp
  4568.     EXG D0,D1
  4569. coblskp MOVE.W  D0,BuffFromPos
  4570.     MOVE.W  D1,BuffToPos
  4571.     BRA ShowAllRight
  4572.  
  4573.  
  4574. PasteBlock
  4575.     CLR.B   RawKeyCode
  4576.     TST.W   BlockBufferFlag
  4577.     BEQ BufferError
  4578.     BSR SaveUndo
  4579.     MOVE.W  PattCurPos,D0
  4580.     BSR GetPositionPtr
  4581.     LEA BlockBuffer,A1
  4582.     MOVE.W  BuffFromPos,D0
  4583.     MOVE.W  BuffToPos,D1
  4584.     MOVE.W  ScrPattPos,D2
  4585.     LSL.W   #4,D0
  4586.     LSL.W   #4,D1
  4587.     LSL.W   #4,D2
  4588. pabllop MOVE.L  (A1,D0.W),D3
  4589.     TST.W   JoinPasteFlag
  4590.     BEQ.S   pablskp
  4591.     MOVE.L  D3,D4
  4592.     AND.L   #$FFFFF000,D4
  4593.     BNE.S   pablskp
  4594.     MOVE.L  (A0,D2.W),D4
  4595.     AND.L   #$FFFFF000,D4
  4596.     AND.L   #$00000FFF,D3
  4597.     OR.L    D4,D3
  4598. pablskp MOVE.L  D3,(A0,D2.W)
  4599.     CMP.W   D0,D1
  4600.     BEQ.S   pablend
  4601.     CMP.W   #63*16,D0
  4602.     BEQ.S   pablend
  4603.     CMP.W   #63*16,D2
  4604.     BEQ.S   pablend
  4605.     ADD.W   #16,D0
  4606.     ADD.W   #16,D2
  4607.     TST.W   PolyPasteFlag
  4608.     BEQ.S   pabllop
  4609.     MOVEM.L A1/D0-D2,-(SP)
  4610.     BSR GotoNextMulti
  4611.     MOVE.W  PattCurPos,D0
  4612.     BSR GetPositionPtr
  4613.     MOVEM.L (SP)+,A1/D0-D2
  4614.     BRA.S   pabllop
  4615. pablend CLR.W   JoinPasteFlag
  4616.     CLR.W   PolyPasteFlag
  4617.     BSR ShowAllRight
  4618.     BSR RedrawPattern
  4619.     TST.W   ShiftKeyStatus
  4620.     BNE Return1
  4621.     MOVE.W  BuffToPos,D0
  4622.     SUB.W   BuffFromPos,D0
  4623.     ADDQ.W  #1,D0
  4624.     ADD.W   ScrPattPos,D0
  4625.     CMP.W   #63,D0
  4626.     BLS.S   pablset
  4627.     MOVEQ   #0,D0
  4628. pablset MOVE.W  D0,ScrPattPos
  4629.     BRA SetScrPatternPos
  4630.  
  4631. PolyphonizeBlock
  4632.     MOVE.W  #1,PolyPasteFlag
  4633. JoinPasteBlock
  4634.     MOVE.W  #1,JoinPasteFlag
  4635.     BRA PasteBlock
  4636.  
  4637. InsertBlock
  4638.     CLR.B   RawKeyCode
  4639.     TST.W   BlockBufferFlag
  4640.     BEQ BufferError
  4641.     CMP.W   #63,ScrPattPos
  4642.     BEQ PasteBlock
  4643.     MOVE.W  BuffToPos,D0
  4644.     SUB.W   BuffFromPos,D0
  4645. inbllop MOVE.L  D0,-(SP)
  4646.     MOVE.W  PattCurPos,D0
  4647.     BSR GetPositionPtr
  4648.     BSR inotr
  4649.     MOVE.L  (SP)+,D0
  4650.     DBRA    D0,inbllop
  4651.     BRA PasteBlock
  4652.  
  4653. DeleteBlock
  4654.     CLR.B   RawKeyCode
  4655.     TST.W   BlockMarkFlag
  4656.     BEQ BlockError
  4657.     BSR SaveUndo
  4658.     MOVE.W  BlockFromPos,D0
  4659.     MOVE.W  BlockToPos,D1
  4660.     CMP.W   D0,D1
  4661.     BHS.S   deblskp
  4662.     EXG D0,D1
  4663. deblskp CMP.W   #63,D1
  4664.     BEQ.S   ClearBlock
  4665.     CLR.W   BlockMarkFlag
  4666.     MOVE.W  D0,ScrPattPos
  4667.     ADDQ.W  #1,ScrPattPos
  4668.     SUB.W   D0,D1
  4669.     MOVE.W  D1,D0
  4670. debllop MOVE.L  D0,-(SP)
  4671.     MOVE.W  PattCurPos,D0
  4672.     BSR GetPositionPtr
  4673.     BSR dnt
  4674.     MOVE.L  (SP)+,D0
  4675.     DBRA    D0,debllop
  4676.     SUBQ.W  #1,ScrPattPos
  4677.     BSR ShowAllRight
  4678.     BRA RedrawPattern
  4679.  
  4680. ClearBlock
  4681.     TST.W   BlockMarkFlag
  4682.     BEQ BlockError
  4683.     BSR SaveUndo
  4684.     CLR.W   BlockMarkFlag
  4685.     MOVE.W  PattCurPos,D0
  4686.     BSR GetPositionPtr
  4687.     MOVE.W  BlockFromPos,D0
  4688.     MOVE.W  BlockToPos,D1
  4689.     CMP.W   D0,D1
  4690.     BHS.S   clblskp
  4691.     EXG D0,D1
  4692. clblskp LSL.W   #4,D0
  4693.     LSL.W   #4,D1
  4694.     MOVEQ   #0,D2
  4695. clbllop MOVE.L  D2,(A0,D0.W)
  4696.     CMP.W   D0,D1
  4697.     BEQ.S   clblend
  4698.     ADD.W   #16,D0
  4699.     BRA.S   clbllop
  4700. clblend BSR ShowAllRight
  4701.     BRA RedrawPattern
  4702.  
  4703. BackwardsBlock
  4704.     CLR.B   RawKeyCode
  4705.     TST.W   BlockMarkFlag
  4706.     BEQ BlockError
  4707.     BSR SaveUndo
  4708.     CLR.W   BlockMarkFlag
  4709.     MOVE.W  PattCurPos,D0
  4710.     BSR GetPositionPtr
  4711.     MOVE.W  BlockFromPos,D0
  4712.     MOVE.W  BlockToPos,D1
  4713.     CMP.W   D0,D1
  4714.     BHS.S   bablskp
  4715.     EXG D0,D1
  4716. bablskp LSL.W   #4,D0
  4717.     LSL.W   #4,D1
  4718. babllop MOVE.L  (A0,D0.W),D2
  4719.     MOVE.L  (A0,D1.W),(A0,D0.W)
  4720.     MOVE.L  D2,(A0,D1.W)
  4721.     CMP.W   D1,D0
  4722.     BHS.S   bablend
  4723.     ADD.W   #16,D0
  4724.     SUB.W   #16,D1
  4725.     CMP.W   D1,D0
  4726.     BHS.S   bablend
  4727.     BRA.S   babllop
  4728. bablend BSR ShowAllRight
  4729.     BRA RedrawPattern
  4730.  
  4731. TransBlockUp
  4732.     SF  trblflag
  4733.     BRA.S   trbldo
  4734. TransBlockDown
  4735.     ST  trblflag
  4736. trbldo  CLR.B   RawKeyCode
  4737.     TST.W   BlockMarkFlag
  4738.     BEQ.S   BlockError
  4739.     BSR SaveUndo
  4740.     MOVE.W  #2,NoteShift
  4741.     MOVE.W  BlockFromPos,D0
  4742.     MOVE.W  BlockToPos,D1
  4743.     CMP.W   D0,D1
  4744.     BHS.S   trblskp
  4745.     EXG D0,D1
  4746. trblskp MOVE.W  D0,D5
  4747.     LSL.W   #4,D5
  4748.     SUB.W   D0,D1
  4749.     MOVE.W  D1,D6
  4750.     MOVE.W  PattCurPos,D0
  4751.     BSR GetPositionPtr
  4752.     LEA (A0,D5.W),A3
  4753.     MOVEQ   #0,D3
  4754.     MOVE.B  SampleAllFlag,sampallsave
  4755.     ST  SampleAllFlag
  4756.     TST.B   trblflag
  4757.     BEQ.S   trblup
  4758.     BSR sandlo2
  4759.     MOVE.B  sampallsave,SampleAllFlag
  4760.     BRA RedrawPattern
  4761. trblup  BSR sanulo2
  4762.     MOVE.B  sampallsave,SampleAllFlag
  4763.     BRA RedrawPattern
  4764.  
  4765. trblflag    dc.b 0
  4766. sampallsave dc.b 0
  4767.  
  4768. BlockError
  4769.     LEA BlockErrorText,A0
  4770.     BSR ShowStatusText
  4771.     BRA SetErrorPtrCol
  4772.  
  4773. BufferError
  4774.     LEA BufEmptyText,A0
  4775.     BSR ShowStatusText
  4776.     BRA SetErrorPtrCol
  4777.  
  4778. ExpandTrack
  4779.     CLR.B   RawKeyCode
  4780.     BSR SaveUndo
  4781.     MOVE.W  ScrPattPos,PosSave
  4782.     ADDQ.W  #1,ScrPattPos
  4783.     CMP.W   #64,ScrPattPos
  4784.     BHS.S   extrend
  4785. extrlop MOVE.W  PattCurPos,D0
  4786.     BSR GetPositionPtr
  4787.     BSR inotr
  4788.     ADDQ.W  #2,ScrPattPos
  4789.     CMP.W   #64,ScrPattPos
  4790.     BLO.S   extrlop
  4791. extrend MOVE.W  PosSave,ScrPattPos
  4792.     BRA RedrawPattern
  4793.  
  4794. ContractTrack
  4795.     CLR.B   RawKeyCode
  4796.     BSR SaveUndo
  4797.     MOVE.W  ScrPattPos,PosSave
  4798.     ADDQ.W  #1,ScrPattPos
  4799.     CMP.W   #64,ScrPattPos
  4800.     BHS.S   cotrend
  4801. cotrlop MOVE.W  PattCurPos,D0
  4802.     BSR GetPositionPtr
  4803.     BSR dnt
  4804.     ADDQ.W  #1,ScrPattPos
  4805.     CMP.W   #64,ScrPattPos
  4806.     BLO.S   cotrlop
  4807. cotrend MOVE.W  PosSave,ScrPattPos
  4808.     BRA RedrawPattern
  4809.  
  4810. PosSave dc.w 0
  4811.  
  4812.  
  4813. KillToEndOfTrack
  4814.     CLR.B   RawKeyCode
  4815.     BSR SaveUndo
  4816.     MOVE.W  PattCurPos,D0
  4817.     BSR GetPositionPtr
  4818.     MOVE.W  ScrPattPos,D0
  4819.     MOVE.W  D0,D1
  4820.     MULU    #16,D1
  4821.     LEA (A0,D1.W),A0
  4822.     TST.W   ShiftKeyStatus
  4823.     BNE.S   KillToStart
  4824. kteot   CLR.L   (A0)
  4825.     LEA 16(A0),A0
  4826.     ADDQ.W  #1,D0
  4827.     CMP.W   #64,D0
  4828.     BLO.S   kteot
  4829.     BRA RedrawPattern
  4830.  
  4831. KillToStart
  4832.     CLR.L   (A0)
  4833.     LEA -16(A0),A0
  4834.     TST.W   D0
  4835.     BEQ RedrawPattern
  4836.     SUBQ.W  #1,D0
  4837.     BRA.S   KillToStart
  4838.  
  4839. UndoLastChange
  4840.     CLR.B   RawKeyCode
  4841.     MOVEQ   #0,D0
  4842.     BSR GetPositionPtr
  4843.     LEA UndoBuffer,A1
  4844.     MOVE.W  #255,D0
  4845. unlalop MOVE.L  (A1),D1
  4846.     MOVE.L  (A0),(A1)+
  4847.     MOVE.L  D1,(A0)+
  4848.     DBRA    D0,unlalop
  4849.     BRA RedrawPattern
  4850.  
  4851. SaveUndo
  4852.     MOVEM.L D0/A0-A1,-(SP)
  4853.     MOVEQ   #0,D0
  4854.     BSR GetPositionPtr
  4855.     LEA UndoBuffer,A1
  4856.     MOVE.W  #255,D0
  4857. saunlop MOVE.L  (A0)+,(A1)+
  4858.     DBRA    D0,saunlop
  4859.     MOVEM.L (SP)+,D0/A0-A1
  4860.     RTS
  4861.  
  4862. BoostAll
  4863.     LEA BoostAllText,A0
  4864.     BSR AreYouSure
  4865.     BNE SetErrorPtrCol
  4866.     MOVE.W  InsNum,SaveInstr
  4867.     MOVE.W  #1,InsNum
  4868. boallop BSR ShowSampleInfo
  4869.     BSR Boost2
  4870.     ADDQ.W  #1,InsNum
  4871.     CMP.W   #32,InsNum
  4872.     BLO.S   boallop
  4873.     MOVE.W  SaveInstr,InsNum
  4874.     BRA ShowSampleInfo
  4875.  
  4876. FilterAll
  4877.     LEA FilterAllText,A0
  4878.     BSR AreYouSure
  4879.     BNE SetErrorPtrCol
  4880.     MOVE.W  InsNum,SaveInstr
  4881.     MOVE.W  #1,InsNum
  4882. fiallop BSR ShowSampleInfo
  4883.     BSR Filter2
  4884.     ADDQ.W  #1,InsNum
  4885.     CMP.W   #32,InsNum
  4886.     BLO.S   fiallop
  4887.     MOVE.W  SaveInstr,InsNum
  4888.     BRA ShowSampleInfo
  4889.  
  4890. BoostAllText    dc.b 'boost all samples',0
  4891. FilterAllText   dc.b 'filter all sampls',0
  4892. SaveInstr   dc.w 0
  4893.  
  4894. ;---- Check Function Keys F1-F2 ----
  4895.  
  4896. CheckF1_F2
  4897.     CMP.B   #80,RawKeyCode
  4898.     BEQ.S   SetOctaveLow
  4899.     CMP.B   #81,RawKeyCode
  4900.     BEQ.S   SetOctaveHigh
  4901.     RTS
  4902.  
  4903. SetOctaveLow
  4904.     MOVE.L  #KbdTransTable1,KeyTransTabPtr
  4905.     CLR.B   RawKeyCode
  4906.     RTS
  4907.  
  4908. SetOctaveHigh
  4909.     MOVE.L  #KbdTransTable2,KeyTransTabPtr
  4910.     CLR.B   RawKeyCode
  4911.     RTS
  4912.  
  4913.  
  4914. ;---- Get Hex Key ----
  4915.  
  4916. GetHexByte
  4917.     BSR StorePtrCol
  4918.     BSR SetWaitPtrCol
  4919.     CLR.B   RawKeyCode
  4920.     MOVEQ   #0,D0
  4921.     MOVE.W  TextOffset,D0
  4922.     DIVU    #40,D0
  4923.     ADDQ.W  #6,D0
  4924.     MOVE.W  D0,LineCurY
  4925.     SWAP    D0
  4926.     LSL.W   #3,D0
  4927.     ADDQ.W  #4,D0
  4928.     MOVE.W  D0,LineCurX
  4929.     BSR UpdateLineCurPos
  4930.     BSR.S   GetHexKey
  4931.     MOVE.L  D1,D0
  4932.     MOVE.B  D1,D6
  4933.     LSL.B   #4,D6
  4934.     BSR PrintHexDigit
  4935.     ADD.W   #8,LineCurX
  4936.     BSR UpdateLineCurPos
  4937.     BSR.S   GetHexKey
  4938.     MOVE.L  D1,D0
  4939.     OR.B    D1,D6
  4940.     BSR PrintHexDigit
  4941.     CLR.W   LineCurX
  4942.     MOVE.W  #270,LineCurY
  4943.     BSR UpdateLineCurPos
  4944.     BSR RestorePtrCol
  4945.     MOVEQ   #0,D0
  4946.     MOVE.B  D6,D0
  4947.     RTS
  4948.  
  4949. GetHexKey
  4950.     CLR.B   MixChar
  4951.     MOVEQ   #0,D0
  4952.     MOVEQ   #0,D1
  4953.     BTST    #2,$DFF016
  4954.     BEQ.S   ghkreturn
  4955.     BSR DoKeyBuffer
  4956.     MOVE.B  RawKeyCode,D0
  4957.     MOVE.B  D0,MixChar
  4958.     BEQ.S   GetHexKey
  4959.     CMP.B   #68,D0 ; CR
  4960.     BEQ.S   ghkreturn
  4961.     CMP.B   #69,D0 ; Esc
  4962.     BEQ.S   ghkreturn
  4963.     CMP.B   #79,D0 ; <--
  4964.     BEQ.S   ghkleft
  4965.     CMP.B   #78,D0 ; -->
  4966.     BEQ.S   ghkright
  4967.     BSR.S   CheckHexKey
  4968.     CMP.B   #16,D1
  4969.     BEQ.S   GetHexKey
  4970.     CLR.B   RawKeyCode
  4971. ghkreturn
  4972.     MOVEQ   #0,D0
  4973.     RTS
  4974.  
  4975. ghkleft MOVEQ   #-1,D0
  4976.     RTS
  4977.  
  4978. ghkright
  4979.     MOVEQ   #1,D0
  4980.     RTS
  4981.  
  4982. CheckHexKey
  4983.     LEA RawKeyHexTable,A0
  4984.     MOVEQ   #0,D1
  4985. chxloop CMP.B   (A0)+,D0
  4986.     BEQ Return1
  4987.     ADDQ.B  #1,D1
  4988.     CMP.B   #16,D1
  4989.     BNE.S   chxloop
  4990.     RTS
  4991.  
  4992. ;---- Enter Edit Commands (effects) ----
  4993.  
  4994. EditCommand
  4995.     TST.L   EditMode
  4996.     BEQ Return1
  4997.     MOVEQ   #0,D0
  4998.     MOVE.B  RawKeyCode,D0
  4999.     BSR.S   CheckHexKey
  5000.     CMP.B   #16,D1
  5001.     BNE.S   DoEditCommand
  5002.     RTS
  5003.  
  5004. DoEditCommand
  5005.     CMP.W   #1,PattCurPos
  5006.     BNE.S   ChkPos2
  5007.     CMP.W   #1,D1
  5008.     BHI Return1
  5009.     MOVE.L  #$FFF,D2
  5010.     CLR.W   CmdOffset
  5011.     LSL.W   #4,D1
  5012.     LSL.W   #8,D1
  5013.     BRA UpdateCommand
  5014.  
  5015. ChkPos2 CMP.W   #2,PattCurPos
  5016.     BNE.S   ChkPos3
  5017.     MOVE.L  #$FFF,D2
  5018.     MOVE.W  #2,CmdOffset
  5019.     LSL.W   #4,D1
  5020.     LSL.W   #8,D1
  5021.     BRA UpdateCommand
  5022.  
  5023. ChkPos3 CMP.W   #3,PattCurPos
  5024.     BNE.S   ChkPos4
  5025.     MOVE.L  #$F0FF,D2
  5026.     MOVE.W  #2,CmdOffset
  5027.     LSL.W   #8,D1
  5028.     BRA UpdateCommand
  5029.  
  5030. ChkPos4 CMP.W   #4,PattCurPos
  5031.     BNE.S   ChkPos5
  5032.     MOVE.L  #$FF0F,D2
  5033.     MOVE.W  #2,CmdOffset
  5034.     LSL.W   #4,D1
  5035.     BRA UpdateCommand
  5036.  
  5037. ChkPos5 CMP.W   #5,PattCurPos
  5038.     BNE.S   ChkPos7
  5039.     MOVE.L  #$FFF0,D2
  5040.     MOVE.W  #2,CmdOffset
  5041.     BRA UpdateCommand
  5042.  
  5043. ChkPos7 CMP.W   #7,PattCurPos
  5044.     BNE.S   ChkPos8
  5045.     CMP.W   #1,D1
  5046.     BHI Return1
  5047.     MOVE.L  #$FFF,D2
  5048.     MOVE.W  #4,CmdOffset
  5049.     LSL.W   #4,D1
  5050.     LSL.W   #8,D1
  5051.     BRA UpdateCommand
  5052.  
  5053. ChkPos8 CMP.W   #8,PattCurPos
  5054.     BNE.S   ChkPos9
  5055.     MOVE.L  #$FFF,D2
  5056.     MOVE.W  #6,CmdOffset
  5057.     LSL.W   #4,D1
  5058.     LSL.W   #8,D1
  5059.     BRA UpdateCommand
  5060.  
  5061. ChkPos9 CMP.W   #9,PattCurPos
  5062.     BNE.S   ChkPos10
  5063.     MOVE.L  #$F0FF,D2
  5064.     MOVE.W  #6,CmdOffset
  5065.     LSL.W   #8,D1
  5066.     BRA UpdateCommand
  5067.  
  5068. ChkPos10
  5069.     CMP.W   #10,PattCurPos
  5070.     BNE.S   ChkPos11
  5071.     MOVE.L  #$FF0F,D2
  5072.     MOVE.W  #6,CmdOffset
  5073.     LSL.W   #4,D1
  5074.     BRA UpdateCommand
  5075.  
  5076. ChkPos11
  5077.     CMP.W   #11,PattCurPos
  5078.     BNE.S   ChkPos13
  5079.     MOVE.L  #$FFF0,D2
  5080.     MOVE.W  #6,CmdOffset
  5081.     BRA UpdateCommand
  5082.  
  5083. ChkPos13
  5084.     CMP.W   #13,PattCurPos
  5085.     BNE.S   ChkPos14
  5086.     CMP.W   #1,D1
  5087.     BHI Return1
  5088.     MOVE.L  #$FFF,D2
  5089.     MOVE.W  #8,CmdOffset
  5090.     LSL.W   #4,D1
  5091.     LSL.W   #8,D1
  5092.     BRA UpdateCommand
  5093.  
  5094. ChkPos14
  5095.     CMP.W   #14,PattCurPos
  5096.     BNE.S   ChkPos15
  5097.     MOVE.L  #$FFF,D2
  5098.     MOVE.W  #10,CmdOffset
  5099.     LSL.W   #4,D1
  5100.     LSL.W   #8,D1
  5101.     BRA UpdateCommand
  5102.  
  5103. ChkPos15
  5104.     CMP.W   #15,PattCurPos
  5105.     BNE.S   ChkPos16
  5106.     MOVE.L  #$F0FF,D2
  5107.     MOVE.W  #10,CmdOffset
  5108.     LSL.W   #8,D1
  5109.     BRA UpdateCommand
  5110.  
  5111. ChkPos16
  5112.     CMP.W   #16,PattCurPos
  5113.     BNE.S   ChkPos17
  5114.     MOVE.L  #$FF0F,D2
  5115.     MOVE.W  #10,CmdOffset
  5116.     LSL.W   #4,D1
  5117.     BRA UpdateCommand
  5118.  
  5119. ChkPos17
  5120.     CMP.W   #17,PattCurPos
  5121.     BNE.S   ChkPos19
  5122.     MOVE.L  #$FFF0,D2
  5123.     MOVE.W  #10,CmdOffset
  5124.     BRA UpdateCommand
  5125.  
  5126. ChkPos19
  5127.     CMP.W   #19,PattCurPos
  5128.     BNE.S   ChkPos20
  5129.     CMP.W   #1,D1
  5130.     BHI Return1
  5131.     MOVE.L  #$FFF,D2
  5132.     MOVE.W  #12,CmdOffset
  5133.     LSL.W   #4,D1
  5134.     LSL.W   #8,D1
  5135.     BRA.S   UpdateCommand
  5136.  
  5137. ChkPos20
  5138.     CMP.W   #20,PattCurPos
  5139.     BNE.S   ChkPos21
  5140.     MOVE.L  #$FFF,D2
  5141.     MOVE.W  #14,CmdOffset
  5142.     LSL.W   #4,D1
  5143.     LSL.W   #8,D1
  5144.     BRA.S   UpdateCommand
  5145.  
  5146. ChkPos21
  5147.     CMP.W   #21,PattCurPos
  5148.     BNE.S   ChkPos22
  5149.     MOVE.L  #$F0FF,D2
  5150.     MOVE.W  #14,CmdOffset
  5151.     LSL.W   #8,D1
  5152.     BRA.S   UpdateCommand
  5153.  
  5154. ChkPos22
  5155.     CMP.W   #22,PattCurPos
  5156.     BNE.S   MustBePos23
  5157.     MOVE.L  #$FF0F,D2
  5158.     MOVE.W  #14,CmdOffset
  5159.     LSL.W   #4,D1
  5160.     BRA.S   UpdateCommand
  5161.  
  5162. MustBePos23
  5163.     MOVE.L  #$FFF0,D2
  5164.     MOVE.W  #14,CmdOffset
  5165. UpdateCommand
  5166.     MOVE.L  SongDataPtr,A0
  5167.     LEA sd_patterndata(A0),A0
  5168.     MOVE.L  PatternNumber,D0
  5169.     LSL.L   #8,D0
  5170.     LSL.L   #2,D0
  5171.     ADD.L   D0,A0
  5172.     MOVEQ   #0,D0
  5173.     MOVE.W  ScrPattPos,D0
  5174.     LSL.W   #4,D0
  5175.     EXT.L   D0
  5176.     ADD.L   D0,A0
  5177.     ADD.W   CmdOffset,A0
  5178.     AND.W   D2,(A0)
  5179.     ADD.W   D1,(A0)
  5180.     MOVE.W  (A0),WordNumber
  5181.     MOVEQ   #0,D0
  5182.     MOVE.W  ScrPattPos,D0
  5183.     MULU    #7*40,D0
  5184.     MOVE.W  PattCurPos,D1
  5185.     DIVU    #6,D1
  5186.     MULU    #9,D1
  5187.     ADD.L   D1,D0
  5188.     ADD.W   #7528,D0
  5189.     MOVE.W  D0,TextOffset
  5190.     CMP.W   #0,CmdOffset
  5191.     BEQ.S   ShowInstrNibble
  5192.     CMP.W   #4,CmdOffset
  5193.     BEQ.S   ShowInstrNibble
  5194.     CMP.W   #8,CmdOffset
  5195.     BEQ.S   ShowInstrNibble
  5196.     CMP.W   #12,CmdOffset
  5197.     BEQ.S   ShowInstrNibble
  5198.     BSR PrintHexWord
  5199. dscend  BSR EditMoveDown
  5200.     CLR.B   RawKeyCode
  5201.     RTS
  5202.  
  5203. ShowInstrNibble
  5204.     SUBQ.W  #1,TextOffset
  5205.     MOVE.W  #1,TextLength
  5206.     MOVEQ   #0,D0
  5207.     MOVE.W  (A0),D0
  5208.     AND.W   #$F000,D0
  5209.     BNE.S   sinokok
  5210.     TST.B   BlankZeroFlag
  5211.     BEQ.S   sinokok
  5212.     MOVE.L  #BlankInsText,D0
  5213.     BRA.S   sinprt
  5214. sinokok LSR.W   #4,D0
  5215.     LSR.W   #7,D0
  5216.     ADD.L   #FastHexTable+1,D0
  5217. sinprt  MOVE.L  D0,ShowTextPtr
  5218.     BSR ShowText
  5219.     BRA.S   dscend
  5220.  
  5221. ;---- Store/Insert Effect Commands ----
  5222.  
  5223. CheckStoreEffect
  5224.     MOVEQ   #0,D0
  5225.     MOVE.B  RawKeyCode,D0
  5226.     BEQ Return1
  5227.     CMP.B   #70,D0 ; Del
  5228.     BEQ CheckKeyboard2
  5229.     CMP.B   #10,D0
  5230.     BHI Return1
  5231.     SUBQ.B  #1,D0
  5232.     ADD.B   D0,D0
  5233.     MOVE.L  D0,D7
  5234.     MOVE.W  PattCurPos,D0
  5235.     BSR GetPositionPtr
  5236.     MOVE.W  ScrPattPos,D0
  5237.     LSL.W   #4,D0
  5238.     LEA (A0,D0.W),A0
  5239.     MOVE.W  2(A0),D0
  5240.     AND.W   #$0FFF,D0
  5241.     LEA EffectMacros,A0
  5242.     MOVE.W  D0,(A0,D7.W)
  5243.     LEA CommandStoredText,A0
  5244.     BSR ShowStatusText
  5245.     BSR WaitALittle
  5246.     BRA ShowAllRight
  5247.  
  5248. CommandStoredText dc.b 'command stored!',0
  5249.  
  5250. CheckInsertEffect
  5251.     CLR.W   InsEfx
  5252.     MOVEQ   #0,D0
  5253.     MOVE.B  RawKeyCode,D0
  5254.     BEQ Return1
  5255.     CMP.B   #70,D0 ; Del
  5256.     BEQ CheckKeyboard2
  5257.     CMP.B   #11,D0 ; -
  5258.     BEQ DecreaseEffect
  5259.     CMP.B   #12,D0 ; = (+)
  5260.     BEQ.S   IncreaseEffect
  5261.     CMP.B   #13,D0 ; \
  5262.     BEQ.S   CopyEffect
  5263.     CMP.B   #10,D0
  5264.     BHI Return1
  5265.     SUBQ.B  #1,D0
  5266.     ADD.B   D0,D0
  5267.     LEA EffectMacros,A0
  5268.     MOVE.W  (A0,D0.W),InsEfx
  5269. DoInsEffect
  5270.     MOVE.B  #70,RawKeyCode
  5271.     BRA CheckNoteKeys
  5272.  
  5273. GetLastEffect
  5274.     MOVE.W  PattCurPos,D0
  5275.     BSR GetPositionPtr
  5276.     MOVE.W  ScrPattPos,D0
  5277.     SUBQ.W  #1,D0
  5278.     AND.W   #$3F,D0
  5279.     LSL.W   #4,D0
  5280.     LEA (A0,D0.W),A0
  5281.     MOVE.W  2(A0),D0
  5282.     AND.W   #$0FFF,D0
  5283.     RTS
  5284.  
  5285. CopyEffect
  5286.     BSR.S   GetLastEffect
  5287.     MOVE.W  D0,InsEfx
  5288.     BRA.S   DoInsEffect
  5289.  
  5290. IncreaseEffect
  5291.     BSR.S   GetLastEffect
  5292.     MOVE.W  D0,D1
  5293.     AND.W   #$0F00,D1
  5294.     CMP.W   #$0E00,D1
  5295.     BEQ.S   IncECom
  5296.     ADDQ.B  #1,D0
  5297.     MOVE.W  D0,InsEfx
  5298.     BRA.S   DoInsEffect
  5299.  
  5300. IncECom MOVE.W  D0,D1
  5301.     ADDQ.B  #1,D1
  5302.     AND.B   #$0F,D1
  5303.     AND.W   #$0FF0,D0
  5304.     OR.B    D1,D0
  5305.     MOVE.W  D0,InsEfx
  5306.     BRA.S   DoInsEffect
  5307.  
  5308. DecreaseEffect
  5309.     BSR.S   GetLastEffect
  5310.     MOVE.W  D0,D1
  5311.     AND.W   #$0F00,D1
  5312.     CMP.W   #$0E00,D1
  5313.     BEQ.S   DecECom
  5314.     SUBQ.B  #1,D0
  5315.     MOVE.W  D0,InsEfx
  5316.     BRA DoInsEffect
  5317.  
  5318. DecECom MOVE.W  D0,D1
  5319.     SUBQ.B  #1,D1
  5320.     AND.B   #$0F,D1
  5321.     AND.W   #$0FF0,D0
  5322.     OR.B    D1,D0
  5323.     MOVE.W  D0,InsEfx
  5324.     BRA DoInsEffect
  5325.  
  5326. InsEfx  dc.w 0
  5327.  
  5328. ;---- Check Keyboard for notekeys ----
  5329.  
  5330. CheckKeyboard
  5331.     TST.B   RawKeyCode
  5332.     BEQ Return1
  5333.     TST.W   LeftAmigaStatus
  5334.     BNE Return1
  5335.     TST.W   CtrlKeyStatus
  5336.     BNE Return1
  5337.     TST.W   ShiftKeyStatus
  5338.     BNE CheckStoreEffect
  5339.     TST.W   AltKeyStatus
  5340.     BNE CheckInsertEffect
  5341. CheckKeyboard2
  5342.     MOVE.W  PattCurPos,D0
  5343.     BEQ.S   CheckNoteKeys
  5344.     CMP.W   #6,D0
  5345.     BEQ.S   CheckNoteKeys
  5346.     CMP.W   #12,D0
  5347.     BEQ.S   CheckNoteKeys
  5348.     CMP.W   #18,D0
  5349.     BEQ.S   CheckNoteKeys
  5350.     TST.L   EditMode
  5351.     BNE EditCommand
  5352.     RTS
  5353.  
  5354. CheckNoteKeys
  5355.     LEA RawKeyScaleTable,A0
  5356.     MOVE.B  RawKeyCode,D1
  5357.     MOVEQ   #38,D0
  5358. cnkloop CMP.B   0(A0,D0.W),D1
  5359.     BEQ.S   NoteKeyPressed
  5360.     DBRA    D0,cnkloop
  5361.     RTS
  5362.  
  5363. NoteKeyPressed
  5364.     CLR.B   RawKeyCode
  5365.     MOVE.L  KeyTransTabPtr,A1
  5366.     MOVE.B  (A1,D0.W),D0
  5367.     CMP.W   #36,D0
  5368.     BHS.S   nkpskip
  5369.     MOVE.L  SplitAddress,D1
  5370.     BEQ.S   nkpskip
  5371.     CLR.L   SplitAddress
  5372.     MOVE.L  D1,A0
  5373.     MOVE.B  D0,(A0)
  5374.     MOVE.W  SamNoteType,D1
  5375.     BEQ ShowSplit
  5376.     CLR.W   SamNoteType
  5377.     AND.W   #$FF,D0
  5378.     MOVE.W  D0,(A0)
  5379.     CMP.W   #1,D1
  5380.     BEQ.S   loclab1
  5381.     CMP.W   #3,D1
  5382.     BEQ ShowS2TuneNote
  5383.     CMP.W   #4,D1
  5384.     BEQ ShowAllRight
  5385.     JMP ShowResamNote
  5386. loclab1 JMP ShowSamNote
  5387. nkpskip MOVE.W  InsNum,PlayInsNum
  5388.     TST.B   SplitFlag
  5389.     BEQ.S   nkpskip2
  5390.     LEA SplitInstrTable,A1
  5391.     MOVE.B  (A1,D0.W),D1
  5392.     BEQ.S   nkpskip3
  5393.     MOVE.B  D1,PlayInsNum+1
  5394. nkpskip3
  5395.     LEA SplitTransTable,A1
  5396.     MOVE.B  (A1,D0.W),D0
  5397. nkpskip2
  5398.     MOVEQ   #0,D2
  5399. playtheinstr
  5400.     LEA PeriodTable,A1 ; note in d0 here
  5401.     MOVE.L  D0,D4
  5402.     LSL.W   #1,D0
  5403.     MOVEQ   #0,D3
  5404.     MOVE.W  (A1,D0.W),D3
  5405.  
  5406.     MOVE.L  SongDataPtr,A0 ; This fixes finetune...
  5407.     LEA 14(A0),A0
  5408.     MOVE.W  InsNum,D1
  5409.     BNE.S   nkpskipit
  5410.     MOVE.W  LastInsNum,D1
  5411. nkpskipit
  5412.     MULU    #30,D1
  5413.     ADD.L   D1,A0
  5414.     MOVEQ   #0,D1
  5415.     MOVE.B  (A0),D1 ; get finetune
  5416.     MULU    #37*2,D1
  5417.     ADD.L   D1,A1
  5418.     MOVE.W  (A1,D0.W),CurrentPlayNote
  5419.     TST.L   D2
  5420.     BEQ.S   nkpnrml
  5421.     CMP.B   #2,pnoteflag
  5422.     BNE antpskip
  5423.  
  5424. nkpnrml TST.L   EditMode
  5425.     BEQ antpskip
  5426. AddNoteToPattern
  5427.     MOVE.L  SongDataPtr,A0
  5428.     LEA sd_patterndata(A0),A0   ; Find first pattern
  5429.     MOVE.L  PatternNumber,D0
  5430.     LSL.L   #8,D0
  5431.     LSL.L   #2,D0
  5432.     ADD.L   D0,A0   ; Find current pattern
  5433.     MOVEQ   #0,D0
  5434.     MOVE.W  ScrPattPos,D0
  5435.     BSR QuantizeCheck
  5436.     LSL.W   #4,D0
  5437.     EXT.L   D0
  5438.     ADD.L   D0,A0   ; Find current pos
  5439.     MOVE.W  PattCurPos,D0
  5440.     DIVU    #6,D0
  5441.     LSL.W   #2,D0
  5442.     EXT.L   D0
  5443.     ADD.L   D0,A0   ; Find current channel
  5444.     TST.W   AltKeyStatus
  5445.     BEQ.S   antpsks
  5446.     AND.L   #$FFFFF000,(A0)
  5447.     MOVE.W  InsEfx,D0
  5448.     OR.W    D0,2(A0)
  5449.     BRA.S   antp3
  5450. antpsks TST.W   ShiftKeyStatus
  5451.     BEQ.S   antpskip2
  5452.     CLR.L   (A0)
  5453. antpskip2
  5454.     MOVE.W  D3,(A0) ; Put note into pattern
  5455.     BEQ.S   antp2
  5456.     TST.B   AutoInsFlag
  5457.     BEQ.S   antp4
  5458.     MOVE.W  VolumeEfx,2(A0)
  5459. antp4   MOVEQ   #0,D0
  5460.     MOVE.W  PlayInsNum,D0
  5461.     LSL.W   #4,D0
  5462.     AND.B   #$F,2(A0)
  5463.     ADD.B   D0,2(A0)
  5464.     LSL.W   #4,D0
  5465.     AND.W   #$F000,D0
  5466.     OR.W    D0,(A0)
  5467.     BRA.S   antp3
  5468.  
  5469. antp2   AND.W   #$0FFF,2(A0)
  5470. antp3   MOVE.W  2(A0),CurrCmds
  5471.     MOVE.L  NoteNamesPtr,A0
  5472.     LSL.W   #2,D4
  5473.     EXT.L   D4
  5474.     ADD.L   D4,A0
  5475.     MOVE.L  A0,ShowTextPtr
  5476.     MOVE.W  #3,TextLength
  5477.     MOVEQ   #0,D0
  5478.     MOVE.W  ScrPattPos,D0
  5479.     BSR QuantizeCheck
  5480.     MULU    #7*40,D0
  5481.     MOVEQ   #0,D1
  5482.     MOVE.W  PattCurPos,D1
  5483.     DIVU    #6,D1
  5484.     MULU    #9,D1
  5485.     ADD.L   D1,D0
  5486.     ADD.W   #7524,D0
  5487.     MOVE.W  D0,TextOffset
  5488.     TST.W   AltKeyStatus
  5489.     BEQ.S   antpnot
  5490.     ADDQ.W  #4,D0
  5491.     MOVE.W  D0,TextOffset
  5492.     BRA.S   antpalt
  5493. antpnot BSR ShowText    ; Show notename
  5494.     BSR PrintHiInstrNum
  5495. antpalt
  5496.     MOVE.W  CurrCmds,WordNumber
  5497.     BSR PrintHexWord
  5498.     BSR EditMoveDown
  5499. antpskip
  5500.     TST.W   DidQuantize
  5501.     BNE.S   testmul
  5502.     TST.W   CurrentPlayNote
  5503.     BNE PlayNote
  5504. testmul TST.B   MultiFlag
  5505.     BEQ Return1
  5506. GotoNextMulti
  5507.     MOVEQ   #0,D0
  5508.     MOVE.W  PattCurPos,D0
  5509.     DIVU    #6,D0
  5510.     LEA MultiModeNext,A0
  5511.     MOVE.B  (A0,D0.W),D0
  5512.     SUBQ.W  #1,D0
  5513.     AND.W   #3,D0
  5514.     MULU    #6,D0
  5515.     MOVE.W  D0,PattCurPos
  5516.     BRA UpdateCursorPos
  5517.  
  5518. QuantizeCheck
  5519.     TST.L   RunMode
  5520.     BEQ.S   qcend
  5521.     MOVEQ   #0,D1
  5522.     MOVE.B  QuantizeValue,D1
  5523.     BEQ.S   qcend
  5524.     CMP.W   #1,D1
  5525.     BEQ.S   QuanOne
  5526.     MOVE.W  #1,DidQuantize
  5527.     MOVE.L  D1,D2
  5528.     LSR.W   #1,D2
  5529.     ADD.W   D0,D2
  5530.     AND.W   #$003F,D2
  5531.     DIVU    D1,D2
  5532.     MULU    D1,D2
  5533.     CMP.W   D0,D2
  5534.     BHI.S   qcskip
  5535.     CLR.W   DidQuantize
  5536. qcskip  MOVE.W  D2,D0
  5537.     RTS
  5538.  
  5539. QuanOne MOVE.L  CurrSpeed,D1
  5540.     LSR.L   #1,D1
  5541.     CMP.L   Counter,D1
  5542.     BLS.S   QuantToNextNote
  5543. qcend   CLR.W   DidQuantize
  5544.     RTS
  5545.  
  5546. QuantToNextNote
  5547.     ADDQ.W  #1,D0
  5548.     AND.W   #$003F,D0
  5549.     MOVE.W  #1,DidQuantize
  5550.     RTS
  5551.  
  5552. PlayNote
  5553.     CMP.W   #18,PattCurPos
  5554.     BNE.S   ChkChan3
  5555.     LEA $DFF0D0,A5
  5556.     LEA audchan4temp,A4
  5557.     BRA.S   DoPlayNote
  5558.  
  5559. ChkChan3
  5560.     CMP.W   #12,PattCurPos
  5561.     BNE.S   ChkChan2
  5562.     LEA $DFF0C0,A5
  5563.     LEA audchan3temp,A4
  5564.     BRA.S   DoPlayNote
  5565.  
  5566. ChkChan2
  5567.     CMP.W   #6,PattCurPos
  5568.     BNE.S   ChkChan1
  5569.     LEA $DFF0B0,A5
  5570.     LEA audchan2temp,A4
  5571.     BRA.S   DoPlayNote
  5572.  
  5573. ChkChan1
  5574.     TST.W   PattCurPos
  5575.     BNE Return1
  5576.     LEA $DFF0A0,A5
  5577.     LEA audchan1temp,A4
  5578. DoPlayNote
  5579.     MOVE.L  A5,NoteAddr
  5580.     LEA SampleInfo,A6
  5581.     MOVE.W  PlayInsNum,D0
  5582.     BEQ.S   dpnplay
  5583.     LSL.L   #2,D0
  5584.     LEA SamplePtrs,A0
  5585.     LEA SampleInfo2,A6
  5586.     MOVE.L  0(A0,D0.W),si_pointer2
  5587.     MOVE.L  SongDataPtr,A0
  5588.     LEA -10(A0),A0
  5589.     MOVE.W  PlayInsNum,D0
  5590.     MOVE.B  D0,PlayInsNum2
  5591.     MULU    #30,D0
  5592.     ADD.L   D0,A0
  5593.     MOVE.L  22(A0),SampleInfo2
  5594.     MOVE.L  26(A0),si_long2
  5595. dpnplay MOVE.B  PlayInsNum2,n_samplenum(A4)
  5596.     MOVE.W  4(A6),D0 ; repeat
  5597.     BNE.S   dpn2
  5598.     MOVE.W  (A6),D0  ; length
  5599.     BRA.S   dpn3
  5600. dpn2    ADD.W   6(A6),D0 ; add replen
  5601. dpn3    MOVEQ   #0,D1
  5602.     MOVE.B  3(A6),D1
  5603.     MOVE.W  D1,8(A5)        ; Set volume
  5604.     MOVE.B  D1,n_volume(A4)
  5605.     MOVE.W  CurrentPlayNote,6(A5)   ; Set period
  5606.     MOVE.W  CurrentPlayNote,n_period(A4)
  5607.     MOVE.W  n_dmabit(A4),$DFF096    ; Channel DMA off
  5608.     MOVE.L  8(A6),D1
  5609.     ADD.L   StartOfs,D1
  5610.     MOVE.L  D1,(A5)     ; Set sampledata pointer
  5611.     CLR.L   StartOfs
  5612.     MOVE.L  D1,n_start(A4)
  5613.     MOVE.W  D0,4(A5)        ; Set length
  5614.     MOVE.W  D0,n_length(A4)
  5615.     BNE.S   dpnnz
  5616.     MOVEQ   #1,D0
  5617.     MOVE.W  D0,4(A5)
  5618.     MOVE.W  D0,n_length(A4)
  5619. dpnnz   MOVE.W  CurrentPlayNote,D0
  5620.     BSR PlayNoteAnalyze
  5621.     MOVE.W  DMAWait,D0
  5622. dpnolp1 DBRA    D0,dpnolp1
  5623.     MOVE.W  n_dmabit(A4),D0
  5624.     AND.W   ActiveChannels,D0
  5625.     OR.W    #$8000,D0
  5626.     MOVE.W  D0,$DFF096  ; Turn DMA back on
  5627.     MOVE.W  DMAWait,D0
  5628. dpnolp2 DBRA    D0,dpnolp2
  5629.     MOVEQ   #0,D1
  5630.     MOVE.W  4(A6),D1 ; repeat*2
  5631.     ADD.L   D1,D1
  5632.     ADD.L   8(A6),D1 ; + startptr
  5633.     MOVE.L  D1,(A5) ; Set loop pointer
  5634.     MOVE.L  D1,n_loopstart(A4)
  5635.     MOVE.W  6(A6),4(A5) ; Set loop length
  5636.     MOVE.W  6(A6),n_replen(A4)
  5637.     ST  n_trigger(A4)
  5638.     BRA testmul
  5639.  
  5640. PlayInsNum2 dc.b 0,0
  5641.  
  5642. ;---- Check Cursor Arrow Keys ----
  5643.  
  5644. ArrowKeys
  5645.     CMP.B   #4,EnterTextFlag
  5646.     BEQ Return1
  5647.     MOVE.B  RawKeyCode,D0
  5648.     TST.W   GetLineFlag
  5649.     BNE.S   arkeskip
  5650.     TST.W   ShiftKeyStatus
  5651.     BNE.S   arkeskip
  5652.     TST.W   AltKeyStatus
  5653.     BNE.S   arkeskip
  5654.     CMP.W   #2,CurrScreen
  5655.     BEQ.S   arkeskip
  5656.     CMP.B   #78,D0
  5657.     BEQ RightArrow
  5658.     CMP.B   #79,D0
  5659.     BEQ LeftArrow
  5660. arkeskip
  5661.     CMP.B   #76,D0
  5662.     BEQ.S   UpArrow
  5663.     CMP.B   #77,D0
  5664.     BEQ DownArrow
  5665.     CLR.W   ArrowPressed
  5666.     RTS
  5667.  
  5668. ArrowPressed    dc.w    0
  5669. ArrowRepCounter dc.w    0
  5670.  
  5671. UpArrow TST.L   RunMode
  5672.     BNE Return1
  5673.     CMP.W   #2,CurrScreen
  5674.     BEQ Return1
  5675.     CMP.W   #3,CurrScreen
  5676.     BEQ Return1
  5677.     CMP.W   #4,CurrScreen
  5678.     BEQ Return1
  5679.     CMP.W   #6,CurrScreen
  5680.     BEQ Return1
  5681.     TST.W   ArrowPressed
  5682.     BEQ.S   MoveOneUp
  5683.     ADDQ.W  #1,ArrowRepCounter
  5684.     TST.W   AltKeyStatus
  5685.     BNE.S   AltUpArrow
  5686.     TST.W   ShiftKeyStatus
  5687.     BNE.S   ShiftUpArrow
  5688.     CMP.W   #6,ArrowRepCounter
  5689.     BPL.S   MoveOneUp
  5690.     RTS
  5691.  
  5692. ShiftUpArrow
  5693.     CMP.W   #3,ArrowRepCounter
  5694.     BPL.S   MoveOneUp
  5695.     RTS
  5696.  
  5697. AltUpArrow
  5698.     CMP.W   #1,ArrowRepCounter
  5699.     BPL.S   MoveOneUp
  5700.     RTS
  5701.  
  5702. MoveOneUp
  5703.     CLR.W   ArrowRepCounter
  5704.     MOVE.W  #$FFFF,ArrowPressed
  5705.     CMP.L   #'patt',RunMode
  5706.     BEQ Return1
  5707.     SUBQ.W  #1,ScrPattPos
  5708.     AND.W   #$003F,ScrPattPos
  5709.     BRA SetScrPatternPos
  5710.  
  5711. DownArrow
  5712.     TST.L   RunMode
  5713.     BNE Return1
  5714.     CMP.W   #2,CurrScreen
  5715.     BEQ Return1
  5716.     CMP.W   #3,CurrScreen
  5717.     BEQ Return1
  5718.     CMP.W   #4,CurrScreen
  5719.     BEQ Return1
  5720.     CMP.W   #6,CurrScreen
  5721.     BEQ Return1
  5722.     TST.W   ArrowPressed
  5723.     BEQ.S   MoveOneDown
  5724.     ADDQ.W  #1,ArrowRepCounter
  5725.     TST.W   AltKeyStatus
  5726.     BNE.S   AltDownArrow
  5727.     TST.W   ShiftKeyStatus
  5728.     BNE.S   ShiftDownArrow
  5729.     CMP.W   #6,ArrowRepCounter
  5730.     BPL.S   MoveOneDown
  5731.     RTS
  5732.  
  5733. ShiftDownArrow
  5734.     CMP.W   #3,ArrowRepCounter
  5735.     BPL.S   MoveOneDown
  5736.     RTS
  5737.  
  5738. AltDownArrow
  5739.     CMP.W   #1,ArrowRepCounter
  5740.     BPL.S   MoveOneDown
  5741.     RTS
  5742.  
  5743. MoveOneDown
  5744.     CLR.W   ArrowRepCounter
  5745.     MOVE.W  #$FFFF,ArrowPressed
  5746.     TST.L   RunMode
  5747.     BNE Return1
  5748.     ADDQ.W  #1,ScrPattPos
  5749.     AND.W   #$003F,ScrPattPos
  5750.     BRA SetScrPatternPos
  5751.  
  5752. EditMoveDown
  5753.     TST.L   RunMode
  5754.     BNE Return1
  5755.     MOVE.W  EditMoveAdd,D0
  5756.     ADD.W   D0,ScrPattPos
  5757.     AND.W   #$003F,ScrPattPos
  5758.     BRA SetScrPatternPos
  5759.  
  5760. EditMoveAdd dc.w 1
  5761.  
  5762. RightArrow
  5763.     TST.W   ArrowPressed
  5764.     BEQ.S   MoveOneRight
  5765.     ADDQ.W  #1,ArrowRepCounter
  5766.     CMP.W   #6,ArrowRepCounter
  5767.     BPL.S   MoveOneRight
  5768.     RTS
  5769.  
  5770. PatternOneUp
  5771.     ADDQ.L  #1,PatternNumber
  5772.     AND.L   #$3F,PatternNumber
  5773.     BSR Wait_4000
  5774.     BRA RedrawPattern
  5775.  
  5776. MoveOneRight
  5777.     CLR.W   ArrowRepCounter
  5778.     MOVE.W  #$FFFF,ArrowPressed
  5779.     ADDQ.W  #1,PattCurPos
  5780.     CMP.W   #24,PattCurPos
  5781.     BMI.S   morskip
  5782.     CLR.W   PattCurPos
  5783. morskip BRA.S   UpdateCursorPos
  5784.  
  5785. LeftArrow
  5786.     TST.W   ArrowPressed
  5787.     BEQ.S   MoveOneLeft
  5788.     ADDQ.W  #1,ArrowRepCounter
  5789.     CMP.W   #6,ArrowRepCounter
  5790.     BPL.S   MoveOneLeft
  5791.     RTS
  5792.  
  5793. PatternOneDown
  5794.     SUBQ.L  #1,PatternNumber
  5795.     AND.L   #$3F,PatternNumber
  5796.     BSR Wait_4000
  5797.     BRA RedrawPattern
  5798.  
  5799. MoveOneLeft
  5800.     CLR.W   ArrowRepCounter
  5801.     MOVE.W  #$FFFF,ArrowPressed
  5802.     SUBQ.W  #1,PattCurPos
  5803.     TST.W   PattCurPos
  5804.     BPL UpdateCursorPos
  5805.     MOVE.W  #23,PattCurPos
  5806. UpdateCursorPos
  5807.     TST.W   SamScrEnable
  5808.     BNE Return1
  5809.     MOVE.W  PattCurPos,D0
  5810.     LEA CursorPosTable,A0
  5811.     MOVE.B  0(A0,D0.W),D0
  5812.     LSL.W   #3,D0
  5813.     ADD.W   #9,D0
  5814.     MOVE.W  #$BD,D1
  5815.     MOVEQ   #14,D2 ; 14 lines
  5816.     LEA CursorSpriteData,A0
  5817.     BRA SetSpritePos
  5818.  
  5819. ArrowKeys2
  5820.     MOVE.B  RawKeyCode,D0
  5821.     CMP.B   #76,D0
  5822.     BEQ.S   UpArrow2
  5823.     CMP.B   #77,D0
  5824.     BEQ.S   DownArrow2
  5825.     CMP.B   #79,D0
  5826.     BEQ.S   LeftArrow2
  5827.     CMP.B   #78,D0
  5828.     BEQ RightArrow2
  5829.     RTS
  5830.  
  5831. UpArrow2
  5832.     CMP.W   #2,CurrScreen
  5833.     BEQ HelpUp
  5834.     CMP.W   #3,CurrScreen
  5835.     BEQ FilenameOneUp
  5836.     CMP.W   #4,CurrScreen
  5837.     BEQ PED_OneUp
  5838.     CMP.W   #6,CurrScreen
  5839.     BEQ PLSTOneUp
  5840.     RTS
  5841.  
  5842. DownArrow2
  5843.     CMP.W   #2,CurrScreen
  5844.     BEQ HelpDown
  5845.     CMP.W   #3,CurrScreen
  5846.     BEQ FilenameOneDown
  5847.     CMP.W   #4,CurrScreen
  5848.     BEQ PED_OneDown
  5849.     CMP.W   #6,CurrScreen
  5850.     BEQ PLSTOneDown
  5851.     RTS
  5852.  
  5853. LeftArrow2
  5854.     TST.W   ShiftKeyStatus
  5855.     BNE PositionDown
  5856.     TST.W   AltKeyStatus
  5857.     BNE PatternOneDown
  5858.     TST.W   CtrlKeyStatus
  5859.     BNE SampleNumDown
  5860.     CMP.W   #2,CurrScreen
  5861.     BEQ HelpLeft
  5862.     RTS
  5863.  
  5864. RightArrow2
  5865.     TST.W   ShiftKeyStatus
  5866.     BNE PositionUp
  5867.     TST.W   AltKeyStatus
  5868.     BNE PatternOneUp
  5869.     TST.W   CtrlKeyStatus
  5870.     BNE SampleNumUp
  5871.     CMP.W   #2,CurrScreen
  5872.     BEQ HelpRight
  5873.     RTS
  5874.  
  5875. ;---- Update Line Cursor Position ----
  5876.  
  5877. UpdateLineCurPos
  5878.     MOVE.W  LineCurX,D0
  5879.     MOVE.W  LineCurY,D1
  5880.     SUBQ.W  #1,D0
  5881.     MOVEQ   #2,D2
  5882.     LEA LineCurSpriteData,A0
  5883.     BRA SetSpritePos
  5884.  
  5885. ;---- Check Gadgets ----
  5886.  
  5887. CheckGadgets
  5888.     BSR UpdatePointerPos
  5889.     BSR.S   CheckGadgets2
  5890.     CLR.W   notogfl
  5891.     CMP.W   #$FFFF,GadgRepeat
  5892.     BEQ.S   CgRepeat
  5893.     MOVEQ   #0,D0
  5894. cgloop  ADDQ.L  #1,D0
  5895.     TST.B   HHFlag
  5896.     BEQ.S   cgnorma
  5897.     CMP.L   #40000*5,D0
  5898.     BEQ.S   CgRepeat
  5899.     BRA.S   cgnorm2
  5900. cgnorma CMP.L   #40000,D0
  5901.     BEQ.S   CgRepeat
  5902. cgnorm2 BTST    #6,$BFE001
  5903.     BEQ.S   cgloop
  5904.     CLR.W   UpOrDown
  5905.     BRA MainLoop
  5906.  
  5907. CgRepeat
  5908.     TST.B   HHFlag
  5909.     BEQ.S   cgrepe2
  5910.     BSR Wait_4000
  5911. cgrepe2 MOVE.W  #$FFFF,GadgRepeat
  5912.     BTST    #6,$BFE001
  5913.     BEQ.S   CheckGadgets
  5914.     CLR.W   GadgRepeat
  5915.     CLR.W   UpOrDown
  5916.     BRA MainLoop
  5917.  
  5918. CheckGadgets2
  5919.     MOVE.W  MouseX,MouseX2
  5920.     BNE.S   cgskip
  5921.     TST.W   MouseY
  5922.     BNE.S   cgskip
  5923. ChkQuit LEA QuitPTText,A0
  5924.     BSR AreYouSure
  5925.     BEQ ExitCleanup ; Quit PT!
  5926.     RTS
  5927. cgskip  MOVE.W  MouseY,MouseY2
  5928.     CMP.W   #4,CurrScreen
  5929.     BEQ CheckPresEdGadgs
  5930.     MOVE.W  MouseX2,D0
  5931.     MOVE.W  MouseY2,D1
  5932.     CMP.W   #122,D1
  5933.     BHS WantedPattGadg
  5934.     CMP.W   #111,D1
  5935.     BHS CheckSmplNamOrLoad
  5936.     CMP.W   #100,D1
  5937.     BHS TypeInSongName
  5938.     CMP.W   #120,D0
  5939.     BLO.S   cgskip2
  5940.     CMP.W   #6,CurrScreen
  5941.     BEQ CheckPLSTGadgs
  5942. cgskip2 CMP.W   #2,CurrScreen
  5943.     BEQ Return1
  5944.     CMP.W   #3,CurrScreen   ; Screen 3 is DirScreen...
  5945.     BEQ CheckDirGadgets
  5946.     CMP.W   #5,CurrScreen
  5947.     BEQ CheckSetupGadgs
  5948.     CMP.W   #7,CurrScreen
  5949.     BEQ CheckSetup2Gadgs
  5950.     CMP.W   #45,D1
  5951.     BHS.S   cgskip3
  5952.     CMP.W   #306,D0
  5953.     BHS CheckToggle
  5954.     CMP.W   #244,D0
  5955.     BHS.S   MainMenu3
  5956.     CMP.W   #181,D0
  5957.     BHS.S   MainMenu2
  5958.     CMP.W   #120,D0
  5959.     BHS MainMenu1
  5960. cgskip3 CMP.W   #120,D0
  5961.     BHS.S   cgskip4
  5962.     CMP.W   #109,D0
  5963.     BHS DownGadgets
  5964.     CMP.W   #98,D0
  5965.     BHS UpGadgets
  5966.     CMP.W   #62,D0
  5967.     BHS EnterNumGadg
  5968.     BRA PosInsDelGadgs
  5969. cgskip4 TST.B   EdEnable
  5970.     BNE CheckEditOpGadgs
  5971.     BRA ToggleAnaScope
  5972.  
  5973. MainMenu3
  5974.     MOVE.W  MouseY2,D0
  5975.     CMP.W   #34,D0
  5976.     BHS DPMGFIH
  5977.     CMP.W   #23,D0
  5978.     BHS Setup
  5979.     CMP.W   #12,D0
  5980.     BHS PresetEditor
  5981.     TST.W   D0
  5982.     BHS PLST
  5983.     RTS
  5984.  
  5985. DPMGFIH JMP SamplerScreen
  5986.  
  5987. MainMenu2
  5988.     MOVE.W  MouseY2,D0
  5989.     CMP.W   #3,CurrScreen
  5990.     BNE mm2skip
  5991.     CMP.W   #44,D0
  5992.     BHS CheckDirGadgets2
  5993. mm2skip CMP.W   #44,D0
  5994.     BHS Return1
  5995.     CMP.W   #34,D0
  5996.     BHS ShowDirScreen
  5997.     CMP.W   #23,D0
  5998.     BHS DoEditOp
  5999.     CMP.W   #12,D0
  6000.     BHS ClearAll
  6001.     TST.W   D0
  6002.     BHS StopIt
  6003.     RTS
  6004.  
  6005. MainMenu1
  6006.     MOVE.W  MouseY2,D0
  6007.     CMP.W   #3,CurrScreen
  6008.     BNE.S   mm1skip
  6009.     CMP.W   #44,D0
  6010.     BHS CheckDirGadgets2
  6011. mm1skip CMP.W   #44,D0
  6012.     BHS Return1
  6013.     CMP.W   #34,D0
  6014.     BHS RecordPattern
  6015.     CMP.W   #23,D0
  6016.     BHS Edit
  6017.     CMP.W   #12,D0
  6018.     BHS PlayPattern
  6019.     TST.W   D0
  6020.     BHS PlaySong
  6021.     RTS
  6022.  
  6023.  
  6024. ;---- Disk Format ----
  6025.  
  6026. DiskFormatGadg
  6027.     BSR WaitForButtonUp
  6028.     BSR Wait_4000
  6029.     BSR ClearFileNames
  6030.     BSR SwapFormatBox
  6031.     BSR WaitForButtonUp
  6032.     LEA AreYouSureText,A0
  6033.     BSR ShowStatusText
  6034. fmtbuttonchk
  6035.     BSR DoKeyBuffer
  6036.     MOVE.B  RawKeyCode,D0
  6037.     CMP.B   #69,D0 ; ESC
  6038.     BEQ.S   fmtbend
  6039.     BTST    #6,$BFE001
  6040.     BNE.S   fmtbuttonchk
  6041.     MOVEM.W MouseX,D0/D1
  6042.     CMP.W   #89,D0
  6043.     BLO.S   fmtbuttonchk
  6044.     CMP.W   #212,D0
  6045.     BHI.S   fmtbuttonchk
  6046.     CMP.W   #72,D1
  6047.     BLO.S   fmtbuttonchk
  6048.     CMP.W   #82,D1
  6049.     BHI.S   fmtbuttonchk
  6050.     CMP.W   #136,D0
  6051.     BLO.S   DiskFormat
  6052.     CMP.W   #166,D0
  6053.     BLO.S   fmtbuttonchk
  6054. fmtbend BSR.S   SwapFormatBox
  6055.     BRA SetErrorPtrCol
  6056.  
  6057. SwapFormatBox
  6058.     LEA FormatBoxData,A1
  6059.     LEA FormatBoxPos,A0
  6060.     MOVEQ   #38,D0
  6061. sfbloop1
  6062.     MOVEQ   #17,D1
  6063. sfbloop2
  6064.     MOVE.B  10240(A0),D2
  6065.     MOVE.B  702(A1),10240(A0)
  6066.     MOVE.B  D2,702(A1)
  6067.     MOVE.B  (A0),D2
  6068.     MOVE.B  (A1),(A0)+
  6069.     MOVE.B  D2,(A1)+
  6070.     DBRA    D1,sfbloop2
  6071.     LEA $0016(A0),A0
  6072.     DBRA    D0,sfbloop1
  6073.     RTS
  6074.  
  6075. DiskFormat
  6076.     BSR SwapFormatBox
  6077.     BSR ShowAllRight
  6078.     BSR ClearFileNames
  6079.     LEA PlsEntNamText,A0
  6080.     MOVE.W  #2570,D1
  6081.     MOVEQ   #17,D0
  6082.     BSR ShowText3
  6083.     LEA OfVolumeText,A0
  6084.     MOVE.B  #'_',15(A0)
  6085.     MOVE.B  #'_',16(A0)
  6086.     MOVE.W  #2810,D1
  6087.     MOVEQ   #17,D0
  6088.     BSR ShowText3
  6089.     BSR SetWaitPtrCol
  6090.     LEA DiskNumText1,A6
  6091.     MOVEQ   #1,D0
  6092. df_loop CLR.B   0(A6,D0.W)
  6093.     DBRA    D0,df_loop
  6094.     MOVE.L  A6,TextEndPtr
  6095.     MOVE.L  A6,ShowTextPtr
  6096.     ADDQ.L  #2,TextEndPtr
  6097.     MOVE.B  #1,EnterTextFlag
  6098.     MOVE.W  #2825,A4
  6099.     MOVE.W  #2,TextLength
  6100.     BSR GetTextLine
  6101.     CLR.B   EnterTextFlag
  6102.     CLR.L   TextEndPtr
  6103.     BSR ClearFileNames
  6104.     MOVE.L  4.W,A6
  6105.     MOVE.L  #5632,D0
  6106.     MOVEQ   #MEMF_CHIP,D1
  6107.     JSR LVOAllocMem(A6)
  6108.     MOVE.L  D0,FormatDataPtr
  6109.     BEQ df_memerr
  6110.     BSR DoShowFreeMem
  6111.     SUB.L   A1,A1
  6112.     JSR LVOFindTask(A6)
  6113.     MOVE.L  D0,ProcessPtr
  6114.     LEA TrackdiskPort,A1
  6115.     JSR LVOAddPort(A6)
  6116.     LEA TrackdiskIOExtTD,A1
  6117.     MOVEQ   #0,D0
  6118.     MOVEQ   #0,D1
  6119.     LEA TrackdiskName,A0
  6120.     JSR LVOOpenDevice(A6)
  6121.     MOVE.L  #TrackdiskPort,TDPortPtr
  6122.     CLR.W   CylinderNumber
  6123.     LEA TrackdiskIOExtTD,A1
  6124.     MOVE.W  #TD_CHANGESTATE,IO_COMMAND(A1)
  6125.     JSR LVODoIO(A6) ; Check if disk in drive
  6126.     TST.L   IO_ACTUAL(A1)
  6127.     BEQ.S   df_indrive
  6128.     LEA NoDiskInDriveText,A0
  6129.     BSR ShowStatusText
  6130.     MOVE.W  #50,WaitTime
  6131.     BSR SetErrorPtrCol
  6132.     BRA df_cleanup
  6133.  
  6134. df_indrive
  6135.     LEA TrackdiskIOExtTD,A1
  6136.     MOVE.W  #TD_PROTSTATUS,IO_COMMAND(A1)
  6137.     JSR LVODoIO(A6) ; Check write protect
  6138.     TST.L   IO_ACTUAL(A1)
  6139.     BEQ.S   df_noprot
  6140.     LEA WriteProtectedText,A0
  6141.     BSR ShowStatusText
  6142.     MOVE.W  #50,WaitTime
  6143.     BSR SetErrorPtrCol
  6144.     BRA df_cleanup
  6145.  
  6146. df_noprot
  6147.     LEA DiskFormatText,A0
  6148.     MOVE.W  #2581-7,D1
  6149.     MOVEQ   #11,D0
  6150.     BSR ShowText3
  6151.     LEA InProgressText,A0
  6152.     MOVE.W  #2821-7,D1
  6153.     MOVEQ   #11,D0
  6154.     BSR ShowText3
  6155.     CLR.L   FmtDiskOffset
  6156.     MOVE.L  FormatDataPtr,FmtDataPtr
  6157.     MOVE.L  #$00001600,FmtDataSize
  6158.     BSR ClearCylinder
  6159.     BSR SetDiskPtrCol
  6160. df_formatloop
  6161.     LEA FormattingCylText,A0
  6162.     BSR ShowStatusText
  6163.     MOVE.W  CylinderNumber,D0
  6164.     LSR.W   #1,D0
  6165.     MOVE.W  D0,WordNumber
  6166.     BSR Print2DecDigits
  6167.     MOVE.L  4.W,A6
  6168.     LEA TrackdiskIOExtTD,A1
  6169.     MOVE.W  #TD_FORMAT,IO_COMMAND(A1)
  6170.     JSR LVODoIO(A6) ; Format cylinder
  6171.     LEA VerifyingText,A0
  6172.     BSR ShowStatusText
  6173.     MOVE.W  CylinderNumber,D0
  6174.     LSR.W   #1,D0
  6175.     MOVE.W  D0,WordNumber
  6176.     BSR Print2DecDigits
  6177.     MOVE.L  4.W,A6
  6178.     LEA TrackdiskIOExtTD,A1
  6179.     MOVE.W  #CMD_READ,IO_COMMAND(A1)
  6180.     JSR LVODoIO(A6) ; Read cylinder to verify
  6181.     TST.B   Fmt_hmmm
  6182.     BEQ.S   df_verifyok
  6183.     LEA VerifyErrText(PC),A0
  6184.     BSR ShowStatusText
  6185.     MOVE.W  #50,WaitTime
  6186.     BSR SetErrorPtrCol
  6187.     BRA df_cleanup
  6188.  
  6189. VerifyErrText   dc.b "Verify error!",0
  6190.  
  6191. df_verifyok
  6192.     ADD.L   #$1600,FmtDiskOffset
  6193.     ADDQ.W  #1,CylinderNumber
  6194.     CMP.W   #160,CylinderNumber
  6195.     BNE df_formatloop
  6196.  
  6197.     LEA InitDiskText,A0
  6198.     BSR ShowStatusText
  6199.     BSR ClearCylinder
  6200.     LEA TrackdiskIOExtTD,A1
  6201.     CLR.L   IO_OFFSET(A1)
  6202.     MOVE.L  FormatDataPtr,A2
  6203.     MOVE.L  #$444F5300,(A2)       ; 'DOS',0
  6204.     MOVE.W  #880,10(A2)
  6205.     MOVE.L  #512,IO_LENGTH(A1)
  6206.     MOVE.W  #CMD_WRITE,IO_COMMAND(A1)
  6207.     MOVE.L  4.W,A6
  6208.     JSR LVODoIO(A6) ; Write bootblock
  6209.     MOVE.L  #DateStamp,D1
  6210.     MOVE.L  DOSbase,A6
  6211.     JSR LVODateStamp(A6)
  6212.     MOVE.L  4.W,A6
  6213.     BSR ClearCylinder
  6214.     MOVE.L  FormatDataPtr,A2
  6215.     MOVE.W  #2,2(A2)
  6216.     MOVE.W  #$0048,14(A2)
  6217.     MOVE.L  #$FFFFFFFF,$0138(A2)
  6218.     MOVE.W  #$0371,$013E(A2)
  6219.     MOVE.L  #$0553542D,$01B0(A2)
  6220.     MOVE.W  DiskNumText1,$01B4(A2)
  6221.     MOVE.W  #$06F7,$01E2(A2)
  6222.     MOVE.W  #1,$01FE(A2)
  6223.     LEA DateStamp,A0
  6224.     MOVE.L  (A0),D0
  6225.     MOVE.L  D0,$01A4(A2)
  6226.     MOVE.L  D0,$01E4(A2)
  6227.     MOVE.L  4(A0),D0
  6228.     MOVE.L  D0,$01A8(A2)
  6229.     MOVE.L  D0,$01E8(A2)
  6230.     MOVE.L  8(A0),D0
  6231.     MOVE.L  D0,$01AC(A2)
  6232.     MOVE.L  D0,$01EC(A2)
  6233.     MOVE.L  A2,A3
  6234.     MOVE.L  A3,A4
  6235.     MOVEQ   #$7F,D1
  6236.     MOVEQ   #0,D0
  6237.     MOVE.L  D0,$0014(A4)
  6238. df_loop2
  6239.     SUB.L   (A3)+,D0
  6240.     DBRA    D1,df_loop2
  6241.     MOVE.L  D0,$0014(A4)
  6242.     MOVE.L  #$C000C037,$0200(A2)
  6243.     LEA $0204(A2),A3
  6244.     MOVEQ   #$36,D0
  6245. df_loop3
  6246.     MOVE.L  #$FFFFFFFF,(A3)+
  6247.     DBRA    D0,df_loop3
  6248.     MOVE.W  #$3FFF,$0272(A2)
  6249.     MOVE.W  #$3FFF,$02DC(A2)
  6250.     LEA TrackdiskIOExtTD,A1
  6251.     MOVE.L  #$0006E000,IO_OFFSET(A1)
  6252.     MOVE.L  #1024,IO_LENGTH(A1)
  6253.     MOVE.W  #CMD_WRITE,IO_COMMAND(A1)
  6254.     JSR LVODoIO(A6)
  6255.     LEA TrackdiskIOExtTD,A1
  6256.     MOVE.W  #CMD_UPDATE,IO_COMMAND(A1)
  6257.     JSR LVODoIO(A6) ; Flush write buffer
  6258. df_cleanup
  6259.     LEA TrackdiskIOExtTD,A1
  6260.     MOVE.W  #TD_MOTOR,IO_COMMAND(A1)
  6261.     CLR.L   IO_LENGTH(A1)
  6262.     JSR LVODoIO(A6) ; Turn off the motor
  6263.     MOVE.L  Fmt_tja,A0
  6264.     MOVE.L  $0024(A0),A0
  6265.     OR.B    #2,$0040(A0)
  6266.     LEA TrackdiskIOExtTD,A1
  6267.     MOVE.L  4.W,A6
  6268.     JSR LVOCloseDevice(A6)
  6269.     LEA TrackdiskPort,A1
  6270.     JSR LVORemPort(A6)
  6271.     MOVE.L  FormatDataPtr,A1
  6272.     MOVE.L  #5632,D0
  6273.     JSR LVOFreeMem(A6)
  6274.     CMP.W   #160,CylinderNumber
  6275.     BNE.S   df_skip2
  6276.     CMP.W   #'00',DiskNumText1
  6277.     BNE.S   df_skip2
  6278.     MOVE.L  DOSbase,A6
  6279.     MOVE.L  #100,D1 ; Wait 2 sec
  6280.     JSR LVODelay(A6)
  6281.     MOVE.L  #FmtSongDirName,D1
  6282.     JSR LVOCreateDir(A6)
  6283.     MOVE.L  D0,D1
  6284.     JSR LVOUnlock(A6)
  6285.     MOVE.L  #FmtModuleDirName,D1
  6286.     JSR LVOCreateDir(A6)
  6287.     MOVE.L  D0,D1
  6288.     JSR LVOUnlock(A6)
  6289. df_skip2
  6290.     BSR SetNormalPtrCol
  6291.     BSR ShowAllRight
  6292.     BSR ClearFileNames
  6293.     MOVE.W  #1,UpdateFreeMem
  6294.     RTS
  6295.  
  6296. df_memerr
  6297.     BSR OutOfMemErr
  6298.     BRA.S   df_skip2
  6299.  
  6300. ClearCylinder
  6301.     MOVE.L  FormatDataPtr,A0
  6302.     MOVE.W  #1407,D0
  6303.     MOVEQ   #0,D1
  6304. ccloop  MOVE.L  D1,(A0)+
  6305.     DBRA    D0,ccloop
  6306.     RTS
  6307.  
  6308.  
  6309. ;---- Clear All Data ----
  6310.  
  6311. ClearAll
  6312.     ADD.L   #1,LaHeTx
  6313.     MOVE.B  DisableAnalyzer,SaveDA
  6314.     MOVE.B  ScopeEnable,SaveScope
  6315.     SF  ScopeEnable
  6316.     LEA PleaseSelectText,A0
  6317.     BSR ShowStatusText
  6318.     BSR StorePtrCol
  6319.     BSR SetWaitPtrCol
  6320.     BSR Wait_4000
  6321.     CMP #1,CurrScreen
  6322.     BNE.S   clbskip
  6323.     TST.B   DisableAnalyzer
  6324.     BNE.S   clbskip
  6325.     ST  DisableAnalyzer
  6326.     BSR ClearAnaHeights
  6327.     BSR ClearRightArea
  6328. clbskip LEA ClearBoxData,A1
  6329.     BSR SwapBoxMem
  6330.     BSR WaitForButtonUp
  6331.     BSR Wait_4000
  6332. clearbuttoncheck
  6333.     BTST    #2,$DFF016
  6334.     BEQ ClrCancel
  6335.     BSR DoKeyBuffer
  6336.     MOVE.B  RawKeyCode,D0
  6337.     CMP.B   #33,D0 ; Pressed S
  6338.     BEQ ClrSamples
  6339.     CMP.B   #24,D0 ; Pressed O
  6340.     BEQ ClrSong
  6341.     CMP.B   #32,D0 ; Pressed A
  6342.     BEQ ClrAll
  6343.     CMP.B   #51,D0 ; Pressed C
  6344.     BEQ ClrCancel
  6345.     CMP.B   #69,D0 ; Pressed Esc
  6346.     BEQ ClrCancel
  6347.     BTST    #6,$BFE001  ; Left Mousebutton
  6348.     BNE.S   clearbuttoncheck
  6349.     MOVEM.W MouseX,D0/D1
  6350.     CMP.W   #166,D0
  6351.     BLO.S   clearbuttoncheck
  6352.     CMP.W   #257,D0
  6353.     BHI.S   clearbuttoncheck
  6354.     CMP.W   #58,D1
  6355.     BLO.S   clearbuttoncheck
  6356.     CMP.W   #84,D1
  6357.     BHI.S   clearbuttoncheck
  6358.     CMP.W   #204,D0
  6359.     BHS.S   samporcancel
  6360.     CMP.W   #198,D0
  6361.     BLS.S   songorall
  6362.     BRA.S   clearbuttoncheck
  6363.  
  6364. songorall
  6365.     CMP.W   #74,D1
  6366.     BHS.S   ClrAll
  6367.     CMP.W   #68,D1
  6368.     BLS ClrSong
  6369.     BRA clearbuttoncheck
  6370.  
  6371. samporcancel
  6372.     CMP.W   #74,D1
  6373.     BHS.S   ClrCancel
  6374.     CMP.W   #68,D1
  6375.     BLS.S   ClrSamples
  6376.     BRA clearbuttoncheck
  6377.  
  6378. RemoveClearBox
  6379.     LEA ClearBoxData,A1
  6380.     BSR SwapBoxMem
  6381.     BSR ShowAllRight
  6382.     BSR ClearAnaHeights
  6383.     MOVE.B  SaveDA,DisableAnalyzer
  6384.     MOVE.B  SaveScope,ScopeEnable
  6385.     BSR RestorePtrCol
  6386.     CLR.B   RawKeyCode
  6387.     RTS
  6388.  
  6389. ClrCancel
  6390.     BSR.S   RemoveClearBox
  6391.     BRA SetErrorPtrCol
  6392.  
  6393. ClrAll  BSR DoClearSong
  6394.     BSR ClrSampleInfo
  6395.     BSR SetNormalPtrCol
  6396.     BSR.S   RemoveClearBox
  6397.     BRA DisplayMainAll
  6398.  
  6399. ClrSamples
  6400.     BSR.S   RemoveClearBox
  6401.     BSR StopIt
  6402.     BSR ClrSampleInfo
  6403.     BSR SetNormalPtrCol
  6404.     SF  EdEnable
  6405.     MOVE.W  #1,InsNum
  6406.     BRA DisplayMainAll
  6407.  
  6408. ClrSong BSR.S   RemoveClearBox
  6409.     BSR DoClearSong
  6410.     BSR SetNormalPtrCol
  6411.     BRA DisplayMainAll
  6412.  
  6413. ClrSampleInfo
  6414.     BSR GiveBackInstrMem
  6415.     MOVE.L  SongDataPtr,A0
  6416.     LEA sd_sampleinfo(A0),A0
  6417.     MOVE.W  #31*30-1,D0
  6418. csiloop CLR.B   (A0)+
  6419.     DBRA    D0,csiloop
  6420.     MOVE.L  SongDataPtr,A1
  6421.     LEA sd_sampleinfo(A1),A1
  6422.     MOVEQ   #30,D0
  6423. caloop2 MOVE.W  #1,28(A1)
  6424.     LEA 30(A1),A1
  6425.     DBRA    D0,caloop2
  6426.     LEA SampleLengthAdd(PC),A3
  6427.     MOVEQ   #31,D0
  6428. csilop2 CLR.W   (A3)+
  6429.     DBRA    D0,csilop2
  6430.     JMP RedrawSample
  6431.  
  6432. DoClearSong
  6433.     BSR StopIt
  6434.     CLR.B   RawKeyCode
  6435.     MOVE.L  SongDataPtr,A0
  6436.     MOVE.L  A0,A1
  6437.     MOVEQ   #19,D0
  6438. docla2x CLR.B   (A0)+
  6439.     DBRA    D0,docla2x
  6440.     MOVE.L  A1,A2
  6441.     ADD.L   #70716,A2
  6442.     ADD.L   #950,A1
  6443.     MOVEQ   #0,D0
  6444. caloop  MOVE.W  D0,(A1)+
  6445.     CMP.L   A1,A2
  6446.     BNE.S   caloop
  6447.     MOVE.L  SongDataPtr,A0
  6448.     MOVE.W  #$017F,sd_numofpatt(A0)
  6449.     MOVE.L  #'M.K.',sd_mahokakt(A0)  ; M.K. all the way...
  6450.     SF  EdEnable
  6451.     CLR.L   CurrPos
  6452.     CLR.L   SongPosition
  6453.     CLR.L   PatternPosition
  6454.     CLR.L   PatternPtr
  6455.     CLR.L   TimerTicks
  6456.     CLR.W   BlockMarkFlag
  6457.     CLR.B   MetroChannel
  6458.     MOVE.W  #1,EditMoveAdd
  6459.     MOVEQ   #0,D0
  6460.     MOVE.W  DefaultSpeed,D0
  6461.     MOVE.L  D0,CurrSpeed
  6462.     MOVE.W  Tempo,RealTempo
  6463.     BSR SetTempo
  6464.     BSR RestoreEffects2
  6465.     BSR RestoreFKeyPos2
  6466.     BSR UnmuteAll
  6467.     MOVE.W  #1,InsNum
  6468.     MOVE.L  #6,CurrSpeed
  6469.     CLR.L   PatternNumber
  6470.     CLR.W   ScrPattPos
  6471.     BSR SetScrPatternPos
  6472.     BRA RedrawPattern
  6473.  
  6474. UnmuteAll
  6475.     MOVE.W  #1,audchan1toggle
  6476.     MOVE.W  #1,audchan2toggle
  6477.     MOVE.W  #1,audchan3toggle
  6478.     MOVE.W  #1,audchan4toggle
  6479.     MOVE.W  #$000F,ActiveChannels
  6480.     BRA RedrawToggles
  6481.  
  6482. ToggleMute
  6483.     CLR.B   RawKeyCode
  6484.     TST.W   ShiftKeyStatus
  6485.     BEQ tomuskp
  6486.     CLR.W   audchan1toggle
  6487.     CLR.W   audchan2toggle
  6488.     CLR.W   audchan3toggle
  6489.     CLR.W   audchan4toggle
  6490. tomuskp MOVEQ   #0,D0
  6491.     MOVE.W  PattCurPos,D0
  6492.     DIVU    #6,D0
  6493.     MULU    #11,D0
  6494.     ADDQ.W  #4,D0
  6495.     BRA DoToggleMute
  6496.  
  6497. RestoreEffects
  6498.     MOVEQ   #0,D0
  6499.     MOVE.W  DefaultSpeed,D0
  6500.     MOVE.L  D0,CurrSpeed
  6501.     MOVE.W  Tempo,RealTempo
  6502.     BSR SetTempo
  6503.     BSR.S   RestoreEffects2
  6504.     CLR.B   RawKeyCode
  6505.     LEA EfxRestoredText(PC),A0
  6506.     BSR ShowStatusText
  6507.     BSR WaitALittle
  6508.     BRA ShowAllRight
  6509.  
  6510. RestoreEffects2
  6511.     LEA audchan1temp,A0
  6512.     BSR.S   reefsub
  6513.     LEA audchan2temp,A0
  6514.     BSR.S   reefsub
  6515.     LEA audchan3temp,A0
  6516.     BSR.S   reefsub
  6517.     LEA audchan4temp,A0
  6518. reefsub CLR.B   n_wavecontrol(A0)
  6519.     CLR.B   n_glissfunk(A0)
  6520.     CLR.B   n_finetune(A0)
  6521.     CLR.B   n_loopcount(A0)
  6522.     RTS
  6523.  
  6524. RestoreFKeyPos
  6525.     CLR.B   RawKeyCode
  6526.     LEA PosRestoredText(PC),A0
  6527.     BSR ShowStatusText
  6528.     BSR WaitALittle
  6529.     BSR ShowAllRight
  6530. RestoreFKeyPos2
  6531.     MOVE.W  #00,F6pos
  6532.     MOVE.W  #16,F7pos
  6533.     MOVE.W  #32,F8pos
  6534.     MOVE.W  #48,F9pos
  6535.     MOVE.W  #63,F10pos
  6536.     RTS
  6537.  
  6538. EfxRestoredText dc.b 'efx restored !',0
  6539. PosRestoredText dc.b 'pos restored !',0
  6540.  
  6541.  
  6542. GiveBackInstrMem
  6543.     MOVEQ   #1,D7
  6544.     MOVE.L  4.W,A6
  6545. gbimloop
  6546.     MOVE.W  D7,D2
  6547.     LSL.W   #2,D2
  6548.     LEA SamplePtrs,A0
  6549.     MOVE.L  0(A0,D2.W),D1
  6550.     BEQ.S   gbimskip
  6551.     MOVE.L  124(A0,D2.W),D0
  6552.     CLR.L   0(A0,D2.W)
  6553.     CLR.L   124(A0,D2.W)
  6554.     MOVE.L  D1,A1
  6555.     JSR LVOFreeMem(A6)
  6556. gbimskip
  6557.     ADDQ.W  #1,D7
  6558.     CMP.W   #32,D7
  6559.     BNE.S   gbimloop
  6560.     MOVE.W  #1,UpdateFreeMem
  6561.     JMP FreeCopyBuf
  6562.  
  6563. ;---- Setup ----
  6564.  
  6565. Setup   CMP.W   #7,LastSetupScreen
  6566.     BEQ Setup2
  6567.     CLR.W   LastSetupScreen
  6568.     BSR WaitForButtonUp
  6569.     MOVE.W  #5,CurrScreen
  6570.     ST  DisableAnalyzer
  6571.     ST  NoSampleInfo
  6572.     BSR Clear100Lines
  6573.     BSR ShowSetupScreen
  6574.     BEQ ExitSetup
  6575. RefreshSetup
  6576.     BSR SetScreenColors
  6577.     BSR Show_MS
  6578.     CMP.W   #5,CurrScreen
  6579.     BNE Return1
  6580.     BSR MarkColor
  6581.     BSR ShowSetupToggles
  6582.     BSR ShowSplit
  6583.     BSR ShowPrintPath
  6584.     BSR ShowKeyRepeat
  6585.     BSR ShowExtCommand
  6586.     BSR ShowMultiSetup
  6587.     BSR ShowConfigNumber
  6588.     BRA ShowAccidental ; Always last (redraws pattern) !
  6589.  
  6590. ShowSetupScreen
  6591.     MOVE.L  SetupMemPtr,D0
  6592.     BNE DecompactSetup
  6593.     BSR.S   SaveMainPic
  6594.     TST.L   SetupMemPtr
  6595.     BEQ Return1
  6596.     BRA DecompactSetup
  6597.  
  6598. SaveMainPic
  6599.     MOVE.L  #8000,D0
  6600.     MOVEQ   #MEMF_PUBLIC,D1
  6601.     MOVE.L  4.W,A6
  6602.     JSR LVOAllocMem(A6)
  6603.     MOVE.L  D0,SetupMemPtr
  6604.     BEQ OutOfMemErr
  6605.     MOVE.L  D0,A1
  6606.     LEA BitplaneData,A0
  6607.     MOVEQ   #1,D2
  6608. sssloop1
  6609.     MOVE.W  #999,D0
  6610. sssloop2
  6611.     MOVE.L  (A0)+,(A1)+
  6612.     DBRA    D0,sssloop2
  6613.     LEA 6240(A0),A0
  6614.     DBRA    D2,sssloop1
  6615.     RTS
  6616.  
  6617. RestoreMainPic
  6618.     MOVE.L  SetupMemPtr,D0
  6619.     BEQ Return1
  6620.     MOVE.L  D0,A1
  6621.     LEA BitplaneData,A0
  6622.     MOVEQ   #1,D2
  6623. ssxloop1
  6624.     MOVE.W  #999,D0
  6625. ssxloop2
  6626.     MOVE.L  (A1)+,(A0)+
  6627.     DBRA    D0,ssxloop2
  6628.     LEA 6240(A0),A0
  6629.     DBRA    D2,ssxloop1
  6630.     MOVE.L  SetupMemPtr,A1
  6631.     CLR.L   SetupMemPtr
  6632.     MOVE.L  #8000,D0
  6633.     MOVE.L  4.W,A6
  6634.     JSR LVOFreeMem(A6)
  6635.     RTS
  6636.  
  6637. SetupMemPtr dc.l 0
  6638.  
  6639. DecompactSetup2
  6640.     LEA Setup2Data+4,A0
  6641.     MOVE.L  #Setup2Size-4-8,D0
  6642.     BRA.S   decoset
  6643.  
  6644. DecompactSetup
  6645.     LEA SetupScreenData+4,A0
  6646.     MOVE.L  #SetupScreenSize-4-8,D0
  6647. decoset LEA BitplaneData,A1
  6648.     MOVE.L  A1,A2
  6649.     LEA 4000(A2),A2
  6650. dcsloop MOVE.B  (A0)+,D1
  6651.     CMP.B   #181,D1
  6652.     BEQ.S   DecodeIt2
  6653.     MOVE.B  D1,(A1)+
  6654.     CMP.L   A2,A1
  6655.     BLO.S   dcslop2
  6656.     LEA 6240(A1),A1
  6657.     MOVE.L  #$FFFFFFFF,A2
  6658. dcslop2 SUBQ.L  #1,D0
  6659.     CMP.L   #0,D0
  6660.     BGT.S   dcsloop
  6661.     MOVEQ   #-1,D0
  6662.     RTS
  6663.  
  6664. DecodeIt2
  6665.     MOVEQ   #0,D1
  6666.     MOVE.B  (A0)+,D1
  6667.     MOVE.B  (A0)+,D2
  6668. dcdlop2 MOVE.B  D2,(A1)+
  6669.     CMP.L   A2,A1
  6670.     BLO.S   dcdskp2
  6671.     LEA 6240(A1),A1
  6672.     MOVE.L  #$FFFFFFFF,A2
  6673. dcdskp2 DBRA    D1,dcdlop2
  6674.     SUBQ.L  #2,D0
  6675.     BRA.S   dcslop2
  6676.  
  6677. ; Gadgets
  6678.  
  6679. CheckSetupGadgs
  6680.     TST.L   SplitAddress
  6681.     BEQ.S   csgskip
  6682.     CLR.L   SplitAddress
  6683.     BSR ShowSplit
  6684. csgskip MOVEM.W MouseX2,D0/D1
  6685.     CMP.W   #210,D0
  6686.     BHS SetupMenu3
  6687.     CMP.W   #108,D0
  6688.     BHS.S   SetupMenu2
  6689. ;---- Menu 1 ----
  6690.     CMP.W   #11,D1
  6691.     BLS LoadConfig
  6692.     CMP.W   #22,D1
  6693.     BLS SaveConfig
  6694.     CMP.W   #33,D1
  6695.     BLS ResetAll
  6696.     CMP.W   #44,D1
  6697.     BLS ExtCommand
  6698.     CMP.W   #55,D1
  6699.     BLS MultiSetup
  6700.     CMP.W   #66,D1
  6701.     BLS SetRed
  6702.     CMP.W   #77,D1
  6703.     BLS SetGreen
  6704.     CMP.W   #88,D1
  6705.     BLS SetBlue
  6706.     CMP.W   #99,D1
  6707.     BLS ColorGadgets
  6708.     RTS
  6709.  
  6710. SetupMenu2
  6711.     CMP.W   #11,D1
  6712.     BLS Return1
  6713.     CMP.W   #55,D1
  6714.     BLS SetSplit
  6715.     CMP.W   #66,D1
  6716.     BLS SetKeyRepeat
  6717.     CMP.W   #77,D1
  6718.     BLS ToggleAccidental
  6719.     CMP.W   #88,D1
  6720.     BLS PrintSong
  6721.     CMP.W   #99,D1
  6722.     BLS EnterPrintPath
  6723.     RTS
  6724.  
  6725. SetupMenu3
  6726.     CMP.W   #11,D1
  6727.     BLS.S   ExitOrClear
  6728.     CMP.W   #22,D1
  6729.     BLS ToggleSplit
  6730.     CMP.W   #33,D1
  6731.     BLS ToggleFilter
  6732.     CMP.W   #44,D1
  6733.     BLS ToggleTransDel
  6734.     CMP.W   #55,D1
  6735.     BLS ToggleShowDec
  6736.     CMP.W   #66,D1
  6737.     BLS ToggleAutoDir
  6738.     CMP.W   #77,D1
  6739.     BLS ToggleAutoExit
  6740.     CMP.W   #88,D1
  6741.     BLS ToggleModOnly
  6742.     CMP.W   #99,D1
  6743.     BLS ToggleMIDI
  6744.     RTS
  6745.  
  6746. ExitOrClear
  6747.     CMP.W   #265,D0
  6748.     BLS ClearSplit
  6749.     CMP.W   #306,D0
  6750.     BHS Setup2
  6751. ExitSetup
  6752.     BSR WaitForButtonUp
  6753.     MOVE.W  CurrScreen,LastSetupScreen
  6754.     CLR.B   RawKeyCode
  6755.     CLR.L   SplitAddress
  6756.     BSR RestoreMainPic
  6757.     SF  NoSampleInfo
  6758.     BSR SetupVUCols
  6759.     BSR SetupAnaCols
  6760.     BSR Clear100Lines
  6761.     BRA DisplayMainAll
  6762.  
  6763. LastSetupScreen dc.w 0
  6764.  
  6765. ToggleSplit
  6766.     EOR.B   #1,SplitFlag
  6767.     BRA ShowSetupToggles
  6768.  
  6769. ToggleFilter
  6770.     BCHG    #1,$BFE001
  6771.     BRA ShowSetupToggles
  6772.  
  6773. ToggleTransDel
  6774.     EOR.B   #1,TransDelFlag
  6775.     BRA.S   ShowSetupToggles
  6776.  
  6777. ToggleShowDec
  6778.     EOR.B   #1,ShowDecFlag
  6779.     MOVE.W  #1,UpdateFreeMem
  6780.     BRA.S   ShowSetupToggles
  6781.  
  6782. ToggleAutoDir
  6783.     EOR.B   #1,AutoDirFlag
  6784.     BRA.S   ShowSetupToggles
  6785.  
  6786. ToggleAutoExit
  6787.     EOR.B   #1,AutoExitFlag
  6788.     BRA.S   ShowSetupToggles
  6789.  
  6790. ToggleModOnly
  6791.     EOR.B   #1,ModOnlyFlag
  6792.     LEA FileNamesPtr(PC),A0
  6793.     CLR.L   4(A0)
  6794.     BRA.S   ShowSetupToggles
  6795.  
  6796. ToggleMIDI
  6797.     EOR.B   #1,MIDIFlag
  6798.     BSR.S   ShowSetupToggles
  6799. tstmidi TST.B   MIDIFlag
  6800.     BNE OpenMIDI
  6801.     BRA CloseMIDI
  6802.  
  6803. ClearSplit
  6804.     BSR WaitForButtonUp
  6805.     LEA ClearSplitText,A0
  6806.     BSR AreYouSure
  6807.     BNE Return1
  6808.     LEA SplitData,A0
  6809.     MOVEQ   #15,D0
  6810. clsploop
  6811.     CLR.B   (A0)+
  6812.     DBRA    D0,clsploop
  6813.     BRA ShowSplit
  6814.  
  6815. ShowSetupToggles
  6816.     CLR.B   RawKeyCode
  6817.     BSR Show_MS
  6818.     CMP.W   #5,CurrScreen
  6819.     BNE Return1
  6820.     MOVE.B  $BFE001,D0
  6821.     LSR.B   #1,D0
  6822.     AND.B   #1,D0
  6823.     EOR.B   #1,D0
  6824.     MOVE.B  D0,FilterFlag
  6825.     LEA SplitFlag,A4
  6826.     MOVE.W  #3,TextLength
  6827.     MOVEQ   #7,D7
  6828.     MOVE.W  #636,D6
  6829. sstloop
  6830.     MOVE.W  D6,TextOffset
  6831.     LEA ToggleOFFText(PC),A0
  6832.     TST.B   (A4)+
  6833.     BEQ.S   sstskip
  6834.     LEA ToggleONText(PC),A0
  6835. sstskip
  6836.     BSR ShowText2
  6837.     ADD.W   #440,D6
  6838.     DBRA    D7,sstloop
  6839.     BRA WaitForButtonUp
  6840.  
  6841. ToggleONText2   dc.b ' '
  6842. ToggleONText    dc.b 'on '
  6843. ToggleOFFText   dc.b 'off '
  6844.  
  6845. ShowSplit
  6846.     BSR CalculateSplit
  6847.     CMP.W   #5,CurrScreen
  6848.     BNE Return1
  6849.     LEA SplitData,A3
  6850.     MOVE.L  NoteNamesPtr,A4
  6851.     MOVEQ   #0,D5
  6852.     MOVE.W  #614,D6
  6853.     CLR.W   WordNumber
  6854. shsploop
  6855.     MOVE.W  D6,TextOffset
  6856.     MOVE.B  (A3,D5.W),WordNumber+1 ; instr
  6857.     BSR PrintHexByte
  6858.     ADDQ.W  #4,D6
  6859.     MOVE.W  D6,D1
  6860.     MOVEQ   #0,D0
  6861.     MOVE.B  1(A3,D5.W),D0 ; note
  6862.     LSL.W   #2,D0
  6863.     LEA (A4,D0.W),A0
  6864.     MOVEQ   #4,D0
  6865.     BSR ShowText3
  6866.     ADDQ.L  #5,D6
  6867.     MOVE.W  D6,D1
  6868.     MOVEQ   #0,D0
  6869.     MOVE.B  2(A3,D5.W),D0 ; trans
  6870.     LSL.W   #2,D0
  6871.     LEA (A4,D0.W),A0
  6872.     MOVEQ   #4,D0
  6873.     BSR ShowText3
  6874.     ADD.W   #431,D6
  6875.     ADDQ.W  #4,D5
  6876.     CMP.W   #16,D5
  6877.     BNE.S   shsploop
  6878.     RTS
  6879.  
  6880. CalculateSplit
  6881.     LEA SplitTransTable,A0
  6882.     LEA SplitInstrTable,A1
  6883.     LEA SplitData,A2
  6884.     MOVEQ   #0,D0
  6885. casploop
  6886.     MOVE.B  D0,(A0,D0.W)
  6887.     CLR.B   (A1,D0.W)
  6888.     ADDQ.W  #1,D0
  6889.     CMP.W   #37,D0
  6890.     BLS.S   casploop
  6891.  
  6892.     MOVE.B  1(A2),-(SP)
  6893.     MOVE.B  1+4(A2),-(SP)
  6894.     MOVE.B  1+8(A2),-(SP)
  6895.     MOVE.B  1+12(A2),-(SP) ; note
  6896.  
  6897.     MOVEQ   #3,D4
  6898. caspbigloop
  6899.     MOVEQ   #127,D0
  6900.     MOVEQ   #0,D1
  6901.     MOVEQ   #0,D2
  6902. casploop2
  6903.     CMP.B   1(A2,D1.W),D0 ; note
  6904.     BLS.S   caspskip
  6905.     MOVE.L  D1,D2
  6906.     MOVE.B  1(A2,D1.W),D0 ; note
  6907. caspskip
  6908.     ADDQ.W  #4,D1
  6909.     CMP.W   #16,D1
  6910.     BNE.S   casploop2
  6911.  
  6912.     MOVEQ   #0,D0
  6913.     MOVE.B  1(A2,D2.W),D0 ; note
  6914.     MOVE.B  #127,1(A2,D2.W) ; note
  6915.     MOVE.B  2(A2,D2.W),D1 ; trans
  6916. casploop3
  6917.     MOVE.B  D1,(A0,D0.W)
  6918.     MOVE.B  (A2,D2.W),(A1,D0.W) ; instr
  6919.     ADDQ.W  #1,D1
  6920.     CMP.W   #36,D1
  6921.     BLO.S   caspskip2
  6922.     MOVEQ   #35,D1
  6923. caspskip2
  6924.     ADDQ.W  #1,D0
  6925.     CMP.W   #36,D0
  6926.     BLO.S   casploop3
  6927.     DBRA    D4,caspbigloop
  6928.    
  6929.     MOVE.B  (SP)+,1+12(A2)
  6930.     MOVE.B  (SP)+,1+8(A2)
  6931.     MOVE.B  (SP)+,1+4(A2)
  6932.     MOVE.B  (SP)+,1(A2) ; note
  6933.     RTS
  6934.  
  6935. SetSplit
  6936.     LEA SplitData,A2
  6937.     SUBQ.W  #1,D1
  6938.     DIVU    #11,D1
  6939.     SUBQ.W  #1,D1
  6940.     MOVE.W  D1,D7
  6941.     LSL.W   #2,D7
  6942.     MULU    #440,D1
  6943.     ADD.W   #600,D1
  6944.     CMP.W   #176,D0
  6945.     BHS.S   SetSplitTranspose
  6946.     CMP.W   #136,D0
  6947.     BHS.S   SetSplitNote
  6948.     ADD.W   #14,D1
  6949.     MOVE.W  D1,TextOffset
  6950.     BSR GetHexByte
  6951.     CMP.B   #$1F,D0
  6952.     BLS.S   setskip
  6953.     MOVE.B  #$1F,D0
  6954. setskip MOVE.B  D0,(A2,D7.W) ; instr
  6955.     BRA ShowSplit
  6956.  
  6957. SetSplitNote
  6958.     MOVE.L  D1,-(SP)
  6959.     BSR ShowSplit
  6960.     MOVE.L  (SP)+,D1
  6961.     ADD.W   #18,D1
  6962.     MOVEQ   #3,D0
  6963.     LEA SpcNoteText,A0
  6964.     BSR ShowText3
  6965.     LEA 1(A2,D7.W),A0 ; note
  6966.     MOVE.L  A0,SplitAddress
  6967.     BRA WaitForButtonUp
  6968.  
  6969. SetSplitTranspose
  6970.     MOVE.L  D1,-(SP)
  6971.     BSR ShowSplit
  6972.     MOVE.L  (SP)+,D1
  6973.     ADD.W   #23,D1
  6974.     MOVEQ   #3,D0
  6975.     LEA SpcNoteText,A0
  6976.     BSR ShowText3
  6977.     LEA 2(A2,D7.W),A0 ; trans
  6978.     MOVE.L  A0,SplitAddress
  6979.     BRA WaitForButtonUp
  6980.  
  6981. SetKeyRepeat
  6982.     CMP.W   #188,D0
  6983.     BHS.S   skrep2
  6984.     MOVE.W  #2381,TextOffset
  6985.     BSR GetHexByte
  6986.     MOVE.B  D0,KeyRepDelay+1
  6987.     BRA.S   ShowKeyRepeat
  6988. skrep2  MOVE.W  #2384,TextOffset
  6989.     BSR GetHexByte
  6990.     MOVE.B  D0,KeyRepSpeed+1
  6991. ShowKeyRepeat
  6992.     MOVE.W  #2381,TextOffset
  6993.     MOVE.W  KeyRepDelay,WordNumber
  6994.     BSR PrintHexByte
  6995.     ADDQ.W  #1,TextOffset
  6996.     MOVE.W  KeyRepSpeed,WordNumber
  6997.     BRA PrintHexByte
  6998.  
  6999. ToggleAccidental
  7000.     MOVE.L  #NoteNames1,NoteNamesPtr
  7001.     EOR.B   #1,Accidental
  7002.     BEQ.S   ShowAccidental
  7003.     MOVE.L  #NoteNames2,NoteNamesPtr
  7004. ShowAccidental
  7005.     LEA AccidentalText(PC),A0
  7006.     TST.B   Accidental
  7007.     BEQ.S   shacskp
  7008.     LEA AccidentalText+1(PC),A0
  7009. shacskp MOVEQ   #1,D0
  7010.     MOVE.W  #2824,D1
  7011.     BSR ShowText3
  7012.     BRA RedrawPattern
  7013.  
  7014. AccidentalText  dc.b '#¡'
  7015.  
  7016. LoadConfig
  7017.     CMP.W   #84,D0
  7018.     BHS SetConfigNumber
  7019.     LEA LoadConfigText,A0
  7020.     BSR AreYouSure
  7021.     BNE Return1
  7022.     BSR WaitForButtonUp
  7023.     LEA LoadingCfgText(PC),A0
  7024.     BSR ShowStatusText
  7025. DoLoadConfig
  7026.     BSR StorePtrCol
  7027.     BSR PutConfigNumber
  7028.     MOVE.L  #Configname,D1
  7029.     MOVE.L  #1005,D2
  7030.     MOVE.L  DOSbase,A6
  7031.     JSR LVOOpen(A6)
  7032.     MOVE.L  D0,D7
  7033.     BNE.S   cfgopok
  7034.     LEA PTPath,A0
  7035.     BSR CopyPath
  7036.     LEA ConfigName(PC),A0
  7037.     MOVEQ   #12,D0
  7038. cfgnlop MOVE.B  (A0)+,(A1)+
  7039.     DBRA    D0,cfgnlop
  7040.     MOVE.L  #FileName,D1
  7041.     MOVE.L  #1005,D2
  7042.     MOVE.L  DOSbase,A6
  7043.     JSR LVOOpen(A6)
  7044.     MOVE.L  D0,D7
  7045.     BEQ.S   ConfigErr
  7046. cfgopok BSR SetDiskPtrCol
  7047.     MOVE.L  D7,D1
  7048.     CLR.L   ConfigID
  7049.     MOVE.L  #ConfigID,D2
  7050.     MOVE.L  #4,D3
  7051.     JSR LVORead(A6)
  7052.     CMP.L   #"PT2.",ConfigID
  7053.     BNE.S   cfgerr2
  7054.     LEA SetupData+4,A0
  7055.     MOVE.L  D7,D1
  7056.     MOVE.L  A0,D2
  7057.     MOVE.L  #ConfigFileSize-4,D3
  7058.     JSR LVORead(A6)
  7059. lcfgend MOVE.L  D7,D1
  7060.     JSR LVOClose(A6)
  7061.     BSR ShowAllRight
  7062.     BSR RestorePtrCol
  7063.     BSR CopyCfgData
  7064.     BSR tstmidi
  7065.     BSR ChangeCopList
  7066.     BRA RefreshSetup
  7067.  
  7068. ConfigErr
  7069.     BSET    #2,InitError
  7070.     LEA FileNotFoundText(PC),A0
  7071. cferr   BSR ShowStatusText
  7072.     MOVE.W  #50,WaitTime
  7073.     BRA ErrorRestoreCol
  7074.  
  7075. cfgerr2 BSR.S   ConfigErr2
  7076.     BRA.S   lcfgend
  7077.  
  7078. ConfigErr2
  7079.     BSET    #3,InitError
  7080.     LEA NotAConfFileText(PC),A0
  7081.     BRA.S   cferr
  7082.  
  7083. ConfigErr3
  7084.     LEA CantCreateFiText(PC),A0
  7085.     BRA.S   cferr
  7086.  
  7087. FileNotFoundText dc.b "config not found!",0
  7088. NotAConfFileText dc.b "not a config file",0
  7089. CantCreateFiText dc.b "can't create file",0
  7090.  
  7091. SaveConfig
  7092.     CMP.W   #84,D0
  7093.     BHS SetConfigNumber
  7094.     LEA SaveConfigText,A0
  7095.     BSR AreYouSure
  7096.     BNE Return1
  7097.     BSR StorePtrCol
  7098.     BSR SetDiskPtrCol
  7099.     BSR PutConfigNumber
  7100.     LEA SavingCfgText(PC),A0
  7101.     BSR ShowStatusText
  7102.     MOVE.L  DOSbase,A6
  7103.     LEA PTPath,A0
  7104.     BSR CopyPath
  7105.     LEA ConfigName(PC),A0
  7106.     MOVEQ   #12,D0
  7107. cfgllop MOVE.B  (A0)+,(A1)+
  7108.     DBRA    D0,cfgllop
  7109.     MOVE.L  #FileName,D1
  7110.     MOVE.L  #1006,D2
  7111.     JSR LVOOpen(A6)
  7112.     MOVE.L  D0,D7
  7113.     BEQ ConfigErr3
  7114.     MOVE.L  D0,D1
  7115.     MOVE.L  #SetupData,D2
  7116.     MOVE.W  #ConfigFileSize,D3
  7117.     JSR LVOWrite(A6)
  7118.     MOVE.L  D7,D1
  7119.     JSR LVOClose(A6)
  7120.     BSR ShowAllRight
  7121.     BRA RestorePtrCol
  7122.  
  7123. SetConfigNumber
  7124.     MOVE.W  #611,TextOffset
  7125.     BSR GetHexByte
  7126.     MOVE.W  D0,ConfigNumber
  7127. ShowConfigNumber
  7128.     MOVE.W  #611,TextOffset
  7129.     MOVE.W  ConfigNumber(PC),WordNumber
  7130.     BRA PrintHexByte
  7131.  
  7132. PutConfigNumber
  7133.     MOVE.W  ConfigNumber(PC),D0
  7134.     LEA ConfigName+12(PC),A0
  7135.     BRA IntToHex2
  7136.  
  7137. ConfigName  dc.b 'PT.config-00',0,0
  7138. ConfigNumber    dc.w 0
  7139. LoadingCfgText  dc.b 'loading config',0
  7140. SavingCfgText   dc.b 'saving config',0,0
  7141. ConfigID    dc.l 0
  7142.  
  7143. ResetAll
  7144.     LEA ResetAllText,A0
  7145.     BSR AreYouSure
  7146.     BNE Return1
  7147. DoResetAll
  7148.     LEA DefaultSetupData,A0
  7149.     LEA SetupData,A1
  7150.     MOVE.W  #ConfigFileSize-1,D0
  7151. rsaloop MOVE.B  (A0)+,(A1)+
  7152.     DBRA    D0,rsaloop
  7153.     BRA RefreshSetup
  7154.  
  7155. ExtCommand
  7156.     CMP.W   #11,D0
  7157.     BLO.S   excolab
  7158.     BSR StorePtrCol
  7159.     BSR SetWaitPtrCol
  7160.     LEA ExtCommands,A6
  7161.     MOVE.W  ExtCmdNumber,D1
  7162.     MULU    #32,D1
  7163.     ADD.L   D1,A6
  7164.     MOVE.L  A6,ShowTextPtr
  7165.     MOVE.L  A6,TextEndPtr
  7166.     ADD.L   #31,TextEndPtr
  7167.     MOVE.W  #11,TextLength
  7168.     MOVE.W  #1482,A4
  7169.     BSR GetTextLine
  7170.     BRA RestorePtrCol
  7171.  
  7172. ShowExtCommand
  7173.     LEA ExtCommands,A0
  7174.     MOVE.W  ExtCmdNumber,D1
  7175.     MULU    #32,D1
  7176.     ADD.L   D1,A0
  7177.     MOVEQ   #11,D0
  7178.     MOVE.W  #1482,D1
  7179.     BRA ShowText3
  7180.  
  7181. excolab BTST    #2,$DFF016
  7182.     BEQ.S   excorun
  7183.     ADDQ.W  #1,ExtCmdNumber
  7184.     AND.W   #7,ExtCmdNumber
  7185.     BSR.S   ShowExtCommand
  7186.     BSR Wait_4000
  7187.     BSR Wait_4000
  7188.     BSR Wait_4000
  7189.     BRA Wait_4000
  7190.  
  7191. excorun LEA ExtCommands,A0
  7192.     MOVE.W  ExtCmdNumber,D1
  7193.     MULU    #32,D1
  7194.     ADD.L   D1,A0
  7195.     TST.B   (A0)
  7196.     BEQ Return1
  7197.     MOVE.L  A0,ExtCmdAddress
  7198.     MOVE.L  IntuitionBase,A6
  7199.     JSR LVOOpenWorkbench(A6)
  7200.     JSR LVOWBenchToFront(A6)
  7201.     MOVE.L  #ExtCmdConsole,D1
  7202.     MOVE.L  #1005,D2
  7203.     MOVE.L  DOSBase,A6
  7204.     JSR LVOOpen(A6)
  7205.     MOVE.L  D0,ExtCmdWindow
  7206.     BEQ.S   winderr
  7207.     LSL.L   #2,D0
  7208.     MOVE.L  D0,A0
  7209.     MOVE.L  PTProcess,A1
  7210.     MOVE.L  8(A0),$A4(A1)
  7211.     BSR GotoCLI
  7212.     MOVE.L  ExtCmdWindow,D1
  7213.     BEQ Return1
  7214.     MOVE.L  DOSBase,A6
  7215.     JSR LVOClose(A6)
  7216.     CLR.L   ExtCmdWindow
  7217.     RTS
  7218.  
  7219. winderr LEA ConsoleErrText,A0
  7220.     BSR ShowStatusText
  7221.     BRA SetErrorPtrCol
  7222.  
  7223. ExtCmdNumber    dc.w 0
  7224. ExtCmdAddress   dc.l 0
  7225. ExtCmdWindow    dc.l 0
  7226. ExtCmdConsole   dc.b "CON:0/0/640/150/Protracker Output Window",0
  7227. ConsoleErrText  dc.b "Can't open window",0,0
  7228.  
  7229. MultiSetup
  7230.     CMP.W   #44,D0
  7231.     BLO Return1
  7232.     BSR StorePtrCol
  7233.     BSR SetWaitPtrCol
  7234.     MOVE.W  #1,GetLineFlag
  7235.     SUB.W   #44,D0
  7236.     LSR.W   #4,D0
  7237.     MOVE.B  D0,musepos
  7238. museset MOVEQ   #0,D0
  7239.     MOVE.B  musepos,D0
  7240.     MOVE.L  D0,D1
  7241.     LSL.W   #4,D1
  7242.     MOVE.W  #52,LineCurX
  7243.     MOVE.W  #53,LineCurY
  7244.     ADD.W   D1,LineCurX
  7245.     LEA MultiModeNext,A1
  7246.     LEA (A1,D0.W),A1
  7247.     BSR UpdateLineCurPos
  7248. muselop BSR GetHexKey
  7249.     TST.B   D1
  7250.     BEQ.S   musenul
  7251.     CMP.B   #4,D1
  7252.     BHI.S   muselop
  7253.     MOVE.B  D1,(A1)
  7254.     BSR ShowMultiSetup
  7255.     MOVEQ   #1,D0
  7256. musenul TST.B   D0
  7257.     BEQ.S   museabo
  7258.     ADD.B   D0,musepos
  7259.     AND.B   #3,musepos
  7260.     BSR Wait_4000
  7261.     BSR Wait_4000
  7262.     BSR Wait_4000
  7263.     BRA.S   museset
  7264.  
  7265. museabo BSR RestorePtrCol
  7266.     CLR.W   GetLineFlag
  7267.     MOVE.W  #0,LineCurX
  7268.     MOVE.W  #270,LineCurY
  7269.     BSR UpdateLineCurPos
  7270. ShowMultiSetup
  7271.     MOVE.W  #1926,TextOffset
  7272.     MOVE.B  MultiModeNext,D0
  7273.     BSR PrintHexDigit
  7274.     MOVE.W  #1928,TextOffset
  7275.     MOVE.B  MultiModeNext+1,D0
  7276.     BSR PrintHexDigit
  7277.     MOVE.W  #1930,TextOffset
  7278.     MOVE.B  MultiModeNext+2,D0
  7279.     BSR PrintHexDigit
  7280.     MOVE.W  #1932,TextOffset
  7281.     MOVE.B  MultiModeNext+3,D0
  7282.     BRA PrintHexDigit
  7283.  
  7284. musepos dc.b 0,0
  7285.  
  7286. SetRed  CMP.W   #82,D0
  7287.     BHS SelectColor
  7288. setr2   BSR GetColPos
  7289.     AND.W   #$0F00,D2
  7290.     LSR.W   #8,D2
  7291.     CMP.B   D2,D0
  7292.     BEQ.S   setrskp
  7293.     AND.W   #$00FF,D1
  7294.     LSL.W   #8,D0
  7295.     OR.W    D0,D1
  7296.     MOVE.W  D1,(A0)
  7297.     BSR ShowColSliders
  7298.     BSR SetScreenColors
  7299. setrskp BTST    #6,$BFE001
  7300.     BEQ.S   setr2
  7301.     RTS
  7302.  
  7303. SetGreen
  7304.     CMP.W   #82,D0
  7305.     BHS SelectColor
  7306. setg2   BSR.S   GetColPos
  7307.     AND.W   #$00F0,D2
  7308.     LSR.W   #4,D2
  7309.     CMP.B   D2,D0
  7310.     BEQ.S   setgskp
  7311.     AND.W   #$0F0F,D1
  7312.     LSL.W   #4,D0
  7313.     OR.W    D0,D1
  7314.     MOVE.W  D1,(A0)
  7315.     BSR ShowColSliders
  7316.     BSR SetScreenColors
  7317. setgskp BTST    #6,$BFE001
  7318.     BEQ.S   setg2
  7319.     RTS
  7320.  
  7321. SetBlue CMP.W   #82,D0
  7322.     BHS SelectColor
  7323. setb2   BSR.S   GetColPos
  7324.     AND.W   #$000F,D2
  7325.     CMP.B   D2,D0
  7326.     BEQ.S   setbskp
  7327.     AND.W   #$0FF0,D1
  7328.     OR.W    D0,D1
  7329.     MOVE.W  D1,(A0)
  7330.     BSR ShowColSliders
  7331.     BSR SetScreenColors
  7332. setbskp BTST    #6,$BFE001
  7333.     BEQ.S   setb2
  7334.     RTS
  7335.  
  7336. GetColPos
  7337.     MOVEQ   #0,D0
  7338.     MOVE.W  MouseX,D0
  7339.     CMP.W   #26,D0
  7340.     BHS.S   gcpskp2
  7341.     MOVEQ   #0,D0
  7342.     BRA.S   gcpskip
  7343. gcpskp2 SUB.W   #26,D0
  7344.     DIVU    #3,D0
  7345.     AND.L   #$FF,D0
  7346.     CMP.W   #15,D0
  7347.     BLS.S   gcpskip
  7348.     MOVEQ   #15,D0
  7349. gcpskip CMP.W   #7,CurrScreen
  7350.     BEQ GetColAddr
  7351.     LEA ColorTable,A0
  7352.     MOVE.W  CurrColor,D1
  7353.     ADD.W   D1,D1
  7354.     LEA (A0,D1.W),A0
  7355.     MOVE.W  (A0),D1
  7356.     MOVE.W  D1,D2
  7357.     RTS
  7358.  
  7359. ShowColSliders
  7360.     LEA ColSliders(PC),A2
  7361.     MOVE.L  TextBplPtr,A1
  7362.     ADD.L   #3282,A1
  7363.     BSR.S   gcpskip
  7364.     AND.W   #$000F,D1
  7365.     BSR.S   ShowOneSlider
  7366.     MOVE.L  TextBplPtr,A1
  7367.     ADD.L   #2842,A1
  7368.     BSR.S   gcpskip
  7369.     AND.W   #$00F0,D1
  7370.     LSR.W   #4,D1
  7371.     BSR.S   ShowOneSlider
  7372.     MOVE.L  TextBplPtr,A1
  7373.     ADD.L   #2402,A1
  7374.     BSR.S   gcpskip
  7375.     AND.W   #$0F00,D1
  7376.     LSR.W   #8,D1
  7377. ShowOneSlider
  7378.     CLR.L   (A1)
  7379.     CLR.L   4(A1)
  7380.     CLR.L   40(A1)
  7381.     CLR.L   44(A1)
  7382.     CLR.L   80(A1)
  7383.     CLR.L   84(A1)
  7384.     MOVE.W  D1,D3
  7385.     ADD.W   D3,D3
  7386.     ADD.W   D3,D3
  7387.     MOVE.W  2(A2,D3.W),D4
  7388.     MOVE.B  0(A2,D3.W),00(A1,D4.W)
  7389.     MOVE.B  1(A2,D3.W),01(A1,D4.W)
  7390.     MOVE.B  0(A2,D3.W),40(A1,D4.W)
  7391.     MOVE.B  1(A2,D3.W),41(A1,D4.W)
  7392.     MOVE.B  0(A2,D3.W),80(A1,D4.W)
  7393.     MOVE.B  1(A2,D3.W),81(A1,D4.W)
  7394.     RTS
  7395.  
  7396. ColSliders
  7397.     dc.w %0000000001111100,0
  7398.     dc.w %0000111110000000,1
  7399.     dc.w %0000000111110000,1
  7400.     dc.w %0000000000111110,1
  7401.     dc.w %0000011111000000,2
  7402.     dc.w %0000000011111000,2
  7403.     dc.w %0000000000011111,2
  7404.     dc.w %0000001111100000,3
  7405.     dc.w %0000000001111100,3
  7406.     dc.w %0000111110000000,4
  7407.     dc.w %0000000111110000,4
  7408.     dc.w %0000000000111110,4
  7409.     dc.w %0000011111000000,5
  7410.     dc.w %0000000011111000,5
  7411.     dc.w %0000000000011111,5
  7412.     dc.w %0000001111100000,6
  7413.  
  7414. SelectColor
  7415.     CMP.W   #84,D1
  7416.     BHS Return1
  7417.     MOVE.L  TextBplPtr,A0
  7418.     LEA 2410(A0),A0
  7419.     MOVEQ   #24,D2
  7420. slcloop CLR.L   (A0)
  7421.     LEA 40(A0),A0
  7422.     DBRA    D2,slcloop
  7423.  
  7424.     SUB.W   #82,D0
  7425.     DIVU    #13,D0
  7426.     SUB.W   #60,D1
  7427.     DIVU    #6,D1
  7428.     MOVE.W  D0,D2
  7429.     LSL.W   #2,D2
  7430.     ADD.W   D1,D2
  7431.     MOVE.W  D2,CurrColor
  7432. MarkColor
  7433.     BSR gcpskip
  7434.     MOVE.L  A0,UndoColAddr
  7435.     MOVE.W  D1,UndoCol
  7436.     BSR ShowColSliders
  7437.     BSR.S   BlockColors
  7438.     MOVE.W  CurrColor,D0
  7439.     MOVE.W  D0,D1
  7440.     AND.W   #$0003,D1
  7441.     MULU    #6*40,D1
  7442.     MOVE.L  TextBplPtr,A0
  7443.     ADD.L   D1,A0
  7444.     LEA 2410(A0),A0
  7445.     BTST    #2,D0
  7446.     BNE.S   slcskip
  7447.     MOVE.W  #$3FF0,(A0)
  7448.     MOVE.W  #$3FF0,240(A0)
  7449.     MOVEQ   #4,D0
  7450. slclop2 LEA 40(A0),A0
  7451.     MOVE.W  #$2010,(A0)
  7452.     DBRA    D0,slclop2
  7453.     BRA WaitForButtonUp
  7454.  
  7455. slcskip MOVE.L  #$0001FF80,(A0)
  7456.     MOVE.L  #$0001FF80,240(A0)
  7457.     MOVEQ   #4,D0
  7458. slclop3 LEA 40(A0),A0
  7459.     MOVE.L  #$0001FF80,(A0)
  7460.     DBRA    D0,slclop3
  7461.     BRA WaitForButtonUp
  7462.  
  7463. BlockColors
  7464.     MOVE.L  TextBplPtr,A0
  7465.     LEA 2452(A0),A0
  7466.     MOVEQ   #3,D1
  7467. suploop2
  7468.     MOVEQ   #4,D0
  7469. suploop3
  7470.     MOVE.B  #$FF,(A0)
  7471.     ADD.L   #40,A0
  7472.     DBRA    D0,suploop3
  7473.     ADD.L   #40,A0
  7474.     DBRA    D1,suploop2
  7475.     RTS
  7476.  
  7477. ColorGadgets
  7478.     CMP.W   #79,D0
  7479.     BHS SetDefaultCol
  7480.     CMP.W   #33,D0
  7481.     BHS.S   CancelCol
  7482.     MOVE.L  UndoColAddr,A0
  7483.     MOVE.W  UndoCol,D0
  7484.     MOVE.W  (A0),UndoCol
  7485.     MOVE.W  D0,(A0)
  7486.     BSR ShowColSliders
  7487.     BRA SetScreenColors
  7488.  
  7489. CancelCol
  7490.     LEA CanCols(PC),A0
  7491.     LEA ColorTable,A1
  7492.     MOVEQ   #7,D0
  7493. cacolop MOVE.W  (A0)+,(A1)+
  7494.     DBRA    D0,cacolop
  7495.     BSR ShowColSliders
  7496.     BRA SetScreenColors
  7497.  
  7498. CopyCfgData
  7499.     LEA ColorTable,A0
  7500.     LEA CanCols(PC),A1
  7501.     MOVEQ   #7,D0
  7502. cocclop MOVE.W  (A0)+,(A1)+
  7503.     DBRA    D0,cocclop
  7504.     LEA ModulesPath2,A0
  7505.     MOVE.W  #195,D0
  7506. cocclp2 CLR.B   (A0)+
  7507.     DBRA    D0,cocclp2
  7508.     LEA ModulesPath,A0
  7509.     LEA ModulesPath2,A1
  7510.     BSR.S   cocclp3
  7511.     LEA SongsPath,A0
  7512.     LEA SongsPath2,A1
  7513.     BSR.S   cocclp3
  7514.     LEA SamplePath,A0
  7515.     LEA SamplePath2,A1
  7516. cocclp3 MOVE.B  (A0)+,(A1)+
  7517.     BNE.S   cocclp3
  7518.     LEA VUMeterColors,A0
  7519.     LEA SaveColors,A1
  7520.     MOVEQ   #40+48-1,D0
  7521. cocclp4 MOVE.W  (A0)+,(A1)+
  7522.     DBRA    D0,cocclp4
  7523.     RTS
  7524.  
  7525. UndoCol     dc.w 0
  7526. UndoColAddr dc.l 0
  7527. CanCols     dc.w 0,0,0,0,0,0,0,0
  7528.  
  7529. SetDefaultCol
  7530.     LEA DefCol,A0
  7531.     LEA ColorTable,A1
  7532.     MOVEQ   #7,D0
  7533. sdcloop MOVE.W  (A0)+,(A1)+
  7534.     DBRA    D0,sdcloop
  7535.     BSR ShowColSliders
  7536. SetScreenColors
  7537.     BSR SetupAnaCols
  7538. SetScreenColors2
  7539.     LEA ColorTable,A0
  7540.     LEA CopCol0,A1
  7541.     MOVE.W  (A0),(A1)
  7542.     MOVE.W  2(A0),4(A1)
  7543.     MOVE.W  4(A0),8(A1)
  7544.     MOVE.W  6(A0),12(A1)
  7545.     MOVE.W  8(A0),16(A1)
  7546.     MOVE.W  10(A0),20(A1)
  7547.     MOVE.W  12(A0),24(A1)
  7548.     MOVE.W  14(A0),28(A1)
  7549.     MOVE.W  14(A0),D0
  7550.     TST.W   SamScrEnable
  7551.     BEQ.S   sscnosc
  7552.     MOVE.W  8(A0),D0
  7553. sscnosc MOVE.W  D0,NoteCol
  7554.     MOVE.W  10(A0),D0
  7555.     MOVE.W  D0,D4
  7556.     MOVE.W  #3,FadeX
  7557.     BSR.S   FadeCol
  7558.     MOVE.W  D0,32(A1)
  7559.     MOVE.W  D4,36(A1)
  7560.     MOVE.W  D4,D0
  7561.     MOVE.W  #-3,FadeX
  7562.     BSR.S   FadeCol
  7563.     MOVE.W  D0,40(A1)
  7564.     RTS
  7565.  
  7566. FadeCol MOVE.W  D0,D1
  7567.     MOVE.W  D0,D2
  7568.     MOVE.W  D0,D3
  7569.     LSR.W   #8,D1
  7570.     ADD.W   FadeX(PC),D1
  7571.     BPL.S   redskp
  7572.     MOVEQ   #0,D1
  7573. redskp  CMP.W   #15,D1
  7574.     BLS.S   redskp2
  7575.     MOVEQ   #15,D1
  7576. redskp2 AND.W   #$00F0,D2
  7577.     LSR.W   #4,D2
  7578.     ADD.W   FadeX(PC),D2
  7579.     BPL.S   grnskp
  7580.     MOVEQ   #0,D2
  7581. grnskp  CMP.W   #15,D2
  7582.     BLS.S   grnskp2
  7583.     MOVEQ   #15,D2
  7584. grnskp2 AND.W   #$000F,D3
  7585.     ADD.W   FadeX(PC),D3
  7586.     BPL.S   bluskp
  7587.     MOVEQ   #0,D3
  7588. bluskp  CMP.W   #15,D3
  7589.     BLS.S   bluskp2
  7590.     MOVEQ   #15,D3
  7591. bluskp2 MOVE.W  D3,D0
  7592.     LSL.W   #4,D2
  7593.     OR.W    D2,D0
  7594.     LSL.W   #8,D1
  7595.     OR.W    D1,D0
  7596.     RTS
  7597.  
  7598. CurrColor   dc.w    0
  7599. FadeX       dc.w    -3
  7600.  
  7601. EnterPrintPath
  7602.     BSR StorePtrCol
  7603.     BSR SetWaitPtrCol
  7604.     LEA PrintPath,A6
  7605.     MOVE.L  A6,ShowTextPtr
  7606.     MOVE.L  A6,TextEndPtr
  7607.     ADD.L   #31,TextEndPtr
  7608.     MOVE.W  #12,TextLength
  7609.     MOVE.W  #3694,A4
  7610.     BSR GetTextLine
  7611.     BRA RestorePtrCol
  7612.  
  7613. ShowPrintPath
  7614.     LEA PrintPath,A0
  7615.     MOVE.W  #3694,D1
  7616.     MOVEQ   #12,D0
  7617.     BRA ShowText3
  7618.  
  7619. ; Print Song
  7620.  
  7621. PrintSong
  7622.     LEA PrintSongText,A0
  7623.     BSR AreYouSure
  7624.     BNE Return1
  7625.     BSR StorePtrCol
  7626.     MOVE.L  #PrintPath,D1
  7627.     MOVE.L  #1006,D2
  7628.     MOVE.L  DOSbase,A6
  7629.     JSR LVOOpen(A6)
  7630.     MOVE.L  D0,FileHandle
  7631.     BEQ CantOpenFile
  7632.     BSR SetDiskPtrCol
  7633.     LEA PrintingSongText,A0
  7634.     BSR ShowStatusText
  7635.     MOVE.L  FileHandle,D1
  7636.     MOVE.L  #SongDumpText,D2
  7637.     MOVEQ   #68,D3
  7638.     MOVE.L  DOSbase,A6
  7639.     JSR LVOWrite(A6)
  7640.     MOVE.L  FileHandle,D1
  7641.     MOVE.L  SongDataPtr,D2
  7642.     MOVEQ   #20,D3
  7643.     JSR LVOWrite(A6)
  7644.     BSR PrintCRLF
  7645.     BSR PrintCRLF
  7646.     BSR PrintSong2
  7647.     BSR PrintCRLF
  7648.     BSR PrintSong4
  7649.     BSR PrintFormFeed
  7650.     MOVE.L  SongDataPtr,A0
  7651.     MOVEQ   #0,D0
  7652.     MOVE.B  sd_numofpatt(A0),D0
  7653.     LEA sd_pattpos(A0),A0
  7654.     MOVEQ   #0,D7
  7655. ps_loop CMP.B   (A0,D0.W),D7
  7656.     BGT.S   ps_skip
  7657.     MOVE.B  (A0,D0.W),D7
  7658. ps_skip SUBQ.W  #1,D0
  7659.     BPL.S   ps_loop
  7660.     MOVEQ   #0,D1
  7661. ps_loop2
  7662.     MOVEM.L D1-D7/A0-A6,-(SP)
  7663.     BSR PrintPattern
  7664.     MOVEM.L (SP)+,D1-D7/A0-A6
  7665.     TST.L   D0
  7666.     BNE.S   ps_skip2
  7667.     MOVEM.L D1/D7,-(SP)
  7668.     BSR PrintFormFeed
  7669.     MOVEM.L (SP)+,D1/D7
  7670.     ADDQ.W  #1,D1
  7671.     CMP.W   D7,D1
  7672.     BLO.S   ps_loop2
  7673. ps_skip2
  7674.     MOVE.L  DOSbase,A6
  7675.     MOVE.L  FileHandle,D1
  7676.     JSR LVOClose(A6)
  7677.     BSR ShowAllRight
  7678.     BRA RestorePtrCol
  7679.  
  7680. PrintSong2
  7681.     MOVEQ   #1,D7
  7682. ps2_2   MOVE.L  D7,D0
  7683.     LSR.B   #4,D0
  7684.     CMP.B   #9,D0
  7685.     BLS.S   spujk
  7686.     ADDQ.B  #7,D0
  7687. spujk   ADD.B   #'0',D0
  7688.     MOVE.B  D0,PattXText1
  7689.     MOVE.B  D7,D0
  7690.     AND.B   #$0F,D0
  7691.     CMP.B   #9,D0
  7692.     BLS.S   spujk2
  7693.     ADDQ.B  #7,D0
  7694. spujk2  ADD.B   #'0',D0
  7695.     MOVE.B  D0,PattXText2
  7696.  
  7697.     MOVE.L  SongDataPtr,A0
  7698.     MOVE.W  D7,D0
  7699.     MULU    #30,D0
  7700.     LEA -10(A0,D0.W),A0
  7701.     LEA PpText,A1
  7702.     MOVEQ   #21,D0
  7703. ps2_loop
  7704.     MOVE.B  #' ',(A1)+
  7705.     DBRA    D0,ps2_loop
  7706.     LEA PpText,A1
  7707.  
  7708.     MOVE.L  A0,SavIt
  7709. ps2_loop2
  7710.     MOVE.B  (A0)+,D0
  7711.     BEQ PrintSong3
  7712.     MOVE.B  D0,(A1)+
  7713.     BRA.S   ps2_loop2
  7714.  
  7715. SavIt   dc.l    0
  7716.  
  7717. PrintSong3
  7718.     MOVE.L  D7,-(SP) ; pattnum
  7719.     MOVE.L  SavIt(PC),A0
  7720.     MOVE.W  22(A0),D0
  7721.     ADD.W   D0,D0
  7722.     LEA Prafs+2+4,A0
  7723.     BSR IntToHexASCII
  7724.     MOVE.L  SavIt(PC),A0
  7725.     MOVE.W  26(A0),D0
  7726.     ADD.W   D0,D0
  7727.     LEA Prafs+8+4,A0
  7728.     BSR IntToHexASCII
  7729.     MOVE.L  SavIt(PC),A0
  7730.     MOVE.W  28(A0),D0
  7731.     ADD.W   D0,D0
  7732.     LEA Prafs+14+4,A0
  7733.     BSR IntToHexASCII
  7734.     MOVE.L  DOSbase,A6
  7735.     MOVE.L  FileHandle,D1
  7736.     MOVE.L  #PtotText,D2
  7737.     MOVEQ   #52,D3
  7738.     JSR LVOWrite(A6)
  7739.     MOVE.L  (SP)+,D7
  7740.     ADDQ.W  #1,D7
  7741.     CMP.W   #$0020,D7
  7742.     BNE ps2_2
  7743.     RTS
  7744.  
  7745. PrintSong4
  7746.     MOVE.L  SongDataPtr,A0
  7747.     MOVEQ   #0,D7
  7748.     MOVE.B  sd_numofpatt(A0),D7
  7749.     LEA sd_pattpos(A0),A0
  7750.     MOVEQ   #0,D5
  7751. ps4_loop1
  7752.     MOVEQ   #0,D6
  7753. ps4_loop2
  7754.     MOVEQ   #0,D0
  7755.     MOVE.B  (A0)+,D0
  7756.     MOVE.W  D0,D1
  7757.     LSR.W   #4,D1
  7758.     ADD.B   #$30,D1
  7759.     CMP.B   #$39,D1
  7760.     BLS.S   ps4_skip
  7761.     ADDQ.B  #7,D1
  7762. ps4_skip
  7763.     AND.B   #15,D0
  7764.     ADD.B   #$30,D0
  7765.     CMP.B   #$39,D0
  7766.     BLS.S   ps4_skip2
  7767.     ADDQ.B  #7,D0
  7768. ps4_skip2
  7769.     LEA PnText,A1
  7770.     MOVE.B  D1,(A1)+
  7771.     MOVE.B  D0,(A1)
  7772.     MOVEM.L D5-D7/A0,-(SP)
  7773.     MOVE.L  DOSbase,A6
  7774.     MOVE.L  FileHandle,D1
  7775.     MOVE.L  #PnText,D2
  7776.     MOVEQ   #4,D3
  7777.     JSR LVOWrite(A6)
  7778.     MOVEM.L (SP)+,D5-D7/A0
  7779.     ADDQ.W  #1,D5
  7780.     CMP.W   D5,D7
  7781.     BEQ Return1
  7782.     ADDQ.W  #1,D6
  7783.     CMP.W   #$0010,D6
  7784.     BNE.S   ps4_loop2
  7785.     MOVEM.L D5-D7/A0,-(SP)
  7786.     BSR.S   PrintCRLF
  7787.     MOVEM.L (SP)+,D5-D7/A0
  7788.     BRA.S   ps4_loop1
  7789.  
  7790. PrintCRLF
  7791.     MOVE.L  DOSbase,A6
  7792.     MOVE.L  FileHandle,D1
  7793.     MOVE.L  #CRLF_Text,D2
  7794.     MOVEQ   #2,D3
  7795.     JSR LVOWrite(A6)
  7796.     RTS
  7797.  
  7798. PrintFormFeed
  7799.     MOVE.L  DOSbase,A6
  7800.     MOVE.L  FileHandle,D1
  7801.     MOVE.L  #FF_Text,D2
  7802.     MOVEQ   #1,D3
  7803.     JSR LVOWrite(A6)
  7804.     RTS
  7805.  
  7806. PrintPattern
  7807.     MOVE.L  D1,D6 ; D1=pattern number
  7808.     DIVU    #10,D6
  7809.     ADD.B   #'0',D6
  7810.     MOVE.B  D6,PattNumText1
  7811.     SWAP    D6
  7812.     ADD.B   #'0',D6
  7813.     MOVE.B  D6,PattNumText2
  7814.     MOVEM.L D0-D7/A0-A6,-(SP)
  7815.     MOVE.L  FileHandle,D1
  7816.     MOVE.L  #PatternNumText,D2
  7817.     MOVEQ   #18,D3
  7818.     MOVE.L  DOSbase,A6
  7819.     JSR LVOWrite(A6)
  7820.     MOVEM.L (SP)+,D0-D7/A0-A6
  7821.  
  7822.     MOVE.L  D1,D6
  7823.     MOVE.L  SongDataPtr,A6
  7824.     LEA sd_patterndata(A6),A6
  7825.     LSL.L   #8,D6
  7826.     LSL.L   #2,D6
  7827.     ADD.L   D6,A6
  7828.     CLR.L   PPattPos
  7829.     MOVEQ   #0,D6
  7830. pp_posloop
  7831.     MOVEQ   #0,D7
  7832.     MOVE.W  #2,TextLength
  7833.     MOVE.L  PPattPos,D1
  7834.     LEA PattPosText,A5
  7835.     DIVU    #10,D1
  7836.     ADD.B   #'0',D1
  7837.     MOVE.B  D1,(A5)+
  7838.     CLR.W   D1
  7839.     SWAP    D1
  7840.     ADD.B   #'0',D1
  7841.     MOVE.B  D1,(A5)+
  7842.     ADDQ.L  #5,A5
  7843. pp_noteloop
  7844.     MOVEQ   #0,D0
  7845.     MOVEQ   #0,D1
  7846.     MOVE.W  #3,TextLength
  7847.     MOVE.W  (A6),D1
  7848.     AND.W   #$0FFF,D1
  7849.     LEA PeriodTable,A0
  7850. pp_findloop
  7851.     CMP.W   0(A0,D0.L),D1
  7852.     BEQ PrintNote
  7853.     ADDQ.L  #2,D0
  7854.     BRA.S   pp_findloop
  7855.  
  7856. PrintNote
  7857.     ADD.L   D0,D0
  7858.     ADD.L   NoteNamesPtr,D0
  7859.     MOVE.L  D0,A0
  7860.     MOVE.L  (A0),(A5)+
  7861.     CMP.B   #'¡',-3(A5)
  7862.     BNE.S   prnoxyz
  7863.     MOVE.B  #'b',-3(A5)
  7864. prnoxyz ADDQ.L  #1,A5
  7865.     MOVEQ   #0,D0
  7866.     MOVE.W  (A6),D0
  7867.     AND.W   #$F000,D0
  7868.     LSR.W   #8,D0
  7869.     LSL.L   #1,D0
  7870.     LEA FastHexTable,A0
  7871.     ADD.L   D0,A0
  7872.     MOVE.B  (A0),(A5)+
  7873.     MOVEQ   #0,D0
  7874.     MOVE.B  2(A6),D0
  7875.     LSL.L   #1,D0
  7876.     LEA FastHexTable,A0
  7877.     ADD.L   D0,A0
  7878.     MOVE.W  (A0),(A5)+
  7879.     MOVEQ   #0,D0
  7880.     MOVE.B  3(A6),D0
  7881.     LSL.L   #1,D0
  7882.     LEA FastHexTable,A0
  7883.     ADD.L   D0,A0
  7884.     MOVE.W  (A0),(A5)+
  7885.     ADDQ.L  #4,A5
  7886.     ADDQ.L  #4,A6
  7887.     ADDQ.L  #1,D7
  7888.     CMP.L   #4,D7
  7889.     BNE pp_noteloop
  7890.     ADDQ.L  #1,PPattPos
  7891.     MOVEM.L D0-D7/A0-A6,-(SP)
  7892.     MOVE.L  DOSbase,A6
  7893.     MOVE.L  FileHandle,D1
  7894.     MOVE.L  #PnText2,D2
  7895.     MOVEQ   #68,D3
  7896.     JSR LVOWrite(A6)
  7897.     BSR PrintCRLF
  7898.     MOVEM.L (SP)+,D0-D7/A0-A6
  7899.     BTST    #2,$DFF016
  7900.     BEQ.S   NegativeReturn
  7901.     ADDQ.L  #1,D6
  7902.     CMP.L   #64,D6
  7903.     BNE pp_posloop
  7904.     MOVEQ   #0,D0
  7905.     RTS
  7906.  
  7907. NegativeReturn
  7908.     MOVEQ   #-1,D0
  7909.     RTS
  7910.  
  7911. PositiveReturn
  7912.     MOVEQ   #0,D0
  7913.     RTS
  7914.  
  7915. ;---- Setup2 ----
  7916.  
  7917. Setup2  BSR WaitForButtonUp
  7918.     MOVE.W  #7,CurrScreen
  7919.     CLR.W   LastSetupScreen
  7920.     ST  DisableAnalyzer
  7921.     ST  NoSampleInfo
  7922.     BSR Clear100Lines
  7923.     MOVE.L  SetupMemPtr,D0
  7924.     BNE set2skp
  7925.     BSR SaveMainPic
  7926.     BEQ ExitSetup
  7927. set2skp BSR DecompactSetup2
  7928.     BSR SetScreenColors
  7929. refrsh2 BSR ShowIntMode
  7930.     BSR ShowTempo
  7931.     BSR ShowSpeed
  7932.     BSR ShowColEdit
  7933.     BSR ShowRainbow
  7934.     BSR GetColPos
  7935.     BSR ShowColSliders
  7936.     BSR ShowS2Modules
  7937.     BSR ShowS2Songs
  7938.     BSR ShowS2Samples
  7939.     BSR ShowS2PTPath
  7940.     BSR ShowS2MaxPLST
  7941.     BSR ShowS2DMAWait
  7942.     BSR ShowS2TuneNote
  7943.     BSR ShowS2SalvAddr
  7944.     BRA ShowS2T
  7945.  
  7946. CheckSetup2Gadgs
  7947.     MOVEM.W MouseX2,D0/D1
  7948.     CMP.W   #210,D0
  7949.     BHS Setup2Menu3
  7950.     CMP.W   #108,D0
  7951.     BHS.S   Setup2Menu2
  7952. ;---- Menu 1 ----
  7953.     CMP.W   #11,D1
  7954.     BLS ToggleIntMode
  7955.     CMP.W   #22,D1
  7956.     BLS ChangeTempo
  7957.     CMP.W   #33,D1
  7958.     BLS ChangeSpeed
  7959.     CMP.W   #44,D1
  7960.     BLS ToggleColEdit
  7961.     CMP.W   #55,D1
  7962.     BLS RotOrSpread
  7963.     CMP.W   #66,D1
  7964.     BLS SetRed2
  7965.     CMP.W   #77,D1
  7966.     BLS SetGreen2
  7967.     CMP.W   #88,D1
  7968.     BLS SetBlue2
  7969.     CMP.W   #99,D1
  7970.     BLS ColorGadgets2
  7971.     RTS
  7972.  
  7973. Setup2Menu2
  7974.     CMP.W   #11,D1
  7975.     BLS Set2ModPath
  7976.     CMP.W   #22,D1
  7977.     BLS Set2SongPath
  7978.     CMP.W   #33,D1
  7979.     BLS Set2SamPath
  7980.     CMP.W   #44,D1
  7981.     BLS Set2PTPath
  7982.     CMP.W   #55,D1
  7983.     BLS SetS2MaxPLST
  7984.     CMP.W   #66,D1
  7985.     BLS SetS2DMAWait
  7986.     CMP.W   #77,D1
  7987.     BLS SetS2TuneNote
  7988.     CMP.W   #88,D1
  7989.     BLS SetS2SalvAddr
  7990.     CMP.W   #99,D1
  7991.     BLS RecoverSong
  7992.     RTS
  7993.  
  7994. Setup2Menu3
  7995.     CMP.W   #11,D1
  7996.     BLS ExitOrDefault
  7997.     CMP.W   #22,D1
  7998.     BLS ToggleOverride
  7999.     CMP.W   #33,D1
  8000.     BLS ToggleNosamples
  8001.     CMP.W   #44,D1
  8002.     BLS ToggleBlankZero
  8003.     CMP.W   #55,D1
  8004.     BLS ToggleShowDirs
  8005.     CMP.W   #66,D1
  8006.     BLS ToggleShowPublic
  8007.     CMP.W   #77,D1
  8008.     BLS ToggleCutToBuf
  8009.     CMP.W   #88,D1
  8010.     BLS ToggleIFFLoop
  8011.     CMP.W   #99,D1
  8012.     BLS ToggleHH
  8013.     RTS
  8014.  
  8015. ExitOrDefault
  8016.     CMP.W   #265,D0
  8017.     BLS.S   SetS2Default
  8018.     CMP.W   #306,D0
  8019.     BHS Setup
  8020.     BRA ExitSetup
  8021.  
  8022. SetS2Default
  8023.     LEA SetDefaultsText(PC),A0
  8024.     BSR AreYouSure
  8025.     BNE Return1
  8026.     LEA DefaultSetupData,A0
  8027.     LEA SongsPath-SetupData(A0),A2
  8028.     LEA SongsPath,A1
  8029.     MOVEQ   #95,D0
  8030. ss2dela MOVE.B  (A2)+,(A1)+
  8031.     DBRA    D0,ss2dela
  8032.     LEA PTPath-SetupData(A0),A2
  8033.     LEA PTPath,A1
  8034.     MOVEQ   #31,D0
  8035. ss2delb MOVE.B  (A2)+,(A1)+
  8036.     DBRA    D0,ss2delb
  8037.     LEA MaxPLSTEntries-SetupData(A0),A2
  8038.     MOVE.W  (A2),MaxPLSTEntries
  8039.     LEA DMAWait-SetupData(A0),A2
  8040.     MOVE.W  (A2),DMAWait
  8041.     LEA TuneNote-SetupData(A0),A2
  8042.     MOVE.L  (A2),TuneNote
  8043.     LEA SalvageAddress-SetupData(A0),A2
  8044.     LEA SalvageAddress,A1
  8045.     MOVE.L  (A2)+,(A1)+
  8046.     MOVE.L  (A2),(A1)
  8047.     BRA refrsh2
  8048.  
  8049. SetDefaultsText dc.b "Set defaults?",0
  8050.  
  8051. ToggleIntMode
  8052.     BSR ResetMusicInt
  8053.     EOR.B   #1,IntMode
  8054.     BSR SetMusicInt
  8055.     BSR SetTempo
  8056.     BSR WaitForButtonUp
  8057. ShowIntMode
  8058.     LEA VBlankText(PC),A0
  8059.     TST.B   IntMode
  8060.     BEQ.S   simskip
  8061.     LEA CIAText(PC),A0
  8062. simskip MOVEQ   #6,D0
  8063.     MOVE.W  #167,D1
  8064.     BRA ShowText3
  8065.  
  8066. VBlankText  dc.b "VBLANK"
  8067. CIAText     dc.b " CIA  "
  8068.  
  8069. ChangeSpeed
  8070.     MOVEQ   #0,D1
  8071.     CMP.W   #94,D0
  8072.     BHS.S   SpeedDown
  8073.     CMP.W   #80,D0
  8074.     BHS.S   SpeedUp
  8075.     RTS
  8076.  
  8077. SpeedUp MOVE.W  DefaultSpeed,D1
  8078.     ADDQ.B  #1,D1
  8079.     CMP.B   #$FF,D1
  8080.     BLS.S   spedup2
  8081.     MOVE.W  #$FF,D1
  8082. spedup2 MOVE.W  D1,DefaultSpeed
  8083.     MOVE.L  D1,CurrSpeed
  8084.     BSR.S   ShowSpeed
  8085.     BSR Wait_4000
  8086.     BRA Wait_4000
  8087. ShowSpeed
  8088.     MOVE.W  #608+440,TextOffset
  8089.     MOVE.W  DefaultSpeed,WordNumber
  8090.     JMP PrintHexByte
  8091.  
  8092. SpeedDown
  8093.     MOVE.W  DefaultSpeed,D1
  8094.     SUB.B   #1,D1
  8095.     CMP.B   #1,D1
  8096.     BHS.S   spedup2
  8097.     MOVEQ   #1,D1
  8098.     BRA.S   spedup2
  8099.  
  8100.  
  8101. ToggleOverride
  8102.     EOR.B   #1,OverrideFlag
  8103.     BRA.S   ShowS2T
  8104. ToggleNosamples
  8105.     EOR.B   #1,NosamplesFlag
  8106.     BRA.S   ShowS2T
  8107. ToggleBlankZero
  8108.     EOR.B   #1,BlankZeroFlag
  8109.     BSR.S   ShowS2T
  8110.     BRA RedrawPattern
  8111. ToggleShowDirs
  8112.     EOR.B   #1,ShowDirsFlag
  8113.     BRA.S   ShowS2T
  8114. ToggleShowPublic
  8115.     EOR.B   #1,ShowPublicFlag
  8116.     MOVE.W  #1,UpdateFreeMem
  8117.     BRA.S   ShowS2T
  8118. ToggleCutToBuf
  8119.     EOR.B   #1,CutToBufFlag
  8120.     BRA.S   ShowS2T
  8121. ToggleIFFLoop
  8122.     EOR.B   #1,IFFLoopFlag
  8123.     BRA.S   ShowS2T
  8124. ToggleHH
  8125.     EOR.B   #1,HHFlag
  8126.  
  8127. ShowS2T CLR.B   RawKeyCode
  8128.     CMP.W   #7,CurrScreen
  8129.     BNE Return1
  8130.     LEA OverrideFlag,A4
  8131.     MOVE.W  #3,TextLength
  8132.     MOVEQ   #7,D7
  8133.     MOVE.W  #636,D6
  8134. sstloop2
  8135.     MOVE.W  D6,TextOffset
  8136.     LEA ToggleOFFText,A0
  8137.     TST.B   (A4)+
  8138.     BEQ.S   sstskip2
  8139.     LEA ToggleONText,A0
  8140. sstskip2
  8141.     BSR ShowText2
  8142.     ADD.W   #440,D6
  8143.     DBRA    D7,sstloop2
  8144.     BRA WaitForButtonUp
  8145.  
  8146. ShowS2Modules
  8147.     MOVE.W  #177,D1
  8148.     LEA ModulesPath,A0
  8149. s2path  MOVEQ   #9,D0
  8150.     BRA ShowText3
  8151.  
  8152. ShowS2Songs
  8153.     MOVE.W  #177+440,D1
  8154.     LEA SongsPath,A0
  8155.     BRA.S   s2path
  8156.  
  8157. ShowS2Samples
  8158.     MOVE.W  #177+880,D1
  8159.     LEA SamplePath,A0
  8160.     BRA.S   s2path
  8161.  
  8162. ShowS2PTPath
  8163.     MOVE.W  #177+1320,D1
  8164.     LEA PTPath,A0
  8165.     BRA.S   s2path
  8166.  
  8167.  
  8168. Set2ModPath
  8169.     BSR StorePtrCol
  8170.     BSR SetWaitPtrCol
  8171.     LEA ModulesPath,A6
  8172.     MOVE.L  A6,ShowTextPtr
  8173.     MOVE.L  A6,TextEndPtr
  8174.     ADD.L   #31,TextEndPtr
  8175.     MOVE.W  #9,TextLength
  8176.     MOVE.W  #177,A4
  8177.     BSR GetTextLine
  8178.     BRA RestorePtrCol
  8179.  
  8180. Set2SongPath
  8181.     BSR StorePtrCol
  8182.     BSR SetWaitPtrCol
  8183.     LEA SongsPath,A6
  8184.     MOVE.L  A6,ShowTextPtr
  8185.     MOVE.L  A6,TextEndPtr
  8186.     ADD.L   #31,TextEndPtr
  8187.     MOVE.W  #9,TextLength
  8188.     MOVE.W  #177+440,A4
  8189.     BSR GetTextLine
  8190.     BRA RestorePtrCol
  8191.  
  8192. Set2SamPath
  8193.     BSR StorePtrCol
  8194.     BSR SetWaitPtrCol
  8195.     LEA SamplePath,A6
  8196.     MOVE.L  A6,ShowTextPtr
  8197.     MOVE.L  A6,TextEndPtr
  8198.     ADD.L   #31,TextEndPtr
  8199.     MOVE.W  #9,TextLength
  8200.     MOVE.W  #177+880,A4
  8201.     BSR GetTextLine
  8202.     BRA RestorePtrCol
  8203.  
  8204. Set2PTPath
  8205.     BSR StorePtrCol
  8206.     BSR SetWaitPtrCol
  8207.     LEA PTPath,A6
  8208.     MOVE.L  A6,ShowTextPtr
  8209.     MOVE.L  A6,TextEndPtr
  8210.     ADD.L   #31,TextEndPtr
  8211.     MOVE.W  #9,TextLength
  8212.     MOVE.W  #177+1320,A4
  8213.     BSR GetTextLine
  8214.     BRA RestorePtrCol
  8215.  
  8216. SetS2MaxPLST
  8217.     CMP.W   #199,D0
  8218.     BHS.S   S2plstd
  8219.     CMP.W   #188,D0
  8220.     BHS.S   S2PLSTu
  8221.     RTS
  8222. S2PLSTu MOVE.W  MaxPLSTEntries,D0
  8223.     ADD.W   #100,D0
  8224.     CMP.W   #9999,D0
  8225.     BLS.S   s2pu
  8226.     MOVE.W  #9999,D0
  8227. s2pu    MOVE.W  D0,MaxPLSTEntries
  8228.     BSR.S   ShowS2MaxPLST
  8229.     BRA Wait_4000
  8230.  
  8231. S2PLSTd MOVEQ   #0,D0
  8232.     MOVE.W  MaxPLSTEntries,D0
  8233.     ADDQ.W  #1,D0
  8234.     DIVU    #100,D0
  8235.     SUBQ.W  #1,D0
  8236.     BPL.S   s2pd
  8237.     MOVEQ   #0,D0
  8238.     BRA.S   s2pu
  8239. s2pd    MULU    #100,D0
  8240.     BRA.S   s2pu
  8241.  
  8242. ShowS2MaxPLST
  8243.     MOVE.W  MaxPLSTEntries,WordNumber
  8244.     MOVE.W  #1939,TextOffset
  8245.     BRA Print4DecDigits
  8246.  
  8247. SetS2DMAWait
  8248.     CMP.W   #199,D0
  8249.     BHS.S   S2dwd
  8250.     CMP.W   #188,D0
  8251.     BHS.S   S2dwu
  8252.     RTS
  8253. S2dwu   MOVE.W  DMAWait,D0
  8254.     ADDQ.W  #1,D0
  8255.     BTST    #2,$DFF016
  8256.     BNE.S   s2npu
  8257.     ADD.W   #9,D0
  8258. s2npu   CMP.W   #9999,D0
  8259.     BLS.S   s2du
  8260.     MOVE.W  #9999,D0
  8261. s2du    MOVE.W  D0,DMAWait
  8262.     BSR.S   ShowS2DMAWait
  8263.     BRA Wait_4000
  8264.  
  8265. S2dwd   MOVE.W  DMAWait,D0
  8266.     SUBQ.W  #1,D0
  8267.     BTST    #2,$DFF016
  8268.     BNE.S   s2npd
  8269.     SUB.W   #9,D0
  8270. s2npd   TST.W   D0
  8271.     BPL.S   s2du
  8272.     MOVEQ   #0,D0
  8273.     BRA.S   s2du
  8274.  
  8275. ShowS2DMAWait
  8276.     MOVE.W  DMAWAit,WordNumber
  8277.     MOVE.W  #2379,TextOffset
  8278.     BRA Print4DecDigits
  8279.  
  8280. SetS2TuneNote
  8281.     CMP.W   #187,D0
  8282.     BHS.S   ss2tvol
  8283.     MOVE.W  #2820,D1
  8284.     MOVEQ   #3,D0
  8285.     LEA SpcNoteText,A0
  8286.     BSR ShowText3
  8287.     MOVE.W  #3,SamNoteType
  8288.     MOVE.L  #TuneNote,SplitAddress
  8289.     BRA WaitForButtonUp
  8290.  
  8291. ShowS2TuneNote
  8292.     CMP.W   #7,CurrScreen
  8293.     BNE Return1
  8294.     MOVE.L  NoteNamesPtr,A4
  8295.     MOVE.W  TuneNote,D0
  8296.     LSL.W   #2,D0
  8297.     LEA (A4,D0.W),A0
  8298.     MOVEQ   #4,D0
  8299.     MOVE.W  #2820,D1
  8300.     BSR ShowText3
  8301.     MOVE.W  TToneVol,WordNumber
  8302.     MOVE.W  #2824,TextOffset
  8303.     BRA PrintHexByte
  8304.  
  8305. ss2tvol MOVE.W  #2824,TextOffset
  8306.     BSR GetHexByte
  8307.     MOVE.W  D0,TToneVol
  8308.     BRA.S   ShowS2TuneNote
  8309.  
  8310. SetS2SalvAddr
  8311.     BRA ShowNotImpl
  8312.     BSR StorePtrCol
  8313.     BSR SetWaitPtrCol
  8314.     LEA SalvageAddress,A6
  8315.     MOVE.L  A6,ShowTextPtr
  8316.     MOVE.L  A6,TextEndPtr
  8317.     ADD.L   #6,TextEndPtr
  8318.     MOVE.W  #6,TextLength
  8319.     MOVE.W  #3260,A4
  8320.     MOVE.B  #5,EnterTextFlag
  8321.     BSR GetTextLine
  8322.     CLR.B   EnterTextFlag
  8323.     BSR RestorePtrCol
  8324. ShowS2SalvAddr
  8325.     LEA SalvageAddress,A0
  8326.     MOVEQ   #6,D0
  8327.     MOVE.W  #3260,D1
  8328.     BRA ShowText3
  8329.  
  8330. RecoverSong
  8331.     BRA ShowNotImpl
  8332.     LEA RecoverSongText(PC),A0
  8333.     BSR AreYouSure
  8334.     BNE Return1
  8335.     BSR DoClearSong
  8336.     BSR ClrSampleInfo
  8337.     BSR.S   FindAdr
  8338.     MOVE.L  D0,A0
  8339.     MOVE.L  SongDataPtr,A1
  8340.     MOVE.L  #70716,D0
  8341. recloop MOVE.B  (A0)+,(A1)+
  8342.     SUBQ.L  #1,D0
  8343.     BNE.S   recloop
  8344.     BRA RedrawPattern
  8345.  
  8346. FindAdr LEA SalvageAddress+6,A0
  8347.     BSR HexToInteger
  8348.     MOVE.W  D0,D3
  8349.     MOVEQ   #0,D0
  8350.     BSR HexToInteger2
  8351.     SWAP    D0
  8352.     OR.W    D3,D0
  8353.     RTS
  8354.  
  8355. RecoverSongText dc.b    "Recover Song?",0
  8356.  
  8357. ToggleColEdit
  8358.     CMP.W   #79,D0
  8359.     BHS SelectColor2
  8360.     CLR.W   SpreadFlag
  8361.     LEA VUMeterColors,A0
  8362.     MOVEQ   #48,D0
  8363.     CMP.L   TheRightColors(PC),A0
  8364.     BNE.S   tced2
  8365.     LEA AnalyzerColors,A0
  8366.     MOVEQ   #36,D0
  8367. tced2   MOVE.L  A0,TheRightColors
  8368.     MOVE.W  D0,ColorsMax
  8369.     CMP.W   RainbowPos(PC),D0
  8370.     BHI.S   tced3
  8371.     CLR.W   RainbowPos
  8372. tced3   BSR ShowRainbow
  8373.     BSR.S   ShowColEdit
  8374.     BRA WaitForButtonUp
  8375. ShowColEdit
  8376.     LEA cedtxt1(PC),A0
  8377.     LEA VUMeterColors,A1
  8378.     CMP.L   TheRightColors(PC),A1
  8379.     BEQ.S   shcoed
  8380.     LEA cedtxt2(PC),A0
  8381. shcoed  MOVEQ   #6,D0
  8382.     MOVE.W  #1483,D1
  8383.     BRA ShowText3
  8384.  
  8385. cedtxt1 dc.b "VU-MTR"
  8386. cedtxt2 dc.b "ANALYZ"
  8387.  
  8388. RotOrSpread
  8389.     CMP.W   #16,D0
  8390.     BLO.S   RotColUp
  8391.     CMP.W   #32,D0
  8392.     BLO.S   RotColDown
  8393.     CMP.W   #79,D0
  8394.     BHS SelectColor2
  8395.     BRA SpreadColors
  8396.  
  8397. RotColUp
  8398.     CLR.W   SpreadFlag
  8399.     MOVE.L  TheRightColors(PC),A0
  8400.     MOVE.W  (A0),D0
  8401.     MOVE.W  ColorsMax(PC),D1
  8402.     SUBQ.W  #2,D1
  8403. rocoup1 MOVE.W  2(A0),(A0)+
  8404.     DBRA    D1,rocoup1
  8405.     MOVE.W  D0,(A0)
  8406. rocoup2 BSR GetColPos
  8407.     BSR ShowColSliders
  8408.     BSR ShowRainbow
  8409.     BRA SetupVUCols
  8410.  
  8411. RotColDown
  8412.     CLR.W   SpreadFlag
  8413.     MOVE.L  TheRightColors(PC),A0
  8414.     MOVE.W  ColorsMax(PC),D1
  8415.     ADD.W   D1,A0
  8416.     ADD.W   D1,A0
  8417.     MOVE.W  -(A0),D0
  8418.     SUBQ.W  #2,D1
  8419. rocodn1 MOVE.W  -2(A0),(A0)
  8420.     SUBQ.L  #2,A0
  8421.     DBRA    D1,rocodn1
  8422.     MOVE.W  D0,(A0)
  8423.     BRA.S   rocoup2
  8424.  
  8425. SpreadColors
  8426.     MOVE.W  RainbowPos,SpreadFrom
  8427.     MOVE.W  #1,SpreadFlag
  8428.     RTS
  8429.  
  8430. SpreadFrom  dc.w 0
  8431. SpreadFlag  dc.w 0
  8432.  
  8433. ColorGadgets2
  8434.     CLR.W   SpreadFlag
  8435.     CMP.W   #79,D0
  8436.     BHS.S   SetDefaultCol2
  8437.     CMP.W   #33,D0
  8438.     BHS.S   CancelCol2
  8439.     MOVE.L  UndoColAddr,A0
  8440.     MOVE.W  UndoCol,D1
  8441.     MOVE.W  (A0),UndoCol
  8442.     MOVE.W  D1,(A0)
  8443.     BRA rocoup2
  8444.  
  8445. SetDefaultCol2
  8446.     MOVE.L  TheRightColors(PC),A0
  8447.     MOVE.L  A0,A1
  8448.     SUB.L   #SetupData,A1
  8449.     ADD.L   #DefaultSetupData,A1
  8450. sedeco4 MOVE.W  ColorsMax,D0
  8451.     BRA.S   sedeco3
  8452. sedeco2 MOVE.W  (A1)+,(A0)+
  8453. sedeco3 DBRA    D0,sedeco2
  8454.     BRA rocoup2
  8455.  
  8456. CancelCol2
  8457.     MOVE.L  TheRightColors(PC),A0
  8458.     MOVE.L  A0,A1
  8459.     SUB.L   #VUMeterColors,A1
  8460.     ADD.L   #SaveColors,A1
  8461.     BRA.S   sedeco4
  8462.  
  8463. GetColAddr
  8464.     MOVE.L  TheRightColors(PC),A0
  8465.     MOVE.W  RainbowPos,D1
  8466.     ADD.W   D1,D1
  8467.     LEA (A0,D1.W),A0
  8468.     MOVE.W  (A0),D1
  8469.     MOVE.W  D1,D2
  8470.     RTS
  8471.  
  8472. SetRed2 CMP.W   #79,D0
  8473.     BHS SelectColor2
  8474. set2r2  BSR GetColPos
  8475.     AND.W   #$0F00,D2
  8476.     LSR.W   #8,D2
  8477.     CMP.B   D2,D0
  8478.     BEQ.S   setrsk2
  8479.     AND.W   #$00FF,D1
  8480.     LSL.W   #8,D0
  8481.     OR.W    D0,D1
  8482.     MOVE.W  D1,(A0)
  8483.     BSR ShowColSliders
  8484.     BSR ShowRainbow
  8485.     BSR SetupVUCols
  8486. setrsk2 BTST    #6,$BFE001
  8487.     BEQ.S   set2r2
  8488.     RTS
  8489.  
  8490. SetGreen2
  8491.     CMP.W   #79,D0
  8492.     BHS SelectColor2
  8493. set2g2  BSR GetColPos
  8494.     AND.W   #$00F0,D2
  8495.     LSR.W   #4,D2
  8496.     CMP.B   D2,D0
  8497.     BEQ.S   setgsk2
  8498.     AND.W   #$0F0F,D1
  8499.     LSL.W   #4,D0
  8500.     OR.W    D0,D1
  8501.     MOVE.W  D1,(A0)
  8502.     BSR ShowColSliders
  8503.     BSR ShowRainbow
  8504.     BSR SetupVUCols
  8505. setgsk2 BTST    #6,$BFE001
  8506.     BEQ.S   set2g2
  8507.     RTS
  8508.  
  8509. SetBlue2
  8510.     CMP.W   #79,D0
  8511.     BHS.S   SelectColor2
  8512. set2b2  BSR GetColPos
  8513.     AND.W   #$000F,D2
  8514.     CMP.B   D2,D0
  8515.     BEQ.S   setbsk2
  8516.     AND.W   #$0FF0,D1
  8517.     OR.W    D0,D1
  8518.     MOVE.W  D1,(A0)
  8519.     BSR ShowColSliders
  8520.     BSR ShowRainbow
  8521.     BSR SetupVUCols
  8522. setbsk2 BTST    #6,$BFE001
  8523.     BEQ.S   set2b2
  8524.     RTS
  8525.  
  8526. SelectColor2
  8527.     MOVEQ   #0,D7
  8528. setcolp BTST    #6,$BFE001
  8529.     BNE.S   ChkSpread
  8530.     MOVE.W  ColorsMax(PC),D0
  8531.     MOVE.W  MouseY,D1
  8532.     CMP.W   D7,D1
  8533.     BEQ.S   setcolp
  8534.     MOVE.W  D1,D7
  8535.     CMP.W   #37,D1
  8536.     BHS.S   setcoly
  8537.     MOVEQ   #37,D1
  8538. setcoly SUB.W   #37,D1
  8539.     CMP.W   D0,D1
  8540.     BLT.S   setcol2
  8541.     MOVE.W  D0,D1
  8542.     SUBQ.W  #1,D1
  8543. setcol2 MOVE.W  D1,RainbowPos
  8544.     BSR ShowRainbow
  8545.     BSR GetColPos
  8546.     MOVE.L  A0,UndoColAddr
  8547.     MOVE.W  D1,UndoCol
  8548.     BSR ShowColSliders
  8549.     BRA setcolp
  8550.  
  8551. ChkSpread
  8552.     TST.W   SpreadFlag
  8553.     BEQ Return1
  8554.     CLR.W   SpreadFlag
  8555.     BSR GetColPos
  8556.     MOVE.W  SpreadFrom,D0
  8557.     MOVE.W  RainbowPos,D1
  8558.     CMP.W   D1,D0
  8559.     BLO.S   chkspr2
  8560.     EXG D0,D1
  8561. chkspr2 MOVE.W  D1,D4
  8562.     SUB.W   D0,D4
  8563.     CMP.W   #1,D4
  8564.     BLS Return1
  8565.     MOVE.L  D4,A2
  8566.     ADD.W   D4,D4
  8567.     MOVE.L  TheRightColors(PC),A0
  8568.     MOVE.L  A0,A1
  8569.     ADD.W   D0,D0
  8570.     ADD.W   D1,D1
  8571.     LEA (A0,D0.W),A0    ; 1st col
  8572.     MOVE.W  (A0),D2
  8573.     LEA (A1,D1.W),A1
  8574.     MOVE.W  (A1),D3     ; 2nd col
  8575.     MOVEQ   #0,D5
  8576.  
  8577. sprdlop MOVE.W  D2,D0 ; red
  8578.     LSR.W   #8,D0
  8579.     MOVE.W  D3,D1
  8580.     LSR.W   #8,D1
  8581.     BSR ColCrossfade
  8582.     LSL.W   #8,D0
  8583.     MOVE.W  D0,D7
  8584.     MOVE.W  D2,D0 ; green
  8585.     LSR.W   #4,D0
  8586.     AND.W   #$000F,D0
  8587.     MOVE.W  D3,D1
  8588.     LSR.W   #4,D1
  8589.     AND.W   #$000F,D1
  8590.     BSR ColCrossfade
  8591.     LSL.W   #4,D0
  8592.     OR.W    D0,D7
  8593.     MOVE.W  D2,D0 ; blue
  8594.     AND.W   #$000F,D0
  8595.     MOVE.W  D3,D1
  8596.     AND.W   #$000F,D1
  8597.     BSR ColCrossfade
  8598.     OR.W    D0,D7
  8599.     ADDQ.W  #2,D5
  8600.     MOVE.W  D7,(A0)+
  8601.     CMP.L   A1,A0
  8602.     BLO sprdlop
  8603.     BRA rocoup2
  8604.  
  8605. ColCrossfade
  8606.     MOVE.W  D4,D6
  8607.     SUB.W   D5,D6
  8608.     MULU    D6,D0
  8609.     ADD.L   A2,D0
  8610.     MULU    D5,D1
  8611.     ADD.W   D1,D0
  8612.     DIVU    D4,D0
  8613.     CMP.W   #15,D0
  8614.     BLS Return1
  8615.     MOVEQ   #15,D0
  8616.     RTS
  8617.  
  8618. ShowRainbow
  8619.     MOVE.L  TextBplPtr,A0
  8620.     LEA 1490(A0),A0
  8621.     MOVEQ   #0,D1
  8622.     MOVE.L  #$00FFE000,D2
  8623.     MOVE.W  RainbowPos,D3
  8624. rainlop MOVE.L  D2,D0
  8625.     CMP.W   D3,D1
  8626.     BNE.S   rainsk1
  8627.     MOVE.L  #$1EFFEF00,D0
  8628. rainsk1 MOVE.L  D0,(A0)
  8629.     LEA 40(A0),A0
  8630.     ADDQ.W  #1,D1
  8631.     CMP.W   #48,D1
  8632.     BLO.S   rainlop
  8633.     LEA CopListAnalyzer,A0
  8634.     MOVE.L  TheRightColors(PC),A1
  8635.     MOVE.W  #$5107,D0
  8636.     MOVEQ   #47,D1
  8637.     MOVEQ   #0,D2
  8638. rainlp2 MOVE.W  D0,(A0)+
  8639.     MOVE.W  #$FFFE,(A0)+
  8640.     MOVE.W  #$018E,(A0)+
  8641.     CMP.W   ColorsMax(PC),D2
  8642.     BLO.S   rainsk2
  8643.     CLR.W   (A0)+
  8644.     BRA.S   rainsk3
  8645. rainsk2 MOVE.W  (A1)+,(A0)+
  8646. rainsk3 ADD.W   #$0100,D0
  8647.     ADDQ.W  #1,D2
  8648.     DBRA    D1,rainlp2
  8649.     MOVEQ   #63,D0
  8650. rainlp3 MOVE.L  #$01B80000,(A0)+
  8651.     DBRA    D0,rainlp3
  8652.     RTS
  8653.  
  8654. RainbowPos  dc.w    0
  8655. TheRightColors  dc.l    0
  8656. ColorsMax   dc.w    48
  8657.  
  8658. ;---- PT Decompacter ----
  8659.  
  8660. Decompact
  8661.     MOVE.L  A0,CompPtr
  8662.     MOVE.L  D0,CompLen
  8663.     BSR.S   FreeDecompMem
  8664.     MOVE.L  CompPtr(PC),A0
  8665.     MOVE.L  (A0),D0
  8666.     MOVE.L  D0,DecompMemSize
  8667.     MOVEQ   #MEMF_PUBLIC,D1
  8668.     MOVE.L  4.W,A6
  8669.     JSR LVOAllocMem(A6)
  8670.     MOVE.L  D0,DecompMemPtr
  8671.     BEQ OutOfMemErr
  8672.     MOVE.L  D0,A1
  8673.     MOVE.L  CompPtr(PC),A0
  8674.     MOVE.L  CompLen(PC),D0
  8675.     ADDQ.L  #4,A0
  8676.     SUBQ.L  #4,D0
  8677. dcmloop MOVE.B  (A0)+,D1
  8678.     CMP.B   #181,D1
  8679.     BEQ.S   DecodeIt
  8680.     MOVE.B  D1,(A1)+
  8681. decom2  SUBQ.L  #1,D0
  8682.     CMP.L   #0,D0
  8683.     BGT.S   dcmloop
  8684.     MOVE.L  DecompMemPtr,A1
  8685.     MOVEQ   #-1,D0
  8686.     RTS
  8687.  
  8688. DecodeIt
  8689.     MOVEQ   #0,D1
  8690.     MOVE.B  (A0)+,D1
  8691.     MOVE.B  (A0)+,D2
  8692. dcdloop MOVE.B  D2,(A1)+
  8693.     DBRA    D1,dcdloop
  8694.     SUBQ.L  #2,D0
  8695.     BRA.S   decom2
  8696.  
  8697. FreeDecompMem
  8698.     MOVE.L  DecompMemPtr,D0
  8699.     BEQ Return1
  8700.     MOVE.L  D0,A1
  8701.     MOVE.L  DecompMemSize,D0
  8702.     MOVE.L  4.W,A6
  8703.     JSR LVOFreeMem(A6) 
  8704.     CLR.L   DecompMemPtr
  8705.     RTS
  8706.  
  8707. CompPtr dc.l    0
  8708. CompLen dc.l    0
  8709.  
  8710. ;---- Position Insert/Delete Gadgets ----
  8711.  
  8712. PosInsDelGadgs
  8713.     MOVE.W  MouseY2,D0
  8714.     CMP.W   #11,D0
  8715.     BHS Return1
  8716.     MOVE.W  MouseX2,D0
  8717.     CMP.W   #62,D0
  8718.     BHS Return1
  8719.     CMP.W   #51,D0
  8720.     BHS.S   PosDelete
  8721.     CMP.W   #40,D0
  8722.     BHS.S   PosInsert
  8723.     RTS
  8724.  
  8725. PosInsert
  8726.     MOVE.L  SongDataPtr,A0
  8727.     LEA sd_pattpos(A0),A0
  8728.     ADD.L   #126,A0
  8729.     MOVEQ   #127,D0
  8730.     MOVE.L  CurrPos,D1
  8731.     AND.L   #127,D1
  8732. posinloop
  8733.     MOVE.B  (A0),1(A0)
  8734.     SUBQ.L  #1,A0
  8735.     SUBQ.L  #1,D0
  8736.     CMP.L   D1,D0
  8737.     BHI.S   posinloop
  8738.     CLR.B   1(A0)
  8739.     BSR ShowPosition
  8740.     CLR.W   UpOrDown
  8741.     BSR SongLengthGadg
  8742.     BRA WaitForButtonUp
  8743.  
  8744. PosDelete
  8745.     MOVE.L  SongDataPtr,A0
  8746.     LEA sd_pattpos(A0),A0
  8747.     MOVE.L  CurrPos,D0
  8748.     AND.L   #127,D0
  8749.     ADD.L   D0,A0
  8750. posdeloop
  8751.     MOVE.B  1(A0),(A0)
  8752.     ADDQ.L  #1,A0
  8753.     ADDQ.L  #1,D0
  8754.     CMP.L   #127,D0
  8755.     BLS.S   posdeloop
  8756.     CLR.B   -1(A0)
  8757.     BSR ShowPosition
  8758.     MOVE.W  #-1,UpOrDown
  8759.     BSR SongLengthGadg
  8760.     BRA WaitForButtonUp
  8761.  
  8762. ;---- Enter number gadg ----
  8763.  
  8764. EnterNumGadg
  8765.     MOVE.W  MouseY2,D1
  8766.     CMP.W   #11,D1
  8767.     BLO EnterPosGadg
  8768.     CMP.W   #22,D1
  8769.     BLO EnterPattGadg
  8770.     CMP.W   #33,D1
  8771.     BLO EnterLenGadg
  8772.     RTS
  8773.  
  8774. EnterPosGadg
  8775.     CLR.B   RawKeyCode
  8776.     MOVE.W  #76,LineCurX
  8777.     MOVE.W  #10,LineCurY
  8778.     MOVE.W  #169,TextOffset
  8779.     BSR GetDec3Dig
  8780.     TST.W   AbortDecFlag
  8781.     BNE pogskip
  8782.     CMP.W   #127,D0
  8783.     BLS.S   eposgok
  8784.     MOVEQ   #127,D0
  8785. eposgok MOVE.L  D0,CurrPos
  8786.     BRA pogskip
  8787.  
  8788. EnterPattGadg
  8789.     CLR.B   RawKeyCode
  8790.     MOVE.W  #84,LineCurX
  8791.     MOVE.W  #21,LineCurY
  8792.     MOVE.W  #610,TextOffset
  8793.     BSR GetDecByte
  8794.     TST.W   AbortDecFlag
  8795.     BNE pogskip
  8796.     CMP.B   #63,D0
  8797.     BLS.S   epgok
  8798.     MOVEQ   #63,D0
  8799. epgok   MOVE.L  SongDataPtr,A0
  8800.     LEA sd_pattpos(A0),A0
  8801.     ADD.L   CurrPos,A0
  8802.     MOVE.B  D0,(A0)
  8803.     BRA pogskip
  8804.  
  8805. EnterLenGadg
  8806.     CLR.B   RawKeyCode
  8807.     MOVE.W  #76,LineCurX
  8808.     MOVE.W  #32,LineCurY
  8809.     MOVE.W  #1049,TextOffset
  8810.     BSR GetDec3Dig
  8811.     TST.W   AbortDecFlag
  8812.     BNE ShowSongLength
  8813.     CMP.W   #128,D0
  8814.     BLS.S   elengok
  8815.     MOVE.B  #128,D0
  8816. elengok MOVE.L  SongDataPtr,A0
  8817.     LEA sd_numofpatt(A0),A0
  8818.     MOVE.B  D0,(A0)
  8819.     BRA ShowSongLength
  8820.  
  8821. GetDec3Dig
  8822.     MOVE.W  #1,AbortDecFlag
  8823.     BSR StorePtrCol
  8824.     BSR SetWaitPtrCol
  8825.     BSR UpdateLineCurPos
  8826. gd3loop BSR GetKey0_9
  8827.     CMP.W   #68,D1
  8828.     BEQ.S   gd3exit
  8829.     CMP.W   #2,D1
  8830.     BHI.S   gd3loop
  8831.     MOVE.W  D1,D0
  8832.     MULU    #100,D0
  8833.     MOVE.W  D0,gd3temp
  8834.     BSR ShowOneDigit
  8835.     ADDQ.W  #8,LineCurX
  8836.     BSR UpdateLineCurPos
  8837.     BSR GetKey0_9
  8838.     CMP.B   #68,D1
  8839.     BEQ.S   gd3exit
  8840.     MOVE.W  D1,D0
  8841.     MULU    #10,D0
  8842.     ADD.W   D0,gd3temp
  8843.     BSR ShowOneDigit
  8844.     ADDQ.W  #8,LineCurX
  8845.     BSR UpdateLineCurPos
  8846.     BSR GetKey0_9
  8847.     CMP.B   #68,D1
  8848.     BEQ.S   gd3exit
  8849.     ADD.W   D1,gd3temp
  8850.     CLR.W   AbortDecFlag
  8851. gd3exit CLR.W   LineCurX
  8852.     MOVE.W  #270,LineCurY
  8853.     BSR UpdateLineCurPos
  8854.     BSR RestorePtrCol
  8855.     MOVEQ   #0,D0
  8856.     MOVE.W  gd3temp(PC),D0
  8857.     RTS
  8858.  
  8859. gd3temp dc.w    0
  8860.  
  8861. ;----  Up/Down Gadgets ----
  8862.  
  8863. DownGadgets
  8864.     MOVE.W  #1,UpdateFreeMem
  8865.     MOVE.W  #-1,UpOrDown
  8866.     BRA.S   ug2
  8867.  
  8868. UpGadgets
  8869.     MOVE.W  #1,UpdateFreeMem
  8870.     CLR.W   UpOrDown
  8871. ug2 MOVE.W  MouseY2,D0
  8872.     CMP.W   #100,D0
  8873.     BHS Return1
  8874.     CMP.W   #89,D0
  8875.     BHS RepLenGadg
  8876.     CMP.W   #78,D0
  8877.     BHS RepeatGadg
  8878.     CMP.W   #67,D0
  8879.     BHS SampleLengthGadg
  8880.     CMP.W   #56,D0
  8881.     BHS VolumeGadg
  8882.     CMP.W   #45,D0
  8883.     BHS SampleNumGadg
  8884.     CMP.W   #34,D0
  8885.     BHS FineTuneGadg
  8886.     CMP.W   #23,D0
  8887.     BHS SongLengthGadg
  8888.     CMP.W   #12,D0
  8889.     BHS PatternGadg
  8890.     TST.W   MouseY2
  8891.     BHS.S   PositionGadg
  8892.     RTS
  8893.  
  8894. PositionGadg
  8895.     TST.W   UpOrDown
  8896.     BMI.S   PositionDown
  8897. PositionUp
  8898.     ADDQ.L  #1,CurrPos
  8899.     BTST    #2,$DFF016
  8900.     BNE.S   pogskp2
  8901.     ADD.L   #9,CurrPos
  8902. pogskp2 CMP.L   #127,CurrPos
  8903.     BLS.S   pogskip
  8904.     MOVE.L  #127,CurrPos
  8905. pogskip MOVE.L  CurrPos,SongPosition
  8906.     BSR ShowPosition
  8907.     BSR Wait_4000
  8908.     BSR Wait_4000
  8909.     BRA Wait_4000
  8910.  
  8911. PositionDown
  8912.     SUBQ.L  #1,CurrPos
  8913.     BTST    #2,$DFF016
  8914.     BNE.S   pogskp3
  8915.     SUB.L   #9,CurrPos
  8916. pogskp3 TST.L   CurrPos
  8917.     BPL.S   pogskip
  8918.     CLR.L   CurrPos
  8919.     BRA.S   pogskip
  8920.  
  8921. PatternGadg
  8922.     MOVE.L  SongDataPtr,A0
  8923.     LEA sd_pattpos(A0),A0
  8924.     TST.W   UpOrDown
  8925.     BMI.S   PatternDown
  8926. PatternUp
  8927.     ADD.L   CurrPos,A0
  8928.     ADDQ.B  #1,(A0)
  8929.     BTST    #2,$DFF016
  8930.     BNE.S   pagaskp
  8931.     ADD.B   #9,(A0)
  8932. pagaskp CMP.B   #63,(A0)
  8933.     BLS.S   pogskip
  8934.     MOVE.B  #63,(A0)
  8935.     BRA.S   pogskip
  8936.  
  8937. PatternDown
  8938.     ADD.L   CurrPos,A0
  8939.     SUBQ.B  #1,(A0)
  8940.     BTST    #2,$DFF016
  8941.     BNE.S   padoskp
  8942.     SUB.B   #9,(A0)
  8943. padoskp TST.B   (A0)
  8944.     BPL pogskip
  8945.     CLR.B   (A0)
  8946.     BRA pogskip
  8947.  
  8948.  
  8949. SongLengthGadg
  8950.     MOVE.L  SongDataPtr,A0
  8951.     LEA sd_numofpatt(A0),A0
  8952.     TST.W   UpOrDown
  8953.     BMI.S   SongLengthDown
  8954. SongLengthUp
  8955.     ADDQ.B  #1,(A0)
  8956.     BTST    #2,$DFF016
  8957.     BNE.S   slupskp
  8958.     ADD.B   #9,(A0)
  8959. slupskp CMP.B   #127,(A0)
  8960.     BMI.S   solgskip
  8961.     MOVE.B  #127,(A0)
  8962. solgskip
  8963.     BSR ShowSongLength
  8964.     BSR Wait_4000
  8965.     BSR Wait_4000
  8966.     BRA Wait_4000
  8967.  
  8968. SongLengthDown
  8969.     SUBQ.B  #1,(A0)
  8970.     BTST    #2,$DFF016
  8971.     BNE.S   sldoskp
  8972.     SUB.B   #9,(A0)
  8973. sldoskp CMP.B   #1,(A0)
  8974.     BGE.S   solgskip
  8975.     MOVE.B  #1,(A0)
  8976.     BRA.S   solgskip
  8977.  
  8978.  
  8979. SampleNumGadg
  8980.     BTST    #2,$DFF016  ; Check Right Mousebutton
  8981.     BNE.S   SampleNum2
  8982.     TST.W   InsNum
  8983.     BEQ ShowSampleInfo
  8984.     MOVE.W  InsNum,LastInsNum
  8985.     CLR.W   InsNum
  8986.     BRA ShowSampleInfo
  8987.  
  8988. SampleNum2
  8989.     TST.W   UpOrDown
  8990.     BMI.S   SampleNumDown
  8991. SampleNumUp
  8992.     ADDQ.W  #1,InsNum
  8993.     CMP.W   #31,InsNum
  8994.     BMI.S   snuskip
  8995.     MOVE.W  #31,InsNum
  8996. snuskip BSR redrsam
  8997.     BSR Wait_4000
  8998.     BRA Wait_4000
  8999.  
  9000. SampleNumDown
  9001.     TST.W   InsNum
  9002.     BEQ.S   snuskip
  9003.     SUBQ.W  #1,InsNum
  9004.     CMP.W   #1,InsNum
  9005.     BPL.S   snuskip
  9006.     MOVE.W  #1,InsNum
  9007.     BRA.S   snuskip
  9008.  
  9009. FineTuneGadg
  9010.     MOVE.L  SongDataPtr,A0
  9011.     LEA 12(A0),A0
  9012.     MOVE.W  InsNum,D0
  9013.     BEQ Return1
  9014.     MULU    #30,D0
  9015.     ADD.L   D0,A0
  9016.     BTST    #2,$DFF016
  9017.     BNE.S   ftgskip
  9018.     CLR.B   2(A0)
  9019.     BRA.S   ftuskip
  9020. ftgskip TST.W   UpOrDown
  9021.     BMI.S   FineTuneDown
  9022. FineTuneUp
  9023.     AND.B   #$0F,2(A0)
  9024.     CMP.B   #7,2(A0)
  9025.     BEQ.S   ftuskip
  9026.     ADDQ.B  #1,2(A0)
  9027.     AND.B   #$0F,2(A0)
  9028. ftuskip BSR ShowSampleInfo
  9029.     BSR Wait_4000
  9030.     BRA Wait_4000
  9031.  
  9032. FineTuneDown
  9033.     AND.B   #$0F,2(A0)
  9034.     CMP.B   #8,2(A0)
  9035.     BEQ.S   ftuskip
  9036.     SUBQ.B  #1,2(A0)
  9037.     AND.B   #$0F,2(A0)
  9038.     BRA.S   ftuskip
  9039.  
  9040.  
  9041. VolumeGadg
  9042.     MOVE.L  SongDataPtr,A0
  9043.     LEA 12(A0),A0
  9044.     MOVE.W  InsNum,D0
  9045.     BEQ Return1
  9046.     MULU    #30,D0
  9047.     ADD.L   D0,A0
  9048.     TST.W   UpOrDown
  9049.     BMI.S   VolumeDown
  9050. VolumeUp
  9051.     ADDQ.B  #1,3(A0)
  9052.     BTST    #2,$DFF016
  9053.     BNE.S   voupskp
  9054.     ADD.B   #15,3(A0)
  9055. voupskp CMP.B   #$40,3(A0)
  9056.     BLS.S   ftuskip
  9057.     MOVE.B  #$40,3(A0)
  9058.     BRA.S   ftuskip
  9059.  
  9060. VolumeDown
  9061.     SUBQ.B  #1,3(A0)
  9062.     BTST    #2,$DFF016
  9063.     BNE.S   vodoskp
  9064.     SUB.B   #15,3(A0)
  9065. vodoskp TST.B   3(A0)
  9066.     BPL ftuskip
  9067.     CLR.B   3(A0)
  9068.     BRA ftuskip
  9069.  
  9070. SampleLengthGadg
  9071.     MOVE.W  #1,SampleLengthFlag
  9072.     MOVE.L  SongDataPtr,A0
  9073.     LEA 12(A0),A0
  9074.     MOVEQ   #0,D0
  9075.     MOVE.W  InsNum,D0
  9076.     BEQ ShowSampleInfo
  9077.     MULU    #30,D0
  9078.     ADD.L   D0,A0
  9079.     TST.W   UpOrDown
  9080.     BMI.S   SampleLengthDown
  9081. SampleLengthUp
  9082.     ADDQ.W  #1,(A0)
  9083.     BTST    #2,$DFF016
  9084.     BNE.S   sluskip
  9085.     CMP.W   #$7FF0,(A0)
  9086.     BHS.S   sluskip
  9087.     ADDQ.W  #7,(A0)
  9088. sluskip CMP.W   #$7FFF,(A0)
  9089.     BLO ShowSampleInfo
  9090.     MOVE.W  #$7FFF,(A0)
  9091.     BRA ShowSampleInfo
  9092.  
  9093. SampleLengthDown
  9094.     MOVE.W  4(A0),D0
  9095.     ADD.W   6(A0),D0
  9096.     SUBQ.W  #1,(A0)
  9097.     BTST    #2,$DFF016
  9098.     BNE.S   sldskip
  9099.     SUBQ.W  #7,(A0)
  9100. sldskip BMI.S   sldskip2
  9101.     CMP.W   (A0),D0
  9102.     BLS ShowSampleInfo
  9103.     MOVE.W  D0,(A0)
  9104.     BRA ShowSampleInfo
  9105. sldskip2
  9106.     CLR.W   (A0)
  9107.     BRA ShowSampleInfo
  9108.  
  9109. SampleLengthFlag dc.w 0
  9110.  
  9111. CheckSampleLength
  9112.     TST.W   SampleLengthFlag
  9113.     BEQ Return1
  9114.     CLR.W   SampleLengthFlag
  9115.     MOVEQ   #0,D0
  9116.     MOVE.W  InsNum,D0
  9117.     BEQ Return1
  9118.     MOVE.L  SongDataPtr,A0
  9119.     LEA 12(A0),A0
  9120.     MOVE.L  D0,D1
  9121.     LSL.W   #2,D1
  9122.     MULU    #30,D0
  9123.     ADD.L   D0,A0
  9124.     LEA SamplePtrs,A1
  9125.     LEA (A1,D1.W),A1
  9126.     MOVE.L  A0,PlaySamPtr
  9127.     MOVE.L  A1,RealSamPtr
  9128.     MOVE.L  124(A1),D0
  9129.     LSR.L   #1,D0
  9130.     MOVE.W  (A0),D1
  9131.     CMP.W   D0,D1
  9132.     BHI.S   ItsTooMuch
  9133.     RTS
  9134.  
  9135. ItsTooMuch
  9136.     LEA AddWorkSpaceText(PC),A0
  9137.     BSR AreYouSure
  9138.     BNE.S   RestoreLength
  9139.     BSR TurnOffVoices
  9140.     MOVE.L  PlaySamPtr,A0
  9141.     MOVEQ   #0,D0
  9142.     MOVE.W  (A0),D0
  9143.     LSL.L   #1,D0
  9144.     MOVE.L  D0,SamAllocLen
  9145.     MOVE.L  #MEMF_CHIP!MEMF_CLEAR,D1
  9146.     MOVE.L  4.W,A6
  9147.     JSR LVOAllocMem(A6)
  9148.     MOVE.L  D0,SamAllocPtr
  9149.     BEQ.S   RestoreLength
  9150.     MOVE.L  D0,A1
  9151.     MOVE.L  RealSamPtr,A0
  9152.     MOVE.L  (A0),D0
  9153.     BEQ.S   nosamth
  9154.     MOVE.L  D0,A2
  9155.     MOVE.L  124(A0),D1
  9156.     BEQ.S   nosamth
  9157.     SUBQ.L  #1,D1
  9158. cpsalop MOVE.B  (A2)+,(A1)+
  9159.     DBRA    D1,cpsalop
  9160.     MOVE.L  (A0),A1
  9161.     MOVE.L  124(A0),D0
  9162.     MOVE.L  4.W,A6
  9163.     JSR LVOFreeMem(A6)
  9164. nosamth MOVE.L  RealSamPtr,A0
  9165.     MOVE.L  SamAllocPtr,(A0)
  9166.     MOVE.L  SamAllocLen,124(A0)
  9167.     BSR ShowSampleInfo
  9168.     BSR RedrawSample
  9169.     BRA WaitForButtonUp
  9170.  
  9171. RestoreLength
  9172.     MOVE.L  PlaySamPtr,A0
  9173.     MOVE.L  RealSamPtr,A1
  9174.     MOVE.L  124(A1),D0
  9175.     LSR.L   #1,D0
  9176.     MOVE.W  D0,(A0)
  9177.     BRA ShowSampleInfo
  9178.  
  9179. AddWorkSpaceText dc.b 'add workspace ?',0
  9180. PlaySamPtr  dc.l 0
  9181. RealSamPtr  dc.l 0
  9182. SamAllocPtr dc.l 0
  9183. SamAllocLen dc.l 0
  9184.  
  9185. RepeatGadg
  9186.     MOVE.L  SongDataPtr,A0
  9187.     LEA 12(A0),A0
  9188.     MOVEQ   #0,D0
  9189.     MOVE.W  InsNum,D0
  9190.     BEQ ShowSampleInfo
  9191.     MULU    #30,D0
  9192.     ADD.L   D0,A0
  9193.     TST.W   UpOrDown
  9194.     BMI.S   RepeatDown
  9195. RepeatUp
  9196.     ADDQ.W  #1,4(A0)
  9197.     BTST    #2,$DFF016
  9198.     BNE.S   ruskip
  9199.     ADDQ.W  #7,4(A0)
  9200. ruskip  MOVE.W  (A0),D0     ;   Length
  9201.     BEQ.S   ruskip2
  9202.     SUB.W   6(A0),D0    ; - RepLen
  9203.     CMP.W   4(A0),D0
  9204.     BHI.S   ruskip2
  9205.     MOVE.W  D0,4(A0)
  9206. ruskip2 BSR ShowSampleInfo
  9207.     BSR UpdateRepeats
  9208.     BRA SetLoopSprites2
  9209.  
  9210. RepeatDown
  9211.     SUBQ.W  #1,4(A0)
  9212.     BTST    #2,$DFF016
  9213.     BNE.S   rdskip
  9214.     SUBQ.W  #7,4(A0)
  9215. rdskip  TST.W   4(A0)
  9216.     BPL.S   ruskip2
  9217.     CLR.W   4(A0)
  9218.     BRA.S   ruskip2
  9219.  
  9220.  
  9221. RepLenGadg
  9222.     MOVE.L  SongDataPtr,A0
  9223.     LEA 12(A0),A0
  9224.     MOVEQ   #0,D0
  9225.     MOVE.W  InsNum,D0
  9226.     BEQ ShowSampleInfo
  9227.     MULU    #30,D0
  9228.     ADD.L   D0,A0
  9229.     TST.W   UpOrDown
  9230.     BMI.S   RepLenDown
  9231. RepLenUp
  9232.     ADDQ.W  #1,6(A0)
  9233.     BTST    #2,$DFF016  ; Check Right Mousebutton
  9234.     BNE.S   rluskip
  9235.     ADDQ.W  #7,6(A0)
  9236. rluskip MOVE.W  (A0),D0
  9237.     BEQ.S   ruskip2
  9238.     SUB.W   4(A0),D0
  9239.     CMP.W   6(A0),D0
  9240.     BHI.S   ruskip2
  9241.     BRA.S   rldskip
  9242.  
  9243. RepLenDown
  9244.     MOVEQ   #0,D0
  9245.     MOVE.W  6(A0),D0
  9246.     SUBQ.L  #1,D0
  9247.     BTST    #2,$DFF016
  9248.     BNE.S   rldskip
  9249.     SUBQ.L  #7,D0
  9250. rldskip CMP.L   #1,D0
  9251.     BGE.S   rldskp2
  9252.     MOVEQ   #1,D0
  9253. rldskp2 MOVE.W  D0,6(A0)
  9254.     BRA ruskip2
  9255.  
  9256. Wait_4000
  9257.     MOVE.W  #$4000,D0
  9258.     TST.B   HHFlag
  9259.     BEQ.S   wl_loop
  9260.     MOVE.W  #$FFFF,D0
  9261. wl_lop1 DBRA    D0,wl_lop1
  9262.     MOVE.W  #$A000,D0
  9263. wl_loop DBRA    D0,wl_loop
  9264.     RTS
  9265.  
  9266. UpdateRepeats
  9267.     LEA audchan1temp,A1
  9268.     LEA $DFF0A0,A2
  9269.     LEA ScopeInfo,A3
  9270.     BSR.S   upre2
  9271.     LEA audchan2temp,A1
  9272.     LEA $DFF0B0,A2
  9273.     LEA ScopeInfo+20,A3
  9274.     BSR.S   upre2
  9275.     LEA audchan3temp,A1
  9276.     LEA $DFF0C0,A2
  9277.     LEA ScopeInfo+40,A3
  9278.     BSR.S   upre2
  9279.     LEA audchan4temp,A1
  9280.     LEA $DFF0D0,A2
  9281.     LEA ScopeInfo+60,A3
  9282. upre2   MOVE.W  InsNum,D0
  9283.     CMP.B   n_samplenum(A1),D0
  9284.     BNE Return1
  9285.     MOVE.L  n_start(A1),A1
  9286.     MOVEQ   #0,D0
  9287.     MOVE.W  4(A0),D0    ; repeat
  9288.     ADD.L   D0,A1
  9289.     ADD.L   D0,A1
  9290.     MOVE.L  A1,(A2)
  9291.     MOVE.W  6(A0),D0
  9292.     MOVE.W  D0,4(A2)    ; replen
  9293.     MOVE.L  A1,ns_repeatptr(A3)
  9294.     ADD.L   D0,A1
  9295.     ADD.L   D0,A1
  9296.     MOVE.L  A1,ns_rependptr(A3)
  9297.     RTS
  9298.  
  9299. SetPatternPos
  9300.     MOVE.L  PatternPosition,D0
  9301.     LSR.L   #4,D0
  9302.     BRA.S   ssppskip
  9303.  
  9304. SetScrPatternPos
  9305.     MOVE.W  ScrPattPos,D0
  9306. ssppskip
  9307.     TST.W   SamScrEnable
  9308.     BNE Return1
  9309.     MOVE.W  D0,PlayFromPos
  9310.     MULU    #7*40,D0
  9311.     MOVE.L  TextBplPtr,A0
  9312.     LEA $15B8(A0),A0
  9313.     ADD.L   A0,D0
  9314.     MOVE.L  CopListBpl4Ptr(PC),A1
  9315.     MOVE.W  D0,6(A1)
  9316.     SWAP    D0
  9317.     MOVE.W  D0,2(A1)
  9318.     RTS
  9319.  
  9320. PlayFromPos dc.w 0
  9321.  
  9322. WantedPattGadg
  9323.     TST.W   SamScrEnable
  9324.     BNE CheckSamGadgets
  9325. TypeInWantedPatt
  9326.     CMP.W   #138,D1
  9327.     BHI.S   tiwp2
  9328.     CMP.W   #25,D0
  9329.     BHI TempoGadg
  9330. tiwp2   CMP.L   #'patp',RunMode ; not if a song is playing...
  9331.     BEQ Return1
  9332.     CLR.B   RawKeyCode
  9333.     MOVE.W  #12,LineCurX
  9334.     MOVE.W  #$0086,LineCurY
  9335.     MOVE.W  #5121,TextOffset
  9336.     BSR GetDecByte
  9337.     TST.W   AbortDecFlag
  9338.     BNE.S   twexit
  9339.     MOVE.B  D0,PatternNumber+3
  9340.     CMP.L   #63,PatternNumber
  9341.     BLS.S   twexit
  9342.     MOVE.L  #63,PatternNumber
  9343. twexit  BRA RedrawPattern
  9344.  
  9345. GetKey0_9
  9346.     BTST    #2,$DFF016
  9347.     BEQ.S   gk_ret
  9348.     MOVEQ   #0,D0
  9349.     BSR DoKeyBuffer
  9350.     MOVE.B  RawKeyCode,D0
  9351.     BEQ.S   GetKey0_9
  9352.     CLR.B   RawKeyCode
  9353.     CMP.B   #68,D0
  9354.     BEQ.S   gk_ret
  9355.     CMP.B   #69,D0
  9356.     BEQ.S   gk_ret
  9357.     CMP.B   #10,D0
  9358.     BEQ.S   gk_end
  9359.     BHI.S   GetKey0_9
  9360.     CMP.B   #1,D0
  9361.     BLO.S   GetKey0_9
  9362.     MOVE.L  D0,D1
  9363.     RTS
  9364.  
  9365. gk_end  MOVEQ   #0,D1
  9366.     RTS
  9367.  
  9368. gk_ret  MOVEQ   #68,D1
  9369.     RTS
  9370.  
  9371. ShowOneDigit
  9372.     ADD.B   #'0',D1
  9373.     MOVE.B  D1,NumberText
  9374.     CLR.W   D1
  9375.     SWAP    D1
  9376.     MOVE.W  #1,TextLength
  9377.     MOVE.L  #NumberText,ShowTextPtr
  9378.     BSR ShowText
  9379.     CLR.L   NumberText
  9380.     CLR.W   WordNumber
  9381.     RTS
  9382.  
  9383. ;---- Get Text Line ----
  9384.  
  9385. GetTextLine
  9386.     MOVEQ   #0,D0
  9387.     MOVE.W  A4,D0
  9388.     DIVU    #40,D0
  9389.     ADDQ.W  #5,D0
  9390.     MOVE.W  D0,LineCurY
  9391.     SWAP    D0
  9392.     LSL.W   #3,D0
  9393.     ADDQ.W  #4,D0
  9394.     MOVE.W  D0,LineCurX
  9395.     BSR UpdateLineCurPos
  9396.     MOVE.L  ShowTextPtr,DSTPtr
  9397.     CLR.L   DSTOffset
  9398.     CLR.L   DSTPos
  9399.     MOVE.W  #1,GetLineFlag
  9400.     MOVE.L  A4,A5
  9401.     MOVE.W  LineCurX,D5
  9402.     CLR.B   RawKeyCode
  9403.     BSR UpdateText
  9404. WaitForKey
  9405.     BTST    #2,$DFF016
  9406.     BEQ AbortGetLine
  9407.     BTST    #6,$BFE001
  9408.     BEQ LineClicked
  9409.     BSR DoKeyBuffer
  9410.     MOVEQ   #0,D1
  9411.     MOVE.B  RawKeyCode,D1
  9412.     BEQ.S   WaitForKey
  9413.     CMP.B   #78,D1
  9414.     BEQ MoveCharRight
  9415.     CMP.B   #79,D1
  9416.     BEQ MoveCharLeft
  9417.     CMP.B   #70,D1
  9418.     BEQ DeleteChar
  9419.     CMP.B   #65,D1
  9420.     BEQ BackspaceChar
  9421.     CMP.B   #68,D1
  9422.     BEQ GetLineReturn
  9423.     CMP.B   #69,D1
  9424.     BEQ GetLineReturn
  9425.     BTST    #7,D1
  9426.     BNE.S   WaitForKey
  9427.     LEA UnshiftedKeymap,A4
  9428.     TST.W   ShiftKeyStatus
  9429.     BEQ.S   gtlskip
  9430.     LEA ShiftedKeymap,A4
  9431. gtlskip AND.W   #$007F,D1
  9432.     CMP.B   #64,D1
  9433.     BHI.S   WaitForKey
  9434.     MOVE.B  (A4,D1.W),D1
  9435.     BEQ.S   WaitForKey
  9436.     TST.B   EnterTextFlag
  9437.     BEQ.S   TextLineKey
  9438.     CMP.B   #'0',D1
  9439.     BLO WaitForKey
  9440.     CMP.B   #'f',D1
  9441.     BHI WaitForKey
  9442.     CMP.B   #'a',D1
  9443.     BHS.S   TextLineKey
  9444.     CMP.B   #'9',D1
  9445.     BHI WaitForKey
  9446. TextLineKey
  9447.     CMP.L   TextEndPtr,A6
  9448.     BEQ WaitForKey
  9449.     MOVE.L  TextEndPtr,A4
  9450. tlkloop MOVE.B  -(A4),1(A4)
  9451.     CMP.L   A4,A6
  9452.     BNE.S   tlkloop
  9453.     MOVE.L  TextEndPtr,A4
  9454.     CLR.B   (A4)
  9455.     MOVE.B  D1,(A6)+
  9456.     BSR PosMoveRight
  9457.     BSR UpdateText
  9458.     CLR.B   RawKeyCode
  9459.     BRA WaitForKey
  9460.  
  9461. LineClicked
  9462.     MOVE.W  MouseY,D1
  9463.     SUB.W   LineCurY,D1
  9464.     CMP.W   #2,D1
  9465.     BGT GetLineReturn
  9466.     CMP.W   #-8,D1
  9467.     BLT GetLineReturn
  9468.     MOVE.W  MouseX,D1
  9469.     SUB.W   LineCurX,D1
  9470.     ADDQ.W  #4,D1
  9471.     ASR.W   #3,D1
  9472.     BEQ WaitForKey
  9473.     BPL.S   linclri
  9474.  
  9475.     CMP.L   DSTPtr(PC),A6
  9476.     BEQ WaitForKey
  9477.     SUBQ.L  #1,A6
  9478.     BSR PosMoveLeft
  9479. upwake2 BSR UpdateText
  9480.     BRA WaitForKey
  9481.  
  9482. linclri CMP.L   TextEndPtr,A6
  9483.     BEQ WaitForKey
  9484.     TST.B   (A6)
  9485.     BEQ WaitForKey
  9486.     ADDQ.L  #1,A6
  9487.     BSR PosMoveRight
  9488.     BRA.S   upwake2
  9489.  
  9490. PosMoveRight
  9491.     MOVE.L  DSTPos,D0
  9492.     MOVEQ   #0,D1
  9493.     MOVE.W  TextLength,D1
  9494.     TST.B   EnterTextFlag
  9495.     BNE.S   pmrskip
  9496.     SUBQ.W  #1,D1
  9497. pmrskip CMP.L   D1,D0
  9498.     BLO.S   posrok
  9499.     ADDQ.L  #1,DSTOffset
  9500.     BRA UpdateLineCurPos
  9501. posrok  ADDQ.L  #1,DSTPos
  9502.     ADDQ.W  #8,LineCurX
  9503.     BRA UpdateLineCurPos
  9504.  
  9505. PosMoveLeft
  9506.     TST.L   DSTPos
  9507.     BNE.S   poslok
  9508.     SUBQ.L  #1,DSTOffset
  9509.     BRA UpdateLineCurPos   
  9510. poslok  SUBQ.L  #1,DSTPos
  9511.     SUBQ.W  #8,LineCurX
  9512.     BRA UpdateLineCurPos
  9513.  
  9514. BackspaceChar
  9515.     CMP.L   DSTPtr(PC),A6
  9516.     BEQ WaitForKey
  9517.     SUBQ.L  #1,A6
  9518.     MOVE.L  A6,A4
  9519. dobaloop
  9520.     MOVE.B  1(A4),(A4)+
  9521.     CMP.L   TextEndPtr,A4
  9522.     BNE.S   dobaloop
  9523.     BSR PosMoveLeft
  9524. upwake  BSR UpdateText
  9525.     BSR Wait_4000
  9526.     BSR Wait_4000
  9527.     BSR Wait_4000
  9528.     BRA WaitForKey
  9529.  
  9530. DeleteChar
  9531.     MOVE.L  A6,A4
  9532. dechloop
  9533.     MOVE.B  1(A4),(A4)+
  9534.     CMP.L   TextEndPtr,A4
  9535.     BLO.S   dechloop
  9536.     BRA.S   upwake
  9537.  
  9538. MoveCharRight
  9539.     CMP.L   TextEndPtr,A6
  9540.     BEQ WaitForKey
  9541.     TST.B   (A6)
  9542.     BEQ WaitForKey
  9543.     ADDQ.L  #1,A6
  9544.     BSR PosMoveRight
  9545.     BRA.S   upwake
  9546.  
  9547. MoveCharLeft
  9548.     CMP.L   DSTPtr(PC),A6
  9549.     BEQ WaitForKey
  9550.     SUBQ.L  #1,A6
  9551.     BSR PosMoveLeft
  9552.     BRA.S   upwake
  9553.  
  9554. GetLineReturn
  9555.     MOVE.L  DSTPtr,A6
  9556.     CMP.B   #1,EnterTextFlag
  9557.     BNE.S   gtl_rskip
  9558.     TST.B   DiskNumText2
  9559.     BEQ WaitForKey
  9560. gtl_rskip
  9561.     CMP.B   #3,EnterTextFlag
  9562.     BNE.S   gtl_rskip2
  9563.     TST.B   SndDiskNum1
  9564.     BEQ WaitForKey
  9565. gtl_rskip2
  9566.     MOVE.L  A6,A4
  9567. dlrloop TST.B   (A4)+
  9568.     BNE.S   dlrloop
  9569.     SUBQ.L  #1,A4
  9570. dlrloop2
  9571.     CMP.L   TextEndPtr,A4
  9572.     BHS.S   dlrexit
  9573.     CLR.B   (A4)+
  9574.     BRA.S   dlrloop2
  9575.  
  9576. dlrexit CLR.W   LineCurX
  9577.     MOVE.W  #270,LineCurY
  9578.     BSR UpdateLineCurPos
  9579.     CLR.W   GetLineFlag
  9580.     MOVE.B  RawKeyCode,MixChar
  9581.     CLR.B   RawKeyCode
  9582.     CLR.L   DSTOffset
  9583.     BSR.S   UpdateText
  9584.     BRA WaitForButtonUp
  9585.  
  9586. AbortGetLine
  9587.     MOVE.L  DSTPtr,A6
  9588.     MOVE.L  A6,A4
  9589. clliloop
  9590.     CLR.B   (A4)+
  9591.     CMP.L   TextEndPtr,A4
  9592.     BNE.S   clliloop
  9593.     BSR.S   UpdateText
  9594.     BRA GetLineReturn
  9595.  
  9596. UpdateText
  9597.     MOVE.W  A5,TextOffset
  9598.     MOVE.L  DSTPtr,A0
  9599.     ADD.L   DSTOffset,A0
  9600.     BRA ShowText2
  9601.  
  9602. DSTPtr      dc.l    0
  9603. DSTPos      dc.l    0
  9604. DSTOffset   dc.l    0
  9605.  
  9606. ;----
  9607.  
  9608. TypeInSongName
  9609.     BSR StorePtrCol
  9610.     BSR SetWaitPtrCol
  9611.     CLR.L   EditMode
  9612.     MOVE.L  SongDataPtr,A6
  9613.     MOVE.L  A6,TextEndPtr
  9614.     MOVE.L  A6,ShowTextPtr
  9615.     ADD.L   #19,TextEndPtr
  9616.     MOVE.W  #20,TextLength
  9617.     MOVE.W  #4133,A4
  9618.     BSR GetTextLine
  9619.     CLR.L   TextEndPtr
  9620.     BRA RestorePtrCol
  9621.  
  9622. CheckSmplNamOrLoad
  9623.     CMP.W   #287,MouseX2
  9624.     BHS LoadNamedSample
  9625. TypeInSampleName
  9626.     BSR StorePtrCol
  9627.     BSR SetWaitPtrCol
  9628.     CLR.L   EditMode
  9629.     MOVE.L  SongDataPtr,A6
  9630.     LEA -10(A6),A6
  9631.     MOVE.W  InsNum,D7
  9632.     BNE.S   tisnskip
  9633.     MOVE.W  LastInsNum,D7
  9634. tisnskip
  9635.     MULU    #30,D7
  9636.     ADD.L   D7,A6
  9637.     MOVE.L  A6,TextEndPtr
  9638.     MOVE.L  A6,ShowTextPtr
  9639.     ADD.L   #21,TextEndPtr
  9640.     MOVE.W  #22,TextLength
  9641.     MOVE.W  #4573,A4
  9642.     BSR GetTextLine
  9643.     CLR.L   TextEndPtr
  9644.     BRA RestorePtrCol
  9645.  
  9646. LoadSample
  9647.     TST.W   InsNum
  9648.     BEQ NotSampleNull
  9649.     BSR StorePtrCol
  9650.     LEA SamplePath2,A0
  9651.     BSR CopyPath
  9652.     LEA DirInputName,A0
  9653.     MOVEQ   #DirNameLength-1,D0
  9654. lsloop  MOVE.B  (A0)+,(A1)+
  9655.     DBRA    D0,lsloop
  9656.     MOVE.L  SongDataPtr,A0
  9657.     MOVE.W  InsNum,D0
  9658.     MULU    #30,D0
  9659.     LEA -10(A0),A0
  9660.     ADD.L   D0,A0
  9661.     LEA DirInputName,A1
  9662.     MOVEQ   #21,D0
  9663. lsloop2 MOVE.B  (A1)+,(A0)+
  9664.     DBRA    D0,lsloop2
  9665.     BSR SetDiskPtrCol
  9666.     MOVE.L  #FileName,D1
  9667.     BSR ExamineAndAlloc
  9668.     BEQ ErrorRestoreCol
  9669.     MOVE.L  #FileName,D1
  9670.     BRA lnssec2
  9671.  
  9672. CheckForIFF2 ; load loop
  9673.     MOVEQ   #-1,D2
  9674.     BRA.S   ciff2
  9675. CheckForIFF
  9676.     MOVEQ   #0,D2
  9677. ciff2   MOVEQ   #0,D1
  9678.     CMP.L   #'FORM',(A0)
  9679.     BNE.S   wiskip
  9680.     CMP.L   #'8SVX',8(A0)
  9681.     BNE.S   wiskip
  9682.     MOVE.L  A0,A2
  9683.     MOVE.L  A1,D0
  9684.     ADD.L   A0,A1
  9685.     TST.L   D2
  9686.     BEQ.S   cfiloop
  9687.     BSR.S   CheckIFFLoop
  9688. cfiloop CMP.L   #'BODY',(A0)
  9689.     BEQ.S   wasiff
  9690.     ADDQ.L  #2,A0
  9691.     CMP.L   A1,A0
  9692.     BLS.S   cfiloop
  9693.     RTS
  9694.  
  9695. WasIFF  ADDQ.L  #8,A0
  9696.     ADD.L   A2,D0
  9697.     SUB.L   A0,D0
  9698. wiloop  MOVE.B  (A0)+,(A2)+
  9699.     CMP.L   A1,A0
  9700.     BLS.S   wiloop
  9701.     MOVE.L  SampleInstrSave(PC),A3
  9702.     LSR.W   #1,D0
  9703.     MOVE.W  22(A3),D1
  9704.     SUB.W   D0,D1
  9705.     MOVE.W  D0,22(A3)
  9706. wiskip  LEA SampleLengthAdd(PC),A3
  9707.     MOVE.W  InsNum,D0
  9708.     LSL.W   #1,D0
  9709.     MOVE.W  D1,(A3,D0.W)
  9710.     RTS
  9711.  
  9712. CheckIFFLoop
  9713.     TST.B   IFFLoopFlag
  9714.     BEQ Return2
  9715.     MOVEM.L A0/D0,-(SP)
  9716. cilloop CMP.L   #'VHDR',(A0)
  9717.     BEQ.S   wasvhdr
  9718.     ADDQ.L  #2,A0
  9719.     CMP.L   A1,A0
  9720.     BLS.S   cilloop
  9721. cilend  MOVEM.L (SP)+,A0/D0
  9722.     RTS
  9723.  
  9724. wasvhdr MOVE.L  SampleInstrSave(PC),A3
  9725.     MOVE.L  12(A0),D0
  9726.     BEQ.S   cilend
  9727.     LSR.W   #1,D0
  9728.     MOVE.W  D0,28(A3)
  9729.     MOVE.L  8(A0),D0
  9730.     BNE.S   wsvhdr2
  9731.     MOVEQ   #2,D0
  9732. wsvhdr2 LSR.W   #1,D0
  9733.     MOVE.W  D0,26(A3)
  9734.     BRA.S   cilend
  9735.  
  9736.  
  9737. SampleInstrSave dc.l    0
  9738. SampleLengthAdd dcb.w   32,0
  9739.  
  9740. ExamineAndAlloc
  9741.     MOVEQ   #-2,D2
  9742.     MOVE.L  DOSBase,A6
  9743.     JSR LVOLock(A6)
  9744.     MOVE.L  D0,FileLock
  9745.     BEQ CantFindFile
  9746.     MOVE.L  D0,D1
  9747.     MOVE.L  #FileInfoBlock,D2
  9748.     JSR LVOExamine(A6)
  9749.     TST.L   FIB_EntryType
  9750.     BPL CantExamFile
  9751.     MOVE.L  FileLock,D1
  9752.     JSR LVOUnLock(A6)
  9753.     MOVE.L  FIB_FileSize,D0
  9754.     BEQ FileIsEmpty
  9755.     BSR TurnOffVoices
  9756.     BSR FreeSample
  9757.     MOVE.L  FIB_FileSize,D0
  9758.     CMP.L   #$FFFE,D0
  9759.     BLS.S   exalloc
  9760.     MOVE.L  #$FFFE,D0
  9761. exalloc LEA SamplePtrs,A4
  9762.     MOVE.W  InsNum(PC),D1
  9763.     LSL.W   #2,D1
  9764.     ADD.W   D1,A4
  9765.     MOVE.L  D0,124(A4)
  9766.     MOVE.L  D0,DiskDataLength
  9767.     MOVE.L  4.W,A6
  9768.     MOVE.L  #MEMF_CHIP!MEMF_CLEAR,D1
  9769.     JSR LVOAllocMem(A6)
  9770.     MOVE.L  D0,DiskDataPtr
  9771.     MOVE.L  D0,(A4)
  9772.     BEQ OutOfMemErr
  9773.     LEA LoadingSampleText(PC),A0
  9774.     BSR ShowStatusText
  9775.     MOVE.L  SongDataPtr,A0
  9776.     MOVE.W  InsNum(PC),D0
  9777.     MULU    #30,D0
  9778.     LEA -10(A0),A0
  9779.     ADD.L   D0,A0
  9780.     MOVE.L  A0,SampleInstrSave
  9781.     MOVE.L  DiskDataLength,D0
  9782.     LSR.L   #1,D0
  9783.     MOVE.W  D0,22(A0)
  9784.     MOVE.L  #$00400000,24(A0)
  9785.     MOVE.W  #1,28(A0)
  9786.     BSR ShowSampleInfo
  9787.     MOVEQ   #-1,D0
  9788.     RTS
  9789.  
  9790. LoadNamedSample
  9791.     TST.W   InsNum
  9792.     BEQ NotSampleNull
  9793.     BSR StorePtrCol
  9794.     BSR CreateSampleName
  9795.     BSR SetDiskPtrCol
  9796.     MOVE.L  FileNamePtr,D1
  9797.     BSR ExamineAndAlloc
  9798.     BEQ Return2
  9799.     MOVE.L  FileNamePtr,D1
  9800. lnssec2 MOVE.L  DOSbase(PC),A6
  9801.     MOVE.L  #1005,D2
  9802.     JSR LVOOpen(A6)
  9803.     MOVE.L  D0,D7
  9804.     BEQ CantOpenFile
  9805.     MOVE.L  D0,D1
  9806.     MOVE.L  DiskDataPtr(PC),D2
  9807.     MOVE.L  DiskDataLength(PC),D3
  9808.     JSR LVORead(A6)
  9809.     MOVE.L  D7,D1
  9810.     JSR LVOClose(A6)
  9811.     MOVE.L  DiskDataPtr(PC),A0
  9812.     MOVE.L  DiskDataLength(PC),A1
  9813.     BSR CheckForIFF2
  9814.     BSR ValidateLoops
  9815.     BSR ShowSampleInfo
  9816.     MOVE.L  DiskDataPtr(PC),A0
  9817.     CLR.W   (A0)
  9818.     BSR RedrawSample
  9819.     BSR ShowAllRight
  9820.     BRA RestorePtrCol
  9821.  
  9822. CreateSampleName
  9823.     LEA SampleFileName,A0
  9824.     MOVEQ   #27,D0
  9825. csnloop CLR.B   (A0)+
  9826.     DBRA    D0,csnloop
  9827.     MOVE.L  SongDataPtr(PC),A0
  9828.     MOVE.W  InsNum(PC),D0
  9829.     MULU    #30,D0
  9830.     LEA -10(A0),A0
  9831.     ADD.L   D0,A0
  9832.     MOVE.L  A0,SampleInstrSave
  9833.     MOVEQ   #0,D0
  9834.     MOVE.W  22(A0),D0
  9835.     ADD.L   D0,D0
  9836.     MOVE.L  D0,DiskDataLength
  9837.     MOVE.L  D0,IFFBODY+4
  9838.     ADD.L   #IFFEND-IFFFORM-8,D0
  9839.     MOVE.L  D0,IFFFORM+4
  9840.  
  9841.     MOVEQ   #0,D0
  9842.     MOVE.W  22(A0),D0
  9843.     ADD.L   D0,D0
  9844.     MOVEQ   #0,D1
  9845.     MOVE.W  28(A0),D1
  9846.     CMP.W   #1,D1
  9847.     BLS.S   csnskp2
  9848.     ADD.L   D1,D1
  9849.     MOVEQ   #0,D0
  9850.     MOVE.W  26(A0),D0
  9851.     ADD.L   D0,D0
  9852.     BRA.S   csnskp3
  9853. csnskp2 MOVEQ   #0,D1
  9854. csnskp3 MOVE.L  D0,IFFVHDR+8
  9855.     MOVE.L  D1,IFFVHDR+12
  9856.  
  9857.     LEA SampleFileName,A1
  9858.     LEA IFFNAME+8,A2
  9859.     MOVEQ   #21,D0
  9860. csnloop2
  9861.     MOVE.B  (A0),(A1)+
  9862.     MOVE.B  (A0)+,(A2)+
  9863.     DBRA    D0,csnloop2
  9864.     MOVE.L  #SampleFileName,D1
  9865.     MOVE.L  D1,FileNamePtr
  9866.     BSR.S   FindColon
  9867.     BEQ.S   CheckOverride
  9868.     LEA SamplePath2,A0
  9869.     BSR CopyPath
  9870.     MOVE.L  #SampleFileName,A0
  9871. csnloop3
  9872.     MOVE.B  (A0)+,(A1)+
  9873.     BNE.S   csnloop3
  9874.     MOVE.L  #FileName,FileNamePtr
  9875.     RTS
  9876.  
  9877. FindColon
  9878.     MOVE.L  D1,A0
  9879. fcloop  MOVE.B  (A0)+,D0
  9880.     BEQ.S   FindColonFail
  9881.     CMP.B   #':',D0
  9882.     BEQ.S   FindColonSuccess
  9883.     BRA.S   fcloop
  9884.  
  9885. FindColonFail
  9886.     MOVEQ   #-1,D0
  9887.     RTS
  9888.  
  9889. FindColonSuccess
  9890.     MOVEQ   #0,D0
  9891.     RTS
  9892.  
  9893. CheckOverride
  9894.     TST.B   OverrideFlag
  9895.     BEQ Return2
  9896.     MOVE.L  #SampleFileName,A0
  9897.     MOVE.L  A0,A1
  9898.     LEA 21(A1),A1
  9899.     MOVE.L  A1,A2
  9900. chkovlp MOVE.B  -(A1),D0
  9901.     CMP.B   #':',D0
  9902.     BEQ.S   chkovok
  9903.     CMP.B   #'/',D0
  9904.     BEQ.S   chkovok
  9905.     MOVE.L  A1,A2
  9906.     CMP.L   A0,A1
  9907.     BHI.S   chkovlp
  9908. chkovok LEA SamplePath2,A0
  9909.     BSR CopyPath
  9910. chkovl2 MOVE.B  (A2)+,(A1)+
  9911.     BNE.S   chkovl2
  9912.     MOVE.L  #FileName,FileNamePtr
  9913.     RTS
  9914.  
  9915. ValidateLoops
  9916.     MOVE.L  SongDataPtr(PC),A0
  9917.     LEA 20(A0),A0
  9918.     MOVEQ   #30,D0
  9919. valolop MOVE.W  22(A0),D1
  9920.     MOVE.W  26(A0),D2
  9921.     MOVE.W  28(A0),D3
  9922.     CMP.W   D1,D2
  9923.     BHS.S   valosk1
  9924.     ADD.W   D2,D3
  9925.     CMP.W   D1,D3
  9926.     BHI.S   valosk2
  9927. valoque TST.W   28(A0)
  9928.     BNE.S   valosk3
  9929.     MOVE.W  #1,28(A0)
  9930. valosk3 LEA 30(A0),A0
  9931.     DBRA    D0,valolop
  9932.     RTS
  9933. valosk2 SUB.W   D2,D1
  9934.     MOVE.W  D1,28(A0)
  9935.     BRA.S   valoque
  9936. valosk1 MOVEQ   #1,D1
  9937.     MOVE.L  D1,26(A0)
  9938.     BRA.S   valoque
  9939.  
  9940. LoadPreset
  9941.     CLR.B   RawKeyCode
  9942.     TST.W   InsNum
  9943.     BEQ NotSampleNull
  9944.     BSR TurnOffVoices
  9945.     BSR FreeSample
  9946.     BSR CreateSampleName
  9947.     MOVE.L  FileNamePtr,A0
  9948.     TST.B   (A0)
  9949.     BEQ Return2
  9950.     MOVE.L  DiskDataLength(PC),D0
  9951.     BEQ Return2
  9952.     MOVE.L  DiskDataLength(PC),D0
  9953.     BSR AllocSample
  9954.     MOVE.L  DiskDataPtr(PC),D0
  9955.     BEQ.S   loprerr
  9956.     BSR ShowSampleInfo
  9957.     BSR DoLoadData
  9958.     BSR ShowAllRight
  9959.     MOVE.L  DiskDataPtr(PC),A0
  9960.     MOVE.L  DiskDataLength(PC),A1
  9961.     BSR CheckForIFF
  9962.     BSR ValidateLoops
  9963.     BSR ShowSampleInfo
  9964.     MOVE.L  DiskDataPtr(PC),A0
  9965.     CLR.W   (A0)
  9966.     BSR RedrawSample
  9967.     MOVE.W  #1,UpdateFreeMem
  9968.     RTS
  9969.  
  9970. loprerr BSR StorePtrCol
  9971.     BSR OutOfMemErr
  9972.     BSR RestorePtrCol
  9973.     BRA RedrawSample
  9974.  
  9975. AllocSample
  9976.     MOVE.L  D0,-(SP)
  9977.     MOVE.L  #MEMF_CHIP!MEMF_CLEAR,D1
  9978.     MOVE.L  4.W,A6
  9979.     JSR LVOAllocMem(A6)
  9980.     MOVE.L  D0,DiskDataPtr
  9981.     LEA SamplePtrs(PC),A0
  9982.     MOVE.W  InsNum(PC),D1
  9983.     LSL.W   #2,D1
  9984.     LEA (A0,D1.W),A0
  9985.     MOVE.L  DiskDataPtr(PC),(A0)
  9986.     MOVE.L  (SP)+,124(A0)
  9987.     RTS
  9988.  
  9989. FreeSample
  9990.     LEA SamplePtrs(PC),A0
  9991.     MOVE.W  InsNum(PC),D0
  9992.     BEQ Return2
  9993.     LSL.W   #2,D0
  9994.     LEA (A0,D0.W),A0
  9995.     MOVE.L  (A0),D1
  9996.     BEQ Return2
  9997.     CLR.L   (A0)
  9998.     MOVE.L  124(A0),D0
  9999.     CLR.L   124(A0)
  10000.     MOVE.L  D1,A1
  10001.     MOVE.L  4.W,A6
  10002.     JSR LVOFreeMem(A6)
  10003.     RTS
  10004.  
  10005. NotSampleNull
  10006.     LEA NotSample0Text(PC),A0
  10007.     BSR ShowStatusText
  10008.     BRA SetErrorPtrCol
  10009.  
  10010. NotSample0Text  dc.b 'not sample 0 !',0,0
  10011.  
  10012. ;----
  10013.  
  10014. DeleteSong
  10015.     LEA DeleteSongText,A0
  10016.     BSR AreYouSure
  10017.     BNE Return2
  10018.     LEA DeletingSongText(PC),A0
  10019.     BSR ShowStatusText
  10020.     LEA SongsPath2,A0
  10021.     BSR CopyPath
  10022.     LEA DirInputName,A0
  10023.     MOVEQ   #DirNameLength-1,D0
  10024. dsloop  MOVE.B  (A0)+,(A1)+
  10025.     DBRA    D0,dsloop
  10026.     MOVE.W  #1,Action
  10027. Delete3 MOVE.L  #FileName,FileNamePtr
  10028.     MOVE.L  DOSbase(PC),A6
  10029.     MOVE.L  FileNamePtr(PC),D1
  10030.     MOVE.L  D1,A0
  10031.     JSR LVODeleteFile(A6)
  10032.     BSR ClearFileNames
  10033.     BSR ShowAllRight
  10034.     BSR SetNormalPtrCol
  10035.     BSR StorePtrCol
  10036.     BRA DoAutoDir
  10037.    
  10038. DeleteModule
  10039.     LEA DeleteModuleText,A0
  10040.     BSR AreYouSure
  10041.     BNE Return2
  10042.     LEA DeletingModuleText(PC),A0
  10043.     BSR ShowStatusText
  10044.     LEA ModulesPath2,A0
  10045.     BSR CopyPath
  10046.     LEA DirInputName,A0
  10047.     MOVEQ   #DirNameLength-1,D0
  10048. dmdloop MOVE.B  (A0)+,(A1)+
  10049.     DBRA    D0,dmdloop
  10050.     MOVE.W  #3,Action
  10051.     BRA.S   Delete3
  10052.  
  10053. DeleteSample
  10054.     LEA DeleteSampleText,A0
  10055.     BSR AreYouSure
  10056.     BNE Return2
  10057.     LEA DeletingSampleText(PC),A0
  10058.     BSR ShowStatusText
  10059.     LEA SamplePath2,A0
  10060.     BSR CopyPath
  10061.     LEA DirInputName,A0
  10062.     MOVEQ   #DirNameLength-1,D0
  10063. dsaloop MOVE.B  (A0)+,(A1)+
  10064.     DBRA    D0,dsaloop
  10065.     MOVE.W  #5,Action
  10066.     BRA Delete3
  10067.  
  10068. RenameFile
  10069.     LEA RenamingFileText(PC),A0
  10070.     BSR ShowStatusText
  10071.     LEA DirInputName,A0
  10072.     LEA NewInputName,A1
  10073.     MOVEQ   #23,D0
  10074. rnfloop MOVE.B  (A0)+,(A1)+
  10075.     BNE.S   rnfskip
  10076.     SUBQ.L  #1,A0
  10077. rnfskip DBRA    D0,rnfloop
  10078.     BSR StorePtrCol
  10079.     BSR SetWaitPtrCol
  10080.     LEA NewInputName,A6
  10081.     MOVE.L  A6,ShowTextPtr
  10082.     MOVE.L  A6,TextEndPtr
  10083.     ADD.L   #23,TextEndPtr
  10084.     MOVE.W  #24,TextLength
  10085.     MOVE.W  FileNameScrollPos+2,D0
  10086.     MULU    #240,D0
  10087.     MOVE.W  #1888,A4
  10088.     ADD.W   D0,A4
  10089.     BSR GetTextLine
  10090.     TST.B   NewInputName
  10091.     BEQ.S   rnfend
  10092.     CMP.B   #69,MixChar
  10093.     BEQ.S   rnfend
  10094.  
  10095.     MOVE.L  PathPtr,A0
  10096.     BSR CopyPath
  10097.     LEA NewInputName,A0
  10098.     MOVEQ   #23,D0
  10099. rnfloop2
  10100.     MOVE.B  (A0)+,(A1)+
  10101.     DBRA    D0,rnfloop2
  10102.  
  10103.     LEA FileName,A0
  10104.     LEA NewFileName,A1
  10105. rnfloop3
  10106.     MOVE.B  (A0)+,(A1)+
  10107.     BNE.S   rnfloop3
  10108.  
  10109.     MOVE.L  PathPtr,A0
  10110.     BSR CopyPath
  10111.     LEA DirInputName,A0
  10112.     MOVEQ   #DirNameLength-1,D0
  10113. rnfloop4
  10114.     MOVE.B  (A0)+,(A1)+
  10115.     DBRA    D0,rnfloop4
  10116.  
  10117.     MOVE.L  #FileName,D1
  10118.     MOVE.L  #NewFileName,D2
  10119.     MOVE.L  DOSbase(PC),A6
  10120.     JSR LVORename(A6)
  10121.  
  10122. rnfend  BSR ClearFileNames
  10123.     CLR.W   Action
  10124.     BSR RestorePtrCol
  10125.     BRA ShowAllRight
  10126.  
  10127. LoadSong
  10128.     MOVE.W  #1,LoadInProgress
  10129.     BSR DoClearSong
  10130.     BSR ClrSampleInfo
  10131.     LEA SongsPath2,A0
  10132.     BSR CopyPath
  10133.     LEA DirInputName,A0
  10134.     MOVEQ   #DirNameLength-1,D0
  10135. losoloop2
  10136.     MOVE.B  (A0)+,(A1)+
  10137.     DBRA    D0,losoloop2
  10138.     MOVE.L  SongDataPtr(PC),DiskDataPtr
  10139.     MOVE.L  #FileName,FileNamePtr
  10140.     MOVE.L  #70716,DiskDataLength
  10141.     LEA LoadingSongText(PC),A0
  10142.     BSR ShowStatusText
  10143.     BSR DoLoadData
  10144.     BEQ lososkip3
  10145.     MOVE.L  SongDataPtr(PC),A0
  10146.     CMP.L   #'PACK',(A0)
  10147.     BNE.S   lososkip
  10148.     MOVE.L  4(A0),CrunchedSongLength
  10149.     MOVE.L  8(A0),RealSongLength
  10150.     MOVE.L  SongDataPtr(PC),D0
  10151.     ADD.L   #70716,D0
  10152.     SUB.L   RealSongLength(PC),D0
  10153.     MOVE.L  D0,EndOfSongPtr
  10154.     LEA DecrunchingText(PC),A0
  10155.     BSR ShowStatusText
  10156.     BSR Decruncher
  10157.     BSR ShowAllRight
  10158. lososkip
  10159.     MOVE.L  SongDataPtr(PC),A0
  10160.     CMP.L   #'M.K.',sd_mahokakt(A0) ;  M.K. again...
  10161.     BEQ.S   lososkip2  
  10162.     BSR MahoneyAndKaktus ; Was 16 instr, so move up...
  10163. lososkip2
  10164.     LEA LoadingSongText(PC),A0
  10165.     BSR ShowStatusText
  10166.     BSR CheckAbort
  10167.     BEQ.S   lososkip3
  10168.     TST.B   AutoExitFlag
  10169.     BEQ.S   NoSongAutoExit
  10170.     BSR ExitFromDir
  10171. NoSongAutoExit
  10172.     CLR.L   PatternNumber
  10173.     CLR.L   CurrPos
  10174.     BSR RedrawPattern
  10175.     CLR.W   ScrPattPos
  10176.     BSR SetScrPatternPos
  10177.     BSR SortDisks
  10178.     LEA SampleSortList(PC),A0
  10179.     MOVEQ   #30,D0
  10180. losoloop3
  10181.     TST.B   NosamplesFlag
  10182.     BNE.S   lososkip3
  10183.     BSR CheckAbort
  10184.     BEQ.S   lososkip3
  10185.     MOVE.W  InsNum(PC),TuneUp
  10186.     BSR DoShowFreeMem
  10187.     MOVE.L  (A0)+,D1
  10188.     MOVE.W  D1,InsNum
  10189.     MOVEM.L D0/D1/A0,-(SP)
  10190.     BSR LoadPreset
  10191.     BSR ShowSampleInfo
  10192.     MOVEM.L (SP)+,D0/D1/A0
  10193.     DBRA    D0,losoloop3
  10194. lososkip3
  10195.     MOVE.W  #1,InsNum
  10196.     MOVE.L  #6,CurrSpeed
  10197.     CLR.W   LoadInProgress
  10198.     BSR ShowAllRight
  10199.     BSR SetNormalPtrCol
  10200.     BSR DoShowFreeMem
  10201.     BSR CheckInstrLengths
  10202.     BSR ShowSampleInfo
  10203.     BRA RedrawSample
  10204.  
  10205. SortDisks
  10206.     MOVEM.L D0-D4/A0-A1,-(SP)
  10207.     MOVE.L  SongDataPtr(PC),A0
  10208.     LEA 23(A0),A0
  10209.     LEA SampleSortList(PC),A1
  10210.     MOVEQ   #1,D0
  10211. losoloop4
  10212.     MOVE.B  (A0)+,(A1)+ ; ST-(0)1
  10213.     MOVE.B  (A0),(A1); ST-0(1)
  10214.     MOVE.W  D0,(A1)+    ; insnum
  10215.     LEA 29(A0),A0
  10216.     ADDQ.L  #1,D0
  10217.     CMP.L   #32,D0
  10218.     BLO.S   losoloop4
  10219. losoloop5
  10220.     CLR.W   MoreInstrFlag
  10221.     LEA SampleSortList(PC),A0
  10222.     MOVEQ   #29,D2
  10223. losoloop6
  10224.     MOVE.W  (A0),D0
  10225.     MOVE.W  4(A0),D1
  10226.     CMP.W   D0,D1 ; if next disk greater
  10227.     BHS.S   loso2_2
  10228.     MOVE.W  #1,MoreInstrFlag
  10229.     MOVE.L  (A0),D3 ; swap disks
  10230.     MOVE.L  4(A0),D4
  10231.     MOVE.L  D4,(A0)
  10232.     MOVE.L  D3,4(A0)
  10233. loso2_2 ADDQ.L  #4,A0
  10234.     DBRA    D2,losoloop6
  10235.     TST.W   MoreInstrFlag
  10236.     BNE.S   losoloop5
  10237.     LEA SampleSortList(PC),A0
  10238.     MOVEQ   #30,D0
  10239. losoloop7
  10240.     CLR.W   (A0)
  10241.     ADDQ.L  #4,A0
  10242.     DBRA    D0,losoloop7
  10243.     MOVEM.L (SP)+,D0-D4/A0-A1
  10244.     RTS
  10245.  
  10246. MahoneyAndKaktus
  10247.     LEA Loadas31text(PC),A0
  10248.     BSR AreYouSure
  10249.     BEQ.S   putmk
  10250.     MOVE.L  SongDataPtr(PC),A0  ; M.K. 32 samples format!
  10251.     LEA 466(A0),A1
  10252.     ADD.L   #66006,A0
  10253. makloop MOVE.L  (A0),484(A0)
  10254.     CLR.L   (A0)
  10255.     SUBQ.L  #4,A0
  10256.     CMP.L   A0,A1
  10257.     BNE.S   makloop
  10258.     MOVE.L  SongDataPtr(PC),A0
  10259.     LEA sd_mahokakt(A0),A1
  10260.     LEA sd_numofpatt(A0),A0
  10261. makloop2
  10262.     MOVE.W  4(A0),(A0)+
  10263.     CMP.L   A0,A1
  10264.     BNE.S   makloop2
  10265.     MOVE.L  #'M.K.',(A0)    ; M.K. again!
  10266.     MOVEQ   #0,D0
  10267.     RTS
  10268.  
  10269. putmk   MOVE.L  SongDataPtr(PC),A0
  10270.     MOVE.L  #'M.K.',sd_mahokakt(A0) ;  put M.K.
  10271.     MOVEQ   #-1,D0
  10272.     RTS
  10273.  
  10274. Loadas31Text    dc.b    "Load as 31 instr?",0
  10275.  
  10276. CheckInstrLengths
  10277.     MOVE.L  SongDataPtr(PC),A0
  10278.     ADD.L   #20,A0
  10279.     MOVEQ   #30,D1
  10280. xilloop MOVE.W  26(A0),D0
  10281.     ADD.W   28(A0),D0
  10282.     CMP.W   22(A0),D0
  10283.     BLS.S   xilSkip
  10284.     MOVE.W  26(A0),D0
  10285.     LSR.W   #1,D0  
  10286.     MOVE.W  D0,26(A0)
  10287. xilskip ADD.L   #30,A0
  10288.     DBRA    D1,xilloop
  10289.     RTS
  10290.  
  10291. CheckAbort
  10292.     BTST    #2,$DFF016
  10293.     BNE Return2
  10294.     MOVEM.L D0-D7/A0-A6,-(SP)
  10295.     LEA AbortLoadText,A0
  10296.     BSR AreYouSure
  10297.     BNE.S   chabno
  10298.     MOVEM.L (SP)+,D0-D7/A0-A6
  10299.     MOVEQ   #0,D7
  10300.     RTS
  10301.  
  10302. chabno  MOVEM.L (SP)+,D0-D7/A0-A6
  10303.     MOVEQ   #-1,D7
  10304.     RTS
  10305.  
  10306. StopIt  BSR.S   DoStopIt
  10307. TurnOffVoices
  10308.     MOVEM.L A0-A1,-(SP)
  10309.     MOVE.W  #$000F,$DFF096
  10310.     CLR.W   $DFF0A8
  10311.     CLR.W   $DFF0B8
  10312.     CLR.W   $DFF0C8
  10313.     CLR.W   $DFF0D8
  10314.     CLR.B   RawKeyCode
  10315.     LEA ScopeInfo,A0
  10316.     LEA BlankSample,A1
  10317.     MOVE.L  A1,(A0)
  10318.     MOVE.L  A1,20(A0)
  10319.     MOVE.L  A1,40(A0)
  10320.     MOVE.L  A1,60(A0)
  10321.     MOVEM.L (SP)+,A0-A1
  10322.     RTS
  10323.  
  10324. DoStopIt
  10325.     BSR SetNormalPtrCol
  10326.     CLR.L   EditMode
  10327.     CLR.L   RunMode
  10328.     CLR.B   PattDelayTime
  10329.     CLR.B   PattDelayTime2
  10330.     BRA RestoreEffects2
  10331.  
  10332. UsePreset
  10333.     BSR StorePtrCol
  10334.     TST.L   PLSTmem
  10335.     BEQ.S   upend
  10336.     TST.W   InsNum
  10337.     BEQ.S   upend
  10338.     CLR.B   RawKeyCode
  10339.     MOVE.W  CurrentPreset(PC),D0
  10340.     SUBQ.W  #1,D0
  10341.     MULU    #30,D0
  10342.     MOVE.L  PLSTmem(PC),A0
  10343.     ADD.L   D0,A0
  10344.     MOVE.W  InsNum(PC),D0
  10345.     MULU    #30,D0
  10346.     MOVE.L  SongDataPtr(PC),A1
  10347.     LEA -10(A1,D0.W),A1
  10348.     MOVE.L  A1,A2
  10349.     MOVEQ   #29,D0
  10350. uploop  MOVE.B  (A0)+,(A1)+
  10351.     DBRA    D0,uploop
  10352.     MOVE.L  (A2),D0
  10353.     AND.L   #$DFDFFFFF,D0
  10354.     CMP.L   #$53540000,D0 ;ST__
  10355.     BNE.S   upok
  10356.     CLR.W   (A2)
  10357.     CLR.L   22(A2)
  10358.     MOVE.L  #$00000001,26(A2)
  10359. upok    BSR LoadPreset
  10360. upend   BSR ShowSampleInfo
  10361.     BRA RestorePtrCol
  10362.  
  10363. ;---- Edit ----
  10364.  
  10365. Edit    TST.W   SamScrEnable
  10366.     BNE Return2
  10367.     BSR StopIt
  10368.     CLR.B   RawKeyCode
  10369.     BSR SetEditPtrCol
  10370.     BSR SetScrPatternPos
  10371.     MOVE.L  #'edit',EditMode
  10372.     BRA WaitForButtonUp
  10373.  
  10374. ;---- Edit Op. ----
  10375.  
  10376. DoEditOp
  10377.     CLR.B   RawKeyCode
  10378.     CMP.W   #1,CurrScreen
  10379.     BNE Return2
  10380.     TST.B   EdEnable
  10381.     BEQ.S   EditOp
  10382.     ADDQ.B  #1,EdScreen
  10383.     CMP.B   #4,EdScreen
  10384.     BLO.S   EditOp
  10385.     MOVE.B  #1,EdScreen
  10386. EditOp  BSR WaitForButtonUp
  10387.     ST  EdEnable
  10388.     ST  DisableAnalyzer
  10389.     JSR ClearAnalyzerColors
  10390.     BSR ClearRightArea
  10391.     BRA DrawEditMenu
  10392.  
  10393. EdEnable    dc.b    0
  10394. EdScreen    dc.b    1
  10395.  
  10396. DrawEditMenu
  10397.     CMP.B   #1,EdScreen
  10398.     BNE.S   demskip
  10399.     MOVE.L  #EditOpText1,ShowTextPtr
  10400.     LEA Edit1Data,A0
  10401.     MOVE.L  #Edit1Size,D0
  10402.     BRA.S   demit
  10403. demskip
  10404.     CMP.B   #2,EdScreen
  10405.     BNE.S   demskip2
  10406.     MOVE.L  #EditOpText2,ShowTextPtr
  10407.     LEA Edit2Data,A0
  10408.     MOVE.L  #Edit2Size,D0
  10409.     BRA.S   demit
  10410. demskip2
  10411.     CMP.B   #3,EdScreen
  10412.     BNE Return2
  10413.     MOVE.L  #EditOpText3,ShowTextPtr
  10414.     LEA Edit3Data,A0
  10415.     MOVE.L  #Edit3Size,D0
  10416. demit   BSR Decompact
  10417.     BEQ ExitEditOp
  10418.     LEA SpectrumAnaPos,A0
  10419.     MOVEQ   #54,D0
  10420. demloop1
  10421.     MOVEQ   #24,D1
  10422. demloop2
  10423.     MOVE.B  1430(A1),10240(A0)
  10424.     MOVE.B  (A1)+,(A0)+
  10425.     DBRA    D1,demloop2
  10426.     LEA 15(A0),A0
  10427.     ADDQ.L  #1,A1
  10428.     DBRA    D0,demloop1
  10429.     BSR FreeDecompMem
  10430.     MOVE.W  #1936,TextOffset
  10431.     MOVE.W  #22,TextLength
  10432.     BSR ShowText
  10433.     CMP.B   #1,EdScreen
  10434.     BEQ ShowSampleAll
  10435.     CMP.B   #2,EdScreen
  10436.     BNE.S   demskip3
  10437.     BSR ShowTrackPatt
  10438.     BSR ShowFrom
  10439.     BSR ShowTo
  10440.     BSR ShowRecordMode
  10441.     BSR ShowQuantize
  10442.     BSR ShowMetronome
  10443.     BRA ShowMultiMode
  10444. demskip3
  10445.     CMP.B   #3,EdScreen
  10446.     BNE Return2
  10447.     BSR ShowHalfClip
  10448.     BSR ShowPos
  10449.     BSR ShowMod
  10450.     BRA ShowVol
  10451.  
  10452. EditOpText1 dc.b    '  track      pattern  '
  10453. EditOpText2 dc.b    '  record     samples  '
  10454. EditOpText3 dc.b    '    sample editor     '
  10455.  
  10456. CheckEditOpGadgs
  10457.     MOVE.W  PattCurPos(PC),D0
  10458.     BSR.S   GetPositionPtr
  10459.     MOVEM.W MouseX2,D0/D1
  10460.     CMP.W   #306,D0
  10461.     BHS.S   CheckEdSwap
  10462.     CMP.B   #1,EdScreen
  10463.     BEQ CheckEdGadg1
  10464.     CMP.B   #2,EdScreen
  10465.     BEQ CheckEdGadg2
  10466.     CMP.B   #3,EdScreen
  10467.     BEQ CheckEdGadg3
  10468.     RTS
  10469.  
  10470. GetPositionPtr
  10471.     MOVE.L  SongDataPtr(PC),A0
  10472.     LEA sd_patterndata(A0),A0
  10473.     MOVE.L  PatternNumber(PC),D2
  10474.     LSL.L   #8,D2
  10475.     LSL.L   #2,D2
  10476.     ADD.L   D2,A0
  10477.     MOVEQ   #0,D2
  10478.     MOVE.W  D0,D2
  10479.     DIVU    #6,D2
  10480.     LSL.W   #2,D2
  10481.     ADD.W   D2,A0
  10482.     RTS
  10483.  
  10484. CheckEdSwap
  10485.     CMP.W   #55,D1
  10486.     BLS Return2
  10487.     MOVEQ   #1,D2
  10488.     CMP.W   #66,D1
  10489.     BLS.S   SetEditOpScreen
  10490.     MOVEQ   #2,D2
  10491.     CMP.W   #77,D1
  10492.     BLS.S   SetEditOpScreen
  10493.     MOVEQ   #3,D2
  10494.     CMP.W   #88,D1
  10495.     BLS.S   SetEditOpScreen
  10496.     CMP.W   #99,D1
  10497.     BLS.S   ExitEditOp
  10498.     RTS
  10499.  
  10500. SetEditOpScreen
  10501.     MOVE.B  D2,EdScreen
  10502.     BRA EditOp
  10503.  
  10504. ExitEditOp
  10505.     SF  EdEnable
  10506.     CLR.B   RawKeyCode
  10507.     BRA DisplayMainScreen
  10508.  
  10509. CheckEdGadg1
  10510.     CMP.W   #55,D1
  10511.     BLS ToggleSampleAll
  10512.     CMP.W   #66,D1
  10513.     BLS NoteUp
  10514.     CMP.W   #77,D1
  10515.     BLS NoteDown
  10516.     CMP.W   #88,D1
  10517.     BLS OctaveUp
  10518.     CMP.W   #99,D1
  10519.     BLS OctaveDown
  10520.     RTS
  10521.  
  10522. CheckEdGadg2
  10523.     CMP.W   #55,D1
  10524.     BLS ToggleTrackPatt
  10525.     CMP.W   #213,D0
  10526.     BLS.S   ceg2left
  10527.     CMP.W   #66,D1
  10528.     BLS DeleteOrKill
  10529.     CMP.W   #77,D1
  10530.     BLS ExchangeOrCopy
  10531.     CMP.W   #88,D1
  10532.     BLS SetSampleFrom
  10533.     CMP.W   #99,D1
  10534.     BLS SetSampleTo
  10535.     RTS
  10536.  
  10537. ceg2left
  10538.     CMP.W   #66,D1
  10539.     BLS ToggleRecordMode
  10540.     CMP.W   #77,D1
  10541.     BLS SetQuantize
  10542.     CMP.W   #88,D1
  10543.     BLS SetMetronome
  10544.     CMP.W   #99,D1
  10545.     BLS ToggleMultiMode
  10546.     RTS
  10547.  
  10548. CheckEdGadg3
  10549.     MOVE.L  SongDataPtr(PC),A5
  10550.     LEA -10(A5),A5
  10551.     MOVE.W  InsNum(PC),D2
  10552.     BNE.S   ceg3skip
  10553.     MOVE.W  LastInsNum,D2
  10554. ceg3skip
  10555.     MULU    #30,D2
  10556.     ADD.L   D2,A5
  10557.     CMP.W   #55,D1
  10558.     BLS ToggleHalfClip
  10559.     CMP.W   #213,D0
  10560.     BLS.S   ceg3mid
  10561.     CMP.W   #66,D1
  10562.     BLS SetSamplePos
  10563.     CMP.W   #77,D1
  10564.     BLS SetModSpeed
  10565.     CMP.W   #88,D1
  10566.     BLS CutBeg
  10567.     CMP.W   #99,D1
  10568.     BLS ChangeVolume
  10569.     RTS
  10570.  
  10571. ceg3mid CMP.W   #165,D0
  10572.     BLS.S   ceg3left
  10573.     CMP.W   #66,D1
  10574.     BLS Echo
  10575.     CMP.W   #77,D1
  10576.     BLS Filter
  10577.     CMP.W   #88,D1
  10578.     BLS Backwards
  10579.     CMP.W   #99,D1
  10580.     BLS DownSample
  10581.     RTS
  10582.  
  10583. ceg3left
  10584.     CMP.W   #66,D1
  10585.     BLS Mix
  10586.     CMP.W   #77,D1
  10587.     BLS Boost
  10588.     CMP.W   #88,D1
  10589.     BLS XFade
  10590.     CMP.W   #99,D1
  10591.     BLS UpSample
  10592.     RTS
  10593.  
  10594. ToggleSampleAll
  10595.     BSR WaitForButtonUp
  10596.     EOR.B   #1,SampleAllFlag
  10597. ShowSampleAll
  10598.     LEA BitplaneData+1838,A1
  10599.     LEA S_BoxData,A2
  10600.     TST.B   SampleAllFlag
  10601.     BEQ rtdoit
  10602.     LEA A_BoxData,A2
  10603.     BRA rtdoit
  10604.  
  10605. OctaveUp
  10606.     MOVE.W  #24,NoteShift
  10607.     BRA.S   nup2
  10608.  
  10609. NoteUp  MOVE.W  #2,NoteShift
  10610. nup2    BSR SaveUndo
  10611.     CMP.W   #214,D0
  10612.     BLS.S   nup3
  10613.     MOVEQ   #0,D0
  10614.     BSR GetPositionPtr
  10615.     BSR.S   SampleNoteUp
  10616.     MOVEQ   #6,D0
  10617.     BSR GetPositionPtr
  10618.     BSR.S   SampleNoteUp
  10619.     MOVEQ   #12,D0
  10620.     BSR GetPositionPtr
  10621.     BSR.S   SampleNoteUp
  10622.     MOVEQ   #18,D0
  10623.     BSR GetPositionPtr
  10624. nup3    BSR.S   SampleNoteUp
  10625.     BRA RedrawPattern
  10626.  
  10627. SampleNoteUp
  10628.     MOVEQ   #63,D6
  10629.     MOVE.L  A0,A3
  10630.     MOVE.W  InsNum(PC),D3
  10631.     TST.B   SampleAllFlag
  10632.     BEQ.S   sanulo2
  10633.     MOVEQ   #0,D3
  10634. sanulo2 MOVE.L  D6,D0
  10635.     MOVE.L  A3,A0
  10636. sanuloop
  10637.     MOVE.B  2(A0),D1
  10638.     LSR.B   #4,D1
  10639.     MOVE.B  (A0),D2
  10640.     AND.B   #$F0,D2
  10641.     OR.B    D2,D1
  10642.     CMP.B   D3,D1
  10643.     BNE.S   sanuskip
  10644.     MOVE.W  (A0),D1
  10645.     MOVE.W  D1,D2
  10646.     AND.W   #$F000,D2
  10647.     AND.W   #$0FFF,D1
  10648.     BEQ.S   sanuskip
  10649.     BSR CheckPeriod
  10650.     BNE.S   sanuskip
  10651.     ADD.W   NoteShift(PC),D5
  10652.     CMP.W   #$0048,D5
  10653.     BLO.S   sanuok
  10654.     TST.B   TransDelFlag
  10655.     BEQ.S   sanuskip
  10656.     AND.L   #$00000FFF,(A0)
  10657.     BRA.S   sanuskip
  10658. sanuok  MOVE.W  0(A2,D5.W),D1
  10659.     OR.W    D2,D1
  10660.     MOVE.W  D1,(A0)
  10661. sanuskip
  10662.     LEA 16(A0),A0
  10663.     DBRA    D0,sanuloop
  10664.     TST.B   SampleAllFlag
  10665.     BEQ Return2
  10666.     ADDQ.W  #1,D3
  10667.     CMP.W   #32,D3
  10668.     BLO.S   sanulo2
  10669.     RTS
  10670.  
  10671. OctaveDown
  10672.     MOVE.W  #24,NoteShift
  10673.     BRA.S   ndown2
  10674.  
  10675. NoteDown
  10676.     MOVE.W  #2,NoteShift
  10677. ndown2  BSR SaveUndo
  10678.     CMP.W   #214,D0
  10679.     BLS.S   ndown3
  10680.     MOVEQ   #0,D0
  10681.     BSR GetPositionPtr
  10682.     BSR.S   SampleNoteDown
  10683.     MOVEQ   #6,D0
  10684.     BSR GetPositionPtr
  10685.     BSR.S   SampleNoteDown
  10686.     MOVEQ   #12,D0
  10687.     BSR GetPositionPtr
  10688.     BSR.S   SampleNoteDown
  10689.     MOVEQ   #18,D0
  10690.     BSR GetPositionPtr
  10691. ndown3  BSR.S   SampleNoteDown
  10692.     BRA RedrawPattern
  10693.  
  10694. SampleNoteDown
  10695.     MOVEQ   #63,D6
  10696.     MOVE.L  A0,A3
  10697.     MOVE.W  InsNum(PC),D3
  10698.     TST.B   SampleAllFlag
  10699.     BEQ.S   sandlo2
  10700.     MOVEQ   #0,D3
  10701. sandlo2 MOVE.W  D6,D0
  10702.     MOVE.L  A3,A0
  10703. sandloop
  10704.     MOVE.B  2(A0),D1
  10705.     LSR.B   #4,D1
  10706.     MOVE.B  (A0),D2
  10707.     AND.B   #$F0,D2
  10708.     OR.B    D2,D1
  10709.     CMP.B   D1,D3
  10710.     BNE.S   sandskip
  10711.     MOVE.W  (A0),D1
  10712.     MOVE.W  D1,D2
  10713.     AND.W   #$F000,D2
  10714.     AND.W   #$0FFF,D1
  10715.     BEQ.S   sandskip
  10716.     BSR.S   CheckPeriod
  10717.     BNE.S   sandskip
  10718.     SUB.W   NoteShift(PC),D5
  10719.     BPL.S   sandok
  10720.     TST.B   TransDelFlag
  10721.     BEQ.S   sandskip
  10722.     AND.L   #$00000FFF,(A0)
  10723.     BRA.S   sandskip
  10724. sandok  MOVE.W  0(A2,D5.W),D1
  10725.     OR.W    D2,D1
  10726.     MOVE.W  D1,(A0)
  10727. sandskip
  10728.     LEA 16(A0),A0
  10729.     DBRA    D0,sandloop
  10730.     TST.B   SampleAllFlag
  10731.     BEQ Return2
  10732.     ADDQ.W  #1,D3
  10733.     CMP.W   #$20,D3
  10734.     BLO.S   sandlo2
  10735.     RTS
  10736.  
  10737. NoteShift
  10738.     dc.w    0
  10739.  
  10740. CheckPeriod
  10741.     LEA PeriodTable(PC),A2
  10742.     MOVEQ   #-2,D5
  10743. chpeloop
  10744.     ADDQ.L  #2,D5
  10745.     MOVE.W  0(A2,D5.W),D4
  10746.     BEQ.S   PeriodNotOk
  10747.     CMP.W   D4,D1
  10748.     BEQ.S   PeriodOk
  10749.     BRA.S   chpeloop
  10750.  
  10751. PeriodOk
  10752.     MOVEQ   #0,D4
  10753.     RTS
  10754.  
  10755. PeriodNotOk
  10756.     MOVEQ   #-1,D4
  10757.     RTS
  10758.  
  10759. ToggleTrackPatt
  10760.     BSR WaitForButtonUp
  10761.     ADDQ.B  #1,TrackPattFlag
  10762.     CMP.B   #3,TrackPattFlag
  10763.     BLO.S   ShowTrackPatt
  10764.     CLR.B   TrackPattFlag
  10765. ShowTrackPatt
  10766.     LEA BitplaneData+1838,A1
  10767.     LEA T_BoxData,A2
  10768.     TST.B   TrackPattFlag
  10769.     BEQ rtdoit
  10770.     LEA P_BoxData,A2
  10771.     CMP.B   #1,TrackPattFlag
  10772.     BEQ rtdoit
  10773.     LEA S_BoxData,A2
  10774.     BRA rtdoit
  10775.  
  10776. KillInstrTrack
  10777.     BSR SaveUndo
  10778.     MOVE.W  PattCurPos(PC),D0
  10779.     BSR GetPositionPtr
  10780.     BRA.S   dst2
  10781.  
  10782. DeleteOrKill
  10783.     CMP.W   #260,D0
  10784.     BHS KillSample
  10785. DelSampleTrack
  10786.     BSR SaveUndo
  10787.     TST.B   TrackPattFlag
  10788.     BEQ.S   dst2
  10789.     MOVEQ   #0,D0
  10790.     BSR GetPositionPtr
  10791.     BSR.S   dstdoit
  10792.     MOVEQ   #6,D0
  10793.     BSR GetPositionPtr
  10794.     BSR.S   dstdoit
  10795.     MOVEQ   #12,D0
  10796.     BSR GetPositionPtr
  10797.     BSR.S   dstdoit
  10798.     MOVEQ   #18,D0
  10799.     BSR GetPositionPtr
  10800. dst2    BSR.S   dstdoit
  10801.     BRA RedrawPattern
  10802.  
  10803. dstdoit CLR.B   RawKeyCode
  10804.     MOVEQ   #63,D0
  10805.     MOVE.W  InsNum(PC),D3
  10806.     BEQ NotSampleNull
  10807. ksloop  MOVE.B  2(A0),D1
  10808.     LSR.B   #4,D1
  10809.     MOVE.B  (A0),D2
  10810.     AND.B   #$F0,D2
  10811.     OR.B    D2,D1
  10812.     CMP.B   D1,D3
  10813.     BNE.S   ksskip
  10814.     CLR.L   (A0)
  10815. ksskip  LEA 16(A0),A0
  10816.     DBRA    D0,ksloop
  10817.     RTS
  10818.  
  10819. KillSample
  10820.     LEA KillSampleText,A0
  10821.     BSR AreYouSure
  10822.     BNE Return2
  10823. Destroy BSR StorePtrCol
  10824.     MOVE.W  InsNum(PC),D0
  10825.     BEQ ErrorRestoreCol
  10826.     BSR TurnOffVoices
  10827.     BSR FreeSample
  10828.     MOVE.L  SongDataPtr(PC),A0
  10829.     MOVE.W  InsNum(PC),D0
  10830.     MULU    #30,D0
  10831.     LEA -10(A0),A0
  10832.     ADD.L   D0,A0
  10833.     MOVE.L  A0,A1
  10834.     MOVEQ   #29,D0
  10835. kisalop CLR.B   (A0)+
  10836.     DBRA    D0,kisalop
  10837.     MOVE.W  #1,28(A1)
  10838.     BSR ShowSampleInfo
  10839.     BSR RedrawSample
  10840.     BRA RestorePtrCol
  10841.  
  10842. ExchangeOrCopy
  10843.     MOVEQ   #-1,D4
  10844.     CMP.W   #260,D0
  10845.     BHS.S   CopySampleTrack
  10846. ExchSampleTrack
  10847.     CMP.B   #2,TrackPattFlag
  10848.     BEQ ExchSamples
  10849.     MOVEQ   #0,D4
  10850.     BRA.S   mstskip
  10851. CopySampleTrack
  10852.     CMP.B   #2,TrackPattFlag
  10853.     BEQ CopySamples
  10854. mstskip TST.B   TrackPattFlag
  10855.     BEQ.S   mst2
  10856.     MOVEQ   #0,D0
  10857.     BSR GetPositionPtr
  10858.     BSR.S   mstdoit
  10859.     MOVEQ   #6,D0
  10860.     BSR GetPositionPtr
  10861.     BSR.S   mstdoit
  10862.     MOVEQ   #12,D0
  10863.     BSR GetPositionPtr
  10864.     BSR.S   mstdoit
  10865.     MOVEQ   #18,D0
  10866.     BSR GetPositionPtr
  10867. mst2    BSR.S   mstdoit
  10868.     BRA RedrawPattern
  10869.  
  10870. mstdoit MOVEQ   #63,D0
  10871. esloop  MOVE.B  2(A0),D1
  10872.     LSR.B   #4,D1
  10873.     MOVE.B  (A0),D2
  10874.     AND.B   #$F0,D2
  10875.     OR.B    D2,D1
  10876.     CMP.B   SampleFrom(PC),D1
  10877.     BNE.S   esskip2
  10878.     AND.L   #$0FFF0FFF,(A0)
  10879.     MOVE.B  SampleTo(PC),D2
  10880.     MOVE.B  D2,D3
  10881.     AND.B   #$F0,D2
  10882.     OR.B    D2,(A0)
  10883.     LSL.B   #4,D3
  10884.     OR.B    D3,2(A0)
  10885.     BRA.S   esskip3
  10886. esskip2 TST.B   D4
  10887.     BNE.S   esskip3
  10888.     CMP.B   SampleTo(PC),D1
  10889.     BNE.S   esskip3
  10890.     AND.L   #$0FFF0FFF,(A0)
  10891.     MOVE.B  SampleFrom(PC),D2
  10892.     MOVE.B  D2,D3
  10893.     AND.B   #$F0,D2
  10894.     OR.B    D2,(A0)
  10895.     LSL.B   #4,D3
  10896.     OR.B    D3,2(A0)
  10897. esskip3 LEA 16(A0),A0
  10898.     DBRA    D0,esloop
  10899.     RTS
  10900.  
  10901. ExchSamples
  10902.     BSR StorePtrCol
  10903.     MOVEQ   #0,D0
  10904.     MOVE.B  SampleFrom(PC),D0
  10905.     BEQ ErrorRestoreCol
  10906.     MOVEQ   #0,D1
  10907.     MOVE.B  SampleTo(PC),D1
  10908.     BEQ ErrorRestoreCol
  10909.     MOVE.W  D0,D2
  10910.     MOVE.W  D1,D3
  10911.     LEA SampleLengthAdd+2,A2
  10912.     LSL.W   #1,D2
  10913.     LSL.W   #1,D3
  10914.     LEA (A2,D2.W),A0
  10915.     LEA (A2,D3.W),A1
  10916.     MOVE.W  (A0),D4
  10917.     MOVE.W  (A1),(A0)
  10918.     MOVE.W  D4,(A1)
  10919.     LEA SamplePtrs,A2
  10920.     LSL.W   #1,D2
  10921.     LSL.W   #1,D3
  10922.     LEA (A2,D2.W),A0
  10923.     LEA (A2,D3.W),A1
  10924.     MOVE.L  (A0),D4
  10925.     MOVE.L  (A1),(A0)
  10926.     MOVE.L  D4,(A1)
  10927.     MOVE.L  124(A0),D4
  10928.     MOVE.L  124(A1),124(A0)
  10929.     MOVE.L  D4,124(A1)
  10930.     SUBQ.W  #1,D0
  10931.     SUBQ.W  #1,D1
  10932.     MULU    #30,D0
  10933.     MULU    #30,D1
  10934.     MOVE.L  SongDataPtr(PC),A2
  10935.     LEA 20(A2),A2
  10936.     LEA (A2,D0.W),A0
  10937.     LEA (A2,D1.W),A1
  10938.     MOVEQ   #29,D0
  10939. exsalop MOVE.B  (A0),D1
  10940.     MOVE.B  (A1),(A0)+
  10941.     MOVE.B  D1,(A1)+
  10942.     DBRA    D0,exsalop
  10943.     BSR ShowSampleInfo
  10944.     BSR RedrawSample
  10945.     BRA RestorePtrCol
  10946.  
  10947. CopySamples
  10948.     BSR StorePtrCol
  10949.     MOVEQ   #0,D0
  10950.     MOVE.B  SampleFrom(PC),D0
  10951.     BEQ ErrorRestoreCol
  10952.     MOVEQ   #0,D1
  10953.     MOVE.B  SampleTo(PC),D1
  10954.     BEQ ErrorRestoreCol
  10955.     LEA SamplePtrs(PC),A2
  10956.     LSL.W   #2,D0
  10957.     LSL.W   #2,D1
  10958.     LEA (A2,D0.W),A3
  10959.     LEA (A2,D1.W),A4
  10960.     MOVE.L  (A3),D0
  10961.     BEQ ErrorRestoreCol
  10962.     MOVE.L  124(A3),D0
  10963.     MOVEQ   #MEMF_CHIP,D1
  10964.     MOVE.L  4.W,A6
  10965.     JSR LVOAllocMem(A6)
  10966.     TST.L   D0
  10967.     BEQ OutOfMemErr
  10968.     MOVE.L  D0,A5
  10969.     MOVEQ   #0,D0
  10970.     MOVE.B  SampleTo(PC),D0
  10971.     MOVE.W  D0,InsNum
  10972.     BSR Destroy
  10973.     MOVE.L  A5,(A4)
  10974.     MOVE.L  124(A3),D0
  10975.     MOVE.L  D0,124(A4)
  10976.     MOVE.L  (A3),A0
  10977. cosalp2 MOVE.B  (A0)+,(A5)+
  10978.     SUBQ.L  #1,D0
  10979.     BNE.S   cosalp2
  10980.     MOVEQ   #0,D0
  10981.     MOVEQ   #0,D1
  10982.     MOVE.B  SampleFrom(PC),D0
  10983.     MOVE.B  SampleTo(PC),D1
  10984.     MOVE.W  D1,InsNum
  10985.     MULU    #30,D0
  10986.     MULU    #30,D1
  10987.     MOVE.L  SongDataPtr(PC),A2
  10988.     LEA -10(A2),A2
  10989.     LEA (A2,D0.W),A0
  10990.     LEA (A2,D1.W),A1
  10991.     MOVEQ   #29,D0
  10992. cosalop MOVE.B  (A0)+,(A1)+
  10993.     DBRA    D0,cosalop
  10994.     BSR ShowSampleInfo
  10995.     BSR RedrawSample
  10996.     BRA RestorePtrCol
  10997.  
  10998. SetSampleFrom
  10999.     MOVE.W  InsNum(PC),D2
  11000.     CMP.W   #283,D0
  11001.     BLS.S   sesfskip
  11002.     MOVE.B  SampleFrom(PC),D2
  11003.     CMP.W   #295,D0
  11004.     BLS.S   sesfup
  11005.     SUBQ.B  #1,D2
  11006.     BPL.S   sesfskip
  11007.     MOVEQ   #0,D2
  11008. sesfskip
  11009.     MOVE.B  D2,SampleFrom
  11010.     BSR Wait_4000
  11011.     BRA.S   ShowFrom
  11012. sesfup  ADDQ.B  #1,D2
  11013.     CMP.B   #$1F,D2
  11014.     BLS.S   sesfskip
  11015.     MOVE.B  #$1F,SampleFrom
  11016. ShowFrom
  11017.     MOVE.W  #3273,TextOffset
  11018.     CLR.W   WordNumber
  11019.     MOVE.B  SampleFrom(PC),WordNumber+1
  11020.     BRA PrintHexByte
  11021.  
  11022. SetSampleTo
  11023.     MOVE.W  InsNum(PC),D2
  11024.     CMP.W   #283,D0
  11025.     BLS.S   sestskip
  11026.     MOVE.B  SampleTo(PC),D2
  11027.     CMP.W   #295,D0
  11028.     BLS.S   sestup
  11029.     SUBQ.B  #1,D2
  11030.     BPL.S   sestskip
  11031.     MOVEQ   #0,D2
  11032. sestskip
  11033.     MOVE.B  D2,SampleTo
  11034.     BSR Wait_4000
  11035.     BRA.S   ShowTo
  11036. sestup  ADDQ.B  #1,D2
  11037.     CMP.B   #$1F,D2
  11038.     BLS.S   sestskip
  11039.     MOVE.B  #$1F,SampleTo
  11040. ShowTo  MOVE.W  #3713,TextOffset
  11041.     CLR.W   WordNumber
  11042.     MOVE.B  SampleTo(PC),WordNumber+1
  11043.     BRA PrintHexByte
  11044.  
  11045. SampleFrom  dc.b 0
  11046. SampleTo    dc.b 0
  11047.  
  11048. ToggleRecordMode
  11049.     BSR WaitForButtonUp
  11050.     EOR.B   #1,RecordMode
  11051. ShowRecordMode
  11052.     MOVE.W  #2382,D1
  11053.     LEA PattText,A0
  11054.     TST.B   RecordMode
  11055.     BEQ.S   srmskip
  11056.     LEA SongText,A0
  11057. srmskip MOVEQ   #4,D0
  11058.     BRA ShowText3
  11059.  
  11060. PattText    dc.b 'patt'
  11061. SongText    dc.b 'song'
  11062. RecordMode  dc.b 0
  11063. QuantizeValue   dc.b 1
  11064. MetroSpeed  dc.b 4
  11065. MetroChannel    dc.b 0
  11066. MultiFlag   dc.b 0
  11067. SampleAllFlag   dc.b 0
  11068. TrackPattFlag   dc.b 0
  11069. ClipHalveFlag   dc.b 0
  11070. AbortDecFlag    dc.w 0
  11071.  
  11072. GetDecByte
  11073.     MOVE.W  #1,AbortDecFlag
  11074.     BSR StorePtrCol
  11075.     BSR SetWaitPtrCol
  11076.     BSR UpdateLineCurPos
  11077.     BSR GetKey0_9
  11078.     CMP.B   #68,D1
  11079.     BEQ.S   gdbexit
  11080.     MOVE.B  D1,D0
  11081.     MULU    #10,D0
  11082.     MOVE.B  D0,GetDecTemp
  11083.     BSR ShowOneDigit
  11084.     ADDQ.W  #8,LineCurX
  11085.     BSR UpdateLineCurPos
  11086.     BSR GetKey0_9
  11087.     CMP.B   #68,D1
  11088.     BEQ.S   gdbexit
  11089.     ADD.B   D1,GetDecTemp
  11090.     CLR.W   AbortDecFlag
  11091. gdbexit CLR.W   LineCurX
  11092.     MOVE.W  #270,LineCurY
  11093.     BSR UpdateLineCurPos
  11094.     BSR RestorePtrCol
  11095.     MOVE.B  GetDecTemp,D0
  11096.     RTS
  11097.  
  11098. SetQuantize
  11099.     CLR.B   RawKeyCode
  11100.     MOVE.W  #196,LineCurX
  11101.     MOVE.W  #76,LineCurY
  11102.     MOVE.W  #2824,TextOffset
  11103.     BSR GetDecByte
  11104.     TST.W   AbortDecFlag
  11105.     BNE ShowQuantize
  11106.     CMP.B   #63,D0
  11107.     BLS.S   tqskip
  11108.     MOVEQ.B #63,D0
  11109. tqskip  MOVE.B  D0,QuantizeValue
  11110. ShowQuantize
  11111.     MOVE.W  #2824,TextOffset
  11112.     CLR.W   WordNumber
  11113.     MOVE.B  QuantizeValue,WordNumber+1
  11114.     BRA Print2DecDigits
  11115.  
  11116. SetMetronome
  11117.     CLR.B   RawKeyCode
  11118.     CMP.W   #188,D0
  11119.     BHS.S   smchan
  11120.     MOVE.W  #3261,TextOffset
  11121.     MOVE.W  #172,LineCurX
  11122.     MOVE.W  #87,LineCurY
  11123.     BSR GetDecByte
  11124.     TST.W   AbortDecFlag
  11125.     BNE ShowMetronome
  11126.     CMP.B   #64,D0
  11127.     BLS.S   smexit
  11128.     MOVEQ.B #64,D0
  11129. smexit  MOVE.B  D0,MetroSpeed
  11130.     BRA.S   ShowMetronome
  11131.  
  11132. smchan  MOVE.W  #3264,TextOffset
  11133.     BSR GetHexByte
  11134.     CMP.W   #4,D0
  11135.     BLS.S   smexit2
  11136.     MOVEQ   #4,D0
  11137. smexit2 MOVE.B  D0,MetroChannel
  11138. ShowMetronome
  11139.     MOVE.W  #3261,TextOffset
  11140.     CLR.W   WordNumber
  11141.     MOVE.B  MetroSpeed,WordNumber+1
  11142.     BSR Print2DecDigits
  11143.     MOVE.W  #3264,TextOffset
  11144.     CLR.W   WordNumber
  11145.     MOVE.B  MetroChannel,WordNumber+1
  11146.     BRA Print2DecDigits
  11147.  
  11148. ToggleMultiMode
  11149.     BSR WaitForButtonUp
  11150.     CLR.B   RawKeyCode
  11151.     EOR.B   #1,MultiFlag
  11152. ShowMultiMode
  11153.     BSR.S   Show_MS
  11154.     CMP.W   #1,CurrScreen
  11155.     BNE Return2
  11156.     CMP.B   #2,EdScreen
  11157.     BNE Return2
  11158.     TST.B   EdEnable
  11159.     BEQ Return2
  11160.     MOVE.W  #3700,D1
  11161.     LEA SingleText(PC),A0
  11162.     TST.B   MultiFlag
  11163.     BEQ.S   smmskip
  11164.     LEA MultiText(PC),A0
  11165. smmskip MOVEQ   #6,D0
  11166.     BRA ShowText3
  11167.  
  11168. SingleText  dc.b 'single'
  11169. MultiText   dc.b ' multi'
  11170.  
  11171. Show_MS CMP.W   #4,CurrScreen
  11172.     BEQ Return2
  11173.     MOVE.B  #' ',D0
  11174.     TST.B   MultiFlag
  11175.     BEQ.S   smsskp1
  11176.     MOVE.B  #'M',D0
  11177. smsskp1 MOVE.B  #' ',D1
  11178.     TST.B   SplitFlag
  11179.     BEQ.S   smsskp2
  11180.     MOVE.B  #'S',D1
  11181. smsskp2 MOVE.B  D0,mstext
  11182.     MOVE.B  D1,mstext+1
  11183.     MOVE.W  #4121,D1
  11184.     MOVEQ   #2,D0
  11185.     LEA mstext(PC),A0
  11186.     BSR ShowText3
  11187.     BRA ShowAutoInsert
  11188.  
  11189. mstext  dc.b '__'
  11190.  
  11191. ;---- Edit Op. 3 ----
  11192.  
  11193. ToggleHalfClip
  11194.     BSR WaitForButtonUp
  11195.     EOR.B   #1,HalfClipFlag
  11196. ShowHalfClip
  11197.     LEA BitplaneData+1838,A1
  11198.     LEA H_BoxData,A2
  11199.     TST.B   HalfClipFlag
  11200.     BEQ.S   ogaoga
  11201.     LEA C_BoxData,A2
  11202. ogaoga  JMP rtdoit
  11203.  
  11204. SetSamplePos
  11205.     MOVE.L  SamplePos(PC),D2
  11206.     CMP.W   #283,D0
  11207.     BLS Return2
  11208.     CMP.W   #295,D0
  11209.     BLS.S   shpoup
  11210.     SUBQ.L  #1,D2
  11211.     BTST    #2,$DFF016
  11212.     BNE.S   shposkip
  11213.     SUB.L   #15,D2
  11214. shposkip
  11215.     BPL.S   shposkip2
  11216.     MOVEQ   #0,D2
  11217. shposkip2
  11218.     MOVE.L  D2,SamplePos
  11219.     BRA.S   ShowPos
  11220. shpoup  ADDQ.L  #1,D2
  11221.     BTST    #2,$DFF016
  11222.     BNE.S   shposkip3
  11223.     ADD.L   #15,D2
  11224. shposkip3
  11225.     MOVEQ   #0,D3
  11226.     MOVE.W  22(A5),D3
  11227.     LSL.L   #1,D3
  11228.     CMP.L   D3,D2
  11229.     BLS.S   shposkip2
  11230.     MOVE.L  D3,SamplePos
  11231. ShowPos CMP.W   #1,CurrScreen
  11232.     BNE Return2
  11233.     TST.B   EdEnable
  11234.     BEQ Return2
  11235.     CMP.B   #3,EdScreen
  11236.     BNE Return2
  11237.     MOVE.W  #2391,TextOffset
  11238.     MOVE.W  SamplePos+2(PC),WordNumber
  11239.     BRA PrintHexWord
  11240.  
  11241. SetModSpeed
  11242.     CMP.W   #243,D0
  11243.     BLS DoMod
  11244.     MOVEQ   #0,D2
  11245.     BTST    #2,$DFF016
  11246.     BEQ.S   semoskp
  11247.     MOVE.B  ModSpeed,D2
  11248.     CMP.W   #283,D0
  11249.     BLS Return2
  11250.     CMP.W   #295,D0
  11251.     BLS.S   semoup
  11252.     SUB.B   #1,D2
  11253.     CMP.B   #127,D2
  11254.     BNE.S   semoskp
  11255.     MOVE.B  #128,D2
  11256.     BRA.S   semoskp
  11257. semoup  ADD.B   #1,D2
  11258.     CMP.B   #128,D2
  11259.     BNE.S   semoskp
  11260.     MOVEQ   #127,D2
  11261. semoskp MOVE.B  D2,ModSpeed
  11262.     BSR Wait_4000
  11263. ShowMod LEA PlusMinusText(PC),A0
  11264.     MOVEQ   #0,D6
  11265.     MOVE.B  ModSpeed,D6
  11266.     BPL.S   shmoskp
  11267.     NEG.B   D6
  11268.     ADDQ.L  #1,A0
  11269. shmoskp MOVEQ   #1,D0
  11270.     MOVE.W  #2831,D1
  11271.     BSR ShowText3
  11272.     MOVE.W  D6,WordNumber
  11273.     BRA Print3DecDigits
  11274.  
  11275. PlusMinusText   dc.b ' -'
  11276.  
  11277. DoMod   BSR WaitForButtonUp
  11278.     BSR StorePtrCol
  11279.     BSR SetWaitPtrCol
  11280.     MOVEQ   #0,D2
  11281.     MOVE.W  SampleInfo(PC),D2
  11282.     BEQ ErrorRestoreCol
  11283.     LSL.W   #1,D2
  11284.     SUBQ.W  #1,D2
  11285.     MOVE.L  si_pointer,D0
  11286.     BEQ ErrorRestoreCol
  11287.     BSR AllocBuffer
  11288.     MOVE.L  D0,A2
  11289.     MOVE.L  D0,A3
  11290.     MOVE.L  A1,A4
  11291.     ADD.L   D2,A3
  11292.     CLR.L   ModOffset
  11293.     CLR.L   ModPos
  11294. dmoloop CMP.L   A3,A2
  11295.     BHS.S   dmoskip
  11296.     MOVE.B  (A1),(A2)+
  11297.     BSR.S   UpdateMod
  11298.     BRA.S   dmoloop
  11299. dmoskip MOVE.L  si_pointer(PC),A1
  11300.     CLR.W   (A1)
  11301.     BSR FreeBuffer
  11302.     BSR RestorePtrCol
  11303.     BRA DisplaySample
  11304.  
  11305. UpdateMod
  11306.     MOVE.B  ModSpeed(PC),D0
  11307.     BEQ.S   upmplus
  11308.     EXT.W   D0
  11309.     EXT.L   D0
  11310.     MOVE.L  ModPos(PC),D1
  11311.     ADD.L   D0,D1
  11312.     MOVE.L  D1,ModPos
  11313.     ASR.L   #8,D1
  11314.     ASR.L   #4,D1
  11315.     MOVE.L  D1,D3
  11316.     AND.W   #$1F,D1
  11317.     LEA VibratoTable,A0
  11318.     MOVEQ   #0,D0
  11319.     MOVE.B  (A0,D1.W),D0
  11320.     LSR.B   #2,D0
  11321.     MOVE.L  ModOffset(PC),D1
  11322.     BTST    #5,D3
  11323.     BEQ.S   upmskip
  11324.     SUB.L   D0,D1
  11325.     BRA.S   upmskp2
  11326. upmskip ADD.L   D0,D1
  11327. upmskp2 ADD.L   #$800,D1
  11328.     MOVE.L  D1,ModOffset
  11329.     ASR.L   #8,D1
  11330.     ASR.L   #3,D1
  11331.     BPL.S   upmskp3
  11332.     MOVEQ   #0,D1
  11333. upmskp3 CMP.L   D2,D1
  11334.     BLO.S   upmskp4
  11335.     MOVE.L  D2,D1
  11336. upmskp4 MOVE.L  A4,A1
  11337.     ADD.L   D1,A1
  11338.     RTS
  11339. upmplus ADDQ.L  #1,A1
  11340.     RTS
  11341.  
  11342. CutBeg  CMP.W   #283,D0
  11343.     BHI FadeDown
  11344.     CMP.W   #259,D0
  11345.     BHI FadeUp
  11346.     BSR WaitForButtonUp
  11347.     BSR StorePtrCol
  11348.     BSR SetWaitPtrCol
  11349.     MOVEQ   #0,D3
  11350.     MOVE.W  SampleInfo(PC),D3
  11351.     BEQ ErrorRestoreCol
  11352.     LSL.W   #1,D3
  11353.     SUBQ.W  #1,D3
  11354.     MOVE.L  si_pointer,D0
  11355.     BEQ ErrorRestoreCol
  11356.     MOVE.L  D0,A1
  11357.     MOVE.L  D0,A2
  11358.     MOVE.L  D0,A3
  11359.     ADD.L   SamplePos(PC),A2
  11360.     ADD.L   D3,A3
  11361. cbeloop CMP.L   A3,A2
  11362.     BHS.S   cbeskip
  11363.     MOVE.B  (A2),D0
  11364.     CLR.B   (A2)+
  11365.     MOVE.B  D0,(A1)+
  11366.     BRA.S   cbeloop
  11367. cbeskip MOVE.L  si_pointer(PC),A2
  11368.     CLR.W   (A2)
  11369.     SUB.L   A2,A1
  11370.     MOVE.L  A1,D0
  11371.     LSR.L   #1,D0
  11372.     ADDQ.L  #1,D0
  11373.     AND.W   #$7FFF,D0
  11374.     MOVE.W  D0,22(A5)
  11375.     BSR ShowSampleInfo
  11376.     BSR RestorePtrCol
  11377.     BRA DisplaySample
  11378.  
  11379. FadeUp  BSR WaitForButtonUp
  11380.     BSR StorePtrCol
  11381.     BSR SetWaitPtrCol
  11382.     MOVEQ   #0,D3
  11383.     MOVE.W  SampleInfo(PC),D3
  11384.     BEQ ErrorRestoreCol
  11385.     MOVEQ   #0,D1
  11386.     MOVE.L  SamplePos(PC),D2
  11387.     BEQ ErrorRestoreCol
  11388.     MOVE.L  si_pointer,D0
  11389.     BEQ ErrorRestoreCol
  11390.     MOVE.L  D0,A0
  11391.     LSR.W   #1,D2
  11392.     BEQ ErrorRestoreCol
  11393.     MOVEQ   #0,D4
  11394. fuloop  MOVE.B  (A0),D0
  11395.     EXT.W   D0
  11396.     MULS    D1,D0
  11397.     DIVS    D2,D0
  11398.     MOVE.B  D0,(A0)+
  11399.     ADDQ.W  #1,D4
  11400.     MOVE.W  D4,D1
  11401.     LSR.W   #1,D1
  11402.     CMP.W   D2,D1
  11403.     BLO.S   fuloop
  11404.     BSR RestorePtrCol
  11405.     BRA DisplaySample
  11406.  
  11407. FadeDown
  11408.     BSR WaitForButtonUp
  11409.     BSR StorePtrCol
  11410.     BSR SetWaitPtrCol
  11411.     MOVEQ   #0,D3
  11412.     MOVE.W  SampleInfo(PC),D3
  11413.     BEQ ErrorRestoreCol
  11414.     LSL.L   #1,D3
  11415.     SUBQ.L  #1,D3 ;Length-1
  11416.     MOVE.L  SamplePos(PC),D2
  11417.     CMP.L   D3,D2
  11418.     BHS ErrorRestoreCol
  11419.     MOVE.L  D3,D4 ; Copy length to D4
  11420.     SUB.L   D2,D3 ; Length-pos
  11421.     MOVE.L  D3,D2 ; Copy offset to D2
  11422.     MOVE.L  si_pointer,D0
  11423.     BEQ ErrorRestoreCol
  11424.     MOVE.L  D0,A0
  11425.     LEA (A0,D4.L),A0 ;Start at end of sample
  11426.     LSR.W   #1,D2
  11427.     BEQ ErrorRestoreCol
  11428.     MOVEQ   #0,D1
  11429.     MOVEQ   #0,D4
  11430. fdloop  MOVE.B  (A0),D0
  11431.     EXT.W   D0
  11432.     MULS    D1,D0
  11433.     DIVS    D2,D0
  11434.     MOVE.B  D0,(A0)
  11435.     SUBQ.L  #1,A0
  11436.     ADDQ.W  #1,D4
  11437.     MOVE.W  D4,D1
  11438.     LSR.W   #1,D1
  11439.     CMP.W   D2,D1
  11440.     BLO.S   fdloop
  11441.     BSR RestorePtrCol
  11442.     BRA DisplaySample
  11443.  
  11444. ChangeVolume
  11445.     MOVE.W  SampleVol(PC),D2
  11446.     CMP.W   #243,D0
  11447.     BLS DoChangeVol
  11448.     CMP.W   #283,D0
  11449.     BLS Return2
  11450.     CMP.W   #295,D0
  11451.     BLS shvoup
  11452.     SUBQ.W  #1,D2
  11453.     BTST    #2,$DFF016
  11454.     BNE.S   shvoskip
  11455.     SUB.W   #9,D2
  11456. shvoskip
  11457.     BPL.S   shvoskip2
  11458.     MOVEQ   #0,D2
  11459. shvoskip2
  11460.     MOVE.W  D2,SampleVol
  11461.     BSR Wait_4000
  11462.     BRA.S   ShowVol
  11463. shvoup  ADDQ.L  #1,D2
  11464.     BTST    #2,$DFF016
  11465.     BNE.S   shvoskip3
  11466.     ADD.W   #9,D2
  11467. shvoskip3
  11468.     CMP.W   #999,D2
  11469.     BLS.S   shvoskip2
  11470.     MOVE.W  #999,SampleVol
  11471.     BSR Wait_4000
  11472. ShowVol MOVE.W  #3711,TextOffset
  11473.     MOVE.W  SampleVol(PC),WordNumber
  11474.     BSR Print3DecDigits
  11475.     LEA PercentText(PC),A0
  11476.     MOVE.W  #1,TextLength
  11477.     BRA ShowText2
  11478.  
  11479. PercentText dc.b '%',0
  11480.  
  11481. DoChangeVol
  11482.     BSR WaitForButtonUp
  11483.     BSR StorePtrCol
  11484.     BSR SetWaitPtrCol
  11485.     MOVEQ   #0,D3
  11486.     MOVE.W  SampleInfo(PC),D3
  11487.     BEQ ErrorRestoreCol
  11488.     LSL.W   #1,D3
  11489.     SUBQ.W  #1,D3
  11490.     MOVE.L  si_pointer,D0
  11491.     BEQ ErrorRestoreCol
  11492.     MOVE.L  D0,A1
  11493.     MOVE.W  SampleVol(PC),D0
  11494. dcvloop MOVE.B  (A1),D1
  11495.     EXT.W   D1
  11496.     MULS    D0,D1
  11497.     DIVS    #100,D1
  11498.     CMP.W   #127,D1
  11499.     BLE.S   dcvskip
  11500.     MOVEQ   #127,D1
  11501. dcvskip CMP.W   #-128,D1
  11502.     BGE.S   dcvskp2
  11503.     MOVEQ   #-128,D1
  11504. dcvskp2 MOVE.B  D1,(A1)+
  11505.     DBRA    D3,dcvloop
  11506.     MOVE.L  si_pointer(PC),A1
  11507.     CLR.W   (A1)
  11508.     BSR RestorePtrCol
  11509.     BRA DisplaySample
  11510.  
  11511. Mix BTST    #2,$DFF016
  11512.     BEQ OldMix
  11513.     BSR WaitForButtonUp
  11514.     BSR StorePtrCol
  11515.     BSR SetWaitPtrCol
  11516.     MOVE.W  #1,GetLineFlag
  11517.     MOVE.W  #4,MixCurPos
  11518. mixlopx BSR DisplayMix
  11519.     BSR GetHexKey
  11520.     TST.B   D0
  11521.     BNE.S   mixnzro
  11522.     CMP.B   #68,MixChar
  11523.     BEQ Mix2
  11524.     CMP.B   #69,MixChar
  11525.     BEQ EndMix
  11526.     BTST    #2,$DFF016
  11527.     BEQ EndMix
  11528. mixpchr LEA MixText(PC),A0
  11529.     LEA FastHexTable+1,A1
  11530.     LSL.W   #1,D1
  11531.     MOVE.W  MixCurPos(PC),D0
  11532.     MOVE.B  (A1,D1.W),(A0,D0.W)
  11533. MixMoveRight
  11534.     MOVE.W  MixCurPos,D0
  11535.     ADDQ.W  #1,D0
  11536.     CMP.W   #6,D0
  11537.     BEQ.S   mmrp1
  11538.     CMP.W   #9,D0
  11539.     BEQ.S   mmrp2
  11540.     CMP.W   #15,D0
  11541.     BHS.S   mmrp3
  11542. mmrok   MOVE.W  D0,MixCurPos
  11543.     BRA mixlopx
  11544. mmrp1   MOVEQ   #7,D0
  11545.     BRA.S   mmrok
  11546. mmrp2   MOVEQ   #13,D0
  11547.     BRA.S   mmrok
  11548. mmrp3   MOVEQ   #14,D0
  11549.     BRA.S   mmrok
  11550.  
  11551. mixnzro CMP.B   #1,D0
  11552.     BEQ.S   MixMoveRight
  11553. MixMoveLeft
  11554.     MOVE.W  MixCurPos,D0
  11555.     SUBQ.W  #1,D0
  11556.     CMP.W   #4,D0
  11557.     BLO.S   mmlp1
  11558.     CMP.W   #6,D0
  11559.     BEQ.S   mmlp2
  11560.     CMP.W   #12,D0
  11561.     BEQ.S   mmlp3
  11562.     BRA.S   mmrok
  11563. mmlp1   MOVEQ   #4,D0
  11564.     BRA.S   mmrok
  11565. mmlp2   MOVEQ   #5,D0
  11566.     BRA.S   mmrok
  11567. mmlp3   MOVEQ   #8,D0
  11568.     BRA.S   mmrok
  11569.  
  11570. DisplayMix
  11571.     MOVE.W  #53,LineCurY
  11572.     MOVE.W  MixCurPos,D0
  11573.     LSL.W   #3,D0
  11574.     ADD.W   #132,D0
  11575.     MOVE.W  D0,LineCurX
  11576.     BSR UpdateLineCurPos
  11577.     LEA MixText(PC),A0
  11578.     MOVE.W  #1936,D1
  11579.     MOVEQ   #22,D0
  11580.     BSR ShowText3
  11581.     BSR Wait_4000
  11582.     BSR Wait_4000
  11583.     BRA Wait_4000
  11584.  
  11585. MixText dc.b 'mix 01+02 to 03       '
  11586. MixChar dc.b 0,0
  11587. MixCurPos dc.w 0
  11588. ToSam       dc.w 0
  11589. FromPtr1    dc.l 0
  11590. FromPtr2    dc.l 0
  11591. ToPtr       dc.l 0
  11592. MixPtr      dc.l 0
  11593. MixLength   dc.l 0
  11594.  
  11595. EndMix  CLR.B   RawKeyCode
  11596.     BSR RestoreMix
  11597.     BRA RestorePtrCol
  11598.  
  11599. RestoreMix
  11600.     CLR.W   GetLineFlag
  11601.     MOVE.W  #270,LineCurY
  11602.     CLR.W   LineCurX
  11603.     BSR UpdateLineCurPos
  11604.     LEA EditOpText3(PC),A0
  11605.     MOVE.W  #1936,D1
  11606.     MOVEQ   #22,D0
  11607.     BRA ShowText3
  11608.  
  11609. Mix2    BSR RestoreMix
  11610.     BSR TurnOffVoices
  11611.     LEA SamplePtrs,A2
  11612.     MOVEQ   #0,D0
  11613.     LEA MixText+4(PC),A0
  11614.     BSR HexToInteger2
  11615.     TST.W   D0
  11616.     BEQ SamOutOfRange
  11617.     CMP.W   #$1F,D0
  11618.     BHI SamOutOfRange
  11619.     LSL.W   #2,D0
  11620.     LEA (A2,D0.W),A3
  11621.     MOVE.L  A3,FromPtr1
  11622.  
  11623.     MOVEQ   #0,D0
  11624.     LEA MixText+7(PC),A0
  11625.     BSR HexToInteger2
  11626.     TST.W   D0
  11627.     BEQ SamOutOfRange
  11628.     CMP.W   #$1F,D0
  11629.     BHI SamOutOfRange
  11630.     LSL.W   #2,D0
  11631.     LEA (A2,D0.W),A3
  11632.     MOVE.L  A3,FromPtr2
  11633.  
  11634.     MOVEQ   #0,D0
  11635.     LEA MixText+13(PC),A0
  11636.     BSR HexToInteger2
  11637.     MOVE.W  D0,ToSam
  11638.     BEQ SamOutOfRange
  11639.     CMP.W   #$1F,D0
  11640.     BHI SamOutOfRange
  11641.     LSL.W   #2,D0
  11642.     LEA (A2,D0.W),A3
  11643.     MOVE.L  A3,ToPtr
  11644.  
  11645.     MOVE.L  FromPtr1,A1
  11646.     MOVE.L  FromPtr2,A2
  11647.     MOVE.L  124(A1),D1
  11648.     MOVE.L  124(A2),D2
  11649.     CMP.L   D1,D2
  11650.     BLO.S   mixnswp
  11651.     EXG D1,D2
  11652. mixnswp TST.L   D1
  11653.     BEQ SamEmptyError ; Both samples had length=0
  11654.     MOVE.L  D1,D0
  11655.     AND.L   #$FFFF,D0
  11656.     MOVE.L  D0,MixLength
  11657.     MOVE.L  #MEMF_CHIP!MEMF_CLEAR,D1
  11658.     MOVE.L  4.W,A6
  11659.     JSR LVOAllocMem(A6)
  11660.     MOVE.L  D0,MixPtr
  11661.     BEQ SamMemError ; No memory for new sample...
  11662.  
  11663.     LEA MixingText(PC),A0
  11664.     BSR ShowStatusText
  11665.     MOVE.L  FromPtr1(PC),A1
  11666.     MOVE.L  124(A1),D1
  11667.     MOVE.L  (A1),A1
  11668.     MOVE.L  FromPtr2(PC),A2
  11669.     MOVE.L  124(A2),D2
  11670.     MOVE.L  (A2),A2
  11671.     MOVE.L  MixPtr(PC),A3
  11672.     MOVE.L  MixLength,D3
  11673.     TST.W   D1
  11674.     BEQ.S   mixnd1
  11675.     SUBQ.W  #1,D1
  11676. mixnd1  TST.W   D2
  11677.     BEQ.S   mixnd2
  11678.     SUBQ.W  #1,D2
  11679. mixnd2  SUBQ.W  #1,D3
  11680.  
  11681. mixlop2 MOVE.B  (A1),D4
  11682.     EXT.W   D4
  11683.     MOVE.B  (A2),D0
  11684.     EXT.W   D0
  11685.     ADD.W   D4,D0
  11686.     TST.B   HalfClipFlag
  11687.     BEQ mixhalf
  11688.     CMP.W   #127,D0
  11689.     BLE.S   mixnbig
  11690.     MOVEQ   #127,D0
  11691. mixnbig CMP.W   #-128,D0
  11692.     BGE mixokok
  11693.     MOVEQ   #-128,D0
  11694.     BRA mixokok
  11695. mixhalf ASR.W   #1,D0
  11696. mixokok MOVE.B  D0,(A3)+
  11697.  
  11698.     TST.W   D1
  11699.     BEQ.S   zerd1
  11700.     ADDQ.L  #1,A1
  11701.     SUBQ.W  #1,D1
  11702.     BNE.S   zerd1
  11703.     SUB.L   A1,A1
  11704.  
  11705. zerd1   TST.W   D2
  11706.     BEQ.S   zerd2
  11707.     ADDQ.L  #1,A2
  11708.     SUBQ.W  #1,D2
  11709.     BNE.S   zerd2
  11710.     SUB.L   A2,A2
  11711.  
  11712. zerd2   DBRA    D3,mixlop2
  11713.     MOVE.W  ToSam(PC),InsNum
  11714.     BSR FreeSample
  11715.     MOVE.L  ToPtr(PC),A0
  11716.     MOVE.L  MixPtr(PC),A1
  11717.     CLR.W   (A1)
  11718.     MOVE.L  A1,(A0)
  11719.     MOVE.L  MixLength(PC),124(A0)
  11720.     MOVE.L  SongDataPtr(PC),A0
  11721.     MOVE.W  ToSam(PC),D0
  11722.     SUBQ.W  #1,D0
  11723.     MULU    #30,D0
  11724.     LEA 20(A0,D0.W),A0
  11725.     MOVE.L  MixLength(PC),D0
  11726.     LSR.W   #1,D0
  11727.     MOVE.W  D0,22(A0)
  11728.     MOVE.W  #$0040,24(A0)
  11729.     MOVE.W  #$0000,26(A0)
  11730.     MOVE.W  #$0001,28(A0)
  11731.     BSR RestorePtrCol
  11732.     BSR ShowAllRight
  11733.     BSR ShowSampleInfo
  11734.     BRA DisplaySample
  11735.  
  11736. SamOutOfRange
  11737.     LEA mixerrtext1(PC),A0
  11738.     BSR ShowStatusText
  11739.     BRA ErrorRestoreCol
  11740. SamEmptyError
  11741.     LEA mixerrtext2(PC),A0
  11742.     BSR ShowStatusText
  11743.     BRA ErrorRestoreCol
  11744. SamMemError
  11745.     LEA mixerrtext3(PC),A0
  11746.     BSR ShowStatusText
  11747.     BRA ErrorRestoreCol
  11748. OutOfMemErr
  11749.     LEA mixerrtext3(PC),A0
  11750.     BSR ShowStatusText
  11751.     BSR SetErrorPtrCol
  11752.     MOVEQ   #0,D0
  11753.     RTS
  11754.  
  11755. mixerrtext1 dc.b 'not range 01-1F !',0
  11756. mixerrtext2 dc.b 'empty samples !!!',0
  11757. mixerrtext3 dc.b 'out of memory !!!',0
  11758. mixingtext  dc.b 'mixing samples...',0
  11759.  
  11760. OldMix  MOVE.L  SamplePos(PC),FlangePos
  11761. DoMix   BSR StorePtrCol
  11762.     BSR SetWaitPtrCol
  11763.     MOVEQ   #0,D2
  11764.     MOVE.W  SampleInfo(PC),D2 ; 22(A0)
  11765.     BEQ Return2
  11766.     LSL.W   #1,D2
  11767.     MOVE.L  si_pointer(PC),D0
  11768.     BEQ ErrorRestoreCol
  11769.     BSR AllocBuffer
  11770.     MOVE.L  D0,A2
  11771.     MOVE.L  D0,A3
  11772.     MOVE.L  A1,A4
  11773.     ADD.L   D2,A3
  11774.     ADD.L   FlangePos(PC),A2
  11775.     CLR.L   ModOffset
  11776.     CLR.L   ModPos
  11777.     MOVEQ   #-1,D7
  11778. mixloop ADDQ.L  #1,D7
  11779.     CMP.L   A3,A2
  11780.     BHS mixskip
  11781.     MOVE.L  MarkStartOfs(PC),D0
  11782.     BMI.S   omxget
  11783.     MOVE.L  MarkEndOfs(PC),D1
  11784.     CMP.L   D0,D1
  11785.     BEQ.S   omxget
  11786.     CMP.L   D0,D7
  11787.     BLO.S   omxok2
  11788.     CMP.L   D1,D7
  11789.     BHI.S   omxok2
  11790. omxget  MOVE.B  (A2),D0
  11791.     EXT.W   D0
  11792.     MOVE.B  (A1),D1
  11793.     EXT.W   D1
  11794.     ADD.W   D1,D0
  11795.     TST.B   HalfClipFlag
  11796.     BEQ.S   omxhalf
  11797.     CMP.W   #127,D0
  11798.     BLE.S   omxnbig
  11799.     MOVEQ   #127,D0
  11800. omxnbig CMP.W   #-128,D0
  11801.     BGE.S   omxokok
  11802.     MOVEQ   #-128,D0
  11803.     BRA.S   omxokok
  11804. omxhalf ASR.W   #1,D0
  11805. omxokok MOVE.B  D0,(A2)+
  11806.     BSR UpdateMod
  11807.     BRA.S   mixloop
  11808. omxok2  ADDQ.L  #1,A2
  11809.     BSR UpdateMod
  11810.     BRA.S   mixloop
  11811.  
  11812. mixskip MOVE.L  si_pointer(PC),A1
  11813.     CLR.W   (A1)
  11814.     BSR FreeBuffer
  11815.     BSR RestorePtrCol
  11816.     BSR WaitForButtonUp
  11817.     TST.W   DispOrRedraw
  11818.     BEQ DisplaySample
  11819.     CLR.W   DispOrRedraw
  11820.     BRA RedrawSample
  11821.  
  11822. DispOrRedraw    dc.w 0
  11823.  
  11824. AllocBuffer
  11825.     MOVE.L  D0,D7
  11826.     MOVE.L  D2,D0
  11827.     MOVE.L  D2,BufMemSize
  11828.     MOVE.L  #MEMF_PUBLIC!MEMF_CLEAR,D1
  11829.     MOVE.L  4.W,A6
  11830.     JSR LVOAllocMem(A6)
  11831.     MOVE.L  D0,BufMemPtr
  11832.     BEQ OutOfMemErr
  11833.     MOVE.L  D7,A0
  11834.     MOVE.L  D0,A1
  11835.     MOVE.L  BufMemSize(PC),D0
  11836.     SUBQ.L  #1,D0
  11837. albloop MOVE.B  (A0)+,(A1)+
  11838.     DBRA    D0,albloop
  11839.     MOVE.L  BufMemPtr(PC),A1
  11840.     MOVE.L  D7,D0
  11841.     RTS
  11842.  
  11843. FreeBuffer
  11844.     MOVE.L  BufMemPtr(PC),D0
  11845.     BEQ Return2
  11846.     MOVE.L  D0,A1
  11847.     MOVE.L  BufMemSize(PC),D0
  11848.     MOVE.L  4.W,A6
  11849.     JSR LVOFreeMem(A6)
  11850.     CLR.L   BufMemPtr
  11851.     RTS
  11852.  
  11853. Echo    MOVE.L  SamplePos(PC),FlangePos
  11854.     BSR WaitForButtonUp
  11855.     BSR StorePtrCol
  11856.     BSR SetWaitPtrCol
  11857.     MOVEQ   #0,D2
  11858.     MOVE.W  SampleInfo(PC),D2 ; 22(A0)
  11859.     BEQ ErrorRestoreCol
  11860.     LSL.W   #1,D2
  11861.     MOVE.L  si_pointer(PC),D0
  11862.     BEQ ErrorRestoreCol
  11863.     MOVE.L  D0,A1
  11864.     MOVE.L  D0,A2
  11865.     MOVE.L  D0,A3
  11866.     MOVE.L  D0,A4
  11867.     ADD.L   D2,A3
  11868.     ADD.L   FlangePos(PC),A2
  11869.     CLR.L   ModOffset
  11870.     CLR.L   ModPos
  11871. flaloop CMP.L   A3,A2
  11872.     BHS flaskip
  11873.     MOVE.B  (A2),D0
  11874.     EXT.W   D0
  11875.     MOVE.B  (A1),D1
  11876.     EXT.W   D1
  11877.     ADD.W   D1,D0
  11878.     ASR.W   #1,D0
  11879.     MOVE.B  D0,(A2)+
  11880.     BSR UpdateMod
  11881.     BRA flaloop
  11882. flaskip MOVE.L  si_pointer(PC),A1
  11883.     CLR.W   (A1)
  11884.     BSR RestorePtrCol
  11885.     TST.B   HalfClipFlag
  11886.     BEQ DisplaySample
  11887.     MOVE.W  SampleVol,-(SP)
  11888.     MOVE.W  #200,SampleVol
  11889.     BSR DoChangeVol
  11890.     MOVE.W  (SP)+,SampleVol
  11891.     BRA DisplaySample
  11892.  
  11893. Filter2 MOVE.W  #1,DispOrRedraw
  11894. Filter  CLR.B   RawKeyCode
  11895.     LEA FilteringText,A0
  11896.     BSR ShowStatusText
  11897.     MOVE.L  #1,FlangePos
  11898.     MOVE.B  ModSpeed(PC),-(SP)
  11899.     MOVE.B  HalfClipFlag,-(SP)
  11900.     CLR.B   ModSpeed
  11901.     CLR.B   HalfClipFlag
  11902.     BSR DoMix
  11903.     MOVE.B  (SP)+,HalfClipFlag
  11904.     MOVE.B  (SP)+,ModSpeed
  11905.     BRA ShowAllRight
  11906.  
  11907. FilteringText   dc.b 'filtering',0
  11908.  
  11909. Boost   BSR.S   Boost3
  11910.     BRA DisplaySample
  11911. Boost2  BSR.S   Boost3
  11912.     BRA RedrawSample
  11913. Boost3  CLR.B   RawKeyCode
  11914.     BSR WaitForButtonUp
  11915.     BSR StorePtrCol
  11916.     BSR SetWaitPtrCol
  11917.     LEA BoostingText,A0
  11918.     BSR ShowStatusText
  11919.     MOVEQ   #0,D3
  11920.     MOVE.W  SampleInfo(PC),D3
  11921.     BEQ booend
  11922.     LSL.W   #1,D3
  11923.     SUBQ.W  #1,D3
  11924.     MOVE.L  si_pointer(PC),D0
  11925.     BEQ booend
  11926.     MOVE.L  D0,A1
  11927.     MOVE.L  MarkStartOfs(PC),D0
  11928.     BMI.S   booskp1
  11929.     MOVE.L  MarkEndOfs(PC),D1
  11930.     SUB.L   D0,D1
  11931.     BEQ.S   booskp1
  11932.     MOVE.L  D1,D3
  11933.     MOVE.L  SamStart(PC),A1
  11934.     ADD.L   D0,A1
  11935. booskp1 MOVEQ   #0,D0
  11936. booloop MOVE.B  (A1),D1
  11937.     EXT.W   D1
  11938.     MOVE.W  D1,D2
  11939.     SUB.W   D0,D1
  11940.     MOVE.W  D2,D0
  11941.     TST.W   D1
  11942.     BMI booneg
  11943.     ASR.W   #2,D1
  11944.     ADD.W   D1,D2
  11945.     BRA booskip
  11946. booneg  NEG.W   D1
  11947.     ASR.W   #2,D1
  11948.     SUB.W   D1,D2
  11949. booskip CMP.W   #127,D2
  11950.     BLE booskp2
  11951.     MOVEQ   #127,D2
  11952. booskp2 CMP.W   #-128,D2
  11953.     BGE booskp3
  11954.     MOVEQ   #-128,D2
  11955. booskp3 MOVE.B  D2,(A1)+
  11956.     DBRA    D3,booloop
  11957.     MOVE.L  si_pointer(PC),A1
  11958.     CLR.W   (A1)
  11959. booend  BSR ShowAllRight
  11960.     BRA RestorePtrCol
  11961.    
  11962. BoostingText    dc.b 'boosting',0,0
  11963.  
  11964. XFade   BSR WaitForButtonUp
  11965.     BSR StorePtrCol
  11966.     BSR SetWaitPtrCol
  11967.     MOVEQ   #0,D2
  11968.     MOVE.W  SampleInfo(PC),D2 ; 22(A0)
  11969.     BEQ ErrorRestoreCol
  11970.     ADD.W   D2,D2
  11971.     MOVE.L  si_pointer(PC),D0
  11972.     BEQ ErrorRestoreCol
  11973.     MOVE.L  D0,A1
  11974.     MOVE.L  D0,A2
  11975.     ADD.L   D2,A2
  11976. xfaloop MOVE.B  (A1),D0
  11977.     EXT.W   D0
  11978.     MOVE.B  -(A2),D1
  11979.     EXT.W   D1
  11980.     ADD.W   D1,D0
  11981.     TST.B   HalfClipFlag
  11982.     BEQ xfahalf
  11983.     CMP.W   #127,D0
  11984.     BLE xfanbig
  11985.     MOVEQ   #127,D0
  11986. xfanbig CMP.W   #-128,D0
  11987.     BGE xfaokok
  11988.     MOVEQ   #-128,D0
  11989.     BRA xfaokok
  11990. xfahalf ASR.W   #1,D0
  11991. xfaokok MOVE.B  D0,(A1)+
  11992.     MOVE.B  D0,(A2)
  11993.     CMP.L   A2,A1
  11994.     BLO.S   xfaloop
  11995.     MOVE.L  si_pointer(PC),A1
  11996.     CLR.W   (A1)
  11997.     BSR RestorePtrCol
  11998.     BRA DisplaySample
  11999.  
  12000. Backwards
  12001.     BSR WaitForButtonUp
  12002.     BSR StorePtrCol
  12003.     BSR SetWaitPtrCol
  12004.     MOVEQ   #0,D2
  12005.     MOVE.W  22(A5),D2
  12006.     BEQ ErrorRestoreCol
  12007.     MOVE.L  si_pointer(PC),D0
  12008.     BEQ ErrorRestoreCol
  12009.     MOVE.L  D0,A1
  12010.     MOVE.L  D0,A2
  12011.     ADD.L   D2,D2
  12012.     ADD.L   D2,A2
  12013.     MOVE.L  MarkStartOfs(PC),D0
  12014.     BMI.S   bacloop
  12015.     MOVE.L  MarkEndOfs(PC),D1
  12016.     SUB.L   D0,D1
  12017.     BEQ.S   bacloop
  12018.     MOVE.L  SamStart(PC),A1
  12019.     ADD.L   D0,A1
  12020.     MOVE.L  A1,A2
  12021.     ADD.L   D1,A2
  12022. bacloop MOVE.B  (A1),D0
  12023.     MOVE.B  -(A2),(A1)+
  12024.     MOVE.B  D0,(A2)
  12025.     CMP.L   A2,A1
  12026.     BLO.S   bacloop
  12027.     MOVE.L  si_pointer(PC),A1
  12028.     CLR.W   (A1)
  12029.     BSR RestorePtrCol
  12030.     BRA DisplaySample
  12031.  
  12032. Upsample
  12033.     BSR WaitForButtonUp
  12034.     LEA UpsampleText,A0
  12035.     BSR AreYouSure
  12036.     BNE Return2
  12037.     BSR TurnOffVoices
  12038.     BSR StorePtrCol
  12039.     BSR SetWaitPtrCol
  12040.     MOVE.W  InsNum(PC),D0
  12041.     LSL.W   #2,D0
  12042.     LEA SamplePtrs(PC),A0
  12043.     LEA (A0,D0.W),A0
  12044.     MOVE.L  124(A0),D3
  12045.     CMP.L   #2,D3
  12046.     BLS ErrorRestoreCol
  12047.     MOVE.L  (A0),D0
  12048.     BEQ ErrorRestoreCol
  12049.     MOVE.L  D0,A2
  12050.     MOVE.L  D0,A4
  12051.     MOVE.L  D3,D4
  12052.     LSR.L   #1,D3
  12053.     BCLR    #0,D3
  12054.     MOVE.L  D3,D0
  12055.     MOVEQ   #MEMF_CHIP,D1
  12056.     MOVE.L  4.W,A6
  12057.     JSR LVOAllocMem(A6)
  12058.     TST.L   D0
  12059.     BEQ.S   upserro
  12060.     MOVE.L  D0,A3
  12061.     MOVE.L  D0,D2
  12062.     MOVE.L  D3,D5
  12063.     SUBQ.L  #1,D3
  12064. upsloop MOVE.B  (A2)+,(A3)+
  12065.     ADDQ.L  #1,A2
  12066.     DBRA    D3,upsloop
  12067.     MOVE.L  A4,A1
  12068.     MOVE.L  D4,D0
  12069.     MOVE.L  4.W,A6
  12070.     JSR LVOFreeMem(A6)
  12071.     MOVE.W  InsNum(PC),D0
  12072.     LSL.W   #2,D0
  12073.     LEA SamplePtrs(PC),A0
  12074.     LEA (A0,D0.W),A0
  12075.     MOVE.L  D2,(A0)
  12076.     MOVE.L  D5,124(A0)
  12077.     MOVE.L  D2,A0
  12078.     CLR.W   (A0)
  12079.     MOVE.W  22(A5),D0
  12080.     LSR.W   #1,D0
  12081.     MOVE.W  D0,22(A5)
  12082.     MOVE.W  26(A5),D0
  12083.     LSR.W   #1,D0
  12084.     MOVE.W  D0,26(A5)
  12085.     MOVE.W  28(A5),D0
  12086.     LSR.W   #1,D0
  12087.     BNE upsskip2
  12088.     MOVEQ   #1,D0
  12089. upsskip2
  12090.     MOVE.W  D0,28(A5)
  12091.     BSR ShowSampleInfo
  12092.     BSR WaitForButtonUp
  12093.     BSR RestorePtrCol
  12094.     BRA RedrawSample
  12095.  
  12096. upserro BSR RestorePtrCol
  12097.     BRA OutOfMemErr
  12098.  
  12099. DownSample
  12100.     BSR WaitForButtonUp
  12101.     TST.W   InsNum
  12102.     BEQ NotSampleNull
  12103.     LEA DownSampleText,A0
  12104.     BSR AreYouSure
  12105.     BNE Return2
  12106.     BSR TurnOffVoices
  12107.     BSR StorePtrCol
  12108.     BSR SetWaitPtrCol
  12109.     MOVE.L  si_pointer(PC),D0
  12110.     BEQ ErrorRestoreCol
  12111.     MOVEQ   #0,D0
  12112.     MOVE.W  SampleInfo(PC),D0
  12113.     BEQ ErrorRestoreCol
  12114.     LSL.L   #1,D0
  12115.     CMP.L   #$FFFE,D0
  12116.     BHI ErrorRestoreCol
  12117.     LSL.L   #1,D0
  12118.     CMP.L   #$FFFE,D0
  12119.     BLS dnsskip
  12120.     MOVE.L  #$FFFE,D0
  12121. dnsskip MOVE.L  D0,BufMemSize
  12122.     MOVEQ   #MEMF_CHIP,D1
  12123.     MOVE.L  4.W,A6
  12124.     JSR LVOAllocMem(A6)
  12125.     MOVE.L  D0,BufMemPtr
  12126.     BEQ SamMemError
  12127.     MOVE.L  si_pointer(PC),A1
  12128.     MOVE.L  D0,A2
  12129.     MOVE.L  BufMemSize,D3
  12130.     LSR.L   #1,D3
  12131.     SUBQ.L  #1,D3
  12132. dnsloop MOVE.B  (A1)+,D0
  12133.     MOVE.B  D0,(A2)+
  12134.     MOVE.B  D0,(A2)+
  12135.     DBRA    D3,dnsloop
  12136.     BSR FreeSample
  12137.     LEA SamplePtrs,A0
  12138.     MOVE.W  InsNum(PC),D0
  12139.     LSL.W   #2,D0
  12140.     MOVE.L  BufMemPtr,(A0,D0.W)
  12141.     MOVE.L  BufMemSize,124(A0,D0.W)
  12142.     MOVE.W  22(A5),D0
  12143.     LSL.W   #1,D0
  12144.     CMP.W   #$7FFF,D0
  12145.     BLS dnsok1
  12146.     MOVE.W  #$7FFF,D0
  12147. dnsok1  MOVE.W  D0,22(A5)
  12148.     MOVE.W  26(A5),D0
  12149.     LSL.W   #1,D0
  12150.     CMP.W   #$7FFF,D0
  12151.     BLS dnsok2
  12152.     MOVE.W  #$7FFF,D0
  12153. dnsok2  MOVE.W  D0,26(A5)
  12154.     MOVE.W  28(A5),D0
  12155.     CMP.W   #1,D0
  12156.     BEQ dnsok3
  12157.     LSL.W   #1,D0
  12158.     CMP.W   #$7FFF,D0
  12159.     BLS dnsok3
  12160.     MOVE.W  #$7FFF,D0
  12161. dnsok3  MOVE.W  D0,28(A5)
  12162.     BSR ShowSampleInfo
  12163.     BSR WaitForButtonUp
  12164.     BSR RestorePtrCol
  12165.     BRA RedrawSample
  12166.  
  12167. SamplePos   dc.l    0
  12168. SampleVol   dc.w    100
  12169. FlangePos   dc.l    0
  12170. ModSpeed    dc.b    0
  12171. HalfClipFlag    dc.b    0
  12172. ModPos      dc.l    0
  12173. ModOffset   dc.l    0
  12174. BufMemPtr   dc.l    0
  12175. BufMemSize  dc.l    0
  12176.  
  12177. ;---- Save Song ----
  12178.  
  12179. SaveSong
  12180.     BSR StopIt
  12181.     CLR.B   RawKeyCode
  12182.     MOVE.L  SongDataPtr(PC),A0
  12183.     LEA SampleLengthAdd(PC),A1
  12184.     MOVEQ   #0,D0
  12185.     MOVEQ   #2,D1
  12186. sadloop MOVE.W  (A1,D1.W),D2
  12187.     ADD.W   D2,42(A0,D0.W)
  12188.     ADD.W   #30,D0
  12189.     ADDQ.W  #2,D1
  12190.     CMP.W   #62,D1
  12191.     BNE sadloop
  12192.  
  12193.     LEA sd_pattpos(A0),A0
  12194.     MOVEQ   #0,D0
  12195.     MOVEQ   #0,D1
  12196.     MOVEQ   #0,D2
  12197.     CLR.W   HighPattNum
  12198. ssloop  MOVE.B  0(A0,D0.W),D1
  12199.     ADDQ.W  #1,D0
  12200.     CMP.W   #128,D0
  12201.     BHI DoSaveSong
  12202.     MOVE.W  HighPattNum(PC),D2
  12203.     CMP.W   D2,D1
  12204.     BLS ssloop
  12205.     MOVE.W  D1,HighPattNum
  12206.     BRA ssloop
  12207.  
  12208. DoSaveSong
  12209.     LEA SongsPath2,A0
  12210.     JSR CopyPath
  12211.     MOVE.L  SongDataPtr(PC),A0
  12212.     MOVEQ   #19,D0
  12213. dssloop MOVE.B  (A0)+,(A1)+
  12214.     DBRA    D0,dssloop
  12215.     MOVE.L  #FileName,FileNamePtr
  12216.     MOVE.L  SongDataPtr(PC),DiskDataPtr
  12217.     MOVE.L  #1084,DiskDataLength
  12218.     MOVEQ   #0,D0
  12219.     MOVE.W  HighPattNum,D0
  12220.     ADDQ.L  #1,D0
  12221.     LSL.L   #8,D0
  12222.     LSL.L   #2,D0
  12223.     ADD.L   D0,DiskDataLength
  12224.     MOVE.B  PackMode,D0
  12225.     BTST    #0,D0
  12226.     BEQ dssnocr
  12227.     LEA CrunchingText(PC),A0
  12228.     BSR ShowStatusText
  12229.     BSR Cruncher
  12230. dssnocr BSR DoSaveData
  12231.     MOVE.B  PackMode,D0
  12232.     BTST    #0,D0
  12233.     BEQ dssnoc2
  12234.     LEA DecrunchingText(PC),A0
  12235.     BSR ShowStatusText
  12236.     BSR Decruncher
  12237. dssnoc2 MOVE.L  SongDataPtr(PC),A0
  12238.     LEA SampleLengthAdd(PC),A1
  12239.     MOVEQ   #0,D0
  12240.     MOVEQ   #2,D1
  12241. ssuloop MOVE.W  (A1,D1.W),D2
  12242.     SUB.W   D2,42(A0,D0.W)
  12243.     ADD.W   #30,D0
  12244.     ADD.W   #2,D1
  12245.     CMP.W   #62,D1
  12246.     BNE ssuloop
  12247.     BSR ShowAllRight
  12248.     BRA SetNormalPtrCol
  12249.  
  12250. Cruncher
  12251.     BSR SetNormalPtrCol
  12252.     MOVE.L  SongDataPtr(PC),A0
  12253.     MOVE.L  A0,A1
  12254.     LEA 12(A1),A1
  12255.     MOVE.L  A1,SongPlus12Ptr
  12256.     MOVE.L  A0,A1
  12257.     ADD.L   #70716,A1   ; hoeh...
  12258.     MOVE.L  A1,SongPlus70kPtr
  12259.     MOVE.L  A0,A1
  12260.     ADD.L   #70716,A1
  12261.     SUB.L   DiskDataLength(PC),A1
  12262.     MOVE.L  A1,EndOfSongPtr
  12263.     MOVE.L  DiskDataLength(PC),RealSongLength
  12264.     MOVE.L  SongDataPtr(PC),A0
  12265.     ADD.L   DiskDataLength(PC),A0
  12266.     MOVE.L  SongDataPtr(PC),A1
  12267.     ADD.L   #70716,A1
  12268.     MOVE.L  DiskDataLength(PC),D0
  12269. cloop   MOVE.B  -(A0),-(A1)
  12270.     SUBQ.L  #1,D0
  12271.     BNE cloop
  12272.     BSR DoCrunch
  12273.     SUB.L   SongPlus12Ptr(PC),A2
  12274.     MOVE.L  A2,D0
  12275.     MOVE.L  D0,CrunchedSongLength
  12276.     MOVE.L  D0,D1
  12277.     ADD.L   SongPlus12Ptr(PC),D1
  12278.     MOVE.L  D1,DontKnowWhat
  12279.     MOVE.L  SongDataPtr(PC),A0
  12280.     MOVE.L  #'PACK',(A0)
  12281.     MOVE.L  CrunchedSongLength,4(A0)
  12282.     MOVE.L  RealSongLength(PC),8(A0)
  12283.     MOVE.L  SongDataPtr(PC),DiskDataPtr
  12284.     MOVE.L  CrunchedSongLength(PC),D0
  12285.     ADD.L   #12,D0
  12286.     MOVE.L  D0,DiskDataLength
  12287.     RTS
  12288.  
  12289. EndOfSongPtr        dc.l    0
  12290. SongPlus70kPtr      dc.l    0
  12291. RealSongLength      dc.l    0
  12292. SongPlus12Ptr       dc.l    0
  12293. DontKnowWhat        dc.l    0
  12294. CrunchedSongLength  dc.l    0
  12295.  
  12296. DoCrunch
  12297.     MOVE.L  EndOfSongPtr(PC),A0
  12298.     MOVE.L  SongPlus70kPtr(PC),A1
  12299.     MOVE.L  SongPlus12Ptr(PC),A2
  12300.     MOVEQ   #1,D2
  12301.     CLR.W   D1
  12302. dcloop  BSR DoCrunch2
  12303.     TST.B   D0
  12304.     BEQ dcskip
  12305.     ADDQ.W  #1,D1
  12306.     CMP.W   #$0108,D1
  12307.     BNE dcskip
  12308.     BSR DoCrunch6
  12309. dcskip  CMP.L   A0,A1
  12310.     BGT dcloop
  12311.     BSR DoCrunch6
  12312.     BRA DoCrunch8
  12313.  
  12314. DoCrunch2
  12315.     MOVE.L  A0,A3
  12316.     LEA 127(A3),A3
  12317.     CMP.L   A1,A3
  12318.     BLE dc2skip
  12319.     MOVE.L  A1,A3
  12320. dc2skip MOVEQ   #1,D5
  12321.     MOVE.L  A0,A5
  12322.     ADDQ.L  #1,A5
  12323. dc2_1   MOVE.B  (A0),D3
  12324.     MOVE.B  1(A0),D4
  12325.     MOVE.W  D3,$DFF1A2
  12326. dc2loop CMP.B   (A5)+,D3
  12327.     BNE dc2skip2
  12328.     CMP.B   (A5),D4
  12329.     BEQ DoCrunch3
  12330. dc2skip2
  12331.     CMP.L   A5,A3
  12332.     BGT dc2loop
  12333.     BRA dc4_3
  12334.  
  12335. DoCrunch3
  12336.     SUBQ.L  #1,A5
  12337.     MOVE.L  A0,A4
  12338. dc3loop MOVE.B  (A4)+,D3
  12339.     CMP.B   (A5)+,D3
  12340.     BNE dc3skip
  12341.     CMP.L   A5,A3
  12342.     BGT dc3loop
  12343. dc3skip MOVE.L  A4,D3
  12344.     SUB.L   A0,D3
  12345.     SUBQ.L  #1,D3
  12346.     CMP.L   D3,D5
  12347.     BGE dc4_2
  12348.     MOVE.L  A5,D4
  12349.     SUB.L   A0,D4
  12350.     SUB.L   D3,D4
  12351.     SUBQ.L  #1,D4
  12352.     CMP.L   #4,D3
  12353.     BLE DoCrunch4
  12354.     MOVEQ   #6,D6
  12355.     CMP.L   #$00000101,D3
  12356.     BLT dc3skip2
  12357.     MOVE.W  #$0100,D3
  12358. dc3skip2
  12359.     BRA dc4_1
  12360.  
  12361. DoCrunch4
  12362.     MOVE.W  D3,D6
  12363.     SUBQ.W  #2,D6
  12364.     LSL.W   #1,D6
  12365. dc4_1   LEA CrunchData3(PC),A6
  12366.     CMP.W   0(A6,D6.W),D4
  12367.     BGE dc4_2
  12368.     MOVE.L  D3,D5
  12369.     MOVE.L  D4,CrunchData1
  12370.     MOVE.B  D6,CrunchData2
  12371. dc4_2   CMP.L   A5,A3
  12372.     BGT dc2_1
  12373. dc4_3   CMP.L   #1,D5
  12374.     BEQ DoCrunch5
  12375.     BSR DoCrunch6
  12376.     MOVE.B  CrunchData2(PC),D6
  12377.     MOVE.L  CrunchData1(PC),D3
  12378.     MOVE.W  8(A6,D6.W),D0
  12379.     BSR DoCrunch7
  12380.     MOVE.W  $0010(A6,D6.W),D0
  12381.     BEQ dc4skip
  12382.     MOVE.L  D5,D3
  12383.     SUBQ.W  #1,D3
  12384.     BSR DoCrunch7
  12385. dc4skip MOVE.W  $0018(A6,D6.W),D0
  12386.     MOVE.W  $0020(A6,D6.W),D3
  12387.     BSR DoCrunch7
  12388.     ADDQ.W  #1,$0028(A6,D6.W)
  12389.     ADD.L   D5,A0
  12390.     CLR.B   D0
  12391.     RTS
  12392.  
  12393. DoCrunch5
  12394.     MOVE.B  (A0)+,D3
  12395.     MOVEQ   #8,D0
  12396.     BSR DoCrunch7
  12397.     MOVEQ   #1,D0
  12398.     RTS
  12399.  
  12400. CrunchData1 dc.l    0
  12401. CrunchData2 dc.b    0,0
  12402. CrunchData3 dc.w    $0100,$0200,$0400,$1000,8,9,10,8
  12403.         dc.w    0,0,0,8,2,3,3,3,1,4,5,6,0,0,0,0
  12404. CrunchData4 dc.w    0
  12405. CrunchData5 dc.w    0
  12406.  
  12407. DoCrunch6
  12408.     TST.W   D1
  12409.     BEQ Return2
  12410.     MOVE.W  D1,D3
  12411.     CLR.W   D1
  12412.     CMP.W   #9,D3
  12413.     BGE dc6_2
  12414.     ADDQ.W  #1,CrunchData4
  12415.     SUBQ.W  #1,D3
  12416.     MOVEQ   #5,D0
  12417.     BRA DoCrunch7
  12418.  
  12419. dc6_2   ADDQ.W  #1,CrunchData5
  12420.     SUB.W   #9,D3
  12421.     OR.W    #$0700,D3
  12422.     MOVEQ   #11,D0
  12423. DoCrunch7
  12424.     SUBQ.W  #1,D0
  12425. dc7loop LSR.L   #1,D3
  12426.     ROXL.L  #1,D2
  12427.     BCS dc8_2
  12428.     DBRA    D0,dc7loop
  12429.     RTS
  12430.  
  12431. DoCrunch8
  12432.     CLR.W   D0
  12433. dc8_2   MOVE.L  D2,(A2)+
  12434.     MOVEQ   #1,D2
  12435.     DBRA    D0,dc7loop
  12436.     RTS
  12437.  
  12438.  
  12439. Decruncher
  12440.     MOVE.L  SongDataPtr(PC),A0
  12441.     LEA 12(A0),A0
  12442.     MOVE.L  EndOfSongPtr(PC),A1
  12443.     MOVE.L  CrunchedSongLength(PC),D0
  12444.     MOVE.L  RealSongLength(PC),D1
  12445.     BSR DoDecrunch
  12446.     MOVE.L  EndOfSongPtr(PC),A0
  12447.     MOVE.L  SongDataPtr(PC),A1
  12448.     MOVE.L  RealSongLength(PC),D0
  12449. ddcloop MOVE.B  (A0)+,(A1)+
  12450.     SUBQ.L  #1,D0
  12451.     BNE ddcloop
  12452.     MOVE.L  SongDataPtr(PC),A0
  12453.     ADD.L   #$0001143C,A0
  12454.     MOVE.L  SongDataPtr(PC),A1
  12455.     ADD.L   RealSongLength(PC),A1
  12456.     SUB.L   A1,A0
  12457.     MOVE.L  A0,D0
  12458. ddcloop2
  12459.     CLR.B   (A1)+
  12460.     SUBQ.L  #1,D0
  12461.     BNE ddcloop2
  12462.     RTS
  12463.  
  12464. DoDecrunch
  12465.     ADD.L   D0,A0
  12466.     MOVE.L  D1,A2
  12467.     ADD.L   A1,A2
  12468.     MOVE.L  -(A0),D0
  12469. dec_1   LSR.L   #1,D0
  12470.     BNE.S   decskip
  12471.     BSR.S   dec5
  12472. decskip BCS.S   dec3
  12473.     MOVEQ   #8,D1
  12474.     MOVEQ   #1,D3
  12475.     LSR.L   #1,D0
  12476.     BNE.S   decskip2
  12477.     BSR.S   dec5
  12478. decskip2
  12479.     BCS.S   dec4_1
  12480.     MOVEQ   #3,D1
  12481.     CLR.W   D4
  12482. dec_2   BSR.S   dec6
  12483.     MOVE.W  D2,D3
  12484.     ADD.W   D4,D3
  12485. decloop1
  12486.     MOVEQ   #7,D1
  12487. decloop2
  12488.     LSR.L   #1,D0
  12489.     BNE.S   decskip3
  12490.     BSR.S   dec5
  12491. decskip3
  12492.     ROXL.L  #1,D2
  12493.     DBRA    D1,decloop2
  12494.     MOVE.B  D2,-(A2)
  12495.     DBRA    D3,decloop1
  12496.     BRA.S   dec4_3
  12497.  
  12498. dec2    MOVEQ   #8,D1
  12499.     MOVEQ   #8,D4
  12500.     BRA.S   dec_2
  12501.  
  12502. dec3    MOVEQ   #2,D1
  12503.     BSR.S   dec6
  12504.     CMP.B   #2,D2
  12505.     BLT.S   dec4
  12506.     CMP.B   #3,D2
  12507.     BEQ.S   dec2
  12508.     MOVEQ   #8,D1
  12509.     BSR.S   dec6
  12510.     MOVE.W  D2,D3
  12511.     MOVE.W  #8,D1
  12512.     BRA.S   dec4_1
  12513.  
  12514. dec4    MOVE.W  #9,D1
  12515.     ADD.W   D2,D1
  12516.     ADDQ.W  #2,D2
  12517.     MOVE.W  D2,D3
  12518. dec4_1  BSR.S   dec6
  12519. dec4_2  SUBQ.W  #1,A2
  12520.     MOVE.B  0(A2,D2.W),(A2)
  12521.     DBRA    D3,dec4_2
  12522. dec4_3  CMP.L   A2,A1
  12523.     BLT.S   dec_1
  12524.     RTS
  12525.  
  12526. dec5    MOVE.L  -(A0),D0
  12527.     MOVE.W  D0,$DFF1A2
  12528.     MOVE    #$10,CCR
  12529.     ROXR.L  #1,D0
  12530.     RTS
  12531.  
  12532. dec6    SUBQ.W  #1,D1
  12533.     CLR.W   D2
  12534. dec6loop
  12535.     LSR.L   #1,D0
  12536.     BNE.S   dec6skip
  12537.     MOVE.L  -(A0),D0
  12538.     MOVE.W  D0,$DFF1A2
  12539.     MOVE    #$10,CCR
  12540.     ROXR.L  #1,D0
  12541. dec6skip
  12542.     ROXL.L  #1,D2
  12543.     DBRA    D1,dec6loop
  12544.     RTS
  12545.  
  12546. LoadModule
  12547.     MOVE.W  #1,LoadInProgress
  12548.     BSR DoClearSong
  12549.     BSR ClrSampleInfo
  12550.     BSR SetDiskPtrCol
  12551.     LEA ModulesPath2,A0
  12552.     JSR CopyPath
  12553.     LEA DirInputName,A0
  12554.     MOVEQ   #DirNameLength-1,D0
  12555. lmloop2 MOVE.B  (A0)+,(A1)+
  12556.     DBRA    D0,lmloop2
  12557.     LEA LoadingModuleText(PC),A0
  12558.     BSR ShowStatusText
  12559.     MOVE.L  DOSbase(PC),A6
  12560.     MOVE.L  #FileName,D1
  12561.     MOVE.L  #1005,D2
  12562.     JSR LVOOpen(A6)
  12563.     MOVE.L  D0,FileHandle
  12564.     BEQ CantOpenFile
  12565.     MOVE.L  D0,D1
  12566.     MOVE.L  SongDataPtr(PC),D2
  12567.     MOVE.L  #1084,D3
  12568.     JSR LVORead(A6)
  12569.     MOVE.L  SongDataPtr(PC),A0
  12570.     CMP.L   #'PP20',(A0)
  12571.     BEQ PowerPacked
  12572.     MOVE.B  #127,sd_numofpatt+1(A0) ; Set maxpatt to 127
  12573.     CMP.L   #'M.K.',sd_mahokakt(A0) ; M.K. again...
  12574.     BEQ lmskip
  12575.     BSR MahoneyAndKaktus
  12576.     BNE lmskip
  12577.     MOVE.L  FileHandle(PC),D1
  12578.     MOVE.L  #600,D2
  12579.     MOVEQ   #-1,D3
  12580.     JSR LVOSeek(A6)
  12581. lmskip  LEA LoadingModuleText(PC),A0
  12582.     BSR ShowStatusText
  12583.     MOVE.L  SongDataPtr(PC),A0
  12584.     LEA sd_pattpos(A0),A0
  12585.     MOVEQ   #0,D0
  12586.     MOVE.B  -1(A0),D0
  12587.     MOVEQ   #0,D3
  12588. lmloop3 CMP.B   (A0)+,D3
  12589.     BHI lmskip2
  12590.     MOVE.B  -1(A0),D3
  12591. lmskip2 DBRA    D0,lmloop3
  12592.     ADDQ.W  #1,D3
  12593.     MULU    #1024,D3
  12594.     MOVE.L  FileHandle(PC),D1
  12595.     MOVE.L  SongDataPtr(PC),D2
  12596.     ADD.L   #1084,D2
  12597.     MOVE.L  DOSBase,A6
  12598.     JSR LVORead(A6)
  12599.     CLR.L   PatternNumber
  12600.     CLR.L   CurrPos
  12601.     BSR RedrawPattern
  12602.     CLR.W   ScrPattPos
  12603.     BSR SetScrPatternPos
  12604.     MOVE.W  #1,InsNum
  12605.     BSR CheckAbort
  12606.     BEQ rmiend
  12607.     TST.B   AutoExitFlag
  12608.     BEQ readinstrloop
  12609.     JSR ExitFromDir
  12610. readinstrloop
  12611.     TST.B   NosamplesFlag
  12612.     BNE rmiend
  12613.     BSR CheckAbort
  12614.     BEQ rmiend
  12615.     BSR ShowSampleInfo
  12616.     MOVE.W  InsNum(PC),TuneUp
  12617.     JSR DoShowFreeMem
  12618.     MOVE.L  SongDataPtr(PC),A0
  12619.     MOVE.W  InsNum(PC),D7
  12620.     MULU    #30,D7
  12621.     MOVEQ   #0,D0
  12622.     MOVE.W  12(A0,D7.W),D0
  12623.     BEQ rminext
  12624.     ADD.L   D0,D0
  12625.     MOVE.L  4.W,A6
  12626.     MOVE.L  #MEMF_CHIP!MEMF_CLEAR,D1
  12627.     MOVE.L  D0,-(SP)
  12628.     JSR LVOAllocMem(A6)
  12629.     MOVE.L  (SP)+,D6
  12630.     TST.L   D0
  12631.     BNE ReadModInstrument
  12632.     BSR OutOfMemErr
  12633.     MOVE.L  DOSbase(PC),A6
  12634.     MOVE.L  FileHandle(PC),D1
  12635.     MOVE.L  D6,D2
  12636.     MOVEQ   #0,D3
  12637.     BRA rminext
  12638.  
  12639. ReadModInstrument
  12640.     MOVE.W  InsNum(PC),D7
  12641.     LSL.W   #2,D7
  12642.     LEA SamplePtrs(PC),A0
  12643.     MOVE.L  D0,0(A0,D7.W)
  12644.     MOVE.L  D6,124(A0,D7.W)
  12645.     MOVE.L  DOSbase(PC),A6
  12646.     MOVE.L  FileHandle(PC),D1
  12647.     MOVE.L  D0,D2
  12648.     MOVE.L  D6,D3
  12649.     JSR LVORead(A6)
  12650.     BSR RedrawSample
  12651. rminext ADDQ.W  #1,InsNum
  12652.     CMP.W   #32,InsNum
  12653.     BNE readinstrloop
  12654. rmiend  MOVE.L  FileHandle(PC),D1
  12655.     MOVE.L  DOSbase(PC),A6
  12656.     JSR LVOClose(A6)
  12657.     MOVE.W  #1,InsNum
  12658.     MOVE.L  #6,CurrSpeed
  12659.     CLR.W   LoadInProgress
  12660.     BSR ShowAllRight
  12661.     JSR SetNormalPtrCol
  12662.     BSR CheckInstrLengths
  12663.     BSR ShowSampleInfo
  12664.     BSR RedrawSample
  12665.     JMP DoShowFreeMem
  12666.  
  12667. PowerPacked
  12668.     LEA PowerPackedText,A0
  12669.     BSR ShowStatusText
  12670.     JSR SetErrorPtrCol
  12671.     BSR DoClearSong
  12672.     BSR ClrSampleInfo
  12673.     BRA rmiend
  12674.  
  12675. PowerPackedText dc.b "Powerpacker mod.!",0
  12676.  
  12677.  
  12678. SaveModule
  12679.     JSR StorePtrCol
  12680.     JSR SetDiskPtrCol
  12681.     MOVE.L  SongDataPtr(PC),A0
  12682.     LEA sd_pattpos(A0),A0
  12683.     MOVEQ   #0,D0
  12684.     MOVEQ   #0,D1
  12685.     MOVEQ   #0,D2
  12686.     CLR.W   HighPattNum
  12687. smloop  MOVE.B  0(A0,D0.W),D1
  12688.     ADDQ.W  #1,D0
  12689.     CMP.W   #128,D0
  12690.     BHI DoSaveModule
  12691.     MOVE.W  HighPattNum(PC),D2
  12692.     CMP.W   D2,D1
  12693.     BLS smloop
  12694.     MOVE.W  D1,HighPattNum
  12695.     BRA smloop
  12696.  
  12697. DoSaveModule
  12698.     LEA ModulesPath2,A0
  12699.     JSR CopyPath
  12700.     MOVE.B  #'m',(A1)+
  12701.     MOVE.B  #'o',(A1)+
  12702.     MOVE.B  #'d',(A1)+
  12703.     MOVE.B  #'.',(A1)+
  12704.     MOVE.L  SongDataPtr(PC),A0
  12705.     MOVEQ   #19,D0
  12706. dsmloop2
  12707.     MOVE.B  (A0)+,(A1)+
  12708.     DBRA    D0,dsmloop2
  12709.     MOVE.L  SongDataPtr(PC),A0
  12710.     MOVE.L  A0,DiskDataPtr
  12711.     MOVE.L  #1084,DiskDataLength
  12712.     MOVEQ   #0,D0
  12713.     MOVE.W  HighPattNum(PC),D0
  12714.     ADDQ.L  #1,D0
  12715.     LSL.L   #8,D0
  12716.     LSL.L   #2,D0
  12717.     ADD.L   D0,DiskDataLength   ; Add 1024 x NumOfPatt
  12718.     MOVE.B  #127,sd_numofpatt+1(A0) ; Set maxpatt to 127
  12719.     MOVE.L  #'M.K.',sd_mahokakt(A0) ; M.K. again...
  12720.     LEA SavingModuleText(PC),A0
  12721.     BSR ShowStatusText
  12722.     BSR OpenModForWrite
  12723.     BNE CantOpenFile
  12724.     BSR WriteModuleData
  12725.     BNE WriteModError
  12726.     MOVE.W  InsNum(PC),SaveInstrNum
  12727.     MOVEQ   #1,D6
  12728. saveinstrloop
  12729.     MOVE.W  D6,InsNum
  12730.     BSR ShowSampleInfo
  12731.     BSR WriteInstrument
  12732.     BNE WriteModError
  12733.     ADDQ.B  #1,D6
  12734.     CMP.B   #32,D6
  12735.     BNE saveinstrloop
  12736.     BSR CloseWriteMod
  12737.     MOVE.W  SaveInstrNum(PC),InsNum
  12738.     BSR ShowSampleInfo
  12739.     BSR ShowAllRight
  12740.     JMP RestorePtrCol
  12741.  
  12742. SaveInstrNum    dc.w 0
  12743.  
  12744. WriteModError
  12745.     BSR CloseWriteMod
  12746.     BRA CantSaveFile
  12747.  
  12748. WriteInstrument
  12749.     MOVE.W  D6,D0
  12750.     LSL.W   #2,D0
  12751.     LEA SamplePtrs(PC),A0
  12752.     MOVE.L  0(A0,D0.W),D1
  12753.     BEQ Return2
  12754.     MOVE.L  124(A0,D0.W),D0
  12755.     BEQ Return2
  12756.     MOVE.L  D1,DiskDataPtr
  12757.     MOVE.L  SongDataPtr(PC),A0
  12758.     LEA 12(A0),A0
  12759.     MOVE.W  D6,D0
  12760.     MULU    #30,D0
  12761.     ADD.L   D0,A0
  12762.     MOVEQ   #0,D0
  12763.     MOVE.W  (A0),D0
  12764.     LSL.L   #1,D0
  12765.     MOVE.L  D0,DiskDataLength
  12766.     BNE WriteModuleData
  12767.     RTS
  12768.  
  12769. OpenModForWrite
  12770.     MOVE.L  DOSbase(PC),A6
  12771.     MOVE.L  #FileName,D1
  12772.     MOVE.L  #1006,D2
  12773.     JSR LVOOpen(A6)
  12774.     MOVE.L  D0,D7
  12775.     BEQ wmfailed
  12776.     MOVEQ   #0,D0
  12777.     RTS
  12778.  
  12779. WriteModuleData
  12780.     MOVE.L  DOSbase(PC),A6
  12781.     MOVE.L  D7,D1
  12782.     MOVE.L  DiskDataPtr(PC),D2
  12783.     MOVE.L  DiskDataLength(PC),D3
  12784.     JSR LVOWrite(A6)
  12785.     TST.L   D0
  12786.     BEQ wmfailed
  12787.     MOVEQ   #0,D0
  12788.     RTS
  12789.  
  12790. wmfailed
  12791.     MOVEQ   #-1,D0
  12792.     RTS
  12793.  
  12794. CloseWriteMod
  12795.     MOVE.L  DOSbase(PC),A6
  12796.     MOVE.L  D7,D1
  12797.     JMP LVOClose(A6)
  12798.  
  12799. ;---- Load PLST ----
  12800.  
  12801. LoadPLST
  12802.     LEA LoadPLSTText,A0
  12803.     JSR AreYouSure
  12804.     BNE Return2
  12805.     JSR WaitForButtonUp
  12806.     LEA LoadingPLSTText(PC),A0
  12807.     BSR ShowStatusText
  12808. DoLoadPLST
  12809.     JSR StorePtrCol
  12810.     LEA PTPath,A0
  12811.     JSR CopyPath
  12812.     LEA PLSTName(PC),A0
  12813.     MOVEQ   #4,D0
  12814. dlploop MOVE.B  (A0)+,(A1)+
  12815.     DBRA    D0,dlploop
  12816.     MOVE.L  #FileName,D1
  12817.     MOVE.L  #1005,D2
  12818.     MOVE.L  DOSbase(PC),A6
  12819.     JSR LVOOpen(A6)
  12820.     MOVE.L  D0,D7
  12821.     BEQ PLSTOpenErr
  12822.     JSR SetDiskPtrCol
  12823.     CLR.L   PresetTotal
  12824.     BSR.S   AllocPLST
  12825.     MOVE.L  PLSTmem(PC),D2
  12826.     BEQ PLSTMemErr2
  12827.     MOVE.L  D7,D1
  12828.     MOVE.L  PLSTallocsize,D3
  12829.     MOVE.L  DOSBase(PC),A6
  12830.     JSR LVORead(A6)
  12831.     MOVE.L  D0,MaxPLSTOffset
  12832.     DIVU    #30,D0
  12833.     MOVE.W  D0,PresetTotal
  12834. cloplst MOVE.L  D7,D1
  12835.     MOVE.L  DOSbase(PC),A6
  12836.     JSR LVOClose(A6)
  12837.     BSR PLSTCheckNum
  12838.     BSR ShowAllRight
  12839.     JMP RestorePtrCol
  12840.  
  12841. PLSTname    dc.b    'PLST',0,0
  12842.  
  12843. AllocPLST
  12844.     BSR.S   FreePLST
  12845.     MOVE.W  MaxPLSTEntries,D0
  12846.     BEQ Return2
  12847.     MULU    #30,D0
  12848.     MOVE.L  D0,PLSTAllocSize
  12849.     MOVE.L  #MEMF_PUBLIC!MEMF_CLEAR,D1
  12850.     MOVE.L  4.W,A6
  12851.     JSR LVOAllocMem(A6)
  12852.     MOVE.L  D0,PLSTmem
  12853.     MOVE.W  MaxPLSTEntries,MaxPLSTEntries2
  12854.     RTS
  12855.  
  12856. FreePLST
  12857.     CLR.W   MaxPLSTEntries2
  12858.     CLR.L   MaxPLSTOffset
  12859.     CLR.W   PresetTotal
  12860.     MOVE.L  PLSTmem,D0
  12861.     BEQ Return2
  12862.     MOVE.L  D0,A1
  12863.     MOVE.L  PLSTAllocSize,D0
  12864.     MOVE.L  4.W,A6
  12865.     JSR LVOFreeMem(A6)
  12866.     CLR.L   PLSTmem
  12867.     RTS
  12868.  
  12869. PLSTMemErr2
  12870.     BSR.S   PLSTMemErr
  12871.     BRA cloplst
  12872.  
  12873. PLSTMemErr
  12874.     TST.W   MaxPLSTEntries
  12875.     BEQ.S   reptrco
  12876.     BSET    #0,InitError
  12877.     LEA PLSTMemText,A0
  12878. plster  BSR.S   ShowStatusText
  12879.     MOVE.W  #50,WaitTime
  12880.     JMP ErrorRestoreCol
  12881. reptrco JMP RestorePtrCol
  12882. PLSTOpenErr
  12883.     TST.W   MaxPLSTEntries
  12884.     BEQ.S   reptrco
  12885.     BSET    #1,InitError
  12886.     LEA PLSTOpenText,A0
  12887.     BRA.S   plster
  12888.  
  12889. PLSTMemText dc.b 'no mem for plst !',0
  12890. PLSTOpenText    dc.b 'plst not found ! ',0
  12891. InitError   dc.b 0,0
  12892.  
  12893.  
  12894. ShowAllRight
  12895.     MOVEM.L D0-D7/A0-A6,-(SP)
  12896.     LEA AllRightText(PC),A0
  12897.     BSR.S   ShowStatusText
  12898.     MOVEM.L (SP)+,D0-D7/A0-A6
  12899.     RTS
  12900.  
  12901. ShowStatusText
  12902.     MOVE.L  TextBplPtr(PC),A1
  12903.     ADD.L   #5131,A1
  12904.     MOVEQ   #4,D0
  12905. stloop1 MOVEQ   #16,D1
  12906. stloop2 CLR.B   (A1)+
  12907.     DBRA    D1,stloop2
  12908.     LEA 23(A1),A1
  12909.     DBRA    D0,stloop1
  12910.     MOVE.L  A0,A1
  12911.     MOVE.W  #5131,D1
  12912.     MOVEQ   #-1,D0
  12913. stloop3 ADDQ.W  #1,D0
  12914.     TST.B   (A1)+
  12915.     BNE.S   stloop3
  12916.     BRA ShowText3
  12917.  
  12918. ;---- Redraw Pattern ----
  12919.  
  12920. RedrawPattern
  12921.     TST.W   SamScrEnable
  12922.     BNE Return2
  12923.     SF  PattRfsh
  12924.     MOVE.W  #5121,TextOffset
  12925.     MOVE.W  PatternNumber+2(PC),WordNumber
  12926.     BSR Print2DecDigits ; Print PatternNumber
  12927.     MOVE.L  SongDataPtr(PC),A6
  12928.     LEA $043C(A6),A6
  12929.     MOVE.L  PatternNumber,D6
  12930.     LSL.L   #8,D6
  12931.     LSL.L   #2,D6
  12932.     ADD.L   D6,A6
  12933.     MOVE.W  #7521,TextOffset
  12934.     CLR.L   PPattPos
  12935.     LEA PeriodTable(PC),A2
  12936.     LEA RedrawBuffer(PC),A3
  12937.     LEA FastHexTable(PC),A4
  12938.     MOVEQ   #'0',D4
  12939.     MOVE.B  BlankZeroFlag,D5
  12940.     MOVEQ   #63,D6
  12941. rpnxpos MOVEQ   #3,D7
  12942.     MOVE.W  PPattPos+2(PC),WordNumber
  12943.     BSR Print2DecDigits ; Print PatternPosition
  12944.     ADDQ.W  #1,TextOffset
  12945.     ADDQ.L  #1,PPattPos
  12946. rploop  MOVEQ   #0,D0
  12947.     MOVEQ   #0,D1
  12948.     MOVE.W  (A6),D1
  12949.     AND.W   #$0FFF,D1
  12950.     BNE.S   rpfind
  12951.     MOVE.L  #'--- ',(A3)
  12952.     BRA.S   rpskip
  12953. rpfind  MOVEQ   #36,D2
  12954. rpfindloop
  12955.     CMP.W   (A2,D0.W),D1
  12956.     BEQ.S   rpfound
  12957.     ADDQ.L  #2,D0
  12958.     DBRA    D2,rpfindloop
  12959.     MOVE.L  #'??? ',(A3)
  12960.     BRA.S   rpskip
  12961. rpfound LSL.L   #1,D0
  12962.     ADD.L   NoteNamesPtr(PC),D0
  12963.     MOVE.L  D0,A0
  12964.     MOVE.L  (A0),(A3)
  12965. rpskip  MOVE.B  (A6)+,D0
  12966.     LSR.B   #4,D0
  12967.     ADD.B   #'0',D0
  12968.     MOVE.B  D0,3(A3)
  12969.     MOVE.B  (A6)+,D0
  12970.     MOVEQ   #0,D0
  12971.     MOVE.B  (A6)+,D0
  12972.     ADD.W   D0,D0
  12973.     MOVE.W  (A4,D0.W),4(A3)
  12974.     MOVEQ   #0,D0
  12975.     MOVE.B  (A6)+,D0
  12976.     ADD.W   D0,D0
  12977.     MOVE.W  (A4,D0.W),6(A3)
  12978.  
  12979.     TST.B   D5
  12980.     BEQ.S   rpskp3
  12981.     CMP.B   3(A3),D4
  12982.     BNE.S   rpskp3
  12983.     MOVE.B  #' ',3(A3)
  12984. rpskp3  MOVE.W  #9,TextLength
  12985.     MOVE.L  A3,ShowTextPtr
  12986.     BSR ShowText
  12987.     DBRA    D7,rploop  ; Next Channel
  12988.     ADD.W   #241,TextOffset
  12989.     DBRA    D6,rpnxpos ; Next PattPos
  12990.     RTS
  12991.  
  12992. RedrawBuffer    dc.b '---00000 ',0
  12993.  
  12994.  
  12995. ShowPosition
  12996.     MOVE.L  SongDataPtr(PC),A0
  12997.     LEA 952(A0),A0
  12998.     ADD.L   CurrPos(PC),A0
  12999.     MOVE.B  (A0),WordNumber+1
  13000.     MOVE.B  (A0),PattRfshNum+3
  13001.     MOVEQ   #0,D1
  13002.     MOVE.B  (A0),D1
  13003.     CMP.B   LongFFFF+3(PC),D1
  13004.     BEQ.S   spskip2
  13005.     ST  PattRfsh
  13006. spskip2 MOVE.W  #608,TextOffset
  13007.     MOVE.B  (A0),LongFFFF+3
  13008.     CMP.W   #0,CurrScreen
  13009.     BEQ.S   spokok
  13010.     CMP.W   #1,CurrScreen
  13011.     BEQ.S   spokok
  13012.     CMP.W   #6,CurrScreen
  13013.     BEQ.S   spokok
  13014.     RTS
  13015. spokok  BSR Print4DecDigits
  13016.     MOVE.W  CurrPos+2,WordNumber
  13017.     MOVE.W  #168,TextOffset
  13018.     BRA Print4DecDigits
  13019.  
  13020.  
  13021. ShowSongLength
  13022.     CMP.W   #2,CurrScreen
  13023.     BEQ.S   ShowSongName
  13024.     CMP.W   #3,CurrScreen
  13025.     BEQ.S   ShowSongName
  13026.     CMP.W   #4,CurrScreen
  13027.     BEQ Return2
  13028.     CMP.W   #5,CurrScreen
  13029.     BEQ.S   ShowSongName
  13030.     MOVE.L  SongDataPtr(PC),A0
  13031.     LEA sd_numofpatt(A0),A0
  13032.     MOVE.L  A0,CurrCmds
  13033.     CLR.W   WordNumber
  13034.     MOVE.B  (A0),WordNumber+1
  13035.     MOVE.W  #1048,TextOffset
  13036.     BSR Print4DecDigits
  13037.     MOVE.L  CurrCmds(PC),A0
  13038. ShowSongName
  13039.     MOVE.L  SongDataPtr(PC),A0
  13040.     MOVE.W  #4133,D1
  13041.     MOVEQ   #20,D0
  13042.     BRA ShowText3
  13043.  
  13044.  
  13045. ShowSampleInfo 
  13046.     MOVEQ   #0,D0
  13047.     MOVE.W  InsNum(PC),D0
  13048.     MOVE.W  D0,PlayInsNum
  13049.     BNE.S   ssiskipit
  13050.     MOVE.W  LastInsNum(PC),D0
  13051. ssiskipit
  13052.     MOVE.W  D0,D1
  13053.     LSL.L   #2,D0
  13054.     LEA SamplePtrs(PC),A0
  13055.     MOVE.L  (A0,D0.W),si_pointer
  13056.     MOVE.L  SongDataPtr(PC),A0
  13057.     LEA -10(A0),A0
  13058.     MOVE.W  D1,D0
  13059.     MULU    #30,D0
  13060.     ADD.L   D0,A0
  13061.     MOVE.L  A0,CurrCmds
  13062.     MOVE.L  22(A0),SampleInfo
  13063.     MOVE.L  26(A0),si_long
  13064.     TST.B   NoSampleInfo
  13065.     BNE ssiskip
  13066.  
  13067.     MOVE.L  A0,-(SP)
  13068.     MOVE.B  #' ',FineTuneSign
  13069.     MOVE.B  24(A0),D0
  13070.     BEQ.S   dopfitu
  13071.     MOVE.B  #'+',FineTuneSign
  13072.     BTST    #3,D0
  13073.     BEQ.S   dopfitu
  13074.     MOVE.B  #'-',FineTuneSign
  13075.     MOVEQ   #16,D1
  13076.     SUB.B   D0,D1
  13077.     MOVE.B  D1,D0
  13078. dopfitu MOVE.W  #1491,TextOffset
  13079.     BSR PrintHexDigit  ; FineTune
  13080.     LEA FineTuneSign(PC),A0
  13081.     MOVE.W  #1490,D1
  13082.     MOVEQ   #1,D0
  13083.     BSR ShowText3  ; FineTuneSign
  13084.     MOVE.L  (SP)+,A0
  13085.  
  13086.     CLR.W   WordNumber
  13087.     MOVE.B  25(A0),WordNumber+1
  13088.     MOVE.W  WordNumber,VolumeEfx
  13089.     OR.W    #$0C00,VolumeEfx
  13090.     MOVE.W  #2368,TextOffset
  13091.     BSR PrintHexWord  ; Volume
  13092.  
  13093.     MOVEQ   #0,D0
  13094.     MOVE.W  SampleInfo(PC),D0
  13095.     LSL.L   #1,D0
  13096.     MOVE.W  D0,WordNumber
  13097.     MOVE.L  SamplePos,D2
  13098.     CMP.L   D0,D2
  13099.     BLS.S   ShowLen
  13100.     MOVE.L  D0,SamplePos
  13101.     BSR ShowPos
  13102.     MOVEQ   #0,D0
  13103.     MOVE.W  SampleInfo(PC),D0
  13104.     LSL.L   #1,D0
  13105.     MOVE.W  D0,WordNumber
  13106. ShowLen MOVE.W  #2808,TextOffset
  13107.     BSR PrintHexWord  ; Length
  13108.  
  13109.     MOVE.W  si_long,D0
  13110.     ADD.W   D0,D0
  13111.     MOVE.W  D0,WordNumber
  13112.     MOVE.W  #3248,TextOffset
  13113.     BSR PrintHexWord  ; Repeat
  13114.  
  13115.     MOVE.W  si_long+2,D0
  13116.     ADD.W   D0,D0
  13117.     MOVE.W  D0,WordNumber
  13118.     MOVE.W  #3688,TextOffset
  13119.     BSR PrintHexWord  ; RepLen
  13120.  
  13121.     BSR.S   ssiinst
  13122.  
  13123. ssiskip TST.B   NoSampleInfo
  13124.     BEQ.S   ssiskp2
  13125.     CMP.W   #5,CurrScreen
  13126.     BEQ.S   ssiskp2
  13127.     CMP.W   #3,CurrScreen
  13128.     BNE Return2
  13129. ssiskp2 MOVE.L  CurrCmds(PC),A0
  13130.     MOVE.W  #4573,D1
  13131.     MOVEQ   #22,D0
  13132.     BRA ShowText3  ; SampleName
  13133.  
  13134. ssiinst TST.B   NoSampleInfo
  13135.     BNE Return2
  13136.     MOVE.W  InsNum(PC),WordNumber
  13137.     MOVE.W  #1928,TextOffset
  13138.     BRA PrintHexWord  ; SampleNumber
  13139.  
  13140. FineTuneSign    dc.b ' ',0
  13141. VolumeEfx   dc.w 0
  13142.  
  13143. ;---- Print Decimal Digits ----
  13144.  
  13145. Print2DecDigits
  13146.     MOVE.W  #2,TextLength
  13147.     MOVEQ   #0,D1
  13148.     MOVE.W  WordNumber(PC),D1
  13149.     LEA NumberText(PC),A0
  13150.     BRA.S   pdig
  13151.  
  13152. Print3DecDigits
  13153.     MOVE.W  #3,TextLength
  13154.     MOVEQ   #0,D1
  13155.     MOVE.W  WordNumber(PC),D1
  13156.     LEA NumberText(PC),A0
  13157.     BRA.S   pdig100
  13158.  
  13159. Print4DecDigits
  13160.     MOVE.W  #4,TextLength
  13161.     MOVEQ   #0,D1
  13162.     MOVE.W  WordNumber(PC),D1
  13163.     LEA NumberText(PC),A0
  13164.     DIVU    #1000,D1
  13165.     BSR.S   DoOneDigit
  13166. pdig100 DIVU    #100,D1
  13167.     BSR.S   DoOneDigit
  13168. pdig    DIVU    #10,D1
  13169.     BSR.S   DoOneDigit
  13170.     BSR.S   DoOneDigit
  13171.     MOVE.L  #NumberText,A0
  13172.     BRA ShowText2
  13173.  
  13174. DoOneDigit
  13175.     ADD.B   #'0',D1
  13176.     MOVE.B  D1,(A0)+
  13177.     CLR.W   D1
  13178.     SWAP    D1
  13179.     RTS
  13180.  
  13181. Print6DecDigits
  13182.     LEA NumberText,A0
  13183.     MOVE.L  D0,D1
  13184.     CMP.L   #1000000,D1
  13185.     BHS toobig
  13186.  
  13187.     SWAP    D1
  13188.     CLR.W   D1
  13189.     SWAP    D1
  13190.     DIVU    #10,D1
  13191.     SWAP    D1
  13192.     ADD.B   #'0',D1
  13193.     MOVE.B  D1,5(A0)
  13194.     CMP.L   #10,D0
  13195.     BLO.S   p6zero1
  13196.  
  13197.     DIVU    #100,D0
  13198.     MOVE.L  D0,D1
  13199.     CLR.W   D0
  13200.     SWAP    D0
  13201.     DIVU    #10,D0
  13202.     ADD.B   #'0',D0
  13203.     MOVE.B  D0,4(A0)
  13204.     AND.L   #$FFFF,D1
  13205.     BEQ.S   p6zero2
  13206.     DIVU    #10,D1
  13207.     SWAP    D1
  13208.     ADD.B   #'0',D1
  13209.     MOVE.B  D1,3(A0)
  13210.     CLR.W   D1
  13211.     SWAP    D1
  13212.     TST.W   D1
  13213.     BEQ.S   p6zero3
  13214.     DIVU    #10,D1
  13215.     SWAP    D1
  13216.     ADD.B   #'0',D1
  13217.     MOVE.B  D1,2(A0)
  13218.     CLR.W   D1
  13219.     SWAP    D1
  13220.     TST.W   D1
  13221.     BEQ.S   p6zero4
  13222.     DIVU    #10,D1
  13223.     SWAP    D1
  13224.     ADD.B   #'0',D1
  13225.     MOVE.B  D1,1(A0)
  13226.     CLR.W   D1
  13227.     SWAP    D1
  13228.     TST.W   D1
  13229.     BEQ.S   p6zero5
  13230.     DIVU    #10,D1
  13231.     SWAP    D1
  13232.     ADD.B   #'0',D1
  13233.     MOVE.B  D1,(A0)
  13234.     BRA.S   p6end
  13235.  
  13236. p6zero1 MOVE.B  #' ',4(A0)
  13237. p6zero2 MOVE.B  #' ',3(A0)
  13238. p6zero3 MOVE.B  #' ',2(A0)
  13239. p6zero4 MOVE.B  #' ',1(A0)
  13240. p6zero5 MOVE.B  #' ',0(A0)
  13241. p6end   MOVE.W  #6,TextLength
  13242.     BRA ShowText2
  13243.  
  13244. toobig  MOVE.B  #' ',D0
  13245.     BSR.S   toobig2
  13246.     DIVU    #1000,D0
  13247.     MOVE.W  D0,WordNumber
  13248.     BSR Print4DecDigits
  13249.     MOVE.B  #'K',D0
  13250. toobig2 LEA NumberText(PC),A0
  13251.     MOVE.B  D0,(A0)
  13252.     MOVE.W  #1,TextLength
  13253.     BRA ShowText2
  13254.  
  13255. NumberText  dcb.b   6,0
  13256.  
  13257. ;---- Print Hex Digits ----
  13258.  
  13259. PrintHiInstrNum
  13260.     MOVEQ   #0,D0
  13261.     TST.W   CurrentPlayNote
  13262.     BEQ.S   phin2
  13263.     MOVE.W  InsNum(PC),D0
  13264.     LSR.W   #4,D0
  13265.     BNE.S   PrintHexDigit
  13266. phin2   TST.B   BlankZeroFlag
  13267.     BEQ.S   PrintHexDigit
  13268.     LEA BlankInsText(PC),A0
  13269.     BRA.S   phd2
  13270. PrintHexDigit
  13271.     AND.L   #$0F,D0
  13272.     ADD.L   D0,D0
  13273.     LEA FastHexTable+1(PC),A0
  13274.     ADD.L   D0,A0
  13275. phd2    MOVE.W  #1,TextLength
  13276.     BRA.S   ShowText2
  13277.  
  13278. BlankInsText    dc.b " ",0
  13279.  
  13280. PrintHexWord
  13281.     LEA WordNumber(PC),A0
  13282.     MOVEQ   #0,D0
  13283.     MOVE.B  (A0),D0
  13284.     LSL.L   #1,D0
  13285.     LEA FastHexTable(PC),A0
  13286.     ADD.L   D0,A0
  13287.     MOVE.W  #2,TextLength
  13288.     BSR.S   ShowText2
  13289. PrintHexByte
  13290.     LEA WordNumber(PC),A0
  13291.     MOVEQ   #0,D0
  13292.     MOVE.B  1(A0),D0
  13293.     LSL.L   #1,D0
  13294.     MOVE.L  #FastHexTable,A0
  13295.     ADD.L   D0,A0
  13296.     MOVE.W  #2,TextLength
  13297.     BSR.S   ShowText2
  13298.     CLR.W   WordNumber
  13299.     RTS
  13300.  
  13301. ;---- Text Output Routines ----
  13302.  
  13303. ShowText3
  13304.     MOVE.W  D0,TextLength
  13305.     MOVE.W  D1,TextOffset
  13306. ShowText2
  13307.     MOVE.L  A0,ShowTextPtr
  13308. ShowText
  13309.     MOVEM.L A2-A4,-(SP)
  13310.     LEA TextTable(PC),A3
  13311.     LEA FontData,A4
  13312.     MOVE.W  TextLength(PC),D0
  13313.     MOVE.L  TextBplPtr(PC),A1
  13314.     MOVE.W  TextOffset(PC),D1
  13315.     LEA (A1,D1.W),A1
  13316.     ADD.W   D0,TextOffset
  13317.     MOVE.L  ShowTextPtr(PC),A0
  13318.     BRA.S   dstlope
  13319. dstloop MOVEQ   #0,D1
  13320.     MOVE.B  (A0)+,D1
  13321.     BNE.S   dstskip
  13322.     MOVE.B  ShowZeroFlag(PC),D1
  13323. dstskip MOVE.B  (A3,D1.W),D1
  13324.     LSL.W   #3,D1
  13325.     MOVE.L  A4,A2
  13326.     ADD.L   D1,A2
  13327.     MOVE.B  (A2)+,(A1)+
  13328.     MOVE.B  (A2)+,40-1(A1)
  13329.     MOVE.B  (A2)+,80-1(A1)
  13330.     MOVE.B  (A2)+,120-1(A1)
  13331.     MOVE.B  (A2),160-1(A1)
  13332. dstlope DBRA    D0,dstloop
  13333.     MOVEM.L (SP)+,A2-A4
  13334.     RTS
  13335.  
  13336. SpaceShowText
  13337.     MOVE.W  ShowZeroFlag(PC),-(SP)
  13338.     MOVE.B  #' ',ShowZeroFlag
  13339.     BSR.S   ShowText
  13340.     MOVE.W  (SP)+,ShowZeroFlag
  13341.     RTS
  13342.  
  13343. ShowZeroFlag    dc.b    95,0
  13344.  
  13345. TextTable
  13346.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 0
  13347.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13348.     dc.b 00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15 ; 32
  13349.     dc.b 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
  13350.     dc.b 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 ; 64
  13351.     dc.b 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63
  13352.     dc.b 69,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 ; 96
  13353.     dc.b 48,49,50,51,52,53,54,55,56,57,58,65,66,67,68,63
  13354.     dc.b 69,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 128
  13355.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13356.     dc.b 0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 160
  13357.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13358.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 192
  13359.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13360.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 224
  13361.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13362.  
  13363.  
  13364. ;---- Set Sprite Position ----
  13365.  
  13366. SetSpritePos
  13367.     ADD.W   #$002C,D1
  13368.     ADD.W   D1,D2
  13369.     ROL.W   #7,D2
  13370.     ASL.W   #1,D2
  13371.     BCC.S   sppskip
  13372.     OR.W    #2,D2
  13373. sppskip ROL.W   #7,D1
  13374.     ASL.W   #1,D1
  13375.     BCC.S   sppskip2
  13376.     OR.W    #4,D2
  13377. sppskip2
  13378.     ADD.W   #$007D,D0
  13379.     ASR.W   #1,D0
  13380.     BCC.S   sppskip3
  13381.     OR.W    #1,D2
  13382. sppskip3
  13383.     OR.W    D0,D1
  13384.     MOVE.W  D1,(A0)
  13385.     MOVE.W  D2,2(A0)
  13386.     RTS
  13387.  
  13388.  
  13389. ;---- DoLoad / DoSave Data ----
  13390.  
  13391. DoLoadData
  13392.     TST.L   DiskDataLength
  13393.     BEQ.S   dlsend
  13394.     TST.L   DiskDataPtr
  13395.     BEQ.S   dlsend
  13396.     JSR SetDiskPtrCol
  13397.     LEA LoadingText(PC),A0
  13398.     BSR ShowStatusText
  13399.     MOVE.L  DOSbase(PC),A6
  13400.     MOVE.L  FileNamePtr(PC),D1
  13401.     MOVE.L  #1005,D2
  13402.     JSR LVOOpen(A6)
  13403.     MOVE.L  D0,FileHandle
  13404.     BEQ.S   CantOpenFile
  13405.     MOVE.L  FileHandle(PC),D1
  13406.     MOVE.L  DiskDataPtr(PC),D2
  13407.     MOVE.L  DiskDataLength(PC),D3
  13408.     JSR LVORead(A6)
  13409.     MOVE.L  FileHandle(PC),D1
  13410.     JSR LVOClose(A6)
  13411. dlsend  CLR.L   FileHandle
  13412.     JSR SetNormalPtrCol
  13413.     MOVEQ   #-1,D0
  13414.     RTS
  13415.  
  13416. CantOpenFile
  13417.     LEA CantOpenFileText(PC),A0
  13418. caopfil BSR ShowStatusText
  13419.     JSR SetErrorPtrCol
  13420.     MOVEQ   #0,D0
  13421.     RTS
  13422.  
  13423. CantSaveFile
  13424.     LEA CantSaveFileText(PC),A0
  13425.     BRA.S   caopfil
  13426. CantExamFile
  13427.     LEA CantExamFileText(PC),A0
  13428.     BRA.S   caopfil
  13429. CantFindFile
  13430.     LEA CantFindFileText(PC),A0
  13431.     BRA.S   caopfil
  13432. FileIsEmpty
  13433.     LEA FileIsEmptyText(PC),A0
  13434.     BRA.S   caopfil
  13435.  
  13436. CantOpenFileText    dc.b "can't open file !",0
  13437. CantSaveFileText    dc.b "can't save file !",0
  13438. CantExamFileText    dc.b "examine error !",0
  13439. CantFindFileText    dc.b "can't find file !",0
  13440. FileIsEmptyText     dc.b "file is empty !",0
  13441.  
  13442. DoSaveData
  13443.     JSR SetDiskPtrCol
  13444.     LEA SavingText(PC),A0
  13445.     BSR ShowStatusText
  13446.     MOVE.L  DOSbase(PC),A6
  13447.     MOVE.L  FileNamePtr(PC),D1
  13448.     MOVE.L  #1006,D2
  13449.     JSR LVOOpen(A6)
  13450.     MOVE.L  D0,FileHandle
  13451.     BEQ CantOpenFile
  13452.     MOVE.L  FileHandle(PC),D1
  13453.     MOVE.L  DiskDataPtr(PC),D2
  13454.     MOVE.L  DiskDataLength(PC),D3
  13455.     JSR LVOWrite(A6)
  13456.     MOVE.L  FileHandle(PC),D1
  13457.     JSR LVOClose(A6)
  13458.     CLR.L   FileHandle
  13459.     JMP SetNormalPtrCol
  13460.  
  13461. ;---- PLST ----
  13462.  
  13463. PLST    CLR.B   RawKeyCode
  13464.     CMP.W   #6,CurrScreen
  13465.     BEQ ExitPLST
  13466.     CMP.W   #1,CurrScreen
  13467.     BNE Return2
  13468.     JSR WaitForButtonUp
  13469.     MOVE.W  #6,CurrScreen
  13470.     JSR ClearRightArea
  13471.     JSR ClearAnalyzerColors
  13472.     BSR.S   DrawPLSTScreen
  13473.     BEQ ExitPLST
  13474.     BSR RedrawPLST
  13475. PLST_rts
  13476.     RTS
  13477.  
  13478. DrawPLSTScreen
  13479.     LEA PLSTData,A0
  13480.     MOVE.L  #PLSTSize,D0
  13481.     BSR Decompact
  13482.     BEQ Return2
  13483.     LEA TopMenusPos,A0
  13484.     MOVEQ   #98,D0
  13485. dplstloop1
  13486.     MOVEQ   #24,D1
  13487. dplstloop2
  13488.     MOVE.B  2574(A1),10240(A0)
  13489.     MOVE.B  (A1)+,(A0)+
  13490.     DBRA    D1,dplstloop2
  13491.     LEA 15(A0),A0
  13492.     ADDQ.L  #1,A1
  13493.     DBRA    D0,dplstloop1
  13494.     BSR FreeDecompMem
  13495.     MOVEQ   #-1,D0
  13496.     RTS
  13497.  
  13498. ShowDiskNames
  13499.     MOVE.W  #616,TextOffset
  13500.     MOVE.W  #5,TextLength
  13501.     MOVE.L  #STText1,A0
  13502.     BSR ShowText2
  13503.     ADDQ.W  #1,TextOffset
  13504.     MOVE.L  #STText2,A0
  13505.     BSR ShowText2
  13506.     ADDQ.W  #1,TextOffset
  13507.     MOVE.L  #STText3,A0
  13508.     BRA ShowText2
  13509.  
  13510. PLSTCheckNum
  13511.     TST.L   PLSTmem
  13512.     BEQ NoPLST
  13513.     TST.L   MaxPLSTOffset
  13514.     BEQ NoPLST
  13515.     MOVE.L  PLSTmem(PC),A0
  13516.     MOVE.W  PresetTotal(PC),D7
  13517.     SUBQ.W  #1,D7
  13518.     TST.B   STText1Number
  13519.     BNE plstsskip
  13520.     TST.B   STText2Number
  13521.     BNE plstsskip
  13522.     TST.B   STText3Number
  13523.     BEQ PLSTMarkAll
  13524. plstsskip
  13525.     MOVE.L  STText1Number-1(PC),A3
  13526.     MOVE.L  STText2Number-1(PC),A4
  13527.     MOVE.L  STText3Number-1(PC),A5
  13528.     MOVEQ   #0,D6
  13529. PLSTmarkloop
  13530.     MOVE.W  #'st',(A0)  ; Set lowercase 'st'
  13531.     MOVE.B  3(A0),D0
  13532.     CMP.B   #'a',D0
  13533.     BLO.S   pmlskp1
  13534.     SUB.B   #32,D0
  13535. pmlskp1 MOVE.B  D0,3(A0)
  13536.     MOVE.B  4(A0),D0
  13537.     CMP.B   #'a',D0
  13538.     BLO.S   pmlskp2
  13539.     SUB.B   #32,D0
  13540. pmlskp2 MOVE.B  D0,4(A0)
  13541.     MOVE.L  2(A0),D0    ; Get number ('-01:' etc)
  13542. PLSTchk1
  13543.     CMP.L   A3,D0
  13544.     BNE PLSTchk2
  13545.     MOVE.W  #'ST',(A0)
  13546.     ADDQ.W  #1,D6
  13547.     BRA PLSTmarknext
  13548.  
  13549. PLSTchk2
  13550.     CMP.L   A4,D0
  13551.     BNE PLSTchk3
  13552.     MOVE.W  #'ST',(A0)
  13553.     ADDQ.W  #1,D6
  13554.     BRA PLSTmarknext
  13555.  
  13556. PLSTchk3
  13557.     CMP.L   A5,D0
  13558.     BNE PLSTmarknext
  13559.     MOVE.W  #'ST',(A0)
  13560.     ADDQ.W  #1,D6
  13561. PLSTmarknext
  13562.     ADD.L   #30,A0
  13563.     DBRA    D7,PLSTmarkloop
  13564.     MOVE.W  D6,PresetMarkTotal
  13565.     CLR.W   PLSTpos
  13566.     CLR.L   PLSTOffset
  13567.     RTS
  13568.  
  13569. PLSTMarkAll
  13570.     MOVE.W  #'ST',(A0)  ; Set uppercase 'ST'
  13571.     LEA 30(A0),A0
  13572.     DBRA    D7,PLSTMarkAll
  13573.     MOVE.W  PresetTotal(PC),PresetMarkTotal
  13574.     CLR.W   PLSTpos
  13575.     CLR.L   PLSTOffset
  13576.     RTS
  13577.  
  13578. NoPLST  CLR.W   PresetMarkTotal
  13579.     CLR.W   PLSTpos
  13580.     CLR.L   PLSTOffset
  13581.     RTS
  13582.  
  13583. RedrawPLST
  13584.     MOVE.W  PresetMarkTotal(PC),WordNumber
  13585.     MOVE.W  #189,TextOffset
  13586.     BSR Print4DecDigits
  13587.     BSR ShowDiskNames
  13588.     TST.L   PLSTmem
  13589.     BEQ PLST_rts
  13590.     TST.L   MaxPLSTOffset
  13591.     BEQ PLST_rts
  13592.  
  13593.     MOVE.L  PLSTOffset(PC),D6
  13594.     MOVE.L  PLSTmem(PC),A6
  13595.     MOVE.W  #976,A5 ; TextOffset
  13596.     LEA PLSTOffset(PC),A4
  13597.     MOVEQ   #11,D7  ; Number of lines to print
  13598.     TST.L   D6
  13599.     BMI EndOfPLST
  13600. dtplstloop
  13601.     CMP.W   #'ST',(A6,D6.L) ; Check for 'ST'
  13602.     BNE PLSTNext
  13603.     MOVE.L  D6,(A4)+
  13604.     MOVE.W  A5,TextOffset
  13605.     MOVE.W  #19,TextLength
  13606.     LEA (A6,D6.L),A3
  13607.     ADDQ.L  #3,A3
  13608.     MOVE.L  A3,ShowTextPtr
  13609.     MOVEM.L D0-D7/A0-A6,-(SP)
  13610.     BSR SpaceShowText
  13611.     MOVEM.L (SP)+,D0-D7/A0-A6
  13612.     MOVE.W  22(A6,D6.L),WordNumber
  13613.     MOVE.W  WordNumber,D0
  13614.     LSL.W   #1,D0
  13615.     MOVE.W  D0,WordNumber
  13616.     MOVEM.L D0-D7/A0-A6,-(SP)
  13617.     BSR PrintHexWord
  13618.     MOVEM.L (SP)+,D0-D7/A0-A6
  13619.     ADD.L   #30,D6
  13620.     CMP.L   MaxPLSTOffset(PC),D6
  13621.     BHI EndOfPLST
  13622.     ADD.W   #240,A5 ; Next Screen position
  13623.     DBRA    D7,dtplstloop
  13624.     RTS
  13625.  
  13626. PLSTNext
  13627.     ADD.L   #30,D6
  13628.     CMP.L   MaxPLSTOffset(PC),D6
  13629.     BHI EndOfPLST
  13630.     BRA dtplstloop
  13631.  
  13632. EndOfPLST
  13633.     MOVE.L  #$FFFFFFFF,(A4)+
  13634.     MOVE.W  A5,TextOffset
  13635.     MOVE.W  #23,TextLength
  13636.     MOVE.L  #EmptyLineText,ShowTextPtr
  13637.     MOVEM.L D0-D7/A0-A6,-(SP)
  13638.     BSR SpaceShowText
  13639.     MOVEM.L (SP)+,D0-D7/A0-A6
  13640.     ADD.W   #240,A5
  13641.     DBRA    D7,EndOfPLST
  13642.     RTS
  13643.  
  13644. TypeInDisk1
  13645.     LEA STText1Number(PC),A6
  13646.     MOVE.W  #156,LineCurX
  13647.     BRA DoTypeInDisk
  13648.  
  13649. TypeInDisk2
  13650.     LEA STText2Number(PC),A6
  13651.     MOVE.W  #204,LineCurX
  13652.     BRA DoTypeInDisk
  13653.  
  13654. TypeInDisk3
  13655.     LEA STText3Number(PC),A6
  13656.     MOVE.W  #252,LineCurX
  13657. DoTypeInDisk
  13658.     CLR.B   (A6)
  13659.     CLR.B   1(A6)
  13660.     JSR StorePtrCol
  13661.     JSR SetWaitPtrCol
  13662.     BSR ShowDiskNames
  13663.     MOVE.W  #20,LineCurY
  13664.     BSR UpdateLineCurPos
  13665.     BSR GetHexKey
  13666.     TST.B   RawKeyCode
  13667.     BNE ClearDiskNum
  13668.     BTST    #2,$DFF016
  13669.     BEQ ClearDiskNum
  13670.     ADD.W   D1,D1
  13671.     LEA FastHexTable+1(PC),A0
  13672.     MOVE.B  (A0,D1.W),(A6)
  13673.     ADDQ.W  #8,LineCurX
  13674.     BSR ShowDiskNames
  13675.     BSR UpdateLineCurPos
  13676.     BSR GetHexKey
  13677.     TST.B   RawKeyCode
  13678.     BNE ClearDiskNum
  13679.     BTST    #2,$DFF016
  13680.     BEQ ClearDiskNum
  13681.     ADD.W   D1,D1
  13682.     LEA FastHexTable+1(PC),A0
  13683.     MOVE.B  (A0,D1.W),1(A6)
  13684.     JSR RestorePtrCol
  13685.     BSR PLSTCheckNum
  13686.     BSR RedrawPLST
  13687.     CLR.W   LineCurX
  13688.     MOVE.W  #270,LineCurY
  13689.     BRA UpdateLineCurPos
  13690.  
  13691. ClearAllDisks
  13692.     BSR DoClearDisks
  13693.     BSR PLSTCheckNum
  13694.     BRA RedrawPLST
  13695.  
  13696. DoClearDisks
  13697.     MOVEQ   #0,D0
  13698.     MOVE.B  D0,STText1Number
  13699.     MOVE.B  D0,STText1Number+1
  13700.     MOVE.B  D0,STText2Number
  13701.     MOVE.B  D0,STText2Number+1
  13702.     MOVE.B  D0,STText3Number
  13703.     MOVE.B  D0,STText3Number+1
  13704.     RTS
  13705.  
  13706. MountList
  13707.     JSR StorePtrCol
  13708.     JSR SetDiskPtrCol
  13709.     BSR DoClearDisks
  13710.     MOVE.W  #1,MountFlag
  13711.     LEA df0text(PC),A4
  13712.     BSR DoMountList
  13713.     LEA STText1(PC),A0
  13714.     BSR CheckMountName
  13715.     LEA df1text(PC),A4
  13716.     BSR DoMountList
  13717.     LEA STText2(PC),A0
  13718.     BSR CheckMountName
  13719.     LEA df2text(PC),A4
  13720.     BSR DoMountList
  13721.     LEA STText3(PC),A0
  13722.     BSR CheckMountName
  13723.     CLR.W   MountFlag
  13724.     JSR RestorePtrCol
  13725.     BRA cdisknum2
  13726.  
  13727. DoMountList
  13728.     CLR.L   FIB_Filename
  13729.     CLR.L   FIB_Filename+4
  13730.     CLR.L   FIB_Filename+8
  13731.     MOVE.L  DOSBase(PC),A6
  13732.     MOVE.L  A4,D1
  13733.     MOVEQ   #-2,D2
  13734.     JSR LVOLock(A6)
  13735.     MOVE.L  D0,FileLock
  13736.     BEQ MountError
  13737.     MOVE.L  FileLock(PC),D1
  13738.     MOVE.L  #FileInfoBlock,D2
  13739.     JSR LVOExamine(A6)
  13740.     TST.L   D0
  13741.     BEQ MountError
  13742.     MOVE.L  FileLock(PC),D1
  13743.     JSR LVOUnLock(A6)
  13744. MountError
  13745.     MOVEQ   #-1,D0
  13746.     RTS
  13747.  
  13748. CheckMountName
  13749.     MOVE.W  FIB_Filename,D0
  13750.     BEQ MountError
  13751.     MOVE.W  #'ST',D1    ; Check for ST
  13752.     AND.W   #$1F1F,D0
  13753.     AND.W   #$1F1F,D1
  13754.     CMP.W   D0,D1
  13755.     BNE ClearDiskNum
  13756.     MOVE.B  FIB_Filename+3,D0
  13757.     LSL.W   #8,D0
  13758.     MOVE.B  FIB_Filename+4,D0
  13759.     CMP.W   #'00',D0
  13760.     BEQ ClearDiskNum
  13761.     MOVE.B  D0,4(A0)    ; Put disk number into ST-xx
  13762.     LSR.W   #8,D0
  13763.     MOVE.B  D0,3(A0)
  13764.     MOVEQ   #0,D0
  13765.     RTS
  13766.  
  13767. ClearDiskNum
  13768.     CLR.B   RawKeyCode
  13769.     JSR RestorePtrCol
  13770.     CLR.B   (A6)
  13771.     CLR.B   1(A6)
  13772.     CLR.W   LineCurX
  13773.     MOVE.W  #270,LineCurY
  13774.     BSR UpdateLineCurPos
  13775. cdisknum2
  13776.     BSR PLSTCheckNum
  13777.     BRA RedrawPLST
  13778.  
  13779. df0text dc.b 'DF0:',0,0
  13780. df1text dc.b 'DF1:',0,0
  13781. df2text dc.b 'DF2:',0,0
  13782.  
  13783. CheckPLSTGadgs
  13784.     MOVEM.W MouseX2(PC),D0/D1
  13785.     CMP.W   #120,D0
  13786.     BLO cplstend
  13787.     CMP.W   #23,D1
  13788.     BHS PLSTPressed
  13789.     CMP.W   #12,D1
  13790.     BHS PLSTLine2
  13791. PLSTLine1
  13792.     CMP.W   #268,D0
  13793.     BHS ExitPLST
  13794.     CMP.W   #168,D0
  13795.     BHS cplstend
  13796.     CMP.W   #120,D0
  13797.     BHS ClearAllDisks
  13798.     RTS
  13799.  
  13800. PLSTLine2
  13801.     CMP.W   #268,D0
  13802.     BHS MountList
  13803.     CMP.W   #218,D0
  13804.     BHS TypeInDisk3
  13805.     CMP.W   #168,D0
  13806.     BHS TypeInDisk2
  13807.     BRA TypeInDisk1
  13808. cplstend
  13809.     RTS
  13810.  
  13811. ExitPLST
  13812.     JSR WaitForButtonUp
  13813.     CLR.B   RawKeyCode
  13814.     JSR ClearRightArea
  13815.     JMP DisplayMainScreen
  13816.  
  13817. PLSTOneUp
  13818.     TST.W   PresetMarkTotal
  13819.     BEQ Return2
  13820.     BTST    #6,$BFE001
  13821.     BEQ PLST_rts
  13822.     MOVE.W  PLSTpos,D0
  13823.     MOVE.W  D0,D2
  13824.     SUBQ.W  #1,D0
  13825.     TST.W   ShiftKeyStatus
  13826.     BNE.S   pouski2
  13827.     BTST    #2,$DFF016
  13828.     BNE pouskip
  13829. pouski2 SUB.W   #9,D0
  13830. pouskip TST.W   D0
  13831.     BPL DoPLSTUpDown
  13832.     CLR.W   D0
  13833.     BRA DoPLSTUpDown
  13834.  
  13835. PLSTOneDown
  13836.     TST.W   PresetMarkTotal
  13837.     BEQ Return2
  13838.     BTST    #6,$BFE001
  13839.     BEQ PLST_rts
  13840.     MOVE.W  PLSTpos(PC),D0
  13841.     MOVE.W  D0,D2
  13842.     ADDQ.W  #1,D0
  13843.     TST.W   ShiftKeyStatus
  13844.     BNE.S   podski2
  13845.     BTST    #2,$DFF016
  13846.     BNE podskip
  13847. podski2 ADD.W   #9,D0
  13848. podskip MOVE.W  PresetMarkTotal(PC),D1
  13849.     SUB.W   #12,D1
  13850.     CMP.W   D0,D1
  13851.     BHS DoPLSTUpDown
  13852.     MOVE.W  D1,D0
  13853. DoPLSTUpDown
  13854.     BSR UpdateOffset
  13855.     BRA RedrawPLST
  13856.  
  13857. UpdateOffset
  13858.     MOVE.W  PLSTpos(PC),D1
  13859.     MOVE.W  D0,PLSTpos
  13860.     CMP.W   D0,D1
  13861.     BEQ Return2
  13862.     TST.W   D0
  13863.     BEQ ZeroPLSTOffset
  13864.     SUBQ.W  #1,D0
  13865.     MOVE.L  PLSTmem(PC),A0
  13866.     MOVEQ   #0,D6
  13867. cpoloop CMP.W   #'ST',(A0,D6.L) ; Check for 'ST'
  13868.     BEQ NextPLSTOffset
  13869.     ADD.L   #30,D6
  13870.     BRA cpoloop
  13871. NextPLSTOffset
  13872.     ADD.L   #30,D6
  13873.     DBRA    D0,cpoloop
  13874.     MOVE.L  D6,PLSTOffset
  13875.     RTS
  13876.  
  13877. ZeroPLSTOffset
  13878.     CLR.L   PLSTOffset
  13879.     RTS
  13880.  
  13881. PLSTPressed
  13882.     CMP.W   #24,D1
  13883.     BLO Return2
  13884.     CMP.W   #95,D1
  13885.     BHI Return2
  13886.     SUB.W   #24,D1
  13887.     AND.L   #$0000FFFF,D1
  13888.     DIVU    #6,D1
  13889.     LSL.W   #2,D1
  13890.     LEA PLSTOffset(PC),A0
  13891.     MOVE.L  (A0,D1.W),D1
  13892.     BMI Return2
  13893.     DIVU    #30,D1
  13894.     ADDQ.W  #1,D1
  13895.     MOVE.W  D1,CurrentPreset
  13896.     JSR WaitForButtonUp
  13897.     BRA UsePreset
  13898.  
  13899. ;---- Preset Editor/PED ----
  13900.  
  13901. PresetEditor
  13902.     JSR WaitForButtonUp
  13903.     MOVE.W  #4,CurrScreen
  13904.     ST  DisableAnalyzer
  13905.     ST  NoSampleInfo
  13906.     BSR SwapPresEdScreen
  13907.     BEQ pedexi2
  13908. PED_Refresh
  13909.     CLR.W   PED_Action
  13910.     MOVE.L  TextBplPtr(PC),A0
  13911.     MOVE.W  #1219,D0
  13912. pedloop CLR.L   (A0)+
  13913.     DBRA    D0,pedloop
  13914.     JSR SetNormalPtrCol
  13915.     JSR ClearAnalyzerColors
  13916.     BSR ShowPEDnumbers
  13917.     BRA ShowPresetNames
  13918.  
  13919. SwapPresEdScreen
  13920.     MOVE.L  DecompMemPtr,D0
  13921.     BEQ speds2
  13922.     MOVE.L  D0,A1
  13923.     BSR speds3
  13924.     BRA FreeDecompMem
  13925. speds2  LEA PresetEdData,A0
  13926.     MOVE.L  #PresetEdSize,D0
  13927.     BSR Decompact
  13928.     BEQ Return2
  13929. speds3  LEA BitplaneData,A0
  13930.     MOVEQ   #1,D2
  13931. spesloop1
  13932.     MOVE.W  #1219,D0
  13933. spesloop2
  13934.     MOVE.L  (A0),D1
  13935.     MOVE.L  (A1),(A0)+
  13936.     MOVE.L  D1,(A1)+
  13937.     DBRA    D0,spesloop2
  13938.     LEA $14F0(A0),A0
  13939.     DBRA    D2,spesloop1
  13940.     MOVEQ   #-1,D0
  13941.     RTS
  13942.  
  13943. CheckPresEdGadgs
  13944.     MOVEM.W MouseX2(PC),D0/D1
  13945.     CMP.W   #45,D1
  13946.     BHS CheckPEDnames
  13947.     CLR.W   PED_Action
  13948.     JSR SetNormalPtrCol
  13949.     CMP.W   #307,D0
  13950.     BHS PED_GotoPLST
  13951. PED_Menu1
  13952.     CMP.W   #101,D0
  13953.     BHS PED_Menu2
  13954.     CMP.W   #34,D1
  13955.     BHS PED_DeleteDisk
  13956.     CMP.W   #23,D1
  13957.     BHS PED_Delete
  13958.     CMP.W   #12,D1
  13959.     BHS PED_Insert
  13960.     BRA PED_AddPathGadg
  13961.  
  13962. PED_Menu2  
  13963.     CMP.W   #209,D0
  13964.     BHS PED_Menu3
  13965.     CMP.W   #34,D1
  13966.     BHS PED_ClearPLST
  13967.     CMP.W   #23,D1
  13968.     BHS Return2
  13969.     CMP.W   #12,D1
  13970.     BHS PED_Disk
  13971.     BRA PED_EnterPath
  13972.  
  13973. PED_Menu3  
  13974.     CMP.W   #34,D1
  13975.     BHS PED_Print
  13976.     CMP.W   #23,D1
  13977.     BHS WritePLST
  13978.     CMP.W   #12,D1
  13979.     BHS.S   xLoadPLST
  13980.     BRA PED_EnterPath
  13981.  
  13982. xLoadPLST
  13983.     BSR LoadPLST
  13984.     MOVE.W  #1,PEDPos
  13985.     BRA PED_Refresh
  13986.  
  13987. PED_GotoPLST
  13988.     BSR PED_Exit
  13989.     BRA PLST
  13990.  
  13991. PED_Exit
  13992.     JSR WaitForButtonUp
  13993.     BSR PLSTCheckNum
  13994.     BSR SwapPresEdScreen
  13995.     MOVE.L  TextBplPtr(PC),A0
  13996.     MOVE.W  #1219,D0
  13997. pedeloop    CLR.L   (A0)+
  13998.     DBRA    D0,pedeloop
  13999.     CLR.B   RawKeyCode
  14000. pedexi2 JSR ClearAnalyzerColors
  14001.     JMP DisplayMainAll
  14002.  
  14003. PED_AddPathGadg
  14004.     TST.L   PLSTmem
  14005.     BNE pedawok
  14006.     BSR AllocPLST
  14007.     TST.L   PLSTmem
  14008.     BEQ PLSTMemErr
  14009. pedawok MOVE.L  DOSbase(PC),A6
  14010.     MOVE.L  #PEdDefaultPath,D1
  14011.     MOVEQ   #-2,D2
  14012.     JSR LVOLock(A6)
  14013.     MOVE.L  D0,FileLock
  14014.     BEQ UnlockReadPath
  14015.     JSR SetDiskPtrCol
  14016.     LEA AddingPathText(PC),A0
  14017.     BSR ShowStatusText
  14018.     MOVE.L  DOSbase(PC),A6
  14019.     MOVE.L  FileLock(PC),D1
  14020.     MOVE.L  #FileInfoBlock,D2
  14021.     JSR LVOExamine(A6)
  14022.     TST.L   D0
  14023.     BPL UnlockReadPath
  14024.     TST.L   FIB_EntryType
  14025.     BPL CheckPathDirName
  14026.     BSR AddPreset
  14027.     BRA IsPLSTfull
  14028.  
  14029. CheckPathDirName
  14030.     CMP.B   #'-',FIB_FileName+2
  14031.     BNE IsPLSTfull
  14032.     MOVE.B  FIB_FileName+3,SndDiskNum0
  14033.     MOVE.B  FIB_FileName+4,SndDiskNum1
  14034.     BSR ShowPEDnumbers
  14035. IsPLSTfull
  14036.     MOVE.W  PresetTotal(PC),D0
  14037.     CMP.W   MaxPLSTEntries,D0
  14038.     BLO ReadPathNext
  14039.     BSR PLSTisFull
  14040.     BRA ReadPathEnd
  14041.  
  14042. ReadPathNext
  14043.     MOVE.L  DOSbase,A6
  14044.     MOVE.L  FileLock(PC),D1
  14045.     MOVE.L  #FileInfoBlock,D2
  14046.     JSR LVOExNext(A6)
  14047.     TST.L   D0
  14048.     BPL ReadPathEnd
  14049.     BTST    #2,$DFF016
  14050.     BEQ ReadPathEnd
  14051.     TST.L   FIB_EntryType
  14052.     BPL IsPLSTfull
  14053.     CMP.L   #'.inf',FIB_FileName
  14054.     BEQ IsPLSTfull
  14055.     CMP.L   #'.inf',FIB_FileName+4
  14056.     BEQ IsPLSTfull
  14057.     LEA FIB_FileName,A0
  14058.     MOVEQ   #28,D0
  14059. repalop CMP.B   #'.',(A0)+
  14060.     BEQ CouldBeInfo
  14061.     DBRA    D0,repalop
  14062. rpnskip CLR.W   PresetRepeat
  14063.     MOVE.W  #1,PresetReplen
  14064.     TST.B   IFFLoopFlag ; name is ok, test for IFF
  14065.     BEQ rpnskp2
  14066.     LEA PEDDefaultPath,A0
  14067.     JSR CopyPath
  14068.     LEA FIB_FileName,A0
  14069. rpncpfn MOVE.B  (A0)+,(A1)+
  14070.     BNE.S   rpncpfn
  14071.     MOVE.L  #FileName,D1
  14072.     MOVE.L  #1005,D2
  14073.     MOVE.L  DOSbase(PC),A6
  14074.     JSR LVOOpen(A6)
  14075.     MOVE.L  D0,FileHandle
  14076.     BEQ.S   rpnskp2
  14077.     MOVE.L  D0,D1
  14078.     LEA chkiffbuffer(PC),A2
  14079.     CLR.L   (A2)
  14080.     MOVE.L  A2,D2
  14081.     MOVEQ   #12,D3
  14082.     JSR LVORead(A6)
  14083.     CMP.L   #"FORM",(A2)
  14084.     BNE.S   rpnclse
  14085.     CMP.L   #"8SVX",8(A2)
  14086.     BNE.S   rpnclse
  14087. rpnvhdr MOVE.L  FileHandle(PC),D1
  14088.     MOVE.L  A2,D2
  14089.     MOVEQ   #4,D3
  14090.     JSR LVORead(A6)
  14091.     TST.L   D0
  14092.     BEQ.S   rpnclse
  14093.     CMP.L   #"VHDR",(A2)
  14094.     BNE.S   rpnvhdr
  14095.     MOVE.L  FileHandle(PC),D1
  14096.     MOVE.L  A2,D2
  14097.     MOVEQ   #12,D3
  14098.     JSR LVORead(A6)
  14099.     MOVE.L  8(A2),D0
  14100.     BEQ.S   rpnclse
  14101.     LSR.W   #1,D0
  14102.     MOVE.W  D0,PresetReplen
  14103.     MOVE.L  4(A2),D0
  14104.     LSR.W   #1,D0
  14105.     MOVE.W  D0,PresetRepeat
  14106. rpnclse MOVE.L  FileHandle(PC),D1
  14107.     JSR LVOClose(A6)
  14108. rpnskp2 BSR AddPreset
  14109.     BSR ShowPEDnumbers
  14110.     BRA IsPLSTfull
  14111.  
  14112. chkiffbuffer
  14113.     dc.l    0,0,0
  14114.  
  14115. CouldBeInfo
  14116.     CMP.B   #'i',(A0)+
  14117.     BNE rpnskip
  14118.     CMP.B   #'n',(A0)+
  14119.     BNE rpnskip
  14120.     CMP.B   #'f',(A0)+
  14121.     BNE rpnskip
  14122.     CMP.B   #'o',(A0)+
  14123.     BNE rpnskip
  14124.     CMP.B   #0,(A0)+
  14125.     BNE rpnskip
  14126.     BRA IsPLSTFull
  14127.  
  14128.  
  14129. ReadPathEnd
  14130.     MOVE.L  DOSbase(PC),A6
  14131.     MOVE.L  FileLock(PC),D1
  14132.     BEQ rpeskip
  14133.     JSR LVOUnLock(A6)
  14134. rpeskip JSR SetNormalPtrCol
  14135.     BSR ShowPresetNames
  14136.     BRA ShowAllRight
  14137.  
  14138. UnlockReadPath
  14139.     MOVE.L  DOSbase(PC),A6
  14140.     MOVE.L  FileLock(PC),D1
  14141.     BEQ urpend
  14142.     JSR LVOUnLock(A6)
  14143. urpend  JMP SetErrorPtrCol
  14144.  
  14145. AddPreset
  14146.     LEA PEdDefaultVol(PC),A0
  14147.     LEA PresetName(PC),A1
  14148.     MOVEQ   #5,D0   ; Disk; ST-XX...
  14149. aploop  MOVE.B  (A0)+,(A1)+
  14150.     DBRA    D0,aploop
  14151.     LEA FIB_FileName,A0
  14152.     MOVEQ   #14,D0  ; Name; 16 letters.
  14153. aploop2 MOVE.B  (A0)+,(A1)+
  14154.     BNE apskip
  14155.     SUBQ.L  #1,A0
  14156. apskip  DBRA    D0,aploop2
  14157.     CLR.B   (A1)
  14158.     MOVE.L  FIB_FileSize,D0
  14159.     CMP.L   #$FFFE,D0
  14160.     BLS.S   apskip2
  14161.     MOVE.W  #$FFFE,D0
  14162. apskip2 LSR.W   #1,D0
  14163.     MOVE.W  D0,PresetLength
  14164.     CLR.W   PresetFineTune
  14165.     LEA PresetName(PC),A6
  14166.     BSR PED_CheckAdd
  14167.     ADDQ.W  #1,PresetTotal
  14168.     ADD.L   #30,MaxPLSTOffset
  14169.     RTS
  14170.  
  14171. PED_Insert
  14172.     TST.L   PLSTmem
  14173.     BNE pediwok
  14174.     BSR AllocPLST
  14175.     TST.L   PLSTmem
  14176.     BEQ PLSTMemErr
  14177. pediwok MOVE.W  PresetTotal(PC),D0
  14178.     CMP.W   MaxPLSTEntries2,D0
  14179.     BHS PLSTisFull
  14180.     LEA InsertPsetText(PC),A0
  14181.     LEA PresetName(PC),A1
  14182.     MOVEQ   #39,D0
  14183. pediloop
  14184.     MOVE.B  (A0)+,(A1)+
  14185.     DBRA    D0,pediloop
  14186. PossibleEdit
  14187.     JSR StorePtrCol
  14188.     JSR SetWaitPtrCol
  14189.     MOVE.L  TextBplPtr(PC),A0
  14190.     LEA 2320(A0),A0
  14191.     MOVEQ   #59,D0
  14192. pediloop2
  14193.     CLR.L   (A0)+
  14194.     DBRA    D0,pediloop2
  14195.     LEA EnterDataText(PC),A0
  14196.     BSR ShowStatusText
  14197.     MOVE.W  #63,LineCurY
  14198.     LEA PresetName(PC),A6
  14199.     MOVEQ   #3,D7
  14200.     MOVE.B  #4,EnterTextFlag
  14201. ShowPsetText
  14202.     LEA PresetName+3(PC),A0
  14203.     MOVEQ   #37,D0
  14204.     MOVE.W  #2321,D1
  14205.     BSR ShowText3
  14206.     MOVE.W  D7,D0
  14207.     SUBQ.W  #3,D0
  14208.     ASL.W   #3,D0
  14209.     ADD.W   #12,D0
  14210.     MOVE.W  D0,LineCurX
  14211.     BSR UpdateLineCurPos
  14212. pediwaitkey
  14213.     JSR DoKeyBuffer
  14214.     MOVE.B  RawKeyCode(PC),D0
  14215.     BEQ pediwaitkey
  14216.     CLR.B   RawKeyCode
  14217.     BTST    #7,D0
  14218.     BNE pediwaitkey
  14219.     AND.W   #$FF,D0
  14220.     CMP.B   #69,D0
  14221.     BEQ PED_ESCkey
  14222.     CMP.B   #65,D0
  14223.     BEQ PED_BkspaceKey
  14224.     CMP.B   #68,D0
  14225.     BEQ PED_ReturnKey
  14226.     CMP.B   #79,D0
  14227.     BEQ PED_LeftArrowKey
  14228.     CMP.B   #78,D0
  14229.     BEQ PED_RightArrowKey
  14230.     CMP.B   #64,D0
  14231.     BHI pediwaitkey
  14232.     CMP.W   #40,D7
  14233.     BEQ pediwaitkey
  14234.     CMP.W   #22,D7
  14235.     BEQ pediwaitkey
  14236.     LEA UnshiftedKeymap(PC),A0
  14237.     TST.W   ShiftKeyStatus
  14238.     BEQ ShiftKeySkip
  14239.     LEA ShiftedKeymap(PC),A0
  14240. ShiftKeySkip
  14241.     MOVE.B  0(A0,D0.W),D1
  14242.     BEQ pediwaitkey
  14243.  
  14244.     CMP.W   #6,D7
  14245.     BLO.S   hexchk2
  14246.     CMP.W   #25,D7
  14247.     BLO PED_PrintChar
  14248. hexchk2 CMP.B   #'0',D1
  14249.     BLO pediwaitkey
  14250.     CMP.B   #'f',D1
  14251.     BHI pediwaitkey
  14252.     CMP.B   #'9',D1
  14253.     BLS PED_PrintChar
  14254.     CMP.B   #'a',D1
  14255.     BHS PED_PrintChar
  14256.     BRA pediwaitkey
  14257.  
  14258. PED_PrintChar
  14259.     MOVE.B  D1,(A6,D7.W)
  14260.     BRA PED_RightArrowKey
  14261.  
  14262. PED_ReturnKey
  14263.     CMP.B   #' ',PsetNameText
  14264.     BEQ PED_ESCkey
  14265.     LEA PsetVolText(PC),A0
  14266.     LEA fitutexttab+32(PC),A1
  14267.     MOVE.B  (A0)+,D1
  14268.     LSL.W   #8,D1
  14269.     MOVE.B  (A0),D1
  14270.     MOVEQ   #15,D0
  14271. vofloop CMP.W   -(A1),D1
  14272.     BEQ.S   vofound
  14273.     DBRA    D0,vofloop
  14274.     MOVEQ   #0,D0
  14275. vofound MOVE.W  D0,PresetFineTune
  14276.     LEA PsetLenText(PC),A0
  14277.     BSR HexToInteger
  14278.     LSR.W   #1,D0
  14279.     MOVE.W  D0,PresetLength
  14280.     LEA PsetRepeatText(PC),A0
  14281.     BSR HexToInteger
  14282.     LSR.W   #1,D0
  14283.     MOVE.W  D0,PresetRepeat
  14284.     LEA PsetReplenText(PC),A0
  14285.     BSR HexToInteger
  14286.     LSR.W   #1,D0
  14287.     MOVE.W  D0,PresetReplen
  14288.     BSR PED_CheckAdd
  14289.     ADDQ.W  #1,PresetTotal
  14290. PED_ESCkey
  14291.     CLR.W   LineCurX
  14292.     MOVE.W  #270,LineCurY
  14293.     BSR UpdateLineCurPos
  14294.     BSR ShowPresetNames
  14295.     BSR ShowPEDnumbers
  14296.     BSR ShowAllRight
  14297.     CLR.B   EnterTextFlag
  14298.     JMP RestorePtrCol
  14299.  
  14300. PED_BkspaceKey
  14301.     CMP.W   #23,D7
  14302.     BHS pedbsend
  14303.     CMP.W   #6,D7
  14304.     BLS pedbsend
  14305.     SUBQ.W  #1,D7
  14306.     MOVE.B  #' ',(A6,D7.W)
  14307. pedbsend
  14308.     BRA ShowPsetText
  14309.  
  14310. PED_LeftArrowKey
  14311.     SUBQ.W  #1,D7
  14312.     CMP.W   #2,D7
  14313.     BLS pedlakskip2
  14314.     CMP.W   #5,D7
  14315.     BEQ pedlakskip
  14316.     CMP.W   #22,D7
  14317.     BEQ pedlakskip
  14318.     CMP.W   #25,D7
  14319.     BEQ pedlakskip
  14320.     CMP.W   #30,D7
  14321.     BEQ pedlakskip
  14322.     CMP.W   #35,D7
  14323.     BEQ pedlakskip
  14324.     BRA ShowPsetText
  14325.  
  14326. pedlakskip
  14327.     SUBQ.W  #1,D7
  14328.     BRA ShowPsetText
  14329.  
  14330. pedlakskip2
  14331.     MOVEQ   #3,D7
  14332.     BRA ShowPsetText
  14333.  
  14334. PED_RightArrowKey
  14335.     ADDQ.W  #1,D7
  14336.     CMP.W   #5,D7
  14337.     BEQ pedrakskip
  14338.     CMP.W   #22,D7
  14339.     BEQ pedrakskip
  14340.     CMP.W   #25,D7
  14341.     BEQ pedrakskip
  14342.     CMP.W   #30,D7
  14343.     BEQ pedrakskip
  14344.     CMP.W   #35,D7
  14345.     BEQ pedrakskip
  14346.     CMP.W   #40,D7
  14347.     BHS pedrakskip2
  14348.     BRA ShowPsetText
  14349.  
  14350. pedrakskip
  14351.     ADDQ.W  #1,D7
  14352.     BRA ShowPsetText
  14353.  
  14354. pedrakskip2
  14355.     MOVEQ   #39,D7
  14356.     BRA ShowPsetText
  14357.  
  14358. PED_CheckAdd
  14359.     MOVEQ   #23,D0
  14360. pedcaloop
  14361.     SUBQ.W  #1,D0
  14362.     CMP.B   #' ',0(A6,D0.W)
  14363.     BEQ pedcaloop
  14364.     CLR.B   1(A6,D0.W)
  14365.     MOVE.L  PLSTmem(PC),A5
  14366.     LEA 30(A5),A5
  14367. pedccnextloop
  14368.     MOVEQ   #6,D0
  14369.     TST.B   6(A5)
  14370.     BEQ PED_AddPreset
  14371. PED_ConvertLoop
  14372.     MOVE.B  0(A5,D0.W),D2
  14373.     BNE PED_ConvertCase
  14374.     TST.B   0(A6,D0.W)
  14375.     BNE PED_ConvertCase
  14376.     CLR.B   6(A5)
  14377.     SUBQ.W  #1,PresetTotal
  14378.     BRA PED_AddPreset
  14379.  
  14380. PED_ConvertCase
  14381.     CMP.B   #'A',D2
  14382.     BLO pedccskip
  14383.     CMP.B   #'Z',D2
  14384.     BHI pedccskip
  14385.     ADD.B   #32,D2
  14386. pedccskip
  14387.     MOVE.B  0(A6,D0.W),D1
  14388.     CMP.B   #' ',D1
  14389.     BEQ pedccskip3
  14390.     CMP.B   #'A',D1
  14391.     BLO pedccskip2
  14392.     CMP.B   #'Z',D1
  14393.     BHI pedccskip2
  14394.     ADD.B   #32,D1
  14395. pedccskip2
  14396.     CMP.B   D2,D1
  14397.     BEQ pedccnext
  14398.     BHI pedccskip3
  14399.     BRA PED_AddPreset
  14400.  
  14401. pedccnext
  14402.     ADDQ.W  #1,D0
  14403.     CMP.W   #22,D0
  14404.     BNE PED_ConvertLoop
  14405. pedccskip3
  14406.     LEA 30(A5),A5
  14407.     BRA pedccnextloop
  14408.  
  14409. PED_AddPreset   TST.B   6(A5)
  14410.     BEQ pedapskip
  14411.     MOVE.L  PLSTmem(PC),A1
  14412.     MOVE.W  PresetTotal(PC),D0
  14413.     CMP.W   #1,D0
  14414.     BEQ pedapskip
  14415.     MULU    #30,D0
  14416.     ADD.L   D0,A1
  14417.     LEA 30(A1),A1
  14418.     CLR.B   31(A1)
  14419. pedaploop
  14420.     MOVE.W  (A1),30(A1)
  14421.     SUBQ.L  #2,A1
  14422.     CMP.L   A1,A5
  14423.     BLS pedaploop
  14424. pedapskip
  14425.     MOVEQ   #21,D0
  14426. pedaploop2
  14427.     MOVE.B  0(A6,D0.W),D1
  14428.     CMP.B   #'A',D1
  14429.     BLO pedapskip2
  14430.     CMP.B   #'Z',D1
  14431.     BHI pedapskip2
  14432.     ADD.B   #32,D1
  14433. pedapskip2
  14434.     CMP.B   #' ',D1
  14435.     BNE pedapskip3
  14436.     MOVEQ   #0,D1
  14437. pedapskip3
  14438.     MOVE.B  D1,0(A5,D0.W)
  14439.     DBRA    D0,pedaploop2
  14440.     MOVE.W  PresetLength(PC),22(A5)
  14441.     MOVE.B  PresetFineTune+1(PC),24(A5)
  14442.     MOVE.B  #$40,25(A5)
  14443.     MOVE.W  PresetRepeat(PC),26(A5)
  14444.     MOVE.W  PresetReplen(PC),28(A5)
  14445.     RTS
  14446.  
  14447. HexToInteger
  14448.     MOVEQ   #0,D0
  14449.     BSR Single_hti
  14450.     LSL.W   #8,D1
  14451.     LSL.W   #4,D1
  14452.     OR.W    D1,D0
  14453.     BSR Single_hti
  14454.     LSL.W   #8,D1
  14455.     OR.W    D1,D0
  14456. HexToInteger2
  14457.     BSR Single_hti
  14458.     LSL.W   #4,D1
  14459.     OR.W    D1,D0
  14460.     BSR Single_hti
  14461.     OR.W    D1,D0
  14462.     RTS
  14463.  
  14464. Single_hti
  14465.     MOVEQ   #0,D1
  14466.     MOVE.B  (A0)+,D1
  14467.     CMP.B   #$60,D1
  14468.     BLO shtiskip
  14469.     SUB.B   #$20,D1
  14470. shtiskip
  14471.     SUB.B   #$30,D1
  14472.     CMP.B   #9,D1
  14473.     BLS Return2
  14474.     SUBQ.B  #7,D1
  14475.     RTS
  14476.  
  14477. PED_Delete
  14478.     JSR SetDeletePtrCol
  14479.     MOVE.W  #1,PED_Action
  14480.     LEA SelectEntryText(PC),A0
  14481.     BRA ShowStatusText
  14482.  
  14483. PED_ClearPLST
  14484.     LEA ClearPLSTText,A0
  14485.     JSR AreYouSure
  14486.     BNE Return2
  14487.     BSR FreePLST
  14488.     BRA PED_Refresh
  14489.  
  14490. ClearPLSTText   dc.b 'clear plst ?',0,0
  14491.  
  14492. PED_Print
  14493.     LEA PrintPLSTText,A0
  14494.     JSR AreYouSure
  14495.     BNE Return2
  14496.     JSR StorePtrCol
  14497.     MOVE.L  DOSbase(PC),A6
  14498.     MOVE.L  #PrintPath,D1
  14499.     MOVE.L  #1006,D2
  14500.     JSR LVOOpen(A6)
  14501.     MOVE.L  D0,FileHandle
  14502.     BEQ CantOpenFile
  14503.     JSR SetDiskPtrCol
  14504.     MOVE.L  D0,D1
  14505.     MOVE.L  #PsetPLSTtext,D2
  14506.     MOVEQ   #56,D3
  14507.     JSR LVOWrite(A6)
  14508.     LEA PrintingPLSTText(PC),A0
  14509.     BSR ShowStatusText
  14510.     CLR.W   PsetNumTemp
  14511. pedpmainloop   
  14512.     MOVE.W  PsetNumTemp(PC),D0
  14513.     LEA PsetPrtNumText(PC),A0
  14514.     BSR IntToDecASCII
  14515.     MOVE.L  PLSTmem(PC),A0
  14516.     MOVE.W  PsetNumTemp(PC),D0
  14517.     MULU    #30,D0
  14518.     ADD.L   D0,A0
  14519.     MOVE.L  A0,PsetPtrTemp
  14520.     LEA PsetPrtNameText(PC),A1
  14521.     MOVE.L  A1,A2
  14522.     MOVEQ   #19,D1
  14523. FillSpaceLoop
  14524.     MOVE.B  #' ',(A2)+
  14525.     DBRA    D1,FillSpaceLoop
  14526.     MOVEQ   #19,D1
  14527. pedploop
  14528.     TST.B   (A0)
  14529.     BEQ pedpskip
  14530.     MOVE.B  (A0)+,(A1)+
  14531.     DBRA    D1,pedploop
  14532. pedpskip
  14533.     MOVE.L  PsetPtrTemp(PC),A1
  14534.     MOVE.W  22(A1),D0
  14535.     LEA PsetPrtLenText(PC),A0
  14536.     BSR IntToHexASCII
  14537.     MOVE.L  PsetPtrTemp(PC),A1
  14538.     MOVE.W  26(A1),D0
  14539.     LEA PsetPrtRepeatText(PC),A0
  14540.     BSR IntToHexASCII
  14541.     MOVE.L  PsetPtrTemp(PC),A1
  14542.     MOVE.W  28(A1),D0
  14543.     ADD.W   D0,D0
  14544.     LEA PsetPrtRepLenText(PC),A0
  14545.     BSR IntToHexASCII
  14546.     MOVE.L  FileHandle(PC),D1
  14547.     MOVE.L  #PsetPrtNumText,D2
  14548.     MOVEQ   #53,D3
  14549.     JSR LVOWrite(A6)
  14550.     BTST    #2,$DFF016
  14551.     BEQ AbortPLSTPrint
  14552.     ADDQ.W  #1,PsetNumTemp
  14553.     MOVE.W  PsetNumTemp(PC),D0
  14554.     CMP.W   PresetTotal(PC),D0
  14555.     BNE pedpmainloop
  14556.     BRA pedpend
  14557.  
  14558. AbortPLSTPrint
  14559.     LEA OprAbortedText(PC),A0
  14560.     BSR ShowStatusText
  14561.     JSR SetErrorPtrCol
  14562. pedpend MOVE.L  FileHandle(PC),D1
  14563.     JSR LVOClose(A6)
  14564.     BSR ShowAllRight
  14565.     JMP RestorePtrCol
  14566.  
  14567. IntToDecASCII
  14568.     MOVEQ   #3,D3
  14569.     MOVE.L  #1000,D2
  14570. itdloop EXT.L   D0
  14571.     DIVU    D2,D0
  14572.     ADD.B   #'0',D0
  14573.     MOVE.B  D0,(A0)+
  14574.     DIVU    #10,D2
  14575.     SWAP    D0
  14576.     DBRA    D3,itdloop
  14577.     RTS
  14578.  
  14579. IntToHex2
  14580.     MOVEQ   #1,D2
  14581.     BRA ithaloop
  14582.  
  14583. IntToHexASCII
  14584.     MOVEQ   #3,D2
  14585. ithaloop
  14586.     MOVE.W  D0,D1
  14587.     AND.B   #15,D1
  14588.     CMP.B   #10,D1
  14589.     BLO ithaskip
  14590.     ADDQ.B  #7,D1
  14591. ithaskip
  14592.     ADD.B   #'0',D1
  14593.     MOVE.B  D1,-(A0)
  14594.     ROR.W   #4,D0
  14595.     DBRA    D2,ithaloop
  14596.     RTS
  14597.  
  14598. WritePLST
  14599.     LEA SavePLSTText,A0
  14600.     JSR AreYouSure
  14601.     BNE Return2
  14602.     JSR StorePtrCol
  14603.     JSR SetDiskPtrCol
  14604.     LEA SavingPLSTText(PC),A0
  14605.     BSR ShowStatusText
  14606.     LEA PTPath,A0
  14607.     JSR CopyPath
  14608.     LEA PLSTName(PC),A0
  14609.     MOVEQ   #4,D0
  14610. dsploop MOVE.B  (A0)+,(A1)+
  14611.     DBRA    D0,dsploop
  14612.     MOVE.L  #FileName,D1
  14613.     MOVE.L  #1006,D2
  14614.     MOVE.L  DOSbase(PC),A6
  14615.     JSR LVOOpen(A6)
  14616.     MOVE.L  D0,D7
  14617.     BEQ CantOpenFile
  14618.     MOVE.L  D0,D1
  14619.     MOVE.L  PLSTmem(PC),D2
  14620.     MOVE.W  PresetTotal(PC),D3
  14621.     MULU    #30,D3
  14622.     JSR LVOWrite(A6)
  14623.     MOVE.L  D7,D1
  14624.     JSR LVOClose(A6)
  14625.     BSR ShowAllRight
  14626.     JMP RestorePtrCol
  14627.  
  14628. CheckPEDnames
  14629.     CMP.W   #307,D0
  14630.     BLO PED_PsetHit
  14631.     CLR.W   PED_Action
  14632.     JSR SetNormalPtrCol
  14633.     CMP.W   #122,D1
  14634.     BHS Return2
  14635.     CMP.W   #111,D1
  14636.     BHS PED_Bottom 
  14637.     CMP.W   #100,D1
  14638.     BHS.S   PED_OneDown
  14639.     CMP.W   #67,D1
  14640.     BHS PED_Exit
  14641.     CMP.W   #56,D1
  14642.     BHS.S   PED_OneUp
  14643.     BRA.S   PED_Top
  14644.  
  14645. PED_OneUp  
  14646.     SUBQ.W  #1,PEDpos
  14647.     TST.W   ShiftKeyStatus
  14648.     BNE.S   poup2
  14649.     BTST    #2,$DFF016
  14650.     BNE.S   pedouskip
  14651. poup2   SUBQ.W  #7,PEDpos
  14652. pedouskip  
  14653.     CMP.W   #1,PEDpos
  14654.     BGE ShowPresetNames
  14655. PED_Top MOVE.W  #1,PEDpos
  14656.     BRA ShowPresetNames
  14657.  
  14658. PED_OneDown
  14659.     CMP.W   #9,PresetTotal
  14660.     BLO ShowPresetNames
  14661.     ADDQ.W  #1,PEDpos
  14662.     TST.W   ShiftKeyStatus
  14663.     BNE.S   podn2
  14664.     BTST    #2,$DFF016
  14665.     BNE.S   pedodskip
  14666. podn2   ADDQ.W  #7,PEDpos
  14667. pedodskip  
  14668.     MOVE.W  PresetTotal,D0
  14669.     SUB.W   #10,D0
  14670.     CMP.W   PEDpos,D0
  14671.     BHS ShowPresetNames
  14672. pedodsx MOVE.W  D0,PEDpos
  14673.     BRA ShowPresetNames
  14674.  
  14675. PED_Bottom
  14676.     MOVE.W  PresetTotal(PC),D0
  14677.     SUB.W   #11,D0
  14678.     BMI.S   PED_Top
  14679.     ADDQ.W  #1,D0
  14680.     BRA.S   pedodsx
  14681.  
  14682. ShowPresetNames
  14683.     MOVE.W  #2321,D6
  14684.     MOVEQ   #9,D7
  14685.     MOVE.L  PLSTmem(PC),D0
  14686.     BEQ Return2
  14687.     MOVE.L  D0,A5
  14688.     MOVE.W  PEDpos(PC),D0
  14689.     MULU    #30,D0
  14690.     ADD.L   D0,A5
  14691. spndploop
  14692.     TST.B   (A5)
  14693.     BEQ Return2
  14694.     LEA PresetNameText,A1
  14695.     MOVEQ   #21,D0
  14696. spnloop MOVE.B  #' ',(A1)+
  14697.     DBRA    D0,spnloop
  14698.     MOVE.L  A5,A0
  14699.     ADDQ.L  #3,A0
  14700.     LEA -22(A1),A1
  14701. spnloop2
  14702.     MOVE.B  (A0)+,D0
  14703.     BEQ.S   DisplayPreset
  14704.     MOVE.B  D0,(A1)+
  14705.     BRA.S   spnloop2
  14706.  
  14707. fitutexttab
  14708.     dc.b " 0+1+2+3+4+5+6+7-8-7-6-5-4-3-2-1"
  14709.  
  14710. DisplayPreset
  14711.     MOVEQ   #19,D0
  14712.     LEA PresetNameText,A0
  14713.     MOVE.W  D6,D1
  14714.     BSR ShowText3
  14715.     ADD.W   #20,D6
  14716.     MOVE.W  D6,TextOffset
  14717.     MOVEQ   #0,D0
  14718.     MOVE.B  24(A5),D0
  14719.     AND.B   #$0F,D0
  14720.     ADD.W   D0,D0
  14721.     LEA fitutexttab(PC,D0.W),A0
  14722.     MOVE.W  #2,TextLength
  14723.     BSR ShowText2
  14724.     MOVE.W  22(A5),D0
  14725.     ADD.W   D0,D0
  14726.     MOVE.W  D0,WordNumber
  14727.     ADDQ.W  #1,TextOffset
  14728.     BSR PrintHexWord
  14729.     MOVE.W  26(A5),D0
  14730.     ADD.W   D0,D0
  14731.     MOVE.W  D0,WordNumber
  14732.     ADDQ.W  #1,TextOffset
  14733.     BSR PrintHexWord
  14734.     MOVE.W  28(A5),D0
  14735.     ADD.W   D0,D0
  14736.     MOVE.W  D0,WordNumber
  14737.     ADDQ.W  #1,TextOffset
  14738.     BSR PrintHexWord
  14739.     ADD.W   #220,D6   ; 218
  14740.     LEA 30(A5),A5
  14741.     DBRA    D7,spndploop
  14742.     RTS
  14743.  
  14744. PED_EnterPath
  14745.     JSR StorePtrCol
  14746.     JSR SetWaitPtrCol
  14747.     CLR.L   EditMode
  14748.     LEA PEdDefaultPath(PC),A6
  14749.     BSR UpdateLineCurPos
  14750.     MOVE.L  A6,TextEndPtr
  14751.     MOVE.L  A6,ShowTextPtr
  14752.     ADD.L   #31,TextEndPtr
  14753.     MOVE.W  #20,TextLength
  14754.     MOVE.L  #178,A4
  14755.     BSR GetTextLine
  14756.     CLR.L   TextEndPtr
  14757.     JMP RestorePtrCol
  14758.  
  14759. PED_Disk
  14760.     JSR StorePtrCol
  14761.     JSR SetWaitPtrCol
  14762.     CLR.L   EditMode
  14763.     CLR.B   SndDiskNum0
  14764.     CLR.B   SndDiskNum1
  14765.     LEA SndDiskNum0(PC),A6
  14766.     MOVE.L  A6,TextEndPtr
  14767.     MOVE.L  A6,ShowTextPtr
  14768.     ADDQ.L  #2,TextEndPtr
  14769.     MOVE.W  #2,TextLength
  14770.     MOVE.L  #621,A4
  14771.     MOVE.B  #3,EnterTextFlag
  14772.     BSR GetTextLine
  14773.     LEA SndDiskNum0(PC),A6
  14774.     MOVE.B  #':',2(A6)
  14775.     CLR.B   EnterTextFlag
  14776.     CLR.L   TextEndPtr
  14777.     JMP RestorePtrCol
  14778.  
  14779. ShowPEDnumbers
  14780.     MOVE.W  PresetTotal,WordNumber
  14781.     MOVE.W  #1061,TextOffset
  14782.     BSR Print4DecDigits
  14783.     LEA PEdDefaultPath,A0
  14784.     MOVE.W  #178,D1
  14785.     MOVEQ   #20,D0
  14786.     BSR ShowText3
  14787.     LEA PEdDefaultVol,A0
  14788.     MOVE.W  #618,D1
  14789.     MOVEQ   #6,D0
  14790.     BRA ShowText3
  14791.  
  14792. PED_PsetHit
  14793.     CMP.W   #1,PresetTotal
  14794.     BEQ.S   pedphend
  14795.     MOVE.W  MouseY2(PC),D0
  14796.     CMP.W   #59,D0
  14797.     BLO.S   pedphend
  14798.     CMP.W   #119,D0
  14799.     BHS.S   pedphend
  14800.     SUB.W   #59,D0
  14801.     DIVU    #6,D0
  14802.     MOVE.L  D0,D1
  14803.     SWAP    D1
  14804.     CMP.W   #5,D1
  14805.     BEQ.S   pedphend
  14806.     MOVE.W  D0,D2
  14807.     ADD.W   PEDpos(PC),D2
  14808.     CMP.W   PresetTotal(PC),D2
  14809.     BHI.S   pedphend
  14810.     MULU    #30,D0
  14811.     MOVE.L  PLSTmem(PC),A5
  14812.     ADD.L   D0,A5
  14813.     MOVE.W  PEDpos(PC),D0
  14814.     MULU    #30,D0
  14815.     ADD.L   D0,A5
  14816.     TST.W   PED_Action
  14817.     BEQ.S   PED_CopyName
  14818.     CMP.W   #1,PED_Action
  14819.     BEQ PED_DoDelete
  14820. pedphend
  14821.     RTS
  14822.  
  14823. PED_CopyName
  14824.     LEA PresetName(PC),A0
  14825.     MOVEQ   #21,D0
  14826. pedcnloop
  14827.     MOVE.B  (A5)+,D1
  14828.     BNE pedcnskip
  14829.     MOVE.B  #' ',D1
  14830. pedcnskip
  14831.     MOVE.B  D1,(A0)+
  14832.     DBRA    D0,pedcnloop
  14833.     MOVEQ   #0,D0
  14834.     MOVE.B  2(A5),D0
  14835.     AND.B   #$0F,D0
  14836.     ADD.W   D0,D0
  14837.     LEA fitutexttab(PC),A1
  14838.     LEA (A1,D0.W),A1
  14839.     LEA PsetVolText(PC),A0
  14840.     MOVE.B  #' ',-1(A0)
  14841.     MOVE.B  (A1)+,(A0)+
  14842.     MOVE.B  (A1),(A0)
  14843.     MOVE.W  (A5),D0
  14844.     ADD.W   D0,D0
  14845.     LEA 6(A0),A0
  14846.     BSR IntToHexASCII
  14847.     MOVE.W  4(A5),D0
  14848.     ADD.W   D0,D0
  14849.     LEA 9(A0),A0
  14850.     BSR IntToHexASCII
  14851.     LEA 9(A0),A0
  14852.     MOVE.W  6(A5),D0
  14853.     ADD.W   D0,D0
  14854.     BSR IntToHexASCII
  14855.     BRA PossibleEdit
  14856.  
  14857. PED_DoDelete
  14858.     CLR.W   PED_Action
  14859.     LEA DeletePresetText,A0
  14860.     JSR AreYouSure
  14861.     BNE Return2
  14862.     MOVE.L  PLSTmem(PC),A1
  14863.     MOVE.W  PresetTotal(PC),D0
  14864.     MULU    #30,D0
  14865.     ADD.L   D0,A1
  14866. pedddloop
  14867.     MOVE.W  30(A5),(A5)
  14868.     ADDQ.L  #2,A5
  14869.     CMP.L   A5,A1
  14870.     BHI.S   pedddloop
  14871.     CLR.B   (A5)
  14872.     SUBQ.W  #1,PresetTotal
  14873.     SUB.L   #30,MaxPLSTOffset
  14874.     MOVE.W  PEDpos(PC),D0
  14875.     ADD.W   #9,D0
  14876.     CMP.W   PresetTotal(PC),D0
  14877.     BHI.S   pedddskip
  14878.     SUBQ.W  #1,PEDpos
  14879. pedddskip  
  14880.     BSR ShowPEDnumbers
  14881.     BSR ShowPresetNames
  14882.     JSR SetNormalPtrCol
  14883.     JMP StorePtrCol
  14884.  
  14885. sepc    JMP SetErrorPtrCol
  14886.  
  14887. PLSTisFull
  14888.     LEA PLSTFullText(PC),A0
  14889.     BSR ShowStatusText
  14890.     JMP SetErrorPtrCol
  14891.  
  14892. PED_DeleteDisk
  14893.     LEA DelDiskText(PC),A0
  14894.     MOVE.B  snddisknum0(PC),10(A0)
  14895.     MOVE.B  snddisknum1(PC),11(A0)
  14896.     JSR AreYouSure
  14897.     BNE Return2
  14898.     JSR StorePtrCol
  14899.     JSR SetWaitPtrCol
  14900.     MOVE.L  PLSTmem(PC),A0
  14901.     MOVE.L  A0,A1
  14902.     MOVE.W  PresetTotal(PC),D0
  14903.     MULU    #30,D0
  14904.     ADD.L   D0,A1
  14905.     MOVE.L  snddisknum0-1(PC),D1
  14906.     MOVE.L  #$FF5F5FFF,D2
  14907.     AND.L   D2,D1
  14908. peddslo MOVE.L  2(A0),D0
  14909.     AND.L   D2,D0
  14910.     CMP.L   D1,D0
  14911.     BNE.S   peddsno
  14912.     MOVE.L  A0,A2
  14913. peddslp MOVE.W  30(A0),(A0)+
  14914.     CMP.L   A1,A0
  14915.     BLO.S   peddslp
  14916.     SUBQ.W  #1,PresetTotal
  14917.     SUB.L   #30,MaxPLSTOffset
  14918.     MOVE.L  A2,A0
  14919.     BRA.S   peddsn1
  14920. peddsno LEA 30(A0),A0
  14921. peddsn1 CMP.L   A1,A0
  14922.     BLO.S   peddslo
  14923.     MOVE.W  #1,PEDpos
  14924.     BSR ShowPEDnumbers
  14925.     BSR ShowPresetNames
  14926.     JMP RestorePtrCol
  14927.  
  14928. DelDiskText dc.b "Delete ST-.. ?",0,0
  14929.  
  14930. ;************  MIDI Routines  ************
  14931.  
  14932. OpenMIDI
  14933.     TST.L   MIDIinBuffer
  14934.     BNE.S   omidisk
  14935.     MOVE.L  #256,D0
  14936.     MOVEQ   #MEMF_PUBLIC,D1
  14937.     MOVE.L  4.W,A6
  14938.     JSR LVOAllocMem(A6)
  14939.     MOVE.L  D0,MIDIinBuffer
  14940.     BEQ Return2
  14941. omidisk CLR.B   MIDIinTo
  14942.     CLR.B   MIDIinFrom
  14943.     TST.W   mintflag
  14944.     BNE Return2
  14945.     MOVE.L  $74,OldInt5+2
  14946.     MOVE.L  #MIDIinInter,$74
  14947.     MOVE.W  #$8800,$DFF09A ;intena
  14948.     MOVE.W  #114,$DFF032 ; Set serper speed, 31250 bit/s
  14949.     MOVE.W  #1,mintflag
  14950.     MOVEQ   #0,D0
  14951.     RTS
  14952.  
  14953. ;   MOVEQ   #11,D0
  14954. ;   LEA MIDIinServer(PC),A1
  14955. ;   MOVE.L  4.W,A6
  14956. ;   JSR LVOAddIntServer(A6)
  14957. ;   MOVE.W  #1,mintflag
  14958. ;   MOVE.W  #114,$DFF032 ; Set serper speed, 31250 bit/s
  14959. ;   RTS
  14960.  
  14961. CloseMIDI
  14962.     MOVE.L  MIDIinBuffer(PC),D0
  14963.     BEQ.S   clmskip
  14964.     MOVE.L  D0,A1
  14965.     MOVE.L  #256,D0
  14966.     MOVE.L  4.W,A6
  14967.     JSR LVOFreeMem(A6)
  14968.     CLR.L   MIDIinBuffer
  14969. clmskip TST.W   mintflag
  14970.     BEQ Return2
  14971.     MOVE.W  #$0800,$DFF09A ;intena
  14972.     MOVE.L  OldInt5+2(PC),D0
  14973.     BEQ PositiveReturn
  14974.     MOVE.L  D0,$74
  14975.     CLR.L   OldInt5+2
  14976.     RTS
  14977.  
  14978. ;   MOVEQ   #11,D0
  14979. ;   LEA MIDIinServer(PC),A1
  14980. ;   MOVE.L  4.W,A6
  14981. ;   JSR LVORemIntServer(A6)
  14982. ;   CLR.W   mintflag
  14983. ;   RTS
  14984.  
  14985. mintflag dc.w 0
  14986.  
  14987. ;MIDIinServer
  14988. ;   dc.l 0,0
  14989. ;   dc.b 2,10
  14990. ;   dc.l midiname
  14991. ;   dc.l 0,MIDIinInter
  14992. ;
  14993. ;midiname dc.b "Protracker MIDI",0
  14994.  
  14995. MIDIinInter
  14996.     BTST    #11,$DFF01E ;intreqr
  14997.     BNE GetMIDIin
  14998. OldInt5 JMP $0
  14999.  
  15000. GetMIDIin
  15001.     MOVEM.L D0-D2/A0,-(SP)
  15002.     MOVE.W  $DFF018,D0 ; serdatr
  15003.     MOVE.W  #$0800,$DFF09A ;intena
  15004.     MOVE.W  #$0800,$DFF09C ;intreq
  15005. ;   CMP.B   #$F8,D0 ; Timing Clock
  15006. ;   BNE gmiskip
  15007. ;   TST.B   MIDISync
  15008. ;   BEQ gmiexit
  15009. ;   BSR IntMusic
  15010. ;   BRA gmiexit
  15011. gmiskip MOVEQ   #0,D1
  15012.     MOVE.B  MIDIinTo(PC),D1
  15013.     MOVE.L  D1,D2
  15014.     ADDQ.B  #1,D2
  15015.     CMP.B   MIDIinFrom(PC),D2
  15016.     BEQ gmiexit ; Buffer overflow
  15017.     MOVE.L  MIDIinBuffer(PC),A0
  15018.     MOVE.B  D0,(A0,D1.W)
  15019.     MOVE.B  D2,MIDIinTo
  15020. gmiexit MOVE.W  #$8800,$DFF09A ;intena
  15021.     MOVEM.L (SP)+,D0-D2/A0
  15022.     RTE
  15023.  
  15024. MIDIin  MOVE.B  MIDIinFrom(PC),D0
  15025.     CMP.B   MIDIinTo(PC),D0
  15026.     BNE migetbyt
  15027.     MOVEQ   #2,D1
  15028.     RTS
  15029. migetbyt
  15030.     MOVE.L  MIDIinBuffer(PC),A0
  15031.     MOVE.B  (A0,D0.W),D0
  15032.     ADDQ.B  #1,MIDIinFrom
  15033.     MOVEQ   #0,D1
  15034.     RTS
  15035.  
  15036. MIDIout MOVE.W  $DFF018,D1 ; serdatr
  15037.     BTST    #13,D1
  15038.     BEQ MIDIout
  15039.     AND.W   #$00ff,D0
  15040.     OR.W    #$0300,D0
  15041.     MOVE.W  D0,$DFF030 ; serdat
  15042.     RTS
  15043.  
  15044. CheckMIDIin
  15045.     TST.B   MIDIFlag
  15046.     BEQ Return2
  15047.     BSR MIDIin
  15048.     TST.L   D1
  15049.     BEQ mic_ok
  15050.     MOVE.B  #1,MIDIError
  15051.     RTS
  15052.  
  15053. mic_ok  CLR.B   MIDIError
  15054.     TST.B   D0
  15055.     BPL mic_databyte
  15056. ;statusbyte here
  15057.     CMP.B   #$F0,D0
  15058.     BHS MIDISysMessage
  15059.     MOVE.B  D0,MIDIRunStatus
  15060.     MOVE.B  D0,D1
  15061.     AND.B   #$F0,D1
  15062.     MOVE.B  D1,MIDIRunCommand
  15063.     AND.B   #$0F,D0
  15064.     MOVE.B  D0,MIDIRunChannel
  15065.     CLR.B   MIDIByteCount
  15066.     RTS
  15067.  
  15068. mic_databyte
  15069.     MOVE.B  MIDIRunCommand(PC),D1
  15070.     CMP.B   #$80,D1
  15071.     BEQ M_NoteOff
  15072.     CMP.B   #$90,D1
  15073.     BEQ M_NoteOn
  15074.     CMP.B   #$A0,D1
  15075.     BEQ M_PolyTouch
  15076.     CMP.B   #$B0,D1
  15077.     BEQ M_Control
  15078.     CMP.B   #$C0,D1
  15079.     BEQ M_ProgChange
  15080.     CMP.B   #$D0,D1
  15081.     BEQ M_MonoTouch
  15082.     CMP.B   #$E0,D1
  15083.     BEQ M_PitchBend
  15084.     CMP.B   #$F0,D1
  15085.     BEQ M_SysExData
  15086.     RTS
  15087.  
  15088. M_NoteOff
  15089.     TST.B   MIDIByteCount
  15090.     BNE mnf_veloc
  15091.     MOVE.B  D0,MIDINote
  15092.     ADD.B   #1,MIDIByteCount
  15093.     RTS
  15094. mnf_veloc
  15095.     CLR.B   MIDIByteCount
  15096.     MOVE.B  D0,MIDIVelocity
  15097. ;   BSR MidiPlay
  15098.     RTS
  15099.  
  15100. M_NoteOn
  15101.     TST.B   MIDIByteCount
  15102.     BNE mno_veloc
  15103.     MOVE.B  D0,MIDINote
  15104.     ADD.B   #1,MIDIByteCount
  15105.     RTS
  15106. mno_veloc
  15107.     CLR.B   MIDIByteCount
  15108.     MOVE.B  D0,MIDIVelocity
  15109.     BEQ mnf_veloc
  15110. ;* MidiPlay *
  15111.     MOVE.B  MIDINote,D0
  15112.     CMP.B   MIDIinTrans,D0
  15113.     BLO miplskip
  15114.     SUB.B   MIDIinTrans(PC),D0
  15115.     CMP.B   #36,D0
  15116.     BLS J_nkp
  15117.     RTS
  15118. miplskip
  15119.     CMP.B   XMIDI_Play,D0
  15120.     BEQ J_PlaySong
  15121.     CMP.B   XMIDI_Pattern,D0
  15122.     BEQ J_PlayPattern
  15123.     CMP.B   XMIDI_Edit,D0
  15124.     BEQ J_Edit
  15125.     CMP.B   XMIDI_Record,D0
  15126.     BEQ J_RecordPattern
  15127.     CMP.B   XMIDI_Stop,D0
  15128.     BEQ J_StopIt
  15129.     RTS
  15130.  
  15131. J_nkp   JMP nkpskip
  15132. J_PlaySong
  15133.     JMP PlaySong
  15134. J_PlayPattern
  15135.     JMP PlayPattern
  15136. J_Edit  JMP Edit
  15137. J_RecordPattern
  15138.     JMP RecordPattern
  15139. J_StopIt
  15140.     JMP StopIt
  15141.  
  15142. MIDIinTrans dc.b 60,0
  15143.  
  15144. XMIDI_Play  dc.b 40 ; E
  15145. XMIDI_Pattern   dc.b 38 ; D
  15146. XMIDI_Edit  dc.b 43 ; G
  15147. XMIDI_Record    dc.b 41 ; F
  15148. XMIDI_Stop  dc.b 36 ; C
  15149.         dc.b 0 ; free 0
  15150.  
  15151. ;   MOVE.B  MIDIRunStatus(PC),D0
  15152. ;   BSR MIDIout
  15153. ;   MOVE.B  MIDINote(PC),D0
  15154. ;   ADD.B   #12,D0
  15155. ;   BSR MIDIout
  15156. ;   MOVE.B  MIDIVelocity(PC),D0
  15157. ;   BSR MIDIout
  15158. ;   RTS
  15159.  
  15160. M_PolyTouch
  15161.     TST.B   MIDIByteCount
  15162.     BNE mpt_touch
  15163.     MOVE.B  D0,MIDINote
  15164.     ADD.B   #1,MIDIByteCount
  15165.     RTS
  15166. mpt_touch
  15167.     CLR.B   MIDIByteCount
  15168.     MOVE.B  D0,MIDITouch
  15169.     RTS
  15170.  
  15171. M_Control
  15172.     TST.B   MIDIByteCount
  15173.     BNE mc_value
  15174.     MOVE.B  D0,MIDIController
  15175.     ADD.B   #1,MIDIByteCount
  15176.     RTS
  15177. mc_value
  15178.     CLR.B   MIDIByteCount
  15179.     MOVE.B  D0,MIDIlsb
  15180.     RTS
  15181.  
  15182. M_ProgChange
  15183.     MOVE.B  D0,MIDIProgram
  15184.     RTS
  15185. ;   ADDQ.B  #1,D0
  15186. ;   AND.B   #$1F,D0
  15187. ;   BNE mpchskip
  15188. ;   TST.W   InsNum
  15189. ;   BEQ mpchskip
  15190. ;   MOVE.W  InsNum(PC),LastInsNum
  15191. ;mpchskip
  15192. ;   MOVE.B  D0,InsNum+1
  15193. ;   BRA ShowSampleInfo
  15194.  
  15195. M_MonoTouch
  15196.     MOVE.B  D0,MIDITouch
  15197.     RTS
  15198.  
  15199. M_PitchBend
  15200.     TST.B   MIDIByteCount
  15201.     BNE mp_msb
  15202.     MOVE.B  D0,MIDIlsb
  15203.     ADD.B   #1,MIDIByteCount
  15204.     RTS
  15205. mp_msb  CLR.B   MIDIByteCount
  15206.     MOVE.B  D0,MIDImsb
  15207.     EXT.W   D0
  15208.     SUB.W   #128,D0
  15209.     MOVE.W  CurrentPlayNote,D1
  15210.     SUB.W   D0,D1
  15211.     CMP.W   #113,D1
  15212.     BLS.S   mp_2
  15213.     MOVE.W  #113,D1
  15214. mp_2    MOVE.L  NoteAddr,A0
  15215.     MOVE.W  D1,6(A0)
  15216.     RTS
  15217.  
  15218. NoteAddr    dc.l 0
  15219.  
  15220. M_rts   RTS
  15221.  
  15222. MIDISysMessage
  15223.     CMP.B   #$F0,D0
  15224.     BEQ M_SysEx     ; System Exclusive
  15225.     CMP.B   #$F1,D0
  15226.     BEQ M_rts       ; Quarter Frame (MIDI Time Code)
  15227.     CMP.B   #$F2,D0
  15228.     BEQ M_SongPos   ; Song Position Pointer
  15229.     CMP.B   #$F3,D0
  15230.     BEQ M_SongSelect    ; Song Select
  15231.     CMP.B   #$F4,D0
  15232.     BEQ M_rts       ; -Reserved-
  15233.     CMP.B   #$F5,D0
  15234.     BEQ M_rts       ; -Reserved-
  15235.     CMP.B   #$F6,D0
  15236.     BEQ M_rts       ; -Reserved-
  15237.     CMP.B   #$F7,D0
  15238.     BEQ M_EOX       ; End of System Exclusive
  15239.     CMP.B   #$F8,D0
  15240.     BEQ M_rts       ; MIDI Timing Clock
  15241.     CMP.B   #$F9,D0
  15242.     BEQ M_rts       ; -Reserved-
  15243.     CMP.B   #$FA,D0
  15244.     BEQ M_Start     ; Start Message
  15245.     CMP.B   #$FB,D0
  15246.     BEQ M_Continue  ; Continue Message
  15247.     CMP.B   #$FC,D0
  15248.     BEQ M_Stop      ; Stop Message
  15249.     CMP.B   #$FD,D0
  15250.     BEQ M_rts       ; --- Reserved ---
  15251.     CMP.B   #$FE,D0
  15252.     BEQ M_rts       ; Active Sensing (Each 300ms if on)
  15253.     CMP.B   #$FF,D0
  15254.     BRA M_rts       ; System Reset Message
  15255.  
  15256. M_SysEx     RTS
  15257. M_SysExData RTS
  15258. M_SongPos   RTS
  15259. M_SongSelect    RTS
  15260. M_EOX       RTS
  15261.  
  15262. M_Start     JMP PlaySong
  15263.  
  15264. M_Continue  RTS
  15265.  
  15266. M_Stop      JMP StopIt
  15267.  
  15268. MIDIinBuffer    dc.l 0
  15269. MIDIinTo    dc.b 0
  15270. MIDIinFrom  dc.b 0
  15271.  
  15272. MIDIRunStatus   dc.b $80
  15273. MIDIRunChannel  dc.b 0
  15274. MIDIRunCommand  dc.b $08
  15275. MIDIByteCount   dc.b 0
  15276.  
  15277. MIDINote    dc.b 0
  15278. MIDIVelocity    dc.b 0
  15279. MIDITouch   dc.b 0
  15280. MIDIController  dc.b 0
  15281. MIDImsb     dc.b 0 
  15282. MIDIlsb     dc.b 0
  15283. MIDIProgram dc.b 0
  15284. MIDIError   dc.b 0
  15285.  
  15286. ;---- Sampler Screen ----
  15287.  
  15288. SamplerScreen
  15289.     CLR.B   RawKeyCode
  15290.     JSR WaitForButtonUp
  15291.     TST.W   SamScrEnable
  15292.     BNE ExitFromSam
  15293.     MOVE.W  #1,SamScrEnable
  15294.     MOVE.L  EditMode(PC),SaveEditMode
  15295.     CLR.L   EditMode
  15296.  
  15297.     MOVE.L  TextBplPtr(PC),A0
  15298.     LEA $15B8(A0),A0
  15299.     MOVE.L  A0,D0
  15300.     LEA CopList2Bpl4Ptr,A1
  15301.     MOVE.W  D0,6(A1)
  15302.     SWAP    D0
  15303.     MOVE.W  D0,2(A1)
  15304.  
  15305.     MOVEQ   #0,D0
  15306.     MOVE.W  #270,D1
  15307.     MOVEQ   #14,D2
  15308.     LEA CursorSpriteData,A0
  15309.     BSR SetSpritePos
  15310.     JSR SetSamSpritePtrs
  15311.     MOVE.W  CopCol0+16,CopList2+18
  15312.     BSR SwapSamScreen
  15313.     BEQ exisam2
  15314.     BSR ClearSamScr
  15315.     JSR DoShowFreeMem
  15316.     BSR ShowSamNote
  15317.     BSR ShowResamNote
  15318.     BRA RedrawSample
  15319.  
  15320. ExitFromSam
  15321.     JSR WaitForButtonUp
  15322.     MOVE.L  SamMemPtr,D0
  15323.     BEQ exisam2
  15324.     MOVE.L  D0,A1
  15325.     BSR Bjarne
  15326.     BSR.S   FreeDecompMem2
  15327. exisam2 JSR SetDefSpritePtrs
  15328.     CLR.B   RawKeyCode
  15329.     CLR.W   SamScrEnable
  15330.     MOVEQ   #-1,D0
  15331.     MOVE.L  D0,MarkStartOfs
  15332.     MOVE.L  SaveEditMode(PC),EditMode
  15333.     BSR SetScreenColors2
  15334.     JSR SetupVUCols
  15335.     BSR SetScrPatternPos
  15336.     BSR ClearSamScr
  15337.     JSR UpdateCursorPos
  15338.     JSR SetTempo
  15339.     BRA RedrawPattern
  15340.  
  15341. FreeDecompMem2
  15342.     MOVE.L  SamMemPtr,D0
  15343.     BEQ Return2
  15344.     MOVE.L  D0,A1
  15345.     MOVE.L  SamMemSize,D0
  15346.     CLR.L   SamMemPtr
  15347.     MOVE.L  4.W,A6
  15348.     JSR LVOFreeMem(A6)
  15349.     RTS
  15350.  
  15351. Decompact2
  15352.     MOVE.L  A0,CompPtr
  15353.     MOVE.L  D0,CompLen
  15354.     BSR.S   FreeDecompMem2
  15355.     MOVE.L  CompPtr(PC),A0
  15356.     MOVE.L  (A0),D0
  15357.     MOVE.L  D0,SamMemSize
  15358.     MOVEQ   #MEMF_PUBLIC,D1
  15359.     MOVE.L  4.W,A6
  15360.     JSR LVOAllocMem(A6)
  15361.     MOVE.L  D0,SamMemPtr
  15362.     BEQ OutOfMemErr
  15363.     MOVE.L  D0,A1
  15364.     MOVE.L  CompPtr(PC),A0
  15365.     MOVE.L  CompLen(PC),D0
  15366.     ADDQ.L  #4,A0
  15367.     SUBQ.L  #4,D0
  15368. dcmlop3 MOVE.B  (A0)+,D1
  15369.     CMP.B   #181,D1
  15370.     BEQ.S   DecodeIt3
  15371.     MOVE.B  D1,(A1)+
  15372. decom3  SUBQ.L  #1,D0
  15373.     CMP.L   #0,D0
  15374.     BGT.S   dcmlop3
  15375.     MOVE.L  SamMemPtr(PC),A1
  15376.     MOVEQ   #-1,D0
  15377.     RTS
  15378.  
  15379. DecodeIt3
  15380.     MOVEQ   #0,D1
  15381.     MOVE.B  (A0)+,D1
  15382.     MOVE.B  (A0)+,D2
  15383. dcdlop3 MOVE.B  D2,(A1)+
  15384.     DBRA    D1,dcdlop3
  15385.     SUBQ.L  #2,D0
  15386.     BRA.S   decom3
  15387.  
  15388. SwapSamScreen
  15389.     LEA SampScreenData,A0
  15390.     MOVE.L  #SampScreenSize,D0
  15391.     BSR Decompact2
  15392.     BEQ Return2
  15393.  
  15394. bjasize=134*10
  15395. Bjarne  LEA SamScrPos,A0
  15396.     MOVEQ   #1,D2
  15397. BjaLop1 MOVE.W  #bjasize-1,D1 ; 134
  15398. BjaLop2 MOVE.L  (A0),D0
  15399.     MOVE.L  (A1),(A0)+
  15400.     MOVE.L  D0,(A1)+
  15401.     DBRA    D1,BjaLop2
  15402.     ADD.L   #10240-bjasize*4,A0
  15403.     DBRA    D2,BjaLop1
  15404.  
  15405.     LEA CopListInsPos,A0
  15406.     LEA CopList2,A1
  15407.     MOVEQ   #29,D1
  15408. BjaLoop MOVE.W  (A0),D0
  15409.     MOVE.W  (A1),(A0)+
  15410.     MOVE.W  D0,(A1)+
  15411.     DBRA    D1,BjaLoop
  15412.     MOVEQ   #-1,D0
  15413.     RTS
  15414.  
  15415. ClearSamScr
  15416.     MOVE.W  #5121,TextOffset
  15417.     MOVE.W  #2,TextLength
  15418.     MOVE.L  #blnktxt,ShowTextPtr
  15419.     BSR ShowText
  15420.     MOVE.W  #4964,TextOffset
  15421.     MOVE.W  #3,TextLength
  15422.     BSR ShowText
  15423.     MOVE.W  #130*10-1,D0
  15424.     MOVE.L  TextBplPtr,A0
  15425.     LEA $15B8(A0),A0
  15426.     MOVE.L  A0,LineScreen
  15427.     MOVEQ   #0,D1
  15428. clrsslp MOVE.L  D1,(A0)+
  15429.     DBRA    D0,clrsslp
  15430.     RTS
  15431.  
  15432. blnktxt dc.b "    "
  15433.  
  15434. ClearSamArea
  15435.     MOVE.W  #64*10-1,D0
  15436.     MOVE.L  TextBplPtr,A0
  15437.     LEA $15B8(A0),A0
  15438.     MOVE.L  A0,LineScreen
  15439.     MOVEQ   #0,D1
  15440. clrsare MOVE.L  D1,(A0)+
  15441.     DBRA    D0,clrsare
  15442.     RTS
  15443.  
  15444. CheckSamGadgets
  15445.     MOVEM.W MouseX2,D0/D1
  15446.     CMP.W   #139,D1
  15447.     BLO SamTopBar
  15448.     CMP.W   #139+64,D1
  15449.     BLO SamplePressed
  15450.     CMP.W   #201+11,D1
  15451.     BLO SamDragBar
  15452.     CMP.W   #201+22,D1
  15453.     BLO SamMenu1
  15454.     CMP.W   #201+33,D1
  15455.     BLO SamMenu2
  15456.     CMP.W   #201+44,D1
  15457.     BLO SamMenu3
  15458.     CMP.W   #201+66,D1
  15459.     BLO SamMenu4
  15460.     RTS
  15461.  
  15462. SamTopBar
  15463.     CMP.W   #32,D0
  15464.     BLO ExitFromSam
  15465.     RTS
  15466.  
  15467. SamMenu1
  15468.     CMP.W   #32,D0
  15469.     BLO Return2
  15470.     CMP.W   #96,D0
  15471.     BLO PlayWaveform
  15472.     CMP.W   #176,D0
  15473.     BLO ShowRange
  15474.     CMP.W   #246,D0
  15475.     BLO ZoomOut
  15476.     BRA DispBox
  15477.  
  15478. SamMenu2
  15479.     CMP.W   #32,D0
  15480.     BLO StopPlaying
  15481.     CMP.W   #96,D0
  15482.     BLO PlayDisplay
  15483.     CMP.W   #176,D0
  15484.     BLO ShowAll
  15485.     CMP.W   #246,D0
  15486.     BLO RangeAll
  15487.     BRA LoopToggle
  15488.  
  15489. SamMenu3
  15490.     CMP.W   #32,D0
  15491.     BLO StopPlaying
  15492.     CMP.W   #96,D0
  15493.     BLO PlayRange
  15494.     CMP.W   #116,D0
  15495.     BLO CurToStart
  15496.     CMP.W   #136,D0
  15497.     BLO CurToEnd
  15498.     CMP.W   #176,D0
  15499.     BLO SwapBuffer
  15500.     CMP.W   #246,D0
  15501.     BLO Sampler
  15502.     BRA SetSamNote
  15503.  
  15504. SamMenu4
  15505.     CMP.W   #32,D0
  15506.     BLO SamCut
  15507.     CMP.W   #64,D0
  15508.     BLO SamCopy
  15509.     CMP.W   #96,D0
  15510.     BLO SamPaste
  15511.     CMP.W   #136,D0
  15512.     BLO RampVolume
  15513.     CMP.W   #176,D0
  15514.     BLO TuningTone
  15515.     CMP.W   #246,D0
  15516.     BLO Resample
  15517.     BRA SetResamNote
  15518.  
  15519.  
  15520. PlayWaveform
  15521.     JSR PlayNote
  15522.     JMP WaitForButtonUp
  15523. PlayDisplay
  15524.     LEA SampleInfo,A0
  15525.     MOVE.L  SamOffset(PC),StartOfs
  15526.     MOVE.L  SamDisplay(PC),D0
  15527.     LSR.L   #1,D0
  15528.     MOVE.W  D0,(A0)
  15529.     CLR.W   4(A0)
  15530.     MOVE.W  #1,6(A0)
  15531.     MOVE.W  PlayInsNum,-(SP)
  15532.     CLR.W   PlayInsNum
  15533.     JSR PlayNote
  15534.     MOVE.W  (SP)+,PlayInsNum
  15535.     BSR ShowSampleInfo
  15536.     JMP WaitForButtonUp
  15537. PlayRange
  15538.     MOVE.L  MarkStartOfs(PC),D1
  15539.     BMI NoRangeError
  15540.     MOVE.L  MarkEndOfs(PC),D0
  15541.     CMP.L   D0,D1
  15542.     BEQ LargerRangeError
  15543.     LEA SampleInfo,A0
  15544.     MOVE.L  D1,StartOfs
  15545.     SUB.L   D1,D0
  15546.     LSR.L   #1,D0
  15547.     MOVE.W  D0,(A0)
  15548.     CLR.W   4(A0)
  15549.     MOVE.W  #1,6(A0)
  15550.     MOVE.W  PlayInsNum,-(SP)
  15551.     CLR.W   PlayInsNum
  15552.     JSR PlayNote
  15553.     MOVE.W  (SP)+,PlayInsNum
  15554.     BSR ShowSampleInfo
  15555.     JMP WaitForButtonUp
  15556. StopPlaying
  15557.     BRA TurnOffVoices
  15558.  
  15559. StartOfs
  15560.     dc.l    0
  15561.  
  15562. ;----
  15563.  
  15564. ShowRange
  15565.     MOVE.L  MarkStartOfs(PC),D0
  15566.     BMI NoRangeError
  15567.     MOVE.L  MarkEndOfs(PC),D1
  15568.     CMP.L   D1,D0
  15569.     BEQ LargerRangeError
  15570.     SUB.L   D0,D1
  15571.     BNE shorano
  15572.     MOVEQ   #1,D1
  15573. shorano MOVE.L  D1,SamDisplay
  15574.     MOVE.L  D0,SamOffset
  15575.     MOVEQ   #-1,D0
  15576.     MOVE.L  D0,MarkStartOfs
  15577.     CLR.W   MarkStart
  15578.     BSR DisplaySample
  15579.     JMP WaitForButtonUp
  15580.  
  15581. ZoomOut MOVE.L  SamDisplay(PC),D0
  15582.     MOVE.L  SamLength(PC),D1
  15583.     MOVE.L  SamOffset(PC),D2
  15584.     MOVE.L  D0,D3
  15585.     LSL.L   #1,D3
  15586.     CMP.L   D1,D3
  15587.     BHI ShowAll
  15588.     LSR.L   #1,D0
  15589.     CMP.L   D2,D0
  15590.     BLO zoomou2
  15591.     MOVEQ   #0,D0
  15592. zoomou2 SUB.L   D0,D2
  15593.     MOVE.L  D2,D0
  15594.     ADD.L   D3,D0
  15595.     CMP.L   D1,D0
  15596.     BLS zoomou3
  15597.     SUB.L   D3,D1
  15598.     MOVE.L  D1,D2
  15599. zoomou3 MOVE.L  D2,SamOffset
  15600.     MOVE.L  D3,SamDisplay
  15601.     BSR OffsetToMark
  15602.     MOVE.L  MarkStartOfs(PC),D0
  15603.     CMP.L   MarkEndOfs(PC),D0
  15604.     BNE zoomouo
  15605.     MOVEQ   #-1,D0
  15606.     MOVE.L  D0,MarkStartOfs
  15607. zoomouo BSR DisplaySample
  15608.     JMP WaitForButtonUp
  15609.  
  15610. ShowAll CLR.L   SamOffset
  15611.     MOVE.L  SamLength(PC),SamDisplay
  15612.     BSR OffsetToMark
  15613.     MOVE.L  MarkStartOfs(PC),D0
  15614.     CMP.L   MarkEndOfs(PC),D0
  15615.     BNE shoallo
  15616.     MOVEQ   #-1,D0
  15617.     MOVE.L  D0,MarkStartOfs
  15618.     CLR.W   MarkStart
  15619. shoallo BSR DisplaySample
  15620.     JMP WaitForButtonUp
  15621.  
  15622. RangeAll
  15623.     BSR InvertRange
  15624.     MOVE.W  #3,MarkStart
  15625.     MOVE.W  #316,MarkEnd
  15626.     BSR MarkToOffset
  15627. ranall2 BSR InvertRange
  15628.     JMP WaitForButtonUp
  15629.  
  15630.  
  15631. CurToStart
  15632.     BSR InvertRange
  15633.     MOVEQ   #3,D0
  15634.     MOVE.W  D0,MarkStart
  15635.     MOVE.W  D0,MarkEnd
  15636.     MOVE.L  SamOffset(PC),D0
  15637.     MOVE.L  D0,MarkStartOfs
  15638.     MOVE.L  D0,MarkEndOfs
  15639.     BRA.S   ranall2
  15640.  
  15641. CurToEnd
  15642.     BSR InvertRange
  15643.     MOVE.W  #316,D0
  15644.     MOVE.W  D0,MarkStart
  15645.     MOVE.W  D0,MarkEnd
  15646.     MOVE.L  SamOffset(PC),D0
  15647.     ADD.L   SamDisplay(PC),D0
  15648.     MOVE.L  D0,MarkStartOfs
  15649.     MOVE.L  D0,MarkEndOfs
  15650.     BRA.S   ranall2
  15651.  
  15652. SwapBuffer
  15653.     MOVE.W  InsNum(PC),D1
  15654.     BEQ NotSampleNull
  15655.     LSL.W   #2,D1
  15656.     LEA SamplePtrs,A0
  15657.     LEA (A0,D1.W),A0
  15658.  
  15659.     MOVE.L  CopyBufPtr(PC),D0
  15660.     MOVE.L  (A0),CopyBufPtr
  15661.     MOVE.L  D0,(A0)
  15662.     MOVE.L  D0,A1
  15663.     CLR.W   (A1)
  15664.  
  15665.     MOVE.L  CopyBufSize(PC),D0
  15666.     MOVE.L  124(A0),CopyBufSize
  15667.     MOVE.L  D0,124(A0)
  15668.  
  15669.     MOVE.L  SongDataPtr(PC),A0
  15670.     MOVE.W  InsNum(PC),D1
  15671.     MULU    #30,D1
  15672.     LEA 12(A0,D1.W),A0
  15673.     LSR.L   #1,D0
  15674.     MOVE.W  D0,(A0)
  15675.     MOVE.L  RepBuf(PC),D0
  15676.     MOVE.L  4(A0),RepBuf
  15677.     MOVE.L  D0,4(A0)
  15678.  
  15679.     MOVE.W  RepBuf2(PC),D0
  15680.     MOVE.W  2(A0),RepBuf2
  15681.     TST.B   D0
  15682.     BNE.S   swabuf2
  15683.     MOVE.B  #$40,D0
  15684. swabuf2 MOVE.W  D0,2(A0)
  15685.     JSR TurnOffVoices
  15686.     BSR ValidateLoops
  15687.     BSR ShowSampleInfo
  15688.     BSR UpdateRepeats
  15689.     BSR RedrawSample
  15690.     JMP WaitForButtonUp
  15691.  
  15692. RepBuf  dc.l    1
  15693. RepBuf2 dc.w    $0040
  15694.  
  15695. ;----
  15696.  
  15697. NoRangeError
  15698.     LEA NoRangeText(PC),A0
  15699. nres2   BSR ShowStatusText
  15700.     JMP SetErrorPtrCol
  15701.  
  15702. LargerRangeError
  15703.     LEA LargerRangeText(PC),A0
  15704.     BRA.S   nres2
  15705.  
  15706. SetCursorError
  15707.     LEA SetCursorText(PC),A0
  15708.     BRA.S   nres2
  15709.  
  15710. BufIsEmptyError
  15711.     LEA BufIsEmptyText(PC),A0
  15712.     BRA.S   nres2
  15713.  
  15714. EmptySampleError
  15715.     LEA EmptySampleText(PC),A0
  15716.     BRA.S   nres2
  15717.  
  15718. NoRangeText dc.b "no range selected",0
  15719. LargerRangeText dc.b "set larger range",0
  15720. SetCursorText   dc.b "set cursor pos",0
  15721. BufIsEmptyText  dc.b "buffer is empty",0
  15722. EmptySampleText dc.b "sample is empty",0
  15723.  
  15724. ;----
  15725.  
  15726. DispBox
  15727.     RTS
  15728.  
  15729. LoopToggle
  15730.     JSR WaitForButtonUp
  15731.     MOVE.W  InsNum(PC),D1
  15732.     BEQ NotSampleNull
  15733.     MOVE.L  SongDataPtr(PC),A0
  15734.     MULU    #30,D1
  15735.     LEA 12(A0,D1.W),A0
  15736.     TST.W   LoopOnOffFlag
  15737.     BEQ.S   loopton
  15738.     MOVE.L  4(A0),SavSamInf
  15739.     MOVEQ   #1,D0
  15740.     MOVE.L  D0,4(A0)
  15741.     JSR TurnOffVoices
  15742. looptlo BSR ShowSampleInfo
  15743.     BSR UpdateRepeats
  15744.     BRA DisplaySample
  15745. loopton MOVE.L  SavSamInf(PC),D0
  15746.     BNE.S   loopto2
  15747.     MOVE.W  (A0),D0
  15748. loopto2 MOVE.L  D0,4(A0)
  15749.     BRA looptlo
  15750.  
  15751. ShowLoopToggle
  15752.     LEA ToggleOFFText(PC),A0
  15753.     TST.W   LoopOnOffFlag
  15754.     BEQ.S   sltskip
  15755.     LEA ToggleONText(PC),A0
  15756. sltskip MOVEQ   #3,D0
  15757.     MOVE.W  #9076,D1
  15758.     BRA ShowText3
  15759.  
  15760. LoopOnOffFlag   dc.w 0
  15761. SavSamInf   dc.l 0
  15762.  
  15763. SetSamNote
  15764.     BSR ShowResamNote
  15765.     MOVE.W  #9516,TextOffset
  15766.     MOVE.W  #3,TextLength
  15767.     MOVE.L  #SpcNoteText,ShowTextPtr
  15768.     BSR ShowText
  15769.     MOVE.W  #1,SamNoteType
  15770.     MOVE.L  #SampleNote,SplitAddress
  15771.     JMP WaitForButtonUp
  15772.  
  15773. SetResamNote
  15774.     BSR ShowSamNote
  15775.     MOVE.W  #9956,TextOffset
  15776.     MOVE.W  #3,TextLength
  15777.     MOVE.L  #SpcNoteText,ShowTextPtr
  15778.     BSR ShowText
  15779.     MOVE.W  #2,SamNoteType
  15780.     MOVE.L  #ResampleNote,SplitAddress
  15781.     JMP WaitForButtonUp
  15782.  
  15783. ResampleText    dc.b "Resample?",0
  15784. ResamplingText  dc.b "Resampling...",0
  15785.  
  15786. Resample
  15787.     LEA ResampleText(PC),A0
  15788.     JSR AreYouSure
  15789.     BNE Return2
  15790.     JSR StorePtrCol
  15791.     JSR SetWaitPtrCol
  15792.     LEA ResamplingText(PC),A0
  15793.     BSR ShowStatusText
  15794.     LEA SamplePtrs,A0
  15795.     MOVE.W  InsNum(PC),D1
  15796.     BEQ NotSampleNull
  15797.     LSL.W   #2,D1
  15798.     LEA (A0,D1.W),A0
  15799.     MOVE.L  (A0),D0
  15800.     BEQ ERC2
  15801.     MOVE.L  D0,A2
  15802.     MOVE.L  124(A0),D6
  15803.     CMP.L   #2,D6
  15804.     BLS ERC2
  15805.  
  15806.     MOVE.L  SongDataPtr(PC),A0
  15807.     MOVE.W  InsNum(PC),D1
  15808.     MULU    #30,D1
  15809.     MOVEQ   #0,D0
  15810.     MOVE.B  12+2(A0,D1.W),D0 ; finetune
  15811.     MULU    #37*2,D0
  15812.     LEA PeriodTable(PC),A0
  15813.     ADD.L   D0,A0
  15814.     MOVEQ   #0,D1
  15815.     MOVE.W  ResampleNote(PC),D1
  15816.     LSL.W   #1,D1
  15817.     MOVE.W  (A0,D1.W),D1
  15818.     BEQ ERC2
  15819.  
  15820.     LEA PeriodTable,A0
  15821.     MOVEQ   #0,D5
  15822.     MOVE.W  TuneNote,D5
  15823.     LSL.W   #1,D5
  15824.     MOVE.W  (A0,D5.W),D5
  15825.     BEQ ERC2
  15826.  
  15827. ; D1=resamperiod, D5=tuneperiod
  15828.  
  15829.     MOVE.L  D5,D0 ; tune
  15830.     LSL.L   #8,D0
  15831.     LSL.L   #4,D0 ; * 4096
  15832.     DIVU    D1,D0 ; / resample
  15833.     MOVEQ   #0,D4
  15834.     MOVE.W  D0,D4
  15835.     LSL.L   #4,D4 ; hi-word=add value, lo-word=fraction
  15836.  
  15837.     MOVE.W  D6,D7
  15838.     LSR.W   #1,D7
  15839.     MULU    D1,D7
  15840.     DIVU    D5,D7
  15841.     AND.L   #$FFFF,D7
  15842.     CMP.W   #2,D7
  15843.     BLO ERC2
  15844.     CMP.W   #$7FFF,D7
  15845.     BLO resamlo
  15846.     MOVE.W  #$7FFF,D7
  15847. resamlo ADD.L   D7,D7
  15848.     MOVE.L  D7,D0
  15849.     MOVE.L  #MEMF_CHIP!MEMF_CLEAR,D1
  15850.     MOVE.L  4.W,A6
  15851.     JSR LVOAllocMem(A6)
  15852.     TST.L   D0
  15853.     BEQ SamMemError
  15854.     MOVE.L  D0,A1
  15855.     MOVE.L  D0,A3
  15856.     JSR TurnOffVoices
  15857.     MOVE.L  A2,A0
  15858. ; D4=resample value, D6=old length, D7=new length
  15859. ; A0/A2=old sample, A1/A3=new sample
  15860.  
  15861.     MOVE.W  #32767,D1
  15862.     MOVEQ   #0,D3
  15863.     MOVEQ   #0,D5
  15864. resampleloop
  15865.     MOVE.B  1(A0),D0
  15866.     EXT.W   D0
  15867.     MULS    D1,D0
  15868.     MOVE.B  (A0),D2
  15869.     EXT.W   D2
  15870.     MULS    D3,D2
  15871.     ADD.L   D2,D0
  15872.     ASR.L   #8,D0
  15873.     ASR.L   #7,D0
  15874.     MOVE.B  D0,(A1)+
  15875.  
  15876.     ADD.L   D4,D5
  15877.     SWAP    D5
  15878.     MOVE.L  A2,A0
  15879.     MOVEQ   #0,D0
  15880.     MOVE.W  D5,D0
  15881.     ADD.L   D0,A0
  15882.     SWAP    D5
  15883.     MOVE.W  D5,D1
  15884.     LSR.W   #1,D1
  15885.     MOVE.W  #32767,D3
  15886.     SUB.W   D1,D3
  15887.  
  15888.     MOVE.L  A1,A4
  15889.     SUB.L   A3,A4
  15890.     CMP.L   D7,A4
  15891.     BHS.S   resamskip
  15892.     MOVE.L  A0,A4
  15893.     SUB.L   A2,A4
  15894.     CMP.L   D6,A4
  15895.     BLO.S   resampleloop
  15896.  
  15897. resamskip
  15898.     MOVE.L  A2,A1
  15899.     MOVE.L  D6,D0
  15900.     MOVE.L  4.W,A6
  15901.     JSR LVOFreeMem(A6)
  15902.     MOVE.W  InsNum(PC),D1
  15903.     LSL.W   #2,D1
  15904.     LEA SamplePtrs,A0
  15905.     LEA (A0,D1.W),A0
  15906.     MOVE.L  A3,(A0)
  15907.     MOVE.L  D7,124(A0)
  15908.  
  15909.     MOVE.L  SongDataPtr(PC),A0
  15910.     MOVE.W  InsNum(PC),D1
  15911.     MULU    #30,D1
  15912.     LEA 12(A0,D1.W),A0
  15913.     LSR.L   #1,D7
  15914.     MOVE.W  D7,(A0)
  15915.     CLR.B   2(A0)
  15916.     CLR.W   4(A0)
  15917.     MOVE.W  #1,6(A0)
  15918.     JSR RestorePtrCol
  15919.     BSR ClearSamStarts
  15920.     BSR ShowSampleInfo
  15921.     BSR ShowAllRight
  15922.     BRA RedrawSample
  15923.  
  15924. ERC2    JMP ErrorRestoreCol
  15925.  
  15926. SamCut  CLR.B   RawKeyCode
  15927.     MOVE.L  MarkStartOfs(PC),D0
  15928.     BMI NoRangeError
  15929.     CMP.L   MarkEndOfs(PC),D0
  15930.     BEQ LargerRangeError
  15931.     TST.B   CutToBufFlag
  15932.     BEQ.S   samcut2
  15933.     BSR SamCopy
  15934. samcut2 BSR TurnOffVoices
  15935.     LEA SamplePtrs(PC),A0
  15936.     MOVE.W  InsNum(PC),D1
  15937.     BEQ NotSampleNull
  15938.     LSL.W   #2,D1
  15939.     LEA (A0,D1.W),A0
  15940.     MOVE.L  (A0),D0
  15941.     BEQ EmptySampleError
  15942.     MOVE.L  124(A0),D2
  15943.     CMP.L   #2,D2
  15944.     BLO EmptySampleError
  15945.  
  15946.     MOVE.L  D0,A1
  15947.     MOVE.L  D0,A2       ; sample start
  15948.     MOVE.L  D0,A3
  15949.     MOVE.L  D0,A4
  15950.     MOVE.L  D0,A5
  15951.     ADD.L   MarkStartOfs(PC),A3 ; mark start
  15952.     MOVE.L  MarkEndOfs(PC),D0
  15953.     SUB.L   MarkStartOfs(PC),D0
  15954.     CMP.L   D2,D0
  15955.     BHS Destroy
  15956.     MOVE.L  MarkEndOfs(PC),D0
  15957.     CMP.L   D2,D0
  15958.     BLO.S   samsome
  15959.     MOVE.L  D2,D0
  15960.     SUBQ.L  #1,D0
  15961. samsome ADD.L   D0,A4   ; mark end
  15962.     ADD.L   D2,A5       ; sample end
  15963.  
  15964.     MOVE.L  A3,D0
  15965.     SUB.L   A2,D0
  15966.     ADD.L   A5,D0
  15967.     SUB.L   A4,D0
  15968.     BNE sacoklen
  15969.     MOVEQ   #0,D3
  15970.     MOVEQ   #0,D4
  15971.     BRA sacfree
  15972.  
  15973. sacoklen
  15974.     MOVE.L  D0,D3
  15975.     MOVEQ   #MEMF_CHIP,D1
  15976.     MOVE.L  4.W,A6
  15977.     JSR LVOAllocMem(A6)
  15978.     MOVE.L  D0,D4
  15979.     BEQ OutOfMemErr ; No memory
  15980.  
  15981.     MOVE.L  D0,A0
  15982.     MOVE.L  A2,A1
  15983.     MOVE.L  A3,D0
  15984.     SUB.L   A2,D0
  15985.     BRA.S   sacskp1
  15986. saclop1 MOVE.B  (A2)+,(A0)+
  15987. sacskp1 DBRA    D0,saclop1
  15988.  
  15989.     MOVE.L  A5,D0
  15990.     SUB.L   A4,D0
  15991.     BRA.S   sacskp2
  15992. smclop2 MOVE.B  (A4)+,(A0)+
  15993. sacskp2 DBRA    D0,smclop2
  15994.  
  15995. sacfree MOVE.L  D2,D0
  15996.     MOVE.L  4.W,A6
  15997.     JSR LVOFreeMem(A6)
  15998.  
  15999.     MOVE.W  InsNum(PC),D1
  16000.     LSL.W   #2,D1
  16001.     LEA SamplePtrs(PC),A0
  16002.     LEA (A0,D1.W),A0
  16003.     MOVE.L  D4,(A0)
  16004.     MOVE.L  D3,124(A0)
  16005.  
  16006.     MOVE.L  D4,SamStart
  16007.     MOVE.L  D3,SamLength
  16008.     MOVE.L  SamOffset(PC),D4
  16009.     ADD.L   SamDisplay(PC),D4
  16010.     CMP.L   D3,D4
  16011.     BLO samcuto     ; display ok
  16012.     MOVE.L  SamDisplay(PC),D4
  16013.     CMP.L   D3,D4
  16014.     BLO samnils     ; if display < length, move offset
  16015. samsall CLR.L   SamOffset   ; else show all
  16016.     MOVE.L  D3,SamDisplay
  16017.     BRA samcuto
  16018. samnils MOVE.L  D3,D4
  16019.     SUB.L   SamDisplay(PC),D4
  16020.     BMI.S   samsall     ; if offset < 0, show all
  16021.     MOVE.L  D4,SamOffset
  16022. samcuto MOVE.L  SongDataPtr(PC),A0
  16023.     MOVE.W  InsNum(PC),D1
  16024.     MULU    #30,D1
  16025.     LEA 12(A0,D1.W),A0
  16026.  
  16027.     LSR.L   #1,D3
  16028.     MOVE.W  D3,(A0)
  16029.     MOVE.W  4(A0),D0
  16030.     CMP.W   D3,D0
  16031.     BLS.S   samcuxx
  16032.     MOVEQ   #1,D0
  16033.     MOVE.L  D0,4(A0)
  16034.     BRA.S   samcuex
  16035. samcuxx ADD.W   6(A0),D0
  16036.     CMP.W   D3,D0
  16037.     BLS.S   samcuex
  16038.     SUB.W   4(A0),D3
  16039.     MOVE.W  D3,6(A0)
  16040.  
  16041. samcuex MOVE.L  MarkStartOfs(PC),MarkEndOfs
  16042.     BSR ClearSamStarts
  16043.     BSR ValidateLoops
  16044.     BSR ShowSampleInfo
  16045.     BRA DisplaySample
  16046.  
  16047.  
  16048. SamCopy CLR.B   RawKeyCode
  16049.     MOVE.L  MarkStartOfs(PC),D0
  16050.     BMI NoRangeError
  16051.     CMP.L   MarkEndOfs(PC),D0
  16052.     BEQ LargerRangeError
  16053.     LEA SamplePtrs(PC),A0
  16054.     MOVE.W  InsNum(PC),D1
  16055.     BEQ NotSampleNull
  16056.     LSL.W   #2,D1
  16057.     LEA (A0,D1.W),A0
  16058.     MOVE.L  (A0),D0
  16059.     BEQ EmptySampleError
  16060.     MOVE.L  124(A0),D2
  16061.     BEQ EmptySampleError
  16062.     MOVE.L  D0,A3
  16063.     MOVE.L  D0,A4
  16064.     ADD.L   MarkStartOfs(PC),A3 ; mark start
  16065.     MOVE.L  MarkEndOfs(PC),D0   ; mark end
  16066.     CMP.L   D2,D0
  16067.     BLO.S   csamsom
  16068.     MOVE.L  D2,D0
  16069.     SUBQ.L  #1,D0
  16070. csamsom ADD.L   D0,A4
  16071.     BSR.S   FreeCopyBuf
  16072.     MOVE.L  A4,D0
  16073.     SUB.L   A3,D0
  16074.     ADDQ.L  #1,D0
  16075.     MOVE.L  D0,CopyBufSize
  16076.     MOVEQ   #MEMF_CHIP,D1
  16077.     MOVE.L  4.W,A6
  16078.     JSR LVOAllocMem(A6)
  16079.     MOVE.L  D0,CopyBufPtr
  16080.     BEQ OutOfMemErr ; No memory
  16081.     MOVE.L  D0,A5
  16082. csamlop MOVE.B  (A3)+,(A5)+
  16083.     CMP.L   A4,A3
  16084.     BLS.S   csamlop
  16085.     BSR InvertRange
  16086.     BSR InvertRange
  16087.     JMP WaitForButtonUp
  16088.  
  16089. FreeCopyBuf
  16090.     MOVE.L  CopyBufPtr(PC),D0
  16091.     BEQ Return2
  16092.     MOVE.L  D0,A1
  16093.     MOVE.L  CopyBufSize(PC),D0
  16094.     MOVE.L  4.W,A6
  16095.     JSR LVOFreeMem(A6)
  16096.     CLR.L   CopyBufPtr
  16097.     RTS
  16098.  
  16099. CopyBufPtr  dc.l    0
  16100. CopyBufSize dc.l    0
  16101.  
  16102. SamPaste
  16103.     CLR.B   RawKeyCode
  16104.     MOVE.L  MarkStartOfs(PC),D0
  16105.     BMI SetCursorError
  16106.     LEA SamplePtrs(PC),A0
  16107.     MOVE.W  InsNum(PC),D1
  16108.     BEQ NotSampleNull
  16109.     LSL.W   #2,D1
  16110.     LEA (A0,D1.W),A0
  16111.     MOVEQ   #0,D2
  16112.     MOVE.L  (A0),D0
  16113.     BEQ.S   sapanul
  16114.     MOVE.L  124(A0),D2
  16115. sapanul MOVE.L  D0,A2
  16116.     MOVE.L  CopyBufPtr(PC),D3
  16117.     BEQ BufIsEmptyError
  16118.     MOVE.L  D3,A3
  16119.     MOVE.L  CopyBufSize(PC),D3
  16120.     BEQ BufIsEmptyError
  16121.  
  16122.     MOVE.L  D3,D4 ; copysize
  16123.     ADD.L   D2,D4 ; + origsize
  16124.     CMP.L   #$FFFE,D4
  16125.     BLO.S   sapaok
  16126.     MOVE.L  #$FFFE,D4
  16127. sapaok  MOVE.L  D4,D0
  16128.     MOVE.L  #MEMF_CHIP!MEMF_CLEAR,D1
  16129.     MOVE.L  4.W,A6
  16130.     JSR LVOAllocMem(A6)
  16131.     TST.L   D0
  16132.     BEQ OutOfMemErr
  16133.     MOVE.L  D0,A4
  16134.     MOVEQ   #0,D0
  16135.     TST.L   D2
  16136.     BEQ.S   sapask1
  16137.     MOVE.L  MarkStartOfs(PC),D0
  16138. sapask1 MOVE.L  D0,MarkStartOfs
  16139.     MOVE.L  A2,A1
  16140.     MOVE.L  D2,D1
  16141.     MOVE.L  A4,A5
  16142.     MOVE.L  A4,A0
  16143.     ADD.L   D4,A0
  16144. ; D0    = paste position
  16145. ; A0    = end of new sample
  16146. ; A1/D1 = copy of A2/D2
  16147. ; A2/D2 = original sample
  16148. ; A3/D3 = copy buffer
  16149. ; A4/D4 = new sample
  16150. ; A5    = copy of A4
  16151.     BRA.S   sapask2
  16152. sapalp1 MOVE.B  (A2)+,(A4)+ ; copy first part
  16153.     CMP.L   A0,A4
  16154.     BHS.S   sapaski
  16155.     SUBQ.L  #1,D2
  16156. sapask2 DBRA    D0,sapalp1
  16157.     BRA.S   sapask3
  16158. sapalp2 MOVE.B  (A3)+,(A4)+ ; copy from buffer
  16159.     CMP.L   A0,A4
  16160.     BHS.S   sapaski
  16161. sapask3 DBRA    D3,sapalp2
  16162.     TST.L   D2
  16163.     BEQ.S   sapaski
  16164.     BMI.S   sapaski
  16165. sapalp3 MOVE.B  (A2)+,(A4)+ ; copy last part
  16166.     CMP.L   A0,A4
  16167.     BHS.S   sapaski
  16168.     SUBQ.L  #1,D2
  16169.     BNE.S   sapalp3
  16170.  
  16171. sapaski MOVE.L  D1,D0
  16172.     MOVE.L  4.W,A6
  16173.     JSR LVOFreeMem(A6)
  16174.  
  16175.     MOVE.W  InsNum(PC),D1
  16176.     LSL.W   #2,D1
  16177.     LEA SamplePtrs(PC),A0
  16178.     LEA (A0,D1.W),A0
  16179.     MOVE.L  A5,(A0)
  16180.     MOVE.L  D4,124(A0)
  16181.  
  16182.     MOVE.L  SongDataPtr(PC),A0
  16183.     MOVE.W  InsNum(PC),D1
  16184.     MULU    #30,D1
  16185.     LEA 12(A0,D1.W),A0
  16186.     LSR.L   #1,D4
  16187.     MOVE.W  D4,(A0)
  16188.  
  16189.     MOVE.L  MarkStartOfs(PC),MarkEndOfs
  16190.     BSR OffsetToMark
  16191.     BSR ClearSamStarts
  16192.     BSR ShowSampleInfo
  16193.     BRA RedrawSample
  16194.  
  16195. RampVolume
  16196.     MOVE.L  TextBplPtr(PC),A0
  16197.     LEA 6209(A0),A0
  16198.     MOVEQ   #32,D3
  16199. ravlap2 MOVEQ   #16,D2
  16200. ravlap1 CLR.B   (A0)+
  16201.     DBRA    D2,ravlap1
  16202.     LEA 23(A0),A0
  16203.     DBRA    D3,ravlap2
  16204.     LEA VolBoxPos,A0
  16205.     LEA VolBoxData,A1
  16206.     MOVEQ   #1,D4
  16207. ravlop3 MOVEQ   #32,D3
  16208. ravlop2 MOVEQ   #16,D2
  16209. ravlop1 MOVE.B  (A1)+,(A0)+
  16210.     DBRA    D2,ravlop1
  16211.     ADDQ.L  #1,A1
  16212.     LEA 23(A0),A0
  16213.     DBRA    D3,ravlop2
  16214.     LEA 8920(A0),A0
  16215.     DBRA    D4,ravlop3
  16216.     BSR ShowVolSliders
  16217.     JSR WaitForButtonUp
  16218. ravloop BTST    #2,$DFF016
  16219.     BEQ.S   ExitVolBox
  16220.     JSR DoKeyBuffer
  16221.     MOVE.B  RawKeyCode(PC),D2
  16222.     CMP.B   #68,D2
  16223.     BEQ.S   ExitVolBox
  16224.     BTST    #6,$BFE001
  16225.     BNE.S   ravloop
  16226.     MOVEM.W MouseX,D0-D1
  16227.     CMP.W   #72,D0
  16228.     BLO.S   ravloop
  16229.     CMP.W   #72+136,D0
  16230.     BHS.S   ravloop
  16231.     CMP.W   #155,D1
  16232.     BLO.S   ravloop
  16233.     CMP.W   #166,D1
  16234.     BLO.S   Vol1Slider
  16235.     CMP.W   #177,D1
  16236.     BLO Vol2Slider
  16237.     CMP.W   #188,D1
  16238.     BLO VolGadgs
  16239.     BRA.S   ravloop
  16240.  
  16241. ExitVolBox
  16242.     LEA VolBoxPos,A0
  16243.     MOVEQ   #1,D2
  16244. revlap3 MOVEQ   #32,D1
  16245. revlap2 MOVEQ   #16,D0
  16246. revlap1 CLR.B   (A0)+
  16247.     DBRA    D0,revlap1
  16248.     LEA 23(A0),A0
  16249.     DBRA    D1,revlap2
  16250.     LEA 8920(A0),A0
  16251.     DBRA    D2,revlap3
  16252.     BRA DisplaySample
  16253.  
  16254. Vol1Slider
  16255.     CMP.W   #167,D0
  16256.     BHI.S   v1skip
  16257.     LEA Vol1(PC),A4
  16258.     MOVEQ   #0,D7
  16259. v1loop1 BTST    #6,$BFE001
  16260.     BNE ravloop
  16261.     MOVE.W  MouseX(PC),D0
  16262.     CMP.W   D7,D0
  16263.     BEQ.S   v1loop1
  16264.     MOVE.W  D0,D7
  16265.     SUB.W   #107,D0
  16266.     BPL.S   v1skp2
  16267.     MOVEQ   #0,D0
  16268. v1skp2  CMP.W   #60,D0
  16269.     BLS.S   v1skp3
  16270.     MOVEQ   #60,D0
  16271. v1skp3  MULU    #200,D0
  16272.     DIVU    #60,D0
  16273.     MOVE.W  D0,(A4)
  16274. shvosl  BSR ShowVolSliders
  16275.     BRA.S   v1loop1
  16276.  
  16277. v1skip  MOVE.W  #180,LineCurX
  16278.     MOVE.W  #164,LineCurY
  16279.     MOVE.W  #6342,TextOffset
  16280.     BSR GetDec3Dig
  16281.     TST.W   AbortDecFlag
  16282.     BNE shvosl
  16283.     CMP.W   #200,D0
  16284.     BLS.S   v1sk2
  16285.     MOVE.W  #200,D0
  16286. v1sk2   MOVE.W  D0,Vol1
  16287.     BRA.S   shvosl
  16288.  
  16289. Vol2Slider
  16290.     CMP.W   #167,D0
  16291.     BHI.S   v2skip
  16292.     LEA Vol2(PC),A4
  16293.     MOVEQ   #0,D7
  16294.     BRA v1loop1
  16295. v2skip  MOVE.W  #180,LineCurX
  16296.     MOVE.W  #175,LineCurY
  16297.     MOVE.W  #6782,TextOffset
  16298.     BSR GetDec3Dig
  16299.     TST.W   AbortDecFlag
  16300.     BNE shvosl
  16301.     CMP.W   #200,D0
  16302.     BLS.S   v2sk2
  16303.     MOVE.W  #200,D0
  16304. v2sk2   MOVE.W  D0,Vol2
  16305.     BRA shvosl
  16306.  
  16307.  
  16308. VolGadgs
  16309.     CMP.W   #100,D0
  16310.     BLO DoRampVol
  16311.     CMP.W   #144,D0
  16312.     BLO Normalize
  16313.     CMP.W   #154,D0
  16314.     BLO.S   SetRampDown
  16315.     CMP.W   #164,D0
  16316.     BLO.S   SetRampUp
  16317.     CMP.W   #174,D0
  16318.     BLO.S   SetRampUnity
  16319.     BRA ExitVolBox
  16320.  
  16321. SetRampDown
  16322.     MOVE.W  #100,Vol1
  16323.     CLR.W   Vol2
  16324.     BRA.S   sru2
  16325. SetRampUp
  16326.     CLR.W   Vol1
  16327.     MOVE.W  #100,Vol2
  16328.     BRA.S   sru2
  16329. SetRampUnity
  16330.     MOVE.W  #100,Vol1
  16331.     MOVE.W  #100,Vol2
  16332. sru2    BSR.S   ShowVolSliders
  16333.     JSR WaitForButtonUp
  16334.     BRA ravloop
  16335.  
  16336. ShowVolSliders
  16337.     MOVE.L  TextBplPtr(PC),A0
  16338.     LEA 6209(A0),A0
  16339.     MOVEQ   #21,D3
  16340. ravlip2 MOVEQ   #12,D2
  16341. ravlip1 CLR.B   (A0)+
  16342.     DBRA    D2,ravlip1
  16343.     LEA 27(A0),A0
  16344.     DBRA    D3,ravlip2
  16345.     MOVEQ   #0,D4
  16346.     MOVE.W  Vol1(PC),D4
  16347.     MOVEQ   #20,D5
  16348.     BSR OneSlider
  16349.     MOVEQ   #0,D4
  16350.     MOVE.W  Vol2(PC),D4
  16351.     MOVEQ   #31,D5
  16352.     BSR OneSlider
  16353.     MOVE.W  Vol1(PC),WordNumber
  16354.     MOVE.W  #6342,TextOffset
  16355.     BSR Print3DecDigits
  16356.     MOVE.W  Vol2(PC),WordNumber
  16357.     MOVE.W  #6782,TextOffset
  16358.     BRA Print3DecDigits
  16359.  
  16360. OneSlider
  16361.     MOVE.W  D4,D6
  16362.     ADD.W   D4,D4
  16363.     ADD.W   D6,D4
  16364.     DIVU    #10,D4
  16365.     ADD.W   #105,D4
  16366.     MOVEQ   #2,D6
  16367. oneslop MOVE.W  D4,D0
  16368.     MOVE.W  D4,D2
  16369.     ADDQ.W  #5,D2
  16370.     MOVE.W  D5,D1
  16371.     MOVE.W  D5,D3
  16372.     BSR DrawLine
  16373.     ADDQ.W  #1,D5
  16374.     DBRA    D6,oneslop
  16375.     RTS
  16376.  
  16377. DoRampVol
  16378.     CLR.B   RawKeyCode
  16379.     LEA SamplePtrs(PC),A0
  16380.     MOVE.W  InsNum(PC),D1
  16381.     BEQ nozerr1
  16382.     LSL.W   #2,D1
  16383.     LEA (A0,D1.W),A0
  16384.     MOVEQ   #0,D2
  16385.     MOVE.L  (A0),D0
  16386.     BEQ nozerr2
  16387.     MOVE.L  D0,A2
  16388.     MOVE.L  124(A0),D2
  16389.     BEQ nozerr2
  16390.     MOVE.L  MarkStartOfs(PC),D0
  16391.     BMI drvskip
  16392.     MOVE.L  MarkEndOfs(PC),D1
  16393.     SUB.L   D0,D1
  16394.     BEQ.S   drvskip
  16395.     ADD.L   D0,A2
  16396.     MOVE.L  D1,D2
  16397.     ADDQ.L  #1,D2
  16398. drvskip JSR StorePtrCol
  16399.     JSR SetWaitPtrCol
  16400.     MOVE.L  D2,D5
  16401.     MOVEQ   #0,D3
  16402. drvloop MOVE.W  D3,D1
  16403.     MULU    Vol2(PC),D1
  16404.     DIVU    D2,D1
  16405.     MOVE.W  D2,D4
  16406.     SUB.W   D3,D4
  16407.     MULU    Vol1(PC),D4
  16408.     DIVU    D2,D4
  16409.     ADD.W   D4,D1
  16410.     ADDQ.W  #1,D3
  16411.     MOVE.B  (A2),D0
  16412.     EXT.W   D0
  16413.     MULS    D1,D0
  16414.     DIVS    #100,D0
  16415.     CMP.W   #127,D0
  16416.     BLT.S   drvskp2
  16417.     MOVEQ   #127,D0
  16418. drvskp2 CMP.W   #-128,D0
  16419.     BGT.S   drvskp3
  16420.     MOVEQ   #-128,D0
  16421. drvskp3 MOVE.B  D0,(A2)+
  16422.     SUBQ.L  #1,D5
  16423.     BNE drvloop
  16424.     JSR RestorePtrCol
  16425.     BRA ExitVolBox
  16426.  
  16427. nozerr1 BSR NotSampleNull
  16428.     BRA ravloop
  16429. nozerr2 BSR EmptySampleError
  16430.     BRA ravloop
  16431.  
  16432. Normalize
  16433.     CLR.B   RawKeyCode
  16434.     LEA SamplePtrs(PC),A0
  16435.     MOVE.W  InsNum(PC),D1
  16436.     BEQ nozerr1
  16437.     LSL.W   #2,D1
  16438.     LEA (A0,D1.W),A0
  16439.     MOVEQ   #0,D2
  16440.     MOVE.L  (A0),D0
  16441.     BEQ nozerr2
  16442.     MOVE.L  D0,A2
  16443.     MOVE.L  124(A0),D2
  16444.     BEQ nozerr2
  16445.     MOVE.L  MarkStartOfs(PC),D0
  16446.     BMI nozskip
  16447.     MOVE.L  MarkEndOfs(PC),D1
  16448.     SUB.L   D0,D1
  16449.     BEQ.S   nozskip
  16450.     ADD.L   D0,A2
  16451.     MOVE.L  D1,D2
  16452.     ADDQ.L  #1,D2
  16453. nozskip JSR StorePtrCol
  16454.     JSR SetWaitPtrCol
  16455.     MOVEQ   #0,D0
  16456. nozloop MOVE.B  (A2)+,D1
  16457.     EXT.W   D1
  16458.     BPL.S   nozskp2
  16459.     NEG.W   D1
  16460. nozskp2 CMP.W   D0,D1
  16461.     BLO.S   nozskp3
  16462.     MOVE.W  D1,D0
  16463. nozskp3 SUBQ.L  #1,D2
  16464.     BNE nozloop
  16465.     JSR RestorePtrCol
  16466.     TST.W   D0
  16467.     BEQ SetRampUnity
  16468.     CMP.W   #127,D0
  16469.     BHI SetRampUnity
  16470.     CMP.W   #64,D0
  16471.     BLO.S   nozmax
  16472.     MOVE.L  #12700,D1
  16473.     DIVU    D0,D1
  16474.     MOVE.W  D1,Vol1
  16475.     MOVE.W  D1,Vol2
  16476.     BRA sru2
  16477. nozmax  MOVE.W  #200,Vol1
  16478.     MOVE.W  #200,Vol2
  16479.     BRA sru2
  16480.  
  16481. Vol1    dc.w    100
  16482. Vol2    dc.w    100
  16483.  
  16484. TuningTone
  16485.     JSR WaitForButtonUp
  16486.     CLR.B   RawKeyCode
  16487.     TST.W   TToneFlag
  16488.     BNE TToneOff
  16489.     MOVE.W  #1,TToneFlag
  16490.     MOVE.W  PattCurPos,D2
  16491.     DIVU    #6,D2
  16492.     ADDQ.W  #1,D2
  16493.     AND.W   #3,D2
  16494.     MOVEQ   #1,D0
  16495.     LSL.W   D2,D0
  16496.     MOVE.W  D0,TToneBit
  16497.     LEA $DFF0A0,A0
  16498.     LSL.W   #4,D2
  16499.     LEA (A0,D2.W),A0
  16500.     LEA PeriodTable(PC),A1
  16501.     MOVE.W  TuneNote,D1
  16502.     LSL.W   #1,D1
  16503.     MOVE.W  (A1,D1.W),D1
  16504.     LEA TToneData,A2
  16505.     MOVE.W  D0,$DFF096 ; DMACON
  16506.     MOVE.L  A2,(A0)
  16507.     MOVE.W  #16,4(A0) ; 32 bytes
  16508.     MOVE.W  D1,6(A0)
  16509.     MOVE.W  TToneVol,8(A0)
  16510.     MOVE.W  DMAWait,D2
  16511. ttowait DBRA    D2,ttowait
  16512.     BSET    #15,D0
  16513.     MOVE.W  D0,$DFF096
  16514.     RTS
  16515.  
  16516. TToneOff
  16517.     CLR.W   TToneFlag
  16518.     MOVE.W  TToneBit(PC),$DFF096
  16519.     RTS
  16520.  
  16521. TToneFlag   dc.w 0
  16522. TToneBit    dc.w 0
  16523.  
  16524. SamplePressed
  16525.     CMP.W   #144,D1
  16526.     BHS.S   spruskp
  16527.     MOVE.W  LoopStartPos(PC),D2
  16528.     BEQ.S   sprusk5
  16529.     SUBQ.W  #3,D2
  16530.     CMP.W   D2,D0
  16531.     BLT.S   sprusk5
  16532.     ADDQ.W  #4,D2
  16533.     CMP.W   D2,D0
  16534.     BLO LoopStartDrag
  16535. sprusk5 MOVE.W  LoopEndPos(PC),D2
  16536.     BEQ.S   spruskp
  16537.     SUBQ.W  #3,D2
  16538.     CMP.W   D2,D0
  16539.     BLT.S   spruskp
  16540.     ADDQ.W  #4,D2
  16541.     CMP.W   D2,D0
  16542.     BLO LoopEndDrag
  16543. spruskp CMP.W   #3,D0
  16544.     BLO Return2
  16545.     CMP.W   #317,D0
  16546.     BHS Return2
  16547.     MOVE.W  D0,LastSamPos
  16548.     BSR InvertRange
  16549.     MOVE.W  LastSamPos(PC),D0
  16550.     MOVE.W  D0,MarkStart
  16551.     MOVE.W  D0,MarkEnd
  16552.     BSR InvertRange
  16553.     BSR MarkToOffset
  16554.     MOVE.L  MarkEndOfs(PC),SamplePos
  16555.     BSR ShowPos
  16556. sprulop BTST    #6,$BFE001
  16557.     BNE spruend
  16558.     MOVE.W  MouseX(PC),D0
  16559.     CMP.W   #3,D0
  16560.     BLO sprusk3
  16561.     CMP.W   #317,D0
  16562.     BHS sprusk2
  16563.     BRA sprusk4
  16564. sprusk2 MOVE.W  #316,D0
  16565.     BRA sprusk4
  16566. sprusk3 MOVEQ   #3,D0
  16567. sprusk4 CMP.W   LastSamPos(PC),D0
  16568.     BEQ sprulop
  16569.     MOVE.W  D0,LastSamPos
  16570.     BSR InvertRange
  16571.     MOVE.W  LastSamPos(PC),MarkEnd
  16572.     BSR InvertRange
  16573.     BSR MarkToOffset
  16574.     MOVE.L  MarkEndOfs(PC),SamplePos
  16575.     BSR ShowPos
  16576.     BRA sprulop
  16577. spruend MOVE.W  MarkStart(PC),D0
  16578.     MOVE.W  MarkEnd(PC),D1
  16579.     CMP.W   D0,D1
  16580.     BHS MarkToOffset
  16581.     MOVE.W  D0,MarkEnd
  16582.     MOVE.W  D1,MarkStart
  16583.     BRA MarkToOffset
  16584.  
  16585. InvertRange
  16586.     MOVE.W  MarkStart(PC),D4
  16587.     BEQ Return2
  16588.     MOVE.W  MarkEnd(PC),D5
  16589.     MOVE.L  GfxBase(PC),A6
  16590.     JSR LVOOwnBlitter(A6)
  16591.     JSR LVOWaitBlit(A6)
  16592. invran3 MOVE.W  D4,D0
  16593.     MOVEQ   #0,D1
  16594.     MOVE.W  D4,D2
  16595.     MOVEQ   #64,D3
  16596.     BSR DrawInvertLine
  16597.     CMP.W   D5,D4
  16598.     BEQ invranx
  16599.     BHI invran2
  16600.     ADDQ.W  #1,D4
  16601.     BRA invran3
  16602. invran2 SUBQ.W  #1,D4
  16603.     BRA invran3
  16604.  
  16605. invranx MOVE.L  GfxBase(PC),A6
  16606.     JSR LVODisownBlitter(A6)
  16607.     RTS
  16608.  
  16609. LoopStartPos    dc.w 0
  16610. LoopEndPos  dc.w 0
  16611.  
  16612. LoopStartDrag
  16613.     CLR.W   DragType
  16614. LopDrgLop
  16615.     MOVE.L  SongDataPtr(PC),A0
  16616.     MOVE.W  InsNum(PC),D0
  16617.     BEQ Return2
  16618.     MULU    #30,D0
  16619.     LEA 12(A0,D0.W),A0
  16620.     MOVE.W  MouseX(PC),D0
  16621. lsdlop1 BTST    #6,$BFE001
  16622.     BNE lsdexit
  16623.     MOVE.W  MouseX(PC),D1
  16624.     CMP.W   D0,D1
  16625.     BEQ.S   lsdlop1
  16626.     SUB.W   DragType,D1
  16627.     BPL.S   lsdmsk1
  16628.     MOVEQ   #0,D1
  16629. lsdmsk1 CMP.W   #314,D1
  16630.     BLO.S   lsdmsk2
  16631.     MOVE.W  #314,D1
  16632. lsdmsk2 MOVE.L  SamDisplay(PC),D0
  16633.     MULU    D0,D1
  16634.     DIVU    #314,D1
  16635.     MOVE.L  SamOffset(PC),D0
  16636.     ADD.W   D1,D0    ; new repeat
  16637.     BCLR    #0,D0
  16638.     MOVEQ   #0,D1
  16639.     MOVE.W  4(A0),D1 ; old repeat
  16640.     ADD.W   D1,D1
  16641.     TST.W   DragType
  16642.     BNE.S   drgrepl
  16643.     MOVE.W  D1,D3
  16644.     SUB.W   D1,D0    ; offset
  16645.     ADD.W   D0,D1
  16646.     MOVE.W  6(A0),D2
  16647.     ADD.W   D2,D2
  16648.     ADD.W   D2,D3
  16649.     SUBQ.W  #2,D3
  16650.     SUB.W   D0,D2
  16651.     CMP.W   D3,D1
  16652.     BLS.S   lsdok
  16653.     MOVE.W  D3,D1
  16654.     MOVEQ   #2,D2
  16655. lsdok   LSR.W   #1,D1
  16656.     MOVE.W  D1,4(A0)
  16657.     LSR.W   #1,D2
  16658.     MOVE.W  D2,6(A0)
  16659.     BSR.S   lsdexit
  16660.     BRA LopDrgLop
  16661. lsdexit BSR ShowSampleInfo
  16662.     BSR UpdateRepeats
  16663.     BRA SetLoopSprites2
  16664.  
  16665. LoopEndDrag
  16666.     MOVE.W  #3,DragType
  16667.     BRA LopDrgLop
  16668.  
  16669. drgrepl MOVE.L  D0,D2 ; repend
  16670.     SUB.L   D1,D2 ; subtract repstart
  16671.     CMP.L   #2,D2
  16672.     BGT.S   ledskp1
  16673.     MOVEQ   #2,D2
  16674.     BRA.S   lsdok
  16675.  
  16676. ledskp1 MOVE.W  D1,D0 ; repeat
  16677.     ADD.W   D2,D0 ; + replen
  16678.     MOVE.W  (A0),D3
  16679.     ADD.W   D3,D3
  16680.     CMP.W   D3,D0
  16681.     BLS.S   lsdok
  16682.     SUB.W   D1,D3
  16683.     MOVE.W  D3,D2
  16684.     BRA.S   lsdok
  16685.  
  16686. DragType dc.w 0
  16687.  
  16688. SamDragBar
  16689.     CMP.W   #4,D0
  16690.     BLO Return2
  16691.     CMP.W   #316,D0
  16692.     BHS Return2
  16693.     CMP.W   DragStart(PC),D0
  16694.     BLO.S   draglo
  16695.     CMP.W   DragEnd(PC),D0
  16696.     BHI.S   draghi
  16697.     MOVE.W  MouseX(PC),D0
  16698.     MOVE.W  D0,D1
  16699.     SUB.W   DragStart(PC),D1
  16700.     MOVE.W  D1,SaveMX
  16701. sdrlop1 BTST    #6,$BFE001
  16702.     BNE Return2
  16703.     MOVE.W  MouseX(PC),D1
  16704.     CMP.W   D0,D1
  16705.     BEQ.S   sdrlop1
  16706.     SUB.W   SaveMX(PC),D0
  16707.     SUBQ.W  #4,D0
  16708.     BPL.S   sdrskp1
  16709.     MOVEQ   #0,D0
  16710. sdrskp1 MOVE.L  SamLength(PC),D1
  16711.     BEQ Return2
  16712.     MULU    D1,D0
  16713.     DIVU    #311,D0
  16714.     AND.L   #$FFFF,D0
  16715.     BSR dragchk
  16716.     MOVE.W  MouseX(PC),D0
  16717.     BRA.S   sdrlop1
  16718.  
  16719. draglo  MOVE.L  SamOffset(PC),D0
  16720.     SUB.L   SamDisplay(PC),D0
  16721.     BPL.S   draglo2
  16722.     MOVEQ   #0,D0
  16723. draglo2 CMP.L   SamOffset(PC),D0
  16724.     BEQ Return2
  16725.     MOVE.L  D0,SamOffset
  16726.     BRA DisplaySample
  16727.  
  16728. draghi  MOVE.L  SamOffset(PC),D0
  16729.     ADD.L   SamDisplay(PC),D0
  16730. dragchk MOVE.L  D0,D1
  16731.     ADD.L   SamDisplay(PC),D1
  16732.     CMP.L   SamLength(PC),D1
  16733.     BLS.S   draglo2
  16734.     MOVE.L  SamLength(PC),D0
  16735.     SUB.L   SamDisplay(PC),D0
  16736.     BRA.S   draglo2
  16737.  
  16738. SaveMX  dc.w    0
  16739.  
  16740. ;----
  16741.  
  16742. MarkToOffset
  16743.     MOVE.L  SamDisplay(PC),D0
  16744.     MOVE.W  MarkStart(PC),D1
  16745.     BEQ Return2
  16746.     SUBQ.W  #3,D1
  16747.     MULU    D0,D1
  16748.     DIVU    #314,D1
  16749.     AND.L   #$FFFF,D1
  16750.     ADD.L   SamOffset(PC),D1
  16751.     MOVE.L  D1,MarkStartOfs
  16752.     MOVE.W  MarkEnd(PC),D1
  16753.     CMP.W   #316,D1
  16754.     BLO.S   mtosome
  16755.     MOVE.L  SamOffset(PC),D1
  16756.     ADD.L   D0,D1
  16757.     BRA.S   mtoexit
  16758. mtosome SUBQ.W  #3,D1
  16759.     MULU    D0,D1
  16760.     DIVU    #314,D1
  16761.     AND.L   #$FFFF,D1
  16762.     ADD.L   SamOffset(PC),D1
  16763. mtoexit MOVE.L  D1,MarkEndOfs
  16764.     RTS
  16765.  
  16766. OffsetToMark
  16767.     MOVE.L  MarkStartOfs(PC),D0
  16768.     BMI.S   otmout
  16769.     MOVE.W  #3,MarkStart
  16770.     SUB.L   SamOffset(PC),D0
  16771.     BMI.S   otmskip ; set to start if before offset
  16772.     MULU    #314,D0
  16773.     MOVE.L  SamDisplay(PC),D1
  16774.     BEQ.S   otmskip
  16775.     DIVU    D1,D0
  16776.     CMP.W   #314,D0
  16777.     BHI.S   otmout  ; if start after display
  16778.     ADD.W   D0,MarkStart
  16779. otmskip MOVE.W  #3,MarkEnd
  16780.     MOVE.L  MarkEndOfs(PC),D0
  16781.     SUB.L   SamOffset(PC),D0
  16782.     BMI.S   otmout  ; if end before offset
  16783.     MULU    #314,D0
  16784.     MOVE.L  SamDisplay(PC),D1
  16785.     BEQ Return2
  16786.     DIVU    D1,D0
  16787.     CMP.W   #313,D0
  16788.     BLS.S   otmok
  16789.     MOVE.W  #313,D0 ; set to end if after display
  16790. otmok   ADD.W   D0,MarkEnd
  16791.     RTS
  16792.  
  16793. otmout  CLR.W   MarkStart
  16794.     RTS
  16795.  
  16796. SamScrEnable    dc.w    0
  16797. SamMemPtr   dc.l    0
  16798. SamMemSize  dc.l    0
  16799. LastSamPos  dc.w    0
  16800. MarkStart   dc.w    0
  16801. MarkEnd     dc.w    0
  16802. MarkStartOfs    dc.l    0
  16803. MarkEndOfs  dc.l    0
  16804.  
  16805. ;---- Sample graphing stuff ----
  16806.  
  16807. DisplaySample
  16808.     TST.W   SamScrEnable
  16809.     BEQ Return2
  16810.     BSR rdsdoit
  16811.     TST.L   MarkStartOfs
  16812.     BMI Return2
  16813.     BSR OffsetToMark
  16814.     BRA InvertRange
  16815.  
  16816. RedrawSample
  16817.     TST.W   SamScrEnable
  16818.     BEQ Return2
  16819.     MOVEQ   #-1,D0
  16820.     MOVE.L  D0,MarkStartOfs
  16821.     CLR.W   MarkStart
  16822.     MOVE.W  InsNum(PC),D0
  16823.     BEQ rdsblnk
  16824.     LEA SampleStarts(PC),A1
  16825.     SUBQ.W  #1,D0
  16826.     LSL.W   #2,D0
  16827.     MOVE.L  (A1,D0.W),SamStart
  16828.     BEQ rdsblnk
  16829.     MOVE.L  124(A1,D0.W),D1
  16830.     BEQ rdsblnk
  16831.     MOVE.L  D1,SamLength
  16832.     CLR.L   SamOffset
  16833.     MOVE.L  D1,SamDisplay
  16834.     BRA rdsdoit
  16835. rdsblnk LEA BlankSample,A0
  16836.     MOVE.L  A0,SamStart
  16837.     MOVE.L  #314,SamLength
  16838.     CLR.L   SamOffset
  16839.     MOVE.L  #314,SamDisplay
  16840. rdsdoit MOVE.L  GfxBase(PC),A6
  16841.     JSR LVOOwnBlitter(A6)
  16842.     JSR LVOWaitBlit(A6)
  16843.     BSR ClearSamArea
  16844.     MOVE.L  SamStart(PC),A0
  16845.     MOVEQ   #0,D4
  16846.     MOVE.L  SamOffset(PC),D5
  16847.     MOVE.L  SamDisplay(PC),D6
  16848.     MOVE.L  D5,D7
  16849.     MOVE.L  A0,D0
  16850.     ADD.L   D5,D0
  16851.     MOVE.L  D0,SamDrawStart
  16852.     ADD.L   D6,D0
  16853.     MOVE.L  D0,SamDrawEnd
  16854. rdsloop MOVE.W  D4,D0
  16855.     ADDQ.W  #3,D0
  16856.     MOVEQ   #127,D1
  16857.     SUB.B   (A0,D7.L),D1
  16858.     LSR.W   #2,D1
  16859.     TST.W   D4
  16860.     BNE rdsdraw
  16861.     BSR MoveTo
  16862.     BRA rdsupdt
  16863. rdsdraw BSR DrawTo
  16864. rdsupdt ADDQ.W  #1,D4
  16865.     MOVE.L  D4,D7
  16866.     MULU    D6,D7
  16867.     DIVU    #314,D7
  16868.     AND.L   #$FFFF,D7
  16869.     ADD.L   D5,D7
  16870.     CMP.W   #314,D4
  16871.     BLO rdsloop
  16872.  
  16873.     MOVE.L  GfxBase(PC),A6
  16874.     JSR LVODisownBlitter(A6)
  16875.     BSR.S   SetDragBar
  16876.     MOVE.L  SamDisplay(PC),D0
  16877.     LEA BlankSample,A0
  16878.     CMP.L   SamStart,A0
  16879.     BNE.S   rdsslwo
  16880.     MOVEQ   #0,D0
  16881. rdsslwo MOVE.W  #215*40+33,TextOffset
  16882.     BSR Print6DecDigits
  16883.     BRA SetLoopSprites
  16884.  
  16885. SamStart    dc.l    0
  16886. SamLength   dc.l    0
  16887. SamOffset   dc.l    0
  16888. SamDisplay  dc.l    0
  16889. SavSamIns   dc.w    0
  16890.  
  16891. SetDragBar
  16892.     MOVE.W  #4*10-1,D0
  16893.     MOVE.L  TextBplPtr,A0
  16894.     LEA $15B8+2720(A0),A0
  16895.     MOVEQ   #0,D1
  16896. sdblop2 MOVE.L  D1,(A0)+
  16897.     DBRA    D0,sdblop2
  16898.     MOVE.L  SamLength(PC),D0
  16899.     BEQ Return2
  16900.     MOVE.L  SamOffset(PC),D4
  16901.     MOVE.L  SamDisplay(PC),D5
  16902.     CMP.L   D0,D5
  16903.     BEQ Return2
  16904.     ADD.L   D4,D5
  16905.     MULU    #311,D4
  16906.     DIVU    D0,D4
  16907.     ADDQ.W  #4,D4
  16908.     MOVE.W  D4,DragStart
  16909.     MULU    #311,D5
  16910.     DIVU    D0,D5
  16911.     ADDQ.W  #5,D5
  16912.     MOVE.W  D5,DragEnd
  16913.     MOVE.L  GfxBase(PC),A6
  16914.     JSR LVOOwnBlitter(A6)
  16915.     JSR LVOWaitBlit(A6)
  16916.     MOVEQ   #68,D6
  16917.     MOVEQ   #3,D7
  16918. sdbloop MOVE.W  D4,D0
  16919.     MOVE.L  D6,D1
  16920.     MOVE.W  D5,D2
  16921.     MOVE.L  D6,D3
  16922.     BSR.S   DrawLine
  16923.     ADDQ.L  #1,D6
  16924.     DBRA    D7,sdbloop
  16925.     MOVE.L  GfxBase(PC),A6
  16926.     JSR LVODisownBlitter(A6)
  16927.     RTS
  16928.  
  16929. DragStart   dc.w    0
  16930. DragEnd     dc.w    0
  16931.  
  16932. ;---- Line Routine ----
  16933.  
  16934. DrawInvertLine
  16935.     MOVE.B  #$48,MinTerm
  16936.     BSR.S   DrawLine
  16937.     MOVE.B  #$C8,Minterm
  16938.     RTS
  16939.  
  16940. MoveTo  MOVE.W  D0,PenX
  16941.     MOVE.W  D1,PenY
  16942.     RTS
  16943.  
  16944. DrawTo  MOVE.W  PenX(PC),D2
  16945.     MOVE.W  PenY(PC),D3
  16946.     MOVE.W  D0,PenX
  16947.     MOVE.W  D1,PenY
  16948. DrawLine
  16949.     MOVEM.L D4-D7,-(SP)
  16950.     MOVEQ   #0,D4
  16951.     SUB.W   D1,D3
  16952.     BGE.S   dypos
  16953.     NEG.W   D3
  16954.     BRA.S   dyneg
  16955. dypos   BSET    #0,D4
  16956. dyneg   SUB.W   D0,D2
  16957.     BGE.S   dxpos
  16958.     NEG.W   D2
  16959.     BRA.S   dxneg
  16960. dxpos   BSET    #1,D4
  16961. dxneg   MOVE.W  D2,D5
  16962.     SUB.W   D3,D5
  16963.     BGE.S   dxdypos
  16964.     EXG D2,D3
  16965.     BRA.S   dxdyneg
  16966. dxdypos BSET    #2,D4
  16967. dxdyneg MOVEQ   #0,D5
  16968.     ROR.W   #4,D0
  16969.     OR.W    #$0B00,D0
  16970.     MOVE.B  D0,D5
  16971.     MOVE.B  MinTerm(PC),D0
  16972.     LSL.W   #1,D5
  16973.     MULS    #ScrWidth,D1
  16974.     ADD.W   D5,D1
  16975.     ADD.L   LineScreen(PC),D1
  16976. blitrdy BTST    #14,$DFF002 ; DMACONR
  16977.     BNE.S   blitrdy
  16978.     MOVE.W  $DFF01C,-(SP)
  16979.     BSET    #7,(SP)
  16980.     MOVE.W  #$7FFF,$DFF09A
  16981.     MOVE.B  Octants(PC,D4),D4
  16982.     ADD.L   D3,D3
  16983.     MOVE.W  D3,$DFF062 ; BLTBMOD
  16984.     SUB.W   D2,D3
  16985.     BGE.S   dldspos
  16986.     OR.B    #$40,D4
  16987. dldspos MOVE.L  D3,$DFF050 ; BLTAPTR
  16988.     SUB.W   D2,D3
  16989.     MOVE.W  D3,$DFF064 ; BLTAMOD
  16990.     MOVE.W  D4,$DFF042 ; BLTCON1
  16991.     MOVE.W  D0,$DFF040 ; BLTCON0
  16992.     MOVE.L  D1,$DFF048 ; BLTCPTR
  16993.     MOVE.L  D1,$DFF054 ; BLTDPTR
  16994.     MOVE.W  #ScrWidth,$DFF060 ; BLTCMOD
  16995.     MOVE.W  #ScrWidth,$DFF066 ; BLTDMOD
  16996.     MOVE.W  #$8000,$DFF074 ; BLTADAT
  16997.     MOVE.W  #$FFFF,$DFF044 ; BLTAFWM
  16998.     MOVE.W  LinMask(PC),$DFF072 ; BLTBDAT
  16999.     ASL.W   #6,D2
  17000.     ADD.W   #2,D2
  17001.     MOVE.W  D2,$DFF058 ; BLTSIZE
  17002.     MOVE.W  (SP)+,$DFF09A
  17003.     MOVEM.L (SP)+,D4-D7
  17004.     RTS
  17005.  
  17006. ScrWidth = 40
  17007.  
  17008. Octants dc.b    3*4+1,2*4+1,1*4+1,0*4+1,7*4+1,5*4+1,6*4+1,4*4+1
  17009. LinMask dc.w    $FFFF
  17010. MinTerm dc.b    $C8 ;was $CA
  17011.     dc.b    0   ;free 0
  17012. PenX    dc.w    0
  17013. PenY    dc.w    0
  17014. LineScreen dc.l 0
  17015.  
  17016. ;---- Loop Sprites ----
  17017.  
  17018. SetLoopSprites
  17019.     MOVEQ   #-1,D6
  17020.     MOVEQ   #-1,D7
  17021.     MOVE.W  InsNum(PC),D0
  17022.     BEQ slsset
  17023.     MULU    #30,D0
  17024.     MOVE.L  SongDataPtr(PC),A0
  17025.     LEA 12(A0,D0.W),A0
  17026. SetLoopSprites2
  17027.     TST.W   SamScrEnable
  17028.     BEQ Return2
  17029.     CLR.W   LoopOnOffFlag
  17030.     MOVEQ   #-1,D6
  17031.     MOVEQ   #-1,D7
  17032.     MOVEQ   #0,D0
  17033.     MOVE.W  4(A0),D0
  17034.     ADD.L   D0,D0
  17035.     MOVEQ   #0,D1
  17036.     MOVE.W  6(A0),D1
  17037.     ADD.L   D1,D1
  17038.     MOVE.L  D0,D5
  17039.     ADD.L   D1,D5
  17040.     CMP.W   #2,D5
  17041.     BLS.S   slsset
  17042.     MOVE.W  #1,LoopOnOffFlag
  17043.     MOVE.L  SamOffset(PC),D2
  17044.     MOVE.L  SamDisplay(PC),D3
  17045.     MOVE.L  D2,D4
  17046.     ADD.L   D3,D4
  17047.     CMP.L   D2,D0
  17048.     BLO.S   1$
  17049.     CMP.L   D4,D0
  17050.     BHI.S   1$
  17051.     SUB.L   D2,D0
  17052.     MULU    #314,D0
  17053.     DIVU    D3,D0
  17054.     ADDQ.W  #3,D0
  17055.     MOVE.W  D0,D6
  17056. 1CMP.L   D2,D5
  17057.     BLO.S   slsset
  17058.     CMP.L   D4,D5
  17059.     BHI.S   slsset
  17060.     SUB.L   D2,D5
  17061.     MULU    #314,D5
  17062.     DIVU    D3,D5
  17063.     ADDQ.W  #6,D5
  17064.     MOVE.W  D5,D7
  17065. slsset  MOVE.W  #139,D1
  17066.     MOVE.W  D6,D0
  17067.     BPL.S   1$
  17068.     MOVEQ   #0,D0
  17069.     MOVE.W  #270,D1
  17070. 1$  MOVEQ   #64,D2
  17071.     LEA LoopSpriteData1,A0
  17072.     MOVE.W  D0,LoopStartPos
  17073.     BSR SetSpritePos
  17074.     MOVE.W  #139,D1
  17075.     MOVE.W  D7,D0
  17076.     BPL.S   2$
  17077.     MOVEQ   #0,D0
  17078.     MOVE.W  #270,D1
  17079. 2$  MOVEQ   #64,D2
  17080.     LEA LoopSpriteData2,A0
  17081.     MOVE.W  D0,LoopEndPos
  17082.     BSR SetSpritePos
  17083.     BRA ShowLoopToggle
  17084.  
  17085. ;---- Playroutine ----
  17086.  
  17087. audchan1temp    dc.l    0,0,0,0,0,$00010000,0,  0,0,0,0
  17088. audchan2temp    dc.l    0,0,0,0,0,$00020000,0,  0,0,0,0
  17089. audchan3temp    dc.l    0,0,0,0,0,$00040000,0,  0,0,0,0
  17090. audchan4temp    dc.l    0,0,0,0,0,$00080000,0,  0,0,0,0
  17091.  
  17092. IntMusic
  17093.     MOVEM.L D0-D7/A0-A6,-(SP)
  17094.     MOVE.L  RunMode(PC),D0
  17095.     BEQ NoNewPositionYet
  17096.     CMP.L   #'patt',D0
  17097.     BEQ.S   1$
  17098.     MOVE.L  SongPosition(PC),CurrPos
  17099. 1$  MOVE.L  SongDataPtr(PC),A0
  17100.     MOVE.B  sd_numofpatt(A0),SongNumOfPatt+1
  17101.     TST.W   StepPlayEnable
  17102.     BNE.S   2$
  17103.     ADDQ.L  #1,Counter
  17104.     MOVE.L  Counter(PC),D0
  17105.     CMP.L   CurrSpeed(PC),D0
  17106.     BLO.S   NoNewNote
  17107. 2CLR.L   Counter
  17108.     TST.B   PattDelayTime2
  17109.     BEQ.S   GetNewNote
  17110.     BSR.S   NoNewAllChannels
  17111.     BRA dskip
  17112.  
  17113. NoNewNote
  17114.     BSR.S   NoNewAllChannels
  17115.     BRA NoNewPositionYet
  17116.  
  17117. NoNewAllChannels
  17118.     LEA audchan1toggle,A4
  17119.     LEA audchan1temp(PC),A6
  17120.     LEA $DFF0A0,A5
  17121.     BSR CheckEffects
  17122.     LEA audchan2toggle,A4
  17123.     LEA audchan2temp(PC),A6
  17124.     LEA $DFF0B0,A5
  17125.     BSR CheckEffects
  17126.     LEA audchan3toggle,A4
  17127.     LEA audchan3temp(PC),A6
  17128.     LEA $DFF0C0,A5
  17129.     BSR CheckEffects
  17130.     LEA audchan4toggle,A4
  17131.     LEA audchan4temp(PC),A6
  17132.     LEA $DFF0D0,A5
  17133.     BRA CheckEffects
  17134.  
  17135.  
  17136. GetNewNote
  17137.     LEA 12(A0),A3
  17138.     LEA sd_pattpos(A0),A2
  17139.     LEA sd_patterndata(A0),A0
  17140.     MOVEQ   #0,D1
  17141.     MOVE.L  SongPosition(PC),D0
  17142.     MOVE.B  (A2,D0.W),D1
  17143.     CMP.L   #'patt',PunMode
  17144.     BNE.S   1$
  17145.     MOVE.L  PatterlLumber(PC),D1
  17146. 1ASL.L   #8,D1
  17147.  
  17148.     ASL.L   #2,D1
  17149.     ADD.L   PatternPosition(PC),D1
  17150.     MOVE.L  D1,PatternPtr
  17151.     CLR.W   DMACONtemp
  17152.     LEA audchan1toggle,A4
  17153.     LEA $DFF0A0,A5
  17154.     LEA audchan1temp(PC),A6
  17155.     MOVEQ   #1,D2
  17156.     BSR PlayVoice
  17157.     MOVEQ   #0,D0
  17158.     MOVE.B  n_volume(A6),D0
  17159.     MOVE.W  D0,8(A5)
  17160.     LEA audchan2toggle,A4
  17161.     LEA $DFF0B0,A5
  17162.     LEA audchan2temp(PC),A6
  17163.     MOVEQ   #2,D2
  17164.     BSR.S   PlayVoice
  17165.     MOVEQ   #0,D0
  17166.     MOVE.B  n_volume(A6),D0
  17167.     MOVE.W  D0,8(A5)
  17168.     LEA audchan3toggle,A4
  17169.     LEA $DFF0C0,A5
  17170.     LEA audchan3temp(PC),A6
  17171.     MOVEQ   #3,D2
  17172.     BSR.S   PlayVoice
  17173.     MOVEQ   #0,D0
  17174.     MOVE.B  n_volume(A6),D0
  17175.     MOVE.W  D0,8(A5)
  17176.     LEA audchan4toggle,A4
  17177.     LEA $DFF0D0,A5
  17178.     LEA audchan4temp(PC),A6
  17179.     MOVEQ   #4,D2
  17180.     BSR.S   PlayVoice
  17181.     MOVEQ   #0,D0
  17182.     MOVE.B  n_volume(A6),D0
  17183.     MOVE.W  D0,8(A5)
  17184.     BRA SetDMA
  17185.  
  17186. CheckMetronome
  17187.     CMP.B   MetroChannel,D2
  17188.     BNE Return2
  17189.     MOVE.B  MetroSpeed,D2
  17190.     BEQ Return2
  17191.     MOVE.L  PatternPosition,D3
  17192.     LSR.L   #4,D3
  17193.     DIVU    D2,D3
  17194.     SWAP    D3
  17195.     TST.W   D3
  17196.     BNE Return2
  17197.     AND.L   #$00000FFF,(A6)
  17198.     OR.L    #$10D6F000,(A6) ; Play sample $1F at period $0D6 (214)
  17199.     RTS
  17200.  
  17201. PlayVoice
  17202.     TST.L   (A6)
  17203.     BNE.S   plvskip
  17204.     BSR PerNop
  17205. plvskip MOVE.L  (A0,D1.L),(A6)  ; Read note from pattern
  17206.     BSR.S   CheckMetronome
  17207.     ADDQ.L  #4,D1
  17208.     MOVEQ   #0,D2
  17209.     MOVE.B  n_cmd(A6),D2    ; Get lower 4 bits of instrument
  17210.     AND.B   #$F0,D2
  17211.     LSR.B   #4,D2
  17212.     MOVE.B  (A6),D0     ; Get higher 4 bits of instrument
  17213.     AND.B   #$F0,D0
  17214.     OR.B    D0,D2
  17215.     TST.B   D2
  17216.     BEQ SetRegisters    ; Instrument was zero
  17217.     MOVEQ   #0,D3
  17218.     LEA SampleStarts(PC),A1
  17219.     MOVE    D2,D4
  17220.     MOVE.B  D2,n_samplenum(A6)
  17221.     SUBQ.L  #1,D2
  17222.     LSL.L   #2,D2
  17223.     MULU    #30,D4
  17224.     MOVE.L  (A1,D2.L),n_start(A6)
  17225.     MOVE.W  (A3,D4.L),n_length(A6)
  17226.     MOVE.W  (A3,D4.L),n_reallength(A6)
  17227.     MOVE.B  2(A3,D4.L),n_finetune(A6)
  17228.     MOVE.B  3(A3,D4.L),n_volume(A6)
  17229.     MOVE.W  4(A3,D4.L),D3 ; Get repeat
  17230.     TST.W   D3
  17231.     BEQ.S   NoLoop
  17232.     MOVE.L  n_start(A6),D2  ; Get start
  17233.     ASL.W   #1,D3
  17234.     ADD.L   D3,D2       ; Add repeat
  17235.     MOVE.L  D2,n_loopstart(A6)
  17236.     MOVE.L  D2,n_wavestart(A6)
  17237.     MOVE.W  4(A3,D4.L),D0   ; Get repeat
  17238.     ADD.W   6(A3,D4.L),D0   ; Add replen
  17239.     MOVE.W  D0,n_length(A6)
  17240.     MOVE.W  6(A3,D4.L),n_replen(A6) ; Save replen
  17241.     BRA.S   SetRegisters
  17242.  
  17243. NoLoop  MOVE.L  n_start(A6),D2
  17244.     ADD.L   D3,D2
  17245.     MOVE.L  D2,n_loopstart(A6)
  17246.     MOVE.L  D2,n_wavestart(A6)
  17247.     MOVE.W  6(A3,D4.L),n_replen(A6) ; Save replen
  17248. SetRegisters
  17249.     MOVE.W  (A6),D0
  17250.     AND.W   #$0FFF,D0
  17251.     BEQ CheckMoreEffects    ; If no note
  17252.     MOVE.W  2(A6),D0
  17253.     AND.W   #$0FF0,D0
  17254.     CMP.W   #$0E50,D0 ; finetune
  17255.     BEQ.S   DoSetFineTune
  17256.     MOVE.B  2(A6),D0
  17257.     AND.B   #$0F,D0
  17258.     CMP.B   #3,D0   ; TonePortamento
  17259.     BEQ.S   ChkTonePorta
  17260.     CMP.B   #5,D0   ; TonePortamento + VolSlide
  17261.     BEQ.S   ChkTonePorta
  17262.     CMP.B   #9,D0   ; Sample Offset
  17263.     BNE.S   SetPeriod
  17264.     BSR CheckMoreEffects
  17265.     BRA.S   SetPeriod
  17266.  
  17267. DoSetFineTune
  17268.     BSR SetFineTune
  17269.     BRA.S   SetPeriod
  17270.  
  17271. ChkTonePorta
  17272.     BSR SetTonePorta
  17273.     BRA CheckMoreEffects
  17274.  
  17275. SetPeriod
  17276.     MOVEM.L D0-D1/A0-A1,-(SP)
  17277.     MOVE.W  (A6),D1
  17278.     AND.W   #$0FFF,D1
  17279.     LEA PeriodTable(PC),A1
  17280.     MOVEQ   #0,D0
  17281.     MOVEQ   #$24,D7
  17282. ftuloop CMP.W   (A1,D0.W),D1
  17283.     BHS ftufound
  17284.     ADDQ.L  #2,D0
  17285.     DBRA    D7,ftuloop
  17286. ftufound
  17287.     MOVEQ   #0,D1
  17288.     MOVE.B  n_finetune(A6),D1
  17289.     MULU    #37*2,D1
  17290.     ADD.L   D1,A1
  17291.     MOVE.W  (A1,D0.W),n_period(A6)
  17292.     MOVEM.L (SP)+,D0-D1/A0-A1
  17293.  
  17294.     MOVE.W  2(A6),D0
  17295.     AND.W   #$0FF0,D0
  17296.     CMP.W   #$0ED0,D0
  17297.     BEQ CheckMoreEffects
  17298.  
  17299.     MOVE.W  n_dmabit(A6),$DFF096
  17300.     BTST    #2,n_wavecontrol(A6)
  17301.     BNE vibnoc
  17302.     CLR.B   n_vibratopos(A6)
  17303. vibnoc  BTST    #6,n_wavecontrol(A6)
  17304.     BNE trenoc
  17305.     CLR.B   n_tremolopos(A6)
  17306. trenoc  MOVE.W  n_length(A6),4(A5)  ; Set length
  17307.     MOVE.L  n_start(A6),(A5)    ; Set start
  17308.     BNE sdmaskp
  17309.     CLR.L   n_loopstart(A6)
  17310.     MOVEQ   #1,D0
  17311.     MOVE.W  D0,4(A5)
  17312.     MOVE.W  D0,n_replen(A6)
  17313. sdmaskp MOVE.W  n_period(A6),D0
  17314.     MOVE.W  D0,6(A5)        ; Set period
  17315.     JSR SpectrumAnalyzer    ; Do the analyzer
  17316.     ST  n_trigger(A6)
  17317.     MOVE.W  n_dmabit(A6),D0
  17318.     OR.W    D0,DMACONtemp
  17319.     BRA CheckMoreEffects
  17320.  
  17321. SetDMA  MOVE.W  DMAWait,D0
  17322. WaitDMA DBRA    D0,WaitDMA
  17323.     MOVE.W  DMACONtemp,D0
  17324.     AND.W   ActiveChannels,D0
  17325.     OR.W    #$8000,D0
  17326.     MOVE.W  D0,$DFF096
  17327.     MOVE.W  DMAWait,D0
  17328. WaitDMA2
  17329.     DBRA    D0,WaitDMA2
  17330.     LEA $DFF000,A5
  17331.     LEA audchan4temp(PC),A6
  17332.     MOVE.L  n_loopstart(A6),$D0(A5)
  17333.     MOVE.W  n_replen(A6),$D4(A5)
  17334.     LEA audchan3temp(PC),A6
  17335.     MOVE.L  n_loopstart(A6),$C0(A5)
  17336.     MOVE.W  n_replen(A6),$C4(A5)
  17337.     LEA audchan2temp(PC),A6
  17338.     MOVE.L  n_loopstart(A6),$B0(A5)
  17339.     MOVE.W  n_replen(A6),$B4(A5)
  17340.     LEA audchan1temp(PC),A6
  17341.     MOVE.L  n_loopstart(A6),$A0(A5)
  17342.     MOVE.W  n_replen(A6),$A4(A5)
  17343.  
  17344. dskip   TST.L   RunMode
  17345.     BEQ dskipx
  17346.     BSR SetPatternPos
  17347. dskipx  MOVE.L  PatternPosition(PC),D0
  17348.     LSR.L   #4,D0
  17349.     MOVE.W  D0,ScrPattPos
  17350.     ADD.L   #16,PatternPosition
  17351.     MOVE.B  PattDelayTime,D0
  17352.     BEQ dskpc
  17353.     MOVE.B  D0,PattDelayTime2
  17354.     CLR.B   PattDelayTime
  17355. dskpc   TST.B   PattDelayTime2
  17356.     BEQ dskpa
  17357.     SUBQ.B  #1,PattDelayTime2
  17358.     BEQ dskpa
  17359.     SUB.L   #16,PatternPosition
  17360. dskpa   TST.B   PBreakFlag
  17361.     BEQ nnpysk
  17362.     SF  PBreakFlag
  17363.     MOVEQ   #0,D0
  17364.     MOVE.B  PBreakPosition(PC),D0
  17365.     LSL.W   #4,D0
  17366.     MOVE.L  D0,PatternPosition
  17367.     CLR.B   PBreakPosition
  17368. nnpysk  TST.W   StepPlayEnable
  17369.     BEQ nnpysk2
  17370.     BSR DoStopIt
  17371.     CLR.W   StepPlayEnable
  17372.     MOVE.L  PatternPosition(PC),D0
  17373.     LSR.L   #4,D0
  17374.     AND.W   #63,D0
  17375.     MOVE.W  D0,ScrPattPos
  17376. nnpysk2 CMP.L   #1024,PatternPosition
  17377.     BNE NoNewPositionYet
  17378. NextPosition   
  17379.     MOVEQ   #0,D0
  17380.     MOVE.B  PBreakPosition(PC),D0
  17381.     LSL.W   #4,D0
  17382.     MOVE.L  D0,PatternPosition
  17383.     CLR.B   PBreakPosition
  17384.     CLR.B   PosJumpAssert
  17385.     CMP.L   #'patp',RunMode
  17386.     BNE NoNewPositionYet
  17387.     ADDQ.L  #1,SongPosition
  17388.     AND.L   #$7F,SongPosition
  17389.     MOVE.L  SongPosition(PC),D1
  17390.     MOVE.L  SongDataPtr(PC),A0
  17391.     CMP.B   sd_numofpatt(A0),D1
  17392.     BLO NoNewPositionYet
  17393.     CLR.L   SongPosition
  17394.  
  17395.     TST.W   StepPlayEnable
  17396.     BEQ NoNewPositionYet
  17397.     BSR DoStopIt
  17398.     CLR.W   StepPlayEnable
  17399.     MOVE.L  PatternPosition(PC),D0
  17400.     LSR.L   #4,D0
  17401.     MOVE.W  D0,ScrPattPos
  17402.  
  17403. NoNewPositionYet
  17404.     TST.B   PosJumpAssert
  17405.     BNE NextPosition
  17406.     MOVEM.L (SP)+,D0-D7/A0-A6
  17407.     RTS
  17408.  
  17409. CheckEffects
  17410.     TST.W   (A4)
  17411.     BEQ Return2
  17412.     BSR chkefx2
  17413.     MOVEQ   #0,D0
  17414.     MOVE.B  n_volume(A6),D0
  17415.     MOVE.W  D0,8(A5)
  17416.     RTS
  17417.  
  17418. chkefx2 BSR UpdateFunk
  17419.     MOVE.W  n_cmd(A6),D0
  17420.     AND.W   #$0FFF,D0
  17421.     BEQ Return2
  17422.     MOVE.B  n_cmd(A6),D0
  17423.     AND.B   #$0F,D0
  17424.     TST.B   D0
  17425.     BEQ Arpeggio
  17426.     CMP.B   #1,D0
  17427.     BEQ PortaUp
  17428.     CMP.B   #2,D0
  17429.     BEQ PortaDown
  17430.     CMP.B   #3,D0
  17431.     BEQ TonePortamento
  17432.     CMP.B   #4,D0
  17433.     BEQ Vibrato
  17434.     CMP.B   #5,D0
  17435.     BEQ TonePlusVolSlide
  17436.     CMP.B   #6,D0
  17437.     BEQ VibratoPlusVolSlide
  17438.     CMP.B   #$E,D0
  17439.     BEQ E_Commands
  17440. SetBack MOVE.W  n_period(A6),6(A5)
  17441.     CMP.B   #7,D0
  17442.     BEQ Tremolo
  17443.     CMP.B   #$A,D0
  17444.     BEQ VolumeSlide
  17445. Return2 RTS
  17446.  
  17447. PerNop  MOVE.W  n_period(A6),6(A5)
  17448.     RTS
  17449.  
  17450. Arpeggio
  17451.     MOVEQ   #0,D0
  17452.     MOVE.L  Counter(PC),D0
  17453.     DIVS    #3,D0
  17454.     SWAP    D0
  17455.     CMP.W   #1,D0
  17456.     BEQ Arpeggio1
  17457.     CMP.W   #2,D0
  17458.     BEQ Arpeggio2
  17459. Arpeggio0
  17460.     MOVE.W  n_period(A6),D2
  17461.     BRA ArpeggioSet
  17462.  
  17463. Arpeggio1
  17464.     MOVEQ   #0,D0
  17465.     MOVE.B  n_cmdlo(A6),D0
  17466.     LSR.B   #4,D0
  17467.     BRA ArpeggioFind
  17468.  
  17469. Arpeggio2
  17470.     MOVEQ   #0,D0
  17471.     MOVE.B  n_cmdlo(A6),D0
  17472.     AND.B   #15,D0
  17473. ArpeggioFind
  17474.     ASL.W   #1,D0
  17475.     MOVEQ   #0,D1
  17476.     MOVE.B  n_finetune(A6),D1
  17477.     MULU    #37*2,D1
  17478.     LEA PeriodTable(PC),A0
  17479.     ADD.L   D1,A0
  17480.     MOVEQ   #0,D1
  17481.     MOVE.W  n_period(A6),D1
  17482.     MOVEQ   #$24,D7
  17483. arploop MOVE.W  (A0,D0.W),D2
  17484.     CMP.W   (A0),D1
  17485.     BHS ArpeggioSet
  17486.     ADDQ.L  #2,A0
  17487.     DBRA    D7,arploop
  17488.     RTS
  17489.  
  17490. ArpeggioSet
  17491.     MOVE.W  D2,6(A5)
  17492.     RTS
  17493.  
  17494. FinePortaUp
  17495.     TST.L   Counter
  17496.     BNE Return2
  17497.     MOVE.B  #$0F,LowMask
  17498. PortaUp MOVEQ   #0,D0
  17499.     MOVE.B  n_cmdlo(A6),D0
  17500.     AND.B   LowMask,D0
  17501.     MOVE.B  #$FF,LowMask
  17502.     SUB.W   D0,n_period(A6)
  17503.     MOVE.W  n_period(A6),D0
  17504.     AND.W   #$0FFF,D0
  17505.     CMP.W   #$0071,D0
  17506.     BPL PortaUskip
  17507.     AND.W   #$F000,n_period(A6)
  17508.     OR.W    #$0071,n_period(A6)
  17509. PortaUskip  MOVE.W  n_period(A6),D0
  17510.     AND.W   #$0FFF,D0
  17511.     MOVE.W  D0,6(A5)
  17512.     RTS
  17513.  
  17514. FinePortaDown
  17515.     TST.L   Counter
  17516.     BNE Return2
  17517.     MOVE.B  #$0F,LowMask
  17518. PortaDown
  17519.     CLR.W   D0
  17520.     MOVE.B  n_cmdlo(A6),D0
  17521.     AND.B   LowMask,D0
  17522.     MOVE.B  #$FF,LowMask
  17523.     ADD.W   D0,n_period(A6)
  17524.     MOVE.W  n_period(A6),D0
  17525.     AND.W   #$0FFF,D0
  17526.     CMP.W   #$0358,D0
  17527.     BMI PortaDskip
  17528.     AND.W   #$F000,n_period(A6)
  17529.     OR.W    #$0358,n_period(A6)
  17530. PortaDskip  MOVE.W  n_period(A6),D0
  17531.     AND.W   #$0FFF,D0
  17532.     MOVE.W  D0,6(A5)
  17533.     RTS
  17534.  
  17535. SetTonePorta
  17536.     MOVE.L  A0,-(SP)
  17537.     MOVE.W  (A6),D2
  17538.     AND.W   #$0FFF,D2
  17539.     MOVEQ   #0,D0
  17540.     MOVE.B  n_finetune(A6),D0
  17541.     MULU    #37*2,D0
  17542.     LEA PeriodTable(PC),A0
  17543.     ADD.L   D0,A0
  17544.     MOVEQ   #0,D0
  17545. StpLoop CMP.W   (A0,D0.W),D2
  17546.     BHS StpFound
  17547.     ADDQ.W  #2,D0
  17548.     CMP.W   #37*2,D0
  17549.     BLO StpLoop
  17550.     MOVEQ   #35*2,D0
  17551. StpFound
  17552.     MOVE.B  n_finetune(A6),D2
  17553.     AND.B   #8,D2
  17554.     BEQ StpGoss
  17555.     TST.W   D0
  17556.     BEQ StpGoss
  17557.     SUBQ.W  #2,D0
  17558. StpGoss MOVE.W  (A0,D0.W),D2
  17559.     MOVE.L  (SP)+,A0
  17560.     MOVE.W  D2,n_wantedperiod(A6)
  17561.     MOVE.W  n_period(A6),D0
  17562.     CLR.B   n_toneportdirec(A6)
  17563.     CMP.W   D0,D2
  17564.     BEQ ClearTonePorta
  17565.     BGE Return2
  17566.     MOVE.B  #1,n_toneportdirec(A6)
  17567.     RTS
  17568.  
  17569. ClearTonePorta
  17570.     CLR.W   n_wantedperiod(A6)
  17571.     RTS
  17572.  
  17573.  
  17574. TonePortamento
  17575.     MOVE.B  n_cmdlo(A6),D0
  17576.     BEQ TonePortNoChange
  17577.     MOVE.B  D0,n_toneportspeed(A6)
  17578.     CLR.B   n_cmdlo(A6)
  17579. TonePortNoChange
  17580.     TST.W   n_wantedperiod(A6)
  17581.     BEQ Return2
  17582.     MOVEQ   #0,D0
  17583.     MOVE.B  n_toneportspeed(A6),D0
  17584.     TST.B   n_toneportdirec(A6)
  17585.     BNE TonePortaUp
  17586. TonePortaDown
  17587.     ADD.W   D0,n_period(A6)
  17588.     MOVE.W  n_wantedperiod(A6),D0
  17589.     CMP.W   n_period(A6),D0
  17590.     BGT TonePortaSetPer
  17591.     MOVE.W  n_wantedperiod(A6),n_period(A6)
  17592.     CLR.W   n_wantedperiod(A6)
  17593.     BRA TonePortaSetPer
  17594.  
  17595. TonePortaUp
  17596.     SUB.W   D0,n_period(A6)
  17597.     MOVE.W  n_wantedperiod(A6),D0
  17598.     CMP.W   n_period(A6),D0
  17599.     BLT TonePortaSetPer
  17600.     MOVE.W  n_wantedperiod(A6),n_period(A6)
  17601.     CLR.W   n_wantedperiod(A6)
  17602.  
  17603. TonePortaSetPer
  17604.     MOVE.W  n_period(A6),D2
  17605.     MOVE.B  n_glissfunk(A6),D0
  17606.     AND.B   #$0F,D0
  17607.     BEQ GlissSkip
  17608.     MOVEQ   #0,D0
  17609.     MOVE.B  n_finetune(A6),D0
  17610.     MULU    #37*2,D0
  17611.     LEA PeriodTable(PC),A0
  17612.     ADD.L   D0,A0
  17613.     MOVEQ   #0,D0
  17614. GlissLoop
  17615.     CMP.W   (A0,D0.W),D2
  17616.     BHS GlissFound
  17617.     ADDQ.W  #2,D0
  17618.     CMP.W   #37*2,D0
  17619.     BLO GlissLoop
  17620.     MOVEQ   #35*2,D0
  17621. GlissFound
  17622.     MOVE.W  (A0,D0.W),D2
  17623. GlissSkip
  17624.     MOVE.W  D2,6(A5) ; Set period
  17625.     RTS
  17626.  
  17627. Vibrato MOVE.B  n_cmdlo(A6),D0
  17628.     BEQ Vibrato2
  17629.     MOVE.B  n_vibratocmd(A6),D2
  17630.     AND.B   #$0F,D0
  17631.     BEQ vibskip
  17632.     AND.B   #$F0,D2
  17633.     OR.B    D0,D2
  17634. vibskip MOVE.B  n_cmdlo(A6),D0
  17635.     AND.B   #$F0,D0
  17636.     BEQ vibskip2
  17637.     AND.B   #$0F,D2
  17638.     OR.B    D0,D2
  17639. vibskip2
  17640.     MOVE.B  D2,n_vibratocmd(A6)
  17641. Vibrato2
  17642.     MOVE.L  A4,-(SP)
  17643.     MOVE.B  n_vibratopos(A6),D0
  17644.     LEA VibratoTable(PC),A4
  17645.     LSR.W   #2,D0
  17646.     AND.W   #$001F,D0
  17647.     MOVEQ   #0,D2
  17648.     MOVE.B  n_wavecontrol(A6),D2
  17649.     AND.B   #$03,D2
  17650.     BEQ vib_sine
  17651.     LSL.B   #3,D0
  17652.     CMP.B   #1,D2
  17653.     BEQ vib_rampdown
  17654.     MOVE.B  #255,D2
  17655.     BRA vib_set
  17656. vib_rampdown
  17657.     TST.B   n_vibratopos(A6)
  17658.     BPL vib_rampdown2
  17659.     MOVE.B  #255,D2
  17660.     SUB.B   D0,D2
  17661.     BRA vib_set
  17662. vib_rampdown2
  17663.     MOVE.B  D0,D2
  17664.     BRA vib_set
  17665. vib_sine
  17666.     MOVE.B  0(A4,D0.W),D2
  17667. vib_set
  17668.     MOVE.B  n_vibratocmd(A6),D0
  17669.     AND.W   #15,D0
  17670.     MULU    D0,D2
  17671.     LSR.W   #7,D2
  17672.     MOVE.W  n_period(A6),D0
  17673.     TST.B   n_vibratopos(A6)
  17674.     BMI VibratoNeg
  17675.     ADD.W   D2,D0
  17676.     BRA Vibrato3
  17677. VibratoNeg
  17678.     SUB.W   D2,D0
  17679. Vibrato3
  17680.     MOVE.W  D0,6(A5)
  17681.     MOVE.B  n_vibratocmd(A6),D0
  17682.     LSR.W   #2,D0
  17683.     AND.W   #$003C,D0
  17684.     ADD.B   D0,n_vibratopos(A6)
  17685.     MOVE.L  (SP)+,A4
  17686.     RTS
  17687.  
  17688. TonePlusVolSlide
  17689.     BSR TonePortNoChange
  17690.     BRA VolumeSlide
  17691.  
  17692. VibratoPlusVolSlide
  17693.     BSR Vibrato2
  17694.     BRA VolumeSlide
  17695.  
  17696. Tremolo MOVE.L  A4,-(SP)
  17697.     MOVE.B  n_cmdlo(A6),D0
  17698.     BEQ Tremolo2
  17699.     MOVE.B  n_tremolocmd(A6),D2
  17700.     AND.B   #$0F,D0
  17701.     BEQ treskip
  17702.     AND.B   #$F0,D2
  17703.     OR.B    D0,D2
  17704. treskip MOVE.B  n_cmdlo(A6),D0
  17705.     AND.B   #$F0,D0
  17706.     BEQ treskip2
  17707.     AND.B   #$0F,D2
  17708.     OR.B    D0,D2
  17709. treskip2
  17710.     MOVE.B  D2,n_tremolocmd(A6)
  17711. Tremolo2
  17712.     MOVE.B  n_tremolopos(A6),D0
  17713.     LEA VibratoTable(PC),A4
  17714.     LSR.W   #2,D0
  17715.     AND.W   #$001F,D0
  17716.     MOVEQ   #0,D2
  17717.     MOVE.B  n_wavecontrol(A6),D2
  17718.     LSR.B   #4,D2
  17719.     AND.B   #$03,D2
  17720.     BEQ tre_sine
  17721.     LSL.B   #3,D0
  17722.     CMP.B   #1,D2
  17723.     BEQ tre_rampdown
  17724.     MOVE.B  #255,D2
  17725.     BRA tre_set
  17726. tre_rampdown
  17727.     TST.B   n_vibratopos(A6)
  17728.     BPL tre_rampdown2
  17729.     MOVE.B  #255,D2
  17730.     SUB.B   D0,D2
  17731.     BRA tre_set
  17732. tre_rampdown2
  17733.     MOVE.B  D0,D2
  17734.     BRA tre_set
  17735. tre_sine
  17736.     MOVE.B  0(A4,D0.W),D2
  17737. tre_set
  17738.     MOVE.B  n_tremolocmd(A6),D0
  17739.     AND.W   #15,D0
  17740.     MULU    D0,D2
  17741.     LSR.W   #6,D2
  17742.     MOVEQ   #0,D0
  17743.     MOVE.B  n_volume(A6),D0
  17744.     TST.B   n_tremolopos(A6)
  17745.     BMI TremoloNeg
  17746.     ADD.W   D2,D0
  17747.     BRA Tremolo3
  17748. TremoloNeg
  17749.     SUB.W   D2,D0
  17750. Tremolo3
  17751.     BPL TremoloSkip
  17752.     CLR.W   D0
  17753. TremoloSkip
  17754.     CMP.W   #$40,D0
  17755.     BLS TremoloOk
  17756.     MOVE.W  #$40,D0
  17757. TremoloOk
  17758.     MOVE.W  D0,8(A5)
  17759.     MOVE.B  n_tremolocmd(A6),D0
  17760.     LSR.W   #2,D0
  17761.     AND.W   #$003C,D0
  17762.     ADD.B   D0,n_tremolopos(A6)
  17763.     MOVE.L  (SP)+,A4
  17764.     ADDQ.L  #4,SP
  17765.     RTS
  17766.  
  17767. SampleOffset
  17768.     MOVEQ   #0,D0
  17769.     MOVE.B  n_cmdlo(A6),D0
  17770.     BEQ sononew
  17771.     MOVE.B  D0,n_sampleoffset(A6)
  17772. sononew MOVE.B  n_sampleoffset(A6),D0
  17773.     LSL.W   #7,D0
  17774.     CMP.W   n_length(A6),D0
  17775.     BGE sofskip
  17776.     SUB.W   D0,n_length(A6)
  17777.     LSL.W   #1,D0
  17778.     ADD.L   D0,n_start(A6)
  17779.     RTS
  17780. sofskip MOVE.W  #$0001,n_length(A6)
  17781.     RTS
  17782.  
  17783. VolumeSlide
  17784.     MOVEQ   #0,D0
  17785.     MOVE.B  n_cmdlo(A6),D0
  17786.     LSR.B   #4,D0
  17787.     TST.B   D0
  17788.     BEQ VolSlideDown
  17789. VolSlideUp
  17790.     ADD.B   D0,n_volume(A6)
  17791.     CMP.B   #$40,n_volume(A6)
  17792.     BMI vsuskip
  17793.     MOVE.B  #$40,n_volume(A6)
  17794. vsuskip MOVE.B  n_volume(A6),D0
  17795. ;   MOVE.W  D0,8(A5)
  17796.     RTS
  17797.  
  17798. VolSlideDown
  17799.     MOVEQ   #0,D0
  17800.     MOVE.B  n_cmdlo(A6),D0
  17801.     AND.B   #$0F,D0
  17802. VolSlideDown2
  17803.     SUB.B   D0,n_volume(A6)
  17804.     BPL vsdskip
  17805.     CLR.B   n_volume(A6)
  17806. vsdskip MOVE.B  n_volume(A6),D0
  17807. ;   MOVE.W  D0,8(A5)
  17808.     RTS
  17809.  
  17810. PositionJump
  17811.     MOVEQ   #0,D0
  17812.     MOVE.B  n_cmdlo(A6),D0
  17813.     SUBQ.B  #1,D0
  17814.     MOVE.L  D0,SongPosition
  17815. pj2 CLR.B   PBreakPosition
  17816.     ST  PosJumpAssert
  17817.     RTS
  17818.  
  17819. VolumeChange
  17820.     MOVEQ   #0,D0
  17821.     MOVE.B  n_cmdlo(A6),D0
  17822.     CMP.B   #$40,D0
  17823.     BLS VolumeOk
  17824.     MOVEQ   #$40,D0
  17825. VolumeOk
  17826.     MOVE.B  D0,n_volume(A6)
  17827. ;   MOVE.W  D0,8(A5)
  17828.     RTS
  17829.  
  17830. PatternBreak
  17831.     MOVEQ   #0,D0
  17832.     MOVE.B  n_cmdlo(A6),D0
  17833.     MOVE.L  D0,D2
  17834.     LSR.B   #4,D0
  17835.     MULU    #10,D0
  17836.     AND.B   #$0F,D2
  17837.     ADD.B   D2,D0
  17838.     CMP.B   #63,D0
  17839.     BHI pj2
  17840.     MOVE.B  D0,PBreakPosition
  17841.     ST  PosJumpAssert
  17842.     RTS
  17843.  
  17844. SetSpeed
  17845.     MOVE.B  3(A6),D0
  17846.     AND.W   #$FF,D0
  17847.     BEQ.S   SpeedNull
  17848.     TST.B   IntMode
  17849.     BEQ.S   normspd
  17850.     CMP.W   #32,D0
  17851.     BLO.S   normspd
  17852.     MOVE.W  D0,RealTempo
  17853.     MOVEM.L D0-D7/A0-A6,-(SP)
  17854.     MOVE.W  SamScrEnable,-(SP)
  17855.     ST  SamScrEnable
  17856.     ST  UpdateTempo
  17857.     JSR SetTempo
  17858.     MOVE.W  (SP)+,SamScrEnable
  17859.     MOVEM.L (SP)+,D0-D7/A0-A6
  17860.     RTS
  17861. normspd CLR.L   Counter
  17862.     MOVE.W  D0,CurrSpeed+2
  17863.     RTS
  17864. SpeedNull
  17865.     CLR.L   RunMode
  17866.     JSR SetNormalPtrCol
  17867.     RTS
  17868.  
  17869.  
  17870. CheckMoreEffects
  17871.     MOVE.B  2(A6),D0
  17872.     AND.B   #$0F,D0
  17873.     CMP.B   #$9,D0
  17874.     BEQ SampleOffset
  17875.     CMP.B   #$B,D0
  17876.     BEQ PositionJump
  17877.     CMP.B   #$D,D0
  17878.     BEQ PatternBreak
  17879.     CMP.B   #$E,D0
  17880.     BEQ E_Commands
  17881.     CMP.B   #$F,D0
  17882.     BEQ SetSpeed
  17883.     TST.W   (A4)
  17884.     BEQ Return2
  17885.     CMP.B   #$C,D0
  17886.     BEQ VolumeChange
  17887.     BRA PerNop
  17888.  
  17889. E_Commands
  17890.     MOVE.B  n_cmdlo(A6),D0
  17891.     AND.B   #$F0,D0
  17892.     LSR.B   #4,D0
  17893.     BEQ FilterOnOff
  17894.     CMP.B   #1,D0
  17895.     BEQ FinePortaUp
  17896.     CMP.B   #2,D0
  17897.     BEQ FinePortaDown
  17898.     CMP.B   #3,D0
  17899.     BEQ SetGlissControl
  17900.     CMP.B   #4,D0
  17901.     BEQ SetVibratoControl
  17902.     CMP.B   #5,D0
  17903.     BEQ SetFineTune
  17904.     CMP.B   #6,D0
  17905.     BEQ JumpLoop
  17906.     CMP.B   #7,D0
  17907.     BEQ SetTremoloControl
  17908.     CMP.B   #8,D0
  17909.     BEQ KarplusStrong
  17910.     CMP.B   #$E,D0
  17911.     BEQ PatternDelay
  17912.     TST.W   (A4)
  17913.     BEQ Return2
  17914.     CMP.B   #9,D0
  17915.     BEQ RetrigNote
  17916.     CMP.B   #$A,D0
  17917.     BEQ VolumeFineUp
  17918.     CMP.B   #$B,D0
  17919.     BEQ VolumeFineDown
  17920.     CMP.B   #$C,D0
  17921.     BEQ NoteCut
  17922.     CMP.B   #$D,D0
  17923.     BEQ NoteDelay
  17924.     CMP.B   #$F,D0
  17925.     BEQ FunkIt
  17926.     RTS
  17927.  
  17928. FilterOnOff
  17929.     MOVE.B  n_cmdlo(A6),D0
  17930.     AND.B   #1,D0
  17931.     ASL.B   #1,D0
  17932.     AND.B   #$FD,$BFE001
  17933.     OR.B    D0,$BFE001
  17934.     RTS
  17935.  
  17936. SetGlissControl
  17937.     MOVE.B  n_cmdlo(A6),D0
  17938.     AND.B   #$0F,D0
  17939.     AND.B   #$F0,n_glissfunk(A6)
  17940.     OR.B    D0,n_glissfunk(A6)
  17941.     RTS
  17942.  
  17943. SetVibratoControl
  17944.     MOVE.B  n_cmdlo(A6),D0
  17945.     AND.B   #$0F,D0
  17946.     AND.B   #$F0,n_wavecontrol(A6)
  17947.     OR.B    D0,n_wavecontrol(A6)
  17948.     RTS
  17949.  
  17950. SetFineTune
  17951.     MOVE.B  n_cmdlo(A6),D0
  17952.     AND.B   #$0F,D0
  17953.     MOVE.B  D0,n_finetune(A6)
  17954.     RTS
  17955.  
  17956. JumpLoop
  17957.     TST.L   Counter
  17958.     BNE Return2
  17959.     MOVE.B  n_cmdlo(A6),D0
  17960.     AND.B   #$0F,D0
  17961.     BEQ SetLoop
  17962.     TST.B   n_loopcount(A6)
  17963.     BEQ jumpcnt
  17964.     SUB.B   #1,n_loopcount(A6)
  17965.     BEQ Return2
  17966. jmploop MOVE.B  n_pattpos(A6),PBreakPosition
  17967.     ST  PBreakFlag
  17968.     RTS
  17969.  
  17970. jumpcnt MOVE.B  D0,n_loopcount(A6)
  17971.     BRA jmploop
  17972.  
  17973. SetLoop MOVE.L  PatternPosition,D0
  17974.     LSR.L   #4,D0
  17975.     AND.B   #63,D0
  17976.     MOVE.B  D0,n_pattpos(A6)
  17977.     RTS
  17978.  
  17979. SetTremoloControl
  17980.     MOVE.B  n_cmdlo(A6),D0
  17981.     AND.B   #$0F,D0
  17982.     LSL.B   #4,D0
  17983.     AND.B   #$0F,n_wavecontrol(A6)
  17984.     OR.B    D0,n_wavecontrol(A6)
  17985.     RTS
  17986.  
  17987. KarplusStrong
  17988.     MOVEM.L D1-D2/A0-A1,-(SP)
  17989.     MOVE.L  n_loopstart(A6),A0
  17990.     MOVE.L  A0,A1
  17991.     MOVE.W  n_replen(A6),D0
  17992.     ADD.W   D0,D0
  17993.     SUBQ.W  #2,D0
  17994. karplop MOVE.B  (A0),D1
  17995.     EXT.W   D1
  17996.     MOVE.B  1(A0),D2
  17997.     EXT.W   D2
  17998.     ADD.W   D1,D2
  17999.     ASR.W   #1,D2
  18000.     MOVE.B  D2,(A0)+
  18001.     DBRA    D0,karplop
  18002.     MOVE.B  (A0),D1
  18003.     EXT.W   D1
  18004.     MOVE.B  (A1),D2
  18005.     EXT.W   D2
  18006.     ADD.W   D1,D2
  18007.     ASR.W   #1,D2
  18008.     MOVE.B  D2,(A0)
  18009.     MOVEM.L (SP)+,D1-D2/A0-A1
  18010.     RTS
  18011.  
  18012. RetrigNote
  18013.     MOVE.L  D1,-(SP)
  18014.     MOVEQ   #0,D0
  18015.     MOVE.B  n_cmdlo(A6),D0
  18016.     AND.B   #$0F,D0
  18017.     BEQ rtnend
  18018.     MOVE.L  Counter,D1
  18019.     BNE rtnskp
  18020.     MOVE.W  n_note(A6),D1
  18021.     AND.W   #$0FFF,D1
  18022.     BNE rtnend
  18023.     MOVE.L  Counter,D1
  18024. rtnskp  DIVU    D0,D1
  18025.     SWAP    D1
  18026.     TST.W   D1
  18027.     BNE rtnend
  18028. DoRetrg MOVE.W  n_dmabit(A6),$DFF096    ; Channel DMA off
  18029.     MOVE.L  n_start(A6),(A5)    ; Set sampledata pointer
  18030.     MOVE.W  n_length(A6),4(A5)  ; Set length
  18031.     MOVE.W  n_period(A6),6(A5)
  18032.     MOVEQ   #0,D0
  18033.     MOVE.B  n_volume(A6),D0
  18034. ;   MOVE.W  D0,8(A5)
  18035.     MOVE.W  DMAWait,D0
  18036. rtnloop1
  18037.     DBRA    D0,rtnloop1
  18038.     MOVE.W  n_dmabit(A6),D0
  18039.     BSET    #15,D0
  18040.     MOVE.W  D0,$DFF096
  18041.     MOVE.W  DMAWait,D0
  18042. rtnloop2
  18043.     DBRA    D0,rtnloop2
  18044.     MOVE.L  n_loopstart(A6),(A5)
  18045.     MOVE.L  n_replen(A6),4(A5)
  18046. rtnend  MOVE.L  (SP)+,D1
  18047.     RTS
  18048.  
  18049. VolumeFineUp
  18050.     TST.L   Counter
  18051.     BNE Return2
  18052.     MOVEQ   #0,D0
  18053.     MOVE.B  n_cmdlo(A6),D0
  18054.     AND.B   #$F,D0
  18055.     BRA VolSlideUp
  18056.  
  18057. VolumeFineDown
  18058.     TST.L   Counter
  18059.     BNE Return2
  18060.     MOVEQ   #0,D0
  18061.     MOVE.B  n_cmdlo(A6),D0
  18062.     AND.B   #$0F,D0
  18063.     BRA VolSlideDown2
  18064.  
  18065. NoteCut MOVEQ   #0,D0
  18066.     MOVE.B  n_cmdlo(A6),D0
  18067.     AND.B   #$0F,D0
  18068.     CMP.L   Counter,D0
  18069.     BNE Return2
  18070.     CLR.B   n_volume(A6)
  18071. ;   MOVE.W  #0,8(A5)
  18072.     RTS
  18073.  
  18074. NoteDelay
  18075.     MOVEQ   #0,D0
  18076.     MOVE.B  n_cmdlo(A6),D0
  18077.     AND.B   #$0F,D0
  18078.     CMP.L   Counter,D0
  18079.     BNE Return2
  18080.     MOVE.W  (A6),D0
  18081.     AND.W   #$0FFF,D0
  18082.     BEQ Return2
  18083.     MOVE.L  D1,-(SP)
  18084.     BRA DoRetrg
  18085.  
  18086. PatternDelay
  18087.     TST.L   Counter
  18088.     BNE Return2
  18089.     MOVEQ   #0,D0
  18090.     MOVE.B  n_cmdlo(A6),D0
  18091.     AND.B   #$0F,D0
  18092.     TST.B   PattDelayTime2
  18093.     BNE Return2
  18094.     ADDQ.B  #1,D0
  18095.     MOVE.B  D0,PattDelayTime
  18096.     RTS
  18097.  
  18098. FunkIt  TST.L   Counter
  18099.     BNE Return2
  18100.     MOVE.B  n_cmdlo(A6),D0
  18101.     AND.B   #$0F,D0
  18102.     LSL.B   #4,D0
  18103.     AND.B   #$0F,n_glissfunk(A6)
  18104.     OR.B    D0,n_glissfunk(A6)
  18105.     TST.B   D0
  18106.     BEQ Return2
  18107. UpdateFunk
  18108.     MOVEM.L A0/D1,-(SP)
  18109.     MOVEQ   #0,D0
  18110.     MOVE.B  n_glissfunk(A6),D0
  18111.     LSR.B   #4,D0
  18112.     BEQ funkend
  18113.     LEA FunkTable(PC),A0
  18114.     MOVE.B  (A0,D0.W),D0
  18115.     ADD.B   D0,n_funkoffset(A6)
  18116.     BTST    #7,n_funkoffset(A6)
  18117.     BEQ funkend
  18118.     CLR.B   n_funkoffset(A6)
  18119.     MOVE.L  n_loopstart(A6),D0
  18120.     MOVEQ   #0,D1
  18121.     MOVE.W  n_replen(A6),D1
  18122.     ADD.L   D1,D0
  18123.     ADD.L   D1,D0
  18124.     MOVE.L  n_wavestart(A6),A0
  18125.     ADDQ.L  #1,A0
  18126.     CMP.L   D0,A0
  18127.     BLO.S   funkok
  18128.     MOVE.L  n_loopstart(A6),A0
  18129. funkok  MOVE.L  A0,n_wavestart(A6)
  18130.     MOVEQ   #-1,D0
  18131.     SUB.B   (A0),D0
  18132.     MOVE.B  D0,(A0)
  18133. funkend MOVEM.L (SP)+,A0/D1
  18134.     RTS
  18135.  
  18136. ;************************* End of Code ******************************
  18137.  
  18138. FunkTable dc.b 0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128
  18139.  
  18140. VibratoTable   
  18141.     dc.b   0, 24, 49, 74, 97,120,141,161
  18142.     dc.b 180,197,212,224,235,244,250,253
  18143.     dc.b 255,253,250,244,235,224,212,197
  18144.     dc.b 180,161,141,120, 97, 74, 49, 24
  18145.  
  18146. AllRightText    dc.b    'All right',0
  18147. PLSTFullText    dc.b    'Plst is full!',0
  18148. AreYouSureText  dc.b    'Are you sure?',0
  18149. NoDiskInDriveText
  18150.         dc.b    'No disk in df0!',0
  18151. WriteProtectedText
  18152.         dc.b    'Write protected',0
  18153. OprAbortedText  dc.b    'Print aborted!',0
  18154. EnterDataText   dc.b    'Enter data',0
  18155. AddingPathText  dc.b    'Adding path...',0
  18156. DiskErrorText   dc.b    'Disk error !!',0
  18157. LoadingText dc.b    'Loading...',0
  18158. LoadingSongText dc.b    'Loading song',0
  18159. LoadingModuleText
  18160.         dc.b    'Loading module',0
  18161. LoadingSampleText
  18162.         dc.b    'Loading sample',0
  18163. SavingText  dc.b    'Saving...',0
  18164. ;SaveSongText   dc.b    'Save song ?',0
  18165. SavingSongText  dc.b    'Saving song',0
  18166. ;SaveModuleText dc.b    'Save module ?',0
  18167. SavingModuleText
  18168.         dc.b    'Saving module',0
  18169. ;SaveSampleText dc.b    'Save sample ?',0
  18170. SavingSampleText
  18171.         dc.b    'Saving sample',0
  18172. LoadingPLSTText dc.b    'Loading plst',0
  18173. SavingPLSTText  dc.b    'Saving plst',0
  18174. DeletingSongText
  18175.         dc.b    'Deleting song',0
  18176. DeletingModuleText
  18177.         dc.b    'Deleting module',0
  18178. DeletingSampleText
  18179.         dc.b    'Deleting sample',0
  18180. RenamingFileText
  18181.         dc.b    'Renaming file',0
  18182. DecrunchingText dc.b    'Decrunching...',0
  18183. CrunchingText   dc.b    'Crunching...',0
  18184. SelectEntryText dc.b    'Select entry',0
  18185. SelectSongText  dc.b    'Select song',0
  18186. SelectModuleText
  18187.         dc.b    'Select module',0
  18188. SelectSampleText
  18189.         dc.b    'Select sample',0
  18190. SelectFileText  dc.b    'Select file',0
  18191. ReadingDirText  dc.b    'Reading dir...',0
  18192. PosSetText  dc.b    'Position set',0
  18193. PrintingSongText
  18194.         dc.b    'Printing song',0
  18195. PrintingPLSTText
  18196.         dc.b    'Printing plst',0
  18197.  
  18198. SaveSongText    dc.b    'Save song ?',0
  18199. DeleteSongText  dc.b    'Delete song ?',0
  18200. SaveModuleText  dc.b    'Save module ?',0
  18201. DeleteModuleText dc.b   'Delete module ?',0
  18202. SaveSampleText  dc.b    'Save sample ?',0
  18203. DeleteSampleText dc.b   'Delete sample ?',0
  18204. PrintPLSTText   dc.b    'Print plst ?',0
  18205. PrintSongText   dc.b    'Print song ?',0
  18206. QuitPTText  dc.b    'Really quit ?',0
  18207. UpsampleText    dc.b    'Upsample ?',0
  18208. DownSampleText  dc.b    'Downsample ?',0
  18209. PleaseSelectText dc.b   'Please select',0
  18210. ClearSplitText  dc.b    'Clear split ?',0
  18211. ResetAllText    dc.b    'Reset config ?',0
  18212. DeletePresetText dc.b   'Delete preset ?',0
  18213. LoadPLSTText    dc.b    'Load presetlist?',0
  18214. SavePLSTText    dc.b    'Save presetlist?',0
  18215. KillSampleText  dc.b    'Kill sample ?',0
  18216. AbortLoadText   dc.b    'Abort loading ?',0
  18217. LoadConfigText  dc.b    'Load config ?',0
  18218. SaveConfigText  dc.b    'Save config ?',0
  18219.  
  18220. DiskFormatText  dc.b    'Disk format'
  18221. InProgressText  dc.b    'in progress'
  18222. FormattingCylText
  18223.         dc.b    'Formatting cyl ',0
  18224. VerifyingText   dc.b    'Verifying  cyl ',0
  18225. InitDiskText    dc.b    'Initializing',0
  18226. PlsEntNamText   dc.b    'Please enter name'
  18227. OfVolumeText    dc.b    'of volume:  ST-__',0,0
  18228.     cnop 0,2
  18229. DiskNumText1    dc.b    '0'
  18230. DiskNumText2    dc.b    '0  '
  18231. PEdDefaultPath  dc.b    'df0:',0
  18232.         dcb.b   47,0
  18233.    
  18234. PEdDefaultVol   dc.b    'st-'
  18235. SndDiskNum0 dc.b    '0'
  18236. SndDiskNum1 dc.b    '1:'
  18237.  
  18238. PresetName  dc.b    '      '
  18239. PsetNameText    dc.b    '                '
  18240.         dc.b    ' '
  18241. PsetVolText dc.b    '  '
  18242.         dc.b    ' '
  18243. PsetLenText dc.b    '    '
  18244.         dc.b    ' '
  18245. PsetRepeatText  dc.b    '    '
  18246.         dc.b    ' '
  18247. PsetReplenText  dc.b    '    '
  18248.  
  18249. InsertPsetText  dc.b    'ST-01:                  0 0000 0000 0002'
  18250. PsetPLSTtext    dc.b    'No.    Samplename               '
  18251.         dc.b    'Length  Repeat  RepLen',$A,$A
  18252. PsetPrtNumText  dc.b    '    :  '
  18253. PsetPrtNameText dc.b    '                             '
  18254. PsetPrtLenText  dc.b    '        '
  18255. PsetPrtRepeatText   dc.b    '        '
  18256. PsetPrtRepLenText   dc.b    10
  18257.     dc.b    0
  18258. SongDumpText
  18259.     dc.b    9
  18260.     dc.b    'Protracker Song-Dump -- Made with '
  18261.     dc.b    'Protracker V2.0A  ',$D,$A,$A
  18262.     dc.b    9
  18263.     dc.b    'Songname:  '
  18264. CRLF_Text   dc.b    13,10
  18265. FF_Text     dc.b    12,0
  18266.  
  18267.     cnop 0,2
  18268. PatternNumText  dc.b    9,9,9,'Pattern: '
  18269. PattNumText1    dc.b    '0'
  18270. PattNumText2    dc.b    '0',$D,$A,$D,$A
  18271.  
  18272. PtotText    dc.b    9
  18273. PattXText1  dc.b    "0"
  18274. PattXText2  dc.b    "0 : "
  18275. PpText      dc.b    "                      "
  18276. Prafs       dc.b    "  0000  0000  0000    ",$D,$A
  18277. PnText2     dc.b    "        "
  18278.     cnop 0,2
  18279.         dc.b    0
  18280. PattPosText dc.b    '00  :                                                       '
  18281. PnText      dc.b    '    ',0
  18282.  
  18283.     cnop 0,2
  18284. FmtSongDirName  dc.b    'DF0:songs',0
  18285. FmtModuleDirName    dc.b    'DF0:modules',0
  18286.  
  18287.     cnop 0,2
  18288. STText1     dc.b    'ST'
  18289. STText1Num  dc.b    '-'
  18290. STText1Number   dc.b    0,0,':'
  18291. STText2     dc.b    'ST'
  18292. STText2Num  dc.b    '-'
  18293. STText2Number   dc.b    0,0,':'
  18294. STText3     dc.b    'ST'
  18295. STText3Num  dc.b    '-'
  18296. STText3Number   dc.b    0,0,':'
  18297.  
  18298. EmptyLineText   dc.b    '                       ',0
  18299.  
  18300. FastHexTable    dc.b    '000102030405060708090A0B0C0D0E0F'
  18301.         dc.b    '101112131415161718191A1B1C1D1E1F'
  18302.         dc.b    '202122232425262728292A2B2C2D2E2F'
  18303.         dc.b    '303132333435363738393A3B3C3D3E3F'
  18304.         dc.b    '404142434445464748494A4B4C4D4E4F'
  18305.         dc.b    '505152535455565758595A5B5C5D5E5F'
  18306.         dc.b    '606162636465666768696A6B6C6D6E6F'
  18307.         dc.b    '707172737475767778797A7B7C7D7E7F'
  18308.         dc.b    '808182838485868788898A8B8C8D8E8F'
  18309.         dc.b    '909192939495969798999A9B9C9D9E9F'
  18310.         dc.b    'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF'
  18311.         dc.b    'B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF'
  18312.         dc.b    'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF'
  18313.         dc.b    'D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF'
  18314.         dc.b    'E0E1E2E3E4E5E6E7E8E9EAEBECEdEEEF'
  18315.         dc.b    'F0F1F2F3F4F5F6F7F8F9FAFBFCFdFEFF'
  18316.  
  18317. TrackdiskName   dc.b    'trackdisk.device',0
  18318. InputDevName    dc.b    'input.device',0
  18319. DOSbase     dc.l    0
  18320. IntuitionBase   dc.l    0
  18321. GfxBase     dc.l    0
  18322.  
  18323. RawKeyHexTable 
  18324.     dc.b    10,1,2,3,4,5,6,7
  18325.     dc.b    8,9,32,53,51,34,18,35
  18326. RawKeyScaleTable   
  18327.     dc.b    49,33,50,34,51,52,36,53,37,54,38,55,56,40,57
  18328.     dc.b    41,58,16,2,17,3,18,19,5,20,6,21,7,22,23,9,24,10
  18329.     dc.b    25,26,12,27,70,70,0
  18330.  
  18331. KbdTransTable1 
  18332.     dc.b     0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16
  18333.     dc.b    12,13,14,15,16,17,18,19,20,21,22,23
  18334.     dc.b    24,25,26,27,28,29,30,31,36,36
  18335. KbdTransTable2
  18336.     dc.b    12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28
  18337.     dc.b    24,25,26,27,28,29,30,31,32,33,34,35
  18338.     dc.b    36,36,36,36,36,36,36,36,36,36
  18339. NoteNames1
  18340.     dc.b    'C-1 C#1 D-1 D#1 E-1 F-1 F#1 G-1 G#1 A-1 A#1 B-1 '
  18341.     dc.b    'C-2 C#2 D-2 D#2 E-2 F-2 F#2 G-2 G#2 A-2 A#2 B-2 '
  18342.     dc.b    'C-3 C#3 D-3 D#3 E-3 F-3 F#3 G-3 G#3 A-3 A#3 B-3 '
  18343. SpcNoteText
  18344.     dc.b    '--- '
  18345. NoteNames2
  18346.     dc.b    'C-1 D¡1 D-1 E¡1 E-1 F-1 G¡1 G-1 A¡1 A-1 B¡1 B-1 '
  18347.     dc.b    'C-2 D¡2 D-2 E¡2 E-2 F-2 G¡2 G-2 A¡2 A-2 B¡2 B-2 '
  18348.     dc.b    'C-3 D¡3 D-3 E¡3 E-3 F-3 G¡3 G-3 A¡3 A-3 B¡3 B-3 '
  18349.     dc.b    '--- '
  18350.  
  18351. PeriodTable
  18352. ; Tuning 0
  18353.     dc.w    856,808,762,720,678,640,604,570,538,508,480,453
  18354.     dc.w    428,404,381,360,339,320,302,285,269,254,240,226
  18355.     dc.w    214,202,190,180,170,160,151,143,135,127,120,113,0
  18356. ; Tuning 1
  18357.     dc.w    850,802,757,715,674,637,601,567,535,505,477,450
  18358.     dc.w    425,401,379,357,337,318,300,284,268,253,239,225
  18359.     dc.w    213,201,189,179,169,159,150,142,134,126,119,113,0
  18360. ; Tuning 2
  18361.     dc.w    844,796,752,709,670,632,597,563,532,502,474,447
  18362.     dc.w    422,398,376,355,335,316,298,282,266,251,237,224
  18363.     dc.w    211,199,188,177,167,158,149,141,133,125,118,112,0
  18364. ; Tuning 3
  18365.     dc.w    838,791,746,704,665,628,592,559,528,498,470,444
  18366.     dc.w    419,395,373,352,332,314,296,280,264,249,235,222
  18367.     dc.w    209,198,187,176,166,157,148,140,132,125,118,111,0
  18368. ; Tuning 4
  18369.     dc.w    832,785,741,699,660,623,588,555,524,495,467,441
  18370.     dc.w    416,392,370,350,330,312,294,278,262,247,233,220
  18371.     dc.w    208,196,185,175,165,156,147,139,131,124,117,110,0
  18372. ; Tuning 5
  18373.     dc.w    826,779,736,694,655,619,584,551,520,491,463,437
  18374.     dc.w    413,390,368,347,328,309,292,276,260,245,232,219
  18375.     dc.w    206,195,184,174,164,155,146,138,130,123,116,109,0
  18376. ; Tuning 6
  18377.     dc.w    820,774,730,689,651,614,580,547,516,487,460,434
  18378.     dc.w    410,387,365,345,325,307,290,274,258,244,230,217
  18379.     dc.w    205,193,183,172,163,154,145,137,129,122,115,109,0
  18380. ; Tuning 7
  18381.     dc.w    814,768,725,684,646,610,575,543,513,484,457,431
  18382.     dc.w    407,384,363,342,323,305,288,272,256,242,228,216
  18383.     dc.w    204,192,181,171,161,152,144,136,128,121,114,108,0
  18384. ; Tuning -8
  18385.     dc.w    907,856,808,762,720,678,640,604,570,538,508,480
  18386.     dc.w    453,428,404,381,360,339,320,302,285,269,254,240
  18387.     dc.w    226,214,202,190,180,170,160,151,143,135,127,120,0
  18388. ; Tuning -7
  18389.     dc.w    900,850,802,757,715,675,636,601,567,535,505,477
  18390.     dc.w    450,425,401,379,357,337,318,300,284,268,253,238
  18391.     dc.w    225,212,200,189,179,169,159,150,142,134,126,119,0
  18392. ; Tuning -6
  18393.     dc.w    894,844,796,752,709,670,632,597,563,532,502,474
  18394.     dc.w    447,422,398,376,355,335,316,298,282,266,251,237
  18395.     dc.w    223,211,199,188,177,167,158,149,141,133,125,118,0
  18396. ; Tuning -5
  18397.     dc.w    887,838,791,746,704,665,628,592,559,528,498,470
  18398.     dc.w    444,419,395,373,352,332,314,296,280,264,249,235
  18399.     dc.w    222,209,198,187,176,166,157,148,140,132,125,118,0
  18400. ; Tuning -4
  18401.     dc.w    881,832,785,741,699,660,623,588,555,524,494,467
  18402.     dc.w    441,416,392,370,350,330,312,294,278,262,247,233
  18403.     dc.w    220,208,196,185,175,165,156,147,139,131,123,117,0
  18404. ; Tuning -3
  18405.     dc.w    875,826,779,736,694,655,619,584,551,520,491,463
  18406.     dc.w    437,413,390,368,347,328,309,292,276,260,245,232
  18407.     dc.w    219,206,195,184,174,164,155,146,138,130,123,116,0
  18408. ; Tuning -2
  18409.     dc.w    868,820,774,730,689,651,614,580,547,516,487,460
  18410.     dc.w    434,410,387,365,345,325,307,290,274,258,244,230
  18411.     dc.w    217,205,193,183,172,163,154,145,137,129,122,115,0
  18412. ; Tuning -1
  18413.     dc.w    862,814,768,725,684,646,610,575,543,513,484,457
  18414.     dc.w    431,407,384,363,342,323,305,288,272,256,242,228
  18415.     dc.w    216,203,192,181,171,161,152,144,136,128,121,114,0
  18416.  
  18417. CursorPosTable 
  18418.     dc.b    3,6,7,8,9,10,12
  18419.     dc.b    15,16,17,18,19,21
  18420.     dc.b    24,25,26,27,28,30
  18421.     dc.b    33,34,35,36,37
  18422. UnshiftedKeymap
  18423.     dc.b    '`1234567890-=\*0'
  18424.     dc.b    'qwertyuiop[]*123'
  18425.     dc.b    'asdfghjkl;',39,'#',0,'456'
  18426.     dc.b    '<zxcvbnm,./',0,'.','789 '
  18427. ShiftedKeymap
  18428.     dc.b    '~!@#$%^&*()_+|*0'
  18429.     dc.b    'qwertyuiop{}*123'
  18430.     dc.b    'asdfghjkl:',34,'^',0,'456'
  18431.     dc.b    '>zxcvbnm<>?',0,'.','789 '
  18432.  
  18433. SongNumOfPatt   dc.w    1
  18434. NoteNamesPtr    dc.l    0
  18435. SpritePtrsPtr   dc.l    0
  18436. LineCurPosPtr   dc.l    0
  18437. NoSpritePtr dc.l    0
  18438. CursorPosPtr    dc.l    0
  18439. Ch1SpritePtr    dc.l    0
  18440. Ch2SpritePtr    dc.l    0
  18441. Ch3SpritePtr    dc.l    0
  18442. Ch4SpritePtr    dc.l    0
  18443. PPattPos    dc.l    0
  18444. SaveEditMode    dc.l    0
  18445. EditMode    dc.l    0
  18446. RunMode     dc.l    0
  18447. CurrCmds    dc.l    0
  18448. TextBplPtr  dc.l    0
  18449. TextOffset  dc.w    0
  18450. TextLength  dc.w    0
  18451. TextLenTemp dc.l    0
  18452. ShowTextPtr dc.l    0
  18453. PatternNumber   dc.l    0
  18454. CurrPos     dc.l    0
  18455. CurrSpeed   dc.l    0
  18456. KeyTransTabPtr  dc.l    0
  18457. CmdOffset   dc.w    0
  18458. RawKeyCode  dc.b    0
  18459. PattRfsh    dc.b    0
  18460. MountFlag   dc.w    0
  18461. GetlineFlag dc.w    0
  18462. LoadInProgress  dc.w    0
  18463. KbIntSave   dc.l    0
  18464. KbIntSavePtr    dc.l    0
  18465. CurrentPlayNote dc.w    214
  18466. LineCurX    dc.w    0
  18467. LineCurY    dc.w    0
  18468. TextEndPtr  dc.l    0
  18469. ScrPattPos  dc.w    0
  18470. PattCurPos  dc.w    0
  18471. GadgRepeat  dc.w    0
  18472. WordNumber  dc.w    0
  18473. HighPattNum dc.w    0
  18474. InsNum  dc.w    0
  18475. LastInsNum  dc.w    1
  18476. PlayInsNum  dc.w    1
  18477. HiLowInstr  dc.w    0
  18478. PEDpos      dc.w    0
  18479. PLSTpos     dc.w    0
  18480. MaxPLSTOffset   dc.l    0
  18481. PresetMarkTotal dc.w    0
  18482. PLSTOffset  dcb.b   14*4,0
  18483. CurrentPreset   dc.w    1
  18484. UpOrDown    dc.w    0
  18485. Joy0Low     dc.w    0
  18486. Joy0High    dc.w    0
  18487. MouseX  dc.w    0
  18488. MouseY  dc.w    0
  18489. MouseX2 dc.w    0
  18490. MouseY2 dc.w    0
  18491. MouseX3 dc.w    0
  18492. MouseY3 dc.w    0
  18493. DecompMemPtr    dc.l    0
  18494. DecompMemSize   dc.l    0
  18495.  
  18496. SampleInfo  dc.w    0
  18497. si_volume   dc.w    0
  18498. si_long     dc.l    0
  18499. si_pointer  dc.l    0,0,0,0,0
  18500. SampleInfo2 dc.w    0
  18501. si_volume2  dc.w    0
  18502. si_long2    dc.l    0
  18503. si_pointer2 dc.l    0,0,0,0,0
  18504.  
  18505. LongFFFF    dc.l    0
  18506. PosJumpAssert   dc.b    0
  18507. PBreakPosition  dc.b    0
  18508. PBreakFlag  dc.b    0
  18509. LEDStatus   dc.b    0
  18510. PattDelayTime   dc.b    0
  18511. PattDelayTime2  dc.b    0
  18512. PattRfshNum dc.l    0
  18513. DidQuantize dc.w    0
  18514. MessagePtr  dc.l    0
  18515. FileNamePtr dc.l    0
  18516. DiskDataPtr dc.l    0
  18517. FileHandle  dc.l    0
  18518. DiskDataLength  dc.l    0
  18519. LowMask     dc.b    $FF
  18520. PatternPosition dc.l    0
  18521. SongPosition    dc.l    0
  18522. Counter     dc.l    0
  18523. PatternPtr  dc.l    0
  18524. SongDataPtr dc.l    0
  18525. SampleStarts    dcb.l   31,0
  18526. SamplePtrs  EQU SampleStarts-4
  18527. SampleLengths   dcb.l   32,0
  18528. DMACONtemp  dc.w    0
  18529. StackSave   dc.l    0
  18530. InputDevMouse   dc.l    0,0,0
  18531. AnalyzerHeights dcb.w   23,0
  18532. AnalyzerOpplegg dcb.w   23,0
  18533. Action      dc.w    0
  18534. PathPtr     dc.l    0
  18535. FileLock    dc.l    0
  18536. CurrScreen  dc.w    0
  18537. SaveCurrScreen  dc.w    0
  18538. PointerCol1Save dc.w    0
  18539. PointerCol2Save dc.w    0
  18540. PointerCol3Save dc.w    0
  18541. GetDecTemp  dc.b    0
  18542. UpdateTempo dc.b    0
  18543. MoreInstrFlag   dc.w    0
  18544. SampleSortList  dcb.l   32,0
  18545. PLSTmem     dc.l    0
  18546. PresetTotal dc.w    0
  18547. SaveScope   dc.b    0
  18548.         dc.b    0 ;free 0
  18549. DisableAnalyzer dc.b    0
  18550. SaveDA      dc.b    0
  18551. AutoReqRunning  dc.b    0
  18552. NoSampleInfo    dc.b    0
  18553. FormatDataPtr   dc.l    0
  18554. CylinderNumber  dc.w    0
  18555. TrackdiskPort   dc.l    0,0,0,0
  18556. ProcessPtr  dc.l    0,0,0,0
  18557. DateStamp   dc.l    0,0,0,0
  18558. EnterTextFlag   dc.w    0
  18559. PresetLength    dc.w    0
  18560. PresetFineTune  dc.w    0
  18561. PresetRepeat    dc.w    0
  18562. PresetReplen    dc.w    0
  18563. PED_Action  dc.w    0
  18564. PsetNumTemp dc.w    0
  18565. PsetPtrTemp dc.l    0
  18566. FreeDiskSpace   dc.l    0
  18567. SplitAddress    dc.l    0
  18568. LaHeTx      dc.l    $12345678
  18569. PLSTallocsize   dc.l    0
  18570. MaxPLSTEntries2 dc.w    0
  18571.  
  18572. ;---- Setup Data ----
  18573.  
  18574. DefaultSetupData
  18575.     dc.b    'PT2.0 Configuration File',$A,0
  18576.     dc.b    'ST-00:songs'
  18577.     dcb.b   21,0
  18578.     dc.b    'ST-00:modules'
  18579.     dcb.b   19,0
  18580.     dc.b    'DF0:'
  18581.     dcb.b   28,0
  18582.     dc.b    'PRT:'
  18583.     dcb.b   28,0
  18584. DefCol  dc.w    $000,$BBB,$888,$555,$FD0,$D04,$000,$34F
  18585.     dc.b    1   ; Song Pack Mode
  18586.     dc.b    0   ; Module Pack Mode
  18587.     dc.b    0   ; Split  0=off, 1=on
  18588.     dc.b    0   ; Filter
  18589.     dc.b    0   ; TransDel
  18590.     dc.b    1   ; ShowDec
  18591.     dc.b    1   ; AutoDir
  18592.     dc.b    1   ; AutoExit
  18593.     dc.b    1   ; ModOnly
  18594.     dc.b    0   ; MIDI
  18595.     dc.b    1,$18,$18,0 ; SplitData
  18596.     dc.b    2,$1A,$18,0
  18597.     dc.b    3,$1C,$18,0
  18598.     dc.b    4,$1D,$18,0
  18599.     dc.w    20,2    ; KeyRepDelay/Speed
  18600.     dc.b    0   ; Accidental
  18601.     dc.b    0   ; not in use
  18602.     dc.b    'newshell',0    ; ExtCmd 0
  18603.     dcb.b   23,0
  18604.     dc.b    'add21k',0  ; ExtCmd 1
  18605.     dcb.b   25,0
  18606.     dc.b    'info',0    ; ExtCmd 2
  18607.     dcb.b   27,0
  18608.     dc.b    'list',0    ; ExtCmd 3
  18609.     dcb.b   27,0
  18610.     dc.b    'loadwb -debug',0 ; ExtCmd 4
  18611.     dcb.b   18,0
  18612.     dc.b    'diskmaster1.3',0 ; ExtCmd 5
  18613.     dcb.b   18,0
  18614.     dc.b    'run AudioMasterIII',0 ; ExtCmd 6
  18615.     dcb.b   13,0
  18616.     dc.b    'ced',0 ; ExtCmd 7
  18617.     dcb.b   28,0
  18618.     dc.w    0   ; Not in use
  18619.     dc.w    2500    ; Max PLST Entries
  18620.     dc.b    2,3,4,1 ; Multi Mode Next
  18621.     dc.w    $102,$202,$037,$047,$304, $F06,$C10,$C20,$E93,$A0F
  18622.     dc.b    0 ; RAW/IFF Save, 0=RAW, 1=IFF
  18623.     dc.b    1 ; IntMode, 0=VBLANK, 1=CIA
  18624.     dc.b    0 ; Override
  18625.     dc.b    0 ; Nosamples
  18626.     dc.b    0 ; BlankZero
  18627.     dc.b    1 ; ShowDirs
  18628.     dc.b    0 ; CutToBuf
  18629.     dc.b    0 ; ShowPublic
  18630.     dc.b    1 ; IFFLoop
  18631.     dc.b    0 ; HHFlag
  18632.     dc.w    125 ; Tempo
  18633.     dc.w    300 ; DMAWait
  18634.     dc.w    24  ; TuneNote (C-3)
  18635.     dc.w    $20 ; TToneVol
  18636.     dc.b    0,0,0,0,0,0,0,0 ; (Pad to 512 bytes)
  18637.     dc.b    "ST-00:" ; Protracker Path
  18638.     dcb.b   26
  18639.     dc.w    6 ; DefaultSpeed
  18640.     dc.w    $0F00,$0F00,$0F10,$0F10,$0F20,$0F20,$0F30,$0F30 ; VU-Meter
  18641.     dc.w    $0F40,$0F50,$0F60,$0F70,$0F80,$0F90,$0FA0,$0FB0 ; colors
  18642.     dc.w    $0FC0,$0FD0,$0FE0,$0FF0,$0FF0,$0EF0,$0EF0,$0DF0
  18643.     dc.w    $0DF0,$0CF0,$0CF0,$0BF0,$0BF0,$0AF0,$09F0,$09F0
  18644.     dc.w    $08F0,$08F0,$07F0,$07F0,$06F0,$06F0,$05F0,$05F0
  18645.     dc.w    $04F0,$04F0,$03F0,$03F0,$02F0,$01F0,$00F0,$00E0
  18646.  
  18647.     dc.w    $0F00,$0F10,$0F20,$0F30,$0F40,$0F50,$0F60,$0F70 ; Analyzer
  18648.     dc.w    $0F80,$0F90,$0FA0,$0FB0,$0FC0,$0FD0,$0FE0,$0FF0 ; colors
  18649.     dc.w    $0EF0,$0DF0,$0CF0,$0BF0,$0AF0,$09F0,$08F0,$07F0
  18650.     dc.w    $06F0,$05F0,$04F0,$03F0,$02F0,$01F0,$00F0,$00E0
  18651.     dc.w    $00D0,$00C0,$00B0,$00A0,$0090,$0080,$0070,$0060
  18652.     dcb.b   302  ; Pad to 1024 bytes
  18653.  
  18654. ;---- Sampler routines ----
  18655.  
  18656. _custom EQU $00DFF000
  18657. intreq  EQU $0000009C
  18658. intreqr EQU $0000001E
  18659. intena  EQU $0000009A
  18660. joy0dat EQU $0000000A
  18661. vhposr  EQU $00000006
  18662. dmacon  EQU $00000096
  18663. dmaconr EQU $00000002
  18664.  
  18665. SamInfoPtr  dc.l    0
  18666. SamInfoLen  dc.l    0
  18667. SampleNote  dc.w    24 ; C-3
  18668. ResampleNote    dc.w    24 ; C-3
  18669. SamIntSave  dc.w    0
  18670. SamDMASave  dc.w    0
  18671.  
  18672. ClearTempSampArea
  18673.     LEA TempSampArea,A0
  18674.     MOVE.W  #379,D0
  18675.     MOVEQ   #0,D1
  18676. ctsalop MOVE.W  D1,(A0)+
  18677.     DBRA    D0,ctsalop
  18678.     RTS
  18679.  
  18680. Sampler CLR.B   RawKeyCode
  18681.     BSR StopIt
  18682.     JSR TopExit
  18683.     JSR WaitForButtonUp
  18684.     JSR SetWaitPtrCol
  18685.     BSR ShowMon
  18686.     JSR Wait_4000
  18687.     JSR ClearRightArea
  18688.     JSR ClearAnalyzerColors
  18689.     BSR ClearTempSampArea
  18690.     BSR WaitForDiskDrive
  18691.     MOVE.W  $DFF01C,SamIntSave ; intenar
  18692.     MOVE.W  #$7FFF,_custom+intena
  18693.     JSR TurnOffVoices
  18694.     MOVE.W  SampleNote,D0
  18695.     ASL.W   #1,D0
  18696.     LEA PeriodTable,A0
  18697.     MOVE.W  (A0,D0.W),D0
  18698.     LSR.W   #1,D0
  18699.     LEA $00DFF000,A0
  18700.     LEA $AA(A0),A5
  18701.     LEA $BA(A0),A6
  18702.     MOVE.W  D0,$A6(A0)
  18703.     MOVE.W  D0,$B6(A0)
  18704.     MOVEQ.L #$20,D0
  18705.     MOVE.W  D0,$A8(A0)
  18706.     MOVE.W  D0,$B8(A0)
  18707.     MOVEQ.L #0,D0
  18708.     MOVE.W  D0,(A5)
  18709.     MOVE.W  D0,(A6)
  18710.     MOVE.B  #6,$00BFD200
  18711.     MOVEQ.L #2,D0
  18712.     MOVE.B  D0,$00BFD000
  18713.     MOVE.B  #0,$00BFE301
  18714.     LEA GraphOffsets(PC),A0
  18715.     LEA TempSampArea,A1
  18716.     MOVE.L  TextBplPtr,A2
  18717.     LEA $09E8-40(A2),A2
  18718.     LEA $00BFE101,A3
  18719.     LEA _custom+intreqr,A4
  18720.     MOVE.W  #$0180,D7
  18721.     MOVEQ.L #6,D6
  18722.     MOVEQ.L #10,D3
  18723. monilop2
  18724.     MOVEQ.L #22,D5
  18725. monilop4
  18726.     MOVEQ.L #7,D4
  18727. monilop3
  18728.     BTST    D7,(A4)
  18729.     BEQ.S   monilop3
  18730.     MOVE.W  D7,$7E(A4)
  18731.     MOVEQ.L #0,D0
  18732.     MOVE.B  (A3),D0
  18733.     MOVE.W  D0,D1
  18734.     SUB.B   D7,D0
  18735.     MOVE.B  D0,(A5)
  18736.     MOVE.B  D0,(A6)
  18737.     LSR.W   #3,D1
  18738.     ADD.W   D1,D1
  18739.     MOVE.W  0(A0,D1.W),D0
  18740.     MOVE.W  (A1),D1
  18741.     MOVE.W  D0,(A1)+
  18742.     BCLR    D4,0(A2,D1.W)
  18743.     BSET    D4,0(A2,D0.W)
  18744.     DBRA    D4,monilop3
  18745.     ADDQ.L  #1,A2
  18746.     DBRA    D5,monilop4
  18747.     SUB.L   #23,A2
  18748.     SUB.L   #368,A1
  18749.     BTST    D6,-$0100(A3)
  18750.     BEQ sampexit
  18751.     BTST    D3,-8(A4)
  18752.     BNE.S   monilop2
  18753.  
  18754. ;-- start sampling --
  18755.  
  18756.     MOVE.W  InsNum(PC),D1
  18757.     BEQ sampexit
  18758.     LSL.W   #2,D1
  18759.     LEA SamplePtrs,A0
  18760.     MOVE.L  (A0,D1.W),D0
  18761.     BEQ.S   samaok
  18762.     CLR.L   (A0,D1.W)
  18763.     MOVE.L  D0,A1
  18764.     MOVE.L  124(A0,D1.W),D0
  18765.     BEQ.S   samaok
  18766.     CLR.L   124(A0,D1.W)
  18767.     MOVE.L  4.W,A6
  18768.     JSR LVOFreeMem(A6)
  18769. samaok  MOVE.L  #$FFFE,D6   ; try 64k
  18770. samalclop
  18771.     MOVE.L  D6,D0
  18772.     MOVE.L  #MEMF_CHIP!MEMF_CLEAR,D1
  18773.     MOVE.L  4.W,A6
  18774.     JSR LVOAllocMem(A6)
  18775.     TST.L   D0
  18776.     BNE.S   samalcok
  18777.     SUB.L   #2048,D6    ; try 2k less
  18778.     BPL.S   samalclop
  18779.     BSR OutOfMemErr
  18780.     BRA sampexit
  18781.  
  18782. samalcok
  18783.     MOVE.W  InsNum(PC),D1
  18784.     LSL.W   #2,D1
  18785.     LEA SamplePtrs(PC),A0
  18786.     MOVE.L  D0,(A0,D1.W)
  18787.     MOVE.L  D6,124(A0,D1.W)
  18788.  
  18789.     MOVE.W  $DFF002,SamDMASave
  18790.     MOVE.W  #$03FF,_custom+dmacon
  18791.     BSR GetSampleInfo
  18792.     MOVE.L  SamInfoLen,D4
  18793.     CLR.W   $DFF100
  18794.     CLR.W   $DFF180
  18795.     MOVE.L  SamInfoPtr,A1
  18796.     LEA _custom+intreq,A2
  18797.     LEA $00BFE101,A3 ; parallel port
  18798.     LEA _custom+intreqr,A4
  18799.     LEA $DFF0BA,A6
  18800.  
  18801.     MOVE.W  #$0180,D7
  18802.     MOVEQ.L #6,D6
  18803.     MOVEQ.L #0,D5
  18804. samploop
  18805.     BTST    D7,(A4)
  18806.     BEQ.S   samploop
  18807.     MOVE.W  D7,(A2)
  18808.     MOVE.B  (A3),D0
  18809.     SUB.B   D7,D0
  18810.     MOVE.B  D0,(A5)
  18811.     MOVE.B  D0,(A6)
  18812.     MOVE.B  D0,(A1)+
  18813.     ADDQ.W  #1,D5
  18814.     CMP.W   D4,D5
  18815.     BEQ.S   sampend
  18816.     BTST    D6,-$0100(A3)
  18817.     BNE.S   samploop
  18818. sampend MOVE.W  SamDMASave,D0
  18819.     OR.W    #$8000,D0
  18820.     MOVE.W  D0,$00DFF096
  18821.  
  18822.     MOVE.L  A1,D0
  18823.     SUB.L   SamInfoPtr(PC),D0
  18824.     MOVE.L  D0,SamInfoLen
  18825.  
  18826.     MOVE.L  SongDataPtr(PC),A0
  18827.     MOVE.W  InsNum(PC),D1
  18828.     MULU    #30,D1
  18829.     LEA 12(A0,D1.W),A0
  18830.     MOVE.L  SamInfoLen(PC),D0
  18831.     LSR.L   #1,D0
  18832.     MOVE.W  D0,(A0)+
  18833.     MOVE.W  #$0040,(A0)+
  18834.     CLR.W   (A0)+
  18835.     MOVE.W  #1,(A0)
  18836.  
  18837.     MOVE.L  SamInfoLen(PC),D1
  18838.     NEG.L   D1
  18839.     AND.L   #$FFFFFFF8,D1
  18840.     NEG.L   D1
  18841.     MOVE.W  InsNum(PC),D0
  18842.     ASL.W   #2,D0
  18843.     LEA SamplePtrs,A0
  18844.     CMP.L   124(A0,D0.W),D1
  18845.     BGE.S   sampexit
  18846.     MOVE.L  124(A0,D0.W),D2
  18847.     MOVE.L  D1,124(A0,D0.W)
  18848.     SUB.L   D1,D2
  18849.     MOVE.L  0(A0,D0.W),A1
  18850.     MOVE.L  124(A0,D0.W),D0
  18851.     ADD.L   D0,A1
  18852.     MOVE.L  D2,D0
  18853.     MOVE.L  4.W,A6
  18854.     JSR LVOFreeMem(A6)
  18855. sampexit
  18856.     MOVE.W  SamIntSave,D0
  18857.     BSET    #15,D0
  18858.     MOVE.W  D0,$DFF09A
  18859.     JSR TurnOffVoices
  18860.     JSR DisplayMainScreen
  18861.     BSR ClearSamStarts
  18862.     BSR ShowSampleInfo
  18863.     BSR RedrawSample
  18864.     JSR WaitForButtonUp
  18865.     CLR.W   KeyBufPos
  18866.     CLR.B   RawKeyCode
  18867.     CLR.W   ShiftKeyStatus
  18868.     JMP Wait_4000
  18869.  
  18870. SampleNullInfo
  18871.     CLR.L   SamInfoPtr
  18872.     CLR.L   SamInfoLen
  18873.     MOVEQ   #-1,D0
  18874.     RTS
  18875.  
  18876. GetSampleInfo
  18877.     MOVE.W  InsNum(PC),D0
  18878.     BEQ.S   SampleNullInfo
  18879.     LSL.W   #2,D0
  18880.     LEA SamplePtrs(PC),A0
  18881.     MOVE.L  (A0,D0.W),SamInfoPtr
  18882.     MOVE.L  124(A0,D0.W),SamInfoLen
  18883.     MOVEQ   #0,D0
  18884.     RTS
  18885.  
  18886. ShowMon SF  ScopeEnable
  18887.     ST  DisableAnalyzer
  18888.     JSR ClearRightArea
  18889.     LEA MonitorData,A0
  18890.     MOVE.L  #MonitorSize,D0
  18891.     MOVEQ   #-1,D4
  18892.     JMP cgjojo
  18893.  
  18894. WaitForDiskDrive
  18895.     JSR StorePtrCol
  18896.     MOVE.L  4.W,A6
  18897.     LEA $15E(A6),A0 ; DeviceList
  18898.     LEA TrackdiskName,A1    ; trackdisk.device
  18899.     JSR LVOFindName(A6)
  18900.     MOVE.L  D0,A6
  18901.     LEA $24(A6),A6  ; dn_GlobalVec
  18902. trdloop2
  18903.     MOVE.L  A6,A1
  18904.     MOVEQ.L #3,D6
  18905. tdrloop TST.L   (A1)+
  18906.     BEQ.S   tdrskip
  18907.     MOVE.L  -4(A1),A2
  18908.     BTST    #7,$0041(A2)
  18909.     BEQ.S   tdrnotset
  18910. tdrskip DBRA    D6,tdrloop
  18911.     JMP RestorePtrCol
  18912.  
  18913. tdrnotset
  18914.     JSR SetDiskPtrCol
  18915.     BRA.S   trdloop2
  18916.  
  18917. ClearSamStarts
  18918.     LEA SamplePtrs+4,A0
  18919.     MOVEQ   #30,D0
  18920. cssLoop MOVE.L  (A0)+,D1
  18921.     BEQ cssSkip
  18922.     MOVE.L  D1,A1
  18923.     CLR.W   (A1)
  18924. cssSkip DBRA    D0,cssLoop
  18925.     RTS
  18926.  
  18927. GraphOffsets
  18928.     dc.w 31*40,30*40,29*40,28*40,27*40,26*40,25*40,24*40
  18929.     dc.w 23*40,22*40,21*40,20*40,19*40,18*40,17*40,16*40
  18930.     dc.w 15*40,14*40,13*40,12*40,11*40,10*40,09*40,08*40
  18931.     dc.w 07*40,06*40,05*40,04*40,03*40,02*40,01*40,00*40
  18932.  
  18933. SamNoteType dc.w    0
  18934.  
  18935. ShowSamNote
  18936.     TST.W   SamScrEnable
  18937.     BEQ Return2
  18938.     MOVE.L  NoteNamesPtr,A4
  18939.     MOVE.W  #237*40+36,TextOffset
  18940.     MOVE.W  SampleNote,D0
  18941.     LSL.W   #2,D0
  18942.     LEA (A4,D0.W),A0
  18943.     MOVE.L  A0,ShowTextPtr
  18944.     MOVE.W  #4,TextLength
  18945.     BRA ShowText
  18946.  
  18947. ShowResamNote
  18948.     TST.W   SamScrEnable
  18949.     BEQ Return2
  18950.     MOVE.L  NoteNamesPtr,A4
  18951.     MOVE.W  #248*40+36,TextOffset
  18952.     MOVE.W  ResampleNote,D0
  18953.     LSL.W   #2,D0
  18954.     LEA (A4,D0.W),A0
  18955.     MOVE.L  A0,ShowTextPtr
  18956.     MOVE.W  #4,TextLength
  18957.     BRA ShowText
  18958.  
  18959. ;---- Graphics Data ----
  18960.  
  18961. FontSize    = 568
  18962. SpectrumAnaSize = 808
  18963. ScopeSize   = 1814
  18964. SureBoxSize = 1100
  18965. ClearBoxSize    = 1100
  18966. FormatBoxSize   = 1412
  18967. DirScreenSize   = 2861
  18968. PLSTSize    = 1728-8
  18969. Edit1Size   = 1748
  18970. Edit2Size   = 1902
  18971. Edit3Size   = 2145
  18972. SetupScreenSize = 5468
  18973. Setup2Size  = 5074
  18974. PresetEdSize    = 5161
  18975. SampScreenSize  = 3843
  18976. MonitorSize = 817
  18977. HelpScreenSize  = 900
  18978.  
  18979. FontData    INCBIN "raw/ptfont.raw"
  18980.     cnop 0,2
  18981. SpectrumAnaData INCBIN "pak/ptspectrumana.pak"
  18982.     cnop 0,2
  18983. ScopeData   INCBIN "pak/ptscope.pak"
  18984.     cnop 0,2
  18985. SureBoxData INCBIN "raw/ptsurebox.raw"
  18986.     cnop 0,2
  18987. ClearBoxData    INCBIN "raw/ptclearbox.raw"
  18988.     cnop 0,2
  18989. FormatBoxData   INCBIN "raw/ptformatbox.raw"
  18990.     cnop 0,2
  18991. DirScreenData   INCBIN "pak/ptfilereq.pak"
  18992.     cnop 0,2
  18993. PLSTData    INCBIN "pak/ptplst.pak"
  18994.     cnop 0,2
  18995. Edit1Data   INCBIN "pak/ptedit1.pak"
  18996.     cnop 0,2
  18997. Edit2Data   INCBIN "pak/ptedit2.pak"
  18998.     cnop 0,2
  18999. Edit3Data   INCBIN "pak/ptedit3.pak"
  19000.     cnop 0,2
  19001. SetupScreenData INCBIN "pak/ptsetup.pak"
  19002.     cnop 0,2
  19003. Setup2Data  INCBIN "pak/ptsetup2.pak"
  19004.     cnop 0,2
  19005. PresetEdData    INCBIN "pak/ptpreseted.pak"
  19006.     cnop 0,2
  19007. SampScreenData  INCBIN "pak/ptsampler.pak"
  19008.     cnop 0,2
  19009. MonitorData INCBIN "pak/ptmonitor.pak"
  19010.     cnop 0,2
  19011. HelpScreenData  INCBIN "pak/pthelpscreen.pak"
  19012.     cnop 0,2
  19013. VolBoxData  INCBIN "raw/ptvolbox.raw"
  19014. ToggleONdata    INCBIN "raw/PTToggleON.raw"
  19015. ToggleOFFdata   INCBIN "raw/PTToggleOFF.raw"
  19016. S_BoxData   INCBIN "raw/PTLetters.raw"
  19017.  
  19018. A_BoxData   EQU S_BoxData+22
  19019. T_BoxData   EQU S_BoxData+44
  19020. P_BoxData   EQU S_BoxData+66
  19021. H_BoxData   EQU S_BoxData+88
  19022. C_BoxData   EQU S_BoxData+110
  19023.  
  19024.  
  19025. ;************************** CHIP DATA HUNK **************************
  19026.  
  19027.     SECTION ptdata,DATA_C
  19028.  
  19029. BitplaneData    INCBIN "raw/PTMainScreen.raw"
  19030.  
  19031. TopMenusPos EQU BitPlaneData+55
  19032. SpectrumAnaPos  EQU BitPlaneData+1815
  19033. FormatBoxPos    EQU BitPlaneData+2090
  19034. SureBoxPos  EQU BitPlaneData+2100
  19035. SamScrPos   EQU BitPlaneData+4880
  19036. VolBoxPos   EQU BitPlaneData+6209
  19037.  
  19038. TToneData   ; Tuning Tone (Sine Wave)
  19039.     dc.b    0,  25,  49,  71,  91, 106, 118, 126
  19040.     dc.b  127, 126, 118, 106,  91,  71,  49,  25
  19041.     dc.b    0, -25, -49, -71, -91,-106,-118,-126
  19042.     dc.b -127,-126,-118,-106, -91, -71, -49, -25
  19043.  
  19044. CopList dc.w    $0120   ; Sprite 0 high
  19045.     dc.w    0
  19046.     dc.w    $0122   ; Sprite 0 low
  19047.     dc.w    0
  19048.     dc.w    $0124   ; Sprite 1 high
  19049.     dc.w    0
  19050.     dc.w    $0126   ; Sprite 1 low
  19051.     dc.w    0
  19052.     dc.w    $0128   ; Sprite 2 high
  19053.     dc.w    0
  19054.     dc.w    $012A   ; Sprite 2 low
  19055.     dc.w    0
  19056.     dc.w    $012C   ; Sprite 3 high
  19057.     dc.w    0
  19058.     dc.w    $012E   ; Sprite 3 low
  19059.     dc.w    0
  19060.     dc.w    $0130   ; Sprite 4 high
  19061.     dc.w    0
  19062.     dc.w    $0132   ; Sprite 4 low
  19063.     dc.w    0
  19064.     dc.w    $0134   ; Sprite 5 high
  19065.     dc.w    0
  19066.     dc.w    $0136   ; Sprite 5 low
  19067.     dc.w    0
  19068.     dc.w    $0138   ; Sprite 6 high
  19069.     dc.w    0
  19070.     dc.w    $013A   ; Sprite 6 low
  19071.     dc.w    0
  19072.     dc.w    $013C   ; Sprite 7 high
  19073.     dc.w    0
  19074.     dc.w    $013E   ; Sprite 7 low
  19075.     dc.w    0
  19076. CopListBitplanes
  19077.     dc.w    $00E0   ; Bitplane 0 high
  19078.     dc.w    0
  19079.     dc.w    $00E2   ; Bitplane 0 low
  19080.     dc.w    0
  19081.     dc.w    $00E4   ; Bitplane 1 high
  19082.     dc.w    0
  19083.     dc.w    $00E6   ; Bitplane 1 low
  19084.     dc.w    0
  19085.     dc.w    $00E8   ; Bitplane 2 high
  19086. NoteBplptrHigh
  19087.     dc.w    0
  19088.     dc.w    $00EA   ; Bitplane 2 low
  19089. NoteBplptrLow
  19090.     dc.w    0
  19091. CopListColors
  19092.     dc.w    $01A2   ; Color 17
  19093.     dc.w    $0AAA
  19094.     dc.w    $01A4   ; Color 18
  19095.     dc.w    $0888
  19096.     dc.w    $01A6   ; Color 19
  19097.     dc.w    $0666
  19098.     dc.w    $01A0   ; Color 16
  19099.     dc.w    0
  19100.     dc.w    $0180   ; Color 0
  19101. CopCol0 dc.w    0
  19102.     dc.w    $0182   ; Color 1
  19103.     dc.w    $0AAA
  19104.     dc.w    $0184   ; Color 2
  19105.     dc.w    $0777
  19106.     dc.w    $0186   ; Color 3
  19107.     dc.w    $0444
  19108.     dc.w    $0188   ; Color 4
  19109.     dc.w    $0CCC
  19110.     dc.w    $018A   ; Color 5
  19111.     dc.w    $0A00
  19112.     dc.w    $018C   ; Color 6
  19113.     dc.w    $0000
  19114.     dc.w    $018E   ; Color 7
  19115.     dc.w    $004D
  19116.     dc.w    $01AE   ; Color 23
  19117.     dc.w    $0A00
  19118.     dc.w    $01AA   ; Color 21
  19119.     dc.w    $0700
  19120.     dc.w    $01AC   ; Color 22
  19121.     dc.w    $0400
  19122.     dc.w    $008E   ; Display Window Start
  19123.     dc.w    $2C81   ; 2C / 81
  19124.     dc.w    $0090   ; Display Window Stop
  19125.     dc.w    $2CC1   ; 2C / C1
  19126.     dc.w    $0092   ; Display Data Fetch Start
  19127.     dc.w    $0038
  19128.     dc.w    $0094   ; Display Data Fetch Stop
  19129.     dc.w    $00D0
  19130.     dc.w    $0108
  19131.     dc.w    0
  19132.     dc.w    $010A
  19133.     dc.w    0
  19134.     dc.w    $0102   ; bplcon1
  19135.     dc.w    0
  19136.     dc.w    $0104   ; bplcon2
  19137.     dc.w    $0024
  19138.     dc.w    $2C07   ; Wait for line $2C, pos $07
  19139.     dc.w    $FFFE
  19140.     dc.w    $0100   ; bplcon0
  19141.     dc.w    $3200
  19142. CopListAnalyzer
  19143.     dcb.w   320,0
  19144. CopListInsPos
  19145.     dc.w    $B807   ; Wait for line $88, pos $07
  19146.     dc.w    $FFFE
  19147.     dc.w    $0100   ; bplcon0
  19148.     dc.w    $2200
  19149. CopListBpl4
  19150.     dc.w    $00E8   ; Bitplane 4 high
  19151.     dc.w    0
  19152.     dc.w    $00EA   ; Bitplane 4 low
  19153.     dc.w    0
  19154.     dc.w    $0188   ; Color 4
  19155. NoteCol dc.w    $004D
  19156.     dc.w    $B907   ; Wait for line $89, pos $07
  19157.     dc.w    $FFFE
  19158.     dc.w    $0100   ; bplcon0
  19159.     dc.w    $3200
  19160. CopListMark2   
  19161.     dcb.w   672,0
  19162.  
  19163.     dc.w    $E907   ; Wait for line $E9, pos $07
  19164.     dc.w    $FFFE
  19165.     dc.w    $010A   ; bpl2mod
  19166.     dc.w    $FFD8
  19167.     dc.w    $0108   ; bpl1mod
  19168.     dc.w    $FFD8
  19169.     dc.w    $EA07   ; Wait for line $EA, pos $07
  19170.     dc.w    $FFFE
  19171.     dc.w    $0104   ; bplcon2
  19172.     dc.w    $0010
  19173.     dc.w    $010A   ; bpl2mod
  19174.     dc.w    0
  19175.     dc.w    $0108   ; bpl1mod
  19176.     dc.w    0
  19177.     dc.w    $EB07   ; Wait for line $E8, pos $07
  19178.     dc.w    $FFFE
  19179.     dc.w    $010A   ; bpl2mod
  19180.     dc.w    $FFD8
  19181.     dc.w    $0108   ; bpl1mod
  19182.     dc.w    $FFD8
  19183.     dc.w    $EC07   ; Wait for line $EC, pos $07
  19184.     dc.w    $FFFE
  19185.     dc.w    $010A   ; bpl2mod
  19186.     dc.w    0
  19187.     dc.w    $0108   ; bpl1mod
  19188.     dc.w    0
  19189.     dc.w    $ED07   ; Wait for line $ED, pos $07
  19190.     dc.w    $FFFE
  19191.     dc.w    $010A   ; bpl2mod
  19192.     dc.w    $FFD8
  19193.     dc.w    $0108   ; bpl1mod
  19194.     dc.w    $FFD8
  19195.     dc.w    $EE07   ; Wait for line $EE, pos $07
  19196.     dc.w    $FFFE
  19197.     dc.w    $010A   ; bpl2mod
  19198.     dc.w    0
  19199.     dc.w    $0108   ; bpl1mod
  19200.     dc.w    0
  19201.     dc.w    $EF07   ; Wait for line $EF, pos $07
  19202.     dc.w    $FFFE
  19203.     dc.w    $010A   ; bpl2mod
  19204.     dc.w    $FFD8
  19205.     dc.w    $0108   ; bpl1mod
  19206.     dc.w    $FFD8
  19207.     dc.w    $F007   ; Wait for line $F0, pos $07
  19208.     dc.w    $FFFE
  19209.     dc.w    $010A   ; bpl2mod
  19210.     dc.w    0
  19211.     dc.w    $0108   ; bpl1mod
  19212.     dc.w    0
  19213.     dc.w    $F107   ; Wait for line $F1, pos $07
  19214.     dc.w    $FFFE
  19215.     dc.w    $010A   ; bpl2mod
  19216.     dc.w    $FFD8
  19217.     dc.w    $0108   ; bpl1mod
  19218.     dc.w    $FFD8
  19219.     dc.w    $F207   ; Wait for line $F2, pos $07
  19220.     dc.w    $FFFE
  19221.     dc.w    $010A   ; bpl2mod
  19222.     dc.w    0
  19223.     dc.w    $0108   ; bpl1mod
  19224.     dc.w    0
  19225.     dc.w    $F307   ; Wait for line $F3, pos $07
  19226.     dc.w    $FFFE
  19227.     dc.w    $010A   ; bpl2mod
  19228.     dc.w    $FFD8
  19229.     dc.w    $0108   ; bpl1mod
  19230.     dc.w    $FFD8
  19231.     dc.w    $F407   ; Wait for line $F4, pos $07
  19232.     dc.w    $FFFE
  19233.     dc.w    $010A   ; bpl2mod
  19234.     dc.w    0
  19235.     dc.w    $0108   ; bpl1mod
  19236.     dc.w    0
  19237.     dc.w    $F507   ; Wait for line $F5, pos $07
  19238.     dc.w    $FFFE
  19239.     dc.w    $010A   ; bpl2mod
  19240.     dc.w    $FFD8
  19241.     dc.w    $0108   ; bpl1mod
  19242.     dc.w    $FFD8
  19243.     dc.w    $F607   ; Wait for line $F6, pos $07
  19244.     dc.w    $FFFE
  19245.     dc.w    $010A   ; bpl2mod
  19246.     dc.w    0
  19247.     dc.w    $0108   ; bpl1mod
  19248.     dc.w    0
  19249.     dc.w    $01B2   ; Color 1
  19250.     dc.w    0
  19251.     dc.w    $01B4   ; Color 2
  19252.     dc.w    0
  19253.     dc.w    $01B6   ; Color 3
  19254.     dc.w    0
  19255.     dc.w    $01BA   ; Color 5
  19256.     dc.w    0
  19257.     dc.w    $01BC   ; Color 6
  19258.     dc.w    0
  19259.     dc.w    $01BE   ; Color 7
  19260.     dc.w    0
  19261.     dc.w    $FFDF   ; Wait for line $FF, pos $DF
  19262.     dc.w    $FFFE
  19263.     dc.w    $2907   ; Wait for line $29, pos $07
  19264.     dc.w    $FFFE
  19265.     dc.w    $0100   ; bplcon0
  19266.     dc.w    $2200
  19267.     dc.w    $2C07   ; Wait for line $2C, pos $07
  19268.     dc.w    $FFFE
  19269.     dc.w    $0100   ; bplcon0
  19270.     dc.w    $0200
  19271.     dc.w    $FFFF   ; Wait for line $FF, pos $FF
  19272.     dc.w    $FFFE   ; End of copperlist
  19273.  
  19274.  
  19275. CopList2
  19276.     dc.w    $B607   ; Wait for line $B6, pos $07
  19277.     dc.w    $FFFE
  19278.     dc.w    $0100   ; bplcon0
  19279.     dc.w    $2200
  19280. CopList2Bpl4Ptr
  19281.     dc.w    $00E8   ; Bitplane 4 high
  19282.     dc.w    0
  19283.     dc.w    $00EA   ; Bitplane 4 low
  19284.     dc.w    0
  19285.     dc.w    $0188   ; Color 4
  19286.     dc.w    $004D
  19287.     dc.w    $01B2   ; LoopSprite color
  19288.     dc.w    $00F0
  19289.     dc.w    $01BA   ; PlayPos Sprite color
  19290.     dc.w    $00FF
  19291.     dc.w    $B707   ; Wait for line $B7, pos $07
  19292.     dc.w    $FFFE
  19293.     dc.w    $0100   ; bplcon0
  19294.     dc.w    $3200
  19295.     dc.w    $FFDF   ; Wait for line $FF, pos $DF
  19296.     dc.w    $FFFE
  19297.     dc.w    $2907   ; Wait for line $29, pos $07
  19298.     dc.w    $FFFE
  19299.     dc.w    $0100   ; bplcon0
  19300.     dc.w    $2200
  19301.     dc.w    $2C07   ; Wait for line $2C, pos $07
  19302.     dc.w    $FFFE
  19303.     dc.w    $0100   ; bplcon0
  19304.     dc.w    $0200
  19305.     dc.w    $FFFF   ; Wait for line $FF, pos $FF
  19306.     dc.w    $FFFE   ; End of copperlist
  19307.  
  19308.  
  19309. PointerSpriteData
  19310.     dc.w    0,0
  19311.     dc.w    $FFFF,$FFFF,$8002,$FFFE,$BFF4,$C00C,$BFE8,$C018
  19312.     dc.w    $BFD0,$C030,$BFE8,$C018,$BFF4,$C00C,$BFFA,$C006
  19313.     dc.w    $BFFD,$C003,$BFFA,$C006,$B7F4,$C80C,$ABE8,$DC18
  19314.     dc.w    $95D0,$F630,$A2A0,$E360,$C140,$C1C0,$8080,$8080
  19315. NoSpriteData
  19316.     dc.w    0,0,0,0
  19317. CursorSpriteData
  19318.     dc.w    0,0
  19319.     dc.w    $FFE0,$FFE0,$FFE0,$FFE0,$8020,$0000,$8020,$0000
  19320.     dc.w    $8020,$0000,$8020,$0000,$8020,$0000,$8020,$0000
  19321.     dc.w    $8020,$0000,$8020,$0000,$8020,$0000,$8020,$0000
  19322.     dc.w    $0000,$FFE0,$0000,$FFE0
  19323.     dc.w    0,0
  19324. LineCurSpriteData
  19325.     dc.w    0,0,$0000,$FE00,$0000,$FE00,$0000,$0000,0,0
  19326. VUSpriteData1
  19327.     dc.w    $E95B,$EA01
  19328.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19329.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19330.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19331.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19332.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19333.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19334.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19335.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19336.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19337.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19338.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19339.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19340.     dc.w    0,0
  19341. VUSpriteData2
  19342.     dc.w    $E97F,$EA01
  19343.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19344.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19345.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19346.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19347.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19348.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19349.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19350.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19351.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19352.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19353.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19354.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19355.     dc.w    0,0
  19356. VUSpriteData3
  19357.     dc.w    $E9A3,$EA01
  19358.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19359.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19360.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19361.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19362.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19363.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19364.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19365.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19366.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19367.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19368.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19369.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19370.     dc.w    0,0
  19371. VUSpriteData4
  19372.     dc.w    $E9C7,$EA01
  19373.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19374.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19375.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19376.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19377.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19378.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19379.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19380.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19381.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19382.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19383.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19384.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19385.     dc.w    0,0
  19386. LoopSpriteData1
  19387.     dc.w 0,0
  19388.     dc.w $F000,0,$F000,0,$F000,0,$F000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19389.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19390.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19391.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$7000,0
  19392.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19393.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19394.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19395.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19396.     dc.w 0,0
  19397. LoopSpriteData2
  19398.     dc.w 0,0
  19399.     dc.w $F000,0,$F000,0,$F000,0,$F000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19400.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19401.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19402.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$E000,0
  19403.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19404.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19405.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19406.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19407.     dc.w 0,0
  19408. PlayPosSpriteData
  19409.     dc.w 0,0
  19410.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19411.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19412.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19413.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19414.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19415.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19416.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19417.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19418.     dc.w 0,0
  19419.  
  19420. ;******** BSS HUNK ********
  19421.  
  19422.     SECTION ptbss,BSS
  19423.  
  19424. FileInfoBlock   ds.b    256 ;,0
  19425. FIB_EntryType   EQU FileInfoBlock+4
  19426. FIB_FileName    EQU FileInfoBlock+8
  19427. FIB_FileSize    EQU FileInfoBlock+124
  19428. FIB_DateStamp   EQU FileInfoBlock+132
  19429.  
  19430. InfoData    ds.b    36
  19431. TopMenusBuffer  ds.b    2200
  19432. TextDataBuffer  ds.b    546  
  19433. TrackBuffer ds.b    256
  19434. CmdsBuffer  ds.b    256
  19435. BlockBuffer ds.b    256
  19436. PatternBuffer   ds.b    1024
  19437. UndoBuffer  ds.b    1024
  19438.  
  19439. TrackdiskIOExtTD
  19440.         ds.w    1
  19441.         ds.l    3
  19442. TDPortPtr   ds.l    1
  19443.         ds.w    1
  19444. Fmt_tja     ds.w    1
  19445.         ds.l    2
  19446.         ds.b    3
  19447. Fmt_hmmm    ds.b    1
  19448.         ds.w    1
  19449. FmtDataSize ds.w    2
  19450. FmtDataPtr  ds.w    2
  19451. FmtDiskOffset   ds.l    9
  19452.  
  19453. SplitTransTable ds.b    38
  19454. SplitInstrTable ds.b    38
  19455.  
  19456. ModulesPath2    ds.b    64
  19457. SongsPath2  ds.b    64
  19458. SamplePath2 ds.b    64
  19459.  
  19460.         ds.l    1
  19461.  
  19462. SetupData   ds.b    26
  19463. SongsPath   ds.b    32
  19464. ModulesPath ds.b    32
  19465. SamplePath  ds.b    32
  19466. PrintPath   ds.b    32
  19467. ColorTable  ds.w    8
  19468. PackMode    ds.b    1
  19469. ModPackMode ds.b    1
  19470. SplitFlag   ds.b    1
  19471. FilterFlag  ds.b    1
  19472. TransDelFlag    ds.b    1
  19473. ShowDecFlag ds.b    1
  19474. AutoDirFlag ds.b    1
  19475. AutoExitFlag    ds.b    1
  19476. ModOnlyFlag ds.b    1
  19477. MIDIFlag    ds.b    1
  19478. SplitData   ds.b    4
  19479.         ds.b    4
  19480.         ds.b    4
  19481.         ds.b    4
  19482. KeyRepDelay ds.w    1
  19483. KeyRepSpeed ds.w    1
  19484. Accidental  ds.b    1
  19485.         ds.b    1
  19486. ExtCommands ds.b    32*8 ; 256 bytes
  19487. MaxDirEntries   ds.w    1
  19488. MaxPLSTEntries  ds.w    1
  19489. MultiModeNext   ds.b    4
  19490. EffectMacros    ds.w    10
  19491. RAWIFFMode  ds.b    1
  19492. IntMode     ds.b    1
  19493. OverrideFlag    ds.b    1
  19494. NosamplesFlag   ds.b    1
  19495. BlankZeroFlag   ds.b    1
  19496. ShowDirsFlag    ds.b    1
  19497. ShowPublicFlag  ds.b    1
  19498. CutToBufFlag    ds.b    1
  19499. IFFLoopFlag ds.b    1
  19500. HHFlag      ds.b    1
  19501. Tempo       ds.w    1
  19502. DMAWait     ds.w    1
  19503. TuneNote    ds.w    1
  19504. TToneVol    ds.w    1
  19505. SalvageAddress  ds.b    8
  19506. PTPath      ds.b    32  ; 512 bytes
  19507. DefaultSpeed    ds.w    1
  19508. VUmeterColors   ds.w    48
  19509. AnalyzerColors  ds.w    40
  19510.         ds.b    302 ; Pad to 1024 bytes
  19511.  
  19512. HelpTextIndex   ds.l    256
  19513. HelpTextData    ds.b    656
  19514.  
  19515. InpEvPort   ds.b    34
  19516. InpEvIOReq  ds.b    48
  19517.  
  19518. ScopeInfo   ds.b    20*4
  19519. ScopeSamInfo    ds.b    16*31
  19520. BlankSample ds.b    320
  19521. FileName    ds.b    96
  19522. NewFileName ds.b    96
  19523. SampleFileName  ds.b    28
  19524. PresetNameText  ds.b    22
  19525. DirInputName    ds.b    30
  19526. NewInputName    ds.b    30
  19527. TempSampArea    ds.w    380
  19528. SaveColors  ds.w    40+48
  19529.  
  19530. END
  19531.  
  19532. ; /* End of File */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement