;----------------------------------------------------------------------- ; DSP-01 Debugger Software ; Produced by Y.Nagashima ;----------------------------------------------------------------------- name main p65c02 ;##### Zero Page Registers ##### zpage ; midi_r_top ds 1 ; MIDI Receive FIFO Top midi_r_end ds 1 ; MIDI Receive FIFO End midi_t_top ds 1 ; MIDI Transmit FIFO Top midi_t_end ds 1 ; MIDI Transmit FIFO Top midi_rsb ds 1 ; Running Status Buffer midi_dcb ds 1 ; Data Count Buffer rxdata ds 1 ; MIDI Received Data rxkeyno ds 1 ; MIDI Received Key Number rxspeed ds 1 ; MIDI Received Velocity rxchannel ds 1 ; MIDI Received Channel ; work ds 16 ; Work Area led_demo ds 2 ; LED Demonstration Work add_s_h_1 ds 1 ; 16bit Adder/Sub Source (H) #1 add_s_l_1 ds 1 ; 16bit Adder/Sub Source (L) #1 add_s_h_2 ds 1 ; 16bit Adder/Sub Source (H) #2 add_s_l_2 ds 1 ; 16bit Adder/Sub Source (L) #2 add_d_h ds 1 ; 16bit Adder/Sub Destination (H) add_d_l ds 1 ; 16bit Adder/Sub Destination (L) bank_h ds 1 ; Memory Bank Buffer(H) bank_l ds 1 ; Memory Bank Buffer(L) bank_buff_l ds 1 ; Memory Bank Stack Buffer(L) bank_buff_h ds 1 ; Memory Bank Stack Buffer(H) screen_mode ds 1 ; Main Menu Mode ; comp_level ds 1 ; Mouse Sleshold Level msx_timer ds 1 ; MSX Mouse Scan Timer msx_sw_buf ds 1 ; Bit5=Left,Bit4=Right : Buffer msx_x_data ds 1 ; MSX Mouse Move Data (X) msx_y_data ds 1 ; MSX Mouse Move Data (Y) mouse_sw ds 1 ; Bit5=Left,Bit4=Right : ON Event="1" up_count ds 1 ; Mouse Up Address down_count ds 1 ; Mouse Down Address right_count ds 1 ; Mouse Right Address left_count ds 1 ; Mouse Left Address mouse_timer ds 1 ; Mouse Check Routine Timer main_point ds 1 ; Main Menu Mode Pointer ; moni_point ds 1 ; MIDI Monitor Mode Address erase_point ds 1 ; MIDI Monitor Erase Address lcd_era_h ds 1 ; LCD Hex Erase Address (H) lcd_add_h ds 1 ; LCD Hex Display Address (H) lcd_add_l ds 1 ; LCD Hex Display Address (L) lcd_hex_data ds 1 ; LCD Hex Display Data mask_buffer ds 2 ; seloff buffer ; pcm_point ds 1 ; PCM Module Mode Point pcm_plane ds 1 ; PCM Module Mode Display Plane NO.(0-F) ; dbg_point ds 1 ; DEBUG Mode Point dbg_plane ds 1 ; DEBUG Mode Display Plane NO.(0-F) dbg_bk ds 16 dbg_st ds 16 dbg_lt ds 16 dbg_le ds 16 dbg_fnoh ds 16 dbg_fnom ds 16 dbg_fnol ds 16 ; wave_s_add ds 2 ; wave_d_bk ds 1 ; wave_d_add ds 1 ; random_buff ds 1 ; basic_ch ds 1 ; Receive Basic Channel (00-0F) basic_note ds 16 ; Receive Note Number (00-7F) basic_tone ds 16 ; Preset Tone Number (00-FF) basic_pan ds 16 ; Panpot Data (00-FF) dsp_channel ds 1 ; tone_access ds 2 ; dsp_event ds 1 ; ; zp_end ds 3 ; Dummy=<*> ;##### RAM MAP ##### org 0200h midi_r_fifo ds 256 ; MIDI midi_t_fifo ds 256 ;##### I/O,ROM Mapping ##### dsp-01 equ 01c00h ; PAL #3 Out=F7= bankh equ 01e00h ; PAL #3 Out=F6= bankl equ 01e04h ; PAL #3 Out=F5= adsp equ 01e10h ; PAL #3 Out=F0-F4= uart1 equ 01e20h ; PAL #2 Out=F0= uart2 equ 01e24h ; PAL #2 Out=F1= uart3 equ 01e28h ; PAL #2 Out=F2= timer equ 01e2ch ; PAL #2 Out=F3= pia equ 01e30h ; PAL #2 Out=F4= lcd2 equ 01e34h ; PAL #2 Out=F5= ** lcd equ 01e38h ; PAL #2 Out=F6= mpu equ 01e3ch ; PAL #2 Out=F7= prgarea equ 0c000h debug equ 0ff00h vector equ 0fffah ;##### Constants Defines ##### tail equ 0ffh up equ 00000001b down equ 00000010b right equ 00000100b left equ 00001000b sw_r equ 00010000b sw_l equ 00100000b wave_ram_bank equ 80h ;##### Macro Call Defines ##### ; macro &startup sei ldx #0 txs cld endmac macro &movi lda #\0 sta \1 endmac macro &move lda \0 sta \1 endmac macro &equal_return bne *+3 rts endmac macro ¬_equal_return beq *+3 rts endmac macro &bank &movi \0,bankl sta bank_l &movi \1,bankh sta bank_h endmac macro &bank_system &bank 08h,09h endmac macro &bank_wave_l &bank 0ah,0bh endmac macro &bank_wave_h &bank 0ch,0dh endmac macro &bank_card_1_l &bank 00h,01h endmac macro &bank_card_1_h &bank 02h,03h endmac macro &bank_card_2_l &bank 04h,05h endmac macro &bank_card_2_h &bank 06h,07h endmac macro &push_bank &move bank_l,bank_buff_l &move bank_h,bank_buff_h endmac macro &pop_bank &move bank_buff_l,bank_l sta bankl &move bank_buff_h,bank_h sta bankh endmac ; macro &comtx ldx midi_t_top lda #\0 sta midi_t_fifo,x inc midi_t_top endmac macro &memtx ldx midi_t_top lda \0 sta midi_t_fifo,x inc midi_t_top endmac ; macro &write &movi .low.\0,work+2 &movi .high.\0,work+3 jsr lcd_write_message endmac macro &selon &movi .low.\0,work+2 sta mask_buffer &movi .high.\0,work+3 sta mask_buffer+1 stz work+4 jsr lcd_select_mask endmac macro &seloff &move mask_buffer,work+2 &move mask_buffer+1,work+3 &movi 0ffh,work+4 jsr lcd_select_mask endmac macro &inidraw &movi .low.\0,work &movi .high.\0,work+1 jsr lcd_draw_initial_sub inc work+7 endmac macro &hex_disp_with_point &movi .low.\0,lcd_add_l &movi .high.\0,lcd_add_h &move \1,lcd_hex_data jsr lcd_display_hex_data_with_address endmac org prgarea ;##### Program Start ##### start: &startup jsr io_initial loop: jsr dsp_event_check jsr rx_midi_sequence jsr tx_midi_sequence jsr mouse_point_check jsr msx_mouse_check bra loop ;##### System I/O Initialize ##### io_initial: &movi 0,uart1+1 &movi 0,uart1+1 &movi 0,uart1+1 &movi 01000000b,uart1+1 ; Software Reset ; ldx #0 lda #0 io_initial_loop_1: sta 0,x ; ZP inx bne io_initial_loop_1 ldx #0 io_initial_loop_2: txa sta basic_tone,x ; Preset Tone NO. clc adc #36 sta basic_note,x ; Receive Note : C2 - Eb3 lda #1 sta dbg_fnoh,x lda #0 sta dbg_fnom,x sta dbg_fnol,x lda #0c0h sta dbg_bk,x lda #000h sta dbg_st,x sta dbg_lt,x sta dbg_le,x lda #40h sta basic_pan,x ; Panpot inx cpx #10h bne io_initial_loop_2 ; jsr dsp_initial_setting ; <71051(1) UART Initialize> &movi 0,uart1+1 &movi 0,uart1+1 &movi 0,uart1+1 &movi 01000000b,uart1+1 ; Software Reset &movi 01001110b,uart1+1 ; Mode Set &movi 000-0101b,uart1+1 ; Command Set ; <71051(2) UART Initialize> &movi 0,uart2+1 &movi 0,uart2+1 &movi 0,uart2+1 &movi 01000000b,uart2+1 ; Software Reset &movi 01001110b,uart2+1 ; Mode Set &movi 001-0111b,uart2+1 ; Command Set ; <71051(3) UART Initialize> &movi 0,uart3+1 &movi 0,uart3+1 &movi 0,uart3+1 &movi 01000000b,uart3+1 ; Software Reset &movi 0100-010b,uart3+1 ; Mode Set &movi 000-0111b,uart3+1 ; Command Set ; <71054 Timer Initialize> &movi 001-0110b,timer+3 ; UART #2 = 9600 bps &movi 32,timer &movi 0,timer &movi 011-0110b,timer+3 ; UART #3 = 1200 bps &movi 0,timer+1 &movi 1,timer+1 &movi -01-0110b,timer+3 ; Timer Interrupt &movi 43h,timer+2 &movi 90h,timer+2 ; <71055 PIA Initialize> &movi 10010010b,pia+3 ; Port<2>=Out,<0>=<1>=In &movi 0ffh,pia+2 ; &movi 40h,lcd+1 ; System Set &movi 30h,lcd ; Screen &movi 85h,lcd ; Field(X) &movi 7,lcd ; Field(Y) &movi 39,lcd ; C/R &movi 48,lcd ; TC/R &movi 3fh,lcd ; L/F &movi 40,lcd ; APL &movi 0,lcd ; APH ; &movi 44h,lcd+1 ; Scroll &movi 0,lcd ; Start Address #1(L) &movi 0,lcd ; (H) &movi 40h,lcd ; Line #1 &movi 0,lcd ; Start Address #2(L) &movi 10h,lcd ; (H) &movi 40h,lcd ; Line #2 ; &movi 5ah,lcd+1 ; HDot Scroll &movi 0,lcd ; Scroll=0 ; &movi 5bh,lcd+1 ; Overlay &movi 01h,lcd ; Character + Graphic ; &movi 58h,lcd+1 ; Display OFF &movi 14h,lcd ; Parameter ; &movi 5dh,lcd+1 ; Cursor Form &movi 04h,lcd ; X=5 &movi 86h,lcd ; Y=7 ; &movi 46h,lcd+1 ; Cursor Write &movi 0,lcd ; Home &movi 0,lcd ; Position ; &movi 52h,lcd+1 ; Erase jsr wait_long jsr wait_long jsr wait_long ; &movi 1fh,comp_level ; Mouse &movi 00h,basic_ch ; Receive Channel ******** &movi '*',zp_end ; Dummy &movi '*',zp_end+1 ; // &movi '*',zp_end+2 ; // ; &bank_system ; Initial Screen Draw> jsr lcd_draw_initial &movi 59h,lcd+1 ; Display ON ; cli rts ;##### DSP-01 ON Event --- OFF Write Phase ##### dsp_on_event: lda rxchannel cmp basic_ch ¬_equal_return ldx #0 dsp_on_event_keyno_check_loop: lda basic_note,x cmp rxkeyno beq dsp_on_event_keyno_check_just inx cpx #10h bne dsp_on_event_keyno_check_loop rts dsp_on_event_keyno_check_just: stx dsp_channel lda screen_mode cmp #3 bne dsp_pcm_mode jmp dsp_debug_mode_on_event dsp_pcm_mode: lda #0 sta dsp-01+0c0h,x lda #07h sta dsp-01+0d0h,x lda #0 ; KEY OFF sta dsp-01+090h,x &movi 1,dsp_event rts ;##### DSP ON Event --- ON Write Phase ##### dsp_event_check: lda dsp_event &equal_return stz dsp_event ldx dsp_channel &movi .high.tone_data_base,tone_access+1 lda basic_tone,x asl a asl a asl a sta tone_access bcc dsp_on_event_low_basic_tone inc tone_access+1 dsp_on_event_low_basic_tone: clc lda #.low.tone_data_base adc tone_access sta tone_access bcc dsp_on_event_low_basic_tone_add inc tone_access+1 dsp_on_event_low_basic_tone_add: ldy #4 lda (tone_access),y ; F-No Type and #00000111b tay lda fno_type_table_l,y ldx dsp_channel sta dsp-01+00h,x lda fno_type_table_m,y sta dsp-01+10h,x lda fno_type_table_h,y sta dsp-01+20h,x ldy #1 lda (tone_access),y ; Start Point sta dsp-01+30h,x iny lda (tone_access),y ; Loop Top sta dsp-01+40h,x iny lda (tone_access),y ; Loop End sta dsp-01+50h,x ldy #0 lda (tone_access),y ; Bank sta dsp-01+60h,x lda basic_pan,x sta dsp-01+70h,x ldy #5 lda (tone_access),y ; Attack Level sta dsp-01+0a0h,x iny lda (tone_access),y ; Attack Speed sta dsp-01+0b0h,x lda #0 ; Decay Level sta dsp-01+0c0h,x iny lda (tone_access),y ; Decay Speed sta dsp-01+0d0h,x lda #00000011b ; KEY ON sta dsp-01+090h,x rts fno_type_table_l: db 000h,000h,000h,000h,000h,000h,000h,000h fno_type_table_m: db 080h,000h,080h,000h,080h,000h,080h,000h fno_type_table_h: db 000h,001h,001h,002h,002h,003h,003h,004h ;##### DSP-01 OFF Event ##### dsp_off_event: lda screen_mode cmp #3 ¬_equal_return lda rxchannel cmp basic_ch ¬_equal_return ldx #0 dsp_off_event_keyno_check_loop: lda basic_note,x cmp rxkeyno beq dsp_off_event_keyno_check_just inx cpx #10h bne dsp_off_event_keyno_check_loop rts dsp_off_event_keyno_check_just: stx dsp_channel jmp dsp_debug_mode_off_event rts ;##### DSP-01 Initial Setting ##### dsp_initial_setting: &movi 0,dsp-01+0f5h ; Memory Bus Close &movi 0,dsp-01+090h ldx #0 lda #0 dsp_initial_setting_loop_001: sta dsp-01+090h,x ; Control Word inx cpx #10h bne dsp_initial_setting_loop_001 &movi 0,random_buff lda random_buff and #11-01111b sta dsp-01+0f1h ; Random Parameter:Clear &movi 00-01111b,dsp-01+0f2h ; Output Parameter &movi 11111111b,dsp-01+0f0h ; Random Bit Pattern ldx #0 dsp_initial_setting_loop_002: lda #0 sta dsp-01+000h,x ; F-No.(L) sta dsp-01+010h,x ; F-No.(L) sta dsp-01+020h,x ; F-No.(L) sta dsp-01+030h,x ; Start Point sta dsp-01+040h,x ; Loop Top sta dsp-01+050h,x ; Loop End lda #wave_ram_bank sta dsp-01+060h,x ; Bank lda #0 sta dsp-01+070h,x ; Panpot sta dsp-01+0a0h,x ; Attack Level lda #0fh sta dsp-01+0b0h,x ; Attack Speed lda #0 sta dsp-01+0c0h,x ; Decay Level lda #0fh sta dsp-01+0d0h,x ; Decay Speed inx cpx #10h bne dsp_initial_setting_loop_002 lda random_buff ora #00010000b sta dsp-01+0f1h ; Random Parameter:Setting &movi 1,dsp-01+0f5h ; Memory Bus Recover rts tone_data_base: ; Format : Bank,Start-Point,Loop-Top,Loop-End,F-No-Type ; Attack-Level,Attack-Speed,Decay-Speed db 0c0h,000h,000h,07fh,0,00fh,007h,099h ; #00 db 0c0h,080h,080h,0bfh,0,00eh,007h,08ah ; #01 db 0c0h,0c0h,0c0h,0cfh,0,00ah,007h,067h ; #02 db 0c0h,0d0h,0d0h,0dfh,0,00bh,007h,067h ; #03 db 0c1h,000h,000h,00fh,0,00fh,007h,067h ; #04 db 0c1h,010h,010h,01fh,0,00fh,007h,067h ; #05 db 0c1h,020h,020h,03fh,0,00fh,007h,077h ; #06 db 0c1h,040h,040h,04fh,0,00fh,007h,067h ; #07 db 0c1h,050h,050h,06fh,0,00fh,007h,077h ; #08 db 0c1h,070h,070h,07fh,0,00fh,007h,067h ; #09 db 0c1h,080h,080h,09fh,0,00fh,007h,077h ; #0a db 0c1h,000h,000h,09fh,0,00fh,007h,0b7h ; #0b db 0c1h,000h,000h,07fh,0,00fh,007h,0b7h ; #0c db 0c1h,000h,000h,06fh,0,00fh,007h,0b7h ; #0d db 0c1h,000h,000h,04fh,0,00fh,007h,0b7h ; #0e db 0c1h,000h,000h,03fh,0,00fh,007h,0b7h ; #0f ;##### DSP-01 Debug Mode ON Event ##### dsp_debug_mode_on_event: ldx dsp_channel txa ; ****** and #00000001b ; * AM-Reset ¬_equal_return ; ****** lda dbg_fnol,x sta dsp-01+00h,x lda dbg_fnom,x sta dsp-01+10h,x lda dbg_fnoh,x sta dsp-01+20h,x lda dbg_st,x sta dsp-01+30h,x lda dbg_lt,x sta dsp-01+40h,x lda dbg_le,x sta dsp-01+50h,x lda dbg_bk,x sta dsp-01+60h,x lda basic_pan,x sta dsp-01+70h,x lda #08h sta dsp-01+0a0h,x lda #87h sta dsp-01+0b0h,x lda #08h sta dsp-01+0c0h,x lda #87h sta dsp-01+0d0h,x lda #0001-011b ; KEY ON *** AM *** sta dsp-01+090h,x inx lda dbg_fnol,x sta dsp-01+00h,x lda dbg_fnom,x sta dsp-01+10h,x lda dbg_fnoh,x sta dsp-01+20h,x lda dbg_st,x sta dsp-01+30h,x lda dbg_lt,x sta dsp-01+40h,x lda dbg_le,x sta dsp-01+50h,x lda dbg_bk,x sta dsp-01+60h,x lda basic_pan,x sta dsp-01+70h,x lda #0ch sta dsp-01+0a0h,x lda #27h sta dsp-01+0b0h,x lda #08h sta dsp-01+0c0h,x lda #87h sta dsp-01+0d0h,x lda #0001-011b ; KEY ON *** AM *** sta dsp-01+090h,x rts ;##### DSP-01 Debug Mode OFF Event ##### dsp_debug_mode_off_event: ldx dsp_channel txa ; ****** and #00000001b ; * AM ¬_equal_return ; ****** lda #0 sta dsp-01+0c0h,x lda #0a7h sta dsp-01+0d0h,x lda #00011000b ; KEY OFF *** AM *** sta dsp-01+090h,x inx lda #0 sta dsp-01+0c0h,x lda #0a7h sta dsp-01+0d0h,x lda #00011000b ; KEY OFF *** AM *** sta dsp-01+090h,x rts ;##### Mouse Event Routine ##### ; Input : [mouse_sw] ; Bit = 7 6 5 4 3 2 1 0 ; --- --- SW(L) SW(R) Move(L) Move(R) Move(Down) Move(Up) msx_mouse_sw_event: lda screen_mode asl a tax jmp (mouse_sw_jump),x mouse_sw_jump: dw mouse_event_init_screen ; 00 dw mouse_event_main_menu ; 01 dw mouse_event_midi_monitor ; 02 dw mouse_event_dsp_debug ; 03 dw mouse_event_pcm_module ; 04 dw mouse_event_midi_control ; 05 dw mouse_event_midi_mtr ; 06 mouse_event_dsp_debug: lda mouse_sw and #up beq mouse_event_dbg_not_up ldx dbg_point lda dbg_table_01,x sta dbg_point jmp mouse_event_dbg_screen_redraw mouse_event_dbg_not_up: lda mouse_sw and #down beq mouse_event_dbg_not_down ldx dbg_point lda dbg_table_02,x sta dbg_point jmp mouse_event_dbg_screen_redraw mouse_event_dbg_not_down: lda mouse_sw and #right beq mouse_event_dbg_not_right ldx dbg_point lda dbg_table_03,x sta dbg_point jmp mouse_event_dbg_screen_redraw mouse_event_dbg_not_right: lda mouse_sw and #left beq mouse_event_dbg_not_left ldx dbg_point lda dbg_table_04,x sta dbg_point jmp mouse_event_dbg_screen_redraw mouse_event_dbg_not_left: lda mouse_sw and #00110000b beq mouse_event_dbg_pass lda dbg_point asl a tax jmp (dbg_mode_jump),x mouse_event_dbg_pass: jmp mouse_event_return dbg_mode_jump: dw dbg_mode_channel dw dbg_mode_note dw dbg_mode_bank dw dbg_mode_panpot dw dbg_mode_st dw dbg_mode_lt dw dbg_mode_le dw dbg_mode_fnoh dw dbg_mode_fnom dw dbg_mode_fnol dw mouse_event_return_back_to_main_menu dw dbg_mode_next dbg_mode_st: ldx dbg_plane lda dbg_st,x jsr mouse_sw_inc_dec_check sta dbg_st,x sta work+13 &hex_disp_with_point 172,work+13 jmp mouse_event_return dbg_mode_lt: ldx dbg_plane lda dbg_lt,x jsr mouse_sw_inc_dec_check sta dbg_lt,x sta work+13 &hex_disp_with_point 184,work+13 jmp mouse_event_return dbg_mode_le: ldx dbg_plane lda dbg_le,x jsr mouse_sw_inc_dec_check sta dbg_le,x sta work+13 &hex_disp_with_point 196,work+13 jmp mouse_event_return dbg_mode_fnoh: ldx dbg_plane lda dbg_fnoh,x jsr mouse_sw_inc_dec_check sta dbg_fnoh,x sta work+13 &hex_disp_with_point 212,work+13 jmp mouse_event_return dbg_mode_fnom: ldx dbg_plane lda dbg_fnom,x jsr mouse_sw_inc_dec_check sta dbg_fnom,x sta work+13 &hex_disp_with_point 224,work+13 jmp mouse_event_return dbg_mode_fnol: ldx dbg_plane lda dbg_fnol,x jsr mouse_sw_inc_dec_check sta dbg_fnol,x sta work+13 &hex_disp_with_point 236,work+13 jmp mouse_event_return dbg_mode_channel: lda basic_ch jsr mouse_sw_inc_dec_check and #00001111b sta basic_ch &hex_disp_with_point 94,basic_ch jmp mouse_event_return dbg_mode_note: ldx dbg_plane lda basic_note,x jsr mouse_sw_inc_dec_check and #01111111b sta basic_note,x sta work+13 &hex_disp_with_point 111,work+13 jmp mouse_event_return dbg_mode_bank: ldx dbg_plane lda dbg_bk,x jsr mouse_sw_inc_dec_check sta dbg_bk,x sta work+13 &hex_disp_with_point 131,work+13 jmp mouse_event_return dbg_mode_panpot: ldx dbg_plane lda basic_pan,x jsr mouse_sw_inc_dec_check sta basic_pan,x sta work+13 &hex_disp_with_point 146,work+13 jmp mouse_event_return dbg_mode_next: lda dbg_plane inc a and #00001111b sta dbg_plane jsr lcd_draw_dsp_debug jmp mouse_event_return mouse_event_dbg_screen_redraw: &seloff jsr lcd_draw_dbg_module_redraw jmp mouse_event_return dbg_table_01: db 11,11,0,1,2,3,3,4,5,6,10,8 dbg_table_02: db 2,3,4,5,7,8,9,11,11,11,10,1 dbg_table_03: db 1,1,3,3,5,6,6,8,9,9,11,11 dbg_table_04: db 0,0,2,2,4,4,5,7,7,8,10,10 ;##### DSP1001 Debug Tester Screen ##### lcd_draw_dsp_debug: &movi 11,dbg_point jsr lcd_draw_menu_back_screen lcd_draw_dbg_module_redraw: &write lcd_draw_dbg_module_data_menu_01 &hex_disp_with_point 71,dbg_plane &write lcd_draw_dbg_module_data_menu_02 &write lcd_draw_dbg_module_data_menu_03 &hex_disp_with_point 94,basic_ch &write lcd_draw_dbg_module_data_menu_05 &write lcd_draw_dbg_module_data_menu_06 ldx dbg_plane lda basic_note,x sta work+13 &hex_disp_with_point 111,work+13 &write lcd_draw_dbg_module_data_menu_07 &write lcd_draw_dbg_module_data_menu_08 ldx dbg_plane lda dbg_bk,x sta work+13 &hex_disp_with_point 131,work+13 &write lcd_draw_dbg_module_data_menu_09 &write lcd_draw_dbg_module_data_menu_10 ldx dbg_plane lda basic_pan,x sta work+13 &hex_disp_with_point 146,work+13 &write lcd_draw_dbg_module_data_menu_11 &write lcd_draw_dbg_module_data_menu_12 ldx dbg_plane lda dbg_st,x sta work+13 &hex_disp_with_point 172,work+13 &write lcd_draw_dbg_module_data_menu_13 &write lcd_draw_dbg_module_data_menu_14 ldx dbg_plane lda dbg_lt,x sta work+13 &hex_disp_with_point 184,work+13 &write lcd_draw_dbg_module_data_menu_15 &write lcd_draw_dbg_module_data_menu_16 ldx dbg_plane lda dbg_le,x sta work+13 &hex_disp_with_point 196,work+13 &write lcd_draw_dbg_module_data_menu_17 &write lcd_draw_dbg_module_data_menu_18 ldx dbg_plane lda dbg_fnoh,x sta work+13 &hex_disp_with_point 212,work+13 &write lcd_draw_dbg_module_data_menu_19 &write lcd_draw_dbg_module_data_menu_20 ldx dbg_plane lda dbg_fnom,x sta work+13 &hex_disp_with_point 224,work+13 &write lcd_draw_dbg_module_data_menu_21 &write lcd_draw_dbg_module_data_menu_22 ldx dbg_plane lda dbg_fnol,x sta work+13 &hex_disp_with_point 236,work+13 &write lcd_draw_dbg_module_data_menu_23 &write lcd_draw_dbg_module_data_menu_24 lda dbg_point bne lcd_draw_dbg_module_point_not_0 &selon lcd_draw_dbg_module_data_menu_03 rts lcd_draw_dbg_module_point_not_0: cmp #1 bne lcd_draw_dbg_module_point_not_1 &selon lcd_draw_dbg_module_data_menu_06 rts lcd_draw_dbg_module_point_not_1: cmp #2 bne lcd_draw_dbg_module_point_not_2 &selon lcd_draw_dbg_module_data_menu_08 rts lcd_draw_dbg_module_point_not_2: cmp #3 bne lcd_draw_dbg_module_point_not_3 &selon lcd_draw_dbg_module_data_menu_10 rts lcd_draw_dbg_module_point_not_3: cmp #4 bne lcd_draw_dbg_module_point_not_4 &selon lcd_draw_dbg_module_data_menu_12 rts lcd_draw_dbg_module_point_not_4: cmp #5 bne lcd_draw_dbg_module_point_not_5 &selon lcd_draw_dbg_module_data_menu_14 rts lcd_draw_dbg_module_point_not_5: cmp #6 bne lcd_draw_dbg_module_point_not_6 &selon lcd_draw_dbg_module_data_menu_16 rts lcd_draw_dbg_module_point_not_6: cmp #7 bne lcd_draw_dbg_module_point_not_7 &selon lcd_draw_dbg_module_data_menu_18 rts lcd_draw_dbg_module_point_not_7: cmp #8 bne lcd_draw_dbg_module_point_not_8 &selon lcd_draw_dbg_module_data_menu_20 rts lcd_draw_dbg_module_point_not_8: cmp #9 bne lcd_draw_dbg_module_point_not_9 &selon lcd_draw_dbg_module_data_menu_22 rts lcd_draw_dbg_module_point_not_9: cmp #10 bne lcd_draw_dbg_module_point_not_10 &selon lcd_draw_dbg_module_data_menu_23 rts lcd_draw_dbg_module_point_not_10: &selon lcd_draw_dbg_module_data_menu_24 rts lcd_draw_dbg_module_data_menu_01: db 2,3,'### DSP-01 Debug Mode : Ch.=[**] ###',tail lcd_draw_dbg_module_data_menu_02: db 3,4,'MIDI CH = ',tail lcd_draw_dbg_module_data_menu_03: db 3,14,'[**]',tail lcd_draw_dbg_module_data_menu_05: db 3,21,'Note NO.= ',tail lcd_draw_dbg_module_data_menu_06: db 3,31,'[**]',tail lcd_draw_dbg_module_data_menu_07: db 4,4,'Bank = ',tail lcd_draw_dbg_module_data_menu_08: db 4,11,'[**]',tail lcd_draw_dbg_module_data_menu_09: db 4,17,'Panpot = ',tail lcd_draw_dbg_module_data_menu_10: db 4,26,'[**]',tail lcd_draw_dbg_module_data_menu_11: db 5,4,'Start = ',tail lcd_draw_dbg_module_data_menu_12: db 5,12,'[**]',tail lcd_draw_dbg_module_data_menu_13: db 5,18,'Top = ',tail lcd_draw_dbg_module_data_menu_14: db 5,24,'[**]',tail lcd_draw_dbg_module_data_menu_15: db 5,30,'End = ',tail lcd_draw_dbg_module_data_menu_16: db 5,36,'[**]',tail lcd_draw_dbg_module_data_menu_17: db 6,4,'Fn(H) = ',tail lcd_draw_dbg_module_data_menu_18: db 6,12,'[**]',tail lcd_draw_dbg_module_data_menu_19: db 6,18,'(M) = ',tail lcd_draw_dbg_module_data_menu_20: db 6,24,'[**]',tail lcd_draw_dbg_module_data_menu_21: db 6,30,'(L) = ',tail lcd_draw_dbg_module_data_menu_22: db 6,36,'[**]',tail lcd_draw_dbg_module_data_menu_23: db 7,7,'',tail lcd_draw_dbg_module_data_menu_24: db 7,25,'',tail rts ;##### PCM Mode ##### mouse_event_pcm_module: lda mouse_sw and #up beq mouse_event_pcm_not_up ldx pcm_point lda pcm_table_01,x sta pcm_point jmp mouse_event_pcm_screen_redraw mouse_event_pcm_not_up: lda mouse_sw and #down beq mouse_event_pcm_not_down ldx pcm_point lda pcm_table_02,x sta pcm_point jmp mouse_event_pcm_screen_redraw mouse_event_pcm_not_down: lda mouse_sw and #right beq mouse_event_pcm_not_right lda pcm_point cmp #4 bne mouse_event_pcm_pass inc pcm_point jmp mouse_event_pcm_screen_redraw mouse_event_pcm_pass: jmp mouse_event_return mouse_event_pcm_not_right: lda mouse_sw and #left beq mouse_event_pcm_not_left lda pcm_point cmp #5 bne mouse_event_pcm_pass dec pcm_point jmp mouse_event_pcm_screen_redraw mouse_event_pcm_not_left: lda mouse_sw and #00110000b beq mouse_event_pcm_pass lda pcm_point asl a tax jmp (pcm_mode_jump),x pcm_mode_jump: dw pcm_mode_channel dw pcm_mode_note dw pcm_mode_tone dw pcm_mode_panpot dw mouse_event_return_back_to_main_menu dw pcm_mode_next mouse_sw_inc_dec_check: sta work+12 lda mouse_sw and #sw_r bne mouse_sw_inc lda work+12 dec a rts mouse_sw_inc: lda work+12 inc a rts pcm_mode_channel: lda basic_ch jsr mouse_sw_inc_dec_check and #00001111b sta basic_ch &hex_disp_with_point 108,basic_ch jmp mouse_event_return pcm_mode_note: ldx pcm_plane lda basic_note,x jsr mouse_sw_inc_dec_check and #01111111b sta basic_note,x sta work+13 &hex_disp_with_point 146,work+13 jmp mouse_event_return pcm_mode_tone: ldx pcm_plane lda basic_tone,x jsr mouse_sw_inc_dec_check and #00111111b sta basic_tone,x sta work+13 &hex_disp_with_point 186,work+13 jmp mouse_event_return pcm_mode_panpot: ldx pcm_plane lda basic_pan,x jsr mouse_sw_inc_dec_check sta basic_pan,x sta work+13 &hex_disp_with_point 226,work+13 jmp mouse_event_return pcm_mode_next: lda pcm_plane inc a and #00001111b sta pcm_plane jsr lcd_draw_pcm_module jmp mouse_event_return mouse_event_pcm_screen_redraw: &seloff jsr lcd_draw_pcm_module_redraw jmp mouse_event_return pcm_table_02: db 1,2,3,5,4,0 pcm_table_01: db 5,0,1,2,4,3 ;##### PCM Module Mode Screen ##### lcd_draw_pcm_module: &movi 5,pcm_point jsr lcd_draw_menu_back_screen lcd_draw_pcm_module_redraw: &write lcd_draw_pcm_module_data_menu_01 &hex_disp_with_point 71,pcm_plane &write lcd_draw_pcm_module_data_menu_02 &write lcd_draw_pcm_module_data_menu_03 &hex_disp_with_point 108,basic_ch &write lcd_draw_pcm_module_data_menu_05 &write lcd_draw_pcm_module_data_menu_06 ldx pcm_plane lda basic_note,x sta work+13 &hex_disp_with_point 146,work+13 &write lcd_draw_pcm_module_data_menu_07 &write lcd_draw_pcm_module_data_menu_08 ldx pcm_plane lda basic_tone,x sta work+13 &hex_disp_with_point 186,work+13 &write lcd_draw_pcm_module_data_menu_09 &write lcd_draw_pcm_module_data_menu_10 ldx pcm_plane lda basic_pan,x sta work+13 &hex_disp_with_point 226,work+13 &write lcd_draw_pcm_module_data_menu_11 &write lcd_draw_pcm_module_data_menu_12 lda pcm_point bne lcd_draw_pcm_module_point_not_0 &selon lcd_draw_pcm_module_data_menu_03 rts lcd_draw_pcm_module_point_not_0: cmp #1 bne lcd_draw_pcm_module_point_not_1 &selon lcd_draw_pcm_module_data_menu_06 rts lcd_draw_pcm_module_point_not_1: cmp #2 bne lcd_draw_pcm_module_point_not_2 &selon lcd_draw_pcm_module_data_menu_08 rts lcd_draw_pcm_module_point_not_2: cmp #3 bne lcd_draw_pcm_module_point_not_3 &selon lcd_draw_pcm_module_data_menu_10 rts lcd_draw_pcm_module_point_not_3: cmp #4 bne lcd_draw_pcm_module_point_not_4 &selon lcd_draw_pcm_module_data_menu_11 rts lcd_draw_pcm_module_point_not_4: &selon lcd_draw_pcm_module_data_menu_12 rts lcd_draw_pcm_module_data_menu_01: db 2,3,'### DSP-01 PCM Module : Ch.=[**] ###',tail lcd_draw_pcm_module_data_menu_02: db 3,5,'MIDI Receive Channel = ',tail lcd_draw_pcm_module_data_menu_03: db 3,28,'[**]',tail lcd_draw_pcm_module_data_menu_05: db 4,5,'Accept Note Number = ',tail lcd_draw_pcm_module_data_menu_06: db 4,26,'[**]',tail lcd_draw_pcm_module_data_menu_07: db 5,5,'Preset TONE Number = ',tail lcd_draw_pcm_module_data_menu_08: db 5,26,'[**]',tail lcd_draw_pcm_module_data_menu_09: db 6,5,'Stereo PANPOT Data = ',tail lcd_draw_pcm_module_data_menu_10: db 6,26,'[**]',tail lcd_draw_pcm_module_data_menu_11: db 7,7,'',tail lcd_draw_pcm_module_data_menu_12: db 7,25,'',tail ;##### Mouse Remains ##### mouse_event_init_screen: lda mouse_sw and #00110000b bne mouse_event_init_screen_to_main jmp mouse_event_return mouse_event_init_screen_to_main: &movi 2,main_point jmp mouse_event_return_back_to_main_menu mouse_event_midi_control: mouse_event_midi_mtr: lda mouse_sw and #sw_l bne mouse_event_midi_control_return jmp mouse_event_return mouse_event_midi_control_return: jmp mouse_event_return_back_to_main_menu mouse_event_midi_monitor: lda mouse_sw and #sw_l bne mouse_event_return_back_to_main_menu jmp mouse_event_return mouse_event_return_back_to_main_menu: &movi 1,screen_mode jsr lcd_draw_main_menu jmp mouse_event_return mouse_event_main_menu: lda mouse_sw and #sw_r bne mouse_event_00_sw_seq jmp mouse_event_00_up_move mouse_event_00_sw_seq: lda main_point asl a tax jmp (mouse_event_00_sw_jump),x mouse_event_00_sw_jump: dw mouse_event_return ; (Dummy) dw mouse_event_return ; (Dummy) dw mouse_event_to_midi_monitor ; 2 dw mouse_event_to_dsp_debug ; 3 dw mouse_event_to_pcm_module ; 4 dw mouse_event_to_midi_control ; 5 dw mouse_event_to_midi_mtr ; 6 mouse_event_to_midi_monitor: &movi 2,screen_mode jsr lcd_draw_midi_monitor jmp mouse_event_return mouse_event_to_dsp_debug: &movi 3,screen_mode jsr lcd_draw_dsp_debug ldx #0 lda #0 mouse_event_dsp_initial: sta dsp-01+090h,x ; Control Word inx cpx #10h bne mouse_event_dsp_initial jmp mouse_event_return mouse_event_to_pcm_module: &movi 4,screen_mode jsr lcd_draw_pcm_module jmp mouse_event_return mouse_event_to_midi_control: &movi 5,screen_mode jsr lcd_draw_midi_control jmp mouse_event_return mouse_event_to_midi_mtr: &movi 6,screen_mode jsr lcd_draw_midi_mtr jmp mouse_event_return mouse_event_00_up_move: lda mouse_sw and #up bne mouse_event_00_up_move_seq jmp mouse_event_00_down_move mouse_event_00_up_move_seq: &seloff lda main_point cmp #2 bne mouse_event_00_up_move_001 &movi 6,main_point &selon lcd_draw_main_message_6 jmp mouse_event_return mouse_event_00_up_move_001: cmp #3 bne mouse_event_00_up_move_002 &movi 2,main_point &selon lcd_draw_main_message_2 jmp mouse_event_return mouse_event_00_up_move_002: cmp #4 bne mouse_event_00_up_move_003 &movi 3,main_point &selon lcd_draw_main_message_3 jmp mouse_event_return mouse_event_00_up_move_003: cmp #5 bne mouse_event_00_up_move_004 &movi 4,main_point &selon lcd_draw_main_message_4 jmp mouse_event_return mouse_event_00_up_move_004: &movi 5,main_point &selon lcd_draw_main_message_5 jmp mouse_event_return mouse_event_00_down_move: lda mouse_sw and #down &equal_return &seloff lda main_point cmp #2 bne mouse_event_00_down_move_001 &movi 3,main_point &selon lcd_draw_main_message_3 jmp mouse_event_return mouse_event_00_down_move_001: cmp #3 bne mouse_event_00_down_move_002 &movi 4,main_point &selon lcd_draw_main_message_4 jmp mouse_event_return mouse_event_00_down_move_002: cmp #4 bne mouse_event_00_down_move_003 &movi 5,main_point &selon lcd_draw_main_message_5 jmp mouse_event_return mouse_event_00_down_move_003: cmp #5 bne mouse_event_00_down_move_004 &movi 6,main_point &selon lcd_draw_main_message_6 jmp mouse_event_return mouse_event_00_down_move_004: &movi 2,main_point &selon lcd_draw_main_message_2 jmp mouse_event_return mouse_event_return: stz mouse_sw rts ;##### MIDI 8-Track MTR Mode Screen ##### lcd_draw_midi_mtr: jsr lcd_draw_menu_back_screen &write lcd_draw_mada_mada rts lcd_draw_mada_mada: db 4,5,'・・・ スンマヘンナア。 マダ デキテ オランノドスエ。',tail ;##### MIDI System Controller Screen ##### lcd_draw_midi_control: jsr lcd_draw_menu_back_screen &write lcd_draw_mada_mada rts ;##### MIDI Monitor Screen ##### lcd_draw_midi_monitor: jsr lcd_draw_menu_back_screen &write lcd_draw_midi_monitor_data &movi 5,erase_point stz lcd_era_h stz moni_point &movi 81,lcd_add_l stz lcd_add_h &movi 46h,lcd+1 &move lcd_add_l,lcd &move lcd_add_h,lcd &movi 59h,lcd+1 ; Cousor ON &movi 17h,lcd rts lcd_draw_midi_monitor_data: db 2,3,'=== MIDI Signal Stream Monitor ===',tail ;##### MIDI Stream Monitor ##### lcd_midi_monitor_display: lda rxdata cmp #0feh &equal_return sta lcd_hex_data jsr lcd_display_hex_data inc moni_point lda moni_point cmp #57 bne lcd_midi_monitor_001 &movi 1,lcd_add_h bra lcd_midi_monitor_002 lcd_midi_monitor_001: cmp #65 bne lcd_midi_monitor_002 stz moni_point stz lcd_add_h lcd_midi_monitor_002: ldx erase_point lda lcd_midi_display_address_table,x sta lcd_add_l jsr lcd_display_erase inc erase_point lda erase_point cmp #57 bne lcd_midi_monitor_003 &movi 1,lcd_era_h rts lcd_midi_monitor_003: cmp #65 ¬_equal_return stz erase_point stz lcd_era_h rts lcd_midi_display_address_table: db 81,84,87,90,93,96,99,102,105,108,111,114,117 db 121,124,127,130,133,136,139,142,145,148,151,154,157 db 161,164,167,170,173,176,179,182,185,188,191,194,197 db 201,204,207,210,213,216,219,222,225,228,231,234,237 db 241,244,247,250,253,0,3,6,9,12,15,18,21 ;##### LCD Erase Display ##### ; Input : lcd_era_h,lcd_add_l lcd_display_erase: &movi 46h,lcd+1 &move lcd_add_l,lcd &move lcd_era_h,lcd &movi 42h,lcd+1 lda #20h sta lcd sta lcd ldx moni_point lda lcd_midi_display_address_table,x sta lcd_add_l &movi 46h,lcd+1 &move lcd_add_l,lcd &move lcd_add_h,lcd &movi 42h,lcd+1 &movi '*',lcd &movi 46h,lcd+1 &move lcd_add_l,lcd &move lcd_add_h,lcd rts ;##### LCD HEX Data Dislay ##### ; Input : (lcd_add_h,lcd_add_l),lcd_hex_data lcd_display_hex_data_with_address: &movi 4ch,lcd+1 ; Right &movi 46h,lcd+1 &move lcd_add_l,lcd &move lcd_add_h,lcd lcd_display_hex_data: &movi 42h,lcd+1 lda lcd_hex_data lsr a lsr a lsr a lsr a tax lda hex_table,x sta lcd lda lcd_hex_data and #0fh tax lda hex_table,x sta lcd rts ;##### LCD Main Menu Draw ##### lcd_draw_main_menu: &movi 59h,lcd+1 ; Cousor OFF &movi 14h,lcd jsr lcd_draw_menu_back_screen &write lcd_draw_main_message_1 &write lcd_draw_main_message_2 &write lcd_draw_main_message_3 &write lcd_draw_main_message_4 &write lcd_draw_main_message_5 &write lcd_draw_main_message_6 lda main_point cmp #2 bne lcd_draw_main_next_03 &selon lcd_draw_main_message_2 rts lcd_draw_main_next_03: cmp #3 bne lcd_draw_main_next_04 &selon lcd_draw_main_message_3 rts lcd_draw_main_next_04: cmp #4 bne lcd_draw_main_next_05 &selon lcd_draw_main_message_4 rts lcd_draw_main_next_05: cmp #5 bne lcd_draw_main_next_06 &selon lcd_draw_main_message_5 rts lcd_draw_main_next_06: &selon lcd_draw_main_message_6 rts lcd_draw_main_message_1: db 2,3,'**** MAIN MENU **** by Y.Nagashima',tail lcd_draw_main_message_2: db 3,7,'[1] MIDI Signal Monitor',tail lcd_draw_main_message_3: db 4,7,'[2] ==DSP-01== Debug Tester',tail lcd_draw_main_message_4: db 5,7,'[3] PCM Percussion Tone Unit',tail lcd_draw_main_message_5: db 6,7,'[4] Japanese Word Processor',tail lcd_draw_main_message_6: db 7,7,'[5] MODEM Communication Control',tail ;##### Menu Back Screen ##### lcd_draw_menu_back_screen: &movi 4ch,lcd+1 ; Right &movi 46h,lcd+1 stz lcd stz lcd &movi 42h,lcd+1 lda #20h ldy #0 lcd_char_clear_loop_1: ldx #0 lcd_char_clear_loop_2: sta lcd inx cpx #40 bne lcd_char_clear_loop_2 iny cpy #8 bne lcd_char_clear_loop_1 lcd_draw_back_plane_black: &movi 4ch,lcd+1 ; Right &movi 46h,lcd+1 stz lcd &movi 10h,lcd &movi 42h,lcd+1 jsr lcd_draw_main_draw_sub_1 jsr lcd_draw_main_draw_sub_2 jsr lcd_draw_main_draw_sub_3 jsr lcd_draw_main_draw_sub_2 jsr lcd_draw_main_draw_sub_1 rts lcd_draw_main_draw_sub_1: ldx #0 lda #0ffh lcd_draw_main_loop_1: sta lcd inx cpx #40 bne lcd_draw_main_loop_1 rts lcd_draw_main_draw_sub_2: &movi 10000000b,lcd ldx #0 lda #0 lcd_draw_main_loop_2: sta lcd inx cpx #38 bne lcd_draw_main_loop_2 &movi 00000111b,lcd rts lcd_draw_main_draw_sub_3: ldy #0 lcd_draw_main_loop_3: &movi -0111111b,lcd ldx #0 lda #0ffh lcd_draw_main_loop_4: sta lcd inx cpx #38 bne lcd_draw_main_loop_4 &movi 111-0111b,lcd iny cpy #60 bne lcd_draw_main_loop_3 rts ;##### LCD Message Mask Cursor ON/OFF Routine ##### lcd_select_mask: ldy #0 lda (work+2),y sta work iny lda (work+2),y sta work+1 ldx #0 lcd_select_mask_loop_1: inx iny lda (work+2),y cmp #tail bne lcd_select_mask_loop_1 stx work+5 dec work+5 &movi 4fh,lcd+1 ; Down dec work asl work asl work asl work dec work &move work,adsp &movi 40,adsp+4 &move adsp+8,add_s_l_1 &move adsp+12,add_s_h_1 dec work+1 dec work+1 &move work+1,add_s_l_2 stz add_s_h_2 jsr adder_16 &move add_d_l,work+8 lda add_d_h ora #00010000b sta work+9 &movi 46h,lcd+1 &move work+8,lcd &move work+9,lcd &movi 42h,lcd+1 &movi 0ffh,work+6 lda work+4 bne lcd_select_mask_loop_2 &movi 11111000b,work+6 lcd_select_mask_loop_2: ldx #0 lcd_select_mask_loop_3: &move work+6,lcd inx cpx #9 bne lcd_select_mask_loop_3 ldy #0 lcd_select_mask_loop_4: inc work+8 &movi 46h,lcd+1 &move work+8,lcd &move work+9,lcd &movi 42h,lcd+1 ldx #0 lcd_select_mask_loop_5: &move work+4,lcd inx cpx #9 bne lcd_select_mask_loop_5 iny cpy work+5 bne lcd_select_mask_loop_4 inc work+8 &movi 46h,lcd+1 &move work+8,lcd &move work+9,lcd &movi 42h,lcd+1 &movi 0ffh,work+6 lda work+4 bne lcd_select_mask_loop_6 &movi 01111111b,work+6 lcd_select_mask_loop_6: ldx #0 lcd_select_mask_loop_7: &move work+6,lcd inx cpx #9 bne lcd_select_mask_loop_7 rts ;##### LCD Message Write Subroutine : Called from [&write] ##### lcd_write_message: ldy #0 lda (work+2),y sta work iny lda (work+2),y sta work+1 jsr lcd_write_address_set &movi 42h,lcd+1 lcd_write_message_loop: iny lda (work+2),y cmp #tail &equal_return sta lcd bra lcd_write_message_loop lcd_write_address_set: &movi 4ch,lcd+1 ; Right &movi 46h,lcd+1 dec work dec work+1 &move work,adsp &movi 40,adsp+4 &move adsp+8,add_s_l_1 &move adsp+12,add_s_h_1 &move work+1,add_s_l_2 stz add_s_h_2 jsr adder_16 &move add_d_l,lcd &move add_d_h,lcd rts ;##### LCD Window Initial Screen Draw ##### lcd_draw_initial: stz work+7 &movi 4fh,lcd+1 ; Down lcd_draw_initial_loop_1: &movi 46h,lcd+1 &move work+7,lcd &movi 10h,lcd &movi 42h,lcd+1 ldx #0 lcd_draw_initial_loop_2: &movi 55h,lcd &movi 0aah,lcd inx cpx #32 bne lcd_draw_initial_loop_2 inc work+7 lda work+7 cmp #40 bne lcd_draw_initial_loop_1 &movi 0cah,work+7 lcd_draw_initial_loop_3: &movi 46h,lcd+1 &move work+7,lcd &movi 13h,lcd &movi 42h,lcd+1 ldx #0 lcd_draw_initial_loop_4: stz lcd inx cpx #16 bne lcd_draw_initial_loop_4 inc work+7 lda work+7 cmp #0dch bne lcd_draw_initial_loop_3 &movi 095h,work+7 &inidraw lcd_draw_initial_data_1 &inidraw lcd_draw_initial_data_2 &inidraw lcd_draw_initial_data_3 &inidraw lcd_draw_initial_data_4 &inidraw lcd_draw_initial_data_5 &inidraw lcd_draw_initial_data_6 &inidraw lcd_draw_initial_data_5 &inidraw lcd_draw_initial_data_6 &inidraw lcd_draw_initial_data_7 &inidraw lcd_draw_initial_data_8 &inidraw lcd_draw_initial_data_9 &inidraw lcd_draw_initial_data_10 stz screen_mode rts lcd_draw_initial_sub: &movi 46h,lcd+1 &move work+7,lcd &movi 14h,lcd &movi 42h,lcd+1 ldy #0 lcd_draw_initial_loop_5: lda (work),y sta lcd iny cpy #7 bne lcd_draw_initial_loop_5 rts lcd_draw_initial_data_1: db 11100000b db 11100000b db 11100000b db 11111100b db 11100000b db 11100000b db 11100000b lcd_draw_initial_data_2: db 01110000b db 01110000b db 01110000b db 11110000b db 01110000b db 01110000b db 01110000b lcd_draw_initial_data_3: db 11111100b db 11100000b db 11100000b db 11111100b db 11100000b db 11100000b db 11111100b lcd_draw_initial_data_4: db 11110000b db 00000000b db 00000000b db 11000000b db 00000000b db 00000000b db 11110000b lcd_draw_initial_data_5: db 11100000b db 11100000b db 11100000b db 11100000b db 11100000b db 11100000b db 11111100b lcd_draw_initial_data_6: db 00000000b db 00000000b db 00000000b db 00000000b db 00000000b db 01110000b db 11110000b lcd_draw_initial_data_7: db 01111100b db 11100000b db 11100000b db 11100000b db 11100000b db 11100000b db 01111100b lcd_draw_initial_data_8: db 11100000b db 01110000b db 01110000b db 01110000b db 01110000b db 01110000b db 11100000b lcd_draw_initial_data_9: db 01110000b db 01110000b db 01110000b db 01110000b db 01110000b db 00000000b db 01110000b lcd_draw_initial_data_10: db 11100000b db 11100000b db 11100000b db 11100000b db 11100000b db 00000000b db 11100000b ;##### Mouse Address Check ##### mouse_point_check: inc mouse_timer lda mouse_timer cmp #3fh ¬_equal_return stz mouse_timer lda right_count cmp comp_level bmi mouse_check_next_left stz right_count stz left_count lda #00000100b sta mouse_sw bra mouse_check_next_up mouse_check_next_left: lda left_count cmp comp_level bmi mouse_check_next_up stz right_count stz left_count lda #00001000b sta mouse_sw mouse_check_next_up: lda up_count cmp comp_level bmi mouse_check_next_down stz up_count stz down_count lda mouse_sw ora #00000001b sta mouse_sw mouse_check_next_down: lda down_count cmp comp_level bmi mouse_check_next_result stz up_count stz down_count lda mouse_sw ora #00000010b sta mouse_sw mouse_check_next_result: lda mouse_sw &equal_return jsr msx_mouse_sw_event rts ;##### MSX Mouse Event Scan Routine ##### msx_mouse_check: inc msx_timer lda msx_timer beq msx_mouse_check_fourth cmp #7 beq msx_mouse_check_third cmp #6 beq msx_mouse_check_second cmp #5 beq msx_mouse_check_first rts msx_mouse_check_fourth: &movi 000-0101b,uart3+1 ; MSX Strobe to High rts msx_mouse_check_third: lda pia+1 and #00001111b ora msx_y_data sta msx_y_data lda msx_x_data cmp #0ffh beq msx_point_change_next lda msx_x_data bmi msx_point_change_minus_x clc adc left_count sta left_count bra msx_point_change_next msx_point_change_minus_x: eor #0ffh and #01111111b clc adc right_count sta right_count msx_point_change_next: lda msx_y_data cmp #0ffh &equal_return lda msx_y_data bmi msx_point_change_minus_y clc adc up_count sta up_count rts msx_point_change_minus_y: eor #0ffh and #01111111b clc adc down_count sta down_count rts msx_mouse_check_second: lda pia+1 tax &movi 000-0111b,uart3+1 ; MSX Strobe to Low txa asl a asl a asl a asl a sta msx_y_data rts msx_mouse_check_first: lda pia+1 tax &movi 000-0111b,uart3+1 ; MSX Strobe to Low txa asl a asl a asl a asl a sta msx_x_data &move msx_sw_buf,work+11 lda pia+1 lsr a eor #0ffh and #00010000b sta work+12 lda pia+1 asl a eor #0ffh and #00100000b ora work+12 sta work+12 and #00110000b sta msx_sw_buf ; ** This Position !! beq msx_mouse_scan_next eor work+11 beq msx_mouse_scan_next sta work+13 lda work+12 and work+13 beq msx_mouse_scan_next sta mouse_sw msx_mouse_scan_next: jsr led_display ; DEMO / Wait lda pia+1 and #00001111b ora msx_x_data sta msx_x_data &movi 000-0101b,uart3+1 ; MSX Strobe to High lda mouse_sw &equal_return jsr msx_mouse_sw_event rts ;##### MIDI Rx Sequence ##### rx_midi_sequence: ldx midi_r_end cpx midi_r_top &equal_return inc midi_r_end lda midi_r_fifo,x sta rxdata lda screen_mode cmp #2 bne rx_midi_not_monitor_mode jmp lcd_midi_monitor_display rx_midi_not_monitor_mode: lda rxdata bpl rxseq_running and #0f0h cmp #090h beq rxseq_status_event cmp #080h beq rxseq_status_event lda rxdata and #11111000b cmp #11111000b &equal_return stz midi_rsb rts rxseq_status_event: &move rxdata,midi_rsb stz midi_dcb rts rxseq_running: lda midi_rsb &equal_return and #0f0h cmp #90h bne rxseq_not_note_on lda midi_dcb bne rxseq_on_velocity inc midi_dcb &move rxdata,rxkeyno rts rxseq_on_velocity: stz midi_dcb lda midi_rsb and #0fh sta rxchannel lda rxdata beq rxseq_on_velo_zero sta rxspeed jsr dsp_on_event rts rxseq_on_velo_zero: jsr dsp_off_event rts rxseq_not_note_on: cmp #80h bne rxseq_not_note_off lda midi_dcb bne rxseq_off_velocity inc midi_dcb &move rxdata,rxkeyno rts rxseq_off_velocity: stz midi_dcb lda midi_rsb and #0fh sta rxchannel jsr dsp_off_event rts rxseq_not_note_off: stz midi_rsb rts ;##### MIDI Data Transfer Routine ##### tx_midi_sequence: ldx midi_t_end cpx midi_t_top &equal_return lda uart1+1 and #00000001b &equal_return inc midi_t_end lda midi_t_fifo,x sta uart1 rts ;##### Interrupt -- TIMER ##### int_timer: jmp int_seq_ret ;##### Interrupt -- MPU401 ##### int_mpu: jmp int_seq_ret ;##### Interrupt -- SIO ##### int_sio: lda uart3 jmp int_seq_ret ;##### Interrupt -- RS232C ##### int_rs232c: lda uart2 jmp int_seq_ret ;##### IRQ Sequence ##### int: pha phx phy lda pia eor #0ffh and #0fh asl a tax jmp (int_table),x int_seq_ret: ply plx pla rti int_table: dw int_seq_ret dw int_mpu dw int_sio,int_sio dw int_timer,int_timer dw int_timer,int_timer dw int_rs232c,int_rs232c,int_rs232c,int_rs232c dw int_rs232c,int_rs232c,int_rs232c,int_rs232c ;##### NMI Sequence ##### nmi: pha phx lda uart1 cmp #0feh beq nmiret cmp #0f8h beq nmiret ldx midi_r_top sta midi_r_fifo,x inc midi_r_top nmiret: plx pla rti ;##### LED Display Demonstration Routine ##### led_display: inc led_demo lda led_demo cmp #3 bne led_display_seq_1 stz led_demo inc led_demo+1 led_display_seq_1: lda led_demo+1 and #01111111b tax lda led_display_data,x eor #0ffh sta pia+2 rts led_display_data: db 00000001b,00000010b,00000100b,00001000b,00010000b,00100000b,01000000b,10000000b db 11000000b,11100000b,11110000b,11111000b,11111100b,11111110b,01111111b,00111111b db 00011111b,00001111b,00000111b,00000011b,00000001b,00000000b,00010000b,00000000b db 00001000b,00000000b,00011000b,00100100b,01000010b,10000001b,01000010b,00100100b db 00011000b,00000000b,00011000b,00111100b,01111110b,11111111b,01111110b,00111100b db 00011000b,00000000b,00000001b,00000011b,00000101b,00001010b,00010100b,00101000b db 01010000b,10100000b,01000000b,10000000b,00000010b,00001000b,00100000b,10000000b db 00000001b,00000010b,00000101b,00001010b,00010101b,00101010b,01010101b,10101010b db 01010100b,10101000b,01010000b,10100000b,01000000b,10000000b,11000000b,01100000b db 10110000b,11011000b,01101100b,10110110b,11011011b,01101101b,00110110b,00011011b db 00001101b,00000110b,00000011b,00000001b,00000000b,10000001b,01000010b,00100100b db 00011000b,00100100b,01000010b,10000001b,11000011b,11100111b,11111111b,11100111b db 11000011b,10000001b,00000000b,10000000b,00000001b,01000000b,00000010b,00100000b db 00000100b,00010000b,00001000b,00010000b,00000100b,00100000b,00000010b,01000000b db 00000001b,10000000b,00000000b,10000000b,11000000b,01100000b,00110000b,00011000b db 00001100b,00000110b,00000011b,00000001b,10000000b,00100000b,00001000b,00000010b ;##### 16 Bit Adder ##### adder_16: clc lda add_s_l_1 adc add_s_l_2 sta add_d_l lda add_s_h_1 adc add_s_h_2 sta add_d_h rts ;##### 16 Bit Substract ##### sub_16: sec lda add_s_l_1 sbc add_s_l_2 sta add_d_l lda add_s_h_1 sbc add_s_h_2 sta add_d_h rts ;##### Waiting Timer ##### wait_long: ldx #0 wait_loop_1: jsr wait_short inx bne wait_loop_1 rts wait_short: ldy #0 wait_loop_2: nop iny bne wait_loop_2 rts ;##### HEX Data Table ##### hex_table: db '0123456789ABCDEF' ;##### Debug Use : Debug Address Table Area ##### org debug dw tone_data_base ;##### Interrupt/Reset Vector Table ##### org vector dw nmi dw start dw int end