Robotrontechnik-Forum

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

Robotrontechnik-Forum » Technische Diskussionen » CP/M Warmstart Taste ? » Themenansicht

Autor Thread - Seiten: -1-
000
19.11.2011, 12:01 Uhr
Ralph



Hallo,

gibt es unter CP/M 2.2 eine Tastenkombination bzw. Taste die beim CP/M einen Warmstart auslöst und damit grade laufende Programme abbricht ?

Ich würde gern in mein HRDOS in die CONIN-Routine so etwas einbauen, um SICHER einen CP/M Warmstart auszulösen und ggf. hängende Programme abzubrechen.

Vielen Dank für Eure Hinweise sagt Ralph
--
Es geht alles erst richtig los !
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
19.11.2011, 12:23 Uhr
felge1966
Default Group and Edit


War das nicht einfach "CTRL-C" ?
--
http://felgentreu.spdns.org/bilder/jacob120.gif
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
19.11.2011, 12:49 Uhr
holm

Avatar von holm

Ja, das war ^C und führt normalerweise zum neu Einlesen und Laden des CCP und verwerfen der Diskettenverzeichnisse.

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
003
19.11.2011, 13:05 Uhr
Ralph



Naja an ^C hatte ich auch erst gedacht, aber soweit ich weiß, nutzen viele Programme ^C doch auch intern.
Damit kann ich diese Taste nicht einfach im CONIN Treiber abfangen und einen CPM Warmstart machen.
--
Es geht alles erst richtig los !
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
19.11.2011, 13:52 Uhr
Heiko_P



@Ralph,

Ctrl-C wird vom CCP ausgewertet. Dieser löst einen Warmstart aus, wenn das Zeichen an erster Stelle im Eingabepuffer steht, also wenn es direkt am Eingabeprompt eingegeben wird. Hängengebliebene Programme lassen sich damit natürlich nicht beeinflussen. Dafür gibts die Reset-Taste.

Heiko
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
19.11.2011, 14:03 Uhr
holm

Avatar von holm

Aus BIOS.MAC, CP/A Quelle:

Quellcode:
....
;       Warmstart
;       ~~~~~~~~~
; Im Normalfall wird das CCP von einer im BIOS gehaltenen Kopie
; bei jedem Warmstart vor das BDOS kopiert, wodurch keine Sy-
; stemspuren auf Laufwerk A erforderlich sind. Um einen maximal
; grossen TPA zu erhalten, sind auch andere Varianten moeglich:

wbootv  equ     0
;               =0:     CCP-Kopie im BIOS (2K grosser Puffer)
;               =1:     keine CCP-Kopie, Warmstart=Kaltstart
;                       (Kaltstart-Kommando sollte leer sein!)
;               =2:     keine CCP-Kopie, CCP aus File '@os.com'
;               =3:     CCP-Kopie in RAM-Floppy (RAM-Floppy
;                       dann um 2K kleiner),
;                       wenn keine RAM-Floppy vorhanden
;                       (siehe "Hauptspeicher"), so wie wbootv=1
; Bei "wbootv"<>0 und Arbeit ohne Diskettenpuffer kann der
; Kaltstart-Code u.U. bis in den Bildschirmpuffer reichen,
; wodurch der Bildschirm beim Kaltstart kurzzeitig undefi-
....

...BIOSNUC.MAC

Quellcode:
...
        ld      c,a             ;00h
        jp      crto
stopz4:
ENDIF

        sub     kcurpd          ;"Page down": ^C ?
        ret     nz              ;nein, Stop-Ende
        ld      (synsem),a      ;falls rst 0 nicht in BIOS fuehrt
        rst     0               ;sonst Warmstart

...

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 19.11.2011 um 14:11 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
19.11.2011, 14:13 Uhr
Ralph



@Heiko_p... Mein Ziel in der Frage war doch eindeutig, oder ? Ich möchte LAUFENDE Programme abbrechen können und dafür weder RESET noch ^C verwenden!

@holm.. was soll ich aus dem Beitrag erkennen ? Ich seh ehrlich gesagt keinen Zusammenhang zu meiner Frage ?! oder meinst Du PAGEDOWN löst das aus ?

Nochmal im Klartext: Ich möchte LAUFENDE CP/M Programme mit einer Taste/Tastenkombination abbrechen können !
Daher befinde ich mich NIE an der Eingabeauffoderung des CCP !
Vemutlich ist soetwas aber unter CP/M nicht vorgesehen,oder ?

Danke für Eure Hilfe sagt Ralph
--
Es geht alles erst richtig los !

Dieser Beitrag wurde am 19.11.2011 um 14:40 Uhr von Ralph editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
19.11.2011, 14:52 Uhr
volkerp
Default Group and Edit
Avatar von volkerp

solange Dein Programm micht gerade die Tastatur abfragt; wirst du ein hängendes Programm auch nicht beenden können. CP/M macht nunmal kein Multitasking.

Du kannst aber i.Allg. an NMI eine Taste hängen und diese dann als universelle Abbruchtaste nutzen.
--
VolkerP

http://hc-ddr.hucki.net
(Z9001, Z1013, LC-80, ...)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
19.11.2011, 14:58 Uhr
Ralph



@volkerp.. Doch in meinem HRDOS arbeite ich mit einer Interruptgesteuerten Tastatur und
da sollte das gehen, wenn nicht grade auch das gesamte Bios mit abgeschmiert ist.

NMI geht aber NICHT unter CP/M, weil im NMI Einsprung der FCB2 liegt und
damit die ansich im AC1 genutzte NMI-Taste unbrauchbar wird.

Gruß Ralph
--
Es geht alles erst richtig los !

Dieser Beitrag wurde am 19.11.2011 um 14:58 Uhr von Ralph editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
19.11.2011, 15:54 Uhr
holm

Avatar von holm

@Ralph: Nicht Du solltest erkennen sondern Heiko.

...aber da Du nicht weißt, was ein "hängendes" Programm in einem System völlig ohne Speicherschutz so alles schon bewerkstelligt hat, funktioniert nur Eines zuverlässig: Reset.

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
010
19.11.2011, 16:15 Uhr
Ralph



@Holm.. OK dann ergibt Dein Post auch nen Sinn aber ich glaub Heiko weis das schon

Du hast Recht Holm, das weiß ich sicher nicht, aber es gibt ja Programme die z.B. auf Floppy zugreifen und endlos hängen,
weil gar kein Floppy physisch vorhanden ist.
So etwas möchte ich gern OHNE Reset abfangen und hoffte es gibt im CP/M allgemein dafür ne Taste bzw. Tastenkombination.

Ich denke ich werde das 3malige Drücken von ^C auswerten und einen CP/M Warmstart auslösen.

Viele Grüße
--
Es geht alles erst richtig los !

Dieser Beitrag wurde am 19.11.2011 um 16:16 Uhr von Ralph editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
011
19.11.2011, 16:20 Uhr
holm

Avatar von holm

Nee, lass mal lieber. Auf dem Bürocomputer ist ^c eine Cursorsteuerfunktion (Bildende, blättern nach unten soviel ich weiß). 3 mal nach unten macht dann einen Warmstart :-)

Du hast zwar keinen BC aber naja...

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
012
19.11.2011, 16:29 Uhr
Ralph



na deswegen frag ich ja hier im Forum, weil ich nicht alles wissen kann :-D

Hast Du, ausser Reset, ne Idee für ne brauchbare Tastenkombination ?
--
Es geht alles erst richtig los !
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
013
19.11.2011, 16:53 Uhr
wunix



hmm,

CTRL, ALT, ENTF

;-)

Gruss,
Andreas

Dieser Beitrag wurde am 19.11.2011 um 16:53 Uhr von wunix editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
014
19.11.2011, 17:00 Uhr
Ralph



@wunix... nö geht auch leider nicht, dann CTRL+ALT+ENF = Reset beim AC1
--
Es geht alles erst richtig los !
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
015
19.11.2011, 18:50 Uhr
Mobby5




Zitat:
Ralph schrieb
@wunix... nö geht auch leider nicht, dann CTRL+ALT+ENF = Reset beim AC1

SHIFT+ALT+ENTF ?
--
und ausserdem muss in Zeile 20 der Doppelpunkt durch ein Semikolon ersetzt werden
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
016
19.11.2011, 19:12 Uhr
Ralph



NEIN... geht auch nicht Mobby... Es müssen Zeichen sein, die über die Tastatur eingegeben werden.
Solche mehrfach Tastenkombinationen sind im CP/M Bios nicht auswertbar, ausser es wird von dieser Tastenkombination ein ASCII Zeichen erzeugt, welches ich dann auswerten kann.

Was wäre denn z.B. mit ESC und danach EOF ?
--
Es geht alles erst richtig los !

Dieser Beitrag wurde am 19.11.2011 um 19:15 Uhr von Ralph editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
017
19.11.2011, 19:51 Uhr
wunix



@Ralph:

wie verhält sich am PS2-PIC-Module, wenn Du anstatt CTRL+C nun CTRL+SHIFT+C eingibst ?!

Vorschlag:

Du fängst im PS2-Modul den Scancode für CTRL+SHIFT+C ab (PIC anpassen) und gibst ein, vom CPM und gängigen Programmen sicher nicht verwendetes, 8BIT Ascii-Zeichen auf den Bus. Das kannst Du dann in Deiner BIOS-Interrupt-Routine für CONIN auswerten und als Quasi-NMI behandeln - in eine spezielle Routine schicken, die dann noch auf ein weiteres bekanntes Zeichen wartet und danach einen definierten Zustand herstellt und die TPA weitestgehend erhält. Kommt das weitere erwartete Zeichen nicht, wird das eingelesene 8bit Zeichen verworfen und auch nichts in Richtung CPM-Prog oder CCP weitergeleitet (verhindert, dass man unbeabsichtigt CTRL+SHIFT+C drückt und rausfliegt).

EDIT: meineswissen ist CPM seinerzeit nur für 7Bit gedacht gewesen, d.h. alles über Dez 127 sollte doch eigentlich unkritisch sein ?!

Gruss,
Andreas

Dieser Beitrag wurde am 19.11.2011 um 19:57 Uhr von wunix editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
018
19.11.2011, 20:19 Uhr
Ralph



@Wunix.. Danke das Du Dir Gedanken machst, aber warum soll es denn so kompliziert mit PIC anpassen etc. sein ?

Als ich die Frage stellte, dachte ich eigentlich, dass es für diese Sache, ausser ^C, eine allgemein gültige Kombination gibt. Das scheint nicht der Fall zu sein.

Es ist doch viel einfacher in CONIN die Eingabe auf bestimmte Zeichen zu testen.
Mir erscheint es zweckmässig die 2 oder 3 malige Eingabe des Zeichen's (5EH)
dafür zu verwenden. Das ist auf der Tastatur am AC1 das Zeichen "^" und wird nie verwendet.

Oder hat jemand noch ne Idee?

Gruß Ralph
--
Es geht alles erst richtig los !
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
019
19.11.2011, 20:40 Uhr
wunix



@Ralph: kompliziert soll es ja nicht sein. Nur kann niemand voraussehen, welche wüsten Zeichenkombinationen evtl über CONIN mal reinkommen und von unbekannten CPM-Progs benötigt werden könnten. Wenn jemand zb. einen Text oder ein Programm im MBASIC schreibt und in seinem PRINT nun "^^^" eingibt, fliegt er aus seiner Eingabe und bekommt das dritte "^" nicht eingegeben. Nur deshalb dachte ich an Codes im 8Bit-Bereich, die wohl niemand über die Tastatur eingeben wird, da sie auch nicht darstellbar sind.

Denkbar wäre noch, dass Du Deine drei "^" via CONIN einliest und normal durchreichst, aber intern irgendwo ein Flag behältst, dass jetzt ein "^" kam und nach dem 3. "^" in Folge zb. für ein CTRL-C dann DEINE Aufräumroutine anspringst. Kommt dann das CTRL-C nicht, dann kannst Du das Flag wieder räumen.

Andreas
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
020
19.11.2011, 20:49 Uhr
Ralph



@wunix.. Das find ich ne gute Idee Mal sehen wie ich sowas hinbekomme.
--
Es geht alles erst richtig los !
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