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