
; music_box - Castlevania 2

;---------------------------------------

pit_ch0_port   equ  $ec00
pit_ch1_port   equ  $ec01
pit_ch2_port   equ  $ec02
pit_cmd_port   equ  $ec03
pit_init0      equ  $3e
pit_init1      equ  $7e
pit_init2      equ  $be

crt_cmd_port   equ  $ef01
crt_ir         equ  $20

key_line_port  equ  $ed00
key_data_port  equ  $ed01
key_line2      equ  $fb
key_0          equ  11111110b
key_1          equ  11111101b
key_2          equ  11111011b
key_3          equ  11110111b
key_4          equ  11101111b
key_5          equ  11011111b
key_6          equ  10111111b
key_7          equ  01111111b
no_key         equ  11111111b

print_msg      equ  $f818
command_line   equ  $f875

;---------------------------------------

program_begin:

; -----  

  lxi  h, msg1
  call print_msg
  xra  a
  mov  b, a
  sta  play_en
  mvi  a, key_line2
  sta  key_line_port

; -----   

vsync_wait:
  lxi  h, crt_cmd_port
  mov  a, m
  mov  a, m
  ani  crt_ir
  jz   .-3

  lda  play_en
  ora  a
  jz   read_keyboard
  dcr  c
  jnz  read_keyboard

; -----     

read_data:
  lhld data_adr
  mov  a, m           
  inx  h              
  shld data_adr 
  ora  a             
  jz   end_of_music  
  cpi  64
  jnc  set_channel
  cpi  57
  jc   set_timer

off_channel:
  lxi  h, pit_cmd_port
  rrc
  jnc  .+5
  mvi  m, pit_init0
  rrc
  jnc  .+5
  mvi  m, pit_init1
  rrc
  jnc  .+5
  mvi  m, pit_init2
  jmp  read_data

set_channel:
  lhld table_adr
  lxi  d, pit_ch0_port
  add  a
  jnc  .+8
  inx  d
  jp   .+6
  inx  d
  ani  127
  mov  c, a
  dad  b
  mov  a, m
  stax d
  inx  h
  mov  a, m
  stax d
  jmp  read_data

end_of_music:
  xchg
  lxi  h, play_en
  dcr  m
  jz   .+14
  xchg
  mov  e, m
  inx  h
  mov  d, m
  xchg
  shld data_adr
  jmp  read_data
  mvi  a, key_7
  jmp  stop_music

set_timer:
  mov  c, a

; -----  

read_keyboard:
  lda  key_data_port
  cpi  no_key
  jz   vsync_wait

stop_music:
  lxi  h, pit_cmd_port
  mvi  m, pit_init0
  mvi  m, pit_init1
  mvi  m, pit_init2
  lxi  h, play_en
  mvi  m, 0
  
  cpi  key_0
  jz   command_line
  cpi  key_7
  jz   vsync_wait

  cpi  key_1
  jnz  read_2
  lxi  h, table_1
  lxi  d, data_1
  mvi  a, 3
  jmp  music_selected

read_2:
  cpi  key_2
  jnz  read_3
  lxi  h, table_2
  lxi  d, data_2
  mvi  a, 3
  jmp  music_selected

read_3:
  cpi  key_3
  jnz  read_4
  lxi  h, table_3
  lxi  d, data_3
  mvi  a, 3
  jmp  music_selected

read_4:
  cpi  key_4
  jnz  read_5
  lxi  h, table_4
  lxi  d, data_4
  mvi  a, 3
  jmp  music_selected

read_5:
  cpi  key_5
  jnz  read_6
  lxi  h, table_5
  lxi  d, data_5
  mvi  a, 6
  jmp  music_selected

read_6:
  cpi  key_6
  jnz  vsync_wait
  lxi  h, table_6
  lxi  d, data_6
  mvi  a, 1
  
music_selected:
  sta  play_en
  shld table_adr
  xchg
  shld data_adr
  mvi  c, 20
  jmp  vsync_wait


msg1:
db 10,13,10,13,'MUSIC THEME FROM CASTLEVANIA 2',10,13,10,13
db '[1] - "SILENCE OF THE DAYLIGHT"',10,13
db '[2] - "BLOODY TEARS"',10,13
db '[3] - "MONSTER DANCE"',10,13
db '[4] - "DWELLING OF DOOM"',10,13
db '[5] - "LAST BOSS"',10,13
db '[6] - "REQUIEM"',10,13,10,13
db '[7] - STOP SOUND',10,13
db '[0] - EXIT TO MONITOR',10,13,10,13
db '(C) 2018 - SEGABOY - ZX-PK.RU',10,13,0

;---------------------------------------

table_1:
dw 24215, 19220, 18141, 16162, 15255, 14398, 13590, 12827, 12108, 10181, 9610, 9070, 8561, 8081, 7627, 7199, 6795, 6414, 6054, 5393, 5091, 4805, 4535, 4040, 3814, 3600, 3398, 3207, 3027, 2857, 2697, 2545, 2402, 2268, 2020, 1907, 1699,

data_1:
db 66, 152, 225, 7, 57, 7, 62, 66, 142, 214, 7, 63, 154, 223, 7, 75, 7, 57, 7, 66, 7, 57, 7, 66, 7, 57, 68, 14, 57, 67, 7, 57, 68, 7, 61, 69, 7, 59, 72, 154, 222, 7, 63, 156, 223, 7, 62, 66, 154, 222, 7, 57, 7, 66, 7, 63, 152, 220, 7, 75, 7, 57, 7, 66, 7, 57, 7, 68, 7, 57, 7, 78, 7, 57, 68, 7, 57, 70, 7, 58, 151, 7, 59, 80, 152, 7, 63, 154, 7, 58, 66, 152, 225, 7, 57, 7, 62, 66, 142, 214, 7, 63, 154, 223, 7, 75, 7, 57, 7, 66, 7, 57, 7, 66, 7, 57, 68, 14, 57, 67, 7, 59, 68, 150, 7, 63, 69, 151, 7, 59, 72, 154, 222, 7, 63, 156, 223, 7, 62, 66, 154, 222, 7, 57, 7, 66, 7, 63, 152, 220, 7, 75, 7, 57, 7, 66, 7, 57, 7, 68, 7, 57, 7, 78, 7, 57, 68, 7, 57, 70, 7, 58, 151, 7, 59, 80, 152, 7, 63, 154, 7, 58,
repeat_1:
db 66, 152, 220, 7, 61, 219, 7, 62, 66, 136, 218, 7, 63, 146, 214, 7, 68, 7, 57, 67, 7, 59, 66, 145, 7, 57, 64, 7, 57, 66, 7, 59, 144, 7, 66, 7, 57, 7, 58, 75, 142, 7, 57, 7, 62, 68, 139, 214, 7, 63, 66, 141, 215, 7, 63, 72, 136, 214, 7, 57, 7, 58, 72, 136, 7, 61, 213, 7, 58, 82, 146, 7, 57, 7, 62, 72, 136, 215, 7, 58, 136, 7, 59, 70, 139, 7, 63, 71, 140, 218, 7, 59, 72, 141, 7, 57, 7, 62, 82, 146, 221, 7, 57, 7, 62, 72, 136, 224, 7, 57, 7, 62, 66, 152, 220, 7, 61, 219, 7, 62, 66, 136, 218, 7, 63, 146, 214, 7, 68, 7, 57, 67, 7, 59, 66, 145, 7, 57, 64, 7, 57, 66, 7, 59, 144, 7, 66, 7, 57, 7, 58, 75, 142, 7, 57, 7, 62, 68, 139, 214, 7, 63, 66, 141, 215, 7, 63, 72, 136, 214, 7, 57, 7, 58, 72, 136, 7, 61, 213, 7, 58, 82, 146, 7, 57, 7, 62, 72, 136, 215, 7, 59, 72, 136, 7, 59, 70, 139, 7, 63, 71, 140, 218, 7, 59, 72, 141, 7, 57, 7, 62, 82, 146, 221, 7, 57, 7, 62, 72, 136, 224, 7, 57, 7, 62, 65, 138, 215, 7, 59, 65, 138, 7, 59, 65, 138, 7, 63, 65, 138, 210, 7, 59, 67, 144, 7, 60, 213, 7, 61, 64, 215, 7, 61, 65, 218, 7, 63, 66, 139, 216, 7, 59, 66, 139, 7, 59, 66, 139, 7, 59, 66, 139, 7, 63, 75, 142, 210, 7, 62, 146, 214, 7, 62, 150, 216, 7, 62, 152, 220, 7, 63, 67, 141, 218, 7, 59, 67, 141, 7, 59, 67, 141, 7, 63, 67, 141, 212, 7, 59, 77, 154, 7, 60, 215, 7, 61, 73, 218, 7, 60, 223, 7, 62, 142, 221, 7, 59, 68, 142, 7, 59, 68, 142, 7, 59, 68, 142, 7, 63, 78, 152, 220, 7, 59, 77, 156, 7, 58, 160, 7, 59, 78, 163, 7, 63, 69, 153, 220, 7, 57, 69, 7, 57, 69, 7, 63, 69, 146, 214, 7, 57, 79, 7, 60, 217, 7, 61, 69, 220, 7, 60, 225, 7, 63, 70, 154, 223, 7, 57, 70, 7, 57, 70, 7, 57, 70, 7, 63, 70, 150, 221, 14, 57, 66, 14, 63, 71, 147, 225, 7, 57, 71, 7, 57, 71, 7, 57, 71, 7, 57, 67, 7, 63, 69, 147, 219, 7, 63, 71, 147, 222, 7, 63, 67, 147, 225, 7, 63, 72, 160, 224, 7, 59, 82, 162, 7, 59, 80, 164, 7, 59, 81, 157, 7, 59, 82, 160, 7, 59, 75, 162, 7, 59, 76, 154, 7, 59, 72, 157, 7, 63, 66, 150, 225, 7, 58, 139, 7, 59, 139, 7, 62, 67, 148, 223, 7, 58, 137, 7, 59, 137, 7, 62, 68, 152, 220, 28, 57, 78, 7, 57, 77, 7, 57, 78, 7, 57, 73, 7, 57, 73, 7, 57, 68, 7, 63, 70, 150, 218, 7, 62, 139, 208, 7, 63, 139, 208, 7, 62, 72, 146, 213, 7, 62, 136, 202, 7, 63, 136, 202, 7, 62, 75, 146, 214, 28, 57, 75, 7, 57, 75, 7, 57, 75, 7, 57, 66, 7, 57, 7, 66, 7, 63, 66, 146, 214, 7, 58, 136, 7, 59, 136, 7, 62, 67, 144, 212, 7, 58, 134, 7, 59, 134, 7, 62, 68, 142, 210, 35, 57, 68, 7, 57, 78, 7, 57, 68, 7, 57, 7, 68, 7, 63, 70, 141, 208, 14, 57, 7, 62, 72, 136, 202, 14, 57, 7, 62, 75, 136, 203, 21, 57, 75, 7, 57, 75, 7, 57, 72, 7, 59, 72, 136, 7, 59, 72, 136, 7, 59, 72, 136, 7, 59, 66, 136, 7, 63, 0
dw repeat_1


table_2:
dw 20362, 19220, 17123, 15255, 10181, 9610, 8561, 7627, 6795, 6414, 5714, 5091, 4805, 4281, 4040, 3814, 3398, 3207, 2857, 2545, 2402, 2268, 2140, 2020, 1907, 1699, 1603, 1428, 1273,

data_2:
db 67, 143, 216, 6, 62, 139, 211, 6, 62, 147, 220, 6, 62, 139, 211, 6, 62, 146, 219, 6, 62, 139, 211, 6, 62, 145, 218, 6, 62, 139, 211, 6, 62, 144, 217, 6, 62, 139, 211, 6, 62, 145, 218, 6, 62, 139, 211, 6, 62, 144, 217, 6, 62, 139, 211, 6, 62, 143, 216, 6, 62, 139, 211, 6, 62, 144, 217, 6, 62, 139, 211, 6, 62, 145, 218, 6, 62, 139, 211, 6, 62, 146, 219, 6, 62, 139, 211, 6, 62, 145, 218, 6, 62, 139, 211, 6, 62, 144, 217, 6, 62, 139, 211, 6, 62, 141, 214, 6, 62, 139, 211, 6, 62, 144, 217, 6, 62, 139, 211, 6, 62, 143, 216, 6, 62, 139, 211, 6, 62, 143, 216, 6, 62, 139, 211, 6, 62, 147, 220, 6, 62, 139, 211, 6, 62, 146, 219, 6, 62, 139, 211, 6, 62, 145, 218, 6, 62, 139, 211, 6, 62, 144, 217, 6, 62, 139, 211, 6, 62, 145, 218, 6, 62, 139, 211, 6, 62, 144, 217, 6, 62, 139, 211, 6, 62, 143, 216, 6, 62, 139, 211, 6, 62, 144, 217, 6, 62, 139, 211, 6, 62, 145, 218, 6, 62, 139, 211, 6, 62, 146, 219, 6, 62, 139, 211, 6, 62, 145, 218, 6, 62, 139, 211, 6, 62, 144, 217, 6, 62, 139, 211, 6, 62, 141, 214, 6, 62, 139, 211, 6, 62, 144, 217, 6, 62, 139, 211, 6, 62, 143, 216, 6, 62, 139, 211, 6, 63, 67, 144, 210, 6, 57, 6, 60, 71, 214, 6, 63, 67, 211, 6, 57, 6, 67, 136, 6, 59, 71, 6, 57, 136, 6, 58, 67, 137, 6, 57, 67, 6, 59, 71, 138, 6, 59, 6, 60, 67, 139, 210, 6, 57, 6, 60, 71, 209, 6, 57, 6, 62, 66, 144, 210, 6, 57, 6, 70, 6, 63, 66, 147, 214, 6, 57, 6, 66, 6, 63, 70, 145, 211, 6, 57, 6, 66, 6, 57, 6, 70, 6, 57, 6, 62, 66, 144, 210, 6, 57, 66, 6, 63, 70, 143, 209, 6, 57, 6, 62, 65, 144, 210, 6, 57, 6, 60, 69, 214, 6, 63, 65, 211, 6, 57, 6, 65, 138, 6, 59, 69, 137, 6, 59, 138, 6, 58, 65, 139, 6, 57, 65, 6, 59, 69, 140, 6, 59, 6, 60, 65, 141, 210, 6, 57, 6, 62, 69, 143, 211, 6, 59, 6, 60, 64, 142, 212, 6, 57, 64, 6, 57, 68, 6, 63, 64, 142, 214, 6, 57, 6, 64, 6, 57, 68, 6, 57, 6, 62, 64, 139, 211, 6, 57, 6, 68, 6, 63, 138, 212, 6, 64, 6, 57, 64, 6, 57, 68, 6, 57, 6, 62, 67, 136, 210, 6, 57, 6, 60, 71, 214, 6, 63, 67, 211, 6, 57, 6, 67, 136, 6, 59, 71, 6, 57, 136, 6, 58, 67, 137, 6, 57, 67, 6, 59, 71, 138, 6, 59, 6, 60, 67, 139, 210, 6, 57, 6, 60, 71, 209, 6, 57, 6, 62, 66, 144, 210, 6, 57, 6, 70, 6, 63, 66, 147, 214, 6, 57, 6, 66, 6, 63, 70, 145, 211, 6, 57, 6, 66, 6, 57, 6, 70, 6, 57, 6, 62, 66, 144, 210, 6, 57, 66, 6, 63, 70, 143, 209, 6, 57, 6, 62, 65, 144, 210, 6, 57, 6, 60, 69, 214, 6, 63, 65, 211, 6, 57, 6, 65, 138, 6, 59, 69, 137, 6, 59, 138, 6, 58, 65, 139, 6, 57, 65, 6, 59, 69, 140, 6, 59, 6, 60, 65, 141, 210, 6, 57, 6, 62, 69, 143, 211, 6, 59, 6, 60, 64, 144, 212, 6, 57, 64, 6, 57, 68, 6, 63, 64, 144, 214, 6, 57, 6, 64, 6, 57, 68, 6, 57, 6, 62, 64, 143, 211, 6, 57, 6, 60, 68, 213, 6, 57, 6, 62, 64, 144, 215, 6, 57, 64, 6, 63, 68, 146, 217, 6, 57, 6, 62, 67, 138, 208, 12, 57, 6, 62, 67, 137, 207, 12, 57, 6, 62, 67, 145, 216, 6, 57, 71, 6, 63, 66, 138, 208, 12, 57, 6, 62, 66, 137, 207, 12, 57, 6, 62, 66, 145, 216, 6, 57, 70, 6, 63, 65, 138, 208, 12, 57, 6, 62, 65, 137, 207, 12, 57, 6, 62, 65, 145, 216, 6, 57, 69, 6, 63, 66, 137, 209, 6, 62, 145, 218, 6, 63, 136, 208, 6, 62, 66, 144, 217, 6, 62, 135, 207, 6, 63, 143, 216, 6, 62, 66, 134, 205, 6, 63, 70, 141, 214, 6, 63, 67, 138, 208, 12, 63, 137, 207, 6, 62, 67, 145, 216, 12, 57, 6, 67, 6, 57, 71, 6, 63, 66, 138, 208, 12, 63, 137, 207, 6, 62, 66, 145, 216, 12, 57, 6, 66, 6, 57, 66, 6, 63, 65, 138, 208, 12, 63, 137, 207, 6, 62, 65, 145, 216, 12, 57, 6, 65, 6, 57, 69, 6, 63, 66, 145, 218, 12, 63, 70, 146, 219, 12, 63, 66, 144, 217, 6, 62, 145, 218, 6, 57, 70, 12, 63, 0
dw data_2


table_3:
dw 20362, 18141, 16162, 15255, 14398, 13590, 12827, 12108, 11428, 10787, 10181, 9610, 9070, 8081, 7627, 7199, 6795, 6414, 6054, 5393, 4805, 4535, 4040, 3814, 3600, 3398, 3207, 3027, 2857, 2697, 2545, 2402, 2268, 2140, 2020, 1800, 1699, 1513, 1428, 1348, 

data_3:
db 73, 157, 211, 7, 63, 70, 154, 209, 7, 63, 71, 155, 210, 7, 63, 73, 157, 211, 14, 63, 69, 153, 208, 14, 63, 67, 151, 206, 14, 58, 160, 7, 58, 157, 7, 58, 154, 7, 58, 160, 7, 58, 157, 7, 58, 154, 7, 58, 160, 7, 63, 73, 157, 211, 7, 63, 70, 154, 209, 7, 63, 71, 155, 210, 7, 63, 73, 157, 211, 14, 63, 69, 153, 208, 14, 63, 67, 151, 206, 14, 58, 160, 7, 58, 157, 7, 58, 154, 7, 58, 160, 7, 58, 157, 7, 58, 154, 7, 58, 160, 7, 63, 73, 147, 201, 7, 63, 73, 149, 204, 7, 63, 75, 152, 207, 7, 63, 73, 155, 210, 7, 57, 76, 7, 57, 73, 7, 63, 75, 157, 211, 7, 57, 73, 7, 63, 73, 154, 209, 7, 63, 73, 150, 205, 7, 57, 75, 7, 57, 73, 7, 63, 76, 148, 203, 7, 63, 73, 149, 204, 7, 63, 75, 150, 205, 7, 63, 73, 152, 207, 7, 59, 68, 152, 7, 59, 68, 159, 7, 59, 72, 157, 7, 59, 68, 156, 7, 59, 73, 157, 7, 59, 68, 156, 7, 59, 75, 152, 7, 59, 68, 159, 7, 63, 68, 157, 7, 59, 68, 156, 7, 59, 72, 157, 7, 59, 68, 156, 7, 59, 73, 152, 220, 7, 63, 68, 156, 223, 7, 63, 75, 157, 226, 7, 63, 68, 159, 227, 7, 63, 73, 147, 201, 7, 63, 73, 149, 204, 7, 63, 75, 152, 207, 7, 63, 73, 155, 210, 7, 57, 76, 7, 57, 73, 7, 63, 75, 157, 211, 7, 57, 73, 7, 63, 73, 154, 209, 7, 63, 73, 150, 205, 7, 57, 75, 7, 57, 73, 7, 63, 76, 148, 203, 7, 63, 73, 149, 204, 7, 63, 75, 150, 205, 7, 63, 73, 152, 207, 7, 59, 68, 152, 7, 59, 68, 159, 7, 59, 72, 157, 7, 59, 68, 156, 7, 59, 73, 157, 7, 59, 68, 156, 7, 59, 75, 152, 7, 59, 68, 159, 7, 63, 68, 157, 7, 59, 68, 156, 7, 59, 72, 157, 7, 59, 68, 156, 7, 59, 73, 152, 220, 7, 63, 68, 156, 223, 7, 63, 75, 157, 226, 7, 63, 68, 159, 227, 7, 63, 66, 150, 217, 7, 62, 153, 221, 7, 62, 157, 226, 7, 63, 73, 162, 228, 14, 57, 77, 7, 62, 164, 231, 14, 63, 68, 159, 230, 21, 63, 75, 156, 227, 14, 57, 79, 21, 63, 64, 158, 229, 21, 63, 68, 152, 225, 14, 57, 74, 7, 62, 155, 227, 14, 63, 77, 157, 228, 14, 57, 7, 77, 7, 57, 76, 7, 57, 74, 7, 57, 73, 7, 57, 71, 7, 63, 65, 155, 224, 21, 63, 71, 160, 227, 14, 57, 76, 7, 62, 155, 224, 14, 63, 64, 153, 222, 14, 57, 7, 62, 76, 153, 224, 7, 63, 77, 162, 226, 7, 63, 76, 160, 224, 7, 63, 74, 158, 222, 7, 63, 73, 157, 221, 7, 57, 7, 62, 68, 152, 220, 7, 63, 72, 152, 220, 7, 57, 68, 7, 63, 73, 153, 221, 7, 63, 68, 153, 221, 7, 57, 75, 7, 63, 68, 155, 223, 7, 63, 155, 223, 7, 68, 7, 63, 72, 157, 224, 7, 63, 68, 157, 224, 7, 57, 73, 7, 63, 68, 157, 224, 7, 63, 75, 155, 223, 7, 63, 68, 153, 221, 7, 57, 7, 62, 68, 152, 220, 7, 63, 72, 152, 220, 7, 57, 68, 7, 63, 73, 153, 221, 7, 63, 68, 153, 221, 7, 57, 75, 7, 63, 68, 159, 227, 7, 57, 7, 68, 7, 57, 68, 7, 57, 68, 7, 57, 68, 7, 57, 68, 7, 63, 68, 7, 57, 68, 7, 57, 0
dw data_3


table_4:
dw 18141, 16162, 15255, 13590, 12108, 10787, 10181, 9070, 8081, 7627, 6414, 6054, 5393, 5091, 4535, 4281, 4040, 3814, 3600, 3398, 3207, 3027, 2697, 2545, 

data_4:
db 68, 136, 203, 6, 57, 6, 68, 6, 63, 72, 139, 205, 6, 63, 68, 138, 204, 6, 63, 72, 139, 205, 6, 63, 68, 139, 205, 6, 57, 6, 62, 68, 139, 205, 6, 63, 72, 141, 208, 6, 63, 68, 140, 207, 6, 63, 72, 141, 208, 6, 63, 68, 141, 208, 6, 57, 6, 62, 68, 141, 208, 6, 63, 72, 144, 213, 6, 63, 68, 143, 212, 6, 63, 72, 144, 213, 6, 63, 68, 144, 213, 18, 57, 67, 18, 63, 66, 139, 205, 6, 57, 6, 66, 6, 63, 70, 141, 208, 6, 63, 66, 140, 207, 6, 63, 70, 141, 208, 6, 63, 66, 141, 208, 6, 57, 6, 62, 66, 141, 208, 6, 63, 70, 144, 213, 6, 63, 66, 143, 212, 6, 63, 70, 144, 213, 6, 63, 66, 144, 213, 6, 57, 6, 62, 66, 144, 213, 6, 63, 70, 149, 215, 6, 63, 66, 148, 214, 6, 63, 70, 149, 215, 6, 63, 66, 149, 215, 18, 57, 64, 18, 63, 65, 148, 214, 6, 63, 145, 212, 6, 62, 65, 142, 208, 6, 63, 72, 140, 206, 6, 63, 65, 138, 204, 6, 63, 65, 137, 202, 6, 63, 65, 145, 212, 6, 63, 142, 209, 6, 62, 65, 140, 206, 6, 63, 72, 138, 204, 6, 63, 65, 137, 202, 6, 63, 65, 135, 201, 6, 63, 72, 142, 209, 6, 62, 140, 206, 6, 62, 138, 204, 6, 63, 72, 137, 202, 6, 62, 135, 201, 6, 62, 133, 199, 6, 63, 72, 138, 204, 6, 62, 140, 206, 6, 62, 142, 209, 6, 63, 72, 140, 206, 6, 62, 142, 209, 6, 62, 144, 212, 6, 61, 68, 213, 6, 57, 6, 68, 6, 63, 68, 139, 208, 6, 57, 69, 6, 57, 70, 6, 57, 68, 6, 63, 140, 206, 6, 62, 68, 142, 209, 6, 63, 68, 145, 212, 6, 63, 69, 142, 209, 6, 63, 70, 145, 212, 6, 63, 68, 144, 213, 6, 57, 6, 68, 6, 63, 68, 141, 208, 6, 57, 69, 6, 57, 70, 6, 57, 68, 6, 57, 69, 6, 57, 70, 6, 63, 65, 140, 206, 6, 62, 139, 205, 6, 62, 138, 204, 6, 63, 66, 137, 203, 6, 57, 6, 66, 6, 63, 66, 139, 205, 6, 63, 67, 138, 204, 6, 63, 68, 139, 205, 6, 63, 66, 139, 205, 6, 57, 6, 66, 6, 63, 66, 141, 208, 6, 63, 67, 140, 207, 6, 63, 68, 141, 208, 6, 63, 66, 141, 208, 6, 57, 6, 66, 6, 63, 66, 144, 213, 6, 63, 67, 143, 212, 6, 63, 68, 144, 213, 6, 63, 66, 144, 213, 6, 57, 67, 6, 57, 68, 6, 63, 65, 142, 206, 6, 63, 65, 140, 204, 6, 63, 65, 138, 202, 6, 63, 68, 144, 213, 6, 57, 6, 68, 6, 63, 68, 139, 208, 6, 57, 69, 6, 57, 70, 6, 57, 68, 6, 63, 140, 206, 6, 62, 68, 142, 209, 6, 63, 68, 145, 212, 6, 63, 69, 142, 209, 6, 63, 70, 145, 212, 6, 63, 68, 144, 213, 6, 57, 6, 68, 6, 63, 68, 141, 208, 6, 57, 69, 6, 57, 70, 6, 57, 68, 6, 57, 69, 6, 57, 70, 6, 63, 65, 140, 206, 6, 62, 139, 205, 6, 62, 138, 204, 6, 63, 66, 137, 203, 6, 57, 6, 66, 6, 63, 66, 139, 205, 6, 63, 67, 138, 204, 6, 63, 68, 139, 205, 6, 63, 66, 139, 205, 6, 57, 6, 66, 6, 63, 66, 141, 208, 6, 63, 67, 140, 207, 6, 63, 68, 141, 208, 6, 63, 66, 141, 208, 6, 57, 6, 66, 6, 63, 66, 144, 213, 6, 63, 67, 143, 212, 6, 63, 68, 144, 213, 6, 63, 66, 144, 213, 6, 57, 67, 6, 57, 68, 6, 63, 65, 142, 206, 6, 63, 65, 140, 204, 6, 63, 65, 138, 202, 6, 63, 71, 145, 209, 6, 63, 142, 206, 6, 62, 71, 140, 204, 6, 63, 138, 202, 6, 62, 140, 204, 6, 62, 145, 209, 6, 62, 70, 144, 208, 6, 63, 141, 205, 6, 62, 70, 139, 203, 6, 63, 136, 200, 6, 62, 139, 203, 6, 62, 144, 208, 6, 62, 69, 142, 206, 6, 63, 140, 204, 6, 62, 69, 138, 202, 6, 63, 137, 201, 6, 62, 138, 202, 6, 62, 142, 206, 6, 62, 68, 141, 205, 6, 63, 139, 203, 6, 62, 68, 136, 200, 6, 63, 68, 134, 198, 6, 63, 69, 136, 200, 6, 63, 70, 139, 203, 6, 63, 71, 135, 209, 6, 59, 71, 137, 6, 59, 71, 139, 6, 63, 78, 141, 213, 6, 61, 71, 212, 6, 61, 71, 213, 6, 63, 70, 134, 208, 6, 59, 70, 136, 6, 59, 70, 139, 6, 63, 77, 141, 213, 6, 61, 70, 211, 6, 61, 70, 213, 6, 63, 69, 143, 210, 6, 57, 69, 6, 57, 69, 6, 63, 76, 146, 213, 6, 57, 69, 6, 57, 69, 6, 63, 72, 144, 212, 6, 61, 72, 208, 6, 61, 72, 210, 6, 63, 65, 140, 212, 6, 63, 65, 142, 213, 6, 63, 65, 144, 214, 6, 63, 0
dw data_4


table_5:
dw 22856, 21573, 19220, 18141, 16162, 15255, 14398, 12108, 11428, 10787, 9610, 9070, 8561, 8081, 7627, 7199, 6054, 5714, 5393, 4805, 4535, 4281, 4040, 3814, 3600, 3398, 3207, 3027, 2857, 2697, 2402, 2268, 2140, 2020, 1907, 1800, 

data_5:
db 65, 137, 223, 6, 60, 221, 6, 60, 216, 6, 60, 223, 6, 60, 221, 6, 60, 216, 6, 63, 70, 143, 223, 6, 63, 73, 146, 221, 6, 63, 72, 145, 222, 6, 60, 220, 6, 60, 214, 6, 60, 222, 6, 60, 220, 6, 60, 214, 6, 60, 222, 6, 60, 220, 6, 63, 67, 139, 223, 6, 60, 219, 6, 60, 216, 6, 60, 223, 6, 60, 219, 6, 60, 216, 6, 63, 71, 144, 223, 6, 63, 75, 148, 219, 6, 63, 76, 149, 224, 6, 60, 219, 6, 60, 213, 6, 60, 224, 6, 60, 219, 6, 60, 213, 6, 60, 224, 6, 60, 219, 6, 63, 68, 141, 225, 6, 60, 221, 6, 60, 217, 6, 63, 73, 146, 225, 6, 60, 221, 6, 60, 217, 6, 63, 77, 150, 225, 6, 60, 221, 6, 63, 69, 142, 226, 6, 60, 222, 6, 60, 218, 6, 63, 74, 147, 226, 6, 60, 222, 6, 60, 218, 6, 63, 78, 151, 226, 6, 60, 222, 6, 63, 70, 134, 202, 6, 59, 70, 134, 6, 63, 143, 207, 6, 62, 147, 211, 6, 62, 152, 216, 6, 62, 156, 220, 6, 62, 79, 158, 222, 6, 62, 163, 227, 6, 63, 70, 143, 216, 6, 63, 68, 141, 214, 6, 63, 67, 139, 212, 6, 63, 66, 138, 211, 6, 63, 65, 137, 210, 6, 63, 64, 136, 209, 6, 63, 65, 137, 210, 6, 63, 66, 138, 211, 6, 63, 0
dw data_5


table_6:
dw 20362, 18141, 17123, 15255, 14398, 13590, 12827, 12108, 11428, 10787, 10181, 9610, 9070, 8561, 8081, 7627, 7199, 6795, 6414, 6054, 5714, 5393, 5091, 4805, 4535, 4281, 3814, 3600, 3398, 3207, 3027, 2857, 2697, 2545, 2402, 2268, 2140, 1907,

data_6:
db 69, 145, 220, 56, 58, 152, 14, 57, 14, 62, 69, 145, 227, 28, 63, 65, 145, 222, 42, 62, 144, 216, 7, 62, 142, 214, 7, 62, 144, 216, 14, 57, 14, 65, 28, 63, 68, 147, 219, 56, 62, 153, 222, 14, 57, 14, 60, 68, 228, 14, 58, 147, 14, 63, 69, 150, 227, 42, 62, 149, 220, 7, 62, 147, 219, 7, 63, 73, 149, 220, 28, 57, 76, 28, 63, 73, 152, 224, 14, 57, 76, 14, 57, 73, 14, 57, 14, 62, 73, 156, 227, 14, 57, 69, 14, 57, 71, 14, 57, 73, 14, 59, 74, 154, 14, 57, 77, 14, 63, 74, 153, 228, 14, 57, 14, 74, 14, 61, 76, 218, 14, 61, 77, 220, 14, 61, 74, 217, 14, 63, 71, 150, 222, 14, 57, 79, 14, 57, 71, 14, 57, 14, 62, 71, 154, 225, 14, 57, 72, 14, 57, 74, 14, 59, 71, 150, 14, 59, 72, 153, 14, 57, 79, 14, 63, 72, 152, 227, 14, 57, 14, 72, 14, 61, 74, 217, 14, 61, 76, 218, 14, 61, 72, 216, 14, 63, 66, 148, 228, 14, 57, 69, 14, 57, 72, 14, 57, 77, 14, 59, 66, 153, 14, 61, 69, 227, 14, 63, 72, 148, 225, 14, 61, 77, 223, 14, 63, 64, 152, 227, 14, 57, 66, 14, 57, 70, 14, 59, 74, 150, 7, 58, 149, 7, 59, 64, 150, 14, 61, 66, 225, 14, 61, 70, 224, 14, 61, 74, 225, 14, 63, 65, 156, 216, 14, 57, 69, 14, 57, 71, 14, 57, 74, 14, 61, 76, 214, 14, 57, 81, 14, 57, 83, 14, 59, 86, 158, 7, 58, 156, 7, 63, 76, 155, 225, 14, 60, 222, 7, 60, 220, 7, 60, 219, 14, 60, 222, 7, 60, 220, 7, 60, 219, 14, 63, 147, 207, 14, 62, 148, 209, 14, 62, 150, 211, 14, 62, 72, 148, 212, 56, 58, 154, 14, 57, 14, 62, 72, 148, 218, 28, 63, 67, 148, 214, 42, 62, 147, 218, 7, 62, 145, 217, 7, 62, 147, 218, 14, 57, 14, 67, 28, 63, 67, 150, 211, 56, 63, 67, 155, 214, 28, 61, 71, 219, 14, 58, 150, 14, 63, 72, 153, 218, 42, 62, 152, 223, 7, 62, 150, 222, 7, 63, 76, 152, 223, 28, 57, 79, 28, 63, 76, 154, 216, 14, 57, 79, 14, 57, 76, 14, 57, 14, 62, 76, 159, 218, 14, 57, 72, 14, 57, 74, 14, 57, 76, 14, 59, 77, 157, 14, 57, 80, 14, 63, 77, 155, 219, 14, 57, 14, 77, 14, 61, 79, 221, 14, 61, 80, 223, 14, 61, 77, 219, 14, 63, 74, 153, 214, 14, 57, 82, 14, 57, 74, 14, 57, 14, 62, 74, 157, 217, 14, 57, 75, 14, 57, 77, 14, 59, 74, 153, 14, 59, 75, 155, 14, 57, 82, 14, 63, 75, 154, 218, 14, 57, 14, 75, 14, 61, 77, 219, 14, 61, 79, 221, 14, 61, 75, 218, 14, 63, 68, 151, 219, 14, 57, 72, 14, 57, 75, 14, 57, 80, 14, 59, 68, 155, 14, 61, 72, 229, 14, 63, 75, 151, 228, 14, 61, 80, 226, 14, 63, 66, 154, 218, 14, 57, 68, 14, 57, 73, 14, 59, 77, 153, 7, 58, 152, 7, 59, 66, 153, 14, 61, 68, 228, 14, 61, 73, 227, 14, 61, 77, 228, 14, 63, 67, 159, 218, 14, 57, 72, 14, 57, 74, 14, 57, 77, 14, 61, 79, 217, 14, 57, 84, 14, 57, 86, 14, 59, 89, 161, 7, 58, 159, 7, 63, 79, 158, 228, 14, 60, 225, 7, 60, 223, 7, 60, 222, 14, 60, 225, 7, 60, 223, 7, 61, 222, 14, 62, 144, 204, 14, 62, 145, 206, 14, 62, 147, 208, 14, 62, 69, 145, 220, 56, 58, 152, 14, 57, 14, 62, 69, 145, 227, 28, 63, 65, 145, 222, 42, 62, 144, 216, 7, 62, 142, 214, 7, 62, 144, 216, 14, 57, 14, 65, 28, 63, 65, 147, 219, 56, 63, 65, 153, 222, 28, 61, 68, 228, 14, 58, 147, 14, 63, 69, 150, 227, 42, 62, 149, 220, 7, 62, 147, 219, 7, 63, 73, 149, 220, 28, 57, 76, 28, 63, 73, 152, 224, 14, 57, 76, 14, 57, 73, 14, 57, 14, 62, 73, 156, 227, 14, 57, 69, 14, 57, 71, 14, 57, 73, 14, 59, 74, 154, 14, 57, 77, 14, 63, 74, 153, 228, 14, 57, 14, 74, 14, 61, 76, 218, 14, 61, 77, 220, 14, 61, 74, 217, 14, 63, 71, 150, 222, 14, 57, 79, 14, 57, 71, 14, 57, 14, 62, 71, 154, 225, 14, 57, 72, 14, 57, 74, 14, 59, 71, 150, 14, 59, 72, 153, 14, 57, 79, 14, 63, 72, 152, 227, 14, 57, 14, 72, 14, 61, 74, 217, 14, 61, 76, 218, 14, 61, 72, 216, 14, 63, 66, 148, 228, 14, 57, 69, 14, 57, 72, 14, 57, 14, 58, 66, 153, 14, 61, 69, 227, 14, 63, 72, 148, 225, 14, 61, 77, 223, 14, 63, 64, 152, 227, 14, 57, 66, 14, 57, 70, 14, 59, 74, 150, 7, 58, 149, 7, 59, 64, 150, 14, 61, 66, 225, 14, 61, 70, 224, 14, 61, 74, 225, 14, 63, 65, 156, 216, 14, 57, 69, 14, 57, 71, 14, 57, 74, 14, 61, 76, 214, 14, 57, 81, 14, 57, 83, 14, 59, 86, 158, 7, 58, 156, 7, 63, 76, 155, 225, 14, 60, 222, 7, 60, 220, 7, 60, 219, 14, 60, 222, 7, 60, 220, 7, 61, 219, 14, 62, 144, 204, 14, 62, 145, 206, 14, 62, 147, 208, 14, 62, 69, 156, 212, 14, 57, 69, 14, 57, 69, 14, 57, 69, 14, 61, 67, 211, 14, 57, 67, 14, 57, 67, 14, 57, 67, 14, 63, 66, 148, 209, 14, 57, 66, 14, 63, 66, 158, 214, 14, 63, 66, 159, 216, 14, 63, 67, 161, 217, 14, 63, 67, 158, 214, 14, 63, 67, 156, 212, 14, 63, 67, 154, 211, 14, 63, 69, 156, 212, 14, 57, 69, 14, 57, 69, 14, 57, 69, 14, 61, 67, 211, 14, 57, 67, 14, 57, 67, 14, 57, 67, 14, 63, 66, 148, 209, 14, 57, 66, 14, 63, 66, 163, 218, 14, 63, 66, 161, 217, 14, 63, 67, 159, 216, 14, 63, 67, 161, 217, 14, 63, 67, 158, 214, 14, 63, 67, 159, 216, 14, 63, 69, 156, 214, 56, 61, 69, 211, 56, 61, 69, 213, 56, 63, 0

;--------------------------------------

play_en:
db 0

table_adr:
dw 0

data_adr:
dw 0
