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: > MOVCPM setzt ein laufendes System voraus, was ich noch nicht habe. Auf einem CP/M-Emulator neu linken?
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 |
4 | ------------ ------ ------ ------------ ------------ ------ ------ ------------ |
5 | BIOS ASM 12k 96 Dir RW BOOT ASM 3k 21 Dir RW |
6 | BOOT0 HEX 1k 2 Dir RW BOOT1 HEX 1k 2 Dir RW |
7 | CPMGEN SUB 1k 4 Dir RW CPMOVE ASM 9k 69 Dir RW |
8 | CPMOVE HEX 2k 15 Dir RW CPSYS0 HEX 15k 118 Dir RW |
9 | CPSYS1 HEX 15k 118 Dir RW CPXFER ASM 9k 66 Dir RW |
10 | CPXFER COM 2k 10 Dir RW GENHEX COM 1k 6 Dir RW |
11 | GENMOD COM 1k 8 Dir RW SERIAL ASM 15k 117 Dir RW |
12 | SERIAL BAK 15k 116 Dir RW SERIAL COM 2k 12 Dir RW |
13 | SERIAL HEX 5k 34 Dir RW SYSGEN ASM 10k 74 Dir RW |
14 | UNSKEW ASM 4k 28 Dir RW UNSKEW COM 1k 4 Dir RW |
15 | |
16 | Total Bytes = 124k Total Records = 920 Files Found = 20 |
17 | Total 1k Blocks = 124 Used/Max Dir Entries For Drive K: 20/ 64 |
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:
1 | ; prepare CP/M disk K: |
2 | attach hdsk2 CPM22RED.IMD |
3 | ; important to set format with skew |
4 | set hdsk2 format=SSSD8S |
Im Anhang 2 sind die Dateien.
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. |
8 | LD (WRTPRT),HL ;then save. |
9 | LD HL,(DIRSIZE) ;now save directory size limit. |
10 | INC HL ;remember the last one. |
11 | EX DE,HL |
12 | LD HL,(SCRATCH1) ;and store it here. |
13 | LD (HL),E ;put low byte. |
14 | INC HL |
15 | LD (HL),D ;then high byte. |
16 | RET |
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.