From: Edenyard <mail@edenyard.co.uk>
To: Bart Oldeman <bartoldeman@users.sourceforge.net>
Cc: linux-msdos@vger.kernel.org
Subject: Re: Can I use DOSEMU for testing device driver code?
Date: Sat, 14 Feb 2004 12:52:10 +0000 [thread overview]
Message-ID: <402E19FA.1050704@edenyard.co.uk> (raw)
In-Reply-To: <Pine.LNX.4.44.0402131157050.16608-100000@pg5.enm.bris.ac.uk>
Many thanks for your message, Bart!
> Anyway, try to run
> dosemu -D+iTcw -o log
>
> look at the contents of log and see if anything suspect happens, ie. does
> dosemu open the ports in the first place, does it read the right config
> file and so on.
I've done that and I've tried two different methods with the COM port to
try and find out exactly what's happening. Before I go any further, I
should say that it's DOSEMU 1.1.99 running on a 2.4.22 kernel on an
Athlon 1GHz. The PC has the standard two serial ports: COM1/ttyS0 at
0x3f8 and COM2/ttyS1 at 0x2f8. I've appended the fragment of my DOS prog
(written in Power Basic) to the end of this message (after the log
outputs) that you can see what I'm trying to do.
Here are the results:
First method - in this, I attempt to drive the COM port directly. This
results in an error message which says that there's a conflict between
COM1 and std port i/o.
The relevant lines from dosemu.conf are:
$_com1 = "/dev/ttyS0 irq 4"
$_ports = " fast range 0x3f8,0x3ff"
What happens when I run my DOS prog is that the RTS signal appears to be
perfectly timed to the data coming out of the TX pin on the serial port
connector. Unfortunately (probably because of the port conflict?) I
can't read any data coming back into the serial connector.
Here's a rough ASCII representation of what the oscilloscope (connected
to the serial connector) displays:
RTS pin: _____| |______________________________
TX pin: -------XXXXXXXXXXXXXXXXX-------------------------------
I've copied the contents of the log file to the end of this message in
the section headed "DOSEMU log - Method 1"
Second method - in this, I don't attempt to drive the COM port directly.
Now there's no error message about conflicts, but the data doesn't come
out of the TX pin of the serial port connector at the right time, which
means that the RTS signal timing is all wrong with respect to the
transmitted data stream. I also see that my prog never has to wait for
the UART to send a character before loading the next one in. That seems
very odd! This prog runs at 1200 baud, so you can see that it should
take about 10ms for each character to shift out of the UART TX register.
Running DOSEMU in this second method, it takes roughly 20 MICROSECONDS
to send a character!! Is this because DOSEMU is emulating the hardware -
is that the correct term for it?
Another rough ASCII wave chart:
RTS pin: _____| |____________________________________________________
TX pin: ------------XXXXXXXXXXXXXXXXX-------------------------------
(Note that the prog thinks that all the characters were sent while RTS
was on, but the characters don't actually come out of the UART until
much later - then it's too late!)
Here are the relevant lines in dosemu.conf for method 2:
$_com1 = "/dev/ttyS0 irq 4"
$_ports = ""
I've copied the contents of that log file also to the end of this
message in the section headed "DOSEMU log - Method 2"
So - to summarise my position at the moment: either (A) I get a conflict
between COM1 and the existing port driver but I can get RTS and TX
signals timed correctly at the connector; or (B) I can have no port
conflict but there seems to be no correct relationship between driving
the RTS signal and the TX data coming out of the connector.
The problem in (B) seems to be that all of my transmitted characters
disappear into a sort of 'virtual' UART to be transmitted later, whilst
the RTS signal seems to come out of the port in 'real' time.
And to summarise my questions: (A) how can I avoid a port conflict an
dreceive data if I want to drive the port directly? (B) how can I make
sure that the timing of RTS and the TX data is correct if I don't drive
the port directly?
The 2 logs and the programme fragment are below. Sorry for the length
of this message. I'd be very grateful for any help or clues that you can
offer me.
Cheers,
Gerald.
============================================================================
DOSEMU log - Method 1:
============================================================================
CONF: config variable parser_version_3 set
CONF: config variable c_system set
CONF: Parsing built-in dosemu.conf file.
CONF: config variable version_3_style_used set
CONF: Parsing built-in global.conf file.
CONF: config variable version_3_style_used unset
CONF: config variable version_3_style_used set
CONF: opened include file /etc/dosemu/dosemu.conf
CONF: closed include file /etc/dosemu/dosemu.conf
debug flags: -a+cw
CONF: Enabling use of pentium timer
CONF: dosbanner on
CONF: timer freq=18, update=54925
CONF: CPU set to 586
CONF: 8192k bytes XMS memory
CONF: 1024k bytes EMS memory
CONF: EMS-frame = 0xe000
CONF: DPMI-Server on
CONF: config.emusys = 'EMU'
CONF: dosemu running on console
SER: directory /var/lock namestub LCK.. binary No
SER: /dev/ttyS0 port 0 int 4
MOUSE: /dev/mouse type 7 using internaldriver: yes, emulate3buttons: no
baudrate: 0
CONF: Keyboard-layout keyb-user
CONF: Keyboard-layout auto
device: /dev/fd0 type 2 h: 0 s: 0 t: 0 floppy A:
CONF: fastfloppy = 1
CONF: IPX support off
CONF(LPT0) f: (null) c: lpr o: -POL610raw t: 5 port: 0
CONF: not allowing speaker port access
CONF: Packet Driver disabled.
CONF: range of I/O ports 0x03f8-0x03ff
PORT: allow_io for port 0x03f8:8 perm=3 or=0 and=ff
PORT: range 0x03f8-0x03ff already registered as serial(auto)
PORT: Device /dev/null opened successfully = 4
PORT: registered "std port io" handle 0x01 [0x03f8-0x03ff] fd=138804216
PORT: giving fast access to ports [0x03f8-0x03ff]
nPORT: set_ioperm [3f8:8:1] returns 0
device: /dev/hda1 type 3 partition# 1 h: -1 s: -1 t: -1 drive C:
CONF: config variable c_system unset
debug flags: +iTcw
CONF: running exclusively as ROOT: uid=0 (cached 0) gid=0 (cached 0)
DBG_FD already set
DOSEMU-1.1.99.1 is coming up on Linux version 2.4.22-ATH040209e
CONF: reserving 640Kb at 0x00000 for 'd' (Base DOS memory (first 640K))
CONF: reserving 64Kb at 0xF0000 for 'r' (Dosemu reserved area)
major = 4 minor = 2
CONF: reserving 128Kb at 0xA0000 for 'v' (Video memory)
PORT: registered "8254 Timer0" handle 0x06 [0x0040-0x0040] fd=-1
PORT: registered "8254 Timer1" handle 0x07 [0x0041-0x0041] fd=-1
PORT: registered "8254 Timer2" handle 0x08 [0x0042-0x0042] fd=-1
PORT: registered "8254 Ctrl02" handle 0x09 [0x0043-0x0043] fd=-1
PORT: registered "CMOS RAM" handle 0x0a [0x0070-0x0071] fd=-1
SERIAL $Header: /cvsroot/dosemu/dosemu/src/base/serial/ser_init.c,v
1.1.2.1 2003/09/17 14:40:54 bartoldeman Exp $
registering /dev/ttyS0 for serial
ERROR: PORT: conflicting devices: COM1 & std port io
registering /dev/mouse for internal_mouse
PORT: registered "8259 PIC0" handle 0x0c [0x0020-0x0021] fd=-1
PORT: registered "8259 PIC1" handle 0x0d [0x00a0-0x00a1] fd=-1
PORT: registered "DMA - XT Controller" handle 0x0e [0x0000-0x000f] fd=-1
PORT: registered "DMA - XT Pages" handle 0x0f [0x0081-0x0087] fd=-1
PORT: registered "DMA - AT Controller" handle 0x10 [0x00c0-0x00de] fd=-1
PORT: registered "DMA - AT Pages" handle 0x11 [0x0089-0x008f] fd=-1
PORT: registered "SB Emulation" handle 0x12 [0x0220-0x0233] fd=-1
PORT: registered "Adlib (+ Advanced) Emulation" handle 0x13
[0x0388-0x038b] fd=-1
PORT: registered "Midi Emulation" handle 0x14 [0x0330-0x0331] fd=-1
PORT: registered "Joystick Port Emulation" handle 0x15 [0x0200-0x020f] fd=-1
PORT: registered "8042 Keyboard data" handle 0x16 [0x0060-0x0060] fd=-1
PORT: registered "8042 Keyboard command" handle 0x17 [0x0064-0x0064] fd=-1
PORT: registered "Speaker port" handle 0x18 [0x0061-0x0061] fd=-1
CONF: reserving 64Kb at 0xE0000 for 'E' (EMS page frame)
TIME: using 9154 usec for updating ALRM timer
20 < 20
60 > 45
20 < 20
60 > c5
20 < 20
60 > c5
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
70 < 8a
71 < 26
70 < 8f
71 > 6
70 < 8b
71 > 2
70 < 8f
71 > 6
70 < 8b
71 < 2
70 < f
71 > 6
64 > 1c
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
2f2 < ff
PORTb: 2f2 not available for write
2f3 < ff
PORTb: 2f3 not available for write
2f4 < ff
PORTb: 2f4 not available for write
2f5 < ff
PORTb: 2f5 not available for write
2f6 < ff
PORTb: 2f6 not available for write
2f7 < ff
PORTb: 2f7 not available for write
6f2 < ff
PORTb: 6f2 not available for write
6f3 < ff
PORTb: 6f3 not available for write
6f4 < ff
PORTb: 6f4 not available for write
6f6 < ff
PORTb: 6f6 not available for write
6f7 < ff
PORTb: 6f7 not available for write
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
60 > 2e
20 < 20
20 < 20
20 < 20
60 > ae
20 < 20
20 < 20
20 < 20
20 < 20
60 > 18
20 < 20
20 < 20
60 > 32
20 < 20
20 < 20
60 > 98
20 < 20
20 < 20
60 > b2
20 < 20
20 < 20
20 < 20
60 > 32
20 < 20
20 < 20
20 < 20
60 > b2
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
60 > 14
20 < 20
20 < 20
20 < 20
60 > 94
20 < 20
20 < 20
20 < 20
60 > 12
20 < 20
20 < 20
60 > 92
20 < 20
20 < 20
20 < 20
20 < 20
60 > 1f
20 < 20
20 < 20
20 < 20
60 > 9f
20 < 20
20 < 20
60 > 14
20 < 20
20 < 20
20 < 20
60 > 94
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
60 > 1c
20 < 20
20 < 20
20 < 20
61 > 2c
61 < 2c
SPEAKER: sound OFF!
43 < 36
40 < 0
40 < 0
21 > f8
21 < e8
60 > 9c
60 > 9c
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
60 > 1
60 > 1
20 < 20
20 < 20
21 > e8
21 < f8
20 < 20
60 > 81
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
60 > 1d
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
60 > 1d
20 < 20
60 > e0
20 < 20
60 > 2a
20 < 20
60 > e0
20 < 20
60 > 51
20 < 20
20 < 20
20 < 20
60 > e0
20 < 20
60 > d1
20 < 20
60 > e0
20 < 20
60 > aa
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
60 > 9d
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
60 > 1d
20 < 20
20 < 20
60 > 38
20 < 20
20 < 20
20 < 20
20 < 20
leavedos(0|0x0) called - shutting down
SPEAKER: sound OFF!
============================================================================
DOSEMU log - Method 2:
============================================================================
CONF: config variable parser_version_3 set
CONF: config variable c_system set
CONF: Parsing built-in dosemu.conf file.
CONF: config variable version_3_style_used set
CONF: Parsing built-in global.conf file.
CONF: config variable version_3_style_used unset
CONF: config variable version_3_style_used set
CONF: opened include file /etc/dosemu/dosemu.conf
CONF: closed include file /etc/dosemu/dosemu.conf
debug flags: -a+cw
CONF: Enabling use of pentium timer
CONF: dosbanner on
CONF: timer freq=18, update=54925
CONF: CPU set to 586
CONF: 8192k bytes XMS memory
CONF: 1024k bytes EMS memory
CONF: EMS-frame = 0xe000
CONF: DPMI-Server on
CONF: config.emusys = 'EMU'
CONF: dosemu running on console
SER: directory /var/lock namestub LCK.. binary No
SER: /dev/ttyS0 port 0 int 4
MOUSE: /dev/mouse type 7 using internaldriver: yes, emulate3buttons: no
baudrate: 0
CONF: Keyboard-layout keyb-user
CONF: Keyboard-layout auto
device: /dev/fd0 type 2 h: 0 s: 0 t: 0 floppy A:
CONF: fastfloppy = 1
CONF: IPX support off
CONF(LPT0) f: (null) c: lpr o: -POL610raw t: 5 port: 0
CONF: not allowing speaker port access
CONF: Packet Driver disabled.
device: /dev/hda1 type 3 partition# 1 h: -1 s: -1 t: -1 drive C:
CONF: config variable c_system unset
debug flags: +iTcw
CONF: running exclusively as ROOT: uid=0 (cached 0) gid=0 (cached 0)
DBG_FD already set
DOSEMU-1.1.99.1 is coming up on Linux version 2.4.22-ATH040209e
CONF: reserving 640Kb at 0x00000 for 'd' (Base DOS memory (first 640K))
CONF: reserving 64Kb at 0xF0000 for 'r' (Dosemu reserved area)
major = 4 minor = 2
CONF: reserving 128Kb at 0xA0000 for 'v' (Video memory)
PORT: registered "8254 Timer0" handle 0x06 [0x0040-0x0040] fd=-1
PORT: registered "8254 Timer1" handle 0x07 [0x0041-0x0041] fd=-1
PORT: registered "8254 Timer2" handle 0x08 [0x0042-0x0042] fd=-1
PORT: registered "8254 Ctrl02" handle 0x09 [0x0043-0x0043] fd=-1
PORT: registered "CMOS RAM" handle 0x0a [0x0070-0x0071] fd=-1
SERIAL $Header: /cvsroot/dosemu/dosemu/src/base/serial/ser_init.c,v
1.1.2.1 2003/09/17 14:40:54 bartoldeman Exp $
registering /dev/ttyS0 for serial
PORT: registered "COM1" handle 0x0b [0x03f8-0x03ff] fd=-1
registering /dev/mouse for internal_mouse
PORT: registered "8259 PIC0" handle 0x0c [0x0020-0x0021] fd=-1
PORT: registered "8259 PIC1" handle 0x0d [0x00a0-0x00a1] fd=-1
PORT: registered "DMA - XT Controller" handle 0x0e [0x0000-0x000f] fd=-1
PORT: registered "DMA - XT Pages" handle 0x0f [0x0081-0x0087] fd=-1
PORT: registered "DMA - AT Controller" handle 0x10 [0x00c0-0x00de] fd=-1
PORT: registered "DMA - AT Pages" handle 0x11 [0x0089-0x008f] fd=-1
PORT: registered "SB Emulation" handle 0x12 [0x0220-0x0233] fd=-1
PORT: registered "Adlib (+ Advanced) Emulation" handle 0x13
[0x0388-0x038b] fd=-1
PORT: registered "Midi Emulation" handle 0x14 [0x0330-0x0331] fd=-1
PORT: registered "Joystick Port Emulation" handle 0x15 [0x0200-0x020f] fd=-1
PORT: registered "8042 Keyboard data" handle 0x16 [0x0060-0x0060] fd=-1
PORT: registered "8042 Keyboard command" handle 0x17 [0x0064-0x0064] fd=-1
PORT: registered "Speaker port" handle 0x18 [0x0061-0x0061] fd=-1
CONF: reserving 64Kb at 0xE0000 for 'E' (EMS page frame)
TIME: using 9154 usec for updating ALRM timer
20 < 20
60 > 45
20 < 20
60 > c5
20 < 20
60 > c5
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
70 < 8a
71 < 26
70 < 8f
71 > 6
70 < 8b
71 > 2
70 < 8f
71 > 6
70 < 8b
71 < 2
70 < f
71 > 6
64 > 1c
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
2f2 < ff
PORTb: 2f2 not available for write
2f3 < ff
PORTb: 2f3 not available for write
2f4 < ff
PORTb: 2f4 not available for write
2f5 < ff
PORTb: 2f5 not available for write
2f6 < ff
PORTb: 2f6 not available for write
2f7 < ff
PORTb: 2f7 not available for write
6f2 < ff
PORTb: 6f2 not available for write
6f3 < ff
PORTb: 6f3 not available for write
6f4 < ff
PORTb: 6f4 not available for write
6f6 < ff
PORTb: 6f6 not available for write
6f7 < ff
PORTb: 6f7 not available for write
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
60 > 18
20 < 20
20 < 20
20 < 20
60 > 32
20 < 20
60 > 98
20 < 20
20 < 20
60 > b2
20 < 20
20 < 20
20 < 20
60 > 32
20 < 20
20 < 20
20 < 20
60 > b2
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
60 > 14
20 < 20
20 < 20
20 < 20
60 > 94
20 < 20
20 < 20
60 > 12
20 < 20
20 < 20
60 > 92
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
60 > 1f
20 < 20
20 < 20
60 > 9f
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
60 > 14
20 < 20
20 < 20
60 > 94
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
60 > e
20 < 20
20 < 20
20 < 20
60 > 8e
20 < 20
20 < 20
20 < 20
60 > e
20 < 20
20 < 20
20 < 20
60 > 8e
20 < 20
20 < 20
60 > e
20 < 20
20 < 20
20 < 20
60 > 8e
20 < 20
20 < 20
20 < 20
60 > e
20 < 20
20 < 20
60 > 8e
20 < 20
20 < 20
20 < 20
60 > e
20 < 20
20 < 20
60 > 8e
20 < 20
20 < 20
20 < 20
60 > e
20 < 20
20 < 20
20 < 20
60 > 8e
20 < 20
20 < 20
20 < 20
20 < 20
60 > e
20 < 20
20 < 20
60 > 8e
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
60 > 2e
20 < 20
20 < 20
20 < 20
60 > ae
20 < 20
20 < 20
20 < 20
20 < 20
60 > 18
20 < 20
20 < 20
60 > 32
20 < 20
20 < 20
60 > 98
20 < 20
20 < 20
60 > b2
20 < 20
20 < 20
20 < 20
60 > 32
20 < 20
20 < 20
20 < 20
60 > b2
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
60 > 14
20 < 20
20 < 20
60 > 94
20 < 20
20 < 20
60 > 12
20 < 20
20 < 20
20 < 20
60 > 92
20 < 20
20 < 20
20 < 20
60 > 1f
20 < 20
20 < 20
20 < 20
60 > 9f
20 < 20
20 < 20
20 < 20
60 > 14
20 < 20
20 < 20
20 < 20
60 > 94
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
60 > 1c
20 < 20
20 < 20
20 < 20
60 > 9c
60 > 9c
20 < 20
61 > 3c
61 < 3c
SPEAKER: sound OFF!
43 < 36
40 < 0
40 < 0
3f9 < 0
3fb < 87
3f8 < 60
3f9 < 0
3fb < 7
3fc < 9
3fb < 80
3f8 < 60
3f9 < 0
3fb < 3
3fc < b
3f9 < 1
3fc < b
3fe > 0
3fa < 4f
3f8 > 0
3f8 > 0
3fd > 60
21 > f8
21 < e8
3fc < b
3fd > 60
3f8 < 2
3fd > 20
3f8 < 30
3fd > 20
3f8 < 31
3fd > 20
3f8 < 30
3fd > 20
3f8 < 33
3fd > 20
3f8 < 3
3fd > 20
3f8 < 30
3fd > 20
3f8 < 31
3fd > 20
3f8 < d
3fd > 20
3fd > 60
3fc < 9
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
3fc < b
3fd > 60
3f8 < 2
3fd > 60
3f8 < 30
3fd > 20
3f8 < 31
3fd > 60
3f8 < 30
3fd > 20
3f8 < 33
3fd > 60
3f8 < 3
3fd > 20
3f8 < 30
3fd > 60
3f8 < 31
3fd > 20
3f8 < d
3fd > 60
3fd > 60
3fc < 9
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
3fc < b
3fd > 60
3f8 < 2
3fd > 60
3f8 < 30
3fd > 20
3f8 < 31
3fd > 60
3f8 < 30
3fd > 20
3f8 < 33
3fd > 60
3f8 < 3
3fd > 20
3f8 < 30
3fd > 60
3f8 < 31
3fd > 20
3f8 < d
3fd > 60
3fd > 60
3fc < 9
60 > 1
60 > 1
20 < 20
3fc < 0
21 > e8
21 < f8
20 < 20
20 < 20
60 > 81
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
20 < 20
60 > 1d
20 < 20
60 > 38
20 < 20
20 < 20
20 < 20
20 < 20
leavedos(0|0x0) called - shutting down
SPEAKER: sound OFF!
============================================================================
Fragment of DOS RS485 programme run with DOSEMU:
============================================================================
' TX2NETWORK turns on the TX driver, then waits for the TX holding
' register to empty before sending each character in TX$ to
' the UART. When the last character has gone into the UART,
' it again waits for the TX holding register to empty;
' then and ONLY then does it check for the TX shifter to empty
' before turning the TX driver off again.
' This last precaution is necessary on some UARTs to ensure that
' the TX shifter empty does not give a spurious clear signal
' before the last character has been completely sent.
'
'
' For the purposes of testing, TX$ has these ASCII characters:
'
' ASCII: STX 0 1 0 3 ETX 0 1 CR
' Hex: 03 30 31 30 33 03 30 31 0D
'
' An initialisation routine has already set the UART to 1200 baud.
'
'
TX2NETWORK:
'
' Set RTS to turn TX driver on. Wait for TX driver to settle.
'
out IUART+MCR%,TXEN%
delay .1
'
' Check that TX holding reg is empty first.
' Then send characters in TX$ one by one to UART to be shifted out.
'
for i%=1 to len(TX$)
while (inp(IUART+LSR%) and &B00100000)=0 : wend
out IUART+THR%,asc(mid$(TX$,i%,1))
next i%
'
' Wait for last bit of last character to be shifted out,
' then reset RTS to turn TX driver off:
'
while (inp(IUART+LSR%) and &B00100000)=0 : wend
while (inp(IUART+LSR%) and &B01000000)=0 : wend out IUART+MCR%,TXDIS%
return
'
============================================================================
next prev parent reply other threads:[~2004-02-14 12:52 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-02-12 21:53 Can I use DOSEMU for testing device driver code? easlab
2004-02-13 8:17 ` Edenyard
2004-02-13 12:01 ` Bart Oldeman
2004-02-14 12:52 ` Edenyard [this message]
2004-02-15 4:58 ` Ryan Underwood
2004-02-16 11:27 ` Edenyard
2004-02-17 7:52 ` Ryan Underwood
2004-02-17 9:36 ` Ged Haywood
2004-02-15 5:04 ` Ryan Underwood
[not found] <4034D439.5080308@edenyard.co.uk>
2004-02-19 18:36 ` Ged Haywood
-- strict thread matches above, loose matches on Subject: below --
2004-02-15 11:15 Stas Sergeev
2004-02-13 20:12 Stas Sergeev
2004-02-12 6:11 synthespian
2004-02-12 10:15 ` Ryan Underwood
2004-02-14 19:00 ` EL Henry
2004-02-15 4:53 ` Ryan Underwood
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=402E19FA.1050704@edenyard.co.uk \
--to=mail@edenyard.co.uk \
--cc=bartoldeman@users.sourceforge.net \
--cc=linux-msdos@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox