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

  1. ;**************************************************************************
  2. ;
  3. ; Filename : DISPLAY.ASM
  4. ; ----------------------
  5. ;
  6. ; (c) 1990/91 by Thomas Lehmann
  7. ;
  8. ;
  9. ; Jackophone V5.00
  10. ;
  11. ;
  12. ; Display Handling
  13. ;
  14. ;**************************************************************************
  15.  
  16.  
  17. MODUL_START    set    *    ; Größe des Moduls berechnen
  18.  
  19. ; =========================================================================
  20. ;
  21. ; Type    : Unterprg.
  22. ;    : String im Display ausgeben, letztes Zeichen geshiftet oder \0
  23. ;
  24. ; Eingang    : Stringadresse  : ind_adr
  25. ;    : letztes Zeichen im String geshiftet oder NULL
  26. ;
  27. ; Ausgang    : String ab Cursorposition im Display ausgegeben
  28. ;
  29. ; Register    : ------
  30. ;
  31. ; (c) by Thomas Lehmann Feb. 1990
  32. ;
  33. ; =========================================================================
  34.  
  35. puts
  36.     block
  37.     pha        ; Register retten
  38.     phy
  39.     ldy #$00    ; Pointer auf aktuellen Character
  40. loop    lda (ind_adr),y    ; Character laden
  41.     beq end        ; String Ende
  42.  
  43.     pha        ; Char. merken
  44.     and #$7f    ; Shift BIT ausblenden
  45.     jsr putchar    ; und ins Display
  46.     iny        ; Pointer auf nächstes Zeichen 
  47.     pla        ; Character zurück
  48.     and #$80    ; geshiftet ?
  49.     beq loop    ; nein, nicht der letzte Character
  50.  
  51. end    ply        ; Register zurück
  52.     pla
  53.     rts
  54.     bend
  55.  
  56.  
  57. ; =========================================================================
  58. ;
  59. ; Type    : Unterprg.
  60. ;    : Hex-Zahl ausgeben
  61. ;
  62. ; Eingang    : Wert im Accu
  63. ;
  64. ; Ausgang    : Hex-Wert 2-stellig im Display ausgeben
  65. ;
  66. ; Register    : ----
  67. ;
  68. ; (c) by Thomas Lehmann Feb. 1990
  69. ;
  70. ; =========================================================================
  71.  
  72. puthex    pha
  73.     jsr puthex_0
  74.     pla
  75.     rts
  76.  
  77. puthex_0    pha        ; Wert retten
  78.     lsr        ; oberes Nibble in unteres schieben
  79.     lsr
  80.     lsr
  81.     lsr
  82.     jsr puthex_1    ; und ASCII ausgeben
  83.     pla
  84.     and #%00001111    ; oberes Nibble ausblenden
  85.  
  86. puthex_1    clc
  87.     cmp #$0a    ; ist Wert <9
  88.     bcc puthex_asc    ; ja
  89.  
  90.     adc #6        ; Hex A-F erzeugen
  91. puthex_asc    adc #48        ; ASCII dazu
  92.     jmp putchar    ; und ins Display
  93.  
  94.  
  95. ; =========================================================================
  96. ;
  97. ; Type    : Unterprg.
  98. ;    : Dezimal-Zahl ausgeben
  99. ;
  100. ; Eingang    : Wert im Accu
  101. ;
  102. ; Ausgang    : putdez   : dezimal-Wert 3-stellig im Display ausgeben
  103. ;     : putdez99 : dezimal-Wert 2-stellig im Display ausgeben
  104. ;     : putdez9  : dezimal-Wert 1-stellig im Display ausgeben
  105. ;
  106. ; Register    : Accu
  107. ;
  108. ; (c) by Thomas Lehmann Mai 1990
  109. ;
  110. ; =========================================================================
  111.  
  112.     ; 16BIT, 5-stellig dezimal, ACCU = high, X = low
  113.     ; ----------------------------------------------
  114. putdez16    stx dez_low    ; Wert für Ausgaberoutine eintragen
  115.     sta dez_high
  116.     lda #00        ; Anzahl der Stellen die nicht angezeigt werden
  117.     bra dezout    ; und dezimal ausgeben
  118.  
  119.  
  120.     ; 16BIT, 4-stellig dezimal, ACCU = high, X = low
  121.     ; ----------------------------------------------
  122. putdez16_4    stx dez_low    ; Wert für Ausgaberoutine eintragen
  123.     sta dez_high
  124.     lda #01        ; Anzahl der Stellen die nicht angezeigt werden
  125.     bra dezout    ; und dezimal ausgeben
  126.  
  127.  
  128.     ; 3-stellig dezimal
  129.     ; -----------------
  130. putdez    sta dez_low    ; Wert für Ausgaberoutine eintragen
  131.     lda #02        ; Anzahl der Stellen die nicht angezeigt werden
  132.     bra putdez_1    ; und dezimal ausgeben
  133.  
  134.  
  135.     ; 2-stellig dezimal
  136.     ; -----------------
  137. putdez99    sta dez_low    ; Wert für Ausgaberoutine eintragen
  138.     lda #03        ; Anzahl der Stellen die nicht angezeigt werden
  139.     bra putdez_1    ; und dezimal ausgeben
  140.  
  141.  
  142.     ; 1-stellig dezimal
  143.     ; -----------------
  144. putdez9    sta dez_low    ; Wert für Ausgaberoutine eintragen
  145.     lda #04        ; Anzahl der Stellen die nicht angezeigt werden
  146.  
  147.  
  148. putdez_1    stz dez_high
  149.     bra dezout    ; und dezimal ausgeben
  150.  
  151.  
  152. ; =========================================================================
  153. ;
  154. ; Type    : Unterprg.
  155. ;    : 16 BIT Zahl dezimal ausgeben
  156. ;
  157. ; Eingang    : Anzahl der Stellen die nicht angezeigt werden sollen im Accu
  158. ;    : low Byte des Wertes in "dez_low"
  159. ;    : high Byte des Wertes in "dez_high"
  160. ;
  161. ; Ausgang    : 16 BIT Wert dezimal im Display ausgeben, max. 5 stellig
  162. ;
  163. ; Register    : Accu
  164. ;
  165. ; (c) by Thomas Lehmann Mai 1990
  166. ;
  167. ; =========================================================================
  168.  
  169. dezout    phx        ; Register retten
  170.     phy
  171.     sta hlp_reg    ; Anzahl der Stellen merken
  172.     ldy #7        ; Offset auf Umrechnungstabelle laden
  173. dezout_1    ldx #"0"    ; ASCII Null laden
  174. dezout_2    sec
  175.     lda dez_low    ; low Byte des Werts laden
  176.     sbc dez_tab-1,y    ; akt. Potenz aus Tabelle abziehen
  177.     pha        ; Resultat retten
  178.     dey        ; Offset auf nächsten Tabelleneintrag setzen
  179.     lda dez_high    ; high Byte des Werts laden
  180.     sbc dez_tab+1,y    ; akt. Potenz aus Tabelle abziehen
  181.     bcc dezout_3    ; Wert war kleiner
  182.  
  183.     sta dez_high    ; Resultat ablegen
  184.     pla        ; low Resultat laden
  185.     sta dez_low    ; und als neuen Wert ablegen
  186.     inx        ; Ziffer erzeugen
  187.     iny        ; Offset richten
  188.     bra dezout_2    ; Wert noch nicht ermittelt
  189.  
  190. dezout_3    pla        ; low Resultat laden
  191.     dec hlp_reg    ; soll Stelle ausgegeben werden ?
  192.     bpl dezout_4    ; nein, Stelle überspringen
  193.  
  194.     txa        ; nach RA
  195.     jsr putchar    ; und ausgeben
  196. dezout_4    dey        ; nächste Stelle einstellen
  197.     bpl dezout_1    ; und berechnen
  198.  
  199.     lda dez_low    ; Restwert laden, letzte Stelle
  200.     ora #"0"    ; ASCII erzeugen
  201.     ply        ; Register zurück
  202.     plx
  203.     jmp putchar    ; letzte Stelle ausgeben und Ende
  204.  
  205. dez_tab    word 10
  206.     word 100
  207.     word 1000
  208.     word 10000
  209.  
  210.  
  211.  
  212. ; =========================================================================
  213. ;
  214. ; Funktion    : DM Betrag ausgeben, DM.Pf
  215. ;
  216. ; Eingang    : DM Betrag MSB Accu, LSB X
  217. ;      Pfennige in Y
  218. ;
  219. ; Ausgang    : -------
  220. ;
  221. ; Register    : Accu
  222. ;
  223. ; (c) by Thomas Lehmann Oktober 1991
  224. ;
  225. ; =========================================================================
  226.  
  227. put_dm    jsr putdez16    ; DM Betrag ausgeben
  228.     lda #"."
  229.     jsr putchar
  230.     tya        ; Pfennige laden
  231.     jmp putdez99    ; Pfennige 2-stellig ausgeben
  232.  
  233.  
  234. ; =========================================================================
  235. ;
  236. ; Funktion    : Wähltaste ausgeben
  237. ;
  238. ; Eingang    : Tastenwert im Accu
  239. ;
  240. ; Ausgang    : Wähltaste im Display ausgeben
  241. ;    : "*" und "#" gegen "/" und "H" ausgetauscht
  242. ;    : bei Erdtaste Punkt ausgegeben
  243. ;
  244. ; Register    : Accu
  245. ;
  246. ; (c) by Thomas Lehmann Feb. 1990
  247. ;
  248. ; =========================================================================
  249.  
  250.     ifndef EPROM2
  251. wta_displ    cmp #ERD_ZIFF    ; ist Ziffer Erdtaste ?
  252.     beq wta_displ_1    ; ja, direkt ausgeben
  253.  
  254.     jsr wta_to_asc    ; Wtastenwert in ASCII wandeln
  255.     cmp #"0"    ; ist es 0-9 ?
  256.     bcs wta_displ_3    ; ja, Zeichen direkt ausgeben
  257.  
  258.     cmp #"*"    ; ist es "*"
  259.     beq wta_displ_2    ; ja
  260.  
  261.     lda #"H"    ; "#" gegen "H" austauschen, Hörton
  262.     bra wta_displ_3    ; und ausgeben
  263.  
  264. wta_displ_1    lda #"*"    ; ASCII-Wert für Erdtaste laden
  265.     bra wta_displ_3    ; und ausgeben
  266.  
  267. wta_displ_2    lda #"/"    ; "*" gegen "/" austauschen
  268. wta_displ_3    jmp putchar    ; und ins Display schreiben
  269.     endif
  270.  
  271.  
  272. ; =========================================================================
  273. ;
  274. ; Type    : Unterprg.
  275. ;    : Wähltastenwert in ASCII wandeln
  276. ;
  277. ; Eingang    : Tastenwert im Accu
  278. ;
  279. ; Ausgang    : ASCII-Wert im Accu
  280. ;
  281. ; Register    : Accu
  282. ;
  283. ; (c) by Thomas Lehmann Feb. 1990
  284. ;
  285. ; =========================================================================
  286.  
  287.     ifndef EPROM2
  288. wta_to_asc    jsr check_wta    ; Wähltaste 1-9 ?
  289.     cmp #11        ; ist es "#"
  290.     bcc wta_asc_1    ; nein, Ziffer 0-9
  291.  
  292.     bne wta_asc_2    ; es ist "*"
  293.  
  294.     lda #"#"    ; ASCII-Wert laden
  295.     bra wta_asc_3    ; und Ende
  296.  
  297. wta_asc_2    lda #"*"    ; ASCII-Wert laden
  298.     bra wta_asc_3    ; und Ende    
  299.  
  300. wta_asc_1    clc
  301.     adc #48        ; ASCII dazugeben
  302. wta_asc_3    rts
  303.     endif
  304.  
  305.  
  306. ; =========================================================================
  307. ;
  308. ; Type    : Unterprg.
  309. ;    : Zeichen im Display ausgeben
  310. ;
  311. ; Eingang    : auszugebener Character im Accu
  312. ;
  313. ; Ausgang    : Character im Displaybuffer abgelegt
  314. ;    : im Display an Cursorposition ausgegeben
  315. ;
  316. ; Register    : ------
  317. ;
  318. ; (c) by Thomas Lehmann Feb. 1990
  319. ;
  320. ; =========================================================================
  321.  
  322. putchar    phx        ; Register retten
  323.     phy
  324.  
  325.     ldx dp_bu_po    ; akt. Pointer im Displaybuffer laden
  326.     cpx #DP_BU_LA    ; noch Platz frei
  327.     bcc putchar_1    ; ja, Zeichen anhängen
  328.  
  329.     ; Character im Displaybuffer nach links rausschieben
  330.     ; --------------------------------------------------
  331.     pha        ; Character retten
  332.     ldy #00        ; 1. Character im Buffer einstellen
  333.     tya        ; Cursor auf 1. Position im Display setzen
  334.     jsr curs_set    ; Cursor setzen
  335.  
  336. dp_schieb    lda dp_buff+1,y    ; 2.Character holen
  337.     sta dp_buff,y    ; und einen vorher ablegen
  338.     jsr char_out    ; Character ausgeben
  339.     iny
  340.     cpy #DP_BU_LA-1    ; alle Character geschoben ?
  341.     bcc dp_schieb    ; nein, nächsten Character schieben
  342.     pla        ; auszugebenen Character zurückholen
  343.     dex        ; auf letze Position im Display stellen
  344.  
  345. putchar_1    sta dp_buff,x    ; Char. im Displaybuffer ablegen
  346.     jsr char_out    ; und ins Display schreiben
  347.  
  348.     ply        ; Register zurück
  349.     plx
  350.     rts
  351.  
  352.  
  353. ; =========================================================================
  354. ;
  355. ; Type    : Unterprg.
  356. ;    : einzelnes Zeichen ins Display schreiben
  357. ;
  358. ; Eingang    : auszugebenes Zeichen : Accu
  359. ;
  360. ; Ausgang    : Character im Display an Cursorposition ausgegeben
  361. ;
  362. ; Register    : -------
  363. ;
  364. ; (c) by Thomas Lehmann Feb. 1990
  365. ;
  366. ; =========================================================================
  367.  
  368. char_out    jsr dp_busy    ; warten bis Display für Daten bereit
  369.     pha        ; Char. retten
  370.     lda #RS_FLAG    ; Display für ASCII-Character vorbereiten
  371.     tsb Dp_rs    ; BIT setzen
  372.     pla        ; Character zurück
  373.     sta Display+1    ; und ausgeben
  374.     inc dp_bu_po    ; Pointer auf akt. Char im Buffer +1
  375.     rts
  376.  
  377.  
  378. ; =========================================================================
  379. ;
  380. ; Funktion    : "backspace" -> Zeichen vor Cursor löschen
  381. ;     : "curs_left" -> Cursor 1x nach links
  382. ;
  383. ; Eingang    : -------
  384. ;
  385. ; Ausgang    : -------
  386. ;
  387. ; Register    : -------
  388. ;
  389. ; (c) by Thomas Lehmann Feb. 1990
  390. ;
  391. ; =========================================================================
  392.  
  393. curs_left    pha
  394.     phx
  395.     ldx #00        ; Funktionscode: nur Cursor setzen
  396.     bra cursor
  397.  
  398.  
  399. backspace    pha
  400.     phx
  401.     ldx #01        ; Funktion: Backspace ausführen
  402.  
  403. cursor    lda dp_bu_po    ; Cursorposition laden
  404.     dec a        ; auf zu löschene Ziffer setzen
  405.     jsr curs_set    ; und Cursor setzen
  406.     cpx #0        ; Funktion Cursor setzen
  407.     beq cursor_1    ; ja, Ende
  408.  
  409.     jsr space    ; Ziffer im Display clr
  410.     jsr curs_set    ; Cursor wieder auf akt. Eingabe setzen
  411. cursor_1    plx
  412.     pla
  413.     rts
  414.  
  415.  
  416. ; =========================================================================
  417. ;
  418. ; Type    : Unterprg.
  419. ;    : einzelnes Zeichen ins Display schreiben, SPACE hinterher
  420. ;
  421. ; Eingang    : auszugebenes Zeichen im Accu
  422. ;
  423. ; Ausgang    : Character und SPACE im Display an Cursorposition ausgegeben
  424. ;
  425. ; Register    : ------
  426. ;
  427. ; (c) by Thomas Lehmann Feb. 1990
  428. ;
  429. ; =========================================================================
  430.  
  431. putchar_sp    jsr putchar    ; Zeichen ausgeben
  432.     bra space    ; SPACE ausgeben
  433.  
  434.  
  435. ; =========================================================================
  436. ;
  437. ; Funktion    : SPACE ausgeben
  438. ;
  439. ; Eingang    : ------
  440. ;
  441. ; Ausgang    : SPACE im Display an Cursorposition ausgegeben
  442. ;
  443. ; Register    : ------
  444. ;
  445. ; (c) by Thomas Lehmann Feb. 1990
  446. ;
  447. ; =========================================================================
  448.  
  449. space    pha        ; Accu retten
  450.     lda #SPACE    ; Characterwert für SPACE laden    
  451.     jsr putchar    ; und ausgeben
  452.     pla
  453.     rts
  454.  
  455. ; =========================================================================
  456. ;
  457. ; Funktion    : Cursor setzen
  458. ;
  459. ; Eingang    : Cursorposition im Accu
  460. ;
  461. ; Ausgang    : --------
  462. ;
  463. ; Register    : --------
  464. ;
  465. ; (c) by Thomas Lehmann Feb. 1990
  466. ;
  467. ; =========================================================================
  468.  
  469. curs_set    pha        ; Accu retten
  470.     jsr dp_busy    ; Display für Befehl vorbereiten
  471.     sta dp_bu_po    ; Pointer auf Character im Display setzen
  472.     ora #$80    ; Daten Speicher Adresse setzen
  473.     sta Display    ; und Cursor setzen
  474.     pla        ; Accu zurück
  475.     rts
  476.  
  477. ; =========================================================================
  478. ;
  479. ; Type    : Unterprg.
  480. ;    : Cursor einschalten
  481. ;
  482. ; Eingang    : ------
  483. ;
  484. ; Ausgang    : Cursor eingeschaltet, Zeichen unter Cursor blinkt
  485. ;
  486. ; Register    : -----
  487. ;
  488. ; (c) by Thomas Lehmann Feb. 1990
  489. ;
  490. ; =========================================================================
  491.  
  492. curs_on    bbs ST_CURS,feap_stat,curs_on_e    ; Cursor ist eingeschaltet
  493.     pha        ; Accu retten
  494.     jsr dp_busy    ; Display für Befehl vorbereiten
  495.     lda #$0f    ; Befehl laden
  496.     sta Display    ; und ans Display weitergeben
  497.     smb ST_CURS,feap_stat    ; Cursor ist eingeschaltet eintragen
  498.     pla        ; Accu zurück                   
  499. curs_on_e    rts
  500.  
  501.  
  502. ; =========================================================================
  503. ;
  504. ; Type    : Unterprg.
  505. ;    : Cursor ausschalten
  506. ;
  507. ; Eingang    : ------
  508. ;
  509. ; Ausgang    : Cursor ausgeschaltet
  510. ;
  511. ; Register    : -----
  512. ;
  513. ; (c) by Thomas Lehmann Feb. 1990
  514. ;
  515. ; =========================================================================
  516.  
  517. curs_off    bbr ST_CURS,feap_stat,curs_off_e    ; Cursor ist ausgeschaltet
  518.  
  519.     pha        ; Accu retten
  520.     jsr dp_busy    ; Display für Befehl vorbereiten
  521.     lda #12        ; Befehl laden
  522.     sta Display    ; und ans Display weitergeben
  523.     rmb ST_CURS,feap_stat    ; Cursor ist ausgeschaltet eintragen
  524.     pla        ; Accu zurück                   
  525. curs_off_e    rts
  526.  
  527.  
  528. ; =========================================================================
  529. ;
  530. ; Type    : Hauptprg.
  531. ;    : Display löschen, Cursor aus
  532. ;
  533. ; Eingang    : ------
  534. ;
  535. ; Ausgang    : Display clr
  536. ;    : Cursor an 1. Position gesetzt und ausgeschaltet
  537. ;
  538. ; Register    : -----
  539. ;
  540. ; (c) by Thomas Lehmann Feb. 1990
  541. ;
  542. ; =========================================================================
  543.  
  544. dpclr_cuoff    jsr dp_clr    ; Display clr
  545.     bra curs_off    ; Cursor ausschalten
  546.  
  547.  
  548. ; =========================================================================
  549. ;
  550. ; Type    : Hauptprg.
  551. ;    : Display löschen
  552. ;
  553. ; Eingang    : ------
  554. ;
  555. ; Ausgang    : Display und Displaybuffer mit SPACE beschrieben
  556. ;    : Cursor an 1. Position gesetzt
  557. ;
  558. ; Register    : -----
  559. ;
  560. ; (c) by Thomas Lehmann Feb. 1990
  561. ;
  562. ; =========================================================================
  563.  
  564. dp_clr    pha        ; Register retten
  565.     phx
  566.     lda #$00    ; 1. Cursorposition
  567.     jsr curs_set    ; Cursor setzen
  568.     ldx #DP_BU_LA    ; Displaybuffer Länge laden
  569.  
  570.     block
  571. loop    lda #SPACE    ; Space laden
  572.     jsr putchar    ; und ins Display schreiben
  573.     dex        ; alle Zeichen überschrieben ?
  574.     bne loop    ; nein, weiter
  575.     bend
  576.  
  577.     txa        ; 1. Cursorposition
  578.     jsr curs_set    ; Cursor setzen
  579.  
  580.     plx        ; Register zurück
  581.     pla
  582.     rts
  583.  
  584.  
  585. ; =========================================================================
  586. ;
  587. ; Type    : Hauptprg.
  588. ;    : 40 uS warten bis Display für neue Zeichen bereit ist
  589. ;
  590. ; Eingang    : ------
  591. ;
  592. ; Ausgang    : Display im Befehlsmodus
  593. ;
  594. ; Register    : -----
  595. ;
  596. ; (c) by Thomas Lehmann Feb. 1990
  597. ;
  598. ; =========================================================================
  599.  
  600. dp_busy    pha        ; Accu retten
  601.     phx
  602.  
  603.     ldx #10        ; Schleifenanzahl
  604. dp_busy_1    dex        ; 2 Cycles
  605.     bne dp_busy_1    ; 3 Cycles
  606.  
  607.     lda #RS_FLAG    ; Display für Befehl vorbereiten
  608.     trb Dp_rs    ; BIT löschen
  609.     plx
  610.     pla        ; Accu zurück
  611.     rts
  612.  
  613.  
  614. ; =========================================================================
  615. ;
  616. ; Funktion    : Prg. für aktuelle Displayausgaben ausführen
  617. ;       wird von Haup-Schleife zyklisch aufgerufen
  618. ;
  619. ; Eingang    : ------
  620. ;
  621. ; Ausgang    : ------
  622. ;
  623. ; Register    : X
  624. ;
  625. ; (c) by Thomas Lehmann Oktober 1991
  626. ;
  627. ; =========================================================================
  628.  
  629.     ifndef EPROM2
  630. displ_tab    word disp_reset    ; wieder in Uhranzeige schalten
  631.     word put_uhr    ; Uhranzeige
  632.     word put_vers    ; Version anzeigen
  633.     word whl_abl    ; Wahlablauf-Cursor
  634.     word st_dp_tim    ; Display Timeout aus
  635.     word _rts    ; kein Displayprg. ausführen
  636.  
  637.  
  638. displ_out    ldx struct_tim100+DISPL_TIM_O    ; Display Timer abgelaufen ?
  639.     beq displ_out_1    ; ja, RESET
  640.  
  641.     ldx displ_prg    ; Programmnr. laden    
  642. displ_out_1    jmp (displ_tab,x)    ; Programm ausführen
  643.  
  644.  
  645.  
  646.     ; Display wieder in Uhranzeige schalten
  647.     ; =====================================
  648. disp_reset    bbr MOD_BTA,modus,displ_res_1    ; BTA war nicht aktiviert
  649.     jsr bta_off    ; LED-RAM clr, Key Ende ausführen
  650.  
  651. displ_res_1    jsr dp_clr    ; Display löschen
  652.     jsr key_ende    ; Ende Taste ausführen
  653.  
  654.     rmb 7,sekunde    ; Uhr direkt anzeigen
  655.     ldx #UHR_DISPL    ; Prg. Nr. für Uhranzeige
  656.     lda whl_zcnt    ; hat eine Wahl stattgefunden ?
  657.     beq displ_res_2    ; nein, Uhr einschalten
  658.  
  659.     jsr whl_displ    ; Wahlziffern wieder ins Display
  660.     ldx #WHLCU_DISPL    ; Wahlablauf Cursor zeigen
  661.  
  662. displ_res_2    stx displ_prg    ; und für Dsp. Prg. eintragen
  663.     jmp (displ_tab,x)    ; Programm ausführen
  664.     endif
  665.  
  666.  
  667. ; =========================================================================
  668. ;
  669. ; Funktion    : Timer für Displayanzeige ohne Tastendruck aufziehen
  670. ;
  671. ; Eingang    : -------
  672. ;
  673. ; Ausgang    : -------
  674. ;
  675. ; Register    : -------
  676. ;
  677. ; (c) by Thomas Lehmann Feb. 1990
  678. ;
  679. ; =========================================================================
  680.  
  681. st_dp_tim    pha        ; Register retten
  682.     lda #DISPL_TIM    ; Zeit bis Uhranzeige wieder ein laden
  683.     sta struct_tim100+DISPL_TIM_O    ; Display-Timer starten
  684.     pla        ; Register zurück
  685.     rts
  686.  
  687.  
  688.  
  689. ; =========================================================================
  690. ;
  691. ; Funktion    : Textlänge ermitteln, letztes Zeichen geschiftet
  692. ;
  693. ; Eingang    : Adr. des Textes in "ind_adr"
  694. ;
  695. ; Ausgang    : ind_adr zeigt auf Zeichen hinter dem Textende
  696. ;
  697. ; Register    : --------
  698. ;
  699. ; (c) by Thomas Lehmann Januar 1991
  700. ;
  701. ; =========================================================================
  702.  
  703. strlen    pha
  704. strlen_lp    ?inc16    ind_adr    ; Ptr. auf 1. Textzeichen
  705.     lda (ind_adr)    ; Character laden
  706.     beq strlen_end    ; Endekennung gefunden
  707.  
  708.     and #$80    ; geshiftet ?
  709.     beq strlen_lp    ; nein, nicht der letzte Character
  710.  
  711.     ?inc16    ind_adr    ; Ptr. auf nächstes Zeichen
  712. strlen_end    pla
  713.     rts
  714.  
  715.  
  716. ; =========================================================================
  717. ;
  718. ; Funktion    : Texte ausgeben
  719. ;
  720. ; Eingang    : low Adr. des 1. Textes in X-Reg
  721. ;    : high Adr. des 1. Textes in Y-Reg
  722. ;    : Anzahl Texte im ACCU
  723. ;
  724. ; Ausgang    : Text ausgegeben
  725. ;
  726. ; Register    : 
  727. ;
  728. ; (c) by Thomas Lehmann Januar 1991
  729. ;
  730. ; =========================================================================
  731.  
  732. init_dsptxt    sta anz_txt    ; Anzahl verschiedener Texte merken
  733.     stz akt_txt    ; 1. Text einstellen
  734.     stx dsp_txt    ; Textadr. merken
  735.     sty dsp_txt+1
  736.     jmp puttxt    ; und 1. Text ausgeben
  737.  
  738.  
  739.  
  740. nxt_dsptxt    inc akt_txt    ; nächsten Text einstellen
  741.     lda akt_txt
  742.     cmp anz_txt    ; bereits alle Texte ausgegeben ?
  743.     bcc nxt_dsp_1    ; nein, neuen Text ausgeben
  744.  
  745.     stz akt_txt    ; wieder den 1. Text einstellen
  746.     lda #$00
  747.  
  748.  
  749. nxt_dsp_1    ldy dsp_txt    ; low Byte des 1.Textes
  750.     sty ind_adr    ; für Textlänge
  751.     ldy dsp_txt+1    ; dito high
  752.     sty ind_adr+1
  753.  
  754.     ; Textadr. ermitteln
  755.     ; ------------------
  756. nxt_dsp_lp    sec
  757.     sbc #1        ; aktuellen Text gefunden ?
  758.     bmi nxt_dsp_out    ; ja, Text ausgeben
  759.  
  760.     jsr strlen    ; Textende ermitteln, (ind_adr)
  761.     bra nxt_dsp_lp    ; testen ob Textnr. gefunden ist
  762.     
  763.     ; Text ausgeben
  764.     ; -------------
  765. nxt_dsp_out ldx ind_adr    ; Textadr. low
  766.     ldy ind_adr+1    ; dito high
  767.     bra puttxt    ; und Text ausgeben
  768.  
  769.  
  770.  
  771. ; =========================================================================
  772. ;
  773. ; Funktion    : verschiedene Festtexte ausgeben
  774. ;      put_aend
  775. ;      put_dm_txt
  776. ;      put_kzram
  777. ;      put_rufnr
  778. ;      put_babyruf
  779. ;
  780. ; Eingang    : -------
  781. ;
  782. ; Ausgang    : ---------
  783. ;
  784. ; Register    : X, Y
  785. ;
  786. ; (c) by Thomas Lehmann Oktober 1991
  787. ;
  788. ; =========================================================================
  789.  
  790.  
  791. aend_txt    byte DSP_CLR
  792.     shift "aendern ? (1=J, 2=N) : "
  793.  
  794. dm_txt    byte 0
  795.     shift "DM:"
  796.  
  797. kzram_txt    byte    02|DSP_CLR|CURS_SET
  798.     shift "! Zusatz-RAM fehlt !"
  799.  
  800. rufnr_txt    byte    DSP_CLR
  801.     shift "Rufnummer ?"
  802.  
  803. baby_txt    byte 17|CURS_SET
  804.     shift "Babyruf"
  805.  
  806.  
  807.  
  808.  
  809.     ; Text "aendern ?" ausgeben
  810.     ; -------------------------
  811. put_aend    ldx #<aend_txt    ; Text ausgeben
  812.     ldy #>aend_txt
  813.     bra puttxt
  814.  
  815.  
  816.     ; Text "DM:" ausgeben, Cursorpos. im Accu
  817.     ; ---------------------------------------
  818. put_dm_txt    jsr curs_set    ; Cursor setzen
  819.     ldx #<dm_txt    ; Text ausgeben
  820.     ldy #>dm_txt
  821.     bra puttxt
  822.  
  823.  
  824.     ; Text "Zusatz RAM fehlt" ausgeben
  825.     ; --------------------------------
  826. put_kzram    ldx #<kzram_txt    ; Text ausgeben
  827.     ldy #>kzram_txt
  828.     bra puttxt
  829.  
  830.  
  831.  
  832.     ; Text "Rufnummer ?" ausgeben
  833.     ; ---------------------------
  834. put_rufnr    ldx #<rufnr_txt    ; Text ausgeben
  835.     ldy #>rufnr_txt
  836.     bra puttxt
  837.  
  838.  
  839.  
  840.     ; Text "Babyruf" ausgeben
  841.     ; -----------------------
  842. put_babyruf    ldx #<baby_txt    ; Text ausgeben
  843.     ldy #>baby_txt
  844. ;    bra ptxt_dspok
  845.  
  846.  
  847. ptxt_dspok    lda displ_prg    ; "puttxt" schaltet Display aus
  848.     jsr puttxt
  849.     sta displ_prg
  850.     rts
  851.  
  852.  
  853.  
  854. ; =========================================================================
  855. ;
  856. ; Funktion    : Texte ausgeben
  857. ;      Display wenn angegeben clr
  858. ;      Cursor gesetzt
  859. ;      Text im Display ausgegeben
  860. ;
  861. ; Eingang    : Textadr. low X-Reg.
  862. ;    : Textadr. high Y-Reg.
  863. ;
  864. ; Ausgang    : ---------
  865. ;
  866. ; Register    : X, Y
  867. ;
  868. ; (c) by Thomas Lehmann Januar 1991
  869. ;
  870. ; =========================================================================
  871.  
  872. puttxt    pha        ; Register retten
  873.  
  874.     stx ind_adr    ; Textadr. ablegen
  875.     sty ind_adr+1
  876.  
  877.     lda (ind_adr)    ; Statusbyte laden
  878.     bit #DSP_CLR    ; Display clr ?
  879.     beq puttxt_1    ; nein
  880.  
  881.     jsr dp_clr    ; Display löschen
  882. puttxt_1    jsr curs_off    ; Cursor ausschalten
  883.     bit #CURS_ON    ; Cursor einschalten ?
  884.     beq puttxt_2    ; nein, Cursor bleibt aus
  885.  
  886.     jsr curs_on    ; Cursor einschalten
  887. puttxt_2    bit #CURS_SET    ; Cursor setzen ?
  888.     beq puttxt_3    ; nein
  889.  
  890.     and #%00011111     ; Cursorposition
  891.     jsr curs_set    ; Cursor setzen
  892. puttxt_3    lda #NO_DISPL    ; kein Display-Prg. ausführen
  893.     sta displ_prg    ; Prg.Nr. für Displayausgabe eintragen
  894.  
  895.     ?inc16 ind_adr    ; Adresse des Textes einstellen
  896.     pla        ; Register zurück
  897.     jmp puts    ; Text ins Display, Adr. in "ind_adr"
  898.  
  899.  
  900.  
  901. ; --------------------------------------------------------------------------
  902.  
  903. HLP    set    *
  904. _DISPLAY    equ    HLP-MODUL_START        ; Größe des Moduls
  905.  
  906.  
  907.  
  908.