;
;**********************************************************
;  COMMON AFS DEFINES
;
#define csra    0Xfc81
#define cra     0Xfc82
#define csrb    0Xfc89
#define crb     0Xfc8a
#define csrc    0Xfc91
#define csrd    0xfc99
#define baud_300        0X44
#define baud_1200       0X66
#define baud_2400       0X88
#define baud_4800       0X99
#define baud_9600       0Xbb
#define calc_p1         s15,210
#define calc_p2         s15,220
#define calc_erg        s15,230
#define calc_rest       s15,240
#define calc_erg_flag   s15,204
#define dt_str          s15,180
#define fdt_str         s15,150
#define lfdt_str        21
#define dt_str_year     s15,180
#define dt_str_month    s15,182
#define dt_str_day      s15,184
#define dt_str_weekday  s15,186
#define dt_str_hour     s15,188
#define dt_str_minute   s15,190
;
#define dbs_para        s15,100
#define dbs_search_str  s15,0
#define dbs_str         s14
#define dbs_str_0       s14,0
;
;**********************************************************
; MODEM definition
;
#define modem_init_str          "ATX3/n"
#define connect_str_300         "CONNECT/n"
#define connect_str_1200        "CONNECT 1200/n"
#define connect_str_2400        "CONNECT 2400/n"
#define connect_str_v42         "CONNECT"
#define dial_tone_str           "NO DIALTONE"
#define busy_str                "BUSY"
#define ring_str                "RING"
#define modem_error_str         "ERROR"
;
;**********************************************************
; MODEM system parameter
;
#define MODEM_ON_CH1
#define output_str		s2,200
#define modem_str               s2,100
//      working area for the modem
#define result_cnt              12
//      result counter = 12
#define reco_cnt                11
;
;**********************************************************
; MODEM result messages
;
#define modem_mess_connect      0
#define modem_mess_ring         1
#define modem_mess_no_ring      2
#define modem_mess_no_dialtone  3
#define modem_mess_busy         4
#define modem_mess_error        5
;
;**********************************************************
; MODEM result errors
;
#define modem_init_error        6
#define error_timeout_connect   7
;
;**********************************************************
; ERROR NUMBER
;
#define receive_error_num       10
#define timeout_err_num         11
;
;**********************************************************
; DATABASE definitionen
;
#define dbs_1_format            "1 27648 10 12 1 20 35 2 8 4 25 4 8 8 4 4  "
#define l_enable                 1
#define l_afs_name               20
#define l_calling_str            35
#define l_num_insert             2
#define l_calling_timeout        8
#define l_start_baudrate         4
#define l_last_connect           21
#define l_last_reco              4
#define l_transfered_reco        8
#define l_time_next_call         8
#define l_number_retry           4
#define l_wait_connect           4
;
#define dbs_enable              s14,0
#define dbs_afs_name            s14,1
#define dbs_calling_str         s14,21
#define dbs_num_insert          s14,56
#define dbs_insert_number       s14,57
#define dbs_calling_timeout     s14,58
#define dbs_start_baudrate      s14,66
#define dbs_last_connect        s14,70
#define dbs_last_reco           s14,95
#define dbs_transfered_reco     s14,99
#define dbs_time_next_call      s14,107
#define dbs_number_retry        s14,115
#define dbs_wait_connect        s14,119
;
;**********************************************************
; PARAMETER permanent storage string
;
#define cfg_str                 s3,240          //  "Config"
#define cfg_value               "Config"
#define old_weekday_str         s3,230
#define current_time_str        s3,220
;
;**********************************************************
#define work_str                s2,0
#define reco_trigger            s2,3
#define call_reco_ext           s2,4
#define call_reco_ext1          s2,5
;**********************************************************
#define mon_str                 s4,0
#define mon_str_time            s4,6
#define mon_str_p1              s4,3
#define mon_str_p2              s4,5
#define mon_str_data            s4,7
#define mon_str_displ           s4,20
;
;**********************************************************
#define hist_buffer             0
;
#define mess_str                s3,0
#define mess_1_str              s3,100
#define mess_str_dt             s3,6
#define mess_str_mess           s3,30
#define mess_str_rnum           s3,60
#define mess_str_num            s3,65
#define lrn_mess                s3,38
#define tr_mess                 s3,46
#define tnc_mess                s3,60
;
;**********************************************************
; MESSAGES laenge einer message ist max 40 Zeichen
;
#define mess_init_konst         "MOD 1>                                                                /n"
;
;                               "----------------------------------------"
#define mess_reset_str          "                                        "
#define afs_reset_mess          "AFS RESET > Startup Modul 1 V2.0        "
#define afs_init_mess           "AFS INIT > clear HISTORY and DATABASE   "
#define afs_connect_mess        "CONNECT to AFS                          "
#define mess_num_err_mess       "MESS-NUM different                      "
#define insert_err_mess         "ERROR on INSERT > EXT# is 4 digit       "
#define end_mess                "END lrn:     tr:          tnc:          "
;**********************************************************
; ERROR MESSAGES NUMBER 1 -20
;
#define err_mess_error          "ERROR IN ERROR NUMBER                   "
#define err_mess_1              "MODEM RING                              "
#define err_mess_2              "MODEM NO RING                           "
#define err_mess_3              "MODEM NO DIALTONE                       "
#define err_mess_4              "MODEM BUSY                              "
#define err_mess_5              "MODEM ERROR                             "
#define err_mess_6              "MODEM INIT ERROR                        "
#define err_mess_7              "MODEM TIMEOUT WAITING CONNECT           "
#define err_mess_8              "ERROR 8                                 "
#define err_mess_9              "ERROR 9                                 "
#define err_mess_10             "RECEIVEING ERROR (NAK)                  "
#define err_mess_11             "TIMEOUT ERROR ON WAITING FOR RECO       "
#define err_mess_12             "ERROR 12                                "
#define err_mess_13             "ERROR 13                                "
#define err_mess_14             "ERROR 14                                "
#define err_mess_15             "ERROR 15                                "
#define err_mess_16             "ERROR 16                                "
#define err_mess_17             "ERROR 17                                "
#define err_mess_18             "ERROR 18                                "
#define err_mess_19             "ERROR 19                                "
#define err_mess_20             "ERROR 20                                "
;
;**********************************************************
;  AFS - RESET LABEL:
;
        setbaud 1,9600,8,n,1
        mode_reco
        setrts  off
        jmp     main
;
;**********************************************************
; MAIN PROGRAMM FOR AKTIV MODEM MODUL 1
;
main:
        call    configuration
        sett    200
        setl    9,1
        ;
main_for_ever:
        wait    tf_sign,im_sign
        case    tf_sign,main_im_test
        setl    9,2
        call    task_time
        setl    9,1
        sett    255
        jmp     main_for_ever
;
main_im_test:
        case    im_sign,main_for_ever
        call    task_monitor
        jmp     main_for_ever
;
;**********************************************************
; TASK TIME
;
task_time:
        call    calc_current_time
        comps   current_time_str,calc_erg,8
        jnz     task_1_time
        ret                                     ;same time
;
task_1_time:
        movs    calc_erg,current_time_str,8     ;save new time
        comps   old_weekday_str,dt_str_weekday,2
        jz      task_2_time                     ;same day
        movs    dt_str_weekday,old_weekday_str,2        ;save new one
;**************************************
;
; subb from dbs 1 reco 0-e time_next_call - 24x60
; if erg<0 set time_next_call=0
;
        movd    "1  ",dbs_para
        acall   pfirst_dbs
;
task_1l1_time:
        acall   read_dbs
        compd   "Y",dbs_enable      ;reco enabled
        jnz     task_1l2_time
        movs    dbs_time_next_call,calc_p1,l_time_next_call
        movd    "1440  ",calc_p2
        acall   subb
        compd   "O",calc_erg_flag
        jnz     task_1l3_time
        movd    "00000000",calc_erg
;
task_1l3_time:
        movs    calc_erg,dbs_time_next_call,l_time_next_call
        acall   write_dbs
;
task_1l2_time:
        acall   pnext_dbs
        jz      task_1l1_time
;**************************************
; test time_next_call
;
task_2_time:
        acall   pfirst_dbs
;
task_2l1_time:
        acall   read_dbs
        compd   "Y",dbs_enable      ;reco enabled
        jnz     task_2l2_time
;
; test time to call
;
        movs    current_time_str,calc_p1,8
        movs    dbs_time_next_call,calc_p2,l_time_next_call
        acall   comp
        compd   "GT",calc_erg_flag
        jnz     task_2l2_time
;
;**************************************
; call AFS
;
; setup number of recos transfered
; (clear)
        movd    "00000000",calc_p1
        movd    "00000000",calc_erg
        movd    "1 ",calc_p2
;
;create message
;
        acall   fread_dt
        movs    fdt_str,mess_str_dt,lfdt_str
        movd    mess_reset_str,mess_str_mess
        movs    dbs_afs_name,mess_str_mess,l_afs_name
        call    write_history
;
; setup starting baudrate
;
        compd   "9600",dbs_start_baudrate
        jnz     test_4800
        call    br_set_9600
        jmp     task_3_time
;
test_4800:
        compd   "4800",dbs_start_baudrate
        jnz     test_2400
        call    br_set_4800
        jmp     task_3_time
;
test_2400:
        compd   "2400",dbs_start_baudrate
        jnz     test_1200
        call    br_set_2400
        jmp     task_3_time
;
test_1200:
        compd   "1200",dbs_start_baudrate
        jnz     test_set_def
        call    br_set_1200
        jmp     task_3_time
;
test_set_def:
        call   br_set_2400
;
task_3_time:
;
; init modem
;
        setc    result_cnt,3
        call    modem_init
        compc   result_cnt,0
        jz      task_ok1_time
        call    error_handler
        jmp     task_2l2_time
;
task_ok1_time:
;
; send dialing string to modem
;
        movs    dbs_calling_str,work_str,l_calling_str
        replace " /n",work_str,l_calling_str
        wrs     work_str,80
;
; waiting for connect 60 sec
;
        setc    result_cnt,60
        call    modem_wait_connect
        compc   result_cnt,0
        jz      task_ok2_time
        call    error_handler
        call    modem_hangup
        jmp     task_2l2_time
;
;**************************************
; MODEM CONNECT TO AFS
;
task_ok2_time:
        acall   fread_dt
        movs    fdt_str,mess_str_dt,lfdt_str
        movd    afs_connect_mess,mess_str_mess
        call    write_history
;
; change rx mode
;
        mode_stx
        sett    20
        wait    tf_sign
        movc    dbs_last_reco,reco_cnt
;
; start request with "O/n"
;
        setc    result_cnt,3            ;number of retrys
loop_1_request:
	movd	"O/n",output_str
	wrs	output_str,20
	out	output_str,c4
wait_1_reco:
        sett    60
        wait    tf_sign,rx_sign
        case    rx_sign,reco_timeout
        stxrds  work_str                ;read string
        jz      wait_1_reco
	compc	15,0
        jz      test_1_messnum
	;
	out	work_str,c4
	movd	"Sending NAK/n",output_str
	out	output_str,c4
	;
        wrchar  nak
        decc    result_cnt
        jnz     loop_1_request
        setc    result_cnt,receive_error_num
terminate_error:
        wrd     "E/n"
        call    error_handler
        mode_reco
        call    modem_hangup
        jmp     task_2l2_time
;
;**************************************
;
reco_timeout:
        decc    result_cnt
        jnz     loop_1_request
        setc    result_cnt,timeout_err_num
        jmp     terminate_error
;
test_1_messnum:
	;
	out	work_str,c4
	movd	"Sending ACK/n",output_str
	out	output_str,c4
	;
        wrchar  ack
;
; test mess_number receive with expected
;
        movc    reco_cnt,modem_str
        comps   work_str,modem_str,3
        jz      send_request
;
; message different message number
;
        movd    mess_init_konst,mess_str
        acall   fread_dt
        movs    fdt_str,mess_str_dt,lfdt_str
        movd    mess_num_err_mess,mess_str_mess
        movs    work_str,mess_str_rnum,3
        movs    modem_str,mess_str_num,3
        call    write_history
;
;setup new message number
;
        movc    work_str,reco_cnt
;
;**************************************
;
send_request:
;
; start request with "R/n"
;
        incc    reco_cnt
send_rq_mess:
        wrd     "R/n"
	;
	movd	"Sending R/n",output_str
	out	output_str,c4
	;
	setc	result_cnt,3		;number of retrys
        jmp     wait_2_reco
        mode_stx
;
loop_2_request:
        wrd     "O/n"
	;
	movd	"Sending O/n",output_str
	out	output_str,c4
	;
	setc	result_cnt,3		;number of retrys
wait_2_reco:
        sett    60
        wait    tf_sign,rx_sign
        case    rx_sign,reco_2_timeout
        stxrds  work_str                ;read string
	jz	wait_2_reco
	compc	15,0
        jz      test_2_messnum
	;
	out	work_str,c4
	movd	"Sending NAK/n",output_str
	out	output_str,c4
	;
	wrchar	nak
        decc    result_cnt
        jnz     loop_2_request
        setc    result_cnt,receive_error_num
terminate2_error:
        wrd     "E/n"
        call    error_handler
        mode_reco
        call    modem_hangup
;
; save connect parameter
;
        acall   fread_dt
        movs    fdt_str,dbs_last_connect,lfdt_str
        movc    reco_cnt,dbs_last_reco
        movs    calc_erg,dbs_transfered_reco,8
        acall   write_dbs
        jmp     task_2l2_time
;
;**************************************
;
reco_2_timeout:
        setc    result_cnt,timeout_err_num
        jmp     terminate2_error
;
test_2_messnum:
	;
	out	work_str,c4
	movd	"Sending ACK/n",output_str
	out	output_str,c4
	;
        wrchar  ack
;
; test mess_number receive with expected
;
	compd	"ERR",work_str
	jz	send_rq_mess
	movc	reco_cnt,modem_str
        comps   work_str,modem_str,3
        jz      save_reco
;
; message different message number
;
        movd    mess_init_konst,mess_str
        acall   fread_dt
        movs    fdt_str,mess_str_dt,lfdt_str
        movd    mess_num_err_mess,mess_str_mess
        movs    work_str,mess_str_rnum,3
        movs    modem_str,mess_str_num,3
        call    write_history
;
;setup new message number
;
        movc    work_str,reco_cnt
;
; analyse and save reco
;
save_reco:
        compd   "E/n",reco_trigger
        jz      receive_end
;
	compd	"C",reco_trigger
	jz	no_error
        out     work_str,c4
        jmp     send_request
        ;
; svae reco in buffer
; first test if insert is aktive and insert
;
no_error:
        compd   "Y",dbs_num_insert
        jnz     no_insert
        compd   "??? ",call_reco_ext
        jz      do_insert
        movd    mess_init_konst,mess_str
        acall   fread_dt
        movs    fdt_str,mess_str_dt,lfdt_str
        movd    insert_err_mess,mess_str_mess
        call    write_history
        jmp     no_insert
;
do_insert:
        movs    call_reco_ext,modem_str,4
        movs    dbs_insert_number,call_reco_ext,1
        movs    modem_str,call_reco_ext1,3
;
no_insert:
        call    trans_reco_inc          ;number of transfered reco +1
        buffwr  reco_trigger
        buffst                          ;
        jnz     send_request
;
receive_end:
	;
	out	work_str,c4
	movd	"Sending E/n",output_str
	out	output_str,c4
	;
        wrd     "E/n"                   ;terminate
        mode_reco
        call    modem_hangup
;
; save connect parameter
;
        acall   fread_dt
        movs    fdt_str,dbs_last_connect,lfdt_str
        movc    reco_cnt,dbs_last_reco
        movs    calc_erg,dbs_transfered_reco,8
        call    calc_next_call
        movs    calc_erg,dbs_time_next_call,l_time_next_call
        acall   write_dbs
;
;**********************************************************
; create END_MESS
	movd	mess_init_konst,mess_str
        acall   fread_dt
        movs    fdt_str,mess_str_dt,lfdt_str
	movd	end_mess,mess_str_mess
	movs	dbs_last_reco,lrn_mess,l_last_reco
	movs	dbs_transfered_reco,tr_mess,l_transfered_reco
	movs	dbs_time_next_call,tnc_mess,l_time_next_call
        call    write_history
;
        jmp     task_2l2_time
;
;**************************************
;
task_2l2_time:
        acall   pnext_dbs
        jz      task_2l1_time
        ret
;
;**********************************************************
; ERROR HANDLER
;
error_handler:
        movd    mess_init_konst,mess_str
        acall   fread_dt
        movs    fdt_str,mess_str_dt,lfdt_str
;
        movd    "    ",mess_1_str
        movc    result_cnt,mess_1_str
        jr      mess_1_str
;
        jmp     error_error
        jmp     error_1
        jmp     error_2
        jmp     error_3
        jmp     error_4
        jmp     error_5
        jmp     error_6
        jmp     error_7
        jmp     error_8
        jmp     error_9
        jmp     error_10
        jmp     error_11
        jmp     error_12
        jmp     error_13
        jmp     error_14
        jmp     error_15
        jmp     error_16
        jmp     error_17
        jmp     error_18
        jmp     error_19
        jmp     error_20
        jmp     error_error
        jmp     error_error
        jmp     error_error
        jmp     error_error
        jmp     error_error
        jmp     error_error
        jmp     error_error
        jmp     error_error
        jmp     error_error
        jmp     error_error
;
error_error:
        movd    err_mess_error,mess_str_mess
        jmp     error_hand_exit
;
error_1:
        movd    err_mess_1,mess_str_mess
        jmp     error_hand_exit
;
error_2:
        movd    err_mess_2,mess_str_mess
        jmp     error_hand_exit
;
error_3:
        movd    err_mess_3,mess_str_mess
        jmp     error_hand_exit
;
error_4:
        movd    err_mess_4,mess_str_mess
        jmp     error_hand_exit
;
error_5:
        movd    err_mess_5,mess_str_mess
        jmp     error_hand_exit
;
error_6:
        movd    err_mess_6,mess_str_mess
        jmp     error_hand_exit
;
error_7:
        movd    err_mess_7,mess_str_mess
        jmp     error_hand_exit
;
error_8:
        movd    err_mess_8,mess_str_mess
        jmp     error_hand_exit
;
error_9:
        movd    err_mess_9,mess_str_mess
        jmp     error_hand_exit
;
error_10:
        movd    err_mess_10,mess_str_mess
        jmp     error_hand_exit
;
error_11:
        movd    err_mess_11,mess_str_mess
        jmp     error_hand_exit
;
error_12:
        movd    err_mess_12,mess_str_mess
        jmp     error_hand_exit
;
error_13:
        movd    err_mess_13,mess_str_mess
        jmp     error_hand_exit
;
error_14:
        movd    err_mess_14,mess_str_mess
        jmp     error_hand_exit
;
error_15:
        movd    err_mess_15,mess_str_mess
        jmp     error_hand_exit
;
error_16:
        movd    err_mess_16,mess_str_mess
        jmp     error_hand_exit
;
error_17:
        movd    err_mess_17,mess_str_mess
        jmp     error_hand_exit
;
error_18:
        movd    err_mess_18,mess_str_mess
        jmp     error_hand_exit
;
error_19:
        movd    err_mess_19,mess_str_mess
        jmp     error_hand_exit
;
error_20:
        movd    err_mess_20,mess_str_mess
        jmp     error_hand_exit
;
error_hand_exit:
        call    write_history
        ret
;
;
;**********************************************************
;
trans_reco_inc:
        acall   add
        movs    calc_erg,calc_p1,8
        ret
;
;**********************************************************
; CALC time for next call
;
calc_next_call:
	movs	dbs_calling_timeout,calc_p1,l_calling_timeout
	movs	current_time_str,calc_p2,8
	acall	add
        ret
;
;**********************************************************
; CONFIGURATION
;
configuration:
        call    init_mess_str
        compd   cfg_value,cfg_str
        jz      afs_is_config
        ;
        movd    cfg_value,cfg_str               ;set config
        call    init_history
        call    dbs_init
        acall   fread_dt
        movs    fdt_str,mess_str_dt,lfdt_str
        movd    afs_init_mess,mess_str_mess
        call    write_history
        movs    dt_str_weekday,old_weekday_str,2
        call    calc_current_time
        movs    calc_erg,current_time_str,8
        ;
afs_is_config:
        acall   fread_dt
        movs    fdt_str,mess_str_dt,lfdt_str
        movd    afs_reset_mess,mess_str_mess
        call    write_history
        call    br_set_9600
        ret
;
init_mess_str:
        movd    mess_init_konst,mess_str
        ret
;
;**********************************************************
; WRITE TO HISTORY-BUFFER
;       input:  mess_str
;       output: -
;               write mess_str into history_buffer and to ch4
;               if history_buffer is full read one reco and write
;               it to ch5
;
write_history:
        writeb  mess_str,hist_buffer
        jz      wr_hist_end
        readb   mess_1_str,hist_buffer
        out     mess_1_str,c5
        jmp     write_history
;
wr_hist_end:
        out     mess_str,c4
        ret
;
;**********************************************************
; CALCULATE current time in minuts of day
;
calc_current_time:
;
; current_time = hour x 60 + minute
;
        acall   read_dt
        movd    "        ",calc_p1              ;clear parameter 1
        movd    "60      ",calc_p2              ;faktor for hour multiply
        movs    dt_str_hour,calc_p1,2
        acall   mul
        movs    dt_str_minute,calc_p1,2
        movs    calc_erg,calc_p2,8
        acall   add
        ret
;
;**********************************************************
;**********************************************************
; DATABASE init
;
dbs_init:
        movd    dbs_1_format,dbs_para
        acall   open_dbs
        clear   dbs_str_0
        movd    "N",dbs_str,0
        acall   init_dbs
        ret
;
;**********************************************************
; INIT HISTORY - BUFFER  Buffer in modul 0
;
; begin = inp = outp = 0x1000
; buffl = free = inpl = outpl = 0x6d00
;
init_history:
;
        setp    0XD300,0x10     ;beginn adresse high
        setp    0XD301,0x00     ;beginn adresse low
;
        setp    0Xd302,0x6d     ;bufferlaenge high
        setp    0XD303,0x00     ;bufferlaenge low
;
        setp    0Xd304,0x6d     ;anzahl bytes free high
        setp    0XD305,0x00     ;anzahl bytes free low
;
        setp    0Xd306,0x10     ;input zeiger high
        setp    0XD307,0x00     ;input zeiger low
;
        setp    0Xd308,0x6d     ;input laenge bis bufferende high
        setp    0XD309,0x00     ;input laenge bis bufferende low
;
        setp    0Xd30A,0x10     ;output zeiger high
        setp    0XD30B,0x00     ;output zeiger low
;
        setp    0Xd30C,0x6d     ;output laenge bis bufferende high
        setp    0XD30D,0x00     ;output laenge bis bufferende low
;
        setp    0XD30E,0x00     ;modulnummer falls in modulmem
;
        ret
;

;**********************************************************
; TASK MONITOR
;
task_monitor:
; call from main task
;
        movd    "                                                            ",mon_str
        in      mon_str
        compd   "init/n",mon_str
        jnz     mon_dr
        movd    "    ",cfg_str
        ansd    "OK init/n"
        call    configuration
        ret
;
mon_dr:
        compd   "dr",mon_str
        jnz     mon_sr
        movd    "1     ",dbs_para
        movs    mon_str_p1,s15,102,1
        acall   preco_dbs
        jnz     mon_sr_reco_err
        acall   read_dbs
;
; display reco of configuration
;
        clear   mon_str
        movd    "/n",s4,75
        movd    "0:ENABLE",mon_str
        movs    dbs_enable,mon_str_displ,l_enable
        out     mon_str,c4
;
        clear   mon_str
        movd    "/n",s4,75
        movd    "1:AFS NAME",mon_str
        movs    dbs_afs_name,mon_str_displ,l_afs_name
        out     mon_str,c4
;
        clear   mon_str
        movd    "/n",s4,75
        movd    "2:CALLING STR",mon_str
        movs    dbs_calling_str,mon_str_displ,l_calling_str
        out     mon_str,c4
;
        clear   mon_str
        movd    "/n",s4,75
        movd    "3:NUMBER INSERT",mon_str
        movs    dbs_num_insert,mon_str_displ,l_num_insert
        out     mon_str,c4
;
        clear   mon_str
        movd    "/n",s4,75
        movd    "4:CALLING TIMEOUT",mon_str
        movs    dbs_calling_timeout,mon_str_displ,l_calling_timeout
        out     mon_str,c4
;
        clear   mon_str
        movd    "/n",s4,75
        movd    "5:START BAUDRATE",mon_str
        movs    dbs_start_baudrate,mon_str_displ,l_start_baudrate
        out     mon_str,c4
;
        clear   mon_str
        movd    "/n",s4,75
        movd    "6:LAST CONNECT",mon_str
        movs    dbs_last_connect,mon_str_displ,l_last_connect
        out     mon_str,c4
;
        clear   mon_str
        movd    "/n",s4,75
        movd    "7:LAST RECO NUM",mon_str
        movs    dbs_last_reco,mon_str_displ,l_last_reco
        out     mon_str,c4
;
        clear   mon_str
        movd    "/n",s4,75
        movd    "8:TRANSFERED RECO",mon_str
        movs    dbs_transfered_reco,mon_str_displ,l_transfered_reco
        out     mon_str,c4
;
        clear   mon_str
        movd    "/n",s4,75
        movd    "9:TIME NEXT CALL",mon_str
        movs    dbs_time_next_call,mon_str_displ,l_time_next_call
        out     mon_str,c4
;
        ansd    "/n"
        ret
;
mon_sr:
        compd   "sr",mon_str
        jnz     mon_dh
        replace "/n ",mon_str,50
        compd   "? ? ",mon_str_p1
        jnz     mon_sr_err
        movd    "1     ",dbs_para
        movs    mon_str_p1,s15,102,1
        acall   preco_dbs
        jnz     mon_sr_reco_err
        acall   read_dbs
        movc    mon_str_p2,result_cnt
        incc    result_cnt
        decc    result_cnt
        jnz     reco_e1
        movs    mon_str_data,dbs_enable,l_enable
        jmp     mon_sr_exit
;
reco_e1:
        decc    result_cnt
        jnz     reco_e2
        movs    mon_str_data,dbs_afs_name,l_afs_name
        jmp     mon_sr_exit
;
reco_e2:
        decc    result_cnt
        jnz     reco_e3
        movs    mon_str_data,dbs_calling_str,l_calling_str
        jmp     mon_sr_exit
;
reco_e3:
        decc    result_cnt
        jnz     reco_e4
        movs    mon_str_data,dbs_num_insert,l_num_insert
        jmp     mon_sr_exit
;
reco_e4:
        decc    result_cnt
        jnz     reco_e5
        movs    mon_str_data,dbs_calling_timeout,l_calling_timeout
        jmp     mon_sr_exit
;
reco_e5:
        decc    result_cnt
        jnz     reco_e6
        movs    mon_str_data,dbs_start_baudrate,l_start_baudrate
        jmp     mon_sr_exit
;
reco_e6:
        decc    result_cnt
        jnz     reco_e7
        movs    mon_str_data,dbs_last_connect,l_last_connect
        jmp     mon_sr_exit
;
reco_e7:
        decc    result_cnt
        jnz     reco_e8
        movs    mon_str_data,dbs_last_reco,l_last_reco
        jmp     mon_sr_exit
;
reco_e8:
        decc    result_cnt
        jnz     reco_e9
        movs    mon_str_data,dbs_transfered_reco,l_transfered_reco
        jmp     mon_sr_exit
;
reco_e9:
        decc    result_cnt
        jnz     reco_e_error
        movs    mon_str_data,dbs_time_next_call,l_time_next_call
        jmp     mon_sr_exit
;
reco_e_error:
        ansd    "ERROR WRONG ELEMENT!/n"
        ret
;
mon_sr_exit:
        acall   write_dbs
        ansd    "OK!/n"
        ret
;
mon_sr_err:
        ansd    "ERROR PARAMETER!/n"
        ret
;
mon_sr_reco_err:
        ansd    "ERROR RECO not found!"
        ret
;
;
mon_dh:
        compd   "dh",mon_str
        jnz     mon_da
        movc    mon_str_p1,result_cnt
;
dh_loop:
        readb   mon_str,hist_buffer
        jz      dh_emty
        out     mon_str,c4
        decc    result_cnt
        jnz     dh_loop
        ansd    "MORE data/n"
        ret
;
dh_emty:
        ansd    "HISTORY BUFFER EMTY!/n"
        ret
;
mon_da:
        compd   "da",mon_str
        jnz     mon_err
        movd    "TIME:               /n",mon_str
        movs    current_time_str,mon_str_time,8
        anss    mon_str
        ret
;
mon_err:
        ansd    "ERROR CMD MODUL 1/n"
        ret
;
;
;**********************************************************
;
;  MODEM HANGUP !
;  input : -
;  output: -
;
modem_hangup:
        mode_reco
        sett    20
        wait    tf_sign
        wrd     "+++"
        sett    20
        wait    tf_sign
;
        wrd     "ATH/n"
;
;        setrts  off
;        sett    20
;        wait    tf_sign
;        setrts  on
hangup_wait:
        sett    20
        wait    tf_sign,rx_sign
        case    rx_sign,hangup_to
        rds     modem_str
        jz      hangup_wait
        out     modem_str,c4
        jmp     hangup_wait
;
hangup_to:
        ret
;
;
;**********************************************************
;
;  MODEM INIT !
;  INIT MODEM at current baudrate
;   mode must be set to mode_reco
;
;  input : result_cnt = anzahl der versuche
;  output: Z-flag wenn okay sonst NZ
;
modem_init:
;        call    modem_hangup
        wrd     modem_init_str
lmodem_init:
        sett    100
        wait    rx_sign,tf_sign
        case    rx_sign,modem_init_timeout
        rds     modem_str
        jz      lmodem_init
;
        out     modem_str,c4
        compd   "OK/n",modem_str
        jnz     lmodem_init
        setc    result_cnt,0            ;return z
	sett	10
	wait	tf_sign
	ret
;
modem_init_timeout:
        decc    result_cnt
        jnz     modem_init
        setc    result_cnt,modem_init_error
        ret
;
;
;**********************************************************
;
;  WAIT RING !
;  input : result_cnt =  wartezeit in 10 sec einheit
;  output: result_cnt: ring modem_mess_ring
;                      no ring after timeout
;                           modem_mess_no_ring
;
wait_ring:
        sett    100     ;10 sec warten auf
        wait    rx_sign,tf_sign
        case    rx_sign,wait_ring_timeout
        rds     modem_str
        jz      wait_ring
        out     modem_str,c4         ;send input c4
        compd   ring_str,modem_str
        jnz     wait_ring
        setc    result_cnt,modem_mess_ring
        ret
;
wait_ring_timeout:
        decc    result_cnt
        jnz     wait_ring
        setc    result_cnt,modem_mess_no_ring
        ret
;
;
;**********************************************************
;
;  MODEM ANSWER RING AND WAIT CONNECT !
;  input : result_cnt timeout for waiting connect in 1 sec einheit
;  output: result_cnt : modem_mess_no_carrier
;                       modem_mess_connect
;
modem_answer:
modem1_offh:
        sett    10
        wait    tf_sign
        wrd     "ATA/n"         ;write string answer
;
modem_wait_connect:
l_modem_offh:
        sett    10
        wait    rx_sign,tf_sign
        case    rx_sign,modem_offh_timeout
        rds     modem_str
        jz      l_modem_offh
        out     modem_str,c4
        ;
        compd   connect_str_1200,modem_str
        jnz     test_br_2400
        call    br_set_1200
        setc    result_cnt,modem_mess_connect
        ret
        ;
test_br_2400:
        compd   connect_str_2400,modem_str
        jnz     test_br_300
        call    br_set_2400
        setc    result_cnt,modem_mess_connect
         ret
        ;
test_br_300:
        compd   connect_str_300,modem_str
        jnz     test_br_v42
        call    br_set_300
        setc    result_cnt,modem_mess_connect
        ret
;
test_br_v42:
        compd   connect_str_v42,modem_str
        jnz     test_dialtone
        setc    result_cnt,modem_mess_connect
        ret
;
test_dialtone:
        compd   dial_tone_str,modem_str
        jnz     test_busy
        setc    result_cnt,modem_mess_no_dialtone
        ret
;
test_busy:
        compd   busy_str,modem_str
        jnz     test_modem_error
        setc    result_cnt,modem_mess_busy
        ret
;
test_modem_error:
        compd   modem_error_str,modem_str
        jnz     test_ring
        setc    result_cnt,modem_mess_error
        ret
;
test_ring:
        compd   ring_str,modem_str
        jnz     l_modem_offh
        jmp     modem1_offh
        ;        
modem_offh_timeout:
        decc    12
        jnz     l_modem_offh
        setc    result_cnt,error_timeout_connect
        ret
;
;
#ifdef MODEM_ON_CH1
;**********************************************************
;
;  CHANNEL 1 BAUDRATE 300 !
;
br_set_300:
        setp    crb,0x2a        ;reset rx and disable rx and tx
        setp    crb,0x3a        ;reset tx
        setp    crb,0x4a        ;reset error status
        setp    csrb,baud_300   ;set baudrate
        mode_reco
        setp    crb,0x05        ;enable rx and tx
        sett    2
        wait    tf_sign
        ret
        ;
;**********************************************************
;
;  CHANNEL 1 BAUDRATE 1200 !
;
br_set_1200:
        setp    crb,0x2a        ;reset rx and disable rx and tx
        setp    crb,0x3a        ;reset tx
        setp    crb,0x4a        ;reset error status
        setp    csrb,baud_1200  ;set baudrate
        mode_reco
        setp    crb,0x05        ;enable rx and tx
        sett    2
        wait    tf_sign
        ret
        ;
;**********************************************************
;
;  CHANNEL 1 BAUDRATE 2400 !
;
br_set_2400:
        setp    crb,0x2a        ;reset rx and disable rx and tx
        setp    crb,0x3a        ;reset tx
        setp    crb,0x4a        ;reset error status
        setp    csrb,baud_2400  ;set baudrate
        mode_reco
        setp    crb,0x05        ;enable rx and tx
        sett    2
        wait    tf_sign
        ret
        ;
;**********************************************************
;
;  CHANNEL 1 BAUDRATE 4800 !
;
br_set_4800:
        setp    crb,0x2a        ;reset rx and disable rx and tx
        setp    crb,0x3a        ;reset tx
        setp    crb,0x4a        ;reset error status
        setp    csrb,baud_4800  ;set baudrate
        mode_reco
        setp    crb,0x05        ;enable rx and tx
        sett    2
        wait    tf_sign
        ret
        ;
;**********************************************************
;
;  CHANNEL 1 BAUDRATE 9600 !
;
br_set_9600:
        setp    crb,0x2a        ;reset rx and disable rx and tx
        setp    crb,0x3a        ;reset tx
        setp    crb,0x4a        ;reset error status
        setp    csrb,baud_9600  ;set baudrate
        mode_reco
        setp    crb,0x05        ;enable rx and tx
        sett    2
        wait    tf_sign
        ret
        ;
#endif
;
;**********************************************************
#ifdef MODEM_ON_CH0
;**********************************************************
;
;  CHANNEL 0 BAUDRATE 300 !
;
br_set_300:
        setp    cra,0x2a        ;reset rx and disable rx and tx
        setp    cra,0x3a        ;reset tx
        setp    cra,0x4a        ;reset error status
        setp    csra,baud_300   ;set baudrate
        mode_reco
        setp    cra,0x05        ;enable rx and tx
        sett    2
        wait    tf_sign
        ret
        ;
;**********************************************************
;
;  CHANNEL 0 BAUDRATE 1200 !
;
br_set_1200:
        setp    cra,0x2a        ;reset rx and disable rx and tx
        setp    cra,0x3a        ;reset tx
        setp    cra,0x4a        ;reset error status
        setp    csra,baud_1200  ;set baudrate
        mode_reco
        setp    cra,0x05        ;enable rx and tx
        sett    2
        wait    tf_sign
        ret
        ;
;**********************************************************
;
;  CHANNEL 0 BAUDRATE 2400 !
;
br_set_2400:
        setp    cra,0x2a        ;reset rx and disable rx and tx
        setp    cra,0x3a        ;reset tx
        setp    cra,0x4a        ;reset error status
        setp    csra,baud_2400  ;set baudrate
        mode_reco
        setp    cra,0x05        ;enable rx and tx
        sett    2
        wait    tf_sign
        ret
        ;
;**********************************************************
;
;  CHANNEL 0 BAUDRATE 4800 !
;
br_set_4800:
        setp    cra,0x2a        ;reset rx and disable rx and tx
        setp    cra,0x3a        ;reset tx
        setp    cra,0x4a        ;reset error status
        setp    csra,baud_4800  ;set baudrate
        mode_reco
        setp    cra,0x05        ;enable rx and tx
        sett    2
        wait    tf_sign
        ret
        ;
;**********************************************************
;
;  CHANNEL 0 BAUDRATE 9600 !
;
br_set_9600:
        setp    cra,0x2a        ;reset rx and disable rx and tx
        setp    cra,0x3a        ;reset tx
        setp    cra,0x4a        ;reset error status
        setp    csra,baud_9600  ;set baudrate
        mode_reco
        setp    cra,0x05        ;enable rx and tx
        sett    2
        wait    tf_sign
        ret
        ;
#endif
;
;**********************************************************
zzz_end:
;
end

