Hallo,
ich versuche gerade, CP/M auf einer eigenen Hardware zum Laufen zu
bekommen, habe dort aber (noch) keine 64 KB RAM zur Verfügung.
Weiß jemand von Euch, wo man die originale 20K-Version von CPM.SYS (wie
im Alteration Guide beschrieben) herbekommen kann? Eine 32K-Version
würde auch passen, aber im Netz finde ich nur Dateien, die für 48K+
gelinkt wurden. MOVCPM setzt ein laufendes System voraus, was ich noch
nicht habe.
Gruß,
Svenska
Svenska schrieb:> Weiß jemand von Euch, wo man die originale 20K-Version von CPM.SYS (wie> im Alteration Guide beschrieben) herbekommen kann?http://www.cpm.z80.de/binary.html
Dort gibts weiter unten 2 ZIP-Dateien:
CP/M 2.2 BINARY : This is the distribution disk for the Xerox 1800
system.
CP/M 2.2 OEM redistribution disk : image of the original 8" CP/M 2.2 OEM
version in ImageDisk format.
Das Image im IMD-Format kann z.b. mit dem genialen Altair 8800 Simulator
von Peter Schorn entpackt werden:
http://www.schorn.ch/altair.html
Hier der Inlhalt:
1
Directory For Drive K: User 0
2
3
Name Bytes Recs Attributes Name Bytes Recs Attributes
Ich scheine dafür zu dumm zu sein. :-(
Ein CBIOS habe mit dem Alteration Guide als Vorlage erstellt. Das
schiebe ich in den RAM ab Adresse 4A00h (20K-System), das wird auch
korrekt angesprungen. Dieses CBIOS liest die CPM.SYS und schreibt sie ab
Adresse 3400h in den RAM und springt dann dorthin.
Ich gehe grob nach der Anleitung von
http://www.autometer.de/unix4fun/z80pack/doc_cpm2_src.html vor. Mit
"submit kernel-m" baue ich D:MOVCPM zusammen, und mit "D:MOVCPM 20 *"
und "SAVE 34 D:CPM.SYS" erzeuge ich mir das neu gelinkte Speicherabbild
aus CCP und BDOS. Allerdings sind die ersten Bytes dieser Datei "C3 2C
01", also ein Sprung nach 12Ch (wo nichts ist). Wenn ich "submit
kernel-s" aufrufe, kommt das gleiche Ergebnis dabei raus.
Irgendwas mache ich falsch, habe aber keine Ahnung, was. Darum wollte
ich erstmal mit einer bekannt funktionierenden CPM.SYS arbeiten, bevor
ich diese Baustelle auch noch aufmache.
Die IMD-Datei kann ich im Altair-Simulator nicht lesen, da werden nur
ungefähr die Hälfte der Dateien angezeigt, teilweise ohne Dateinamen und
wenn ich sie auf den Host kopiere, steht da Datenmüll drin.
Svenska schrieb:> Irgendwas mache ich falsch, habe aber keine Ahnung, was. Darum wollte> ich erstmal mit einer bekannt funktionierenden CPM.SYS arbeiten, bevor> ich diese Baustelle auch noch aufmache.
Im Anhang 1 ist ein "Original" MOVCPM und eines mit gepatchter
Seriennummer (movcpm1.com). Mit letzterem habe ich mal ein cpm20.sys
(CCP+BDOS) generiert, daß aber möglicherweise wg. nicht
zusammenpassender Seriennummern auch nicht funktioniert. Du kannst es ja
mal ausprobieren.
Ansonsten kannst Du in movcpm den Seriennummerncheck nach der von Dir
geposteten Anleitung patchen.
> Die IMD-Datei kann ich im Altair-Simulator nicht lesen, da werden nur> ungefähr die Hälfte der Dateien angezeigt, teilweise ohne Dateinamen und> wenn ich sie auf den Host kopiere, steht da Datenmüll drin.
Man braucht die neueste Version des Simulators. Auf der Homepage steht:
"The HDSK device also supports .IMD disks. This works best with the
included CP/M 3 distribution."
Daran habe ich mich gehalten und in die cpm3-Scriptdatei folgendes
eingefügt:
Ich bin bei dieser Sache hingegangen, habe mir den Quelltext herunter
geladen (bspw. von hier http://www.cpm.z80.de/source.html ), hab mir die
Startadresse und die BIOS-Jump-Table auf meine Speichergröße angepasst
und den Kram einfach neu assembliert(mit tniASM auf dem PC). Vielleicht
nicht elegant aber funktioniert und gibt viel Flexibilität für
beliebigste Hardwarekonfigurationen.
Grüße
Mark
Hallo,
> Mit letzterem habe ich mal ein cpm20.sys (CCP+BDOS) generiert, daß> aber möglicherweise wg. nicht zusammenpassender Seriennummern auch> nicht funktioniert. Du kannst es ja mal ausprobieren.
Jetzt werden SELTRK, SECTRAN (nanu?), SELSEC und WRITE (nanu?)
aufgerufen, danach wieder WBOOT, weil ich bisher kein Laufwerk
simuliere.
>> Die IMD-Datei kann ich im Altair-Simulator nicht lesen, da werden nur>> ungefähr die Hälfte der Dateien angezeigt, teilweise ohne Dateinamen und>> wenn ich sie auf den Host kopiere, steht da Datenmüll drin.>> set hdsk2 format=SSSD8S
Das war die Magie! Jetzt funktioniert das auch mit der IMD. :-)
Jetzt habe ich jedenfalls erstmal eine Basis, mit der ich das BIOS
weiterentwickeln kann, vielen Dank dafür. Im AVR (Board-Controller) sind
noch etwa 24K frei, da sollen später CBIOS, CPM.SYS und ROM-Disk rein.
Gruß,
Svenska
Die Seriennummern passen wirklich nicht zusammen, d.h. CCP führt bei
RETURN sofort ein HALT aus.
MOVCPM generiert eine 8.5K CPM.COM, die mir aber nur wenig nutzt. Ich
habe jetzt mit "dd" den relevanten Teil rausgeschnitten, um CPM.SYS zu
bekommen, frage mich aber, ob es da noch eine elegantere Möglichkeit
gibt.
Wenn ich die Hex-Datei mit dem BIOS seriell in den Speicher schubse und
anspringe, wird das CP/M von der 24K-ROMDISK geladen und läuft. STAT
gibt mir aber "A: R/W, Space: 7k" aus - kann man das irgendwie als R/O
deklarieren?
Danke für die Hilfe!
Svenska schrieb:> MOVCPM generiert eine 8.5K CPM.COM, die mir aber nur wenig nutzt. Ich> habe jetzt mit "dd" den relevanten Teil rausgeschnitten, um CPM.SYS zu> bekommen, frage mich aber, ob es da noch eine elegantere Möglichkeit> gibt.
Ich dachte, Du wolltest das auf die harte Tour, wie in den "Guten Alten
Zeiten" machen. Die Alternative hat Mark Leyer gestern gepostet.
> Wenn ich die Hex-Datei mit dem BIOS seriell in den Speicher schubse und> anspringe, wird das CP/M von der 24K-ROMDISK geladen und läuft. STAT> gibt mir aber "A: R/W, Space: 7k" aus - kann man das irgendwie als R/O> deklarieren?
Eine Disk schon im BIOS als R/O deklarieren, ist wohl nicht vorgesehen.
Du könntest aber nach jedem (warm)boot die BDOS-Funktion 28 für das
entsprechende Laufwerk aufrufen. Oder gleich das Bit in 'WRTPRT' setzen.
Das ganze ist aber reine Kosmetik, da beim Versuch, auf das Laufwerk zu
schreiben, nur eine dürre Fehlermeldung ausgegeben, und anschließend ein
Warmstart ausgeführt wird. Egal, ob die Disk R/O deklariert wird, oder
das BIOS beim Schreibversuch einen Fehler liefert.
1
FUNCTION 28: WRITE PROTECT DISK
2
The Write Protect Disk function provides temporary write protection for
3
the currently selected disk. Any attempt to write to the disk before the
4
next cold or warm start operation produces the message:
5
BDOS ERR on d:R/O
1
; Function to write protect the current disk.
2
;
3
WRTPRTD:LD HL,WRTPRT ;point to status word.
4
LD C,(HL) ;set (BC) equal to the status.
5
INC HL
6
LD B,(HL)
7
CALL SETBIT ;and set this bit according to current drive.
Hallo,
> Ich dachte, Du wolltest das auf die harte Tour, wie in den "Guten Alten> Zeiten" machen. Die Alternative hat Mark Leyer gestern gepostet.
Die harte Tour war es ja fast. Am Ende hat mein bin2c-Tool die Nullbytes
entfernt und damit das CP/M in der ROMDISK zerstört (das BIOS kommt zur
Laufzeit per Hex-Datei, war also nicht betroffen). Als die ersten
BDOS-Errors kamen, war es dann erledigt.
Die Originalsourcen wollten weder z80asm noch sdasz80 lesen, darum hatte
ich davon Abstand genommen und es am Ende im Emulator zusammengebaut.
MOVCPM will das CP/M in die Systemspuren schreiben, was bei mir aber
nicht geht. Ich dachte, da kann man mit SAVE oder irgendwelchen
Parametern arbeiten.
> Eine Disk schon im BIOS als R/O deklarieren, ist wohl nicht vorgesehen.> Du könntest aber nach jedem (warm)boot die BDOS-Funktion 28 für das> entsprechende Laufwerk aufrufen.
Das klingt gut, werde ich wohl einbauen. SURVEY.COM (aus altairz80)
zeigt allerdings 12 Dateien, 25 KB und 64 MB(!) frei an; STAT.COM sagt
7K frei und DIR gibt mir die korrekten drei Dateien aus. Irgendwas ist
da noch nicht ganz richtig.
Der nächste Schritt ist dann erstmal, dem BIOS mehrere Laufwerke
beizubringen, die Systemregister zu implementieren (dynamische
Taktfrequenz, evtl. später Poweroff und IRQs für die UART) und dann geht
es zurück an die Hardware, MMU+DRAM+Massenspeicher entwerfen. Vielleicht
sollte ich noch erwähnen, dass CP/M ein ganzes Stück älter ist als ich.
Gruß,
Svenska