@@ -564,7 +564,7 @@ const struct scp_error {
564
564
{"TTMO" , "Console Telnet connection timed out" },
565
565
{"STALL" , "Console Telnet output stall" },
566
566
{"AFAIL" , "Assertion failed" },
567
- };
567
+ };
568
568
569
569
const size_t size_map [] = { sizeof (int8 ),
570
570
sizeof (int8 ), sizeof (int16 ), sizeof (int32 ), sizeof (int32 )
@@ -722,12 +722,12 @@ static CTAB cmd_table[] = {
722
722
"sh{ow} fea{tures} show system devices with descriptions\n"
723
723
"sh{ow} m{odifiers} show modifiers for all devices\n"
724
724
"sh{ow} s{how} show SHOW commands for all devices\n"
725
- "sh{ow} n{ames} show logical names\n"
726
- "sh{ow} q{ueue} show event queue\n"
725
+ "sh{ow} n{ames} show logical names\n"
726
+ "sh{ow} q{ueue} show event queue\n"
727
727
"sh{ow} ti{me} show simulated time\n"
728
- "sh{ow} th{rottle} show simulation rate\n"
728
+ "sh{ow} th{rottle} show simulation rate\n"
729
729
"sh{ow} a{synch} show asynchronouse I/O state\n"
730
- "sh{ow} ve{rsion} show simulator version\n"
730
+ "sh{ow} ve{rsion} show simulator version\n"
731
731
"sh{ow} def{ault} show current directory\n"
732
732
"sh{ow} <dev> RADIX show device display radix\n"
733
733
"sh{ow} <dev> DEBUG show device debug flags\n"
@@ -784,19 +784,19 @@ static CTAB cmd_table[] = {
784
784
#if defined(_WIN32 ) || defined(__hpux )
785
785
static
786
786
int setenv (const char * envname , const char * envval , int overwrite )
787
- {
788
- char * envstr = malloc (strlen (envname )+ strlen (envval )+ 2 );
789
- int r ;
787
+ {
788
+ char * envstr = malloc (strlen (envname )+ strlen (envval )+ 2 );
789
+ int r ;
790
790
791
- sprintf (envstr , "%s=%s" , envname , envval );
791
+ sprintf (envstr , "%s=%s" , envname , envval );
792
792
#if defined(_WIN32 )
793
- r = _putenv (envstr );
794
- free (envstr );
793
+ r = _putenv (envstr );
794
+ free (envstr );
795
795
#else
796
- r = putenv (envstr );
796
+ r = putenv (envstr );
797
797
#endif
798
- return r ;
799
- }
798
+ return r ;
799
+ }
800
800
#endif
801
801
802
802
@@ -1646,7 +1646,6 @@ do {
1646
1646
cmdp -> message ((!echo && !sim_quiet ) ? ocptr : NULL , stat );
1647
1647
else
1648
1648
if (stat >= SCPE_BASE ) { /* report error if not suppressed */
1649
-
1650
1649
printf ("%s\n" , sim_error_text (stat ));
1651
1650
if (sim_log )
1652
1651
fprintf (sim_log , "%s\n" , sim_error_text (stat ));
@@ -1874,7 +1873,7 @@ return SCPE_OK;
1874
1873
}
1875
1874
1876
1875
/* Assert command
1877
-
1876
+
1878
1877
Syntax: ASSERT {<dev>} <reg>{<logical-op><value>}<conditional-op><value>
1879
1878
1880
1879
If <dev> is not specified, CPU is assumed. <value> is expressed in the radix
@@ -2196,7 +2195,7 @@ return SCPE_OK;
2196
2195
2197
2196
t_stat set_cmd (int32 flag , char * cptr )
2198
2197
{
2199
- uint32 lvl ;
2198
+ uint32 lvl = 0 ;
2200
2199
t_stat r ;
2201
2200
char gbuf [CBUFSIZE ], * cvptr , * svptr ;
2202
2201
DEVICE * dptr ;
@@ -2592,7 +2591,7 @@ while (*cptr != 0) { /* do all mods */
2592
2591
* cvptr ++ = 0 ;
2593
2592
for (mptr = dptr -> modifiers ; mptr -> mask != 0 ; mptr ++ ) {
2594
2593
if (((mptr -> mask & MTAB_XTD )? /* right level? */
2595
- (mptr -> mask & lvl ): (MTAB_VUN & lvl )) &&
2594
+ (mptr -> mask & lvl ): (MTAB_VUN & lvl )) &&
2596
2595
((mptr -> disp && mptr -> pstring && /* named disp? */
2597
2596
(MATCH_CMD (gbuf , mptr -> pstring ) == 0 ))
2598
2597
// ||
@@ -2755,7 +2754,7 @@ if (cptr && (*cptr != 0))
2755
2754
fprintf (st , "%s simulator V%d.%d-%d" , sim_name , vmaj , vmin , vpat );
2756
2755
if (vdelt )
2757
2756
fprintf (st , " delta %d" , vdelt );
2758
- #if defined(SIM_VERSION_MODE )
2757
+ #if defined (SIM_VERSION_MODE )
2759
2758
fprintf (st , " %s" , SIM_VERSION_MODE );
2760
2759
#endif
2761
2760
if (flag ) {
@@ -2774,13 +2773,25 @@ if (flag) {
2774
2773
#if defined (SIM_ASYNCH_IO )
2775
2774
fprintf (st , "\n\t\tAsynchronous I/O support" );
2776
2775
#endif
2777
- #if defined(SIM_ASYNCH_MUX )
2776
+ #if defined (SIM_ASYNCH_MUX )
2778
2777
fprintf (st , "\n\t\tAsynchronous Multiplexer support" );
2779
2778
#endif
2780
- #if defined(SIM_ASYNCH_CLOCKS )
2779
+ #if defined (SIM_ASYNCH_CLOCKS )
2781
2780
fprintf (st , "\n\t\tAsynchronous Clock support" );
2782
2781
#endif
2783
2782
fprintf (st , "\n\tHost Platform:" );
2783
+ #if defined (__clang_version__ )
2784
+ fprintf (st , "\n\t\tCompiler: clang %s" , __clang_version__ );
2785
+ #elif defined (__GNUC__ ) && defined (__VERSION__ )
2786
+ fprintf (st , "\n\t\tCompiler: GCC %s" , __VERSION__ );
2787
+ #elif defined (_MSC_FULL_VER ) && defined (_MSC_BUILD )
2788
+ fprintf (st , "\n\t\tCompiler: Microsoft Visual C++ %d.%02d.%05d.%02d" , _MSC_FULL_VER /10000000 , (_MSC_FULL_VER /100000 )%100 , _MSC_FULL_VER %100000 , _MSC_BUILD );
2789
+ #elif defined (__DECC_VER )
2790
+ fprintf (st , "\n\t\tCompiler: DEC C %c%d.%d-%03d" , ("T SV" )[((__DECC_VER /10000 )%10 )- 6 ], __DECC_VER /10000000 , (__DECC_VER /100000 )%100 , __DECC_VER %10000 );
2791
+ #endif
2792
+ #if defined (__DATE__ ) && defined (__TIME__ )
2793
+ fprintf (st , "\n\t\tSimulator Compiled: %s at %s" , __DATE__ , __TIME__ );
2794
+ #endif
2784
2795
fprintf (st , "\n\t\tMemory Access: %s Endian" , sim_end ? "Little" : "Big" );
2785
2796
fprintf (st , "\n\t\tMemory Pointer Size: %d bits" , (int )sizeof (dptr )* 8 );
2786
2797
fprintf (st , "\n\t\t%s" , sim_toffset_64 ? "Large File (>2GB) support" : "No Large File support" );
@@ -2802,6 +2813,15 @@ if (flag) {
2802
2813
#define S_xstr (a ) S_str(a)
2803
2814
#define S_str (a ) #a
2804
2815
fprintf (st , "%sgit commit id: %8.8s" , flag ? "\n " : " " , S_xstr (SIM_GIT_COMMIT_ID ));
2816
+ #undef S_str
2817
+ #undef S_xstr
2818
+ #endif
2819
+ #if defined(SIM_BUILD )
2820
+ #define S_xstr (a ) S_str(a)
2821
+ #define S_str (a ) #a
2822
+ fprintf (st , "%sBuild: %s" , flag ? "\n " : " " , S_xstr (SIM_BUILD ));
2823
+ #undef S_str
2824
+ #undef S_xstr
2805
2825
#endif
2806
2826
fprintf (st , "\n" );
2807
2827
return SCPE_OK ;
@@ -3011,7 +3031,7 @@ DEVICE *dptr;
3011
3031
3012
3032
if (cptr && (* cptr != 0 )) /* now eol? */
3013
3033
return SCPE_2MARG ;
3014
- for (i = 0 ; (dptr = sim_devices [i ]) != NULL ; i ++ )
3034
+ for (i = 0 ; (dptr = sim_devices [i ]) != NULL ; i ++ )
3015
3035
show_dev_modifiers (st , dptr , NULL , flag , cptr );
3016
3036
for (i = 0 ; sim_internal_device_count && (dptr = sim_internal_devices [i ]); ++ i )
3017
3037
show_dev_modifiers (st , dptr , NULL , flag , cptr );
@@ -3106,7 +3126,7 @@ sim_trim_endspc(cptr);
3106
3126
if (chdir (cptr ) != 0 ) {
3107
3127
printf ("Unable to change to: %s\n" , cptr );
3108
3128
return SCPE_IOERR & SCPE_NOMESSAGE ;
3109
- }
3129
+ }
3110
3130
return SCPE_OK ;
3111
3131
}
3112
3132
@@ -3132,7 +3152,7 @@ t_stat r;
3132
3152
t_addr lo , hi , max = uptr -> capac - 1 ;
3133
3153
int32 cnt ;
3134
3154
3135
- if (sim_brk_types == 0 )
3155
+ if (sim_brk_types == 0 )
3136
3156
return SCPE_NOFNC ;
3137
3157
if ((dptr == NULL ) || (uptr == NULL ))
3138
3158
return SCPE_IERR ;
@@ -3166,7 +3186,7 @@ while (*cptr) {
3166
3186
sim_brk_showall (st , sim_switches );
3167
3187
else return SCPE_ARG ;
3168
3188
}
3169
- else {
3189
+ else {
3170
3190
for ( ; lo <= hi ; lo = lo + 1 ) {
3171
3191
r = ssh_break_one (st , flg , lo , cnt , aptr );
3172
3192
if (r != SCPE_OK )
@@ -3377,7 +3397,11 @@ if (sim_switches & SWMASK ('R')) { /* read only? */
3377
3397
else { /* normal */
3378
3398
uptr -> fileref = sim_fopen (cptr , "rb+" ); /* open r/w */
3379
3399
if (uptr -> fileref == NULL ) { /* open fail? */
3400
+ #if defined(EPERM )
3401
+ if ((errno == EROFS ) || (errno == EACCES ) || (errno == EPERM )) {/* read only? */
3402
+ #else
3380
3403
if ((errno == EROFS ) || (errno == EACCES )) { /* read only? */
3404
+ #endif
3381
3405
if ((uptr -> flags & UNIT_ROABLE ) == 0 ) /* allowed? */
3382
3406
return attach_err (uptr , SCPE_NORO ); /* no error */
3383
3407
uptr -> fileref = sim_fopen (cptr , "rb" ); /* open rd only */
@@ -3807,7 +3831,7 @@ fstat (fileno (rfile), &rstat);
3807
3831
READ_S (buf ); /* [V2.5+] read version */
3808
3832
v35 = v32 = FALSE;
3809
3833
if (strcmp (buf , save_vercur ) == 0 ) /* version 3.5? */
3810
- v35 = v32 = TRUE;
3834
+ v35 = v32 = TRUE;
3811
3835
else if (strcmp (buf , save_ver32 ) == 0 ) /* version 3.2? */
3812
3836
v32 = TRUE;
3813
3837
else if (strcmp (buf , save_ver30 ) != 0 ) { /* version 3.0? */
@@ -4307,6 +4331,7 @@ return sim_cancel (&sim_step_unit);
4307
4331
void int_handler (int sig )
4308
4332
{
4309
4333
stop_cpu = 1 ;
4334
+ sim_interval = 0 ; /* should speed up stop detection */
4310
4335
return ;
4311
4336
}
4312
4337
@@ -4362,7 +4387,7 @@ for (gptr = gbuf, reason = SCPE_OK;
4362
4387
tdptr = sim_dfdev ; /* working dptr */
4363
4388
if (strncmp (gptr , "STATE" , strlen ("STATE" )) == 0 ) {
4364
4389
tptr = gptr + strlen ("STATE" );
4365
- if (* tptr && (* tptr ++ != ',' ))
4390
+ if (* tptr && (* tptr ++ != ',' ))
4366
4391
return SCPE_ARG ;
4367
4392
if ((lowr = sim_dfdev -> registers ) == NULL )
4368
4393
return SCPE_NXREG ;
@@ -4421,7 +4446,7 @@ return reason;
4421
4446
exdep_addr_loop examine/deposit range of addresses
4422
4447
*/
4423
4448
4424
- t_stat exdep_reg_loop (FILE * ofile , SCHTAB * schptr , int32 flag , char * cptr ,
4449
+ t_stat exdep_reg_loop (FILE * ofile , SCHTAB * schptr , int32 flag , char * cptr ,
4425
4450
REG * lowr , REG * highr , uint32 lows , uint32 highs )
4426
4451
{
4427
4452
t_stat reason ;
@@ -4693,13 +4718,13 @@ if ((rptr->depth > 1) && (rptr->flags & REG_UNIT)) {
4693
4718
#if defined (USE_INT64 )
4694
4719
if (sz <= sizeof (uint32 ))
4695
4720
* ((uint32 * ) uptr ) = (* ((uint32 * ) uptr ) &
4696
- ~(((uint32 ) mask ) << rptr -> offset )) |
4721
+ ~(((uint32 ) mask ) << rptr -> offset )) |
4697
4722
(((uint32 ) val ) << rptr -> offset );
4698
4723
else * ((t_uint64 * ) uptr ) = (* ((t_uint64 * ) uptr )
4699
4724
& ~(mask << rptr -> offset )) | (val << rptr -> offset );
4700
4725
#else
4701
4726
* ((uint32 * ) uptr ) = (* ((uint32 * ) uptr ) &
4702
- ~(((uint32 ) mask ) << rptr -> offset )) |
4727
+ ~(((uint32 ) mask ) << rptr -> offset )) |
4703
4728
(((uint32 ) val ) << rptr -> offset );
4704
4729
#endif
4705
4730
}
@@ -4887,7 +4912,7 @@ for (i = 0, j = addr; i < count; i++, j = j + dptr->aincr) {
4887
4912
loc = j / dptr -> aincr ;
4888
4913
if (uptr -> flags & UNIT_BUF ) {
4889
4914
SZ_STORE (sz , sim_eval [i ], uptr -> filebuf , loc );
4890
- if (loc >= uptr -> hwmark )
4915
+ if (loc >= uptr -> hwmark )
4891
4916
uptr -> hwmark = (uint32 ) loc + 1 ;
4892
4917
}
4893
4918
else {
@@ -5526,7 +5551,7 @@ while (*cptr) { /* loop through modifier
5526
5551
cptr = get_glyph_nc (cptr + 1 , gbuf , 0 );
5527
5552
sim_ofile = sim_fopen (gbuf , "a" ); /* open for append */
5528
5553
if (sim_ofile == NULL ) { /* open failed? */
5529
- * st = SCPE_OPENERR ;
5554
+ * st = SCPE_OPENERR ;
5530
5555
return NULL ;
5531
5556
}
5532
5557
sim_opt_out |= CMD_OPT_OF ; /* got output file */
@@ -6565,7 +6590,7 @@ if (sim_deb && (dptr->dctrl & dbits)) {
6565
6590
Callers should be calling sim_debug() which is a macro
6566
6591
defined in scp.h which evaluates the action condition before
6567
6592
incurring call overhead. */
6568
-
6593
+
6569
6594
void _sim_debug (uint32 dbits , DEVICE * dptr , const char * fmt , ...)
6570
6595
{
6571
6596
if (sim_deb && (dptr -> dctrl & dbits )) {
0 commit comments