Programme nach Zeit beenden und starten

Konfiguration, Anwendungen, Treiber und TSRs unter DOS
Antworten
drzeissler
DOS-Gott
Beiträge: 3336
Registriert: Mo 8. Feb 2010, 16:59

Programme nach Zeit beenden und starten

Beitrag 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
CPU: 486 DX2/66 MOBO: SNI-D882 RAM: 3x16MB - FDD: 3,5" 1,44MB HDD: 6,4GB Seagate ISA(1): Audican32Plus PCI(1): 3com TX 905 OS: MsDos622 - Win95a - WinNT 3.51
Benutzeravatar
Solarstorm
LAN Manager
Beiträge: 242
Registriert: So 4. Mai 2014, 14:24
Wohnort: Heidelberg
Kontaktdaten:

Re: Programme nach Zeit beenden und starten

Beitrag von Solarstorm »

Unter Windows würde mir spontan AutoIT oder AutoHotKey einfallen.
drzeissler
DOS-Gott
Beiträge: 3336
Registriert: Mo 8. Feb 2010, 16:59

Re: Programme nach Zeit beenden und starten

Beitrag von drzeissler »

Danke, ich brauch das unter Dos.
CPU: 486 DX2/66 MOBO: SNI-D882 RAM: 3x16MB - FDD: 3,5" 1,44MB HDD: 6,4GB Seagate ISA(1): Audican32Plus PCI(1): 3com TX 905 OS: MsDos622 - Win95a - WinNT 3.51
DOSferatu
DOS-Übermensch
Beiträge: 1220
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: Programme nach Zeit beenden und starten

Beitrag 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.
drzeissler
DOS-Gott
Beiträge: 3336
Registriert: Mo 8. Feb 2010, 16:59

Re: Programme nach Zeit beenden und starten

Beitrag 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.
CPU: 486 DX2/66 MOBO: SNI-D882 RAM: 3x16MB - FDD: 3,5" 1,44MB HDD: 6,4GB Seagate ISA(1): Audican32Plus PCI(1): 3com TX 905 OS: MsDos622 - Win95a - WinNT 3.51
DOSferatu
DOS-Übermensch
Beiträge: 1220
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: Programme nach Zeit beenden und starten

Beitrag 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.
drzeissler
DOS-Gott
Beiträge: 3336
Registriert: Mo 8. Feb 2010, 16:59

Re: Programme nach Zeit beenden und starten

Beitrag 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.
CPU: 486 DX2/66 MOBO: SNI-D882 RAM: 3x16MB - FDD: 3,5" 1,44MB HDD: 6,4GB Seagate ISA(1): Audican32Plus PCI(1): 3com TX 905 OS: MsDos622 - Win95a - WinNT 3.51
Martin75
BIOS-Flasher
Beiträge: 396
Registriert: Mo 6. Jul 2015, 21:46

Re: Programme nach Zeit beenden und starten

Beitrag 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)
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Programme nach Zeit beenden und starten

Beitrag 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.
mov ax, 13h
int 10h

while vorne_frei do vor;
mcobit
HELP.COM-Benutzer
Beiträge: 31
Registriert: Fr 8. Jun 2018, 17:47

Re: Programme nach Zeit beenden und starten

Beitrag 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.
Antworten