Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » CP/A, CP/M und ROM-Disks » Themenansicht

Autor Thread - Seiten: -1-
000
10.08.2016, 15:29 Uhr
volkerp
Default Group and Edit
Avatar von volkerp

Hallo,

kann jemand mit einem ROM-Laufwerk probieren, Dateien zu löschen?
Unter CP/A am Z9001 habe ich das Phänomen, dass ein Löschen von Programmen fehlschlägt (der Rechner hängt sich auf und reagiert nicht mehr), wenn das zu löschende Programm aus dem letzten Directory-Sektor stammt. Alle anderen Programme lassen sich löschen, d.h. natürlich nicht echt löschen, sondern es kommt eine Fehlermeldung.


Quellcode:

C:>DIR
C: PRINT    COM : RAF2X20P COM
C: RDBASMSG TXT : RDBASOVR COM
C: READCASS COM : README   TXT
C: REAS80   COM : REDABAS  COM
C: RESET    COM : RETTER   COM
...
C: ULAD     COM : ULAD     DOC
C: UPUT     COM : USB      COM
C: V24A     COM : XSUB     COM
C: Z80ASM   COM : Z80DIS   COM
C: ZDIR     COM : ZSID     COM
C>era reset.com
Bdos Err On C: Bad Sector (^C=abort, other=ignore)
C>era uput.com
(nix mehr)



Ist das auf anderen Systemen analog?
--
VolkerP

http://hc-ddr.hucki.net
(Z9001, Z1013, LC-80, ...)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
10.08.2016, 17:39 Uhr
wpwsaw
Default Group and Edit


Hallo Volker,

heißt ROM nicht read only memory? Dann gibt es auch keine Schreibzugriffe und man die Datei nicht als gelöscht makieren.

oder habe ich einen Denkfehler?

Gruß
wpw
--
RECORD, CRN1; CRN2; PicoDat; LC80; Poly880; KC85/2,3,4,5 ; KC87; Z1013; BIC; PC1715; K8915; K8924; A7100; A7150; EC1834; und P8000 ab jetzt ohne Tatra813-8x8 aber mit W50LA/Z/A; P3; ES175/2 und Multicar M25 3SK; Barkas B1000 HP
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
10.08.2016, 18:46 Uhr
Mobby5



Es geht Volker wohl eher um den Absturz bzw. der ausbleibenden Fehlermeldung, denn das sollte eigentlich nicht passieren.
--
und ausserdem muss in Zeile 20 der Doppelpunkt durch ein Semikolon ersetzt werden
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
11.08.2016, 08:48 Uhr
volkerp
Default Group and Edit
Avatar von volkerp

genau wie Mobby es sagt: Natürlich ist es sinnlos, auf einer ROM-Disk Daten löschen zu wollen, aber trotzdem sollte CP/A dabei nicht verrecken, wenn es doch versucht wird.
--
VolkerP

http://hc-ddr.hucki.net
(Z9001, Z1013, LC-80, ...)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
11.08.2016, 15:13 Uhr
volkerp
Default Group and Edit
Avatar von volkerp

Aufklärung: Das ist tatsächlich ein Bug im BDOS des CPA:

orig CP/M 2.2:

Quellcode:

DISKWR2:
;A has vrecord, C=2 if new block or new record#
        DEC    C
        DEC    C
        JP    NZ,NOUPDATE
...



und CP/A-BDOS 20.11.88:

Quellcode:

DISKWR2:
        nop
        nop
        ld    hl, 0d800h
...



Der Anfang von DISKWR2 wurde gepatcht, allerdings ergibt der Patch keinen Sinn (HL wird nicht genutzt). mit den originalen Bytes aus CP/M 2.2-BDOS funktioniert alles: Bei jedem Löschversuch kommt eine Fehlermeldung
--
VolkerP

http://hc-ddr.hucki.net
(Z9001, Z1013, LC-80, ...)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
11.08.2016, 16:10 Uhr
holm

Avatar von holm

Interessant. Der selbe Fehler müßte doch eigentlich bei schreibgeschützen Disketten auch auftreten?
Ich habe nur bei Dir bisher CCP und BDOS Quellen gesehen. Betrifft das das CPA der BC und PC auch?

Gruß,

Holm
--
float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v;
{s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+
(r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&&
(A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
11.08.2016, 16:41 Uhr
volkerp
Default Group and Edit
Avatar von volkerp

Alle Versionen des CP/A, die ich kenne, nutzen die gleiche BDOS.ERL, Stand 20.11.88. Das ist das gleiche BDOS wie vom 22.06.87 (BC: bios_880531, PC: biop_890103).
Damit ist dieser Fehler überall drin.

Es gibt noch eine ältere Version des BDOS, datiert 24.08.86, die hab ich nicht weiter untersucht.

Mit schreibgeschützen Disketten hab ich das noch nicht untersucht, aber ich werd es morgen testen.
--
VolkerP

http://hc-ddr.hucki.net
(Z9001, Z1013, LC-80, ...)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
11.08.2016, 17:04 Uhr
volkerp
Default Group and Edit
Avatar von volkerp

Bei Disketten hab ich denselben Effekt. Das Löschen von ersten Dateien schlägt erfolgreich fehl (nun mit file r/o-Error statt bad sector, liegt vermutlich am bei Disketten genutzten csv), aber die letzte Datei kann ich nicht löschen, CP/A hängt sich auf.

Kannst du das bestätigen?
--
VolkerP

http://hc-ddr.hucki.net
(Z9001, Z1013, LC-80, ...)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
11.08.2016, 17:11 Uhr
holm

Avatar von holm

....Moooooment...

..also ich habe hier mal das KRZ System angeschmissen (weil es neben mir steht), eine Diskette
formatiert und die Systemdiskette drauf kopiert.
Danach einen Schreibschutzaufkleber dran und versucht zu löschen.
Es ist mir allerdings nicht gelungen was Anderes als als Bdos Err On B: Bad Sector (^C=abort, other=ignore) zu erzeugen. Auch bei erase *.* nicht.

IMHO stammt auch hier der CCP und das BDOS von der ADW. Willy Dames und Mannfred Krzikalla haben zu DDR Zeiten mächtig unter einer Decke gesteckt und die Dateien sind wohl 1:1 die Selben..

ist das diese Stelle?


Quellcode:
00001270  82 d3 2a e5 dd 0e 00 3a  c4 dd 47 a5 b8 23 20 e7  |..*....:..G..# .|
00001280  e1 22 e5 dd cd 93 d5 cd  9b d3 c1 c5 cd 82 d3 c1  |."..............|
00001290  3a e3 dd 21 e1 dd be 38  04 77 34 0e 02 00 00 21  |:..!...8.w4....!|
000012a0  00 d8 f5 cd 25 d5 e6 7f  77 f1 fe 7f 20 1a 3a d5  |....%...w... .:.|
000012b0  dd fe 01 20 13 cd 92 d4  cd 3a d9 21 12 d3 7e b7  |... .....:.!..~.|



..meinst Du das die Disk (das Directory) wirklich voll sein muß?

Gruß,

Holm
--
float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v;
{s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+
(r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&&
(A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;}

Dieser Beitrag wurde am 11.08.2016 um 18:05 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
12.08.2016, 09:06 Uhr
volkerp
Default Group and Edit
Avatar von volkerp

Die Stelle ist richtig:
129d:
nop
nop
ld hl,d800


Und auch im CP/A-BDOS datiert 24.08.86 ist das auch schon gepatcht. Mir ist völlig unklar, was damit bezweckt werden sollte.


Quellcode:

ROM:0B9D DISKWR2:                                
ROM:0B9D                 nop               <--
ROM:0B9E                 nop               <--
ROM:0B9F                 ld      hl, 0D800h               <--
ROM:0BA2                 push    af
ROM:0BA3                 call    GETMODNUM
ROM:0BA6                 and     7Fh ; ''
...


--
VolkerP

http://hc-ddr.hucki.net
(Z9001, Z1013, LC-80, ...)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
010
12.08.2016, 09:30 Uhr
holm

Avatar von holm

Ich stehe bei Weitem nicht so in der Materie wie Du, deswegen kann ich dazu wenig sagen.
Es ist durchaus möglich das beim optimieren des BDOS mal was vergessen worden ist oder das das eine Spezialfunktion ist. Der Bootloader des CP/A auf dem Bürocomputer enthält z.B. ein Minibios und ein komplettes BDOS um die Datei @os.com auf der Diskette zu finden und in den HS zu laden, weil der Platz der Systemspuren nicht ausreicht. Es weiß heute keiner mehr was da wirklich abgeht weil die Quellen der Programme wie cpabcgen usw. nicht mehr existent sind.
für diesen Spezialfall könnten solche Änderungen notwendig gewesen sein, die aber im Normalbetrieb eher kontraproduktiv sind.

Man müßte auch mal das SCP BDOS in dieser Hinsicht vergleichen.

Mein Problem ist aber, das ich den Fehler nicht reproduzieren kann.
Meine Diskette ist halb voll, es werden nur 2 Extents benutzt. Ich werde evtl. heute noch mal mit dem A5120 experimentieren.

Gruß,

Holm
--
float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v;
{s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+
(r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&&
(A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;}

Dieser Beitrag wurde am 12.08.2016 um 09:31 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
011
12.08.2016, 13:37 Uhr
volkerp
Default Group and Edit
Avatar von volkerp

Es lässt mir keine Ruhe, und ich habe weiter gesucht.
Dieser Patch hängt mit einem Problem beim Blocking/Deblocking zusammen.
Allerdings ist das kein Patch, den DRI offiziell vorgeschlagen hat.

Ich habe diesen Patch auch in anderen BDOSen gefunden, z.B. im BDOS von Clark A. Calkins:


Quellcode:

;
;*   This area has been patched to correct disk update problem
;* when using blocking and de-blocking in the BIOS.
;
WTSEQ10:NOP            ;was "dcr c"
    NOP            ;was "dcr c"
    LD    HL,0        ;was "jnz wtseq99"
;
; *   End of patch.
;




Entweder man patcht nicht und erhält Fehler beim Schreiben auf geschützte Disketten, oder man patcht und muss damit leben, dass unter Umständen beim Schreiben auf geschützte Disketten CP/M abstürzt.
--
VolkerP

http://hc-ddr.hucki.net
(Z9001, Z1013, LC-80, ...)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
012
12.08.2016, 15:26 Uhr
holm

Avatar von holm

Naja, dann besser Absturz beim schreiben auf R/O Disketten, das geht eh schief :-)

Bei uns steht da 0xd800 als Adresse drin, ist das beim Z9001 Bios Start? ..wahrscheinlich einfach übernommen worden. Hier steht 0 was auch Warmstart ist..

Gruß,

Holm
--
float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v;
{s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+
(r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&&
(A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek