Kostenlose Software - natürlich vom ACM e.V.


                                         erstellt am  / farita je 1999-01-24

Automatisierer       : Windowsprogramme automatisch ablaufen lassen
I2C-Demo             : Demoprogramm, wie der I2C-Bus funktioniert
Portdll.dll          : Direkter Zugriff auf serielle und parallele 
                       Schnittstellen
VBRUN200.dll (360K)  : Die Laufzeitbibliothek für VB 2.0 (wird für die 
                       Visual-Basic-Programme benötigt!)
Bootroutine          : Wie man ein selbstgeschriebenes Betriebssystem von 
                       Diskette laden kann 
E-DOS.com            : Absolute Spuren von Diskette lesen und als Dos-File 
                       abspeichern
DOS-E.com            : Dos-File laden und auf einer Diskettenspur abspeichern
Programmiersprache E : Selbstbau-Compiler für die wahrscheinlich einfachste
                       Programmiersprache der Welt!
Betriebssystem E 0.9 : Selbstgeschriebenes Betriebssystem (bootet von Diskette) 
zurück - reen

Automatisierer:

Das Bild benötigt 14 K !
Auto.exe



Zweck des Programmes:

Das Programm AUTOMATISIERER (Auto.exe) steuert über Steuerbefehle, die in der Datei steuer.txt stehen, beliebige Windows-Anwendungen. Intern werden vom Programm die Befehle SendKeys, AppActivate und Shell ver- wendet. Wer das Programm für seine Zwecke abändern möchte, kann hierür die Quelltexte (siehe weiter unten) auto.mak und auto.frm benutzen.

Systemvoraussetzungen

: PC mit mind Windows 3.0 - Die Dateien auto.exe und steuer.txt müssen sich im gleichen Verzeichnis befinden. Das Laufzeitmodul Vbrun200.dll muß sich im Windowsverzeichnis oder im gleichen Verzeichnis wie auto.exe befinden.

Start:

auto.exe doppelklicken

Bedienung:

- "Steuerdatei laden": Die Datei steuer.txt wird in das Textfenster geladen - Mit Rollbalken Text nach unten oder oben schieben. - Im Textfenster Text schreiben - "Steuerdatei speichern": Der Text im Textfenster wird unter steuer.txt abge- speichert - "Steuerdatei ausführen": Der Text im Textfenster wurd ab Cursorposition bis zur Zeile , in der ein großes E steht, abgearbeitet. - "nächsten Schritt ausführen": Der Text im Textfenster wird ab Cursor- position bis zum Zeilenende abgearbeitet. - Weitere Bedienungshinweise finden Sie in der Datei steuer.txt (steuer.bak ist eine Kopie von steuer.txt)

Listing der Datei Steuer.txt:

Beispiel für eine Steuerdatei Die Datei ruft calc.exe (Rechner) auf, berechnet etwas und schließt die Anwendung wieder String Nr. 1 = calc Strings 1 ... 9 können definiert werden! 1 calc 3 Sekunden warten W 03 calc.exe laden L 1 Rechner aktivieren A Rechner 3 Sekunden warten W 03 berechnen, was ist 1+7 S 1 S {+} S 7 S = 3 Sekunden warten W 03 Rechner schließen S %{f4} Steuerprogramm beenden E Syntax des Steuerprogramms "Steuer.txt" ------------------------------------------------------------ Bemerkung = Bemerkung (mit 2 Blanks eingerückt) W xxx = xxx Sekunden warten L Filename = Anwendung laden (Shell) A Name = Anwendung aktivieren (AppActivate) S yyy = Tastenschläge senden (SendKeys) E = Programm beenden 3 Name = 1 ... 9 Platzhalter für Parameter z.B. Dateinamen Achtung !!! Jede Programmzeile besteht mindestens aus zwei Bytes! - also Leerzeile = 2 Blanks!!! Tasten: ----------------------------------------------------------- Shift-Taste + Strg -Taste ^ Alt -Taste % Bild nach oben {pgup} Bild nach unten {pgdn} hoch {up} runter {down} rechts {right} links {left} Enter {enter} oder ~ Entf {delete} oder {del} Einfg {insert} Pos1 {home} Ende {end} Tabulator {tab} Esc {escape} oder {esc} F1 ... F12 {f1} .... {f12} Ruecktaste {backspace} oder {bksp} oder {bs} Druck {prtsc} Rollen {scrolllock} Pause {break} Num {numlock} Wiederholungen z.B. {left 3} Tasten gleichzeitig z.B. %(ab)

Quelltexte:

- auto.mak
AUTO.FRM ProjWinSize=74,385,252,122 ProjWinShow=0 Title="AUTO" ExeName="AUTO.EXE" Path="C:\VB"
- auto.frm
VERSION 2.00 Begin Form Form1 Caption = "Automatisierer - vom ACM-Computerclub Tel. 089-186186" Height = 4350 Left = 885 LinkTopic = "Form1" ScaleHeight = 3945 ScaleWidth = 7155 Top = 2835 Width = 7275 Begin TextBox Text2 Height = 285 Left = 120 TabIndex = 5 Top = 3480 Width = 4095 End Begin CommandButton Befehl5 Caption = "Steuerdatei laden" Height = 495 Left = 4320 TabIndex = 4 Top = 120 Width = 2655 End Begin CommandButton Befehl4 Caption = "Steuerdatei speichern" Height = 495 Left = 4320 TabIndex = 3 Top = 720 Width = 2655 End Begin CommandButton Befehl3 Caption = "Steuerdatei ausführen" Height = 495 Left = 4320 TabIndex = 2 Top = 1320 Width = 2655 End Begin CommandButton Befehl2 Caption = "nächsten Schritt ausführen" Height = 495 Left = 4320 TabIndex = 1 Top = 2160 Width = 2655 End Begin TextBox Text1 Height = 3135 Left = 120 MultiLine = -1 'True ScrollBars = 2 'Vertikal TabIndex = 0 Text = " " Top = 120 Width = 4095 End End Dim position, position2, zeit Dim a$, b$, c$, d$, e$, f$, g$, h$, i$ Dim zeile$, aktiv$, befehl$, inhalt$ Sub befehl2_click () nächstezeile If befehl$ = "S " Then AppActivate aktiv$ zeileausführen If Left$(text2.Text, 2) = "E " Then befehl2.Visible = False: befehl3.Visible = False End Sub Sub Befehl3_Click () Do nächstezeile zeileausführen Loop Until Left$(text2.Text, 2) = "E " befehl3.Visible = False befehl2.Visible = False End Sub Sub Befehl4_Click () Open "steuer.txt" For Output As #1 Print #1, text1.Text Close 1 End Sub Sub Befehl5_Click () Open "Steuer.txt" For Input As #1 text1.Text = Input$(LOF(1), 1) Close 1 befehl2.Visible = True befehl3.Visible = True position = 1 text2.Text = "" End Sub Sub Form_Load () befehl2.Visible = False befehl3.Visible = False End Sub Sub nächstezeile () If Timer < zeit Then Exit Sub position1 = position position2 = InStr(position, text1.Text, Chr$(13)) zeile$ = Mid$(text1.Text, position1, position2 - position1) befehl$ = Left$(zeile$, 2) inhalt$ = Right$(zeile$, Len(zeile$) - 2) End Sub Sub Text1_LostFocus () position = text1.SelStart + 1 End Sub Sub zeileausführen () For j = 1 To 2000 DoEvents Next j If Timer < zeit Then text2.Text = "W " + Str$(Int(zeit - Timer)): Exit Sub If befehl$ = "W " And Timer >= zeit Then nächstezeile If befehl$ = "1 " Then a$ = inhalt$ If inhalt$ = "1" Then inhalt$ = a$ If befehl$ = "2 " Then b$ = inhalt$ If inhalt$ = "2" Then inhalt$ = b$ If befehl$ = "3 " Then c$ = inhalt$ If inhalt$ = "3" Then inhalt$ = c$ If befehl$ = "4 " Then d$ = inhalt$ If inhalt$ = "4" Then inhalt$ = d$ If befehl$ = "5 " Then e$ = inhalt$ If inhalt$ = "5" Then inhalt$ = e$ If befehl$ = "6 " Then f$ = inhalt$ If inhalt$ = "6" Then inhalt$ = f$ If befehl$ = "7 " Then g$ = inhalt$ If inhalt$ = "7" Then inhalt$ = g$ If befehl$ = "8 " Then h$ = inhalt$ If inhalt$ = "8" Then inhalt$ = h$ If befehl$ = "9 " Then i$ = inhalt$ If inhalt$ = "9" Then inhalt$ = i$ If befehl$ = "L " Then X = Shell(inhalt$, 1) If befehl$ = "A " Then AppActivate inhalt$: aktiv$ = inhalt$ If befehl$ = "S " Then SendKeys inhalt$, True If befehl$ = "W " Then zeit = Timer + Val(inhalt$) If befehl$ = " " Then nächstezeile text2.Text = zeile$ position = position2 + 2 End Sub

Die Software zum Runterladen:

Die Datei Automat.exe ist ein selbstextrahierendes File. Bis auf die Laufzeitbibliotek VBRUN200.dll finden sich hier alle oben beschriebenen Files:

Automat.exe (10K)

I2C-Demo:

Das Bild benötigt 15 K !
I2C.exe



Zweck des Programmes:

Das Programm I2C demonstriert die Funktion des I2C-Busses.

Systemvoraussetzungen:

Start:

Das Programm wird durch doppelklicken auf i2c.exe gestartet.

Bedienung:

Zunaechst muss man ein Demofile laden, dass nach Druecken der "Ende"-Taste ausgefuehrt wird. Die weitere Bedienung des Programmes ist leicht. - Mit "automatisch" laeuft das Programm automatisch ab. Die Geschwindig- keit stellt man mit dem Rollbalken ein! Voreingestellt ist die Geschwindigkeit 0 - also nichts passiert bevor man nicht den Rollbalken veraendert. - Mit "Einzelschritt" wird das Programm jeweils um einen Schritt weitergefuehrt. - Mit "Ende" wird das Programm beendet. - Mit "schnell" wird das Programm ohne Grafik und damit schneller ausgefuehrt und dabei die Zahl der I2C-Befehle pro Sekunde angezeigt. Dabei wird die Sequenz - START CHIPADRESSE 64 SENDE 111 STOP - als ein Befehl gewertet! (Es werden nur die Befehle SENDE und EMPFANGE gewertet!) Man kann seine Demofiles auch selbst erstellen. Erlaubt sind die Befehle: START, STOP, CHIPADRESSE, SENDE, EMPFANGE, VON VORNE und die Zahlen von 0 bis 255 . Zur realistischen Demonstration muss man I2C-Chips, angeschlossen an ein I2C-Bus-Kabel, bestehend aus den vier Leitungen ( GND, SCL, SDA und +5V ) benutzen. I2C-Chips sind z.B. PCF8574 und PCF8574A (8-Bit- Ein-/Ausgabe-Ports) und PCF8591 (4 8-Bit-A/D-Wandler + 1 8-Bit-D/A-Wandler) Die Chipadresse eines PCF8574 ist 0 1 0 0 A2 A1 A0 R/W . Die Chipadresse eines PCF8574A ist 0 1 1 1 A2 A1 A0 R/W . Die Chipadresse eines PCF8591 ist 1 0 0 1 A2 A1 A0 R/W . Somit ist z.B. die Chipadresse eines PCF8574, bei dem die Adressleitungen A2 A1 und A0 auf Null gezogen sind 0 1 0 0 0 0 0 0 bzw. 64, wenn geschrieben werden soll oder 0 1 0 0 0 0 0 1 bzw. 65, wenn ein Bytes vom Chip gelesen werden sollen. Der I2C-Bus wird am der parallelen Schnittstelle LPT1: angeschlossen: GND (Masse) an Pin 18 SCL (serieller Takt) an Pin 8 (Ausgang) SDA (serielle Daten) an Pin 10 (Eingang) mit Diode an Pin 9 (Ausgang) Pin 9 und Pin 10 werden mit einer Diode ueberbrueckt und zwar so, dass der Bus auf "low" geht, wenn Pin 9 auf "low" (0V) gesetzt wird. Die 5V-Spannungsversorgung kann man z.B. vom Pin 1 des Gameports des Computers nehmen. Das Programm ist Public Domain. ************************************************************************ Keine Garantie, dass es funktioniert! - Keine Haftung bei Schaeden! ************************************************************************ Autor: U. Ender, Loristr. 20 , D-80335 Muenchen Tel. 089/186186 Ich bin uebrigens Mitglied im Computer-Anwender-Club Muenchen e.V., der sich jeden 2. Dienstag im Monat in der Gaststaette FLORIANSGARTEN, SITULISTRASSE 7, U-Bahn U6 Freimann trifft. Kommen Sie doch mal vorbei!

Quelltexte:

Die Software zum Runterladen:

Die Datei Automat.exe ist ein selbstextrahierendes File. Bis auf die Laufzeitbibliotek VBRUN200.dll finden sich hier alle oben beschriebenen Files:

i2c-demo.exe (19K)

PortDll.dll:

Zweck des Programmes:

Systemvoraussetzungen:

Start:

Bedienung:

Quelltexte:

Die Software zum Runterladen:

Die Datei portdll.exe ist ein selbstextrahierendes File.

portdll.exe (2K)

Bootroutine: Spuro-0 - Betriebsystemlader f 00 1000 00 a 100 jmp 120 db " Spuro 0 ",0d,0a a 120 MOV AX,0208 ; Sektoren 1-8 von Spur 0 Kopf 0 MOV BX,7E00 ; nach 0000:7e00 laden MOV CX,0002 MOV DX,0000 MOV ES,DX MOV DX,0000 INT 13 MOV AX,0000 ; Zeichenkette mit Ascii 0 abgeschlossen MOV DS,AX ; ab 0000:7d00 auf Bildschirm schreiben MOV BX,7D00 MOV AL,[BX] MOV AH,0E INT 10 MOV AL,[BX] SUB AL,00 JZ 014A INC BX JMP 013B MOV BX,0000 MOV DS,BX MOV AL,40 ; auf Grossbuchstaben umstellen MOV [0417],AL MOV AX,0208 ; Sektoren 1-8 von Spur 0 Kopf 1 MOV BX,9700 ; nach 2005:9700 laden MOV CX,0001 MOV DX,2005 MOV ES,DX MOV DX,0100 INT 13 MOV AX,0208 ; Sektoren 1-8 von Spur 1 Kopf 1 MOV BX,A700 ; nach 2005:a700 laden MOV CX,0101 MOV DX,0100 INT 13 MOV AX,0208 ; Sektoren 1-8 von Spur 2 Kopf 1 MOV BX,B700 ; nach 2005:b700 laden MOV CX,0201 MOV DX,0100 INT 13 MOV DX,2005 MOV DS,DX JMP 2005:9C40 ; Einsprung in Programm a 200 db 0d,0a," JEN ESPERANTO-PROGRAM-LINGVO ",0d,0a db" ",0d,0a db" EEEEEEEEEEE",0d,0a db" EEEEEEEEEEE",0d,0a db" EE",0d,0a db" EE",0d,0a db" EE",0d,0a db" EE",0d,0a db" EEEEEEEEEEE",0d,0a db" EEEEEEEEEEE",0d,0a db" EE",0d,0a db" EE",0d,0a db" EE",0d,0a db" EE",0d,0a db" EEEEEEEEEEE",0d,0a db" EEEEEEEEEEE",0d,0a db" ",0d,0a db" (C) 1987 - 1998 ",0d,0a db" kreita de U. Ender, Loristr. 20, 80335 Mnchen 2, Germanio",0d,0a db" http://ourworld.compuserve.com/homepages/Uli_Ender",0d,0a db" ",0d,0a db" listu la vortaron per la vorto LISTU",0d,0a db" ricevu informojn pri E per la vorto INFO ",0d,0a,00 r cx 520 n 00-0 w q E-DOS.com: Speicherbereich mit Nullen fuellen f 100 2000 00 Ab Adresse CS:100 assemblieren a 100 Spur von Diskette laden und als DOS-File abspeichern call 200 ; Parameter isolieren: Dateiname, Spur (0-79), Kopf (0-1) Spur von Diskette an ds:1000 laden 4096 Bytes nop ; zu Testzwecken ersetze nops durch nop ; jmp 12b mov ax,0208 ; 8 Sektoren lesen mov dl,00 ; von Laufwerk A: mov dh,00 ; auf Seite 0 der Diskette mov ch,27 ; Spur 39 mov cl,1 ; ab Sektor 1 mov bx,1000 ; an Offset 1000 (ES:BX = Ladeadresse) int 13 ; Disketten-Interrupt Datei abspeichern mov ah,3c ; Datei anlegen mov cx,0 ; keine Dateiattribute mov dx,300 ; Adresse des Dateinamens DS:DX int 21 mov bx,ax ; Dateinummer mov ah,40 ; Datei schreiben mov cx,1000 ; 4096 Bytes mov dx,1000 ; ab Adresse DS:DX DX=1000 int 21 Programm beenden mov ah,4c ; Programm beenden int 21 ; DOS-Interrupt a 200 Parameter isolieren mov bx,80 ; Lade Laengen-Index von Fileparameterliste mov ah,[bx] inc ah mov bp,300 inc bx ; Ende erreicht ? dec ah jz 270 mov al,[bx] ; Lade naechstes Zeichen cmp al,20 ; ASCII 32 ? jz 20a ; wenn ja naechstes Zeichen mov [bp],al ; wenn nein Dateiname kopieren inc bp inc bx ; Ende erreicht ? dec ah jz 280 mov al,[bx] ; cmp al,20 ; jnz 215 ; wenn nein naechstes Zeichen kopieren mov al,0 ; Null ans Ende anfuegen mov [bp],al ; inc bx ; Ende erreicht ? dec ah jz 270 mov al,[bx] ; Lade naechstes Zeichen cmp al,20 ; ASCII 32 ? jz 229 ; wenn ja naechstes Zeichen sub al,30 ; Ziffer bilden mov [10d],al; wenn nein 1. Ziffer abspeichern inc bx ; Ende erreicht ? dec ah jz 270 mov dl,[10d]; Ziffer * 10 nehmen shl dl,1 shl dl,1 shl dl,1 add dl,[10d] add dl,[10d] mov al,[bx] ; Lade naechstes Zeichen cmp al,20 jz 25D ; wenn 32 dann weiter sub al,30 add al,dl mov [10d],al; beide Zahlen addieren und Spurnummer abspeichern inc bx ; Ende erreicht ? dec ah jz 270 mov al,[bx] ; Lade naechstes Zeichen cmp al,20 ; ASCII 32 ? jz 25D ; wenn ja naechstes Zeichen sub al,30 ; wenn nein Kopfnummer errechnen mov [10b],al; und abspeichern ret a 270 ret a 280 mov al,00 mov [bp],al ret a 300 Defaultdateiname mit Null abgeschlossen db "spuro-39.dok",0 n e-dos.com r cx 2000 w q DOS-E.com: Speicherbereich mit Nullen fuellen f 100 2000 00 Ab Adresse CS:100 assemblieren a 100 DOS-File laden und aus Diskettenspur abspeichern call 200 ; Parameter isolieren: Dateiname, Spur (0-79), Kopf (0-1) nop ; zu Testzwecken ersetze nops durch nop ; jmp 12a Datei laden mov ah,3d ; Datei oeffnen mov al,0 ; Zugriffscode nur Lesen mov dx,300 ; Adresse des Dateinamens DS:DX int 21 mov bx,ax ; Dateinummer mov ah,3f ; Datei einlesen mov cx,1000 ; 4096 Bytes mov dx,1000 ; an Adresse DS:DX DX=1000 int 21 Spur auf Diskette von ds:1000 schreiben 4096 Bytes mov ax,0308 ; 8 Sektoren lesen mov dl,00 ; von Laufwerk A: mov dh,00 ; auf Seite 0 der Diskette mov ch,26 ; Spur 38 mov cl,1 ; ab Sektor 1 mov bx,1000 ; an Offset 1000 (ES:BX = Ladeadresse) int 13 ; Disketten-Interrupt Programm beenden mov ah,4c ; Programm beenden int 21 ; DOS-Interrupt a 200 Parameter isolieren mov bx,80 ; Lade Laengen-Index von Fileparameterliste mov ah,[bx] inc ah mov bp,300 inc bx ; Ende erreicht ? dec ah jz 270 mov al,[bx] ; Lade naechstes Zeichen cmp al,20 ; ASCII 32 ? jz 20a ; wenn ja naechstes Zeichen mov [bp],al ; wenn nein Dateiname kopieren inc bp inc bx ; Ende erreicht ? dec ah jz 280 mov al,[bx] ; cmp al,20 ; jnz 215 ; wenn nein naechstes Zeichen kopieren mov al,0 ; Null ans Ende anfuegen mov [bp],al ; inc bx ; Ende erreicht ? dec ah jz 270 mov al,[bx] ; Lade naechstes Zeichen cmp al,20 ; ASCII 32 ? jz 229 ; wenn ja naechstes Zeichen sub al,30 ; Ziffer bilden mov [122],al; wenn nein 1. Ziffer abspeichern inc bx ; Ende erreicht ? dec ah jz 270 mov dl,[122]; Ziffer * 10 nehmen shl dl,1 shl dl,1 shl dl,1 add dl,[122] add dl,[122] mov al,[bx] ; Lade naechstes Zeichen cmp al,20 jz 25D ; wenn 32 dann weiter sub al,30 add al,dl mov [122],al; beide Zahlen addieren und Spurnummer abspeichern inc bx ; Ende erreicht ? dec ah jz 270 mov al,[bx] ; Lade naechstes Zeichen cmp al,20 ; ASCII 32 ? jz 25D ; wenn ja naechstes Zeichen sub al,30 ; wenn nein Kopfnummer errechnen mov [120],al; und abspeichern ret a 270 ret a 280 mov al,00 mov [bp],al ret a 300 Defaultdateiname mit Null abgeschlossen db "spuro-38.dok",0 n dos-e.com r cx 2000 w q
zurück - reen