mirror of
https://github.com/open-simh/simh.git
synced 2026-05-05 15:43:58 +00:00
Notes For V3.2-0
RESTRICTION: The PDP-15 FPP is only partially debugged. Do NOT enable this feature for normal operations. WARNING: The core simulator files (scp.c, sim_*.c) have been reorganized. Unzip V3.2-0 to an empty directory before attempting to compile the source. IMPORTANT: If you are compiling for UNIX, please read the notes for Ethernet very carefully. You may need to download a new version of the pcap library, or make changes to the makefile, to get Ethernet support to work. 1. New Features in 3.2-0 1.1 SCP and libraries - Added SHOW <device> RADIX command. - Added SHOW <device> MODIFIERS command. - Added SHOW <device> NAMES command. - Added SET/SHOW <device> DEBUG command. - Added sim_vm_parse_addr and sim_vm_fprint_addr optional interfaces. - Added REG_VMAD flag. - Split SCP into separate libraries for easier modification. - Added more room to the device and unit flag fields. - Changed terminal multiplexor library to support unlimited. number of async lines. 1.2 All DECtapes - Added STOP_EOR flag to enable end-of-reel error stop - Added device debug support. 1.3 Nova and Eclipse - Added QTY and ALM multiplexors (Bruce Ray). 1.4 LGP-30 - Added LGP-30/LGP-21 simulator. 1.5 PDP-11 - Added format, address increment inhibit, transfer overrun detection to RK. - Added device debug support to HK, RP, TM, TQ, TS. - Added DEUNA/DELUA (XU) support (Dave Hittner). - Add DZ per-line logging. 1.6 18b PDP's - Added support for 1-4 (PDP-9)/1-16 (PDP-15) additional terminals. 1.7 PDP-10 - Added DEUNA/DELUA (XU) support (Dave Hittner). 1.8 VAX - Added extended memory to 512MB (Mark Pizzolato). - Added RXV21 support. 2. Bugs Fixed in 3.2-0 2.1 SCP - Fixed double logging of SHOW BREAK (found by Mark Pizzolato). - Fixed implementation of REG_VMIO. 2.2 Nova and Eclipse - Fixed device enable/disable support (found by Bruce Ray). 2.3 PDP-1 - Fixed bug in LOAD (found by Mark Crispin). 2.4 PDP-10 - Fixed bug in floating point unpack. - Fixed bug in FIXR (found by Phil Stone, fixed by Chris Smith). 2.6 PDP-11 - Fixed bug in RQ interrupt control (found by Tom Evans). 2.6 PDP-18B - Fixed bug in PDP-15 XVM g_mode implementation. - Fixed bug in PDP-15 indexed address calculation. - Fixed bug in PDP-15 autoindexed address calculation. - Fixed bugs in FPP-15 instruction decode. - Fixed clock response to CAF. - Fixed bug in hardware read-in mode bootstrap. - Fixed PDP-15 XVM instruction decoding errors. 2.7 VAX - Fixed PC read fault in EXTxV. - Fixed PC write fault in INSV.
This commit is contained in:
committed by
Mark Pizzolato
parent
1da2d9452d
commit
26aa6de663
88
sim_ether.h
88
sim_ether.h
@@ -1,7 +1,7 @@
|
||||
/* sim_ether.h: OS-dependent network information
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
Copyright (c) 2002-2003, David T. Hittner
|
||||
Copyright (c) 2002-2004, David T. Hittner
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
@@ -28,6 +28,11 @@
|
||||
|
||||
Modification history:
|
||||
|
||||
04-Feb-04 DTH Added debugging information
|
||||
14-Jan-04 MP Generalized BSD support issues
|
||||
05-Jan-04 DTH Added eth_mac_scan
|
||||
26-Dec-03 DTH Added ethernet show and queue functions from pdp11_xq
|
||||
23-Dec-03 DTH Added status to packet
|
||||
01-Dec-03 DTH Added reflections, tweaked decnet fix items
|
||||
25-Nov-03 DTH Verified DECNET_FIX, reversed ifdef to mainstream code
|
||||
14-Nov-03 DTH Added #ifdef DECNET_FIX for problematic duplicate detection code
|
||||
@@ -49,6 +54,50 @@
|
||||
|
||||
#include "sim_defs.h"
|
||||
|
||||
/* make common BSD code a bit easier to read in this file */
|
||||
/* OS/X seems to define and compile using one of these BSD types */
|
||||
#if defined(__NetBSD__) || defined (__OpenBSD__) || defined (__FreeBSD__)
|
||||
#define xBSD 1
|
||||
#endif
|
||||
#if !defined(__FreeBSD__) && !defined(_WIN32) && !defined(VMS)
|
||||
#define USE_SETNONBLOCK 1
|
||||
#endif
|
||||
|
||||
#if defined(__sun__) && defined(__i386__)
|
||||
#define USE_READER_THREAD 1
|
||||
#endif
|
||||
|
||||
/* make common winpcap code a bit easier to read in this file */
|
||||
#if defined(_WIN32) || defined(VMS)
|
||||
#define PCAP_READ_TIMEOUT -1
|
||||
#else
|
||||
#define PCAP_READ_TIMEOUT 1
|
||||
#endif
|
||||
|
||||
/* set related values to have correct relationships */
|
||||
#if defined (USE_READER_THREAD)
|
||||
#if defined (USE_SETNONBLOCK)
|
||||
#undef USE_SETNONBLOCK
|
||||
#endif
|
||||
#undef PCAP_READ_TIMEOUT
|
||||
#define PCAP_READ_TIMEOUT 15
|
||||
#if !defined (xBSD) && !defined(_WIN32) && !defined(VMS)
|
||||
#define MUST_DO_SELECT
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
USE_BPF is defined to let this code leverage the libpcap/OS kernel provided
|
||||
BPF packet filtering. This generally will enhance performance. It may not
|
||||
be available in some environments and/or it may not work correctly, so
|
||||
undefining this will still provide working code here.
|
||||
*/
|
||||
#define USE_BPF 1
|
||||
|
||||
#if defined (USE_READER_THREAD)
|
||||
#include <pthread.h>
|
||||
#endif
|
||||
|
||||
/* structure declarations */
|
||||
|
||||
#define ETH_PROMISC 1 /* promiscuous mode = true */
|
||||
@@ -58,6 +107,7 @@
|
||||
#define ETH_DEV_DESC_MAX 256 /* maximum device description size */
|
||||
#define ETH_MIN_PACKET 60 /* minimum ethernet packet size */
|
||||
#define ETH_MAX_PACKET 1514 /* maximum ethernet packet size */
|
||||
#define ETH_MAX_DEVICE 10 /* maximum ethernet devices */
|
||||
|
||||
#define DECNET_SELF_FRAME(dnet_mac, msg) \
|
||||
((memcmp(dnet_mac, msg , 6) == 0) && \
|
||||
@@ -67,11 +117,12 @@ struct eth_packet {
|
||||
uint8 msg[1518];
|
||||
int len;
|
||||
int used;
|
||||
int status;
|
||||
};
|
||||
|
||||
struct eth_message {
|
||||
int type;
|
||||
struct eth_packet pack;
|
||||
struct eth_item {
|
||||
int type; /* receive (0=setup, 1=loopback, 2=normal) */
|
||||
struct eth_packet packet;
|
||||
};
|
||||
|
||||
struct eth_queue {
|
||||
@@ -80,7 +131,8 @@ struct eth_queue {
|
||||
int head;
|
||||
int tail;
|
||||
int loss;
|
||||
struct eth_message* arr;
|
||||
int high;
|
||||
struct eth_item* item;
|
||||
};
|
||||
|
||||
struct eth_list {
|
||||
@@ -94,6 +146,8 @@ typedef unsigned char ETH_MAC[6];
|
||||
typedef struct eth_packet ETH_PACK;
|
||||
typedef void (*ETH_PCALLBACK)(int status);
|
||||
typedef struct eth_list ETH_LIST;
|
||||
typedef struct eth_queue ETH_QUE;
|
||||
typedef struct eth_item ETH_ITEM;
|
||||
|
||||
struct eth_device {
|
||||
char* name; /* name of ethernet device */
|
||||
@@ -103,18 +157,27 @@ struct eth_device {
|
||||
ETH_PACK* read_packet; /* read packet */
|
||||
ETH_PACK* write_packet; /* write packet */
|
||||
ETH_MAC filter_address[ETH_FILTER_MAX]; /* filtering addresses */
|
||||
int addr_count; /* count of filtering addresses */
|
||||
ETH_BOOL promiscuous; /* promiscuous mode flag */
|
||||
ETH_BOOL all_multicast; /* receive all multicast messages */
|
||||
int32 decnet_self_sent; /* loopback packets sent but not seen */
|
||||
ETH_MAC decnet_addr; /* decnet address of interface */
|
||||
DEVICE* dptr; /* device ethernet is attached to */
|
||||
uint32 dbit; /* debugging bit */
|
||||
int reflections; /* packet reflections on interface */
|
||||
#if defined (USE_READER_THREAD)
|
||||
ETH_QUE read_queue;
|
||||
pthread_mutex_t lock;
|
||||
pthread_t reader_thread; /* Reader Thread Id */
|
||||
#endif
|
||||
};
|
||||
|
||||
typedef struct eth_device ETH_DEV;
|
||||
|
||||
/* prototype declarations*/
|
||||
|
||||
t_stat eth_open (ETH_DEV* dev, char* name); /* open ethernet interface */
|
||||
t_stat eth_open (ETH_DEV* dev, char* name, /* open ethernet interface */
|
||||
DEVICE* dptr, uint32 dbit);
|
||||
t_stat eth_close (ETH_DEV* dev); /* close ethernet interface */
|
||||
t_stat eth_write (ETH_DEV* dev, ETH_PACK* packet,/* write sychronous packet; */
|
||||
ETH_PCALLBACK routine); /* callback when done */
|
||||
@@ -126,7 +189,18 @@ t_stat eth_filter (ETH_DEV* dev, int addr_count, /* set filter on incoming pack
|
||||
ETH_BOOL promiscuous);
|
||||
int eth_devices (int max, ETH_LIST* dev); /* get ethernet devices on host */
|
||||
|
||||
void eth_packet_trace (ETH_DEV* dev, const uint8 *msg, int len, char* txt); /* trace ethernet packet */
|
||||
t_stat eth_show (FILE* st, UNIT* uptr, /* show ethernet devices */
|
||||
int32 val, void* desc);
|
||||
|
||||
void eth_mac_fmt (ETH_MAC* add, char* buffer); /* format ethernet mac address */
|
||||
void eth_packet_trace (ETH_PACK* packet, char* msg); /* trace ethernet packet */
|
||||
t_stat eth_mac_scan (ETH_MAC* mac, char* strmac); /* scan string for mac, put in mac */
|
||||
|
||||
t_stat ethq_init (ETH_QUE* que, int max); /* initialize FIFO queue */
|
||||
void ethq_clear (ETH_QUE* que); /* clear FIFO queue */
|
||||
void ethq_remove (ETH_QUE* que); /* remove item from FIFO queue */
|
||||
void ethq_insert (ETH_QUE* que, int32 type, /* insert item into FIFO queue */
|
||||
ETH_PACK* packet, int32 status);
|
||||
|
||||
|
||||
#endif /* _SIM_ETHER_H */
|
||||
|
||||
Reference in New Issue
Block a user