Forum: Mikrocontroller und Digitale Elektronik CP/M auf ATmega88


von Peter Sieg (Gast)


Lesenswert?

Hi.

Wollte mal auf diese Projekt aufmerksam machen:
http://spritesmods.com/?art=avrcpm

Dort wurde ein ATmega88, ein 256kx4 DRam-chip und eine SD Karte zusammen 
geschaltet, um über einen 8080 Emulator letzlich CP/M 2.2 von der SD
Karte zu booten!

Ich dachte erst.. das kann doch nicht sein.. und hielt das für einen 
Aprilscherz.. aber er funktioniert wirklich! Siehe:
http://avr.cwsurf (dot) de/?AVR_CP%2FM

Es wäre wunderbar, wenn sich hierfür noch mehr Leute begeistern könnten 
und
1. Schauen, welche 8080 CP/M Programme jetzt auch schon laufen.. also 
ggf.
   erweiterte diskimage's erstellen und testen.. BTW: MBASIC steigt mit 
einem
   fehlenden Opcode aus.. ZORK läuft! Prima wären ein paar Spiele z.B 
Sargon
   Schach etc...
2. Versuchen den AVR Assemblersource zu erweitern (mehr opcodes/Z80).

Peter

von Joerg W. (joergwolfram)


Lesenswert?

Ich hatte selbst schon mal mit einem Z80-Emulator und externem DRAM an 
einem Mega644 angefangen. Mit allen möglichen "Tricks" kommt man so auf 
maximal 2MHz beim emulierten Z80, mit zusätzlicher Videoausgabe-Routine 
und PS2-Tastatur wurde das Ganze eigentlich unbrauchbar.
Für eine bessere Emulation würde ich auf jeden Fall einen größeren µC 
nehmen und für schnelleren Speicherzugriff diesen mit 8 Bits 
anschließen.
Ansonsten finde ich die Idee nicht schlecht.

Jörg

von Reinhard Kern (Gast)


Lesenswert?

Peter Sieg schrieb:
> Dort wurde ein ATmega88, ein 256kx4 DRam-chip und eine SD Karte zusammen
> geschaltet, um über einen 8080 Emulator letzlich CP/M 2.2 von der SD
> Karte zu booten!

Hallo Peter,

du meinst doch sicher 2 Chips mit 4bit-RAM - einen Z80 auf einer 
4bit-Architektur zu emulieren wäre schon Tierquälerei, obwohl natürlich 
im Prinzip alles geht, auch eine Turingmaschine als Z80.

Ich habe zwar tatsächlich noch Quasi-CP/M-Systeme im Einsatz (der 
Prozessor glaubt zumindest an CP/M), aber trotzdem die Frage, was soll's 
- es gibt genügend Z80 und CP/M Systeme auf dem PC, und schliesslich 
gibts ja den Z80 auch noch.

Gruss Reinhard

von Karl H. (kbuchegg)


Lesenswert?

Reinhard Kern schrieb:
> Peter Sieg schrieb:
>> Dort wurde ein ATmega88, ein 256kx4 DRam-chip und eine SD Karte zusammen
>> geschaltet, um über einen 8080 Emulator letzlich CP/M 2.2 von der SD
>> Karte zu booten!
>
> Hallo Peter,
>
> du meinst doch sicher 2 Chips mit 4bit-RAM - einen Z80 auf einer
> 4bit-Architektur zu emulieren

Perverserweise hat er tatsächlich nur einen RAM Chip benutzt. Was soll 
ein Z80 auch mit 256kB anfangen :-)

(Kann den Link nicht direkt posten, Das (dot) gegen einen . austauschen. 
Ja der Link sieht ansonsten wirklich so seltsam aus
http://avr.cwsurf (dot) de/?AVR_CP%2FM

Alle Speicherzugriffe ins REM werden über Nibbles abgehandelt

Wie die Befehlsdekodierung und Ausführung gemacht wurde: Finde ich 
clever gelöst

von Peter Sieg (Gast)


Lesenswert?

Jup. Nur 1 DRam a 256kx4. Ein Byte wird als 2xNibble geschrieben und 
wieder gelesen..

Selbst ich als Assembler Noob finde den Quelltext gut lesbar und 
strukturiert..

Warum? Weil es geht! Und weil es Spaß macht zu zeigen, das es geht..
Und weil ein ATmega88 ca. 3€ kostet, eine solches DRam gibts in der 
Schrottkiste (sind z.B beim Amiga 500 verwendet worden..) also alles
für ca. 6-8€..

Ich persönlich finde die aktuelle Geschwindigkeit gar nicht soo 
schlecht!
Läuft aktuell mit 20MHz. Für SwinSID sind die 88er aktuell sogar mit 32 
und 40MHz übertaktet.. also noch eine Option.. ohne Hardware und (fast) 
Softwareanpassungen..

Für mich wäre die erste Priorität die Kompatibilität zu erhöhen, indem 
mehr
Opcodes unterstützt werden.. Wäre doch was, wenn MBASIC und Sargon Chess
darauf laufen würden (Sargon habe ich noch nicht getestet)..

BTW: Mit der seriellen Anbindung bin ich prima zufrieden.. ich möchte 
gar
keine TV/BAS und PS/2 Anschluß.. (trotzdem ist AVR Chipbasic ein prima 
Projekt!!)

Nur CP/M ist hat schon was.. Turbo Pascal, Wordstar, dBase II.. ;-)

Peter

von Christian B. (casandro)


Lesenswert?

Ja, man könnte dann endlich die ATMegas als echte Computer verwenden. 
Nur schade, dass CP/M mindestens 16 Kilobyte RAM erfordert, sonst könnte 
man das ja komplett auf dem Mikrocontroller laufen lassen.

Man könnte sich da vielleicht sogar noch eine Art Bussystem, 
beispielsweise auf Basis des I^2C überlegen, über den man dann 
Peripheriegeräte anschließen kann. Die könnte man dann dem 
Betriebssystem als Block oder Zeichengeräte darbieten.

von karadur (Gast)


Lesenswert?

Hallo

ist akademisch interessant, aber: CP/M war vor 25 Jahren. ( Habe selbst 
unter CP/M meine Diplomarbeit geschrieben und Programme für mein Diplom 
geschrieben. ) UNIX und VMS gab es damals auch schon. CP/M jetzt auf 
einem AVR zu emulieren und als Betriebssystem zu verwenden ist "schräg". 
Ein Linux auf einem AVR ist da wohl eher angesagt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

karadur schrieb:
> Habe selbst
> unter CP/M meine Diplomarbeit geschrieben

Willkommen im Club. ;-)

von Christian B. (casandro)


Lesenswert?

karadur schrieb:

> Ein Linux auf einem AVR ist da wohl eher angesagt.

Der Linux-Kernel braucht so mindestens 4-8 Megabytes an Speicher. Ich 
glaube, das wird aber dann auch zu langsam.

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

>> Ein Linux auf einem AVR ist da wohl eher angesagt.
>Der Linux-Kernel braucht so mindestens 4-8 Megabytes an Speicher. Ich
>glaube, das wird aber dann auch zu langsam.

... und eine MMU, FPU von Vorteil, 32 Bit Arch. (16  wüde gehen), und 
und und

von karadur (Gast)


Lesenswert?

Hallo

dann sucht mal nach XINU.( Zilog ) Läuft zwar nicht auf AVR, aber 8Bit.

von Christian B. (casandro)


Lesenswert?

Ja, solche klein-Unixe gibts einige. Hätte man jedoch CP/M, so hätte man 
erstmal eine Plattform auf der man aufbauen kann.

Natürlich könnte man sich auch überlegen, auf dem Atmel selbst ein 
Dateisystem im Flash aufzubauen, aus dem man dann nativ Code ausführen 
könnte. Aber das ist eventuell mehr Arbeit als solch ein Emulator und 
weniger flexibel.

von Reinhard Kern (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Perverserweise hat er tatsächlich nur einen RAM Chip benutzt. Was soll
> ein Z80 auch mit 256kB anfangen :-)

viel: program overlays habe ich ausgiebig benutzt und die kann man auch 
mit page switching einblenden statt nachzuladen, geht viel schneller. 
Und wenn man 4bit-Nibbles laden kann, dann kann man auch Daten aus einem 
MB-grossen RAM laden.

Eine Steuerungssoftware von mir hatte 30 Overlays und hätte daher auf 30 
RAM-Pages a 32 kB laufen können.

Unterschätzt den Z80 nicht, da konnte man auch schon richtige Computer 
damit bauen.

Gruss Reinhard

von karadur (Gast)


Lesenswert?

Hallo

es gab auch CP/M 3.0. Damit konnte man dank MMU mit einem Z80 sehr viel 
mehr Speicher verwalten. Ganz zu schweigen von CP/M86 und CP/M68k.

Und: die eZ80 sind auch nicht ohne.

PS: Auf meinem 8MHz Z80 CP/M war Turbopascal deutlich schneller als auf 
einem IBM XT.

Und: etwas was ich sehr vermisse. Dank Epromfloppy war der Rechner 
schneller gestartet als das die Bildröhre warm war.

von Rene B. (themason) Benutzerseite


Lesenswert?

Also nen Linux auf nem AVR emulieren dürfte denke ich scheitern.
Aber das CP/M mit emulierter Z80 ... Schon echt ne geniale Sache.

@reinhard

>Unterschätzt den Z80 nicht, da konnte man auch schon richtige Computer
>damit bauen.

Das ist wohl auch der Grund warum es so viele Computer auf Z80-Basis gab 
:-)

Mal im Ernst. Immerhin hat die ganze Computerei ja mit dem 4004 
angefangen (wenn man man den Zuse, IBM, Leibnitz und Babbage außen vor 
lässt :-)
Und nen Z80 auf nem AVR emulieren, und "nebenbei" noch das DRAM handlen 
...
Respekt.
Wenn ich damals mal was mit CP/M gemacht hätte würd ich dieses Projekt 
auf jedenfall nachbauen. Retro mit neuen mitteln find ich immer witzig.
Genauso wie den SwinSID. Schon echt klasse so Projekte. Weiter so :-)

von (prx) A. K. (prx)


Lesenswert?

Rene Böllhoff schrieb:

> Also nen Linux auf nem AVR emulieren dürfte denke ich scheitern.

Nicht wirklich, wäre nur zu langsam. Wer eine Z80 simulieren kann, der 
kann auch eine PDP-11 simulieren. Wird allerdings nicht brandschnell 
sein.

> Mal im Ernst. Immerhin hat die ganze Computerei ja mit dem 4004
> angefangen (wenn man man den Zuse, IBM, Leibnitz und Babbage außen vor
> lässt :-)

Autos gibt's auch erst seit dem VM-Käfer, wenn man mal die zig anderen 
älteren Hersteller aussen vor lässt ;-).

Mit dem 4004 haben die Mikrocomputer angefangen. Nicht die Computer.

von Christian B. (casandro)


Lesenswert?

Naja, bis zum 8080 galten solche Mikroprozessoren aber eher als was für 
Steuerungen, ähnlich wie heute die Mikrocontroller.

Naja, aber im Emulator könnte man richtig viel machen. Man könnte zum 
Beispiel virtuelle Hardwareeinheiten machen, welche dann rechenintensive 
Operationen übernehmen. Damit könnte man sicherlich bis fast zur nativen 
Geschwindigkeit der AVRs kommen.

von Rene B. (themason) Benutzerseite


Lesenswert?

>Autos gibt's auch erst seit dem VM-Käfer, wenn man mal die zig anderen
>älteren Hersteller aussen vor lässt ;-).

Hast schon recht :-)

Aber ich denke mit dem 6502 und dem Z80 wurde die Computerei auch für 
Hobbybastler möglich bzw die Verbreitung hat damit erst Einzug gehalten.

Trotzdem schon echt erstaunlich wie sich das alles entwickelt hat ...
Vor allem in den letzten 30 Jahren.

von (prx) A. K. (prx)


Lesenswert?

Christian Berger schrieb:

> Naja, bis zum 8080 galten solche Mikroprozessoren aber eher als was für
> Steuerungen, ähnlich wie heute die Mikrocontroller.

D'accord, solange du das "Mikro" nicht vergisst, wie Rene das tat.

von (prx) A. K. (prx)


Lesenswert?

Rene Böllhoff schrieb:

> Trotzdem schon echt erstaunlich wie sich das alles entwickelt hat ...
> Vor allem in den letzten 30 Jahren.

Davor war's im Entwicklungstempo auch nicht übel. Noch 1969 wurden 
(manche) Computer aus Myriaden von Einzeltransistoren aufgebaut, z.B. 
der für viele Jahre schnellste Computer CDC7600. Die (fast) 
vollintegrierte 8080 kam mit ihren 6000 Transistoren auf dem Chip grad 
mal 5 Jahre später raus (und war natürlich viele Grössenordnungen 
langsamer).

von Rene B. (themason) Benutzerseite


Lesenswert?

>Davor war's im Entwicklungstempo auch nicht übel.

Schon richtig. Aber so richtig Einzug hat der Mikroprozessor ja erst 
gefunden nachdem die Bauform nicht mehr in Turnhallen-Einheiten gemessen 
wurde :-)
Aber die Miniaturisierung hat ja auch nichts mit den Konzepten von 
damals zu tun. Die Prinzipien gelten ja sogar heute noch. Selbst wenn 
sich in der Integration und der Ausführungs-Geschwindigkeit extrem viel 
getan hat.

von (prx) A. K. (prx)


Lesenswert?

Rene Böllhoff schrieb:

> Schon richtig. Aber so richtig Einzug hat der Mikroprozessor ja erst
> gefunden nachdem die Bauform nicht mehr in Turnhallen-Einheiten gemessen
> wurde :-)

Sachte - es gab ab Mitte der 50er einen Röhren(!)rechner, der grad mal 2 
klassische Bauernschränke gross war und nur um die 2 Tonnen wog (*), I/O 
extra. Das Ding war ziemlich verbreitet (>2000 Stück). So ne Art 
Minicomputer der Röhrenära.

*: Ein Schrank für den Computer selbst, einer für die Stromversorgung. 
Bei einem vor 10 Jahren gängigen Disk-System der besseren Kategorie war 
die Basiseinheit einen solchen Schrank gross und wog grob eine Tonne. In 
dieser Hinsicht hat sich also wenig geändert, nur die Stromversorgung 
kriegt man dank Schaltnetzteiltechnik heute kleiner hin ;-).

von Rene B. (themason) Benutzerseite


Lesenswert?

>In dieser Hinsicht hat sich also wenig geändert ;-).

Wenn mans genau nimmt ist das ja auch ein Rückschritt gegenüber damals. 
Die Groß/Superrechner von heute geben sich mit einem Schrank ja nicht 
zufrieden, die wollen ja nach wie vor in Turnhalleneinheiten gerechnet 
werden :-))

Das sich die Rechenleistung versechsfacht hat lassen wir mal unter den 
Tisch fallen :))

Ups ... meinte : ver-zehn-hoch-sechs-oder-was-weiß-ich-sich-was-facht 
:))

Aber dennoch sehr Interessant wie sich das alles entwickelt hab. Les im 
Moment viel über die "alte" Technik. Vor allem würd mich mal 
interessieren wie Zuse es geschafft hat mit Mechanik Fließkommazahlen zu 
Rechnen. Bin ja gerad mal froh das ich das Floating-Point-Prinzip 
verstehe :-))

von (prx) A. K. (prx)


Lesenswert?

Rene Böllhoff schrieb:

> Wenn mans genau nimmt ist das ja auch ein Rückschritt gegenüber damals.
> Die Groß/Superrechner von heute geben sich mit einem Schrank ja nicht
> zufrieden, die wollen ja nach wie vor in Turnhalleneinheiten gerechnet
> werden :-))

Es fing mit Saalgrösse an, und heute baut mal riesige Betonhallen um 
diese Rechner drum herum. Aber zwischendrin gab es mal eine Zeit, in der 
die schnellste verfügbare Rechentechnik in ein Kinderzimmer reinpasste. 
Solange man das nämlich mit schnellen Einzelrechnern statt zigtausend 
Nodes machte spielte die Verbindungslänge eine zunehmend dominante 
Rolle, daher mussten die Dinger schrumpfen (Cray 1 und folgende).

> Aber dennoch sehr Interessant wie sich das alles entwickelt hab. Les im
> Moment viel über die "alte" Technik.

Kennst du das Thornton-Buch (PDF) über die CDC6600? Ungemein 
detailliert, bis auf Gatter/Transistorebene runter.

von Frank K. (fchk)


Lesenswert?

Peter Sieg schrieb:

> Es wäre wunderbar, wenn sich hierfür noch mehr Leute begeistern könnten

Ihr habt doch ein Rad ab! Sorry, aber das musste ich einfach loswerden.

Ein EZ80F91AZA mit 50 MHz kostet bei Digikey etwa 10 Euro, bei RS etwa 7 
Euro, hat 256k Flash eingebaut, hat Ethernet und noch einiges mehr an 
Peripherie (2 UART, i2c, SPI, RTC, 32 GPIOs, ...) und ist zu 100% 
software-kompatibel zum alten Z80. Du kannst sogar CP/M 3.0 
Bankswitching machen, das Teil hat selber die entsprechende Logik dafür. 
Du brauchst nur noch RAM anzuschließen. Ein 512k SRAM kostet bei RS 5 
Euro. Also auch nicht die Welt. /CS macht der Controller selber, Daten- 
und Adressbus und /RD und /WR werdet ihr auch wohl richtig anschließen 
können.

Was soll das also? Modernes Flagellantentum?

PS:
http://www.zilog.com/index.php?option=com_product&Itemid=26&mode=showProductDetails&familyId=130&productId=EZ80F91AZA

fchk

von (prx) A. K. (prx)


Lesenswert?

Frank K. schrieb:

> Ihr habt doch ein Rad ab!

Eindeutig ja. Und?

> Ein EZ80F91AZA mit 50 MHz kostet bei Digikey etwa 10 Euro, bei RS etwa 7
> Euro, hat 256k Flash eingebaut, hat Ethernet und noch einiges mehr

Meinst du wirklich, es ginge hier darum, auf möglichst effiziente Weise 
Z80-Programme laufen zu lassen?

> Was soll das also? Modernes Flagellantentum?

Noch nie jemanden an einem 50 Jahre alten Motorrad basteln gesehen? Das 
macht der bestimmt nicht um von A nach B zu kommen.

von Stefan (Gast)


Lesenswert?

>> Es wäre wunderbar, wenn sich hierfür noch mehr Leute begeistern könnten
>Ihr habt doch ein Rad ab! Sorry, aber das musste ich einfach loswerden.
>Ein EZ80F91AZA mit 50 MHz kostet bei Digikey etwa 10 Euro, bei RS etwa 7
>....

Du bist zu eingefahren: Du gehst von falschen Anforderungen aus. Du 
gehst davon aus, dass jedes Problem haufenweise Rechenpower, Speicher 
und viel Peripherie benötigt. Wer sagt, denn, dass es so sein muss?

Wenn das System nicht schnell sein muss, kommst du preislich mit den von 
Dir aufgezählten Bauteilen nicht hin. Außerdem muss Du für Deine 
Bauteile eine Platine fertigen lassen. Das geht mit dem Atmega88 auch 
ohne. In Ingenieursstunden gerechnet, wäre Deine Lösung mit Sicherheit 
überteuert.

von karadur (Gast)


Lesenswert?

Hallo

nu übertreibt es nicht! Es gibt Dinge die man einfach aus Interesse oder 
Spass macht. Die Idee mit einem AVR einen 8080 zu emulieren ist ja toll.

von Frank K. (fchk)


Lesenswert?

Stefan schrieb:

> Wenn das System nicht schnell sein muss, kommst du preislich mit den von
> Dir aufgezählten Bauteilen nicht hin. Außerdem muss Du für Deine
> Bauteile eine Platine fertigen lassen. Das geht mit dem Atmega88 auch
> ohne. In Ingenieursstunden gerechnet, wäre Deine Lösung mit Sicherheit
> überteuert.

Eben nicht. Der wesentliche Aufwand, nämlich die CPU-Emulation entfällt. 
Heißt also: Ich muss nur das CP/M BIOS anpassen, aber das müsst Ihr 
auch. Das BDOS ist ja überall gleich und wird ja als Objektfile 
dazugelinkt. Und selbst ein 3.0'er BIOS hat nur verhältnismäßig wenige 
Funktionen. Hab ich anno 87 schon mal gemacht, als ich noch jung und 
hybsch war.

Und zum Bauteileaufwand: Gut, der Chip ist ein 144'er LQFP. Also 
Adapterplatine, damits aufn Lochraster paßt. Das ist auch die einzige 
Hürde. RAM im DIL-Gehäuse, 3.3V Vcc, kann man direkt anklemmen, ist kein 
Hexenwerk. Ein Quarz oder Oszillator (braucht Ihr auch), Spannungsregler 
(braucht Ihr auch), RS232-Pegelwandler (braucht Ihr auch), und eine 
Handvoll R's und C's zum abblocken und als Lastkapazität für den Quarz 
und als Pullups.

Mehr braucht der EZ80F91 nicht, um hochzukommen.

RTC gewünscht? OK, noch ein 32 kHz Uhrenquarz plus 2 C's und 1 R dazu. 
SD-Karte? OK, ab an den SPI-Port. Kennt Ihr ja, ist hier auch nicht 
anders.

Wenn man kein Ethernet braucht, dann wars das.  Wirklich! Ich habe 
Eval-Board, Prozessormodule und ZDI(Zilog 2-Draht JTAG 
Variante)-Debugger und die ganze Doku und Software da, ich weiss, wovon 
ich rede.

fchk

von Rene B. (themason) Benutzerseite


Lesenswert?

@Frank

>Ihr habt doch ein Rad ab!

Fällt dir aber früh auf ...

>Ein EZ80F91AZA mit 50 MHz kostet bei Digikey etwa 10 Euro, ...

Natürlich gibts Chips/Boards die mehr können weniger kosten, aber es 
besteht doch gerade der Reiz darin mit den heutigen Standardchips solche 
Sachen zu machen wie z.b. eine Z80, einen SID, eine 6502 zu emulieren, 
oder eben ein BAS-Signal für nen Fernseher zu erzeugen.
Ich bin ja auch total Plemplem wenn ich mit einem FPGA Audio mache 
obwohl jeder DSP für die Hälfte an Euros das doppelte an MIPS/MFLOPS 
hat.
Trotzdem macht es Spaß, man lernt was dabei und man freut sich nachher.
(Selbst wenns im Falle des Audio-FPGAs die Freude hauptsächlich bei mit 
selbst liegt, aber das ist es mir wert)

Ich glaube man nennt sowas : Meet the Challenge ... Oder anders gesagt : 
Wenns Spaß macht ...


@A.K.

>Kennst du das Thornton-Buch (PDF) über die CDC6600?

Ne leider nicht. Hast du vllt nen Link dazu ?
Hatte mir mal die Schaltpläne von dem Apollo-11 Rechner angeguckt. Und 
bin doch echt erstaunt wie nahe das Dingen einem heutigen 
Mikrocontroller kommt.

von (prx) A. K. (prx)


Lesenswert?


von 900ss (900ss)


Lesenswert?

Frank K. schrieb:
> Ihr habt doch ein Rad ab!

Ich freue mich über diese losen Räder. Ehrlich! Schade dass du sie nicht 
hast.

Frank K. schrieb:
> ich weiss, wovon ich rede.

Mag sein, aber leider weisst nicht du nicht, wovon hier geredet wird. 
Nicht von einer aktuellen Technik, sonderm dem Schwelgen in 
Vergangenheit und deren Technik. Fertig kaufen kann man alles. Dann wäre 
jedes Hobby, wo selbst gebaut wird dummes Zeug. Alles kann man billiger 
und fertig kaufen. #gähn#

Das Z80-Zeugs was du erwähnst liegt hier auch rum. Weiss also was du 
meinst. Ist aber nicht das, wovon hier gesprochen wird.

von Reinhard Kern (Gast)


Lesenswert?

900ss D. schrieb:
> ... Fertig kaufen kann man alles. Dann wäre
> jedes Hobby, wo selbst gebaut wird dummes Zeug. Alles kann man billiger
> und fertig kaufen. #gähn#

Ist aber Trend. Ich habe noch für Segelflugzeuge Spanten zugesägt und 
mit Seide bespannt, die Enkel meines Nachbarn haben gestern auch ein 
Segelflugzeug bekommen, auspacken, Flügel reinstecken, fliegt (nicht so 
gut wie meine, muss ich feststellen). Die Kinder erwarten das auch so, 
deswegen gibt es keine Bausätze mehr. Der PC muss eben auch zum 
Geburtstag betriebsfertig dastehen.

Gruss Reinhard

von Christian B. (casandro)


Lesenswert?

Frank K. schrieb:

> Eben nicht. Der wesentliche Aufwand, nämlich die CPU-Emulation entfällt.

Die CPU-Emulation ist reine Software, das muss somit nur einmal gemacht 
werden.

Natürlich stimme ich Dir aber zu, dass wir eine Schraube locker haben. 
Für uns ist Elektrotechnik ein wichtiger Teil in unserem Leben, und 
willkommener Ausgleich zum langweiligen Beruf.

von 900ss (900ss)


Lesenswert?

karadur schrieb:
> Habe selbst
> unter CP/M meine Diplomarbeit

Was ich vergass, hab ich übrigens auch ;-)
Es war allerdings ein geklontes CP/M und hiess ZDOS und lief auf einem 
Z-80-System auf ECB-Bus Basis von Fa. Janich & Klass. Die Firma gibt es 
sogar noch, wie ich gerade festgestellt habe. Und das System hatte zwei 
8"-Lauferke. :-)

von Hauke S. (hauke)


Lesenswert?

@Peter Sieg

Sorry, aber es geht hier nicht um das Einfachste oder Schnellste.
Es geht um die Herausforderung. Sicher es wäre einfacher auf dem PC 
einen fertigen Z80 Emulator anzuwerfen und gut. Aber was hat man davon?
Es ist für mich halt interessanter eine Rechnerarchitektur auf einer 
anderen abzubilden. In diesem Falle lernt man nämlich über beide etwas.

Genauso ist es vermutlich bei den Cracks, die heutzutage noch Demos für 
den C64 machen (teilweise mit Effekten die man vor 15 Jahren nicht 
einmal einem PC zugetraut hätte) Wenn man dort sagen würde: "wieso nehmt 
ihr nicht einen PC mit 3d Karte, der ist doch viel schneller"
Dann würde man vermutlich aus dem Saal geworfen werden.


P.S.
Zur Zeit code ich an einer 6502 Emu (mit RAM, ROM, Dezimalmodus und 
illegalen Opcodes) und kämpfe mit teilweise wiedersprüchlichen Dokus.

von Karl H. (kbuchegg)


Lesenswert?

Christian Berger schrieb:

> Natürlich stimme ich Dir aber zu, dass wir eine Schraube locker haben.

Full ACK

Der eine oder andere hat vielleicht im Platinenforum den Thread über die 
'verrückteste Platine' gesehen. Ein Eintrag hat einen Link

http://users.monash.edu.au/~ralphk/burroughs.html

Ich hab mich spontan entschlossen, dass mein nächster ATMega-Rechner ein 
Frontpanel braucht :-)

von (prx) A. K. (prx)


Lesenswert?

Wobei Burroughs es sich noch leisten konnte, die Kabel einigermassen zu 
sortieren und mit passender Länge zu verlegen. Bei der Cray-1 ging das 
nicht mehr. Dort sind die Kabel nach passender Verzögerungszeit 
dimensioniert. Dementsprechend sieht es drin aus:
http://www.digibarn.com/collections/systems/crays/cray1/portrait/index.html

Beim Verkabeln:
http://www.digibarn.com/collections/systems/crays/cray-book/ccw7.jpg
http://www.digibarn.com/collections/systems/crays/cray-book/ccw9.jpg

von Yalu X. (yalu) (Moderator)


Lesenswert?

Frank K. schrieb:
> Ihr habt doch ein Rad ab!

Auch wenn ich das alles nicht so eng sehe, kann ich Franks Worte doch
ein Bisschen verstehen. Warum?

Grundsätzlich bin auch ich ein Freund von solchen "Radabprojekten" (im
Folgenden RAPs genannt). Der entscheidende Unterschied zwischen einer
industriellen Produktentwicklung und einem RAP liegt in meinen Augen im
Folgenden:

Industriell

Bei einer industriellen Produktentwicklung wird versucht, sehr viele
verschiedene Kriterien wie

- Entwicklungsaufwand
- Materialkosten
- Fertigungskosten
- benötigte Fertigungseinrichtungen
- Baugröße
- Energieverbrauch
- seltener auch "Restro"-Aspekt (Beschränkung auf Materialien und/oder
  Aussehen und/oder Fertigungsverfahren aus der Vergangenheit)
- ...

sinnvoll zu gewichten und das Produkt so zu optimieren, dass die
Kriterien in Summe möglichst gut erfüllt sind und somit mit dem Produkt
ein möglichst hoher Gewinn erzielt wird.

RAP

Bei einem RAP wird typischerweise eine radikal andere Gewichtung dieser
Kriterien vorgenommen und versucht, ein "Produkt" zu entwickeln, das
nach dieser Gewichtung optimal ist. Im häufig auftretenden Extremfall
wird nur ein einzelnes dieser Kriterien mit einem Gewicht >1 versehen,
während alle anderen mit 0 gewichtet sind, also völlig unberücksichtigt
bleiben.

Gerade dieser selbstdefinierte Bewertungsmaßstab frei von den Vorgaben
irgendwelcher Marketingabteilungen und anderen externen Zwängen macht
den Reiz von RAPs aus.

Eine Gewinnerzielungsabsicht besteht bei einem RAP üblicherweise nicht.
Stattdessen steht der Coolness-Faktor im Vordergund, der meist darin
besteht, sagen zu können: "Meine Entwicklung stellt hinsichtlich des
Kriteriums x alles, was es zu kaufen gibt, in den Schatten.

Beispiele:
1
—————————————————————————————————————————————————————————————————————
2
"Produkt"                      Gewichtung > 0     Gewichtung = 0
3
—————————————————————————————————————————————————————————————————————
4
Web-Server im SO-6-Gehäuse     Baugröße           Speicherkapazität
5
                               Materialkosten     Geschwindigkeit
6
7
Soft-USB                       Baugröße           Geschwindigkeit
8
                               Materialkosten     Entwicklungsaufwand
9
10
Oszi aus Schrottteilen         Materialkosten     Bandbreite
11
(alter Fernseher usw.)                            Messgenauigkeit
12
                                                  Entwicklungsaufwand
13
14
Relaisrechner                  Restro-Aspekt      Geschwindigkeit
15
                                                  Speicherkapazität
16
                                                  Entwicklungsaufwand
17
—————————————————————————————————————————————————————————————————————

Bei dem CP/M auf dem ATmega fehlt nach meinem Geschmack ein wenig dieser
Optimierungsgedanke, da der Einsatz des ATmega im Vergleich zu einem
Z80-kompatiblen Mikrocontroller bzgl. der o.g. Kriterien kaum Vorteile
bringt. Vielleicht habe ich aber auch nur ein wichtiges Kriterium
vergessen ;-)

Ok, es gibt noch einen weiteren Aspekt, weswegen man ein Hobbyprojekt
beginnt, nämlich der Lerneffekt bzw. Erkenntnisgewinn. Nur hätte ich
Hemmungen, dafür so viel Zeit in ein Projekt zu stecken, wo ich
vielleicht ähnlich viel in einem anderen Projekt lernen könnte, das
weniger zeitaufwendig ist und/oder ein nützlicheres Ergebnis liefert.

Aber die persönlichen Zielsetzungen sind eben verschieden. Deswegen läge
mir nichts ferner, als jemandem dieses Projekt auszureden. Auf jeden
Fall wünsche ich allen, die sich damit beschäftigen, viel Erfolg!

von Ronny M. (hobby-coder)


Lesenswert?

Hat jemand diesen CP/M Rechner mit einem stärkeren Atmega (z.B. Atmega 
32) gebaut? Falls ja, stellt jener mal den Schaltplan Online? Und, falls 
dieser das auch noch auf Lochraster aufgebaut hat, hätte ich gerne 
einmal ein Foto :)

von Karl H. (kbuchegg)


Lesenswert?

Ronny Minow schrieb:
> Hat jemand diesen CP/M Rechner mit einem stärkeren Atmega (z.B. Atmega
> 32) gebaut?

Der ist ... ähm .... auch nicht grossartig anders.

Und .... hmmm ... wie soll ich sagen .... ein Mega32 bringt dir bei 
diesem Projekt gar nichts.
Der Hauptunterschied zwischen dem Mega88 und dem Mega32 besteht darin, 
dass der Mega32 mehr Flash hat. Nun ist dieses Projekt aber auf Flash 
gar nicht angewiesen. Flash ist mehr als genug brachliegend.

von Ronny M. (hobby-coder)


Lesenswert?

Karl heinz Buchegger schrieb:
> Ronny Minow schrieb:
>> Hat jemand diesen CP/M Rechner mit einem stärkeren Atmega (z.B. Atmega
>> 32) gebaut?
>
> Der ist ... ähm .... auch nicht grossartig anders.
>
> Und .... hmmm ... wie soll ich sagen .... ein Mega32 bringt dir bei
> diesem Projekt gar nichts.
> Der Hauptunterschied zwischen dem Mega88 und dem Mega32 besteht darin,
> dass der Mega32 mehr Flash hat. Nun ist dieses Projekt aber auf Flash
> gar nicht angewiesen. Flash ist mehr als genug brachliegend.

Zum Flash: Kann man den freien Flash für ein Dateisystem nutzen? Ich 
denke, der virtuelle CP/M / der Nutzer wird sich freuen wenn er ein paar 
Programme auf dem Flash ablegen kann.

Und, afaik hat der Atmega32 etwas mehr Ram, als der Atmega88. Oder, bin 
ich da falsch informiert...?

von (prx) A. K. (prx)


Lesenswert?

Ronny Minow schrieb:

> Und, afaik hat der Atmega32 etwas mehr Ram, als der Atmega88. Oder, bin
> ich da falsch informiert...?

Und was hast du davon? Für den simulierten Speicher ist das zu wenig und 
für den Simulator zu viel. Erst beim Mega162 und externem SRAM an Stelle 
des DRAM wird das interessant.

von 900ss (900ss)


Lesenswert?

Yalu X. schrieb:
> Gerade dieser selbstdefinierte Bewertungsmaßstab frei von den Vorgaben
> irgendwelcher Marketingabteilungen und anderen externen Zwängen macht
> den Reiz von RAPs aus.

Warum soll ich mein Hobby so rational betrachten?
Fast alle Hobbies sind rational betrachtet ziemlicher Blödsinn. Kosten 
nur Geld, kommt kaum was Sinnvolles bei rum.

Ich betreibe mein Hobby #nur# weil es Spass macht.
Ich kann nicht alles nur rational betrachten und jeder hat sicher 
irgendwo seinen Schwerpunkt bei Freizeitbeschäftigung, wo die Frage nach 
dem rationalen Sinn berechtigt ist.

von 900ss (900ss)


Lesenswert?

A. K. schrieb:
> Bei der Cray-1 ging das
> nicht mehr. Dort sind die Kabel nach passender Verzögerungszeit
> dimensioniert. Dementsprechend sieht es drin aus:

Uff, echt beeindruckende Fotos.

von Ronny M. (hobby-coder)


Lesenswert?

A. K. schrieb:
> Ronny Minow schrieb:
>
>> Und, afaik hat der Atmega32 etwas mehr Ram, als der Atmega88. Oder, bin
>> ich da falsch informiert...?
>
> Und was hast du davon? Für den simulierten Speicher ist das zu wenig und
> für den Simulator zu viel. Erst beim Mega162 und externem SRAM an Stelle
> des DRAM wird das interessant.

Den simulierten Speicher müsste man von 1KB auf 2KB, oder etwas 
dazwischen erweitern können... Was dem "zuviel Ram für den Simulator" 
selbst angeht, sag ich nur dazu das man mit dem Emulator nicht ganz so 
schnell an die grenzen stößt. Evtl. kann man im freien Ram noch ein 
Keyboard Treiber, oder auch ein VGA/ FBAS Treiber rein quetschen... 
Aber, das müsste mal jemand testen der etwas mehr Erfahrung im Umgang 
mit den Atmega µC's hat...

von (prx) A. K. (prx)


Lesenswert?

Ronny Minow schrieb:

> Den simulierten Speicher müsste man von 1KB auf 2KB, oder etwas
> dazwischen erweitern können...

Der ist sowieso schon 128KB gross (256Kx4). Das SRAM im Controller wird 
offenbar nur für den Stack des Simulators und als SD-Card Puffer (512B) 
verwendet, da sind also noch >>400B Luft.

von Ronny M. (hobby-coder)


Lesenswert?

A. K. schrieb:
> Ronny Minow schrieb:
>
>> Den simulierten Speicher müsste man von 1KB auf 2KB, oder etwas
>> dazwischen erweitern können...
>
> Der ist sowieso schon 128KB gross (256Kx4). Das SRAM im Controller wird
> offenbar nur für den Stack des Simulators und als SD-Card Puffer (512B)
> verwendet, da sind also noch >>400B Luft.

Hmmm... Bei den verbleibenden ca. 400b kann man wohl nur ein Keyboard 
Treiber (für PS2) und einen einfachen FBAS + Zeichengenerator einsetzen. 
Wobei es da aber sicherlich sehr eng mit dem freien Ram wird...

von Karl H. (kbuchegg)


Lesenswert?

Ronny Minow schrieb:

> Hmmm... Bei den verbleibenden ca. 400b kann man wohl nur ein Keyboard
> Treiber (für PS2) und einen einfachen FBAS + Zeichengenerator einsetzen.
> Wobei es da aber sicherlich sehr eng mit dem freien Ram wird...

Jetzt muss ich mal nachfragen.
Hast du schon einmal ein Programm für einen MegaXX (egal welcher) 
geschrieben.
Mir scheint dir ist überhaupt nicht klar, dass Flash und SRAM 2 Paar 
Schuhe sind.
Programme stehen im Flash
Daten stehen im SRAM

Ein Keyboarddriver ist ganz klar ein Programm, kommt also ins Flash 
(sofern er nicht von der virtuellen Z80 abgearbeitet wird, aber so 
dämlich wird ja dann doch wohl keiner sein)

Und ja, es gibt eine Ausnahme: Daten die sich nicht ändern, also als 
Konstante anzusehen sind, kann man auch im Flash parken.

von Ronny M. (hobby-coder)


Lesenswert?

Karl heinz Buchegger schrieb:
> Ronny Minow schrieb:
>
>> Hmmm... Bei den verbleibenden ca. 400b kann man wohl nur ein Keyboard
>> Treiber (für PS2) und einen einfachen FBAS + Zeichengenerator einsetzen.
>> Wobei es da aber sicherlich sehr eng mit dem freien Ram wird...
>
> Jetzt muss ich mal nachfragen.
> Hast du schon einmal ein Programm für einen MegaXX (egal welcher)
> geschrieben.
Für einem MegaXX noch nicht, da liegt Dein Verdacht richtig.

> Mir scheint dir ist überhaupt nicht klar, dass Flash und SRAM 2 Paar
> Schuhe sind.
Ich muss sicherlich noch vieles lernen. Aber, der Unterschied ist mir 
schon bekannt.

> Programme stehen im Flash
> Daten stehen im SRAM
>
> Ein Keyboarddriver ist ganz klar ein Programm, kommt also ins Flash
> (sofern er nicht von der virtuellen Z80 abgearbeitet wird, aber so
> dämlich wird ja dann doch wohl keiner sein)
Mir ging es darum, das der Treiber ja irgendwo her seine Daten bekommen 
muss, die dieser zu verarbeiten hat. Ein Zeichenpuffer für, sagen wir 20 
Zeichen + evtl. benötigte "Meta" Codes (Alt, Shift usw.) finde ich sehr 
Hilfreich. Das ganze nimmt schon ein paar Bytes vom freiem Ram weg. Die 
Codetable kann man ja im Flash ablegen, da sie ja nur einmalig erzeugt 
wird.

Die visuelle Ausgabe, per FBAS, VGA or whatever, braucht dagegen schon 
einige Bytes an Ram... Der Treiber muss sich ja zur Laufzeit die 
auszugebenen Daten aus dem Ram holen....

Ok, vieleicht ist meine Denkweise aber auch im Grundsatz falsch. Falls 
ja, korrigiert mich :)

von Karl H. (kbuchegg)


Lesenswert?

Ronny Minow schrieb:

> Mir ging es darum, das der Treiber ja irgendwo her seine Daten bekommen
> muss, die dieser zu verarbeiten hat. Ein Zeichenpuffer für, sagen wir 20
> Zeichen + evtl. benötigte "Meta" Codes (Alt, Shift usw.) finde ich sehr
> Hilfreich.

OK.
20 Bytes benötigt - 400 Bytes SRAM frei
20 Bytes benötigt - 400 Bytes SRAM frei

was sagt uns das?

> Die visuelle Ausgabe, per FBAS, VGA or whatever, braucht dagegen schon
> einige Bytes an Ram... Der Treiber muss sich ja zur Laufzeit die
> auszugebenen Daten aus dem Ram holen....

Ähm.
Der Mega ist auch so schon mit der Z80 Emulation ausgelastet. Willst du 
dem wirklich noch die Generierung eines Videosignals aufhalsen?

von Kluchscheißernder N. (kluchscheisser)


Lesenswert?

Kalle Schrob:
> Ähm.
> Der Mega ist auch so schon mit der Z80 Emulation ausgelastet. Willst du
> dem wirklich noch die Generierung eines Videosignals aufhalsen?

Nunja, er hat's noch nicht gemacht und kann es noch nicht beurteilen. 
Sei also nicht so streng... ;-)

von Peter Sieg (Gast)


Lesenswert?

Na schön, das hier doch einiges an Interesse ist.. ;-)
(Auch - oder gerade weil wir ein Rad abhaben)
Oder wie schon im deutschen Liedgut steht, wer nicht verrückt ist, der 
ist
nicht normal..

---

Nun jeder ist ja relativ frei, das Projekt zu erweitern.. ist ja GPL3..
Für mich persönlich, ist die serielle+VT100 Anbindung völlig ok.. 
PS/2+BAS
sind mir nicht so wichtig.. wenn es aber doch jemand macht. prima!

Wichtiger wäre zuerst einmal ein Ausbau der unterstützen Opcodes..

Wenn da mal auch mehr/Z80 Programme laufen etc.. mache ich auch gerne 
ein
Platinen-Layout mit Eagle ;-) Oder ganz abgefahren in SMD mit Micro-SD 
in
Streichholzschachtelgröße. ;-)

Peter

von Ronny M. (hobby-coder)


Lesenswert?

Peter Sieg schrieb:
> Na schön, das hier doch einiges an Interesse ist.. ;-)
> (Auch - oder gerade weil wir ein Rad abhaben)
> Oder wie schon im deutschen Liedgut steht, wer nicht verrückt ist, der
> ist
> nicht normal..

Ganz Deiner Meinung :)

>
> ---
>
> Nun jeder ist ja relativ frei, das Projekt zu erweitern.. ist ja GPL3..
> Für mich persönlich, ist die serielle+VT100 Anbindung völlig ok..
> PS/2+BAS
> sind mir nicht so wichtig.. wenn es aber doch jemand macht. prima!

Daran kann ich ja mal etwas basteln....
>
> Wichtiger wäre zuerst einmal ein Ausbau der unterstützen Opcodes..
Man sollte erstmal testen, welche CP/M Software bereits läuft. Fehlen 
Funktionen bzw. OpCodes, kann man diese sicher immer noch nachrüsten...
>
> Wenn da mal auch mehr/Z80 Programme laufen etc.. mache ich auch gerne
> ein
> Platinen-Layout mit Eagle ;-) Oder ganz abgefahren in SMD mit Micro-SD
> in
> Streichholzschachtelgröße. ;-)
>
> Peter

Ich würde eher ein Board nehmen, was man "auf dem Küchentisch" aufbauen 
kann. Ähnlich den Hive - Retrostyle Computer Projekt ( 
http://hive-project.de/ ) ...

---

Ich baue das Board gerade, mit LochMaster 3.0, vituel auf. Wer Shots 
oder auch die Dateien aus LochMaster haben mag, einfach melden :) Ach 
ja, ich benutze einen Atmega32 für den virtuellen Aufbau....

von Christian B. (casandro)


Lesenswert?

Hmm, eventuell wäre es auch sinnvoll eine PDP-11 zu emulieren. Die 
Betriebssysteme darauf wurden im Quellcode ausgeliefert, und es gab viel 
Software dafür.

von Sigint 112 (sigint)


Lesenswert?

Ich wollte knur kurz den Thread wieder nach oben bringen. Nebenbei finde 
ich das ein wirklich schönes Projekt, was ich bei nächster Gelegenheit 
testen und erweitern möchte. Wenn man einen zweiten AVR für Tastatur und 
Video-Output nimmt, dann hat man ein schönes System.

Gruß,
  SIGINT

von Peter Sieg (Gast)


Lesenswert?

@SIGNINT: Prima! Inzwischen kann ich das diskimage unter win32 ändern.. 
Habe auch ein othello gefunden, das läuft. Und ein mbasic für 8080. 
Läuft zwar, aber Sprungziele werden beim load zu 00000??

Wird der z80.asm unter AVR Studio assembliert?
Wollte mal versuchen, von 20 auf 32MHz umzustellen.. dazu muß ich sicher 
die
Geschwindigkeit der RS232 Schnittstelle umstellen..?

Peter

von Karl H. (kbuchegg)


Lesenswert?

Peter Sieg schrieb:
> @SIGNINT: Prima! Inzwischen kann ich das diskimage unter win32 ändern..
> Habe auch ein othello gefunden, das läuft. Und ein mbasic für 8080.
> Läuft zwar, aber Sprungziele werden beim load zu 00000??

Wenn du diese Emulation benutzt:
Es sind noch nicht alle Opcodes des Z80 unterstützt.

Speziell die CB und ED Schiene ist noch gar nicht vorhanden.
Und ob bei den implementierten Opcodes die Status Flags überall richtig 
nachgezogen werden, hab ich nicht näher untersucht.

von Peter Sieg (Gast)


Angehängte Dateien:

Lesenswert?

Jup. Bin leider auch kein 8080/Z80 Kenner.. da müßte ich mich erst 
einarbeiten.. nun, zumindest kann ich den Quelltext mit AVR Studio 4
assemblieren (dabei auch gleich die Baudrate kalkulieren lassen..) und
das Ergebnis läuft..

Werde das mal mit ATmega88PA und 32MHz anstatt 20MHz probieren.. dabei
sollte auch der DRam Refresh weiter runter können.. mal schauen, wie
viel 'Geschwindigkeit' das bringt..

Dann wäre da auch noch die Frage, warum das Nibble an D0-D3 nicht auch 
ein
Nibble an einem Port ist..

Nun Ja.. zu allem 'Überfluß' hier auch noch ein Platinenlayout ;-)

Peter

von Joerg W. (joergwolfram)


Lesenswert?

Ich habe mir den Code mal angesehen und denke, dass die DRAM-Anbindung 
zwar recht minimalistisch, dafür aber auch arg langsam ist. Grob 
geschätzt komme ich z.B. auf über 160 Takte bei der dram_read Routine. 
Wenn man einen 40-poligen Controller (z.B. Meag16) und zwei DRAMs nimmt, 
D0-D7 an Port A, A0-A7 an Port C und die Steuersignale an Port D, sollte 
das wesentlich schneller gehen. Letztendlich müssen nur die 
entsprechenden Routinen ausgetauscht werden. Ein Beispiel wäre:
1
dram_read:      cli                     ;1 disable interrupt
2
                ldi     ZL,0x7F         ;1 RAS
3
                ldi     ZH,0x1F         ;1 RAS + CAS + OE
4
                out     PORTC,adrh      ;1
5
                out     PORTD,ZL        ;1 RAS active
6
                out     PORTC,adrl      ;1
7
                out     PORTD,ZH        ;1 RAS + CAS + OE active
8
                ldi     ZL,0x9F         ;1 RAS inactive
9
                out     PORTD,ZL        ;1 CAS + OE (hidden refresh)
10
                in      temp,PINA       ;1 get data
11
                out     PORTD,ZH        ;1 RAS + CAS + OE
12
                ldi     ZH,0xFF         ;1
13
                out     PORTD,ZL        ;1 only RAS
14
                out     PORTD,ZH        ;1 inhibit
15
                sei                     ;1 enable interrupt
16
                ret                     ;4 end
Bringt Beschleunigung um etwa Faktor 7 beim Lesen aus dem Speicher.

Jörg

von Peter Sieg (Gast)


Lesenswert?

Hi Jörg.

Das wäre super!
Da meine Kenntnisse in AVR Assembler eigendlich nicht vorhanden sind ;-)
bleibe ich vorerst einmal beim aktuellen Aufbau. Hier möchte ich noch 
mal
die Takterhöhung auf 32MHz und die Reduzierung des DRam-Refreshs 
probieren.
Und der Warmstart muß auch überarbeitet werden (hängt einfach).
Inzwischen kann ich diskimage unter win32 mit den cpmtools ändern und
mit BDS-C übersetzte Programme laufen auch unter avr-cpm ;-)

Zu einem anderen Aufbau sehe ich das aber letztlich genauso.. was
ein 'fauler' Kompromiss ist und viel Rechenpower kostet muß durch
etwas besseres ersetzt werden.. Da kann man beim Ram auch z.B über SRAM
nachdenken.. dann braucht man keinen Refresh mehr..
Wäre super, wenn hier genügend zusammen kommen, um daraus einen kleinen, 
schnuckeligen und brauchbaren CP/M Rechner zu basteln..

Peter

von Ronny M. (hobby-coder)


Lesenswert?

@ Peter Sieg: Ich habe mir Dein Projekt auf Deiner Homepage angesehen. 
Als erstes: Das ist ein sehr interissantes Projekt. Nicht zuletzt 
deshalb, weil mir CP/M eigendlich unbekannt ist. Das soll mich aber 
nicht daran Hindern, Dein Projekt aufzubauen und mit zu Entwickeln.

Was mir für den Aufbau fehlt, ist ein Z80 Assembler. Wenn ich das Paket 
zum erstellen der Image Disk richtig verstehe, brauche ich diesem um die 
Software entsprechend übersetzen zu können. Wo bekomme ich diesem 
Assembler her...?

@Joerg Wolfram: Du hattest einmal einen einfachen Basic Computer mit 
einem Atmega8/88 aufgebaut. Könnte man die Umgebung für den TV Out/ 
FBAS, sowie den PS2 Controller an den CP/M Rechner anbringen? Falls 
notwendig, über einen 2. Atmega8...

von kruemeltee (Gast)


Lesenswert?

Sowas gibt es auch mit dem Propeller:

http://forums.parallax.com/forums/default.aspx?f=25&m=332138

TV, VGA, PS/2, SD-Karte, ... mit CPM2.2 oder MPM

Der Minimal-Aufbau ist für unter 30 Euro zu machen, wenn man alle 
Teile kaufen muss.

Das einfachste Board, wäre ein abgespecktes Dracbalde (nur RAM, PS/2 und 
VGA/TV, SD, keine weiteren IOs usw.)

von Ronny M. (hobby-coder)


Lesenswert?

kruemeltee schrieb:
> Sowas gibt es auch mit dem Propeller:
>
> http://forums.parallax.com/forums/default.aspx?f=25&m=332138
>
> TV, VGA, PS/2, SD-Karte, ... mit CPM2.2 oder MPM
>
> Der Minimal-Aufbau ist für unter 30 Euro zu machen, wenn man *alle*
> Teile kaufen muss.
>
> Das einfachste Board, wäre ein abgespecktes Dracbalde (nur RAM, PS/2 und
> VGA/TV, SD, keine weiteren IOs usw.)

Auch, wenn der Propeller µC schon klasse ist, so denke ich sollten wir 
den Atmega µC verwenden.

Ich selbst habe ein Hive -Retrosytle Computer, der 3 Propeller µC's 
verwendet. Der Hive ist ein Klasse Computer. Man kann sicher auch CP/M 
drauf laufen lassen, was auch in Entwicklung ist. Hier geht es aber um 
CP/M für den Atmega, nicht für den Propeller µC.

---

@Peter Sieg: Welche Software hast Du schon auf dem Projekt zum leben 
erwecken können?

von bix (Gast)


Lesenswert?

Joerg Wolfram schrieb:
> Wenn man einen 40-poligen Controller (z.B. Meag16) und zwei DRAMs nimmt

Vielleicht könnte man einen AVR 8515 oder 8535 nehmen, die haben ein 
SRAM-Interface.

von frank (Gast)


Lesenswert?

bix schrieb:
> Vielleicht könnte man einen AVR 8515 oder 8535 nehmen, die haben ein
> SRAM-Interface.

Soweit ich das überblicke: 8515 ja, 8535 nein.
Ist der 8515 eigentlich der einzige mit SRAM-Interface? In der 
Vergleichstabelle von Atmel ist selbiges leider nicht aufgeführt.
frank

von Peter Sieg (Gast)


Lesenswert?

@Ronny Minor: Habe ein paar Spiele, die laufen: Mastermind, TicTacToe, 
Othello, Stone.. kommt ggf. noch Packman mit VT52 Steuerung dazu.. evtl. 
noch 4-gewinnt..

Peter

von Roland F. (opale)


Lesenswert?

frank schrieb:

> Ist der 8515 eigentlich der einzige mit SRAM-Interface? In der
> Vergleichstabelle von Atmel ist selbiges leider nicht aufgeführt.
> frank

Der ATmega162 hat "Up to 64K Bytes Optional External Memory Space"

Gruß
Roland

von Ronny M. (hobby-coder)


Lesenswert?

Peter Sieg schrieb:
> @Ronny Minor: Habe ein paar Spiele, die laufen: Mastermind, TicTacToe,
> Othello, Stone.. kommt ggf. noch Packman mit VT52 Steuerung dazu.. evtl.
> noch 4-gewinnt..
>
> Peter

Einige Spiele sind schon einmal ein Anfang. Wie sieht es mit typischer 
CP/M Software aus? Läuft z.B. DBase (gab es das für CP/M überhaupt...?) 
?

---

Wer hat diesem Computer schon aufgebaut? Ach ja, gibt es schon Ideen für 
ein Video Ausgang? Oder anders: könnte man an Herrn Wolframs Basic 
Computer mit Atmega8/88 den DRAM drann hängen und somit eine Symbiose 
aus beiden Computern machen?

von CPM-Gerümpelrechner (Gast)


Lesenswert?

... Auch, wenn der Propeller µC schon klasse ist, so denke ich sollten
wir den Atmega µC verwenden. ...

Warum nicht gleich eine Zuse 3 (fröhlich klappern die Postrelais)? Warum 
überhaupt so etwas einfaches wie DRAM?  64 KByte als Magnetkernspeicher 
- das nenne ich eine Aufgabe?

von Ronny M. (hobby-coder)


Lesenswert?

CPM-Gerümpelrechner schrieb:
> Warum nicht gleich eine Zuse 3 (fröhlich klappern die Postrelais)? Warum
> überhaupt so etwas einfaches wie DRAM?  64 KByte als Magnetkernspeicher
> - das nenne ich eine Aufgabe?

Hast Du eine Z3 gebaut? Wenn ja, zeig mal her :)

von Peter Sieg (Gast)


Lesenswert?

@Ronny Minow: dbase gibt es für CP/M..
Generell gilt vorerst: NUR 8080 CPU - d.h Programme, die unter CP/M-80 
laufen haben gute Changen..

Aber: Die Emulation hat SICHER noch Fehler! Z.B MBASIC4.5 für CPM-80 
läuft ersteinmal.. Interaktiv, also z.B print 2+4 (=6) geht.. aber 
Programmlauf geht nicht, weil alle Variablen zu 00000 evaluieren.. keine 
Ahnung warum!
Im AltairSIMH Emulator mit Z80 CPU ist alles ok..

Die vielen anderen Basic Versionen habe ich noch nicht getestet..

Es gibt generell sehr viel alte Software für CP/M-80..
http://www.z80.eu/
http://www.retroarchive.org/cpm/

Deswegen wäre/ist meine Prämisse:
1. Noch weitere Basic Interpreter testen
2. Noch eine paar weitere Spiele compilieren mit BDS-C
3. Warmstart implementieren (hängt da aktuell einfach)
4. Das ganze mal mit 32MHz laufen lassen (88PA)
5. 8080 Code prüfen und ggf. Fehler beseitigen
---
6. Evtl. andere Hardware mit 8-bit SRam etc. etc
7. Z80 Opcodes implementieren

Generell denke ich reicht es mir, wenn ich 1-5 erreicht habe..
bin aber allen Neuentwicklungen/Verbesserungen offen gegenüber..
kann man/das Projekt ja nur von profitieren..

---

Bezüglich des benutzten z80asm.. keine Ahnung, welcher das ist.
Da sollte man den Entwickler: Sprite_TM fragen.. ich würde den gerne
auch unter win32 haben.. bisher ändere ich das vorhandenen diskimage
mit cpmrm und cpmcp..

Peter

von Ronny M. (hobby-coder)


Lesenswert?

@Peter Sieg: Danke für die Links. Ich habe mich da mal umgesehen. Wenn 
ich dazu komme, werde ich mal "Tiny C", "Pascal" und einen Assembler auf 
dem Computer laufen lassen. Aber, ersteinmal muss ich den zusammen 
löten. Die Bauteile hierfür dürften in einigen Tagen bei mir sein.

Ach ja, thx für das Pin Layout des SRam's, das Du auf Deiner Homepage 
veröffendlicht hast.

von Christian B. (casandro)


Lesenswert?

Roland F. schrieb:
> Der ATmega162 hat "Up to 64K Bytes Optional External Memory Space"

Das Interface wäre sogar richtig schnell. Jedoch gibts Probleme mit dem 
untersten Kilobyte.

von (prx) A. K. (prx)


Lesenswert?

Christian Berger schrieb:

> Das Interface wäre sogar richtig schnell. Jedoch gibts Probleme mit dem
> untersten Kilobyte.

Stets 1K draufaddieren und das oberste KB nicht verwenden.

von Christian B. (casandro)


Lesenswert?

Dann hat man allerdings Probleme mit dem obersten Kilobyte. :)

von (prx) A. K. (prx)


Lesenswert?

Christian Berger schrieb:

> Dann hat man allerdings Probleme mit dem obersten Kilobyte. :)

Wer definiert, dass es dies geben muss? Unten weglassen geht bei 
8080/Z80 nicht, oben schon.

von Peter Sieg (Gast)


Lesenswert?

Ich weiß, das ist verrückt ;-)
Ich denke ernsthaft darüber nach 10 Platinen anfertigen zu lassen ;-)
Aus dem forum64 gibts zumindest schon einmal noch 2 Interessenten außer 
mir..
da ich auch mind. 2 für mich nehme wären es schon 4.. wenn wir noch ein 
paar
finden könnte das wirklich klappen.. unter 10 macht es keinen Sinn..
ich rechne mit ca. 9-10€/Platine. SD Slot kostet 3€. Versand ca. 1,50€ 
(Post). Natürlich kann man das auch auf LR aufbauen.. aber mir fertiger 
Platine wird es doch ein wenig einfacher (ist durchkontaktiert mit 
Lötstopp).
Ach ja, Platine siehe weiter oben.. RS232 Wandler will ich nicht drauf 
haben.
Und 3,3V Netzteile gibts bei Pollin..

Peter

von Uhu U. (uhu)


Lesenswert?

Da ist doch Platz für einen Regler drauf - dann könnte man auf 
vorhandene Wandwarzen zurückgreifen...

von Ronny M. (hobby-coder)


Lesenswert?

@PeterSieg: ich bin #2 (Posting #18) im Board drüben...

von Sigint 112 (sigint)


Angehängte Dateien:

Lesenswert?

@Peter: Lohnt es sich für so eine kleine Schaltung eine Platine fertigen 
zu lassen?!? Ich fände es besser erst ein vollständiges System, mit 
IO-Hardware (TV-Out, Keyboard, Sound?!, etc.) zu entwickeln und dann die 
Platinen fertigen zu lassen. Ich glaube, die meisten würden gerne einen 
kompletten CP/M Rechner haben, den man ohne externe Hardware betreiben 
kann.

Ich hab schon ein paar Ideen, was man mit dem System machen könnte:
  Portieren eines AVR-Assemblers auf CP/M-80
  CP/M-80 Software zum flashen von AVRs
  Grafik-LCD am System anbinden
  mehrer Diskettenimages auf SD-Karte
  einfache Soundausgabe per PWM (DMA,IRQ?!)

Mir ist klar, daß dies noch viel Arbeit ist, aber ich Glaube es könnte 
sich lohnen.

Ich hab schonmal angefangen auf dem PC einen kleinen Z80-Emulator zu 
basteln, um mich in CP/M ein zu arbeiten. Leider funktioniert das aber 
noch nicht so, wie ich es möchte.

Gruß,
  SIGINT

von Peter Sieg (Gast)


Angehängte Dateien:

Lesenswert?

@SIGINT: Nun, eine 10ner Auflage der aktuellen Hardware steht einer 
späteren Auflage eines erweiterten Systems ja nicht im Wege..
(Ich bin nun mal Minimalist ;-) )

Schau doch mal, ob Jörg Wolfram auch noch Interesse hat an einer 
Erweiterung
zum vollwertigen CP/M Rechner mitzuarbeiten.. Evtl. finden sich hier 
weitere
Mitstreiter.. kann man die Entwicklung ggf. aufteilen..
Wäre wirklich super, wenn das klappt!

Als Emulator schau mal bitte nach AltairSIMH. Läuft bei mir prima..
Hänge ich hier mal an.. einfach entpacken und Altairall.bat starten.
Laufwerk A: ist CP/M 2.2
Laufwerk B: ist MBasic
Laufwerk C: ist BDS-C compiler
Mit R/W lassen sich Dateien vom Hostsystem nach CP/M transferieren.

Peter

von Joerg W. (joergwolfram)


Lesenswert?

Es ist wahrscheinlich sinnvoller, eines der in der Codesammlung 
vorhandenen AVR-Terminals zu benutzen. Die haben eigentlich alle eine 
höhere Auflösung als das ChipBasic und die serielle Ansteuerung ist auch 
schon fertig.
Ich halte das Ganze für ein recht interessantes Projekt, allerdings geht 
für mich der praktische Nutzen gegen Null.

Wobei ich heutzutage auch kein Projekt mehr anfangen würde, welches nur 
TV als Ausgabemedium hat. Schon beim ChipBasic mit seiner doch recht 
groben Auflöung sind bei neueren TVs durch die ganze Samplinggeschichte 
die Pixel unterschiedlich breit und auch teilweise unterschiedlich hoch 
wahrscheinlich werden die Bilddaten 4:2:2 gespeichert).
Eine probeweise Darstellung von 80 Zeichen (480 Pixel bei 10MHz 
Pixeltakt) ist auf einem guten Analoggerät noch lesbar, aber schon auf 
einem 100Hz Fernseher einfach eine Zumutung (zumindest meinem Eindruck 
nach).

Jörg

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,

nettes Projekt, Danke Peter!
Ich habe mal Peters Idee aufgegriffen, seine Schaltung leicht erweitert 
und ein Layout dazu erstellt. Vielleicht findest es ja Gefallen.

1. Die Jumper TTL, Reset und 3.3 V behalten vollständig ihre Pinbelegung 
und Funktion
2. Die Kommunikation (RS232) ist auf eine USB-Schnittstelle gelegt.
3. Die Stromversorgung (5V und 3.3V) erfolgt über die USB-Schnittstelle
4. Steckverbinder zur ISP-Programmierung des AVR hinzugefügt.
5. Mit dem Jumper POWER Switch kann wahlweise zwischen 5V und 3.3V 
umgesteckt werden (Vorsicht CF-Card ziehen!)
6. Mit dem Jumper CLOCK Switch kann der AVR Takt über den USB Controller 
bezogen werden. Hier sind 6, 12, 24 oder 48 MHz möglich.

Weitere Ideen oder Vorschläge nehme ich gerne auf.

Joe

von Peter Sieg (Gast)


Lesenswert?

Hallo Joe.

Deine Ideen finde ich prima! Für mich ist wichtig, das die Jumper Header 
(TTL Seriell) so bleiben, damit meine Kabel direkt passen..

Aber der FT232RL ist ja optional..und eine gute Idee.

Stromversorgung über USB Buchse ist auch eine gute Idee.. aber woher 
kommen die 3,3V.. oder habe ich da einen Regler übersehen..?

ATmega88+Dram+SD Card sollte über 3,3V versorgt werden.. ich vermute 
FT232RL benötigt 5V (und bekommt die ja auch direkt über die USB Buchse) 
und kann 3,3V TTL Pegel an Rx+Tx ab.. ich hoffe der AVR kann allerdings 
auch +5V ab, obwohl er mit 3,3V versorgt wird..?

Programmierung auf der Platine ist ebenfalls eine gute Idee (wenn ich 
auch immer 6-Pol Header verwende ;-) )

Wozu ist D2 1N4148 da?

Wir funktioniert die optionale Taktgenerierung über den FT232RL?

Wie gesagt, wenn das Ganze auch ohne FT232RL Bstückung läuft und man die 
3,3V aus dem USB Anschluß erzeugen kann, können wir gerne deine Platine 
bestellen, da sie nur 10mm breiter ist..

Im Forum64 gibt zumindest auch schon mal Interesse an 3 Platinen.. hier 
gab es auch Interesse an 1-2 Platinen und ich nehme 2.. langsam kommen 
wir
auf die benötigten 10 ;-)


Peter

von karadur (Gast)


Lesenswert?

Hallo

ich finde die Idee akademisch sehr amüsant. Nur wer hier wirklich CP/M 
machen will ( es ist in den 80ern wirklich super gewesen ) sollte sich 
auch mal den ez80 anschauen. Man spart sich die Emulation, ist ein 
Nachfolger des Z80 und sehr viel schneller. CP/M war mein erstes 
richtiges Betriebssystem auf dem ich Megabytes an Sourcecode unter 
Turbopascal erstellt habe, aber es gibt heute bessere Systeme. Es gibt 
sicherlich noch viele Geräte die im Hintergrund mit CP/M laufen, aber es 
gibt eigentlich ausser nostalgischen Gründen für mich kein Argument 
jetzt noch CP/M zu implementieren.

von Uhu U. (uhu)


Lesenswert?

Peter Sieg schrieb:
> aber woher kommen die 3,3V.

Im FTDI steckt ein 3,3V-Regler.

Mich würde die Platine auch interessieren.

von Uhu U. (uhu)


Lesenswert?

karadur schrieb:
> aber es gibt heute bessere Systeme

Aber klar doch. Nur sind die auch noch so übersichtlich, wie CPM?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Hallo Peter,

der FT232RL hat einen eigenen 3.3V Regler integriert. Er benötigt also 
selbst 5V aus der USB Schnittstelle oder muß über ein eigenes Netzteil 
versorgt werden.

Der Rx und Tx Pegel wird, je nach Versorung des FT232 entsprechend auf 
5V oder 3.3V angepaßt. Die Brücke für die 5V hatte ich dafür vorgesehen 
um für  mögliche 5V Programmieradapter kompatibel zu sein.

Für die Programmierung kann ich auch ein 6-Pol Header einsetzen, ist 
sogar etwas kleiner :-) Auch kam mir noch die Idee zu einem kleinen 
Resettaster.

Die Diode ist nur zum Schutz, siehe AVR042: AVR Hardware Design 
Considerations. Sie kann auch entfallen.

Der FT232 ist nur dann optional, wenn die 3.3V extern zugeführt werden.

Die Takterzeugung läuft über die Programmierung des FT232. Dazu gibt es 
von FTDI ein kleines Tool über welches das interne EEPROM geschieben 
wird.

Prima wenn es 10 Platinen werden....

Joe

von Ronny M. (hobby-coder)


Lesenswert?

@Peter Sieg: Du kannst zu meiner Platinenreservierung (+ SRam usw.) eine 
dazu legen. Dann sind es 8 Platinen.

von O. H. (ohagendorf)


Lesenswert?

Und ich bin auch an einer interessiert.

Olaf

von Peter Sieg (Gast)


Lesenswert?

@Joe: Ich verwende den AVR ISP Stick. Siehe hier:
http://www.mikrocontroller.net/articles/AVR-ISP-Stick
Wäre super, wenn du diesen 6-pol Programmierheader einbauen könntest.
Resettaster parallel zu dem 2-pol Header ist prima, solange wir dadurch
dir Platine nicht vergrößern.

Also noch mal für mich zum verstehen:
- Man kann 3,3V extern einspeisen und direkt TTL seriell am 3-pol Header
kummunizieren.. FT232RL bleibt dann unbestückt. Takt aus Quarz.
- Zum Flashen kann +5V über USB Buchse eingespeist werden (Ohne SD 
Karte!)
- Bei bestücktem FT232RL kann versorgt dieser die anderen Teile mit 
+3,3V und stellt natürlich auch direkt die Kommunikation über USB her 
(virtueller Com-Port). Alternativ kann man ihm auch noch beibringen den 
Takt für den AVR zu generieren, spart sich also den Quarz und die beiden 
C's dazu..

So richtig verstanden..?

Dann bitte noch mal an alle, die Platine von Joe und Schaltplan 
vergleichen..
denn wir fertigen ja keinen Prototypen mehr an.. und Fehler rächen sich 
hier dann sofort an allen Platinen..

Peter

von Uhu U. (uhu)


Lesenswert?

Ich würde vorschlagen, noch eine rote LED draufzusetzen, die leuchtet, 
wenn das Teil auf 5V gejumpert ist - dann werden nicht so viele SDs 
gebraten.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

@Peter:
6-polige Programmierbuchse eingesetzt
Resettaster eingefügt
Ja, Du hast es richtig verstanden mit den 3.3V und dem TTL Header.

@Uhu:
Mir fällt keine so richtig einfache Schaltung ein die 5V auf der 3.3V 
Leitung zu erkennen. Möglich ist die Differenz zwischen 5V und 3.3V zu 
nutzen (1.7V) Eine rote LED sollte dann leuchten. Die Funktion wäre aber 
invers, sie leuchtet wenn 3.3V anliegen und nicht wenn 5V anliegen.

Prinzipiell:
Der AVR verträgt laut Datenblatt 1.8 - 5.5V also kein Problem.
Die SD-Cad nur 3.3V also beim Flashen ziehen!
Der DRAM 3.3V oder 5V Volt ja nach Type, ein 5V Type wird also außerhalb 
seiner Spezifikation betrieben.

Anbei das geänderte Layout bzw. die Schaltung nochmal zur Durchsicht.

Joe

von Ronny M. (hobby-coder)


Lesenswert?

@Peter Sieg & Joe G.: Falls möglich, verwendet bitte 512x8 SRam's. Diese 
lassen sich bei reichelt bestellen... Bei 256x8 SRam's sieht es da 
schwieriger aus. Und, diese kann wohl nur noch auf alten Mainboards 
finden... Ich jedenfalls habe weder bei CSD noch bei reichelt passende 
SRam's gefunden...

Oder, kennt jemand eine andere Quelle, die an Privat liefert...?

von Reinhard Kern (Gast)


Lesenswert?

karadur schrieb:
> auch mal den ez80 anschauen. Man spart sich die Emulation, ist ein
> Nachfolger des Z80 und sehr viel schneller.

Hallo,

ganz so einfach ist es nach meiner Erfahrung leider nicht, z.B. 
funktionieren die I/O-Befehle i.A. nicht mehr, weil der eZ80 Ports mit 
16 Bit Adressen anspricht, und für die Adressierung der Ports von 0..255 
gibt es neue Opcodes und ausserdem kollidieren sie mit der internen 
Peripherie, im Bereich "HAL" muss man also modifizieren. Da ich in der 
Hochsprache ohnehin keine direkten I/Os verwendet habe, müssen bei mir 
nur die Zugriffe in Assembler geändert werden. Einfacher als neu 
schreiben ist es aber schon.

Interessant wäre es, bei einem Paging-System das Paging auf die 
eingebauten eZ80-Funktionen umzustellen und den Rest mit wenigen 
Änderungen zu übernehmen. Dann stehen immerhin maximal 256 Pages a 64k 
zur Verfügung. Allerdings ist auch da u.U. ein Trick nötig: CP/M u.ä. 
Systeme setzen Speichermodelle voraus mit Programm und Daten innerhalb 
64k (wie sollten sie das auch besser wissen), der eZ80 kann aber nur 
ganze Seiten einblenden, um also Rom und Ram oder verschiedene 
RAM-Bereiche innerhalb 64k abzubilden, braucht man noch etwas externe 
Hardware.

Gruss Reinhard

von Uhu U. (uhu)


Lesenswert?

Joe G. schrieb:
> Mir fällt keine so richtig einfache Schaltung ein die 5V auf der 3.3V
> Leitung zu erkennen.

Was spricht gegen eine ZF3,3, einen Widerstand und eine rote LED?

von Peter Sieg (Gast)


Lesenswert?

@Ronny Minow: Es geht hier ersteinmal darum, die Schaltung grundsätzlich 
NICHT zu ändern. Und ein 256x4 Dram gegen ein 256x8 Sram zu tauschen 
wäre
eine solche Änderung.. sowas muß warten bis die anderen Ideen hier ggf. 
eine
geänderte Schaltung hervorbringen. Ein 256x4 Dram kann ich ggf. 
mitliefern.

Peter

von Ronny M. (hobby-coder)


Lesenswert?

Peter Sieg schrieb:
> @Ronny Minow: Es geht hier ersteinmal darum, die Schaltung grundsätzlich
> NICHT zu ändern. Und ein 256x4 Dram gegen ein 256x8 Sram zu tauschen
> wäre
> eine solche Änderung.. sowas muß warten bis die anderen Ideen hier ggf.
> eine
> geänderte Schaltung hervorbringen. Ein 256x4 Dram kann ich ggf.
> mitliefern.
>
> Peter

Oki, kannst Du auch einen vorprogrammierten Atmega88 beilegen? Falls 
nicht, auch nicht schlimm. Die fehlenden Bauteile werde ich mir dann 
noch kaufen. Eine Quelle für den DRam Chip habe ich aber nicht 
gefunden...Melde Dich, wenn Du die Platinen hast und die Sachen zum 
Versand vorbereitest.

von Peter Sieg (Gast)


Lesenswert?

@Ronny Minow: So funktioniert das garantiert nicht :-)
WENN wir uns hier auf eine Platinenversion geeinigt haben (sieht so 
aus..) und ich mich entscheide, das es losgeht (bald), erst DANN kann 
mir jeder Interessent seine Addresse per Mail senden und bekommt dafür 
von mir meine BV. ERST wenn alle bezahlt haben (VORKASSE), DANN bestelle 
ich die Platinen, denn ich muß auch Vorkasse leisten...

Also eins nach dem anderen..

Peter

von Andy H. (vinculum) Benutzerseite


Lesenswert?

> Und: etwas was ich sehr vermisse. Dank Epromfloppy war der Rechner
> schneller gestartet als das die Bildröhre warm war.

Schön. das zu hören. Wenn es die aus der c't für den ECB-Bus war, dann 
war sie von mir. Studienarbeit 1982/83 oder so. Habe noch ein Exemplar 
hier liegen mit 2764, also damals um die 1000 DM.

von Michael_ (Gast)


Lesenswert?

>@Ronny Minow: Es geht hier ersteinmal darum, die Schaltung grundsätzlich
>NICHT zu ändern. Und ein 256x4 Dram gegen ein 256x8 Sram zu tauschen
>wäre
Ich begreife es nicht, denn die D-RAM Ansteuerung ist wesentlich 
komplizierter. Ein Atmel hat doch wohl keine Refresh-Generierung wie ein 
Z-80 System. Dies hat ja auch 8-Bit Refresh, was die 256x4 wohl nicht 
haben. Sie haben nur 7-Bit Refresh.
S-RAM sind doch heute in jeder Größe verfügbar, nicht wie früher.

von karadur (Gast)


Lesenswert?

@ Andy H.

war die Schaltung aus der c't. Läuft immer noch. Zusammen mit der 1MByte 
Ramfloppy.

von Peter Sieg (Gast)


Lesenswert?

@Michael_ : Ganz einfach: Mache einen LR Aufbau mit SRAM und ändere die 
AVR Firmware so ab, das alles mind. so gut/aber schneller funktioniert 
wie jetzt und stelle uns dein geändertes Projekt inkl. Schaltplan und 
Firmware-Source hier zur Verfügung. - Dann reden wir weiter - ok!

Peter

von Andy H. (vinculum) Benutzerseite


Lesenswert?

karadur schrieb:
> @ Andy H.
>
> war die Schaltung aus der c't. Läuft immer noch. Zusammen mit der 1MByte
> Ramfloppy.

Super, freut mich wirklich zu hören, die RAM-Floppy war von meinem Assi!

von Peter Sieg (Gast)


Lesenswert?

@alle:
Also: Joe G. hier aus dem Forum wird die Platinenbestellung übernehmen. 
Wir haben uns diesbezüglich schon abgestimmt.
Redaktionsschluß für Änderungen an der Platinen ist Sonntag, der 6.6 
18Uhr MEZ. Verbindliche Bestellungen für
Platinen (und ggf. SD Slots) sind bis zum Sonntag, den 13.6 18Uhr MEZ 
möglich. Danach erfolgt die Bestellung.
Generell gilt für DIESE Platinenbestellung, das ursprüngliche 
Hardwaredesign (ATmega88, 256kx4 Dram, SD Card) bleibt
unverändert! An Kosten ist mit etwa 10€/Platine zu rechnen (2-lagig, 
durchkontaktiert, Lötstoplack). SD Slot etwa 3€/Stück.
Wenn mehrere DRam's benötigt werden.. könnte ich diese Joe zusenden, der 
sie
dann mit der Bestellung verteilen kann..(Kosten 1€/Stück - Verrechnung 
mit meiner Platinenbestellung bei Joe)..?
Weitere Details zur Abwicklung von Joe G. (feinmechaniker)...

Peter

von Joerg F. (felge1966)


Lesenswert?

Wie ich Peter schon im Forum64 geschrieben habe, bin ich an einer 
Platine und den SD-Slot interessiert. Die restlichen Teile (AVR und 
dRAM) habe ich selbst.

Jörg

von Rene B. (themason) Benutzerseite


Lesenswert?

Also interesse an einer Platine hätte ich ebenfalls. Bräuchte dann den 
SD-Karten Slot, sowie das DRAM. Den Rest werd ich mir so 
zusammenbestellen können denke ich.

von Markus (Gast)


Lesenswert?

Ein Frage: wie bekomme ich unter XP das disk image auf die SD-Card?

von Zorg (Gast)


Lesenswert?

Warum übergebt Ihr die Platine nicht einfach einem kleinen Online-Shop. 
Der soll dann 10€ drauf schlagen, dafür ist es aber mit der ganzen 
Bestellerei einfacher.

von Peter Sieg (Gast)


Lesenswert?

@Markus: Mit dd.exe für win32 ;-)

Wenn du dir von hier:
http://avr.cwsurf (dot) de/ -> AVR CP/M

die cpmtools.zip ziehst, hast du nicht nur dd.exe, sondern auch die 
cpmtools um das diskimage unter Windows zu verändern (genauer: Programme 
löschen, hinzufügen, listen).

Peter

von Markus (Gast)


Lesenswert?

Danke für die Infos, Peter :)

von Ronny M. (hobby-coder)


Lesenswert?

@Peter Sieg: Wie sieht es mit den Versandkosten aus?

von Peter Sieg (Gast)


Lesenswert?

@Ronny Minow: Denkst du nicht, das diese Frage besser von Joe 
beantwortet werden sollte.. ;-)

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@alle:
Wie Peter schon in beiden Foren geschrieben hat, nehme ich die 
Bestellungen für die AVR CP/M Platinen entgegen. Dazu bitte Eure 
benötigte Stückzahl, Eure Mailadresse sowie die Versandadresse über 
„Feinmechaniker“ an mich senden. Weiterhin würde ich die notwendigen 
SD-Card Sockel mitbestellen. Wer DRAM’s benötigt ebenfalls kurze Info an 
mich. Es sind noch welche in geringer Stückzahl zu haben. Hier gilt – 
Verteilung nach Bestelleingang. Jede Bestellung erhält von mir eine 
kurze Bestätigung über den Eingang. (Wer schon bestellt hat, bitte nicht 
noch mal wiederholen.) Wenn die Bestätigung nicht sofort erfolgt, etwas 
Geduld, ich vergesse schon niemanden. Um die angekündigten Preise zu 
halten müssen mindestens 10 Platinen zusammenkommen. In diesem Fall 
liegt der Preis einer Platine (zweiseitig, durchkontaktiert, 
Lötstoplack) bei ca. 10 € netto.  Ein SD-Card Sockel kostet 2.95€ und 
ein DRAM 1€. Dazu kommen noch 1,65€ für die Warensendung bzw. die Kosten 
für die Versandtasche. Eine genaue Kalkulation gibt es nach dem 
Bestelleingangsende, da erst dann der Leiterplattenpreis genau 
kalkuliert werden kann. Bis Sonntag 18 Uhr nehme ich noch 
Fehlerkorrekturen, Änderungsvorschläge, Verbesserungen der Schaltung 
auf. Wie Peter schon geschrieben hat gilt jedoch das Hardwaregrunddesign 
(ATmega88, 256kx4 DRAM, SD Card). Ziel ist zunächst die 
Softwareentwicklung. Wer gleich mit einem SRAM arbeiten möchte, kann ihn 
ja über eine Lochrasterplatine auf die DRAM Fassung stecken. Adress-, 
Daten- und Steuerpins liegen an, der Rest ist NUR Softwareanpassung :-).
Bestellungen nehme ich bis Sonntag den 13.6 entgegen. Am 14.6 löse ich 
die Bestellungen dann aus. Die Lieferzeit für die Platinen beträgt im 
Normalfall 8 AT, also bitte nicht schon früher drängeln.

Joe

von Uhu U. (uhu)


Lesenswert?

Was ist mit der 5V-LED? 
Beitrag "Re: CP/M auf ATmega88"

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Das Funktioniert nicht wirklich zufrieden stellend mit einer Z-Diode und 
einer LED. Die Exemplarstreuungen sind so groß, dass bei 3.3V die LED 
schon leicht leuchtet, wobei meine Z-Diodenbox nur Werte von 2.7, 3.3, 
3.9, beinhaltete. Wenn die Aussage nicht sicher ist, dann kann die 
Anzeige auch wegelassen werden. Oder einen besseren Vorschlag…

Joe

von bix (Gast)


Angehängte Dateien:

Lesenswert?

Habe mir gerade mal den Schaltplan angesehen, dabei fiel mir folgendes 
auf:

Es gibt nur einen Abblockkondensator (im Schaltplan am AVR, auf der 
Platine neben dem RAM).
Ich würde für MCU und RAM jeweils einen eigenen Kondensator vorsehen und 
die Bauteile so platzieren, dass sie nicht direkt vor oder hinter dem 
Sockel sitzen, sondern seitlich versetzt. Das erleichtert den Ausbau der 
ICs, wenn man einen Schraubendreher als Hebel ansetzen will.

Ggf. sollte man noch einen Elko für die SD-Karte einplanen.

Der Pin AREF sollte offen bleiben. Im Schaltplan ist er auf 3,3V gelegt, 
auf der Platine gibt es ein nicht geroutetes Signal. Ich nehme an, das 
ist AREF. Ich würde es im Schaltplan korrigieren.

Noch ein Tipp zu Eagle:
Mit dem Befehl Label kann man die Leitungen im Schaltplan beschriften. 
So erkennt man besser, welche Signale aus dem BUS herausgeführt werden. 
Ich habe testweise mal alle Labels gesetzt (s. Screenshot).
Im Screenshot ist der Label Befehl (Schaltfläche) unten links gesetzt. 
Es ist die grüne Linie mit "ABC" darüber.

In der Vorschau sehe ich den angehängten Screenshot nicht. Ich hoffe, es 
klappt trotzdem.

Eine Frage:

Kann man statt dem Mega88 auch einen Mega8 einsetzen? Sie unterscheiden 
sich ja etwas, z.B. hinsichtlich der Speicheraufteilung.

Gruß, Bix.


Ist ein tolles Projekt.

von bix (Gast)


Angehängte Dateien:

Lesenswert?

Man hätte noch Platz für ein kleines Lochraster-Feld.

von Uhu U. (uhu)


Lesenswert?

Ist der FTDI jetzt gestrichen? Hoffentlich nicht...

von Peter Sieg (Gast)


Lesenswert?

Nein.. denn bix hat die aller erste Version der Schaltung verwendet..
Sorry, bix. Aktuell verfolgen wir die Schaltung von Joe G. (etwas weiter 
oben) mit einer USB Buchse und FT232RL Optional..

Wäre super, wenn du da auch noch mal einen Blick drauf werfen könntest..

Peter

von bix (Gast)


Angehängte Dateien:

Lesenswert?

Peter Sieg schrieb:
> Nein.. denn bix hat die aller erste Version der Schaltung verwendet..

Hmmm ... erwischt.

Sehr schönes Layout von Joe, da gibt es nichts zu meckern.

Nur zwei Anmerkungen:

Man könnte beim SD-Slot die Verbindung benachbarter Pads über eine 
Leitung außen herum realisieren. Dann ist die thermische Kopplung 
geringer und es lässt sich etwas einfacher löten. Ist aber auch kein 
Drama, wenn man es so lässt.

Das Via der TXD-Leitung könnte man bei der Gelegenheit auch etwas weiter 
weg schieben, um das Risiko eines ungewollten Kurzschlusses zu 
minimieren. Platz ist ja genug da.

Die Änderungen sieht man auf den angehängten Screenshots (1=vorher / 
2=nachher).
Das Via liegt im zweiten Screenshot in der Massefläche. Ich habe es 
extra so dargestellt, damit man besser sieht, wie das Via verschoben 
wurde. Ein "Ratsnest" bereinigt es dann wieder.

Man könnte noch, wenn man will, auf dem Toplayer einige Beschriftungen 
anbringen, z.B. Markierung von Pin 1 der Stiftleisten und ICs, sowie "+" 
bei Elko und LED, zu sehen auf Bild 3.

Man könnte noch einen optionalen Elko am SD-Slot vorsehen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@bix:

Danke für die Hinweise! Ich nehme sie gerne auf.
Zum Einsatz eines Mega8. Ich denke er ist nur bis 16 MHz spezifiziert. 
Ob er mit 20 MHz oder gar mit 24 MHz (Takt aus FT232) geht müßte 
getestet werden.

von spess53 (Gast)


Lesenswert?

Hi

>Sehr schönes Layout von Joe, da gibt es nichts zu meckern.

Ich würde da noch einigen Handlungsbedarf sehen. Abgesehen vom Layout, 
fehlen solche elementaren Dinge, wie Abblockkondensatoren.

MfG Spess

von bix (Gast)


Angehängte Dateien:

Lesenswert?

spess53 schrieb:
> fehlen solche elementaren Dinge, wie Abblockkondensatoren.

Hallo Spess, beziehst Du Dich auf den aktuellen Schaltplan von Joe?

Gruß, bix

von spess53 (Gast)


Lesenswert?

Hi

>Hallo Spess, beziehst Du Dich auf den aktuellen Schaltplan von Joe?

Eigentlich auf das Layout, von dem du geschwärmt hast. Aber in dem 
Schaltbild
vermisse ich auch einen Kondensator von AVCC nach AGND. Außerdem ist 
z.b. ein 10µ-Elko am Reset-Pin tödlich für ISP.
Um es mal vorsichtig auszudrücken: Hardware ist nicht eure Stärke.

MfG Spess

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Spess

Komm, lasse uns nicht dumm sterben. Wo sind vorsichtig ausgedrückt die 
"Eier" in der Schaltung? Wo siehst Du noch einigen Handlungsbedarf? 
Genau deshalb soll ja hier diskutiert werden.

Joe

von bix (Gast)


Lesenswert?

Mit dem Elko am Reset-Pin hat Spess natürlich recht. Der gehört dort 
nicht hin. In der Schaltung von Peter, die ich im Kopf hatte, war er 
dort nicht vorhanden.

Was den von mir erwähnten fehlenden Elko am SD-Kartenslot angeht, da 
gibt es unterschiedliche Varianten.

Manche setzen keinen Kondensator ein, manche einen Abblockkondensator 
von 100n. Elm-Chan setzt dort einen 4u7 Elko hin, um Spannungseinbrüche 
abzufangen, falls eine SD-Karte im Betrieb eingesetzt wird.
Interessante Links hierzu:

http://www.mikrocontroller.net/articles/MMC-_und_SD-Karten
http://elm-chan.org/docs/mmc/mmc_e.html
... im Abschnitt: Cosideration to Bus Floating and Hot Insertion
http://www.dharmanitech.com/2009/01/sd-card-interfacing-with-atmega8-fat32.html

Sicherheitshalber sollte ein 220u Elko am Eingang der 
Versorgungsspannung und ein 4u7 Elko direkt am SD-Slot vorgesehen 
werden. Vielleicht läuft es ohne - schön. Falls nicht, kann man die 
Elkos nachträglich noch bestücken.

AVcc soll gemäß Datenblatt zum Mega88A direkt mit Vcc verbundenwerden, 
wenn der ADC nicht benutzt wird. Wenn der ADC benutzt wird, soll AVcc 
über einen Tiefpass mit Vcc verbunden werden. Da wir den ADC nicht 
verwenden, benötigen wir keinen Tiefpass.
Es ist sicherlich kein allzu hoher Aufwand, einen zusätzlichen 
Abblockkondensator für AVcc vorzusehen.

von spess53 (Gast)


Lesenswert?

Hi

>Komm, lasse uns nicht dumm sterben.

Was verstehst du an der Aussage, das Kondensatoren fehlen oder falsch 
sind, nicht?

Ich beziehe mich mal auf das Layout von 18:36:

Mindesten 50% der Leiterzüge sind, zum Teil wesentlich, länger als 
nötig:

- 90°-Winkel sollte man vermeiden.
- Unnötige 'Schlenker' z.B. rechte Seite oben.
- Unnötige Umwege z.B. Pin23 ATMega - Pin1 Speicher
_ ...

Außerdem sieht mir der Isolationsabstand etwas klein aus.

MfG Spess

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Danke für die Hinweise, werden aufgegriffen. Die fehlende Drossel in der 
USB-Leitung vermißt wohl keiner? Gibt es ohne sie in Problem (EMV)?
Joe

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Mir persönlich gefällt die folgende Variante zum Anschluß der SD-Card 
ganz gut.

http://www.dharmanitech.com/2009/01/sd-card-interf...

Damit wird die Schaltung komplett mit 5V betrieben und nur die SD mit 
3.3V. Es kann also nicht zur versehentlichen Zerstörung der SD kommen 
und der Dram wird innerhalb seines Spannungsbereiches betrieben. Die 
notwendigen Z-Dioden und Widerstände würde ich als SMD in die Nähe der 
SD bringen und diese könnten dann optional bestückt werden.
Somit hätten wir die zwei möglichen Bestückungsvarianten auf der 
Platine:
1. alles wie gehabt, extern (USB) 5V oder extern 3.3V (siehe alte 
Schaltung)
2. nur noch extern 5V

von heini (Gast)


Lesenswert?

Reinhard Kern schrieb:
> CP/M u.ä.
> Systeme setzen Speichermodelle voraus mit Programm und Daten innerhalb
> 64k (wie sollten sie das auch besser wissen), der eZ80 kann aber nur
> ganze Seiten einblenden, um also Rom und Ram oder verschiedene
> RAM-Bereiche innerhalb 64k abzubilden, braucht man noch etwas externe
> Hardware.

Insbesondere CP/M 3 verlangt einen Common-Breich, der in allen Pages 
ansprechbar sein soll. Das dürfte ausgesprochen haarig werden und hat 
mich bis auf weiteres von dieser Idee abgebracht. Wäre aber sehr nett 
gewesen sonst, schade ...

von Uhu U. (uhu)


Lesenswert?

Zu den fehlenden Z80-Opcode-Routinen:
CP/M ist ein auf dem 8080 lauffähiges OS. Der Befehlssatz des Z80 ist 
ein Superset des 8080-Befehlssatzes.

Was spricht eigentlich dafür, den FT232RL nur optional vorzusehen?

Wenn man ihn unbedingt vorsieht, kann man sich den ISP-Stecker sparen, 
wenn man dem Controller einen Bootlader spendiert.

Das hätte den Vorteil, daß jemand, der keinen ISP verfügbar hat, sich 
nur von irgend jemandem ein mal den Bootlader flashen lassen muß und das 
Teil dann selbst über den USB programmieren kann.

Das mit dem eZ80 ist eine Schnapsidee, das funktioniert im Leben nicht 
mit CP/M.

von bix (Gast)


Lesenswert?

Uhu Uhuhu schrieb:
> Was spricht eigentlich dafür, den FT232RL nur optional vorzusehen?

Aufgrund seiner Bauform lötet er sich nicht so einfach, daher optional.
Wer ISP nicht benötigt, weil er mit Bootloader arbeitet, kann die 
Stiftleiste ja weglassen.

von bix (Gast)


Lesenswert?

Joe G. schrieb:
> Mir persönlich gefällt die folgende Variante zum Anschluß der SD-Card
> ganz gut.

Wenn Du diese Schaltung meinst:
http://3.bp.blogspot.com/_zqABT3suzXE/S_EwMNYzDhI/AAAAAAAAAW4/MHHY0U-xAhM/s1600/SD_M32_RTC.JPG
(Ver_2.4)

Dort fehlen die Spannungsteiler an den Portpins des ATMega, oder 
zumindest Strombegrenzungswiderstände zwischen dem Anschluss des 
ISP-Steckers und den Z-Dioden.

Ein 3,3V / 5V Mixbetrieb ist sicherlich für das RAM sowie den Betrieb 
des ATMega bei hohen Frequenzen von Vorteil, insbesondere, wenn man noch 
übertakten will.
Der optionale FT232 oder alternativ ein Low Drop 3,3V Spannungsregler 
wäre damit verpflichtend und der Aufwand steigt.

Ohne 3,3V-Regler geht's zur Not auch (s. Schaltung von Ulrich Radig), 
aber nicht ohne Spannungsteiler:

http://www.ulrichradig.de/home/index.php/avr/mmc-sd

von karadur (Gast)


Lesenswert?

@ Uhu Uhuhu

zum Thema Schnapsidee: http://www.ez80sbc.com/

von Reinhard Kern (Gast)


Lesenswert?

heini schrieb:
> Insbesondere CP/M 3 verlangt einen Common-Breich, der in allen Pages
> ansprechbar sein soll. Das dürfte ausgesprochen haarig werden und hat
> mich bis auf weiteres von dieser Idee abgebracht. Wäre aber sehr nett
> gewesen sonst, schade ...

Hallo,

das kostet maximal 1 IC, aktuell bei mir ein 74xx139, wenns komplexer 
wird ein GAL. Ich habe Flash von 0..7FFF auf den CP/M-Pages und RAM von 
8000..FFFF, und das gemeinsam für 2 benachbarte Pages. Mir ist es aber 
auch erst nach der ersten Version aufgefallen, dass die eingebauten 
ChipSelects dafür nicht flexibel genug sind, daher ein Redesign.

Mit 3 Jumpern kann ich aber auch auf 24bit "flat" umschalten.

Gruss Reinhard

von Martin (Gast)


Lesenswert?

Die Geschwindigkeit des System ist ziemlich lausig. Allein um ein Byte 
zu lesen oder zu schreiben werden ca. 220 Takte benötigt - vom 
Zeitaufwand zur Befehlsabarbeitung einmal ganz zu schweigen.

Fazit: gute Idee (2 Chip Design & so.) aber Nachbau der 
Orginalausführung: Nö.

von (prx) A. K. (prx)


Lesenswert?

heini schrieb:

> Insbesondere CP/M 3 verlangt einen Common-Breich, der in allen Pages
> ansprechbar sein soll. Das dürfte ausgesprochen haarig werden

Warum? Das ist nicht mehr als eine einfache Umsetzung der effektiven 
Adresse in die DRAM-Adresse, im Programm. Nicht viel Aufwand.

von Peter S. (petersieg)


Lesenswert?

@Joe: Finde ich gut noch ein paar Ideen zur Platine zu diskutieren.. 
aber KISS (Keep It Simple & Stupid). Diese Platine soll nahe am Original 
mit kleinen Verbesserungen bleiben.. und das Original läuft auch bei mir 
auf Lochraster, einem (1) Abblockkondensator und 3,3V und gut ist..
Das Ganze soll ja eigendlich lediglich das leidige von Hand verdrahten 
auf Lochraster ersparen..

@Martin: Danke, aber das wußten wir schon.. wenn du Ideen hast wie man 
an der orig. Hardware+Firmware noch etwas besser machen kann.. nur zu.. 
ansonsten gab/gibt es hier auch eine 'Fraktion' die über ein Redesign 
ggf. mit 8-bit Sram nachdenken.. auch hier sind sicher weite 
Betätigungsfelder für Mitwirkende..

Just my 2 cents
Peter

von telenovela (Gast)


Lesenswert?

>Mindesten 50% der Leiterzüge sind, zum Teil wesentlich, länger als
>nötig:
>
>- 90°-Winkel sollte man vermeiden.
>- Unnötige 'Schlenker' z.B. rechte Seite oben.
>- Unnötige Umwege z.B. Pin23 ATMega - Pin1 Speicher
>_ ...

Autorouter halt...

von bix (Gast)


Lesenswert?

Habe mir gerade mal die Timing-Diagramme im Datenblatt zum DRAM 
angesehen. Jeder Zugriff auf das RAM (Lesen, Schreiben, Refresh) wird 
durch setzen der RAS\ Leitung begleitet.
Man kann also die übrigen Leitungen des RAM als IO-Port nutzen, solange 
RAS\ auf High-Pegel liegt.
Es ist lediglich zu beachten, dass die Adressleitungen vom uC 
angesteuert werden müssen, bevor RAS\ auf Low gezogen wird.

Da außer RX und TX keine Ein- und Ausgabe möglich besteht, schlage ich 
eine zweireihige Stiftleiste als optionalen Erweiterungsport vor. Er 
müsste Spannungsversorgung sowie alle Leitungen zum RAM, insbesondere 
RAS\, enthalten.

Man könnte dann weiter ausbauen, z.B. eine RTC, serielle EEPROMS, LEDs, 
Taster oder LCD ergänzen.

Die Platine müsste etwa 1/2 cm verlängert werden, wenn man die 
Stiftleiste am oberen Ende parallel zum RAM platziert. Die Bestückung 
wäre natürlich optional.

von heini (Gast)


Lesenswert?

A. K. schrieb:
>> Insbesondere CP/M 3 verlangt einen Common-Breich, der in allen Pages
>> ansprechbar sein soll. Das dürfte ausgesprochen haarig werden
>
> Warum? Das ist nicht mehr als eine einfache Umsetzung der effektiven
> Adresse in die DRAM-Adresse, im Programm. Nicht viel Aufwand.

Vielleicht sehe ich ja den wald vor Bäumen nicht, aber nach meiner 
Vorstellung muss für den zugriff auf den Common-Bereich in den ADL-Mode 
gewechselt werden.
Ohne mich jetzt näher damit befasst zu haben, gehe ich davon aus, dass 
das zu Problemen bei der Systemgenese führen wird, zumal GENCPM 
schwerlich in der Lage sein wird, 24-bit-Adressen in .SPR_Dateien zu 
verarbeiten.

Eine hardware-basierte Lösung über einen externen Adressdecoder, was 
funktionieren sollte, fände ich schauderhaft, aber das ist vermutlich 
ein weltanschauliches Problem<g>

von (prx) A. K. (prx)


Lesenswert?

Soweit ich erkennen kann hat CP/M 3 eine Form von Bank-Switching 
verwendet. Eine Page blieb unverändert, der Rest wurde umgeschaltet. 
Solch ein Verfahren lässt sich mühelos in einen CPU-Emulator einbauen, 
da ist keine separate Hardware notwendig. Kostet ein paar Takte beim 
Speicherzugriff.

Das kann im einfachsten Fall so aussehen:
 used_bank = (address>=0xF000) ? 0 : active_bank;
jeweils vor dem Speicherzugriff. Alternativ über Tabelle.

von Uhu U. (uhu)


Lesenswert?

Jungs, jetzt bleibt doch mal auf dem Teppich. CP/M ist tot und wir 
haben es hier mit einem reinen Nostalgieprojekt zum Spielen und 
schwelgen in netten Erinnerungen zu tun.

Dazu braucht man keinen 50 MHz-Prozessor und mehr als 64 kB waren damals 
auch erst mal nicht vorgesehen.

Also: Bringen wir das CM/M 2.2 - Image zum Laufen und freuen uns daran, 
daß das Systemchen läuft.

Was mir fehlen wird, ist eher das rat-tatat des zwei Einheiten hohen
3 1/2" Diskettenlaufwerkes beim Warmstart...

von Ronny M. (hobby-coder)


Lesenswert?

Uhu Uhuhu schrieb:
> Jungs, jetzt bleibt doch mal auf dem Teppich. CP/M ist tot und wir
> haben es hier mit einem reinen Nostalgieprojekt zum Spielen und
> schwelgen in netten Erinnerungen zu tun.
>
> Dazu braucht man keinen 50 MHz-Prozessor und mehr als 64 kB waren damals
> auch erst mal nicht vorgesehen.
>
> Also: Bringen wir das CM/M 2.2 - Image zum Laufen und freuen uns daran,
> daß das Systemchen läuft.
>
> Was mir fehlen wird, ist eher das rat-tatat des zwei Einheiten hohen
> 3 1/2" Diskettenlaufwerkes beim Warmstart...

Du kannst Uns ja ein Diskettenlaufwerks Kontroller bauen :) Das währe 
soetwas wie das Sahnehäubchen auf dem Kuchen ;)

von (prx) A. K. (prx)


Lesenswert?

Notfalls als SD-Card mit Lautsprecher für's adäquate Rattern.

von Christian B. (casandro)


Lesenswert?

Uhu Uhuhu schrieb:
> Jungs, jetzt bleibt doch mal auf dem Teppich. CP/M ist tot und wir
> haben es hier mit einem reinen Nostalgieprojekt zum Spielen und
> schwelgen in netten Erinnerungen zu tun.

Also für mich ist das kein Grund. Der Grund warum ich das interessant 
finde ist, dass man hier die Chance hat mit 2 DIP-Chips einen kompletten 
Rechner aufbauen kann. Und das mit relativ wenig Aufwand.

Die Alternative für mich wäre ein Flash-Dateisystem aus dem ich AVR-Code 
direkt ausführen könnte.

von Uhu U. (uhu)


Lesenswert?

Christian Berger schrieb:
> Die Alternative für mich wäre ein Flash-Dateisystem aus dem ich AVR-Code
> direkt ausführen könnte.

Dann solltest du das machen. Einen Uraltprozessor auf einem modernen µC 
zu simulieren, um ein steinzeitliches OS - zu dem es keine Quellen gibt 
- darauf laufen zu lassen, ist ohne nostalgischen Hintergrund schlicht 
sinnlos.

CP/M ist wie gesagt mausetot und man kann mit dem Projekt eigentlich 
nichts sinnvolles anfangen.

Nimm einen großen ATMega, häng einen fetten SRAM-Chip und einen 
SD-Card-Sockel dran, pack FreeRTOS drauf, dann hast du was, was auch 
nicht mehr Teile hat, als dieses Nostalgieschätzchen hier und zusätzlich 
- im Gegensatz zu einem alten CP/M-Image - vollständig in Quellen 
verfügbar und einigermaßen Stand der Technik ist.

von Christian B. (casandro)


Lesenswert?

Uhu Uhuhu schrieb:
> um ein steinzeitliches OS - zu dem es keine Quellen gibt

Das ist inzwischen nicht mehr korrekt. Der Quellcode wurde inzwischen 
veröffentlicht.

von Uhu U. (uhu)


Lesenswert?

Christian Berger schrieb:
> Das ist inzwischen nicht mehr korrekt. Der Quellcode wurde inzwischen
> veröffentlicht.

Ah, das wußte ich nicht. Ist ja nett... Wo denn?

Nachtrag zu meinem voherigen Beitrag:
"Große" Festplatten hatten in den 80er Jahren - als CP/M aktuell war - 
gerade mal 40 MB. Eine heutige SD-Karte kann CP/M überhaupt nicht 
verwalten, ohne daß der größte Teil brach liegt.

von Joerg Felgentreu (Gast)


Lesenswert?

Ich finde, daß wir bei dem vorgesehenen Muster mit CPM2.2 und den beiden 
Chips beliben sollten.
Falls jemand was anderes bauen will, so sollte er ein neues Projekt 
aufziehen und nicht seine Fähigkeiten im Zerreden dieses Projektes 
einsetzen.

Für mich ist die ursprüngliche Richtung maßgebend.

Alle anderen Sachen wie
- CPM 3.0
- RTOS mit eigener HW
- SRAM Interface mit riesigen Erweiterungen

sollten in einen anderen Projekt erörtert werden. Mir gefällt das 
Projekt hier gerade, weil es so einfach ist.

von Christian B. (casandro)


Lesenswert?

Uhu Uhuhu schrieb:

> Ah, das wußte ich nicht. Ist ja nett... Wo denn?

http://www.cpm.z80.de/source.html

von Uhu U. (uhu)


Lesenswert?

Das ist ja wirklich nett. Vielen Dank.

PL/M habe ich auch mal programmiert - ist aber nicht wirklich der 
Bringer...

von bix (Gast)


Lesenswert?

Habe gerade etwas entdeckt.

In den Kommentaren zum Original-Projekt auf der Seite
  http://spritesmods.com/?art=avrcpm&page=4
wird auf ein Testprogramm für den 8080 hingewiesen: (instruction set 
test program EX8080.COM) Ist sicherlich hilfreich, wenn man fehlende 
Opcodes ergänzen möchte.

Hier der Link:
 http://www.schorn.ch/cpm/intro.php

Auf der Seite gibt es auch unterschiedliche Programmiersprachen, unter 
anderem Turbo Pascal.

von Joerg W. (joergwolfram)


Lesenswert?

Letztendlich finde ich das Ganze doch so interessant, dass ich ein 
"Parallelprojekt" zumindest anfangen werde. Basis wird der aktuelle 
ChipBasic2 Computer ohne Modifikationen sein. Dazu ein 64K RAM Modul am 
Parallelport, welches zwar schon seit über einem Jahr bei mir existiert 
aber erst jetzt durch die ladbaren Treiber wirklich benutzbar wird.

In Punkto Videoauflösung ist es mir gelungen, Treiber für 24 Zeilen a 50 
Zeichen und 24 Zeilen a 60 zeichen zu entwickeln. Der Zeichensatz 
umfasst 128 zeichen, sowohl normal als auch invers.

In der ersten Stufe (soweit Interesse daran ist), könnte ich ein 
einfaches Terminalprogramm integrieren (das RAM-Modul wird dazu nicht 
gebraucht). Dazu würde ich mich an z.B VT52 oder VT100 orientieren und 
implementieren, was halt möglich ist. Die Frage ist natürlich, ob man 
mit 60 zeichen/Zeile einigermassen arbeiten kann.

Die nächste Stufe wäre dann, meinen (weitestgehend vorhandenen) Z80 
Emulator an das System anzupassen. Eigentlich wollte ich damit mal einen 
ZX81 mit 2K RAM auf dem AVR simulieren, hab aber irgendwann 
aufgegeben...

Jörg

von Rene B. (themason) Benutzerseite


Lesenswert?

Ich finde das Projekt einerseits interessant als CP/M Emulation, 
andererseits als kleine Platform für weitere Mini-Computer. Es ist im 
Prinzip ja alles dafür da. 128KByte RAM, externer Speicher (in Form 
einer SD-Karte) und einer einfachen Schnittstelle nach außen hin. 
Weiterhin, alles schön einfach zu löten und per USB eben die Möglichkeit 
alles schön versorgen zu können. Als Experimentier-Platform schön 
geeignet, und die IOs lassen sich ja auch noch einfach abgreifen.

Kurzum :

 - Schönes CP/M Emulation-Nostalige-Projekt
 - Einfache Platform zum Aufbau und Experimentieren eines Mini-Computers

Daher will ich auch son Dingen :-)

von Peter Sieg (Gast)


Lesenswert?

@Jörg: Prima! Mit deiner Erfahrung und Vorkenntnissen bin ich gespannt!
Und der Herbst kommt ja auch nach dem Sommer ;-) Da kann wieder mehr 
gebastelt werden..

Ansonsten freue ich mich aber ersteinmal auf Platine Version 1 zum etwas
stabileren Aufbau des Originals mit Komm. und Stromversorgung über USB..

Peter

von Uhu U. (uhu)


Lesenswert?

Joerg Wolfram schrieb:
> Letztendlich finde ich das Ganze doch so interessant, dass ich ein
> "Parallelprojekt" zumindest anfangen werde.

Dann eröffne aber bitte auch einen Extra Thread dafür.

von Joerg W. (joergwolfram)


Lesenswert?

@Uhu

keine Sorge, dafür habe ich schon einen eigenen...

Jörg

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

@alle

Die Überarbeitung der Schaltung und dem Layout der Version 1.0 sind nun 
abgeschlossen. Wie zu sehen, sind nicht alle Änderungen berücksichtigt. 
Speziell die Variante mit dem zusätzlichen Busstecker hätte größere 
Änderungen bedeutet.

Zur Bestellung der Platinen:
Alle die bei mir Platinen sowie Bauelemente bestellt haben müßten nun 
eine Mail in Ihrem Postfach haben. Wer keine Mail bekommen hat, der hat 
noch nicht bestellt oder ich habe ihn übersehen, dann bitte wie schon 
oben beschrieben nochmal wiederholen. Auf gleichem Wege bekommt ihr das 
EEPROM File für den FT232 und eine kleine Hardwaredoku.

Joe

von Michael_ (Gast)


Lesenswert?

>Es ist im
>Prinzip ja alles dafür da. 128KByte RAM, externer Speicher (in Form
Mich wundert schon eine Weile, wie man mit dem 4256 CP/M machen will. 
Das sind nicht 128KByte, sondern 128K B i t! Also 16 KByte( x8 ).
Mit 8 Adress und 4 Datenleitungen ist da nicht mehr drin.
http://www.datasheetcatalog.org/datasheet/hynix/HY534256ALJ.pdf
Ich lasse mich auch eines besseren belehren.

von kruemeltee (Gast)


Lesenswert?

Schaut euch mal 512k AS6C4008 + 74HC374 + 74HC138 an. Ist nicht teuer 
und gibt sogar banked her :)

von nixKönner (Gast)


Lesenswert?

ich weiß ncht Michael, aber ein 256 KBit x 4 DRAM könnten gut 1024 KBit 
sein, heißt durch 8: 128 KB (steht im DB: 262144 x 4 Bit), und die 
Leitungen sind Zeile und Spalte, sollte so stimmen.
Für ein Byte sind immer zwei Lese-/Schreibzugriffe nötig.
Ich hoffe, ich habe kein Blödsinn erzählt, steht ja tw. auch hier im 
Thread.

von Carsten S. (dg3ycs)


Lesenswert?

Hi,

Michael_ schrieb:
>>Es ist im
>>Prinzip ja alles dafür da. 128KByte RAM, externer Speicher (in Form
> Mich wundert schon eine Weile, wie man mit dem 4256 CP/M machen will.
> Das sind nicht 128KByte, sondern 128K B i t! Also 16 KByte( x8 ).
> Mit 8 Adress und 4 Datenleitungen ist da nicht mehr drin.
> http://www.datasheetcatalog.org/datasheet/hynix/HY534256ALJ.pdf
> Ich lasse mich auch eines besseren belehren.


Wie schon vom Vorschreiber angedeutet:

Hier liegst du ziemlich daneben...
Und irgendwie kann ich deiner Rechnung auch nicht ganz folgen:
Normal ist ja folgendes:
Mit 8 Adressleitungen kannst du 2^8, also 256 Adressen selektieren.
Jede dieser Adressen enhält aber eine "Busbreite" an Bits. In diesem 
Fall also vier. Im Ergebnis also 256 Adressen * 4 Bit = 1024 Bit
1024 Bit : 8 = 128Byte! (Also weder das Ergebnis deiner REchnung, noch 
irgendeine sonst sinnvolle Angabe)

Also passt irgendetwas nicht...
Die Lösung: Bei diesem Baustein sind die Adressleitungen multiplext. 
Ausserdem sind es neun, nicht acht! (A0-A8) Die Adresse besteht aus zwei 
je 9 Bit breiten Adresstelegrammen. Somit besteht die Möglichkeit 2^9 * 
2^9 = 2^18 Adressen zu Selektieren. (512*512 = 262144)
Jede dieser Adressen enthält eine "Busbreite" an Speicherzellen, also in 
diesem Fall vier Bit. Somit hat der Baustein 2^18 * 4 = 1048576 Bit, was 
dann 128 KB ergibt.

(Rechnung: 1048576 : 8 = 131072 Byte. Ein KB sind 1024 Byte, folglich 
ergibt sich daraus 131072 : 1024 = 128, also 128KB)

Gruß
Carsten

von Joerg W. (joergwolfram)


Lesenswert?

Eine weitere Alternative für die DRAMs wäre, einen optionaler SOJ auf 
DIL Adapter mit vorzusehen. Dann könnte man auch alte PS/2 Module 
ausschlachten.

Jörg

von bix (Gast)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> Die Überarbeitung der Schaltung und dem Layout der Version 1.0 sind nun
> abgeschlossen. Wie zu sehen, sind nicht alle Änderungen berücksichtigt.

Spess schrieb:
> Außerdem sieht mir der Isolationsabstand etwas klein aus.

Der von Spess festgestellte zu geringe Isolationsabstand bedarf noch der 
Korrektur. Also in den Polygon-Eigenschaften den Wert "Isolate" auf 
mindestens 1 mm einstellen beziehungsweise den Wert, den der 
Leiterplattenfertiger vorgibt.

(Siehe Screenshot, hier habe ich 40 mil bzw. 0.04 Inch eingestellt, was 
etwa 1 mm entspricht.)

Die Beschriftung sollte als Vektorfont mit einer Größe von 50 mil und 
Ratio von mindestens 20 % ausgeführt sein, sonst sind die Linien zu dünn 
und die Beschriftung wird komplett weggeätzt.

Da die Größeneinheit auf Inch eingestellt ist, wären das folgende 
Befehle.

change font vector
change size 0.05
change ratio 20

Den Unterschied sieht man auf dem Screenshot "Font". Oben links sieht 
man das Wort "Reset" nach der Änderung, unten vor der Änderung.

Der DRC meckert dann auch nicht mehr daran herum.

Viele Grüße, bix

von spess53 (Gast)


Lesenswert?

Hi

>Der von Spess festgestellte zu geringe Isolationsabstand bedarf noch der
>Korrektur. Also in den Polygon-Eigenschaften den Wert "Isolate" auf
>mindestens 1 mm einstellen beziehungsweise den Wert, den der
>Leiterplattenfertiger vorgibt.

Man muss allerdings auch nicht übertreiben. Mehr als 25mil brauchst du 
nicht. Und das sollte auch jeder Hersteller können.

MfG Spess

von Höhlenmaler (Gast)


Lesenswert?

Mein erster Computer mit CP/M 2.2 war voll Eigenbau und hatte 4 Karten 
im Einschubgehäuse.

Auf der ersten Karte waren nur der Z80 mit Quarz und die PIO zum 
Anschluss der selbst gebauten Voll-Tastatur.
Die zweite Karte hatte 32 DRAM Chips mit je 16Kx1, eine Refreshlogik in 
TTL, 4 NiCd AA Zellen als Notstromversorgung und einen NE555 mit 10uH 
Drossel als Stepupwandler. Weil mir hier zwei Gatter fehlten, aber kein 
Platz vorhanden war, hab ich mit etwas Diodenlogik nachgeholfen.
Die dritte Karte enthielt eine CTC und ein diskret aufgebautes 
Kassettenrekorder Interface.
Die vierte war die Grafikkarte mit 2kByte RAM für 24 Zeilen mal 64 
Zeichen, viel TTL und einem Kanal 3 Modulator. Noch jetzt erinnere ich 
mich, wie ich in der Badewanne lag und auf Kästchenpapier die 256 
Zeichen aufgemalt und daneben die Hexcodes geschrieben habe.
Das BIOS war auch selbst geschrieben, nach einer kaum lesbaren 
Interfacebeschreibung auf braunem Thermokopiepapier aus irgendeiner 
Zeitschrift.

Der Computer war ein Spitzenteil womit ich anfangs in Pascal und später 
in C programmiert habe. Die 64kByte DRAM teilten sich Betriebssystem, 
Arbeitsspeicher und RAM-Disk. Der C-Compiler bestand aus zwei COMs die 
man nacheinander vom Kassettenrekorder in die RAM-Disk laden musste um 
so den Quelltext zu kompilieren.

Übrigens wurden davon bestimmt 10 Stück nachgebaut und ich habe 
zumindest den Aufwand daran verdient. Vom Spaß nicht zu reden.

Die Leiterplatten-Layouts wurden mit Tusche per Hand auf karierten 
Karton gemalt und dann im Kontaktverfahren auf Film übertragen.

Und ja, wir haben schon mit Messer und Gabel gegessen.

von Michael_ (Gast)


Lesenswert?

>(Rechnung: 1048576 : 8 = 131072 Byte. Ein KB sind 1024 Byte, folglich
>ergibt sich daraus 131072 : 1024 = 128, also 128KB)
Richtig!
>Die Leiterplatten-Layouts wurden mit Tusche per Hand auf karierten
>Karton gemalt und dann im Kontaktverfahren auf Film übertragen.
Ja, das waren noch Zeiten. Kenne ich auch noch. Bis zur 256KByte 
RAM-Floppy habe ich es auch noch geschafft.
Aber das war dann mausetot als die Übermacht von AMIGA und IBM-PC kam!
Ich denke auch mit Recht!

von Peter S. (petersieg)


Lesenswert?

Hmm.. mit Recht..?

Nun, ich denke.. was die graphisch und spielerischen Aspekte und 
vorallen Dingen die audiovisuellen, erstklassischen Demos angeht.. 
Amiga=klares JA.
(Inzw. ja auch auf der PC Plattform ein beliebtes Genre)
Aber ansonsten.. ist doch inzw. das 'Netz' der Computer.. soll heißen 
ohne
E-Mail, Web, Streaming etc. wäre doch der Frontend=PC 'nur' ein 
graphisch, verspielter CP/M Rechner ;-)

Die 'Killerapplikationen'=Textverabeitung, Tabellenkalkulation, 
Datenbank gab es 'damals' auch schon (Wordstar, Multiplan, dbase).
Und mit einem ASCII basierten Mini-Linux kann man auch ohne 
schnick-schnack Mails lesen und schreiben und Webseiten lesen etc.

Also Inhaltlich/Funktional sind die Urgestalten der CP/M Ära gar nicht 
soo
weit weg.. und manchmal sicher noch einfacher zu verstehen und zu 
kontrollieren.. nur Kiddies kann man damit schwer hinter dem Ofen 
vorlocken ;-) Dazu muß es ja heute klickibund und animiert sein.. - 
Inhalt: Nebensache - ;-)

Sorry,
Peter

von Uhu U. (uhu)


Lesenswert?

Ja und mit beweglichen Lettern drucken konnte man schon im 15. 
Jahrhundert...

von Stefan (Gast)


Lesenswert?

Das Evaluation Kit "At XMega XPlain" wäre vielleicht das richtige für 
euch. Gibt's bei Reichelt für ca. 36€.

von Stefan (Gast)


Lesenswert?

Hier gibt es die Beschreibung zu dem Board:
http://www.atmel.com/dyn/resources/prod_documents/doc8203.pdf

Mit 8MB Flash dürfte sich mit CPM wohl einiges anfangen lassen.

von Uhu U. (uhu)


Lesenswert?

Stefan schrieb:
> Mit 8MB Flash dürfte sich mit CPM wohl einiges anfangen lassen.

Eher nicht.

von (prx) A. K. (prx)


Lesenswert?

Uhu Uhuhu schrieb:

>> Mit 8MB Flash dürfte sich mit CPM wohl einiges anfangen lassen.
>
> Eher nicht.

Wieso nicht? Als Massenspeicher. Durchaus typisch für CP/M waren zwei 
Floppy-Disk-Laufwerke mit 160KB.

von Pieter (Gast)


Lesenswert?

moin moin,

vorsicht, 8MB war doch die maximale Größe je LW die CP/M verwalten 
konnte.
WordStar konnte nur Dateien bis 512KB verarbeiten.
Meine RAM-Disk hatte zuletzt 2BM mit 64Stück U61000.

MfG
Pieter

von Uhu U. (uhu)


Lesenswert?

A. K. schrieb:
> Wieso nicht?

Weil dann erst ein extra Flash-Filesystem-Treiber für das interne Flash 
her müßte. D.h., mit dem Image, das auf dem Brettchen laufen soll, wird 
das nix.

Man müßte erst ein maßgeschneidertes CP/M zusammenfrickeln.

von (prx) A. K. (prx)


Lesenswert?

Verstehe ich nicht. Ein normales CP/M benötigte einen Floppy-Treiber im 
BIOS. Dieses CP/M bräuchte einen Flash-Treiber ohne Filesystem, im BIOS 
oder (vorzusgweise) im Emulator. Das Filesytem bringt CP/M selber mit - 
muss ja kein FAT sein.

von Uhu U. (uhu)


Lesenswert?

OK, mit dem Filesystem hast du recht.

Die SD-Karte kann man sich trotzdem nicht sparen, wenn man die Daten mit 
den CP/M-Tools ins System bringen will.

Aber ich denke, weitere Debatten hier über derlei Verbesserungen 
erübrigen sich trotzdem. Hier geht es darum, für das von Peter Sieg 
vorgeschlagene System ein Platinchen zu basteln.

Wem das nicht reicht, für den gilt das im Zusammenhang mit dem eZ80 
Gesagte: Beitrag "Re: CP/M auf ATmega88"

Für mich ist das hier wirklich ein reines Retro-Projekt. Ich habe nicht 
vor, mit CP/M ernsthaft zu arbeiten.

von Martin (Gast)


Lesenswert?

... keine Sorge, dafür habe ich schon einen eigenen ...

Hallo Joerg,

wo kann ich deinen Thread finden?

Martin

von Joerg W. (joergwolfram)


Lesenswert?

Hallo Martin,

sofern überhaupt Interesse daran besteht, würde ich das im
ChipBasic2 Thread diskutieren.
Hier geht es mehr oder weniger darum, das Teil 1:1 nachzubauen.

Jörg

von Martin (Gast)


Lesenswert?

@ Joerg

OK.

von bix (Gast)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> @alle:
> Wie Peter schon in beiden Foren geschrieben hat, nehme ich die
> Bestellungen für die AVR CP/M Platinen entgegen. Dazu bitte Eure
> benötigte Stückzahl, Eure Mailadresse sowie die Versandadresse über
> „Feinmechaniker“ an mich senden. Weiterhin würde ich die notwendigen
> SD-Card Sockel mitbestellen.

Kurz von Torschluss nochmal nachgefragt...

Wurden die letzten Änderungen in das Layout übernommen 
(Isolationsabstand, Beschriftung?). Da ich nichts mehr gehört habe, habe 
ich die Änderungen mal eingezeichnet (in die Version vom 6.6.2010), ein 
paar schiefe Leitungen gerade gezogen und die Beschriftung für Top und 
Bottom-Layer hinzugefügt.
Der DRC läuft nun sauber durch.

Beim Durchsehen der Software fiel mir auf, dass man einige Signale 
günstiger verbinden kann, um den Zugriff auf das RAM zu beschleunigen. 
Man muss dann nicht so viele Bits per Software einzeln zusammen setzen.

Um jedoch am Original-Layout nichts zu ändern, habe ich noch zwei 3*2 
Stiftleisten hinzugefügt, die nirgends angeschlossen sind. Es ist aber 
möglich, später durch Auftrenenn von vier Leitungen und Anschluss an die 
Stiftleisten zwischen original Layout (Hardware Version 1) und 
optimiertem Layout umzuschalten (Hardware Version 2), falls man das 
will.

Wie gesagt, es ist optional und freiwillig. Ändert man nichts, läuft 
alles wie bisher, so hat man keinen Nachteil.

Die optionalen Änderungen sind im beiliegenden Text "AVRCPM_HW_Rev2" 
beschrieben sowie ein kurzes Beispiel, wie die Zugriffsroutinen auf das 
RAM sich vereinfachen (dram_getnibble und dram_sendnibble).


Noch eine Frage:
Wie lange dauert die Freischaltung zum Forum normalerweise? Ich kriege 
einfach keine Bestätigungsmail und kann mich nicht anmelden, möchte aber 
auch bestellen.

von bix (Gast)


Angehängte Dateien:

Lesenswert?

Huch
Das Schaltbild wollte ich als PNG anhängen. Hab mich verklickt, Anhänge 
zeigt die Vorschau leider nicht an - sorry.

von Ronny M. (hobby-coder)


Lesenswert?

@bix: normalerweise bekommst du eine infomail, das du registriert bist. 
versuche dich einfach mal einzuloggen...

von Uhu U. (uhu)


Lesenswert?

bix schrieb:
> Wie lange dauert die Freischaltung zum Forum normalerweise?

Welches Forum?

von bix (Gast)


Lesenswert?

Ronny Minow schrieb:
> normalerweise bekommst du eine infomail, das du registriert bist.
> versuche dich einfach mal einzuloggen...

Die Infomail habe ich nicht bekommen. Wenn ich trotzdem versuche mich 
anzumelden, wird angezeigt "Login fehlgeschlagen".

Uhu Uhuhu schrieb:
> Welches Forum?

Das beste Forum der Welt meine ich natürlich. Eben genau dieses hier ;-)

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@bix
keine Torschlusspanik, ist doch noch ein Tag Zeit.  Die letzten 
Änderungen (Beschriftung, Isolationsabstand) sind schon eingearbeitet. 
Weiterhin noch ein 100n C zwischen /DTR und Reset. Somit könnte der AVR 
mit einem Bootloader und Reset über /DTR versehen werden und die 
Programmierung über ISP entfällt. Damit sollte die Gefahr, die SD-Karte 
versehentlich mit 5V zu versorgen, genommen sein. Die Idee mit dem 
kleinen Steckfeld ist gut, ich habe sie übernommen.

@alle
Wer nur als Gast hier im Forum ist, und dennoch bei mir bestellen möchte 
bitte das über diese Mail tun: info (at) amesys (dot) de

Joe

von bix (Gast)


Lesenswert?

Joe G. schrieb:
> Die Idee mit dem
> kleinen Steckfeld ist gut, ich habe sie übernommen.

Hallo Joe,

danke für die schnelle Antwort.

Damit das mit den Stiftleisten später funktioniert (auf Hardware Version 
2 Jumpern), habe ich die im Text mit (*) gekennzeichneten Pins des 
ATMega so auf die Lötseite der Platine verlegt, dass man die Leitungen 
später einfach durchtrennen kann (erkennbar an den quardatischen 
"Vias").

Ist erst die IC-Fassung aufgelötet, kommt man auf der Bauteileseite ja 
später nicht mehr an die Leitungen heran.
Es sind beim AVR die Pins 5, 19, 24 und 27.
Pin 19 musste ich vom AVR zum RAM verlegen, damit der Pin zum AVR 
einzeln durchtrennt werden kann, ohne die restliche Leitung zu 
unterbrechen (s. Bild avrcpm_brd.png).
1
; ATmega8 (HW-Rev.2)
2
; 
3
; 
4
;             +-------------v-------------+ 
5
;      Reset\ | 01 (RESET)         PC5 28 | CAS\
6
;      TXD    | 02 (RXD)           PC4 27 | RAS\ (*)
7
;      RXD    | 03 (TXD)           PC3 26 | D3
8
;      OE\    | 04 PD2             PC2 25 | D1
9
;  (*) WE\    | 05 PD3             PC1 24 | D2   (*)
10
;      SD_CS\ | 06 PD4             PC0 23 | D0
11
;      VCC    | 07 VCC             GND 22 | GND
12
;      GND    | 08 GND            AREF 21 | n.c.
13
;      Q20MHz | 09 (XTAL1)        AVCC 20 | VCC
14
;      Q20MHz | 10 (XTAL2)   (SCK) PB5 19 | A8 / SD_SCK (*)
15
;      A5     | 11 PD5      (MISO) PB4 18 | A0 / SD_MISO
16
;      A6     | 12 PD6      (MOSI) PB3 17 | A1 / SD_MOSI
17
;      A7     | 13 PD7             PB2 16 | A2
18
;      A4     | 14 PB0             PB1 15 | A3
19
;             +---------------------------+

E-Mail mache ich gleich fertig.

Danke und Grüße

von Peter Sieg (Gast)


Lesenswert?

@bix / Joe: Prima!

Peter

von Peter Sieg (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch mal eine andere 'Floppy' = diskimage für AVR CP/M, mit 
Spielen:
* Mastermind (mmind)(BDS-C Source vorhanden)
* Tic-Tac-Toe (ttt2)(BDS-C Source vorhanden)
* othello (22k Fortran Source vorhanden)
* othello (12k BDS-C Source vorhanden)
* stone (BDS-C Source vorhanden)

Solche images werden ja laut orig. Anweisung direkt mit:
dd if=<image> of=<device> bs=512
übertragen. VORSICHT! Absolut sicher sein, das <device> auch die 
richtige
SD Karte ist!! Besser vorher alle anderen Wechseldatenträger abziehen!
(Ein evtl. vorhandenenes Dateisystem wird gnadenlos überschrieben und 
man hat ein ideales Objekt für forensische Analysen und Neuformattierung 
;-) )

Die cpmtools im Original gibts übrigens hier:
http://www.moria.de/~michael/cpmtools/

Peter

von Peter Sieg (Gast)


Angehängte Dateien:

Lesenswert?

Soo ähnlich sollte die voll bestückte Platine dann aussehen ;-)
Leider kennt Eagle3D die USB Buchse (noch) nicht und auch einige C's 
sehen
etwas komisch aus.. na ja.. ;-)

Peter

von bix (Gast)


Lesenswert?

Peter Sieg schrieb:
> Soo ähnlich sollte die voll bestückte Platine dann aussehen ;-)

Schööön.

Ich freu mich schon darauf, den FT232 zu löten ;-)

von Uhu U. (uhu)


Lesenswert?

bix schrieb:
> Ich freu mich schon darauf, den FT232 zu löten ;-)

Das ist gar nicht so schlimm. Besorg dir ein SMD-Flußmittel, wie z.B. 
Chipquick SMD-4300-TF. Damit gehts fast vonselbst.

Für alte Knacker ist eine Stirnlupe ganz hilfreich, ein Binokular ist 
ganz super.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Das ist doch eine gute Möglichkeit sich in SMD löten zu versuchen. Ich 
kann aber (nur für alte Knacker) den FT232 schon bestücken.

Joe

von Peter Sieg (Gast)


Lesenswert?

Hier noch eine Rückmeldung vom Entwickler:

---

Hiya,

Damn, I never expected such a thread to grow out of something this silly
:) Even with pre-made PCB's, wow.

I use something which calls itself 'Z80 assembler version 1.8', which is
in the Debian-repositories as 'z80asm'. I thing you can use just about 
any
sane Z80 assembler, though.

Jeroen

---

Peter

von Karl H. (kbuchegg)


Angehängte Dateien:

Lesenswert?

Ich hab mal angefangen das z80.asm auseinanderzunehmen um zu sehen, wo 
es noch hapert.

Der entscheidende Teil kommt ab Zeile 1766, dort sind die ganzen 
Ausführungs-'einheiten' zusammengefasst, die die eigentliche Arbeit 
machen.

Ich hab da jetzt mal eine OP-Code Tabelle mit reingenommen, aus der 
hervorgeht, welcher Befehl welche Flags beeinflusst. Im Moment bin ich 
dran, die vorhandenen Funktionseinheiten durchzugehen und zu 
kontrollieren, ob die Flagbehandlung mit dieser Tabelle übereinstimmt.

Das Parity-Flag wird leider tatsächlich ziemlich stiefmütterlich 
behandelt. So wie das gemacht ist, geht das gar nicht. Es reicht einfach 
nicht aus, die Parity nur bei einer direkten Parity-Abfrage auszuwerten. 
Da muss auf jeden Fall noch nachgebessert werden.


Wenn sich wer an der Arbeit beteiligen will ....

Bei jeder Funktionseinheit steht dabei, von welchen Opcodes sie benutzt 
wird. Eine abschliessende Kommentarzeile
1
; OK
weist darauf hin, dass diese Funktion schon überprüft ist. Im Gegensatz 
zu
1
; Not yet checked

Wenn sich wer die Mühe macht, und die noch fehlenden OpCodes zu 
implementieren, bitte auf die Flags achten. Die Flagbehandlung kann bei 
ähnlichen Befehlen unterschiedlich sein! Das sieht man in der 
OpCode-Übersichtstabelle:
1
      RLC  A
2
      RLCA

haben zwar auf den ersten Blick dieselbe Funktion, die Behandlung des 
Parity-Flags ist aber anders.

Im Zuge der Kontrolle tausche ich auch die magischen Bitkonstanten für 
die Flags gegen besser lesbare 1<<irgendwas Konstrukte aus.

von Peter Sieg (Gast)


Lesenswert?

@Karl Heinz Buchegger: Super!! Leider habe ich von Z80 keine Ahnung..
Was ich aber schon geändert hatte, war die dynamische Berechnung der
Bautrate anhand der Quarzfrequenz:
1
.equ F_CPU = 20000000                           ; system clock in Hz
2
.equ BAUD  = 38400                              ; baud rate
3
 
4
; Berechnungen
5
.equ UBRR_VAL   = ((F_CPU+BAUD*8)/(BAUD*16)-1)  ; clever rounding
6
7
...
8
9
; - Init serial port
10
  ldi temp,$18
11
  sts ucsr0b,temp
12
  ldi temp,$6
13
  sts ucsr0c,temp
14
  ldi temp,0
15
  sts ubrr0h,temp
16
  ldi temp,UBRR_VAL
17
  sts ubrr0l,temp

Der so geänderte Code assembliert und läuft (selbst getestet).
Ich empfehle allen Platinenbauer den Quarz zu sockeln.. dann man man 
später
einfacher auf einen 32MHz Quarz wechseln..

Den Lochrasteraufbau werde ich so original belassen (20MHz).. da kann 
ich
dann aber sehr gerne auch verbesserte Firmware testen..

Bei den Platinen werde ich das dann zuerst mit 20MHz aufbauen, danach 
mal mit 32MHz probieren, wie viel das bringt.. und danach die weiter 
oben beschriebene Pin-Änderung und read_nibble/write_nibble probieren..
Muß mal sehen, ob es da irgendein fertiges Benchmark-Programm gibt..

Peter

von Karl H. (kbuchegg)


Lesenswert?

Peter Sieg schrieb:

> Was ich aber schon geändert hatte, war die dynamische Berechnung der
> Bautrate anhand der Quarzfrequenz:

Machs bitte gleich richtig und rechne das High Register auch aus.
An solchen Stellen bitte auch immer gleich die magischen Konstanten 
austauschen, damit man auch ohne Datenblatt zumindest eine Vorstellung 
davon bekommt, was da ein/aus geschaltet wird.
1
; - Init serial port
2
  ldi temp, (1<<TXEN0) | (1<<RXEN0)
3
  sts ucsr0b,temp
4
  ldi temp, (1<<UCSZ01) | (1<<UCSZ00)
5
  sts ucsr0c,temp
6
  ldi temp, HIGH(UBRR_VAL)
7
  sts ubrr0h,temp
8
  ldi temp, LOW(UBRR_VAL)
9
  sts ubrr0l,temp

von Uhu U. (uhu)


Lesenswert?

Peter Sieg schrieb:
> Leider habe ich von Z80 keine Ahnung..

Wenn du den 8080 kannst, ist das kein Problem. Der Z80 hat ein paar 
Befehle mehr und einen zweiten Registersatz, auf den mit einem der 
Spezialbefehle umgeschaltet werden kann.

Echte 8080-Programme laufen auf ddem Z80 ohne Änderung.

von Leo C. (rapid)


Lesenswert?

Ich habe den Thread hier von Anfang an mitverfolgt, hatte aber 
eigentlich nicht vor, mich zu beteiligen. Leider habe ich gestern in den 
von kbuchegg geposteten Source geschaut...

Gestern Abend habe ich von einem alten Speicherriegel ein DRAM (4Mx4, 
3,3V, SOJ) runtergeholt, und auf einen Lochrasteradapter fürs Steckbrett 
gelötet. Leider habe ich keinen Mega88 mehr gefunden. Deshalb bin ich 
gerade dabei, den Source auf Mega8 anzupassen.

Als Assembler benutze ich den avra unter Linux. Die aktuelle Release hat 
ein paar Macken, die in der Git-Version behoben sind.


Karl heinz Buchegger schrieb:

> Ich hab da jetzt mal eine OP-Code Tabelle mit reingenommen, aus der
> hervorgeht, welcher Befehl welche Flags beeinflusst. Im Moment bin ich
> dran, die vorhandenen Funktionseinheiten durchzugehen und zu
> kontrollieren, ob die Flagbehandlung mit dieser Tabelle übereinstimmt.

Danke dafür. Das hat mir den Einstieg deutlich erleichtert.

> Das Parity-Flag wird leider tatsächlich ziemlich stiefmütterlich
> behandelt. So wie das gemacht ist, geht das gar nicht. Es reicht einfach
> nicht aus, die Parity nur bei einer direkten Parity-Abfrage auszuwerten.
> Da muss auf jeden Fall noch nachgebessert werden.

Entweder verstehe ich da noch etwas nicht, oder die Sache wird so, wie 
Sprite_tm sich das vorgestellt hat, nicht funktionieren.
1
do_fetch_af:
2
  mov opl,z_flags
3
  mov oph,z_a
4
  rcall do_op_calcparity
5
  andi opl,~(1<<ZFL_P)
6
  sbrs temp2,0
7
   ori opl,(1<<ZFL_P)
8
  ret

Der Code wird bei "PUSH AF" verwendet. Hier wird das Parityflag 
berechnet und im Statusregister im kombinierten P/V-Flag gespeichert. 
Anschließend wird das Register auf dem Stack gespeichert.

Wenn die letzte OP vor dem PUSH eine arithmetische war, ist das V-Flag 
nach dem POP verloren (durch P-Flag vom zuletzt gespeicherten parityb 
überschrieben).

Wenn ich richtig liege, fallen mir 3 Lösungsmöglichkeiten ein.

1. Den Parity-Status (parityb) beim PUSH in einem der ungenutzten
   Statusregisterbits (Bit 3 oder 5) speichern.

2. Bei jedem Befehl merken, ob Parity gültig ist, und den Merker in
   do_fetch_af auswerten.

3. Parity bei den entsprechenden Befehlen immer sofort berechnen und das
   P/V-Flag setzen.

Persönlich tendiere ich zu 3. Im 8080-Befehlssatz sind das ja nicht so
viele Befehle, wenn auch häufig vorkommende.

von Peter Sieg (Gast)


Lesenswert?

Leo C. schrieb:
> Ich habe den Thread hier von Anfang an mitverfolgt, hatte aber
> eigentlich nicht vor, mich zu beteiligen. Leider habe ich gestern in den
> von kbuchegg geposteten Source geschaut...
>
> Gestern Abend habe ich von einem alten Speicherriegel ein DRAM (4Mx4,
> 3,3V, SOJ) runtergeholt, und auf einen Lochrasteradapter fürs Steckbrett
> gelötet. Leider habe ich keinen Mega88 mehr gefunden. Deshalb bin ich
> gerade dabei, den Source auf Mega8 anzupassen.
>
> Als Assembler benutze ich den avra unter Linux. Die aktuelle Release hat
> ein paar Macken, die in der Git-Version behoben sind.

Hallo und herzlich willkommen im Mini AVR + CP/M Retro Thread ;-)

Peter

von Leo C. (rapid)


Lesenswert?

Danke für die Begrüßung. Ich habe übers Wochenende Besuch und bin 
deshalb
noch nicht weiter gekommen. Nur ganz kurz:

Der AVRA funtioniert leider nicht richtig. Letzte Nacht habe ich dann
in meiner Verzweiflung den Atmel Windows Assembler unter Wine 
ausprobiert. Funktioniert. Prost.
Aber mein Mega8 geht noch nicht. :-(

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Hallo,

um eine Struktur in die nun beginnenden Soft- und Hardwareänderungen zu 
bringen hier mein Vorschlag zur Projektseite:
http://www.mikrocontroller.net/articles/AVR_CP/M

Gruß Joe

von Martin (Gast)


Lesenswert?

Auf dem Schaltplan (http://www.mikrocontroller.net/articles/AVR_CP/M) 
ist kaum etwas zu erkennen?

von Peter Sieg (Gast)


Lesenswert?

@Joe: Prima! Bei mir laufen gerade die Urlaubsvorbereitungen.. ;-)
Daher z.Z wenig Zeit.. bin aber schon mal sehr gespannt auf die Platinen
und wie sich die Firmware bis dahin weiterentwickelt hat..

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Martin
@alle

Alle aktuellen Dateien liegen hier auf dem SVN Server 
http://www.mikrocontroller.net/svn/list

Joe

von Karl H. (kbuchegg)


Lesenswert?

Leo C. schrieb:


> 3. Parity bei den entsprechenden Befehlen immer sofort berechnen und das
>    P/V-Flag setzen.
>
> Persönlich tendiere ich zu 3. Im 8080-Befehlssatz sind das ja nicht so
> viele Befehle, wenn auch häufig vorkommende.

Das ist auch meine Präferenz.
Bei den 'OK' markierten Sequenzen ist das schon so.

von Leo C. (rapid)


Lesenswert?

Karl heinz Buchegger schrieb:
>> 3. Parity bei den entsprechenden Befehlen immer sofort berechnen und das
>>    P/V-Flag setzen.

> Bei den 'OK' markierten Sequenzen ist das schon so.

Hmm, ich meine, daß man hier:
1
do_op_inc:
2
  andi  z_flags, (1<<ZFL_C)       ; bis auf Carry alles auf 0
3
  ldi   temp, 1
4
  add   opl, temp
5
  in    temp, sreg
6
  mov   parityb, opl
7
  bst   temp, AVR_Z               ; Zero
8
  bld   z_flags, ZFL_Z
9
  sbrc  opl, 7                    ; Sign
10
  ori   z_flags, (1<<ZFL_S)       
11
  bst   temp, AVR_H               ; Half Sign
12
  bld   z_flags, ZFL_H
13
  bst   temp, AVR_C               ; Overflow
14
  bld   z_flags, ZFL_P
15
  ret
das Zwischenspeichern des Operanden in parityb sparen kann, und
bei den Befehlen AND/OR/XOR/DAA das Parityflag direkt berechnen muß.

Oder ich habe eben doch noch etwas übersehen...

von Karl H. (kbuchegg)


Lesenswert?

Leo C. schrieb:

> das Zwischenspeichern des Operanden in parityb sparen kann, und
> bei den Befehlen AND/OR/XOR/DAA das Parityflag direkt berechnen muß.

Mag sein.
Ich hab mich noch nicht damit beschäftigt, wo man im Code noch einsparen 
bzw. verändern könnte/müsste.
Ich wollte nicht zu viele Veränderungen auf einmal machen. Erst mal eine 
Bestandsaufnahme bzw. den Code in eine etwas besser lesbare Form 
giessen.
Wenn im ersten Durchgang diese Dinge hier alle verschwunden sind

  andi z_flags,0b11101100

und durch besser lesbare Konstrukte in expliziter Bitnamenschreibweise 
ersetzt sind,
wenn für alle bisherigen Ausführungseinheiten dabeisteht, von welchem 
Opcode sie benutzt werden und die Flags (bis auf das Parity Flag) 
überprüft sind,
dann wäre mein nächster Schritt, die Behandlung des Parity Flags in die 
relevanten OpCodes einzubauen
gefolgt von:
  * wo gibt es offensichtliche Verbesserungsmöglichkeiten
  * restliche OpCodes implementieren

Aber das Auseinanderpfriemeln des jetzigen Codes ist mühsam.

PS: Ich kann leider von hier nicht auf das SVN-Repositor zugreifen (Ich 
schätze mal, dass da eine Firewall was dagegen hat. Das dürfte ich aber 
beim Admin nicht durchbringen).

von Leo C. (rapid)


Lesenswert?

Karl heinz Buchegger schrieb :
> Mag sein.
> Ich hab mich noch nicht damit beschäftigt, wo man im Code noch einsparen
> bzw. verändern könnte/müsste.
> Ich wollte nicht zu viele Veränderungen auf einmal machen. Erst mal eine
> Bestandsaufnahme bzw. den Code in eine etwas besser lesbare Form
> giessen.

Ja das verstehe ich. Mir ging es auch nicht um einsparen im Sinne von 
Optimieren, sondern darum, daß der Code meiner Meinung nach fehlerhaft 
ist.
Ich wollte eigentlich da einsteigen, wo Du es vorgeschlagen hast und bin 
dann über die fehlerhafte P/V-Flag-Behandlung gestolpert. Es macht imho 
keinen Sinn, überall "; OK" dran zu schreiben, wenn man nachher nochmal 
alles umwerfen muß.

> PS: Ich kann leider von hier nicht auf das SVN-Repositor zugreifen (Ich
> schätze mal, dass da eine Firewall was dagegen hat. Das dürfte ich aber
> beim Admin nicht durchbringen).

Lesend gehts bei mir schon mal.

Inzwischen läuft mein Steckbrett-CP/M-AVR-Rechner. Mit ATmega8, 
12.288MHz und 3.3V. Falls jemand Interesse an meinen Anpassungen an 
Mega8 hat, würde die etwas polieren, und hier (oder im SVN) hochladen.

von Peter Sieg (Gast)


Lesenswert?

@Leo C.: Aber Sicher besteht daran Interesse!
Und ein Bild des Aufbaus wäre auch schön ;-)

Gruß Peter

von Karl H. (kbuchegg)


Lesenswert?

Leo C. schrieb:

> Ich wollte eigentlich da einsteigen, wo Du es vorgeschlagen hast und bin
> dann über die fehlerhafte P/V-Flag-Behandlung gestolpert. Es macht imho
> keinen Sinn, überall "; OK" dran zu schreiben, wenn man nachher nochmal
> alles umwerfen muß.

OK.
Ich dachte du willst das vereinfachen.

Hmm. die P/V Behandlung sollte meiner Meinung nach bei den paar 
Anweisungen schon stimmen. Auch darauf achten, dass dieses Flag eine 
Doppelbedeutung hat.

von Joerg W. (joergwolfram)


Lesenswert?

Soweit ich weiss, hat der 8080 nur ein P Flag und kein P/V. Das kam erst 
beim Z80. Damit sollten sich sogar beide Prozessoren auseinanderhalten 
lassen:
1
test:       sub    A               ;setzt A auf 0 (kein Overflow)
2
            jp     pe,code_8080    ;wenn A=0 dann ist Parity even
3
code_z80:   ....
4
5
6
code_8080:  ....

Jörg

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Peter Sieg schrieb:
> @Leo C.: Aber Sicher besteht daran Interesse!

Eigentlich machts ja keinen Sinn, den Mega8 zu nehmen. Bei 3,3V müßte 
man die L-Version nehmen, und die geht offiziell nur bis 8 MHz.

Andererseits passt das ja ganz gut zu diesem sinnlosen Projekt. :)

> Und ein Bild des Aufbaus wäre auch schön ;-)

Wieso? ;) Bei 2 ICs und einer SD-Karte gibts doch gar nichts zu sehen.
Ich habe keine brauchbare Kamera. Aber gestern Morgen war mein Besuch 
(mit Kamera) noch da, und da habe ich vorsorglich ein paar Bilder 
gemacht. Allerdings war das RAM da noch nicht verdrahtet.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Karl heinz Buchegger schrieb:

> Hmm. die P/V Behandlung sollte meiner Meinung nach bei den paar
> Anweisungen schon stimmen.

Da habe ich eben bedenken.

> Auch darauf achten, dass dieses Flag eine
> Doppelbedeutung hat.

Im jetzigen Programm werden V-Flag und P-Flag getrennt gespeichert.
V im Statusregister und P in "parityb".
Bei PUSH AF wird P ins Statusregister kopiert und auf den Stack 
gespeichert.
Nach einem anschließenden POP AF ist ein evtl. vorher berechnetes V-Flag 
hinüber.

Bei reinen 8080-Programmen dürfte das keine Rolle spielen, da sie ja 
kein
V-Flag kennen. Aber dann kann man sich die V-Flag-Ermittlung auch 
sparen.
Und bei (zukünftigen) Z80-Programmen wirds dann fehlerhaft.

Voller Z80-Befehlsatz wäre schon interessant, da z.B. Turbo Pascal nur 
auf Z80 läuft.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

So sieht sie aus, die erste bestückte Platine.

Joe

von Peter Sieg (Gast)


Lesenswert?

Sieht doch super aus!

Peter

von Markus (Gast)


Lesenswert?

Mal ne Frage, ohne euch ärgern zu wollen:
Warum habt ihr dem schönen Platinchen keinen VGA-Ausgang und PS2 Eingang 
gegönnt? Ein zweiter Atemga8 hätte diese Funktion gut erfüllt. Dann wäre 
es ein richtig schöner Stand-Alone Computer.

Gruß,
Markus

von Leo C. (rapid)


Lesenswert?

Markus schrieb:
> Mal ne Frage, ohne euch ärgern zu wollen:

Die Antwort findest Du ausführlichst, wenn Du den Thread hier liest.
Der zweite Teil wird schwierig...

von Leo C. (rapid)


Lesenswert?

Juchhu,
DDT kann jetzt Programme tracen.

Der DAA-Befehl hatte gefehlt, und im RST-Befehl war ein kleiner Fehler.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Ich habe im BIOS mal die Warmboot-Funktion ergänzt (CCP + BDOS neu 
laden).

Wer einen funktionierenden Warmboot haben möchte, kann das angehängte
BIOS installieren.

von Markus (Gast)


Lesenswert?

>>Warum habt ihr dem schönen Platinchen keinen VGA-Ausgang und PS2 Eingang
>>gegönnt? Ein zweiter Atemga8 hätte diese Funktion gut erfüllt. Dann wäre
>>es ein richtig schöner Stand-Alone Computer.

>Die Antwort findest Du ausführlichst, wenn Du den Thread hier liest.
>Der zweite Teil wird schwierig...

Man könnte ja auch ein zweit-Platinchen basteln. Auf der Seite sind da 
ja die RX-TX Anschlüsse zugänglich. Da könnte man ja ein Terminal 
anschließen:

http://www.serasidis.gr/circuits/TV_terminal/Small_TV_terminal.htm
http://tinyvga.com/avr-sdram-vga

von Martin (Gast)


Lesenswert?

In dem Assemblerfile "" sind einige Adressen festgelegt:

ccp:  equ  $3400+bias  ;base of cpm ccp
bdos:  equ  ccp+$806  ;base of bdos

Wo liegt den nun CP/M?

von Martin (Gast)


Lesenswert?

In dem Assemblerfile "bios.asm" sind einige Adressen festgelegt:

ccp:  equ  $3400+bias  ;base of cpm ccp
bdos:  equ  ccp+$806  ;base of bdos

Wo liegt den nun CP/M?

von spess53 (Gast)


Lesenswert?

Hi

BDOS gehört zum CP/M (+BIOS und CCP).

MfG Spess

von Martin (Gast)


Lesenswert?

Danke für die Antwort: ich habe jetzt eine Seite gefunden 
(http://www.dcast.vbox.co.uk/cpm.html) die näher auf die Adressen 
eingeht .

von Peter Sieg (Gast)


Lesenswert?

@Leo C.: Prima! Super, das jetzt auch der Warmstart geht.. kannst du 
bitte auch das assemblierte Bios.bin hier einstellen.. Welchen Z80 
Assembler hast du genommen (Link)?

Danke+Gruss aus Teneriffa,
Peter

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Peter Sieg schrieb:
> @Leo C.: Prima! Super, das jetzt auch der Warmstart geht.. kannst du
> bitte auch das assemblierte Bios.bin hier einstellen..

Das brauchst Du aber nicht auf Teneriffa? Hoffe ich doch für Dich.

> Welchen Z80 Assembler hast du genommen (Link)?

http://www.nongnu.org/z80asm/

Ich habe den genommen, der in meiner Linux Distri drin ist. Sprite_tm 
nimmt wohl den gleichen. Jedenfalls lief sein Makefile damit fehlerfrei 
durch.
Das Teil ist aber in der Tat etwas eigenartig.

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:

> Zu einem anderen Aufbau sehe ich das aber letztlich genauso.. was
> ein 'fauler' Kompromiss ist und viel Rechenpower kostet muß durch
> etwas besseres ersetzt werden.. Da kann man beim Ram auch z.B über SRAM
> nachdenken.. dann braucht man keinen Refresh mehr..

Mit dem Refresh habe ich mich letze Woche ausgibig beschäftigt. Der 
kostet
so gut wie nichts. Ich habe auch mal "hidden refresh" realisiert. Das 
lohnt
einfach nicht. Und für die Zeiten, in denen mal keine RAM-Zugriffe
sind (zB. Disk-I/O), bräuchte man den normalen Refresh doch noch.

Viel sinnvoller wäre es, die verwurstete Port-Zuordnung zu verbessern.

Wie's richtig gut geht, findet man (mal wieder) auf der auch hier 
allseits
bekannten Seite von Chan.

von TheMason (Gast)


Lesenswert?

@Leo

>Viel sinnvoller wäre es, die verwurstete Port-Zuordnung zu verbessern.


Dazu mal eine Frage.
Ist es nicht letztenendes egal wie die Port-Zuordnung zwischen AVR und 
DRAM ist ?
Es sind zwar die Adress-Leitungen vertauscht, aber im Prinzip macht es 
ja nichts aus, solang beim Schreiben und beim Lesen die gleiche 
Zuordnung verwendet wird. Oder hat das Auswirkungen auf den Refresh 
(sprich das sequentiell eine Row nach der anderen Refresht werden muß, 
und sobald Rows übersprungen werden gehen daten verloren oder ist das 
unabhängig davon das sie zu einem anderen Zeitpunkt (aber dann dennoch 
im selben zeitlichen Raster) refresht werden.
Also nach meinem Verständnis müsste es eig. egal sein wie die Zuordnung 
der Adress-Leitungen ist. Hauptsache sie ist beim Schreiben/Lesen 
gleich, und alle Rows werden im festen Raster (aber unterschiedliche 
Reihenfolge) refresht.
Ich gestehe aber das ich mir den DRAM-ASM Code noch nicht angeguckt 
habe. Hatte nur im Schaltplan gesehen das es etwas "Kraut und Rüben" 
war.

von Leo C. (rapid)


Lesenswert?

TheMason schrieb:

> Dazu mal eine Frage.
> Ist es nicht letztenendes egal wie die Port-Zuordnung zwischen AVR und
> DRAM ist ?

Im Prinzip schon. Das beweist ja auch die Originalschaltung.

Wenn aber zB. die 8 niederwertigen Adressleitungen auf einem Port liegen
würden, könnte man sie zusammen mit einem out-Befehl ausgeben.
Ansonsten muß man die Addresbits durch Bitschiebereien oder 
Einzelbit-tests
und -Sets auf die verstreuten Addressleitungen verteilen.

Beim ATmega88 kann man allerdings bei keinenm einzigen der 3 Ports alle
Bits zusammenhängend verwenden. Auf Port B liegt der Quartz, auf Port D
die serielle Schnittstelle, und Port C hat überhaupt nur 6 Bit (wenn man 
nicht auf Reset verzichten will, sonst halt 7).

Bei den Adressen kann man hier also gar nicht so viel verbessern.

Die Datenbits sind bei der Schaltung aber auch unglücklich verteilt.
Wenn man WE mit einer der Datenleitungen tauscht, liegen die 4 
Datenleitungen
auf dem unteren Nibble eines Bytes.

Dann kann man die zwei Hälften eines Bytes zB. so einlesen
1
  in  temp,PINC        ; 1. Nibble einlesen (untere Hälfte von PC)
2
  andi temp,0x0f       ; obere Hälfte wegmaskieren
3
  swap temp
4
5
        ;Adressen umschalten ...
6
7
  in  temp2,PINC       ; 2. Nibble einlesen
8
  andi temp2,0x0f
9
  or  temp,temp2       ; Beide Hälften zusammen

Zusammen 6 Befehle, 6 Takte.
Im Originalprgramm gibt es ein Unterprogramm, das zwei mal aufgerufen
wird:
1
;...
2
  rcall dram_getnibble  
3
  swap temp
4
5
        ;Adressen umschalten ...
6
7
  rcall dram_getnibble  
8
9
        ; ...
10
;...
11
12
dram_getnibble:
13
  andi temp,0xf0
14
  sbic pinc,ram_d0
15
   ori temp,0x1
16
  sbic pinc,ram_d1
17
   ori temp,0x2
18
  sbic pinc,ram_d2
19
   ori temp,0x4
20
  sbic pinc,ram_d3
21
   ori temp,0x8
22
  ret

Auch wenn man den Unterprogrammaufruf wegläßt (man könnte ja den Code 
direkt einfügen), sind das schon 1 + 2x9 = 19 Takte.

Die Adressen-Ausgabe und -Umschaltung kann man aber auch noch deutlich
optimieren. Auch ohne Harwareänderung.

Durch die Änderungen habe ich eine Geschwindigkeitsverbesserung bei 
CP/M-Programmen von fast 50% erreicht.

Den Code dazu will ich nachher noch posten. Jetzt ist erst mal Mittag.

von TheMason (Gast)


Lesenswert?

@Leo

Guten Hunger.

Na ja. Die Adress-Pin-Belegung ist wirklich nicht die glücklichste. Wär 
dann vllt was für eine Folge-Version :-)

von Peter Sieg (Gast)


Lesenswert?

@Leo C. nein, brauch ich hier nicht.. aber wenn ich zurueck bin.. :-)
Da faellt mir ein, das ich auch gerne das 2te asm Programm als BIN Datei
haette (war glaube ich cpm.asm -> cpm.bin), dann man ueber die cpmtools 
auch ersteinmal ohne z80 Assembler eine neues diskimage erstellen..

Das mit den 50% hoert sich ja schon mal super an!

Gruss Peter

von Leo C. (rapid)


Lesenswert?

TheMason schrieb:
> Na ja. Die Adress-Pin-Belegung ist wirklich nicht die glücklichste. Wär
> dann vllt was für eine Folge-Version :-)

Ja, nachdem ich mir das jetzt nochmal angeschaut habe, glaube ich auch,
daß eine neue Sortierung einiges bringen würde. An einen Punkt hatte ich
heute Mittag nicht gedacht: Die Originalroutinen sind auch deshalb 
langsam,
weil Sprite_tm viele NOPs im eingefügt hat. Alleine das weglassen der
überflüssigen NOPs dürfte den Zugriff schon deutlich beschleunigen.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Peter Sieg schrieb:
> @Leo C. nein, brauch ich hier nicht.. aber wenn ich zurueck bin.. :-)
> Da faellt mir ein, das ich auch gerne das 2te asm Programm als BIN Datei
> haette (war glaube ich cpm.asm -> cpm.bin), dann man ueber die cpmtools
> auch ersteinmal ohne z80 Assembler eine neues diskimage erstellen..

Siehe Anhang.
Ich hoffe, es ist das richtige. Das bios ist da schon mit drin.

von bix (Gast)


Lesenswert?

TheMason schrieb:
> Na ja. Die Adress-Pin-Belegung ist wirklich nicht die glücklichste. Wär
> dann vllt was für eine Folge-Version :-)

Die ungünstige Belegung vom RAM zu den Ports wurde hier schon 
diskutiert, siehe diverse Posts vom 12.06.2010 und folgende.

Aus diesem Grund wurde auch das Layout geändert und Platz für ein paar 
Jumper geschaffen, um zwischen alter und neuer Belegung umzuschalten.

Die ungünstigen Leitungen zum AVR sind gegenüber dem ersten Layout von 
Joe auf die Lötseite verlegt, so dass man auch bei bestücktem Board 
nachträglich noch Leiterbahnen auftrennen und Patchen kann.

Gruß, bix

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Im Anhang ist mein aktueller Softwarestand. Es sind eine Menge 
Änderungen und Erweiterungen. Sicher wäre es besser gewesen, die 
Änderungen schrittweise zu posten, aber das schaffe ich wohl nicht.

Erst mal das wichtigste:
Im CPU-Emulator habe ich alle Flags so eingestellt, daß
sie sich (möglichst) wie auf einem 8080 verhalten. Der Emulator kann 
bisher nur 8080, und Software, die anhand der Flags glaubt, einen Z80 
unter sich zu haben, fällt mit großer Wahrscheilichkeit aufs Kreuz, wenn 
wie Z80-Befehle dann nicht da sind. Und diese Software gibts für CPM.
(siehe auch 
Beitrag "Re: CP/M auf ATmega88")

Der 8080 Befehlssatz ist jetzt komplett und weitere Fehler habe ich 
keine mehr gefunden. (Was aber nichts heißen muß.)

Jetzt kommen meine Spielereien:

* Schnellere DRAM-Routinen
  Geht jetzt nur, wenn man am Prozessor 2 Leitungen vertauscht.
  Sonst muß man die alten Routinen verwenden.
  Es könnte sein, daß das Timing für sehr langsame (alte) RAMs zu scharf
  eingestellt ist. Das muß nochmal überprüft und evtl. geändert werden.

* Interrupt und Empfangspuffer für USART Input.
  Mich hats einfach genervt, das immer Zeichen verloren gehen, wenn man
  mit der Maus in die CP/M-Console pasted.

* Timer-Interrupt mit 1ms Auflösung. War in erster Linie für
  Performance-Messungen gedacht, kann aber auch als Echtzeituhr 
verwendet
  werden. 32 Bit Sekundenzäler ala UNIX time_t. Nachdem ich das fertig
  hatte, habe ich beim simh Altair 8800 Simulator
  (http://www.schorn.ch/cpm/intro.php, tolles Teil übrigens)
  noch eine andere Idee gesehen, die ich dann auch noch eingebaut habe:
  Man kann vom CP/M aus einen Timer triggern, der ggf. die abgelaufene
  Zeit auf die Console schreibt.

Folgende DEFINEs kann man dem Assembler auf der Befehlszeile mitgeben
(Make-/Projektfile):

DRAM_DQ_ORDER :  0 = Original Pinbelegung. 1 = WE und DQ1 vertauscht.
  D.h. auf PC0..PC4 sind die DRAM-Datenbits.
  In meinem DRAM-Datenblatt heißen die Datenleitungen DQ und sind
  von 0 bis 3 durchnumiert.
  Achtung: Bei Sprite_tm (und im Datenblatt seines DRAMs) laufen
  die Nummern von 1 bis 4.
  Bei der alten Pinbelegung (DRAM_DQ_ORDER = 0) werden die alten
  Routinen verwendet, sonst die neuen. Wer es anders haben möchte,
  kann ja mal nach "CLASSIC_DRAM" suchen. Neue Software mit alter
  Pinbelegung geht aber nicht. Das habe ich zwischendurch mal
  rausgeworfen, als ich bei den vielen #if/#else den Durchblick
  verloren hatte.

Target-CPU : atmega8, atmega168 oder atmega88. Default ist atmega88
  Ich habe nur atmega8 getestet, weil ich die anderen erst
  bestellen müßte (Oder ein anders Gerät fleddern :).

F_CPU : Taktfrequenz. Default ist 20MHz

BAUD :  Default ist 38400

Im Programm gibts noch weitere Macros:

REFR_RATE : DRAM Refresh-Rate. Eingestellt sind die üblichen 15.6µs,
  entspr 64KHz. Um den Interrupt-Overhead etwas zu reduzieren, wird
  der Timer auf die halbe Rate programmiert, und dann immer 2 Reihen
  auf einmal aufgefrischt.

EM_Z80 : Auf 1 setzen, wenn man einen 8080 mit Z80-Flags testen will.
  (Oder wenn man alle Z80-Befehle eingebaut hat :)

Kritik in Form von Patches willkommen.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Update: Der Timer wird jetzt in einem vernünftigen Format ausgegeben.
  Die Uhr (Uptime) ist der Einfachheit halber im gleichen Format.

Außerdem hänge ich noch ein kleines Progrämmchen an, mit dem man den
Timer bedienen kann.

von Leo C. (rapid)


Lesenswert?

Hier mal ein kleiner Test.

Im Debugger habe ich folgende kleine Schleife laufen lassen:
1
MVI A,01        ;
2
OUT 40     ;Start Timer         Takte
3
LXI H,0000      ;               10
4
DCX H           ;               6  -\
5
MOV A,H         ;               4   |
6
ORA L           ;               4   |
7
PUSH PSW        ;               10  | 44 * 65536  =  2883584
8
POP PSW         ;               10  |
9
JNZ 0107        ;               10 -/
10
MVI A,02        ;               7
11
OUT 40     ;Stop Timer          11
12
NOP             ;               gesamt Anzahl Takte: 2883612

Und das hier kam raus:
1
--------------------------------------------------------------------
2
AVR Atmega mit |                12,288 Mhz              |   20 MHz  
3
---------------+------------+----------------+----------+-----------
4
               | Laufzeit        Laufzeit        Z80         Z80
5
               |  Gesamt        pro Z80 Takt    Speed       Speed
6
---------------+-----------------------------------------------------
7
Orig. DRAM R/W | 17,187 s        5,960 µs      168 KHz     273 KHz
8
Neue  DRAM R/W |  9,806 s        3,401 µs      294 KHz     478 KHz
9
---------------+-----------------------------------------------------
10
simh AltairZ80 |  0,022 s        7,629 ns      131 MHz

Zum Vergleich habe ich noch die Zahlen von einem Simulator auf meinem
PC dazugetan. (08/15 PC mit 2,5MHz Athlon 4850e)

Mein AVR läuft nur mit 12,288 MHz. Deshalb habe ich die Zahlen noch für
20MHz hochgerechnet. Die Zahlen erscheinen mir durchaus plausibel, wenn
ich an die Geschwindigkeit von meinem 4MHz CP/M-Rechner zurückdenke.

Ganz oben hat Jörg Wolfram geschrieben, daß er mit einem AVR ca. 2MHz
Z80-Geschwindigkeit erreicht hat. Na, dann gibts hier ja noch einiges
an *Spiel*raum...

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@alle
Die Platine scheint fehlerfrei zu sein. CP/M bootet auch mit 24 Mhz 
externen Takt über den USB Treiber. Bei alten SD Karten schlägt bei der 
MMC Initialisierung das Timeout zu (Karte läßt sich für eine Antwort zu 
lange Zeit).
Die neue Software (mit alter Hardware) von Leo C. läuft bei mir noch 
nicht. die ipl Meldung kommt nicht. Mal suchen...

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Die neue Software (mit alter Hardware) von Leo C. läuft bei mir noch
> nicht. die ipl Meldung kommt nicht. Mal suchen...

Welche hast Du denn versucht? Und mit welchem Prozessor?
Ich frage deshalb, weil wir es mal vom Mega168 hatten, und ich bei der
Auswahl desselben einen dämlichen Fehler eingebaut habe.

Hast Du den Ramtest eingeschaltet?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Deine Version vom 01.07, der Option DRAM_DQ_ORDER = 0, und dem Mega168.
Der Ramtest war eingeschaltet und läuft auch fehlerfrei durch.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Deine Version vom 01.07, der Option DRAM_DQ_ORDER = 0, und dem Mega168.

#elif defined atmega168
  .include "m8def.inc"

Bitte .include korrigieren. :-(

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

... hatte ich schon geändert. Muß noch was anderes faul sein.

von Leo C. (rapid)


Lesenswert?

Versuchst Du das auch mit 24 MHz? Kannst Du evtl. langsamer testen?
Und welchen RAM-Chip hast Du (Genaue Typbezeichnung mit Speed-Code)?

von nix_könner (Gast)


Lesenswert?

hab ich es überlesen?
Gibt es Alternative(n) zu dem verbauten DRAM Chip?
Welchen SRAM müsste ich z.B. nehmen? Und wie anschließen (mit einem 
Multiplexer, oder Latchs?), damit die Software nicht geändert werden 
muss?

von Leo C. (rapid)


Lesenswert?

nix_könner schrieb:
> Gibt es Alternative(n) zu dem verbauten DRAM Chip?

Ja, größere, und evtl. (aber eher nicht) kleinere DRAMs.

Auf die Schnelle habe ich 1MBit bis 16MBit gefunden.
Und natürlich gibts die in verschiedenen Geschwindigkeiten.
Und dann auch noch 3,3V und 5V VCC. Wobei die 5V-Typen hier auch mit
3.3V laufen. Aber die Spannung dürfte auch wieder Einfluß auf die
Zugriffszeiten haben.

> Welchen SRAM müsste ich z.B. nehmen? Und wie anschließen (mit einem
> Multiplexer, oder Latchs?), damit die Software nicht geändert werden
> muss?

SRAM macht bei diesem Projekt überhaupt keinen Sinn. Der Witz ist hier
ja gerade, daß man mit 2 Billigchips auskommt.

von nix_könner (Gast)


Lesenswert?

Danke Leo. Dann muss ich mal suchen.

von Leo C. (rapid)


Lesenswert?

PS/2 SIMs sind eine gute Quelle.
Ich habe meinen Chip (1MBit x 4)von einem 32MB Modul runtergelötet. Da 
sind jetzt noch 15 Stück drauf. Weitere Riegel liegen hier auch noch 
rum.

@all
Ich habe also welche übrig. Wer sonst keine findet...

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Leo C.
Ich habe heute nochmal beide RAM Varianten getestet. Gestern war der 
Ramtest leider doch aus.

Testumgebung: einmal 8 Mhz Takt / einmal 24 Mhz Takt
Ergebnis Taktunabhängig

RAM-Test alte Variante:
23 < 00
23 < 01
22 < 02
23 < 03
26 < 04
27 < 05
26 < 06
Es sieht also so aus, ob Bit 5 und Bit 1 immer 1 sind.

RAM-Test neue Variante:
00 < 00
00 < 01
00 < 02
00 < 03
als ob er überhaut nicht angesprochen wird. Ich werde mal WE an den Oszi 
klemmen.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> @Leo C.
> Ich habe heute nochmal beide RAM Varianten getestet. Gestern war der
> Ramtest leider doch aus.

Aha, so macht es mehr Sinn.

> Testumgebung: einmal 8 Mhz Takt / einmal 24 Mhz Takt

Bei 24Mhz ist der Refresh bei langsamen RAMs an einer Stelle an der 
Grenze. Die Schreib/Leseroutinen von Sprite_tm haben Luft ohne Ende. Die 
gehen wahrscheinlich auch bei 100MHz noch. Und meine Routinen nimmst Du 
ja nicht.

> Ergebnis Taktunabhängig
>
> RAM-Test alte Variante:
> 23 < 00
> 23 < 01
> 22 < 02
> 23 < 03
> 26 < 04
> 27 < 05
> 26 < 06
> Es sieht also so aus, ob Bit 5 und Bit 1 immer 1 sind.

Das ist das Bit, das ich mit WE getauscht habe. Ich hab mir das jetzt
nochmal genau angeschaut (Assembler Listing). Testen kann ich leider 
nicht. Ich meine, daß bei "DRAM_DQ_ORDER = 0" alle Bits an der richtigen 
Stelle für die Originalschaltung sind.

> RAM-Test neue Variante:
> 00 < 00
> 00 < 01
> 00 < 02
> 00 < 03
> als ob er überhaut nicht angesprochen wird. Ich werde mal WE an den Oszi
> klemmen.

Daß, das gehen sollte, stand ja nie zur Diskussion.



> Deine Version vom 01.07, der Option DRAM_DQ_ORDER = 0, und dem Mega168.
und
>  .include "m8def.inc"
> ... hatte ich schon geändert.

Das gibt beim Übersetzen noch einen Fehler:
| avr-m8_z80.asm(1230): error: Old harware can not work with new software!

Die Zeile 1230 und drumherum müßtest Du also auch geändert haben, sonst 
hättest Du nicht fehlerlos übersetzen können. Man kann diese 
"Sicherheitsabfrage" einfach rauswerfen. Darüber wird (bei DRAM_DQ_ORDER 
= 0) der richtige (dh. der Originaltreiber von Sprite_tm) genommen. Das 
meine Routinen mit der Originalpinbelegung nicht gehen, hatte ich ja 
schon geschrieben.

Sonst fällt mir dazu nichts mehr ein. Wenn die Hardware mit dem 
Originalprogamm funktioniert, dann müßte sie mit meinem Programm und den 
oben beschriebenen Anpassungen auch laufen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Das 4:0 hat es gebracht. Die Variante "DRAM_DQ_ORDER = 0" geht nun. War 
mein Fehler, 0 und 1 vertauscht. Die neue Variante "DRAM_DQ_ORDER = 1" 
natürlich mit den beiden getauschten Leitungen bringt immer noch
> 00 < 00
> 00 < 01
> 00 < 02
> 00 < 03
bei RAMORG 1. Bei RAMORG 0 kommt nicht mal mehr eine Ausschrift, hängt 
sich irgendwo ganz auf.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:

> bei RAMORG 1. Bei RAMORG 0 kommt nicht mal mehr eine Ausschrift, hängt
> sich irgendwo ganz auf.

RAMORG=0 ist sozusagen ungetestet. Das hätte ich wohl rauswerfen sollen.
RAMORG=1 sollte aber wirklich funktionieren.

Allerdings kommen hier so langsam die Zugriffzeiten, die genaue 
Chiporganisation usw. ins Spiel....

> Und welchen RAM-Chip hast Du (Genaue Typbezeichnung mit Speed-Code)?

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Leo C. schrieb:

>> Und welchen RAM-Chip hast Du (Genaue Typbezeichnung mit Speed-Code)?

einen MT4C4256-80

von Leo C. (rapid)


Lesenswert?

> einen MT4C4256-80

Da dürfte es eigentlich keine Timing-Probleme geben.
Kannst Du Die Schaltung probeweise mit 5V betreiben?
Dann ohne SD-Karte um zu sehen, ob sie dann über den RAM-Test kommt.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Kannst Du Die Schaltung probeweise mit 5V betreiben?
> Dann ohne SD-Karte um zu sehen, ob sie dann über den RAM-Test kommt.

Auch mit 5V ohne Erfolg.
Ich habe nun mal die Signale am RAM und am AVR gemessen. Wenn das 
Programm in den Ramtest läuft liegt /WE ständig auf Low und I/O1 bis 
I/O4 liefert keine Daten bzw. es kommen keine vom AVR. /RAS und /CAS 
liegen aber normal an.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Wenn das Programm in den Ramtest läuft liegt /WE ständig auf Low
> und I/O1 bis I/O4 liefert keine Daten bzw. es kommen keine vom AVR.

Du hast anscheinend ein andere Programm als ich. ;)

Du könntest mal schauen, ob die entsprechenden Portbits als Ausgänge 
programiert werden, und zb. an der WE-Leitung auch High-Pegel ausgegeben 
werden. Bei mir ist das der Fall.

[avr-m8_z80.lst]
1
                 ; - Setup Ports
2
...
3
000045 e300        ldi temp,PC_OUTPUT_MASK
4
000046 b907        out DDRC,temp
5
6
...
7
8
                 dram_write:
9
0002f6 94f8        cli
10
...
11
0002f7 b117        in temp2,DDRC               ;DRAM data ports as outputs
12
0002f8 601f        ori temp2,RAM_DQ_MASK
13
0002f9 b917        out DDRC,temp2
14
...
15
000340 9a44        sbi PORTC,ram_w
16
...
17
000342 b107        in temp,DDRC
18
000343 7f00        andi temp,~RAM_DQ_MASK
19
000344 b907        out DDRC,temp
20
000345 b108        in temp,PORTC
21
000346 7f00        andi temp,~RAM_DQ_MASK
22
000347 b908        out PORTC,temp

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Im Anhang der derzeit aktuelle Softwarestand:

Die Änderungen umfassen die Änderungen von Leo C. (siehe oben), die 
Änderungen für ein korrektes Timing des MT4C4256-80 und die Änderungen 
zur korrekten Initialisierung der SD-Card. Damit sollten nun auch alte 
langsame Karten zuverlässig laufen.

Bei Hardwareänderungen bitte beachten:
/WE (PC1 – Pin 24) wird mit IO3 (PC4 – Pin 27) getauscht. Auf der 
Leiterplatte auch an den rechteckigen Durchkontaktierungen erkennbar.
Welche RAM-Version benutzt wird kann als Compileroption angegeben 
werden.

Kritik erwünscht

von volkerp (Gast)


Lesenswert?

FÜr den PMD-85, ein tchech. Homecomputer der 80er Jahre, gibt es einen 
Emulator auf AVR-Basis (http://pmd85.topindex.sk/)

Dieser emuliert ebenfalls einen 8080-Prozessor. Vielleicht wäre dieses 
Projekt auch einen Blick wert?

VolkerP

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Was die Leute alles so nachbauen.... :-)

von Leo C. (rapid)


Lesenswert?

Neuigkeiten

Ich habe "meine" Sourcen in ein SVN gestellt auf daß man hier zugreifen 
kann:
http://cloudbase.homelinux.net/viewvc/avr-cpm/trunk/

Meine Änderungen kann man dort nachlesen. Wer Fehler findet, der ...
muß sie nicht behalten, sondern darf sie gerne hier mitteilen und am 
Besten gleich korrigieren. Ich werde die nächsten Tage nicht dazu 
kommen.

Ich habe eine radikal geänderte Portbelegung getestet. Das Konzept dazu 
habe ich (mal wieder) bei Chan abgekupfert:
http://elm-chan.org/works/vp/report.html

Der Geschwindigkeitsgewinn ist nicht überwältigend, aber doch 
beachtlich. Und als Belohnung gibt es 3 freie Ports.

Hier mal die Ergebnisse mit meiner weiter oben geposteten, nicht 
repräsentativen Testschleife:

AVR Atmega mit 20 MHz:
-----------------------------------------------------------------------
                            | Laufzeit        Laufzeit         Z80
                            |  Gesamt        pro Z80 Takt     Speed
----------------------------+------------+----------------+------------
Letzter Stand:              |  5,921 s         2,05 µs       478 KHz
aktuell: (trunk 28)         |  3,239 s         1,12 µs       890 KHz
geänderte Portbelegung:     |  2,974 s         1,03 µs       969 KHz
(experimental 25)              |

Inzwischen habe ich einen 20MHz Quarz an meinem Mega8 
(undervoltaged/overclocked :). Mit 24.5 MHz macht er allerdings die 
Grätsche.

Den 1MHZ 8080/Z80 wird man mit dem jetzigen Konzept von Sprite_tm 
wahrscheinlich noch erreichen können. Für die 2 MHz wird man wohl den 
schönen Interpreter wegwerfen/total umkrempeln müssen.

Auf jeden Fall gibts noch viel zu tun. Für den Fall, daß jemand 
Langeweile hat, hänge ich einfach mal meinen uneditierten Merkzettel mit 
ein paar Ideen an. Die Liste ist sicher nicht vollständig.

Wünsche schönes Wochenende


avr_cpm Wunschliste
-------------------

• USART IO per Interrupt
    (DONE für Input)

• DRAM
  ∘ Adress- und Daten-Ports neu sortieren für schnelleren Zugriff
  ∘ Adress- und Datenleitungen multiplexen: --> 4 freie Ports
    (ist ohne Performanceverlust möglich)
  ∘ memRead/WriteWord?
  ∘ Memory block transfer?

• DEBUG/trace steuerbar durch Z80-Programm?
  (Über IN/OUT-Interface)

• Andere (größere) Disk-Formate
  dpb muß für avr zugänglich sein?

• Register umorganisieren
  ∘ für effizienteren code
  ∘ R1 als 0-Register? (wie gcc-avr)

• Source aufteilen
  ∘ console I/O (USART)
  ∘ mmc
  ∘ dram
  ∘ z80 emu (?)

• Z80 Befehle

• bios sector blocking/deblocking (avr)

• Mehrere CP/M-Laufwerke auf einer SD ?
  ∘ CP/M-Images in FAT-Dateisystem
  ∘ Diskimages hintereinander kopieren

von Peter Sieg (Gast)


Lesenswert?

Hallo. Bin wieder da ;-)
Habe mir gerade den aktuellen Stand von avr_cpm.asm (Joe G.) gezogen und
versucht ersteinmal für die original HW zu assemblieren mit:
#ifndef DRAM_DQ_ORDER      /* If this is set to 1, the portbits  */
  #define DRAM_DQ_ORDER 0    /* for DRAM IO3 and WE are swapped.    */
#endif

dabei bekomme ich:
C:\E\AVR\avr-cpm\avrcpm\avr\z80.asm(1253): error: Old harware can not 
work with new software!

???

Ich finde die Optionen zur DRAM Selektion SEHR unübersichtlich!
Das versteht doch kein Mensch mehr.. da müssen andere Namen+mehr 
Erläuterungen in den ASM Quellcode..

Nun, was muß ich wie setzen, um ersteinmal für die original HW zu 
assemblieren??

Danach wollte ich dann mal probieren PC1 + PC4 zu tauschen.
Das sollte dann wohl mit #define DRAM_DQ_ORDER 1 gehen?

Peter

von Peter Sieg (Gast)


Lesenswert?

ok. Habe mit DRAM_DQ_ORDER 1 assembliert und PC1 und PC4 getauscht.
Damit läufts und MBASIC arbeitet jetzt!! Hurra!

Super Arbeit! Vielen Dank dafür ;-)

Trotzdem wäre es schön, wenn die original HW über die entsprechende 
Option
weiterhin nutzbar wäre mir der neuen SW...

Jetzt müssen nur noch die Platinen kommen.. dann gehts weiter...

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Peter

Wilkommen im Backofen!

Die alte HW Variante läuft auch mit der von Dir gezogenen 
Softwareversion. Gib einfach unter Assembler Optionen  -DDRAM_DQ_ORDER=0 
ein.
Damit wird CLASSIC_DRAM = 1 gesetzt. Ja, ist unglücklich, einmal 0 und 
einmal 1. Die Software geht nun auch ohne Pintausch.
Zusätzlich mußt Du noch die Fehlermeldung deaktivieren!

; ------------------ DRAM routines -------------
; TODO:

#if DRAM_DQ_ORDER == 1
 #define CLASSIC_DRAM 0
#else
 #define CLASSIC_DRAM 1    /* Change manualy, if you want new hw w/ old 
sw */
#endif


Die Abfrage hier kannst du streichen

; #if DRAM_DQ_ORDER == 0
;  #if CLASSIC_DRAM == 1
;    #error "Old harware can not work with new software!"
;  #endif
; #endif

Die Hardware ist auf dem Wege zu Dir.

Gruß
Joe

von Peter Sieg (Gast)


Lesenswert?

Danke Joe.

Die von dir genannte Abfrage, welche den Fehler produziert MUSS dann 
aber
raus, da ich ja zuerst mit DRAM_DQ_ORDER = 0 nicht erfolgreich 
assembliert hatte.. ;-)

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Die von dir genannte Abfrage, welche den Fehler produziert MUSS dann
> aber
> raus, da ich ja zuerst mit DRAM_DQ_ORDER = 0 nicht erfolgreich
> assembliert hatte.. ;-)

Vergiß den Kram einfach. Zieh Dir lieber mal das hier, und sag
Deine Meinung dazu:

http://cloudbase.homelinux.net/viewvc/avr-cpm/trunk/avrcpm/avr/

[edit]
Ich sehe gerade, daß beim aktuellen Stand bei den #defines oben die 
Pintauschmöglichkeit über "DRAM_DQ_ORDER" noch drin ist, die 
Schreib/Lese-Routinen das aber nicht mehr unterstützen.
Falls ein überwältigendes Interesse daran besteht, die äußerst 
unpraktische Originalpinbelegung am Laufen zu halten, werde ich das 
vielleicht wieder einbauen. Bisher besteht allerdings gar kein 
Interesse.

Peter Sieg schrieb:
> Hallo. Bin wieder da ;-)

Ich jetzt auch. :)

> Ich finde die Optionen zur DRAM Selektion SEHR unübersichtlich!
> Das versteht doch kein Mensch mehr.. da müssen andere Namen+mehr
> Erläuterungen in den ASM Quellcode..

Das Ganze war nur zum Testen gedacht. Insbesondere die alten Routinen
hatte ich zuerst nur dringelassen, damit man mit den neuen vergleichen 
kann.
Dann wurde mir der Aufwand zu groß, die neuen Routinen für alte 
Pinbelegungen einzubauen und hatte dann schnell diese Schalter eingebaut
und nicht mal richtig getestet.

von Peter Sieg (Gast)


Lesenswert?

@Leo C. Solange es ja nur 2 Leitungen/Pins sind, die zu tauschen sind..
sehe ich da auch kein wirkliches Problem.. habe die jetzt auf meiner LR
Version umgelötet.. wenn ich die Platinen bekomme.. mach ich das da dann
genauso.. ist ja ein prima Geschwindigkeitszuwachs für die kleine 
Änderung.

Hast du für deine Speedmessungen eigendlich ein fertiges Programm 
genutzt?
Falls ja, könnte man das ja als Referenz nehmen..?

Anschauen werde ich mir das alles in den nächsten Tagen.. bin aber kein
Experte.. daher kann ich da selbst 'nur' lernen.. ;-)

Aber MBASIC.COM läuft jetzt! Das ist doch schon mal was! Gleich mal ein
paar Basic Programme raussuchen ;-)

Dann wollte ich mal schauen, ob mal ohne großen Aufwand die das 
Dickimage
vergrößern kann.. z.B mehr Sektoren etc. etc... 250kb sind schnell 
voll..
und selbst auf einer winzigen 16MB SD Karte ist so viel Platz ;-)

Auf jeden Fall freut es mich riesig, das aus diesem 'sinnlosen' 
Proof-of-Concept ein richtiges, kleinen Bastelprojekt geworden ist!!

Und die Verbesserungen können sich sehen lassen:
* CP/M Warmstart
* 8080 Opcodes korrigiert
* Dram Access beschleunigt

Peter

von Peter S. (petersieg)


Angehängte Dateien:

Lesenswert?

So. Platinen sind angekommen. Nochmals vielen Dank an Joe G. dafür!
Erste aufgebaut und läuft ;-)

Peter

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Huch, ist hier ein Posting von mir gelöscht worden, oder habe ich das am 
Montag tatsächlich nicht abgeschickt? Fällt mir jetzt erst auf, weil ich 
jetzt auch ein Bild von dem "Gerät" schicken wollte, daß ich am Montag 
angekündigt hatte. Ich habe es gestern aufgebaut, und es läuft.

Also auf ein Neues.

Peter Sieg schrieb:
> @Leo C. Solange es ja nur 2 Leitungen/Pins sind, die zu tauschen sind..
> sehe ich da auch kein wirkliches Problem.. habe die jetzt auf meiner LR
> Version umgelötet.. wenn ich die Platinen bekomme.. mach ich das da dann
> genauso.. ist ja ein prima Geschwindigkeitszuwachs für die kleine
> Änderung.
>
> Hast du für deine Speedmessungen eigendlich ein fertiges Programm
> genutzt?
> Falls ja, könnte man das ja als Referenz nehmen..?

Das "Testprogramm" ist hier:
Beitrag "Re: CP/M auf ATmega88"

> Aber MBASIC.COM läuft jetzt! Das ist doch schon mal was! Gleich mal ein
> paar Basic Programme raussuchen ;-)

MBASIC ist leider immer noch A-langsam. Ich habe praktisch nur ELIZA 
ausprobiert, und die ist nicht benutzbar.

In BASIC kannst Du Zeiten z.B. so messen:
1
100 REM Timertest
2
110 TCTRPORT = &H40
3
120 REM Start timer 
4
130 OUT TCTRPORT,1
5
140 REM Do something
6
150 FOR I=0 TO 200
7
160 IF I MOD 10 = 0 THEN PRINT ".";
8
170 NEXT
9
180 REM Stop timer, print result
10
190 OUT TCTRPORT,15
11
200 PRINT
12
210 PRINT "Done."
13
220 END


> Dann wollte ich mal schauen, ob mal ohne großen Aufwand die das
> Dickimage
> vergrößern kann.. z.B mehr Sektoren etc. etc... 250kb sind schnell
> voll..
> und selbst auf einer winzigen 16MB SD Karte ist so viel Platz ;-)

Dazu habe ich am Montag auch einiges geschrieben. Jetzt nur kurz 
Stichworte: Bios, Tabellen DPH, DPB, ...

Inzwischen bin ich sozusagen dran. Aber erst kommt das Sector 
Blocking/Deblocking an die Reihe.

Zu den Bildern:
Das Gehäuse ist dieses hier:
http://www.pollin.de/shop/dt/MTcwOTcyOTk-/Computer_und_Zubehoer/Hardware/Laufwerke_Cardreader/Card_Reader_UCR_61S.html

Als (SD-)Kartenleser war das Gerät am PC absolut unbrauchbar. Aber 1€ 
für Gehäuse + SD-Slot ...

Edit:
Beim 2. Bild habe ich leider daneben gehauen. Da wollte ich eigentlich 
auch eine verkleinerte Version schicken. Tut mir leid.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Erste aufgebaut und läuft ;-)

Sieht doch gut aus!
Übrigens, Abblock C's sind dafür da, dass man sie als fehlend im Layout 
ktitisiert und später nicht bestückt ;-)

von Peter Sieg (Gast)


Lesenswert?

Joe G. schrieb:
> Übrigens, Abblock C's sind dafür da, dass man sie als fehlend im Layout
> ktitisiert und später nicht bestückt ;-)

Genau! ;-) ;-)

Peter

von Rene B. (themason) Benutzerseite


Lesenswert?

Meine Platine ist auch da (schon vor 1-2 Wochen, hatte aber erst letztes 
WE Zeit sie zu bestücken). Lauffähig ist diese, allerdings zickt der 
FT232 noch rum. Habe den Treiber für den VCP installiert, bekomme aber 
mit Putty dennoch kein Zeichen rein/rausgeschaufelt. Muß da mal 
ausprobieren. CP/M hab ich demnach noch nicht getestet. Werde mir aber 
die Sourcen von SVN runterladen und mal durchstöbern. Vllt auch CP/M zum 
laufen bringen. Aber muß mich da erst einlesen.

Dickes Lob an Joe für die Sammelbestellung und Peter für die Initiative 
dieses Projektes. Weiter so Jungs. Klasse :-)

von Peter Sieg (Gast)


Lesenswert?

Leo C. schrieb:
> Im Debugger habe ich folgende kleine Schleife laufen lassen:
> MVI A,01        ;
> OUT 40     ;Start Timer         Takte
> LXI H,0000      ;               10
> DCX H           ;               6  -\
> MOV A,H         ;               4   |
> ORA L           ;               4   |
> PUSH PSW        ;               10  | 44 * 65536  =  2883584
> POP PSW         ;               10  |
> JNZ 0107        ;               10 -/
> MVI A,02        ;               7
> OUT 40     ;Stop Timer          11
> NOP             ;               gesamt Anzahl Takte: 2883612

Hi Leo C.
wäre es nicht super, diese 'Benchmark' Routine in dein timer (t.com) 
Programm mit aufzunehmen..? -> t b würde dann den Timer starten,
die Schleife ausführen und direkt danach die verstrichene Zeit 
ausgeben..
So hätten wir ein ungefähres Mass für Optimierungen..

Habe die 2te Platine noch ohne HW-Änderungen am laufen mit D* = 0.
=> geht also noch mit den alten Sprite_tm DRAM Routinen..

BTW: Welches fuses hast du für den Atmega8 gesetzt?
Möchte da auch mal einen mir 20mhz + 3,3v 'quälen' ;-)

Peter

von Peter Sieg (Gast)


Lesenswert?

Hmm. Ein normaler ATmega8 läuft bei mir nicht mit 3.3V und 20MHz.
lfuse=0xff; hfuse=0xd9

ATmega8L hab ich grad nicht da..
Egal.. 168 läuft erwartungsgemäß (fuses gleich wie 88).

Peter

von Rene B. (themason) Benutzerseite


Lesenswert?

Ich habe auch mal eine kleine Frage.

Ich habe dn ATMega168 drauf. Der läuft mit 3.3V bei 20MHz. Ich habe das 
Problem das sobald ich irgend eine Test-Software draufspiele die 
beispielsweise nur einen Prompt ausgibt (habe das uParse-Projekt in der 
Codesammlung mal darauf gespielt), sich der Controller ständig resettet.
Gibt es beim Mega168 gegenüber dem Mega16/32/644 einen Unterschied beim 
UART der zum Reset führen kann ? Register und Interruptvektoren hab ich 
schon angepasst. Reset-Leitung ist auf High, und die WDTON ist nicht 
gesetzt (AVR-Studio, also "richtig" herum). Ich kann mir da irgendwie 
keinen Reim drauf machen warum der Controller sich permanent resettet. 
Selbst wenn ich alle Interrupts disabled lasse, und nur einen Prompt 
ausgebe mit anschließender while (1); resettet der sich andauernd.
Was kann/könnte das sein ?! Liegt es vllt daran das ich dem Mega168 mit 
20MHz bei 3.3V zuviel zumute ?!

Fuses kann ich leider Momentan nicht posten da ich die Platine gerad 
nicht Griffbereit habe. Aber es ist keine Bootsection aktiv, CLKDIV8 ist 
nicht gesetzt, WDTON wie schon erwähnt auch nicht, Brownout detection 
ebenfalls nicht.

von Peter Sieg (Gast)


Lesenswert?

Hi.

Ich haben einen 168 hier mit avrcpm am laufen. 3,3V und 20MHz.
lfuse=0xf7
hfuse=0xdf
efuse unverändert zum Auslieferzustand

Hoffe das hilft..

Peter

von Feinmechaniker (Gast)


Lesenswert?

Rene Böllhoff schrieb:
> Liegt es vllt daran das ich dem Mega168 mit
> 20MHz bei 3.3V zuviel zumute ?!

Hier laufen alle Mega168 mit 3.3V und 24 MHz. Aber versuche doch mal auf 
5V zu jumpern bzw. die 8 MHz intern zu nutzen. Bei 5V natürlich SD-Card 
ziehen!

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Rene Böllhoff schrieb:
> sobald ich irgend eine Test-Software draufspiele die
> beispielsweise nur einen Prompt ausgibt (habe das uParse-Projekt in der
> Codesammlung mal darauf gespielt), sich der Controller ständig resettet.

Was mir spontan noch dazu einfällt.
Auf der Platine ist /DTR (FT232RL) über 100n mit dem Reset des AVR 
verbunden.

von Rene B. (themason) Benutzerseite


Lesenswert?

@Peter

Erstmal danke für die Fuse-Werte. Werd es mal prüfen

@Joe

>die 8 MHz intern zu nutzen

Dann kann ich aber keine saubere Baudrate erzeugen, und das wär schon 
wichtig.

>Bei 5V natürlich SD-Card ziehen!

Soweit bin ich noch nicht :-)

>Auf der Platine ist /DTR (FT232RL) über 100n mit dem Reset verbunden

Welche Version des Layouts ist es denn ? Ich hab irgendwie nur die 
Version vom 06.06.10 gefunden und danach bestückt. Bin mir aber nicht 
sicher ob das die aktuelle Version ist.
Bei mir im Schaltplan ist DTR mit nichts verbunden. Aber ich mess es mal 
nach wenn ich die Platine wieder zur Hand habe.

Ich wüsste nicht was ich da großartig hätte falsch machen können. Bei 
allen AVRs bisher nie ein Problem gewesen. Aber vllt sind die 20MHz ja 
auch wirklich was viel, wobei ich mir das nur schwer vorstellen kann 
wenn viele der Platinen mit 24MHz laufen. Merkwürdig, merkwürdig.

von Feinmechaniker (Gast)


Lesenswert?

Rene Böllhoff schrieb:
> Welche Version des Layouts ist es denn ? Ich hab irgendwie nur die
> Version vom 06.06.10 gefunden und danach bestückt. Bin mir aber nicht
> sicher ob das die aktuelle Version ist.

Die aktuelle Version ist vom 12.06.10 siehe auch hier:
http://www.mikrocontroller.net/articles/AVR_CP/M

von Rene B. (themason) Benutzerseite


Lesenswert?

@joe

Ah danke. Dachte schon ich hätte Lötpunkte auf den Augen.
Aber die DTR Leitung kanns nicht sein ... C14 ist bei mir nicht 
bestückt.

von Peter Sieg (Gast)


Lesenswert?

Nur so als weiterer Hinweis.. hatte bei ebay 2xATmega88PA gekauft.. aus 
Hongkong.. sind auch da.. aber vermutlich umgelabelte 8er.. ID is nicht 
mit
88er identisch (avrdude meckert).. die laufen auch nicht mit 20MHz..

Peter

von Peter Sieg (Gast)


Lesenswert?

Hmm.. versuche micg gerade mal in z80 asm und möchte den timer.asm um
eine delay-benchroutine erweitern.. Programm läuft auch, aber egal, ob 
in hl eine 0, 20 oder 50 geladen wird.. das Ergebnis ist immer 2,138/9 
Sekunden??
Ist bestimmt wieder so absolut blöder Fehler ;-)
1
bench:
2
        ld      a,startTimerCmd
3
  out  (TIMERCTL),a  ; start
4
; loop starts here
5
  ld      hl,0
6
l1:    
7
        ld      b,0
8
l2:  
9
        ld      a,0
10
l3:  dec   a
11
  jp      nz,l3    ; 256 x
12
        dec    b
13
  jp      nz,l2    ; 256 x
14
  dec    hl
15
  jp      nz,l1    ; 256 x
16
; loop ends here
17
        ld      a,printTimerCmd
18
  out  (TIMERCTL),a  ; print elapsed time
19
  ret        ; and done

Peter

von Joerg W. (joergwolfram)


Lesenswert?

DEC HL setzt soviel ich weiss keine Flags. Also müsste man wie im ersten 
Testbeispiel ein
1
MOV A,H 
2
ORA L
nach das DEC HL setzen.

Jörg

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Hallo Peter,

> wäre es nicht super, diese 'Benchmark' Routine in dein timer (t.com)
> Programm mit aufzunehmen..? -> t b würde dann den Timer starten,
> die Schleife ausführen und direkt danach die verstrichene Zeit
> ausgeben..
> So hätten wir ein ungefähres Mass für Optimierungen..

direkt in das Timersteuerprogramm würde ich es nicht einbauen Aber auch 
sonst wollte ich es nicht allzu komfortabel machen, damit niemand auf 
die Idee kommt, das wäre ein richtiger Benchmark. Ich habe die Schleife 
aber jetzt mal mit einem return zum CCP abgespeichert und hier 
angehängt.

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:

>   dec    hl
>   jp      nz,l1    ; 256 x

Jörg hat ja schon geschrieben, daß hier Z_Flag nicht gesetzt wird.
Davon abgesehen wird die Schleife natürlich 65536 mal wiederholt.
Da die innere Schleife ja auch schon gute 3 Sekunden braucht, kommst Du 
insgesammt auf gute 196 Kilosekunden, also über 54 Stunden. Ich glaube 
nicht, daß Du so lange warten willst.

von Joerg W. (joergwolfram)


Lesenswert?

@  Leo C.

Das stimmt nicht ganz, denn die äussere Schleife wird NIE wiederholt. 
Das liegt einfach daran, dass das Zero-Flag von der nächstinneren 
Schleife noch gesetzt ist und der DEC HL Befehl keine Flags ändert.

Jörg

von Leo C. (rapid)


Lesenswert?

Joerg Wolfram schrieb:
> Das stimmt nicht ganz, denn die äussere Schleife wird NIE wiederholt.

Das stimmt natürlich.
Ich hätte wohl schreiben sollen, daß die Schleife 65536 mal wiederholt
werden würde, wenn "dec hl" das Z-Flag beeinflussen würde.

von Peter Sieg (Gast)


Angehängte Dateien:

Lesenswert?

Ja, es mußte ja sowas 'dummes' sein ;-)
Danke!

Habe jetzt register c statt hl genommen.. und 10x reicht auch ;-)
1
bench:
2
        ld      a,startTimerCmd
3
  out  (TIMERCTL),a  ; start
4
; loop starts here
5
  ld      c,10
6
l1:    ld      b,0
7
l2:    ld      a,0
8
l3:  dec   a
9
  jp      nz,l3    ; 256 x
10
        dec    b
11
  jp      nz,l2    ; 256 x
12
  dec    c
13
  jp      nz,l1    ; 10 x
14
; loop ends here
15
        ld      a,printTimerCmd
16
  out  (TIMERCTL),a  ; print elapsed time
17
  ret        ; and done

Damit bekommt man mit:
AVR   MHz   D  Zeit
88    20    0  035,999s
88    20    1  021,385s

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Ja, es mußte ja sowas 'dummes' sein ;-)
> Danke!
>
> Habe jetzt register c statt hl genommen.. und 10x reicht auch ;-)

> l1:    ld      b,0
> l2:    ld      a,0
> l3:    dec     a
>        jp      nz,l3    ; 256 x
>        dec     b
>        jp      nz,l2    ; 256 x
>        dec     c
>        jp      nz,l1    ; 10 x

Statt möglichst schnell zu zählen (und das möglichst oft, damit's nicht 
so schnell vorbei ist :), wäre es vielleicht besser, in die Schleife 
einige "interessante" Befehle zu legen. Z.B. "PUSH", "POP", "CALL", 
"RET", "LD (nnnn),HL", "EX (SP),HL". Also z.B. Befehle, die das 
RAM-Interface etwas mehr fordern. Oder einen Mix aus Befehlen, der 
möglichst praxisnah ist...

Peter, da Du doch was für MBASIC übrig hast: Mein Basic-Beispiel weiter 
oben, könnte man auch noch ausbauen.

> Damit bekommt man mit:
> AVR   MHz   D  Zeit
> 88    20    0  035,999s
> 88    20    1  021,385s
Bei mir z.Zt:
  8     20    ?  012.180s   bb
  8     20    -  010.811s   exp

mit folgenden Pinbelegungen:
1
   ------------------------------------------------------------------------
2
   |         Port D        |         Port B        |         Port C       |
3
   +-----------------------+-----------------------+----------------------+
4
   | 7 | 6 | 5 | 4 | 3 | 2 | 5 | 4 | 3 | 2 | 1 | 0 | 5 | 4 | 3 | 2 | 1 | 0|
5
   |            CS         |SCK DO  DI             |                      |
6
bb |A7  A6  A5      A8  OE |RAS A0  A1  A2  A3  A4 |CAS  W  D3  D2  D1  D0|
7
   +-----------------------+-----------------------+----------------------+
8
   |                    CS |SCK DO  DI             |        D3  D2  D1  D0|
9
exp|A7  A6                 |A9  A8  WE  OE  CAS RAS|A5  A4  A3  A2  A1  A0|
10
   ------------------------------------------------------------------------

"exp" findet man in meinem SVN im "experimental" Zweig.

von Peter S. (petersieg)


Lesenswert?

ok. Na klar kömmte/sollte man ggf. verschiedenen Befehle etc. in der 
Schleife unterbringen.. aber was ist ein realer Mix? Und es ist ja kein 
wirklicher Benchmark, sondern nur ein Anhaltspunkt um andere 
Portbelegungen/Dramroutinen etc. zu 'messen'..
Und die MBASIC Version fand ich deshlab nicht ideal, weil man MBASIC 
benötigt..
Hier noch mal die D0 (Original Sprita-tm Portbelegung + Routinen)
und die D1 Version (Port C - Pin 1 + 4 umbelegt + neue Routinen)
(in z80.asm zu wählen durch: DRAM_DQ_ORDER == 0/1)
          >----------------------------------------------------------------------- 
---
>  |         Port D        |         Port B        |         Port C       |
>  +-----------------------+-----------------------+----------------------+
>  | 7 | 6 | 5 | 4 | 3 | 2 | 5 | 4 | 3 | 2 | 1 | 0 | 5 | 4 | 3 | 2 | 1 | 0|
>D0|            CS         |SCK DO  DI             |                      |
>  |A7  A6  A5      A8  OE |RAS A0  A1  A2  A3  A4 |CAS D1  D3  D2   W  D0|
>  +-----------------------+-----------------------+----------------------+
>  | 7 | 6 | 5 | 4 | 3 | 2 | 5 | 4 | 3 | 2 | 1 | 0 | 5 | 4 | 3 | 2 | 1 | 0|
>D1|            CS         |SCK DO  DI             |                      |
>bb|A7  A6  A5      A8  OE |RAS A0  A1  A2  A3  A4 |CAS  W  D3  D2  D1  D0|
>----------------------------------------------------------------------- ---

D.h, du hast allein durch eine andere Portbelegung und geänderte 
Routinen,
eine Verbesserung von 021,385s (D1) zu 10,811s (exp( geschafft?!
> Damit bekommt man mit:
> AVR   MHz   D  Zeit
> 88    20    0  035,999s
> 88    20    1  021,385s
>Bei mir z.Zt:
>  8     20    ?  012.180s   bb
>  8     20    -  010.811s   exp
mit folgenden Pinbelegungen:
Hmm.. sehe gerade, das D1 und dein bb identisch sind, von den 
Portbelegungen... hast du dann noch andere Routinen verwenden??
Denn du hast ja damit 12,180s erreicht (wohin ich nur 021,385s 
erreiche)??
Und das das am ATmega8 liegen soll kann ich nicht wirklich glauben..
Hast du übrigens einen 8L verwendet?
>----------------------------------------------------------------------- ---
>  |         Port D        |         Port B        |         Port C       |
>  +-----------------------+-----------------------+----------------------+
>  | 7 | 6 | 5 | 4 | 3 | 2 | 5 | 4 | 3 | 2 | 1 | 0 | 5 | 4 | 3 | 2 | 1 | 0|
>D2|                    CS |SCK DO  DI             |        D3  D2  D1  D0|
>ex|A7  A6                 |A9  A8  WE  OE  CAS RAS|A5  A4  A3  A2  A1  A0|
>----------------------------------------------------------------------- ---
Der Gewinn D1 -> D2 ist allerdings nicht 'soo' groß..

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
>> Damit bekommt man mit:
>> AVR   MHz   D  Zeit
>> 88    20    0  035,999s
>> 88    20    1  021,385s
>>Bei mir z.Zt:
>>  8     20    ?  012.180s   bb
>>  8     20    -  010.811s   exp


Bei mir:
AVR   MHz   D  Zeit
168   24    1  017,62s

muß mal den Code von Leo C. für die variante D1 (bb) testen.

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> ok. Na klar kömmte/sollte man ggf. verschiedenen Befehle etc. in der
> Schleife unterbringen.. aber was ist ein realer Mix?

Darum habe ich mich bisher ja auch gedrückt. ;)

> Und es ist ja kein
> wirklicher Benchmark, sondern nur ein Anhaltspunkt um andere
> Portbelegungen/Dramroutinen etc. zu 'messen'..

Ja, aber Deine Schleife testet nicht mal das halbe DRAM-Interface. 
Geschweige, einen nennenswerten Teil des Interpreters.

> Und die MBASIC Version fand ich deshlab nicht ideal, weil man MBASIC
> benötigt..

Aber das ist ja vorhanden. Und es ist eine reale Anwendung.

> mit folgenden Pinbelegungen:
> Hmm.. sehe gerade, das D1 und dein bb identisch sind, von den
> Portbelegungen... hast du dann noch andere Routinen verwenden??
> Denn du hast ja damit 12,180s erreicht (wohin ich nur 021,385s
> erreiche)??

Beitrag "Re: CP/M auf ATmega88"


> Hast du übrigens einen 8L verwendet?

Eben nicht. Ich hatte ja auch schon mehrfach geschrieben, daß mein Mega8
mit zu niedriger Spannung und zu hoher Frequenz läuft.

> Der Gewinn D1 -> D2 ist allerdings nicht 'soo' groß..

Beitrag "Re: CP/M auf ATmega88"

Ich hatte mir allerdings auch etwas mehr erhofft.
Zur Zeit bin ich gerade wieder an etwas dran, von dem ich mir nochmal 
einen Schub erhoffe. Details gibts aber erst, wenns wirklich 
funktioniert.

Übrigens habe ich inzwischen den Sektor (De-)Blocking-Algorithmus, der 
unnötiges, mehrfaches Lesen und Schreiben der SD-Karte vermeidet, drin.
Performance-mässig bringts leider auch noch nicht so viel, außer 
vielleicht bei Anwendungen, die viel und wahlfrei auf Disk schreiben.
Aber Schreiben habe ich noch nicht wirklich getestet...

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

>> Und die MBASIC Version fand ich deshlab nicht ideal, weil man MBASIC
>> benötigt..

> Aber das ist ja vorhanden. Und es ist eine reale Anwendung.

Da das MBASIC im Archiv von Sprite_tm kaputt ist, habe ich hier mal eine 
funktionierende Version drangehängt. Außerdem habe ich gleich noch ELIZA 
dazugetan.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Leo C.
Ich habe gerade die Versionen 28 und 29 getestet. Beide mit dem gleichen 
(Fehler)ergebnis.
Version 19 bringt noch als ersten Opcode von Adresse 2000:
opcode 31 decoded 0192 also korrekt.
Version 28 und 29 bringen:
opcode 31 decoded FFFF und dann startet das System neu.
Hast du was am Befehlsinterpreter geändert? Muß wieder ein neuer 
Schalter gesetzt werden?

Könntest du das cpm.bin nicht gleich wieder erstellen? Unter Windows 
habe ich keinen Z80 Asssembler gefunden der die Quellen übersetzt.

von Peter S. (petersieg)


Lesenswert?

Joe G. schrieb:
> muß mal den Code von Leo C. für die variante D1 (bb) testen.

Ja, denn irgendwoher muß der Unterschied:
>> 88    20    1  021,385s
>>Bei mir z.Zt:
>>  8    20    ?  012.180s   bb
ja herkommen.. denn die Portbelegung ist zw. D1 und bb identisch..

>Bei mir:
>AVR   MHz   D  Zeit
>168   24    1  017,62s
ja, +20% höherer Takt sollte die Reduzierung von ca. 21 auf 17s 
erklären.

Ich habe für timer.asm den tniasm.exe verwendet..(google). Der gibt
aber bei ipl.asm+bios.asm noch eine Fehlermeldung bei Zeile 71/211? 
aus..
hatte noch keine Zeit da weiter rein zu schauen.. ist evtl. nur ne 
Kleinigkeit.. einen anderen Assembler für win32 habe ich auch noch nicht
gefunden..

---

@Leo: Wenn die Optimierungen am Interpreter angekommen sind (nicht die 
schon vorgenommenen Fehlerbereinigungen), kann man ja gerne andere / 
weitere Befehle in die Benchschleife mit aufnehmen..
Z.Z habe ich eine D0 und eine D1 Variante hier am laufen.. Und die 
LR-Version
kann ich ggf. ja einfach komplett umbauen.. wenn es sich lohnt..
Ich suche noch 32MHz und 40MHz Quarze (wo gibt es die..?), dann kann ich 
mal
schauen ob die Realität der Hochrechnung entspricht (womit wir dann bei 
>1MHz bis an die ~2MHz Z80 sind..)

BTW: Mbasic hatte ich schon lange mal ein andere Version gezogen..
Muß jetzt mal die alten Basic Juwelen durchtesten.. Nim/23 und Bagels
laufen einwandfrei.. stellen ich dann alle hier rein..

Peter

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> @Leo C.
> Ich habe gerade die Versionen 28 und 29 getestet. Beide mit dem gleichen
> (Fehler)ergebnis.
> Version 19 bringt noch als ersten Opcode von Adresse 2000:
> opcode 31 decoded 0192 also korrekt.
> Version 28 und 29 bringen:
> opcode 31 decoded FFFF und dann startet das System neu.

Alle eingecheckten Revisionen sind bei mir mindestens einmal gelaufen.
Einziger Unterschied zu Deiner Hardware dürfte der Prozessor sein.
Mega88, Mega168 kann ich nicht testen.
Alles in trunk sollte auf Deiner Hardware funktionieren.
(Ab Rev. 32 braucht man allerdings das zugehörige Bios.)

> Hast du was am Befehlsinterpreter geändert?

Einige kleine, lokale Optimierungen. Das Konzept ist immer noch das 
gleiche.
Hast Du einen Mega88 zum Testen?

> Muß wieder ein neuer Schalter gesetzt werden?

Nein.

> Könntest du das cpm.bin nicht gleich wieder erstellen?

Im SVN möchte ich eigentlich keine Binaries haben.

> Unter Windows
> habe ich keinen Z80 Asssembler gefunden der die Quellen übersetzt.

Die Assemblerquellen gibt es hier:
http://savannah.nongnu.org/projects/z80asm/

Vielleicht ist ja jemand so freundlich, und übersetzt das Ding für 
Windows.

von Peter Sieg (Gast)


Lesenswert?

Hi.

Habe mich gerade daran erinnert, das auf alten Netzwerkkarten ja 25MHz 
Quarze sind ;-)
>Damit:
>AVR   MHz   D  Zeit
>88    25    1  016,871s

Peter

von Feinmechaniker (Gast)


Lesenswert?

Peter Sieg schrieb:
> Ich habe für timer.asm den tniasm.exe verwendet..(google). Der gibt
> aber bei ipl.asm+bios.asm noch eine Fehlermeldung bei Zeile 71/211?
> aus..

Danke für den Tip! Wenn Du jeweils den "end" Befehl streichst übersetzt 
der Compiler.

Leo C. schrieb:
> Einige kleine, lokale Optimierungen. Das Konzept ist immer noch das
> gleiche.
> Hast Du einen Mega88 zum Testen?

Ich suche mal nach einem Mega88 zum testen. Übrigens ist mir 
aufgefallen, wenn der Schalter zum RAM-Test gesetzt ist läuft das System 
nicht stabil. Zork, MBASIC oder der SYS Befehl bringen oft (nicht immer) 
Op-Codefehler. Ohne RAM Test läuft alles Fehlerfrei. Sieht nach einem 
Timing Problem aus.

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Habe mich gerade daran erinnert, das auf alten Netzwerkkarten ja 25MHz
> Quarze sind ;-)

Dann sind meine Netzwerkkarten noch nicht alt genug? Die beiden 20MHz 
Quarze habe ich von dort.

Alte Grafikkarten sind eine gute Quelle für Oszillatoren. Auf meiner 
guten alten ET4000 sind 25.17, 28.322, 36, 44.9 und 62MHz. Ich weiß nur 
nicht, ob die Teile auch bei 3.3V laufen.

8 Stück 256x4MBit DRAMs sind übrigens auch drauf. Davon 4 sogar 
gesockelt.

von Leo C. (rapid)


Lesenswert?

Feinmechaniker schrieb:
> Übrigens ist mir
> aufgefallen, wenn der Schalter zum RAM-Test gesetzt ist läuft das System
> nicht stabil. Zork, MBASIC oder der SYS Befehl bringen oft (nicht immer)
> Op-Codefehler. Ohne RAM Test läuft alles Fehlerfrei. Sieht nach einem
> Timing Problem aus.

Das ist aber seltsam. Von dem RAM-Test sollte eigentlich keine 
Erinnerung
übrig bleiben. Falls etwas nicht richtig initialisiert wird, sollte es 
eher umgekehrt sein. Ich habe den RAM-Test immer eingeschaltet.

Hast Du den MEMFILL_CB-Schalter an? Ich finde den sehr nützlich, da ein 
ins Nirvana laufendes Programm sofort gestopt wird.

von Peter S. (petersieg)


Lesenswert?

bezüglich der Quarze.
CSD hat 36+40MHz aber 3.Oberton..? Geht das, oder eher nicht?
Ansonsten gibts wohl nur Quarzoszillatoren.. und ob die ab 3,3V
arbeiten..? Für SMD gibts aber welche ab 3,3V..

Peter

von Leo C. (rapid)


Lesenswert?

Jetzt habe ich doch noch meinem GPS-Logger den ATmega328P geklaut.
Läuft mit meinen neuesten Programmversionen auf Steckbrett und 
Lochraster mit 2 verschiedenen Verdrahtungen.

von Leo C. (rapid)


Lesenswert?

Inzwischen habe ich eine weitere Verdrahtung ausprobiert und dafür auch 
andere RAMs genommen (GM71C4256A-80, statt der schnelleren 3.3V Typen). 
Mit ATmega8 gings problemlos, aber mit dem ATmega328P bekam ich die 
gleichen Probleme, wie Joe G. sie beschrieben hatte.

@Joe G.:
Geholfen hat ein weiterer Wartezyklus beim Lesen, in der SVN/trunk 
Version also so:
1
dram_read:
2
  cli
3
  DRAM_SETADDR adrh, ~0,(1<<ram_ras), ~(1<<ram_a8), (1<<ram_oe)
4
  cbi P_RAS,ram_ras
5
  DRAM_SETADDR adrl, ~(1<<ram_ras),0, ~((1<<ram_oe)), (1<<ram_a8)
6
  cbi P_CAS,ram_cas
7
  cbi P_A8,ram_a8    ; 2 Takte
8
  nop                ; 1 Takt
9
  in  temp,P_DQ-2    ; PIN
10
  sbi P_CAS,ram_cas
11
12
  cbi P_CAS,ram_cas
13
  andi temp,0x0f     ; 1 Takt
14
  swap temp          ; 1 Takt
15
  nop                ; 1 Takt
16
  in  temp2,P_DQ-2   ; PIN
17
  andi temp2,0x0f
18
  or  temp,temp2
19
20
  sbi P_OE,ram_oe
21
  sbi P_CAS,ram_cas
22
  sbi P_RAS,ram_ras
23
  sei
24
  ret

Nach den Datenblättern sollten 2 Takte (immerhin noch 83ns bei 24MHz) 
dicke reichen, aber bei 3.3V statt 5V dürfen wir ja froh sein, daß die 
RAMS überhaupt laufen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Geholfen hat ein weiterer Wartezyklus beim Lesen, in der SVN/trunk

Leider behebt es bei mir nicht den Fehler im Befehlsinterpreter, siehe

Joe G. schrieb:
> Version 19 bringt noch als ersten Opcode von Adresse 2000:
> opcode 31 decoded 0192 also korrekt.
> Version 28 und 29 bringen:
> opcode 31 decoded FFFF und dann startet das System neu.

In Version 28 hast du auch die beiden neunen Funktionen dram_read_w, 
dram_write_w auch nicht eingebaut. In V29 habe ich die NOP's mal 
eingefügt, ohne Erfolg.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Leo C.
Ich habe den Fehler nochmal eingegrenzt. Es scheint wirklich ein Timing 
Problem mit dem RAM zu sein. V28 und V29 laufen bei 8MHz auf dem mega168 
und mega8. Bei 20MHz bzw. 24 MHz tritt das Problem auf. 
Erstaunlicherweise läuft mein mega8 hier mit 3.3V und 24 MHz.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
>> Version 19 bringt noch als ersten Opcode von Adresse 2000:
>> opcode 31 decoded 0192 also korrekt.
>> Version 28 und 29 bringen:
>> opcode 31 decoded FFFF und dann startet das System neu.

Da ich die passende Hardware noch auf meinem Steckbrett habe, habe ich 
die Version 19 grade ausprobiert. Läuft bei mir mit ATmega328P. Für 
diesen Fehler habe ich auch keine Erklärung. Der Wert 0192 ist ja nur 
ein Tabelleneintrag (Index 31) in inst_table. Es sieht so aus als ob der 
Interpreter bei Dir ins Leere (unprogramierte Flash) greift. Ab der 
Revision 28 muß die Tabelle auf einer durch 256 teilbaren Adresse 
liegen. Das müßte aber durch das .org (PC+255) & 0xff00 davor 
gewährleistet sein. Du könntest mal im Listing nachschauen, wo die 
Tabelle bei Dir zu liegen kommt.

Mindestens ein Fehler ist aber drin. Beim Start sollte das Register "_0" 
genullt werden. Z.B.:
1
start:
2
  ldi temp,low(RAMEND)  ; top of memory
3
  out SPL,temp    ; init stack pointer
4
  ldi temp,high(RAMEND)  ; top of memory
5
  out SPH,temp    ; init stack pointer
6
7
  clr  _0

>
> In Version 28 hast du auch die beiden neunen Funktionen dram_read_w,
> dram_write_w auch nicht eingebaut.

Die Funktionen waren immer als "experimental" gekennzeichnet und 
abgeschaltet. Der Aufwand lohnt einfach nicht. Problem ist, daß ein 
16-bit Wort auf der Grenze zwischen 2 Reihenadressen liegen kann.

>In V29 habe ich die NOP's mal
> eingefügt, ohne Erfolg.

Ein weiterer Timing-Engpaß könnte noch in der Refresh-Routine liegen. 
Dort sind 2 auskommentierte nops drin. Wenn ich mich richtig erinnere, 
ist der 2. an der kritischeren Stelle.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> @Leo C.
> Ich habe den Fehler nochmal eingegrenzt. Es scheint wirklich ein Timing
> Problem mit dem RAM zu sein. V28 und V29 laufen bei 8MHz auf dem mega168
> und mega8. Bei 20MHz bzw. 24 MHz tritt das Problem auf.
> Erstaunlicherweise läuft mein mega8 hier mit 3.3V und 24 MHz.

Das es mit dem Meaga8 besser geht, ist mir am Wochenende ja auch 
aufgefallen. Dir Porttreiber sind offensichtlich unterschiedlich (Ich 
habe gerade in die Datenblätter geschaut, und mein Verdacht hat sich 
bestätigt).

Man müßte mal ein Scope dranhängen, um zu sehen, was da vor sich geht.

Dein FFFF vs. 0192 Fehler ist damit aber nur schwer zu erklären. Der 
Opcode wird ja in beiden Fällen aus dem RAM richtig gelesen.

Du kannst das RAM-Timing natürlich weiter dehnen. Zuerst 1 oder 2 
weitere nops vor den in-Befehlen. Dann vor/nach den anderen 
Signalflanken nops einbauen. Zum Schluß landet man vielleicht wieder bei 
den vielen nops, die Sprite_tm schon drin hatte. ;-)

Oder beim Mega8 bleiben. Bisher kenne ich noch keinen Grund, der dagegen 
sprechen würde.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> clr  _0

Das war der Fehler! V29 läuft, vielen Dank für den Hinweis.
Timer B zeigt nun 9.441 s mit einem mega8 und 24 Mhz

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
>> clr  _0
> Das war der Fehler! V29 läuft, vielen Dank für den Hinweis.
> Timer B zeigt nun 9.441 s mit einem mega8 und 24 Mhz

Bei mir hats komischerweise keinen Unterschied gemacht.

Ab Revision 51 ist der Fehler behoben. Allerdings sehe ich keinen Grund, 
gleich die HEAD Revision (53) zu nehmen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

ich teste mich mal nach oben ;-)
Bin zunächst gerade dabei mir ein neues BIOS zu erzeugen.

von Peter Sieg (Gast)


Lesenswert?

@Leo C. + Joe G. Super!
@Joe G. planst du einen Update der über #define D* = 1 erreichberen 
Routinen,
um den Geschwindigkeitsvorteil nutzen zu können, der weiter oben 
aufgefallen war (sobald du weißt in welchen Routinen, was geändert 
wurde..)?

Hatte heute meinen ersten Arbeitstag nach dem Urlaub :-( :-(

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Leo C.
Revision 51 läuft.

@alle
um sich unter Windows ein Bios zu erzeugen sollte man ein DD "für 
Windows" benutzen welches den Befehl conv=sync kennt. Hier in Link zu 
UNIX-Tools unter Windows, da ist auch das entsprechende DD dabei.

http://sourceforge.net/projects/unxutils/files/unxutils/current/UnxUtils.zip/download

Peter Sieg schrieb:
> @Joe G. planst du einen Update der über #define D* = 1 erreichberen
> Routinen

Ich habe sie genau so verwendet wie Leo C. sie bereitgestellt hat, bis 
auf das zusätzliche Einfügen von "clr  _0" in der V29. Aber ab V51 ist 
der Befehl schon mit drin. Ab V51 mußt du jedoch das neue Bios nutzen.

von Peter Sieg (Gast)


Lesenswert?

@Joe G.: In wieweit wirst du die V51 in deine Version übernehmen..?

Und das neue Bios von Leo C. hatte ich schon (hatte er weiter oben als 
cpm.bin zur Verfügung gestellt..).. oder gibts da schon ein neueres..?

Gruß Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Und das neue Bios von Leo C. hatte ich schon (hatte er weiter oben als
> cpm.bin zur Verfügung gestellt..).. oder gibts da schon ein neueres..?

ja, gibt es, siehe hier:

* cpm/bios.asm:
  - New disk I/O interface.
  - 16 bit wide track numbers
  -  sectran competed. Unused translation table removed.
* cpm/ipl.asm:
  - New disk I/O interface.

Peter Sieg schrieb:
> @Joe G.: In wieweit wirst du die V51 in deine Version übernehmen..?

Wenn es keine Probleme damit gibt, vollständig. Es wäre aber schön, wenn 
sie noch von anderen getestet wird.

von Peter S. (petersieg)


Lesenswert?

Man(n) .. ;-)
Mit der Geschwindigkeit kann ich z.Z nicht mithalten.. :-)
Könntet ihr dann bitte ipl.asm, bios.asm und avrcpm.asm hier einhängen..
dann sichere ich erstmal den aktuellen Stand als V1, assembliere dann 
alles
und kann dann auch testen..

BTW: Was sind die Änderungen/Vorteile insbesondere von 16 bit wide track 
numbers..?

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Man(n) .. ;-)
> Mit der Geschwindigkeit kann ich z.Z nicht mithalten.. :-)
> Könntet ihr dann bitte ipl.asm, bios.asm und avrcpm.asm hier einhängen..

Warum klickst Du denn nicht einfach hier drauf?
http://cloudbase.homelinux.net/viewvc/avr-cpm/trunk/

> dann sichere ich erstmal den aktuellen Stand als V1, assembliere dann
> alles
> und kann dann auch testen..
>
> BTW: Was sind die Änderungen/Vorteile insbesondere von 16 bit wide track
> numbers..?

Warst Du das nicht, der größere Disk-Formate wollte? ;-)

von Leo C. (rapid)


Lesenswert?

Da ich an dem Thema sowieso grade wieder dran bin...

Peter Sieg schrieb:
> BTW: Was sind die Änderungen/Vorteile insbesondere von 16 bit wide track
> numbers..?

Mit 8-Bit Nummern kommnt man maximal bis 8MByte.
(128 Byte per Sector) x (256 Sectors per Track) x (256 Tracks)

Bei SD-Karten im GB-Bereich ist das etwas wenig.

Jetzt mal ein paar Fragen zu größeren Diskformaten:

Hat sich daraüber schon jemand Gedanken gemacht?
Hat vielleicht jemand schon ein Konzept?
Oder kennt jemand einen hier brauchbaren Standard / eine fertige Lösung?

Vorschläge?


Meine eigenen Gedanken:
Fernziel vielleicht Disk-Images auf FAT Dateisystem lesen/schreiben.
(Dafür wird man wahrscheinlich einen Mega168 oder größer brauchen, da ja 
auch noch die Z80 Opcodes ins Flash müssen).

Zwischenschritt:
Die Partitionstabelle von der SD-Karte lesen.
Erste (oder einzigste) Partition als CP/M partition nutzen.
Im Bootsektor der Partition die CP/M-Diskparameter ablegen.
Die Tabelle passt mit dem IPL in die ersten 128 Byte.

Was meint Ihr?

von Peter S. (petersieg)


Lesenswert?

Leo C. schrieb:
> Warum klickst Du denn nicht einfach hier drauf?
> http://cloudbase.homelinux.net/viewvc/avr-cpm/trunk/
>
> Warst Du das nicht, der größere Disk-Formate wollte? ;-)

Na dann schaue ich mal in den 'Kofferraum' (trunk) ;-)
Werde dann mal versuchen für D1 eine V53 komplett zu übersetzen..

Ja, ich wars ;-) Aber den Verhältnissen entsprechend des Konzeptes.. 
eine
EINFACHE Implementierung!! Nichts zu kompliziertes.. Hey, wir reden hier 
über CP/M.. wer sollte selbst bei 8MB großen 'Disketten' ohne 
Unterverzeichnisse noch die Übersicht behalten.. Aktuell sind die 
diskimages sowas um die 250kb.. da passt sogar schon der BDS-C Compiler 
drauf.. also 512kb - 1MB sollte reichen.. besser wären dann mehrere 
Disketten(-images) auf einer SD Karte.. (A:, B:, C: ...)

Just my 2 cents.

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> EINFACHE Implementierung!! Nichts zu kompliziertes..

Ja eben.

> Hey, wir reden hier
> über CP/M.. wer sollte selbst bei 8MB großen 'Disketten' ohne
> Unterverzeichnisse noch die Übersicht behalten.. Aktuell sind die

Der Punkt ist, daß kleine Images auch nicht einfacher zu implementieren 
sind, als große. Und warum dann so unendlich viel Platz 
verschwenden(?/!)

> diskimages sowas um die 250kb.. da passt sogar schon der BDS-C Compiler
> drauf.. also 512kb - 1MB sollte reichen..

Wenn ich das mit der Partitionstabelle so wie oben angedeutet mache, 
kannst Du ja eine 512K Partition für CP/M anlegen. Und den Rest 
anderweitig nutzen.

> besser wären dann mehrere
> Disketten(-images) auf einer SD Karte.. (A:, B:, C: ...)

Dann eben 2 Partitionen, oder 3... Bei 4 wird aber Schluß sein, weil 
erweiterte Partitionen will ich mir nicht antun.

von Peter S. (petersieg)


Lesenswert?

Soo.. hat ein bißchen gedauert.. mußte erstnoch obiges dd 
herunterladen.. und mit dem 'alten' dd unter admin Rechten dann das 
diskimage schreiben (Vista)..
1
CPM on an AVR, v1.0
2
Initing mmc...
3
Testing RAM: fill...wait...reread...
4
5
Ok, CPU is live!
6
ipl
7
8
62k cp/m vers 2.2
9
10
A>dir
11
A: ASM      COM : DDT      COM : DUMP     COM : ED       COM
12
A: T        COM : TLOOP    COM : LOAD     COM : MBASIC   COM
13
A: 23       BAS : BAGELS   BAS : CHECKERS BAS : STARTREK BAS
14
A: TREKINST BAS : MASTRMND BAS : WEEKDAY  BAS : PIP      COM
15
A: STAT     COM : SUBMIT   COM : XSUB     COM : ZORK1    COM
16
A: ZORK1    DAT
17
A>t b
18
19
Timer running. Elapsed: 007.573s.
20
A>

Na.. 7.573s allerdings bei 30MHz ;-)
Target war ATmega88.

Na, wenn das keine super Arbeit ist Leo C. ;-)
Klasse!!

Und VIELEN Dank!

Gruß Peter

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Peter Sieg schrieb:
> Na.. 7.573s allerdings bei 30MHz ;-)

Mir wird schwindelig.

Wenn ich mich nicht verrechnet habe, hast Du bereits bei ca. 13,5MHz den 
sicheren Bereich verlassen.

Wo sind meine Herztropfen.

von Peter Sieg (Gast)


Lesenswert?

Leo C. schrieb:
> Wenn ich mich nicht verrechnet habe, hast Du bereits bei ca. 13,5MHz den
> sicheren Bereich verlassen.

Haha.. Dann sind wir schon drei (der dritte ist jemand aus dem F64, der 
einen ATmega88 als SID Ersatz mit 40MHz laufen läßt) ;-)

@Joe G: Mein Vorschlag wäre es, die aktuelle Version um MK SVN als V1 zu 
belassen (inkl. ipl+bios.asm) und die R53 von Loe C. als aktuelle 
Version ins MK SVN zu spiegeln.. sodaß wir im MK SVN immer etwas größere 
Abstände zw. Versionen bekommen..

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Wenn ich mich nicht verrechnet habe, hast Du bereits bei ca. 13,5MHz den
> sicheren Bereich verlassen.
Das ist ein Fehler im Datenblatt, die lineare Funktion knickt nicht bei 
4.5V ab, Peter hat nur veregssen 12V an den AVR anzulegen. Nicht 
auszudenken mit welcher Frequenz er bei 220V läuft! Ich vermute mal mit 
50Hz ;-)

Peter Sieg schrieb:
> Mein Vorschlag wäre es, die aktuelle Version um MK SVN als V1 zu
> belassen (inkl. ipl+bios.asm)

Ich würde die Version V29 von Leo C. incl. ipl+bios als V1 eindampfen. 
Mit der derzeitigen Hardware dürfte es damit für weitere 
Nachbauinteressenten keine Probleme geben. R52 nehme ich als aktuelle 
Testversion auf.

Peter Sieg schrieb:
> und mit dem 'alten' dd unter admin Rechten dann das
> diskimage schreiben
Eignet sich das "neue" DD nicht zum Diskimage schreiben? Ich habe dazu 
bisher auch nur das "alte" verwendet.

von Peter Sieg (Gast)


Lesenswert?

@Joe G. Prima. Ich habe hier jetzt wie schon geschrieben, die R53 von 
Leo C im Einsatz.. die unterstützt aber wohl nicht mehr das urspüngliche 
HW Layout (sind ja nur die 2 Pins geändert..). Ich habe mir erlaubt 
diese Version auch mal wieder dem Entwickler Sprite_tm zukommen zu 
lassen.. Er freut sich sicher über solche Updates von Zeit zu Zeit..

Bei 220V erwarte ich auch 50Hz.. nachdem sich der Rauch verzogen hat.. 
;-)

Aber ich plane auch noch einen Test mit 40MHz.. da aber wohl mit einem 
Quarzoszi, da es wohl keine Grundton Quarze für diese Frequenz mehr 
gibt..
Da werde ich dann meinen LR Aufbau umbauen müssen.. ;-)

Joe G. schrieb:
> Eignet sich das "neue" DD nicht zum Diskimage schreiben? Ich habe dazu
> bisher auch nur das "alte" verwendet.

Anscheinend nicht.. ich habe es damit nicht hinbekommen.. evtl. findet 
mal jemand eines, das beides kann..

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@alle

Der aktuelle Bearbeitungsstand liegt nun wieder auf dem SVN-Repositor.
Unter V 1.0 findet ihr den letzten Stand der noch mit der alten Hardware 
läuft. Bei den folgenden Versionen (Verzeichnis /Work) müssen die zwei 
Pins, wie weiter oben schon beschrieben, getauscht werden.

von Zwölfliter (Gast)


Lesenswert?

Laufen denn auch schon große Programme wie Wordstar?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Zwölfliter schrieb:
> Laufen denn auch schon große Programme wie Wordstar?

Derzeit laufen alle für den 8080 codierten Programme, egal ob groß oder 
klein. Keine Ahnung ob es Wordstar für den 8080 gab, ich kenne es nur 
für Z80.

von Peter Sieg (Gast)


Lesenswert?

@Leo C. Bezüglich mehrere Disketten (A: , B:, ...) wäre mein erster 
Ansatz gewesen, alle diskimages mit fester Größe ('disksize') direkt mit 
z.b dd hintereinander zu hängen und dies dann so auch per dd auf die SD 
Karte zu bringen.. Im AVR wäre dann ein 'Offset' zu halten, der beim 
Start=0 ist und
beim Wechseln von A: nach z.B B: dann entsprechend auf 1 wechselt.. 
(C=2,..)
Beim Zugriff auf die SD Karte ist dieser Offset dann entsprechend zu 
berücksichtigen (Offset * disksize = Block 0 der aktuellen 'Diskette')..

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> @Leo C. Bezüglich mehrere Disketten (A: , B:, ...) wäre mein erster
> Ansatz gewesen, alle diskimages mit fester Größe ('disksize') direkt mit
> z.b dd hintereinander zu hängen und dies dann so auch per dd auf die SD
> Karte zu bringen..

zu spät ;-)

Ich habe den code, um CPM-Laufwerke (A: .. D:) von Partitionen zu lesen, 
fast fertig. Z.Zt. kämpfe ich allerdings mit der SD-Karte/dem 
MMC-Treiber,
weil die Karte, die ich zum Testen nehmen wollte, Schwierigkeiten macht.
Werde jetzt erst mal meine alte Karte umpartitionieren.

Vorteil der Partitionen ist vor allem, daß man den nicht für 
CPM-genutzten Platz für andere Zwecke verwenden kann. Ich habe z.B. auf 
jeder Karte ein MP3-Verzeichnis fürs Auto.

Unter Linux ist es kein Problem, Partitionen mit beliebigen IDs 
anzulegen. Für CP/M ist 0x52 reserviert, und die möchte ich dann auch 
nehmen.
Ich weiß nicht, ob es für Windows auch gängige Partitionierungstools 
gibt, die das können. Aber notfalls gehts ja mit dd. Ist dann auch nicht 
umständlicher als ohne Partitionen.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Keine Ahnung ob es Wordstar für den 8080 gab, ich kenne es nur
> für Z80.

Seltsam, Wordstar ist ja imho das CP/M-Programm schlechthin. Ich bin 
eigentlich davon überzeugt. daß alle CP/M-80 Versionen von Wordstar auch 
auf 8080 laufen. Es sei denn, jemand hat in der Printer patch area 
Z80-Code verwendet (Oder so ähnlich).

Ich bin noch nicht dazu gekommen, einen Wordstar an meine 
Terminalemulation anzupassen. Der Worstar-Installer, den ich auprobiert 
habe, hatte kein VT10x und kein ANSI im Angebot. Gelaufen ist er aber.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich hab es gerade mal ausprobiert. WS 3.0 läuft siehe Bild.

von Peter Sieg (Gast)


Lesenswert?

@Leo C. + Joe G. -> das solltet ihr entscheiden:
1
Hi again,
2
3
Just looked through the source. Seems the two guys made some truly
4
non-trivial improvements in the code, so I want to mention them on the
5
site and in the copyright. Do you know if it's OK if I just put down 'Leo
6
C.' and 'Joe G.' as their names, or do they want another moniker in there?
7
8
Jeroen
9
10
On Wed, 28 Jul 2010, Peter Sieg wrote:
11
12
> Hi Jeroen.
13
>
14
> Please find attached the actual version of your avrcpm project.
15
> 8080 opcodes fixed, warm start fixed, speed up of app. 100%,
16
> target are: atmege8,88,168 and 328.
17
> The improvements are not from me, but rather Leo C. and Joe G. from
18
> the german mikrocontroler forum!
19
> (2 pins have to be exchanged:
20
> Pin 24 - PC1 - /WE
21
> Pin 27 - PC4 - IO3)
22
>
23
> Many thanks, Peter

Am besten mir/hier kurz bescheid geben.. dann gebe ichs weiter oder
auch gerne natürlich direkt an:
jeroen (at) spritesmods.com

Peter

von Leo C. (rapid)


Lesenswert?

Zum Testen habe ich eine etwas chaotische Partitionierung erzeugt:
1
leo@cb:~$ /sbin/fdisk -luc /dev/sdb
2
3
Disk /dev/sdb: 1009 MB, 1009254400 bytes
4
32 heads, 61 sectors/track, 1009 cylinders, total 1971200 sectors
5
Units = sectors of 1 * 512 = 512 bytes
6
Sector size (logical/physical): 512 bytes / 512 bytes
7
I/O size (minimum/optimal): 512 bytes / 512 bytes
8
Disk identifier: 0x0001fc66
9
10
   Device Boot      Start         End      Blocks   Id  System
11
/dev/sdb1            8192     1890303      941056    6  FAT16
12
/dev/sdb2         1890304     1906687        8192   52  CP/M
13
/dev/sdb3            2048        8191        3072   52  CP/M
14
15
Partition table entries are not in disk order
16
leo@cb:~$
Die erste CP/M-Partition (A:) liegt also ganz hinten auf der SD-Karte.

Und das kommt raus:
1
A>CPM on an AVR, v1.0
2
Testing RAM: fill...wait...reread...
3
Initing mmc...
4
CP/M partition at: 1890304, size: 8192KB.
5
CP/M partition at: 2048, size: 3072KB.
6
7
Ok, CPU is live!
8
ipl
9
10
62k cp/m vers 2.2
11
12
A>stat a:dsk:
13
14
    A: Drive Characteristics
15
 1944: 128 Byte Record Capacity
16
  243: Kilobyte Drive  Capacity
17
   64: 32  Byte Directory Entries
18
   64: Checked  Directory Entries
19
  128: Records/ Extent
20
    8: Records/ Block
21
   26: Sectors/ Track
22
    2: Reserved Tracks
23
24
A>stat b:dsk:
25
26
    B: Drive Characteristics
27
 1944: 128 Byte Record Capacity
28
  243: Kilobyte Drive  Capacity
29
   64: 32  Byte Directory Entries
30
   64: Checked  Directory Entries
31
  128: Records/ Extent
32
    8: Records/ Block
33
   26: Sectors/ Track
34
    2: Reserved Tracks
35
36
A>

Das Disk-Format is noch das alte mit nur 243 Kilobyte. Die zugehörigen 
Tabellen sind jetzt noch fest im BIOS und werden demnächst dynamisiert.

Wie immer auf:
http://cloudbase.homelinux.net/viewvc/avr-cpm/trunk/avrcpm/

Neues BIOS ist auch notwendig, damits klappt.

von Peter Sieg (Gast)


Lesenswert?

@Leo C.: Frage: diskimages werden nach wie vor mit z.B dd aufgespielt?
Also z.B dd if=diskimage of=/dev/sdb2 bs=512 ...(unter Linux)..?

Super! Man(n).. selbst ein Vollzeit-Entwickler könnte da nicht schneller
dran arbeiten.. ;-) Da komme ich ja mit dem wechseln der Versionen nicht
nach..

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> @Leo C.: Frage: diskimages werden nach wie vor mit z.B dd aufgespielt?
> Also z.B dd if=diskimage of=/dev/sdb2 bs=512 ...(unter Linux)..?

Genau.

Übrigens,
für linux gibt es sfdisk, mit dem man Partitionstabellenänderungen 
scripten kann, zB. im Makefile. Mit "sfdisk -c /dev/sdb 2 52" kann man 
z.B. die Partitions-ID von Partition 2 auf 52 einstellen.

von Peter S. (petersieg)


Lesenswert?

Soo.. klappt!
1
CPM on an AVR, v1.0
2
Testing RAM: fill...wait...reread...
3
Initing mmc...
4
CP/M partition at: 401625, size: 8032KB.
5
CP/M partition at: 417690, size: 8032KB.
6
CP/M partition at: 433755, size: 8032KB.
7
8
Ok, CPU is live!
9
ipl
10
11
62k cp/m vers 2.2
12
13
A>dir
14
15
16
A: ASM      COM : DDT      COM : DUMP     COM : ED       COM
17
A: T        COM : TLOOP    COM : LOAD     COM : MBASIC   COM
18
A: 23       BAS : BAGELS   BAS : CHECKERS BAS : STARTREK BAS
19
A: TREKINST BAS : MASTRMND BAS : WEEKDAY  BAS : PIP      COM
20
A: STAT     COM : SUBMIT   COM : XSUB     COM : ZORK1    COM
21
A: ZORK1    DAT
22
A>b:
23
24
25
B>dir
26
27
28
B: TTT2     COM : OTHELLO  COM : MMIND    COM : ED       COM
29
B: LOAD     COM : STONE    COM : PIP      COM : STAT     COM
30
B: SUBMIT   COM : XSUB     COM
31
B>

...allerdings Partitionierung, Typ=52 setzen nur mit Linux Live-CD und 
cfdisk o.ä. Tools.. Auch bespielen per dd ging nur unter Linux, da das 
Windows dd die Typ=52 Partitionen nicht kennt/anzeigt..
=> Wer kennt ein s/cfdisk unter Windows..?

Ansonsten wiedermal Super!

Gruß Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> ...allerdings Partitionierung, Typ=52 setzen nur mit Linux Live-CD und
> cfdisk o.ä. Tools.. Auch bespielen per dd ging nur unter Linux, da das
> Windows dd die Typ=52 Partitionen nicht kennt/anzeigt..

Etwas bequemer als PC mit Life-CD booten ist dann vielleicht dd und 
Binär/Hex-Editor.

dd if=/dev/sdb of=mbr-b.bin bs=512 count=1

mbr-b.bin editieren.
Der Aufbau der Partitionstabelle ist im Wikipedia-Artikel gut 
dargestellt:
http://de.wikipedia.org/wiki/Partitionstabelle

Der Partitionstyp steht also für die erste Partition auf  1C2. Für die 
nächsten 3 Partitionen entsprechend auf 1D2, 1E2, 1F2.
Dieses Byte auf 52 ändern und die Datei zurückschreiben:

dd of=/dev/sdb if=mbr-b.bin bs=512 count=1

Fertig.


> => Wer kennt ein s/cfdisk unter Windows..?

Ich hab auch mal kurz geschaut, ob es z.B. (g)parted für Windows gibt 
und bin gleich fündig geworden. Hurra... Linux-Live-CD!

von Peter S. (petersieg)


Lesenswert?

Leo C. schrieb:
> Etwas bequemer als PC mit Life-CD booten ist dann vielleicht dd und
> Binär/Hex-Editor.

Hmm.. der Argumentation kann ich nicht folgen..?
Die Partitionierung muß bis ich was anderes weiß unter Linux (Live-CD 
etc.) erfolgen.. Und dann den MBR extrahieren, den Typ mit HEX-Editor 
ändern nur
damit ich unter Windows mit dd die dann erkannten Partition beschreiben 
kann, um danach den Typ wieder ändern zu müssen (auch wenn man eine 
MBR-Kopie verwendet..) scheint mir nicht wirklich einfacher zu sein.. 
:-(

Evtl. wäre es doch hierfür besser den Typ nicht auf 52 sondern FAT16 zu 
stellen..? Wenn die dann alle unter dd+Windows erkannt werden, dann 
müßte man nur einmalig die Partitionierung unter Linux vornehmen.. aber 
erstmal abwarten.. evtl. finden wir doch noch ein natives Windows Tool..

BTW: Es funktioniert nach wie vor auch nur eine primäre Partition FAT 
mit dem dd diskimage wie zuvor genutzt.. dann natürlich auch nur ein LW 
A:

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> BTW: Es funktioniert nach wie vor auch nur eine primäre Partition FAT
> mit dem dd diskimage wie zuvor genutzt.. dann natürlich auch nur ein LW
> A:

Diese Variante läuft bei mir mangels Linux auch gerade. Das kann aber 
nicht die Lösung sein. Ich untersuche gerade Diskpart.EXE für Windows.

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Leo C. schrieb:
>> Etwas bequemer als PC mit Life-CD booten ist dann vielleicht dd und
>> Binär/Hex-Editor.
>
> Hmm.. der Argumentation kann ich nicht folgen..?
> Die Partitionierung muß bis ich was anderes weiß unter Linux (Live-CD
> etc.) erfolgen.. Und dann den MBR extrahieren, den Typ mit HEX-Editor
> ändern nur
> damit ich unter Windows mit dd die dann erkannten Partition beschreiben
> kann, um danach den Typ wieder ändern zu müssen (auch wenn man eine
> MBR-Kopie verwendet..) scheint mir nicht wirklich einfacher zu sein..
> :-(

Wer hat denn soooo argumentiert?

Partitionieren kann man doch noch immer unter Windows, oder?
Warum also nicht mit dem Windows Partitionierer die Karte nach Wunsch 
aufteilen, und den CP/M-Partitionen vorläufig einen Typ geben, den 
Windows kann.

Dann das Windows fdisk oder Festplattenverwaltungswerkzeug, oder wie 
auch immer das Teil unter NT, XP,... heißt, verlassen und anschließend 
dd und Hex-Editor?


> Evtl. wäre es doch hierfür besser den Typ nicht auf 52 sondern FAT16 zu
> stellen..? Wenn die dann alle unter dd+Windows erkannt werden, dann
> müßte man nur einmalig die Partitionierung unter Linux vornehmen..

Mein Ironiedetektor scheint gerade nicht zu funktionieren.
Und dd kennt weder Partitionstypen (Partition IDs) noch Dateisysteme.

> BTW: Es funktioniert nach wie vor auch nur eine primäre Partition FAT
> mit dem dd diskimage wie zuvor genutzt.. dann natürlich auch nur ein LW
> A:

Das hat aber mit einer primären FAT überhaupt nichts zu tun. In diesem 
Fall ist nach dem dd auf der Karte kein MBR mehr, keine 
Partitionstabelle, und keine Partitionen, schon gar keine mit FAT...
Und was vorher auf der Karte war, spielt überhaupt keine Rolle mehr.

Wenn ich in dem neuen Programm keine Partitionstabelle finde, dann mache 
ich der Einfachheit halber das gleiche wie vorher. Das heißt, wenn am 
Anfang der SD-Karte "zufällig" ein CP/M-Dateisystem steht, gehts 
weiter...


ps: Meinen Rechner habe ich diese Woche noch nicht neu gestartet. Und 
nur, um eine Speicherkarte zu formatieren, werde ich das ganz bestimmt 
nicht tun.
leo@cb:~$ uptime
 17:09:00 up 10 days,  5:17, 15 users,  load average: 0.26, 0.18, 0.06

von Peter S. (petersieg)


Lesenswert?

@Leo C.
Meine SD Karte ist unter Linux etwa so partitioniert:
/dev/sdh1  200MB  FAT16
/dev/sdh2    8MB  CP/M
/dev/sdh3    8MB  CP/M
/dev/sdh4    8MB  CP/M
(app. 30MB unnused)

Diese Karte unter dem windows dd zeigt NUR die FAT16 Partition an!
Wenn ich da ein dd if=diskimage of=\\...die einzige angezeigte Part... 
bs=512 mache, läuft avrcpm damit als A:

Wie gesagt, die Typ=52 = CP/M Partitionen werden erst gar nicht von dem
Tool unter Windows angezeigt.. ignoriert als wenn es sie gar nicht 
gäbe..
Daher vermute ich, das wenn man vom Type CP/M hin zu FAT16 auch die 
anderen Partitionen eben wieder zugreifbar macht.. und dann auch wieder 
unter Windows mit dd beschreiben kann..

diskpart unter Windows gibt mir:
1
  Datentr ###  Status      Größe    Frei     Dyn  GPT
2
  --------  ----------  -------  -------  ---  ---
3
       0    Online       149 GB      0 B
4
       1    Online       244 MB    23 MB
5
       2    Kein Mediu      0 B      0 B
6
       3    Kein Mediu      0 B      0 B
7
       4    Kein Mediu      0 B      0 B
8
       5    Kein Mediu      0 B      0 B
9
       6    Kein Mediu      0 B      0 B
10
       7    Kein Mediu      0 B      0 B
11
       8    Kein Mediu      0 B      0 B
12
13
DISKPART> select disk 1
14
15
Datenträger 1 ist jetzt der gewählte Datenträger.
16
17
DISKPART> list part
18
19
  Partition ###   Typ              Größe    Offset
20
  -------------  ----------------  -------  -------
21
  Partition 1    Primär             196 MB    32 KB
22
  Partition 0    Primär            8033 KB   196 MB
23
  Partition 0    Primär            8033 KB   204 MB
24
  Partition 0    Primär            8033 KB   212 MB

Ich persönlich habe kein wirkliches Problem mit einer Linux Live-CD..
Finde aber es aber schade, das wir nun ohne Linux - allein mit Windows 
Mitteln - nicht mehr auskommen.. wobei wir ja noch 'das Tool' evtl. noch
finden.. (diskpart ist ein Krampf..)

Gruß Peter

von Peter S. (petersieg)


Lesenswert?

Leo C. schrieb:
> Partitionieren kann man doch noch immer unter Windows, oder?
> Warum also nicht mit dem Windows Partitionierer die Karte nach Wunsch
> aufteilen, und den CP/M-Partitionen vorläufig einen Typ geben, den
> Windows kann.
>
> Dann das Windows fdisk oder Festplattenverwaltungswerkzeug, oder wie
> auch immer das Teil unter NT, XP,... heißt, verlassen und anschließend
> dd und Hex-Editor?

Das könnte so gehen.. aber das ist nicht einfacher als gleich eine 
Live-CD zu nehmen.. (just my 2 cents)..

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Diese Karte unter dem windows dd zeigt NUR die FAT16 Partition an!

Das dd, das ich kenne, kann überhaupt keine Partitionen anzeigen.
Das Windows dd scheint etwas völlig anderes zu sein.

> Wenn ich da ein dd if=diskimage of=\\...die einzige angezeigte Part...
> bs=512 mache, läuft avrcpm damit als A:

Wie greift man denn mit dd auf Geräte, bzw Partitionen, zu? Die 
interessanteste Information hast Du weggelassen.


> Wie gesagt, die Typ=52 = CP/M Partitionen werden erst gar nicht von dem
> Tool unter Windows angezeigt.. ignoriert als wenn es sie gar nicht
> gäbe..


> Daher vermute ich, das wenn man vom Type CP/M hin zu FAT16 auch die
> anderen Partitionen eben wieder zugreifbar macht.. und dann auch wieder
> unter Windows mit dd beschreiben kann..

Da kämen wir aber garantiert in Teufels Küche. Zum einen wird sich dann 
Windows über jede (avr-)CP/M-Partition hermachen, und vielleicht 
versuchen, sie zu reparieren. Zum anderen wird unser avr von jder 
FAT16-Partition booten wollen, die ihm unter die Kontakte kommt. Ich 
bestehe nicht auf die 52, aber IDs, die Windows kennt, kann man halt 
nicht nehmen.
1
>   Partition ###   Typ              Größe    Offset
2
>   -------------  ----------------  -------  -------
3
>   Partition 1    Primär             196 MB    32 KB
4
>   Partition 0    Primär            8033 KB   196 MB
5
>   Partition 0    Primär            8033 KB   204 MB
6
>   Partition 0    Primär            8033 KB   212 MB

Also Windows sieht die Partitionen ja. Dann sollte es auch ein Wergzeug 
geben, mit dem man darauf zugreifen kann. dd?

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Diese Karte unter dem windows dd zeigt NUR die FAT16 Partition an!
> Wenn ich da ein dd if=diskimage of=\\...die einzige angezeigte Part...
> bs=512 mache, läuft avrcpm damit als A:

Ach ja, hatte ich ganz vergessen:
Es geht ja hier garnicht um Partitionen. Es geht darum, den ersten 
Sektor von der Platte zu lesen und zu schreiben. Und das kann das dd, 
das Du benutzt ja offensichlich. Schließlich hast Du bisher damit deine 
CP/M-Images auf die Karten gebracht. Und wenn dd ab dem ersten 
Platten-/Kartensektor schreiben kann, wird es wohl auch den 1. Sektor 
lesen können.



Peter Sieg schrieb:
> Das könnte so gehen.. aber das ist nicht einfacher als gleich eine
> Live-CD zu nehmen.. (just my 2 cents)..

Für mich schon.
Bevor ich den Rechner (hier sogar 2x) wegen irgendwas neu starten muß, 
installiere ich doch lieber gleich ein anderes Betriebssystem. (scnr)
Achso, daß habe ich vor 16 Jahren ja gemacht.

von Peter Sieg (Gast)


Lesenswert?

@Leo C.: Na, nu lass mal gut sein :-) Windows User, die keine Linux 
Live-CD nehmen wollen, haben ja durch den sehr guten Fall-Back 
Mechanismus immerhin das was alle vorher hatten.. nämlich LW A: = 
gerechte Strafe würden jetzt Linux Nutzer sagen - alle anderen haben 
halt bis zu 4 Laufwerke.. ;-)
=> kann ICH mit leben..

Trotzdem suche ich weiter, das unter Windows noch hinzubekommen.. ok? 
;-)
(Cygwin hat cfdisk.. vergesst es!! Bloß die Finger weg davon.. erkennt 
LW/Part. ebenfalls nicht.. und trägt sich noch nichtmal sauber ein zum 
deinstallieren..)

Bin übrigens am WE nicht/wenig online..

Peter

von Peter S. (petersieg)


Lesenswert?

Leo C. schrieb:
> Wie greift man denn mit dd auf Geräte, bzw Partitionen, zu? Die
> interessanteste Information hast Du weggelassen.
1
C:\cpmtools>dd2 --list
2
rawwrite dd for windows version 0.5.
3
Written by John Newbigin <jn@it.swin.edu.au>
4
This program is covered by the GPL.  See copying.txt for details
5
Win32 Available Volume Information
6
...
7
NT Block Device Objects
8
\\?\Device\CdRom0
9
  size is 2147483647 bytes
10
\\?\Device\Harddisk0\Partition0
11
  link to \\?\Device\Harddisk0\DR0
12
  Fixed hard disk media. Block size = 512
13
  size is 160040803840 bytes
14
\\?\Device\Harddisk0\Partition1
15
  link to \\?\Device\HarddiskVolume1
16
\\?\Device\Harddisk0\Partition2
17
  link to \\?\Device\HarddiskVolume2
18
  Fixed hard disk media. Block size = 512
19
  size is 9663676416 bytes
20
\\?\Device\Harddisk1\Partition0
21
  link to \\?\Device\Harddisk1\DR1
22
  Removable media other than floppy. Block size = 512
23
  size is 255852544 bytes
24
\\?\Device\Harddisk1\Partition1
25
  link to \\?\Device\HarddiskVolume3
26
  Removable media other than floppy. Block size = 512
27
  size is 205599744 bytes
28
\\?\Device\Harddisk2\Partition0
29
  link to \\?\Device\Harddisk2\DR2
30
\\?\Device\Harddisk2\Partition1
31
...

Wie man sieht, wird die gesamte SD Karte als 
\\?\Device\Harddisk1\Partition0 erkannt und die FAT16 Partition als 
\\?\Device\Harddisk1\Partition1.
Die anderen 3 Partition = Essig.

Und einfach auf ...Part.2 zu schreiben geht nicht:
1
C:\cpmtools>dir game*
2
 Datenträger in Laufwerk C: ist VISTA
3
 Volumeseriennummer: 849E-3C87
4
5
 Verzeichnis von C:\cpmtools
6
7
29.07.2010  13:31            71.168 gameimage
8
               1 Datei(en),         71.168 Bytes
9
               0 Verzeichnis(se), 98.861.772.800 Bytes frei
10
11
C:\cpmtools>dd2 if=gameimage of=\\?\Device\Harddisk1\Partition2 bs=512
12
rawwrite dd for windows version 0.5.
13
Written by John Newbigin <jn@it.swin.edu.au>
14
This program is covered by the GPL.  See copying.txt for details
15
Error native opening file: 0 Der Vorgang wurde erfolgreich beendet

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> \\?\Device\Harddisk1\Partition0
>   link to \\?\Device\Harddisk1\DR1
>   Removable media other than floppy. Block size = 512
>   size is 255852544 bytes

> Wie man sieht, wird die gesamte SD Karte als
> \\?\Device\Harddisk1\Partition0 erkannt und die FAT16 Partition als

Also müßtest Du den MBR so lesen können?
dd if=\\?\Device\Harddisk1\Partition0 of=mbr-b.bin bs=512 count=1

Wenn ja, anschließend die ID's ändern und den MBR zurückschreiben.

> \\?\Device\Harddisk1\Partition1.
> Die anderen 3 Partition = Essig.

Das ist natürlich ausgesprochen schade, daß die dort nicht erscheinen.
Dann müßte man vor und nach jedem Beschreiben einer CP/M-Partition den 
MBR ändern. Das wäre mir dann auch zu umständlich.

Zu dem Thema habe ich das hier vorhin gefunden:
http://www.chrysocome.net/dd-backdoor

Das macht aber auch keinen Spaß.

> Und einfach auf ...Part.2 zu schreiben geht nicht:

Unter Linux kann man mit den cpmtool direkt auf die Karte zugreifen:
1
leo@cb:~$ cpmls -d -f avrcpm /dev/sdf3
2
ASM      COM : DDT      COM : DUMP     COM : ED       COM
3
INSTALL  COM : LOAD     COM : PIP      COM : STAT     COM
4
SUBMIT   COM : T        BIN : XSUB     COM : MAILMRGE OVR
5
MERGPRIN OVR : WIMSGS   OVR : WS       COM : WSMSGS   OVR
6
WSOVLY1  OVR : WSU      COM

Da lohnt es sich ja fast, Linux in einer virtuellen Maschine zu 
installieren, wenn man ansonsten mit Windows weiterarbeiten möchte.

von Peter S. (petersieg)


Lesenswert?

Um mal etwas von der Diskussion der Partitionieung unter Windows 
abzulenken.. ;-)

Aus meiner Sicht könnten nächste Schritte sein:
* Diskettenimage von 243kb vergrößern Richtung 1-xMB.
  (Den riesigen Platz kann man ohne Unterverzeichnisse CP/M-like über 
andere
  USER x etwas übersichtlicher gestalten.. und die cpmtools erlauben die
  Befüllung unterschiedlicher Userbereiche)
  Da hat man dann auch mit nur einer 'Diskette' was davon ;-)
* Eine Möglichkeit auch ohne cpmtools einzelne Dateien zwischen der CP/M 
und
  der Host Welt auszutauschen. Das N8VEM Projekt verwendet dazu 
klassisch
  ein XModem (XM.COM) Programm.. das wäre sicher auch für uns eine gute 
Wahl.
  Andere Ideen..?
* Dann kämen ggf. die Z80 Opcodes dran...
* Und wie wäre es mit einem passenden, seriellen Terminal mit 
BAS/VGA/LCD als
  Bildschirm und PS/2 Tastatur ala PropTerm.. aber auch auf AVR Basis..?

Peter

von Peter S. (petersieg)


Lesenswert?

Leo C. schrieb:
> Also müßtest Du den MBR so lesen können?
> dd if=\\?\Device\Harddisk1\Partition0 of=mbr-b.bin bs=512 count=1
>
> Wenn ja, anschließend die ID's ändern und den MBR zurückschreiben.

Ja kann ich.. ändert aber leider nichts daran, das dd die Partitionen 
dann immer noch nicht bearbeiten kann.. der muß da wohl noch mehr als 
nur die ID prüfen.. :-(

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Um mal etwas von der Diskussion der Partitionieung unter Windows
> abzulenken.. ;-)

Oh, heute komme ich gar nicht mehr zum Essen.

> Aus meiner Sicht könnten nächste Schritte sein:
> * Diskettenimage von 243kb vergrößern Richtung 1-xMB.

Klar, das muß kommen. Mit einem festen Format wärs auch schnell 
gemacht.

>   (Den riesigen Platz kann man ohne Unterverzeichnisse CP/M-like über
> andere
>   USER x etwas übersichtlicher gestalten.. und die cpmtools erlauben die
>   Befüllung unterschiedlicher Userbereiche)

Leider werden die Userbereiche von CP/M 2.2 sehr schlecht unterstützt.
Mit CP/M 3 oder einer der 2.2 Alternativen wäre man da besser dran.

> * Eine Möglichkeit auch ohne cpmtools einzelne Dateien zwischen der CP/M
> und
>   der Host Welt auszutauschen. Das N8VEM Projekt verwendet dazu
> klassisch
>   ein XModem (XM.COM) Programm.. das wäre sicher auch für uns eine gute
> Wahl.

Sollte kein Problem sein. Einfach mal ausprobieren.

>   Andere Ideen..?

CP/NET? ;-)

> * Dann kämen ggf. die Z80 Opcodes dran...

Irgendwann sollte man das mal angehen, bevor das Flash mit anderen 
Sachen voll ist. ;) Der Interpreter wird dadurch aber auf jeden Fall 
langsamer werden. Ein Grund, warum ich das bisher nicht angegangen bin. 
Wenn da nicht das ein oder andere wichtige Programm wäre, das Z80 
vorraussetzt (mir fällt gerade nur Turbopascal ein), würde ich es sogar 
ganz bleiben lassen.

> * Und wie wäre es mit einem passenden, seriellen Terminal mit
> BAS/VGA/LCD als
>   Bildschirm und PS/2 Tastatur ala PropTerm.. aber auch auf AVR Basis..?

Anderes Projekt. :-)

Ansonsten will ich noch eine RAM-Disk einbauen. Beim Originalaufbau hat 
man dafür zwar nur 64KByte, aber man könnte schonmal CCP+BDOS dort 
deponieren und beim Warmstart von dort laden. Außerdem habe ich bei 
meinem Aufbau jetzt 2 4x4MBit Chips drin. Das gibt dann eine RAM-Disk 
mit knapp 4 MByte. :)

von Dagobert (Gast)


Lesenswert?

Zum Thema Terminal:

Schaut euch mal VGATerm auf www.dieprojektseite.de an.

von Peter Sieg (Gast)


Lesenswert?

@Dagobert: Für 44,90€ ein gekapseltes Modul, was man dann noch mit 
weiteren Bauteile in Richtung > 60€ zusammenbauen muß..?? Nein Danke. 
Ansonsten schöne Arbeit.

@Leo C.
>Klar, das muß kommen. Mit einem festen Format wärs auch schnell
>gemacht.
Warum nicht.. ist doch jetzt auch ein festes Format.. man muß doch nicht
immer alles variabel halten.. besser wäre es da wenn das ein Format 
wäre,
das man auch dem AltairZ80 Emulator beibringen könnte.. dann kann man 
Images
im Emulator laufen lassen und per R/W auch Dateien zw. CP/M und 
Hostsystem transferieren..

Peter

von hschuetz (Gast)


Lesenswert?

Hallo Leute,
das Modul gibts für 28,49 Euro, hat alles on Board, auch eine 3,3V 
Stromversorgung (200mA)...
http://www.watterott.com/de/Schnittstellen/Video-VGA
Gruß
Hans- Werner

von Peter Sieg (Gast)


Lesenswert?

hschuetz schrieb:
> das Modul gibts für 28,49 Euro, hat alles on Board, auch eine 3,3V
> Stromversorgung (200mA)...
> http://www.watterott.com/de/Schnittstellen/Video-VGA

@hschuetz: Super, Danke! Genau was ich gesucht habe.. gleich mal eins 
bestellt.. ;-)

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Es gab Anfragen ob noch Leiterplatten verfügbar wären. Leider nein.
Bei genug Interessenten könnte natürlich eine neue Serie mit den 
entsprechenden Änderungen aufgelegt werden. Mir fällt da spontan ein:
- geänderte Pinbelegung am RAM (RAM Disk)
- Video-VGA siehe weiter oben.
- weitere Vorschläge ???

von Dagobert (Gast)


Lesenswert?


von Peter Sieg (Gast)


Lesenswert?

Joe G. schrieb:
> Es gab Anfragen ob noch Leiterplatten verfügbar wären. Leider nein.
> Bei genug Interessenten könnte natürlich eine neue Serie mit den
> entsprechenden Änderungen aufgelegt werden.

@Joe G. Ja, die beiden Pin's am Ram sollte mindestens aufgrund der 
heutigen Erfahrungen getauscht werden.. ;-) Größerer Ram../ Ramdisk.. 
warten, was Leo C. hier zaubert.. beim Thema Terminal wirds etwas 
schwieriger..
Was ich bisher so gefunden hatte:
Beitrag "AVR ASCII Video Terminal  - 40 x 25  - BAS Signal"
http://www.serasidis.gr/circuits/AVR_VGA/avr_vga.htm
Beitrag "Einfacher Low Cost LCD Controller für 320x240 LCD im Textmodus"
http://www.shaels.net/index.php/propterm

Obigen 3 fehlt noch die PS/2 Tastatur inkl. senden zum AVR.. Code dafür 
ist
sicher verfügbar.. also entweder noch mit einbauen oder separat im 
weiteren AVR aufbauen.. ideal würde ich auch die Realisierung mit 
ATmega88/168 ansehen.. gleicher Baustein.. kann locker mir 20MHz - sogar 
30MHz.. ein Programmer..
Propterm ist von dem was es kann sicher ideal.. aber ganz andere HW 
Welt..
---
Wenn daran überhaupt genügend Interesse besteht (an einem passenden 
Selbstbau-Terminal..) würde ich einen separaten Thread dazu 
vorschlagen..
Und ein solches Terminal sollte ersteinmal entwickelt und auf 
Steckbrett/LR aufgebaut werden, um dann zu entscheiden, ob es eine 
separate Platine/abtrennbare Platine oder eine gemeinsame mit AVR CP/M
werden soll.. ich werde ersteinmal das uVGA testen.. da es auch 3,3V zur 
Verfügung stellt.. fast schon ideal.. und für ca. 30€ kaum zu schlagen..

In jedem Fall wäre ich bei einer Neuauflage mit 1 Platine dabei ;-)

Dann sollte man auch mal prüfen, inwieweit aus den Ideen von Jörg 
Wolfram (eigene Hardware mit BAS+PS/2 und SRAM-8bit) inzwischen etwas 
geworden ist..

Peter

von Dagobert (Gast)


Lesenswert?

Das Problem bei fast allen Tastatur-Routinen ist es, dass meist nur 
Normal und Shift-Ebene unterstützt wird, Alt-Ebene oder gar Sondertasten 
kann man lange suchen. Von Caps-Lock-Steuerung rede ich gar nicht erst. 
;)

Eine vollständige Tastatursteuerung, wie in VGATerm enthalten, hat es in 
sich.

Auch die Ansteuerung des µVGA-Moduls ist sehr Tückenreich. Z.B. gibt es 
oft Timing-Probleme, wodurch man viele Warteschleifen einbauen muss. Das 
wurde mit VGATerm ebenso, dank eines 32 kB Empfangspuffers, eliminiert.

Aber wenn man die Unwegsamkeiten erst einmal überwunden hat, hat man 
eine wirklich nutzbare VGA-Ansteuerung. Bei den oben genannten Systemem 
fallen viele CP/M-Programme weg, weil diese einen 80x25-Zeichen 
Bildschirm erfordern.

von Peter Sieg (Gast)


Lesenswert?

Dagobert schrieb:
> Bei den oben genannten Systemem
> fallen viele CP/M-Programme weg, weil diese einen 80x25-Zeichen
> Bildschirm erfordern.

Ja.. alerdings basiert die BAS Lösung auf ATmega8 mit 16MHz.. Mit 88/168 
und 25-30MHz sollte sich da ggf. noch was dran machen lassen..
Propterm hat schon alles was es braucht..
Allerdings zeigenja auch gerade VGAterm + uVGA das es grundsätzlich geht 
;-)
Cool wäre aber aus meiner Sicht auch eine LCD Lösung..

Peter

von Dagobert (Gast)


Lesenswert?

Ich habe einige Jahre nach einer aufbaubaren Lösung gesucht. Immer war 
ein CPLD oder FPGA notwendig. Ein normaler AVR schaffte evtl. gerade mal 
die 80x25 Zeichen in SW und dann komplett ohne umfangreichere 
Steuermöglichkeiten.

Bin mal gespannt, ob hier evtl. etwas entsteht, was auch von 'Max 
Mustermann' ohne großes Programmierequipment oder Profi-SMD-Austattung 
aufgebaut werden kann ;)

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Warum nicht.. ist doch jetzt auch ein festes Format.. man muß doch nicht
> immer alles variabel halten..

Dann denk dir ein schönes Format aus (Größe u. Anzahl Dir-Einträge), 
schnapp Dir das Alteration Guide oder eine andere Beschreibung und 
erstelle die beiden Tabelleneinträge. Dann einfach in bios.asm 
eintragen. den dpb braucht man dann nur einmal. Ich hatte nur 4 Plätze 
für maximal 4 verschiedene Diskformate vorgesehen. Gestern Abend dachte 
ich noch, damit wäre schon alles fertig.

Leider hatte ich nicht dran gedacht, daß bei Diskgrößen über 256KB die 
Blockgrößte mindestens 2048 sein muß. Und die ist z.Zt. noch als 
Konstante im avr-Teil.

also muß man noch in z80.asm unter
;*****************************************************
;*         CP/M to host disk constants               *
;*****************************************************

ändern auf
1
  .equ  blksize = 2048    ;CP/M allocation size

(oder gößer)

Bei der Gelegenheit kann man auch die Anzahl Sektoren pro Track auf 
einen etwas größeren und "runderen" Wert setzen. Das muß aber nicht 
sein. Mit 26 SPT kommt man auch bis 218MB Diskgröße. zB:
1
  .equ  CPMSPT = 32    ; oder 64 oder ...

Fertig. Ergebnis ggf. hier reinstellen oder mir zuschicken.
Natürlich darf sich auch jede(r) andere hier angesprochen fühlen.

Ach ja, ein passender Formateintrag für die cpmtools wäre dann auch 
nicht schlecht, damit man damit einfach vom alten Format aufs neue 
umkopieren kann.


> besser wäre es da wenn das ein Format wäre,
> das man auch dem AltairZ80 Emulator beibringen könnte.. dann kann man
> Images
> im Emulator laufen lassen und per R/W auch Dateien zw. CP/M und
> Hostsystem transferieren..

Falls Du den simh Altair 8800 Simulator meinst (den kenne ich, es gibt 
aber wahrscheinlich noch andere):

Der hat variable Formate! Das Disk Image ist sicher irgendwo 
dokumentiert (auf jedenfall im source, natürlich) aber ich bin bis jetzt 
noch nicht über die Doku gestolpert. Vor dem eigenlichen CP/M-Diskimage 
ist auf jeden Fall noch ein nicht gerade kleiner Header.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Es gab Anfragen ob noch Leiterplatten verfügbar wären. Leider nein.
> Bei genug Interessenten könnte natürlich eine neue Serie mit den
> entsprechenden Änderungen aufgelegt werden. Mir fällt da spontan ein:
> - geänderte Pinbelegung am RAM (RAM Disk)
> - Video-VGA siehe weiter oben.
> - weitere Vorschläge ???

Wie wärs mit 2 RAM-Chips (8 Bit breiter Datenbus)? Die Chips sind ja 
massenweise kostenlos vorhanden und der Schaltungsmehraufwand ist imho 
minimal. Also immer noch ein Lowcost Projekt.

Damit sich das lohnt, braucht man am Prozessor einen 8 Bit breiten Port. 
Den bekommt man, wenn man die Serielle Schnittstelle verlegt. So sieht 
dann das Ergebnis aus:
1
-------------------------------------------------------
2
           |  Peters  |        Leos        |
3
           | Schleife |      Schleife      |
4
-----------+----------+--------------------+-----------
5
AVR   MHz  | Zeit [s] | Zeit [s]   "Speed" | HW    SW    
6
-----------+----------+---------+----------+-----------
7
 8    20     12,180                           A     0
8
 8    20     12,453      3.488     827 KHz    A     1
9
 8    20     11.500      3.488     827 KHz    A     3
10
-------------------------------------------------------
11
 8    20      7.599      2.039    1380 KHz    C     2
12
 8    20      6.680      2.039    1380 KHz    C     3
13
-------------------------------------------------------
14
 8    20      6.418      1.958    1470 KHz    C     4


"HW A" ist die jetzt aktuelle Verdrahtung und "HW C" die 8-Bit Variante.

Es ist also fast nochmal eine Geschwindigkeitsverdopplung drin.

Zu den Details hatte ich am Montag schon mal einen Artikel geschrieben, 
der aber hier nicht (mehr?) vorhanden ist. Vielleicht drücke ich ja 
öfters auf Vorschau statt Absenden, oder...

Die Software dazu gibts in meinem SVN im softuart Zweig.

von Peter Sieg (Gast)


Lesenswert?

Leo C. schrieb:
> Wie wärs mit 2 RAM-Chips (8 Bit breiter Datenbus)? Die Chips sind ja
> massenweise kostenlos vorhanden und der Schaltungsmehraufwand ist imho
> minimal. Also immer noch ein Lowcost Projekt.

Die Idee finde ich super! Welche Baudrate ist dann mit Soft-Uart noch 
sinnvoll? Alternativ wäre natürlich auch ein AVR mit mehr Pin's :-)

Leider bin ich dieses WE in Familienfeier unterwegs.. ich werde mir aber
nächste Woche mal das CP/M Alteration Guide besorgen und mal versuchen,
das diskimage Format zu vergrößern.. soll aber niemanden davon abhalten 
das auch zu machen.. bei mir kann das schon etwas dauern.. ;-) ;-)

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Die Idee finde ich super! Welche Baudrate ist dann mit Soft-Uart noch
> sinnvoll? Alternativ wäre natürlich auch ein AVR mit mehr Pin's :-)

Senden geht mit 115k problemlos.
Empfangen habe ich bis 56700 getestet. Das ging, als die gröbsten Fehler 
draußen waren. Es könnte auch noch mehr dring sein. Der Code ist aber 
noch etwas chaotisch und müßte dringend aufgeräumt werden. Dann könnte 
man auch noch eine etwas bessere Fehlererkennung/behandlung einbauen. 
"Leider" gibts bei der üblichen Verbindung mit PC ja so gut wie keine 
Übertragungsfehler.

Gilt alles für 20Mhz Prozessortakt.

> Leider bin ich dieses WE in Familienfeier unterwegs.. ich werde mir aber
> nächste Woche mal das CP/M Alteration Guide besorgen und mal versuchen,
> das diskimage Format zu vergrößern.. soll aber niemanden davon abhalten
> das auch zu machen.. bei mir kann das schon etwas dauern.. ;-) ;-)

Ich werde mich bis auf Weiteres auch nicht dransetzen, da ich ja gar 
kein größeres Format brauche. ;-)

von Leo C. (rapid)


Lesenswert?

Den Satz hatte ich doch glatt übersehen:

Peter Sieg schrieb:
> Alternativ wäre natürlich auch ein AVR mit mehr Pin's :-)

Ja klar, und statisches RAM und...
... und vielleicht doch ein ez80 :-)

Übrigens habe ich Moment rein zufällig genau die 2 Pins für die 
I2C-Schittstelle frei... :-)

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Wie wärs mit 2 RAM-Chips (8 Bit breiter Datenbus)? Die Chips sind ja
> massenweise kostenlos vorhanden und der Schaltungsmehraufwand ist imho
> minimal. Also immer noch ein Lowcost Projekt.

Gute Idee Port D doppelt zu belegen, auch PC4 und PC5 frei zu lassen. 
Was möchtest du dort angeschlossen haben, ein RTC, eine PIO, ...
Ich erstelle mal einen neunen Schaltplan zu der Soft-Uart Variante.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Nachtrag:

Da das Erstellen mehrerer diskimages unter Windows nun etwas kompliziert 
wird, siehe weiter oben, bietet sich ein nettes Tool wie "Parted Magic" 
an. Läuft  als Live-CD oder USB-Stick oder unter VM.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Was möchtest du dort angeschlossen haben, ein RTC, eine PIO, ...

Wg. I2C drängt sich eine RTC ja förmlich auf. Aber irgend was sträubt 
sich in mir. Gibt es I2C-(Flash-)ROMs im ca. einstellingen Megabit 
Bereich? So als ROM-Disk oder SSD?

Ursprünglich dachte ich an Inputs, z.B. Taster für Z80 Reset, bzw. 
Interrupt.
Damit könnte man z.B. ein hängendes Programm in den Debugger 
zurückholen.

Frontpanel?

CS-Leitungen für SPI-Erweiterungen wäre auch denkbar.


Am Besten ein großes Lochrasterfeld vorsehen. Und/Oder Pfosten für 
Huckepackerweiterungen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Als DRAM habe ich 1Mx4 im SOJ26-20 Package vorgesehen. Das sollte noch 
gut zu löten sein und außerdem gut verfügbar. Bei I2C bin ich mir noch 
unsicher, Portererweiterung ist auch denkbar.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

@Leo C. alle anderen natürlich auch.

Bitte mal durchsehen ob der RAM / MMC mit der Soft-Uart Variante 
übereinstimmt.

von Leo C. (rapid)


Lesenswert?

Das ist ja mal wieder ein Mist. (sorry, mußte raus)

Ich habe gerade meine Bestände durchgesehen, und festgestellt, daß ich 
fast nur 4Mx4 habe. Ich dachte mir, macht ja nix, man kann ja einfach 
die 2 Adressleitungen zusätzlich verbinden. In dem einen Datenblatt, daß 
ich von 1Mx4 hier habe, habe ich aber gerade gesehen, daß die 
anscheinend eine völlig andere Pinbelegung haben.


Joe G. schrieb:
> @Leo C. alle anderen natürlich auch.
>
> Bitte mal durchsehen ob der RAM / MMC mit der Soft-Uart Variante
> übereinstimmt.

Ich habe bis jetzt nur mal kurz drauf geschaut. Und es stimmt leider. 
Deine Verdrahtung paßt zu dem 1Mx4 Datenblatt, und die 4Mx4 Datenblätter 
sind alle anders. Beides vorsehen, für wahlweise Bestückung, wird wohl 
viel zu aufwendig sein. Mir ist es egal, weil ich keine Platine brauche.

In meiner PC-Restekiste habe ich 7 verschiedene 72-polige RAM-Modul 
Sorten.
Davon nur eines mit 1Mx4 bestückt.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> @Leo C. alle anderen natürlich auch.
>
> Bitte mal durchsehen ob der RAM / MMC mit der Soft-Uart Variante
> übereinstimmt.

An die Datenleitungen von IC5  (oder IC4) sollten D4_A4 bis D7_A7 
angeschlossen werden.

1Mx4 Chips haben auch eine A9. Nächster Pin wäre PB4 (MISO).
Und falls es 4Mx4 Chips werden sollten, käme noch eine A10 dazu (--> 
PB5).

Der Rest scheint ok zu sein. RAS bis WE, A8 bis A9/10 und D0_A0 bis 
D7_A7 kann man sowieso frei untereinander tauschen, wenn dadurch z.B. 
das Layout einfacher wird.

Pullups am SD-Slot?
Chan empfiehlt sie sehr (aber einen Pulldown an CLK), hat sie aber bei 
seinem neuesten GPS-Logger auch weggelassen.

Ich mache immer eine LED an CS mit R nach VCC. Macht sich hier besonders 
gut als Drive-Select-Lampe.

von Peter Sieg (Gast)


Lesenswert?

@all: An Rams kann man aber auch die 256x4 2-mal nehmen.. 2ter Chip in 
jetziger Platine huckepack, nur D0-D3 an D4-D7.. damit sollte die 
vorhandene
Platine auch auf 8-bit Dram erweiterbar sein (4 Leitungen zum 
Huckepackram legen + Uart umverdrahten..)
(PS: Ich finde die SOJ SCH*** zum löten ;-) - aber habe ich auch schon 
hinbekommen..)

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> An die Datenleitungen von IC5  (oder IC4) sollten D4_A4 bis D7_A7
> angeschlossen werden.

Hab ich beim abspeichern gemerkt, ist schon geändert.

Leo C. schrieb:
> Pullups am SD-Slot?
> Chan empfiehlt sie sehr (aber einen Pulldown an CLK), hat sie aber bei
> seinem neuesten GPS-Logger auch weggelassen.

Pullups sind ja normalerweise im AVR schon vorhanden, Pulldown an CLK? 
steilere Flanken? Mein Oszi zeigt kein Unterschied.

Leo C. schrieb:
> Ich mache immer eine LED an CS mit R nach VCC. Macht sich hier besonders
> gut als Drive-Select-Lampe.

Nette Idee.

RAM Frage:
1M x4 oder 4M x4, mir ist es egal. Peter möchte nicht löten ;-) Ich 
nehme meine ursprügliche Idee mal wieder auf. Für den RAM gibt es eine 
28 polige IC Fassung und da steckt jeder drauf was er hat. Als 
"Default-RAM-Stecker-Layout" gib es drei kleine RAM-Adapterplatinen, 1M 
x4, 4M x4, 256 x 4.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Pullups sind ja normalerweise im AVR schon vorhanden, Pulldown an CLK?
> steilere Flanken? Mein Oszi zeigt kein Unterschied.

Am CLK ist Low-Pegel der Normal/Ruhezustand. Bei den anderen Pins ist es 
High.

Zur Zeit werden die internen Pullups komplett abgeschaltet, damit man 
ganze Bytes auf die Ports schreiben kann, ohne daß Pullups in Portbits, 
die als Input programmiert sind, ständig ein- und ausgeschaltet werden.
Für die jetzige Schaltung kann man das aber ändern, wenn man PC4 und PC5 
nicht als Inputs benutzt, oder das Pullupflattern egal ist.

Bleibt noch der Resetzustand...


> RAM Frage:
> 1M x4 oder 4M x4, mir ist es egal. Peter möchte nicht löten ;-) Ich
> nehme meine ursprügliche Idee mal wieder auf. Für den RAM gibt es eine
> 28 polige IC Fassung und da steckt jeder drauf was er hat. Als
> "Default-RAM-Stecker-Layout" gib es drei kleine RAM-Adapterplatinen, 1M
> x4, 4M x4, 256 x 4.

Mir ists auch egal. Und Peter hat ja nur geschrieben, daß er nicht 
gerne lötet.

Ich habe bei mir das 2. SOJ-RAM übrigens auch Huckepack auf das erste 
gelötet. Wobei es jetzt eigentlich kein SO J mehr ist. ;-)

Schönes Wochenende
Leo
(Nach Diktat verreist)

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier nun die SOJ26-24 Variante, also CP/M mit 4 MB. D0-D7 nun korrekt, 
Pullup und Pulldown an MMC, LED an CS noch nicht (kommt noch) und I2C 
wartet noch auf Ideen.

von Peter Sieg (Gast)


Lesenswert?

@Joe G. Können gerne SOJ nehmen.. kriege ich hin.. ist aber für sonst 
nur DIL Verbauer eine kleine Herausforderung ;-) Deshalb: Einfach auf 
eine Version einigen..und fertig. Keep it simple..
(Ich habe eine ganze Schachtel voll alter Ramriegel.. muß selbst erstmal 
schauen, was ich da noch so finde..)

Eine Idee hätte ich allerdings noch:
Quarz+2xC ersetzen durch Quarzoszillator.. es ist so gut wie unmöglich 
ab >25MHz noch Grundtonquarze zu bekommen (für 30MHz ist mir das 
allerdings noch gelungen..).. Aber Quarzoszi's für 32/36/40MHz ist kein 
Problem..

--- zum softuart und 8-bit dram access ---
  ; - Soft UART TX (OC1A/OCR1A).
  ; - Soft UART RX (ICP1/ICR1).
Das sin die beiden Uart Pins?

Ansonsten sehe ich nur D0-D3 definiert..? Ich hatte D4-D7 erwarten..?
Normalerweise dachte ich 2tes Dram Huckepack aufzulöten - alle Pins - 
bis
auf D0-D3 und diese 4 Pins ergeben dann das 2te Nibble..

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Quarz+2xC ersetzen durch Quarzoszillator..

Ja, ist sicher besser. Schon in Hinblick auf mögliche Erweiterungen in 
Richtung VGA (25.179 MHz) ;-)

Peter Sieg schrieb:
> Ansonsten sehe ich nur D0-D3 definiert..?

Schau mal im letzen Schaltplan, den Tag davor hatte ich geträumt. Die 
Soft UART Pins sind so wie in Leo C. Quelle.

C4 oder C5 könnte man auch als /CS für ein weiteres SPI-Gerät nutzen. 
Ich habe hier noch ein Vinculum Vdrive rumliegen. Damit hat Leo C. sein 
SSD im mehrstelligen GB-Bereich oder was ein USB Stick so hergibt. FAT 
ist auch schon dabei, außerdem könnte man CP/M Programme über USB-Stick 
austauschen.
Joe

von Joerg W. (joergwolfram)


Lesenswert?

@ Peter Sieg

ich habe damit angefangen und es funktioniert auch recht gut, allerdings 
mehr als die Testprogramme hier im Thread habe ich nicht laufen lassen. 
Aus Mangel an Interesse sowohl bei mir als auch im ChipBasic Thread habe 
ich das Ganze aber erstmal wieder auf Eis gelegt. Beim nächsten Release 
wird der 8080-Emulator mit dabei sein, mehr aber wahrscheinlich nicht.

Jörg

von Peter S. (petersieg)


Angehängte Dateien:

Lesenswert?

Hallo. Hier noch ein weiteres diskimage (um die Partitionen zu füllen 
;-).
Es enthält den BDS C-Compiler und ein paar C-Sourcen von Spielen.
Übersetzung mit cc <datei.c> und dann clink <datei>.
Belegt nur ca. 100kb auf dem 243kb Image.
ED als Zeileneditor ist ebenfalls enthalten. Leider läuft der 
Fullscreen-Editor VDE nicht..? Falls jemand noch einen kleinen, 
einfachen Fullschreeneditor für CP/M-80 hat..
---
MicroVGA läuft auch am avr cp/m. 115200 baud schafft es aber nicht ohne 
HW Handschake.. läuft jetzt mit 38400 baud.. stelle noch zwei Bilder 
ein..
Der 3,3V Ausgang des MicroVGA ist hier wirklich sehr praktisch!

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> MicroVGA läuft auch am avr cp/m.

Hat deine einstabiles Bild? Bei mir sehen die Buchstaben arg zerfranst 
aus. Hast du mal die Pegel der seriellen Schnittstelle gemessen, 5V oder 
3.3V ? Auf der Leiterplatte ist ja nicht so richtig zu erkennen wo die 
3.3V Leitung bleibt und die 5V Leitung ist äußerst dünn ausgeführt.

Ich würde das neue Layout so ausführen, dass die MicroVGA Platine direkt 
aufgeschraubt und verbunen werden kann. Für die 5V gibt es dann eine 
übliche Klinkenbuchse.

Joe

von Peter S. (petersieg)


Lesenswert?

Joe G. schrieb:
> Hat deine einstabiles Bild? Bei mir sehen die Buchstaben arg zerfranst
> aus.

Das Bild ist stabil. Aber die Buchstaben sehen hier auf dem 22" TFT auch 
nicht schön aus :-( Habe sowas aber schon bei einigen Sachen gesehen, wo 
800x600/640x480/80x25 Text (also geringe Auflösungen) versucht wird auf 
solche großen Bildschirme 'hochzurechnen'..

Die Anschlüsse so zu legen, das MicroVGA direkt passt ist eine gute 
Idee!

Ist wie gesagt eine doch noch recht preiswerte Möglichkeit einen 
Stand-Alone CP/M Rechner zu basteln.. Ca. 30€ sind aus meiner Sicht ok. 
Muß noch mal sehen, das auch Programme mit VT100/Ansi Sequenzen auch gut 
laufen..

Eine Alternative könnte PropTerm sein.. Habe dafür aber noch kein 
Fertigmodul/Bausatz/Platinenlayout/etc. gefunden..

Was ich z.Z suche ist ein einfacher Fullscreen Ascii/Text-Editor..

Wäre auch schön, wenn der einer oder andere auch mal ein diskimage 
zusammen stellen würde mit z.B anderen Programmiersprachen oder 
Anwendungen etc.

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Schaltug / Layout

Da der Wunsch nach Taktfrequenzen über 20 Mhz besteht und Quarze in 
diesem Bereich dünn werden, ist ja der Einsatz eines Quarzoszillators 
geplant. Nun laufen dieses (DIL Variante) wiederum nur mit 5V und nicht 
mit 3.3V. Was haltet ihr von dieser Variante:

- AVR und RAM laufen auf 5V (kann damit höher übertaktet werden)
- MMC wird über 74CHC08 auf 3.3V betrieben.
- als Spannungsregler kommt wieder der interne Regler des FTDI zum 
Einsatz
- alle weiteren Busgeräte I2C, SPI laufen auf 5V oder SPI auf 3.3V

Das Konzept erfordert zusätzlich genau einen 74VHC08.

Joe

von Peter S. (petersieg)


Lesenswert?

Hmm.. SMD Oszi gibt z.B bei reichelt zw. 25-50MHz (XO32 40,00000). Die 
laufen mit 3,3V...

Ich würde ungern das Layout/die nötigen Bauteile weiter 'aufblähen' ;-)

BTW: Warum Man(n) auch unbedingt 2 x Dram's a 4-bit nehmen muß und nicht 
1 x Sram (628128-70) muß Man(n) auch nicht wirklich verstehen.. ;-)
(Nein, kein ez80 etc. ;-)

BTW: Hat jemand eine Lösung, wie ich cmd.exe unter XP so laufen lassen 
kann, das ich mit dem AltairSimh Emulator Programme testen kann, die 
VT52/VT100/Ansi Escape-Sequenzen nutzen..? Kann gerne auch ein anderer 
Shell-Ersatz etc. sein.. evtl. könnte ja telnetd + telnet hier gehen.. 
ist aber ein wenig oversized an Aufwand - oder?

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Warum Man(n) auch unbedingt 2 x Dram's a 4-bit nehmen muß und nicht
> 1 x Sram (628128-70) muß Man(n) auch nicht wirklich verstehen.. ;-)

Wegen der fehlenden Pins - A0 bis A16.

Alles mit 5V laufen zu lassen hatte noch einen Grund. Meine 
VGA-Testschaltung läuft auch mit 25 MHz, das Schieberegister und die 
Leitungstreiber sowie die Tastaturschnittstelle mit 5V. Diese IC's habe 
ich nicht als VHC-Type gefunden. Diese Schaltung würde ich gleich mit 
anstückeln. So kann sie für weitere Experimente benutz werden oder bei 
Bedarf durch die MicroVGA überbaut werden. Der beansprüchte Platz und 
die Pinbelegung ist gleich.

Joe

von Dagobert (Gast)


Lesenswert?

Zum Terminal:

Mein TKTerm (Download auf www.DieProjektseite.de) beherscht die 
Ansi-Sequenzen, welche auch µVGA kann. In Kürze gibt es eine weitere 
Version des Programms wo dann auch die Baudratenauswahl funktioniert. 
Wer die neue Version haben möchte, kann mich anschreiben (über die 
Projektseite). Dem sende ich dann die aktuelle Version zu.

von Peter S. (petersieg)


Lesenswert?

@Dagobert: ???! Ich suche ein Programm das solche ESC Sequenzen in einem 
Win32 CMD(Command) Fenster interpretiert. Für serielle IF's gibts 
viele..

@Joe: VGA-Testschaltung..? Es könnte Sinn machen, hier ein VGA Terminal 
und PS/2 Tastatur-IF mit aufzunehmen.. allerdings eine fertige 
Schaltung+SW dazu (80x25 Zeichen mit ESC IP) habe ich - außer PropTerm - 
noch nicht gefunden..

Peter

von Peter S. (petersieg)


Angehängte Dateien:

Lesenswert?

Hier die Bilder von AVR CP/M + MicroVGA.

---

@Joe: Was die HW angeht, bin ich fast für alles offen, wenn es dem CP/M 
Gedanken folgt, so einfach wie möglich - nur nicht einfacher!
Mit dem bisher erreichten kann man schon sehr zufrieden sein!
2 x Drams mit mehr Bytes bringt:
a. Faktor 2 in der Geschwindigkeit
b. Mögliche Erweiterungen in Richtung Ramdisk etc.
=> Ergo. Sollte in einer nächste Version mit aufgenommen werden.
Quarzoszillator ermöglicht übertakten bis 36/40/?? MHz, was wiederum
mehr Geschwindigkeit bringt und nicht viel kostet und die HW auch nicht
komplizierter macht.
=> Ergo. Reinnehmen.
I2C eröffnet ebenfalls noch ungeahnte Möglichkeiten und kostet=nichts.
=> Ergo. Reinnehmen.
Das mit dem Vinculum USB Drive dürfte auch sehr interessant sein..
Eine einfache Möglichkeit Dateien zw. CP/M und Host-Welt auszutauschen
wäre schon schön..

Alles andere, wenn es denn das System sinnvoll erweitert bzw. ergänzt..
warum nicht.. ein Selbstbauterminal (VGA-Out+PS/2 Tast.-In) sollte
allerdings ersteinmal als LR/Steckbrettaufbau funktionieren..

Just my 2 cents.

Peter

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier der Vorschlag mit folgenden Änderungen:

- 4MB RAM
- LED an CS MMC
- 3.3V an MMC, nicht mehr versehentlich auf 5V steckbar
- 3.3V wahlweise über FTDI oder MicroVGA
- AVR und RAM kann wahlweise mit 3.3V oder 5V betrieben werden (hat 
keinen Einfluß auf Spannung der MMC)
- Takt über FTDI oder Quarzoszillator
- mögliche Steckvarianten der V24 sind:
  USB - CP/M
  CP/M - VGA
  USB - VGA

noch offen:
- Vinculum USB Drive
- I2C
Es geht nur eines von beiden, da bei einem weiteren SPI Device ein 
zusätzliches CS benötig wird. Wir sollten uns auf eine Variante 
festlegen oder es als Lochraster auslegen.

Peter Sieg schrieb:
> sollte
> allerdings ersteinmal als LR/Steckbrettaufbau funktionieren..
Da funktioniert es Lochrastermäßig ;-) H-Sync und V-Sync kommen exakt, 
Pixeltakt und Zeichen auch. Aber durch Steckbrettaufbau mit viiiiel 
Jitter. Schaltugsvorschlag dazu folgt noch.
Joe

von Peter S. (petersieg)


Lesenswert?

Joe G. schrieb:
> noch offen:
> - Vinculum USB Drive
> - I2C
> Es geht nur eines von beiden, da bei einem weiteren SPI Device ein
> zusätzliches CS benötig wird.

Hmm. VDRIVE2/VDIP1+2 können auch per UART gesteuert werden..
Bräuchte eine 2te serielle Schnittstelle (9600 8N1) und ein 
entsprechendes Terminalprogramm unter CP/M, was über diese Schnittstelle 
mit dem V* Device spricht und mit den vorhandenen Kommandos Dateien zw. 
CP/M und V* Device liest und schreibt..

Peter

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

na dann will ich auch mal...
hier mein Aufbau...
Joe

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> VDRIVE2/VDIP1+2 können auch per UART gesteuert werden..
> Bräuchte eine 2te serielle Schnittstelle (9600 8N1) und ein
> entsprechendes Terminalprogramm unter CP/M

Das wird aber arg langsam...
Mir scheint SPI die bessere Lösung zumal man ja dem BIOS beibrigen kann, 
dass genau dieses SPI Gerät die COM1 oder COM2, ... ist. Dann sollte 
auch ein Terminal gehen.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Peter Sieg schrieb:
> BTW: Warum Man(n) auch unbedingt 2 x Dram's a 4-bit nehmen muß und nicht
> 1 x Sram (628128-70) muß Man(n) auch nicht wirklich verstehen.. ;-)

Für mich ist das Ganze ein Bastelkistenprojekt. D.h. es wird nur aus 
Teilen zusammengebaut, die in der Bastel-/Reste-/Ramschkiste vorhanden 
sind. D-Rams sind da reichlich drin. Große statische Rams eher nicht.
(ATmegas habe ich allerdings auch nicht im Überfluß, und meinem 
GPS-Logger habe ich schon den 328P geklaut. ;)

Peter Sieg schrieb:
> Hier die Bilder von AVR CP/M + MicroVGA.

Am Besten gefallen mir die geschraubten Nagelschellen. ;-)

Joe G. schrieb:
> noch offen:
> - Vinculum USB Drive

Kommt für mich nicht in Frage. (siehe oben)

> - I2C
> Es geht nur eines von beiden, da bei einem weiteren SPI Device ein
> zusätzliches CS benötig wird. Wir sollten uns auf eine Variante
> festlegen oder es als Lochraster auslegen.

Ich fände ein paar Inputs ganz brauchbar. ZB. vom SD-Kartensockel 
Card-Detect und evtl Write-Protect. Ferner Z80 Interupt/Reset. Wenn die 
2 Pins nicht reichen: Schieberegister.


Im Anhang mal ein Bild vom Huckepack-Ram. (ex SOJ:)

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

In meinem SVN Repo gibts ein paar Updates. Im trunk ("alte" Hardware) 
eigentlich nur ein paar Bugfixes. Bei einer partitionierten SD-Karte 
wird jetzt sichergestellt, daß nicht außerhalb der CP/M-Partitionen 
gelesen, und vor allem geschrieben wird. Wer also seine 
CP/M-Partition(en) kleiner als das darin befindliche CP/M-Dateisystem 
definiert hat, und noch andere, wichtige Daten auf der Karte hat, sollte 
unbedingt updaten.

Im softuart-Zweig (8-Bit DRAM) das Gleiche. Plus RAM-Disk (Laufwerk I:).
Die RAM-Disk ist im Moment nur 64KB groß, damit sie auch bei den 
kleinsten RAM-Chips noch funktioniert. Davon gehen dann noch 8KB für 2 
Systemspuren ab.
Beim Kaltstart wird das CP/M von A: auf die RAM-Disk kopiert und beim 
Warmstart von dort neu geladen. Sinn des ganzen sollte sein, daß man 
nach dem booten die SD-Karte ziehen kann, und ohne sie weiterarbeiten 
kann.

Leider macht uns CP/M hier einen Strich durch die Rechnung: Beim 
Warmstart wird grundsätzlich auf A: zugegriffen, auch wenn der Benutzer 
auf ein anderes Laufwerk umgeschaltet hat.

Abhilfe:
1. BDOS patchen. Andere (z.B. simh) machen das auch so.
2. Die RAM-Disk als Laufwerk A: verdrahten.
3. Alternatives CP/M (BDOS) verwenden? (Bekannte, gute Alternativen
   setzen Z80 voraus)

Anderes, damit im Zusammenhang stehendes Problem:
Wenn man die SD-Karte zieht und wieder einsteckt, wird beim nächsten 
Zugriff das System komplett neu gestartet. Das ist erst mal leicht zu 
korrigieren, in dem z.B. bei einem Warmstart (^C) die Karte neu 
initialisiert wird. Allerdings muß man dann auch die Partitionierung neu 
einlesen. Wenn bei jedem Warmstart die Liste der gefundenen Partitionen 
erscheint, nervt das aber...

Für Vorschläge, wie man das System an dieser Ecke rund macht, bin ich 
dankbar. Hat überhaupt schon jemand die 8-Bit-Ram Variante nachgebaut, 
und kann damit die RAM-Disk mal testen? Ich weiß noch nicht, ob ich die 
in die 4-Bit-Ram Variante überhaupt noch einbauen soll.

Beide neuen Versionen laufen nur mit neuem BIOS, und das neue BIOS nur 
mit neuem IPL. Beides ist auch im SVN. Ich habe aber auch mal ein 
fertigs System hier angehängt.

von Peter S. (petersieg)


Lesenswert?

Leo C. schrieb:
> Hat überhaupt schon jemand die 8-Bit-Ram Variante nachgebaut,
> und kann damit die RAM-Disk mal testen? Ich weiß noch nicht, ob ich die
> in die 4-Bit-Ram Variante überhaupt noch einbauen soll.

Hi Leo C.
Ich bin noch nicht dazu gekommen, die 8-bit Variante nachzubauen. Ich 
plane dazu meine LR Version umzubauen. Könntest du bitte nochmal 
aufzeigen, wie genau ich was verdrahten muß? Ich gehe im Moment davon 
aus:
1. 2ten Dram Chip 1:1 mit dem ersten verbinden (Huckepack) - bis auf 
D0-D3!
2. Dram 1ter Chip verbinden:
D0 - 2 - PD0
D1 - 3 - PD1
D2 - 4 - PD2
D3 - 5 - PD3
3. Dram 2ter Chip verbinden:
D0 - 6 - PD4
D1 - 11 - PD5
D2 - 12 - PD6
D3 - 13 - PD7
4. Uart RX liegt dann an AVR Pin 14 = ICP1/ICR1
5. Uart Tx liegt dann an AVR Pin 15 = OC1A/OCR1A

Ups.. ich sehe gerade, das ist eine komplette Umverdrahtung!! Da kann 
ich wahrscheinlich schneller einen kompletten Neuaufbau auf LR machen.. 
;-) Meine Platinen werde ich jedenfalls nicht so vergewaltigen.. Ich 
glaube da brauchen wir die nächste Platinenversion doch eher als ich 
gedacht hatte.. ;-)

> LW A: in Ramdisk umkopieren..
Das würde ich so nicht machen.. Evtl. hat man z.B seinen C Compiler auf 
C: und möchte eher diesen in der Ramdisk haben (wozu allerdings 64kb zu 
wenig wäre..).. eher sowas wie eine autoexec.bat ausführen, wo man dann 
selbst definieren kann, was evtl. wohin kopiert werden soll..

>Wenn man die SD-Karte zieht und wieder einsteckt, wird beim nächsten
>Zugriff das System komplett neu gestartet. Das ist erst mal leicht zu
>korrigieren, in dem z.B. bei einem Warmstart (^C) die Karte neu
>initialisiert wird. Allerdings muß man dann auch die Partitionierung neu
>einlesen. Wenn bei jedem Warmstart die Liste der gefundenen Partitionen
>erscheint, nervt das aber...
Ach.. macht doch nichts.. oder wenn gefundene Part. den vorher 
gefundenen entsprechen.. Meldungen unterdrücken.. ;-)

>Ich weiß noch nicht, ob ich die
>in die 4-Bit-Ram Variante überhaupt noch einbauen soll.
Da dann nur 64k zur Verfügung wären.. eher nein.. oder kann man das für 
temp. Dateien eines C Compilers nutzen..?

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Ich fände ein paar Inputs ganz brauchbar. ZB. vom SD-Kartensockel
> Card-Detect und evtl Write-Protect. Ferner Z80 Interupt/Reset. Wenn die
> 2 Pins nicht reichen: Schieberegister.

- PCF8574 an I2C? Damit gibt es nochmal 8 Bit.

> Im Anhang mal ein Bild vom Huckepack-Ram. (ex SOJ:)

Deshalb brauche ich eine Platine, solche Lötarbeiten werden mit 
zunehmenden Alter unmöglich.

> Abhilfe:
> 3. Alternatives CP/M (BDOS) verwenden? (Bekannte, gute Alternativen
>    setzen Z80 voraus)

Ich denke diese Variante ist die flexibleste Lösung.

> Hat überhaupt schon jemand die 8-Bit-Ram Variante nachgebaut,
> und kann damit die RAM-Disk mal testen? Ich weiß noch nicht, ob ich die
> in die 4-Bit-Ram Variante überhaupt noch einbauen soll.

Ich noch nicht, werde ich auch ohne neue Platine nicht 
(Altersaugenpulver ;-)). Von mir aus reicht die RAM-Disk in der 8-Bit 
Variante.

@alle
Gibt es denn außer bein Leo C. Peter und mir noch weitere lauffähige 
Systeme? Wenn nicht, können wir irgendwie helfen?

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Könntest du bitte nochmal
> aufzeigen, wie genau ich was verdrahten muß? Ich gehe im Moment davon
> aus:

Du kannst Den neuen Schaltplan von Joe nehmen.

> Ups.. ich sehe gerade, das ist eine komplette Umverdrahtung!!

Überraschung ;-)

> Da kann
> ich wahrscheinlich schneller einen kompletten Neuaufbau auf LR machen..
> ;-) Meine Platinen werde ich jedenfalls nicht so vergewaltigen.. Ich
> glaube da brauchen wir die nächste Platinenversion doch eher als ich
> gedacht hatte.. ;-)

Ich hatte mich eh schon gewundert, als Du mal vom Platinenumverdrahten 
geschrieben hattest.

>> Wenn bei jedem Warmstart die Liste der gefundenen Partitionen
>> erscheint, nervt das aber...
> Ach.. macht doch nichts..

Doch, die Warmstarts werden ja auch bei (fast) jeder Beendigung eines 
Programms ausgeführt. Bei Batchdateien nach jeder Zeile.

> oder wenn gefundene Part. den vorher
> gefundenen entsprechen.. Meldungen unterdrücken.. ;-)

Oder umgekehrt: Nur ausgeben, wenn Partitionen geändert. ;)
So werde ichs machen. Kartenwechsel ohne Kaltstart muß einfach möglich 
sein, da die "usability" sonst in den Keller sinkt.

>>Ich weiß noch nicht, ob ich die
>>in die 4-Bit-Ram Variante überhaupt noch einbauen soll.
> Da dann nur 64k zur Verfügung wären.. eher nein.. oder kann man das für
> temp. Dateien eines C Compilers nutzen..?

Kommt wahrscheinlich auf die Größe Deiner C-Programme an. :)
Ansonsten ist das natürlich der Hauptzweck einer RAM-Disk.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Deshalb brauche ich eine Platine, solche Lötarbeiten werden mit
> zunehmenden Alter unmöglich.

Da sind wir Kurzsichtigen wohl im Vorteil. Im Nahbereich gehts bei mir 
immer noch ganz gut.

> Von mir aus reicht die RAM-Disk in der 8-Bit
> Variante.

Ich habe sie jetzt trotzdem mal in die alte 4-Bit Variante eingebaut. 
Ist im SVN zu finden, und braucht das neue BIOS, wie oben geschrieben.

Ich hoffe, das damit ein paar mehr Leute testen können. Ich brauche 
etwas Feedback in Sachen Benutzbarkeit. Außerdem sind wahrscheinlich 
noch Fehler drin, die ich alleine nicht finde.

> @alle
> Gibt es denn außer bein Leo C. Peter und mir noch weitere lauffähige
> Systeme? Wenn nicht, können wir irgendwie helfen?

Das würde mich auch mal interessieren. Insbesondere interessiert mich, 
warum jemand das Ding hier aufbaut, und was er/sie damit tun möchte. 
Grundsätzlich wurde das zwar am Anfang des Threads ausgiebig diskutiert, 
aber was die Leute antreibt, die jetzt tatsächlich bauen, kann ich mir 
gar nicht so richtig vorstellen. ;)

von Peter S. (petersieg)


Lesenswert?

Leo C. schrieb:
> Ich habe sie jetzt trotzdem mal in die alte 4-Bit Variante eingebaut.
> Ist im SVN zu finden, und braucht das neue BIOS, wie oben geschrieben.

Habe jetzt mal eine Platine damit ausgestattet..
1
I>a:stat
2
3
A: R/W, Space: 42k
4
B: R/W, Space: 163k
5
C: R/W, Space: 129k
6
I: R/W, Space: 55k

läuft ersteinmal soweit gut..
aber das sieht komisch aus:
1
I>a:pip ed.com=c:ed.com
2
3
I>dir
4
5
I: ED       COM
6
I>ed
7
8
Bdos Err On M: Select
9
I>

Nur mal zu den Gründen, die mich antreiben:
* CP/M ist DAS Ur-Betriebssystem.
* Das mit den heutigen Mikrocontrollern verbandelt ist ansich schon 
interessant
* Man ist automatisch gleichzeitig 'Retro' und modern ;-)
* Man hat eine 'arbeitsfähige' retro-Umgebung mit 2 Chips+SD Karte
* MBasic, C Compiler, Wordstar, dbase-II, etc. etc.
* Aber evtl. kann man Retro+Modern noch weiter verheiraten:
->z.B ADC über AVR nach CP/M verfügbar machen, Frequenzzähler, I2C 
Bausteine

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> I>a:pip ed.com=c:ed.com
> Bdos Err On M: Select
> I>

Danke dafür.
Ich hatte heute schon mal was ähnliches, konnte es aber nicht 
reproduzieren. Bei mir war nur der Select auf J, also (genau) eins 
größer als ein existierendes Laufwerk. Jetzt kann ich davon ausgehen, 
daß der Buchstabe Zufall war, der eigentliche Fehler aber nicht.

Gerade nochmal propiert: Fehler versteckt sich. :-(


> Nur mal zu den Gründen, die mich antreiben:
> * CP/M ist DAS Ur-Betriebssystem.

Ich bin sozusagen damit groß geworden. ;-)
Vor allem aber ist mein erster Selbstbaucomputer damit groß geworden.

> * Das mit den heutigen Mikrocontrollern verbandelt ist ansich schon
> interessant
> * Man ist automatisch gleichzeitig 'Retro' und modern ;-)

Genau. Besonders beim Programmieren empfinde ich das so.

> * Man hat eine 'arbeitsfähige' retro-Umgebung mit 2 Chips+SD Karte
> * MBasic, C Compiler, Wordstar, dbase-II, etc. etc.

Es sind jetzt schon 3 Chips. ;) Und beim "arbeitsfähig" bin ich immer 
noch ein wenig skeptisch, wg. (fehlender) Geschwindigkeit. Aber 
prinzipiell ja.

> * Aber evtl. kann man Retro+Modern noch weiter verheiraten:
> ->z.B ADC über AVR nach CP/M verfügbar machen, Frequenzzähler, I2C
> Bausteine

Dafür fehlt mir jetzt der Sinn. Geräte mit ADC, Frequenzzähler, etc, 
programmiert man besser mit was anderem, als ausgerechnet CP/M. Außerdem 
sollte man dann endgültig einen größeren AVR nehmen...

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

So, es ist soweit...
Die Schaltung und das Layout der neuen Platine - sagen wir Version 2.0 
;-)

- das Board ist etwas breiter, so das die VGA direkt angeschlossen 
werden kann.
- auf den freien Pins der VGA liegen zusätzlich die 25 MHz, und SDA/SCL 
zur Erweiterung für I2C

Bitte Änderungen, Vorschläge, Kritik...

Joe

von Peter S. (petersieg)


Lesenswert?

@Joe. Den Quarzosi 3,3V von reichelt gibt es nur in SMD.. die DIL's sind 
alle für 5V..? Soll dann die VGA+PS/2 Mimik nicht mit auf die Platine..?
(wobei das auch ok wäre.. und später macht man das zur MicroVGA 
kompatibel von den Anschlüssen her gesehen).

Ich frage mich nur, wie viele sich für weitere Platinen interessieren..?
Bisher hat sich noch kein weiterer 'Nachbauer' geoutet.. ;-)

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Peter
Den Quarzoszillator als SMD hatte ich verworfen. Damit ist der schnelle 
Austausch nicht mehr möglich. Die Variante im DIL Gehäuse kann sehr gut 
auf eine IC Fassung gesteckt werden. Mögliche Quarzoszillatoren bei 
Rei****t z.B. unter Artikel-Nr.: OSZI 25,000000. Meine Testvarianten 
laufen auch sauber mit 3.3V. Damit kann also nun die ganze Schaltung 
wahlweise mit 5V oder 3.3V betrieben werden, wobei die MMC natürlich nur 
mit 3.3V betrieben wird. Versehentliches "falschjumpern" nicht mehr 
möglich. Die Test-VGA hat die gleiche Anschlussbelegung wie die 
MicroVGA, kommt also von hinten an die Platine. Die Schaltung folgt 
heute noch, bin noch nicht dazu gekommen. Wir könnten auch eine Platine 
machen, die an der VGA Seite getrennt werden kann.

Peter Sieg schrieb:
> Ich frage mich nur, wie viele sich für weitere Platinen interessieren..?

5 Stück werden es schon mal, schätze mit der VGA kommen noch einige 
Interessenten dazu.

@alle
Wer hat Interesse an einer Platine? Bitte kurze Mail an mich.

nun erst mal zum Betonieren unterwegs...
Joe

von Peter S. (petersieg)


Lesenswert?

@Joe: 1 Platine auf jeden Fall.

Peter

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

VGA/Terminal Schaltung

Hier die Schaltung zur Diskussion. Sie geht auf eine Idee von Sebastian 
B. hier im Forum zurück (siehe 
Beitrag "AVR VGA Terminal")
Ich habe sie auf den ATTmega88 portiert und um eine Farbdarstellung 
erweitert. Wobei das Wort Farbe nicht wörtlich zu nehmen ist. Es wird 
für einen Text immer nur EINE Farbe angezeigt. Der AVR hat nur exakt 8 
Takte um das Zeichen in das Schieberegister zu bringen und da ist keine 
Zeit mehr für die Farbdarstellung jedes einzelnen Zeichens.

Joe

von hschuetz (Gast)


Lesenswert?

Hallo Leute,
ich bin noch eine Woche im Urlaub, dann will ich bauen!!
Die Microvga hängt z.Z. am MC CPM Computer wo sie gut funktioniert!
Welche Hardware Version sollte ich bauen und welche Software passt dann 
dazu?? Ich habe vor das System mit der Microvga auszurüsten und kein USB 
zu seriell chip einsetzen. Also bietet die fertige Platine Vorteile? 
oder ist es besser gleich auf Lochraster zu bauen?
Vorschläge sind willkommen
gruß
Hans- Werner

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo,
ich bin auch angemeldeter User
Gruß
Hans- Werner

von Peter S. (petersieg)


Lesenswert?

Hallo und Willkommen Hans- Werner.

1. Hardware
An Hardware gibt es zur Zeit die fast urspüngliche Version von 
sprite_tm, für
die Joe G. eine kleine Platinenauflage gemacht hat (vergriffen). Aktuell 
sind da nur 2 Leitungen vertauscht um Dramzugriff per Nibble zu 
ermöglichen.
Das kann man natürlich auch auf Lochraster aufbauen.. Schaltplan etc. 
hier weiter oben, im Artikel oder auf meiner Projektseite..
Z.Z diskutieren bzw. planen wir eine Version 2 der Hardware. 
Erweiterungen:
2 x Dramchips mit 4MBit. Dadurch 8-bit Ramzugriff und viel Platz für 
Ramdisk.
MicroVGA direkt anschließbar bzw. sogar ein Selbstbauersatz dazu.

2. Software
Z.Z ist Dank an Leo C. es fast schon schwieriger die jeweils aktuellste 
Version zu flashen ;-) Es gibt auf seiner Seite im trunk Zweig die 
aktuellste Version für die aktuelle 4-bit Dramversion. 8080 CPU 
Emulation
scheint fehlerfrei zu sein, bis zu 4 Partitionen (Typ=52=CP/M) werden 
als
LW a: - d: gemappt. Zusätzlich 64kb Ramdisk als i:
Im Zweig Softuart gibt es die Software für die neue 8-bit Dramversion, 
deren Platine gerade hier diskutiert wird..(2 x Dram Chips).

@Joe G. Das sieht doch prima aus mit dem VGATerm.. wie ich sehe ist da 
auch PS/2 schon dabei.. Sind schon ein paar ESC Codes dekodiert..(CLS?)? 
Lt. Entwickler ist das eng.. Nun Vorteil ist zumindest schon mal, das 
man ein deutsches Tast.Layout einbauen kann.. Und evtl. schaffen wir es 
ja doch noch durch z.B Übertaktung (30-40MHz) zumindest CLS und 
CursorPos zu
implementieren.. ich würde vorschlagen, diese VGA+PS/2 Lösung mit so auf 
die Platinen zu nehmen, das sie wie die MicroVGA-Anschlüsse direkt zu 
funktioniert, wer aber doch MicroVGA möchte (oder nur das..?) dies 
direkt dort durchtrennen kann..

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Und evtl. schaffen wir es
> ja doch noch durch z.B Übertaktung (30-40MHz) zumindest CLS und
> CursorPos zu
> implementieren..

Die VGA kann leider nicht beliebig übertaktet werden, da der Pixeltakt 
fest steht (25 MHz) und starr mit dem AVR Takt verbunden sein muß. 
Deshalb auch der eigene Quarzoszillator auf der VGA. Ideal wären 
natürlich 50 MHz ;-). Da hätte man dann 8 zusätzliche Takte für den AVR. 
An der Software muß natürlich gearbeitet werden, die Hardware stellt ja 
nur die Experimentierbasis.

Joe

von Horst (Gast)


Lesenswert?

Moin moin,
bin gerade über das Projekt gestolpert.
Ich habe mal mit einem ISP8A600 angefangen.
Dann folgten 8080, Z80 und über QRL dann zwangsweise 6502er.
Wobei der Z80 meine lieblings CPU war.
Irgendwo müsste bei mir auch noch eigene CP/M Software sein.
Werde mal suchen. Hatte mal nen eigenen Compiler geschreiben.
Pascal ähnlich, UPN. Compiler erzeugte ASM-Code. Das ganze war für
Steuerungen gedacht.
Ich würde mich gern an das Projekt mit drann hängen.
Leider sind hier keine DRAMs mehr vorhanden.
Wobei wird nocht unterstützung benötigt.
EAGLE, AVRSTUDIO (GCC,ASM) und ein bischen was an Erfahrung sind 
vorhanden.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Horst schrieb:
> Ich würde mich gern an das Projekt mit drann hängen.
> Leider sind hier keine DRAMs mehr vorhanden.
> Wobei wird nocht unterstützung benötigt.

Willkommen im Team!
DRAM's sind genug da. Derzeit sehe zwei offene Baustellen.
- dem AVR Z80 Code beibringen
- die VGA programmieren (VGA, PS2, Terminal)

von Peter S. (petersieg)


Lesenswert?

@Horst: Auch von meiner Seite ein herzliches Willkommen!

Welche SOJ Dram's kommen jetzt höchstwahrscheinlich zum Einsatz?
4M x 4 SOJ haben 26 Pin?
oder doch die 1M x 4 SOJ mit 24 Pin (Auf der Platine zähle ich 24-Pin's)

Habe ihr dann mal ein paar Bezeichnungen passender Dram's..?
Dann kann ich schon mal meine Bastelkiste durchsuchen..

Peter

von Horst (Gast)


Lesenswert?

Moin mion,
OK, ich schau mal in die AVR-Soft rein.
Ich habe hier moch nen MYAVR Smart-Controler liegen.
Hat den schon jemand erweitert?
Ich werde wohl eher beim PC als Terminal bleiben.
VT50/100 müsste ich auch noch mit Pascal oder C-Sourcen irgandwo 
rumliegen haben.

Wenn du noch DRAMS für mich hättest wäre das klasse joe.
Sonst würde ich eine Platine für 8x4164 machen, die sind noch zu 
bekommen.
Das ganze mit SRAM zumachen ist sicher nett, aber die Hardwareanpassung 
wird dann lagsam etwas umfangreich.

Ich könnte z.B. ein Layout für meinen Hardwarebestand machen, 
MYAVR-Smart, 8x4164 plus schon festgelegter Hardwäre von euch. Hat da 
jemand Intresse drann?

Das Übertakten der AVR's muss aus meiner sicht nicht unbedingt sein.
Wenn ich wirklich Tempo haben will wäre eine andere CPU angesagt (ARM ab 
400 MHz).

Netter wäre ein BUS-System um die weitere Hardware auch per AVR zu 
realisieren. Z.B. Ein AVR der Parallelport macht, einen für USB(per 
Software), acht bis zehnmal Servoansteuerung  u.s.w. ES gibt doch schon 
so einiges was man da gut anflanschen könnte. Liesse sich auch alles gut 
ins TINY-Basic ins BIOS einbauen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Welche SOJ Dram's kommen jetzt höchstwahrscheinlich zum Einsatz?
> 4M x 4 SOJ haben 26 Pin?

4Mx4 SOJ kommen zum Einsatz. Die haben 24 Pins und werden von 1 bis 26, 
unter Auslassung der 7 und der 20, durchnummeriert. Ein typischer 
Vetreter ist z.B. HY5117404C

Joe

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Horst schrieb:
> Wenn du noch DRAMS für mich hättest wäre das klasse joe.

Ram's kannst du bekommen, sie sind noch oft auf den alten 
Speicherriegeln zu finden.

>Netter wäre ein BUS-System um die weitere Hardware auch per AVR zu
>realisieren. Z.B. Ein AVR der Parallelport macht, einen für USB(per
>Software), acht bis zehnmal Servoansteuerung  u.s.w. ES gibt doch schon
>so einiges was man da gut anflanschen könnte. Liesse sich auch alles gut
>ins TINY-Basic ins BIOS einbauen.

Hier kannst du dich auch austoben, Pin14/Pin15 der VGA-Schnittstelle 
sind mit I2C belegt (die einzigen freien Pins). Hier kann noch viel 
angeschlossen werden.

Joe

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Habe ihr dann mal ein paar Bezeichnungen passender Dram's..?
> Dann kann ich schon mal meine Bastelkiste durchsuchen..

Hier ein Auszug aus meiner Bestandsliste. Die Links auf meine Festplatte 
bitte ignorieren. :-)


72 pol SIMM
-------------------
MT4LC4M4B1DJ-6  Micron    3.3V, 4M x 4
file:///home/leo/Archive/Datenblaetter/Memory/MT4LC4M4B1.pdf


GM71C17403BJ6  LGS      5V, 16M, 4Mx4, 2K Refr, EDO, 60ns
file:///home/leo/Archive/Datenblaetter/Memory/GM71C17403C-7.pdf
http://www.idhw.com/textual/guide/noin_ram_chip_lg.html


HY5117400 JC-70  HYUNDAI  DRAM, 16M, 2K Ref, 4Mx4


HY514400A LJ-60  HYUNDAI    5V, 4M, 1K Refr, 1Mx4,
file:///home/leo/Archive/Datenblaetter/Memory/HY514400ALJ.pdf



VG2617405CJ-6  Vanguard  5V, 4Mb x 4, EDO, 1K Refr,
http://www.idhw.com/textual/guide/noin_ram_chip_vanguard.html


MT4C4M4B1DJ-6  Micron  DRAM, 5V, 4M x4, 2K Refr FPM,
file:///home/leo/Archive/Datenblaetter/Memory/MT4LC4M4B1.pdf
TC514100ASJ-60  Toshiba   5V, 4MB, x1,
file:///home/leo/Archive/Datenblaetter/Memory/TC514100ASJ.pdf





GM71C17400CJ6  LGS  5V, 16M, 2KRefr, 4Mx4, FPM
file:///home/leo/Archive/Datenblaetter/Memory/GM71C17400CJ.pdf
GM71C4100CJ60  LGS   5V, 4M, x1, FPM

von Leo C. (rapid)


Lesenswert?

Horst schrieb:
> Moin mion,
> OK, ich schau mal in die AVR-Soft rein.

Hallo Horst,
genau wie Joe würde auch vorschlagen, daß Du Dir dann den 8080 
Interpreter vornimmst. Bevor man ihn auf Z80 aufbohrt, müßte man mal 
schauen, ob sich an der Performance noch was machen läßt. Ich fürchte 
aber, das man das Teil nur schneller bekommt, wenn man wesentlich mehr 
Flash investiert. Und das ist bei Mega8 und Mega88 nicht mehr vorhanden.

> Ich werde wohl eher beim PC als Terminal bleiben.
> VT50/100 müsste ich auch noch mit Pascal oder C-Sourcen irgandwo
> rumliegen haben.

Bei der Gelegenheit könntest Du auch mal einen Wordstar auf VT100/ansi 
anpassen, oder einen angepaßten irgendwo auftreiben. Ich bin immer noch 
nicht dazu gekommen, und kopiere zur Zeit fleißig Dateien zwischen Host 
und Emulator bzw avrcpm hin und her.

> Sonst würde ich eine Platine für 8x4164 machen, die sind noch zu
> bekommen.

Bloß nicht! Viel zu iel Aufwand. Evtl. müßte auch die Software gändert 
werden. Und dann nicht mal eine RAM-Disk.

> Das ganze mit SRAM zumachen ist sicher nett, aber die Hardwareanpassung
> wird dann lagsam etwas umfangreich.


> Ich könnte z.B. ein Layout für meinen Hardwarebestand machen,
> MYAVR-Smart, 8x4164 plus schon festgelegter Hardwäre von euch. Hat da
> jemand Intresse drann?

Hoffentlich nicht. ;-)

> Netter wäre ein BUS-System um die weitere Hardware auch per AVR zu
> realisieren. Z.B. Ein AVR der Parallelport macht, einen für USB(per
> Software), acht bis zehnmal Servoansteuerung  u.s.w. ES gibt doch schon
> so einiges was man da gut anflanschen könnte. Liesse sich auch alles gut
> ins TINY-Basic ins BIOS einbauen.

Kleine Erweiterungen sich sicher ok, aber ein Bus-System würde meiner 
Meinung nach den Rahmen sprengen. --> anderes System.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

A>stat dsk:

    A: Drive Characteristics
 1944: 128 Byte Record Capacity
  243: Kilobyte Drive  Capacity
   64: 32  Byte Directory Entries
   64: Checked  Directory Entries
  128: Records/ Extent
    8: Records/ Block
   26: Sectors/ Track
    2: Reserved Tracks

    I: Drive Characteristics
 8128: 128 Byte Record Capacity
 1016: Kilobyte Drive  Capacity
  192: 32  Byte Directory Entries
    0: Checked  Directory Entries
  128: Records/ Extent
   16: Records/ Block
   32: Sectors/ Track
    2: Reserved Tracks

    J: Drive Characteristics
 8192: 128 Byte Record Capacity
 1024: Kilobyte Drive  Capacity
  192: 32  Byte Directory Entries
    0: Checked  Directory Entries
  128: Records/ Extent
   16: Records/ Block
   32: Sectors/ Track
    0: Reserved Tracks

    K: Drive Characteristics
 8192: 128 Byte Record Capacity
 1024: Kilobyte Drive  Capacity
  192: 32  Byte Directory Entries
    0: Checked  Directory Entries
  128: Records/ Extent
   16: Records/ Block
   32: Sectors/ Track
    0: Reserved Tracks

    L: Drive Characteristics
 7680: 128 Byte Record Capacity
  960: Kilobyte Drive  Capacity
  192: 32  Byte Directory Entries
    0: Checked  Directory Entries
  128: Records/ Extent
   16: Records/ Block
   32: Sectors/ Track
    0: Reserved Tracks


So sieht das jetzt bei mir mit 2 4Mx4 Chips aus.
Für jedes Megabyte ein Laufwerk.
Vom ersten Laufwerk gehen 2 Systemspuren ab (8K), für CCP+BDOS, die von 
dort beim Warmstart neu geladen werden.
Vom letzten Laufwerk gehen 64Kbyte ab. Schließlich bracht der Rechner ja 
auch etwas Arbeitsspeicher. ;-)

Im AVR-Teil sind 32 Sektoren pro Spur und maximal 1 MByte pro Laufwerk 
fest vorgegeben. Die obersten 64K werden immer als Arbeitspeicher 
verwendet.

Der Rest ist über die CP/M Parametertabellen frei einstellbar.
Dafür verwendet man am Besten die Macros, die ich hier mal angehängt 
habe.
Ich war so frei, die DR-Macros für unsere Zwecke etwas anzupassen.

Das ganze kommt auch noch ins SVN, wenn ich etwas aufgeräumt und ein 
paar Build-Scripte erstellt habe.

von Peter S. (petersieg)


Lesenswert?

Soo.. ich habe jede Menge 1M x 4 Drams aber kein einziges 4M x 4 Dram.. 
:-(

Peter

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Noch nicht ganz perfekt aber in diese Richtung wird es gehen...

- VGA kann abgetrennt und separat verwendet werden
- Stromversorgung über Steckernetzteil an VGA
- Bereitstellung von 5V und 3.3V

Joe

von Peter S. (petersieg)


Lesenswert?

@Joe: Rx und Tx liegen sich 1:1 gegenüber.. müßten die nicht gekreuzt 
sein?
Und wenn es geht würde ich die Verbindungen, die benötigt werden, wenn 
man beide zusammen betreiben will auch gleich durchverbinden.. dann muß 
man keine Jumper einlöten und verbinden..

Peter

von Horst (Gast)


Lesenswert?

moin moin,

war ein langer Tag heute....... mit Familie unterwegs. :-)

Wo ist oder wer hat die aktuelle Software des AVR?

Meine Kisten hatten früher ECB-BUS.
Der uVGA-Bus ist auch OK.
Gibt's schon eine Backplan und ein Gehäuse dafür?
Würde schon lustig ausschauen, so alles auf halben EURO-Kartenformat.

AVR-CPU-Board mit SD-FD und RAM-FD
zweites SD-FD mit RAM-FD
uVGA.
Paralelle IO's.
Serielle IO's.
USB-Master.
Netzwerk.
RFM12-Board für Haussteuerung und ähnliches.
BT, wofür auch immer.
u.s.w

Und wenn dann mal einer Lust hat noch ein ARM-CPU-Board.

Kann was richtig grosses werden :-)

von Ronny M. (hobby-coder)


Lesenswert?

was würde ein bauteilesatz der aktuellen version kosten, wenn man avr 
cp/m platine + vgs/ ps2 modul + aller notwendigen bauteile aus einer 
quelle kaufen würde?

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Horst schrieb:
> Wo ist oder wer hat die aktuelle Software des AVR?

http://cloudbase.homelinux.net/viewvc/avr-cpm/

Und hier unter 2. steht noch was dazu:
Beitrag "Re: CP/M auf ATmega88"

> Meine Kisten hatten früher ECB-BUS.
> Der uVGA-Bus ist auch OK.
> Gibt's schon eine Backplan und ein Gehäuse dafür?

Ja, siehe Bild. ;-) [0]

> Würde schon lustig ausschauen, so alles auf halben EURO-Kartenformat.
>
> AVR-CPU-Board mit SD-FD und RAM-FD
> zweites SD-FD mit RAM-FD
> uVGA.
> Paralelle IO's.
> Serielle IO's.
> USB-Master.
> Netzwerk.
> RFM12-Board für Haussteuerung und ähnliches.
> BT, wofür auch immer.
> u.s.w

Wozu das alles auf einem simulierten 8080 mit C/PM?

> Und wenn dann mal einer Lust hat noch ein ARM-CPU-Board.

Für CP/M dann doch eher ein eZ80.

> Kann was richtig grosses werden :-)

Aber mit der Basis, an der wir basteln macht das imho keinen Sinn.


[1] Das ist ein "Schrottteil" von Pollin für einen Euro.
http://www.pollin.de/shop/dt/MTcwOTcyOTk-/Computer_und_Zubehoer/Hardware/Laufwerke_Cardreader/Card_Reader_UCR_61S.html

von Peter S. (petersieg)


Lesenswert?

Die neue Platine hat eigendlich drei Neuerungen:
1. 8-bit Dram -> damit ca. Faktor 2 im Dram-Zugriff = ca. doppelt so 
schnell
2. VGA-Terminal (ala MicroVGA) direkt mit auf der Platine (trennbar)
3. I2C Schnittstelle

Einzig 3. eröffnet erweiterte Möglichkeiten.. Hier würde mich 
Interessieren,
was für Möglichkeiten man hier sieht..(Ideen)?

Ansonsten fehlt mir noch eine elegante Möglichkeit mal eine Datei zw. 
CP/M Welt und Host-Welt auszutauschen..

Gäbe XModem (muß noche 8080 Version finden). Ohne MicroVGA sollte das 
direkt klappen.. aber mit wird die serielle Schnittstelle verwendet.. 
MicroVGA hat zwar einen 'Pass Through' Modus.. aber ob das klappt..?
Was gäbe es sonst noch für Möglichkeiten../Ideen..?

Peter

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Peter Sieg schrieb:
> Rx und Tx liegen sich 1:1 gegenüber.. müßten die nicht gekreuzt
> sein?
> Und wenn es geht würde ich die Verbindungen, die benötigt werden, wenn
> man beide zusammen betreiben will auch gleich durchverbinden.. dann muß
> man keine Jumper einlöten und verbinden..

Ich glaube es ist schon korrekt so, trotzdem bitte nochmal Schaltung und 
Layout überprüfen. Die Belegung ist recht "tricky" deshalb hier mal eine 
Übersicht dazu. Das sollte im späteren Betrieb auch Einstellung 
erleichtern.
Wie ja schon weiter oben beschrieben, können neben der Kommunikation des 
CP/M mit der VGA auch die Varianten CP/M an PC Terminal oder VGA an PC 
Terminal eingestellt werden. Gerade die letzte Variante schein mir zum 
Test und zur Inbetriebnahme der VGA recht nützlich. Außerdem versehe ich 
die AVR im Normalfall mit einem Bootloader, so das über die USB der 
jeweilige Controller programmiert werden kann.
Die Verbindungen CP/M VGA sind schon auf der Platine, sie liegen auf der 
Unterseite.

> Ansonsten fehlt mir noch eine elegante Möglichkeit mal eine Datei zw.
> CP/M Welt und Host-Welt auszutauschen..
Dir gefällt wohl die Variante Vinculum usb nicht? Das CP/M kennt ja 
derzeit noch keine COM xx. Also im AVR die SPI für Vinculum usb 
programmieren und im BIOS als COM xx anmelden.


@Ronny Minow
Ein Bausatz im Sinne von BAUSATZ ist eigentlich nicht geplant. Es wird 
die Platinen und wieder einige Bauelemente (MMC Fassung, SMD IC's, AVR, 
Quarze..) geben.

von Peter S. (petersieg)


Lesenswert?

Joe G. schrieb:
> Dir gefällt wohl die Variante Vinculum usb nicht?

Doch. Nur kann ich mir die genaue Funktion noch nicht so richtig 
vorstellen..
Es wird ein USB Stick mit FAT unterstützt. Per seriellen Befehlen wird 
das ganze gesteuert.. Also stelle ich mir das so vor, das im AVR+Bios 
eine 2te serielle Schnittstelle implementiert werden müßte. Dazu dann 
ein passendes Steuerprogramm auf CP/M Ebene das letzlich auch eine Datei 
vom USB Stick lesen und auf CP/M Diskette schreiben kann (und 
umgekehrt..).. Als Alternative könnte auch ein Xmodem diese 2te serielle 
IF nutzen um z.B mit einem PC Daten auszutauschen.. Richtig..?

Peter

von Detlev T. (detlevt)


Lesenswert?

Joe G. schrieb:
> Noch nicht ganz perfekt aber in diese Richtung wird es gehen...

Da hätte ich noch ein paar Verbesserungsvorschläge:

1.) Statt des 74HC165 sollte man eher ein 74HC166 nehmen bei dem das 
Laden mit dem Takt synchronisiert ist.
2.) Mir leuchtet nicht ganz ein, wozu die 74HC244 Treiber nötig sind. 
Laut Philips/NXP Datenblatt könnte ein 74HC-Standardausgang problemlos 
4mA treiben, das würde sogar für alle drei Farben gleichzeitig reichen:

Gruß, DetlevT

von Horst (Gast)


Lesenswert?

Moin moin,

Ich hab mal einen Blick in die Software getan. Schön, aber nicht auf 
Tempo optimert. Da kann man noch reichlich arbeit reinstecken.

1.) Für die Z80 Codes EXX und EX AF,AF' muss noch ein zweiter 
Registersatz her. Ich würde den ins normale SRAM des AVR legen. Diese 
Befehle sind nicht so häufig verwendet worden. Die relativen 
Sprungbefehle sollten kein Problem sein.

2.) Die IN und OUT würde ich wahlweise auf einen der seriellen Busse 
umlegen.
So hat man die möglichkeit damit eigene Hardware zu steuern. Z.B. könnte 
man über I²C oder so PIO's und SIO's anhängen. Ein Mega8 tut per 
software so als ob er eine PIO oder SIO wäre.
Besteht die möglichkeit die uVGA so auch zu steuern?

3.) Für die Interrupt Codes (HALT, u.s.w) bräuchte man noch eine freie 
Portleitung. Ich würde die SD-Floppy auf eine eigene Platine legen ( 
zwei Drives) und an den ser. BUS hängen. So wäre wieder reichlich 
Hardware frei.

Das alles würde auch das BIOS vereinfachen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Detlev T. schrieb:
> Statt des 74HC165 sollte man eher ein 74HC166 nehmen

Gute Idee, schon geändert.

>Mir leuchtet nicht ganz ein, wozu die 74HC244 Treiber nötig sind.

Das waren Relikte aus der s/w Darstellung - auch geändert.

Peter Sieg schrieb:
> Also stelle ich mir das so vor, das im AVR+Bios
> eine 2te serielle Schnittstelle implementiert werden müßte. Dazu dann
> ein passendes Steuerprogramm auf CP/M Ebene das letzlich auch eine Datei
> vom USB Stick lesen und auf CP/M Diskette schreiben kann (und
> umgekehrt..).. Als Alternative könnte auch ein Xmodem diese 2te serielle
> IF nutzen um z.B mit einem PC Daten auszutauschen.. Richtig..?

Ja Peter, genauso dachte ich.

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo,
mich würde interessieren wann die neuen Platinen zu erwerben sind..würde 
mich für 2 anmelden.. evtl.mit Spezialteilen...
gruß
Hans Werner

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Hans- w. Schütz schrieb:
> mich würde interessieren wann die neuen Platinen zu erwerben sind

Wenn jeder Interessent wirklich draufgesehen hat würde ich die 
Bestellung auslösen. Bisher gab es ja noch Änderungen.
Der kalkulierte Preis (Losgröße 10) liegt bei 18,50 pro Stück.
Joe

von Hans- w. S. (hschuetz)


Lesenswert?

Das hört sich gut an... merke mich mal für 2 Platinen vor!
Gruß
Hans- Werner

von Detlev T. (detlevt)


Lesenswert?

Hallo Joe,

ich bin zwar nicht direkt ein Interessent für Platinen, aber die 
VGA-Geschichte interessiert mich.

Mir ist da eine Unstimmigkeit aufgefallen. Du beziehst dich auf das 
AVR-VGA-Projekt, dass 50 Zeilen a 80 Spalten hat. Das macht einen 
SRAM-Bedarf von 4000 Bytes. Eingeplant hast du ein ATMEGA88 mit 1024 
Bytes.

Es gibt mit dem 328p eine Version mit 2kiB, damit würde man noch 25 
Zeilen schaffen, aber niemals 50. Das dürfte der Grund gewesen sein, 
warum das Original-Projekt den Mega644 (4kiB) nutzt.

Außerdem könnte man mit einem "großen" ATMEGA alle 8 Bit des 
Schieberegister nutzen und mit einem zweiten Port, einem 4-fach 2 zu 
eins Multiplexer (statt AND) und dem DAC wie bei Jörg Wolframs Chipbasic 
für Vorder- und Hintergrundfarbe je eine aus 16 auswählen ohne mehr ICs 
zu brauchen.

Gruß, DetlevT

von Peter S. (petersieg)


Lesenswert?

@Joe: Ich denke wir sollten jetzt auch nicht zu schnell die Platinen 
ordern..
Ein paar Tage mehr zum drüber nachdenken, sollte nicht schaden.. Ich 
persönlich finde, das jetzt ohne den VGA-Terminal Part, unser avr cpm 
eigendlich nur von 4 auf 8-bit Ram gewachsen ist (mit dann größerer 
Ramdisk).. ich bin noch nicht gänzlich überzeugt, ob wir nicht mit einem 
größeren AVR (ATmega32/644/1284) mehr gewinnen, mit dem ATmegaX8 sind 
wir mit den Pin's am Ende..

Peter

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

@Peter
Ich habe kein Problem noch einige Tage damit zu warten. Einen größeren 
AVR würde ich auch nicht nehmen. Der Reiz besteht ja gerade darin mit 
einem sehr einfachen System zu arbeiten. Wenn der Programmspeicher nicht 
reicht gibt es ja noch den ATmega168. Benötigt man noch weitere Pins, so 
lässt sich das System bequem über I2C erweitern.

@alle
Hier die letzte Schaltungs- und Layoutversion. Ich würde nun erst mal 
Änderungen, Kritik, Wünsche oder Zustimmungen (Ablehnungen) sammeln, ehe 
ich sie noch mal anfasse.

Joe

von Leo C. (rapid)


Lesenswert?

Horst schrieb:
> Ich hab mal einen Blick in die Software getan. Schön, aber nicht auf
> Tempo optimert. Da kann man noch reichlich arbeit reinstecken.

Wunderbar, dann kanns ja losgehen.

> 1.) Für die Z80 Codes EXX und EX AF,AF' muss noch ein zweiter
> Registersatz her. Ich würde den ins normale SRAM des AVR legen.

Klar, und die restlichen, fehlenden natürlich auch. In der 8-Bit 
Variante sind eh schon einige Register ausgelagert.

> Diese
> Befehle sind nicht so häufig verwendet worden. Die relativen
> Sprungbefehle sollten kein Problem sein.
>
> 2.) Die IN und OUT würde ich wahlweise auf einen der seriellen Busse
> umlegen.
> So hat man die möglichkeit damit eigene Hardware zu steuern. Z.B. könnte
> man über I²C oder so PIO's und SIO's anhängen. Ein Mega8 tut per
> software so als ob er eine PIO oder SIO wäre.
> Besteht die möglichkeit die uVGA so auch zu steuern?
>
> 3.) Für die Interrupt Codes (HALT, u.s.w) bräuchte man noch eine freie
> Portleitung. Ich würde die SD-Floppy auf eine eigene Platine legen (
> zwei Drives) und an den ser. BUS hängen. So wäre wieder reichlich
> Hardware frei.
>
> Das alles würde auch das BIOS vereinfachen.

Wir freuen uns auf Deine Verbesserungen und Erweiterungen.

von Ronny M. (hobby-coder)


Lesenswert?

@joe g: ok, welche teile kannst du liefern? ich habe noch ein paar edo- 
ram riegel hier liegen. ich müsttste schauen, was das für ram's sind...

kannst du, wennn du die platinen in die fertigung gibts, eine material 
liste erstellen, damit ich evtl. fehlende teile bestellen kann?

wie trennt ihr eigendlich die vga platine von der avr cpm platine? ich 
denke, eine pinleiste, um die signale per jumper verbinden/ trennen zu 
können, sollte ausreichen...

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Detlev T. schrieb:
> Mir ist da eine Unstimmigkeit aufgefallen. Du beziehst dich auf das
> AVR-VGA-Projekt, dass 50 Zeilen a 80 Spalten hat. Das macht einen
> SRAM-Bedarf von 4000 Bytes. Eingeplant hast du ein ATMEGA88 mit 1024
> Bytes.

Der ATmega88 steht in der Schaltung nur stellvertretend (EAGLE 
Footprint) für den ATmega328. Zum Einsatz kommen soll tatsächlich der 
328. Das gibt dann genau die von dir genannten 25 Zeilen zu 80 Spalten.

Ja, es könnten mehr Ports, ein DAC, ein Multiplexer... aber auch ein 
CPLD oder ein FPGA verwendet werden. Ich habe aus zwei Gründen darauf 
verzichtet.

1. Das AVR CP/M ist bewusst mit sehr einfacher Hardware aufgebaut, 
sozusagen ein minimalistisches System. So soll es auch bleiben. Mich 
schmerzt eigentlich schon das dritte IC. Es ist keine Konkurrenz für 
ARM's, eZ80, ... Ein Schüler mit Bastelerfahrung und einer kleinen 
Kramkiste soll es aufbauen können und ein vollwertiges Betriebsystem mit 
allen dazugehörigen Tools nutzen können.

2. Die VGA soll die gleichen Bedingungen erfüllen. Bunte Buchstaben 
(außer grün auf Schwarz ;-) ) machen da eigentlich keinen Sinn.

3. Mit der microVGA gibt es schon etwas für diejenigen die mehr wollen.

Joe

von Horst (Gast)


Lesenswert?

Moin moin,

hat mal einer für den MYZ80 Emu ein Disk-Images mit DDTZ drinn für mich?
Bräuchte ich mal fürs testen.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Horst schrieb:
> hat mal einer für den MYZ80 Emu ein Disk-Images mit DDTZ drinn für mich?
> Bräuchte ich mal fürs testen.

Auf die Schnelle hatte ich nicht rausgefunden, wie man beim MYZ80 in und 
aus den Diskimages kopiert. Bin dann beim simh hängen geblieben.
Z80-Simulator im DOS-Emulator muß ja auch nicht sein. :-)

Im Anhang ein nackter DDTZ.COM. War im simh Disk-Image schon drin.
Dort geht rein und raus mit den mitgelieferten Programmen R.COM und 
W.COM.

von Horst (Gast)


Angehängte Dateien:

Lesenswert?

Moin moin,

danke Leo.
Kannst du mal schauen ob du das darein bekommst?

von Leo C. (rapid)


Lesenswert?

Horst schrieb:
> Moin moin,
>
> danke Leo.
> Kannst du mal schauen ob du das darein bekommst?

Sorry, was soll das sein?

von Horst (Gast)


Lesenswert?

Das ist das Disk-images für den MYZ80.
Ich hatte die Hoffnung das du (oder wer auch immer) mir da mal den DDTZ 
einbauen könnte. :-)

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ronny Minow schrieb:
> kannst du, wennn du die platinen in die fertigung gibts, eine material
> liste erstellen, damit ich evtl. fehlende teile bestellen kann?

Ja, kann ich, kann aber EAGLE auch mit dem oben reingestellten Files.

> wie trennt ihr eigentlich die vga platine von der avr cpm platine?
Mit der Säge ;-)

Die genaue Bestellliste gebe ich bekannt, wenn wir das KGV gefunden 
haben.

Joe

von Peter S. (petersieg)


Lesenswert?

Von meiner Seite ok. Einzig ich habe keine 4M x 4 Dram Chips.. habt ihr 
davon genug (1M x 4 habe ich jede Menge.. aber die dürften ja nicht 
passen)?

Peter

von Detlev T. (detlevt)


Lesenswert?

Joe G. schrieb:
> Ein Schüler mit Bastelerfahrung und einer kleinen
> Kramkiste soll es aufbauen können und ein vollwertiges Betriebsystem mit
> allen dazugehörigen Tools nutzen können.
>
> 2. Die VGA soll die gleichen Bedingungen erfüllen. Bunte Buchstaben
> (außer grün auf Schwarz ;-) ) machen da eigentlich keinen Sinn.

Ich schaue vor allem auf den VGA-Teil (wird dich nicht überraschen) und 
kann da deine Argumente nicht ganz nachvollziehen.

Kaum einer wird alle Teile in seiner "Kramkiste" finden. Den relativ 
neuen ATMEGA328p auch sicher seltener als den häufig genutzten 
ATMEGA644. Letzterer ist auch bei den üblichen Verdächtigen (Pollin, 
Reichelt,...) im Angebot, der 328p nicht.

Wenn man schon eine Leiterplatte hat, macht ein 74HC157 einzulöten auch 
nicht mehr Mühe als ein 74HC08. Der Preis ist auch fast gleich.

PS: Ich hatte mir jetzt gerade noch einmal den Schaltplan vom AVR-VGA 
angesehen. Da ist mir aufgefallen, dass dort ein 74*AC*08 als AND-Gatter 
vorgesehen war. Das erklärt, warum die Treiber noch nachgeschaltet 
werden mussten. Die AC können praktisch keinen Strom liefern.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Detlev T. schrieb:

> Kaum einer wird alle Teile in seiner "Kramkiste" finden. Den relativ
> neuen ATMEGA328p auch sicher seltener als den häufig genutzten
> ATMEGA644. Letzterer ist auch bei den üblichen Verdächtigen (Pollin,
> Reichelt,...) im Angebot, der 328p nicht.

Den ATMEGA328P-PU gibt es zum Beispiel bei CSD.

Gruß,

Frank

von Detlev T. (detlevt)


Lesenswert?

ERRATUM

Detlev T. schrieb:
> 2.) Mir leuchtet nicht ganz ein, wozu die 74HC244 Treiber nötig sind.
> Laut Philips/NXP Datenblatt könnte ein 74HC-Standardausgang problemlos
> 4mA treiben, das würde sogar für alle drei Farben gleichzeitig reichen:

Da habe ich mich doch glatt um eine Größenordnung vertan. In 
Wirklichkeit sind es nicht 2.75mA, sondern 27.5mA. Das schafft man mit 
einem HC-Ausgang natürlich nicht mehr.

von Peter S. (petersieg)


Angehängte Dateien:

Lesenswert?

Ich hänge hier mal die partlist aus eagle dran..

Hier ein Auszug ohne C, R, Jumper etc.:
1
Part     Value          Package      Library  
2
B1       DBDB101G       DB           rectifier 
3
CON1     SCDA5A0201     SCDA5A0201   SCDA5A0201 
4
IC1      ATmega88-20P   DIL28-3      atmel   
5
IC2      74S08D         SO14         74xx-eu 
6
IC3      FT232RL        SSOP28       ftdichip
7
IC4      ATmega88-20P   DIL28-3      atmel   
8
IC7      74AC08D        SO14         74xx-eu 
9
IC8      LF50CDT        DPACK        v-reg   
10
IC9      LF33CDT        DPACK        v-reg   
11
IC10     74HC166D       SO16         74xx-eu 
12
J1       DCJ0202        DCJ0202      con-jack 
13
LED1     Grün           LED3MM       led   
14
LED2     Gelb           LED3MM       led   
15
LED3     Grün           LED3MM       led   
16
QG1      25 MHz         DIL14S       crystal 
17
QG2      25 MHz         DIL14S       crystal 
18
U$1      DRAM_4M_4      SOJ26-24     AMESYS  
19
U$2      DRAM_4M_4      SOJ26-24     AMESYS  
20
X1       PN61729-S      PN61729-S    con-berg 
21
X2       PS2            SSV-BC06     con-yamaichi 
22
X3       VGA            HDF15H       con-subd
Dazu ggf. noch ein paar Hinweise..
FT232RL und entsprechende Bauteile + USB Buchse braucht man nur, wenn 
man diese PC Verbindung auch nutzen möchte..
Ich gehe davon aus, das der SD Slot auch mit der Platine geliefert 
werden kann (wie beim letzten mal..)
Der AVR CP/M läuft bei mir stabil mit 30MHz. In ein paar Tagen bekomme 
ich 40MHz Quarzoszillatoren und weiß dann, ob es auch damit geht.. d.h, 
wer seinen AVR CP/M höher takten möchte, sollte anstatt 1x25MHz dann 
einen höher getakteten Quarzoszi bestellen..

Peter

von Peter S. (petersieg)


Lesenswert?

Ich habe hier noch mal verschiedene 'Meßwerte' aus weiter oben zusammen 
getragen:
1
-------------------------------------------------------
2
           |  Peters  |        Leos        |
3
           | Schleife |      Schleife      |
4
-----------+----------+--------------------+-----------
5
AVR   MHz  | Zeit [s] | Zeit [s]   "Speed" | HW    SW    
6
-----------+----------+---------+----------+-----------
7
 88   20     35.999                           original hardware
8
-------------------------------------------------------
9
 88   20     21.380                           4     (unoptimized code)
10
 168  24     17.620                           4     (unoptimized code)
11
 88   25     16.871                           4     (unoptimized code)
12
 8    20     12.180                           4     0
13
 8    20     12.453      3.488     827 KHz    4     1
14
 8    20     11.500      3.488     827 KHz    4     3
15
 88   30      7.573                           4     ?
16
-------------------------------------------------------
17
 8    20      7.599      2.039    1380 KHz    8     2
18
 8    20      6.680      2.039    1380 KHz    8     3
19
-------------------------------------------------------
20
 8    20      6.418      1.958    1470 KHz    8     4
21
-------------------------------------------------------
22
 *** Hochrechnung ***
23
 88   40      5.6                ~1600 KHz    4     ?
24
 X8   30      4.3                ~1800 KHz    8
25
 X8   40      3.25               ~2000 KHz    8
26
27
"HW 4" ist die jetzt aktuelle 4-bit Verdrahtung und "HW 8" die 8-Bit Variante.

D.h z.Z liegt man bei 4-bit und Übertaktung bei ca. 1,3MHz 8080 Speed.
Das erreicht man ebendso mit 8-bit Dram Ansteuerung ohne Übertaktung.
Mit 8-bit + Übertaktung sind ca. 2MHz 8080 Speed drin..
Und noch weitere Optimierungen des Codes kommen on Top.

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Detlev T. schrieb:
> Wenn man schon eine Leiterplatte hat, macht ein 74HC157 einzulöten auch
> nicht mehr Mühe als ein 74HC08.

Wozu dann der Multiplexer? Um während der Schwarzschulter die 
Hintergrundfarbe einzustellen?

von Detlev T. (detlevt)


Lesenswert?

Joe G. schrieb:
> Wozu dann der Multiplexer? Um während der Schwarzschulter die
> Hintergrundfarbe einzustellen?

Der Multiplexer wird vom Ausgang des Schieberegisters angesteuert. Er 
schaltet dann immer die einen oder die anderen 4 Bit durch, die auf 
einem (zweiten) Port ausgegeben werden. 4 Bit= Rot Grün Blau und 
Intensität. Damit könnte man dann Vorder- und Hintergrundfarbe frei 
aus einer Palette von 16 Farben wählen. Auch ein anders farbiger Rahmen 
wäre möglich, wenn man die ISR etwas erweitert.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Detlev T. schrieb:
> Der Multiplexer wird vom Ausgang des Schieberegisters angesteuert.

OK, verstanden. Es gibt nur leider keine 2x4 Bit die frei sind, d.h. 
doch einen größeren Controller zu nutzen. Aber genau das sollte ja nicht 
sein.

Ich sehe einfach folgendes Problem. Zunächst wird sehr sehr ausführlich 
über die Hardware diskutiert (ist auch gut so). Die Hardware ist jedoch 
nur die halbe Miete. Es gehört natürlich noch eine entsprechende 
Software dazu. Die Softwarediskussion bzw. die Mitarbeit ist meist 
umgekehrt proportional zur Hardwarediskussion (ist nicht gut so).
Mein Vorschlag. Wenn die Software auf der SimpleVGA ordentlich und 
stabil läuft, es einige nachgebaut und getestet haben, dann gibt es eine 
nette 80x50 Farbvariante.
Joe

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Detlev T. schrieb:
> PS: Ich hatte mir jetzt gerade noch einmal den Schaltplan vom AVR-VGA
> angesehen. Da ist mir aufgefallen, dass dort ein 74*AC*08 als AND-Gatter
> vorgesehen war. Das erklärt, warum die Treiber noch nachgeschaltet
> werden mussten. Die AC können praktisch keinen Strom liefern.

Mein Datenblatt sagt mir, dass gerade der AC-Type 24mA treibt.

von Detlev T. (detlevt)


Lesenswert?

Joe G. schrieb:
> Es gehört natürlich noch eine entsprechende
> Software dazu. Die Softwarediskussion bzw. die Mitarbeit ist meist
> umgekehrt proportional zur Hardwarediskussion

Ist klar. Ich mache ja nur Vorschläge, die Entscheidung triffst du.

An dem Quelltext würde sich allerdings nicht viel ändern. Du musst ja 
jetzt schon die drei Bits für die Farbe an einem Port ausgeben, das wäre 
dann halt stattdessen ein ganzes Byte. Die Ausgabe-Routine würde sich 
gar nicht ändern, allenfalls die Bezeichnung der Pins, die vermutlich 
ein einziges mal irgendwo definiert werden. Dafür könnte man dann den 
Standard 8x16 Font einer VGA-Karte nutzen, während du jetzt irgendwo 
einen 6x16 Font auftreiben musst, weil du nur 6 Bits ins Schieberegister 
schreiben kannst.

PS: Ich habe schon ein kleines C-Programm geschrieben, dass einen 
VGA-Font erst einmal komplett einliest und die Daten dann als C-Datei 
wieder ausgibt. Das auf Assembler-Ausgabe umzustricken ist kein großer 
Akt. Sage Bescheid, wenn du Interesse daran hast.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@alle

Wir gehen nun langsam in die Bestellphase. Ich bitte alle Interessenten 
wie beim letzen mal um eine kurze Mail an "feinmechaniker", damit ich 
sie in den Verteiler aufnehmen kann. Weiterhin bitte die Anzahl der 
Platinen und der möglicherweise noch benötigten Bauelemente mitteilen. 
Wer meine Kontaktdaten schon hat, natürlich auch direkt ;-)

Schon erfasst sind:

Peter S. x Platinen
Peter Z. 1 Platine
Hans-Werner S. 2 Platinen, aber noch ohne Kontaktmail
Ronny Minow x Platinen

Noch mal einige Worte zur Hardware.
AVR CP/M:
Die neue Variante wird eine 8 Bit RAM Variante sein. Die alte 4 Bit 
Variante läuft stabil. Die neue 8 Bit Variante ist in dieser Form der 
erste Neuaufbau. Eine Versuchsschaltung auf LR läuft aber schon bei Leo 
C.
Auch ist das neue Layout noch nicht getestet. Es könnten (was ich nicht 
hoffe) noch Fehler drin sein. Alle Nachbauinteressenten sollten sich 
also darüber im Klaren sein so was wie "Betatester" zu sein.

AVR VGA:
Diese Schaltung ist eine reine Experimentiervariante für eigene 
Versuche. Die Grundidee basiert auf einer Schaltung von Sebastian B. 
hier im Forum (siehe Beitrag "AVR VGA Terminal"). Mein LR Aufbau erzeugt 
derzeit die H- und V-Synchronimpulse und die Datenpixel. Hier besteht 
also noch jede Menge Handlungsbedarf.

microVGA:
Die Anschlüsse an der AVR CP/M Platine liegen Pinkompatibel zur 
Beschaltung der microVGA. Hier gibt es mindestens zwei funktionierende 
Systeme (Peter's und mein eigenes). Die microVGA bedient allerdings nur 
ein englisches Tastaturlayout sowie eine maximale Baudraute von 38400.

Joe

von Hans- w. S. (hschuetz)


Lesenswert?

Hat denn schon jemand das VGA Term in gange gebracht??
Hab ja die VGAterm hat aber Ihren preis...die Alternative wäre schon 
interessant. Na schaun wir mal..
Gruß
Hans- Werner

von Peter S. (petersieg)


Lesenswert?

Wohl kaum. Lt Joe existiert der Code für ATmega16.. müßte also erst an 
328 angepasst werden.. Evtl. wäre es auch angebracht, für das VGATerm 
einen extra Thread auszumachen.. könnte mehr Leute interressieren, die 
mit CP/M wenig anfangen können/wollen.. auch um ggf. noch mehr für 
Platinen zu
interessieren..

Peter

von Horst S. (h3aau)


Lesenswert?

Moin moin,

Die ersten Aenderungen für den Z80-Emu sind fertig.

Neuer opcode-Interpreter
EX AF,AF'
EXX
Relative Jumps

Da ich noch keine Hardware habe bräuchte ich mal jemanden der die 
Software
testen kann. Wer hat Lust und für welchen AVR soll ich es compilieren?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Horst S. schrieb:
> Da ich noch keine Hardware habe bräuchte ich mal jemanden der die
> Software
> testen kann.

Sende mir doch einfach die Quelle zu und ich stelle sie über SVN bereit.
Joe

von Peter S. (petersieg)


Lesenswert?

Horst S. schrieb:
> Neuer opcode-Interpreter
> EX AF,AF'
> EXX
> Relative Jumps

Das alles sagt mir nicht soo viel ;-)
Ist der z80 jetzt damit komplett drin..?

Generell kann ich schon testen.. aber bei dem kleinsten Problem.. geht 
das dann wie ein Ping-Pong Spiel los.. ist halt sicher nicht ideal ohne 
eigene Hardware.. Hast du das für die 4-bit Dram oder die 8-bit 
Dramversion gemacht?
Außer Leo C. dürfte z.Z wohl eher niemand die 8-bit Hardware haben.. ;-)
---
Nun, ich habe die 4-bit Version (3x) hier. 30MHz. 38400 Baud.
Ich habe Sargon.com (Schachprogramm) auf einer 'Diskette'. Das Programm 
steigt mit illegel Opcode aus, da es vermutlich z80 Code enthält..
---
Alternativ kann ich auch 1 x 4-bit Hardware verkaufen (-> Mail).

Peter

von Dagobert (Gast)


Lesenswert?

Gibt es irgendwo eine Tabelle mit den Steuercodes für die Sondertasten? 
Es wäre dann möglich, VGATerm speziell für das System umzuschreiben. 
Würde dann diese Spezial-Version liefern, falls dies gewünscht wird.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Die originalen VGA Quellen findet ihr nun auch hier: 
http://www.mikrocontroller.net/svn/list

von Horst S. (h3aau)


Lesenswert?

Moin moin,

@joe
>Sende mir doch einfach die Quelle zu und ich stelle sie über SVN bereit.

danke, aber so völlig ungetestet möchte ich das nicht in die weite welt 
verteilen. wenn es zur zeit nur einen mit 8bit HW gibt wäre es wohl ganz 
gut wenn ich meine änderungen auch in die 4bit SW einbaue. ich bin nach 
schlechten erfahrungen bei anderen projekten kein freund von svn mehr. 
kannst du die SW irgend wo für einen normalen download bereitstellen?

@Peter Sieg
danke fürs angebot, sende mir das mal als PM zu.
ich hätte schon gern die 8Bit hardware wann sind die platinen den so 
weit?
ich lasse meine sonst immer beim platinenbelichter machen. ist die DRAM 
verfügbarkeit/beschaffung eigentlich schon geklärt?
ich denke ich habe hier die SW als 8bit version.
leider ist in der SW selber keine doku und/oder change history drinn.

von Leo C. (rapid)


Lesenswert?

Horst S. schrieb:
> danke, aber so völlig ungetestet möchte ich das nicht in die weite welt
> verteilen.

Wenn die Software nicht verfügbar ist, kann sie nicht getestet werden...

> ich denke ich habe hier die SW als 8bit version.

Mir scheint, das nicht nur wir hier im Dunkeln tappen...
Hast Du keine Hardware, auf der Du testen kannst?

Wenn Du Deine Software (noch) nicht nicht ins Forum stellen willst, dann 
schick sie mir doch bitte per Email. Ich kann Dir dann sagen, welche 
Version Du hast, und auf welcher Hardware sie laufen würde. Außerdem 
kann ich dann auch gene mal was testen.

von Leo C. (rapid)


Lesenswert?

Hallo Horst,

prinzipiell läuft Dein Interpreter. So siehts im Moment aus:
1
CPM on an AVR, v1.0
2
3
Testing RAM: fill...wait...reread...
4
5
Initing mmc...
6
CP/M partition at: 001, size: 7811KB.
7
CP/M partition at: 15624, size: 7812KB.
8
CP/M partition at: 31248, size: 7812KB.
9
Partinit done.
10
Ok, CPU is live!
11
12
ipl
13
62k cp/m vers 2.2
Danach sollte der CP/M Prompt "A>" kommen....

Der Bootloader (ipl) wird ausgeführt, der Anfang vom BIOS.
Im Bios hängt das Programm zuerst in der Console-Inputschleife (wo es 
garnicht hinkommen sollte), und danach endlos in der Bootschleife, weil 
der avr-teil beim Sektor lesen immer einen Fehler zurückmeldet.

Ich habe den Verdacht, das bei call/return etwas schief läuft.


Horst S. schrieb:
> wenn es zur zeit nur einen mit 8bit HW gibt wäre es wohl ganz
> gut wenn ich meine änderungen auch in die 4bit SW einbaue.

Im Moment scheine ich der einzige zu sein, der die 8-Bit Variante 
aufgebaut hat. Es reicht aber, wenn Du Deine Software einmal schreibst. 
Vorläufig kann ich sie dann in die verschiedenen Versionen integrieren.

Auf längere Sicht möchte ich aber nur noch eine Version haben, 
allerdings modularisiert. Vielleicht sollte ich das jetzt endlich mal 
machen.

> ich bin nach
> schlechten erfahrungen bei anderen projekten kein freund von svn mehr.

Ohne Versionsverwaltung wirds aber echt schwierig mit mehreren Leuten an 
einem Projekt. Oder richtet sich Deine Aversion speziell gegen 
Subversion, und eine andere Versionsverwaltung wäre ok?

> ich denke ich habe hier die SW als 8bit version.
> leider ist in der SW selber keine doku und/oder change history drinn.

Die change history ist im svn.
Die Doku ist hier im Thread. ;-)
Ansonsten: "Use the source luke!" ;-)
Im Source sind ganz oben die Ports definiert. Dort kannst Du sehen, das 
für das RAM nur 4 Datenbits definiert sind.

Die aktuellen Quellen sind hier:

http://cloudbase.homelinux.net/viewvc/avr-cpm/trunk/
Das ist die "stabile" Version für die aktuelle (4-Bit-RAM) Hardware.

http://cloudbase.homelinux.net/viewvc/avr-cpm/branches/softuart/
Hier ist z.Zt. die Version für 8-Bit RAM.

Sorry für svn.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Die Doku ist hier im Thread. ;-)

Es muss ja nicht jeder programmieren oder Hardware entwerfen. Vielleicht 
findet sich hier einer der sich mal an eine ordentliche Doku macht.

Gibt es noch Interessenten für die neue LP? Alle von mir schon Erfassten 
sollten im Mailverteiler sein, aber möglicherweise habe ich noch 
jemanden vergessen. Einfach bei mir melden.

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo Leute,
wenn mein System endlich läuft werde ich es dokumentieren und alles auf 
meiner Webseite veröffentlichen....
Wer seine Softwareversionen dann mit veröffentlichen will...
kein Problem.
Webseite schuetz.thtec (dot)org
Gruß
Hans- Werner

von Leo C. (rapid)


Lesenswert?

@Horst

> Der Bootloader (ipl) wird ausgeführt, der Anfang vom BIOS.
> Im Bios hängt das Programm zuerst in der Console-Inputschleife (wo es
> garnicht hinkommen sollte), und danach endlos in der Bootschleife, weil
> der avr-teil beim Sektor lesen immer einen Fehler zurückmeldet.

Ich habe nochmal etwas genauer hingeschaut: Der Fehler ist ein völlig 
anderer.

> Ich habe den Verdacht, das bei call/return etwas schief läuft.

Jetzt habe ich einen anderen Verdacht, aber ich muß noch suchen.

von Horst S. (h3aau)


Lesenswert?

moin moin,

danke Leo. da scheint sich noch ein fehler in der todo_table 
eingeschlichen zu haben. ich werde die noch mal überprüfen. kannst du 
über die debugfunktion noch irgend was an infos sehen?
ich müsste sonst jeden möglichen opcode von hand testen. :-(

von Leo C. (rapid)


Lesenswert?

Horst S. schrieb:

> danke Leo. da scheint sich noch ein fehler in der todo_table
> eingeschlichen zu haben. ich werde die noch mal überprüfen. kannst du
> über die debugfunktion noch irgend was an infos sehen?
> ich müsste sonst jeden möglichen opcode von hand testen. :-(

Einen Fehler habe ich inzwischen gefunden. In meinem BIOS ist aber auch 
ein Fehler.

Die Details schicke ich Dir per E-Mail, sonst wird das hier zuviel.

von Horst S. (h3aau)


Lesenswert?

moin moin,

aua, das klingt nach einer etwas grösseren baustelle.....

von Leo C. (rapid)


Lesenswert?

Horst S. schrieb:
> aua, das klingt nach einer etwas grösseren baustelle.....

Ich glaube eher an ein, zwei, klitzekleine. Aber bis man die gefunden 
hat,...

von Detlev T. (detlevt)


Lesenswert?

Hallo Joe,

Joe G. schrieb:
> 1. Das AVR CP/M ist bewusst mit sehr einfacher Hardware aufgebaut,
> sozusagen ein minimalistisches System. So soll es auch bleiben. Mich
> schmerzt eigentlich schon das dritte IC.

Nur Interesse halber: Gibt es (außer der Möglichkeit der Farbänderung 
per Software) einen Grund für den 74AC08? Könnte man, wenn man mit weiß 
auf schwarz zufrieden wäre, da als Impedanzwandler nicht einen einfachen 
Emitterfolger nutzen.(z.B. mit BF199: max. 100mA / 400MHz 
Transitfrequenz) Statt eines ICs wäre das dann nur ein Transistor und 
ein paar Widerstände.

Gruß, DetlevT

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Detlev T. schrieb:
> Gibt es (außer der Möglichkeit der Farbänderung per Software) einen Grund für 
den 74AC08?

Nein gibt es nicht, ist nur für Nostalgiker wie mich die gerne grün auf 
schwarz oder amber auf schwarz möchten, so wie es früher war...
Ansonsten ist natürlich auch ein schneller Transistor ausreichend.

Joe

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Detlev T. schrieb:
> Mich
>> schmerzt eigentlich schon das dritte IC.

Das hatte ich glatt überlesen. Das ditte IC bezog sich auf die reine AVR 
CP/M Schaltung, also ohne VGA. Hier kam gegenüber der Urvariante noch 
der 74VHC08 als Pegelwander der MMC dazu. Das wurde notwendig um den AVR 
und RAM sicher mit 5V laufen zu lassen.
Joe

von Ronny M. (hobby-coder)


Lesenswert?

hallo joe g,

kannst du dram's, bzw. sram's, für das board (je nach varainte) liefern? 
falls nicht, ich habe hier noch ein paar edo ram riegel liegen. ob man 
die bausteine verwenden kann, muss ich mal prüfen... ich habe eine gute 
anzahl dieser riegel liegen. aber, welche bauteine man hiervon verwerten 
kann, muss ich erst testen...

amsonten: kannst du evtl. sogar alle benötigten bauteile liefern? in 
form eines bauatzes versteht sich. falls nicht, nehme ich die passenden 
dram's/ sram's und die beiden platinen (avr cp/m platine + vga platine).

von Horst S. (h3aau)


Lesenswert?

Moin moin,

gibt es eigentlich schon eine Version mit SRAM?
Den 628512 und 74HC374 gibt es günstig und als DIL.
Wenn schon Bastelkisteprojekt dann am besten auch ohne SMD.

von Detlev T. (detlevt)


Angehängte Dateien:

Lesenswert?

@Horst S.
Damit solltest du besser nicht rechnen. Die DRAMs werden hier ja auch 
als RAM-Disk benutzt, da fehlt beim SRAM der Platz. Außerdem würde sich 
da vielleicht auch eher ein ATMEGA8515 oder 162 anbieten, der ein 
SRAM-Interface in Hardware mitbringt. Ganz weit oben wurde das kurz 
einmal andiskutiert, dann aber halt ein anderer Weg gegangen.

@VGA
Das ist der Teil, der mich eigentlich interessiert. Ich habe einmal eine 
Impedanzwandlerschaltung mit einem Transistor simuliert. (R5-R7 ist der 
VGA-Monitor)

Sieht alles ziemlich gut aus. Die Flankensteilheit wird maßgeblich vom 
Eingangssignal bestimmt. Der Transistor allein schafft etwa 3ns 
(10%<->90%).Nur die Abrundung am Ende der steigenden Flanke ist ein 
Artefakt des Verstärkers allein. Der Eingangsstrom bei "ON" liegt bei 
etwa 5mA, 6mA Spitze beim Schalten. Also etwas, was ein 74HC166 ohne 
Hilfe noch so schafft.

Packt es als Memo zu den Akten. Vielleicht kommt die Frage bei einer 
späteren Version wieder auf, wenn man den Aufbau weiter vereinfachen 
will. Das hier soll keine Kritik an der aktuellen Hardware sein.

Die "ASC"-Datei ist die Simulation. Falls noch jemand damit spielen 
will.

von Horst S. (h3aau)


Lesenswert?

moin moin
mal eine frage an die asm-profis hier.

.dw label erzeugt 2byte mit der adr des label. so weit ok.
.dd low(label) erzeugt leider auch 2byte und eine warnung.
beides möchte ich aber nicht, sonder nur das lowbyte der adr.

ich arbeite mit avr-studio.
schon mal danke.

von Horst S. (h3aau)


Lesenswert?

sorry .dd ist natürlich .db

von spess53 (Gast)


Lesenswert?

Hi

>.dd low(label) erzeugt leider auch 2byte und eine warnung.
>beides möchte ich aber nicht, sonder nur das lowbyte der adr.

Der Flashspeicher der AVR ist Word-Organisiert. Daran lässt sich nichts 
ändern.

MfG Spess

von Peter S. (petersieg)


Lesenswert?

Kurze Info bez. Übertakten: 40MHz bei 3,3V geht nicht mehr. 30MHz läuft 
stabil. Bei 5V kann das natürlich trotzdem noch mit 40MHz klappen (muß 
aber nicht).

Peter

von Horst S. (h3aau)


Lesenswert?

moin moin

hat sich erledigt, habe eine lösung gefunden.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Der Chinamann hat gerade den Produktionsstart der Leiterplatten 
bestätigt, nun läuft die Zeit.

von Horst S. (h3aau)


Angehängte Dateien:

Lesenswert?

Moin moin,

Die 8080 Version ist so weit fertig.
Der Code passt noch locker in einen ATMega8.
Es ist noch Platz für zusätliche Wünsche.

Der Z80 hat über 700 Befehle, das passt leider nicht
mehr in die 8K. Hier für ist dann ein ATMega168 nötig.

Im wessentlichen habe ich den Opcode-Interpreter etwas auf Tempo
gebracht und für den Z80 vorbereitet.

Wer weiter mit arbeiten möchte kann sich direkt bei mir melden.

Danke noch mal an Leo fürs Testen da ich selbst noch keine
Schaltung habe.

Wie schaut es mit der Hardware aus?
Neue Ideen, neue Wünsche?

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Horst S. schrieb:

> Die 8080 Version ist so weit fertig.

Wenn Du meinst. ;-)

Wie wärs, wenn man z.B. die Tabellen über Makros aufbauen würde. Z.B. 
so:
1
; instr fetch, op, store
2
;
3
.macro  instr  
4
  .db  low(@2), low(@1), high(@1), low(@0)
5
.endm
6
7
;--------------------------------------------------
8
9
    instr do_fetch_DIR16, do_nop,     do_store_BC   ;01 nn nn ;LD BC,nn
10
    instr do_fetch_DIR8,  do_op_CPFA, do_nop        ;FE nn    ;CP n

Nur mal zwei Befehle als Beispiel. Die Tabellen wären übersichtlicher, 
und bei Änderungen an der Tabellenstruktur müßte man nur das Makro 
ändern.


> Im wessentlichen habe ich den Opcode-Interpreter etwas auf Tempo
> gebracht und für den Z80 vorbereitet.

So sieht es jetzt aus:
1
 Zeit   "Speed"  HW     Interpreter
2
 [s]     [KHz] 
3
--------------------------------------
4
3.364     857    4      alt
5
3.173    1088    4      neu (Horst S.)
6
1.924    1499    8      alt
7
1.753    1645    8      neu (Horst S.)

Hardware mit 4bit/8bit-RAM, jeweils bei 20MHz.

>
> Wer weiter mit arbeiten möchte kann sich direkt bei mir melden.
>
> Danke noch mal an Leo fürs Testen da ich selbst noch keine
> Schaltung habe.

Wie man an der Tabelle sieht, läuft es jetzt auch mit der neuen 
Hardware.
Ich habe nochmal eine Kleinigkeit am Interpreter ändern müssen, weil die 
fetch- und store-routinen (dank der RAM-Makros in der 8-Bit Version) 
nicht mehr zusammen in eine Page passen.

Ich habe angefangen, das Programm in mehrere Dateien zu zerlegen.
Die Struktur, wie das Ganze werden soll, kann man sicher schon erkennen.
Es gibt jetzt einen neuen Schalter, mit dem man die 8-Bit oder 4-Bit 
auswählen kann. Weitere Schalter, zb. für die Größe des RAMs, sind 
geplant. Die RAM-Disk ist z.Zt. gerade abgeschaltet. Wer 
(Verbesserungs-) Vorschläge hat, bitte (hier) melden. Ich suche z.B. 
noch nach einer Möglichkeit, die DRAM-Makros zu verunübeln.

Die neueste Version habe ich hier angehängt. Demnächst kommt sie auch 
ins SVN. Z.Zt. in branches/modules. Später, wenn alle damit glücklich 
sind, nach trunk.

Gute Nacht

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Horst S. schrieb:
> Wie schaut es mit der Hardware aus?

Die LP kommen am 27.08. Die restliche HW bestelle ich spätestens morgen, 
es fehlen noch Zuarbeiten.

von Horst S. (Gast)


Angehängte Dateien:

Lesenswert?

Moin Moin,

Frühstückspause!
und schnell die Tabelle gebaut. Gut das ich die in Excel verwalte.
Baust du das noch mit ein Leo? Danke.
Ich kümmere mich weiter um den Z80.

Danke.

von Peter S. (petersieg)


Lesenswert?

@Leo C + Horst S: SUPER!! Herzlichen Dank! Mit euch kommt das Projekt 
softwaretechnisch wirklich in 'ungeahnte Dimensionen' ;-)
(..and boldly go were no one has gone before..)

Prima!
(Habe gerade mal die 4-bit Version durch den Assembler gejagt;
heute nachmittag kann ich es erst den AVR flashen.. dann mehr..)

Peter

von h3aau (Gast)


Angehängte Dateien:

Lesenswert?

und hier noch mit vertauschten fetch und store......

von Peter S. (petersieg)


Lesenswert?

Evtl. ist das von Nutzen..?

Beitrag "Software UART mit FIFO"

Peter

von Peter S. (petersieg)


Lesenswert?

Ups.. das war es noch nicht ganz für die 4-bit Version:
1
Booten:
2
3
Initing mmc...
4
CP/M partition at: 401625, size: 8032KB.
5
CP/M partition at: 417690, size: 8032KB.
6
CP/M partition at: 433755, size: 8032KB.
7
Partinit done.
8
Ok, CPU is live!
9
10
        A =80 BC =0000 DE =0000 HL =0000 SP =08B0 PC =2000       31 00 10 
11
        A =80 BC =0000 DE =0000 HL =0000 SP =1000 PC =2003       CD 35 20 
12
13
--- dann das hier geändert ---
14
15
#define K 1024
16
#define M 1204*K
17
18
#define RAMSIZE 256*K*4  /* 1 chip 256Kx4 */
19
;#define  RAMSIZE   4*M*4 * 2  /* 2 chips 4Mx4  */
20
21
#define RAMDISKCNT 0    /* Number of RAM disks *
22
23
--- und das hier geändert ---
24
25
.equ INS_DEBUG   = 0
26
27
--- Fehler beim assemblieren ---
28
29
C:\cpmtools\avr2\8080int.asm(1278): info: macro 'mem_read_d' called here
30
C:\cpmtools\avr2\avrcpm.asm(56): info: 'C:\cpmtools\avr2\8080int.asm' included from here
31
C:\cpmtools\avr2\dram-4bit.asm(88): error: Relative branch out of reach
32
C:\cpmtools\avr2\8080int.asm(1280): info: macro 'mem_read_d' called here
33
C:\cpmtools\avr2\avrcpm.asm(56): info: 'C:\cpmtools\avr2\8080int.asm' included from here
34
C:\cpmtools\avr2\avrcpm.asm(66): No EEPROM data, deleting C:\cpmtools\avr2\avrcpm.eep
35
36
Assembly failed, 9 errors, 0 warnings

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Ups.. das war es noch nicht ganz für die 4-bit Version:
> [code]
> Booten:
>
> Initing mmc...
> CP/M partition at: 401625, size: 8032KB.
> CP/M partition at: 417690, size: 8032KB.
> CP/M partition at: 433755, size: 8032KB.
> Partinit done.
> Ok, CPU is live!
>
>         A =80 BC =0000 DE =0000 HL =0000 SP =08B0 PC =2000       31 00
> 10
>         A =80 BC =0000 DE =0000 HL =0000 SP =1000 PC =2003       CD 35
> 20

Also hat schon mal was funktioniert. Was war das denn?

> --- dann das hier geändert ---
>
> #define K 1024
> #define M 1204*K
>
> #define RAMSIZE 256*K*4  /* 1 chip 256Kx4 */
> ;#define  RAMSIZE   4*M*4 * 2  /* 2 chips 4Mx4  */

Das ist bisher nur so 'ne Idee. Wird noch nirgens ausgewertet.
Das ist auch ein Grund, warum die RAM-Disk abgeschaltet ist.
>
> #define RAMDISKCNT 0    /* Number of RAM disks *
>
> --- und das hier geändert ---
>
> .equ INS_DEBUG   = 0

Das hatte ich vor dem Veröffenltlichen vergessen.
Wenns aber mit dem Schalter lief, muß es ohne den auch laufen.

Es wäre schön gewesen, wenn Du etwas genauer aufgeschrieben hättest, was 
Du genau übersetzt hast.

> --- Fehler beim assemblieren ---
..
> C:\cpmtools\avr2\dram-4bit.asm(88): error: Relative branch out of reach
...

Die Fehler bekomme ich jetzt auch, wenn ich für Mega328P assembliere.
Mal sehen, ob ich die mit ein bischen Code-verschieben weg bekomme.

von Peter S. (petersieg)


Lesenswert?

Leo C. schrieb:
> Es wäre schön gewesen, wenn Du etwas genauer aufgeschrieben hättest, was
> Du genau übersetzt hast.

ok. Sorry.

Zuerst für ATmega88 übersetzt. kein Fehler dabei.
Dann aber die debug Meldungen..

Und da ich immer einen 168 / 88 im Wechsel nutze, dann debug 
ausgeschaltet
und für 168 übersetzt.. dabei die 9 Fehlermeldungen..
1
CPM on an AVR, v1.0
2
3
Testing RAM: fill...wait...reread...
4
5
Initing mmc...
6
CP/M partition at: 401625, size: 8032KB.
7
CP/M partition at: 417690, size: 8032KB.
8
CP/M partition at: 433755, size: 8032KB.
9
Partinit done.
10
Ok, CPU is live!
11
ipl
12
13
62k cp/m vers 2.2
14
15
A>dir
16
17
18
A: ASM      COM : DDT      COM : DUMP     COM : ED       COM
19
A: T        COM : TLOOP    COM : LOAD     COM : MBASIC   COM
20
A: 23       BAS : BAGELS   BAS : CHECKERS BAS : STARTREK BAS
21
A: TREKINST BAS : MASTRMND BAS : WEEKDAY  BAS : PIP      COM
22
A: STAT     COM : SUBMIT   COM : XSUB     COM : ZORK1    COM
23
A: ZORK1    DAT
24
A>t b
25
26
27
28
Timer running. Elapsed: 007.004s.
29
A>

Also ich korrigiere mich.. für 88 läuft das!! Nur im 168/328 Zweig
gibt es die angesprochenen Probleme..
Und von 7,589s auf 7,004s runter ;-) (30MHz)

Mea culpa.

Peter

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Peter Sieg schrieb:
> ok. Sorry.

Ich habe halt etwas länger suchen müssen. Alle "sinnvollen" 
Kombinationen liefen bei mir. Mega328 mit 4-Bit ist bei mir nicht 
sinnvoll, weil ich gerade keine Hardware dafür habe. ;-) Ob's durch den 
Assembler läuft, teste ich aber trotzdem gelegentlich.

So wie im Anhang, müßte es jetzt gehen. Mit dieser Lösung bin ich aber 
keinesfalls glücklich. Wer das ganze Paket mal in Form bringen will, 
soll sich keinen Zwang antun...

Auf längere Sicht wird man bei den größeren Prozessoren nicht mehr ohne 
absolute Sprünge auskommen. Die können ja nicht "hinten rum" springen, 
wie der 8 oder 48.


> Und von 7,589s auf 7,004s runter ;-) (30MHz)

More to come...  stay tuned.

Edit: sorry für die zip.zip Datei. Kann man so ein Versehen nicht wieder 
löschen?

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Evtl. ist das von Nutzen..?
>
> Beitrag "Software UART mit FIFO"

ELIZA würde wahrscheinlich antworten:
"CAN YOU ELABORATE ON THAT?"

von Leo C. (rapid)


Lesenswert?

Horst S. schrieb:
> und schnell die Tabelle gebaut. Gut das ich die in Excel verwalte.
> Baust du das noch mit ein Leo? Danke.

Ist drin.
Im SVN und in dem Paket, das ich gerade gepostet habe.
Könnte Dein Excel-Exporter auch die Leerräume genau so formatieren, wie 
ich es jetzt gemacht habe? Die Tab-Breite ist dabei auf 8 Eingestellt.

von Horst S. (h3aau)


Lesenswert?

Moin moin,

ich suche noch jemanden der die todo_tabs für die Z80-oopcodes füllt.
ist eine fleissarbeit, würde aber helfen.
hat jemand lust?

von Peter S. (petersieg)


Lesenswert?

@Horst S.: Hänge es mal hier rein und sage was ich machen muß.. dann 
kümmere ich mich morgen drum..

@Leo C.: 168 Zweig assembliert ohne Fehler und läuft auch. Prima!

Peter

von Leo C. (rapid)


Lesenswert?

Horst S. schrieb:

> ich suche noch jemanden der die todo_tabs für die Z80-oopcodes füllt.
> ist eine fleissarbeit, würde aber helfen.
> hat jemand lust?

Gut, daß Du das selber hier reinstellst, ich wollte Deine E-Mail schon 
umleiten. ;-)

Peter Sieg schrieb:
> @Horst S.: Hänge es mal hier rein und sage was ich machen muß.. dann
> kümmere ich mich morgen drum..

Das ist eine gute Frage. Mir ist das auch nicht klar. Das dürfte nämlich 
sehr stark vom Interpreter abhängen, der ja auch noch nicht da ist.

Die wenigen Befehle, die in der jetztigen Tabelle fehlen, wird Horst 
nicht meinen.

Für 0xDD und 0xFD braucht man imho gar keine Tabellen. Das sind 
Umschaltprefixe für Befehle mit H, L, HL, (HL) als Operanden.

0xED ist nur schwach besetzt. Da wird man vielleicht eine irgendwie 
komprimierte Tabelle machen.

CB ist sehr regelmäßig. Da kann man wahrscheinlich auch was machen, um 
nicht eine 3 oder 4 mal 256 Byte Tabelle anlegen zu müssen.

Andererseits, wenn man mit größerem Prozessor mindestens 8KByte 
zusätzlichen Tabellenplatz hat...


> @Leo C.: 168 Zweig assembliert ohne Fehler und läuft auch. Prima!

Danke fürs Testen.

von Horst S. (h3aau)


Angehängte Dateien:

Lesenswert?

Ist eigentlich recht einfach.
do_fetch_xxx      ; woher kommen die daten LD ??,A = do_fetch_A
do_store_xxx      ; wo sollen sie hin      LD A,?? = do_store_A

im zweifelsfall einfach do_???? eintragen.

do_op_xxx         ; hier steck die eigentliche finktion

im zweifelsfall bei do_op_xxxx einfach do_op_inv eintragen.

von Peter S. (petersieg)


Angehängte Dateien:

Lesenswert?

Hier mal einige Einträge im Tab: cb + ed.
Bitte prüfen, ob ich das so richtig verstanden+gemacht habe..?
Dann ziehe ich auch die anderen durch..

Peter

von Peter S. (petersieg)


Angehängte Dateien:

Lesenswert?

Hier noch der Rest, den ich soweit gefüllt habe..

Peter

von Horst S. (Gast)


Lesenswert?

Danke Peter,
Schaut schon ganz gut aus.
Ich werde zum Wochenende mal eine Rohversion für den Z80 fertig machen 
und an Leo senden.
Soll ich mal eine Beschreibung machen wie der Opcode-Interpreter nun 
arbeitet?

Gruus Horst

von Peter S. (petersieg)


Lesenswert?

Horst S. schrieb:

> Soll ich mal eine Beschreibung machen wie der Opcode-Interpreter nun
> arbeitet?

Aber immer und gerne!
Den Aufruf von Leo C. zur Dokuerstellung habe ich auch nicht vergessen.. 
nur
macht das erst Sinn, wenn das Projekt sich noch etwas mehr 'gesetzt' 
hat.. z.Z ist noch viel zu viel im Umbruch (zum Besseren = Gut so!)..

Peter

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Im Anhang sind meine neuesten Spielereien. Es sind zwei neue 
Interpretervarianten. Hier mal eine Tabelle mit den Unterschieden:
1
 Interpreter   |             [.cseg]            |avrdude|Laufzeit|"Speed"
2
               |   End      Code   Data   Used  |       |   [s]  | [KHz]   
3
---------------+----------+------+------+-------+-------+--------+--------
4
z80int           0x001900   5052   1178   6230     6400    1.924   1499
5
8080int          0x001b00   4848   1690   6538     6912    1.733   1644
6
8080int-t3       0x001b00   4936   1434   6370     6912    1.733   1644
7
8080int-t3-jmp   0x001d00   5240   1434   6674     7424    1.366   2111
-t3 heißt, dasß die Opcode-Tabelle von 4 auf 3 Byte je Eintrag reduziert 
wurde. Spart 256 Byte Tabellenplatz, kostet aber 88 Byte zusätzlichen 
Code für eine Sprungtabelle. Witzigerweise genau gleiche Laufzeit, wie 
die 4-Byte Variante. Eine Optimierung ist mir dann aber noch 
eingefallen. War eigentlich für die -t3-jmp Variante gedacht, dort aber 
nicht anwendbar.;)
1
8080int-t3       0x001b00   4934   1434   6368     6912    1.712   1684

-t3-jmp: Statt push/return in der Interpreterschleife wird zwischen den 
Phasen 'load', 'do_op' und 'store' direkt gesprungen. Kostet Platz, der 
aber noch vorhanden ist.

Meinungen würden mich interessieren.


Peter Sieg schrieb:
> Den Aufruf von Leo C. zur Dokuerstellung habe ich auch nicht vergessen..

Der (konstruktive) Vorschlag war von Jörg.
(Nach einer ironischen Bemerkung von mir zum Thema.)

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Hier noch der Rest, den ich soweit gefüllt habe..

@Peter, @Horst:

> do_op_ADC
> do_op_SBC

Nach der bisherigen Nomenklatur müßten diese wohl do_op_ADCHL und 
do_op_SBCHL heißen.

Aber in den DD/FD-Tabellen gibts ja auch noch IX und IY als 
Zielregister.

Vorschlag:

op_ADDHL  --> op_ADD16
op_ADC    --> op_ADC16
op_SBC    --> op_SBC16

Allgemeiner Vorschlag:
In den (Excel-) Tabellen grundsätzlich
1
do_fetch_xxx  --> fetch_xxx
2
do_op_xxx     --> op_xxx
3
do_store_xxx  --> store_xxx

Das "do_" wird (nur) bei Bedarf über die Makros wieder zugefügt.

von Horst S. (Gast)


Lesenswert?

Moin moin,
Leo. schrieb:

< Meinungen würden mich interessieren.

Guter Trick das vom Stack in Register zu verlegen.
Damit bin ich bei meiner Frage die ich dir eigentlich zusammen mit der 
Z80-Rohversion zusenden wollte.
Wie ist den nun die Registeraufteilung für den Z80?
Eigentlich wollte ich die neu festlegen und dort einiges aufräumen.
Die bestehende Áufteilung ist für den 8080 ja ok.
Kann man eigentlich noch Code in den DRAM-Routinen sparen?
Hier wird doch auch reichlich Zeit verbraten.

Gruss Horst

von Leo C. (rapid)


Lesenswert?

Horst S. schrieb:
> Wie ist den nun die Registeraufteilung für den Z80?
> Eigentlich wollte ich die neu festlegen und dort einiges aufräumen.

Sicher möglich. Als endgültig festgemauert sehe ich da noch nichts.
Die 2 Register, die ich für die serielle Schnittstelle reserviert habe, 
kann man wahrscheinlich freischaufeln. Allerdings muß der RX-Code 
unbedingt noch überarbeitet und getestet werden.

> Kann man eigentlich noch Code in den DRAM-Routinen sparen?
> Hier wird doch auch reichlich Zeit verbraten.

Möchtest Du Code oder Zeit einsparen?

Ich weiß nicht, ob Du Dir die 8-Bit Version schon angeschaut hast, aber 
dort habe ich massig Code gegen Zeit eingetauscht (Macros statt 
Unterprogramme).
An unkritischen Stellen kann man sicher wieder Unterprogrammaufrufe 
einbauen, und so etwas Flash einsparen, wenns eng wird.

Ansonsten ist die DRAM-Ecke ausgereizt. Imho. Jedenfalls mit den beiden 
Hardwarevarianten, die wir jetzt haben.

Ach ja, in den DRAM-Routinen ist zur Zeit über die config-Datei ein (1) 
"wait state" eingestellt. Bei schnellen RAMS kan man den weglassen. Das 
sieht dann so aus:
1
               |             [.cseg]            |avrdude|Laufzeit|"Speed"
2
               |   End      Code   Data   Used  |       |   [s]  | [KHz]   
3
---------------+----------+------+------+-------+-------+--------+--------
4
-jmp             0x001d00   5240   1434   6674     7424    1.366   2111
5
 "  (jp to main) 0x001b00   5000   1434   6434     6912    1.449   1990
6
 " " (0 wait st) 0x001b00   4954   1434   6388     6912    1.415   2038

Wegen der Makros spart das 46 Byte Flash. Geschwindigkeit brings aber 
gar nicht so viel. Bei der Interpretervariante, die ich gerade teste, 
hebt es aber den Speed-Faktor wieder über die magische 2 Mhz Marke. ;-)

von Horst S. (h3aau)


Lesenswert?

Moin moin,

Leo C. schreib:
>Möchtest Du Code oder Zeit einsparen?

Zeit, das ist schliesslich Sinn und Zweg der Übung. Wie bekomme ich eine 
möglichst schnelle Simulation der Ziel-CPU hin. Ob die RAM-Floppy 1 oder 
2 Sekunden braucht ist mir da völlig egal.
Wenn wir dabei bleiben ATMega8 = 8080 und ATMega168 = Z80 hast du noch 
reichlich Flash zum spielen. :-)

Wobei ich ja immer noch mit einem SRAM liebäugle.(Joe, wie wäre es?)

Wieviel Codes braust du eigentlich für einen normalen DRAM read/write?
Dann könnte man mal abschätzen ob das noch Tempo bringt.

Gruss Horst

von Peter S. (petersieg)


Lesenswert?

Leo C. schrieb:
> -t3-jmp: Statt push/return in der Interpreterschleife wird zwischen den
> Phasen 'load', 'do_op' und 'store' direkt gesprungen. Kostet Platz, der
> aber noch vorhanden ist.
>
> Meinungen würden mich interessieren.

My 2 cents:
Dank Joe G. sind ja die 4-bit HW Version 1 mit 168 AVR's ausgeliefert..
Wir haben also max. 16kb zur Verfügung.. das sieht bei z.Z ca. 6,5kb 
also
noch nach 'reichlich' Luft aus.. (auch für den z80 Interpreter)..
Und ansonsten dient der 328 als 'letzte' Reserve..

Aber genauso wichtig wie speed ist die Übersichtlichkeit und 
Verständlichkeit des Code!

Daraus folgt:
Speed vor kleinerem Code, solange Code übersichtlich und verständlich 
bleibt.

Peter

von Leo C. (rapid)


Lesenswert?

Horst S. schrieb:
> Wobei ich ja immer noch mit einem SRAM liebäugle.(Joe, wie wäre es?)

Zum 100000ten mal: Die Kombination SRAM und ATmega8 (48..328) macht 
überhaupt keinen Sinn und ist ein völlig anderes Projekt. Lass Dich 
nicht davon abhalten und mach einen neuen Thread auf.

Deine restlichen Fragen sind Durch einen einfach Blick in den Sourcecode 
zu beantworten.

von Peter S. (petersieg)


Lesenswert?

Und läuft (88 - 30MHz - 4-bit):
1
CPM on an AVR, v1.0
2
3
Testing RAM: fill...wait...reread...
4
5
Initing mmc...
6
CP/M partition at: 401625, size: 8032KB.
7
CP/M partition at: 417690, size: 8032KB.
8
CP/M partition at: 433755, size: 8032KB.
9
Partinit done.
10
Ok, CPU is live!
11
ipl
12
13
62k cp/m vers 2.2
14
15
A>dir
16
17
18
A: ASM      COM : DDT      COM : DUMP     COM : ED       COM
19
A: T        COM : TLOOP    COM : LOAD     COM : MBASIC   COM
20
A: 23       BAS : BAGELS   BAS : CHECKERS BAS : STARTREK BAS
21
A: TREKINST BAS : MASTRMND BAS : WEEKDAY  BAS : PIP      COM
22
A: STAT     COM : SUBMIT   COM : XSUB     COM : ZORK1    COM
23
A: ZORK1    DAT
24
A>t b
25
26
27
28
Timer running. Elapsed: 006.212s.
29
A>

Down to 6,212s ;-)

BTW: Meldet sich immer noch mit Version 1.0..? Sollte man da nicht mal
den Zähler etwas höherstellen.. so 1.x und wenn z80 drin ist 2.x..

Was mögliche, künftige HW Redesigns angeht.. wurde schon mehrfach 
angesprochen.. Jörg Wolfram hatte Überlegungen dazu.. aber mangels
Interesse (von möglichen Usern) diese nicht weiter verfolgt..
Ich schlage vor, insbesondere, da ja gerade die 8-bit Version erst
noch gebaut wird (von der 'Masse') ersteinmal hier an der vorhandenen
Basis weiter zu arbeiten.. dann mal sehen, was die Zukunft zu bringt..
Wichtiger als der Ram ist für mich ggf. I2C Hardware und deren 
Einbindung
ins CP/M..

Peter

von Leo C. (rapid)


Lesenswert?

Ich habe mal wieder was neues ausprobiert. D.h., eigentlich habe ich nur 
schon dagewesenes neu zusammengewürfelt.

                 |   End      Code   Data   Used  |     |  [s]  | [KHz]
-----------------+----------+------+------+-------+-----+-------+-------
letzte schnellste 0x001d00   5240   1434    6674   7424   1.366   2111
neu               0x001f00   6492    666    7158   7936   1.206   2391

Die Tabellen sind jetzt in Form von r/jmp/call/s von Data nach Code 
gerutscht. Leider belegen sie so aber nochmal deutlich mehr Platz.



Peter Sieg schrieb:
> Und ansonsten dient der 328 als 'letzte' Reserve..

Hier wollte ich jetzt hinschreiben, daß das hier das ideale Projekt für 
den ATmega8 ist, weil der deutlich billiger ist, als seine Nachfolger. 
Das scheint sich aber gerade zu ändern. Der 8 ist im Moment weder bei 
CSD noch bei Reichelt lieferbar. Und CSD hat einen neuen Preis, der 
deutlich über dem 88 liegt.

> Aber genauso wichtig wie speed ist die Übersichtlichkeit und
> Verständlichkeit des Code!

An der Übersichtlichkeit hat sich imho bisher nichts geändert, da das 
Interpreterprinzip ja immer noch das gleiche ist. Und wenns 
unverständlich ist, liegst vielleicht nur an der Doku. ;-)

> BTW: Meldet sich immer noch mit Version 1.0..? Sollte man da nicht mal
> den Zähler etwas höherstellen.. so 1.x und wenn z80 drin ist 2.x..

Bei mir gibts keine Versionen, nur Revisionen der einzelnen Dateien. ;)
Ich will schon seit längerem eine Funktion einbauen, die beim booten die 
Revisionen der wichtigsten Teile anzeigt.

Vielleicht möchte ja jemand den "Releasemanager" spielen, und 
ausgesuchte Revisionen als Version x.x.x taggen.

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> A>t b
>
>
>
> Timer running. Elapsed: 006.212s.
> A>
>
> Down to 6,212s ;-)

Kann ich ja auch mal:
1
A>t b
2
3
Timer running. Elapsed: 003.988s.
4
A>

von Peter S. (petersieg)


Lesenswert?

Leo C. schrieb:
> Timer running. Elapsed: 003.988s.
> A>

Ja, aber das ist 8-bit Dram ;-)
Warte mal bis ich auch meine 8-bit Version aufgebaut habe und den
direkt mitbestellten 40MHz Quarzosi draufgesteckt habe ;-) ;-)

Peter

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Hallo,

das avrcpm ist inzwischen ja wirklich schnell genug, um Ladder zu 
spielen. Vor ca. 25 Jahren war ich danach regelrecht süchtig. :-)
Die Configuration über LADCONF.COM funktioniert bei meinem Terminal 
(minicom, VT-100/ANSI) nicht richtig. Deshalb habe ichs manuell 
angepaßt, und in der Initialisierung auch den störenden Cursor 
abgeschaltet. Mit dem "Programm" CURON.COM kann man den Cursor nach dem 
Spielen wieder einschalten. Ich habe mal alles zusammen gepackt und 
hier angehängt.

Ansonsten habe ich aus der 4-bit DRAM-Leseroutine nochmal 4 Taktzyklen 
rausgequetscht. Aus der Schreibroutine leider nur einen. Das geht, weil 
durch die Zusammenlegung mit der 8-Bit-Variante jetzt auch hier das 
_255-Register vorhanden ist. Leider habe ich nicht ausprobiert, wie viel 
das gebracht hat.

Dafür habe ich aber mal wieder eine Tabelle von der 8-bit Version:
[code]
         --PUSH/POP--     --CALL/RET--     -----DEC-----    Flash
          [s]   [MHz]      [s]   [MHz]      [s]    [MHz]    [byte]
------------------------------------------------------------------
z80int   1.924  1.499     1.971  1.792     6.291   1.467     2426
8080int  1.732  1.665     1.831  1.861     5.911   1.561     2734
 -t3     1.712  1.684     1.811  1.882     5.842   1.580     2564
 -t3-jmp 1.367  2.109     1.466  2.325     4.707   1.961     2762
 -jmp    1.206  2.391     1.281  2.660     3.988   2.314     3272
[code]

Unter DEC ist die Schleife von Peter. Ich habe dafür auch mal die 
Taktzyklen gezählt, damit man die auch mal in ein Z80-Äquivalent 
umrechnen kann. Unter MHz steht also jeweils die Frequenz, mit der ein 
echter Z80 laufen müßte, um das gleiche Ergebnis wie mein 20MHz AVR zu 
erzielen.

Unter Flash steht nur der Speicherverbrauch des Interpreters. Das 
restliche Programm ist bei allen Zeilen gleich.

von Peter S. (petersieg)


Lesenswert?

Leo C. schrieb:
> Unter DEC ist die Schleife von Peter. Ich habe dafür auch mal die
> Taktzyklen gezählt, damit man die auch mal in ein Z80-Äquivalent
> umrechnen kann.

Jup. Wie viele Zyklen hast du denn gezählt?

Na, Ladder werde ich doch dann mal probieren.. ;-) Danke!

Gruß Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Jup. Wie viele Zyklen hast du denn gezählt?
1
023E 3E 01      MVI  A,01
2
0240 D3 40      OUT  40
3
0242 0E 0A      MVI  C,0A   ;7                              7\
4
0244 06 00      MVI  B,00   ;7                   7\           |
5
0246 3E 00      MVI  A,00   ;7         7\          |          |
6
0248 3D         DCR  A      ;4  \        |         |          |
7
0249 C2 0248    JNZ  0248   ;10 / 14*256 |3605*256 |922901*10 |
8
024C 05         DCR  B      ;4         4 |         |          |
9
024D C2 0246    JNZ  0246   ;10       10/          |          |
10
0250 0D         DCR  C      ;4                   4 |          |
11
0251 C2 0244    JNZ  0244   ;10                 10/           |
12
0254 3E 0F      MVI  A,0F   ;7                              7 |
13
0256 D3 40      OUT  40     ;11                            11/
14
0258 C9         RET         ;                 Gesamtzahl Takte: 9229035

Ich hoffe, daß ich mich nicht verzählt habe.

von Peter S. (petersieg)


Angehängte Dateien:

Lesenswert?

Soo.. mußte mir ersteinmal ein vernünftiges VT100 Terminalprogramm für 
Vista
laden (TeraTerm) ;-)

Prima! Macht Spaß mit Ladder..

Peter

von Peter S. (petersieg)


Lesenswert?

Hmm.. gerade mal wieder versucht für 168 zu übersetzen (t3-jmp):
1
C:\cpmtools\avr3\avrcpm.asm(59): Including file 'C:\cpmtools\avr3\remainders.asm'
2
C:\cpmtools\avr3\avrcpm.asm(63): Including file 'C:\cpmtools\avr3\8080int-t3-jmp.asm'
3
C:\cpmtools\avr3\dram-4bit.inc(88): error: Relative branch out of reach
4
C:\cpmtools\avr3\8080int-t3-jmp.asm(1374): info: macro 'mem_read_d' called here
5
C:\cpmtools\avr3\avrcpm.asm(63): info: 'C:\cpmtools\avr3\8080int-t3-jmp.asm' included from here
6
C:\cpmtools\avr3\dram-4bit.inc(88): error: Relative branch out of reach
7
C:\cpmtools\avr3\8080int-t3-jmp.asm(1376): info: macro 'mem_read_d' called here
8
C:\cpmtools\avr3\avrcpm.asm(63): info: 'C:\cpmtools\avr3\8080int-t3-jmp.asm' included from here
9
C:\cpmtools\avr3\avrcpm.asm(73): No EEPROM data, deleting C:\cpmtools\avr3\avrcpm.eep
10
Assembly failed, 2 errors, 0 warnings

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> C:\cpmtools\avr3\dram-4bit.inc(88): error: Relative branch out of reach

Hallo Peter,
Du könntest mal dieses hier versuchen:
http://cloudbase.homelinux.net/viewvc/avr-cpm/branches/modules/avrcpm/

Dort habe ich u.a. mal wieder alles so hingeschoben, daß alle Funktionen 
mit relativen Sprüngen und Calls erreichbar sind. Bei mir kann ich 
fehlerfrei übersetzen. Allerdings habe ich die 4-bit Version nicht 
getestet.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Gestern Abend habe ich mal einen Wordstar 3.0 an das VT-100 Terminal 
angepaßt. Da ich gerade ein CP/M Diskimage parat hatte, habe ich es mal 
mit angehängt. In der Zip-Datei sind nur die Dateien. WS.COM ist der 
angepasste Wordstar, und WSU.COM das Original.

von Peter S. (petersieg)


Lesenswert?

Jup:
1
CPM on an AVR, v1.0
2
Testing RAM: fill...wait...reread...
3
Initing mmc...
4
CP/M partition at: 401625, size: 8032KB.
5
CP/M partition at: 417690, size: 8032KB.
6
CP/M partition at: 433755, size: 8032KB.
7
Partinit done.
8
Ok, CPU is live!
9
ipl
10
11
62k cp/m vers 2.2
12
13
A>t b
14
15
Timer running. Elapsed: 005.182s.
16
A>

und schon wieder schneller geworden.. ;-)

Danke, Peter

von Horst S. (h3aau)


Lesenswert?

Moin moin,

mal ein kleiner Zwischenbericht von der Fleißarbeit.

Alle Opcodes des Z80 aufgelöst, es sind etwas über 700.
Splitten der Tabellen fertig.
Paging der IX,IY Opcodes fertig.
CB Opcodes gehen alle.
ED Opcodes am debuggen.

Der Z80 hat parallel zu den 8080 Opcodes noch einige weitere.
Diese werden mittels Prefix , also voran gestelltem Opcode, eingeleitet.
Der Prefix CB leitet z.B. BIT Opcodes ein.
Der Prefix ED leitet z.B. IN/OUT und Block-Opcodes ein.
Diese können wie die 8080 Opcodes über Tabellen abgearbeitet werden.

Der Prefix DD leitet alle IX Opcodes ein.
Der Prefix FD leitet alle IY Opcodes ein.
In diesen Fällen werden die Opcodes die das HL Register verwenden so 
umgebogen das nun das jeweilige I-Register verwendet wird.
In diesen Fällen ist es einfacher die Routinen für FETCH und STORE zu 
ändern, den nur sie sind davon betroffen.
Alle zusammen passen in eine 256 Byte Page. Das Highbyte dieser Page 
wird in main schon getrennt behandelt. Ich muss die geänderten Routinen 
also nur auf getrennten Pages ablegen und kann dann bei den 8080 Opcodes 
die gewünschte FETCH/STORE Page verwenden.

Ein Nachteil dieses Verfahrens ist das in diesen vier Fällen main 
doppelt durchlaufen wird.
Der Vorteil ist das die Standart-Opcodes ohne zusätzlichen Zeitverlust 
abgearbeitet werden.

Gruß Horst

von Peter Z. (flexopete)


Lesenswert?

Moin,

habe mal angefangen nach der Artikelbeschreibung ein diskimage
zu erstellen. Benutzt habe ich cpmtools für Windows. Die avrcpm
habe ich mit Notepad erstellt.
mkfs.cpm kommt mit einer Fehlermeldung:
unknown format avrcpm.

Was mache ich falsch?

Gruß
Peter

von Leo C. (rapid)


Lesenswert?

Peter Zabel schrieb:
> zu erstellen. Benutzt habe ich cpmtools für Windows. Die avrcpm
> habe ich mit Notepad erstellt.

Welche avrcpm meinst Du denn?
Die cpmtools sollten irgendwo eine Datei mit Diskdefinitionen haben.
Bei mir heißt diese Datei "diskdefs". Diese Datei muß man um einen 
"avrcpm"-Eintrag erweitern:
1
diskdef avrcpm
2
  seclen 128
3
  tracks 77
4
  sectrk 26
5
  blocksize 1024
6
  maxdir 64
7
  skew 1
8
  boottrk 2
9
  os p2dos
10
end


> mkfs.cpm kommt mit einer Fehlermeldung:
> unknown format avrcpm.
> Was mache ich falsch?

Entweder findet Dein mkfs.cpm die Datei "diskdefs" nicht, oder in der 
Datei fehlt der Eintrag "avrcpm". Wie die Datei unter Windows 
normalerweise heißt, und wo sie dort liegen muß, kann ich Dir nicht 
sagen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Unter Windows heißt sie auch diskdefs und sollte im gleichen Verzeichnis 
wie mkfs.cpm.exe liegen.
Wenn dd unter Windows später Probleme macht, dd mit Adminrechten 
ausführen.
Joe

von Peter Z. (flexopete)


Lesenswert?

Die diskdefs liegt im gleichen Verzeichnis wie mkfs.cpm.exe
und ist um den Eintrag avrcpm erweitert. Trotzdem gibt
es die Fehlermeldung "unknown format avrcpm". Was kann es noch
sein?

Peter

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Versuche es mal mit dieser Datei.
Joe

von Peter Z. (flexopete)


Lesenswert?

OK, damit geht es, danke. In Deiner diskdefs sind nur 2 Formate.
Ich werde die originale mal abmagern, um mal zu sehen, woran
es liegt.
Ich habe noch eine Frage zu dd. Als output file steht dort
< sd card identifier >. Ist das das Linux device, wie eine
LiveCD die SD card finden würde, z.B. /dev/sde ?

Peter
PS: CSD hat Betriebsferien bis zum 04.09.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Mit dd --list kannst du dir alle deine Speichermedien anzeigen lassen. 
Dann kopierst du einfach den entsprechenden Eintrag raus. Bei mir sieht 
es z.B. so aus: of=\\?\Device\Harddisk5\Partition0
Bei Linux ist es einfacher, da ist es so wie du es schon beschrieben 
hast.
Joe

von Peter S. (petersieg)


Lesenswert?

Peter Zabel schrieb:
> Die diskdefs liegt im gleichen Verzeichnis wie mkfs.cpm.exe
> und ist um den Eintrag avrcpm erweitert. Trotzdem gibt
> es die Fehlermeldung "unknown format avrcpm". Was kann es noch
> sein?
>
> Peter

Jup.. da habe ich auch etwas gesucht ;-) Die Antwort ist so simpel wie
das Program doof ist.. Notepad fügt ein CR ans Ende der Zeile.. das 
können
aber die cpmtools unter Windows gar nicht ab ;-)

Also:
1. Die cpmtools MÜSSEN unter X:\cpmtools liegen
2. Die diskdefs muß mit Unix Konvention als Zeilenende (nur LF) sein

Dann geht es.. garantiert..

Peter

von Peter Z. (flexopete)


Lesenswert?

Moin,
habe jetzt das diskimage auf die SD gebracht. Das dd aus den
UNIX-Tools für Windows kennt kein --list. Das dd 0.6beta3
von John Newbegin kennt zwar ein --list, bringt aber beim
Schreiben auf die SD immer eine Fehlermeldung:
Error reading file: 87 Falscher Parameter
19+1 records in
19+1 records out

unter Ubuntu war dann alles kein Problem

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ich kann nur wiederholen; Es wird mal Zeit für eine ordentliche 
Dokumentation. Macht Mühe, aber erleichtert ungemein den Nachbau und 
verhindert sinnloses doppelt, dreifach,..., probieren. Mein Vorschlag: 
Einer nimmt sich dem Thema an, "Wie bringe ich ein CP/M System auf die 
SD-Card - eine Anleitung Step by Step". Da unter Windows alles recht 
bes**eiden geht, gleich eine Anleitung für Linux (Live CD).
Joe

von Peter S. (petersieg)


Angehängte Dateien:

Lesenswert?

Ich habe den Artikel mal mit entsprechenden Informationen angereichert..
In die grundsätzliche Bedienung eines Partitionierungstools muß man sich
aber selber und unabhängig einarbeiten!!

Ich hänge hier auch mal ein BDS-C Sourcearchive an, in dem Spiele und 
unter
anderem auch Pacman enthalten ist.. ich habe z.Z wenig Zeit.. evtl. hat 
ja mal jemand Zeit und Lust, das auch nach VT100 und unser System 
umzusetzen..
sollten nur 3-4 Routinen sein (ClrSCR, PosXY,..)..

Peter

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Peter Sieg schrieb:
> sollten nur 3-4 Routinen sein (ClrSCR, PosXY,..)..

Ich habe mal reingeschaut, weil ich auch dachte, daß das ganz schnell 
gemacht wäre. Leider gings nicht ganz so schnell, weil das Programm 
direkt auf den UART-Port zugreift. Das wurde bisher von unserem System 
noch nicht unterstützt. Wahrscheinlich hätte man den Pacman auch an die 
BIOS Console-I/O anpassen können, aber ich habe es jetzt mal anders 
herum gemacht.

Die Cursor-Steuerung habe ich mal auf die Tasten 2,4,6,8 (Ziffernblock) 
gelegt.

Damit der Pacman aus dem Anhang läuft, muß man den ATmega updaten:
http://cloudbase.homelinux.net/viewvc/avr-cpm/branches/modules/avrcpm/avr/

von Peter S. (petersieg)


Lesenswert?

@Leo C. Super! Probiere ich am WE direkt mal aus..

Danke! Peter

von Peter S. (petersieg)


Angehängte Dateien:

Lesenswert?

Jup. Pacman in aktion ;-)

Peter

von Peter Z. (flexopete)


Lesenswert?

Moin,

welchen Assembler ist sinnvoll, um die AVR asm Dateien
unter Windows zu übersetzen?

Gruß
Peter

von Ronny M. (hobby-coder)


Lesenswert?

hallo ihr,

ist evtl. noch ein bausatz zu haben? wenn ja, was kostet er?

von Leo C. (rapid)


Lesenswert?

Peter Zabel schrieb:
> welchen Assembler ist sinnvoll, um die AVR asm Dateien
> unter Windows zu übersetzen?

avrasm2.exe aus dem AVR Studio.
Gibts denn noch andere?

von h3aau (Gast)


Lesenswert?


von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ronny Minow schrieb:
> hallo ihr,
>
> ist evtl. noch ein bausatz zu haben? wenn ja, was kostet er?

Sorry zu spät, alle Bausätze sind schon vergeben.
Joe

von Peter S. (petersieg)


Lesenswert?

Ronny Minow schrieb:
> ist evtl. noch ein bausatz zu haben? wenn ja, was kostet er?

Falls kein Bausatz mehr 'übrig' sein sollte.. die 4-bit Version kann man 
sicher auch einfach auf Lochraster aufbauen.. ansonsten kann ich dir 
4-bit
als fertig aufgebaute Platine (3,3V Versorgung - ohne FT232) anbieten.
Bei Interesse E-Mail: peter (dot) sieg2 (at) gmx (dot) de

Peter

von Ronny M. (hobby-coder)


Lesenswert?

Peter Sieg schrieb:
> Ronny Minow schrieb:
>> ist evtl. noch ein bausatz zu haben? wenn ja, was kostet er?
>
> Falls kein Bausatz mehr 'übrig' sein sollte.. die 4-bit Version kann man
> sicher auch einfach auf Lochraster aufbauen.. ansonsten kann ich dir
> 4-bit
> als fertig aufgebaute Platine (3,3V Versorgung - ohne FT232) anbieten.
> Bei Interesse E-Mail: peter (dot) sieg2 (at) gmx (dot) de
>
> Peter

wo finde ich den aktuellen schaltplan? ich habe hier 2 atmega32 frei. 
der source dürfte wohl leicht anpassbar sein. hat das evtl. schon jemand 
gemacht?

von Peter Sieg (Gast)


Lesenswert?

Im Artikel:
http://www.mikrocontroller.net/articles/AVR_CP/M

findest du Schaltplan+Eagle Dateien für die 4-bit Version.

hier auch als Skizze:
http://avr.cwsurf.de/

Die 8-bit Version findest du sicher etwas weiter oben in diesem Thread..
den du ruhig auch mal durchlesen solltest.. ;-)

Peter

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ronny Minow schrieb:
> wo finde ich den aktuellen schaltplan?

Hier ist der aktuelle Schaltplan der 8 Bit Version.

von Ronny M. (hobby-coder)


Lesenswert?

hallo ihr,

ein großes danke an euch :) ich werde mir mal die 4bit version auf 
lochraster aufbauen.

von Peter S. (petersieg)


Lesenswert?

Ronny Minow schrieb:
> ich werde mir mal die 4bit version auf
> lochraster aufbauen.

Na dann mal schon ein herzliches Willkommen im Club ;-)

Peter

von Peter Z. (flexopete)


Lesenswert?

Moin,
habe gerade beide Platinen aufgebaut. Danke an Joe für seine
Arbeit mit der Platine, den Bauteilen und dem Versand.
Allerdings habe ich noch nicht rausfinden können, wie
die Versorgung ohne USB-Power, sprich Versorgung von der
VGA-Platine geht. 5V für den Controller, 3,3V für die SD.

Gruss
Peter

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo,
na zusammen hab ich die Platinen auch schon... aber leider nicht die 
Unterlagen. Welche Software passt nun auf den 168er?
Gruß
Hans- Werner

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich hatte drei Tage DSL Ausfall :-((
Zu euren Fragen:

@Peter1
Die RAM’s lassen sich wunderbar mit einer Heißluftpistole ablöten.

@Peter2
Variante 1 – Stromversorgung über VGA
1. Auf der VGA Platine natürlich den Gleichrichter und die beiden Regler 
(5V und 3.3V) bestücken.
2. Am Power Switch Pin1, Pin2 und Pin3 verbinden.
3. Am JP13 (VGA-Seite) sollten nun an Pin1 GND, an Pin2 5V, und an Pin3 
3.3V anliegen.
4. Auf der AVR-CP/M Platine JP7, Pin2 und Pin3 verbinden (3.3V von VGA)
Nun läuft der Controller auf der AVR CP/M und VGA Platine mit 5V und die 
SD mit 3.3V

Variante 2a – Stromversorgung über USB (5V für AVR 3.3V für SD)
1.  Auf der AVR-CP/M Platine JP1 Pin2 und Pin3 verbinden (5V über USB)
2.  Auf der VGA Platine JP11 Pin2  und Pin3 verbinden (3.3V über 
externen Regler auf VGA)
3.  Auf der ACR-CP/M Platine JP7 Pin2 und Pin3 verbinden (3.3V auf SD).

Variante 2b – Stromversorgung über USB (3.3V für CP/M AVR  und SD)
1. Auf der AVR-CP/M Platine JP1 Pin1 und Pin2 verbinden (3.3V über 
FT232)

@Hans W.
Anbei die Schaltungsunterlagen als PDF und als EAGLE.
Die Software liegt bei Leo C. auf SVN. Ich selber habe die 8 Bit Version 
noch nicht für den ATMEGA 168 übersetzt, könnten Peter oder Leo sicher 
tun. Der VGA Software wende ich mich nach der Bestückung zu.

Kritik, Fehler in Schaltung und/oder Layout nehme ich natürlich auch 
entgegen.
Joe

von Peter S. (petersieg)


Lesenswert?

Joe G. schrieb:
> Die RAM’s lassen sich wunderbar mit einer Heißluftpistole ablöten.

Jup.. schön wenn man eine hätte.. :-(

Peter

von h3aau (Gast)


Lesenswert?

Moin moin,

Das ist noch ein fehler im Layout.
Der Pin14 des FT232RL muus nicht mit 10K an GND sondern an VCC.
In der Defaultversion ist das die PWREN# Funktion.
Ansonsten ist es an den DRAM arg eng zu löten. Die Durchkontaktiereungen 
sind da etwas im weg. Sonst sind Platinen schon klasse für den Preis.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

h3aau schrieb:
> Das ist noch ein fehler im Layout.
> Der Pin14 des FT232RL muus nicht mit 10K an GND sondern an VCC.

In der Tat! Ich ändere es in Schaltung und Layout. Für die jetzige 
Funktion sollte es aber keine Auswirkungen haben, da die 
Powerumschaltung per FET nicht genutzt wird.

von Peter Z. (flexopete)


Lesenswert?

Moin,

ich habe jetzt eine Verbindung zum Terminal, allerdings
bekomme ich folgende Meldung:

CPM on an AVR, v1.0
0F<00@FFFFM: fill...wait...reread...00<01@0100
Initing mmc...
CP/M partition at: 061, size: 993537KB.
Partinit done.
Ok, CPU is live!

  H  C  A =00 BC =0000 DE =0000 HL =0000 SP =0000 PC =2000       30 01 
12 Invali
d opcode!

DRAM Problem?

Gruss
Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Der nächste Schritt wäre ipl.bin ab Adresse 2000 zu starten. Dazu sollte 
der Code vorher korrekt von der MMC geladen sein (mal MMC Debug zur 
Kontrolle einschalten). Der Opcode 30 01 12 sieht nicht wie der Start 
von ipl.bin aus.
Joe

von Peter Z. (flexopete)


Angehängte Dateien:

Lesenswert?

moin Joe,

die cpm.bin ist aus dem Artikel.
Ich werde mal MMC Debug einschalten.
Zum Speichertest: Habe mal die Terminalausgabe mit
Hterm in hex mitgeschnitten. Bit0 ist 0, wenn es 1 sein
soll und 0 wenn es 1 sein soll. Die DRAMs sind
GM71C17400AJ6. Bei 20MHz gleiches Problem. Kann
es ein Timingproblem sein?

Gruss
Peter

von Peter Z. (flexopete)


Lesenswert?

Moin,

so sieht die Ausgabe von MMC-Debug aus:

Initing mmc...
mmcInit
mmcCMD: 00 00000000 .. 95 CMDRes: 01
mmcCMD: 08 000001AA .. 87 CMDRes: 05
mmcCMD: 37 00000000 .. 01 CMDRes: 01 mmcCMD: 29 00000000 .. 01 CMDRes: 
01
mmcCMD: 37 00000000 .. 01 CMDRes: 01 mmcCMD: 29 00000000 .. 01 CMDRes: 
00
mmcCMD: 10 00000200 .. 01 CMDRes: 00
 CT: 02 InitRes: 00
mmcCMD: 11 00000000 .. 01 CMDRes: 00
CP/M partition at: 061, size: 993537KB.
Partinit done.
mmcCMD: 11 00007A00 .. 01 CMDRes: 00
Ok, CPU is live!

        A =00 BC =0000 DE =0000 HL =0000 SP =0000 PC =2000       30 01 
12 Invalid opcode!

Gruss
Peter

von Leo C. (rapid)


Lesenswert?

Peter Zabel schrieb:
> so sieht die Ausgabe von MMC-Debug aus:

MMC ist hier wahrscheinlich uninteressant.

>         A =00 BC =0000 DE =0000 HL =0000 SP =0000 PC =2000       30 01
> 12 Invalid opcode!

Nach laden des ipl sollte ab 2000 die Bytefolge 31 00 10 stehen (alles 
Hex).
Bei Dir steht 30 01 und evtl. 12. Und 30 ist für den 8080 ein ungültiger 
Opcode. Das passt gut zu Deinen Speichertestergebnissen. Wie Deine 
Hardware es allerdings fertig bringt, ein Bit zwischen Lesen und 
Schreiben zu invertieren, ist mir ein Rätsel. ;-)

von Peter Z. (flexopete)


Angehängte Dateien:

Lesenswert?

Moin,

habe die Ausgabe vom Speichertest weiter untersucht.
Es ist nicht nur D0 betroffen, sondern auch D1, D2, D3.
Abhängig von der Adresse. Hat jemand ein funktionierendes
168er hex-file, 20 oder 25MHz zum testen für mich?
Meine fuses sind lf=0xE0, hf=0xDC.

Gruss
Peter

von Frank Z. (fzoll)


Lesenswert?

Halloe.

Ich schlage mich leider immer noch mit der Partinionierung meiner 
SD-Card und dem aufbringen der Images rum. Die Idee, das ganze auf 
eigene Partinionen zu packen klingt zwar recht nett, macht aber einen 
riesenumstand für alle Windows-User.

Ich habe letzte nach extra einen "alten" PC platt gemacht um Linux drauf 
zu spielen. Nun kämpfe ich mit der Hardwareerkennung von Linux. Seitdem 
ich die SD-Card unter Linux neu partinioniert habe, wird sie beim 
einstecken nicht mehr gefunden. Ich komme praktisch nicht mehr drauf. 
Defekt ist die Karte wohl noch nicht, da Windows die eine FAT16 
Partition die ich gelassen habe noch erkennt und nutzen kann.

Im moment überlege ich gerade, ob man das ganze nicht evtl. auf Dateien 
in einem "sticknormalen" FAT16 umstellen könnte. Ich denke darüber nach, 
die mit dem CPM-Tools angelegten images einfach mit einem bestimmten 
Namen in das Root-Verzeichniss einer FAT16-Partition zu packen. Sowas 
wie "diska.img", "diskb.img" .. usw. Und statt die Sektoren in den 
Partitionen direkt anzusprechen, könnte man dann auf den Dateien 
"rumrödeln".

Sollte ich die nächten Wochen mal Zeit dazu haben, werde ich mal 
versuchen die bekannten FAT16-Treiber mit in den Source des CP/M 
Projekts einzubinden. Leider ist meine Freizeit jedoch sehr beschränkt, 
so das das bei mir ewig dauern könnte.

Freundliche Grüße
Frank

von Leo C. (rapid)


Lesenswert?

Peter Zabel schrieb:
> habe die Ausgabe vom Speichertest weiter untersucht.
> Es ist nicht nur D0 betroffen, sondern auch D1, D2, D3.
> Abhängig von der Adresse.

Für mich sieht das nach einem Hardwarefehler aus.
Bitte Verdrahtung nochmal überprüfen.
Durchgang, Kurzschluß, A8-A10?
Hat Dein RAM evtl. doch eine A11?
Stromversorgung, Blockkondensatoren, ...
Kannst Du das RAM (testweise) mit 5V betreiben (evtl. SD-Karte ziehen)?

> Hat jemand ein funktionierendes
> 168er hex-file, 20 oder 25MHz zum testen für mich?
> Meine fuses sind lf=0xE0, hf=0xDC.

Andererseits:
Welche Hardware-/Softwarekombination hast Du überhaupt?
Software scheint ja die neueste aus dem "modules" Zweig zu sein. Die ist 
mit der 4-Bit Hardware nicht besonders gut getestet.

von Leo C. (rapid)


Lesenswert?

Frank Zoll schrieb:
> Halloe.
>
> Ich schlage mich leider immer noch mit der Partinionierung meiner
> SD-Card und dem aufbringen der Images rum. Die Idee, das ganze auf
> eigene Partinionen zu packen klingt zwar recht nett, macht aber einen
> riesenumstand für alle Windows-User.

Für alle anderen aber nicht. :)

> Ich habe letzte nach extra einen "alten" PC platt gemacht um Linux drauf
> zu spielen.

Einige hier kommen mit einer Linux Live-CD ganz gut zurecht.

> Nun kämpfe ich mit der Hardwareerkennung von Linux. Seitdem
> ich die SD-Card unter Linux neu partinioniert habe, wird sie beim
> einstecken nicht mehr gefunden. Ich komme praktisch nicht mehr drauf.

Gibt es irgendwelche Logeinträge?
(z.B. in '/var/log/syslog' oder '/var/log/kern.log')

> Defekt ist die Karte wohl noch nicht, da Windows die eine FAT16
> Partition die ich gelassen habe noch erkennt und nutzen kann.
>
> Im moment überlege ich gerade, ob man das ganze nicht evtl. auf Dateien
> in einem "sticknormalen" FAT16 umstellen könnte. Ich denke darüber nach,
> die mit dem CPM-Tools angelegten images einfach mit einem bestimmten
> Namen in das Root-Verzeichniss einer FAT16-Partition zu packen. Sowas
> wie "diska.img", "diskb.img" .. usw. Und statt die Sektoren in den
> Partitionen direkt anzusprechen, könnte man dann auf den Dateien
> "rumrödeln".

Ja, das steht auch auf meiner todo-Liste. Aber ganz tief unten.
In´s 8K ROM paßt zwar kein FAT-Treiber mehr, aber das macht ja nichts.

> Sollte ich die nächten Wochen mal Zeit dazu haben, werde ich mal
> versuchen die bekannten FAT16-Treiber mit in den Source des CP/M
> Projekts einzubinden. Leider ist meine Freizeit jedoch sehr beschränkt,
> so das das bei mir ewig dauern könnte.

Dann wünsche ich Dir (und uns) mal eine große Portion Freizeit. :)

Man kann auch immer noch auf Partitionierung verzichten, und ein 
CP/M-Image direkt an den Anfang einer Speicherkarte schreiben. Wie das 
unter Windows geht, wissen die Experten hier.

von Peter Z. (flexopete)


Lesenswert?

Moin,

Hardware ist die neue 8-Bit Platine.
Das DRAM hat A0 - A10.
Ich habe keine Verbindung zwischen A8,A9,A10 und
D0 - D4. Der 168er läuft mit 5V, die SD mit 3,3V.
Die Software habe ich am 31.08. runtergeladen.
Mein List-File sagt:

Including file 'C:\Programme\Atmel\AVR 
Tools\AvrAssembler2\Appnotes\m168def.inc'
Including file 'D:\AVR_CPM-AVR\avr\config.inc'
Including file 'D:\AVR_CPM-AVR\avr\macros.inc'
Including file 'D:\AVR_CPM-AVR\avr\dram-8bit.inc'
Including file 'D:\AVR_CPM-AVR\avr\init.asm'
Including file 'D:\AVR_CPM-AVR\avr\mmc.asm'
Including file 'D:\AVR_CPM-AVR\avr\sw-uart.asm'
Including file 'D:\AVR_CPM-AVR\avr\dram-8bit.asm'
Including file 'D:\AVR_CPM-AVR\avr\remainders.asm'
Including file 'D:\AVR_CPM-AVR\avr\8080int-jmp.asm'

Gruss
Peter

von Leo C. (rapid)


Lesenswert?

Peter Zabel schrieb:
> Moin,
>
> Hardware ist die neue 8-Bit Platine.
> Das DRAM hat A0 - A10.
> Ich habe keine Verbindung zwischen A8,A9,A10 und
> D0 - D4. Der 168er läuft mit 5V, die SD mit 3,3V.

Ich habe den letzten, von Joe als pdf geposteten Schaltplan mit meinem 
Aufbau verglichen. Ich habe keinen Unterschied gefunden. Das Layout 
sollte mit diesem Plan ja übereinstimmen.

> Die Software habe ich am 31.08. runtergeladen.

Danach gibt es bisher nur Änderungen bei der mmc-Fehlerbehandlung. Die 
Software läuft bei mit mit Mega8 und Mega328.

Läuft die Platine denn sonst schon bei jemandem? Joe?

von Peter Z. (flexopete)


Lesenswert?

Mit "keine Verbindung" meine ich keinen Kurzschluss
zwischen A8,A9,A10 und D0 - D3.

Peter

von Frank Z. (fzoll)


Lesenswert?

Leo C. schrieb:
>> Nun kämpfe ich mit der Hardwareerkennung von Linux. Seitdem
>
>> ich die SD-Card unter Linux neu partinioniert habe, wird sie beim
>
>> einstecken nicht mehr gefunden. Ich komme praktisch nicht mehr drauf.
>
>
>
> Gibt es irgendwelche Logeinträge?
>
> (z.B. in '/var/log/syslog' oder '/var/log/kern.log')

Ja, zu meinem leidwesen gibt es da welche die nicht gut klingen.

Wenn ich die SD- Card einlege wird sie noch erkannt. Er listet die größe 
der Karte korrekt als 1GB Karte.
Danach zeigt der mir noch an, das es darauf 4 Partitionen gibt. (sdc: 
sdc1 sdc2 sdc3 sdc4). Bis hier hin scheint er noch zu kommen.

sd 2:0:0:1 [sdc] 1958912 512-byte logical blocks: (1.00 GB/956 MiB)
sd 2:0:0:1 [sdc] Assuming drive cache: write through
sd 2:0:0:1 [sdc] Assuming drive cache: write through
sdc: sdc1 sdc2 sdc3 sdc4

Kurz darauf (ca. 2 Secunden abstand) kommt die Meldung:

usb 1-3: reset high speed USB device using ehci_hcd and address 2.

Gefolgt von:

sd 2:0:0:1 [sdc] Device not ready
sd 2:0:0:1 [sdc] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
sd 2:0:0:1 [sdc] Sense Key : Not Ready [current]
sd 2:0:0:1 [sdc] Add. Sende: Medium not present
end_request: I/O error, dev sdc, sector 1958784
Buffer I/O error on device sdc, logical block 244848
sd 2:0:0:1 [sdc] Device not ready
sd 2:0:0:1 [sdc] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
sd 2:0:0:1 [sdc] Sense Key : Not Ready [current]
sd 2:0:0:1 [sdc] Add. Sende: Medium not present
end_request: I/O error, dev sdc, sector 1958784
Buffer I/O error on device sdc, logical block 244848
sdc: detected capacity change from 1002962944 to 0

Danach bricht er den Versuch ab die Karte weiter an zu sprechen.

Habt ihr eine Idee, wie man die SD- Card unter Linux ( Suse 11.2 ) auf 
einem alten AMD64 Shuttle PC wieder ans rennen bringen könnte ?

Unter WindowsXP läuft die Karte problemlos. Nur Linux zickt da rum.

Grüße
Frank

von Frank Z. (fzoll)


Lesenswert?

Könnt ihr mal einen Blick darauf werfen ?

Meine SD-Card konnte ich mitlerweile Partitionieren und mit den Images 
befüllen. Leider klappt das Booten aber noch nicht.
Für mich sieht es so aus als ob die Karte die ersten Kommandos nocht 
verarbeitet. Erst wenn versucht wird den ersten Sektor zu laden,
scheint die Karte nicht zu antworten.
Was meint ihr ?
1
CPM on an AVR, v1.0
2
Testing RAM: fill...wait...reread...
3
Initing mmc...
4
mmcInit SPI_CLK_SLOW
5
mmcCMD: 00 00000000 .. 95 CMDRes: 01
6
mmcCMD: 08 000001AA .. 87 CMDRes: 01
7
mmcCMD: 37 00000000 .. 01 CMDRes: 01 mmcCMD: 29 40000000 .. 01 CMDRes: 00
8
mmcCMD: 3A 00000000 .. 01 CMDRes: 00
9
 CT: 04 InitRes: 00 SPI_DISABLE
10
mmcRdSect SPI_CLK_FAST
11
mmcCMD: 11 00000000 .. 01 CMDRes: 00 SPI_DISABLE RdSectRes: 01 No bootable CP/M
12
disk found! Please change MMC/SD-Card.

Grüße
Frank

von Peter Z. (flexopete)


Lesenswert?

Moin,

bei mir kommt folgende Fehlermeldung:

CPM on an AVR, v1.0
Testing RAM: fill...wait...reread...
Initing mmc...
mmcInit
mmcCMD: 00 00000000 .. 95 CMDRes: 01
mmcCMD: 08 000001AA .. 87 CMDRes: 05
mmcCMD: 37 00000000 .. 01 CMDRes: 01 mmcCMD: 29 00000000 .. 01 CMDRes: 
01
mmcCMD: 37 00000000 .. 01 CMDRes: 01 mmcCMD: 29 00000000 .. 01 CMDRes: 
00
mmcCMD: 10 00000200 .. 01 CMDRes: 00
 CT: 02 InitRes: 00
mmcCMD: 11 00000000 .. 01 CMDRes: 00
CP/M partition at: 061, size: 993537KB.
Partinit done.
mmcCMD: 11 00007A00 .. 01 CMDRes: 00
Ok, CPU is live!
ipl
DISK I/O: Invalid Function code: 01

Demnach müsste IPL schon etwas geladen haben.
Nur, was bedeutet diese Fehlermeldung?

Gruss
Peter

von Leo C. (rapid)


Lesenswert?

Frank Zoll schrieb:

>  CT: 04 InitRes: 00 SPI_DISABLE

Karte ließ sich fehlerfrei initialisieren. Eine "SDC V2" Karte wurde 
erkannt.

> mmcRdSect SPI_CLK_FAST
> mmcCMD: 11 00000000 .. 01 CMDRes: 00 SPI_DISABLE RdSectRes: 01
          -- --------               --                        --
           1        2                3                         4

1, 2:  Befehl "Read Single Block", Sector 0 wird an Karte gesendet.
   3:  Befehl wurde von der Karte aktzeptiert.
   4:  Karte hat innerhalb des Timeouts kein gültiges
       'Data Token' (0xFE) gesendet.

Leider sieht man hier nicht, ob die Karte garnichts mehr gesendet hat, 
oder ein Fehlertoken.

Du könntest mal MMC_DEBUG auf 3 setzen. Villeicht kommt man dann 
dahinter.

von Leo C. (rapid)


Lesenswert?

Peter Zabel schrieb:

Funktioniert der RAM-Test bei Dir inzwischen fehlerfrei?
Wenn nicht, kannst Du den Rest hier vergessen.

> CP/M partition at: 061, size: 993537KB.
> Partinit done.
> mmcCMD: 11 00007A00 .. 01 CMDRes: 00
> Ok, CPU is live!
> ipl
> DISK I/O: Invalid Function code: 01
>
> Demnach müsste IPL schon etwas geladen haben.

Das kann man so nicht sagen. Der ipl wird ohne Fehler von der Karte 
geladen. Ob er danach korrekt im RAM steht, wissen wir nicht.

> Nur, was bedeutet diese Fehlermeldung?

Gültige Codes wären diese hier:
1
  .equ  READ_FUNC  = 7
2
  .equ  WRITE_FUNC = 6
3
  .equ  BOOT_FUNC  = 5
4
  .equ  HOME_FUNC  = 4

Entweder läuft Dein IPL ins Nirwana (RAM-Fehler), oder IPL und BIOS 
passen nicht zu Deiner AVR Programmversion. Letzteres müßte nicht 
unbedingt an Dir liegen, da ich im SVN einiges an Chaos habe. Ich muß 
mal dringend aufräumen.

von Peter Z. (flexopete)


Lesenswert?

Moin Leo,

ich habe auf LR ein 2.tes System aufgebaut. Das hat keine
Fehlermeldungen beim RAM-Test. Hast Du passende Dateien
für mich? Wäre doch schön die CP/M 2.2 Meldung auf dem
Terminal zu sehen.

Gruss
Peter

von Frank Z. (fzoll)


Lesenswert?

Hm komisch. Ich habe die Debugmeldungen mal umgestellt.
Es sieht so aus, als ob von der Karte immer nur High- Pegel zurück 
gemeldet werden. In der Debug ausgabe steht bei allen Commandos FF. Ich 
werde wohl mal schauen müssen, ob ich da noch irgendwo eine von diesen 
viesen ungewollten Lötbrücken habe.
1
mmcInit SPI_CLK_SLOW <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
2
mmcCMD: 00 00000000 <FF <FF <FF >40 .. 95>95 <FF <01  CMDRes: 01
3
mmcCMD: 08 000001AA <FF <FF <FF >48 .. 87>87 <FF <01  CMDRes: 01 <00 <00 <01 <AA
4
5
mmcCMD: 37 00000000 <FF <FF <FF >77 .. 01>01 <FF <01  CMDRes: 01 mmcCMD: 29 4000
6
0000 <FF <FF <FF >69 .. 01>01 <FF <00  CMDRes: 00
7
mmcCMD: 3A 00000000 <FF <FF <FF >7A .. 01>01 <FF <00  CMDRes: 00 <80 <FF <80 <00
8
 <FF
9
 CT: 04 InitRes: 00 SPI_DISABLE
10
mmcRdSect SPI_CLK_FAST
11
mmcCMD: 11 00000000 <FF <FF <FF >51 .. 01>01 <FF <00  CMDRes: 00 <FF <FF <FF <FF
12
 <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
13
 <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
14
 <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
15
 <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
16
 <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
17
 <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
18
 <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
19
 <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
20
 <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
21
 <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
22
 <FF <FF <FF <FF SPI_DISABLE RdSectRes: 01 No bootable CP/M disk found! Please c
23
hange MMC/SD-Card.

PS, die Karte ist noch nicht hin, kann sie unter WinXP immer noch lesen 
und beschreiben.

Grüße
Frank

von Leo C. (rapid)


Lesenswert?

Frank Zoll schrieb:
> Es sieht so aus, als ob von der Karte immer nur High- Pegel zurück
> gemeldet werden.

Nicht immer, nur meistens. Das ist aber normal. Wenn die Karte nichts zu 
senden hat, ist die Data Out Leitung eben auf high.

> In der Debug ausgabe steht bei allen Commandos FF.

Siehe oben. Es wird aber auch immer noch nicht alles angezeigt.

> Ich
> werde wohl mal schauen müssen, ob ich da noch irgendwo eine von diesen
> viesen ungewollten Lötbrücken habe.

Glaube ich nicht.

> mmcCMD: 00 00000000 <FF <FF <FF >40 .. 95>95 <FF <01  CMDRes: 01
                                                **  **
Hier sendet die Karte zuerst FF, dann 01.

> mmcCMD: 11 00000000 <FF <FF <FF >51 .. 01>01 <FF <00  CMDRes: 00 <FF <FF
                                                **  **
Auf den Befehl antortet die Karte FF, 00.

> <FF <FF
>  <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
> <FF <FF
>  <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
> <FF <FF
>  <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
> <FF <FF
>  <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
> <FF <FF
>  <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
> <FF <FF
>  <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
> <FF <FF
>  <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
> <FF <FF
>  <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
> <FF <FF
>  <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
> <FF <FF
>  <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
> <FF <FF
>  <FF <FF <FF <FF SPI_DISABLE RdSectRes: 01 No bootable CP/M disk found!

Hier scheint aber wirklich nichts mehr von der Karte zu kommen.
  --> Timeout.

Vielleicht ist die Wartezeit zu kurz. Ich werde mir das nachher nochmal 
genauer anschauen.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Peter Zabel schrieb:
> ich habe auf LR ein 2.tes System aufgebaut. Das hat keine
> Fehlermeldungen beim RAM-Test.

Gut.

> Hast Du passende Dateien
> für mich? Wäre doch schön die CP/M 2.2 Meldung auf dem
> Terminal zu sehen.

Im Anhang ist mal ein komplettes System mit ipl, ccp, bdos und bios.
Das kannst Du mit dd auf den Anfang der CP/M-Partition kopieren.

von Peter Z. (flexopete)


Lesenswert?

Moin Leo,

ok, das war es. Vielen Dank für die passende cpmsys.bin.
Passte wohl vorher nicht so zusammen. Werde mal anfangen,
Software draufzupacken.

Gruss
Peter

von Ronny M. (hobby-coder)


Lesenswert?

hallo ihr,

ich habe die lochraster version weitgehend aufgebaut. meine ram chips, 
von meinen edo ram's, scheinen aber ungeeignet zu sein. laut den mir 
vorliegenden schaltplänen kommen die signale an anderen pins herein. 
ausserdem gehen die leiterbahnen über einen kleinen chip auf der platine 
(signal koverter...?).

ob ein direkter anschluss möglich ist, oder ich diesen winzigen smd chip 
(16 kontakte) brauche, weis ich nicht. daher einfach die frage:

wo bekomme ich passende ram chips her? idealer weise über reicheld und 
im dip gehäuse. ausser, man kann diese auf lochraster gut löten, ohne 
tiefergehende smd lötkenntnisse zu besitzen.

---

[edit] pinzahl korrigiert

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo,
hat einer schon die neue Platine in Gange? irgendwie finde ich nicht die 
richtige Software. Das mit dem SVN ist der letzte Schrott, Dateien 
lassen sich da nicht wirklich herunterladen.....
Gruß
Hans- Werner

von Leo C. (rapid)


Lesenswert?

Hans- w. Schütz schrieb:
> richtige Software. Das mit dem SVN ist der letzte Schrott, Dateien

Kann sein ;)

> lassen sich da nicht wirklich herunterladen.....

Natürlich lassen sie sich...
Was genau funktioniert denn bei Dir nicht?

Versuchs mal hier:
http://cloudbase.homelinux.net/viewvc/avr-cpm/branches/modules/avrcpm/

Und dann oben rechts auf den Knopf "Download Tarball" klicken.

von Leo C. (rapid)


Lesenswert?

Ronny Minow schrieb:
> ich habe die lochraster version weitgehend aufgebaut. meine ram chips,
> von meinen edo ram's, scheinen aber ungeeignet zu sein. laut den mir
> vorliegenden schaltplänen kommen die signale an anderen pins herein.

Ich habs noch nicht getestet, aber prinzipiell müßten EDO's eigentlich 
auch gehen.
Wie heißen Deine Chips denn genau?

> ausserdem gehen die leiterbahnen über einen kleinen chip auf der platine
> (signal koverter...?).

Das sind wahrscheinlich Serienwiderstände.


> ob ein direkter anschluss möglich ist, oder ich diesen winzigen smd chip
> (16 kontakte) brauche, weis ich nicht. daher einfach die frage:

Kann man weglassen.

> wo bekomme ich passende ram chips her? idealer weise über reicheld und
> im dip gehäuse. ausser, man kann diese auf lochraster gut löten, ohne
> tiefergehende smd lötkenntnisse zu besitzen.

Raketenwissenschaft ist's keine. Etwas Übung ist allerdings von Vorteil. 
Dann kann mit die SOJ- und TSOP-Gehäuse ganz gut auf Lochraster löten, 
wenn man die Pads vorher mit einem Messer in zwei Hälften teilt.

Hier hatte ich schon mal ein Bild gepostet:
Beitrag "Re: CP/M auf ATmega88"

von Frank Z. (fzoll)


Lesenswert?

Halloe.

Also ich bin einen kleinen Schritt weiter gekommen. Ich habe einfach 
eine andere SD-Card genommen. Nun hänge ich am nächsten Schritt fest.

Dies sind die letzten Zeilen der Debug-Ausgabe:
1
mmcCMD: 11 35A56600 .. 01 CMDRes: 00
2
Ok, CPU is live!
3
4
 ZHPNC  A =DE BC =0000 DE =0000 HL =0000 SP =FFEF PC =2E32       CB CB CB Invali
5
d opcode!

Wenn ich das richtig interpretiere, hat das lesen des ersten Sektors der 
Partition noch geklappt. Aber scheinbar stehen im RAM immer noch die 
Code's CBCBCB vom RamTest. Scheinbar sind die Daten aus dem Sektor dort 
nicht angekommen. Oder ?

Grüße
Frank

p.s. Wer meint das seine SD-Card auch nicht tut, der möge mal auf den 
Hersteller schauen. Die Karten von "PLATINUM" machen wohl ziemliche 
Probleme. Nun habe ich eine 1GB SD-Card von Verbatim am laufen. Die 1GB 
Card von Platinum will mit dieser Hardwareversion nicht ans laufen 
kommen.

von Frank Z. (fzoll)


Lesenswert?

Mit der letzten hier geposteten Version cmpsys.bin von Leo bekomme ich 
die folgende Fehlermeldung:
1
mmcCMD: 11 35A56600 .. 01 CMDRes: 00
2
Ok, CPU is live!
3
4
 ZHPNC  A =DE BC =0000 DE =0000 HL =0000 SP =FFEF PC =2000       30 0D 1A Invali
5
d opcode!

Scheint noch net alles kapuut zu sein. Ist alles nur recht tricky.
Frank

von Leo C. (rapid)


Lesenswert?

Frank Zoll schrieb:
> Halloe.
>
> Also ich bin einen kleinen Schritt weiter gekommen. Ich habe einfach
> eine andere SD-Card genommen. Nun hänge ich am nächsten Schritt fest.
>
> Dies sind die letzten Zeilen der Debug-Ausgabe:
>
1
> mmcCMD: 11 35A56600 .. 01 CMDRes: 00
2
> Ok, CPU is live!
3
> 
4
>  ZHPNC  A =DE BC =0000 DE =0000 HL =0000 SP =FFEF PC =2E32       CB CB
5
> CB Invalid opcode!

> Wenn ich das richtig interpretiere, hat das lesen des ersten Sektors der
> Partition noch geklappt. Aber scheinbar stehen im RAM immer noch die
> Code's CBCBCB vom RamTest. Scheinbar sind die Daten aus dem Sektor dort
> nicht angekommen. Oder ?

Der IPL wird auf 2000 bis 207F geladen. CB auf 2E32 ist also völlig in 
Ordnung. ;-)
Warum der Prozessor dort hin springt kann wieder 2 Gründe haben:
1. RAM fehlerhaft. (unwahrschinlich, wenn RAM-Test ok)
2. IPL und/oder Rest auf den "Systemspuren" schrottig.

Vorschlag: System von obigem Artikel testen:
Beitrag "Re: CP/M auf ATmega88"

---

Gerade wollte ich auf "Absenden" drücken und sehe Deinen neuen Artikel:
Frank Zoll schrieb:
>  ZHPNC  A =DE BC =0000 DE =0000 HL =0000 SP =FFEF PC =2000       30 0D
> 1A Invalid opcode!

Das sieht dann aber doch nach einem Hardwarefehler aus.
Statt "30 0D 1A" sollte da "31 00 10" stehen.

von Leo C. (rapid)


Lesenswert?

Frank Zoll schrieb:

> mmcCMD: 11 35A56600 .. 01 CMDRes: 00
             ********

Diese Zahl erscheint mir reichlich groß. Kannst Du mal die vollständigen 
Bootmeldungen posten (Mit oder ohne MMC_DEBUG)?

Deine Partitionstabelle würde mich auch interessieren. Unter Linux wäre 
das:
1
# fdisk -cul /dev/xxx

Oder ein Dump des ersten Sektors:
1
# dd if=/dev/xxx of=part-dump.bin bs=512 count=1

von Frank Z. (fzoll)


Lesenswert?

Juhu, freu es tut zum ersten mal :-)

Als letzten Fehler war eine der Adressleitungen nicht richtig 
angeschlossen. Nun läufts mit der neuen Platine auch einwandfrei.
Als Prozessor habe ich den Atmega168 genommen. Sourcen stammen aus dem 
SVN. Habe es nun erfolgreich mit dem AVR Studio Compiliert und 
installiert bekommen. Habe mir einfach ein kleines neues Projekt 
angelegt, die Sourcen reingeworfen und die Config auf 8bit und 168er 
Atmega angepasst.
Als Betriebssystem auf der SD-Card hab ich die oben als letztes gelinkte 
Version genommen.
1
CPM on an AVR, v1.0
2
Testing RAM: fill...wait...reread...
3
Initing mmc...
4
CP/M partition at: 1757875, size: 9765KB.
5
CP/M partition at: 1777406, size: 9765KB.
6
CP/M partition at: 1796937, size: 73464KB.
7
Partinit done.
8
Ok, CPU is live!
9
10
ipl
11
62k cp/m vers 2.2
12
13
A>dir
14
A: ASM      COM : DDT      COM : DUMP     COM : ED       COM
15
A: T        COM : TLOOP    COM : LOAD     COM : MBASIC   COM
16
A: 23       BAS : BAGELS   BAS : CHECKERS BAS : STARTREK BAS
17
A: TREKINST BAS : MASTRMND BAS : WEEKDAY  BAS : PIP      COM
18
A: STAT     COM : SUBMIT   COM : XSUB     COM : ZORK1    COM
19
A: ZORK1    DAT
20
A>

Vielen Dank für eure Hilfe.
Euer Frank

von Leo C. (rapid)


Lesenswert?

Frank Zoll schrieb:
> Juhu, freu es tut zum ersten mal :-)

Herzlichen Glückwunsch und Willkommen im Club.

> angeschlossen. Nun läufts mit der neuen Platine auch einwandfrei.

Das ist ja mal 'ne Aussage.

> CP/M partition at: 1757875, size: 9765KB.
                     *******

Das sieht auch viel besser aus als 900032000 (= 0x35A56600).

> Vielen Dank für eure Hilfe.

Wir freuen uns jetzt auf den FAT16-Treiber. :-)

von Peter S. (petersieg)


Lesenswert?

Hat jemand 4 Ramchips ***ausgelötet*** über?
Wollte mich die nächsten Tage mal an einen 8-bit Lochrasteraufbau 
wagen..
(Ich weiß, das 2 auch reichen.. aber bei smd + LR besser Reserve;
Und meine Platine habe ich an einen weiteren, neuen Mitstreiter 
abgetreten)

Peter

von Frank Z. (fzoll)


Lesenswert?

Leo C. schrieb:
> Wir freuen uns jetzt auf den FAT16-Treiber. :-)

Hihi,

ich auch. Ich habe mir gestern Nacht schonmal ein wenig den Kopf darüber 
zerbrochen. Soweit ich das einschätze wird es möglich sein. Ich habe 
eine neue FAT16.asm Datei angelegt und schonmal angefangen die ersten 
FAT16 Implementierungen vorzubereiten.

Zum aktuellen Stand:
- Eine FAT16 Partition wird bereits erkannt.
- Der BootSektor der FAT16 Partition wird bereits erfolgreich gelesen.

Nächste Schritte:
- Finden und Auswerten des Root-Verzeichnisses.
- Zuordnung gefundener Images auf die bestehenden Laufwerke A: bis D:.
- Finderoutine für das Auffinden beliebieger Sektoren über die 
FAT-Einträge in den Image-Dateien
- Read/Write des gefundenen Sektors über die bestehenden MMC-Routinen 
anbinden.


Ich werde mit einem sehr stark eingeschränkten FAT16 Treiber die Sache 
wohl ans laufen bringen.

Folgende Eckdaten denke ich lassen sich erreichen:
- Es wird eine FAT16 Partition vorausgesetzt.
- In der FAT16 Partition wird es ein Paar Dateien geben, die die 
einzelnen CP/M Partitionen darstellen werden.
- Die Image- Dateien müssen im ROOT- Verzeichniss der FAT16 Partition 
angelegt werden.
- Die Image- Dateien werden sich nicht auf dem AVR-CP/M anlegen lassen. 
So spare ich mir die Implementierung von "create_file"- Funktionen. (Da 
sehr Umständlich)
- Die Namen für die Image- Dateien werden wir im Code fest hinterlegen.
- Die Größe der Image-Dateien kann nicht dynamisch geändert werden. Die 
Images müssen praktisch von anfang an die volle Größe einer CP/M - 
Partition abbilden.
- Die Performance wird gegenüber den direkten CP/M Partionen stark 
leiden. Bei jedem Sektorzugriff muss dieser erst umständlich in der 
jeweiligen Image-Datei gesucht werden. ( Juhu Retro like nix schnelle 
:-) )
- Schreiben und Lesen einzelner Sektoren der Image-Dateien wird 
funktionieren.
- Ich verwende den Pufferspeicherblock, der schon für das 
Lesen/Schreiben der CP/M Partitionen verwendet wird einfach wieder. Ich 
brauche ein paar zusätzliche Bytes, für die wichtigsten Variablen ausm 
FAT16 System. Ich werde mit den derzeit noch verbliebenen knapp 100 
Bytes SRAM eines 168AVR's wohl hinkommen. ( Ein paar Bytes werde ich 
noch überlassen :-) )
- Ich mache die FAT16 Implementierung speziel für dieses Projekt neu, um 
so viel Speicher und Resourcen wie nur irgend geht einzusparen.
- Ich versuche das ganze "unauffällig" in den bestehenden Code 
einzufügen. Am Ende wäre das Ziel das man gleichzeitig mit FAT16 und 
CP/M Partitionen arbeiten kann.

Grüße
Frank

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo,
heute bin ich endlich dazu gekommen die Software in den 168er zu 
flashen.
Hardware ist das neue Board. Leider hängt es schon beim reread des Ram:
CPM on an AVR, v1.0

01<38@0139M: fill...wait...reread...F0<00@0000
nach einem Reset:

CPM on an AVR, v1.0
Fô<83@0083M: fill...wait...reread...F0<00@0000

hat jemand eine Idee??
die vorderen Zeichen wechseln ständig???
Ram Fehler?
Gruß
Hans- Werner

von Detlev T. (detlevt)


Lesenswert?

Hallo hschuetz,

leider kenne ich mich mit diesem Projekt nicht gut aus und weiß daher 
nicht, ob hier Interrupts verwendet werden.

Falls ja, stellt sich die Frage, ob die von dir genutzte Firmware an den 
168 angepasst wurde. Der reserviert nämlich doppelt so viel Speicher für 
jeden Vektor in der Tabelle. Trotz großer Ähnlichkeit wird eine 
atmega88-Version daher nicht ohne Änderung auf einem 168 laufen.

Gruß, DetlevT

von Ronny M. (hobby-coder)


Lesenswert?

Leo C. schrieb:
> Ich habs noch nicht getestet, aber prinzipiell müßten EDO's eigentlich
> auch gehen.
> Wie heißen Deine Chips denn genau?

Ich habe in mein Archiv noch einmal nachgeschaut und Edo Ram Riegel mit 
folgenden Chips gefunden:

* MSC 9618 C USA - MT 4C4001JDJ - 6
* OKI - M5I4400C-60SJ - 53825229A9Z
* Samsung - 447Y - KM44C100CJ - 7
* IBM - 014400J1F - 60 50H6697 - IBM 9370 - 625110500 Q
* MSC 9638 C USA - MT 4C4007JDJ - 6

Ich habe einfach mal alle Ziffern auf den Chips abgetippt, da ich nicht 
weis, welche Ziffern entscheident sind...

von Leo C. (rapid)


Lesenswert?

Ronny Minow schrieb:
> Ich habe in mein Archiv noch einmal nachgeschaut und Edo Ram Riegel mit
> folgenden Chips gefunden:

** MSC 9618 C USA - MT 4C4001JDJ - 6
  MT4C4001JDJ-6 - standard or self refresh -
  Micron Technology
http://www.alldatasheet.com/datasheet-pdf/pdf/75901/MICRON/MT4C4001JDJ-6.html

>* OKI - M5I4400C-60SJ - 53825229A9Z
  HM514400CL - 1,048,576-word X 4-bit Dynamic Random
  Access Memory - Hitachi Semiconductor
http://www.alldatasheet.com/datasheet-pdf/pdf/84404/HITACHI/HM514400CL.html

>* Samsung - 447Y - KM44C100CJ - 7
  KM44C1000D - 1M x 4Bit CMOS Dynamic RAM with
  Fast Page Mode - Samsung semiconductor
http://www.alldatasheet.com/datasheet-pdf/pdf/37282/SAMSUNG/KM44C1000D.html

>* IBM - 014400J1F - 60 50H6697 - IBM 9370 - 625110500 Q
http://www.idhw.com/textual/guide/noin_ram_chip_ibm.html

>* MSC 9638 C USA - MT 4C4007JDJ - 6
  MT4C4007J - 1 MEG x 4 DRAM 5V, EDO PAGE MODE,
  OPTIONAL SELF REFRESH - Micron Technology
http://www.alldatasheet.com/datasheet-pdf/pdf/120124/MICRON/MT4C4007J.html

Wenn ich's recht überblicke, sind die ersten 3 "Fast Page Mode" RAM's, 
also keine EDO's. Zum IBM habe ich auf die Schnelle kein Datenblatt 
gefunden.

Meiner Meinung nach müßten die alle funktionieren. Es sind aber alles 
1Mx4 Steine, und die haben leider eine andere Pinbelegung als die 4Mx4. 
Damit passen Sie leider nicht auf die neue Leiterplatte von Joe. Aber Du 
wolltest ja lochrastern...

von Leo C. (rapid)


Lesenswert?

Detlev T. schrieb:
> leider kenne ich mich mit diesem Projekt nicht gut aus und weiß daher
> nicht, ob hier Interrupts verwendet werden.

Aber wenn Du nur 4 Artikel weiter nach oben geschaut hättest, hättest Du 
sehen können, daß gerade jemand mit Mega168 Erfolg gemeldet hat.

> Falls ja, stellt sich die Frage, ob die von dir genutzte Firmware an den
> 168 angepasst wurde. Der reserviert nämlich doppelt so viel Speicher für
> jeden Vektor in der Tabelle. Trotz großer Ähnlichkeit wird eine
> atmega88-Version daher nicht ohne Änderung auf einem 168 laufen.

Joe G. hat von Anfang an einen 168, und ich bastle mit einem Mega8 und 
einem Mega328 rum.

von Leo C. (rapid)


Lesenswert?

Hans- w. Schütz schrieb:

> 01<38@0139M: fill...wait...reread...F0<00@0000
> nach einem Reset:

> CPM on an AVR, v1.0
> Fô<83@0083M: fill...wait...reread...F0<00@0000

An der Ausgabeformatierung muß ich wohl noch etwas feilen.
Verdrahtungsfehler oder defektes RAM im oberen Nibble?
Ach nein, das untere Nibble hat ja auch Fehler.
Wird dieses "o mit Dach" während des Ramtests ausgegeben, oder kommt das 
durch den Reset zustande?

Ansonsten:
Prozessor?
Taktfrequenz?
RAM-Typ?


Über eine Antwort auf meine Frage in diesem Artikel würde ich mich auch 
noch freuen:
Beitrag "Re: CP/M auf ATmega88"

von Leo C. (rapid)


Lesenswert?

Frank Zoll schrieb:
> Leo C. schrieb:
>> Wir freuen uns jetzt auf den FAT16-Treiber. :-)
>
> Hihi,
>
> ich auch. Ich habe mir gestern Nacht schonmal ein wenig den Kopf darüber

Hey, super.

> - Die Performance wird gegenüber den direkten CP/M Partionen stark
> leiden. Bei jedem Sektorzugriff muss dieser erst umständlich in der
> jeweiligen Image-Datei gesucht werden. ( Juhu Retro like nix schnelle
> :-) )

Ich glaube, so schlimm wirds garnicht. Die SD-Zugriffe sind im Vergleich 
zum Interpreter und zu den RAM-Zugriffen nämlich sauschnell. Die 
RAM-Disk ist auch eher langsamer als die SD-Disk(s).


> FAT16 System. Ich werde mit den derzeit noch verbliebenen knapp 100
> Bytes SRAM eines 168AVR's wohl hinkommen. ( Ein paar Bytes werde ich
> noch überlassen :-) )

Und wenns doch nicht reicht, kann man die UART RX/TX-Buffer noch 
verkleinern. Gut wäre natürlich, wenn man einen 2. Sektorpuffer hätte. 
Das würde mit dem ATmega328 gehen.

von Ronny M. (hobby-coder)


Lesenswert?

Leo C. schrieb:
> Wenn ich's recht überblicke, sind die ersten 3 "Fast Page Mode" RAM's,
> also keine EDO's. Zum IBM habe ich auf die Schnelle kein Datenblatt
> gefunden.
>
> Meiner Meinung nach müßten die alle funktionieren. Es sind aber alles
> 1Mx4 Steine, und die haben leider eine andere Pinbelegung als die 4Mx4.
> Damit passen Sie leider nicht auf die neue Leiterplatte von Joe. Aber Du
> wolltest ja lochrastern...

Letzteres ist soweit richtig. Aber, wie Du schon bemerkt hast, die 
Pinbelegung passt nicht zu den ICs, wie sie in der 4, bzw. 8, Bit 
Version genutzt werden. ausserdem gehen die Leiterbahnen über einen 
kleineren IC. Ob dieser was mit der Ansteuerung zu tun hat, kann ich Dir 
leider nicht sagen...

Und, ich wollte eigendlich nicht zuviel in SMD arbeiten. Mir fehlt darin 
die Praxis (kann man aber ändern), sowie evtl. benötigtes spezielleres 
Werkzeug (Lötstation gehobener Art). Letzteres wollte ich mir nicht 
kaufen, da ich doch zu selten etwas löte.

---

Kann mir jemand ein Ram IC empfehlen, den man nicht umbedingt mit 
spezielleren Werkzeug beikommen muss? Ich gebe ungern 100€ & mehr aus, 
nur um 1x einen SMD IC mit x beinchen zu Löten, bzw. ein Pizza Ofen zum 
SMD Reflow Ofen umbauen zu müssen.

---

Habt Ihr evtl. einmal versucht, dieses Projekt mit einem anderem µC zu 
entwickeln?

von Egmont (Gast)


Lesenswert?

Hallo zusammen,
Ein Dank erstmal an Joe für diesen Bausatz.
Habe meine Platine erst jetzt aufbauen können und ein Problem,
Ich bekomme folgende Meldung

CPM on an AVR, v1.0
Testing RAM: fill...wait...reread...
Initing mmc...
mmcInit
mmcCMD: 00 00000000 .. 95 CMDRes: 01
mmcCMD: 08 000001AA .. 87 CMDRes: 05
mmcCMD: 37 00000000 .. 01 CMDRes: 01 mmcCMD: 29 00000000 .. 01 CMDRes: 
01
mmcCMD: 37 00000000 .. 01 CMDRes: 01 mmcCMD: 29 00000000 .. 01 CMDRes: 
00
mmcCMD: 10 00000200 .. 01 CMDRes: 00
 CT: 02 InitRes: 00
mmcCMD: 11 00000000 .. 01 CMDRes: 00 No bootable CP/M disk found! Please 
change MMC/SD-Card.

Folgendes habe ich schon unternommen:

-Alle Verbindungen zum RAM (GM71C17403CJ6) durchgemessen.
-Mehrere Versuche die SD-Karte bootfähig zu machen.
         letzte Versuch mit    dd if=cpm.bin of=\\.\g:
         Bin mir auch nicht so sicher ob das so richtig ist ???

Eine genaue Beschreibung könnte mir schon helfen.

desweiteren habe ich im Softwarearchiv für die AVR-VGA Karte keine 
passende Software gefunden.

Bin Dankbar für alle Tipps.

Gruß Egmont

von Frank Z. (fzoll)


Lesenswert?

Egmont schrieb:
> Hallo zusammen,
> Ein Dank erstmal an Joe für diesen Bausatz.
> Habe meine Platine erst jetzt aufbauen können und ein Problem,
> Ich bekomme folgende Meldung
> mmcCMD: 11 00000000 .. 01 CMDRes: 00 No bootable CP/M disk found! Please
> change MMC/SD-Card.

Also das Ram- wird es wohl nicht sein, denke ich. Ich hatte den gleichen 
Fehler bei mir. Im Grunde genommen lag es wohl an der SD-Card. Es gibt 
einige Cards bei dehnen ist das Timing besonders kritisch. Die Karte die 
bei mir nicht wollte war eine 1GB-Platinum Card von Reichelt. Mit einer 
anderen Card (1GB Verbatim) tat's dann auf anhieb. Es lohnt sich also 
bei diesem Fehler einfach mal eine andere Karte zu testen. Das Problem, 
das gewisse Karten nicht richtig laufen, haben hier im Forum auch schon 
andere gehabt. Bin über die Suche auf den Tip gekommen, mal ne andere 
Card zu testen. ( siehe auch 
http://www.mikrocontroller.net/articles/MMC-_und_SD-Karten ).

Grüße
Frank

von Leo C. (rapid)


Lesenswert?

Ronny Minow schrieb:
> Leo C. schrieb:
>> Damit passen Sie leider nicht auf die neue Leiterplatte von Joe. Aber Du
>> wolltest ja lochrastern...
>
> Letzteres ist soweit richtig. Aber, wie Du schon bemerkt hast, die
> Pinbelegung passt nicht zu den ICs, wie sie in der 4, bzw. 8, Bit
> Version genutzt werden.

Ich habe zwar begriffen, daß Du die RAM's nicht löten möchtest, aber 
diese Bemerkung verstehe ich nicht. Die Pinbelegung bei den 1Mx4 Chips 
ist anders als bei den 256Kx4 und 4Mx4 Chips. Aber die Bezeichnungen und 
die Funktionen der Anschlüsse sind bei allen (bis auf die Anzahl der 
Adressleitungen) gleich. Auf Lochraster spielt es doch keine Rolle, ob 
man z.B. RAS auf Pin 4 oder Pin 5 löten muß.

> ausserdem gehen die Leiterbahnen über einen
> kleineren IC. Ob dieser was mit der Ansteuerung zu tun hat, kann ich Dir
> leider nicht sagen...

Dazu hatte ich schon geschrieben, daß es sich hier um Widerstände 
handelt, die man auch weglassen kann.

> Und, ich wollte eigendlich nicht zuviel in SMD arbeiten. Mir fehlt darin
> die Praxis (kann man aber ändern), sowie evtl. benötigtes spezielleres
> Werkzeug (Lötstation gehobener Art). Letzteres wollte ich mir nicht
> kaufen, da ich doch zu selten etwas löte.

Gehobene Art ist nicht nötig. Bei mir tuts seit ca. 30 Jahren ein Weller 
Magnastat.

von Frank Z. (fzoll)


Lesenswert?

Ronny Minow schrieb:
> Leo C. schrieb:
>> Wenn ich's recht überblicke, sind die ersten 3 "Fast Page Mode" RAM's,
>> also keine EDO's. Zum IBM habe ich auf die Schnelle kein Datenblatt
>> gefunden.
>>
>> Meiner Meinung nach müßten die alle funktionieren. Es sind aber alles
>> 1Mx4 Steine, und die haben leider eine andere Pinbelegung als die 4Mx4.
>> Damit passen Sie leider nicht auf die neue Leiterplatte von Joe. Aber Du
>> wolltest ja lochrastern...
>
> Letzteres ist soweit richtig. Aber, wie Du schon bemerkt hast, die
> Pinbelegung passt nicht zu den ICs, wie sie in der 4, bzw. 8, Bit
> Version genutzt werden. ausserdem gehen die Leiterbahnen über einen
> kleineren IC. Ob dieser was mit der Ansteuerung zu tun hat, kann ich Dir
> leider nicht sagen...
>
> Und, ich wollte eigendlich nicht zuviel in SMD arbeiten. Mir fehlt darin
> die Praxis (kann man aber ändern), sowie evtl. benötigtes spezielleres
> Werkzeug (Lötstation gehobener Art). Letzteres wollte ich mir nicht
> kaufen, da ich doch zu selten etwas löte.
>
> ---
>
> Kann mir jemand ein Ram IC empfehlen, den man nicht umbedingt mit
> spezielleren Werkzeug beikommen muss? Ich gebe ungern 100€ & mehr aus,
> nur um 1x einen SMD IC mit x beinchen zu Löten, bzw. ein Pizza Ofen zum
> SMD Reflow Ofen umbauen zu müssen.
>
> ---
Halloe.

Also meine Card habe ich mit zwei RAM's folgenden Typs bestückt.
SIEMENS HYB5117400BJ-50  (4M x 4-Bit Dynamic RAM)

Und mal ganz erlich, mit diesen RAM's hatte ich beim Auflöten den 
meisten Ärger. Alle anderen Chips ließen sich dank der Lötstopmaske 
recht leicht festlöten. Ich habe es nach der Anleitung von Thomas 
Pfeifer http://thomaspfeifer.net/smd_loeten_tsop.htm gemacht. Das ganze 
klinkt zwar sehr Brutal, funktionierte bei mir jedoch auf anhieb. Zur 
vorsicht habe ich nach dem Löten alle Pins nur einmal mit der Lupe 
untersucht, ob evtl. noch Lötbrücken über waren.

Bei den Ram- Chips hingegen funktioniert diese simple Lösung leider 
nicht. Habe hier zu erst versucht einfach alle Pins nacheinander 
anzulöten, gerad so wie mans bei den DIL- Chips halt auch machen würde. 
Habe micht totgeärgert weil ich immer wieder Pins hatte, die ein kleines 
Stück über dem PCB "schwebten" und sich absolut nicht festbrutzeln 
lassen wollten. Am Ende wär ich so verärgert, das ich einfach alles 
nochmal ab gemacht habe. Dann habe ich alle Pad's mit ganz wenig Lötzin 
versehen und das RAM-IC vorsichtig oben drauf gelegt. Danach habe ich 
einfach meinen Heizluftföhn ausm Baumarkt genommen und das IC damit 
nochmal richtig heiss gemacht. Der Effekt war super. Das IC ist durch 
das Flussmittel und das Lötzinn richtig gut auf den PAD's verweilt und 
ist sogar noch von selbst in die richtige Endposition gewandern. Am Ende 
war dann von beiden IC's nur noch ein einziges Pad über das nicht 
verbunden war. Das hab ich dann noch von "Hand" angelötet. Am meisten 
Angst hatte ich das der Baumarktföhn evtl. mit IC und Board kurzen 
prozess macht. ( Der wird ziemlich Heiss ). Habe das Föhnen daher ganz 
ganz Vorsichtig gemacht...

Hab wohl glück gehabt den nun läufts.

Und zu der Frage mit dem kleinen IC, das unter dem SD-Card sockelt 
sitzt. Das ist der Pegelwandler für die SD-CARD. Der wird gebraucht, 
wenn man den AVR mit 5 Volt betreiben möchte. Den die SD-Cards vertragen 
nur 3 Volt. Die Ram- Chips laufen nicht darüber, die Leitungen gehen 
daran vorbei.

Grüße
Frank

von hschuetz (Gast)


Lesenswert?

Leo C. schrieb:
> Hans- w. Schütz schrieb:
>
>> 01<38@0139M: fill...wait...reread...F0<00@0000
>> nach einem Reset:
>
>> CPM on an AVR, v1.0
>> Fô<83@0083M: fill...wait...reread...F0<00@0000
>
nach dem Reset laufen die Zeichen am Anfang einfach durch, Ausgabe ist 
willkürlich!
> An der Ausgabeformatierung muß ich wohl noch etwas feilen.
Was soll denn da kommen?
> Verdrahtungsfehler oder defektes RAM im oberen Nibble?
> Ach nein, das untere Nibble hat ja auch Fehler.
> Wird dieses "o mit Dach" während des Ramtests ausgegeben, oder kommt das
> durch den Reset zustande?
>
> Ansonsten:
> Prozessor?
ATMega 168
> Taktfrequenz?
20 MHz
> RAM-Typ?
Nanya NT511740b5J-60

wenn man eine Weile wartet will er von der SD booten, was aber bisher 
nicht richtig funktioniert? Wie andere auch das Problem mit den 
Speicherkarten, hab jetzt 6 verschiedene durch.. eine bootet anscheinend 
richtig, allerdings sind keine Dateien vorhanden??!!
Bisher etwas unbefriedigend...na mal sehen.
Gruß
Hans- Werner

von Frank Z. (fzoll)


Lesenswert?

Leo C. schrieb:
> Frank Zoll schrieb:
>> - Die Performance wird gegenüber den direkten CP/M Partionen stark
>> leiden. Bei jedem Sektorzugriff muss dieser erst umständlich in der
>> jeweiligen Image-Datei gesucht werden. ( Juhu Retro like nix schnelle
>> :-) )
>
> Ich glaube, so schlimm wirds garnicht. Die SD-Zugriffe sind im Vergleich
> zum Interpreter und zu den RAM-Zugriffen nämlich sauschnell. Die
> RAM-Disk ist auch eher langsamer als die SD-Disk(s).

Das Blöde ma FAT Dateisystem ist, das ich mich bei jedem Sectorzugriff 
erst die verlinkte Liste der Cluster in der FAT- Tabelle entlanghangeln 
muss, um raus zu bekommen in welchem Sektor der gesuchte Dateisektor 
wirklich steht. Je weiter hinten in der Datei dieser Sektor steht, desto 
langsamer wird die Routine arbeiten. Ich nutzte praktisch kaum Puffer, 
so das ich da jedes mal vom anfang der Datei an alles lesen muss.

>> FAT16 System. Ich werde mit den derzeit noch verbliebenen knapp 100
>> Bytes SRAM eines 168AVR's wohl hinkommen. ( Ein paar Bytes werde ich
>> noch überlassen :-) )
>
> Und wenns doch nicht reicht, kann man die UART RX/TX-Buffer noch
> verkleinern. Gut wäre natürlich, wenn man einen 2. Sektorpuffer hätte.
> Das würde mit dem ATmega328 gehen.
Ich müsste schon einen ziemlich großen Block speicher reservieren, um 
mir eine Tabelle aller Cluster aufzubauen aus denen die jeweilige 
Image-Datei besteht. Da komme ich mit ein paar mehr Bytes einfach nicht 
aus. Evtl. könnte man ja später mal drüber nachdenken diese Liste ein 
einem Teil des DRAM's zu lagern. Im moment wäre ich aber auch schon 
froh, wenns überhaupt läuft.

Einen 2. Sektorpuffer brauche ich erstmal nicht denke ich.

Ach ja, zu eurem Leidwesen habe ich hier mal eben riesen Parts des 
Quellcodes umgeschaufelt und neu zusammen gestrickt. Ich habe die Datei 
"remainders.asm" ziemlich leer gemacht. Da ist kaum was über geblieben.

Bei mir siehts nun so aus:

virt_ports.asm  Hier sind die virtuellen Ports und die hilfsroutinen für 
den UART- Zugriff über Ports.
dsk_fsys.asm  Hier liegen die Grundroutinen des virtuellen Dateisystems
dsk_cpm.asm  Hier liegen die Routinen für den Zugriff auf CP/M 
Partitionen
dsk_fat.asm  Hier liegen die Routinen für den Zugriff aus FAT16 
Partitionen
dsk_ram.asm  Hier liegen die Routinen für den Zugriff auf Ramdisk 
Partitionen
dsk_mgr.asm  Hier liegen die Routinen für die 
Partitionstabellenverwaltung

Um das ganze nett aussehen zu lassen habe ich die Tabelle hostparttbl um 
ein Byte erweitert. Jeder Eintrag dort wird nun angeführt von einem 
Byte, das den Typ der jeweiligen Partition wiederspiegelt. 
(0=None,1=CP/M,2=Fat,3=RAM). Im moment baue ich gerade alle Routinen so 
um, das sie dieses Byte erkennen können und dann jeweils die für die 
Partition richtigen lese/schreib routinen aufrufen.

Im moment läuft nix mehr, aber ich hoffe ich bekomme das noch wieder ans 
laufen :-)

Grüße
Frank

von Leo C. (rapid)


Lesenswert?

Frank Zoll schrieb:
> Egmont schrieb:
>> Hallo zusammen,
>> Ein Dank erstmal an Joe für diesen Bausatz.
>> Habe meine Platine erst jetzt aufbauen können und ein Problem,
>> Ich bekomme folgende Meldung
>> mmcCMD: 11 00000000 .. 01 CMDRes: 00 No bootable CP/M disk found! Please
>> change MMC/SD-Card.

Egmont, es kann gut sein daß Frank Recht hat. Es kann aber auch sein, 
daß überhaupt keine CP/M-Partition auf Deiner Karte ist.
Kannst Du nochmal einen Versuch mit "MMC_DEBUG = 3" machen?
Vorzugsweise mit der neuesten Programmversion von meinem SVN-Server:
http://cloudbase.homelinux.net/viewvc/avr-cpm/branches/modules/

Da sind geringfügig erweiterte Debugmeldungen drin. Es geht aber auch 
mit Deiner jetzigen Version.

> Also das Ram- wird es wohl nicht sein, denke ich. Ich hatte den gleichen
> Fehler bei mir. Im Grunde genommen lag es wohl an der SD-Card. Es gibt
> einige Cards bei dehnen ist das Timing besonders kritisch. Die Karte die
> bei mir nicht wollte war eine 1GB-Platinum Card von Reichelt. Mit einer
> anderen Card (1GB Verbatim) tat's dann auf anhieb. Es lohnt sich also
> bei diesem Fehler einfach mal eine andere Karte zu testen. Das Problem,
> das gewisse Karten nicht richtig laufen, haben hier im Forum auch schon
> andere gehabt. Bin über die Suche auf den Tip gekommen, mal ne andere
> Card zu testen. ( siehe auch
> http://www.mikrocontroller.net/articles/MMC-_und_SD-Karten ).

Frank, Deine Platinum-Karte verhielt sich wirklich merkwürdig. Das 
sollte man weiter untersuchen.

von Leo C. (rapid)


Lesenswert?

hschuetz schrieb:
> Leo C. schrieb:
>> Hans- w. Schütz schrieb:
>>
>>> 01<38@0139M: fill...wait...reread...F0<00@0000
>>> nach einem Reset:
>>
>>> CPM on an AVR, v1.0
>>> Fô<83@0083M: fill...wait...reread...F0<00@0000
>>
> nach dem Reset laufen die Zeichen am Anfang einfach durch, Ausgabe ist
> willkürlich!
>> An der Ausgabeformatierung muß ich wohl noch etwas feilen.
> Was soll denn da kommen?

Das gleiche, aber nicht so viel übereinander. :)

>> Prozessor?
> ATMega 168
>> Taktfrequenz?
> 20 MHz
>> RAM-Typ?
> Nanya NT511740b5J-60

Vom Timing her dürfte es keine Probleme geben. Du bist aber der Erste, 
der hier mit EDO-RAM's aufschlägt. Ich bin (noch) der Meinung, daß die 
auch funktionieren müßten. Aber ich werde mir das Datenblatt jetzt mal 
genauer anschauen.

> wenn man eine Weile wartet will er von der SD booten, was aber bisher
> nicht richtig funktioniert? Wie andere auch das Problem mit den
> Speicherkarten, hab jetzt 6 verschiedene durch.. eine bootet anscheinend
> richtig, allerdings sind keine Dateien vorhanden??!!

Bevor die RAM-Fehler nicht weg sind, brauchst Du mit SD-Karten gar nicht 
anfangen.

> Bisher etwas unbefriedigend...na mal sehen.

Shit happens...

von Leo C. (rapid)


Lesenswert?

Frank Zoll schrieb:
> Ach ja, zu eurem Leidwesen habe ich hier mal eben riesen Parts des
> Quellcodes umgeschaufelt und neu zusammen gestrickt. Ich habe die Datei
> "remainders.asm" ziemlich leer gemacht. Da ist kaum was über geblieben.

So war das mit mit der Datei auch gedacht. Da war alles drin, für das 
ich noch keinen neuen Platz gefunden hatte.

>
> Bei mir siehts nun so aus:
>
> virt_ports.asm  Hier sind die virtuellen Ports und die hilfsroutinen für
> den UART- Zugriff über Ports.
> dsk_fsys.asm  Hier liegen die Grundroutinen des virtuellen Dateisystems
> dsk_cpm.asm  Hier liegen die Routinen für den Zugriff auf CP/M
> Partitionen
> dsk_fat.asm  Hier liegen die Routinen für den Zugriff aus FAT16
> Partitionen
> dsk_ram.asm  Hier liegen die Routinen für den Zugriff auf Ramdisk
> Partitionen
> dsk_mgr.asm  Hier liegen die Routinen für die
> Partitionstabellenverwaltung

Sieht gut aus.
Man könnte sich überlegen den Assembler auf GNU avr-as umzustellen, 
damit man aus den Dateien getrennte Übersetzungseinheiten machen kann.

> Um das ganze nett aussehen zu lassen habe ich die Tabelle hostparttbl um
> ein Byte erweitert. Jeder Eintrag dort wird nun angeführt von einem
> Byte, das den Typ der jeweiligen Partition wiederspiegelt.
> (0=None,1=CP/M,2=Fat,3=RAM). Im moment baue ich gerade alle Routinen so
> um, das sie dieses Byte erkennen können und dann jeweils die für die
> Partition richtigen lese/schreib routinen aufrufen.

> Im moment läuft nix mehr, aber ich hoffe ich bekomme das noch wieder ans
> laufen :-)

Ich werde den jetzigen Stand mal einfrieren und eine Version draus 
machen.
Hat jemand einen Vorschlag für eine Versionsnummer? :)
Deine Änderungen werden dann die nächste Version.

von Leo C. (rapid)


Lesenswert?

Frank Zoll schrieb:
> Es gibt
> einige Cards bei dehnen ist das Timing besonders kritisch. Die Karte die
> bei mir nicht wollte war eine 1GB-Platinum Card von Reichelt.

Würde es Dir sehr viel Mühe bereiten, die Platinum-Karte nochmal mit 
Softwarerevision 91 zu testen?
Die kannst Du z.B. über folgenden Link bekommen:
http://cloudbase.homelinux.net/viewvc/avr-cpm/branches/modules/avrcpm/avr/?view=tar&pathrev=91

> http://www.mikrocontroller.net/articles/MMC-_und_SD-Karten ).

Zitat: "Die MMC-Implementierung für AVR von Elm Chan z. B. funktioniert 
mit SanDisk problemlos hat aber mit Platinum Karten ein Problem."

Die aktuellen MMC-Routinen sind im wesentlichen die von Chan, nur in 
Assembler. Die älteren von Sprite_tm sind bis Rev. 91 noch drin und 
teilweise anders.

von Peter S. (petersieg)


Lesenswert?

@all: Mit Platinum Karten (auch CF - Amiga) habe ich keine guten 
Erfahrungen gemacht.. kaufe ich seitdem nicht mehr..

@Leo C. Vorschlag für Versionsnummer.. eigendlich hätte es schon einige 
geben müssen.. ;-) Ich nehme immer völlig unortodox das Datum in der 
Form:
YYYYMMDD - so weiß man immer gleich was die neueste Version ist und wann 
diese zeitlich anzusiedeln ist ;-)

Peter

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo,
nun rennt's..... wer lesen kann ist klar im Vorteil....
Hatte bei assemblieren den 4bit Ram teil mit drin...und somit die 
Fehler..
allerdings habe ich den SPI Clock auf /4 es laufen jetzt 2 Platinium 
1Gb, eine SD 16Mb von Thoshiba und eine MMC 256Mb vom Medion.....
nun muss ich mal sehen wie ich Programme auf die Kartenimages bekomme...


CPM on an AVR, v1.0
Testing RAM: fill...wait...reread...
Initing mmc...
CP/M partition at: 060, size: 6930KB.
CP/M partition at: 13920, size: 8700KB.
CP/M partition at: 31320, size: 7830KB.
CP/M partition at: 46980, size: 7830KB.
Partinit done.
Ok, CPU is live!
ipl

62k cp/m vers 2.2

A>dir
A: ASM      COM : DDT      COM : DUMP     COM : ED       COM
A: T        COM : LOAD     COM : MBASIC   COM : PIP      COM
A: STAT     COM : SUBMIT   COM : XSUB     COM : ZORK1    COM
A: ZORK1    DAT
A>

Gruß
Hans- Werner

von Frank Z. (fzoll)


Lesenswert?

Leo C. schrieb:
> Frank Zoll schrieb:
>> Es gibt
>> einige Cards bei dehnen ist das Timing besonders kritisch. Die Karte die
>> bei mir nicht wollte war eine 1GB-Platinum Card von Reichelt.
>
> Würde es Dir sehr viel Mühe bereiten, die Platinum-Karte nochmal mit
> Softwarerevision 91 zu testen?

Ich habe mir heut morgen mal schnell die neuere Version gezogen und es 
ausprobiert. Habs aber auf Anhieb nicht gleich ans laufen bekommen und 
musste recht schnell aufgeben. Er hat einmal ganz kurz die Platinum Disk 
erkannt, sich dann aber irgendwie aufgehängt. Nach dem Aufhängen kahm 
keine Verbidung mehr zum Terminal zustande. Erst nachdem ich wieder 
meine eigene Entwicklung aufgespielt habe, hat sich der Rechner wieder 
gemeldet.

Wie ich sehe scheint es nicht unbedingt nur an der Marke "Platinum" zu 
liegen. Zwei 1GB- Karten scheinen bei Hans Werner ja zu laufen. Ich 
denke einfach mal, das meine SD-Card bereits eine macke hat. Wer ganz 
oben mitgelesen hat, wird ja schon sehen das die Karte auch unter 
SUSE-11.2 nicht ans laufen zu bringen war. Immer wenn ein HighSpeed 
zugriff statt fand, brach die Verbindugn zur Karte ab. Ich hab die Karte 
mitlerweile mal versucht mit meinen HIVE ans laufen zu bekommen. Auf dem 
HIVE ziegt sich da ein ähnlicher Fehler. Die Karte wird nur ab und zu 
mal erkannt.

Ich denke einfach mal das die Karte bereits einen kleinen Schaden weg 
hat. Aber seltsam ist's schon das sie unter Window noch ansprechbar ist.

Freundliche Grüße
Frank

von Egmont (Gast)


Lesenswert?

Leo C. schrieb:

> Egmont, es kann gut sein daß Frank Recht hat. Es kann aber auch sein,
> daß überhaupt keine CP/M-Partition auf Deiner Karte ist.
> Kannst Du nochmal einen Versuch mit "MMC_DEBUG = 3" machen?
> Vorzugsweise mit der neuesten Programmversion von meinem SVN-Server:
> http://cloudbase.homelinux.net/viewvc/avr-cpm/bran...
>
> Da sind geringfügig erweiterte Debugmeldungen drin. Es geht aber auch
> mit Deiner jetzigen Version.
>


Danke Leo für deine schnelle Antwort.

Habe neue Software vom Link übersetzt und geladen...
hier mein Bugreport:

CPM on an AVR, v1.0
Testing RAM: fill...wait...reread...
Initing mmc...
mmcInit SPI_CLK_SLOW <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
mmcCMD: 00 00000000 <FF <FF <FF >40 .. 95>95 <FF <01  CMDRes: 01
mmcCMD: 08 000001AA <FF <FF <FF >48 .. 87>87 <FF <05  CMDRes: 05
mmcCMD: 37 00000000 <FF <FF <FF >77 .. 01>01 <FF <01  CMDRes: 01 mmcCMD: 
29 00000000 <FF <FF <FF >69 .. 01>01 <FF <01  CMDRes: 01
mmcCMD: 37 00000000 <FF <FF <FF >77 .. 01>01 <FF <01  CMDRes: 01 mmcCMD: 
29 00000000 <FF <FF <FF >69 .. 01>01 <FF <00  CMDRes: 00
mmcCMD: 10 00000200 <FF <FF <FF >50 .. 01>01 <FF <00  CMDRes: 00 <FF
 CT: 02 InitRes: 00 SPI_DISABLE
mmcRdSect SPI_CLK_FAST
mmcCMD: 11 00000000 <FF <FF <FF >51 .. 01>01 <FF <00  CMDRes: 00 <FF <FF 
<FE <00 <08 <FF SPI_DISABLE RdSectRes: 00 No bootable CP/M disk found! 
Please change MMC/SD-Card.

Ist es möglich deine(oder von Joe) CP/M-System-Datei zur verfügung zu 
stellen, sodass ich die mit DD.exe auf meine SD-Karte übertrage kann 
(Laufwerk A:).

Ich selber habe die SD-Karte von  extre-me-mory und Medion... beide 1GB.

Gruß Egmont

von hschuetz (Gast)


Lesenswert?

Hallo,
ich habe alles mit den SD Karten mit einem Debian System gemacht, 
anscheinend ist aber das AVR Programm entscheidend.
Die 1Gb Karten sind auch ein bisschen ziggig... wenn man die Karten 
unter Spannung zieht!!! das hat teilweise die komplette Zerstörung der 
Daten zur Folge!!
Gruß
Hans- Werner

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Egmont schrieb:
>  CT: 02 InitRes: 00 SPI_DISABLE

Die Karte wurde ohne Fehler initialisiert.

> mmcRdSect SPI_CLK_FAST
> mmcCMD: 11 00000000 <FF <FF <FF >51 .. 01>01 <FF <00  CMDRes: 00 <FF <FF
> <FE <00 <08 <FF SPI_DISABLE RdSectRes: 00

Sektor 0 der Karte (Partitionstabelle) wurde ohne Fehler gelesen.

> No bootable CP/M disk found!

Auf der Karte ist keine CP/M-Partition (Type 52), und am Anfang der 
Karte ist kein CP/M-Diskimage.

> Ist es möglich deine(oder von Joe) CP/M-System-Datei zur verfügung zu
> stellen, sodass ich die mit DD.exe auf meine SD-Karte übertrage kann
> (Laufwerk A:).

Ich habe mal ein Diskimage hier angehängt. Das kannst Du mit dd auf eine 
SD-Karte kopieren. Entweder direkt an den Anfang einer Karte (der alte 
Inhalt der Karte geht dabei komplett verloren), oder in eine primäre 
Partition. Die Partition muß Typ 52 haben. Wie das unter Windows geht, 
weiß ich nicht.

von Leo C. (rapid)


Lesenswert?

Hallo Hans-Werner,

herzlichen Glückwunsch zu Deinem neuen funktionierenden CP/M-System.

hschuetz schrieb:
> Die 1Gb Karten sind auch ein bisschen ziggig... wenn man die Karten
> unter Spannung zieht!!! das hat teilweise die komplette Zerstörung der
> Daten zur Folge!!

Das ist mir noch nie passiert. Ich ziehe die Karten an manchen Tagen 20 
mal oder noch öfter. Hauptsächlich teste ich mit einer 2G Intenso. Die 
Karte fällt jetzt zum 2. Mal auseinander. Ich hatte sie schon mal mit 
Sekundenkleber zusammengeklebt und mit 2-Komponentenkleber in Form 
gebracht (Schreibschutzschieber war abgefallen). Ich habe aber auch noch 
2 verschiedene 1G Karten und eine 2G Mikro-SD-Karte im Test.

von Frank Z. (fzoll)


Lesenswert?

Halloe.

Mal ein kurzer Status der FAT16 implementierung. Ich kämpfe mich gerade 
durch die Strukturen von Bootblock, FAT und Direktory. Habe schon die 
korrekten Positionen von Bootblock, FAT, und Root- Direktory auf meiner 
Testpartition gefunden. Morgen schaue ich dann mal, das ich das Root- 
Verzeichniss nach den Image-Dateien durchsuche.
1
Initing mmc...
2
fat16 part found
3
fat16 scanning
4
free entrys in ptable ?
5
read fat bootblock.
6
fat16 bootblock check
7
Bytes per Sector 0200
8
Sectors per Cluster 20
9
Reserved Sectors__: 0001
10
Sectors per FAT__: 00D7
11
Ammount of FAT copies: 02
12
Max. entrys in Rootdir.: 0200
13
Begin of Volume at: 0000003F
14
Begin of FAT at___: 00000040
15
Begin of DIR at___: 000001EE
16
17
CP/M partition at: 1757875, size: 9728KB.
18
CP/M partition at: 1777406, size: 9728KB.
19
CP/M partition at: 1796937, size: 73344KB.
20
Partinit done.
21
Ok, CPU is live!
22
23
ipl
24
62k cp/m vers 2.2
25
26
A>

Grüße
Frank

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo,
hat sich schon jemand mit dem kleineren Teil der Platine befasst??
Ja das VGA Terminal...
Gruß
Hans- Werner

von Frank Z. (fzoll)


Lesenswert?

Hans- w. Schütz schrieb:
> hat sich schon jemand mit dem kleineren Teil der Platine befasst??
> Ja das VGA Terminal...

Um erlich zu sein, bisher nicht. Mir fehlen dummerweise noch die 3 470 
Ohm 1206er SMD Widerstände vor der VGA- Buchse. So konnte ich den Teil 
der Platine leider noch nicht fertig stellen. Naja und nur für die 3 
Widerstände ne Bestellung aufgeben, das wiederstrebte mir. Hab gerad nix 
anderes, das ich noch mitbestellen könnte.

Grüße
Frank

von Peter Z. (flexopete)


Lesenswert?

Moin Frank,

wenn Du mir Deine Adresse mailst, pack ich die in 'nen
Briefumschlag.
Softwaretechnisch kann ich eh nicht unterstützen, komme
mehr von der Hardware und da auch nicht unbedingt von
den Mikrocontrollern.

Gruss
Peter

von Frank Z. (fzoll)


Lesenswert?

Halloe.

Wieder ein kleines Stück voran gekommen.
1
CP/M partition at: 1757875, size: 9728KB.
2
CP/M partition at: 1777406, size: 9728KB.
3
CP/M partition at: 1796937, size: 73344KB.
4
FAT16 File-Image at: 005, size: 256258Bytes.
5
Partinit done.
6
Ok, CPU is live!

Nun läßt sich der Dateianfang bereits erfolgreich lokalisieren. Als 
nächstes muss ich noch eine Methode bauen, die sich Cluster für Cluster 
zu einem beliebigen "Zielsektor" vorarbeiten kann. Dann kann ich das 
Laden und Speichern der Sektoren so anpassen, das Sektoren aus dem Image 
gelesen und geschreiben werden können. Vorher muss ich nur noch klären, 
wieso da oben 256258 Bytes steht und nicht 256256. Denn die Datei ist 
genau 256256 Bytes groß, irgenwie haben sie da 2 zusatzbytes 
eingeschlichen :-) Die Zahl 005 gibt die Nummer des ersten Clusters der 
Datei an. Diese Zahl speichere ich nun zusammen mit dem Partitionstyp in 
der internen Partitionstabelle. Damit lassen sich später sowohl der 
Dateianfang als auch der erste Cluster in der FAT schnell wiederfinden.

Grüße
Frank

von Peter S. (petersieg)


Lesenswert?

@all: Mann! Schön, das sich hier so viel tut!! Wer hätte das mal 
gedacht.. das sich aus dem 'Proof of concept' mal ein (fast) 
vollwärtiges CP/M System
entwickelt...

Ich bin zur Zeit mit CC 2010 (Verein zum Erhalt klassischer Computer) 
Messe/Treffen-Vorbereitungen etwas arg ausgelastet und komme daher zur 
Zeit zu fast nicht anderem mehr.. aber der nächste 'Winter' kommt 
bestimmt.. ;-)

Weiter so!

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@alle: Ich bin beeindruckt was hier so alles passiert, wenn man eine 
Woche nicht im Lande ist... Wichtig für noch alle weiteren potentiellen 
Nachbauer und natürlich auch für die aktuelle Dokumentation, wäre die 
Information ob Layout und Schaltung fehlerfrei sind (PWREN# habe ich 
schon). Da einige „neue“ Systeme schon arbeiten, gehe ich mal davon aus 
oder irre ich?
Gruß Joe

von Egmont (Gast)


Lesenswert?

Joe G. schrieb:
> @alle: Ich bin beeindruckt was hier so alles passiert, wenn man eine
> Woche nicht im Lande ist... Wichtig für noch alle weiteren potentiellen
> Nachbauer und natürlich auch für die aktuelle Dokumentation, wäre die
> Information ob Layout und Schaltung fehlerfrei sind (PWREN# habe ich
> schon). Da einige „neue“ Systeme schon arbeiten, gehe ich mal davon aus
> oder irre ich?
> Gruß Joe

Hallo Joe,
beim Layout von der VGA-Karte kann ich nur sagen das die drei 
Widerstände 470 ohm an der Sub-D Buche sehr Dicht anliegen,
Meine Buchse ist komplett mit Kunststoff umgeben (habe da was 
weggefräst) und somit gab es da keine Probleme.

Wo ist den für die Mini-VGA die Software abgelegt ??

Gruß Egmont

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Egmont schrieb:
> die drei
> Widerstände 470 ohm an der Sub-D Buche sehr Dicht anliegen

Vielen Dank für den Hinweis!

Für die VGA gibt es noch keinen Code außer das Original, siehe hier:
Beitrag "AVR VGA Terminal"

von Hans- w. S. (hschuetz)


Lesenswert?

@Joe,Feinmechaniker
pin 8 sollte doch an Masse liegen?? oder? Bei beiden AVR's liegen die 
Anschlüsse in der Luft! Allerdings auch im Schaltplan!! Der Quarz hängt 
auch in der Luft.
Gruß Hans- Werner

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Hans- w. Schütz schrieb:
> pin 8 sollte doch an Masse liegen??
> Der Quarz hängt auch in der Luft.

DANKE!

Ja, sicher... dumme Sache mit Pin 8!
Beim Quarz ist es so gewollt. Die Jumperkonfiguration bot aus 
Platzmangel keine andere Mögtlichkeit. Wird ein Quarz verwendet, so muß 
eine kleine Brücke zwischen Quarz und Pin 9 gelegt werden.

Also für alle:
- Pin 8 (beide AVR) auf Masse legen.
- Quarzbestückung bei IC1 - Pin 9 des AVR mit dem Quarz verbinden (siehe 
Schaltung)

Joe

von hschuetz (Gast)


Lesenswert?

Hallo,
hat denn einer schon etwas mit der VGA hinbekommen?
Irgendwie bin ich zu "dusselig" die Original Sourcen zu compilieren, 
immer massenhaft Fehlermeldungen?!!
Gruß
Hans- Werner

von Egmont (Gast)


Lesenswert?

Frank Zoll schrieb:
> Halloe.
>
> Wieder ein kleines Stück voran gekommen.CP/M partition at: 1757875, size: 
9728KB.
> CP/M partition at: 1777406, size: 9728KB.
> CP/M partition at: 1796937, size: 73344KB.
> FAT16 File-Image at: 005, size: 256258Bytes.
> Partinit done.
> Ok, CPU is live!

@Frank,
was macht deine Software mit FAT16...

@ALLE
habe immer noch nicht das Problem gelöst das ich auf meine SD-Karte ein 
Bootprojekt finde.

Leo C. schrieb:
> Auf der Karte ist keine CP/M-Partition (Type 52), und am Anfang der
> Karte ist kein CP/M-Diskimage.

Habe mit ein Hexeditor mal auf meine SD-Karte geschaut und die Daten von 
diskimage dort gefunden, dirkt am Anfang der Karte (vermute mal das das 
so richtig ist).      Nur was ist mit Type 52 gemeint ????
habe mit "DD if=diskimage of=\\.\f:" die Datei auf SD kopiert, benötige 
ich noch Parameter die eine Partion vom Type 52 anlegt ??


Gruß Egmont

von Leo C. (rapid)


Lesenswert?

Egmont schrieb:

> Habe mit ein Hexeditor mal auf meine SD-Karte geschaut und die Daten von
> diskimage dort gefunden, dirkt am Anfang der Karte (vermute mal das das
> so richtig ist).      Nur was ist mit Type 52 gemeint ????

Hier ist die Partitionstabelle erklärt:
http://de.wikipedia.org/wiki/Partitionstabelle

Die Partitionstabelle liegt zusammen mit dem Bootloader im ersten Sektor 
einer Festplatte, bzw. Speicherkarte (MBR).

Man kann (jedenfalls beim avrcpm-Computer) die Partitionstabelle, bzw. 
den MBR aber auch weglassen. Dann beginnen die Nutzdaten im ersten 
Sektor. Und natürlich hat man dann auch nur ein CP/M-Diskimage, und der 
Rest der Karte ist nicht nutzbar.

> habe mit "DD if=diskimage of=\\.\f:" die Datei auf SD kopiert, benötige
> ich noch Parameter die eine Partion vom Type 52 anlegt ??

Ich kenne mich mit dem Windows-DD nicht genug aus, um sagen zu können, 
ob "\\.\f:" in einer Partition liegt, oder am Anfang der Karte.

von Leo C. (rapid)


Lesenswert?

Vor kurzem bin ich zufällig über ein CP/M-Plugin für den "Total 
Commander" gestolpert:
http://hc-ddr.hucki.net/wiki/doku.php/cpm:disketten_xp2

Vielleicht ist das ja für den einen oder anderen Windowsbenutzer 
interessant.

Auf der gleichen Seite habe ich auch was zu zxcc von John Elliott 
gesehen:
http://hc-ddr.hucki.net/wiki/doku.php/cpm:windows

Das benutze ich schon eine Weile, um unter Linux das BIOS mit M80 zu 
assemblieren. Dieses, weil ich die Macrofähigkeiten des M80 für die 
Disk-Parameter-Tabellen nutze.

Zitat von der zxcc Homepage:
http://www.seasip.demon.co.uk/Unix/Zxcc/index.html
1
ZXCC is a two-purpose CP/M 2/3 emulator allowing:
2
 * Hi-Tech C for CP/M to be used as a cross-compiler under Unix.
3
 * The CP/M build tools (MAC, RMAC, GENCOM, LINK) to be used under DOS or Unix.

Vielleicht mag das ja mal jemand unter Windows testen.

von Peter Sieg (Gast)


Lesenswert?

Leo C. schrieb:
>> habe mit "DD if=diskimage of=\\.\f:" die Datei auf SD kopiert, benötige
>> ich noch Parameter die eine Partion vom Type 52 anlegt ??
>
> Ich kenne mich mit dem Windows-DD nicht genug aus, um sagen zu können,
> ob "\\.\f:" in einer Partition liegt, oder am Anfang der Karte.

Damit liegt das Image am Anfang der Karte.. daher ist es keine Partition 
und damit ist Part.Typ 52 auch irrelevant..

Ist denn der Artikel an dieser Stelle noch zu unverständlich..?:
[quote]
Das so erzeugete diskimage wird ROH (ohne Filesystem) mit:

dd if=diskimage of=<sd card identifier> bs=512

auf eine SD Karte geschrieben. Achtung! Alle anderen Dateien gehen dabei 
verloren!

Die aktuelle Version unterstützt ebenfalls bis zu 4 primäre CP/M = Typ 
52 Partitionen. Diese lassen sich mit einer Linux Live-CD und dem Tool 
'cfdisk' anlegen. Da z.Z die virtuellen Disketten nur ca. 250kb 'groß' 
sind, reicht es entsprechend große Partitionen azulegen (Ich habe 
trotzdem 8MB große angelegt.. für später). Wichtig dabei ist es den Typ 
auf 52 = CP/M zu setzen.. und schreiben/speichern nicht vergessen. Die 
einzelnen Partitionen werden dann ohne zu formattieren wieder mittels 
'dd if=diskimage of=[sd card partition] bs=512' gefüllt. Wird also die 
SD Karte unter Linux z.B als sdh angezeigt, so ist die erste Partition 
dann sdh1, die zweite sdh2 etc. of= ist dann also /dev/sdh1 /2 /3..

Ich habe übrigens die erste Partition als FAT eingerichtet und 
entsprechend formattiert. So kann man den großen Bereich weiter unter 
Windows nutzen. Und dann nur 3 CP/M Partitionen am Ende des 
Speicherbereiches angelegt..
[/quote]

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Vor kurzem bin ich zufällig über ein CP/M-Plugin für den "Total
> Commander" gestolpert:
> http://hc-ddr.hucki.net/wiki/doku.php/cpm:disketten_xp2
>
> Vielleicht ist das ja für den einen oder anderen Windowsbenutzer
> interessant.

Das habe ich vor Monaten schon mal getestet. Der Treiber greift direkt 
auf den Floppycontroller zu, also leider für uns in dieser Form 
ungeeignet :-(

Gerade gingen endlich die FT232 bei mir ein. Ich habe euch kleine 
Briefchen gesendet....

Joe

von Peter Sieg (Gast)


Angehängte Dateien:

Lesenswert?

Soo.. bin gerade dabei mich mit einem LR Aufbau einer 8-bit Variante zu 
beschäftigen.. Dazu ein paar Fragen:

1. Ich kann den 2ten Dram Chip Huckepack 1:1 auf den Ersten Chip löten - 
außer D0 - D3 (die 4 Datenbits)! Stimmt das so, oder sind noch 
irgendwelche anderen Pin's, die getrennt zu verbinden sind..?

2. Ich könnte doch auch 256k x 4 Drams nehmen.. für die 8-bit 
Variante..?
Klar ist es dann nicht 4MB, sondern nur 256k.. ;-) Vorteil für mich 
wäre, DIL Fassung!

Die Verdrahtung würde ich dann nach config.inc - 8-bit Teil vornehmen:
1
#if DRAM_8BIT  /* Implies software uart */
2
3
;Port D
4
.equ RAM_D0  = 0
5
.equ RAM_D1  = 1
6
.equ RAM_D2  = 2
7
.equ RAM_D3  = 3
8
.equ RAM_D4  = 4
9
.equ RAM_D5  = 5
10
.equ RAM_D6  = 6
11
.equ RAM_D7  = 7
12
.equ RAM_A0  = 0
13
.equ RAM_A1  = 1
14
.equ RAM_A2  = 2
15
.equ RAM_A3  = 3
16
.equ RAM_A4  = 4
17
.equ RAM_A5  = 5
18
.equ RAM_A6  = 6
19
.equ RAM_A7  = 7
20
21
;Port B
22
.equ RXD  = 0
23
.equ TXD  = 1
24
.equ MMC_CS  = 2
25
.equ MMC_MOSI  = 3
26
.equ MMC_MISO  = 4
27
.equ MMC_SCK  = 5
28
.equ RAM_A8  = 3
29
.equ RAM_A9  = 4
30
.equ RAM_A10  = 5
31
32
;Port C
33
.equ RAM_RAS  = 0
34
.equ RAM_CAS  = 1
35
.equ RAM_OE  = 2
36
.equ RAM_W  = 3

Pinouts von 256kx4 und 4Mx4 hänge ich hier mal an..

BTW: Ich will nur eine 3.3V Versorgung für das ganze System machen.
Und serielle Anbindung über TTL.

Passt das so.. oder habe ich irgendwas vergessen..?

Peter

von Frank Z. (fzoll)


Lesenswert?

Egmont schrieb:
> Frank Zoll schrieb:
>> Halloe.
>> CP/M partition at: 1777406, size: 9728KB.
>> FAT16 File-Image at: 005, size: 256258Bytes.
>
> @Frank,
> was macht deine Software mit FAT16...

Och das ist eigentlich ganz einfach zu erklären. Ich hab mich einfach zu 
dolle über Linux geärgert, weil ich immer wieder Probleme mit der 
Hardwareerkennung hatte. Daher suchte ich nach einer "einfacheren" 
möglichkeit um unter Windows die "Partitionen" für das CP/M Projekt 
anzulegen.

Meine Aktuelle Lösung sieht so aus:
- Ich suche die 1. FAT16 Partition die ich auf der SD-Card finden kann.
- Ich schaue im ROOT- Verzeichniss dieser Partition nach Dateien die 
diesem Schema entsprechen "CPMDSK_!.IMG" ( != Ein beliebieger Buchstabe 
A-Z )
- Diese Dateien müssen derzeit genau 256KB gross sein. Daher habe ich 
ein kleines Programm geschrieben das an die hier im Forum zu findenen 
Images einfach Nullen dranhängt, bis 256KB erreicht sind.
- Jede gefundene Datei wird als virtuelle Partition in das CP/M System 
eingebunden.
- Für das CP/M sieht der Zugriff über die Ports nacher genauso aus, wie 
bei den "echten" CP/M Partitionen.
- Ach ja. Da echte CP/M Partitionen einen schnelleren Zugriff erlauben, 
werden diese bevorzugt an den Anfang der Liste der "virtuellen" 
Laufwerke gesetzt. Eine Mischung auf CP/M und FAT16 Partitionen ist 
somit dann auch möglich.

Mit diesen Lösung spart man sich das Partitionieren der SD- Card unter 
Linux und den ständigen wechsel zwischen Windows und Linux zum kopieren 
der CP/M Images. Die per CPMTOOLS angelegten Diskettenimages kann man 
nach dem "aufpusten" auf 256KB praktisch direkt verwenden.

Ich bin in den letzten Tagen nicht zum Coden gekommen. Aktuell muss ich 
"nur noch" die Funktion schreiben, die aus einer CP/M- Sektorangabe 
einen Sektor aus der Diskimage- Datei ermittelt. Schreiben und Lesen der 
Sektoren werde ich danach wieder über die bereits bestehenden MMC- 
Zugriffsrotuinen abwickeln. Ich denke das ich da noch 3-4 Abende rein 
stecken muss, bis es endlich richtig läuft. Sobald ich es am laufen habe 
werde ich hier mal ein Archiv mit meiner Version posten.

Mit dem zur Verfügung stehenden Speicher werden wir auskommen. Aktuell 
liegt der Speicherverbrauch bei meinem Atmega168 Version bei:
Flash 9196 von 16384 genutzt.
SRAM 930 von 1024 genutzt.
EEPROM noch leer.

Grüße
Frank

von Leo C. (rapid)


Lesenswert?

Frank Zoll schrieb:

> - Diese Dateien müssen derzeit genau 256KB gross sein.

Nicht mehr lange:
1
A>^C
2
drvtbl (F233): F28F F652 F6A0 0000 0000 0000 0000 0000 ...
3
drvtbl (F233): F28F 0000 0000 0000 0000 0000 0000 0000 ...
4
Heap init: Start: F652,bytes free: 2478 
5
Heap get: 016, 
6
Heap get: 015, 
7
Heap get: 016, 
8
Heap get: 031, 
9
Heap get: 016, 
10
Heap get: 015, 
11
Heap get: 048, 
12
Heap get: 064, 
13
Heap get: 016, 
14
Heap get: 015, 
15
Heap get: 128, 
16
Heap get: 256, 
17
drvtbl (F233): F28F F652 F6A0 F72F 0000 0000 0000 0000 ...
18
A>stat b:
19
20
Bytes Remaining On B: 95k
21
22
A>stat c:
23
24
Bytes Remaining On C: 980k
25
26
A>stat d:
27
28
Bytes Remaining On D: 7692k
29
30
A>stat dsk:
31
32
    A: Drive Characteristics
33
 1944: 128 Byte Record Capacity
34
  243: Kilobyte Drive  Capacity
35
   64: 32  Byte Directory Entries
36
   64: Checked  Directory Entries
37
  128: Records/ Extent
38
    8: Records/ Block
39
   26: Sectors/ Track
40
    2: Reserved Tracks
41
42
    B: Drive Characteristics
43
 1944: 128 Byte Record Capacity
44
  243: Kilobyte Drive  Capacity
45
   64: 32  Byte Directory Entries
46
   64: Checked  Directory Entries
47
  128: Records/ Extent
48
    8: Records/ Block
49
   26: Sectors/ Track
50
    2: Reserved Tracks
51
52
    C: Drive Characteristics
53
 8128: 128 Byte Record Capacity
54
 1016: Kilobyte Drive  Capacity
55
  192: 32  Byte Directory Entries
56
  192: Checked  Directory Entries
57
  128: Records/ Extent
58
   16: Records/ Block
59
   32: Sectors/ Track
60
    2: Reserved Tracks
61
62
    D: Drive Characteristics
63
65472: 128 Byte Record Capacity
64
 8184: Kilobyte Drive  Capacity
65
  512: 32  Byte Directory Entries
66
  512: Checked  Directory Entries
67
  256: Records/ Extent
68
   32: Records/ Block
69
   32: Sectors/ Track
70
    2: Reserved Tracks
71
72
A>

Es ist aber noch einiges zu tun.

> Zugriffsrotuinen abwickeln. Ich denke das ich da noch 3-4 Abende rein
> stecken muss, bis es endlich richtig läuft. Sobald ich es am laufen habe
> werde ich hier mal ein Archiv mit meiner Version posten.

Hast Du meine Mail bekommen?

> liegt der Speicherverbrauch bei meinem Atmega168 Version bei:
> Flash 9196 von 16384 genutzt.
> SRAM 930 von 1024 genutzt.
> EEPROM noch leer.

Da wäre noch Platz für einen Monitor. :-)

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Soo.. bin gerade dabei mich mit einem LR Aufbau einer 8-bit Variante zu
> beschäftigen.. Dazu ein paar Fragen:
>
> 1. Ich kann den 2ten Dram Chip Huckepack 1:1 auf den Ersten Chip löten -
> außer D0 - D3 (die 4 Datenbits)! Stimmt das so, oder sind noch
> irgendwelche anderen Pin's, die getrennt zu verbinden sind..?

Welche sollten das den sein?

Huckepack mit SOJ-Gehäusen geht gut, wenn man beim oberen Chip die Pins 
gerade nach unten biegt.
Dazu hatte ich schon mal ein Bild gepostet:
Beitrag "Re: CP/M auf ATmega88"

> 2. Ich könnte doch auch 256k x 4 Drams nehmen.. für die 8-bit
> Variante..?

Du kannst tun und lassen was Du willst.

> Klar ist es dann nicht 4MB, sondern nur 256k.. ;-) Vorteil für mich
> wäre, DIL Fassung!

> Die Verdrahtung würde ich dann nach config.inc - 8-bit Teil vornehmen:
> [code]
> #if DRAM_8BIT  /* Implies software uart */

Oder einfach nach dem Schaltplan von Joe.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Leo C. schrieb:
>> Vor kurzem bin ich zufällig über ein CP/M-Plugin für den "Total
>> Commander" gestolpert:
>> http://hc-ddr.hucki.net/wiki/doku.php/cpm:disketten_xp2
>>
>> Vielleicht ist das ja für den einen oder anderen Windowsbenutzer
>> interessant.
>
> Das habe ich vor Monaten schon mal getestet. Der Treiber greift direkt
> auf den Floppycontroller zu, also leider für uns in dieser Form
> ungeeignet :-(

Nicht daß es wichtig wäre, aber ich verstehe die Webseite so, daß man 
auch direkt auf Floppies zugreifen kann. Aber genauso auch auf 
Diskimages.

Das ganze ist ja nur eine graphische Oberfläche zu libdsk und cpmtools, 
also zu dem, was wir auf der Kommandozeile eh schon haben.

Zitat: "Mein Plugin arbeitet mit CP/M-Disketten und Diskettenimages, 
die von libdsk unterstützt werden, also Teledisk, CopyQM, MyZ80, DSK, 
CFI, RAW, …"

von Peter Sieg (Gast)


Lesenswert?

Leo C. schrieb:
> Du kannst tun und lassen was Du willst.

Danke Leo.. du bist wirklich sehr nett ;-) (Und hast einen besonderen 
Humor) Sicher ist dir klar, das ich damit fragen wollte, das es da auch 
mit der Firmware klappt.. macht ja keinen Sinn sowas aufzubauen, wenn es 
dann nachher mit der Software nicht geht.. ;-)

Und vom Schaltplan.. da wäre es einfacher ohne Bus.. so muß man in Eagle 
jede Verbindung anklicken und sehen, was mit was verbunden ist bzw. den 
Signalnamen prüfen.. da ist so eine einfache Verbindungsliste für mich
und einen LR Aufbau einfacher..

Und wie ich sehe hast du dich schon an den disk Parametern dran 
gesetzt..
Supi!! Dann gibts ja bald Images/Partitionen >243kb ;-)

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> da wäre es einfacher ohne Bus.. so muß man in Eagle
> jede Verbindung anklicken und sehen, was mit was verbunden ist bzw. den
> Signalnamen prüfen

nö, ich habe jede Busleitung beschriftet. z.B.
D0_A0 | RAM Pin 9
D0_A0 | AVR Pin 2 usw.

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Leo C. schrieb:
>> Du kannst tun und lassen was Du willst.
>
> Danke Leo.. du bist wirklich sehr nett ;-) (Und hast einen besonderen
> Humor)

Man tut, was man kann.

> Sicher ist dir klar, das ich damit fragen wollte, das es da auch
> mit der Firmware klappt.. macht ja keinen Sinn sowas aufzubauen, wenn es
> dann nachher mit der Software nicht geht.. ;-)

Ich habe mich wirklich sehr gewundert, daß diese Frage ausgerechnet von 
Dir kommt. Ich könnte mir vorstellen, daß Du die Antwort sogar in Deinen 
eigenen Artikeln hier finden könntest.

> Und vom Schaltplan.. da wäre es einfacher ohne Bus.. so muß man in Eagle
> jede Verbindung anklicken und sehen, was mit was verbunden ist bzw. den
> Signalnamen prüfen.. da ist so eine einfache Verbindungsliste für mich
> und einen LR Aufbau einfacher..

Zu dem Teil ist ja gerade eine Antwort von Joe reigekommen.

> Und wie ich sehe hast du dich schon an den disk Parametern dran
> gesetzt..
> Supi!! Dann gibts ja bald Images/Partitionen >243kb ;-)

Die grundsätzlichen Funktionen sind schon mal vorhanden. Aber ich habe 
noch ein kleines Henne-Ei-Problem. Ich brauche Daten aus dem Bios, um 
das Bios zu laden...

Übrigens wird man einige bekannte Diskimageformate, zB. MyZ80, (nahezu) 
direkt verwenden können: Header abschneiden, neuen Header dranpappen, 
fertig.

von Peter Sieg (Gast)


Lesenswert?

@Leo C./Joe: Ich bin mir bei der Verdrahtung ja auch zu 99,9% sicher.. 
ebendso bei der Antwort zu der Frage, ob nur D0-D3 NICHT verbunden 
werden.. alle anderen Pin's ja.. bin ich zu 99,89763% sicher.. wäre nur 
schön gewesen
einfach mal zu hören: Ja, genau.. oder Jup, so isses.. ;-)

;-)

Peter

von Peter Sieg (Gast)


Lesenswert?

Argh.. kann nicht editieren.. sorry..
@Joe: Ja jetzt sehe ich die Beschriftung.. prima.. werde ich dann groß 
ausdrucken und für den LR Aufbau nutzen.. Danke!

Peter

von Egmont (Gast)


Lesenswert?

Hallo an Alle....
Peter Sieg schrieb:
> Die aktuelle Version unterstützt ebenfalls bis zu 4 primäre CP/M = Typ
> 52 Partitionen. Diese lassen sich mit einer Linux Live-CD und dem Tool
> 'cfdisk' anlegen. .....

Habe mir eine Koppix besorgt und habe es jetzt am laufen
######################################
CPM on an AVR, v32.10
Testing RAM: fill...wait...reread...
Initing mmc...
CP/M partition at: 1895040, size: 8064KB.
CP/M partition at: 1911168, size: 8064KB.
CP/M partition at: 1927296, size: 8064KB.
Partinit done.
Ok, CPU is live!

ipl
62k cp/m vers 2.2

A>
######################################
habe jetzt noch eine Partition die 960MB belegt, noch drauf.. so wie 
Peter das geschrieben hat.
Aber Linux ist nicht so mein Ding und wäre Happy wenn das mit FAT16 
klappt.
     Gruß Egmont

von Peter Sieg (Gast)


Lesenswert?

@Egmont: Prima! Ja, die FAT16 Unterstützung mit einfachen Diskimages 
dürfte die Sache für uns Win$ User sicher vereinfachen..

Peter

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

So sieht sie aus, die Version 2.0
Joe

von Frank Z. (fzoll)


Lesenswert?

So,
hat leider etwas länger gedauert als gedacht aber hier mal ein kurzes 
Update. Ich hab soeben das erste mal lesend auf ein Diskimage auf meiner 
FAT16 Partition zugreifen können. Das anzeigen des Directorys und der 
Programmstart funktionieren. Das schreiben hab ich vorsichtshalber 
erstmal abgestellt, bis ich sicher bin, das die Schreibopüerationen auch 
immer schön in die Datei gehen und nicht daneben. :-)

Ich habe Leo eben mal eine kleine Vorabversion zum testen geschickt. 
Sobald die letzten Macken beseitigt sind und der neue Code auch schön 
aufgeräumt ist, gibts hier ein kleines Release.
1
CP/M partition at: 1757875, size: 9765KB.
2
CP/M partition at: 1777406, size: 9765KB.
3
CP/M partition at: 1796937, size: 73464KB.
4
FAT16 File-Image at: 005, size: 250KB.
5
Partinit done.
6
Ok, CPU is live!
7
8
ipl
9
62k cp/m vers 2.2
10
11
A>d:
12
D>dir
13
D: ASM      COM : DDT      COM : DUMP     COM : ED       COM
14
D: T        COM : TLOOP    COM : LOAD     COM : MBASIC   COM
15
D: 23       BAS : BAGELS   BAS : CHECKERS BAS : STARTREK BAS
16
D: TREKINST BAS : MASTRMND BAS : WEEKDAY  BAS : PIP      COM
17
D: STAT     COM : SUBMIT   COM : XSUB     COM : ZORK1    COM
18
D: ZORK1    DAT
19
D>mbasic
20
39417 Bytes free
21
BASIC Rev. 4.51
22
[CP/M Version]
23
Copyright 1977 (C) by Microsoft
24
Ok

Grüße
Frank

von Peter Z. (flexopete)


Lesenswert?

moin,
auch ich konnte die org VGA-Software nicht
übersetzen.
mfg
Peter

von Leo C. (rapid)


Lesenswert?

Frank Zoll schrieb:
> So,
> hat leider etwas länger gedauert als gedacht aber hier mal ein kurzes
> Update. Ich hab soeben das erste mal lesend auf ein Diskimage auf meiner
> FAT16 Partition zugreifen können. Das anzeigen des Directorys und der
> Programmstart funktionieren. Das schreiben hab ich vorsichtshalber
> erstmal abgestellt, bis ich sicher bin, das die Schreibopüerationen auch
> immer schön in die Datei gehen und nicht daneben. :-)
>
> Ich habe Leo eben mal eine kleine Vorabversion zum testen geschickt.
> Sobald die letzten Macken beseitigt sind und der neue Code auch schön
> aufgeräumt ist, gibts hier ein kleines Release.

Zum Ausprobieren ist jetzt alles auf:
http://cloudbase.homelinux.net/viewvc/avr-cpm/trunk/avrcpm/avr/

Oder inzwischen auch besser mit SVN-Client (z.B. Tortoise SVN) auf:
http://cloudbase.homelinux.net/svn/avr-cpm/trunk/avrcpm/avr/

Die Reste aus "remainders.asm" haben jetzt auch ihre eigenen Dateien 
bekommen. Außerdem habe ich für Jump und Call Makros gebaut, die je nach 
Prozessor und Sprungweite den passenden rjmp/jmp, bzw. rcall/call Befehl 
verwenden.

Bei mir assemblieren alle Prozessor-/RAM-Kombinationen mit und ohne 
FAT16-Unterstützung (Mega8 und 88 nur ohne FAT16).

Das ist alles nur zum Testen und noch nicht unbedingt stabil. Z.B. passt 
das BIOS aus trunk nicht mehr dazu. Bitte das BIOS aus dem stabilen 
Zweig nehmen.

von Leo C. (rapid)


Lesenswert?

Zur Zeit muß die FAT16-Partition den Typ 0E haben. Da wir nur 
LBA-Adressierung verwenden, wäre das eigentlich auch richtig. Gängig ist 
aber auch Typ 6, der nicht erkannt wird. Sicher könnte man das umstellen 
oder Typ 6 zusätzlich einbauen. Es stellt sich nur die Frage, was 
sinnvoll ist.

"Meine" Partitionstypenreferenz 
(http://www.win.tue.nl/~aeb/partitions/partition_types-1.html) meint 
dazu:
1
06 DOS 3.31+ 16-bit FAT (over 32M)
2
    Partitions, or at least the FAT16 filesystems created on them, are at
3
most 2 GB for DOS and Windows 95/98 (at most 65536 clusters, each at most
4
32 KB). Windows NT can create up to 4 GB FAT16 filesystems (using 64 KB
5
clusters), but these cause problems for DOS and Windows 95/98. Note that
6
VFAT is 16-bit FAT with long filenames; FAT32 is a different filesystem.
7
8
0e WIN95: DOS 16-bit FAT, LBA-mapped
9
0f WIN95: Extended partition, LBA-mapped
10
    Windows 95 uses 0e and 0f as the extended-INT13 equivalents of 06 and
11
05. For the problems this causes, see Possible data loss with LBA and
12
INT13 extensions. (Especially when going back and forth between MSDOS and
13
Windows 95, strange things may happen with a type 0e or 0f partition.)
14
Windows NT does not recognize the four W95 types 0b, 0c, 0e, 0f ( Win95
15
Partition Types Not Recognized by Windows NT). DRDOS 7.03 does not support
16
this type (but DRDOS 7.04 does).


Das Linux/Gnome Partitionierprogramm "gparted" ist übrigens besonders 
schlau ;-( Es hat einen Dialog, in dem man "Markierungen/Flags" 
einstellen kann. Schaltet man das LBA-Flag ein, wird der Partitionstyp 
von 6 auf E umgestellt.

von Egmont (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
wollte mal was über den Bootloader schreiben den ich benutze:

Bootloader von Peter Dannegger
http://www.mikrocontroller.net/articles/AVR_Bootloader_FastBoot_von_Peter_Dannegger

- Boot_168.hex in ATMega168 laden
- Fusebit auf "BOOTRST" und 512k stellen
- FBoot.exe ins Verzeichniss kopieren wo auch die avrcpm.hex ist.

- FBoot ausführen mit folgenden Parameter
  oder Flash.bat

fboot /C2 /B9600 /Pavrcpm.hex
        ^   ^      ^
        |   |      |
        |   |      +- Hex-File
        |   +-------- Baudrate
        +------------ Comport (1-4)

fboot funktioniert bei mir nur bis Win XP.
Erlaubter Comport von 1 bis 4
Der Bootloader hat eine automatische Baudratenerkennung und man kann
auch höhere Werte eingeben zb 38400
Tipp:
Mit dem FT232RL-Tool (MProg 3.5 Release) eine feste "USB Serial Number" 
vergeben, somit bekommt man immer den gleichen ComPort zugewiesen auch 
wenn sich der USB-Port ändert.

In der Systemsteuerung / Geräte-Manager den ComPort ändern auf z.B. 2

Gruß Egmont

von Egmont (Gast)


Lesenswert?

Egmont schrieb:
> - Fusebit auf "BOOTRST" und 512k stellen
upps
512 Byte oder 256 Worte.. 512kilo ist zu viel Gewicht :-))

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Egmont schrieb:
> wollte mal was über den Bootloader schreiben den ich benutze

Für welche Taktfrequenz ist der Bootloader übersetzt?

von Egmont (Gast)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> Für welche Taktfrequenz ist der Bootloader übersetzt?

Du fragt bestimmt wegen Baudrate... da ist das so das er sich das selbst 
errechnet. Es ist also kein Problem wenn man seine Taktfrequenz ändert.
Bekommt von FBoot.exe Daten geschickt wo dann die Baudlänge ermittelt 
wird.
Habe ich schon selber ausprobiert. 12MHz vom FT232 eingestellt 
CP-M-Source neu übersetzt mit der Taktfrequenz und mit dem Bootloader 
geladen.

In der FastLoad.H steht zwar bei mir 8Mhz drinn wird aber nur dafür 
verwendet um ein BootDelay zu errechnen.

.equ  XTAL    = 8000000  ; 8MHz, not critical
.equ  BootDelay  = XTAL / 3  ; 0.33s

wichtig sind die Einstellungen in Bootload.asm

.equ    STX_PORT        = PORTB
.equ    STX             = PB1

.equ    SRX_PORT        = PORTB
.equ    SRX             = PB0

Was man noch beachten sollte:
 -SD-Karte entfernen
 -FBoot.exe starten
 -CP/M Reset

Source vom Bootlade siehe Anhang
Ich hoffe ich habe deine Frage richtig verstanden bzw. beantwortet.
Egmont

@Alle
für Linux gibt es auch Software dafür...

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Nun brauche ich mal eine kleine Debughilfe. Hier die Debugmeldungen der 
MMC:

CPM on an AVR, v2.0
Testing RAM: fill...wait...reread...
Initing mmc...
mmcInit
mmcCMD: 00 00000000 .. 95 CMDRes: 01
mmcCMD: 08 000001AA .. 87 CMDRes: 01
mmcCMD: 37 00000000 .. 01 CMDRes: 01
mmcCMD: 29 40000000 .. 01 CMDRes: 01
mmcCMD: 37 00000000 .. 01 CMDRes: 01
mmcCMD: 29 40000000 .. 01 CMDRes: 00
mmcCMD: 3A 00000000 .. 01 CMDRes: 00
 CT: 04 InitRes: 00
mmcCMD: 11 00000000 .. 01 CMDRes: 00
CP/M partition at: 2048, size: 3024KB.
CP/M partition at: 8097, size: 4144KB.
CP/M partition at: 16385, size: 7808KB.
Partinit done.
mmcCMD: 11 00100000 .. 01 CMDRes: 00

Neustart des Systems

Was bedeutet das letzte CMD11 Kommando mit der Antwort 00 und warum gibt 
es dann enen Neustart?

@Egmont
Danke, ja das hat die Frage beantwortet.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:

> Initing mmc...
> mmcInit
> mmcCMD: 00 00000000 .. 95 CMDRes: 01
> mmcCMD: 08 000001AA .. 87 CMDRes: 01
> mmcCMD: 37 00000000 .. 01 CMDRes: 01
> mmcCMD: 29 40000000 .. 01 CMDRes: 01
> mmcCMD: 37 00000000 .. 01 CMDRes: 01
> mmcCMD: 29 40000000 .. 01 CMDRes: 00
> mmcCMD: 3A 00000000 .. 01 CMDRes: 00
>  CT: 04 InitRes: 00

Initialisierung ok.
Kartentyp: SD, Version 2

> mmcCMD: 11 00000000 .. 01 CMDRes: 00

11 Hex --> 17 Dez --> Read Block Command
Leseadresse 00000000

CMD Result 00 == alles ok.

> CP/M partition at: 2048, size: 3024KB.
> CP/M partition at: 8097, size: 4144KB.
> CP/M partition at: 16385, size: 7808KB.
> Partinit done.
> mmcCMD: 11 00100000 .. 01 CMDRes: 00

Hier das Gleiche.
Leseadresse 00100000 == Sektor 0x800 == 2048 Dez. == 1. Sektor der 1. 
Part.

> Neustart des Systems
>
> Was bedeutet das letzte CMD11 Kommando mit der Antwort 00 und warum gibt
> es dann enen Neustart?

Die Frage läßt sich so nicht beantworten. Wenn wirklich die Karte, bzw. 
der Treiber verantwortlich sein sollte, sieht man vielleicht mit 
"MMC_DEBUG = 3" mehr.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Zweiter Versuch mit anderer Karte. Ich habe das Image mal direkt auf 00 
geschrieben und MMC_DEBUG=3 gesetzt.

CPM on an AVR, v2.0
Testing RAM: fill...wait...reread...
Initing mmc...
mmcInit SPI_CLK_SLOW <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
mmcCMD: 00 00000000 <FF <FF <FF >40 .. 95>95 <FF <01  CMDRes: 01
mmcCMD: 08 000001AA <FF <FF <FF >48 .. 87>87 <FF <05  CMDRes: 05
mmcCMD: 37 00000000 <FF <FF <FF >77 .. 01>01 <FF <01  CMDRes: 01 mmcCMD: 
29 00000000 <FF <FF <FF >69 .. 01>01 <FF <01  CMDRes: 01
mmcCMD: 37 00000000 <FF <FF <FF >77 .. 01>01 <FF <01  CMDRes: 01 mmcCMD: 
29 00000000 <FF <FF <FF >69 .. 01>01 <FF <00  CMDRes: 00
mmcCMD: 10 00000200 <FF <FF <FF >50 .. 01>01 <FF <00  CMDRes: 00 <FF
 CT: 02 InitRes: 00 SPI_DISABLE
mmcRdSect SPI_CLK_FAST
mmcCMD: 11 00000000 <FF <FF <FF >51 .. 01>01 <FF <00  CMDRes: 00 <FF <FF 
<FE <31 <33 <FF SPI_DISABLE RdSectRes: 00
Assuming CP/M image at: 000, size: 8192KB.
Partinit done.
mmcRdSect SPI_CLK_FAST
mmcCMD: 11 00000000 <FF <FF <FF >51 .. 01>01 <FF <00  CMDRes: 00 <FF <FÆ

CPM on an AVR, v2.0
Testing RAM: fill...wait...reread...

Das sieht irgendwie nach dem gleichen Fehler aus. Ubrigens SPI CLK/2 
oder /4 ergibt keine Änderung.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
>  CT: 02 InitRes: 00 SPI_DISABLE
> mmcRdSect SPI_CLK_FAST
> mmcCMD: 11 00000000 <FF <FF <FF >51 .. 01>01 <FF <00  CMDRes: 00 <FF <FF
> <FE <31 <33 <FF SPI_DISABLE RdSectRes: 00

Hier ist das Lesekommando ok. Nach dem erfolgreichen Senden des Befehls 
(CMDRes = 0), wird auf das Data-Token (0xFE) gewartet. Danach kommen die 
eigentlichen Daten, die man hier nicht sieht.

> Assuming CP/M image at: 000, size: 8192KB.
> Partinit done.
> mmcRdSect SPI_CLK_FAST
> mmcCMD: 11 00000000 <FF <FF <FF >51 .. 01>01 <FF <00  CMDRes: 00 <FF <FÆ

Hier ist der gleiche Lesebefehl (gleicher Sektor). Aber ein Abbruch, 
bevor das Data Token kommt. Da man die Karte wohl ausschließen kann, 
kann ich mir nur noch vorstellen, daß ein Interrupt Harakiri macht, oder 
der Watchdog zuschlägt. Oder Stromversorgung, Stör/Erd-strahlen...


So siehts bei mir aus:
1
mmcCMD: 3A 00000000 <FF <FF <FF >7A .. 01>01 <FF <00  CMDRes: 00 <80 <FF <80 <00 <FF 
2
 CT: 04 InitRes: 00 SPI_DISABLE 
3
mmcRdSect SPI_CLK_FAST 
4
mmcCMD: 11 00000000 <FF <FF <FF >51 .. 01>01 <FF <00  CMDRes: 00 <FF <FF <FF <FE <31 <6C <FF SPI_DISABLE RdSectRes: 00 
5
Assuming CP/M image at: 000, size: 8192KB.
6
Partinit done.
7
mmcRdSect SPI_CLK_FAST 
8
mmcCMD: 11 00000000 <FF <FF <FF >51 .. 01>01 <FF <00  CMDRes: 00 <FF <FF <FE <31 <6C <FF SPI_DISABLE RdSectRes: 00 
9
Ok, CPU is live!
Das war jetzt mit V2.0. Aber mit trunk und jeweils einer SD V1.0 Karte, 
ists genauso.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Da man die Karte wohl ausschließen kann,
> kann ich mir nur noch vorstellen, daß ein Interrupt Harakiri macht, oder
> der Watchdog zuschlägt. Oder Stromversorgung, Stör/Erd-strahlen...

Der Watchdog ist abgeschaltet. Der Mega8 zeigt den gleichen Fehler. Für 
heute tippe ich mal auf Erdstrahlen. Morgen werde ich mal ein schnelles 
Oszi an die Stromversorgung in Nähe der Karte hängen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Nachtrag:

Ich habe gerade alles nochmal für die alte 4 Bit Variante übersetzt und 
- gleicher Fehler. Ein Hardwarefehler ist damit wohl auzuschließen.

CPM on an AVR, v2.0
Testing RAM: fill...wait...reread...
Initing mmc...
Assuming

NEUSTART

CPM on an AVR, v2.0
Testing RAM: fill...wait...reread...
Initing mmc...
Assuming

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:

> Ich habe gerade alles nochmal für die alte 4 Bit Variante übersetzt und
> - gleicher Fehler. Ein Hardwarefehler ist damit wohl auzuschließen.

Mit oder ohne Bootloader?

Ansonsten könnte die Software bei Dir noch anders übersetzt werden, als 
bei mir.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Alles ohne Bootloader.

von Egmont (Gast)


Lesenswert?

Frank Zoll schrieb:
> Ich hab soeben das erste mal lesend auf ein Diskimage auf meiner
> FAT16 Partition zugreifen können. Das anzeigen des Directorys und der
> Programmstart funktionieren.

Wie muss den die FAT16 Partition aussehen
 Type (06) , Größe(960MB), IMG-Dateiname (cpm_d.img), IMG-Dateigröße.

Bei mir erscheint nur "fat16 scanning" aber keine Laufwerk.
Der Werte in der Klammer sind die Einstellung so wie sie bei mir sind.

Die SD-Karte hat vier Partitionen:
1.  FAT16    06      960MB
2.  CP/M     52        8MB    aktiv
3.  CP/M     52        8MB
4.  CP/M     52        8MB

Gruß Egmont

von Frank Z. (fzoll)


Lesenswert?

Egmont schrieb:

> Wie muss den die FAT16 Partition aussehen
>  Type (06) , Größe(960MB), IMG-Dateiname (cpm_d.img), IMG-Dateigröße.
>
> Bei mir erscheint nur "fat16 scanning" aber keine Laufwerk.
> Der Werte in der Klammer sind die Einstellung so wie sie bei mir sind.
>
> Die SD-Karte hat vier Partitionen:
> 1.  FAT16    06      960MB

Der Typ der Partition sollte 0E sein (FAT16 / LBA-Modus). Ich weiss 
nicht genau, ob es auch mit 06er Partitionen funktionieren würde. Das 
habe ich noch nicht ausprobiert. Das Diskimage an sich war fast richtig. 
Es müsste 'CPMDSK_D.IMG' heissen. Wobei die Suche nach den Images immer 
bei A beginnt und mit Z aufhört. Die CP/M Partitionen werden immer 
zuerst an den Anfang der internen Partitionstabelle gepackt. Und 
Diskimages landen immer dahinter. Die Imagedatei an sich sollte 
mindestens 256256 Bytes groß sein. Ist sie das noch nicht, so muss man 
sie erstmal mit Nullen auffüllen. Macht man das nicht, würde ein 
schreibversuch hinter das Ende der Datei das Dateisystem evtl. 
beschädigen, wobei ich versuche diesen Fehler zu erkennen und abzufangen 
! Ich habe es nur noch nicht getestet. Daher sind die Schreibroutinen 
derzeit in der SVN Version auch noch auskommentiert. Die Routinen können 
eine zu kleine Datei nicht vergrößern. Im moment sind Leo und ich dabei 
die Routinen zu testen und noch Fehler beim schreibzugriff zu 
beseitigen. Hoffe es wird nicht mehr lange dauern, bis wir aquch das im 
Griff haben.

Freundliche Grüße
Frank

von Frank Z. (fzoll)


Lesenswert?

Ah, da fällt mir gerad noch was ein.

Das Booten von einer FAT16 Partition dürfte noch nicht funktionieren. 
Das ganz liegt an der Art wie das Startup in der Datei init.asm codiert 
wurde.
1
; Read first sector of first CP/M partition (ipl)
2
lds  xl,hostparttbl+1  
3
lds  xh,hostparttbl+2  
4
lds  yl,hostparttbl+3  
5
lds  yh,hostparttbl+4  
6
rcall  mmcReadSect

Dieses Codestück muss noch angepasst werden, da bei einem Diskimage in 
der hoastpartbl an der Position 1-4 nicht der 1. Sektor der Datei 
abgelegt ist, sondern die Nummer des 1. Clusters der Datei. Hier greift 
der bestehende Lesezugriff an die Falsche stelle der SD- Card. Ich werde 
die Stelle bei gelegenheit mal anpassen, damit man auch ganz ohne CP/M 
Partitionen ein System booten kann.

Grüße
Frank

von Leo C. (rapid)


Lesenswert?

Frank Zoll schrieb:

> Es müsste 'CPMDSK_D.IMG' heissen. Wobei die Suche nach den Images immer
> bei A beginnt und mit Z aufhört.

A - P würde genügen, da CP/M maximal 16 Laufwerke verwalten kann.
Darüber hinaus vermute ich, daß gerade hier noch 
Optimierungsmöglichkeiten bestehen. Der Warmboot mit (nur) einem 
FAT16-Image dauert deutlich länger, als nur mit Partitionen. Mit 
eingeschalteten Debug-Messages sieht man eine deutliche Pause, nachdem 
alle FAT-Daten gelesen worden sind. Beim Lesen und Schreiben von 
CP/M-Dateien ist aber subjektiv kein Unterschied zum nackten 
Part-Treiber. Das FAT16-Dateisystem an sich ist also ausreichend 
schnell.

> Die Imagedatei an sich sollte
> mindestens 256256 Bytes groß sein. Ist sie das noch nicht, so muss man
> sie erstmal mit Nullen auffüllen. Macht man das nicht, würde ein
> schreibversuch hinter das Ende der Datei das Dateisystem evtl.
> beschädigen, wobei ich versuche diesen Fehler zu erkennen und abzufangen
> ! Ich habe es nur noch nicht getestet.

Aber ich jetzt. :-)
Der FAT16-Treiber weigert sich beharrlich, über das Dateiende hinaus zu 
lesen und zu schreiben.

> Daher sind die Schreibroutinen
> derzeit in der SVN Version auch noch auskommentiert.

Jetzt nicht mehr. :-)

> Die Routinen können
> eine zu kleine Datei nicht vergrößern. Im moment sind Leo und ich dabei
> die Routinen zu testen und noch Fehler beim schreibzugriff zu
> beseitigen. Hoffe es wird nicht mehr lange dauern, bis wir aquch das im
> Griff haben.

Hier gibts die FAT16 Testversion:
http://cloudbase.homelinux.net/viewvc/avr-cpm/tags/2.0-fat16/
oder
http://cloudbase.homelinux.net/svn/avr-cpm/tags/2.0-fat16/

Es fehlt noch etwas Feinschliff und die Tests waren bisher noch nicht 
sehr umfangreich. Mmn sollte es aber mindesten so gut funktionieren, als 
der bisherige Code.

@Frank,
tolles Stück Arbeit.

von Frank Z. (fzoll)


Lesenswert?

Halloe.

Das Scannen nach den Image- Dateien ist wirklich nicht gerade schön. Bis 
alle 26 Buchstaben durchprobiert wurden müssten bei 512 Directory- 
Einträgen und 16 Einträgen pro Sektor insgesammt 832 Sektorlesezugriffe 
erfolgen. Pro Buchstabe der gesucht werden soll werden alle 32 
Direktory- Sektoren je einmal gelesen. Daher dauert es auch so lange. 
Dafür bekommt man halt die Laufwerke immer in die richtige Reihenfolge 
in der Partitionstabelle, egal in welcher Reihenfolge sie gerade auf der 
SD- Card im Verzeichniss liegen. Hier würde ich vorschlagen, das wir 
immer mit A anfangen und die Anzahl der Buchstaben auf die aktuelle 
Größe der Partitionstabelle begrenzen. Mehr als diese Menge an Images 
können eh nicht verwaltet werden. Man ist dann halt dann gezwungen mit A 
anzufangen und die Images vorlaufend zu benennen, aber das sollte doch 
nichts ausmachen oder ?

@Leo
Danke für die Hilfe bei den Tests.

Grüße
Frank

von Leo C. (rapid)


Lesenswert?

Frank Zoll schrieb:
> Man ist dann halt dann gezwungen mit A
> anzufangen und die Images vorlaufend zu benennen, aber das sollte doch
> nichts ausmachen oder ?

Sicher nicht (imho). Der größte Teil der Dateinamen ist ja sowieso 
hartcodiert.


Noch etwas anderes:
Wie wichtig ist denn noch, daß das Programm noch auf Atmega8 und 
Atmega88 läuft?

Im Moment paßt nur noch die 4-Bit Version in den Speicher. Natürlich 
ohne FAT16. Die 8-Bit Version würde man noch mit etwas 
Geschwindigkeitseinbuße hinkriegen.

von Leo C. (rapid)


Lesenswert?

Frank Zoll schrieb:
> Das Booten von einer FAT16 Partition dürfte noch nicht funktionieren.

@alle, die auf ihren SD-Karten nur FAT-Paritionen haben (wollen):

Das hat Frank inzwischen geändert. Man kann jetzt auch von einer 
Image-Datei im FAT16-Filesystem booten. Außerdem werden jetzt zwei 
FAT16-Partitionstypen erkannt. 0E und 06.

Das Update gibts hier:
http://cloudbase.homelinux.net/viewvc/avr-cpm/tags/2.0-fat16-1

von Leo C. (rapid)


Lesenswert?

Leo C. schrieb:
> @alle, die auf ihren SD-Karten nur FAT-Paritionen haben (wollen):

Und jetzt auch an:
@alle, die mehr als ein File-Image auf ihrer FAT-Parition haben wollen:

Leider hatte sich ein kleiner Fehler eingeschlichen, der verhinderte, 
daß mehr als eine Datei auf der FAT16-Partition erkannt wurde.

Neues Update:
http://cloudbase.homelinux.net/viewvc/avr-cpm/tags/2.0-fat16-2/

von Egmont (Gast)


Lesenswert?

ist hier nicht noch ein Zahlendreher drin
-------[ Config.inc ]----------------------
#define K 1024
#define M 1204*K    <--     Zahlendreher

#define  RAMSIZE   4*M*4 * 2  /* 2 chips 4Mx4  */

-------------------------------------------
Gruß Egmont

von Leo C. (rapid)


Lesenswert?

Egmont schrieb:
> ist hier nicht noch ein Zahlendreher drin

Oh, doch.

> -------[ Config.inc ]----------------------
> #define K 1024
> #define M 1204*K    <--     Zahlendreher
>
> #define  RAMSIZE   4*M*4 * 2  /* 2 chips 4Mx4  */
> -------------------------------------------

Das steht da schon ziemlich lange drin, und ist wohl nur deshalb nicht 
aufgefallen, weil es (bisher) nirgens benutzt wird.

Danke für den Hinweis.

von Frank Z. (fzoll)


Lesenswert?

Halloe.

Da der FAT16- Treiber nun bereits recht gut läuft, hätte ich evtl. ein 
wenig Zeit über bei der Programmierung des VGA- Teils der Platine mit zu 
helfen. Gibt es hier schon etwas, auf das man aufbauen könnte ? Bzw. ist 
schon jemand dabei etwas vorzubereinten und braucht ggf. noch Hilfe ?


Grüße
Frank


p.s. Ich habe das TotalCommander Plugin das Leo gefunden hat mal kurz 
angetestet. Wenn man die diskdefs passend erweitert, kann man damit auch 
problemlos auf die Imagedateien zugreifen, die zu unserem netten kleinen 
Projekt hier gehören. Es muss also nicht unbedingt mit einem Laufwerk 
gearbeitet werden. Wer so wie ich GUI- Verwöhnt ist, dem kann ich nur 
den Tipp geben sich mal das Tutorial auf der Homepage anzuschauen. Damit 
klapts auf anhieb :-)

von Siggi M. (Gast)


Lesenswert?

Guten Abend,

nach dem Erwerb des 4-Bit-Systems von Peter Sieg und dem Studium dieses 
Forum-Threads war ich so begeistert, dass ich ihm auch die Platine der 
8-Bit-Version abgekauft habe.

Jetzt bin ich beim Zusammenstellen der Bauteile gemäß Schaltplan und 
Stückliste. Dabei habe ich gleich die Frage, wie man an den 13-poligen 
SD-Karten-Sockel kommt? Die Standard-Lieferanten wie Reichelt, Segor 
oder Conrad haben den nicht!

Außerdem verstehe ich die Stromversorgungsschaltung auf Seite 2 des 
Schaltplans nicht. Wozu ist der Gleichrichter und der 5V 
Spannungswandler notwendig, wenn man doch schon mit einem 5V 
Steckernetzteil arbeitet? Auch die Funktion des 25MHz-Quarzoszillators 
und des separaten 20 MHz-Quarzes sind mir nicht ganz klar. Welcher Quarz 
macht was?

Gruß  Siggi

von Egmont (Gast)


Lesenswert?

aus dem SVN-Archiv
141_avr-cpm-trunk.tar.gz
fehlt eine Datei "heap.asm"

siehe aufruf in Datei
-----------[ avrcpm.asm ]----------
...
  .include "heap.asm"
...
-----------------------------------

würde gerne diese Version auch mal testen

Gruß Egmont

Siggi M. schrieb:
> wie man an den 13-poligen
> SD-Karten-Sockel kommt?

Der wurde bei CSD bestellt... ca. 3 Euro

von Egmont (Gast)


Lesenswert?

Bei mehr als 5 IMG-Dateien bekomme ich folgende Fehlermeldung
Version 136 vom SVN-Server.
Auf D: kann ich noch zugreifen, bei E: --> Kill
---------------------------------------------------------
CPM on an AVR, v2.0
Testing RAM: fill...wait...reread...
Initing mmc...

A:FAT16 File-Image at: 002, size: 250KB.
B:FAT16 File-Image at: 018, size: 250KB.
C:FAT16 File-Image at: 034, size: 250KB.
D:FAT16 File-Image at: 050, size: 250KB.
E:FAT16 File-Image at: 066, size: 250KB.
Partinit done.
Ok, CPU is live!

ipl
62k cp/m vers 2.2

A>d:
D>dir
D: TTT2     COM : OTHELLO  COM : MMIND    COM : ED       COM
D: LOAD     COM : STONE    COM : PIP      COM : STAT     COM
D: SUBMIT   COM : XSUB     COM
D>e:
Bdos Err On E: Select
---------------------------------------------------------
Leo C. schrieb:
> A - P würde genügen, da CP/M maximal 16 Laufwerke verwalten kann.


Gruß Egmont

von Leo C. (rapid)


Lesenswert?

Egmont schrieb:
> aus dem SVN-Archiv
> 141_avr-cpm-trunk.tar.gz
> fehlt eine Datei "heap.asm"

Ups, stimmt(e).

Die Datei ist jetzt drin.


> würde gerne diese Version auch mal testen

Ist im Moment aber etwas gewagt. Du brauchst dann auf jeden Fall auch 
das BIOS (bios.mac) aus dem cpm-Verzeichnis.

Kommentare und Patches dazu sind natürlich willkommen.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Egmont schrieb:
> Bei mehr als 5 IMG-Dateien bekomme ich folgende Fehlermeldung
> Version 136 vom SVN-Server.

> Bdos Err On E: Select

Die Anzahl Laufwerke ist an zwei Stellen begrenzt:

1.) dsk_fsys.asm:
  .equ  MAXDISKS  = 6  ;Max number of Disks (partitions)

2.) Z.Zt. noch im BIOS auf 4 Laufwerke.


Wenn Du MAXDISKS noch höher setzen willst, mußt Du den RAM-Verbrauch im 
Auge behalten. Ggf. kann man die UART-Buffer halbieren.

Im Anhang ist ein BIOS, das bis 8 Laufwerke gehen sollte. In dem 
Zip-Archiv sind auch die Quellen und die fertigen Binärdateien 
'bios.bin', 'cpm.bin' und ein komplettes 'diskimage'.
Leider habe ich es z.Zt. nicht besser.

von Frank Z. (fzoll)


Lesenswert?

Halloe.

Ich habe mir in der letzten Nacht mal den VGA- Teil der aktuellen 
Platine angeschaut und das oben verlinkte Beispiel für das 
VGA-Betriebssystem genau unter die Lupe genommen.

Mitlerweile habe ich den Code der Vorlage aufgeräumt und so angepasst, 
das er sich auch für den 328er Übersetzen lässt. Nun ist das SRAM 
erstmal zu 197% gefüllt, wegen des zu großen Framebuffers. Als nächstes 
werde ich den Puffer so weit verkleinern, das er gerade noch so eben in 
das SRAM passt.

Findet sich hier evtl. jemand der lust hat einen spezeillen, neuen, 
Zeichensatz zu basteln ? Wir brauchen einen Zeichensatz von 6 Pixel 
breite verpackt in jeweils 1 Byte pro Zeile. Die höhe weiss ich noch 
nicht genau, weil ich die endgültige Größe des Framebuffers noch nicht 
ausprobiert habe. Bei den oben angedachten 25 Zeilen wäre die Höhe für 
den Zeichensatz 16 Pixel(Zeilen). Ich plane jedoch möglichst viele 
Zeilen aufs Display zu quetschen, da würden dann ggf. noch ein paar 
Zeilen im zeichensatz wieder wegfallen.

Die 80 Zeichen pro Zeile scheinen machbar zu sein, unschön ist nur das 
zwischen jedem Zeichen 2 spalten dunkel bleiben, die wir nicht werden 
ansteuern können. Damit läßt sich dann wohl leider mit dem neuen 
Zeichensatz keine durchgehende horizontale Line erreichen. Umgehen läßt 
sich dieses Problem nicht so einfach, da der Port an dem das 
Schieberegister hängt nur 6 der eigentlich im Original vorgesehenen 8 
Bits liefern kann. Die Routine, die die Zeihen ausgiebt, hat leider 
keine reserven mehr um da noch Befehle hinzunehmen zu können, die die 
fehlenden 2 Bits irgendwie ersetzen könnten. Vieleicht hat hier ja 
jemand noch eine super Idee ?

Kennt sich hier evtl. jemand mit den CP/M Terminals aus und kann mir da 
Helfen, heraus zu bekommen was so ein Terminal alles können muss außer 
bloß ein par Zeichen anzuzeigen ? Da scheint im Originalcode noch eine 
große Lücke zu klaffen, die wir noch füllen müssen.

Grüße
Frank

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Siggi M. schrieb:
> Wozu ist der Gleichrichter und der 5V
> Spannungswandler notwendig, wenn man doch schon mit einem 5V
> Steckernetzteil arbeitet? Auch die Funktion des 25MHz-Quarzoszillators
> und des separaten 20 MHz-Quarzes sind mir nicht ganz klar. Welcher Quarz
> macht was?

- SD-Karten-Sockel Type SCDA5A0201, Best.Nr.: 020115
- Bei einem 5V Steckernetzteil entfällt natürlich der Gleichrichter und 
der 5V Regler
- der 25MHz Quarzoszillator auf der VGA-Platine muß genau diesen Wert 
haben, da davon der Pixeltakt abgeleitet wird.
- Das AVR-CP/M System benötigt auch einen Takt. Dieser kann durch den 
Oszillator (25MHZ) oder einen externen Quarz (hier als Bsp. 20MHZ) 
erzeugt werden. Da das Gesamtsystem noch sehr experimentell ist, die 
vielen Varianten. Eine Möglichkeit ist also 1 x 25MHZ auf der AVR-CP/M 
Platine. Damit ist auch gleich der VGA Takt erzeugt. Eine weitere 
Möglichkeit 25MHz auf der VGA-Seite (siehe oben) und z.B. 30 MHz 
AVR-CP/M.
Noch Fragen?
Joe

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Frank Zoll schrieb:
> Kennt sich hier evtl. jemand mit den CP/M Terminals aus und kann mir da
> Helfen, heraus zu bekommen was so ein Terminal alles können muss außer
> bloß ein par Zeichen anzuzeigen ? Da scheint im Originalcode noch eine
> große Lücke zu klaffen, die wir noch füllen müssen.

Unbedingt:
- Clear screen
- Cursor positionieren (x,y)
- ein Attribut (eins aus:highlight, dim, inverse, underline, blink 
(igit))

Gut:
- Clear to end of line
- Delete line (nachfolgende zeilen rutschen hoch)
- Insert Line (Zeilen unterhalb der Curserposition eine Zeile nach 
unten)
- mehr Attribute

ANSI oder VT100 war zu CP/Ms Hochzeiten nicht verbreitet. Ist 
wahrscheinlich auch etwas aufwendig zu implementieren.
Arbeitspferd war das Lear Siegler ADM-3A und viele Kompatible. Praktisch 
jedes CP/M-Programm mit Terminalsteuerung unterstützt das.

http://www.tentacle.franken.de/adm3a/

Das scheint aber wirklich nur die unbedingt notwendigen Funktionen zu 
haben.

Das nächst bessere, und auch sehr weit verbreitet, war dann Televideo 
920 oder so.

Mein MC-Terminal, daß seit einigen Wochen wieder hier rumliegt und auf 
Inbetriebnahme wartet, ist auch Televideo-kompatiebel.

Und weils so schön ist, in alten Erinnerungen zu schwelgen, im Anhang 
ein Bild von meiner ersten Terminal-Karte (Elektor, 64 Zeichen x 16 
Zeilen, max 1200 Baud und 120ms für den clear screen)

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Frank Zoll schrieb:
> Die 80 Zeichen pro Zeile scheinen machbar zu sein, unschön ist nur das
> zwischen jedem Zeichen 2 spalten dunkel bleiben, die wir nicht werden
> ansteuern können.

War leider mit dem ATmega328 nicht anders lösbar.

> Die Routine, die die Zeihen ausgiebt, hat leider
> keine reserven mehr um da noch Befehle hinzunehmen zu können, die die
> fehlenden 2 Bits irgendwie ersetzen könnten. Vieleicht hat hier ja
> jemand noch eine super Idee ?

Vorschlag zur Ausgabe einer durchgehenden Linie.
PB4 und PB5 an das Schieberegister und vor der Zeilenausgabe die beiden 
Bits gesetzt. Zwischen Backporch und Frontporch ist ja noch etwas Platz 
für den Code.
Joe

von Leo C. (rapid)


Lesenswert?

Leo C. schrieb:

Vergessen:

> Unbedingt:
> - Clear screen
 - Cursor links (back space)
> - Cursor positionieren (x,y)
> - ein Attribut (eins aus:highlight, dim, inverse, underline, blink)

> Gut:
> - Clear to end of line
> - Delete line (nachfolgende zeilen rutschen hoch)
> - Insert Line (Zeilen unterhalb der Curserposition eine Zeile nach
> unten)
- Erase to end of screen
- Insert Character
- Delete Character
- Cursor right, up, down
> - mehr Attribute

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ich komme immer noch nicht so recht weiter...
Auch mit der FAT-Version sieht es meim lesen der mmc merkwürdig aus. 
Anbei mal das Debug-File. Nach dem letzen CMD11 Befehl startet das 
System neu.


CPM on an AVR, v2.0
Testing RAM: fill...wait...reread...
Initing mmc...

mmcInit
mmcCMD: 00 00000000 .. 95 CMDRes: 01
mmcCMD: 08 000001AA .. 87 CMDRes: 05
mmcCMD: 37 00000000 .. 01 CMDRes: 01 mmcCMD: 29 00000000 .. 01 CMDRes: 
01
mmcCMD: 37 00000000 .. 01 CMDRes: 01 mmcCMD: 29 00000000 .. 01 CMDRes: 
00
mmcCMD: 10 00000200 .. 01 CMDRes: 00
 CT: 02 InitRes: 00
mmcCMD: 11 00000000 .. 01 CMDRes: 00
mmcCMD: 11 00007E00 .. 01 CMDRes: 00
mmcCMD: 11 00013C00 .. 01 CMDRes: 00
...
...
...
mmcCMD: 11 00017800 .. 01 CMDRes: 00
mmcCMD: 11 00017A00 .. 01 CMDRes: 00
A:FAT16 File-Image at: 002, size: 081KB.
Partinit done.
mmcCMD: 11 00017C00 .. 01 CMDRes: 00

CPM on an AVR, v2.0
Testing RAM: fill...wait...reread...
Initing mmc...

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> mmcCMD: 11 00017A00 .. 01 CMDRes: 00
> A:FAT16 File-Image at: 002, size: 081KB.
> Partinit done.
> mmcCMD: 11 00017C00 .. 01 CMDRes: 00
>
> CPM on an AVR, v2.0
> Testing RAM: fill...wait...reread...
> Initing mmc...

Immerhin werden eine ganze Anzahl Sektoren fehlerfrei gelesen. Es liegt 
wohl eher nicht an der Karte oder am mmc-Treiber.

Kannst Du mal das komplette Verzeichnis, in dem Du die Software 
übersetzt hast, zusammen packen und an mich schicken?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Kannst Du mal das komplette Verzeichnis, in dem Du die Software
> übersetzt hast, zusammen packen und an mich schicken?

Ist unterwegs...

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Leo C. schrieb:
>> Kannst Du mal das komplette Verzeichnis, in dem Du die Software
>> übersetzt hast, zusammen packen und an mich schicken?
>
> Ist unterwegs...

Ich habs schon gesehen. Bis auf CPU, CPU-Frequenz und die Debugschalter 
in 'config.asm' ist alles identisch zu meinem Stand hier, bzw zum 
2.0-fat16-2 im SVN.

BIOS hatten wir ja schon ausgeschlossen.

Mir fällt nichts mehr ein.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Mir fällt nichts mehr ein.

Dann bleibt ja nur noch die Hardware. Ich mach mich mal auf die Suche.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Leo C. schrieb:
>> Mir fällt nichts mehr ein.
>
> Dann bleibt ja nur noch die Hardware. Ich mach mich mal auf die Suche.

Inzwischen habe ich auch mal mit Deinen Schaltern übersetzt. Hex-Files 
sind auch identisch. (In Deiner 'AvrBuild.bat' ist ein komischer 
Schalter für den Assembler gestzt. Ich wollte ausschließen, daß der 
einen Unterschied macht.)

Vielleicht hat der Prozessor vom Übertakten einen Dachschaden?

von Frank Z. (fzoll)


Lesenswert?

Hm,

mitlerweile habe ich den VGA-Code ans laufen bekommen. Zufriedenheit 
sieht aber anders aus. Ich bekomme auf meinem alten Monitor einen klaren 
Sync bei 640*400 @74Hz. Aber von meinem Beispieltext im Framebuffer ist 
nichts zu sehen. :-(

Grüße
Frank

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@alle
Einen Schaltungs- / Layoutfehler habe ich gefunden.
der Pegelwandler IC2 (Pin 14) sollte mit seiner Spannungsversorgung an 
3.3V liegen und nicht an 5V! Bitte im Layout ändern.

Leo C. schrieb:
> Vielleicht hat der Prozessor vom Übertakten einen Dachschaden?
Nein, leider auch nicht.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Frank Zoll schrieb:
> Aber von meinem Beispieltext im Framebuffer ist nichts zu sehen. :-(

Hast du eines von den 74AC08 Gattern (IC7) auch auf High gesetzt? 
Ansonsten schiebt das Schieberegister nichts auf die VGA-Buchse.

von Frank Z. (fzoll)


Lesenswert?

Joe G. schrieb:
> Frank Zoll schrieb:
>> Aber von meinem Beispieltext im Framebuffer ist nichts zu sehen. :-(
>
> Hast du eines von den 74AC08 Gattern (IC7) auch auf High gesetzt?
> Ansonsten schiebt das Schieberegister nichts auf die VGA-Buchse.

Halloe.

Ich denke, das müsste gerad schön bunt aussehen. Hier das Setup für die 
Fordergrundfarbe.
Das Setup wird im moment unmittelbar vor der Ausgabeschleife aufgebaut. 
Alles was nicht unbedingt für das Terminal gerbaucht wurde hab ich 
mitlerweile raus geworfen. Im moment versuche ich gerade statt des Fonts 
ein einfaches 10101010 Streifenmuster zu erzeugen. Auch das tut leider 
nicht. Ich werd mir wohl mal die Hardeware unter der Lupe anschauen 
müssen, evtl. hab ich da noch nen Bug drinn :-)
1
// farbe einstellen
2
// Pin 5-7 wieder auf Ausgang und andere im ursprünglichen Zustand belassen:
3
DDRD  |= ( 1 << DDD5) | ( 1 << DDD6 )| ( 1 << DDD7 );
4
PORTD |= ( 1 << PD5 ) | ( 0 << PD6  )| ( 1 << PD7  );

Schade das ich das ganze nicht nachmessen kann, ich habe weder ein Oszi 
noch einen Logikanalyser zur Hand.

Grüße
Frank

von Frank Z. (fzoll)


Angehängte Dateien:

Lesenswert?

Halloe.

Habe die letzten blödden Fehler endlich gefunden. Hier mal zwei Bilder 
des aktuellen Standes :-)
Die VGA-Ausgabe läuft. Es ist gerade so eben Platz für 80 Zeichen pro 
Zeile und insgesammt 22 Zeilen.
SRAM ist zu 96,4% gefüllt. Bissel was brauche ich noch für den Stack. 
Nun brauchen wir einen Zeichensatz wie oben beschrieben. (6 Pixel Breit, 
18 Pixel Hoch) Je ein Byte pro Zeile. Als nächstes muss ich die 
Terminalverbindung reaktivieren und mich um einen Software UART für die 
Tastatur kümmern, die ich abschalten musste weil der 328er nur 1 UART 
zur Verfügung hat.

Grüße
Frank

p.s. Mit Attributen (Blinken,Invers, Durchgestrichen etc.) pro Zeichen, 
das wird nix mehr, das RAM ist voll....

von Frank Z. (fzoll)


Lesenswert?

Halloe.

Ich habs geschaft, 24 Zeilen ins Ram rein zu quetschen. Damit wären wir 
gerad noch konform mit den oben genannten Standard- Terminals. Ich habe 
nur noch keine Idee was wir mit den Attribiuten machen. Da die Terminals 
eigentlich alle mit 7 bit / Zeichen arbeiten, hätten wir noch 1 bit 
über. Dies Bit könnten wir zum Beispiel nutzen um sowas wie einen 
Inversen- Modus zu unterstützen. Bei 24 zeilen ist das Ram fast voll und 
ich habe noch nicht die Routinen für die Tastatur fertig, daher möcht 
ich mal nicht versprechen das ich evtl. wieder Zeilen rausstreichen muss 
um das ganze Lauffähig zu halten.

Grüße
Frank

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Ich habe mal meinen aktuellen Softwarestand hochgeladen (trunk).

Achtung: Diese Version bitte nicht mit Disk Images testen, die wichtige 
Daten enthalten. Es könnte sein, daß unter bestimmten Bedingungen ein 
falscher Sektor geschrieben wird.

Ich habe die maximale FAT16-Image-Dateigröße und die maximale 
CP/M-Partitionsgröße auf 32MB begrenzt. Dh., CP/M-Dateisysteme können 
maximal 32MB groß werden. Sieht hier jemand ein Problem?

Das Programm kann jetzt verschiedene Diskformate erkennen und einbinden.
Im Moment sind das die Images vom MyZ80 Emulator und von YAZE-(AG). In 
der YAZE-AG Distrib sind verschiedene Diskimages (*.ydsk-Dateien), die 
fast alle unterschiedliche Größen haben.
http://www.mathematik.uni-ulm.de/users/ag/yaze/

Diese Formate können auch mit den cpmtools verarbeitet werden.

Optimal sind aber weder MyZ80 noch das YAZE-Format. Beide haben einen 
Header, der nicht der physikalischen Sektorgröße der Speicherkarten 
entspricht (MyZ80 256 Byte und YAZE 128 Byte). Das kostet Performance, 
weil die CP/M Datenblöcke dann immer mitten im Sektor beginnen und 
enden, und der Teil davor, bzw. danach auch immer gelesen, bzw, 
geschrieben werden muß.

Für unser System würde ich ein Format mit einem 1 Sektor (512 Byte) 
großen Header bevorzugen. Das ließe sich mit der jetzt vorhandenen 
Software verwenden.

Da aber Header unbeliebt zu sein scheinen ;), könnte man auch noch was 
mit fest vorgegebenen Formatgrößen realisieren. Die Software dazu ist im 
Prinzip auch vorhanden. Frank hat mir dazu schon den Vorschlag 
geschickt, das Format über den Dateinamen zu bestimmen. Das geht auch, 
allerdings nur mit FAT16 und natürlich nicht mit direkten Partitionen.

Eine andere (oder zusätzliche) Möglichkeit wäre, einige 
Laufwerksbuchstaben (z.B. M-P) für feste Formate zu reservieren. Dazu 
müßte man sich aber auf ein bis maximal 2 Formate einigen.
Je größer die Disk ist, und vor allem, je mehr Directory-Einträge sie 
hat, um so langsamer wird der Zugriff. Große Disks mit kleinen 
Directories machen aber keinen Sinn.

In der angehängten Zip-Datei ist ein leeres MyZ80 Image. Die Datei wird 
beim Auspacken 8MB groß.

In den nächsten Tagen möchte ich das ganze nochmal überarbeiten (und das 
Chaos etwas aufräumen). Inzwischen ist mir noch eine deutliche 
Verbesserung zu der Schnittstelle zum 8080 BIOS-Teil eingefallen.


Eine andere Baustelle ist noch das Verhalten bei Diskwechsel mit und 
ohne Warmstart. Verschiedene Softwarestände verhalten sich inzwischen 
unterschiedlich, und mir ist noch nicht ganz klar wie es richtig geht.
Im Moment muß nach Ziehen und Stecken der Karte ein Warmstart erfolgen, 
damit CP/M wieder auf die Karte zugreifen kann.

Wenn man allerdings die Karte immer automatisch neu initialisiert, wenn 
sie gewechselt wurde, besteht die Gefahr, das Daten auf die falsche 
Karte geschrieben werden.

Bitte probiert das mal aus und macht Vorschläge.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Frank Zoll schrieb:
> Ich habs geschaft, 24 Zeilen ins Ram rein zu quetschen.

Super Frank!
Gab es noch was an der Hardware oder lag es an der Software?
Joe

von Frank Z. (fzoll)


Angehängte Dateien:

Lesenswert?

Halloe

Die Hardware sowohl von der CP/M Emulatorseite als auch auf der VGA- 
Seite läuft gänzlich ohne Lötpatches stabil. Die VGA- Seite habe ich mit 
25Mhz wie gefordert übertacktet. Die CP/M Seite läuft auf 20 Mhz, hier 
habe ich keinen Übertacktungsversuch gemacht. Auf VGA- Seite habe ich 
nur einen blöden Softwarefehler gehabt. Mitlerweile läuft auch schon die 
einfache Textausgabe über UART von der CP/M Seite aus. Das Keyboard habe 
ich noch nicht am laufen und der Font ist auch noch nicht fertig. Die 
Anzeige sieht wegen des falschen Fonts noch ziemlich kaputt aus, aber 
man kann die Zeichen mit gut will schon erkennen.

Grüße
Frank

Ich habe mal hier meine aktuelle "Spielversion" angehangen. Das Hex-File 
ist für den 328er mit 25Mhz Quarz compiliert. Die UART- Geschwindigkeit 
ist 9600 Baud 8N1. Hier muss man auf der CP/M Seite von 36800 Baud noch 
eben runtergelen, sonst klappt die Anzeige nicht. :-)

von Egmont (Gast)


Lesenswert?

Hallo,
wo bekomme ich zum übersetzen von ipl.asm und bios.asm die Datei 
z80asm.exe her. Googeln brachte bei mir kein Erfolg.
Ein Link oder eine Datei währe nicht schlecht (für Windows).
Was ist mit bios.mac, für was wird die benötigt....anderer 
Compiler/System ?

Gruß Egmont

von Peter Sieg (Gast)


Lesenswert?

@Egmont: Wie wäre es mal mit Artikel lesen: ;-)

Beitrag "CP/M auf ATmega88"
1
8080 / Z80 Software
2
3
    * ipl.asm (läd das CP/M von der 'Diskette' vom track 0 sector 2 bis track 1 sector 26)
4
    * bios.asm
5
    * cpm.sys 
6
7
Obige 8080/Z80 Assemblerdateien lassen sich unter Linux hiermit: http://www.nongnu.org/z80asm/ und unter Windows hiermit (end Statement auskommentieren): http://www.tni.nl/products/tniasm.html übersetzen. Unix-Tools für Windows, u.a. DD findet ihr hier: http://sourceforge.net/projects/unxutils/files/unxutils/current/UnxUtils.zip/download

Peter

von Leo C. (rapid)


Lesenswert?

Egmont schrieb:
> Hallo,
> wo bekomme ich zum übersetzen von ipl.asm und bios.asm die Datei
> z80asm.exe her. Googeln brachte bei mir kein Erfolg.
> Ein Link oder eine Datei währe nicht schlecht (für Windows).
> Was ist mit bios.mac, für was wird die benötigt....anderer
> Compiler/System ?

bios.asm ist zu alt. Aktuell ist bios.mac. Dazu gehören auch die beiden 
.lib Dateien.

bios.mac und ipl.mac können mit M80 (MACRO-80) von Microsoft auf Deinem 
CP/M-System übersetzt werden. :)

Wahrscheinlich gibts kompatible Crossassembler, die unter Windows 
laufen, aber ich habe noch keinen gefunden.

Es gibt auch CP/M-Emulatoren, die einen Befehl abarbeiten, der auf der 
Befehlszeile übergeben wird. "zxcc" ist so ein Ding, und funktioniert 
bei mir unter Linux wunderbar. Laut der Homepage sollte es aber auch 
unter DOS (Windows) laufen:
http://www.seasip.demon.co.uk/Unix/Zxcc/

Wenn zxcc richtig installiert ist, kann man das BIOS so assemblieren und 
linken:
1
$ zxcc m80 -=bios.mac
2
$ zxcc l80 -bios.rel,bios.bin/N/E
Das Makefile erledigt diese Schritte automatisch.

Für Windows habe ich noch eine eine Alternative gefunden: "m80l80pc.zip"
Mit Google leicht zu finden.

Wenn Die Dateien aus dem Paket im Pfad zu finden sind, können M80 und 
L80 direkt auf der Befehlszeile gestartet werden. Das ganze ist 
offensichtlich mit dem CP/M-Emulator "22nice" gebaut, der ebenfalls 
leicht zu finden ist, und vielleicht auch sonst einen Versuch wert wäre.

Im m80l80pc.zip Paket ist auch das M80/L80 Handbuch als Textdatei. Sonst 
habe ich immer nur gescannte Handbücher als PDF gefunden.

Meine Bitte an die Windowsbenutzer wäre, daß mal jemand die 2 Varianten 
ausprobiert. Wenn m80l80pc die bessere Alternative ist, würde ich das 
mit ins Makefile aufnehmen. Das aktuelle Makefile mit zxcc sollte auch 
unter Windows ohne Änderung laufen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Leo C.

Danke für die Info! Ich hab die V91 mal reaktiviert. Das nun auftretende 
Fehlerbild ist fast der Supergau. Hier ein Logauszug:

CPM on an AVR, v1.0
Testing RAM: fill...wait...reread...
Initing mmc...MMC: <--0A, -->FF
MMC: <--09, -->FF
MMC: <--08, -->FF
MMC: <--07, -->FF
…
MMC: <--FF, -->AA
MMC: <--FF, -->40
MMC: <--FF, -->E3
MMC: <--FF, -->FF

CP/M partition at: 8097, size: 4144KB.
CP/M partition at: 16385, size: 7808KB.
Partinit done.MMC: <--FF, -->FF
MMC: <--51, -->FF
MMC: <--00, -->FF
MMC: <--3F, -->FF
…
MMC: <--FF, -->E3
MMC: <--FF, -->1F
MMC: <--FF, -->3E
MMC: <--FF, -->FF

Ok, CPU is live!
ipl
DISK I/O: Invalid Function code: 01

Der letzte Fehler ist klar - ist das aktuelle BIOS auf der Karte. Aber 
hier wird die Karte richtig und vollständig gelesen. Fragen über 
Fragen...
Joe

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Nachtrag:

Ich habe auch nochmal das alte BIOS übersetzt und auf die Karte 
geschrieben.

CPM on an AVR, v1.0
Testing RAM: fill...wait...reread...
Initing mmc...
CP/M partition at: 000, size: 8192KB.
Partinit done.
Ok, CPU is live!

ipl
62k cp/m vers 2.2

A>dir
A: ASM      COM : DDT      COM : DUMP     COM : ED       COM
A: LOAD     COM : PIP      COM : STAT     COM : SUBMIT   COM
A: T        COM : TIMER    COM : ZORK1    COM : ZORK1    DAT
A: ZAP80    COM : MBASIC   COM : ELIZA    BAS

Das ist der Ergebnis der "neuen Hardware" mit der alten Software.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> CP/M partition at: 8097, size: 4144KB.
> CP/M partition at: 16385, size: 7808KB.
> Partinit done.MMC: <--FF, -->FF
> MMC: <--51, -->FF
> MMC: <--00, -->FF
> MMC: <--3F, -->FF
> …
> MMC: <--FF, -->E3
> MMC: <--FF, -->1F
> MMC: <--FF, -->3E
> MMC: <--FF, -->FF
>
> Ok, CPU is live!
> ipl
> DISK I/O: Invalid Function code: 01
>
> Der letzte Fehler ist klar - ist das aktuelle BIOS auf der Karte.

Wie meinst Du das? Der Code sieht eher nach einem zu alten Bios aus.
Das ursprüngliche BIOS hatte hier die Codes 01 und 02. Ich habe es 
geändert auf Codes >= 40. Der "Code" könnte aber auch dadurch zustande 
kommen, daß das BIOS nicht vollständig geladen wird.

> Aber
> hier wird die Karte richtig und vollständig gelesen.

Bist Du sicher?
Bei all den Versuchen, die ich vorher gesehen hatte, war das auf mmc 
Treiberebene aber auch der Fall.

Mir ist jetzt aber noch was anderes eingefallen:

Wieviele Sektoren werden beim Booten denn gelesen?
Anders gefragt: Wieviele Sektoren liest Dein ipl und wie wird/wurde Dein 
cpm.bin gebaut. Ursprünglich wurden vom ipl 2 Sektoren zu wenig geladen, 
und vom Makefile 1 Sektor zu wenig vom bios.bin kopiert. Mit dem 
damaligen BIOS war das egal, weil es klein genug war.

Logauszug Rev. 78
1
* cpm/Makefile:
2
  - cpm.bin: Copy (all) 7 sectors from bios.bin.
Logauszug Rev. 63
1
* cpm/ipl.asm
2
  - Increased number of sectors to load from 49 to 51 (= all reserved sectors).


Deinen neuen Artikel habe ich gesehen. Obige Fragen bleiben.

> Fragen über Fragen...

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> * cpm/Makefile:
>   - cpm.bin: Copy (all) 7 sectors from bios.bin.

Mein (Windows) Makefile hat nur 6 Sektoren gelesen, dumme Sache. Ich muß 
mal alle Makefiles überprüfen.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Leo C. schrieb:
>> * cpm/Makefile:
>>   - cpm.bin: Copy (all) 7 sectors from bios.bin.
>
> Mein (Windows) Makefile hat nur 6 Sektoren gelesen, dumme Sache. Ich muß
> mal alle Makefiles überprüfen.

ipl nicht vergessen. Ich meine, daß die 6 Sektoren gerade noch reichen.
Jedenfalls hats gereicht, als ich die Änderung gemacht habe, und beim 
neuesten BIOS reichts auch. Aber die 5 Sektoren, die der alte ipl 
kopiert, reichen nicht.

von Peter Z. (flexopete)


Angehängte Dateien:

Lesenswert?

Hallo,

habe mal versucht, ein Foto von der Bilschirmausgabe
des VGA-Teils zu machen. Es ist ein 15" TFT.

Gruss
Peter

von Frank Z. (fzoll)


Lesenswert?

Hallo Peter.

Genau so siehts bei mir derzeit auch aus. Da der Font noch nicht 
angepasst ist, fehlen an den Zeichen rechts immer 2 Pixel. Und da die 
Höhe des Fonts nur 8 und nicht 16,667 Pixel ist, liest er am Ende über 
den Pufferspeicher hinaus. Als nächstes muss ich erstmal einen 
vernünftigen Font basteln und die Ausgaberoutine daran anpassen. Danach 
kann ich daran gehen, die fehlennden Funktionen des VT100 Terminals 
nachzubauen.

Grüße
Frank

von Peter Z. (flexopete)


Lesenswert?

Moin Frank,

fehlt nicht eher links was oder hängt das mit dem
Schieberegister zusammen? Wenn Du mir kurz erklären,
wie es aufgebaut ist, kann ich Dich beim Font
unterstützen. Ist ja eher ne Fleissarbeit.
Verstehe ich es richtig, dass in der font.c jede
Spalte ein 8x8 Zeichen ist? 1.Spalte 0x00 bis 0xff.
Sind dies schon die ASCII Adressen? Bei 16x6 werden
die Zeichen rel. schmal, obwohl, es geht ja min.
1 linie als Zwischenraum weg.

Gruss
Peter

von Frank Z. (fzoll)


Lesenswert?

Hallo Peter.

Ich habe schon einen einfachen Font angefangen. Im moment fehlen mir 
"nur" noch die Kleinbuchstaben. Und ich muss das File nacher noch 
passend aufbereiten. Ich spiele gerad mit einem ganz einfachen 
Fonteditor rum.

Der Font wie er in der Font.c abgelegt ist, ist praktisch Zeilenweise 
abgelegt. Pro Zeile eines Zeichens wird immer genau 1 Byte verwendet. 
Jedoch sind nicht etwa alle Zeichen einfach nacheinander Zeile für Zeile 
abgelegt.

Die Tabelle ist so angelegt, das jeweils eine Spalte von oben nach unten 
gesehen ein Zeichen bildet. Von Links nach Rechts sind die Zeichen von 
ASCII- Code 0 bis 255 aufsteigend abgebildet.

Das erleichtert der Bildaufbauroutine den Zugriff ganz enorm.

Mit der Aussage, es fehlt eher links was könnte stimmen. Wenn man die 
Bits eher so Zählt 76543210, dann würde er links 2 Bits wegwerfen. Auf 
jeden Fall werden nur die 6 niederwertigsten Bits auf den Port 
ausgegeben. Und das Abschneiden an der Linken Seite würde auch zu deinem 
Foto besser passen.

Grüße
Frank

von Peter Z. (flexopete)


Angehängte Dateien:

Lesenswert?

Hallo Frank,

ich habe mal ein paar Buchstaben der 8x8 aufgemalt. Bei
"B" und "D" sieht man den senkrechten Strich noch auf dem
Monitor, weil sie eine Serife haben. Es fehlen also links
2 Bit. Die Ziffern rechts sind die cursor Positionen in
der font.c im AVR-Studio.

Gruss
Peter

von Leo C. (rapid)


Lesenswert?

Neues Format.

Ich habe mir heute nochmal die Formate des genialen simh Altair 8800 
Emulators angeschaut. Das Diskettenformat kann man vergessen. Das 
Harddiskformat ist aber ganz simpel und ich habe es schon eingebaut.

Kleiner Wermutstropfen: Das Format hat zwar 6 Systemspuren a 32 Sektoren 
reserviert, aber wenn man dort ein System zum booten einspielt, kann es 
nicht mehr erkannt werden. Das werde ich aber irgendwann mal ändern.

Zu dem Emulator gibt es eine ganze Menge Diskimages mit guter Software. 
Allerdings sind das alles Diskettenimages. Aber man kann sie ja im 
Emulator einfach auf "Harddisk" umkopieren. Hier kann man alles 
runterladen:
http://www.schorn.ch/cpm/intro.php

Hier ist eine Formatbeschreibung für die cpmtools:
1
# SIMH AltairZ80 Harddisk
2
diskdef simhd
3
  seclen 128
4
  tracks 2048
5
  sectrk 32
6
  blocksize 4096
7
  maxdir 1024
8
  skew 0
9
  boottrk 6
10
  os 2.2
11
end

von Frank Z. (fzoll)


Angehängte Dateien:

Lesenswert?

Halloe.

Es ist schon späht, aber ein kleines Update möchte ich euch noch zum 
anschauen überlassen. Im Anhang findet ihr eine erste Version der 
Routinen mit einem 6*16 Font. Bitte nicht zu genau drauf schauen, ich 
habe den Font mal eben schnell komplett neu gezeichnet. Und ich bin bei 
weitem kein Mahlkünstler :-)

Leider habe ich keinen wirklich guten kostenlosen Editor für Windows 
gefunden. Man sieht beim Malen nicht, wie es nacher im gesammten 
wirklich aussieht. Ich werde den Font nochmal ein bissel überarbeiten, 
aber man kann nun wenigstens schonmal was erkennen. :-) Etwa in der Art 
wird es nacher ausschauen.

Da ich noch ein "einfaches" Attribut umsetzen könnte frage ich einfach 
mal. Invertiert oder lieber Unterstrichen, was hättet ihr lieber ?

Grüße
Frank

p.s. die 25. Zeile mit dem Müll darin werde ich in der nächsten Version 
ausblenden, so das sie nicht mehr stört.

von Leo C. (rapid)


Lesenswert?

Ich habe das SVN-Repository etwas umstrukturiert. Alte Links aus dem 
Forum werden wohl nicht mehr funktionieren, sorry. Vom Top-Level aus 
dürfte es aber kein Problem sein, alles wieder zu finden.

In avrcpm/trunk gibt es ein neues "tools" Verzeichnis, in dem jetzt 
Franks Progamm zum Vergößern von Images zu finden ist. Da das Programm 
jetzt mit E5 Hex statt mit Nullen füllt, kann man es auch zum Erzeugen 
neuer Images verwenden. Unter Linus geht das z.B. so:
1
$ ./makeimage /dev/null myz80.img $(expr 128 \* 65536 + 256)
2
$ ./makeimage /dev/null simhd.img $(expr 128 \* 65536)

Unter Windows müßte es so ähnlich auch gehen. Falls es dort kein 'expr' 
oder ähnliches gibt, muß man die Größe selbst ausrechnen.

Das Resultat kann man in eine CP/M- oder unter passendem Namen, in eine 
FAT16- Partition kopieren, und man hat ein frisch formatiertes CP/M 
Dateisystem.

Außerdem gibt es noch ein Verzeichnis 'avrvga', das für die 
Terminalsoftware von Frank vorgesehen ist. (Änderungen vorbehalten)

von Peter Z. (flexopete)


Lesenswert?

Hallo Frank,
welchen Font-Editor hast Du benutzt? Ich habe mal einige
Zeichen von Hand geändert (Bleistift und Papier). Aber bei
6 Pixel Breite hat man natürlich keine große Auswahl.
Typografisch ist was anderes.

Gruss
Peter

von Frank Z. (fzoll)


Lesenswert?

Halloe.

Heute habe ich mich erstmal ein wenig um die Terminalemulation 
gekümmert. Am Bildschirmende wird nun nicht mehr einfach der ganze 
Bildschirm gelöscht. Statt dessen Scrollt der ganze Bildbereich nun eine 
Zeile aufwärts. Hier habe ich leider noch ein sehr eckliges Flackern 
beim Scrollen, das ich noch nicht weg bekommen habe.

Auch um die Tastaturanbindung habe ich mich schon ein wenig kümmern 
können. Bisher habe ich die Interruptroutine auch noch nicht ans laufen 
bekommen. Im moment plagt mich noch die befürchtung, das der 
Tastaturinterrput evtl. den gesammten Bildaufbau durcheinander bringen 
könnte bei jedem Bit, das die Tastatur an den Controller schickt. Leider 
habe ich hier weder ein Osziloskop noch einen Logiganalyzer, so das ich 
im moment ein wenig im dunkeln stochere was das Problem angeht.

Grüße
Frank

von Sebastian B. (sfreak) Benutzerseite


Lesenswert?

Frank Zoll schrieb:
> Auch um die Tastaturanbindung habe ich mich schon ein wenig kümmern
> können. Bisher habe ich die Interruptroutine auch noch nicht ans laufen
> bekommen. Im moment plagt mich noch die befürchtung, das der
> Tastaturinterrput evtl. den gesammten Bildaufbau durcheinander bringen
> könnte bei jedem Bit, das die Tastatur an den Controller schickt. Leider
> habe ich hier weder ein Osziloskop noch einen Logiganalyzer, so das ich
> im moment ein wenig im dunkeln stochere was das Problem angeht.

Du willst für die Tastatur einen interruptgesteuerten Software-UART 
benutzen? Ich weiß nicht wie es bei dir jetzt aussieht, aber in meinem 
Code war während einer Videozeile kein einziger Takt übrig. Deshalb habe 
ich die Arbeit einem Hardware-UART überlassen und nur in der 
horizontalen Austastlücke ggf. ein empfangenes Byte zwischengespeichert. 
Wenn du auf jedes Bit reagieren musst, wird das nicht reichen.

Sebastian

von Frank Z. (fzoll)


Lesenswert?

Hallo Sebastian.

Ja, ich muss die Arbeit notgedrungener Massen selber machen. Der 168er 
AVR Controller hat leider nur einen UART. Und der ist bereits für die 
Verbindung zwischen dem VGA- Teil und dem CP/M Emulator belegt. Im 
moment gehe ich davon aus, das ggf. jedes einzelne Bit das von der 
Tastatur kommt alles durcheinander bringen könnte, wenn der Interupt 
wärend der Pixelausgabe zuschlägt. In der vorliegenden Hardware ist der 
Clockausgang der Tastatur mit dem INT1- Eingang des Controllers 
verbunden. Im moment versuche ich gerade diesen Interrupt überhaupt 
erstmal ans laufen zu bekommen. Soweit meine Rechergen ergeben, sendet 
eine Standarttastatur mit einer Taktrate von 20 bis 30 Khz. Bei der 
derzeitigen Auflösung mit 400 aktiven Zeilen bei 74HZ, hätten wir 
rechnerisch 29,6 KHz abtastfrequenz, wenn wir es schaffen wären des 
horizontales Blanks jeweils einen Tatsaturtakt abzuarbeiten. Das könnte 
gerade so eben hinkommen würde ich sagen. Ich weiss nur noch nicht, wie 
ich den Intterupt so lange heraus zögern kann, bis eine Grafikzeile 
vollständig abgearbeitet wurde. Gänzlich verschlucken darf ich dabei ja 
auch keinen einziegen Takt, sonst komme ich bei der Verarbeitung der 
Datenbits durcheinander. Bin mal gespannt, ob ich das ganze irgendie in 
den Griff bekomme.

Grüße
Frank

von Sebastian B. (sfreak) Benutzerseite


Lesenswert?

Die Verzögerung des INT1 passiert ganz von alleine:
Die Videozeile wird in einer ISR ausgegeben. Tritt während diese ISR 
läuft der ext. Interrupt auf, wird nur das entsprechende INT1 
Interrupt-Flag gesetzt. Die INT1 ISR wird erst ausgeführt wenn die Video 
ISR zurückkehrt.

Da Zeilen- und Tastaturtakt aber nicht synchron sind, wird früher oder 
später einen Takt verloren gehen.

(Verschachtelte Interrupts gehen auch, hab ich noch nie benutzt: 
http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html )

von h3aau (Gast)


Lesenswert?

Nur mal so der Neugierde habler......
640x400 Pixel heisst doch 640 / 8 = 80 Zeichen.
                          400 / 8 = 50 Zeilen.
Ein Zeichen besteht also aus einer 8x8 matrix.
Bei dieser werden nur die Bits xx543210 horizomtal verwendet.
Bit 76xxxxxx sind die Zwischenräume der Zeichen.
In der vertikalen werden nur die Zeilen 0,1,2,3,4,5, und 6 verwendet.
Zeile 7 ist der Abstand zwischen den Zeilen.
Also besteht ein Zeichen eigentlich aus einer 6x7 Matrix.

z.B.  xx543210xx543210
         1111   1111    = 0x3C,0x3C
        1    1   1  11  = 0x41,0x13
        1    1   1  11  = 0x41,0x13
        111111  11111   = 0x3F,0x3E
        1    1   1  11  = 0x41,0x13
        1    1   1  11  = 0x41,0x13
        1    1  1111    = 0x41,0x3C
                        = 0x00,0x00
Bei 25Mhz Taktung gehen nur die 640x350, 640x400 und 640x480 Modis.
                                 80x43    80x50       80x60
Wollt ihr die uVGA auf 80x25 umstellen?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

h3aau schrieb:
> Bei 25Mhz Taktung gehen nur die 640x350, 640x400 und 640x480 Modis.
>                                  80x43    80x50       80x60
> Wollt ihr die uVGA auf 80x25 umstellen?

Geplant war 640x400 also 80x50 und dann jede zweite Zeile frei, also 80 
Zeichen zu 25 Zeilen. Mehr geht eh nicht in den RAM.

von fzoll (Gast)


Lesenswert?

Halloe.

Wir haben auf 80*24 Zeichen umgestellt mit einem neuen Font von 6(Breit) 
* (16) Hoch Pixeln größe. Wobei nach jedem 6 Pixel breiten Zeichen 2 
schwarze Pixel gesendet werden. 25 Zeilen passen nicht in den Speicher, 
weil dies mit den benötigten Variablen für den UART und den Keyboard- 
Puffer sowie die globalen Statusvariablen und den Stack kollidieren 
würde. Die Auflösung bleibt aber 640*400 wobei die letzten 8 Zeilen 
einfach nur schwarz ausgebeben werden.

Grüße
Frank

p.s. Für den Tastaturanschluss siehts ganz düster aus. Der Interrupt 
haut wenn er prio bekommen würde 2 mal pro Bidlschirmzeile rein und 
würde das ganze Bild durcheinander bringen. Und da die Clockerzeugung 
von der Tastatur vorgegeben wird, können wir darauf keinen Einfluss 
nehmen.

von h3aau (Gast)


Lesenswert?

also:
z.B.  xx543210xx543210
0         1111   1111    = 0x3C,0x3C

1        1    1   1  11  = 0x41,0x13

2        1    1   1  11  = 0x41,0x13

3        111111  11111   = 0x3F,0x3E

4        1    1   1  11  = 0x41,0x13

5        1    1   1  11  = 0x41,0x13

6        1    1  1111    = 0x41,0x3C

7                       = 0x00,0x00

geht das?
Font als 6x16, alle ausgeben und Unterlängen nutzen?
z.B.    xx543210xx543210
 0        1    1          = 0x21,0x00
 1                        = 0x00,0x00
 2         1111           = 0x3C,0x00
 3        1    1          = 0x21,0x00
 4        1    1          = 0x21,0x00
 5        111111   1111   = 0x3F,0x3E
 6        1    1   1  11  = 0x21,0x13
 7        1    1   1  11  = 0x21,0x13
 8        1    1   1111   = 0x21,0x3C
 9                    1   = 0x00,0x02
10                     1  = 0x00,0x01
11                 1  1   = 0x00,0x12
12                  11    = 0x00,0x0C
13                        = 0x00,0x00
14                        = 0x00,0x00
15                        = 0x00,0x00

von fzoll (Gast)


Lesenswert?

Halloe.

Ja das mit den unterlängen geht Problemlos. Ich habe es bei meinem Font 
auch so gemacht. Die "Nulllinie" liegt dort auf der 12. Zeile. So sehen 
die Buchstaben nacher im Display recht gut aus. Nur so Buchstaben wie W 
und M die eigentlich besonders breit sind sehen bei 6 Punkten breite 
nicht berauschend aus. Aber Lesbar ists auf jeden Fall geworden würd ich 
sagen.

Ach ja, nochwas. Da CP/M Terminals nur 7bit ASCII- Codes verwendet 
haben, habe ich das 8. Bit dafür genutzt Inverse Zeichen möglich zu 
machen. Dazu habe ich alle Zeichen von 0-127 in den Bereich 128-255 
kopiert und die Bits negiert. So kann ich spähter zumindest das Attribut 
"invers" mit unterstützen. Wahlweise hätte man auch "unterstrichen" 
nehmen können. Blinken z.B. würde nicht gehen, da wären der Ausgabe der 
Pixel kein einzieger Tackt mehr für Sonderfunktionen über ist.

Grüße
Frank

von Egmont (Gast)


Lesenswert?

Hallo

fzoll schrieb:
> Für den Tastaturanschluss siehts ganz düster aus. Der Interrupt
> haut wenn er prio bekommen würde 2 mal pro Bidlschirmzeile rein und
> würde das ganze Bild durcheinander bringen. Und da die Clockerzeugung
> von der Tastatur vorgegeben wird, können wir darauf keinen Einfluss
> nehmen.

es gibt eine möglichkeit der Tastatur zu sagen das der Atmel nicht 
bereit ist Daten aufzunehmen und die werden dann in der Tastatur 
zwischengespeichert.

siehe Link.
http://www.marjorie.de/ps2/ps2_protocol.htm

Kommunikation: Allgemeine Beschreibung

PS/2 Mäuse und Tastaturen benutzen ein bidirektionales, synchrones 
serielles Protokoll. Im Ruhezustand sind beide Busleitungen High. Nur in 
diesem Zustand darf die Tastatur/Maus mit der Datenübertragung beginnen. 
Der Host hat die absolute Kontrolle über den Bus und darf die 
Kommunikation jederzeit unterbrechen, indem er die Clockleitung auf Low 
zieht.

oder...
http://www.beyondlogic.org/keyboard/keybrd.htm

Keyboard to Host
...
The keyboard is free to send data to the host when both the KBD Data and 
KBD Clock lines are high (Idle). The KBD Clock line can be used as a 
Clear to Send line. If the host takes the KBD Clock line low, the 
keyboard will buffer any data until the KBD Clock is released, ie goes 
high. Should the Host take the KBD Data line low, then the keyboard will 
prepare to accept a command from the host.

Gruß Egmont

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

fzoll schrieb:
> Für den Tastaturanschluss siehts ganz düster aus. Der Interrupt
> haut wenn er prio bekommen würde 2 mal pro Bidlschirmzeile rein und
> würde das ganze Bild durcheinander bringen. Und da die Clockerzeugung
> von der Tastatur vorgegeben wird, können wir darauf keinen Einfluss
> nehmen.

Einfach mal eine Idee.

A.)
Tasttatur auf der VGA Platine kommt an die Hardware UART und die 
Verbindung zum CP/M System erfolgt über eine Soft-UART analog der schon 
realisierten.

B.)
Auf dem CP/M System sind ja noch zwei Leitungen frei. Über diese beiden 
Leitungen wird die Tastatur angeschlossen. Da Sie beide am 
Verbindungssteckverbinder anliegen, sollte das ohne großen 
Hardwareänderungsaufwand zu realisieren sein.
Joe

von fzoll (Gast)


Lesenswert?

Hallo Egmont und Joe.

Leider ist die Idee von Egmont nicht brauchbar. Das Problem ist, das die 
tastatur zu langsam wäre die gesammten 11 Byte eines Zeichens wärend des 
Vertical- Syncs zu senden. Und man kann die Übertragung nicht 
mittendrinn anhalten. Sobald der Host (VGA-Contrloller) sagen würde, das 
er nicht mehr zum Empfang bereit ist, wird nach Standard die Übertragung 
komplett abgebrochen. Eine Pause ist im Protokoll nicht vorgesehen. 
Leider.

Joe's Ideen an den UARTS und der Platine etwas zu verändern würden wohl 
am meisten bringen.
Meine Idee ziehlt aber eher gerad in eine etwas andere Richtung. Ich 
wollte die schöne Platine nicht "kaputt" machen. Statt dessen denke ich 
gerade darüber nach mir einen ganz kleinen AVR- Controller auszusuchen 
und ihn einfach als "Adapter" zwischen den VGA- Controller und die 
Tastatur zu hängen. Dieser hätte dann genügend Zeit um alle Zeichen, die 
die Tastatur sendet, zwischen zu Puffern. Und die beiden bestehenden 
Datenleitungen aus dem PS/2 Port der Platine würde ich dann nutzen um 
vom Adaptercontroller die Bits stück für stück abzuholen. Wobei ich dann 
den Tackt wärend der horizintalen Sync- Zeiten auf seiten des VGA- 
Controllers generieren würde.
Wenn wir es schaffen, da einen 4Pinner zu finden und zu Programmieren, 
dann könnte man das Teil super einfach mit ein wenig Schrumpfschlach in 
ein kleines Adapterkabel einbauchen und wird müssten die schöne Platine 
nicht patchen.

Für eine Neuauflage würde ich das ganze dann gleich etwas anders 
desigenen. Ich würde für den VGA- Teil einen Propeller Chip nehmen, der 
hätte genügend Power um VGA/TV, sammt Tastatur und Maus zu händeln. 
(DIP40 Gehäuse). Da wären dann auch die VT100- Attribute möglich. auch 
in hochen Auflösung....

Grüße
Frank

von fzoll (Gast)


Lesenswert?

Ups, ich meinte nicht 11 Byte, sondern 11 Bit. :-)

von h3aau (Gast)


Lesenswert?

PS2 komplett innerhalb des Zeilen-Sync zu machen geht nicht.
Vorschlag:
Da eine Zeile aber c.a. 25us dauert kann man 1/2 Bit pro Zeile 
bearbeiten.
Dieses kann innerhalb des Zeilen-Sync erfolgen.
Also innerhalb des Zeilen-Sync eine halbe Clock-Phase für PS2 erzeugen, 
und so jede zweite Zeile ein Bit lesen oder senden.
Der PS2 Byte-Transfer könnte auch Bild-Syncron starten, das wäre immer 
noch schnell genug.

von Egmont (Gast)


Lesenswert?

Hallo

h3aau schrieb:
> Also innerhalb des Zeilen-Sync eine halbe Clock-Phase für PS2 erzeugen,

Zitat von http://www.marjorie.de/ps2/ps2_protocol.htm :
--------
Das Clock-Signal wird immer von der Tastatur/Maus erzeugt, aber der Host 
hat die Kontrolle über die Kommunikation.
...
Die Clockfrequenz muß im Bereich von 10-16,7 kHz liegen. Das heißt, das 
Clock-Signal muß für 30-50 µs High und für 30-50 µs Low sein.
--------
Wenn eine Zeile 25 µs dauert kann man dann nicht nach jedem Ende Clock 
und Data auswerten? Bei 11 bit sollte man das synchron hinbekommen.

fzoll schrieb:
> Das Problem ist, das die
> tastatur zu langsam wäre die gesammten 11 Byte eines Zeichens wärend des
> Vertical- Syncs zu senden.

Wieviel Zeit hat man in der Bild-Synchronisation.
oder...
gibt es die Möglichkeit ein Bildaufbau auszulassen ??

Gruß Egmont

von fzoll (Gast)


Lesenswert?

Halloe.

Leider kann der HOST den PS/2 Clocktackt nicht beeinflussen. Das Clock- 
Signal wird von der Tastatur generiert. Die Geschwindigkeit schwankt 
hier je nach Tastatur zwischen ca. 10kHz und 30kHz. Man könnte nun 
natürlich eine Suche starten und schauen ob man eine Tastatur finden 
kann, dessen Clock-Signal zu unserem VGA- Signal "compatibel" ist.

Man kann auch kaum voraus sagen, wann die Tastatur ein Bit 
senden/empfangen möchte. Im Grunde genommen startet der Tastaturclock in 
dem moment in dem man eine Taste drückt. Kurze verzögerungen innerhalb 
des Controllers mal ausser acht gelassen.

Diesen Start kann man unterbinden und hinauszögern, indem man dies per 
Busy-Signal meldet. Wenn der Start aber erstmal erfolgt ist, würde das 
melden des Busy- Signals aber nur den abbruch der aktuellen Übertragung 
bewirken. Einigen Tastaturen soll das setzen des Busy- Signals sogar 
egal sein, sie senden dann einfach weiter. Die Folge wäre ein 
Datenverlust.

Ich habe mal versucht, meiner Tastatur ein Clock-Signal durch den Host 
generiert aufzuzwingen. Am Ende kam dabei aber nur Datenschrott zu 
stande, weil die Tastatur immer wieder ihre Übertragung abgerochen und 
neu gestartet hat und ich somit immer wieder die ersten Bits der 1. 
gedrückten Taste zu sehen bekahm.

Grüße
Frank

von h3aau (Gast)


Lesenswert?

ups, von der falschen Seite aus geschaut..... sorry.

von Frank Z. (fzoll)


Angehängte Dateien:

Lesenswert?

Halloe.

Ich spiele gerad mit dem Gedanken, das PS/2 Keyboardproblem durch den 
Einsatz eines weiteren Controllers zu erschlagen. Anbei ein kleines 
Schema von dem was ich mir vorstelle. Ich denke darüber nach, einen 
kleinen 8Pinner AVR Controller in die Leitung zwischen der PS/2 Buchse 
auf der Platine und der Tastatur zu einzubringen. Ich würde die 
Clockleitungen beider Seiten auf Interrupt- Eingänge des AVR- 
Controllers legen und die 2 Datenleitungen auf die übrigen Pins 
verteilen.

Nun könnte man den AVR- Controller so Programmieren, das er auf der 
einen Seite Datenbytes der Tastatur mit der geschwindigkeit, wie sie 
durch die Tastatur festgelegt wird empfangen kann. Diese Bytes könnte 
der Controller dann in seinem SRAM zwischenspeichern, bis sie durch den 
VGA- Controller auf unserer Platine abgeholt werden. Hierzu würde ich 
den VGA- Controller ebenfalls einen Tackt ausgeben lassen. Das 
Tacksignal könnten wir dann relativ problemlos in der HSYNC- Phase 
erzeugen lassen. Wir könnten auf geraden Ausgabezeilen einen Tackimpuls 
erzeugen und auf ungeraden Zeilen die Daten entgegen nehmen. So könnten 
wir dann am Ende die Datenbytes stück für stück vom "Puffercontroller" 
abholen. Ein weiterer Vorteil wäre, das der Puffercontroller je nach 
größe bis zu 512 Zeichen Puffer bereit stellen könnte. Im moment denke 
ich an einen ATtiny45 für knapp 1,82€, welcher uns einen 256 Byte Puffer 
schenken würde und leicht zu beschaffen ist.

Was ich daran nett finde ist, das wir dafür an der Platine keine 
Änderungen vornehmen müssten. Und auch der Geldliche Aufwand wäre ja 
minimal. (1 Stecker, 1 Buchse, der ATtiny Controller, ein Kerko und ein 
Widerstand). Das ganze sollte sich recht einfach "fliegend" aufbauen 
lassen.

Was haltet ihr von der Idee, wäre das eine nette Lösung für das 
Keyboard- Problem ?

Freundliche Grüße
Frank

von Egmont (Gast)


Lesenswert?

Hallo Frank
Egmont schrieb:
> gibt es die Möglichkeit ein Bildaufbau auszulassen ??
Hier noch mal eine genaue Erklärung was ich damit meinte...

bei einer Vertical Frequency von ca. 70Hz kann man da nicht ein 
komplette Bildaufbau auslassen. Mit auslassen meine ich keine Daten 
ausgeben nur Hsync und Vsync.
Ein Bildaufbau dauert 12 ms (Active video time)soviel Zeit hat man die 
Tastatur auszulesen.
- der Tastatur durch setzen von Clock auf High signalisieren das man 
bereit  ist Daten aufzunehmen.
- Daten einlesen (Tastatur kann 16 Byte im eigenem Buffer aufnehmen)
- Clock auf Low setzen.
- Bilddaten 69 mal ausgeben... und so weiter.

Ein Bildaufbau aussetzen (dunkel) sollte man eigendlich nicht merken.

Was meinst du, ist das machbar ?!?

Gruß Egmont

von Frank Z. (fzoll)


Lesenswert?

Hallo Egmont.

Einen Bildaufbau bei Bedarf aus zu lassen wäre wohl Problemlos möglich. 
So lange die SYNC- Signale trozdem erzeugt werden, sollte der Monitor 
nicht aus dem Tackt kommen. Damit hätte man eine Menge freier 
Prozessorzeit über, um Daten von der Tastatur einzulesen. Das ganze wird 
wohl ein bissel Tricky, ich könnte mir aber vorstellen das das machbar 
wäre.

Freundliche Grüße
Frank

von Hans- w. S. (hschuetz)


Lesenswert?

@fzoll
eine Tastaturlösung mit eigenem Kontroller hab ich fertig hier liegen.. 
nur der Reiz wäre schon Tastatur und VGA auf einem Chip...
Allerding sollte es nicht funktionieren...
gruß
Hans- Werner

von Marc (Gast)


Lesenswert?

Wäre folgendes für den VGA-Kontroller möglich:

Tastatur über seriellen Port anschließen. Die Verbindung zum 
CPM-Prozessor mit zwei freien Portpins herstellen und eigenes, I2C 
ähnliches ( synchrones Protokoll ) implementieren.

von Peter Sieg (Gast)


Lesenswert?

Noch ein Vorschlag (habt ihr aber sicher auch schon dran gedacht..)
Wenn der VGA-AVR das nicht mehr sauber packt.. dann den CP/M AVR nehmen 
und
die 2 KBD Leitungen halt umlegen..

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Frank Zoll schrieb:
> Was haltet ihr von der Idee?

Wie im richtigen Leben gibt es für jede Lösung Pro und Contra. Ein ganz 
wichtiges Argument: „Die schöne Platine nicht kaputt zu machen“ Da geht 
eigentlich nichts drüber!
Doch nun weg von den emotionalen und hin zu den sachlichen Argumenten.
Soll die VGA Karte als eigenständiges „Terminalmodul“ fungieren, so ist 
eine einfache universelle Schnittstelle immer von Vorteil. Das ist mit 
der derzeitigen V24 gegeben. Würde die Tastatur über die beiden I2C 
Leitungen der AVR CP/M Platine abgefragt, so wäre das ein Systembruch im 
Sinne eines eigenständigen Terminals. Die Lösung von Frank einen 
Attiny45 zu nehmen hat auch ihren Charme.  Damit könnten sogar solche 
Kunstwerke wie die Logitech diNovo Mini™ adaptiert werden.
Joe

von Frank Z. (fzoll)


Angehängte Dateien:

Lesenswert?

Halloe.

Ich habe Egmont's Idee einmal zum Testen umgesetzt. VGA und Tastatur 
lassen sich nun zusammen mit dem Terminal betreiben. Und das ganz ohne 
Änderungen an der Platine oder zusätzliche Hardware.

Um das ganze recht einfach zu halten, habe ich es so umgesetzt, das 
jedes 32. Bild ausgelassen wird, um die Tastatur zum Zug kommen zu 
lassen. Auf meinem 17Zoll-Monitor ist das Auslassen eines Bildes 
deutlich als Flackern erkennbar. Ob ich damit Stundenlang arbeiten 
möchte, lasse ich einfach mal dahin gestellt.

Mal schauen, ob man es noch ein wenig weiter Verbessern kann. Anbei mal 
die aktuelle Version für euch zum Rumspielen.

Freundliche Grüße
Frank

p.s. Ich habe längst noch nicht alle VT100 - Kommandos umgesetzt, mir 
war erstmal wichtiger VGA und Tastatur ans laufen zu bekommen.

von Frank Z. (fzoll)


Lesenswert?

Halloe.

Da die Idee mit dem Auslassen eines ganzen Bildes recht gut Funktioniert 
hat, habe ich mal versucht das ganze so Umzustricken, das es komplett 
während der VSYNC- Zeit läuft. Dies hat mit meiner Tastatur leide rnicht 
funktioniert. Es kahm kein einziges Byte mehr rüber. Danach habe ich mal 
versucht, die Zeit der letzten 16 Zeilen, die eh nicht ausgegeben 
werden, mit dazu zu nehmen. Nun konnte ich zwar ein paar Zeichen 
empfangen, hatte aber immer wieder Übertragungsfehler. Mal schauen, was 
sich da noch machen läßt.

Habt ihr vieleicht noch Ideen ?

Ach ja, einen seltsamen Fehler habe ich auch noch beobachten können. Mit 
dem "BDOS" zusammen Funktioniert es eigentlich supi. Aber wenn man 
Programme läd, gehts nicht mehr richtig. Konkrett die RETURN- Taste 
schein nicht mehr abgefragt zu werden. Bei ZORK und MBASIC kann man zwar 
munter etwas eintippen, aber wenn man RETURN drückt passiert nichts. Ich 
vermute mal, das es noch fehler in der VT100 Emulation sind, die wir 
noch beseitigen müssen.

Grüße
Frank

von Egmont (Gast)


Lesenswert?

Hallo Frank

Frank Zoll schrieb:
> Habt ihr vieleicht noch Ideen ?

Wenn in den letzten 16 Zeilen nichts mehr ausgegeben wird, sollte man da 
schon KB-Clock auf High setzen, wenn jetzt die Tastatur antwortet, also 
Daten hat, ein Bildaufbau komplett auslassen. Wenn in der Zeit nichts 
kommt, Bildaufbau normal ausgeben. Das heist das Bild "flackert" nur 
wenn man eine Taste drückt.

16 Zeilen * 25µs = 400µs -->
Clock muss für min 50µs High sein bevor Tastatur sendet. Also schafft es 
die Tastatur in der Zeit von 350µs zu signalisieren das sie Daten hat.
Das bedeutet auch das man 70 mal in der Sekunde versucht die Tastatur 
abzufragen ( ob was im KB-Buffer ist) ....
ist besser als....
2 mal in der Sekunde abzufragen und ein Bildaufbau auslassen (und dann 
hat der User noch nicht mal eine Taste gedrückt.... dumm gelaufen).

Egmont

von Thomas Hommel (Gast)


Lesenswert?

Hallo Frank,

Frank Zoll schrieb:
> Habt ihr vieleicht noch Ideen ?

Alles in der VSYNC-Zeit zu schaffen, wäre schon ideal. Wäre es nicht 
denkbar, vom Modus 640x400@70Hz auf 640x480@60Hz zu gehen? Horizontal 
bleibt alles gleich, es kommen nur 80 schwarze Pixelzeilen dazu. Grob 
überschlagen hätte man dann pro Bildaufbau etwa 4.3ms Zeit für 
Keyboardroutinen, während es bei 640x400 nur ca. 2ms sind.
Ich kann mir vostellen, dass die derzeit 2ms zu wenig sind, um eine 
Tastaturantwort entgegenzunehmen. Teilweise sind die Make/Breakcodes 
auch 2 oder 3 bytes lang, welche man von der Tastatur ohne Unterbrechung 
entgegennehmen muß.

Viele Grüße, Thomas

von Frank Z. (fzoll)


Lesenswert?

Hallo Thomas.

Ich habe deinen Vorschlag ausprobiert. In der aktuellenb SVN- Version 
ist die Auflösung nun 640*480 Pixel bei 60Hz(62Hz zeigt meine Monitor 
an).

Die Keyboardroutinen laufen nun vollständig wärend der Zeit in der keine 
aktive Videoausgabe erfolgt. Von 480 Zeilen werden nur 384 Zeilen 
ausgegeben. Den rest der Zeit hat nun die Keyboardroutine um Zeichen zu 
empfangen. Damit konnten wir das auslassen ganzer Bilder nun erfolgreich 
"wegoptimieren".

Das Bild bleibt nun recht stabiel. Flakern tut's im moment nur beim 
scrollen, da werde ich als nächstes mal drauf schauen.

Grüße
Frank

von Egmont (Gast)


Lesenswert?

Hallo,
habe folgendes Problem mit meiner AVR-VGA.
Signal ist vorhanden wenn ich mit dem Oscilloscope nachmesse.
wenn ich den Monitorstecker drauf stecke wird das Signal über die 470 
Ohm Widerstände auf 0,7 Volt gezogen aber Monitor zeigt kein Bild an.
Habe ein TFT und Röhrenmonitor ausprobiert beides das gleiche.
TFT schreibt das ein Eingangspegel vorhanden ist (Hsync unf Vsync).

>>>>> Sollte soweit doch Richtig sein ...oder mache ich da ein Denkfehler !
Laut Google erwartet Pin RGB 0,7 Vss und eine Impedanz von 75 Ohm.
Kommunikation von Tastatur zu CP-M funktioniert.
CP-M zu VGA kann ich jetzt noch nicht sagen aber aus PortC kommen Daten.

Habt ihr ein Tipp für mich woran das liegen könnte.

Gruss Egmont

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Egmont schrieb:
> Habt ihr ein Tipp für mich woran das liegen könnte.

Hast auch mal am Ausgang des Schieberegisters gemessen ob überhaupt 
Pixeldaten kommen?
Joe

von Egmont (Gast)


Lesenswert?

Hallo,
TFT läuft jetzt nachdem ich umgestellt habe auf neue Software (640x480)
Was mir noch aufgefallen ist, der TFT sagt mir unter Info das er eine 
Auflösung von 848x480@62Hz gefunden hat... und die Zeichen sehen nicht 
besonders schön aus.

Röhre sagt immer noch nichts !
Meine Vermutung ist, das die Röhre diese Auflösung nicht kann.

Was sagt eure Info vom Monitor ?

Gruss Egmont

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Egmont schrieb:
> Was sagt eure Info vom Monitor ?

640x480@60Hz

Deine Anzeige von 848x480@62Hz sieht nach einem unsauberen Syncronimpuls 
aus.

Egmont schrieb:
> und die Zeichen sehen nicht besonders schön aus.

Das passiert, wenn die Pixelauflösung des LCD nicht mit der der VGa 
übereinstimmt.

von Frank Z. (fzoll)


Lesenswert?

Hallo Egmont.

Beide Versionen 640*400 und 640*480 habe ich auf einem alten 
Röhrenmonitor getestet. Der iiyama Visionmaster Pro410 hatte keine 
Probleme mit der Anzeige, obwohl der Pixeltakt nicht genau genug ist. 
(62 statt 60 bzw. 74 statt 70 Hz).

Ich habe die neue Version mal auf einem "neueren" TFT Monitor 
ausprobiert, um zu schauen ob evtl. neuere Monitore mit der krummen 
Auflösung schwierigkeiten haben. Mein Samsung SyncMasterT220HD 
(BreitbildMonitor) hat keine Probleme, die Auflösung 640*480 @ 62HZ 
wieder zu geben. Der Font mit 6(8)* 16 Pixeln sieht sogar recht nett 
aus, weil der Monitor das Bild netterweise in der Breite für mich 
gestreckt hat.


Wie siehts den sonst so bei den anderen aus ? Habt ihr evtl. auch 
Monitore, die es Stört das der Pixeltakt nicht genau genug ist für 
640*480@60Hz ?

Grüße
Frank

von Egmont (Gast)


Lesenswert?

"VGA industry standard" 640x480 pixel mode

General characteristics

Clock frequency 25.175 MHz
Line  frequency 31469 Hz
Field frequency 59.94 Hz

One line

  8 pixels front porch
 96 pixels horizontal sync
 40 pixels back porch
  8 pixels left border
640 pixels video
  8 pixels right border
---
800 pixels total per line

One field

  2 lines front porch
  2 lines vertical sync
 25 lines back porch
  8 lines top border
480 lines video
  8 lines bottom border
---
525 lines total per field

von Egmont (Gast)


Lesenswert?


von Egmont (Gast)


Lesenswert?

Hallo

mit folgenden Werte habe ich ein besseres Bild bekommen
und die Info sagt 640x480@60Hz:
----[ global.h ]--------------------------------------------
#define H_FRONT   8  //2    // front porch
#define H_SYNC    10  //12   // sync pulse -- NEGATIVE polarity
#define H_BACK    6     // back porch
#define H_ACTIVE  80   // active video
#define H_TOTAL   (H_SYNC+H_BACK+H_ACTIVE+H_FRONT)
#define H_CHARS   H_ACTIVE
// unit: LINES
#define V_FRONT   5  //11   // front porch
#define V_SYNC    2     // sync pulse -- POSITIVE polarity
#define V_BACK    31    // back porch
#define V_ACTIVE  480   // active video
#define V_TOTAL   (V_SYNC+V_BACK+V_ACTIVE+V_FRONT)
#define V_CHARS   24
-----------------------------------------------------------
Dazu habe ich festgestellt,
wenn man wie ich beide Atmel mit 25Mhz betreibt,
ein besseres Bild bekommt wenn man nur ein Quarz benutzt
(Jumper JP10 auf 1-2).

Gruss Egmont

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Egmont schrieb:
> Dazu habe ich festgestellt,
> wenn man wie ich beide Atmel mit 25Mhz betreibt,
> ein besseres Bild bekommt wenn man nur ein Quarz benutzt
> (Jumper JP10 auf 1-2).

Dieser Effekt ist dem Entwicklungsboard geschuldet. Die AVR's sind nicht 
besonders "EMV freundlich" In einem Industrieprodukt würde meine 
Stromversorgungsvariante der beiden AVR's durchfallen. Ich hatte bewußt 
auf die Drosseln verzichtet. So schlägt der Takt recht stark auf die 
Stromversorgung durch. Bei nur einer Taktversorgung wenigstens nur mit 
der einen Frequenz. Asche auf mein Haupt! Das nächste Board bekommt ein 
EMV gerechteres Design.

von Frank Z. (fzoll)


Lesenswert?

Halloe.

Ich habe mal wieder ein kleines Update der Software für den 
VGA/Keyboard- Teil des aktuellen Boards auf den SVN- Server hochgeladen. 
Mit dem aktuellen Update sind nun die ersten VT100/VT52 Funktionen 
implementiert. Die Tasten RETURN und BACKSPACE tun nun was sie sollten. 
Damit läßt sich nun auch endliche eine Partie "ZORK1" auf dem Board 
spielen. Der Cursor wird nun auch endlich korrekt angezeigt. Die 
Tastaturroutinen laufen nun, ohne das ganze Bilder ausgelassen werden 
müssen. Durch auslassen der Darstellung der letzten 96 Bildzeilen 
konnten die Tastaurabfragen ans laufen gebracht werden. Das ganze ist 
etwas "schwammig" und sicher nicht für Actionspiele geeignet, aber 
immerhin tut's jetzt einigermaßen.

Grüße
Frank

von hschuetz (Gast)


Lesenswert?

Hallo Frank,
das mit dem svn Server ist sehr umständlich besser wäre den jeweiligen 
stand zu posten...
leider konnte ich die Quellen auch nicht ohne Fehler übersetzen.??

Build started 2.11.2010 at 17:52:56
avr-gcc  -mmcu=atmega328p -Wall -gdwarf-2 -std=gnu99 
-DF_CPU=25000000UL -Os -funsigned-char -funsigned-bitfields 
-fpack-struct -fshort-enums -MD -MP -MT dmm_vga.o -MF dep/dmm_vga.o.d 
-c  ../dmm_vga.c
../dmm_vga.c: In function '__vector_7':
../dmm_vga.c:45: error: 'PB3' undeclared (first use in this function)
../dmm_vga.c:45: error: (Each undeclared identifier is reported only 
once
../dmm_vga.c:45: error: for each function it appears in.)
../dmm_vga.c: In function '__vector_12':
../dmm_vga.c:150: error: 'PB2' undeclared (first use in this function)
../dmm_vga.c: In function 'main':
../dmm_vga.c:215: error: 'PD5' undeclared (first use in this function)
../dmm_vga.c:215: error: 'PD6' undeclared (first use in this function)
../dmm_vga.c:215: error: 'PD7' undeclared (first use in this function)
../dmm_vga.c:222: error: 'PB0' undeclared (first use in this function)
../dmm_vga.c:222: error: 'PB2' undeclared (first use in this function)
../dmm_vga.c:225: error: 'PB1' undeclared (first use in this function)
../dmm_vga.c:226: error: 'PB3' undeclared (first use in this function)
make: *** [dmm_vga.o] Error 1
Build failed with 11 errors and 0 warnings...

Gruß
Hans-Werner

von Frank Z. (fzoll)


Lesenswert?

Hallo Hans Werner.

Sorry, im moment komme ich hier zu fast gar nichts mehr. Daher hier erst 
verspähtet meine Antwort.

Ich nutzte unter WindowsXP den SVN- Client Tortoise. Mit dem kann man 
eigentlich Problemlos auf den SVN- Server zugreifen und Updates ziehen 
geht dort ganz einfach über einen "rechtsclick" auf das Verzeichniss und 
die Auswahl des Punktes "SVN Update".

Ich kann die Zwischenstände auch hier im Thread Posten, habe es aber 
bisher vermieden, um den Server nicht unnötig mit Alpha & Betha- 
Versionen vollzumüllen. Mein Vorschlag wäre, erstmal noch bei dem SVN- 
Server zu bleiben und erst die fertige Version des VGA- Terminals hier 
für alle nochmal zu posten. Ich habe auch keine Probleme euch gezipte 
Dateien auf Anfrage per E-Mail zukommen zu lassen. Was meint ihr ?

Was aber das Problem mit dem Compilieren angeht, so habe ich es gerad 
nochmal ausprobiert. Die aktuelle SVN- Version läßt sich ohne Fehler 
übersetzen. Ich denke das Problem das Du da hast, ist evtl. das gleiche 
das ich auch beim ersten Compilieren der "Urversion" hatte. Ich hatte 
eine etwas ältere Version von AVR-GCC installiert. Diese Version kannte 
aber den 328er AVR noch nicht und hatte daher nicht die passenden 
Includes mit den Daten der Anschlußpins. Nach einem Update auf die 
Version "WinAVR-20100110" hat es dann bei mir aber Funktioniert. Schau 
am besten einmal nach, welche Version dort Installiert ist.

Zum "aktuellen" Stand kann ich sagen, das ich als nächtes vor habe die 
VT100 Emulation weiter aus zu bauen. Im moment habe ich hier lokal 
bereits eine Version mit fertiger aber noch ungetesteter VT52 Emulation. 
Meine Planung sieht vor, die Emulation zwischen VT52 und VT100/102 per 
F12- Taste umschaltbar zu machen. Im moment komme ich nur nich zum 
Programmieren.

Die VT52 Emulation ließ sich viel leichter Umsetzen als die VT100/102 
Emulation, weil die Steuersequenzen deutlich kürzer und viel einfacher 
aufgebaut sind. Bei VT52 kann immer nur ein Commando mit fester 
Parameteranzahl nach dem ESCAPE kommen. Bei VT100/102 kann man praktisch 
beliebieg viele "Variablen" nach dem ESCPAPE senden und dann ganz am 
Ende sagen, welcher Befehl mit diesen Parametern auszuführen ist. 
Außerdem werden die Variablen bei VT52 praktisch "binär" als einzelnes 
ASCII- Zeichen gesendet, von dem man dann nur noch eine Constante 
abziehen muss um auf den richtigen Wert zu kommen. Bei VT100/102 kommen 
die Variablen als String und müssen erst noch interpretiert werden. Das 
ganze wird mich wohl noch eine ganze Zeit lang beschäftigen, bis es 
einigermaßen zufreidenstellend läuft.

Freundliche Grüße
Frank

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo Frank,
das wars ... neuer GCC und schon läufts...
gruß
Hans-Werner

von Frank Z. (fzoll)


Lesenswert?

In den letzten Tagen habe ich die Terminal- Emulation stark erweitert. 
Die aktuelle Version findet sich wie immer auf dem oben verlinkten SVN- 
Server. ( http://cloudbase.homelinux.net/svn/avr-cpm )

Unter anderem neu sind:
- Eine ADM-3A Emulation steht nun auch zur Auswahl.
- Umschaltung der Emualtionen VT52/VT100/ADM3-A per F11
- Umschaltung der Schriftfarbe per F12
- Fast alle ESCAPE- Codes des ADM-3A Terminals wurden implementiert. ( 
Ausnahmen: Auflösungswechsel, Testmodus und Baudratenänderung )
- Unterstüzt die Font- Umschaltung auf einen 2. Font.
  ( Derzeit wird hier nur zwischen 2 sehr ähnlichen Fonts umgeschaltet)

Was fehlt noch ?
- Jemand der Lust hat alle ESCAPE- Sequencen des ADM-3A Terminals 
auszuprobieren und ggf. Fehler zu melden. Schön wäre ein MBASIC- 
Programm, mit dem man alle Codes ausprobieren kann, damit der Fehler 
leichter nachzustellen ist.
- Den beiden Fonts fehlen noch die Grafikzeichen, derzeit werden 
Graphiczeichen als Leerräume dargestellt. Mag hier wer die fehlenden 
Zeichen hinzu fügen ?
- Die VT52 und die VT100 ESCAPE- Sequencen werden noch nicht vollständig 
beherscht.

Freundliche Grüße
Frank

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo Peter,
ich hab deine Version mal getestet... leider scheinen die Zeitprobleme 
sich auszuweiten... bei der Bildschirmausgabe (dir) fehlen teilweise 
Zeichen und bei der Tastatureingabe hakt es nach wie vor... Die 
Terminalemulation hab ich nicht getestet...
Gruß
Hans- Werner

von fzoll (Gast)


Lesenswert?

Halloe.

Ich glaube ich konnte das Problem der verlorenen Zeichen vom CP/M Kern 
an das Terminal weiter einkreisen. Mir ist das ganze bisher im Test noch 
nicht aufgefallen. Das könnte evtl. daran liegen, das ich den CP/M Teil 
nur mit 20Mhz laufen lasse. Solltest Du den CP/M Kern übertacktet haben, 
so wäre der ja etwas schneller als meine Version, so das das unten 
Beschriebene Problem dann mit einer größeren Warscheinlichkeit auftreten 
könnte. Ich versuchs auf jeden Fall mal nachzustellen.

Hier meine Vermutung:
Es könnte daran liegen, das während der V-SYNC Phase keine Zeichen von 
der Seriellen Schnittstelle zum CP/M System abgeholt werden. Die V-SYNC- 
Phase ist jedoch ein klein wenig länger, als die Dauer der Übertragung 
eines einzelnen Zeichens. Das könnte dazu führen, das einzelne Zeichen 
verloren gehen, wenn sie genau in der VSYNC- Phase gesendet wurden. Ich 
hoffe ich habe mich da nicht verechnet :-).

Ich werde heut Abend mal versuchen ob es evtl. besser wird, wenn auch 
während des VSYNC's auf eingehende Zeichen reagiert wird.

Was die nicht erkannten Tastendrücke angeht, so kann man da wohl nicht 
mehr viel ausrichten. Da ich nur während des VSYNC's mit der Tastatur 
interagieren kann, konnt es stark auf den Typ der Tastatur und die 
Tippgeschwindigkeit an. Während der Ausgabe der sichtbaren Bildteile 
muss ich die Tastatur ständig dazu zwingen ihre Kommunikation 
einzustellen und ggf. sogar abzubrechen. Ich denke mal das das ganze 
einige der Tastaturen am Markt nicht all zu gern mitmachen. Meine eigene 
Tastatur gehört auch dazu. Sobald ich mal ein wenig schneller Tippe 
gehen auch mir Tastendrücke verloren.

Eine mögliche Lösung hierfür sieht ein kleines ATINY- Puffer IC in der 
Tastaturleitung vor, das die Zeichen zwischenspeichert und dann von der 
VGA- Seite her per Pollingverfahren ausgelesen wird. Derzeit habe ich 
nur leider keinen ATINY hier rum liegen, so das ich das im moment nicht 
Ausprobieren könnte. Und das bestellen eines einzelnen ATINY's lohnt 
sich nicht. Sobald ich da etwas fertiges habe, werde ich das als option 
mit in den VGA- Kern übernehmen. Dann kann jeder nacher beim Compilieren 
per DEFINE's entscheiden, ob er mit oder ohne zusätzliches PufferIC 
arbeiten möchte.

Was mir noch aufgefallen ist, ist das auch das ADM-3A Terminal spezielle 
Steuerzeichen für Befehle wie Unterstrichen, Unsichbar und Blinkend 
kennt. Diese kann ich leider mangels Resourcen auf dem AVR-VGA Kern 
nicht unterstützen, sie werden daher derzeit auch nocht nicht einmal 
erkannt. Hier baue ich noch eine Erkennungsroutine ein, die die 
Sequencen erkennt und dann aber einfach ignoriert. Damit sollten die 
Steuerzeichen nicht mehr mit auf dem Bildschirm ausgegeben werden.

Vielen Dank fürs Testen,
Frank

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo Frank,
mein CPM Kern läuft mit 20MHz Quarz... also ist mein System mit deinem 
vergleichbar. Wie wäre es denn wenn man die Übertragungrate reduziert?
Wenn du einen Tiny als Buffer nimmst... warum nicht auch für die 
Serielle?
Gruß
Hans- Werner

von hschuetz (Gast)


Lesenswert?

Hallo Leute,
was ist denn jetzt los???
keine Aktivität mehr hier???
Gruß
Hans- Werner

von Peter Sieg (Gast)


Lesenswert?

Hi. Ich bin immer noch bei der 4-bit Version und der alten Version mit 
tniasm...

Was ist eigendlich aus der Z80 Emulation geworden..?

Peter

von Peter Sieg (Gast)


Angehängte Dateien:

Lesenswert?

Hier Bilder meines LR Aufbaus mit bei ebay erhältlichen USB<->Seriell 
Wandlern, die auch gleich +3,3V zur Verfügung stellen..

Peter

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo Peter,
anscheinend ist ganz plötzlich alle weg... deine Schaltung sieht wild 
aus, aber funktioniert...oder. Was macht denn die Software?
Gruß
Hans-Werner

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ja, irgendwie schade. Die Z80 Emulation hätte die Softwaremöglichkeiten 
noch gewaltig vergrößert.

Gruß Joe

von Peter Sieg (Gast)


Lesenswert?

Hi Hans-Werner und Joe.

Das war der aller erste LR Aufbau, der zum aller ersten Post in diesem 
Thread führte. Damals noch mit 3.3V Netzteil und Handykabel zur 
seriellen Verbindung.. ;-) Als ich den Adapter sah, mußte ich den 
einfach bestellen (3-4€) und wußte, das der hier wie die Faust aufs Auge 
passt..

Ist immer noch ein 4-bit Aufbau.. ich mag diese SMD Drams nicht :-(

Die 8080 Emulation und CP/M laufen sehr gut!

Wie Joe aber schon sagte habe ich von der Erweiterung auf Z80 Emulation
nichts mehr gehört und das serielle Terminal ist wohl auch nur 
rudimentär
fertig gestellt..

Die letzten Entwicklungen gingen mir zu schnell um noch mitzukommen und
Richtung NUR Linux wollte ich auch nicht.. daher nutze ich immer noch 
das
'alte' Diskformat und den tniasm..

Evtl. baue ich die 8-bit Dramversion mal in DIL auf LR auf.. aber mit 
Platine wäre das schon einfacher..

Wie genau der letzte Stand ist und wo der nun liegt..??

---

Wenn man das mal wieder beleben wollte, würde ich (just my 2 cents!)
eine neue Platine machen wollen: 8-bit aber DIL - kein SMD!
Ohne Terminal, dafür aber obigen Adapter vorsehen, der gleich die 3,3V
Versorgung und die PC Kommunikation über USB erledigt. Also quasi
1x ATmega328, 2xDIL Dram, Quarz+2xC, USB Adapter. Thats it.
-
Die darauf laufende Software auf den aktuellen Stand bringen und 
dokumentieren. Hier insbesondere das/die neuen Diskformate 
berücksichtigen.
-
Die Z80 Emulation voran bringen!

Peter

von Peter Sieg (Gast)


Lesenswert?

Zu dem USB-Adapter:

http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&item=200393339984

USB To TTL / COM Converter Module buildin-in CP2102

Aktuell: 3,51€ inkl. Versand

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Wenn man das mal wieder beleben wollte, würde ich (just my 2 cents!)
> eine neue Platine machen wollen: 8-bit aber DIL - kein SMD!

Das sollte sich machen lassen... wenn es wieder auf Interesse stößt.

> Die darauf laufende Software auf den aktuellen Stand bringen und
> dokumentieren. Hier insbesondere das/die neuen Diskformate
> berücksichtigen.

Hier sehen ich den größten Aufholbedarf. Das Projekt wird erst von 
Interessenten nachgenutzt, wenn die Doku auch eine Nachnutzung erlaubt.

> Die Z80 Emulation voran bringen!

JA

von Peter Sieg (Gast)


Lesenswert?

Ich habe mal im Forum64, Forum des Vereins zum Erhalt klassischer 
Computer und Robotron Forum Werbung gemacht:

---
Hi. Mehr Info's hier:

Beitrag "CP/M auf ATmega88"
http://avr.cwsurf.de/?AVR_CP%2FM

Das Projekt ist etwas 'eingeschlafen', aber wir möchten es gerne etwas 
wiederbeleben.
Es soll - bei genügend Interesse - eine neue Platine geben nur in DIL! 
(kein SMD). Das wird dann ein ATmega328 und 2 x 4-bit Dram werden.
Dazu noch ein SD Slot und den USB-TTL Wandler und fertig.

Was zur Zeit alles läuft: 8080 Emulation inkl. Mircosoft Basic, BDS 
C-Compiler, Spiele etc. inkl. vollem CP/M System mit bis zu 4 
Diskettenimages..
Was noch fehlt: Z80 Emulation

Falls ihr an einer Platine interesse habt und bei der Doku oder 
Programmentwicklung weiterarbeiten möchtet, postet es bitte im obigen 
Thread und hier.

Das Ding macht wirklich Spaß!

Peter
---
Mal sehen, ob wir mind. 10 Interessenten zusammenbekommen.
Bei eine einfachen DIL Variante mit AVR, 2xDram für 8-bit
und dem oben genannten USB-TTL Wandler bin ich schon mit 2-3 Platinen
dabei.

Peter

von Andreas H. (andreas_h35)


Lesenswert?

Hallo,

ich wäre an zwei Boards interessiert - neben der CP/M-3 und qz80 
Implementierung auf dem Propeller, wäre das meine zweite Software 
CP/M-Maschine :-)

Grüsse,
Andreas
wunixbln-NO-SPAM-@googlemail.com (-NO-SPAM- löschen)

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Andreas H. schrieb:
> ich wäre an zwei Boards interessiert

Andreas, du bist aufgenommen.


@Peter
an welche D-RAM's hast du gedacht? Wieviele bekommen wir zusammen?

Joe

von Peter Sieg (Gast)


Lesenswert?

@Joe: 256k x 4bit

Part number  V53C104P-70
Description  HIGH Performance, LOW Power 256K X 4 BIT FAST PAGE MODE 
CMOS Dynamic RAM; DIL-20

Davon habe ich ca. 34 Stück hier liegen.
Dann habe ich noch GM71C4256, HM514256, TC514256 hier ca. 20 Stück.
Auch DIL-20 und sollten alle dasselbe Pinout haben..

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> @Joe: 256k x 4bit

OK, ich mache mich mal ans Layout. Peter, ich nehme an, du hast schon 
getestet ob die RAM's auch mit 3.3V gehen. Laut Datenblatt haben sie 
wieder nur 5V aber 64K ging ja auch mit 3.3V

Joe

von ambrosius (Gast)


Lesenswert?

An einem Board hätte ich auch Interesse, schon um die Idee einmal in der 
Praxis zu testen

Holger

von Peter Sieg (Gast)


Angehängte Dateien:

Lesenswert?

MarioS aus dem Forum64 möchte auch 3 Platinen nehmen.

Leider gehen die V53C104P nicht! Entweder doch anderes Pinout oder 3,3V 
reichen nicht. Die anderen habe ich getestet und gehen.. daher habe ich 
nur
ca. 16 Ram Chips.. das sollte aber auch welche sein, die im Amiga 500, 
C64-II etc. verwendet wurden..

EDIT: Pinout ist gleich.. also vertragen die die 3V nicht.. :-(

Peter

von Peter Sieg (Gast)


Lesenswert?

for(;;) aus dem Forum64 möchte auch eine Platine.
Er wird sich sicher hier auch noch (wie hoffentlich MarioS aus dem F64) 
noch
mit seiner E-Mail Adresse melden.

@Joe: Damit sollten wir mind. schon 10 Stück zusammen haben, oder?
Macht du bitte wieder die Platinen und die Sammelbestellungen?

Gruß, Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Macht du bitte wieder die Platinen und die Sammelbestellungen?

Mache ich. Bis jetzt habe ich nur dich und Andreas H. auf meiner Liste. 
Holger (ambrosius) mir bitte mal die Mail zukommen lassen.
Joe

von Nils E. (yetanotheruser)


Lesenswert?

Ich hätte auch gerne eine Platine!

Wäre toll, wenn ein MAX232 mit drauf wäre, dann könnte ich es direkt an 
mein Lear Siegler ADM-3A Terminal anschliessen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Nils Eilers schrieb:
> Wäre toll, wenn ein MAX232 mit drauf wäre

Peter häte gerne einen Anschluß für diese Platine:
http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&item=200393339984

Du hättest gerne einen MAX232

Ich würde lieber einen FT232 mit Stecker nehmen um sozusagen ein 
CP/M-USB Stecker zu bekommen.

Vorschlag:
Die Platine bekommt an der einen Stirnseite eine Buchsenleiste für 
Peters Modul. Steckbar ist dann das besagte Modul, ein MAX232 Modul oder 
ein FT232 Modul, oder, oder. Was meint ihr dazu?

Gruß, Joe

von Peter Sieg (Gast)


Lesenswert?

@Joe: Gute Idee mit der Kontaktleiste. Max232 halte ich für veraltet.
FT232 als zu bestückende Alternative ok. MicroVGA AnschlußLeiste wäre 
auch
ok aber kein Muß..

Immer daran denken,so einfach wie möglich - nur nicht einfacher.. ;-)

Und der Adapter ist für den Preis nicht zu schlagen..

Peter

von Frank P. (mauz)


Lesenswert?

Hi Leute,
eins vornweg ich finde das Projekt herrlich bekloppt und werde erstmal 
ein Lochrasteraufbau fädeln. Da kommt der Tipp mit dem Modul von Peter 
wie gerufen, der FT ist ja nicht so gut Lochraster geeignet (ist ja 
nicht jeder Elm Chan :-) Da tut sich aber gleich eine Frage auf: Die 
erhältlichen Module scheinen alle mit CP2102 bestückt zu sein. Weiß 
jemand, wie gut die mit Linux laufen? Für eine professionell gefertigte 
Platine könnte ich mir noch eine "alles in SMD, so eng wie es 
handzubestücken geht, wenn irgendmöglich in USB-Flashstick-Format 
gequetscht"-Version vorstellen ;-)
frank

von Nils E. (yetanotheruser)


Lesenswert?

Ich finde die Idee mit der Stiftleiste auch gut, würde aber auf der 
Platine dann noch den FT232 mit drauf nehmen - der braucht nicht viel 
Platz und wenn jemand was anderes will, kann er das über die Stiftleiste 
anschliessen ohne Leiterbahnen zu durchtrennen etc.

von getestet (Gast)


Lesenswert?

Frank P. schrieb:
> Da tut sich aber gleich eine Frage auf: Die
> erhältlichen Module scheinen alle mit CP2102 bestückt zu sein. Weiß
> jemand, wie gut die mit Linux laufen?

Ist kein Problem, Treiber ist seit langem im Kernel.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Es geht ja nicht darum prinzipiell eine Platine für das Projekt auf die 
Beine zu stellen, das haben wir ja schon in zwei Varianten getan, siehe 
hier:

http://www.mikrocontroller.net/articles/AVR_CP/M

Die Idee ist vielmehr mit einem ganz, ganz einfachen Aufbau Mitstreiter 
zu finden, die auch an der Software noch etwas tun. Stichwort Z80. 
Einfach soll auch heißen DIL auf Fassung um auch mal ein IC zu tauschen 
oder zu testen.

Joe

von Peter Sieg (Gast)


Lesenswert?

Genau. Im Prinzip sehe ich die 4-bit Platine aus dem Artikel 
erweitert/umgebaut auf 8-bit (andere Portbelegungen) und der 
Pinheaderbereich
links über dem SD Slot dann kompatibel zu dem CP2102 USB-TTL Adapter 
ausgeprägt als die hier jetzt angestrebte neue Platine. FT232+USB Buchse
ist ja parallel noch drauf..

Der Vorteil der 8-bit Version ist halt die fast verdoppelte 
Geschwindigkeit
der Emulation.. womit insbesondere Arcade-like Spiele (Ladder/Pacman) 
besser
spielbar werden..

Und ja, schön wäre die Erweiterung auf Z80 Emulation, die dann die Tür 
öffnen
würde für z.B Turbo Pascal, Sargon Schach, etc..

BTW: In dem Artikel ist die letzte 8-bit Version mit SMD Rams und 
VGA-Terminal Teil übrigens nicht dokumentiert..?

Peter

von Frank P. (mauz)


Lesenswert?

getestet schrieb:
> Ist kein Problem, Treiber ist seit langem im Kernel.
Danke fürs testen ;-)

Joe G. schrieb:
> Es geht ja nicht darum prinzipiell eine Platine für das Projekt auf die
> Beine zu stellen, das haben wir ja schon in zwei Varianten getan, …
Ich denke die Ansprache gilt meiner "so-klein-wie-möglich-Idee". Ich 
weiß, was Ihr schon alles auf die Beine gestellt habt. Dafür genießt Ihr 
meinen vollen Respekt. War ja auch nur so eine Idee, falls mal jemandem 
langweilig wird ;-)

> Die Idee ist vielmehr mit einem ganz, ganz einfachen Aufbau Mitstreiter
> zu finden, die auch an der Software noch etwas tun. Stichwort Z80.
> Einfach soll auch heißen DIL auf Fassung um auch mal ein IC zu tauschen
> oder zu testen.
Kann ich nachvollziehen, und ich will Euch da auch nicht reinreden, Gott 
bewahre. Zumal ich Euch bei der Software wahrscheinlich nicht viel 
helfen kann. Ich finde für mich eine professionell gefertigte 
Platine für alles in DIL etwas übertrieben. Nichtsdestotrotz, wenn es 
neue Mitstreiter bringt und Ihr noch eine Mindeststückzahl braucht, 
würde ich auch eine LP nehmen. Es sollte dann aber schon eine 8-Bit 
Version sein. An Z80 wäre ich natürlich auch sehr interessiert.
frank

von Peter Sieg (Gast)


Lesenswert?

@alle: was ist denn eigendlich `der letzte Stand` der Software?
Im SVN:
http://cloudbase.homelinux.net/svn/avr-cpm/

steht Revision 161.
Unter avrcpm - branches gibt es 2\ und fat16-test\

fat16-test war das lesen von Diskimages von fat16 formattierten SD 
Karten..
..wie ist da der Status.. wer hats getestet..?

Und 2\ = Version 2? Was war doch gleich noch mal der Unterschied zu der 
ersten Version..?

Und dann gibts noch trunk\ ..?

Nun ich habe hier die Version 1, die für 4-bit und 8-bit assembliert 
werden
kann.. und bis zu 4 CP/M Partitionen unterstützt.. damit werde ich 
ersteinmal
die neuen 8-bit Platinen versorgen, solange mich niemand eines anderen 
überzeugt.. ;-)

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> @alle: was ist denn eigendlich `der letzte Stand` der Software?

Die 2.0 Version lief auf meiner 8-Bit Hardware. Problem dort war, die SD 
Karten konnten nur noch unter Linux mit den CP/M Partitionen erzeugt 
werden.
Für Win.. User nicht so schön.

Die fat16 Version konnte ich zwar übersetzten jedoch nicht von der SD 
Karte booten. Es war für mich nicht so richtig transparent, wie und in 
welchem Format das CP/M System auf die Karte kam. Für weitere 
Entwicklungen fürde ich diesen Zweig lieber weiterverfolgen.

Joe

von Peter Sieg (Gast)


Lesenswert?

Hi.
1
.if FAT16_DEBUG > 0
2
3
...
4
5
; Here Starts the Scann of the Directory for valid image Files.
6
7
;  Init Image-Namecounter
8
  ldi  temp,FAT16_FIRST_IMAGENAME
9
10
...
11
12
fat_look_for_loop:  
13
  ldd   temp,z+0
14
  cpi  temp,'C'
15
  brne  fat_look_not_ok
16
  
17
  ldd  temp,z+1
18
  cpi  temp,'P'
19
  brne  fat_look_not_ok
20
21
  ldd  temp,z+2
22
  cpi  temp,'M'
23
  brne  fat_look_not_ok
24
25
  ldd  temp,z+3
26
  cpi  temp,'D'
27
  brne  fat_look_not_ok
28
29
  ldd  temp,z+4
30
  cpi  temp,'S'
31
  brne  fat_look_not_ok
32
33
  ldd  temp,z+5
34
  cpi  temp,'K'
35
  brne  fat_look_not_ok
36
37
  ldd  temp,z+6
38
  cpi  temp,'_'
39
  brne  fat_look_not_ok
40
41
  lds  temp3,fat_last_dsk  ; Get actual Diskname (A to Z)
42
  ldd  temp,z+7
43
  cp  temp,temp3
44
  brne  fat_look_not_ok
45
46
  ldd  temp,z+8
47
  cpi  temp,'I'
48
  brne  fat_look_not_ok
49
50
  ldd  temp,z+9
51
  cpi  temp,'M'
52
  brne  fat_look_not_ok
53
54
  ldd  temp,z+10
55
  cpi  temp,'G'
56
  brne  fat_look_not_ok

Bitte mal probieren: -> CPMDSK_A.IMG ... CPMDSK_Z.IMG

Peter

von Peter Sieg (Gast)


Angehängte Dateien:

Lesenswert?

Habe mir die fat16-test Version mal gezogen und für 4-bit; m168; 30MHz; 
fat16 Nutzung assembliert. Dann disk images als CPMDSK_A.IMG .. 
CPMDSK_D.IMG auf eine FAT16 formatierte SD Karte kopiert und es läuft!

8-bit kann ich mangels Hardware nicht testen. ATmega88 scheint Fehler 
beim
assemblieren zu geben (Funktionen werden genutzt, die erst ab 168 da 
sind).

Als disk images habe ich die originalen verwendet (urspüngliches Format 
von ca. 243kb).

Sieht doch schon mal gut aus! Das komplette fat16 Verzeichnis inkl. AVR 
Studio 4 Projektdatei und erzeugtem Hex hänge ich hier mal an.

Peter

von Andreas H. (andreas_h35)


Lesenswert?

In froher Erwartung auf die neue AVR-cpm Leiterplatte habe ich mir das 
CPM-Image auch schon eingehender angeschaut, konnte aber nirgends die 
Quellen für das CPM.SYS finden. Wer hat das CPM.SYS generiert und kann 
dazu auch die Quellen abgeben ?!

Danke und Grüsse,
Andreas

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Sieht doch schon mal gut aus!

Bestens Peter, werde ich heute oder morgen mal auf 8-Bit testen. Im 
nächsten Schritt sollten wir die Doku "Nachbausicher" machen. Auch im 
Hinblick auf solche Fragen wie von Andreas.

@Andreas
Das cpm.sys ist die Originaldatei, zu finden hier:
http://www.mikrocontroller.net/articles/AVR_CP/M
Den Quelltext dazu kenne ich auch nicht. Um das Bios zu übersetzen und 
die cpm.bin Datei zu erzeugen hatten wir auch für Win Makefiles 
erstelllt. Ich suche mal alles zusammen und bemühe mich eine kleine 
Kurzanleitung dazu zu verfassen.

Joe

von Peter Sieg (Gast)


Angehängte Dateien:

Lesenswert?

Im Anhang mein bios Verzeichnis.
(Den Quelltext von cpm.sys habe ich aber auch nicht)
Darin ist bios.asm+ipl.asm
tniasm.exe zum assemblieren
make_bios.bat zum übersetzen von ipl+bios
make_cpm.bat zum bilden von cpm.bin (nutzt dd.exe, was auch enthalten 
ist)

Das Resultat cpm.bin wird dann zum bilden von diskimages mit den 
cpmtools
verwendet:
mkfs.cpm.exe -f avrcpm -b cpm.bin -L test CPMDSK_A.IMG
und füllen mit:
cpmcp -f avrcpm CPMDSK_A.IMG cpmdsk/MBASIC.COM 0:MBASIC.COM

Peter

von Andreas H. (andreas_h35)


Lesenswert?

Wegen BDOS+CCP bin ich fündig geworden. Die Quellen, für Z80 angepasst, 
konnte ich bei Peter Schorn (http://www.schorn.ch/cpm/intro.php) finden.
Gruss,Andreas

von Peter Sieg (Gast)


Lesenswert?

@Andreas: Wäre super, wenn du die benötigten Teile zusammen puzzeln 
würdest, um cpm.sys zu bilden. Idealerweise auch mit einem schon 
verwendeten Z80 Assembler (tniasm; z80asm).

Peter

von Andreas H. (andreas_h35)


Angehängte Dateien:

Lesenswert?

Hallo Peter,

kannst Du mir bei Gelegenheit das SURVEY.COM (im Archiv) auf dem AVRcpm 
ausführen ?! und den Output schicken. Die wichtigen Adressen stehen zwar 
im BIOS.ASM, aber sicher ist sicher.

Danke, Andreas

von Peter Sieg (Gast)


Angehängte Dateien:

Lesenswert?

Hier die Ausgabe von survey:

Peter

von Peter Sieg (Gast)


Lesenswert?

Ich denke, wenn die fat16 Version auch für 8-bit ok ist, sollten wir 
diese
als Basis für die weitere Entwicklung nehmen.

Evtl. mal ein Diff gegen V2/trunc fahren..

Meines Wissens hatte Leo C. das Diskettenformat vergrößert und evtl. ist 
der Z80 Emulationscode in dieser Versionen schon weiter 
fortgeschritten??

@Leo C: Liest du noch mit..?

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ich bekomme derzeit die 8-Bit Variante nicht hin.
- RAM-Test OK
- MMC lesen von Fat 16 OK
- Reboot ???
muß weiter suchen...
Joe

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Nachtrag.

Die 4-Bit Variante läuft auch bei mir mit Fat16. Allerdings reagieren 
einige MMC's giftig. Die MC-Routine ist nicht wirkllich für alle Karten 
sicher.
Joe

von Leo C. (rapid)


Lesenswert?

Ja Peter, ich lese noch mit.
Inzwischen habe ich auch wieder etwas Zeit  für das Projekt, aber wohl 
nicht mehr so viel wie letzten Sommer.

Am Samstag habe ich endlich mal meinen letzten Softwarestand in das 
SVN-Repository eingecheckt. Die Software funktioniert bei mir, ist aber 
nicht besonders gut getestet. Wegen der Features (FAT16, Disk Formate) 
bitte nach meinen letzten Beiträgen hier im Forum suchen. Danach hier 
fragen.

Die aktuelle Software ist für gewöhnlich hier zu finden:
http://cloudbase.homelinux.net/viewvc/avr-cpm/avrcpm/trunk/

Oder besser, mit einem SVN-Client:
http://cloudbase.homelinux.net/svn/avr-cpm

Als Client für Windows ist tortoisesvn zu empfehlen:
http://tortoisesvn.tigris.org/

Übrigens Peter, bei SVN steht trunk für Stamm, nicht etwa für Kofferraum 
oder Rüssel. :)
In trunk ist üblicherweise die Hauptentwicklungslinie.

Wegen Z80 Unterstützung könnte ja mal jemand bei "Horst S. (h3aau)" 
nachfragen. (Beitrag "Re: CP/M auf ATmega88")

Joe, wenn Du mit den SD-Karten-Problemen nicht weiterkommst, kann ich 
versuchen, zu helfen.

von Peter Sieg (Gast)


Lesenswert?

@Joe: hast du mal probiert mit dem Debugschalter:
FAT16_DEBUG = 1
mehr Informationen zu bekommen?

Zur SD Card Initialisierung gibts ja einige Projekte zum 
vergleichen/kopieren: Z.B www.sd2iec.de und sicher auch hier im Forum..
Beitrag "MMC/SD-Karte mit FAT16 an AVR"
Beitrag "MMC SD library FAT16 FAT32 read write"

---

@Leo C: Prima! D.h. der trunk enthält jetzt die neueste Version?
Das Problem, was ich whrscheinlich damit habe ist, das es sich weit von 
Win$ entfernt hat..? D.h mein ipl+bios etc. und Diskformate muß ich 
anpassen/ändern, oder kann ich die orig. Formate+Bios beibehalten 
(vorerst)?
Ist den da neuerer Z80 code von Horst S. (h3aau) schon drin, oder noch 
nicht?

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Joe, wenn Du mit den SD-Karten-Problemen nicht weiterkommst, kann ich
> versuchen, zu helfen.

Super Angebot Leo.
Das MMC Problem bei der 4-Bit Variante kann über dden SPI Takt behoben 
werden, der der 8-Bit Variante bin ich derzeit ratlos. Der Ramtest läuft 
durch, MMC wird erkannt und gelesen, der Sprung auf Adr. 2000H erfolgt 
UND dort steht nur "Mist", meißt 00 00 00. Na und dann wars das. Ich 
habe noch nicht rausbekommen ob der Ram seinen Inhalt vergißt, oder von 
der MMC falsch gelesen wird. Ich denke aber zweiteres, da einige Karten 
mit der Meldung "kein System" antworten.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Es sieht in etwa immer so aus:

CPM on an AVR, v2.0
Initing mmc...

mmcInit
mmcCMD: 00 00000000 .. 95 CMDRes: 01
mmcCMD: 08 000001AA .. 87 CMDRes: 01
mmcCMD: 37 00000000 .. 01 CMDRes: 01 mmcCMD: 29 40000000 .. 01 CMDRes: 
01
mmcCMD: 37 00000000 .. 01 CMDRes: 01 mmcCMD: 29 40000000 .. 01 CMDRes: 
01
mmcCMD: 37 00000000 .. 01 CMDRes: 01 mmcCMD: 29 40000000 .. 01 CMDRes: 
00
mmcCMD: 3A 00000000 .. 01 CMDRes: 00
 CT: 04 InitRes: 00
mmcCMD: 11 00000000 .. 01 CMDRes: 00
mmcCMD: 11 00FF4400 .. 01 CMDRes: 00

...

mmcCMD: 11 01011200 .. 01 CMDRes: 00
mmcCMD: 11 01011400 .. 01 CMDRes: 00
A:CP/M partition at: 8097, size: 4144KB.
B:CP/M partition at: 16385, size: 7808KB.
Partinit done.
mmcCMD: 11 003F4200 .. 01 CMDRes: 00
Ok, CPU is live!

PC=2000
        A =20 BC =0000 DE =0000 HL =

IPL müßte jedoch mit 31 00 10 beginnen

Joe

von Peter Sieg (Gast)


Lesenswert?

Ich habe mir trunk gerade mal gezogen. Konnte ich für m168, 30MHz, 4-bit 
Dram und fat16 ohne Fehler übersetzen.

Frage: Kann ich das mit den 'alten' Bios+ipl Diskimages (243kb) nutzen?

Um die Assemblierung der bios.mac +ipl.mac möchte ich mich dann erst 
später kümmern...

Peter

von Peter Sieg (Gast)


Lesenswert?

Bios assemblieren:
zxcc habe ich für Dos/Win$ nicht gefunden.
m80l80.zip habe ich probiert:
*BIOS,TTY:=BIOS wirft 38 fatale Fehler aus.

Das ist so für mich natürlich keine akzepable 'Lösung'..
Ich brauche etwas, womit ich die unter Win$ assemblieren kann..
@Leo C: Kannst du die *.mac nicht wieder per awk? script in asm zurück 
wandeln?

Peter

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Im Anhang ist jetzt mal ein aktuelles System.

Zum Rest schreibe ich später nochmal mehr. Jetzt mal auf die Schnelle...

Peter Sieg schrieb:
> Bios assemblieren:
> zxcc habe ich für Dos/Win$ nicht gefunden.

Beitrag "Re: CP/M auf ATmega88"
Beitrag "Re: CP/M auf ATmega88"

Darüber, und auch sonst, sollte es kein Problem sein,
http://www.seasip.demon.co.uk/Unix/Zxcc/
zu finden.

Das Archiv der 0.4 Version enthält auch Windows Binaries.
http://www.seasip.demon.co.uk/Unix/Zxcc/zxcc-0.4.0.tar.gz

> m80l80.zip habe ich probiert:
> *BIOS,TTY:=BIOS wirft 38 fatale Fehler aus.

Ich meine mich zu erinnern, daß ich das mal kurz ausprobiert hatte, in 
dem ich alle benötigten Dateien in ein Verzeichnis kopiert hatte. Um das 
alles richtig unter Windows zu installieren, fehlt mir die Zeit, 
vernünftiges Gerät und die Motivation. Hier wird es doch den ein oder 
anderen Windowsprogrammierer geben, der das mal richtig installieren und 
das Makefile ggf. anpassen kann. Mein Provisorium hat sicher 
funktioniert, sonst hätte ich diese Möglichkeit hier garnicht erwähnt.

> Das ist so für mich natürlich keine akzepable 'Lösung'..

Das ist natürlich schlimm für Dich.

> Ich brauche etwas, womit ich die unter Win$ assemblieren kann..
> @Leo C: Kannst du die *.mac nicht wieder per awk? script in asm zurück
> wandeln?

nein.

von Peter Sieg (Gast)


Lesenswert?

Ja nun habe ich auch gelesen, das in der 4.0 Version Dos/Win Programme 
enthalten sind. In der 5er aber nicht. Habe ich getestet (alles in 1 
Verzeichnis), bekommen auch hier mit: zxcc m80 -=bios.mac 38 fatale 
Fehler??
---
Hier:
http://hc-ddr.hucki.net/wiki/doku.php/cpm:windows
habe ich auch den cpm player getestet.
Dort bekomme ich mit cpm m80.com =bios.mac 41 fatale Fehler?
bios.rel wird aber erzeugt.
G:\temp>cpm  l80.com bios.rel,bios.bin/N/E

Link-80  3.44  09-Dec-81  Copyright (c) 1981 Microsoft

Data    0100    0328    <  552>

53266 Bytes Free
[0000   0328        3]

G:\temp>
---
@Leo C. Ja ich weiß.. mal sehen.. aber wenn alle Stricke reißen bleibe 
ich eben bei dem Code den ich aktuell habe.. das war auch ein Grund, 
damals ersteinmal nicht mehr weiter 'mitzumachen' - ist halt (für mich!) 
blöd, wenn das nach Linux Only abwandert und ich/Windows außen vor 
bleiben.

Nun, evtl. findet ja jemand noch woran es liegt bzw. eine 
funktionierende Lösung..

Kann ich denn den AVR Code aus trunk mit dem 'alten' Bios verwendet,
oder ist zwingend auch das aktuelle Bios tz verwenden?

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Kann ich denn den AVR Code aus trunk mit dem 'alten' Bios verwendet,
> oder ist zwingend auch das aktuelle Bios tz verwenden?

Nein geht nicht.
Joe

von Peter Sieg (Gast)


Lesenswert?

Jup. Geht nicht.. habe ich gerade probiert..
Leider noch eine schlechte Nachricht. FAT16 scheint noch Probleme 
zumindest beim schreiben zu haben.. BDSC (C-Compiler) meldet bei der 
trunk Version:
BDos Err on C..
Und die fat16-test meldet bei clink mmind - No main defined - aborted.
Wenn ich mit Partitionen arbeite geht fat16-test einwandfrei.. trunk 
muss
ich noch testen..

:-(

Peter

von Peter Sieg (Gast)


Lesenswert?

arg. Muss mich mal anmelden, damit ich editieren kann..
---
fat16-test und trunk lassen sich nicht mehr für atmega88 übersetzen
- auch ohne fat16support!
Das kann der atmega88 nicht ab:
  call  uartputc

Peter

von Andreas H. (andreas_h35)


Angehängte Dateien:

Lesenswert?

Hallo Peter und Leo,

ich habe hier mal das ALIADOS im Cygwin übersetzt. Es ist eine 
einigermassen lauffähige CPM-Emulation - eigentlich für Linux - die aber 
auch unter Windows spielt (hier bei mir unter Win7)

Nach dem Start landet man auf Drive A: und das aktuelle Verzeichnis ist 
dann auch im CPM auf A: zu sehen. Wenn dort M80 und L80 liegen, kann man 
sogar mit:

aliados M80.COM =blafasel.asm ..

aus der DOS-Shell assemblieren.

Hier habe ich das gefunden: http://www.arrakis.es/~ninsesabe/aliados/

Im Ziparchiv liegt das aliados.exe und die notwendigen Cygwin-DLLs. 
Bitte die DDLs im gleichen Verzeichnis wie das .exe legen.

Wer es braucht, kann es ja mal checken, evtl. hilft das den 
Win$-Freunden bei der BIOS Assemblierung.
Gruss,
Andreas

von Peter Sieg (Gast)


Lesenswert?

@andreas: Danke. Arbeitet aber genauso wie oben cpmplayer etc. m80 
meldet wieder 38 fatal errors..

Ich denke die haben ein Problem mit der Quelldatei..?

Peter

von Peter Sieg (Gast)


Lesenswert?

Ich habe gerade mal bios.mac in die AltairSIMH cpm2.2 disk geladen und 
dort m80 =bios.mac aufgrufen.. auch 38 fatal errors..??

Kann es sein, das ich nicht das richtige m80.com + l80.com habe..??

Bitte mal die richtigen Versionen hier anhängen.. dann solltes das ggf. 
mit
einige hier weiter oben aufgeführten Tools gehen.. denn die Meldung 38 
fatal errors hatte ich schon mehrere Male mit unterschiedlichen Tools..

Peter

von Andreas H. (andreas_h35)


Angehängte Dateien:

Lesenswert?

@Peter: ich kommte mit M80 und L80 das bios.mac aus dem SVN/trunk prima 
assemblieren und linken (habe das aliados unter macosx verwendet):

lunatix:cpm hein$ aliados m80.com =bios.mac

No Fatal error(s)

lunatix:cpm hein$ aliados l80.com bios,bios/n/e

Link-80  3.44  09-Dec-81  Copyright (c) 1981 Microsoft

Data    0100    0518    < 1048>

52514 Bytes Free
[0000   0518        5]

hier meine eingesetzten Tools.

Andreas

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Ich habe gerade mal bios.mac in die AltairSIMH cpm2.2 disk geladen und
> dort m80 =bios.mac aufgrufen.. auch 38 fatal errors..??

Kann es sein, daß Dein M80 die Includedateien 'avrcpm.lib' und 
'cfgacpm.lib' nicht findet?

von Peter Sieg (Gast)


Lesenswert?

Ja, so ist/war es ;-)
aliados geht!! Habe inzwischen das cpm.bin komplett neu erstellen 
können.
Nun auch neue diskimages erzeugt und unter Knoppix auf cp/m Partitionen 
mit
dd geschrieben..

=> Bin jetzt auf neuestem trunk level ;-)

Trotzdem gibt es leider unter fat16 ein Schreibproblem!

@Andreas: kannst du bitte mal versuchen auch die cpmtools unter deiner 
cygwin Umgebung zu compilieren? Dann haben wir die cygwin dll's 
gemeinsam um
brauchen nicht ggf. 2 Versionen. Dazu haben die cpmtools unter Windows 
noch
2 Unschönheiten:
1. diskdefs wird FEST unter x.\cpmtools gesucht.
2. diskdefs muss nach Unix Konvention nur mit LF als Zeilenende versehen 
sein
(kein CR+LF wie unter Dos/Win üblich)

http://www.moria.de/~michael/cpmtools/

bei zxcc und cpm (cpmplayer) scheinen die lib's/includes von m80/l80 
nicht
gefunden zu werden.. schaue ich mir noch mal an.. ob man das nicht noch 
hinbekommt..

Fazit: Man kann alles unter Windows assemblieren!

Peter

von Peter Sieg (Gast)


Angehängte Dateien:

Lesenswert?

Hmm.. m80l80pc geht nun auch.. vielleicht hatte ich wirklich nur die 
includes nicht im Verzeichnis..

Ich hänge das m80l80pc.zip inkl. aller benötigten Dateien hier an.

zxcc+cpmplayer schaue ich mir jetzt auch noch mal an..

Peter

von Andreas H. (andreas_h35)


Lesenswert?

@Peter: Du brauchst cpmtools unter cygwin ? Habe ich eben compiliert, 
aber wie möchstest Du es mit dem diskdefs File ?
Andreas

von Andreas H. (andreas_h35)


Angehängte Dateien:

Lesenswert?

@Peter:

hier das cpmtools als cygwin-binary, ohne MAN-Pages und Sourcecode.
Das diskdefs File wird im aktuellen Verzeichnis gesucht.
Andreas

von Peter Sieg (Gast)


Lesenswert?

Super! Danke!
Damit läuft cpmtools+aliados mit denselben dll's.

Peter

von Peter Sieg (Gast)


Angehängte Dateien:

Lesenswert?

Ich hänge jetzt hier mal an: avrcpm_fat16.zip = neueste trunk Quellen 
inkl. AVR Studio 4 Projekt und avrcpm_aliados.zip = alles zum bilden von 
Bios+Ipl,CPM.BIN und Disk Images mit cpmtools.

Das sind außer der Hardware alles was es unter Windows braucht..
Auf 4-bit läuft es prima mit Partitionen.
fat16 lesend ok; schreibend Problem.
8-bit habe ich (noch) nicht. Bei Leo C. sollte es aber laufen (Part.?) 
und bei Joe gibts Probleme (fat16?)..
Z80 Stand?

Peter

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Es sieht in etwa immer so aus:
>
> CPM on an AVR, v2.0
> Initing mmc...

...

> mmcCMD: 11 003F4200 .. 01 CMDRes: 00
> Ok, CPU is live!

Das sieht geigentlich alles ganz gut und plausibel aus.

> PC=2000
>         A =20 BC =0000 DE =0000 HL =
>
> IPL müßte jedoch mit 31 00 10 beginnen

Das der mmc-Treiber ohne Fehlermeldung falsche Daten liefert, will ich 
noch nicht so ganz glauben. Deshalb würde ich den Fehler erst mal an 
anderer Stelle vermuten.

Hast Du inzwischen mal mit aktueller Software (trunk) getestet?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Peter, Leo C.
die 4-Bitv Variante aus trunc funktioniert (eingeschränkt). Die 8-Bit 
Variante hat immer noch die gleichen Probleme. Ich vermute tatsächlich 
MMC Probleme weil: (nun einige Logauszüge)

4 Bit Version
Test 1, MMC_1 128MB, MMCSPI2X =1 (CLK/2)

CPM on an AVR, v2.1
Testing RAM: fill...wait...reread...
Initing mmc...

A:FAT16 File-Image at: 8598, size: 208KB.
B:FAT16 File-Image at: 8510, size: 175KB.
C:FAT16 File-Image at: 8450, size: 118KB.
Partinit done.
Ok, CPU is live!

ipl
S       A =A8 BC =280C DE =0080 HL =E180 SP =2000 PC =202F       28 A8 
02 Invalid opcode!

bootet also komplet durch, führt IPL aus und dann gibt es Fehler

Test 2, MMC_1 128MB, MMCSPI2X =0 (CLK/4)

CPM on an AVR, v2.1
Testing RAM: fill...wait...reread...
Initing mmc...

A:FAT16 File-Image at: 8598, size: 208KB.
B:FAT16 File-Image at: 8510, size: 175KB.
C:FAT16 File-Image at: 8450, size: 118KB.
Partinit done.
Ok, CPU is live!

ipl
62k cp/m vers 2.2

A>

FEHLERFREI

Test 3, MMC_2 1GB, MMCSPI2X =0 (CLK/4), identisches Immage

CPM on an AVR, v2.1
Testing RAM: fill...wait...reread...
Initing mmc...

A:CP/M partition at: 8097, size: 4144KB.
B:CP/M partition at: 16385, size: 7808KB.
Partinit done.
Ok, CPU is live!
ipl
DISK I/O: Invalid Function code: 01



8 Bit Version

Test 4, MMC_1 128MB, MMCSPI2X =0 (CLK/4), gleiche Image, ohne MMC Debug

CPM on an AVR, v2.1
Testing RAM: fill...wait...reread...
Initing mmc...

A:FAT16 File-Image at: 8598, size:

NEUSTART

CPM on an AVR, v2.1
Testing RAM: fill...wait...reread...
Initing mmc...

Test 5, MMC_1 128MB, MMCSPI2X =0 (CLK/4), gleiche Image, mit MMC Debug

CPM on an AVR, v2.0
Testing RAM: fill...wait...reread...
Initing mmc...

mmcInit
mmcCMD: 00 00000000 .. 95 CMDRes: 01
mmcCMD: 08 000001AA .. 87 CMDRes: 05
...
A:FAT16 File-Image at: 002, size: 081KB.
Partinit done.
mmcCMD: 11 00017C00 .. 01 CMDRes: 00

NEUSTART

CPM on an AVR, v2.0
Testing RAM: fill...wait...reread...
Initing mmc...

d.h. wenn das MMC Debug eingeschaltet ist, wird die Karte etwas besser 
gelesen jedoch auch nicht fehlerfrei. Übrigens sind die 4-Bit und die 
8-Bit Varianten auf unterschiedlicher Hardware aufgebaut.

Joe

von Leo C. (rapid)


Lesenswert?

@Peter,

bitte vergrößere Deine FAT16-Imagedateien mal auf (mindestens) 256 
KByte.
Unser Treiber kann das leider nicht selbst.

Vergrößern geht z.B. durch anhängen von Bytes mit dd, oder mit makeimage 
von Frank Zoll, das im SVN in trunk/tools/makeimage zu finden ist. Wenn 
man bei makeimage die Größe wegläßt, wird die Datei "zufällig" auf 256 
KB vergrößert.

Neue, frisch formatierte Images kann man auch folgendermaßen erzeugen, 
damit sie von Anfang an die richtige Größe haben:
1
$ makeimage /dev/null CPMDSK_x.IMG

mkfs.cpm kann man sich dann sparen.
Unter Windows muß man /dev/null evtl. durch etwas anderes ersetzen.

von Peter Sieg (Gast)


Lesenswert?

Hmm. Was mir aufgefallen ist. Test 4 = V2.1, ab Test5 V2.0?
Alle Test sind mit fat16 Fileimages gemacht.
Kannst du bitte auch mal 8-bit testen, ohne fat16 Images auf die SD 
Karte zu tun, sondern anstatt dessen mal Partitionen zu verwenden?

Ich verwende ürigens auch 2 128Mb SD Karten: Noname + Kingston.

@Leo C: bei dir läuft aber die trunk in 8-bit?
Es sind doch mind. 10 Platinen mit der 8-bit 4MB + VGA Teil in Betrieb..
welche Version wird denn dort eingesetzt..?

Peter

von Peter Sieg (Gast)


Lesenswert?

@Leo C: Du meinst/vermutest, das beim schreiben über die aktuelle Größe 
hinausgegangen wird und dann gibts Probleme.. weshalb diese Mindestgröße 
sein muß?

makeimage - liegt nur als c Source vor. Ich habe keinen Compiler 
installiert z.Z :-(

Und wenn sich jemand findet (@Andreas?) der das unter Windows / Cygwin 
kompiliert, dann bitte auch evtl. Unix Spezifika (/dev/null) entsprechen 
für uns Win$ User händelbar machen..

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:

> @Leo C: bei dir läuft aber die trunk in 8-bit?

Logo. 4Bit ist (glaube ich) noch auf meinem Steckbrett, und habe ich 
schon lange nicht mehr getestet.

> Es sind doch mind. 10 Platinen mit der 8-bit 4MB + VGA Teil in Betrieb..
> welche Version wird denn dort eingesetzt..?

Keine Ahnung. Ich habe hier meinen eigenen Lochrasteraufbau.
Hier gibts ein Bild:
Beitrag "Re: CP/M auf ATmega88"

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> @Leo C: Du meinst/vermutest, das beim schreiben über die aktuelle Größe
> hinausgegangen wird und dann gibts Probleme.. weshalb diese Mindestgröße
> sein muß?

Nein, ich weiß, daß der Treiber auf das Dateiende testet, und nicht 
darüber hinaus schreibt. Stattdessen meldet er einen Fehler zurück. Der 
Treiber könnte an der Stelle auch die Datei vergrößern (sofern Platz auf 
dem Datenträger), aber der Aufwand dafür ist nach Franks und meiner 
Meinung nach unverhältnismäßig groß.

> makeimage - liegt nur als c Source vor. Ich habe keinen Compiler
> installiert z.Z :-(

Das Programm ist in anspruchlosestem ANSI-C geschrieben, und kann mit 
jedem Compiler auf wahrscheinlich jeder Plattform übersetzt werden.

> Und wenn sich jemand findet (@Andreas?) der das unter Windows / Cygwin
> kompiliert, dann bitte auch evtl. Unix Spezifika (/dev/null) entsprechen
> für uns Win$ User händelbar machen..

Andreas wird das sicher machen können. Cygwin braucht man dafür nicht, 
und das Programm hat keine Unix Spezifika.

von Andreas H. (andreas_h35)


Lesenswert?

wo kommt das makeimage her ? (URL!! dann übersetzte ich das euch wieder 
für cygwin
Andreas

von Peter Sieg (Gast)


Angehängte Dateien:

Lesenswert?

@Leo C. das Schreibproblem ist gelöst! Danke!

Ich habe die _C.IMG Datei mit dd (in avrcpm_aliados.zip) so auf 256k
gebracht:
dd if=CPMDSK_C.IMG of=CPMDSK_D.IMG ibs=256k conv=sync

Dann auf SD Karte..
d:
D>cc mmind.c
BD Software C Compiler v1.60  (part I)
  35K elbowroom
BD Software C Compiler v1.60 (part II)
  32K to spare
D>clink mmind
BD Software C Linker   v1.60

Last code address: 1B4D
Externals start at 1B4E, occupy 0000 bytes, last byte at 1B4E
Top of memory: E405
Stack space: C8B8
Writing output...
  42K link space remaining
D>mmind
Random seed generation.. wait.. hit a key.
Guess my 4-digit number...(****); 0000 to abort.

Guess 1:0000

You gave up..
Press return to exit.
D>

Funktioniert also!
Ich habe das mal in meinem 'make_disk.bat' eingebaut.. bitte entzippen 
und
die alte Version damit ersetzen..

Peter

von Peter Sieg (Gast)


Lesenswert?

Leo C. schrieb:
> Nein, ich weiß, daß der Treiber auf das Dateiende testet, und nicht
> darüber hinaus schreibt. Stattdessen meldet er einen Fehler zurück. Der
> Treiber könnte an der Stelle auch die Datei vergrößern (sofern Platz auf
> dem Datenträger), aber der Aufwand dafür ist nach Franks und meiner
> Meinung nach unverhältnismäßig groß.

ok. Denke ich auch. Wenn man es weiß, ist es leichter die diskimage 
mind.
so groß zu machen, wie diskdefs es definiert. Aktuell wären das ca. 243k
gewesen.. richtig?

(Bei Gelegenheit muß ich dann mal schauen, was du da schon an 
Unterstützung von größeren Diskimagesgezauberst hast.. und wie ich das 
nutzen kann..)

Aber ersteinmal die 8-bit Version haben und am laufen haben..
Dann Z80..

Peter

von Leo C. (rapid)


Lesenswert?

Hallo Andreas,

Andreas H. schrieb:
> wo kommt das makeimage her ? (URL!! dann übersetzte ich das euch wieder
> für cygwin

Die Software liegt auf meinem kleinen SVN-Server (Kopie von oben):

Die aktuelle Software ist für gewöhnlich hier zu finden:
http://cloudbase.homelinux.net/viewvc/avr-cpm/avrcpm/trunk/

Oder besser, mit einem SVN-Client:
http://cloudbase.homelinux.net/svn/avr-cpm

Als Client für Windows ist tortoisesvn zu empfehlen:
http://tortoisesvn.tigris.org/

Wer Verbesserungen und/oder Erweiterungen beisteuern will, kann von mir 
gerne einen Schreibzugriff bekommen.

von Andreas H. (andreas_h35)


Angehängte Dateien:

Lesenswert?

hier das makeimage.exe, lauffähig mit den Cygwin.DLLs die Ihr schon 
habt. /dev/null geht wie unter Linux auch, da die Argumente ja in der 
Cygwin-Runtime ausgewertet werden.
Andreas

von Andreas H. (andreas_h35)


Lesenswert?

Hat jemand schon einen fertigen Schaltplan für die 8bit AVR-Maschine ? 
Ich würde mir das dann schonmal auf dem Breadboard zusammenstecken 
wollen und könnte noch vor dem Release der Leiterplatte mit den Tests zu 
den CCP+BDOS.ASM Quellen beginnen.
Andreas

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> so groß zu machen, wie diskdefs es definiert. Aktuell wären das ca. 243k
> gewesen.. richtig?

Fast. Die System-Tracks müssen ja auch noch reinpassen.

>
> (Bei Gelegenheit muß ich dann mal schauen, was du da schon an
> Unterstützung von größeren Diskimagesgezauberst hast.. und wie ich das
> nutzen kann..)

Folgende sollten gehen:
simhd, simh altair 8800 hard disk format
MyZ80
YAZE

Siehe auch hier:
Beitrag "Re: CP/M auf ATmega88"
Beitrag "Re: CP/M auf ATmega88"


> Dann Z80..

Dazu habe ich vor 2 Tagen etwas geschrieben.

von Peter Sieg (Gast)


Angehängte Dateien:

Lesenswert?

@Andreas: ich wollte mir das auch schon mal auf LR aufbauen. bin aber 
zeitlich nicht dazu gekommen.. Basis wäre die 4-bit Skizze.
Aber Achtung! Völlig geänderte Pinzuordnungen bei 8-bit!
D0..D3 des 2ten Drams ist dann D4..D7.
Uart ändert sich ebenfalls (HW-Uart -> SW-Uart).
1
Hi. Ich möchte eine 8-bit Version auf LR aufbauen.
2
Wie genau muß ich was verdrahten? Ich gehe im Moment davon
3
aus:
4
5
1. 2ten Dram Chip 1:1 mit dem ersten verbinden (Huckepack) - bis auf D0-D3!
6
2. Dann nach Port Declarations aus config.inc gehen:
7
;-----------------------------------------------------------------------
8
; Port declarations
9
10
#if DRAM_8BIT  /* Implies software uart */
11
12
;Port D
13
.equ RAM_D0  = 0
14
.equ RAM_D1  = 1
15
.equ RAM_D2  = 2
16
.equ RAM_D3  = 3
17
.equ RAM_D4  = 4
18
.equ RAM_D5  = 5
19
.equ RAM_D6  = 6
20
.equ RAM_D7  = 7
21
.equ RAM_A0  = 0
22
.equ RAM_A1  = 1
23
.equ RAM_A2  = 2
24
.equ RAM_A3  = 3
25
.equ RAM_A4  = 4
26
.equ RAM_A5  = 5
27
.equ RAM_A6  = 6
28
.equ RAM_A7  = 7
29
30
;Port B
31
.equ MMC_MOSI  = 3
32
.equ MMC_MISO  = 4
33
.equ MMC_SCK  = 5
34
.equ RAM_A8  = 3
35
.equ RAM_A9  = 4
36
.equ RAM_A10  = 5
37
38
.equ RXD  = 0
39
.equ TXD  = 1
40
.equ MMC_CS  = 2
41
42
.equ P_MMC_CS  = PORTB
43
.equ P_A8  = PORTB
44
.equ P_RXD  = PORTB
45
46
;Port C
47
.equ RAM_RAS  = 0
48
.equ RAM_CAS  = 1
49
.equ RAM_OE  = 2
50
.equ RAM_W  = 3
51
52
.equ P_RAS  = PORTC
53
.equ P_CAS  = PORTC
54
.equ P_OE  = PORTC
55
.equ P_W  = PORTC
56
57
#else  /* 4 bit RAM, hardware uart */

Irgendwo hatte ich die anderen Pin's zum Dram auch mal in einer 
Zeichnung drin gehabt.. finde die aber so schnell nicht mehr..

Peter

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Andreas H. schrieb:
> Hat jemand schon einen fertigen Schaltplan für die 8bit AVR-Maschine

Hier die 8-Bit Variante mit 4 MB x 4 RAM's.

@Peter
Ja, deine Portzuweisungen sind korrekt. Bei den Chips 4256 existieren 
dann A9 und A10 halt nicht, ansonsten alles so wie auf der Schaltung. 
Wenn alles mit 3.3V versorgt wird kann IC2 entfallen, dann aber 
unbedingt die MMC ziehen wenn über ISP und 5V programmiert wird.

Zwei Baustellen, Softwaretest und Hardwareüberarbeitung waren zu viel. 
Deshalb noch etws Geduld mit der neuen LP.

Joe

von Peter Sieg (Gast)


Lesenswert?

@Joe: Ich denke wir haben für uns schon ganz schön was geschafft.. Ich 
bin jetzt endlich mal wieder auf dem aktuelle SW-Stand.. und fat16 sieht 
gut aus.. bleibt noch das mmc/8-bit Problem.. wenn wir mehr Hardware 
draußen haben.. gibts auch wieder etwas mehr Mitstreiter..

Also immer mit der Ruhe.. Gut Ding will Weile haben..

Peter

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo Leute,
meine Hardware läuft noch mit einer sehr alten 8bit Version. Interessant 
wäre die Z80 Implemention und die Ausnutzung der MMC/SD Karte, am besten 
alles mit dem Windows PC ladbar. Leider bin ich nicht der 
Softwarespezialist...CPM 2.2 behersche ich gerade ein bischen...mit 
echtem Z80. Aber ich lese hier weiter mit... mal sehen was noch wird.
Gruß
Hans-Werner

von Leo (Gast)


Lesenswert?

Hans- w. Schütz schrieb:
> meine Hardware läuft noch mit einer sehr alten 8bit Version. Interessant
> wäre die Z80 Implemention und die Ausnutzung der MMC/SD Karte, am besten
> alles mit dem Windows PC ladbar.

Wenn Du mit "Ausnutzung der MMC/SD Karte" größere CP/M-Diskimages 
meinst, kannst Du auf die Schnelle mal folgendes ausprobieren:

- Software (avr und BIOS) auf neuesten Stand bringen
  http://cloudbase.homelinux.net/viewvc/avr-cpm/avrcpm/trunk/

- Bootbare SD-Karte herstellen. Entweder mit System in CP/M-Partition
  oder als CPMDSK_A.IMG auf einer FAT16-Partition

- Das MyZ80-Image aus dem folgenden Beitrag runterladen und als
  CPMDSK_B.IMG auf die FAT16-Partition kopieren:
  Beitrag "Re: CP/M auf ATmega88"

Das Ergebnis sollte ein 8 MB großes Laufwerk B: uter CP/M sein.
Wenn Deine cpmtools mit libdsk compiliert sind, kann das Image auch auf 
dem PC mit Dateien gefüllt werden.
> cpmcp -f myz80 ...

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,

hier der Entwurf der 8-Bit Minimalvariante.

Optionen:
- FTDI durch Peters Platine ersetzen
- ISP Buchse einsparen (Programmierung über Bootloader)

Bitte Vorschläge, Änderungswünsche, Kritik....

Joe

von Peter Sieg (Gast)


Lesenswert?

@Joe: GND / Pin 8 am AVR ist auch mit GND verbunden..?

Peter

von Nils E. (yetanotheruser)


Lesenswert?

Ich würde den FTDI nicht ersetzen, sondern zusätzlich eine Stiftleiste 
vorsehen, damit man wahlweise den FTDI oder Peters Adapterplatine oder 
meinen MAX232 verwenden kann.
Ich kenne jetzt die Belegung der Stiftleiste nicht, aber wenn dort TxD, 
RxD, GND und 3V3 drauf wären, wäre ich schon sehr zufrieden.

Auf die ISP-Buchse würde ich nicht verzichten. Das habe ich bei einem 
anderen Projekt (notgedrungen) und vermisse die Möglichkeit, direkt über 
ISP programmieren zu können, doch sehr.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> GND / Pin 8 am AVR ist auch mit GND verbunden

Danke, die nicht mehr vorhandene Verbindung war dem Löschen geschuldet.

Ich würde den FTDI sozusagen an den Kopf der Platine setzen, dann eine 
Stiftleiste um mit Peters Adapter kompatibel zu sein und dann den Rest.
Die bisherige USB Buchse würde ich gerne durch einen Stecker ersetzen, 
siehe hier:
http://www.reichelt.de/USB-FireWire-Stecker/USB-AWF/index.html?;ACTION=3;LA=444;GROUP=C126;GROUPID=3213;ARTICLE=51993;START=0;SORT=artnr;OFFSET=16;SID=13Tagj738AAAIAAE1pNGY20e735febd5684b463a3fad7e4579eb3
Die derzeitige Kabelverbindung ist immer so schwer, dass alles vom 
Schreibtisch fliegt :-(

ISP lasse ich drauf.

Joe

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier die die Version mit USB-Type A Stecker und Adapter zur 
"Peterplatine"
Peter, bitte mal schauen, ob die Anschlußbelegung korrekt ist. Gerade 
bei TXD und RXD bin ich mir nicht sicher weil ich nicht weiß wo diese 
Pins am IC liegen.
Joe

von Peter Sieg (Gast)


Angehängte Dateien:

Lesenswert?

@Joe: Sieht für mich ok aus.

Peter

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo Peter,
gibt es das Modul auch in Deutschland zu kaufen? Oder nur in Hongkong..
habe da sehr schlechte Erinnerungen....
Anmerkung zur Schaltung... Wo bleiben diejenigen welche noch eine 
serielle Schnittstelle haben... mir fehlt da ein Spannungsregler 3,3V...
Gruß
Hans-Werner

von Peter Sieg (Gast)


Lesenswert?

Ob es das Modul noch - zu diesem Preis - woanders gibt könnte google 
klären.
Ich habe da mit der Bestellung sehr gute Erfahrungen gemacht!
Ansonsten bleibst ja noch FT232RL + USB Buchse. Der FT232 stellt 
ebenfalls
3,3V zur Verfügung. Und wenn das immer noch nicht reicht.. 3,3V 
Netzteile gibt es bei Pollin + ungebautes Handydatenkabel = TTL<->USB 
Schnittstelle.

Peter

von Peter Sieg (Gast)


Lesenswert?

@Joe: Wenn du dann bei Eagle und dem layouten bist.. kannst du bitte die 
4-bit Platine auch noch mal anpassen.. Da war ja Pin 24 - /WE und Pin 27 
- IO3 getauscht worden.. ich bekomme das irgendwie in eagle nicht hin.. 
dann hat man, falls man noch mal die 4-bit Version fertigen will gleich 
die richtige Platine..

Danke, Peter

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Peter Sieg schrieb:
> kannst du bitte die 4-bit Platine auch noch mal anpassen

Bitteschön
Joe

von Peter Sieg (Gast)


Lesenswert?

Dankeschön! ;-)

Für die kommende Easy-8-bit Platine bitte hinter dem CP2102 Adapter vor 
der Versorgung der IC's+SD etc. in der +3.3V Leitung einen Jumper 
vorsehen für
einen Ein-/Ausschalter.. so kann man schon einstecken und die USB 
Schnittstelle wird erreichbar.. Terminalprogramm kann gestartet werden 
und
dann erst kann man dem Gerät seinen Strom geben und kann so die 
Bootmeldungen
auch im Terminalprogramm verfolgen.. ohne diese Schaltmöglichkeit sieht 
man nach <Return> nur noch den A> Prompt..

Peter

von Andreas H. (andreas_h35)


Lesenswert?

@Peter: und ich dachte, dazu ist der RESET-Taster, oder reseted der auch 
den USB-UART ?
Andreas

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ich kann die 3.3V trennen, jedoch kann der Bootvorgang wie von Andreas 
beschrieben über den RESET Taster am AVR ausgelöst werden, was RESET auf 
der CP2102 Platine macht kann ich nicht sagen, da ich die Schaltung 
nicht kenne. Möglicherweise sollte hier der Jumper rein.
Joe

von Peter Sieg (Gast)


Angehängte Dateien:

Lesenswert?

@Andreas+Joe: Ihr habt Recht. An den Resetschalter hatte ich gar nicht 
mehr gedacht (fehlt auf meinem LR Aufbau). Das reicht..

Habe auch mal das myz80 8MB Image probiert. Klappt wunderbar.. 8MB große 
Disketten.. wie bekommen wir die nur gefüllt.. ;-)
Muß mir jatzt mal die diskdefs Einträge für myz80 heraussuchen..

Wer hat denn ggf. noch andere Anwendungen, die jetzt schon mit 
emulierter 8080 CPU laufen..? Gibts da schon Turbo Pascal für?
Ich habe mal ein Wordstar Diskimage mit dem aktuellem Bios angehangen.

Hier noch ein eagle3D Bild der 4-bit V1 Platine..

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Wer hat denn ggf. noch andere Anwendungen, die jetzt schon mit
> emulierter 8080 CPU laufen..? Gibts da schon Turbo Pascal für?

Beitrag "Re: CP/M auf ATmega88"

von Leo (Gast)


Lesenswert?

Inzwischen habe ich auf meinem Netbook unter Windows den CP/M Emulator 
aliados[1] installiert. Funtioniert ganz gut, und scheint etwas 
einfacher zu sein als zxcc.

Mit dem aktuellen Makefile im cpm-Zweig[3] kann jetzt auch unter Windows 
ein Disk-Image mit IPL+CPM+BIOS etc. erstellt werden. Dazu müssen make, 
cpmtools[4], aliados und das ein oder andere Kommandozeilenprogramm im 
PATH gefunden werden. Wer nicht gleich ein komplettes Cygwin oder mingw 
installieren möchte, kann es ja mal mit den UnixUtils[5] versuchen. Sehr 
einfach zu installieren. und funtioniert bei mir wunderbar.

Das Ganze ist sicher noch Verbesserungsfähig. Ich würde mich freuen, 
wenn das mal jemand ausprobieren würde.

Außerdem habe habe ich mal die Diskimages (*.ydsk Dateien), die bei dem 
CP/M-Emulator YAZE-AG[6] "mitgeliefert" werden, getestet. Es können alle 
gelesen werden.
Leider sind nur wenige davon für uns interessant, da entweder zu 
speziell oder nur für Z80. Am interessantesten dürften der Hi-Tech C 
Compiler und vielleicht die Unixlike Tools sein.

Damit die Image-Dateien von unserem System gelesen werden können, habe 
ich sie CPMDSK_A.IMG .. CPM_M.IMG umbenannt und jeweils eine Hand voll 
auf eine FAT16 Partition auf der Speicherkarte kopiert. Damit die mit 
den "höheren" Buchstaben auch gelesen werden können, war leider ein 
kleiner Bugfix notwendig. Im avr-Zweig des SVN-Archives gibt es also 
auch ein Update.

[1] http://www.arrakis.es/~ninsesabe/aliados/
[3] http://cloudbase.homelinux.net/viewvc/avr-cpm/avrcpm/trunk/cpm/
[4] http://www.cpm8680.com/cpmtools/
[5] http://unxutils.sourceforge.net/
[6] http://www.mathematik.uni-ulm.de/users/ag/yaze/

von Peter Sieg (Gast)


Lesenswert?

Prima! Da ich kein SVN inst. habe.. welche Datei(en) muß ich mir 
herunterladen..?

Peter

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Peter Sieg schrieb:
> Prima! Da ich kein SVN inst. habe.. welche Datei(en) muß ich mir
> herunterladen..?


Um alles herunter zu laden, begebe man sich z.B. hier her:
http://cloudbase.homelinux.net/viewvc/avr-cpm/avrcpm/trunk/

Dann klicke man rechts oben auf "Download Tarball".

Wenn man nur einen Teil (z.B. den CP/M-Teil) haben will, steige man in 
das entsprechende Directory hinab, und klicke eben da auf "Download 
Tarball".

Wenn man nur eine einzelne Datei herunter laden will, klicke man auf den 
Namen der Datei oder auf die Revisionsnr. Anschließend findet man rechts 
oben "Download File" (Imho umständlich und nicht empfehlenswert).

Wenn man aber öfters mal nur die geänderte(n) Datei(en) laden will, 
installiert man (unter Windows) am Besten TortoiseSVN 
(http://tortoisesvn.tigris.org/).
Das ist einfach eine Erweiterung des Windows Filemanagers um die 
SVN-Client-Funktionen (Siehe Anhang).

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Peter Sieg schrieb:
> Muß mir jatzt mal die diskdefs Einträge für myz80 heraussuchen..

In meiner diskdefs ist folgender Eintrag
1
# MYZ80 hard drive (only works with libdsk, because it has a 256-byte header)
2
diskdef myz80
3
  seclen 1024
4
  tracks 64
5
  sectrk 128
6
  blocksize 4096
7
  maxdir 1024
8
  skew 1
9
  boottrk 0
10
  os 3
11
end
Der war wahrscheinlich in der Original-Datei, bin mir aber nicht sicher.


> Wer hat denn ggf. noch andere Anwendungen, die jetzt schon mit
> emulierter 8080 CPU laufen..?

Ich hatte ja schonmal die die Diskimages vom simh Altair 8800 Emulator 
emphohlen:
Beitrag "Re: CP/M auf ATmega88"

Für die Spielkinder unter uns habe ich mal das Basic- und das 
Games-Image auf HD-Format umkopiert und als Zip hier angehängt. Viel 
Spaß damit.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Von simhd kann jetzt auch gebootet werden. Um ein solches Bootimage zu 
erkennen, muß im 1. Sektor (ipl) eine Marke vorhanden sein. Das 
cpm/Makefile kann diese Marke erzeugen. Z.B. so:
1
$ make clean
2
$ make diskimage IMGFORMAT=simhd
Oder das Makefile entsprechend anpassen.

Ein fertiges Image habe ich hier mal angehängt.

von Peter S. (petersieg)


Lesenswert?

Na.. ein bißchen ruhig geworden hier..?

@Joe: Stand 8-bit Simple Platinen?

Ich hatte hh3au (oder so  ähnlich) mal per Mail kontaktiert, ob er die 
Z80 Emulation nicht noch abschließen könnte.. ohne jede Antwort.. :-(

Gruß Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> @Joe: Stand 8-bit Simple Platinen?

Ich mußte erst noch ein anderes Projekt abschließen. Der Schaltplan 
steht ja, das Layout auch in den Grundzügen, es muß nur noch "schön" 
gemacht werden.

Gruß Joe

von Horst S. (h3aau)


Lesenswert?

moin moin,

z80 liegt gerade aus gesundheits gründen auf eis.......
will wer anders das beschleunigen?

g. Horst

von Peter Sieg (Gast)


Lesenswert?

Ah. Hallo Horst. Schön wieder von Dir zu hören.
Ich zumindest nicht aktuell.. Gut Ding will Weile haben.
Freue mich das du noch mit im Boot bist!

Gesundheit geht vor! Alles Gute derweil!

Falls du aber irgendwann schon einen lauffähigen Zwischenstand
hättest, würde wir den gerne schon mal im Code mit aufnehmen.

Gruß Peter

von Rene B. (themason) Benutzerseite


Lesenswert?

Ich hab mal eine Frage ...

Ich weiß nicht ob die in dem Thread hier schon gestellt worden ist oder 
nicht, aber ich würd gerne wissen ob es vom Timing her möglich ist die 
Ansteuerung des DRAMs in C zu machen.
Ich stelle mir das so vor das ich 3 Routinen habe. Eine liest ein Byte, 
eine zweite schreibt ein Byte und eine dritte macht den Refresh.
Damit der Refreh immer regelmäßig kommt wird die Refresh-Routine in 
einen Timer-Interrupt gepackt der schneller ist als die notwendige 
Refresh-Zeit. Die Lese und Schreib-Routine kann den Interrupt sperren 
damit die Ansteuerung nicht verfusselt wird, daher wird der Refresh auch 
öfter ausgeführt als notwendig, so die Idee.
Ich selbst habe das CP/M noch nicht ausprobiert da mich in erster Linie 
die Hardware (DRAM, SD-Karte und der FTDI) als kompakte Platform für 
Bastelzwecke interessiert.
Wäre mein "Vorhaben" so realisierbar, oder ist das Timing des DRAMs zu 
kritisch, alsdass es in C umsetzbar wäre zw ist ?

von f.e.sch (Gast)


Lesenswert?

ein Hallo an alle!

Ich habe seinerzeit auch mit dem legendären Z80 (bzw. U880) gearbitet 
und mir so manchen SBC damit gebaut. Das letzte war der Mugler-PC mit 
CPM 2.2, danach habe ich den Z80 und CPM aus den Augen verloren. Hatte 
neben Arbeit und Familie nicht mehr genug Zeit für ein solch 
Zeitintensives Hobby und nach einem Arbeitstag am PC auch keine rechte 
Lust mehr.

Mit großem Interesse habe ich diesen Tread gelesen. Leider scheint er 
aber einzuschlafen.

Ich hätte Interesse an 2 Platinen der "großen" Version mit 168'er, zwei 
4Mx4 dRAM und Header für Micro VGA sowie Peter's USB<->Seriell Wandler. 
Gibt es hierzu schon ein EAGLE - Project?

Wie weit ist der Arbeitsstand bei der Z80 - Emulation, kann mann diesen 
irgendwo einsehen? Ich könnte mir vorstellen, dass ich mich an dieser 
Stelle einklinke. Da die 8080 Codes ja offensichtlich funktionieren, 
sollte die Einbindung der zusätzlichen Z80 spezifischen OP-Codes ja 
reine Fleißarbeit sein - oder sehe ich das falsch?

Gruss Edgar

von Horst S. (h3aau)


Lesenswert?

moin moin,

sende mir doch bitte mal deine i-mehl addr. edgar.
horst

von Edgar S. (fesch)


Lesenswert?

Horst S. schrieb:
> moin moin,
>
> sende mir doch bitte mal deine i-mehl addr. edgar.
> horst

Ist unterwegs...

Gruß Edgar

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Rene B. schrieb:
> Wäre mein "Vorhaben" so realisierbar, oder ist das Timing des DRAMs zu
> kritisch, alsdass es in C umsetzbar wäre zw ist ?

Hallo Rene,
kritisch ist da nix, nur deutlich langsamer.
Zum Anfangen könntest Du mal die angehängten Dateien versuchen. 
Compiliert fehlerfrei, ist aber nicht getestet.

Für den Refresh kann man auch die ASM-Datei verwenden. Die Routine
verändert keine Register. Man kann sie notfalls auch in ein C 
Inline-Statement setzen.

Leo

von Rene B. (themason) Benutzerseite


Lesenswert?

@leo

Danke schön. Die Geschwiondigkeit ist erstmal nicht so wichtig. 
Hauptsache ich weiß das es da nichts superkritisches vom Timing her 
gibt.
Das die DRAMs ja eig. "dumm" und recht einfach gehalten sind denke ich 
auch das es nicht so kritisch ist, aber wollte nochmal andere Meinungen 
dazu hören. Testen werd ich es dann mal. Mit dem ASM in C hatte ich auch 
schon überlegt, wollte aber erstmal alles in C machen.
Vielen Dank noch.

von Leo C. (rapid)


Lesenswert?

Hier ist noch der Refresh:
1
#define RAM_RAS  0
2
#define RAM_CAS  1
3
#define RAM_OE  2
4
#define RAM_W  3
5
6
#define P_RAS  PORTC
7
#define P_CAS  PORTC
8
#define P_OE  PORTC
9
#define P_W  PORTC
10
11
12
ISR(TIMER2_COMPA_vect, ISR_NAKED)
13
{
14
  P_CAS &= ~_BV(RAM_CAS);
15
  P_RAS &= ~_BV(RAM_RAS);
16
  P_RAS &= ~_BV(RAM_RAS);    /* delay */
17
  P_RAS |= _BV(RAM_RAS);
18
  P_RAS |= _BV(RAM_RAS);    /* delay */
19
  P_RAS |= _BV(RAM_RAS);    /* delay */
20
  P_RAS &= ~_BV(RAM_RAS);
21
  P_CAS |= _BV(RAM_CAS);
22
  P_RAS |= _BV(RAM_RAS);
23
  reti();
24
}

Die #define packt man sinnvollerweise in die Headerdatei.

Außerdem hatte ich vergessen zu erwähnen, daß die C-Routinen nur mit der 
8-Bit Version funktionieren, und nur 64 kByte adressieren können. Beides 
kann man natürlich ändern und ich überlasse es dem geneigten Leser gerne 
zur Übung. ;)

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

f.e.sch schrieb:
> Gibt es hierzu schon ein EAGLE - Project?

Ja, gibt es. Ich habe es mal hier aktualisiert.
http://www.mikrocontroller.net/articles/AVR_CP/M

von Edgar S. (fesch)


Lesenswert?

Joe G. schrieb:
> Ja, gibt es. Ich habe es mal hier aktualisiert.
> http://www.mikrocontroller.net/articles/AVR_CP/M

Hallo Joe G.,
das sieht ja echt gut aus - Respekt!
Wird es eine Sammelbestellung für diese 2.(grosse) Variante geben?
Wenn ja, dann melde ich schon einmal 2 Platinen für mich an. Mit welchem 
Preis pro Platine müsste man rechnen?

Gruss Edgar

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hat etwas gedauert...
Hier nun die 8-Bit Variante 3.0 als "CP/M-Stick". Bitte wie immer 
kritisch durchsehen.
Joe

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo Joe,
wird bei dieser Variante die Platine vom USB mit Strom versorgt?
dann hätte ich Interesse an 2 Platinen...vorausgesetzt es wird mal etwas 
mit der Implementierung des Z80 Codes und mit dem Datenaustausch unter 
Windows.
Gruß
Hans-Werner

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Hans-Werner
Diese Variante kann über USB mit 5V versorgt werden oder mit 3.3V über 
den Steckverbinder für Peters Adapter. Die interne 3.3V Versorgung wird 
bei der Bestückung mit dem FT232 wieder über den internen Regler 
realisiert. Ansosnten entspricht die Schaltung fast der ursprünglichen 
Version bis auf die Datenbreite von 8-Bit.

Der Datenaustausch unter Windows sollte mit der FAT-Version kein Problem 
sein. Die MMC-Karten können damit nur über Windows beschrieben werden. 
Linux ist nicht notwendig.
Joe

von Hans- w. S. (hschuetz)


Lesenswert?

@Joe...also betrachte 2 Bausätze bestellt...
Gruß
Hans-Werner

von Peter Sieg (Gast)


Lesenswert?

@Joe: Na, das sieht doch prima aus!
ich hätte gerne auch 2 Platinen.

Gruß Peter

von Andreas H. (ahein)


Lesenswert?

@Joe: auch ich würde gern 2 Platinen haben wollen

@Peter: handelt es sich hier um die AVRCPM-Platine, für die seinerzeit 
ein Aufruf (auch im robotronforum) gestartet wurde ?! Ich habe in Sachen 
Hardware ja schon seit einigerzeit nichts mehr gelesen.

Gruss,
Andreas

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

na dann...
2 x Hans-Werner
2 x Peter
2 x Andreas
2 x Joe

Wer noch? Ab 10 geht es los.

von GPS'ler (Gast)


Lesenswert?

Hallo,

ich bin zufällig über dieses Projekt gestolpert. Meine Hochachtung! Ich 
habe früher auch mal mit CPM gespielt. Ich habe mit dem CPM nichts vor 
finde aber die Platine für etwas anderes interressant. Um eventuell das 
noch zu unterstützen würde ich auch eventuell Platinen nehmen. Gibt es 
da einen aktuellen Schaltplan und Eagle-Files bzw. SD-Kartenslotbauform? 
Was kostet die Platine?
MfG
Achim

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

GPS'ler schrieb:
> Gibt es
> da einen aktuellen Schaltplan und Eagle-Files bzw. SD-Kartenslotbauform?
> Was kostet die Platine?

Einen Schaltplan bzw. die Eagle-Files gibt es etwas weiter oben unter 
avr_cpm.zip
Die Platine kostet ca. 10€-12€. Das kommt noch auf die Gesamtmenge an.

von Günter J. (gjung)


Lesenswert?

Hallo,

der Stick gefällt mir gut.

Damit die 10 Stück voll werden bin ich mit zwei dabei.

Gruß,
Günter

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Ich schließe mich dem an. Nehme auch 2 Stück.

Gruß,

Frank

von GPS'ler (Gast)


Lesenswert?

Hallo @Joe,

vielen Dank für Deine Info. Für mich wäre wünschenswert, dass man die 
3,3V von extern einspeisen könnte. Jumper/Pfosten an R2 würde ohne 
grossen Aufawand gehen. Für mich ist die interne 3,3V Versorgung etwas 
wenig (50mA). Ist das nicht auch für eure Anwendung grenzwertig 
(SD_Karte,IC5,IC6,IC1). Habe das aber nicht explizit geprüft.  Besser 
wäre natürlich ein eigener LowDropRegler von den 5V als Zusatz.
Nur zum Hintergrund:
Aber das hat mit dem eigentlichen Projekt nichts zu tun.Ich würde IC5 
und IC6 nicht bestücken und da einen GPS Empfänger dranhängen bzw. die 
ADC Eingänge und könnte dann einfach einen Logger daraus machen.

MfG
Achim

Ps.: Sorry für das abschweifen vom eigentlichen Threadthema

von Peter T. (pitt)


Lesenswert?

Hallo, ich bin von dem Projekt begeistert. Seit einem halben Jahr 
verfolge ich die Beiträge. Nun habe ich Blut geleckt und will mit einem 
Freund die Platine aufbauen. Ich bestelle vier Platinen.
Gruß Peter

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

GPS'ler schrieb:
> Für mich wäre wünschenswert, dass man die
> 3,3V von extern einspeisen könnte.

Wenn der FT232 nicht bestückt wird, können die 3.3V auch über JP3 Pin 1 
eingespeist werden. Das ist für alle Anwendungen, die einen anderen USB 
Adapter verwenden wollen. Wird der FT232 selbst bestückt und man möchte 
die 3.3V über JP3 Pin 1 einspeisen muß die Verbindung zum Regler des 
FT232 aufgetrennt werden. Das habe ich nun mit JP1 realisiert. Erfolgt 
die Stromversorgung über USB, kann statt JP1 eine Brücke eingelötet 
werden. Dank Leo C. haben wir ja immernoch die beiden I2C Leitungen des 
AVR frei. Auch wenn es noch keine Anwendung dazu gibt, habe ich sie nun 
auf JP5 gelegt. Paltz war ja noch auf der Leiterplatte.
Joe

von GPS'ler (Gast)


Lesenswert?

Hallo

das ist ne feine Sache, So kann man das auch für andere Zwecke nutzen. 
Kann ich noch den Hintergrund erfahren, warum RX/TX vom Atmega nicht für 
die USB Komminikation benutzt wird? Wird das da Software mäßig gemacht?
In meinem Fall ist das gut, da kann man dann ein GPS-Modul dranhängen.

MfG
Achim

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Port D des AVR liegt vollständig am 8-Bit Datenbus des RAM. Damit müssen 
die Daten nicht umständlich zusammengestückelt werden wie in der 
Urversion. Kein Vorteil ohne Nachteil. Die V24 Schnittstelle läuft nun 
über andere Pins und wird per Software nachbgebildet (siehe Quelltext 
von Leo C.).

von GPS'ler (Gast)


Lesenswert?

Hallo

in der Ecke bei R2 oder C10  würde noch gut eine LowDrop 3,3V 
Spannungsregler als als Bestückungsoption für externe 5V bzw. USB 5V 
passen......

MfG
Achim

Ps: Ich bin mit 3 Platinen dabei...

von GPS'ler (Gast)


Angehängte Dateien:

Lesenswert?

Hallo @Joe,

vorneweg, ich habe noch nie eine Leiterplatte mit Eagle entworfen und 
dadurch keinerlei Erfahrung in dieser Richtung!

....aber kann es sein, dass die SD-Karte Spiegelverkehrt ist und würde 
nur passen, wenn das auf der Unterseite wäre. Ich habe mehrere 
SD-Kartenhalter und wollte testen ob diese in etwa passen. Aber leider 
nein. Dabei ist mir aufgefallen,dass die SCDA... falsch angeschlossen 
sein müßte.Im Manual von denen steht "Viewed from the mounting face 
side". Ich habe dein Layout ausgedruckt und ne SD Karte draufgelegt. CS 
ist der  erste  bzw. 2. Pin nach der Abschrägung....

Eventuell liege ich voll daneben.....deshalb prüfen....

MfG
Achim

Ps: Eventuell kannst du die Pads nach recht verlängern (Falls das bei 
euererKarte nicht stört) , dann würde es auch für meine passen...
Anbei die LIB

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ein 3.3V Regler mit T092 Gehäuse ist nun integriert. Muß ja nicht 
bestückt werden.

Die SD-Card ist korrekt. Schau mal hier:
http://www.mikrocontroller.net/articles/AVR_CP/M
Die Karte wird immer so gesteckt, dass die Kontakte oben liegen, d.h. 
die Schräge ist auf der linken Seite.
Joe

von GPS'ler (Gast)


Lesenswert?

Hallo

@Joe danke für die Aufklärung. Da wird die Karte mit den Kontakten nach 
oben reingesteckt. Kannte ich bisher nicht. Also Sorry...

Ich brauche das nicht, aber ist die Taktleitung vom FT... über den 
Jumper zum Atmega nicht relative lang...

>Ein 3.3V Regler mit T092 Gehäuse ist nun integriert. Muß ja nicht
>bestückt werden.

..super an welchen hast du da gedacht (Verfügbarkeit CSD hat da nur 
TO-220)


Wann geht da die Bestellung los?


MfG
Achim

von Siggi M. (Gast)


Lesenswert?

Hallo,

die Version 3.0 macht wirklich einen hervorragenden Eindruck. Ich nehme 
auch 2 Stück von den Platinen.
Wie macht ihr das mit der Verrechnung?

siggi

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

GPS'ler schrieb:
> ..super an welchen hast du da gedacht

LP2950 z.B. beim großen C


@Siggi und GPS'ler, bitte eine Mail mit eurer Versandadresse an mich.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Bei einer derzeitigen Abnahmemenge von 20 Stück würde eine Platine 9,80 
€ + Porto kosten.
Ich warte noch die kommende Woche auf Interessenten bzw. die 
Kontaktdaten. Am Freitag würde ich dann eine Mail an alle Interessenten 
in meiner Kontaktliste senden. Übers Wochenende sind dann noch 
Korrekturen möglich und am 25.07. würde ich dann die Bestellung 
auslösen.
Joe

von GPS'ler (Gast)


Lesenswert?

Hallo

@Joe von Reichelt gibts den LE 33 CZ der müßte doch auch gehen oder?

Hast du da auch die entsprechenden C's vorgesehen?

MfG
Achim

Ps: Ist E-Mail an dich nur mit Anmeldung möglich?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

GPS'ler schrieb:
> @Joe von Reichelt gibts den LE 33 CZ der müßte doch auch gehen oder?

JA

> Hast du da auch die entsprechenden C's vorgesehen?

JA

> Ps: Ist E-Mail an dich nur mit Anmeldung möglich?

JA

von MatthiasM (Gast)


Lesenswert?

Dieses Projekt ist EINFACH - NUR - GEIL!

Ich hätte damals(tm) meinen rechten Arm für eine CP/M Maschine gegeben. 
Hab gelötet und gefrickelt wie ein Wilder, aber am Ende wurde es dann 
doch ein ZX80 :-)

Ich würde auch eine Platine (USB Stick) abnehmen.

von Andreas J. (antibyte)


Lesenswert?

Grad gefunden.
DRAM´s für 99 cent, leider nur SMD.

http://www.lantronic-et.de/index.php/cat/c511_D-RAM-xxK-x-4.html

von Rene B. (themason) Benutzerseite


Lesenswert?

Ich reihe mich auch mal in die Riege der Leute ein die dieses Projekt 
Klasse finden :-)
Die neue Version hat echt was. Kann mit der alten Version ja noch bis 
zum Sankt-Nimmerleins-Tag spielen (ohne die ursprüngliche CP/M-Version 
wirklich zu nutzen :-))))
Was ich bei der neuen Version echt witzig finde ist das I2C 
herausgeführt ist. Freut mich.
Echt gelungen.

von Andreas J. (antibyte)


Lesenswert?

MatthiasM schrieb:
> aber am Ende wurde es dann
> doch ein ZX80 :-)

ZX80 revival :-)

http://home.micros.users.btopenworld.com/zx80/zx80.html

von Bernd B. (mainhattan)


Lesenswert?

Als erstes ein Danke für das Design und die Organisation der Platine.
Ich nehme natürlich auch eine, auch wenn es für mich eine 
Herausforderung sein wird, den FT232 auf die Platine zu löten.

von Andreas J. (antibyte)


Lesenswert?

Der hier ist deutlich billiger und einfacher zu löten als der FT232 :

http://www.reichelt.de/ICs-M-MN-/MCP-2200-I-SO/index.html?;ACTION=3;LA=444;GROUP=A217;GROUPID=2914;ARTICLE=109740;

Benötigt aber noch einen 12MHz Quarz.
Das ist ein vorprogrammierter PIC18F14K50.
Den PIC18F14K50 gibts auch in DIP für ein paar Cent mehr,
aber da müsste man halt noch die USB->UART Firmware aufspielen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Andreas Jakob schrieb:
> Grad gefunden.
> DRAM´s für 99 cent, leider nur SMD.

Ist ja echt witzig, was ihr so findet. Allerdings lassen sich diese SOJ 
Teile noch schlechter löten als der FT232 (siehe Variante 2). Die 4C4256 
RAM's sind oft noch als Amiga Ramerweiterung in der Bucht aufzutreiben.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@ alle Interessenten der Version 3.0

Alle die sich bei mir per Mail wegen einer leiterplatte der Version 3.0 
gemeldet haben, haben eine Mail mit ihrer Menge, dem Preis und weiteren 
Informationen erhalten. Wer KEINE Mail erhalten hat, der ist bei mir 
nicht erfaßt, Sorry. Entweder habe ich es dann verträumt oder ihr habt 
euch noch nicht gemeldet. Bitte dann schnellstens nachholen.

Joe

von Peter S. (petersieg)


Lesenswert?

@Joe: Prima, das du das wieder organisiert- Danke!
Evtl. wäre es sinnvoll (wenn du dir das 'aufbürden' willst), die SD 
Slots von CSD gleich mitzubestellen. Ab 25 Stück kosten die <2€ / 
Stück..?

Ansonsten müßte die wohl jeder selbst bestellen. Dann kostet einer 3€ + 
Versand. Zeit wäre ja noch..

Kannst du bitte die aktuellen Eagle Dateien hier einhängen?

Ich bin noch an einer 'Quelle' von einigen DRams 4x256 DIP dran aud dem 
F64.
Leider liest er zur Zeit keine Nachrichten..

Gruß Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

In der Tat, 2,06 € incl. Versand bei einer Abnahmemenge von 25 Stück.
Ich lass mich breitschlagen. Wer möchte? Ab 25 bestelle ich.

Joe

von Peter S. (petersieg)


Lesenswert?

Ich nehme gerne 2. Falls noch welche an den 25 fehlen auch gerne mehr, 
da ich die auch noch für andere Projekt verwenden kann..

Peter

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Joe G. schrieb:
> In der Tat, 2,06 € incl. Versand bei einer Abnahmemenge von 25 Stück.
> Ich lass mich breitschlagen. Wer möchte? Ab 25 bestelle ich.

Ich nehme dann zu meinen 2 Platinen auch gerne die 2 SD-Adapter.

Gruß und Dank,

Frank

von Andreas H. (ahein)


Lesenswert?

Ich würde 5 SD-Adapter abnehmen.

Danke und Gruss,
Andreas

von Bernd B. (mainhattan)


Lesenswert?

Ich nehme 3 SD-Slots.
Danke für die Mühe.

von Günter J. (gjung)


Lesenswert?

dann nehme ich mal 5 SD-Slots zu meinen Platinen

Gruß,
Günter

von Ole R. (olereinhardt)


Angehängte Dateien:

Lesenswert?

Hi Leute,

Das Projekt ist einsame Spitze! Faszinierend, was man mit einem AVR 
alles anstellen kann.

Ich wollt Euch bei dieser Gelegenheit ein ähnliches Projekt vorstellen, 
welches ich gerade umgesetzt habe.

Beitrag "Intel 8080 CP/M Emulator für Mikrocontroller (ARM7, ARM9, CortexM3, AVR32)"

In diesem Fall laufen sogar zwei Betriebssysteme auf dem 
Mikrocontroller. Nut/OS (kleines Mikrocontroller Echtzeit 
Betriebssystem) und CP/M.

Nut/OS dient dabei lediglich als "Wirtsplattform" um z.B. Zugriffe auf 
die SD Karte zu ermöglichen.

Das ganze läuft auf allen von Nut/OS unterstützten Platformen mit mind. 
80 KByte RAM (ARM7, ARM9, Cortex M3, AVR32, ...)

Viele Grüße,

Ole

PS: Anbei ein screenshot des laufenden CP/M Systems mit WordStar 
Startscreen.
(Ausgaben über serielle Schnittstelle im minicom dargestellt.)

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Die derzeitige Interessentenliste ist an alle per Mail raus. Bitte 
nochmals überprüfen und gegebenenfalls korrigieren. Wünsche nehme ich 
noch bis Sonntag entgegen, dann ist Wunschende für die Version 3.0. Am 
Montag bestelle ich.
Joe

von Frischling (Gast)


Lesenswert?

Hallo CPM/AVR Experten,

ich habe mich da jetzt mal warmgelesen und Geschmack gefunden. Ich habe 
nun  mit SVN das Projekt runtergeladen und zuerst mal versucht den AVR 
Assemblerteil zu übersetzen.
Das Runteladen ist kein Problem (klar!) aber das Übersetzen schon.
zB:
AVRASM: AVR macro assembler 2.1.42 (build 1796 Sep 15 2009 10:48:36)
Copyright (C) 1995-2009 ATMEL Corporation

D:\www\Atmel\UsbStick\SVN_Source\avr-cpm\avrcpm\trunk\avr\8080int.asm(55 
):  error: printnewline: Unknown instruction or macro
D:\www\Atmel\UsbStick\SVN_Source\avr-cpm\avrcpm\trunk\avr\8080int.asm(56 
):  error: printstring: Unknown instruction or macro
D:\www\Atmel\UsbStick\SVN_Source\avr-cpm\avrcpm\trunk\avr\8080int.asm(56 
):  error: syntax error, unexpected STRING

Assembly failed, 3 errors, 0 warnings




Bevor man da jetzt anfängt zu suchen die Frage:

-Gibt es einen AVR-Studio-Projektfile?

Das Ganze soll unter Windows XP erstellt werden. Einige haben das ja 
auch unter Windows gemacht und man muß ja das Rad nicht neu erfinden....

Um diesen Thread nicht mit solchen Problemen zu "belasten" sollte man 
eventuell einen eigenen Thread "Software CP/M Klinik" aufmachen.
Es geht nicht darum, dass jemand Fehler sucht, sondern da scheint doch 
was "generelles" bei Windows zu fehlen (Includes..etc)

von Peter S. (petersieg)


Angehängte Dateien:

Lesenswert?

Hi. Arbeite auch unter Windows und hänge mal mein ganzes AVR CPM 
Verzeichnis hier ein. Kann ggf. nicht unbedingt der letzte SVN Stand 
sein und aktuell habe ich nur 4-bit Hardware.

Peter

von Christian B. (casandro)


Lesenswert?

Hmm, also ich persönlich würde da ja persönlich einen PS/2 Anschluss und 
einen Monitoranschluss dran bauen, oder das ganze in ein möglichst 
kleines Gehäuse zu packen. So als Art Uhrencomputer.

von Frischling (Gast)


Lesenswert?

Hallo @Peter

vielen Dank für das Projekt. Das ist zunächst mal auch nicht 
übersetzbar, da viele spezielle absolute Path Angaben im BAT file sind.
Was mich aber zunächst sehr wundert ist zum Beispiel, dass in dem 
"8080int.asm" kein "#include "macros.inc" drin ist. Sowohl bei dir,  als 
auch im runtergeladenen Projekt und das dann bei euch übersetzbar sein 
soll.

...aber ich muß da zuerst mal wieder ASM Grundlagen lernen. Ich habe vor 
ca. 30 Jahren das letzte mal Assembler (8008/8080/8086) gemacht.

Ich werde versuchen da ein gültiges AvrStudioProjekt zu basteln, so wie 
wenn man was vom Radig etc,,, runteläd und problemlos übersetzen kann. 
Ich habe eine gehende Windows XP AVR Studio 4 Installation ,it der ich 
bisher problemlos Projekte übersetzen konnte. Ausserdem eine 
WINAVR-20100110 Standardinstallation

Müssen wir aber hier wirklich nicht vertiefen. Ich versuche mich da 
durchzukämpfen.

Vielen Dank
Achim

Ps. Problem ist noch die Beschaffung der DRAMS für die V 3 (für mich)

von Leo C. (rapid)


Lesenswert?

Frischling schrieb:
> Was mich aber zunächst sehr wundert ist zum Beispiel, dass in dem
> "8080int.asm" kein "#include "macros.inc" drin ist. Sowohl bei dir,  als
> auch im runtergeladenen Projekt und das dann bei euch übersetzbar sein
> soll.

Hallo,
nur die Datei "avrcpm.asm" sollte durch den Assembler geschickt werden.
Alles andere wird included.

Leider habe ich keine Zeit, auf Details einzugehen. Ab Dienstag wirds 
wieder besser.

von Frischling (Gast)


Lesenswert?

Hallo Leo,

vielen Dank.Soweit war ich noch nicht vorgedrungen.....Ich hab halt mal 
alle genommen.

>>>Assembly complete, 0 errors. 0 warnings

Super! Hat mir für den Einstieg sehr geholfen! Dachte ich mirs doch, 
dass es "einfach" gehen muß. Sorry für die "verfrühte" Nachfrage.

Vielen Dank
Achim

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Für alle, die sich schon mal im Vorfeld mit der Software befassen 
wollen. Unter dem Punkt Downloads
http://www.mikrocontroller.net/articles/AVR_CP/M
habe ich drei CP/M Images reingestellt die unter Windows nur auf eine 
SD-Card kopiert werden müssen. Um selbst ein Image zu erstellen, sollten 
wir eine kleine Anleitung mit den notwendigen Tools verfassen, was 
meinst du Peter?

von Peter S. (petersieg)


Lesenswert?

@Achim: Mein AVR Studio Projekt ist doch im ZIP drin..?
Ich nutze die BAT Datei gar nicht..

Peter

von Frischling (Gast)


Lesenswert?

Hallo

@Peter ALLES klar, jetzt wo du es sagst.....she ich das auch. Mein 
Urproblem war, dass ich "avrcpm.asm" als "Entry File" gestzt habe.   Wie 
oben schon geschrieben ich habe zu früh gefragt! Man sollte eben erst 
den Verstand einschalten, denken und dann fragen.......

Nochmals vielen Dank @Leo und @Peter für eure Hilfe. Jetzt scheine ich 
in der Spur zu sein. Man wird halt älter....

Sorry
Achim

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Aufbauhinweise V3

Die Leiterplatten sollten bald bei euch eintreffen. Deshalb für alle, 
die neu dabei sind und natürlich auch für alle anderen, einige 
Aufbauhinweise.

1. Wenn die 5V aus der USB-Schnittstelle bezogen werden dann muss JP1 
gesteckt sein. Dabei wird der interne 3.3V Regler des FT232 genutzt.

2. Wenn die 5V über JP3 zugeführt werden, JP1 offen lassen.

3. Wird der AVR über einen externen Quarz getaktet, Pin2 und Pin3 bei 
JP2 brücken.

4. Erhält der AVR seinen Takt über den FT232, dann Pin1 und Pin2 bei JP2 
brücken. Der FT232 muss jedoch vorher über ein Tool, welches von der 
FTDI Webseite bezogen werden kann, programmiert werden. CBUS0 muss dann 
auf Taktausgabe geschaltet werden.

5. ACHTUNG! Wer den AVR über die ISP Schnittstelle mit externen 5V 
programmiert MUSS vorher die SD-Card ziehen, sonst liegen die 5V an der 
SD-Card! Das übersteht sie nicht.

Viel Spaß beim Aufbau!
Joe

von Nils E. (yetanotheruser)


Lesenswert?

Platine ist angekommen - vielen Dank!
Gibt's die Eagle-Files irgendwo? Sonst wird das Bestücken was schwierig 
:-)

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ja, hier.

von womisa (Gast)


Lesenswert?

Hallo

meine Platinen sind auch angekommen. Vielen Dank.

FRAGE: Kann mir noch jemand passende RAMS abgeben?


MfG
Achim

von Peter S. (petersieg)


Angehängte Dateien:

Lesenswert?

So hier Bilder meiner ersten Platine.

Läuft alles!

Was ich festgestellt habe:
Das größte Problem sitzt meistens vor dem Rechner ;-) Hatte TTL-USB 
Adapter falsch herum angeschlossen. ;-)
Die FAT16 Routinen sind wählerisch was die Karten angehen. 3 gehen 
nicht; 2 gehen (1GB Platinen; Noname). Hier gibt es einige 
Parallelprojekte (sd2iec) wo man ggf. schauen kann, ob man Code hierzu 
übernehmen kann..
Ach ja.. Speed = 2,623 bei 8-bit und 30MHz (5,293 bei 30MHz und 4-bit).

Peter

von Peter S. (petersieg)


Lesenswert?

@Achim: Kann dir 2 getestete Rams zusenden für 5€ unversichert. Wenn 
Interesse = Mail senden.

@alle: Leider hat sich mein vermutlicher Ramlieferant aus dem Forum64 
seit Wochen/Monaten nicht mehr gemeldet.. von daher sind meine Rams auch 
begrenzt. Ich kann max. noch 2x2 Rams abgeben.

Peter

von Siggi M. (siggim)


Lesenswert?

@alle: Ich habe gerade gesehen, bei Kessler-electronic gibt es die 
RAM-Speicher für 3,89 Euro das Stück zu kaufen.

Siggi

von Nils E. (yetanotheruser)


Lesenswert?

Kessler hat das RAM aber offenbar nur im SOJ- bzw. ZIP-Gehäuse, nicht 
aber in DIP.
Mir fehlen leider auch noch RAM-Chips.

Nils

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Läuft alles!

Prima!
Nett auch eine Wahl der Quarzfrequenz. Natürlich muß die Version CP/M 
V3.0 mit 30 MHz laufen!

@alle
Ich bin auch noch an einer Quelle für RAM's. Ansosnten muß ein Adapter 
von SOJ auf DIP her.

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo,
meine Platinen sind heil angekommen, danke
nun erstmal löten...
Gruß
Hans-Werner

von Peter S. (petersieg)


Lesenswert?

Meine extra Rams sind alle vergeben.
Hier gibts noch 4 Stück zum Preis von 1,50€/Stück - Bestell-Nr.: 
100155--:
info@Hefner-Electronic.de
Sehr geehrter Herr Sieg,

wir haben noch 4x Siemens HYB 514256A-70 DIP 20

Mit freundlichen Grüßen

Hefner-Electronic
Gunther Hefner
---
Der 30MHz SMD-Quarz ist von Pollin: Bestell-Nr.: 230079
Wie gesagt, 30MHz ist bereits grenzwertig. Ab 32Mhz lief es nicht mehr.
Wer das Letzte rausholen will.. ansonsten sollten 25MHz (alte Lan-Karte)
sicherer sein..

Peter

von Peter S. (petersieg)


Lesenswert?


von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

1. Gibt es eigentlich schon weitere Aufbauerfolge?
2. Habe noch 2 x 4C256-8 abzugeben, wer hat Interesse?
3. Es gibt neue Platineninteressenten, wer möchte noch und sollte etwas 
geändert werden?

Gruß Joe

von Peter Sieg (Gast)


Lesenswert?

@Joe: 1 Änderungswunsch: Die RST Leitung des CP2102 Adapters NICHT mit 
RESET des AVR verbinden. Sonst wird bei einem Reset des AVR's auch der 
Adapter resettet und das macht wenig Sinn.

Peter

von Siggi M. (siggim)


Lesenswert?

@Joe: Ich habe Interesse an den 2 Chips. Wenn Du auch noch einen SD-Slot 
übrig hättest, wäre das fein!

Gruß  Siggi

von Nils E. (yetanotheruser)


Lesenswert?

Mein mega168 ist jetzt auch eingetroffen, da wollte ich mich jetzt an 
den Aufbau machen. Ich möchte das allerdings nicht als USB-Stick bauen, 
sondern mit einem MAX232 Pegelwandler und externer 5V-Versorgung an ein 
Lear Siegler ADM-3A-Terminal hängen.

Dazu habe ich mir gerade einen Wolf gesucht, wo ich wie welche Jumper 
setzen muss - und schließlich wurde mir klar, dass die Eagle Dateien des 
Postings vom 8.8. nicht mit der ausgelieferten Platine übereinstimmen. 
Unter anderem fehlt der 3V-Spannungsregler.

Kann ich bitte die Eagle-Dateien bekommen, die der Platine entsprechen?

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich bin verwirrt, die Zip-Datei vom 08.08. enthält den Stand vom 
25.07.2011. Das ist der aktuelle Stand mit 3.3V Regler

Welche Jumper sind unklar?

Gruße Joe

von Nils E. (yetanotheruser)


Lesenswert?

Sorry, mein Fehler. Ich hatte offenbar noch eine veraltete Fassung auf 
der Festplatte (was mir nicht bewußt war) und habe die beiden 
vertauscht. Es ist alles in Ordnung.

Was mir gestern unklar war, habe ich mit dem Durchgangsprüfer geklärt 
und die Platine soweit aufgebaut. Ich habe dabei einen anderen 
3,3V-Spannungsregler verwendet, den ich noch zur Hand hatte: MCP1702. 
Die verbauten 100nF-Kerkos sehen nicht ganz so schön aus, weil ich nur 
welche mit Rastermaß 7,5mm zur Hand hatte. Ich habe einen 25 MHz 
Grundton-Quarz verwendet mit 18pF-Kondensatoren daran. Gestern habe ich 
noch die Fuses auf den Quarzbetrieb umgestellt - zu mehr war leider 
keine Zeit mehr.

Bis jetzt sieht alles gut aus :-)

von Siggi M. (siggim)


Angehängte Dateien:

Lesenswert?

So, die Hardware ist fertig, jetzt werde ich mich der Software widmen.

@Peter: Ist Dein Zip-File noch aktuell?

Siggi

von Peter S. (petersieg)


Lesenswert?

Jup. ZIP sollte noch aktuell sein. Kann nur sein, das im thrunk von Leo 
etwas neuere Versionen sind! Am besten schaust du da mal.. letzte 
Änderung
war glaube ich, das CP/M / Bios auch von einer 8MB Diskimage geladen 
werden konnte..

Peter

von Nils E. (yetanotheruser)


Lesenswert?

Ich habe die AVR-Firmware aus dem trunk assembliert und bekomme jetzt 
die Ausgabe:

CPM on an AVR, v2.1
Testing RAM: fill...wait...reread...
Initing mmc...
No bootable CP/M disk found! Please change MMC/SD-Card.

Initing mmc...
No bootable CP/M disk found! Please change MMC/SD-Card.

Wenn ich das richtig verstanden habe, kann diese Version von einer 
FAT-16-formatierten SD-Karte aus einer Image-Datei booten? Ich habe aber 
nicht verstanden, wie man das bewerkstelligt bzw. fertige Dateien dazu.
Gibt es eine Anleitung dazu? Aus dem Abschnitt dazu aus 
http://avr.cwsurf.de/?AVR_CP%2FM bin ich nicht recht schlau geworden.
Oder kann hier jemand eine bootfähige Image-Datei hochladen, die ich 
dann nur noch in das Hauptverzeichnis legen muss?

von Nils E. (yetanotheruser)


Lesenswert?

...hat sich erledigt, habe den Eintrag vom 21.4. entdeckt. Super, es 
läuft!!

von Nils E. (yetanotheruser)


Angehängte Dateien:

Lesenswert?

Screenshot vom ADM-3A

von Peter Sieg (Gast)


Lesenswert?

Sehr schön!
Und mit ADM3 Terminal ist dann auch stilecht ;-)

Im avrcpm_aliados.zip sind eigentlich schon disk images anthalten und 
alle nötigen Batchdateien um sie zu bilden..

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Interessant sind eure Bestückungsvarianten. Merkwürdigerweise schreibt 
die Literatur immer etwas von Abblock C’s möglichst dicht am IC, ja 
einen Elko an der SD Card, Pull Up und Pull Downs, …
Ich kann ja bei der nächsten Variante all diesen „überflüssigen“ Kram 
weg lassen :-)

Übrigens hier
http://www.mikrocontroller.net/articles/AVR_CP/M
gibt es auch ein Diskimage.
Joe

von Nils E. (yetanotheruser)


Lesenswert?

Danke, die Disk-Images werde ich noch ausprobieren. Erst mal muss ich 
aber noch die Pegelwandlung von RS-232 auf 3.3V in den Griff bekommen: 
ich habe nicht bedacht, dass ein MAX232 5V-Pegel ausgibt, die für den 
bei 3.3V betriebenen AVR zu hoch sind.

Was anderes: ich habe gesehen, wird ein BREAK auf der seriellen 
Schnittstelle derzeit noch nicht behandelt. Das ADM-3A hat eine extra 
Break-Taste und Terminalprogramme bieten üblicherweise die Funktion, ein 
Break zu senden. Das würde die Möglichkeit eröffnen, bei Empfang eines 
Breaks einen Kalt- oder Warmstart auszuführen, oder einen Debugger 
aufzurufen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Nils Eilers schrieb:
> Pegelwandlung von RS-232 auf 3.3V

Ein 74HVCT08 (siehe Schaltung der AVR CP/M Variante 2) sollte das tun. 
Dort hatte ich die Pegelwandlung für die SD Karte so vorgenommen.

Das mit dem Break habe ich nicht verstanden. Wer erzeugt es, wer nutzt 
es, was macht es?

Gruß Joe

von Nils E. (yetanotheruser)


Lesenswert?

Die Pegelwandlung probiere ich mal auf dem Steckbrett. Evtl. reicht 
schon Spannungsteiler aus zwei Widerständen, ansonsten hätte ich noch 
74HC4050 hier.

Break wird leider nur im englischen Text der Wikipedia etwas näher 
erklärt: 
http://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter#Break_condition

Kurz gesagt ist ein Break ein gesendetes Startbit, dem keine Daten 
folgen (0x00) und das auch für die Zeit halten wird, wo eigentlich das 
logisch inverse Stop-Bit folgen müsste. Also wie das Senden eines 0x00 
mit fehlendem Stop-Bit, was einen framing error ergibt.

Erzeugt wird das durch den Sender, in diesem Fall also ein 
angeschlossenes Terminal(programm).

Was es bewirkt, ist nicht allgemeingültig definiert - es hängt ganz vom 
Anwendungsfall bzw. der tatsächlichen Hardware ab. Allgemein benutzt man 
es dazu, die Aufmerksamkeit des Empfängers zu erregen. Übliche 
Anwendungen sind Wechsel der Baudrate oder Reset.

Beim AVRCPM wäre es nützlich, um aus jedem Programm aussteigen zu können 
ohne Reset drücken zu müssen - insbesondere deswegen, weil der Speicher 
erhalten bleibt.

Ich habe zwar schon Z80 und 6502-Assembler programmiert, aber noch nie 
AVR. Die Implementierung sollte aber nicht sonderlich schwierig sein. Im 
Grunde nur framing error erkennen (was sowieso der Fall sein sollte), 
und wenn die empfangen Daten 0x00 sind, dann haben wir ein Break. Und 
dann z.B. ein Reset oder Warmstart auslösen - fertig.

von Leo C. (rapid)


Lesenswert?

Der ATmega-U(S)ART kann diesen Zustand erkennen (Framing Error + 
empfangenes Zeichen = 0).

Unser Software-UART (sw-uart.asm) könnte um diese Funktion erweitert 
werden.

Freiwillige vor.

von Nils E. (yetanotheruser)


Lesenswert?

Wenn ich meine Hardware fertig habe, würde ich das gerne probieren. Ich 
kann aber nur die soft-uart-Version testen, da ich keine 4-bit-Hardware 
mit hw-uart besitze.

von Günter J. (gjung)


Lesenswert?

So ich habe nun auch eine Platine fertig bestückt.

Auf dem ersten Bild von der bestückten Platine von
Joe (Beitrag "Re: CP/M auf ATmega88")
ist eine USB-A Buchse zu erkennen. Ich habe nun ohne
das groß zu überprüfen auch eine USB-A Buchse eingelötet und
erst nachdem ich sofort einen 'Overcurrent' Fehler am USB
erhalten habe gemerkt daß das Layout für einen USB-A Stecker ist.
Hat mich dann etwas Zeit gekostet die Buchse wieder auszulöten und
auf der Unterseite einzulöten, aber jetzt gehts.

Foto gibts dann Morgen.

Gruß,
Günter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Oh, tut mir leid!
Ich hätte das bei den Aufbauhinweisen mit erwähnen sollen. Irgendwann 
früher, weiter oben hatte ich das mal getätigt, jedoch später nicht noch 
mal explizit erwähnt.

von Günter J. (gjung)


Angehängte Dateien:

Lesenswert?

So, hier die versprochenen Fotos.

Wie gesagt habe ich eine USB Buchse auf der Rückseite,
die Kratzer am USB Anschluß kommen vom Entlöten.

Aktuell rennt hier ein ATMega168 bei 20MHz.

Gruß,
Günter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Toll Günther!
Ich sehe irgendwann schon das Turbo Pascal laufen.
Joe

von Thomas H. (thommel)


Lesenswert?

Ein Dankeschön an alle Beteiligten für das tolle Projekt auch von mir. 
Ich bin heute dazu gekommen, die Platine zu bestücken. Funktioniert 
alles bestens!

Viele Grüße, Thomas

von Peter S. (petersieg)


Lesenswert?

Wer möchte, der 'Erfinder' des Ganzen = sprite tm hat einen PayPal 
Spendenbutton auf seiner Seite (Tip Jar):

http://spritesmods.com/?art=avrcpm

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Unter: http://www.mikrocontroller.net/articles/AVR_CP/M
stehen nun die aktuellen Layout Daten, eine Hexdatei zum Soforttest, 
CP/M Immage zum Testen, sowie der Link zur aktuellen Software (Dank an 
Leo C.)

Offene Baustellen im Projekt:

1. Z80 Emulation
2. Breakfunktion (Wunsch von Nils)
3. SD-Card Funktion verbessern (es gibt einige Karten, die nicht korrekt 
funktionieren)

Überraschenderweise waren die knapp 30 Platinen sofort weg. Es gibt 
schon wieder Anfragen nach neuen Leiterplatten. Ich würde ab sofort 
wieder Interessenten sammeln. Natürlich sind jederzeit Wünsche, 
Änderungen, Erweiterungen willkommen (Peter Resettrennung ist 
vorgemerkt)

Joe

von Günter J. (gjung)


Lesenswert?

Hallo,

Ich würde gerne dem Thema Z80 Emulation ein bisschen Leben einhauchen.

Horst hat, wenn ich es richtig mitbekommen habe, das Thema an den Edgar
weitergegeben.

@Edgar, falls Du hier noch Hilfe benötigst würde ich mich gerne 
anbieten.

Gruß,
Günter

von Nils E. (yetanotheruser)


Angehängte Dateien:

Lesenswert?

So, Hardware ist jetzt erst mal fertig und in ein preiswertes Gehäuse 
eingebaut (Reichelt SD 10 SW).

Die Pegelwandlung am MAX232 von 5V nach 3V funktioniert prima mit einem 
simplen Spannungsteiler aus einem 1,8K und 3,3K Widerstand. Die 
Stromversorgung erfolgt über ein 5V-Steckernetzteil und 1N5818 
Schottky-Diode als Verpolschutz. Neben der Reset-Taste gibt's noch eine 
LED für den SD-Kartenzugriff. Den Vorwiderstand habe ich auf 55 Ohm 
verkleinert, damit sie gut hell leuchtet. Prima wäre noch, die Power-LED 
und die Zugriffs-LED in einer Dual-LED zu kombinieren, aber da ich nur 
eine Dual-LED mit gemeinsamer Kathode hatte, hätte das einen Transistor 
als Inverter erfordert - vielleicht flicke ich den ja mal noch ein ;-)

An den I2C-Bus habe ich noch eine batteriegepufferte Echtzeituhr PCF8583 
gehangen - mal sehen, ob und wann die Software das unterstützen kann. 
Das wäre eine weitere Baustelle: den I2C-Bus dem emulierten 8080 als 
I/O-Ports zur Verfügung stellen: vielleicht so, dass man in eine 
I/O-Zelle die Adresse des I2C-Busses schreibt und dann über eine andere 
den tatsächlichen Zugriff vornimmt.

von Winfried S. (wede)


Lesenswert?

Hallo,
bin hier zufällig rein geraten.
Falls benötigt, habe in meiner Chip-Kiste 8+1 Dram gefunden.
Vielleicht sinds ja die Richtigen:
TMS 44C256-80N und 1 M514256B-70R, jeweils 20-polig.
Gruß
W.Schwede

von Peter S. (petersieg)


Lesenswert?

@Winfried: Die TMS 44C256-80N sollten die richtigen sein.
Wenn du sie entbehren kannst -> Mail an peter.sieg1 (at) gmx.de

(oder evtl. auch an Joe, dann können sie mit einer nächsten 
Platinenbestellung verteilt werden)

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Thema Echtzeituhr:

Von CP/M 2.2 wohl nicht unterstützt, könnte man sich vielleicht trotzdem 
an die BDOS Funktionen 104 und 105 halten.

BDOS Funktion 104 - Datum und Uhrzeit stellen
Aufruf mit C=68h, DE=Adresse des Zeitstempels.
Der Zeitstempel hat folgendes Format:
DW      Tag     ;Tag 1 ist 1.Januar 1978
DB      Stunde  ;gepacktes BCD
DB      Minute  ;gepacktes BCD

BDOS Funktion 105 - Datum und Uhrzeit holen
Aufruf mit C=69h, DE=Adresse des Zeitstempels. Rückgabe A=Sekunden 
(gepacktes BCD).
Der Zeitstempel hat folgendes Format:
DW      Tag     ;Tag 1 ist 1.Januar 1978
DB      Stunde  ;Gepacktes BCD
DB      Minute  ;Gepacktes BCD

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo Leute,
wer die Augen aufmacht kann klarer sehen...
meine Platine rennt nun auch mit 20 Mhz...
Interessant wäre jetzt die Z80 Implementierung und IO Ports über I2C
Gruß
Hans-Werner

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

RAM'S

dank Winfried S. gibt es nochmal 9 x DRAMS für das Projekt. Wer 
Interesse hat melde sich bitte bei mir. Stückpreis 0,55€ + Porto (0,70€ 
Warensendung)
Gruß Joe

von Bernd B. (mainhattan)


Lesenswert?

Hallo Joe,

ich benötige noch 2 DRAMs.

Gruß,
Bernd

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Es gibt bei genügend Interessenten (noch mindestens 2) nochmals die 
Möglichkeit Platinen von der letzten Version zu bestellen.
Wer hat noch Interesse?
Gruß Joe

von Holger B. (ambrosius)


Lesenswert?

Hallo Joe,

ich könnte auch noch 2 Stck DRAM's gebrauchen, falls noch welche zu 
haben sind.

Vielen Dank

Holger

von Peter S. (petersieg)


Lesenswert?

@alle:

Ich habe mich nun durchgerungen nochmals Platinen in China zu bestellen.
Um den Preis von 10€/Platine halten zu können, mußte ich allerdings 
einige mehr abnehmen, sodaß wir wahrscheinlich auch noch Weihnachten
genug davon haben ;-) Reset zwischen USB TTL Wandler + AVR habe ich 
entfernt.

Als Abwechslung habe ich die Platinen mit weißem Lötstoplack und 
schwarzer Beschriftung gewählt. Das sollte ganz nett (nerd) mit den 
schwarzen IC's und dem roten TTL-USB Wandler aussehen ;-)

Sollten so in 14 Tagen da sein. SD Slots würde ich dann auch besorgen,
sodaß 1 Platine mit Slot dann 12,50€ und Versand dann 2,50€ wären.

Wer welche möchte, schicke mir eine Mail mit Anzahl und Lieferadresse 
und derjenige bekommt dann meine Bankverbindung zur Vorkasse.

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@alle:

Wie ihr lesen könnt, kümmert sich Peter gerade um die Neubestellung der 
nächsten Serie. Die Daten von Bobby und Wahe habe ich schon 
weitergeleitet.
Dank Bobby gibt es nochmal 16 DRAM's für das Projekt. Bei Interesse 
gleich eine Info an Peter, der tütet sie dann mit ein.
Joe

von Peter S. (petersieg)


Angehängte Dateien:

Lesenswert?

Platinen sind heute angekommen.. und erste läuft schon ;-)
Bestellte Platinen+Slots gehen morgen zur Post..

Wer übrigens Lust hat.. am 1+2 Okt. findet die Classic Computing in 
37603 Holzminden statt (Infos: www.classic-computing.de). Ich werde mit 
dem Stick
auch dort sein..

Peter

von Peter S. (petersieg)


Lesenswert?

Hier scheint es auch noch Rams zu geben:

http://www.demotronic.net/

1,50€/Stück ist ok.

---

Ansonsten. Ist ein wenig ruhig geworden..?
Was macht die Z80 Implementierfraktion..?

Aber auch ohne Programmierkenntnisse, kann man z.B weitere Programme aus 
CP/M Archiven ausprobieren und in einem neuen Diskimage zusammen 
stellen..

Peter

von Joerg W. (joergwolfram)


Lesenswert?

Einen Z80 Emulator könnte ich demnächst zur Verfügung stellen. 
Allerdings braucht der mindestens ca. 17K Flash, so dass nur der Mega328 
in Frage käme. Dafür ist er aber recht flott. Für "Leos Schleife" 
braucht er im FAST Mode (ZX81 Emulator bei 20MHz AVR-Takt und 12 Takten 
für einen Speicherzugriff) ca. 0,8 Sekunden, was etwa 3,6 MHz Z80 Takt 
entsprechen würde. Eine auf Speed optimierte Variante (braucht ca. 24K) 
kommt sogar auf 0,7s was dann etwa 4,1MHz Z80-Takt wären (falls ich mich 
da jetzt nicht verrechnet habe).

Jörg

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Joerg, schön wär's mal, wenn ein EMU für AVRs wie den mega162 kommen 
würde, an den man extern ganz "normale" RAMs über das Memory-Interface 
dranbekommt.

So würde z.B. ein 62256/62512 mit 32k/64k RAM gehen. Auch Banking mit 
grösseren Chips wäre drin. So dann (glaube ich) in CPM bis 512kb RAM.

von Peter S. (petersieg)


Lesenswert?

@Jörg: Hört sich gut an! Bei den bisherigen Arbeiten zur Z80 Erweiterung 
hatte ich den Eindruck, das das aber erheblich kleiner geht mit dem 
Tabellenansatz.. so in Richtung +5-8kb.. arbeitet da z.Z eigentlich noch
jemand hier daran..?

Ein 328 hatte ich mal versuchsweise geflasht.. der schien aber mit den 
3,3V an Spannungsversorgung nicht zurecht zu kommen..?

BTW: Es sind noch Platinen+SD Slots zu haben! -> Mail.

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Ein 328 hatte ich mal versuchsweise geflasht.. der schien aber mit den
> 3,3V an Spannungsversorgung nicht zurecht zu kommen..?

Peter, ich versuche es heute auch mal mit einem 328 und 3.3V. Ich 
berichte...

von Joerg W. (joergwolfram)


Lesenswert?

Über 5K belegen bei mir schon allein die Sprungtabellen:

Ohne Prefix:     512 Bytes
CB Prefix  :     512 Bytes
ED Prefix:       512 Bytes
DD Prefix:      1024 Bytes
DD CB Prefix:   1024 Bytes
FD Prefix:      1024 Bytes
FD CB Prefix:   1024 Bytes

Was viel gegenüber meiner "alten Version" an Geschwindigkeit gebracht 
hat, ist zum einen die vollständige Ausdekodierung aller Befehle und die
Nutzung des AVR Statusregisters. Außerdem habe ich es aufgegeben das 
originale Befehlstiming möglichst genau nachzubilden. Bei vielen 
Befehlen ist das Verhalten von AVR und Z80 gleich, da reicht nach der 
Operation ein

IN   reg_f,SREG

aus, für logische und Schiebeopertionen nutze ich Tabellen. Manchmal muß
man das C Flag über die Operation mittels des T-Flags "retten". Und das
N-Flag habe ich nach GPIOR0.0 verlegt. Bei bedingten Sprüngen etc.
nutze ich dann die Positionen der AVR Flags. Bei den meisten Programmen 
sollte das auch keine Probleme bereiten.

Am AVR-CP/M Projekt selbst werde ich mich nicht direkt beteiligen, dafür 
habe ich zu viele andere "Baustellen". Aber das "AX81"-Projekt wird 
hoffentlich nächste Woche online gehen und damit auch der Sourcecode vom 
Z80 Emulator.

Gruß Jörg

von Peter S. (petersieg)


Lesenswert?

@Jörg: Ein ZX81 auf AVR Basis.. freue mich schon!

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

So, habe die Tests durchgeführt. Meine Mega328P laufen alle unter 3.3V 
bis 20 MHz stabil. Einige auch bis 24 MHz.

Joe

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Ich habe erst einen mega328p mit 25mhz @ 5V mit Frequenzgenerator ohne 
Probleme aufm Steckbrett laufen gehabt. Bei 25.2 fing er an zu 
spinnen...

von do9brx (Gast)


Lesenswert?

Hallo!
Ich hab hier noch ein Problem.
Hab das Projekt entsprechend kompiliert und auf den AVR gebracht, Images 
kopiert und das Ganze startet erstmal auch, aber dann

"A: FAT16 File-Image at:255 size"

und Neustart in der Schleife.
Wo kann das Problem liegen?

Andre

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Läuft der RAM Test korrekt durch?

Ansonsten sieht mir das ganz nach Kartenunverträglichkeit aus. Einige 
SD-Karten laufen nicht richtig.
Nun gibt es mehrere Möglichkeiten.

1. SPI Takt runter setzen.
in der config.inc
#define MMC_SPI2X  1 auf   (CLK/2)
#define MMC_SPI2X  0 setzen  (CLK/4)

2.  debuggen
In der config.inc
.equ MMC_DEBUG     = 1
Damit wird über die Schnittstelle der MMC Inhalt ausgegeben. Du erkennst 
also ob die Daten von der Karte richtig gelesen werden.

Beim Schalter
.equ MMC_DEBUG     = 2 oder größer (siehe mmc.asm) wird der SPI Takt auf 
clk/128 gesetzt. Dann sollte es wirklich gehen.


Einige Karten laufen leider nicht. Hier hilft nur Kartentausch oder die 
MMC Routine noch mal anfassen.

von do9brx (Gast)


Lesenswert?

Der Ram test ist einwandfrei.
Danke für die Hinweise, das werde ich dann morgen mal ausprobieren.
Hab auch noch ein paar andere Karten da :-\

von do9brx (Gast)


Lesenswert?

Geht leider immer noch nicht.

Mit Debug sehe ich, das die Laufwerke erkannt und gelistet werden, dann
"Partinit done.; flags: 30"
Dann kommt noch ein Lesevorgang und wieder Neustart

Hab jetzt 3 Karten verschiedener Hesteller durch, (16/128/256MB), 
fertiges Hex-File,  selbstcompiliertes HEX, fertige Boot-Images als auch 
neucompilierte. Keine Besserung. Hardware ist auch ok, Rams habe ich mal 
mit zwei anderen gewechselt. Hmmm ..

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Schalte mal MMC_DEBUG = 4

Dann siehst du was von der Karte nach der korrekten (inkorrekten? ) 
Initialisierung gelesen wird.

Ich habe mal die Ausgabe für die Initialisierung und das lesen des 
ersten Blocks beigefügt.

CPM on an AVR, v2.1
Testing RAM: fill...wait...reread...
Initing mmc...

mmcInit SPI_CLK_SLOW <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
mmcCMD: 00 00000000 <FF <FF <FF >40 .. 95>95 <FF <01  CMDRes: 01
mmcCMD: 08 000001AA <FF <FF <FF >48 .. 87>87 <FF <05  CMDRes: 05
mmcCMD: 37 00000000 <FF <FF <FF >77 .. 01>01 <FF <01  CMDRes: 01 mmcCMD: 
2                9 00000000 <FF <FF <FF >69 .. 01>01 <FF <00  CMDRes: 00
mmcCMD: 37 00000000 <FF <FF <FF >77 .. 01>01 <FF <00  CMDRes: 00 mmcCMD: 
2                9 00000000 <FF <FF <FF >69 .. 01>01 <FF <00  CMDRes: 00
mmcCMD: 10 00000200 <FF <FF <FF >50 .. 01>01 <FF <00  CMDRes: 00 <FF
 CT: 02 InitRes: 00 SPI_DISABLE
mmcRdSect SPI_CLK_FAST
mmcCMD: 11 00000000 <FF <FF <FF >51 .. 01>01 <FF <00  CMDRes: 00 <FF <FF 
<                FE <00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00                 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 0                0 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00                 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0 
0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00                 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00                 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 0                0 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
0                0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00                 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00                 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0                0 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00                 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 0                0 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00                 00 00 00 04 02 00 06 
08 C8 D0 FD 00 00 00 03 07 1E 00 00 00 00 00 00 00 00                 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0 
0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
<46 <FF SPI_DISABLE RdSectRes: 00

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Einen wichtigen Hinweis noch:
Die Imagefiles sollten immer 256k groß sein.

von do9brx (Gast)


Lesenswert?

Also bei mir sieht das so aus:
(Steuerzeichen wegdenken, kommt vom Term)
...

mmcCMD: 11 0000EE00 <FF <FF <FF >51 .. 01>01 <FF <FF <00  CMDRes: 00 <FF 
<FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF 
<FE <31 <23 <FF SPI_DISABLE RdSectRes: 00 <\r>
<\n>mmcRdSect SPI_CLK_FAST <\r>
<\n>mmcCMD: 11 0006FE00 <FF <FF <FF >51 .. 01>01 <FF <FF <00  CMDRes: 00 
<FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF 
<FF <FE <31 <23 <FF SPI_DISABLE RdSectRes: 00 <\r>
<\n>A:FAT16 File-Image at: 046, size: 208KB.<\r>
<\n>B:FAT16 File-Image at: 002, size: 175KB.<\r>
<\n>C:FAT16 File-Image at: 099, size: 118KB.<\r>
<\n>Partinit done.<\r>
<\n>mmcRdSect SPI_CLK_FAST <\r>
<\n>mmcCMD: 11 0003AE00 <FF <FF <FF >51 .. 01>01 <FF <FF <00  CMDRes: 00 
<FF <FF <?<\r>
<\n><\r>
<\n>CPM on an AVR, v2.1<\r>
<\n>Testing RAM: fill...wait...

...

Von 256k war in den letzten Wochen nicht die Rede. Oder hab ich was 
überlesen? Die hier verwendeten Dateien sind die, die Peter auf seiner 
Seite veröffentlicht hat.

Gruß, Andre

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

@Andre
Die 256K großen Images findest du hier:
http://www.mikrocontroller.net/articles/AVR_CP/M

Welche Hardware verwendest du?

Wird deine MMc richtig initialisiert?
Schau mal bitte nach dem ersten Teil deiner Initialisierung.

CPM on an AVR, v2.1
Testing RAM: fill...wait...reread...
Initing mmc...

mmcInit SPI_CLK_SLOW <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF
mmcCMD: 00 00000000 <FF <FF <FF >40 .. 95>95 <FF <01  CMDRes: 01
mmcCMD: 08 000001AA <FF <FF <FF >48 .. 87>87 <FF <05  CMDRes: 05

Es sieht so aus, ob etwas von der Karte gelesen wird, aber falsche 
Daten. Nun kann das Image fehlerhaft sein oder die gelesenen 
Kartendaten.
Wenn du INS_DEBUG = 1 setzt, kannst du die Codes und Befehle mitlesen 
die ausgeführt werden. PRINT_PC = 1 zeigt dir zusätzlich den 
Programcounter (hilfreich bei Sprüngen) an. In der derzeitigen 
8080int-jmp.asm Lib stehen noch zwei Relativsprünge, entweder durch 
"Call" ersetzen oder die neue Lib (siehe Anhang) benutzen.

Der prinzipielle Bootvorgang sollte so aussehen:
ipl.asm wird ausgeführt (läd das CP/M in den Speicher)
Die ersten bBefehle sind:
org $2000
ld sp,$1000
ld hl,"ipl"
call prmsg

Das bedeutet, PC steht auf 2000 und führt den ersten Befehl LD SP, $2000 
aus. (31 00 20). Dann kommt der Befehl LD HL, "IPL" usw. Der Debugmodus 
sollte also folgendes anzeigen.

Partinit done.
Ok, CPU is live!

PC=2000
  C  A =00 BC =0000 DE =0000 HL =0000 SP =E737 PC =2000       31 00 20
PC=2003
  C  A =00 BC =0000 DE =0000 HL =0000 SP =2000 PC =2003       21 37 20
PC=2006
  C  A =00 BC =0000 DE =0000 HL =2037 SP =2000 PC =2006       CD 2E 20
PC=202E
  C  A =00 BC =0000 DE =0000 HL =2037 SP =1FFE PC =202E       7E B7 C8

Viel Erfolg!
Joe

von Peter Sieg (Gast)


Lesenswert?

do9brx schrieb:
> Von 256k war in den letzten Wochen nicht die Rede. Oder hab ich was
> überlesen?

Die Images dürfen nicht kleiner sein als 256k soweit ich das 
verstanden habe. Daher fülle ich die bei der Erzeugung mit Nullen auf. 
Inzwischen werden aber dank Leo C. auch weitere Formate unterstützt. 
(z.B 8MB Images).
Nur wenn man eine solches 8MB Image auch als Bootimage verwenden möchte,
muss man die aller neueste Firmware flashen!

Peter

von do9brx (Gast)


Lesenswert?

HW ist die aktuelle Platine von Peter, gelötet nach bestem Wissen und 
Gewissen und auch wirklich ALLES nochmal nachgeprüft bis auf die Rams, 
denen ich halt blind vertrauen muss.

Na gut, hab jetzt mal darauf geachtet, die 256er Beispiel-Files zu 
nehmen, nochmal mit den Debug Schaltern compiliert (ich hoffe die 
Quellen vom 11.4. sind die aktuellen), die Karte wird auch nach obigem 
Beispiel korrekt initialisiert, am Schluss "mitten im Satz" wieder 
Neustart:

CPM on an AVR, v2.1<\r>
<\n>Testing RAM: fill...wait...reread...<\r>
<\n>Initing mmc...<\r>
<\n><\r>
<\n>mmcInit SPI_CLK_SLOW <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <\r>
<\n>mmcCMD: 00 00000000 <FF <FF <FF >40 .. 95>95 <FF <01  CMDRes: 01 
<\r>
<\n>mmcCMD: 08 000001AA <FF <FF <FF >48 .. 87>87 <FF <05  CMDRes: 05 
<\r>
<\n>mmcCMD: 37 00000000 <FF <FF <FF >77 .. 01>01 <FF <01  CMDRes: 01 
mmcCMD: 29 00000000 <FF <FF <FF >69 .. 01>01 <FF <01  CMDRes: 01 <\r>
<\n>mmcCMD: 37 00000000 <FF <FF <FF >77 .. 01>01 <FF <01  CMDRes: 01 
mmcCMD: 29 00000000 <FF <FF <FF >69 .. 01>01 <FF <01  CMDRes: 01

....usw....

A:FAT16 File-Image at: 511, size: 256KB.<\r>
<\n>B:FAT16 File-Image at: 255, size: 256KB.<\r>
<\n>C:FAT16 File-Image at: 383, size: 256KB.<\r>
<\n>Partinit done.<\r>
<\n>mmcRdSect SPI_CLK_FAST <\r>
<\n>mmcCMD: 11 00148600 <FF <FF <FF >51 .. 01>01 <FF <FF <00  CMDRes: 00 
<FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF <FF 
<FF <FE <31 <23 <FF SPI_DISABLE RdSectRes: 00 <\r>
<\n>Ok, CPU is live!<\r>
<\n><\r>
<\n>PC=2000 <\r>
<\n>        A =00 BC =0000 DE =0000 HL =0000 SP =0000 PC =2000       31 
00 20 <\r>
<\n>PC=2003 <\r>
<\n>        A =00 BC =0000 DE =0000 <\0><\r>
<\n><\r>
<\n>CPM on an AVR, v2.1<\r>
<\n>Testing RAM: fill...wait...

von Matze (Gast)


Lesenswert?

Wie ist den die Geschwindigkeit des Emulators ? laueft Turbo Pascal 
drauf ?
Denke drüber nach das ganze auch mal aufzubauen, scheint echt lustig zu 
sein.

Ciao Matze

von Nils E. (yetanotheruser)


Lesenswert?

Geschwindigkeit ist ungefähr 8080 @ 2 MHz.
Turbo-Pascal braucht einen Z80, der derzeit noch nicht unterstützt wird.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

do9brx schrieb:
> <\n>PC=2000 <\r>
> <\n>        A =00 BC =0000 DE =0000 HL =0000 SP =0000 PC =2000       31
> 00 20 <\r>
> <\n>PC=2003 <\r>
> <\n>        A =00 BC =0000 DE =0000 <\0><\r>

Der erste Befehl wird richtig gelesen, jedoch nicht korrekt ausgeführt. 
Der Stackpointer sollte auf $2000 stehen die Ausgaberoutine bricht 
jedoch mittendrin vor der Ausgabe von HL ab. Es gibt eigentlich keinen 
Grund für so einen Abbruch. Die Ausgabe ist absolut linear programmiert 
(utils.asm). Kann eigentlich nur ein Interruptaufruf dazwischen kommen. 
Hast du die aktuellen Quellen (siehe hier)?

http://cloudbase.homelinux.net/viewvc/avr-cpm/avrcpm/trunk/

Ich bin etwas ratlos, hat jemand noch eine Idee?

von Peter Sieg (Gast)


Lesenswert?

Ich hatte bisher 2 Ramdefekte, die sich ähnlich äußerten.. FAT16 Images 
erkannt. IPL bis ok.. dann Register Dump und HALT (Kein Reset!).

Man darf nicht vergessen, das wir das Ganze (zumindest die Rams) 
außerhalb der Spezifikation betreiben.. da könnte das eine oder andere 
Bauteil gerade an der Grenze sein..

Elko an der SD Karte bestückt? Spannung nicht unter 3,3V?

Peter

von andre b. (do9brx)


Lesenswert?

Leider habe ich ausser Deinen keine anderen Rams :-( Hab mein Lager 
komplett durchwühlt aber leider nichts zum Ersatz gefunden.

Die Quellen waren die aktuellen, Elko ist bestückt, Spannung ok.

Werd mir das am Wochenende nochmal genauer ansehen, bis dahin muss ich 
ein paar andere 8-Bit Baustellen abschließen.

Gruß, Andre

von Peter Sieg (Gast)


Lesenswert?

Habe heute mal versucht meinen 4-bit Prototypen (1x 4256 Ram), kein 
Stützkondensator etc. an einem Atari ST als Terminal anzuschließen. 
Dazwischen ein Max3232 3,3V TTL auf RS232 Wandler.

Der Prototyp hatte zuletzt über CP2102 TTL USB Adapter immer einwandfrei 
am PC über USB funktioniert.

Baudrate auf 9600 8N1 geändert um den ST nicht zu überfordern ;-)

---

Auf einmal hatte ich ähnliche Phenomene wie du!? Reset nach Anzeige 
Part. bzw. FAT16 Files und/oder illegal opcode etc. Manchmal auch erst 
nach DIR Anzeige etc. = Instabiles Verhalten

???

Habe daraufhin einen 10uF Stützkondensator eingebaut. Spannung gemessen 
3,7V von einem starken Steckernetzteil.

Keine wirkliche Verbesserung.

Ram getauscht - keine Besserung.

Ram getauscht auf einen Siemens HYB514256B-70 - damit scheint es nun 
stabil zu gehen..??

---

Ich kann da wirklich keine intelligenten Schlüsse raus ziehen ausser:
Der CP2102 schein den AVR CPM nicht zu beeinflussen/beinträchtigen.?
Der MAX3232 Wandler aber irgendwie schon..?

Wohlgemerkt alle Rams die nun Probleme machten liefen mit CP2102 ohne 
jedes Problem!

Peter

von Nils E. (yetanotheruser)


Lesenswert?

Peter Sieg schrieb:
> Habe heute mal versucht meinen 4-bit Prototypen (1x 4256 Ram), kein
> Stützkondensator etc. an einem Atari ST als Terminal anzuschließen.
> [...] Habe daraufhin einen 10uF Stützkondensator eingebaut.

> Ich kann da wirklich keine intelligenten Schlüsse raus ziehen ausser:
> Der CP2102 schein den AVR CPM nicht zu beeinflussen/beinträchtigen.?
> Der MAX3232 Wandler aber irgendwie schon..?

Der MAX3232 verwendet eine Ladungspumpe, um die für die RS-232 
erforderlichen Spannungen zu erzeugen. Das kann auf der 
Versorgungsspannung stören, wenn nicht (die richtigen) 
Stützkondensatoren eingebaut sind.

Die Größe der Stützkondensatoren richtet sich nach der Frequenz der 
Störungen: je kleiner die Frequenz, desto kleiner muss der Kondensator 
sein, damit er schnell genug nachliefern kann. Wenn der 10µF Dein 
einziger Entstörkondensator ist, solltest Du es auf jeden Fall noch mit 
einem 100nF zusätzlich probieren.
Oft werden auch ganze Reihen verwendet, wie z.B. 100nF, 1µF, 100µF.

von Peter Sieg (Gast)


Lesenswert?

100nf sind auch schon drin gewesen.. der ist bei mir immer Standard ;-)
Was auf dem Wandler drauf ist, kann ich nicht entziffern (Fertigmodul) 
sieht aber sehr klein aus, so wie 0,1 - 1uf - 5 Stück davon.

Peter

von Peter Sieg (Gast)


Lesenswert?

Der AX81 von Jörg ist da:

http://www.jcwolfram.de/projekte/avr/ax81/main.php

Peter

von Peter Sieg (Gast)


Lesenswert?


von Peter Sieg (Gast)


Angehängte Dateien:

Lesenswert?

Na, damit sich auch mal wieder was zum Thema AVR CPM tut, hier ein
Diskimage mit Microsoft Multiplan V 1.2.
Entzippen und nach CPMDSK_E.DSK umbenennen. (Anstatt E auch ein anderes 
virtuelles Laufwerk je nach Geschmack).

Vorher 1x Install.com ausführen und bei mir auf VT52 = Nr. 23 
einstellen.

Peter

von Peter S. (petersieg)


Lesenswert?

Für die, die nicht selber zusammen bauen möchten/können, habe ich auch 
noch ein paar wenige, fertig aufgebaute und getestete AVR CP/M USB 
Sticks inkl. passender SD Karte abzugeben. Bei Interesse -> Mail.

Peter

von Peter S. (petersieg)


Angehängte Dateien:

Lesenswert?

Hier ALGOL Compiler (P-Code) und Interpreter.
ALGOLM name.ALG -> Übersetzt nach name.AIN
RUNALG name.AIN führt aus.
2 Beispiele dabei.
Hanoi läuft einwandfrei.
Lunar läuft? Kommt nach Eingabe der Zahl nicht zurück..? unter Altairz80 
ok.

---

Ich glaube, wir habe evtl. noch einen, kleinen Fehler in der 8080 
Emulation..
Mal Multiplan starten in in r1c1 12, in r2c1 24 und in r3c1 =r1c1+r2c1 
eingeben (Summe aus 12+24). Dann r1c1 auf 17 ändern.. ;-)

---

Hier mal wie ich solche Diskimages zusammen stelle.
Altairz80 herunterladen und CPU = 8080 einstellen!. cpm2 laden.
Diskimage z.B von retroarchive herunterladen und testen.
Wenn sie laufen, die Dateien mit w aus dem Image auf Filesystem 
schreiben.
Mit cpmcp dann in ein leeres avrcpm Image kopieren.
Image auf SD Karte kopieren und ausprobieren.

---

Arbeitet eigentlich jemand noch/wieder an der Z80 Unterstützung, jetzt
da ein Z80 Emulator im Source (AX81) verfügbar ist..?

Peter

von Ronny M. (hobby-coder)


Lesenswert?

Peter Sieg schrieb:
> Für die, die nicht selber zusammen bauen möchten/können, habe ich auch
> noch ein paar wenige, fertig aufgebaute und getestete AVR CP/M USB
> Sticks inkl. passender SD Karte abzugeben. Bei Interesse -> Mail.
>
> Peter

gibt es auch noch die variante mit dem vga anschluss (vers. 2...?). was 
kostet ein stick?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ronny Minow schrieb:
> gibt es auch noch die variante mit dem vga anschluss

Nein, alle Bausätze sind raus. Von Stick müßte es noch genug geben, 
einfach Peter fragen.
Ich bin gerade an einer neunen VGA-Variante als VT100 Terminal. Ist aber 
noch ein Brettaufbau.

von Ronny M. (hobby-coder)


Lesenswert?

Joe G. schrieb:
> Ronny Minow schrieb:
>> gibt es auch noch die variante mit dem vga anschluss
>
> Nein, alle Bausätze sind raus. Von Stick müßte es noch genug geben,
> einfach Peter fragen.
> Ich bin gerade an einer neunen VGA-Variante als VT100 Terminal. Ist aber
> noch ein Brettaufbau.

wenn es da auch bausätze geben wird, nehme ich gerne eins

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> Ich bin gerade an einer neunen VGA-Variante als VT100 Terminal.

Hier nun die ersten Ergebnisse. Das VT100 Terminal läuft vollständig 
ohne PC mit der AVR CP/M Platine. Für VGA und PS-2 werden genau zwei 
IC's verwendet (1 x P8X32A und 1 x AT24C512 als Speicher). Läuft alles 
auf 3.3V, somit sind auch keine Pegelwandler notwendig.

von GUEST#1 (Gast)


Lesenswert?


von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier die Schaltung der VGA und Tastaturansteuerung.

von pollmull (Gast)


Lesenswert?

Joe G. schrieb:
> Hier die Schaltung der VGA und Tastaturansteuerung.

Oder hier mit gleichem Chip Terminal gleich noch mit CP/M drin:

http://forums.parallax.com/showthread.php?117996-Dracblade-SBC-with-Catalina-C-PropBasic-CP-M-MP-M-TRS80-wireless-network&highlight=zicog

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

pollmull schrieb:
> Oder hier mit gleichem Chip Terminal gleich noch mit CP/M drin:

Ganz nett, vielelicht baue ich mal das Dracblade in der V5 auf. Die Z80 
Emulation ist darin vollständig enthalten.

von pollmull (Gast)


Lesenswert?

Joe G. schrieb:
> Ganz nett, vielelicht baue ich mal das Dracblade in der V5 auf. Die Z80
> Emulation ist darin vollständig enthalten.
>

Oder einen Hive (hive-project.de), da läuft grad wieder eine 
Sammelbestellung der Boards. Wenn du dich beeilst, kannst du sicher noch 
teilnehmen.

von Peter S. (petersieg)


Lesenswert?


von Peter S. (petersieg)


Lesenswert?

Da nun bald Weihnachten wird, gebe ich einige, restliche Platinen des 
AVR CP/M USB Sticks unter SK ab für 6,50€/Stück. Habe noch 7 Stück da.
Es gibt NUR die Platinen!

Bei Interesse per Mail melden bei: peter (dot) sieg1 (at) gmx.de

Versand per Post für 2€ in D egal wie viele Platinen.

Peter

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier etwas für die Feiertage.
Die Version 4.0 mit VGA auf einer Platine.

Änderungen gegenüber der alten Version:
- VGA mit VT100 Terminal auf einem Propellerchip
- SRAM
- ATMEGA 644
- zwei serielle Schnittstellen
- 8 Bit –E/A
- Stromversorgung über USB

USB1 ist für die Inbetriebnahme und Experimente gedacht. Über diese 
Schnittstelle kann der Propeller geladen werden und die CP/M Ausgaben 
über ein Terminal mitgelesen werden. Werden die Steckbrücken (JP1 und 
JP2) richtig gesteckt, dann ist das CP/M-System direkt mit dem VT100 
Terminal verbunden.
USB2 ist für alle Anwendungen frei. Denkbar ist z.B. ein Bootloader für 
den AVR. Damit muss bei der Softwareentwicklung der AVR nicht jedes Mal 
über die ISP-Schnittstelle geflasht werden.
Der DRAM wurde durch einen handelsüblichen SRAM ersetzt. Damit sind 
jedoch zwei zusätzliche Latch notwendig geworden.
Durch den Wechsel auf den ATMEGA 644 ist nicht nur noch eine weitere 
serielle Schnittstelle dazu gekommen, sondern auch noch ein komplett 
freier 8-Bit Port. Belegt habe ich PA0 bis PA7, damit können die Pins 
auch als 8-fach ADC verwendet werden.
Die Software muß natürlich noch angepasst werden. VGA und VT100 Terminal 
läuft schon.

Schöne Weihnachten!
Joe

von Osche R. (Gast)


Lesenswert?

Hat der Propeller nicht genügend Rechenleistung, um den AVR mit zu 
emulieren?

von Frank P. (mauz)


Lesenswert?

Ich weiß nicht, wurden am Beginn des Projektes nicht alle, die mit SRAM 
kamen, mit den Worten: "Das ist dann ganz was anderes, mach eine eigenes 
Projekt auf!", fortgeschickt? Ich meine der Reiz war ein CP/M auf zwei 
Chips. Das haben wir mit 2xRAM für 8-bit schon aufgeweicht. Noch ein 
Chip sind dann doch etwas über einer großzügig ausgelegten Definition 
von 2 Chips, meiner Meinung. Außerdem frage ich mich ob eine 
zusätzliche, inkompatible HW-Version Softwareentwickler anlocken kann. 
Da müssten dann langsam HW-Abstraktionsschichten eingezogen werden ;-) 
Das bindet doch nur Resourcen, die sowieso nicht da zu sein scheinen. 
Ich hätte lieber Z80 als HW-V4.
Nur meine bescheidene Meinung.
frank

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo Frank,
endlich mal eine Meinung der ich mich anschliessen kann...
Nur leider bin ich nicht der richtige für Software, aber Hardware haben 
wir genug. Ein CPM im Propeller mit VGA etc. gibt es schon und passt 
nicht zum AVR. Ich finde die Kombination die du da gebaut hast, als 
Variante sehr gut. Aber leider lassen die Softwarefreaks hier auf sich 
warten...Z80 ist defenitiv überfällig.
Gruß
Hans-Werner

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Frank&Hans-Werner

Sicher sind eure Argumente nicht ganz vom Tisch zu fegen. Für jedes 
Projekt gibt es Vor- und Nachteile. Der Propeller sollte auch kein CP/M 
emulieren sondern nur als Tastatur und VGA Ausgabe fungieren. Das kann 
er gut - das macht er gut.

Meine Motivation war die Folgende.
- nicht mehr so einfach beschaffbare DRAM’s verhindern einen breiten 
Nutzerkreis
- keine weiteren freien Pins am AVR um sich die Welt nach außen zu 
öffnen
- keine serielle Schnittstelle wenn ein Terminal angeschlossen ist

Nun könnte man auch einen größeren AVR nehmen ohne gleich auf SRAM 
zuwechseln. Aber auch das hätte eine angepasste Softwareversion zu 
Folge. Da die RAM-Ansteuerung schon ausgelagert ist, kann sie auch für 
den statischen RAM angepasst werden.
Es war einfach ein Hardwarevorschlag von mir. Diesem Vorschlag braucht 
keiner zu folgen. Mir hat das Arbeiten daran Freude bereitet – einzig 
das zählt!
Schöne Weihnachten!
Joe

von Frank P. (mauz)


Lesenswert?

Joe G. schrieb:
> Es war einfach ein Hardwarevorschlag von mir. Diesem Vorschlag braucht
> keiner zu folgen.
Das ist schon klar und wir wollen auch nur gepflegt Vor- und Nachteile 
diskutieren.

> Mir hat das Arbeiten daran Freude bereitet – einzig
> das zählt!
Das sei Dir auch gegönnt.
Dir auch schöne Weihnachten!
frank

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Frank P. schrieb:
> Das ist schon klar und wir wollen auch nur gepflegt Vor- und Nachteile
> diskutieren.

Wie wir sehen ist die Resonanz auch sehr gering. CP/M ist halt nicht 
AdroidGalaxis500. Da mein ursprünglicher Hardwarevorschlag auf eine 
vereinfachte Bauteilbeschaffung ausgerichtet war, werde ich diese 
Variante vorerst zurückstellen. Der ATMEGA 644 bekommt nun wieder seine 
beiden üblichen DRAM’s. Die Idee der zwei seriellen Schnittstellen, eine 
für den Bootloader, werde ich beibehalten. So passiert es nicht mehr, 
dass die 5V ISP noch im AVR-Board stecken und die SD-Card nicht gezogen 
ist.
Joe

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Joe G. schrieb:
> Die Idee der zwei seriellen Schnittstellen, eine
> für den Bootloader, werde ich beibehalten.

fboot von Peter Dannegger kann auf jedem Pin lauschen, ob UART oder 
nicht. Genauso geht auch 1-Wire-Betrieb.
So braucht man keinen Controller mit 2 UARTs (war der mit 2en nicht erst 
der 644P?) und für Layout wärs auch sehr einfach, da man nun direkt bei 
zwei leeren Pins eine Serielle Schnittstelle machen kann, ohne ewig 
durch die Gegend zu routen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Nils S. schrieb:
> fboot von Peter Dannegger kann auf jedem Pin lauschen, ob UART oder
> nicht. Genauso geht auch 1-Wire-Betrieb.

Das wären in der aktuellen Variante PC4 zund PC5. Damit würde I2C 
wegfallen. Soll nur CP/M darauf laufen - kein Problem. Aber mal einen 
Schritt weiter gedacht. Über eine zweite serielle Schnittstelle könnte 
man mit Kermit o.ä. auf das CP/M zugreifen. Am 8-Bit Port kann ein LCD 
oder, oder angeschlossen werden.

von Peter Sieg (Gast)


Lesenswert?

@Joe: Ich sehe es (leider) auch so wie einige Vorredner.. Hardware haben 
wir z.Z genug.. ich habe immer noch 5? Platinen des USB Sticks hier.. 
Rams auch..
Auch gefällt mir! die Kombination aus AVR+Propeller nicht.. der Prop. 
kann dann schon alles alleine machen und Z80, CP/M gibts dafür auch 
schon.. (sogar in Streichholzschachtelgröße)

Was das Projekt wirklich voran bringen könnte wäre Z80 Emulation und 
dann die darauf aufbauenden Diskimages mit Turbo Pascal etc. etc.
Die 8080 Emu scheint aber auch noch mind. einen Bug zu haben.. siehe 
Fehler im Multiplan..

Was auch schön wäre, eine altairz80 Emu, der direkt die Diskimages für 
dieses Projekt verarbeiten kann..

Und weitere Diskimages die jetzt schon unter 8080 laufen..

Was ist ansonsten ggf. noch 'niedlich' finden würde wäre ein Stick in 
SMD Bauweise mit Micro-SD Karte.. und Drams's die sich leicht beschaffen 
lassen in SMD.. ist aber nur so ein 'Hirngespinnst'..

Z80 Emu. in ASM gibt ja nun Dank Jörg Wolfram im AX81 Projekt.. Basis 
wäre also ja vorhanden..

Vielleicht sollten wir eine Bounty Prämie ausloben für eine 
funktionierende Z80 Emu für dieses Projekt..?

Euch allen die besten Wünsche für 2012!

Peter

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Peter Sieg schrieb:
> Z80 Emu. in ASM gibt ja nun Dank Jörg Wolfram im AX81 Projekt.. Basis
> wäre also ja vorhanden..

In der Quelle 8080int-jmp.asm ist ja auch schon alles vorbereitet. Es 
müssen (nur) noch die Z80 spezifischen Codes nachgetragen werden. Ich 
habe mal in der To_Tabelle die Befehle mit (Z80) markiert. Dabei viel 
mir auch auf, dass der OpCode D9 falsch interpretiert wurde. Laut 8080 
sollte das RET sein, ausgeführt wurde NOP und im Z80 ist es EXX. Ich 
habe es korrigiert (siehe Anhang).

Joe

von Peter Sieg (Gast)


Lesenswert?

Prima! Danke für die Korrektur!
Hast du mal probiert, ob der ominöse Multiplanfehler nun weg ist..?

Gruß Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Hast du mal probiert, ob der ominöse Multiplanfehler nun weg ist..?
Nein noch nicht.

@alle
Schraubt schon jemand an der Z80 Umsetzung? Wenn ja, bitte kurz melden 
damit wir nicht doppelt schrauben ;-)

Joe

von Peter S. (petersieg)


Lesenswert?

Der Fehler im Multiplan ist immer noch..

Einfach mal in Zelle r2c2 23 und in r3c2 4 und in r4c2 r2c2+r3c2 
eintragen.
Ergibt ersteinmal richtig 27. Dann r3c2 von 4 auf 9 ändern .. :-(

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Der Fehler im Multiplan ist immer noch..

Bist dur dir sicher, dass Multiplan unter dem 8080 läuft? Möglicherweise 
ist die unterschiedliche Parity-Flag Behandlung die Ursache. Setze doch 
mal EM_Z80 auf 1, dann werden die Z80 Flags ausgeführt. Ich habe erst 
mal alle Z80 JR nn Befehle eingebaut. Im nächsten Jahr mehr...

Allen einen schönen Jahreswechsel mit viel Elan für neue und alte 
Projekte!

Gruß Joe

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> In der Quelle 8080int-jmp.asm ist ja auch schon alles vorbereitet. Es
> müssen (nur) noch die Z80 spezifischen Codes nachgetragen werden.

Dieses "nur" kann aber recht aufwendig werden, insbesondere bei den 
Indexregister-Befehlen (DD/FD-Prefixe). Ich wünsche Dir und uns viel 
Erfolg. Kennst Du diese Seite hier?
http://z80.info/decoding.htm
Da könnten ein paar nützliche Hinweise drin sein.

> habe mal in der To_Tabelle die Befehle mit (Z80) markiert. Dabei viel
> mir auch auf, dass der OpCode D9 falsch interpretiert wurde. Laut 8080
> sollte das RET sein, ausgeführt wurde NOP und im Z80 ist es EXX. Ich
> habe es korrigiert (siehe Anhang).

Dir Korrektur ist richtig (Danke), aber die Beschreibung nicht ganz. D9 
ist bei 8080 ein undefinierter Opcode (RET ist C9). Meines Wissens hat 
der 8080 im Gegensatz zu den meisten anderen Prozessoren auch keine 
nennenswerten undokomentierten Befehle an solchen Stellen. Der Fehler 
dürfte sich daher in keinem Programm bemerkbar machen.


Joe G. schrieb:
> Bist dur dir sicher, dass Multiplan unter dem 8080 läuft?

Ganz sicher. Damit habe ich Mitte der 80er die Telefonabrechnung für 
unser Stockwerk im Studentenwohnheim gemacht (10 Apartments und ein 
Telefon mit Einheitenzähler auf dem Flur).

Nächstes Jahr werde ich mir den Fehler mal anschauen.

> Möglicherweise
> ist die unterschiedliche Parity-Flag Behandlung die Ursache. Setze doch
> mal EM_Z80 auf 1, dann werden die Z80 Flags ausgeführt.

Ich kann mir nicht vorstellen, daß es ein Programm gibt, daß mit dem 
8080-Befehlssatz auskommt, die Flags aber wie beim Z80 interpretiert.

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Was das Projekt wirklich voran bringen könnte wäre Z80 Emulation und
> dann die darauf aufbauenden Diskimages mit Turbo Pascal etc. etc.

Turbo Pascal wäre sicher nett, aber wichtiger finde ich, das das 
bestehende Minimalsystem zu verbessern, so das es richtig rund läuft.
Dazu stehen auf meiner ToDo-Liste noch:

- Notwendige und nützliche Tools auf PC als Paket zusammenstellen 
("Entwicklungsumgebung") und insbesondere dokumentieren. Möglichst 
einheitlich für Linux und Windows.

- SD-Kartentreiber verbessern.

- Break erkennen.

Mit dem ersten Punkt hatte ich vor einigen Monaten schon mal 
angefangen...

> Was auch schön wäre, eine altairz80 Emu, der direkt die Diskimages für
> dieses Projekt verarbeiten kann..

Zu altairz80 habe ich da
Beitrag "Re: CP/M auf ATmega88"
schon was geschrieben.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Kennst Du diese Seite hier?

Die und die anderen Links auf der Seite sind eine Goldgrube!

Leo C. schrieb:
> bei 8080 ein undefinierter Opcode

Stimmt, ich hatte diese Quelle genutzt und das "Sternchen" vor RET 
übersehen.
http://www.pastraiser.com/cpu/i8080/i8080_opcodes.html

Leo C. schrieb:
> Dieses "nur" kann aber recht aufwendig werden, insbesondere bei den
> Indexregister-Befehlen

Vielleicht hilft ja noch einer ;-)

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> http://www.pastraiser.com/cpu/i8080/i8080_opcodes.html

Gute Tabelle. Die *-Befehle dürften durch unvollständige Decodierung 
zusatande kommen.

(Z80-Emu)
> Vielleicht hilft ja noch einer ;-)

Bestimmt, schließlich rufen hier so viele nach Z80-Unterstützung. ;-)
Ich gehöre vorläufig nicht dazu, weil meine Freizeit bis auf Weiteres 
fast vollständig in dieses Projekt geht:
http://openpetition.de/petition/online/stuttgarter-erklaerung-zur-fortfuehrung-des-widerstandes-gegen-stuttgart-21
(Übrigens kann uns jeder dort durch Unterzeichnung unterstützen, aber 
weil das hier Offtopic ist, Rückfragen bitte nur per PM)

Allen einen Guten Rutsch
Leo

von Markus G. (thechief)


Lesenswert?

Hallo Retro-Freak Kollegen, :-)

wünsche allen hier gut ins neue Jahr 2012 gekommen zu sein!

Dies ist mein erster Beitrag in diesem Thread (habe bisher nur 
mitgelesen).
Von Peter habe ich vor ein paar Tagen zwei Platinen erstanden, sind 
gestern auch angekommen, Danke Peter!

Nun muss ich noch die nötigen Bauteile besorgen und das Ganze 
aufbauen...
...und dann gehts erst richtig los! :-)

Ich würde Euch gerne bei diesem spannenden Projekt unterstützen!

Was ich beitragen kann:

Aus dem Bereich Software(-Entwicklung):
- Etwas angestaubte Kenntnisse in 8080/8085 Assembler von früher...
- Kenntnisse auch in anderen Assembler Dialekten (6502/68000er) wer weiß 
wofür es mal gut ist... :-)
- Kenntnisse in C / C++
- Allgemeine Kenntnisse im Bereich Softwareentwicklung (z.B. diverse 
IDE's, etc.)

Aus dem Bereich Hardware:
- Allgemeine Elektronik-Kenntnisse (bin ausgebildeter 
Kommunikationselektroniker)
- Kenntnisse im Bereich Mikroprozessor-/Mikrocontroller-Technik
- Messtechnik im eigenen Elektronik-Labor: 2 x Oszilloskop (analog u. 
digital), 34 Kanal-Logikanalyser, STK500 Entwicklungsboard, etc.

Ich möchte zu meinem Einstieg auch gleich einen Vorschlag machen:

Mir ist beim Lesen aller (ja es sind über 1000!) Beiträge aufgefallen, 
dass es viele wertvolle Hinweise / Links in diesem Threat gibt, welche 
aber nur teilweise in der Projektseite: 
http://www.mikrocontroller.net/articles/AVR_CP/M aufgeführt sind!

Zum Beispiel aktuell dieser: http://z80.info/decoding.htm

Ich würde als erstes die Links alle heraussuchen und auf der 
Projektseite im Breich "Siehe auch" einfügen.

Des weiteren würde ich vorschlagen, auf der Projektseite auch einen 
Punkt "ToDo" einzuführen um dort anstehende Themen wie z.B.: Erweiterung 
um Z80 Emulation aufzuführen evtl. mit Hinweis wer an welchem Punkt 
bereits arbeitet!

Was haltet Ihr davon?


Viele Grüße

Markus

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Markus

Willkommen bei den Retroinfizierten!
Wie du schon mitbekommen hast, lebt so ein Projekt vom Enthusiasmus der 
Beteiligten. Somit ist jede Mitarbeit willkommen. Sei es bei der 
Dokumentation der Hardware oder der Software. Dein Vorschlag, die 
Projektseite zu aktualisieren ist gut. Eine Linksammlung fehlte 
tatsächlich noch darauf. Auch eine ToDo-Sammlung ist eine gutes 
demokratisches Mittel „wirkliche“ Bedürfnisse zu erfassen sowie den 
aktuellen Stand zu dokumentieren.
Darf ich dir gleich einen konkreten Vorschlag unterbreiten? Da eine 
Aufbaudokumentation noch fehlt, ist es aus meiner Sicht ganz nützlich so 
was in Angriff zu nehmen. Wenn du bei deinem Aufbau die Aufbauschritte 
und auch die dabei auftretenden Hürden dokumentierst hätten wir gleich 
einen Anfang. Also einfach kurz alles notieren was bei der Hard- und 
Software schief gehen kann.
Gruß Joe

von Peter Sieg (Gast)


Lesenswert?

@Markus: Willkommen!

Prima! Noch einen Mitstreiter!

Peter

von Markus G. (thechief)


Lesenswert?

Hallo Joe,
hallo Peter,

Danke für die herzliche Begrüßung!

Die Schlacht hat bereits gegonnen :-), seht hier:

http://www.mikrocontroller.net/articles/AVR_CP/M#Siehe_auch

Als nächstes werde ich dort noch jede Menge weitere Links einfügen, 
welche ich aus diesem Threat extrahiert habe!

Dann folgt der Todo Abschnitt, da dürft Ihr Euch dann verausgaben... ;-)

Und wenn ich, voraussichtlich nächste Woche, alle Bauteile zusammen 
habe, baue ich einen CP/M Stick auf und notiere mir dabei was mir dabei 
auffällt (wie von Joe vorgeschlagen)!


Viele Grüße

Markus

von Markus G. (thechief)


Lesenswert?

Hallo zusammen,

so, ich habe meine Drohung, die Linksammlung zu vervollständigen und 
eine ToDo-Liste einzufügen, nun war gemacht! :-)

Das Ergebnis seht Ihr hier:

http://www.mikrocontroller.net/articles/AVR_CP/M#ToDo_Liste

Sollte etwas fehlen, nicht gefallen, etc. bitte einfach (selbst) 
editieren!


Viele Grüße

Markus

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Markus G. schrieb:
> Die Schlacht hat bereits gegonnen :-), seht hier:

Dank Markus und dem Verweis auf das Total Commander Plugin für CP/M habe 
ich das AVR CP/M Format in die diskdefs des TC eingetragen. Nun kann man 
mit dem TC unter Windows wunderbar unsere Images bearbeiten!

von Peter Sieg (Gast)


Lesenswert?

Braucht der nicht trotzdem die cpmtools im Hintergrund..?
Schön wäre 1 Installer/ZIP zum entpacken, wo alles gleich fertig drin 
ist..

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Braucht der nicht trotzdem die cpmtools im Hintergrund..?
> Schön wäre 1 Installer/ZIP zum entpacken, wo alles gleich fertig drin
> ist..

Man benötigt nur das cpmwfx Plugin für TC und die diskdefs (siehe oben).
Dann wird das Immage gemappt und kann bearbeitet werden. Das geht sogar 
schneller und einfacher als bei ZIP. Ein Installer wird somit 
überflüssig da sich das Immage wie ein Unterverzeichnis in Win verhält. 
Probier es mal, du wirst begeistert sein.

von Peter S. (petersieg)


Lesenswert?

Arg?!"§§$$%

1. Also TC (Shareware) installiert.
2. cpm wfx plugin von hier geladen als zip: 
http://hc-ddr.hucki.net/wiki/doku.php/cpm:disketten_xp2
3. TC gestartet und Zip aus 2 geöffnet. Findet plugin und frag ob es 
inst. werden soll. Ja.
4. diskdefs in TC install Pfad\plugins\wfx\cpmimg kopiert und vorhandene 
überschrieben.
5. TC neu gestartet. Doppelklick auf CPMDSK_A.IMG --.. kann nicht 
geöffnet werden..

Super tolle Anleitung und super tolles selbsterklärendes Tool!
Außerdem sind im cpmimg Verzeichnis doch wieder cpmls, cpmcp, cpmrm.exe 
etc. drin..

Peter

von Peter S. (petersieg)


Lesenswert?

EDIT:
6. Anleitung unter 2 weiter lesen... !!
7. CPM Image datei mit F5 Kopieren an cpmwfx 'senden'..
8. Datei im rechten Fenster dann markieren mit der Maus und im Menu 
unter Dateien-Eigenschaften unten im Format-Eingabefenster 'avrcpm' 
eingeben..

Hurra!

ok, wer es braucht.. Ich denke man könnte avrcpm noch als Default Format 
einstellen..? Spart zumindest Schritt 8.

Ich bleibe dann doch lieber bei den CMD Tools.. denn für ein erzeugen 
eines CP/M Diskimage braucht man das trotzdem..

Peter

von Markus G. (thechief)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe eine Anmerkung zum Thema SD-Kartenleser (SCDA...) - 
Platinenlayout des CP/M-Stick:

GPS'ler schrieb:
> Hallo @Joe,
>
> vorneweg, ich habe noch nie eine Leiterplatte mit Eagle entworfen und
> dadurch keinerlei Erfahrung in dieser Richtung!
>
> ....aber kann es sein, dass die SD-Karte Spiegelverkehrt ist und würde
> nur passen, wenn das auf der Unterseite wäre. Ich habe mehrere
> SD-Kartenhalter und wollte testen ob diese in etwa passen. Aber leider
> nein. Dabei ist mir aufgefallen,dass die SCDA... falsch angeschlossen
> sein müßte.Im Manual von denen steht "Viewed from the mounting face
> side". Ich habe dein Layout ausgedruckt und ne SD Karte draufgelegt. CS
> ist der  erste  bzw. 2. Pin nach der Abschrägung....
>
> Eventuell liege ich voll daneben.....deshalb prüfen....
>
> MfG
> Achim
>
> Ps: Eventuell kannst du die Pads nach recht verlängern (Falls das bei
> euererKarte nicht stört) , dann würde es auch für meine passen...
> Anbei die LIB

Ich habe heute das oben von GPS'ler (Achim) angesprochene Problem mit 
dem vermeintlich spiegelverkehrten Layout des SD-Kartenhalters selbst 
nachvollzogen:

Ich habe mir für den Aufbau des CP/M-Sticks über ebay folgende 
SD-Kartenhalter gekauft:

http://www.ebay.de/itm/15x-ALPS-SCDA-SD-MEMORY-CARD-READER-BUCHSE-/290644435363?pt=Kartenleseger%C3%A4te&hash=item43abc221a3

Dabei habe ich folgendes festgestellt:

1. Der Pinabstand passt nicht genau zum Layout.
2. Dieser Kartenhalter ist NICHT für "Reverse mount" sondern für 
"Standard mount" gedacht (s. Anhang scda.pdf).
3. Er ist also für unser Projekt NICHT geeignet!!!
4. Für einen korrekten Aufbau ist zwingend der SD-Kartenhalter vom Typ: 
ALPS (Hersteller) SCDA5A0201 erforderlich!

Ob es baugleiche SD-Kartenhalter von anderen Herstellern gibt ist mir 
nicht bekannt!

Und nun die Master-Frage: Hat jemand von Euch noch einen, besser wären 
zwei, SD-Kartenhalter des richtigen Typs zum Verkauf für mich?


Gruß

Markus

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Markus G. schrieb:
> Für einen korrekten Aufbau ist zwingend der SD-Kartenhalter vom Typ:
> ALPS (Hersteller) SCDA5A0201 erforderlich!

Ich habe sie immer hier bezogen:
http://www.csd-electronics.de/
Best.Nr.: 020115
Stückpreis: 2,95€

Peter Sieg schrieb:
> Ich denke man könnte avrcpm noch als Default Format
> einstellen..? Spart zumindest Schritt 8.

getan (siehe Anhang)

Peter Sieg schrieb:
> Ich bleibe dann doch lieber bei den CMD Tools.. denn für ein erzeugen
> eines CP/M Diskimage braucht man das trotzdem..

Du brauchst doch nur einmal ein leeres Image erstellen. Dann kopierst du 
mit TC alle Dinge die du benötigst in das Imageverzeichnis. Das 
komplette Image wird automatisch angepasst.

von Peter S. (petersieg)


Lesenswert?

@Markus: Bezugsquelle SD Slot wurde ja schon genannt. Der SCDA6A.. 
sollte auch passen (ALPS). Ansonsten ging es 2009 darum einen günstigen 
SD Slot mit GUTER Qualität UND Eagle LBR zu finden.. das war das 
Ergebnis..

Peter

von Markus G. (thechief)


Lesenswert?

@Joe:
Danke für die Bezugsquelle, dort werde ich nun auch Kunde! :-)

@Peter:
Danke für die Alternative und Hintergrundinfos!


Gruß

Markus

von Joerg W. (joergwolfram)


Lesenswert?

Da ich mich mit CP/M bis her nur sehr oberflächlich befasst habe,
kann man eigentlich auch mit 64 Zeichen/Zeiile "sinnvolle" Dinge damit 
anstellen oder müssen es unbedingt 80 Zeichen sein?

Gruß Jörg

von Nils E. (yetanotheruser)


Lesenswert?

80x24 sollte das Terminal wenigstens bieten, ansonsten sind die 
Möglichkeiten schon arg eingeschränkt.

von Markus G. (thechief)


Lesenswert?

Hallo zusammen,

so nun ist es soweit:

Auch ich besitze nun einen funktionierenden AVR CP/M-Stick! Juhu

Da ich zwischenzeitlich auch einige Tests mit diversen DRAM-Bausteinen 
und ein paar SD-Karten durchgeführt habe, habe ich dies nun auch auf der 
Projektseite im Abschnitt Hardware im Anschluss an die Hardwarevariante 
3 dokumentiert:

http://www.mikrocontroller.net/wikisoftware/index.php?title=AVR_CP/M&section=2#Hardware

An dieser Stelle auch gleich die Bitte, diesen Abschnitt, um die von 
Euch erfolgreich eingesetzten DRAM's und SD-Karten, zu erweitern!


Viele Grüße

Markus

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Markus G. schrieb:
> Auch ich besitze nun einen funktionierenden AVR CP/M-Stick!

Herzlichen Glückwunsch!

von Markus G. (thechief)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> Markus G. schrieb:
>> Auch ich besitze nun einen funktionierenden AVR CP/M-Stick!
>
> Herzlichen Glückwunsch!

Hallo Joe,

Danke für den Glückwunsch! :-)

Bis zur endgültigen Funktion hatte ich aber auch ein paar spannende 
Begegnungen der Dritten Art, welche ich hier kurz aufzeigen möchte damit 
andere Retro-Fans nicht in die gleichen Fallen tappen:

1. Ich hatte mich anfangs von der 4bit DRAM Architektur (256k x 4Bit) 
irritieren lassen und in der Datei: config.inc
1
#define DRAM_8BIT 0

eingetragen, was zu Zeichensalat auf dem Terminal führte!
Korrekt ist:
1
#define DRAM_8BIT 1   /* 1 = 8bit wide DRAM */


2. Ich habe es geschafft mir genau zwei defekte DRAM's aus meinem Fundus 
auszusuchen und den AVR CP/M-Stick damit zu bestücken! (Murphys Gesetz 
Teil 1) :-(

Das wäre an sich noch gar kein so großes Problem gewesen, wenn nicht 
auch noch die vorhandene Speichertest-Routine aktiviert durch:
1
.equ MEMTEST = 1
 in der Datei: config.inc im Fehlerfall einfach weiterlaufen würde!!! 
(Murphys Gesetz Teil 2) :-(

Dies kann dann z.B. so aussehen:

CPM on an AVR, v2.1
Testing RAM: fill...wait...reread...
FE<FF@FFFE
Initing mmc...
A:FAT16 File-Image at: 026, size: 256KB.
B:FAT16 File-Image at: 010, size: 256KB.
C:FAT16 File-Image at: 018, size: 256KB.
Partinit done.
Ok, CPU is live!
ipl
62k cp/m vers 2.2

PC=202B
 Z P    A =80 BC =0034 DE =0080 HL =F580 SP =2000 PC =202B       C3 00 
F2

Wie weit die Einschaltmeldungen noch ausgegeben werden, ist unter 
anderem auch davon abhängig ob und welche Debug Ausgaben aktiviert sind!

Ergo: Defekte DRAM's führen zu blöden, bösen und ggf. schwer zu 
findenden Fehlern!!!

Aber nun zum angenehmen Teil, der Lösung:

Nachdem ich mich dann irgendwann dazu entschieden hatte ein neues Paar 
DRAM's einzusetzen sah es gleich viel besser aus!

Und um das Ganze nicht vielleicht noch einmal erleben zu müssen habe ich 
mich anschließend entschlossen die Speichertest-Routine etwas zu 
modifizieren.
Die von mir überarbeitete Testroutine hält beim ersten Speicher-Fehler 
das System an und fordert zum Tausch des/der DRAM-Chips auf!
Diese Routine kann über die Anweisung:
1
.equ MEMTEST = 2
 (oder höher) in der Datei: config.inc aktiviert werden!

Das Ganze sieht dann im Fehlerfall z.B. so aus:

CPM on an AVR, v2.1
Testing RAM: fill...wait...reread...
RAM test failure:
00<01@0100
System halted, replace RAM chip(s)!


Die geänderte Assembler Quellcode-Datei habe ich diesem Beitrag 
angehangen.
Um die geänderte Speichertest-Routine zu verwenden sind also nur zwei 
kleine Schritte nötig:

1. Austausch der vorhandenen Datei init.asm im Projektverzeichnis durch 
die im Anhang befindliche Datei init.asm.
2. Aktivieren der neuen Routine durch die Anweisung:
1
.equ MEMTEST = 2
 (oder höher) in der Datei: config.inc

Auch die alte Speichertest-Routine kann weiterhin verwendet werden, 
hierzu ist wie bisher die Anweisung:
1
.equ MEMTEST = 1
 in der Datei: config.inc zu setzen!


Viele Grüße

Markus

von Leo C. (rapid)


Lesenswert?

Markus G. schrieb:
> Die geänderte Assembler Quellcode-Datei habe ich diesem Beitrag
> angehangen.

Danke.
Verbesserungen und Korrekturen (insbesondere) mit Patch sind sehr sehr 
gern gesehen.

Wenn niemand was dagegen hat, werde ich die Änderung übernehmen.

von Peter Sieg (Gast)


Lesenswert?

Wer sollte was dagegen haben.. ;-)

Gruß Peter

von Markus G. (thechief)


Lesenswert?

Peter Sieg schrieb:
> Wer sollte was dagegen haben.. ;-)
>
> Gruß Peter

Ich bestimmt nicht!
Und dann war der Fehler und das Debugging wenigstens lohnenswert... :-)


Viele Grüße

Markus

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Markus G. schrieb:
> Die geänderte Assembler Quellcode-Datei habe ich diesem Beitrag
> angehangen.

Super,läuft!

Wenn du Lust hast auch am Z80 Code zu arbeiten....

Die "JR Dinge" habe ich schon eingepflegt, sind aber noch nicht 
vollständig getestet. CB, ED und FD sind noch offen (viel Fleißarbeit).

Gruß Joe

von Markus G. (thechief)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> Markus G. schrieb:
>> Die geänderte Assembler Quellcode-Datei habe ich diesem Beitrag
>> angehangen.
>
> Super,läuft!
>
> Wenn du Lust hast auch am Z80 Code zu arbeiten....
>
> Die "JR Dinge" habe ich schon eingepflegt, sind aber noch nicht
> vollständig getestet. CB, ED und FD sind noch offen (viel Fleißarbeit).
>
> Gruß Joe

Hallo Joe,

Danke, freut mich! :-)

Ja, ich habe Lust auch bei der Z80 Emulation zu unterstützen.
Ich habe mir schon mal das z80int.asm Modul angesehen, kann es aber noch 
nicht komplett überblicken.
Mir sind dabei vermeintlich ein paar Z80 spezifische Dinge aufgefallen 
welche ich hier kurz aufzeigen möchte:

1. Wir müssen folgende Opcodes noch implementieren / testen:
1
.dw (FETCH_NOP  | OP_INV  | STORE_NOP)   ; 08         EX AF,AF'  (Z80)
2
.dw (FETCH_NOP  | OP_INV  | STORE_NOP)   ; 10 oo      DJNZ o    (Z80)
3
.dw (FETCH_NOP  | OP_INV  | STORE_NOP)   ; 18 oo  JR o    (Z80)
4
.dw (FETCH_NOP  | OP_INV  | STORE_NOP)   ; 20 oo  JR NZ,o    (Z80)
5
.dw (FETCH_NOP  | OP_INV  | STORE_NOP)   ; 28 oo  JR Z,o    (Z80)
6
.dw (FETCH_NOP  | OP_INV  | STORE_NOP)   ; 30 oo  JR NC,o    (Z80)
7
.dw (FETCH_NOP  | OP_INV  | STORE_NOP)   ; 38 oo  JR C,o    (Z80)
8
.dw (FETCH_NOP  | OP_INV  | STORE_NOP)   ; CB     (Z80 specific)
9
.dw (FETCH_NOP  | OP_INV  | STORE_NOP)   ; D9    EXX    (Z80)
10
.dw (FETCH_NOP  | OP_INV  | STORE_NOP)   ; DD     (Z80)
11
.dw (FETCH_NOP  | OP_INV  | STORE_NOP)   ; ED    (Z80 specific)
12
.dw (FETCH_NOP  | OP_INV  | STORE_NOP)   ; FD     (Z80 specific)

Dahinter verbergen sich 456(!) einzelne Opcodes, soviel zum Thema 
Fleißarbeit... :-)


2. Unter den Z80 spezifischen Opcodes gibt es auch einige welche 4 Bytes 
lang sind.
Diese befinden sich alle in den Bereichen der DD, ED und FD Opcodes!
Wie wirkt sich dies auf die Opcode-Decoder-Routinen aus? Grübl

Ich habe die von mir angefertigte Tabelle (im xls und ods Format) diesem 
Beitrag angehangen.

Diese Webseite diente mir als Quelle:
http://nemesis.lonestar.org/computers/tandy/software/apps/m4/qd/opcodes.txt


Viele Grüße

Markus

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Markus G. schrieb:
> Ja, ich habe Lust auch bei der Z80 Emulation zu unterstützen.

Der aktuelle Interpreter ist 8080int-jmp.asm
Für die 4 Byte Opcodes habe ich auch noch keinen Plan. Vielleicht fällt 
Leo C. was dazu ein ;-).

Gut ist auch immer ein Blick auf das Projekt von Jörg Wolfram
http://www.jcwolfram.de/projekte/avr/ax81/main.php
Dort hat er schon einen Z80 Interpreter für AVR implementiert. Er kann 
nicht 1:1 übernommen werden aber der Blick auf einzelne Befehle ist 
äußerst hilfreich (Danke Jörg!).

Wenn du mir deine PM senden köntest, dann würde ich dir meinen 
Arbeitsstand von 8080int-jmp.asm zukommen lassen.

Gruß Joe

von Peter Sieg (Gast)


Lesenswert?

Sehr schön, das da (noch/wieder) wer dran arbeitet!

Gruß Peter

von Markus G. (thechief)


Lesenswert?

Joe G. schrieb:
> Markus G. schrieb:
>> Ja, ich habe Lust auch bei der Z80 Emulation zu unterstützen.
>
> Der aktuelle Interpreter ist 8080int-jmp.asm
> Für die 4 Byte Opcodes habe ich auch noch keinen Plan. Vielleicht fällt
> Leo C. was dazu ein ;-).
>
> Gut ist auch immer ein Blick auf das Projekt von Jörg Wolfram
> http://www.jcwolfram.de/projekte/avr/ax81/main.php
> Dort hat er schon einen Z80 Interpreter für AVR implementiert. Er kann
> nicht 1:1 übernommen werden aber der Blick auf einzelne Befehle ist
> äußerst hilfreich (Danke Jörg!).
>
> Wenn du mir deine PM senden köntest, dann würde ich dir meinen
> Arbeitsstand von 8080int-jmp.asm zukommen lassen.
>
> Gruß Joe

Hallo Joe,

okay, dann übernehme ich gerne Deinen Arbeitsstand.
Du hast soeben eine PM von mir bekommen mit meiner privaten 
Emailadresse! :-)

Das Projekt von Jörg ist mir auch bekannt, war auch gerade wieder auf 
der Seite und habe mir die Sourcen der V0.26 gezogen und kurz einen 
Blick in den Z80-Emu geworfen!
Was mir dort auf den ersten Blick gut gefallen hat ist die Unterteilung 
der "Opcode Familien" in einzelne Module (Include Dateien).
Ich finde dies macht das Ganze zumindest etwas übersichtlicher...


Viele Grüße

Markus

von Peter Sieg (Gast)


Lesenswert?

Gerade festgestellt das:
SIEMENS HYB514256B-70
wovon ich noch 9 Stk. habe NICHT laufen!

Kennt jemand noch eine Quelle von 4256 Drams?

Peter

von Markus G. (thechief)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe meine, im Beitrag #2541628 veröffentlichte, 
Speichertest-Routine nun noch einmal verfeinert:

Durch den Eintrag:
1
.equ MEMTEST = 3

(oder höher) in der Datei: config.inc

ist es nun möglich im Falle eines Speicherfehlers auf einem AVR 
CP/M-Stick V3.0 den/die defekten DRAM-Chips (IC5 / IC6) anzeigen zu 
lassen!

Die geänderte Assembler Quellcode-Datei habe ich diesem Beitrag
angehangen.

Um die geänderte Speichertest-Routine zu verwenden sind also nur zwei
kleine Schritte nötig:

1. Austausch der vorhandenen Datei init.asm im Projektverzeichnis durch
die im Anhang befindliche Datei init.asm.

2. Aktivieren der neuen Routine durch die Anweisung:

.equ MEMTEST = 3

 (oder höher) in der Datei: config.inc

Auch die alten Speichertest-Routinen können weiterhin verwendet werden,
hierzu ist wie bisher die Anweisung:

.equ MEMTEST = 1 oder 2

in der Datei: config.inc zu setzen!

Siehe auch folgenden Auszug aus der Datei init.asm:
1
;------------------------------------------------------------------------------------  
2
;  Info about MEMTEST:
3
;  0 = no memtest at all
4
;  1 = memtest shows defects but carrys on
5
;  2 = memtest shows defect and stops on first failure
6
;  3 = memtest shows defect, stops on first failure and
7
;      shows which RAM chip has to be replaced
8
;      on an AVR CP/M-Stick V3.0
9
;------------------------------------------------------------------------------------

Viele Grüße

Markus


PS: @Leo: Du darfst auch die neue Version gerne (wieder) ins SVN 
einchecken!

von Markus G. (thechief)


Lesenswert?

Peter Sieg schrieb:
> Gerade festgestellt das:
> SIEMENS HYB514256B-70
> wovon ich noch 9 Stk. habe NICHT laufen!
>
> Kennt jemand noch eine Quelle von 4256 Drams?
>
> Peter

Hallo Peter,

ich kenne leider auch keine verlässliche Quelle für weitere passende 
DRAM's außer ab und zu ebay. :-(

Nachtrag: Gerade gefunden, könnte evtl. noch eine Quelle sein:
http://www.arcadecomponents.com/memory.html

Versand ist auch nach Deutschland möglich!


Aber was mich in diesem Zusammenhang noch interessieren würde:

Mit welcher uC Taktfrequenz hast Du die SIEMENS HYB514256B-70 DRAM's 
getestet?

Ich hatte ursprünglich drei IC's davon (über ebay gekauft - also ohne 
Gewähr auf Funktion).
Bei meinen Tests mit 20 MHz uC Takt, stellten sich dann 2 von 3 IC's als 
reproduzierbar defekt heraus...

Einer davon läuft aber einwandfrei bei 20 MHz Takt, höhere Frequenzen 
habe ich mangels Quarze bisher nicht getestet!


Gruß

Markus

von Peter Sieg (Gast)


Lesenswert?

Hmm Ja.. sind mit 30MHz getaktet.. ;-)
Das ist dann natürlich grenzwertig und das auch noch bei nur 3,3V..

Gruß Peter

von Leo C. (rapid)


Lesenswert?

Zu den RAMs:
"DRAM_WAITSTATES" in der config.inc hochsetzen wäre vielleicht einen 
Versuch wert.

von Markus G. (thechief)


Lesenswert?

Peter Sieg schrieb:
> Hmm Ja.. sind mit 30MHz getaktet.. ;-)
> Das ist dann natürlich grenzwertig und das auch noch bei nur 3,3V..
>
> Gruß Peter

Hallo Peter,

ja 30 MHz ist schon verdammt viel.
Ich habe soeben auch noch einmal Tests mit meinen zwei vermeintlich 
defekten SIEMENS HYB514256B-70 IC's durchgeführt:

Einmal mit 2 bzw. 3 Waitstates, wie von Leo vorgeschlagen, bei 20 MHz uC 
Takt und dann noch mit 1 bzw. 2 Waitstates bei 8 MHz uC internen Takt.
Aber es hilft alles nichts, diese beiden IC's sind definitiv defekt!

Vielleicht solltest Du Deinen DRAM's auch mal nur 8 MHz uC internen Takt 
gönnen, dann sollte aber wirklich nichts fehlen, ausser sie sind 
wirklich defekt!


Viele Grüße

Markus

von Peter Sieg (Gast)


Lesenswert?

Bei laufen die alle nicht bei 20MHz (SIEMENS HYB514256B-70).

Peter

von Peter Sieg (Gast)


Lesenswert?

@alle: Wie ist denn der Stand bei der Implementierung der Z80 
Unterstützung?
@Leo C.: Konntest du schon mal in das wirre Verhalten von Multiplan 
schnuppern. Irgendwo muss da doch noch in der 8080 Implementierung ein 
Wurm drin sein..?

Ach Ja.. Platinen sind nun alle.. wenn noch wer hier Bedarf hat.. müßte 
ich dann nachbestellen und das müssen immer mind. 10 Stück sein..

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> @Leo C.: Konntest du schon mal in das wirre Verhalten von Multiplan
> schnuppern. Irgendwo muss da doch noch in der 8080 Implementierung ein
> Wurm drin sein..?

Jetzt habe ich es mal mit der Version 1.06 von hier
http://www.schorn.ch/cpm/intro.php
ausprobiert. Da taucht der Fehler auch auf. Da der Fehler im simh mit 
8080-Emulation nicht vorkommt, muß es wohl an unserer CPU-Emulation 
liegen.

Ich tippe auf den DAA-Befehl, da Multiplan wahrscheinlich mit BCD-Zahlen 
rechnet. Vielleicht hat ja zufällig jemand CBASIC von Digital Research 
parat, das auch in obiger Quelle zu finden ist, und das auch mit BCD 
rechnet, und kann meine Vermutung bestätigen.

von Peter Sieg (Gast)


Lesenswert?

@Leo C.: Habe leider nur MS Basic hier..
Evtl. zeigt ja schon ein Vergleich zw. was 8080-DAA machen soll und das 
was in unserer Implementierung passiert etwas auffälliges..

BTW: Das erinnert mich an einen Zeitungsartikel in dem es hieß:
... der letzte Fehler in CP/M wurde auch erst nach 7 Jahren gefunden..

;-)

Haha.. derjenige war ganz sicher Gott oder er hat keine Ahnung von 
Software..

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> @Leo C.: Habe leider nur MS Basic hier..

Deshalb habe ich extra eine Quelle angegeben. ;-)

von Markus G. (thechief)


Lesenswert?

Peter Sieg schrieb:
> @alle: Wie ist denn der Stand bei der Implementierung der Z80
> Unterstützung?
> @Leo C.: Konntest du schon mal in das wirre Verhalten von Multiplan
> schnuppern. Irgendwo muss da doch noch in der 8080 Implementierung ein
> Wurm drin sein..?
>
> Ach Ja.. Platinen sind nun alle.. wenn noch wer hier Bedarf hat.. müßte
> ich dann nachbestellen und das müssen immer mind. 10 Stück sein..
>
> Peter

Hallo zusammen,

ich habe zwischenzeitlich von Joe seinen aktuellen Arbeitsstand der 
Datei: 8080int-jmp.asm für den Z80 Emulator bekommen, Danke Joe!

Bin aber leider noch nicht wirklich dazu gekommen mich dort etwas 
einzuarbeiten. :-(


Viele Grüße

Markus

von Markus G. (thechief)


Lesenswert?

Leo C. schrieb:
> Peter Sieg schrieb:
>> @Leo C.: Konntest du schon mal in das wirre Verhalten von Multiplan
>> schnuppern. Irgendwo muss da doch noch in der 8080 Implementierung ein
>> Wurm drin sein..?
>
> Jetzt habe ich es mal mit der Version 1.06 von hier
> http://www.schorn.ch/cpm/intro.php
> ausprobiert. Da taucht der Fehler auch auf. Da der Fehler im simh mit
> 8080-Emulation nicht vorkommt, muß es wohl an unserer CPU-Emulation
> liegen.
>
> Ich tippe auf den DAA-Befehl, da Multiplan wahrscheinlich mit BCD-Zahlen
> rechnet. Vielleicht hat ja zufällig jemand CBASIC von Digital Research
> parat, das auch in obiger Quelle zu finden ist, und das auch mit BCD
> rechnet, und kann meine Vermutung bestätigen.

Hallo zusammen,

ich nehme mich des "Multiplan Fehlers" an!
@Leo C.: Danke für die Quelle zum CBASIC und den Hinweis auf den DAA 
Befehl, mal sehen was ich herausbekomme.

Diese Bausstelle bringt dann auch gleich mein Verständnis über den 
Prozessablauf des 8080 Befehlsinterpreters voran.
Dies hilft mir anschließend für die Arbeit am Z80 Interpreter...

Alles ein Frage der richtigen Kombination(en)... ;-)


Viele Grüße

Markus

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Markus G. schrieb:
> ich nehme mich des "Multiplan Fehlers" an!

Bin inzwischen einen Schritt weiter:
Bei den Arithmetikbefehlen wird das H-Flag (half carry) nicht gesetzt.

Ich habe auch mal einen Patch angefangen (Anhang), aber z.Zt. habe ich 
nicht mal einen Assembler auf meinem Rechner installiert.
Bis ich testen kann, dauert also etwas.

von Peter Sieg (Gast)


Lesenswert?

@Leo C / Markus: Prima!

Ich kann etwas mehr zu Rams sagen:
SIEMENS HYB514256B-70 gehen bei mir definitiv nicht bei 3,3V, 20MHz und 
3 Waitstates. Mehr als 8 Stück getestet - alle liegen nicht.

Aber:
V53C104P laufen nun bei 3,3V, 20MHz und 3 Waitstates!
Diese liefen damals unter 30/25MHz, 3,3V und 1 Waitstates NICHT.

Peter

von Leo C. (rapid)


Lesenswert?

Meine Entwicklungsumgebung geht wieder.
Der DAA-Code ist total buggy. 2 Fehler habe ich gefunden und dem 
nächsten bin ich auf der Spur. (Wer hat nur so einen Mist programmiert? 
;)

von Markus G. (thechief)


Lesenswert?

Peter Sieg schrieb:
> @Leo C / Markus: Prima!
>
> Ich kann etwas mehr zu Rams sagen:
> SIEMENS HYB514256B-70 gehen bei mir definitiv nicht bei 3,3V, 20MHz und
> 3 Waitstates. Mehr als 8 Stück getestet - alle liegen nicht.
>
> Aber:
> V53C104P laufen nun bei 3,3V, 20MHz und 3 Waitstates!
> Diese liefen damals unter 30/25MHz, 3,3V und 1 Waitstates NICHT.
>
> Peter

Hallo Peter,

Deine RAM's verwirren mich... :-)

Drei Fragen dazu:

1. Was machen denn die SIEMENS HYB514256B-70 bei 8 MHz internem uC Takt?

2. Bleibt jeder RAM-Chip für sich gesehen bei jedem RAM-Test an der 
selben Adresse stehen?
Zum Beispiel:

1. Chip immer an der Adresse 0100 (HEX):
2. Chip immer an der Adresse 0080 (HEX):
3. Chip immer an der Adresse 02CE (HEX):
etc...

Siehe auch meinen Beitrag #2545923.

3. Welche Zugriffszeit haben Deine V53C104P RAM's?


Viele Grüße

Markus

von Peter Sieg (Gast)


Lesenswert?

Hi.

8Mhz habe ich (und will ich) nicht ausprobieren.
Die V53C104P haben -70.

Bei 30MHz habe sie damals nicht funktioniert.

Peter

von Peter Sieg (Gast)


Lesenswert?

Um noch mal ein paar 'Schwesterprojekte' zu zeigen:

Propeller:
http://forums.parallax.com/showthread.php?116893-RamBlade-Prop-SRAM-microSD-addon-to-run-ZiCog-CPM-PropDos-Catalina-etc

PIC32:
http://www.kenseglerdesigns.com/cms/node/8

Das Ramblade in Streichholzschachtelgröße hatte ich schon mal.. dann 
aber verkauft.. habe es mir mal wieder bestellt (40US$+6US$ shipping).

Bei dem PIC32 habe ich mir mal ein Duinomite-Mini von Olimex für 30€ 
bestellt. Das ist wohl z.Z das Stand-Alone Basic drauf.. aber das sollte
sich ja ändern lassen..

Trotzdem ist und bleibt unser 'Baby' die AVR Lösung ;-)

Peter

von Markus G. (thechief)


Lesenswert?

Leo C. schrieb:
> Markus G. schrieb:
>> ich nehme mich des "Multiplan Fehlers" an!
>
> Bin inzwischen einen Schritt weiter:
> Bei den Arithmetikbefehlen wird das H-Flag (half carry) nicht gesetzt.
>
> Ich habe auch mal einen Patch angefangen (Anhang), aber z.Zt. habe ich
> nicht mal einen Assembler auf meinem Rechner installiert.
> Bis ich testen kann, dauert also etwas.

Hallo Leo,

ich sehe Du bist voll in Deinem Element... ;-)
Ich habe mir Deine neue 8080int-jmp.asm geladen, assembliert und damit 
Multiplan 1.06 geteset:

Ich kann Dir sagen, noch ist der Bug da! :-)
Er tritt z.B. bei Additionen mit einem Ergebnis größer gleich 30 auf, 29 
+ 1 = 130 und 29 + 2 = 131 :-)
Es gibt auch nette Subtraktionen: 1 - 8 = -1, 100 - 1 = 109 und 100 - 8 
= 102 :-)

Falls es wieder eine neue Version zum Testen gibt, nur her damit... :-)


Viele Grüße

Markus

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Markus G. schrieb:

> Ich kann Dir sagen, noch ist der Bug da! :-)

Ja, der DAA-Code ist (bzw. war) ein einziger großer Bug. :)

Hast Du auch das hier gelesen?
Beitrag "Re: CP/M auf ATmega88"

> Falls es wieder eine neue Version zum Testen gibt, nur her damit... :-)

Ich mache DAA gerade komplett neu. Im Moment gibts besonders lustige 
Ergebnisse (Anhang). Aber vielleicht wirds heute noch fertig.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

So, für Multiplan reichts jetzt.
Ob die Emulation allerdings ganz korrekt ist, weiß ich nicht.
Außerdem fehlt noch der Fall, wenn das N-Flag gesetzt ist. Das sollte 
aber für alle korrekten 8080-Programme ausreichen.

Im Anhang ist noch ein Multiplan Testprogramm.

Leider habe ich keine Quellen gefunden, die den DAA Befehl vollständig 
beschreiben. Für 8080 findet man noch weniger, als für den Z80.
Auf der Suche habe ich aber noch folgende interessante Dokumente 
gefunden:

http://anyplatform.net/cpus.html
(weiter unten 8080/Z80 Series)

Weitere habe ich schon wieder verloren...

von Draco (Gast)


Lesenswert?

Leo C. schrieb:
> Leider habe ich keine Quellen gefunden, die den DAA Befehl vollständig
> beschreiben.

Schau mal im Buch "Programmierung des Z80" ab Seite 226: 
http://www.wincpc.ch/docs/Programmierung%20des%20Z80.pdf

Ich gehe mal davon aus, dass der Link legal ist, da Rodney Zaks an 
anderer Stelle der Bereitstellung des Buches zugestimmt hat: 
http://www.z80.info/zaks.html

von Leo C. (rapid)


Lesenswert?

Hallo Draco,

danke für den Hinweis. Zaks ist schon eine der besten Referenzen für Z80 
überhaupt, aber leider fehlt auch bei ihm der Zustand des Half-Carry 
nach dem DAA-Befehl. Inzwischen habe ich aber noch ein gutes Dokument 
(wieder-) gefunden:

"The Undocumented Z80 Documented"
http://www.myquest.nl/z80undocumented/
(auch auf http://www.z80.info) zu finden)

von Markus G. (thechief)


Lesenswert?

Leo C. schrieb:
> So, für Multiplan reichts jetzt.
> Ob die Emulation allerdings ganz korrekt ist, weiß ich nicht.
> Außerdem fehlt noch der Fall, wenn das N-Flag gesetzt ist. Das sollte
> aber für alle korrekten 8080-Programme ausreichen.
>
> Im Anhang ist noch ein Multiplan Testprogramm.
>
> Leider habe ich keine Quellen gefunden, die den DAA Befehl vollständig
> beschreiben. Für 8080 findet man noch weniger, als für den Z80.
> Auf der Suche habe ich aber noch folgende interessante Dokumente
> gefunden:
>
> http://anyplatform.net/cpus.html
> (weiter unten 8080/Z80 Series)
>
> Weitere habe ich schon wieder verloren...

Hallo Leo,

super! Danke!

Ich habe noch ein interesantes "Original-Dokument" gefunden.
Über den folgenden Link kann man sich das "Intel 8080 Microcomputer 
System's Users Manual" ansehen:

http://www.scribd.com/doc/19954501/Intel-8080-Manual-1

Auf der Seite 29 von 40 ist der DAA Befehl beschrieben, die betroffenen 
Flags (Fußnote 10) sind auf der Seite 33 von 40 beschrieben:

"If the value of the least significant 4-bits of the accumulator is 
greater than 9 or if the auxiliary carry bit is set, 6 is added to the 
accumulator. If the value of the most significant 4-bits of the 
accumulator is now greater than 9 or if the carry bit is set, 6 is added 
to the most significant 4-bits of the accumulator."


Viele Grüße

Markus

von Bernd B. (mainhattan)


Lesenswert?

Hallo zusammen,

der DAA des 8080 ist einfach, da er nur Additionen korrigiert. Der Wert 
des H-Flags nach der DAA-Operation ergibt sich aus der Oder-Verknüpfung 
des vorherigen Wertes von H und aus der Bedingung Lower Nibble > 9. Also 
H=H or (Akku and 0x0f)>9.
Seien a,b Element aus [0..9], s=a+b. Wenn s>9, dann hat ein Überlauf von 
der Einerstelle auf die Zehnerstelle stattgefunden, also muss H gesetzt 
werden. Jetzt ist es aber so, dass wir nicht 10, sondern 16 als Basis 
für eine Stelle haben (Aufspaltung des Bytes in 2 Nibbles), daher wird 
für s aus [16..18] das H-Flag automatisch gesetzt. Für s aus [10..15] 
gibt es keinen Überlauf im 16er-System, aber im 10er-System, daher muss 
das H-Flag über die Bedingung lower nibble>9 gesetzt werden.
Die gleiche Überlegung trifft auch auf das C-Flag und das Higher Nibble 
zu, aber man muss hier schon den Überlauf aus der Einerstelle mit 
einbeziehen. Das ergibt dann C=C or (Akku>0x99).
Und der Korrekturwert ergibt sich aus den Werten der beiden Flags nach 
den beiden oben genannten Oder-Verknüpfungen:
Wenn H=1, dann wird 0x06 zum Akku addiert.
Wenn C=1, dann wird 0x60 zum Akku addiert.
Und wenn beide Flags gesetzt sind, dann ist der Korrekturwert 0x66.
Entsprechende Überlegungen muss man bei der Korrektur für Subtraktionen 
beim Z80 machen.

von Gee_Tee (Gast)


Lesenswert?

Hallo,

Aus: Z80 Instruction Handbook (Your complete reference to the powerful 
Z80 instruction set) - SCELBI Publications

DECIMAL ADJUST THE ACCUMULATOR

DAA      047oct               27hex

The decimal adjust accumulator instruction is a one byte instruction 
that adjusts the contents of the accumulator to two binary coded-decimal 
digits, one digit in the four least significant bits and one digit in 
the four most significant bits. This instruction is used following the 
addition or subtraction of two pair of BCD digits to adjust the result 
to the proper BCD code. It may also be used following an increment, 
decrement, or negate directive. Following an addition operation, this 
instruction operates in the following manner.
The least significant half of the accumulator is checked for a BCD value 
of zero to nine, and the H flag is checked for a zero condition. If both 
of these conditions exist, this half is left as is.
However, if this half is greater than nine, or the H flag is one, the 
accumulator will be incremented by six, thereby adjusting the least 
significant half to the proper BCD code. The most significant half is 
then checked for a BCD value of zero through nine and the C flag is 
checked for a zero condition. If both conditions are true, the process 
is complete. Otherwise, if either condition is not met, the most 
significant half of the accumulator is incremented by six, with the 
carry flag being set to a one if an overflow from the most significant 
half occurs.

In the case of subtraction, the H and C flags are used to determine if 
the value six must be subtracted from each half of the byte (which 
occurs if the associated flag is set to a logic one state when the DAA 
directive is encountered). The Z, S, and P/V flags are affected by these 
operations (P/V reflects parity status). The N flag is not altered

Viele Grüße

Gerrit

von Peter Sieg (Gast)


Lesenswert?

Super!!
Nun arbeitet MP so wie es soll ;-)

Danke!

Peter

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Vielen Dank für die weiteren Hinweise zum DAA-Befehl.
Wie die Flags gesetzt werden müssen, ist auch in den 8080 Datenbüchern,
die ich auch auf meiner Festplatte gefunden habe, beschrieben.

Im Anhang ist mein aktueller Stand für den Interpreter.
DAA ist nur für den 8080 drin. Ich habe nochmal die Behandlung der Flags 
bei allen relevanten
Befehlen anhand der angehängten Tabelle überprüft, und einige kleine 
Fehler korrigiert.

Insbesondere INC und DEC sind dadurch leider größer und langsamer 
geworden.

Zum Ausgleich habe ich die Opcode-Tabellen nochmal etwas komprimiert. 
Dies brachte
Platzeinsparungen und Geschwindigkeitssteigerungen um unteren 
Promillebereich. Insbesondere der
der NOP-Befehl konnte deutlich beschleunigt werden. :-)

Die anderen Interpretervarianten habe ich teilweise nachgezogen. Es 
stellt sich aber die Frage,  ob diese überhaupt noch von Interesse sind 
(evtl. wg. ROM-Größe). Wenn ja, würde ich aber als nächstes Die Dateien 
umstrukturieren, so daß die Action-Routinen (fetch/op/store)
nur einmal vorhenden sind.

Als Übung, oder für Leute mit Zeit/Langeweile, hätte ich jetzt folgende 
Vorschläge:

1. Testen, testen, testen...

2. Überprüfung, ob die Flags überall richtig behandelt werden.
   (kann natürlich mit 1. verbunden werden (DDT))

3. INC/DEC sehen so aus, als könnten sie verbessert werden.
   Da die Befehle häufig vorkommen, würde sich das lohnen. Auch Peters
   Bench-Schleife ist jetzt langsamer geworden.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Mit welchen SD-Karten gibt es denn noch Probleme?
Vielleicht kann man im Treiber ja noch was verbessern.

Im Anhang ist ein Photo von allen Karten, die bei mir laufen. Auf der 
Micro-SD ist kein Hersteller zu finden. Vielleicht möchte ja jemand die 
Projektseite damit ergänzen. Die Hardware ist bei mir auf Lochraster 
gestrickt (8-Bit RAM).

Karten, die nicht funktionieren, habe ich bei mir keine.

von Markus G. (thechief)


Lesenswert?

Leo C. schrieb:
> Mit welchen SD-Karten gibt es denn noch Probleme?
> Vielleicht kann man im Treiber ja noch was verbessern.
>
> Im Anhang ist ein Photo von allen Karten, die bei mir laufen. Auf der
> Micro-SD ist kein Hersteller zu finden. Vielleicht möchte ja jemand die
> Projektseite damit ergänzen. Die Hardware ist bei mir auf Lochraster
> gestrickt (8-Bit RAM).
>
> Karten, die nicht funktionieren, habe ich bei mir keine.

Hallo Leo,

ich habe die noch fehlenden SD-Karten (mit Hersteller) von Dir auf der 
Projektseite ergänzt.

Welchen Systemtakt hat Dein Lochraster-Aufbau?
Ich frage weil ich auf der Projektseite den Systemtakt (bei mir 20 MHz) 
mit angegeben habe.
Ggf. würde ich dann noch einen eigenen Abschnitt für Deine Karten 
einfügen.


Viele Grüße

Markus

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Falls es noch interessiert und ich habe nicht alles hier gelesen!
"Der Z80 ist beim DAA Befehl inkompatibel zum 8080." Leider ist das 
alles ne lange Zeit her. Es kann daher sein, ich erzähle nicht alles 
ganz richtig. Alles was ich definitiv weiß:
1. Es gab einen Unterschied im Standard-Befehlssatz von 8080, 8085, Z80 
, der auch dokumentiert war.
2. Das wurde ausgenutzt um den Prozessor automatisch zu erkennen.
3. Dieser Unterschied war dort dokumentiert als unwesentlich, weil er in 
normalen Programmen nicht vorkommt.

Vielleicht hilft das euch ja.

Ehemaliger Z80-Bastler -
Abdul

von Joerg W. (joergwolfram)


Lesenswert?

Zum DAA Befehl beim Z80 scheint es auch im Netz widersprüchliche 
Dokumentationen zu geben, insbesondere was das Flag-Handling anbetrifft. 
Gestern musste ich auch feststellen, dass meine Implemntierung beim AX81 
nicht zu 100% korrekt ist. Aufgefallen ist es mir aber erst beim 
Spectrum-ROM als da in den Zahlen plötzlich vereinzelt Sonderzeichen 
aufgetreten sind. Beim ZX81 schein der Fehler dagegen nicht zu stören.

Gruß Jörg

von Leo C. (rapid)


Lesenswert?

Markus G. schrieb:
> Welchen Systemtakt hat Dein Lochraster-Aufbau?
> Ich frage weil ich auf der Projektseite den Systemtakt (bei mir 20 MHz)
> mit angegeben habe.

Auch 20 MHz.

Hier gibts Bilder:
Beitrag "Re: CP/M auf ATmega88"

von Leo C. (rapid)


Lesenswert?

Joerg Wolfram schrieb:
> Zum DAA Befehl beim Z80 scheint es auch im Netz widersprüchliche
> Dokumentationen zu geben, insbesondere was das Flag-Handling anbetrifft.

Vielleicht hilft Dir das hier:
http://anyplatform.net/media/guides/cpus/8080%20&%20Z80%20Processor%20Data.txt

In der Doku fehlt häufig der Zustand des H-Flags nach dem DAA-Befehl.

@Abdul: "Ehemalig" muß ja nicht für immer sein...

von Markus G. (thechief)


Lesenswert?

Leo C. schrieb:
> Markus G. schrieb:
>> Welchen Systemtakt hat Dein Lochraster-Aufbau?
>> Ich frage weil ich auf der Projektseite den Systemtakt (bei mir 20 MHz)
>> mit angegeben habe.
>
> Auch 20 MHz.
>
> Hier gibts Bilder:
> Beitrag "Re: CP/M auf ATmega88"

Hallo Leo,

Danke für die Info!


Gruß

Markus

von Markus G. (thechief)


Lesenswert?

Leo C. schrieb:
> Joerg Wolfram schrieb:
>> Zum DAA Befehl beim Z80 scheint es auch im Netz widersprüchliche
>> Dokumentationen zu geben, insbesondere was das Flag-Handling anbetrifft.
>
> Vielleicht hilft Dir das hier:
> http://anyplatform.net/media/guides/cpus/8080%20&%20Z80%20Processor%20Data.txt
>
> In der Doku fehlt häufig der Zustand des H-Flags nach dem DAA-Befehl.
>
> @Abdul: "Ehemalig" muß ja nicht für immer sein...


Hallo Leo,

Danke für den Link, ich habe ihn gleich in unsere Projektseite mit 
aufgenommen!

@Abdul: "Ehemalig" geht ja gleich gar nicht... ;-)


Gruß

Markus

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Ich habe mir mal ein paar Gedanken zum Z80 Interpreter gemacht, und
angefangen, die Tabellenmakros entsprechend zu erweitern.
Folgendermaßen könnte es klappen:

Für jeden Prefix wird eine neue Tabelle angelegt. Für DD und FD könnte 
man eine gemeinsame Tabelle verwenden, und beim Einstieg ein Flag 
entsprechend setzen.
Wir brauchen dann 4 zusätzliche Tabellen: ED, DD/FD, CB, und CBDD/FD.
Da jede Tabelle 512 Byte belegt, und für die meisten Befehle nochmal 
Zwischensprungtabellen dazu kommen, könnte es für den ATmega168 knapp 
werden.


Für jeden Prefix gibts eine neue OP-Aktion:
1
do_op_prefixED:
2
  mem_read_ds zl,z_pc      ;zl = memReadByte(z_pc)
3
  adiw  z_pcl,1            ;++z_pc
4
  ldi  zh,high(EDjmp)      ;
5
  ijmp
6
7
8
do_op_prefixDD:
9
;TODO: Flag für DD setzen
10
11
  mem_read_ds zl,z_pc      ;zl = memReadByte(z_pc)
12
  adiw  z_pcl,1            ;++z_pc
13
  ldi  zh,high(DDFDjmp)    ;
14
  ijmp
15
16
do_op_prefixFD:
17
;TODO: Flag für FD setzen
18
19
  mem_read_ds zl,z_pc      ;zl = memReadByte(z_pc)
20
  adiw  z_pcl,1            ;++z_pc
21
  ldi  zh,high(DDFDjmp)    ;
22
  ijmp


Die Tabellen bekommen einen Namen über ein Makro zugeordnet. Zuerst die 
schon bestehende Tabelle:
1
  opctable opcjmp
2
3
.
4
.
5
instr   fetch_nop,  op_prefixED,store_nop  ;ED    ;(ED opcode prefix)
6
.
7
.

Danach die neuen Tabellen. z.B.:
1
  opctable EDjmp
2
3
instr   fetch_nop,  op_nop,    store_nop  ;00    ;NOP
4
.
5
.
6
instr   fetch_C,    op_IN,     store_B    ;40    ;IN B,(C)
7
instr   fetch_B,    op_OUT,    store_nop  ;41    ;OUT (C),B
8
instr   fetch_BC,   op_SBCHL,  store_nop  ;42    ;SBC HL,BC
9
instr   fetch_DIR16,op_STBC,   store_nop  ;43    ;LD (nn),BC
10
instr   fetch_nop,  op_NEG,    store_nop  ;44    ;NEG
11
.
12
.

Fetch/Op/Store-Aktionen müssen definiert sein, bevor sie in den Tabellen
referenziert werden können. Damit die Sprünge möglichst kurz werden, 
sollten sie
unmittelbar vor der Tabelle, in der sie das erste mal angesprochen 
werden,
platziert werden.

Im Anhang ist ein ausbaufähiges Gerüst nach diesem Schema. Ich kann die 
Datei ohne Fehler assemblieren, und einen Befehl aus der ED-Tabelle habe 
ich erfolgreich getestet.

von Konrad S. (maybee)


Lesenswert?

Leo C. schrieb:
> Für DD und FD könnte
> man eine gemeinsame Tabelle verwenden

Wenn mich meine Erinnerung nicht trügt, sind beim Z80 das DD und das FD 
nur Präfixe, die dafür sorgen, dass der nachfolgende Befehl auf das IX- 
bzw. IY-Register wirk, statt auf das HL-Register. Daraus folgen einige 
undokumentierte Befehle, da alles, was mit HL geht auch mit IX und IY 
geht, nur ein bisschen langsamer und ein Byte mehr an Code.

von Leo C. (rapid)


Lesenswert?

Hallo Konrad,

so ist es.
Wenn man allerdings bei jedem Befehl mit H, L oder HL prüft, ob vorher 
ein DD- oder FD-Prefix war, dürfte das doch zu viel Geschwindigkeit 
kosten. Aber man kann es natürlich ausprobieren, vor allem, wenn der 
Platz nicht reicht.

Besonders hilfreich finde ich übrigens "The Undocumented Z80 
Documented":
http://www.myquest.nl/z80undocumented/

Nicht nur wegen der undokumentierten Befehle.

von Bernd B. (mainhattan)


Lesenswert?

Brauchen wir wirklich für die DD/FD-Behandlung eigene, vollständige 
Sprungtabellen? Ich denke, dass geht besser, wenn man erweiterte 
fetch_XX und store_XX-Routinen benutzt. Also zusätzlich zu fetch_HL auch 
noch fetch_HLIXIY, welches ein Flag beachtet, dass durch die Präfix 
DD/FD gesetzt wird und nach jeder Ausführung wieder zurückgesetzt wird.
Wenn wir z.B. INC HL betrachten, dann ist das fetch_HL, op_INC16 und 
store_HL für den i8080. Für Z80 wird daraus folgendes: fetch_HLIXIY, 
op_INC16, store_HLIXIY. Bei LD H,(HL) müssen wird daraus dann daraus 
fetch_MHLIXIY, op_nop, store_H machen. INC L wäre dann fetch_LXLYL, 
op_INC, store_LXLYL für das undokumentierte Feature auf die einzelnen 
Bytes der Indexregister zugreifen zu können.
Die Bitbefehle sind leider etwas komplizierter, da hier durch Vorsetzen 
von DD aus SET 7,A ein SET 7,(IX+d),A wird, also auf jeden Fall der 
Speicher über IX+d angesprochen wird.
Durch die Einführung von fetch_HLIXIY dauert die Verarbeitung von 
Befehlen mit HL länger als die mit BC oder DE. Auch muss man bei der 
Behandlung des Displacement-Bytes bei fetch_MHLIXIY und store_MHLIXIY 
aufpassen, dass sie einzeln aber auch paarweise vorkommen können [Siehe 
INC (IX+d); LD (IX+d),A und LD A,(IX+d)].

von Markus G. (thechief)


Angehängte Dateien:

Lesenswert?

Markus G. schrieb:
>
> Ich habe die von mir angefertigte Tabelle (im xls und ods Format) diesem
> Beitrag angehangen.
>
> Diese Webseite diente mir als Quelle:
> http://nemesis.lonestar.org/computers/tandy/software/apps/m4/qd/opcodes.txt
>
>
> Viele Grüße
>
> Markus

Hallo zusammen,

ich habe in den von mir im Beitrag #2542248 erstellten Tabellen drei 
versehentlich doppelt vorhandene Z80 Codes (CB01, DD22 und ED6B) 
gefunden und korrigiert.

Im Anhang die neuen Tabellen.


Viele Grüße

Markus

von Markus G. (thechief)


Lesenswert?

Hallo zusammen,

zum Thema Sprungtabellen und zusätzlicher Speicherbedarf:

Wie wäre es, wenn wir, um keine Geschwindigkeitsverluste zu haben und 
nicht von vorne herein zu viel Speicher zu verbrauchen, erst einmal nur 
alle "offiziellen" Befehlskombinationen implementieren würden?

Wenn wir anschließend wissen wie es mit dem Speicherbedarf (bezogen auf 
ATMega 168) aussieht, könnten wir dann ggf. die Befehls-Tabellen 
komplett (inkl. illegaler Opcodes) implementieren oder uns mit der 
Variante von Bernd B. (mainhattan) weiter beschäftigen?!


Just my 2 cents... :-)


Viele Grüße

Markus

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ich finde die Variante von Leo C. ganz gut. An Speicherplatz sollte es 
nicht mangeln. Der ATMega168 kann ja leicht durch den ATMega328 ersetzt 
werden.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Bernd B. schrieb:
> Brauchen wir wirklich für die DD/FD-Behandlung eigene, vollständige
> Sprungtabellen?

Dazu habe meine Meinung schon eins höher in der Antwort an Konrad 
geschrieben.

Markus G. schrieb:
> Wie wäre es, wenn wir, um keine Geschwindigkeitsverluste zu haben und
> nicht von vorne herein zu viel Speicher zu verbrauchen, erst einmal nur
> alle "offiziellen" Befehlskombinationen implementieren würden?

Natürlich sollte man (solltest Du :)) die dokumentierten Befehle zuerst 
implementieren. Ich glaube aber, daß die undokumentierten wenig 
zusätzlichen Platz belegen. Der Platz für die Sprungtabelle wird sowiso 
benötigt, und der Rest wird meistens aus bereits vorhanden Teilen 
zusammen gebaut.

Allgemein:
Ich habe einen (rudimentär getesteten) Vorschlag geliefert, wie man die 
bestehende Tabelle für die Z80-Mehrbyteopcodes erweitern kann, weil es 
dazu eine Anfrage gab 
(Beitrag "Re: CP/M auf ATmega88").


Im Anhang ist noch mal Update.

Die ED-Tabelle ist jetzt fast vollständig. Die ED-Befehle sind aber noch 
nicht alle voll funktionsfähig (Bitte die "TODO:"-Stellen suchen).

Die anderen Tabellen (DDFD, CB und DDFDCB) sind bisher nur Platzhalter. 
Ich glaube, daß der Code dazu in 16K unterzubringen ist. Im Moment sind 
noch über 3,5 KByte frei.

von Horst.S (Gast)


Lesenswert?

moin moin,
nach langer zeit mal wieder zeit......

1.) alle HL befehle auf eine 256byte page bringen.
2.) auf je eine page die IX und IY befehle. stratadrresse im lowbyte 
identisch zu den HL befehlen.
3.) DD/FD schaltet nur das adress highbyte um. nach abarbeitung wieder 
auf HL high adresse.
4.) danach normale befehlsabarbeitung.

macht 512byte für die befehle bei gutem tempo.

von Horst.S (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch meine Tabelle dazu.....

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Hallo Horst,

ich habe mir erlaubt, Deine Tabelle etwas umzuformatieren. Kannst Du sie 
in dieser Form noch gebrauchen?
Wenn ja, die ED-Tabelle habe ich ergänzt. Es fehlen noch die 
Block-Befehle.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

RAM-Test in init.asm

Markus G. hat Recht. Es macht keinen Sinn, das System bei einem 
RAM-Fehler weiter laufen zu lassen.

Aber
Markus G. schrieb:
> Durch den Eintrag:
> .equ MEMTEST = 3
>
> (oder höher) in der Datei: config.inc
>
> ist es nun möglich im Falle eines Speicherfehlers auf einem AVR
> CP/M-Stick V3.0 den/die defekten DRAM-Chips (IC5 / IC6) anzeigen zu
> lassen!

Dieses halte ich aber doch für etwas zu spezialisiert. Nicht jeder hat 
einen CP/M-Stick V3.0.

Was haltet Ihr denn von folgender Lösung (Anhang)?
1
CPM on an AVR, v2.1
2
Testing RAM: fill...wait...reread...
3
04<00@0000
4
05<01@0001
5
06<02@0002
6
07<03@0003
7
0C<08@0008
8
0D<09@0009
9
0E<0A@000A
10
0F<0B@000B
11
14<10@0010
12
15<11@0011
13
16<12@0012
14
17<13@0013
15
1C<18@0018
16
1D<19@0019
17
1E<1A@001A
18
1F<1B@001B System halted!

Die ersten 16 Fehler (knapper Bildschirm voll) werden ausgegeben und 
dann gestoppt. An den Mustern kann man u.U. erkennen, welche(s) Bit(s) 
defekt ist/sind.

Das Ausgabeformat könnte man noch verbessern. Man könnte auch 
zusätzliche Spalten ausgeben, mit 1-Bits, die 0 sein sollen und 0-Bits, 
die 1 sein sollen. Aber das halte ich auch wieder für übertrieben.

von Peter Sieg (Gast)


Lesenswert?

Wichtig wäre eine einfache Meldung Ram1 Und/Oder Ram2 defekt und gut ist 
und
dann ggf. noch die Bits (für Lötfehler bei LR Aufbau).

Peter

von Markus G. (thechief)


Lesenswert?

Markus G. schrieb:
> Hallo zusammen,
>
> ich habe meine, im Beitrag #2541628 veröffentlichte,
> Speichertest-Routine nun noch einmal verfeinert:
>
> Durch den Eintrag:
>
>
1
> .equ MEMTEST = 3
2
>
>
> (oder höher) in der Datei: config.inc
>
> ist es nun möglich im Falle eines Speicherfehlers auf einem AVR
> CP/M-Stick V3.0 den/die defekten DRAM-Chips (IC5 / IC6) anzeigen zu
> lassen!
>
> Die geänderte Assembler Quellcode-Datei habe ich diesem Beitrag
> angehangen.
>
> Um die geänderte Speichertest-Routine zu verwenden sind also nur zwei
> kleine Schritte nötig:
>
> 1. Austausch der vorhandenen Datei init.asm im Projektverzeichnis durch
> die im Anhang befindliche Datei init.asm.
>
> 2. Aktivieren der neuen Routine durch die Anweisung:
>
> .equ MEMTEST = 3
>
>  (oder höher) in der Datei: config.inc
>
> Auch die alten Speichertest-Routinen können weiterhin verwendet werden,
> hierzu ist wie bisher die Anweisung:
>
> .equ MEMTEST = 1 oder 2
>
> in der Datei: config.inc zu setzen!
>
> Siehe auch folgenden Auszug aus der Datei init.asm:
>
>
1
> ;------------------------------------------------------------------------------------
2
> ;  Info about MEMTEST:
3
> ;  0 = no memtest at all
4
> ;  1 = memtest shows defects but carrys on
5
> ;  2 = memtest shows defect and stops on first failure
6
> ;  3 = memtest shows defect, stops on first failure and
7
> ;      shows which RAM chip has to be replaced
8
> ;      on an AVR CP/M-Stick V3.0
9
> ;------------------------------------------------------------------------------------
10
>
>
> Viele Grüße
>
> Markus
>
>
> PS: @Leo: Du darfst auch die neue Version gerne (wieder) ins SVN
> einchecken!

Hallo zusammen,

ja, ich verstehe Leo's Eiwand, dass meine Ramtest Variante 3 nur für den 
CPM-Stick V3.0 zu gebrauchen ist, das ist absolut richtig!
Genau aus diesem Grund habe ich auch die von mir zuvor implementierte 
Variante 2 (MEMTEST = 2) im Code belassen.
Diese ist allgemein gültig, da sie den / die defekten Ram-Chips nicht 
durch eine IC-Nummer / Position bestimmt und somit für jede 
Aufbauvariante (Lochraster, ältere Platinenversion, etc.) verwendet 
werden kann.
Die Ergänzung der Ausgabe um die Bitmuster haltet ich auch für sinnvoll 
- Lötspritzer lassen grüßen... ;-)

Mein Vorschlag wäre also die Variante 2 um die Ausgabe der Bitmuster zu 
ergänzen.


Viele Grüße

Markus

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Peter Sieg schrieb:
> Wichtig wäre eine einfache Meldung Ram1 Und/Oder Ram2 defekt und gut ist

Ist Ram1 jetzt der obere oder der untere Chip?

Markus G. schrieb:
>> ;  Info about MEMTEST:
>> ;  0 = no memtest at all
>> ;  1 = memtest shows defects but carrys on
>> ;  2 = memtest shows defect and stops on first failure
>> ;  3 = memtest shows defect, stops on first failure and
>> ;      shows which RAM chip has to be replaced
>> ;      on an AVR CP/M-Stick V3.0

Variante 1 hat sich offensichtlich nicht bewährt, da RAM-Fehler zu 
leicht übersehen werden können.

Wenn wir Variante 3 in den allgemeinen Code aufnehmen, werden wir über 
kurz oder lang auch Schalterstellungen für die anderen Hardwarevarianten 
aufnehmen müssen.

Und mein Hauptpunkt: Ich befürchte ganz einfach, daß diejenigen, die 
nicht in Lage sind, die Bitmuster zu interpretieren, auch die größten 
Schwierigkeiten haben werden, das Programm selbst mit der richtigen 
Schalterstellung zu übersetzen.

Im Anhang ist mein aktuelles Verhandlungsangebot :-)
Die Ausgabe könnte dann ungefähr so aussehen:
1
CPM on an AVR, v2.1
2
Testing RAM: fill...wait...reread...
3
Addr xx yy
4
0000 00 04 -------- -----X--
5
0001 01 05 -------- -----X--
6
0002 02 06 -------- -----X--
7
0003 03 07 -------- -----X--
8
0008 08 04 ----X--- -----X--
9
0009 09 05 ----X--- -----X--
10
000A 0A 06 ----X--- -----X--
11
000B 0B 07 ----X--- -----X--
12
000C 0C 04 ----X--- --------
13
000D 0D 05 ----X--- --------
14
000E 0E 06 ----X--- --------
15
000F 0F 07 ----X--- --------
16
0010 10 14 -------- -----X--
17
0011 11 15 -------- -----X--
18
0012 12 16 -------- -----X--
19
0013 13 17 -------- -----X-- System halted!
Verbesserungen am Format, eine ordentliche Überschriftenzeile, und die 
Erklärung, was das ganze überhaupt soll, überlasse ich gerne dem Leser. 
:-)

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Im Anhang ist ein Vorschlag für BREAK-Erkennung und Verarbeitung.

Z. Zt. wird BREAK nur bei einem Character timeout erkannt. Ein BREAK, 
daß nur wenig länger als ein normales Zeichen dauert. funktioniert noch 
nicht.

BREAK setzt ein Flag in einem Interpreter-Register, in das auch die 
Flags für Interrupts (und vielleicht Trace, Einzelschritt...) kommen 
sollen.
Z. Zt. setzt BREAK den PC auf null. --> Warmstart.
Denkbar wären auch Kaltstart, Interrupt/NMI, Sprung in Debugger...
Vielleicht brauchen wir für so was noch ein schönes API.

Ich würde mich freuen, wenn viele Leute das mal mit vielen verschiedenen 
Terminals/-Emulatoren testen würden. Bei mir funktionierts mit minicom 
und Windows Hyperterminal, wobei ich für letzteres Google bemühen mußte, 
um die Break-Taste zu finden (ctrl-break, bzw. Strg-Untbr).
Möglicherweise gibt es Terminals, die nur ein kurzes BREAK-Signal 
senden. Mit denen funktionierts dann (noch) nicht, und das wären dann 
gute Testkanditaten für die Vervollständigung des Codes.


Nils Eilers schrieb:
> Was anderes: ich habe gesehen, wird ein BREAK auf der seriellen
> Schnittstelle derzeit noch nicht behandelt. Das ADM-3A hat eine extra
> Break-Taste und Terminalprogramme bieten üblicherweise die Funktion, ein
> Break zu senden. Das würde die Möglichkeit eröffnen, bei Empfang eines
> Breaks einen Kalt- oder Warmstart auszuführen, oder einen Debugger
> aufzurufen.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Update

ddtz macht intensiv Gebrauch von Z80-Befehlen und kommt jetzt schon 
ziemlich weit. Er läuft aber noch nicht wirklich, weil noch eine Menge 
Befehle fehlen.
Z. Bsp. CB, und DD/FDCB komplett und in der ED-Tabelle fehlen bis auf 
LDDR noch alle Blocktransfer- und Suchbefehle. Ausserdem sind die 
implementierten Befehle kaum getestet.

Trace kann jetzt zur Laufzeit durch Schreiben auf einen Port ein- und 
ausgschaltet werden. Praktisch zum Testen der neuen Befehle:
1
-l100,11a
2
  0100  MVI  A,01
3
  0102  OUT  4F
4
  0104  LXI  B,77FF
5
  0107  PUSH B
6
  0108  POP  PSW  
7
  0109  LXI  B,1234
8
  010C  LXI  D,5678
9
  010F  LXI  H,9ABC
10
  0112  ??=  08
11
  0113  ??=  D9
12
  0114  ??=  08
13
  0115  ??=  D9
14
  0116  MVI  A,00
15
  0118  OUT  4F
16
  011A  NOP  
17
  011B  
18
-g100,11a
19
20
    N   A =01 BC =0000 DE =0000 HL =0000 SP=0100 PC=0104       01 FF 77 
21
        A'=00 BC'=0000 DE'=0000 HL'=0000 IX=0000 IY=0000 I=00       
22
    N   A =01 BC =77FF DE =0000 HL =0000 SP=0100 PC=0107       C5 F1 01 
23
        A'=00 BC'=0000 DE'=0000 HL'=0000 IX=0000 IY=0000 I=00       
24
    N   A =01 BC =77FF DE =0000 HL =0000 SP=00FE PC=0108       F1 01 34 
25
        A'=00 BC'=0000 DE'=0000 HL'=0000 IX=0000 IY=0000 I=00       
26
SZHVNC  A =77 BC =77FF DE =0000 HL =0000 SP=0100 PC=0109       01 34 12 
27
        A'=00 BC'=0000 DE'=0000 HL'=0000 IX=0000 IY=0000 I=00       
28
SZHVNC  A =77 BC =1234 DE =0000 HL =0000 SP=0100 PC=010C       11 78 56 
29
        A'=00 BC'=0000 DE'=0000 HL'=0000 IX=0000 IY=0000 I=00       
30
SZHVNC  A =77 BC =1234 DE =5678 HL =0000 SP=0100 PC=010F       21 BC 9A 
31
        A'=00 BC'=0000 DE'=0000 HL'=0000 IX=0000 IY=0000 I=00       
32
SZHVNC  A =77 BC =1234 DE =5678 HL =9ABC SP=0100 PC=0112       08 D9 08 
33
        A'=00 BC'=0000 DE'=0000 HL'=0000 IX=0000 IY=0000 I=00       
34
        A =00 BC =1234 DE =5678 HL =9ABC SP=0100 PC=0113       D9 08 D9 
35
SZHVNC  A'=77 BC'=0000 DE'=0000 HL'=0000 IX=0000 IY=0000 I=00       
36
        A =00 BC =0000 DE =0000 HL =0000 SP=0100 PC=0114       08 D9 3E 
37
SZHVNC  A'=77 BC'=1234 DE'=5678 HL'=9ABC IX=0000 IY=0000 I=00       
38
SZHVNC  A =77 BC =0000 DE =0000 HL =0000 SP=0100 PC=0115       D9 3E 00 
39
        A'=00 BC'=1234 DE'=5678 HL'=9ABC IX=0000 IY=0000 I=00       
40
SZHVNC  A =77 BC =1234 DE =5678 HL =9ABC SP=0100 PC=0116       3E 00 D3 
41
        A'=00 BC'=0000 DE'=0000 HL'=0000 IX=0000 IY=0000 I=00       
42
SZHVNC  A =00 BC =1234 DE =5678 HL =9ABC SP=0100 PC=0118       D3 4F F7 
43
        A'=00 BC'=0000 DE'=0000 HL'=0000 IX=0000 IY=0000 I=00       *011A
44
-

Da z. Zt. einiges in Bewegung ist, habe ich den alten Stand (8080 only, 
korrigierter DAA, alter RAM-Test, kein BREAK) als Version 2.2 
eingefroren:
http://cloudbase.homelinux.net/viewvc/avr-cpm/avrcpm/tags/2.2/

Die aktuelle Version ist wie üblich im trunk-Zweig.

von Peter Sieg (Gast)


Lesenswert?

Super! Habe es gestern mal für 328P übersetzt und läuft ersteinmal 
soweit..
Gibts für ddtz eigentlich ein Manual?

Peter

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Peter Sieg schrieb:
> Gibts für ddtz eigentlich ein Manual?

Im angehängten Zip ist sogar eins auf Deutsch drin.
(Ich weiß grad nicht mehr wo ich das her hab, deshalb kann ich keinen 
Link posten.)

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Sorry, das war kein Manual, sondern "nur" eine Art Referenz. Im Netz 
findet man aber viele Versionen von ddtz mit englischen und deutschen 
Beschreibungen.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

'tp3-hd.dsk' in 'CPMDSK_x.IMG' umbenennen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Glückwunsch!
Ich bin sprachlos.

von Peter Sieg (Gast)


Lesenswert?

@Leo C. Super! Herzlichen Glückwunsch!!

Muss ich die Tage gleich mal ausprobieren..

Vielen Dank!

Gruß Peter

von Peter Sieg (Gast)


Lesenswert?

Hab ich ausprobiert.. Compile von hello.pas geht.. aber sollte da nicht 
ein hello.com gespeichert sein.. (man ist das lange her mit TP ;-) )

Peter

von Leo C. (rapid)


Lesenswert?

Man müßte doch auch ein Handbuch im Netz finden.
(Ich habe hier noch eine Kopie der gedruckten Fassung)

Aber Du wirst es sicher auch so noch finden. Sooo viele Punkte hat das 
Hauptmenü ja auch nicht.

von Peter Sieg (Gast)


Lesenswert?

Arrg.. compiler (O)ptions - (C)om file ;-)

Ja, ja lang ist es her..

Super!

Peter

von Leo C. (rapid)


Lesenswert?

Im Z80-Interpreter dürften aber noch ein paar Fehler versteckt sein.

Der Turbo-Editor spinnt, und MC.PAS kann zwar als COM übersetzt werden,
aber mit dem Demosheet verrechnet es sich, wenn man andere/größere 
Zahlen eingibt.

Letzte Nacht habe ich mal den Exerciser laufen lassen.
Heute Morgen sah das dann so aus:
1
C>exz80doc
2
Z80 instruction exerciser
3
Undefined status bits NOT taken into account
4
<adc,sbc> hl,<bc,de,hl,sp>....( 71,680) cycles   OK
5
add hl,<bc,de,hl,sp>..........( 35,840) cycles   OK
6
add ix,<bc,de,ix,sp>..........( 35,840) cycles   OK
7
add iy,<bc,de,iy,sp>..........( 35,840) cycles   OK
8
aluop a,nn....................( 45,056) cycles   OK
9
aluop a,<b,c,d,e,h,l,(hl),a>..(753,664) cycles   OK
10
aluop a,<ixh,ixl,iyh,iyl>.....(376,832) cycles   ERROR **** crc expected:a4026d5a found:e7318427
11
aluop a,(<ix,iy>+1)...........(229,376) cycles   ERROR **** crc expected:e849676e found:74a1545f
12
aluop a,(<ix,iy>-1)...........(229,376) cycles   ERROR **** crc expected:edd8136d found:7130205c
13
bit n,(<ix,iy>+1).............(  2,048) cycles   OK
14
bit n,(<ix,iy>-1).............(  2,048) cycles   OK
15
bit n,<b,c,d,e,h,l,(hl),a>....( 49,152) cycles   OK
16
cpd<r>........................(  6,144) cycles   ERROR **** crc expected:c8439345 found:a8554cee
17
cpi<r>........................(  6,144) cycles   ERROR **** crc expected:e66fa7d2 found:478b76a1
18
<daa,cpl,scf,ccf>.............( 65,536) cycles 
19
   VN   A =8E BC =9079 DE =8D5B HL =A559 SP=299D PC=253B       27 00 00 
20
        A'=00 BC'=0000 DE'=0000 HL'=0000 IX=1D60 IY=09FA I=00       Invalid opcode!

Diese Fehler sind inzwischen korrigiert. Der Abbruch mit "Invalid 
opcode! " kam beim DAA-Befehl, weil dort immer noch der Teil mit 
gesetztem N-Flag fehlt. Den Abbruch habe ich jetzt aber raus gemacht, 
damit ich sehen kann, wie weit das Testprogramm die nächste Nacht kommt.

Außerdem habe ich heute die noch fehlenden Block-I/O Befehle eingebaut.
Update im SVN.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Klasse Leo!
TP 3.0 läuft bei mir nun auch. Der Editor bockt zwar noch etwas doch mit 
dem Exerciser sollten sich alle Fehler ausmerzen lassen. Es dauert....
Meiner rechnet immer noch hier:
<adc,sbc> hl,<bc,de,hl,sp>....( 71,680) cycles

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Man müßte doch auch ein Handbuch im Netz finden.

http://electrickery.xs4all.nl/comp/tp30/

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Hallo Joe,

danke fürs testen.
Versuch's mal mit der Version im Anhang. Damit scheint jetzt alles zu 
laufen.

Der Turbopascal-Editor läuft damit, und das Microcalc Demo auch.
Der Exerciser sah bei mir zu letzt so aus:
1
C>ex1
2
Z80 instruction exerciser
3
Undefined status bits NOT taken into account
4
<inc,dec> a...................(  3,072) cycles   OK
5
<inc,dec> b...................(  3,072) cycles   OK
6
<inc,dec> bc..................(  1,536) cycles   OK
7
<inc,dec> c...................(  3,072) cycles   OK
8
<inc,dec> d...................(  3,072) cycles   OK
9
<inc,dec> de..................(  1,536) cycles   OK
10
<inc,dec> e...................(  3,072) cycles   OK
11
<inc,dec> h...................(  3,072) cycles   OK
12
<inc,dec> hl..................(  1,536) cycles   OK
13
<inc,dec> ix..................(  1,536) cycles   OK
14
<inc,dec> iy..................(  1,536) cycles   OK
15
<inc,dec> l...................(  3,072) cycles   OK
16
<inc,dec> (hl)................(  3,072) cycles   OK
17
<inc,dec> sp..................(  1,536) cycles   OK
18
<inc,dec> (<ix,iy>+1).........(  6,144) cycles   OK
19
<inc,dec> (<ix,iy>-1).........(  6,144) cycles   OK
20
<inc,dec> ixh.................(  3,072) cycles   OK
21
<inc,dec> ixl.................(  3,072) cycles   OK
22
<inc,dec> iyh.................(  3,072) cycles   OK
23
<inc,dec> iyl.................(  3,072) cycles   OK
24
ld <bc,de>,(nnnn).............(     32) cycles   OK
25
ld hl,(nnnn)..................(     16) cycles   OK
26
ld sp,(nnnn)..................(     16) cycles   OK
27
ld <ix,iy>,(nnnn).............(     32) cycles   OK
28
ld (nnnn),<bc,de>.............(     64) cycles   OK
29
ld (nnnn),hl..................(     16) cycles   OK
30
ld (nnnn),sp..................(     16) cycles   OK
31
ld (nnnn),<ix,iy>.............(     64) cycles   OK
32
ld <bc,de,hl,sp>,nnnn.........(     64) cycles   OK
33
ld <ix,iy>,nnnn...............(     32) cycles   OK
34
ld a,<(bc),(de)>..............(     44) cycles   OK
35
ld <b,c,d,e,h,l,(hl),a>,nn....(     64) cycles   OK
36
ld (<ix,iy>+1),nn.............(     32) cycles   OK
37
ld (<ix,iy>-1),nn.............(     32) cycles   OK
38
ld <b,c,d,e>,(<ix,iy>+1)......(    512) cycles   OK
39
ld <b,c,d,e>,(<ix,iy>-1)......(    512) cycles   OK
40
ld <h,l>,(<ix,iy>+1)..........(    256) cycles   OK
41
ld <h,l>,(<ix,iy>-1)..........(    256) cycles   OK
42
ld a,(<ix,iy>+1)..............(    128) cycles   OK
43
ld a,(<ix,iy>-1)..............(    128) cycles   OK
44
ld <ixh,ixl,iyh,iyl>,nn.......(     32) cycles   OK
45
ld <bcdehla>,<bcdehla>........(  3,456) cycles   OK
46
ld <bcdexya>,<bcdexya>........(  6,912) cycles   OK
47
ld a,(nnnn) / ld (nnnn),a.....(     44) cycles   OK
48
ldd<r> (1)....................(     44) cycles   OK
49
ldd<r> (2)....................(     44) cycles   OK
50
ldi<r> (1)....................(     44) cycles   OK
51
ldi<r> (2)....................(     44) cycles   OK
52
neg...........................( 16,384) cycles   OK
53
<rrd,rld>.....................(  7,168) cycles   OK
54
<rlca,rrca,rla,rra>...........(  6,144) cycles   OK
55
shf/rot (<ix,iy>+1)...........(    416) cycles   OK
56
shf/rot (<ix,iy>-1)...........(    416) cycles   OK
57
shf/rot <b,c,d,e,h,l,(hl),a>..(  6,784) cycles   OK
58
<set,res> n,<bcdehl(hl)a>.....(  6,912) cycles   OK
59
<set,res> n,(<ix,iy>+1).......(    448) cycles   OK
60
<set,res> n,(<ix,iy>-1).......(    448) cycles   OK
61
ld (<ix,iy>+1),<b,c,d,e>......(  1,024) cycles   OK
62
ld (<ix,iy>-1),<b,c,d,e>......(  1,024) cycles   OK
63
ld (<ix,iy>+1),<h,l>..........(    256) cycles   OK
64
ld (<ix,iy>-1),<h,l>..........(    256) cycles   OK
65
ld (<ix,iy>+1),a..............(     64) cycles   OK
66
ld (<ix,iy>-1),a..............(     64) cycles   OK
67
ld (<bc,de>),a................(     96) cycles   OK
68
All tests successful.

Ich habe die Source neu übersetzt und dabei alle Tests die schon positiv 
durchgelaufen sind, sowie DAA (bekannter Fehler) und die Block-I/O 
Befehle auskommentiert.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Prima, der Editor läuft nun auch!

Wenn du Lust hast dieses Stück zu übernehmen...

instr   do_fetch_DIR8,  op_DJNZ,  do_store_nop  ;10 nn      ;DJNZ nn 
(Z80 OK)

;----------------------------------------------------------------
;|Mnemonic  |SZHPNC|Description          |Notes                 |
;|----------+------+---------------------+----------------------|
;|DJNZ e    |------|Dec., Jump Non-Zero  |B=B-1 till B=0        |
;
;The b register is decremented, and if not zero, the signed value e is 
added to pc.
;The jump is measured from the start of the instruction opcode.
;e = Relative addressing (PC=PC+2+offset)
do_op_DJNZ:  ; decremt B, jump B=0
  lds temp, z_b    ; B in temp
  dec temp      ; temp decrementieren
  breq do_op_DJNZ_Z  ; bei B=0
  sts z_b, temp    ; temp in B
  subi opl, 0x80    ; z_pc + e im Zweierkomplement
  subi z_pcl, 0x80
  sbc z_pch, _0
  add z_pcl, opl
  adc z_pch, _0
do_op_DJNZ_Z:
  ret

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Wenn du Lust hast dieses Stück zu übernehmen...

Nur wenn Du den Fehler behältst. ;-)

Die trickreiche Displacement-Berechnung braucht einen Takt (und ein 
Register) weniger. Super!
Die Abkürzung ("Gehe nicht über store_...") bringt aber mehr.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Es gibt noch merkwürdige Fehler. Wenn TP über Q verlassen wird z.B. das 
hier:

Logged drive: A
Work file:
Main file:

Edit     Compile  Run   Save
eXecute  Dir      Quit  compiler Options

Text:     0 bytes (8118-8118)
Free: 24301 bytes (8119-E006)

>

S   NC  A =09 BC =0606 DE =DF28 HL =DC00 SP=E3A9 PC=DC01       76 DF C3
 Z  N   A'=AF BC'=0000 DE'=0000 HL'=0000 IX=0000 IY=0000 I=00       CPU 
halted!

oder wenn das compillierte Programm als COM ausgeführt wird:

A>dir
A: TEST     PAS : TINST    COM : TINST    DTA : TINST    MSG
A: TURBO    COM : TURBO    MSG : TURBO    OVR : TEST     BAK
A: TEST     COM
A>test
Das ist ein AVR CP/M Test

A: TEST     PASA: T   COM A: TINST    MSGA: /0123456 789A: TINST 
DTAA: TURBO    COMA: TURBO    COMA: TEST     BAKA: TEST     BAK
I/O error 00, PC=3A50
Program aborted

A>

Das gilt übrigens auch für Zork1. Beim beenden stürzt es ab.

Damit der TP Editor über VT100 etwas bedienbarer wird, habe ich einige 
"übliche" Steuerkommandos eingefügt, wer Lust hat kann ja noch 
erweitern.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@ Leo C.

Kommando zurück! Ich hatte deine letzte Version mit der SVN Version 
gemischt. Nun geht es korrekt.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Hallo Joe,

Die angehängte geht noch einen Tick besser. Bis auf DAA werden damit 
alle Tests von EXZ80DOC bestanden.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Hallo Leo,

super läuft. Ich lasse gerade EXZ80DOC laufen und gehe erst mal was 
essen...

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier die Befehle für den TP Editor.

von Leo C. (rapid)


Lesenswert?

Da der Z80-Interpreter nun komplett ist, und gut läuft, habe ich mir 
erlaubt, die Versionsnummer auf 3.0 zu erhöhen. Diese Version ist auch 
wieder dauerhaft im tags-Verzeichnis abgelegt:

http://cloudbase.homelinux.net/viewvc/avr-cpm/avrcpm/tags/3.0/

- Z80 ist jetzt der Defaultprozessor. Das Programm belegt damit z.Zt.
  aber mehr als 16 KB Flash. --> Atmega328 erforderlich.

- Für 8080 kann übersetzt werden, wenn "EM_Z80" in config.inc auf 0
  gesetzt wird.

- Trace kann jetzt (auch) zur Laufzeit ein- und ausgeschaltet werden.
  Einschalten: 1 auf Port 0x4F ausgeben.
  Ausschalten: 0 auf Port 0x4F ausgeben.
  (ddtz: "O 1 4f")

- Um Trace von der CP/M-Befehlszeile aus zu schalten, wurde das
  Timer-Steuerprogramm (im Verzeichnis cpm/utils) erweitert.
  (Der Name TIMER.COM passt nicht mehr, Vorschläge?)

- BREAK: Ein laufendes Programm kann jederzeit durch senden von BREAK
  abgebrochen werden. Zur Zeit wird dann ein Warmstart ausgeführt,
  was natürlich nicht hilft, wenn BDOS und/oder BIOS durch ein
  amoklaufendes Programm überschrieben wurden.

Bitte gründlich testen. Kommentare, Änderungs- und 
Verbesserungsvorschläge wie immer...

Schönes Wochenende

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Perfekt!

Trace läuft...
Break läuft...

TIMER.COM darf auch ACT.COM heißen. (AVR CP/M Tool) ;-)

von Peter Sieg (Gast)


Lesenswert?

Hi.

Habe gerade Ramblade (ZiCOG - der Welt kleinste CP/M Computer ;-) ) vor 
mir liegen: PCB is 1.9"x1.2" (48x30.5mm) SMT (surface mount)

http://forums.parallax.com/showthread.php?116893-RamBlade-Prop-SRAM-microSD-addon-to-run-ZiCog-CPM-PropDos-Catalina-etc

Und dachte mir so, das wäre doch mal eine Herausforderung @Joe?

Atmega328p in SMD
MicroSD Card Slot
2x4256 Drams in SMD (sind leider sehr groß - Alternative SRam?)
Bisschen Hühnerfutter
Nur Anschluß eines CP2102 Dongles = +3.3V und TTL ser. IO
Platine von beiden Seiten bestückt (sonst wird das nichts)

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Und dachte mir so, das wäre doch mal eine Herausforderung @Joe?

Das Projekt liegt schon in der Schublade. Als RAM habe ich 16 Stück 
HM51W17805J-6 rumliegen (16M EDO DRAM 3.3V). Es würde nur ein IC 
benötigt werden da er als 2M x 8 organisiert ist. Mit dem Refresh bin 
ich mir nicht ganz sicher, sollte jedoch gehen (vielleicht schaut Leo 
auch mal aufs Datenblatt).
Es könnte dann eine CP/M 3.0 Jubiläumsversion geben ;-)

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Eine Frage zur RAMDISK.

Wenn ich #define RAMDISKCNT auf 1 setze wird eine Ramdisk angelegt. I: 
z.B.
Da ja RAMSIZE nicht ausgewertet wird und in der aktuellen Stickversion 
nur 2x256Kx4 verbaut sind, wo liegt dann der Ram und wie groß ist er? 
STAT zeigt mir 1M für I: an, was ja nicht sein kann. In diesem Zustand 
werden auch alle Programme fehlerhaft beendet. Zum Glück gibt es ja nun 
Break ;-)

von Leo C. (rapid)


Lesenswert?

Ohje Ramdisk,

die habe ich außer Betrieb genommen, als ich die Erweiterung für mehrere 
Diskformate eingebaut hatte. Mit etwas Glück, könnte sie laufen, wenn 
man die Parameter in config.inc (RAMSIZE) anpasst. Bin aber nicht 
optimistisch.
Der Hauptgrund, warum ich mich nicht mehr dafür interessiert habe ist, 
daß die RAM-Zugriffe langsamer sind, als die Zugriffe auf die SD-Card.

Zum EDO-Ram: Refresh ist sicher kein Problem, und auch sonst müßte es 
genauso funktionieren, wie die normalen D-Rams. EDO ist ja nur eine 
weitere "Betriebsart".

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

EDO-Ram: Ich setzte mal einen Testweise auf die Stickversion.
Ramdisk: Ist nur schade wenn man 2MB verschenkt.

Mal eine ganz andere Frage in den Raum geworfen.
Ob man die Jugend begeistern kann, wenn man ein "CP/M - Shield" für 
Arduino ins Leben ruft. Das könnte in beliebigen Ausbaustufen entstehen.
Arduino Nano – Shield mit RAM und SD-Card - kleinstes CP/M System der 
Welt ;-)
Arduino Uno – CP/MLino Shield mit VGA und Tastatur
...
Joe

von Peter Sieg (Gast)


Lesenswert?

@Joe: Die Idee das als Arduino Nano Addon zu machen gefällt mir!
Läuft allerdings mit 5V = Levelshifter zur SD Karte erforderlich.
Aber das lässt sich ja mit 3k3 und 1k8 (6 Stück) SMD Widerständen 
machen.
Leider sind die Arduino nicht wirklich 'billig'.. hatte gerade was um 
die 30 US$ gesehen.. aber naja.. auf dem addon wären dann nur Ram und 
(Micro-) SD Karte inkl. Levelshiftern..

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Den Mini gibt es als Arduino Pro Mini Enhancement (3.3V/5V 
adjustable)/16MHz MEGA328P-AU für 7,84€ inc. Versand.

von Peter Sieg (Gast)


Lesenswert?


von Hans- w. S. (hschuetz)


Lesenswert?

Aber leider wieder aus China....Zoll und so....
Gruß
Hans -Werner

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Ob man die Jugend begeistern kann, wenn man ein "CP/M - Shield" für
...
> Arduino Uno – CP/MLino Shield mit VGA und Tastatur

Arduino kenne ich ja noch. Aber "Shield" ... mußte ich erst mal 
nachschlagen.
Ja. Shield muß sein. Und Lino muß umbedingt in den Namen. Aber ob das 
für CP/M. daß ja zu seinen Lebzeiten schon nicht wirklich cool war, bei 
der "Jugend" reicht? Also wenn es nicht mindestens Gezwitscher blubbern 
kann [1], und einen "Gefällt mir" Knopf hat, sicher nicht.

[1] http://bubblino.com/

von Peter Sieg (Gast)


Lesenswert?

@Leo C: Haha.. Wink mit dem Zaunpfahl..

Nein ich sehe es folgendermaßen:
Wenn wir ein 'Shield' für diese Platform anbieten haben wir:
- autom. eine fertige Platine für AVR, Quarz, Vin, ggf. USB?
- Ein 'Shield' mit Micro-SD, ggf. Levelshiftern und DRam.

Vorteile:
- AVR Teil kann man fertig kaufen, ist getestet, läßt sich woanders für
  verwenden.
- Nur Zusatzplatine muss selbst gebaut werden.
- Evtl. läßt sich Zusatzplatine auch für anderes verwenden!

Nachteile:
- evtl. höherer Preis für beides zusammen anstatt auf einer Platine?

Und an China kommt man solange man sehr günstige Preise haben will nicht
umher (sorry, aber ist so! alles andere ist leider realitätsfern..).

Just my 2 cents

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Die Bastlergemeinde ist sowieso nicht wirklich zu durchschauen.  Der 
Raspberry-Pi hat einen waren Hype ausgelöst. Mehr als 10.000 verkaufte 
Boards innerhalb von Stunden. Ja und was kann man damit tun? Auch nicht 
mehr als mit dem CP/M Teil. Na gut Doom spielen aber Ladder und Chess 
sind auch ganz nett. An Programmiersprachen gibt es unter CP/M alles als 
das Herz begehrt – sogar ohne dot.net Geraffel.
Ich überlege mir mal eine Shield Variante und stelle sie dann zur 
Diskussion. Über I2C darf dann auch bubblino angeschlossen werden ;-)

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> Eine Frage zur RAMDISK.

Im aktuellen SVN war nur Code für 4-bit Hardware.

Im Anhang ist jetzt mal eine 8-Bit 192 KB Ramdisk. Getestet habe ich nur 
mit 4 MBit Chips, aber es sollte auch mit kleineren funktionieren. Da 
die Ramdisk-Größe über Tabellen im BIOS statisch festgelegt ist, muß 
dieses eben auch angepaßt werden. Deshalb ist im Anhang auch gleich ein 
Diskimage.

Hier mal der Versuch (ausbaufähig), die Speicherorganisation 
darzustellen:
1
         +---------------------------------------------------------------------------------------+
2
Linear   |21 |20 |19 |18 |17 |16 |15 |14 |13 |12 |11 |10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
3
         +-----------------------+-------------------------------+-------------------------------+
4
 DRAM    |R C|R C|R C|R C|R C|R C|              Row              |              Col              |
5
         |  10   |   9   |   8   | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
6
         +---------------------------------------------------------------------------------------+
7
Ramdisk  |DSK 0-3|          Track 0-255          |   Sector 0-31     |       Byte 0-127          |
8
         +---------------------------------------------------------------------------------------+
9
Memory   | 1   1   1   1   1   1 |                       RAM-Adr. 0-65536                        |
10
         +---------------------------------------------------------------------------------------+

Wenn der Z80-Arbeitsspeicher addressiert wird, sind die Adressleitungen 
A8-A10 immer High, egal ob entsprechend große RAMs vorhanden oder nicht.
Der Arbeitsspeicher liegt also immer am oberen Ende des physikalischen 
RAMs.

Die RAM-Disks füllen den Speicher von unten. Maximal sind 4 Disks a 1 
MByte möglich. Zur Zeit wird nicht geprüft, ob eine Ramdisk-Adresse 
(Disk/Track/Sector) überhaupt in den vorhandenen Speicher hinein paßt.
Es ist also möglich, durch Schreiben in die RAM-Disk, den 
Arbeitsspeicher zu überschreiben.

Eine 192K Disk wird im BIOS (BIOS.MAC) folgendermaßen definiert:
1
  ;  Name   spt   bls  dks  dir  cks off
2
  dpb  rd192,  32, 1024, 192,  32,   0,  0
dpb: Macro, daß aus den folgenden Daten den "disk parameter block"
     generiert.
spt: sectors per track. Die Zahl muß zum AVR Ramdisk-Treiber passen.
bls: block size (KByte).
dks: disk size. Anzahl Blöcke der Größe bls.
dir: Anzahl Directory Einträge
cks: check size. Anzahl zu prüfender Directory Einträge.
     Bei Wechselmedien = cks, sonst 0.
off: offset. Anzahl reservierter Tracks. Wenn off bei der ersten
     Ramdisk > 0 ist, wird beim Kaltstart das System hier her kopiert,
     und beim Warmstart von hier, statt von SD-Karte geladen. Bringt im
     Moment fast nix, da Original BDOS beim Warmstart ohne Disk A:
     hängen bleibt.
     (s.a. Beitrag "Re: CP/M auf ATmega88")

Die Ramdisk wird beim Starten nicht gelöscht (formatiert), so daß am 
Anfang meistens Müll drin steht, den man auch durch "ERA *.*" in allen 
Userbereichen nicht weg bekommt. Deshalb gibt es das Programm WIPE.COM 
auf dem angehängten Diskimage.

TODO:
- RAMDISK-Zugriff auf für Ramdisk tatsächlich vorhandenes RAM
  einschränken. ("#define RAMSIZE" in config.inc)

- Ramdisk(s) abhängig von RAMSIZE dynamisch beim Start einrichten.
  Analog zu SD-Karten-Images. BIOS-Anpassung dann nicht mehr notwendig.

- Bei Power-On-Reset die Ramdisk initialisieren.
  Sonstige Resets übersteht der Ramdiskinhalt in der Regel, auch wenn
  dabei der Refresh für längere Zeit ausfällt.

- Ramdisk-Treiber für 4-bit-RAM aktualisieren.

- MMU:  "Ge-paged-tes" RAM für CP/M3

Freiwillige vor.

von Holger (Gast)


Angehängte Dateien:

Lesenswert?

Die Ramdisk haben wir damals initialisiert, indem wir den ersten 
versteckten DIR-Eintrag getestet haben. War es unser Eintrag, war die 
Initialisierung fertig. Waren fremde Bytes drin, so wurde unser Eintrag 
geschrieben, der Rest vom DIR gelöscht und in den Speicherbereich, auf 
den der DIR-Eintrag zeigt, das CCP kopiert.

von Peter Sieg (Gast)


Lesenswert?


von Konrad S. (maybee)


Lesenswert?

Peter Sieg schrieb:
> Noch mal was abgefahrenes:
>
> http://www.dmitry.co/index.php?p=./04.Thoughts/07....

Abgefahren? Ja, aber auf eine Art, vor der ich den Hut ziehe!

Jetzt fehlt nur noch, dass jemand mehrere ATmegas nimmt und damit ein 
Multi-Core-System aufbaut.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Im Anhang ist jetzt mal eine 8-Bit 192 KB Ramdisk.

Danke Leo! Deine Version geht nun auch mit 256 x 8. Das gibt genau eine 
Ramdisk von 192 KB. Unter Verwendung von Wipe läßt sie sich auch sauber 
löschen und dann beschreiben. Die Variante zunächst das BIOS zu ändern 
und dan ein neues CP/M zu bauen ist akzeptabel. Dabei viel mir auf, das 
in unsrer Version SUBMIT nicht richtig ausgeführt wird. M80 und L80 
werden einfach nicht gestartet. Auf AltairSIMH läuft es jedoch 
problemlos
Joe

von Jens (Gast)


Lesenswert?

bin grade auf euer interessantes Projekt gestoßen.
Bei der Suche nach den RAM's hatte ich bisher kein Glück, die alten 
PCs/Amigas habe ich längst verschrottet, und so alte DRAMs noch zu 
kaufen ist nicht so einfach...
Hat jemand von euch noch zwei DRAM-Chips übrig?
Vielleicht hat jemand auch noch eine oder zwei Platinen zu verkaufen?

Gruß Jens

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Hallo Jens,
RAM's solltest du hier bekommen:
http://www.demotronic.net/
Vielleicht hat Peter auch noch welche übrig?
Eine Platine (Varinate 3 - Stick) hätte ich noch mit zugehörigem SD 
Slot.
Ansonsten noch etwas warten, ich bin gerade an der neuen Hardwareversion 
mit einem Arduino Pro Mini als CPU-Board.
Joe

von Markus G. (thechief)


Lesenswert?

Jens schrieb:
> bin grade auf euer interessantes Projekt gestoßen.
> Bei der Suche nach den RAM's hatte ich bisher kein Glück, die alten
> PCs/Amigas habe ich längst verschrottet, und so alte DRAMs noch zu
> kaufen ist nicht so einfach...
> Hat jemand von euch noch zwei DRAM-Chips übrig?
> Vielleicht hat jemand auch noch eine oder zwei Platinen zu verkaufen?
>
> Gruß Jens

Hallo Jens,

ich selbst kann Dir leider nichts anbieten, aber ebay ist Dein Freund 
z.B:

http://www.ebay.de/itm/DRAM-ICs-72-x-256Kbyte-gesockelt-Board-18MB-Classic-/251037082536?pt=Bauteile&hash=item3a72f9e3a8

Ich meine nicht die dort angebotene Platine (zu teuer / zu viele 
Bausteine für Deinen Zweck) sondern das was der Verkäufer weiter unten 
noch schreibt:

Voraussichtlich nächste Woche biete ich noch viel mehr Schaltkreise aus 
meiner Hobbyzeit der
70er bis 90er- Jahre an. Die Aufbereitung zur Einstellung ist jedoch 
sehr aufwändig/zeitintensiv,
weshalb ich gegenwärtig eher überlege, das Folgende in Pakete 
zusammenzustellen.
Hier ein vorläufiger Überblick (Typenvielfalt und Daten werden noch 
erweitert):

...
4    HY   534256   S-10   Hynix   CMOS
4    HY   53C256   -LS80   Hynix   CMOS
36   HY   53C256   LS-80   ?   RAM- Board
...

Der oben genannten Chips wären z.B. passende DRAM's für das hier 
beschriebene Projekt.
Entscheidend ist, das die DRAM's 4bit x 256kbit organisiert sind, nicht 
zu verwechseln mit 1bit x 256kbit wie z.B. HYB 41256-10 Siemens DRAM!

Ich würde den Verkäufer einfach mal anschreiben...


Viele Grüße

Markus

von Osche R. (Gast)


Lesenswert?

Der verkauft auch HAL16V8.

Wenn ich mich recht erinnere, dann haben HAL eine vom Hersteller 
festgelegte ROM-Maske. Im Gegensatz zu PAL (mit Zener-Fuse) und GAL (mit 
EEPROM) ist da nix mit wiederverwenden.

von Peter Sieg (Gast)


Lesenswert?

Ram's V53C104P10L habe ich noch welche da.
Max. 20MHz und ggf. noch Wartezyklen..

Peter

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Dabei viel mir auf, das
> in unsrer Version SUBMIT nicht richtig ausgeführt wird. M80 und L80
> werden einfach nicht gestartet. Auf AltairSIMH läuft es jedoch
> problemlos

Das habe jetzt endlich mal getestet und ist hier leider genauso.
Aber früher ging das mal...

Vorläufig kann man DO.COM (bzw. SuperSUB), z.B. aus obigem 
Emulator-Paket nehmen, das sowieso besser ist.


Noch was anderes.
Da wir ja inzwischen auch Z80 können, wäre es auch interessant, einen 
der verbesserten BDOS-Clones zu installieren. Diese wiederum würden von 
einem Uhrenbaustein profitieren.
Da ich demnächst sowieso einige Bauteile bestellen will, möchte ich 
einen RTC mitbestellen. Welcher Chip ist denn hier so gängig/beliebt?
Beim Reichelt käme wohl nur der DS1307 in Frage.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Der DS1307 ist sehr weit verbreitet und sicherlich nicht die 
schlechteste Wahl.

Ich hatte mir die Tage auch schon mal Gedanken darüber gemacht wie I2C 
zu benutzen ist. Es könnten ja dann dort ein 8 Bit I/O Port oder A/D 
oder oder angeschlossen werden. Die BIOS Funktionen 05 - Stanzer und 06 
- Lesereingabe werden doch eigentlich nie mehr benötig. Diese Funktionen 
könnten doch eigentlich genutzt werden um auf den I2C zu schreiben bzw. 
vom I2C zu lesen. Wir müßten uns nur noch ein ordentliches Protokoll 
einfallen lassen.

An andere BDOS-Clones habe ich auch schon gedacht CP/M 3.0 ...

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Der DS1307 ist sehr weit verbreitet und sicherlich nicht die
> schlechteste Wahl.

Na, dann kommen mal >= 2 [1] auf die Liste.

> oder oder angeschlossen werden. Die BIOS Funktionen 05 - Stanzer und 06
> - Lesereingabe werden doch eigentlich nie mehr benötig. Diese Funktionen
> könnten doch eigentlich genutzt werden um auf den I2C zu schreiben bzw.

Ich habe noch einen Stapel Lochkarten. Aber leider keine Stanze. ;-)

Imho greifen alle gängigen CP/M Kommunikationsprogramme direkt auf die 
Ports der seriellen Schittstelle zu, weil die CP/M-Kanäle kaum zu 
gebrauchen sind.
Man könnte z.B. im AVR-Teil (damals) gängige UARTs emulieren.

> An andere BDOS-Clones habe ich auch schon gedacht CP/M 3.0 ...

CP/M 3 ging vorher auch schon, da es mit 8080 auskommt. Macht meiner 
Meinung nach ohne Banking wenig Sinn. Die Alternativen leisten dann 
mehr, bei weniger RAM-Verbrauch.

[1] Da ich z.Zt. dabei bin, meine gute alte HD64180 Karte [2] 
wiederzubeleben, soll die natülich nicht zurück stehen müssen. 
Allerdings wäre dafür ein RTC mit SPI besser.

[2] Beitrag "Re: z80 system"

von Jens K. (camenzind)


Lesenswert?

Hallo Peter,

ist der V53C104P10L auf dem CP/M-Stick einsetzbar? Wenn ja hätte ich 
Interesse an zwei oder vier Stück davon, kannst du mir vielleicht per PM 
an jenskauf(at)gmx.net schreiben?

Gruß Jens

von Peter Sieg (Gast)


Lesenswert?

@Jens. Ja. Laufen 2 Sticks damit. Aber max. 20MHz.

Schicke mir ne Mail an peter.sieg1 (at) gmx (dot) de

Peter

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

CP/M Lino

CP/M Shield für Arduino Pro Mini
- Größe 20 mm x 50 mm
- Mini USB B
- Micro SD
- 2 MB RAM

Wollen wir?

von Peter Sieg (Gast)


Lesenswert?

Sieht schick aus!
USB Anbindung wie? FT232RL?
Welcher Ramchip (1 oder 2?)? Bezugsquelle?
Gibts passende Arduino Pro Mini über ebay oder wo?

Ansonsten wäre ich mit 2 Stück dabei (je nach Preis auch 3-5).

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

USB über FT232RL, die Variante über den MCP2200 würde noch einen 
externen Quarz benötigen.
DRAM ist ein HM51W17805 (16M EDO RAM 2-Mword x 8 Bit)
Als Arduino Pro Mini würde auch ein DFRobot Pro Mini V1.2 5V 16MHz 
Arduino Compatible gehen (9,9 €) allerdings müßte bei allen Varianten 
(auch China) ein 3.3V Regler eingesetzt werden.
Platine derzeit 4 Lagen, es geht sehr eng zu! bei einer Abnahmemenge von 
10 liegt der Preis ca. um 11€.
Joe

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Nachtrag:
16 RAM's habe ich derzeit. Eine Quelle ist auch hier:
http://www.demotronic.net/
Stückpreis 1,95€

von Hannes (Gast)


Lesenswert?

Hallo Leute,
man ist der Tread riesig. Folgendes Problem: Ich habe einen AVR Stick 
(der aus diesem Forum) geschenkt bekommen. Da ist allerdings eine alte 
Version an Software drauf. Nun lese ich hier etwas von FAT 16 und Z80 
Unterstützung. Wie bekomme ich das alles auf den Stick? Dem Atmel ein 
binärfile reinschiessen bekomme ich hin, wie gehts dann mit der SD 
Karte? Gibt es da eine Anleitung oder kann mir einer erklären wo ich die 
Files wie draufspielen muss?
Gruß
Hannes

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Hallo Hannes,

SD Card:
Deine SD Card mit Fat16 formatieren und dann die Imagefiles 
CPMDSK_A.IMG, CPMDSK_B.IMG und CPMDSK_C.IMG aus
http://www.mikrocontroller.net/articles/AVR_CP/M
auf die Karte kopieren.

AVR Binärfile:
Aktuelle Version von hier laden
http://cloudbase.homelinux.net/viewvc/avr-cpm/avrcpm/tags/3.0/
übersetzen und auf den AVR bringen.

Bei Fragen fragen.

Joe

von Jens K. (camenzind)


Lesenswert?

Um die AVR-Firmware neu übersetzen (Taktfrequenz 20 statt 24 MHz) habe 
ich versucht, die Batchdatei AVRBuild.bat im Ordner der Sourcen 
auszuführen, ich erhalte folgende Meldungen:
---
AVRASM: AVR macro assembler 2.1.42 (build 1796 Sep 15 2009 10:48:36)
Copyright (C) 1995-2009 ATMEL Corporation

D:\Jens Privat\Z80\Software\AVR\avr\init.asm(44): error: ldiw: Unknown 
instructi on or macro
D:\Jens Privat\Z80\Software\AVR\avr\init.asm(44): error: syntax error, 
unexpected ',', expecting ':'

Assembly failed, 2 errors, 0 warnings
---

Wie sind die Sourcen zu compilieren, was ist ggf. vorher zu 
installieren?

Gruß Jens

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Es sieht aus aus ob bei dir die Datei macros.inc nicht geladen wird.
In der avrcpm.asm müßte folgendes stehen:

.include "config.inc"
.include "svnrev.inc"
.include "macros.inc"

Den richtigen Prozessor hast du gesetzt?  -Datmega328P

von Leo C. (rapid)


Lesenswert?

Jens Kaufmann schrieb:
> Um die AVR-Firmware neu übersetzen (Taktfrequenz 20 statt 24 MHz) habe
> ich versucht, die Batchdatei AVRBuild.bat im Ordner der Sourcen
> auszuführen, ich erhalte folgende Meldungen:

In den Sourcen gibt es keine Batchdatei.
Es gibt allerdings ein Makefile, das auch unter Windows funktioniert, 
wenn GNU Make installiert ist.

Wo es die Sourcen gibt, hat Joe im Artikel direkt über Deinem gepostet.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> In den Sourcen gibt es keine Batchdatei.

Ich nehme an, dass ist die Batchdatei die ich mit den Quellen auf die 
SD-Card gespielt hatte. Entweder wie Leo C. schon sagte das Makefile 
verwenden oder im AVR-Studio das Projekt avrcpm.aps öffnen und unter 
Project | Assembler Options die zeile
-DF_CPU=20000000 -DBAUD=57600 -Datmega328P -DDRAM_8BIT
eingeben.

@ Leo C.
Mich würde mal interessieren, ob der DS1307 auch mit 3.3V I2C läuft, 
spezifiziert ist er ja nur für 5V. Auch für weitere IC's (IO, AD, DA 
...) ist es interessant. Ansonsten müßte ein PCA9306 oder ähnliches 
verwendet werden.
Mit der UART Emulation für I2C könnte ich mich auch anfreunden. Dann 
kann der I2C Bus mit Kermit oder ähnlicher Software angesprochen werden.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Ich nehme an, dass ist die Batchdatei die ich mit den Quellen auf
> die SD-Card gespielt hatte.

Dann schaue ich mir die mal an.

> Mich würde mal interessieren, ob der DS1307 auch mit 3.3V I2C läuft,
> spezifiziert ist er ja nur für 5V.

Ups, das hatte ich auch übersehen. Das Datenblatt meint:
"When a 3-volt battery is connected to the device and VCC is below 1.25 
x VBAT, reads and writes are inhibited."

Mit einer 2,5Volt Batterie würde es wahrscheinlich funktionieren...

> Auch für weitere IC's (IO, AD, DA ...) ist es interessant. Ansonsten
> müßte ein PCA9306 oder ähnliches verwendet werden.

Ähnliches wäre z.B.: AN79055 "Bi-directional level shifter for I²C-bus 
and other systems." (2 FETs und 2 zusätzliche Pullups.)
https://www.google.com/search?q=%22AN97055%22

Beim Reichelt habe ich noch den PCF8583 gefunden. Größerer 
Stromverbrauch, kein Batterie-Management, aber billiger und *"operating 
supply voltage: 2.5 V to 6 V"*

Für mein anderes Projekt (HD64180) gehen die aber beide nicht, da ich 
dort kein I2C habe.

von Peter Sieg (Gast)


Lesenswert?

Joe G. schrieb:
> USB über FT232RL, die Variante über den MCP2200 würde noch einen
> externen Quarz benötigen.
> DRAM ist ein HM51W17805 (16M EDO RAM 2-Mword x 8 Bit)
> Als Arduino Pro Mini würde auch ein DFRobot Pro Mini V1.2 5V 16MHz
> Arduino Compatible gehen (9,9 €) allerdings müßte bei allen Varianten
> (auch China) ein 3.3V Regler eingesetzt werden.
> Platine derzeit 4 Lagen, es geht sehr eng zu! bei einer Abnahmemenge von
> 10 liegt der Preis ca. um 11€.
> Joe

Hmm.. ich werde (für mich) das Gefühl nicht los, das wir dann mit dem 
'USB Stick' Konzept besser dran sind.. was meinen die anderen..

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

War nur ein Vorschlag Peter...
ZSDOS Portieren ist ja auch eine nette Aufgabe.

Joe

von Peter Sieg (Gast)


Lesenswert?

@Joe: Die/Deine Arbeit an sich ist klasse!!
Nur wenn halt alles so mal zusammen rechne.. entschwinden z.Z alle 
Vorteile..

Eine separate Platine - evtl. direkt für CP2102 Dongle Anschluß.. geht 
evtl. etwas größer mir Bestückung von beiden Seiten.. und viel 
günstiger..
Atmega328P+DRAM+Micro-SD+Hühnerfutter

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Hmm.. ich werde (für mich) das Gefühl nicht los, das wir dann mit dem
> 'USB Stick' Konzept besser dran sind.. was meinen die anderen..

Definiere "wir".

Peter Sieg schrieb:
> Nur wenn halt alles so mal zusammen rechne.. entschwinden z.Z alle
> Vorteile..

Also weiter oben hast Du noch ganz anders argumentiert.

Könnte ja sein, daß das Ding in der "Arduino-Szene" richtig einschlägt.
(Zumindest hier merkt aber leider bisher nichts davon.)

Joe G. schrieb:
> ZSDOS Portieren ist ja auch eine nette Aufgabe.

Genau. Super.

von Hans G. (weakbit)


Lesenswert?

Nils S. schrieb:
> ... und eine MMU, FPU von Vorteil, 32 Bit Arch. (16  wüde gehen), und
> und und

Ohne MMU ist ein Kernel zwar auch realisierbar aber der Kern lebt und 
stirbt mit der MMU den das ist es was Ihn so stabil macht. Die Hardware 
MMU ist es was ein Linux System so gut laufen lässt. 
Waschmaschinenprozessoren ohne MMU sind zwar auch möglich nur das geht 
eben von Zeit zu Zeit schief wenn da irgend ein Programm meint es muss 
ins RAM posten. Abgesehen davon das ein ARM9 oder ARM11 sehr wenig 
kostet und eben diese MMU schon hat. Warum implementierst Du das CP/M 
System nicht auf dem ARM9/11? Der ist schon von vorne herein 32bit breit 
und mit dem 3S2440 von Samsung der in einem FriendlyARM eingebaut ist 
sehr sehr kostengünstig (die Hardware kostet ca. USD60 - 80,- inkl 3,5" 
Schirm) uf den kann man bereits ein Keyboard und Netzwerk anstecken.
MfG
weakbit

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Gibt es eigentlich einen vernünftigen Grund warum wir beim CP/M mit dem 
62K Speichermodell arbeiten?

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> Gibt es eigentlich einen vernünftigen Grund warum wir beim CP/M mit dem
> 62K Speichermodell arbeiten?

Ja, wurde von sprite_tm so "geliefert", ... und Trägheit.

Um das zu änderen braucht man eine möglichst vollständige 
CPM-Distribution. Bei uns fehlt movcpm.com mit der zugehörigen 
Seriennummer.

Oder man generiert alles neu aus den im Netz vorhandenen Sourcen.

Vor ein paar Wochen hatte ich mal mit movcpm angefangen, bin aber wieder 
davon abgekommen. Im Anhang ist das Ergebnis. Das movcpm finde ich z.Zt. 
nicht, meine Notizen auch nicht. Im Makefile und in CFGACPM.LIB die 
gewünschte Spreichergröße setzen.

64k-System macht aber mit unseren großen Diskimages wenig Sinn, da diese 
für alv und csv viel Platz beanspruchen. (Man kann das beobachten, in 
dem man in avr/config.inc HEAP_DEBUG auf 1 setzt.)

von Leo C. (rapid)


Lesenswert?

SUBMIT

hatte ich mir gestern Abend nochmal angeschaut.
Joe, falls der Submit-Job "nur" dann nicht ausgeführt wird, wenn er 
nicht auf Laufwerk A gestartet wird, handelt es sich (leider) um das 
dokumentierte Verhalten von CP/M 2.x. [1]:
1
 "If the SUBMIT function is performed on any disk other than 
2
drive A, the commands are not processed until the disk is inserted 
3
into drive A and the system reboots."
 It's not a bug, ...

Beim simh Altair 8800 Emulator funktioniert Submit auch auf anderen 
Laufwerken, weil dort dafür (und einige andere Kleinigkeiten) im BIOS 
Patches vorhanden sind, die bei jedem Warmstart an CCP und BDOS 
appliziert werden.

Man kann sich das Patchen aber sparen, wenn man Submit durch eine der 
zahlreich vorhandenen Alternativen (DO, SUPERSUB, JOB, ...) ersetzt.


[1] http://www.cpm.z80.de/manuals/archive/cpm22htm/ch1.htm#Section_1.6.7

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Um das zu änderen braucht man eine möglichst vollständige
> CPM-Distribution.

Ich habe mal das CCP und das BDOS von ZSDOS übersetzt und statt des 
CPM.SYS von sprite_tm eingesetzt. ZSDOS läuft nun auf unserem System. 
Jetzt müßte natürlich noch das BIOS angepaßt werden. Für alle die selbst 
mal damit experimentieren wollen:

cpm.bin - beinhaltet das neue ZSDOS
CCP.BIN - CCP Binärcode für das 62K Modell
ZSDOS.BIN - BDOS Binarcode für das 62K Modell
CCP.MAC - CCP Quelle
ZSDOS.MAC - BDOS Quelle
CPMDSK_A.IMG - Bootfile

Um cpm.bin zu bilden müssen bei dd die Speichermodelladressen 
berücksichtigt werden.
dd  conv=sync bs=128  count=1 if=ipl.bin > cpm.bin
dd  conv=sync bs=128 count=16 if=CCP.BIN >> cpm.bin
dd  conv=sync bs=128 count=28 if=ZSDOS.BIN >> cpm.bin
dd  conv=sync bs=128  count=6 if=bios.bin >> cpm.bin

Viel Spaß beim ausprobieren!
Joe

A>ddt
DDT VERS 2.2
-de400
E400 00 00 00 00 00 00 C3 9B E4 4C E7 4C E7 4C E7 4C .........L.L.L.L
E410 E7 F1 F1 00 00 6D DD F1 DD F1 DD F1 DD F1 DD F1 .....m..........
E420 DD F1 DD F1 00 00 17 01 00 00 00 00 00 00 80 00 ......;.........
E430 00 00 15 F5 7B F4 23 F5 32 F5 42 F5 1A 00 03 07 ....{.#.2.B.....
E440 00 F2 00 3F 00 C0 00 10 00 02 00 02 20 00 00 00 ...?............
E450 00 00 00 00 02 00 40 00 CD E3 00 0F 00 20 E4 20 ......@.........
E460 E4 A5 E3 5A 53 44 4F 53 20 31 2E 31 20 43 6F 70 ...ZSDOS 1.1 Cop
E470 79 72 69 67 68 74 20 28 63 29 20 31 39 38 37 2C yright (c) 1987,
E480 38 38 20 6F E5 BA E6 83 E6 6F E5 BA E6 83 E6 20 88 o.....o......
E490 00 20 E4 20 00 BB E8 E6 E7 00 00 AF 47 6F 67 22 ............Gog"
E4A0 4C E4 22 4E E4 ED 73 61 E4 31 9B E4 DD E5 D5 DD L."N..sa.1......
E4B0 E1 DD 22 5D E4 DD 22 5F E4 21 E6 E7 E5 79 32 4B .."].."_.!...y2K

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Und hier die Files

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Leo C. schrieb:
> Man kann sich das Patchen aber sparen, wenn man Submit durch eine der
> zahlreich vorhandenen Alternativen (DO, SUPERSUB, JOB, ...) ersetzt.

Leider bricht DO oder SUPERSUB auch mit einem Fehler ab, M80 und L80 
einzeln benutzt geht jedoch (Die Datein sind auch auf der HD).

D>do makecpm
SuperSUB V1.1
Memory full error on line number: 2501

Anbei noch alle Datein um sich ein komplettes ZSDOS zu basteln. Das 
Diskimage ist wie immer im Altairformat.
Joe

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Joe, versuch's mal hiermit.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Joe, versuch's mal hiermit.

Danke! Es geht damit. Doch warum? Liegt der Unterschied wirklich nur 
darin, dass dein File genau 256 Byte lang ist?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@ Leo C.
Ok, es war ^Z

von Leo C. (rapid)


Lesenswert?

> Ok, es war ^Z

Es hätte mich auch gewundert, wenn Du nicht drauf gekommen wärst. Ich 
war aber gerade dabei, eine längere Antwort zu tippen. Vielleicht 
interessierts ja noch jemanden.

Die 256 Byte sind eher Zufall. Ich habe mit ddt den Sektor nach dem Text 
mit 01AH (== ^Z == CP/M End Of File) aufgefüllt. Die Datei habe ich 
danach mit SAVE 1 <dateiname> gespeichert.

SuperSub scheint beim Einlesen das physikalische Dateiende nicht zu 
beachten, und versucht dann den gesamten Arbeitsspeicher als Text zu 
interpretieren, bzw. bis ein EOF-Zeichen erkannt wird.

CP/M 3 (und ZSDOS glaube ich auch) können den Füllgrad des letzten 
Sektors speichern (und damit die exakte Dateilänge), aber wahrscheinlich 
macht kein CP/M-Programm davon Gebrauch. CP/M Texteditoren speichern 
natürlich immer (mindestens) ein 01Ah am Textende.

Vielleicht hat Dein PC-Texteditor ja eine Möglichkeit, Steuerzeichen 
direkt einzugeben. Ansonsten: echo, dd, copy, cat, ...

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Vielleicht hat Dein PC-Texteditor ja eine Möglichkeit

Ich nehme nun WinVi...

@alle
Um die Vorteile des ZSDOS nun auch wirklich nutzen zu können, braucht es 
nun der Uhr. Vielleicht können wir uns auf eine gemeinsame 
Hardwarevariante verständigen. Anbei mein Vorschlag. Die Uhr (DS1307) 
ist über einen Pegelwandler am I2C Bus angeschlossen. Weiterhin ist am 
Bus ein PCF8574 (8 Bit I/O). Somit hätte man neben der Uhr noch die 
Möglichkeit einen vollständigen 8 Bit Port zu benutzen (LCD, Tastatur, 
Led, wie auch immer). Außerdem können ja weitere I2C Geräte 
angeschlossen werden.
Kommentare, Vorschläge?
Joe

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:

> Um die Vorteile des ZSDOS nun auch wirklich nutzen zu können, braucht es
> nun der Uhr.

Um die Zeit bis zur funktionierenden RTC zu überbrücken, bastel ich 
gerade an der Interrupt-Uhr.

> Die Uhr (DS1307)
> ist über einen Pegelwandler am I2C Bus angeschlossen.

2. Stromversorgung und Pegelwandler wegen eines unpassenden 
Uhrenbausteins?
Wie wärs mit PCF8583 oder DS1337 + 2 Dioden?

> Weiterhin ist am
> Bus ein PCF8574 (8 Bit I/O). Somit hätte man neben der Uhr noch die
> Möglichkeit einen vollständigen 8 Bit Port zu benutzen (LCD, Tastatur,
> Led, wie auch immer). Außerdem können ja weitere I2C Geräte
> angeschlossen werden.

Was könnte man denn noch anschließen wollen?
Drucker vielleicht? Dann bräuchte man 2. PCF8574 oder zB. PCA9555.
2. Serielle? Gibs I2C-UARTS? 2. Software-UART stelle ich mir schwierig 
vor.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ok, der PCF8574 geht auch bei 3.3V und ist bei Reichelt als DIL und Smd 
verfügbar. PCF8574 und PCA9555 gehen auch bei 3.3V und haben 5V 
tolerante Eingänge. Der Pegelwandler kann also entfallen.

Bei der Erweiterung dachte ich in Richtung Anwendung Arduino. Ein 
embedded System (ich hab das CP/M gerade geadelt) lebt ja von externer 
Hardware. Mit 8 oder 16 Bit I/O könnte der potentielle Nutzer schon eine 
Menge anschließen. Ideal wäre die Ansteuerung wie ich schon mal 
vorgeschlagen habe über die ungenutzten Biosfunktionen Reader.

Ersetzt man den mega328p durch die smd Version, bekommt man noch zwei 
zusätzliche Pins in Form von 2 AD-Wandlern spendiert (ADC6 und ADC7).
Mein derzeitiger Entwurf sieht gerade so aus (pdf). Er hat die Maße 
100mm x 70mm und passt damit genau in ein Fischer Alu-Gehäuse (AKG 7124 
ME). Das System beinhaltet neben der USB ein VT100 Terminal mit VGA und 
Tastaturanschluss den zwei ADC + I2C, sowie 8 Bit I/O.
Eine ähnliche Variante hatte ich schon mal vorgestellt. Sie ist hier 
nicht sosehr auf Interesse gestoßen. Macht jedoch nichts, die neue baue 
ich mir selber auf. Ich glaube im Gegensatz zum embedded Linux 
(raspberry pi u.ä.) kann ein potentieller Interessent (Schüler, 
Studenten, wie auch immer) damit ein komplettes System komplett selber 
aufbauen, sein CP/M (Kernel) selbst konfigurieren und zusammenstellen. 
Das System ist wirklich einfach und überschaubar.
Joe

von Markus G. (thechief)


Lesenswert?

Peter Sieg schrieb:
> Joe G. schrieb:
>> USB über FT232RL, die Variante über den MCP2200 würde noch einen
>> externen Quarz benötigen.
>> DRAM ist ein HM51W17805 (16M EDO RAM 2-Mword x 8 Bit)
>> Als Arduino Pro Mini würde auch ein DFRobot Pro Mini V1.2 5V 16MHz
>> Arduino Compatible gehen (9,9 €) allerdings müßte bei allen Varianten
>> (auch China) ein 3.3V Regler eingesetzt werden.
>> Platine derzeit 4 Lagen, es geht sehr eng zu! bei einer Abnahmemenge von
>> 10 liegt der Preis ca. um 11€.
>> Joe
>
> Hmm.. ich werde (für mich) das Gefühl nicht los, das wir dann mit dem
> 'USB Stick' Konzept besser dran sind.. was meinen die anderen..
>
> Peter

Hallo zusammen,

ich werde, für mich persönlich, mit meinem "USB Stick" weiter arbeiten.

@Joe: Aber meinen ausdrücklichen Respekt, wie Du immer die Layouts hier 
zauberst... :-)
Und vielen Dank für den Anstoss zur ZSDOS Portierung! Klasse!


Viele Grüße

Markus

von Markus G. (thechief)


Lesenswert?

Leo C. schrieb:
> Joe G. schrieb:
>
>> Um die Vorteile des ZSDOS nun auch wirklich nutzen zu können, braucht es
>> nun der Uhr.
>
> Um die Zeit bis zur funktionierenden RTC zu überbrücken, bastel ich
> gerade an der Interrupt-Uhr.
>
>> Die Uhr (DS1307)
>> ist über einen Pegelwandler am I2C Bus angeschlossen.
>
> 2. Stromversorgung und Pegelwandler wegen eines unpassenden
> Uhrenbausteins?
> Wie wärs mit PCF8583 oder DS1337 + 2 Dioden?
>
>> Weiterhin ist am
>> Bus ein PCF8574 (8 Bit I/O). Somit hätte man neben der Uhr noch die
>> Möglichkeit einen vollständigen 8 Bit Port zu benutzen (LCD, Tastatur,
>> Led, wie auch immer). Außerdem können ja weitere I2C Geräte
>> angeschlossen werden.
>
> Was könnte man denn noch anschließen wollen?
> Drucker vielleicht? Dann bräuchte man 2. PCF8574 oder zB. PCA9555.
> 2. Serielle? Gibs I2C-UARTS? 2. Software-UART stelle ich mir schwierig
> vor.

Hallo zusammen,

bezüglich des Uhrenbausteins tendiere ich zum PCF8583 wie von Leo 
vorgeschlagen, hat auch noch 240 Byte RAM als "Dreingabe" kann man 
bestimmt einmal gebrauchen... ;-)

Oder gibt es Etwas das uns veranlassen sollte explizit einen DS1337 zu 
nutzen?

Die I2C Bus-Erweiterung per PCF8574 o.ä. finde ich auch super!

In Zusammenhang mit meinem "AVR/CPM-Stick" denke ich gerade an eine 
"Sandwich"-Platine als Aufsatz auf den AVR-Sockel des AVR/CPM-Sticks.

Somit hätte ich dann beliebig viel Platz für Erweiterungen...

Just my 2 cents


Viele Grüße

Markus

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

> bezüglich des Uhrenbausteins tendiere ich zum PCF8583 wie von Leo
> vorgeschlagen, hat auch noch 240 Byte RAM als "Dreingabe" kann man
> bestimmt einmal gebrauchen... ;-)

Das RAM könnte man zum bisher ungenutzten EEPROM legen. ;-)

> Oder gibt es Etwas das uns veranlassen sollte explizit einen DS1337 zu
> nutzen?

Der PCF8583 ist schon etwas älter und wohl auch einige Designschwächen. 
Ein besserer Nachfolger ist der PCF8563, der aber schwieriger zu 
bekommen ist. Ob der DS1337 irgend einen Vorteil hat, kann ich jetzt 
auch nicht sagen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Ein besserer Nachfolger ist der PCF8563, der aber schwieriger zu
> bekommen ist

Mir ist es egal, der PDF8563 ist u.a. bei Farnell zu haben, also kein 
Problem.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Mir ist es egal, der PDF8563 ist u.a. bei Farnell zu haben, also kein
> Problem.

Mir ist's auch egal. Die Softwarunterschiede sind gering. Man kann 
sicher mit einem Treiber beide ansprechen. Leider sind sie nicht ganz 
pinkompatibel. Aber wenn man an Pin 3 (A0/INT) und 7 (INT/CLKOUT) je 
einen Pullup vorsieht, müßten beide Chips damit klarkommen. Dann kann 
jeder seinen Wunschchip einstecken.

Ich habe vor, bei Reichelt einen PCF8583 zu bestellen. Für mein anderes 
Projekt möchte ich einen DS2417 (1-wire) nehmen. Ginge hier auch. ;-)

von Hannes (Gast)


Lesenswert?

Hallo Joe,
deine Anweisungen:
# Hallo Hannes,

# SD Card:
# Deine SD Card mit Fat16 formatieren und dann die Imagefiles
# CPMDSK_A.IMG, CPMDSK_B.IMG und CPMDSK_C.IMG aus
# http://www.mikrocontroller.net/articles/AVR_CP/M
# auf die Karte kopieren.
hat geklappt konnte ich mit meinem AVR auch lesen


# AVR Binärfile:
# Aktuelle Version von hier laden
# http://cloudbase.homelinux.net/viewvc/avr-cpm/avrc...
# übersetzen und auf den AVR bringen.

AVR Trunk herunter geladen und versucht zu übersetzen...
(Windows XP AVR Studio 4) Fehler zu wenig Speicher für das Programm im 
Speicher des ATMega 168 ... also das ganze für einen 328er... nach 
einigen Kämpfen auch geschafft. (aktuell AVR Studio 5)
# Bei Fragen fragen.
Wie gesagt habe ich den AVR CP/M Stick
Welche Einstellungen müssen in den Files gemacht werden? Angabe des RAM 
(2 X 4256er! Wie setzt ihr die config bits? Bei mir zuckt nichts....

# Joe

Gruß
Hannes

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Hannes

so sollte es gehen.
Als ASM Options im AVR Studio:

-DF_CPU=20000000 -DBAUD=115200 -Datmega328P -DDRAM_8BIT

Takt und Baudrate natürlich an das eigene System anpassen.

In der config Datei sollte folgedes stehen:

#define K 1024
#define M 1024*K
#define RAMSIZE 256*K*4  /* 1 chip 256Kx4 */
;#define  RAMSIZE   4*M*4 * 2  /* 2 chips 4Mx4  */

#define EM_Z80  1    /* Emulate Z80 if true */

#ifndef FAT16_SUPPORT
  #define FAT16_SUPPORT 1  /* Include Support for FAT16 Partitions */
#endif        /*  which may contain CP/M image files. */
#define RAMDISKCNT    1    /* Number of RAM disks */
#define RAMDISKNR     'I'-'A'  /* Drive "letter" for first RAM disk */

#define PARTID 0x52    /* Partition table id */
        /* http://www.win.tue.nl/~aeb/partitions/partition_types-1.html 
*/
#define IPLADDR  0x2000    /* Bootloader load address */

#define DRAM_WAITSTATES 1  /* Number of additional clock cycles for dram 
read access */
#define REFR_RATE   64000       /* dram refresh rate in cycles/s. */
        /* Most drams need 1/15.6µs. */
#define  RXBUFSIZE 128    /* USART recieve buffer size. Must be power of 
2 */
#define  TXBUFSIZE 128    /* USART transmit buffer size. Must be power 
of 2 */


#if EM_Z80
  #define CPUSTR "Z80"
#else
  #define CPUSTR "8080"
#endif

.equ BOOTWAIT      = 1
.equ MEMTEST       = 1
.equ MEMFILL       = 1
.equ MMC_DEBUG     = 0    /* Increase for more debugging */
.equ FAT16_DEBUG   = 0
.equ FAT16_RWDEBUG = 0
.equ FAT16_DBG_FAT = 0
.equ DISK_DEBUG    = 0    /* Increase for more debugging */
.equ HOSTRW_DEBUG  = 0
.equ HEAP_DEBUG     = 0
.equ PORT_DEBUG    = 0
.equ INS_DEBUG     = 0
.equ STACK_DBG     = 0
.equ PRINT_PC      = 0

#define MMC_SPI2X  1    /* 0 = SPI CLK/4, 1 = SPI CLK/2 */

Nach dem Reset sollte dann im Terminalprogram (Baudrate und COM-Port 
natürlich korrekt einstellen) sofort die Bootmeldung kommen. Auch wenn 
die SD Card nicht richtig gelesen wird kommt auf jeden Fall eine 
Meldung. Wenn nicht, zunächst mal prüfen ob der AVR auch über die 
USB-Schnittstelle richtig sendet und ob überhaut was am PC ankommt.
Joe

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Als ASM Options im AVR Studio:
>
> -DF_CPU=20000000 -DBAUD=115200 -Datmega328P -DDRAM_8BIT
                    ************

Nimmst Du schon länger 115200? Ohne Probleme? Vielleicht sollte ich das 
auch mal umstellen. Ich glaube, über 57600 habe ich nie richtig 
getestet.

Hannes schrieb:
> # AVR Binärfile:
> # Aktuelle Version von hier laden
> # http://cloudbase.homelinux.net/viewvc/avr-cpm/avrc...
> # übersetzen und auf den AVR bringen.
>
> AVR Trunk herunter geladen und versucht zu übersetzen...

Bitte nicht irgendwas aus Trunk, sondern:
http://cloudbase.homelinux.net/viewvc/avr-cpm/avrcpm/tags/3.0/

Bitte auf den Link klicken, oder, wenn sich Kopieren nicht vermeiden 
läßt, darauf achten, daß der gesamte Link kopiert wird. Hier ist der 
vollständige Link:
1
http://cloudbase.homelinux.net/viewvc/avr-cpm/avrcpm/tags/3.0/
Rechts oben auf Download Tarball klicken. Es kommt dann ein 
tar.gz-Archiv, das sich mit Winzip, 7Zip, etc. entpacken läßt.

Viel Erfolg

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Nimmst Du schon länger 115200? Ohne Probleme?

Ja, schon seit der ersten Version. 57600 machen bei mir Probleme mit dem 
TP Editor. Der verschluckt bei schneller :-) Programmierung oder beim 
Editieren sonst schon mal ein Zeichen. 115200 hat noch nie Probleme 
bereitet.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Im trunk gibts jetzt eine Uhr.
Im Anhang ist der passende ZSDOS-Treiber, den ich noch nicht eingecheckt 
habe.

Nach einem Reset wird die Uhr z.Zt. mit Tag und Monat 0 initialisiert. 
Dies dürfte zu verschmerzen sein, da sie ja ohnehin gestellt werden muß.

Das ganze ist vorläufig. U.a. deshalb, weil ich die BCD/binär- und 
zurück-Wandlung noch vom Z80- in den AVR-Teil verlegen will. Außerdem 
behandelt sie 2100 noch irtümlicherweise als Schaltjahr.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@ Leo C.
SUPER Leo!

D>ldtim

ZSDOS Time Stamp Loader, Ver 1.1
  Copyright (C) 1988  by H.F.Bower / C.W.Cotrill


hallo welt ...loaded at D8D8H
 Clock is : AVRCPM Clock            0.1

D>td
 - 00, 2000  00:02:45
D>td 4/28/12 10:12:28
Press any key to set time
 Apr 28, 2012  10:12:28
D>td
 Apr 28, 2012  10:12:31
D>

Die Datei svnrev.inc fehlt noch im trunc.
bios.asm und ipl.asm würde ich langsam entsorgen, führt nur zu 
Verwirrungen.
Wollen wir wirklich cpm6X.sys einführen? Ich fand die Trennung von CCP 
und BDOS recht transparent.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Die Datei svnrev.inc fehlt noch im trunc.

Hier gibts das Tool, das die Datei erzeugt.
http://www.compuphase.com/svnrev.htm
Ich weiß noch nicht, ob ich das Ganze so lassen soll.


> bios.asm und ipl.asm würde ich langsam entsorgen, führt nur zu
> Verwirrungen.

Ja.

> Wollen wir wirklich cpm6X.sys einführen?

Nein. Das war/ist nur ein Ergebnis meiner Experimente mit movcpm. Da 
steckt auch noch viel Arbeit drin, weil die Distri, die Sprite_tm als 
Grundlage genommen hat, kein movcpm enthält, und die Seriennummern 
angeglichen werden mußten.

> Ich fand die Trennung von CCP und BDOS recht transparent.

Ja, in diese Richtung sollte es gehen. Ich würde "unser" CP/M gerne 
durch ein wirklich vollständiges ersetzen. ZSDOS dann als Alternative in 
einem weiteren Zweig.

Außerdem sollte irgendwann noch ein Buildscript kommen, das eine Release 
als Zip-Paket für Endanwender erzeugt. Das Paket sollte dann ein 
fertiges CP/M-Image enthalten, und keine Abhängigkeiten von SVN.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Leo C. schrieb:
> Außerdem sollte irgendwann noch ein Buildscript kommen, das eine Release
> als Zip-Paket für Endanwender erzeugt.

Hier ein kleines Script welches eine bootfähige cpm.bin Datei aus BIOS, 
CCP, BDOS und IPL erzeugt. Es kann vollständig in AltairSIMH gestartet 
werden und schreibt das File auch gleich wieder zurück. dd entfällt 
damit. Die Version ist derzeit nur für ZSDOS könnte aber sicher leicht 
für die Altair cp/m Version angepaßt werden.
Joe

von Hannes (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Joe,
irgendwie klappt bei mir nichts,hab mal meine fuses mit angehängt
Kannst du mir sonst mal ein Hexfile machen (20Mhz Quarz 38400Baud)?
Gruß
Hannes

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

@Hannes
sieht eigentlich ok aus. Hier das HEX File

@alle
Ich glaube in unsrer Berechnung der Speichergröße ist noch eine Altlast 
sprite_tm eingebaut. Derzeit wird der CCP Start im BIOS über

msize   equ  62  ;size of available RAM in k
bias   equ  (msize-20) * 1024
ccp   equ  3400h+bias  ;base of cpm ccp
bdos   equ  ccp+806h  ;base of bdos
bios   equ  ccp+1600h  ;base of bios

berechnet. Der Summand -20 bei der Biasberechnung steht auch so im CP/M 
Operating System Manual worauf sich sprite_tm ja bezieht.  Doch 
tatsächlich ist unser System nicht 20K sondern 22K groß. Das kann 
schnell nachgerechnet werden.
3400h Sysgen + 800h CCP + E00h BDOS + D00h Bios = 22k
User CCP fängt auch bei DC00h an. Hätten wir ein 62k System, so würde es 
bei D400h (62K – 9K) beginnen müssen. Im Bios müsste also msize auf 64 
und im bias (msize-22) * 1024 geändert werden. Mit dieser Korrektur 
könnte dann auch eine gemeinsame Speicherconfig für BIOS, CCP, und BDOS 
verwendet werden.
Lag ich völlig daneben oder ist es nur noch keinem aufgefallen?
Joe

von Hannes (Gast)


Lesenswert?

Hallo Joe,
Danke für die schnelle Hilfe... leider auch ohne Erfolg....mit dem 
Mega168 läuft alles....mit dem Mega328P geht nichts.....
muss da noch Hardware angepasst werden?? Speicher hab ich
2 mal NEC D424256C-80...
Was kann ich noch tun??
Gruß
Hannes

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Hannes schrieb:
> Was kann ich noch tun??

Versuche mal statt des externen Quarzes von 20 MHz erst den internen 
Takt von 8 MHz zu nehmen. Der Mega328P läuft in unserer Anwendung etwas 
außerhalb seiner Spezifikation (3.3V mit 20 MHz). Wenn er mit 8 MHz 
läuft, hast du den Fehler. Ich habe hier auch einen liegen, welcher nur 
bis 16 MHz geht.
Joe

laut Datenblatt:
• Speed Grade:
– 0 - 4MHz@1.8 - 5.5V, 0 - 10MHz@2.7 - 5.5.V, 0 - 20MHz @ 4.5 - 5.5V

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich hab mal das BIOS etwas nach der obigen Variante geändert. Die 
Speichergröße wird in dieser Variante nur noch in der MEMCFG.LIB 
angegeben. Damit kann nun eine beliebige (in den Grenzen des CP/M) 
Speicherkonfiguration übersetzt werden. Anbei ein Bsp. mit 53K Speicher.

CPM on an AVR, v3.1 r180
Testing RAM: fill...wait...reread...
Initing mmc...

A:FAT16 File-Image at: 8450, size: 018KB.
B:FAT16 File-Image at: 8959, size: 256KB.
C:FAT16 File-Image at: 8703, size: 256KB.
Partinit done.
Ok, Z80-CPU is live!

ipl
53k cp/m vers 2.2

A>dir
A: CPMSTAT  COM
A>cpmstat
- Logged -   ---- Records ----   - Tracks -   --- Capacity ---   --- TPA 
---
Drive User   Block Track Drive   Sys. Drive   Directory Drive    Bytes 
K
  A:     0       8    26  1944     2     77     64/  64   243K   46854 
45.76

- Operating System -
 Version  BDOS  BIOS
CP/M 2.2  B806  C600

A>

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:

> Ich glaube in unsrer Berechnung der Speichergröße ist noch eine Altlast
> sprite_tm eingebaut. Derzeit wird der CCP Start im BIOS über
>
> msize   equ  62  ;size of available RAM in k
> bias   equ  (msize-20) * 1024
> ccp   equ  3400h+bias  ;base of cpm ccp
> bdos   equ  ccp+806h  ;base of bdos
> bios   equ  ccp+1600h  ;base of bios

Sprite_tm ist daran eher unschuldig, glaube ich. Das war ein 
Mißverständnis meinerseits. Ich hatte msize vom altairz80 Emulator 
übernommen. Dort steht msize aber für die tatsächliche RAM-Größe und 
nicht für die "CP/M-Größe", für die ich es dann genommen habe.

> berechnet. Der Summand -20 bei der Biasberechnung steht auch so im CP/M
> Operating System Manual worauf sich sprite_tm ja bezieht.  Doch
> tatsächlich ist unser System nicht 20K sondern 22K groß. Das kann
> schnell nachgerechnet werden.

Das CP/M Handbuch definiert ein 20K System, bei dem der CCP auf 3400H 
liegt. Unser System ist demgegenüber um b=A800H verschoben, und damit 
per Definition ein 62K System.

http://www.cpm.z80.de/manuals/archive/cpm22htm/ch6.htm#Section_6.2

> 3400h Sysgen + 800h CCP + E00h BDOS + D00h Bios = 22k

> User CCP fängt auch bei DC00h an. Hätten wir ein 62k System, so würde es
> bei D400h (62K – 9K) beginnen müssen. Im Bios müsste also msize auf 64
> und im bias (msize-22) * 1024 geändert werden. Mit dieser Korrektur
> könnte dann auch eine gemeinsame Speicherconfig für BIOS, CCP, und BDOS
> verwendet werden.

Die 22 ist im CP/M-Handbuch nicht definiert. Hätten wir ein 64K System, 
würde unser BIOS auf F400H beginnen (CCP bei E400H).

> Lag ich völlig daneben oder ist es nur noch keinem aufgefallen?

Mir ists am letzten Freitag aufgefallen. Da hatte ich in den von Dir 
verwendeten ZRDOS-Sourcecode geschaut und msize (wieder-) entdeckt.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Ich hab mal das BIOS etwas nach der obigen Variante geändert. Die
> Speichergröße wird in dieser Variante nur noch in der MEMCFG.LIB
> angegeben. Damit kann nun eine beliebige (in den Grenzen des CP/M)
> Speicherkonfiguration übersetzt werden. Anbei ein Bsp. mit 53K Speicher.
1
bias   equ  (msize-22) * 1024 
2
ccp   equ  3400h+bias  ;base of cpm ccp
3
bdos   equ  ccp+806h  ;base of bdos
4
bios   equ  ccp+1600h  ;base of bios

Nix dagegen. Da wir von allen Systemteilen den Sourcecode haben, und 
damit auch alles auf beliebige Adressen linken können, brauchen wir 
diese Offset-Berechnung sowiso nicht mehr.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Da hatte ich in den von Dir
> verwendeten ZRDOS-Sourcecode geschaut und msize (wieder-) entdeckt.

Dann mache ich wieder eine -20 und damit ein 62k System daraus und 
ändere es im ZRDOS-Code.

Oh sehe gerade Doppelpost - welche Variante nehmen wir?

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Dann mache ich wieder eine -20 und damit ein 62k System daraus und
> ändere es im ZRDOS-Code.

Der Original-ZRDOS-Code braucht das eigentlich garnicht. (REL-File, 
Adresse wird erst beim Linken festgelegt.) Quelle hier:
http://www.gaby.de/ftp/pub/cpm/znode51/specials/zsdossrc/zsdos.htm

> Oh sehe gerade Doppelpost - welche Variante nehmen wir?

Im letzten Posting habe ich mir wohl mehrfach selber widersprochen.

Was wir nicht (mehr) brauchen, ist das "20K CP/M System" als Referenz.
Die Länge von CCP und BDOS könnte man auch anders bestimmen (Linker). 
Das ist aber unnötig aufwendig, weil die seit CP/M 2.0 immer gleich 
geblieben sind. Aus historischen Gründen bin ich dafür, ein CP/M-System, 
dessen BIOS bei F200H beginnt, weiterhin als 62K-System zu bezeichnen. 
Eine Definition für die RAM-Größe brauchen wir eigentlich nicht, da sich 
an unseren 64K voraussichtlich nichts ändern wird. Deine Frage habe ich 
jetzt immer noch nicht beantwortet. ;)

Vielleicht sollten wir die 3 Dateien MEMCFG.LIB, CFGACPM.LIB, AVRCPM.LIB 
zu einer einzigen zusammen fassen? Oder AVRCPM.LIB doch getrennt lassen, 
da sie keine harwareabhängingen Teile hat, und wirklich nur fürs BIOS 
gebraucht wird?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Klingt sinnvoll.
Ein System mit BIOS ab F200H bezeichnen wir mit 62K und MEMCFG.LIB 
CFGACPM.LIB fassen wir zu einer Datei zusammen. AVRCPM.LIB würde ich 
auch extra stehen lassen, da sie ja nur fürs BIOS zuständig ist.

von Markus G. (thechief)


Lesenswert?

Joe G. schrieb:
> Hannes schrieb:
>> Was kann ich noch tun??
>
> Versuche mal statt des externen Quarzes von 20 MHz erst den internen
> Takt von 8 MHz zu nehmen. Der Mega328P läuft in unserer Anwendung etwas
> außerhalb seiner Spezifikation (3.3V mit 20 MHz). Wenn er mit 8 MHz
> läuft, hast du den Fehler. Ich habe hier auch einen liegen, welcher nur
> bis 16 MHz geht.
> Joe
>
> laut Datenblatt:
> • Speed Grade:
> – 0 - 4MHz@1.8 - 5.5V, 0 - 10MHz@2.7 - 5.5.V, 0 - 20MHz @ 4.5 - 5.5V


Hallo zusammen,

beim durchsehen des Datenblatts zum ATmega328(P) ist mir ein 
vermeintlicher Unterschied zwischen den 168er / 328er mit und ohne P im 
Namen aufgefallen:

Ausschnitt aus dem Datenblatt:

http://www.alldatasheet.com/datasheet-pdf/pdf/444347/ATMEL/ATMEGA328.html


BRANCH INSTRUCTIONS

RJMP k Relative Jump PC ? PC + k + 1 None 2
IJMP Indirect Jump to (Z) PC ? Z None 2
JMP(1) k Direct Jump PC ? k None 3
RCALL k Relative Subroutine Call PC ? PC + k + 1 None 3
ICALL Indirect Call to (Z) PC ? Z None 3
CALL(1) k Direct Subroutine Call PC ? k None 4

Note: 1. These instructions are only available in ATmega168PA and 
ATmega328P.

Heißt das, dass dem 168er / 328er ohne P im Namen (=ältere Versionen) 
die absoluten Sprung-Befehle: JMP und CALL fehlen?

Falls ja, ist für mich nun klar, dass ich mir 328er mit P bestellen 
werde um endlich in den Genuss des Z80 Emulators zu kommen!

Hintergrund meiner Frage:

Ich habe es schon mehrmals geschafft, das ich im Code vorhandene RCALL's 
durch CALL's ersetzen musste, weil die Adressräume der relativen 
Sprungbefehle nicht mehr ausgereicht haben!


Viele Grüße

Markus

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Markus G. schrieb:
> Heißt das, dass dem 168er / 328er ohne P im Namen (=ältere Versionen)
> die absoluten Sprung-Befehle: JMP und CALL fehlen?

Nein, P steht für picoPower und damit für folgende technische Daten:
- True 1,8V supply Voltage
- Minimized leakage current
- Sleeping BOD
- ultra low power 32 kHz Crystal Oscillator
- Digital Input Disable Registers
- Power Reduction Register
- Clock Gating
- Flash Sampling
- Power Down Mode 0,1µA@1,8V
- Power Save Mode 0,6µA@1,8V

Die von dir zitierte Anmerkung 1 steht schon som im Datenblatt vom 
ATmega168.
Hast du mal die 8 MHz Variante ausprobiert?
Joe

von Leo C. (rapid)


Lesenswert?

Markus G. schrieb:
> Note: 1. These instructions are only available in ATmega168PA and
> ATmega328P.

Das ist zur Abgrenzung zu den kleineren Prozessoren ATmega48 und -88.
Diese brauchen die langen Sprungbefehle nicht, da sie mit RCALL/RJMP den 
gesamten Speicher erreichen können.

von Stefan S. (stefan1972)


Lesenswert?

Hallo zusammmen!

Ich habe von Joerg die Hardware V4 als Eagle Datei bekommen.
Mir ist aufgefallen, das Pin 22 (CE) und Pin 24 (OE) des AS6C4008 
jeweils /OE gemeinsam am ATMEGA 644P - Pin 3 anliegen ...


Bitte eine kleine Erklärung ob das ein Fehler ist oder gewollt.


Stefan

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Stefan Strauch schrieb:
> Bitte eine kleine Erklärung ob das ein Fehler ist oder gewollt.

Das war gewollt.

   /CE    /OE   /WE
R   L      L     H
W   L      X     L

von Stefan S. (stefan1972)


Lesenswert?

Danke Joe
OK. Jetzt ist es klar.

Ich denke genau so würde /OE auf GND funktionieren.

Stefan

von Franz N. (abnoname)


Lesenswert?

Hallo,

habe mir auch mal 2 Varianten aufgebaut und dafür auch ein anderes 
Platinenlayout erstellt zum selber ätzen bzw. fräsen. Ich verwende nur 
SMD Bauteile und DRAMs von alten SIMM bzw. PS2 Modulen. Das Layout kann 
ich bei Interesse hier rein stellen.

Ich habe mitten im Thread davon gelesen, dass es wohl ZSDOS Images gibt. 
Kann das jemand zur verfügung stellen?

Danke :)

VG
Franz

von Franz N. (abnoname)


Angehängte Dateien:

Lesenswert?

Hier noch ein Bild von meiner Platinenversion :)

VG

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

@Franz

Noch ein Aufbau, sehr schön! Welchen DRAM verwendest Du?

Anbei zwei ZSDOS Images.
CPMDSK_A.IMG ist ein bootfähiges Image mit einem Uhrentreiber von Leo C.
CPMDSK_D.IMG beinhaltet das komplette System im Altair HD Format. Hier 
sind auch die Quellen für das System enthalten. Du kannst das System 
selbst mit AVRCPM.SUP erzeugen (braucht bei 20 MHz ca. 30 Sekunden).
Source.zip enthät die Quellen für das BIOS, CCP und IPL

Gruß Joe

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Nachtrag:
Ich hatte mich gewaltig mit der Zeit verschätzt. Um das System 
vollständig auf unserem System zu übersetzten, d.h. Assembler, Linker, 
DDT usw. benötigt man ca. 5 Min und 20 Sekunden. Unter Altair natürlich 
nur wenige Sekunden.
Gruß Joe

von Peter Sieg (Gast)


Lesenswert?

Franz N. schrieb:
> Das Layout kann
> ich bei Interesse hier rein stellen.

Sehr gerne!

Peter

von Peter S. (petersieg)


Lesenswert?

Weil ich selber keine mehr hatte und man immer einige Platinen bei 
pcbcart abnehmen muss um vernünftige Preise zu erhalten kann ich jetzt 
hier anbieten:

Platinen und mehr zum Projekt: AVR CP/M USB Stick

Info's: http://avr.cwsurf.de/?AVR_CP%2FM

Ein komplettes CP/M System! Disk Images auf SD Karte. Nur 3 IC's DIL.
Diesmal: Blaue Platinen.

Preise:
Nur Platine: 8€
SD Slot: 4€ (ein paar habe ich noch, sonst muss ich erst aus USA 
bestellen)
AVR progr.: 5€ (ATmega328P)
4bit x 256 Drams: 5€ (2 Stück) - nur solange Vorrat reicht.

Peter

von siggi (Gast)


Lesenswert?

Hallo Peter,

von der "blauen Ausgabe" hätte ich gerne ein Exemplar, inclusive der 3 
ICs und des SD-Slots. Meine Adresse müsstest Du noch haben.

Gruß  Siggi

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo Peter,
ich nehme auch einen Satz (Platine, SD Slot,AVR und Speicher)
Hast du meine Adresse noch?
Ansonsten mail mal.
Gruß
Hans-Werner

von Peter S. (petersieg)


Angehängte Dateien:

Lesenswert?

@siggi & Hans-Werner: Adressen speicherere ich nicht.. (Datenschutz) 
bitte sendet mir doch eine Mail über das Forum hier.. dann wird das 
einfacher..

Ich bin vom 18-26.10 im Urlaub.. also nicht wundern, wenn es etwas 
dauert..

---

Gerade nochmals SCDA6A0101 bei CSD bestellt.. Nun habe ich wieder genug 
Slots für alle Platine.. habe trotzdem auch mal einen Ersatz-Slot 
'drangefriemelt'.. geht auch..

Peter

von Peter S. (petersieg)


Lesenswert?

Nur für die, die einen progr. AVR nehmen:
Ist für 20MHz und hat 1 Waitstate mehr drin für langsame Ram's.

Peter

von Peter S. (petersieg)


Angehängte Dateien:

Lesenswert?

Hier mal ein paar neue Diskimages und viele Fragen ;-)
CPMDSK_G.IMG = Fortran Compiler
CPMDSK_H.IMG = PL/I Compiler

Pl/I läuft komplett mit z.B FIB.PLI:
PLI FIB
LINK FIB
FIB

Fortran ist ein hello.for dabei, aber der Compiler beschwert sich..?
(Leider ist das editieren von Files unter CP/M auch nicht so einfach.. 
hat da
jemand ein gut funktionierendes VDE.COM / ZDE.COM?)

Ein paar Fortran Beispielprogramme, die sich hiermit compilieren lassen
wäre schön..

---

Frage 1:
Ich bin mit TP3 inzwischen bei CPMDSK_I.IMG angekommen. Images werden 
aber nur bis _H gelesen. Muss ich um z.B 2 weitere einlesen zu lassen 
die Konstanten MAXDISKS von 8 auf 10 erhöhen in dsk_fsys.asm:

; Fields in the parttabl

  .equ  MAXDISKS  = 8      ;Max number of Disks (partitions)

???
Und muss woanders noch was geändert werden?

---

Frage 2:
Ich habe versucht ein neues 8MB Diskimage zu erstellen:

del CPMDSK_G.IM_
del CPMDSK_G.IMG
mkfs.cpm.exe -f myz80 -b cpm.bin -L test CPMDSK_G.IM_
rem FORTRAN
cpmcp -f myz80 CPMDSK_G.IM_ cpmdsk/FORTRAN/F80.COM 0:F80.COM
cpmcp -f myz80 CPMDSK_G.IM_ cpmdsk/FORTRAN/HELLO.FOR 0:HELLO.FOR
rem ...
rem make at least 8192k in size
dd if=CPMDSK_G.IM_ of=CPMDSK_G.IMG ibs=8388608 conv=sync

Es werden aber keine Files mit DIR anschließend angezeigt..?
(Ich vermute mein cpm.bin ist nicht passend dafür..?)

???

---

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Frage 1:
> Ich bin mit TP3 inzwischen bei CPMDSK_I.IMG angekommen. Images werden
> aber nur bis _H gelesen. Muss ich um z.B 2 weitere einlesen zu lassen
> die Konstanten MAXDISKS von 8 auf 10 erhöhen in dsk_fsys.asm:
>
> ; Fields in the parttabl
>
>   .equ  MAXDISKS  = 8      ;Max number of Disks (partitions)
>
> ???
> Und muss woanders noch was geändert werden?

Images und Partitonen sind 2 verschiedene Dinge.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> (Ich vermute mein cpm.bin ist nicht passend dafür..?)

Peter, die Einstellungen für die Diskettenformate bzw. HD stehen in der 
AVRCPM.LIB

von Peter S. (petersieg)


Lesenswert?

Habe nun mit folgenden Änderungen:

; Fields in the parttabl

  .equ  MAXDISKS  = 10      ;Max number of Disks (partitions); was 8
  .equ    PARTENTRY_SIZE = 11    ;Size of a Partitiontableentry; was 9

einen erfolgreichen Scan des LW: I:
CPM on an AVR, v2.3 r185
Testing RAM: fill...wait...reread...
Initing mmc...

A:FAT16 File-Image at: 514, size: 256KB.
B:FAT16 File-Image at: 530, size: 256KB.
C:FAT16 File-Image at: 546, size: 256KB.
D:FAT16 File-Image at: 562, size: 256KB.
E:FAT16 File-Image at: 578, size: 256KB.
F:FAT16 File-Image at: 594, size: 256KB.
G:FAT16 File-Image at: 610, size: 256KB.
H:FAT16 File-Image at: 626, size: 256KB.
I:FAT16 File-Image at: 002, size: 8192KB.
Partinit done.
Ok, Z80-CPU is live!

ipl
62k cp/m vers 2.2

A>
aber DIR I: zeigt NO FILES ??

---

Habe dann mal TP3 auf F gelegt und ALGOL auf J und B auf I kopiert:
A>dir f:
F: READ     ME  : TINST    COM : TINST    DTA : TINST    MSG
F: TURBO    COM : TURBO    MSG : TURBO    OVR : CMDLIN   PAS
F: LISTER   PAS : MC-MOD00 INC : MC-MOD01 INC : MC-MOD02 INC
F: MC-MOD03 INC : MC-MOD04 INC : MC-MOD05 INC : MC       HLP
F: MC       PAS : MCDEMO   MCS : MC       COM : MC-MOD03 COM
F: HELLO    PAS
A>dir h:
H: FIB      PLI : CHESS    PLI : LIB      COM : LINK     COM
H: RMAC     COM : PLI0     OVL : PLI1     OVL : PLI2     OVL
H: PLI      COM : TEST     PLI : PLILIB   IRL : OPTIMIST PLI
H: OPTIMIST COM : PLIDIO   ASM : MATSIZ   LIB : MATSIZE  LIB
A>dir i:
I: TTT2     COM : SARGON   COM : OTHELLO  COM : MMIND    COM
I: ED       COM : LOAD     COM : STONE    COM : PIP      COM
I: STAT     COM : SUBMIT   COM : XSUB     COM : LADDER   COM
I: LADDER   DAT : LADCONF  COM : CURON    COM : PACMAN   COM
I: HITCH    COM : HITCHHIK DAT :   :
I:   :   :   :
I:   :
A>dir j:
J:   :   :   :
J:   :
A>

???

---

I: und J: werden auch mit dem freien Platz nicht korrekt angezeigt:
A>stat
A: R/W, Space: 40k
B: R/W, Space: 0k
C: R/W, Space: 129k
D: R/W, Space: 95k
E: R/W, Space: 48k
F: R/W, Space: 7928k
G: R/W, Space: 121k
H: R/W, Space: 13k
I: R/W, Space: 938k
J: R/W, Space: 952k

---

Ach Ja.. ALGOL macht bei LUNAR auch irgendwie Mist.. BCD Problem?

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Peter
Nachtrag: im BIOS.MAC mußt du natürlich auch das HD-Format eintragen, 
oder du nimmst dieses CPM.BIN

@ Leo C.
Läuft Dein Server http://cloudbase.homelinux.net/... noch?

von Peter S. (petersieg)


Lesenswert?

Joe G. schrieb:
> Peter, die Einstellungen für die Diskettenformate bzw. HD stehen in der
> AVRCPM.LIB

???

Diese Datei habe/finde ich nicht??

Peter

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Vergessen

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Diese Datei habe/finde ich nicht??

Das findest du alles hier:
Beitrag "Re: CP/M auf ATmega88"
unter Source.zip

von Peter S. (petersieg)


Lesenswert?

Peter Sieg schrieb:
>> Peter, die Einstellungen für die Diskettenformate bzw. HD stehen in der
>> AVRCPM.LIB
>
> ???
>
> Diese Datei habe/finde ich nicht??

Klar habe ich die/gefunden ;-)

Sorry.. gehört zum BIOS.

@Joe G: Kannst du deine *.MAC, AVRCPM.LIB und das damit erstellte 
CPM.BIN mal als ZIP hier anhängen..?

BTW: Mikrocontroller Forum hat glaube ich inzwischen auch einen SVN 
Server..

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> @Joe G: Kannst du deine *.MAC, AVRCPM.LIB und das damit erstellte
> CPM.BIN mal als ZIP hier anhängen..?

Die hast du nun sicherlich gefunden.
Übrigens, das 8MB HD-Format hat einen anderen Aufbau. Das mußt du in den
"diskdefs" berücksichtigen.

Hier die diskdefs für die CP/M Tools oder den Totalcommander.

# SIMH AltairZ80 Harddisk
diskdef simhd
  seclen 128
  tracks 2048
  sectrk 32
  blocksize 4096
  maxdir 1024
  skew 0
  boottrk 6
  os 2.2
end

von Peter S. (petersieg)


Lesenswert?

Hi. Die diskdefs hatte ich schon angepasst..

Ich habe jetzt mal dein cpm.bin verwendet. Immer LW: I: bekomme ich 
keine/vernünftige DIR Anzeige. Hatte dort erstmal das 8192k TP3 Image..
= NO FILES. Habe dieses dann als F: kopiert und unter I: eine Kopie von 
A:
A>dir
A: ASM      COM : DDT      COM : DUMP     COM : ED       COM
A: T        COM : TLOOP    COM : LOAD     COM : MBASIC   COM
A: 23       BAS : BAGELS   BAS : CHECKERS BAS : STARTREK BAS
A: TREKINST BAS : MASTRMND BAS : WEEKDAY  BAS : PIP      COM
A: STAT     COM : SUBMIT   COM : XSUB     COM : ZORK1    COM
A: ZORK1    DAT : SURVEY   COM
A>dir f:
F: READ     ME  : TINST    COM : TINST    DTA : TINST    MSG
F: TURBO    COM : TURBO    MSG : TURBO    OVR : CMDLIN   PAS
F: LISTER   PAS : MC-MOD00 INC : MC-MOD01 INC : MC-MOD02 INC
F: MC-MOD03 INC : MC-MOD04 INC : MC-MOD05 INC : MC       HLP
F: MC       PAS : MCDEMO   MCS : MC       COM : MC-MOD03 COM
F: HELLO    PAS
A>dir i:
I:   :   :
A>dir j:
J: ASM      COM : DDT      COM : DUMP     COM : ED       COM
J: T        COM : TLOOP    COM : LOAD     COM : MBASIC   COM
J: 23       BAS : BAGELS   BAS : CHECKERS BAS : STARTREK BAS
J: TREKINST BAS : MASTRMND BAS : WEEKDAY  BAS : PIP      COM
J: STAT     COM : SUBMIT   COM : XSUB     COM : ZORK1    COM
J: ZORK1    DAT : SURVEY   COM
A>
wieder bei I: keine Anzeige.. bei F: aber wird das 8192k TP3 Image
sauber gelistet.

Hmm..?? zumindest werden mal LW: A-J gescannt und angezeigt..
A>stat
A: R/W, Space: 41k
B: R/W, Space: 0k
C: R/W, Space: 131k
D: R/W, Space: 97k
E: R/W, Space: 49k
F: R/W, Space: 7928k
G: R/W, Space: 123k
H: R/W, Space: 13k
I: R/W, Space: 103k
J: R/W, Space: 41k

---

Habe noch Hitech-C und PARASOL in der Mache als neue Diskimages..

Peter

von Peter S. (petersieg)


Lesenswert?

Bez. CPM.BIN:
Ich verwende Batch Dateien unter Windows - 1:
aliados m80.com =bios.mac
aliados l80.com bios.rel,bios.bin/n/e
aliados m80.com =ipl.mac
aliados l80.com ipl.rel,ipl.bin/n/e

und 2:
dd conv=sync bs=128  count=1 if=ipl.bin > cpm.bin
dd conv=sync bs=128 count=44 if=CPM.SYS >> cpm.bin
dd conv=sync bs=128  count=7 if=bios.bin >> cpm.bin

Kann ich das genau so auch mit den neueren Dateien in Source.zip machen?

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Kann ich das genau so auch mit den neueren Dateien in Source.zip machen?

Nein.
Da das System nun aus IPL CCP BDOS und BIOS zusammengesetzt ist, mußt du 
die folgende Zusammensetzung wählen.

dd  conv=sync bs=128  count=1 if=ipl.bin > cpm.bin
dd  conv=sync bs=128 count=16 if=ZSCCP.BIN >> cpm.bin
dd  conv=sync bs=128 count=28 if=ZSDOS.BIN >> cpm.bin
dd  conv=sync bs=128  count=6 if=bios.bin >> cpm.bin

Joe

von Peter S. (petersieg)


Lesenswert?

Hmm..

Ich habe nun make_bios.bat so:
aliados m80.com =bios.mac
aliados l80.com bios.rel,bios.bin/n/e
aliados m80.com =ipl.mac
aliados l80.com ipl.rel,ipl.bin/n/e
aliados m80.com =ccp.mac
aliados l80.com ccp.rel,ccp.bin/n/e
aliados m80.com =zsdos.mac
aliados l80.com zsdos.rel,zsdos.bin/n/e

Und make_cpm.bat so:
dd  conv=sync bs=128  count=1 if=ipl.bin > cpm.bin
dd  conv=sync bs=128 count=16 if=CCP.BIN >> cpm.bin
dd  conv=sync bs=128 count=28 if=ZSDOS.BIN >> cpm.bin
dd  conv=sync bs=128  count=6 if=bios.bin >> cpm.bin

make_bios.bat gibt aber jede Menge Fehler:
U                                           IF  ZS
P                                       ORG     ZSDOS+0DF9H
U                                         IF  ZS
U                                         IF  ROM

1197 Fatal error(s),108 Warning(s)

C:\DATEN\Eagle\AVR CPM\aliados>aliados l80.com zsdos.rel,zsdos.bin/n/e

Link-80  3.44  09-Dec-81  Copyright (c) 1981 Microsoft

Data    0100    0E3D    < 3389>

50173 Bytes Free
[0000   0E3D       14]

C:\DATEN\Eagle\AVR CPM\aliados>

Peter

von Leo C. (rapid)


Lesenswert?

sorry, hab' gerade keine Zeit zum mittmischen.


Joe G. schrieb:
> @ Leo C.
> Läuft Dein Server http://cloudbase.homelinux.net/... noch?

Letzte Nacht ist mir aufgefallen, daß das Ding hängt. Nach einem 
Neustart lief wieder alles. Und jetzt schon wieder nicht mehr. :-(

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Peter Sieg schrieb:
> make_bios.bat gibt aber jede Menge Fehler:

Ich benutze den Assembler, Linker usw. unter Altair SIMH. Da laufen die 
Quellen fehlerfrei. Wenn du unter CP/M arbeitest, dann kannst du das dd 
unter Windows gleich einsparen und alles zusammen unter CP/M binden 
(AVRCPM.SUB)

Joe

von Leo C. (rapid)


Lesenswert?

Für den Server brauche ich mal ne ruhige halbe Stunde. Heute aber leider 
nicht mehr.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Für den Server brauche ich mal ne ruhige halbe Stunde. Heute aber leider
> nicht mehr.

kein Problem...

Andere Baustelle: Ist den der PCF8583T für die Echzeituhr noch aktuell? 
Ich würde gerne das Layout fertigstellen.

von Peter S. (petersieg)


Lesenswert?

Yo. Rom wurde ja auch nicht an einem Tag erbaut..

Hmm.. das ZSDOS nicht unter aliados assemblierbar ist..?
Habe auch mal m80l80pc probiert. Da sind es 'nur' 97 Fehler:
C:\DATEN\Eagle\AVRCPM~1\KOPIEV~1>m80.com =zsdos.mac
V                               MACLIB  ZSDOS.LIB       ; Get 
initialization code
e
V                                 IF    ZRL
V                                 IF  ZSDOS11
V                                 IF  ZS

Es fehlt anscheinend die ZSDOS.LIB und er kann das IF ... nicht ab..?

---

Nun, lasse es vorerst mal in diesen für mich unbefriedigenden Zustand:
Verwende das cpm.bin von Joe G. was ich selbst aber nicht erzeugen kann 
mit den Windows Tools..

Ich kann mit den Änderungen am AVR Source nun bis LW: J arbeiten, wobei 
I: nicht nutzbar ist..?

Werde es nochmal bis LW: L: erweitert und dann testen..

Falls das alles so nicht geht, werde ich wohl alles zurück bauen und
dann eben nur bis LW: H: gehen und ggf. eine 2te SD Karte für die
nächsten 8 LW: verwenden.

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Ich kann mit den Änderungen am AVR Source nun bis LW: J arbeiten, wobei
> I: nicht nutzbar ist..?

Peter, schau mal bitte in BIOS.MAC. In "meinem" CPM.BIN ist I: eine 
Ramdisk mit 192k und D: die HD. Hier müßte also deine Anpassung 
erfolgen.

  ;Drive   A    B    C    D    E F G H I    J    K    L
;drvtbl:dtbl  <dpha,dphb,dphc,dphd, , , , ,dphi,dphj,dphk,dphl>
;drvtbl:dtbl  <dpha,    ,    ,    , , , , ,dphi,dphj,dphk,dphl>
;drvtbl: dtbl  <    ,    ,    ,    , , , , ,dphi,dphj,dphk,dphl>
drvtbl:dtbl  <    ,    ,    ,dphd, , , , ,dphi>

  ;  Name   spt   bls  dks  dir  cks off
;  dpb  dpb243, 26, 1024, 243,  64,  64,  2
;  dpb  dp8192s,32, 4096,2046, 512, 512,  2
  dpb  dp8192, 32, 4096,2046,1024,1024,  2
;  dpb  dpbrd,  32, 1024,  56,  32,   0,  2
  dpb  rd192,  32, 1024, 192,  32,   0,  0
;  dpb  rd1016, 32, 2048, 508, 192,   0,  2
;  dpb  rd1024, 32, 2048, 512, 192,   0,  0
;  dpb  rd0960, 32, 2048, 480, 192,   0,  0

;dpha:  dph  dpb243
;dphb:  dph  dpb243
;dphc:  dph  dpb243
;dphd:  dph  dpb243
;dpha:  dph  dp8192s
;dphb:  dph  dp8192s
;dphc:  dph  dp8192
dphd:  dph  dp8192
;dphi:  dph  rd1016
dphi:  dph  rd192
;dphj:  dph  rd1024
;dphk:  dph  rd1024
;dphl:  dph  rd0960

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich habe mal ein CPM.BIN erzeugt, welches für die Laufwerke A - K das 
Diskettenformat und für L das HD Format verwendet.

von Peter S. (petersieg)


Lesenswert?

@Joe G.: Danke! Bringt aber keine Änderung: Scan nur bis J und DIR I: = 
: : :

Da ist wohl noch ein wenig mehr im Argen.. zu tun..

Das 8192k Image mit Turbo Pascal 3 wurde aber ja auch vorher erkannt bei 
Laufwerk F:

Peter

von Peter S. (petersieg)


Lesenswert?

Ich habe jetzt erstmal alles zurück gebaut auf meine letzte Version,
wo ich das unter aliados assemblierte cpm.bin verwenden kann und auf
LW: A: - H:

Die Änderung auf mehr LW: - z.B bis L: müssen wir dann noch mal in Ruhe
in Angriff nehmen.. ich denke auch, das da einiges an ueberfluessiger 
Code
in den Sourcen drin ist.. in fat16 z.B ist schon drin, das er A-Z 
sucht..

Peter

von Peter S. (petersieg)


Lesenswert?

@Joe G.: Evtl. kannst du ja das fertige AltairSIMH disk/hd-image hier 
einhängen, womit sich cpm.bin komplett bilden läßt auf Basis ZSDOS..

Den AltairSIMH habe ich hier noch, aber nur ein cpm 2.2 diskimage auf a:

Peter

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Kurze Anleitung dazu.
1. Altair.zip entpacken
2. AltairAll.bat starten
3. auf Laufwerk I: wechseln
4. mit "do avrcpm.sub" das Übersetzen und Linken starten
5. fettich Meister, im Verzeichnis von Altair steht die fertige CPM.BIN

schönen Abend
Joe

von Peter S. (petersieg)


Lesenswert?

Danke!!
Geht einwandfrei.

Peter

von Markus G. (thechief)


Lesenswert?

Gerade getestet, OneWallFree... :-)

Super, Danke Joe!


Viele Grüße

Markus

von Leo C. (rapid)


Lesenswert?

http://cloudbase.homelinux.net/viewvc/avr-cpm/ läuft wieder.

Joe G. schrieb:
> Andere Baustelle: Ist den der PCF8583T für die Echzeituhr noch aktuell?
> Ich würde gerne das Layout fertigstellen.

Noch genau so aktuell als im April; d.h. bei mir ist seit dem nichts 
passiert.

Wegen einer anderen Bastelei liegen inzwischen ein DS2417P+ und ein 
RV2123-C2 hier rum. Letzteren gibts auch mit I2C statt SPI 
(http://www.reichelt.de/Real-Time-Clock-Module/2/index.html?;ACTION=2;LA=2;GROUP=B47;GROUPID=4623;START=0;OFFSET=16;SHOW=1).

von Peter Sieg (Gast)


Lesenswert?

Was war eigentlich der Grund/Vorteil auf ZSDOS im CPM.BIN zu gehen..?
Weil es auch im Source vorliegt?

Mit der Erzeugung aus einer Emulation heraus kann ich leben ;-)

---

Meine Wünsche für Weihnachten ;-)

* mehr Diskimages mit lauffähigen, getesteten Applikationen
* Unterstützung von mehr Diskimages als bisher 8 (A-H).
* Evtl. einen Weg Dateien zw. laufendem CP/M und Hostsystem 
auszutauschen (Kermit?)

Gruß Peter

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo Leute,
interessant wäre auch eine IO Erweiterung 16 bit input und 16 bit 
output!
Sollte doch mit I2C möglich sein, oder?
Gruß
Hans-Werner

von Leo C. (rapid)


Lesenswert?

Hans- w. Schütz schrieb:
> interessant wäre auch eine IO Erweiterung 16 bit input und 16 bit
> output!

Beitrag "Re: CP/M auf ATmega88" ff

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

@Leo C.
Ja, der hat RV2123-C2 ist auch nicht schlecht. Er hat schon den Quarz 
integriert.


@Peter
ZSDOS hat bei voller Kompatibilität zu CP/M 2.2 einige wesentliche 
Verbesserungen. Näheres hier:
http://susowa.homeftp.net/index.php/software-mainmenu/cpm-mainmenu-116/95-zsdos-zddos.html

@alle
Es gibt einen Entwurf mit RTC (PCF8583T) und einem 8-Bit Port (PCF 
8574). Außerdem gibt es einen Erweiterungsport mit I2C und 2 x ADC. Die 
Stromversorgung ist über den USB-Port realisiert, über den wahlweise das 
VT100 Terminal angeschlossen werden kann oder der Propeller (VGA mit 
VT100 Terminal) programmiert werden kann. Weiterhin gibt es einen PS2 
Anschluss für die Tastatur. Die Platine passt in ein Fischer Alu-Gehäuse 
(AKG 7124
ME)beziehen u.a. bei Reichelt.

Da bisher kein großes Interesse vorhanden war, habe ich den Aufbau noch 
nicht in Angriff genommen. Doch jetzt scheint wieder Leben in das 
Projekt zu kommen. Welche Wünsche gibt es denn noch?

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Was war eigentlich der Grund/Vorteil auf ZSDOS im CPM.BIN zu gehen..?

Wenn Du nach Lesen der "feature list" [1] von ZSDOS für Dich keine 
Vorteile erkennen kannst, spricht natürlich nichts dagegen, bei 
Original-CP/M zu bleiben.

> Weil es auch im Source vorliegt?

Source gibts auch für das Original.

> Meine Wünsche für Weihnachten ;-)
>
> * mehr Diskimages mit lauffähigen, getesteten Applikationen
> * Unterstützung von mehr Diskimages als bisher 8 (A-H).

Wenn die Images (Laufwerke) nur ein paar hundert KByte groß wären, und 
einzeln/unabhängig voneinander auswechselbar wären, würde ich das ja 
vielleicht auch so sehen.
Aber: Auf ein Diskimage mit 8 Megabyte passen sehr viele 
CP/M-Programme/-Pakete.

Kann es sein, daß Du die Images in etwa wie Archivdateien betrachtest, 
statt wie (Festplatten-)Laufwerke?

Zugegebenermaßen wirds wg. der flachen Dir-Struktur unter CP/M leider 
schnell unübersichtlich, und die User-Bereiche (0..31) werden auch 
schlecht unterstützt. Ich meine aber, verschiedene Anwendungen auf einem 
Laufwerk in getrennten User-Bereichen zu verwalten, ist immer noch 
einfacher, als die Images auf der SD-Karte neu zu mischen.

Mit ZSDOS gibts übrigens bessere Unterstützung der User-Bereiche (z.B. 
Pfad-Aliase für User-Nrs).

> * Evtl. einen Weg Dateien zw. laufendem CP/M und Hostsystem
> auszutauschen (Kermit?)

CP/Net? ;)

Mit X/Y/Z-Modem-Protokoll müßte das eigentlich auch über die 
Host-Schnittstelle gehen. Leider habe ich noch kein Programm gefunden, 
das das unterstützt.


[1] Geheimtip: Doku
1
        1.5 Differences Between CP/M 2.2, ZRDOS and ZSDOS.
2
3
        Compatibility  with  existing  applications was one of the  primary  goals  of
4
        ZSDOS.   Most  programs that run under CP/M 2.2 or ZRDOS 1.x should  also  run
5
        under ZSDOS without any problems.  The few programs that won't run under ZSDOS
6
        depend on specific (unpublished) addresses in BDOS.
7
8
        A  quick  summary of the features of ZSDOS compared to ZRDOS and CP/M  2.2  is
9
        given below:
10
11
          FEATURE                       CP/M 2.2       ZRDOS 1.7         ZSDOS
12
          --------------------------------------------------------------------
13
          Direct get next
14
             console character            No              No              Yes
15
          Error-free interleave of
16
             direct and buffered
17
             console input calls          No              No              Yes
18
          Control-R supported             Yes             No              Yes+
19
          Auto disk relog                 No              Yes             Yes
20
          Warning message on auto
21
             disk relog                   No              Yes             Selectable
22
          Fast fixed disk relog           No              Yes             Selectable
23
          Return fixed disk login         No              Yes             Yes
24
          Return DMA address              No              Yes             Yes
25
          Re-entrancy                     No              Yes             Yes
26
          Set BDOS error mode             No              No              Yes
27
          Error messages                  Cryptic         Numeric         English
28
          Filename displayed in
29
             error message                No              No              Yes
30
          1 gigabyte disk size            No              No              Yes
31
          32 megabyte file size           No              No              Yes
32
          Public directories              No              Yes             Selectable+
33
          Public files                    No              No              Selectable
34
          Path from DOS                   No              No              Selectable+
35
          Read Only Path/Public           No              No              Selectable
36
          Read Only Drive Vector          No              Yes             Selectable
37
          Wheel protected files           No              Yes             Yes
38
          Function 37 relogs
39
             default if needed            No              No              Yes
40
          User number in FCB              No              No              Yes
41
          DOS ID function call #          12              48              48
42
          Get file stamp                  No              No              Yes*
43
          Set file stamp                  No              No              Yes*
44
          Get time                        No              No              Yes*
45
          Set time                        No              No              Yes*
46
          Stamp create time/date          No#             No#             Yes*
47
          Stamp update time/date          No#             No#             Yes*
48
          Stamp access time/date          No#             No#             Yes*
49
50
            * Internal DateStamper (ZDDOS) or ZSDOS with External Stamp Routine.
51
            + ZSDOS version only.
52
            # No internal support for these functions, though DateStamper can be
53
              installed on these systems.

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Die Änderung auf mehr LW: - z.B bis L: müssen wir dann noch mal in Ruhe
> in Angriff nehmen..

Die Nummer der RAM-Disk steht auch in config.inc:
1
#define RAMDISKNR     'I'-'A'  /* Drive "letter" for first RAM disk */

Um die Anzahl der möglichen SD-Karten-Disks zu erhöhen muß man diese 
Konstante vergrößern.

> ich denke auch, das da einiges an ueberfluessiger Code
> in den Sourcen drin ist.. in fat16 z.B ist schon drin, das er A-Z
> sucht..

Ich muß doch sehr bitten. ;-)

Die Anzahl der Laufwerke ist aber auch durch das im BIOS dazu 
reservierten RAMs begrenzt. Da die Verwaltung dynamisch erfolgt, können 
um so mehr Laufwerke verwaltet werden, je kleiner diese sind.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Die Portierung des KC-Commander's könne eine echte Bereicherung für 
unser System sein. Die Quellen dazu findet man hier:
http://susowa.homeftp.net/index.php/software-mainmenu/cpm-mainmenu-116/68-kc-commander-nccom.html

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo,
das VT Terminal mit dem Propeller interessiert mich auch. Nun muss das 
einer nur noch in den Atmel bringen... Interessant wäre allerdings wenn 
man die I/O Ports auch über in und out Befehle von der Z80 Seite zu 
erreichen sind.
Gruß
Hans-Werner

von Leo C. (rapid)


Lesenswert?

Hans- w. Schütz schrieb:
> Interessant wäre allerdings wenn
> man die I/O Ports auch über in und out Befehle von der Z80 Seite zu
> erreichen sind.

Klar, das ist sowieso die einfachste Möglichkeit, die Ports für den Z80 
zugänglich zu machen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Hans- w. Schütz schrieb:
> das VT Terminal mit dem Propeller interessiert mich auch.

Das läuft bei mir schon ein Jahr. Genau diese Schaltung ist auf dem 
neuen Layout.
Beitrag "Re: CP/M auf ATmega88"

von Peter S. (petersieg)


Lesenswert?

Leo C. schrieb:
> Die Nummer der RAM-Disk steht auch in config.inc:#define RAMDISKNR     'I'-'A' 
/* Drive "letter" for first RAM disk */

Das hatte ich parallel auch schon gemacht, obwohl die Anz. Ramdisks bei 
mir auf 0 steht. Es kam aber zu den oben beschriebenen Effekten:
I: DIR => : : : sonst nichts.
J: geht mit ZSDOS, mit CPM.BIN orig. 2.2 nicht.
Erweiterung auf K+L: Anzeige / Scan nur bis J:

Ich verwende eigentlich immer noch die 256k Images, weil:
1. Ich noch nicht versucht habe unter Windows, größere Images (8192k) zu
erzeugen.
2. Wirklich die Übersicht verloren geht und ich eigentlich thematisch 
getrennte Sachen auch getrennt halten wollte.

Aber mit den Userbereichen ist klar eine Möglichkeit, die ich bisher 
noch
nicht genutzt habe.

Wie kann ich denn unter Windows ein 8192k Leerimage anlegen?
Kann jemand dazu ggf. die passende diskdefs hier einhängen.

---

@Joe G: Achtung der bisher verwendete SD Card Slot ist (fast) nicht mehr
lieferbar! CSD hat noch ca. 50Stk. SCDA6A0101 - die passen! Danach heißt 
es umstellen auf einen anderen Slot.

Wenn auf deine Platine der Propeller Chip für das Terminal mit drauf 
ist,
habe ich (andere sehen das sicher anders..) kein Interesse daran..
Aus meiner Sicht sollte das AVR Only sein.. eher kann der Propeller 
nebenbei noch Z80 spielen..

Peter

von Peter S. (petersieg)


Lesenswert?

Joe G. schrieb:
> Das läuft bei mir schon ein Jahr. Genau diese Schaltung ist auf dem
> neuen Layout.
> Beitrag "Re: CP/M auf ATmega88"

Mach doch mal bitte ein paar Foto's/Video über Youtube davon..
Wenn es wirklich gut läuft und eine bessere Anzeigequalität hat als
MicroVGA kann man ja mal über seinen Schatten springen..
und so ein Weihnachtsprojekt hätte ja auch was.. ;-)

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> CSD hat noch ca. 50Stk. SCDA6A0101 - die passen!
Danke für den Hinweis.

Die Terminalhardware sehe ich ganz pragmatisch. Sicher könnte es auch 
ein AVR sein, doch mit dem Propeller geht es schnell, einfach und gut. 
Die Videoqualität ist deutlich besser als bei der MicroVGA und das 
Terminal kann nach den eigenen Bedürfnissen programmiert werden. Ich 
mache bei Gelegenheit mal einige Fotos.

Joe

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> Wie kann ich denn unter Windows ein 8192k Leerimage anlegen?
> Kann jemand dazu ggf. die passende diskdefs hier einhängen.

Beitrag "Re: CP/M auf ATmega88"

Danach mit cpmtools bespielen. Format 'myz80' bzw. 'simhd'.
1
# MYZ80 hard drive (only works with libdsk, because it has a 256-byte header)
2
diskdef myz80
3
  seclen 1024
4
  tracks 64
5
  sectrk 128
6
  blocksize 4096
7
  maxdir 1024
8
  skew 1
9
  boottrk 0
10
  os 3
11
end
12
13
# SIMH AltairZ80 Harddisk
14
diskdef simhd
15
  seclen 128
16
  tracks 2048
17
  sectrk 32
18
  blocksize 4096
19
  maxdir 1024
20
  skew 0
21
  boottrk 6
22
  os 2.2
23
end

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Wie kann ich denn unter Windows ein 8192k Leerimage anlegen?

Unter Altair SIMH ein HD Laufwerk erzeugen und in CPMDSK_X.IMG 
umbenennen.

von Peter Sieg (Gast)


Lesenswert?

Joe G. schrieb:
> Unter Altair SIMH ein HD Laufwerk erzeugen und in CPMDSK_X.IMG
> umbenennen.

Ahh..?? Und wie geht nun sowas..?

BTW: Ich habe hier im Thread ein myz80.img 'gefunden' was 8193k groß 
ist..?

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> BTW: Ich habe hier im Thread ein myz80.img 'gefunden' was 8193k groß
> ist..?
1
$ ./makeimage /dev/null myz80.img $(expr 128 \* 65536 + 256)

wieviel ist nochmal 128*65536+256?

von Peter Sieg (Gast)


Lesenswert?

Ich habe jetzt mal versucht ein simhd.img unter Windows zu erstellen:
makeimage /dev/null simhd.img 8388480
mkfs.cpm.exe -f simhd -b cpm.bin -L test simhd.img

Das Problem (idiotisch!) simhd ist bei mir nicht in diskdefs drin und
editieren unter Windows kann ich es nicht, weil dann wieder CR+LF 
eingefügt werden und das dann wieder unter windows mit dem cpmtools 
nicht mehr lesbar ist(so ein 'scheiß' mit den cpmtools).

Kann mir bitte jemand eine vollständige diskdefs für die cpmtools + TC 
mit avrcpm, myz80 und simhd hier einhängen..

Danke+Gruß, Peter

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Es gibt aber auch für Windows Editoren, die Unix-Zeilenenden können.

Und dann gibt es noch sowas wie dos2unix und unix2dos usw.

Der "Scheiß" sind natürlich die von Dir verwendeten Windows-Tools, nicht 
etwa die cpmtools.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ein guter Editor unter Windows ist WinVi
http://www.winvi.de/de/

Peter Sieg schrieb:
> Ahh..?? Und wie geht nun sowas..?

1. neu.dsk im altairSIMH als HD anlegen

d tracks[0-7] 254
attach dsk zsdos.dsk
;attach hdsk i.dsk
attach hdsk neu.dsk
set cpu 64k
set cpu itrap
set cpu z80
set cpu altairrom
set cpu nonbanked
reset cpu
boot dsk

2. HD mit Programmen füllen
3. SIMH beenden
4. neu.dsk in CPMDSK_X.IMG umbenennen (X) ist der Laufwerksbuchstabe 
deiner HD
5. auf SD-Card kopieren
6. freu

anbei noch ein "freu"Immage
Joe

von Leo C. (rapid)


Lesenswert?

Hier ist noch eine Liste von Editoren:
https://de.wikipedia.org/wiki/Liste_von_Texteditoren#Windows

Auf meinem Netbook habe ich eine der besseren Notepad-Varianten 
installiert. Kann viel mehr als ich dort brauche.

von Peter S. (petersieg)


Lesenswert?

Das mit neu.dsk werde ich mal probieren..
Ich möchte aber eigentlich lieber über die cpmtools gehen..
(warum eigentlich..? -> kann mal alles schön in Batch-Dateien legen..)
Ich habe also ein myz80.img und ein simhd.img mit makedisk angelegt:
(Ist auch alles schön mit E5 gefüllt gewesen)
makeimage /dev/null simhd.img 8388480
mkfs.cpm.exe -f simhd -b cpm.bin -L test simhd.img
+
makeimage /dev/null myz80.img 8388736
mkfs.cpm.exe -f myz80 -b cpm.bin -L test myz80.img
---
dann mit ein paar Programmen gefüllt:

rem Wordstar
cpmcp -f simhd simhd.img cpmdsk/ws30-vt100/INSTALL.COM 0:INSTALL.COM
cpmcp -f simhd simhd.img cpmdsk/ws30-vt100/MAILMRGE.OVR 0:MAILMRGE.OVR
...
rem Multiplan
cpmcp -f simhd simhd.img cpmdsk/MULTPLAN/INSTALL.COM 1:INSTALL.COM
cpmcp -f simhd simhd.img cpmdsk/MULTPLAN/INSTALL.DAT 1:INSTALL.DAT
---
mit cpmls bekomme ich die auch angezeigt.
Auf SD Karte als CPMDSK_E.IMG kopiert.
LW: E wird gefunden mit 8192k aber DIR E: NO FILES
???
Bei beiden identisch.
Als CPMDSK_A.IMG wird auch CP/M gebootet.. aber NO FILES??

Was mache ich falsch?

Peter

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> makeimage /dev/null simhd.img 8388480
> mkfs.cpm.exe -f simhd -b cpm.bin -L test simhd.img

Versuch' mal das simhd Image (geringfügig) zu vergrößern mit:
1
makeimage simhd.img simhd-neu.img 8388608

von Leo C. (rapid)


Lesenswert?

simhd Images werden nur erkannt, wenn sie die exakt richtige Größe von 
8388608 Bytes haben (2048 Traks * 32 Sectors/Track * 128 Byte/Sector), 
weil es sonst nicht viele Erkennungskriterien für dieses Format gibt.

Image-Files, deren Dateinamen dem Muster 'CPMDSK_[A-Z].IMG' entsprechen, 
werden in alphabetisch aufsteigender Reihenfolge als Laufwerke A: B: ... 
eingebunden. Wenn 'CPMDSK_E.IMG' die erste erkannte Datei ist (und keine 
CP/M-Partitionen vorhanden sind), bekommt sie den Laufwerksbuchstaben 
'A'.

von Peter S. (petersieg)


Lesenswert?

leider brachte das auch nichts (Diesmal als CPMDSK_D.IMG):
CPM on an AVR, v2.3 r185
Testing RAM: fill...wait...reread...
Initing mmc...

A:FAT16 File-Image at: 514, size: 256KB.
B:FAT16 File-Image at: 530, size: 256KB.
C:FAT16 File-Image at: 546, size: 256KB.
D:FAT16 File-Image at: 562, size: 8192KB.
E:FAT16 File-Image at: 1074, size: 256KB.
F:FAT16 File-Image at: 1090, size: 256KB.
G:FAT16 File-Image at: 1106, size: 256KB.
H:FAT16 File-Image at: 002, size: 8192KB.
Partinit done.
Ok, Z80-CPU is live!

ipl
62k cp/m vers 2.2

A>dir d:
NO FILE
A>

(H=TP3 8M image = ok)

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Um den Fehler besser einzugrenzen, läuft überhaupt ein HD-Images?

von Leo C. (rapid)


Lesenswert?

und was sagen 'stat d:' und 'stat d:dsk:'?

von Peter S. (petersieg)


Lesenswert?

Joe G. schrieb:
> Um den Fehler besser einzugrenzen, läuft überhaupt ein HD-Images?

Ja. Siehe: (H=TP3 8M image = ok) oben.

Peter

von Peter S. (petersieg)


Lesenswert?

Leo C. schrieb:
> und was sagen 'stat d:' und 'stat d:dsk:'?

E>stat d:

Bytes Remaining On D: 241k

E>stat d:dsk:

    D: Drive Characteristics
 1944: 128 Byte Record Capacity
  243: Kilobyte Drive  Capacity
   64: 32  Byte Directory Entries
   64: Checked  Directory Entries
  128: Records/ Extent
    8: Records/ Block
   26: Sectors/ Track
    2: Reserved Tracks

E>

Ein mit 'neu.dsk' erstelltes LW (hier als E: eingebunden) funktioniert!
E>stat e:

Bytes Remaining On E: 7856k

E>stat e:dsk:

    E: Drive Characteristics
65344: 128 Byte Record Capacity
 8168: Kilobyte Drive  Capacity
 1024: 32  Byte Directory Entries
 1024: Checked  Directory Entries
  256: Records/ Extent
   32: Records/ Block
   32: Sectors/ Track
    6: Reserved Tracks

E>

Also geht bei dem:
> makeimage /dev/null simhd.img 8388608
> mkfs.cpm.exe -f simhd -b cpm.bin -L test simhd.img
noch irgendwas nicht so wie es sein sollte..?

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ich habe es gerade selber nochmal versucht. Dabei gehe ich davon aus, 
dass bei dir in simhd das korrekte Format eingetraegn ist.

1. mkfs.cpm.exe -f simhd -b cpm.bin -L test simhd.img
2. dd if=simhd.img of=i.dsk ibs=8388608 conv=sync
3. stat i:dsk:

    I: Drive Characteristics
65344: 128 Byte Record Capacity
 8168: Kilobyte Drive  Capacity
 1024: 32  Byte Directory Entries
    0: Checked  Directory Entries
  256: Records/ Extent
   32: Records/ Block
   32: Sectors/ Track
    6: Reserved Tracks

von Peter S. (petersieg)


Lesenswert?

Ahh.. ich habe aber Schritte 1+2 in umgekehrter Reihenfolge gemacht!

Ich teste das also noch mal in deiner Reihenfolge.

Trotzdem bin ich mit den user Bereichen nicht wirklich 'glücklich'.
Nach vielen Operationen wird man autom. auf A: und user 0 'zurück 
geworfen':

A>i:
I>user 6
I>dir
I: CREF80   COM : F80      COM : HELLO    FOR : L80      COM
I: LIB80    COM : M80      COM : OBSLIB   REL : FORLIB   REL
I: README   TXT : HELLO    REL : HELLO    COM
I>hello

HELLO, WORLD
 STOP        ** at address 0131 **


A>

Peter

von Peter S. (petersieg)


Lesenswert?

Tja.. es sind immer die dummen Fehler..

So rum gehts:
mkfs.cpm.exe -f simhd -b cpm.bin -L test simhd.img
makeimage simhd.img simhd.img 8388608

Peter

von Peter S. (petersieg)


Lesenswert?

Auch Interessant!
Auf dem Altair Emulator wird man auf A: wie obern geschildert zurück 
gebeamt.. auf dem avrcpm NICHT:
A>e:
E>user 6
E>dir
E: CREF80   COM : F80      COM : HELLO    FOR : L80      COM
E: LIB80    COM : M80      COM : OBSLIB   REL : FORLIB   REL
E: README   TXT : HELLO    REL : HELLO    COM
E>hello

HELLO, WORLD
 STOP        ** at address 0131 **


E>dir
E: CREF80   COM : F80      COM : HELLO    FOR : L80      COM
E: LIB80    COM : M80      COM : OBSLIB   REL : FORLIB   REL
E: README   TXT : HELLO    REL : HELLO    COM
E>

???

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Welches ZDOS Image verwendest du auf dem Altair? Möglicherweise eine 
andere Version als bei avrcpm. Das BIOS ja ist definitiv ein anderes.
Joe

von Peter S. (petersieg)


Lesenswert?

Hmm. In den Images ist das über Altair i.dsk mit do avrcpm.sub erzeugte 
CPM.BIN enthalten..

BTW: Von so einer 8M Disk kann ich nicht als LW A: booten.. =reg.dump 76 
76 76..

Daher verwende ich z.B eine 256k LW A: disk image und dann jetzt jeweils 
8M images als B: und C: (TP3).

Peter

von Peter S. (petersieg)


Angehängte Dateien:

Lesenswert?

Hier noch ein ZIP mit MuMATH Package (bisher nur im Altair Emu getestet) 
und eine deutsche PDF Anleitung dazu.

From:http://www.retroarchive.org/cpm/misc/misc.htm

This package was originally issued for the OSBORNE 1.
The MUSIMP.COM file contains my patch to make it useable
under generic cp/m.  The original osborne version of this
executable is enclosed as MUSIMP.OBJ

The CLES?.* files are a tutorial in using the calculation
parts of MUMATH.  The PLES?.* comprise a programming tutorial
for MUSIMP.

rwd
06/09/98
---
Schnellstart
Zum Kennenlernen von Musimp:
Starte Musimp am CP/M prompt: MUSIMP ALL
Setze „PAUSE“ für die nachfolgende Demo durch folgende Eingabe am “?“ 
Prompt: PAUSE:100;
(Altair Emulator: PAUSE:1000;)
Starte die Demo durch folgende Eingabe am “?“ Prompt: RDS(DEMO,ALL);
Beende Musimp

Peter

von Peter S. (petersieg)


Lesenswert?

mumath läuft auch im avrcpm system. Pause auf 10 so lassen (default).

Peter

von Peter Sieg (Gast)


Lesenswert?

Liebe Mit-Retro-Freaks.

Ich hatte mal Lust diesen gesamten Thread etwas aufbereitet als PDF zur 
Verfügung zu stellen. PDF (272 Seiten; von ursprünglich >470 Seiten) 
habe ich im Wiki abgelegt und im Artikel eingebunden:

http://www.mikrocontroller.net/articles/AVR_CP/M

Ist schon sehr interessant, wie sich das alles so entwickelt hat und wer 
maßgeblich daran beteiligt war bzw. ist!

Ich habe mir erlaubt auch ein Inhaltsvereichnis anzulegen mit Highlights 
der
Entwicklung etc.

---

Ich selbst werden mich demnächst nach Datenaustausch acrcpm <-> PC über 
Terminalsoftware (X/Y/Z-Modem o.ä) umschauen.. ich möchte gerne Dateien 
zw. avrcpm und Kostsystem einfach austauschen können.

---

Mit max. 8x 8MB Diskimages und der Möglichkeit Programmpakete in User 
Bereiche zu strukturieren, haben wir wohl ersteinmal genügend Platz.. 
;-)

---

Je länger ich drüber nachgedacht habe, wäre eine Stand-Alone Lösung mit
eigenen VGA+Tastatur Teil (auf Basis Propeller) doch 'nicht 
uninteressant'.
Wer hätte den daran noch interesse..?

---

Was gäbe es sonst noch für 'sinnvolle' Erweiterungsmöglichkeiten?

---

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Je länger ich drüber nachgedacht habe, wäre eine Stand-Alone Lösung mit
> eigenen VGA+Tastatur Teil (auf Basis Propeller) doch 'nicht
> uninteressant'.

5 Platinen dazu sind gerade in Auftrag.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> Was gäbe es sonst noch für 'sinnvolle' Erweiterungsmöglichkeiten?

Mir fällt da schon noch einiges dazu ein.

Einen ATmega644 einsetzen. Der hätte eine zweite serielle Schnittstelle 
z.B. für den Datenaustausch mit einem anderen System und noch genug Pins 
für eine LPT Schnittstelle.

Einen AT90USB64/128 einsetzen. Dort könnte das Terminal über USB 
angeschlossen werden und die serielle Schnittstelle ist ebenfalls frei. 
Weiterhin gibt es genug Portpins. Die Programmierung über ISP kann auch 
entfallen, da er über USB mit LUFA geflasht werden kann.

Mit der „Cpmlino“ Variante sieht es nicht so gut aus. Die derzeitige 
Entwicklung geht ja zum  ATmega32U4 und der ist wirklich Mist! Wenn man 
sich mal die Portaufteilung ansieht, fragt man sich ernsthaft, was die 
Entwickler dabei gedacht haben.

Joe

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Auf Wunsch hier noch der Schaltplan.

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo,
an Platinen für ein VGA Terminal mit Propeller wäre ich auch 
interessiert.
Gruß
Hans-Werner

von Peter S. (petersieg)


Lesenswert?

@Joe G. Der Schaltplan zeigt was..?

Die 5 Platinen sind die Version mit P8X32 Terminal?

Falls noch eine frei wäre..

---

I2C hab ich bisher auch noch überhaupt gar nichts gemacht.. hier gäbe es 
auch
noch so einige Möglichkeiten.. Ich glaube der RTC läuft über I2C und 
dafür habt ihr auch schon einen Treiber gemacht..?

---

Chip-8 Emulator unter CP/M wäre auch ein schönes Projekt.

---

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> @Joe G. Der Schaltplan zeigt was..?

Der Schaltplan zeigt ein CP/M System mit VT100 Terminal, PS2 Tastatur, 
RTC sowie einem 8-Bit Port. Ich hatte es schon hier beschrieben.
Beitrag "Re: CP/M auf ATmega88"

Da jedoch keiner so richtig Interesse gezeigt hat, hatte ich einfach für 
mich 5 Testplatinen bestellt. Mit so einer plötzlichen Resonanz hatte 
ich gar nicht gerechnet. Nun sind sie schon wieder alle.

1 x Joe G.
1 x Peter Z.
1 x Hans-Werner
1 x Peter S.
1 x Leo C.

Ohne den Anschein der Bestechlichkeit zu erwecken, würde ich Leo C. 
gerne eine zukommen lassen :-). Somit hätten wir alle die gleiche 
Hardware um die RTC die A/D-Wandler und den 8-Bit Port in Betrieb zu 
nehmen. Bei Bedarf können wir ja dann wieder eine größere Serie 
auflegen. Möglicherweise ergeben sich auch noch einige Änderungen.

Joe

von Peter S. (petersieg)


Lesenswert?

@Joe G. Freut mich, das noch eine 'über' war .. ;-)

Auf dem Schaltplan sehe ich einen ATmega88/168 und Ein HM51W17805 = 
SRam? und einen SD Slot.. sonst nichts Wesentliches.. bin ich blind?
Von P8X32 und ser.Eprom nichts zu sehen.. ich denke der Schaltplan passt 
nicht zum verlinkten Board & Beschreibung..

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Sieg schrieb:
> bin ich blind?

Nicht anzeigen lassen, sodern das PDF laden. Es hat drei Seiten.

von Peter S. (petersieg)


Lesenswert?

Habe hier noch ein Problem mit einem avr cpm stick Aufbau.
Habe schon alles nachgelötet, C am SD Slot gwechselt.. immer das 
gleiche:

Initing mmc...

A:FAT16 File-Image at: 002, size: 256KB.
Partinit done.
Ok, Z80-CPU is live!

 Z V    A =00 BC =A201 DE =0001 HL =DCD0 SP=BF3E PC=F2F0       76 76 76
        A'=00 BC'=0000 DE'=0000 HL'=0000 IX=0000 IY=0000 I=00       CPU 
halted!

CPM on an AVR, v2.3 r185
Testing RAM: fill...wait...reread...
Initing mmc...

A:FAT16 File-Image at: 514, size: 256KB.
B:FAT16 File-Image at: 530, size: 8192KB.
C:FAT16 File-Image at: 002, size: 8192KB.
D:FAT16 File-Image at: 1042, size: 8192KB.
Partinit done.
Ok, Z80-CPU is live!

 Z V    A =00 BC =A201 DE =0001 HL =DCD0 SP=BF40 PC=F2F0       76 76 76
        A'=00 BC'=0000 DE'=0000 HL'=0000 IX=0000 IY=0000 I=00       CPU 
halted!

Oben mit eine SD Karte mit nur A Image.
Unten andere SD Karte mit 4 Images.

???

Irgendeine Idee?

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Du könntest ja mal .equ INS_DEBUG = 1 und .equ PRINT_PC = 1 setzen und 
schauen wo der Prozessor hin springt und welchen Befehl er ausführt.
Es gibt ja prinzipiell zwei Fehlermöglichkeiten.
1. SD-Card wird nicht richtig gelesen
2. RAM verliert Speicherinhalte
Beides führt natürlich auf eine unsinnige Befehlsausführung.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Guten Abend,

ich würde für die neue Version noch einige Bauelemente bestellen. Wer 
Interesse hat, hängt sich einfach mit ran.

ATmega328 TQFP32
P8X32A-Q44 (Propeller)
PCF8583T SO08
PCF8574T SO16W
AT24C256 DIL
20 MHz Quarz
5 MHz Quarz (Propeller)
32 KHz Quarz (RTC)
SD Slot SCDA6A0101

Joe

von Hans- w. S. (hschuetz)


Lesenswert?

hallo Joe,
ich geh mit...
alles auch einmal für mich
Gruß
Hans-Werner

von Peter S. (petersieg)


Lesenswert?

Jup. Alles bis auf den Slot. Den habe ich.

Gruß Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Kurze Info: Hab für alle Interessenten Bestellt.

von Leo C. (rapid)


Lesenswert?

@Peter, ich weiß nicht, ob Du noch mit disk images experimentierst, oder 
ob Du es mit oder ohne Erfolg aufgegeben hat. Ein paar Sachen sind mir 
noch aufgefallen.

Peter Sieg schrieb:
> Habe nun mit folgenden Änderungen:
>
> ; Fields in the parttabl
>
>   .equ  MAXDISKS  = 10      ;Max number of Disks (partitions); was 8
>   .equ    PARTENTRY_SIZE = 11    ;Size of a Partitiontableentry; was 9

Der 2. Wert sollte natürlich nicht geändert werden, da sich ja die Größe 
eines einzelnen Tabelleneintrags ja nicht ändert. Vergrößern verbraucht 
allerdings nur unnötig mehr RAM, während Verkleinern sicher tötlich ist.

Peter Sieg schrieb:
>> Die Nummer der RAM-Disk steht auch in config.inc:
>> #define RAMDISKNR     'I'-'A' /* Drive "letter" for first RAM disk */

> Das hatte ich parallel auch schon gemacht, obwohl die Anz. Ramdisks bei
> mir auf 0 steht.

RAMDISKNR-1 ist gleichzeitig auch das letzte erlaubte SD-Kartenlaufwerk. 
Deshalb muß man diese Konstante auch dann richtig setzen, wenn man keine 
RAM-Disks verwendet.

Man könnte die Anzahl der Disks vielleicht etwas übersichtlicher in 
'config.inc' konfigurierbar machen. Da aber ggf. auch das BIOS angepasst 
werden muß, weiß ich nicht, ob sich der Aufwand lohnt.


Peter Sieg schrieb:
> Tja.. es sind immer die dummen Fehler..
> So rum gehts:
> mkfs.cpm.exe -f simhd -b cpm.bin -L test simhd.img
> makeimage simhd.img simhd.img 8388608

Wenn man ein nagelneues Image erzeugt, müßte die Reihenfolge definitiv 
egal sein. Sollte das bei Dir tatsächlich anders sein, würde ich Dich 
bitten, nochmal je ein Image mit diesen Befehlen in beiden Reihenfolgen 
zu erzeugen, jeweils eine Datei darauf zu kopieren, und mit das Ergebnis 
zuzuschicken.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Die Leiterplatten sind heute eingetroffen und werden mit den 
Bauelementen die Woche auf Reisen gehen.

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo Joe,
wie ist es mit der Bezahlung? How much? Wohin?
Gruß
Hans-Werner

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Hans- w. Schütz schrieb:
> wie ist es mit der Bezahlung? How much? Wohin?

Hab an alle Interessenten eine Mail versendet.

von Peter S. (petersieg)


Lesenswert?

@Joe: Teile sind angekommen. Vielen Dank!
Hast du Bestückungsplan, Firmware für Propeller, 24C256 etc. ggf. 
Aufbauhinweise; Bilder .. weitere Unterlagen dazu?
Ggf. reichelt Teileliste der restlichen Bauteile..

Gruß, Peter

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Die Bestückung ergibt sich aus dem Schaltplan und dem Layout (siehe 
Anhang 1). Einen Bestückungsplan habe ich nch nicht erstellt.

Die Firmware für den Propeller (siehe Anhang 2). Hier müssen noch die 
Baudrate und Farben für das Terminal eingestellt werden 
(propCOMM2_VGA.spin). Ich habe grün auf schwarz sowie 57600 Baud 
eingestellt. Möglicherweise sind auch noch die Wartezeiten vom AVR CP/M 
etwas zu vergrößern, damit die Initialisierung des VT100 Terminals 
abgeschlossen ist, bevor das CP/M bootet.
Die Propellersoftware kann mit dem Propeller Spin-Tool übersetzt und 
geladen werden.
http://www.parallax.com/tabid/832/Default.aspx#Software

Die Hardware ist so ausgelegt, dass es drei Kommunikationsmöglichkeiten 
über die USB-Schnittstelle gibt.
1. Spinzugriff zum Propeller
2. Terminalzugriff zum AVR CP/M
3. CP/M - Propeller VT100

Die einzelnen Varianten werden über das Juperfeld gesetzt. Ich habe 
leider noch kein schönes Bild dafür erstellt.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

So, hier noch die Jumperbelegung.

von Leo C. (rapid)


Lesenswert?

Danke Joe,
bei mir sind die Teile auch heute Morgen angekommen. Allerdings werde 
ich mich frühestens nächste Woche damit beschäftigen können.

Nach Diktat verreist...

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Gerade entdeckt.
Bei unseren russischen Freunden läuft ein Parallelprojekt.

http://www.nedopc.org/forum/viewtopic.php?t=9273

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo Joe
heute sind die Teile angekommen... nun fehl eigentlicht nur eine 
Stückliste... na schaun wir mal
Gruß
Hans-Werner

von Peter S. (petersieg)


Angehängte Dateien:

Lesenswert?

Hier ein Bild TOP Layer und Partlist.

Wer meine Teile+Platine haben möchte -> Mail. Ich komme auf absehbare
Zeit nicht dazu und habe ja noch die seriellen Varianten hier.

Peter

von Marcel A. (dl1ekm)


Lesenswert?

Hallo zusammen,

bzgl. dieses interessanten Projekts bin ich quasi ein Späteinsteiger :-)
Es ist auch das erst mal, dass ich hier etwas schreibe - hoffentlich 
mache ich alles richtig.

Ich wollte mich Schritt für Schritt dem Thema nähern und habe daher erst 
einmal die einfache "Lochraster-Variante" (Mega88, 1x RAM) aufgebaut 
[[http://petersieg.kilu.de/avrcpm/avrcpm.html]].
Später wollte ich dann Platinen ätzen (oder bei einer Sammelbestellung 
dranhängen), VGA-Adapter usw... realisieren.

Als Software (sowohl AVR-Code als auch Disk-Images) habe ich 
verschiedene Entwicklungs-Stufen ausprobiert (unter WinAVR).
Zuletzt die Dateien von Peter Siegs "AVR_CPM_UDP2". 
[[http://avr.cwsurf.de/?download=avrcpm_upd2.zip]]. Peter (DANKE!) hatte 
mir schon mal das ein oder andere Disk-Image gegeben - aber so richtig 
bin ich noch nicht weiter gekommen.

Es klappt noch nicht und ich weiß nicht, wo ich suchen muss? Ram? 
Takt...?

Mein Aufbau:
- ATmega88-20
- RAM: sowohl KM44C256AP-8 als auch Siemens HYB514256A-70 (West Germany 
:-))
- SD-Card: 1GB Platinum (Reichelt)

Beim Start kommt ohne Debug-Flags:
1
CPM on an AVR, v1.0
2
Initing mmc...
3
CP/M partition at: 062, size: 7657KB.
4
CP/M partition at: 15376, size: 7688KB.
5
CP/M partition at: 30752, size: 7688KB.
6
7
Ok, CPU is live!

Danach nix mehr - Stoppt. Als ob er nicht bootet...

MMC und RAM-Test geben folgende Ausgaben - nur was bedeutet das? Ist das
"gut" oder "schlecht" ?
1
CPM on an AVR, v1.0
2
Testing RAM: fill...wait...reread...
3
... (hier laufen dann Hex-Zahlen "00<xx@yyyy" mit yyyy bis FFFF durch)
4
Initing mmc...
5
MMC: <--0A, -->FF.
6
MMC: <--09, -->
7
...
8
MMC: <--FF, -->23.
9
MMC: <--FF, -->FF.
10
11
Ok, CPU is live!

Danach nichts mehr.


Und PC-Debug und INS-Debug:
... Endlose PC=xxxx hochzählend:
1
PC=2822PC=2822, opcode=00, decoded=0000.
2
PC=2823PC=2823, opcode=00, decoded=0000.
3
PC=2824PC=2824, opcode=00, decoded=0000.
4
PC=2825PC=2825, opcode=00, decoded=0000.
5
PC=2826PC=2826, opcode=00, decoded=0000.
6
PC=2827PC=2827, opcode=00, decoded=0000.

Hat jemand einen Tipp, wo das Problem liegen könnte?
Herzlichen Dank und Gruß
Marcel

von Leo C. (rapid)


Lesenswert?

Marcel Andre schrieb:
> Testing RAM: fill...wait...reread...
> ... (hier laufen dann Hex-Zahlen "00<xx@yyyy" mit yyyy bis FFFF durch)

Der Test schreibt verschiedene Werte (xx) ins RAM, aber es wird 
offensichtlich von allen Adressen (yyyy) immer 00 zurück gelesen.

Bevor der RAM-Fehler nicht behoben ist, lohnt es sich nicht, über andere 
Fehler überhaupt nachzudenken. Daß beide RAM-Bausteine kaputt sind, oder 
mit 3,3V nicht funktionieren, glaube ich mal eher nicht.

--> Verdrahtung überprüfen.

Die Software-Revision von z80.asm habe ich im SVN gefunden. Die sollte 
also funktionieren, wenn sie richtig konfiguriert ist. CPU und 
Taktfrequenz scheinen richtig eingestellt zu sein, da sonst die Serielle 
nicht laufen würde. Und sonst gibts der Version eigentlich nichts 
einzustellen.

von Leo C. (rapid)


Lesenswert?

Marcel Andre schrieb:
> [[http://petersieg.kilu.de/avrcpm/avrcpm.html]].

Ehre wem Ehre gebührt. Und das ist in diesem Fall "Sprite_tm":
http://spritesmods.com/?art=avrcpm&page=2

von Marcel A. (dl1ekm)


Lesenswert?

Danke Leo für die Rückmeldung !

Verdrahtung habe ich (mehrfach, auch mit Messgerät) überprüft. Da ist 
alles nach dem Grundplan (den auf Sprite...) richtig 
[http://spritesmods.com/?art=avrcpm&page=2].
Es gab da ja mal eine Änderung..., aber die ist da ja schon 
berücksichtigt?

Bei mir ist PC1 - WE und PC4 - DO2/IO3

von Leo C. (rapid)


Lesenswert?

Marcel Andre schrieb:
> Bei mir ist PC1 - WE und PC4 - DO2/IO3

Umdrehen!

siehe z80.asm:
1
;Port C
2
.equ ram_d0 =  0
3
.equ ram_d1 =  1
4
.equ ram_d2 =  2
5
.equ ram_d3 =  3
6
.equ ram_w  =  4
7
.equ ram_cas=  5

Die Leitungen haben wir vertauscht, damit die 4 Datenleitungen zusammen 
auf einem Nibble liegen. PC0..PC3 kann man natürlich beliebig 
untereinander tauschen.

von Marcel A. (dl1ekm)


Lesenswert?

Leo C. schrieb:
> Marcel Andre schrieb:
>> Bei mir ist PC1 - WE und PC4 - DO2/IO3
>
> Umdrehen!
>
> siehe z80.asm:
>
1
> ;Port C
2
> .equ ram_d0 =  0
3
> .equ ram_d1 =  1
4
> .equ ram_d2 =  2
5
> .equ ram_d3 =  3
6
> .equ ram_w  =  4
7
> .equ ram_cas=  5
8
>
>
> Die Leitungen haben wir vertauscht, damit die 4 Datenleitungen zusammen
> auf einem Nibble liegen. PC0..PC3 kann man natürlich beliebig
> untereinander tauschen.

Genau das war es: Gegenüber der original-Beschaltung (Image und 
Eagle-Datei) mussten 3 Leitungen anders belegt werden.
Super herzlichen Dank!
Ich sage Peter noch Bescheid, ggf. die Doku zu ändern, damit andere 
"Späteinsteiger" nicht in die gleiche Falle tappen.

Gruß
Marcel

von Peter S. (petersieg)


Lesenswert?

hmm. Auf meiner Seite steht das schon genauso, wenn sich das mal 
chronologisch durchliest.

Ach, sehe gerade, das ist die Ur-Altseite..

Besser diese hier:
http://petersieg.bplaced.net/

Dort steht:
Update
Hier der aktuelle Entwicklungstand der Software: avrcpm_upd.zip

* Warmstart (behoben im Bios; in den 2 diskimages enthalten)

* 8080 Opcodes fehlerbereinigt (MBASIC laeuft jetzt!)

* Unterstuetzung fuer ATmega8, 88, 168

* 2 Diskimages mit neuem Bios enthalten

Achtung: 2 Leitungen sind zu tauschen (Beschleunigung DRAM Zugriffe):

Pin 24 - PC1 - /WE

Pin 27 - PC4 - IO3


---

@Leo C: Zitat:
Marcel Andre schrieb:
> [[http://petersieg.kilu.de/avrcpm/avrcpm.html]].

Ehre wem Ehre gebührt. Und das ist in diesem Fall "Sprite_tm":
http://spritesmods.com/?art=avrcpm&page=2

=> Die Ehre von sprite_tm als Entwickler der Ursprungs-Version war hier 
nie in Gefahr! Sowas hatte Marcel doch gar nicht geschrieben..
Und die "Ehre" für meine Seite(n) und deren Informationen beanspruche 
ich schon noch für mich..

;-)

Peter

von Marcel A. (dl1ekm)


Lesenswert?

Eine Frage hätte ich noch, bevor ich mich an die "echte" Z80-Version 
mache: Man findet "im Netz" ja jede Menge Software, die angeblich für 
CP/M 2.2 und 8080-CPU gemacht wurde (z.B. TurboPascal 1.0).
Dennoch bricht so etwas immer mit falschem Opcode ab.
Ist das so richtig? Verlangt das doch die Z80-Emulation?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

TurboPascal läuft nur tatsächlich nur unter Intel 8086 oder Z80.

von c-hater (Gast)


Lesenswert?

Joe G. schrieb:

> TurboPascal läuft nur tatsächlich nur unter Intel 8086 oder Z80.

Das kann ja dann nur bedeuten, daß die Z80-Emulation noch nicht gut 
genug ist. Da man prinzipiell immer eine 100%-Softwareemulation 
hinkriegen (schließlich sind die Dinger allesamt Turing-vollständig), 
kann es also allenfalls an der letztlich erzielbaren 
Ausführungsgeschwindigkeit klemmen.

Deswegen ist es auch kein bissel spannend, CP/M oder TP auf einem AVR 
zum Laufen zu kriegen, denn es steht von vornherein fest, daß es möglich 
sein muß. Das einzig spannende ist, wie schnell das Ergebnis laufen 
wird. Und das hängt nur davon ab, wie effizient die Emulation der CPU 
auf dem Zielsystem ist.

Der Rest ist nicht mehr und nicht weniger als ein Benchmark für die Güte 
der eigentlichen Problemlösung, sowohl in Hinsicht auf die Exaktheit als 
auch die Effizienz der Emulation.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

c-hater schrieb:
> Joe G. schrieb:
>> TurboPascal läuft nur tatsächlich nur unter Intel 8086 oder Z80.
> Das kann ja dann nur bedeuten, daß die Z80-Emulation noch nicht gut
> genug ist.

Diesen Kommentar verstehe ich nicht. Für alle Interessenten.
Die Z80 Emulation läuft vollständig, somit auch Turbo Pascal und andere 
Programme die nur unter CP/M und Z80 Code laufen.

von Leo C. (rapid)


Lesenswert?

Peter Sieg schrieb:
> => Die Ehre von sprite_tm als Entwickler der Ursprungs-Version war hier
> nie in Gefahr! Sowas hatte Marcel doch gar nicht geschrieben..
> Und die "Ehre" für meine Seite(n) und deren Informationen beanspruche
> ich schon noch für mich..

Peter, ich will Deine Leistung für das Projekt garnicht 
kleinreden/schreiben, aber Du verwendest den handgemalten Schaltplan von 
sprite_tm ohne Quellenangabe. Überhaupt sehen imho die zahlreichen 
Seiten für den uneingeweihten Betrachter so aus, als wäre das alles auf 
Deinem Mist gewachsen. Erst wenn man auf die Idee kommt, den 
unkommentierten Links zu folgen (auf der petersieg.kilu.de-Seite nicht 
anklickbar), weiß man mehr.

Vorschlag: Analog zum hiesigen AVR CP/M-Artikel im ersten Absatz 
ein/zwei Sätze zur Herkunft des Projekts einfügen.
Und eine Quellenangabe/Copyright zur Grafik 'avrcpm.png'.
Und wenn dann noch je ein halber Satz erklären würde, wo die 4 Links am 
Anfang hinführen, wärs perfekt.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Gestern habe ich endlich mal Joes neue Platine (teil)bestückt und heute 
in Betrieb genommen. Der Hauptteil läuft.

Terminal und USB-Schnittstelle habe ich erst mal weggelassen, und der 
3,3V-Spannungsregler fehlt mir noch (inzwischen bestellt).
Vorläufig habe ich einen externen USB/Serial-Adapter dran, der auch 3,3V 
liefert.

Beim Bestücken ist mir aufgefallen, daß die Pads für den Uhrenchip nicht 
passen (zu eng, für das schmalere SO-Gehäuse). Das ist aber kein großes 
Problem, da unterhalb des Chips Platz genug ist.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Beim Bestücken ist mir aufgefallen, daß die Pads für den Uhrenchip nicht
> passen

Oh Mist, da habe ich wohl geträumt! Ich bin leider bis auf die 3.3V und 
den USB-Teil noch nicht so weit gekommen. In einigen Tage geht es aber 
wieder weiter. Ich würde dann auch mal eine kleine Bauanleitung für die 
Hard- und Software erstellen, da es für einen Neueisteiger schon recht 
unübersichtlich wird.

@Leo.C. Was macht denn der lustige Draht der zum RTC geht?

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> @Leo.C. Was macht denn der lustige Draht der zum RTC geht?

Der Draht geht, vom CS der SD-Karte kommend, scharf am RTC vorbei an das 
abgeknickte Bein der LED. Ich habe die Betriebs-LED privisorisch zur 
"Drive-Select"-Anzeige umgewidmet. Ohne diese Anzeige kann ich gar nicht 
mehr leben.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Ohne diese Anzeige kann ich gar nicht
> mehr leben.

Dann ist das ja ein MUSS für das Pflichtenheft der nächsten Version ;-)

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Hier mal ein erster Vorschlag für das I2C-Interface

Der Parallel-I/O Chip hat nur je ein Input- und Output- und keinerlei 
Steuerregister. Daher bietet es sich an, In und Out direkt auf 
Z80-I/O-Befehle zu mappen. Im Moment sieht es so aus:
1
;------------------------ Ports ------------------------------------------
2
;80-87    in/out  - Port-Expander PCF8574 (max. 8 Chips)
3
;88-8F    in/out  - Port-Expander PCF8574A (not implemented yet!)

Da 8 Chips adressierbar sind, habe ich auch 8 Adressen reserviert. Mit 
der A-Variante sind insgesamt 16 Ports adressierbar.

Der RTC und weitere, am externen Bus angeschlossene I2C-Chips (und wenn 
man will, auch der PCF8574) können über das folgende Interface 
angesprochen werden:
1
;------------------------ Virtual I2C interface --------------------------
2
;05       out     - Control Port: 1 = Start read operation
3
;                                 2 = Start write operation 
4
;05       in      - Status of last Transfer: 0 = ok, else fail
5
;06       in/out  - Number of bytes to transfer, including Slave address
6
;07,08    in/out  - Read/Write address low/high

Das Z80-Programm füllt einen Puffer mit der Slave-Adresse, und im 
Sendefall, mit den zu sendenden Daten. Die Pufferadresse und die Anzahl 
zu übertragender Daten, werden über die oben angegebenen Ports an den 
Treiber übergeben. Die Länge schließt immer die Slave-Adresse mit ein.
Anschließend wird der Transfer über die Ausgabe auf Port 5 gestartet. 
Z.Zt. ist interne Puffer 17 Byte groß. Es können also maximal 16 
Datenbytes (z.B. zu oder von einem EEPROM) übertragen werden.
Fehlerbehandlung und -Rückmeldung ist bisher nur rudimentär. Evtl. muß 
dort noch nachgearbeitet werden.

Um das Interface und den RTC-Chip zu testen, habe ich ein quick&dirty 
Programm mit Turbo-Pascal geschrieben. Eingecheckt ist noch nichts. 
Deshalb der Anhang mit (hoffentlich) allen geänderten Dateien.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Deine Idee mit der I2C Interface finde ich gut so. IN/OUT über I/O. Ist 
ja fast wie die alte PIO ;-)

Die Variante deines Virtual-I2C-Interface klingt auch schlüssig. So 
lassen sich dann auch A/D-Wandler, LCD-Anzeigen etc. anschließen. Ich 
werde wohl heute mal einen intensiven Löttag einlegen...

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> werde wohl heute mal einen intensiven Löttag einlegen...

Ich hoffe, Du bist voran gekommen, und kannst den aktuellen 
Softwarestand, den ich heute eingecheckt habe, testen.
Die Schnittstelle zur Uhr habe ich nochmal geändert. Deshalb muste der 
ZSDOS-Treiber AVRCLOCK.MAC angepaßt werden.

Joe G. schrieb:
> Dann ist das ja ein MUSS für das Pflichtenheft der nächsten Version ;-)

Beim Aufbau der Platine sind mir noch ein paar Punkte auf/eingefallen:
PCF8583:
 - An Pin 1 (OSCI) muß ein Kondensator angeschossen sein. Das
   Datenblatt empfiehlt einen Trimmer 5-25pF. Bei mir tuts
   ein 15pF C (Abweichung in 3 Tagen ca. +2s). Ohne läuft die Uhr
   nicht richtig an.
   --> Pads für C und/oder Trimmer vorsehen.
 - Lithiumzelle (hält Jahre) statt Gold-Cap (hält Tage)?
   CR2032 ist spottbillig, aber leider etwas groß.

SD-Card:
 - C11 scheint mir etwas klein dimensioniert. 4,7µF --> 47µF?
 - Keine Pullups
   Zu beiden Punkten siehe  http://elm-chan.org/docs/mmc/mmc_e.html
   (Abschnitt "Cosideration to Bus Floating and Hot Insertion")

FT232RL:
 - R21 u. R22 (LED-Widerstände)
   Sind 10K nicht etwas groß? (Bei mir noch nicht bestückt)

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Vielen Dank für die Hinweise!

Leo C. schrieb:
> An Pin 1 (OSCI) muß ein Kondensator angeschossen sein.
Ist aufgenommen, auch die Änderung der Bauform. Mal
sehen welche Lithiumzelle ich unter bekomme.

Leo C. schrieb:
> - Keine Pullups
Ist auch aufgenommen.

Generell zu den R und C's:
Die 10K bzw. 10µ oder 4,7µ sind immer durch Copy und Paste an die Stelle 
gekommen wie ein R oder ein C bestückt werden sollte. Dabei habe ich den 
Bauteilwert nicht angepaßt. Also bei der Bestückung wirklich darauf 
auchten welcher Wert sinnvoll ist. Ich ändere es aktuell gerade in den 
Schaltungen.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Bis auf das Terminal (VGA) ist alles bestückt und läuft. Ich teste nun 
deine Software.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@ Leo C.
Läuft Dein Server http://cloudbase.homelinux.net/... scheint nicht zu 
laufen.

von Leo C. (rapid)


Lesenswert?

Sever läuft.
Allerdings ging die Namensauflösung seit heute Morgen nicht mehr.
Sollte jetzt wieder gehen. Mein Browser weigert sich aber auch noch. 
seltsam. Wenns bei Dir auch noch nicht tut, versuche mal 
e179220223.adsl.alicedsl.de als Server.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Danke! Mit der "Ersatzadresse" get es.

Die neue AVR Software läßt sich erstmal fehlerfei übersetzen und CP/M 
bootet auch korrekt.

Um den RTC anzusprechen ist sicherlich zunächst die TP-Quelle gedacht. 
Wird AVRCLOCK.MAC dann noch benötigt? Ich nehme an, für den RTC hast du 
A0 auf GND gelegt (Adr. A0)

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> Die neue AVR Software läßt sich erstmal fehlerfei übersetzen und CP/M
> bootet auch korrekt.

Im Moment ist es so, daß die Initialisierung hängen bleibt, wenn am 
I2C-Bus keine Pullup-Widerstände sind, also z.B. auf "alter" Hardware. 
Das möchte ich demnächst noch ändern.

> Um den RTC anzusprechen ist sicherlich zunächst die TP-Quelle gedacht.

Das TP-Programm war zum Testen der I2C-Schnittstelle und der Uhr 
gedacht, und kann noch als Beispiel verwendet werden.

> Wird AVRCLOCK.MAC dann noch benötigt? Ich nehme an, für den RTC hast du
> A0 auf GND gelegt (Adr. A0)

Ja, und ja.
In AVRCLOCK.MAC ist der Treiber für ZSDOS. Aus AVRCLOCK.REL wird mit 
SETUPZST.COM das CLocktreiber-Ladeprogramm LDTIM.COM gebaut. Für den 
schnellen test habe ich mal ein fertiges LDTIM.COM hier angehängt.

Man kann den Treiber auch ins BIOS einbauen. Dazu muß man ZSDOS 
entsprechend konfigurieren. Kommt demnächst...

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Danke für die schnelle Antwort!
Bin gerade am I2C Test.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> Mal sehen welche Lithiumzelle ich unter bekomme.

Der Punkt war mehr als Frage und zur Diskussion gedacht. Vielleicht gibt 
es ja noch Gründe für einen Kondensator, die ich übersehen habe. Wie 
groß ist denn dein Goldcap?

Ich habe nur welche mit 0.1F hier. Bin zur Zt. am Messen. 2 volle Tage 
scheint er nicht ganz zu schaffen. Laut Datenblatt sollte der Strom 
unterhalb von gut 2V konstant sein. Das sieht bei mir anders aus.

von Peter S. (petersieg)


Lesenswert?

@leo C.: Da hattest du Recht.. war etwas dünn. Habe nachgebessert:

http://petersieg.bplaced.com/?AVR_CP%2FM

Gruß Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Leo C.
Für LDTIM.COM hätte ich ja auch mal das Handbuch lesen können ;-) 
Programm läuft jedoch, auch das nun neue ACT.COM
Bei der Uhr habe ich noch Probleme, es kommt recht großer Unsin vom RTC. 
Nun muß ich erst mal ein Oszi an die I2C Leitungen hängen.

von Leo C. (rapid)


Lesenswert?

Joe,

geht denn der I/O-Port?
Einfach zu testen mit ddtz.
"I80" zum Lesen. "O<val> 80" zum Schreiben.

Wenn das geht sehe ich keinen Grund, warum die Uhr nicht auch gehen 
sollte.

hast Du einen C (ca. 18pF) von Pin 1 nach Vdd am RTC?

"Dummerweise" wird beim Schreiben der Uhr das 1Hz-Signal am 
Interupt-Ausgang (Pin 7) abgeschaltet (In der Routine "rtc_set", durch 
Setzen des "alarm enable" bits.
Nach Powerup kann man das Signal aber auf jeden Fall messen (Pullup 
notwendig).

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Programm läuft jedoch, auch das nun neue ACT.COM

Das Programm ist nicht neu. :-)

Joe G. schrieb:
> TIMER.COM darf auch ACT.COM heißen. (AVR CP/M Tool) ;-)

Oder AVRCPM Control Tool.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Joe G. schrieb:
>> TIMER.COM darf auch ACT.COM heißen. (AVR CP/M Tool) ;-)

hatte ich schon vergessen ;-)

Habe den Fehler nun eingegrenzt. Quarz schwingt, C zu Vdd auch nicht 
vergessen, 1 Hz kommt, ABER die Option I2C beim Compiler nicht 
eingestellt. Wenn ich nun jedoch I2C auf 1 setze, dann kommt das 
Programm nichtmal bis zu einer Terminalausgabe. Die zwei PullUp 
Widerstande sind jedoch am Bus.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Nachtrag: die Routine rtc_get hängt

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Nachtrag: die Routine rtc_get hängt

Das dachte ich mir.
Wie sieht denn der I2C-Bus aus? Insbesondere SCL.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Beide Leitungen sind Low
In welchem File steckt eigentlich rtc_get?

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Beide Leitungen sind Low

Die Pullups sollten die aber hochziehen.

> In welchem File steckt eigentlich rtc_get?
leo@cb: grep rtc_get: *.asm
timer.asm:rtc_get:

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Die Pullups sollten die aber hochziehen.

Der Controller zieht nach der Routine i2c_init die Leitungen auf Low.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Leo C. schrieb:
>> Die Pullups sollten die aber hochziehen.
>
> Der Controller zieht nach der Routine i2c_init die Leitungen auf Low.

Open Drain.
In der allgemeinen Init werden die Ports auf Ausgang und auf High 
geschaltet (Sollte vielleicht geändert werden).
In i2c_init werden die aktiven Treiber abgeschaltet, und wenn keine 
Pullups vorhanden sind, floaten die Leitungen nach Low.

Bei offenen Leitungen (Pullups fehlen oder falsch verdrahtet) sollte ca 
70ms nach steigender Reset-Flanke ein ca 300µs langer High-Impuls 
kommen.

Wenn die Leitungen ohne den Impuls dauerhaft auf Low liegen, zieht die 
irgendwas runter. Das sollte aber nicht der Processor sein, wenn Du die 
gleiche Software hast, wie ich.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Bei zwei Widerständen auf einem genau quadratischen Pad, kann man beide 
Widerstände auch genau um 90 Grad verdreht bestücken :-( Ich löte gerade 
um...

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Und nun geht es. Danke!
Werde nun den VGA Teil bestücken.

von Peter S. (petersieg)


Lesenswert?

@alle: Da ich noch 1-2 Anfragen hatte aber keine Platine mehr, habe ich 
nochmals ein kleine Auflage an roten Platinen des AVR CP/M USB Sticks 
bestellt.

Wer welche haben möchte (=> Mail!):
* Platine: 12€
* SD Slot:  3€
* ATmega328:4€ (programmiert)

Versand im Polsterumschlag: 2€
Das wird wohl die letzte Auflage werden, weil die SD Slots nur noch
schwer zu bekommen sind.

Peter

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Die letzten Tage habe ich mich auch mal mit Bootloadern beschäftigt.

1. Im Artikel AVR CP/M ist ja schon einer beschrieben. Der geht aber 
wohl nur mit Hardware-UART und ist für mich sowieso uninteressant, da 
zum Laden propietäre Windows-Software gebraucht wird.

2. AVR Bootloader FastBoot von Peter Dannegger
Läuft quasi out-of-the-box. Egmont hat vor einiger Zeit schon was dazu 
geschrieben.
Egmont schrieb:
> fboot funktioniert bei mir nur bis Win XP.
Allerdings gibts mehrere Alternativen zu fboot, zum Teil mit 
Verbesserungen. Das hier läuft bei mir, und läßt sich auch in gängige 
Terminalprogramme einbinden: 
Beitrag "Re: UART Bootloader ATtiny13 - ATmega644"
Im Wiki-Artikel sind aber auch noch andere genannt.

3. MMC/SD Bootloader für AT Mega von Stefan Seegel.
   (http://www.mikrocontroller.net/articles/MMC/SD_Bootloader_f%C3%BCr_AT_Mega)

Das ist zur Zeit man Favorit. Man kopiert ein Image mit der neuen 
Software auf eine SD-Karte, schiebt sie in den AVRCPM-Computer und 
drückt Reset. Nach ca. 3 Sekunden meldet sich die neue Software.

Eine Version des Laders, die mit allen meinen SD-Karten (auch SDHC) 
läuft, habe ich vor kurzem in das Forum gestellt: 
Beitrag "Re: MMC/SD Bootloader füt ATMega16"

Der Bootloader lädt nur Dateien, die eine passende Kennung und gültige 
CRC-Summe haben. Im Anhang ist deshalb mal ein Beispiel, wie man die 
Kennung in Makefile und avrcpm.asm integrieren kann.

Wer zufällig ein AVRCPM mit ATmega328(P), 8-Bit-RAM, 115200 Baud hat, 
kann auch die fertigen Dateien im Toplevel-Dir des Zips zum Testen 
nehmen.
Das Hexfile flashen, Fuses einstellen auf: Boot section size 1024K 
Words, Boot reset vector enabled (BOOTRST) (avrdude -U hfuse:w:0xd2:m). 
Die Bin-Datei auf Karte kopieren und einstecken. Sollte klappen.

ps:
Peter Sieg schrieb:
> Wer welche haben möchte (=> Mail!):
> ...
> * ATmega328:4€ (programmiert)

Für Kunden, die diesen Service nutzen, müßte der MMC-Bootloader doch 
auch ideal sein.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Klasse! MMC ist auch mein Favorit. Ich werde gleich mal testen...

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Leo C.

Der Bootloader scheint bei mir zu laufen. Wenn den AVR lösche wird nach 
dem Reset offensichtlich die Datei avrcpm-3.1-test.bin in den Flash 
geschrieben denn das CP/M läuft dann wieder. Allerdings bekommt man 
keinen Hinweis, dass die Software nachgeladen wurde.

Die Quellen im Trunk-Verzeichnis lassen sich nur ohne die Option I2C=1 
übersetzen. Ansonsten kommen Speicherzuordnungsfehler.

Wie muß aus der HEX eine BIN Datei gemacht werden? Die Datei scheint mir 
mit FF aufgefüllt und am Ende steht noch ACPM + Prüfsumme?

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> geschrieben denn das CP/M läuft dann wieder. Allerdings bekommt man
> keinen Hinweis, dass die Software nachgeladen wurde.

Wie auch.
Der Bootloader kennt von der Hardware nur das allernötigste. LEDs haben 
wir keine. Und die Software selbst weiß ja nicht, daß sie gerade erst 
geladen wurde.

Normalerweise sollte man wissen, daß man eine Karte mit neuer Software 
einsteckt. Bei mit flackert dann lustig die LED am Card-Select-Pin.
Beim Starten sollte man auch an der veränderten Versionsnummer sehen, 
daß die Software neu ist. Es sei denn, man hat eine Testversion geladen.

> Die Quellen im Trunk-Verzeichnis lassen sich nur ohne die Option I2C=1
> übersetzen. Ansonsten kommen Speicherzuordnungsfehler.

Ups, hatte ich nicht getestet. Mit den angehängten Dateien sollte es 
wieder gehen.

> Wie muß aus der HEX eine BIN Datei gemacht werden?

make bin
(Oder im Makefile das bin-Target suchen, und die zwei Anweisungen dort 
manuell ausführen, oder ins eingene Build-Dings übernehmen.)

> Die Datei scheint mir mit FF aufgefüllt und am Ende steht noch ACPM + Prüfsumme?

Ja. Und die Versionsnr. (Major,Minor). Normalerweise wird nur geladen, 
wenn die auf der Karte gefundene Versionsnr. größer ist, als die 
Installierte. Es sei denn, auf der Karte wurde eine Version 0.0 
gefunden, die immer gelagen wird (Testversion). Alles im 
Bootloader-Thread zu finden:
http://www.mikrocontroller.net/topic/goto_post/3085712

von Leo C. (rapid)


Lesenswert?

Nachtrag (Bearbeitung ging nicht mehr)
'make bin' sieht (expandiert) so aus:
1
$ avr-objcopy -I ihex -O binary --gap-fill 0xff  avrcpm.hex avrcpm-3.1.bin
2
$ crcgen avrcpm-3.1.bin

'crcgen' ist im Bootloader-Paket.
'objcopy' ist in den GNU-Binutils, und dürfte damit auf nahezu jedem 
unixoiden System vorhanden sein (auch Cygwin und ähnliches). Es muß 
nicht unbedingt 'avr-objcopy' sein. Aber das wird üblicherweise mit 
avr-gcc mitgeliefert (WinAVR). Es gibt aber auch andere hex2bin Tools. 
Auch welche die die Lücken mit 0xff füllen (Wahrscheinlich auch im 
Bootloaderthread zu finden). Aber das ist ja schon reiner Luxus.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Besten Dank für die Erklärung.
Stimmt, die aktuelle Versionsnummer sollte es richten ;-)
Mit crcgen und objcopy geht es nun auch. Damit ist ein Softwareupdate 
über MMC eine wirklich feine Sache.
Nur mal nebenbei. Ist eigentlich die veränderte serielle Routine 
eingearbeitet? Das Flackern im TP Editor ist weg :-)

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Nur mal nebenbei. Ist eigentlich die veränderte serielle Routine
> eingearbeitet? Das Flackern im TP Editor ist weg :-)

Ja. Damit wäre dieser Test wohl auch abgehakt. ;)

Wahrscheinlich habe ich aber auch einen kapitalen Fehler 
"eingearbeitet". :-(
TP produziert mit einem einfachen kleinen Programm nur Mist. Vermutlich 
ist bei den Z80 Opcodes ein Fehler in den Interpreter gerutscht. Die 
gestern geposteten Dateien also bitte nicht für ein Produktionssystem 
benutzen. ;-)


ps:
Hier das Programm (von hier 
http://blogs.embarcadero.com/davidi/2008/11/06/38988 ):
1
program eightqueens;
2
{
3
    Eight Queens problem - recursive edition
4
      from Nicklaus Wirth's book:
5
      Applications + Data Structures = Programs }{
6
    Modified 11/06/2008 by David Intersimone "David I"
7
      to work with Turbo Pascal version 1.0:
8
    1 - added NumberOfIterations and loop to be able to benchmark
9
      on modern circa 2008 PCs
10
    2 - added MSDOS calls Int21h with AH=2Ch to get System Time
11
    3 - commented out the call to 'print' the solutions to remove
12
      screen output from the benchmark time
13
}
14
15
{ type
16
  MSDOS_Parameters_Type = record
17
    AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags : Integer;
18
  end;
19
}
20
21
const
22
{  NumberOfIterations = 12000;} {for benchmarking on modern PCs how many times to solve it}
23
  NumberOfIterations = 1;
24
25
{ AVR CP/M System }
26
TctrPort = $40; {Timer control port}
27
CmdTStart = 1;  {Timer Start/Stop Commands}
28
CmdTStop  = 15;
29
30
var
31
  i: Integer;
32
  a: array[1..8] of boolean;
33
  b: array[2..16] of boolean;
34
  c: array[-7..7] of boolean;
35
  x: array[1..8] of Integer;
36
  SolutionIterations : Integer;
37
{  MSDOSParameters : MSDOS_Parameters_Type;}
38
39
procedure print;
40
var
41
  k: Integer;
42
begin
43
  for k := 1 to 8 do Write(x[k]:4); Writeln;
44
end;
45
46
procedure try(i:Integer);
47
var
48
  j: Integer;
49
begin
50
  for j := 1 to 8 do
51
    if a[j] and b[i+j] and c[i-j] then
52
    begin
53
      x[i] := j;
54
      a[j] := false; b[i+j] := false; c[i-j] := false;
55
      if i < 8 then
56
        try(i+1)
57
       else
58
        print ;
59
      a[j] := true; b[i+j] := true; c[i-j] := true;
60
    end
61
end {try};
62
63
begin
64
  Writeln('Running ',NumberOfIterations,' iterations');
65
  Writeln;
66
  Write('Press ENTER to start searching for the 92 solutions...');
67
  Readln;
68
{
69
  MSDOSParameters.AX := $2C00; MsDos(MSDOSParameters);
70
  Writeln('Start Time: ',Hi(MSDOSParameters.CX),':',Lo(MSDOSParameters.CX),
71
      ':',Hi(MSDOSParameters.DX),'.',Lo(MSDOSParameters.DX));
72
}
73
  Port[TctrPort] := CmdTStart;
74
75
  for SolutionIterations := 0 to NumberOfIterations do begin
76
    for i := 1 to 8 do a[i] := true;
77
    for i := 2 to 16 do b[i] := true;
78
    for i := -7 to 7 do c[i] := true;
79
    try(1)
80
  end;
81
{
82
  MSDOSParameters.AX := $2C00; MsDos(MSDOSParameters);
83
  Writeln('End Time: ',Hi(MSDOSParameters.CX),':',Lo(MSDOSParameters.CX),
84
      ':',Hi(MSDOSParameters.DX),'.',Lo(MSDOSParameters.DX));
85
}
86
87
  Port[TctrPort] := CmdTStop;
88
  Readln;
89
end.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

In der aktuellen Version scheint "rcall" für die Funktion printhex nicht 
mehr auszureichen. Mit "call" läuft es.

dsk_fsys.asm

printstring "DISK I/O: Invalid Function code: "
(r)call  printhex
rjmp  haltinv

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> In der aktuellen Version scheint "rcall" für die Funktion printhex nicht
> mehr auszureichen. Mit "call" läuft es.
>
> dsk_fsys.asm
>
> printstring "DISK I/O: Invalid Function code: "
> (r)call  printhex
> rjmp  haltinv

Das kommt davon, wenn man die Reihenfolge der Module verändert und 
unkontrolliert Zwischenstände verteilt.

Bei mir heißt die Stelle:
  printstring "DISK I/O: Invalid Function code: "
  lcall  printhex
  rjmp  haltinv

Seit gestern sogar schon im svn. lcall/ljmp sind Macros, die wenn 
möglich r{call|jmp} einsetzen, und sonst eben ohne r.

Das Turbo-Pascal Problem liegt übrigens nicht am Z80-Interpreter, 
sondern daran, daß man für rekursive Programme eine Option setzen, bzw. 
abschlten muß: {$A- }

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Der jetzige "Zwischenstand" aus dem svn geht :-) Sogar mit I2C=1 ohne 
(!) Pullup. Bei der Vielzahl der jetzigen Möglichkeiten braucht es 
dringend eine Dokumentation. Ich sehe ja bald selber nicht mehr durch 
;-)

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Der jetzige "Zwischenstand" aus dem svn geht :-) Sogar mit I2C=1 ohne
> (!) Pullup.

Das geht ja schon seit Ewigkeiten (17.2.) ;)
Damit könnte man den Treiber eigentlich fest reinnehmen, und den 
I2C-Schalter aus der Config rauswerfen. Es sei denn, man will/muß auch 
Flash sparen können, für kleinere Megas.

> Bei der Vielzahl der jetzigen Möglichkeiten braucht es dringend
> eine Dokumentation. Ich sehe ja bald selber nicht mehr durch ;-)

Du bist nicht allein. ;-)
Die Schalter haben zwar alle mindestens eine Zeile Kommentar in 
config.inc, aber die Zusammenhänge lassen sich damit nur mühsam 
erschließen. Vielleicht sollte man die Schalter mal alle auflisten, nach 
Katerogien sortiert. Mit etwas ausführlicheren Kommentaren, und 
Beschreibung der Abhängigkeiten. Die Liste könnte man in config.inc oben 
einfügen, in eine extra Datei, und/oder auf die Projektseite setzen.

Viele Schalter kann man auch im Makefile setzen. Wahrscheinlich sorgt 
das für weitere Verwirrung. Es hat aber den Vorteil, daß man schnell mal 
für einen Test mit anderen Optionen übersetzen kann, ohne die Sourcen zu 
ändern. Makefile-Schalter kann man z.B. auch auf der Befehlszeile 
setzen:
1
$ make DEVID_S="" MCU=atmega168
wenn man wissen will, ob das Programm ohne Bootloader in den ATmega168 
passt. (Passt (noch) nicht, und EM_Z80 kann man im Makefile nicht 
abschalten.) ;-) Oder:
1
$ make clean bin BAUD=9600
wenn man für Testzwecke mal schnell eine andere Baudrate braucht.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Vorschlag. Wir könnten doch zunächst alle Schalter auf eine „optimale“ 
Defaulteinstellung setzen, so wie es zum Teil schon realisiert ist.  Wer 
eine wirklich eigene Variante haben möchte, kommt sowieso nicht um eine 
intensive Beschäftigung mit der Materie drum rum.

Defaultvorschlag:

DRAM-8BIT
F_CPU 20000000
BAUD 115200
I2C=1
EM_Z80=1
DBOOTLDRSIZE=2048

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> Vorschlag. Wir könnten doch zunächst alle Schalter auf eine „optimale“
> Defaulteinstellung setzen, so wie es zum Teil schon realisiert ist.  Wer

Sowas ähnliches habe ich jetzt mal gemacht (Anhang). Als Default-MCU 
habe ich jetzt mega328P eingestellt. Den will ja sowiso jeder haben, 
weil nur damit Z80 geht. Die Kommentare sind aber noch ausbaufähig.

> eine wirklich eigene Variante haben möchte, kommt sowieso nicht um eine
> intensive Beschäftigung mit der Materie drum rum.

Ja, wobei die bisherige Config aber auch schon zu (vermeidbaren) 
Mißverständnissen geführt hat. (Z.B. [1])

> Defaultvorschlag:
>
> DRAM-8BIT
> F_CPU 20000000
> BAUD 115200
> I2C=1
> EM_Z80=1
> DBOOTLDRSIZE=2048

Da die Bootladerunterstützung ja für den speziellen MMC/SD Bootloader 
ist, andere Bootloader brauchen ja keine Unterstüzung, ist die Größe 
auch fest. Deshalb habe ich sie mit anderen Parametern als (notfalls 
änderbare) Konstanten weiter nach unten verbannt. Dafür gibt es jetzt 
einen Schalter
> MMCBOOTLOADER
der defaultmäßig eingeschaltet ist, weil das ja auch nicht stört.

Bevor ich die geänderte Config einchecke, bitte ich alle Mitleser sich 
daß mal anzuschauen, und ggf. Verbesserungsvorschläge zu machen. Mit den 
vorhergehenden Änderungen (RTC, I2C, MMC Bootloader Support) soll das 
Ganze demnächst Version 3.1 werden.


[1] Beitrag "Re: CP/M auf ATmega88"

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Bei mir läuft die aktuelle Version auf beiden Hardwareversionen (mit 
I2C/ohne I2C).
Die Voreinstellungen sind prima so, damit sollte der Einsteiger zunächst 
sein System übersetzt bekommen.

CPM on an AVR, v3.1 r201 Test
Testing RAM: fill...wait...reread...
Initing mmc...

A:FAT16 File-Image at: 8479, size: 256KB.
B:FAT16 File-Image at: 8959, size: 256KB.
C:FAT16 File-Image at: 8703, size: 256KB.
D:FAT16 File-Image at: 9087, size: 8192KB.
Partinit done.
Ok, Z80-CPU is live!
A>

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Eine Frage bleibt trotzdem.

Testversion=1 gesetzt und die Datei avrcpm-3.1.bin erzeugt. Es steht 
auch die Version 0.0 in der BIN-Datei. Nach 3 Sekunden Reset wird diese 
Version geladen (CPM on an AVR, v3.1 r201 Test) Bei einem kurzem Reset 
wird die Version (CPM on an AVR, v3.1 r199) von der Datei 
avrcpm-3.1-test.old geladen. Nach welchem Kriterium sucht der Bootloader 
nach einer gültigen Datei? Welche Namenskonventionen gelten für diese 
Datei?

von Leo C. (rapid)


Lesenswert?

Der Dateiname ist egal. Es wird nur nach dem Tag in der Datei geschaut: 
ID, Version und CRC. Wenn mehrere. Versionen auf der Kartesind, sollte 
die mit der höchsten Nummer geladen werden, falls sie das nicht schon 
ist. Eine 0.0 Version sollte immer geladen werden,   außer, wenn genau 
diese schon im Speicher ist (CRC) . Wenn jetzt eine "normale" und eine 
0.0 Version auf der Karte sind, könnte es sein, dass zwischen den beiden 
getoggelt wird. Unschön, aber wie gehts besser? Der Anwender sollte ja 
auch ungefähr wissen, was er will,  und (nur) die passende Datei auf die 
Karte kopieren.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ok, toggeln muß ja auch nicht sein. Im Normalfall ist ja immer nur die 
aktuelle Version auf der Karte.

Die VGA-Baugruppe ist nun komplett bestückt und in Betrieb genommen 
(siehe Bilder). An der Software ist jedoch noch etwas zu tun. Anbei die 
erste Version (0.1). Sie könnte auch ins SVN aufgenommen werden. Mit 
einer Baudrate von 9600 laufen beide Systeme gut zusammen, bei einer 
höheren Baudrate kommt es zu Fehlern, obwohl es im Terminalmodus geht. 
Möglicherweise ein Pufferüberlauf. Die Tastatur geht derzeit nur mit dem 
US Layout und außerdem gehen einige ESC Sequenzen noch nicht.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Das erste Problem ist gelöst. Mit einer Puffererweiterung geht das 
Terminal nun auch mit 115200 Baud.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier ein ordentlicher Arbeiststand, mit dem man nun auch wirklich 
arbeiten kann.
- deutsches Tastaturlayout
- deutscher Zeichensatz

P.S: Hat jemand die CP/M Version mit Tastatur und VGA schon aufgebaut?

von Leo C. (rapid)


Lesenswert?

Hallo Joe,
Danke für Deine VT100-Software.

Joe G. schrieb:
> P.S: Hat jemand die CP/M Version mit Tastatur und VGA schon aufgebaut?

Meine Platine ist immer noch nicht komplett bestückt. Terminal und USB 
hatte ich ja erst mal weggelassen. Nachdem ich vorhin die Drähte für den 
externen USB-Seriell-Adapter weggelötet hatte, habe gemerkt, daß ich gar 
keinen FTDI habe. Mir war völlig entgangen, daß der auch nicht in Deinem 
Lieferservice mit drin war. Mal schauen, ob ich die Software auch ohne 
FTDI-Chip in den Propeller bekomme.

Inzwischen habe ich den Bootloader nochmal getestet. Bei mir toggelt er 
nicht zwischen 2 Programmversionen, aber 3 Punkte sind trotzdem unschön:

- Wenn außer der 0.0 Version noch eine andere auf der Karte ist, wird
  bei jedem Reset die Software (0.0) neu geladen.
- Die Suche nach einer neuen Version dauert unötig lange, weil für jeden
  Dir-Eintrag der ganze Dir-Sektor gelesen wird. D.h. jeder Sektor des
  Root-Directories wird 16 mal gelesen. Bei einem Gerät, bei dem im
  Normalbetrieb häufig Reset gedrückt wird, ist das schon ziemlich
  lästig.
- Wenn ich die Karte im PC neu beschreibe, und dann in den AVRCPM-
  Computer stecke, wird der erste Reset vom Bootloader ignoriert.
  (Wahrscheinich Init-Fehler). Erst beim 2. Reset wird die Software
  geladen.

Da die AVRCPM-Software unabhängig vom MMC/SD-Bootloader ist, und zu 
dieser keine weiteren "Beschwerden" mehr kamen, habe ich den letzten 
Stand heute ins SVN eingecheckt. Wenn weiterhin keine Änderungs- oder 
Verbesserungsvorschläge kommen, werde ich daraus demnächst eine Version 
3.1 machen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Den Fehler des ersten Reset habe ich wohl als toggeln interpretiert.

Den Propeller kannst du auch seriell programmieren. Es ist neben Rx und 
Tx nur noch ein Reset über DTR notwendig.

Bei der VT100 Software ist noch ein Bug bei R-Alt+Sonderzeichen, 
außerdem müssen noch die Umlaute Ö,Ü,Ä im Zeichengenerator erstellt 
werden. Demnächst kommt eine neue Version.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Den Propeller kannst du auch seriell programmieren. Es ist neben Rx und
> Tx nur noch ein Reset über DTR notwendig.

Das hatte ich befürchtet, daß DTR nicht optional ist. Heute Mittag habe 
ich mir einige FT232 besorgt und gleich einen eingelötet. Der CP/M-Teil 
läuft damit. Heute Abend kommt dann endlich der Propeller dran. Damit 
habe ich bisher noch gar nichts gemacht.


Die Software gibt es jetzt hier als Version 3.1:
http://cloudbase.homelinux.net/viewvc/avr-cpm/avrcpm/tags/3.1/

Neuigkeiten seit 3.0:
- Unterstützung der neuesten Platine von Joe G.
  - I2C
  - Parallel Port I/O: PCF8574 (PCF8574A)
  - RTC PCF8583
- ZSDOS clock driver
- Verbesserter Software-UART
- MMC/SD Bootloader support
- Konfiguration aufgeräumt
- Die üblichen kleinen Bug fixes und Verbesserungen

Also, außer I2C vielleicht,  nur Kleinigkeiten. Hauptgrund für die 
Version ist, daß ich den aktuellen Stand einfrieren möchte, weil ich 
schon wieder eine Menge Änderungen angefangen habe. Schwerpunkt dabei: 
Geschwindigkeitssteigerung, je nach Benchmark z.Zt. 10% - 20%, bei 
gleichzeitiger Einsparung von Flash. Ziel: Programm soll ohne Funktions- 
und Leistungseinbuße in den ATmega168 passen.

Jetzt wäre eigentlich ein guter Zeitpunkt um (Software-) Wünsche zu 
äußern. Gerne auch ausgefallene oder anspruchsvolle Ideen. (außer 
statisches RAM natürlich) ;-) Schließlich ist rund die Hälfe des 
Flash-ROMs noch frei. Da ich nicht der Osterhase bin, kann ich die 
Umsetzung natürlich nicht garantieren. Schon garnicht zum Fest.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier der aktuelle Stand für den Propeller. Wer noch keine Erfahrung 
damit hat, der startet einfach das Hauptprogramm (propCOMM2_VGA.spin) 
über F10 (läuft dann im RAM) oder F11 (wird in den EEPROM geladen).

Leo C. schrieb:
> Jetzt wäre eigentlich ein guter Zeitpunkt um (Software-) Wünsche zu
> äußern. Gerne auch ausgefallene oder anspruchsvolle Ideen. (außer
> statisches RAM natürlich) ;-)

Osterwunsch :) Nutzung der beiden AD-Wandler (ADC6 und ADC7) Sie könnten 
z.B. als 8 Bit Wandler laufen und über einen IN Befehl von einer festen 
Adresse geladen werden.

Über den statischen RAM habe ich tatsächlich schon nachgedacht, doch 
keine Sorge, nur bei unveränderter Pinbelegung. Mittels eines Latch und 
RAS/CAS könnte man weiterhin wie gehabt adressieren, jedoch die 
Refershzyklen einsparen. Damit sollte auch die Z80 Emulation schneller 
laufen.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Osterwunsch :)

2014 :)

> Nutzung der beiden AD-Wandler (ADC6 und ADC7) Sie könnten
> z.B. als 8 Bit Wandler laufen und über einen IN Befehl von einer festen
> Adresse geladen werden.

Sollten da nicht ein paar Parameter einstellbar sein? Vref, Betriebsart, 
Sample rate?

> Über den statischen RAM habe ich tatsächlich schon nachgedacht, doch
> keine Sorge, nur bei unveränderter Pinbelegung. Mittels eines Latch und
> RAS/CAS könnte man weiterhin wie gehabt adressieren, jedoch die
> Refershzyklen einsparen. Damit sollte auch die Z80 Emulation schneller
> laufen.

Der Refresh dauert incl. IntAck max. 24 Takte und kommt bei 20Mhz alle 
624 Takte. --> 3,85%

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Sollten da nicht ein paar Parameter einstellbar sein? Vref, Betriebsart,
> Sample rate?

Gerne. Gerne auch 10 Bit. Nun wird jedoch wieder ein Protokoll nötig.

von Leo C. (rapid)


Lesenswert?

Mein Propeller will nicht abheben. :-(

Ich verwende die Linux Software bst (Brad's Spin Tool). Gestern Abend 
habe ich aber auch mal die Windows Software (Spin Tool Software v1.3.2) 
versucht. Die schenken sich nichts.

Für mich siehts so aus, daß der Propeller einfach nichts senden will.

Heute Morgen habe ich probeweise das EEPROM ausgelötet (Sockel hätte 
wohl doch Vorteile gehabt) und den BOE-Pin auf VDD geklemmt. Ändert 
alles nichts.

- FT232 funktioniert mit dem CP/M-Teil einwandfrei.
- Die Leiterbahnen vom Jumperfeld zum Propeller habe ich
  durchgeklingelt. Verbindungen da, wo sie sein sollen. Keine
  Kurzschlüsse.
- Resetpuls ca. (25µs) kommt am Propeller an. Die steigende Flanke sieht
  merkwürdig aus, aber der Propeller scheint den Reset zu fressen.
- ca. 80ms später kommen Daten am RX-Pin des Propellers an.
- Am TX-Pin tut sich nichts. Wenn ich den Jumper ziehe, baumelt er um
  0 Volt herum. Ein 100K Widerstand reicht, um ihn hoch zu ziehen, und
  bei gestecktem Jumper zieht der FT232 ihn hoch.
- ca. 320ms nach Reset ist Aktivität auf dem I2C-Bus zum EEPROM. Also
  hat der Propeller die Daten vom Host nicht erkannt, und versucht nun
  sein Programm aus dem EEPROM zu laden.

Keine Ahnung, was ich noch versuchen könnte, außer Propeller tauschen. 
:-(

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Moment, Prop_RX, Prop_TX sind vertauscht. Kommt gleich noch eine Skizze.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Moment, Prop_RX, Prop_TX sind vertauscht. Kommt gleich noch eine Skizze.

So einfach kanns sein. Danke. Jetzt gehts.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

So siehts aus.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier die richtige Skizze. In der ursprünglichen Skizze waren RX_Prop und 
Tx_Prop vertauscht. Ursache ist ein Layoutfehler. Da alle Pins jedoch 
auf das Steckfeld gehen (zum Glück) kann der Fehler durch die nun 
richtigen Brücken korregiert werden.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Super! Da hast sich gerade unsere Post gekreuzt ;-)
Das EEPROM (Fassung ist gut) sollte wieder drauf. Ansosnten ist die 
Software nach dem Reset gelöscht.

von Leo C. (rapid)


Lesenswert?

EEPROM ist wieder drauf. Jetzt mit Sockel. Funktioniert auch. Leider 
geht die Tastatur (noch) nicht. Das kann jetzt alles mögliche sein. Die 
habe ich vor ein paar Tagen zum Reinigen zerlegt und vielleicht falsch 
zusammen gebaut.

Das Terminal verschluckt aber Zeichen. Beim Hochfahren des AVRs wird nur 
die Hälfte der Meldungen angezeigt. Bei mir kommt da wg. 6 "Laufwerken" 
ziemlich viel Text.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Wenn die Tastatur korrekt angeschlossen ist, sollten die 3 LEDs beim 
Reset kurz aufblinken (Tastaturreset), tun sie das nicht, geht die 
Initialisierung schon schief.
Das "verschlucken" von Zeichen liegt an der Kommunikation. Der Puffer 
ist derzeit 256 Byte groß, reicht jedoch bei 115200 Baud offensichtlich 
für deine Datenmenge noch nicht aus. Mal sehen was sich da machen läßt.

von Leo C. (rapid)


Lesenswert?

Die Tastatur geht jetzt auch. R16 und R17 waren vertauscht. Evtl. ein 
Problem mit dem Bestückungsplan.

Ein paar Tasten gehen aber noch nicht so richtig.
"Backspace" macht seltsame Sachen
"+" auf dem Ziffernblock geht nicht.
"'" (Symbol über '#'): Dort scheint "`" (0x60) statt "'" (0x27) zu 
kommen.
"{[]}" Eckige und geschweifte Klammern fehlen.

Joe G. schrieb:
> Das "verschlucken" von Zeichen liegt an der Kommunikation.

Mit der noch nicht funktionierenden Tastatur hatte ich den interessanten 
Effekt, daß die Bootmeldungen alle richtig kamen, wenn ich den 
USB-Stecker (Stromversorgung) eingesteckt hatte. Beim Drücken der 
Reset-Taste kamen nur die verstümmelten Meldungen. Mit der 
funktionierenden Tastatur kommen jetzt nur noch verstümmelte Meldungen.

Der AVR-TXD-Leitung würde ein Pullup ganz gut tun. Wenn die Leitung am 
Jumperfeld offen ist, reicht es, wenn ich mit der Hand nur in die Nähe 
komme, damit der AVR verrückt spielt.

Nachtrag: Man kann natürlich auch den internen Pullup enablen. Werde ich 
gleich mal machen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Evtl. ein  Problem mit dem Bestückungsplan.

Danke, ich schau mal nach.

Leo C. schrieb:
> Ein paar Tasten gehen aber noch nicht so richtig.

Müßte nun alles bis auf Ö, Ä und Ü gehen.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

File vergessen

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> Müßte nun alles bis auf Ö, Ä und Ü gehen.

Die gehen nun auch und jetzt ist Ostern!

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Die gehen nun auch und jetzt ist Ostern!
Klammern gehen, Umlauts gehen, sogar die hier:²³

Die Backspacetaste spinnt aber noch und die Control-Codes gehen nicht. 
Eilt aber alles nicht.

Leo C. schrieb:
> "+" auf dem Ziffernblock geht nicht.

Die Taste ist kaputt.
Aber am CP/M-Computer brauche ich sie nicht unbedingt.

von Peter Z. (flexopete)


Lesenswert?

Moin Leo,
bin auch dabei die neue Platine aufzubauen. Prop-Terminal geht,
Tastatur geht auch. AVR lässt sich flashen, nur kommt nichts auf
der seriellen Schnittstelle. Übersetzt habe ich das avrcpm.asm
mit Studio4 mit folgenden Änderungen im Makefile:

#MCU = atmega88
MCU = atmega328
F_CPU = 20000000
DRAM_8BIT = 1
#BAUD = 57600
BAUD = 115200
I2C = 1
EM_Z80  = 1
FAT16_SUPPORT = 1
MMCBOOTLOADER = 0

Die Übersetzung lief ohne Fehler und Warnungen.

Fuses: kein div8, ext crystal osz

Hast Du ein Hexfile für mich, damit ich ein HW-Problem ausschliessen
kann?
Vielen Dank
Gruss
Peter

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Peter Zabel schrieb:
> MCU = atmega328

Das sollte atmega328*p* heißen. Ist aber egal, da 'config.inc' dann 
trotzdem atmega328p genommen wird, was eigentlich ein Fehler ist aber 
auch egal ist, da für die Software kein Unterschied, ob MCU mit oder 
ohne 'P', falls es letzteren überhaupt gibt.
1
leo@cb:~/src/avr/CPM_auf_ATmega88/3.1/3.1/avr$ make clean all
2
rm -f avrcpm.hex avrcpm.eep avrcpm.obj avrcpm.map avrcpm.lst \
3
    avrcpm-3.1.bin
4
wine C:/Programme/Atmel/AVR\ Tools/AvrAssembler2/avrasm2.exe -I C:/Programme/Atmel/AVR\ Tools/AvrAssembler2/Appnotes -Datmega328P  -DF_CPU=20000000 -DDRAM_8BIT=1 -DBAUD=115200 -DI2C=1 -DEM_Z80=1 -DFAT16_SUPPORT=1 -DMMCBOOTLOADER=0 -fI -o avrcpm.hex avrcpm.asm
5
AVRASM: AVR macro assembler 2.1.42 (build 1796 Sep 15 2009 10:48:36)
6
Copyright (C) 1995-2009 ATMEL Corporation
7
8
avrcpm.asm(33): Including file 'C:/Programme/Atmel/AVR Tools/AvrAssembler2/Appnotes\m328Pdef.inc'
9
avrcpm.asm(35): Including file 'config.inc'
10
...

Allerdings geht bei mir 'make flash' damit nicht, da avrdude keinen 
'atmega328' kennt.

Ansonsten läuft das Programm bei mir mit diesen Einstellungen.


ps: In trunk gibts eine neue Version, die gründlich getestet werden 
müßte.
http://cloudbase.homelinux.net/viewvc/avr-cpm/avrcpm/trunk/avr/

von Peter Z. (flexopete)


Lesenswert?

Hallo Leo,

Dein hex-file lief zuerst auch nicht. PB0 und PB1 geprüft, sind mit
dem Steckerfeld verbunden. Reset nicht auf Masse. Dann habe ich gesehen,
dass ich Brownout aus alter Gewohnheit auf 4,3V gesetzt habe...
Mein hex-file läuft auch. Habe ich richtig gesehen, dass die I2C
Basisadressen auf 0x40 (RTC) und 0x80 (Par) liegen?

Jetzt muss ich erstmal überlegen, wie das mit der SD Erstellung war.
Ist schon länger her.

Gruss
Peter

von Leo C. (rapid)


Lesenswert?

Glückwunsch Peter.

Peter Zabel schrieb:
> Habe ich richtig gesehen, dass die I2C
> Basisadressen auf 0x40 (RTC) und 0x80 (Par) liegen?

Fast.

virt_ports.asm:
1
;------------------------ Wall Clock and Timers --------------------------
2
;40      in/out  - Timer/Clock control.  
3
;41-46
4
;
5
;47-4D    clock  - BCD format: ss, mm, hh,  DD, MM, YYl, YYh
6
;
7
;------------------------ Ports ------------------------------------------
8
;80-87    in/out  - Port-Expander PCF8574 (max. 8 Chips)
9
;88-8F    in/out  - Port-Expander PCF8574A (not implemented yet!)
config.inc:
1
; Z80/8080 Virtual Ports
2
3
#define  TIMERPORT   0x40    /* Base z80 port address for clock access */
4
#define TIMER_CTL   TIMERPORT
5
#define TIMER_MSECS TIMERPORT+1
6
#define TIMER_SECS  TIMER_MSECS+2
7
#define  CLOCKPORT   TIMERPORT+7    /* Real time clock BCD (ss,mm,hh,DD,MM,YYYY) */
8
9
#define starttimercmd  1
10
#define quitTimerCmd  2
11
#define printTimerCmd  15
12
#define uptimeCmd  16

Auf 40-46 liegt der Interrupt-Timer, den es schon fast von Anfang an 
gibt.
Dieser kann z.B. mit dem Programm 'ACT' aus dem cpm/utils Verzeichnis 
abgefragt und gesteuert werden.

Die RTC liegt auf 46-4D. Eigentlich auch eine Interrupt-Uhr. Nur das 
Stellen beim Booten erfolgt über den RTC-Chip, sofern vorhanden. Für 
diese Uhr gibt es einen ZSDOS-Treiber ('LDTIM.COM') und ein 
ZSDOS-Programm zum steuern und abfragen ('TD.COM') [1].

Und dann gibt es noch [2]:
virt_ports.asm:
1
;------------------------ Virtual I2C interface --------------------------
2
;05  5   out     - Control Port: 1 = Start read operation
3
;                                2 = Start write operation 
4
;05  5   in      - Status of last Transfer: 0 = ok, else fail
5
;06  6   in/out  - Number of bytes to transfer, including Slave address
6
;07,08   in/out  - Read/Write address low/high
... zur Kommunikation mit beliebigen I2C-Chips.

[1] Beitrag "Re: CP/M auf ATmega88"
[2] Beitrag "Re: CP/M auf ATmega88"

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Im Anhang ist ein bootbares simhd-Image mit dem man die neue Hardware 
testen kann. Im wesentlichen ist ZSDOS drauf (aber nicht ganz 
vollständig), und ein paar Test- und Benchmarkprogramme.

von Peter Z. (flexopete)


Lesenswert?

Hallo Leo,
wenn ich Dein image mit dd auf die sd schreibe, dann mault dd, dass 
nicht
genügend Speicher vorhanden ist und kopiert 1 Block weniger.
Die 8 MB habe ich vorher mit cfdisk erzeugt, Type 52. Bootflag gesetzt.
Die SD bootet zwar, zeigt aber no Files. Mit cpmls sehe ich sie aber im
image.
Muss ich die Partition grösser machen?

Gruss
Peter

von Leo C. (rapid)


Lesenswert?

Einfach das zip auspacken, und die Datei auf eine Karte mit Fat-16 
Dateisystem kopieren. Hätte ich vielleicht dazu schreiben sollen.

Wenn von dem Image gebootet werden soll, sollten keine CP/M-Partitionen 
vorhanden sein.

von Peter Z. (flexopete)


Lesenswert?

Hallo Leo,
ich sehe schon, es hat sich viel getan. Super Arbeit!
Mit RTCDemo konnte ich Datum und Uhrzeit stellen und auslesen.
Allerdings läuft die RTC ca. 17% zu schnell, sowohl eingeschaltet als
auch ausgeschaltet. Ich werde morgen mal den Quarz tauschen, obwohl
ich nicht daran glauben kann.
Vielen Dank für Deine Hilfe und Frohe Ostern.

Gruss
Peter

von Leo C. (rapid)


Lesenswert?

Peter Zabel schrieb:
> Allerdings läuft die RTC ca. 17% zu schnell, sowohl eingeschaltet als

Hast Du einen Kondensator oder Trimmer an Pin 1 der RTC? Der wurde im 
Layout vergessen. Siehe hier (ff): 
Beitrag "Re: CP/M auf ATmega88"

von Peter Z. (flexopete)


Lesenswert?

ok Leo,
werde ich mal probieren, steht ja so auch im Datenblatt.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Guten Morgen und Frohe Ostern.

Im Anhang ist was Neues zum Testen. Allerdings nur interessant, wenn man 
einen Mega im 32 poligen Gehäuse (SMD) hat. Insbesondere die neue 
Hardware von Joe G.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Das VT100 kann nun auch CRTL-Codes, damit ist WS oder der Turbo Editor 
zu bedienen. Den Quellcode gibt es vorerst hier...
https://code.google.com/p/avr-cpm-system/

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Das VT100 kann nun auch CRTL-Codes, damit ist WS oder der Turbo Editor

Danke.
Das Meiste scheint zu funktionieren. Folgende Punkte sind mir 
aufgefallen:
- 'Return' scheint ein "Auto-Linefeed" zu machen.
- 'Backspace' liefert "0xC8 0x08" statt 'DEL' (0x7F).
- Wenn auf der letzten Position einer Zeile (80) etwas ausgegeben wird,
  geht der Curser automatisch in die nächtse Zeile. Wordstar mag das
  nicht.
- 'Delete Line' und/oder 'Insert Line' funktioniert nicht richtig.
- Die Cursor-Tasten liefern keine VT-100-Codes, aber das ist nicht
  unbedingt von Nachteil.

> zu bedienen. Den Quellcode gibt es vorerst hier...
> https://code.google.com/p/avr-cpm-system/

Was heißt vorerst, und wieso so weit weg?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Danke für die Hinweise.

Leider zeigen sich bei der Umsetzung der Codes Unterschiede zwischen 
VT100 und den gewohnten MSDOS Funktionen. Wir sollten einen guten 
Kompromiss finden.
Beispiel:
Backspace VT100 = Cursor links, Zeichen bleibt stehen
Backspace MSDOS = Cursor links, Zeichen löschen, nachfolgende Zeichen 
nach links schieben
DEL MSDOS = Zeichen an Cursorposition löschen, nachfolgende Zeichen nach 
links schieben (Vorwärtslöschung)

Hier mein Vorschlag:
BS mit VT100 Funktion 0x08
DEL mit VT100 Funktion 0x7F

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Schaut mal ob WS nun mit VT100 bei euch läuft. Der Turbo Editor geht nun 
bei mir. Es fehlen nur noch die Farbattribute.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> Schaut mal ob WS nun mit VT100 bei euch läuft. Der Turbo Editor geht nun
> bei mir. Es fehlen nur noch die Farbattribute.

Bei mir werden wieder (oder immer noch) Zeichen verschluckt. Ich hätte 
schwören können, daß das mit V05 weg war. Jetzt habe ich die noch mal 
geladen, war aber leider nicht besser. In meiner Verzweiflung bin ich 
jetzt mal auf 9600 Baud gegangen (Habe ich an meinem anderen System auch 
gerade). Die Startup-Meldungen sind jetzt heil.

Kann es sein, daß die unterste Zeile beim Scrollen nicht mit hoch 
geschoben wird?

Im Anhang ist ein Disk-Image mit ganz frisch konfiguriertem Wordstar 
3.3. Das Higlight-Attribut ist auf "Inverse-Video" voreingestellt.
Ich habe jeweils 40 Zeilen eingestellt, und sonst nur noch:
WS.COM  - Nur Terminal VT100 aus Menü ausgewählt.
WSE.COM - Zusätzlich die Escape-Sequenzen für "Delete Line" und "Insert
          Line" konfiguriert.

Wenn man eine Datei öffnet, erscheint auf dem Bildschirm nur noch Salat. 
Entweder ist Wordstar oder das Terminal abgestürtzt. Da es mit meiner 
vorherigen WS-Version nicht so schlimm ist, kann es eigentlich nur an 
dem Inverse-Attribut oder an den 40 Zeilen liegen. WS mit 40 Zeilen 
läuft aber in der PC-Terminalemulation.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Danke für die Rückmeldung. Ich schaue mir am Freitag mal den Datenstrom 
zwischen WS und VT100 an. Möglicherweise gibt es noch Codes die nicht 
unterstützt sind. Das scrollen der letzten Zeile ist auch noch ein Bug.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Leider zeigen sich bei der Umsetzung der Codes Unterschiede zwischen
> VT100 und den gewohnten MSDOS Funktionen. Wir sollten einen guten

Man muß den ASCII-Code[1] DEL/0x7F und die Taste[2] Delete/Del/Entf 
auseinander halten. Außerdem ist die Ecke ist aus historischen Gründen 
etwas verkorkst. Schließlich wurde ASCII[0] für Fernschreiber mit 
Druckwerk und Lochstreifenleser/stanze erfunden.
CP/M 2.2 unterstützt die Teletype auch noch: ASCII DEL, bzw Rubout 
(0x7F) gibt das letzte Zeichen einfach noch mal aus und löscht es im 
Input-Buffer[3]. ZSDOS hat aufgeräumt: "The delete key has been fixed so 
that Rubout acts like Backspace instead of echoing the deleted 
character."[4]

> Hier mein Vorschlag:
> BS mit VT100 Funktion 0x08
> DEL mit VT100 Funktion 0x7F

Wordstar macht es so:
BS  (0x08, ^H) - Curser nach links bewegen.
DEL (0x7F)     - Zeichen links vom Curser löschen.
           ^G  - Zeichen an Curserposition löschen, also das, was man
                 am PC üblicherweise mit der Del-Taste machen will.

In der ANSI-Emulation unter Linux sendet die DEL-Taste eine 4 Zeichen 
lange Escape-Sequenz (^[[3~), so wie alle Tasten des Curserblocks. 
Deshalb habe ich weiter oben geschrieben, das man an der Stelle das 
ANSI-Verhalten vielleicht garnicht haben möchte. Unter Turbopascal kann 
mans imho verwenden. Mit Wordstar aber eher nicht. Sogar DEL/BS patchen 
ist schon etwas aufwendig.


[0] https://en.wikipedia.org/wiki/ASCII "Since the delete code often
    produced a backspace effect, this also forced terminal manufacturers
    to make any Delete key produce something other than the Delete
    character." [5]
[1] https://en.wikipedia.org/wiki/Delete_character
[2] https://en.wikipedia.org/wiki/Delete_key
[3] http://www.cpm.z80.de/manuals/cpm22-m.pdf Seite 5-16
[4] http://www.gaby.de/ftp/pub/cpm/znode51/specials/zsdossrc/zsdos3.zip
    Seite 19, auch als PDF [6]
[5] https://en.wikipedia.org/wiki/ASCII#cite_note-bsp_del_mismatch-45
[6] http://www.gaby.de/ftp/pub/cpm/znode51/specials/zsdossrc/zsdos.pdf

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Der Code liegt nun nicht mehr sooo weit weg :-)
http://www.mikrocontroller.net/svnbrowser/avr-cp-m/

Im Bild ist WS-30 zu sehen. Attribute fehlen noch.

von Leo C. (rapid)


Lesenswert?

Glückwunsch.

Wenn jetzt noch die "<" vom linken zum rechten Rand wandern...

Leider habe ich gerade Hardwareprobleme. Daher komme ich vorerst nicht 
zum Testen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Wenn jetzt noch die "<" vom linken zum rechten Rand wandern...

Stimmt, sieht nicht schön aus ;-) Ist behoben.

Da der Propeller noch viele Pins frei hat, könnte ein Pin ein Piezo 
Beeper bekommen. Damit würde auch ein BEL ausgegeben werden. Weiterhin 
ist mit einem weiteren freien Pin ein AVR Reset möglich. Damit könnte 
über eine Taste (z. B. F12) ein AVR Reset ausgeführt werden. Die Taste 
F1 ist derzeit mit einem Terminal Reset belegt (ganz nützlich wenn das 
Terminal derzeit noch Fehlfunktionen zeigt). Hier könnten wir uns auch 
eine zugeordnete Taste überlegen (F11 ??). Übrigens, Alt Break steht 
noch auf meiner Liste.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Gestern Abend habe ich mal die Sonntag-Nachmittag-Version getestet.
Für Ladder reichts jetzt :-)

Ein kosmetisches Plus wäre die Möglichkeit, den Curser abzuschalten.
Auf dem Bild sieht man ihn an ca. 4 Stellen gleichzeitig. Das Original 
VT-100 kann das zwar nicht, aber spätestens ab VT-220 gehts[1]:
1
4.6.7 Text Cursor Enable Mode (DECTCEM)
2
Text cursor enable mode determines if the text cursor is visible.
3
You set and reset this mode as follows.
4
5
Mode   Sequence                 Action
6
Set    9/11 3/15 3/2 3/5 6/8    Makes the cursor visible.
7
       CSI   ?    2   5   h
8
  
9
Reset  9/11 3/15 3/2 3/5 6/12   Makes the cursor not visible.
10
       CSI   ?    2   5   l

Joe G. schrieb:
> Da der Propeller noch viele Pins frei hat, könnte ein Pin ein Piezo
> Beeper bekommen. Damit würde auch ein BEL ausgegeben werden. Weiterhin

Gut.

> ist mit einem weiteren freien Pin ein AVR Reset möglich. Damit könnte
> über eine Taste (z. B. F12) ein AVR Reset ausgeführt werden. Die Taste
> F1 ist derzeit mit einem Terminal Reset belegt (ganz nützlich wenn das
> Terminal derzeit noch Fehlfunktionen zeigt). Hier könnten wir uns auch
> eine zugeordnete Taste überlegen (F11 ??).

Ich hatte schon mal den umgekehrten Weg angedacht: Propeller-Reset durch 
AVR auslösen, um über CP/M ein neues Propeller-Programm zu laden. Da am 
AVR aber gar keine Pins mehr frei sind, könnte man vielleicht beide 
Resets gleichzeitig auslösen...

Reichen die freien Pins auch noch für einen seriellen oder parallelen 
Druckerport? Die Frage/der Vorschlag ist höchstens halb Ernst gemeint, 
da diese Erweiterung einfacher über I2C realisierbar wäre.

> Übrigens, Alt Break steht noch auf meiner Liste.

Gut. Inspiriert vom Linux Magic SysRq [2] möchte ich die 
Break-Funktion bei Gelegenheit auch noch etwas ausbauen.

Nachtrag:
Die nostalgische Farbe ist ja verschwunden. Naja, "richtige" VT-100 sind 
auch schwarz/weiß, und demnächst wird man die Farbe wahrscheinlich 
selbst einstellen können.

[1] http://vt100.net/docs/vt220-rm/chapter4.html#S4.6.7
[2] http://en.wikipedia.org/wiki/Magic_SysRq_key

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Ein kosmetisches Plus wäre die Möglichkeit, den Curser abzuschalten.

Ein später Hinweis, aber noch nicht zu spät ;-) Bisher wird der Cursor 
immer in den jeweiligen Routinen gesetzt.

Leo C. schrieb:
> Da am
> AVR aber gar keine Pins mehr frei sind, könnte man vielleicht beide
> Resets gleichzeitig auslösen...

Dazu Kompromissvorschlag. Für einen Sotwaretest sind beide unabhängigen 
Restfunktionen ganz nützlich. Ich lege jedes Reset auf einen getrennten 
Pin am Propeller und per Software kann man sich die jeweilige 
Konfiguration wählen. Etwa so:
Variante  Reset AVR  Reset Propeller    Taste
1         x                             F11
2                     x                 F12
3         x           x                 F12

Leo C. schrieb:
> Reichen die freien Pins auch noch für einen seriellen oder parallelen
> Druckerport?

Die Pins würden reichen. Tatsächlich habe ich auch schon darüber 
nachgedacht. Mir viel jedoch bisher keine sinnvolle Lösung zur Kopplung 
VT100 – CP/M – COM oder PRT ein.

Leo C. schrieb:
> Gut. Inspiriert vom Linux Magic SysRq [2] möchte ich die
> Break-Funktion bei Gelegenheit auch noch etwas ausbauen.

Wirklich nett!

Leo C. schrieb:
> Nachtrag:
> Die nostalgische Farbe ist ja verschwunden. Naja, "richtige" VT-100 sind
> auch schwarz/weiß, und demnächst wird man die Farbe wahrscheinlich
> selbst einstellen können.

genau

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Dazu Kompromissvorschlag. Für einen Sotwaretest sind beide unabhängigen
> Restfunktionen ganz nützlich. Ich lege jedes Reset auf einen getrennten
> Pin am Propeller und per Software kann man sich die jeweilige
> Konfiguration wählen. Etwa so:
> Variante  Reset AVR  Reset Propeller    Taste
> 1         x                             F11
> 2                     x                 F12
> 3         x           x                 F12

Ich weiß nicht, ob sich der ganze Aufwand überhaupt lohnt. Die Idee, den 
Propeller durch den AVR zu resetten, kam mir, weil das Umstecken der 
Jumperkabel so umständlich war. Inzwischen geht das aber, und bei 
Gelegenheit werde ich einen Schalter dran bauen.

Ich dachte, man kann sich das Umstecken sparen, wenn man den Propeller 
vom CP/M aus programmiert. Da der AVR dann aber keine Verbindung zu 
einem PC hat, und das programmieren aus dem Reset heraus starten müßte, 
macht die Sache wohl nur mit einem Bootloader Sinn, der das 
Propellerprogramm von der SD-Karte lädt. Alles in allem ziemlich viel 
Aufwand.

>> Reichen die freien Pins auch noch für einen seriellen oder parallelen
>> Druckerport?
>
> Die Pins würden reichen. Tatsächlich habe ich auch schon darüber
> nachgedacht. Mir viel jedoch bisher keine sinnvolle Lösung zur Kopplung
> VT100 – CP/M – COM oder PRT ein.

Auf Terminalseite so:
1
Name        Sequence        Action
2
-----------------------------------------------------------------------
3
Printer     9/11 3/5  6/9   Turns on printer controller mode. 
4
Controller  CSI   5    i
5
6
            9/11 3/4  6/9   Turns off printer controller mode.
7
            CSI   4    i
8
9
The terminal sends received characters to the printer without displaying them on the screen. 
10
All characters and character sequences except NUL, XON, XOFF, CSI 5 i, and CSI 4 i are sent 
11
to the printer. The terminal does not insert or delete spaces, provide line delimiters, or 
12
select the correct printer character set. Printer controller mode has a higher priority than 
13
auto print mode. You can select printer controller mode during auto print mode.
14
15
In printer controller mode, keyboard activity continues to be directed to the host.

Auf CP/M-Seite kann man dann z.B. ein extra Druckprogamm schreiben. Da 
auf CP/M ja immer nur ein Programm laufen kann, gibts keine Konflikte 
mit der Console. Eigentlich würde man aber gerne einen Treiber im BIOS 
haben wollen, der die Druckerausgabe in den Consolendatenstrom einfügt. 
Damit das ohne Verklemmungen in jeder Situation einwandfrei 
funktioniert, dürfte der Aufwand erheblich sein.

Wahrscheinlich ist es viel einfacher, eine parallele oder serielle 
Druckerschnittstelle an I2C zu klemmen. Die Serielle könnte zudem für 
andere Zwecke genutzt werden.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Es gibt für das VT100 neue Funktionen.

- Cursor unsichbar schalten wie VT220 (für Spieler)
- inverse Zeichendarstellung
- setzen der Vordergrund- und Hintergrundfarbe
- Pfeiltastenfunktion

Alle derzeit realisierten Funktionen sind im VT100.pdf beschrieben.
Code und PDF hier:
http://www.mikrocontroller.net/svnbrowser/avr-cp-m/

von Leo C. (rapid)


Lesenswert?

Der Bildschirm ist wieder grün. ;-)
Invers funktioniert. Den Rest habe ich noch nicht getestet.

Ist Dir der Fehler im Wordstar Hauptmenü schon aufgefallen?
Bei der Überschrift des Directories fehlt der erste Buchstabe:
1
 irectory of disk A:                                         
2
 -README.0    8Q.PAS       ACT.MAC      AVRCLOCK.MAC AVRCLOCK.PRN AVRCPM.LIB
statt
1
directory of disk A:                                         
2
 -README.0    8Q.PAS       ACT.MAC      AVRCLOCK.MAC AVRCLOCK.PRN AVRCPM.LIB

Schaltet man mit 'F' das Dir aus und wieder an, ist Der Buchstabe da.
Wechselt man das Laufwerk mit 'L' fehlt der Buchstabe wieder.

Der Fehler ist ab Revision 66 zu sehen. Mit r65 gehts noch.

Joe, hast Du eigentlich mein Posting vom 31.3. (Ostern) gesehen?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Bei der Überschrift des Directories fehlt der erste Buchstabe:

Danke!
Es scheint ein Timing Problem zu sein. Direkt vor der Ausgabe von 
"Directory" wird die Sequenz ESC[11;01H ausgeführt. Wenn sie fertig ist, 
der Cursor an der richtigen Stelle steht, ist das "D" schon aus dem 
Puffer. :-( Mal sehen ob ich die Geschwindigkeit noch etwas erhöhen 
kann. Spin ist recht langsam in der Ausführung.

Leo C. schrieb:
> Joe, hast Du eigentlich mein Posting vom 31.3. (Ostern) gesehen?

Ja, habe ich gesehen und leider noch nicht getestet (ADC). Ist jedoch 
als nächstes auf dem Plan. In diesem Zusammenhang gleich eine Frage an 
alle.

Nach Rücksprache mit der Redaktion der Zeitschrift FUNKAMATEUR würden 
sie uns Platz für einen Beitrag zum CP/M System einräumen (2 Seiten). 
Dazu sind natürlich externe Anwendungen wünschenswert und der ADC zählt 
ganz sicher dazu. Weiterhin würde ich ein LCD Display mal über I2C 
ankoppeln bzw. den Franklin Light Sensor aus einem anderen Beitrag hier 
im Forum. Welche Ideen hättet ihr noch?

Für den Beitrag im FA würde ich die Schaltung und das Layout auch 
nochmals anpassen. Auch hier sind Korrekturen und Wünsche willkommen. 
Die folgenden Wünsche stehen schon auf meiner Liste.

- Stützbatterie statt Goldcap
- korrektes Layout für RTC
- LED an SD Card
- Pull Up an SD Card
- Piezo für Bell Signal vom Propeller
- AVR Reset vom Propeller

Um die vielen DRAM Varianten zu integrieren, könnte auf der Leiterplatte 
einfach eine DIL Fassung für einen (Norm)RAM vorgesehen werden. Auf 
einer kleinen Zusatzplatine kann dann jeder seinen vorhandenen RAM 
auflöten und in die DIL Fassung stecken.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Es scheint ein Timing Problem zu sein.

Scheint mir eher nicht so. Bei 9600 ist das Problem auch noch. Bei 80MHz 
hat der Spin-Interpreter dann immerhin 80000 Takte pro Zeichen. Ich 
wollte gerade noch langsamer testen, aber bei 4800 Baud funktioniert 
unsere Soft-UART (RX) nicht mehr. :(

> Ja, habe ich gesehen und leider noch nicht getestet (ADC). Ist jedoch
> als nächstes auf dem Plan.

Das Ganze war ein Schnellschuß zum Probieren und als 
Diskussionsgrundlage. Erweiterung auf 10 Bit wäre kein Problem. Die 
Temperatur- und VCC-Messung würde ich wieder raus werfen.

> Nach Rücksprache mit der Redaktion der Zeitschrift FUNKAMATEUR würden
> sie uns Platz für einen Beitrag zum CP/M System einräumen (2 Seiten).
> Dazu sind natürlich externe Anwendungen wünschenswert und der ADC zählt
> ganz sicher dazu. Weiterhin würde ich ein LCD Display mal über I2C
> ankoppeln bzw. den Franklin Light Sensor aus einem anderen Beitrag hier
> im Forum. Welche Ideen hättet ihr noch?

Nützliche Aufgaben für das Gerät fallen mir eigentlich nicht ein. ;-)

> - Stützbatterie statt Goldcap
> - korrektes Layout für RTC
 + C, bzw. Trimmer an OSCI


> Um die vielen DRAM Varianten zu integrieren, könnte auf der Leiterplatte
> einfach eine DIL Fassung für einen (Norm)RAM vorgesehen werden. Auf
> einer kleinen Zusatzplatine kann dann jeder seinen vorhandenen RAM
> auflöten und in die DIL Fassung stecken.

Oh je. Was wäre denn ein (bzw. das) Norm-RAM?

von Leo C. (rapid)


Lesenswert?

> aber bei 4800 Baud funktioniert unsere Soft-UART (RX) nicht mehr. :(

Geht jetzt ab 2400 Baud.
Noch langsamer ist zusätzliche Arbeit, die ich mir jetzt spare.

Der Fehler mit Wordstar ist auch mit 2400 noch da. Wordstar schreibt 
erst das Directory, dann die Überschrift-Zeile "directory of disk A:", 
und dann wird die Zeile darüber gelöscht. Dabei, oder danach, wird das 
'd' gelöscht.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ich bin schon auf der Suche und habe die Sequenz abgespeichert. Erst 
wird alles korrekt geschrieben und dann der Cursor an die Stelle von "d" 
gesetzt und gelöscht, ich bleibe dran...

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Fehler behoben, war ein Bug in der ESC[K Sequenz.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Anbei die überarbeitete Schaltung. Folgende Änderungen sind 
eingeflossen:

- Stützbatterie CR2032 für RTC
- korrektes Layout für RTC
- LED an SD Card
- Pull Up an SD Card
- Piezo für Bell Signal vom Propeller
- AVR Reset vom Propeller
- Trimmer für RTC
- Layout für SD-Slot von Attend (erhältlich bei Pollin)

Gibt es nöch Änderungen oder Wünsche?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

ADC 0x17 bis 0x21

Nun habe ich endlich auch mal die beiden ADC Wandler mit der Testversion 
überprüft.
0x17 und 0x18 gehen gut,
0x20 und 0x21 auch,
0x19 (Temperatursensor) habe ich nicht begriffen. Was hast du dort 
angeschlossen, einen PT100?

Noch ein Vorschlag zur Erweiterung des Z-System Timers. Könnte man nicht 
gleich mit LDTIM die Zeit aus der RTC übernehmen? Das Stellen mit TD 
würde dann entfallen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Leo C.

Ab der Version 3.1 scheint in der CFGACPM.LIB

cr equ  13
lf equ  10

verloren gegangen zu sein.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Nachtrag:
Die Definition von cr und lf ist jetzt in BIOS.MAC. Mit dieser 
Konfiguration kann jedoch IPL.MAC nicht übersetzt werden, da die 
Definition dort fehlt.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Sorry für so spät, z.Zt. komme ich zu fast nichts.

Joe G. schrieb:
> Anbei die überarbeitete Schaltung. Folgende Änderungen sind
> eingeflossen:
>
> - Stützbatterie CR2032 für RTC

Siehe 1. Bild. D2 kann eine Silizium-Diode sein. Wenn der Platz knapp 
ist, kann man für D1/D2 eine Doppeldiode (BAV170) nehmen. [1]

> - korrektes Layout für RTC
> - Trimmer für RTC

Weiter oben hatte ich mal vorgeschlagen, an Pin 3 und Pin 7 Pullups 
vorzusehen, damit man wahlweise auch den PCF8563 einsetzen kann. Da wir 
aber weder mit INT noch mit CLKOUT etwas anfangen können (außer evtl. 
für Testzwecke), sind die Pullups nicht notwendig. Den 8563 könnte man 
auch so einlöten, wenn er denn im gleichen Gehäuse wäre. :-( (SOT96-1 
vs. SOT176-1)

[1] http://www.nxp.com/documents/user_manual/UM10301.pdf

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> ADC 0x17 bis 0x21
>
> Nun habe ich endlich auch mal die beiden ADC Wandler mit der Testversion
> überprüft.
> 0x17 und 0x18 gehen gut,

Es gibt dort weniger Parameter zum Einstellen, als ich ursprünglich 
dachte. Als Referenz kommt ja eigentlich nur Vcc in Frage.
Man könnte die Abfrage auch auf 10 Bit erweitern.

> 0x20 und 0x21 auch,

Bringt aber nix, da wegen Streuungen der internen Referenz ein Abgleich 
notwendig ist. Dann kann man auch gleich die Vcc genau ausmessn.

> 0x19 (Temperatursensor) habe ich nicht begriffen. Was hast du dort
> angeschlossen, einen PT100?

Dort ist ein interner Sensor angeschlossen. Siehe entsprechendes Kapitel 
im Datenblatt (Anhang).
Bringt aber auch nix. Der Sensor hat starke Exemplarstreuungen und muß 
abgeglichen werden (Parameter im EEPROM?). Wer den ganzen Aufwand nicht 
scheut, kann auch gleich statt eines CP/M-Programms den AVR 
programmieren.


> Noch ein Vorschlag zur Erweiterung des Z-System Timers. Könnte man nicht
> gleich mit LDTIM die Zeit aus der RTC übernehmen? Das Stellen mit TD
> würde dann entfallen.

Bei mir funktioniert es so:
- Beim Einschalten wird die Zeit aus der RTC als Systemzeit übernommen.
- Wenn die RTC vorher schon mal gestellt wurde, und die Standby-
  Stromversorgung durchgehalten hat, stimmt die Uhrzeit jetzt.
- Während des Betriebs wird die Systemuhr über einen Timer-Interrupt
  aktualisiert.
- Durch LDTIM wird die Uhr für ZSDOS (zB. für Timestamps) zugänlich
  gemacht. Sie kann anschließend über TD abgefragt oder neu gestellt
  werden.
- Wenn die Systemuhr durch TD gestellt wird, wird die neue Zeit auch in
  die RTC kopiert.

Meiner Meinung nach also genau so, wie Du es gerne hättest. Falls es bei 
Dir anders ist, brauche ich eine genaue Beschreibung.

LDTIM lädt den Treiber z.Zt. unter den CCP. Dadurch funktioniert der 
Warmstart nicht mehr wie vorgesehen, und es gibt Probleme beim Wechseln 
der SD-Karte. Den Uhrentreiber will ich bei Gelegenheit ins BIOS 
verfrachten, aber das Warmstart-Problem bleibt, wenn z.B. andere 
residente Programme geladen werden.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Ab der Version 3.1 scheint in der CFGACPM.LIB
> cr equ  13
> lf equ  10
> verloren gegangen zu sein.

Das sind ja keine für AVR-CP/M systemrelevanten Konstanten.

Joe G. schrieb:
> Die Definition von cr und lf ist jetzt in BIOS.MAC. Mit dieser
> Konfiguration kann jedoch IPL.MAC nicht übersetzt werden, da die
> Definition dort fehlt.

Dann werde ich die auch in IPL.MAC definieren. Danke für den Hinweis.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich bin nun auch mal wieder dazu gekommen am System zu arbeiten.

- Die RTC geht im CP/M korrekt, war mein Fehler, ich hatte nicht die 
korrekte BIOS Version auf meiner Card
- BEL, 07h, ^G ist implementiert (siehe Schaltungserweiterung)
- CP/M Reset ist implementiert (Taste F12) (siehe Schaltungsänderung)

Wer sich noch an den Aufbau wagen möchte, ich habe noch einige Platinen 
hier liegen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Das VT100 Terminal hat nun einen Arbeitsstand erreicht, der es gestattet 
die Version 1.0 zu vergeben. Es sind nun alle ESC Farbsequenzen für 
Vorder- und Hintergrundfarbe implementiert sowie die gestern erwähnten 
Funktionen BEL und CP/M Reset. Weiterhin gibt es noch eine „hot key“ 
Taste (Alt+i) die von der normalen auf die inverse Textfunktion schaltet 
und wieder zurück.
Wünsche und Fehler nehme ich gerne entgegen.

von Jens (Gast)


Lesenswert?

Hallo Gemeinde!

Erstmal vielen Dank, für die viele Arbeit, die bereits in das Projekt 
gesteckt wurde!
Ich würde den CP/M-Emulator gerne nachbauen, um auch mal in den Genuß 
eines Klassikers zu kommen.

Ich habe mir den kompletten Thread durchgelesen (was schon alleine 
mehrere Abende gedauert hat...)
und versuch mal zu rekapitulieren:

* Z80-Emulation läuft mit ca. 2 MHz bei 20 MHz AVR-Frequenz
* CP/M und ZSDOS
* Zugriff auf SD-Karte mit FAT16 Filesystem
* Terminal mit Propeller (80x25?) und PS/2-Tastatur oder wahlweise per 
USB

zusätzlich gibt es einen I2C-Anschluß, an dem bisher eine 
Real-Time-Clock hängt.

Ist das soweit richtig?

Dann zu meinen Vorstellungen:
Als DRAM's habe ich hier noch folgende Chips gefunden:
HYB514256-AJ-70 256k x 4Bit
KM44C1000AJ-7   1M x 4Bit
HYB511000AJ-70  1M x 4Bit

Wenn ich den HYB514256 verwende ist die Speicheraufteilung die folgende:
 62k RAM
  2k System
192k RAM-Disk

Da die HYB514256 lt. Thread nicht bei allen funktioniert haben bleibt 
als Alternative noch die 1M x 4Bit Chips. Wird in diesem Fall eine 
größere RAM-Disk angelegt oder 'verfällt' der RAM, weil die 
Adressleitungen fehlen?

@Joe:
Wäre es möglich den letzten Stand der Schaltung zu veröffentlichen?
Ich würde mir die Platine gern etwas umgestalten, da ich sie gleich auf 
einer alten PS/2-Tastatur montieren möchte.
Außerdem würde ich gleich noch ein (Text-)Display und ein kleines 
Soundmodul integrieren bzw. passende Anschlußmöglichkeiten dafür 
vorsehen.

Sehe ich das richtig, daß der Pegelwandler zur SD-Karte weggefallen ist 
und jetzt alles auf 3,3V läuft?

Wo bezieht man denn den Propeller-Chip am günstigsten?
Schön wäre ja die Lösung mit dem AVR gewesen (wie die Variante 2), aber 
da ließ sich offenbar die nötige Auflösung von 80x24 und die 
PS/2-Ansteuerung nicht vernünftig realisieren.

Programmiert wird der Propeller via serieller Schnittstelle? Ist da 
schon ein Bootloader drin? Der Programmspeicher scheint extern zu sein, 
oder wofür ist der I2C-EEPROM (AT24C512) da?

Das sollten erstmal genug Fragen sein ;-)

Viele Grüße
Jens

von Leo C. (rapid)


Lesenswert?

Jens schrieb:
> Hallo Gemeinde!

Willkommen im Club.
(Auch wenn die Gemeinde sich etwas verlaufen zu haben scheint :)

> und versuch mal zu rekapitulieren:
>
> * Z80-Emulation läuft mit ca. 2 MHz bei 20 MHz AVR-Frequenz

Es sind inzwischen eher 3 MHz. Vielleicht sogar etwas mehr. [1]

> * CP/M und ZSDOS
> * Zugriff auf SD-Karte mit FAT16 Filesystem
> * Terminal mit Propeller (80x25?) und PS/2-Tastatur oder wahlweise per
> USB
> zusätzlich gibt es einen I2C-Anschluß, an dem bisher eine
> Real-Time-Clock hängt.

  + 8-Bit Parallelport über PCF8574

> Ist das soweit richtig?

Wenn wir über die letzte Leiterplatte von Joe G. reden, ja.

> Dann zu meinen Vorstellungen:
> Als DRAM's habe ich hier noch folgende Chips gefunden:
> HYB514256-AJ-70 256k x 4Bit
> KM44C1000AJ-7   1M x 4Bit
> HYB511000AJ-70  1M x 4Bit
>
> Wenn ich den HYB514256 verwende ist die Speicheraufteilung die folgende:
>  62k RAM
>   2k System
> 192k RAM-Disk

256K x 4-Bit: Da bleiben nur 64K für die RAM-Disk.

> Da die HYB514256 lt. Thread nicht bei allen funktioniert haben bleibt
> als Alternative noch die 1M x 4Bit Chips. Wird in diesem Fall eine
> größere RAM-Disk angelegt oder 'verfällt' der RAM, weil die
> Adressleitungen fehlen?

Wir haben 11 Adressleitungen. Das reicht bis 4 MByte.
Allerdings ist die RAM-Disk ziemlich uninterressant, da sie nicht 
schneller als die SD-Karte ist. Ich weiß noch nicht mal, ob sie in der 
aktuellen Software überhaupt noch funktioniert.

> Sehe ich das richtig, daß der Pegelwandler zur SD-Karte weggefallen ist
> und jetzt alles auf 3,3V läuft?

Pegelwandler waren noch nie nötig, da ja alles mit 3,3V läuft.


> Programmiert wird der Propeller via serieller Schnittstelle? Ist da
> schon ein Bootloader drin? Der Programmspeicher scheint extern zu sein,
> oder wofür ist der I2C-EEPROM (AT24C512) da?

So ist es.

[1] :
Vor einigen Monaten hatte ich mal mit ein paar Benchmarks angefangen 
(Dhrystone und ähnliches). Leider bin ich nicht fertig geworden und habe 
keine fertigen Ergebnisse. Eine Tabelle mit den Ausführungszeiten 
einzelner Befehle, habe ich aber noch gefunden:
1
Count: n = 49152
2
1 DRAM Wait
3
                Cycles  Time    /n      /c      
4
                 (c)    [ms]    [µs]   [ns]    [MHz]
5
-------------------------------------------------------------
6
ex  (sp),hl     19       231    4,700   247,4   4,043
7
ld  l,c          4        82    1,668   417,1   2.398
8
nop              4        66    1,343   335,7   2,979
9
inc e            4       128    2,604   651,0   1,536
10
inc a            4        99    2,014   503,5   1,986
11
inc hl           6        76    1,546   257,7   3,880
12
push/pop hl  (11+10)/2   152    3,092   294,5   3,395
13
                         151    3,072   292,6   3,418
14
pop hl          10       173    3,520   352,0   2,841
15
-------------------------------------------------------------
16
0 Wait states
17
18
ex  (sp),hl     19       223    4,537   238,8   4,188
19
nop              4        63    1,282   320,4   3,121
20
                                1,302   325,5   3,072
21
ld  l,c          4        79    1,61    402     2,49
22
ex  af,af'       4        94    1,91    478     2,09
23
ld  a,2          7        63    2,56    366     2,73
24
call/ret     (17+10)/3   116    7,08    262     3,81
25
ldi             16       126    5,13    320     3,12
26
ldi (macro)     16       104    4,23    264     3.78
27
28
Count (n) 32:
29
ldir           16/21    6977            208     4,79
30
ldir (macro)   16/21    5010            149     6,70

von Jens (Gast)


Lesenswert?

>> * Z80-Emulation läuft mit ca. 2 MHz bei 20 MHz AVR-Frequenz
> Es sind inzwischen eher 3 MHz. Vielleicht sogar etwas mehr. [1]
Gut. Ich denke das ist mir ausreichend schnell am Original Z80.

[Hardwarestand]
> Wenn wir über die letzte Leiterplatte von Joe G. reden, ja.
Ja, siehe Post vom 4.5.2013 
(Beitrag "Re: CP/M auf ATmega88")

>> Dann zu meinen Vorstellungen:
>> Als DRAM's habe ich hier noch folgende Chips gefunden:
>> HYB514256-AJ-70 256k x 4Bit
>> KM44C1000AJ-7   1M x 4Bit
>> HYB511000AJ-70  1M x 4Bit
>
> 256K x 4-Bit: Da bleiben nur 64K für die RAM-Disk.
Ist denn die 4-Bit-Variante genauso schnell, wie die 8-Bit-Variante (mit 
2 Chips)? (Ich hab mehrere Chips zur Verfügung, leider nix mit 8-Bit 
Datenbreite.)

> Wir haben 11 Adressleitungen. Das reicht bis 4 MByte.
> Allerdings ist die RAM-Disk ziemlich uninterressant, da sie nicht
> schneller als die SD-Karte ist. Ich weiß noch nicht mal, ob sie in der
> aktuellen Software überhaupt noch funktioniert.
Ok. Also mehr als 256kByte ist vorerst nicht sinnvoll.

>> Sehe ich das richtig, daß der Pegelwandler zur SD-Karte weggefallen ist
>> und jetzt alles auf 3,3V läuft?
> Pegelwandler waren noch nie nötig, da ja alles mit 3,3V läuft.
In der Version 2 (im Wiki), ist ein 74HCT08 zur SD-Karte verzeichnet.
Wenn nur mit 3,3V gearbeitet wurde, könnte das die Probleme mit dem 
HYB514256 erklären.
Laut Datenblatt des HYB514256B/BJ ist er für 5V Vcc spezifiziert.
Apropos, hat jemand das Datenblatt zum HYB514256A/AJ?

>> Programmiert wird der Propeller via serieller Schnittstelle? Ist da
>> schon ein Bootloader drin? Der Programmspeicher scheint extern zu sein,
>> oder wofür ist der I2C-EEPROM (AT24C512) da?
> So ist es.
Welche Größen darf der EEPROM haben? Gibt es eine Mindestgröße für die 
Verwendung als VGA-Terminal? Wie kommen die Daten in den EEPROM? Gibt es 
da einen Bootloader im Propeller? Ist der schon drin?

Viele Grüße
Jens

von Leo C. (rapid)


Lesenswert?

Jens schrieb:
> Ist denn die 4-Bit-Variante genauso schnell, wie die 8-Bit-Variante (mit
> 2 Chips)? (Ich hab mehrere Chips zur Verfügung, leider nix mit 8-Bit
> Datenbreite.)

UPS, natürlich sollte man 2 Chips nehmen. 4 Bit ist schon deutlich 
langsamer. Dann Stimmt Deine Rechnung also.


> Welche Größen darf der EEPROM haben? Gibt es eine Mindestgröße für die
> Verwendung als VGA-Terminal?
Joe?
Ansonsten Datenblatt besorgen. Ich kann grad schlecht nachschauen, weil 
ich unterwegs bin.

> Wie kommen die Daten in den EEPROM? Gibt es
> da einen Bootloader im Propeller? Ist der schon drin?

Ja ist drin. (So war das "So ist es." gemeint.)

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Jens schrieb:
> Hallo Gemeinde!

Leo C. schrieb:
> Willkommen im Club.
> (Auch wenn die Gemeinde sich etwas verlaufen zu haben scheint :)

Auch von mir ein Willkommen!
(Ein Gemeindemitglied war im Urlaub ;-)

Jens schrieb:
> @Joe:
> Wäre es möglich den letzten Stand der Schaltung zu veröffentlichen?

Ja, das werde ich demnächst tun. Wenn du mir deine Kontaktdaten 
zusendest, kannst du schon jetzt den aktuellen Stand erhalten.

Jens schrieb:
> Programmiert wird der Propeller via serieller Schnittstelle? Ist da
> schon ein Bootloader drin? Der Programmspeicher scheint extern zu sein,
> oder wofür ist der I2C-EEPROM (AT24C512) da?

Korrekt, der Propeller enthält den entsprechenden Bootloader und dieser 
kann über einen seriellen Port angesprochen werden.
http://en.wikipedia.org/wiki/Parallax_Propeller#Boot_mechanism
Auf der Platine ist es über die USB-Schnittstelle realisiert. Über sie 
kann der Propeller programmiert werden oder die VT100 Ausgabe an ein 
externes Terminal erfolgen.

Jens schrieb:
> Welche Größen darf der EEPROM haben?
mindestens 32KB

von Jens (Gast)


Lesenswert?

Ok. Zum Propeller bin ich jetzt im Wesentlichen aufgeklärt :-)

Noch ein paar Fragen zum Design:
Ich würde gerne nur einen Quarzoszillator verwenden. Der Propeller wird 
momentan mit 5 MHz betrieben und besitzt eine interne PLL.
Diese PLL kann den Eingangstakt um den Faktor 1, 2, 4, 8 oder 16 
vervielfachen.

Ich kann im Quellcode vom Terminal (Repository und VT100_V05.zip) keine 
Stelle finden, an der CLKSET aufgerufen wird. Ist da evtl. nicht alles 
dabei?

Wie läuft das beim Propeller, gibt es da eine Art "main", wo festgelegt 
wird in welchem COG welcher Code läuft?
Im Datenblatt ist ein ominöses top objekt file erwähnt. Wo finde ich 
das?

Der ATmega328 wird auch außerhalb der Spezifikation betrieben.
Laut Datenblatt (Rev. 8271E), Grafik 29-1 und Tabelle 29-11, verlässt 
man oberhalb von 13,3 MHz den sicheren Betriebsbereich bei einer 
Betriebsspannung von 3,3 V.
Für 20 MHz Taktfrequenz sollte man den ATmega328 mit mindestens 4,5 V 
betreiben.

Meine Speicherchips sind alle noch auf 30-Pin SIMM-Modulen verbaut. 
Diese SIMM-Module sind ebenfalls für 5V Betriebsspannung spezifiziert.

Von daher wäre es schon sinnvoll den Speicher und den Controller mit 5V 
zu versorgen, oder?

Viele Grüße
Jens

P.S.: Was spricht eigentlich dagegen SIMM-Fassungen zu verwenden? Da 
müßte ich die Chips nicht erst ablöten.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Jens schrieb:
> Ich kann im Quellcode vom Terminal (Repository und VT100_V05.zip) keine
> Stelle finden, an der CLKSET aufgerufen wird.

In der Datei VT100_VGA.spin

CON
   'clock configuration
   _clkmode  = xtal1 + pll16x
   _xinfreq  = 5_000_000        '5 MHz Quarz AVR CP/M

Jens schrieb:
> Wie läuft das beim Propeller, gibt es da eine Art "main", wo festgelegt
> wird in welchem COG welcher Code läuft?

Das "main"-File ist die besagte Datei VT100_VGA.spin

Die 5 MHz des Propeller sollten zunächst nicht verändert werden, da sie 
den Pixeltakt sowie alle Timingsignale zur Synchronisation 
bereitstellen. Die zugehörigen Konstanten befinden sich in der Datei 
VGA_HiRes_Text_010.spin

Jens schrieb:
> Für 20 MHz Taktfrequenz sollte man den ATmega328 mit mindestens 4,5 V
> betreiben.

Bisher gab es bei keinem Nachbau damit Probleme. Viele Varianten laufen 
auch mit 25 MHz oder höher. Ich denke Peter hat es sogar bis 30 Mhz 
getrieben.
Die letzte Variante benutzt einen HM51W17805 als DRAM. Dieser ist für 
3.3V spezifiziert.

Jens schrieb:
> P.S.: Was spricht eigentlich dagegen SIMM-Fassungen zu verwenden?

Nichts, nur der Platz.

von Jens (Gast)


Lesenswert?

Joe G. schrieb:
>> Ich kann im Quellcode vom Terminal (Repository und VT100_V05.zip) keine
>> Stelle finden, an der CLKSET aufgerufen wird.
>
> In der Datei VT100_VGA.spin
Mein grep kann mit UTF-16 nix anfangen. Deshalb hat meine Suche nach 
clk nichts gebracht...

> CON
>    'clock configuration
>    _clkmode  = xtal1 + pll16x
>    _xinfreq  = 5_000_000        '5 MHz Quarz AVR CP/M
Also 16 * 5 MHz = 80 MHz.
Auf 80 MHz kommt man auch mit 4 * 20 MHz.

> Die 5 MHz des Propeller sollten zunächst nicht verändert werden, da sie
Wie gesagt, ich denke der Propeller läuft mit 80 MHz.

> Bisher gab es bei keinem Nachbau damit Probleme. Viele Varianten laufen
> auch mit 25 MHz oder höher. Ich denke Peter hat es sogar bis 30 Mhz
> getrieben.
Das mag ja sein, und ich möchte auch niemandem zu Nahe treten, aber in 
meinen Augen ist das Murks.

> Die letzte Variante benutzt einen HM51W17805 als DRAM. Dieser ist für
> 3.3V spezifiziert.
Jepp. Den hab ich aber nicht. (Im Gegensatz zu den SIMM-Modulen.)

>> P.S.: Was spricht eigentlich dagegen SIMM-Fassungen zu verwenden?
> Nichts, nur der Platz.
Richtig, so richtig niedlich sind die nicht.
Auch ist bei SIMM das /OE nicht rausgeführt. Daher müßte man Adress- und 
Datenbus trennen, was mehr Pins am AVR benötigt.
Siehe auch diesen Beitrag:
Beitrag "Re: 2MB DRAM an AVR"

Schade eigentlich.

Viele Grüße
Jens

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Jens schrieb:
> Auf 80 MHz kommt man auch mit 4 * 20 MHz.

Es ist natürlich möglich EINEN 20 MHz Oszillator zu verwenden und den 
AVR und den Propeller damit zu takten.

Jens schrieb:
> Das mag ja sein, und ich möchte auch niemandem zu Nahe treten, aber in
> meinen Augen ist das Murks.

Sicherlich ist wieder eine getrennte Spannungsversorgung denkbar. In der 
Variante 2 haben wir das ja auch so realisiert. Allerdings sind dann 
Pegelwandler zwischen AVR und SD-Card und AVR und Propeller notwendig. 
Auch kann die RAM-Konfiguration beliebig geändert werden. Da alle 
Quellen offen sind, hast du hier freie Hand.

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Hallo,
ich habe ein paar DRAMs gefunden:

5x MB81C4256A-70P
7x V53C104AP-80

als 20-Pin DIP. Vielleicht sind die ja für dieses Projekt kompatibel und 
jemand kann sie brauchen.

Joe G. schrieb:
> Stückpreis 0,55€ + Porto (0,70€ Warensendung)

Wäre bei mir wohl ähnlich...

Gruß, TS

von Marcel A. (dl1ekm)


Lesenswert?

Hallo zusammen

nach der ersten einfachen 8080-Version auf Lochraster habe ich nun dank 
Joes Hilfe  auch auf "seiner Platine" den Z80-Teil mit FTDI ans laufen 
bekommen. VGA/Tastatur/RTC/PIO folgen demnächst.

Freundlicherweise hat mir Joe auch direkt ein 240k "Boot-Image" und ein 
weiteres 8MB CPM Image gegeben, welche ich zusammen auf eine mit FAT16 
formatierte SD-Karte kompiert habe.

Alles wunderbar - bin begeistert (auch wenn die Löterei der Horror war).

Nun habe ich aber noch ein paar Anfänger/DAU-Fragen:

CPMTools unter Linux:
- Habe die avrcpm-Definition eingetragen - die boot-Diskette wird sauber 
ausgelesen
- Aber die 8MB Datei geht zwar unter CPM, die Tools zeigen aber nichts 
an, fehlt mir hier eine file-Definition? Wie kann die dieses Image 
bearbeiten?
- das erste Image lautet CPMDSK_A. -> ist LW A. das zweite CPMDSK_D -> 
wird als LW B eingebunden - warum nicht als D?

FAT16
- wie groß darf ich die FAT16-Partition machen: 2GB oder 4GB?
- Muss die erste "Diskette" immer 243K haben oder kann die auch schon 
8MB sein?
- Ist 8MB eine feste Obergrenze? Oder ginge auch mehr (quasi eine 
Festplatten-Simulation)?

Herzlichen Dank!

Gruß
Marcel

von Marcel A. (dl1ekm)


Lesenswert?

Marcel Andre schrieb:
> Hallo zusammen
>
> nach der ersten einfachen 8080-Version auf Lochraster habe ich nun dank
> Joes Hilfe  auch auf "seiner Platine" den Z80-Teil mit FTDI ans laufen
> bekommen. VGA/Tastatur/RTC/PIO folgen demnächst.
>
> Freundlicherweise hat mir Joe auch direkt ein 240k "Boot-Image" und ein
> weiteres 8MB CPM Image gegeben, welche ich zusammen auf eine mit FAT16
> formatierte SD-Karte kompiert habe.
>
> Alles wunderbar - bin begeistert (auch wenn die Löterei der Horror war).
>
> Nun habe ich aber noch ein paar Anfänger/DAU-Fragen:
>
> CPMTools unter Linux:
> - Habe die avrcpm-Definition eingetragen - die boot-Diskette wird sauber
> ausgelesen
> - Aber die 8MB Datei geht zwar unter CPM, die Tools zeigen aber nichts
> an, fehlt mir hier eine file-Definition? Wie kann die dieses Image
> bearbeiten?

Mein Fehler! Wer lesen kann.... Habe simhd ergänzt - alles klar :-)

> - das erste Image lautet CPMDSK_A. -> ist LW A. das zweite CPMDSK_D ->
> wird als LW B eingebunden - warum nicht als D?
>
> FAT16
> - wie groß darf ich die FAT16-Partition machen: 2GB oder 4GB?
> - Muss die erste "Diskette" immer 243K haben oder kann die auch schon
> 8MB sein?
> - Ist 8MB eine feste Obergrenze? Oder ginge auch mehr (quasi eine
> Festplatten-Simulation)?

Auch hier: 8MB ist offenbar die 8-bit "Systemgrenze" für CP/M. Na, 
reicht ja auch :-)

> Herzlichen Dank!
>
> Gruß
> Marcel

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Das Format des 8MB Images ist das HD Format von AltairSIMH. Das hat den 
Vorteil, dass man unter AltairSIMH wunderbar auf dem PC arbeiten kann 
und diese Datei dann gleichzeitig unter unserem CP/M System laufen 
lassen kann.

Das System welches derzeit gebootet wird ist tatsächlich ZSDOS. Alle 
Quelldateien dazu befinden sich auf der 8MB HD. Um sich ein eigenes 
System zusammen zu bauen musst du nur die Datei AVRCPM.SUP ausführen. In 
ihr sind auch alle benötigten Quelldateien für das ZSDOS System 
aufgeführt.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Die wichtigen Fragen sind ja schon beantwortet. Bleibt noch...

Marcel Andre schrieb:
> - das erste Image lautet CPMDSK_A. -> ist LW A. das zweite CPMDSK_D ->
> wird als LW B eingebunden - warum nicht als D?

Kurze Antwort:
Weil es so geworden ist ;-)
Und wir außerdem spätestens mit 'CPMDSK_Q.IMG' ein Problem hätten.

Längere Antwort:
Als Dateinamen für die Images sind 'CPMDSK_A.IMG' bis 'CPMDSK_Z.IMG' 
erlaubt.

CP/M unterstützt maximal 16 Laufwerke, die über einen Index 0..15 
verwaltet werden. Davon haben wir (bis auf weiteres) die letzten 8 
(8..15, bzw I..P) für fest im BIOS definierte Laufwerke, z.B. RAM-Disks, 
reserviert. Die ersten 8 (0..7, bzw. A..H) werden in aufsteigender 
Reihenfolge duch die automatisch erkannten Diskimages belegt.
[3][5]

Natürlich könnte man das auch anders machen, wenns denn eine(r) macht...

> FAT16
> - wie groß darf ich die FAT16-Partition machen: 2GB oder 4GB?

4G sollten gehen, da 128 Sectors/Cluster unterstützt werden [6].

> - Muss die erste "Diskette" immer 243K haben oder kann die auch schon
> 8MB sein?

Wenn ich mich richtig erinnere, kann von allen unterstützten Formaten, 
außer MYZ80, gebootet werden. simhd geht definitiv. [1][2][3]

> - Ist 8MB eine feste Obergrenze? Oder ginge auch mehr

Es gibt Erweiterungen, die mehr könnten.
CP/M 3 kann 512MB.

> (quasi eine Festplatten-Simulation)?

Hüstel.
Zu CP/Ms besten Zeiten waren Festplatten eher deutlich kleiner als 8 MB.
Zum Zeitpunkt der angehängten Anzeige gab es allerdings auch schon 
IBM-PCs (kompatible) mit 10 MB Festplatte zum halben Preis dieser 
Platte.

> Herzlichen Dank!
> Gruß
> Marcel

Ein Abschnitt zu Disk-Images im AVR CP/M-Artikel wäre nicht 
schlecht. Damit könntest Du Deinem Dank noch stärkeren Ausdruck 
verleihen. ;-)
Dazu auch noch die Hinweise [7] und [8].

Und noch ein allgemeiner Hinweis:
Die AVR-CP/M-Software enthielt lange Zeit einen Fehler, durch den bei 
Image-Formaten mit Headern ungleich der physikalischen Sektorgröße (yaze 
und simhd), Daten in falslche Sektoren geschrieben wurden. Der Fehler 
wurde in r209 bzw. Version 3.2 behoben. Deshalb bitte keine älteren 
Versionen benutzen, wenn man mit diesen Image-Formaten "arbeiten" 
möchte.


[1] Beitrag "Re: CP/M auf ATmega88"
[2] Beitrag "Re: CP/M auf ATmega88"
[3] Beitrag "Re: CP/M auf ATmega88"
[4] Beitrag "Re: CP/M auf ATmega88"
[5] drvtbl in BIOS.MAC
[6] dsk_fat16.asm:
1
; Function: Cluster to HostSector 
2
...
3
; ! Only works with Clustersizes 2,4,8,16,32,64,128 !
[7] Beitrag "Re: CP/M auf ATmega88"
[8] Beitrag "Re: CP/M auf ATmega88"

von Jens (Gast)


Angehängte Dateien:

Lesenswert?

So. Ich hab jetzt mal einen Schaltplan mit den folgenden Besonderheiten 
erstellt:
- SIMM-Module statt Einzel-DRAM-Chips, deswegen
- ein ATmega128 (ausreichend IO, war außerdem gerade im E-Schritt)
- SIMM und ATmega auf 5V, restliche Peripherie mit Pegelwandler auf 3,3V
- UART-Multiplexer per DIP-Switch und "ODER"-Gatter, damit PC und 
PS/2-Tastatur ohne umzuschalten verwendet werden können
- I2C mit 3,3V und 5V auf 4-polige Leiste herausgeführt
- restliche IO vom Propeller-Chip herausgeführt, damit kann z.B. 
Sound-IO nachgerüstet werden
- neben dem VGA-Ausgang ist auch noch ein Video-Ausgang vorhanden
- Text-Display und LEDs als Erweiterungen am I2C, können sowohl vom AVR 
als auch vom Propeller angesteuert werden

Die Idee hinter der Sache ist die: ich möchte gern meine SIMM-Rigel 
nicht wegen der zwei DRAM-Chips auseinandernehmen, sondern direkt 
verwenden.

Außerdem scheint der Propeller ein recht interessanter Chip zu sein. 
Leider ist das Eval-Board völlig überteuert. Daher habe ich die für mich 
interessante Peripherie vom Propeller-Eval-Board hier mit drauf gepackt. 
An den restlichen IOs kann man Erweiterungen nach Bedarf vornehmen.
Die Anschlüsse sind PMOD kompatibel.
Wer nicht basteln möchte kann sich da auch hier bedienen:
http://www.digilentinc.com/Products/Catalog.cfm?NavPath=2,401&Cat=9
http://www.maximintegrated.com/app-notes/index.mvp/id/5468

Die UART-Schnittstelle soll mehrere Funktionen erfüllen:
- Debugging AVR (PC <-> AVR)
- Debugging Propeller (PC <-> Propeller)
- Normalbetrieb, AVR sendet -> Propeller und PC empfangen
  Propller (PS/2) oder PC senden -> AVR empfängt

So. Nun muß ich mal sehen, wie ich das Ganze auf eine (oder mehrere) 
Platine(n) bringe.

Wer mag, kann mal drüber schauen, auch wenn es etwas voll geworden ist.
Aber so kann ich es noch ausdrucken und komme mit Eagle-Freeware aus.

Viele Grüße
Jens

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Da hast du ja viel Arbeit investiert!

Was mir beim flüchtigen Betrachten auffällt.
Der AVR läuft mit 5V, der FT232 und der Propeller mit 3.3V. Nun 
verbindest du Tx und Rx mit diesen unterschiedlichen Pegeln (AVR – 
Prop.)
Liegen die ungenutzten Tx-Pins immer auf High damit das „Oder“ 
funktioniert?

Die gänzlich andere DRAM-Beschaltung bedingt eine neue RAM-Ansteuerung, 
die Verwendung der AVR UART ersetzt die Soft UART. Wenn schon so viele 
Änderungen, warum denn nicht gleich ein XMEGA mit ordentlicher 
DRAM-Beschaltung?

Fazit:
Was ist der Gewinn der neuen Schaltung? Außer vielen Softwareänderungen 
kann ich keine Vorteile erkennen. Doch das ist meine ganz persönliche 
Meinung, ich möchte dich nicht in deinem Elan bremsen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Nachtrag:
Wenn es dir um die zwei Versorgungsspannungen und den RAM geht, schlage 
ich folgende Lösung vor. Alles läuft weiter auf 3.3V und der AVR wird 
halt langsamer getaktet. An den jetzigen „DRAM-Bus“ kommt eine 
„Hardwareemulation“ für einen 3.3V SRAM. Der Adress- /Datenmultiplexer 
kann über RAS/CAS geschaltet werden. Damit ändert sich in der 
Ansteuerung nichts bis auf das Abschalten des Refresh was jedoch sowieso 
nicht viel Zeit kostet [1].

[1] Beitrag "Re: CP/M auf ATmega88"

von Jens (Gast)


Lesenswert?

Joe G. schrieb:
> Der AVR läuft mit 5V, der FT232 und der Propeller mit 3.3V. Nun
> verbindest du Tx und Rx mit diesen unterschiedlichen Pegeln (AVR –
> Prop.)
Da ist noch der Pegelwandler dazwischen (TXB0108).

> Liegen die ungenutzten Tx-Pins immer auf High damit das „Oder“
> funktioniert?
Meines Wissens nach ist der Ruhezustand auf den UART-Leitungen '1'.
Aber ausprobiert habe ich das mit der "Veroderung" noch nicht.

> Die gänzlich andere DRAM-Beschaltung bedingt eine neue RAM-Ansteuerung,
> die Verwendung der AVR UART ersetzt die Soft UART. Wenn schon so viele
> Änderungen, warum denn nicht gleich ein XMEGA mit ordentlicher
> DRAM-Beschaltung?
Der Mega128 ist mir zugeflogen und die SIMM-Rigel liegen rum. Die 
RAM-Ansteuerung kann ich mir leicht anpassen (hoffentlich).
Ich habe zwar den UART auf die UART-Pins gelegt, aber dort kann ich auch 
erstmal Soft-UART drauf machen, muß also den Code nicht zwingend ändern.
Außerdem wäre XMEGA für mich eine neue Architektur, die für mich auf 
Dauer keinen Erkenntnisgewinn bringt. Abgesehen von evtl. benötigten 
neuen Programmiergeräten.

> Fazit:
> Was ist der Gewinn der neuen Schaltung?
Für mich oder für die Community?
Für mich sieht es so aus:
- Propeller ist neu
- SIMM-DRAM-Ansteuerung ist neu
- UART-Veroderung ist neu (aber wenn es geht komfortabel)
- CPM kenn ich noch nicht und
ich habe meinen ersten selbstgebauten Computer :-)

Für die Community kann ich nicht sprechen. Es ist eben eine weitere 
Variante. Wie bei den Linuxdistributionen ;-)

Grüße
Jens

Zum Nachtrag: Ich hab mit zwei Versorgungsspannungen kein Problem, ich 
möchte nur gern alle Bauteile laut Spezifikation betreiben.

von Marcel A. (dl1ekm)


Angehängte Dateien:

Lesenswert?

Hallo,

habe nun den Propeller in Betrieb genommen. Nachdem ich in die Falle mit 
dem vertauschten RX/TX erkannt hatte und noch einige kalte Lötstellen 
ausgemerzt hatte, ging es (siehe Bilder).

Aber nur so zu 90%...

Das Problem der abgeschnittenen Ränder habe ich durch manuelle 
Einstellung hinbekommen - der AUTO-Modes hats nicht geschafft :-)

In WS/TP werden z.B. keine CRTL-Codes erkannt. Es geht auch kein 
"Löschen nach links" - auch nicht im "DOS-Prompt" usw.

Anderes Problem: Keine Farben (alles grün) und auch kein 
Bildschirm-Löschen usw.... (siehe 2. Bild)

Wo sollte ich suchen? Da ja "grundsätzlich" alles geht würde ich fast 
ein HW-Problem ausschliessen?

Im CPM->USB-Modus geht alles zu 99% (Farben nicht 100%, wahrscheinlich 
Problem von Hyperterminal/Minicom/Putty).

Danke euch!

Gruß
Marcel

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo Marcel,

die aktuelle Softwareversion gibt es hier (Version 1.0):
http://www.mikrocontroller.net/svnbrowser/avr-cp-m/

Alle Codes die derzeit implementiert sind und alle Farbvarianten sind im 
beigefügten Dokument aufgeführt.

: Bearbeitet durch User
von Marcel A. (dl1ekm)


Lesenswert?

Ja danke - habe ich inzwischen auch gelesen und mein post editiert :-)
Wer lesen kann .... jaja... :-)

von Marcel A. (dl1ekm)


Lesenswert?

So - geht nun deutlich besser.

Ab und zu kommt die Tastatur-Emulation unter TP noch ins stottern (dann 
geht alles mit Shift nicht mehr...) - ist aber nicht reproduzierbar.

Verstehen tue ich allerdings die ESC-Codes für die Farben noch nicht.

Grundsätzlich wirken sich die Codes offenbar auf den GANZEN Bildschirm 
aus - nicht auf die folgenden Zeichen? Zumindest mein Testprogramm in TP 
verhält sich so.

Gemäß VT100.pdf:

write(chr(27) + '[44m');
-> setzt den ganzen Bildschirm in Blau. Schrift auch in blau, vor grünem 
Hintergrund.

Code 34m: -> setzt den ganzen Bildschirm schwarz, Text dann schwarz vor 
blauem Hintergrund.

Scheint alles invers zu sein.
ESC 7m bewirkt aber keine Invers-Umschaltung. ALT-i hilft bei TP auch 
nicht.

Die Steuer-Codes (Löschen usw.) verhalten sich unter TP und WS 
unterschiedlich - aber wenn ich hier weiter oben lese ist das wohl 
normal...

Gruß
Marcel

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Marcel Andre schrieb:
> Grundsätzlich wirken sich die Codes offenbar auf den GANZEN Bildschirm
> aus - nicht auf die folgenden Zeichen? Zumindest mein Testprogramm in TP
> verhält sich so.

Korrekt. Da der Bildwiederholspeicher des Propeller begrenzt ist, werden 
die Farben nur für den gesamten Bildschirm gesetzt. ESC[44m setzt also 
den Bildschirmhintergrund blau unabhängig von der Vordergrundfarbe. 
ESC[32m würde dann den Text grün darstellen.
Der Bildwiederholspeicher ist gerade so groß, dass es möglich wäre jeder 
Textzeile eine andere Vordergrund- und Hintergrundfarbe zuzuordnen. Aber 
ob das Sinn macht?

Marcel Andre schrieb:
> ESC 7m bewirkt aber keine Invers-Umschaltung.

Sollte es eigentlich tun, ALT i auch, ich überprüfe es mal.
F1 sollte alles wieder in den Grundzustand setzen, also invers aus, grün 
auf schwarz.

Marcel Andre schrieb:
> Die Steuer-Codes (Löschen usw.) verhalten sich unter TP und WS
> unterschiedlich - aber wenn ich hier weiter oben lese ist das wohl
> normal...

Grundsätzlich können ja bei der WS-Konfiguration einige Steuerzeichen 
selbst definiert werden. Möglicherweise unterscheiden sie sich in der 
Version gerade von TP.

: Bearbeitet durch User
von Benjamin K. (benjamin92)


Lesenswert?

Rein theoretische Frage: Wäre es eigentlich möglich, auf der vorhandenen 
Hardware (CP/M Stick V 3.2) einen Intel 8086 oder 8088 zu emulieren und 
da darauf dann PTS-DOS laufen zu lassen?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Theoretisch ja.

von Benjamin K. (benjamin92)


Lesenswert?

Okay, das klingt ja interessant. Mal gucken, ob ich mit meinen 
bescheidenen Kenntnissen da was hinbekomme. (Hatte mal 2 Jahre 
Assemblerprogrammierung für Intel 8051 in der Schule und C Kenntnisse 
hab ich auch, die werden wohl weniger helfen). Jetzt muss ich sowieso 
erstmal das AVR Tutorial durcharbeiten. Bin ziemlich am Anfang. Hab mir 
übers lange Wochenende den Thread hier durchgelesen und gemerkt, dass 
ich nicht viel verstehe...

von Marcel A. (dl1ekm)


Lesenswert?

So, habe nun die Uhr und den Parallel-Port erfolgreich "am Laufen".

Schon toll - das Konzept mit den virtuellen Ports für I2C und den 
Parallel-Chip. Großes Lob an Leo für die Implementierung!

Habe erfolgreich in TP die Ports gelesen und geschrieben (Blinker :-))

Joe erwähnte, dass auf Port 17-22 (?) auch die ADCs des AVR liegen? In 
der virt_ports.asm habe ich die aber nicht gefunden.

Einen Krampf bekomme ich immer noch bei den Terminal-Emulationen. Es 
reicht ja schon, dass Propeller-Terminal und USB-Terminal (Putty) sich 
anders verhalten bzgl. Bildschirm und KeyCodes. Auch klar, dass sich 
Programme unterschiedlich verhalten bei den Steuertasten (wie TP und 
WS), das kann man mit Muße konfigurieren. Aber dass sich auch ein 
Programm selber unterschiedlich verhält... Siehe TP: Im Menü geht DEL 
(nach links), im Editor nicht mehr (zumindest im Terminal)... Argggg :-)
Kann mir jemand ein gutes Terminalprogramm für Windows und/oder Linux 
empfehlen? Putty und minicom habe ich probiert... Evtl. optimierte 
Settings?

Schönen Abend noch!
Marcel

von Benjamin K. (benjamin92)


Lesenswert?

Bei mir funktioniert TeraTerm ganz gut :)

von Empfehler (Gast)


Lesenswert?


von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Tera Term mit der VT100 Einstellung sollte alles richtig machen.

Marcel Andre schrieb:
> Joe erwähnte, dass auf Port 17-22 (?) auch die ADCs des AVR liegen? In
> der virt_ports.asm habe ich die aber nicht gefunden.

;------------------------ ADC Interface 
----------------------------------
;17-19  23,25  in  - ADC Channels 6,7 and 8 (Temp-Sensor)
;        ADC 6,7 only Devices in 32 pin Case (TQFP/MLF)
;        8 Bit only
;        Fixed ADC clock (FCPU/128, 156KHz at 20MHz CPU)
;        Vref = VCC
;20,21    in  - ADC: Measure VCC
;

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> Marcel Andre schrieb:
>> Joe erwähnte, dass auf Port 17-22 (?) auch die ADCs des AVR liegen? In
>> der virt_ports.asm habe ich die aber nicht gefunden.
>
> ;------------------------ ADC Interface
> ----------------------------------
> ;17-19  23,25  in  - ADC Channels 6,7 and 8 (Temp-Sensor)
> ;        ADC 6,7 only Devices in 32 pin Case (TQFP/MLF)
> ;        8 Bit only
> ;        Fixed ADC clock (FCPU/128, 156KHz at 20MHz CPU)
> ;        Vref = VCC
> ;20,21    in  - ADC: Measure VCC

In virt_ports.asm sind die Einträge seit SVN r214 drin. Nützt aber 
nichts, da ich den eigentlichen ADC-Code noch nicht eingecheckt habe. 
Ich hatte nur an Ostern eine "ADC-Testversion" hier als 
Diskussionsgrundlage gepostet. Diskussion gabs keine, aber ich bin 
inzwischen der Meinung, daß die Temperatur- und VCC-Messungen ziemlich 
unsinnig sind und nur Verwirrung stiften, und deshalb entfernt werden 
sollten. Im Anhang ist noch mal der fehlende Code.

von Leo C. (rapid)


Lesenswert?

Marcel Andre schrieb:
> Siehe TP: Im Menü geht DEL
> (nach links), im Editor nicht mehr (zumindest im Terminal)... Argggg :-)
> Kann mir jemand ein gutes Terminalprogramm für Windows und/oder Linux
> empfehlen? Putty und minicom habe ich probiert... Evtl. optimierte
> Settings?

Meinst Du mit DEL die Taste mit dem Pfeil nach links oder die Taste, die 
auf deutschen Tastaturen mit "Entf" beschriftet ist?
Wahrscheinlich sendet Deine DEL-Taste 0x08 (Backspace). "Löschen links" 
geht aber in (mindestens) Turbopascal und Wordstar mit 0x7F (Delete).

minicom funktioniert bei mir mit der Einstellung "Backspace key sends: 
DEL" (Terminal settings).
Eigentlich braucht man unter linux aber gar kein (extra) 
Terminalprogramm. "$ cu -l /dev/ttyUSB0 -s 115200 --nostop" tuts auch. 
(Allerdings grade nicht mit der Propeller-Platine. Wahrscheinlich, weil 
DCD und/oder DSR nicht aktiv sind.)

Hier ist noch mehr zum Thema:
Beitrag "Re: CP/M auf ATmega88"

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Wahrscheinlich sendet Deine DEL-Taste 0x08 (Backspace). "Löschen links"
> geht aber in (mindestens) Turbopascal und Wordstar mit 0x7F (Delete).

In den meisten Terminal-Emulationsprogrammen lässt sich das Verhalten 
der Backspace-Taste einstellen - so auch in PuTTY. Das ging auch schon 
in den damaligen DEC-Terminals der 80er Jahre... und sorgte damals schon 
für jede Menge Verwirrung unter DEC/VMS, PDP11/RT bzw. Ultrix.

von Jens (Gast)



Lesenswert?

So, ich wollte mich mal wieder melden...
Hier mein aktueller Stand:

Die Idee mit der gemeinsamen Taktquelle (20 MHz für AVR und Propeller) 
habe ich wieder verworfen, da der ATmega128 nur bis 16 MHz spezifiziert 
ist.
Außerdem mußte ich AVR/CPU und Propeller/IO trennen, da es aussichtslos 
schien, mit zwei Lagen den von mir gewünschten Formfaktor (Leiterplatte) 
zu realisieren.
Dabei habe ich auch gleich die Schaltpläne getrennt (Anhang).

Danach wurden die Leiterplatten geroutet und gefertigt, Bauteile 
bestellt und fleißig bestückt.
Viel geprüft und gemessen und dann hab ich die Schaltungen Stück für 
Stück in Betrieb genommen.
Dabei wurden kleine Testprogramme (in C) für die einzelnen Funktionen 
geschrieben oder genutzt:

Was bisher getestet wurde:
* ATmega128 (16 MHz Takt) --> funktioniert
* UART mit FTDI und 115200 kBit/s --> funktioniert
* SD-Karte (nachdem der richtige Pegelwandler verbaut wurde: TX_S_0108) 
--> funktioniert
* SIMM-Riegel (256 kB, 1 MB, 4 MB) --> funktioniert
* die DIP-Umschalter am UART-Multiplexer (PC <-> AVR, PC <-> Propeller) 
--> funktionieren
  Damit muß man nicht umjumpern, sondern braucht nur die kleinen 
Umschalter betätigen :-)
* Propeller --> funktioniert
  Ich hab ein paar Spin-Beispiele ausprobiert und dann das aktuelle 
VT100-VGA-Spin eingespielt.


Was noch ungetestet ist:
* RTC
* Video-Ausgabe (RCA-Buchse)
* I2C (mit 3.3V und 5V)
* ADC-Kanäle am AVR


Mängel, die mir bisher aufgefallen sind:
* Der Buzzer ist viel zu leise, eigentlich knackt er nur beim Ein- und 
Ausschalten.
  Damit der richtig geht, muß ich mit dem Propeller eine Frequenz 
ausgeben.
* Auf der ATmega128-Leiterplatte hab ich zu wenig Platz um die 
ISP-Buchse gelassen, unschön.
* Der Spannungsregler AP1117 schwingt gelegentlich (bei ca. 3,8 kHz), da 
müssen größere Kondensatoren in die Nähe.
* Es fehlt ein Pullup an Propeller-TX, damit auch bei abgesteckter 
Propellerplatine die TX-Veroderung geht.
* Das Propellerterminal kommt nicht wirklich mit 115200,8,N,1 aus. Dort 
werden Zeichen verschluckt und Bits falsch interpretiert, wenn es zu 
schnell geht.
  Wenn man auf Senderseite zwei Stopbits einsetzt, geht es etwas besser, 
aber immer noch nicht perfekt.


Außerdem fehlt noch die dritte Platine. Dort soll folgendes drauf:
* der 8-Bit Parallelport
* ein Display (nur welches? Text oder Grafik? LCD oder OLED?)
* Soundmodul
* ...?

Den aktuellen Schaltplan gibt es als Anhang, die Layouts werde ich bei 
Gelegenheit auch noch veröffentlichen.

Jetzt sitze ich an der Speicheranbindung.
Vielleicht kann mir jemand (Leo?) sagen, was an der folgenden Ausgabe 
falsch ist?
1
CPM on an AVR, v3.2 r216 
2
Testing RAM: fill...wait...reread...
3
Addr xx yy 
4
0083 83 83 -------- --------
5
00CC CC CC -------- --------
6
0225 27 27 -------- --------
7
0356 55 55 -------- --------
8
03D2 D1 D1 -------- --------
9
0407 03 03 -------- --------
10
0428 2C 2C -------- --------
11
04E9 ED ED -------- --------
12
0501 04 04 -------- --------
13
0576 73 73 -------- --------
14
0658 5E 5E -------- --------
15
0819 11 11 -------- --------
16
08F2 FA FA -------- --------
17
09E8 E1 E1 -------- --------
18
0A78 72 72 -------- --------
19
0B96 9D 9D -------- -------- System halted!

Und gleich noch eine Frage: An welcher Stelle werden die Adressleitungen 
A8-A10 verwendet?
Bei dram_write und dram_read habe ich nichts gefunden. Dort wird immer 
nur mit A0-A7 + A0-A7 gearbeitet (16 Bit = 64 kByte).

Ansonsten hier noch einmal Vielen Dank an die vielen Helfer, die die 
Vorarbeit geleistet haben!
Es ist ein sehr spannendes Projekt :-)

Bis später
Jens

von Leo C. (rapid)


Lesenswert?

Nur ganz kurz, Morgen habe ich wahrscheinlich mehr Zeit, um auf Deine 
Schaltung einzugehen:

Jens schrieb:
> Und gleich noch eine Frage: An welcher Stelle werden die Adressleitungen
> A8-A10 verwendet?

Bisher nur bei der RAM-Disk. Siehe dsk_ram.asm (8-bit).
Ansonsten werden A8-A10 bei allen DRAM-Zugriffen immer auf High 
gehalten. Etwas mehr Info fidest Du vielleicht hier:
Beitrag "Re: CP/M auf ATmega88"

von Marcel A. (dl1ekm)


Lesenswert?

Hallo Jens,

spannend, dass du auch die Probleme mit der Propeller-VGA-Ausgabe hast. 
Ich nutze die Platine von Joe. Anfangs ging es auch - aber seit ca. 2 
Wochen habe ich immer an den genau gleichen Stellen Lücken in der 
Darstellung oder falsche Interpretation von Zeichen usw.

Das scheint aber nicht immer ein Problem zu sein - bei Joe läuft es wohl 
derzeit stabil. Bislang gibt es hier noch kein Indiz, woran das genau 
liegt - da es ja beim einen geht - beim anderen nicht bzw. sich zeitlich 
ändert...

Gruß
Marcel

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ich habe momentan etwas wenig Zeit, doch ich werde mich in einer ruhigen 
Minute mal dem Problem mit der VGA-Ausgabe annehmen. Vermutlich ist es 
einer der CTRL-Befehle der den Bildschirmspeicher zu weit überschreibt. 
Da gleich darauf der V24 Puffer folgt, entstehen dabei die Probleme.

von Leo C. (rapid)


Lesenswert?

Jens schrieb:
> Vielleicht kann mir jemand (Leo?) sagen, was an der folgenden Ausgabe
> falsch ist?CPM on an AVR, v3.2 r216
> Testing RAM: fill...wait...reread...
> Addr xx yy
> 0083 83 83 -------- --------
...
> 0B96 9D 9D -------- -------- System halted!


Falsch ist, daß Zellen ausgegeben werden, die angeblich gar keinen 
Fehler haben. Unter xx steht, was in die Zelle geschrieben wurde, und 
unter yy, was später gelesen wurde. Wenn die beiden Wert gleich sind, 
dürfte also gar nichts ausgegeben werden. In der Testroutine kann ich 
keinen Fehler entdecken. Bin ratlos.

Hier noch was zum Ramtest:
Beitrag "Re: CP/M auf ATmega88"

von Jens (Gast)


Lesenswert?

Leo C. schrieb:
> Falsch ist, daß Zellen ausgegeben werden, die angeblich gar keinen
> Fehler haben. Unter xx steht, was in die Zelle geschrieben wurde, und
> unter yy, was später gelesen wurde. Wenn die beiden Wert gleich sind,
> dürfte also gar nichts ausgegeben werden. In der Testroutine kann ich
> keinen Fehler entdecken. Bin ratlos.
Ich glaube an meinem refresh ist was falsch. Ich bin in AVR-ASM nicht so 
die Leuchte (C liegt mir mehr). Vielleich fällt Euch ja was auf:
[asm]
  .cseg

  INTERRUPT OC2Aaddr

        push    temp                    ; 2
        LDS     temp, RAM_CTRL_PORT     ; 2
        ; gehe am refresh vorbei, wenn gerade ein Zugriff erfolgt
        ; ras = 0 -> Zugriff
        ; ras = 1 -> kein Zugriff -> refresh
  sbrs  temp, ram_ras          ; 2
        rjmp    norefresh               ; 2
                ;       CAS  RAS
  cbr  temp, (1<<ram_cas)  ; 1      1    1
        STS     RAM_CTRL_PORT, temp     ; 2      0    1
  cbr  temp, (1<<ram_ras)  ; 1      0    1
        STS     RAM_CTRL_PORT, temp     ; 2      0    0
  sbr  temp, (1<<ram_ras)  ; 1      0    0
        STS     RAM_CTRL_PORT, temp     ; 2      0    1
  cbr  temp, (1<<ram_ras)  ; 1      0    1
        STS     RAM_CTRL_PORT, temp     ; 2      0    0
  sbr  temp, (1<<ram_ras)  ; 1      0    0
        STS     RAM_CTRL_PORT, temp     ; 2      0    1
  sbr  temp, (1<<ram_cas)  ; 1      0    1
        STS     RAM_CTRL_PORT, temp     ; 2      1    1
norefresh:        ;
        pop     temp                    ; 2
  reti              ; 4  --> 32 cycles
[/asm]
Dummerweise habe ich die Speichersteuerleitungen (RAS, CAS, WE) an Port 
G gelegt, da kann ich die in und out-Befehle nicht verwenden.

Viele Grüße
Jens

von Jens (Gast)


Lesenswert?

Joe G. schrieb:
> Vermutlich ist es
> einer der CTRL-Befehle der den Bildschirmspeicher zu weit überschreibt.
Hmm. Bei 'normaler' ASCII-Ausgabe werden doch gar keine CTRL-Befehle 
ausgeführt. Oder doch?

Grüße
Jens

von Jens (Gast)


Lesenswert?

Marcel Andre schrieb:
> Anfangs ging es auch - aber seit ca. 2
> Wochen habe ich immer an den genau gleichen Stellen Lücken in der
> Darstellung oder falsche Interpretation von Zeichen usw.
Du kanns ja mal versuchen eine kleine Pause beim Versenden einzulegen 
(softuart) oder zwei Stoppbits, statt nur Einem (harduart).
Letzteres hat das Problem bei mir etwas entspannt.

Marcel Andre schrieb:
> sich zeitlich
> ändert...
Ich denke die verschiedenen Quarze sind unterschiedlich frequenz-, 
spannungs- und temperaturstabil. Wenn das Timing da etwas knapp ist, 
kann das zu den beobachteten Effekten führen.

Viele Grüße
Jens

von Jens (Gast)


Lesenswert?

Jens schrieb:
> Ich glaube an meinem refresh ist was falsch.
Ich bin mir sogar sicher, das da was falsch ist. Wenn ich den refresh 
rausnehme, komme ich zum 'Initing mmc...'
Jetzt muß ich erstmal die SD-Karte bearbeiten.

Viele Grüße
Jens

von Leo C. (rapid)


Lesenswert?

Jens schrieb:
> Ich glaube an meinem refresh ist was falsch. Ich bin in AVR-ASM nicht so
> die Leuchte (C liegt mir mehr). Vielleich fällt Euch ja was auf:

Du hast auf jeden Fall vergessen, das Status-Register zu retten, da 
cbr/sbr-Befehle die Flags verändern.
Den Rest schaue ich mir noch an.
1
>   .cseg
2
> 
3
>   INTERRUPT OC2Aaddr
4
> 
5
>         push    temp                    ; 2
6
  in  temp,sreg
7
  push  temp
8
>         LDS     temp, RAM_CTRL_PORT     ; 2
9
10
...
11
12
> norefresh:        ;
13
  pop  temp
14
  out  sreg,temp
15
>         pop     temp                    ; 2
16
>   reti              ; 4  --> 32 cycles
> Dummerweise habe ich die Speichersteuerleitungen (RAS, CAS, WE) an Port
> G gelegt, da kann ich die in und out-Befehle nicht verwenden.

Das ist wirklich ungeschickt.

von Jens (Gast)


Lesenswert?

Leo C. schrieb:
> Du hast auf jeden Fall vergessen, das Status-Register zu retten, da
> cbr/sbr-Befehle die Flags verändern.
Super! Jetzt geht's auch mit refresh :-)

>> Dummerweise habe ich die Speichersteuerleitungen (RAS, CAS, WE) an Port
>> G gelegt, da kann ich die in und out-Befehle nicht verwenden.
> Das ist wirklich ungeschickt.
Naja. Nicht ganz so tragisch. Ich habe ein paar freie Portpins auf 
Stiftleisten gelegt. Da kann ich zum Optimieren noch umfädeln. Aber 
erstmal muß es überhaupt funktionieren.

Nächster Punkt ist die SD-Karte...
...aber nicht mehr heute!

Viele Grüße & Vielen Dank,
Jens

von Leo C. (rapid)


Lesenswert?

Der Rest sollte eigentlich funktionieren.
Aber was hälst Du denn von folgender Variante:
1
         .cseg
2
3
  INTERRUPT OC2Aaddr
4
5
        push    temp                    ;2
6
        LDS     temp, RAM_CTRL_PORT     ;2
7
8
        ; gehe am refresh vorbei, wenn gerade ein Zugriff erfolgt
9
        ; ras = 0 -> Zugriff
10
        ; ras = 1 -> kein Zugriff -> refresh
11
12
        sbrs  temp, ram_ras             ;2
13
        rjmp    norefresh               ;-
14
                                        ;      CAS  RAS
15
                                        ;       1    1
16
        STS     RAM_CTRL_PORT,_CASREF   ;2      0    1
17
        STS     RAM_CTRL_PORT,_CAS0     ;2      0    0
18
        STS     RAM_CTRL_PORT,_CASREF   ;2      0    1
19
        STS     RAM_CTRL_PORT,_CAS0     ;2      0    0
20
        STS     RAM_CTRL_PORT,_255      ;2      1    1
21
22
norefresh:                              ;
23
        pop     temp                    ;2
24
        reti                            ;4  --> 22 cycles

Dazu in 'config.inc' statt:
.def  _OE  = r4
folgendes:
.def  _CASREF  = r4   ;CAS before RAS refresh

und in 'init.asm' das Register entsprechend initialisieren.
Hier kann man sich push/pop von SREG wieder sparen, da die verwendeten 
Befehle kein Flag ändern.
Evtl. müßten noch ein paar NOPs eingestreut werden.

von Jens (Gast)


Lesenswert?

Leo C. schrieb:
> Aber was hälst Du denn von folgender Variante:
Ist vorgemerkt. Aber optimiert wird später (Hardware + Software)
:-)

Jetzt findet er das passende Image nicht:
1
CPM on an AVR, v3.2 r216 Test
2
Testing RAM: fill...wait...reread...
3
Initing mmc...
4
5
mmcInit 
6
mmcCMD: 00 00000000 .. 95 CMDRes: 01 
7
mmcCMD: 08 000001AA .. 87 CMDRes: 01 
8
mmcCMD: 37 00000000 .. 01 CMDRes: 01 mmcCMD: 29 40000000 .. 01 CMDRes: 01 
9
mmcCMD: 37 00000000 .. 01 CMDRes: 01 mmcCMD: 29 40000000 .. 01 CMDRes: 00 
10
mmcCMD: 3A 00000000 .. 01 CMDRes: 00 
11
 CT: 04 InitRes: 00 
12
mmcCMD: 11 00000000 .. 01 CMDRes: 00 No bootable CP/M disk found! Please change MMC/SD-Card.
Gerade eben wollte ich fragen, wo ich weiter zu suchen habe.

Hardwaremäßig funktioniert die SD-Karte, ich habe den Code von Roland 
Riegel ausprobiert, der lief:
http://www.roland-riegel.de/sd-reader/index.html

Jetzt habe Testweise die SD-Karte nochmal neu bespielt. Mit dem Mac geht 
das z.B. so:
1
> diskutil partitiondisk /dev/diskX 1 MBRFormat "MS-DOS FAT16" "CPM-DISK" 1GB
Anschließend noch noch CPMDSK_A.IMG, CPMDSK_B.IMG und CPMDSK_C.IMG 
draufkopiert.

Und auf einmal läuft es! Cool!
1
CPM on an AVR, v3.2 r216 Test
2
05 05 01 04
3
Testing RAM: fill...wait...reread...
4
Initing mmc...
5
6
A: FAT16 File-Image 'A' at: 003, size: 256KB.
7
B: FAT16 File-Image 'B' at: 057, size: 256KB.
8
C: FAT16 File-Image 'C' at: 073, size: 256KB.
9
Partinit done.
10
Ok, Z80-CPU is live!
11
12
62k cp/m vers 2.2
13
14
A>dir
15
A: ASM      COM : DDT      COM : DUMP     COM : ED       COM
16
A: T        COM : TLOOP    COM : LOAD     COM : MBASIC   COM
17
A: 23       BAS : BAGELS   BAS : CHECKERS BAS : STARTREK BAS
18
A: TREKINST BAS : MASTRMND BAS : WEEKDAY  BAS : PIP      COM
19
A: STAT     COM : SUBMIT   COM : XSUB     COM : ZORK1    COM
20
A: ZORK1    DAT : SURVEY   COM
21
A>
Die vier Zahlen auf der zweiten Zeile sind von meinem 
Speicher-Debugging.
Die Ausgaben vom Emulator zum Propeller laufen offenbar langasm genug, 
so das auf dem VGA-Monitor alles 'ordentlich' zu sehen ist.

Dann doch noch eine Frage:
1
ATmega128 memory use summary [bytes]:
2
Segment   Begin    End      Code   Data   Used    Size   Use%
3
---------------------------------------------------------------
4
[.cseg] 0x000000 0x01f800  15046   1570  16616  131072  12.7%
5
[.dseg] 0x000100 0x000656      0   1366   1366    4096  33.3%
6
[.eseg] 0x000000 0x000000      0      0      0    4096   0.0%
Kann ich cseg irgendwie verkleinern? Der Flash-Vorgang dauert jedesmal 
ewig (gefühlt).

Viele Grüße
Jens

von Leo C. (rapid)


Lesenswert?

Herzlichen Glückwunsch Jens.

Jens schrieb:
> Jetzt habe Testweise die SD-Karte nochmal neu bespielt. Mit dem Mac geht
...
> Und auf einmal läuft es! Cool!

Vielleicht bekommst Du ja noch raus, woran es lag.

Jens schrieb:
> Die Ausgaben vom Emulator zum Propeller laufen offenbar langasm genug,
> so das auf dem VGA-Monitor alles 'ordentlich' zu sehen ist.

Ja, leider ist das so. 9600 Baud würden für das 3 MHz Z80 CP/M föllig 
ausreichen. Und wir bekommen jedes mal die Krise, wenn mit 115200 etwas 
nicht richtig tut.

Jens schrieb:
> Kann ich cseg irgendwie verkleinern? Der Flash-Vorgang dauert jedesmal
> ewig (gefühlt).

Versuch mal:
$ make MMCBOOTLOADER=0 clean all

Wenn das hilft, und Du den Bootloader nicht brauchst, kannst Du den 
Support dafür auch dauerhaft abschalten. Entweder im Makefile oder in 
config.inc.

von Jens (Gast)


Lesenswert?

Leo C. schrieb:
> Herzlichen Glückwunsch Jens.
Naja, der Glückwunsch gehört Euch, ich habe ja 'nur' nachgebaut...

>> Jetzt habe Testweise die SD-Karte nochmal neu bespielt. Mit dem Mac geht
> Vielleicht bekommst Du ja noch raus, woran es lag.
Beim ersten Mal habe ich die Partitionierung mit dem 
Festplattendienstprogramm gemacht. Ich glaube das Programm legt per 
Default eine GUID (http://de.wikipedia.org/wiki/GUID_Partition_Table) 
Partitionstabelle an. Das funktioniert natürlich nicht, wenn ein Master 
Boot Record erwartet wird.

>> Die Ausgaben vom Emulator zum Propeller laufen offenbar langasm genug,
>> so das auf dem VGA-Monitor alles 'ordentlich' zu sehen ist.
> Ja, leider ist das so. 9600 Baud würden für das 3 MHz Z80 CP/M föllig
> ausreichen. Und wir bekommen jedes mal die Krise, wenn mit 115200 etwas
> nicht richtig tut.
Ich versuche alle meine Projekte mit 115200 bps laufen zu lassen. Das 
ist für mich ein Quasistandard. Und ich denke auch, das der Propeller 
die Rechenleistung hat, um das zu schaffen. Aber das gehört in die 
Kategorie Optimierung Propeller.
Dort muss ich sowieso nochmal ran, damit der richtig beept.

>> Kann ich cseg irgendwie verkleinern?
> Versuch mal:
> $ make MMCBOOTLOADER=0 clean all
Ich hab es gleich in der config.inc deaktiviert. Jetzt dauert der 
Programmiervorgang nur noch 12 Sekunden:
1
ATmega128 memory use summary [bytes]:
2
Segment   Begin    End      Code   Data   Used    Size   Use%
3
---------------------------------------------------------------
4
[.cseg] 0x000000 0x004010  14732   1066  15798  131072  12.1%
5
[.dseg] 0x000100 0x000656      0   1366   1366    4096  33.3%
6
[.eseg] 0x000000 0x000000      0      0      0    4096   0.0%
Danke.
1
A>t b
2
3
Timer running. Elapsed: 005.021s.
4
A>tloop
5
6
Timer running. Elapsed: 001.342s.
Gibt es noch einen erweiterten Benchmark?

Viele Grüße
Jens

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Jens schrieb:
> Naja, der Glückwunsch gehört Euch, ich habe ja 'nur' nachgebaut...

Eben nicht 'nur'. Immerhin bist Du gerade dabei, die Menge der 
unterstützten Controller zu vergrößern. Und eine zusätzliche 
DRAM-Variante gibts wahrscheinlich auch. Und wenn Du die I2C-Verbindung 
AVR-Propeller richtig durchziehen willst, dann bekommen wir auch noch 
einen I2C-Multimaster-Treiber. :)

>> $ make MMCBOOTLOADER=0 clean all
> Ich hab es gleich in der config.inc deaktiviert. Jetzt dauert der
> Programmiervorgang nur noch 12 Sekunden:ATmega128 memory use summary

Mit was programmierst Du?

Bei mir für mega328p mit avrdude/dragon/isp sind es ca. 14s + nochmal 
14s für den Verify. Der Unterschied ohne/mit Bootloader-Kennung ist mir 
früher auch schon aufgefallen, und ich hatte überlegt, an der Stelle 
etwas zu ändern. Allerdings ist der Unterschied mit avrdude 6 jetzt 
verschwunden.


> A>t b
>
> Timer running. Elapsed: 005.021s.
> A>tloop
>
> Timer running. Elapsed: 001.342s.
> Gibt es noch einen erweiterten Benchmark?

A>act b

Timer running. Elapsed: 003.860s.
A>tloop

Timer running. Elapsed: 000.989s.
A>8q

Eight Queens. Running 2 iterations ...
Timer running. Elapsed: 007.669s.
A>

ACT.COM ist die neuere Version von T.COM. 8Q.PAS ist im Anhang.

Vor einigen Monaten hatte ich auch mal mit Dhrystone experimentiert. Die 
Dateien und Ergebnisse muß ich mal suchen.
Hier sind schon mal ein paar Links dazu:
http://classes.soe.ucsc.edu/cmpe202/benchmarks/standard/dhrystone.c
http://wiretap.area.com/Gopher/Library/Techdoc/Bench/dhryst.txt
http://www.netlib.org/performance/html/dhrystone.data.col0.html
http://www.ecrostech.com/Other/Resources/Dhrystone.htm

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

DHRYSTONE

Im Anhang sind 2 Diskimages mit C-Compilern, und jeweils dem Benchmark 
Source und Binary. Für jeden Compiler habe ich jeweils eine Funktion 
"time" geschrieben, die die Zeit in Sekunden liefert. Allerdings nicht 
die aktuelle Uhrzeit, sondern nur die Zeit in Sekunden seit dem setzten 
Reset.
Für den Test ist das ja egal.

Leider weiß ich noch nicht, warum die Laufzeit so stark schwankt. Mit 
Hi-Tech C z.B zwischen 27 und 30 Sekunden, was 185 dhrystone/s bis 166 
dhrystone/s entspricht. Eigentlich müßte immer das Gleiche (+- 1s) 
herauskommen.

Die Ergebnisse (ca. Mittelwerte) habe ich in die Tabelle aus dem ersten 
Link oben eingefügt. Sieht doch garnicht schlecht aus.


1
                 DHRYSTONE 1.1 BENCHMARK SUMMARY
2
                     SORTED BY PERFORMANCE
3
4
 MANUF      MODEL      PROC     CLOCK NOREG   REG OS,COMPILER,NOTES
5
 -----      -----      ----     ----- -----   --- -----------------
6
 Commodore  64         6510      1.00    19    34 C64 ROM ,C Power 2.9 trim,
7
 Apple      IIe        65C02     1.02    37    37 DOS 3.3,Aztec CII v1.05i ,
8
 Home Brew             Z80       4.00    53    53 CPM-80 ,Hisoft C++  ,
9
 Commodore  128        8502      2.00    43    68 C128 ROM ,C Power 128  trim,
10
 Home Brew             Z80       2.50    91    91 CPM-80 2.2,Aztec CII 1.05g ,
11
*Net Brew   AVRCPM     Z80emul  ~3.     100   108 CPM-80 2.2,Aztec CII 1.06d
12
 Cromemco   Z2         Z80       4.00   127   127 Cromix 11.26,ccc  ,
13
 NCR        Decision M 8088      4.77   166   166 MS-DOS 2.11,Lattice 2.14 small,
14
*Net Brew   AVRCPM     Z80emul  ~3.     172   172 CPM-80 2.2,HI-TECH C V3.09
15
 Home Brew             8086      8.00   197   203 iRMX-86 V6,Intel C-86 2.0 large,??
16
 NCR        PC4        8088      0.00   212   212 MS-DOS 2.11,Lattice 2.14 small,

von Jens (Gast)


Lesenswert?

Leo C. schrieb:
> unterstützten Controller zu vergrößern. Und eine zusätzliche
> DRAM-Variante gibts wahrscheinlich auch.
Da müssen wir mal sehen, wie wir meine Änderungen ins Repository 
bekommen.

> Und wenn Du die I2C-Verbindung
> AVR-Propeller richtig durchziehen willst, dann bekommen wir auch noch
> einen I2C-Multimaster-Treiber. :)
I2C müsste eigentlich schon gehen. Der Propeller bootet ja aus dem 
EEPROM und der AVR hängt via Pegelwandler auch an den I2C-Leitungen...

> Mit was programmierst Du?
Hardware: Mit einem selbstgebauten AVR910:
http://www.klaus-leidinger.de/mp/Mikrocontroller/AVR-Prog/AVR-Programmer.html
Software: avrdude, ich weiß aber gerade nicht in welcher Version.

>> Timer running. Elapsed: 005.021s.
> Timer running. Elapsed: 003.860s.
Ok, das passt. Der ATmega328 läuft ja auch mit 20 MHz, der ATmega128 mit 
16 MHz.

> A>8q
>
> Eight Queens. Running 2 iterations ...
> Timer running. Elapsed: 007.669s.
Hui. Ich musste mir erstmal 'ne Bedienungsanleitung für TP3 besorgen:
1
Running
2
Eight Queens. Running 2 iterations ...
3
Timer running. Elapsed: 010.383s.
Ein paar Prozentpunkte dürften sich noch rausholen lassen, wenn ich die 
Steuerleitungen für den RAM ändere.

> Vor einigen Monaten hatte ich auch mal mit Dhrystone experimentiert. Die
> Dateien und Ergebnisse muß ich mal suchen.
> Hier sind schon mal ein paar Links dazu:
Ich dachte eher an die Übersicht, wie schnell welcher Opcode simuliert 
wird. Naja, ist auch nicht wirklich wichtig.

Jetzt wird erstmal CP/M gelernt.

Grüße
Jens

von Leo C. (rapid)


Lesenswert?

Jens schrieb:
> Ich dachte eher an die Übersicht, wie schnell welcher Opcode simuliert
> wird. Naja, ist auch nicht wirklich wichtig.

Beitrag "Re: CP/M auf ATmega88"

von Jens (Gast)


Angehängte Dateien:

Lesenswert?

Hi!

Ich habe die RTC mal ein bischen aufgepeppt.
Mit Turbo Pascal 3 kann man auch in der heutigen Zeit noch relativ gut 
programmieren, hätte ich nicht gedacht. Auch der eingebaute Editor ist 
ganz brauchbar (im Gegensatz zu ED...)
Im Anhang sind die ergänzten bzw. veränderten Programmteile.

Die Adresse der RTC musste ich auf 0x51 (read: 0xA3, write 0xA2) 
umstellen, da auf 0x50 schon der EEPROM vom Propeller liegt.

Wer den Code per copy&paste direkt ins Zielsystem bringen will, kann 
dafür sehr gut screen verwenden. Dazu muß man in screen die 
folgenden Befehle eingeben:
1
<ctrl> a : readbuf <filename>
2
<ctrl> a : slowpaste 30
3
<ctrl> a ]
Durch slowpaste wird das Einfügen so verzögern, das der Emulator 
hinterherkommt.

Viele Grüße
Jens

von Marcel A. (dl1ekm)


Lesenswert?

Hallo zusammen,

es ist ja hier etwas ruhig geworden :-)
Über die Tage wollte ich mich mal wieder etwas mehr mit dem System 
auseinander setzen. Daher die Frage, ob sich evtl. schon 
"Verbesserungen" am Zusammenspiel AVR/Propeller hinsichtlich der 
VGA-Ausgabe ergeben haben.

Ansonsten schon mal frohes Fest und guten Rutsch!

Marcel

von Jens (Gast)


Lesenswert?

Marcel Andre schrieb:
> Daher die Frage, ob sich evtl. schon
> "Verbesserungen" am Zusammenspiel AVR/Propeller hinsichtlich der
> VGA-Ausgabe ergeben haben.
Ähm, ja. Ich hatte mir den Propeller-Code mal vorgenommen. Allerdings 
ist der noch nicht in einem vorzeigbaren Zustand.
Aber 38400 bps gingen dann ohne erkennbare Aussetzer. Hübsch wäre noch 
ein FIFO zwischen VT100-Dekoder und Steuercode-Execution.

Momentan will ich mir noch ein kleines TFT als Ausgabeeinheit dranbauen.
Ich weß nur noch nicht, ob am Propeller, am ATmega oder ob auf einem 
weiteren Controller.

Viele Grüße
Jens

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Jens schrieb:
> Aber 38400 bps gingen dann ohne erkennbare Aussetzer.

Konntest du einen Fehler eingrenzen?

von Jens (Gast)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> Konntest du einen Fehler eingrenzen?
Ich denke die vielen (zum Großteil unnötigen) if-Abfragen bremsen den 
Spin-Interpreter aus. Ich hab das mal auf (m.E.) übersichtlichere 
case-Konstrukte umgestellt.
Ich häng mal meine Version hier an.

Viele Grüße
Jens

von Marcel A. (dl1ekm)


Lesenswert?

Hallo Jens,

ich habe mir das gerade mal im Propeller-Tool angesehen auf die Schnelle 
und 2 Fragen:
- in der VT100 sehe ich immer noch viele IFs... ?
- wofür ist der "TV-Ausgang" genau?

Ich brutzel das nachher mal rein und berichte :-)

Danke und Gruß
Marcel

von Marcel A. (dl1ekm)


Lesenswert?

Blöde Frage - wo liegen im Moment die Sourcen?
http://cloudbase.homelinux.net/ ist irgendwie offline.
Habe ich was überlesen?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Jens schrieb:
> Ich häng mal meine Version hier an.

Danke, ich schaue mir morgen mal die Änderungen an.

Marcel A. schrieb:
> - wofür ist der "TV-Ausgang" genau?

TV ist nicht notwendig und nicht bei uns implementiert. Ursprünglich war 
es für Debugzwecke vorgesehen.

von Jens (Gast)


Lesenswert?

Marcel A. schrieb:
> - in der VT100 sehe ich immer noch viele IFs... ?
Da mußt Du noch ein Stück runterscrollen.
An der PS/2-Verarbeitung habe ich nichts geändert (hoffentlich).

> - wofür ist der "TV-Ausgang" genau?
Dort habe ich mir debug-Ausgaben hingeschickt:
1
  other:
2
    debug.str( string("m1 not supported: "))
3
    debug.hex( remote, 2)
4
    debug.out( 13)

Welche Hardware verwendest Du? Ich habe mich ja beim 
Propeller-Terminal-Teil mehr am Parallax-Evaluationboard orientiert. 
Neben dem VGA-Ausgang gibt es dort noch eine Chinch-Buchse mit TV-Out.


Marcel A. schrieb:
> Ich brutzel das nachher mal rein und berichte :-)
Ich habe auch an der Videoauflösung rumgespielt. Es kann also sein, das 
Dein Ausgabegerät nicht synchronisiert, in diesem Fall stellst Du in der 
VGA_HiRes_Text_010.spin die Auflösung am Besten zurück auf 640x480 (in 
VGA_1024.spin muß dann noch rows angepasst werden.)


Viele Grüße,
Jens

von Jens (Gast)


Lesenswert?

Ich habe gerade gesehen, das mein Text etwas missverständlich klingen 
könnte:
Jens schrieb:
> Ich denke die vielen (zum Großteil unnötigen) if-Abfragen bremsen
Das 'unnötig' bezieht sich auf die Tatsache, das am häufigsten 'normale' 
Zeichen reinkommen. Nur wenn eine ESC-Sequenz vorkommt bzw. aktiv ist, 
muß diese interpretiert werden, nicht bei jedem Zeichen.

Viele Grüße
Jens

von Marcel A. (dl1ekm)


Lesenswert?

So, hier mal die ersten Ergebnisse.

Zunächst konnte ich das SPIN nicht compilieren. Das liegt wahrscheinlich 
am QuellCode - Jens arbeitet in ASCII und Joe in UniCode...
Im Editor vom Propeller (bei mir unter Windoof):
1
{{ for keyboard-de start }}
2
3
                        cmp     data,#de_ae     wz      'replace ae
4
        if_z            mov     data,#"ä"
5
                        cmp     data,#de_oe     wz      'replace oe
6
        if_z            mov     data,#"ö"
7
                        cmp     data,#de_ue     wz      'replace ue
8
        if_z            mov     data,#"ü"

Bei Joe:
1
{{ for keyboard-de start }}
2
3
                        cmp     data,#de_ae     wz      'replace ae
4
        if_z            mov     data,#"ä"
5
                        cmp     data,#de_oe     wz      'replace oe
6
        if_z            mov     data,#"ö"
7
                        cmp     data,#de_ue     wz      'replace ue
8
        if_z            mov     data,#"ü"
Klar - in Zeile 361 der keyb-DE bleibt er dann hängen. Also einfach Joes 
Datei genommen...


Danach nur Wirrwarr auf dem Bildschirm. Klar, Jens hatte auf 38400 
stehen, Joe auf 115200. Ändern - gut. (wow, ich habe mich an 
Propeller-Code gewagt haha...)

Und siehe da: Er scheint erst mal nichts mehr zu verschlucken!!!

Allerdings ist es immer noch nicht schön:
- Alles nur einfarbig - blauer Hintergrund, weiße Schrift
- Es kommt vor, dass der Cursor verschwindet (hängt wahrscheinlich mit 
Steuerzeichen aus TP zusammen)
- Ab und zu werden dauerhaft "!" ausgegeben...
- Editor in TP funktioniert nicht - die Eingabe ist wohl letztlich ok, 
aber die Darstellung kommt nicht hinterher - kein Scrolling, kein 
Einfügen sichtbar usw. Der Bildschirm wird nicht richtig aufgebaut.
- Scrollen klappt auch in WS nicht

Ergebnis: Die VT100 von Joe hat bei mir funktional besser geklappt. 
Vielleicht kann Joe die Timing-Optimierungen übernehmen, dann wäre es 
wahrscheinlich so perfekt, wie es unter CP/M sein kann, wo hinsichtlich 
Tastatur und Bildschirm jeder sein eigenen Standard definiert hat :-)

Danke an Jens!!!

Gruß
Marcel

von Marcel A. (dl1ekm)


Lesenswert?

Jens schrieb:
> Marcel A. schrieb:
>> - in der VT100 sehe ich immer noch viele IFs... ?
> Da mußt Du noch ein Stück runterscrollen.
> An der PS/2-Verarbeitung habe ich nichts geändert (hoffentlich).
>
>> - wofür ist der "TV-Ausgang" genau?
> Dort habe ich mir debug-Ausgaben hingeschickt:
>
1
>   other:
2
>     debug.str( string("m1 not supported: "))
3
>     debug.hex( remote, 2)
4
>     debug.out( 13)
5
>
>
> Welche Hardware verwendest Du?
Die Platine von Joe G

>Ich habe mich ja beim
> Propeller-Terminal-Teil mehr am Parallax-Evaluationboard orientiert.
> Neben dem VGA-Ausgang gibt es dort noch eine Chinch-Buchse mit TV-Out.
>
>
> Marcel A. schrieb:
>> Ich brutzel das nachher mal rein und berichte :-)
> Ich habe auch an der Videoauflösung rumgespielt. Es kann also sein, das
> Dein Ausgabegerät nicht synchronisiert, in diesem Fall stellst Du in der
> VGA_HiRes_Text_010.spin die Auflösung am Besten zurück auf 640x480 (in
> VGA_1024.spin muß dann noch rows angepasst werden.)
>
Das war kein Problem - aber mein TP-Programm, wo ich mit Farbe (gemäß 
Joes Implementierung) rumgespielt habe, zeigt keine Farbe mehr.
Liegt wohl daran, dass Joe einiges anders gemacht hat.

Aber wie gesagt - die Timing-Probleme scheinen hier nicht aufzutreten.
>
> Viele Grüße,
> Jens

von Jens (Gast)


Lesenswert?

Marcel A. schrieb:
> Das liegt wahrscheinlich
> am QuellCode - Jens arbeitet in ASCII und Joe in UniCode...
Jepp. Mit UniCode kommt mein diff-Tool nicht klar. Da hab ich 
konvertiert. Ich schau aber nochmal nach, ob es auch anders geht.

> Und siehe da: Er scheint erst mal nichts mehr zu verschlucken!
Bei 115200 im Propeller? Wenn das klappt, zieh ich meine Datenrate auch 
wieder hoch :-)

> - Alles nur einfarbig - blauer Hintergrund, weiße Schrift
Dafür muß man im Propellercode noch ein bissel mehr ändern.
Bisher gibt es dort keinen Speicher für die Farbe.
Leider ist der Code schon recht unübersichtlich (und m.E. auch ungünstig 
benannt), da machen Änderungen nicht so sehr viel Spaß.

> - Es kommt vor, dass der Cursor verschwindet (hängt wahrscheinlich mit
> Steuerzeichen aus TP zusammen)
Da müßte man mal auf die debug-Ausgabe schauen. Alles was er nicht 
kennt, sollte dort auftauchen.

> - Ab und zu werden dauerhaft "!" ausgegeben...
Das klingt nach einer verschluckten seriellen Schnittstelle.

> - Editor in TP funktioniert nicht - die Eingabe ist wohl letztlich ok,
> aber die Darstellung kommt nicht hinterher - kein Scrolling, kein
> Einfügen sichtbar usw. Der Bildschirm wird nicht richtig aufgebaut.
Bei mir ließ sich TP ganz gut bedienen. Kann aber auch an 38400 <-> 
115200 liegen.

> - Scrollen klappt auch in WS nicht
WS habe ich noch nicht verwendet. Der ist mir zu krude zum Bedienen.

Marcel A. schrieb:
>> Welche Hardware verwendest Du?
> Die Platine von Joe G
Da gibt es kein TV-Out. Schade um die ungenutzten Pins.

> Liegt wohl daran, dass Joe einiges anders gemacht hat.
Ich wollte den Code lesbarer formulieren. Außerdem hab ich versucht mich 
an die Spec zu halten (Links im Code). Es kann gut sein, das nicht alles 
100%ig identisch implementiert wurde.

Aber wir wollen ja auch im nächsten Jahr noch was zum Basteln haben :-;

Viele Grüße,
Jens

von Marcel A. (dl1ekm)


Lesenswert?

Ja prima.

ich arbeite übrigens immer noch mit der CPM Version 204... Hat jemand 
mal ein neueres, laut Leo ist das ja uralt? Ich finde leider derzeit die 
SVN-Quellen nicht... wo liegen die denn aktuell?

Dann könnte ich mal versuchen, die selber zu übersetzen (oh weh...) und 
auf 57600 gehen... denn das 204er Image von Joe hat 115200.

von Jens (Gast)


Angehängte Dateien:

Lesenswert?

Marcel, vielen Dank für's Testen!

Ich hab nochmal nachgeschaut: Mea cupla.
Irgendwas hab ich am Code kaputtoptimiert :-(
Z.B. wurden Parameter nicht richtig interpretiert.

Die Farbe (ESC[xx;xxm) müsste jetzt wieder gehen. Aber immer nur für den 
kompletten Bildschirm.

2. Problem: Scrollen
Das Problem kann ich hier nachvollziehen, aber nicht so richtig 
debuggen.
Wenn ich den Debug-Output aktiviere, schmiert der Propeller ab.
Weiß jemand, welche Sequenzen der Editor von TURBO.COM beim 
Runterscrollen schickt?
Damit könnte ich gezielter suchen.
(Das Hochscrollen klappt übrigens...)

In Joe's Code wird ESC[L und ESC[M interpretiert. Das hab ich in keinem 
Standard gefunden, aber in dieser Version wieder mit reingenommen.

Die Baudrate hab ich jetzt sowohl im AVR, als auch im Propeller auf 
115200 gesetzt. Bis auf das Scrollproblem sehe ich keine Fehler.

Was noch sehr schön wäre, wenn jemand eine Idee für die Umsetzung von 
bold auf dem Propeller-Terminal hat. Bisher sieht es in der 
Linux-Konsole besser aus, als auf dem Terminal.

Außerdem hab ich noch mein ANSI-Testprogramm angehangen. Das darf gern 
erweitert werden :-)
Momentan kann es mehr als unser VT100/ANSI-Emulator.

Ich wünsche allen einen
Guten Rutsch!
Jens

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ich wünsche allen ein gesundes neues jahr!

Jens schrieb:
> In Joe's Code wird ESC[L und ESC[M interpretiert. Das hab ich in keinem
> Standard gefunden, aber in dieser Version wieder mit reingenommen.

Eine Übersicht über die gebräuchlisten Codes findet man hier [1].
Alle derzeit implementierten Codes stehen in der Doku [2] zum VT100 
Terminal.
Ein guter Test ist tatsächlich WS. Dort wird sehr intensiv Gebrauch von 
den gängisten Sequenzen gemacht. WS sollte also in jedem Fall laufen.
Einen Bufferüberlauf kann man sehr gut mit einer gesendeten Testdatei 
einer ganz bestimmten Länge testen. Das merkwürde ist. Beim ERSTEN 
Senden gibt es keine Probleme mit jeder Baudrate. Eine beliebig lange 
Datei wird fehlerfrei gesendet und schnell korrekt dargestellt. Erst 
beim zweiten Versuch tritt der Fehler auf das Zeichen "verschluckt" 
werden, übrigens dann bei jeder Baudrate. Deshalb auch mein Verdacht, an 
einer Stelle wird der Bufferzeiger flasch überschrieben.
Gruß Joe



[1] http://www-user.tu-chemnitz.de/~heha/hs/terminal/terminal.htm
[2] http://www.mikrocontroller.net/svnbrowser/avr-cp-m/trunk/manual/

von Marcel A. (dl1ekm)


Lesenswert?

So,

hier wie versprochen die Ergebnisse der Tests der letzten VT100 von 
Jens:

- FarbCode scheinen zumindest bei meinem Testprogramm ok (habe ansitest 
noch nicht probiert)
- Inversdarstellung ok - z.B. bei WS
- TP: Sieht gut aus, auch Zeile einfügen, was aber (wie erwähnt) nicht 
geht ist "runterscrollen", während raufscrollen geht (das war früher 
auch nicht besser glaube ich)
- TP: Nach Beenden von TP kann ich keine großen Buchstaben mehr eingeben 
(shift geht nicht) - daher auch kein Laufwerkswechsel möglich. 
Propeller-Reset hilft (das war aber früher auch schon so glaube ich).
- WS: sieht gut aus - aber genau wie TP kein runterscrollen. Weitere 
Tests aber nicht möglich, da WS/AVR/... beim Ankommen am unteren 
Bildschirm abstürzt

Sonstiges:
- nach wie vor kommen irgendwann nur noch "!" und sonstiger Müll als 
Phantomeingabe... da hilft auch kein Propeller-Reset (das war früher 
nicht so)
- Auch in TP "stürzt" das ganze schon mal ab - keine Reaktion, keine 
Anzeige... Nur Power off hilft (war früher auch nicht so).

Subjektive Zusammenfassung:
- Das "Verschluck-Problem", was bei mir immer am Anfang/Start auftrat, 
ist offenbar weg - somit hier offenbar deutliche Verbesserung
- Die sonstigen "früheren" Probleme (Scrollen, Shift...) sind wohl noch 
da.
- Einige Instabilitäten sind dazugekommen, meine ich (Abstürze, Dauer 
"!")

Ich würde es gerne mal mit 57600 Bd ausprobieren. Aber leider habe ich 
keinen aktuellen QuelleCode (ich arbeite mit V3.2 204).
Wo ist denn der Link geblieben oder hat jemand mal ein "aktuelles" Hex 
mit 57600 und 115200 Baud?

Danke!



P.S.:"Früher" meint Joe's V1.0

von Andreas G. (dd2ag)


Lesenswert?

Ich weiß, die Frage kommt ziemlich (zu?) spät: aber gibt es noch die 
Möglichkeit, hier über ein Forenmitglied an eine fertige, unbestückte 
Platine zu kommen? Oder sind alle Bestände schon abverkauft?

Gruß,

Andreas

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Andreas Gruttmann schrieb:
> Ich weiß, die Frage kommt ziemlich (zu?) spät: aber gibt es noch die
> Möglichkeit, hier über ein Forenmitglied an eine fertige, unbestückte
> Platine zu kommen?

Es gibt noch genau EINE unbestückte Platine (letzte Version VGA + CP/M).

Marcel A. schrieb:
> Das "Verschluck-Problem", was bei mir immer am Anfang/Start auftrat,
> ist offenbar weg

Ich habe gerade mal getestet. Das Problem liegt in der 
FullDuplexSerial.spin, es kommt zu einem Pufferüberlauf. Mal sehen ob 
ich den Fehler unproblematisch beheben kann.

Marcel A. schrieb:
> Wo ist denn der Link geblieben oder hat jemand mal ein "aktuelles" Hex
> mit 57600 und 115200 Baud?

Ich lade mal morgen die aktuelle Version hier [1] hoch.

Schönen Abend!
Joe


[1] http://www.mikrocontroller.net/svnbrowser/avr-cp-m/

von Marcel A. (dl1ekm)


Lesenswert?

> Ich lade mal morgen die aktuelle Version hier [1] hoch.

Prima. Aber da liegen ja nur die Propeller-Dateien. Wo liegen denn die 
AVR Dateien?

>
> Schönen Abend!
> Joe
>
>
> [1] http://www.mikrocontroller.net/svnbrowser/avr-cp-m/

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Marcel A. schrieb:
> Wo liegen denn die AVR Dateien?

Auf meinem Server. ;)
Leider hat DYN.COM vor ein paar Wochen meinen Hostnamen ohne Vorwarnung 
gelöscht. Der Server deshalb unter dem alten Namen nicht mehr 
erreichbar.

Die aktuelle Version habe ich mal hier angehängt. Änderungen gab es 
zuletzt nur im I2C-Treiber. Später mehr.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Leo C.
Wollen wir die aktuellen Daten mal im Mikrocontroller svn 
zusammenführen?

von Jens (Gast)


Lesenswert?

Joe G. schrieb:
> Wollen wir die aktuellen Daten mal im Mikrocontroller svn
> zusammenführen?
Da wäre ich auch dafür. Ich würde mir sogar ein Login holen, damit ich 
mal meinen Code als branch einchecken kann.

Viele Grüße,
Jens

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Jens
Ich habe nun mal deinen Code getestet. die Sequenz ESC[J (Bildschirm 
löschen) ist fehlerhaft. Außerdem produziert dein Code den gleichen 
Bufferüberlauf bei langen Datein.
Joe

von Marcel A. (dl1ekm)


Lesenswert?

Ich bin gerade dabei, mir das MakeFile für AVRCPM anzupassen. AVR Studio 
6 hat eine ganz andere Verzeichnis-Struktur bei mir angelegt...

Vorab habe ich noch mal TP und WS mit der Terminal-Ausgabe getestet.
TP läuft soweit ich sehen kann problemlos.
WS scrollt auch hier nicht richtig... Wenn man in der letzten Zeile 
ankommt, schreibt man da immer weiter (kein Scrolling), auch wenn der 
Zeilenzähler hochzählt. Letztlich stimmt das Ergebnis, aber komisch 
ausschauen tut es schon... Liegt das an meinem WS (Image von Joe)?

Gruß
Marcel

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Wollen wir die aktuellen Daten mal im Mikrocontroller svn
> zusammenführen?

Das hatten wir ja vor fast einem Jahr schonmal angedacht. Damals wollte 
ich allerdings das komplette Repository mit der ganzen History 
transferieren. Dazu hätte man ein Dump des Repos auf dem hiesigen Server 
einspielen müssen. Leider hat der Admin (Andreas Schwarz) nicht auf 
meine Anfrage geantwortet.

Jens schrieb:
> Da wäre ich auch dafür. Ich würde mir sogar ein Login holen, damit ich
> mal meinen Code als branch einchecken kann.

Das hättest Du natürlich auch auf meinem Server tun können...

Was spricht denn dagegen, das Repo auf git zu konvertieren, und dann auf 
GitHub oder einem ähnlichen Server zu installieren?

Ansonsten könnte ich den aktuellen Stand auf den mikrocontoller.net 
SVN-Server kopieren. Die avrvga-Software von Frank Zoll natürlich auch.


Das alte Repo ist jetzt erstmal hier zugänglich:
http://cloudbase.mooo.com/viewvc/avr-cpm/

von Marcel A. (dl1ekm)


Lesenswert?

Leo C. schrieb:
> Marcel A. schrieb:
>> Wo liegen denn die AVR Dateien?
>
> Auf meinem Server. ;)
> Leider hat DYN.COM vor ein paar Wochen meinen Hostnamen ohne Vorwarnung
> gelöscht. Der Server deshalb unter dem alten Namen nicht mehr
> erreichbar.
>
> Die aktuelle Version habe ich mal hier angehängt. Änderungen gab es
> zuletzt nur im I2C-Treiber. Später mehr.


Meldet sich als
CPM on an AVR, v3.2 r216M
Ist das richtig? Im ZIP steht 221...

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Das VT100 Terminalprogramm sollte nun mit 115200 fehlerfei 
funktionieren. Es gab im Test (auch mit sehr langen Textdatein) keine 
Fehler mehr. Die FullDuplexSeriel.spin. war noch fehlerhaft. Außerdem 
habe ich noch die Initialisierung etwas geändert. Ich habe alle 
Änderungen im SVN hochgeladen.


Marcel A. schrieb:
> Meldet sich als
> CPM on an AVR, v3.2 r216M

Ist wohl korrekt, steht so in der config.asm

Leo C. schrieb:
> Ansonsten könnte ich den aktuellen Stand auf den mikrocontoller.net
> SVN-Server kopieren. Die avrvga-Software von Frank Zoll natürlich auch.

Das wird wohl die beste Lösung sein.

von Leo C. (rapid)


Lesenswert?

Marcel A. schrieb:
> CPM on an AVR, v3.2 r216M
> Ist das richtig?

Nicht ganz.

> Im ZIP steht 221...

Die Datei snvrev.inc wurde seit r216 nicht mehr eingecheckt (Fehler 
meinerseits). Die Datei sollte bei jedem Build neu erzeugt werden (Das 
Programm dazu findet man hier: http://www.compuphase.com/svnrev.htm).
Allerdings macht das nur dann Sinn, wenn man mit einer aus dem SVN 
ausgecheckten Arbeitskopie arbeitet.

Hier die letzten Änderungen, die aller in dem geposteten Zip-File sind:
1
 r221 | leo | 2013-11-16 14:14:02 +0100 (Sa, 16. Nov 2013) | 1 Zeile
2
Geänderte Pfade:
3
   D /avrcpm/trunk/avr/adc.asm
4
5
* fixed previous commit
6
------------------------------------------------------------------------
7
r220 | leo | 2013-11-16 14:03:47 +0100 (Sa, 16. Nov 2013) | 6 Zeilen
8
Geänderte Pfade:
9
   A /avrcpm/trunk/avr/adc.asm
10
   M /avrcpm/trunk/avr/config.inc
11
   M /avrcpm/trunk/avr/i2c.asm
12
   M /avrcpm/trunk/avr/init.asm
13
   M /avrcpm/trunk/avr/svnrev.inc
14
   M /avrcpm/trunk/avr/sw-uart.asm
15
   M /avrcpm/trunk/avr/timer.asm
16
   M /avrcpm/trunk/avr/utils.asm
17
   M /avrcpm/trunk/avr/virt_ports.asm
18
19
* I2C driver enhancements:
20
  - Doesn't hang on bus errors (Misbehaving slave).
21
  - Returns meaningful status codes.
22
  - Returns number of bytes actually transmitted/received.
23
  - config option 'I2C_STATE_DEBUG'
24
* 'MEMDUMP_DEBUG'
25
------------------------------------------------------------------------
26
r219 | leo | 2013-05-09 12:43:53 +0200 (Do, 09. Mai 2013) | 1 Zeile
27
Geänderte Pfade:
28
   A /avrcpm/tags/3.2.1 (von /avrcpm/trunk:218)
29
30
Tag for Version 3.2.1 (IPL.MAC bugfix)
31
------------------------------------------------------------------------
32
r218 | leo | 2013-05-09 12:40:18 +0200 (Do, 09. Mai 2013) | 3 Zeilen
33
Geänderte Pfade:
34
   M /avrcpm/trunk/cpm/IPL.MAC
35
36
* cpm/IPL.MAC
37
  - local definition for cr/lf
38
  - use port 1 (UARTDR) instead of port 2 (deprecated) for console output.
39
------------------------------------------------------------------------
40
r217 | leo | 2013-05-01 20:57:11 +0200 (Mi, 01. Mai 2013) | 1 Zeile
41
Geänderte Pfade:
42
   A /avrcpm/tags/3.2 (von /avrcpm/trunk:216)
43
44
Tag for Version 3.2
45
------------------------------------------------------------------------
46
r216 | leo | 2013-05-01 20:47:41 +0200 (Mi, 01. Mai 2013) | 6 Zeilen
47
Geänderte Pfade:
48
   M /avrcpm/trunk/avr/Makefile
49
   M /avrcpm/trunk/avr/Z80int-jmp.asm
50
   M /avrcpm/trunk/avr/avrcpm.asm
51
   M /avrcpm/trunk/avr/config.inc
52
   M /avrcpm/trunk/avr/dsk_fat16.asm
53
   M /avrcpm/trunk/avr/dsk_fsys.asm
54
   M /avrcpm/trunk/avr/dsk_mgr.asm
55
   M /avrcpm/trunk/avr/init.asm
56
   M /avrcpm/trunk/avr/macros.inc
57
   M /avrcpm/trunk/avr/svnrev.inc
58
   M /avrcpm/trunk/avr/utils.asm
59
   M /avrcpm/trunk/avr/virt_ports.asm
60
   M /avrcpm/trunk/cpm/BIOS.MAC
61
   M /avrcpm/trunk/cpm/CFGACPM.LIB
62
63
* cpm/BIOS.MAC
64
  - conin/const: Use function 'uartstat' (port 3) instead of 'constat' (port 0). constat will be removed soon.
65
* avr/virt_ports.asm
66
  - Mark 'constat' as deprecated.
67
* avr/*
68
  - More lds/sts --> ldd/std changes.
69
------------------------------------------------------------------------

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Ich wünsche allen ein gesundes neues jahr!

Diesem Wunsch schließe ich mich gerne an, auch wenn er für mich gestern 
zu spät kam. Mir gings nämlich gar nicht gut. Ich konnte mich kaum auf 
dem Stuhl halten. An exzessivem Feiern kann es aber nicht gelegen 
haben...

Seit heute wirkt der Wunsch aber. Danke Joe.


Jens schrieb:
> Weiß jemand, welche Sequenzen der Editor von TURBO.COM beim
> Runterscrollen schickt?
> Damit könnte ich gezielter suchen.

Auch wenn die Frage inzwischen erledigt ist.
Mit TINST.COM kann man nachsehen, wie das Terminal configuriert ist.
Das hatte ich gestern gemacht, aber nicht mehr geschafft, das Ergebnis 
abzuschicken.
1
Terminal type: ANSI 
2
Send an initialization string to the terminal? (Y/N)?  N 
3
Send a reset string to the terminal (Y/N)?  Y 
4
Command: <ESC> [ 0 m   (27 91 48 109)  
5
CURSOR LEAD-IN command:  <ESC> [   (27 91)  
6
CURSOR POSITIONING COMMAND to send between line and column:    ;   (59)  
7
CURSOR POSITIONING COMMAND to send after both line and column: H   (72)  
8
Column first (Y/N)?  N 
9
OFFSET to add to LINE:   1 
10
OFFSET to add to COLUMN: 1 
11
Binary address (Y/N)?  N 
12
Number of ASCII digits (2 or 3):  2 
13
CLEAR SCREEN command:  <ESC> [ 2 J   (27 91 50 74)  
14
Does CLEAR SCREEN also HOME cursor (Y/N)?  N 
15
HOME command:  <ESC> [ H   (27 91 72)  
16
DELETE LINE command:  <ESC> [ 1 M   (27 91 49 77)  
17
INSERT LINE command:  <ESC> [ 1 L   (27 91 49 76)  
18
ERASE TO END OF LINE command: <ESC> [ K   (27 91 75)  
19
START HIGHLIGHTING command:   <ESC> [ 1 m   (27 91 49 109)  
20
END HIGHLIGHTING command:     <ESC> [ 0 m   (27 91 48 109)  
21
Number of rows (lines) on your screen:  24 
22
Number of columns on your screen:       80 
23
Delay after CURSOR ADDRESS (0-255 ms):                      0 
24
Delay after CLEAR, DELETE and INSERT (0-255 ms):            0 
25
Delay after ERASE TO END OF LINE and HIGHLIGHT (0-255 ms):  0 
26
Is this definition correct? (Y/N)?  N


> Was noch sehr schön wäre, wenn jemand eine Idee für die Umsetzung von
> bold auf dem Propeller-Terminal hat. Bisher sieht es in der
> Linux-Konsole besser aus, als auf dem Terminal.

Dazu müßte man wohl einen 2. Font haben. Keine Ahnung, ob das möglich 
ist.

von Marcel A. (dl1ekm)


Lesenswert?

Vergisst das... WS ist noch auf 40/43 Zeilen eingestellt - das passt 
natürlich nicht zu 25 Zeilen im Terminal...

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Das Terminialprogramm hat doch 40 Zeilen. Außerdem kann ja WS auch auf 
eine andere Zeilenzahl konfiguriert werden. Installationen gibt es hier:
Beitrag "Re: CP/M auf ATmega88"
Beitrag "Re: CP/M auf ATmega88"

Jens schrieb:
> Was noch sehr schön wäre, wenn jemand eine Idee für die Umsetzung von
> bold auf dem Propeller-Terminal hat. Bisher sieht es in der
> Linux-Konsole besser aus, als auf dem Terminal.

Dazu müßte in der VGA_HiRes_Text_010.spin ein zweiter Zeichensatz 
implementiert werden. Wie das geht kann hier: VGA_HiRes_Text.spin 
entnommen werden, oder wie Leo C. zu sagen pflegt: Freiwillige vor.

: Bearbeitet durch User
von Marcel A. (dl1ekm)


Lesenswert?

Joe G. schrieb:
> Das Terminialprogramm hat doch 40 Zeilen.

Richtig. Daran hab ich den Fehler ja auch erkannt :-)

> Außerdem kann ja WS auch auf
> eine andere Zeilenzahl konfiguriert werden. Installationen gibt es hier:
> Beitrag "Re: CP/M auf ATmega88"
> Beitrag "Re: CP/M auf ATmega88"
>
> Jens schrieb:
>> Was noch sehr schön wäre, wenn jemand eine Idee für die Umsetzung von
>> bold auf dem Propeller-Terminal hat. Bisher sieht es in der
>> Linux-Konsole besser aus, als auf dem Terminal.
>
> Dazu müßte in der VGA_HiRes_Text_010.spin ein zweiter Zeichensatz
> implementiert werden. Wie das geht kann hier: VGA_HiRes_Text.spin
> entnommen werden, oder wie Leo C. zu sagen pflegt: Freiwillige vor.


Habe jetzt die neue VT100 SPIN drin - WS läuft, aber TP scrolled immer 
noch nicht richtig. Timing scheint ok zu sein - weitere Tests morgen.
Besuch vor der Tür.

von Marcel A. (dl1ekm)


Lesenswert?

Guten Morgen zusammen,

so, hier die Ergebnisse meiner Tests.

Versionen:
AVRCPM "221"
VGA: Rev 85

Unter Windows/Teraterm (Terminal, 40 Zeilen):
- WS ok (da müsste ich mir evtl. die Tastatuscodes noch anpassen, das 
ist ja an sich ein buchfüllendes Thema)
- TP ok (scrollen etc.). Der Code wird in der einen Version (DISK B) 
leider invertiert dargestellt... In der Version  DISK F ist das wie 
bekannt besser mit Gelb auf Schwarz und weißen Menüs. Leide kann man ja 
nicht auslesen, WELCHEN der 32 Screen-Emulationen hier verwendet wird...

Unter Propeller:
- keine Timingprobleme oder Müllzeichen festgestellt -> SUPER!
- WS ok (siehe oben, auch scrollen)
- TP "fast" ok: Auch hier die inverse Darstellung wie im Bild (DISK B) 
und eine Darstellung ohne Attribute mit DISK F (da der Propeller ja wie 
beschrieben wohl nur 2 Farben + Invers unterstützt). Ich habe noch keine 
Option gefunden, dass der Editor den Text dann "flach" darstellt ohne 
Attribute)
- ABER: Scrollen nach unten klappt nicht (beide Versionen) - man sieht 
das auf dem Bild - die untere Zeile wird immer mit der aktuellen Zeile 
gefüllt. aber der Bildschirm/Text rutscht nicht rauf. Gleiches 
Verhalten, wenn man die Steuercodes für ScrollDown drückt. ScrollUp geht 
dann wieder.
- Manchmal (nicht wirklich reproduzierbar) akzeptiert das System nach 
dem Verlassen von TP oder WS die shift-Taste nicht mehr. Vermutlich 
liegt das an irgendwelchen Steuercodes. Propeller-Reset hilft.

Ich bin mir nicht sicher, ob Scrollen früher mal geklappt hat. Glaube 
aber nicht.

So, das wars erst mal von der Front :-)

Gruß
Marcel

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Wer mag, kann nun auch die deutschen Umlaute ö,ä,ü und ß verwenden. Dazu 
muß in der VGA_1024.spin der deutsche Zeichensatz geladen werden. Leider 
ist in diesem Fall WS oder TP noch nicht richtig zu benutzen, da hier im 
deutschen Zeichensatz noch die entsprechenden Standardzeichen 
eingetragen werden müssen (macht etwas Arbeit).

@Marcel
Vielen Dank für den Test!
Zu Invers oder Bold hatte ich ja schon was gesagt, hier müßte der 
Zeichensatz implementiert werden.

In der TINST.COM werden die Steuerkommandos für das Terminal und auch 
die Tastatur festgelegt. So habe ich z.B. für das "Start highlighting" 
den Code ESC[7m (invers) eingetragen, "Bold" gibt es ja noch nicht. 
Weiterhin sind dort die Editorkommandos festgelegt. Wenn also eine ESC 
Sequenz verwendet wird, die bei uns noch nicht implementiert ist, dann 
geht die Ausführung schief. Beim schnellen Überfliegen habe ich z.B. 
ESC[H und ESC[f (Cursor home) entdeckt. Diese Codes sind noch nicht 
implementiert (muß ich noch nachtragen).

von Jens (Gast)


Lesenswert?

Joe G. schrieb:
> Eine Übersicht über die gebräuchlisten Codes findet man hier [1].
Ok. Es gibt sicher hübschere Übersichten, aber lass uns die von heha 
verwenden.

Marcel A. schrieb:
> TP: Nach Beenden von TP kann ich keine großen Buchstaben mehr eingeben
> (shift geht nicht) - daher auch kein Laufwerkswechsel möglich.
Das Problem kann ich nicht nachvollziehen.

> nach wie vor kommen irgendwann nur noch "!" und sonstiger Müll als
> Phantomeingabe...
Dieses Problem kann ich auch nicht nachvollziehen.

Von wo kommen Deine Eingaben? Vielleicht gibt es Unregelmäßigkeiten beim 
PS/2-Protokoll?

Joe G. schrieb:
> @Jens
> Ich habe nun mal deinen Code getestet. die Sequenz ESC[J (Bildschirm
> löschen) ist fehlerhaft.
Inwiefern?
Es gibt einen Parameter für ESC[J:
1
ESC[J oder ESC[0J  Löschen vom Kursor nach rechts und bis zum Bildende
2
ESC[1J             Löschen vom Bildanfang und von links bis zum Kursor
3
ESC[2J             Löschen des Bildschirms
Bei meinen Tests hat das hervorragend funktioniert.

> Außerdem produziert dein Code den gleichen
> Bufferüberlauf bei langen Datein.
Kein Wunder, ich verwende ja auch die unveränderte 
FullDuplexSerial.spin.

Joe G. schrieb:
> Ich habe alle
> Änderungen im SVN hochgeladen.
Dummerweise kann man wegen der komischen Dateikodierung von den 
wichtigsten Dateien kein Diff machen :-(
Als Beispiel siehe hier:
http://www.mikrocontroller.net/svnbrowser/avr-cp-m/trunk/vga/VT100_VGA.spin?r1=86&r2=88

Leo C. schrieb:
> Mit TINST.COM kann man nachsehen, wie das Terminal configuriert ist.
Ah. TINST hatte ich noch nicht ausprobiert.
Wobei zum Scrollen ja nichts weiter drinsteht. Immerhin kann man die 
Markierung auf invers konfigurieren, bis es einen bold-Font gibt.

Joe G. schrieb:
> Das Terminialprogramm hat doch 40 Zeilen
Deins vielleicht. Ich hab mir noch ein paar weitere VGA-Modi (80x32 und 
80x28) definiert, damit die Schrift nicht so gequetscht aussieht.

Joe G. schrieb:
> Beim schnellen Überfliegen habe ich z.B.
> ESC[H und ESC[f (Cursor home) entdeckt. Diese Codes sind noch nicht
> implementiert (muß ich noch nachtragen).
In meinem Code sind sie drin. Auch das Nachtragen geht dort leichter...

Viele Grüße,
Jens

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Der Editor von Turbopascal sollte nun gehen. Es gab noch einen Bug bei 
ESC[M.
@Jens wenn du diesen Fehler übernommen hattest, bitte die Korrektur 
übernehmen.


Jens schrieb:
> Dummerweise kann man wegen der komischen Dateikodierung von den
> wichtigsten Dateien kein Diff machen :-(

geht doch ?
http://www.mikrocontroller.net/svnbrowser/avr-cp-m/trunk/vga/VGA_1024.spin?r1=87&r2=90

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Jens schrieb:
> Dummerweise kann man wegen der komischen Dateikodierung von den
> wichtigsten Dateien kein Diff machen :-(
> Als Beispiel siehe hier:
> 
http://www.mikrocontroller.net/svnbrowser/avr-cp-m/trunk/vga/VT100_VGA.spin?r1=86&r2=88

An der Kodierung scheints nicht zu liegen. Imho verwendet man für sowas 
aber sowieso nicht das viewvc-Provisorium, sondern einen anständigen 
SVN-Clienten mit eingebautem oder externem Diff-Tool. Unter Windows z.B. 
Tortoise SVN (s. Anhang für mitgeliefertes Diff). Auch Meld 
(http://meldmerge.org/) hat keine Probleme mit utf-16.

von Marcel A. (dl1ekm)


Lesenswert?

> Marcel A. schrieb:
>> TP: Nach Beenden von TP kann ich keine großen Buchstaben mehr eingeben
>> (shift geht nicht) - daher auch kein Laufwerkswechsel möglich.
> Das Problem kann ich nicht nachvollziehen.
Passiert(e) ab und zu beim Beenden von TP - ist aber nicht schlimm.
>
>> nach wie vor kommen irgendwann nur noch "!" und sonstiger Müll als
>> Phantomeingabe...
> Dieses Problem kann ich auch nicht nachvollziehen.
Hat sich ja inzwischen erledigt.

von Marcel A. (dl1ekm)


Lesenswert?

So, habe gerade die Rev 91 der VT100.SPIN getestet.
Hatte mir erst mal eine IDE für den Propeller unter Linux installiert - 
war es leid, immer zum anderen PC zu rennen.

Was soll ich sagen: Der Editor läuft unter TP! SUPER!


Folgendes habe ich noch:
- Ab und zu (manchmal reproduzierbar wenn ich den TP-Editor verlasse und 
auf die DOS-Ebene gehe) geht shift nicht mehr. Wenn aber nur ich das 
Problem habe - egal.
- Ab und zu stehen merkwürdige "@" im Quelltext/Display. Die 
verschwinden aber beim scrollen und sind nicht im File enthalten - auch 
eher geringes Problem
- Wer verrät mir, wie ich in TP/TPINST einstelle, dass der Quelltext 
nicht invertiert dargestellt wird (siehe Bild in einem der letzten 
Posts). Irgendwie muss das gehen, denn eine andere TP-Version macht das 
nicht (die schreibt im Terminal aber auch gelben Text auf schwarz und 
weiße Menüs), die erscheint im Propeller überall grün auf schwarz

@Jens: Aus dem Aufbau deiner Farb-Testroutine am Ende von ansitest.pas 
vermute ich, dass die nur für Terminalbetrieb gedacht ist, da sie ja 
alle Kombinationen "durchrattert" und das daher auf dem Probeller (der 
kennt die Attribute ja nur für den ganzen Bildschirm) dann mit weißer 
Schrift auf weißem Hintergrund endet? Propeller-Reset hilft :-) Habe mal 
ein paar readln eingebaut.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

@alle
Um mit einem "Bold" Zeichensatz zu arbeiten, müßte die 
"Inversdarstellung" rausgenommen werden. Es gibt ja nur 8 Bit für jedes 
Zeichen. Mit dem 8 Bit (derzeit für invers zuständig) könnte man nun auf 
den zweiten Zeichensatz umschalten. Was meit ihr, lieber "invers" oder 
lieber "bold"?
Wenn "bold" wie sollten wir den Zeichensatz pixeln? In der angehängten 
Quelle habe ich dazu alles vorbereitet. Mit der Sequenz ESC[7m schaltet 
man nun auf den zweiten Zeichensatz um. Da ich den ersten Zeichensatz 
nur umkopiert habe, ist die Darstellung natürlich noch identisch. Hier 
müßte nun die Arbeit beginnen. Es sind die drei Blöcke von $80 bis $F8 
die bearbeitet werden müssen.


Marcel A. schrieb:
> - Ab und zu (manchmal reproduzierbar wenn ich den TP-Editor verlasse und
> auf die DOS-Ebene gehe) geht shift nicht mehr. Wenn aber nur ich das
> Problem habe - egal.

Das schau im mir mal an.

Marcel A. schrieb:
> Wer verrät mir, wie ich in TP/TPINST einstelle, dass der Quelltext
> nicht invertiert dargestellt wird

Bei TINST.COM in der Terminalkonfiguration VT100 das "Start 
highlighting" abschalten, also ESC[7m rausnehmen.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Leo C. schrieb:
>> Ansonsten könnte ich den aktuellen Stand auf den mikrocontoller.net
>> SVN-Server kopieren. Die avrvga-Software von Frank Zoll natürlich auch.
>
> Das wird wohl die beste Lösung sein.

Da sich mein Vorschlag, das Repository auf Git umzustellen, leider nicht 
durchgesetzt hat, ist die AVR-CP/M Software ab sofort auf
http://www.mikrocontroller.net/svnbrowser/avr-cp-m/
bzw. svn://mikrocontroller.net/avr-cp-m
zu finden.

Die Historie ist bis auf weiteres noch hier zu erreichen:
http://cloudbase.mooo.com/viewvc/avr-cpm (Browser)
bzw. http://cloudbase.mooo.com/svn/avr-cpm (SVN-Client)

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Anbei etwas zum Testen. Die ESC-Sequenz "Invers" schaltet nun auf einen 
anderen Zeichensatz. In TP an den Menübuchstaben zu erkennen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

VT100-Terminal

Die neue Version ist eingecheckt. Der Nutzer kann nun zwischen drei 
Varianten auswählen.

1. Zeichensatz mit deutschen Umlauten
2. Zeichensatz mit inverser Darstellung
3. zwei Zeichensätze

Die Auswahl erfolgt in der VGA_1024.spin

OBJ
' vga : "vga_Hires_Text_German"    'with German letters ä,Ä,ö,Ö,ü,Ü,ß
' vga : "vga_Hires_Text_Invers"    'with inverse letters
 vga : "vga_Hires_Text_Double"    'with second character font

Wer es in Betrieb testen möchte, kann mittels der Tastenkombination 
"Alt+i" den aktuellen Zeichesatz umschalten.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Wir (Dank an Leo C. für die Hinweise) haben mal ein kleines RAM-Modul 
für das CP/M-System entworfen. Es hat die folgenden technischen Daten:
- Softwarekompatibel zum bisherigen System,
- 3.3V oder 5V,
- 512K SRAM (verfügbar),
- in 64K Bänken linear adressierbar,
- steckbar DIL-18 polig
Was meint ihr? Würde damit das CP/M-System für potentielle Interessenten 
lukrativer?
Gruß Joe

von Marcel A. (dl1ekm)


Lesenswert?

Was ist denn der Vorteil/Unterschied zu dem RAM-Baustein, der bisher auf 
deinem Board verbaut ist?

von Jens (Gast)


Lesenswert?

Marcel A. schrieb:
> Hatte mir erst mal eine IDE für den Propeller unter Linux installiert -
> war es leid, immer zum anderen PC zu rennen.
Hast Du da mal einen Link?
Ich würde den Propeller auch viel lieber unter Linux programmieren.

Marcel A. schrieb:
> @Jens: Aus dem Aufbau deiner Farb-Testroutine am Ende von ansitest.pas
> vermute ich, dass die nur für Terminalbetrieb gedacht ist, da sie ja
> alle Kombinationen "durchrattert" und das daher auf dem Probeller (der
> kennt die Attribute ja nur für den ganzen Bildschirm) dann mit weißer
> Schrift auf weißem Hintergrund endet? Propeller-Reset hilft :-) Habe mal
> ein paar readln eingebaut.
Ich habe sie zumindest im Terminal getestet. Vielleicht schaffen wir es 
ja im Propeller noch einen Attribute/Farbspeicher pro Zeichen zu 
implementieren. Schade, das sich der Propeller nicht so richtig gut 
debuggen läßt.

Joe G. schrieb:
> lieber "invers" oder
> lieber "bold"?
Lieber bold. Aber noch lieber Beides :-)
Deutsche Umlaute halte ich dagegen für überflüssig. Damit fängt man sich 
die Zeichensatzprobleme von MS-DOS ein.

Joe G. schrieb:
> Was meint ihr? Würde damit das CP/M-System für potentielle Interessenten
> lukrativer?
Ich finde nein. Welche Software läuft damit, die vorher nicht lief?

Bei meiner SIMM-Variante lassen sich Module von 256kB bis 4MB verwenden. 
Aber selbst der 256kB-Riegel wird nicht vollständig genutzt.

Viele Grüße
Jens

von Leo C. (rapid)


Lesenswert?

Jens schrieb:
> Hast Du da mal einen Link?
> Ich würde den Propeller auch viel lieber unter Linux programmieren.

Such mal nach "Brad's Spin Tool", bzw. BST von Brad Campell.

Marcel A. schrieb:
> Was ist denn der Vorteil/Unterschied zu dem RAM-Baustein, der bisher auf
> deinem Board verbaut ist?

Manche Leute mögen DRAMs nicht. Oder haben Beschaffungsprobleme, oder 
können/wollen die Teile nicht löten.

Jens schrieb:
> Joe G. schrieb:
>> Was meint ihr? Würde damit das CP/M-System für potentielle Interessenten
>> lukrativer?
> Ich finde nein. Welche Software läuft damit, die vorher nicht lief?
>
> Bei meiner SIMM-Variante lassen sich Module von 256kB bis 4MB verwenden.
> Aber selbst der 256kB-Riegel wird nicht vollständig genutzt.

Mit der RAM-Disk kann man bis 4MB nutzen. Leider ist sie sehr langsam.

Deutlich schneller sollte es gehen, wenn man bei den obersten drei 
Adressbits auf Multiplexing verzichtet. Mit etwas geändertem RAM-Treiber 
bekommt man dann vielleicht auch mehrere RAM-Banks (z.B. für CP/M 3) mit 
ausreichender Geschwindigkeit hin.

von Jens (Gast)


Lesenswert?

Leo C. schrieb:
> Such mal nach "Brad's Spin Tool", bzw. BST von Brad Campell.
Danke, das sieht gut aus.
Leider scheint die Mac-Variante bei mir nicht zu laufen. Das wäre das 
i-Tüpfelchen gewesen :-)
Dann probiere ich als nächstes die Linux-Version aus.

> Manche Leute mögen DRAMs nicht. Oder haben Beschaffungsprobleme, oder
> können/wollen die Teile nicht löten.
Ok. Da hatte ich Euch falsch verstanden. Es soll also eine weitere 
Speichervariante darstellen.
Prinzipiell ist die Idee gut, aktuell beschaffbare Bausteine zu 
verwenden.
Mein Bedarf ist zwar gedeckt, aber ich bin ja auch nicht der Einzige ;-)

> Mit der RAM-Disk kann man bis 4MB nutzen.
Ja, aber wozu?
Die SD-Karte geht ja schon wesentlich schneller als dazumal die 
Diskettenlaufwerke. RAM-Disk wurde ja zur Steigerung der 
Zugriffsgeschwindigkeit genutzt. Bei den damaligen RAM-Preisen war aber 
die Verbreitung eher gering. Daher gibt es auch nicht allzuviel 
Software, die das sinnvoll nutzen kann.

Also eine SRAM-Variante ja, aber übermäßig viel davon (>256k), halte ich 
nicht für sinnvoll.

Viele Grüße,
Jens

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Die RAM-Variante soll eine kleine Hilfe sein.
Es können derzeit verfügbare IC's verwendet werden oder eigene DRAM's 
auf einer entsprechenden Adapterkarte. Somit ist keine Layoutänderung 
nötig.

Jens schrieb:
> ielleicht schaffen wir es
> ja im Propeller noch einen Attribute/Farbspeicher pro Zeichen zu
> implementieren.

30 Zeilen mit 80 Zeichen würden wir mit dem verfügbaren Speicher gerade 
noch hinbekommen. Dann ist aber das Ende der Fahnenstange erreicht.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Es gibt nun eine neue VT100 Variante.

- 80 Zeichen x 30 Zeilen
- Vordergrund- und Hintergrundfarbe für jedes Zeichen einzeln 
einstellbar
- Invers ESC[7m
- Fett ein (helle Schrift) ESC[1m
- Fett aus (dunkle Schrift) ESC[22m

WS und TP müssen für diese Attribute natürlich angepaßt werden. 
Selbstverständlich auch für Bildschirmauflösung 80x30.

http://www.mikrocontroller.net/svnbrowser/avr-cp-m/trunk/vga_color/

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

CP/M Duino

- Boardgröße Arduino Mega
- 512 MB SRAM (verfügbar)
- SD Card (verfügbarer Halter)
- RTC mit Stützbatterie
- 8 Bit Porterweiterung
- 2 ADC
- VT-100 Shield steckbar

Vielleicht interessiert sich der eine oder andere „Arduino Jünger“ ja 
für eine solche Variante. Der Arduino bleibt dabei voll erhalten, 
bekommt sogar noch 512 MB RAM und über das VT-100 Shield eine 
VGA-Ausgabe und eine PS2 Tastatur.

von Marcel A. (dl1ekm)


Lesenswert?

Joe G. schrieb:
> CP/M Duino
>
> - Boardgröße Arduino Mega
D.h. da steckt letztlich ein Arduina-Kompatibles Design hinter? Die IDE 
würde einen normalen Arduina-"irgendwas" erkennen?

> - 512 MB SRAM (verfügbar)
> - SD Card (verfügbarer Halter)
> - RTC mit Stützbatterie
> - 8 Bit Porterweiterung
> - 2 ADC
> - VT-100 Shield steckbar
>
> Vielleicht interessiert sich der eine oder andere „Arduino Jünger“ ja
> für eine solche Variante. Der Arduino bleibt dabei voll erhalten,
> bekommt sogar noch 512 MB RAM und über das VT-100 Shield eine
> VGA-Ausgabe und eine PS2 Tastatur.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Das Design ist annähernd Kompatibel. Wenn der Arduino Bootloader 
installiert
ist, sollte die IDE auch laufen. Sinnvoll ist jedoch der CP/M Bootloader 
;-)

von Leo (Gast)


Lesenswert?

Hallo Joe.

Joe G. schrieb:
> - 512 MB SRAM (verfügbar)
> - SD Card (verfügbarer Halter)
> - RTC mit Stützbatterie
> - 8 Bit Porterweiterung

Ich dachte, Du wolltest ein "Shield" mit ungefähr den oben genannten 
Komponenten bauen, damit Arduino-Besitzer auf CP/M "upgraden" können.

Wo siehst Du den Vorteil der Komplettlösung im Arduino-Format?

Joe G. schrieb:
> Sinnvoll ist jedoch der CP/M Bootloader ;-)

Könnte mir vorstellen, daß man ein CP/M-Image für den Arduino-Bootloader 
gernerieren kann.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo Leo,

das war die ursprüngliche Idee. Dummerweise sind beim Arduino nicht alle 
für unser CP/M-System benötigten Pins rausgeführt (siehe Anlage). Der 
Arduino USB-Port liegt direkt auf AVR_TX /AVR_RX also für uns so auch 
nicht zu gebrauchen. Der Propeller könnte in der Original Arduino 
Konfiguration auch nicht programmiert werden. So entstand der nun 
vorliegende Vorschlag.
1. Ein Arduino Board welches Arduino und CP/M kompatibel ist.
2. Ein VT-100 Shield

Die Idee mit dem CP/M–Image für den Arduino Bootloader ist natürlich 
sehr gut. Dazu müsste allerdings auch der Arduino Bootloader auf die 
Rx,Tx Pins beim CP/M angepasst werden.

Warum das ganze?
Ich sehe dabei zwei Aspekte. Der CP/M-Kenner kann sich ohne viel Aufwand 
mit den Arduino beschäftigen und die Arduino-Jugend bekommt ohne viel 
Aufwand ein komplettes Betriebssystem mit allen verfügbaren Programmen, 
wie C, Pascal, Forth, Wordstar… sowie ein Arduino Board mit 512 KB SRam, 
SD-Card, RTC, I2C usw. + VGA.

: Bearbeitet durch User
von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Neben der reinen AVR Lösung hat die Nutzung einer echten Z80 CPU auch 
seinen Charme. Recherchiert man mal nach aktuellen Lösungen, so 
kristallisieren sich unabhängig voneinander immer ähnliche Konzepte 
heraus.

1. moderne Z80 CPU (z.B. Z8L180 oder Z8S180) 3.3V, 33 MHz
2. 128k – 512K SRAM
3. kein EPROM oder EEPROM
4. Bootvorgang über AVR
5. SD-Card statt Diskette

Beispiele dazu sind hier zu finden:
http://www.shaels.net/index.php/mini80
http://forums.parallax.com/showthread.php/148944-Propeller-Z80-CPM-hybrid
http://hive-project.de/board/viewtopic.php?f=15&t=955

Den letzten Link habe ich für weitere Überlegungen aufgegriffen. Micha 
hat dazu ein sehr gutes minimales Hardwarekonzept (sowie eine 
Softwarebasis) auf AVR-Basis entwickelt. Dieses Konzept habe ich nun 
aufgegriffen und etwas erweitert um ein Maximum an Softwaremodulen 
unseres Systems weiter zu nutzen. Grob skizziert würde es etwa so 
aussehen:
1. AVR übernimmt Buskontrolle
2. AVR initialisiert den RAM und die SD-Card (Kontrolle über V24 / 
Terminal)
3. AVR läd BIOS von SD-Card und schreibt es in den RAM
4. AVR übergibt CRT Kanal an Z80 SIO
5. AVR initialisiert Soft I2C mit RTC
6. AVR übergibt Bus an Z80
7. Z80 bootet CP/M
8. AVR stellt IN(), OUT() Funktionen für Z80 zur Verfügung (virtuelle 
SIO, PIO)

Mir gefällt die Idee persönlich so gut, dass ich sie für mich aufbauen 
werde. Konzeptionell sind dazu folgende Schritte geplant.
1. minimaler Hardwareentwurf (siehe Anhang) als Entwicklungsbasis
2. Portierung der Software sowie Integration von Hardwareverbesserungen, 
-erweiterungen
3. finale Version mit integriertem VT-100 Terminal auf bisheriger Basis
4. CP/M Duino mit echtem Z80 (Z180) ??

Es gibt sowohl im CP/M Forum als auch im HIVE Forum Interessenten. Auch 
Micha als ursprünglicher Entwickler der Lösung ist weiter interessiert. 
Es sollte doch möglich sein, die Interessenten aus drei Foren in einem 
gemeinsamen Projekt zu bündeln.

Viel Text zu einer kurzen Frage.
Wer hat Interesse an diesem Projekt sowie zunächst an der Stufe 1 und 
Stufe 2 ? Schaltung und Layout sind erstellt und könnten kurzfristig für 
weitere Diskussion dienen.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> Neben der reinen AVR Lösung hat die Nutzung einer echten Z80 CPU auch
> seinen Charme.

Ach. ;-)

> 4. Bootvorgang über AVR

Da gibts noch Alternativen. Letztes Jahr hatte ich mal was mit stm32 
angfangen.

> 2. AVR initialisiert den RAM und die SD-Card (Kontrolle über V24 /
> Terminal)
> 3. AVR läd BIOS von SD-Card und schreibt es in den RAM
> 4. AVR übergibt CRT Kanal an Z80 SIO

Die Umschalter würde ich einfach weglassen. Die Consolenschnittstelle 
kann durch den I/O-Controller einfach durchgeschleift werden. Die beiden 
Z180-UARTs stehen dann als weitere Schnittstellen zur Verfügung.

> 5. AVR initialisiert Soft I2C mit RTC

RTC ist im STM32 bereits eingebaut.

> Mir gefällt die Idee persönlich so gut, dass ich sie für mich aufbauen
> werde. Konzeptionell sind dazu folgende Schritte geplant.
> 1. minimaler Hardwareentwurf (siehe Anhang) als Entwicklungsbasis

Ist (noch) nicht minimal. ;)

> 4. CP/M Duino mit echtem Z80 (Z180) ??

Ach, dazu wollte ich ja auch noch was schreiben.

> Wer hat Interesse an diesem Projekt sowie zunächst an der Stufe 1 und
> Stufe 2 ? Schaltung und Layout sind erstellt und könnten kurzfristig für
> weitere Diskussion dienen.

Interessieren tuts mich schon. Aber nicht so, daß ich eine Platine haben 
wollen würde.

Noch ein paar Worte zu meiner STM32–Variante.

- Den HD64180 hatte ich schon. Der läuft nur mit 5V.
- STM32 I/Os sind 5V-tolerant.
- STM32F1 mit vielen Pins sind billiger als AVR.
- Durch die vielen I/O-Pins kann alle denkbare Peripherie ohne weitere
  ICs angeschlossen werden.
- Ein STM32VLDISCOVERY hatte ich schon. Damit konnte ich schnell
  anfangen.

Leider hat das Discovery-Board doch zu wenige 5V-tolerante I/O-Ports. 
Deshalb sind jetzt noch 2 Buffer-ICs verbaut. Wenn ich mal wieder dazu 
komme, soll das Board (und die beiden HCT541) gegen einen (mindestens) 
100 poligen STM32F101 getauscht werden.

Im angehängten Schaltplan sind P1-P3 die Buchsenleisten, auf die das 
Discovery-Board gesteckt wird.

von Svenska (Gast)


Lesenswert?

Ein anderes Beispiel hab ich mal aufgebaut, aber mit einem klassischen 
Z80:
Beitrag "Re: eigenes Z80 Mainboard - geht das so?"

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

> Da gibts noch Alternativen. Letztes Jahr hatte ich mal was mit stm32
> angfangen.

Leider habe ich davon keine Ahnung, aber kann ja noch werden ;-)

> Ist (noch) nicht minimal. ;)
Stimmt, anbei die Schaltung des derzeitigen Standes.

> Interessieren tuts mich schon. Aber nicht so, daß ich eine Platine haben
> wollen würde.
Manchmal gibt es auch was umsonst ;-)

Prinzipiell habe ich nichts gegen eine STM32-Variante. Leider ist der 
3.3V Z180 (Z8S180) nicht so richtig verfügbar. Der Z8L180 (5V) jedoch 
überall.

> Die Umschalter würde ich einfach weglassen. Die Consolenschnittstelle
> kann durch den I/O-Controller einfach durchgeschleift werden. Die beiden
> Z180-UARTs stehen dann als weitere Schnittstellen zur Verfügung.

Das ist eigentlich auch nur für die Entwicklung gedacht. So kann der 
Initialisierungsvorgang beim AVR besser überwacht werden. Natürlich 
können auch einfach alle drei Schnittstellen nach außen geführt werden.

von Guido L. (guidol1970)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> Neben der reinen AVR Lösung hat die Nutzung einer echten Z80 CPU auch
> seinen Charme.

> Beispiele dazu sind hier zu finden:
> http://www.shaels.net/index.php/mini80
> http://forums.parallax.com/showthread.php/148944-Propeller-Z80-CPM-hybrid
> http://hive-project.de/board/viewtopic.php?f=15&t=955
>

Ich habe "damals" noch einen V6Z80P "ergattert", da die fertige Platine 
nur zu bekommen war, wenn der nette UKler einem die Bauteile aufgeloetet 
hat....so gibt es nicht so viele davon und nun hat er das Modell 
eingestellt:

http://www.retroleum.co.uk/electronics-articles/v6z80p/

Die Platine nutzt einen echten Z80 und SD-Karte als Medium

: Bearbeitet durch User
von Marcel A. (dl1ekm)


Lesenswert?

Finde ich spannend.
Noch spannender finde ich, dass ich diese Antwort 2x schreiben muss, die 
erste ist verschütt gegangen.

Wofür ist den CRT gut? Das ist doch auch nur eine serielle 
Schnittstelle, oder? Wo ist der Unterschied zum TTY Anschluss?

Habe zwar noch jede Mengen "Baustellen" hier aber... in was für einer 
Größenordnung liegt denn das Projekt (Platine, Bauteile...)?

Gruß
Marcel

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

> Wofür ist den CRT gut? Das ist doch auch nur eine serielle
> Schnittstelle, oder? Wo ist der Unterschied zum TTY-Anschluss?

An CRT wird das Terminal angeschlossen. Darüber erfolgen also die 
Bildschirmausgabe und die Tastatureingabe. Mit TTY wird eine 
vollständige serielle Schnittstelle, also Rx, Tx, RTS, CTS, DTR, DSR 
bereitgestellt.

> Habe zwar noch jede Mengen "Baustellen" hier aber... in was für einer
> Größenordnung liegt denn das Projekt (Platine, Bauteile...)?

Die Platine habe ich noch nicht kalkuliert, bei den Bauelementen schlägt 
die Z180 CPU mit ca 10 $ zu. Den Rest kann man sich ja selbst 
ausrechnen.

Es ist jedoch KEIN fertiges, erprobtes Konzept wie das bereits 
existierende AVR CP/M !! Hier darf noch kräftig selbst Hand angelegt 
werden.

Nachtrag: Anbei alle Schaltungen. Nun darf kräftig Kritik geäußert 
werden bzw. Fehler und Unstimmgikeiten benannt werden.

: Bearbeitet durch User
von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Nur mal kurz, weil ich gerade nicht viel Zeit habe.


Joe G. schrieb:
> Leider ist der
> 3.3V Z180 (Z8S180) nicht so richtig verfügbar. Der Z8L180 (5V) jedoch
> überall.

Hier scheints mehrere Verwechslungen zu geben, was bei den Datenblättern 
von Zilog (Viele (Druck-)Fehler und fast immer "Preliminary") auch kein 
Wunder ist. Die angehängten Graphen stammen aus [1]. Daraus, und aus der 
Tabellenüberschrift zu den AC Characteristics in [1] und [2] schließe 
ich, daß der Z8S180 auch mit 3.3 V, dann allerdings nur bis 20MHz läuft.

Beim freundlichen Chinesen habe ich den Z2S180 incl. Versand ab ca. 
€2,20 gesehen, bei Abnahme von 10 Stück.


Wenn man den Z180 (und das RAM) mit 3.3V betreiben kann, ist es 
schaltungstechnisch fast egal, ob man als "Hilfscontroller" einen AVR 
oder STM32 nimmt. Gleiche Anzahl I/Os vorausgesetzt.

[1] http://www.zilog.com/docs/z180/um0050.pdf
[2] http://www.zilog.com/docs/z180/z8s180ps.pdf

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

> Daraus, und aus der
> Tabellenüberschrift zu den AC Characteristics in [1] und [2] schließe
> ich, daß der Z8S180 auch mit 3.3 V, dann allerdings nur bis 20MHz läuft.

Da ich gerade zwei frische Z8S180033VSC auf dem Labortisch habe, teste 
ich gleich mal den Spannungsbereich aus.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich habe gerade 2 CPU's (Z8L180) getestet. Der M1 Zyklus bzw. der 
Adresszähler laufen bei beiden Exemplaren sauber von 5 V bis runter zu 
2.4 V.
Der Quarztakt lag auf 20 MHz.

: Bearbeitet durch User
von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Anbei ein vorläufiger Abschlussstand der AVR CP/M Version. Gegenüber der 
letzten Version sind noch folgende Änderungen eingeflossen:
1. Adresslatch auf /BUSACK gelegt (Danke Leo C.)
2. SRAM auf 512K vergrößert
3. Takt direkt am Z180 erzeugt
4. System komplett auf 3.3V (Levelshifter für SD entfällt)
5. I2C komplett separat, also Umschalter CRT1/CRT2 getrennt
Ich würde diesen Arbeitsstand zunächst „einfrieren“ um weitere Ideen und 
Vorschläge zu sammeln.
Aus meiner Sicht sehr überlegenswert der Vorschlag von Leo C. anstelle 
eines AVR’s ein STM32 zu verwenden. Die Entwicklung könnte in Richtung 
„CP/M Shield für STM Discovery“ gehen.

: Bearbeitet durch User
von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ein Layout gibt es nun auch.

von Svenska (Gast)


Lesenswert?

Wäre es nicht sinnvoller, einen neuen Thread dafür aufzumachen? "CP/M 
auf ATmega88" passt inzwischen überhaupt nicht mehr.

Mich würde es freuen, weil die Thread-Ladezeit in meinem Firefox langsam 
unerträglich wird.

von Jens (Gast)


Lesenswert?

Joe G. schrieb:
> CP/M Shield für STM Discovery
Für welches Discovery? Ich hab inzwischen mehrere :-)

Außerdem ist man dann gleich wieder an dem Punkt, den Propeller 
einzusparen, weil der STM genug Power für VGA hat:
http://www.youtube.com/watch?v=HkUUJ-rOUPg

Viele Grüße,
Jens

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Nach einigen Überlegungen hat sich die AVR_Z80_Stamp Version 
herauskristallisiert. Also ein Z180-Modul mit kompletten Z80 Bus. So 
kann das Modul z.B. auf eine Leiterkarte mit ECB-BUS gesteckt werden. 
Das Modul selbst ist jedoch auch schon (fast, nur 3.3V) ohne äußere 
Beschaltung komplett lauffähig. Die Unterlagen dazu gibt es wie immer 
hier:
http://www.mikrocontroller.net/svnbrowser/avr-cp-m/trunk/stamp/
Ich warte noch auf einige Bauelementemuster um das Layout zu überprüfen 
und dann werde ich einen Satz Leiterplatten fertigen lassen. Bei allem 
Enthusiasmus bitte jedoch immer bedenken. Es ist zunächst eine 
Entwicklungsversion.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Für die Weiterentwiklung auf Basis des Z180 gibt es jetzt einen einen 
Thread.
Beitrag "Z180-Stamp Modul"

von Matthias I. (matze5)


Lesenswert?

Ist die AVR Variante mittlerweile voll 8080 Kombatibel?

Gruss Matthias

von Leo C. (rapid)


Lesenswert?

> Ist die AVR Variante mittlerweile voll 8080 Kombatibel?

Was fehlt denn, oder was hat gefehlt?

von Matthias I. (matze5)


Lesenswert?

Ich frag nur da ich schon seit langeren mal einen Nachbau machen will 
und ich wuerde gern mit dem Asembler drauf rumspielen :)

von Leo C. (rapid)


Lesenswert?

> und ich wuerde gern mit dem Asembler drauf rumspielen :)

Dabei sollte aber volle Z80 Kompatibilität nicht stören, oder?

In der config.inc gibt es einen Schalter 1), um die Z80 Emulation 
abzuschalten. Dieser Schalter stammt aus der Anfangszeit des Projekts, 
als der Interpreter für die Z80 Opcodes noch gar nicht vorhanden war, 
und diente dazu, das Verhalten der Flags zwischen 8080- und Z80-Mode 
umzuschalten.

Man könnte den 8080-Mode dazu verwenden, Flash einzusparen, damit das 
Programm wieder in einen atmega88 paßt. Da an dieser Variante bisher 
niemand Interesse gezeigt hat, ist sie wenig getestet, und die 
undokumentierten 8080 Opcodes werden wahrscheinlich garantiert nicht 
richtig interpretiert.


1)  #define EM_Z80 1    /* Emulate Z80 if true, else 8080 */

von Matthias I. (matze5)


Lesenswert?

Ach seh schon jetzt ist es der ATMega168 :)

Intressant waere noch eine zweite Serielle Schnittstelle.

von Leo C. (rapid)


Lesenswert?

> Ach seh schon jetzt ist es der ATMega168 :)

Eher nicht. ;)

> Intressant waere noch eine zweite Serielle Schnittstelle.


Klar.

von Matthias I. (matze5)


Lesenswert?

Ich blick da nicht durch,
da ist nur die Rede von ATmega88 und weiter unten von 168,
was ist den nun die aktuelleste Version mit AVR ?

Diese ?:
http://www.mikrocontroller.net/articles/Datei:ACPM_Prop.jpg


Gruss Matze

: Bearbeitet durch User
von Leo C. (rapid)


Lesenswert?

> da ist nur die Rede von ATmega88 und weiter unten von 168,
> was ist den nun die aktuelleste Version mit AVR ?

Die aktuelle Software braucht einen ATmega328P. Mit ein paar kleinen 
Einschränkungen würde man sie noch in einen 168 bekommen, aber im 
Normalfall sollte man sich daß nicht antun. Vom Preis und Verfügbarkeit 
her dürfte sowieso fast kein Unterschied bestehen.

> Diese ?:
> http://www.mikrocontroller.net/articles/Datei:ACPM_Prop.jpg

Auf dem Foto sieht man nicht, welcher Controller auf der Platine ist. 
Bin mir aber ziemlich sicher, daß die niemand mit atmega168 bestückt 
hat.

von Drako (Gast)


Lesenswert?


von Leo C. (rapid)


Lesenswert?

Drako schrieb:
> ...

2 Fragen:

Ist da noch die Firmware drauf, die im ersten Bild (Screenshoot) zu 
sehen ist (v2.3 r185)? Wenn nicht, welche dann?

Wird der USB-Dongle, der im 2 Bild zu sehen ist, mitgeliefert? Ist aus 
dem Text nicht klar zu erkennen.

von Leo C. (rapid)


Lesenswert?

> 2 Fragen:

2 Tage - keine Antwort.

Dann kann man wohl davon ausgehen, das auf der halb bestückten Platine 
noch die uralte Firmware mit unfertigem, buggy Z80-Interpreter drauf 
ist. Neu flashen geht auch nicht so einfach, der der ISP-Stecker ja auch 
fehlt. Aber da man wg. USB-Anschluß ja sowieso zum Lötkolben greifen 
muß...

von Marcel A. (dl1ekm)


Angehängte Dateien:

Lesenswert?

So, ich habe mal meinen ersten Lochraster-Aufbau von "anno dazumal" 
ausgegraben (siehe Foto), den mit ATMega88 und 4bit RAM.
Ich habe dem dann einen 328p spendiert und wollte die aktuelle 
"firmware" mit Z80-Unterstützung draufbringen.

Tja, mehrere Hürden - und letztlich kein Erfog:

- zunächst musste ich im MakeFile die Pfade zum avrasm und den 
includesdes AVR Studios anpassen - kein Problem
- dann musste ich noch svnver.exe nachinstallieren (oder den Eintrag im 
MakeFile auskommentieren) - auch kein Problem
- obwohl ich dann (so denke ich, siehe Anhang) die Flags richtig gesetzt 
habe konnte er die init.asm nicht übsersetzten "Symbol SCL not found". 
Ich denke das liegt daran, dass wegen der Abwahl von I2C die 
equ-Einträge nicht geladen werden, in der init.asm aber trotzdem darauf 
verwiesen wird. Ich habe also mal eben SCL durch 5 und SDA durch 4 
ersetzt im code - ist ja eh egal
- beim Auslesen der "Release-Version" spuckt mir make immer noch 
folgende Fehler aus:
1
process_begin: CreateProcess(NULL, awk -vID=VMAJOR "$1$2 ~ \"#define\"ID {print $3}" config.inc, ...) failed.
2
process_begin: CreateProcess(NULL, awk -vID=VMINOR "$1$2 ~ \"#define\"ID {print $3}" config.inc, ...) failed.
3
process_begin: CreateProcess(NULL, awk -vID=VMAJOR "$1$2 ~ \"#define\"ID {print $3}" config.inc, ...) failed.
4
process_begin: CreateProcess(NULL, awk -vID=VMINOR "$1$2 ~ \"#define\"ID {print $3}" config.inc, ...) failed.
- es wird keine eep-Datei erzeugt, im MakeFile steht aber für "make 
program" sowohl hex als auch eep brennen. Daher kommt es zum Fehler 
"avrcpm.eep not found". Ist das schlimm? Wird überhaupt was ins eeprom 
geschrieben?

Wenn ich den 328er dann einsetze passiert - nichts. Keine Antwort auf 
dem Terminal...

Mache ich hier noch was falsch oder "geht das gar nicht auf der HW"?

Danke und Gruß
Marcel

von Leo C. (rapid)


Lesenswert?

Marcel A. schrieb:
> im MakeFile steht aber für "make
> program" sowohl hex als auch eep brennen. Daher kommt es zum Fehler
> "avrcpm.eep not found".

$ make flash

make program benutzt kein Mensch (dachte ich)

> Ist das schlimm?

Unschön, aber nicht schlimm.

> Mache ich hier noch was falsch oder "geht das gar nicht auf der HW"?

Weiß nicht, ob die aktuelle Software noch mit 4-bit läuft.
Kann ich mir erst heute Mittag anschauen. Alles so lange her...

von Leo C. (rapid)


Lesenswert?

Den letzten Beitrag habe ich wieder gelöscht, weil der darin enthaltene 
Änderungsvorschlag Mist war. Da der Rest nicht ganz so falsch ist, 
stelle ich ihn wieder rein


Marcel A. schrieb:
> - obwohl ich dann (so denke ich, siehe Anhang) die Flags richtig gesetzt

Man kann stattdessen make übrigens auch so starten:
1
$ make DRAM_8BIT=0

oder auch
1
$ make flash DRAM_8BIT=0 AVRDUDE_PROGRAMMER=usbasp

> habe konnte er die init.asm nicht übsersetzten "Symbol SCL not found".
> Ich denke das liegt daran, dass wegen der Abwahl von I2C die
> equ-Einträge nicht geladen werden, in der init.asm aber trotzdem darauf
> verwiesen wird.

Genau

> Ich habe also mal eben SCL durch 5 und SDA durch 4
> ersetzt im code - ist ja eh egal

Das ist natürlich nicht egal, da die Ports ja für etwas anderes 
verwendet werden.
8-bit RAM:
1
;Port C
2
.equ SDA  = 4
3
.equ SCL  = 5
4-bit RAM:
1
;Port C
2
.equ RAM_W  = 4
3
.equ RAM_CAS  = 5

Die RAM-Steuerleitungen als Input, macht sich dann nicht so gut.

Für die RXD-Leitung gilt ähnliches. Es kann natürlich sein, das noch 
weitere Stellen angepaßt werden müssen. Wenns bei Dir so immer noch 
nicht läuft, und müßte ich mir notfalls ein 4-Bit System aufbauen.

> process_begin: CreateProcess(NULL, awk -vID=VMAJOR "$1$2 ~ \"#define\"ID
> {print $3}" config.inc, ...) failed.

Gibt es ein awk auf dem Rechner, und ist es im "$PATH"?

: Bearbeitet durch User
von Leo C. (rapid)


Lesenswert?

Die Änderung wahr wohl doch richtig. Also bleibt sie erst mal so im SVN.

@Marcel, falls Du Dir den Download sparen willst:
1
; - Setup Ports
2
3
;  ldi   temp,(1<<PUD)    ;disable pullups
4
;  outm8  P_PUD,temp
5
  out   PORTD,_255    ;all pins high (enables pullup on input ports)
6
  out   PORTB,_255
7
  out   PORTC,_255
8
  out   DDRD,_255    ; PD all outputs
9
#if I2C_SUPPORT
10
  ldi  temp,~((1<<SCL)|(1<<SDA))
11
  out  DDRC,temp 
12
#endif
13
#if DRAM_8BIT
14
  ldi  temp,~(1<<RXD)
15
  out  DDRB,temp
16
#endif

von Marcel A. (dl1ekm)


Lesenswert?

Ich habe gawk (aus WinAVR) drauf, und im makefile steht auch "AWK=gawk".
Ist auch im PATH.
Trotzdem ging es erst, als ich gawk.exe in awk.exe umbenannt hatte. Na 
egal.

Jetzt kommen nur noch diese warnings:
1
avrcpm.asm(35): info: 'config.inc' included from here
2
config.inc(374): warning: Register r8 already defined by the .DEF directive
3
avrcpm.asm(35): info: 'config.inc' included from here
4
config.inc(375): warning: Register r9 already defined by the .DEF directive
5
avrcpm.asm(35): info: 'config.inc' included from here
6
config.inc(378): warning: Register r10 already defined by the .DEF directive
7
avrcpm.asm(35): info: 'config.inc' included from here
8
config.inc(379): warning: Register r11 already defined by the .DEF directive
9
avrcpm.asm(35): info: 'config.inc' included from here
10
config.inc(382): warning: Register r12 already defined by the .DEF directive
11
avrcpm.asm(35): info: 'config.inc' included from here
12
config.inc(383): warning: Register r13 already defined by the .DEF directive
13
avrcpm.asm(35): info: 'config.inc' included from here

Ich habe schon mit BAUD rumgespielt - ohne "sichtbaren" Erfolg.
Der Cursor in TeraTerm scheint bei einem Reset leicht zu flackern - mehr 
nicht.

Wahrscheinlich geht es einfach nicht. Ist zwar schade, macht aber auch 
keinen Sinn, da groß weiter zu testen, danke Leo.

Ich sollte mal langsam mit dem "großen" CPM-Rechner anfangen :-)

Gruß
Marcel

von Leo C. (rapid)


Lesenswert?

> Ich habe gawk (aus WinAVR) drauf, und im makefile steht auch "AWK=gawk".
> Trotzdem ging es erst, als ich gawk.exe in awk.exe umbenannt hatte. Na
> egal.

Im Makefile steht zwar:
AWK = gawk

allerdings:
conf-val = $(shell awk ...

statt:
conf-val = $(shell $(AWK) ...

Bei mir (Debian) gibt es einen Link von awk auf gawk über die 
Alternativen-Verwaltung.

> Wahrscheinlich geht es einfach nicht.
Du bist jetzt wohl der Erste nach über 3 Jahren, der das merkt.
Aber ich weiß nicht so recht, ob ich mich damit abfinden will...
Mal sehen, ob ich etwas Zeit finde.

von Jens (Gast)


Lesenswert?

Hallo Forum!

Ich versuche gerade mit den cpmtools auf die 8 MB-Images zuzugreifen. 
Aber irgendwie gelingt mir das nicht. cpmls zeigt einfach nichts an.

Ist denn die diskdef richtig, oder passt die nur für die 260 kB-Images? 
(Mit den 260 kB-Images funktioniert cpmls.)
1
diskdef avrcpm
2
  seclen 128
3
  tracks 77
4
  sectrk 26
5
  blocksize 1024
6
  maxdir 64
7
  skew 1
8
  boottrk 2
9
  os p2dos
10
end

Jens

von Leo C. (rapid)


Lesenswert?

Der hier müßte passen:
1
 # SIMH AltairZ80 Harddisk
2
diskdef simhd
3
  seclen 128
4
  tracks 2048
5
  sectrk 32
6
  blocksize 4096
7
  maxdir 1024
8
  skew 0
9
  boottrk 6
10
  os p2dos
11
end

von Jens (Gast)


Lesenswert?

Super. Das funktioniert.

Jetzt bekomme ich beim Ausführen von verschiedenen Programmen "CPU 
halted!"-Fehler.

Zum Beispiel bei ZEXTEST 
(http://www.jens-mueller.org/jkcemu/zextest.html)
1
62k cp/m vers 2.2
2
3
A>d:
4
D>dir
5
D: ZEXALL   SRC : ZEXDOC   SRC : ZEXALL   COM : ZEXDOC   COM
6
D>zexdoc
7
8
S       A =E5 BC =00F8 DE =F1FF HL =F8F8 SP=E3A9 PC=019E       76 29 2C
9
        a'=00 bc'=0000 de'=0000 hl'=0000 IX=0000 IY=0000 I=00       CPU halted!

Oder einem Editor:
1
>dir *.com
2
C: CFGDATE  COM : DATE     COM : EDIT     COM : RECEIVE  COM
3
C: SETDATE  COM : SETDISK  COM : SETEDIT  COM : STAT     COM
4
C: TDATE    COM
5
C>edit
6
7
S       A =E5 BC =00FD DE =DDFF HL =E5FD SP=E406 PC=018C       76 65 6E
8
 Z  NC  a'=00 bc'=0000 de'=0000 hl'=E37E IX=E3F3 IY=9BE1 I=00       CPU halted!

Wie kann ich jetzt weiter vorgehen? Hat unsere Emulation noch Schwächen?

Viele Grüße,
Jens

von Leo C. (rapid)


Lesenswert?

> "CPU halted!"-Fehler.

Das ist kein Fehler. Nur der Hinweis, daß die CPU auf einen HALT-Befehl 
gelaufen ist. ;)

Von der Standard-Firmware wird normalerweise das gesamte RAM mit 0x76 
(== HALT) gefüllt. Bei Programm- oder Hardware-Fehlern ist die 
Wahrscheinlichkeit, daß die CPU auf so einen Halt springt, relativ groß. 
Könnte sein, daß Du ein Hardwareproblem hast.

> Wie kann ich jetzt weiter vorgehen? Hat unsere Emulation noch Schwächen?

Die wird schon noch Schwächen haben, aber ganz bestimmt nicht solche. 
Zexdoc habe ich z.B. auch zum Testen benutzt.

Kannst Du mal die kompletten Boot-Meldungen posten?

von Jens (Gast)


Angehängte Dateien:

Lesenswert?

Leo C. schrieb:
> Kannst Du mal die kompletten Boot-Meldungen posten?
Sieht eigentlich unverdächtig aus:
1
CPM on an AVR, v3.2 r216 Test
2
Testing RAM: fill...wait...reread...
3
Initing mmc...
4
5
A: FAT16 File-Image 'A' at: 003, size: 8192KB.
6
B: FAT16 File-Image 'B' at: 5262, size: 8192KB.
7
C: FAT16 File-Image 'C' at: 5257, size: 8192KB.
8
D: FAT16 File-Image 'D' at: 6298, size: 8192KB.
9
E: FAT16 File-Image 'E' at: 6811, size: 8192KB.
10
F: FAT16 File-Image 'F' at: 7323, size: 8192KB.
11
Partinit done.
12
Ok, Z80-CPU is live!
13
14
62k cp/m vers 2.2
15
16
A>
Die Images C und D hab ich gestern neu erstellt. Dort laufen die 
Programme nicht. Images E und F sind die beiden Benchmark-Images 
(Dhrystone), die funktionieren. Und Image A und B sind 'alt', die 
funktionieren auch.

Du kannst ja evtl. mal einen Blick auf das angehängte Image werfen 
(zextest.simhd). Zum Erstellen habe eigentlich nur empty.simhd genommen 
und die Dateien mit cpmcp reinkopiert.

Dank & Gruß,
Jens

von Leo C. (rapid)


Lesenswert?

Jens schrieb:
> Sieht eigentlich unverdächtig aus:
> CPM on an AVR, v3.2 r216 Test

Ich wollte vor allem wissen, ob Du aktuelle Firmware hast.

> A: FAT16 File-Image 'A' at: 003, size: 8192KB.
> ...

Leider sieht man hier nicht die exakte Größe.
1
$ ls -l *.IMG *.simhd
2
-rw-r--r-- 1 leo leo 8388608 Mai  2  2012 CPMDSK_A.IMG
3
-rw-r--r-- 1 leo leo 8388864 Nov 28 18:03 zextest.simhd
4
$

Dein 'zextest.simhd' ist um einen Sektor (512 byte) größer als 8192KB. 
Deshalb wird es als my80- statt als simhd-Image erkannt. Diese Ecke ist 
leider etwas unübersichtlich und schlecht dokumentiert.
Die cpmtools verlassen sich im Wesentlichen auch darauf, daß der 
Anwender weiß was er tut.
1
$ fsck.cpm -f simhd -n zextest.simhd 
2
Phase 1: check extent fields
3
Phase 2: check extent connectivity
4
zextest.simhd: 6/1024 files (0.0% non-contigous), 42/2048 blocks
5
$ fsck.cpm -f myz80 -n zextest.simhd 
6
Phase 1: check extent fields
7
Phase 2: check extent connectivity
8
zextest.simhd: 6/1024 files (0.0% non-contigous), 36/2048 blocks
9
$

> Zum Erstellen habe eigentlich nur empty.simhd genommen
> und die Dateien mit cpmcp reinkopiert.

Wo gibts denn dieses 'empty.simhd'? Das scheint dann nämlich fehlerhaft 
zu sein. Ich habe nur ein leeres myz80 Image gefunden[1].

Hier noch die Zusammenfassung von [2] und [3]:
1
$ ./makeimage /dev/null myz80.img $(expr 128 \* 65536 + 256)
2
$ ./makeimage /dev/null simhd.img $(expr 128 \* 65536)
3
4
Danach mit cpmtools bespielen. Format 'myz80' bzw. 'simhd'.
5
6
# MYZ80 hard drive (only works with libdsk, because it has a 256-byte header)
7
diskdef myz80
8
  seclen 1024
9
  tracks 64
10
  sectrk 128
11
  blocksize 4096
12
  maxdir 1024
13
  skew 1
14
  boottrk 0
15
  os 3
16
end
17
18
# SIMH AltairZ80 Harddisk
19
diskdef simhd
20
  seclen 128
21
  tracks 2048
22
  sectrk 32
23
  blocksize 4096
24
  maxdir 1024
25
  skew 0
26
  boottrk 6
27
  os 2.2
28
end


[1] Beitrag "Re: CP/M auf ATmega88"
[2] Beitrag "Re: CP/M auf ATmega88"
[3] Beitrag "Re: CP/M auf ATmega88"

von Jens (Gast)


Lesenswert?

Leo C. schrieb:
> Wo gibts denn dieses 'empty.simhd'? Das scheint dann nämlich fehlerhaft
> zu sein. Ich habe nur ein leeres myz80 Image gefunden[1].
Da habe ich wohl was durcheinandergehauen.

Ich habe gedacht, das die 8 MB-Images automatisch simhd-Images sind:
1
 8388864 10 Okt  2010 empty.simhd
2
    8314  1 Nov  2013 empty_8MByte_img.zip

Richtig muß es wohl dann so heißen:
1
 8388864 10 Okt  2010 empty.myz80
2
    8314  1 Nov  2013 empty_8MByte_img.zip

Hätte ich mal ins zip-Archiv geschaut, hätte ich das auch sehen können 
(facepalm):
1
$ unzip -l  empty_8MByte_img.zip 
2
Archive:  empty_8MByte_img.zip
3
  Length     Date   Time    Name
4
 --------    ----   ----    ----
5
  8388864  10-10-10 03:05   myz80.img
6
 --------                   -------
7
  8388864                   1 file

Vielen Dank Leo, ich glaube ich komme jetzt weiter.
Noch eine Frage: Wo gibt es makeimage? Mein Mac ist da etwas 
minderbemittelt.

Viele Grüße,
Jens

von Jens (Gast)


Lesenswert?

Jens schrieb:
> Noch eine Frage: Wo gibt es makeimage?
Da mach ich mal die Ingrid [1]:
makeimage gibt es im SVN-Repository:
1
avrcpm/trunk/tools/makeimage/license.txt
2
avrcpm/trunk/tools/makeimage/makeimage.c
3
avrcpm/trunk/tools/makeimage/makeimage.sln
4
avrcpm/trunk/tools/makeimage/makeimage.vcproj
Und es läßt sich auch problemlos mit einem Mac kompilieren und 
ausführen:
1
$ makeimage /dev/null simhd.img $(expr 128 \* 65536)
2
- Opening Input File
3
- Opening Output File
4
- Copy Input File content to Output File
5
- Append Empty Block to End of File

Jetzt klappt's auch mit der Nachbarin (äh, dem Image :-)
1
62k cp/m vers 2.2
2
3
A>c:
4
C>dir
5
C: ZEXALL   COM : ZEXALL   SRC : ZEXDOC   COM : ZEXDOC   SRC
6
C>zexdoc
7
Z80 instruction exerciser
8
<adc,sbc> hl,<bc,de,hl,sp>....

Danke,
Jens


[1] http://de.wikipedia.org/wiki/Ingrid#Sonstiges

von Leo C. (rapid)


Lesenswert?

Hallo Jens,

ich war grade den passenden Link für makeimage am Suchen. Aber schön, 
daß es die Ingrid gibt. ;)

Jens schrieb:
> $ unzip -l  empty_8MByte_img.zip

Bleibt für mich noch die Frage, wo Du diese Zip-Datei her hast. Bei mir 
hieß die nämlich mal myz80-img.zip.

von Jens (Gast)


Lesenswert?

Leo C. schrieb:
> Bei mir
> hieß die nämlich mal myz80-img.zip.
Ich hatte sie umbenannt. Der Originalname war mir zu kryptisch ;-)

von Jens (Gast)


Angehängte Dateien:

Lesenswert?

Nächste Baustelle ;-)

Ich möchte eine Bootdiskette erstellen.

Variante 1: Klonen der Bootdisk mit SYSGEN

Aus nicht nachvollziehbarer Quelle hab ich ein SYSGEN (siehe Anhang):
1
C>a:load sysgen
2
3
FIRST ADDRESS 0100
4
LAST  ADDRESS 04FF
5
BYTES READ    0400
6
RECORDS WRITTEN 08
7
8
9
C>dir
10
C: CLS      HEX : SDIR     HEX : SYSGEN   HEX : SYSGEN   COM
11
C>a:pip a:=sysgen.com
12
C>a:
13
A>sysgen
14
SYSGEN VER 2.0
15
SOURCE DRIVE NAME (OR RETURN TO SKIP)a
16
SOURCE ON A, THEN TYPE RETURN
17
FUNCTION COMPLETE
18
DESTINATION DRIVE NAME (OR RETURN TO REBOOT)c
19
DESTINATION ON C, THEN TYPE RETURN
20
FUNCTION COMPLETE
21
DESTINATION DRIVE NAME (OR RETURN TO REBOOT)
22
23
A>dir c:
24
NO FILE
25
A>
Komisch. Alle Dateien sind 'weg' und booten läßt sich von dem Image auch 
nicht. Nur cpmls sieht die Dateien noch:
1
$ cpmls -f simhd /Volumes/CPM-DISK/CPMDSK_C.IMG 
2
0:
3
cls.hex
4
sdir.hex
5
sysgen.com
6
sysgen.hex
Kann das überhaupt so gehen? Möglicherweise verwende ich SYSGEN falsch, 
oder ich habe eine ungeeignete Version, oder SYSGEN kommt mit den großen 
Images nicht klar.




Variante 2: Bauen der Bootdisk auf dem Hostsystem
Hostsystem ist bei mir ein MacOS X (10.9.5).
Erster Schritt: Ich brauche (einen/den?) z80asm
Hier habe ich einen gefunden: 
http://wwwhomes.uni-bielefeld.de/achim/z80-asm.html

Der läßt sich aber nicht Kompilieren.
1. Versuch:
1
In file included from asm.c:12:
2
./z80-cpu.h:31:61: error: redefinition of 'wait'
3
enum cpu_control_pin { rd, wr, iorq, mreq, m1, inter, halt, wait, reset, rfsh,
4
                                                            ^
5
/usr/include/sys/wait.h:248:7: note: previous definition is here
6
pid_t   wait(int *) __DARWIN_ALIAS_C(wait);
7
        ^
8
1 error generated.
Aus irgendeinem Grund liegt 'wait' im selben Namensraum.
Ich hab das erste wait zu waitpin umbennant und scheitere jetzt am

2. Versuch:
1
ar rcs asm.a z80-cpu.o asm.o hash.o compile.o regs.o instr.o interrupt.o \
2
                 expression.o mini-display.o keyboard.o file.o
3
gcc -lc -o z80-asm z80-asm.o dummy.o asm.a hardware/hard.a
4
Undefined symbols for architecture x86_64:
5
  "_A", referenced from:
6
      _reg_adr in asm.a(regs.o)
7
  "_B", referenced from:
8
      _reg_adr in asm.a(regs.o)
9
  "_C", referenced from:
10
      _reg_adr in asm.a(regs.o)
11
  "_D", referenced from:
12
      _reg_adr in asm.a(regs.o)
13
  "_E", referenced from:
14
      _reg_adr in asm.a(regs.o)
15
  "_H", referenced from:
16
      _reg_adr in asm.a(regs.o)
17
  "_I", referenced from:
18
      _reg_adr in asm.a(regs.o)
19
  "_IXh", referenced from:
20
      _reg_adr in asm.a(regs.o)
21
  "_IXl", referenced from:
22
      _reg_adr in asm.a(regs.o)
23
  "_IYh", referenced from:
24
      _reg_adr in asm.a(regs.o)
25
  "_IYl", referenced from:
26
      _reg_adr in asm.a(regs.o)
27
  "_L", referenced from:
28
      _reg_adr in asm.a(regs.o)
29
     (maybe you meant: _LISTING)
30
  "_R", referenced from:
31
      _reg_adr in asm.a(regs.o)
32
ld: symbol(s) not found for architecture x86_64
Da bin ich einigermaßen ratlos.

Vielleicht hat ja jemand noch Tipps, um Variante 1 und Variante 2 zum 
Laufen zu bekommen.

Danke,
Jens

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ein CP/M-System direkt unter CP/M bauen hatte ich hier [1] mal 
beschrieben.
Wenn du die SUB Datei unter CP/M benutzt, mußt du den Befehl w cpm.bin b 
streichen, da er nur für den Simulator definiert ist.

[1]: Beitrag "Re: CP/M auf ATmega88"

: Bearbeitet durch User
von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Jens schrieb:
> Ich möchte eine Bootdiskette erstellen.

Mein Vorschlag: Nachschauen, wie das Makefile im Zweig 
'avrcpm/trunk/cpm/' vom SVN-Server Deines Vertrauens die Teile 
zusammenstoppelt.

> Variante 1: Klonen der Bootdisk mit SYSGEN
> Aus nicht nachvollziehbarer Quelle hab ich ein SYSGEN (siehe Anhang):

Möglicherweise wird dieses Sysgen die falschen Sektoren, oder zu wenige 
kopieren.

> A>dir c:
> NO FILE
> A>
> Komisch. Alle Dateien sind 'weg' und booten läßt sich von dem Image auch

> Kann das überhaupt so gehen?

Theoretisch schon.
> oder ich habe eine ungeeignete Version,

Sehr wahrscheinlich. Im Anhang ist das Original-SYSGEN von DR. Statt die 
Die Disk-Geometrie vom BIOS zu holen, liest (und schreibt) es die 
Sektoren 1 bis 26 von Track 0 und 1.
Die großen Formate haben aber 32 oder noch mehr Sektoren pro Spur.

> oder SYSGEN kommt mit den großen Images nicht klar.

Von dem Sektorproblem abgesehen, eher nicht.
Das simh-Format hat 6 Spuren a 32 Sektoren für das System reserviert.
Das Directory kann dann eigentlich nicht überschrieben werden.

Wurden denn beide Images vor und nach SYSGEN als simh erkannt? 
(Überprüfen mit 'A>stat dsk:')
Hier ist 'A' simh und 'G' myz80:
1
A>stat dsk:
2
3
    A: Drive Characteristics
4
65344: 128 Byte Record Capacity
5
 8168: Kilobyte Drive  Capacity
6
 1024: 32  Byte Directory Entries
7
 1024: Checked  Directory Entries
8
  256: Records/ Extent
9
   32: Records/ Block
10
   32: Sectors/ Track
11
    6: Reserved Tracks
12
13
    G: Drive Characteristics
14
65536: 128 Byte Record Capacity
15
 8192: Kilobyte Drive  Capacity
16
 1024: 32  Byte Directory Entries
17
 1024: Checked  Directory Entries
18
  256: Records/ Extent
19
   32: Records/ Block
20
  128: Sectors/ Track
21
    0: Reserved Tracks


> Variante 2: Bauen der Bootdisk auf dem Hostsystem
> Hostsystem ist bei mir ein MacOS X (10.9.5).
> Erster Schritt: Ich brauche (einen/den?) z80asm

Die BIOS-Quellen sind für den Microsoft M80 geschrieben. Die gängigen 
Crossassembler sind oft nicht ganz kompatibel. Deshalb nehme ich m80.com 
oder neuerdings slr180.com in einem CP/M-Emulator. Leider weiß ich 
nicht, ob es einen passenden Emulator für MacOS gibt.

von Jens (Gast)


Lesenswert?

Joe G. schrieb:
> Ein CP/M-System direkt unter CP/M bauen hatte ich hier [1] mal
> beschrieben.
Der Thread ist ja inzwischen schon etwas unüberichtlich geworden. Das 
war mir entgangen.

> Wenn du die SUB Datei unter CP/M benutzt, mußt du den Befehl w cpm.bin b
> streichen, da er nur für den Simulator definiert ist.
Wie ruft man denn die SUB-Datei unter CP/M überhaupt auf?
Was braucht man alles dazu? Nur SUBMIT.COM oder auch XSUB.COM?
So tut sich jedenfalls nicht viel:
1
G>a:submit avrcpm.sub
2
3
G>

Wenn ich das Makefile/Buildscript/avrcpm.sub per Hand durchspiele 
scheitere ich an diesem Punkt:
1
G>F:M80 =ZSDOS/M
2
3
...
4
5
U                                         IF  ROM
6
U                                           IF  ZS
7
P                                       ORG     ZSDOS+0DF9H
8
U                                         IF  ZS
9
U                                         IF  ROM
10
11
1197 Fatal error(s),108 Warning(s)
12
13
G>
Hab ich den falschen Assembler?


Leo C. schrieb:
> Mein Vorschlag: Nachschauen, wie das Makefile im Zweig
> 'avrcpm/trunk/cpm/' vom SVN-Server Deines Vertrauens die Teile
> zusammenstoppelt.
Dort hab ich schon geschaut. Das entspricht ja im wesentlichen der 
avrcpm.sub. Allerdings fehlen im Repository (URL: 
svn://mikrocontroller.net/avr-cp-m/avrcpm/trunk/cpm) m.E. ein paar 
wichtige Quellen, z.B. ZSDOS.MAC oder BDOS.MAC. Außerdem ist mir nicht 
klar, wo die CPMxx.SYS herkommen, bzw. wie diese erstellt werden.


> Wurden denn beide Images vor und nach SYSGEN als simh erkannt?
Vorher ja, hinterher sieht es so aus :-/
1
A>stat dsk:
2
3
    A: Drive Characteristics
4
65344: 128 Byte Record Capacity
5
 8168: Kilobyte Drive  Capacity
6
 1024: 32  Byte Directory Entries
7
 1024: Checked  Directory Entries
8
  256: Records/ Extent
9
   32: Records/ Block
10
   32: Sectors/ Track
11
    6: Reserved Tracks
12
13
    C: Drive Characteristics
14
 1944: 128 Byte Record Capacity
15
  243: Kilobyte Drive  Capacity
16
   64: 32  Byte Directory Entries
17
   64: Checked  Directory Entries
18
  128: Records/ Extent
19
    8: Records/ Block
20
   26: Sectors/ Track
21
    2: Reserved Tracks
Offenbar verändert SYSGEN die Laufwerkscharakteristik.
Den Ansatz mit SYSGEN werde ich später weiterverfolgen. Selber bauen ist 
viel spannender.


> CP/M-Emulator ... für MacOS
Wird es sicher geben. Aber ich hab ja Zugriff auf das CP/M-System via 
Terminalprogramm. Da brauch ich keinen Emulator :-)

Gute N8,
Jens

von Leo C. (rapid)


Lesenswert?

> Was braucht man alles dazu? Nur SUBMIT.COM oder auch XSUB.COM?
> So tut sich jedenfalls nicht viel:
G>a:submit avrcpm.sub

Möglicherweise handelt es sich um das Problem, das hier
Beitrag "Re: CP/M auf ATmega88"
und hier
Beitrag "Re: CP/M auf ATmega88"
angesprochen wird.

> 1197 Fatal error(s),108 Warning(s)

So viele Fehler bekomme ich von M80 immer, wenn die Zeilenenden nicht 
stimmen. Der besteht auf CR/LF.
Die SLR-Assembler schlucken auch Unix-Zeilenenden.

Jens schrieb:
> Allerdings fehlen im Repository (URL:
> svn://mikrocontroller.net/avr-cp-m/avrcpm/trunk/cpm) m.E. ein paar
> wichtige Quellen, z.B. ZSDOS.MAC oder BDOS.MAC.

Vom BDOS hatten wir nie Sourcecode, findet man aber, wie ZSDOS im Netz.

> Außerdem ist mir nicht klar, wo die CPMxx.SYS herkommen, bzw. wie
> diese erstellt werden.

Die 62K-Version hatte Sprite_tm in der Urfassung des Projekts schon 
mitgeliefert.
http://spritesmods.com/?art=avrcpm&page=4

Die anderen hatte ich mal mir irgendeinem MOVCPM gebastelt. Das hatte 
eine andere Seriennummer als Sprite_tms CP/M. Ich meine, die 
Seriennummern angepaßt zu haben, weiß aber nicht mehr, wie weit ich 
damit gekommen bin, und ob wirklich alles funktioniert, weil ich dann 
auf ZSDOS umgestiegen bin.

> Offenbar verändert SYSGEN die Laufwerkscharakteristik.

SYSGEN kopiert höchstwahrscheinlich ab Track 0, Sektor 1, weil auf 
Floppies die Sektornumerierung bei 1 beginnt. Da unsere Sektor-zählung 
bei 0 beginnt, wird der erste Sektor nicht mitkopiert. Dieser enthält 
beim simh-Format nicht nur den IPL, sondern auch eine Formatkennung. 
Wenn diese nach dem Kopieren fehlt, wird das (ursprünliche) 
AVRCPM-Standardformat angenommen.

Wenn Du das SYSGEN mal anpassen willst, kannst Du Dich an unserem IPL 
orientieren, oder die Diskgeometrie aus dem BIOS auslesen, und dann 
konsequenter weise auch die BIOS-Funktion für Sector-Translate 
verwenden.

von Jens (Gast)


Lesenswert?

Leo C. schrieb:
> G>a:submit avrcpm.sub
>
> Möglicherweise handelt es sich um das Problem, das hier
Bestimmt. Aber erstmal muss es manuel funktionieren. Dann schau mir das 
nochmal an.
Und ich dachte immer so komisches Verhalten gibt es erst seit MS-DOS ;-)


>> 1197 Fatal error(s),108 Warning(s)
> So viele Fehler bekomme ich von M80 immer, wenn die Zeilenenden nicht
> stimmen. Der besteht auf CR/LF.
Die Zeilenenden waren bzw. sind es nicht. Viel einfacher: Es fehlt die 
ZSDOS.LIB

Ich habe hier (http://www.znode.de/specials/zsdossrc/) eine gefunden, 
jetzt kommt diese Ausschrift:
1
G>f:m80 =zsdos/m
2
P                                       COMMON  /_BIOS_/
3
4
1 Fatal error(s)
5
G>
Vielleicht könnt Ihr Eure ZSDOS.LIB nochmal zeigen, bzw. im Repository 
einchecken.

> Die SLR-Assembler schlucken auch Unix-Zeilenenden.
Denn kann ich mir ja trotzdem mal anschauen.


>> Außerdem ist mir nicht klar, wo die CPMxx.SYS herkommen, bzw. wie
>> diese erstellt werden.
> Die 62K-Version hatte Sprite_tm in der Urfassung des Projekts schon
> mitgeliefert.
> http://spritesmods.com/?art=avrcpm&page=4
Ok.

> Die anderen hatte ich mal mir irgendeinem MOVCPM gebastelt. Das hatte
> eine andere Seriennummer als Sprite_tms CP/M. Ich meine, die
> Seriennummern angepaßt zu haben, weiß aber nicht mehr, wie weit ich
> damit gekommen bin, und ob wirklich alles funktioniert, weil ich dann
> auf ZSDOS umgestiegen bin.
ZSDOS ist offenbar eh das bessere BDOS.

> Wenn Du das SYSGEN mal anpassen willst, kannst Du Dich an unserem IPL
Später. Aber es wäre ein originalerer Weg, um eine Systemkopie 
anzufertigen.

Viele Grüße,
Jens

von Leo C. (rapid)


Lesenswert?

> G>f:m80 =zsdos/m
> P                                       COMMON  /_BIOS_/

Könnte das hier sein:
1
--- /home/leo/CPM/src/ZSDOS/1/ZSDOS.LIB  1998-12-24 10:19:34.000000000 +0100
2
+++ /home/leo/src/avr/CPM_auf_ATmega88/joe/zsdos-20120425/ZSDOS.LIB  2012-04-25 12:17:10.000000000 +0200
3
@@ -173,7 +173,5 @@
4
 ; the ZRL equate to TRUE.  With the ZRL equate set to FALSE, a standalone
5
 ; .REL file will be produced with no external requirements.
6
 
7
-ZRL  EQU  TRUE    ; Set True .ZRL file with COMMON for NZCOM,
8
+ZRL  EQU  FALSE    ; Set True .ZRL file with COMMON for NZCOM,
9
         ;     False to produce straight .REL file
10
-

von Jens (Gast)


Lesenswert?

Super:
1
G>f:m80 =zsdos/m
2
3
No Fatal error(s)
4
5
G>
Ich habe jetzt eine CPM.BIN!
Vielen Dank bis hierhin. Ohne Internet würde ich wahrscheinlich jetzt 
noch Doku lesen.


Joe G. schrieb:
> Wenn du die SUB Datei unter CP/M benutzt, mußt du den Befehl w cpm.bin b
> streichen, da er nur für den Simulator definiert ist.

Jetzt bleibt nur noch eine Frage:
Wie bekomm ich die CPM.BIN (mit Bordmitteln) an die richtige Stelle der 
'Boot-Diskette'?

Hier wird ja nach 'w' gleich aufgeräumt:
1
SAVE 26 cpm.bin
2
ERA IPL.COM   
3
ERA CCP.COM 
4
ERA ZSDOS.COM       
5
ERA BIOS.COM
6
w cpm.bin b
7
ERA CPM.BIN

Viele Grüße,
Jens

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Jens schrieb:
> Wie bekomm ich die CPM.BIN (mit Bordmitteln) an die richtige Stelle der
> 'Boot-Diskette'?

Ich habe als "Boardmittel" die CP/M Tools verwendet.
mkfs.cpm.exe -f avrcpm -b cpm.bin -L test diskimage
Ich vermute jedoch, dass du mit "Boardmittel" direkt in CP/M die CPM.BIN 
Datei in den Bootsektor schreiben möchtest, oder?

von Leo C. (rapid)


Lesenswert?

Jens schrieb:
> Vielen Dank bis hierhin. Ohne Internet würde ich wahrscheinlich jetzt
> noch Doku lesen.
...
> Jetzt bleibt nur noch eine Frage:
> Wie bekomm ich die CPM.BIN (mit Bordmitteln) an die richtige Stelle der
> 'Boot-Diskette'?

CPM/M 2.2 ALTERATION GUIDE

Diese Doku gibts im Internet. ;-)

von Jens (Gast)


Lesenswert?

Hah! Es bootet!
Vielen Dank, Jungs!

Joe G. schrieb:
> Ich habe als "Boardmittel" die CP/M Tools verwendet.
> mkfs.cpm.exe -f avrcpm -b cpm.bin -L test diskimage
Stimmt. So stehts ja auch im Makefile von Leo.
Bei mkfs.cpm kann man ja auch mehrmals -b <file> angeben. Kann man sich 
da den Zusammenbau mit DDT bzw. dd evtl. sparen?

> Ich vermute jedoch, dass du mit "Boardmittel" direkt in CP/M die CPM.BIN
> Datei in den Bootsektor schreiben möchtest, oder?
Ja. Das meinte ich eigentlich. Muß ja damals auch ohne Host-PC gegangen 
sein.


Um das Bauen zu vereinfachen, hab ich jetzt SuperSUB probiert:
http://archives.scovetta.com/pub/walnut-creek/SIMTEL/SIGM/VOLS000/VOL085/SUPERSUB.ASM
Aber so richtig gesprächig sind dir Tools von damals alle nicht:
1
G>dir
2
G: AVRCPM   LIB : CPM      BIN : BIOS     MAC : CCP      MAC
3
G: CFGACPM  LIB : SUPERSUB ASM : IPL      MAC : MEMCFG   LIB
4
G: ZSDOS    MAC : ZSDOS    COM : IPL      COM : CCP      COM
5
G: AVRCPM   SUB : BIOS     COM : XSUB     COM : ZSDOS    LIB
6
G: M80      COM : L80      COM : DDT      COM : SUPERSUB COM
7
G: $$$      SUB
8
G>supersub avrcpm.sub
9
SuperSUB V1.1
10
11
G>

Viele Grüße,
Jens

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Jens schrieb:
> Hah! Es bootet!
Glückwunsch!

Jens schrieb:
> Aber so richtig gesprächig sind dir Tools von damals alle nicht:

Versuche es mal mit DO.COM

von Jens (Gast)


Lesenswert?

Joe G. schrieb:
> Versuche es mal mit DO.COM
Das meldet sich ja mit der gleichen Versionsnummer wie SUPERSUB.COM.
Immerhin kommt es bis zum DDT:
1
G>L80 BIOS,BIOS/N/E
2
3
Link-80  3.44  09-Dec-81  Copyright (c) 1981 Microsoft
4
5
Data    0100    0608    < 1288>
6
7
43314 Bytes Free
8
[0000   0608        6]
9
10
(xsub active)
11
G>ERA BIOS.REL
12
G>; PUT PIECES TOGETHER
13
G>DDT
14
15
(xsub active)
16
G>F100 5C00 0
17
F100?
18
19
G>

Viele Grüße,
Jens

von Jens (Gast)


Lesenswert?

Sehr merkwürdig. Ich hab jetzt den DDT nochmal auf das Laufwerk 
draufkopiert und nun geht es. Danke!

Mal sehen, was ich als nächstes ausprobiere.

Jens

von Marcel A. (dl1ekm)


Lesenswert?

Habe diese Frage auch schon beim AX81-Projekt gestellt:
Da sich diese Arduino (Uno) Boards (mit ATmega328 und 16 MHz) immer 
größerer Beliebtheit erfreuen - könnte das nicht eine alternative Basis 
zum "CPM Stick" sein?
Es müsste ja "nur" der RAM-Kram auf ein Zusatz-Shield. USB usw. ist ja 
schon alles drauf. Die SD-Card entweder mit auf das Zusatzshield oder 
ein SD-Card-Shield.

Würde ich glatt mal probieren - 2 Fragen:
- reichen die 16 MHz auf dem Board aus?
- wahrscheinlich müsste man den Arduino-Bootloader überschreiben, oder?

Was meint ihr?

Gruß
Marcel

von Jens (Gast)


Lesenswert?

Marcel A. schrieb:
> Würde ich glatt mal probieren - 2 Fragen:
> - reichen die 16 MHz auf dem Board aus?
Ja. Ich habe bei der ATmega128-Variante auch 'nur' 16 MHz verwendet.

> - wahrscheinlich müsste man den Arduino-Bootloader überschreiben, oder?
Nicht zwingend. Ich weiß aber nicht, wie knapp es im 328 zugeht.

Die Pins müssten ja gerade so reichen (UART, I2C, SD-Karte und DRAM).

Jens

von Marcel A. (dl1ekm)


Lesenswert?

Hallo Jens,

habe mir das gerade noch mal genauer angesehen.
PINs sind alles da - ABER:
RX/TX ist hart verdrahtet auf die RX/TX-Pins des ATMega (PD0/PD1). Diese 
werden aber im CPM-Stick für die RAM-Adressleitungen verwendet. Im Stick 
gibt es stattdessen einen Soft-UART auf den Pins PB0/PB1.
Würde bedeuten, man müsste HW-mäßig auf der Arduino-Uno-Platine 
rumbrutzeln - oder?

Zum Thema Bootloader: Habe ich das da richtig verstanden - wenn ich ein 
mit AVR GCC erstelltes oder eben dieses "CPM-HEX" mit avrdude und "-c 
arduino" flashe, dann ist das so wie mit der IDE und das HEX kommt 
hinter den Bootloader (falls es passt...)?

Danke und Gruß
Marcel

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Marcel A. schrieb:
> Da sich diese Arduino (Uno) Boards (mit ATmega328 und 16 MHz) immer
> größerer Beliebtheit erfreuen - könnte das nicht eine alternative Basis
> zum "CPM Stick" sein?

Beitrag "Re: CP/M auf ATmega88"

von Jens (Gast)


Lesenswert?

Joe G. schrieb:
> Beitrag "Re: CP/M auf ATmega88"
Das passt aber nicht auf meine Uno's.
Mimimi
:-)

von Marcel A. (dl1ekm)


Lesenswert?

Ja, für mich würde sich die Frage stellen, ob man mit dem USB-Seriell 
irgendwie klar kommt ...

von Leo C. (rapid)


Lesenswert?

Marcel A. schrieb:
> Es müsste ja "nur" der RAM-Kram auf ein Zusatz-Shield. USB usw. ist ja
> schon alles drauf. Die SD-Card entweder mit auf das Zusatzshield oder
> ein SD-Card-Shield.

z.B. so was:
http://www.ebay.de/itm/1Stk-XD-204-Data-logging-shield-fur-Arduino-UNO-SD-Card-/121505102595?pt=Wissenschaftliche_Ger%C3%A4te&hash=item1c4a44bb03

Da könnte man die RAMs gleich drauffrickeln. Und die Uhr könnte man auch 
mitverwenden.

>> - wahrscheinlich müsste man den Arduino-Bootloader überschreiben, oder?

Wenn man den USB-Converter nur für den Download verwenden möchte, nicht. 
Wenn man den USB-Converter aber auf die Pins des AVRCPM-Serial-IF 
umlegt, kann man den Arduino Bootloader wahrscheinlich nicht mehr 
verwenden. Mit Peter Danneggers Fastboot, oder mit dem SD-Bootloader 
gehts aber.
Beitrag "Re: CP/M auf ATmega88"

Jens schrieb:
> Nicht zwingend. Ich weiß aber nicht, wie knapp es im 328 zugeht.

Platz satt.

Marcel A. schrieb:
> RX/TX ist hart verdrahtet auf die RX/TX-Pins des ATMega (PD0/PD1). Diese
> werden aber im CPM-Stick für die RAM-Adressleitungen verwendet. Im Stick

Datenbus. D.h., sie sind hochohmig, wenn nicht auf das RAM zugegriffen 
wird, bzw, können auch noch für was anderes verwendet werden.

> gibt es stattdessen einen Soft-UART auf den Pins PB0/PB1.
> Würde bedeuten, man müsste HW-mäßig auf der Arduino-Uno-Platine
> rumbrutzeln - oder?

Ja.
Oder 4-Bit RAM.

> Zum Thema Bootloader: Habe ich das da richtig verstanden - wenn ich ein
> mit AVR GCC erstelltes oder eben dieses "CPM-HEX" mit avrdude und "-c
> arduino" flashe, dann ist das so wie mit der IDE und das HEX kommt
> hinter den Bootloader (falls es passt...)?

Der Bootloader liegt am Flash-Ende. Das "HEX" kommt also davor.

Marcel A. schrieb:
> Ja, für mich würde sich die Frage stellen, ob man mit dem USB-Seriell
> irgendwie klar kommt ...

Wenn die Pins nicht umgelegt werden sollen, gehts noch mit 4-Bit RAM.
(Wenn 4-Bit RAM dann mal wieder geht...)

von Jens (Gast)


Lesenswert?

Für so ein Arduino-Ding würde ich aber Speicher nehmen, der aktuell 
verfügbar ist. Serielle RAMs hab ich aber noch keine gesehen. (Im 
Gegensatz zu seriellen 'ROMs' [=EEPROM]).

Grüße,
Jens

von Konrad S. (maybee)


Lesenswert?

Jens schrieb:
> Serielle RAMs hab ich aber noch keine gesehen.

23LCV1024
Bei Mouser für 2-3€/Stück als PDIP-8/SOIC-8/TSSOP-8 lieferbar.

von Jens (Gast)


Lesenswert?

Konrad S. schrieb:
> 23LCV1024
Danke, sieht auf den ersten Blick ganz nett aus. Aber als 
Hauptspeicherersatz taugt es leider nicht, da der Speicher intern in 
pages (zu 32 Bytes) segmentiert wird.

Parallele Speicher (SRAM) brauchen zu viele Pins für einen Arduino-Uno.
Alternativ könnte man den Ardino MEGA 2560 nehmen (15€ bei ebay). Den 
finde ich aber nicht mehr so gängig, wie den Uno.

Oder SRAM (128k x 8) + 74164 (2x) für die Adresse.
Um 64k RAM anzusteuern braucht man
 8 Pin Daten
 2 Pin Steuerleitung (/OE & /WE)
 2 Pin Adresse (seriell über 74164)
------
12 Pins, wobei man die Adresspins mit der SD-Karte teilen kann.

Allerdings dürfte die Zugriffszeit durch die serielle Ansteuerung noch 
langsamer sein, als bei 4-Bit DRAM (inkl. Refresh).

Viele Grüße,
Jens

von Konrad S. (maybee)


Lesenswert?

Jens schrieb:
> da der Speicher intern in
> pages (zu 32 Bytes) segmentiert wird.

Der 23LCV1024 hat auch einen "sequential mode", da kannst du beliebig 
lesen/schreiben.

> Allerdings dürfte die Zugriffszeit durch die serielle Ansteuerung noch
> langsamer sein, als bei 4-Bit DRAM (inkl. Refresh).

Klar, das ist der Preis für die geringere Anzahl an Pins.

Es gäbe auch noch serielles FRAM, z.B. FM25V02 (32kB, 6€) oder FM25V05 
(64kB, 12€). Hätte auch seinen Reiz.

von Leo C. (rapid)


Lesenswert?

Jens schrieb:
> Konrad S. schrieb:
>> 23LCV1024
> Danke, sieht auf den ersten Blick ganz nett aus. Aber als
> Hauptspeicherersatz taugt es leider nicht, da der Speicher intern in
> pages (zu 32 Bytes) segmentiert wird.

Spielt keine Rolle (Datenblatt):
1
- Byte, Page and Sequential mode for Reads and Writes

> Parallele Speicher (SRAM) brauchen zu viele Pins für einen Arduino-Uno.

Beim Arduino Uno sind alle I/O-Pins auf Steckerleisten geführt und damit 
hat er genau so viele Pins wie die 28-Pin ATmegas, die wir normalerweise 
für das Projekt nehmen.

> Alternativ könnte man den Ardino MEGA 2560 nehmen (15€ bei ebay). Den
> finde ich aber nicht mehr so gängig, wie den Uno.

Wäre (auch) eine Möglichkeit.

> Oder SRAM (128k x 8) + 74164 (2x) für die Adresse.
> Um 64k RAM anzusteuern braucht man
> 12 Pins, wobei man die Adresspins mit der SD-Karte teilen kann.
> Allerdings dürfte die Zugriffszeit durch die serielle Ansteuerung noch
> langsamer sein, als bei 4-Bit DRAM (inkl. Refresh).

Wesentlich schneller, bei gleichem Hardware-Aufwand, dürfte diese 
Variante sein:
Beitrag "Re: CP/M auf ATmega88"

Das SPI-RAM wäre natürlich auch erheblich schneller.

Zusammenfassung bis hier:
Für AVR-CP/M mit Arduino Uno sind folgende Varianten denkbar:
- Onboard USB-Schnittstelle nicht benutzen
- Onboard USB-Schnittstelle umverdrahten
- 4-Bit DRAM
- 8-Bit Static-RAM mit Adress-Latches
- SPI-RAM

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Zusammenfassung bis hier:
> - SPI-RAM

Wenn Minimal dann einen SPI-RAM z.B. 23K512 oder 23K1024. Eine kleine 
Beschreibung zur Ansteuerung findet man hier:
http://www.parallax.com/sites/default/files/downloads/AN012-SRAM-v1.0.pdf

von Jens (Gast)


Lesenswert?

Der SRAM mit den Adress-Latches ist eine sehr gute Idee.

Leo C. schrieb:
> Zusammenfassung bis hier:
> Für AVR-CP/M mit Arduino Uno sind folgende Varianten denkbar:
> - Onboard USB-Schnittstelle nicht benutzen
> - Onboard USB-Schnittstelle umverdrahten
> - 4-Bit DRAM
> - 8-Bit Static-RAM mit Adress-Latches
> - SPI-RAM

Meiner bescheidenen Meinung nach sind nur zwei Dinge sinnvoll:
- Onboard USB nutzen
und
- 8-Bit SRAM oder SPI-RAM
und zusammen mit RTC und SD-Card auf ein Uno-kompatibles Shield.

Wenn es eine Entscheidung gibt, würde ich mich auch für Schaltplan, 
Layout und Prototypfertigung zur Verfügung stellen.

Jens

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Um AVR CP/M auf eine breitere Basis zu stellen, verfolge ich die Idee 
mit den Arduinos ja schon länger. Bisher ist eine „gute“ Lösung immer an 
den folgenden Problemen gescheitert.
 - 5V Versorgung der Arduino UNO Versionen
 - Rx/Tx Pins liegen falsch
Auch SRAM mit Latch bietet dabei keinen Ausweg. Auch hier müsste Rx/Tx 
umverdrahtet werden. Für die 3.3V Lösung müsste entweder ein 
Levelshifter für die SD-Card eingesetzt werden, oder das Arduino Board 
auf 3.3V umgestellt werden. Irgendwie alles unbefriedigend.
Eine Alternative war ein Arduino „kompatibler“ Entwurf [1]. Dazu gibt es 
von der Schaltung bis zum fertigen Layout alle Unterlagen.

Für ein „echtes“ Arduino Shield sehe ich nur die folgende Alternative:
 - Arduino UNO auf 3.3V umstellen
 - SPI-RAM (hat auch 3.3V !!) um die Original Rx/Tx Pins zu nutzen

Irgendwie alles unbefriedigend :-(

Besser sieht es mit der Arduino Pro Version aus. Die gibt es für 3.3V 
UND 20 MHz OHNE USB. Auf dieses Shield könnte der RAM (SRAM oder SPI) 
die SD-Card, die RTC und der V24-USB Wandler. Das Shield würde also bis 
auf den Prozessor das komplette CP/M System zur Verfügung stellen. Doch 
auch das macht eigentlich wenig Sinn. Dann kann man ja auch gleich auf 
[1] zurückgreifen.

[1] Beitrag "Re: CP/M auf ATmega88"

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ich habe in der Mittagspause die Varianten nochmals überdacht.
Was haltet ihr von der folgenden Kombination:
-  Arduino UNO OHNE Änderungen (5V und Rx/Tx auf den üblichen Pins)
als COM 2 für CP/M
-  CP/M Shield mit 5V und 3.3V (Spannungsregler auf dem Shield)
-  Levelshifter nur für für SD-Card und SPI-RAM ( z.B. TXB0108)
-  RTC und I2C Porterweiterung auf 5V
-  USB oder V24 für Terminal
-  wenn noch Platz ist Propeller mit VT100 auf Shield
Um das System schnell wieder zum Laufen zu bringen, müsste nur die RAM 
Lib gegen eine neue SPI-RAM Lib ausgetauscht werden. Aber dazu könnte 
Leo C. ja vielleicht einen Kommentar zu abgeben.

von Marcel A. (dl1ekm)


Lesenswert?

Klingt gut - aber letztlich gehen schon die Vorteile des UNO in den 
Hintergrund - es wird letztlich ja doch "nur" die CPU wiederverwendet. 
Man müsste dann 2 USB-Kabel anschließen...
Aber was meint ihr?

Mir kommt gerade noch eine andere (wahrscheinlich dumme) Frage: Die 
RAM-Chips für die 4-bit und 8-bit Adressierung (HW Varianten 1 + 2 
(Stick)) sind doch die gleichen, oder?

von Leo C. (rapid)


Lesenswert?

> Mir kommt gerade noch eine andere (wahrscheinlich dumme) Frage: Die
> RAM-Chips für die 4-bit und 8-bit Adressierung (HW Varianten 1 + 2
> (Stick)) sind doch die gleichen, oder?

Edit, da Frage falsch gelesen:
Ja.

: Bearbeitet durch User
von Jens (Gast)


Lesenswert?

Joe G. schrieb:
> Was haltet ihr von der folgenden Kombination:
> -  Arduino UNO OHNE Änderungen (5V und Rx/Tx auf den üblichen Pins)
> als COM 2 für CP/M
> -  CP/M Shield mit 5V und 3.3V (Spannungsregler auf dem Shield)
> -  Levelshifter nur für für SD-Card und SPI-RAM ( z.B. TXB0108)
> -  RTC und I2C Porterweiterung auf 5V
> -  USB oder V24 für Terminal
> -  wenn noch Platz ist Propeller mit VT100 auf Shield
Für mich klingt das sehr vernünftig.

Mit Propeller drauf, wird der Platz wahrscheinlich zu knapp. Oder man 
macht den Propeller gleich auf eine zweite Platine, so das man den noch 
obenauf stapeln kann. Der braucht ja nur RX und TX.
Die RX-Signale (von Tastatur und UART) muß man irgendwie verodern.
Also irgendwie so:
1
 
2
=Propeller-Shield=
3
 |||||||  ||||||
4
===CP/M-Shield====
5
 |||||||  ||||||
6
===Arduino-Uno====
VGA und PS/2 gibt es auf dem Propeller-Shield. RAM und RTC auf dem 
CP/M-Shield und UART und CPU auf dem Arduino.

> Um das System schnell wieder zum Laufen zu bringen, müsste nur die RAM
> Lib gegen eine neue SPI-RAM Lib ausgetauscht werden.
Sollte machbar sein. Die Umstellung auf SIMM-Module war auch nicht 
wirklich schwer.

Viele Grüße,
Jens

von Konrad S. (maybee)


Lesenswert?

Joe G. schrieb:
> SPI-RAM (hat auch 3.3V !!)

23LCV1024 geht mit 2.5V bis 5.5V.

von Leo C. (rapid)


Lesenswert?

Da jetzt "alle" SPI-RAM wollen, versuchen wir mal herauszufinden, ob die
Geschwindigkeit davon im aktzeptablen Bereich liegen kann.

Zum Vergleich 8-Bit DRAM
Memory Read braucht 11 Takte.
Die Z80-Interpreter Hauptschleife braucht mindestens 25 Takte 
(NOP-Befehl). Davon die 11 Takte für den Opcode-Fetch. Bei 20MHz 
AVR-Takt würde das einem Z80 mit 3,2MHz entsprechen. Gemessen[1] hatte 
ich mal 3,1Mhz. Die Differenz dürfte an den 1ms Timer- und den 
Refresh-Interrupts liegen.

SPI-RAM ohne Cache
Die Berechnungen erfolgen unter optimalen Bedingungen: Macro, also ohne 
Call/Ret Overhead und alle benötigten Daten in Registern. Es kann also 
nur schlechter werden.

  'CS Low' + 'Out CMD+Address' + 'In Data' + 'CS High'
=     2    +    3 x (16 +1)    + (16 + 1)  +    2
= 55 + 1x17
= 72

Der NOP-Befehl würde 72+14 = 86 Takte brauchen, entsprechend
ca. 0,93 MHz Z80.

16-Bit Zugriffe könnten optimiert werden:
(55 + 2x17)/2 = 44,5 Takte pro Byte.
Bei angenommenen 20% 16-Bit Zugriffen (wer macht mal ein Profiling?) 
hätten wir ca 66 Takte pro RAM-Zugriff.

SPI-RAM mit Cache
Als hier der Vorschlag SPI-RAM kam, war meine erste Idee, daß das mit 
Cache vielleicht sogar schneller laufen könnte, als DRAM. Schließlich 
haben wir noch fast 600 Byte RAM frei. Das würde für einen 512-Byte 
großen Cache ausreichen. Wenn wir auf den FAT-Buffer verzichten, hätten 
wir sogar 1024 Byte für den Cache.

Welchen Cache brauchen wir?
Der einfachste Cache[2], mit einem einzigen Block in passender Größe, 
wie z.B. in [3], ist beim Z80 wg. der geringen Lokalität von Code und 
Daten wenig sinnvoll. Meiner Meinung nach ist er völlig ungeeignet, da 
jeder Z80-Befehl mit Datenzugriff mindestens 2 Cache-Misses erzeugen 
würde, wenn Code und Daten nicht im gleichen Block liegen. Letzteres ist 
aber sehr wahrscheinlich. Sogar dann noch, wenn der Block 1024 Byte groß 
wäre.

Das andere Extrem wäre ein mehrfach-assoziativer Cache mit möglichst 
vielen kleinen Blöcken. Diese Variante scheidet offensichlich aus, weil 
die Suche im Tag-RAM nach dem richtigen Block viel zu lange dauert. Und 
der Verwaltungsaufwand für eine Verdrängungsstrategie käme noch dazu.

Bleibt "Direct Mapped" (einfach assoziativ) mit optimaler Blockgröße und 
-Anzahl.

Damit der Cache einen Vorteil bringt, sollte der Zugriff bei einem Hit 
schätzungsweise in der Größenordnung 20 Takte oder darunter liegen. Bei 
einem Miss wird auf jeden Fall ein Vielfaches benötigt. Bei meinen 
ersten Versuchen mit 32 Blöcken a 16 Byte (oder umgekehrt) brauchte ich 
aber schon mehr als 15 Takte, um herauszufinden, ob der benötigte Block 
im Cache ist. Die Berechnung des Offsets braucht dann nochmal mindestens 
das Gleiche.

Aber vielleicht funktioniert das Ganze ja mit 4 Blöcken a 256 Byte. 
Diese Variante würde sich extrem optimieren lassen. Das Low-Byte der 
Addresse könnte z.B. direkt als Offset dienen. Die Valid- und 
Dirty-Flags könnten (falls überhaubt benötigt) evtl. in Registern 
gehalten werden.

Leider habe ich nicht die Zeit, um das alles auszuprobieren. Stattdessen 
würde ich mich lieber um mein Z180-Projekt kümmern, das ja auch so schon 
nur sehr schleppend voran kommt.

[1] Beitrag "Re: CP/M auf ATmega88"
[2] http://de.wikipedia.org/wiki/Cache
[3] 
http://www.parallax.com/sites/default/files/downloads/AN012-SRAM-v1.0.pdf

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Da jetzt "alle" SPI-RAM wollen, versuchen wir mal herauszufinden, ob die
> Geschwindigkeit davon im aktzeptablen Bereich liegen kann.

Das war doch schon eine sehr gute Abschätzung, danke!
SPI-RAM war ja auch nur ein Zugeständnis an einen unveränderten Arduino 
UNO. Bei der Latch-RAM Variante müsste halt der ARDUIONO umverdrahtet 
werden. Letztlich ist es sinnvoller die Ressourcen in den Z180 zu 
stecken. AVR CP/M läuft ja :-)

von Jens (Gast)


Lesenswert?

Danke für die Abschätzung. SPI-RAM ist also zu langsam.

Dann die Variante mit den Adress-Latches.
Lohnt es sich dort ein drittes Latch (für die 'Bankadresse') einzubauen?
Kennt sich jemand aus, wie das Bankswitching realisiert sein muß, damit 
CP/M 3.0 damit was anfagen kann? Dürfen die Bänke 64k groß werden, oder 
müssen die kleiner sein (16k)?

Joe G. schrieb:
> Bei der Latch-RAM Variante müsste halt der ARDUIONO umverdrahtet
> werden.
Alternativ mußte man 4 Datenleitungen über Port C und die anderen über 
Port D abhandeln. Geht natürlich wieder auf die Performance.

Hier nochmal der Link zum Schaltplan:
http://arduino.cc/de/uploads/Main/Arduino_Uno_Rev3-schematic.pdf

Umverdrahten würde ich vermeiden wollen.

Grüße,
Jens

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Jens schrieb:
> Danke für die Abschätzung. SPI-RAM ist also zu langsam.

Das habe ich nicht gesagt. ;-)
Dazu müßte zu langsam erst mal definiert werden. Wie schnell es mit 
optimaler Cache-Strategie werden kann, ist auch noch offen. Es ist aber 
abzusehen, daß es auch damit deutlich langsamer bleiben wird, als 8-Bit 
DRAM.

> Dann die Variante mit den Adress-Latches.
> Lohnt es sich dort ein drittes Latch (für die 'Bankadresse') einzubauen?

Das Latch ist bereits im µC vorhanden, da die Adressleitungen A16-A18 
"ungemultiplexed" auf die µC-Ports gehen.

> Kennt sich jemand aus, wie das Bankswitching realisiert sein muß, damit
> CP/M 3.0 damit was anfagen kann? Dürfen die Bänke 64k groß werden, oder
> müssen die kleiner sein (16k)?

Siehe Bild (Quelle [1]). Die Größe des Common-Bereichs ist nicht 
festgelegt. Typische Werte liegen zwischen 4K und 32K. Wie man dieses 
Modell in Hardware (bzw. im Emulator) realisiert, ist nochmal ein 
anderes Thema.

> Joe G. schrieb:
>> Bei der Latch-RAM Variante müsste halt der ARDUIONO umverdrahtet
>> werden.
> Alternativ mußte man 4 Datenleitungen über Port C und die anderen über
> Port D abhandeln. Geht natürlich wieder auf die Performance.

2 Leitungen verlegen würde reichen:
1
Arduino UNO:
2
     ---------------------------------------------------------------------------------
3
     |                          Pin Nummer ATmega (28 pol.)                          |
4
     +-------------------------------------------------------------------------------+
5
     |13 |12 |11 | 6 | 5 | 4 | 3 | 2 |19 |18 |17 |16 |15 |14 |28 |27 |26 |25 |24 |23 |
6
     ---------------------------------------------------------------------------------
7
     |         Port D                |         Port B        |         Port C        |
8
     +-------------------------------+-----------------------+-----------------------+
9
     | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 5 | 4 | 3 | 2 | 1 | 0 | 5 | 4 | 3 | 2 | 1 | 0 |
10
     |                        TX  RX |SCK DO  DI  CS         |SCL SDA                |
11
     +-------------------------------+-----------------------+-----------------------+
12
DRAM |D3  D2  D1  D0  D3  D2         |                D1  D0 |                       |
13
     |A7  A6  A5  A4  A3  A2         |A10 A9  A8      A1  A0 |        WE  OE  CAS RAS|
14
     +-------------------------------+-----------------------+-----------------------+
15
SRAM |AD7 AD6 AD5 AD4 AD3 AD2        |A18 A17 A16     AD1 AD0|        WE  OE  ASH ASL|
16
     +-------------------------------+-----------------------+-----------------------+
17
18
ASH: Address Strobe High
19
ASL: Address Strobe Low
Da die Ansteuerung der beiden Latches im Prinzip weniger anspruchsvoll 
ist, als die Steuerung des DRAMs, ließe sich evtl. noch was optimieren.



[1] 
http://bitsavers.informatik.uni-stuttgart.de/pdf/digitalResearch/cpm_plus/CPM_Plus_System_Guide_Jan83.pdf

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Leo C. schrieb:
> 2 Leitungen verlegen würde reichen:
Der Performanceverlust um aus Port D und Port B wieder ein 8-Bit Wert zu 
basteln, dürfte deutlich geringer sein als den RAM über SPI anzusteuern.

DRAM sollte sicherlich
     +-------------------------------+
DRAM |D7  D5  D5  D4  D3  D2         |
     |A7  A6  A5  A4  A3  A2         |
     +-------------------------------+
heißen.

Als VT100 habe ich gerade eine erweiterte Version für das Z180 Projekt 
in Betrieb genommen. Darauf gibt es noch einen Signalquellenumschalter. 
Somit kann vom Terminal die Eigangsquelle ausgewählt werden. Dieses 
Design ließe sich sicherlich auf ein passendes Shield bringen.

von Marcel A. (dl1ekm)


Lesenswert?

Wenn ich das richtig verstanden habe würde dann die Leitungen PD0/1 und 
PB0/1 vertauscht werden - rein in Software. Ist das denn von der 
Performance her realistisch?

Ansonsten denke ich auch, dass die UNOs dann als Plattform keinen Sinn 
machen, wenn außer der CPM nicht weiter verwendet werden kann.

Meine ursprüngliche Idee war eigentlich nur ein "RAM-Shield" mit 2 x 
RAM-IC und SD-Card zu ergänzen und fertig :-)

von Marcel A. (dl1ekm)


Lesenswert?

Noch mal eine Frage zu den Anfängen: Wozu ist eigentlich die RST-Leitung 
auf dem USB-Seriell-Adapter auf dem CPM-Stick (HW-V2) da? Diese wird da 
mit dem Reset des ATmega verbunden...? Kann man dann aus dem Terminal 
den Stick resetten - wie?
Peter Sieg hatte einmal angemerkt, dass diese NICHT mit dem AVR-Reset 
verbunden werden sollte - ist sie aber.

Da die 4Bit-RAM-Version ja nicht wirklich auf Z80 gebracht werden kann 
und ich die HW V3 (Joes all-in-one) schon habe wollte ich mir den mal (8 
Bit RAM) aufbauen. Aber die meisten CP2102-Adapter haben den RST nicht 
herausgeführt. Stellt sich also die Frage, ob der überhaupt notwendig 
ist.

von Leo C. (rapid)


Lesenswert?

Marcel A. schrieb:
> Da die 4Bit-RAM-Version ja nicht wirklich auf Z80 gebracht werden kann

Wer behauptet denn so was?
Das Ding ist schon lange "auf Z80". Daß es angeblich nicht funktioniert, 
wahrscheinlich gedebuged werden müßte, und dies zur Zeit niemand machen 
will, ist eine andere Geschichte...

von Marcel A. (dl1ekm)


Lesenswert?

Leo C. schrieb:
> Marcel A. schrieb:
>> Da die 4Bit-RAM-Version ja nicht wirklich auf Z80 gebracht werden kann
>
> Wer behauptet denn so was?
> Das Ding ist schon lange "auf Z80". Daß es angeblich nicht funktioniert,
> wahrscheinlich gedebuged werden müßte, und dies zur Zeit niemand machen
> will, ist eine andere Geschichte...

Ups - so habe ich das ja nicht gemeint. Ich habe da leider zu wenig Plan 
von, um selber Hand anzulegen. Muss ja auch nicht sein - ist doch so 
schon super.

von Leo C. (rapid)


Lesenswert?

> Ups - so habe ich das ja nicht gemeint.

Dann ist ja gut. :)
Du hast zwar 2 mal im Abstand von ein paar Wochen geschrieben, daß es 
nicht wichtig sei, aber es scheint Dich ja doch zu beschäftigen...
Deshalb habe ich mal zurück geblättert.

Marcel A. schrieb:
> So, ich habe mal meinen ersten Lochraster-Aufbau von "anno dazumal"
> ausgegraben (siehe Foto), den mit ATMega88 und 4bit RAM.
> Ich habe dem dann einen 328p spendiert und wollte die aktuelle
> "firmware" mit Z80-Unterstützung draufbringen.

Das klingt so, als wäre das Ding "anno dazumal" schon mal gelaufen. 
"Anno dazumal" gab es (mindestens) zwei 4-Bit Varianten, die leider 
schön öfter für Verwirrung gesorgt haben. In der aktuellen Software ist 
aber nur noch eine Pin-Belegung vorgesehen. Du könntest Deine 
Verdrahtung mal mit der Definition in config.inc vergleichen. 
Insbesondere diese Pins:
[avrasm]
;Port C
.equ RAM_D0  = 0
.equ RAM_D1  = 1
.equ RAM_D2  = 2
.equ RAM_D3  = 3
.equ RAM_W  = 4
.equ RAM_CAS  = 5
[avrasm]

Sicherheitshalber den Rest aber auch. Bei Unterschieden wäre es wohl am 
Besten, wenn Du Deine Verdrahtung änderst.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Marcel A. schrieb:
> Wozu ist eigentlich die RST-Leitung
> auf dem USB-Seriell-Adapter auf dem CPM-Stick (HW-V2) da? Diese wird da
> mit dem Reset des ATmega verbunden...? Kann man dann aus dem Terminal
> den Stick resetten - wie?

Das Reset-Pin liegt einfach nur zur freien Verfügung auf der LP. In der 
Bestückungsvariante FTDI wird es nicht benutzt. Man könnte es jedoch auf 
RTS/CTS oder DTR/DSR legen und vom Terminal darüber Reset auslösen 
(müßte jedoch noch programmiert werden)

von Marcel A. (dl1ekm)


Lesenswert?

Leo C. schrieb:


> ;Port C
> .equ RAM_D0  = 0
> .equ RAM_D1  = 1
> .equ RAM_D2  = 2
> .equ RAM_D3  = 3
> .equ RAM_W  = 4
> .equ RAM_CAS  = 5

>
> Sicherheitshalber den Rest aber auch. Bei Unterschieden wäre es wohl am
> Besten, wenn Du Deine Verdrahtung änderst.

Hallo Leo,

ich habe noch mal alles geprüft. Ich habe wohl die 4-Bit Version "neu", 
also mit getauschten PC1/PC4. Verbindungen stimmen alle.
Derzeit läuft darauf eine Version für 8080 auf dem ATmega88. Ich kann 
leider nicht sagen, welche Version, es meldet sich mit 1.0...
Ich vermute aber mal, dass ich eine Version drin habe mit nur einem 
asm-file kompiliert und folgendem Inhalt:
1
#ifndef DRAM_DQ_ORDER      /* If this is set to 1, the portbits  */
2
  #define DRAM_DQ_ORDER 1    /* for DRAM IO3 and WE are swapped.    */
3
...
4
;Port C
5
#if DRAM_DQ_ORDER == 1
6
.equ ram_d1 =  1
7
.equ ram_w  =  4
8
#else /* original */
9
.equ ram_d1 =  4
10
.equ ram_w  =  1
11
#endif
12
.equ ram_d0 =  0
13
.equ ram_d2 =  2
14
.equ ram_d3 =  3
15
.equ ram_cas=  5
16
17
.equ P_W   = PORTC
18
.equ P_CAS = PORTC
19
20
.equ RAM_DQ_MASK = (1<<ram_d3)|(1<<ram_d2)|(1<<ram_d1)|(1<<ram_d0)
21
.equ PC_OUTPUT_MASK = (1<<ram_cas)|(1<<ram_w)
22
#endif

Die HW müsste das hier sein (ohne FTDI):
[[Beitrag "Re: CP/M auf ATmega88"]]

Also das scheint es nicht zu sein.

: Bearbeitet durch User
von Marcel A. (dl1ekm)


Lesenswert?

Teilweise sitzt das Problem (Z80 - 4Bit-Ram) auch vor der Tastatur... 
Ich hatte zwar das neue HEX in den 328p geflashed - aber die Fuses nicht 
angepasst - lief immer mit intern 8MHz.

Ich habe ihn nun genau wie den M88 auf "Ext-Full-Swing-Osz" (mit dem 
Eclipse-Plugin) eingestellt - lfuse=77
Oder wäre "Ext Osz > 8MHz" besser?

Nun zeigt er wenigstens "Müll" im Terminal an und zwar im richtigen 
Verhältnis/Startverhalten.... Der Müll ist aber immer das gleiche 
Zeichen. Mit den seriellen Einstellungen habe ich schon gespielt - 
bisher erfolglos. Aber ich denke, da könnte zumindest ein Teil meines 
Problems liegen.

von Leo C. (rapid)


Lesenswert?

> Teilweise sitzt das Problem (Z80 - 4Bit-Ram) auch vor der Tastatur...

Das Problem sitzt fast immer vor der Tastatur. Man weiß nur oft nicht, 
vor welcher... ;-)

> lfuse=77

Wenn das Hex ist, ist die "Divide clock by 8 internally; [CKDIV8=0]" 
Fuse aktiviert.

Meine ATmega328P Fueses stehen auf:
avrdude: safemode: lfuse reads as D6
avrdude: safemode: hfuse reads as D2
avrdude: safemode: efuse reads as 7

ps:
Zum Rumspielen mit verschiedenen Einstellungen ist der "Engbedded Atmel 
AVR® Fuse Calculator" gut zu gebrauchen:
http://www.engbedded.com/fusecalc/

: Bearbeitet durch User
von Marcel A. (dl1ekm)


Lesenswert?

Ja, habe ich mir gerade auch schon überlegt. Probier ich gleich aus!

von Marcel A. (dl1ekm)


Lesenswert?

So, das mit dem Takt war schon mal das Grundproblem - eigentlich ein 
Klassiker... Grrrr (Hau mit dem Kopf auf die Tischkante....).

Nun, ich habe dann sicherheitshalber auch noch mal den aktuellen Stand 
(V 154) übersetzt und geflashed. Es zeigt die gleiche Ausgabe wir der 
manuell angepasste Stand auf dem 328er:
1
CPM on an AVR, v3.2 r0
2
Testing RAM: fill...wait...reread...
3
Addr xx yy
4
0000 00 FF -------- XXXXXXXX
5
0001 01 FF -------- XXXXXXX-
6
0002 02 FF -------- XXXXXX-X
7
0003 03 FF -------- XXXXXX--
8
0004 04 FF -------- XXXXX-XX
9
0005 05 FF -------- XXXXX-X-
10
0006 06 FF -------- XXXXX--X
11
0007 07 FF -------- XXXXX---
12
0008 08 FF -------- XXXX-XXX
13
0009 09 FF -------- XXXX-XX-
14
000A 0A FF -------- XXXX-X-X
15
000B 0B FF -------- XXXX-X--
16
000C 0C FF -------- XXXX--XX
17
000D 0D FF -------- XXXX--X-
18
000E 0E FF -------- XXXX---X
19
000F 0F FF -------- XXXX---- System halted!

Das dort r0 angezeigt wird liegt wohl auch daran, dass ich es als 
Tar-Ball geladen habe und nicht richtig ausgeckekt habe. Muss mich mal 
mit SVN befassen...
1
Warning: unable to find Subversion 1.7 'working copy' metadata.
2
This directory may not be under version control.

von Marcel A. (dl1ekm)


Lesenswert?

Beim Lesen der Make-Meldungen ist mir aufgefallen, dass er die 8-Bit 
Files für dram verwendet hat - musste da noch einen Schalter umlegen.
Jetzt verwendet er die 4bit-Files-aber gleiches Ergebnis.

ALso weitersuchen... :-)

von Leo C. (rapid)


Lesenswert?

Marcel A. schrieb:
> CPM on an AVR, v3.2 r0
> Testing RAM: fill...wait...reread...
> Addr xx yy
> 0000 00 FF -------- XXXXXXXX
> 0001 01 FF -------- XXXXXXX-

Egal was ins RAM geschrieben wird, es wird immer 0xFF zurück gelesen. 
Sieht nach einem Wrie-Only-Memory aus. ;) Könnte aber auch an der 
Initialisierung liegen.

Früher (TM) sah die Portinitialisierung mal so aus:
1
; - Setup Ports
2
  ldi   temp,(1<<PUD)    ;disable pullups
3
  outm8  P_PUD,temp
4
  ldi  temp,0xFF
5
  out   PORTD,temp    ;all pins high
6
  out   PORTB,temp
7
  out   PORTC,temp
8
  out   DDRD,temp    ; all outputs
9
  out  DDRB,temp
10
  out  DDRC,temp
Du könntest in init.asm den Teil zwischen
"Setup Ports" und "outm8 TIMSK1,_0"
mal durch diese Zeilen ersetzen.

von Marcel A. (dl1ekm)


Lesenswert?

So, wir sind fast am Ziel :-)

Die oben genannte Änderung führ zur folgenden Ausgabe:
1
CPM on an AVR, v3.2 r0
2
Testing RAM: fill...wait...reread...
3
Initing mmc...
4
5
A: CP/M partition at: 062, size: 7657KB.
6
B: CP/M partition at: 15376, size: 7688KB.
7
C: CP/M partition at: 30752, size: 7688KB.
8
D: CP/M partition at: 46128, size: 7688KB.
9
Partinit done.
10
Ok, Z80-CPU is live!

Danach bleibt der Cursor aber stehen.
Kann das daran liegen, dass das CPM auf der SD noch für einen 8080 ist?

Wenn ich die SD-Card aus dem HW-4 Projekt (mit Propeller) reinstecke, 
kommt:
1
CPM on an AVR, v3.2 r0
2
Testing RAM: fill...wait...reread...
3
Initing mmc...
4
5
A: FAT16 File-Image 'A' at: 003, size: 256KB.
6
B: FAT16 File-Image 'B' at: 007, size: 256KB.
7
C: FAT16 File-Image 'C' at: 011, size: 256KB.
8
D: FAT16 File-Image 'D' at: 023, size: 8192KB.
9
E: FAT16 File-Image 'E' at: 015, size: 250KB.
10
F: FAT16 File-Image 'F' at: 019, size: 256KB.
11
G: FAT16 File-Image 'G' at: 283, size: 8192KB.
12
Partinit done.
13
Ok, Z80-CPU is live!
14
15
62k cp/m vers 2.2
16
17
A>dir

Bei Eingabe von "dir" stürzt er aber ab.

Hängt das ggf. mit diesen Einstellungen im MakeFile zusammen 
(FAT/CPM-Support)?
1
#FAT16_SUPPORT = 0
2
#CPMDSK_SUPPORT = 0
3
#MMCBOOTLOADER = 0


Das "Problem" in der Init.asm für 4-bit liegt für mein (rudimentäres) 
Assembler-Verständnis darin, dass in der aktuellen Fassung:
1
; - Setup Ports
2
3
;  ldi   temp,(1<<PUD)    ;disable pullups
4
;  outm8  P_PUD,temp
5
  out   PORTD,_255    ;all pins high (enables pullup on input ports)
6
  out   PORTB,_255
7
  out   PORTC,_255
8
  out   DDRD,_255    ; PD all outputs
9
#if I2C_SUPPORT
10
  ldi  temp,~((1<<SCL)|(1<<SDA))
11
  out  DDRC,temp 
12
#endif
13
#if DRAM_8BIT
14
  ldi  temp,~(1<<RXD)
15
  out  DDRB,temp
16
#endif

die "out DDRC" und "out DDRB" in den IF-Schachteln stecken und daher bei 
4-Bit nicht angesprochen werden und damit die Ports nicht richtig 
initialisiert werden.

von Leo C. (rapid)


Lesenswert?

Marcel A. schrieb:
> Kann das daran liegen, dass das CPM auf der SD noch für einen 8080 ist?

Nein, daß könnte der Z80-Emulator (mindestens) genau so gut. Es liegt 
eher daran, daß das BIOS nicht mehr zu der Schnittstelle im Emulator 
paßt.

> Wenn ich die SD-Card aus dem HW-4 Projekt (mit Propeller) reinstecke,

Welcher Firmwarestand ist den auf dem Gerät drauf?
Könnte das gleiche Problem sein, ich glaubs aber eher nicht. 
Wahrscheinlich ist noch was anderes faul.

Marcel A. schrieb:
> die "out DDRC" und "out DDRB" in den IF-Schachteln stecken und daher bei
> 4-Bit nicht angesprochen werden und damit die Ports nicht richtig
> initialisiert werden.

Die IF-Schachteln habe ich erst kürzlich eingebaut, eben wegen dem 4-Bit 
RAM. War offensichtlich ein Schuß in den Ofen.


Fast vergessen:
Ich wollte ein Image mitschicken, daß mit Deinem Softwarestand auf jeden 
Fall laufen sollte. Leider habe ich gerade ein Problem.

: Bearbeitet durch User
von Marcel A. (dl1ekm)


Lesenswert?

So - es läuft FAST alles.

Das meine Karte aus der alten HW gar nicht geht ist klar - das war noch 
das Partitions-Schema und nicht das FAT16-System.

Den Fehler mit dem Absturz nach dem Boot habe ich sowohl mit meinem CPM 
Image als auch mit dem von Leo. Aber nicht immer. Meistens startet er 
durch, ich kann auch einiges machen.

Es fällt aber auf, dass einige Zeichen "komisch" sind...

Ich konnte sogar Turbo Pascal starten

Der Aufruf von kompilierten COM-Dateien geht dafür aber wieder.

Manchmal klappt auch der Wechsel der Disketten - manchmal nicht.
Habe auch mal die Geschwindigkeit von 57600 auf 38400 geändert - keine 
Änderung.

Hier mal ein Auszug, was sich so tut und was für Fehlermeldungen kommen. 
Ich würde sagen: Im Grund geht es jetzt - aber irgendwo ist noch was 
faul.

Was wäre eigentlich der Vorteil der 8bit-Variante? War das nur 
Geschwindigkeit?

Leo, das mit den IFs war sicher kein Schuss in den Ofen. Das war schon 
genau das Problem, wahrscheinlich müsste man die IFs nur anders 
aufbauen.

1
A: FAT16 File-Image 'A' at: 003, size: 256KB.
2
B: FAT16 File-Image 'B' at: 007, size: 256KB.
3
C: FAT16 File-Image 'C' at: 011, size: 256KB.
4
D: FAT16 File-Image 'D' at: 023, size: 8192KB.
5
E: FAT16 File-Image 'E' at: 015, size: 250KB.
6
F: FAT16 File-Image 'F' at: 019, size: 256KB.
7
G: FAT16 File-Image 'G' at: 283, size: 8192KB.
8
Partinit done.
9
Ok, Z80-CPU is live!
10
11
62k cp/m vers 2.2
12
13
A>c:
14
C>dir
15
62k cp/m vers 2.2
16
17
A>dir
18
A: CPMSTAT  COM : DDT      COM : DDTZ     COM : TD       CFG
19
A: COPY     CFG : LDTIM    COM : SIMHCLOK REL : AVRCLOCK REL
20
A: COPY     UPD : COPY     COM : CPU      COM : DO       COM
21
A: DUMP     COM : ED       COM : TD       COM : WIPE     COM
22
A: STAT     COM
23
A>
24
25
B>turbo
26
27
ZSDOS error on Á: No Drive
28
Call: 14
29
30
B>
31
--------------------------------- 
32
  CPM on an AVR, v3.2 r0
33
Testing RAM: fill...wait...reread...
34
Initing mmc...
35
36
A: FAT16 File-Image 'B' at: 007, size: 256KB.
37
B: FAT16 File-Image 'C' at: 011, size: 256KB.
38
C: FAT16 File-Image 'D' at: 023, size: 8192KB.
39
D: FAT16 File-Image 'E' at: 015, size: 250KB.
40
E: FAT16 File-Image 'F' at: 019, size: 256KB.
41
F: FAT16 File-Image 'G' at: 283, size: 8192KB.
42
Partinit done.
43
Ok, Z80-CPU is live!
44
45
62k cp/m vers 2.2
46
47
A>dir
48
A: TEST     BAK : TINST    COM : TINST    DTA : TINST    MSG
49
A: TURBO    COM : TURBO    MSG : TURBO    OVR : TEST     COM
50
A: TEST     PAS : BLOCK    PAS : BLOCK    BAK : BDOS     COM
51
A: BDOS     PAS : BDOS     BAK : RTCDEMO  PAS : RTCDEMO  COM
52
A: ANSITEST BAK : ANSITEST PAS
53
A>test
54
Das ist ein AVR CP/M Test in Turbo Pascal 3.0
55
Hello Word VT100 Test !
56
57
A>
58
59
Logged drive: A
60
61
Work file:
62
Main file:
63
64
Edit     Compile  Run   Save
65
66
eXecute  Dir      Quit  compiler Options
67
68
Text:     ð bytes (8118-8118)
69
Free: ððððð bytes (8119-E006)
70
71
>
72
Dir mask:
73
TEST     BAK : TINST    COM : TINST    DTA : TINST    MSG : TURBO    COM
74
TURBO    MSG : TURBO    OVR : TEST     COM : TEST     PAS : BLOCK    PAS
75
BLOCK    BAK : BDOS     COM : BDOS     PAS : BDOS     BAK : RTCDEMO  PAS
76
RTCDEMO  COM : ANSITEST BAK : ANSITEST PAS
77
78
Bytes Remaining On A: ðððk
79
>
80
81
--- Editor gestartet (test.pas):
82
83
^K^K^K^K^K 1    Col 69  Insert    Indent  A:TEST.PAS
84
     C  A =1D BC =611E DE =423F HL =1FB7 SP=E3FC PC=7CEB       76 61 6C
85
  H NC  a'=00 bc'=0000 de'=0000 hl'=0000 IX=7BF3 IY=446C I=00       CPU halted!
86
 
87
A>b:
88
B>dir
89
B: C        CCC : C        SUB : CC2      COM : CC       COM
90
B: CLIB     COM : CLINK    COM : DEFF2    CRL : DEFF     CRL
91
B: BDS      LIB : STDIO    H   : TTT2     C   : MMIND    C
92
B: OTHELLO  C   : STONE    C   : ED       COM : OTHELLO  CRL
93
B: STONE    $$$
94
B>ed
95
96
Bdos Err On P: Select

von Jens (Gast)


Lesenswert?

Marcel A. schrieb:
> Es fällt aber auf, dass einige Zeichen "komisch" sind...
Wirklich sehr mysteriös.

> Habe auch mal die Geschwindigkeit von 57600 auf 38400 geändert - keine
> Änderung.
>
> Hier mal ein Auszug, was sich so tut und was für Fehlermeldungen kommen.
> Ich würde sagen: Im Grund geht es jetzt - aber irgendwo ist noch was
> faul.
Ich hätte da immer noch das Speichertiming im Verdacht.

> Was wäre eigentlich der Vorteil der 8bit-Variante? War das nur
> Geschwindigkeit?
Meines Erachtens: ja

Grüße,
Jens

von Marcel A. (dl1ekm)


Lesenswert?

Vielleicht sollte ich mal den Speicher tauschen?

Hm... Es stellt sich die Frage, ob es wirklich den Aufwand lohnt, das 
Thema 4Bit "gerade" zu biegen. Einziger Grund kann ja letztlich nur 
sein, dass die DRAMs nicht mehr ganz so leicht zu beschaffen sind.

Ich denke, ich werde als nächsten mal den "Stick" bauen, dann habe ich 
fast alles (alte) HW zusammen und kann dann hoffentlich mit dem Z180 
Projekt anfangen.

Über Weihnachten werde ich mal mehr über den Z80 und CPM lesen.
(Rolf-Dieter Klein's Buch, Rodnay Zak, NCR Kleinkomputer.... Schon nett 
:-))

von Leo C. (rapid)


Lesenswert?

> Vielleicht sollte ich mal den Speicher tauschen?

Eher nicht. Auch wenn es wirklich Timing-Probleme sind, heißt das nicht, 
das es am RAM-Chip liegt. Ich vermute aber eher, daß die Initialisierung 
immer noch nicht in Ordnung ist, bzw. daß Port-Register irgendwo 
verändert werden, wo sie es nicht sollten. Es ist etwas mühsam, das 
durch starren auf den Bildschirm herauszufinden. Vielleicht stecke ich 
mir doch mal so ein System zusammen. Dieses Jahr aber nicht mehr.

von Cord J. (cord)


Lesenswert?

Hallo,
ich möchte auch endlich mal den CP/M Computer nachbauen.
Hat noch jemand eine von diesen Platinen übrig?

http://www.mikrocontroller.net/articles/Datei:Avr_cpm2.jpg

Wenn nicht, würde ich gerne welche fertigen lassen. Hat sonst noch 
jemand Interesse? Ich hätte auch noch ein paar Speicherchips KM44C4100 
oder M5M44256
abzugeben.

Gruß
  Cord

von Marcel A. (dl1ekm)


Angehängte Dateien:

Lesenswert?

Hi,

ich habe gerade das CP/M-Stick-Layout (Peter Sieg) überarbeitet (ohne 
FTDI, für gängige USB-Sticks, etwas kleiner und für "günstigere" SD Card 
Reader.

Die Platinen sind bestellt, dauert aber eine Weile. Teile wie USB-Sticks 
und Reader habe ich auch... Bei Bedarf einfach melden.

Gruß
Marcel

von chris_ (Gast)


Lesenswert?

Nicht ganz so schlank wie CPM auf dem Atmega88, aber vielleicht trotzdem 
interessant: CPM auf dem Arduino Due.
http://sourceforge.net/projects/cpmduino/

von Peter S. (petersieg)


Lesenswert?

Marcel A. schrieb:
> Hi,
>
> ich habe gerade das CP/M-Stick-Layout (Peter Sieg) überarbeitet (ohne
> FTDI, für gängige USB-Sticks, etwas kleiner und für "günstigere" SD Card
> Reader.
>
> Die Platinen sind bestellt, dauert aber eine Weile. Teile wie USB-Sticks
> und Reader habe ich auch... Bei Bedarf einfach melden.
>
> Gruß
> Marcel

@Marcel: Das PCB Layout/Schaltung stammt von Joe G., nicht von mir.
Kannst du bitte deine Überarbeitete Version als Eagle Dateien hier zur 
Verfügung stellen? Welcher SD Slot ist jetzt verwendet?

Peter

von Marcel A. (dl1ekm)


Lesenswert?

Hallo Peter,

die egale-Datei ist auf meiner Homepage

http://www.retro-compi.de/index.php/cpm-z80-projekte/cpm-stick/cpmstick-hardware

unten zum Download verfügbar.

Es passen die Adapter z.B. von "Pollin" oder aus China. Ich habe auch 
gute Erfahrungen mit den Micro-SD-Slots von Pollin/China gemacht.

Gruß
Marcel

von petersieg (Gast)


Lesenswert?

Ahh. Super! Vielen Dank.

Peter

von Pruunz (Gast)


Lesenswert?

Gibt es irgendwo Layout Dateien der neuesten Version mit AVR Terminal ?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Pruunz schrieb:
> Gibt es irgendwo Layout Dateien der neuesten Version mit AVR Terminal ?

Ja, bei mir. Sende mir einfach eine Mail.

von Christian D. (toast_r)


Lesenswert?

Ich spiele ja schon seit einiger Zeit gerne mit dem AVRCP/M rum.
Dabei habe ich inzwischen schon öfter den Wunsch nach einer freien 
RS232-Schnittstelle verspürt.
Man könnte diese dann prima für Dateiübertragungen zur 'richtigen' CP/M 
Systemen benutzen.
Die vorhandene ist ja ausschließlich fürs Terminal.

Inwieweit wäre sowas realisierbar ?

von Leo C. (rapid)


Lesenswert?

Am einfachsten wäre das mit einem UART an I2C zu realisieren. Dafür gibt 
fertige Chips, die aber teuer und schlecht erhältlich sind.
Vor einiger Zeit hatte ich mal angefangen, so einen I2C-UART mit einem 
ATTiny2313 zu realisieren. Mangels eigenem Bedarf und übertriebener 
Featuritis ist das Projekt irgendwann liegen geblieben.

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

> -itis

Entzündung?

Man kann auch einen Bitbanging UART auf freien Pins verwenden. Meistens 
ist auch keine echte bidirektionale Verbindung nötig, also kommt man auf 
dem Controller mit einem Pin aus, bei Bedarf als Eingang oder Ausgang.

von Leo C. (rapid)


Lesenswert?

Nils S. schrieb:
> Man kann auch einen Bitbanging UART auf freien Pins verwenden.

Klar

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Am einfachsten wäre das mit einem UART an I2C zu realisieren. Dafür gibt
> fertige Chips, die aber teuer und schlecht erhältlich sind.

Den SC16IS740 gibt es für 2,77€/Stück bei Mouser.

von Marcel A. (dl1ekm)


Lesenswert?


von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

AVR-CP/M-Propeller-Terminal

Hier mal was zum Testen. Neue/aufgebesserte Software für das Terminal. 
Liegt auch schon seit ein paar Tagen auf dem SVN-Server[1]. Ein paar 
Fehler wurden beseitigt, ein paar weitere VT100-Funktionen hinzu gefügt, 
und etwas schneller ist sie auch.

Ich habe vor, die Software noch weiter auszubauen und zu beschleunigen. 
Außerdem soll sie an die stand-alone Version des Terminals[2] angepaßt 
werden, zumal Joe mir eine Platine dafür geschenkt hat.



[1] 
http://www.mikrocontroller.net/svnbrowser/avr-cp-m/trunk/VT100/source/work/
[2] Beitrag "VT100-Terminal (VGA+PS2)"

von Xyz X. (Firma: xyz) (khmweb)


Lesenswert?

Peter Sieg schrieb:
> Warum? Weil es geht! Und weil es Spaß macht zu zeigen, das es geht..
> Und weil ein ATmega88 ca. 3€ kostet, eine solches DRam gibts in der
> Schrottkiste (sind z.B beim Amiga 500 verwendet worden..) also alles
> für ca. 6-8€..

Noch preiswerter, zum Nulltarif, aber hier wohl weniger von Reiz: CP/M 
unter Windows mittels kostenfreiem, seit vielen Jahren bewährtem Emu, z. 
B. via download von meiner site sharpmz.org. Dort gibts auch 
verschiedene CP/M-Versionen, haufenweise Spiele, tonnenweise Software, 
diskimages und und und... Der schnellste Weg, um CP/M zum Laufen zu 
bringen. Anleitung bei Interesse im eigenen Thread oder via PN.

: Bearbeitet durch User
von Leo C. (rapid)


Lesenswert?

Propeller-Terminal für die AVR-CP/M-Platine

Die Entwicklung der Software geht im Thread "VT100-Terminal (VGA+PS2)" 
hier

Beitrag "Re: VT100-Terminal (VGA+PS2)"

weiter, da die Hardwareunterschiede zwischen den beiden Terminals ja 
gering sind.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
>> Am einfachsten wäre das mit einem UART an I2C zu realisieren. Dafür gibt
>> fertige Chips, die aber teuer und schlecht erhältlich sind.
>
> Den SC16IS740 gibt es für 2,77€/Stück bei Mouser.

Oder knapp 9€ für 5 Stück inclusive alles beim Ali.
Also gut, gestern sind sie angekommen, und mindestens einer funktioniert 
sogar. Deshalb gibts im SVN jetzt minimalen Support für den Chip. Die 
Register des UARTs sind zwischen 50H und 5FH in den I/O-Addressraum des 
Z80 gemappt, können also mit IN- und Out-Befehlen angesprochen werden. 
Einfache In- und Out-Routinen können dann z.B. so aussehen:
1
;----------------------------- ISC16IS740 UART -------------------------------
2
I2C_UART_PORT   equ     50H
3
4
I2C_UART_RHR    equ     I2C_UART_PORT+00H       ;R      Receive Holding
5
I2C_UART_THR    equ     I2C_UART_PORT+00H       ;W      Transmit Holding
6
I2C_UART_IER    equ     I2C_UART_PORT+01H       ;R/W    Interrupt Enable
7
I2C_UART_FCR    equ     I2C_UART_PORT+02H       ;W      FIFO Control
8
I2C_UART_IIR    equ     I2C_UART_PORT+02H       ;R      Interrupt Identification
9
I2C_UART_LCR    equ     I2C_UART_PORT+03H       ;R/W    Line Control
10
I2C_UART_MCR    equ     I2C_UART_PORT+04H       ;R/W    Modem Control
11
I2C_UART_LSR    equ     I2C_UART_PORT+05H       ;R      Line Status
12
I2C_UART_MSR    equ     I2C_UART_PORT+06H       ;R      Modem Status
13
I2C_UART_SPR    equ     I2C_UART_PORT+07H       ;R/W    Scratchpad
14
I2C_UART_TCR    equ     I2C_UART_PORT+06H       ;R/W    Transmission Control
15
I2C_UART_TLR    equ     I2C_UART_PORT+07H       ;R/W    Trigger Level
16
I2C_UART_TXLVL  equ     I2C_UART_PORT+08H       ;R      Transmit FIFO Level
17
I2C_UART_RXLVL  equ     I2C_UART_PORT+09H       ;R      Receive FIFO Level
18
I2C_UART_EFCR   equ     I2C_UART_PORT+0FH       ;R/W    Extra Features
19
I2C_UART_DLL    equ     I2C_UART_PORT+00H       ;R/W    divisor latch LSB
20
I2C_UART_DLH    equ     I2C_UART_PORT+01H       ;R/W    divisor latch MSB
21
I2C_UART_EFR    equ     I2C_UART_PORT+02H       ;R/W    Enhanced Feature
22
I2C_UART_XON1   equ     I2C_UART_PORT+04H       ;R/W    Xon1 word
23
I2C_UART_XON2   equ     I2C_UART_PORT+05H       ;R/W    Xon2 word
24
I2C_UART_XOFF1  equ     I2C_UART_PORT+06H       ;R/W    Xoff1 word
25
I2C_UART_XOFF2  equ     I2C_UART_PORT+07H       ;R/W    Xoff2 word
26
27
28
;-----------------------------------------------------------------------------
29
; Output character in C
30
; Return with character in  C and A
31
32
i2c_uart_out:
33
        IN   A,(I2C_UART_LSR)
34
        AND  20H
35
        JR   Z,i2c_uart_out     ; wait till ready
36
        LD   A,C
37
        OUT  (I2C_UART_THR),A
38
        RET
39
40
;-----------------------------------------------------------------------------
41
; Get character from I2C UART
42
; Return character in A
43
44
i2c_uart_in:
45
        IN   A,(I2C_UART_LSR)
46
        AND  01H
47
        JR   Z,i2c_uart_in     ; wait till ready
48
        IN  (I2C_UART_RHR),A
49
        RET

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Sehr schön!
Nun noch einen modernen DRAM (aktuell verfügbar) und das Z180 Projekt 
bekommt ernsthafte Konkurenz ;-)

von Leo C. (rapid)


Lesenswert?

Never, ever ;-)

Es sei denn, man tauscht auch noch den µC, z.B. gegen einen Cortex-M.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Für den I2C-UART gibts jetzt ein Kermit. Damit er läuft braucht man die 
neueste Firmware. Beides als Binaries im Anhang. Die Kermit-Quellen sind 
vorläufig auf meinem Server[1], und kommen demnächst ins hiesige SVN.


[1] http://cloudbase.mooo.com/cgit/Kermit-80/

von Andreas R. (Gast)


Lesenswert?

Hallo,

ich habe mir kürzlich auch einen avrcpm-Rechner zusammengebaut mit 
ATmega328P, 20 MHz, 8bit DRAM und einer 1 GB SD-Karte.
Als Firmware hatte ich erst die Version 3.2 r154, dann Version 3.5 r242. 
Die Anbindung über RS232 zum PC läuft mit einem CP2102-Dongle und 115200 
baud. Einen I2C-UART habe ich noch nicht angeschlossen.
Ich habe dann probiert, Kermit-80 4.11 (zusammengebastelt nach der 
Anleitung ftp.kermit.columbia.edu/kermit/cpm80/cpkerm.pdf) zu verwenden:
Kermit läuft zwar unter CP/M im avrcpm und ich kann im Prinzip auch 
Dateien zwischen PC und avrcpm hin- und herschicken (ich verwende 
TeraTerm und dessen eingebautes Kermit-Protokoll auf der PC-Seite), aber 
die Transferrate ist mit ca. 20 Bytes/s nicht brauchbar.

Ich habs so probiert: auf der CP/M-Seite kerm411.com gestartet und die 
folgenden Befehle im Kermit abgesetzt:
set local-echo on
set port crt
receive
danach in TeraTerm mit File/Transfer/Kermit/Send... eine Datei 
ausgewählt und übertragen. Diese ist dann im CP/M System auch 
angekommen, aber mit nur ca. 20 Bytes/s.

Die umgekehrte Richtung geht auch:
im CP/M-Kermit diese Befehle absetzen:
set local-echo on
set port crt
send foo.bar
dann in TeraTerm File/Transfer/Kermit/Receive
foo.bar kommt dann auf dem PC an, aber auch nur mit der langsamen 
Transferrate von ca. 20 Byte/s.

Mache ich da irgendwas grob falsch? Der Kermit-Transfer funktioniert ja 
im Prinzip, aber ich verstehe nicht, warum die Transferrate so klein 
ist...

Gruss,

Andreas

von Marcel A. (dl1ekm)


Lesenswert?

Hallo Andreas,

ich hatte das auch schon für die Z180 Stamp gebaut. Aber dort habe ich 
für die "Console" und die Kermit-Schnittstelle zwei unterschiedliche 
Ports genommen. Mich wundert, dass das überhaupt über die gleiche 
geht...?

Gruß
Marcel

von Leo C. (rapid)


Lesenswert?

Andreas R. schrieb:
> Ich habe dann probiert, Kermit-80 4.11 (zusammengebastelt nach der
> Anleitung ftp.kermit.columbia.edu/kermit/cpm80/cpkerm.pdf) zu verwenden:

Du hast ein "Generic Kermit-80" gebaut?

> set local-echo on

Das dürfte für Dateiübertragung keine Rolle spielen. Im Zweifelsfall ist 
es eher kontraproduktiv.

> set port crt

Das dürfte überflüssig sein, weil die IOBYTE-Funktionalität im 
AVR-CP/M-BIOS nicht implementiert ist.

Versuch' mal noch ein:
set terminal quiet

Dann werden während der Dateiübertragung keine Zeichen auf die Console 
ausgegeben.

> Mache ich da irgendwas grob falsch? Der Kermit-Transfer funktioniert ja
> im Prinzip, aber ich verstehe nicht, warum die Transferrate so klein
> ist...

Marcel A. schrieb:
> Mich wundert, dass das überhaupt über die gleiche
> geht...?

me too.

von Andreas R. (Gast)


Lesenswert?

Hallo,

danke für die Rückmeldungen.

Leo C. schrieb:
> Andreas R. schrieb:
>> Ich habe dann probiert, Kermit-80 4.11 (zusammengebastelt nach der
>> Anleitung ftp.kermit.columbia.edu/kermit/cpm80/cpkerm.pdf) zu verwenden:
>
> Du hast ein "Generic Kermit-80" gebaut?
>

Genau...

>> set local-echo on
>
> Das dürfte für Dateiübertragung keine Rolle spielen. Im Zweifelsfall ist
> es eher kontraproduktiv.
>

Stimmt, wie sich herausgestellt hat, macht dieser Befehl keinen 
Unterschied...

>> set port crt
>
> Das dürfte überflüssig sein, weil die IOBYTE-Funktionalität im
> AVR-CP/M-BIOS nicht implementiert ist.

Dieser Befehl ist aber offenbar (bei mir zumindest) nötig, sonst bekomme 
ich gar keine Kermit-Verbindung hin...

> Versuch' mal noch ein:
> set terminal quiet
>
> Dann werden während der Dateiübertragung keine Zeichen auf die Console
> ausgegeben.

Das hat bei mir nichts gebracht, d.h. die Transferrate ist immer noch 
bei ca. 20 Bytes/s :-(

>> Mache ich da irgendwas grob falsch? Der Kermit-Transfer funktioniert ja
>> im Prinzip, aber ich verstehe nicht, warum die Transferrate so klein
>> ist...
>
> Marcel A. schrieb:
>> Mich wundert, dass das überhaupt über die gleiche
>> geht...?
>
> me too.

Geht es vielleicht, weil ich TeraTerm unter Windows benutze? Ich habs 
noch nicht unter Linux (mit z.B. minicom) probiert...

Danke und Gruss,

Andreas

von Leo C. (rapid)


Lesenswert?

Inzwischen habe ich mir auch ein "Kermit-80 v4.11 configured for Generic 
CP/M-80 with VT100" gebaut und einiges ausprobiert. Im Grunde hätte aber 
etwas Nachdenken und ein Blick in den Sourcecode gereicht, um darauf zu 
kommen, daß das nicht funktionieren kann. ;-)

Das Kermit-Programm fragt während der Übertragung eines Pakets auch 
immer die Consolenschnittstelle ab, damit der Benutzer die Übertragung 
ggf. abbrechen kann (Funktion inchr in cpspk2.asm). Da Com.- und 
Consolenschnittstelle aber die Gleiche ist, werden dadurch Zeichen, die 
zu Datenpaketen gehören, als Consoleninput gelesen, und verworfen.

Wenn man die Consolenabfragen an den entsprechenden Stellen rauswerfen 
würde, könnte es funktionieren...

von Andreas R. (Gast)


Lesenswert?

Hallo,

Leo C. schrieb:
> Inzwischen habe ich mir auch ein "Kermit-80 v4.11 configured for
> Generic
> CP/M-80 with VT100" gebaut und einiges ausprobiert. Im Grunde hätte aber
> etwas Nachdenken und ein Blick in den Sourcecode gereicht, um darauf zu
> kommen, daß das nicht funktionieren kann. ;-)
>
> Das Kermit-Programm fragt während der Übertragung eines Pakets auch
> immer die Consolenschnittstelle ab, damit der Benutzer die Übertragung
> ggf. abbrechen kann (Funktion inchr in cpspk2.asm). Da Com.- und
> Consolenschnittstelle aber die Gleiche ist, werden dadurch Zeichen, die
> zu Datenpaketen gehören, als Consoleninput gelesen, und verworfen.
>
> Wenn man die Consolenabfragen an den entsprechenden Stellen rauswerfen
> würde, könnte es funktionieren...

Vielen Dank Leo, das war der entscheidende Hinweis!

Ich habe in cpspk2.asm, Zeile 936 den Befehl
  call  inpcon    ; Try to get a character from the console
durch drei NOPs ersetzt - nun kriege ich vernünftige 
Kermit-Datenübertragungsraten hin (ca. 700 Byte/s für PC->avrcpm und ca. 
1.4 kByte/s für avrcpm->PC). Ich verwende TeraTerm unter Windows - ich 
werde aber auch noch minicom unter Linux testen. Ausserdem muss ich noch 
weitere Tests machen zur Zuverlässigkeit der Datenüebertragung.
Konkret habe ich aber nicht den Kermit-Sourcecode geändert und neu 
kompiliert, sondern mein kerm411.com gepatcht: die Bytefolge "CD 1A 70" 
bei Offset 2A19 wurde durch "00 00 00" ersetzt.

Ich glaube, nun haben wir einen bequemen Weg, Dateien von und zum avrcpm 
zu übertragen, ohne jedesmal mit der SD-Karte hantieren zu müssen. Was 
fehlt ist halt die Möglichkeit, die Datenübertragung zu unterbrechen - 
man muss wohl den avrcpm mit dem Resettaster neu starten, falls das 
nötig ist...

Grüsse und schönes Wochenende,

Andreas

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Für den I2C-UART gibts jetzt ein Kermit.

Prima, läuft...

A>kerm411
Kermit-80 v4.11 configured for AVR-CP/M with VT100
UART detected, crystal frequency: 11.0592 MHz.

von Jens (Gast)


Lesenswert?

Da hat das ganze mal jemand auf einem Arduino Nano umgesetzt:
https://acdc.foxylab.com/node/76

Das einzige zusätzliche Bauteil ist eine SD-Karte, die auch gleich als 
RAM herhalten muß.

Hier noch das passende Video, für die, die kein Russisch können oder 
Google-Translate nicht kennen:
https://youtu.be/LHFmt3qWAuY

Grüße,
Jens

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Danke für die Info!
Eine sehr interessante Lösung, die SD-Card gleich als RAM zu nutzen. 
Warum sind wir nicht darauf gekommen :-( Einzig die Umsetzung in GO 
scheint mir recht langsam und die Beschränkung auf einen 8080. Aber mit 
einer Micro-SD sollte nun ein CP/M in einem kleinen USB-Stick Gehäuse 
möglich sein :-)

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Eine sehr interessante Lösung, die SD-Card gleich als RAM zu nutzen.

Stimmt.

> Warum sind wir nicht darauf gekommen :-( Einzig die Umsetzung in GO

Weil "uns" sogar SPI-RAM schon zu langsam war. Siehe 
Beitrag "Re: CP/M auf ATmega88" ff.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Einzig die Umsetzung in GO scheint mir recht langsam

Wenn ich den durch Google-Translate gedrehten Text richtig verstehe, ist 
nur das PC-Programm zum Senden einer Hex-Datei an den Arduino, in Go 
geschrieben. Von der Arduino-Software (Monitor und Emulator) habe ich 
keine Quellen gefunden.

> und die Beschränkung auf einen 8080.

Reicht für mindestens 99% aller verfügbaren CP/M Programme. Aber soll ja 
trozdem noch geändert werden.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> nur das PC-Programm zum Senden einer Hex-Datei an den Arduino, in Go
> geschrieben.

Stimmt, habe ich dann auch gelesen. Mein Russisch ist echt eingerostet, 
ich habe buchstabiert wie ein Anfänger :-(
Den Simulator hat er offensichtlich selbst programmiert ohne das die 
Quellen derzeit verfügbar sind.
"я решил две задачи - создал эмулятор процессора Intel 8080."

: Bearbeitet durch User
von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Joe G. schrieb:
> Den Simulator hat er offensichtlich selbst programmiert ohne das die
> Quellen derzeit verfügbar sind.

Sind jetzt verfügbar [1], alles in C++ umgesetzt.

[1] https://github.com/Dreamy16101976/cpm4nano

von Jens (Gast)


Angehängte Dateien:

Lesenswert?

Leo C. schrieb:
>> Offenbar verändert SYSGEN die Laufwerkscharakteristik.
>
> SYSGEN kopiert höchstwahrscheinlich ab Track 0, Sektor 1, weil auf
> Floppies die Sektornumerierung bei 1 beginnt. Da unsere Sektor-zählung
> bei 0 beginnt, wird der erste Sektor nicht mitkopiert. Dieser enthält
> beim simh-Format nicht nur den IPL, sondern auch eine Formatkennung.
> Wenn diese nach dem Kopieren fehlt, wird das (ursprünliche)
> AVRCPM-Standardformat angenommen.
>
> Wenn Du das SYSGEN mal anpassen willst, kannst Du Dich an unserem IPL
> orientieren, oder die Diskgeometrie aus dem BIOS auslesen, und dann
> konsequenter weise auch die BIOS-Funktion für Sector-Translate
> verwenden.
Das habe ich jetzt gemacht. Ich habe syscop.c [1] für unsere Zwecke 
modifiziert.
Als Compiler habe ich BDS-C verwendet:
1
C>CC AVRSYSCP
2
BD Software C Compiler v1.60  (part I)
3
  24K elbowroom
4
BD Software C Compiler v1.60 (part II)
5
  25K to spare
6
C>CLINK AVRSYSCP
7
BD Software C Linker   v1.60
8
9
Last code address: 2BCE
10
Externals start at 2BCF, occupy 0006 bytes, last byte at 2BD4
11
Top of memory: DA05
12
Stack space: AE31
13
Writing output...
14
  35K link space remaining

Anschließend kann man entweder die Systemspuren in eine Datei sichern:
1
C>AVRSYSCP A: SYSTRKS.BIN 52

oder -tada- eine Datei in die Systemspuren schreiben:
1
C>AVRSYSCP CPM.BIN A:

Wenn ich das richtig verstanden habe, muß bei 8MB-Images die 
Formatkennung "<CPM_Disk>" am Ende des ersten Sektors (0x76...0x7f) 
stehen, damit das modifizierte Image funktioniert.

Die Anpassung dafür könnte in IPL.MAC stattfinden.
Ein weiteres .org im Quelltext führt zu einem
1
B>m80 =ipl8m/m
2
P                                       org     176h
3
4
1 Fatal error(s)
Weiß jemand, wie man das richtig macht?

Viele Grüße,
Jens


[1] 
http://www.classiccmp.org/cpmarchives/cpm/Software/WalnutCD/cpm/utils/dskutl/syscop.c

von Leo C. (rapid)


Lesenswert?

Jens schrieb:
> Ein weiteres .org im Quelltext führt zu einem
> B>m80 =ipl8m/m
> P                                       org     176h

Das ".org" hast Du am Ende vor dem "end" eingefügt?

Wahrscheinlich mußt Du davor noch ein ".dephase" schreiben.

von Jens (Gast)


Lesenswert?

Leo C. schrieb:
> Wahrscheinlich mußt Du davor noch ein ".dephase" schreiben.
Ja, das scheint zu klappen.

Ich habe auch noch einen anderen Weg gefunden.
Wenn man mit DDT die Teile zusammenlinkt, kann man noch die folgenden 
Kommandos anhängen:
1
S176
2
3C
3
43
4
50
5
4D
6
5F
7
44
8
69
9
73
10
6B
11
3E
12
.
13
D170

Danke,
Jens

von Ronny M. (hobby-coder)


Lesenswert?

Hallo Ihr,

ich kann ein AVR CP/M Stick in der Rev.3 (USB Stick Form) bekommen, 
inkl. USB TTL Wandler, welcher afaik als Terminal Zugang dient.

Ich komme aus der DOS Zeit, bzw. dem ehem. DDR BIC 5105/ 5110.

Ich habe mir schon einige CP/M Emulatoren geholt, um üben zu können. Ich 
scheitere aber am erstellen der Disketten, bzw. am einbinden/ mounten 
der Disketten. Ich habe JAZE 2.04.x und einen Z80 Emulator getestet. Bei 
JAZE 2.4.x habe ich mir eine Diskette erstellt, bekomme aber die 
herunter geladenen Programme nicht auf die virtuelle Diskette... Den Z80 
Emulator 1.0.10.x bekomme ich nicht einmal gestartet. Was das angeht, 
ist JAZE doch einfacher zu starten, da dieser vorkonfiguriert ist und 
eine CP/M Version bei liegt.

Ich möchte mir gerne ein solchen Stick holen, um die frühere Zeit der 
Computer kennen zu lernen. Ich habe und hatte ältere Computer, will aber 
etwas näher an die Wurzeln heran. Bevor ich das aber mache, will ich das 
zuerst einmal Virtuell sehen.

Wer kann mir einen Emulator empfehlen, wo ich CP/M für Z80, bzw. den 
i8080 testen kann, bevor ich mir einen solchen Stick bauen lasse?

LG Ronny

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ronny M. schrieb:
> Wer kann mir einen Emulator empfehlen, wo ich CP/M für Z80, bzw. den
> i8080 testen kann

YAZE hast du ja schon genannt. Neben vielen anderen 
Simulationsprogrammen gibt es noch AltairZ80 [1]. Dort lassen sich u.a. 
verschiedene Betriebssysteme u.a. CP/M, simulieren.

[1] http://schorn.ch/index.html

von Ronny M. (hobby-coder)


Lesenswert?

Joe G. schrieb:
> Ronny M. schrieb:
>> Wer kann mir einen Emulator empfehlen, wo ich CP/M für Z80, bzw. den
>> i8080 testen kann
>
> YAZE hast du ja schon genannt. Neben vielen anderen
> Simulationsprogrammen gibt es noch AltairZ80 [1]. Dort lassen sich u.a.
> verschiedene Betriebssysteme u.a. CP/M, simulieren.
>
> [1] http://schorn.ch/index.html

Ich bekomme leider keine Diskimages für Yaze erstellt, bzw. keine 
Programme in eine *ydsk rein geschoben.. Weist Du, wie das geht?

Danke für dem Tipp zum Altair Emulator. Ich denke aber, dieser passt 
nicht zum Rev. 3 Board. Da ist wohl YAZE passender. Nur, wie bekomme ich 
eine Datei, ein Program auf die *.ydsk...?

Vielen Dank für die Hilfe :)

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ronny M. schrieb:
> Danke für dem Tipp zum Altair Emulator. Ich denke aber, dieser passt
> nicht zum Rev. 3 Board. Da ist wohl YAZE passender.

Mit YAZE habe ich noch nicht gearbeitet aber was hat die Rev. 3 was 
anders sein sollte? Ist doch auch nur ein AVR mit RAM. Und CP/M ist 
CP/M. Ich hatte damals alle meine Laufwerke unter dem AltairZ80 
erstellt.

von Ronny M. (hobby-coder)


Lesenswert?

Hallo,

das hat sich inzwischen erledigt. YAZE habe ich wieder gelöscht. SIMH 
Altair Z80 hat die Aufgabe der Emulation übernommen. Aber auch das hat 
sich in einigen Tagen erledigt. Peter Sieg hat in der Bucht ein Set aus 
CPM Stick + USB-Serial Adapter angeboten, welches ich mir gekauft habe.

Das ganze ist in wenigen Tagen bei mir. Die CPM Tools zum erstellen 
eigener *.dsk "Disketten" habe ich mir auch schon geholt. Ein wenig 
Software legt er mir auch noch bei. Und, ein wenig Software findet man 
ja noch im Netz :)

von Marcel A. (dl1ekm)


Lesenswert?

Na denn. Auch ich habe hier noch einige Sticks (Platine) und jede Menge 
4-bit RAM und was man sonst so braucht vorrätig...
Schau mal auf meine HP...

von Ronny M. (hobby-coder)


Lesenswert?

Marcel A. schrieb:
> Na denn. Auch ich habe hier noch einige Sticks (Platine) und jede Menge
> 4-bit RAM und was man sonst so braucht vorrätig...
> Schau mal auf meine HP...

Eine mit dem VGA Anteil hätte ich noch gerne. Das aber ein anderes mal, 
bei mir steht bald ein Umzug an...

von Ronny M. (hobby-coder)


Angehängte Dateien:

Lesenswert?

Hallo Ihr,

evtl. kann mir jemand bei der Lösung eines Problems helfen.

Ich habe ja den CPM Stick gekauft und eine CD mit Tools usw. bekommen. 
Auf der CD sind auch ein paar Disk/HD Images. Ich kann den Stick sauber 
booten und auf das Laufwerk B zugreifen. Laufwerk B ist ein 
Festplattenimage mit 8MB größe.

Allerdings sehe ich nur den Inhalt der ersten 256kb... Mit B: komme ich 
sauber auf die Festplatte,  "stat" zeigt mir ein Freiraum von ca. 7.7MB 
an. Auf der HDD sind aber mehr Programme...

Ich habe einige Programme aus der Batch Datei, die mir die DiskImages 
erstellt, auskommentiert. In ADA usw. programmiere ich nicht...

Ich habe die Batch Dateien, womit ich mir meine Images erzeugt habe, 
einmal angehangen.

Ich sehe weder mit der originales Batch Datei, noch mit meinen 
Änderungen alle Dateien auf der HDD. Muss ich evtl. einen bestimmten 
Bereich ansprechen? Ein B: scheint ja nicht zu reichen....

Ich komme nicht aus der CPM Zeit. Ich bin erst Ende der 80er Jahre, mit 
DOS und dem Robotron BIC5105, bzw. BIC 5110 in die PC Welt 
eingestiegen...

von Peter S. (petersieg)


Lesenswert?

Hi.
Die einzelnen Applikationen sind in sog. Userbereiche kopiert - siehe 
Batch Datei.
Umschalten mit z.B. user 1
(2, 3,...)

Das war eine Vorstufe der Unterverzeichnisse.

So hat man alles sauber getrennt und nicht Ada mit C oder Pascal 
vermischt.

Peter

von Ronny M. (hobby-coder)


Lesenswert?

Afaik hat CPM weder Unterverzeichnisse, noch Userkonten... Oder, habe 
ich hier einen Denkfehler...?

von Peter S. (petersieg)


Lesenswert?

CP/M hat ebend keine Unterverzeichnisse.
Und auch keine Userkonten ala Unix etc.
ABER: Sog. User Bereiche. Das ist nichts weiter als das die Dateien 
einem Userbereich zugeordnet werden und in der Anzeige NUR die Dateien 
angezeigt werden, die zum aktuellen Userbereich gehören. Physikalisch 
liegt alles im Rootverzeichnis.
Umschaltung mit user n.

Lies dir doch bitte mal ein CP/M Handbuch durch.

Googlen geht aber auch:
http://www.primrosebank.net/computers/cpm/cpm_cookbook_user.htm


Peter

von Ronny M. (hobby-coder)


Lesenswert?

Kannst Du, oder jemand anderes, mir ein passendes Buch empfehlen? Ich 
habe, im 64er Forum - oder besser gesagt - deren Datengrab, ein wenig 
Einsteigerliteratur gefunden. Aber, keines hiervon sprach das "user x" 
Thema an..."

von Peter S. (petersieg)


Lesenswert?


: Bearbeitet durch User
von Ronny M. (hobby-coder)


Lesenswert?

Vielen Dank :)

Eine Frage zum Schluss noch: Wie kann ich mbasic/ Basic 80 beenden und 
zurück zu CPM kommen? ein ^c, ^x oder ^q brachte kein Erfolg. Ich muss 
SIMH, bzw. den Stick resetten, um wieder zum BDOS zurück zu kommen... 
Hatte M$ damals keine Exit- Routine eingebaut...? "quit", "bye" oder 
"exit" bringt auch kein Erfolg.

Btw: das ist echt ein nettes kleines Spielzeug :)

von Stefan (Gast)


Lesenswert?

system

von Ronny M. (hobby-coder)


Lesenswert?

Stefan schrieb:
> system

Danke :) Damit sind meine Fragen beantwortet. Wenn ich doch wieder 
welche habe, schreibe ich das hier rein :)

von David R. (retrogadgets)


Lesenswert?

I have the cpm stick 3.1 board with the atmega 328, 2x TC514256AP-70 
drams but nothing showing on the serial port, nor is the sd card being 
read.

question, does the atmega show anything through the serial terminal 
before reading the sd card, so i can rule out the atmega is programmed 
correctly with the correct fuse settings.

any help would be appreciated.

von David R. (retrogadgets)


Lesenswert?

...

von Horst S. (h3aau)


Lesenswert?

moin,
hat schon mal einer darüber nachgedacht das ganze auf einen 
STM32F103P6T8 zu bringen? wäre doch auch eine nette sache.

von Horst S. (h3aau)


Lesenswert?

meine natürlich den STM32F103C8T6............... sorry

von Tom (Gast)


Lesenswert?

David R. schrieb:
> question, does the atmega show anything through the serial terminal
> before reading the sd card,
You should see something like:
1
CPM on an AVR, v3.2 r0
2
Testing RAM: fill...wait...reread...
3
Initing mmc...

von Tom (Gast)


Lesenswert?

Horst S. schrieb:
> hat schon mal einer darüber nachgedacht das ganze auf einen
> STM32F103P6T8 zu bringen? wäre doch auch eine nette sache.
Der Z80-Emulator ist in feinstem AVR-Assembler geschrieben, das portiert 
man nicht mal so eben.
Welche Vorteile versprichst Du Dir von STM32-Variante?

von Joerg W. (joergwolfram)


Lesenswert?

Man könnte halt auf das DRAM verzichten und hätte ggf. mehr Speed.


Beim STM32F103C8T6 bräuchte man aber wieder externes RAM, der hat intern 
nur 20K. Sinnvoller wäre etwas mit 64K oder mehr. Oder noch besser 128K 
RAM, da könnte man auch die Videoausgabe mit reinmachen. Also z.B. ein 
STM32F405RG. Wobei sich dann trotzdem die Frage stellt, ob sich der 
Aufwand lohnt. Denn es gibt ja schon die AVR-Variante, die recht gut 
funktioniert. Und ich denke auch, dass das Interesse an solchen 
Projekten eher nachlässt. Leider...

Jörg

von Andreas J. (antibyte)


Lesenswert?


von S. R. (svenska)


Lesenswert?

Für ARMe gibt's schon fertige Z80-Emulationen. Die sind meist in C 
geschrieben, weil dank der deutlich höheren Taktgeschwindigkeit die 
Emulation nicht extrem performen muss. Als Ausgleich ist die Emulation 
akkurater (d.h. das Zeitverhalten entspricht dem Original).

von David R. (retrogadgets)


Lesenswert?

I see on the forum different fuse setting for the atmega 328, which 
should i use?

von David R. (retrogadgets)


Lesenswert?

avrdude -c usbasp -p m328p -e -U flash:w:avrcpm.hex
avrdude -c usbasp -p m328p -U lfuse:w:0xf7:m -U hfuse:w:0xdf:m

ive used the above is this correct

von Martin (Gast)


Lesenswert?

Habe mir einen AVR-CP/M Stick V3.1 zusammengebaut.
Tolles Projekt - schon erstaunlich, was in dem kleinen Ding mit grossem 
Assembler-Quellcode-Herz steckt.

Wenn ich den Microsoft FORTRAN 3.44 Compiler ausprobiere, bekomme ich 
einen Fehlerabbruch.

Der gleiche Compiler funktioniert auf dem Z80-CP/M Subsystem in meinem 
HP-86, an der Software liegt es also nicht.
1
C>user 7
2
3
C>type hello.for
4
      PROGRAM MAIN
5
      print *, 'Hello World!'
6
      END
7
8
C>f80 HELLO=HELLO
9
FORTRAN-80 Ver. 3.4 Copyright 1978, 79, 80 (C) By Microsofô
10
BYTES: 31663
11
Š1            PROGRAM MAIN
12
2             print *, 'Hello World!'
13
*****‰0000'     LD      BC¬$$L
14
*****‰0003'     JP‰$INIT
15
?Line: 2 Statement Unrecognizable or Misspelleä:PRIN
16
3             END
17
*****‰0006'     CALL‰$EX
18
19
Program Unit Length½0009 (9)
20
 Bytes
21
Data Area Length½0001 (1) Bytes
22
23
Subroutines Referenced:
24
Š$INIT                  $EX
25
26
Variables:
27
Š
28
Labels:
29
Š$$L    0006'
30
Š1 Fatal Error(s) Detected
Merkwürdig sind die ersten und letzten Buchstaben der Fehlermeldungen.
Diese Zeichen haben jeweils bit 7 gesetzt.

Š = 0x8A = 1000.1010, bit 7 gelöscht: 0000.1010 = 0x10 = '\n'
½ = 0xBD = 1011.1101, bit 7 gelöscht: 0011.1101 = 0x3D = '='
ä = 0xE4 = 1110.0100, bit 7 gelöscht: 0110.0100 = 0x64 = 'd'

Auch wird PRINT nur verkürzt ausgegeben.

Hat jemand diesen FORTRAN Compiler auf dem AVR-CP/M laufen?
Kann es sein, dass hier noch Z80 opcodes fehlen?

Alle anderen Programme, incl. C Compiler etc. scheinen gut zu laufen, 
nur der F80 nicht.

Hat jemand ein kleines Fortran Beispielprogramm mit PRINT oder WRITE, 
das läuft?

Martin

von Leo C. (rapid)


Lesenswert?

> Habe mir einen AVR-CP/M Stick V3.1 zusammengebaut.

Welche Firmware-Version hast Du auf dem Stick?

> Kann es sein, dass hier noch Z80 opcodes fehlen?

Sicher nicht. Zumal der F80 ziemlich sicher ein reines 8080 Progamm ist.
Ich dachte zuerst an ein Timing-Problem mit der seriellen Schnittstelle. 
Da aber nicht nur die Ausgabe vermurkst ist, sondern auch Fehler beim 
compilieren sind, wird es wohl was anderen sein.
Ich schau mal rein.

von Martin (Gast)


Lesenswert?

... warte nochmal, bevor Du suchst ... der Compilerfehler ist 
wahrscheinlich eher ein Problem meinerseits mit dem Uralt-Fortran. Ich 
teste heute abend nochmal weiter.

Unabhängig davon: die gesetzten 7.bit im den Fehlermeldungen könnten 
vielleicht verwendet worden sein um die Zeichenattribute für ein 
Terminal zu steuern? Eventuell ist der Compiler für den TRS-80 und der 
versteht so etwas z.B. für inverse Ausgabe oder ähnliches? Andere 
Terminals maskieren dieses 8. Bit dann einfach weg. Ich habe 
Windows/Teraterm mit 8 Datenbits + 1 Stop bit verwendet.

Martin

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Martin schrieb:
> ... warte nochmal, bevor Du suchst ... der Compilerfehler ist
> wahrscheinlich eher ein Problem meinerseits mit dem Uralt-Fortran. Ich

Zu spät. ;)

> Wenn ich den Microsoft FORTRAN 3.44 Compiler ausprobiere, bekomme ich
> einen Fehlerabbruch.

Das ist wahrscheinlich der neueste FORTRAN Compiler den es von Microsoft 
für CP/M gibt. Den gleichen habe ich inzwischen auch ausprobiert.

> Der gleiche Compiler funktioniert auf dem Z80-CP/M Subsystem in meinem
> HP-86, an der Software liegt es also nicht.

Das der Dein hello.for übersetzt hat, glaube ich jetzt nicht. MS FORTRAN 
3.4 ist im wesentlichen ein FORTRAN-66 Compiler und hat definitiv keinen 
PRINT-Befehl.

> Unabhängig davon: die gesetzten 7.bit im den Fehlermeldungen könnten
> vielleicht verwendet worden sein um die Zeichenattribute für ein
> Terminal zu steuern?

Bei mir kommen diese Bits nicht. Das scheint mir eher ein 
Hardware-Problem oder ein Problem mit Deinr AVRCPM Firmware-Version 
(welche?) zu sein.

> Ich habe
> Windows/Teraterm mit 8 Datenbits + 1 Stop bit verwendet.

Das sollte passen.

1
CPM on an AVR, v3.5 r242
2
Testing RAM: fill...wait...reread...
3
Initing mmc...
4
5
A: CP/M partition at: 001, size: 7811KB.
6
B: FAT16 File-Image 'A' at: 3766, size: 8192KB.
7
C: FAT16 File-Image 'B' at: 859, size: 8192KB.
8
D: FAT16 File-Image 'C' at: 003, size: 8192KB.
9
E: FAT16 File-Image 'E' at: 375, size: 2048KB.
10
F: FAT16 File-Image 'F' at: 504, size: 1024KB.
11
G: FAT16 File-Image 'H' at: 586, size: 256KB.
12
H: FAT16 File-Image 'I' at: 603, size: 256KB.
13
Partinit done.
14
Ok, Z80-CPU is live!
15
16
62k cp/m vers 2.2
17
18
A>b:
19
B>f80 =hello
20
MAIN
21
22
?Line: 2 Statement Unrecognizable or Misspelled:PRIN
23
24
?1 Fatal Error(s) Detected
25
26
B>type hello2.for
27
      PROGRAM MAIN
28
      WRITE(1,200)
29
200   FORMAT(1X,'Hello World!')
30
      END
31
32
B>f80 =hello2 
33
MAIN
34
35
B>l80 hello2,hello2/n/e
36
37
Link-80  3.44  09-Dec-81  Copyright (c) 1981 Microsoft
38
39
Data    0103    1A0B    < 6408>
40
41
39529 Bytes Free
42
[0117   1A0B       26]
43
44
B>hello2
45
46
Hello World!
47
48
B>


Nachtrag:
Falls Du tatsächlich eine modifizierte Compilerversion haben solltest:
Im Anhang ist ein Diskimage mit dem Compiler den ich zum Testen 
verwendet habe.
Handbuch gibts hier:
http://www.textfiles.com/bitsavers/pdf/microsoft/cpm/Microsoft_FORTRAN-80_Ver3.4_Users_Manual_Nov80.pdf

: Bearbeitet durch User
von Martin (Gast)


Lesenswert?

Danke für die Mühe.

Ich hatte ein Disk Image CPMDSK_D.IMG verwendet. Dort lag unter USER 7 
ein Programm HELLO.FOR. Damit bekam ich gleich die Fehlermeldungen und 
die "merkwürdigen" Zeichen und glaubte dass da etwas größeres nicht 
stimmt.
Wie Du schreibst, ist das Programm aber nicht für FORTRAN IV (oder 66?) 
geeignet. Ich hatte dann gestern abend noch ein eigenes Testprogramm 
geschrieben und das funktioniert. Entschuldigung für die Verwirrung.

Wenn ich allerdings einen Syntaxfehler in das Programm einbaue, kommen 
wieder diese Zeichen mit gesetztem 7.Bit. Das müsste bei Dir auch der 
Fall sein?
Vielleicht verwenden bestimmte Terminals das 7.Bit um invers oder fett 
darzustellen (es gab auch eine Version dieses Fortrans für den TRS/80, 
vielelicht versteht der das).  Das ist aber kein wirkliches Problem.

Mein (jetzt erfolgreicher) Test:
1
CP/M on AVR, v3.2 r155
2
Testing RAM: fill...wait...verify...
3
Reading SD card...
4
5
A: FAT16 Image 'A' at: 002, size: 256 KB.
6
B: FAT16 Image 'B' at: 266, size: 256 KB.
7
C: FAT16 Image 'D' at: 274, size: 8192 KB.
8
D: FAT16 Image 'E' at: 010, size: 8192 KB.
9
Partinit done.
10
Ramdisk found.
11
Ok, Z80-CPU is alive!
12
13
ipl <<<<<<<<<<<<<< Was bedeutet das? Aus welcher .asm Quelle kommt das?
14
62k cp/m vers 2.2
15
16
A>C:
17
C>USER 7
18
19
C>TYPE HELLO.FOR
20
      PROGRAM HELLO
21
      INTEGER I, IUNIT
22
      REAL X,Y
23
      IUNIT=6
24
      WRITE(5,100)
25
C     0 = current drive
26
C     3 = drive C:
27
      CALL OPEN(IUNIT,11HHELLO   TXT,3)
28
      DO 50 I=1,100
29
         X=FLOAT(I)/10.0
30
         Y=SIN(X)
31
         WRITE(IUNIT,200) X,Y
32
50    CONTINUE
33
34
100   FORMAT(15H Hello FORTRAN!)
35
200   FORMAT(1H ,F12.3,3H = ,F12.3)
36
      END
37
38
39
C>F80 HELLO=HELLO
40
HELLO
41
42
C>L80 HELLO/N,HELLO/E
43
44
Link-80  3.44  09-Dec-81  Copyright (c) 1981 Microsoft
45
46
Data    0103    1E69    < 7526>
47
48
37999 Bytes Free
49
[0139   1E69       30]
50
51
C>HELLO
Schreibt "Hello FORTRAN" auf die LST device (Terminal)
Erstellt Datei 'HELLO.TXT' mit X,Y Werten.

von Leo C. (rapid)


Lesenswert?

> Ich hatte ein Disk Image CPMDSK_D.IMG verwendet. Dort lag unter USER 7
> ein Programm HELLO.FOR.

Und F80.COM befindet sich ebenfalls auf diesem Image?
Wo finde ich das Image? Oder kannst Du es mir zukommen lassen?

> Wenn ich allerdings einen Syntaxfehler in das Programm einbaue, kommen
> wieder diese Zeichen mit gesetztem 7.Bit. Das müsste bei Dir auch der
> Fall sein?

Nein, die Zeichen kommen bei mir nicht.

> Vielleicht verwenden bestimmte Terminals das 7.Bit um invers oder fett
> darzustellen (es gab auch eine Version dieses Fortrans für den TRS/80,
> vielelicht versteht der das).

Das mag durchaus sein, aber mMn müßten die Bits dann anders verteilt 
sein. Für mich sieht das eher nach Übertragungsfehler aus.

> Das ist aber kein wirkliches Problem.

Für mich schon, solange die Ursache nicht klar ist.
Deshalb hätte ich gerne das Disk Image.

> Mein (jetzt erfolgreicher) Test:CP/M on AVR, v3.2 r155

Zwar nicht uralt, aber auch nicht die neueste Version. Du könntest auf 
v3.5 updaten.

> Ok, Z80-CPU is alive!
>
> ipl <<<<<<<<<<<<<< Was bedeutet das? Aus welcher .asm Quelle kommt das?
> 62k cp/m vers 2.2

Das ist der "Initial Prgram Loader".
Der Bootloader im ersten Sektor der Disk, der das CP/M (CCP+BDOS+BIOS) 
aus den reservierten Systemspuren ins RAM läd.
Sourcecode ist in cpm/IPL.MAC.

von Martin (Gast)


Lesenswert?

Hallo,

ich werde mal versuchen mir eine aktuellere Firmware zu assemblieren.

>Zwar nicht uralt, aber auch nicht die neueste Version. Du könntest auf v3.5 
updaten.
Woher nehmen und nicht stehlen? Ich habe bislang nur ein 3.2 für die 
standalone Version unter
https://www.mikrocontroller.net/svnbrowser/avr-cp-m/avrcpm/trunk/avr
gefunden. Ich habe die V3.1 Stick-Platine mit TTL-Serial ind 8-bit DRAM, 
d.h. kein Propeller, VT100 etc. Wollte nur noch (wenn der Chinese 
liefert) auf I2C-Seriell aufrüsten.

Danke für die Erläuterung des "ipl" - ich dachte das es Optionen 
(I2C,...) kennzeichnet und konnte es in den Quellen nicht finden.

Die disk-image Dateien habe ich von 
https://www.mikrocontroller.net/articles/AVR_CP/M dort unter "Downloads" 
die datei CPMDSK_C.IMG geladen. Dort war unter "USER 7" der FORTRAN 
Compiler mit L80 und dem "Beispiel" zu finden.

Den MS-F80 v3.44 Compiler hatte ich auch schon früher mal für andere 
CP/M Rechner gefunden, vermutlich geistern die selben Dateien an vielen 
Stellen herum. Z.B. auf http://www.retroarchive.org/
Da es auch eine TRS-80 Version des Compilers (zumindest der Handbücher) 
gab, habe ich noch nach TRS-80 Infos gesucht.

Dazu habe ich noch dies gefunden:
1
The Model 4 uses the same character set as the Model 3 as long as the reverse video is turned off. If you wish to use reverse video, first send CHR$ code 16 to the display, then switch in the video memory. You can only access inverse video and POKE the data if you SET bit 7 of the data going to the display. Example: Send ASCII code to display with this assembler program: 
2
3
    LD A,41H 
4
    LD HL,F800H 
5
    LD (HL),A 
6
 
7
The above puts the normal video “A” on the screen. If you want reverse video, use this: 
8
9
    LD A,41H ; A 
10
    SET 7,A 
11
    LD HL,F800H 
12
    LD (HL),A 
13
 
14
You can also calculate the reverse video strings by adding 128 to each value to send to the screen. 
15
***** N O T E ***** 
16
If you enable the reverse video, you *CANNOT* use the graphics characters. To disable the reverse video and enable the graphics, send a CHR$ code 17 to the screen.

Meine Spekulation ist, dass diese TRS-80 Spezialität verwendet wird um 
Fehlermeldungen (nur diese) hervorzuheben. Um das zu prüfen, müsste man 
aber den F80 disassemblieren, soweit wollte ich nun nicht gleich gehen.

Wenn aber diese Zeichen bei Dir (im Fehlerfall) nicht auftauchen, muss 
es wohl etwas anderes in meiner Konfiguration sein.  Merkwürdig wäre 
dann aber das alle (?) anderen Programme (Turbo Pascal, Multiplan, 
Wordstar, ED) mit ihren durchaus komplexen Ausgaben einwandfrei zu 
funktioniern scheinen.

Martin

von Martin (Gast)


Lesenswert?

O.K. ich habe nun doch noch die aktuellen (hoffe ich) Quellen gefunden 
und habe nun die Version 3.5 laufen.

Auch damit kommen bei Fehlermeldungen (nur dort) ebenfalls jeweils die 
letzten Zeichen mit gesetztem Bit 7.

Daraufhin habe ich mir die Fehlermeldungen im F80.COM angesehen. Sie 
haben immer auf dem letzten Buchstaben bit 7 als Ende-Kenner gesetzt.
Damit spart man ein (Null-)Byte pro String, setzt aber voraus, dass die 
Ausgabeeinheit immer nur 7 bit ausgibt.
Im BIOS gibt es dazu die 5 Funktionen CONIN, CONOUT, LIST, READER und 
PUNCH.
Im "CP/M 2.2 Alteration Guide" steht (S. 17/18, 1979-er Digital Research 
Ausgabe), das für diese das high order (parity) bit == 0 sein soll,
auch bei der Eingabe. Das bedeutet dann aber auch, dass man generall in 
CP/M keine 8-bit Binärdaten einlesen oder ausgeben kann.

Es ist mir nicht 100% klar ob diese Funktionen 7 bit erwarten oder ggf. 
das 7.bit selbst löschen.

Nur die Funktionen CONIN und READER löschen bit 7 explizit im Beispiel 
BIOS (S. 53)

In dem CP/M Assemblercode des HP Systems, das ich vor einiger Zeit mal 
disasembliert hatte, findet ebenfalls eine explizite Maskierung auf die 
unteren 7-bits beim TTY input statt.

Die CP/M Version von AVR-CPM macht anscheinend diese Filterung nicht, 
sondern gibt die volle 8-bit Breitseite auf die Konsole.
Der Emulator "Z80Emu" gibt auch nur die 7-bit Texte aus.

So wie es jetzt ist, kann man dann aber auch höhere > 128 Zeichencodes 
ausgeben, was ja auch ganz nett ist.
Ich bin nicht sicher ob CP/M grundsätzlich als 7-bit System für jede 
Console - I/O zu verstehen ist.

Meine Spekulation zu TRS-80/Steuerzeichen war nicht richtig.

F80.COM:
1
...
2
 I  l  l  e  g  a  l     S  t  a  t  e  m  e  n  t     N  u  m  b  e  .
3
49 6C 6C 65 67 61 6C 20 53 74 61 74 65 6D 65 6E 74 20 4E 75 6D 62 65 F2
4
0xF2 & 0x7F => 0x72 = 'r'
5
6
0000477A 496C 6C65 6761 6C20 5374 6174 656D 656E Illegal Statemen
7
0000478A 7420 4E75 6D62 65F2 5374 6174 656D 656E t Numbe.Statemen
8
0000479A 7420 556E 7265 636F 676E 697A 6162 6C65 t Unrecognizable
9
000047AA 206F 7220 4D69 7373 7065 6C6C 65E4 496C  or Misspelle.Il
10
000047BA 6C65 6761 6C20 5374 6174 656D 656E 7420 legal Statement 
11
000047CA 436F 6D70 6C65 7469 6FEE 496C 6C65 6761 Completio.Illega
12
000047DA 6C20 444F 204E 6573 7469 6EE7 496C 6C65 l DO Nestin.Ille
13
000047EA 6761 6C20 4461 7461 2043 6F6E 7374 616E gal Data Constan
14
000047FA F44D 6973 7369 6E67 204E 616D E549 6C6C .Missing Nam.Ill
15
0000480A 6567 616C 2050 726F 6365 6475 7265 204E egal Procedure N
16
0000481A 616D E549 6E76 616C 6964 2044 4154 4120 am.Invalid DATA 
17
0000482A 436F 6E73 7461 6E74 206F 7220 5265 7065 Constant or Repe
18
0000483A 6174 2046 6163 746F F249 6E63 6F72 7265 at Facto.Incorre
19
0000484A 6374 204E 756D 6265 7220 6F66 2044 4154 ct Number of DAT
20
0000485A 4120 436F 6E73 7461 6E74 F349 6E63 6F72 A Constant.Incor
21
0000486A 7265 6374 2049 6E74 6567 6572 2043 6F6E rect Integer Con
22
0000487A 7374 616E F4                            stan.
23
...

Martin

von Martin (Gast)


Lesenswert?

Nach Ergänzung um einen MAX 2323 um ein Terminal anzuschließen, habe ich 
mir nun noch ein SC16IS740 I2C-UART breakout-board besorgt.

Dazu würde mich interessieren, ob schon jemand das CP/M BIOS dafür 
angepasst hat. Ich sehe die I2C Port Routinen auf der AVR Seite, aber 
kein Gegenstück auf der CP/M Systemseite. Dort sind nur die originalen 
leeren Funktionen mit "ret" für PUNCH bzw. "ret ^Z" für READER 
implementiert.

Ich überlege, READER und PUNCH über den I2C-Serial-Wandler zu schicken. 
Im BIOS würde dann das IOBYTE ausgewertet und ggf. input und output über 
den I2C Bus geleitet.

Damit könnte man viele Programme direkt über CP/M auf diese zusätzliche 
Schnittstelle lenken. Zum Beispiel als Drucker oder eben für Kermit etc.

Martin

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Martin schrieb:
> Dazu würde mich interessieren, ob schon jemand das CP/M BIOS dafür
> angepasst hat.

Ist schon implementiertb und getestet. Schau mal hier:

Beitrag "Re: CP/M auf ATmega88"

Beitrag "Re: CP/M auf ATmega88"

seriell mit Kermit
Beitrag "Re: CP/M auf ATmega88"

von Martin (Gast)


Lesenswert?

Danke für die schnelle Antwort - gelesen hab ich's schon, die BIOS 
Quellen hier auf diesem Server 
(https://www.mikrocontroller.net/svnbrowser/avr-cp-m/avrcpm/trunk/cpm/) 
scheinen aber aber noch die alten zu sein (BIOS.MAC und BIOS.ASM jeweils 
mit den leeren returns)?

Oder habe ich da mal wieder was übersehen?

Ich möchte die I2C/UART nicht in jedem Programm direkt ansteuern, 
sondern die dafür vorgesehenen Systemgeräte (RDR:, PUN:) nutzen.

Dann könnte ich z.B.
1
pip PUN:=readme.txt
eingeben um einen Datei zu drucken.

Martin

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Martin schrieb:
>> Dazu würde mich interessieren, ob schon jemand das CP/M BIOS dafür
>> angepasst hat.
>
> Ist schon implementiertb und getestet. Schau mal hier:

Im BIOS ist der UART leider noch nicht integriert.

von Martin (Gast)


Lesenswert?

Weil ich kein Z80 Assembler-Profi bin, habe ich mal in pseudo-code 
aufgeschrieben, was im BIOS geändert/zugefügt werden müsste. Im Prinzip 
dürfte es reichen, die "reader" und "punch" Routinen mit Leben zuu 
füllen.

Mit den vorhandenen virtuellen Ports für I2C müsste das Ganze eigentlich 
recht einfach gehen, wenn man erst mal ohne Fehlerabfragen, Timeouts 
etc. arbeitet.
Da kein größerer Puffer verwendet wird, sondern byte-weise 
ein-/ausgegeben wird, ist natürlich die Frage für welche Baud-Raten das 
noch geht. Aber 2400 oder 4800 Baud wären auch schon o.k. z.B. für einen 
Drucker.
Könnte das funktionieren?

Martin


in BIOS.ASM und/oder BIOS.MAC (welches wird denn eigentlich verwendet?)
1
// --- VORHANDENER CODE FUER I/O ---
2
conin:
3
  in a,(0)
4
  cp 0ffh
5
  jp nz,conin
6
7
  in a,(1)
8
  ret
9
10
conout:
11
  ld a,c
12
  out (2),a
13
  ret
14
15
list:
16
  ret
17
18
listst:
19
  ld a,0
20
  ret
21
22
// --- NEU ---
23
  // ---------------------------------------------------------------
24
  // we need a static buffer for one byte
25
  db BUFFER [1]
26
  // ---------------------------------------------------------------
27
  
28
  // some constants
29
  I2CCMD    = 5;        // addr of I2C Command Port (1=read, 2=write)
30
  I2CMSGLEN = 1;        // Transferpuffergroesse
31
  I2CADRL   = 7;        // Transferpufferadresse low/high
32
  I2CADRH   = 8;
33
  
34
  I2C_CMD_Read  = 1;    // I2C Read Command
35
  I2C_CMD_Write = 2;    // I2C Write Command
36
  // ---------------------------------------------------------------
37
38
  // ---------------------------------------------------------------
39
punch:
40
  // send one byte in register C to UART via I2C
41
  Port[I2CADRH] := Hi(Addr(BUFFER));   // only needed once: move to init_uart_i2c
42
  Port[I2CADRL] := Lo(Addr(BUFFER));   // ...same...
43
  ... copy content of register C to BUFFER
44
  Port[I2CMSGLEN] := 1;                // send one byte
45
  Port[I2CCMD] := I2C_CMD_Write;       // go!
46
  ret
47
48
  // ---------------------------------------------------------------
49
reader:
50
  ; ld a,01Fh
51
  // read one byte into register A to UART via I2C
52
  Port[I2CADRH] := Hi(Addr(BUFFER));   // only needed once e,g, at cold/warmstart
53
  Port[I2CADRL] := Lo(Addr(BUFFER));   // only needed once e,g, at cold/warmstart
54
  ... copy content of register C to BUFFER
55
  Port[I2CMSGLEN] := 1;                // send one byte
56
  Port[I2CCMD] := I2C_CMD_Read;        // go!
57
  ret
58
59
  // ---------------------------------------------------------------
60
init_uart_i2c:
61
   // routine called during coldstart (and/or warmstart?)
62
  // set addr of buffer
63
  Port[I2CADRH] := Hi(Addr(BUFFER));   // only needed once e,g, at cold/warmstart
64
  Port[I2CADRL] := Lo(Addr(BUFFER));   // only needed once e,g, at cold/warmstart
65
  // set baud rate (e.g. 2400...4800...9600 baud)
66
  // ... store baud rate "somewhere" so that a CP/M program can
67
  // change this later
68
  // more initialization needed?

von Leo C. (rapid)


Lesenswert?

Es geht einfacher. Um I2C brauchst Du Dich garnicht zu kümmern. In 
diesem Artikel, auf den Joe schon verwiesen hatte, ist unten ein 
Beispiel:

Beitrag "Re: CP/M auf ATmega88"

Was dann noch fehlt, ist die Input Status-Routine und die I/O-Byte 
Geschichte.

von Martin (Gast)


Lesenswert?

ah Danke, den Kermit hatte ich zwar ge-sehen, die Assembler Routinen 
aber über-sehen. Das sieht ja deutlich einfacher und schneller aus als 
einen 1-byte buffer zu schicken.

Muss mal ausprobieren, ob ich ein neues BIOS bauen und dann auch auf die 
SD Karte schreiben kann.

Das IOBYTE kann ich ja mit dem STAT Befehl schon ändern und mit STAT 
DEV: die aktuelle Zuordnung ansehen - da muss ich nochmal im "Alteration 
Guide" nachlesen, ob und wo was maskiert und getestet werden muss.
Es gibt da ja auch noch "User Defined" reader und printer devices die 
man anschliessen kann. Aber ich denke RDR: und PUN: oder LST: und PUN: 
wären schon ausreichend (solange man keinen zweiten I2C UART anhängen 
möchte...).

Erst mal Danke für die Tips und Hinweise!

von Leo C. (rapid)


Lesenswert?

Im Alteration Guide wirst Du dazu wahrscheinlich nicht viel finden. Du 
könntest mal nach dem Zapple Monitor suchen, z.B. hier:

https://www.autometer.de/unix4fun/z80pack/ftp/altair/

von Martin (Gast)


Angehängte Dateien:

Lesenswert?

Um mich erst mal mit dem I2C UART anzufreunden und meine Verschaltung zu 
überprüfen, habe ich zwei kleine Turbo-Pascal 3 Programme geschrieben, 
die vielleicht auch für andere nützlich sein könnten:

MODE - erlaubt es UART Parameter (Baud-Rate, Bit-Anzahl, Parity, 
Stop-Bit-Anzahl) einzustellen, ähnlich wie das MODE Programm unter DOS. 
Ein Aufruf ohne Argumente zeigt die aktuellen Einstellungen an.

PRINT - erlaubt es eine Textdatei über den UART zu "drucken". z.B an 
einen realen Drucker oder via Null-Modem an ein weiteres Terminal/PC zu 
schicken. Vorher muss man einmal mit MODE die UART Parameter einstellen, 
sie bleiben dann erhalten.

Martin

von Leo C. (rapid)


Lesenswert?

Hallo Martin,
ich freue mich, daß sich jemand mit den Sachen beschäftigt und finde 
ziemlich gut, was Du da machst. Hast Du schon Erfahrungen mit der 
Performance? Und wolltest Du das nicht in FORTRAN programmieren? ;-)

von Martin Hepperle (Gast)


Lesenswert?

Bezüglich Performance habe ich nicht allzu viel probiert, da ich 
meistens so mit 9600...19200 Baud arbeite und das geht sehr gut.

Ich "drucke" z.B. die Turbo Pascal Programme auf einen Laptop (mit 
Nullmodem Kabel und Windows Teraterm) bei 19200 Baud und das geht 
fehlerfrei. Einstellen lassen sich noch wesentlich höhere Datenraten.
Ich habe spaßeshalber auch einen modernen Thermodrucker 
(POS/Kassendrucker) mit 19200 Baud angeschlossen und der druckt so 
schnell dass es keine Verluste gibt.

Auf Handshaking habe ich deshalb bislang verzichtet, da der Laptop die 
Daten schnell genug aufnimmt.
Ich vermute aber, dass man z.B. mit einem alten Nadeldrucker die 
Baudrate auf 2400...4800 heruntersetzen oder besser Handshaking 
einschalten muss.

Ich schwanke noch, ob ich die GPIO Leitungen lieber als allgemeine I/O 
oder als Modem Leitungen fürs Handshaking verwenden soll.
Bei Verwendung als I/O könnte man Schalter oder digitale Joysticks 
abfragen z.B. für Steuerungszwecke und Spiele. Ansonsten könnte man am 
I2C Bus ja noch weitere I/O Bausteine anhängen, wenn gewünscht.

Das MODE Programm habe ich inzwischen so ergänzt, dass es auch der 
Status der GPIO Pins (im Augenblick alle als input definiert) anzeigt.

Werde mal sehen, ob/wie ich das hier in das SVN ablegen kann.
Dann kommt die FORTRAN Version - oder doch lieber in ALGOL?.

Martin

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Als Hommage an Gary Kindall und sein CP/M muß man PL/M verwenden ;-)

P.S. Tolle Erweiterung von Dir!

von Marcel (Gast)


Lesenswert?

Finde ich auch!

Bitte dokumentier das mal irgendwo, so dass es die Nachwelt auch 
versteht :-)

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Marcel schrieb:
> Bitte dokumentier das mal irgendwo, so dass...
Guter Vorschlag!

@Martin
Einfach unformatiert in eine Textdatei tippen, ich übernehme es dann für 
die Doku.

von Leo C. (rapid)


Lesenswert?

Martin Hepperle schrieb:
> ob ich die GPIO Leitungen lieber als allgemeine I/O

Besser nicht. Tu Dir das nicht an.

> Ansonsten könnte man am
> I2C Bus ja noch weitere I/O Bausteine anhängen, wenn gewünscht.

Eben. Lieber die 20¢ für einen PCF8574 investieren. Dafür gibts bereits 
einen Treibern im Emulator. Es können 8 Stück davon (+ bei Bedarf 
nochmal 8 PCF8574A) über einfache I/O-Befehle angesprochen werden.

von Martin Hepperle (Gast)


Lesenswert?

...so, habe die letzten Abende mit I2C verbracht zunächst etwas 
frustrierend, aber gestern abend hat's geklappt ;-)
Ich hatte ein kleines Platinchen mit dem MCP23017 zur Hand (keinen 
PCF8574) und den wollte ich gerne anschließen.
Es hat aber 2 Abende gedauert, bis ich die vorhandenen I2C/Port 
Anbindung verstanden habe - der AVR Assembler ist mir halt noch recht 
fremd.
Zusätzlich war mir der Zusammenbau der Registerauswahl für den SC16IS740 
unverständlich (mit swap, rshift), bis ich dann nochmal ins Datenblatt 
geschaut habe und dort die merkwürdige Platzierung der Registeradresse 
gefunden habe. Darüber hinaus hat mich auch die Mischung von 7-bit und 
sogenannten 8-bit I2C Adressen verwirrt...

Jedenfalls habe ich jetzt den MCP23017 am laufen und kann damit sehr 
flexibel bis 16 bit I/O ansteuern. Zum Beispiel für einen Centronics 
Schnittstelle.
Für seine Register habe ich 22 Portadressen ab 0x90 verwendet.
Alles mit entsprechenden #defines etc. sodass man den Teil auf Wunsch 
aktivieren kann.

Es ist noch die Frage, was standardmäßig aktiviert sein soll - im 
Augenblick wird ja z.B. der SC16IS740 UART automatisch mit aktiviert, 
wenn I2C Support aktiv ist. Besser wäre vielleicht neben generell I2C 
Unterstützung eine Liste aller I2C Devices, sodass man über die 
config.inc explizit definieren kann, welche man wirklich haben möchte. 
Wenn immer alle eingebunden wären, geht irgendwann der Z80 
Port-Adressraum aus.

Ich werde die MCP23017 Integration über's Wochenende nochmal etwas 
weiter dokumentieren und könnte dann die modifizierten Quellen wieder 
zur Integration zurückgeben. Es sind nur config.inc, i2c.asm und 
virt_ports.asm betroffen und ein kleines Turbo-Pascal Testprogramm gibt 
es noch dazu.

Martin

von Marcel (Gast)


Lesenswert?

Wow...

von Martin (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

in dem beigefügten Archiv sind meine ASM Quellen mit MCP23017 
Unterstützung.
Im "I2C-liesmich.txt" sind meine Erläuterungen dazu.

Ich kann auch ein .IMG beisteuern, auf dem dann die Pascal Dateien 
enthalten sind.

Im Prinzip könnten die 3 modifizierten AVR Dateien direkt in das SVN 
übernommen werden - meine Kommentarzeilen mit "-MH-" können entfernt 
werden - ich erhebe kein Copyright auf irgendwas.

Zum Z80 BIOS habe ich etwas weitergelesen und sehe, dass wohl alles zum 
Neubau auf dem von Leo C. verteilten disk image vorhanden ist.
Ich muss nur noch verstehen, welche Adressen/Größen ich anpassen muss, 
weil das BIOS natürlich etwas größer wird wenn dort die serielle (RDR, 
PUN) und die parallel Schnittstelle (LST) über I2C hinzukommen.

Martin

von Leo C. (rapid)


Lesenswert?

Hallo Martin,

Super.

Martin schrieb:
> Im Prinzip könnten die 3 modifizierten AVR Dateien direkt in das SVN
> übernommen werden -

Das Beste wäre, wenn Du die Erweiterungen und Verbesserungen selbst 
einchecken würdest. Du brauchst dazu nur einen mikrocontroller.net 
Account, den Du vielleicht ja schon hast.

> meine Kommentarzeilen mit "-MH-" können entfernt werden -

Diese Art von Markierungen sieht man häufig in alten Programmen. Aber 
dafür hat man heute ja Versionsverwaltungen wie SVN.

> ich erhebe kein Copyright auf irgendwas.

Du könntest jeweils im Kopf eine Zeile mit Jahr und Autor einfügen.

> Ich kann auch ein .IMG beisteuern, auf dem dann die Pascal Dateien
> enthalten sind.

Gerne.
Du kannst sie aber auch im SVN im Zweig cpm/utils unterbringen.

von Martin H. (therealmartin)


Lesenswert?

Leo,

ich wollte nicht so gerne in anderer Leute Code herumwursteln...kann das 
aber gerne machen.

Dazu habe mir gerade einen microcontroller.net Account angelegt und auch 
das extra SVN Passwort gefunden.

Mit Tortoise SVN ist es mir aber nicht gelungen, Verbindung mit dem 
Repository aufzunehmen:
1
Command: Checkout from svn://mikrocontroller.net/avr-cp-m, revision HEAD, Fully recursive, Externals included  
2
Error: Unable to connect to a repository at URL 'svn://mikrocontroller.net/avr-cp-m'  
3
Error: Can't connect to host 'mikrocontroller.net': Es konnte keine Verbindung  
4
Error:  hergestellt werden, da der Zielcomputer die Verbindung verweigerte.  
5
Completed!:


Brauche ich noch eine Freigabe meines Benutzernamens für das AVR-CPM 
Repository?
Ich dachte, dass ich auch ohne Schreibzugriff browsen oder auschecken 
könnte... Aber vielleicht brauche ich eine Freigabe per SVN auch zum 
Lesen.


Martin

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Martin H. schrieb:
> Brauche ich noch eine Freigabe meines Benutzernamens für das AVR-CPM
> Repository?

Ja, habe ich gerade eingerichtet und sollte nun gehen.

von Martin H. (therealmartin)


Lesenswert?

Joe,

Danke, aber irgendwie bin ich zu doof.

Mit dem Windows Tortoise SVN, mit dem ich sonst gelegentlich im internen 
Firmen-Netzwerk arbeite, klappte es nicht. Nach außen ist da eine 
Firewall, die vielleicht svn verbietet?

Also versuche ich mal als Alternative die Kommandozeile:
Ich versuche eine lokale Kopie auf meinem Rechner anzulegen:
1
svn checkout svn://mikrocontroller.net/avr-cp-m
2
svn: E170013: Unable to connect to a repository at URL 'svn://mikrocontroller.net/avr-cp-m'
3
svn: E730061: Can't connect to host 'mikrocontroller.net': Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte.
oder auch mit Authentifizierungsdaten
1
svn checkout svn://mikrocontroller.net/avr-cp-m --username TheRealMartin --password ...
2
svn: E170013: Unable to connect to a repository at URL 'svn://mikrocontroller.net/avr-cp-m'
3
svn: E730061: Can't connect to host 'mikrocontroller.net': Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte.
Das gleiche bekomme ich auch mit anderen Befehlen wie "info" etc.

Hast Du noch eine Idee?

Martin

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Die Quellen liegen hier: svn://mikrocontroller.net/avr-cp-m/avrcpm/trunk

Bei mir geht es, ich habe es gerade versucht. Versuche mal bitte über 
diesen Link an das Archiv zu kommen:

https://www.mikrocontroller.net/svnbrowser/avr-cp-m/

von Martin H. (therealmartin)


Lesenswert?

Per WEB browser komme ich schon dahin und hatte mir das ganze ja auch 
als TAR heruntergeladen um lokal zu arbeiten.
Das WEB Interface hat aber keine commit Funktion es ist nur ein viewer.

Mit "svn checkout" oder Turtoise-SVN klappt es nicht.

Ich habe nochmals etwas herumgeforscht, und tatsächlich verbietet unsere 
Firmen-Firewall den port 3690 der für svn verwendet wird.

Wenn der mikrocontroller.net Server das WebDAV Protokoll unterstützen 
würde, könnte ich darauf zugreifen, aber man kann nicht alles haben.

Martin

: Bearbeitet durch User
von Martin H. (therealmartin)


Lesenswert?

O.K. das mit dem SVN bekommen wir noch hin.

Nachdem ich den AVR-Teil soweit im Griff habe, möchte das CP/M System 
mit Hilfe von AVRCPM.SUB nochmal zu bauen (und später erweitern).

Dazu habe ich versucht, das CP/M mit Hilfe der auf dem Disk-Image C: 
vorhandenen Dateien und dem SUBMIT Skript AVRCPM.SUB neu zu bauen.

Das habe ich schließlich nach etwas Kampf mit SUBMIT und A: versus C: 
hinbekommen und erhalte nun auch ein kombiniertes CPM.BIN.
(Kampf: wenn ich z.B. SUBMIT von Laufwerk C: ausführe bekomme ich eine 
Fehlermeldung über ein fehlendes Laufwerk G: und ähnliche Effekte)

Am Ende von AVRCPM.SUB steht noch ein Aufruf eines ominösen Programms 
"W". Das fehlt aber in der Distribution.

Ich vermute, dass es die CPM.BIN Datei roh auf den Datenträger schreiben 
soll. Bevor ich nun lange herumsuche meine Frage:
Wie bekomme ich das CPM.BIN am einfachsten auf die Diskette A:?
(Also auf dem AVR-CP/M System, nicht über so modernen externen 
Schnickschnack wie Windows oder Linux)

Danke,
Martin

: Bearbeitet durch User
von Leo C. (rapid)


Lesenswert?

Martin H. schrieb:
> Am Ende von AVRCPM.SUB steht noch ein Aufruf eines ominösen Programms
> "W". Das fehlt aber in der Distribution.

W.COM gehört zum simh und dient dort dazu, Dateien aus dem CP/M System 
in das Host-Dateisystem zu schreiben. Auf einem richtigen CP/M-System 
ist es also überflüssig.

> Ich vermute, dass es die CPM.BIN Datei roh auf den Datenträger schreiben
> soll. Bevor ich nun lange herumsuche meine Frage:
> Wie bekomme ich das CPM.BIN am einfachsten auf die Diskette A:?

Dafür waren MOVCPM und SYSGEN gedacht. Siehe "CP/M 2.2 Alterarion 
Guide".
Jens hatte das ganze schon mal durchgezogen. Diskussion ungefähr ab [1] 
und ab [2] gibts von ihm ein Programm, um CP/M aus die Systemspuren zu 
kopieren.


[1] Beitrag "Re: CP/M auf ATmega88"
[2] Beitrag "Re: CP/M auf ATmega88"

von Martin H. (therealmartin)


Lesenswert?

Danke,

werde mal mit avrsyscp von Jens experimentieren.

Martin

von Martin H. (therealmartin)


Angehängte Dateien:

Lesenswert?

... wieder ein Schrittchen weiter ...

Nachdem die Pascal Progrämmchen ja ganz nett aber eben hardware-abhängig 
waren, wollte ich die Schnittstellen ja noch ins CP/M integrieren.
Die IOBYTE Funktionalität bin ich noch nicht angegangen, da ich mit der 
aktuellen Konfiguration schon recht zufrieden bin.

Es sind nun die logischen Geräte LPT:, RDR: und PUN: verfügbar.
Man braucht dazu zwei I2C Sklaven:
I2C Adresse 0x48: SC16IS740 - UART (9600,N,8,1 default)
I2C Adresse 0x20: MCP23017  - 16-bit GPIO (Port A[0:7]: Daten, Port 
B[0:3]: BUSY,ACK/,PAPER,STROBE/)

Die beiden I2C chips habe ich auf breakout boards mit in mein AVR-Stick 
Gehäuse eingebaut und für die serielle Schnittstelle einen zweiten DB9 
Stecker installiert.
Die Parallelschnittstelle ist mit VCC, GND auf einen 20-poligen 
Bandkabelstecker geführt. Sie arbeitet allerdings mit 3,3V 
Ein-Ausgabepegel, sodass je nach Einsatz Pegelwandler für klassische 
Centronics-Drucker nötig wären.

"CON:" ist weiterhin die AVR-UART serielle 
Ausgabe-/Eingabe-Schnittstelle
"RDR:" und "PUN:" sind auf die I2C UART serielle 
Ausgabe-/Eingabe-Schnittstelle gelegt.
"LST:" ist auf die I2C GPIO parallele Ausgabe-Schnittstelle gelegt.

Ich kann nun den AVR-CP/M z.B. mit
1
PIP LST:=CON:
als Schreibmaschine benutzen (Ausgabe mit CTRL-Z beenden).  Oder eine 
Textdatei schnell mal mit
1
PIP PUN:=FILE.TXT
auf einen angeschlossenen Laptop oder seriellen Drucker ausgeben.  Oder 
mit
1
PIP FILE.TXT=RDR:
eine (mit CTRL-Z abgeschlossene) Textdatei einlesen.
Mit Turbo Pascal kann man nach einem Assign() auf 'Lst' (GPIO/parallel) 
oder 'Aux' (I2C seriell) ausgeben.

Falls das jemand ausprobieren möchte:

- auf dem beigefügen Disketten-Image CPMDSK_A.IMG ist das modifizierte 
BIOS. Beim Booten sollte sich CP/M mit Version "2.2x" melden.
- dazu gehört die entsprechende AVR Firmware, die die neuen virtuellen 
Ports für die beiden I2C Geräte enthält.

Wenn das ganze noch etwas verfeinert ist, wird der Code wieder in die 
Quellen zurückfließen.

Gestern Abend habe ich dann auch meine SD Karte vernichtet - zu viele 
Schreib-Lesezyklen?

Martin

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

In einer der vielen AVR CP/M Versionen gab es auch die Variante mit I2C 
und Echtzeituhr (PCF8583) und 8Bit-Schnittstelle (PCF8574). Somit konnte 
u.a. ZSDOS zum Einsatz kommen. Um ein BIOS zu bauen hatte ich damals 
auch eine kleine Konfiguration erstellt (ZSDOSCPM.SUB). Vielleicht nutzt 
du gleich ZSDOS um deine Änderungen bezüglich I2C einzubauen. Für das 
ZSDOS benötigst du (alles im Anhang):
IPL.MAC
CCP.MAC
ZSDOS.MAC(BDOS)
BIOS.MAC
AVRCPM.LIB
CFGACPM.LIB
Um es schnell zu testen, benutze ich immer den AltairZ80 Simulator. Der 
„W“ Befehl schreibt die Datei vom CP/M System zurück auf den PC, kann 
natürlich direkt auf CP/M entfallen.

von Martin H. (therealmartin)


Lesenswert?

Zu spät - ich habe schon das ZSDOS verwendet und auf Deiner AVRCPM.SUB 
Datei aufgebaut. Darin steht dann auch:
1
; create BDOS.COM
2
$1:M80 =$1:ZSDOS/M
3
$1:L80 $1:ZSDOS,$1:ZSDOS/N/E
4
ERA $1:ZSDOS.REL
Ich habe nur die .SUB Datei auf A: kopiert und $1 Parameter eingebaut 
damit die Quellen und Ergebnisse alle auf C: verbleiben können.
A: weil das SUBMIT nur über A: funktioniert (ich wollte nur mit Basis 
CP/M Mittel arbeiten ohne DO, SUPERSUB etc.) .

Die 8-Bit-Schnittstelle (PCF8574) ist weiterhin enthalten, ich habe sie 
nur auf I2C 0x27 gesetzt, weil das die Default Einstellung meiner Module 
war (die gibt es z.B. auch als Interface für die 1602 LCD Anzeigen).
Die Z80 Ports dafür liegen weiterhin ab 0x80.  Als Druckerschnittstelle 
reichen die 8 Bit leider nicht aus, deshalb habe ich den 16-bit GPIO 
verwendet.

Die RTC hatte ich im code nicht gesehen - ich glaube die war nur über 
die low Level I2C ports ansprechbar, z.B. mit dem Pascal Programm im 
SVN. Das ist natürlich auch weiterhin für alle möglichen I2C 
Gerätschaften möglich.

Es ist also nichts verschwunden, nur zur vorhandenen Basis zugefügt 
worden (solange noch virtuelle Ports frei sind, ist das wohl die 
eleganteste Möglichkeit).

von Leo C. (rapid)


Lesenswert?

Martin H. schrieb:
> Die 8-Bit-Schnittstelle (PCF8574) ist weiterhin enthalten, ich habe sie
> nur auf I2C 0x27 gesetzt, weil das die Default Einstellung meiner Module
> war (die gibt es z.B. auch als Interface für die 1602 LCD Anzeigen).

Das wollte ich schon länger mal schreiben. Hier liegt wohl ein 
Missverständnis vor. Mit dem Treiber können insgesamt 8 ICs angesprochen 
werden. 0x20 ist dann die Basisadresse, bzw. die Adresse des ersten 
Chips. Ändert man die Adresse im Treiber auf 0x27, können die Chips auf 
den Adressen 0x20-0x26 nicht mehr erreicht werden.

> Die Z80 Ports dafür liegen weiterhin ab 0x80.

Dein Modul liegt dann auf 0x87.

> Als Druckerschnittstelle
> reichen die 8 Bit leider nicht aus, deshalb habe ich den 16-bit GPIO
> verwendet.

Man könnte auch 2 PCF8574 verwenden, jedenfalls mit dem unveränderten 
Treiber. Aber der MCP23017 hat natürlich weitere Vorteile. ZB. richtige 
Push/Pull-Ausgänge. Und das er zusätzlich unterstützt wird, ist ja kein 
Fehler.

> Die RTC hatte ich im code nicht gesehen - ich glaube die war nur über
> die low Level I2C ports ansprechbar, z.B. mit dem Pascal Programm im
> SVN. Das ist natürlich auch weiterhin für alle möglichen I2C
> Gerätschaften möglich.

Für die RTC gibt es einen Treiber für ZSDOS (LDTIM)[1].
Den könnte man auch ins BIOS verlegen.

[1] Beitrag "Re: CP/M auf ATmega88"

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Martin H. schrieb:
> Wie bekomme ich das CPM.BIN am einfachsten auf die Diskette A:?

z.B. mit POWER.COM

A0=load cpm.bin 4000 Last Address:59FFH    52 sectors
A0=write 0 1 4000 52
G=----:-- T=0000 S=001 PS=000 Rec#    1 At:4000-407F
G=----:-- T=0000 S=002 PS=001 Rec#    2 At:4080-40FF
G=----:-- T=0000 S=003 PS=002 Rec#    3 At:4100-417F

....

G=----:-- T=0001 S=024 PS=023 Rec#   50 At:5880-58FF
G=----:-- T=0001 S=025 PS=024 Rec#   51 At:5900-597F
G=----:-- T=0001 S=026 PS=025 Rec#   52 At:5980-59FF

von Martin H. (therealmartin)


Lesenswert?

Leo C. schrieb:
> Das wollte ich schon länger mal schreiben. Hier liegt wohl ein
> Missverständnis vor. Mit dem Treiber können insgesamt 8 ICs angesprochen
> werden. 0x20 ist dann die Basisadresse, bzw. die Adresse des ersten
> Chips. Ändert man die Adresse im Treiber auf 0x27, können die Chips auf
> den Adressen 0x20-0x26 nicht mehr erreicht werden.

Ah ja - in der Tat ein Mistverständnis meinerseits. Das werde ich noch 
überarbeiten. Ich wollte nur Überlappungen vermeiden. Es ist natürlich 
die Frage, ob beide GPIOs (PCF8574 und MCP23017) unbedingt koexistieren 
müssen oder ob man nicht (wenn überhaupt) nur einen GPIO einsetzt. Der 
MCP23017 ist schön flexibel, frisst aber auch viele virtuelle 
Portadressen. Aber solange noch genug verfügbar sind...

Joe G. schrieb:
> Martin H. schrieb:
>> Wie bekomme ich das CPM.BIN am einfachsten auf die Diskette A:?
>
> z.B. mit POWER.COM
>
> A0=load cpm.bin 4000 Last Address:59FFH    52 sectors
> A0=write 0 1 4000 52
> ...

Sehr gut - werde ich in Zukunft verwenden um mir den SD-Karten-Austausch 
zu ersparen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Martin

Mit welchem Baudratenquartz arbeitest du beim SC16IS740? Ich würde es 
gerne bei mir testen bevor ich den Code im SVN einchecke. Ein MCP23017 
Modul muss ich mir erstmal besorgen.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Noch ein Vorschlag.

Da ja einige Hardwareboards mit Propeller, I2C (RTC und PCF8574) im 
Umlauf sind, würde es mit deiner I2C Adresse 0x20 für den MCP23017 zu 
Kollisionen kommen. Sie auf 0x27 zu legen ist auch nicht so günstig 
(siehe Leo C.) da dann nur noch ein IC angesprochen werden kann. Um die 
größtmögliche Kompatibilität zu erhalten, könntest du doch den MCP23017 
auf 0x27 legen (siehe Tabelle). Dann sind zwar noch 7 statt 8 PCF8574 zu 
verwenden, aber das kann verschmerzt werden denke ich.

P.S: In Deiner Kurzdoku „I2C liesmich.txt“ hast du die Zuordnung zu den 
IC’s vertauscht.

Es sind nun diese drei I2C Geräte direkt implementiert:
    - SC16IS740 UART at I2C address 0x20,
    - MCP23017 16-bit GPIO at I2C address 0x48,

Beitrag #5590045 wurde vom Autor gelöscht.
von Martin H. (therealmartin)


Angehängte Dateien:

Lesenswert?

Danke für die Korrektur der I2C Adressen, habe ich in meinen Dokumenten 
und im Schema.pdf geändert.
Dank POWER kann ich das CPM.BIN nun auch erfolgreich direkt vom System 
auf die Karte schreiben.

Anbei nochmals eine aktualisierte Version meiner Dateien.
Die I2C Adresse für die PCF habe ich wieder auf die 0x20 zurückgesetzt, 
die für den MCP erst mal ebenfalls auch 0x20 gelassen. Ich vermute, dass 
nicht so viele Anwender beide Chips gleichzeitig verwenden möchten.

Die Baud-Raten Divisorberechnung habe ich versucht mit einem M80 Equate 
zu berechnen, bin aber an den wahrscheinlich zu großen Zahlen 
Divisor=(MHz/BaudRate/16) gescheitert. Deshalb ist der Divisor im 
Quellcode BIOS.MAC als EQU hart verdrahtet, aber mit Formel kommentiert. 
Steht so auch in MODE.PAS.
Mein SC16IS740 board hat einen 14.7456 MHz Quarz was dann z.B. für 9600 
Baud einen Divisor von 96 ergibt.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Danke!
Ein Teil läuft schon mal...

ipl
64k cp/m vers 2.2x

B>scan
Scanning I2C bus for devices...
*** Device found at slave address 20h = 32d (8-bit: 40h = 64d)
*** Device found at slave address 27h = 39d (8-bit: 4Eh = 78d)
*** Device found at slave address 50h = 80d (8-bit: A0h = 160d)
Done.

Hier mußte ich meinen PCF8574 auf 0x27 legen, um keine Kollision zu 
bekommen. 0x50 ist die RTC. Für die UART fehlt mir noch der 
Baudratenquarz, erst mal in meiner Kiste suchen...

: Bearbeitet durch User
von Martin H. (therealmartin)


Angehängte Dateien:

Lesenswert?

Nach dem Feedback habe ich nun in meinen System die folgende Zuordnung 
realisiert:
- SC16IS740 UART at I2C address 0x48, mapped to Z80 ports 0x50-0x5F 
(A0=VCC, A1=VCC), tested up to 115200 baud
- MCP23017 16-bit GPIO at I2C address 0x27, mapped to Z80 ports 
0x60-0x75 (A0=VCC, A1=VCC, A2=VCC)
- PCF8574 8-bit GPIO(s) at I2C address(es) 0x20(-0x26), mapped to Z80 
ports 0x80-0x86
In der nochmal beigefügten Paket sind diese so eingestellt.

Für mich ist das ein brauchbarer Kompromiss - man könnte dann noch 7 
PCF8574 GPIOs anzuschließen.

Das AVR-UART ist wie im Original auf 115200, der I2C UART als default 
auf 9600 in BIOS.MAC (setup_I2C_UART).

Die beiden Dokumente im Archiv sollten alles Wesentliche grob erläutern.
Den SC16IS740 UART kann man sicher auch mit anderen Quarzen betreiben, 
dann müsste nur der Teiler neu ausgerechnet werden - Formeln aus dem 
Datenblatt sind sicherheitshalber auch im  Quellcode (BIOS.MAC und auch 
in MODE.PAS).

Die Versionsnummer "2.2x" habe ich gewählt, damit ich sehe, ob meine 
Änderungen wirklich ankommen. Es ist natürlich weiterhin ein CP/M 2.2 
(bzw. ZSDOS).

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Martin
Ich bin gerade dabei deinen Code zu testen und zu übernehmen. Dabei sind 
mir u.a. im CCP.MAC und ZDOS.MAC Laufwerkszuweisungen wie

maclib  C:MEMCFG.LIB

aufgefallen. Hatte das einen Grund hier das Laufwerk C: anzugeben?

von The RealMartin (Gast)


Lesenswert?

... die kannst Du entfernen.

Ich habe das neue System direkt auf dem AVR-CP/M-Stick erstellt und dort 
liegt nur die AVRCPM.SUB Datei auf A: weil das CP/M SUBMIT nur von 
Laufwerk A: aus funktioniert.
Aus Platzgründen liegen aber meine Quellen auf C: und ich musste für die 
Makrodefinitionen deshalb einen Pfad angeben damit alles funktioniert.

Auch wenn die Verwendung des IOBYTE noch nicht implementiert ist, kannst 
Du auch bei der Initialisierung des CP/M Systems den Default-Wert auf 
148d (10.01.01.00b)setzen (wird augenblicklich auf Null gesetzt, d.h. 
TTY: für alle 4 logischen Einheiten), dann gibt ein
1
STAT DEV:
 schon mal die richtigen Zuordnungen aus.

In BIOS.MAC
Original:
1
  xor  a
2
  ld  (iobyte),a
3
  ld  (cdisk),a
4
  jp  gocpm
Neu:
1
  ld  a,148
2
  ld  (iobyte),a
3
  xor  a
4
  ld  (cdisk),a
5
  jp  gocpm

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Danke... hab mir schon sowas gedacht.

Ich habe mal alle Quellen um sich ein CP/M zu bauen in ein File gepackt 
(cpm_source.zip). Außerdem gibt es Laufwerksimage auf dem direkt unter 
CP/M das CP/M gebaut werden kann. Der Start erfolgt wie immer mit do 
(Supersub) avrcpm.sub. Der Platz auf einer Diskette reicht gerade aus 
dafür ;-)

Im BIOS hatte ich noch die Speierberechnung korregiert, es ist wieder 
ein 62k CP/M (ist aber nur Kosmetik ;-)

Es wäre schön, wenn es noch jemand ausprobiert, die Erweiterungen von 
Martin bzw. I2C sind wirklich sehr nützlich.

@Martin Die Änderungen bezüglich IOBYTE habe ich übernommen

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier noch die Quellen

von Martin H. (therealmartin)


Lesenswert?

Danke für die Sichtkontrolle und die Integrationsarbeit.
Ein aktualisiertes HEX file zum flashen ware im Repository auch gut 
aufgehoben.

Mit 62K/64K hatte ich etwas gehadert und mich dann für die historisch 
wohl falsche aber logischere 64K Bezeichnung entschieden. Ist aber 
wirklich egal.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Martin H. schrieb:
> Ein aktualisiertes HEX file zum flashen ware im Repository auch gut
> aufgehoben.

Das ist der nächste Schritt.

Ich stelle gerade so etwas wie eine kleine Nachbauanleitung zusammen. 
Hier werden als „Erststart“ auch die BIN bzw. Hex-Files bzw. die 
Laufwerks-Images bereitgestellt. So kann der interessierte Nachnutzer 
das System zunächst ohne die Hürden der Softwareerstellung in Betrieb 
nehmen. Es hakt derzeit noch etwas bei der Lieferung aller meiner 
benötigten I2C Komponenten. Einige sind beim Zoll hängen geblieben und 
warten nun auf meine Auslöse :-)

von Martin H. (therealmartin)


Lesenswert?

Den Reformationstag habe ich genutzt, um das CON: Gerät zu reformieren.
Dort habe nun die IOBYTE Funktionalität implementiert.

Damit kann man jetzt systemweit zwischen dem AVR-UART und dem I2C-UART 
umschalten. Alle Programme, die das BDOS verwenden, sollten damit 
funktionieren. Ich habe es mit Turbo-Pascal, Multiplan Wordstar und Zork 
getestet.

Wer ein Terminalprogramm wie Teraterm verwendet, muss die Zeilenenden 
auf CR setzen, bei CR/LF überschreibt die Ausgabe sich selbst und man 
sieht z.B. beim DIR nur eine Zeile.
Außerdem muss das lokale Echo ausgeschaltet sein, sonst sieht man alles 
doppelt (bzw. nach ein paar Gläsern eben 4-fach).

Augenblicklich implementierte Zuordnungsmöglichkeiten für CON:
TTY: = AVR-UART
CRT: = I2C-UART
BAT: wie TTY:
UC1: wie TTY:

Weitere Möglichkeiten:
- die beiden weitere Optionen BAT: und UC1: könnte man noch für andere 
Schnittstellen nutzen.
- die RDR:, PUN: und LST: Schnittstellen könnte man leicht auch noch 
IOBYTE-tauglich machen, allerdings habe ich da im Augenblick keinen 
direkten Bedarf.
Vielleicht bekomme ich ja mal einen Lochstreifenleser/stanzer, dann wird 
es vielleicht interessanter ...

Je nach STAT Programm muss man unterschiedliche Zuweisungen angeben:
Das STAT auf meiner Festplatte C: ist ein anderes als das auf meiner 
Diskette A:
Mit
1
STAT VAL:
bekomme ich auf A: TTY:, auf C: OCC: für den AVR-UART.

Anwendungsbeispiele:
... Anzeige der aktuellen Zuordnungen für die vier logischen Geräte 
CON:, RDR:, PUN und LST:
1
A>STAT DEV:
2
CON: is TTY:
3
RDR: is PTR:
4
PUN: is PTP:
5
LST: is LPT:

... Anzeige der erlaubten Zuordnungen:
1
A>stat VAL:
2
3
Temp R/O Disk: d:=R/O
4
Set Indicator: d:filename.typ $R/O $R/W $SYS $D  R
5
Disk Status  : DSK: d:DSK:
6
User Status  : USR:
7
Iobyte Assign:
8
CON: = TTY: CRT: BAT: UC1:
9
RDR: = TTY: PTR: UR1: UR2:
10
PUN: = TTY: PTP: UP1: UP2:
11
LST: = TTY: CRT: LPT: UL1:

... die Konsole auf die zweite serielle Schnittstelle (I2C-UART) 
umlenken:
1
A>STAT CON:=CRT:

... ab hier erfolgen alle Ein- und -ausgaben vom I2C-UART, z.B. einem 
zweiten Terminal.
1
A>STAT DEV:
2
CON: is CRT:
3
RDR: is PTR:
4
PUN: is PTP:
5
LST: is LPT:
... bis man dort ...
1
A>STAT CON:=TTY:
... eingibt.

Wie bisher kann man über "unlogische" (physikalische) Geräte auch Ein- 
und Ausgaben auf der ursprünglichen AVR-UART-Konsole erzeugen:
1
A>PIP TTY:=readme.txt
... sendet den Datei-Inhalt IMMER auf den AVR-UART, unabhängig vom 
IOBYTE.
1
A>PIP CRT:=readme.txt
... sendet den Datei-Inhalt IMMER auf den I2C-UART, unabhängig vom 
IOBYTE.


Die Änderungen im BIOS sind gering und alles passt weiterhin noch in 52 
Sektoren (obwohl ich rechnerisch immer auf 53 komme).

BIOS.MAC:
===============================================
1) zusätzliches equate für I2C Statusabfrage einfügen:
1
IF SC16IS740
2
...        
3
        I2C_UART_RXRDY  equ     01h     ; data available?
4
ENDIF

===============================================
2) CON: I/O Funktionen ersetzen:
1
; ----- I/O handlers -----
2
const:
3
        ld      a,(IOBYTE)      ; get content of IOBYTE
4
        call    JumpSel_01      ; select via bits [0:1]
5
        dw      AVR_UART_status ; 00=TTY:
6
        dw      I2C_UART_status ; 01=CRT:
7
        dw      AVR_UART_status ; 10=BAT:
8
        dw      AVR_UART_status ; 11=UC1:
9
10
conin:
11
        ld      a,(IOBYTE)      ; get content of IOBYTE
12
        call    JumpSel_01      ; select via bits [0:1]
13
        dw      AVR_UART_in     ; 00=TTY:
14
        dw      I2C_UART_in     ; 01=CRT:
15
        dw      AVR_UART_in     ; 10=BAT:
16
        dw      AVR_UART_in     ; 11=UC1:
17
18
conout:
19
        ld      a,(IOBYTE)      ; get content of IOBYTE
20
        call    JumpSel_01      ; select via bits [0:1]
21
        dw      AVR_UART_out    ; 00=TTY:
22
        dw      I2C_UART_out    ; 01=CRT:
23
        dw      AVR_UART_out    ; 10=BAT:
24
        dw      AVR_UART_out    ; 11=UC1:
25
26
list:
27
... keine Änderungen, vielleicht später ...


===============================================
3) Den neuen I/O Verteiler einfügen

...
1
; ----- specific handlers
2
3
; general, IOBYTE indexed jump table selector
4
; call must be followed by 4 address words
5
JumpSel_01:     ; selector in bits [0:1]
6
        RLCA    ; multiply A by 2 for address increment
7
JumpSel_21:     ; offset is in bits [1:2] of A
8
        AND     00000110B       ; mask bits [1:2] of A
9
        EX      (SP),HL ; swap (SP)<->HL, HL = first address after CALL = table base
10
        LD      E,A     ; load Offset into DE
11
        LD      D,0
12
        ADD     HL,DE   ; add offset to table base
13
        LD      A,M     ; least significant byte
14
        INC     HL
15
        LD      H,M     ; most significant byte
16
        LD      L,A     ; HL = address of routine
17
        EX      (SP),HL ; swap (SP)<->HL, TOS now has the routine address
18
        RET     ; return to selected Routine via TOS address
...

===============================================
4) Die fehlende I2C_UART Status Funktion einfügen

...
1
; ----- I2C UART -----
2
3
I2C_UART_status:
4
        in      a,(I2C_UART_LSR)
5
        and     I2C_UART_RXRDY
6
        ret     z       ; no data available
7
        or      0ffh
8
        ret
...

Das war's.

@Joe: Wäre toll, wenn Du das noch in Deine Testversion und dann ins 
Repository einpflegen könntest.

von Martin H. (therealmartin)


Lesenswert?

Joe G. schrieb:
[...]
> Ich stelle gerade so etwas wie eine kleine Nachbauanleitung zusammen.
> Hier werden als „Erststart“ auch die BIN bzw. Hex-Files bzw. die
> Laufwerks-Images bereitgestellt. So kann der interessierte Nachnutzer
> das System zunächst ohne die Hürden der Softwareerstellung in Betrieb
> nehmen.
Ich denke das ist sehr nützlich für den Einstieg.

> Es hakt derzeit noch etwas bei der Lieferung aller meiner
> benötigten I2C Komponenten. Einige sind beim Zoll hängen geblieben und
> warten nun auf meine Auslöse :-)

Ja, ja das sind auch meine besten Freunde dort - ich versuche meine 
Bestellungen immer unter der magischen 22€ Grenze zu halten, das klappt 
meistens. Ansonsten kostet mich der Abholspaß immer 2 Stunden und viel 
Spaß beim Erklären - "Elektronikbauteile - was für eine Zollkategorie 
ist das denn?" oder "was, ein alter Computer - ist das nicht 
Elektronikschrott?".

Leider hatte ich keinen I2C UART mehr, sonst hätte ich mal einen 
geschickt.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Martin H. schrieb:
> Wäre toll, wenn Du das noch in Deine Testversion und dann ins
> Repository einpflegen könntest.

Ich hoffe, ich komme morgen dazu. Auch der Zoll hat nun meine Baugruppen 
durchgewunken ;-)

von Martin H. (therealmartin)


Angehängte Dateien:

Lesenswert?

1) IOBYTE
Um die unendliche Geschichte vom IOBYTE abzuschließen, habe ich diese 
noch für die LIST, PUNCH und READER Funktionen implementiert.
Damit kann man nun alle verfügbaren Geräten 'beliebig' zuordnen. Mit den 
drei Schnittstellen AVR-UART, I2C-UART und I2C-GPIO bin ich in der 
Praxis erst mal ausreichend versorgt.
Der Code des BIOS ist dadurch noch etwas angewachsen, passt aber gerade 
noch in die ursprünglichen 7 Sektoren, sodass die Länge von 52 Sektoren 
(à 128-Byte) für das System weiterhin ausreicht. Es sind nun aber nur 
noch ein paar Bytes Luft am Ende.

Zur Übersicht hier nochmal die Größe der Komponenten, wie sie auf der 
Boot-Diskette abgelegt sind:
1
IPL     1 record  à 128 bytes = 0080h bytes - bootstrap loader
2
CCP    16 records à 128 bytes = 0800h bytes - command processor
3
ZSDOS  28 records à 128 bytes = 0E00h bytes - general CP/M DOS
4
BIOS    7 records à 128 bytes = 0380h bytes - hardware BIOS
5
       52 records à 128 bytes
6
   = 2*26 tracks*sectors


Augenblickliche Zuordnung der drei physikalischen I/O Geräte (AVR-UART, 
I2C-UART, I2C-GPIO):
TTY:  AVR-UART, input+output (Console)
CRT:  I2C-UART, input+output (Console)
LPT:  I2C-GPIO, output only (Printer)
UL1:  I2C-UART, input only (PaperTape Reader)
UP1:  I2C-UART, output only (PaperTape Punch)
BAT:  AVR-UART, input+output (Console)
UC1:  AVR-UART, input+output (Console)

Man könnte also theoretisch noch weitere UARTs für UL1:, UP2:, BAT: und 
UC1: nachrüsten, wenn man das unbedingt braucht.


Das neue Code-Fragment in BIOS.MAC ist:
1
[...]
2
list:
3
  ld  a,(iobyte)  ; get content of IOBYTE bits [7:8] to [0:1]
4
  rlca  ; rotate A left (11000000->10000001)
5
  rlca  ; rotate A left (10000001->00000011)
6
  call  JumpSel_01  ; select via bits [0:1]
7
  dw  AVR_UART_out  ; 00=TTY:
8
  dw  I2C_UART_out  ; 01=CRT:
9
  dw  I2C_GPIO_out  ; 10=LPT:
10
  dw  AVR_UART_out  ; 11=UL1:
11
12
listst:
13
  ld  a,(iobyte)  ; get content of IOBYTE bits [7:8] to [0:1]
14
  rlca  ; rotate A left (11000000->10000001)
15
  rlca  ; rotate A left (10000001->00000011)
16
  call  JumpSel_01  ; select via bits [0:1]
17
  dw  AVR_UART_out_status  ; 00=TTY:
18
  dw  I2C_UART_out_status  ; 01=CRT:
19
  dw  I2C_GPIO_out_status  ; 10=LPT:
20
  dw  AVR_UART_out_status  ; 11=UL1:
21
22
punch:
23
  ld  a,(iobyte)  ; get content of IOBYTE bits [5:4] to [1:2]
24
  rrca  ; rotate A right (00110000->00011000)
25
  rrca  ; rotate A right (00011000->00001100)
26
  rrca  ; rotate A right (00001100->00000110)
27
  call  JumpSel_12  ; select via bits [1:2]
28
  dw  AVR_UART_out  ; 00=TTY:
29
  dw  I2C_UART_out  ; 01=PTP:
30
  dw  I2C_GPIO_out  ; 10=UP1:
31
  dw  AVR_UART_out  ; 11=UP1:
32
33
reader:
34
  ld  a,(iobyte)  ; get content of IOBYTE bits [5:4] to [1:2]
35
  rrca  ; rotate A right (00001100->00000110)
36
  call  JumpSel_12  ; select via bits [1:2]
37
  dw  AVR_UART_in  ; 00=TTY:
38
  dw  I2C_UART_in  ; 01=PTR:
39
  dw  AVR_UART_in  ; 10=UR1:
40
  dw  AVR_UART_in  ; 11=UR1:
41
42
; ----- specific handlers
43
[...]


2) Speicherzuordnung
Was mich immer etwas gestört hat, war die Inkonsistenz bezüglich der 
Speichergröße (62K vs. 64K) sowie die teilweise Duplizierung von EQUates 
in den Libraries GFCACPM.LIB und MEMCFG.LIB. Außerdem hatte ich das 
'Gefühl', dass der teure 64KB Speicher nicht vollständig ausgenutzt 
wird.
Dazu habe nun ich meine Version bereinigt und als relevante Größen muss 
ich nun nur noch einmal die Speichergröße sowie die Längen von CCP, BDOS 
und BIOS angeben.
Daraus werden dann die Ladeaddressen berechnet und einheitlich 
bezeichnet (ccploc, bdosloc, biosloc).
Jede Änderung muss nun nur noch in MEMCFG.LIB angepasst werden. Diese 
muss immer vor CFGACPM.LIB eingebunden werden.

Ich habe auch die teilweise verwendete Rundung auf ganze KBytes 
entfernt.

Dazu musste ich allerdings ein paar alte EQUates z.B. im IPL und ZSDOS 
ändern, da teilweise der gleiche Name für unterschiedliche Dinge 
verwendet wurde.

MEMCFG.LIB:
1
[...]
2
msize  equ  62    ; 64 KB = 62 KB + 2 KB buffer area above BIOS
3
; length of each component rounded up to next 100h
4
ccplen  equ  0800h    ; CCP at DC00h
5
bdoslen  equ  0E00h    ; BDOS at E400h
6
bioslen  equ  0600h    ; BIOS at F200h
7
nhdisks  equ  2    ; total number of hard disks (set to 0 if no hard disks desired)
8
[...]

CFGACPM.LIB:
Berechnung der Ladeadressen:
1
[...]
2
ccploc  equ  msize*1024-bioslen-bdoslen-ccplen  ; base of CCP
3
bdosloc   equ  ccploc+ccplen                      ; base of BDOS (serial number, code starts at bdosloc+6)
4
biosloc   equ  ccploc+ccplen+bdoslen              ; base of BIOS
5
[...]

IPL.MAC:
1
[...]
2
  maclib  MEMCFG.LIB  ; -MH- define msize and component lengths
3
  maclib  CFGACPM.LIB  ; -MH- define load addresses etc.
4
[...]
5
  ld  hl,ccploc  ; -MH-
6
  ld  de,128
7
  ld  c,1    ;sector 1
8
[...]
9
  jp  biosloc  ; -MH-
10
11
prmsg:
12
  ld  a,(hl)
13
[...]

nsects   equ  26*2 - 1  ;cold start sector count

BIOS.MAC:
1
[...]
2
  maclib  MEMCFG.LIB  ; -MH- define msize and component lengths
3
  maclib  CFGACPM.LIB  ; -MH- define load addresses etc.
4
5
bdos  equ  bdosloc+6  ; -MH- direct call to BDOS
6
[...]
7
  org  100h
8
  .phase  biosloc  ; -MH-
9
  .z80
10
11
nsects  equ  ($-ccploc)/128    ; -MH- warm start sector count
12
[...]
13
  ld  c,0    ;track
14
  ld  d,1    ;sektor (0 based, skip ipl)
15
  ld  hl,ccploc  ; -MH-
16
store1:
17
  push  bc
18
[...]
19
  ld  c,0    ;track
20
  ld  d,1    ;sektor (0 based)
21
  ld  hl,ccploc  ; -MH-
22
load1:
23
  push  bc
24
[...]
25
  ld  c,a
26
  jp  ccploc  ; -MH-
27
  
28
msgSel:  db  13,10,"Sel: ",0
29
[...]

ZSDOS.MAC:
1
[...]
2
  org  100h
3
  maclib  MEMCFG.LIB  ; -MH- define msize and component lengths
4
  maclib  CFGACPM.LIB  ; -MH- define load addresses etc.
5
  
6
  .phase  bdosloc  ; -MH-
7
[...]

CCP.MAC:
1
[...]
2
  maclib  MEMCFG.LIB  ; -MH- define msize and component lengths
3
  maclib  CFGACPM.LIB  ; -MH- define load addresses etc.
4
5
  .phase  ccploc  ; -MH-
6
[...]
7
serialize:      ;check serialization
8
  ld  de,serial
9
  ld  hl,bdosloc  ; -MH-
10
  ld  b,6    ;check six bytes
11
[...]
12
badserial:
13
  ld  hl,76f3h  ;'di hlt' instructions. [di or (hlt shl 8)]
14
  ld  (ccploc),hl  ; -MH-
15
  ld  hl,ccploc  ; -MH-
16
[...]
17
  end  ccploc  ; -MH-

Ich hatte einige Problem die wahre Größe des BIOS rechnerisch 
festzustellen, da nach Ende des Codeteils noch nicht-initialisierte 
Disketten- und Festplattenparameter folgen, deren Größe mit Hilfe von 
Makros berechnet wird, die ich nicht komplett durchschaue. Diese 
Bereiche werden z.B. von STAT C: oder von PIP B=C (copy) verwendet.
Von jeder Änderung der Speicherzuordnung sind alle vier Komponenten IPL, 
CCP, BDOS und BIOS betroffen.

Nach einigen rechnerischen Fehlversuchen habe ich mich dann in Schritten 
von 100h an die wahre Größe herangetastet. Dazu habe ich nach jeder 
Änderung den Speicher mit DDT angesehen. Der Speichertest beschreibt ja 
den Speicher mit 'v' sodass man gut sehen kann, wo was verändert wurde.
Letztendlich konnte ich die allokierte Größe des BIOS von 0D00h auf 
0900h verringern. Diese Größe beinhaltet den BIOS code plus den Platz 
für Disketten und Festplattenparameter.
Damit bleiben am Ende des Speichers noch ein paar Bytes frei und man hat 
ca 1 KB mehr Arbeitsspeicher für Programme gewonnen.
Turbo-Pascal meldet dann (überschreibt den CCP) 26640 bytes (von 
7B5-E406) frei.
Viele Programme wie Multiplan, Wordstar, Power etc. funktionieren damit.
Allerdings habe ich dann leider festgestellt, dass speziell der PIP beim 
Kopieren anscheinend doch mehr im hohen Speicherbereich beansprucht und 
einfach mit halbkopierten Dateien abbricht, wenn das BIOS nicht 0D00h 
groß ist.
Eine Technische Dokumentation zum PIP und den benutzen Speicherbereichen 
habe ich leider nicht gefunden.

Daher habe ich die Größe des BIOS wieder auf die ursprünglichen Werte 
zurückgesetzt.
Damit bekomme ich wieder die 'alte' Speicherbelegung.

Meine kompletten Quellen sind im angehängten ZIP Archiv.

: Bearbeitet durch User
von Leo C. (rapid)


Lesenswert?

Martin H. schrieb:
> Ich hatte einige Problem die wahre Größe des BIOS rechnerisch
> festzustellen, da nach Ende des Codeteils noch nicht-initialisierte
> Disketten- und Festplattenparameter folgen, deren Größe mit Hilfe von
> Makros berechnet wird, die ich nicht komplett durchschaue.

Schau Dir dazu das Kapitel "10. DISK PARAMETER TABLE" im CP/M 2.2 
Alteration Guide an. Die relevanten Parameter sind CSV und ALV. Im 
AVR-CP/M Bios werden die dafür nötigen Buffer abhängig von der Anzahl 
und Größe angemeldeter Laufwerke dynamisch am Ende des BIOS angelegt. 
D.h., je mehr Laufwerke angemeldet sind, und je größer diese sind, um so 
mehr Platz wird für die CSVs und ALVs benötigt.

> Diese
> Bereiche werden z.B. von STAT C: oder von PIP B=C (copy) verwendet.

Nein, sie werden vom BDOS genutzt, abhängig von den aufgerufenen 
Funktionen.

Martin H. schrieb:
> Allerdings habe ich dann leider festgestellt, dass speziell der PIP beim
> Kopieren anscheinend doch mehr im hohen Speicherbereich beansprucht und
> einfach mit halbkopierten Dateien abbricht, wenn das BIOS nicht 0D00h
> groß ist.

Eigentlich sollte bereits das Login eines Laufwerks mit einer 
Fehlermeldung scheitern, wenn der Platz für die anzulegenden Buffer 
nicht reicht.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Hallo Martin,

ich bekomme beim neuen System erstmal einen Fehler, muss mal suchen, 
woran das liegt.

CPM on an AVR, v3.5 r242
Testing RAM: fill...wait...reread...
Initing mmc...

A: FAT16 File-Image 'A' at: 8479, size: 256KB.
B: FAT16 File-Image 'B' at: 8959, size: 256KB.
C: FAT16 File-Image 'C' at: 8703, size: 256KB.
D: FAT16 File-Image 'D' at: 9087, size: 8192KB.
E: FAT16 File-Image 'E' at: 8831, size: 250KB.
F: FAT16 File-Image 'F' at: 13183, size: 256KB.
G: FAT16 File-Image 'G' at: 13311, size: 256KB.
Partinit done.

Ok, Z80-CPU is live!

ipl
 Z  N   A =80 BC =0034 DE =0080 HL =F580 SP=2000 PC=0286       76 76 76
        a'=00 bc'=0000 de'=0000 hl'=0000 IX=0000 IY=0000 I=00       CPU 
halted!

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Nachtrag:
Ich kann jetzt alle deine Quellen fehlerfrei übersetzen. Mein M80 möchte 
einige TAB's nicht :-(
Meine I2C Testhardware ist auch kurz vor der Vollendung.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Mein Testaufbau ist noch doch etwas umfangreicher geworden als 
ursprünglich geplant :-)
Neben den I2C Komponenten
- RTC mit PCF8583
- RS232 mit SC16IS750
- 16 Bit I/O mit MCP23017
habe ich noch eine DRAM kompatible SRAM Schaltung aufgebaut. Verbaut ist 
ein 256kx8 SRAM, der sich mit seiner Ansteuerung (2 x Latch + Logik) 
pinkompatibel zu den DRAM’s verhält. Zwei Gatter könnte man noch 
einsparen, müsste aber im größeren Maß in den derzeitigen Quelltext 
eingreifen. Jetzt kann einfach die neue Schaltung statt eines nicht mehr 
verfügbaren DRAM’s eingesetzt werden. Nicht ganz – den Refresh habe ich 
noch abgeschaltet :-) Somit lässt sich das CP/M – System nun komplett 
mit aktuellen Bauelementen aufbauen. Für einen altersgerechten und 
augenfreundlichen Aufbau habe ich versucht weitgehend auf SMD zu 
verzichten.

von David R. (retrogadgets)


Angehängte Dateien:

Lesenswert?

Hello

I have the cpm stick 3.1 now running but upon reading the sd gives some 
garbage as well.  Thanks for your help.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Please turn on the debug option “.equ MMC_DEBUG  = 1” in “confic.inc” , 
and post  us the answer.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

@Martin
Ich habe nun mit meinem Experimentalaufbau alle deine Funktionen 
getestet. Meine I2C Konfiguration sieht dabei wie folgt aus:

A>i2cscan
Scanning I2C bus for devices...
*** Device found at slave address 27h = 39d (8-bit: 4Eh = 78d)
*** Device found at slave address 48h = 72d (8-bit: 90h = 144d)
*** Device found at slave address 50h = 80d (8-bit: A0h = 160d)
Done.

Die Umleitung des Terminals auf die zweite serielle Schnittstelle 
funktioniert.

Terminal 1 (115200 Baud)

A>stat dev:
CON: is OCC:
RDR: is CRT:
PUN: is CRT:
LST: is COM:

A>stat Val:
Temp R/O Disk: d:=R/O
Set Indicator: d:filename.typ $R/O $R/W $SYS $DIR
Disk Status  : DSK: d:DSK:
User Status  : USR:
Iobyte Assign:
CON: = OCC: ECC: BAT: AUX:
RDR: = COM: CRT: AUX: PRI:
PUN: = COM: CRT: AUX: PRO:
LST: = LPT: CRT: COM: AUX:

stat con:=ecc:
Terminal 2 (9600 Baud)

A>stat dev:
CON: is ECC:
RDR: is CRT:
PUN: is CRT:
LST: is COM:

stat con:=ecc:
Terminal 1 (115200 Baud)

Die Baudratenumschaltung und Datenübertragung auf der zweiten seriellen 
Schnittstelle funktioniert bis 460800 Baud fehlerfrei. Der 16 Bit I/O 
Port geht auch. Somit sollten alle deinen neuen Funktionen laufen. 
Super!

@Leo C.
Ohne Refresh (meine Version mit DRAM) ist das System natürlich nun noch 
schneller ;-)
mit Refresh ACT : 3.86s
ohne Refresh ACT : 3.799s

von Martin H. (therealmartin)


Lesenswert?

Klasse! Danke für Deine Mühe - das mit den Tabs ist merkwürdig - ich 
habe auch immer den M80 verwendet.

Ich denke, damit ist das AVR/CPM noch ein bisschen näher an die damalige 
Realität gerückt und auch flexibler nutzbar.

Den Kermit 4.11 von Leo C. der hier im Thread angeboten wurde, habe ich 
auch verwendet - er erkennt den I2C-UART selbst und scheint darauf hart 
verdrahtet zu sein. Man kann auch damit die Baud-Rate einstellen, wie 
mit meinem MODE Programm. Ich bin nicht sicher, ob die Quellen 
inzwischen im AVR-CPM-SVN liegen, damit das Programm längerfristig 
erhalten bleibt.
Andererseits könnte man auch noch mit einem originalen Kermit 4.11 
probieren, ob man mit SET PORT nun einfach auf die zweite serielle 
Schnittstelle (I2C) schalten kann und dann die normalen Ausgaben 
weiterhin auf CRT: erscheinen.
Dann bräuchte man die Spezialversion nicht mehr unbedingt, müsste aber 
dann die Baud-Rate extern einstellen.

Ich verwende meistens das Original STAT Programm von DR - das bringt 
dann andere Namen für die Lochstreifenleser etc., was aber nur 
kosmetischer Natur ist.

Dann muss ich nur noch die Ein- und Ausgänge meines I2C-GPIO mit 
Pegelwandlern auf 5V Niveau für eine Centronics Drucker-Schnittstelle 
heben.

Irgendwo habe ich auch noch ein RTC Platinchen herumliegen - mal sehen 
ob das noch in mein Gehäuse passt...

von Martin H. (therealmartin)


Lesenswert?

@ David R.
Did you use an SD card (not SD-HC)?
The boot messages look like the card is not recognized.
Try with a plain old SD card (2 GB or so).

: Bearbeitet durch User
von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Martin H. schrieb:
> Dann muss ich nur noch die Ein- und Ausgänge meines I2C-GPIO mit
> Pegelwandlern auf 5V Niveau für eine Centronics Drucker-Schnittstelle
> heben.

Der TXS0108E scheint mir daür genau der richtige Kandidat zu sein.

von Martin H. (therealmartin)


Lesenswert?

Ja, das würde passen (plus 3 Steuerleitungen für den Drucker).

Entweder so oder den gesamten Chip auf 5V heben und dann nur die zwei 
I2C Leitungen von 3.3V auf 5V übersetzen. Ist vielleicht eleganter und 
bräuchte nur 2 diskrete Konverter-Transistoren.

Ich habe sowieso einen 5V auf 3,3 Step-Down Regler nach der 
Anschlussbuchse für die Spannungsversorgung.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Martin H. schrieb:
> Ist vielleicht eleganter und
> bräuchte nur 2 diskrete Konverter-Transistoren.

Ja, zwei BSS138 sind auch schnell integriert. Außerdem gibt es den MCP 
23017 auch als DIL-Version, so dass man ihn bequem auf eine Fassung 
stecken kann.(Eine defekte PIO war früher mein Lieblingsbauelement ;-)

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Für alle, die bisher mit dem I/O-Byte nicht viel zu tun hatten und nun 
gerne ihr CP/M-System erweitern wollen, eine kurze Erklärung in der 
Doku.

von Martin H. (therealmartin)


Angehängte Dateien:

Lesenswert?

Ich finde das IOBYTE als sehr schöne und elegante Sache die sehr gut zum 
System passt sobald man mehr als eine serielle Schnittstelle angebaut 
hat. Beim späteren MSDOS ist das nur noch ansatzweise vorhanden (MODE 
LPT1:=CON2: sowie Umleitung mit '<','>'), durch die dann populär 
werdende direkte Hardwareansteuerung völlig verloren gegangen.

Ich habe mir auch noch mal einen generischen Kermit 4.11 
zusammengebastelt, d.h. ohne Kenntnis der I2C Schnittstelle. Den kann 
man nun z.B. mit SET PORT CRT auf eine "beliebige" serielle 
Schnittstelle umstellen, was eigentlich schöner ist als eine 
Spezialversion zu haben. Allerdings muss man dann die Baud-Rate vorher 
extern einstellen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Irgendwie bekomme ich keine Dateiübertragung damit hin. Mit PIP 
funktioniert es, d.h. die Schnittstellen sind verbunden und die Baudrate 
stimmt. Hat Kermit noch ein Geheimnis, das ich nicht kenne? Meine 
Einstellungen sind eigentlich auch ganz simpel:

SET PORT CRT
SET FILE-MODE BINARY
SET FLOW ON
SET AUTORECEIVE ON
RECEIVE

Aber es wird nicht mal der Dateiname übertragen. Zwei DOS Kermit 
untereinander verstehen sich, nur Kermit-80 nicht.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Martin H. schrieb:
> Den Kermit 4.11 von Leo C. der hier im Thread angeboten wurde, habe ich
> auch verwendet - er erkennt den I2C-UART selbst und scheint darauf hart
> verdrahtet zu sein. Man kann auch damit die Baud-Rate einstellen, wie
> mit meinem MODE Programm.

Mich würde interessieren, ob es einen Performance-Unterschied zwischen 
dem speziell angepaßten und dem Generic-Kermit gibt.

> Ich bin nicht sicher, ob die Quellen
> inzwischen im AVR-CPM-SVN liegen, damit das Programm längerfristig
> erhalten bleibt.

Leider sind die Quellen noch nicht im SVN. Zudem ist mein kleiner Server 
seit kurzem down. Da es noch "etwas" dauern kann, bis ich ihn, 
wahrscheinlich mit neuer Hardware, wieder hochfahren kann, hänge ich die 
Quellen mal hier an.

von Martin H. (therealmartin)


Lesenswert?

Inzwischen haben ich meinen MCP23017 GPIO auf 5V umverdrahtet und zwei 
Level-Converter in die I2C Leitungen eingefügt.
Dann noch ein Kabel mit D-SUB-25 Buchse in PC-Parallelport-Belegung 
gelötet und dort ein normales PC-Centronics Druckerkabel angesteckt.
Als Drucker hatte ich nur einen HP ThinkJet zur Hand.
Ausdrucken mit
1
PIP LST:=file.txt
funktionierte einwandfrei; wenn das Papier ausging, stoppte der Druck 
und nach Einlegen eines neuen Blatts ging es weiter.
Ebenso, wenn der Druckerpuffer voll war - dann ging des Ausdruck 
häppchenweise nach jeder ausgegebenen Zeile weiter.
D.h. die Statusabfragen (BUSY, PAPER) und (unendlich langen) 
Warteschleifen funtionieren wie geplant.
Auch CTRL+P zum Einschalten der Protokollierung geht, solange die 
Programme über BDOS und nicht direkt über BIOS-Calls ausgeben (vielfach 
leider üblich um Geschwindigkeit zu gewinnen).

Das einzige was mir noch auffiel war, dass nach Abschalten des Druckers 
seine LEDs noch mit etwa halber Intensität weiterleuchteten.
Dabei scheint der Drucker über die Centronics-Schnittstelle noch Strom 
zu ziehen - vielleicht eine Abart dieses speziellen Druckertyps.

Um das abzustellen, habe ich im BIOS noch zwei Zeilen ("; *** NEU ***") 
eingefügt, um die Leitungen D0-D7 nach Ausgabe eines Zeichens definiert 
auf 0V zu setzen.
Dann gehen die LEDs aus, wenn der Drucker abgeschaltet wird.
1
; ----- GPIO -----
2
3
I2C_GPIO_out:
4
IF MCP23017
5
  ld  a,c
6
  out  (I2C_GPIO_DATA),a  ; data to A[0:7]
7
  ld  a,0
8
  out  (I2C_GPIO_DATB),a  ; drop STROBE/ on B[3]
9
  ; stays low for 300 us, more than the required 0.5 us
10
  ld  a,8
11
  out  (I2C_GPIO_DATB),a  ; rise STROBE/
12
GPIO_busy:
13
  in  a,(I2C_GPIO_DATB)
14
  bit  0,a  ; test bit 0
15
  jp  nz,GPIO_busy  ; wait while B[0] = 1
16
; *** NEU ***
17
  ld  a,0
18
  out  (I2C_GPIO_DATA),a  ; drop data lines to avoid backpowering printer when OFF
19
; *** NEU ***
20
ELSE
21
  jp  AVR_UART_OUT  ; only one device
22
ENDIF
23
  ret

Zu dem Problem mit dem generischen Kermit muss ich nochmal nachsehen...

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Die Ausgabe von 0x00h nach dem Zeichen habe ich übernommen.

von Martin H. (therealmartin)


Lesenswert?

Der generische Kermit funktioniert, allerdings hatte ich zunächst auch 
Probleme.
Vermutlich war der UART in einem "undefinierten" Zustand infolge 
vorheriger Experimente.

Wenn der I2C UART aber mit z.B. MODE initialisiert wird, sollte es 
funktionieren.
Gegenüber dem angepassten Kermit ist die Geschwindigkeit auf etwa die 
Hälfte reduziert.
Es muss sich ja beim generischen Kermit jedes Byte durch die 
BDOS/BIOS/IOBYTE/AVR Schichten durchwühlen, das dauert...

Generic Kermit 4.11 using IOBYTE vs. special version accessing I2C UART:
1
            Generic       I2C-Special
2
            =======       ===========
3
Commands    MODE ...      -
4
            kerm411g      kerm411
5
            set port CRT  - (port hardwired)
6
            - (n.a.)      set speed ...
7
Line speed  - characters per second -
8
19200 Baud  ~500 cps      ~840 cps
9
9600  Baud  ~490 cps
10
4800  Baud  ~380 cps
11
2400  Baud  ~190 cps
12
1200  Baud  ~100 cps
13
 600  Baud   ~50 cps

Beitrag #5644643 wurde von einem Moderator gelöscht.
von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich bin die Tage auf ein nettes Tool von Josh Bensadon gestoßen, den 
„CP/M Disk Explorer“. Mit diesem können unter Windows CP/M Images 
gelesen oder geschrieben/erzeugt werden. Weiterhin enthält er ein Tool, 
um gleich den DPB Block zu erzeugen oder auch eigene Formate zu 
kreieren. Für unsere Formate, AVRCPM und SIMHD habe ich mal in die 
Diskdefinitionen eingetragen, um die Images zu bearbeiten. Das Tool 
verzeiht jedoch keine Fehler. So muss das AVRCPM-Format exakt 256.256 
Byte lang sein, ansonsten gibt’s „mecker“. In der ZIP-Datei gibt es als 
Laufwerk G gleich die aktuellen BIOS und CP/M Quellen.

von Martin H. (therealmartin)


Lesenswert?

Über Weihnachten ist mir aufgefallen, dass der Busy Test in der 
I2C_GPIO_out Routine NACH Ausgabe des Zeichens erfolgt. Das funktioniert 
auch, d.h. die Routine wartet sauber, bis der Drucker das Zeichen 
ausgegeben hat.

Wenn der Druckvorgang allerdings schon ohne Papier oder Off-Line 
startet, wird das erste Datenbyte ins Nirvana ausgegeben und danach 
gewartet.

Es wäre also besser die Testschleife
1
GPIO_busy:
2
  in  a,(I2C_GPIO_DATB)
3
  bit  0,a  ; test bit 0
4
  jp  nz,GPIO_busy  ; wait while B[0] = 1
an den Anfang unmittelbar vor dem laden des Zeichens von (C) nach (A) zu 
verschieben. Ist nur eine Kleinigkeit.

Der CPM-Disk-Explorer klingt ganz interessant - werde ich mal 
ausprobieren.
Bislang habe ich mit dem cpmtools auf der Kommandozeile gearbeitet, 
funktioniert gut, man muss aber halt immer die Syntax im Kopf haben oder 
Skripte schreiben.

Was ich aber noch mehr vermisse, sind Tools um die CP/M typischen 
Archive wie .LBR oder komprimierte Dateien (SQU, ARC, ZOO, ...) direkt 
unter Windows zu öffnen. Wenn ich so durch diverse CP/M Sammlungen gehe, 
wimmelt es da ja von solchen Dateien.
Dazu kenne ich nur MS-DOS Tools, von denen es leider meistens keinen 
Quellcode gibt.

Gibt es da eigentlich etwas, das wie ein Datei-Explorer unter Windows 
arbeitet?

Ich wünschte mir da so einen Allesfresser, habe ihn aber nicht zu 
Weihnachten bekommen...

Ich hatte schon mal angefangen, mir einen LBR-Leser und erste DeARCer 
und UnSQUeezer zu schreiben, das ist aber recht mühsam, wegen der vielen 
Kompressionsformate und Optionen.

Die klassischen ZIP Dateien kann man ja gut mit diversen Tools 
inspizieren, aber für die älteren gibt es wohl keine "modernen" Tools 
mehr?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Martin H. schrieb:
> Es wäre also besser die Testschleife...

Das scheint mir eine sinvolle Änderung :-)

> Gibt es da eigentlich etwas, das wie ein Datei-Explorer unter Windows
> arbeitet?

Ja, der TotalCommander mit einer entsprechenden Erweiterung [1]. Diese 
Erweiterung bindet quasi die CP/M Tools in den TC ein. Über Skripte [2] 
könnten nun die unterschiedlichen Packer für CP/M integriert werden.

[1] https://hc-ddr.hucki.net/wiki/doku.php/cpm/disketten_xp2
[2] http://totalcmd.net/plugring/ScriptWFX.html

von Martin H. (therealmartin)


Lesenswert?

In den letzten Tagen habe ich noch eine RTC mit dem PCF 8563T 
implementiert, da ich kein fertiges breakout board mit dem 8583 bekommen 
habe.
Der 8563 ist ähnlich aber nicht gleich wie der 8583.
Der chip zählt Jahre von 0...99. Ich habe mich für 1970 als Basis 
entschieden und addiere bzw. subtrahiere dann 1970 um auf die aktuelle 
Jahreszahl zu kommen. Damit kann ich also 1970 bis 2069 abdecken, was 
für meine Lebenserwartung ausreichend ist. Ein RAM hat der chip nicht, 
wird auch nicht gebraucht.

Ich habe das im Augenblick noch mit #if I2C_PCF8563 wie bei den anderen 
I2C Devices in meinem code stehen, werde aber noch die bisherige 
Variante für den 8583 ebenso klammern. Ich denke I2C_SUPPORT sollte 
nicht unbedingt automatisch die RTC einbinden - das ist ja auch nur eine 
Option, zumindest bei den älteren AVR-CPM-Stick boards.

rtc_get funktioniert (z.B. beim booten), wo rtc_set verwendet wird, habe 
ich noch nicht herausgefunden...

Martin

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich denke es wird Zeit, mal eine Teildokumentation zu den I2C 
Komponenten nachzuliefern. Schließlich soll es ja keine Zweimannshow 
bleiben ;-) Im Anhang also die derzeit vom AVR-CP/M unterstützen I2C 
Komponenten mit ihrer Beschaltung. Deine RTC würde ich noch mit 
aufnehmen.

von Martin H. (therealmartin)


Lesenswert?

Ah sehr schön übersichtlich - gut auch, dass Du konsequent die 
sogenannten "7-bit" I2C Adressen angegeben hast - im Quellcode habe ich 
da auch immer so angepasst (beim PCF8583 stehen noch die "8-bit" 
Adressen drin, die sollten gelegentlich noch in (ADDR<<1) geändert 
werden, damit alles einheitlich ist).

Der 8563 ist fast gleich wie der 8583, hat aber eine unveränderliche I2C 
Adresse von 0x51.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hat jemand Interesse als Beta-Tester mitzuwirken?

Geplant ist ein Bausatz für ein AVR-CP/M System mit heute verfügbaren 
Bauelementen. Dazu wurde der bisherige DRAM durch eine Schaltung mit 
einem SRAM ersetzt und getestet [1]. Die Software bleibt kompatibel. Um 
die Nachbausicherheit zu erhöhen und möglichst auch Anfängern den Aufbau 
zu erleichtern, wurde weitgehend auf SMD-Bauelemente verzichtet. Der 
Aufbau und die Inbetriebnahme soll dabei Schritt für Schritt, anhand 
einer Baumappe erfolgen. Dazu wurde die USB-Schnittstelle als 
Debug-Schnittstelle implementiert. Die folgenden Funktionen sind 
realisiert:

1 x RS232 (CP/M)
1 x LPT-Port (CP/M)
1 x PS2 Keyboard (VT100-Terminal)
1 x VGA (VT100 Terminal)
1 x RTC
1 x 8-Bit GPIO (3.3V)
1 x I2C-Bus (3.3V und 5V)
1 x SD-Card
1 x USB-Port

Der USB-Port kann über DIP-Switch zur Inbetriebnahme wahlweise auf das 
AVR-CP/M oder das VT100-Terminal geschaltet werden. Im Normalmoduls ist 
dann das CP/M mit dem VT100 verbunden. Weiterhin kann zu Testzwecken der 
RS232-Port auf die USB-Schnittstelle umgelenkt werden.

Gesucht sind zwei Beta-Tester (Aufbauerfahrung sollte vorhanden sein), 
die schrittweise nach Baumappe, das System aufbauen und ihren Aufbau 
bzw. Fehler dokumentieren. Weiterhin soll dabei gleichzeitig der 
Reichelt Warenkorb aktualisiert werden. Die gleiche Vorgehensweise gilt 
für die Softwareimplementierung. Ziel der ganzen Aktion ist ein freier 
robuster Bausatz für das AVR CP/M, ganz ohne kommerzielle Interessen.

Beide Beta-Tester würden von mir je eine Leiterplatte (ohne Bauelemente) 
zur Verfügung gestellt bekommen. Interessenten melden sich bitte einfach 
per PN.

[1] Beitrag "Re: CP/M auf ATmega88"

: Bearbeitet durch User
von Joachim W. (Gast)


Lesenswert?

Kannst du bitte den Schaltplan posten?

von Joachim W. (Gast)


Lesenswert?

Alles auf einer Seite?

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Joachim W. schrieb:
> Kannst du bitte den Schaltplan posten?

Bitteschön. Die Schaltungen sind alle einzeln und zum Teil auch 
innerhalb des CP/M, aber noch nicht in diesem Layout getestet.

> Alles auf einer Seite?
Ja, alle Bauelemente befinden sich auf der Bestückungsseite.

von Joachim W. (Gast)


Lesenswert?

Joe G. schrieb:
> Joachim W. schrieb:
>> Kannst du bitte den Schaltplan posten?
>
> Bitteschön. Die Schaltungen sind alle einzeln und zum Teil auch
> innerhalb des CP/M, aber noch nicht in diesem Layout getestet.
>
>> Alles auf einer Seite?
> Ja, alle Bauelemente befinden sich auf der Bestückungsseite.

Vielen Dank :)

von S. R. (svenska)


Angehängte Dateien:

Lesenswert?

Mal so als Frage... wäre für eine Neuentwicklung mit SRAM vielleicht ein 
Atmega8515 sinnvoll (wegen XMEM)?

Vor längerer Zeit habe ich für den einen i8080-Emulator umgesetzt. Der 
braucht 3 KB Flash, braucht selbst keinen RAM und besteht die Testsuite. 
Im Gegensatz zum AVR CP/M (der als Vorlage diente), habe ich das aber 
für avr-as geschrieben, weil mir C mehr Spaß macht als Assembler.

Den Code habe ich mal angehängt. Weil avr-as keine halben Pointer mag, 
generiert das Perlscript aus i8080.o eine i8080_tables.S, die man zum 
Projekt dazulinken muss.

Der i8080 wird mit emu_start() aufgerufen und ruft folgende Funktionen 
auf:
1
// wenn EMULATE_IO aktiviert:
2
uint8_t emu_io_read(uint8_t port);
3
void    emu_io_write(uint8_t port, uint8_t data);
4
5
// wenn BDOS aktiviert (für CONOUT und PRINTSTR):
6
void    uart_putc_raw(uint8_t);
7
8
// wenn TRACE aktiviert:
9
int     printf_P(const char *fmt, ...);

Mit MEMBASE lässt sich die Basisadresse des i8080-Adressraums im 
AVR-Adressraum in 256 Byte-Schritten einstellen. Die CPU startet bei 
0x0000 oder bei aktiviertem BDOS bei 0x0100.

Der i8080 lebt im und hat vollen Zugriff auf den AVR-Adressraum, 
inklusive der SFRs und CPU-Register. Auf einem Atmega8515 ließe sich 
also maximal ein 63 KB CP/M bauen (mein Testsystem hat aber nur 32 KB), 
dafür kann man den Emulator auch direkt im internen RAM laufen lassen.

Die Performance habe ich nicht gemessen, aber wenn ich mich beim 
Taktezählen nicht vertan habe, braucht ein NOP nur 32 Takte. Viel 
Optimierpotential sehe ich da nicht.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

S. R. schrieb:
> Mal so als Frage... wäre für eine Neuentwicklung mit SRAM vielleicht ein
> Atmega8515 sinnvoll (wegen XMEM)?

Es ist ja keine Neuentwicklung, sondern ich habe einfach die Baugruppen 
und Software, welche so nach und nach entstanden sind, auf eine 
Leiterplatte gebracht. Der Wechsel von DRAM auf SRAM ist nur meinem 
persönlichen Spieltrieb geschuldet ;-) interessanter ist die Frage nach 
der Sinnhaftigkeit eines solchen Projektes.

Stein des Anstoßes waren Studenten des 7. Semesters, welche wahllos 5V 
Systeme mit 3.3V Systemen zusammenschalten, keinen Bus debuggen können, 
weder SMD noch THT ordentlich löten können, nur rudimentär programmieren 
können, keine systematische Fehlersuche durchführen können… Die 
Aufzählung kann noch beliebig erweitert werden.
Zukünftig sollen interessierte Studenten des ersten Semesters einen 
Bausatz in die Hand gedrückt bekommen und ihn unter fachkundiger 
Begleitung in Betrieb nehmen. Mal sehen, was sich dann daraus 
entwickelt.

von Peter S. (petersieg)


Lesenswert?

Wirklich schön, wie sich das alles so weiter entwickelt hat!
Insbesondere die I2c Unterstützung.
Kann auch sein, das hier alles inkl VT100 Terminal genau die richtige 
Lösung ist für den skizzierten Einsatzzweck.
Aber ich bin kein Freund von dem VT100 mit auf der Platine. Dazu kann 
man besser jedes Terminal Programm und USB-TTL Schnittstelle nehmen - 
ist aber nur meine Meinung. Ich mag halt keine Propeller Chip da drauf, 
nur fürs Terminal ;-)

Peter

von Martin H. (therealmartin)


Lesenswert?

Holla, das ist ja schon ein richtiger Großrechner mit allem Drum und 
Dran!
Wenn man das noch mit einer kleinen Tastatur (gibt es so etwas wie die 
Cherry Kassentastaturen G84-4100 auch mit PS/2?) und einem kleinen TFT 
Display kombiniert, könnte man einen schicken kleinen CP/M Laptop bauen. 
Onkel Osborne lässt grüßen.

Zum VT100 Emulator habe ich noch eine Idee/Frage: Beim Programmieren 
kommt sehr schnell der Wunsch nach Grafik auf. CP/M bietet da per 
Definition nichts (GSX ist etwas hoch gegriffen und schluckt Speicher), 
aber man kann einfache, aber durchaus ansprechende Vektorgrafik leicht 
mit jeder Programmiersprache realisieren, wenn das Terminal passende 
Escapesequenzen unterstützt.
Wenn ich z.B. Teraterm als Soft-Terminal verwende, versteht dies auch 
Tektronix Befehle und macht sogar ein extra Grafikfenster auf. Dann kann 
ich von meinem AVR-Stick Text und Grafik sogar "gleichzeitig" ausgeben. 
Ich mag Tektronix, aber wenn es moderner sein soll, wären auch Regis 
(DEC) oder HPGL (Plotterbefehle in ASCII) mögliche Alternativprotokolle.

Deshalb die Frage: kann der Propeller-Code erweitert werden, sodass er 
auch einen Grafikbildschirm (als Alternative zum Textmodus) anzeigen 
könnte? Oder reicht da der Speicher nicht für z.B. 640x400 monochrome 
Pixel (=32 KB).

Eventuell wäre da eine separate, optional andockbare Terminalplatine 
sinnvoll.

: Bearbeitet durch User
von Apollo M. (Firma: @home) (majortom)


Lesenswert?

hi, frage ... warum wurde der ram nicht via spi interface integriert, 
wäre auch nicht langsamer als parallel und mit addr latch und so?


mt

von Hans-Werner Schütz (Gast)


Lesenswert?

Hallo Joe,
ich finde die Idee richtig gut... und ich wäre auch wieder dabei.
Gruß
Hans-Werner

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Apollo M. schrieb:
> hi, frage ... warum wurde der ram nicht via spi interface integriert,
> wäre auch nicht langsamer als parallel und mit addr latch und so?

Schau mal hier:
Beitrag "Re: CP/M auf ATmega88"

Martin H. schrieb:
> Zum VT100 Emulator habe ich noch eine Idee/Frage:

Ich schreib morgen mal was dazu...

von Matti (Gast)


Lesenswert?

Apollo M. schrieb:

> hi, frage ... warum wurde der ram nicht via spi interface integriert,
> wäre auch nicht langsamer als parallel und mit addr latch und so?

Kannst du das einmal vorrechnen, wie viel Zeit nach der einen bzw. nach 
der anderen Anbindung gebraucht wird.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Martin H. schrieb:
> Zum VT100 Emulator habe ich noch eine Idee/Frage:

Die RAM-Größe des Propellers beträgt nur 32KB. Für eine Pixelgrafik also 
zu wenig. Ich denke, eine TEK4010 Emulation wird nicht möglich sein. Um 
dennoch mit unterschiedlichen Zeichensätzen und Grafikelementen zu 
arbeiten, können verschiedene Character Sets [1] umgeschaltet werden. 
Für eine Weiterentwicklung würde ich den Propeller verlassen und ein 
anderes Konzept favorisieren (RaspberryPI / Bare Metal [2]). Zumal HDMI 
und USB bzw. Bluetooth-Tastaturen heute üblicher als VGA und PS2 sind. 
Das ist jedoch eine andere Baustelle ;-)


[1] Beitrag "Re: VT100-Terminal (VGA+PS2)"
[2] https://ultibo.org/

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Die ersten Platinensätze sind eingetroffen. Ich baue nun ein Startmuster 
auf, um jeden einzelnen Inbetriebnahmeschritt zu dokumentieren bzw. 
Fehler auszumerzen. Im nächsten Schritt dürfen dann die Betatester ran 
;-)

von Horst S. (h3aau)


Lesenswert?

moin,
spiele gerade RunCPM auf einem TeenSy3.6 rum.
echt beeindruckend.
beim 180MHz CPU-takt geht da schon einiges los.
gab es hier nicht mal einen benchmark um das ganze mal etws einordnen zu 
können?
als terminal habe ich hier tera-term als vt100.
laufwerke sind auf einer sd-card.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Horst S. schrieb:
> gab es hier nicht mal einen benchmark um das ganze mal etws einordnen zu
> können?

Ja, wie ein Z80 mit etwa 3.2 MHz.

von Horst S. (h3aau)


Lesenswert?

moin,
wo gibt es den test?
würde den gern mal bei mir laufen lassen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Wir haben immer ein eigenes Testtool (ACT) laufen lassen. Dieses findest 
du hier: 
https://www.mikrocontroller.net/svnbrowser/avr-cp-m/avrcpm/trunk/cpm/utils/

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Der erste Schritt ist getan. Das System läuft und das Layout bzw. die 
Leiterplatte sind (fast) fehlerfrei. An zwei Stellen ist der 
Bestückungsaufdruck um 180 Grad gedreht. Die Aufbaudokumentation wird an 
diesem WE auch fertig werden, so dass Interessenten loslegen können. Da 
der LP-Hersteller überliefert hat, kann ich in Summe noch 5 Platinen zum 
Testen abgeben. Hans-Werner und Marcel sind schon berücksichtigt;-) Die 
Dokumente zum Aufbau und die komplette Software wird vollständig in 
Github [1] abgelegt.

[1] https://github.com/Feinmechaniker/AVRCPM

von Leo C. (rapid)


Lesenswert?


von Horst S. (h3aau)


Lesenswert?

Leo C. schrieb:
> Horst S. schrieb:
>> wo gibt es den test?
>
> Beitrag "Re: CP/M auf ATmega88"

danke, aber wie bekomme ich das image auseinander?

von Leo C. (rapid)


Lesenswert?

Horst S. schrieb:
> danke, aber wie bekomme ich das image auseinander?

Mit den CP/M tools? Die Images sind (wie meistens) im simhd Format.

Aber warum überhaupt? Warum nicht einfach auf eine SD-Karte kopieren?

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich habe gerade mal beide Benchmarks auf dem neuen System 
(abgeschalteter Refreshzyklus) laufen lassen. Mit dem Hi-Tech C liegt 
der Test recht stabil bei 27 bis 28 Sekunden.


                 DHRYSTONE 1.1 BENCHMARK SUMMARY
                     SORTED BY PERFORMANCE

 MANUF      MODEL      PROC     CLOCK NOREG   REG OS,COMPILER,NOTES
 -----      -----      ----     ----- -----   --- -----------------
 Commodore  64         6510      1.00    19    34 C64 ROM ,C Power 2.9 
trim,
 Apple      IIe        65C02     1.02    37    37 DOS 3.3,Aztec CII 
v1.05i ,
 Home Brew             Z80       4.00    53    53 CPM-80 ,Hisoft C++  ,
 Commodore  128        8502      2.00    43    68 C128 ROM ,C Power 128 
trim,
 Home Brew             Z80       2.50    91    91 CPM-80 2.2,Aztec CII 
1.05g,
 Cromemco   Z2         Z80       4.00   127   127 Cromix 11.26,ccc  ,
 NCR        Decision M 8088      4.77   166   166 MS-DOS 2.11,Lattice 
2.14
*Aeternum   AVRCPM     Z80emul  ~3.     172   185 CPM-80 2.2,HI-TECH C 
V3.09
 Home Brew             8086      8.00   197   203 iRMX-86 V6,Intel C-86 
2.0
 NCR        PC4        8088      0.00   212   212 MS-DOS 2.11,Lattice 
2.14

: Bearbeitet durch User
von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Warum nicht einfach auf eine SD-Karte kopieren?

RunCPM verwendet nur noch das FAT-Filesystem, es gibt kein Image mehr.

von Horst S. (h3aau)


Lesenswert?

TeenSy 3.6

H>drynr
Dhrystone(1.1) time for 5000 passes = 0
This machine benchmarks at 0 dhrystones/second

RunCPM Version 3.7 (CP/M 2.2 60K)

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> RunCPM verwendet nur noch das FAT-Filesystem, es gibt kein Image mehr.

Ach ja, darum gings ja.
Aber wie man auf dem PC Dateien aus einem Image heraus oder 
hineinkopiert, wurde hier ja schon öfters beschrieben.

Horst S. schrieb:
> Dhrystone(1.1) time for 5000 passes = 0

Du mußt die Funktion time() für das RunCPM-System anpassen, oder das 
Dhrystone-Programm so kompilieren, daß Du mit einer Stoppuhr messen 
kannst. Die Anzahl Loops muß evtl. auf 50000 oder 500000 hochgesetzt 
werden. Die Anleitung dazu ist im Sourcecode "dry.c" enthalten. Im 
Anhang Benchmark und Hi Tech C Compiler ohne Image.

von David R. (retrogadgets)


Angehängte Dateien:

Lesenswert?

Martin H. schrieb:
> @ David R.
> Did you use an SD card (not SD-HC)?
> The boot messages look like the card is not recognized.
> Try with a plain old SD card (2 GB or so).

@ Martin H.
im using a samsung 4G card and toshiba 2GB FAT formatted under windows

von S. R. (svenska)


Lesenswert?

David R. schrieb:
> im using a samsung 4G card and toshiba 2GB FAT formatted under windows

Any 4G SD card is SD-HC (there are very few exceptions).

Your screenshot is surprisingly bad. Please do not capture more than 
needed (no white areas), and upload screenshots as PNG. See the rules 
listed above the response field.

Also, you seem to have other problems as well:
See the line about the C: drive, it is not shown correctly.
Try to test your board without CP/M. I think something else is fishy.

von Horst S. (h3aau)


Lesenswert?

1.8sec
find ich schon nicht schlecht.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Anbei ein XMODEM für das System mit I2C-UART über RDR: und PUN: Ich habe 
die Config-Datei gleich angepaßt. Damit geht das Kopieren von Datein 
zwischen CP/M und PC auch ohne Kermit recht fix.

von Martin H. (therealmartin)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

nur als Appetizer - was man so mit einem CP/M-AVR System (in diesem Fall 
der gute, alte CP/M-Stick) so machen kann.

Das MultiTel-D zeigt 80x24 Zeichen und hat eine serielle Schnittstelle 
sodass man es als Terminal benutzen kann.
Der CP/M-AVR Stick pass in den Raum für den integrierbaren Drucker - 
dann hätte ich einen kompakten, portablen CP/M Rechner ;-)

Habe nur noch nicht herausgefunden, auf welche Escape-Sequenzen es 
reagiert (CTRL-L löscht schon mal den Bildschirm).

Martin

PS: wenn die aktuelle Platine die serielle Schnittstelle für das 
Terminal auf zusätzlich herausführen würde (einfache Steckerleiste mit 
oder ohne MAX232 reicht), könnte man eventuell auch für die Puristen 
eine Alternative ohne Propeller-Chip und PS/2 mit der gleichen Platine 
aufbauen.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Schöner Aufbau Martin :-)

Die Bestückung des Propellers ist für das CP/M nicht zwingend notwendig 
(siehe Übersicht). Es können
1. per USB alle seriellen Schnittstellen (AVR, Propeller, RS232) 
angesprochen werden
2. direkt RS232 (9 polig D-SUB) benutzt werden
3. RS232 auf USB umgelenkt werden
Man kann also auch CON: auf CRT: legen und CRT: auf USB ;-)

Anbei noch zwei Tools um das VT100-Terminal im CP/M besser zu bedienen.
CSET.COM schaltet zwischen den beiden Character Sets um. Der erste 
Parameter ist für G0 und der zweite Parameter für G1. Möglich sind US, 
UK, DE, DE, DEC und SUP.
CSET US DE
lädt also das US Set nach G0 und DE nach G1.
Mit PSCS.COM kann sich dann der verfügbare Zeichenvorrad angezeigt 
werden.
Den Quelltext gibt’s hier [1].

[1] https://github.com/Feinmechaniker/AVRCPM

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Zu jedem Projekt gehört auch ein ordenliches Gehäuse :-)

von Rene K. (xdraconix)


Lesenswert?

Wäre da noch eine Platine übrig? ?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Rene K. schrieb:
> Wäre da noch eine Platine übrig? ?

Ja, sende mir mal eine PN mit deiner E-Mail.

Alle anderen Platinen habe ich heute, da nun alles ins Gehäuse paßt, in 
die Post gegeben. Sie sollten also nächste Woche eintreffen.

von Rene K. (xdraconix)


Lesenswert?

Joe G. schrieb:
> Rene K. schrieb:
> Wäre da noch eine Platine übrig? ?
>
> Ja, sende mir mal eine PN mit deiner E-Mail.
> Alle anderen Platinen habe ich heute, da nun alles ins Gehäuse paßt, in
> die Post gegeben. Sie sollten also nächste Woche eintreffen.

Danke, habe dir eine PN geschickt ?

von Rene K. (xdraconix)


Lesenswert?

Ich bin gerade am Bestellen der BOM. Bei dir im GIT gibt es jetzt zwei 
verschiedene Versionen der Part-List. Ich gehe davon aus das die 1.0 
aktuell ist und nicht 1.2? Platine ist ja 1.0.

Der Reichelt Warenkorb ist auf die 1.0 ausgelegt? So mal fix drüber 
geschaut... Ist da der Propeller schon dabei oder muss ich den Extern 
organisieren?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Die Schaltung hat sich von der Version 1.0 auf die Version 1.2 nicht 
geändert. Die Änderungen betreffen ausschließlich Das Layout und den 
Bestückungsaufdruck (siehe Errata).

Es ist also günstig die BOM und die Partlist der Version 1.2 zu nutzen 
bis auf C21 (100n), der ist in der Version 1.0 noch ein SMD 100n 
Baugröße 0805. Speziell C17 und C18 (18p) sollten in 0603 für die V1.0 
bestückt werden. Es ist sonst eine arge Fummelei.

Der Reichelt Warenkorb ist nicht vollständig (!) Ich habe zwar versucht 
alles zu erfassen, aber eine Kontrolle ist besser. Ob man die IC’s 
sockelt, muß zudem jeder selbst entscheiden. Ich hatte s im meinem 
Muster getan, um bei Fehlern eingreifen zu können. Prinzipiell halte ich 
es beim 8-Bit GPIO (PCF8574), RS232 Treiber (MAX3222) und dem 16-Bit 
GPIO (MCP23017) für sinnvoll.

Weiterhin muss beim PCF8574 (8-Bit GPIO) darauf geachtet werden, welche 
Version man mag. Der PCF8574 hat die Adresse 0x20 und der PCF8574A die 
Adresse 0x38. Das muss bei den Einstellungen im Softwareteil des AVR 
„config.inc“ beachtet werden. Default ist der PCF8574.

Der Propeller ist nicht mit im Reicheltkorb, den gibt es dort nicht. 
Weiterhin fehlt dort die Fassung für die SD-Card (Würth 693063010911).

Ich freue mich über jede Ergänzung und Berichtigung.

von Rene K. (xdraconix)


Lesenswert?

Super, danke... Da setze ich mich heute Abend mal dran und Ergänze / 
Berichtige die Liste.

An die SD-Card Fassung komme ich durch Vitamin B zu WE. Und kann hier 
welche zum Selbstkostenpreis anbieten.

von Rene K. (xdraconix)


Lesenswert?

Platine kam heute wohlbehalten bei mir an. Mensch hätte ich gewusst das 
du quasi "Um die Ecke" kommst, hätte man sich ja auch mal treffen können 
:-D

P.s.: Ich habe nun den gesamten Thread nicht verfolgt (alle 100 Seiten). 
Aber ist es nicht möglich die VT100 Terminal Abfrage nicht auch auf ein 
Atmel der AtmegaX8 Reihe auszulagern? Die 4KB Ram dürften doch, rein 
theoretisch, für ein 80x24 Terminal völlig ausreichend sein. Gut, das 
VGA Timing müsste dann etwas "neben der Spezifikation" laufen. Aber 
dürfte machbar sein.

Was sprach da für den Propeller?

: Bearbeitet durch User
von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Rene K. schrieb:
> Mensch hätte ich gewusst das
> du quasi "Um die Ecke" kommst, hätte man sich ja auch mal treffen können

Das können wir ja immer noch :-)

> Was sprach da für den Propeller?

Es gibt sogar eine Variante mit einem AVR als Terminal [1]. Es geht 
jedoch arg eng mit dem Timing um und viel Luft ist für eine farbige 
Darstellung auch nicht. Der Propeller hat deutlich mehr Geschwindigkeit 
und außerdem läuft noch ein AY-3-8910/YM2149 mit.

[1] Beitrag "Re: CP/M auf ATmega88"

von Rene K. (xdraconix)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> Das können wir ja immer noch :-)

Sehr gerne :-)


Mir fällt gerade die nächste Frage ins Auge:

Sie dazu Bild 1. Der AtmegaXX8-PU oder auch P-PU läuft unter 3V3 doch 
garnicht auf 20Mhz sondern laut DB bloß 0-10Mhz unter 2.7-5.5V und 
0-20Mhz unter 4.5-5.5V.

Gibt es vom AtmegaXX8 auch ein Derivat welcher mit 20Mhz unter 3V3 
spezifiziert ist?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Rene K. schrieb:

> Gibt es vom AtmegaXX8 auch ein Derivat welcher mit 20Mhz unter 3V3
> spezifiziert ist?

Nein, gibt es nicht. Bisher laufen aber alle von mir (und auch 
anderen)eingesetzten IC's ohne Probleme. Damit sie ordentlich 
anschwingen, ist das Fuse Bit auf "Full Swing Crystal" gestellt.

: Bearbeitet durch User
von Hans-Werner Schütz (Gast)


Lesenswert?

Hallo,
gestern endlich angefangen zu bauen, ich habe schon einige Fehler 
gefunden und auch einige Verbesserungsvorschläge. Ich bin jetzt 3 Wochen 
auf Reha... da finde sicherlich Zeit alles nieder zuschreiben (geht zu 
Joe per Mail).
Mein Problem ist im Moment der SC16IS740, wo bekommt man das Teil 
günstig her? (ich würde auch mehrere nehmen). Zu dem Quarz sag ich mal 
nichts...
Gruß
Hans-Werner

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?


von Marcel (Gast)


Lesenswert?

Was sagt ihr zu einer Sammelbestellung der "komplizerten Teile"?

von CPM und Arduino DUE ? (Gast)


Lesenswert?

Vielleicht sollte man auf eine Arduino DUE umsteigen.

Gruss

von Hans-Werner Schütz (Gast)


Lesenswert?

Hallo,
erstmal 10 bestellt...
Gruß
Hans-Werner

von Mathias S. (mathias_s)


Lesenswert?

Rene K. schrieb:
> Super, danke... Da setze ich mich heute Abend mal dran und Ergänze /
> Berichtige die Liste.
>
> An die SD-Card Fassung komme ich durch Vitamin B zu WE. Und kann hier
> welche zum Selbstkostenpreis anbieten.


Hallo René,

hast Du schon die Liste ergänzen können? Sprich: welche Teile sind im 
Reichelt Warenkorb nicht enthalten?
An der SD-Card Fassung hätte ich Interesse, sofern Du noch eine abtreten 
möchtest.

Beste Grüße,
Mathias

P.S.: wieder einmal ein tolles Projekt von Joe G. mit einer sehr 
sauberen Doku! Ich habe bereits den AX81b und den CP/M-Stick aufgebaut - 
funktioniert beides klasse. Herzlichen Dank dafür!

von Peter Z. (flexopete)


Lesenswert?

Hallo,
habe meine Platine soweit aufgebaut. VT100 geht, i2cscan findet
die I2C Bauteile. Was mir beim Bestücken aufgefallen ist:
Thermal-Pads lassen sich schlecht löten.
Habe zwar kein Problem 0603 zu löten, aber es ist ja Platz für
z.B. 0805.
Den Quarz für den SI16... könnte man besser löten, wenn die Pads
größer wären (hallo Hans-Werner), oder gleich HC-49.

Ein Problem habe ich noch mit der RTC: im Reichelt Warenkorb
steht das Ding als PCF 8583T DIP8, aber T ist SMD. Also habe
das Chip erstmal auf einen 8er Dip-Sockel geprokelt.
Solange das Board extern versorgt wird, ist die Abweichung nur
minimal. Läuft die RTC auf der CR2032, ist die Abweichung einige
Minuten in Plus. Schon ein CPM Hardware-Reset bringt die RTC
einige Sekunden ins Plus.
Kann man den RTC-Treiber permanent laden?

Gruss
Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Vielen Dank für deine Hinweise! Die Beschaltung um den SI16.. stelle ich 
auf „freundliche“ Bauelemente um. PCF8583T ist natürlich nicht korrekt, 
auch wenn Reichelt DIP8 dazu schreibt. Hier muss der PCF8583P in den 
Warenkorb.
Das Problem mit der Uhr kann ich bei mir nicht nachvollziehen. Die Uhr 
läuft bei mir seit einem Monat korrekt (egal ob bei externer Versorgung 
oder der CR2032) auch ein CP/M-Reset ändert die Uhrzeit nicht. Mal 
sehen, was die anderen dazu sagen...

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Hans-Werner vielen Dank für deine Anmerkungen und Korrekturen! Eine neue 
Doku liegt nun unter Github. Die Schalterstellungen sollten jetzt auch 
der Schaltung entsprechen und der VT100 Teil ist auch ergänzt.

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo Joe,
jetzt fehlt nur noch ein Gehäuse... hast du das schon in der Produktion?
:-)
Das kann nicht jeder produzieren, und würde mich interessieren.
Gruß
Hans-Werner

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Das Gehäuse ist schon als Muster fertig.
Beitrag "Re: CP/M auf ATmega88"
Ich hoffe bei erner entsprechenden Menge auf einen akzeptablen Preis.

von Peter Z. (flexopete)


Lesenswert?

Hallo Joe,

mal ne Frage zum Trimmer C12 am PCF8583P. Ein Ende geht an Pin 1 und
das andere an 3,3V. Sollte das nicht an D1,D2 bzw. Pin8 gehen?
Wenn die 3,3V nicht da sind, hängt er ja in der Luft. Könnte ja mein
Problem sein.

Gruss
Peter

von Peter Z. (flexopete)


Lesenswert?

Habe jetzt mal den C12 an Pin8 gehängt,
jetzt läuft die RTC mit richtiger Uhrzeit
im Batterie Betrieb.

Die Änderung ist einfach durchzuführen:
C12 von 3,3V trennen und mit Pin8 verbinden.

@Joe
Es wundert mich, daß Du da kein Problem hast.

ps: melde mich für ein Gehäuse an.

Gruss
Peter

: Bearbeitet durch User
von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Peter Z. schrieb:
> Die Änderung ist einfach durchzuführen:
> C12 von 3,3V trennen und mit Pin8 verbinden.

Das ist ja ein dicker Hund ;-) Natürlich muss C12 an Pin8. 
Offensichtlich läuft meine Uhr auch ohne C12 genau. Die Gehäusewünsche 
sammle ich mal...

von Marcel (Gast)


Lesenswert?

Gehäuse wäre gut :-) Danke.

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo,
Hiobsbotschaften... das mit den UARTS SC16IS740 hat nicht geklappt, der 
Lieferant kann nicht liefern aliexpress hat das Geld erstattet..?? Hab 
es dann bei E... versucht..und bis jetzt nichts erhalten. Hat da einer 
noch eine Quelle wo die Dinger auch bezahlbar sind?

@Joe soll da noch etwas mit dem Gehäuse kommen?

Gruß
Hans-Werner

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Da das Projekt in Richtung Bausatz läuft, beschaffe ich die Bauelemente 
in der Losgröße 10. Bei Mouser ist das IC für 2.47€ + Steuer verfügbar. 
Ich würde einfach für dich (vielleicht noch weitere Interessenten) 
mitbestellen. Auch das Gehäuse ist noch aktuell. Hier warte ich noch auf 
die Rückkopplung der Betatester bzw. final auf das endgültige Angebot in 
der Losgröße 10.

von Marcel (Gast)


Lesenswert?

Bin dabeo :-)

von Peter S. (petersieg)


Lesenswert?

Hallo liebe (AVR)CP/M Freunde.

Ich werde mir die nächsten Wochen mal wieder ein AVR CP/M Stick 
aufbauen.
Da mein Stand inzwischen 'etwas' veraltet ist, würde ich nach 
erfolgreichem Aufbau dann den Stand von Martin flashen wollen:
https://www.mikrocontroller.net/attachment/379658/AVRCPM-SER-PAR.zip
(Danke für die tolle Beschreibung und fertiges HEX!)

Frage zum I2C Uart. Wäre so etwas verwendbar (ohne SW Anpassungen):
https://www.ebay.de/itm/SC16IS750-CJMCU-750-Single-UART-w-I2C-Bus-SPI-Interface-For-Industrial-Control/163595853069?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m1438.l2649

--

Ich habe mir dann noch mal den Stand des Artikels angeschaut.
Der ist - hmm.. leider inzwischen völlig veraltet - und eher verwirrend!

Gibt es da Bestrebungen, die älteren Optionen (z.B. Partitionen) auch 
unter "Historische/Alte Optionen" zu stellen und den aktuellen Stand 
evtl. auch nach oben, neu einzufügen? Ist finde es etwas 'blöd' wenn man 
sich erst durch alle historischen Versionen liest, evtl. schon anfängt.. 
und erst danach feststellt, das ein Atmega88 oder 168 eben nicht mehr 
ausreicht für die aktuelle Version, sondern ein Atmega328p der 
'richtige' Chip ist.
Gleiches gilt für FAT16/SD-Karte und Disk-Images..

Peter

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Hallo Peter,

den derzeit aktuellen Stand (incl. I2C und IO-Byte von Martin), findest 
du hier [1]. Dort sind dann auch die Quellen für den AVR das CP/M sowie 
schon übersetzte HEX-Files.

> Frage zum I2C Uart. Wäre so etwas verwendbar (ohne SW Anpassungen):

Der von dir verlinke EBAY-Artikel ist zum Softwarestand kompatibel.

Mit dem Artikel hast du Recht. Hier würde etwas Überarbeitung guttun. 
Ich versuche es mal…


[1]   https://github.com/Feinmechaniker/AVRCPM

von Peter S. (petersieg)


Lesenswert?

Hallo Joe.

Ich habe mir mal erlaubt den Artikel etwas aufzubereiten.
Evtl. bietet sich nun die Aufnahme der jetzt aktuellen Hardwareversion 
mit VT100 und I2C inkl. Gehäuse an?

Und ggf. die Software Rubrik müsste sicher auch aktualisiert werden ;-)

Peter

von Martin Hepperle (Gast)


Lesenswert?

Peter S. schrieb:
> ...
> Frage zum I2C Uart. Wäre so etwas verwendbar (ohne SW Anpassungen):
> Ebay-Artikel Nr. 163595853069
> ...

Hallo Peter,
genau so ein Board habe ich mit meinem CP/M-Stick verwendet (Platine kam 
damals von Dir). Wenn Du vom gleichen Anbieter noch 162722531579 mit 
bestellst, kannst Du auch den parallelen Centronics-Port anbauen.
Braucht dann noch zwei 3.3->5V level converter für I2C und einen 5V 
Stromversorgung.

PS: Ich habe mir dann noch eine 5V Powerbank dazu gebaut. Die 
kommerziellen Powerbanks schalten leider ab, wenn nicht genügend Strom 
gezogen wird. Deshalb habe ich mir eine selbst gebaut mit 
USB-LiPo-Ladeplatine (z.B. 162764857644), einer Pollin 3.6V LiPo 
Telefonzelle und 3.6V auf 5V Converter. Dann hat man ein portables CP/M 
System, das man schnell an jedes Terminal anschließen kann. Das teuerste 
war das 2.5 Zoll Aluminium Festplattengehäuse für die Powerbank.

Martin

von Hans- w. S. (hschuetz)


Lesenswert?

Hallo Joe,
endlich den Uart bekommen....
wie sieht es mit Gehäuse aus?
Gruß
Hans- Werner

von Peter S. (petersieg)


Lesenswert?

Hallo Joe.

Ich habe nun viele Stunden Fehlersuche hinter mir, weil nach einiger 
Zeit das System sich mit Dump 76 76 weghängte. Habe mit dram_waitstate 
und dram_refresh Angaben in config.inc gespielt - bis ich heute auf die 
Idee kam, mir mal dram-refresh.asm anzuschauen:
1
; ------------------- DRAM Refresh Interrupt --------------------
2
3
  .cseg
4
  
5
  INTERRUPT OC2Aaddr
6
  reti          ; only for SRAM  
7
8
  sbis  P_RAS,ram_ras  ;2
9
        ...

Das oberste reti gehört wohl erst einmal auskommentiert im Repo :-(
Und zukünftig eher als define in config.inc und entsprechend dann 
darüber aktiviert, wenn SRAM definiert wurde.

;-)

Peter

: Bearbeitet durch User
von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Oh, sorry!

Da ich unter Github nur die Daten für die DRAM Version bearbeitet hatte, 
ist mir das nicht aufgefallen bzw. ich hatte es nach dem damaligen 
erfolgreichen Hardwaretest ganz vergessen in der config.inc zu 
implementieren. :-(

Hans- w. S. schrieb:
> wie sieht es mit Gehäuse aus?

Der letzte Betatester hatte mir erst letzte Woche alle 
Wünsche/Probleme/Änderungen zukommen lassen, so dass ich nun erst dazu 
komme auch diese Änderungen einfließen zu lassen. Letztlich kommt es 
dann noch auf die Stückzahl an. Ein Einzelmuster ist derzeit wirklich 
sehr teuer.

von hschuetz (Gast)


Lesenswert?

Hallo Joe,
ich nehme ein Bausatz mit Gehäuse und ein Gehäuse für den Prototyp.
Gruß
Hans-Werner

von Horst S. (h3aau)


Lesenswert?

moin,
ich suche für den alten c't Prommer-80 die software.
gab es die auch als quelle?

von Günther S. (guenther_sch)


Lesenswert?

Da kann ich weiterhelfen, es gab Pascal und Assembler Versionen, kann 
aber erst heute abend danach schauen.

von Horst S. (h3aau)


Lesenswert?

moin,
dann hatte ich wohl die pascal-version.
beim umstieg von cp/m auf den ersten pc hatte ich alles auf disk's im 
ibm-format abgespeichert und eingelagert. leider haben einige davon die 
lagerdauer nicht überstanden.
ich hatte damals mit einem freund einen universal formatierer für cp/m 
gebaut. der konnte das disk-format für einzelne drives beliebig 
anpassen. so haben wir damals das formatchaos etwas in den grief 
bekommen.

von Christian D. (toast_r)


Lesenswert?

In der c't 03/1985 ab Seite 76 ist das Pscal-Programm abgedruckt.
Sollte also kein Datenträger auftauchen, kann man das notfalls noch 
abtippen.

von Horst S. (h3aau)


Lesenswert?

moin,
das hätte ich gern mal als pdf.

von Horst S. (h3aau)


Lesenswert?

moin,
Danke an alle.
@günter leider sind die sourcen der tp routinen beschädigt.
da hängen unvollständige textteile drinn.

ich habe hier noch die sourcen in asm vom "Z80 BASIC Ver 4.7c" von MS.
leider sind auch da fehler drinn, diese habe ich begradigt. zudem sind 
einige befehle wie Cload und Csave nicht realisiert.

hat da noch jemand was vollständiges?

: Bearbeitet durch User
von Günther S. (guenther_sch)


Lesenswert?

Ich schau mal nach, ob ich irgendwo noch eine andere Version habe.

von Horst S. (h3aau)


Lesenswert?

moin,
öhmmm..... watte im kopf.
habe mal statt z80asm die m80/l80 kombi genommen.
m80 =test/L/N
alle ok, prn-file bestens.
l80 test,test/N/E
es wird eine test.com erstellt. läuft aber nicht.
also ddtz test.com

DDTZ v2.7M by CB Falconer. CPU=Z80
Next  PC  Save
0380 0100 3
-d
0100 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ................
0110 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ................
0120 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ................
0130 00 00 00 00 00 CD 29 0B  FE 29 C4 9D 04 C3 40 0B ......)..)....@.
0140 3E 01 32 2F 3D C3 59 2B  AF 32 2F 3D C3 59 2B AF >.2/=.Y+.2/=.Y+.
0150 32 2D 3D C3 59 2B CD 55  0B C2 47 2B 0C 0D CA 47 2-=.Y+.U..G+...G
0160 2B F5 CD 0E 0C C4 24 0C  C2 3A 2B 7E F6 40 77 F1 +.....$..:+~.@w.
0170 FE 2C C0 CD 55 0B C2 C1  04 C3 2C 2B 3E 01 32 2D .,..U.....,+>.2-
0180 3D C9 3E FF 32 2E 3D C3  59 2B AF 32 2E 3D C3 40 =.>.2.=.Y+.2.=.@
0190 0B 3E 01 32 2E 3D C3 59  2B AF C3 7D 2B 3E FF C3 .>.2.=.Y+..}+>..
01A0 7D 2B 3A 8D 40 2F 6F 3A  EC 3C B7 CA 59 2B 7D 32 }+:.@/o:.<..Y+}2
01B0 8D 40 32 2A 3D C3 59 2B  3E 01 32 EA 3C C3 59 2B .@2*=.Y+>.2.<.Y+
-

das schaut nicht nach dem aus was im prn steht......

 0000                          boot    equ  0000h     ; system reboot
  0005                          bdos    equ  0005h     ; bdos entry 
point
  005C                          fcb1    equ  005ch     ; first file name
  005C                          sfcb    equ  fcb1      ; source fcb
  006C                          fcb2    equ  006ch     ; second file 
name
  0080                          dbuff   equ  0080h     ; default buffer
  0100                          tpa     equ  0100h     ; beginning of 
tpa
                                               ;
  0009                          printf  equ  9         ; print buffer 
func#
  000F                          openf   equ  15        ; open file func#
  0010                          closef  equ  16        ; close file 
func#
  0013                          deletef equ  19        ; delete file 
func#
  0014                          readf   equ  20        ; sequential read 
func#
  0015                          writef  equ  21        ; sequential 
write
  0016                          makef   equ  22        ; make file func#
                                               ;
                                        org tpa       ; beginning of tpa
  0100'   31 0239'                      lxi  sp,stack  ; set local stack
  0103'   0E 10                         mvi  c,16      ; half an fcb
  0105'   11 006C                       lxi  d,fcb2    ; source of move
  0108'   21 01D9'                      lxi  h,dfcb    ; destination fcb
  010B'   1A                    mfcb:   ldax d         ; source fcb
  010C'   13                            inx  d         ; ready next
  010D'   77                            mov  m,a       ; dest fcb
  010E'   23                            inx  h         ; ready next
  010F'   0D                            dcr  c         ; count 16...0
  0110'   C2 010B'                      jnz  mfcb      ; loop 16 times
                                               ;
                                               ;
was mache ich da falsch???????????????

von Horst S. (h3aau)


Lesenswert?

ok, gefunden........
das /P:0100 ist wohl nicht default und muss vor dem laden des files 
pasieren.

L80 /P:0100,DEMO,DEMO/N/E

von Horst S. (h3aau)


Lesenswert?

ne, doch nich....
irgendwie habe ich beim linken immer noch einen offset von 0100h drinn.
in der com-datei liegt der code erst ab 0200h.

von Leo C. (rapid)


Lesenswert?

Hallo Horst,

entweder Du assemblierst absolut:
1
        ASEG
2
        ORG 100H
oder Codesegment-relativ (CSEG bzw. default) und läßt ORG dann weg, und 
sagst dem Linker mit /P:, wohin geladen werden soll.

von Horst S. (h3aau)


Lesenswert?

DANKE!!!!!!!!!!!!!!!!!!!!!!

man oh man.... peinlicher fehler.

ich habe den fehler im linker gesucht.
im m80 prn sah das doch alles ok aus.

: Bearbeitet durch User
von Horst S. (h3aau)


Lesenswert?

moin,
hat wer den VDE.COM auf VT100 konfiguriert?

von Martin H. (therealmartin)


Angehängte Dateien:

Lesenswert?

Weil ich in letzter Zeit viel mit meinem AVR-CP/M Stick gearbeitet habe 
(GSX-80 Grafik mit Fortran und CBASIC), habe ich mir zwei Windows 
Befehlszeilen-Skripte geschrieben, um ein Backup von den 8 MB 
Festplattendateien zu erzeugen.
Dieses Backup erfolgt dateiweise, d.h. ich habe dann alle Einzeldateien 
in einem Verzeichnisbaum unter Windows liegen.
Ein Skript kopiert mit Hilfe der CPMTOOLS alle Dateien in 
User-Unterverzeichnisse und das andere Skript kopiert alles wieder 
zurück in Image Dateien.
Damit kann ich jetzt bequem Einzeldateien unter Windows ansehen, 
austauschen oder ändern und später wieder alles zurückspielen ohne 
jedesmal manuell CPMTOOLS Befehle eingeben zu müssen.
Nur die SD-Karte muss ich natürlich noch umstecken.
Für das Zurückkopieren werden komplett neue Image Dateien angelegt, 
wofür noch ein leeres Image als Vorlage benötigt wird.
Ausserdem CPMCP aus den CPMTOOLS und natürlich die passende DISKDEFS 
Datei mit einer Definition für "avr8M".

Ist vielleicht auch für andere Nutzer interessant.

Martin

von Guido D. (gdampf)


Lesenswert?

Hallo zusammen,
ich habe über die Tage mal einen Emulator auf Breadboard aufgebaut und 
bin sowohl von der simplen Konstruktion als auch von der Performance mit 
einem atmega328p begeistert.
Gar nicht so einfach, sich durch die 10-jährige Historie zu wühlen - 
trotz der Bemühungen Eurerseits, die Sache immer wieder zusammen zu 
fassen.
Ich habe vor über 30 Jahren auch so meine Erfahrungen mit CP/M machen 
dürfen, erst mit einem Apple II + Z80-Karte, dann auf Epson QX-10 und 
PX-4.
Letzterer ist mir vor einigen Wochen beim Aufräumen im Keller mal wieder 
in die Hände gefallen und hat meine Neugierde wieder geweckt.
Das Ding läuft noch! Basic im Rom und Turbo-Pascal auf Mini-Kasette - 
ewige Ladezeiten, aber es geht.
Dann fand ich ein tolles Stück Software für den ESP32 (www.fabgl.com - 
siehe Examples). Es emuliert einen Altair8800 recht performant mit VGA 
und Tastatur über PS/2. CP/M läuft super. Ich mag diesen 
minimalistischen Ansatz.
Das hat mich dann auch hierher geführt. Toll finde ich die Versionen des 
AVRCPM-Projektes ohne Propeller etc., weil mir bei letzterem schon der 
Einsatz von Rechenpower zuviel ist. Da könnte man auch den ESP32 
vorziehen.
Also erst einmal ein großes Kompliment an die Community - tolle Arbeit!

Leider ist es in diesem Threat inzwischen recht ruhig geworden, doch 
hoffe ich dennoch auf ein wenig Unterstützung, da ich noch ein wenig mit 
der Umgebung hadere.
Als Umgebung verwende ich das aktuelle Microchip Studio 7.0.2542. Wenn 
ich damit die Sourcen (Version aus 
https://www.mikrocontroller.net/svnbrowser/avr-cp-m/avrcpm/tags/3.5/) in 
der Voreinstellung der Config.inc übersetze, findet der Linker zwei 
Symbole nicht: adc_read8 und avr_read_vcc (beide aus virt_ports.asm - 
Zeile 183 und 187).
Schalte ich den ADC-Support in der Config.inc aus, läuft alles und CP/M 
startet.
Eine Suche nach diesen Symbolen in allen *.inc und *.asm bringt keinen 
Treffer.
Auch wenn ich den ADC sicher nicht so schnell brauchen werde, wüsste ich 
gerne, woran das liegt. Kennt einer die Antwort auf die Fragen
a) wo sind die beiden Symbole definiert
und
b) warum sind sie in meiner Umgebung nicht definiert
und
c) bzw. ist der Code für den ADC möglicherweise veraltet und nicht mehr 
compilierbar?
Im Fall c) sollte man evtl. die Default-Einstellungen der Config.inc mal 
überarbeiten, oder?

Gruß
Guido

von Leo C. (rapid)


Lesenswert?

Hallo Guido,

der erste Prototyp vom ADC-Code war nicht so doll. Es hatte aber auch 
niemand Interesse daran. Deshalb hatte ich den Code nie ins SVN 
eingecheckt.

Guido D. schrieb:
> a) wo sind die beiden Symbole definiert

in adc.asm. Die Datei ist hier im Anhang:
Beitrag "Re: CP/M auf ATmega88"
Sie muß in avrcpm.asm included und im Makefile zu ASRC0 zugefügt werden.

Hier gibts auch eine ältere Version des Gesamtprogramms:
Beitrag "Re: CP/M auf ATmega88"

> und
> b) warum sind sie in meiner Umgebung nicht definiert

weil adc.asm fehlt.

> und
> c) bzw. ist der Code für den ADC möglicherweise veraltet und nicht mehr
> compilierbar?

Ich vermute mal, das er noch funktioniert.

> Im Fall c) sollte man evtl. die Default-Einstellungen der Config.inc mal
> überarbeiten, oder?

Ja, das hatte ich wohl beim Entfernen von adc.asm vergessen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Hallo Guido,

die letzte Version mit Unterstützung von RTC, GPIO, UART, LPT usw. 
findest du hier [1] in der Version von AVR-Studio 7.

[1] https://github.com/Feinmechaniker/AVRCPM

von Bernd (Gast)


Lesenswert?

Guido D. schrieb:
> Das hat mich dann auch hierher geführt. Toll finde ich die Versionen des
> AVRCPM-Projektes ohne Propeller etc., weil mir bei letzterem schon der
> Einsatz von Rechenpower zuviel ist.
Der Propeller dient nur als VGA-Terminal. Da gibt es auch ein separates 
Projekt dazu:
Beitrag "VT100-Terminal (VGA+PS2)"

> Da könnte man auch den ESP32
> vorziehen.
Den gab es vor zehn Jahren noch nicht...

von Rapper B (Gast)


Lesenswert?

ähmm..also meine Frage wurde hier sicher schon tausendfach 
gestellt..daher reicht mir eine kurze Zusammenfassung als Antwort aus, 
wollte den Threat nicht kapern..
Wenn hier einige nach Z80 Projekten Fragen, wird immer die Sinnfrage 
gestellt...und warum man sich heute noch damit beschäftigen sollte etc.
Wieso ist ein AVR CP/M Projekt offenbar etwas völlig anderes:-)
Wenn ich das hier so sehe, würde ich doch besser gleich einen Z80 
verwenden

Wie gesagt..hatte mir jetzt die restlichen 10 Seiten nicht alle 
durchgelesen...

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Die kurze Antwort lautet:
Weil es möglich ist, mit 2 IC’s (AVR+DRAM) und einer SD-Card ein 
komplettes CP/M System zu realisieren.

von W.S. (Gast)


Lesenswert?

Joe G. schrieb:
> Die kurze Antwort lautet:
> Weil es möglich ist, mit 2 IC’s (AVR+DRAM) und einer SD-Card ein
> komplettes CP/M System zu realisieren.

Ähem... und das ist ein ausreichender Grund?

Ich sehe das ganz anders:

1. Es ist für einen Programmierer lehrreich, einen Z80 in Assembler 
programmieren zu lernen, weil der Z80 einen recht guten und 
überschaubaren Befehlssatz hat und man es deshalb leicht hat, die für 
Assembler nötige "Denke" zu erlernen.

2. Es ist für den Hardwerker lehrreich, mit einem Z80 ein funktionables 
System zu konstruieren, weil man damit Digitalelektronik recht gut 
lernen und üben kann.

3. Es ist für den Systemarchitekten lehrreich, CP/M zu begreifen, weil 
man damit lernen kann, wie man ein durchaus leistungsfähiges DOS mit nur 
wenigen kByte an Gesamtumfang konstruieren kann.

4. Natürlich könnte man auch einen ZX-Spectrum emuliert bauen, Frank hat 
das ja vorgemacht, aber das läuft dann zu fast 100% auf das Spielen mit 
den damaligen Spielprogrammen hinaus - und nicht auf die genannten 
lehrreichen Ziele. Kann man machen, ist aber eine völlig andere Kiste.

So.

In beiden Fällen (AVR oder echter Z80) ist das damit erzeugte System für 
die heutige Praxis deutlich zu klein. Mit Wordstar (oder beim Spectrum 
mit TLW) schreibt man heutzutage keine Briefe an die Omi mehr. Punkt.

Was bleibt, ist zum einen der damit erzielbare Lerneffekt. Den sehe ich 
allerdings bei einem interpretierten System wie per AVR oder ESP32 nicht 
gegeben, weil man dort ja doch wieder mehr mit dem interpretierenen 
System als mit dem eigentlichen Z80 bzw. CP/M zu tun hat.

Was zum anderen bleibt, ist die Möglichkeit, einen kleinen Rechner zu 
haben, der binnen 2 Sekunden bootet, wo man ein paar digitale und 
analoge Ein- und Ausgänge haben kann, für die man sich per Turbopascal 
mal eben irgendwelche kleinen Testprogramme schreiben kann und wo man 
damit irgend etwas auf dem Basteltisch tun kann, einschließlich 
Langzeit-Logging auf Disk - und das alles, ohne den PC benutzen zu 
müssen.

Ich würde das ganze Thema anders sehen, wenn man die Idee des CP/M 
weiter entwickeln würde, das Ganze dann tatsächlich auf einen passenden 
32 bittigen µC portieren würde und damit ein kleines, aber benutzbares 
System abseits von Windows, Linux, QNX und Ähnlichem schaffen würde.

So etwas wäre eine bessere Bastel-Idee.

W.S.

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

W.S. schrieb:
> 4. Natürlich könnte man auch einen ZX-Spectrum emuliert bauen, Frank hat
> das ja vorgemacht, aber das läuft dann zu fast 100% auf das Spielen mit
> den damaligen Spielprogrammen hinaus - und nicht auf die genannten
> lehrreichen Ziele. Kann man machen, ist aber eine völlig andere Kiste.
gegen Spiele-Emulation ist auch nichts einzuwenden, weil eine Soft-Emu 
nicht dasselbe ist.
Was jetzt die 'lehrreichen Ziele' anbelangt, kann man genauso 
argumentieren - nicht notwendig, da mittels PC-Software-emu sowieso 
alles möglich ist?!
Und damit sind die lehrreichen Ziele genauso obsolet, Hardware-Nachbau 
sinnlos so gesehen.

Wollte mal auf diese Projekt aufmerksam machen:
http://spritesmods.com/?art=avrcpm
Interessantes Projekt, leider schweigen sie sich darüber aus wie der 
Einbau in das Gameboy-Gehäuse aussieht - hier spart man an Fotos, etc. 
... oder eben doch nur ein Fake.
Das ist leider das Defizit dieser ganzen Projekte - die Macher gehen von 
sich aus.

: Bearbeitet durch User
von W.S. (Gast)


Lesenswert?

Robert K. schrieb:
> Was jetzt die 'lehrreichen Ziele' anbelangt, kann man genauso
> argumentieren - nicht notwendig, da mittels PC-Software-emu sowieso
> alles möglich ist?!
> Und damit sind die lehrreichen Ziele genauso obsolet

OK, wer sich als Verbraucher sieht, der benötigt keine Kenntnisse von 
Hardwaredesign und Programmierung und Betriebssystemen und 
Dateisystemen. Der muß bloß wissen, wie er/sie über das Display des 
Mobiltelefones wischen muß, um dann auf das gewünschte Icon zu tippen.

W.S.

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

W.S. schrieb:
> OK, wer sich als Verbraucher sieht, der benötigt keine Kenntnisse von
> Hardwaredesign und Programmierung und Betriebssystemen und
> Dateisystemen. Der muß bloß wissen, wie er/sie über das Display des
> Mobiltelefones wischen muß, um dann auf das gewünschte Icon zu tippen.
>
> W.S.

darum geht es doch gar nicht!
Wenn ich schon ein Projekt ins Netz stelle, dann sollte das für jeden 
Interessierten nachbaubar sein. Dieses Ziel ist schon mal verfehlt.
Für Programmierung, Hardwaredesign, Betriebssysteme, etc. kann man auch 
Bücher kaufen und lesen bzw. im Selbstkurs lernen oder an der Uni das 
entsprechende Fach studieren.
Ein Projekt muß aber einen anderen Anspruch haben - und der ist aufgrund 
der Arroganz definitiv nicht erfüllt!

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Robert K. schrieb:
> Wollte mal auf diese Projekt aufmerksam machen:
> http://spritesmods.com/?art=avrcpm

Mußt du nicht, es reicht:
Beitrag "CP/M auf ATmega88"
zu lesen ;-)

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

Joe G. schrieb:
> Mußt du nicht, es reicht:
> Beitrag "CP/M auf ATmega88"
> zu lesen ;-)

ah okay, Du leidest offenbar an Alzheimer - bitte nicht falsche Zitate 
unterschieben :-)
Originalzitat ist von Peter Sieg:
Peter Sieg schrieb:
> Hi.
>
> Wollte mal auf diese Projekt aufmerksam machen:
> http://spritesmods.com/?art=avrcpm

Ich habe das Zitat von Peter dann ebenfalls nochmal verwendet, aber 
irgendwas ist mit der 'Kommentierfunktion' hier schiefgelaufen  (sehe 
ich gerade) ... leider kann man das nicht mehr ändern, wenn anschließend 
jemand anders postet - Fehler bzw. Websiteproblem, bei anderen Foren 
geht sowas.

: Bearbeitet durch User
von W.S. (Gast)


Lesenswert?

Robert K. schrieb:
> darum geht es doch gar nicht!

Oh doch. Es geht um das Können und das Selbstverständnis. Da ist ein 
großer Unteschied zwischen dem Elektroniker, der etwas machen will oder 
soll und deshalb Fachkenntnisse braucht - und dem Verbraucher, der 
lediglich auf ergonomische benutzbarkeit achtet, egal ob da drinnen nun 
ein Mikrocontroller oder ein grünes Marsmännchen werkelt.

> Wenn ich schon ein Projekt ins Netz stelle, dann sollte das für jeden
> Interessierten nachbaubar sein. Dieses Ziel ist schon mal verfehlt.

Das kommt sowohl auf die Güte der hoffentlich vorhandenen Dokumentation 
als auch auf die Ausführung des Projektes an. Wäre im Einzelfall zu 
prüfen - mal abgesehen davon, daß nicht jeder elektronik-affin ist. Hier 
lese ich viel zu häufig sowas: "ich will was ganz dolles bauen aber ich 
verstehe von Elektronik garnichts..."

> Für Programmierung, Hardwaredesign, Betriebssysteme, etc. kann man auch
> Bücher kaufen

Ja, in diesem Falle den Lampe-Jorke-Wengel, aber bloß kaufen nützt 
nichts, man muß es auch selbst praktizieren, damit man es tatsächlich 
lernt.

W.S.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

W.S. schrieb:
> Natürlich könnte man auch einen ZX-Spectrum emuliert bauen, Frank hat
> das ja vorgemacht, aber das läuft dann zu fast 100% auf das Spielen mit
> den damaligen Spielprogrammen hinaus - und nicht auf die genannten
> lehrreichen Ziele.

Es gibt Z80-Cross-Assembler, mit denen man TAP-files für den Spectrum 
erzeugen kann.

Hier auch ein Online-Z80-Assemler: https://clrhome.org/asm/

Dieser kann ebenso direkt ZX Spectrum TAP-Files erzeugen, welche man mit 
STECCY direkt per
1
LOAD "" CODE
2
RANDOMIZE USR address
ausführen kann. Es muss ja nicht immer ein Spiel sein.

Ich habe früher mit dem ZX Spectrum Assembler gelernt und kann nur 
bestätigen, dass Z80-Code ideal ist, um Assembler zu lernen.

Ich habe in den letzten Wochen auch mal z88dk als 
Cross-C-Compiler-Umgebung ausprobiert - läuft mit sccz80 (original 
z88dk's compiler) oder auch sdcc. Hier kann man ebenso direkt 
ZX-Spectrum-TAP files erzeugen, die auf dem STECCY reibungslos 
laufen.

: Bearbeitet durch Moderator
von W.S. (Gast)


Lesenswert?

Zuerst mal mein Wunsch:
Dieses Jahr 2021 möge uns allen ein gutes und gesundes Jahr werden!

Frank M. schrieb:
> Es gibt Z80-Cross-Assembler, mit denen man TAP-files für den Spectrum
> erzeugen kann.

Ja, weiß ich. Aber man muß es tun wollen - und da sehe ich bei 
Nachbauern doch weitaus eher das Verlangen, alte Spiele laufen zu 
lassen.

Ich kann Assembler, du auch, einige andere hier auch (noch) - aber ich 
lese gerade hier in diesem Forum immer wieder geradezu militante 
Beiträge, die jegliche Assembler-Kenntnisse als komplett obsolet abtun.

W.S.

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

W.S. schrieb:
> Zuerst mal mein Wunsch:
> Dieses Jahr 2021 möge uns allen ein gutes und gesundes Jahr werden!
dem Neujahrswunsch schließe ich mich an :-)

W.S. schrieb:
> Ja, weiß ich. Aber man muß es tun wollen - und da sehe ich bei
> Nachbauern doch weitaus eher das Verlangen, alte Spiele laufen zu
> lassen.
In der Beziehung ist Deine Haltung leider falsch - daran ist nichts 
verkehrt sich der reinen Anwendung zu erfreuen oder eben nur für Spiele 
zu nutzen?
Die Original-Retro-Computer sind zu teuer und Software-Emu auf einen PC 
ist nur ein schwacher Ersatz.
Warum also nicht - genau dasselbe hast Du in etlichen anderen Bereichen 
doch auch?

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

W.S. schrieb:
> Ich kann Assembler, du auch, einige andere hier auch (noch) - aber ich
> lese gerade hier in diesem Forum immer wieder geradezu militante
> Beiträge, die jegliche Assembler-Kenntnisse als komplett obsolet abtun.
Tja, das ist leider so und Du darfst davon ausgehen, daß Beiträge dieser 
Art noch zunehmen werden.

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

W.S. schrieb:
> Oh doch. Es geht um das Können und das Selbstverständnis. Da ist ein
> großer Unteschied zwischen dem Elektroniker, der etwas machen will oder
> soll und deshalb Fachkenntnisse braucht - und dem Verbraucher, der
> lediglich auf ergonomische benutzbarkeit achtet, egal ob da drinnen nun
> ein Mikrocontroller oder ein grünes Marsmännchen werkelt.
learning by doing - vielleicht animiert es ja den ein oder anderen 
Anwender oder Verbraucher sich näher damit zu beschäftigen.
Nur von vornherein den Anspruch zu erheben, daß sich nur die technische 
Elite damit beschäftigen darf, ist der falsche Weg.

>> Wenn ich schon ein Projekt ins Netz stelle, dann sollte das für jeden
>> Interessierten nachbaubar sein. Dieses Ziel ist schon mal verfehlt.
>
> Das kommt sowohl auf die Güte der hoffentlich vorhandenen Dokumentation
> als auch auf die Ausführung des Projektes an. Wäre im Einzelfall zu
> prüfen - mal abgesehen davon, daß nicht jeder elektronik-affin ist.
Richtig, und die Anwender- bzw. Verbraucherseite wird von den Machern 
der Projekte völlig vergessen.
Somit sind viele gute Projekte leider völlig obsolet.

> Hier
> lese ich viel zu häufig sowas: "ich will was ganz dolles bauen aber ich
> verstehe von Elektronik garnichts..."
ist doch okay - aber dann muß man dem Verbraucher auch sagen können:
hier, Link xy kannst Du fertig kaufen oder Link yz kannst Du basteln, 
wenn Du löten kannst.
Und beides kann man eben nicht sagen, weil die Links nicht existieren 
bzw. die ganze Doku saumäßig schlecht ist.
Sowas ist dann leider sehr schade und Dialog mit dem Projektbetreiber 
hat leider auch wenig Sinn, weil der u.a. Deine Einstellung hat und auf 
einem anderen Level schwebt.

>> Für Programmierung, Hardwaredesign, Betriebssysteme, etc. kann man auch
>> Bücher kaufen
>
> Ja, in diesem Falle den Lampe-Jorke-Wengel, aber bloß kaufen nützt
> nichts, man muß es auch selbst praktizieren, damit man es tatsächlich
> lernt.
Reparierst Du Dein Auto selbst, wenn es z.B. einen Getriebeschaden hat?
Baust Du Dein Haus eigenhändig?
Muß man das könnnen? ... in einer arbeitsteiligen Gesellschaft nicht 
mehr!
Du kannst Dir auch Wissen aneignen ohne es zu praktizieren - ist 
manchmal auch sinnvoller, oder findest Du jeden Job/Tätigkeit toll?
So manchen Job bzw. Tätigkeit möchte ich nicht unbedingt machen.

: Bearbeitet durch User
von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ich möchte nicht unhöflich sein, dennoch darum bitten Eure Diskussion 
anderweitig fortzuführen. Etwa 1900 Beiträge lang, war die Diskussion 
auf „CP/M auf AVR“ ausgerichtet. Ich würde mich freuen, wenn das 
zukünftig auch so bleibt.
Danke!

von W.S. (Gast)


Lesenswert?

Robert K. schrieb:
> In der Beziehung ist Deine Haltung leider falsch

Hä?
Hab ich etwa Franks Projekt geschmäht? Nein, natürlich nicht. Aber ein 
ZX-Spectrum-Emulator per Cortex-M ist rein sachlich etwas ganz anderes 
als ein CP/M auf ATmega88. Der Spectrum reizt zum Nachbauen eben WEGEN 
der Spiele, der ATmega nicht. Unterscheide mal die unterschiedlichen 
Kisten.

Robert K. schrieb:
> Die Original-Retro-Computer sind zu teuer und Software-Emu auf einen PC
> ist nur ein schwacher Ersatz.

Rede nur weiter, dann reizt mich das so, daß ich mal versuche, so einen 
Universal-Retro-Z80-Computer tatsächlich zu konzipieren - mit einem 
richtigen Z80. Sowas wäre durchaus mal ein reizvolles Projekt. Beides 
einzeln hab ich schon, kenne ich schon, hab ich schon selber entwickelt 
und eines davon war vor Urzeiten auch mal in ner Gazette abgedruckt.

Robert K. schrieb:
> Nur von vornherein den Anspruch zu erheben, daß sich nur die technische
> Elite damit beschäftigen darf, ist der falsche Weg.

Wir alle haben mal angefangen, barfuß das Laufen zu lernen. Gilt auch 
hier und bedarf der eigenen Bemühungen, es zu verstehen. Wenn man es 
dann kann, dann darf man sich auch "technische Elite" nennen - wenn man 
derart eitel ist.

Aber hier ging es vorrangig um die Frage, wozu - also zu welchem 
letztendlichen Zwecke - die hier besprochene Emulation eines Z80 und 
CP/M auf einem Atmel-IC gedacht ist. Und die Antwort war: weil es geht 
und nur 2 Schaltkreise braucht. Das ist mir ein bissel arg dünn. Dinge 
zu tun, nur weil es möglich ist, läßt mich an die Atombombe denken. Ich 
halte das für eine falsche, weil zu unbedachte Sinneshaltung.

W.S.

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

Joe G. schrieb:
> Ich möchte nicht unhöflich sein, dennoch darum bitten Eure Diskussion
> anderweitig fortzuführen. Etwa 1900 Beiträge lang, war die Diskussion
> auf „CP/M auf AVR“ ausgerichtet. Ich würde mich freuen, wenn das
> zukünftig auch so bleibt.
> Danke!
kommt von den anderen denn noch was Neues? Kann ich nicht erkennen.
Richtig, CP/M auf AVR ... auch für CP/M gibt es Spiele.
Fakt ist auch, daß das Projekt wohl als Einbau in den Gameboy gedacht 
war, wenn man den Link von Peter weiter verfolgt wo das gleich auf der 
Eingangseite abgebildet wird ... nur da hört es dann auch schon auf - 
insofern bleiben leider Fragen offen.

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

W.S. schrieb:
> Hä?
> Hab ich etwa Franks Projekt geschmäht? Nein, natürlich nicht. Aber ein
> ZX-Spectrum-Emulator per Cortex-M ist rein sachlich etwas ganz anderes
> als ein CP/M auf ATmega88. Der Spectrum reizt zum Nachbauen eben WEGEN
> der Spiele, der ATmega nicht. Unterscheide mal die unterschiedlichen
> Kisten.
Es geht ja nicht allein um Spiele - das ist nur eine Anwendung; bei CP/M 
weniger als bei Spectrum, aber auch das geht.
Fakt ist leider, daß ein Spectrum Nachbau etwas aufwendiger wird als 
CP/M auf Atmega mit ein paar Bauteilen - das geht wesentlich schneller.
Wer jetzt Spielefreak ist und mehr braucht, kann ja anfangen selbst 
welche nach zu programmieren auf CP/M ... und damit lernt er dann auch 
was Unnötiges.

> Rede nur weiter, dann reizt mich das so, daß ich mal versuche, so einen
> Universal-Retro-Z80-Computer tatsächlich zu konzipieren - mit einem
> richtigen Z80.
gibt es doch schon alles, nur meistens viel zu teuer.

> Sowas wäre durchaus mal ein reizvolles Projekt. Beides
> einzeln hab ich schon, kenne ich schon, hab ich schon selber entwickelt
> und eines davon war vor Urzeiten auch mal in ner Gazette abgedruckt.
Hast Du noch den Schaltplan?

> Wir alle haben mal angefangen, barfuß das Laufen zu lernen. Gilt auch
> hier und bedarf der eigenen Bemühungen, es zu verstehen. Wenn man es
> dann kann, dann darf man sich auch "technische Elite" nennen - wenn man
> derart eitel ist.
take it easy - das Hauptproblem ist, daß bei vielen das Interesse auch 
abgewürgt wird wegen Kommerz, wegen zuviel Aufwand, usw.

> Aber hier ging es vorrangig um die Frage, wozu - also zu welchem
> letztendlichen Zwecke - die hier besprochene Emulation eines Z80 und
> CP/M auf einem Atmel-IC gedacht ist. Und die Antwort war: weil es geht
> und nur 2 Schaltkreise braucht. Das ist mir ein bissel arg dünn.
und genau das ist die richtige Antwort - sehr wenig Aufwand, geht sogar 
auf Lochraster, kein Platinen ätzen & sonstiger Kommerz notwendig.

> Dinge
> zu tun, nur weil es möglich ist, läßt mich an die Atombombe denken. Ich
> halte das für eine falsche, weil zu unbedachte Sinneshaltung.
das hast Du nun wirklich überall - z.B. 80% aller Sportarten sind 
unsinnig und passiver Sport sogar schädlich wegen Bewegungsmangel ... es 
wird aber gemacht aus Spaß & Amüsement.

von Rapper B (Gast)


Lesenswert?

https://www.youtube.com/watch?v=F2SvMctec9M
So ein richtiges Z80 Projekt hat wenigstens Potential :-)

von Guido D. (gdampf)


Lesenswert?

Nach dieser doch eher weltanschaulichen Diskussion, noch einmal was 
recht bodenständiges:
In allen Schaltungsentwürfen zu AVRCPM ist immer ein ISCP-Anschluss 
vorhanden. Gleichzeitig ist der Reset über 100nF gegen Masse gepuffert.
Bei meinen Billig-China-Adaptern vom Typ USBASP hat das zur Folge, dass 
der Reset noch nicht wieder zurückgesetzt wurde, da fängt AVRDude schon 
an zu programmieren, was natürlich fehl schlägt.
Die Dokumentation von AVR sagt nur aus, dass der Kondensator Sinn macht, 
wenn es bzgl. Störungen recht rauh zugeht, aber bei DEBUGwire nicht 
Verwendung finden darf. Ich deutete das als Hinweis auf besagtes Problem 
mit meinen USBASPs und habe ihn probehalber entfernt - und schon spielt 
AVRDude mit.
Um beidem gerecht zu werden, habe ich den Kondensator nun gejumpert.
Ohne eine neue weltanschauliche Diskussion lostreten zu wollen bzgl. 
Direktkauf in China und ob Firma R*, die hier gerne referenziert wird, 
keine Apotheke ist und ob die Finanzierung deutscher Zwischenhändler 
wirklich eine Sache von Hobbyisten sein sollte, meine Frage an die 
Gemeinde:
Welche ISP-Programmer verwenden denn die Väter des Projektes - oder 
arbeitet Ihr nur noch mit Bootloadern?

Und nun doch noch ein paar Sätze zu vorgenannter Diskussion:
Es gefällt, was den Beteiligten Spaß macht. Die Sinnfrage stellt sich 
vlt. in der Kirche, beim Umweltschutz oder bei kommerziellen Projekten. 
Wer keinen Sinn in einem Vorschlag sieht, braucht ihn doch nicht 
anzunehmen. Deshalb muss man den anderen den Spaß doch nicht vermiesen, 
oder?

Gruß
Guido

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Guido D. schrieb:
> Bei meinen Billig-China-Adaptern vom Typ USBASP hat das zur Folge, dass
> der Reset noch nicht wieder zurückgesetzt wurde, da fängt AVRDude schon
> an zu programmieren, was natürlich fehl schlägt.

Das hat als Aussage keinen rechten Sinn: die ISP-Programmierung erfolgt 
während eines aktiven Resets.

Einzige Erklärung wäre, dass der Treiber in deinem Billigadapter zu 
schwachbrüstig ist und den C nicht rechtzeitig genug entladen hat, bevor 
die Programmierung startet. Aber eigentlich wird die 
Initialisierungssequenz einige Male wiederholt. Insofern würde ich ein 
anderes Problem vermuten.

von W.S. (Gast)


Lesenswert?

Robert K. schrieb:
> Hast Du noch den Schaltplan?

Ja, irgendwo tief in der Bastelkiste schmort auch noch die ganze 
Zeitschrift. Aber das war alles mit BE der 80er Jahre gemacht: TTL, 2K 
RAM usw. Ein heutiger Ansatz sähe ganz anders aus.

W.S.

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

W.S. schrieb:
> Ja, irgendwo tief in der Bastelkiste schmort auch noch die ganze
> Zeitschrift. Aber das war alles mit BE der 80er Jahre gemacht: TTL, 2K
> RAM usw. Ein heutiger Ansatz sähe ganz anders aus.
>
> W.S.

Nicht schlecht ... ist schon klar, heute sind die Möglichkeiten besser.
Das Projekt, das Peter gefunden hat, ist ja nicht schlecht - nur leider 
geht vieles unter und das ist wirklich schade gerade wegen des minimalen 
Bauteil-Aufwands.
Na ja, es gibt noch andere Projekte mit AVR - die sind etwas aufwändiger 
und dafür dann besser durchdacht.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Guido D. schrieb:
> Welche ISP-Programmer verwenden denn die Väter des Projektes
einen AVR MKII

von Marcel A. (dl1ekm)


Lesenswert?

Hallo,
ich habe mir jetzt in den Sommerferien den Aeternum vorgenommen (Platine 
V1.0, Doku V1.2 aus dem Repo). Ein paar Kleinigkeiten neben den 
bekannten Errata sind mir noch aufgefallen (R7 wird nirgends 
beschrieben, die Fixes von V1.3 sind noch nicht in den Layouts, einige 
Bilder für den Bestückungsplatz fehlen). Aber bisher sieht es gut aus 
(VT100 fehlt noch).

Hat sich jemand schon die Mühe gemacht, ein Gehäuse per 3D-Druck zu 
entwerfen?

Besten Gruß
Marcel

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Super, wenn das Projekt noch Freunde findet :-)
R7 kann unbestückt bleiben und war nur zur Lastanpassung vorgesehen.
Ich hatte die Version 1.3 selber nicht mehr aufgebaut, bin jedoch an 
Aufbauberichten interessiert um sie einzupflegen.

Ein Gehäuse hatte ich nur in Alu entworfen und realisiert. Da die 
CAD-Daten vorliegen, kann es sicherlich auch in 3D-Druck überführt 
werden.

Gruß Jörg

von Marcel A. (dl1ekm)


Lesenswert?

Hallo Jörg,
na klar - ich bin in den letzten Monaten (Jahren?) allerdings wie 
Hans-Werner etwas mehr beim NKC-Projekt (NDR Klein Computer) unterwegs 
gewesen - da gibts immer wieder neue Platinen - zuletzt auch 8080 und 
6502-CPU :-)

Gehäuse - muss mir mal die DXF-Dateien ansehen :-)

Da scheint aber die Datei für "vorne" zu fehlen. Würden die Frontblenden 
auch auf ein Standardgehäuse passen?

Gruß
Marcel

von Marcel A. (dl1ekm)


Lesenswert?

Die Seitenteile scheinen auch zu fehlen, ansonsten klappt ein Neuexport 
aus dem FTD in STEP und dann Konvertierung zu STL :-)

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich habe mal die Daten für die Front- und Rückplatte angehangen. Die 
Seitenteile sind aus Alu-Strangprofil wo die Boden- und Deckplatte 
eingeschoben werden. Tatsächlich hatte ich die Gehäusemaße genau nach 
der Leiterplattengröße ausgelegt, ein Standardgehäuse wird wohl nicht 
passen :-(

von dl1ekm (Gast)


Lesenswert?

Hi,
so, läuft alles prima! Jetzt fehlt nur noch der VT100 Teil.

Ein paar Fragen (ist alles schon wieder so lange her...)
- kriegt man auf der RS233 auch mehr als 9k6 hin? FÜr die Stamp hatte 
Leo doch mal den STAT-Befehl um "schnelle" Varianten erweitert?
- Doku zu ZSDOS habe ich gefunden - aber gibts auch noch was spezielles 
für den Aeternum? So als Nachschlagewerk wie bei der Z180 Stamp?

Gruß
Marcel

von dl1ekm (Gast)


Lesenswert?

z.B. auch - wie programmiert man die "Soundausgabe"? Oder Hinweise zu 
dem Thema BDOS-Aufruf in Sample bei Turbo Pascal usw.?

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

dl1ekm schrieb:
> - kriegt man auf der RS233 auch mehr als 9k6 hin?

Ja, bekommt man. Im Anhang mal einige Tools von Martin, Leo C. und mir 
um die RS232, RTC und VT100 zu bedienen. Ein Turbo Pascal Demo für die 
BDOS Aufrufe muß ich mal suchen, ist schon wieder etwas her, dass ich 
sowas programmiert habe. Die Soundausgabe auf dem Propeller ist noch 
nicht implementiert. Ich habe zwar ein Spin-Code, der den AY3891X / 
YM2149F Chip emuliert und auf das Audiointerface ausgibt, doch dazu 
müßte noch ein Befehlssatz im VT100 Protokoll implementiert werden.

: Bearbeitet durch User
von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier der Spin-Code für ein Sounddemo sowie ein ganz kurzes Demo für BDOS 
und BIOS Aufrufe.

von Marcel A. (dl1ekm)


Lesenswert?

So - auch VT100 geht! Tolles Projekt!
Gerade in der Anbindung von "echter" Hardware sehe ich deutliche 
Vorteile gegenüber anderen Emulationen z.B. auf dem ESP32 - auch wenn 
die HW langsam in die Jahre gekommen ist :-)

Mir scheint es, dass das Projekt so bei 90% steht? Die Implementierung 
des Soundchips auf dem Propeller finde ich toll - "müsste man mal fertig 
machen" :-). Auch denke ich, dass eine erweitere Doku ähnlich dem 
STAMP-Projekt das Potential der Lösung deutlich stärker zeigen würde. 
Aber vielleicht kriegen wir das ja als Community noch gewuppt.

Zum Thema RS232 Speed: Ich schau mir die samples mal an. Meine Idee war 
nur, daran direkt mein VT420 Terminal anzuschließen, und da wären 115200 
besser als 9600 :-) Bei dem CPM für die Z180-Stamp hatte Leo dazu ich 
glaube den STAT Befehl verwendet und einige langsame Baudraten dann auf 
der AVR-Seite mit Highspeed versorgt.

Mein kleiner Beitrag: Im Rahmen des Aufbaus sind mir in der Anleitung 
noch folgende Unklarheiten in der Doku aufgefallen:
- Die Jumper für MODE 2 (6er) sind spiegelverkehrt dargestellt - sowohl 
in der Anleitung als auch im Anhang. Alle anderen Darstellungen sind 
dagegen korrekt.
- Propeller: Es wäre gut, wenn man ERST die Bauteile für die Reset-Logik 
aufbaut und DANN erst den Propeller / Speaker. Denn so konnte ich den 
SMD BC817 kaum noch einlöten.
- Ein Hinweis zu R7 (optional) wäre gut
- Seite 15: Fehler bei den Widerständen. R16+R17 sind 150 Ohm, nicht R18 
und R17
- Ein Tipp zur Ausrichtung des I2C Pegelwandler-IC wäre schön, da nichts 
auf der Platine erkennbar ist
- Die Bestückung von C20 ist nicht in der Anleitung
- Die Bestückung von C21 fehlt
- JP1 wird nicht erwähnt

Besten Dank für das Projekt!
Marcel

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Vielen Dank für die zahlreichen Anmerkungen! Ich werde sie nach meinen 
Urlaub einpflegen.
Da die Änderung der Baudrate bei CP/M 2.2 nicht so elegant wie bei CP/M 
3.0 gelöst ist, außerdem die Kommunikation eigentlich über I2C to 
seriell läuft, gibt es ja das kleine Tool, welches ich beigefügt habe. 
Wie schnell der I2C/Seriell Chip ist, und ob er 115K kann, mußt du mal 
dem Datenblatt entnehmen.
Ja, eine erweiterte Doku ist schon wünschenswert – vielleicht findet 
sich ja noch ein Mitstreiter.

von Thomas N. (tonevi)


Angehängte Dateien:

Lesenswert?

hat schon mal jemand versucht, das AVR CP/M mit einem solchen MicroSD 
Cardreader zu betreiben? Dieser ist ja mit Pegelwandlern ausgestattet, 
so dass die ganze Schaltung mit 5V gespeist werden kann. Hierzu habe ich 
eine vorhandene Micro SDHC Karte mit FAT16 formatiert und die 
Imagedateien darauf kopiert. Dann habe ich diese MicroSD Karte zunächst 
in einen MMC/MicroSD Adapter gesteckt und mit dem vorhandenen CP/M Stick 
(Hardware Variante 3) gebootet, was problemlos funktioniert hat.

Wenn ich nun aber den Cardreader statt des MMC Slots am SPI des 
ATmega328P bei Vcc=5V betreibe, lande ich nach dem RAM Test in einer 
Endlosschleife mit Bootversuchen von der SDHC Karte. Hat jemand eine 
Idee woran das liegen könnte?

Beitrag #7023546 wurde vom Autor gelöscht.
von Guido D. (gdampf)


Angehängte Dateien:

Lesenswert?

Hallo Thomas,
klar - und das funkt ganz hervorragend.
Auf dem Foto ist eine 5V-Schaltung aufgebaut. Mit Uhr und GPIO.
Ich weiß nicht, welche RAMs Du verwendest, aber meine KM44C256CP-7 
kommen gut mit den 5 Volt klar. Vieleicht zieht aber irgend etwas zu 
viel Strom?

Gruß
Guido

von Thomas N. (tonevi)


Angehängte Dateien:

Lesenswert?

Vermutlich hast Du recht. Ich hatte zur Bestückung des ursprünglichen 
CP/M Sticks Siemens RAMs bestellt, die bei 3,3V nicht funktionierten. Um 
sie trotzdem zu nutzen, habe ich ein ganz minimalistisches Redesign zum 
Betrieb an 5V erstellt mit den beschriebenen Bootproblemen an dem 
"Arduino" MicroSD Adapter. Um das Problem zu lösen habe ich die MicroSD 
Karte u. a. über einfache Spannungsteiler zur 5V zu 3,3V Pegelanpassung 
der SPI Signale angeschlossen. Das hat perfekt funktioniert, so dass ich 
auf die Schnelle einen eigenen Adapter gebaut habe, der sogar noch etwas 
kleiner als das Kaufteil ist.

- Thomas

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.