Archive for the ‘Arduino’ Category.

Apple 1 Emulation von Peter Sieg ausprobiert

Ich habe im Laufe der Woche mal die Apple 1 Emulation auf Arduino Basis von Peter Sieg ausprobiert.
(vgl. https://github.com/petersieg/arduino/tree/master/arduino_6502_apple1)
Den Anstoß gab mir ein kleiner Artikel in Load #5.

Bis auf die RAM Beschränkung auf 1,5K läuft das Projekt auf Anhieb auf einem Arduino Nano.

Apple 1 Emulation auf Arduino Nano

Vielleicht baue ich den Ansatz noch aus, mir gefällt der sich magisch compilierende Sketch nicht. Es werden keine sauberen Headerdateien verwendet. Ich würde ausserdem noch das AVR interne EEPROM als Programmspeicher für den emulierten Apple aktivieren.

Kleine Testprogramme habe ich bisher mit dem Acme Assembler erstellt, mit dem man z.B. auch für den C64 Programme erstellen kann.

Um die Programme auch in den Wozmon vom Apple 1 eingeben zu können, habe ich mir eine kleines Hilfsprogramm geschrieben. Dieses konvertiert die Binärdaten in einen Hexdump, den man direkt in den Wozmon über UART hochladen kann.

Vgl. https://github.com/simonsunnyboy/bin2woz

Das Testprogramm oben füllt nur 16 Bytes innerhalb der Zeropage auf 0x41.

		*=$0280

fill 	= $41    ; fill bytes
dest	= $0080  ; start address of destination

		ldx #0
		
loop:		
		lda #fill
		sta dest,x
		inx
		cpx #$10
bne     loop

		jmp $ff00  ; back to wozmon
		
		; acme -o fill.bin fill.S

Finite State Machine Generator for C

For quite a long time I’m thinking about simple code generating tools. I don’t want to use a special XML syntax or descriptive language but a simple Excel or OpenOffice sheet instead.

The aim is to generated C source code for small microcontroller applications or retrocomputing systems.

For the start I made a simple generator for finite state machines (Wikipedia entry)

It is also my first script written in Python and thus not really as tidy and neat as I prefer. But it is working for now.

It takes the sheet from an OpenOffice .ods table like this:

@brief autofire button statemachine
@see    
     
State Event Next State
INIT KeyPressed PULSE_ON
INIT KeyNotPressed AUTOFIRE_OFF
AUTOFIRE_OFF KeyPressed PULSE_ON
PULSE_ON KeyNotPressed AUTOFIRE_OFF
PULSE_ON PulseTimeElapsed PULSE_OFF
PULSE_OFF KeyNotPressed AUTOFIRE_OFF
PULSE_OFF PulseTimeElapsed PULSE_ON

and generates a switch-case style state machine in C with callback functions for state and event handling.

A version with support for object oriented programming with pointers to statemachine objects is planned aswell. Check the github for functional updates.

The actual code can be found on Github: https://github.com/simonsunnyboy/gen-fsm

Arduino Sketch zum Auslesen des EEPROM Inhaltes

Um mein mySmartUSB light Programmiergerät zu verifizieren, habe ich folgenden Arduino Sketch ausprobiert. Der Arduino zeigt damit seinen EEPROM Inhalt in HEX Notation in der seriellen Konsole an.

/* Display EEPROM contents from Arduino UNO
 * (c) 2014 by Matthias Arndt
 */
#include <EEPROM.h>

void setup()
{
  uint16_t addr = 0;
  uint8_t c;
  uint8_t nl = 0;

  Serial.begin(9600);
  Serial.print("Arduino EEPROM contents:\n\n");

  while(addr < 1024)
  {
    c = (EEPROM.read(addr) & 0xFF);

    addr++;

    Serial.print(c, HEX);
    Serial.print(' ');

    if(nl < 31)
    {
      nl++;
    }
    else
    {
      Serial.print('\n');
      nl = 0;
    }

  }

}

void loop()
{
  for(;;);
}