mirror of
https://github.com/open-simh/simh.git
synced 2026-01-26 12:12:52 +00:00
PDP11: Properly range check DMA access to the I/O page
Make sure that DMA access to the I/O page can only see addresses on the Qbus/Unibus and not internal CPU registers
This commit is contained in:
@@ -206,6 +206,8 @@ typedef struct {
|
||||
/* simulated through a single */
|
||||
/* DEVICE structure (e.g., DZ, VH, DL, DC). */
|
||||
/* Populated by auto-configure */
|
||||
DEVICE *dptr; /* back pointer to related device */
|
||||
/* Populated by auto-configure */
|
||||
} DIB;
|
||||
|
||||
/* Qbus I/O page layout - see pdp11_io_lib.c for address layout details */
|
||||
|
||||
@@ -80,6 +80,7 @@ DEVICE qba_dev = {
|
||||
|
||||
t_stat (*iodispR[IOPAGESIZE >> 1])(int32 *dat, int32 ad, int32 md);
|
||||
t_stat (*iodispW[IOPAGESIZE >> 1])(int32 dat, int32 ad, int32 md);
|
||||
DIB *iodibp[IOPAGESIZE >> 1];
|
||||
|
||||
/* Interrupt request to interrupt action map */
|
||||
|
||||
|
||||
@@ -256,6 +256,8 @@ typedef struct {
|
||||
/* simulated through a single */
|
||||
/* DEVICE structure (e.g., DZ, VH, DL, DC). */
|
||||
/* Populated by auto-configure */
|
||||
DEVICE *dptr; /* back pointer to related device */
|
||||
/* Populated by auto-configure */
|
||||
} DIB;
|
||||
|
||||
/* Qbus I/O page layout - see pdp11_io_lib.c for address layout details */
|
||||
|
||||
@@ -151,6 +151,7 @@ DEVICE qba_dev = {
|
||||
|
||||
t_stat (*iodispR[IOPAGESIZE >> 1])(int32 *dat, int32 ad, int32 md);
|
||||
t_stat (*iodispW[IOPAGESIZE >> 1])(int32 dat, int32 ad, int32 md);
|
||||
DIB *iodibp[IOPAGESIZE >> 1];
|
||||
|
||||
/* Interrupt request to interrupt action map */
|
||||
|
||||
|
||||
@@ -249,6 +249,8 @@ typedef struct {
|
||||
/* simulated through a single */
|
||||
/* DEVICE structure (e.g., DZ, VH, DL, DC). */
|
||||
/* Populated by auto-configure */
|
||||
DEVICE *dptr; /* back pointer to related device */
|
||||
/* Populated by auto-configure */
|
||||
} DIB;
|
||||
|
||||
/* Unibus I/O page layout - see pdp11_io_lib.c for address layout details */
|
||||
|
||||
@@ -117,6 +117,7 @@ extern t_stat rb_wr32 (int32 data, int32 PA, int32 access);
|
||||
|
||||
t_stat (*iodispR[IOPAGESIZE >> 1])(int32 *dat, int32 ad, int32 md);
|
||||
t_stat (*iodispW[IOPAGESIZE >> 1])(int32 dat, int32 ad, int32 md);
|
||||
DIB *iodibp[IOPAGESIZE >> 1];
|
||||
|
||||
/* Unibus interrupt request to interrupt action map */
|
||||
|
||||
|
||||
@@ -289,6 +289,8 @@ typedef struct {
|
||||
/* simulated through a single */
|
||||
/* DEVICE structure (e.g., DZ, VH, DL, DC). */
|
||||
/* Populated by auto-configure */
|
||||
DEVICE *dptr; /* back pointer to related device */
|
||||
/* Populated by auto-configure */
|
||||
} DIB;
|
||||
|
||||
/* Unibus I/O page layout - see pdp11_io_lib.c for address layout details
|
||||
|
||||
@@ -105,6 +105,7 @@ extern void cmi_set_tmo (void);
|
||||
|
||||
t_stat (*iodispR[IOPAGESIZE >> 1])(int32 *dat, int32 ad, int32 md);
|
||||
t_stat (*iodispW[IOPAGESIZE >> 1])(int32 dat, int32 ad, int32 md);
|
||||
DIB *iodibp[IOPAGESIZE >> 1];
|
||||
|
||||
/* Unibus interrupt request to interrupt action map */
|
||||
|
||||
|
||||
@@ -305,6 +305,8 @@ typedef struct {
|
||||
/* simulated through a single */
|
||||
/* DEVICE structure (e.g., DZ, VH, DL, DC). */
|
||||
/* Populated by auto-configure */
|
||||
DEVICE *dptr; /* back pointer to related device */
|
||||
/* Populated by auto-configure */
|
||||
} DIB;
|
||||
|
||||
/* Unibus I/O page layout - see pdp11_io_lib.c for address layout details
|
||||
|
||||
@@ -209,6 +209,7 @@ extern t_stat build_dib_tab (void);
|
||||
|
||||
t_stat (*iodispR[IOPAGESIZE >> 1])(int32 *dat, int32 ad, int32 md);
|
||||
t_stat (*iodispW[IOPAGESIZE >> 1])(int32 dat, int32 ad, int32 md);
|
||||
DIB *iodibp[IOPAGESIZE >> 1];
|
||||
|
||||
/* Unibus interrupt request to interrupt action map */
|
||||
|
||||
|
||||
@@ -333,6 +333,8 @@ typedef struct {
|
||||
/* simulated through a single */
|
||||
/* DEVICE structure (e.g., DZ, VH, DL, DC). */
|
||||
/* Populated by auto-configure */
|
||||
DEVICE *dptr; /* back pointer to related device */
|
||||
/* Populated by auto-configure */
|
||||
} DIB;
|
||||
|
||||
/* Unibus I/O page layout - XUB,RQB,RQC,RQD float based on number of DZ's
|
||||
|
||||
@@ -190,6 +190,7 @@ DEVICE qba_dev = {
|
||||
|
||||
t_stat (*iodispR[IOPAGESIZE >> 1])(int32 *dat, int32 ad, int32 md);
|
||||
t_stat (*iodispW[IOPAGESIZE >> 1])(int32 dat, int32 ad, int32 md);
|
||||
DIB *iodibp[IOPAGESIZE >> 1];
|
||||
|
||||
/* Interrupt request to interrupt action map */
|
||||
|
||||
|
||||
@@ -308,6 +308,8 @@ typedef struct {
|
||||
/* simulated through a single */
|
||||
/* DEVICE structure (e.g., DZ, VH, DL, DC). */
|
||||
/* Populated by auto-configure */
|
||||
DEVICE *dptr; /* back pointer to related device */
|
||||
/* Populated by auto-configure */
|
||||
} DIB;
|
||||
|
||||
/* Qbus I/O page layout - see pdp11_io_lib.c for address layout details */
|
||||
|
||||
Reference in New Issue
Block a user