home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Boot_Images / 2.11_on_rl02 / pdpsim.tz / pdpsim / pdp18b_defs.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-29  |  7.1 KB  |  211 lines

  1. /* pdp18b_defs.h: 18b PDP simulator definitions
  2.  
  3.    Copyright (c) 1994, 1995, 1996, Robert M Supnik,
  4.    Digital Equipment Corporation
  5.    All rights reserved
  6.  
  7.    19-Mar-95    RMS    Added dynamic memory size
  8.    31-Dec-95    RMS    Added memory management
  9.    2-Jan-96    RMS    Added fixed head and moving head disks
  10.  
  11.    The author gratefully acknowledges the help of Craig St. Clair and
  12.    Deb Tevonian in locating archival material about the 18b PDP's
  13. */
  14.  
  15. #include "sim_defs.h"                    /* simulator defns */
  16.  
  17. /* Models: only one should be defined
  18.  
  19.    model memory    CPU options        I/O options
  20.  
  21.    PDP4       8K    none            Type 65 KSR-28 Teletype (Baudot)
  22.                     integral paper tape reader
  23.                     Type 75 paper tape punch
  24.                     integral real time clock
  25.                     Type 62 line printer (Hollerith)
  26.  
  27.    PDP7       32K    Type 177 EAE        Type 649 KSR-33 Teletype
  28.         Type 148 mem extension    Type 444 paper tape reader
  29.                     Type 75 paper tape punch
  30.                     integral real time clock
  31.                     Type 647B line printer (sixbit)
  32.                     Type 24 serial drum
  33.  
  34.    PDP9       32K    KE09A EAE        KSR-33 Teletype
  35.            KG09B mem extension    PC09A paper tape reader and punch
  36.         KP09A power detection    integral real time clock
  37.         KX09A mem protection    Type 647D/E line printer (sixbit)
  38.                     RF09/RS09 fixed head disk
  39.                     TC59 magnetic tape
  40.  
  41.    PDP15  128K    KE15 EAE        KSR-35 Teletype
  42.         KF15 power detection    PC15 paper tape reader and punch
  43.         KM15 mem protection    KW15 real time clock
  44.         ??KT15 mem relocation    LP15 line printer
  45.                     RP15 disk pack
  46.                     RF15/RF09 fixed head disk
  47.                     TC59D magnetic tape
  48.  
  49.    ??Indicates not implemented.  The PDP-4 manual refers to both an EAE
  50.    ??and a memory extension control; there is no documentation on either.
  51. */
  52.  
  53. #if !defined (PDP4) && !defined (PDP7) && !defined (PDP9) && !defined (PDP15)
  54. #define PDP9        0                /* default to PDP-9 */
  55. #endif
  56.  
  57. /* Memory and peripheral configuration */
  58.  
  59. #if defined (PDP4)
  60. #define ADDRSIZE    13
  61. #define KSR28        0                /* Baudot terminal */
  62. #define TYPE62        0                /* Hollerith printer */
  63. #elif defined (PDP7)
  64. #define ADDRSIZE    15
  65. #define TYPE647        0                /* sixbit printer */
  66. #define DRM        0                /* drum */
  67. #elif defined (PDP9)
  68. #define ADDRSIZE    15
  69. #define TYPE647        0                /* sixbit printer */
  70. #define RF        0                /* fixed head disk */
  71. #define MTA        0                /* magtape */
  72. #elif defined (PDP15)
  73. #define ADDRSIZE    17
  74. #define LP15        0                /* ASCII printer */
  75. #define RF        0                /* fixed head disk */
  76. #define RP        0                /* disk pack */
  77. #define MTA        0                /* magtape */
  78. #define BLKMASK        0300000                /* block mask */
  79. #endif
  80.  
  81. #define ADDRMASK    ((1 << ADDRSIZE) - 1)        /* address mask */
  82. #define IAMASK        077777                /* ind address mask */
  83. #define MAXMEMSIZE    (1 << ADDRSIZE)            /* max memory size */
  84. #define MEMSIZE        (cpu_unit.capac)        /* actual memory size */
  85. #define MEM_ADDR_OK(x)    (x < MEMSIZE)
  86.  
  87. /* Simulator stop codes */
  88.  
  89. #define STOP_RSRV    1                /* must be 1 */
  90. #define STOP_HALT    2                /* HALT */
  91. #define STOP_IBKPT    3                /* breakpoint */
  92. #define STOP_XCT    4                /* nested XCT's */
  93.  
  94. /* IOT subroutine return codes */
  95.  
  96. #define IOT_V_SKP    18                /* skip */
  97. #define IOT_V_REASON    19                /* reason */
  98. #define IOT_SKP        (1 << IOT_V_SKP)
  99. #define IOT_REASON    (1 << IOT_V_REASON)
  100.  
  101. #define IORETURN(f,v)    ((f)? (v): SCPE_OK)        /* stop on error */
  102.  
  103. /* Interrupt system
  104.  
  105.    The interrupt system can be modelled on either the flag driven system
  106.    of the PDP-4 and PDP-7 or the API driven system of the PDP-9 and PDP-15.
  107.    If flag based, API is hard to implement; if API based, IORS requires
  108.    extra code for implementation.  I've chosen an API based model.
  109.  
  110.    Interrupt system, priority is left to right.
  111.  
  112.    <30:28> =    priority 0
  113.    <27:20> =    priority 1
  114.    <19:14> =    priority 2
  115.    <13:10> =    priority 3
  116.    <9:4> =    PI only
  117.    <3> =    priority 4 (software)
  118.    <2> =    priority 5 (software)
  119.    <1> =    priority 6 (software)
  120.    <0> =    priority 7 (software)
  121. */
  122.  
  123. #define INT_V_PWRFL    30                /* powerfail */
  124. #define INT_V_DTA    27                /* DECtape */
  125. #define INT_V_MTA    26                /* magtape */
  126. #define INT_V_DRM    25                /* drum */
  127. #define INT_V_RF    24                /* fixed head disk */
  128. #define INT_V_RP    23                /* disk pack */
  129. #define INT_V_PTR    19                /* paper tape reader */
  130. #define INT_V_LPT    18                /* line printer */
  131. #define INT_V_LPTSPC    17                /* line printer spc */
  132. #define INT_V_CLK    13                /* clock */
  133. #define INT_V_TTI    9                /* keyboard */
  134. #define INT_V_TTO    8                /* terminal */
  135. #define INT_V_PTP    7                /* paper tape punch */
  136. #define INT_V_SW4    3                /* software 4 */
  137. #define INT_V_SW5    2                /* software 5 */
  138. #define INT_V_SW6    1                /* software 6 */
  139. #define INT_V_SW7    0                /* software 7 */
  140.  
  141. #define INT_PWRFL    (1 << INT_V_PWRFL)
  142. #define INT_DTA        (1 << INT_V_DTA)
  143. #define INT_MTA        (1 << INT_V_MTA)
  144. #define INT_DRM        (1 << INT_V_DRM)
  145. #define INT_RF        (1 << INT_V_RF)
  146. #define INT_RP        (1 << INT_V_RP)
  147. #define INT_PTR        (1 << INT_V_PTR)
  148. #define INT_LPT        (1 << INT_V_LPT)
  149. #define INT_LPTSPC    (1 << INT_V_LPTSPC)
  150. #define INT_CLK        (1 << INT_V_CLK)
  151. #define INT_TTI        (1 << INT_V_TTI)
  152. #define INT_TTO        (1 << INT_V_TTO)
  153. #define INT_PTP        (1 << INT_V_PTP)
  154. #define INT_SW4        (1 << INT_V_SW4)
  155. #define INT_SW5        (1 << INT_V_SW5)
  156. #define INT_SW6        (1 << INT_V_SW6)
  157. #define INT_SW7        (1 << INT_V_SW7)
  158.  
  159. /* I/O status flags for the IORS instruction
  160.  
  161.    bit    PDP-4        PDP-7        PDP-9        PDP-15
  162.  
  163.    0    intr on        intr on        intr on        intr on
  164.    1    tape rdr flag*    tape rdr flag*    tape rdr flag*    tape rdr flag*
  165.    2    tape pun flag*    tape pun flag*    tape pun flag*    tape pun flag*
  166.    3    keyboard flag*    keyboard flag*    keyboard flag*    keyboard flag*
  167.    4    type out flag*    type out flag*    type out flag*    type out flag*
  168.    5    display flag*    display flag*    light pen flag*    light pen flag*
  169.    6    clk ovflo flag*    clk ovflo flag*    clk ovflo flag*    clk ovflo flag*
  170.    7    clk enable flag    clk enable flag    clk enable flag    clk enable flag
  171.    8    mag tape flag*    mag tape flag*    tape rdr empty*    tape rdr empty*
  172.    9    card rdr col*    *        tape pun empty    tape pun empty
  173.    10    card rdr ~busy            DECtape flag*    DECtape flag*
  174.    11    card rdr error            magtape flag*    magtape flag*
  175.    12    card rdr EOF                    disk pack flag*
  176.    13    card pun row*            DECdisk flag*    DECdisk flag*
  177.    14    card pun error                    lpt flag*
  178.    15    lpt flag*    lpt flag*    lpt flag*
  179.    16    lpt space flag*    lpt error flag    lpt error flag
  180.    17            drum flag*    drum flag*
  181. */
  182.  
  183. #define IOS_ION        0400000                /* interrupts on */
  184. #define IOS_PTR        0200000                /* tape reader */
  185. #define IOS_PTP        0100000                /* tape punch */
  186. #define IOS_TTI        0040000                /* keyboard */
  187. #define IOS_TTO        0020000                /* terminal */
  188. #define IOS_LPEN    0010000                /* light pen */
  189. #define IOS_CLK        0004000                /* clock */
  190. #define IOS_CLKON    0002000                /* clock enable */
  191. #define IOS_DTA        0000200                /* DECtape */
  192. #define IOS_RP        0000040                /* disk pack */
  193. #define IOS_RF        0000020                /* fixed head disk */
  194. #define IOS_DRM        0000001                /* drum */
  195. #if defined (PDP4) || defined (PDP7)
  196. #define IOS_MTA        0001000                /* magtape */
  197. #define IOS_LPT        0000004                /* line printer */
  198. #define IOS_LPT1    0000002                /* line printer stat */
  199. #elif defined (PDP9)
  200. #define IOS_PTRERR    0001000                /* reader empty */
  201. #define IOS_PTPERR    0000400                /* punch empty */
  202. #define IOS_MTA        0000100                /* magtape */
  203. #define IOS_LPT        0000004                /* line printer */
  204. #define IOS_LPT1    0000002                /* line printer stat */
  205. #elif defined (PDP15)
  206. #define IOS_PTRERR    0001000                /* reader empty */
  207. #define IOS_PTPERR    0000400                /* punch empty */
  208. #define IOS_MTA        0000100                /* magtape */
  209. #define IOS_LPT        0000010                /* line printer */
  210. #endif
  211.