Línea 28 define el nombre de la función como onClock
Línea 29 define una variable SYNC_VALUE donde vamos a guardar el valor S si están en +5v y n si está en +0v. Si la variable es S entonces en el bus de datos tenemos el código de la instrucción a ejecutar.
Línea 30 define una variable RESET_VALUE donde vamos a guardar el valor n si están en +5v y R si está en +0v. Si la variable es R entonces la placa del procesador está recibiendo la señal para comenzar a ejecutar un reset.
Línea 31 define una variable READ_WRITE_VALUE donde vamos a guardar el valor r si están en +5v y W si está en +0v. Si la variable es r entonces estamos haciendo una lectura si es W estamos haciendo una escritura.
Línea 32 define una variable output como array de 40 caracteres la cual vamos a utilizar para dar formato a la información a mostrar en la línea 48
Línea 33 definimos un entero sin signo con nombre address en este vamos a juntar todos los bits del ADDRESS BUS desde el más significativo A15 al menos A0
Línea 34 comenzamos un bucle for que va a correr 16 veces
Línea 35 leemos un bit del bus de ADDRESS, en cada iteración será el número que corresponda a ADDR[i] si i es cero será por ejemplo el valor del pin 23 del Arduino Mega correspondiente al pin del Address Bus A15. El signo de interrogación ? seguido de 1:0 nos hará guardar en la variable bit el número 1 en caso de ser verdadero (+5v) o 0 en caso de ser falso (+0v).
Línea 36 imprimimos ese bit en a través de la conexión Serial.
Línea 37 corremos todos los bits que tuviéramos en la variable address a la izquierda y agregamos en el lugar vacío al bit que recién leímos (lugar menos significativo).
Línea 38 cerramos el bucle for.
Línea 39 imprimimos un espacio para separar el contenido
Línea 40 a 45 hacemos lo mismo con el bus de datos
Línea 46 corremos la función sync_string la cuál en base a las variables SYNC_VALUE, RESET_VALUE y data va a guardar en la variable de tipo caracter instruction la instrucción que se ejecutó en el procesador si estamos en un ciclo de instrucción o la palabra RESET si se está presionando el botón de reset.
Línea 47 corremos la función find_chip que toma como parámetros los bits del address bus y nos va a decir a qué chip de la 20c (ROM, RAM, VIA1, etc) nos estamos dirigiendo.
Línea 48 definimos el formato de salida a imprimir dentro de la variable output poniendo:
un número hexadecimal de 4 caracteres con el bus de ADDRESS,
un caracter si es una lectura o escritura,
un caracter si estamos en un ciclo de SYNC también llamado ciclo de fetch de opcode,
un número hexadecimal de 2 caracteres con el bus de DATA,
Cinco caracteres para definir el chip que estamos usando
la instrucción que estamos ejecutando si es un ciclo de SYNC, o la palabra RESET si estamos tocando el botón de reset o nada en caso de encontrarnos en un ciclo de datos
Línea 49 imprimimos la variable output y saltamos una línea.
Línea 50 cerramos la función onClock
Encontrando que instrucción estamos ejecutando
La función sync_string se encarga de decirnos qué instrucciones estamos ejecutando teniendo en cuenta 3 parámetros:
si estamos o no en un ciclo SYNC,
si estamos o no en un ciclo de RESET y
los datos del bus de datos.