PAGE 60,132 TITLE Assembly routine for C. ;----------------------------------------------- ; : ; usage: : ; name() : ;----------------------------------------------- EXTRN _voice_drv : DWORD PUBLIC _ctv_version, _ctv_io_addx, PUBLIC _ctv_intr_num, _ctv_initial PUBLIC _ctv_speaker, _ctv_status_addx PUBLIC _ctv_output, _ctv_input PUBLIC _ctv_terminate, _ctv_uninstall PUBLIC _ctv_pause, _ctv_continue PUBLIC _ctv_break_loop GET_VERSION_NUM EQU 0 SET_BASE_IO_ADDX EQU 1 SET_INTERRUPT_NUM EQU 2 INITIAL_DRIVER EQU 3 ON_OFF_SPEAKER EQU 4 SET_STATUS_ADDX EQU 5 OUTPUT_VOICE EQU 6 INPUT_VOICE EQU 7 TERMINATE_PROCESS EQU 8 UNINSTALL_DRIVER EQU 9 PAUSE_VOICE EQU 10 CONTINUE_VOICE EQU 11 BREAK_LOOP EQU 12 SET_USER_FUNCTION EQU 13 _TEXT SEGMENT WORD PUBLIC 'CODE' _TEXT ENDS _DATA SEGMENT WORD PUBLIC 'DATA' _DATA ENDS CONST SEGMENT WORD PUBLIC 'CONST' CONST ENDS _BSS SEGMENT WORD PUBLIC 'BSS' _BSS ENDS DGROUP GROUP CONST, _BSS, _DATA ASSUME CS: _TEXT, DS: DGROUP, SS: DGROUP _DATA SEGMENT WORD PUBLIC 'DATA' ASSUME CS: _TEXT, DS: DGROUP, SS: DGROUP _DATA ENDS _TEXT SEGMENT WORD PUBLIC 'CODE' _ctv_version PROC MOV BX,GET_VERSION_NUM CALL _voice_drv RET _ctv_version ENDP _ctv_io_addx PROC PUSH BP MOV BP,SP MOV BX,SET_BASE_IO_ADDX MOV AX,[BP+4] CALL _voice_drv POP BP RET _ctv_io_addx ENDP _ctv_intr_num PROC PUSH BP MOV BP,SP MOV BX,SET_INTERRUPT_NUM MOV AX,[BP+4] CALL _voice_drv POP BP RET _ctv_intr_num ENDP _ctv_initial PROC MOV BX,INITIAL_DRIVER CALL _voice_drv RET _ctv_initial ENDP _ctv_speaker PROC PUSH BP MOV BP,SP MOV BX,ON_OFF_SPEAKER MOV AX,[BP+4] CALL _voice_drv POP BP RET _ctv_speaker ENDP STATUS_STK STRUC DW ? DW ? STATUS_ADDX DD ? STATUS_STK ENDS _ctv_status_addx PROC PUSH BP MOV BP,SP PUSH ES PUSH DI LES DI,DWORD PTR [BP + STATUS_ADDX] MOV BX,SET_STATUS_ADDX CALL _voice_drv POP DI POP ES POP BP RET _ctv_status_addx ENDP OUTPUT_STK STRUC DW ? DW ? OUTPUT_BUF DD ? OUTPUT_STK ENDS _ctv_output PROC PUSH BP MOV BP,SP PUSH ES PUSH DI MOV BX,OUTPUT_VOICE LES DI,[BP+OUTPUT_BUF] CALL _voice_drv POP DI POP ES POP BP RET _ctv_output ENDP INPUT_STK STRUC DW ? DW ? INPUT_BUF DD ? BUFSIZE_L DW ? BUFSIZE_H DW ? SR DW ? INPUT_STK ENDS _ctv_input PROC PUSH BP MOV BP,SP PUSH ES PUSH DI MOV BX,INPUT_VOICE MOV AX,[BP+SR] MOV DX,[BP+BUFSIZE_H] MOV CX,[BP+BUFSIZE_L] LES DI,[BP+INPUT_BUF] CALL _voice_drv POP DI POP ES POP BP RET _ctv_input ENDP _ctv_terminate PROC PUSH BP MOV BX,TERMINATE_PROCESS CALL _voice_drv POP BP RET _ctv_terminate ENDP _ctv_uninstall PROC PUSH BP MOV BX,UNINSTALL_DRIVER CALL _voice_drv POP BP RET _ctv_uninstall ENDP _ctv_pause PROC MOV BX,PAUSE_VOICE CALL _voice_drv RET _ctv_pause ENDP _ctv_continue PROC MOV BX,CONTINUE_VOICE CALL _voice_drv RET _ctv_continue ENDP _ctv_break_loop PROC PUSH BP MOV BP,SP MOV AX,[BP+4] MOV BX,BREAK_LOOP CALL _voice_drv POP BP RET _ctv_break_loop ENDP _TEXT ENDS END