💾 Archived View for uscoffings.net › retro-computing › systems › Tandy › oldskool › standb.txt captured on 2023-07-10 at 15:13:05.

View Raw

More Information

-=-=-=-=-=-=-

   The "standby" feature of the 1400LT has been a problem for those using
communications programs or who need to have the computer on and awake for longer
than 3 hours, fifty-nine minutes at a time. The only fix which has emerged thus
far is the NODOZE.SYS program, which captures the 1400's timer tick and
continuously increments the timeout counter so that it never reaches the time
set for putting the machine on standby. NODOZE.SYS is supplemented by SB14.COM
(available in DL5, this forum) by some users.

   NODOZE.SYS has the disadvantages that it has small but measurable overheads
in speed and memory use. Moreover, if one does want to save power when possible
and to keep the screen off when possible (for back light longevity) the
combination of NODOZE and SB14.COM (which times out the back light only) uses
even more memory and may have more effect on processing speed.

   Fortunately the standby time appears to be readily manipulable under program
control. The BIOS stores the times at memory locations 0040:00C8H (minutes) and
0040:00C9H (hours). A program which can poke values into these locations can
control the standby time. This control lasts only until the monitor is invoked
(CTRL-ALT-INS) or the machine is switched off and restarted. In other words, the
standby time set by the monitor is not permanently changed.

   Here are a few program fragments which suggest how to handle a situation in
which one doesn't want to use NODOZE but temporarily needs a long standby time
without having to remember to change it at the monitor:

In BASIC:

             DEF SEG = &H0040    ; note "DEF SEG" is 2 words
             POKE &H00C9, &H08   ; changes standby hours to 8

If you had your normal timeout set to five minutes, you could use the little
BASIC program above to change it to 8 hours, five minutes. Then, on exiting the
time-sensitive program, you could use BASIC again:

             DEF SEG = &H0040
             POKE &H00C9, &H00

The same thing can be accomplished with DEBUG using redirection. You could have
a batch file which looked like this:

                  debug < stbyoff.scr
                  <YOUR TERMINAL PROGRAM>
                  debug < stbyon.scr

in which STBYOFF.SCR would be

                  e 0040:00C8 08
                  q

and STBYON.SCR could be 

                  e 0040:00C8 00
                  q

These accomplish the same things as the BASIC program - that is, they raise the
standby period to eight hours and then restore it to zero hours, plus however
many minutes you normally have set.

   Crosstalk Mark 4 permits this whole operation to be done from within
Crosstalk itself. I've set it up in my Crosstalk startup file thus:

                  POKE 004000C9,08
                  MACRO QUIT DO QUIT1400

where QUIT1400.XTS is

                  POKE 004000C9,00
                  QUIT

Thus the whole process is trouble-free and I don't have to mess with NODOZE or
SB14.

   Little .COM programs could be put together in assembler to do the same
things:

                  MOV AX,0040
                  MOV DS,AX      ; Sets data segment to 0040H
                  MOV AL,08      ; 8 hours plus to standby
                  MOV BX,00C9    ; Address to change; use 00C8 for minutes
                  MOV [BX],AL    ; Sticks the "8" into 0040:00C9H
                  INT 20         ; exit

I hope this is useful for you all. Please note the absolute absence of error-
checking or routines which could read the standby time and restore it properly
when delay is no longer needed and so on. It ain't graceful but it works.

Finally, I have two caveats: These little routines are for the 1400LT only. I
have no way of knowing what they will do on other machines. Secondly, I have not
yet had the chance to test a really long standby time, so I don't KNOW whether
the 1400LT will go to sleep in 8 hours or not. Will welcome news of any further
tests.