;---------------------------------------------------------------------- ; PEGASUS[3] : MSB-EPN/98N with Joy-Stick & Mic ; (Re-produced on 1992.11.28) ;---------------------------------------------------------------------- ;========== Data Area ===================================== dseg abs d_area(04000h) tone_data_bank: ds 256*10 ; Tone Data Parameter rhythm_bank: ds 256*9 ; Rhythm Tone Parameter wave_buffer: ds 256 ; DSP-01 Wave Data Buffer patch_matrix: ds 128 ; Patch Matrix Table patch_rhythm: ds 128 ; Rhythm Patch Matrix Table multi_bank: ds 256*10 ; Real Piano Data Area dseg abs b_area(06000h) rx_fifo: ds 256*16 ; MIDI RX FIFO (7000-7FFF) tx_fifo: ds 256*16 ; MIDI TX FIFO (8000-8FFF) dseg abs f_area(09000h) fnum_1_l: ds 256*16 ; F-Number (L) #1 (9000-9FFF) fnum_1_m: ds 256*16 ; F-Number (M) #1 (A000-AFFF) fnum_1_h: ds 256*16 ; F-Number (H) #1 (B000-BFFF) dseg abs r_area(0fdc0h) bank_buff: ds 16 ; offset = DSP-01 dsp_vib_ctr: ds 16 ; offset = DSP-01 dsp_vib_spd: ds 16 ; offset = DSP-01 dsp_vib_add: ds 16 ; offset = DSP-01 dsp_vib_dat: ds 16 ; offset = DSP-01 dsp_vib_flg: ds 16 ; offset = DSP-01 bender: ds 16 ; offset = MIDI : Default = [40] volume: ds 16 ; offset = MIDI : Volume Buffer stop_panpot: ds 16 ; offset = MIDI : Panpot OFF Point work: ds 10 ; Universal Work Area calc: ds 12 ; Calculator Area loop_counter: ds 1 ; Job [E] Buffer wts_rsb: ds 8 ; [Want to Send] Running Status Buffer wts_buff: ds 1 ; [Want to Send] Buffer synthe_add: ds 16 ; Wave Synthe Point Address synthe_data: ds 16 ; Wave Synthe Point Data wave_block: ds 1 ; Wave Transfer Block NO. Buffer wave_bank: ds 1 ; Wave Transfer Bank NO. Buffer address_high: ds 1 ; High Address Buffer address_low: ds 1 ; Low Address Buffer pedals: ds 16 ; Danper=[0] Soft=[1] iseg abs i_area(0ff00h) assign_ctr: ds 16 ; offset = DSP-01 : [0]=Newest ,[10h]=Empty assign_note: ds 16 ; offset = DSP-01 assign_ch: ds 16 ; offset = DSP-01 : Output = MIDI CH assign_pc: ds 16 ; offset = MIDI dsp_panpot: ds 16 ; offset = DSP-01 : MSB 2Bit=Mode special_mode: ds 1 ; Special Mode Flag comm_buffer: ds 1 ; MPU Command Buffer para_buffer: ds 1 ; MPU Parameter Buffer int_flg: ds 1 ; Interrupt Check Flags comm_flag: ds 1 ; Command Check Flags rx_data: ds 1 ; MIDI Received 1 Byte Data Buffer status: ds 1 ; MIDI Status channel: ds 1 ; MIDI Channel Buffer rsb: ds 1 ; Running Status Buffer old_rsb: ds 1 ; Old Running Status Buffer dcb: ds 1 ; Data Count Buffer data_1st: ds 1 ; ( Key Number Buffer ) data_2nd: ds 1 ; ( Velocity Buffer ) rx_top: ds 2 ; MIDI Receive FIFO Top Pointer rx_end: ds 2 ; MIDI Receive FIFO End Pointer tx_top: ds 2 ; MIDI Transmit FIFO Top Pointer tx_end: ds 2 ; MIDI Transmit FIFO End Pointer dsp_tx_end: ds 2 ; DSP-01 Tone Generator TX FIFO End dsp_channel: ds 1 ; MIDI Channel Buffer dsp_rsb: ds 1 ; Running Status Buffer dsp_dcb: ds 1 ; Data Count Buffer dsp_data_1st: ds 1 ; DSP-01 Received 1 Byte Data Buffer dsp_data_2nd: ds 1 ; DSP-01 Received 1 Byte Data Buffer rhythm_channel: ds 1 ; Default=[9] (MIDI=10) on_pointer: ds 1 ; Assign ON Pointer ch_buff: ds 1 ; Bend Channel Buffer panpot_timer: ds 1 ; Panpot Speed Timer vib_timer: ds 1 ; Vibrate Speed Timer multi_flag: ds 1 ; Real Piano Mode Flag : [1]=ON,[0]=OFF multi_channel: ds 1 ; Real Piano Channel stack_hl: ds 2 ; HL Buffer mute_1_8: ds 1 ; Channel Mute Flag mute_9_16: ds 1 ; Channel Mute Flag tg_on_off: ds 1 ; sample_flg: ds 1 ; top_offset: ds 1 ; end_offset: ds 1 ; led_timer: ds 2 ; LED Display Timer ad_mode: ds 1 ; A/D Select Mode ad_buff: ds 16 ; ad_old: ds 2 ; iop5_buff: ds 1 ; end_mark: ds 3 ; Use for Debug ! ;========== Port Defines Area ============================= dsp-01 equ 0fa00h ; Tone Generator [DSP-01] : FA00-FBFF internal_ram equ 0fdc0h ; Internal RAM Top Address port_p01cr equ 0ffc2h ; Port 0/1 Control port_p2cr equ 0ffc5h ; Port-2 Control port_iop3 equ 0ffc6h ; Port-3 port_p3cr equ 0ffc7h ; Port-3 Control port_p4cr equ 0ffc9h ; Port-4 Control port_iop5 equ 0ffcah ; Port-5 port_smmod equ 0ffcbh ; Stepping Motor Mode port_iop6 equ 0ffcch ; Port-6 port_iop7 equ 0ffcdh ; Port-7 port_p67cr equ 0ffceh ; Port-6/7 Control port_iop8 equ 0ffd0h ; Port-8 port_p8cr equ 0ffd1h ; Port-8 Control port_wdmod equ 0ffd2h ; Watch Dog Timer Mode port_wdcr equ 0ffd3h ; Watch Dog Timer Control port_treg0 equ 0ffd4h ; 16bit Timer <0/1> port_treg2 equ 0ffd6h ; 8bit Timer <2> port_treg3 equ 0ffd7h ; 8bit Timer <3> port_tclk equ 0ffd8h ; Timer Source Control port_tmod equ 0ffdah ; Timer Mode port_trun equ 0ffdbh ; Timer/Serial Baud Rate port_treg5 equ 0ffe2h ; 16bit Timer <5> [low] port_t4mod equ 0ffe4h ; 16bit Timer Mode port_t4ffcr equ 0ffe5h ; 16bit Timer Control port_intel equ 0ffe6h ; Interrupt Enable Mask [low] port_inteh equ 0ffe7h ; Interrupt Enable Mask [high] port_dmaeh equ 0ffe8h ; Micro DMA Enable Mask [high] port_scmod equ 0ffe9h ; Serial Channel Mode port_sccr equ 0ffeah ; Serial Channel Control port_scbuf equ 0ffebh ; Serial Channel Buffer port_bx equ 0ffech ; Bank Register x port_by equ 0ffedh ; Bank Register y port_adreg equ 0ffeeh ; A/D Converter Data Buffer port_admod equ 0ffefh ; A/D Converter Control port_option_x equ 0fff0h ; DSR Bit : [Read] --> Active [Low] port_option_y equ 0fff1h ; DRR Bit : [Read] --> Active [Low] port_option_z equ 0fff2h ; CLR DRR : [Read] --> Clear INT0 port_option_d equ 0fff3h ; CLR DSR : Initial=[Read] port_rs232c equ 0fff8h ; External UART(1) --> INT1 port_ex_midi equ 0fffah ; External UART(2) --> INT2 port_data equ 0fffch ; MPU Data Get Port (RD) : INT0 port_command equ 0fffdh ; MPU Command Get Port (RD) : INT0 port_send equ 0fffeh ; MPU Data Send Port (WR) port_system equ 0ffffh ; System Port (WR) 6bit ;========== Bit Map Defines Area ========================== int_bit_midi equ 0 ; Int_Flg ; MIDI int_bit_timer equ 1 ; Time Base int_bit_tim_1 equ 2 ; 1msec int_bit_comm equ 0 ; Comm_Flag ; MPU401 Command int_bit_data equ 1 ; MPU401 Data tempo_bit equ 1 ; Port_TRUN ; Tempo Count ON/OFF mode_uart equ 0 ; special_mode ; 0 = Normal , 1 = UART mode_special equ 1 ; 0 = NOP , 1 = Special ON pedal_damper equ 0 ; pedals ; 0 = Off , 1 = On pedal_soft equ 1 ; 0 = Off , 1 = On ;========== MACRO Defines ================================= %define(dsr_active)( ld a,(port_option_x) ) %define(drr_active)( ld a,(port_option_y) ) %define(drr_int_clr)( ld a,(port_option_z) ) %define(reset_013)( ld a,(port_option_x) ; DSR Clear ld a,(port_option_y) ; DRR Clear ld a,(port_option_z) ; INT Clear ld a,(port_option_d) ; DSR F/F Clear ld (port_option_z),00000000b ; ld (port_option_y),00000000b ; ld (port_option_x),00001000b ; MIDI Gate ON ) %define(dsp-01_system(offset,data))( ld (dsp-01+%offset),%data nop ld (dsp-01+0f3h),%data ) %define(dsp-01_16ch(offset,data)) local loop( ldw (work+1),dsp-01+%offset ld (work+0),%data call @_setting_16 ) %define(move_3byte(dst,src))( ld a,(%src+0) ld (%dst+0),a ld a,(%src+1) ld (%dst+1),a ld a,(%src+2) ld (%dst+2),a ) %define(shift(d1,d2,d3))( ldw (work+0),%d1 ldw (work+2),%d2 ldw (work+4),%d3 call _shift_sub ) %define(range(d1,d2))( ld hl,%d1 ld de,%d2 ld bc,00e80h lddr ) %define(data_set_16(address,data)) local loop( ldw (work+1),%address ld (work+0),%data call @_setting_16 ) %define(synthe(ct,ad,dt))( ld (synthe_add+%ct),%ad ld (synthe_data+%ct),%dt ) ;========== Head Program Area ============================= cseg abs c_area(0) di ld sp,0ffc0h call system_setup ; System Initialize --> Main Loop jp main_loop ;========== Interrupt Vector/Sequence ===================== org 10h ; Software Interrupt : SWI reti org 18h ; Non Mascable Interrupt : NMI reti org 20h ; Watch Dog Timer : INTWD reti org 28h ; External Interrupt #0 : INT0 reti org 30h ; Timer Interrupt #0 : INTT0 reti org 38h ; Timer Interrupt #1 : INTT1 reti org 40h ; Timer Interrupt #2 : INTT2 reti org 48h ; Timer Interrupt #3 : INTT3 set int_bit_tim_1,(int_flg) reti org 50h ; Timer Interrupt #4 : INTT4 reti org 58h ; External Interrupt #1 : INT1 reti org 60h ; Timer Interrupt #5 : INTT5 reti org 68h ; External Interrupt #2 : INT2 reti org 70h ; UART Receive Interrupt : INTRX push hl push bc jr _int_midi_rx org 78h ; UART Transmit Interrupt : INTTX set int_bit_midi,(int_flg) reti _int_midi_rx: ld hl,(rx_top) ld bc,rx_fifo add hl,bc ld a,(port_scbuf) cp a,0feh jr z,_int_rx_ex ld (hl),a incw (rx_top) bit 4,(rx_top+1) jr z,_int_rx_ex ldw (rx_top),0 _int_rx_ex: pop bc pop hl reti ;========== System Initialize Routine ===================== system_setup: %reset_013 ;<< DSP-01 Initialize >> ld (port_iop3),11111011b ; DSP-01 Reset ! call @_wait_timer ; (wait) ld (port_iop3),11111111b ; DSP-01 Start ! call @_wait_timer ; (wait) %dsp-01_system(0f5h,0) ; Memory Bus Close ;<< CPU : TMP91C640 Initialize >> ld (port_wdmod),01110000b ; Watch Dog OFF ld (port_wdcr),0b1h ; Watch Dog OFF ld (port_intel),01000011b ; Interrupt Enable ld (port_inteh),00000100b ; Interrupt Enable ld (port_dmaeh),00000000b ; Micro DMA Disable ld (port_p01cr),00000110b ; Port 0/1 = Data/Address Bus ld (port_p2cr),11111111b ; Port 2 = Address Bus ld (port_p3cr),10101001b ; Port 3 = UART ld (port_sccr),00000000b ; Port 3 = Constant ld (port_p4cr),00001111b ; Port 4 = Bank Address ld (port_smmod),00000000b ; Port 6/7 = Port ld (port_p67cr),11111111b ; Port 6/7 = Output ld (port_p8cr),00001000b ; Port 8 = Output/Buzzer ld (port_scmod),00101000b ; UART Control ld (port_trun),10101111b ; Baud Rate ld (port_tmod),00000100b ; 8bit Timer Mode ld (port_tclk),10010001b ; Timer Assign ld (port_t4mod),00000110b ; 16bit Timer Mode ld (port_t4ffcr),00001011b ; 16bit Timer Control ldw (port_treg0),0ffffh ; (dummy) Tempo ld (port_treg2),3 ; MIDI Divide Rate : 12MHz ld (port_treg3),187 ; 1msec Interval Constant(1) ld (port_admod),0f0h ; A/D Wait ld (port_bx),00h ; ROM/RAM Area ld (port_by),00h ; ld (port_iop6),0ffh ; LED Off ld (port_iop7),0ffh ; ;<< DSP-01 Initialize >> %dsp-01_system(0f0h,0) ; Random Bit Pattern %dsp-01_16ch(000h,0) ; F-NO.(L) %dsp-01_16ch(010h,0) ; F-NO.(M) %dsp-01_16ch(020h,0) ; F-NO.(H) %dsp-01_16ch(030h,0) ; Start Point %dsp-01_16ch(040h,0) ; Loop Top %dsp-01_16ch(050h,0) ; Loop End %dsp-01_16ch(060h,0) ; Bank %dsp-01_16ch(070h,0) ; Panpot %dsp-01_16ch(0a0h,0f0h) ; Attack Level %dsp-01_16ch(0b0h,00fh) ; Attack Speed call @_dsp-01_all_off ; All Note Off %dsp-01_system(0f2h,00101111b) ; Output Parameter %dsp-01_system(0f5h,1) ; Memory Bus Open ;<< RAM Area Initialize >> ld hl,internal_ram ; Internal RAM Area ld bc,512-16 _int_ram_clear: ld (hl),0 inc hl djnz bc,_int_ram_clear ld (mute_1_8),0ffh ; All Channel OK ld (mute_9_16),0ffh ; All Channel OK ld (rhythm_channel),9 ; Default Rhythm Channel = [10] call pitch_setting ; Temperaments/Pitch call init_tone_set ; TONE Module call init_wave_set ; Wave RAM Setting call hot_start %reset_013 ; %drr_int_clr ; ld (port_admod),0f8h ; ld a,(port_scbuf) ; ld (port_scbuf),0fch ; ei ; %drr_active ; ret hot_start: call @_dsp-01_all_off ; Tone Generator All Note Off ld (special_mode),0 ; Mode Setting : Normal ld (tg_on_off),0 ; ld (top_offset),1 ; ld (end_offset),1 ; %data_set_16(volume,255) ; MIDI Volume %data_set_16(bender,40h) ; MIDI Bender %data_set_16(dsp_vib_dat,8) ; Vibrate Default Offset ret ;========== Main Loop ===================================== main_loop: call @_tx_midi_check ; BIOS call @_dsp-01_rx_chk ; TGEN ;;;; call @_dsp-01_panpot ; TGEN ;;;; call @_dsp-01_vibrate ; TGEN call @_tx_midi_check ; BIOS call @_int_1msec_seq ; BIOS call rx_midi_check ; MIDI Receive Sequence jr main_loop ;========== MIDI Received Data Check ====================== rx_midi_check: ld hl,(rx_end) cp hl,(rx_top) ; FIFO Event ? ret z ld de,rx_fifo add hl,de ld b,(hl) incw (rx_end) bit 4,(rx_end+1) jr z,_rx_midi_nx ldw (rx_end),0 _rx_midi_nx: bit 7,b jr z,midi_running cp b,0f0h ret nc ld a,b ld (status),a and b,11110000b ld (rsb),b and a,00001111b ld (channel),a ld (dcb),0 ret midi_running: ld a,(rsb) cp a,0 ret z cp (dcb),0 jr nz,_midi_run_2nd ld (data_1st),b cp a,0c0h jr z,midi_prog_change cp a,0d0h jr z,midi_prog_change ld (dcb),1 ret midi_prog_change: ld b,(status) call tx_tx_midi_set ld b,(data_1st) call tx_tx_midi_set ret _midi_run_2nd: ld (data_2nd),b ld (dcb),0 ld b,(status) call tx_tx_midi_set ld b,(data_1st) call tx_tx_midi_set ld b,(data_2nd) call tx_tx_midi_set ret ;========== Wave Drawing Synthesizer ====================== @_wave_synthe: ld (calc),0 ; Counter ld hl,synthe_add _syn_1st_1: ld a,(calc) cp (hl+a),255 jr z,_syn_1st_end cp (hl+a),0 jr nz,_syn_1st_2nd inc (calc) cp (calc),16 jr nz,_syn_1st_1 ret _syn_1st_end: ld (calc+1),0 ; Top Address ld (calc+2),128 ; Top Data ld (calc+3),255 ; End Address ld hl,synthe_data ld a,(calc) ld a,(hl+a) ld (calc+4),a ; End Data call _synthe_sub jr _wave_syn_exec _syn_1st_2nd: ld (calc+1),0 ; Top Address ld (calc+2),128 ; Top Data _syn_2nd_3rd: ld a,(hl+a) ld (calc+3),a ; End Address ld hl,synthe_data ld a,(calc) ld a,(hl+a) ld (calc+4),a ; End Data call _synthe_sub ld a,(calc+3) ld (calc+1),a ; Next Address ld a,(calc+4) ld (calc+2),a ; Next Data inc (calc) _syn_2nd_1: ld hl,synthe_add ld a,(calc) cp (hl+a),255 jr z,_syn_2nd_end cp (hl+a),0 jr nz,_syn_2nd_3rd inc (calc) cp (calc),16 jr nz,_syn_2nd_1 ld (calc+3),255 ; End Address ld (calc+4),128 ; End Dummy jr _wave_syn_expp _syn_2nd_end: ld (calc+3),255 ; End Address ld hl,synthe_data ld a,(calc) ld a,(hl+a) ld (calc+4),a ; End Data _wave_syn_expp: call _synthe_sub _wave_syn_exec: ld de,wave_buffer ld b,0 _wave_syn_loop: ld a,(de) bit 7,a jr z,_wave_syn_lp_1 and a,01111111b jr _wave_syn_lp_2 _wave_syn_lp_1: xor a,0ffh cp a,0ffh jr z,_wave_syn_lp_2 inc a _wave_syn_lp_2: ld (de),a inc de inc b jr nz,_wave_syn_loop call @_wave_put ret _synthe_sub: ld l,(calc+1) ld h,0 ld c,(calc+3) ld b,0 cp hl,bc ret nc ld hl,wave_buffer ld c,(calc+1) ld b,0 add hl,bc ld a,(calc+2) ld (hl),a ; Top Point ld hl,wave_buffer ld c,(calc+3) ld b,0 add hl,bc ld a,(calc+4) ld (hl),a ; End Point ld a,(calc+1) inc a cp a,(calc+3) ret z ld l,(calc+3) ld h,0 ld c,(calc+1) ld b,0 sub hl,bc ld (calc+7),l ; bunbo ld l,(calc+4) ld h,0 ld c,(calc+2) ld b,0 cp hl,bc jr c,_syn_sub_minus _syn_sub_plus: ld (calc+8),0 ; Plus jr _syn_sub_mix _syn_sub_minus: ld l,(calc+2) ld h,0 ld c,(calc+4) ld b,0 ld (calc+8),1 ; Minus _syn_sub_mix: sub hl,bc ld (calc+6),l ; bunshi ld (calc+5),1 ; 1st Point _syn_sub_loop: ld l,(calc+5) mul hl,(calc+6) div hl,(calc+7) ld c,l ld b,0 ld l,(calc+2) ld h,0 cp (calc+8),0 jr nz,_syn_sub_sub _syn_sub_add: add hl,bc jr _syn_sub_join _syn_sub_sub: sub hl,bc _syn_sub_join: ld e,l ld hl,wave_buffer ld c,(calc+1) ld b,0 add hl,bc ld c,(calc+5) ld b,0 add hl,bc ld (hl),e ; This Point inc (calc+5) ld a,(calc+5) cp a,(calc+7) jr nz,_syn_sub_loop ret ;========== BIOS Entry ==================================== ;<< NO.[ 3 ] DRR OK Setting >> @_drr_ok_set: %drr_active ret ;<< NO.[ 6 ] 1msec Timer Interrupt Sequence >> @_int_1msec_seq: bit int_bit_tim_1,(int_flg) ret z res int_bit_tim_1,(int_flg) bit 0,(led_timer) ; Odd/Even ? jr z,_int_1msec_even ld (port_treg3),187 ; 1msec Interval Constant(1) jr _int_1msec_cont _int_1msec_even: ld (port_treg3),188 ; 1msec Interval Constant(2) _int_1msec_cont: inc (led_timer) call sampling_check ld b,(port_adreg) ; New Data ld a,(ad_mode) ; ad_mode : 0 - 15 ld (work+3),a inc a and a,00001111b ld (ad_mode),a and a,00000001b or a,11111010b ; A/D Start Control Word ! ld (port_admod),a ld hl,ad_buff ld a,(work+3) ld (hl+a),b ld de,ad_buff bit 0,(work+3) jr z,_ad_ch_3 inc de _ad_ch_3: ld hl,0 ld b,0 ld a,0 _ad_mean: ld c,(de) add hl,bc inc de inc de inc a cp a,8 jr nz,_ad_mean bit 0,(work+3) jr nz,_ad_ch_4 add hl,30 _ad_ch_4: add hl,15 div hl,8 ld a,l bit 7,a jr nz,_ad_bigger ld hl,ad_table_low jr _ad_next _ad_bigger: res 7,a ld hl,ad_table_high _ad_next: ld b,(hl+a) ld a,(work+3) and a,00000001b ld d,a ld hl,ad_old ld c,(hl+a) ld (hl+a),b ld a,b cp a,c ret z ld (work+7),a cp d,0 jr z,_ad_cf ld b,0dfh jr _ad_mix _ad_cf: ld b,0cfh jr _ad_mix _ad_mix: call tx_tx_midi_set ld b,(work+7) call tx_tx_midi_set ret ad_table_low: db 000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h ; 00-0f db 000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h ; 10-1f db 000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h ; 20-2f db 000h,000h,000h,000h,000h,000h,000h,000h db 000h,001h,002h,003h,004h,005h,006h,007h ; 30-3f db 008h,009h,00ah,00bh,00ch,00dh,00eh,00fh db 010h,011h,012h,013h,014h,015h,016h,017h ; 40-4f db 018h,019h,01ah,01bh,01ch,01dh,01eh,01fh db 020h,021h,022h,023h,024h,025h,026h,027h ; 50-5f db 028h,029h,02ah,02bh,02ch,02dh,02eh,02fh db 030h,031h,032h,033h,034h,035h,036h,037h ; 60-6f db 038h,039h,03ah,03bh,03ch,03dh,03eh,03fh db 040h,040h,040h,040h,040h,040h,040h,040h ; 70-7f ad_table_high: db 040h,040h,040h,040h,040h,040h,040h,040h db 040h,041h,042h,043h,044h,045h,046h,047h ; 80-8f db 048h,049h,04ah,04bh,04ch,04dh,04eh,04fh db 050h,051h,052h,053h,054h,055h,056h,057h ; 90-9f db 058h,059h,05ah,05bh,05ch,05dh,05eh,05fh db 060h,062h,063h,064h,065h,066h,067h,069h ; a0-af db 06ah,06bh,06ch,06dh,06eh,070h,071h,072h db 073h,074h,075h,077h,078h,079h,07ah,07bh ; b0-bf db 07ch,07dh,07eh,07fh,07fh,07fh,07fh,07fh db 07fh,07fh,07fh,07fh,07fh,07fh,07fh,07fh ; c0-cf db 07fh,07fh,07fh,07fh,07fh,07fh,07fh,07fh db 07fh,07fh,07fh,07fh,07fh,07fh,07fh,07fh ; d0-df db 07fh,07fh,07fh,07fh,07fh,07fh,07fh,07fh db 07fh,07fh,07fh,07fh,07fh,07fh,07fh,07fh ; e0-ef db 07fh,07fh,07fh,07fh,07fh,07fh,07fh,07fh db 07fh,07fh,07fh,07fh,07fh,07fh,07fh,07fh ; f0-ff tx_tx_midi_set: ld hl,(tx_top) ld de,tx_fifo add hl,de ld (hl),b incw (tx_top) bit 4,(tx_top+1) jr z,_rx_rx_ex ldw (tx_top),0 _rx_rx_ex: ret ;============================================ sampling_check: ld b,(port_iop5) ld a,(iop5_buff) ld c,a xor a,b and a,00110000b ret z and a,00100000b jp nz,_sw_right_event _sw_left_event: ld a,b and a,00010000b and c,00100000b or a,c ld (iop5_buff),a and b,00010000b ret nz cp (tg_on_off),0 ret z cp (sample_flg),0 ret z ld de,8000h sample_loop_1: ld (port_admod),11111001b sample_loop_2: ld a,(port_admod) and a,01000000b jr z,sample_loop_2 db 0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0 ld c,(port_adreg) ld a,c and a,11000000b cp a,01000000b jr z,sample_loop_3 cp a,10000000b jr z,sample_loop_4 cp a,11000000b jr z,sample_loop_5 jr sample_loop_6 sample_loop_3: ld a,c xor a,0ffh slaa or a,10000000b jr sample_loop_7 sample_loop_4: ld a,c slaa jr sample_loop_7 sample_loop_5: ld a,07fh jr sample_loop_7 sample_loop_6: ld a,0ffh sample_loop_7: ld (de),a ld hl,0c000h cp hl,de jr z,_sample_end inc de jr sample_loop_1 _sample_end: ld (wave_block),0 ; Wave Bank NO. _sample_set_1: ld h,(wave_block) or h,10000000b ld l,0 ld de,wave_buffer ld bc,256 ldir call @_wave_put inc (wave_block) cp (wave_block),40h jr nz,_sample_set_1 ld a,(ad_mode) and a,00000001b or a,11111010b ; A/D Start Control Word ! ld (port_admod),a call pitch_setting ; Temperaments/Pitch ret _sw_right_event: ld a,b and a,00100000b and c,00010000b or a,c ld (iop5_buff),a cp (tg_on_off),0 ret z and b,00100000b jr nz,_sw_right_off call dsp-01_pitch ret _sw_right_off: call dsp-01_off ret dsp-01_pitch: ld l,000h ; (fnum_l) ld h,03fh ; (fnum_m) ld bc,dsp-01+000h ld de,dsp-01+010h call send_loop ld a,0 ; (start_pt) ld h,16 ld bc,dsp-01+020h ld de,dsp-01+030h _set_sp: ld (bc),0 nop nop ld (de),a inc bc inc de add a,(top_offset) dec h jr nz,_set_sp dsp-01_loop: ld a,07fh ; (loop_end) ld h,16 ld bc,dsp-01+040h ld de,dsp-01+050h _set_lend: ld (bc),0 nop nop ld (de),a inc bc inc de sub a,(end_offset) dec h jr nz,_set_lend dsp-01_bk_pan: ld h,000h ; (panpot) ld l,080h ; (bank) ld bc,dsp-01+060h ld de,dsp-01+070h call send_loop dsp-01_attack: ld l,00fh ; (attack_lev) ld h,08fh ; (attack_sp) ld bc,dsp-01+0a0h ld de,dsp-01+0b0h call send_loop dsp-01_decay: ld l,0f0h ld h,0f2h ; (decay_sp) ld bc,dsp-01+0c0h ld de,dsp-01+0d0h call send_loop dsp-01_on: ld hl,dsp-01+090h ld a,0 _on_loop: ld (hl+a),3 inc a cp a,16 jr nz,_on_loop ret dsp-01_off: ld l,0f0h ld h,097h ; (decay_sp) ld bc,dsp-01+0c0h ld de,dsp-01+0d0h call send_loop ld hl,dsp-01+090h ld a,0 _off_loop: ld (hl+a),0 inc a cp a,16 jr nz,_off_loop ret send_loop: ld a,16 _set_loop: ld (bc),l nop nop ld (de),h inc bc inc de dec a jr nz,_set_loop ret ;########## Special Command Routine ########## dsp_pressure: cp (dsp_channel),0fh ret nz ld a,(dsp_data_1st) cp a,030 jp z,_wave_setting cp a,031 jp z,_sample_start cp a,032 jp z,_start_off_set cp a,033 jp z,_end_off_set ret _end_off_set: ld a,(dsp_data_2nd) ld (end_offset),a ret _start_off_set: ld a,(dsp_data_2nd) ld (top_offset),a ret _sample_start: cp (dsp_data_2nd),0 jr z,_sample_stop ld (sample_flg),1 ret _sample_stop: ld (sample_flg),0 ret _wave_setting: cp (dsp_data_2nd),0 jr nz,_wave_clear call @_dsp-01_all_off ; Tone Generator All Note Off %data_set_16(bender,40h) ; MIDI Bender %data_set_16(dsp_vib_dat,8) ; Vibrate Default Offset call init_wave_set ; Wave RAM Setting ld (tg_on_off),0 ; ret _wave_clear: ld (tg_on_off),0ffh call @_dsp-01_all_off ; All Note Off ld hl,wave_buffer ld bc,256 _w_clr_lp: ld (hl),0 inc hl djnz bc,_w_clr_lp ld (wave_block),0 ; Wave Bank NO. _wave_clr_loop: call @_wave_put inc (wave_block) cp (wave_block),80h jr nz,_wave_clr_loop ret ;<< NO.[ 19 ] 16 Byte Data Setting : [work+0] --> [work+1/2] >> @_setting_16: ld a,(work) ld hl,(work+1) ld b,16 _set_16: ld (hl),a inc hl djnz _set_16 ret ;<< NO.[ 23 ] MIDI Transmit FIFO Check >> @_tx_midi_check: ld hl,(tx_end) cp hl,(tx_top) ; FIFO Event ? ret z bit int_bit_midi,(int_flg) ; TX OK ? ret z ld de,tx_fifo add hl,de ld a,(hl) ld (port_scbuf),a res int_bit_midi,(int_flg) incw (tx_end) bit 4,(tx_end+1) ret z ldw (tx_end),0 ret ;<< NO.[ 25 ] Waiting Timer >> @_wait_timer: ld bc,07fffh _wait_loop: nop djnz bc,_wait_loop ret ;<< NO.[ 28 ] Wave Buffer Data Put to DSP-01 : Block = [wave_block] >> @_wave_put: %dsp-01_system(0f5h,0) ; Memory Bus Close ld a,080h ; RAM ld (dsp-01+0f7h),a ; Wave Bank ld a,(wave_block) ld (dsp-01+0f6h),a ; Wave Block ld bc,256 ld hl,wave_buffer ld de,dsp-01+100h ; Wave Data Port ldir nop %dsp-01_system(0f5h,1) ; Memory Bus Open ret ;<< NO.[ 29 ] 24*24-->48 Multiply : [calc+0/2]*[calc+3/5] --> [calc+6/11] >> @_24_24_to_48: ld l,(calc+0) mul hl,(calc+3) ld (calc+6),l ; LSB 8bit ld c,h ld b,0 ld l,(calc+1) mul hl,(calc+3) ld e,l ld d,0 ld (calc+8),h ld l,(calc+0) mul hl,(calc+4) ld (calc+9),h ld h,0 add hl,bc add hl,de ld (calc+7),l ; 2nd LSB 8bit ld c,(calc+8) ld b,0 ld e,(calc+9) ld d,0 ld l,h ld h,0 add hl,bc add hl,de ld ix,hl ld l,(calc+2) mul hl,(calc+3) ld c,l ld b,0 ld (calc+9),h ld l,(calc+1) mul hl,(calc+4) ld e,l ld d,0 ld (calc+10),h ld l,(calc+0) mul hl,(calc+5) ld (calc+11),h ld h,0 add hl,ix add hl,bc add hl,de ld (calc+8),l ; 3rd LSB 8bit ld c,(calc+9) ld b,0 ld ix,bc ld c,(calc+10) ld b,0 ld e,(calc+11) ld d,0 ld l,h ld h,0 add hl,ix add hl,bc add hl,de ld bc,hl ld l,(calc+2) mul hl,(calc+4) ld e,l ld d,0 ld (calc+10),h ld l,(calc+1) mul hl,(calc+5) ld (calc+11),h ld h,0 add hl,bc add hl,de ld (calc+9),l ; 3rd MSB 8bit ld c,(calc+10) ld b,0 ld e,(calc+11) ld d,0 ld l,h ld h,0 add hl,bc add hl,de ld bc,hl ld l,(calc+2) mul hl,(calc+5) add hl,bc ld (calc+10),l ; 2nd MSB 8bit ld (calc+11),h ; MSB 8bit ret ;<< NO.[ 30 ] 48Bit --> 24Bit Cutting : [calc+6/11] --> [calc+0/2] >> @_48_cut_to_24: sla (calc+8) ld a,0 adc a,(calc+9) ld (calc+0),a ld a,0 adc a,(calc+10) ld (calc+1),a ld a,0 adc a,(calc+11) ld (calc+2),a ret ;<< NO.[ 31 ] 48Bit-->24Bit Cut + 1Bit Shift : [calc+6/11] --> [calc+0/2] >> @_48_shift_24: rl (calc+8) ld a,(calc+9) rla ld (calc+0),a ld a,(calc+10) rla ld (calc+1),a ld a,(calc+11) rla ld (calc+2),a ret ;========== Tone ON Event Routine ======== @_dsp_on_send: ld b,0fah ; DSP-01 = [FA**] ld c,e or c,0c0h ld (bc),0f0h ld c,e or c,0d0h ld (bc),00fh ld c,e or c,090h ld (bc),0 ; OFF ld a,(dsp_channel) cp a,(rhythm_channel) jp z,@_dsp_on_rhythm ; Rhythm Routine ld (ch_buff),a ld hl,assign_note ld a,e ld b,(dsp_data_1st) ld (hl+a),b call @_dsp_on_pitch ; ### Common Subroutine ### ld hl,(stack_hl) inc hl inc hl ; 2 ld a,(hl) ld c,e or c,040h ld (bc),a inc hl ; 3 ld a,(hl) ld c,e or c,050h ld (bc),a inc hl ; 4 ld d,(hl) push hl ld hl,bank_buff ld a,e ld (hl+a),d ld c,e or c,060h ld (bc),d ld hl,(stack_hl) ld a,(hl) and a,11000000b ; Panpot Mode jr nz,_on_panpot_on ld hl,dsp_panpot ld a,e ld (hl+a),0 ld hl,stop_panpot ld a,(dsp_channel) ld d,(hl+a) jr _on_pan_join _on_panpot_on: bit 0,e jr z,_on_pan_mix cp a,11000000b jr nz,_on_pan_slow set 4,a jr _on_pan_mix _on_pan_slow: set 5,a _on_pan_mix: ld d,a ld hl,dsp_panpot ld a,e ld (hl+a),d ld d,0 _on_pan_join: ld c,e or c,070h ld (bc),d pop hl inc hl ; 5 ld c,(hl) push hl ld hl,volume ld a,(dsp_channel) ld l,(hl+a) mul hl,c ld a,h ld l,(dsp_data_2nd) mul hl,a ld a,h ld hl,_speed_table ld d,(hl+a) ld c,e or c,0a0h ld (bc),d pop hl inc hl ; 6 ld a,(hl) ld c,e or c,0b0h ld (bc),a inc hl ; 7 ld c,(hl) cp c,0 jr z,_on_decay_0 push hl ld hl,volume ld a,(dsp_channel) ld l,(hl+a) mul hl,c ld a,h ld l,(dsp_data_2nd) mul hl,a ld a,h ld hl,_speed_table ld a,(hl+a) pop hl jr _on_decay_set _on_decay_0: ld a,0f0h _on_decay_set: ld c,e or c,0c0h ld (bc),a inc hl ; 8 ld a,(hl) ld c,e or c,0d0h ld (bc),a ld c,e or c,090h ld (bc),3 ; ON ! ret ;========== Rhythm ON Event Routine ======== @_dsp_on_rhythm: ld a,(dsp_data_1st) ld hl,patch_rhythm ld l,(hl+a) mul hl,9 ; Parameter (Rhythm) add hl,rhythm_bank push hl ld l,(hl) sub l,12 ; PCM = 31.25KHz mul hl,32 or l,10h or h,10010000b ld b,0fah ; DSP-01 = [FA**] ld a,(hl) ld c,e ld (bc),a and h,00001111b or h,10100000b ld a,(hl) or c,010h ld (bc),a or h,00010000b ld a,(hl) ld c,e or c,020h ld (bc),a pop hl inc hl ; 1 ld a,(hl) ld c,e or c,030h ld (bc),a inc hl ; 2 ld a,(hl) ld c,e or c,040h ld (bc),a inc hl ; 3 ld a,(hl) ld c,e or c,050h ld (bc),a inc hl ; 4 ld a,(hl) ld c,e or c,060h ld (bc),a inc hl ; 5 ld a,(hl) ld c,e or c,070h ld (bc),a inc hl ; 6 ld c,(hl) push hl ld hl,volume ld a,(dsp_channel) ld l,(hl+a) mul hl,c ld a,h ld l,(dsp_data_2nd) mul hl,a ld a,h ld hl,_speed_table ld a,(hl+a) ld c,e or c,0a0h ld (bc),a pop hl inc hl ; 7 ld a,(hl) ld c,e or c,0b0h ld (bc),a ld c,e or c,0c0h ld (bc),0f0h inc hl ; 8 ld a,(hl) ld c,e or c,0d0h ld (bc),a ld c,e or c,090h ld (bc),3 ; ON ! ret _speed_table: db 0f0h,08fh,07fh,06ch,06fh,05ch,05fh,04ch db 04fh,038h,039h,03ah,03bh,03ch,03dh,03eh db 03fh,028h,029h,02ah,02bh,02ch,02dh,02eh db 02fh,02fh,018h,018h,019h,019h,01ah,01ah db 01bh,01bh,01ch,01ch,01dh,01dh,01eh,01eh db 01fh,01fh,008h,008h,009h,009h,009h,00ah db 00ah,00ah,00bh,00bh,00bh,00ch,00ch,00ch db 00eh,00eh,00eh,00eh,00fh,00fh,00fh,00fh ;========== OFF Event Routine ======== @_dsp_off_rhythm: ld b,0fah ; DSP-01 = [FA**] ld c,e or c,090h ld (bc),0 ; OFF ret @_dsp_off_send: ld a,(dsp_channel) cp a,(rhythm_channel) jr z,@_dsp_off_rhythm ; Rhythm Routine cp (multi_flag),0 jr z,_dspoff_cont cp a,(multi_channel) jr nz,_dspoff_cont ld l,(dsp_data_1st) sla l and l,11111000b ld a,(dsp_data_2nd) srla srla srla srla or a,l ld l,a mul hl,10 ; Parameter Counts add hl,multi_bank+9 ; Release jr _dspoff_mix _dspoff_cont: ld hl,assign_pc ld a,(hl+a) ld hl,patch_matrix ld l,(hl+a) mul hl,10 ; Parameter Counts add hl,tone_data_bank+9 ; Release _dspoff_mix: ld b,0fah ; DSP-01 = [FA**] ld c,e or c,0c0h ld (bc),0f0h ld a,(hl) ld c,e or c,0d0h ld (bc),a ld c,e or c,090h ld (bc),0 ; OFF ! ret ;========== Common Pitch Write Routine ======== @_dsp_on_pitch: cp (multi_flag),0 jr z,_dsp_on_cont ld a,(dsp_channel) cp a,(multi_channel) jr nz,_dsp_on_cont ld l,(dsp_data_1st) sla l and l,11111000b ld a,(dsp_data_2nd) srla srla srla srla or a,l ld l,a mul hl,10 ; Parameter Counts add hl,multi_bank ; Top jr _dsp_on_mix _dsp_on_cont: ld hl,assign_pc ld a,(ch_buff) ld a,(hl+a) ld hl,patch_matrix ld l,(hl+a) mul hl,10 ; Parameter Counts add hl,tone_data_bank ; Top _dsp_on_mix: ld (stack_hl),hl bit 0,(hl) jr z,_on_shift_next sub b,12 _on_shift_next: bit 1,(hl) jr z,_on_shift_end sub b,24 _on_shift_end: and b,7fh ld a,(ch_buff) ld hl,bender ld c,(hl+a) ld hl,dsp_vib_dat ld a,(hl+a) add a,c ld c,a sub b,2 ld l,32 mul hl,b ld b,0 add hl,bc ld c,08h add hl,bc or h,10010000b ld b,0fah ; DSP-01 = [FA**] ld a,(hl) ld c,e ld (bc),a and h,00001111b or h,10100000b ld a,(hl) or c,010h ld (bc),a or h,00010000b ld a,(hl) ld c,e or c,020h ld (bc),a ld hl,(stack_hl) inc hl ; 1 ld a,(hl) ld c,e or c,030h ld (bc),a ret ;========== < MIDI Receive > Check ======== @_dsp-01_rx_chk: ld hl,(dsp_tx_end) cp hl,(tx_top) ; FIFO Event ? ret z ld de,tx_fifo add hl,de ld b,(hl) incw (dsp_tx_end) bit 4,(dsp_tx_end+1) jr z,_tx_dsp_nx ldw (dsp_tx_end),0 _tx_dsp_nx: bit 7,b jr z,dsp_running cp b,0fch jp z,@_dsp-01_all_off ; All Note Off cp b,0fah jp z,_dsp_start_res ; Bender Reset etc. cp b,0f8h ret nc ; Realtime = Pass ! cp b,0f0h jr c,dsp_status ld (dsp_rsb),0 ; [F0]-[F7] = Pass ! ret _dsp_start_res: %data_set_16(volume,255) ; MIDI Volume %data_set_16(bender,40h) ; MIDI Bender %data_set_16(dsp_vib_dat,8) ; Vibrate Default Offset ret dsp_status: ld a,b and b,11110000b ld (dsp_rsb),b and a,00001111b ld (dsp_channel),a ld (dsp_dcb),0 ret dsp_running: ld a,(dsp_rsb) cp a,0 ret z cp (dsp_dcb),0 jr nz,_dsp_run_2nd ld (dsp_data_1st),b cp a,0c0h jp z,dsp_prog_change cp a,0d0h ret z ld (dsp_dcb),1 ret _dsp_run_2nd: ld (dsp_data_2nd),b ld (dsp_dcb),0 ld a,(dsp_rsb) cp a,0a0h jp z,dsp_pressure cp (tg_on_off),0 ret nz cp a,080h jp z,dsp_note_off cp a,090h jp z,dsp_note_on cp a,0b0h jp z,dsp_cont_change cp a,0e0h jp z,dsp_pitch_bend ret dsp_note_off: ld e,0 ; Assign Channel _assign_off_1: ld hl,assign_ctr ld a,e cp (hl+a),10h jr z,_assign_off_2 ld hl,assign_ch ld a,(hl+a) cp a,(dsp_channel) jr nz,_assign_off_2 ld hl,assign_note ld a,e ld a,(hl+a) cp a,(dsp_data_1st) jr z,_assign_off_3 _assign_off_2: inc e cp e,10h jr nz,_assign_off_1 ret _assign_off_3: ld hl,assign_ctr ld a,e ld b,(hl+a) ld d,0 _assign_off_4: ld a,d cp (hl+a),10h jr z,_assign_off_6 ld a,(hl+a) cp a,b jr z,_assign_off_5 jr c,_assign_off_6 ld a,d dec (hl+a) jr _assign_off_6 _assign_off_5: ld a,e ld (hl+a),10h _assign_off_6: inc d cp d,10h jr nz,_assign_off_4 ld hl,pedals ld a,(dsp_channel) bit pedal_damper,(hl+a) ret nz jp @_dsp_off_send ; DSP-01 Trigger dsp_note_on: cp (dsp_data_2nd),0 jp z,dsp_note_off ld hl,pedals ld a,(dsp_channel) bit pedal_soft,(hl+a) jr z,_not_soft_on srl (dsp_data_2nd) _not_soft_on: ld e,0 ; Assign Channel _assign_on_1: ld hl,assign_ctr ld a,e cp (hl+a),10h jr z,_assign_on_2 ld hl,assign_ch ld a,(hl+a) cp a,(dsp_channel) jr nz,_assign_on_2 ld hl,assign_note ld a,e ld a,(hl+a) cp a,(dsp_data_1st) jr z,_assign_on_3 _assign_on_2: inc e cp e,10h jr z,_assign_on_next jr _assign_on_1 _assign_on_3: call @_dsp_off_rhythm ; DSP-01 Trigger ld hl,assign_ctr ld a,e ld b,(hl+a) ld d,0 _assign_on_4: ld a,d ld a,(hl+a) cp a,b jr z,_assign_on_5 jr nc,_assign_on_6 ld a,d inc (hl+a) jr _assign_on_6 _assign_on_5: ld a,e ld (hl+a),0 _assign_on_6: inc d cp d,10h jr nz,_assign_on_4 jp @_dsp_on_send ; DSP-01 Trigger _assign_on_next: ld e,(on_pointer) ; Assign Channel ld b,e inc (on_pointer) and (on_pointer),00001111b ld hl,assign_ctr _assign_on_7: ld a,e cp (hl+a),10h jr z,_assign_on_8 inc e and e,00001111b ld a,e cp a,b jr nz,_assign_on_7 jr _assign_on_kill _assign_on_8: ld a,0 _assign_on_9: cp (hl+a),10h jr z,_assign_on_10 inc (hl+a) _assign_on_10: inc a cp a,10h jr nz,_assign_on_9 _assign_set_ok: ld a,e ld (hl+a),0 ld hl,assign_ch ld b,(dsp_channel) ld (hl+a),b ld hl,assign_note ld b,(dsp_data_1st) ld (hl+a),b jp @_dsp_on_send ; DSP-01 Trigger _assign_on_kill: ld e,0 ; Assign Channel ld hl,assign_ctr _assign_on_11: ld a,e cp (hl+a),0fh jr z,_assign_on_12 inc e cp e,10h jr nz,_assign_on_11 ret _assign_on_12: call @_dsp_off_rhythm ; DSP-01 Trigger ld hl,assign_ctr ld a,0 _assign_on_13: inc (hl+a) inc a cp a,10h jr nz,_assign_on_13 jr _assign_set_ok dsp_cont_change: cp (dsp_data_1st),7 jr z,_dsp_cont_vol cp (dsp_data_1st),64 jr z,_dsp_cont_damp cp (dsp_data_1st),10 jr z,_dsp_cont_pan cp (dsp_data_1st),67 jr z,_dsp_cont_soft ret _dsp_cont_soft: ld hl,pedals ld a,(dsp_channel) bit 6,(dsp_data_2nd) jr z,_soft_off set pedal_soft,(hl+a) ret _soft_off: res pedal_soft,(hl+a) ret _dsp_cont_vol: ld hl,volume ld a,(dsp_channel) ld b,(dsp_data_2nd) scf rl b ld (hl+a),b ret _dsp_cont_pan: ld a,(dsp_data_2nd) slaa bit 7,a jr nz,_dsp_c_pan_mix xor a,01111110b _dsp_c_pan_mix: ld b,a ld hl,stop_panpot ld a,(dsp_channel) ld (hl+a),b ret _dsp_cont_damp: ld hl,pedals ld a,(dsp_channel) bit 6,(dsp_data_2nd) jr z,_damper_off set pedal_damper,(hl+a) ret _damper_off: res pedal_damper,(hl+a) ld e,0 ; Assign Channel _damper_off_1: ld hl,assign_ctr ld a,e cp (hl+a),10h jr nz,_damper_off_2 ld hl,assign_ch ld a,(hl+a) cp a,(dsp_channel) jr nz,_damper_off_2 ld hl,assign_note ld a,e ld a,(hl+a) ld (dsp_data_1st),a ld (dsp_data_2nd),0 call @_dsp_off_send ; DSP-01 Trigger _damper_off_2: inc e cp e,10h jr nz,_damper_off_1 ret dsp_prog_change: cp (multi_flag),0 jr z,_prog_cont ld a,(dsp_channel) cp a,(multi_channel) jr nz,_prog_cont ld l,(dsp_data_1st) sla l and l,11111000b ld a,(dsp_data_2nd) srla srla srla srla or a,l ld l,a mul hl,10 ; Parameter Counts add hl,multi_bank ; Top jr _prog_mix _prog_cont: ld hl,assign_pc ld a,(dsp_channel) ld (hl+a),b ld a,b ld hl,patch_matrix ld l,(hl+a) mul hl,10 ; Parameter Counts add hl,tone_data_bank _prog_mix: ld a,(hl) ld b,a and a,00001100b srla srla add a,2 ld c,a ld a,b and a,00110000b slla slla or a,c ld c,a ld hl,dsp_vib_spd ld a,(dsp_channel) ld (hl+a),c ret dsp_pitch_bend: ld hl,bender ld a,(dsp_channel) ld (hl+a),b ld e,0 _bend_chk: ld hl,assign_ch ld a,e ld a,(hl+a) cp a,(dsp_channel) jr nz,_bend_next cp a,(rhythm_channel) jr z,_bend_next cp a,(multi_channel) jr nz,_bend_go cp (multi_flag),0 jr nz,_bend_next _bend_go: ld (ch_buff),a ld hl,assign_note ld a,e ld b,(hl+a) call @_dsp_on_pitch ; ### Common Subroutine ### _bend_next: inc e cp e,10h jr nz,_bend_chk ret ;========== All Note Off ======== @_dsp-01_all_off: %dsp-01_16ch(0c0h,0f0h) ; Decay Level %dsp-01_16ch(0d0h,007h) ; Decay Speed %dsp-01_16ch(090h,0) ; Control Word ld a,0 ld hl,assign_ctr _all_off_loop: ld (hl+a),10h inc a cp a,10h jr nz,_all_off_loop ret ;========== Panpot/Tremolo Routine ======== @_dsp-01_panpot: cp (tg_on_off),0 ret nz inc (panpot_timer) cp (panpot_timer),120 ; Speed Parameter ret nz ld (panpot_timer),0 ld (loop_counter),0 _dsp_pan_loop: ld e,(loop_counter) ld hl,assign_ch ld a,e ld a,(hl+a) cp a,(rhythm_channel) jr z,_dsp_pan_next cp (multi_flag),0 jr nz,_dsp_pan_next ld hl,dsp_panpot ld a,e ld d,(hl+a) ld a,d and d,11000000b cp d,0 jr z,_dsp_pan_next ld c,d inc a and a,00111111b ld b,a or a,d ld d,a ld a,e ld (hl+a),d cp c,01000000b jr z,_dsp_pan_slow cp c,10000000b jr z,_dsp_pan_deep ld hl,_dsp_pan_table_0 jr _dsp_pan_mix _dsp_pan_slow: ld hl,_dsp_pan_table_1 jr _dsp_pan_mix _dsp_pan_deep: ld hl,_dsp_pan_table_2 _dsp_pan_mix: ld a,b ld d,(hl+a) ld bc,bank_buff ld a,e or a,c ld c,a ld hl,dsp-01+060h ld a,e or a,l ld l,a ld a,(bc) ld (hl),a ld hl,dsp-01+070h ld a,e or a,l ld l,a ld (hl),d _dsp_pan_next: inc (loop_counter) cp (loop_counter),10h jr nz,_dsp_pan_loop ret _dsp_pan_table_0: db 000h,008h,010h,018h,020h,028h,030h,038h db 040h,038h,030h,028h,020h,018h,010h,008h db 000h,088h,090h,098h,0a0h,0a8h,0b0h,0b8h db 0c0h,0b8h,0b0h,0a8h,0a0h,098h,090h,088h db 000h,008h,010h,018h,020h,028h,030h,038h db 040h,038h,030h,028h,020h,018h,010h,008h db 000h,088h,090h,098h,0a0h,0a8h,0b0h,0b8h db 0c0h,0b8h,0b0h,0a8h,0a0h,098h,090h,088h _dsp_pan_table_1: db 000h,004h,008h,00ch,010h,014h,018h,01ch db 020h,024h,028h,02ch,030h,034h,038h,03ch db 040h,03ch,038h,034h,030h,02ch,028h,024h db 020h,01ch,018h,014h,010h,00ch,008h,004h db 000h,084h,088h,08ch,090h,094h,098h,09ch db 0a0h,0a4h,0a8h,0ach,0b0h,0b4h,0b8h,0bch db 0c0h,0bch,0b8h,0b4h,0b0h,0ach,0a8h,0a4h db 0a0h,09ch,098h,094h,090h,08ch,088h,084h _dsp_pan_table_2: db 000h,008h,010h,018h,020h,028h,030h,038h db 040h,048h,050h,058h,060h,068h,070h,078h db 07fh,078h,070h,068h,060h,058h,050h,048h db 040h,038h,030h,028h,020h,018h,010h,008h db 000h,088h,090h,098h,0a0h,0a8h,0b0h,0b8h db 0c0h,0c8h,0d0h,0d8h,0e0h,0e8h,0f0h,0f8h db 0ffh,0f8h,0f0h,0e8h,0e0h,0d8h,0d0h,0c8h db 0c0h,0b8h,0b0h,0a8h,0a0h,098h,090h,088h ;========== Vibrate Routine ======== @_dsp-01_vibrate: cp (tg_on_off),0 ret nz inc (vib_timer) cp (vib_timer),3 ; Speed Parameter ret nz ld (vib_timer),0 ld (loop_counter),0 _dsp_vib_loop: ld e,(loop_counter) ; [E] = MIDI Channel ld a,e ld hl,dsp_vib_flg ld (hl+a),0 cp a,(rhythm_channel) jr z,_dsp_vib_next cp (multi_flag),0 jr nz,_dsp_vib_next ld hl,dsp_vib_spd ld c,(hl+a) ld b,c and b,00111111b ld hl,dsp_vib_ctr inc (hl+a) ld a,(hl+a) cp a,b jr c,_dsp_vib_next ld a,e ld (hl+a),0 ld hl,dsp_vib_add inc (hl+a) ld a,(hl+a) and a,00011111b ld hl,_dsp_vib_table and c,11000000b srl c ld b,0 add hl,bc ld c,(hl+a) ld a,e ld hl,dsp_vib_dat ld (hl+a),c ld hl,dsp_vib_flg inc (hl+a) _dsp_vib_next: inc (loop_counter) cp (loop_counter),10h jr nz,_dsp_vib_loop ld (loop_counter),0 _vib_chk: ld e,(loop_counter) ; [E] = DSP-01 Channel ld hl,assign_ch ld a,e ld a,(hl+a) ld hl,dsp_vib_flg cp (hl+a),0 jr z,_vib_next ld (ch_buff),a ld hl,assign_note ld a,e ld b,(hl+a) call @_dsp_on_pitch ; ### Common Subroutine ### _vib_next: inc (loop_counter) cp (loop_counter),10h jr nz,_vib_chk ret _dsp_vib_table: db 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 db 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ; Depth = [00] db 8,8,8,9,9,9,9,9,10,9,9,9,9,9,8,8 db 8,8,8,7,7,7,7,7,6,7,7,7,7,7,8,8 ; Depth = [01] db 8,9,10,10,11,11,11,12,12,12,11,11,11,10,10,9 db 8,7,6,6,5,5,5,4,4,4,5,5,5,6,6,7 ; Depth = [10] db 8,9,10,11,12,13,13,14,14,14,13,13,12,11,10,9 db 8,7,6,5,4,3,3,2,2,2,3,3,4,5,6,7 ; Depth = [11] ;========== Tuning/Temperaments Setting Routine ========== pitch_setting: call pitch_shift ; [G9] 408Hz-471Hz Standard Pitch call note_devide ; Other 11-Notes Devide call temp_compute ; Temperaments Computing call bend_compute ; Bend [-16/+15] Computing call all_range ; All Range Data Only Copy call shift_set ; Each Range Data Shift ld ix,0 ld iy,0 ret ;========== Each Range Shift Setting ======================= shift_set: ldw (work+6),0b000h %shift(0be80h,0ae80h,09e80h) %shift(0bd00h,0ad00h,09d00h) %shift(0bb80h,0ab80h,09b80h) %shift(0ba00h,0aa00h,09a00h) %shift(0b880h,0a880h,09880h) %shift(0b700h,0a700h,09700h) %shift(0b580h,0a580h,09580h) %shift(0b400h,0a400h,09400h) %shift(0b280h,0a280h,09280h) %shift(0b100h,0a100h,09100h) ret _shift_sub: ld hl,(work+0) ld de,(work+2) ld bc,(work+4) _shift_loop: dec hl dec de dec bc srl (hl) rr (de) rr (bc) cp hl,(work+6) jr nz,_shift_loop ret ;========== All Range Only Copy : Not Shift ! ======================= all_range: %range(0bfffh,0be7fh) %range(0afffh,0ae7fh) %range(09fffh,09e7fh) ret ;========== Bend Data Computing ======================= bend_compute: ld (work+0),0 _bend_set_loop: ld (work+1),090h ld (work+2),0a0h ld (work+3),0b0h call _bend_sub ; Each Bend Set inc (work+0) cp (work+0),12 jr nz,_bend_set_loop ret _bend_sub: ld a,(work+0) ld hl,_low_offset_2 ld c,(hl+a) ld hl,_high_offset_1 ld b,(hl+a) ld a,(work+1) or a,b ld b,a ld a,(bc) ld (work+5),a ld a,(work+0) ld hl,_low_offset_2 ld c,(hl+a) ld hl,_high_offset_1 ld b,(hl+a) ld a,(work+2) or a,b ld b,a ld a,(bc) ld (work+6),a ld a,(work+0) ld hl,_low_offset_2 ld c,(hl+a) ld hl,_high_offset_1 ld b,(hl+a) ld a,(work+3) or a,b ld b,a ld a,(bc) ld (work+7),a ; Normal Pitch Data Get ! ld (work+4),0 ; Bend Depth : 0-31 _bend_sub_loop: call _bend_sub_sub inc (work+4) cp (work+4),32 jr nz,_bend_sub_loop ret _bend_sub_sub: %move_3byte(calc+0,work+5) ld l,(work+4) ; Bend Depth mul hl,3 ld bc,_bend_table add hl,bc ld a,(hl) ld (calc+5),a inc hl ld a,(hl) ld (calc+4),a inc hl ld a,(hl) ld (calc+3),a ; Bend Multi. Data Set ! call @_24_24_to_48 ; BIOS call @_48_shift_24 ; BIOS ld a,(work+0) ld hl,_low_offset_3 ld c,(hl+a) ld hl,_high_offset_1 ld b,(hl+a) ld a,(work+1) or a,b ld b,a ld l,(work+4) ; Bend Depth ld h,0 add hl,bc ld a,(calc+0) ld (hl),a ld a,(work+0) ld hl,_low_offset_3 ld c,(hl+a) ld hl,_high_offset_1 ld b,(hl+a) ld a,(work+2) or a,b ld b,a ld l,(work+4) ; Bend Depth ld h,0 add hl,bc ld a,(calc+1) ld (hl),a ld a,(work+0) ld hl,_low_offset_3 ld c,(hl+a) ld hl,_high_offset_1 ld b,(hl+a) ld a,(work+3) or a,b ld b,a ld l,(work+4) ; Bend Depth ld h,0 add hl,bc ld a,(calc+2) ld (hl),a ; Pitch Data Set ! ret ;========== Temperaments Computing ======================= temp_compute: ld (work+0),0 ; Check Note [C-B] ld (work+4),0 ; Temp. Offset Bias ld (work+5),0 ; Temp Select NO. call _temp_select _temp_set_loop: ld (work+1),090h ld (work+2),0a0h ld (work+3),0b0h call _temp_sub ; Each Temp. Set inc (work+0) cp (work+0),12 jr nz,_temp_set_loop ret _temp_select: ld hl,_temp_sel_tb ld a,(work+5) ld c,(hl+a) bit 7,c jr nz,_temp_sel_cont ld (work+5),c ret _temp_sel_cont: ld b,c and b,11110000b ; 80=Pytha/C0=Mean/E0=Q*/F0=T* and c,00001111b ; Shift Data cp b,80h jr z,_temp_sel_80 cp b,0c0h jr z,_temp_sel_c0 cp b,0e0h jr z,_temp_sel_e0 ld (work+5),22 ; Pure [T-*] Temp. jr _temp_sel_next _temp_sel_80: ld (work+5),1 ; Pythagorean Temp. jr _temp_sel_next _temp_sel_c0: ld (work+5),2 ; Meantone Temp. jr _temp_sel_next _temp_sel_e0: ld (work+5),21 ; Pure [Q-*] Temp. _temp_sel_next: ld a,(work+4) ; Temp Bias add a,c cp a,12 jr c,_temp_sel_exit sub a,12 _temp_sel_exit: ld (work+4),a ret _temp_sub: ld a,(work+0) ld hl,_low_offset_2 ld c,(hl+a) ld hl,_high_offset_1 ld b,(hl+a) ld a,(work+1) or a,b ld b,a ld a,(bc) ld (calc+0),a ld a,(work+0) ld hl,_low_offset_2 ld c,(hl+a) ld hl,_high_offset_1 ld b,(hl+a) ld a,(work+2) or a,b ld b,a ld a,(bc) ld (calc+1),a ld a,(work+0) ld hl,_low_offset_2 ld c,(hl+a) ld hl,_high_offset_1 ld b,(hl+a) ld a,(work+3) or a,b ld b,a ld a,(bc) ld (calc+2),a ; Current Pitch Data Get ! ld hl,_temp_offset ld a,(work+0) ; My Note ld c,(hl+a) ld b,0 add hl,bc ld a,(work+4) ; Temp Offset Bias ld c,(hl+a) ld l,3 mul hl,c ld bc,hl ; Temp Data Note Offset ld l,(work+5) ; Temp Select NO. mul hl,36 ld de,hl ; Temp Select Offset ld hl,_temp_table add hl,bc add hl,de ld a,(hl) ld (calc+5),a inc hl ld a,(hl) ld (calc+4),a inc hl ld a,(hl) ld (calc+3),a ; Temp Multi. Data Set ! call @_24_24_to_48 ; BIOS call @_48_cut_to_24 ; BIOS ld a,(work+0) ld hl,_low_offset_2 ld c,(hl+a) ld hl,_high_offset_1 ld b,(hl+a) ld a,(work+1) or a,b ld b,a ld a,(calc+0) ld (bc),a ld a,(work+0) ld hl,_low_offset_2 ld c,(hl+a) ld hl,_high_offset_1 ld b,(hl+a) ld a,(work+2) or a,b ld b,a ld a,(calc+1) ld (bc),a ld a,(work+0) ld hl,_low_offset_2 ld c,(hl+a) ld hl,_high_offset_1 ld b,(hl+a) ld a,(work+3) or a,b ld b,a ld a,(calc+2) ld (bc),a ; Pitch Data Set ! ret ;========== 11 Notes Data Setting ======================== note_devide: ld (work+0),1 _note_dev_loop: ld (work+1),090h ld (work+2),0a0h ld (work+3),0b0h call _note_sub ; Each Notes Set inc (work+0) cp (work+0),12 jr nz,_note_dev_loop ret _note_sub: ld hl,_low_offset_1 ld c,(hl) ld hl,_high_offset_1 ld b,(hl) ld a,(work+1) or a,b ld b,a ld a,(bc) ld (calc+0),a ld hl,_low_offset_1 ld c,(hl) ld hl,_high_offset_1 ld b,(hl) ld a,(work+2) or a,b ld b,a ld a,(bc) ld (calc+1),a ld hl,_low_offset_1 ld c,(hl) ld hl,_high_offset_1 ld b,(hl) ld a,(work+3) or a,b ld b,a ld a,(bc) ld (calc+2),a ; Standard Pitch Data Get ! %move_3byte(calc+3,_dev_data) ld (work+4),0 _note_sub_loop: call @_24_24_to_48 ; BIOS call @_48_cut_to_24 ; BIOS inc (work+4) ld a,(work+4) cp a,(work+0) jr nz,_note_sub_loop ld a,(work+0) ld hl,_low_offset_1 ld c,(hl+a) ld hl,_high_offset_1 ld b,(hl+a) ld a,(work+1) or a,b ld b,a ld a,(calc+0) ld (bc),a ld a,(work+0) ld hl,_low_offset_1 ld c,(hl+a) ld hl,_high_offset_1 ld b,(hl+a) ld a,(work+2) or a,b ld b,a ld a,(calc+1) ld (bc),a ld a,(work+0) ld hl,_low_offset_1 ld c,(hl+a) ld hl,_high_offset_1 ld b,(hl+a) ld a,(work+3) or a,b ld b,a ld a,(calc+2) ld (bc),a ; Pitch Data Set ! ret ;========== Pitch Shift Data Setting [H,M,L] : 408Hz-471Hz ======== pitch_shift: ld a,20h ld (work+0),a ld (work+1),090h ld (work+2),0a0h ld (work+3),0b0h call _pitch_sub ; [G 9] Set ret _pitch_sub: ld a,(work+0) and a,00111111b ld l,3 mul hl,a ld bc,_hz_set_table add hl,bc ld a,(hl) ld (calc+2),a inc hl ld a,(hl) ld (calc+1),a inc hl ld a,(hl) ld (calc+0),a %move_3byte(calc+3,_g9_data) call @_24_24_to_48 ; BIOS call @_48_cut_to_24 ; BIOS ld hl,_low_offset_1 ld c,(hl) ld hl,_high_offset_1 ld b,(hl) ld a,(work+1) or a,b ld b,a ld a,(calc+0) ld (bc),a ld hl,_low_offset_1 ld c,(hl) ld hl,_high_offset_1 ld b,(hl) ld a,(work+2) or a,b ld b,a ld a,(calc+1) ld (bc),a ld hl,_low_offset_1 ld c,(hl) ld hl,_high_offset_1 ld b,(hl) ld a,(work+3) or a,b ld b,a ld a,(calc+2) ld (bc),a ; [G9] Pitch Data Set ! ret ;========== Data Area ==================================== _low_offset_3: db 00h,20h,40h,60h,80h,0a0h,0c0h,0e0h,80h,0a0h,0c0h,0e0h _low_offset_2: db 10h,30h,50h,70h,90h,0b0h,0d0h,0f0h,90h,0b0h,0d0h,0f0h _high_offset_1: db 0fh,0fh,0fh,0fh,0fh,0fh,0fh,0fh,0eh,0eh,0eh,0eh _low_offset_1: db 0f0h,0d0h,0b0h,90h,70h,50h,30h,10h,0f0h,0d0h,0b0h,90h _temp_sel_tb: db 0,0,80h,85h,8ah,83h,87h,82h,0c0h,0c5h,0cah,0c3h,0c7h,0c2h ; 0-13 db 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 ; 14-31 db 0e0h,0e7h,0e2h,0e9h,0e8h,0e3h,0eah,0e5h,0e4h,0ebh,0e6h,0e1h ; 32-43 db 0f0h,0f7h,0f2h,0f3h,0fah,0f5h,0f6h,0f1h,0f8h,0f9h,0f4h,0fbh ; 44-55 _temp_offset: db 11,10,9,8,7,6,5,4,3,2,1,0,11,10,9,8,7,6,5,4,3,2,1 _g9_data: db 0bch,084h,0cdh _dev_data: db 0bfh,0a1h,0f1h _hz_set_table: db 076h,0B0h,0DFh,076h,0FBh,058h,077h,045h,0D1h,077h,090h,04Ah ; 408-411(Hz) db 077h,0DAh,0C3h,078h,025h,03Ch,078h,06Fh,0B5h,078h,0BAh,02Eh ; 412-415 db 079h,004h,0A7h,079h,04Fh,020h,079h,099h,099h,079h,0E4h,012h ; 416-419 db 07Ah,02Eh,08Bh,07Ah,079h,004h,07Ah,0C3h,07Dh,07Bh,00Dh,0F6h ; 420-423 db 07Bh,058h,06Fh,07Bh,0A2h,0E8h,07Bh,0EDh,061h,07Ch,037h,0DAh ; 424-427 db 07Ch,082h,053h,07Ch,0CCh,0CCh,07Dh,017h,045h,07Dh,061h,0BEh ; 428-431 db 07Dh,0ACh,037h,07Dh,0F6h,0B0h,07Eh,041h,029h,07Eh,08Bh,0A2h ; 432-435 db 07Eh,0D6h,01Bh,07Fh,020h,094h,07Fh,06Bh,00Dh,07Fh,0B5h,086h ; 436-439 db 080h,000h,000h,080h,04Ah,079h,080h,094h,0F2h,080h,0DFh,06Bh ; 440-443 db 081h,029h,0E4h,081h,074h,05Dh,081h,0BEh,0D6h,082h,009h,04Fh ; 444-447 db 082h,053h,0C8h,082h,09Eh,041h,082h,0E8h,0BAh,083h,033h,033h ; 448-451 db 083h,07Dh,0ACh,083h,0C8h,025h,084h,012h,09Eh,084h,05Dh,017h ; 452-455 db 084h,0A7h,090h,084h,0F2h,009h,085h,03Ch,082h,085h,086h,0FBh ; 456-459 db 085h,0D1h,074h,086h,01Bh,0EDh,086h,066h,066h,086h,0B0h,0DFh ; 460-463 db 086h,0FBh,058h,087h,045h,0D1h,087h,090h,04Ah,087h,0DAh,0C3h ; 464-467 db 088h,025h,03Ch,088h,06Fh,0B5h,088h,0BAh,02Eh,089h,004h,0A7h ; 468-471 _bend_table: db 07Ch,05Bh,028h,07Ch,094h,0ACh,07Ch,0CEh,04Bh,07Dh,008h,005h ; -16/-13 db 07Dh,041h,0D9h,07Dh,07Bh,0C8h,07Dh,0B5h,0D2h,07Dh,0EFh,0F6h ; -12/-9 db 07Eh,02Ah,036h,07Eh,064h,090h,07Eh,09Fh,006h,07Eh,0D9h,096h ; -8/-5 db 07Fh,014h,042h,07Fh,04Fh,008h,07Fh,089h,0EAh,07Fh,0C4h,0E7h ; -4/-1 db 080h,000h,000h,080h,03Bh,033h,080h,076h,082h,080h,0B1h,0EDh ; 0/+3 db 080h,0EDh,073h,081h,029h,014h,081h,064h,0D1h,081h,0A0h,0AAh ; +4/+7 db 081h,0DCh,09Fh,082h,018h,0AFh,082h,054h,0DBh,082h,091h,022h ; +8/+11 db 082h,0CDh,086h,083h,00Ah,006h,083h,046h,0A1h,083h,083h,059h ; +12/+15 _temp_table: ;*** Temp [0] 12-Equal db 080h,000h,000h,080h,000h,000h,080h,000h,000h,080h,000h,000h db 080h,000h,000h,080h,000h,000h,080h,000h,000h,080h,000h,000h db 080h,000h,000h,080h,000h,000h,080h,000h,000h,080h,000h,000h ;<< Initial Tone Data Setting >> init_tone_set: ld hl,patch_matrix ; Tone Patch Table ld a,0 ld b,128 _patch_set_1: ld (hl+a),a inc a djnz _patch_set_1 ld hl,patch_rhythm ; Rhythm Patch Table ld a,0 ld b,128 _patch_set_2: ld (hl+a),a inc a djnz _patch_set_2 ld bc,128*10 ld hl,default_tone ld de,tone_data_bank ldir ld bc,128*10 ld hl,default_tone ld de,tone_data_bank+128*10 ldir ld bc,128*9 ld hl,default_rhm ld de,rhythm_bank ldir ld bc,128*9 ld hl,default_rhm ld de,rhythm_bank+128*9 ldir ld hl,multi_bank _patch_set_3: ld b,10 ld de,tone_data_bank _patch_set_4: ld a,(de) ld (hl),a inc de inc hl djnz _patch_set_4 cp hl,multi_bank+256*10 jr c,_patch_set_3 ld (work),0 _tone_loop_1: ld hl,init_tone_table ld a,(work) ld b,(hl+a) ld hl,assign_pc ld (hl+a),b ld (dsp_channel),a call dsp_prog_change inc (work) cp (work),16 jr nz,_tone_loop_1 ret init_tone_table: db 0,68,48,95,78,41,3,110,122,0 ; 0-8 db 70,34,7,11,62,89 ; 10-15 ;<< Initial Wave Data Setting >> init_wave_set: ld (wave_block),0 ; Wave Bank NO. ld (calc),1 _wave_loop_1: call _sine_set_sub inc (calc) inc (wave_block) cp (wave_block),10h jr nz,_wave_loop_1 ; 00-0F Loop ----- ld (calc),16 _wave_loop_2: call _sine_set_sub dec (calc) inc (wave_block) cp (wave_block),20h jr nz,_wave_loop_2 ; 10-1F Loop ----- ld (calc),1 _wave_loop_3: call _sine_set_sub inc (calc) inc (wave_block) cp (wave_block),28h jr nz,_wave_loop_3 ; 20-27 Loop ----- ld (calc),8 _wave_loop_4: call _sine_set_sub dec (calc) inc (wave_block) cp (wave_block),30h jr nz,_wave_loop_4 ; 28-2F Loop ----- ld (calc),1 _wave_loop_5: call _sine_set_sub inc (calc) inc (wave_block) cp (wave_block),34h jr nz,_wave_loop_5 ; 30-33 Loop ----- ld (calc),4 _wave_loop_6: call _sine_set_sub dec (calc) inc (wave_block) cp (wave_block),38h jr nz,_wave_loop_6 ; 34-37 Loop ----- ld (calc),1 ; 38 = 1st call _sine_set_sub inc (wave_block) ld (calc),2 ; 39 = 2nd call _sine_set_sub inc (wave_block) ld (calc),4 ; 3A = 4th call _sine_set_sub inc (wave_block) ld (calc),8 ; 3B = 8th call _sine_set_sub inc (wave_block) ld (calc),16 ; 3C = 16th call _sine_set_sub inc (wave_block) ld (calc),8 ; 3D = 8th call _sine_set_sub inc (wave_block) ld (calc),4 ; 3E = 4th call _sine_set_sub inc (wave_block) ld (calc),2 ; 3F = 2nd call _sine_set_sub inc (wave_block) ; 40 %synthe(0,64,255) %synthe(1,192,0) call @_wave_synthe inc (wave_block) ld (work),61 _wave_loop_7: call _draw_set_sub sub (work),3 inc (wave_block) cp (wave_block),54h jr nz,_wave_loop_7 ; 41-53 Loop ----- ld (work),10 _wave_loop_8: call _draw_set_sub add (work),3 inc (wave_block) cp (wave_block),60h jr nz,_wave_loop_8 ; 54-5F Loop ----- ld (calc),0 _wave_loop_9: ld l,128 mul hl,(calc) ld bc,sample_waves add hl,bc ld de,wave_buffer ld b,128 _wave_loop_10: ld a,(hl) ld (de),a inc hl inc de dec b jr nz,_wave_loop_10 ld b,128 _wave_loop_11: ld a,(hl) xor a,10000000b ld (de),a dec hl inc de dec b jr nz,_wave_loop_11 ld a,060h add a,(calc) ld (wave_block),a call @_wave_put ; BIOS inc (calc) cp (calc),12 jr nz,_wave_loop_9 ; 60-6B Loop ----- _wave_loop_12: ld l,128 mul hl,(calc) ld bc,sample_waves add hl,bc ld de,wave_buffer ld b,128 _wave_loop_13: ld a,(hl) ld (de),a dec hl inc de dec b jr nz,_wave_loop_13 ld b,128 _wave_loop_14: ld a,(hl) xor a,10000000b ld (de),a dec hl inc de dec b jr nz,_wave_loop_14 ld a,078h sub a,(calc) ld (wave_block),a call @_wave_put ; BIOS dec (calc) cp (calc),1 jr nz,_wave_loop_12 ; 6C-76 Loop ----- ld (wave_block),77h ld hl,_int_ram_clear _wave_loop_15: ld de,wave_buffer ld b,0 _wave_loop_16: ld a,(hl) ld (de),a dec hl inc de inc b jr nz,_wave_loop_16 push hl call @_wave_put ; BIOS pop hl ld bc,41 add hl,bc inc (wave_block) cp (wave_block),80h jr nz,_wave_loop_15 ; 77-7F Loop ----- ld (wave_block),0 ret _draw_set_sub: ld a,(work) ld (synthe_add+0),a ld (synthe_data+0),255 ld l,3 mul hl,(work) ld (synthe_add+1),l ld (synthe_data+1),0 ld l,4 mul hl,(work) ld (synthe_add+2),l ld (synthe_data+2),128 call @_wave_synthe ret _sine_set_sub: ld hl,sine_data_table ld de,wave_buffer ld a,0 ld b,0 _sine_set_loop: ld c,(hl+a) ld (de),c add a,(calc) inc de inc b jr nz,_sine_set_loop call @_wave_put ret sine_data_area: db 128,131,134,137,140,143,146,149,152,156,159,162,165,168,171,174 db 176,179,182,185,188,191,193,196,199,201,204,206,209,211,213,216 db 218,220,222,224,226,228,230,232,234,236,237,239,240,242,243,245 db 246,247,248,249,250,251,252,252,253,254,254,255,255,255,255,255 db 255,255,255,255,255,255,254,254,253,252,252,251,250,249,248,247 db 246,245,243,242,240,239,237,236,234,232,230,228,226,224,222,220 db 218,216,213,211,209,206,204,201,199,196,193,191,188,185,182,179 db 176,174,171,168,165,162,159,156,152,149,146,143,140,137,134,131 sine_data_table: db 0,3,6,9,12,15,18,21,24,28,31,34,37,40,43,46 db 48,51,54,57,60,63,65,68,71,73,76,78,81,83,85,88 db 90,92,94,96,98,100,102,104,106,108,109,111,112,114,115,117 db 118,119,120,121,122,123,124,124,125,126,126,127,127,127,127,127 db 127,127,127,127,127,127,126,126,125,124,124,123,122,121,120,119 db 118,117,115,114,112,111,109,108,106,104,102,100,98,96,94,92 db 90,88,85,83,81,78,76,73,71,68,65,63,60,57,54,51 db 48,46,43,40,37,34,31,28,24,21,18,15,12,9,6,3 ;========== Defaule Tone Data Area ======================== ; ; This Tone Data is created by S.Harada : 1990.9.24 ; default_tone: db 001h,000h,047h,047h,0C0h,06Fh,00Fh,000h,0C8h,099h db 001h,048h,08Fh,08Fh,0C0h,07Fh,00Fh,000h,0BBh,099h db 001h,0B0h,0EFh,0EFh,0C2h,07Fh,00Fh,000h,0A8h,098h db 001h,090h,0AFh,0AFh,0C0h,064h,02Fh,000h,0C9h,098h db 001h,0AFh,0AFh,0AFh,0C0h,07Fh,018h,000h,0C8h,098h db 001h,0B0h,0CFh,0CFh,0C0h,064h,00Fh,000h,0CAh,098h db 009h,0CFh,0CFh,0CFh,0C0h,07Fh,018h,000h,0CAh,098h db 001h,0E8h,0FEh,0FEh,0C0h,073h,00Fh,000h,0CFh,088h db 001h,000h,000h,000h,0C5h,052h,03Fh,000h,0FFh,04Fh db 001h,001h,001h,001h,0C5h,052h,03Fh,000h,0FFh,04Fh db 001h,002h,002h,002h,0C5h,064h,03Fh,000h,0FFh,04Fh db 001h,003h,003h,003h,0C5h,064h,03Fh,000h,0FFh,04Fh db 001h,004h,004h,004h,0C5h,038h,068h,038h,08Ah,098h db 001h,005h,005h,005h,0C5h,04Fh,07Ah,04Fh,08Ah,098h db 001h,006h,006h,006h,0C5h,04Fh,07Ah,048h,08Ah,098h db 015h,028h,03Fh,03Fh,0C1h,054h,06Fh,05Ah,0AAh,065h db 001h,000h,01Fh,01Fh,0C2h,07Fh,00Fh,000h,0CFh,088h db 00Dh,01Fh,01Fh,01Fh,0C2h,07Fh,00Fh,000h,0B8h,088h db 000h,01Dh,01Dh,01Dh,0C5h,07Fh,00Fh,000h,0B8h,088h db 000h,01Fh,01Fh,01Fh,0C5h,07Fh,00Fh,000h,0BFh,068h db 000h,018h,018h,018h,0C5h,07Fh,00Fh,000h,0BFh,06Bh db 004h,01Bh,01Bh,01Bh,0C5h,07Fh,00Fh,000h,0A8h,066h db 000h,02Dh,02Dh,02Dh,0C5h,055h,00Fh,000h,0A8h,098h db 01Ch,02Eh,02Eh,02Eh,0C5h,055h,00Fh,000h,0A8h,098h db 01Ch,030h,03Fh,03Fh,0C3h,05Fh,04Fh,03Fh,0AAh,088h db 01Dh,0A8h,0BFh,0BFh,0C4h,048h,00Fh,05Ah,088h,088h db 01Dh,0C0h,0C0h,0D7h,0C3h,06Fh,03Fh,000h,0F8h,088h db 01Dh,088h,088h,0A7h,0C3h,055h,04Fh,000h,0F8h,088h db 002h,090h,09Fh,09Fh,0C5h,07Fh,018h,038h,0CFh,088h db 001h,03Fh,03Fh,03Fh,0C3h,06Fh,008h,000h,0DAh,078h db 001h,09Fh,09Fh,09Fh,0C5h,07Fh,00Fh,000h,0C8h,078h db 000h,01Ah,01Ah,01Ah,0C5h,064h,01Fh,000h,0C8h,08Fh db 01Ah,040h,057h,057h,0C1h,07Fh,068h,048h,0A9h,098h db 01Dh,058h,06Fh,06Fh,0C1h,064h,088h,03Fh,0EEh,098h db 01Eh,070h,070h,09Fh,0C4h,078h,06Fh,048h,0ADh,098h db 07Dh,060h,067h,067h,0C3h,058h,06Fh,000h,0DDh,0A8h db 0B9h,070h,070h,0AFh,0C2h,04Fh,06Fh,048h,0DFh,0AFh db 01Ch,025h,025h,025h,0C5h,05Fh,03Fh,000h,0B8h,0A8h db 018h,015h,015h,015h,0C5h,06Fh,018h,000h,0B8h,0A8h db 018h,007h,007h,007h,0C5h,064h,058h,03Eh,0ADh,09Fh db 0DDh,008h,008h,008h,0C5h,06Fh,02Fh,000h,0BFh,0BFh db 07Ch,009h,009h,009h,0C5h,064h,018h,000h,0C8h,0A8h db 05Ch,00Ah,00Ah,00Ah,0C5h,048h,048h,038h,0DDh,08Ch db 054h,00Bh,00Bh,00Bh,0C5h,04Fh,048h,048h,0A8h,0A8h db 01Dh,0A8h,0BFh,0BFh,0C4h,04Fh,05Fh,058h,0A8h,09Fh db 019h,000h,000h,000h,0C5h,028h,018h,04Fh,088h,08Dh db 085h,014h,014h,014h,0C5h,07Fh,02Fh,000h,0A9h,0A9h db 01Ch,00Ch,00Ch,00Ch,0C5h,044h,018h,038h,0C8h,078h db 001h,070h,070h,0AFh,0C2h,048h,018h,04Fh,0BFh,0AFh db 01Dh,0B0h,0CFh,0CFh,0C1h,06Fh,048h,000h,0CFh,0AFh db 01Dh,0CFh,0CFh,0CFh,0C1h,064h,078h,038h,0CFh,0AFh db 000h,040h,04Fh,04Fh,0C3h,05Fh,02Fh,000h,088h,088h db 019h,010h,01Fh,01Fh,0C4h,05Fh,058h,048h,0B8h,088h db 01Ch,021h,021h,021h,0C5h,058h,078h,048h,0B8h,088h db 01Dh,0A0h,0A7h,0A7h,0C4h,07Fh,078h,038h,099h,088h db 018h,022h,022h,022h,0C5h,064h,09Fh,048h,099h,088h db 001h,040h,04Fh,04Fh,0C3h,054h,048h,000h,0DFh,088h db 018h,025h,025h,025h,0C5h,058h,018h,000h,0B8h,0AAh db 000h,025h,025h,025h,0C5h,06Fh,02Eh,000h,0ACh,0ACh db 008h,00Dh,00Dh,00Dh,0C5h,064h,01Fh,000h,0B8h,088h db 008h,00Eh,00Eh,00Eh,0C5h,05Fh,00Fh,000h,0B8h,088h db 001h,0D0h,0E7h,0E7h,0C0h,06Fh,018h,000h,0DFh,088h db 008h,019h,019h,019h,0C5h,06Fh,01Fh,000h,0D8h,088h db 055h,078h,08Fh,08Fh,0C5h,06Fh,04Fh,000h,0C8h,098h db 001h,000h,00Fh,00Fh,0C3h,06Fh,00Fh,000h,0C8h,088h db 001h,00Fh,00Fh,00Fh,0C3h,074h,01Fh,000h,0C8h,088h db 001h,010h,01Fh,01Fh,0C3h,06Fh,00Fh,000h,0D8h,088h db 059h,010h,01Fh,01Fh,0C3h,07Fh,03Eh,000h,098h,088h db 001h,020h,02Fh,02Fh,0C3h,074h,01Fh,000h,0C8h,088h db 01Dh,024h,02Fh,02Fh,0C3h,07Fh,00Fh,000h,0BCh,078h db 01Ch,028h,028h,028h,0C5h,074h,04Fh,000h,0DCh,068h db 01Ch,029h,029h,029h,0C5h,074h,04Fh,000h,0DCh,068h db 019h,0D8h,0E7h,0E7h,0C3h,04Fh,044h,058h,0A8h,088h db 01Ch,02Ch,02Ch,02Ch,0C5h,064h,07Fh,048h,088h,088h db 019h,0D8h,0E7h,0E7h,0C3h,064h,048h,038h,02Fh,08Fh db 01Dh,0E7h,0E7h,0E7h,0C3h,064h,038h,028h,098h,078h db 008h,00Fh,00Fh,00Fh,0C5h,054h,07Fh,03Fh,099h,078h db 01Dh,068h,087h,087h,0C3h,072h,07Fh,04Fh,0E8h,088h db 01Dh,080h,097h,097h,0C1h,07Fh,038h,058h,0C8h,088h db 00Dh,097h,097h,097h,0C1h,07Fh,048h,048h,0A8h,078h db 00Dh,098h,0AFh,0AFh,0C1h,07Fh,018h,048h,0BFh,088h db 019h,0ACh,0ACh,0ACh,0C1h,07Fh,03Fh,048h,0A8h,08Ch db 018h,010h,010h,010h,0C5h,064h,08Fh,02Eh,0AAh,088h db 018h,00Ch,00Ch,00Ch,0C5h,048h,088h,02Eh,0A8h,09Fh db 01Ch,00Ah,00Ah,00Ah,0C5h,07Fh,068h,04Fh,098h,08Fh db 01Dh,0A8h,0BFh,0BFh,0C3h,064h,00Fh,028h,0CCh,088h db 019h,00Ah,00Ah,00Ah,0C5h,07Fh,07Fh,048h,058h,078h db 019h,01Ah,01Ah,01Ah,0C5h,064h,06Fh,03Eh,0ADh,078h db 019h,0E8h,0FEh,0FEh,0C3h,064h,00Fh,048h,0AFh,088h db 01Ch,023h,023h,023h,0C5h,04Fh,038h,048h,0AFh,088h db 005h,020h,02Fh,02Fh,0C4h,064h,038h,04Fh,09Fh,08Dh db 01Ch,024h,024h,024h,0C5h,06Fh,068h,048h,078h,08Fh db 001h,030h,047h,047h,0C5h,064h,00Fh,04Fh,098h,088h db 01Dh,047h,047h,047h,0C5h,064h,078h,038h,0BCh,09Fh db 009h,030h,03Fh,03Fh,0C4h,06Fh,028h,000h,0D8h,088h db 00Dh,040h,057h,057h,0C4h,064h,00Fh,000h,0E8h,088h db 01Dh,058h,06Fh,06Fh,0C4h,064h,06Fh,000h,0D8h,088h db 000h,012h,012h,012h,0C5h,06Fh,01Eh,000h,0A8h,0A8h db 014h,013h,013h,013h,0C5h,05Fh,00Fh,000h,0A5h,099h db 001h,048h,05Fh,05Fh,0C5h,07Fh,00Fh,000h,09Fh,09Fh db 000h,014h,014h,014h,0C5h,07Fh,01Fh,000h,0AAh,0AAh db 048h,026h,026h,026h,0C5h,06Fh,01Ah,000h,0AFh,0AFh db 040h,015h,015h,015h,0C5h,064h,038h,000h,0BEh,0BEh db 011h,018h,027h,027h,0C1h,064h,01Fh,000h,0ADh,098h db 001h,000h,017h,017h,0C1h,05Fh,00Fh,000h,0BDh,098h db 005h,0E0h,0EFh,0EFh,0C4h,07Fh,00Fh,000h,098h,098h db 05Ah,0F0h,0FEh,0FEh,0C4h,07Fh,00Fh,000h,0AFh,0AFh db 009h,0C4h,0DFh,0DFh,0C4h,064h,038h,05Ah,09Ah,088h db 018h,02Ah,02Ah,02Ah,0C5h,04Fh,07Fh,038h,08Fh,09Ch db 058h,010h,010h,010h,0C5h,02Fh,08Fh,038h,098h,09Ch db 019h,050h,067h,067h,0C3h,064h,00Fh,048h,078h,088h db 016h,060h,077h,077h,0C5h,064h,07Fh,000h,0A8h,088h db 001h,0C0h,0E7h,0E7h,0C5h,07Fh,00Fh,000h,0B8h,098h db 001h,0E8h,0F7h,0F7h,0C5h,07Fh,00Fh,000h,088h,088h db 001h,0A0h,0BFh,0BFh,0C5h,07Fh,00Fh,000h,0BBh,0BBh db 002h,050h,05Fh,05Fh,0C2h,07Fh,00Fh,000h,0CFh,098h db 001h,060h,06Fh,06Fh,0C2h,07Fh,00Fh,000h,0C8h,098h db 042h,070h,07Fh,07Fh,0C1h,07Fh,00Fh,000h,0C8h,0A8h db 002h,000h,00Fh,00Fh,0C4h,07Fh,00Fh,000h,0DDh,0DDh db 002h,090h,0AAh,0BAh,0C6h,07Fh,00Fh,000h,0DDh,0A8h db 002h,048h,04Fh,04Fh,0C2h,07Fh,00Fh,000h,0B8h,0A9h db 041h,020h,047h,047h,0C2h,07Fh,03Fh,05Fh,0A8h,099h db 002h,0D0h,0FEh,0FEh,0C1h,07Fh,00Fh,000h,0CFh,0A8h db 029h,052h,058h,058h,080h,064h,00Fh,000h,0D8h,088h db 029h,042h,04Ch,04Ch,080h,064h,00Fh,000h,0D8h,088h db 019h,000h,000h,000h,080h,058h,038h,000h,0D8h,088h db 01Dh,052h,05Fh,05Fh,080h,064h,00Fh,000h,0B8h,088h db 0D9h,050h,057h,057h,080h,064h,018h,000h,0D8h,088h default_rhm: db 03Ch,016h,016h,016h,0C5h,0DFh,07Fh,00Fh,0AAh db 03Dh,016h,016h,016h,0C5h,0CFh,07Fh,00Fh,0AAh db 03Eh,016h,016h,016h,0C5h,0BFh,07Fh,00Fh,0AAh db 03Fh,016h,016h,016h,0C5h,0AFh,07Fh,00Fh,0AAh db 040h,016h,016h,016h,0C5h,09Fh,07Fh,00Fh,0AAh db 041h,016h,016h,016h,0C5h,08Fh,07Fh,00Fh,0AAh db 042h,016h,016h,016h,0C5h,000h,07Fh,00Fh,0AAh db 043h,016h,016h,016h,0C5h,00Fh,07Fh,00Fh,0AAh db 044h,016h,016h,016h,0C5h,01Fh,07Fh,00Fh,0AAh db 045h,016h,016h,016h,0C5h,02Fh,07Fh,00Fh,0AAh db 046h,016h,016h,016h,0C5h,03Fh,07Fh,00Fh,0AAh db 047h,016h,016h,016h,0C5h,04Fh,07Fh,00Fh,0AAh db 048h,016h,016h,016h,0C5h,05Fh,07Fh,00Fh,0AAh db 021h,040h,057h,057h,0C7h,0EFh,07Fh,00Fh,098h db 025h,040h,057h,057h,0C7h,0CFh,07Fh,00Fh,098h db 026h,040h,057h,057h,0C7h,0AFh,07Fh,00Fh,098h db 028h,040h,057h,057h,0C7h,02Fh,07Fh,00Fh,098h db 02Ch,040h,057h,057h,0C7h,04Fh,07Fh,00Fh,098h db 02Dh,040h,057h,057h,0C7h,06Fh,07Fh,00Fh,098h db 039h,000h,02Fh,02Fh,0C6h,000h,07Fh,00Fh,0bfh db 039h,000h,02Fh,02Fh,0C6h,000h,07Fh,00Fh,099h db 042h,000h,02Fh,02Fh,0C6h,000h,07Fh,00Fh,0A8h db 039h,005h,02Fh,02Fh,0C6h,000h,07Fh,00Fh,0aah db 03Ch,050h,050h,05Fh,0C6h,05Fh,07Fh,00Fh,099h db 03Ch,080h,0BFh,0BFh,0C6h,000h,07Fh,00Fh,099h db 054h,050h,050h,05Fh,0C6h,000h,07Fh,00Fh,088h db 021h,088h,09Fh,09Fh,0C7h,000h,07Fh,00Fh,088h db 050h,088h,09Fh,09Fh,0C7h,000h,07Fh,00Fh,0aah db 03Ch,095h,0BFh,0BFh,0C6h,000h,07Fh,00Fh,0aah db 039h,0C0h,0EFh,0EFh,0C6h,000h,07Fh,00Fh,098h db 041h,0C0h,0EFh,0EFh,0C6h,000h,07Fh,00Fh,0aah db 02Ah,060h,060h,06Fh,0C2h,000h,07Fh,00Fh,0AAh db 033h,070h,087h,087h,0C7h,0CFh,07Fh,00Fh,0AAh db 03Bh,070h,087h,087h,0C7h,000h,07Fh,00Fh,0AAh db 041h,070h,087h,087h,0C7h,04Fh,07Fh,00Fh,0AAh db 035h,040h,04Fh,04Fh,0C6h,000h,07Fh,00Fh,068h db 035h,040h,04Fh,04Fh,0C6h,000h,07Fh,00Fh,068h db 03Ch,030h,03Fh,03Fh,0C6h,01Fh,07Fh,00Fh,088h db 03Ch,000h,02Fh,02Fh,0C6h,000h,07Fh,00Fh,098h db 03Ch,050h,05Fh,05Fh,0C6h,09Fh,07Fh,00Fh,0aah db 03Ah,060h,07Fh,07Fh,0C6h,00Fh,07Fh,00Fh,0aah db 033h,000h,01Fh,01Fh,0C7h,04Fh,07Fh,01Fh,0aah db 041h,0F0h,0FEh,0FEh,0C6h,01Fh,07Fh,029h,0AAh db 033h,000h,01Fh,01Fh,0C7h,04Fh,07Fh,01Fh,0aah db 03Ch,0D8h,0FEh,0FEh,0C7h,01Fh,07Fh,06Fh,099h db 036h,000h,01Fh,01Fh,0C7h,00Fh,05Fh,01Fh,0aah db 03Ch,0D8h,0FEh,0FEh,0C7h,01Fh,07Fh,029h,0a8h db 036h,000h,01Fh,01Fh,0C7h,00Fh,05Fh,01Fh,0aah db 03Eh,000h,01Fh,01Fh,0C7h,0CFh,07Fh,00Ah,098h db 038h,080h,0A3h,0BBh,0C6h,01Fh,06Fh,00Fh,0BEh db 03Eh,000h,01Fh,01Fh,0C7h,0CFh,07Fh,00Ah,098h db 037h,0C0h,0DDh,0EAh,0C6h,09Fh,07Fh,00Fh,0AAh db 040h,040h,04Fh,04Fh,0C6h,000h,07Fh,00Fh,068h db 040h,000h,02Fh,02Fh,0C6h,000h,07Fh,00Fh,0a8h db 040h,0A0h,0B7h,0B7h,0C7h,0AFh,07Fh,00Fh,0afh db 034h,048h,04Fh,04Fh,0C2h,000h,05Fh,00Fh,0afh db 02Ch,040h,057h,057h,0C7h,000h,07Fh,00Ah,09Ch db 04Ah,000h,02Fh,02Fh,0C6h,000h,07Fh,00Fh,0afh db 025h,0A0h,0B7h,0B7h,0C7h,000h,07Fh,00Fh,0AAh db 03Ah,000h,00Fh,00Fh,0C4h,000h,04Fh,00Fh,0AAh db 040h,058h,06Fh,06Fh,0C7h,06Fh,07Fh,00Fh,088h db 03Ch,058h,06Fh,06Fh,0C7h,04Fh,07Fh,00Fh,088h db 047h,070h,087h,087h,0C7h,0CFh,07Fh,02Fh,078h db 043h,070h,087h,087h,0C7h,0DFh,07Fh,00Fh,098h db 03Dh,070h,087h,087h,0C7h,0AFh,07Fh,00Fh,0bFh db 040h,088h,09Fh,09Fh,0C7h,08Fh,07Fh,00Fh,0bfh db 030h,088h,09Fh,09Fh,0C7h,00Fh,07Fh,00Fh,098h db 03Eh,040h,057h,057h,0C7h,07Fh,07Fh,00Ah,098h db 039h,040h,057h,057h,0C7h,07Fh,07Fh,00Ah,08Fh db 03Eh,0B8h,0C7h,0C7h,0C7h,0BFh,07Fh,00Fh,0bfh db 03Eh,0C8h,0D7h,0D7h,0C7h,03Fh,07Fh,00Fh,0bfh db 03Eh,020h,03Fh,03Fh,0C7h,09Fh,07Fh,00Ah,08Fh db 03Eh,020h,03Fh,03Fh,0C7h,09Fh,05Fh,00Ah,0aah db 049h,050h,050h,05Fh,0C6h,0BFh,07Fh,00Fh,0AAh db 025h,0B8h,0B8h,0BBh,0C7h,000h,06Fh,00Fh,099h db 035h,000h,000h,00Fh,0C4h,000h,05Fh,05Fh,09Ch db 040h,030h,030h,03Fh,0C7h,000h,05Fh,00Fh,099h db 030h,0E8h,0FEh,0FEh,0C5h,0DFh,05Fh,00Fh,0afh db 030h,060h,06Fh,06Fh,0C2h,0CFh,05Fh,00Fh,099h db 035h,0E8h,0FEh,0FEh,0C5h,0AFh,05Fh,00Fh,0afh db 040h,060h,06Fh,06Fh,0C2h,000h,05Fh,00Fh,099h db 03Ah,0E8h,0FEh,0FEh,0C5h,02Fh,05Fh,00Fh,0afh db 050h,060h,06Fh,06Fh,0C2h,04Fh,05Fh,00Fh,099h db 03Fh,0E8h,0FEh,0FEh,0C5h,05Fh,05Fh,00Fh,0afh db 030h,020h,047h,047h,0C2h,000h,05Fh,00Fh,0bfh db 030h,020h,047h,047h,0C2h,000h,07Fh,00Fh,088h db 039h,020h,047h,047h,0C2h,000h,05Fh,00Fh,0a8h db 039h,020h,047h,047h,0C2h,000h,07Fh,00Fh,088h db 025h,080h,0BFh,0BFh,0C6h,000h,05Fh,00Fh,0a8h db 060h,014h,014h,014h,0C5h,0CFh,05Fh,00Fh,0A8h db 060h,008h,008h,008h,0C5h,000h,048h,02Fh,098h db 060h,009h,009h,009h,0C5h,04Fh,04Fh,00Fh,098h db 032h,070h,070h,07Fh,0C1h,0CFh,07Fh,00Fh,0AFh db 03Bh,0B8h,0B8h,0D7h,0C7h,04Fh,07Fh,00Fh,0AAh db 022h,000h,000h,00Fh,0C5h,000h,07Fh,00Fh,098h db 022h,01Ah,01Ah,021h,0C5h,000h,05Fh,02Fh,0B8h db 028h,000h,000h,01Fh,080h,0CFh,07Fh,00Fh,0AAh db 038h,000h,000h,01Fh,080h,04Fh,078h,00Fh,0BBh db 044h,000h,000h,01Fh,080h,02Fh,070h,00Fh,0BBh db 052h,000h,000h,01Fh,080h,0AFh,070h,00Fh,0ABh db 035h,020h,020h,02Fh,080h,0DFh,070h,00Fh,0AAh db 046h,020h,020h,02Fh,080h,05Fh,070h,00Fh,097h db 046h,030h,030h,037h,080h,0BFh,066h,00Fh,0AAh db 054h,030h,030h,037h,080h,03Fh,067h,00Fh,0AAh db 03Bh,038h,038h,03Fh,080h,000h,060h,00Fh,0aah db 036h,000h,000h,00Fh,080h,0CFh,07Fh,00Fh,0BBh db 049h,000h,000h,00Fh,080h,01Fh,078h,00Fh,0AAh db 03Fh,000h,020h,02Fh,080h,04Fh,07Fh,00Fh,0aah db 02Ch,048h,048h,05Fh,080h,000h,07Fh,00Fh,0bbh db 042h,040h,048h,05Fh,080h,000h,07Fh,00Fh,0BBh db 04Ah,040h,04Ch,05Bh,080h,000h,07Fh,00Fh,0AAh db 055h,040h,000h,05Fh,080h,000h,078h,00Fh,0AAh db 049h,000h,007h,007h,080h,0CFh,07Fh,00Fh,078h db 059h,000h,007h,007h,080h,000h,07Fh,00Fh,088h db 040h,010h,017h,017h,080h,0DFh,07Fh,00Fh,088h db 060h,057h,057h,077h,080h,0CFh,07Fh,00Fh,078h db 070h,057h,057h,077h,080h,000h,07Fh,00Fh,078h db 060h,05Bh,060h,060h,080h,04Fh,07Fh,00Fh,088h db 050h,010h,017h,017h,080h,05Fh,07Fh,00Fh,078h db 02Bh,021h,023h,027h,0C2h,000h,07Fh,00Fh,0aah db 069h,000h,001h,001h,080h,000h,068h,038h,09Ch db 055h,058h,068h,077h,080h,000h,07Fh,00Fh,078h db 033h,0F0h,0FEh,0FEh,0C2h,0CFh,07Fh,00Fh,0AAh db 036h,0F0h,0FEh,0FEh,0C2h,000h,07Fh,00Fh,0AAh db 039h,0F0h,0FEh,0FEh,0C2h,04Fh,07Fh,00Fh,0AAh db 03Dh,040h,040h,0BFh,0C6h,000h,07Fh,00Fh,0CCh db 049h,020h,0B8h,0D7h,0C7h,000h,06Fh,00Fh,0BBh db 045h,0C4h,0C4h,0FEh,0C4h,000h,06Fh,018h,0AAh ;========== Default Sample Wave Data ====================== sample_waves: db 000h,011h,021h,031h,03Fh,04Dh,059h,064h db 06Dh,074h,079h,07Dh,07Fh,07Fh,07Eh,07Ch db 078h,075h,070h,06Ch,067h,063h,05Fh,05Ch db 059h,058h,057h,057h,058h,05Ah,05Ch,05Fh db 062h,066h,069h,06Ch,06Eh,070h,071h,071h db 070h,06Eh,06Bh,067h,062h,05Dh,056h,050h db 049h,042h,03Bh,035h,02Fh,02Ah,026h,022h db 020h,01Fh,01Eh,01Fh,021h,023h,026h,029h db 02Dh,031h,034h,038h,03Ah,03Ch,03Dh,03Eh db 03Dh,03Bh,039h,035h,031h,02Ch,027h,021h db 01Bh,015h,00Fh,00Ah,005h,001h,082h,084h db 086h,086h,086h,084h,083h,080h,003h,005h db 008h,00Bh,00Dh,00Eh,00Fh,00Fh,00Dh,00Bh db 007h,003h,083h,089h,090h,098h,09Fh,0A7h db 0AEh,0B5h,0BBh,0C0h,0C4h,0C7h,0C8h,0C7h db 0C4h,0C0h,0BBh,0B3h,0ABh,0A1h,097h,08Bh db 000h,01Ah,033h,049h,05Ch,06Ah,074h,07Bh db 07Eh,07Fh,07Eh,07Dh,07Ah,078h,075h,072h db 06Eh,06Bh,067h,063h,060h,05Dh,059h,057h db 054h,051h,04Fh,04Ch,04Ah,048h,045h,043h db 041h,03Fh,03Eh,03Ch,03Ah,039h,037h,036h db 034h,033h,031h,030h,02Fh,02Eh,02Dh,02Ch db 02Ah,029h,028h,027h,026h,025h,024h,024h db 023h,022h,021h,020h,020h,01Fh,01Eh,01Dh db 01Dh,01Ch,01Bh,01Bh,01Ah,01Ah,019h,018h db 018h,017h,016h,016h,015h,015h,014h,014h db 013h,013h,012h,012h,011h,011h,010h,010h db 010h,00Fh,00Fh,00Eh,00Eh,00Dh,00Dh,00Ch db 00Ch,00Ch,00Bh,00Bh,00Ah,00Ah,00Ah,009h db 009h,008h,008h,008h,007h,007h,007h,006h db 006h,005h,005h,005h,004h,004h,004h,003h db 003h,003h,002h,002h,001h,001h,001h,000h db 000h,01Ch,031h,03Bh,03Ch,036h,030h,029h db 023h,01Dh,018h,016h,017h,01Ah,01Ch,01Ch db 01Bh,01Ch,020h,026h,02Ah,02Ah,026h,020h db 01Eh,024h,030h,03Eh,04Bh,053h,057h,058h db 055h,04Eh,043h,035h,028h,01Eh,018h,015h db 013h,012h,014h,01Eh,030h,046h,05Ah,067h db 06Ah,065h,05Eh,057h,052h,051h,053h,059h db 061h,06Ah,070h,06Fh,066h,059h,04Ch,044h db 041h,041h,041h,040h,040h,045h,050h,05Eh db 06Dh,078h,07Eh,07Fh,07Bh,073h,065h,053h db 040h,032h,02Ah,02Ah,02Bh,02Ch,02Ah,027h db 027h,02Bh,031h,037h,039h,036h,032h,02Eh db 02Eh,031h,037h,03Eh,048h,053h,05Bh,05Ch db 053h,03Fh,027h,011h,003h,081h,002h,007h db 00Dh,014h,01Dh,026h,030h,036h,039h,038h db 035h,032h,02Bh,021h,014h,008h,081h,083h db 000h,00Fh,01Eh,02Ch,03Ah,046h,052h,05Dh db 066h,06Eh,074h,079h,07Dh,07Eh,07Fh,07Eh db 07Ch,079h,074h,06Fh,068h,061h,05Ah,051h db 049h,040h,037h,02Eh,025h,01Ch,013h,00Bh db 003h,085h,08Bh,091h,097h,09Bh,09Fh,0A2h db 0A4h,0A6h,0A6h,0A6h,0A5h,0A3h,0A0h,09Dh db 09Ah,095h,091h,08Ch,087h,081h,004h,009h db 00Eh,013h,017h,01Bh,01Eh,020h,022h,023h db 023h,022h,021h,01Eh,01Ah,016h,010h,00Ah db 003h,084h,08Ch,095h,09Dh,0A6h,0AEh,0B7h db 0BFh,0C6h,0CDh,0D2h,0D7h,0DBh,0DEh,0DFh db 0DFh,0DEh,0DCh,0D8h,0D3h,0CDh,0C6h,0BEh db 0B5h,0ABh,0A0h,095h,08Ah,002h,00Dh,018h db 023h,02Dh,036h,03Fh,047h,04Dh,052h,056h db 059h,05Ah,05Ah,059h,057h,053h,04Fh,04Ah db 043h,03Dh,035h,02Dh,024h,01Ch,013h,009h db 000h,01Ah,032h,048h,05Bh,06Ah,074h,07Bh db 07Eh,07Fh,07Eh,07Bh,079h,076h,073h,070h db 06Eh,06Ch,06Bh,069h,067h,065h,064h,062h db 061h,060h,05Fh,05Fh,05Fh,05Eh,05Eh,05Eh db 05Dh,05Ch,05Ch,05Bh,05Ah,059h,058h,058h db 057h,056h,055h,054h,052h,051h,050h,04Fh db 04Eh,04Dh,04Ch,04Bh,04Ah,049h,048h,047h db 046h,045h,044h,043h,042h,042h,041h,041h db 040h,03Fh,03Eh,03Dh,03Ch,03Bh,03Ah,039h db 038h,038h,037h,036h,035h,034h,032h,031h db 030h,02Eh,02Dh,02Ch,02Ah,029h,028h,027h db 026h,025h,024h,023h,022h,020h,01Fh,01Eh db 01Dh,01Ch,01Bh,01Bh,01Ah,019h,018h,017h db 016h,015h,014h,013h,012h,011h,010h,00Fh db 00Fh,00Eh,00Dh,00Ch,00Bh,00Ah,009h,008h db 007h,006h,005h,004h,004h,003h,002h,001h db 000h,055h,07Fh,07Eh,06Eh,064h,05Dh,053h db 04Ah,045h,041h,03Bh,035h,032h,02Fh,02Ah db 026h,023h,021h,01Dh,019h,017h,015h,012h db 00Fh,00Eh,00Dh,00Bh,00Ah,00Ah,00Ah,00Ah db 00Ah,00Bh,00Ch,00Dh,00Dh,00Fh,010h,011h db 012h,013h,014h,014h,014h,014h,014h,013h db 012h,011h,010h,00Eh,00Ch,00Bh,009h,007h db 005h,003h,002h,080h,082h,082h,083h,084h db 085h,084h,084h,084h,083h,082h,081h,000h db 002h,003h,005h,006h,007h,009h,00Ah,00Ah db 00Bh,00Ch,00Ch,00Bh,00Bh,00Bh,00Ah,008h db 007h,006h,004h,002h,001h,081h,082h,084h db 085h,086h,087h,088h,088h,088h,088h,087h db 087h,085h,084h,083h,082h,000h,002h,003h db 005h,006h,007h,008h,009h,00Ah,00Ah,00Ah db 00Ah,009h,008h,007h,006h,005h,003h,001h db 000h,021h,03Fh,058h,06Bh,077h,07Dh,07Fh db 07Dh,079h,073h,06Ch,064h,05Bh,053h,04Ch db 045h,03Fh,03Ah,036h,031h,02Dh,02Ah,027h db 025h,022h,020h,01Eh,01Ch,01Bh,01Ah,01Ah db 01Ah,01Ah,01Ah,01Ah,019h,018h,017h,017h db 016h,015h,014h,013h,013h,012h,011h,011h db 010h,00Fh,00Eh,00Ch,00Bh,00Ah,009h,008h db 007h,006h,006h,006h,006h,007h,009h,00Bh db 00Dh,010h,012h,014h,015h,015h,015h,014h db 013h,012h,011h,00Fh,00Eh,00Dh,00Bh,00Ah db 009h,008h,007h,007h,006h,006h,005h,004h db 004h,003h,003h,002h,002h,002h,003h,003h db 004h,005h,006h,006h,006h,006h,005h,005h db 004h,004h,003h,003h,002h,000h,081h,083h db 086h,089h,08Dh,092h,097h,09Ch,0A2h,0A7h db 0ADh,0B1h,0B5h,0B6h,0B4h,0ADh,0A1h,092h db 000h,011h,021h,030h,03Dh,048h,052h,059h db 05Eh,063h,066h,069h,06Ch,06Fh,071h,074h db 076h,077h,079h,07Ah,07Ah,07Bh,07Bh,07Ch db 07Ch,07Dh,07Dh,07Eh,07Fh,07Fh,07Fh,07Fh db 07Fh,07Eh,07Eh,07Eh,07Dh,07Dh,07Ch,07Ch db 07Bh,07Bh,07Ah,079h,079h,078h,077h,077h db 077h,077h,077h,077h,077h,077h,076h,076h db 076h,076h,076h,076h,076h,076h,076h,076h db 076h,076h,076h,076h,075h,075h,075h,075h db 075h,075h,075h,075h,075h,075h,075h,075h db 075h,075h,076h,076h,077h,077h,078h,078h db 079h,07Ah,07Ah,07Ah,07Bh,07Bh,07Ch,07Ch db 07Ch,07Dh,07Dh,07Ch,07Ch,07Ch,07Bh,07Bh db 07Ah,07Ah,079h,079h,078h,078h,077h,076h db 074h,072h,070h,06Dh,06Bh,068h,065h,062h db 05Dh,058h,051h,048h,03Dh,030h,021h,011h db 000h,00Eh,01Ch,028h,033h,03Ch,044h,04Ah db 04Eh,051h,054h,056h,058h,059h,05Bh,05Dh db 05Fh,060h,061h,061h,060h,05Eh,05Bh,058h db 054h,04Fh,049h,043h,03Dh,037h,031h,02Bh db 024h,01Eh,017h,010h,008h,001h,087h,090h db 098h,0A0h,0A8h,0AEh,0B4h,0B8h,0BBh,0BCh db 0BAh,0B7h,0B2h,0ABh,0A3h,09Bh,093h,08Bh db 084h,003h,008h,00Dh,011h,015h,01Ah,01Fh db 024h,02Bh,033h,03Bh,044h,04Dh,056h,05Eh db 065h,06Bh,070h,075h,078h,07Ah,07Ch,07Eh db 07Fh,07Fh,07Fh,07Eh,07Ch,07Ah,075h,070h db 069h,060h,056h,04Ch,040h,034h,028h,01Dh db 012h,008h,081h,088h,08Fh,094h,098h,09Ch db 09Fh,0A2h,0A5h,0A9h,0ADh,0B2h,0B6h,0BCh db 0C0h,0C5h,0C8h,0CAh,0CBh,0C9h,0C7h,0C2h db 0BCh,0B5h,0AEh,0A6h,09Eh,096h,08Eh,087h db 000h,009h,012h,01Bh,024h,02Ch,034h,03Bh db 041h,047h,04Ch,051h,055h,059h,05Ch,05Fh db 061h,063h,065h,067h,069h,06Bh,06Dh,06Fh db 071h,073h,075h,077h,079h,07Bh,07Ch,07Dh db 07Eh,07Fh,07Fh,07Fh,07Eh,07Dh,07Ch,07Ah db 078h,075h,072h,06Fh,06Ch,069h,066h,062h db 05Fh,05Ch,058h,055h,052h,04Fh,04Ch,048h db 045h,042h,03Fh,03Ch,039h,036h,033h,030h db 02Dh,02Ah,027h,024h,022h,01Fh,01Dh,01Ah db 018h,016h,015h,013h,012h,011h,010h,00Fh db 00Eh,00Eh,00Dh,00Dh,00Ch,00Ch,00Ch,00Bh db 00Bh,00Ah,00Ah,00Ah,009h,009h,009h,009h db 009h,009h,009h,009h,009h,009h,009h,009h db 009h,009h,00Ah,00Ah,00Ah,009h,009h,009h db 009h,008h,008h,007h,006h,006h,005h,004h db 004h,003h,003h,002h,002h,001h,001h,000h db 000h,00Bh,015h,020h,02Ah,034h,03Dh,046h db 04Fh,057h,05Eh,064h,06Ah,06Fh,073h,077h db 07Ah,07Ch,07Eh,07Fh,07Fh,07Fh,07Eh,07Eh db 07Ch,07Bh,079h,077h,075h,072h,070h,06Dh db 06Bh,068h,066h,064h,061h,05Fh,05Dh,05Bh db 059h,057h,055h,054h,052h,051h,050h,04Fh db 04Fh,04Eh,04Eh,04Eh,04Eh,04Eh,04Fh,04Fh db 050h,051h,051h,052h,053h,054h,055h,056h db 057h,057h,058h,058h,058h,057h,056h,055h db 054h,052h,050h,04Eh,04Bh,048h,045h,041h db 03Dh,039h,034h,030h,02Bh,027h,022h,01Eh db 019h,014h,010h,00Ch,008h,004h,000h,083h db 086h,089h,08Ch,08Eh,090h,092h,094h,095h db 097h,098h,098h,099h,099h,09Ah,09Ah,099h db 099h,098h,098h,097h,096h,095h,093h,092h db 090h,08Eh,08Dh,08Bh,089h,087h,084h,082h db 000h,01Fh,03Bh,050h,05Fh,068h,06Eh,072h db 076h,07Ah,07Dh,07Fh,07Fh,07Dh,07Ah,077h db 075h,073h,072h,070h,06Fh,06Eh,06Eh,06Fh db 071h,074h,077h,078h,078h,077h,075h,074h db 074h,073h,071h,06Eh,068h,060h,056h,04Eh db 047h,043h,042h,042h,042h,042h,041h,03Fh db 03Ch,03Bh,03Ah,03Ah,03Ah,03Ah,039h,039h db 038h,037h,035h,033h,030h,02Dh,02Ah,026h db 024h,022h,023h,024h,027h,02Ah,02Eh,032h db 036h,039h,03Bh,03Bh,03Ah,038h,036h,034h db 034h,035h,036h,037h,037h,034h,02Fh,029h db 022h,01Ch,017h,013h,00Eh,00Ah,005h,001h db 081h,082h,082h,081h,001h,001h,001h,080h db 081h,081h,081h,080h,080h,081h,083h,086h db 087h,086h,084h,000h,005h,007h,008h,006h db 004h,001h,000h,001h,003h,004h,004h,003h,000h end