Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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-winehq
Commits
07d2a789
Commit
07d2a789
authored
May 08, 1999
by
Ove Kaaven
Committed by
Alexandre Julliard
May 08, 1999
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Moved DOS List of Lists initialization, and added the beginnings of
the DOS device structures.
parent
c4cd0bf6
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
192 additions
and
69 deletions
+192
-69
dosexe.h
include/dosexe.h
+1
-1
miscemu.h
include/miscemu.h
+7
-0
msdos.h
include/msdos.h
+10
-1
Makefile.in
msdos/Makefile.in
+1
-0
devices.c
msdos/devices.c
+168
-0
dosmem.c
msdos/dosmem.c
+1
-0
int21.c
msdos/int21.c
+4
-67
No files found.
include/dosexe.h
View file @
07d2a789
...
...
@@ -58,7 +58,6 @@ typedef struct _DOSEVENT {
extern
BOOL
MZ_InitTask
(
LPDOSTASK
lpDosTask
);
extern
void
MZ_KillModule
(
LPDOSTASK
lpDosTask
);
extern
LPDOSTASK
MZ_AllocDPMITask
(
HMODULE16
hModule
);
extern
void
DOSVM_QueueEvent
(
int
irq
,
int
priority
,
void
(
*
relay
)(
LPDOSTASK
,
PCONTEXT
,
void
*
),
void
*
data
);
#endif
/* linux-i386 */
...
...
@@ -69,6 +68,7 @@ extern BOOL MZ_CreateProcess( HFILE hFile, OFSTRUCT *ofs, LPCSTR cmdline, LPCSTR
BOOL
inherit
,
LPSTARTUPINFOA
startup
,
LPPROCESS_INFORMATION
info
);
extern
int
DOSVM_Enter
(
PCONTEXT
context
);
extern
void
DOSVM_QueueEvent
(
int
irq
,
int
priority
,
void
(
*
relay
)(
LPDOSTASK
,
PCONTEXT
,
void
*
),
void
*
data
);
extern
void
DOSVM_PIC_ioport_out
(
WORD
port
,
BYTE
val
);
extern
void
DOSVM_SetTimer
(
unsigned
ticks
);
extern
unsigned
DOSVM_GetTimer
(
void
);
...
...
include/miscemu.h
View file @
07d2a789
...
...
@@ -86,6 +86,9 @@ extern DWORD DOSMEM_CollateTable;
extern
DWORD
DOSMEM_ErrorCall
;
extern
DWORD
DOSMEM_ErrorBuffer
;
extern
struct
_DOS_LISTOFLISTS
*
DOS_LOL
;
extern
DWORD
DOS_LOLSeg
;
extern
BOOL
DOSMEM_Init
(
HMODULE16
hModule
);
extern
void
DOSMEM_Tick
(
WORD
timer
);
extern
WORD
DOSMEM_AllocSelector
(
WORD
);
...
...
@@ -98,6 +101,9 @@ extern LPVOID DOSMEM_MapRealToLinear(DWORD); /* real-mode to linear */
extern
LPVOID
DOSMEM_MapDosToLinear
(
UINT
);
/* linear DOS to Wine */
extern
UINT
DOSMEM_MapLinearToDos
(
LPVOID
);
/* linear Wine to DOS */
/* msdos/devices.c */
extern
void
DOSDEV_InstallDOSDevices
(
void
);
/* msdos/interrupts.c */
extern
FARPROC16
INT_GetPMHandler
(
BYTE
intnum
);
extern
void
INT_SetPMHandler
(
BYTE
intnum
,
FARPROC16
handler
);
...
...
@@ -134,6 +140,7 @@ extern void WINAPI INT_Int15Handler(CONTEXT*);
/* msdos/int16.c */
extern
void
WINAPI
INT_Int16Handler
(
CONTEXT
*
);
extern
int
WINAPI
INT_Int16AddChar
(
BYTE
ascii
,
BYTE
scan
);
/* msdos/int17.c */
extern
void
WINAPI
INT_Int17Handler
(
CONTEXT
*
);
...
...
include/msdos.h
View file @
07d2a789
...
...
@@ -55,6 +55,15 @@ typedef struct
typedef
struct
{
DWORD
next_dev
;
WORD
attr
;
WORD
strategy
;
WORD
interrupt
;
char
name
[
8
];
}
DOS_DEVICE_HEADER
;
typedef
struct
_DOS_LISTOFLISTS
{
WORD
CX_Int21_5e01
;
/* contents of CX from INT 21/AX=5E01h */
WORD
LRU_count_FCB_cache
;
WORD
LRU_count_FCB_open
;
...
...
@@ -76,7 +85,7 @@ typedef struct
WORD
nr_protect_FCB
;
BYTE
nr_block_dev
;
BYTE
nr_avail_drive_letters
;
BYTE
NUL_dev_header
[
18
]
;
DOS_DEVICE_HEADER
NUL_dev
WINE_PACKED
;
BYTE
nr_drives_JOINed
;
WORD
ptr_spec_prg_names
WINE_PACKED
;
DWORD
ptr_SETVER_prg_list
WINE_PACKED
;
...
...
msdos/Makefile.in
View file @
07d2a789
...
...
@@ -6,6 +6,7 @@ VPATH = @srcdir@
MODULE
=
msdos
C_SRCS
=
\
devices.c
\
dosconf.c
\
dosmem.c
\
dpmi.c
\
...
...
msdos/devices.c
0 → 100644
View file @
07d2a789
/*
* DOS devices
*
* Copyright 1999 Ove Kven
*/
#include <stdlib.h>
#include <string.h>
#include "wine/winbase16.h"
#include "msdos.h"
#include "miscemu.h"
#include "debug.h"
#include "pshpack1.h"
typedef
struct
{
DOS_DEVICE_HEADER
hdr
;
BYTE
ljmp1
;
RMCBPROC
strategy
;
BYTE
ljmp2
;
RMCBPROC
interrupt
;
}
WINEDEV
;
#include "poppack.h"
DOS_LISTOFLISTS
*
DOS_LOL
;
DWORD
DOS_LOLSeg
;
#define NONEXT ((DWORD)-1)
#define ATTR_STDIN 0x0001
#define ATTR_STDOUT 0x0002
#define ATTR_NUL 0x0004
#define ATTR_CLOCK 0x0008
#define ATTR_FASTCON 0x0010
#define ATTR_REMOVABLE 0x0800
#define ATTR_NONIBM 0x2000
/* block devices */
#define ATTR_UNTILBUSY 0x2000
/* char devices */
#define ATTR_IOCTL 0x4000
#define ATTR_CHAR 0x8000
#define LJMP 0x9a
static
void
nul_strategy
(
CONTEXT
*
ctx
)
{
}
static
void
nul_interrupt
(
CONTEXT
*
ctx
)
{
}
static
void
con_strategy
(
CONTEXT
*
ctx
)
{
}
static
void
con_interrupt
(
CONTEXT
*
ctx
)
{
}
#define STRATEGY_OFS sizeof(DOS_DEVICE_HEADER)
#define INTERRUPT_OFS STRATEGY_OFS+5
static
DOS_DEVICE_HEADER
dev_nul_hdr
=
{
NONEXT
,
ATTR_CHAR
|
ATTR_NUL
,
STRATEGY_OFS
,
INTERRUPT_OFS
,
"NUL "
};
static
WINEDEV
devs
=
{
{
NONEXT
,
ATTR_CHAR
|
ATTR_STDIN
|
ATTR_STDOUT
|
ATTR_FASTCON
,
STRATEGY_OFS
,
INTERRUPT_OFS
,
"CON "
},
LJMP
,
con_strategy
,
LJMP
,
con_interrupt
};
#define nr_devs (sizeof(devs)/sizeof(WINEDEV))
static
void
InitListOfLists
()
{
/*
Output of DOS 6.22:
0133:0020 6A 13-33 01 CC 00 33 01 59 00 j.3...3.Y.
0133:0030 70 00 00 00 72 02 00 02-6D 00 33 01 00 00 2E 05 p...r...m.3.....
0133:0040 00 00 FC 04 00 00 03 08-92 21 11 E0 04 80 C6 0D .........!......
0133:0050 CC 0D 4E 55 4C 20 20 20-20 20 00 00 00 00 00 00 ..NUL ......
0133:0060 00 4B BA C1 06 14 00 00-00 03 01 00 04 70 CE FF .K...........p..
0133:0070 FF 00 00 00 00 00 00 00-00 01 00 00 0D 05 00 00 ................
0133:0080 00 FF FF 00 00 00 00 FE-00 00 F8 03 FF 9F 70 02 ..............p.
0133:0090 D0 44 C8 FD D4 44 C8 FD-D4 44 C8 FD D0 44 C8 FD .D...D...D...D..
0133:00A0 D0 44 C8 FD D0 44 .D...D
*/
DOS_LOL
->
CX_Int21_5e01
=
0x0
;
DOS_LOL
->
LRU_count_FCB_cache
=
0x0
;
DOS_LOL
->
LRU_count_FCB_open
=
0x0
;
DOS_LOL
->
OEM_func_handler
=
-
1
;
/* not available */
DOS_LOL
->
INT21_offset
=
0x0
;
DOS_LOL
->
sharing_retry_count
=
3
;
DOS_LOL
->
sharing_retry_delay
=
1
;
DOS_LOL
->
ptr_disk_buf
=
0x0
;
DOS_LOL
->
offs_unread_CON
=
0x0
;
DOS_LOL
->
seg_first_MCB
=
0x0
;
DOS_LOL
->
ptr_first_DPB
=
0x0
;
DOS_LOL
->
ptr_first_SysFileTable
=
0x0
;
DOS_LOL
->
ptr_clock_dev_hdr
=
0x0
;
DOS_LOL
->
ptr_CON_dev_hdr
=
0x0
;
DOS_LOL
->
max_byte_per_sec
=
512
;
DOS_LOL
->
ptr_disk_buf_info
=
0x0
;
DOS_LOL
->
ptr_array_CDS
=
0x0
;
DOS_LOL
->
ptr_sys_FCB
=
0x0
;
DOS_LOL
->
nr_protect_FCB
=
0x0
;
DOS_LOL
->
nr_block_dev
=
0x0
;
DOS_LOL
->
nr_avail_drive_letters
=
26
;
/* A - Z */
DOS_LOL
->
nr_drives_JOINed
=
0x0
;
DOS_LOL
->
ptr_spec_prg_names
=
0x0
;
DOS_LOL
->
ptr_SETVER_prg_list
=
0x0
;
/* no SETVER list */
DOS_LOL
->
DOS_HIGH_A20_func_offs
=
0x0
;
DOS_LOL
->
PSP_last_exec
=
0x0
;
DOS_LOL
->
BUFFERS_val
=
99
;
/* maximum: 99 */
DOS_LOL
->
BUFFERS_nr_lookahead
=
8
;
/* maximum: 8 */
DOS_LOL
->
boot_drive
=
3
;
/* C: */
DOS_LOL
->
flag_DWORD_moves
=
0x01
;
/* i386+ */
DOS_LOL
->
size_extended_mem
=
0xf000
;
/* very high value */
}
void
DOSDEV_InstallDOSDevices
(
void
)
{
WINEDEV
*
dev
;
DOS_DEVICE_HEADER
*
pdev
;
UINT16
seg
;
int
n
;
WORD
ofs
=
sizeof
(
DOS_LISTOFLISTS
)
-
sizeof
(
DOS_DEVICE_HEADER
);
/* allocate DOS data segment or something */
DOS_LOLSeg
=
GlobalDOSAlloc16
(
ofs
+
sizeof
(
WINEDEV
)
+
sizeof
(
devs
));
seg
=
HIWORD
(
DOS_LOLSeg
);
DOS_LOL
=
PTR_SEG_OFF_TO_LIN
(
LOWORD
(
DOS_LOLSeg
),
0
);
InitListOfLists
();
/* copy first device (NUL) */
pdev
=
&
(
DOS_LOL
->
NUL_dev
);
memcpy
(
pdev
,
&
dev_nul_hdr
,
sizeof
(
DOS_DEVICE_HEADER
));
pdev
->
strategy
+=
ofs
;
pdev
->
interrupt
+=
ofs
;
/* set up dev so we can copy over the rest */
dev
=
(
WINEDEV
*
)(((
char
*
)
DOS_LOL
)
+
ofs
);
dev
[
0
].
ljmp1
=
LJMP
;
dev
[
0
].
strategy
=
(
RMCBPROC
)
DPMI_AllocInternalRMCB
(
nul_strategy
);
dev
[
0
].
ljmp2
=
LJMP
;
dev
[
0
].
interrupt
=
(
RMCBPROC
)
DPMI_AllocInternalRMCB
(
nul_interrupt
);
dev
++
;
ofs
+=
sizeof
(
WINEDEV
);
memcpy
(
dev
,
&
devs
,
sizeof
(
devs
));
for
(
n
=
0
;
n
<
nr_devs
;
n
++
)
{
pdev
->
next_dev
=
PTR_SEG_OFF_TO_SEGPTR
(
seg
,
ofs
);
dev
[
n
].
hdr
.
strategy
+=
ofs
;
dev
[
n
].
hdr
.
interrupt
+=
ofs
;
dev
[
n
].
strategy
=
(
RMCBPROC
)
DPMI_AllocInternalRMCB
(
dev
[
n
].
strategy
);
dev
[
n
].
interrupt
=
(
RMCBPROC
)
DPMI_AllocInternalRMCB
(
dev
[
n
].
interrupt
);
ofs
+=
sizeof
(
WINEDEV
);
pdev
=
&
(
dev
[
n
].
hdr
);
}
}
msdos/dosmem.c
View file @
07d2a789
...
...
@@ -407,6 +407,7 @@ BOOL DOSMEM_Init(HMODULE16 hModule)
DOSMEM_InitCollateTable
();
DOSMEM_InitErrorTable
();
DOSMEM_InitDPMI
();
DOSDEV_InstallDOSDevices
();
}
else
{
...
...
msdos/int21.c
View file @
07d2a789
...
...
@@ -85,9 +85,6 @@ struct DosHeap {
static
struct
DosHeap
*
heap
;
static
WORD
DosHeapHandle
;
WORD
sharing_retries
=
3
;
/* number of retries at sharing violation */
WORD
sharing_pause
=
1
;
/* pause between retries */
extern
char
TempDirectory
[];
static
BOOL
INT21_CreateHeap
(
void
)
...
...
@@ -940,64 +937,6 @@ static WORD INT21_GetCurrentPSP()
}
SEGPTR
INT21_GetListOfLists
()
{
static
DOS_LISTOFLISTS
*
LOL
;
static
SEGPTR
seg_LOL
;
/*
Output of DOS 6.22:
0133:0020 6A 13-33 01 CC 00 33 01 59 00 j.3...3.Y.
0133:0030 70 00 00 00 72 02 00 02-6D 00 33 01 00 00 2E 05 p...r...m.3.....
0133:0040 00 00 FC 04 00 00 03 08-92 21 11 E0 04 80 C6 0D .........!......
0133:0050 CC 0D 4E 55 4C 20 20 20-20 20 00 00 00 00 00 00 ..NUL ......
0133:0060 00 4B BA C1 06 14 00 00-00 03 01 00 04 70 CE FF .K...........p..
0133:0070 FF 00 00 00 00 00 00 00-00 01 00 00 0D 05 00 00 ................
0133:0080 00 FF FF 00 00 00 00 FE-00 00 F8 03 FF 9F 70 02 ..............p.
0133:0090 D0 44 C8 FD D4 44 C8 FD-D4 44 C8 FD D0 44 C8 FD .D...D...D...D..
0133:00A0 D0 44 C8 FD D0 44 .D...D
*/
if
(
!
LOL
)
{
LOL
=
SEGPTR_ALLOC
(
sizeof
(
DOS_LISTOFLISTS
));
LOL
->
CX_Int21_5e01
=
0x0
;
LOL
->
LRU_count_FCB_cache
=
0x0
;
LOL
->
LRU_count_FCB_open
=
0x0
;
LOL
->
OEM_func_handler
=
-
1
;
/* not available */
LOL
->
INT21_offset
=
0x0
;
LOL
->
sharing_retry_count
=
sharing_retries
;
/* default value: 3 */
LOL
->
sharing_retry_delay
=
sharing_pause
;
/* default value: 1 */
LOL
->
ptr_disk_buf
=
0x0
;
LOL
->
offs_unread_CON
=
0x0
;
LOL
->
seg_first_MCB
=
0x0
;
LOL
->
ptr_first_DPB
=
0x0
;
LOL
->
ptr_first_SysFileTable
=
0x0
;
LOL
->
ptr_clock_dev_hdr
=
0x0
;
LOL
->
ptr_CON_dev_hdr
=
0x0
;
LOL
->
max_byte_per_sec
=
512
;
LOL
->
ptr_disk_buf_info
=
0x0
;
LOL
->
ptr_array_CDS
=
0x0
;
LOL
->
ptr_sys_FCB
=
0x0
;
LOL
->
nr_protect_FCB
=
0x0
;
LOL
->
nr_block_dev
=
0x0
;
LOL
->
nr_avail_drive_letters
=
26
;
/* A - Z */
LOL
->
nr_drives_JOINed
=
0x0
;
LOL
->
ptr_spec_prg_names
=
0x0
;
LOL
->
ptr_SETVER_prg_list
=
0x0
;
/* no SETVER list */
LOL
->
DOS_HIGH_A20_func_offs
=
0x0
;
LOL
->
PSP_last_exec
=
0x0
;
LOL
->
BUFFERS_val
=
99
;
/* maximum: 99 */
LOL
->
BUFFERS_nr_lookahead
=
8
;
/* maximum: 8 */
LOL
->
boot_drive
=
3
;
/* C: */
LOL
->
flag_DWORD_moves
=
0x01
;
/* i386+ */
LOL
->
size_extended_mem
=
0xf000
;
/* very high value */
}
if
(
!
seg_LOL
)
seg_LOL
=
SEGPTR_GET
(
LOL
);
return
seg_LOL
+
(
WORD
)
&
((
DOS_LISTOFLISTS
*
)
0
)
->
ptr_first_DPB
;
}
/***********************************************************************
* INT21_GetExtendedError
*/
...
...
@@ -1723,9 +1662,9 @@ void WINAPI DOS3Call( CONTEXT *context )
SET_CFLAG
(
context
);
break
;
}
sharing_pause
=
CX_reg
(
context
);
DOS_LOL
->
sharing_retry_delay
=
CX_reg
(
context
);
if
(
!
DX_reg
(
context
))
sharing_retries
=
DX_reg
(
context
);
DOS_LOL
->
sharing_retry_count
=
DX_reg
(
context
);
RESET_CFLAG
(
context
);
break
;
...
...
@@ -1909,10 +1848,8 @@ void WINAPI DOS3Call( CONTEXT *context )
case
0x52
:
/* "SYSVARS" - GET LIST OF LISTS */
TRACE
(
int21
,
"SYSVARS - GET LIST OF LISTS
\n
"
);
{
SEGPTR
lol
;
lol
=
INT21_GetListOfLists
();
ES_reg
(
context
)
=
HIWORD
(
lol
);
BX_reg
(
context
)
=
LOWORD
(
lol
);
ES_reg
(
context
)
=
ISV86
(
context
)
?
HIWORD
(
DOS_LOLSeg
)
:
LOWORD
(
DOS_LOLSeg
);
BX_reg
(
context
)
=
FIELD_OFFSET
(
DOS_LISTOFLISTS
,
ptr_first_DPB
);
}
break
;
...
...
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