Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
d72178a1
Commit
d72178a1
authored
Apr 11, 2006
by
Petr Tesarik
Committed by
Alexandre Julliard
Apr 11, 2006
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winedos: Move all device driver initialization code to a newly written
function DOSDEV_SetupDevice().
parent
07d77c28
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
35 additions
and
22 deletions
+35
-22
devices.c
dlls/winedos/devices.c
+33
-22
dosexe.h
dlls/winedos/dosexe.h
+2
-0
No files found.
dlls/winedos/devices.c
View file @
d72178a1
...
...
@@ -101,6 +101,7 @@ typedef struct
{
DOS_LISTOFLISTS
lol
;
DOS_DEVICE_HEADER
dev
[
NR_DEVS
-
1
];
DOS_DEVICE_HEADER
*
last_dev
;
/* ptr to last registered device driver */
WINEDEV_THUNK
thunk
[
NR_DEVS
];
REQ_IO
req
;
BYTE
buffer
[
CON_BUFFER
];
...
...
@@ -415,6 +416,29 @@ Output of DOS 6.22:
DOS_LOL
->
size_extended_mem
=
0xf000
;
/* very high value */
}
void
DOSDEV_SetupDevice
(
const
WINEDEV
*
devinfo
,
WORD
seg
,
WORD
off_dev
,
WORD
off_thunk
)
{
DOS_DEVICE_HEADER
*
dev
=
PTR_REAL_TO_LIN
(
seg
,
off_dev
);
WINEDEV_THUNK
*
thunk
=
PTR_REAL_TO_LIN
(
seg
,
off_thunk
);
DOS_DATASEG
*
dataseg
=
(
DOS_DATASEG
*
)
DOSMEM_LOL
();
dev
->
attr
=
devinfo
->
attr
;
dev
->
strategy
=
off_thunk
+
FIELD_OFFSET
(
WINEDEV_THUNK
,
ljmp1
);
dev
->
interrupt
=
off_thunk
+
FIELD_OFFSET
(
WINEDEV_THUNK
,
ljmp2
);
memcpy
(
dev
->
name
,
devinfo
->
name
,
8
);
thunk
->
ljmp1
=
LJMP
;
thunk
->
strategy
=
DPMI_AllocInternalRMCB
(
devinfo
->
strategy
);
thunk
->
ljmp2
=
LJMP
;
thunk
->
interrupt
=
DPMI_AllocInternalRMCB
(
devinfo
->
interrupt
);
dev
->
next_dev
=
NONEXT
;
if
(
dataseg
->
last_dev
)
dataseg
->
last_dev
->
next_dev
=
MAKESEGPTR
(
seg
,
off_dev
);
dataseg
->
last_dev
=
dev
;
}
void
DOSDEV_InstallDOSDevices
(
void
)
{
DOS_DATASEG
*
dataseg
;
...
...
@@ -435,31 +459,18 @@ void DOSDEV_InstallDOSDevices(void)
InitListOfLists
(
&
dataseg
->
lol
);
/* Set up first device (NUL) */
dataseg
->
l
ol
.
NUL_dev
.
next_dev
=
MAKESEGPTR
(
seg
,
DOS_DATASEG_OFF
(
dev
[
0
]))
;
dataseg
->
lol
.
NUL_dev
.
attr
=
devs
[
0
].
attr
;
dataseg
->
lol
.
NUL_dev
.
strategy
=
DOS_DATASEG_OFF
(
thunk
[
0
].
ljmp1
);
dataseg
->
lol
.
NUL_dev
.
interrupt
=
DOS_DATASEG_OFF
(
thunk
[
0
].
ljmp2
);
memcpy
(
dataseg
->
lol
.
NUL_dev
.
name
,
devs
[
0
].
name
,
8
);
dataseg
->
l
ast_dev
=
NULL
;
DOSDEV_SetupDevice
(
&
devs
[
0
],
seg
,
DOS_DATASEG_OFF
(
lol
.
NUL_dev
),
DOS_DATASEG_OFF
(
thunk
[
0
])
);
/* Set up the remaining devices */
for
(
n
=
1
;
n
<
NR_DEVS
;
n
++
)
{
dataseg
->
dev
[
n
-
1
].
next_dev
=
(
n
+
1
)
==
NR_DEVS
?
NONEXT
:
MAKESEGPTR
(
seg
,
DOS_DATASEG_OFF
(
dev
[
n
]));
dataseg
->
dev
[
n
-
1
].
attr
=
devs
[
n
].
attr
;
dataseg
->
dev
[
n
-
1
].
strategy
=
DOS_DATASEG_OFF
(
thunk
[
n
].
ljmp1
);
dataseg
->
dev
[
n
-
1
].
interrupt
=
DOS_DATASEG_OFF
(
thunk
[
n
].
ljmp2
);
memcpy
(
dataseg
->
dev
[
n
-
1
].
name
,
devs
[
n
].
name
,
8
);
}
/* Set up thunks */
for
(
n
=
0
;
n
<
NR_DEVS
;
n
++
)
{
dataseg
->
thunk
[
n
].
ljmp1
=
LJMP
;
dataseg
->
thunk
[
n
].
strategy
=
DPMI_AllocInternalRMCB
(
devs
[
n
].
strategy
);
dataseg
->
thunk
[
n
].
ljmp2
=
LJMP
;
dataseg
->
thunk
[
n
].
interrupt
=
DPMI_AllocInternalRMCB
(
devs
[
n
].
interrupt
);
}
DOSDEV_SetupDevice
(
&
devs
[
n
],
seg
,
DOS_DATASEG_OFF
(
dev
[
n
-
1
]),
DOS_DATASEG_OFF
(
thunk
[
n
])
);
/* CON is device 1 */
dataseg
->
lol
.
ptr_CON_dev_hdr
=
MAKESEGPTR
(
seg
,
DOS_DATASEG_OFF
(
dev
[
0
]));
...
...
dlls/winedos/dosexe.h
View file @
d72178a1
...
...
@@ -366,6 +366,8 @@ extern UINT WINAPI DOSVM_GetTimer( void );
/* devices.c */
extern
void
DOSDEV_InstallDOSDevices
(
void
);
extern
void
DOSDEV_SetupDevice
(
const
WINEDEV
*
devinfo
,
WORD
seg
,
WORD
off_dev
,
WORD
off_thunk
);
extern
DWORD
DOSDEV_Console
(
void
);
extern
DWORD
DOSDEV_FindCharDevice
(
char
*
name
);
extern
int
DOSDEV_Peek
(
DWORD
dev
,
BYTE
*
data
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment