Hallöchen !
Mein nächstes Bastelprojekt wird ein 8051-System sein auf dem ein
einfacher 8051-Assembler laufen soll. Es soll alles Text-basiert sein
und auf einem Bildschirm etwa 50x25 Zeichen ausgeben bzw. die Zeichen in
ein Zeichenbuffer-RAM schreiben.
Mit wieviel kB Programmspeicher-Bedarf muss ich rechnen ? Reichen 32kB ?
Frage 348795081542 schrieb:> Hallöchen !>> Mein nächstes Bastelprojekt wird ein 8051-System sein auf dem ein> einfacher 8051-Assembler laufen soll. Es soll alles Text-basiert sein> und auf einem Bildschirm etwa 50x25 Zeichen ausgeben bzw. die Zeichen in> ein Zeichenbuffer-RAM schreiben.>> Mit wieviel kB Programmspeicher-Bedarf muss ich rechnen ? Reichen 32kB ?
Bestimmt sind 32k genug.
Ein Tipp: Auch, wenn es die Architektur beim MCS51 nahe legt, trenne
nicht RAM und Eprom. Für die Fehlersuche ist es bequem, Code im RAM
ausführen zu können. Und als Eprom würde ich einen Fash Typ nehmen.
Notfalls die ungenutzten Adressleitungen fest auf GND oder Jumper
GND/VCC.
Soll der 8051 denn den Bildschirm direkt bedienen oder überlässt du das
einem Terminal mit serieller Schnittstelle? Im ersteren Fall benötigst
du zumindest einen Rastercontroller wie den alten 6845 oder eine
selbstgebaute Logik mit Framebuffer RAM a la Apple ][ oder Sinclair
ZX80/81.
Im 2ten Fall ist evtl. ein Monitor Programm das erste, was du
implementieren solltest. Ob da ein kleiner Assembler oder Disassembler
mit bei ist, bleibt dir überlassen.
Ich habe einen 8052 Monitor mit Disassembler in 8k EPROM, aber das geht
sicher auch noch etwas kleiner.
Zur Peilung: In grauer Vorzeit passte ein symbolischer Assembler für
6502 in 4 KB 6502-Code, in Assembler geschrieben. Also der Assembler
pur, nicht der Support für Tastatur, Bildschirm und Massenspeicher. Wird
bei 8051 auch nicht schlimmer ausfallen.
A. K. schrieb:> passte ein symbolischer Assembler für> 6502 in 4 KB 6502-Code
Klingt doch gut. Intel hat ja auch ein komplettes Basic mit Gleitkomma
in 8kB gepackt.
Matthias S. schrieb:> Sinclair ZX80/81.
Wie gut kommen heutige LCDs eigentlich damit zurecht? Damaligen
Röhrenfernsehern wars ziemlich egal, wenn das Signal mal weg und mal
wieder da war. Sobald es wieder da war, kam auch sofort das Bild. LCDs
habe ich im Verdacht, dass es ziemlich dauert, bis die dem Signal über
den Weg trauen.
Wobei sich Sir Sinclairs bizarre Methode der Display-Ansteuerung nicht
so leicht auf einen 8051 übertragen lässt. Die ist etwas zu sehr von
speziellen Eigenschaften der Z80 abhängig.
A. K. schrieb:> Wie gut kommen heutige LCDs eigentlich damit zurecht?
Naja, BAS bleibt BAS und mehr konnte der Sinclair ja nicht. Mein 15"
LCD, den ich über einen Konverter mit FBAS füttere, klappt jedenfalls.
Allerdings liefert der Konverter immer ein Rastersignal, so das der
Eingang auch mal komplett ausfallen kann, ohne das der LCD aus dem Tritt
kommt.
Georg G. schrieb:> Ein Tipp: Auch, wenn es die Architektur beim MCS51 nahe legt, trenne> nicht RAM und Eprom.
Äh, hust, wir haben 2017 und es gibt die Silabs EFM8 als 8051ger mit
integriertem Flash und on-chip-Debugging.
IIRC gibt es da auch ein nicht allzu teures STK mit LCD. Da ist dann
gleich der Programmer mit drauf.
Frage 348795081542 schrieb:> auf einem Bildschirm etwa 50x25 Zeichen ausgeben
Hmm, das LCD hat nur 128x128 Punkte. Aber Du kannst IIRC über USB einen
seriellen Port benutzen.
Frage 348795081542 schrieb:> Reichen 32kB ?
Normalerweise ja.
> Gibt es eigentlich Bücher oder Anleitungen wie man> einen Assembler schreiben kann ?
Was soll man da großartig erklären? Syntax lernen, verstehen und dann
umsetzen. Das hatte ich als Teenager zum Spaß gemacht - für den 8051.
Die wenigsten hier wollen einen Assembler, der auf dem 8051 Zielsystem
selber läuft - zumal man sowieso einen auf dem PC braucht, um den
Assembler auf dem 8051 zu schreiben :-P
Deswegen wird man da nicht viel finden. Es ist einfacher, am PC zu
schreiben und zu assemblieren und dann ein HEX oder wasauchimmer aufs
Zielsystem zu laden. Defür hatte ich mir damals den Monitor geschrieben.
Der kann unter anderem sowas empfangen und dann ausführen.
Wenn du es dir richtig einschenken willst, schau dir den Quellcode zum
o.a. 8051AH Basic an. Da wird eine komplette Programmiersprache
implementiert.
Hauptsächlich ne Fleissarbeit. Das einzige, was man das Programm
selbstständig machen muss: Adressen/Sprungziele korrekt berechnen.
Und sinnvolle Fehlermeldungen produzieren.
Einen vollständigen und fehlerfreien Assembler zu programmieren ist aber
dennoch eine ziemliche Aufgabe - ich möchte das nicht machen, nichtmal
auf dem PC als cross-Assembler.
Mach dir was kleines mit sehr beschränktem Befehlssatz, das reicht zum
Lernen wie sowas funktioniert (das ist immer ein guter Ansatz), aber
letztendlich reitest du da ein totes Pferd.
H.Joachim S. schrieb:> Einen vollständigen und fehlerfreien Assembler zu programmieren ist aber> dennoch eine ziemliche Aufgabe - ich möchte das nicht machen
Findest du? Mein erstes nicht triviales C Programm war ein 68000
Assembler.
Klar ist das so. Ist ja auch nicht schlimm, im Gegenteil. Aber wozu
sollte man sich die Mühe machen, einen Assembler auf dem Zielsystem
selbst laufen zu lassen? Dafür ist ein PC besser geeignet. Noch dazu
gibts die Software schon, voll funktionsfähig.
Da kann man sich lieber Gedanken über die eigentlichen
Anwendungsprogramme seines Retros machen. Wenn einem was vernünftiges
einfällt...
im ULTRAMON für den 8051 ist schon ein One-Pass-Assembler enthalten.
Platzbedarf (mit den übrigen Monitorfunktionen): 8 KB.
Den SMON für den 6502/6510/C64 mit nur 4 KB toppt wohl keiner.
P.S.:
Ein One-Pass-Assembler kann vorwärtsgerichtete Adressrechnung
natürlich nicht oder nur eingeschränkt.
Es ist eher ein Hilfswerkzeug zum Patchen von Debugobjekten.
Auf die Bequemlichkeiten von Intels MCS51 und PLM51 wird man
daher trotzdem nicht verzichten wollen.
Gerüchteweise gibt es auch 8051-C-Compiler/Assembler von IAR, Keil
und Hitech...