From 846b36a6cb6f64b29e17b65588702e7f8e2030ca Mon Sep 17 00:00:00 2001 From: Richard Cornwell Date: Mon, 27 Sep 2021 21:19:00 -0400 Subject: [PATCH] IBM360: Added Idlestop CPU option to stop idle cpu. --- IBM360/ibm360_cpu.c | 43 +++++++++++++++++++++++++++++++++++++++++++ doc/ibm360.doc | Bin 121856 -> 121856 bytes 2 files changed, 43 insertions(+) diff --git a/IBM360/ibm360_cpu.c b/IBM360/ibm360_cpu.c index 2e24f4d..8c52533 100644 --- a/IBM360/ibm360_cpu.c +++ b/IBM360/ibm360_cpu.c @@ -129,6 +129,9 @@ uint8 clk_irq; /* Clock compare IRQ */ uint8 tod_irq; /* TOD compare IRQ */ int clk_state; int timer_tics; /* Interval Timer is ever 3 tics */ +uint32 idle_stop_msec = 0; // msec allowed after before stop cpu if idle +uint32 idle_stop_tm0; // sim_os_msec when start counting for idle time + #define CLOCK_UNSET 0 /* Clock not set */ #define CLOCK_SET 1 /* Clock set */ @@ -270,6 +273,7 @@ t_stat cpu_dep (t_value val, t_addr addr, UNIT *uptr, int32 sw); t_stat cpu_reset (DEVICE *dptr); t_bool cpu_fprint_stopped (FILE *st, t_stat v); t_stat cpu_set_size (UNIT *uptr, int32 val, CONST char *cptr, void *desc); +t_stat cpu_set_idle_stop (UNIT *uptr, int32 val, CONST char *cptr, void *desc); t_stat cpu_set_hist (UNIT *uptr, int32 val, CONST char *cptr, void *desc); t_stat cpu_show_hist (FILE *st, UNIT *uptr, int32 val, CONST void *desc); t_stat cpu_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, @@ -383,6 +387,8 @@ MTAB cpu_mod[] = { { EXT_IRQ, 0, "NOEXT", NULL, NULL, NULL}, { EXT_IRQ, EXT_IRQ, "EXT", "EXT", NULL, NULL, NULL, "SET CPU EXT causes external interrupt"}, + { MTAB_XTD|MTAB_VDV|MTAB_NMO, 0, "IDLESTOP", "IDLESTOP", &cpu_set_idle_stop, NULL, + NULL, "SET CPU IDLESTOP stops cpu after waiting n seconds for IRQ"}, { MTAB_XTD|MTAB_VDV|MTAB_NMO|MTAB_SHP, 0, "HISTORY", "HISTORY", &cpu_set_hist, &cpu_show_hist }, { 0 } @@ -1224,11 +1230,25 @@ wait_loop: /* CPU IDLE */ if (flags & WAIT && irq_en == 0 && ext_en == 0) return STOP_HALT; + if (idle_stop_msec) { + /* check idle time */ + if (idle_stop_tm0 == 0) { + idle_stop_tm0 = sim_os_msec(); /* init idle time */ + } else { + if (sim_os_msec() - idle_stop_tm0 > idle_stop_msec) { + /* reset idle countdown because max time expired */ + idle_stop_tm0=0; + return STOP_IBKPT; + } + } + } if (sim_idle_enab) sim_idle(TMR_RTC, FALSE); sim_interval--; goto wait_loop; } + /* reset idle countdown because some activity */ + idle_stop_tm0=0; if (sim_brk_summ && sim_brk_test(PC, SWMASK('E'))) { return STOP_IBKPT; @@ -6191,6 +6211,29 @@ cpu_set_size (UNIT *uptr, int32 val, CONST char *cptr, void *desc) return SCPE_OK; } +/* RSV: Set CPU IDLESTOP= + * =number of seconds. + * + * Sets max time in secounds CPU is IDLE but waiting for interrupt + * from device. if not zero, simulated CPU will wait for this wallclock + * number of seconds, then stop. This allows to script a BOOT command and the + * continue automatically when IPL has finished. Set to zero to disable. + */ + +t_stat cpu_set_idle_stop (UNIT *uptr, int32 val, CONST char *cptr, void *desc) +{ + int32 n; + t_stat r; + + if (cptr == NULL) { + return SCPE_ARG; + } + n = (int32) get_uint(cptr, 10, 60, &r); + if (r != SCPE_OK) return SCPE_ARG; + idle_stop_msec = n * 1000; + return SCPE_OK; +} + t_bool cpu_fprint_stopped (FILE *st, t_stat v) { diff --git a/doc/ibm360.doc b/doc/ibm360.doc index a9d359b9a4bed2c888e174cc272f39377929c4c6..caceebd5c30bb6005d0b5f91bef4979f36e52984 100644 GIT binary patch delta 8892 zcmb{2e^gZGoyYO#A!G!~Oobo;gb`RmkoW@$AxaUcQ5TVt2|;2AVTqvx2%&@!YX}R3 zT0;mmgmJx=!*Q+gP}gNyDlC_!tg$Th5RX+#2>G#=Si-Wd$Fd%4j9QoM`->(6LcBQa!kg^a!O6;R;d~E7gPvM6;R-oI>aW zO6B4LDp^AdPT(rSmn!8z4LUIaKQ=85^*DhWh+nR%RLOFs;@IXM#I0b{ur`{%k@p~* zAEVTHv^=C#VJy4%uu@&fTB(%hDy2N)lo~=nyiyU!MK{hOa5X!F0nATODq#)FV<;vN zldRNuauqXgVz|Dil<%WTg?(dlueeA1Pgf?I}CcE&LFDf(t9bq2??>HiEX zevS>!XMv1w)ALHT6)AP_Mf$#^R8ASA!kDY=?C~os=T)V$E0|ubRBsh8BbbEcHKoE3 zj|`Nc0f#YwaZJJQ4Q519ol>?pmFh>_7_-}j(J&&P4GEz{5I@IGRKE%iHbW`d9EJY5Q(2Udg0@tv_ zoh`v;)Z&P{+Ne7D@LyQyp;Qo3QG*>Y@g?-P*a&1H8*ifn|AJNPmAc33^JSwww$UE; z?FH3A>{}S_$MTN#_RsHH+fBbuZ0wkqQmx)f{p&q!DE*!fWj*kx|0w;x`+!pa!%-X& ztyBRA+%*ogJ`S8!>zx&$YyTe>bL6kmT)hj}V)^GX|K__Y=*YeQeb)!me)m(^W~HZ_ z-(yVE^$eFGfgBZdvrl5TJ7T}7iJYMoqh~3zOy=cM>OhMhtNddm_LjcNA zfl9QY9Y@d!UqAXG02$bVOl09Gj-d}R{^}kT%UOFR;vi@6KPl%uryp@{KK+kX^5;J6 z$0RP|5-uYnfaM|+EjWb3XoYPdXFqr&7kS7>Ax`2H1`!*`su72HG@%*$;2OlK+QP5J z4IU^$F-kB6WoH!Oiag|_5Z&lOFODL35ho~wArJW|L=lQnf>OveX&2-Q_QmIyK3AVR z@A_@D$1hsd&-bx5rJQlU{dLu9nS2CYIEEp9#GUu?Hv;(~#UK_5NQ47&smsAuRG<>w zIEoQ`giE-J`4Nm8(y#@kC_@WcBdR$0^5Hlx<2t+-b8sLT4&5T*lkbjseIeeF($20=c{^F6S-?gIwyDAquIG%YFv7pc+yF)S?bYAmu>M zQjVowK8!A$5giIlGQHP-Cbh zB%>HoZj>#5l3(0+lsbp=xQr{X#4{uOAhkjkvau7jXhSx$Gw<@}ou zLYyTZxH+posIKB~XUK>5ZaB!FZRkQbdSJ<5vtUOkA`ydF97XRFyhBQ^ zV1#Bmvp+mgB~@$`qLGXglwlioq810yf>E5sMO=d0Qw%X;AXVH3Bq19)Xu%QIj+G~+C! ztQeW%4ML+=u z9=JbnzWA|^v+85ZEw5F{JwpxZu?r2@j{_LM2@GKjQvXh33Lb?Ngm54Y8QAtbrySH_ zFQisJj|;d0mm&rU-bhAD5hL#4LpoX^g>}1pet`oJAK??Y7Ss7fz7bTS8vAho_EI(i zX*i5ljN&X}UgFzACbF;x6PUyl+{!kwCuQsj0%6BGY(OfqAr*ch%CQr*IEhmj!Z6Zb zW)Gbk|HG`3`!Bg4ux#VVf-fvT0fAIFkbx~|LpzS4 z4+A)XxL5cE;PNYsr%yTijXKn0FIsR2mRH$lEWt8V;ykY4Dm*KwCy<57AG1Jo?&M&? zj@Q|JjMcJJZ}6){E{f5EegxEUx(ushyikT#biwmYW#s@uCmV_P~@5u3H9@P3U z9H_@GNKIL^z^LxmfySylZSDBc*}v86rGk`7Q3^sS{G`B>LQd*6Da54UlEO*~D5;aA z9+J98>YJ}>oBEFRW53ivQr-;Ts#QjA)hbe_NR5)#5j6gp_L4Fs9a5%9iPGcrn&{N; zbsV3F(_V6`-V3Q&q+Yq~^g7qV#O`xR+Dq=?uRsbIDPGc@Ugy7_C^z>RkZMLMnL|#m z3xoPSqurrbIT!xnKfUD6|1er1mCcoz9V8aG3MqG_)JbuAUA$unk{P5z>L00nnw(yj zzFxnC3C)mVND85enR8Fjcn(q>No5r6^ty7#;w6TNfs{*9DpkzvAQ?p^q<)gx>D0^) z5?~BM3Mwh4LY-bW?pTGS8(|2C6j!-3I`~WUk%xQ~LMpFaxbS!WdcgC&5Pqi9|6H`8 zwGJ@nX?@MbS86h;$D|euhE!pdON>PuILv}9+G?zE)%})t<~?T1T4cPMMC-dr+Gebo zr{7&@Nm0IGdSjlJ<=!oITQ#I^YcZ`B?V{(L?^jl-=ng?Dx)Y|=P22U|(`zuI-1VSU z3cQn$0`KZyT98djzw40FFMO$Kv#?`xuhS+~VFaWqbo|AxRw)?MAO&NMX`TP)cSK6b z9gtG8)3kce*b%8LyC8+-#H`6SsWZ<(>P)|7rp;Ri-7yYQcLqS}&NS2NH)H8ihNeTx z(E8bvr7GP8sY)5-nR82#dJmX_E#W1ep z27FeqV9f35YFx`t-bgJ zJ`ZwHK@=oQoZVYm^HGcA7{E9rb)4N>T9+XWyU>7kNIp5cx3pe>$3v70NWxY~k~zD# zv>w87xW+Orh=63CvwKTx5$Z97VO)fyqqBQUYc$eOiZV1na@0F|N9tebKpML-jElGg zkChzyxTEv*VIr;Bs6Z#WFbs)iXZMy?8^Y0qW^_YB+}XXQ)e~XZid@t|;@(-k!=-f? zBlrl%zH{>?Pj2w!=1y+x0^$vO1E_C%5O3bvm@K zgy?pxL;})~zS{6j(?9!0-(zVyQ7@3NJp;S28^Yh4z(P{se~b z5pH09g5jI4e>hivf64H@;e*47rfrgD-Yv7qov4X=!$ad{-a?JJV0BMLt2C7kmCX6Q=_U$^>bmXwufN@$TFoi9f zSTy8zWN6bjd&%RAVO*3cDSU=x3U1$%UJmErLw2(^S8vymk}woOrBZ#M7$qphS&ZW% zd>=I<^Yn=Jk|!d5h=M#BdBw2jb9hDO>)-1(!?QqNwn}p$4q()@7U}@)(iUi}ct^i( zv_G#MHhG$I7OoD)*_)W$7 z%f%;2{CWlu74Lb%2B%@*pJv_1FbTHQX|8t#TVnvrE3=0m(Fup%0R4T!%f= zq!s^bILdXn`Di)kXn$!~35hKvvN#NhDtwKQ zO4*qT*%`?!{2)<9C8|+_9gx`Kj7jHDb&y0C5?f3`VvC)qg+v#}&7f-inGTUBT`oC{ zDauiSW{hDRqh?4A%L%7!H`s9yuh?K z(kGbD6Oa@_5{Pt23Q_j_%_O4945^d-mlQ%0h)GEDKPG6cyDBr_O++J5WIwujSB zh$IJ+8YDu}0!a#vKoSCZGI`Ai>C@px@m|hs>3emnwo7XQ5+V74#0C->NL1kVs%dYM zy^*}Y1Cke1qXv>0NKTMlVcMJNx|{gqunjoijp~| z%VXbCRHI>z>GDXp5zRO}$8>pI+=?Cy%rRXaC7-}B#^;zmPWuEdV(QlPufB*CztMw> zX;(Fz4RC?@M`9p}fOfpj_l7gI3_bkbFe7`oNBnARf2jupn9XF6IQqF;bdJ>MQ`(2eS!@Y}`pUF`K+%#RFYy=AQF z*Re)wKbNGJ`*nqj@BMckr)$%ve*=lo@ zsYNISKY{@rs&Dl;ZIfsFN70Yaw@urC4!J#19{PtN8s#%5%KrwaKnV!Z delta 8863 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