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 

 Interaktiver Speichermonitor Open-Maxi Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von das |_ Team, Homepage - 4.09.2025 22:24)
das |_ Team nutzt:  CC1-Unit V1.1, CC1-M-Unit V1.1, CC1-Station V1.1, Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini M-Unit, Open-Mini Station, C-Control 2


'-------------------------------------------------------------------------------
 'INFO' -> Programmbeschreibung    |    Tipps und weitere Info zu 'Lbit', siehe
 'INIT' -> Initialisierung         |
 'MAIN' -> Hauptschleife           |    http://visit.ghn-sensorik.de/L-Team/Lvm
 'SUBS' -> Subroutinen             |
 'DATA' -> Datentabellen           |       das |_ Team  (ein Hobbyprojekt)
'
'-------------------------------------------------------------------------------
' Programmbeschreibung Anfang ->>                                   I----------
'                                                                       N-------

  'Dies ist ein simpler Speichermonitor mit dessen Hilfe der Inhalt des
  'kombinierten Programm/Datenspeichers im externen EEPROM des C-Control
  'in Form einer Liste ueber die Serielle Schnittstelle dargestellt wird.

  'Portiert auf die Open-Maxi von "das |_ Team" (ein Hobbyprojekt)
'                                                                       F-------
' <<- Programmbeschreibung Ende                                     O----------
'----------------------------------------------------------------------------
'----------------------------------------------------------------------------
'                                                                   I----------
'                                                                       N-------
DEFINE    w12      word[12]
DEFINE    w11      word[11]
DEFINE    w10      word[10]
DEFINE     w9       word[9]
DEFINE     w8       word[8]
DEFINE     w7       word[7]
DEFINE     w6       word[6]
DEFINE     w5       word[5]
DEFINE     w4       word[4]
DEFINE     w3       word[3]
DEFINE     w2       word[2]
DEFINE     w1       word[1]
'--------------------------
DEFINE  b23_b24     w12
DEFINE  b21_b22     w11
DEFINE  b19_b20     w10
DEFINE  b17_b18      w9
DEFINE  b15_b16      w8
DEFINE  b13_b14      w7
DEFINE  b11_b12      w6
DEFINE   b9_b10      w5
DEFINE   b7_b8       w4
DEFINE   b5_b6       w3
DEFINE   b3_b4       w2
DEFINE   b1_b2       w1

'--------------------------
DEFINE    b25      byte[25]
'--------------------------
DEFINE    b24      byte[24]
DEFINE    b23      byte[23]
DEFINE    b22      byte[22]
DEFINE    b21      byte[21]
DEFINE    b20      byte[20]
DEFINE    b19      byte[19]
DEFINE    b18      byte[18]
DEFINE    b17      byte[17]
DEFINE    b16      byte[16]
DEFINE    b15      byte[15]
DEFINE    b14      byte[14]
DEFINE    b13      byte[13]
'--------------------------
DEFINE    b12      byte[12]
DEFINE    b11      byte[11]
DEFINE    b10      byte[10]
DEFINE     b9       byte[9]
DEFINE     b8       byte[8]
DEFINE     b7       byte[7]
DEFINE     b6       byte[6]
DEFINE     b5       byte[5]
DEFINE     b4       byte[4]
DEFINE     b3       byte[3]
DEFINE     b2       byte[2]
DEFINE     b1       byte[1]
'--------------------------
DEFINE     ESC           27
DEFINE     RETURN_LINE   13
DEFINE     timer_start   w3
'--------------------------

'""""""""""""""""""""""""""""""'
define UPROGBASE &h185e        ' Basisadresse virtueller Adressraum
define End2Host ivar [88]      ' Hostmodus nach END (unabh. vom START-Pin)
define OSTEMP   ivar [129+&h71]' Von Assemblercode temporaer verwendet
'""""""""""""""""""""""""""""""'
option OPENMAXI
End2Host=ON

 w10=&hff00' Voreinstellung Highlight-Funktion: (A=255,B=000)

 ?:?" LMEMVIEW4h+";'Erste PRINT String Anweisung als Label nutzen (Lbit-Konvention)
 print " -> https://ccintern.dharlos.de/forum/lesen.php?eintrag=18203"
'                                                                       I-------
' <<- Initialisierung Ende                                          T----------
'----------------------------------------------------------------------------
'---------------------------------------------------------------------------
'----------------------------------------------------------------------------
#MAIN 'Hauptschleife Anfang ->>                                     M----------
'                                                                       A-------
  ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  ' Dieser Programmteil wird nach Verlassen von #INIT ausgefuehrt,   ''
  ' oder mittels Direktvektor Funktionen unmittelbar gestartet.      '''
  ' WICHTIG: Hier keine (Daten)-Tabellen einfuegen, s.u.              ''
  ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

 WHILE TRUE

    PRINT

    timer_start=TIMER 'Zeitnahme starten

    w2=w1+192

    FOR w1 = w1 TO w2 STEP 12

       b7_b8  =LPeek16(w1)  :b9_b10=LPeek16(w1+2) :b11_b12=LPeek16(w1+4)
       b13_b14=LPeek16(w1+6):b15_b16=LPeek16(w1+8):b17_b18=LPeek16(w1+10)

       PrintDEC(w1):PUT" ":b23=2:PrintLZ(b1):PUT"_":PrintLZ(b2):PUT";"

      'Erste 4er-Spalte:
       PrintLZHLbyte(b7)
       PrintLZHLbyte(b8)
       PrintLZHLbyte(b9)
       PrintLZHLbyte(b10)

       PUT" "

      'Zweite 4er-Spalte:
       PrintLZHLbyte(b11)
       PrintLZHLbyte(b12)
       PrintLZHLbyte(b13)
       PrintLZHLbyte(b14)

       PUT" "

      'Dritte 4er-Spalte:
       PrintLZHLbyte(b15)
       PrintLZHLbyte(b16)
       PrintLZHLbyte(b17)
       PrintLZHLbyte(b18)

       PRINT "  ";

      '12er-Spalte (ASCII-Darstellung)
       ShowASCII(b7)
       ShowASCII(b8)
       ShowASCII(b9)
       ShowASCII(b10)
       ShowASCII(b11)
       ShowASCII(b12)
       ShowASCII(b13)
       ShowASCII(b14)
       ShowASCII(b15)
       ShowASCII(b16)
       ShowASCII(b17)
       ShowASCII(b18)

      PRINT

 NEXT ' (Zeile)



 w1=w1+12  '12 Speicherzellen je Zeile

 b23=2 '5-minus-2: nachfolgende PrintLZ Ausgaben auf 3 Spalten begrenzen

 HiB:PRINT" ~";:PrintDEC( ABS(TIMER-timer_start) *20    ):?;"ms   ";:HiA:PRINT "  (A),(M),(Q),(H)=";:PrintLZ(b19):NoHi:?",";:HiB:PrintLZ(b20):NoHi:

  GET b24

  IF b24="q" OR b24 = 1 THEN END 'LPrg_END
  IF b24="h" THEN GOSUB Input_Highlight_Bytes
  IF b24="a" THEN GOSUB Input_Address



 WEND


 'LPrg_END:END (Funktion ist in LBit Firmware enthalten)


'                                                                       I-------
' <<- Hauptschleife  Ende                                           N----------
'----------------------------------------------------------------------------
'---------------------------------------------------------------------------
'----------------------------------------------------------------------------
#SUBS'Subroutinen Anfang ->>                                        S----------
'                                                                       U-------

  '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  ' Dieser Bereich ist fuer Subroutinen (Prozeduren und Funktionen)       ''
  ' reserviert. Dieses Programm kann mit der #LCall_Slot Funktion auch    '''
  ' von anderen Programmen im selben Dateisystem als Modul aufgerufen     '''
  ' werden.  WICHTIG: Auch hier bitte keine Daten-Tabellen einfuegen, s.u.''
  '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function Input_Highlight_Bytes'(b19,b20)

          for b20=1 to 11 : PUT 8 : NEXT
          Gosub HiA
          PRINT "  A=";
          INPUT b19
          PrintLZ(b19)
          NoHi
          PRINT ", ";
          HiB
          Print "B=";
          INPUT b20
          PrintLZ(b20)
          NoHi
          print

    RETURN

Function Input_Address(w1)

          for w1=1 to 23 : PUT 8 : NEXT
          Gosub HiB                     '
          PRINT "(A)=       ";
          for w1=1 to 7 : PUT 8 : NEXT : INPUT w1
          b23=0 '5-minus-0: nachfolgende PrintLZ Ausgaben auf 5 Spalten begrenzen
          PrintDEC(w1):?" (HiByte=";:b23=2:PrintLZ(b1):?" LoByte=";:PrintLZ(b2):?")";
          b23=2 '5-minus-2: nachfolgende PrintLZ Ausgaben auf 3 Spalten begrenzen
          Gosub NoHi
          PRINT

    RETURN


Procedure HiA

          PUT ESC : PRINT "[1;37;44m";

   RETURN

Procedure HiB

          PUT ESC : PRINT "[34;47m";

   RETURN

Procedure NoHi

          PUT ESC : PRINT "[0m";

   RETURN





Procedure PrintLZHLbyte(b25) 'Wert in byte 25 formatiert ausgeben sowie bei Uebereinstimmung
                             'mit Suchwert mittels Highlightfunktion farblich hervorheben
                             '(PrintLeadingZeroesHiLightbyte)
     Put " "

     IF (b25 >< b19) AND (b25 >< b20) THEN

         PrintLZ(b25)

       ELSE

         IF b25=b19  THEN
            HiA : PrintLZ(b25)
           ELSE
            HiB : PrintLZ(b25)
         END IF

       END IF

     NoHi

  RETURN


Procedure ShowASCII(b23)

          IF  (POP > 31) THEN put b23 ELSE put "."

  RETURN

'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
' Open-Control Firmwareroutinen (Aus Includedatei "OM_FW.PRO")
'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
PROC FwPop INLASM      ' Wert vom Rechenstack lesen und entfernen
! ldx #1               ' Rueckgabe vom Byte im Akkumulator (A)
! swi                  ' ab Open-Macro: Rueckgabe eines Words auf OSTEMP:A
END PROC

PROC FwPushW INLASM    ' nur Open-Macro und Open-Maxi:
! ldx #8               ' das Word OSTEMP:A auf dem Rechenstack speichern
! swi                  '
END PROC




'                                                                       B-------
' <<- Subroutinen Ende                                              S----------
'----------------------------------------------------------------------------
'Procedure LPeek16
' Inhalt der Speicherzelle an Adresse adr zurückliefern - 16 Bit = 1 Word

FUNCTION Lpeek16(w1) INLASM
! jsr FwPop                     'Rueckgabe eines Words auf OSTEMP:A
! ldhx OSTEMP
! tax
! mov ,x+,OSTEMP
! lda ,x
! jmp FwPushW                   'Word OSTEMP:A auf dem Rechenstack speichern
END FUNCTION
w11=POP
RETURN


'''"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
''' PrintDEC -> Schnelle "Semi-ROM" Funktion aus dem 'Lbit'-Firmwareupgrade fuer C-Control 1.1
''' (v.855)
''' #PrintDEC 'Signed Integer 5-stellig ausgeben "-32768"..."00000"..." 32767" ohne P513 bug
'''
'''     w11=POP
'''
'''     IF w11>=0 THEN PRINT " ";
'''     IF w11 >< &b1000000000000000 THEN GOTO SKIP_P513
'''     PRINT "-32768";
'''     RETURN
'''     GOTO ERR_RETURN
'''     #SKIP_P513
'''     SYS &h91 &h0cf4, &hd1cc, &hb6b7, &hd0b6, &hb5b7, &h52b6, &hcd0d
'''
'''  RETURN
'''
'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

Procedure PrintDEC '<- Lbit'-Funktion fuer C-Control 1.1 in BASIC nachgebildet (sh.oben)

                   w11=POP

                   IF w11 >     0  THEN PRINT " ";
                   IF w11 >  9999  THEN print w11;
                   IF w11 >   999  AND w11 <  10000 THEN PRINT  "0";w11;
                   IF w11 >    99  AND w11 <   1000 THEN PRINT  "00";w11;
                   IF w11 >     9  AND w11 <    100 THEN PRINT  "000";w11;
                   IF w11 >     0  AND w11 <     10 THEN PRINT  "0000";w11;
                   IF w11  =    0  THEN PRINT                 " 00000";
                   IF w11 <     0  AND w11 >    -10 THEN PRINT "-0000";ABS(w11);
                   IF w11 <    -9  AND w11 >   -100 THEN PRINT "-000";ABS(w11);
                   IF w11 <   -99  AND w11 >  -1000 THEN PRINT "-00";ABS(w11);
                   IF w11 <  -999  AND w11 > -10000 THEN PRINT "-0";ABS(w11);
                   IF w11 < -9999  AND w11 > -32768 THEN PRINT "-";ABS(w11);
                   IF w11 = -32768 THEN PRINT                         w11;

 RETURN



'''""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
''' PrintLZ -> Schnelle "Semi-ROM" Funktion aus dem 'Lbit'-Firmwareupgrade fuer C-Control 1.1
''' (v.855)
''' #PrintLZ 'Wert in w11 1- bis 5-stellig ausgeben (Stellenanzahl wird ueber b23 gesteuert)
'''
'''          w11=POP
'''
'''          SYS &h91 &hd981, &hb7b7, &h52b6, &hcd0d
'''          SYS &h91 &h819d, &hcc0d, &hb7d1, &hb6b6, &hb7d0, &hb6b5
'''
'''  RETURN
'''
'''""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

Procedure PrintLZ  '<- Lbit'-Funktion fuer C-Control 1.1 in BASIC nachgebildet (nur 3-stellig)

                   w11=pop

                   IF w11 >=100 THEN PRINT w11;
                   IF w11 >=   10 AND w11 <   100 THEN PRINT "0";w11;
                   IF w11 >=    1 AND w11 <    10 THEN PRINT "00";w11;
                   IF w11  =    0                 THEN PRINT "000";

 RETURN


'                                                                      B-------
' <<- Subroutinen Ende                                             S----------
'----------------------------------------------------------------------------
'---------------------------------------------------------------------------
'----------------------------------------------------------------------------
#DATA 'Datenbereich Anfang ->>                                     D----------
                                                               '      A--------

    ' Keine Datentabellen enthalten

'                                                                     T--------
' <<- Datenbereich Ende                                            A----------
'----------------------------------------------------------------------------
#LEND'



Passender Link: Speichermonitor (C-Control 1.1 Version

Meine Homepage: https://visit.ghn-sensorik.de/L-Team

 Antwort schreiben

Bisherige Antworten:

Re: Interaktiver Speichermonitor Open-Maxi (von das |_ Team - 4.09.2025 22:28)