Forum: Mikrocontroller und Digitale Elektronik Intel MCS-4 / Intel 4004 / 4001 - Wie Output beschreiben


von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Hallo zusammen

Ich versuche mich derzeit gerade an den Basics...
Einem Intel 4004 System. Genauer gesagt einem MCS-4
Das System seht ihr im Bild im Anhang.

Wie zu sehen ist, sind die IOs einerseits im RAM vorhanden, andererseits 
auch im ROM.

Nun würde ich gerne ganz simpel ein paar IOs setzen und dies evtl. noch 
in Abhängigkeit eines Inputs.

Dazu habe ich diesen Emulator gefunden:
http://e4004.szyc.org/emu/

Das Instruction set gibts hier:
http://e4004.szyc.org/iset.html

Und hier noch das Manual für das MCS-4
http://bitsavers.trailing-edge.com/components/intel/MCS4/MCS-4_Assembly_Language_Programming_Manual_Dec73.pdf

Wie es aussieht, muss ich wohl den Befehl WMP verwenden.
Leider sind meine Assemblerskills relativ schlecht geworden.

Offenbar ist das höherwertige nibble der Portzustand (1110).
Aber ich vermute, durch alleiniges ausführen von

1110|0001 werde ich noch keinen Output port beschreiben.

Würde mich sehr über Hilfe freuen :)

Danke und Gruss
Holger

von Helge (Gast)


Lesenswert?

ich verstehe das so:
1. select rom (oder ram)
2. Wert in Akku
3. WRR (oder WMP)

von Holger K. (holgerkraehe)


Lesenswert?

Helge schrieb:
> ich verstehe das so:
> 1. select rom (oder ram)
> 2. Wert in Akku
> 3. WRR (oder WMP)

Danke für die Antwort.
Da steht ja noch

"selected by the last SRC command".

Also zuerst SRC, dann LDM und dann WMP ?

SRC sieht so aus:
0010 RRR1

Also 0010 | 0001 für Chip 0 ?

Dann LOADM
1101 DDDD

Also 1101 | 0001 um das Q0 auf High zu setzen?

und dann WMP
1110 0001

von Holger K. (holgerkraehe)


Lesenswert?

Hat teilweise funktioniert :)

Hier der code:
1
FIM R0, $00
2
SRC R0
3
LDM $04
4
WMP

Das assembly:
1
:05000000200021D4E105
2
:00000001FF

http://e4004.szyc.org/asm.html

Leider schreibt das Programm in den Output des RAMs und nicht des ROMs.
Da muss ich wohl WMP durch WRR ersetzen...

: Bearbeitet durch User
von Holger K. (holgerkraehe)


Lesenswert?

Hat jemand eine Idee, warum hier der Jump nicht funktioniert?
1
        FIM R0, $00
2
        SRC R0
3
        LDM R0
4
DONE
5
        IAC
6
        WRR
7
        WMP
8
  JUN DONE

Die Sprungadresse ist immer $0F2

Problem gelöst.
Es muss der Object Code und nicht der HEX-Code geladen werden.
Beim HEX-Code gibt es zusätzliche NOPs.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.