Advertisement
pigdevil2010

Untitled

Jun 21st, 2016
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. DrawNote:
  2.     ld a, [wMutedChannels]
  3.     ld b, a
  4.     ld a, [wTmpCh]
  5.     and a
  6.     jr z, .skipshift
  7. .shiftloop
  8.     srl b
  9.     dec a
  10.     jr nz, .shiftloop
  11. .skipshift
  12.     srl b
  13.     jp c, .nonote
  14.     ld a, [wTmpCh]
  15.     add a
  16.     ld c, a
  17.     ld b, 0
  18.     ld hl, wC1Vol
  19.     add hl, bc
  20.     ld a, [hl]
  21.     and a
  22.     jr z, .nonote
  23. ; get the note from tone frequency
  24. ; e = ⌊96.5-12*log₂(k/Freq("C2")/(2048-[wCxFreq]))⌋
  25. ;   = ⌊96.5-12*(log₂(k/Freq("C2"))-log₂(2048-[wCxFreq]))⌋
  26. ; k = 131072 when wTmpCh != 2
  27. ; k =  65536 when wTmpCh =  2
  28. ; Freq("C2") is 65.4064Hz in A440
  29.     ld hl, wC1Freq
  30.     add hl, bc
  31.     ld a, [hli]
  32.     ld c, a
  33.     ld b, [hl] ; [wCxFreq]
  34.     ld a, 2048 % $100
  35.     sub c
  36.     ld l, a
  37.     ld a, 2048 / $100
  38.     sbc b
  39.     ld h, a ; 2048-[wCxFreq]
  40.     ld a, h
  41.     and a
  42.     ld a, l
  43.     jr nz, .skip0check
  44.     cp 1
  45.     jr z, .logshiftdone
  46.     jr c, .nonote
  47. .skip0check
  48.     ld bc, 0
  49.     ld d, c
  50. .logshiftloop
  51.     srl h
  52.     rr l
  53.     rr c
  54.     inc d
  55.     ld a, h
  56.     and a
  57.     jr nz, .logshiftloop
  58.     ld a, l
  59.     cp 1
  60.     jr nz, .logshiftloop
  61. .logshiftdone
  62.     ld hl, LogTable
  63.     add hl, bc
  64.     ld e, [hl] ; log₂(2048-[wCxFreq])
  65.     ld a, [wTmpCh]
  66.     cp 2
  67.     ld hl, $af7 ; log₂(65536/Freq("C2"))
  68.     jr z, .ch3
  69.     ld hl, $bf7 ; log₂(131072/Freq("C2"))
  70. .ch3
  71.     ld a, l
  72.     sub e
  73.     ld l, a
  74.     ld a, h
  75.     sbc d
  76.     ld h, a ; log₂(k/Freq("C2"))-log₂(2048-[wCxFreq])
  77.     ld b, h
  78.     ld c, l
  79.     add hl, hl
  80.     add hl, bc
  81.     add hl, hl
  82.     add hl, hl ; 12*(log₂(k/Freq("C2"))-log₂(2048-[wCxFreq]))
  83.     ld b, h
  84.     ld c, l ; 12*(log₂(k/Freq("C2"))-log₂(2048-[wCxFreq]))
  85.     ld a, $80
  86.     sub l
  87.     ld a, $60 ; 96.5
  88.     sbc h
  89.     ld e, a ; ⌊96.5-12*(log₂(k/Freq("C2"))-log₂(2048-[wCxFreq]))⌋
  90.     ld a, [wTmpCh]
  91.     ld c, a
  92.     ld b, 0
  93.     ld hl, wChLastNotes
  94.     add hl, bc
  95.     add hl, bc
  96.     add hl, bc
  97.     ld a, e
  98.     ld [hli], a
  99.     srl a
  100.     srl a
  101.     and $fe
  102.     ld [hli], a
  103.     ld a, e
  104.     and 7
  105.     sla a
  106.     ld [hli], a
  107.     ret
  108.  
  109. .nonote
  110.     ld a, [wTmpCh]
  111.     ld c, a
  112.     ld b, 0
  113.     ld hl, wChLastNotes
  114.     add hl, bc
  115.     add hl, bc
  116.     add hl, bc
  117.     ld a, $ff
  118.     ld [hli], a
  119.     ld [hl], a
  120.     ret
  121.  
  122. LogTable:
  123. ; ⌊log₂(1+(x/256))*256⌋
  124.     db   0,   1,   2,   4,   5,   7,   8,   9,  11,  12,  14,  15,  16,  18,  19,  21
  125.     db  22,  23,  25,  26,  27,  29,  30,  31,  33,  34,  35,  37,  38,  39,  40,  42
  126.     db  43,  44,  46,  47,  48,  49,  51,  52,  53,  54,  56,  57,  58,  59,  61,  62
  127.     db  63,  64,  65,  67,  68,  69,  70,  71,  73,  74,  75,  76,  77,  78,  80,  81
  128.     db  82,  83,  84,  85,  87,  88,  89,  90,  91,  92,  93,  94,  96,  97,  98,  99
  129.     db 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 111, 112, 113, 114, 115, 116
  130.     db 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 131, 132, 133
  131.     db 134, 135, 136, 137, 138, 139, 140, 140, 141, 142, 143, 144, 145, 146, 147, 148
  132.     db 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 162, 163
  133.     db 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 173, 174, 175, 176, 177, 178
  134.     db 179, 180, 181, 181, 182, 183, 184, 185, 186, 187, 188, 188, 189, 190, 191, 192
  135.     db 193, 194, 194, 195, 196, 197, 198, 199, 200, 200, 201, 202, 203, 204, 205, 205
  136.     db 206, 207, 208, 209, 209, 210, 211, 212, 213, 214, 214, 215, 216, 217, 218, 218
  137.     db 219, 220, 221, 222, 222, 223, 224, 225, 225, 226, 227, 228, 229, 229, 230, 231
  138.     db 232, 232, 233, 234, 235, 235, 236, 237, 238, 239, 239, 240, 241, 242, 242, 243
  139.     db 244, 245, 245, 246, 247, 247, 248, 249, 250, 250, 251, 252, 253, 253, 254, 255
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement