Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Demoprogramm: Etwas Stringverarbeitung zusätzlich mit BIN$ Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 29.03.2026 14:01)
 Als Antwort auf Demoprogramm: Etwas Stringverarbeitung von Dietmar - 10.03.2026 23:18
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini Station
' ===========================================================================
' Demoprogramm: Etwas Stringverarbeitung, zusätzlich mit BIN
' In OCBASIC 1.12a_e1 für Open-Maxi von Dietmar Harlos am 7. März 2026
' Um BIN$ ergänzt von Dietmar Harlos am 29. März 2026.
' ===========================================================================

' Es können Zeichenketten an den String angehängt werden und es lassen sich
' vorzeichenbehaftete 16-Bit-Zahlen im ASCII-Code einfügen. Die Ausgabe
' findet hier in diesem Demoprogramm auf der Seriellen Schnittstelle statt.
' Das läßt sich aber anpassen, da die Subroutine in BASIC erstellt wurde.

' Im "Demoprogramm: Zum Palindrom-Tag" wird gezeigt, wie ein String von der
' Seriellen Schnittstelle gelesen werden kann:

' http://ccintern.dharlos.de/forum/lesen.php?eintrag=17539

' --- Definitionen ----------------------------------------------------------

INCLUDE "omax.def"  'Definitionen für die Open-Maxi

DEFINE string &h2aa 'Buffer an 1. Adresse hinter dem USER-RAM
                    'Nullterminierter String mit 255 Bytes
DIM w WORD

DIM offset BYTE     'Offset im String
DIM temp1 BYTE      'für STR
DIM temp2 BYTE      'für STR

DEFINE OmOsTemp OSTEMP
DEFINE OmOsCnfg &h7e 'diverse Flags zur Konfiguration des OS

' --- Hauptprogramm ---------------------------------------------------------

PrintSpc=ON         'SPACE vor einem dezimalen PRINT
End2Host=ON         'Bei Programmende gleich in den Host-Modus wechseln

PRINT "Etwas Stringverarbeitung mit BIN$"

POKE string,0       'String löschen

w=1
STR w
SYS Add2String : INLINE "=%",0
BIN w

w=&h8000
STR w
SYS Add2String : INLINE "=%",0
BIN w

w=&haaaa
SYS Add2String : INLINE " $",0
PrintHex=ON
STR w
SYS Add2String : INLINE "=%",0
BIN w

PrintString         'Es erscheint: "1=%0000000000000001 -32768=%1000000000000000 $aaaa=%1010101010101010"
PRINT

PRINT "Programmende."

END

' --- Subroutinen und Funktionen --------------------------------------------

' Den String ausgeben
' In OCBASIC, damit vom Anwender anpaßbar.

' Es wäre auch ein "PrintString adr" möglich, mit dessen Hilfe verschiedene
' Strings ausgegeben werden können.

PROCEDURE PrintString

  offset=0

  WHILE PEEK(string+offset)
    PUT PEEK(string+offset)
    ADD offset,1
  WEND

  RETURN

END PROCEDURE

' Die folgende Routine muß folgendermaßen aufgerufen werden:
'  SYS Add2String : INLINE "Text an String anhängen",0

PROCEDURE Add2String INLASM

! jsr suche0

#add2string_loop
! ldhx PCADR
! lda ,x
! aix #1
! sthx PCADR

! clrh
! ldx offset
! sta string,x

! inc offset

! tsta
! bne add2string_loop

! rts

END PROCEDURE

' Die folgende Routine muß folgendermaßen aufgerufen werden:
'  STR 12345

PROCEDURE STR (16bitvalue) INLASM

! jsr suche0

! jsr FwPop         'Rueckgabe eines Words auf OSTEMP:A
! ldx OSTEMP

' PRINT-Routine fuer vorzeichenbehaftete 16-Bit-Zahlen
' mit Unterstuetzung fuer PrintHex und PrintSpc
' von Dietmar Harlos am 9. Juni 2006
' angepaßt am 7. März 2026

#print16bit
! sta temp2         'Lowbyte
! stx temp1         'Highbyte
! brclr #0,OmOsCnfg,print16_1   'fPrintHex
! ldx #16           'PrintHex
! bra print16_4
#print16_1
! brclr #1,OmOsCnfg,print16_2   'fPrintSpc
! lda #" "          'PrintSpc
! jsr PutChar2String
#print16_2
! brclr #7,temp1,print16_3
! lda #"-"          'negative Zahl
! jsr PutChar2String
! com temp1         'oder einfach jsr negate_a
! neg temp2
! blo print16_3
! inc temp1
#print16_3
! ldx #10
#print16_4
! clr OmOsTemp      'Man koennte die MOD-10-Berechnung mit der Routine
#print16_5          'fuer 16-Bit-Division durchfuehren, aber die ist
! inc OmOsTemp      'langsamer und benoetigt vor allem mehr temporaeren
! lda temp1         'Speicher, der in dieser Routine fuer den Hardware-
! clrh              'stack gebraucht wird. Deshalb hier eine Division
! div               'fuer 16-Bit durch 8-Bit.
! sta temp1
! lda temp2
! div               'a=h:a\x, a:result, h:remainder
! pushh
! sta temp2
! ora temp1
! bne print16_5
#print16_6
! popa
! add #"0"
! cmp #"9"
! bls print16_7
! add #&h27         'Erweiterung fuer hexadezimale Ausgabe
#print16_7
! jsr PutChar2String
! dbnz OmOsTemp,print16_6
'! stc
'! rts

! clra              'nullterminierter String
! jsr PutChar2String
! rts

END PROCEDURE

' Die folgende Routine muß folgendermaßen aufgerufen werden:
'  BIN -32768

PROCEDURE BIN (16bitvalue) INLASM

! jsr suche0

! jsr FwPop         'Rueckgabe eines Words auf OSTEMP:A

! pusha             'LSB auf den Hardwarestack

! mov #16,temp1     '16 Stellen
#Bin_loop
! lda #"0"          'ASC("0")
! lsl 1,sp          'Niederwertigstes Byte
! rol OSTEMP        'Höherwertigstes Byte
! bcc Bin_NoCarry   'Carry gesetzt?
! inca              'Dann ASC("1")
#Bin_NoCarry
! jsr PutChar2String
! dbnz temp1,Bin_loop

! popa              'LSB wieder entfernen

! clra              'nullterminierter String
! jsr PutChar2String
! rts

END PROCEDURE

' Hilfsroutine

PROCEDURE suche0 INLASM

! clrh
! clrx
#suche0_loop
! lda string,x
! beq suche0_ende
! aix #1            'damit der Code nicht hängen kann
! bra suche0_loop
#suche0_ende
! stx offset

! rts

END PROCEDURE

' Hilfsroutine

PROCEDURE PutChar2String (Byte in A) INLASM

! clrh              'erforderlich
! ldx offset
! sta string,x
! incx
! stx offset

! rts

END PROCEDURE

' ---------------------------------------------------------------------------
' Die Firmware-Routinen einbinden
' ---------------------------------------------------------------------------

INCLUDE "om_fw.pro"

' --- Programmende ---------------------------------------------------------


Passender Link: Infosite zu den OM-Mikrocontrollern

Meine Homepage: http://ccintern.dharlos.de/

 Antwort schreiben

Bisherige Antworten:

Re: Demoprogramm: Etwas Stringverarbeitung zusätzlich mit BIN$ (von Christian - 29.03.2026 22:17)
    Re: Demoprogramm: Etwas Stringverarbeitung zusätzlich mit BIN$ (von Dietmar - 29.03.2026 22:29)