Seite 1 von 1

Programme nach Zeit beenden und starten

Verfasst: Do 3. Mai 2018, 13:34
von drzeissler
Hi,
ich habe 5 Programme (einzelne ausführbare Dateien) die jede für sich einmal gestartet so lange laufen bis ein key (bspw. esc) gedrückt wird.
Könnte ich das automatisieren, dass ich eine Batch nehme und da mitteile, starte Programm ein, drücke ESC nach 1 Minute, starte dann Programm2 etc.?

Wie geht sowas.

Danke
Doc

Re: Programme nach Zeit beenden und starten

Verfasst: Do 3. Mai 2018, 19:53
von Solarstorm
Unter Windows würde mir spontan AutoIT oder AutoHotKey einfallen.

Re: Programme nach Zeit beenden und starten

Verfasst: Do 3. Mai 2018, 22:27
von drzeissler
Danke, ich brauch das unter Dos.

Re: Programme nach Zeit beenden und starten

Verfasst: Sa 5. Mai 2018, 06:03
von DOSferatu
Ich könnte so etwas programmieren.
Es kommt eigentlich nur darauf an, wie die Tasten abgefragt werden.
Wenn es "normal" passiert (mit "Getkey"-artiger Abfrage aus dem Tastaturpuffer) ist es relativ simpel, einen Tastendruck zu simulieren und sich in den Ticker-Int einzuklinken sollte auch kein Problem darstellen.
Wie gesagt, es käme darauf an, wie komplex und systemnah die Programme programmiert sind.

Re: Programme nach Zeit beenden und starten

Verfasst: Sa 5. Mai 2018, 09:31
von drzeissler
Es sind cracktrs/intros die in der Regel mit esc abgebrochen werden können.
Da die sehr klein sind, gehen davon zig auf eine Diskette.
Man könnte daher eine
286er
386er
486er
pentium

compilation auf eine Diskette machen und dann per Menu eine auswählen, die dann einfach läuft.

Sowas würde sich für eine Retro-Messe anbieten.

Re: Programme nach Zeit beenden und starten

Verfasst: Mo 7. Mai 2018, 07:02
von DOSferatu
drzeissler hat geschrieben:Es sind cracktrs/intros die in der Regel mit esc abgebrochen werden können.
Oh, DEMOS... Naja.
Bekanntlich sind Demo-Coder, die, was Platzverbrauch UND Rechenpowerverbrauch angeht, bekanntlich die effizientesten. Die coden normalerweise "hart am limit" - vor allem bei DOS-Maschinen, wo alles über eine SingleCore-CPU geht (und keine 3D-Grafikkarten, keine GPU...) - d.h. WENN etwas extrem hardwarenah gebaut sind, sind es Treiber und Demos.

Wenn es Demos sind, die den Ticker extrem hoch setzen (das sind vor allem solche, die SoundAusgabe per PC-Speaker machen) müßte man da vorsichtig sein. (Obwohl man hier auch den zweiten Ticker benutzen könnte, den kaum einer benutzt, weil er etwas schwieriger anzusteuern und die Ticks nur in 2er Potenzen einstellbar sind.)

Desweiteren geht es natürlich um den Abbruch per ESC. Bei Demos gehe ich davon aus, daß meist NICHT der Tastaturpuffer abgefragt wird, um nach gedrückter ESC zu testen - sondern direkt Port $60. Das kann man so leider nicht simulieren.

Natürlich gäbe es noch eine andere Möglichkeit: In den Ticker einklinken, dann, wenn das Demo läuft, testen, ob INT8-Rücksprungadresse sich geändert hat - falls ja, dann wieder zurück tauschen - d.h. so, daß die eigene ISR für INT8 VOR der des Demos aufgerufen wird.

Außerdem herausfinden, auf welche Frequenz der Ticker gestellt wurde, damit man die richtige Laufzeit einstellen kann. Der Ticker erhält einen Timeout entsprechend der Zeit. Nach Ablauf des Timeouts wird die Rücksprungadresse und die FLAGS vom Stack geholt und der DOS-Int zum Beenden eines Programms aufgerufen (INT $21, Funktion $4C soweit ich mich erinnere).

ABER: Hier müssen noch 2 Dinge berücksichtigt werden:
1. Das Demo könnte nicht im RealMode/V86 Mode, sondern im ProtectedMode laufen - entsprechender Code muß dann eingebaut werden.
2. Der Systemzustand müßte dann selbstöndig wiederhergestellt werden (Grafiklkarte, Soundkarte usw. "zurücksetzen"), weil das Demo ja dann quasi nicht normal beendet ("heruntergefahren") wurde, sondern abgewürgt.

Prinzipiell, um so etwas zu bauen, braucht man quasi etwas ähnliches wie einen einfachen Taskmanager.
Wären es einfache alte Tools gewesen, die nicht so nah an der Hardware gebaut sind, da kann man sich normalerweise darauf verlassen, daß die ganzen "Außenherum-Spielereien" problemlos gehen, weil diese Tools meist nur die Standard-BIOS-Funktionen benutzen und das könnte man eher leicht umgehen.

Re: Programme nach Zeit beenden und starten

Verfasst: Mo 7. Mai 2018, 07:06
von drzeissler
Ist nicht schlimm, kann ja selber esc drücken um das nächste Intro laufen zu lassen,
dann mache ich halt "nur" ne Batch und gut.

Re: Programme nach Zeit beenden und starten

Verfasst: Mo 7. Mai 2018, 09:27
von Martin75
Falls sich der Aufwand zum basteln lohnt:

Mit einem Raspi oder ähnlichen die Esc taste drücken lassen (Kontakt parallel an echter Tastatur anschließen)

Re: Programme nach Zeit beenden und starten

Verfasst: Do 7. Jun 2018, 19:25
von zatzen
Ich habe ein ziemlich ähnliches Problem, nur etwas einfacher.
Ein Programm soll auf Bewegung der Maus oder per Tastendruck abgewürgt werden.
Mangels meiner Erfahrungen mit TSRs würde ich das entsprende Programm einfach
in einem "parent" Programm mit "exec" ausführen.

Dann müsste ich mich wohl nur bei Int 9 einklinken, so hätte ich das mit der Tastatur jedenfalls
schonmal drin.

Wo ich auf jeden Fall Hilfe bräuchte, wäre beim Beenden des "child" Programms.
Interrupt Aufruf ist klar, aber wie sehen die Befehle zum Zurückholen der Rücksprungadresse
und der Flags aus? "...vom Stack geholt" führt mich etwas in die Irre, ich dachte zunächst an
POP Anweisungen, aber hier geschieht das wohl eher durch ein RETF. Eine konkreter beispielhafter
Code würde mir sehr helfen. Also, nur für das Beenden/Abwürgen.

Ich habe schon Stunden im Internet zu dem Thema recherchiert und bin bislang nur so weit gekommen
dass man mit einer anderen Bios Funktion Programme beenden kann, diese aber nur COM sein dürfen
weil sonst CS sehr wahrscheinlich anders ist.

Ist das möglich so wie ich mir das denke?


Bearbeitet: Da ich hier eher nur Trittbrettfahrer bin und meine Frage drzeissler nicht
hilft, und das ganze zu technisch würde, mache ich mal ein neues Thema in der Programmier-Ecke auf.

Re: Programme nach Zeit beenden und starten

Verfasst: Mo 11. Jun 2018, 00:25
von mcobit
Ich habe mir für so eine Demo nen Arduino Nano und nen 5 pin Din-Stecker besorgt und damit einfach Tastatureingaben über die Tastaturbuchse gesendet.

Das hat dann verschiedene Spiele gestartet, nach einer Weile wieder beendet und dann das nächste gestartet. Sieht vor allem auch cool aus, wenn der Computer "von selbst" tippt ;-)

Natürlich könnte man so auch mit ein Paar Buttons an den GPIOs bestimmte Eingaben machen/Programme starten.

Wenn es interessant ist, kann ich demnächst mal den Sketch hier hochladen.