Forum: Mikrocontroller und Digitale Elektronik CPM.SYS und wenig RAM


von Svenska (Gast)


Lesenswert?

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

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


Lesenswert?

Svenska schrieb:
> MOVCPM setzt ein laufendes System voraus, was ich noch nicht habe.

Auf einem CP/M-Emulator neu linken?

von Leo C. (rapid)


Lesenswert?

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

von Svenska (Gast)


Lesenswert?

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.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

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.

von Mark L. (m2k10) Benutzerseite


Lesenswert?

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

von Svenska (Gast)


Lesenswert?

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

von Svenska (Gast)


Lesenswert?

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!

von Leo C. (rapid)


Lesenswert?

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

von Svenska (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.