mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CP/M auf ATmega88


Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Sieg schrieb:
> Evtl. ist das von Nutzen..?
>
> Beitrag "Software UART mit FIFO"

ELIZA würde wahrscheinlich antworten:
"CAN YOU ELABORATE ON THAT?"

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Horst S. (h3aau)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter S. (petersieg)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Horst S. (h3aau)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter S. (petersieg)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Peter S. (petersieg)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch der Rest, den ich soweit gefüllt habe..

Peter

Autor: Horst S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter S. (petersieg)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Im Anhang sind meine neuesten Spielereien. Es sind zwei neue 
Interpretervarianten. Hier mal eine Tabelle mit den Unterschieden:
 Interpreter   |             [.cseg]            |avrdude|Laufzeit|"Speed"
               |   End      Code   Data   Used  |       |   [s]  | [KHz]   
---------------+----------+------+------+-------+-------+--------+--------
z80int           0x001900   5052   1178   6230     6400    1.924   1499
8080int          0x001b00   4848   1690   6538     6912    1.733   1644
8080int-t3       0x001b00   4936   1434   6370     6912    1.733   1644
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.;)
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.)

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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
do_fetch_xxx  --> fetch_xxx
do_op_xxx     --> op_xxx
do_store_xxx  --> store_xxx

Das "do_" wird (nur) bei Bedarf über die Makros wieder zugefügt.

Autor: Horst S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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:
               |             [.cseg]            |avrdude|Laufzeit|"Speed"
               |   End      Code   Data   Used  |       |   [s]  | [KHz]   
---------------+----------+------+------+-------+-------+--------+--------
-jmp             0x001d00   5240   1434   6674     7424    1.366   2111
 "  (jp to main) 0x001b00   5000   1434   6434     6912    1.449   1990
 " " (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. ;-)

Autor: Horst S. (h3aau)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter S. (petersieg)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter S. (petersieg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und läuft (88 - 30MHz - 4-bit):
CPM on an AVR, v1.0

Testing RAM: fill...wait...reread...

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!
ipl

62k cp/m vers 2.2

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
A>t b



Timer running. Elapsed: 006.212s.
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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Sieg schrieb:
> A>t b
>
>
>
> Timer running. Elapsed: 006.212s.
> A>
>
> Down to 6,212s ;-)

Kann ich ja auch mal:
A>t b

Timer running. Elapsed: 003.988s.
A>

Autor: Peter S. (petersieg)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter S. (petersieg)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Sieg schrieb:
> Jup. Wie viele Zyklen hast du denn gezählt?
023E 3E 01      MVI  A,01
0240 D3 40      OUT  40
0242 0E 0A      MVI  C,0A   ;7                              7\
0244 06 00      MVI  B,00   ;7                   7\           |
0246 3E 00      MVI  A,00   ;7         7\          |          |
0248 3D         DCR  A      ;4  \        |         |          |
0249 C2 0248    JNZ  0248   ;10 / 14*256 |3605*256 |922901*10 |
024C 05         DCR  B      ;4         4 |         |          |
024D C2 0246    JNZ  0246   ;10       10/          |          |
0250 0D         DCR  C      ;4                   4 |          |
0251 C2 0244    JNZ  0244   ;10                 10/           |
0254 3E 0F      MVI  A,0F   ;7                              7 |
0256 D3 40      OUT  40     ;11                            11/
0258 C9         RET         ;                 Gesamtzahl Takte: 9229035

Ich hoffe, daß ich mich nicht verzählt habe.

Autor: Peter S. (petersieg)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Soo.. mußte mir ersteinmal ein vernünftiges VT100 Terminalprogramm für 
Vista
laden (TeraTerm) ;-)

Prima! Macht Spaß mit Ladder..

Peter

Autor: Peter S. (petersieg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm.. gerade mal wieder versucht für 168 zu übersetzen (t3-jmp):
C:\cpmtools\avr3\avrcpm.asm(59): Including file 'C:\cpmtools\avr3\remainders.asm'
C:\cpmtools\avr3\avrcpm.asm(63): Including file 'C:\cpmtools\avr3\8080int-t3-jmp.asm'
C:\cpmtools\avr3\dram-4bit.inc(88): error: Relative branch out of reach
C:\cpmtools\avr3\8080int-t3-jmp.asm(1374): info: macro 'mem_read_d' called here
C:\cpmtools\avr3\avrcpm.asm(63): info: 'C:\cpmtools\avr3\8080int-t3-jmp.asm' included from here
C:\cpmtools\avr3\dram-4bit.inc(88): error: Relative branch out of reach
C:\cpmtools\avr3\8080int-t3-jmp.asm(1376): info: macro 'mem_read_d' called here
C:\cpmtools\avr3\avrcpm.asm(63): info: 'C:\cpmtools\avr3\8080int-t3-jmp.asm' included from here
C:\cpmtools\avr3\avrcpm.asm(73): No EEPROM data, deleting C:\cpmtools\avr3\avrcpm.eep
Assembly failed, 2 errors, 0 warnings


Peter

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter S. (petersieg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jup:
CPM on an AVR, v1.0
Testing RAM: fill...wait...reread...
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!
ipl

62k cp/m vers 2.2

A>t b

Timer running. Elapsed: 005.182s.
A>

und schon wieder schneller geworden.. ;-)

Danke, Peter

Autor: Horst S. (h3aau)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Z. (flexopete)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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:
diskdef avrcpm
  seclen 128
  tracks 77
  sectrk 26
  blocksize 1024
  maxdir 64
  skew 1
  boottrk 2
  os p2dos
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.

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Z. (flexopete)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Versuche es mal mit dieser Datei.
Joe

Autor: Peter Z. (flexopete)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter S. (petersieg)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Z. (flexopete)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter S. (petersieg)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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/

Autor: Peter S. (petersieg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Leo C. Super! Probiere ich am WE direkt mal aus..

Danke! Peter

Autor: Peter S. (petersieg)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Jup. Pacman in aktion ;-)

Peter

Autor: Peter Z. (flexopete)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

welchen Assembler ist sinnvoll, um die AVR asm Dateien
unter Windows zu übersetzen?

Gruß
Peter

Autor: Ronny M. (hobby-coder)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo ihr,

ist evtl. noch ein bausatz zu haben? wenn ja, was kostet er?

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: h3aau (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter S. (petersieg)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ronny M. (hobby-coder)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter Sieg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ronny Minow schrieb:
> wo finde ich den aktuellen schaltplan?

Hier ist der aktuelle Schaltplan der 8 Bit Version.

Autor: Ronny M. (hobby-coder)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo ihr,

ein großes danke an euch :) ich werde mir mal die 4bit version auf 
lochraster aufbauen.

Autor: Peter S. (petersieg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ronny Minow schrieb:
> ich werde mir mal die 4bit version auf
> lochraster aufbauen.

Na dann mal schon ein herzliches Willkommen im Club ;-)

Peter

Autor: Peter Z. (flexopete)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hans- w. S. (hschuetz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Peter S. (petersieg)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: h3aau (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Z. (flexopete)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Z. (flexopete)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Z. (flexopete)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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. ;-)

Autor: Peter Z. (flexopete)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Z. (flexopete)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter Z. (flexopete)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit "keine Verbindung" meine ich keinen Kurzschluss
zwischen A8,A9,A10 und D0 - D3.

Peter

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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 ?
CPM on an AVR, v1.0
Testing RAM: fill...wait...reread...
Initing mmc...
mmcInit SPI_CLK_SLOW
mmcCMD: 00 00000000 .. 95 CMDRes: 01
mmcCMD: 08 000001AA .. 87 CMDRes: 01
mmcCMD: 37 00000000 .. 01 CMDRes: 01 mmcCMD: 29 40000000 .. 01 CMDRes: 00
mmcCMD: 3A 00000000 .. 01 CMDRes: 00
 CT: 04 InitRes: 00 SPI_DISABLE
mmcRdSect SPI_CLK_FAST
mmcCMD: 11 00000000 .. 01 CMDRes: 00 SPI_DISABLE RdSectRes: 01 No bootable CP/M
disk found! Please change MMC/SD-Card.

Grüße
Frank

Autor: Peter Z. (flexopete)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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:
  .equ  READ_FUNC  = 7
  .equ  WRITE_FUNC = 6
  .equ  BOOT_FUNC  = 5
  .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.

Autor: Peter Z. (flexopete)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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.
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 <01  CMDRes: 01 <00 <00 <01 <AA

mmcCMD: 37 00000000 <FF <FF <FF >77 .. 01>01 <FF <01  CMDRes: 01 mmcCMD: 29 4000
0000 <FF <FF <FF >69 .. 01>01 <FF <00  CMDRes: 00
mmcCMD: 3A 00000000 <FF <FF <FF >7A .. 01>01 <FF <00  CMDRes: 00 <80 <FF <80 <00
 <FF
 CT: 04 InitRes: 00 SPI_DISABLE
mmcRdSect SPI_CLK_FAST
mmcCMD: 11 00000000 <FF <FF <FF >51 .. 01>01 <FF <00  CMDRes: 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 <FF <FF SPI_DISABLE RdSectRes: 01 No bootable CP/M disk found! Please c
hange MMC/SD-Card.

PS, die Karte ist noch nicht hin, kann sie unter WinXP immer noch lesen 
und beschreiben.

Grüße
Frank

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Z. (flexopete)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ronny M. (hobby-coder)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hans- w. S. (hschuetz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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"

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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:
mmcCMD: 11 35A56600 .. 01 CMDRes: 00
Ok, CPU is live!

 ZHPNC  A =DE BC =0000 DE =0000 HL =0000 SP =FFEF PC =2E32       CB CB CB Invali
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.

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit der letzten hier geposteten Version cmpsys.bin von Leo bekomme ich 
die folgende Fehlermeldung:
mmcCMD: 11 35A56600 .. 01 CMDRes: 00
Ok, CPU is live!

 ZHPNC  A =DE BC =0000 DE =0000 HL =0000 SP =FFEF PC =2000       30 0D 1A Invali
d opcode!

Scheint noch net alles kapuut zu sein. Ist alles nur recht tricky.
Frank

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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:
>
> mmcCMD: 11 35A56600 .. 01 CMDRes: 00
> Ok, CPU is live!
> 
>  ZHPNC  A =DE BC =0000 DE =0000 HL =0000 SP =FFEF PC =2E32       CB CB
> 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.

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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:
# fdisk -cul /dev/xxx

Oder ein Dump des ersten Sektors:
# dd if=/dev/xxx of=part-dump.bin bs=512 count=1

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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.
CPM on an AVR, v1.0
Testing RAM: fill...wait...reread...
Initing mmc...
CP/M partition at: 1757875, size: 9765KB.
CP/M partition at: 1777406, size: 9765KB.
CP/M partition at: 1796937, size: 73464KB.
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 : 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
A>

Vielen Dank für eure Hilfe.
Euer Frank

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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. :-)

Autor: Peter S. (petersieg)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hans- w. S. (hschuetz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Detlev T. (detlevt)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ronny M. (hobby-coder)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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"

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ronny M. (hobby-coder)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Egmont (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: hschuetz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter S. (petersieg)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hans- w. S. (hschuetz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Egmont (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: hschuetz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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.
Initing mmc...
fat16 part found
fat16 scanning
free entrys in ptable ?
read fat bootblock.
fat16 bootblock check
Bytes per Sector 0200
Sectors per Cluster 20
Reserved Sectors__: 0001
Sectors per FAT__: 00D7
Ammount of FAT copies: 02
Max. entrys in Rootdir.: 0200
Begin of Volume at: 0000003F
Begin of FAT at___: 00000040
Begin of DIR at___: 000001EE

CP/M partition at: 1757875, size: 9728KB.
CP/M partition at: 1777406, size: 9728KB.
CP/M partition at: 1796937, size: 73344KB.
Partinit done.
Ok, CPU is live!

ipl
62k cp/m vers 2.2

A>

Grüße
Frank

Autor: Hans- w. S. (hschuetz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
hat sich schon jemand mit dem kleineren Teil der Platine befasst??
Ja das VGA Terminal...
Gruß
Hans- Werner

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Z. (flexopete)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

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

Autor: Peter S. (petersieg)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Egmont (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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"

Autor: Hans- w. S. (hschuetz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: hschuetz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Egmont (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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
ZXCC is a two-purpose CP/M 2/3 emulator allowing:
 * Hi-Tech C for CP/M to be used as a cross-compiler under Unix.
 * 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.

Autor: Peter Sieg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Sieg (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
#if DRAM_8BIT  /* Implies software uart */

;Port D
.equ RAM_D0  = 0
.equ RAM_D1  = 1
.equ RAM_D2  = 2
.equ RAM_D3  = 3
.equ RAM_D4  = 4
.equ RAM_D5  = 5
.equ RAM_D6  = 6
.equ RAM_D7  = 7
.equ RAM_A0  = 0
.equ RAM_A1  = 1
.equ RAM_A2  = 2
.equ RAM_A3  = 3
.equ RAM_A4  = 4
.equ RAM_A5  = 5
.equ RAM_A6  = 6
.equ RAM_A7  = 7

;Port B
.equ RXD  = 0
.equ TXD  = 1
.equ MMC_CS  = 2
.equ MMC_MOSI  = 3
.equ MMC_MISO  = 4
.equ MMC_SCK  = 5
.equ RAM_A8  = 3
.equ RAM_A9  = 4
.equ RAM_A10  = 5

;Port C
.equ RAM_RAS  = 0
.equ RAM_CAS  = 1
.equ RAM_OE  = 2
.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

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frank Zoll schrieb:

> - Diese Dateien müssen derzeit genau 256KB gross sein.

Nicht mehr lange:
A>^C
drvtbl (F233): F28F F652 F6A0 0000 0000 0000 0000 0000 ...
drvtbl (F233): F28F 0000 0000 0000 0000 0000 0000 0000 ...
Heap init: Start: F652,bytes free: 2478 
Heap get: 016, 
Heap get: 015, 
Heap get: 016, 
Heap get: 031, 
Heap get: 016, 
Heap get: 015, 
Heap get: 048, 
Heap get: 064, 
Heap get: 016, 
Heap get: 015, 
Heap get: 128, 
Heap get: 256, 
drvtbl (F233): F28F F652 F6A0 F72F 0000 0000 0000 0000 ...
A>stat b:

Bytes Remaining On B: 95k

A>stat c:

Bytes Remaining On C: 980k

A>stat d:

Bytes Remaining On D: 7692k

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

    B: 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

    C: Drive Characteristics
 8128: 128 Byte Record Capacity
 1016: Kilobyte Drive  Capacity
  192: 32  Byte Directory Entries
  192: Checked  Directory Entries
  128: Records/ Extent
   16: Records/ Block
   32: Sectors/ Track
    2: Reserved Tracks

    D: Drive Characteristics
65472: 128 Byte Record Capacity
 8184: Kilobyte Drive  Capacity
  512: 32  Byte Directory Entries
  512: Checked  Directory Entries
  256: Records/ Extent
   32: Records/ Block
   32: Sectors/ Track
    2: Reserved Tracks

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. :-)

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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, …"

Autor: Peter Sieg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Sieg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Sieg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Egmont (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Sieg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Egmont: Prima! Ja, die FAT16 Unterstützung mit einfachen Diskimages 
dürfte die Sache für uns Win$ User sicher vereinfachen..

Peter

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So sieht sie aus, die Version 2.0
Joe

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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.
CP/M partition at: 1757875, size: 9765KB.
CP/M partition at: 1777406, size: 9765KB.
CP/M partition at: 1796937, size: 73464KB.
FAT16 File-Image at: 005, size: 250KB.
Partinit done.
Ok, CPU is live!

ipl
62k cp/m vers 2.2

A>d:
D>dir
D: ASM      COM : DDT      COM : DUMP     COM : ED       COM
D: T        COM : TLOOP    COM : LOAD     COM : MBASIC   COM
D: 23       BAS : BAGELS   BAS : CHECKERS BAS : STARTREK BAS
D: TREKINST BAS : MASTRMND BAS : WEEKDAY  BAS : PIP      COM
D: STAT     COM : SUBMIT   COM : XSUB     COM : ZORK1    COM
D: ZORK1    DAT
D>mbasic
39417 Bytes free
BASIC Rev. 4.51
[CP/M Version]
Copyright 1977 (C) by Microsoft
Ok

Grüße
Frank

Autor: Peter Z. (flexopete)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
moin,
auch ich konnte die org VGA-Software nicht
übersetzen.
mfg
Peter

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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:
06 DOS 3.31+ 16-bit FAT (over 32M)
    Partitions, or at least the FAT16 filesystems created on them, are at
most 2 GB for DOS and Windows 95/98 (at most 65536 clusters, each at most
32 KB). Windows NT can create up to 4 GB FAT16 filesystems (using 64 KB
clusters), but these cause problems for DOS and Windows 95/98. Note that
VFAT is 16-bit FAT with long filenames; FAT32 is a different filesystem.

0e WIN95: DOS 16-bit FAT, LBA-mapped
0f WIN95: Extended partition, LBA-mapped
    Windows 95 uses 0e and 0f as the extended-INT13 equivalents of 06 and
05. For the problems this causes, see Possible data loss with LBA and
INT13 extensions. (Especially when going back and forth between MSDOS and
Windows 95, strange things may happen with a type 0e or 0f partition.)
Windows NT does not recognize the four W95 types 0b, 0c, 0e, 0f ( Win95
Partition Types Not Recognized by Windows NT). DRDOS 7.03 does not support
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.

Autor: Egmont (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Egmont (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Egmont schrieb:
> - Fusebit auf "BOOTRST" und 512k stellen
upps
512 Byte oder 256 Worte.. 512kilo ist zu viel Gewicht :-))

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Egmont schrieb:
> wollte mal was über den Bootloader schreiben den ich benutze

Für welche Taktfrequenz ist der Bootloader übersetzt?

Autor: Egmont (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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...

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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:
mmcCMD: 3A 00000000 <FF <FF <FF >7A .. 01>01 <FF <00  CMDRes: 00 <80 <FF <80 <00 <FF 
 CT: 04 InitRes: 00 SPI_DISABLE 
mmcRdSect SPI_CLK_FAST 
mmcCMD: 11 00000000 <FF <FF <FF >51 .. 01>01 <FF <00  CMDRes: 00 <FF <FF <FF <FE <31 <6C <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 <FF <FE <31 <6C <FF SPI_DISABLE RdSectRes: 00 
Ok, CPU is live!
Das war jetzt mit V2.0. Aber mit trunk und jeweils einer SD V1.0 Karte, 
ists genauso.

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles ohne Bootloader.

Autor: Egmont (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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.
; Read first sector of first CP/M partition (ipl)
lds  xl,hostparttbl+1  
lds  xh,hostparttbl+2  
lds  yl,hostparttbl+3  
lds  yh,hostparttbl+4  
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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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/

Autor: Egmont (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Siggi M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Egmont (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Egmont (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leo C. schrieb:
> Mir fällt nichts mehr ein.

Dann bleibt ja nur noch die Hardware. Ich mach mich mal auf die Suche.

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)
// farbe einstellen
// Pin 5-7 wieder auf Ausgang und andere im ursprünglichen Zustand belassen:
DDRD  |= ( 1 << DDD5) | ( 1 << DDD6 )| ( 1 << DDD7 );
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

Autor: Frank Z. (fzoll)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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....

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank Z. (fzoll)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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. :-)

Autor: Egmont (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Sieg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Egmont: Wie wäre es mal mit Artikel lesen: ;-)

Beitrag "CP/M auf ATmega88"
8080 / Z80 Software

    * ipl.asm (läd das CP/M von der 'Diskette' vom track 0 sector 2 bis track 1 sector 26)
    * bios.asm
    * cpm.sys 

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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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:
$ zxcc m80 -=bios.mac
$ 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.

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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

* cpm/Makefile:
  - cpm.bin: Copy (all) 7 sectors from bios.bin.
Logauszug Rev. 63
* cpm/ipl.asm
  - 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...

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Z. (flexopete)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe mal versucht, ein Foto von der Bilschirmausgabe
des VGA-Teils zu machen. Es ist ein 15" TFT.

Gruss
Peter

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Z. (flexopete)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Z. (flexopete)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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:
# SIMH AltairZ80 Harddisk
diskdef simhd
  seclen 128
  tracks 2048
  sectrk 32
  blocksize 4096
  maxdir 1024
  skew 0
  boottrk 6
  os 2.2
end

Autor: Frank Z. (fzoll)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Leo C. (rapid)
Datum:

Bewertung
0 lesenswert
nicht 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:
$ ./makeimage /dev/null myz80.img $(expr 128 \* 65536 + 256)
$ ./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)

Autor: Peter Z. (flexopete)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sebastian B. (sfreak) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank Z. (fzoll)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sebastian B. (sfreak) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 )

Autor: h3aau (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: fzoll (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: h3aau (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: fzoll (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Egmont (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: fzoll (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: fzoll (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups, ich meinte nicht 11 Byte, sondern 11 Bit. :-)

Autor: h3aau (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Egmont (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: fzoll (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: h3aau (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ups, von der falschen Seite aus geschaut..... sorry.

Autor: Frank Z. (fzoll)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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