


































































































































































































































setbaud 1,9600,7,e,1
mode_opus300
movd    "@D/n",s14,250
sett    10
wait    tf_sign




movd    " Alcatel 4400 (DHS 3) DIGITAL Interface V2.1/n",s0,100
out     s0,100,c4
movd    " * MED800.DW0 * BY HOERHAGER JOSEF AOHE       03//09/n",s0,100
out     s0,100,c4
movd    " Ready for working !/l/n",s0,100
out     s0,100,c4
error_main:
mode_opus300
call    init_ahl
setc    2,3
sendsig   ans_sign,c1           
jmp     main


main:
setl    8,1
main_loop:
jmp     main_skip1

main_skip1:
setl    8,1
sett    100                             
wait    im_sign,tf_sign,rx_sign,ans_sign,cntl_sign
setl    8,2
case    tf_sign,test_rx_state
decc    1                 
jnz     main_loop

jmp     main_loop       




test_rx_state:
case    rx_sign,test_cntl_state
call    opus_rxstate
jmp     main_loop

mess_error:
movd    "  M0: Error on Input-message/n",s0,0
out     s0,0,c4
out     s14,250,c4
jmp     main_loop

test_cntl_state:
case    cntl_sign,test_ans_state
call    opus_cntlstate
jmp     main_loop

test_ans_state:
case    ans_sign,test_im_state      
readb   s0,100,1
jz      main

sendsig ans_sign,c0      
compd   "RX220E???7000   ",s0,100
jz      reset_to_link
compd   "RX220A???00000",s0,100
jnz     skip_opto_test
reset_to_link:
setc    2,2
movd    "0",s14,210
setl    15,0
jmp     main_loop

skip_opto_test:
compd   "RX00",s0,100
jnz     test_for_mx













test_0a:



skip_calc:
writeb  s0,100,0
sendsig ans_sign,c1















movd    "T",s0,105
movd    "O/n",s0,109
out     s0,100,c4
movs    s0,100,s11,0,150
opuswrs s11,4,150       
out     s14,250,c4





































jmp     main_loop



test_for_mx:
compd   "MX",s0,100
jnz     test_for_next
out     s0,100,c4
movd    "TX22",s11,0
call    opus_txstate
jmp     main



test_for_next:
out     s0,100,c4
movd    "  M2: WRONG Message from the buffer/n",s0,100
out     s0,100,c4
jmp     main




test_im_state:
case    im_sign,main_loop      
in      s0,100
compd   "stop",s0,100
jz      wait_start1
writeb  s0,10,0
sendsig ans_sign,c1
anss    s0,100,c4
jmp     main

wait_start1:
ansd    "MODE STOP/n"

wait_start:
wait    im_sign
case    im_sign,wait_start
in      s0,100
anss    s0,100
compd   "start",s0,100
jnz     wait_start
movd    "MODE RUN/n",s0,100
out     s0,100,c4
jmp     main












init_ahl:
setp    0x7f00,0x03
setp	0x7f01,0x00
setp    0x7f03,0x03     ;select crc-calculation Notification Server

mode_opus300

movd    "AHL-RX_TX0          /n",s11,200
movd    "AHL-RX_M0           /n",s10,0
movd    "AHL-TX_M0           /n",s11,0
movd    " AHL-State IDLE/n",s11,211
out     s11,200,c4
setc    1,3     
ret




mode_opus300                    

opus_txstate:
movd    " AHL-State TRANSMIT/n",s11,211
out     s11,200,c4

out     s11,0,c4
setc    12,1

l_data_stx:
clear   cntl_sign               
opuswrs s11,14,150       
jz      wait_ackn_data          



mode_opus300                    
movd    " TIMEOUT ERROR ON WRITE TO CHANNEL AHL (xoff)!/n",s11,211
out     s11,200,c4
decc    12
jnz     l_data_stx
opus_err_timeout:
mess_max_retry:
movd    " Max retry reached!/n",s11,211
out     s11,200,c4
movd    " ERR_TO/n",s11,211
out     s11,200,c4
jmp     nz_ret

wait_ackn_data:
sett    40          
wait    cntl_sign,tf_sign,rx_sign
case    rx_sign,do_cntl_stx
call    opus_rxstate
jmp     wait_ackn_data

do_cntl_stx:
case    cntl_sign,to_data_stx
compc   14,6                    
jnz     data_nak
movd    "RECEIVED *ACK*/n",s11,211
out     s11,200,c4
jmp     z_ret

data_nak:
compc   14,21                   
jnz     data_wrong
movd    " ERROR ON DATA-SEND: RECEIVED *NAK*!/n",s11,211
out     s11,200,c4
decc    12          
jnz     l_data_stx              
jmp     mess_max_retry

data_wrong:
movd    " ERROR ON DATA-SEND: RECEIVED *   *!/n",s11,211
movc    14,s11,242        
out     s11,200,c4
decc    12          
jnz     l_data_stx
jmp     mess_max_retry

to_data_stx:
movd    " ERROR ON DATA-SEND: WAIT ACKN. TIMEOUT!/n",s11,211
out     s11,200,c4
decc    12          
jnz     l_data_stx
jmp     mess_max_retry





opus_cntlstate:
movd    " ERROR CNTL-SIGN:    RECEIVED *   *!/n",s11,211
movc    14,s11,242        
out     s11,200,c4
ret




opus_rxstate:
movd    "RX00",s10,10       
movd    " AHL-State RECEIVE/n",s11,211
out     s11,200,c4
opusrds s10,14
jz      nz_ret
compc   15,0                    
jnz     error_rxopus



movd    " Sending *ACK*/n",s11,211
out     s10,0,c4
out     s11,200,c4

writeb  s10,10,1
sendsig ans_sign,c0

jmp     z_ret

error_rxopus:
movd    " Sending *NAK*/n",s11,211
out     s10,0,c4
out     s11,200,c4

wrchar  nak
jmp     nz_ret





z_ret:
setc    0,255
incc    0
ret

nz_ret:	
setc    0,0
incc    0
ret




end


