home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaMiscModsCD3.iso / _PROGRAMME / TRACKER / FutureComposer.lha / FutureComposer / SourceCodes / FUTURE2.S < prev    next >
Encoding:
Text File  |  1990-08-23  |  55.5 KB  |  3,136 lines

  1.  
  2. ********************************************
  3. *                                          *
  4. * THE FUTURE COMPOSER EDITOR FOR THE AMIGA *
  5. * WRITTEN BY BANSAI ON 25/08/90!   1 MB OF *
  6. * CHIP RAM  IS HIGHLY RECOMMENDED  AS THIS *
  7. * PROGGY MUST RUN  FROM CHIP RAM!  WELCOME *
  8. * TO THE NEVER-ENDING SOURCE CODE...  100% *
  9. * MC68000  FUN.     OVER  3000+  LINES  OF *
  10. * ASSEMBLY-LANGUAGE ECSTACY     -BSI 1990! *
  11. * ASSEMBLE   WITH   THE   SEKA   EDITOR... *
  12. * FINALLY I CAN GET SOME SLEEP....   YEAH! *
  13. *                                          *
  14. ********************************************
  15.  
  16. BEGIN:    BRA START
  17.  
  18. ; //// DO NOT INSERT ANYTHING HERE AS THE FILE INF MUST BE
  19. ;      ON A LONGWORD BOUNDARY!!! ////
  20.  
  21. FILEINF:BLK.L 260,0
  22.  
  23. ********** THE ALMIGHTY COPPER LIST **********
  24.  
  25. COPLIST:DC.L $2B01FFFE,$01800000,$018200C0
  26.     DC.L $01A20FFF,$01A40008,$01A60FFF ; COLORS FOR SPR 0/1
  27.     DC.L $01AA0FFF,$01AC0008,$01AE0FFF ; COLORS FOR SPR 2/3
  28.     DC.L $01440000,$01460000
  29.     DC.L $008E0581,$01000200,$01040024,$009040C1
  30.     DC.L $00920038,$009400D0,$01020000,$01080000,$010A0000
  31. PLAN1H:    DC.L $00E00000
  32. PLAN1L:    DC.L $00E20000
  33.     DC.L $2C01FFFE,$01001200
  34. RAS182:    BLK.B 200*8,0    ; COLORS GO HERE...
  35.     DC.L $01000200
  36.     DC.L $00960020
  37.     DC.L $FFFFFFFE
  38.  
  39. BACKRAS:DC.W $0022,$0044,$0066,$0088
  40.     DC.W $00AA,$00CC,$00EE,$00EE
  41.  
  42. RASVAL:    DC.L $01820000
  43. RASWT:    DC.L $2D01FFFE
  44.  
  45. COPDO:    MOVE.B #$2D,RASWT        ; FIX R182 COLORS...
  46.     MOVE.W #199,D0
  47.     LEA RAS182,A0
  48.     LEA BACKRAS,A1
  49.     CLR.L D1
  50. R182LP:    MOVE.W (A1,D1.W),RASVAL+2
  51.     MOVE.L RASVAL,(A0)+
  52.     ADDI.W #2,D1
  53.     ANDI.W #15,D1
  54.     MOVE.L RASWT,(A0)+
  55.     ADDI.B #1,RASWT
  56.     DBF D0,R182LP
  57.  
  58.     MOVE.L #BPL,D0
  59.     MOVE.W D0,PLAN1L+2
  60.     SWAP D0
  61.     MOVE.W D0,PLAN1H+2
  62.     MOVE.L #COPLIST,$DFF080
  63.     MOVE.W #0,$DFF088
  64.     RTS
  65. OLDCOP:    MOVE.L GRBAS,A4
  66.     MOVE.L 38(A4),$DFF080
  67.     MOVE.W #0,$DFF088
  68.     RTS
  69.  
  70. ********** READ DIRECTORY **********
  71.  
  72. DCHR:    DC.B "(DIR)  ",0
  73. DRSPAC:    DC.B 13,"PRESS SPACE TO RETURN TO MENU..."
  74. SPAC:    DC.B " ",0
  75.  
  76. DRPATH:    DC.B "DRIVE:PATH1/PATH2/ETC",13,">",0
  77.     EVEN
  78.  
  79. DIRECT:    BSR CLS
  80.     LEA DRPATH,A0
  81.     BSR PRINT
  82.     MOVE.W #79,D0
  83.     JSR INPUT
  84.     TST.B D0
  85.     BEQ LDRMENU
  86.     LEA RETCHAR,A0
  87.     BSR PRINT
  88.     MOVE.L DBASE,A6
  89.     MOVE.L #INBUFF,D1
  90.     MOVE.L #-2,D2
  91.     JSR -84(A6)
  92.     TST.L D0
  93.     BEQ DERROR
  94.     MOVE.L D0,LOCKSAV
  95.     MOVE.L DBASE,A6
  96.     MOVE.L LOCKSAV,D1
  97.     MOVE.L #FILEINF,D2
  98.     JSR -102(A6)
  99.     TST.L D0
  100.     BEQ DERROR
  101.     BRA OUTPUFF
  102. DIRLOOP:MOVE.L DBASE,A6
  103.     MOVE.L LOCKSAV,D1
  104.     MOVE.L #FILEINF,D2
  105.     JSR -108(A6)
  106.     TST.L D0
  107.     BEQ DERROR
  108. OUTPUFF:TST.L FILEINF+4
  109.     BMI SLAPHEX
  110.     LEA DCHR,A0
  111.     BSR PRINT
  112.     BRA NAMSLAP
  113. SLAPHEX:MOVE.L FILEINF+124,D0
  114.     JSR LONGCON
  115.     LEA 2+LONG,A0
  116.     JSR PRINT
  117.     LEA SPAC,A0
  118.     BSR PRINT
  119. NAMSLAP:MOVE.L #8+FILEINF,A0
  120.     BSR UCASER
  121.     MOVE.L #8+FILEINF,A0
  122.     JSR PRINT
  123. DOUTREC:LEA RETCHAR,A0
  124.     JSR PRINT
  125.     BRA DIRLOOP
  126. DERROR:    MOVE.L DBASE,A6
  127.     JSR -132(A6)    ; IF D0=232, OK...
  128.     LEA DRSPAC,A0
  129.     JSR PRINT
  130.     JSR SPACEWT
  131.     JMP LDRMENU
  132.  
  133. LOCKSAV:DC.L 0
  134.  
  135. ********** LOWER TO UPPERCASE (PTR IN A0) **********
  136.  
  137. UCASER:    MOVEM.L D0/A0,-(A7)
  138.     CLR.W D0
  139. UCLOOP:    MOVE.B (A0),D0
  140.     CMPI.W #96,D0
  141.     BLT UCOK
  142.     CMPI.W #122,D0
  143.     BGT UCOK
  144.     SUBI.W #32,D0
  145. UCOK:    MOVE.B D0,(A0)+
  146.     TST.B D0
  147.     BNE UCLOOP
  148.     MOVEM.L (A7)+,D0/A0
  149.     RTS
  150.  
  151. ********** PROGRAM MAIN ENTRY **********
  152.  
  153. START:    MOVE.L $6C,OLDCOPR
  154.     JSR COPDO
  155.     JSR OWNBL
  156.     BSR MOTROFF
  157.     MOVE.W #$8020,$dff096
  158.     CLR.L D2
  159. FREEALL:JSR DALLOC    
  160.     ADDQ #1,D2
  161.     CMPI.B #$3F,D2
  162.     BNE FREEALL
  163.     JSR OLDCOP
  164.     JSR DISOWN
  165.     JSR VCLOSE
  166.     CLR.L D0
  167.     RTS
  168.  
  169. GRBAS:    DC.L 0
  170. DBASE:    DC.L 0
  171. GRNAM:    DC.B "graphics.library",0
  172.     EVEN
  173. DOSNAM:    DC.B "dos.library",0
  174.     EVEN
  175. OWNBL:    MOVE.L 4,A6
  176.     LEA DOSNAM,A1
  177.     CLR.L D0
  178.     JSR -552(A6)
  179.     MOVE.L D0,DBASE
  180.     JSR VOPEN
  181.     MOVE.L 4,A6
  182.     MOVE.L #GRNAM,A1
  183.     CLR.L D0
  184.     JSR -30-522(A6)
  185.     MOVE.L D0,A6
  186.     MOVE.L A6,GRBAS
  187.     JSR -30-426(A6)
  188.     MOVE.L 4,A6
  189.     JSR -30-102(A6)
  190.     RTS
  191. DISOWN:    BTST #14,$DFF002
  192.     BNE DISOWN
  193.     MOVE.L GRBAS,A6
  194.     JSR -30-432(A6)
  195.     MOVE.L 4,A6
  196.     JSR -30-108(A6)
  197.     MOVE.L 4,A6
  198.     MOVE.L GRBAS,A1
  199.     JSR -414(A6)
  200.     MOVE.L DBASE,A1
  201.     JSR -414(A6)
  202.     RTS
  203.  
  204. **************************************************************
  205. *
  206. * AMIGA RAWKEY -> ASCII KEYBOARD DRIVER
  207. * ASCII RETURNED IN D0 AND CHV...
  208. *
  209. **************************************************************
  210.  
  211. GET:    MOVE.L A0,A0STORE
  212. GETT:    MOVE.L $DFF004,D0    ; APPROPRIATE WAIT...
  213.     AND.L #$F00,D0
  214.     BNE GETT
  215.     BRA GETA
  216.  
  217. A0STORE:DC.L 0
  218. OLDVCH:    DC.B $C4
  219. CHV:    DC.B 0
  220. RPCNT:    DC.B 0
  221. RFLAG:    DC.B 0
  222. SHIFLAG:DC.B 0
  223.     EVEN
  224.  
  225. GETA:    MOVE.B $BFEC01,D0
  226.     NOT D0
  227.     ROR.B #1,D0
  228.     ANDI.W #$FF,D0
  229.     BTST #7,D0
  230.     BNE RELEASE
  231.     CMP.B OLDVCH,D0
  232.     BNE RELEASE
  233.     ADDI.B #1,RPCNT
  234.     TST.B RFLAG
  235.     BEQ RPNEW
  236.     CMPI.B #50,RPCNT    ; BETWEEN REP CHARS...
  237.     BEQ NEWCH
  238. NULLCH:    MOVE.B #$6F,D0
  239.     BRA SHTST
  240. RPNEW:    CMPI.B #250,RPCNT    ; INITIAL WAIT
  241.     BNE NULLCH
  242.     MOVE.B #1,RFLAG
  243.     CLR.B RPCNT
  244.     BRA SHTST
  245. RELEASE:CLR.B RFLAG
  246. NEWCH:    CLR.B RPCNT
  247.     MOVE.B D0,OLDVCH
  248. SHTST:    CMPI.B #$60,D0
  249.     BEQ ASHIF
  250.     CMPI.B #$61,D0
  251.     BEQ ASHIF
  252.     CMPI.B #$E0,D0
  253.     BEQ KSHIF
  254.     CMPI.B #$E1,D0
  255.     BEQ KSHIF
  256. GCHTAB:    BTST #7,D0
  257.     BEQ GCHB
  258.     MOVE.B #$6F,D0
  259. GCHB:    LEA UKTAB,A0
  260.     TST.B SHIFLAG
  261.     BEQ GCHA
  262.     LEA SKTAB,A0
  263. GCHA:    ANDI.W #$7F,D0
  264.     MOVE.B (A0,D0.W),D0
  265.     TST.B SHIFLAG
  266.     BNE GCHEX
  267.     CMPI.B #"a",D0
  268.     BLT GCHEX
  269.     CMPI.B #"z",D0
  270.     BGT GCHEX
  271.     SUBI.B #32,D0
  272. GCHEX:    MOVE.B D0,CHV
  273.     MOVE.L A0STORE,A0
  274.     RTS
  275. ASHIF:    MOVE.B #1,SHIFLAG
  276.     BRA GCHTAB
  277. KSHIF:    CLR.B SHIFLAG
  278.     BRA GCHTAB
  279.  
  280. ********** USA1 KEYMAPS **********
  281. * NOTE: F1-F10 ARE 128-137
  282. * HELP=138, RT=28, LFT=29, UP=30, DN=31
  283. * ESC=27, BSK=8 TAB=9, SHTAB=12
  284. * ENT=13, SHENT=10
  285. ********** USA1 KEYMAPS **********
  286.  
  287. UKTAB:    DC.B "`1234567890-=\",0,"0"
  288.     DC.B "qwertyuiop[]",0,"123"
  289.     DC.B "asdfghjkl;'",0,0,"456"
  290.     DC.B 0,"zxcvbnm,./",0,".789"
  291.     DC.B 32,8,9,13,13,27,127,0,0,0,"-",0,30,31,28,29
  292.     DC.B 128,129,130,131,132,133,134,135,136,137,"()/*+",138
  293.     DC.B 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  294.  
  295. SKTAB:    DC.B "~!@#$%^&*()_+|",0,"0"
  296.     DC.B "QWERTYUIOP{}",0,"123"
  297.     DC.B "ASDFGHJKL:",34,0,0,"456"
  298.     DC.B 0,"ZXCVBNM<>?",0,".789"
  299.     DC.B 32,8,12,10,10,27,127,0,0,0,"-",0,30,31,28,29
  300.     DC.B 128,129,130,131,132,133,134,135,136,137,"()/*+",138
  301.     DC.B 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  302.  
  303. ********** HEX TO 2 CHAR CONVERTER **********
  304.  
  305. HX:    DC.B "  ",0
  306.     EVEN
  307. HEX:    DC.B "0123456789ABCDEF"
  308. HXCONV:    MOVEM.L D0-D1/A0-A1,-(A7)
  309.     MOVE.B D0,D1
  310.     ANDI.W #$0F,D0
  311.     LSR.B #4,D1
  312.     ANDI.W #$0F,D1
  313.     LEA HEX,A0
  314.     MOVE.B (A0,D1.W),HX
  315.     MOVE.B (A0,D0.W),HX+1
  316.     MOVEM.L (A7)+,D0-D1/A0-A1
  317.     RTS
  318.  
  319. ********** PRINT CHR$(D0) AT CX,CY **********
  320.  
  321. CX:    DC.B 0
  322. CY:    DC.B 0
  323. PRCH:    MOVEM.L D0-D2/A0-A1,-(A7)
  324.     ANDI.L #$FF,D0
  325.     ASL.L #3,D0
  326.     LEA FONT,A0
  327.     ADD.L D0,A0
  328.     CLR.L D1
  329.     CLR.L D2
  330.     MOVE.B CX,D1
  331.     MOVE.B CY,D2
  332.     MULU #320,D2
  333.     LEA BPL,A1
  334.     ADD.L D1,D2
  335.     ADD.L D2,A1
  336.     MOVE.B (A0)+,(A1)
  337.     MOVE.B (A0)+,40(A1)
  338.     MOVE.B (A0)+,80(A1)
  339.     MOVE.B (A0)+,120(A1)
  340.     MOVE.B (A0)+,160(A1)
  341.     MOVE.B (A0)+,200(A1)
  342.     MOVE.B (A0)+,240(A1)
  343.     MOVE.B (A0)+,280(A1)
  344.     MOVEM.L (A7)+,D0-D2/A0-A1
  345.     RTS
  346.  
  347. ********** PRINT STRING AT (A0) **********
  348.  
  349. PRINT:    MOVEM.L D0/A0,-(A7)
  350. PRLOOP:    MOVE.B (A0)+,D0
  351.     CMPI.B #13,D0
  352.     BEQ PRET
  353.     TST.B D0
  354.     BEQ PREX
  355.     ANDI.B #$3F,D0
  356.     BSR PRCH
  357.     ADDQ.B #1,CX
  358.     CMPI.B #40,CX
  359.     BNE PRLOOP
  360. PRET:    CLR.B CX
  361.     ADDQ.B #1,CY
  362.     CMPI.B #25,CY
  363.     BNE PRLOOP
  364.     MOVE.B #24,CY
  365.     BSR SCROLL
  366.     BRA PRLOOP
  367. PREX:    MOVEM.L (A7)+,D0/A0
  368.     RTS
  369.  
  370. ********** SCROLL UP A LINE (PREV ROUT CALLS THIS) **********
  371.  
  372. SCROLL:    MOVEM.L D0/A0-A1,-(A7)
  373.     LEA BPL,A1
  374.     LEA BPL+320,A0
  375.     MOVE.W #1919,D0
  376. SCRLP:    MOVE.L (A0)+,(A1)+
  377.     DBF D0,SCRLP
  378.     MOVE.W #79,D0
  379. SCRCL:    CLR.L (A1)+
  380.     DBF D0,SCRCL
  381.     MOVEM.L (A7)+,D0/A0-A1
  382.     RTS
  383.  
  384. ********** CLEAR THE SCREEN **********
  385.  
  386. CLS:    MOVEM.L D0/A0,-(A7)
  387.     MOVE.W #1999,D0
  388.     LEA BPL,A0
  389. CLSLP:    CLR.L (A0)+
  390.     DBF D0,CLSLP
  391.     CLR.B CX
  392.     CLR.B CY
  393.     MOVEM.L (A7)+,D0/A0
  394.     RTS
  395.  
  396. ********** DRAW THE EDITOR SCREEN **********
  397.  
  398. DRAWED:    LEA PTRK0,A0
  399.     BSR PRINT
  400.     BSR BTRK
  401.     LEA PTRK1,A0
  402.     BSR PRINT
  403.     BSR BTRK
  404.     LEA PTRK2,A0
  405.     BSR PRINT
  406.     BSR BTRK
  407.     LEA PTRK3,A0
  408.     BSR PRINT
  409.     BSR BTRK
  410.     LEA TREND,A0
  411.     BSR PRINT
  412.     BSR HEXSHOW
  413.     RTS
  414.  
  415. ********** UPDATE ALL HEX EN MASSE **********
  416.  
  417. HEXSHOW:MOVEM.L D0-D4/A0-A1,-(A7)
  418.     MOVE.W TR0P,D0
  419.     MOVE.B #1,D4
  420.     LEA TRK0,A1
  421.     JSR HEXTRK
  422.     MOVE.W TR1P,D0
  423.     MOVE.B #7,D4
  424.     LEA TRK1,A1
  425.     JSR HEXTRK
  426.     MOVE.W TR2P,D0
  427.     MOVE.B #13,D4
  428.     LEA TRK2,A1
  429.     JSR HEXTRK
  430.     MOVE.W TR3P,D0
  431.     MOVE.B #19,D4
  432.     LEA TRK3,A1
  433.     JSR HEXTRK
  434.     MOVEM.L (A7)+,D0-D4/A0-A1
  435.     RTS
  436.  
  437. ********** SPACING BETWEEN TRACK HEADERS **********
  438.  
  439. BTRK:    MOVEQ #4,D0
  440. BTLP:    LEA BLTRK,A0
  441.     BSR PRINT
  442.     DBF D0,BTLP
  443.     RTS
  444.  
  445.  
  446. PTRK0:    DC.B "+-TRK1---------------------+-BLOCK:**-+",13,0
  447. PTRK1:    DC.B "+-TRK2---------------------:          :",13,0
  448. PTRK2:    DC.B "+-TRK3---------------------:          :",13,0
  449. PTRK3:    DC.B "+-TRK4---------------------:          :",13,0
  450. TREND:    DC.B "+--FUTURE COMPOSER BY BSI--+-BLPOS:**-+",0
  451. BLTRK:    DC.B ":  :                       :          :"
  452. RETCHAR:DC.B 13,0
  453.     EVEN
  454.  
  455. ********** PRINT HEX VALS FOR TRACKS **********
  456. * D0=BYTE OFFSET                              *
  457. * A1=POINTER                                  *
  458. * D4=CY VALUE                                 *
  459. ********** PRINT HEX VALS FOR TRACKS **********
  460.  
  461. HEXTRK:    MOVEM.L D0-D4/A0-A1,-(A7)
  462.     MOVE.W D0,D2    ; D2 SAVES BEGINNING POS...
  463.     MOVE.B D4,CY
  464.     MOVEQ #4,D1
  465. TRPLPA:    MOVE.B #1,CX    
  466.     JSR HXCONV
  467.     LEA HX,A0
  468.     JSR PRINT
  469.     ADDQ.B #8,D0
  470.     ADDI.B #1,CY
  471.     DBF D1,TRPLPA
  472.     
  473.     MOVEQ #4,D3
  474.     MOVE.B D4,CY
  475. TRLPB:    MOVE.B #4,CX
  476. TRLPC:    MOVE.B (A1,D2.W),D0    
  477.     BSR HXCONV
  478.     LEA HX,A0
  479.     BSR PRINT
  480.     ADDQ.W #1,D2
  481.     ADDI.B #1,CX
  482.     CMPI.B #28,CX
  483.     BNE TRLPC
  484.     ADDI.B #1,CY
  485.     DBF D3,TRLPB
  486.     MOVEM.L (A7)+,D0-D4/A0-A1
  487.     RTS
  488.  
  489. ********** LONG INT IN D0.L STRING IN "LONG" **********
  490.  
  491. HXER:    DC.L 0
  492. LONG:    BLK.B 9,0
  493.     EVEN
  494. LONGCON:MOVEM.L D0-D1/A0-A1,-(A7)
  495.     CLR.L D1    
  496.     MOVE.L D0,HXER
  497.     LEA LONG,A0
  498.     LEA HXER,A1
  499. LENLOO2:MOVE.B (A1,D1.W),D0
  500.     BSR HXCONV
  501.     MOVE.W HX,(A0)+
  502.     ADDI.W #1,D1
  503.     CMPI.W #4,D1
  504.     BNE LENLOO2
  505.     MOVEM.L (A7)+,D0-D1/A0-A1
  506.     RTS
  507.  
  508. ********** THE MENU SCREEN **********
  509.  
  510. MENUSCR:DC.B "  FUTURE COMPOSER (W)1990 BY BSI LABS!",13
  511.     DC.B "PRODUCED BY THE AMIGA PRIVATEERS SOCIETY"
  512.     DC.B "----------------------------------------"
  513.     DC.B "PRESS:",13
  514.     DC.B "A) FC EDITOR",13
  515.     DC.B "B) LOAD / SAVE / DIRECTORY / ETC",13
  516.     DC.B "C) GREETINGS",13    
  517.     DC.B "D) NTSC (60HZ)",13
  518.     DC.B "E) PAL  (50HZ)",13
  519.     DC.B "F) INSTRUCTIONS",13
  520.     DC.B "G) EXIT TO CLI",13
  521.     DC.B "----------------------------------------"
  522.     DC.B "ANOTHER MIDNIGHT CODER SPECIAL BY BANSAI"
  523.     DC.B "FOR THE AMIGA PRIVATEERS SOCIETY AND THE"
  524.     DC.B "INFOMANIACS!    (MAKE YOUR SELECTION...)",13
  525. CHIPPER:DC.B "AVAIL CHIP:        ",13
  526. FASTTER:DC.B "AVAIL FAST:        ",13,13
  527.     DC.B "----------------------------------------",0
  528.     EVEN
  529.  
  530. ARUSURE:DC.B 13,13,"ARE YOU SURE? (Y/N)",0
  531.  
  532. MENU:    JSR MUSOFF    ; JUST IN CASE THEY FORGOT...
  533.     CLR.W HILO
  534.     BSR CLS
  535.     MOVEQ #2,D1
  536.     MOVE.L 4,A6
  537.     JSR -216(A6)
  538.     BSR LONGCON
  539.     LEA CHIPPER+11,A0
  540.     LEA LONG,A1
  541.     MOVEQ #7,D0
  542. AVCHPLP:MOVE.B (A1,D0.W),(A0,D0.W)
  543.     DBF D0,AVCHPLP    
  544.     MOVEQ #4,D1
  545.     MOVE.L 4,A6
  546.     JSR -216(A6)
  547.     BSR LONGCON
  548.     LEA FASTTER+11,A0
  549.     LEA LONG,A1
  550.     MOVEQ #7,D0
  551. AVFASLP:MOVE.B (A1,D0.W),(A0,D0.W)
  552.     DBF D0,AVFASLP    
  553.     LEA MENUSCR,A0
  554.     BSR PRINT
  555.  
  556. MENULP:    BSR GET
  557.     TST.B D0
  558.     BEQ MENULP
  559.     CMPI.B #"A",D0
  560.     BEQ ED
  561.     CMPI.B #"D",D0
  562.     BEQ NTSC
  563.     CMPI.B #"E",D0
  564.     BEQ PAL
  565.     CMPI.B #"F",D0
  566.     BEQ INSTRUC
  567.     CMPI.B #"G",D0
  568.     BEQ MENUEX
  569.     CMPI.B #"B",D0
  570.     BEQ LDRMENX
  571.     CMPI.B #"C",D0
  572.     BEQ DOGREET
  573.     BRA MENULP
  574. MENUEX:    LEA ARUSURE,A0
  575.     BSR PRINT
  576. RSGET:    BSR GET
  577.     TST.B D0    
  578.     BEQ RSGET
  579.     CMPI.B #"Y",D0
  580.     BEQ MENUBYE
  581.     CMPI.B #"N",D0
  582.     BNE RSGET
  583.     BRA MENU
  584. MENUBYE:RTS
  585.  
  586. NTSC:    MOVE.W #$00,$DFF1DC
  587.     BRA MENULP
  588.  
  589. PAL:    MOVE.W #$20,$DFF1DC
  590.     BRA MENULP
  591.  
  592. ********** INSTRUCTIONS **********
  593.  
  594. INTEXT:    DC.B "IN THE EDITOR (HEX EDIT):",13,13
  595.     DC.B "PRESS F1-F4 TO EDIT TRACKS 1-4.  THIS",13
  596.     DC.B "ALSO HOMES THE TRACK CURSOR TO 00. YOU",13
  597.     DC.B "HAVE 256 BYTES PER TRACK.  BYTES ARE:",13,13
  598.     DC.B "00-3F = BLOCK # TO PLAY",13
  599.     DC.B "40-7F = REPEAT NEXT VAL XX-3F TIMES",13
  600.     DC.B "80-A3 = TRANSPOSE XX-80 HALF STEPS",13
  601.     DC.B "C0-C1 = FILTER ON-OFF",13
  602.     DC.B "FC XX = SET VOL FOR THIS TRACK (00-3F)",13
  603.     DC.B "FD XX = GOTO BYTE XX IN THIS TRACK",13
  604.     DC.B "FE    = END SONG",13
  605.     DC.B "FF    = RESTART THIS TRACK",13,13
  606.     DC.B "NOTE THAT SINCE YOU INDICATE BLOCKS TO",13
  607.     DC.B "BE PLAYED AS WELL AS REPEAT VALUES WHICH"
  608.     DC.B "MAY BE EXECUTED INDEPENDENTLY OF THE",13
  609.     DC.B "OTHER VOICES, LONG SONGS AS WELL AS",13
  610.     DC.B "REPETITIOUS SONG PARTS MAY BE CREATED",13
  611.     DC.B "WITH EASE.",13,13
  612.     DC.B "(CONTINUED... PRESS SPACE)",0
  613.  
  614. INTEX1A:DC.B "ESCAPE RETURNS YOU TO THE MAIN MENU",13
  615.     DC.B "WHILE IN THE HEX EDITOR. NOTE THAT ",13
  616.     DC.B "SHIFT-ENT IS INSERT A BYTE, AND DEL",13
  617.     DC.B "DELETES ONE.  BACKSPACE ACTS AS A",13
  618.     DC.B "CURSOR LEFT.",13,13
  619.     DC.B "PRESS THE FOLLOWING TO HEAR THE TUNE:",13
  620.     DC.B "F8 - START TUNE FROM BEGINNING",13
  621.     DC.B "F10- STOP TUNE",13
  622.     DC.B "F9 - CONTINUE TUNE FROM STOP POINT",13,13
  623.     DC.B "NOTE THAT THE ABOVE KEYS ARE ALSO",13
  624.     DC.B "ACTIVE IN THE BLOCK EDITOR.",13,13
  625.     DC.B "TO KEEP THE MUSIC DRIVER FROM GOING",13
  626.     DC.B "INTO AN ENDLESS LOOP, IT WILL DISABLE",13
  627.     DC.B "ITSELF IF MORE THAN 512 ITEMS ARE",13
  628.     DC.B "PROCESSED IN ANY TRACK DURING 1/60",13
  629.     DC.B "SECOND.  512 IS IMPOSSIBLE TO ATTAIN",13
  630.     DC.B "DURING NORMAL SONGPLAY.",13,13
  631.     DC.B "(IS THIS CLOSE TO FC64 OR WHAT?!?",13
  632.     DC.B "PRESS SPACE FOR MORE...)",0
  633.     EVEN
  634.  
  635. INTEX1B:DC.B "THE EQUALIZER",13
  636.     DC.B "-------------",13,13
  637.     DC.B "WHILE A SONG IS PLAYING, YOU WILL SEE",13
  638.     DC.B "A FOUR TRACK EQUALIZER IN THE TRACK 1",13
  639.     DC.B "WORKSPACE.  THE TOP 40% COMPRISES THE",13
  640.     DC.B "ANALOG EQUALIZER, AND THE LOWER 60%",13
  641.     DC.B "CONTAIN THE FOLLOWING INFORMATION FOR",13
  642.     DC.B "EACH TRACK:",13,13
  643.     DC.B "CURRENT BLOCK# BEING PLAYED (00-3F)",13
  644.     DC.B "POSITION IN THAT BLOCK (I.E. BLPOS)",13
  645.     DC.B "COUNTDOWN UNTIL NEXT NOTE (I.E. DUR)",13,13
  646.     DC.B "YOU MAY PRESS THE LEFT MOUSE BUTTON",13
  647.     DC.B "TO SPEED THE SONG TO FIVE TIMES",13
  648.     DC.B "NORMAL SPEED.  THE RIGHT BUTTON WILL",13
  649.     DC.B "TOGGLE THE EQUALIZER DISPLAY ON AND",13
  650.     DC.B "OFF SO YOU MAY EDIT TRACK 1 WHILE",13
  651.     DC.B "YOUR TUNE IS PLAYING.",13,13
  652.     DC.B "(TRICK, EH?  HIT SPACE...)",0
  653.  
  654. INTEXT2:DC.B "PRESS ",34,"*",34," TO ENTER THE BLOCK EDITOR...",13
  655.     DC.B "...IT ALSO TOGGLES BACK TO MAIN EDITOR",13
  656.     DC.B 13
  657.     DC.B "*END!*   MARKS THE END OF A MUSIC BLOCK",13
  658.     DC.B "         (253 STEPS MAX-NOT DISP ON FD!)"
  659.     DC.B "SND.XX   SUBSEQUENT NOTES USE DIGI XX",13
  660.     DC.B "         (00-3E:AS DEFINED IN SOUND LDR)"
  661.     DC.B "DUR.XX   PLAY DIGI FOR (00-3F) JIFFIES",13
  662.     DC.B "         (00 IS ACTUALLY 40)",13
  663.     DC.B "MOD.XX   MODIFY/DETUNE PERIOD +2*(00-3C)"
  664.     DC.B "TEM.XX   SELECT TEMPO 00-0F. 02=NORMAL",13,13
  665.     DC.B "NOTES PLAYABLE ARE C-0 THROUGH B-3.",13
  666.     DC.B "FLATS NOT SUPPORTED. USE SHARPS INSTEAD:"
  667.     DC.B "I.E. A#2 RATHER THAN B FLAT 2.",13,13
  668.     DC.B "CURSOR KEYS FUNCTION AS IN THE HEX",13
  669.     DC.B "EDITOR.  PRESS DEL TO DELETE CURRENT",13
  670.     DC.B "LINE, SHIFT-ENTER TO INSERT. ANY UP,",13
  671.     DC.B "DOWN, ENTER, SHIFT-ENTER, OR * WILL",13
  672.     DC.B "AUTOMATICALLY ENTER THE LINE.",13,13
  673.     DC.B "(SPACE FOR MORE...)",13,13
  674.     DC.B "NOT JUST ANOTHER MUSIC PROGGY...",0
  675.     EVEN    
  676.  
  677. INTEX2A:DC.B "USING GLIDE WITH MOD.",13
  678.     DC.B "---------------------",13,13
  679.     DC.B "NORMALLY, MOD WILL DETUNE THE FOLLOWING",13
  680.     DC.B "NOTES BY 2 TIMES THE PARAMETER FOLLOWING"
  681.     DC.B "IT.  (00-3C)  HOWEVER, VALUES 3D-3F HAVE"
  682.     DC.B "SPECIAL FUNCTIONS:",13,13
  683.     DC.B "MOD.3D  -  GLIDE DOWN",13
  684.     DC.B "MOD.3E  -  NO GLIDE",13
  685.     DC.B "MOD.3F  -  GLIDE UP",13,13
  686.     DC.B "NOTE THAT YOU SHOULD EITHER PRECEDE OR",13
  687.     DC.B "FOLLOW THE ABOVE MOD STATEMENTS WITH",13
  688.     DC.B "ANOTHER MOD STATEMENT (00-3C) THAT",13
  689.     DC.B "INDICATES THE GLIDE UP/DOWN VALUES.",13,13
  690.     DC.B "NOTE THAT AFTER A MOD.3E, YOU SHOULD",13
  691.     DC.B "FOLLOW IT WITH A MOD.00 TO CANCEL",13
  692.     DC.B "DETUNING IF IT IS NOT DESIRED.",13,13
  693.     DC.B "(HIT THE LONG FURRY ONE...)",0
  694.  
  695. INTEXT3:DC.B "BLOCK EDITOR (CONTINUED):",13
  696.     DC.B "-------------------------",13,13
  697.     DC.B "NOTE THAT YOU NEED NOT TYPE THE WHOLE",13
  698.     DC.B "CONTROL NAME CORRECTLY AS THE FIRST",13
  699.     DC.B "CHAR AND THE HEX DIGITS IN COLUMNS",13
  700.     DC.B "FOUR AND FIVE (FROM ZERO) ARE",13
  701.     DC.B "ENCODED.  SO, YOU CAN TYPE: DXXX20XX",13
  702.     DC.B "WHICH RESULTS IN: DUR.20",13,13
  703.     DC.B "FOR NOTE NAMES, THE FIRST 3 CHARS ARE",13
  704.     DC.B "EVALUATED, AND THE OCTAVE ASCII VALUE",13
  705.     DC.B "IS ANDED WITH 3.  THEREFORE:",13
  706.     DC.B 34,"C-!",34," BECOMES ",34,"C-1",34,".",13,13
  707.     DC.B "THIS IS HELPFUL IN TYPING OVER INCORRECT"
  708.     DC.B "VALUES.  THE IMPOSSIBLE NOTE VALUES",13
  709.     DC.B "B# AND E# ARE REJECTED AS FALSE INPUT.",13
  710.     DC.B "ANY FALSE INPUT RETURNS THE CORRECT",13
  711.     DC.B "VALUE THAT WAS PREVIOUSLY LOCATED THERE.",13
  712.     DC.B "(HIT THE LONG ONE...)",13,13
  713.     DC.B "THIS RADICAL CHARSET IS BY FUSION!",0
  714.     EVEN
  715.  
  716. INTEX3A:DC.B "ADDITIONAL BLOCK EDIT COMMANDS:",13
  717.     DC.B "-------------------------------",13,13
  718.     DC.B "THE COMMANDS ",34,"?",34," AND ",34,"!",34," ARE",13
  719.     DC.B "QUITE USEFUL.  THE QUESTION MARK WILL",13
  720.     DC.B "QUERY THE CURRENT BLOCK AND COPY IT TO",13
  721.     DC.B "A SPECIAL BLOCK BUFFER.  THE EXCLAMATION"
  722.     DC.B "POINT COPIES THE CONTENTS OF THE BUFFER",13
  723.     DC.B "TO THE CURRENT BLOCK. NOTE THAT THE",13
  724.     DC.B "BUFFER STARTS OUT EMPTY, AND THE ONLY",13
  725.     DC.B "TIME IT WILL EVER CHANGE IS WHEN YOU",13
  726.     DC.B "COPY SOMETHING TO IT.",13,13
  727.     DC.B "NOTE THAT THE SCREEN WILL MOMENTARILY",13
  728.     DC.B "FLASH WHITE TO INDICATE THAT THE",13
  729.     DC.B "OPERATION HAS BEEN COMPLETED.",13,13
  730.     DC.B "THE ? AND ! COMMANDS WILL ONLY WORK",13
  731.     DC.B "IF SHIFTED. THIS IS FOR YOUR OWN",13
  732.     DC.B "PROTECTION AGAINST ACCIDENTAL KEY",13
  733.     DC.B "PRESSES.",13,13
  734.     DC.B "(SPACE-THE GREAT AMERICAN CHOCOLATE BAR)",0
  735.     
  736. INTEXT4:DC.B "THE I/O MENU:",13
  737.     DC.B "-------------",13,13
  738.     DC.B "LOAD/SAVE SONG DATAS- LOADS OR SAVES THE"
  739.     DC.B "BLOCK AND TRACK DATAS ONLY.",13,13
  740.     DC.B "LOAD IFF DIGI INSTRUMENTS- LOADS AN IFF",13
  741.     DC.B "SOUND. IT ACCEPTS WAVEFORMS AND NORMAL",13
  742.     DC.B "DIGI SOUNDS.",13,13
  743.     DC.B "LOAD FC MODULE- LOADS A FUCO FILE INTO",13
  744.     DC.B "MEMORY.  BOTH DATAS AND DIGIS WILL LOAD.",13
  745.     DC.B "DIRECTORY- SHOWS THE DIRECTORY AS YOU",13
  746.     DC.B "SPECIFY IT. (DRIVE:PATH/XXX)",13,13
  747.     DC.B "SAVE FC MODULE- SAVES DATAS & DIGIS AS",13
  748.     DC.B "ONE FILE.",13,13
  749.     DC.B "DELETE FILE- DELETES THE FILE THAT IS",13
  750.     DC.B "SPECIFIED. (NO (DIR) DELETIONS)",13,13
  751.     DC.B "(SPACE FOR MORE...)",0
  752.     EVEN
  753.  
  754. INTEXT5:DC.B "I/O MENU (CONTINUED):",13
  755.     DC.B "---------------------",13,13
  756.     DC.B "DELETE DIGI IN MEMORY- DELETES A DIGI",13
  757.     DC.B "FROM 00-3F AS SELECTED.",13,13
  758.     DC.B "MAKEDIR- CREATES A DIRECTORY IN THE",13
  759.     DC.B "CURRENT DIRECTORY WITH THE NAME THAT",13
  760.     DC.B "IS SPECIFIED.",13,13
  761.     DC.B "CLEAR ALL DATAS- THIS CLEARS ALL SONG",13
  762.     DC.B "DATAS AND DE-ALLOCATES ALL MEMORY FOR",13
  763.     DC.B "THE DIGIS.  NOTE THAT THIS IS AN",13
  764.     DC.B "INCINERATOR AND IS NOT RECOVERABLE!",13,13
  765.     DC.B "*** NOTE ***",13,13
  766.     DC.B "PRESSING ENTER AT A FILENAME PROMPT WILL"
  767.     DC.B "TAKE YOU BACK TO THE I/O MENU.  ALSO, IF"
  768.     DC.B "THE COMPUTER SEEMS TO LOCK UP AFTER YOU",13
  769.     DC.B "INPUT A NAME, PRESS LEFT AMIGA-B THEN",13
  770.     DC.B "LEFT AMIGA-V TO CONTINUE.",13,13
  771.     DC.B "(THERE'S MORE...)",0
  772.     EVEN
  773.  
  774. INTEXT6:DC.B "DISPLAY DIGIS IN MEMORY- THIS DISPLAYS",13
  775.     DC.B "THE SOUND NUMBER, FIRST 4 CHARS OF THE",13
  776.     DC.B "SOUND NAME, AS WELL AS BODY LENGTH,",13
  777.     DC.B "START LOOP, AND REPEAT LENGTH VALUES.",13,13,13
  778.     DC.B "TECHNICAL INFO:",13
  779.     DC.B "---------------",13,13
  780.     DC.B "THIS EDITOR WAS WRITTEN IN A TEN DAY",13
  781.     DC.B "PERIOD IN SEKA ASSEMBLER.  QUITE SIMPLY",13
  782.     DC.B "THE BEST 68000 ASSEMBLER ON THE AMIGA!",13,13
  783.     DC.B "THIS PROGGY WAS AN EXERCISE FOR MYSELF",13
  784.     DC.B "SO I COULD GET SOME PRACTICE IN FILE",13
  785.     DC.B "MANIPULATION AND MEMORY ALLOCATION",13
  786.     DC.B "GYMNASTICS.",13,13
  787.     DC.B "FUTURE COMPOSER AMIGA WAS INSPIRED BY",13
  788.     DC.B "THE C64 VERSION BY THE BEASTIE BOYS.",13,13
  789.     DC.B "THERE'S NOTHING ELSE TO WRITE.  PRESS",13
  790.     DC.B 34,"C",34," IN THE MAIN MENU FOR GREETZ.",13,13
  791.     DC.B "SLATES FROM BSI!",0
  792.     EVEN
  793.  
  794. SPACEWT:BSR GET
  795.     CMPI.B #$20,D0
  796.     BNE SPACEWT
  797.     RTS
  798.  
  799. INSTRUC:BSR CLS
  800.     LEA INTEXT,A0    
  801.     BSR PRINT
  802.     BSR SPACEWT
  803.     BSR CLS
  804.     LEA INTEX1A,A0
  805.     BSR PRINT
  806.     BSR SPACEWT
  807.     BSR CLS
  808.     LEA INTEX1B,A0
  809.     BSR PRINT
  810.     BSR SPACEWT
  811.     BSR CLS
  812.     LEA INTEXT2,A0
  813.     BSR PRINT
  814.     BSR SPACEWT
  815.     BSR CLS
  816.     LEA INTEX2A,A0
  817.     BSR PRINT
  818.     BSR SPACEWT
  819.     BSR CLS
  820.     LEA INTEXT3,A0
  821.     BSR PRINT
  822.     BSR SPACEWT
  823.     BSR CLS
  824.     LEA INTEX3A,A0
  825.     BSR PRINT
  826.     BSR SPACEWT
  827.     BSR CLS
  828.     LEA INTEXT4,A0
  829.     BSR PRINT
  830.     BSR SPACEWT
  831.     BSR CLS
  832.     LEA INTEXT5,A0
  833.     BSR PRINT
  834.     BSR SPACEWT
  835.     BSR CLS
  836.     LEA INTEXT6,A0
  837.     BSR PRINT
  838.     BSR SPACEWT
  839.     BRA MENU
  840.  
  841. ********** UPDATE HEX FOR A TRACK **********
  842.  
  843. UPDATH:    CLR.L D0
  844.     MOVE.W CURV,D0
  845.     LSL.W #8,D0
  846.     LEA TRK0,A1
  847.     ADD.L D0,A1
  848.     MOVE.W CURV,D0
  849.     LEA VOICEY,A0
  850.     MOVE.B (A0,D0.W),D4
  851.     ASL.W #1,D0
  852.     LEA TR0P,A0
  853.     MOVE.W (A0,D0.W),D0
  854.     BSR HEXTRK
  855.     BRA MAINSC3
  856.  
  857. ********** CALC XYPOS **********
  858.  
  859. TROFF:    DC.W 0
  860. YOFF:    DC.B 0
  861.     EVEN
  862. CALCPOS:MOVEM.L D0-D1,-(A7)
  863.     MOVE.W TROFF,D0
  864.     MOVE.W D0,D1
  865.     LSR.W #3,D0
  866.     ADD.B YOFF,D0
  867.     ANDI.W #$07,D1
  868.     MULU #3,D1
  869.     ADDQ.W #4,D1
  870.     ADD.W HILO,D1
  871.     MOVE.B D0,CY
  872.     MOVE.B D1,CX
  873.     MOVEM.L (A7)+,D0-D1
  874.     RTS
  875.  
  876. ********** XOR THE CURSOR TO THE SCREEN **********
  877.  
  878. CURSOR:    MOVEM.L D1-D2/A1,-(A7)
  879.     CLR.L D1
  880.     CLR.L D2
  881.     MOVE.B CX,D1
  882.     MOVE.B CY,D2
  883.     MULU #320,D2
  884.     LEA BPL,A1
  885.     ADD.L D2,A1
  886.     ADD.L D1,A1
  887.     MOVEQ #7,D1
  888. CURSLP:    EORI.B #$FF,(A1)
  889.     ADDI.L #40,A1
  890.     DBF D1,CURSLP
  891.     MOVEM.L (A7)+,D1-D2/A1
  892.     RTS
  893.  
  894. ********** DRAW THE EDITOR SCREEN **********
  895.  
  896. ED:    BSR DRAWED
  897.     BRA MAINSC    
  898.  
  899. ********** MAIN KEYPRESS ACCEPTOR IN ED **********
  900.  
  901. VOICEY:    DC.B 1,7,13,19
  902. CURV:    DC.W 0
  903. HILO:    DC.W 0
  904.  
  905. MAINSC:    CLR.W TROFF
  906. MAINSC2:BSR HEXSHOW
  907. MAINSC3:MOVE.W CURV,D0
  908.     LEA VOICEY,A0
  909.     MOVE.B (A0,D0.W),YOFF
  910.     BSR CALCPOS
  911.     BSR CURSOR
  912. MAINLP:    BSR GET
  913.     CMPI.W #$80,D0
  914.     BLT NOSELV
  915.     CMPI.W #$83,D0
  916.     BGT NOSELV
  917.     BSR CALCPOS
  918.     BSR CURSOR
  919.     CLR.W TROFF
  920.     CLR.W HILO
  921.     SUBI.B #$80,D0
  922.     MOVE.B D0,CURV+1
  923.     BRA MAINSC3
  924. NOSELV:    CMPI.B #30,D0
  925.     BEQ MUP
  926.     CMPI.B #31,D0
  927.     BEQ MDN
  928.     CMPI.B #8,D0    ; BACKSPACE DOES A LEFT ARROW...
  929.     BEQ MLT
  930.     CMPI.B #29,D0
  931.     BEQ MLT
  932.     CMPI.B #13,D0    ; ENTER DOES A RIGHT SPACE...
  933.     BEQ MRT
  934.     CMPI.B #28,D0
  935.     BEQ MRT
  936.     CMPI.B #10,D0    ; SHIFT-ENT=INSERT.  HXD WILL
  937.     BEQ HXD        ; DISCRIMINATE...
  938.     CMPI.B #27,D0    ; ESCAPE EXITS...
  939.     BEQ MENU
  940.     CMPI.B #127,D0    ; DELETE A BYTE...
  941.     BEQ HXD    
  942.     CMPI.B #135,D0
  943.     BEQ MSON
  944.     CMPI.B #136,D0
  945.     BEQ MSCON
  946.     CMPI.B #137,D0
  947.     BEQ MSOFF
  948.  
  949.     CMPI.B #"*",D0  ; GOTO BLOCK EDITOR...
  950.     BEQ BLKEDIT
  951.  
  952.     LEA HEX,A0    ; CHECK FOR HEX KEYSTROKES...
  953.     CLR.W D1
  954. GHEXSRC:CMP.B (A0,D1.W),D0
  955.     BEQ GHXKEY
  956.     ADDQ #1,D1
  957.     BTST #4,D1
  958.     BEQ GHEXSRC
  959.  
  960.     BRA MAINLP
  961.  
  962. GHXKEY:    BSR CALCPOS
  963.     ANDI.W #$3F,D0
  964.     BSR PRCH
  965.     MOVE.W D1,D3
  966.     CLR.L D1
  967.     MOVE.W CURV,D1
  968.     ASL.W #1,D1
  969.     LEA TR0P,A0
  970.     MOVE.W (A0,D1.W),D1
  971.     ADD.W TROFF,D1
  972.     CLR.L D2
  973.     MOVE.W CURV,D2
  974.     ASL.W #8,D2
  975.     LEA TRK0,A0    
  976.     ADD.L D1,D2
  977.     ADD.L D2,A0
  978.     MOVE.B (A0),D1
  979.     TST.W HILO
  980.     BEQ MODHINB
  981.     ANDI.B #$F0,D1
  982.     OR.B D3,D1
  983.     BRA UPDBYT
  984. MODHINB:LSL.B #4,D3
  985.     ANDI.B #$0F,D1
  986.     OR.B D3,D1
  987. UPDBYT:    MOVE.B D1,(A0)
  988.     BRA MRTA
  989.  
  990. ********** MUSIC ON/OFF PART **********
  991.  
  992. MSON:    JSR MUSOFF
  993.     JSR MUSON
  994.     BRA MAINLP
  995.  
  996. MSOFF:    JSR MUSOFF
  997.     BRA MAINLP
  998.  
  999. MSCON:    JSR MUSOFF
  1000.     JSR MUSCON
  1001.     BRA MAINLP 
  1002.  
  1003. ********** DELETE / INSERT A BYTE IN HEX BLOCK **********
  1004.  
  1005. HXD:    CLR.L D2
  1006.     MOVE.W CURV,D2
  1007.     ASL.W #1,D2
  1008.     LEA TR0P,A0
  1009.     MOVE.W (A0,D2.W),D1
  1010.     ADD.W TROFF,D1
  1011.  
  1012.     MOVE.W CURV,D2
  1013.     LSL.W #8,D2
  1014.     LEA TRK0,A0
  1015.     ADD.L D2,A0
  1016.  
  1017.     CMPI.B #10,D0    ; INSERT DISCRIMINATOR...
  1018.     BEQ HXI
  1019.  
  1020.     MOVE.L D1,$F0000
  1021.     CMPI.B #$FF,D1
  1022.     BEQ HXDLEX
  1023. HXDL:    MOVE.B 1(A0,D1.W),(A0,D1.W)
  1024.     ADDI.B #1,D1
  1025.     CMPI.B #$FF,D1
  1026.     BNE HXDL
  1027. HXDLEX:    CLR.B (A0,D1.W)
  1028.     BRA UPDATH
  1029.  
  1030. ********** THE INSERT HEX BYTE **********
  1031.  
  1032. HXI:    MOVE.W #$FE,D0
  1033.     CMPI.B #$FF,D1
  1034.     BEQ HXILEX
  1035.     SUBI.W #1,D1
  1036. HXIL:    MOVE.B (A0,D0.W),1(A0,D0.W)
  1037.     SUBQ #1,D0
  1038.     CMP.W D1,D0
  1039.     BNE HXIL
  1040. HXILEX:    BRA UPDATH
  1041.  
  1042. ********** CURSOR MOVEMENT IN HEX BLOCKS... **********
  1043.  
  1044. MUP:    BSR CALCPOS
  1045.     BSR CURSOR
  1046.     MOVE.W TROFF,D1
  1047.     CMPI.B #$08,D1
  1048.     BLT UPC
  1049.     SUBI.W #8,TROFF
  1050.     BRA MAINSC3
  1051. UPC:    MOVE.W CURV,D0
  1052.     ASL.W #1,D0
  1053.     LEA TR0P,A0
  1054.     MOVE.W (A0,D0.W),D1
  1055.     CMPI.W #$08,D1
  1056.     BLT NOUP
  1057.     SUBI.W #8,D1
  1058. NOUP:    MOVE.W D1,(A0,D0.W)
  1059.     BRA UPDATH
  1060.  
  1061. MDN:    BSR CALCPOS
  1062.     BSR CURSOR
  1063.     MOVE.W TROFF,D1
  1064.     CMPI.B #$1F,D1
  1065.     BHI DNC
  1066.     ADDI.W #8,TROFF
  1067.     BRA MAINSC3
  1068. DNC:    MOVE.W CURV,D0
  1069.     ASL.W #1,D0
  1070.     LEA TR0P,A0
  1071.     MOVE.W (A0,D0.W),D1
  1072.     CMPI.W #$D7,D1
  1073.     BHI NODN
  1074.     ADDI.W #8,D1
  1075. NODN:    MOVE.W D1,(A0,D0.W)
  1076.     BRA UPDATH
  1077.  
  1078. MLT:    BSR CALCPOS
  1079.     BSR CURSOR
  1080.     EORI.W #1,HILO
  1081.     TST.W HILO
  1082.     BNE MLTPT
  1083.     BRA MAINSC3
  1084. MLTPT:    SUBI.W #1,TROFF
  1085.     BPL MAINSC3
  1086.     MOVE.W CURV,D0
  1087.     ASL.W #1,D0
  1088.     LEA TR0P,A0
  1089.     MOVE.W (A0,D0.W),D1
  1090.     TST.B D1
  1091.     BNE MLTA8
  1092.     CLR.W TROFF
  1093.     CLR.W HILO
  1094.     BRA UPC
  1095. MLTA8:    ADDI.W #8,TROFF
  1096.     BRA UPC
  1097.  
  1098. MRT:    BSR CALCPOS
  1099.     BSR CURSOR
  1100. MRTA:    EORI.W #1,HILO
  1101.     TST.W HILO
  1102.     BEQ MRTPL
  1103.     BRA MAINSC3
  1104. MRTPL:    ADDI.W #1,TROFF
  1105.     CMPI.W #$28,TROFF
  1106.     BLT MAINSC3
  1107.     MOVE.W CURV,D0
  1108.     ASL.W #1,D0
  1109.     LEA TR0P,A0
  1110.     MOVE.W (A0,D0.W),D1
  1111.     CMPI.B #$D8,D1
  1112.     BNE MRTS8
  1113.     MOVE.W #$27,TROFF
  1114.     EORI.W #$01,HILO
  1115.     BRA DNC
  1116. MRTS8:    SUBI.W #8,TROFF
  1117.     BRA DNC
  1118.  
  1119. ********** BLOCK EDITING : DECODE D0.B INTO STRING **********
  1120.  
  1121. MNOT:    DC.B "CCDDEFFGGAAB"
  1122. MNOT2:    DC.B "-#-#--#-#-#-"
  1123. WKSPACE:DC.B "        ",0
  1124.     EVEN
  1125. MARP:    DC.B "TEM."
  1126. MSND:    DC.B "SND."
  1127. MDUR:    DC.B "DUR."
  1128. MGLD:    DC.B "MOD."
  1129. MEND:    DC.B "*END!*"
  1130.  
  1131. DECODE:    MOVEM.L D0-D2/A0,-(A7)
  1132.     MOVE.L #$20202020,D1
  1133.     MOVE.L D1,WKSPACE
  1134.     MOVE.L D1,WKSPACE+4
  1135.     ANDI.W #$FF,D0
  1136.     BTST #7,D0
  1137.     BNE DHISET
  1138.     CMPI #$30,D0
  1139.     BLT DNTDEC
  1140.     MOVE.W D0,D1
  1141.     ANDI.W #$70,D1
  1142.     CMPI.B #$70,D1
  1143.     BEQ DARPDEC
  1144.     BRA DGLDDEC
  1145. DHISET:    CMPI.B #$FF,D0
  1146.     BEQ DENDMKR
  1147.     BTST #6,D0
  1148.     BNE DSNDDEC
  1149.     BRA DDURDEC
  1150.  
  1151. DNTDEC:    ANDI.L #$3F,D0
  1152.     MOVE.L D0,D1
  1153.     MOVE.L D1,D2
  1154.     DIVU #12,D1
  1155.     MOVE.L D1,D0
  1156.     MULU #12,D0
  1157.     SUB.W D0,D2
  1158.     LEA MNOT,A0
  1159.     MOVE.B (A0,D2.W),WKSPACE
  1160.     MOVE.B 12(A0,D2.W),WKSPACE+1
  1161.     LEA HEX,A0
  1162.     MOVE.B (A0,D1.W),WKSPACE+2
  1163.     BRA DECEXIT
  1164.  
  1165. DARPDEC:MOVE.L MARP,WKSPACE
  1166.     ANDI.W #$0F,D0
  1167. DEHEXPL:JSR HXCONV
  1168.     MOVE.W HX,WKSPACE+4
  1169.     BRA DECEXIT
  1170.  
  1171. DDURDEC:MOVE.L MDUR,WKSPACE
  1172. D0AND3F:ANDI.W #$3F,D0
  1173.     BRA DEHEXPL
  1174.  
  1175. DSNDDEC:MOVE.L MSND,WKSPACE
  1176.     BRA D0AND3F
  1177.  
  1178. DGLDDEC:MOVE.L MGLD,WKSPACE
  1179.     SUBI.W #$30,D0
  1180.     BRA D0AND3F
  1181.  
  1182. DENDMKR:MOVE.L MEND,WKSPACE
  1183.     MOVE.W MEND+4,WKSPACE+4
  1184.  
  1185. DECEXIT:MOVEM.L (A7)+,D0-D2/A0
  1186.     RTS
  1187.  
  1188. ********** CLEAR THE BLOCK EDIT AREA **********
  1189.  
  1190. BLANKL:    DC.B "        ",0
  1191.     EVEN
  1192.  
  1193. CLRBED:    MOVEM.L D0/A0,-(A7)
  1194.     MOVEQ #1,D0
  1195.     LEA BLANKL,A0
  1196. CLRBLA:    MOVE.B #29,CX
  1197.     MOVE.B D0,CY    
  1198.     BSR PRINT
  1199.     ADDI.B #1,D0
  1200.     CMPI.B #24,D0
  1201.     BNE CLRBLA
  1202.     MOVEM.L (A7)+,D0/A0
  1203.     RTS    
  1204.  
  1205. ********** WITH CURRENT BLOCK IN D0.B, DISPLAY CONTENTS... **********
  1206. ********** OFFSET IN D1.B **********
  1207.  
  1208. DISPBLK:MOVEM.L D0-D2/A0-A2,-(A7)
  1209.     LEA BLKASC,A1
  1210.     ANDI.L #$FF,D0
  1211.     JSR HXCONV
  1212.     LEA HX,A0
  1213.     MOVE.B #0,CY
  1214.     MOVE.B #35,CX
  1215.     BSR PRINT
  1216.     ASL.W #8,D0
  1217.     ANDI.W #$FF,D1
  1218.     LEA BLOX,A2
  1219.     ADD.L D0,A2
  1220.     MOVE.B #1,D2
  1221.     LEA WKSPACE,A0
  1222. DBLKLP:    MOVE.B #29,CX        
  1223.     MOVE.B D2,CY
  1224.     MOVE.B (A2,D1.W),D0
  1225.     BSR DECODE
  1226.     BSR PRINT
  1227.     BSR ASCINC
  1228.     CMPI.B #$FF,D0
  1229.     BEQ BLNKNXT
  1230.     ADDQ #1,D1
  1231.     ADDQ #1,D2
  1232.     CMPI.B #24,D2
  1233.     BEQ DBLKEX
  1234.     CMPI.B #$FE,D1
  1235.     BNE DBLKLP
  1236.  
  1237. BLNKRES:LEA BLANKL,A0
  1238.     MOVE.B #29,CX
  1239.     MOVE.B D2,CY
  1240.     BSR PRINT
  1241.     BSR ASCINC
  1242. BLNKNXT:ADDQ #1,D2
  1243.     CMPI.B #24,D2
  1244.     BNE BLNKRES
  1245.     
  1246. DBLKEX:    MOVEM.L (A7)+,D0-D2/A0-A2
  1247.     RTS
  1248.  
  1249. ASCINC:    MOVE.L WKSPACE,(A1)+
  1250.     MOVE.L WKSPACE+4,(A1)+
  1251.     RTS
  1252.  
  1253. BLKASC:    BLK.B 23*8,$20
  1254.  
  1255. ********** BLOCK EDITOR **********
  1256.  
  1257. CURBLK:    DC.W 0
  1258. BLKROW:    DC.W 0
  1259. BLKTOP:    DC.W 0
  1260. BLKCOL:    DC.W 0
  1261. VADDR:    DC.L 0
  1262. TADDR:    DC.L 0
  1263.  
  1264. BLKEDIT:CLR.L CURBLK
  1265.     CLR.L BLKTOP
  1266.     MOVE.W CURV,D0
  1267.     CLR.L D1
  1268.     MOVE.W D0,D1
  1269.     LSL.W #8,D0
  1270.     LEA TRK0,A1
  1271.     ADD.L D0,A1
  1272.     ASL.W #1,D1
  1273.     LEA TR0P,A0
  1274.     MOVE.W (A0,D1.W),D1
  1275.     ADD.L D1,A1
  1276.     MOVE.W TROFF,D0
  1277.     MOVE.B (A1,D0.W),D0
  1278.     ANDI.W #$FF,D0
  1279.     MOVE.W D0,CURBLK
  1280.     CMPI.W #$40,D0
  1281.     BLT BLKVLOK
  1282.     BRA MAINLP
  1283.  
  1284. BLKVLOK:MOVE.W CURBLK,D0
  1285.     CLR.W D1
  1286.     BSR DISPBLK
  1287.  
  1288. BLLOOPA:BSR BLKCUR
  1289.     MOVE.W CX,D3    ; SAVE CURRENT CX.B+CY.B
  1290.     MOVE.W BLKTOP,D0
  1291.     ADD.W BLKROW,D0
  1292.     BSR HXCONV
  1293.     LEA HX,A0
  1294.     MOVE.W #35*256+24,CX
  1295.     BSR PRINT
  1296.     MOVE.W D3,CX
  1297.  
  1298. BLLOOP:    BSR GET
  1299.     TST.B D0
  1300.     BEQ BLLOOP
  1301.     CMPI.B #27,D0    ; ESCAPE ALSO EXITS BLOCK EDITOR
  1302.     BEQ BLEX
  1303.     CMPI.B #"*",D0
  1304.     BEQ BLEX
  1305.     CMPI.B #29,D0
  1306.     BEQ BLKLEFT
  1307.     CMPI.B #127,D0    ; DEL=DELETE LINE...
  1308.     BEQ BLKDEL
  1309.     CMPI.B #8,D0    ; BACKSPACE=LEFT
  1310.     BEQ BLKLEFT
  1311.     CMPI.B #28,D0
  1312.     BEQ BLKRITE
  1313.     CMPI.B #13,D0
  1314.     BEQ BENTER
  1315.     CMPI.B #10,D0    ; SHIFT-ENTER=INSERT
  1316.     BEQ BINSERT
  1317.     CMPI.B #31,D0
  1318.     BEQ BENTER    ; ACTUALLY DOWN...
  1319.     CMPI.B #30,D0
  1320.     BEQ BUP    
  1321.     CMPI.B #"?",D0    ; COPY COMMAND...
  1322.     BEQ BCOPY
  1323.     CMPI.B #"!",D0    ; PASTE FROM BUFFER...
  1324.     BEQ BPASTE
  1325.     CMPI.B #135,D0
  1326.     BEQ BLMON
  1327.     CMPI.B #136,D0
  1328.     BEQ BLMCON
  1329.     CMPI.B #137,D0
  1330.     BEQ BLMOFF
  1331.     BTST #7,D0
  1332.     BNE BLLOOP
  1333.     BRA BACCEPT
  1334.  
  1335. ********** MUSIC ON/OFF IN BLOCK EDIT **********
  1336.  
  1337. BLMON:    JSR MUSOFF
  1338.     JSR MUSON
  1339.     BRA BLLOOP
  1340.  
  1341. BLMCON:    JSR MUSOFF
  1342.     JSR MUSCON
  1343.     BRA BLLOOP
  1344.  
  1345. BLMOFF:    JSR MUSOFF
  1346.     BRA BLLOOP
  1347.  
  1348. ********** ? AND ! COMMANDS **********
  1349.  
  1350. BCOPY:    MOVE.W CURBLK,D0
  1351.     ANDI.L #$3F,D0
  1352.     LSL.L #8,D0
  1353.     LEA BLOX,A0
  1354.     ADD.L D0,A0
  1355.     LEA BLOKEND,A1
  1356. BCOPA:    MOVE.W #$FF,D0
  1357. BCLOOP:    MOVE.B (A0)+,(A1)+
  1358.     DBF D0,BCLOOP
  1359.     MOVE.W #$0FFF,$DFF180
  1360.     CLR.W BLKTOP
  1361.     CLR.W BLKROW
  1362.     CLR.W BLKCOL
  1363.     BRA BLKVLOK
  1364.  
  1365. BPASTE: MOVE.W CURBLK,D0
  1366.     ANDI.L #$3F,D0
  1367.     LSL.L #8,D0
  1368.     LEA BLOKEND,A0
  1369.     LEA BLOX,A1    
  1370.     ADD.L D0,A1
  1371.     BRA BCOPA
  1372.  
  1373. BLKCUR:    MOVE.W BLKROW,D0        
  1374.     ADDQ.W #1,D0
  1375.     MOVE.B D0,CY
  1376.     MOVE.W BLKCOL,D0
  1377.     ADDI.W #29,D0
  1378.     MOVE.B D0,CX
  1379.     BSR CURSOR
  1380.     LEA BLOX,A0
  1381.     CLR.L D0
  1382.     MOVE.W CURBLK,D0
  1383.     ASL.W #8,D0
  1384.     ADD.L D0,A0
  1385.     MOVE.W BLKTOP,D0
  1386.     ADD.L D0,A0
  1387.     MOVE.W BLKROW,D0
  1388.     ADD.L D0,A0
  1389.     MOVE.L A0,VADDR
  1390.     LEA BLKASC,A0
  1391.     MOVE.W BLKROW,D0
  1392.     ASL.W #3,D0
  1393.     ADD.L D0,A0    
  1394.     MOVE.L A0,TADDR
  1395.     RTS
  1396.  
  1397. BLEX:    BSR BLKCUR
  1398.     BSR ENCODE
  1399.     BRA MAINLP    
  1400.  
  1401. BLKRITE:BSR CURSOR
  1402.     ADDI.W #1,BLKCOL
  1403. BLKRTE2:ANDI.W #7,BLKCOL
  1404.     BRA BLLOOPA    
  1405.  
  1406. BLKLEFT:BSR CURSOR
  1407.     SUBI.W #1,BLKCOL
  1408.     BRA BLKRTE2
  1409.  
  1410. BACCEPT:LEA TADDR,A0
  1411.     MOVE.L (A0),A0
  1412.     MOVE.W BLKCOL,D1
  1413.     MOVE.B D0,(A0,D1.W)
  1414.     ANDI.W #$3F,D0
  1415.     BSR PRCH
  1416.     ADDI.W #1,BLKCOL
  1417.     ANDI.W #7,BLKCOL    
  1418.     MOVE.W BLKCOL,D1
  1419.     ADDI.W #29,D1
  1420.     MOVE.B D1,CX
  1421.     BRA BLLOOPA
  1422.  
  1423. HEXBENC:LEA HEX,A1
  1424.     MOVEQ #15,D2
  1425. HEXFND:    CMP.B (A1,D2.W),D0
  1426.     BEQ HXBFD
  1427.     SUBQ #1,D2
  1428.     TST.B D2
  1429.     BNE HEXFND
  1430. HXBFD:    RTS
  1431.  
  1432. HEXENC:    MOVE.B 5(A0),D0
  1433.     BSR HEXBENC
  1434.     MOVE.B D2,D3
  1435.     ANDI.B #$0F,D3
  1436.     MOVE.B 4(A0),D0
  1437.     BSR HEXBENC
  1438.     ASL.W #4,D2
  1439.     OR.W D3,D2
  1440.     ANDI.W #$3F,D2
  1441.     RTS
  1442.  
  1443. ENCLEG:    DC.W 0
  1444.  
  1445. ENCODE:    CLR.W ENCLEG
  1446.     LEA TADDR,A0
  1447.     MOVE.L (A0),A0
  1448.     BSR HEXENC    ; D2=HEX VAL...
  1449.     MOVE.B (A0),D0    
  1450.     CMPI.B #"*",D0
  1451.     BEQ ENCEND
  1452.     LEA MNOT,A2
  1453.     LEA MNOT2,A3
  1454.     CLR.L D1
  1455.     MOVE.W D2,D3
  1456. SRCHNOT:MOVE.B (A2)+,D2
  1457.     CMP.B (A0),D2
  1458.     BNE NXTNOTE
  1459.     MOVE.B (A3)+,D2
  1460.     CMP.B 1(A0),D2
  1461.     BEQ FNDNOTE
  1462. NXTNOTE:MOVE.W D3,D2
  1463.     ADDI.B #1,D1
  1464.     CMPI.B #13,D1
  1465.     BNE SRCHNOT
  1466.     MOVE.B (A0),D0
  1467.     CMPI.B #"T",D0
  1468.     BEQ ARPENC
  1469.     CMPI.B #"D",D0
  1470.     BEQ DURENC
  1471.     CMPI.B #"S",D0
  1472.     BEQ SNDENC
  1473.     CMPI.B #"M",D0
  1474.     BEQ GLDENC
  1475.     ST ENCLEG
  1476. ENCEND:    MOVE.B #$FF,D2
  1477.     RTS
  1478.  
  1479. FNDNOTE:MOVE.B 2(A0),D2
  1480.     ANDI.L #3,D2
  1481.     MULU #12,D2
  1482.     ADD.B D1,D2
  1483.     BRA ENCEX
  1484.  
  1485. ARPENC:    ANDI.W #$0F,D2
  1486.     ADDI.W #$70,D2
  1487.     BRA ENCEX
  1488. DURENC:    ADDI.W #$80,D2
  1489.     BRA ENCEX
  1490. SNDENC:    ADDI.W #$C0,D2
  1491.     CMPI.B #$FF,D2
  1492.     BNE ENCEX
  1493.     MOVE.B #$FE,D2
  1494.     BRA ENCEX
  1495. GLDENC:    ADDI.W #$30,D2
  1496. ENCEX:    MOVE.L VADDR,A0
  1497.     MOVE.B D2,(A0)
  1498.     RTS
  1499.  
  1500. BENTER:    MOVE.W D0,D4
  1501.     BSR ENCODE
  1502.     LEA BLOX,A0
  1503.     CLR.L D0
  1504.     MOVE.W CURBLK,D0
  1505.     ASL.W #8,D0
  1506.     ADD.L D0,A0    
  1507.     MOVE.W BLKTOP,D0
  1508.     ADD.W BLKROW,D0
  1509.     TST.W ENCLEG
  1510.     BEQ BLKSLEG
  1511.     CMPI.B #$FF,1(A0,D0.W)
  1512.     BNE BENTBYP
  1513.     BRA BENTOK    
  1514. BLKSLEG:CMPI.B #$FF,D2
  1515.     BEQ BENTOK
  1516. BENTBYP:ADDI.W #1,BLKROW
  1517.     CMPI.W #23,BLKROW
  1518.     BNE BENTOK
  1519.     MOVE.W #22,BLKROW
  1520.     ADDI.W #1,BLKTOP
  1521.     CMPI.W #255-23,BLKTOP
  1522.     BNE BENTOK
  1523.     MOVE.W #255-24,BLKTOP
  1524. BENTOK:    LEA BLOX,A0
  1525.     CLR.L D0
  1526.     MOVE.W CURBLK,D0
  1527.     ASL.W #8,D0
  1528.     ADD.L D0,A0
  1529.     MOVE.W #$FFFF,$FE(A0)
  1530.     MOVE.W CURBLK,D0
  1531.     MOVE.W BLKTOP,D1        
  1532.     BSR DISPBLK
  1533.     CMPI.B #31,D4
  1534.     BEQ BLLOOPA
  1535.     CLR.W BLKCOL
  1536.     BRA BLLOOPA
  1537.     
  1538. BUP:    TST.W BLKROW
  1539.     BNE BUP2
  1540.     TST.W BLKTOP
  1541.     BEQ BLLOOP
  1542. BUP2:    BSR ENCODE
  1543.     SUBQ.W #1,BLKROW
  1544.     BPL BENTOK
  1545.     CLR.W BLKROW
  1546.     SUBQ.W #1,BLKTOP
  1547.     BPL BENTOK
  1548.     CLR.W BLKTOP
  1549.     BRA BENTOK
  1550.  
  1551. BINSERT:BSR ENCODE
  1552.     LEA BLOX,A0
  1553.     CLR.L D0
  1554.     MOVE.W CURBLK,D0
  1555.     ASL.W #8,D0
  1556.     ADD.L D0,A0
  1557.     MOVE.W BLKTOP,D0
  1558.     ADD.W BLKROW,D0
  1559.     CMPI.W #$FC,D0
  1560.     BGT INSEX
  1561.     MOVE.W #$FD,D1
  1562. INSLOOP:MOVE.B -1(A0,D1.W),0(A0,D1.W)
  1563.     SUBQ #1,D1
  1564.     CMP.B D0,D1
  1565.     BNE INSLOOP
  1566.     MOVE.W CURBLK,D0
  1567.     MOVE.W BLKTOP,D1
  1568.     BSR DISPBLK
  1569. INSEX:    MOVE.W #$FFFF,$FE(A0)
  1570.     CLR.W BLKCOL
  1571.     BRA BLLOOPA
  1572.  
  1573. BLKDEL:    LEA BLOX,A0
  1574.     CLR.L D0
  1575.     MOVE.W CURBLK,D0
  1576.     ASL.W #8,D0
  1577.     ADD.L D0,A0
  1578.     MOVE.W #$FFFF,$FE(A0)
  1579.     MOVE.W BLKTOP,D0
  1580.     ADD.W BLKROW,D0
  1581. BLKDELP:MOVE.B 1(A0,D0.W),(A0,D0.W)
  1582.     ADDQ #1,D0
  1583.     CMPI.B #$FE,D0
  1584.     BNE BLKDELP
  1585.     CLR.W BLKCOL        
  1586.     MOVE.W CURBLK,D0
  1587.     MOVE.W BLKTOP,D1
  1588.     BSR DISPBLK
  1589.     BRA BLLOOPA
  1590.  
  1591. ********** INPUT A STRING OF D0.B CHARS INTO INBUFF **********
  1592. **********    LEN OF STRING IS RETURNED IN D0.B     **********
  1593.  
  1594. INBUFF:    BLK.B 256,0
  1595. INPUT:    MOVEM.L D1-D2/A0/A6,-(A7)
  1596.     MOVE.L 4,A6
  1597.     JSR -132(A6)
  1598.     MOVE.B D0,D1
  1599.     ANDI.W #$FF,D1
  1600.     MOVE.W #$FF,D0
  1601.     LEA INBUFF,A0
  1602. INCLR:    CLR.B (A0,D0.W)
  1603.     DBF D0,INCLR
  1604.     CLR.L D2
  1605. INLB:    BSR CURSOR
  1606. INLA:    BSR GET
  1607.     ANDI.W #$FF,D0
  1608.     TST.B D0
  1609.     BEQ INLA
  1610.     CMPI.B #8,D0
  1611.     BEQ INDEL
  1612.     CMPI.B #127,D0
  1613.     BEQ INDEL
  1614.     CMPI.B #13,D0
  1615.     BEQ INRET
  1616.     CMPI.B #10,D0
  1617.     BEQ INRET
  1618.     CMPI.W #$20,D0
  1619.     BLT INLA
  1620.     CMPI.W #$5F,D0
  1621.     BGT INLA
  1622.     MOVE.B D0,(A0,D2.W)
  1623.     ANDI.B #$3F,D0
  1624.     BSR PRCH
  1625.     BSR INCCXCY
  1626.     ADDQ #1,D2
  1627.     CMP.B D2,D1
  1628.     BNE INLB
  1629.     BSR DECCXCY
  1630.     SUBI #1,D2
  1631.     BRA INLB
  1632. INDEL:    TST.B D2
  1633.     BEQ INLA
  1634.     BSR CURSOR
  1635.     MOVE.B #$20,D0
  1636.     BSR PRCH
  1637.     SUBI.W #1,D2
  1638.     CLR.B (A0,D2.W)
  1639.     CLR.B -1(A0,D1.W)
  1640.     BSR DECCXCY
  1641.     MOVE.B #$20,D0
  1642.     BSR PRCH
  1643.     BRA INLB
  1644.  
  1645. DECCXCY:SUBI.B #1,CX
  1646.     BPL DECCXOK
  1647.     MOVE.B #39,CX
  1648.     SUBI.B #1,CY
  1649.     BPL DECCXOK
  1650.     CLR.B CY
  1651. DECCXOK:RTS
  1652.  
  1653. INCCXCY:ADDI.B #1,CX
  1654.     CMPI.B #40,CX
  1655.     BNE INCCXOK
  1656.     CLR.B CX
  1657.     ADDI.B #1,CY
  1658.     CMPI.B #25,CY
  1659.     BNE INCCXOK
  1660.     MOVE.B #24,CY
  1661.     BSR SCROLL
  1662. INCCXOK:RTS
  1663.  
  1664. INRET:    BSR CURSOR
  1665.     MOVE.W D2,D0
  1666.     MOVE.L 4,A6
  1667.     JSR -138(A6)
  1668.     MOVEM.L (A7)+,D1-D2/A0/A6
  1669.     RTS
  1670.     
  1671. ********** LOADER MAIN MENU **********
  1672.  
  1673. LDRMESS:DC.B "       -=MODULES AND DATAS I/O=-",13,13
  1674.     DC.B "A) LOAD SONG DATAS",13
  1675.     DC.B "B) LOAD IFF DIGI INSTRUMENTS",13
  1676.     DC.B "C) LOAD FC MODULE (DATA + DIGI)",13
  1677.     DC.B "D) DIRECTORY",13
  1678.     DC.B "E) SAVE FC MODULE (DATA + DIGI)",13
  1679.     DC.B "F) DELETE FILE",13
  1680.     DC.B "G) DELETE DIGI IN MEMORY",13
  1681.     DC.B "H) MAKEDIR",13
  1682.     DC.B "I) CLEAR ALL DATAS",13
  1683.     DC.B "J) DISPLAY DIGIS IN MEMORY",13
  1684.     DC.B "K) SAVE SONG DATAS",13
  1685.     DC.B "L) EXIT TO MAIN MENU",13,13
  1686.     DC.B "----------------------------------------",13
  1687.     DC.B "IF THE COMPUTER SEEMS TO LOCK UP AFTER",13
  1688.     DC.B "YOU ENTER A FILENAME, PRESS LEFT AMIGA-B"
  1689.     DC.B "THEN LEFT AMIGA-V AND WAIT FOR A FILE",13
  1690.     DC.B "ERROR OR SOME OTHER MESSAGE...",13,13
  1691.     DC.B "----------------------------------------",13
  1692.     DC.B "                       (W)1990 BSI LABS",0
  1693.  
  1694.     EVEN
  1695.  
  1696. LDRMENX:MOVE.L GRBAS,A6
  1697.     JSR -462(A6)
  1698.     move.l 4,a6
  1699.     jsr -138(a6)
  1700.  
  1701. LDRMENU:BSR CLS
  1702.     LEA LDRMESS,A0
  1703.     BSR PRINT
  1704. LMGET:    BSR GET
  1705.     CMPI.B #"K",D0
  1706.     BEQ SAVDAT
  1707.     CMPI.B #"J",D0
  1708.     BEQ DIGDSP
  1709.     CMPI.B #"D",D0
  1710.     BNE LMCT
  1711.     JMP DIRECT
  1712.  
  1713. ********** SAVE DATAS **********
  1714.  
  1715. SAVDAT:    BSR CLS
  1716.     LEA FILEMES,A0
  1717.     BSR PRINT
  1718.     MOVE.B #79,D0
  1719.     BSR INPUT
  1720.     TST.B D0
  1721.     BEQ LDRMENU
  1722.     LEA RETCHAR,A0
  1723.     BSR PRINT
  1724.     
  1725.     MOVE.L DBASE,A5
  1726.     MOVE.L #INBUFF,D1
  1727.     MOVE.L #1006,D2
  1728.     JSR -30(A5)
  1729.     MOVE.L D0,DLHAND
  1730.  
  1731.     TST.L D0
  1732.     BEQ SVDERRA
  1733.  
  1734.     MOVE.L DLHAND,D1
  1735.     MOVE.L #DATSTRT,D2
  1736.     MOVE.L #$4404,D3
  1737.     JSR -48(A5)
  1738.     CMPI.L #$4404,D0
  1739.     BNE SVDERR
  1740.  
  1741.     MOVE.L DLHAND,D1
  1742.     JSR -36(A5)
  1743.  
  1744.     LEA SVDOK,A0
  1745. SVDWT:    BSR PRINT
  1746.     BSR SPACEWT
  1747.     BRA LDRMENU
  1748.  
  1749. SVDOK:    DC.B 13,13,"*** DATAS SAVED OK! PRESS SPACE... ***",0
  1750. SVDM:    DC.B 13,13,"*** ERROR IN SAVE! PRESS SPACE... ***",0
  1751.     EVEN
  1752.  
  1753. SVDERR:    MOVE.L DLHAND,D1
  1754.     JSR -36(A5)
  1755. SVDERRA:LEA SVDM,A0
  1756.     BRA SVDWT
  1757.  
  1758. ********** DISPLAY DIGIS LOADED IN MEMORY... **********
  1759.  
  1760. DIGDSPM:DC.B "PRESS ENTER KEY TO PAUSE/UNPAUSE...",13,13
  1761.     DC.B "HEX  NAME  BODY LEN  STRTLOOP  REPEATLP",13
  1762.     DC.B "---  ----  --------  --------  --------",13,0
  1763.     EVEN
  1764.  
  1765. DIGDSP:    BSR CLS
  1766.     LEA DIGDSPM,A0
  1767.     BSR PRINT
  1768.     LEA DIGBLOK,A1
  1769.     MOVE.W #$00,D1
  1770. DILOOP:    MOVE.L (A1),D0
  1771.     TST.L D0
  1772.     BEQ NXDIL
  1773.     BSR GET
  1774.     CMPI.B #13,D0
  1775.     BNE SPEX
  1776. SPWT:    BSR GET
  1777.     CMPI.B #13,D0
  1778.     BEQ SPWT
  1779. SPWTA:    BSR GET
  1780.     CMPI.B #13,D0
  1781.     BNE SPWTA
  1782. SPWTB:    BSR GET
  1783.     CMPI.B #13,D0
  1784.     BEQ SPWTB
  1785. SPWTC:    BSR GET
  1786.     TST.B D0
  1787.     BNE SPWTC
  1788.  
  1789. SPEX:    MOVE.W #32767,D0
  1790. DI2LP:    DBF D0,DI2LP
  1791.     CLR.L D0
  1792.     MOVE.B D1,D0
  1793.     BSR LONGCON
  1794.     LEA LONG+5,A0
  1795.     BSR PRINT
  1796.     LEA LONG+4,A0
  1797.     MOVE.L (A1),(A0)
  1798.     MOVE.B #5,CX
  1799.     BSR PRINT
  1800.     MOVE.B #11,CX
  1801.     MOVE.L 4(A1),D0
  1802.     BSR LONGCON
  1803.     LEA LONG,A0
  1804.     BSR PRINT
  1805.     MOVE.B #21,CX
  1806.     MOVE.L 8(A1),D0
  1807.     BSR LONGCON
  1808.     BSR PRINT
  1809.     MOVE.B #31,CX
  1810.     MOVE.L 12(A1),D0
  1811.     BSR LONGCON
  1812.     BSR PRINT
  1813.     LEA RETCHAR,A0
  1814.     BSR PRINT
  1815. NXDIL:    ADDI.L #16,A1
  1816.     ADDQ #1,D1
  1817.     CMPI.B #$3F,D1
  1818.     BNE DILOOP
  1819.     LEA PRSP,A0
  1820.     BSR PRINT
  1821.     BSR SPACEWT
  1822.     BRA LDRMENU
  1823. PRSP:    DC.B 13,"PRESS SPACE TO GO ON...",0
  1824.     EVEN
  1825.  
  1826. LMCT:    CMPI.B #"L",D0
  1827.     BEQ LDRMEX
  1828.     CMPI.B #"A",D0
  1829.     BEQ DATLDR
  1830.     CMPI.B #"B",D0
  1831.     BEQ LOADIFF
  1832.     CMPI.B #"E",D0
  1833.     BEQ SAVMOD
  1834.     CMPI.B #"G",D0
  1835.     BEQ DELMOD
  1836.     CMPI.B #"F",D0
  1837.     BEQ DELFILE
  1838.     CMPI.B #"H",D0
  1839.     BEQ MAKEDIR
  1840.     CMPI.B #"C",D0
  1841.     BEQ LOADMOD
  1842.     CMPI.B #"I",D0
  1843.     BEQ CLRALL
  1844.     BRA LMGET
  1845.  
  1846. LDRMEX:    MOVE.L GRBAS,A6
  1847.     JSR -30-426(A6)
  1848.     MOVE.L 4,A6
  1849.     JSR -30-102(A6)
  1850.  
  1851. MOTROFF:ORI.B #$88,$BFD100
  1852.     ANDI.B #$87,$BFD100
  1853.     ORI.B #$78,$BFD100
  1854.     BRA MENU
  1855.  
  1856. ********** DATAS LOADER **********
  1857.  
  1858. FILEMES:DC.B "DRIVE:DRAWER/FILENAME",13,">",0
  1859.     EVEN
  1860. FILENF:    DC.B "*** FILE NOT FOUND! ***",13
  1861.     DC.B "     (PRESS SPACE)",0
  1862.     EVEN
  1863.  
  1864. NOTFUCO:DC.B "*** NOT A FUCO DATA FILE! ***",13
  1865.     DC.B "        (PRESS SPACE)",0
  1866.     EVEN
  1867.  
  1868. FUCFINI:DC.B "DATAS LOADED, PRESS SPACE...",0
  1869.     EVEN
  1870.  
  1871. DLHAND:    DC.L 0
  1872.  
  1873. DATLDR:    BSR CLS
  1874.     LEA FILEMES,A0
  1875.     BSR PRINT
  1876.     MOVE.B #79,D0
  1877.     BSR INPUT
  1878.     TST.B D0
  1879.     BEQ LDRMENU
  1880.     LEA RETCHAR,A0
  1881.     BSR PRINT
  1882.  
  1883.     MOVE.L DBASE,A5
  1884.     MOVE.L #INBUFF,D1
  1885.     MOVE.L #1005,D2
  1886.     JSR -30(A5)
  1887.     MOVE.L D0,DLHAND
  1888.     TST.L D0
  1889.     BNE DLFOUND
  1890.  
  1891.     LEA FILENF,A0
  1892.     BSR PRINT
  1893.     BSR SPACEWT
  1894.     BRA LDRMENU
  1895.  
  1896. DLFOUND:MOVE.L DLHAND,D1
  1897.     MOVE.L #INBUFF,D2
  1898.     MOVE.L #4,D3
  1899.     JSR -42(A5)
  1900.     CMPI.L #"FUCO",INBUFF
  1901.     BEQ ISADL
  1902.     
  1903. NOFU:    LEA NOTFUCO,A0
  1904. CLOFU:    BSR PRINT
  1905.     BSR SPACEWT    
  1906.     MOVE.L DLHAND,D1
  1907.     JSR -36(A5)
  1908.     BRA LDRMENU
  1909.  
  1910. ISADL:    MOVE.L DLHAND,D1
  1911.     MOVE.L #TRK0,D2
  1912.     MOVE.L #$4400,D3
  1913.     JSR -42(A5)    
  1914.     TST.L D0
  1915.     BEQ ISAOK
  1916.     MOVE.L D0,$A0000
  1917.     CMPI.W #$4400,D0
  1918.     BNE NOFU
  1919. ISAOK:    LEA FUCFINI,A0
  1920.     BRA CLOFU
  1921.     BRA LMGET
  1922.  
  1923. ********** MALLOC/DALLOC DIGI MANAGER **********
  1924. ********* D2=SOUND # TO ALLOC, D3=LEN. *********
  1925.  
  1926. ALLOLEN:DC.L 0
  1927. SNDNR:    DC.W 0
  1928. MEMTAB:    BLK.L 128,0
  1929. MALLOC:    MOVEM.L D4-D7/A0-A6,-(A7)
  1930.     BSR DALLOC
  1931.     MOVE.L D3,D0
  1932.     MOVE.L D3,ALLOLEN
  1933.     MOVE.W D2,SNDNR
  1934.     MOVEQ #2,D1
  1935.     MOVE.L 4,A6
  1936.     JSR -198(A6)
  1937.     MOVE.W SNDNR,D2
  1938.     ANDI.W #$3F,D2
  1939.     ASL.W #3,D2
  1940.     LEA MEMTAB,A0
  1941.     MOVE.L D0,(A0,D2.W)
  1942.     MOVE.L ALLOLEN,4(A0,D2.W)
  1943.     MOVEM.L (A7)+,D4-D7/A0-A6
  1944.     RTS
  1945.  
  1946. DALLOC:    MOVEM.L D0-D7/A0-A6,-(A7)
  1947.     ANDI.L #$3F,D2
  1948.     MOVE.L D2,D3    
  1949.     LEA DIGBLOK,A1
  1950.     ASL.W #4,D3
  1951.     ADD.L D3,A1
  1952.     CLR.L (A1)+
  1953.     CLR.L (A1)+
  1954.     CLR.L (A1)+
  1955.     CLR.L (A1)+
  1956.  
  1957.     ASL.W #3,D2
  1958.     LEA MEMTAB,A0
  1959.     MOVE.L (A0,D2.W),A1
  1960.     CMPI.L #0,A1
  1961.     BEQ DFREE
  1962.     MOVE.L 4(A0,D2.W),D0
  1963.     MOVE.L 4,A6
  1964.     JSR -210(A6)
  1965. DFREE:    LEA MEMTAB,A0
  1966.     CLR.L (A0,D2.W)
  1967.     CLR.L 4(A0,D2.W)
  1968.     MOVEM.L (A7)+,D0-D7/A0-A6
  1969.     RTS
  1970.  
  1971. ********** LOAD IFF DIGI SECTION **********
  1972.  
  1973. LNAM:    DC.L 0
  1974. LBOD:    DC.L 0
  1975. LSTR:    DC.L 0
  1976. LREP:    DC.L 0
  1977. LSND:    DC.L 0
  1978.  
  1979. LIFFDMS:DC.B "          -=LOAD IFF DIGI=-",13,13
  1980.     DC.B "DRIVE:DRAWER/FILENAME",13
  1981.     DC.B ">",13,13,13,13
  1982.     DC.B "----------------------------------------"
  1983.     DC.B "SOUND NR  :   (USE 00-3E)",13
  1984.     DC.B "HEADER    :",13
  1985.     DC.B "CREATED IN:",13
  1986.     DC.B "SOUND NAME:",13
  1987.     DC.B "BODY LEN  :",13
  1988.     DC.B "START LOOP:",13
  1989.     DC.B "REPEAT LEN:",13
  1990.     DC.B "----------------------------------------",0
  1991.     EVEN
  1992. IFFHAN:    DC.L 0
  1993.  
  1994. LOADIFF:BSR CLS
  1995.     LEA LIFFDMS,A0
  1996.     BSR PRINT
  1997.     MOVE.W #$0103,CX
  1998.     MOVE.W #119,D0
  1999.     BSR INPUT
  2000.     TST.B D0
  2001.     BEQ LDRMENU
  2002.     
  2003.     MOVE.L #INBUFF,D1
  2004.     MOVE.L #1005,D2
  2005.     MOVE.L DBASE,A6
  2006.     JSR -30(A6)
  2007.     MOVE.L D0,IFFHAN
  2008.     TST.L D0
  2009.     BEQ NIFFFIL
  2010.     
  2011.     MOVE.L IFFHAN,D1
  2012.     MOVE.L #FILEINF,D2
  2013.     MOVE.L #$100,D3
  2014.     JSR -42(A6)
  2015.  
  2016.     CMPI.L #"FORM",FILEINF
  2017.     BNE NIFFFIL
  2018.     CLR.B FILEINF+16
  2019.     LEA FILEINF+8,A0
  2020.     JSR UCASER
  2021.     MOVE.W #$0B09,CX
  2022.     BSR PRINT
  2023.     CMPI.L #"8SVX",FILEINF+8    
  2024.     BNE NIFFFIL
  2025.     MOVE.L FILEINF+$14,D0    
  2026.     MOVE.L D0,LSTR
  2027.     BSR LONGCON
  2028.     LEA LONG,A0
  2029.     MOVE.W #$0B0D,CX
  2030.     BSR PRINT
  2031.     MOVE.L FILEINF+$18,D0
  2032.     MOVE.L D0,LREP
  2033.     BSR LONGCON
  2034.     MOVE.W #$0B0E,CX
  2035.     BSR PRINT    
  2036.     
  2037.     MOVE.L #"ANNO",D1            
  2038.     BSR SRCHFOR    
  2039.     CMPI.L #$00,A0
  2040.     BEQ EXIFNAM
  2041.     JSR UCASER
  2042.     MOVE.W #$0B0A,CX
  2043.     BSR PRINT
  2044.  
  2045. EXIFNAM:MOVE.L #"NAME",D1
  2046.     BSR SRCHFOR
  2047.     CMPI.L #$00,A0
  2048.     BEQ FETBODY
  2049.     JSR UCASER
  2050.     MOVE.L (A0),LNAM
  2051.     MOVE.W #$0B0B,CX
  2052.     BSR PRINT
  2053.  
  2054. FETBODY:MOVE.L #"BODY",D1
  2055.     BSR SRCHFOR
  2056.     CMPI.L #$00,A0
  2057.     BEQ NIFFFIL
  2058.     MOVE.W D0,D2    
  2059.     ANDI.L #$FF,D2
  2060.     MOVE.L #-1,D3
  2061.     MOVE.L IFFHAN,D1
  2062.     JSR -66(A6)
  2063.  
  2064.     MOVE.L #FILEINF,D2    ; READ "BODY",LEN.L
  2065.     MOVE.L #$08,D3    
  2066.     MOVE.L IFFHAN,D1
  2067.     JSR -42(A6)
  2068.  
  2069.     MOVE.L FILEINF+4,D0
  2070.     MOVE.L D0,LBOD
  2071.     BSR LONGCON
  2072.     LEA LONG,A0
  2073.     MOVE.W #$0B0C,CX
  2074.     BSR PRINT
  2075.  
  2076.     MOVE.B #2,D0
  2077.     MOVE.W #$0B08,CX
  2078.     BSR INPUT
  2079.     MOVE.W #$0011,CX
  2080.     BSR CONVSTR
  2081.     ANDI.L #$3F,D0
  2082.     CMPI.B #$3F,D0
  2083.     BNE IFNO3F
  2084.     MOVE.B #$3E,D0
  2085. IFNO3F:    MOVE.B D0,D2
  2086.     MOVE.L D0,LSND
  2087.     MOVE.L FILEINF+4,D3
  2088.     CMPI.L #$20000,D3
  2089.     BGT TOOLONG
  2090.     BSR MALLOC
  2091.     TST.L D0
  2092.     BEQ NOMEM
  2093.  
  2094.     MOVE.L FILEINF+4,D3
  2095.     MOVE.L D0,D2
  2096.     MOVE.L IFFHAN,D1    
  2097.     JSR -42(A6)
  2098.     MOVE.L IFFHAN,D1
  2099.     JSR -36(A6)
  2100.     LEA IFLDOK,A0
  2101.     BSR PRINT
  2102.  
  2103.     LEA DIGBLOK,A0    
  2104.     MOVE.L LSND,D0
  2105.     ASL.W #4,D0
  2106.     ADD.L D0,A0
  2107.     MOVE.L LNAM,(A0)+
  2108.     MOVE.L LBOD,(A0)+
  2109.     MOVE.L LSTR,(A0)+
  2110.     MOVE.L LREP,(A0)+
  2111.  
  2112.     BSR SPACEWT
  2113.     BRA LDRMENU
  2114.  
  2115. IFLDOK:    DC.B "*** SOUND LOADED OK ***",13
  2116.     DC.B "PRESS SPACE...",0
  2117.  
  2118. NOMEMMS:DC.B "*** NOT ENOUGH MEMORY FOR SOUND ***",13
  2119.     DC.B "PRESS SPACE...",0
  2120.  
  2121. TOOMESS:DC.B "*** SOUND IS TOO LONG: >$20000 BYTES ***"
  2122.     DC.B "PRESS SPACE...",0
  2123.     EVEN
  2124.  
  2125. NOMEM:    LEA NOMEMMS,A0
  2126. NOMEMA:    BSR PRINT
  2127.     BRA CLOSIFF
  2128.  
  2129. TOOLONG:LEA TOOMESS,A0
  2130.     BRA NOMEMA
  2131.  
  2132. ********** D1=4 CHAR IDT TO SEARCH FOR IN IFF FILE **********
  2133. ********** A0 RETURNS WHERE. NULL=NOT FOUND **********
  2134.  
  2135. SRCHFOR:LEA FILEINF,A0
  2136.     CLR.L D0
  2137. SRCHLPA:CMP.L (A0,D0.W),D1
  2138.     BEQ FNDSRCH    
  2139.     ADDQ #2,D0
  2140.     CMPI.L #$100,D0
  2141.     BNE SRCHLPA
  2142.     MOVE.L #0,A0
  2143.     RTS
  2144. FNDSRCH:ADD.L D0,A0
  2145.     ADDQ.L #8,A0
  2146.     RTS
  2147.  
  2148. NIFFFMS:DC.B "*** NOT AN IFF SOUND FILE! ***",13
  2149.     DC.B "PRESS SPACE...",0
  2150.  
  2151. NIFFFIL:LEA NIFFFMS,A0
  2152.     MOVE.W #$0011,CX
  2153.     BSR PRINT
  2154.     TST.L IFFHAN
  2155.     BEQ NIFCLEX
  2156. CLOSIFF:MOVE.L IFFHAN,D1
  2157.     MOVE.L DBASE,A6
  2158.     JSR -36(A6)
  2159. NIFCLEX:JSR SPACEWT
  2160.     BRA LOADIFF
  2161.  
  2162. ********** CONVERT INBUFF STRING TO HEX IN D0.L **********
  2163.  
  2164. CONVSTR:MOVEM.L D1-D3/A0-A1,-(A7)
  2165.     CLR.L D0
  2166.     CLR.L D1
  2167.     LEA INBUFF,A0
  2168.     LEA HEX,A1
  2169. CVMAIN:    TST.B (A0,D1.B)
  2170.     BEQ CVSEX
  2171.     LSL.L #4,D0
  2172.     MOVE.B (A0,D1.B),D2
  2173.     CLR.L D3
  2174. CVSHXLP:CMP.B (A1,D3.B),D2
  2175.     BEQ CVSHXFD
  2176.     ADDQ #1,D3
  2177.     CMPI.B #$10,D3
  2178.     BNE CVSHXLP
  2179.     CLR.B D3
  2180. CVSHXFD:ADD.L D3,D0
  2181.     ADDI.W #1,D1
  2182.     BRA CVMAIN
  2183. CVSEX:    MOVEM.L (A7)+,D1-D3/A0-A1
  2184.     RTS
  2185.  
  2186. ********** REMOVE KEYSTROKES **********
  2187.  
  2188. VOIDHAN:DC.L 0
  2189. VNAME:    DC.B "CON:0/0/127/10/The Void",0
  2190.     EVEN
  2191.  
  2192. VOPEN:    MOVE.L DBASE,A6
  2193.     MOVE.L #VNAME,D1
  2194.     MOVE.L #1005,D2
  2195.     JSR -30(A6)
  2196.     MOVE.L D0,VOIDHAN
  2197.     RTS    
  2198.  
  2199. VCLOSE:    MOVE.L DBASE,A6
  2200.     MOVE.L VOIDHAN,D1
  2201.     JSR -36(A6)
  2202.     RTS
  2203.  
  2204. ********** DO THE GREETINGS **********
  2205.  
  2206. DOGREET:BSR CLS
  2207.     LEA GRMESS,A0
  2208.     BSR PRINT
  2209.     BSR SPACEWT
  2210.     BRA MENU
  2211.  
  2212. GRMESS:    DC.B "GREETINGS TO...",13
  2213.     DC.B "---------------",13,13
  2214.     DC.B "UNCLE INDY AND LORD FLASH-HEART OF THE",13
  2215.     DC.B "AMIGA PRIVATEERS SOCIETY, SLOWHAND OF",13
  2216.     DC.B "ICE, THE OWL (NIGEL IN OZ!), PILGRIM,",13
  2217.     DC.B "HCE OF ELF, MERLIN AT GENERAL,",13
  2218.     DC.B "DRAGONFLY AT THE DISMAL SWAMP, AND",13
  2219.     DC.B "PSYCHOPATH OF SPECTRE IN SWEDEN!",13,13
  2220.     DC.B "MANY THANKS TO THE AMIGA FOR BEING THE",13
  2221.     DC.B "GREAT COMPUTER THAT IT IS! FLUSH THOSE",13
  2222.     DC.B "UPGRADED IBM AMIGA-WANNA-BE'S DOWN THE",13
  2223.     DC.B "SEWER SYSTEM!",13,13
  2224.     DC.B "REMEMBER- A DIRTY MIND IS A TERRIBLE",13
  2225.     DC.B "THING TO WASTE!",13,13
  2226.     DC.B "                       -SLATES FROM BSI!",13
  2227.     DC.B "(HIT THE LONG ONE...)",0
  2228.     EVEN 
  2229.  
  2230. ********** SAVE A MODULE **********
  2231.  
  2232. SVMDMES:DC.B "SAVE MEMORY AS A FC MODULE...",13
  2233.     DC.B "DRIVE:DRAWER/FILE",13,">",0
  2234.  
  2235. SVMERRR:DC.B 13,13,"*** FILE ERROR ***",13
  2236.     DC.B "PRESS SPACE...",0
  2237.     EVEN
  2238. SHAND:    DC.L 0
  2239. CURMODN:DC.W 0
  2240.  
  2241. SAVMOD:    BSR CLS
  2242.     LEA SVMDMES,A0
  2243.     BSR PRINT
  2244.     MOVE.B #79,D0
  2245.     BSR INPUT
  2246.     TST.B D0
  2247.     BEQ LDRMENU
  2248.  
  2249.     MOVE.L DBASE,A6
  2250.     MOVE.L #INBUFF,D1
  2251.     MOVE.L #1006,D2
  2252.     JSR -30(A6)
  2253.     MOVE.L D0,SHAND
  2254.     TST.L D0
  2255.     BEQ SVMERRD
  2256.  
  2257.     MOVE.L SHAND,D1
  2258.     MOVE.L #DATSTRT,D2
  2259.     MOVE.L #BLOKEND-DATSTRT,D3
  2260.     JSR -48(A6)
  2261.     TST.L D0
  2262.     BMI SVMERRD
  2263.         
  2264.     CLR.W CURMODN        
  2265. FETLP:    MOVE.W CURMODN,D2
  2266.     BSR FETBUFF
  2267.     TST.L D3
  2268.     BEQ NXTFETH
  2269.     MOVE.L DBASE,A6
  2270.     MOVE.L SHAND,D1
  2271.     JSR -48(A6)
  2272.     TST.L D0
  2273.     BMI SVMERRD
  2274. NXTFETH:ADDI.W #1,CURMODN
  2275.     CMPI.W #$3F,CURMODN
  2276.     BNE FETLP
  2277.     LEA MODSVOK,A0
  2278.     BSR PRINT
  2279.     BRA CLOSVM
  2280.  
  2281. MODSVOK:DC.B 13,13,"MODULE SAVED OK, PRESS SPACE...",0
  2282.     EVEN
  2283.  
  2284. SVMERRD:LEA SVMERRR,A0
  2285.     BSR PRINT
  2286.     TST.L SHAND
  2287.     BEQ NOSVMCL
  2288. CLOSVM:    MOVE.L SHAND,D1
  2289.     JSR -36(A6)
  2290. NOSVMCL:BSR SPACEWT
  2291.     BRA LDRMENU
  2292.  
  2293. ***** FETCH BUFFER(D2),LEN(D3)WHEN SOUNDNR IS IN D2 *****
  2294.  
  2295. FETBUFF:MOVE.L A0,-(A7)
  2296.     LEA MEMTAB,A0
  2297.     ANDI.L #$3F,D2
  2298.     ASL.W #3,D2
  2299.     ADD.L D2,A0
  2300.     MOVE.L (A0),D2
  2301.     MOVE.L 4(A0),D3
  2302.     MOVE.L (A7)+,A0
  2303.     RTS
  2304.  
  2305. ********** DELETE A DIGI IN RAM **********
  2306.  
  2307. DELMDTX:DC.B "DELETE A DIGI SOUND IN RAM:",13
  2308.     DC.B "ENTER 00-3E FOR SOUND TO DELETE",13,">",0
  2309.  
  2310. DELMDTY:DC.B 13,13,"THE SOUND HAS BEEN DELETED.",13
  2311.     DC.B "PRESS THE LONG BEIGE BAR...",0
  2312.  
  2313. DELMOD:    BSR CLS
  2314.     LEA DELMDTX,A0
  2315.     BSR PRINT
  2316.     MOVE.B #2,D0
  2317.     BSR INPUT
  2318.     TST.B D0
  2319.     BEQ LDRMENU
  2320.     BSR CONVSTR
  2321.     MOVE.L D0,D2
  2322.     BSR DALLOC
  2323.     LEA DELMDTY,A0
  2324.     BSR PRINT
  2325.     BSR SPACEWT
  2326.     BRA LDRMENU
  2327.  
  2328. ********** DELETE A FILE ON ANY DEVICES... **********
  2329.  
  2330. DELMESS:DC.B "DELETE A FILE:",13
  2331.     DC.B "USE DRIVE:DRAWER/FILE",13,">",0
  2332.  
  2333. DELMOK:    DC.B 13,13,"FILE WAS DELETED. PRESS SPACE...",0
  2334. DELERR:    DC.B 13,13,"*** FILE ERROR ***",13
  2335.     DC.B       "   PRESS SPACE!",0
  2336.     EVEN
  2337.  
  2338. DELFILE:BSR CLS
  2339.     LEA DELMESS,A0
  2340.     BSR PRINT
  2341.     MOVE.B #79,D0
  2342.     BSR INPUT
  2343.     TST.B D0
  2344.     BEQ LDRMENU
  2345.     
  2346.     MOVE.L DBASE,A6
  2347.     MOVE.L #INBUFF,D1
  2348.     JSR -72(A6)
  2349.     TST.L D0
  2350.     BEQ DELMERR
  2351.     LEA DELMOK,A0
  2352.     BRA DELPR
  2353. DELMERR:LEA DELERR,A0
  2354. DELPR:    BSR PRINT
  2355.     BSR SPACEWT
  2356.     BRA LDRMENU
  2357.  
  2358. ********** MAKEDIR **********
  2359.  
  2360. MDMESS:    DC.B "CREATE A SUBDIRECTORY (AKA MAKEDIR):",13
  2361.     DC.B ">",0
  2362.  
  2363. MDMOK:    DC.B 13,13,"DIRECTORY WAS CREATED. PRESS SPACE.",0
  2364. MDMERR:    DC.B 13,13,"OPERATION FAILED.  PRESS SPACE.",0
  2365.     EVEN
  2366.  
  2367. MAKEDIR:BSR CLS
  2368.     LEA MDMESS,A0
  2369.     BSR PRINT
  2370.     MOVE.B #79,D0
  2371.     BSR INPUT
  2372.     TST.B D0
  2373.     BEQ LDRMENU
  2374.     MOVE.L DBASE,A6
  2375.     MOVE.L #INBUFF,D1
  2376.     JSR -120(A6)
  2377.     TST.L D0
  2378.     BEQ MDER
  2379.     LEA MDMOK,A0
  2380.     BRA DELPR
  2381. MDER:    LEA MDMERR,A0
  2382.     BRA DELPR
  2383.  
  2384. ********** LOAD A FC MODULE **********
  2385.  
  2386. LDFCM:    DC.B "LOAD A FC MODULE...",13
  2387.     DC.B "DRIVE:DRAWER/FILENAME",13,">",0
  2388.  
  2389. LDERR:    DC.B 13,13,"*** NOT A FC MODULE OR CORRUPTED ***",13
  2390.     DC.B       "            PRESS SPACE!",0
  2391.            
  2392. LDNF:    DC.B 13,13,"FILE NOT FOUND. PRESS SPACE.",0
  2393.     EVEN
  2394. LDHAN:    DC.L 0
  2395. MALSAV:    BLK.B 16,0
  2396.  
  2397. LOADMOD:BSR CLS
  2398.     LEA LDFCM,A0
  2399.     BSR PRINT
  2400.     MOVE.B #79,D0
  2401.     BSR INPUT
  2402.     TST.B D0
  2403.     BEQ LDRMENU
  2404.  
  2405.     MOVE.L DBASE,A6
  2406.     MOVE.L #INBUFF,D1
  2407.     MOVE.L #1005,D2
  2408.     JSR -30(A6)
  2409.     MOVE.L D0,LDHAN
  2410.     TST.L D0
  2411.     BNE LDFOUND
  2412.  
  2413.     LEA LDNF,A0
  2414.     BSR PRINT
  2415.     BSR SPACEWT
  2416.     BRA LDRMENU
  2417.  
  2418. LDFOUND:MOVE.L LDHAN,D1
  2419.     MOVE.L #FILEINF,D2
  2420.     MOVE.L #4,D3
  2421.     JSR -42(A6)
  2422.     TST.L D0
  2423.     BPL LDROK
  2424.  
  2425. LDRERR:    MOVE.L LDHAN,D1
  2426.     JSR -36(A6)
  2427.     BSR SPACEWT
  2428.     LEA LDERR,A0
  2429.     BSR PRINT
  2430.     BSR SPACEWT
  2431.     BRA LDRMENU
  2432.  
  2433. LDROK:    CMPI.L #"FUCO",FILEINF
  2434.     BNE LDRERR
  2435.     MOVE.L LDHAN,D1
  2436.     MOVE.L #$4404,D2
  2437.     MOVE.L #-1,D3
  2438.     JSR -66(A6)
  2439.     MOVE.L LDHAN,D1
  2440.     MOVE.L #FILEINF,D2
  2441.     MOVE.L #4,D3
  2442.     JSR -42(A6)
  2443.     CMPI.L #"DIGI",FILEINF
  2444.     BNE LDROK
  2445.     MOVE.L LDHAN,D1
  2446.     MOVE.L #$47F8,D2
  2447.     MOVE.L #-1,D3
  2448.     JSR -66(A6)
  2449.     MOVE.L LDHAN,D1
  2450.     MOVE.L #FILEINF,D2
  2451.     MOVE.L #4,D3
  2452.     JSR -42(A6)
  2453.     CMPI.L #"DIGP",FILEINF
  2454.     BNE LDROK
  2455.  
  2456.     CLR.W CURMODN
  2457. DELDLP:    MOVE.W CURMODN,D2
  2458.     BSR DALLOC
  2459.     ADDI.W #1,CURMODN
  2460.     CMPI.W #$3F,CURMODN
  2461.     BNE DELDLP
  2462.  
  2463.     MOVE.L LDHAN,D1
  2464.     CLR.L D2
  2465.     MOVE.L #-1,D3
  2466.     JSR -66(A6)
  2467.     MOVE.L LDHAN,D1
  2468.     MOVE.L #DATSTRT,D2
  2469.     MOVE.L #$47FC,D3
  2470.     JSR -42(A6)
  2471.  
  2472.     LEA LDESTAT,A0
  2473.     BSR PRINT
  2474.  
  2475.     CLR.W CURMODN
  2476. INDIGIS:LEA DIGBLOK,A3
  2477.     CLR.L D0
  2478.     MOVE.W CURMODN,D0
  2479.     ASL.W #4,D0
  2480.     ADD.L D0,A3
  2481.     TST.L (A3)
  2482.     BEQ INDIGSK
  2483.     MOVE.L (A3),LONG
  2484.     CLR.B LONG+4
  2485.     LEA LONG,A0
  2486.     BSR PRINT
  2487.     MOVE.L 4(A3),D0
  2488.     BSR LONGCON
  2489.     LEA LONG,A0
  2490.     MOVE.B #6,CX
  2491.     BSR PRINT
  2492.     MOVE.L 8(A3),D0
  2493.     BSR LONGCON
  2494.     LEA LONG,A0
  2495.     MOVE.B #16,CX
  2496.     BSR PRINT
  2497.     MOVE.L 12(A3),D0
  2498.     BSR LONGCON
  2499.     LEA LONG,A0
  2500.     MOVE.B #26,CX
  2501.     BSR PRINT
  2502.     LEA RETCHAR,A0
  2503.     BSR PRINT
  2504.  
  2505.     LEA MALSAV,A2
  2506.     MOVE.L (A3),(A2)
  2507.     MOVE.L 4(A3),4(A2)
  2508.     MOVE.L 8(A3),8(A2)
  2509.     MOVE.L 12(A3),12(A2)
  2510.  
  2511.     MOVE.L 4(A3),D3
  2512.     MOVE.W CURMODN,D2
  2513.     BSR MALLOC
  2514.  
  2515.     MOVE.L (A2),(A3)
  2516.     MOVE.L 4(A2),4(A3)
  2517.     MOVE.L 8(A2),8(A3)
  2518.     MOVE.L 12(A2),12(A3)
  2519.  
  2520.     TST.L D0
  2521.     BEQ LNOMEML
  2522.  
  2523.     MOVE.L LDHAN,D1
  2524.     MOVE.L D0,D2
  2525.     MOVE.L 4(A3),D3
  2526.     JSR -42(A6)
  2527.     TST.L D0
  2528.     BMI LDRERR
  2529.  
  2530. INDIGSK:ADDI.W #1,CURMODN
  2531.     CMPI.W #$3F,CURMODN
  2532.     BNE INDIGIS
  2533.  
  2534.     MOVE.L LDHAN,D1
  2535.     JSR -36(A6)
  2536.     LEA LDEDOK,A0
  2537.     BSR PRINT
  2538.     BSR SPACEWT
  2539.     BRA LDRMENU
  2540.  
  2541. LDEDOK:    DC.B 13,"*** MODULE LOADED OK, PRESS SPACE ***",0
  2542.     EVEN
  2543.  
  2544. LDESTAT:DC.B 13,13,"NAME  BODY LEN  STRTLOOP  REPEATLP",13
  2545.     DC.B "----  --------  --------  --------",13,0
  2546.     EVEN
  2547.  
  2548. LNOMEMS:DC.B 13,13,"*** OUT OF MEMORY! ***",13
  2549.     DC.B       "     PRESS SPACE!",0
  2550.     EVEN
  2551.  
  2552. LNOMEML:MOVE.L LDHAN,D1
  2553.     JSR -36(A6)
  2554.     LEA LNOMEMS,A0
  2555.     BSR PRINT
  2556.     BSR SPACEWT
  2557.     BRA LDRMENU
  2558.  
  2559. ********** CLEAR ALL DATAS **********
  2560.  
  2561. CLDMES:    DC.B "CLEAR ALL DATAS IN MEMORY. NOTE THAT",13
  2562.     DC.B "ALL TRACK, BLOCK, AND DIGI DATAS WILL",13
  2563.     DC.B "BE INCINERATED FROM MEMORY!",0
  2564.     EVEN
  2565.  
  2566. CLRALL:    BSR CLS
  2567.     LEA CLDMES,A0
  2568.     BSR PRINT
  2569.     LEA ARUSURE,A0
  2570.     BSR PRINT
  2571. CLRALP:    BSR GET
  2572.     TST.B D0
  2573.     BEQ CLRALP
  2574.     CMPI.B #"Y",D0
  2575.     BEQ INCINER
  2576.     CMPI.B #"N",D0
  2577.     BNE CLRALP
  2578.     BRA LDRMENU
  2579.  
  2580. INCINER:CLR.W CURMODN
  2581. INCINLP:MOVE.W CURMODN,D2
  2582.     BSR DALLOC
  2583.     ADDI.W #1,CURMODN
  2584.     CMPI.W #$3F,CURMODN
  2585.     BNE INCINLP
  2586.  
  2587.     LEA DIGBLOK,A0
  2588.     MOVE.W #1007,D0
  2589. DBFIX:    CLR.B (A0)+
  2590.     DBF D0,DBFIX
  2591.  
  2592.     LEA TRK0,A0
  2593.     MOVE.W #1023,D0
  2594. TRKCLR:    CLR.B (A0)+
  2595.     DBF D0,TRKCLR
  2596.  
  2597.     LEA BLOX,A0
  2598.     MOVE.W #$3FFF,D0
  2599. BLXFIL:    ST (A0)+        ; ST IS A BYTE INSTRUCTION!
  2600.     DBF D0,BLXFIL
  2601.     BRA LDRMENU
  2602.  
  2603. *///////// MUSIC DATAS SECTION... \\\\\\\\\*
  2604.  
  2605. BPL:    BLK.B 8000,0
  2606.  
  2607. TR0P:    DC.W 0
  2608. TR1P:    DC.W 0
  2609. TR2P:    DC.W 0
  2610. TR3P:    DC.W 0
  2611.  
  2612. DATSTRT:DC.B "FUCO"
  2613. TRK0:    BLK.B 256,0
  2614. TRK1:    BLK.B 256,0
  2615. TRK2:    BLK.B 256,0
  2616. TRK3:    BLK.B 256,0
  2617. BLOX:    BLK.B 256*64,$FF
  2618.  
  2619. DIGSTRT:DC.B "DIGI"
  2620. DIGBLOK:BLK.B 63*16,0
  2621.     DC.B "DIGP"
  2622. BLOKEND:BLK.B 256,$FF    ; USED AS A BLOCK BUFFER FOR ? AND !
  2623.  
  2624. ********** THE MUSIC DRIVER **********
  2625.  
  2626. PERTAB:    DC.W 1712,1616,1520,1440,1360,1280,1200,1136,1072,1016,960,904
  2627.     DC.W 856,808,760,720,680,640,600,568,536,508,480,452
  2628.     DC.W 428,404,380,360,340,320,300,284,268,254,240,226
  2629.     DC.W 214,202,190,180,170,165,150,142,134,127,120,113
  2630.     DC.W 107,101,95,90,85,83,75,71,67,64,60,57 ; TRXPOSE VALS...
  2631.     DC.W 54,51,48,45,43,41,38,36,34,32,30,28
  2632.     DC.W 27,25,24,23,21,20,19,18,17,16,15,14
  2633. DMA:    DC.W $0001,$0002,$0004,$0008
  2634. DMV:    DC.W 0
  2635.  
  2636. SADDR:    BLK.L 64*4,0
  2637. OLDCOPR:DC.L 0
  2638.  
  2639. MUSON:    LEA DIGBLOK,A0
  2640.     LEA SADDR,A1
  2641.     MOVE.W #255,D0
  2642. MPLA:    MOVE.L (A0)+,(A1)+
  2643.     DBF D0,MPLA
  2644.  
  2645.     MOVE.L #MEMTAB,A0; BASE ADDRESS OF DIGIS
  2646.     LEA SADDR,A1
  2647.     MOVE.W #63,D0
  2648. PRPLOOP:MOVE.L (A0),(A1)
  2649.     MOVE.L (A0),A2
  2650.     CLR.W (A2)
  2651.     ADDI.L #8,A0
  2652.     ADDI.L #16,A1
  2653.     DBF D0,PRPLOOP
  2654.  
  2655.     MOVE.W #2,TEMPO
  2656.     MOVE.L #$00100010,D0
  2657.     MOVE.L D0,DUR0
  2658.     MOVE.L D0,DUR0+4
  2659.     LSR.L #4,D0
  2660.     MOVE.L D0,RP0
  2661.     MOVE.L D0,RP0+4
  2662.     MOVE.L #$FFFFFFFF,D0
  2663.     MOVE.L D0,BF0
  2664.     MOVE.L D0,BF0+4
  2665.     LEA CDUR0,A0
  2666.     MOVE.W #36,D0
  2667. CLDRVS:    CLR.W (A0)+
  2668.     DBF D0,CLDRVS
  2669.  
  2670. MUSCON:    MOVE.W #$70,$DFF09A
  2671.     MOVE.W #$C020,$DFF09A
  2672.     MOVE.L #IRQ,$6C
  2673.     MOVE.W #$8020,SPRDMA
  2674.     RTS
  2675.  
  2676. MUSOFF:    MOVE.L OLDCOPR,$6C
  2677.     MOVE.W #$000F,$DFF096
  2678.     LEA $DFF0A0,A0
  2679.     CLR.W $8(A0)
  2680.     CLR.W $18(A0)
  2681.     CLR.W $28(A0)
  2682.     CLR.W $38(A0)
  2683.     RTS
  2684.  
  2685. ********** THE ALMIGHTY INTERRUPT **********
  2686.  
  2687. IRQ:    MOVEM.L D0-D7/A0-A6,-(A7)
  2688.     MOVE.W HX,-(A7)    ; SO THE HEX DISPLAY DOESN'T FREAK!
  2689.     LEA $DFF120,A0
  2690.     MOVE.L #SPR0,(A0)+
  2691.     MOVE.L #SPR1,(A0)+
  2692.     MOVE.L #SPR2,(A0)+
  2693.     MOVE.L #SPR3,(A0)+
  2694.     MOVE.L #NULLSPR,D0
  2695.     MOVE.L D0,(A0)+
  2696.     MOVE.L D0,(A0)+
  2697.     MOVE.L D0,(A0)+
  2698.     MOVE.L D0,(A0)+
  2699.     MOVE.W SPRDMA,$DFF096
  2700.     MOVE $DFF01E,D1
  2701.     BTST #4,D1
  2702.     BNE IREXIT
  2703.  
  2704.     MOVE.W #5,FPLAYCT
  2705. DRIVLP:    BSR DRIVER
  2706.     BTST #6,$BFE001
  2707.     BNE DRAWEQ
  2708.     MOVE.L #$FFFFFFFF,EQUA
  2709.     MOVE.L #$FFFFFFFF,EQUA+4
  2710.     SUBI.W #1,FPLAYCT
  2711.     BNE DRIVLP
  2712.  
  2713. DRAWEQ:    MOVE.B 1+BLK0,D0 ; DRAW EQUALIZER + STATS FOR THE TRACKS...
  2714.     LEA STAT0,A0
  2715.     BSR TOSPR
  2716.     MOVE.B 1+BF0,D0
  2717.     BSR TOSPR
  2718.     MOVE.B 1+CDUR0,D0
  2719.     BSR TOSPR
  2720.  
  2721.     MOVE.B 3+BLK0,D0
  2722.     LEA STAT1,A0
  2723.     BSR TOSPR
  2724.     MOVE.B 3+BF0,D0
  2725.     BSR TOSPR
  2726.     MOVE.B 3+CDUR0,D0
  2727.     BSR TOSPR
  2728.  
  2729.     MOVE.B 5+BLK0,D0
  2730.     LEA STAT2,A0
  2731.     BSR TOSPR
  2732.     MOVE.B 5+BF0,D0
  2733.     BSR TOSPR
  2734.     MOVE.B 5+CDUR0,D0
  2735.     BSR TOSPR
  2736.  
  2737.     MOVE.B 7+BLK0,D0
  2738.     LEA STAT3,A0
  2739.     BSR TOSPR
  2740.     MOVE.B 7+BF0,D0
  2741.     BSR TOSPR
  2742.     MOVE.B 7+CDUR0,D0
  2743.     BSR TOSPR
  2744.  
  2745.     SUBI.W #1,STBRTB
  2746.     BNE RMBA
  2747.     MOVE.W #20,STBRTB
  2748.  
  2749. RMBA:    MOVE.W #$0C00,$DFF034    ; RIGHT MOUSE BUTTON SENSE
  2750. RMB:    BTST #10,$DFF016
  2751.     BNE RMBFIX
  2752.     CMPI.W #20,STBRTB
  2753.     BNE IREXIT
  2754.     EORI.W #$8000,SPRDMA
  2755.     BRA IREXIT
  2756.  
  2757. RMBFIX:    MOVE.W #1,STBRTB
  2758. IREXIT:    BSR EQUALZ
  2759.     MOVE #$70,$DFF09C     
  2760.     MOVE.W (A7)+,HX
  2761.     MOVEM.L (A7)+,D0-D7/A0-A6
  2762.     RTE
  2763.  
  2764. STBRTB:    DC.W 20    ; STROBE RMB EVERY 1/3 SEC...
  2765. FPLAYCT:DC.W 0
  2766. SPRDMA:    DC.W $8020
  2767. EQUA:    DC.W 0,0,0,0    ; EQUALIZER VALUES...
  2768.  
  2769. ********** DO EQUALIZER FOR VOICES **********
  2770.  
  2771. EQUALZ:    LEA EQUA,A0
  2772.     LEA EQU0,A1
  2773.     MOVEQ #3,D2
  2774. EQZL:    MOVE.W (A0),D0
  2775.     TST.W D0
  2776.     BPL EQZIN
  2777.     MOVE.L A1,A2
  2778.     MOVEQ #15,D1
  2779. FILEQ:    MOVE.L #$0000FFFF,(A2)+
  2780.     DBF D1,FILEQ    
  2781.     BRA EQUEX
  2782. EQZIN:    ASL.W #2,D0
  2783.     CLR.W 2(A1,D0.W)
  2784. EQUEX:    ADDI.L #168,A1
  2785.     ADDQ.L #2,A0
  2786.     DBF D2,EQZL
  2787.     RTS
  2788.  
  2789. ********** THE SPRITE DATAS (DON'T CHANGE!!!) **********
  2790.  
  2791. SPR0:    DC.L $34505C00
  2792. EQU0:    BLK.L 16,$00000000
  2793. STAT0:    BLK.L 24,$0000FFFF
  2794.     DC.L 0
  2795.  
  2796. SPR1:    DC.L $345C5C00
  2797. EQU1:    BLK.L 16,$00000000
  2798. STAT1:    BLK.L 24,$0000FFFF
  2799.     DC.L 0
  2800.  
  2801. SPR2:    DC.L $34685C00
  2802. EQU2:    BLK.L 16,$00000000
  2803. STAT2:    BLK.L 24,$0000FFFF
  2804.     DC.L 0
  2805.  
  2806. SPR3:    DC.L $34745C00
  2807. EQU3:    BLK.L 16,$00000000
  2808. STAT3:    BLK.L 24,$0000FFFF
  2809.     DC.L 0
  2810.  
  2811. NULLSPR:DC.L $34003400    
  2812.     DC.L $0,$0
  2813.  
  2814. ********** CONV HEX IN D0.B TO SPRITE AT A0.L **********
  2815.  
  2816. TOSPR:    MOVEM.L D0/A1,-(A7)
  2817.     JSR HXCONV
  2818.     MOVE.B HX,D0
  2819.     BSR MAKNUM
  2820.     MOVE.B HX+1,D0
  2821.     ADDQ.L #1,A0
  2822.     BSR MAKNUM
  2823.     MOVEM.L (A7)+,D0/A1
  2824.     ADDI.L #31,A0    ; INCR TO NEXT ROW IN SPRITE...
  2825.     RTS
  2826.  
  2827. MAKNUM:    ANDI.L #$3F,D0
  2828.     ASL.W #3,D0
  2829.     LEA FONT,A1
  2830.     ADD.L D0,A1
  2831.     MOVE.B (A1)+,(A0)
  2832.     MOVE.B (A1)+,4(A0)
  2833.     MOVE.B (A1)+,8(A0)
  2834.     MOVE.B (A1)+,12(A0)
  2835.     MOVE.B (A1)+,16(A0)
  2836.     MOVE.B (A1)+,20(A0)
  2837.     MOVE.B (A1)+,24(A0)
  2838.     MOVE.B (A1)+,28(A0)
  2839.     RTS
  2840.  
  2841. ********** VARIABLES USED IN THE DRIVER **********
  2842.  
  2843. TEMPO:    DC.W 2
  2844. TMCNT:    DC.W 0
  2845.  
  2846. DUR0:    DC.W $10,$10,$10,$10
  2847. CDUR0:    DC.W 0,0,0,0
  2848. GLDUD:    DC.W 0,0,0,0
  2849. TRX0:    DC.W 0,0,0,0
  2850. GLDVAL:    DC.W 0,0,0,0
  2851. PERVAL:    DC.W 0,0,0,0
  2852. BLK0:    DC.W 0,0,0,0
  2853. V0:    DC.W 0,0,0,0
  2854. DETUN0:    DC.W 0,0,0,0
  2855. SN0:    DC.W 0,0,0,0
  2856. SONPLAY:DC.W 0
  2857. INFCHK:    DC.W 0        ; CHECKS FOR ENDLESS LOOPS IN MUSIC...
  2858. BF0:    DC.W $FF,$FF,$FF,$FF
  2859. RP0:    DC.W 1,1,1,1
  2860. VOL0:    DC.W 64,64,64,64
  2861.  
  2862. ********** LET THE MUSIC PLAY... **********
  2863.  
  2864. DRIVER:    TST.W SONPLAY
  2865.     BNE DMOFF
  2866.     SUBI.W #1,TMCNT
  2867.     BPL DRVEX
  2868.     MOVE.W TEMPO,TMCNT
  2869.     MOVEQ #3,D5
  2870. DRVLP:    BSR DRIVOI
  2871.     DBF D5,DRVLP
  2872. DRVEX:    RTS
  2873. DMOFF:    MOVE.W #$000F,$DFF096
  2874.     RTS
  2875.  
  2876. ********** DRIVE VOICE D5.B **********
  2877.  
  2878. DRIVOI:    CLR.W INFCHK
  2879.     LEA $DFF0A0,A4
  2880.     MOVE.W D5,D6
  2881.     ASL.W #1,D6
  2882.     MOVE.W D5,D7
  2883.     ASL.W #4,D7
  2884.  
  2885.     LEA GLDUD(PC),A3
  2886.     TST.W (A3,D6.W)
  2887.     BEQ DOEQUAL
  2888.  
  2889.     LEA DETUN0(PC),A2
  2890.     MOVE.W (A2,D6.W),D1
  2891.     TST.W (A3,D6.W)
  2892.     BMI GLIDEUP    
  2893.     NEG.W D1
  2894.  
  2895. GLIDEUP:LEA PERVAL(PC),A3
  2896.     ADD.W (A3,D6.W),D1
  2897.     ANDI.L #$FFFF,D1
  2898.     CMPI.L #127,D1
  2899.     BGT CHKDGL
  2900.     MOVE.W #127,D1
  2901. CHKDGL:    CMPI.L #$0800,D1
  2902.     BLT NOCHKP
  2903.     MOVE.W #$0800,D1
  2904. NOCHKP:    MOVE.W D1,6(A4,D7.W)
  2905.     MOVE.W D1,(A3,D6.W)
  2906.  
  2907. DOEQUAL:LEA EQUA(PC),A3
  2908.     CMPI.W #$0F,(A3,D6.W)
  2909.     BEQ SKEQINC
  2910.     ADDI.W #$01,(A3,D6.W)
  2911.  
  2912. SKEQINC:LEA 1+BF0(PC),A3
  2913.     CMPI.B #$FF,(A3,D6.W)
  2914.     BNE BLGO
  2915. BEGBLK:    LEA BF0(PC),A3
  2916.     CLR.W (A3,D6.W)
  2917.     LEA RP0(PC),A3
  2918.     SUBI.W #1,(A3,D6.W)
  2919.     BNE BLGO
  2920.  
  2921. NXV:    LEA RP0(PC),A3
  2922.     MOVE.W #1,(A3,D6.W)
  2923. NXVA:    ADDI.W #1,INFCHK    ; THIS TRAPS AN FF VALUE IN
  2924.     BTST #8,INFCHK        ; POSITION 0 OF EACH TRACK...
  2925.     BNE SONEND
  2926.     CLR.L D0
  2927.     MOVE.W D5,D0
  2928.     ASL.W #8,D0
  2929.     LEA TRK0(PC),A0
  2930.     ADD.L D0,A0
  2931.     LEA V0(PC),A3
  2932.     MOVE.W (A3,D6.W),D0
  2933.     CLR.W D1
  2934.     MOVE.B (A0,D0.W),D1
  2935.     CMPI.W #$40,D1
  2936.     BLT FBL
  2937.     CMPI.W #$80,D1
  2938.     BLT RPX
  2939.     CMPI.W #$FB,D1
  2940.     BGT CTR
  2941.     CMPI.B #$BF,D1    
  2942.     BGT FILTMOD
  2943.  
  2944. TRXPOSE:ANDI.W #$3F,D1
  2945.     CMPI.W #35,D1
  2946.     BGT FILTMOD
  2947.     LEA TRX0(PC),A3
  2948.     MOVE.W D1,(A3,D6.W)
  2949.     BRA VINC
  2950.  
  2951. FILTMOD:MOVE.B $BFE001,D0
  2952.     ANDI.B #$FD,D0
  2953.     ANDI.B #1,D1    ; MODIFY FILTER...
  2954.     ASL.B #1,D1
  2955.     OR.B D1,D0
  2956.     MOVE.B D0,$BFE001
  2957.     
  2958. VINC:    LEA 1+V0(PC),A3
  2959.      ADDI.B #1,(A3,D6.W)
  2960.     BRA NXVA
  2961.  
  2962. RPX:    SUBI.W #$3F,D1
  2963.     LEA RP0(PC),A3
  2964.     MOVE.W D1,(A3,D6.W)
  2965.     BRA VINC
  2966.  
  2967. FBL:    LEA 1+V0(PC),A3
  2968.     ADDI.B #1,(A3,D6.W)
  2969.     LEA 1+BLK0(PC),A3
  2970.     MOVE.B D1,(A3,D6.W)
  2971.     BRA BLGO
  2972.  
  2973. CTR:    CMPI.B #$FC,D1
  2974.     BEQ VOL
  2975.     CMPI.B #$FD,D1
  2976.     BEQ GT
  2977.     CMPI.B #$FE,D1
  2978.     BEQ SONEND
  2979.     CMPI.B #$FF,D1
  2980.     BNE VINC
  2981.  
  2982.     LEA V0(PC),A3    ; THE $FF BYTE
  2983.     CLR.W (A3,D6.W)
  2984.     BRA NXV
  2985.  
  2986. SONEND:    ST SONPLAY
  2987.     RTS
  2988.  
  2989. VOL:    ADDI.B #1,D0
  2990.     LEA 1+V0(PC),A3
  2991.     MOVE.B D0,(A3,D6.W)
  2992.     MOVE.B (A0,D0.W),D1
  2993.     MOVE.W D1,8(A4,D7.W); SET VOLUME...
  2994.     LEA VOL0(PC),A3
  2995.     MOVE.W D1,(A3,D6.W)
  2996.     BRA VINC
  2997.  
  2998. GT:    ADDI.B #1,D0
  2999.     LEA 1+V0(PC),A3
  3000.     MOVE.B (A0,D0.W),(A3,D6.W)
  3001.     BRA NXV
  3002.  
  3003. BLGO:    LEA CDUR0(PC),A3
  3004.     SUBI.W #1,(A3,D6.W)
  3005.     BEQ BLDO
  3006.     BMI BLDO
  3007.     RTS
  3008.  
  3009. BLDO:    ADDI.W #1,INFCHK    ; ENDS SONG IF AN INFINITE
  3010.     BTST #8,INFCHK        ; LOOP IS FOUND...
  3011.     BNE SONEND
  3012.     LEA BF0(PC),A3
  3013.     MOVE.W (A3,D6.W),D0
  3014.     LEA BLK0(PC),A3
  3015.     MOVE.W (A3,D6.W),D1
  3016.     ASL.W #8,D1
  3017.     ADD.W D1,D0
  3018.     LEA BLOX(PC),A0
  3019.     CLR.W D1
  3020.     MOVE.B (A0,D0.W),D1 ; VAL IN THE BLOCK...
  3021.     CMPI.B #$FF,D1
  3022.     BEQ BEGBLK
  3023.     CMPI.W #$30,D1
  3024.     BLT PNOT
  3025.     CMPI.W #$70,D1
  3026.     BLT DETFIX
  3027.     CMPI.W #$80,D1
  3028.     BLT TEMFIX
  3029.     CMPI.W #$C0,D1
  3030.     BLT DURFIX
  3031.  
  3032.     ANDI.W #$3F,D1        ; GET SOUND NR.
  3033.     LEA SN0(PC),A3
  3034.     MOVE.W D1,(A3,D6.W)
  3035. NXBF:    LEA 1+BF0(PC),A3
  3036.     ADDI.B #1,(A3,D6.W)
  3037.     BRA BLDO
  3038.  
  3039. TEMFIX:    ANDI.W #$0F,D1
  3040.     MOVE.W D1,TEMPO
  3041.     BRA NXBF
  3042.  
  3043. DETFIX:    LEA GLDUD(PC),A3
  3044.     SUBI.W #$30,D1
  3045.     CMPI.B #$3D,D1
  3046.     BEQ DNGLD
  3047.     CMPI.B #$3E,D1
  3048.     BEQ NOGLD
  3049.     CMPI.B #$3F,D1
  3050.     BEQ UPGLD
  3051.     ASL.W #1,D1
  3052.     LEA DETUN0(PC),A3
  3053.     MOVE.W D1,(A3,D6.W)
  3054.     BRA NXBF
  3055.  
  3056. DNGLD:    MOVE.W #$FFFF,(A3,D6.W)     
  3057.     BRA NXBF
  3058.  
  3059. NOGLD:    CLR.W (A3,D6.W)
  3060.     BRA NXBF
  3061.  
  3062. UPGLD:    MOVE.W #$0001,(A3,D6.W)
  3063.     BRA NXBF    
  3064.  
  3065. DURFIX:    ANDI.W #$3F,D1        
  3066.     TST.B D1
  3067.     BNE DUROK
  3068.     MOVE.B #$40,D1
  3069. DUROK:    LEA DUR0(PC),A3
  3070.     MOVE.W D1,(A3,D6.W)
  3071.     BRA NXBF
  3072.  
  3073. PNOT:    MOVE.W D5,D4
  3074.     ASL.W #1,D4
  3075.     LEA DMA(PC),A3
  3076.     MOVE.W (A3,D4.W),DMV
  3077.     
  3078.     LEA SADDR,A1
  3079.     LEA SN0(PC),A3
  3080.     MOVE.W (A3,D6.W),D0
  3081.     ASL.W #4,D0
  3082.  
  3083.     TST.L 4(A1,D0.W)    ; SKIP IF SOUND NOT LOADED...
  3084.     BEQ PNENDA
  3085.         
  3086.     LEA EQUA(PC),A2        ; RESTART EQUALIZER AT 00...
  3087.     MOVE.W #$FFFF,(A2,D6.W)
  3088.  
  3089.     MOVE.W DMV,$DFF096    
  3090.     MOVE.W #$1D0,D2        ; LET DMA CATCH UP...
  3091. DF:    DBF D2,DF
  3092.     MOVE.L 0(A1,D0.W),(A4,D7.W)
  3093.     MOVE.L 4(A1,D0.W),D2
  3094.     LSR.L #1,D2
  3095.     MOVE.W D2,4(A4,D7.W)
  3096.     LEA TRX0(PC),A2    ; D1 NOTEVAL + THE TRANSPOSE VALUE...
  3097.     ADD.W (A2,D6.W),D1
  3098.     ASL.W #1,D1
  3099.     LEA PERTAB(PC),A2
  3100.     MOVE.W (A2,D1.W),D1
  3101.     LEA DETUN0(PC),A3
  3102.     ADD.W (A3,D6.W),D1
  3103.     MOVE.W D1,6(A4,D7.W)
  3104.     LEA PERVAL(PC),A2
  3105.     MOVE.W D1,(A2,D6.W)
  3106.     ORI.W #$8000,DMV
  3107.     MOVE.W DMV,$DFF096
  3108.  
  3109.     TST.L 12(A1,D0.W)
  3110.     BNE WAVE
  3111.     MOVE.W #1,4(A4,D7.W)
  3112.     BRA PNEND
  3113.  
  3114. WAVE:    MOVE.W #$30,D1
  3115. DMAWT:    DBF D1,DMAWT
  3116.     MOVE.L 12(A1,D0.W),D1
  3117.     LSR.L #1,D1
  3118.     MOVE.W D1,4(A4,D7.W)
  3119.     MOVE.L (A1,D0.W),D1
  3120.     ADD.L 8(A1,D0.W),D1
  3121.     MOVE.L D1,(A4,D7.W)
  3122.  
  3123. PNEND:    LEA VOL0(PC),A3
  3124.     MOVE.W (A3,D6.W),8(A4,D7.W)
  3125. PNENDA:    LEA DUR0(PC),A3
  3126.     LEA CDUR0(PC),A1
  3127.     MOVE.W (A3,D6.W),(A1,D6.W)
  3128.     LEA BF0(PC),A3
  3129.     ADDI.W #1,(A3,D6.W)
  3130.     RTS
  3131.  
  3132. ********** PLACE FONT HERE **********
  3133.  
  3134. FONT:    BLK.B 512,0
  3135.  
  3136.