BESM6: Implemented SET CPU REQ, added an example of a batch task run.

This commit is contained in:
Leo Broukhis 2015-01-08 01:43:35 -08:00
parent 1787947299
commit 3ac8c82951
4 changed files with 109 additions and 15 deletions

View file

@ -80,6 +80,7 @@ jmp_buf cpu_halt;
t_stat cpu_examine (t_value *vptr, t_addr addr, UNIT *uptr, int32 sw);
t_stat cpu_deposit (t_value val, t_addr addr, UNIT *uptr, int32 sw);
t_stat cpu_reset (DEVICE *dptr);
t_stat cpu_req (UNIT *u, int32 val, char *cptr, void *desc);
/*
* CPU data structures
@ -132,6 +133,7 @@ REG cpu_reg[] = {
MTAB cpu_mod[] = {
{ MTAB_XTD|MTAB_VDV, 0, "IDLE", "IDLE", &sim_set_idle, &sim_show_idle, NULL, "Display idle detection mode" },
{ MTAB_XTD|MTAB_VDV, 0, NULL, "NOIDLE", &sim_clr_idle, NULL, NULL, "Disables idle detection" },
{ MTAB_XTD|MTAB_VDV, 0, NULL, "REQ", &cpu_req, NULL, NULL, "Sends a request interrupt" },
{ 0 }
};
@ -342,6 +344,15 @@ t_stat cpu_reset (DEVICE *dptr)
return SCPE_OK;
}
/*
* Request routine
*/
t_stat cpu_req (UNIT *u, int32 val, char *cptr, void *desc)
{
GRP |= GRP_PANEL_REQ;
return SCPE_OK;
}
/*
* Write Unicode symbol to file.
* Convert to UTF-8 encoding:

View file

@ -306,10 +306,22 @@ t_stat tty_attach (UNIT *u, char *cptr)
char gbuf[CBUFSIZE];
int r, m, n;
/* All arguments but the magic word "console" are passed
/* All arguments but the magic words "console" and "none" are passed
* to tmxr_attach().
*/
get_glyph (cptr, gbuf, 0);
/* Disallowing future connections to a line */
if (strcmp (gbuf, "NONE") == 0) {
/* Marking the TTY as unusable. */
tty_line[num].conn = 1;
tty_line[num].rcve = 0;
if (num <= TTY_MAX) {
vt_mask &= ~(1 << (TTY_MAX - num));
tt_mask &= ~(1 << (TTY_MAX - num));
}
besm6_debug ("*** turning off T%03o", num);
return SCPE_OK;
}
if (strcmp (gbuf, "CONSOLE")) {
/* Saving and restoring all .conn,
* because tmxr_attach() zeroes them. */
@ -331,19 +343,7 @@ t_stat tty_attach (UNIT *u, char *cptr)
if (num <= TTY_MAX)
vt_mask |= 1 << (TTY_MAX - num);
besm6_debug ("*** console on T%03o", num);
return 0;
}
/* Disallowing future connections to a line */
if (strcmp (gbuf, "NONE") == 0) {
/* Marking the TTY as unusable. */
tty_line[num].conn = 1;
tty_line[num].rcve = 0;
if (num <= TTY_MAX) {
vt_mask &= ~(1 << (TTY_MAX - num));
tt_mask &= ~(1 << (TTY_MAX - num));
}
besm6_debug ("*** turning off T%03o", num);
return 0;
return SCPE_OK;
}
return SCPE_ALATT;
}

30
BESM6/expect.ini Executable file
View file

@ -0,0 +1,30 @@
# Attaching the input device
at fs0 input.txt
# Waiting for the end of initial setup
expect -r "ДATA.*\n"
do dispak.ini
# Now we're ready to send commands from the front panel
echo Requesting input from the punch tape reader (FS8)
d 6 1
d 5 10
set cpu req
expect -r "Л0.*\n"
go
# The process had been started, check state every 10 model seconds
send after=1000000 "WCPP\r"
expect -p -r "4199.*\n" send after=10000000 "WCPP\r"; go
expect -c "HET\r\n" step 10000
go
echo Enabling the printer (ONL A0)
d 6 10
d 5 1
set cpu req
expect -r "ECT.*\n"
go
echo Checking for the printing to finish
send "HOMB\r"
expect -p -r "4199.*\n" send "HOMB\r"; go
expect -c "HET\r\n"
go
echo Done

53
BESM6/input.txt Normal file
View file

@ -0,0 +1,53 @@
ШИФР 419999 ЗС5^
EEВ1А3
*NAME PRIME NUMBERS
* The ^L char before *NAME is important
* NO LIST Disable source listing by removing spaces between * and NO
*NO LOAD LIST Enable loader listing by adding 5 spaces between * and NO
* Disabling fanfold page alignment
*CALL NOTLIS
*ASSEM
ETIME: ,NAME,
c Get time of day in jiffies
,*53 , 010B
c OR the integer exponent
,AOX , =6400000000000000
c F.p. divide by 50
,A/X , =R50.0
c Return
13 ,UJ ,
,END ,
*FTN
PROGRAM MAIN
PRINT 1000
1000 FORMAT(' Computing prime numbers the dumb way')
TIME0 = ETIME(0)
CALL PRIMES
TIME1 = ETIME(0)
NTIME = TIME1 - TIME0
PRINT 2000, NTIME
STOP
2000 FORMAT (' Time, seconds =', i6)
end
SUBROUTINE PRIMES
T=0
DO 10 N=1001, 100000, 2
MAXK=SQRT(N+0.0)+1
DO 20 K=3, MAXK, 2
M = (N / K) * K
IF (N .EQ. M) GOTO 10
20 CONTINUE
c------ Printing every 1000th prime number
T=T+1
IF (T .LT. 1000) GOTO 10
PRINT 1000, N
T=0
10 CONTINUE
RETURN
1000 FORMAT (1X, I9)
END
*EXECUTE
* The ^L char after *END FILE is important
*END FILE
ЕКОНЕЦ