Auslesen des internen ROM's und einfacher Disassembler mit Arduino UNO


Das Auslesen des internen ROM's ist eine der Standardübungen für den fortgeschrittenen Sharp-Pocket-Computer Programmierer.
Bei Pocket Computern mit der CPU SC61860 liegt in den ersten 8192 Speicherstellen das sogenannte interne ROM, das direkt in die CPU integriert ist.
Es lässt sich mit dem Basicbefehl PEEK jedoch nicht auslesen, sondern nur mit dem Maschinenbefehl DATA (Opcode 53).
Das hier vorgestellte Beispiel liest das interne ROM aus und überträgt es über zwei Pins der 11-poligen Schnittstelle an einen Arduino.
Im Arduino Programm ist noch ein einfacher Disassembler eingebaut, der die Opcodes der Maschinensprache in Mnemonics übersetzt.
Hardwaremäßig sind lediglich drei Verbindungskabel und zwei pull-down Widerstände bei den Datenleitungen erforderlich.
Im folgenden sind Beispielprogramme für die seinerzeit sehr populären Pocket Computer PC-1401 und PC-1403 wiedergegeben.
Beim ersten Aufruf muß das Programm mit RUN gestartet werden, um das Maschinenprogramm in den Speicher zu übertragen.
Das eigentliche Auslesen des internen ROM's und die Datenübertragung werden danach und in der Folge mit DEF A gestartet.
Das Arduino Programm bleibt für beide Pocket Computer das gleiche, die Ausgabe erfolgt z.B. über den Serial Monitor der Arduino IDE.
Die Übertragung und Disassemblierung der 8192 Bytes dauert ca. 20 Sekunden.


Programm für Sharp PC-1401:


10:RESTORE
20:FOR X=0 TO 42
30:READ A
40:POKE &4100+X,A
50:NEXT X
60:END
100:"A" PRINT "START"
110:CALL &4100
120:END
200:DATA 2,0,3,0,0,0,140,53,52
210:DATA 2,1,140,198,18,94,56,3,97,2,97,1,95,206,96,0,95,209,90
220:DATA 43,18,91,78,100,66,43,29
230:DATA 194,131,99,32,41,35,55

Pinbelegung
Arduino UNO Pin Name 11-pol.
Schnittstelle Sharp PC-1401
GND GND Pin 3
D9 (Input) Busy Pin 4 (Takt)
D8 (Input) Dout Pin 5 (Daten)


Maschinenprogramm für PC-1401
&4100: 002 000 LIA 0          
  003 000 LIB 0          
  000 000 LII 0          
  140   LP12   <
  053   DATA        
  052   PUSH        
  002 001 LIA 1      
  140   LP12   <
  198   TSMA      
  018 094 LIP 94    
  056 003 JRZP 3
  097 002 ORIM 2  
  097 001 ORIM 1 <
  095   OUTF      
  206   NOPT      
  096 000 ANIM 0    
  095   OUTF      
  209   RC      
  090   SL      
  043 018 JRNCM 18
  091   POP        
  078 100 WAIT 100      
  066   INCA        
  043 029 JRNCM 29
  194   INCB          
  131   LP3          
  099 032 CPIM 32        
  041 035 JRNZM 35
  055   RTN            


Programm für Sharp PC-1403:


10:RESTORE
20:FOR X=0 TO 44
30:READ A
40:POKE &E678+X,A
50:NEXT X
60:END
100:"A" PRINT "START"
110:CALL &E678
120:END
200:DATA 16,58,0,2,0,82,3,0,0,0,140,53,52
210:DATA 2,1,140,198,56,4,213,3,206,213,1,206,212,0,206,209,90
220:DATA 43,16,91,78,250,66,43,27
230:DATA 194,131,99,32,41,33,55

Pinbelegung
Arduino UNO Pin Name 11-pol.
Schnittstelle Sharp PC-1403
GND GND Pin 3
D9 (Input) Port Ext1 Pin 11 (Takt)
D8 (Input) Port Ext2 Pin 10 (Daten)


Maschinenprogramm für PC-1403
&E678: 016 058 000 LIDP 14848          
  002 000   LIA 0          
  082     STD            
  003 000   LIB 0          
  000 000   LII 0          
  140     LP12   <
  053     DATA        
  052     PUSH        
  002 001   LIA 1      
  140     LP12   <
  198     TSMA      
  056 004   JRZP 4
  213 003   ORID 3  
  206     NOPT    
  213 001   ORID 1 <
  206     NOPT      
  212 000   ANID 0    
  206     NOPT      
  209     RC      
  090     SL      
  043 016   JRNCM 16
  091     POP        
  078 250   WAIT 250      
  066     INCA        
  043 027   JRNCM 27
  194     INCB          
  131     LP3          
  099 032   CPIM 32        
  041 033   JRNZM 33
  055     RTN            


Programm für Arduino:



// IntROM fuer Arduino UNO 
// Auslesen des internen ROMs von Sharp Pocket Computern mit CPU SC61860

const int IN_Daten = 8; // Daten, Arduino Pin D8
// PC-1401: pin 5 (Dout) der 11-pol. Schnittstelle
// PC-1403: pin 10 (EXT2) der 11-pol. Schnittstelle
const int IN_Takt = 9; // Takt, Arduino Pin D9
// PC-1401: pin 4 (Busy) der 11-pol. Schnittstelle
// PC-1403: pin 11 (EXT1) der 11-pol. Schnittstelle
boolean Busy;
int DataBit;
int DataByte;
int i;
int iPC;
int iJP;
int iAnz;
int iDTJ;
int iPTJ;
int iAdrAnz;
int iHiByte;
long longAdresse;
unsigned long longTimer = 0;
char charMCode[7]; // Zum speichern der Maschinen Befehle des Sharp PC

void setup() {
  Serial.begin(57600); // langsamer geht nicht
  pinMode(IN_Daten, INPUT);
  pinMode(IN_Takt, INPUT);
  Serial.println();
  Serial.println("START");
  resetValues();
}

void loop() {
  if ((millis() - longTimer) > 100) {
    resetValues();
  }
  Busy = digitalRead(IN_Takt);
  if (Busy) { // Data valid
    DataByte = 0;
    for (i=0;i<8;i++) {     
      do {
        Busy = digitalRead(IN_Takt);
      } while (!Busy);
      DataBit = digitalRead(IN_Daten);
      DataByte = DataByte | (DataBit << i);
      do {
        Busy = digitalRead(IN_Takt);
      } while (Busy);   
    }
    Serial.print(iPC);
    Serial.print(";");
    Serial.print(DataByte);  
    if (iAnz==1){
      Serial.print(";");
      getMCode();
      Serial.println(charMCode);
      if (DataByte > 223) { // CALn m
        iHiByte = DataByte - 224;
      }
    }
    else {      
      if (iHiByte>-1) {  
        longAdresse = long(iHiByte) * 256 + DataByte;
        iHiByte = -1;
        Serial.print(";->;");
        Serial.print(longAdresse);
      }
      if (iAnz == 3) {  
        iHiByte = DataByte;  
      }
      if (iAnz > 4) { // nur bei DTJ
        if (((iAnz + 1) % 3)==0) { // Ermittlung der bedingten Sprungadressen  
          iHiByte = DataByte;
        }  
      }
      if (iJP==2) { // relativer Sprung in positive Richtung
        iJP = 0;
        Serial.print(";->;");
        Serial.print(iPC+DataByte);
      }
      if (iJP==(-2)) { // relativer Sprung in negative Richtung
        iJP = 0;
        Serial.print(";->;");
        Serial.print(iPC-DataByte);
      }
      iAnz--;
      Serial.println();    
    }
    if (iPTJ==2) {
      iPTJ = 0;
      iAdrAnz = DataByte;  
    }
    if (iPTJ==1) {
      iPTJ++;
    }
    if (iDTJ==1) {
      iDTJ = 0;
      iAnz = iAdrAnz * 3 + 3; // 3 Byte pro bedingtem Sprung
      iAdrAnz = 0;
    }
    if (iJP!=0) {
      iJP = iJP + iJP;
    }
    longTimer = millis();
    iPC++;   
  }
  if (iPC > 8191) {
    Serial.print("END");
    iPC = 0;
  }
} // Ende loop

void resetValues() {
  iPC = 0;
  iJP = 0;
  iPTJ = 0;
  iDTJ = 0;
  iHiByte = -1;
  iAnz = 1;
}

void getMCode() {
  charMCode[0] = 0;
  switch (DataByte) {
    case 0: strcpy(charMCode, "LII"); iAnz=2; break; // LII n
    case 1: strcpy(charMCode, "LIJ"); iAnz=2; break; // LIJ n
    case 2: strcpy(charMCode, "LIA"); iAnz=2; break; // LIA n
    case 3: strcpy(charMCode, "LIB"); iAnz=2; break; // LIB n
    case 4: strcpy(charMCode, "IX"); iAnz=1; break; // IX
    case 5: strcpy(charMCode, "DX"); iAnz=1; break; // DX
    case 6: strcpy(charMCode, "IY"); iAnz=1; break; // IY
    case 7: strcpy(charMCode, "DY"); iAnz=1; break; // DY
    case 8: strcpy(charMCode, "MVW"); iAnz=1; break; // MVW
    case 9: strcpy(charMCode, "EXW"); iAnz=1; break; // EXW
    case 10: strcpy(charMCode, "MVB"); iAnz=1; break; // MVB
    case 11: strcpy(charMCode, "EXB"); iAnz=1; break; // EXB
    case 12: strcpy(charMCode, "ADN"); iAnz=1; break; // ADN
    case 13: strcpy(charMCode, "SBN"); iAnz=1; break; // SBN
    case 14: strcpy(charMCode, "ADW"); iAnz=1; break; // ADW
    case 15: strcpy(charMCode, "SBW"); iAnz=1; break; // SBW
    case 16: strcpy(charMCode, "LIDP"); iAnz=3; break; // LIDP n m
    case 17: strcpy(charMCode, "LIDL"); iAnz=2; break; // LIDL n
    case 18: strcpy(charMCode, "LIP"); iAnz=2; break; // LIP n
    case 19: strcpy(charMCode, "LIQ"); iAnz=2; break; // LIQ n
    case 20: strcpy(charMCode, "ADB"); iAnz=1; break; // ADB
    case 21: strcpy(charMCode, "SBB"); iAnz=1; break; // SBB
    case 22: strcpy(charMCode, "??"); iAnz=1; break; // ??
    case 23: strcpy(charMCode, "??"); iAnz=1; break; // ??
    case 24: strcpy(charMCode, "MVWD"); iAnz=1; break; // MVWD
    case 25: strcpy(charMCode, "EXWD"); iAnz=1; break; // EXWD
    case 26: strcpy(charMCode, "MVBD"); iAnz=1; break; // MVBD
    case 27: strcpy(charMCode, "EXBD"); iAnz=1; break; // EXBD
    case 28: strcpy(charMCode, "SRW"); iAnz=1; break; // SRW
    case 29: strcpy(charMCode, "SLW"); iAnz=1; break; // SLW
    case 30: strcpy(charMCode, "FILM"); iAnz=1; break; // FILM
    case 31: strcpy(charMCode, "FILD"); iAnz=1; break; // FILD
    case 32: strcpy(charMCode, "LDP"); iAnz=1; break; // LDP
    case 33: strcpy(charMCode, "LDQ"); iAnz=1; break; // LDQ
    case 34: strcpy(charMCode, "LDR"); iAnz=1; break; // LDR
    case 35: strcpy(charMCode, "RA"); iAnz=1; break; // RA
    case 36: strcpy(charMCode, "IXL"); iAnz=1; break; // IXL
    case 37: strcpy(charMCode, "DXL"); iAnz=1; break; // DXL
    case 38: strcpy(charMCode, "IYS"); iAnz=1; break; // IYS
    case 39: strcpy(charMCode, "DYS"); iAnz=1; break; // DYS
    case 40: strcpy(charMCode, "JRNZP"); iAnz=2; iJP=1; break; // JRNZP n
    case 41: strcpy(charMCode, "JRNZM"); iAnz=2; iJP=-1; break; // JRNZM n
    case 42: strcpy(charMCode, "JRNCP"); iAnz=2; iJP=1; break; // JRNCP n
    case 43: strcpy(charMCode, "JRNCM"); iAnz=2; iJP=-1; break; // JRNCM n
    case 44: strcpy(charMCode, "JRP"); iAnz=2; iJP=1; break; // JRP n
    case 45: strcpy(charMCode, "JRM"); iAnz=2; iJP=-1; break; // JRM n
    case 46: strcpy(charMCode, "??"); iAnz=1; break; // ??
    case 47: strcpy(charMCode, "LOOP"); iAnz=2; break; // LOOP n
    case 48: strcpy(charMCode, "STP"); iAnz=1; break; // STP
    case 49: strcpy(charMCode, "STQ"); iAnz=1; break; // STQ
    case 50: strcpy(charMCode, "STR"); iAnz=1; break; // STR
    case 51: strcpy(charMCode, "STH??"); iAnz=1; break; // STH??
    case 52: strcpy(charMCode, "PUSH"); iAnz=1; break; // PUSH
    case 53: strcpy(charMCode, "DATA"); iAnz=1; break; // DATA
    case 54: strcpy(charMCode, "??"); iAnz=1; break; // ??
    case 55: strcpy(charMCode, "RTN"); iAnz=1; break; // RTN
    case 56: strcpy(charMCode, "JRZP"); iAnz=2; iJP=1; break; // JRZP n
    case 57: strcpy(charMCode, "JRZM"); iAnz=2; iJP=-1; break; // JRZM n
    case 58: strcpy(charMCode, "JRCP"); iAnz=2; iJP=1; break; // JRCP n
    case 59: strcpy(charMCode, "JRCM"); iAnz=2; iJP=-1; break; // JRCM n
    case 60: strcpy(charMCode, "??"); iAnz=1; break; // ??
    case 61: strcpy(charMCode, "??"); iAnz=1; break; // ??
    case 62: strcpy(charMCode, "??"); iAnz=1; break; // ??
    case 63: strcpy(charMCode, "??"); iAnz=1; break; // ??   
    case 64: strcpy(charMCode, "INCI"); iAnz=1; break; // INCI
    case 65: strcpy(charMCode, "DECI"); iAnz=1; break; // DECI
    case 66: strcpy(charMCode, "INCA"); iAnz=1; break; // INCA
    case 67: strcpy(charMCode, "DECA"); iAnz=1; break; // DECA
    case 68: strcpy(charMCode, "ADM"); iAnz=1; break; // ADM
    case 69: strcpy(charMCode, "SBM"); iAnz=1; break; // SBM
    case 70: strcpy(charMCode, "ANMA"); iAnz=1; break; // ANMA
    case 71: strcpy(charMCode, "ORMA"); iAnz=1; break; // ORMA
    case 72: strcpy(charMCode, "INCK"); iAnz=1; break; // INCK
    case 73: strcpy(charMCode, "DECK"); iAnz=1; break; // DECK
    case 74: strcpy(charMCode, "INCM"); iAnz=1; break; // INCM
    case 75: strcpy(charMCode, "DECM"); iAnz=1; break; // DECM
    case 76: strcpy(charMCode, "INA"); iAnz=1; break; // INA
    case 77: strcpy(charMCode, "NOPW"); iAnz=1; break; // NOPW
    case 78: strcpy(charMCode, "WAIT"); iAnz=2; break; // WAIT n
    case 79: strcpy(charMCode, "WAITIL"); iAnz=1; break; // WAITIL
    case 80: strcpy(charMCode, "INCP"); iAnz=1; break; // INCP
    case 81: strcpy(charMCode, "DECP"); iAnz=1; break; // DECP
    case 82: strcpy(charMCode, "STD"); iAnz=1; break; // STD
    case 83: strcpy(charMCode, "MVDM"); iAnz=1; break; // MVDM
    case 84: strcpy(charMCode, "READM");iAnz=1;  break; // READM
    case 85: strcpy(charMCode, "MVMD"); iAnz=1; break; // MVMD
    case 86: strcpy(charMCode, "READA"); iAnz=1; break; // READA
    case 87: strcpy(charMCode, "LDD"); iAnz=1; break; // LDD
    case 88: strcpy(charMCode, "SWP"); iAnz=1; break; // SWP
    case 89: strcpy(charMCode, "LDM"); iAnz=1; break; // LDM
    case 90: strcpy(charMCode, "SL"); iAnz=1; break; // SL
    case 91: strcpy(charMCode, "POP"); iAnz=1; break; // POP
    case 92: strcpy(charMCode, "??"); iAnz=1; break; // ??
    case 93: strcpy(charMCode, "OUTA"); iAnz=1; break; // OUTA
    case 94: strcpy(charMCode, "??"); iAnz=1; break; // ??
    case 95: strcpy(charMCode, "OUTF"); iAnz=1; break; // OUTF
    case 96: strcpy(charMCode, "ANIM"); iAnz=2; break; // ANIM n
    case 97: strcpy(charMCode, "ORIM"); iAnz=2; break; // ORIM n
    case 98: strcpy(charMCode, "TSIM"); iAnz=2; break; // TSIM n
    case 99: strcpy(charMCode, "CPIM"); iAnz=2; break; // CPIM n
    case 100: strcpy(charMCode, "ANIA"); iAnz=2; break; // ANIA n
    case 101: strcpy(charMCode, "ORIA"); iAnz=2; break; // ORIA n
    case 102: strcpy(charMCode, "TSIA"); iAnz=2; break; // TSIA n
    case 103: strcpy(charMCode, "CPIA"); iAnz=2; break; // CPIA n
    case 104: strcpy(charMCode, "NOPT??"); iAnz=1; break; // NOPT??
    case 105: strcpy(charMCode, "DTJ"); iAnz=1; iDTJ=1; break; // DTJ
    case 106: strcpy(charMCode, "NOPT??"); iAnz=1; break; // NOPT??
    case 107: strcpy(charMCode, "TEST"); iAnz=2; break; // TEST n
    case 108: strcpy(charMCode, "??"); iAnz=1; break; // ??
    case 109: strcpy(charMCode, "??"); iAnz=1; break; // ??
    case 110: strcpy(charMCode, "??"); iAnz=1; break; // ??
    case 111: strcpy(charMCode, "WAITIH"); iAnz=1; break; // WAITIH
    case 112: strcpy(charMCode, "ADIM"); iAnz=2; break; // ADIM n
    case 113: strcpy(charMCode, "SBIM"); iAnz=2; break; // SBIM n
    case 114: strcpy(charMCode, "LIIH??"); iAnz=2; break; // LIIH n??
    case 115: strcpy(charMCode, "LIIH??"); iAnz=2; break; // LIIH n??
    case 116: strcpy(charMCode, "ADIA"); iAnz=2; break; // ADIA n
    case 117: strcpy(charMCode, "SBIA"); iAnz=2; break; // SBIA n
    case 118: strcpy(charMCode, "LIIH??"); iAnz=2; break; // LIIH n??
    case 119: strcpy(charMCode, "LIIH??"); iAnz=2; break; // LIIH n??
    case 120: strcpy(charMCode, "CALL"); iAnz=3; break; // CALL n m
    case 121: strcpy(charMCode, "JP"); iAnz=3; break; // JP n m
    case 122: strcpy(charMCode, "PTJ"); iAnz=4; iPTJ=1; break; // PTJ i n m
    case 123: strcpy(charMCode, "HALT??"); iAnz=1; break; // HALT??
    case 124: strcpy(charMCode, "JPNZ"); iAnz=3; break; // JPNZ n m
    case 125: strcpy(charMCode, "JPNC"); iAnz=3; break; // JPNC n m
    case 126: strcpy(charMCode, "JPZ"); iAnz=3; break; // JPZ n m
    case 127: strcpy(charMCode, "JPC"); iAnz=3; break; // JPC n m
    case 128: strcpy(charMCode, "LP00"); iAnz=1; break; // LP0
    case 129: strcpy(charMCode, "LP01"); iAnz=1; break; // LP1
    case 130: strcpy(charMCode, "LP02"); iAnz=1; break; // LP2
    case 131: strcpy(charMCode, "LP03"); iAnz=1; break; // LP3
    case 132: strcpy(charMCode, "LP04"); iAnz=1; break; // LP4
    case 133: strcpy(charMCode, "LP05"); iAnz=1; break; // LP5
    case 134: strcpy(charMCode, "LP06"); iAnz=1; break; // LP6
    case 135: strcpy(charMCode, "LP07"); iAnz=1; break; // LP7
    case 136: strcpy(charMCode, "LP08"); iAnz=1; break; // LP8
    case 137: strcpy(charMCode, "LP09"); iAnz=1; break; // LP9
    case 138: strcpy(charMCode, "LP10"); iAnz=1; break; // LP10
    case 139: strcpy(charMCode, "LP11"); iAnz=1; break; // LP11
    case 140: strcpy(charMCode, "LP12"); iAnz=1; break; // LP12
    case 141: strcpy(charMCode, "LP13"); iAnz=1; break; // LP13
    case 142: strcpy(charMCode, "LP14"); iAnz=1; break; // LP14
    case 143: strcpy(charMCode, "LP15"); iAnz=1; break; // LP15
    case 144: strcpy(charMCode, "LP16"); iAnz=1; break; // LP16
    case 145: strcpy(charMCode, "LP17"); iAnz=1; break; // LP17
    case 146: strcpy(charMCode, "LP18"); iAnz=1; break; // LP18
    case 147: strcpy(charMCode, "LP19"); iAnz=1; break; // LP19
    case 148: strcpy(charMCode, "LP20"); iAnz=1; break; // LP20
    case 149: strcpy(charMCode, "LP21"); iAnz=1; break; // LP21
    case 150: strcpy(charMCode, "LP22"); iAnz=1; break; // LP22
    case 151: strcpy(charMCode, "LP23"); iAnz=1; break; // LP23
    case 152: strcpy(charMCode, "LP24"); iAnz=1; break; // LP24
    case 153: strcpy(charMCode, "LP25"); iAnz=1; break; // LP25
    case 154: strcpy(charMCode, "LP26"); iAnz=1; break; // LP26
    case 155: strcpy(charMCode, "LP27"); iAnz=1; break; // LP27
    case 156: strcpy(charMCode, "LP28"); iAnz=1; break; // LP28
    case 157: strcpy(charMCode, "LP29"); iAnz=1; break; // LP29
    case 158: strcpy(charMCode, "LP30"); iAnz=1; break; // LP30
    case 159: strcpy(charMCode, "LP31"); iAnz=1; break; // LP31
    case 160: strcpy(charMCode, "LP32"); iAnz=1; break; // LP32
    case 161: strcpy(charMCode, "LP33"); iAnz=1; break; // LP33
    case 162: strcpy(charMCode, "LP34"); iAnz=1; break; // LP34
    case 163: strcpy(charMCode, "LP35"); iAnz=1; break; // LP35
    case 164: strcpy(charMCode, "LP36"); iAnz=1; break; // LP36
    case 165: strcpy(charMCode, "LP37"); iAnz=1; break; // LP37
    case 166: strcpy(charMCode, "LP38"); iAnz=1; break; // LP38
    case 167: strcpy(charMCode, "LP39"); iAnz=1; break; // LP39
    case 168: strcpy(charMCode, "LP40"); iAnz=1; break; // LP40
    case 169: strcpy(charMCode, "LP41"); iAnz=1; break; // LP41
    case 170: strcpy(charMCode, "LP42"); iAnz=1; break; // LP42
    case 171: strcpy(charMCode, "LP43"); iAnz=1; break; // LP43
    case 172: strcpy(charMCode, "LP44"); iAnz=1; break; // LP44
    case 173: strcpy(charMCode, "LP45"); iAnz=1; break; // LP45
    case 174: strcpy(charMCode, "LP46"); iAnz=1; break; // LP46
    case 175: strcpy(charMCode, "LP47"); iAnz=1; break; // LP47
    case 176: strcpy(charMCode, "LP48"); iAnz=1; break; // LP48
    case 177: strcpy(charMCode, "LP49"); iAnz=1; break; // LP49
    case 178: strcpy(charMCode, "LP50"); iAnz=1; break; // LP50
    case 179: strcpy(charMCode, "LP51"); iAnz=1; break; // LP51
    case 180: strcpy(charMCode, "LP52"); iAnz=1; break; // LP52
    case 181: strcpy(charMCode, "LP53"); iAnz=1; break; // LP53
    case 182: strcpy(charMCode, "LP54"); iAnz=1; break; // LP54
    case 183: strcpy(charMCode, "LP55"); iAnz=1; break; // LP55
    case 184: strcpy(charMCode, "LP56"); iAnz=1; break; // LP56
    case 185: strcpy(charMCode, "LP57"); iAnz=1; break; // LP57
    case 186: strcpy(charMCode, "LP58"); iAnz=1; break; // LP58
    case 187: strcpy(charMCode, "LP59"); iAnz=1; break; // LP59
    case 188: strcpy(charMCode, "LP60"); iAnz=1; break; // LP60
    case 189: strcpy(charMCode, "LP61"); iAnz=1; break; // LP61
    case 190: strcpy(charMCode, "LP62"); iAnz=1; break; // LP62
    case 191: strcpy(charMCode, "LP63"); iAnz=1; break; // LP63
    case 192: strcpy(charMCode, "INCJ"); iAnz=1; break; // INCJ
    case 193: strcpy(charMCode, "DECJ"); iAnz=1; break; // DECJ
    case 194: strcpy(charMCode, "INCB"); iAnz=1; break; // INCB
    case 195: strcpy(charMCode, "DECB"); iAnz=1; break; // DECB
    case 196: strcpy(charMCode, "ADCM"); iAnz=1; break; // ADCM
    case 197: strcpy(charMCode, "SBCM"); iAnz=1; break; // SBCM
    case 198: strcpy(charMCode, "TSMA"); iAnz=1; break; // TSMA
    case 199: strcpy(charMCode, "CPMA"); iAnz=1; break; // CPMA
    case 200: strcpy(charMCode, "INCL"); iAnz=1; break; // INCL
    case 201: strcpy(charMCode, "DECL"); iAnz=1; break; // DECL
    case 202: strcpy(charMCode, "INCN"); iAnz=1; break; // INCN
    case 203: strcpy(charMCode, "DECN"); iAnz=1; break; // DECN
    case 204: strcpy(charMCode, "INB"); iAnz=1; break; // INB
    case 205: strcpy(charMCode, "NOPW??"); iAnz=1; break; // NOPW??
    case 206: strcpy(charMCode, "NOPT"); iAnz=1; break; // NOPT
    case 207: strcpy(charMCode, "??"); iAnz=1; break; // ??
    case 208: strcpy(charMCode, "SC"); iAnz=1; break; // SC
    case 209: strcpy(charMCode, "RC"); iAnz=1; break; // RC
    case 210: strcpy(charMCode, "SR"); iAnz=1; break; // SR
    case 211: strcpy(charMCode, "WRIT??"); iAnz=1; break; // WRIT??
    case 212: strcpy(charMCode, "ANID"); iAnz=2; break; // ANID n
    case 213: strcpy(charMCode, "ORID"); iAnz=2; break; // ORID n
    case 214: strcpy(charMCode, "TSID"); iAnz=2; break; // TSID n
    case 215: strcpy(charMCode, "CPID??"); iAnz=2; break; // CPID n ??
    case 216: strcpy(charMCode, "LEAVE"); iAnz=1; break; // LEAVE
    case 217: strcpy(charMCode, "NOPW??"); iAnz=1; break; // NOPW??
    case 218: strcpy(charMCode, "EXAB"); iAnz=1; break; // EXAB
    case 219: strcpy(charMCode, "EXAM"); iAnz=1; break; // EXAM
    case 220: strcpy(charMCode, "??"); iAnz=1; break; // ??
    case 221: strcpy(charMCode, "OUTB"); iAnz=1; break; // OUTB
    case 222: strcpy(charMCode, "??"); iAnz=1; break; // ??
    case 223: strcpy(charMCode, "OUTC"); iAnz=1; break; // OUTC    
    case 224: strcpy(charMCode, "CAL00"); iAnz=2; break; // CAL0 m
    case 225: strcpy(charMCode, "CAL01"); iAnz=2; break; // CAL256 m
    case 226: strcpy(charMCode, "CAL02"); iAnz=2; break; // CAL512 m
    case 227: strcpy(charMCode, "CAL03"); iAnz=2; break; // CAL768 m
    case 228: strcpy(charMCode, "CAL04"); iAnz=2; break; // CAL1024 m
    case 229: strcpy(charMCode, "CAL05"); iAnz=2; break; // CAL1280 m
    case 230: strcpy(charMCode, "CAL06"); iAnz=2; break; // CAL1536 m
    case 231: strcpy(charMCode, "CAL07"); iAnz=2; break; // CAL1792 m
    case 232: strcpy(charMCode, "CAL08"); iAnz=2; break; // CAL2048 m
    case 233: strcpy(charMCode, "CAL09"); iAnz=2; break; // CAL2304 m
    case 234: strcpy(charMCode, "CAL10"); iAnz=2; break; // CAL2560 m
    case 235: strcpy(charMCode, "CAL11"); iAnz=2; break; // CAL2816 m
    case 236: strcpy(charMCode, "CAL12"); iAnz=2; break; // CAL3072 m
    case 237: strcpy(charMCode, "CAL13"); iAnz=2; break; // CAL3328 m
    case 238: strcpy(charMCode, "CAL14"); iAnz=2; break; // CAL3584 m
    case 239: strcpy(charMCode, "CAL15"); iAnz=2; break; // CAL3840 m
    case 240: strcpy(charMCode, "CAL16"); iAnz=2; break; // CAL4096 m
    case 241: strcpy(charMCode, "CAL17"); iAnz=2; break; // CAL4352 m
    case 242: strcpy(charMCode, "CAL18"); iAnz=2; break; // CAL4608 m
    case 243: strcpy(charMCode, "CAL19"); iAnz=2; break; // CAL4864 m
    case 244: strcpy(charMCode, "CAL20"); iAnz=2; break; // CAL5120 m
    case 245: strcpy(charMCode, "CAL21"); iAnz=2; break; // CAL5376 m
    case 246: strcpy(charMCode, "CAL22"); iAnz=2; break; // CAL5632 m
    case 247: strcpy(charMCode, "CAL23"); iAnz=2; break; // CAL5888 m
    case 248: strcpy(charMCode, "CAL24"); iAnz=2; break; // CAL6144 m
    case 249: strcpy(charMCode, "CAL25"); iAnz=2; break; // CAL6400 m
    case 250: strcpy(charMCode, "CAL26"); iAnz=2; break; // CAL6656 m
    case 251: strcpy(charMCode, "CAL27"); iAnz=2; break; // CAL6912 m
    case 252: strcpy(charMCode, "CAL28"); iAnz=2; break; // CAL7168 m
    case 253: strcpy(charMCode, "CAL29"); iAnz=2; break; // CAL7424 m
    case 254: strcpy(charMCode, "CAL30"); iAnz=2; break; // CAL7680 m
    case 255: strcpy(charMCode, "CAL31"); iAnz=2; break; // CAL7936 m
  }
}

Ausgabe am Serial Monitor:



zum Seitenanfang


© 2020-2021: Walter Fischer