Listing of file='SENDB.MAC;01' on disk='vmedia/taylor_5-sector.ccvf'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; SEND A MORSE CHARACTER ; ENTRY SEND PUBLIC DOTTIM,CHSPD EXTRN ENCODE ;ENCODED MORSE TABLE EXTRN SAVE ;CONTEXT SAVE EXTOT EQU 7 ;EXTERNAL OUTPUT PORT EXTBUF EQU 81D6H ;BUFFER FOR EXTRN. OUTPUT TICKS EQU 52 ;BASIC TIMING UNIT FOR ; TIMER #2 = 52*64 MICROSEC TIMER2 EQU 10 ;OUTPUT PORT FOR TIMER #2 TM2INT EQU 81C8H ;TIMER #2 INTERRUPT VECTOR SEND: ANI 7FH ;MAKE SURE IT'S ASCII CPI 127 ;IS IT DELETE ? JZ ERROR ;YES! OUTPUT ERROR CODE LXI H,ENCODE ;INDEX INTO MORSE CODE TABLE MOV C,A MVI B,0 DAD B MOV A,M STA CODE ;SAVE THE MORSE FOR LATER ORA A JNZ XMIT ;NULLS COUNT AS SPACES CALL DOTOFF ;I.E. ANY CHARACTER WITH NO JMP SPACE ;MORSE EQUIVALENT IS A SPACE ; ; MAIN SENDING LOOP ; XMIT: LDA CODE ;GET NEXT DOT OR DASH ADD A STA CODE JZ SPACE ;FINISHED IF NOTHING LEFT LDA DOTTIM ;GET DOT TIME JNC MARK ;MULTIPLY BY THREE IF A DASH MOV B,A ADD A ADD B MARK: STA ONTIM CALL DOTON ;SEND THE DOT OR DASH CALL DOTOFF ;FOLLOWED BY ONE DOT SPACE JMP XMIT ;AND REPEAT ; ; SPACE BETWEEN CHARACTERS ; SPACE: CALL DOTOFF ;ALWAYS ONE DOT SPACE CALL CHRSPC ;PLUS INTER-CHARACTER SPACE RET ;.............................................................. ; ; OUTPUT 8 DOTS - ERROR CODE ; ERROR: MVI A,8 ERR10: PUSH PSW LDA DOTTIM STA ONTIM CALL DOTON CALL DOTOFF POP PSW DCR A JNZ ERR10 CALL CHRSPC RET ;.............................................................. ; ; GENERATE A TONE - DOT OR DASH ; DOTON: LDA ONTIM ;SET UP COUNTER FOR DELAY STA COUNT MVI A,64 ;TURN THE BELL ON STA EXTBUF OUT EXTOT CALL WAIT ;WAIT OUT THE TONE DURATION XRA A ;TURN BELL OFF STA EXTBUF OUT EXTOT RET ;.............................................................. ; ; WAIT ONE DOT TIME WITH NO SOUND ; DOTOFF: LDA DOTTIM ;SETUP DELAY COUNTER STA COUNT XRA A STA EXTBUF OUT EXTOT CALL WAIT RET ;.............................................................. ; ; WAIT ONE CHARACTER SPACE WITH NO SOUND ; CHRSPC: LDA CHSPD PUSH PSW CS01: CALL DOTOFF POP PSW DCR A PUSH PSW JNZ CS01 POP PSW RET ;.............................................................. ; ; WAIT - PERFORM A DELAY USING INTERRUPTS ; ; INTERRUPTS ARE ENABLED I.E. KEYBOARD STILL WORKS ; DURING THE DELAY. ; ; DURATION IS STORED IN LOCATION "COUNT". ; TOTAL DELAY IS COUNT*TICKS*64 MICROSECONDS. ; WAIT: DI ;HOLD OFF INTERRUPTS MVI A,0C3H STA TM2INT ;SET UP TIMER #2 JUMP VECTOR LXI H,REPT SHLD TM2INT+1 MVI A,TICKS ;START TIMER #2 OUT TIMER2 WAIT10: EI ;LOOP UNTIL COUNTDOWN COMPLETE LDA COUNT ORA A JNZ WAIT10 RET REPT: CALL SAVE ;SAVE REGISTERS LDA COUNT DCR A ;DECREMENT COUNTER STA COUNT RZ ; AND RETURN IF ZERO MVI A,TICKS ;OTHERWISE, RESTART TIMER OUT TIMER2 RET ;.............................................................. ; ; DATA STORAGE AREA ; CODE: DB 0 ;TEMPORARY STAORAGE FOR CHR CODE DOTTIM: DB 20 ONTIM: DB 20 CHSPD: DB 2 COUNT: DB 1 END