
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
'------------------------------------------------------------------------------- '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 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) 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 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 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 |