1214 ;=============== ; Synth Editor ;=============== INCLUDELIB MIDI INCLUDELIB INOUT INCLUDELIB FILE INCLUDE MIDI.INC INCLUDE INOUT.INC INCLUDE FILE.INC INCLUDE DOS.INC DOSSEG .MODEL SMALL .386 .STACK mode_change EQU 4eh parm_change EQU 41h combi EQU 00h edit_combi EQU 01h program EQU 02h edit_prg EQU 03h multi EQU 04h global EQU 05h hilite EQU 0fh normal EQU 07h .DATA glob_chn db 0 mode db ? param db ? value db ? msb db ? main_y db ? mainpage equ $ mtxt1 db 'Oscillator',13,10 mlen1 equ $-mtxt1 mtxt2 db 'Pitch EG',13,10 mlen2 equ $-mtxt2 mtxt3 db 'Cutoff MG',13,10 mlen3 equ $-mtxt3 mtxt4 db 'After Touch',13,10 mlen4 equ $-mtxt4 mtxt5 db 'Joy Stick',13,10 mlen5 equ $-mtxt5 mtxt6 db 'Osc-1 Pitch EG',13,10 mlen6 equ $-mtxt6 mtxt7 db 'Osc-1 Pitch MG',13,10 mlen7 equ $-mtxt7 mtxt8 db 'VDF-1',13,10 mlen8 equ $-mtxt8 mtxt9 db 'VDF-1 EG',13,10 mlen9 equ $-mtxt9 mtxt10 db 'VDA-1',13,10 mlen10 equ $-mtxt10 mtxt11 db 'VDA-1 EG',13,10 mlen11 equ $-mtxt11 db '$' mtxttab dw mtxt1,mtxt2,mtxt3,mtxt4,mtxt5,mtxt6,mtxt7,mtxt8,mtxt9,mtxt10,mtxt11 mlentab dw mlen1,mlen2,mlen3,mlen4,mlen5,mlen6,mlen7,mlen8,mlen9,mlen10,mlen11 subtab dw sub1,sub2,sub3,sub4,sub5,sub6,sub7,sub8,sub9,sub10,sub11 key db ? scan db ? .CODE .STARTUP call init call draw_mainscr mainlp: mov ah,00h int 16h cmp ah,50h jz curmove cmp ah,48h jz curmove cmp al,13 jz newpage cmp al,27 jz quit jmp mainlp curmove: mov scan,ah cmp scan,48h jz curup cmp main_y,12 jz mainlp jmp over_curup curup: cmp main_y,2 jz mainlp over_curup: xor bx,bx mov bl,main_y sub bx,2 shl bx,1 mov dh,main_y mov dl,0 mov cx,mlentab[bx] mov bp,mtxttab[bx] call normtext cmp scan,48h jz curup2 inc main_y add bx,2 jmp over_curup2 curup2: dec main_y sub bx,2 over_curup2: mov dh,main_y mov dl,0 mov cx,mlentab[bx] mov bp,mtxttab[bx] call hitext jmp mainlp newpage: xor bx,bx mov bl,main_y sub bx,2 shl bx,1 call subtab[bx] jmp mainlp ;------------------------------------------------------------------------ .data kuktxt db 'Hej du!','$' .code sub1 PROC call clrscr mov ah,9 mov dx,offset kuktxt int 21h mov ah,0 int 16h call draw_mainscr ret sub1 ENDP sub2 PROC ret sub2 ENDP sub3 PROC ret sub3 ENDP sub4 PROC ret sub4 ENDP sub5 PROC ret sub5 ENDP sub6 PROC ret sub6 ENDP sub7 PROC ret sub7 ENDP sub8 PROC ret sub8 ENDP sub9 PROC ret sub9 ENDP sub10 PROC ret sub10 ENDP sub11 PROC ret sub11 ENDP init PROC call sbmidi_init mov mode,edit_prg call chg_mode call draw_mainscr mov main_y,2 ret init ENDP draw_mainscr PROC call clrscr call hidecur mov dh,2 mov dl,0 call setcur mov ah,9 mov dx,offset mainpage int 21h mov dh,main_y mov dl,0 mov cx,mlen1 mov bp,offset mtxt1 call hitext ret draw_mainscr ENDP quit PROC call clrscr call showcur call sbmidi_exit .EXIT quit ENDP hitext PROC push bx mov ah,13h mov al,0 mov bh,0 mov bl,hilite mov si,@data mov es,si int 10h pop bx ret hitext ENDP normtext PROC push bx mov ah,13h mov al,0 mov bh,0 mov bl,normal mov si,@data mov es,si int 10h pop bx ret normtext ENDP chg_mode PROC call send_exhdr mov bl,mode_change call out_midi mov bl,mode call out_midi mov bl,00h call out_midi mov bl,EOX call out_midi ret chg_mode ENDP chg_param PROC call send_exhdr mov bl,parm_change call out_midi mov bl,param call out_midi mov bl,00h call out_midi mov dl,value or dl,dl jnl unsigned and dl,01111111b mov value,dl mov msb,00000001b jmp over_unsigned unsigned: mov msb,0 over_unsigned: mov bl,value call out_midi mov bl,msb call out_midi mov bl,EOX call out_midi ret chg_param ENDP send_exhdr PROC mov bl,SysEx call out_midi mov bl,42h call out_midi mov bl,30h add bl,glob_chn call out_midi mov bl,36h call out_midi ret send_exhdr ENDP out_midi PROC call sbmidi_put mov cx,8000h dly: loop dly ret out_midi ENDP END . 0