altes Phytec MCB-51 Monitor/Basic Befehle?

OP #8075794
Lesenswert?

Ich habe ein altes Phytec miniCon-535/LC Board, aber keine Unterlagen dazu.
Mit Spannungsversorgung läuft es und ich kann das Basic mit der Eingabe von "basic" im seriellen Terminal (9600baud) eingeben. Ich bin auf der Suche nach den Basicbefehlen und insbesondere wie man Graphik auf dem Display darstellen kann.

Angehängte Dateien:
#8075806
Lesenswert?

Ich würde einfach mal bei Phytec nach Unterlagen nachfragen. Meist waren die auch als PDF abrufbar und ich kann mir nicht vorstellen, dass dort keine Unterlagen für ihre Boards mehr vorhanden sind. Ich hatte früher beruflich mit Phytec öfter Kontakt und konnte mich über deren Service nicht beklagen.

OP #8075811
Lesenswert?

Günter N. schrieb:

Ich würde einfach mal bei Phytec nach Unterlagen nachfragen.

Danke für den Hinweis. Das wäre vielleicht der einfachste Weg. Eigentlich untersuche ich das Board nur aus Interesse. Das angezeigte Datum ist ja 1988 und das ist schon eine ganze Weile her. Mich wundert ja, dass das EPROM die Daten noch nicht verloren hat.

Da sich das Board über die RS232 ansprechen und bedienen lässt, habe ich schon ein paar Sachen durch Probieren heraus gefunden. Ich überlegen, einen Memory-Dump zu machen und die Befehle vielleicht optisch zu entdecken.

Hier mal die bisherigen Erkenntnisse.

1
Eingabe von
2
basic 
3
wechselt in den Basic-Interpreter
4

5
zurück mit
6
exit
7

8
? zeigt die Hilfe
9

10
mit
11

12
conf 0 
13

14
kommt man in den reinen terminal Mode
15

16
#?
17
memory  display    modify       fill                verify
18
bit:   >DB range  >EB address  >FILLB range value  >VB range value
19
code:  >DC range  >EC address  >FILLC range value  >VC range value
20
data:  >DD range  >ED address  >FILLD range value  >VD range value
21
idata: >DI range  >EI address  >FILLI range value  >VI range value
22
xdata: >DX range  >EX address  >FILLX range value  >VX range value
23

24
 program execution              breakpoint(s)      program load/save
25
>G [address] [,breakadd] - go  >BD bp - disable   >:hex_rec - load intel hex
26
>T [count] - trace step        >BE bp - enable    >S range - save intel hex
27
>P [count] - procedure step    >BK bp - kill
28
                               >BL - list
29
                               >BS address - set
30
 utility
31
>A address - assemble          >MX xrange dest - move xdata
32
>U range - disassemble         >MC crange dest - move cdata
33
>X [register] - disp/change    >BASIC -  basic interpreter
34
>CONF [0..4] - configuration   >TERM - terminal mode
35
>HELP - display menu           >MAP [basicram]
#8075833
Lesenswert?

#8075840
Lesenswert?

Christoph M. schrieb:

Ich habe ein altes Phytec miniCon-535/LC Board, aber keine Unterlagen dazu.

Hier gibt es ein Hardware Manual vom miniCON-535, allerdings nicht vom LC. https://www.phytec.de/fileadmin/legacy/downloads/Manuals/L-002E.pdf

Ich bin auf der Suche nach den Basicbefehlen ...

Basic als höhere Programmiersprache sollte, bis auf irgendwelche proprietären Erweiterung, die gleichen Grundbefehle verwenden, wie anderen Basic-Interpreter auch.

... und insbesondere wie man Graphik auf dem Display darstellen kann.

Das Display hängt wohl über einen Port am µP, d.h. da brauchst du das Manual vom Graphikcontroller.

OP #8076374
Lesenswert?

Vielen Dank für eure Antworten.

Roland F. schrieb:

https://www.dos4ever.com/8031board/Basic52Manual.pdf

Das Basic auf dem minConLC-Board scheint tatsächlich recht ähnlich. Die meisten Kommandos funktionieren und es gibt auch ein paar Erklärungen im Manual die weiterhelfen. Schön wäre es natürlich, wenn man ein Repository mit ein paar Programmbeispielen hätte. Damals gab es aber github noch nicht.
Ich habe noch das Spezifikationsblatt des minCon_LC gefunden.
Unpraktisch bei dem Basic ist, dass es kein "print at x,y" wie bei manchen frühen Basic-Computern gibt. Das heißt, man kann das LCD nur Zeichenweise füllen. Oder wie seht ihr das?

Angehängte Dateien:
#8076405
Lesenswert?

Christoph M. schrieb:

Schön wäre es natürlich, wenn man ein Repository mit ein paar Programmbeispielen hätte.

Na ja, der Befehlsvorrat ist überschaubar und BASIC ist jetzt auch nicht gerade C++. Von daher dürfte es recht einfach sein selbst ein paar kleine Beispielprogramme zu schreiben. Um die Beschäftigung mit der kontrollerspezifischen Eigenschaften (also Lage und Funktion der SFR) kommst du eh nicht herum.

Christoph M. schrieb:

Unpraktisch bei dem Basic ist, dass es kein "print at x,y" wie bei manchen frühen Basic-Computern gibt.

Dafür hast du ja das BASIC. :-) Ist ja jetzt kein Hexenwerk selbst ein entsprechendes Unterprogramm zu schreiben.

Dieter S. schrieb:

Wenn Du die Firmware des Boards hier hochlädst kann man schauen was es für Befehle gibt.

Das ist eine gute Idee! Vielleicht ist ja ein entsprechender PRINT-Befehl dabei.

rhf

: Bearbeitet durch User
#8076471
Lesenswert?

Roland F. schrieb:

Christoph M. schrieb:

Unpraktisch bei dem Basic ist, dass es kein "print at x,y" wie bei manchen frühen Basic-Computern gibt.

Dafür hast du ja das BASIC. :-) Ist ja jetzt kein Hexenwerk selbst ein entsprechendes Unterprogramm zu schreiben.

Ich vermute, Christoph wollte den Text pixelgenau positionieren. Das wird so oder so nicht funktionieren. Die meisten einfachen BASIC-Dialekte konnten keine Grafik (das gab die Hardware gar nicht her) sondern konnten Text nur auf einen 80x25 oder 40x25 Zeichenraster plazieren.

Mit den grafikfähigen Heimcomputern gegen Ende der BASIC-Ära kamen zwar BASIC-Dialekte auf, die das konnten. Aber verbreitet waren die zumindest in meiner Wahrnehmung nicht. Erkennen konnte man die recht einfach: wenn sie Primitiven wie LINE, RECT oder CIRCLE anboten, konnten sie zumindest Grafik. Aber Textausgabe war dann trotzdem meist auf ein festes Raster (typisch 8x8 Pixel) beschränkt.

Das hat mit der Organisation des Bildwiederholspeichers (Frame Buffer) zu tun. Ein Pixel entsprech damals typischerweise einem Bit. Adressierbar waren aber nur Bytes. Um ein Pixel an einer beliebigen Position zu setzen (bzw. löschen) brauchte man also einen read-modify-write Zyklus. Für ein Zeichen aus einem 8x8 Zeichensatz sind das 64 solche Zyklen. Zum Schreiben eines Zeichens auf eine Position im 8x8 Raster brauchte man aber nur 8 Schreibzugriffe. Das ging also deutlich fixer.

OP #8076499
Lesenswert?

Axel S. schrieb:

BASIC-Dialekte konnten keine Grafik (das gab die Hardware gar nicht her) sondern konnten Text nur auf einen 80x25 oder 40x25 Zeichenraster plazieren.

Ein erster Schritt könnte schon die Positionierung mit Zeichenauflösung sein, aber es wäre natürlich viel toller, wenn man z.B. auch einen Temperaturgraph zeichnen könnte. Im Anhang die Displayplatine von hinten.

Angehängte Dateien:
#8076515
Lesenswert?

Axel S. schrieb:

Mit den grafikfähigen Heimcomputern gegen Ende der BASIC-Ära kamen zwar BASIC-Dialekte auf, die das konnten. Aber verbreitet waren die zumindest in meiner Wahrnehmung nicht. Erkennen konnte man die recht einfach: wenn sie Primitiven wie LINE, RECT oder CIRCLE anboten, konnten sie zumindest Grafik. Aber Textausgabe war dann trotzdem meist auf ein festes Raster (typisch 8x8 Pixel) beschränkt.

Schon die Grafikbefehle des Commodore Basic 3.5 (C16, C116, Plus4) können das. Der Text allerdings im Graphikmodus geschrieben, was Einschränkungen der Geschwindigkeit nach sich zieht.

Diese Grafikroutinen habe ich vor vielen Jahren als Basis für eine Erweiterung des Extended Basic (Exbasic) für den C64 benutzt.

Aber was will man heute mit einem Basic auf der Basis 8052 noch anfangen?

Für die PIC32 gibt es ein Basic als C-Projekt. Damit kann man innerhin das Basic sehr leicht um eigene Befehle erweitern, deren Ausführung durch den Basicinterpreter für eine sinnvolle Anwendung zu langsam wäre. Also z.B. ein Messraster in eine Grafik einblenden.

Die Hardware ist dafür recht einfach gestrickt: Maximite/Duinomite. Der Controller (PIC32MX795F512) ist ein PIC32 mit immerhin 80 MHz Takt.

OP #8076532
Lesenswert?

Cartman E. schrieb:

Schon die Grafikbefehle des Commodore Basic 3.5 (C16, C116, Plus4) können das.

Das nützt in dem Fall aber wenig, da es keine Grafikkommandos gibt.
Das angehängte File mit dem Kommandos habe ich über Memory-Dumps und KI-Hilfe generiert und sieht dem hier ganz ähnlich:

Roland F. schrieb:

Das vermute ich auch. Hier ein Link zum Reference Manual:

https://www.dos4ever.com/8031board/Basic52Manual.pdf

Angehängte Dateien:
#8076590
Lesenswert?

Christoph M. schrieb:

Cartman E. schrieb:

Schon die Grafikbefehle des Commodore Basic 3.5 (C16, C116, Plus4) können das.

Das nützt in dem Fall aber wenig, da es keine Grafikkommandos gibt. Das angehängte File mit dem Kommandos habe ich über Memory-Dumps und KI-Hilfe generiert und sieht dem hier ganz ähnlich:

Mein Bezug war die Aussage:

Axel S. schrieb:

... Die meisten einfachen BASIC-Dialekte konnten keine Grafik (das gab die Hardware gar nicht her) sondern konnten Text nur auf einen 80x25 oder 40x25 Zeichenraster plazieren.

Was direkt wieder zu der Frage führt, was will man mit einem Basic das auf einem 8052 Derivat basiert, dass man nicht einmal für seine Zwecke anpassen kann. Z.B. Grafikbefehle beim Interpreter nachrüsten. Ein "ganz ähnlich" wird nicht reichen. Wäre es nicht auf einem 8052 Derivat basieren würde, sondern auf einem 8052, und der für das 8052AH-Basic geplanten Hardware, wäre dies immerhin möglich.

Eine Grafik die elementar mit Basicbefehlen aufgebaut und verändert wird, ist unbenutzbar langsam.

Alternativen habe ich ja erwähnt.

Persönliche Seite #8088374
Lesenswert?

Das BASIC von Phytec war eine Lizenz des Intel 8052AH BASIC mit einigen Erweiterungen und auch Fehlerkorrekturen des originalen Intel-Codes. Soweit ich mich erinnere, hat Guido Philippi da tief die Finger drin gehabt, der später ein eigenes Ing.-Büro in Frankfurt Kelsterbach gründete. Vielleicht beantwortet er dir noch Fragen.

Graphikbefehle gab es keine drin. Als Studenten haben wir bei Phytec mal eine Graphikbibliothek in Assembler angefangen, sie wurde aber nie fertig. Ich hatte den Bresenham bis hin zum Zeichnen von maskierten Ellipsen implementiert. Es lief aber einfach zu langsam, um praktisch verwendbar zu werden. Der Display-Controller ist strunzdumm und das Setzen von Grafikpunkten sehr umständlich, was die Sache äußerst behinderte.

Alles Geschichte.

OP #8088375
Lesenswert?

Abdul K. schrieb:

Der Display-Controller ist strunzdumm und das Setzen von Grafikpunkten sehr umständlich, was die Sache äußerst behinderte.

Dass das Board (und die LCD) nach 40 Jahren immer noch funktioniert, finde ich ja äußerst verwunderlich. Auch weil die sich darauf befindenden EPROMs ja mittlerweile ihre Ladung verloren haben könnten. Dem ist aber nicht so. Es ist ja nur eine Spielerei. Wenn ich wüsste, an welche Stellen ich "hinein poken" müsste, könnte ich ja die Zeichen direkt an die richtige Stelle setzen.

Persönliche Seite #8088380
Lesenswert?

Du weißt ja nicht, ob nicht doch ein paar Bits schon gekippt sind. Solange der Prozessor dort nicht vorbeirauscht, hat es keine Auswirkung.

Der Displaycontroller ist ein Toshiba T6963C. Soweit ich mich erinnere, wird er über zwei Speicheradressen angesprochen und dämlicherweise war er glaub auf 6Bit(Pixel) pro Byte im Grafiklayer hardwaremäßig voreingestellt (Bin mir nicht ganz sicher). Es gibt noch eine Textlayer, die den internen Charactergenerator benutzt. Also ein Byte ASCII gleich ein komplettes Zeichen auf dem Display.

Vielleicht findest du eine Memorymap oder den Schaltplan. Ich habe da nix mehr, leider.

OP #8088520
Lesenswert?

Dieter S. schrieb:

Dem TO wurde bereits vorgeschlagen die Firmware (Dump der EPROMs) hier hochzuladen well das weitere Einblicke ermöglichen würde. Will er aber scheinbar nicht, dann gibt es halt keine weiteren Einblicke...

So ungefähr .. vielleicht noch mit der kleinen Ergänzung, dass es der TO selbst vorgeschlagen hat (ich).

Hier bitteschön: der EEPROM dump nach 40 Jahren.

Angehängte Dateien:
#8088526
Lesenswert?

Christoph M. schrieb:

Ich bin auf der Suche nach den Basicbefehlen

Christoph M. schrieb:

Hier bitteschön: der EEPROM dump

1
> strings EPROM_miniConLC_SMJ27C256_at_DIP28.bin
1
STOP
2
CLEAR
3
PUSH
4
GOTO
5
PH0.
6
PRINT
7
CALL
8
STRING
9
BAUD
10
CLOCK
11
PH1.
12
STOP
13
ONTIME
14
ONEX1
15
RETI
16
RESTORE
17
NEXT
18
ONERR
19
INPUT
20
READ
21
DATA
22
RETURN
23
GOSUB
24
WHILE
25
UNTIL
26
THEN
27
STEP
28
ELSE
29
IDLE
30
.XOR.
31
.AND.
32
.OR.
33
FREE
34
XTAL
35
MBOT
36
TIMER0
37
TIMER1
38
TIMER2
39
TIME
40
T2CON
41
TCON
42
TMOD
43
PORT1
44
PCON
45
ASC(
46
USING(
47
CHR(
48
CCEN
49
PORT4
50
PORT5
51
ADCON
52
ADDAT
53
DAPR
54
IRCON
55
LIST
56
CONT
57
EXIT
58
EDIT
59
SAVE
60
PROG
61
XFER
62
ERASE
63
RCLOCK
64
SCLOCK

Die restliche Ausgabe von 'strings' sieht nicht nach BASIC-Befehlen aus...

#8088544
Lesenswert?

Christoph M. schrieb:

Es geht ja um die Frage, wie X,Y Pos auf dem LCD setzen.

Abdul K. schrieb:

Der Displaycontroller ist ein Toshiba T6963C

Es ist erst 20 Jahre her, das ich mich mit dem T6963 beschäftigt habe. Kennst Du denn schon die I/O- bzw. Speicheradresse vom Display-Controller?

Wenn ja, würde ich mich von der u8glib inspirieren lassen: https://github.com/olikraus/u8glib

Wenn nein, dann entweder eine Dokumentation zum Board beschaffen oder die Leitungen zum Display ausklingeln.

Angehängte Dateien:
#8088599
Lesenswert?

Der EPROM Dump liegt ab Adresse 0x8000, die Display Initialisierung ist bei Adresse 0xE943. Da kann man sich ansehen wie die Kommunikation mit dem Display Controller funktioniert.

Es sieht auf den ersten Blick nicht so aus als ob der Grafik Modus verwendet wird.

Persönliche Seite #8088602
Lesenswert?

Auf der Platine ist ein programmiertes GAL (Der schmale Baustein mit weißen Label). Darin befindet sich wie bei sehr vielen Modulen von Phytec der Adressdekoder.

Aber vielleicht fragst du einfach Phytec, ob sie dir ein paar Fotokopien aus dem Archiv schicken.

Der MC535/LC wurde wesentlich weniger oft als die MM535 verkauft. Die Displayplatine wurde zugekauft, da gibt's vielleicht woanders noch ein entsprechendes Datenblatt.

Wenn man weiß wie der Displaycontroller antworten muß, kann man ja auch bisserl wild im Adressraum rumpoken, bis er reagiert. Das DB hast du ja nun.

#8088737
Lesenswert?

Wenn man das MCB-51 BASIC des Boards mit dem original Intel MCS BASIC-52 von 1986 vergleicht gibt es folgende Unterschiede:

1
Fehlende Befehle:
2

3
 FPROG
4
 MTOP
5
 NULL
6
 PGM
7
 RCAP2
8
 RROM
9
 UI
10
 UO
11

12
Neue Befehle:
13

14
 ADCON                  ERASE
15
 ADDAT                  EXIT
16
 CC1                    IRCON
17
 CC2                    MBOT
18
 CC3                    PORT4
19
 CCEN                   PORT5
20
 CRC                    RCLOCK
21
 DAPR                   SAVE
22
 EDIT (Abkürzung "E.")  SCLOCK

Die Details zu den neuen Befehlen kann man relativ leicht aus dem Code herausfinden wenn man dazu in den Source Code des Originals von Intel schaut.

#8088800
Lesenswert?

Steht ja auch im Readme dass es sich um den Intel BASIC-52 Source Code handelt.

Und die obigen neu dazu gekommenen Befehle sind fast alle so einfach bzw. offensichtlich dass man noch nicht mal in den Code schauen muss um ihre Funktion zu erkennen bzw. es reicht aus sie einfach nur auszuprobieren.

Und die Ansteuerung der RTC des Boards ergibt sich aus dem Code an Adresse 0xD64F (RCLOCK) und 0xD710 (SCLOCK).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren