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:
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:
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 Mnchen 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