Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » Vorbereitungen für ne K100x Emulation » Themenansicht

Autor Thread - Seiten: -1-
000
11.07.2011, 20:21 Uhr
Micha

Avatar von Micha

seit diesem WE bastel ich im frühen Stadium an etwas, das auf eine K100x Emulation hinauslaufen soll.
Genaugenommen ist es im ersten Stadium eine U808/Intel8008 Emulation. Sowas gibt es zwar alles schon, aber da mein Ziel darin besteht, auf die Prozessoremulation die K100x Umgebung draufzubasteln dachte ich mir es ist besser, alles von Grund auf selber zu machen, ist ja (u.A.) auch ein Erkenntnisprozess um selber was zu lernen...
Als "Entwicklungsumgebung" hab ich mir Excel ausgesucht, die Darstellung der Register, Speicherinhalte etc. ist da sehr einfach zu realisieren, die Ablaufsteuerung und Abbildung der i8008 Maschinenbefehle realisiere ich per VBA Code. Inzwischen hab ich ca. 80% der 8008 Instruktionen nachgebildet und getestet.

Ein Detail bleibt allerdings im Dunkeln: wie verhält sich der Prozessorstack des U808 bei Über-bzw. Unterlauf? Stack + PC sind bei diesem Prozessor intern in 8 14-Bit-Registern untergebracht. Aber ob der Stackpointer bei Über/Unterlauf durchzirkuliert, oder ohne Fehler am gleichen Ende des Stack hängenbleibt oder den Prozessor in den Halt-Status schaltet ist mir unklar.
Falls die entsprechende Software "sauber" programmiert ist sollte das kein Thema sein. Aber man weiss ja nie... Kann hier jemand was dazu sagen?

Selbstverständlich würd ich den Excel basierten 8008 Emu bei Interesse gern zur Verfügung stellen.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
13.07.2011, 20:13 Uhr
Micha

Avatar von Micha

speziell zum Thema I/O

inzwischen hab ich ne komplett funktionierende U808 Emulation zustande gebracht, und in dieser Umgebung einen Speicherabzug eines K1003 eingebunden.
Die Emulation startet den virtuellen K1003 ab Adresse 0, und macht dann auch nachvollziehbar einige sinnvolle Dinge:
* den Ram ab 0800h bis 17FFh mit Null initialisieren
* in der Nähe des Ram-Anfangs 0800h einige Systemvariablen mit initialen Werten belegen
* in eine Endlosschleife gehen die auf Eingaben wartet
* bestimmte OUT Ports in dieser Schleife mit Daten füttern (der K1000 zeigt nach dem Einschalten bestimmte Ziffern als 0 an).

Da hört es dann allerdings vorläufig auf:
Meine Emulation ist noch fast taub und stumm, da die I/O bisher nur jeweils als simples Byte-Array abgebildet ist. Beim Output hab ich inzwischen durch scharfes Hingucken schon eine Vorstellung was passiert, beim Input (speziell Keyboard) hab ich noch überhaupt keinen Plan...

Bin wirklich händeringend interessiert, falls jemand hier zu dem Thema etwas weiss.

Interessant übrigens, dass die Ansteuerung der 7-Segment-Ziffernanzeigen auf den ersten Blick software-seitig sehr umständlich erfolgt. Da werden die Segmente der Ziffern zyklisch durchgeschaltet und nur jeweils kurz einzeln mit nem Stromimpuls versorgt. Im Gegensatz z.B. zu den Status-LEDs, die werden einfach bei Bedarf an- und wieder abgeschaltet. Ich vermute man kann die Ziffern bzw. die entsprechende Schaltung "killen" wenn man den entsprechenden Port permanent anschaltet. Hab jedenfalls nachdem ich das Verhalten in der Emulation gesehen habe spontan von Versuchen am realen Objekt Abstand genommen...

Dieser Beitrag wurde am 13.07.2011 um 20:50 Uhr von Micha editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
15.07.2011, 18:34 Uhr
Micha

Avatar von Micha

inzwischen gibts einige konkrete Fortschritte, aber mindestens ein Stück des Puzzles fehlt mir noch


Bild1: Startzustand nach Initalisierung des Speichers und Warten auf Eingabe


Bild2: durch "schlechten" Tastaturcode provozierter Fehler 3

Diese Screenshots sind keine Fakes sondern tatsächlich der K1000 Emu in Aktion. Inzwischen bin ich soweit, dass ich die Ausgabe (Ziffernfeld und Status-LEDs) mit Excel Shapes nachgebildet hab, die von der Emulation in Farbe/Helligkeit in Echtzeit gesteuert werden. Das Ziffernfeld flimmert sogar authentisch.
Ohne die Vorarbeiten von Gerhard und AE wär ich mit Sicherheit nie soweit gekommen.

Woran es derzeit noch hapert ist die Tastaturabfrage. Eigentlich sollte es rel. einfach sein. Aus Prozessor-Sicht wird die Tastatur per IN 0 abgefragt. Und diese Instruktion gibt es nur einige wenige Male im gesamten Rom. Aber irgendwo steckt da der Teufel im Detail, bisher hab ich nur den Start-Zustand (Bild 1), den Fehler 3 und den Hunting Mode hinbekommen. Vielleicht (hoffentlich) mehr nach diesem WE

Dieser Beitrag wurde am 15.07.2011 um 18:51 Uhr von Micha editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
20.07.2011, 19:07 Uhr
Micha

Avatar von Micha

Inzwischen nimmt das Projekt immer mehr Gestalt an

Durch stundenlanges Meditieren über den Assembler-Listings und ausgiebige Debug-Orgien hab ich eine Ahnung bekommen, wie der Tastatur-Input eines K100x ablaufen könnte. Hab das dann in den Emu so eingebaut wie ich es verstehe - und: es funktioniert!!!


Bild3: Eingabe der Taste Pi


Bild4: ST ohne dass ein Programm im Speicher war... oops

Das ist wirklich der echte, unmodifizierte Rom eines K1003, dessen Instruktionen da in einer emulierten Umgebung ausgeführt werden.

Das ganze läuft unter Excel/VBA und fühlt sich etwas zäh an - geschätzte 50% Performance eines "echten" K1000. Ist in dieser Implementierung wirklich mehr etwas zum Probieren. Und die Debug-bzw Trace Möglichkeiten sind im Vergleich zu ner echten K1000 Kiste grandios...

Bei Interesse bin ich optimistisch, dass ich dieses Programm zwecks Ausprobieren in einigen Tagen zum Download anbieten kann. Auch wenn es vorläufig noch sehr minimalistisch im Funktionsumfang ist...

Dieser Beitrag wurde am 21.07.2011 um 18:35 Uhr von Micha editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
22.07.2011, 13:12 Uhr
mkrambeck



Respekt ...

Ich wäre an einem Download interessiert, ich habe früher selbst einmal an einem K1003 gearbeitet und habe noch einen K1003 "geparkt", der darauf hofft, dass ich mich mal mit ihm beschäftge...

Mit freundlichen Grüßen

Matthias

Dieser Beitrag wurde am 22.07.2011 um 13:26 Uhr von mkrambeck editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
26.07.2011, 18:38 Uhr
Micha

Avatar von Micha

Das was ich hier jetzt zum Download anbiete hab ich mal ganz vorsichtig Version 0.1 genannt.
* Benutzerfreundlichkeit ist ein Fremdwort
* Man braucht Excel um es ausführen zu können (ich hab es mit Excel 2007 gebastelt und getestet)
* die Performance ist dürftig
* Magnetkarten lesen/schreiben ist vorläufig nicht implementiert.

Der VBA Quelltext liegt offen. Dieser Punkt ist nicht als Nachteil gemeint sondern als Vorteil - so kann jeder der Lust und Laune hat, damit herumexperimentieren.

Download

Viel Spass damit - falls es jemand ausprobieren mag :-)

Dieser Beitrag wurde am 26.07.2011 um 19:19 Uhr von Micha editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
18.08.2011, 18:01 Uhr
Micha

Avatar von Micha

Das verwendete Rom-Image enthält mit gewisser Wahrscheinlichkeit ein paar fehlerhafte Bytes. Sowohl bei der Emulation als auch bei dem realen K1003, aus dem dieses Image ursprünglich stammt gibt es ein gleichartiges Fehlverhalten: wenn die Magnetkartenleseeinheit aktiviert ist, inkrementiert der Adresszähler bei Programmeingabe nicht mehr. Wahrscheinlich (wenn auch nicht sicher) dass in dem Speicherbereich für die Magnetkarteneinheit etwas faul ist.

Dazu hab ich folgende zwei Fragen:

1) Ich hab hier inzwischen 3 Stück K100x herumstehen, leider alle teil-defekt. Besitze leider selber nicht die Fertigkeiten, die Roms auszulesen. Kann eventuell jemand helfen - oder gibt es bereits irgendwo ausgelesene Roms von anderen K100x zum Vergleichen?

2) Habe in letzter Zeit schon öfters stundenlang und fast ergebnislos über den Assemblerlistings gebrütet. U808 Assembler löst Probleme so elementar auf, dass man kaum ne Chance hat zu verstehen, was da passiert.
Heute hatte ich eine Idee - die ich versuchen werde am WE umzusetzen:
in der emulierten K1000-Umgebung kann ich eine Art Landkarte des gesamten Speichers erzeugen, in der im Laufe einer Sitzung protokolliert wird, in welchen Adressbereichen Befehle abgearbeitet bzw. Daten gelesen werden. Sozusagen ein Assemblerlisting mit "weissen Flecken auf der Landkarte". Diese Landkarte würde sich zuerst mit der Initialisierung und dem Idle-Loop füllen. Und dann würden bei jedem Tastendruck bzw. jeder ausgeführten Operation zusätzliche Bereiche erscheinen. Wär vermutlich sehr gut nachvollziehbar, wo etwas ausgeführt wird wenn man z.B. zum ersten Mal die "+" oder "SIN" Taste drückt.
Wär eine Chance, zu einem kommentierten Assembler-Listing des K1000 zu kommen. Könnte das funktionieren bzw hat jemand Interesse an so einer Version (wird vermutlich seeeehr zäh auf Eingaben reagieren...)?
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
19.08.2011, 10:53 Uhr
PeterSieg



@Micha: Habe mir das mal angesehen und auch K1003.pdf Bedienhandbuch geladen.
Die obersten 4 Tasten (LÖ...) werden bei mir ohne Beschriftung angezeigt (Excel 2007)? Auch fehlt mir die Taste mit 'Pfeil nach oben' die zur Zahleingabe/Abschluss dienen soll..??

(Wollte mal manuelles Rechnen ausprobieren)

So dem Bedienhandbuch folgen klappt das irgendwie überhaupt nicht..?

Peter
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
19.08.2011, 11:19 Uhr
Micha

Avatar von Micha

Hallo Peter,

das mit der nicht sichtbaren Beschriftung auf Lö usw. ist eigenartig, ich verwende auch Excel 2007. Bei paar Tasten die im Original grafische Symbole zeigen bin ich vom Original abgewichen, zB heisst die Taste mit dem Pfeil nach oben hier "Enter", wie bei den Taschenrechnern von HP, und die Stackmanipulationsbefehle hab ich anstelle der Symbole mit "Rot, Swap, Down" beschriftet. Und dann hat der Emulator rechts oben noch nen Einschaltknopf bekommen (um die Shapes zu initialisieren die die Leuchtanzeige simulieren).
Die Simulation der Sieben-Segment-Leuchtziffern frisst fast die ganze Performance auf.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
19.08.2011, 12:49 Uhr
PeterSieg



Was muss ich denn machen, um in den manuellen Rechenmodus zu kommen?
(So das z.B '3' 'ENTER' '4' 'ENTER' '+' -> '7' ergibt?)

Peter
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
010
19.08.2011, 13:26 Uhr
Micha

Avatar von Micha

Hihi, umgekehrt polnische Notation (UPN oder auch RPN) ist eine interessante Erfahrung

Die Bedienung der K1000 Tasten geht übrigens vorläufig nur per Maus. Und Macros müssen in Excel aktiviert sein. Nachdem die "Ein" Tastegedrückt wurde sollten im Display ein paar Nullen flimmern, der K1000 ist dann schon im manuellen Rechenmodus.

Zahlen werden entweder durch eine "Enter" (Pfeil nach oben auf dem echten K1000) oder einen Operator abgeschlossen. Um die oben gegebene Berechnung auszuühren muss man folgendes eingeben:

3 Enter 4 +

Wenn das hier eingegeben wird:

3 Enter 4 Enter +

kommt als Ergebnis 8 heraus, da das Enter die Zahlen auf dem Stack eine Position weiter nach oben schiebt.
RPN Rechner sind fast so etwas wie eine Glaubensfrage - die Firma HP hat jahrelang recht erfolgreich solche Geräte hergestellt. Ist eine recht gewöhnungsbedürftige Art zu rechnen. Kommt ohne Klammern aus, bei komplexen Berechnungen braucht es weniger Tastendrücke als arithmetisches Rechnen. Ich find das Konzept faszinierend, im Alltag ziehe ich allerdings auch "normale" Taschenrechner vor
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
011
19.08.2011, 13:43 Uhr
PeterSieg



Hmm.. dann gent da bei mir gar nichts in der Richtung..
UPN kannte ich schon.. aber laut PDF Handbuch sollte 'BES' leuchten..
Das tut der Emulator aber nach 'EIN' nicht.. die Nullen etc. sehen aber so aus
wir hier beschrieben.. aber nach '3' und 'ENTER' erscheint z.B auch keine 3
im Display etc. (Auch nach Pi erscheint nicht außer den 00 00 im Display..)

??

ARRGGG: Habe jetzt den 'Fehler' ;-)
Ich hatte immer nur kurz 'geklickt' - wie man das so gewohnt ist.. man muß aber länger die Maustaste gedrückt lassen.. dann geht es..

Peter
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
012
19.08.2011, 13:48 Uhr
Micha

Avatar von Micha

ja, die Performance ist seeeehr zäh. VBA ist nicht die schnellste Sprache und die Simulation der Leuchtziffern verbraucht viel Rechenleistung. Dieser Emulator ist in der jetzigen Form mehr eine Konzeptstudie als etwas wirklich brauchbares.

Bin gerade dabe, mich in GTK einzuarbeiten, um eventuel mit C und dem GTK eine bessere Version zu basteln.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
013
19.08.2011, 15:07 Uhr
PeterSieg



Jup. Ich würde allerdings heutzutage immer Java als weitgehend plattformunabhängige Sprache bevorzugen. Damit ist es unter Windows, Mac, Linux, Android und ggf. sogar im Browser lauffähig..

Oder C und dann auf einem AVR ;-) Ausbaustufe 1 nur AVR und serielles Terminal und Ausbaustufe 2 dann mit Matrixtastatur + LCD Display..

Viel Erfolg!

Peter

Dieser Beitrag wurde am 19.08.2011 um 15:09 Uhr von PeterSieg editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
014
19.08.2011, 15:24 Uhr
Micha

Avatar von Micha

Das mit dem Atmel AVR ist ne interessante Idee...
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
015
19.08.2011, 18:39 Uhr
tp




Zitat:
PeterSieg schrieb
Jup. Ich würde allerdings heutzutage immer Java als weitgehend plattformunabhängige Sprache bevorzugen. Damit ist es unter Windows, Mac, Linux, Android und ggf. sogar im Browser lauffähig..

Also ich mag ja Java ganz gerne, aber die implikation obiger Aussage ist so pauschal nicht richtig. Der Vorteil von Java ist "lediglich", dass ein und das selbe Programm-Binary mehr oder weniger portabel ist. Bei C muss man es dann eben neu übersetzen.
Man kann mit GTK sehr schön für Linux und Windows programmieren, Mac ist noch recht hakelig, geht aber prinzipiell auch. Und vom Design her ist GTK (z.B. im Gegensatz zu Swing) einfach mal unglaublich elegant und mächtig.
--
Die Zeit ist auch nicht mehr, was sie mal war! (Albert Einstein)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
016
20.08.2011, 20:42 Uhr
Micha

Avatar von Micha

ich mag auch C lieber als die späteren Mode-Sprachen. C hat so ne wunderbare konzeptionelle Klarheit und Geradlinigkeit wie kaum eine ander Sprache. Wenn man sich reinkniet und damit Sachen probiert erschliesst sich das mit der Zeit. Auf ner anderen Plattform neu kompilieren - so what?

werd daher den eigentlichen Emu zunächst auf jeden Fall mit C weiterentwickeln. Und für die Umsetzung wohl zunächst mal sehen ob das mit GTK als komplette Software-Emulation machbar ist. Atmel AVR is ne wahnsinnig interesante Option für danach. Ich würd gern so nen Rechner zum drauf rum tippen realisieren...
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
017
21.08.2011, 00:05 Uhr
tp




Zitat:
Micha schrieb
Und für die Umsetzung wohl zunächst mal sehen ob das mit GTK als komplette Software-Emulation machbar ist.

Das geht auf jeden Fall. Mein KCemu nutzt auch ja GTK .

Übrigens auch mal einen Blick auf Glade werfen. Damit kann man prima die Oberfläche des Programmes entwerfen.
--
Die Zeit ist auch nicht mehr, was sie mal war! (Albert Einstein)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
018
30.06.2019, 01:24 Uhr
Jens_G




Zitat:
Micha schrieb
ich mag auch C lieber als die späteren Mode-Sprachen. C hat so ne wunderbare konzeptionelle Klarheit und Geradlinigkeit wie kaum eine ander Sprache. Wenn man sich reinkniet und damit Sachen probiert erschliesst sich das mit der Zeit. Auf ner anderen Plattform neu kompilieren - so what?


Multiplatformanwendung sollte mit QT5 und C++ gehen -- bin gerade dabei -- finde den Einsprung zur Eingabe noch nicht. 3 Nullen werden nach dem Einschalten angezeigt.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek