Day: January 14, 2022

Testing NuttX RTOS on Z80 Simulator

I decided to do a small test to see if we could run NuttX on Z80.

First I download and compiled to z80sim from here:
https://www.autometer.de/unix4fun/z80pack/ftp/

Then I installed the SDCC compile:

$ sudo apt install sdcc

Then on NuttX I configured to use the z80sim profile:

$ ./tools/configure.sh z80sim:nsh

It resulted on errors in the build system that I fixed and submitted to mainline:

https://github.com/apache/incubator-nuttx/pull/5233

After that the compilation starts, but it is failing because some files are not compatible with SDCC:

$ make
...
CC: clock/clock_initialize.c
/home/user/nuttxspace/nuttx/include/signal.h:333: error 97: SDCC cannot pass structure '_value' as function argument
/home/user/nuttxspace/nuttx/include/signal.h:428: error 97: SDCC cannot pass structure '_value' as function argument
/home/user/nuttxspace/nuttx/include/signal.h:428: error 97: SDCC cannot pass structure '_value' as function argument
/home/user/nuttxspace/nuttx/include/nuttx/sched.h:405: syntax error: token -> '}' ; column 3
make[1]: *** [Makefile:57: clock_initialize.rel] Error 1
make[1]: Leaving directory '/home/user/nuttxspace/nuttx/sched'
make: *** [tools/LibTargets.mk:59: sched/libsched.lib] Error 2

Let see if we get these files fixed and eventually get NuttX running on Z80 Simulator

Calculando digito verificador do EAN13

O cálculo do digito verificador é bem simples:

  1. Comece removendo o 13º digito (que é exatamente o dígito verificador que estamos querendo calcular/checar). Por exemplo: 6944853600540 ficará 694485360054
  2. Some da direita para esquerda apenas os dígitos impar: 4+0+6+5+4+9 e multiplique o resultado por 3: 28 * 3 = 84
  3. Agora some os números restantes (que estão nas posições pares) : 5+0+3+8+4+6 = 26. Some este resultado com o valor obtido anteriormente: 84+26 = 110
  4. O dígito verificador será o valor necessário para atingir o próximo número que é multiplo de dez, neste caso como o valor já é multiplo de 10, o dígito verificador será 0. Caso o resultado tivesse dado 109 o valor para se chegar ao número multiplo de 10 seria 1.