Prince-of-Persia-Apple-II

A running-jumping-swordfighting game Jordan Mechner made on the Apple II from 1985-89
Log | Files | Refs | README | LICENSE

MSYS.S (12708B)


      1 * msys
      2 org = $d400
      3  lst off
      4 *-------------------------------
      5 *
      6 *  Music System ][
      7 *  by Kyle Freeman
      8 *  (c) 1986
      9 *
     10 *  Adapted by Jordan Mechner
     11 *  July 1989
     12 *
     13 *-------------------------------
     14  org org
     15 
     16  jmp _MINIT
     17  jmp _MPLAY
     18 
     19 *-------------------------------
     20 MusicTable = $d000 ;start address of music data
     21 
     22 *-------------------------------
     23 MADRLO = MusicTable
     24 MADRHI = MusicTable+$68
     25 
     26 R = $00
     27 INDEX = R+30
     28 
     29 *-------------------------------
     30 NOTE DFB 122,254,238,226,214,202,190,178,170,158,150,142,134
     31  DFB 126,118,112,106,100,94,88,84,78,74,70,66
     32  DFB 250,234,222,210,198,186,174,166,154,146,138,130
     33  DFB 122,114,108,102,96,90,84,80,74,70,66,62
     34  DFB 58,54,51,48,45,42,39,37,34,32,30,28
     35  DFB 26,24,22,21,19,18,17,16,15,14,13,12
     36  DFB 11,10,9
     37 LENGTH DFB 28,4,4,4,4,4,5,5,5,6,6,6,7
     38  DFB 7,8,8,8,9,9,10,11,11,12,13,13
     39  DFB 14,15,16,17,18,19,20,21,23,24,25,27
     40  DFB 28,30,32,34,36,38,40,42,45,48,50,53
     41  DFB 57,60,64,67,71,76,81,84,91,95,101,107
     42  DFB 113,121,125,134,139,151,158,165,181,191,201,213
     43  DFB 227,242,255
     44 MV0 HEX 0E0100FF
     45 MV1 HEX 0E04020100FF
     46 MV2 HEX 0E080604020100FF
     47 MV3 HEX 0E0A080605040302010100FF
     48 MV4 HEX 0E0A08070605040403037F02020202010101010100FF
     49 MV5 HEX 010B0DFF
     50 MV6 HEX 000103050B0DFF
     51 MV7 HEX 000102030405060708090A0B0C0DFF
     52 MV8 HEX 010E7F0200FF
     53 MV9 HEX 01040E7F040100FF
     54 MV10 HEX 010306090E7F0906030100FF
     55 MV11 HEX 0E060B040803060205010501040003000200020001000100010001000100FF
     56 MV12 HEX 01040E040D040C040B040B040B040B040B040B040B040B040B040B04FF
     57 MV13 HEX 040E087F040100FF
     58 MV14 HEX 0E02087F040100FF
     59  HEX 0B030A030903080307030603050304030403FF
     60 MV15 HEX 01030B0301030B0301030B0301030B0301030B03
     61  HEX 01030B0301030B0301030B0201020401FF
     62 HM1 DFB 1,3,128
     63 HM2 DFB 3,1,1,1,1,1,1,2,2,1,1,1,1,1,2,1,2,1
     64  DFB 1,1,1,2,1,1,2,1,1,1,2,1,1,1,2,1,1
     65  DFB 2,1,1,1,1,2,1,2,1,1,1,1,1,2,2,1,1,1,1,1,1,128
     66 HM3 DFB 3,1,1,1,1,2,2,1,1,1,2,1,2,1,1,2,1,1
     67  DFB 2,1,2,1,1,1,2,2,1,1,1,1,128
     68 HM4 DFB 3,1,1,1,2,2,1,1,2,1,2,1,2,1,1,2,2,1,1,1,128
     69 HM5 DFB 3,1,1,2,2,1,2,1,2,2,1,1,128
     70 HM6 DFB 3,1,1,1,1,2,1,2,1,1,2,1,1,1,2,2,1,1
     71  DFB 1,1,2,2,1,1,1,2,1,1,2,1,2,1,1,1,1,128
     72 HM7 DFB 3,1,2,2,2,1,128
     73 HM8 DFB 3,1,1,1,1,2,1,1,2,1,2,1,1,1,1,2,2,1,1
     74  DFB 1,2,1,1,1,2,2,1,1,1,1,2,1,2,1,1,2,1,1,1,1,128
     75 HM9 DFB 3,1,1,2,1,2,2,1,1,2,2,1,2,1,1,128
     76 HM10 DFB 3,1,1,1,2,1,1,2,2,1,1,1,2,1,2,1,2
     77  DFB 1,1,1,2,2,1,1,2,1,1,1,128
     78 HM11 DFB 3,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,1,1,1,1
     79  DFB 1,1,1,2,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1
     80  DFB 2,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,2,1,1,1,2
     81  DFB 1,1,1,2,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1
     82  DFB 2,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,2,1,1,1,1
     83  DFB 1,1,1,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,128
     84 HM12 DFB 3,2,128
     85 HM13 DFB 5,2,3,2,4,2,3,2,128
     86 HM14 DFB 4,1,1,1,1,1,2,2,1,2,1,1,2,1,2,1,1,1,3,1,1
     87  DFB 2,1,1,2,1,1,2,2,1,2,1,1,1,1,2,3,1,1,1
     88  DFB 1,1,3,1,1,2,1,1,2,2,1,1,1,1,3,1,2,1,1,1,2
     89  DFB 1,1,3,1,1,2,1,1,1,2,1,3,1,1,1,1,2,2,1
     90  DFB 1,2,1,1,3,1,1,1,1,1,3,2,1,1,1,1,2,1,2,1,1
     91  DFB 1,2,1,1,2,1,1,3,1,1,1,2,1,2,1,1,2,1,2
     92  DFB 2,1,1,1,1,1,128
     93 HM15 DFB 4,1,1,1,2,2,2,1,2,1,2,1,3,1,1,2,2,1,2,1
     94  DFB 3,1,1,1,3,2,1,1,2,1,3,1,2,1,1,2,3,1,1,1
     95  DFB 3,1,2,1,2,2,1,1,3,1,2,1,2,1,2,2,2,1,1,1
     96  DFB 128
     97 HM16 DFB 4,1,1,2,2,2,2,1,2,2,2,1,3,1,1,3,2,1,2,1
     98  DFB 3,2,1,1,3,2,1,2,2,1,3,1,2,2,1,2,3,1,1,2
     99  DFB 3,1,2,1,2,3,1,1,3,1,2,2,2,1,2,2,2,2,1,1,128
    100 HM17 DFB 4,1,1,1,1,2,2,1,2,1,2,1,2,1,1,2,2,1,2,1
    101  DFB 2,1,1,1,3,2,1,1,1,1,3,1,2,1,1,2,2,1,1,1
    102  DFB 3,1,2,1,1,2,1,1,3,1,2,1,1,1,2,2,2,1,1,1
    103  DFB 3,1,1,1,2,2,2,1,1,1,2,1,3,1,1,2,1,1,2,1
    104  DFB 3,1,1,1,2,2,1,1,2,1,3,1,1,1,1,2,3,1,1,1
    105  DFB 2,1,2,1,2,2,1,1,2,1,2,1,2,1,2,2,1,1,1,1
    106  DFB 128
    107 HM18 DFB 3,128
    108 HM19 HEX 030101010301010103010103010103018E
    109 HM20 HEX 030303030303030303030303030303018E
    110 HM21 HEX 050305030502040204020402040203018E
    111 HM22 DFB 3,1,1,2,3,1,1,1,3,1,3,1,1,1,3,1,3,2,1,1
    112  DFB 1,2,1,1,3,1,1,1,1,1,1,1,3,2,1,1,1,1,3,1
    113  DFB 1,1,1,2,1,2,1,1,1,3,1,3,1,1,2,1,1,1,1,1
    114  DFB 1,1,3,1,1,3,2,1,1,1,3,1,1,1,3,1,1,2,1,1
    115  DFB 3,1,1,2,1,1,1,1,1,1,3,2,1,1,1,3,1,1,3,1
    116  DFB 1,3,1,2,2,1,1,1,1,1,3,1,1,3,1,1,1,3,1,1
    117  DFB 1,1,1,1,3,1,1,2,1,1,1,2,3,1,1,2,1,1,3,1
    118  DFB 1,1,3,1,2,1,1,1,3,1,1,2,1,1,3,2,1,1,1,3
    119  DFB 1,1,2,1,1,1,3,1,1,3,1,1,1,3,1,2,1,3,1,1
    120  DFB 128
    121 HM23 DFB 4,1,2,1,1,4,1,1,2,1,4,1,2,4,1,1,2,1,4
    122  DFB 1,3,1,2,4,1,3,1,2,1,1,1,3,1,4,1,3,1,2,1,3
    123  DFB 1,2,1,2,1,3,1,4,1,3,1,1,2,1,1,1,3,1,1
    124  DFB 4,1,2,1,2,1,3,1,1,4,1,4,1,1,2,1,1,4,1,1,2
    125  DFB 1,3,1,4,1,1,2,1,4,1,1,1,2,1,1,4,1,1,1
    126  DFB 3,1,1,2,1,1,1,4,1,1,2,1,1,4,1,1,2,1,1,4,1
    127  DFB 4,1,1,3,1,1,2,1,4,1,2,1,1,4,1,1,3,1,1
    128  DFB 4,1,1,3,1,4,1,2,1,4,1,1,4,1,1,2,1,2,1,4,1
    129  DFB 1,1,1,3,1,2,1,2,1,4,1,1,3,1,4,1,3,1,1
    130  DFB 2,1,4,1,2,1,1,4,1,1,1,3,1,2,1,4,1,2,1,1,1
    131  DFB 4,1,1,2,1,4,1,3,1,4,1,1,2,1,1,2,1,1,1
    132  DFB 4,1,3,1,1,2,1,4,1,1,1,2,1,1,4,1,3,1,4,1,1
    133  DFB 1,1,2,1,4,1,1,128
    134 HM24 DFB 3,3,3,3,3,3,3,1,3,1,3,1,3,1,3,1,3,1,3
    135  DFB 1,1,3,1,1,3,1,1,3,1,1,3,1,1,3,1,1,3,1,1,1
    136  DFB 3,1,1,1,3,1,1,1,3,1,1,1,3,1,1,1,3,1,1
    137  DFB 1,3,1,1,3,1,1,3,1,1,3,1,1,3,1,1,3,1,1,3,1
    138  DFB 3,1,3,1,3,1,3,1,3,1,128
    139 HM25 DFB 3,3,3,1,3,1,3,1,1,3,1,1,3,1,1,1,3,1,1,1,3,1,1,3,1,1,3,1,3,1,128
    140 HM26 DFB 3,3,1,1,1,1,3,3,3,128
    141 HM27 DFB 3,3,1,1,3,1,3,1,1,128
    142 HM28 DFB 3,3,1,128
    143 HM29 HEX 0303030303030103010301030101038D
    144 HM30 DFB 3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3
    145  DFB 1,1,3,1,1,3,1,3,1,3,3,3,3,3,1,3,1,146
    146 HM31 DFB 1,4,128
    147 HM32 DFB 1,3,128
    148 HARMTBL DFB #<HM1
    149  DFB #<HM2
    150  DFB #<HM3
    151  DFB #<HM4
    152  DFB #<HM5
    153  DFB #<HM6
    154  DFB #<HM7
    155  DFB #<HM8
    156  DFB #<HM9
    157  DFB #<HM10
    158  DFB #<HM11
    159  DFB #<HM12
    160  DFB #<HM13
    161  DFB #<HM14
    162  DFB #<HM15
    163  DFB #<HM16
    164  DFB #<HM17
    165  DFB #<HM18
    166  DFB #<HM19
    167  DFB #<HM20
    168  DFB #<HM21
    169  DFB #<HM22
    170  DFB #<HM23
    171  DFB #<HM24
    172  DFB #<HM25
    173  DFB #<HM26
    174  DFB #<HM27
    175  DFB #<HM28
    176  DFB #<HM29
    177  DFB #<HM30
    178  DFB #<HM31
    179  DFB #<HM32
    180 HARMTBH DFB #>HM1
    181  DFB #>HM2
    182  DFB #>HM3
    183  DFB #>HM4
    184  DFB #>HM5
    185  DFB #>HM6
    186  DFB #>HM7
    187  DFB #>HM8
    188  DFB #>HM9
    189  DFB #>HM10
    190  DFB #>HM11
    191  DFB #>HM12
    192  DFB #>HM13
    193  DFB #>HM14
    194  DFB #>HM15
    195  DFB #>HM16
    196  DFB #>HM17
    197  DFB #>HM18
    198  DFB #>HM19
    199  DFB #>HM20
    200  DFB #>HM21
    201  DFB #>HM22
    202  DFB #>HM23
    203  DFB #>HM24
    204  DFB #>HM25
    205  DFB #>HM26
    206  DFB #>HM27
    207  DFB #>HM28
    208  DFB #>HM29
    209  DFB #>HM30
    210  DFB #>HM31
    211  DFB #>HM32
    212 ENVTBL DFB #<MV0
    213  DFB #<MV1
    214  DFB #<MV2
    215  DFB #<MV3
    216  DFB #<MV4
    217  DFB #<MV5
    218  DFB #<MV6
    219  DFB #<MV7
    220  DFB #<MV8
    221  DFB #<MV9
    222  DFB #<MV10
    223  DFB #<MV11
    224  DFB #<MV12
    225  DFB #<MV13
    226  DFB #<MV14
    227  DFB #<MV15
    228 ENVTBH DFB #>MV0
    229  DFB #>MV1
    230  DFB #>MV2
    231  DFB #>MV3
    232  DFB #>MV4
    233  DFB #>MV5
    234  DFB #>MV6
    235  DFB #>MV7
    236  DFB #>MV8
    237  DFB #>MV9
    238  DFB #>MV10
    239  DFB #>MV11
    240  DFB #>MV12
    241  DFB #>MV13
    242  DFB #>MV14
    243  DFB #>MV15
    244 MVOLTBL HEX 4A4AEA0A0A4969D0
    245 MVT2 HEX 4AEAEAEA0A0F0704
    246 VTBL HEX 0001020304
    247 HTPTBL DFB 0,24,19,16,12,22,7,24,16,22,35,0,0,26,19,16,24
    248  DFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    249 AMPTBL DFB 1,2,3,4,5,7,9,11,14,17,21,26,32,39,47,56
    250 MINIT LDA #$EA
    251  STA VATC1
    252  STA VATC2
    253  STA VXAT1
    254  STA VXAT2
    255  LDA #<HM1
    256  STA MBASS1+1
    257  STA MMBASS2+1
    258  LDA #>HM1
    259  STA MBASS1+2
    260  STA MMBASS2+2
    261  LDA #0
    262  STA R+5
    263  STA $AF
    264  STA $B6
    265  STA R+4
    266  LDX INDEX
    267  LDA MADRLO,X
    268  STA R+0
    269  LDA MADRHI,X
    270  STA R+1
    271  LDA #0
    272  STA R+15
    273  STA R+24
    274  STA R+27
    275 NEWNOTE LDY #0
    276  STY R+12
    277  STY R+3
    278  LDA #1
    279  STA MLBL300+1
    280  INC R+0
    281  INC R+0
    282  BNE MNOWIC
    283  INC R+1
    284 MNOWIC LDA (R+0),Y
    285  TAX
    286  INY
    287  LDA (R+0),Y
    288  BEQ MSYSTM1
    289  TXA
    290  AND #%11111100
    291  STA R+13
    292  BEQ MNOBC1
    293  LSR
    294  LSR
    295  CLC
    296  ADC R+4
    297  STA R+13
    298  CMP #$19
    299  BGE MNOBC1
    300  LDA #7
    301  STA MLBL300+1
    302 MNOBC1 LDA (R+0),Y
    303  BEQ MSYSTM1
    304  JMP NMSYSM
    305 MSYSTM1 TXA
    306  BEQ MINIT
    307  CMP #$FE
    308  BNE MXNQ10
    309  LDY R+24
    310  BEQ MXQN8
    311 MRET1 LDA R+25
    312  STA R+0
    313  LDA R+26
    314  STA R+1
    315  LDA #0
    316  STA R+24
    317 MXQN8 JMP NEWNOTE
    318 MXNQ10 CMP #$FD
    319  BNE MXQN9
    320  LDX $1E60
    321  LDA $1E80,X
    322  ORA #$80
    323  STA $1E80,X
    324  JMP NEWNOTE
    325 MXQN9 CMP #$FF
    326  BNE NOPAUS1
    327  STA R+10
    328  LDA #0
    329  STA R+13
    330  LDA NOTE
    331  STA R+8
    332  LDA LENGTH
    333  STA R+9
    334  RTS
    335 NOPAUS1 CPX #9
    336  BGE SYMPH01
    337  LDA MVOLTBL-1,X
    338  STA VATC1
    339  LDA MVT2-1,X
    340  STA VXAT1
    341  JMP NEWNOTE
    342 SYMPH01 TXA
    343  LDX #0
    344  STX R+4
    345  SEC
    346  SBC #9
    347  CMP #32
    348  BGE HOCTSFT1
    349 GOHERE4 TAX
    350  STX $AF
    351  LDA HTPTBL,X
    352  CLC
    353  ADC R+4
    354  STA R+4
    355  LDA HARMTBL,X
    356  STA MBASS1+1
    357  LDA HARMTBH,X
    358  STA MBASS1+2
    359  JMP NEWNOTE
    360 HOCTSFT1 LDX #12
    361  STX R+4
    362  AND #$1F
    363  JMP GOHERE4
    364 NMSYSM TAY
    365  AND #%00111111
    366  BEQ MMGA03
    367  JMP NTVJNK
    368 MMGA03 TYA
    369  AND #%11000000
    370  CMP #%10000000
    371  BNE MNSSC1
    372  DEX
    373  BMI ALTSNG
    374  STX INDEX
    375 ALTSNG1 JMP NEWNOTE
    376 ALTSNG LDY $1E60
    377  LDA $1E80,Y
    378  BPL ALTSNG1
    379  TXA
    380  AND #$7F
    381  STA INDEX
    382  JMP MINIT
    383 MNSSC1 CMP #%01000000
    384  BNE MGARY5
    385  LDA #1
    386  STA R+15
    387  STA R+21
    388  TXA
    389  LDX R+0
    390  STX R+22
    391  LDX R+1
    392  STX R+23
    393  ASL
    394  BCS NOTVI1
    395  ADC R+0
    396  STA R+0
    397  LDA #0
    398  ADC R+1
    399  STA R+1
    400  JSR MMNNOTE
    401  JMP NEWNOTE
    402 MGARY5 LDA R+24
    403  BEQ MMGAR3
    404  JMP MRET1
    405 MMGAR3 LDA #1
    406  STA R+24
    407  TXA
    408  LDX R+0
    409  STX R+25
    410  LDX R+1
    411  STX R+26
    412  ASL
    413  STA R+14
    414  BCS NOTRP1
    415  LDA R+0
    416  SEC
    417  SBC R+14
    418  STA R+0
    419  LDA R+1
    420  SBC #0
    421  STA R+1
    422  JMP NEWNOTE
    423 NOTRP1 LDA R+0
    424  SBC R+14
    425  STA R+0
    426  LDA R+1
    427  SBC #0
    428  STA R+1
    429  DEC R+1
    430  JMP NEWNOTE
    431 NOTVI1 CLC
    432  ADC R+0
    433  STA R+0
    434  LDA #0
    435  ADC R+1
    436  STA R+1
    437  INC R+1
    438  JSR MMNNOTE
    439  JMP NEWNOTE
    440 NTVJNK STA R+10
    441  TYA
    442  AND #%11000000
    443  LSR
    444  LSR
    445  LSR
    446  LSR
    447  STA R+7
    448  TXA
    449  AND #%00000011
    450  ORA R+7
    451  TAX
    452  LDA AMPTBL,X
    453  STA R+11
    454  LDA ENVTBL,X
    455  STA MVAR6+1
    456  LDA ENVTBH,X
    457  STA MVAR6+2
    458  LDX R+13
    459  LDA NOTE,X
    460  STA R+8
    461  LDA LENGTH,X
    462  STA R+9
    463  RTS
    464 MPLAY LDA R+15
    465  BEQ NO2VOI
    466  LDA R+21
    467  EOR #1
    468  STA R+21
    469  BNE NO2VOI
    470  JMP MMPLAY
    471 V8HOLD LDA R+12
    472  CMP R+10
    473  BLT MESKP
    474  INC R+12
    475 NO2VOI LDY R+12
    476 MVAR6 LDA $FFFF,Y
    477  BMI MESKP
    478  CMP #$7F
    479  BEQ V8HOLD
    480 VATC1 ASL
    481 VXAT1 ASL
    482  STA R+11
    483  INC R+12
    484 MESKP LDA $AF
    485  BNE NEWMM4
    486  LDA #0
    487  STA R+3
    488 NEWMM4 LDA R+11
    489  STA VTBL+2
    490  LSR
    491  STA VTBL+1
    492  CLC
    493  ADC R+11
    494  STA VTBL+3
    495  LDA R+11
    496  ASL
    497  STA VTBL+4
    498  INC VTBL+1
    499  INC VTBL+2
    500  INC VTBL+3
    501  INC VTBL+4
    502  LDX R+9
    503  LDA R+13
    504  BNE MSEGL5
    505  STA VTBL+1
    506  STA VTBL+2
    507  STA VTBL+3
    508  STA VTBL+4
    509 MSEGL5 JMP MSEG
    510 MSEGL4 AND #$7F
    511  STA R+3
    512 MSEG
    513  LDY R+3
    514 MBASS1 LDA HM1,Y
    515  BMI MSEGL4
    516  INC R+3
    517  TAY
    518  LDA VTBL-1,Y
    519  STA R+6
    520  SEC
    521  SBC R+8
    522  TAY
    523 MADJLP INY
    524  BNE MADJLP
    525 MLBL300 LDY #1
    526 MLMDI LDA R+8
    527  SEC
    528 MDLOOP SBC #1
    529  BNE MDLOOP
    530  DEY
    531  BNE MLMDI
    532  LDY R+6
    533  BEQ MFIZZLE
    534 M30A LDA $C030
    535 MVDIT DEY
    536  BNE MVDIT
    537 M30B LDA $C030
    538 MFIZZLE DEX
    539  BNE MSEG
    540  DEC R+10
    541  BNE LBL10
    542  JMP NEWNOTE
    543 LBL10 RTS
    544 MMINIT LDA #0
    545  STA R+15
    546  RTS
    547 MMNNOTE LDY #0
    548  STY R+2
    549  STY R+16
    550  LDA #1
    551  STA MMLM302+1
    552  INC R+22
    553  INC R+22
    554  BNE MMNOWIC
    555  INC R+23
    556 MMNOWIC LDA (R+22),Y
    557  TAX
    558  INY
    559  LDA (R+22),Y
    560  BEQ MSYSTM2
    561  TXA
    562  AND #%11111100
    563  STA R+17
    564  BEQ MMNOBC2
    565  LSR
    566  LSR
    567  CLC
    568  ADC R+5
    569  STA R+17
    570  CMP #$19
    571  BGE MMNOBC2
    572  LDA #7
    573  STA MMLM302+1
    574 MMNOBC2 LDA (R+22),Y
    575  BNE NMMSYSMM
    576 MSYSTM2 TXA
    577  BEQ MMINIT
    578  CMP #$FE
    579  BNE MXQN6
    580  LDY R+27
    581  BEQ MXQN5
    582 MRET2 LDA R+28
    583  STA R+22
    584  LDA R+29
    585  STA R+23
    586  LDA #0
    587  STA R+27
    588 MXQN5 JMP MMNNOTE
    589 MXQN6 CMP #$FF
    590  BNE NOPAUS2
    591  STA R+18
    592  LDA #0
    593  STA R+17
    594  LDA NOTE
    595  STA R+19
    596  LDA LENGTH
    597  STA R+20
    598  RTS
    599 NOPAUS2 CPX #9
    600  BGE SYMPH02
    601  LDA MVOLTBL-1,X
    602  STA VATC2
    603  LDA MVT2-1,X
    604  STA VXAT2
    605  JMP MMNNOTE
    606 SYMPH02 TXA
    607  LDX #0
    608  STX R+5
    609  SEC
    610  SBC #9
    611  CMP #32
    612  BGE HOCTSFT4
    613 GOHERE8 TAX
    614  STX $B6
    615  LDA HTPTBL,X
    616  CLC
    617  ADC R+5
    618  STA R+5
    619  LDA HARMTBL,X
    620  STA MMBASS2+1
    621  LDA HARMTBH,X
    622  STA MMBASS2+2
    623 KFMM465 JMP MMNNOTE
    624 HOCTSFT4 LDX #12
    625  STX R+5
    626  AND #$1F
    627  JMP GOHERE8
    628 NMMSYSMM TAY
    629  AND #%00111111
    630  BNE M2NTV
    631  TYA
    632  AND #%11000000
    633  CMP #%11000000
    634  BNE KFMM465
    635  LDA R+27
    636  BNE MRET2
    637  LDA #1
    638  STA R+27
    639  TXA
    640  LDX R+22
    641  STX R+28
    642  LDX R+23
    643  STX R+29
    644  ASL
    645  STA R+14
    646  BCS NOTRP2
    647  LDA R+22
    648  SEC
    649  SBC R+14
    650  STA R+22
    651  LDA R+23
    652  SBC #0
    653  STA R+23
    654 NOTRP2 LDA R+22
    655  JMP MMNNOTE
    656  SBC R+14
    657  STA R+22
    658  LDA R+23
    659  SBC #0
    660  STA R+23
    661  DEC R+23
    662  JMP MMNNOTE
    663 M2NTV STA R+18
    664  TYA
    665  AND #%11000000
    666  LSR
    667  LSR
    668  LSR
    669  LSR
    670  STA R+7
    671  TXA
    672  AND #%00000011
    673  ORA R+7
    674  TAX
    675  LDA AMPTBL,X
    676  STA $B7
    677  LDA ENVTBL,X
    678  STA MVAR2C+1
    679  LDA ENVTBH,X
    680  STA MVAR2C+2
    681  LDX R+17
    682  LDA NOTE,X
    683  STA R+19
    684  LDA LENGTH,X
    685  STA R+20
    686  RTS
    687 MV8HOLD LDA R+16
    688  CMP R+18
    689  BLT MMESKP
    690  INC R+16
    691 MMPLAY LDY R+16
    692 MVAR2C LDA $FFFF,Y
    693  BMI MMESKP
    694  CMP #$7F
    695  BEQ MV8HOLD
    696 VATC2 ASL
    697 VXAT2 ASL
    698  STA $B7
    699  INC R+16
    700 MMESKP LDA $B6
    701  BNE NEWMM5
    702  LDA #0
    703  STA R+2
    704 NEWMM5 LDA $B7
    705  STA VTBL+2
    706  LSR
    707  STA VTBL+1
    708  CLC
    709  ADC $B7
    710  STA VTBL+3
    711  LDA $B7
    712  ASL
    713  STA VTBL+4
    714  INC VTBL+1
    715  INC VTBL+2
    716  INC VTBL+3
    717  INC VTBL+4
    718  LDX R+20
    719  LDA R+17
    720  BNE MMSEGL5
    721  STA VTBL+1
    722  STA VTBL+2
    723  STA VTBL+3
    724  STA VTBL+4
    725 MMSEGL5 JMP MMSEG
    726 MMSEGL4 AND #$7F
    727  STA R+2
    728 MMSEG
    729  LDY R+2
    730 MMBASS2 LDA HM1,Y
    731  BMI MMSEGL4
    732  INC R+2
    733  TAY
    734  LDA VTBL-1,Y
    735  STA R+6
    736  SEC
    737  SBC R+19
    738  TAY
    739 MMADJLP INY
    740  BNE MMADJLP
    741 MMLM302 LDY #1
    742 MMLMMDI LDA R+19
    743  SEC
    744 MMDLOOP SBC #1
    745  BNE MMDLOOP
    746  DEY
    747  BNE MMLMMDI
    748  LDY R+6
    749  BEQ MMFIZZY
    750 M20A LDA $C030
    751 MMVDIT DEY
    752  BNE MMVDIT
    753 M20B LDA $C030
    754 MMFIZZY DEX
    755  BNE MMSEG
    756  DEC R+18
    757  BNE MLZ10
    758  JMP MMNNOTE
    759 MLZ10 RTS
    760 
    761 *-------------------------------
    762 *
    763 *  M I N I T
    764 *
    765 *  Inititalize music system & prepare to play a song
    766 *
    767 *  In: A = song #
    768 *
    769 *-------------------------------
    770 _MINIT sta INDEX
    771  jmp MINIT
    772 
    773 *-------------------------------
    774 *
    775 *  M P L A Y
    776 *
    777 *  Continue playing current song
    778 *  (Generates a fraction of a second of sound)
    779 *
    780 *  Out: A = current song #
    781 *  (Most songs set song #0 when finished.)
    782 *
    783 *  NOTE: MSYS uses aux z.p. locations $00-1F.  These must
    784 *  remain undisturbed for the duration of each song.
    785 *
    786 *-------------------------------
    787 _MPLAY jsr MPLAY
    788  lda INDEX
    789  rts
    790 
    791 *-------------------------------
    792  lst
    793 eof ds 1
    794  usr $a9,34,$600,*-org
    795  lst off