1
0
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:
Mark Pizzolato
2018-09-06 11:03:45 -07:00
parent 5f0370749e
commit 7677dad67d
16 changed files with 56 additions and 22 deletions

View File

@@ -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 */

View File

@@ -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 */

View File

@@ -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 */

View File

@@ -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 */

View File

@@ -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 */

View File

@@ -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 */

View File

@@ -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

View File

@@ -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 */

View File

@@ -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

View File

@@ -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 */

View File

@@ -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

View File

@@ -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 */

View File

@@ -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 */