home *** CD-ROM | disk | FTP | other *** search
- ;----------------------------------------------------
- ;routines for equalizers and trace in hsctrack.
- ;----------------------------------------------------
-
- ;---------------------------------------
- ;installs user-charset (ASCII 0-2)
- ;---------------------------------------
-
- InstallChar PROC
-
- pusha
- push es
-
- mov ax,1110h ;load chars with BIOS
- mov bx,0800h ;(who cares about speed)
- mov cx,0003h
- mov dx,0000h
- push cs
- pop es
- mov bp,OFFSET xxCharSet
- int 10h
-
- pop es
- popa
- ret
-
- xxCharSet: ;definition of the characters
- db 00000000b
- db 00000000b
- db 00000000b
- db 00000000b
- db 00000000b
- db 00000000b
- db 00000000b
- db 00000000b
-
- db 00000000b
- db 11100000b
- db 11100000b
- db 11100000b
- db 11100000b
- db 11100000b
- db 00000000b
- db 00000000b
-
- db 00000000b
- db 11101110b
- db 11101110b
- db 11101110b
- db 11101110b
- db 11101110b
- db 00000000b
- db 00000000b
-
- InstallChar ENDP
-
- ;---------------------------------------
- ;link equalizer routines into music irq
- ;---------------------------------------
-
- StartEqual PROC
-
- pusha
- push ds
-
- mov ah,6 ;_HscPlayer function 6, bl=1
- mov bl,1 ; -> install user irq
- mov dx,OFFSET Equalizer
- push cs
- pop ds
- call far ptr _HscPlayer
- call ClearEqual
-
- pop ds
- popa
- ret
-
- StartEqual ENDP
-
- ;---------------------------------------
- ;take equalizer out of the irq
- ;---------------------------------------
-
- StopEqual PROC
-
- pusha
-
- mov ah,6 ;_HscPlayer funtion 6, bl=0
- mov bl,0 ; -> remove user irq
- call far ptr _HscPlayer
- call ClearEqual ;and delete screen
-
- popa
- ret
-
- StopEqual ENDP
-
- ;---------------------------------------
- ;clear equalizer area
- ;---------------------------------------
-
- ClearEqual PROC
-
- pusha ;blah, blah, nothing important
- push es
-
- mov di,VRAM
- mov es,di
-
- mov si,00h
-
- xx_equ_loop: mov di,cs:xx_equ_base+si
- mov ax,1200h
- stosw
- stosw
- stosw
-
- add di,2
- mov ax,1300h
- stosw
- stosw
-
- add di,2
- mov cx,08h
- mov ax,1a00h
- rep stosw
-
- add si,2
- cmp si,18
- jne xx_equ_loop
-
- mov di,14ach
- mov ax,1e20h
- mov es:di,ax
- mov es:di+2,ax
- mov es:di+10,ax
- mov es:di+12,ax
- mov es:di+20,ax
- mov es:di+22,ax
-
- pop es
- popa
- ret
-
- xx_equ_base dw 0e66h,0f06h,0fa6h
- dw 1046h,10e6h,1186h
- dw 1226h,12c6h,1366h
-
- ClearEqual ENDP
-
- ;---------------------------------------
- ;the real equalizer routines
- ;---------------------------------------
-
- Equalizer PROC
-
- pusha
- push ds
- push es
-
- push cs
- pop es
- mov si,OFFSET xx_hsc_note
- mov ah,07h ;_HscPlayer function 7
- call far ptr _HscPlayer ; -> get player state
-
- mov si,VRAM
- mov es,si
-
- push cs
- pop ds
- mov cx,00h
-
- xx_equ_loop: mov si,cx ;put equalizer values to bars
- add si,OFFSET xx_hsc_equalizer
- mov bl,ds:si
- inc bl
- and bx,1fh
- shl bx,4
- add bx,OFFSET xx_equ_string
-
- mov si,cx
- shl si,1
- mov di,cs:xx_equ_base+si
- mov dl,02h
-
- cmp es:di,dl
- ja xx_equ_j1
- mov ax,cs:bx
- mov es:di,ax
-
- xx_equ_j1: cmp es:di+2,dl ;ignore this check
- ja xx_equ_j2 ;it's a dirty way for clipping
- mov ax,cs:bx+2 ;windows
- mov es:di+2,ax
-
- xx_equ_j2: cmp es:di+4,dl
- ja xx_equ_j3
- mov ax,cs:bx+4
- mov es:di+4,ax
-
- xx_equ_j3: cmp es:di+6,dl
- ja xx_equ_j4
- mov ax,cs:bx+6
- mov es:di+6,ax
-
- xx_equ_j4: cmp es:di+8,dl
- ja xx_equ_j5
- mov ax,cs:bx+8
- mov es:di+8,ax
-
- xx_equ_j5: cmp es:di+10,dl
- ja xx_equ_j6
- mov ax,cs:bx+10
- mov es:di+10,ax
-
- xx_equ_j6: cmp es:di+12,dl
- ja xx_equ_j7
- mov ax,cs:bx+12
- mov es:di+12,ax
-
- xx_equ_j7: cmp es:di+14,dl
- ja xx_equ_j8
- mov ax,cs:bx+14
- mov es:di+14,ax
-
- xx_equ_j8: mov si,cx ;flash note on equalizer peaks
- add si,OFFSET xx_hsc_playing
- mov ax,1312h
- cmp ds:si,BYTE PTR 0ffh
- jne xx_equ_j9
- mov ax,1b1ah
- xx_equ_j9: mov bx,cx
- shl bx,1
- mov di,cs:xx_equ_base+bx
- sub di,0dh
- mov es:di,al
- mov es:di+2,al
- mov es:di+4,al
- mov es:di+8,ah
- mov es:di+10,ah
- mov ds:si,BYTE PTR 00h
-
- mov si,cx ;put actual note to screen
- add si,OFFSET xx_hsc_note
- mov al,ds:si
- sub al,1
- jc xx_equ_no_note
- xor ah,ah
- mov bl,12
- div bl
- mov dl,al
- mov al,ah
- mov bl,3
- mul bl ;note*3 = offset string in cs:Noten
- mov si,ax
- add si,offset cs:Noten
-
- mov bx,cx
- shl bx,1
- mov ax,cs:xx_instr_pos+bx
- sub ax,0400h
-
- push ds
- push cs
- pop ds
- call PutString
- pop ds
-
- push es
- mov bx,cx
- shl bx,1
- mov di,cs:xx_equ_base+bx
- sub di,10
- add dl,49
- mov ax,VRAM
- mov es,ax
- mov BYTE PTR es:[di],dl
- pop es
-
- xx_equ_no_note: mov si,cx ;put actual instrument to screen
- add si,OFFSET xx_hsc_instr
- mov bl,ds:si
- mov di,cx
- shl di,1
- mov ax,cs:xx_instr_pos+di
- call PrintByte
-
- inc cx
- cmp cx,09h
- je xx_equ_no_loop
- jmp xx_equ_loop
-
- xx_equ_no_loop: mov si,OFFSET xx_hsc_pattern ;and actual pattern
- mov bl,ds:si
- mov ax,0621h
- call PrintByte
- cmp cs:HelpAktiv,BYTE PTR 00h
- jne xx_equ_no_flw
- mov si,OFFSET xx_hsc_track ;and track
- mov bl,ds:si
- add ah,5
- call PrintByte
- mov si,OFFSET xx_hsc_position ;and position
- mov bl,ds:si
- add ah,5
- call PrintByte
- cmp cs:TLine,bl
- je xx_equ_no_flw
-
- cmp cs:FollowPlay,BYTE PTR 00h ;and here the trace, who cares
- je xx_equ_no_flw
- mov si,OFFSET xx_hsc_track
- mov bl,ds:si
- mov cs:Track,bl
- mov si,OFFSET xx_hsc_position
- mov bl,ds:si
- mov cs:TLine,bl
- call PutTrackLine
- mov si,OFFSET xx_hsc_pattern
- mov bl,ds:si
- mov cs:PattLine,bl
- call PutPTable
-
- xx_equ_no_flw: pop es
- pop ds
- popa
- retf
-
- xx_instr_pos dw 0717h,0718h,0719h ;the string offsets on screen
- dw 071ah,071bh,071ch
- dw 071dh,071eh,071fh
-
- xx_equ_base dw 0e74h,0f14h,0fb4h
- dw 1054h,10f4h,1194h
- dw 1234h,12d4h,1374h
-
- ;the equalizer bars .. i was so lazy and this looks so lame
-
- xx_equ_string db 0,1ah,0,1ah,0,1ah,0,1ah,0,1ah,0,1eh,0,1eh,0,1ch ;0
- db 1,1ah,0,1ah,0,1ah,0,1ah,0,1ah,0,1eh,0,1eh,0,1ch ;1
- db 2,1ah,0,1ah,0,1ah,0,1ah,0,1ah,0,1eh,0,1eh,0,1ch ;2
- db 2,1ah,1,1ah,0,1ah,0,1ah,0,1ah,0,1eh,0,1eh,0,1ch ;3
- db 2,1ah,2,1ah,0,1ah,0,1ah,0,1ah,0,1eh,0,1eh,0,1ch ;4
- db 2,1ah,2,1ah,1,1ah,0,1ah,0,1ah,0,1eh,0,1eh,0,1ch ;5
- db 2,1ah,2,1ah,2,1ah,0,1ah,0,1ah,0,1eh,0,1eh,0,1ch ;6
- db 2,1ah,2,1ah,2,1ah,1,1ah,0,1ah,0,1eh,0,1eh,0,1ch ;7
- db 2,1ah,2,1ah,2,1ah,2,1ah,0,1ah,0,1eh,0,1eh,0,1ch ;8
- db 2,1ah,2,1ah,2,1ah,2,1ah,1,1ah,0,1eh,0,1eh,0,1ch ;9
- db 2,1ah,2,1ah,2,1ah,2,1ah,2,1ah,0,1eh,0,1eh,0,1ch ;a
- db 2,1ah,2,1ah,2,1ah,2,1ah,2,1ah,1,1eh,0,1eh,0,1ch ;b
- db 2,1ah,2,1ah,2,1ah,2,1ah,2,1ah,2,1eh,0,1eh,0,1ch ;c
- db 2,1ah,2,1ah,2,1ah,2,1ah,2,1ah,2,1eh,1,1eh,0,1ch ;d
- db 2,1ah,2,1ah,2,1ah,2,1ah,2,1ah,2,1eh,2,1eh,0,1ch ;e
- db 2,1ah,2,1ah,2,1ah,2,1ah,2,1ah,2,1eh,2,1eh,1,1ch ;f
- db 2,1ah,2,1ah,2,1ah,2,1ah,2,1ah,2,1eh,2,1eh,2,1ch ;10
-
- xx_hsc_note db 9 dup (0) ;the array for the function 07h
- xx_hsc_instr db 9 dup (0)
- xx_hsc_equalizer db 9 dup (0)
- xx_hsc_playing db 9 dup (0)
- xx_hsc_pattern db 0
- xx_hsc_track db 0
- xx_hsc_position db 0
- xx_hsc_on_off db 0
-
- Equalizer ENDP
-