Portzugriff (z.B. BIOS auslesen) mit dem "Oldie" G

Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
Benutzeravatar
Helle
Beiträge: 566
Registriert: 11.11.2004 16:13
Wohnort: Magdeburg

Portzugriff (z.B. BIOS auslesen) mit dem "Oldie" G

Beitrag von Helle »

Die Datei "giveio.sys" von Dale Roberts kann man wohl als die "Urmutter" aller Port-Zugriffs-Programme bezeichnen und ist auch heute noch Bestandteil diverser (neuer) Programme. Es wird damit nur Zugriff erteilt, die eigentliche Nutzung obliegt dem Programmierer. Hier ein Beispiel:

Code: Alles auswählen

;- Zugriff auf Ports, W2k, WXP
;- "Helle" Klaus Helbing, 02.03.2008, PB4.10
;- Für den Zugriff wird die Datei "giveio.sys" (der Klassiker!) von Dale Roberts verwendet
;- Diese Datei liegt in der DataSection bei 
;- Für die Dienst-Installation sind Administrator-Rechte notwendig!

Global Status.l=AllocateMemory(32)     ;hier Ersatz für eine Struktur, tut´s hier
Global hReg.l
Global DriverStart.l
Global hMgr.l
Global PortAdresse.w
Global WertB.c
Global WertW.w
Global WertL.l
;- Für Test
Global X.c
Global Y.c 
 
;------------------ Überprüfung, ob Registry-Eintrag für giveio existiert
Procedure RegTest()
hReg = RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "SYSTEM\CurrentControlSet\Services\giveio", 0, #KEY_ALL_ACCESS, @hKey) 
If hReg = 0
  MessageRequester("Statusmeldung von RegTest", "giveio ist im System schon registriert")
 Else
  MessageRequester("Statusmeldung von RegTest", "giveio ist dem System nicht bekannt")
EndIf
RegCloseKey_(hKey) 
EndProcedure 
;------------------  

;------------------ Dienst installieren
Procedure DienstInst()
hMgrC = OpenSCManager_(0, 0, #SC_MANAGER_CREATE_SERVICE) 
SystemDir$ = Space(255) 
FileL = GetSystemDirectory_(SystemDir$, 255) 
DriverDir$ = Left(SystemDir$, FileL) + "\drivers" 
OpenFile(0, DriverDir$ + "\giveio.sys")
If Lof(0) = 0                          ;Datei existierte also noch nicht 
  WriteData(0, ?giveio, 5248)
EndIf 
CloseFile(0)
hInst = CreateService_(hMgrC, "giveio", "giveio", #SERVICE_ALL_ACCESS, #SERVICE_KERNEL_DRIVER, #SERVICE_DEMAND_START, #SERVICE_ERROR_NORMAL, DriverDir$ + "\giveio.sys", #Null, #Null, #Null, #Null, #Null)
If hInst <> 0
  MessageRequester("Statusmeldung von DienstInst", "giveio wurde als Dienst installiert !")
 Else 
  MessageRequester("Statusmeldung von DienstInst", "giveio konnte nicht als Dienst installiert werden ! (ist evtl. schon installiert)")
EndIf   
CloseServiceHandle_(hInst)
CloseServiceHandle_(hMgrC)
EndProcedure 
;------------------

;------------------ DienstStatus ermitteln
Procedure DienstStatus()
hSvc = OpenService_(hMgr, "giveio", #SERVICE_QUERY_STATUS)
QueryServiceStatus_(hSvc, Status)      ;normalerweise wird dafür eine Struktur verwendet, aber es wird nur ein Wert benötigt
DriverStart = PeekL(Status+4)
If DriverStart = 4
  MessageRequester("Statusmeldung von DienstStatus", "giveio ist gestartet !")
 Else 
  MessageRequester("Statusmeldung von DienstStatus", "giveio ist nicht gestartet !")
EndIf   
CloseServiceHandle_(hSvc)
EndProcedure 
;------------------

;------------------ Dienst starten 
Procedure DienstStart()
hSvc = OpenService_(hMgr, "giveio", #SERVICE_ALL_ACCESS)
IsStart = StartService_(hSvc, 0, #Null)  ;0=war schon gestartet (=lässt sich nicht starten)  1=wurde hiermit gestartet
If IsStart = 1
  MessageRequester("Statusmeldung von DienstStart", "giveio wurde gestartet !")
 Else
  MessageRequester("Statusmeldung von DienstStart", "giveio konnte nicht gestartet werden ! (ist evtl. schon gestartet)")
EndIf     
CloseServiceHandle_(hSvc)
EndProcedure 
;------------------

;------------------ Dienst beenden 
Procedure DienstEnd()
hSvc = OpenService_(hMgr, "giveio", #SERVICE_ALL_ACCESS)
IsEnd = ControlService_(hSvc, #SERVICE_CONTROL_STOP, Status)
If IsEnd = 1
  MessageRequester("Statusmeldung von DienstEnd", "giveio wurde beendet !")      ;1=beendet
 Else
  MessageRequester("Statusmeldung von DienstEnd", "giveio wurde nicht beendet !")
EndIf 
CloseServiceHandle_(hSvc)
EndProcedure 
;------------------

;------------------ Dienst entfernen, wer mag, kann hier auch die Datei giveio.sys löschen
Procedure DienstRemove()
hSvc = OpenService_(hMgr, "giveio", #SERVICE_ALL_ACCESS)
IsDel = DeleteService_(hSvc)
If IsDel = 1
  MessageRequester("Statusmeldung von DienstRemove", "giveio wurde entfernt !")      ;1=entfernt
 Else
  MessageRequester("Statusmeldung von DienstRemove", "giveio konnte nicht entfernt werden !", 16)
EndIf 
CloseServiceHandle_(hSvc)
EndProcedure 
;------------------

;------------------ Device öffnen
Procedure OpenDevice()
hFrei = CreateFile_("\\.\giveio", #GENERIC_READ, 0, #Null, #OPEN_EXISTING, #FILE_ATTRIBUTE_NORMAL, #Null)
If hFrei <> #INVALID_HANDLE_VALUE
  MessageRequester("Statusmeldung von Device öffnen", "Portzugriff O.K.!")
  CloseHandle_(hFrei)
 Else
  MessageRequester("Statusmeldung von Device öffnen", "Kein Portzugriff !", 16)
EndIf
EndProcedure 
;------------------

;------------------ Byte lesen
Procedure InB(PortAdresse)
!mov dx,[p.v_PortAdresse]
!in al,dx
!mov [v_WertB],al
EndProcedure 
;------------------

;------------------ Word lesen
Procedure InW(PortAdresse)
!mov dx,[p.v_PortAdresse]
!in ax,dx
!mov [v_WertW],ax
EndProcedure 
;------------------

;------------------ DWord lesen
Procedure InL(PortAdresse)
!mov dx,[p.v_PortAdresse]
!in eax,dx
!mov [v_WertL],eax
EndProcedure 
;------------------

;------------------ Byte schreiben
Procedure OutB(PortAdresse, WertB)
!mov dx,[p.v_PortAdresse]
!mov al,[p.v_WertB]
!out dx,al
EndProcedure 
;------------------

;------------------ Word schreiben
Procedure OutW(PortAdresse, WertW)
!mov dx,[p.v_PortAdresse]
!mov ax,[p.v_WertW]
!out dx,ax
EndProcedure 
;------------------

;------------------ DWord schreiben
Procedure OutL(PortAdresse, WertL)
!mov dx,[p.v_PortAdresse]
!mov eax,[p.v_WertL]
!out dx,eax
EndProcedure 
;------------------

;hier Prozeduren für Strings bei Bedarf 

;------------------ Programm-Anfang Portzugriff
RegTest()                    ;ob giveio in Registry vorhanden
If hReg
  DienstInst()               ;war noch nicht installiert
EndIf 
hMgr = OpenSCManager_(#Null, #Null, #GENERIC_READ)    ;Handle für Zugriff auf den Dienst-Manager
DienstStatus()               ;bei Programmstart überprüfen
If DriverStart <> 4
  DienstStart()              ;noch nicht gestartet, also jetzt starten
EndIf 

OpenDevice()

;------------------ Test, sonst hier Programm mit Zugriff auf die Ports
;- Beispiele für die LPT- und COM-Ports gibt´s genug, versuchen´s wir mal mit dem BIOS
;- hier wird die BIOS-Uhr ausgelesen (Minute)
!in al,70h			             ;Port $70 einlesen, Bit 7 unberührt lassen!
!and al,10000000b		         ;Bits 0-6 löschen
!or al,2  		               ;Adresse setzen  2=Minuten
!out 70h,al			             ;Adresse in Adressregister schreiben
!in al,71h			             ;1 Byte aus BIOS-RAM in AL laden, Minute im gepackten BCD-Format
!mov dl,al
!and al,0fh                  ;Einer-Minute Low-Nibble
!shr dl,4                    ;Zehner-Minute High-Nibble
!mov [v_X],dl
!mov [v_Y],al
X$=Str(X) + Str(Y)
MessageRequester("Minuten vom Asm-Test", "Die BIOS-Uhr zeigt "+ X$ +" Minuten an !") 
;------------------ 

;- hier das Ganze nochmal in PB für die Stunden
InB($70)
WertB & %10000000
WertB | 4                    ;4=Stunden im BCD-Format
OutB($70, WertB)
InB($71)
WertBHilf = WertB
WertB & $f
WertBHilf >> 4
X$=Str(WertBHilf) + Str(WertB)
MessageRequester("Stunden vom PB-Test", "Die BIOS-Uhr zeigt "+ X$ +" Stunden an !") 
;------------------ 

;- Ende
If DriverStart <> 4
  DienstEnd()                ;war vorher nicht gestartet, also jetzt wieder beenden
EndIf 

;DienstRemove()               ;bei Bedarf, evtl. Rechner-Neustart
 
CloseServiceHandle_(hMgr)    ;hier erst beenden

End 
;==================================================================================================
  
;--------------------------------------------------------------------------------------------------  
DataSection                  ;giveio.sys hat eine Länge von 5248 Bytes
giveio:
  Data.b $4D, $5A, $90, $00, $03, $00, $00, $00, $04, $00, $00, $00, $FF, $FF, $00, $00
  Data.b $B8, $00, $00, $00, $00, $00, $00, $00, $40, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $80, $00, $00, $00
  Data.b $0E, $1F, $BA, $0E, $00, $B4, $09, $CD, $21, $B8, $01, $4C, $CD, $21, $54, $68
  Data.b $69, $73, $20, $70, $72, $6F, $67, $72, $61, $6D, $20, $63, $61, $6E, $6E, $6F
  Data.b $74, $20, $62, $65, $20, $72, $75, $6E, $20, $69, $6E, $20, $44, $4F, $53, $20
  Data.b $6D, $6F, $64, $65, $2E, $0D, $0D, $0A, $24, $00, $00, $00, $00, $00, $00, $00
  Data.b $50, $45, $00, $00, $4C, $01, $05, $00, $F5, $34, $63, $31, $A0, $06, $00, $00
  Data.b $7A, $00, $00, $00, $E0, $00, $06, $01, $0B, $01, $02, $32, $80, $01, $00, $00
  Data.b $C0, $02, $00, $00, $00, $00, $00, $00, $E5, $02, $00, $00, $40, $02, $00, $00
  Data.b $C0, $03, $00, $00, $00, $00, $01, $00, $20, $00, $00, $00, $20, $00, $00, $00
  Data.b $01, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00
  Data.b $80, $06, $00, $00, $40, $02, $00, $00, $55, $33, $00, $00, $01, $00, $00, $00
  Data.b $00, $00, $10, $00, $00, $10, $00, $00, $00, $00, $10, $00, $00, $10, $00, $00
  Data.b $00, $00, $00, $00, $10, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $80, $04, $00, $00, $92, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $20, $06, $00, $00, $34, $00, $00, $00, $C0, $03, $00, $00, $54, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $2E, $74, $65, $78, $74, $00, $00, $00
  Data.b $68, $01, $00, $00, $40, $02, $00, $00, $80, $01, $00, $00, $40, $02, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $20, $00, $00, $60
  Data.b $2E, $72, $64, $61, $74, $61, $00, $00, $54, $00, $00, $00, $C0, $03, $00, $00
  Data.b $60, $00, $00, $00, $C0, $03, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $40, $00, $00, $40, $2E, $64, $61, $74, $61, $00, $00, $00
  Data.b $4A, $00, $00, $00, $20, $04, $00, $00, $60, $00, $00, $00, $20, $04, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $40, $00, $00, $C0
  Data.b $2E, $69, $64, $61, $74, $61, $00, $00, $92, $01, $00, $00, $80, $04, $00, $00
  Data.b $A0, $01, $00, $00, $80, $04, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $40, $00, $00, $C0, $2E, $72, $65, $6C, $6F, $63, $00, $00
  Data.b $48, $00, $00, $00, $20, $06, $00, $00, $60, $00, $00, $00, $20, $06, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $40, $00, $00, $42
  Data.b $55, $B9, $09, $00, $00, $00, $8B, $EC, $83, $EC, $30, $56, $57, $BE, $24, $04
  Data.b $01, $00, $8D, $7D, $D0, $F3, $A5, $66, $A5, $83, $3D, $20, $04, $01, $00, $00
  Data.b $74, $11, $68, $00, $20, $00, $00, $A1, $20, $04, $01, $00, $50, $FF, $15, $E4
  Data.b $04, $01, $00, $8D, $45, $D0, $8D, $4D, $F8, $50, $51, $FF, $15, $E0, $04, $01
  Data.b $00, $8D, $4D, $F8, $51, $FF, $15, $DC, $04, $01, $00, $8B, $4D, $08, $FF, $71
  Data.b $04, $FF, $15, $F0, $04, $01, $00, $5F, $5E, $8B, $E5, $5D, $C2, $04, $00, $FF
  Data.b $74, $24, $04, $FF, $15, $D8, $04, $01, $00, $50, $E8, $F3, $00, $00, $00, $FF
  Data.b $35, $20, $04, $01, $00, $6A, $01, $E8, $E0, $00, $00, $00, $C2, $04, $00, $6A
  Data.b $01, $E8, $D9, $FF, $FF, $FF, $C3, $E8, $F3, $FF, $FF, $FF, $8B, $4C, $24, $08
  Data.b $33, $C0, $33, $D2, $89, $41, $1C, $89, $41, $18, $FF, $15, $F4, $04, $01, $00
  Data.b $33, $C0, $C2, $08, $00, $55, $B9, $07, $00, $00, $00, $8B, $EC, $83, $EC, $5C
  Data.b $56, $57, $BE, $4C, $04, $01, $00, $8D, $7D, $CC, $F3, $A5, $66, $A5, $BE, $24
  Data.b $04, $01, $00, $8D, $7D, $A4, $B9, $09, $00, $00, $00, $68, $00, $20, $00, $00
  Data.b $F3, $A5, $66, $A5, $FF, $15, $00, $05, $01, $00, $A3, $20, $04, $01, $00, $85
  Data.b $C0, $75, $07, $B8, $9A, $00, $00, $C0, $EB, $69, $8B, $3D, $20, $04, $01, $00
  Data.b $33, $C0, $B9, $00, $08, $00, $00, $F3, $AB, $8D, $45, $CC, $8D, $4D, $F4, $50
  Data.b $8B, $35, $E0, $04, $01, $00, $51, $FF, $D6, $8D, $4D, $A4, $8D, $45, $EC, $51
  Data.b $50, $FF, $D6, $8D, $4D, $FC, $8D, $55, $F4, $51, $8B, $75, $08, $6A, $00, $6A
  Data.b $00, $6A, $22, $52, $6A, $00, $56, $FF, $15, $FC, $04, $01, $00, $85, $C0, $7C
  Data.b $22, $8D, $45, $F4, $8D, $4D, $EC, $50, $51, $FF, $15, $F8, $04, $01, $00, $85
  Data.b $C0, $7C, $10, $C7, $46, $38, $C7, $02, $01, $00, $C7, $46, $34, $40, $02, $01
  Data.b $00, $33, $C0, $5F, $5E, $8B, $E5, $5D, $C2, $08, $00, $CC, $FF, $25, $E8, $04
  Data.b $01, $00, $FF, $25, $EC, $04, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $F5, $34, $63, $31, $00, $00, $00, $00, $01, $00, $00, $00
  Data.b $B0, $0C, $00, $00, $00, $00, $00, $00, $80, $06, $00, $00, $00, $00, $00, $00
  Data.b $F5, $34, $63, $31, $00, $00, $00, $00, $04, $00, $00, $00, $10, $01, $00, $00
  Data.b $00, $00, $00, $00, $30, $13, $00, $00, $00, $00, $00, $00, $F5, $34, $63, $31
  Data.b $00, $00, $00, $00, $03, $00, $00, $00, $30, $00, $00, $00, $00, $00, $00, $00
  Data.b $40, $14, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $5C, $00, $44, $00, $6F, $00, $73, $00, $44, $00, $65, $00
  Data.b $76, $00, $69, $00, $63, $00, $65, $00, $73, $00, $5C, $00, $67, $00, $69, $00
  Data.b $76, $00, $65, $00, $69, $00, $6F, $00, $00, $00, $00, $00, $5C, $00, $44, $00
  Data.b $65, $00, $76, $00, $69, $00, $63, $00, $65, $00, $5C, $00, $67, $00, $69, $00
  Data.b $76, $00, $65, $00, $69, $00, $6F, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $A8, $04, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $04, $06, $00, $00
  Data.b $D8, $04, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $92, $05, $00, $00, $1A, $05, $00, $00
  Data.b $32, $05, $00, $00, $4A, $05, $00, $00, $62, $05, $00, $00, $78, $05, $00, $00
  Data.b $08, $05, $00, $00, $A8, $05, $00, $00, $BE, $05, $00, $00, $D6, $05, $00, $00
  Data.b $E8, $05, $00, $00, $00, $00, $00, $00, $92, $05, $00, $00, $1A, $05, $00, $00
  Data.b $32, $05, $00, $00, $4A, $05, $00, $00, $62, $05, $00, $00, $78, $05, $00, $00
  Data.b $08, $05, $00, $00, $A8, $05, $00, $00, $BE, $05, $00, $00, $D6, $05, $00, $00
  Data.b $E8, $05, $00, $00, $00, $00, $00, $00, $C2, $00, $49, $6F, $44, $65, $6C, $65
  Data.b $74, $65, $44, $65, $76, $69, $63, $65, $00, $00, $C3, $00, $49, $6F, $44, $65
  Data.b $6C, $65, $74, $65, $53, $79, $6D, $62, $6F, $6C, $69, $63, $4C, $69, $6E, $6B
  Data.b $00, $00, $1E, $02, $52, $74, $6C, $49, $6E, $69, $74, $55, $6E, $69, $63, $6F
  Data.b $64, $65, $53, $74, $72, $69, $6E, $67, $00, $00, $72, $01, $4D, $6D, $46, $72
  Data.b $65, $65, $4E, $6F, $6E, $43, $61, $63, $68, $65, $64, $4D, $65, $6D, $6F, $72
  Data.b $79, $00, $04, $01, $4B, $65, $33, $38, $36, $53, $65, $74, $49, $6F, $41, $63
  Data.b $63, $65, $73, $73, $4D, $61, $70, $00, $02, $01, $4B, $65, $33, $38, $36, $49
  Data.b $6F, $53, $65, $74, $41, $63, $63, $65, $73, $73, $50, $72, $6F, $63, $65, $73
  Data.b $73, $00, $CD, $00, $49, $6F, $47, $65, $74, $43, $75, $72, $72, $65, $6E, $74
  Data.b $50, $72, $6F, $63, $65, $73, $73, $00, $FD, $00, $49, $6F, $66, $43, $6F, $6D
  Data.b $70, $6C, $65, $74, $65, $52, $65, $71, $75, $65, $73, $74, $00, $00, $BE, $00
  Data.b $49, $6F, $43, $72, $65, $61, $74, $65, $53, $79, $6D, $62, $6F, $6C, $69, $63
  Data.b $4C, $69, $6E, $6B, $00, $00, $BB, $00, $49, $6F, $43, $72, $65, $61, $74, $65
  Data.b $44, $65, $76, $69, $63, $65, $00, $00, $69, $01, $4D, $6D, $41, $6C, $6C, $6F
  Data.b $63, $61, $74, $65, $4E, $6F, $6E, $43, $61, $63, $68, $65, $64, $4D, $65, $6D
  Data.b $6F, $72, $79, $00, $6E, $74, $6F, $73, $6B, $72, $6E, $6C, $2E, $65, $78, $65
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $34, $00, $00, $00, $4E, $32, $5B, $32, $68, $32, $6F, $32
  Data.b $7D, $32, $87, $32, $93, $32, $A5, $32, $B1, $32, $DC, $32, $F3, $32, $FF, $32
  Data.b $16, $33, $1B, $33, $2C, $33, $42, $33, $69, $33, $7B, $33, $86, $33, $8D, $33
  Data.b $9E, $33, $A4, $33, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $7A, $00, $00, $00, $20, $00, $00, $00, $00, $00, $00, $00, $20, $00, $00, $00
  Data.b $40, $02, $00, $00, $C0, $03, $00, $00, $C0, $03, $00, $00, $00, $05, $00, $00
  Data.b $2E, $66, $69, $6C, $65, $00, $00, $00, $00, $00, $00, $00, $FE, $FF, $00, $00
  Data.b $67, $02, $43, $3A, $5C, $64, $61, $6C, $65, $5C, $64, $64, $6A, $5C, $64, $69
  Data.b $73, $74, $72, $69, $62, $5C, $67, $69, $76, $65, $69, $6F, $5C, $67, $69, $76
  Data.b $65, $69, $6F, $2E, $63, $00, $2E, $64, $61, $74, $61, $00, $00, $00, $20, $04
  Data.b $00, $00, $03, $00, $00, $00, $03, $01, $04, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $2E, $74, $65, $78, $74, $00
  Data.b $00, $00, $40, $02, $00, $00, $01, $00, $00, $00, $03, $01, $5F, $00, $00, $00
  Data.b $07, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $2E, $64
  Data.b $61, $74, $61, $00, $00, $00, $24, $04, $00, $00, $03, $00, $00, $00, $03, $01
  Data.b $26, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $02, $00
  Data.b $00, $00, $2E, $74, $65, $78, $74, $00, $00, $00, $9F, $02, $00, $00, $01, $00
  Data.b $00, $00, $03, $01, $20, $00, $00, $00, $04, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $01, $00, $00, $00, $2E, $64, $65, $62, $75, $67, $24, $46, $A0, $1A
  Data.b $00, $00, $06, $00, $00, $00, $03, $01, $10, $00, $00, $00, $01, $00, $00, $00
  Data.b $00, $00, $00, $00, $04, $00, $05, $00, $00, $00, $2E, $74, $65, $78, $74, $00
  Data.b $00, $00, $BF, $02, $00, $00, $01, $00, $00, $00, $03, $01, $08, $00, $00, $00
  Data.b $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $2E, $64
  Data.b $65, $62, $75, $67, $24, $46, $B0, $1A, $00, $00, $06, $00, $00, $00, $03, $01
  Data.b $10, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $06, $00, $05, $00
  Data.b $00, $00, $2E, $74, $65, $78, $74, $00, $00, $00, $C7, $02, $00, $00, $01, $00
  Data.b $00, $00, $03, $01, $1E, $00, $00, $00, $02, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $01, $00, $00, $00, $2E, $64, $65, $62, $75, $67, $24, $46, $C0, $1A
  Data.b $00, $00, $06, $00, $00, $00, $03, $01, $10, $00, $00, $00, $01, $00, $00, $00
  Data.b $00, $00, $00, $00, $08, $00, $05, $00, $00, $00, $2E, $74, $65, $78, $74, $00
  Data.b $00, $00, $E5, $02, $00, $00, $01, $00, $00, $00, $03, $01, $B6, $00, $00, $00
  Data.b $0A, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $2E, $64
  Data.b $61, $74, $61, $00, $00, $00, $4C, $04, $00, $00, $03, $00, $00, $00, $03, $01
  Data.b $1E, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $02, $00
  Data.b $00, $00, $2E, $69, $64, $61, $74, $61, $24, $36, $04, $06, $00, $00, $04, $00
  Data.b $00, $00, $03, $00, $2E, $69, $64, $61, $74, $61, $24, $35, $00, $05, $00, $00
  Data.b $04, $00, $00, $00, $03, $01, $04, $00, $00, $00, $01, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $01, $00, $58, $FA, $2E, $69, $64, $61, $74, $61, $24, $34
  Data.b $D0, $04, $00, $00, $04, $00, $00, $00, $03, $01, $04, $00, $00, $00, $01, $00
  Data.b $00, $00, $00, $00, $00, $00, $02, $00, $05, $00, $58, $FA, $2E, $69, $64, $61
  Data.b $74, $61, $24, $36, $E8, $05, $00, $00, $04, $00, $00, $00, $03, $01, $1C, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $02, $00, $05, $00, $58, $FA
  Data.b $2E, $69, $64, $61, $74, $61, $24, $35, $FC, $04, $00, $00, $04, $00, $00, $00
  Data.b $03, $01, $04, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $01, $00, $58, $FA, $2E, $69, $64, $61, $74, $61, $24, $34, $CC, $04, $00, $00
  Data.b $04, $00, $00, $00, $03, $01, $04, $00, $00, $00, $01, $00, $00, $00, $00, $00
  Data.b $00, $00, $02, $00, $05, $00, $58, $FA, $2E, $69, $64, $61, $74, $61, $24, $36
  Data.b $D6, $05, $00, $00, $04, $00, $00, $00, $03, $01, $12, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $02, $00, $05, $00, $58, $FA, $2E, $69, $64, $61
  Data.b $74, $61, $24, $35, $F8, $04, $00, $00, $04, $00, $00, $00, $03, $01, $04, $00
  Data.b $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $58, $FA
  Data.b $2E, $69, $64, $61, $74, $61, $24, $34, $C8, $04, $00, $00, $04, $00, $00, $00
  Data.b $03, $01, $04, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $02, $00
  Data.b $05, $00, $58, $FA, $2E, $69, $64, $61, $74, $61, $24, $36, $BE, $05, $00, $00
  Data.b $04, $00, $00, $00, $03, $01, $18, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $02, $00, $05, $00, $58, $FA, $2E, $69, $64, $61, $74, $61, $24, $35
  Data.b $F4, $04, $00, $00, $04, $00, $00, $00, $03, $01, $04, $00, $00, $00, $01, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $58, $FA, $2E, $69, $64, $61
  Data.b $74, $61, $24, $34, $C4, $04, $00, $00, $04, $00, $00, $00, $03, $01, $04, $00
  Data.b $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $02, $00, $05, $00, $58, $FA
  Data.b $2E, $69, $64, $61, $74, $61, $24, $36, $A8, $05, $00, $00, $04, $00, $00, $00
  Data.b $03, $01, $16, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $02, $00
  Data.b $05, $00, $58, $FA, $2E, $69, $64, $61, $74, $61, $24, $35, $D8, $04, $00, $00
  Data.b $04, $00, $00, $00, $03, $01, $04, $00, $00, $00, $01, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $01, $00, $58, $FA, $2E, $69, $64, $61, $74, $61, $24, $34
  Data.b $A8, $04, $00, $00, $04, $00, $00, $00, $03, $01, $04, $00, $00, $00, $01, $00
  Data.b $00, $00, $00, $00, $00, $00, $02, $00, $05, $00, $58, $FA, $2E, $69, $64, $61
  Data.b $74, $61, $24, $36, $92, $05, $00, $00, $04, $00, $00, $00, $03, $01, $16, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $02, $00, $05, $00, $58, $FA
  Data.b $2E, $74, $65, $78, $74, $00, $00, $00, $A2, $03, $00, $00, $01, $00, $00, $00
  Data.b $03, $01, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $01, $00, $58, $FA, $2E, $69, $64, $61, $74, $61, $24, $35, $EC, $04, $00, $00
  Data.b $04, $00, $00, $00, $03, $01, $04, $00, $00, $00, $01, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $01, $00, $58, $FA, $2E, $69, $64, $61, $74, $61, $24, $34
  Data.b $BC, $04, $00, $00, $04, $00, $00, $00, $03, $01, $04, $00, $00, $00, $01, $00
  Data.b $00, $00, $00, $00, $00, $00, $02, $00, $05, $00, $58, $FA, $2E, $69, $64, $61
  Data.b $74, $61, $24, $36, $78, $05, $00, $00, $04, $00, $00, $00, $03, $01, $1A, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $02, $00, $05, $00, $58, $FA
  Data.b $2E, $74, $65, $78, $74, $00, $00, $00, $9C, $03, $00, $00, $01, $00, $00, $00
  Data.b $03, $01, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $01, $00, $58, $FA, $2E, $69, $64, $61, $74, $61, $24, $35, $E8, $04, $00, $00
  Data.b $04, $00, $00, $00, $03, $01, $04, $00, $00, $00, $01, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $01, $00, $58, $FA, $2E, $69, $64, $61, $74, $61, $24, $34
  Data.b $B8, $04, $00, $00, $04, $00, $00, $00, $03, $01, $04, $00, $00, $00, $01, $00
  Data.b $00, $00, $00, $00, $00, $00, $02, $00, $05, $00, $58, $FA, $2E, $69, $64, $61
  Data.b $74, $61, $24, $36, $62, $05, $00, $00, $04, $00, $00, $00, $03, $01, $16, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $02, $00, $05, $00, $58, $FA
  Data.b $2E, $69, $64, $61, $74, $61, $24, $35, $E4, $04, $00, $00, $04, $00, $00, $00
  Data.b $03, $01, $04, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $01, $00, $58, $FA, $2E, $69, $64, $61, $74, $61, $24, $34, $B4, $04, $00, $00
  Data.b $04, $00, $00, $00, $03, $01, $04, $00, $00, $00, $01, $00, $00, $00, $00, $00
  Data.b $00, $00, $02, $00, $05, $00, $58, $FA, $2E, $69, $64, $61, $74, $61, $24, $36
  Data.b $4A, $05, $00, $00, $04, $00, $00, $00, $03, $01, $18, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $02, $00, $05, $00, $58, $FA, $2E, $69, $64, $61
  Data.b $74, $61, $24, $35, $E0, $04, $00, $00, $04, $00, $00, $00, $03, $01, $04, $00
  Data.b $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $58, $FA
  Data.b $2E, $69, $64, $61, $74, $61, $24, $34, $B0, $04, $00, $00, $04, $00, $00, $00
  Data.b $03, $01, $04, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $02, $00
  Data.b $05, $00, $58, $FA, $2E, $69, $64, $61, $74, $61, $24, $36, $32, $05, $00, $00
  Data.b $04, $00, $00, $00, $03, $01, $18, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $02, $00, $05, $00, $58, $FA, $2E, $69, $64, $61, $74, $61, $24, $35
  Data.b $DC, $04, $00, $00, $04, $00, $00, $00, $03, $01, $04, $00, $00, $00, $01, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $58, $FA, $2E, $69, $64, $61
  Data.b $74, $61, $24, $34, $AC, $04, $00, $00, $04, $00, $00, $00, $03, $01, $04, $00
  Data.b $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $02, $00, $05, $00, $58, $FA
  Data.b $2E, $69, $64, $61, $74, $61, $24, $36, $1A, $05, $00, $00, $04, $00, $00, $00
  Data.b $03, $01, $18, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $02, $00
  Data.b $05, $00, $58, $FA, $2E, $69, $64, $61, $74, $61, $24, $35, $F0, $04, $00, $00
  Data.b $04, $00, $00, $00, $03, $01, $04, $00, $00, $00, $01, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $01, $00, $58, $FA, $2E, $69, $64, $61, $74, $61, $24, $34
  Data.b $C0, $04, $00, $00, $04, $00, $00, $00, $03, $01, $04, $00, $00, $00, $01, $00
  Data.b $00, $00, $00, $00, $00, $00, $02, $00, $05, $00, $58, $FA, $2E, $69, $64, $61
  Data.b $74, $61, $24, $36, $08, $05, $00, $00, $04, $00, $00, $00, $03, $01, $12, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $02, $00, $05, $00, $58, $FA
  Data.b $68, $65, $61, $64, $65, $72, $00, $00, $00, $00, $00, $00, $FE, $FF, $00, $00
  Data.b $02, $00, $00, $00, $00, $00, $13, $00, $00, $00, $40, $02, $00, $00, $01, $00
  Data.b $20, $00, $02, $00, $00, $00, $00, $00, $A0, $00, $00, $00, $9F, $02, $00, $00
  Data.b $01, $00, $20, $00, $02, $00, $00, $00, $00, $00, $B6, $00, $00, $00, $BF, $02
  Data.b $00, $00, $01, $00, $20, $00, $02, $00, $00, $00, $00, $00, $C0, $00, $00, $00
  Data.b $C7, $02, $00, $00, $01, $00, $20, $00, $02, $00, $00, $00, $00, $00, $04, $00
  Data.b $00, $00, $E5, $02, $00, $00, $01, $00, $20, $00, $02, $00, $00, $00, $00, $00
  Data.b $DD, $01, $00, $00, $9C, $03, $00, $00, $01, $00, $00, $00, $02, $00, $00, $00
  Data.b $00, $00, $F4, $01, $00, $00, $A2, $03, $00, $00, $01, $00, $00, $00, $02, $00
  Data.b $00, $00, $00, $00, $5E, $01, $00, $00, $20, $04, $00, $00, $03, $00, $00, $00
  Data.b $02, $00, $00, $00, $00, $00, $23, $00, $00, $00, $24, $04, $00, $00, $03, $00
  Data.b $00, $00, $02, $00, $00, $00, $00, $00, $D8, $00, $00, $00, $4C, $04, $00, $00
  Data.b $03, $00, $00, $00, $02, $00, $00, $00, $00, $00, $B4, $02, $00, $00, $80, $04
  Data.b $00, $00, $04, $00, $00, $00, $02, $00, $00, $00, $00, $00, $CB, $03, $00, $00
  Data.b $94, $04, $00, $00, $04, $00, $00, $00, $02, $00, $00, $00, $00, $00, $0F, $02
  Data.b $00, $00, $D8, $04, $00, $00, $04, $00, $00, $00, $02, $00, $00, $00, $00, $00
  Data.b $82, $01, $00, $00, $DC, $04, $00, $00, $04, $00, $00, $00, $02, $00, $00, $00
  Data.b $00, $00, $A0, $01, $00, $00, $E0, $04, $00, $00, $04, $00, $00, $00, $02, $00
  Data.b $00, $00, $00, $00, $BE, $01, $00, $00, $E4, $04, $00, $00, $04, $00, $00, $00
  Data.b $02, $00, $00, $00, $00, $00, $18, $03, $00, $00, $E8, $04, $00, $00, $04, $00
  Data.b $00, $00, $02, $00, $00, $00, $00, $00, $35, $03, $00, $00, $EC, $04, $00, $00
  Data.b $04, $00, $00, $00, $02, $00, $00, $00, $00, $00, $6A, $01, $00, $00, $F0, $04
  Data.b $00, $00, $04, $00, $00, $00, $02, $00, $00, $00, $00, $00, $2C, $02, $00, $00
  Data.b $F4, $04, $00, $00, $04, $00, $00, $00, $02, $00, $00, $00, $00, $00, $48, $02
  Data.b $00, $00, $F8, $04, $00, $00, $04, $00, $00, $00, $02, $00, $00, $00, $00, $00
  Data.b $66, $02, $00, $00, $FC, $04, $00, $00, $04, $00, $00, $00, $02, $00, $00, $00
  Data.b $00, $00, $7F, $02, $00, $00, $00, $05, $00, $00, $04, $00, $00, $00, $02, $00
  Data.b $00, $00, $00, $00, $E2, $03, $00, $00, $04, $05, $00, $00, $04, $00, $00, $00
  Data.b $02, $00, $65, $6E, $64, $00, $00, $00, $00, $00, $80, $06, $00, $00, $FE, $FF
  Data.b $00, $00, $02, $00, $FC, $03, $00, $00, $5F, $44, $72, $69, $76, $65, $72, $45
  Data.b $6E, $74, $72, $79, $40, $38, $00, $5F, $47, $69, $76, $65, $69, $6F, $55, $6E
  Data.b $6C, $6F, $61, $64, $40, $34, $00, $3F, $3F, $5F, $43, $40, $5F, $31, $43, $47
  Data.b $40, $47, $50, $4C, $4D, $40, $3F, $24, $41, $41, $3F, $32, $3F, $24, $41, $41
  Data.b $44, $3F, $24, $41, $41, $6F, $3F, $24, $41, $41, $73, $3F, $24, $41, $41, $44
  Data.b $3F, $24, $41, $41, $65, $3F, $24, $41, $41, $76, $3F, $24, $41, $41, $69, $3F
  Data.b $24, $41, $41, $63, $3F, $24, $41, $41, $65, $3F, $24, $41, $41, $73, $3F, $24
  Data.b $41, $41, $3F, $32, $3F, $24, $41, $41, $67, $3F, $24, $41, $41, $69, $3F, $24
  Data.b $41, $41, $76, $3F, $24, $41, $41, $65, $3F, $24, $41, $41, $69, $3F, $24, $41
  Data.b $41, $6F, $3F, $24, $41, $41, $3F, $24, $41, $41, $3F, $24, $41, $41, $3F, $24
  Data.b $41, $41, $40, $00, $5F, $53, $65, $74, $49, $4F, $50, $65, $72, $6D, $69, $73
  Data.b $73, $69, $6F, $6E, $4D, $61, $70, $40, $34, $00, $5F, $47, $69, $76, $65, $49
  Data.b $4F, $40, $30, $00, $5F, $47, $69, $76, $65, $69, $6F, $43, $72, $65, $61, $74
  Data.b $65, $44, $69, $73, $70, $61, $74, $63, $68, $40, $38, $00, $3F, $3F, $5F, $43
  Data.b $40, $5F, $31, $42, $4F, $40, $4D, $50, $44, $45, $40, $3F, $24, $41, $41, $3F
  Data.b $32, $3F, $24, $41, $41, $44, $3F, $24, $41, $41, $65, $3F, $24, $41, $41, $76
  Data.b $3F, $24, $41, $41, $69, $3F, $24, $41, $41, $63, $3F, $24, $41, $41, $65, $3F
  Data.b $24, $41, $41, $3F, $32, $3F, $24, $41, $41, $67, $3F, $24, $41, $41, $69, $3F
  Data.b $24, $41, $41, $76, $3F, $24, $41, $41, $65, $3F, $24, $41, $41, $69, $3F, $24
  Data.b $41, $41, $6F, $3F, $24, $41, $41, $3F, $24, $41, $41, $3F, $24, $41, $41, $3F
  Data.b $24, $41, $41, $3F, $24, $41, $41, $3F, $24, $41, $41, $3F, $24, $41, $41, $6F
  Data.b $3F, $24, $41, $41, $3F, $24, $41, $41, $3F, $24, $41, $41, $3F, $24, $41, $41
  Data.b $40, $00, $5F, $49, $4F, $50, $4D, $5F, $6C, $6F, $63, $61, $6C, $00, $5F, $5F
  Data.b $69, $6D, $70, $5F, $5F, $49, $6F, $44, $65, $6C, $65, $74, $65, $44, $65, $76
  Data.b $69, $63, $65, $40, $34, $00, $5F, $5F, $69, $6D, $70, $5F, $5F, $49, $6F, $44
  Data.b $65, $6C, $65, $74, $65, $53, $79, $6D, $62, $6F, $6C, $69, $63, $4C, $69, $6E
  Data.b $6B, $40, $34, $00, $5F, $5F, $69, $6D, $70, $5F, $5F, $52, $74, $6C, $49, $6E
  Data.b $69, $74, $55, $6E, $69, $63, $6F, $64, $65, $53, $74, $72, $69, $6E, $67, $40
  Data.b $38, $00, $5F, $5F, $69, $6D, $70, $5F, $5F, $4D, $6D, $46, $72, $65, $65, $4E
  Data.b $6F, $6E, $43, $61, $63, $68, $65, $64, $4D, $65, $6D, $6F, $72, $79, $40, $38
  Data.b $00, $5F, $4B, $65, $33, $38, $36, $53, $65, $74, $49, $6F, $41, $63, $63, $65
  Data.b $73, $73, $4D, $61, $70, $40, $38, $00, $5F, $4B, $65, $33, $38, $36, $49, $6F
  Data.b $53, $65, $74, $41, $63, $63, $65, $73, $73, $50, $72, $6F, $63, $65, $73, $73
  Data.b $40, $38, $00, $5F, $5F, $69, $6D, $70, $5F, $5F, $49, $6F, $47, $65, $74, $43
  Data.b $75, $72, $72, $65, $6E, $74, $50, $72, $6F, $63, $65, $73, $73, $40, $30, $00
  Data.b $5F, $5F, $69, $6D, $70, $5F, $40, $49, $6F, $66, $43, $6F, $6D, $70, $6C, $65
  Data.b $74, $65, $52, $65, $71, $75, $65, $73, $74, $40, $38, $00, $5F, $5F, $69, $6D
  Data.b $70, $5F, $5F, $49, $6F, $43, $72, $65, $61, $74, $65, $53, $79, $6D, $62, $6F
  Data.b $6C, $69, $63, $4C, $69, $6E, $6B, $40, $38, $00, $5F, $5F, $69, $6D, $70, $5F
  Data.b $5F, $49, $6F, $43, $72, $65, $61, $74, $65, $44, $65, $76, $69, $63, $65, $40
  Data.b $32, $38, $00, $5F, $5F, $69, $6D, $70, $5F, $5F, $4D, $6D, $41, $6C, $6C, $6F
  Data.b $63, $61, $74, $65, $4E, $6F, $6E, $43, $61, $63, $68, $65, $64, $4D, $65, $6D
  Data.b $6F, $72, $79, $40, $34, $00, $5F, $49, $6F, $44, $65, $6C, $65, $74, $65, $44
  Data.b $65, $76, $69, $63, $65, $40, $34, $00, $6E, $74, $6F, $73, $6B, $72, $6E, $6C
  Data.b $5F, $49, $4D, $50, $4F, $52, $54, $5F, $44, $45, $53, $43, $52, $49, $50, $54
  Data.b $4F, $52, $00, $5F, $49, $6F, $44, $65, $6C, $65, $74, $65, $53, $79, $6D, $62
  Data.b $6F, $6C, $69, $63, $4C, $69, $6E, $6B, $40, $34, $00, $5F, $52, $74, $6C, $49
  Data.b $6E, $69, $74, $55, $6E, $69, $63, $6F, $64, $65, $53, $74, $72, $69, $6E, $67
  Data.b $40, $38, $00, $5F, $4D, $6D, $46, $72, $65, $65, $4E, $6F, $6E, $43, $61, $63
  Data.b $68, $65, $64, $4D, $65, $6D, $6F, $72, $79, $40, $38, $00, $5F, $5F, $69, $6D
  Data.b $70, $5F, $5F, $4B, $65, $33, $38, $36, $53, $65, $74, $49, $6F, $41, $63, $63
  Data.b $65, $73, $73, $4D, $61, $70, $40, $38, $00, $5F, $5F, $69, $6D, $70, $5F, $5F
  Data.b $4B, $65, $33, $38, $36, $49, $6F, $53, $65, $74, $41, $63, $63, $65, $73, $73
  Data.b $50, $72, $6F, $63, $65, $73, $73, $40, $38, $00, $5F, $49, $6F, $47, $65, $74
  Data.b $43, $75, $72, $72, $65, $6E, $74, $50, $72, $6F, $63, $65, $73, $73, $40, $30
  Data.b $00, $40, $49, $6F, $66, $43, $6F, $6D, $70, $6C, $65, $74, $65, $52, $65, $71
  Data.b $75, $65, $73, $74, $40, $38, $00, $5F, $49, $6F, $43, $72, $65, $61, $74, $65
  Data.b $53, $79, $6D, $62, $6F, $6C, $69, $63, $4C, $69, $6E, $6B, $40, $38, $00, $5F
  Data.b $49, $6F, $43, $72, $65, $61, $74, $65, $44, $65, $76, $69, $63, $65, $40, $32
  Data.b $38, $00, $5F, $4D, $6D, $41, $6C, $6C, $6F, $63, $61, $74, $65, $4E, $6F, $6E
  Data.b $43, $61, $63, $68, $65, $64, $4D, $65, $6D, $6F, $72, $79, $40, $34, $00, $4E
  Data.b $55, $4C, $4C, $5F, $49, $4D, $50, $4F, $52, $54, $5F, $44, $45, $53, $43, $52
  Data.b $49, $50, $54, $4F, $52, $00, $7F, $6E, $74, $6F, $73, $6B, $72, $6E, $6C, $5F
  Data.b $4E, $55, $4C, $4C, $5F, $54, $48, $55, $4E, $4B, $5F, $44, $41, $54, $41, $00
  Data.b $01, $00, $00, $00, $10, $01, $00, $00, $00, $04, $DC, $88, $2E, $5C, $69, $33
  Data.b $38, $36, $5C, $66, $72, $65, $65, $5C, $67, $69, $76, $65, $69, $6F, $2E, $73
  Data.b $79, $73, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $9F, $02, $00, $00, $20, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00
  Data.b $BF, $02, $00, $00, $08, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $C7, $02, $00, $00, $1E, $00, $00, $00, $00, $00, $00, $00, $02, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
EndDataSection 
Viel Spaß!

Gruß
Helle
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von NicTheQuick »

Coole Sache, werde ich demnächst mal testen, wenn ich wieder an meinem
Windows-Rechner sitze.
Bild
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

:D Dann braucht man ja inpout32.dll garnicht mehr.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Beitrag von Falko »

Sowas ähnliches hat ABBKlaus hier geschrieben.
Wenn ich das richtig gesehen habe, wird hierdurch die
Inpout32.dll auch nicht mehr benötigt.

http://www.purebasic.fr/english/viewtop ... t=inpout32

Beides sehr brauchbar und unabhängig von externen DLL's :allright: .

Aber Helles Source mit der Urmutter aller Portzugriffe bietet ja einiges mehr.
Danke :allright:

[Edit]
Habe es erstmal unter Vista getestet.
Unter'm Benutzerzugriff direkt aus PB gestartet, wird die Sys nicht erkannt.
Es funktioniert erst, wenn man den Source zur Exe compiliert und
ihn dann als Admin ausführen startet.


Gruß Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
Helle
Beiträge: 566
Registriert: 11.11.2004 16:13
Wohnort: Magdeburg

Beitrag von Helle »

Obwohl ich die Beiträge von ABBKLaus sehr schätze (der Mann hat richtig Ahnung!) ist mir der von Falko angeführte irgendwie durch die Lappen gegangen. Hätte mir sicher einiges an Arbeit erspart. Aber so ist eben eine (andere) Variante entstanden, das Prinzip ist natürlich identisch. Funktionieren wird es sicherlich mit mehreren (Portzugriff-) Sys-Dateien, wobei ich aber für die giveio keine rechtlichen Einschränkungen gefunden habe (wenn wer mehr weiß, bitte melden).
Als ich den Code von ABBKLaus sah fiel mir übrigens auf, daß zum Platz sparen die DataSection natürlich nicht Byte-weise angelegt werden muß (Long oder gleich Quad).

Gruß
Helle
Benutzeravatar
Rings
Beiträge: 971
Registriert: 29.08.2004 08:48

Beitrag von Rings »

Giveio wird meiner meinung nicht mit ner dll funktionieren.....
Rings hat geschrieben:ziert sich nich beim zitieren
Antworten