//*********************************************************
// Application SCHALTUHR for UA-Set 4034 with AFS
//
#define rel_30page517
#define checkin_sk      sk_5
#define checkout_sk     sk_2
#define gu_offhook      255
#define gu_onhook       254
//
#define sk_1    29
#define sk_2    30
#define sk_3    31
#define sk_4    32
#define sk_5    33
#define pfeil_l 34
#define pfeil_r 35
#define sk_s1   36
#define sk_s2   37
#define sk_s3   38
#define sk_s4   39
#define sk_s5   40
#define info_key        42
#define trenntaste      41
#define trenntaste      41
#define vm_on_off_key   17
#define vm_menue_key    16
#define vm_sk_nacht     sk_1
#define vm_sk_tag       sk_2
#define vm_sk_mode1     sk_3
#define vm_sk_mode2     sk_4
#define vm_sk_entity    sk_5
//
#define vta_l1          0xd100
#define vta_l2          0xd140
#define status_ch0      0xd460,0
#define connect_st      0xd460,1
#define voice_mode      0xd480,0
#define l1_update       0xd490,4
#define l2_update       0xd490,5
#define icon_update     0xd490,6
#define _sk1            1
#define _sk2            9
#define _sk3            17
#define _sk4            25
#define _sk5            33
//
// ICON Segmente
//
#define seg_off         0
#define seg_on          2
#define seg_flash       1
//
#define seg_a           7
#define seg_b           5
#define seg_c           3
#define seg_d           6
#define seg_e           4
#define seg_f           2
#define seg_g           1
#define seg_h           0
//
#define param_1         s14,200
#define param_2         s14,220
#define param_r1        s14,239
#define param_r2        s14,238
#define param_r3        s14,237
#define param_r4        s14,236
#define param_r5        s14,235
#define param_r6        s14,234
#define param_r7        s14,233
#define param_r8        s14,232
#define param_r9        s14,231
#define param_r10       s14,230
//
//***********************************************
// Buffer 0 definitionen
//***********************************************
#define buffer_m0               0
#define buffer_notify           buffer_m0
#define badr_0_high             0x50
#define lbuff_0_high            0x20
#define modnum_0                0x00
//***********************************************
#define mess_startup1   " Alcatel UA-SET (4034) SCHALTUHR V2.0 ***/n"
#define mess_startup2   " by HOERHAGER JOSEF AOHE                                 06//98/n"
#define mess_startup3   " Modul 0 Ready for working !/l/n"
#define mess_nosubset   "/l  ERROR no UA-Subset found!!!/l/n"
//
#define wstr            s2
#define sk_text         wstr,240
//
        setbaud 1,9600,8,n,1
        setp    0x7f02,0x01
        mode_reco
        setc    0,0
        setc    1,0
        setc    2,0
        setc    3,0
        setc    4,0
        setc    5,0
        setc    6,0
        setc    6,10
        call    init_b0

loop_start:
        buffrd  wstr,0            //readb   wstr,0,buffer_m0
        compd   "E/n",wstr,0
        jnz     loop_start

        movd    "                                        /n",0xd100,0
        movd    "                                        /n",0xd140,0
        movd    "0",voice_mode
//
// send signon mess
//
        setl    8,2
        movd    mess_startup1,wstr,100
        out     wstr,100,c4
        movd    mess_startup2,wstr,100
        out     wstr,100,c4
        movd    mess_startup3,wstr,100
        out     wstr,100,c4
;
err_main:
        setl    15,2
        movd    " Wait for init UA-Subset!/n",wstr,100
        out     wstr,100,c4
        sett    250
//
err_main_wait:
        movd    "@",status_ch0
        wait    tf_sign,cntl_sign
        case    tf_sign,test1_cntl
        movd    mess_nosubset,wstr,100
        out     wstr,100,c4
        jmp     err_main
//
test1_cntl:
        case    cntl_sign,err_main
        movd    "          CH0st1-CNTL-Sign/n",wstr,100
        movs    status_ch0,wstr,100,2
        out     wstr,100,c4
        movd    "@D/n",wstr,100
        out     wstr,100,c4
        compd   "H",status_ch0
        jz      main_1
        jmp     err_main_wait
main_1:
        movd    " Init UA-Subset OKAY!/n",wstr,100
        out     wstr,100,c4
        movd    "@D/n",wstr,100
        out     wstr,100,c4
        setl    15,0
        sett    250
        movd    "0",voice_mode
//***********************************************
main:
        sett    50
        setl    8,1
afs_tl2:
;
l12_on:
        ;
led_8:
        wait    im_sign,rx_sign,tf_sign,cntl_sign,ans_sign
        setl    8,2
//
//***********************************************
//***********************************************
//***********************************************
//***********************************************
        case    im_sign,test_rx
        in      wstr,0
        compd   "chst",wstr,0
        jz      ch_st_im
        compd   "tr",wstr,0
        jz      trenn_taste
        compd   "sk",wstr,0
        jz      send_skey
        compd   "info",wstr,0
        jz      info_taste
        compd   "offh",wstr,0
        jz      send_offhook
        compd   "onh",wstr,0
        jz      send_onhook
        compd   "d ",wstr,0
        jz      dial_cmd
;
        compd   "stop",wstr,0
        jz      start_wait
        buffwr  wstr,0
        sendsig ans_sign,c0
        ansd    "OKAY/n"
        setl    8,1
        jmp     main
//
start_wait:
        ansd    "Okay stoped/n"
start_1_wait:
        wait    im_sign
        case    im_sign,start_1_wait
        in      wstr,0
        compd   "start",wstr,0
        jnz     start_wait
        ansd    "Okay running/n"
        jmp     main
        ;
dial_cmd:
        vta_wrs wstr,0,20
        setl    8,1
        ansd    "OKAY/n"
        jmp     main
send_offhook:
        vta_key gu_offhook
        setl    8,1
        ansd    "OKAY/n"
        jmp     main
send_onhook:
        vta_key gu_onhook
        setl    8,1
        ansd    "OKAY/n"
        jmp     main
send_skey:
        vta_skey        wstr,3
        setl    8,1
        ansd    "OKAY/n"
        jmp     main
;
trenn_taste:
        vta_key 41
        setl    8,1
        ansd    "OKAY/n"
        jmp     main
;
info_taste:
        vta_key 42
        setl    8,1
        ansd    "OKAY/n"
        jmp     main
        ;
ch_st_im:
//        writeb  wstr,0,buffer_m0
//        sendsig ans_sign,c1
        ansd    "OK!/n"
        jmp     main
//
//***********************************************
//***********************************************
//***********************************************
//***********************************************
test_rx:
        case    rx_sign,test_tf
        clear   rx_sign
        setl    8,1
        compd   "1",l1_update
        jnz     test_rx_skip1
        out     0xd100,0,c4
        movd    "0",l1_update
//
test_rx_skip1:
        compd   "1",l2_update
        jnz     test_rx_skip2
        out     0xd140,0,c4
        movd    "0",l2_update
        compd   "Record",vta_l2,_sk2
        jnz     test_rx_skip2
//        vta_key sk_2
//
test_rx_skip2:
        compd   "6",0xd480,0
        jnz     test_end
        movd    " Ringing !!!/n",wstr,100
        out     wstr,100,c4
test_end:
        sett    4
        wait    tf_sign
        jmp     main
;
//***********************************************
//***********************************************
//***********************************************
//***********************************************
test_tf:
        case    tf_sign,test_cntl
//        movd    "CH0-Timeout/n",wstr,100
//        out     wstr,100,c4
        jmp     test_1_answ
        jmp     main
//***********************************************
//***********************************************
//***********************************************
//***********************************************
test_cntl:
        case    cntl_sign,test_tx
        movd    "          CH0-CNTL-Sign/n",wstr,100
        movs    status_ch0,wstr,100,2
        out     wstr,100,c4
        compd   "H",status_ch0
        jnz     err_main
        movd    "@",status_ch0
//        out     wstr,100,c4
        decc    6
        jz      test_subset
        jmp     main
//
test_subset:
        setc    6,10
        compd   "0",voice_mode
        jnz     main
//        call    tx_wait
//        vta_key info_key
//        sett    10
//        wait    tf_sign
        call    tx_wait
        vta_key trenntaste
//        call    rx_wait
        jmp     main
//
//***********************************************
//***********************************************
//***********************************************
//***********************************************
test_tx:
//        case    tx_sign,test_answ
//        movd    "CH0-Tx-Sign/n",wstr,100
//        out     wstr,100,c4
//        jmp     main
//***********************************************
//***********************************************
//***********************************************
//***********************************************
test_answ:
        case    ans_sign,test_undef
//
test_1_answ:
        compd   "0",voice_mode
        jnz     error_ua_busy
loop_answ:
        buffrd  wstr,0            //readb   wstr,0,buffer_m0
        compd   "E/n",wstr,0
        jz      main
        out     wstr,0,c4
        sendsig ans_sign,c0
        jmp     change_st
//
error_ua_busy:
        movd    "UA-Subset is busy/n",wstr,100
        out     wstr,100,c4
        jmp     main
//
test_undef:
        movd    "CH0-Undefined event/n",wstr,100
        out     wstr,100,c4
        jmp     main
//
//*********************************************************
//*********************************************************
//*********************************************************
//*********************************************************
//
change_st:
        compd   "dial ",wstr,0
        jz      dial_string
        compd   "skey ",wstr,0
        jz      dosend_skey
        compd   "tr",wstr,0
        jz      key_tr
        compd   "VM_ON",wstr,0
        jz      vm_sw_on
        compd   "vm_on",wstr,0
        jz      vm_sw_on
        compd   "VM_OFF",wstr,0
        jz      vm_sw_off
        compd   "vm_off",wstr,0
        jz      vm_sw_off
        compd   "VM_TAG",wstr,0
        jz      vm_sw_tag
        compd   "vm_tag",wstr,0
        jz      vm_sw_tag
        compd   "VM_NACHT",wstr,0
        jz      vm_sw_nacht
        compd   "vm_nacht",wstr,0
        jz      vm_sw_nacht
        compd   "VM_MODE1",wstr,0
        jz      vm_sw_m1
        compd   "vm_mode1",wstr,0
        jz      vm_sw_m1
        compd   "VM_MODE2",wstr,0
        jz      vm_sw_m2
        compd   "vm_mode2",wstr,0
        jz      vm_sw_m2
        compd   "VM_ENTITY",wstr,0
        jz      vm_sw_entity
        compd   "vm_entity",wstr,0
        jz      vm_sw_entity
        compd   "UANOPROG",wstr,0
        jz      test_answ
        compd   "Prog",wstr,0
        jz      test_answ
        compd   "Ende-",wstr,0
        jz      test_answ
change_lst:
        movd    " ERROR Key not defined!!/n",wstr,100
        out     wstr,100,c4
        jmp     main
//
//##############################################################
vm_sw_on:
        ticon   17,seg_d,seg_on
        jnz     vm_sw_1_on
        movd    "Vermittlung ist aktiv/n",wstr,100
        out     wstr,100,c4
        jmp     loop_answ
vm_sw_1_on:
        call    tx_wait
        vta_key vm_on_off_key
        movd    "  Ja",sk_text
        call    sk_wait
        call    press_sk
        jnz     error_vm
        jmp     loop_answ
vm_sw_off:
        ticon   17,seg_d,seg_off
        jnz     vm_sw_1_off
        movd    "Vermittlung ist inaktiv/n",wstr,100
        out     wstr,100,c4
        jmp     loop_answ
vm_sw_1_off:
        call    tx_wait
        vta_key vm_on_off_key
        movd    "  Ja",sk_text
        call    sk_wait
        call    press_sk
        jnz     error_vm
        jmp     loop_answ
//
vm_sw_tag:
        ticon   17,seg_d,seg_on
        jz      vm_sw_1_tag
        movd    "Vermittlung ist nicht aktiv/n",wstr,100
        out     wstr,100,c4
        jmp     loop_answ
vm_sw_1_tag:
        call    tx_wait
        vta_key vm_menue_key
        movd    "Int.St",sk_text
        call    sk_wait
        call    press_sk
        jnz     error_vm
        movd    " Tag",sk_text
        call    sk_wait
        vta_key vm_sk_tag
        call    rx_wait
        call    tx_wait
        vta_key trenntaste
        call    rx_wait
        jmp     loop_answ
vm_sw_nacht:
        ticon   17,seg_d,seg_on
        jz      vm_sw_1_nacht
        movd    "Vermittlung ist nicht aktiv/n",wstr,100
        out     wstr,100,c4
        jmp     loop_answ
vm_sw_1_nacht:
        call    tx_wait
        vta_key vm_menue_key
        movd    "Int.St",sk_text
        call    sk_wait
        call    press_sk
        jnz     error_vm
        movd    "Nacht",sk_text
        call    sk_wait
        vta_key vm_sk_nacht
        call    rx_wait
        call    tx_wait
        vta_key trenntaste
        call    rx_wait
        jmp     loop_answ
vm_sw_m1:
        ticon   17,seg_d,seg_on
        jz      vm_sw_1_m1
        movd    "Vermittlung ist nicht aktiv/n",wstr,100
        out     wstr,100,c4
        jmp     loop_answ
vm_sw_1_m1:
        call    tx_wait
        vta_key vm_menue_key
        movd    "Int.St",sk_text
        call    sk_wait
        call    press_sk
        jnz     error_vm
        movd    "Umlei1",sk_text
        call    sk_wait
        vta_key vm_sk_mode1
        call    rx_wait
        call    tx_wait
        vta_key trenntaste
        call    rx_wait
        jmp     loop_answ
vm_sw_m2:
        ticon   17,seg_d,seg_on
        jz      vm_sw_1_m2
        movd    "Vermittlung ist nicht aktiv/n",wstr,100
        out     wstr,100,c4
        jmp     loop_answ
vm_sw_1_m2:
        call    tx_wait
        vta_key vm_menue_key
        movd    "Int.St",sk_text
        call    sk_wait
        call    press_sk
        jnz     error_vm
        movd    "Umlei2",sk_text
        call    sk_wait
        vta_key vm_sk_mode2
        call    rx_wait
        call    tx_wait
        vta_key trenntaste
        call    rx_wait
        jmp     loop_answ
vm_sw_entity:
        ticon   17,seg_d,seg_on
        jz      vm_sw_1_entity
        movd    "Vermittlung ist nicht aktiv/n",wstr,100
        out     wstr,100,c4
        jmp     loop_answ
vm_sw_1_entity:
        call    tx_wait
        vta_key vm_menue_key
        movd    "Int.St",sk_text
        call    sk_wait
        call    press_sk
        jnz     error_vm
        movd    "Entity",sk_text
        call    sk_wait
        vta_key vm_sk_entity
        call    rx_wait
;        call    tx_wait
;        vta_key trenntaste
;        call    rx_wait
        jmp     loop_answ
error_vm:
        movd    " Softkey not found !/n",wstr,100
        out     wstr,100,c4
        jmp     loop_answ
//
//***********************************************
key_tr:
        call    tx_wait
        vta_key trenntaste
        call    tx_wait
        vta_key trenntaste
        call    rx_wait
        jmp     loop_answ
//
dosend_skey:
        call    tx_wait
        vta_skey        wstr,5
        call    rx_wait
        jmp     loop_answ
//
dial_string:
        call    tx_wait
        vta_wrs wstr,5,20
        call    rx_wait
        jmp     loop_answ
//***********************************************
//***********************************************
// wait for skoft key
//      string for softkey in "SK_TEXT"
//
sk_wait:
        movd    "0",l2_update
        comps   sk_text,vta_l2,_sk1,4
        jz      sk_wait_end
        comps   sk_text,vta_l2,_sk2,4
        jz      sk_wait_end
        comps   sk_text,vta_l2,_sk3,4
        jz      sk_wait_end
        comps   sk_text,vta_l2,_sk4,4
        jz      sk_wait_end
        comps   sk_text,vta_l2,_sk5,4
        jz      sk_wait_end
sk_wait_update:
        call    rx_wait
        jnz     sk_wait_error
        compd   "1",l2_update
        jnz     sk_wait_update
//
        movd    "0",l2_update
        compd   "                    ",vta_l2,0
        jz      sk_wait_update
        comps   sk_text,vta_l2,_sk1,4
        jz      sk_wait_end
        comps   sk_text,vta_l2,_sk2,4
        jz      sk_wait_end
        comps   sk_text,vta_l2,_sk3,4
        jz      sk_wait_end
        comps   sk_text,vta_l2,_sk4,4
        jz      sk_wait_end
        comps   sk_text,vta_l2,_sk5,4
        jz      sk_wait_end
sk_wait_error:
        movd    "Softkey  *    * not found on sk_wait/n",wstr,150
        movs    sk_text,wstr,160,4
        out     wstr,150,c4
        jmp     nz_ret
sk_wait_end:
        ret
//
//***********************************************
// press_sk
//  druecke softkey given in string "sk_text"
//  sigificant length of string is 4 digits
//  returns z : if sk is pressed and line 2 is updated
//          nz: if sk is not found
press_sk:
        movd    "0",l2_update
        comps   sk_text,vta_l2,_sk1,4
        jz      press_1
        comps   sk_text,vta_l2,_sk2,4
        jz      press_2
        comps   sk_text,vta_l2,_sk3,4
        jz      press_3
        comps   sk_text,vta_l2,_sk4,4
        jz      press_4
        comps   sk_text,vta_l2,_sk5,4
        jz      press_5
        compd   ">",vta_l2,39   // extended softkeys?
        jnz     dir_left
        vta_key pfeil_r
pr_lo_1:
        call    rx_wait
        jnz     error_pr_sk
        compd   "1",l2_update
        jnz     pr_lo_1
        jmp     press_sk
//
dir_left:
        movd    "0",l2_update
        comps   sk_text,vta_l2,_sk1,4
        jz      press_1
        comps   sk_text,vta_l2,_sk2,4
        jz      press_2
        comps   sk_text,vta_l2,_sk3,4
        jz      press_3
        comps   sk_text,vta_l2,_sk4,4
        jz      press_4
        comps   sk_text,vta_l2,_sk5,4
        jz      press_5
        compd   "<",vta_l2,0   // extended softkeys?
        jnz     sk_not_found
        vta_key pfeil_l
pr_lo_2:
        call    rx_wait
        jnz     error_pr_sk
        compd   "1",l2_update
        jnz     pr_lo_2
        jmp     dir_left
//
sk_not_found:
        movd    "Softkey  *    * not found on press_sk/n",wstr,150
        movs    sk_text,wstr,160,4
        out     wstr,150,c4
        jmp     nz_ret
//
press_1:
        vta_key sk_1
common_pr_sk:
        call    rx_wait
        jnz     error_pr_sk
        compd   "1",l2_update
        jnz     common_pr_sk
        ret
press_2:
        vta_key sk_2
        jmp     common_pr_sk
press_3:
        vta_key sk_3
        jmp     common_pr_sk
press_4:
        vta_key sk_4
        jmp     common_pr_sk
press_5:
        vta_key sk_5
        jmp     common_pr_sk
//
error_pr_sk:
        vta_key trenntaste
        jmp     nz_ret
//***********************************************
to_wait:
        sett    1
        wait    tf_sign
        ret
//***********************************************
        movd    "000",l1_update
//
rx_wait:
        clear   rx_sign
        sett    40
rx_wait_l:
        wait    rx_sign,tf_sign
        case    rx_sign,rx_w_tf
        out     vta_l1,0,c4
        out     vta_l2,0,c4
        jmp     z_ret
//
rx_w_tf:
        case    tf_sign,rx_wait_l
        movd    "  Timeout 4 sec on waiting rx_sign!!!/n",wstr,100
        out     wstr,100,c4
        jmp     nz_ret1
//
//***********************************************
//
tx_wait:
        sett    50
        wait    tx_sign,tf_sign
        case    tx_sign,test_tx_tf
        jmp     z_ret
test_tx_tf:
        case    tf_sign,tx_wait
        movd    " Error on TX_WAIT. No TX_signal after 5 sec./n",wstr,100
        out     wstr,100,c4
        jmp     nz_ret
//
//***********************************************
// to_left     input: param_1 string to justify to left
//		output: param_2 justified string
//			param_1 cleared
//		lenght: 20 char
//     using: counter 10,11,12
//
to_left:
        movd    "                    ",param_2
	setc	12,20	//number of char
	setc	10,200	//source
	setc	11,220	//destination
lto_left:
        compd   " ",s14,c10
	jnz	mto_left
	incc	10
	decc	12
	jnz	lto_left
	movd	"                   ",param_1
	ret
//
mto_left:
	movs	s14,c10,s14,c11,1
	incc	10
	incc	11
	decc	12
        jnz     mto_left
        movd    "                   ",param_1
	ret
//***********************************************
//************************************************
// z_ret
// input: -
// output: return Z
//         use cnt 2
//
z_ret:
        setc    2,1
        decc    2
        ret
//
//************************************************
// nz_ret
// input: -
// output: return nz
//         use cnt 2
//
nz_ret:
nz_ret2:
        setc    2,1
        incc    2
        ret
//
//************************************************
// nz_ret
// input: -
// output: return nz
//         use cnt 2
//
nz_ret1:
        setc    2,2
        decc    2
        ret
//
//************************************************
//
//************************************************
// Buffer 0 init
//
// Aufruf:       call    Init_b0
//
init_b0:
        setp    0XD300,badr_0_high      //beginn adresse high
        setp    0XD301,0x00             //beginn adresse low
//
        setp    0Xd302,lbuff_0_high     //bufferlaenge high
        setp    0XD303,0x00             //bufferlaenge low
//
        setp    0Xd304,lbuff_0_high     //anzahl bytes free high
        setp    0XD305,0x00             //anzahl bytes free low
//
        setp    0Xd306,badr_0_high      //input zeiger high
        setp    0XD307,0x00             //input zeiger low
//
        setp    0Xd308,lbuff_0_high     //input laenge bis bufferende high
        setp    0XD309,0x00             //input laenge bis bufferende low
//
        setp    0Xd30A,badr_0_high      //output zeiger high
        setp    0XD30B,0x00             //output zeiger low
//
        setp    0Xd30C,lbuff_0_high     //output laenge bis bufferende high
        setp    0XD30D,0x00             //output laenge bis bufferende low
//
        setp    0XD30E,modnum_0         //modulnummer falls in modulmem
//
        ret
//
zzz:

end
