home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / develop / as65 / demo / s1 / relais.asm < prev    next >
Assembly Source File  |  1995-02-27  |  14KB  |  616 lines

  1. ;**************************************************************************
  2. ;
  3. ; Filename : RELAIS.ASM
  4. ; ---------------------
  5. ;
  6. ; (c) 1990/91 by Thomas Lehmann
  7. ;
  8. ;
  9. ; Jackophone V5.00
  10. ;
  11. ;
  12. ; verschiedene Relais ein/ausschalten
  13. ;
  14. ;
  15. ;**************************************************************************
  16.  
  17. MODUL_START    set    *    ; Größe des Moduls berechnen
  18.  
  19.     ; NSI-Relais einschalten
  20.     ; ----------------------
  21. nsi_on    sei
  22.     lda Via_portb    ; Zustand der VIA einlesen
  23.     ora #NSI    ; NSI BIT setzen
  24.     sta Via_portb    ; und NSI-Relais einschalten
  25.  
  26.     lda interrupt    ; ist IRQ aktiv ?
  27.     bne nsi_on_1    ; ja, IRQ nicht freigeben
  28.  
  29.     cli
  30. nsi_on_1
  31.     if RELTEST
  32.     lda #$ff
  33.     sta led_ram+YL4+11
  34.     endif
  35.  
  36.     rts
  37.  
  38.     ; NSI-Relais ausschalten
  39.     ; ----------------------
  40. nsi_off    sei
  41.     lda Via_portb    ; Zustand der VIA einlesen
  42.     and #$ff^NSI    ; NSI BIT austragen
  43.     sta Via_portb    ; und NSI-Relais ausschalten
  44.  
  45.     lda interrupt    ; ist IRQ aktiv ?
  46.     bne nsi_off_1    ; ja, IRQ nicht freigeben
  47.  
  48.     cli
  49. nsi_off_1
  50.  
  51.     if RELTEST
  52.     stz led_ram+YL4+11
  53.     endif
  54.  
  55.     rts
  56.  
  57. ; **********
  58.  
  59.     ; NSA-Relais einschalten
  60.     ; ----------------------
  61. nsa_on    sei
  62.     lda Via_portb    ; Zustand der VIA einlesen
  63.     ora #NSA    ; NSA BIT setzen
  64.     sta Via_portb    ; und NSA-Relais einschalten
  65.  
  66.     lda interrupt    ; ist IRQ aktiv ?
  67.     bne nsa_on_1    ; ja, IRQ nicht freigeben
  68.  
  69.     cli
  70. nsa_on_1
  71.  
  72.     if RELTEST
  73.     lda #$ff
  74.     sta led_ram+YL4+9
  75.     endif
  76.  
  77.     rts
  78.  
  79.     ; NSA-Relais ausschalten
  80.     ; ----------------------
  81. nsa_off    sei
  82.     lda Via_portb    ; Zustand der VIA einlesen
  83.     and #$ff^NSA    ; NSA BIT austragen
  84.     sta Via_portb    ; und NSA-Relais ausschalten
  85.  
  86.     lda interrupt    ; ist IRQ aktiv ?
  87.     bne nsa_off_1    ; ja, IRQ nicht freigeben
  88.  
  89.     cli
  90. nsa_off_1
  91.  
  92.     if RELTEST
  93.     stz led_ram+YL4+9
  94.     endif
  95.  
  96.     rts
  97.  
  98. ; **********
  99.  
  100.     ; a/b-Relais einschalten
  101.     ; ----------------------
  102. ab_on    lda #$ff
  103.     sta led_ram+LD_AB    ; a/b Relais einschalten
  104.     rts
  105.  
  106.     ; a/b-Relais ausschalten
  107.     ; ----------------------
  108. ab_off    stz led_ram+LD_AB    ; a/b Relais auschalten
  109.     rts
  110.  
  111. ; **********
  112.  
  113.     ; Halten-Relais einschalten
  114.     ; -------------------------
  115. ha_on    lda #$ff
  116.     sta led_ram+LD_HALT
  117.     rts
  118.  
  119.     ; Halten-Relais ausschalten
  120.     ; -------------------------
  121. ha_off    stz led_ram+LD_HALT
  122.     rts
  123.  
  124. ; **********
  125.  
  126.     ; Postapparat anschalten
  127.     ; ----------------------
  128. post_on    stz led_ram+LD_POST    ; Postapparat einschalten
  129.     ldy #LD_L|LD_R|LD_OFF    ; LED Status laden
  130.     lda #KEY_POST        ; Tastenwert laden
  131.     jmp set_prgled
  132.  
  133.     ; Postapparat abschalten
  134.     ; ----------------------
  135. post_off    lda #$ff
  136.     sta led_ram+LD_POST    
  137.     ldy #LD_L|LD_ON    ; LED Status laden
  138.     bbs ST_POST,feap_stat,post_off_1    ; Postapparat ist abgeschaltet
  139.  
  140.     ldy #LD_L|LD_N    ; LED Status laden
  141. post_off_1    lda #KEY_POST    ; Tastenwert laden
  142.     jmp set_prgled
  143.  
  144.  
  145. ; **********
  146.  
  147.     ; Modem anschalten
  148.     ; ----------------
  149. mod_on    lda #$ff
  150.     sta led_ram+LD_MODEM
  151.     ldy #LD_L|LD_R|LD_ON    ; LED Status laden
  152.     lda #KEY_MOD    ; Tastenwert laden
  153.     jmp set_prgled
  154.  
  155.     ; Modem abschalten
  156.     ; ----------------
  157. mod_off    stz led_ram+LD_MODEM
  158.     ldy #LD_L|LD_R|LD_OFF    ; LED Status laden
  159.     lda #KEY_MOD    ; Tastenwert laden
  160.     jmp set_prgled
  161.  
  162. ; **********
  163.  
  164.     ; Anrufbeantworter anschalten
  165.     ; ---------------------------
  166. beantw_on    lda #$ff
  167.     sta led_ram+LD_BEANTW
  168.     ldy #LD_L|LD_R|LD_OFF    ; LED Status laden
  169.     lda #KEY_BEA    ; Tastenwert laden
  170.     jmp set_prgled
  171.  
  172.     ; Anrufbeantworter abschalten
  173.     ; ---------------------------
  174. beantw_off    stz led_ram+LD_BEANTW
  175.     ldy #LD_L|LD_ON    ; LED Status laden
  176.     bbr ST_BEANTW,feap_stat,bea_off_1    ; Beantw. ist abgeschaltet
  177.  
  178.     ldy #LD_L|LD_N    ; LED Status laden
  179. bea_off_1    lda #KEY_BEA    ; Tastenwert laden
  180.     jmp set_prgled
  181.  
  182. ; **********
  183.  
  184.     ; frei Programierbares Relais 1 einschalten
  185.     ; -----------------------------------------
  186. rel1_on    lda #$ff
  187.     sta led_ram+LD_REL1
  188.     rts
  189.  
  190.     ; frei Programierbares Relais 1 ausschalten
  191.     ; -----------------------------------------
  192. rel1_off    stz led_ram+LD_REL1
  193.     rts
  194.  
  195. ; **********
  196.  
  197.     ; frei Programierbares Relais 2 einschalten
  198.     ; -----------------------------------------
  199. rel2_on    lda #$ff
  200.     sta led_ram+LD_REL2
  201.     rts
  202.  
  203.     ; frei Programierbares Relais 2 ausschalten
  204.     ; -----------------------------------------
  205. rel2_off    stz led_ram+LD_REL2
  206.     rts
  207.  
  208. ; **********
  209.  
  210.     ; frei Programierbares Relais 3 einschalten
  211.     ; -----------------------------------------
  212. rel3_on    lda #$ff
  213.     sta led_ram+LD_REL3
  214.     rts
  215.  
  216.     ; frei Programierbares Relais 3 ausschalten
  217.     ; -----------------------------------------
  218. rel3_off    stz led_ram+LD_REL3
  219.     rts
  220.  
  221. ; **********
  222.  
  223.     ; frei Programierbaren Port RL2 einschalten
  224.     ; -----------------------------------------
  225. rl2_on
  226.     if RELTEST
  227.     lda #$ff
  228.     sta led_ram+LD_RL2
  229.     endif
  230.  
  231.     lda #RL2    ; BIT für RL2 laden
  232.     ora txen_rl23    ; Zustand RL3 dazu
  233.     sta txen_rl23    ; und eintragen
  234.     bra set_rl_port    ; Port einschalten
  235.  
  236.  
  237.     ; frei Programierbaren Port RL2 ausschalten
  238.     ; -----------------------------------------
  239. rl2_off
  240.     if RELTEST
  241.     stz led_ram+LD_RL2
  242.     endif
  243.  
  244.     lda txen_rl23    ; Zustand TX-Enable und RL2/3 laden
  245.     and #$ff^RL2    ; BIT für Relais austragen
  246.     sta txen_rl23    ; bei Tastabfr. ausschalten
  247.     lda #$ff^RL2    ; BIT für Relais austragen
  248.     bra clr_rl_port    ; Port zurücksetzen
  249.  
  250.  
  251. ; **********
  252.  
  253.     ; frei Programierbaren Port RL3 einschalten
  254.     ; -----------------------------------------
  255. rl3_on
  256.     if RELTEST
  257.     lda #$ff
  258.     sta led_ram+LD_RL3
  259.     endif
  260.  
  261.     lda #RL3    ; BIT für RL3 laden
  262.     ora txen_rl23    ; Zustand TX-Enable und RL2 dazu
  263.     sta txen_rl23    ; und eintragen
  264.  
  265. set_rl_port    ora Port_rl23    ; Zustand des Ports dazu, (! Tastaturabfr. !)
  266.     sta Port_rl23    ; Relais einschalten
  267.  
  268.     rts
  269.  
  270.     ; frei Programierbaren Port RL3 ausschalten
  271.     ; -----------------------------------------
  272. rl3_off
  273.     if RELTEST
  274.     stz led_ram+LD_RL3
  275.     endif
  276.  
  277.     lda txen_rl23    ; Zustand TX-Enable und RL2/3 laden
  278.     and #$ff^RL3    ; BIT für Relais austragen
  279.     sta txen_rl23    ; bei Tastabfr. ausschalten
  280.  
  281.     lda #$ff^RL3    ; BIT für Relais austragen
  282. clr_rl_port    and Port_rl23    ; Zustand des Ports dazu
  283.     sta Port_rl23    ; Relais ausschalten
  284.     rts
  285.  
  286. ; **********
  287.  
  288.     ; frei Programmierbares Relais REL3 auf STR1 einschalten
  289.     ; ------------------------------------------------------
  290. str_rel_on    sei
  291.     lda Via_portb    ; Zustand der VIA einlesen
  292.     ora #STR_REL3    ; Relais-BIT setzen
  293.     sta Via_portb    ; und Relais einschalten
  294.     cli
  295.     rts
  296.  
  297.     ; frei Programmierbares Relais REL3 auf STR1 ausschalten
  298.     ; ------------------------------------------------------
  299. str_rel_off    sei
  300.     lda Via_portb    ; Zustand der VIA einlesen
  301.     and #$ff^STR_REL3    ; Relais-BIT austragen
  302.     sta Via_portb    ; und Relais ausschalten
  303.     cli
  304.     rts
  305.  
  306. ; **********
  307.  
  308.     ; Freisprech-Relais einschalten
  309.     ; -----------------------------
  310. fs_on    sei
  311.     lda Via_portb    ; Zustand der VIA einlesen
  312.     ora #FS        ; FS BIT setzen
  313.     sta Via_portb    ; und Freisprech-Relais einschalten
  314.     cli
  315.     rts
  316.  
  317.  
  318.     ; Freisprech-Relais ausschalten
  319.     ; -----------------------------
  320. fs_off    sei
  321.     lda Via_portb    ; Zustand der VIA einlesen
  322.     and #$ff^FS    ; FS BIT austragen
  323.     sta Via_portb    ; und Freisprech-Relais ausschalten
  324.     cli
  325.     stz fs_stat    ; bei FS-Taste erstmal nur LH aktivieren
  326.     rts
  327.  
  328. ; **********
  329.  
  330.     ; Summer-Relais einschalten
  331.     ; -------------------------
  332. su_on    sei
  333.     lda Via_portb    ; Zustand der VIA einlesen
  334.     ora #SU        ; Summer BIT setzen
  335.     sta Via_portb    ; und Summer-Relais einschalten
  336.     cli
  337.     rts
  338.  
  339.     ; Freisprech-Relais ausschalten
  340.     ; -----------------------------
  341. su_off    sei
  342.     lda Via_portb    ; Zustand der VIA einlesen
  343.     and #$ff^SU    ; Summer BIT austragen
  344.     sta Via_portb    ; und Summer-Relais ausschalten
  345.     cli
  346.     rts
  347.  
  348.  
  349. ; **********
  350.  
  351.     ; Hörton Port einschalten
  352.     ; -----------------------
  353. htport_on    lda ht_port    ; Port für Hörtonrelais laden
  354.     jmp port_on    ; Port setzen
  355.  
  356.  
  357.     ; Hörton Port ausschalten
  358.     ; -----------------------
  359. htport_off    lda ht_port    ; Port für Hörtonrelais laden
  360.     jmp port_off    ; Port löschen
  361.  
  362. ; **********
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375. ; =========================================================================
  376. ;
  377. ; Type    : Unterprg.
  378. ;
  379. ; Eingang    : bei Endetaste
  380. ;
  381. ; Ausgang    : Relais und LED von Post und Anrufbeantw. entsprechend dem
  382. ;    : Status geschaltet
  383. ;
  384. ; Register    : ------
  385. ;
  386. ; (c) by Thomas Lehmann März 1990
  387. ;
  388. ; =========================================================================
  389.  
  390. set_postbea    bbs LTG_BEL,ltg_stat,postbea_e    ; Ltg. ist belegt, Ende
  391.  
  392.     bbs ST_BEANTW,feap_stat,postbea_1    ; Beantworter war eingesch.
  393.     jsr beantw_off    ; Beantworter ausschalten
  394.     bra set_zweit    ; Zweitapparat schalten
  395.  
  396. postbea_1    jsr beantw_on    ; Beantworter wieder einschalten
  397.  
  398.  
  399.     ; Zustand des Zweitapp. nach Zustand der Abschalte-Taste
  400.     ; ------------------------------------------------------
  401. set_zweit    bbr ST_POST,feap_stat,set_zweit_1    ; Postapp. war eingeschaltet
  402.     jmp post_off    ; Postapparat ausschalten
  403.  
  404. set_zweit_1    jmp post_on    ; Postapp. wieder einschalten
  405.  
  406. postbea_e    rts
  407.  
  408.  
  409.  
  410. ; =========================================================================
  411. ;
  412. ; Funktion    : setzen und löschen der frei programmierbaren Ports
  413. ;
  414. ; Eingang    : Portnr. im Accu
  415. ;    : originale Relaisnr.  = Relais einschalten
  416. ;    : Relaisnr. + PRG_PORT = Relais ausschalten
  417. ;
  418. ; Ausgang    : ---------
  419. ;
  420. ; Register    : ACCU, X
  421. ;
  422. ; (c) by Thomas Lehmann Mai 1990
  423. ;
  424. ; =========================================================================
  425.  
  426. prgport_tab    word    rel1_on    ; Relais 1 einschalten
  427.     word    rel2_on    ; Relais 2 einschalten
  428.     word    rel3_on    ; Relais 3 einschalten
  429.     word    str_rel_on    ; Relais 3 auf STR1 einschalten
  430.     word    rl2_on    ; Port RL2 einschalten
  431.     word    rl3_on    ; Port RL3 einschalten
  432.  
  433. PSET_LEN    equ    *-prgport_tab    ; Tabellenlänge für Port setzen
  434.  
  435.     word    rel1_off    ; Relais 1 ausschalten
  436.     word    rel2_off    ; Relais 2 ausschalten
  437.     word    rel3_off    ; Relais 3 ausschalten
  438.     word    str_rel_off    ; Relais 3 auf STR1 ausschalten
  439.     word    rl2_off    ; Port RL2 ausschalten
  440.     word    rl3_off    ; Port RL3 ausschalten
  441.  
  442. PCLR_LEN    equ    *-prgport_tab    ; Tabellenlänge für Port löschen
  443.  
  444.  
  445. set_prgport    asl        ; Portnr. mal 2 == Offs auf Tabelle
  446.     cmp #PSET_LEN    ; Port gültig ?
  447.     bcc sc_prgport    ; ja, Port setzen
  448.  
  449. prgport_end    rts
  450.  
  451.  
  452. clr_prgport    clc
  453.     adc #PRG_PORT    ; Wert für ausschalten zur Portnr.
  454.     asl        ; Portnr. mal 2 == Offs auf Tabelle
  455.     cmp #PCLR_LEN    ; Port gültig ?
  456.     bcs prgport_end    ; nein, Ende
  457.  
  458. sc_prgport    tax        ; Offset nach RX
  459.     jmp (prgport_tab,x)    ; Port-Programm ausführen
  460.  
  461.  
  462.  
  463. ; =========================================================================
  464. ;
  465. ; Funktion    : frei programmierbare Ports ein/ausschalten
  466. ;
  467. ; Eingang    : Portnr. im ACCU
  468. ;
  469. ; Ausgang    : -------
  470. ;
  471. ; Register    : -------
  472. ;
  473. ; (c) by Thomas Lehmann August 1991
  474. ;
  475. ; =========================================================================
  476.  
  477. port_on    phx
  478.     ldx #prg_port    ; Adr. der Port Zustände
  479.     jsr set_bit    ; BIT für Port setzen
  480.     plx
  481.     rts
  482.  
  483. port_off    phx
  484.     ldx #prg_port    ; Adr. der Port Zustände
  485.     jsr clr_bit    ; BIT für Port löschen
  486.     plx
  487.     rts
  488.  
  489. port_tst    phx
  490.     ldx #prg_port    ; Adr. der Port Zustände
  491.     jsr tst_bit    ; BIT für Port testen
  492.     plx
  493.     rts        ; SEC == Port ein, sonst CLC
  494.  
  495.  
  496. ; =========================================================================
  497. ;
  498. ; Funktion    : frei programmierbare Ports speichern
  499. ;
  500. ; Eingang    : Auswahl bei Speichern
  501. ;
  502. ; Ausgang    : Wähltastatur auf Relaisspeicherung umgeleitet
  503. ;
  504. ; Register    : X
  505. ;
  506. ; (c) by Thomas Lehmann Mai 1990
  507. ;
  508. ; =========================================================================
  509.  
  510. sp_rel    ldx #MENU_REL    ; Untermenu Relais ist aktiv
  511.     stx menu    ; und bei Speicher/Kontrolltaste umleiten
  512.     stz offs_relber    ; 1. Relaisnr. einstellen
  513.     ldx #WTA_SPREL    ; Prg. Nr. für Wähltaste laden
  514.     stx wta_prg    ; und bei Wähltaste ausführen
  515.  
  516.     ldx #<rel_txt    ; Textadr. laden
  517.     ldy #>rel_txt
  518.     lda #ANZ_RELTXT    ; Anzahl der Texte laden
  519.     jsr init_dsptxt    ; Textwahl initialisieren
  520.  
  521.     bra rel_out_fst    ; Relais ausgeben
  522.  
  523.  
  524. rel_txt    byte    DSP_CLR | CURS_ON
  525.     shift "Port bei Anruf: "
  526.  
  527.     byte    DSP_CLR | CURS_ON
  528.     shift "Port ein (Termin 7): "
  529.  
  530.     byte    DSP_CLR | CURS_ON
  531.     shift "Port aus (Termin 8): "
  532.  
  533.  
  534. ; =========================================================================
  535. ;
  536. ; Funktion    : Portfunktion speichern
  537. ;
  538. ; Eingang    : bei Wähltaste und eingeschaltetem Relais speichern Modus
  539. ;    : Tastenwert (1 bis ...) im Accu
  540. ;
  541. ; Ausgang    : --------
  542. ;
  543. ; Register    : Accu
  544. ;
  545. ; (c) by Thomas Lehmann Mai 1990
  546. ;
  547. ; =========================================================================
  548.  
  549. wta_sprel    bbs MOD_KO,modus,rel_out_end    ; Kontrollmodus ist aktiv
  550.  
  551.     jsr check_wta    ; Wähltaste 0-9 erzeugen
  552.     cmp #PRG_PORT    ; ist eingegebenes Port gültig ?
  553.     bcs rel_out_end    ; nein, Ende
  554.  
  555.     ldx offs_relber    ; Offset auf Relaisber laden
  556.     sta rel_tab,x    ; Relais in Ber. eintragen
  557.  
  558.  
  559.     ; Einsprung bei Speicher Taste
  560.     ; ----------------------------
  561. rel_out    jsr nxt_dsptxt    ; nächsten Text anzeigen
  562.     lda offs_relber    ; Offset auf Relaisber. laden
  563.     inc a        ; nächste Relaisnr. einstellen
  564.     cmp #ANZ_RELTXT    ; alle Relais eingegeben ?
  565.     bcc rel_out_1    ; nein
  566.  
  567.     lda #00        ; Offset auf 1. Relaiseintrag stellen
  568. rel_out_1    sta offs_relber    ; nächste Relaisber. einstellen
  569.  
  570.     ; nur Relaistext im Display anzeigen, nicht weiterschalten
  571.     ; --------------------------------------------------------
  572. rel_out_fst    ldx offs_relber    ; Offset auf Relaisber laden
  573.     lda rel_tab,x    ; Relais aus Ber laden
  574.     cmp #PRG_PORT    ; ist Port gültig ?
  575.     bcc rel_out_2    ; ja, Relaisnr. ausgeben
  576.  
  577.     lda #253    ; "-"-48 == Char für kein Relais gespeichert laden
  578. rel_out_2    clc
  579.     adc #48        ; ASCII erzeugen
  580.     jsr putchar    ; Relais ausgeben
  581.     jmp curs_left
  582.  
  583. rel_out_end    rts
  584.  
  585.  
  586. ; =========================================================================
  587. ;
  588. ; Type    : Hauptprg.
  589. ;
  590. ; Eingang    : bei Löschtaste und eingeschaltetem Relais speichern Modus
  591. ;
  592. ; Ausgang    : akt. Relaiswert clr
  593. ;
  594. ; Register    : Accu, X
  595. ;
  596. ; (c) by Thomas Lehmann Mai 1990
  597. ;
  598. ; =========================================================================
  599.  
  600. rel_clr    bbs MOD_KO,modus,rel_out_end    ; Kontrollmodus ist aktiv
  601.  
  602.     ldx offs_relber    ; Offset auf Relaisber laden
  603.     lda #$ff    ; Relaiswert für ungültig laden
  604.     sta rel_tab,x    ; Relais aus Ber clr
  605.     bra rel_out_fst    ; Relais erneut ausgeben
  606.  
  607.  
  608.  
  609.  
  610.  
  611. ; --------------------------------------------------------------------------
  612.  
  613. HLP    set    *
  614. _RELAIS    equ    HLP-MODUL_START        ; Größe des Moduls
  615.  
  616.