Annotation of coherent/b/kernel/FWB2/hooks, revision 1.1.1.1

1.1       root        1: The Coherent instance of this software requires no assembly routines (thank God).
                      2: The MSDOS instance includes the sourcefile talkbios.asm,
                      3: which contains interface routines between the speech functions,
                      4: the BIOS calls, and the timer and keyboard interrupts.
                      5: This file also contains replicas of several essential Coherent kernel routines,
                      6: such as sphi, kalloc, outb, read_t0, etc.
                      7: Thus the C code is largely portable between Coherent and MSDOS.
                      8: 
                      9: sdload is called by isload (in kb.c), as the last command.
                     10: It performs the load/initialization functions for the speech session.
                     11: 
                     12: sduload is called by isuload (in kb.c), as the last command.
                     13: It performs the unload/free functions for the speech session.
                     14: 
                     15: sdtime is called by mmtime (in mm.c), as the last command before rescheduling.
                     16: Sdtime manages longer sounds such as error bells,
                     17: and executes the deferred speech commands.
                     18: It also maintains the ongoing reading of text in the internal buffer.
                     19: Once reading is initiated, sdtime performs a form of polling,
                     20: asking whether the synthesizer is ready for more.
                     21: If it is, send more text.
                     22: Continue reading until another command is entered.
                     23: The polling rate of 10HZ is (generally) adequate for this task.
                     24: The rescheduling frequency is dynamically determined by the variable mmticks.
                     25: Usually this is set to 10 ticks, the original value.
                     26: It is upped to 1 tick when producing audio feedback
                     27: or initiating speech.
                     28: The new routine mmhasten hastens the execution
                     29: of mmtime() by rescheduling with mmticks = 1.
                     30: Unfortunately, I virtually rewrote mmtime() and mmstart().
                     31: This is far from the decoupled driver we had hoped for,
                     32: but I believe these rewrites are necessary.
                     33: 
                     34: mmgo1() is called from mm_start() in mm.c.
                     35: mmgo1() in turn calls mmgo() (the original) if the character needs
                     36: to be displayed on the screen.
                     37: After each byte is taken from the output queue of the tty,
                     38: c = ttout(tp),
                     39: call mmgo1(c), and exit the loop if the return value is 1.
                     40: This is used to generate a significant delay between characters,
                     41: e.g. when each character produces a distinct tone.
                     42: If the return is 0 then continue the loop, processing the next output character.
                     43: This resurrects the original functionality,
                     44: appropriate when running in the (backward compatible) transparent mode.
                     45: Normally the return value is 2, which invokes some nontrivial fine timing.
                     46: If the timer shows we are at the start of the 11932 cycle,
                     47: wait until the cycle is (roughly) 1/5 finished.
                     48: (Use read_t0 to implement this timing control.)
                     49: Thus output characters and their associated clicks are somewhat synchronized.
                     50: The second character is held until 1/5+1/2 of the cycle has elapsed.
                     51: No more than two characters are displayed per cycle.
                     52: Once displayed, mmtime() returns and gives another process
                     53: a chance to grab the CPU.
                     54: However its timeout value is set to 1,
                     55: so if there is no contention, it immediately
                     56: receives the CPU and displays the next two characters.
                     57: Thus the output rate is (roughly) 200 characters per second,
                     58: which is just about optimal.
                     59: Furthermore, this is accomplished without monopolizing
                     60: the CPU or consuming too many CPU resources.
                     61: 
                     62: isrint() in kb.c calls sdinkey_coh().
                     63: This in turn calls isin() if the character is destined
                     64: for the tty input queue.
                     65: If the return is 0 then kb.c calls the usual machinery,
                     66: including isspecial() to interpret special characters.
                     67: Some code in isrint() is modified to allow control-fkeys to pass through;
                     68: they were originally discarded.
                     69: 
                     70: Before initializing the serial ports, al.c calls sdport_taken
                     71: to see if a speech session has taken over a serial port,
                     72: whereupon al.c should leav it alone.
                     73: As a quick hack, both sibling ports are declared nonexistent.
                     74: Someday we will leave the sibling port accessible.
                     75: 
                     76: Patchable variables sd0synth, sd0comport, and sd0bufsize
                     77: determine the type of synthesizer, the serial port it is attached to,
                     78: and the desired size of the internal circular buffer respectively.
                     79: Use patch to change these parameters.
                     80: Set sd0synth to 0 and the driver behaves
                     81: exactly as it use to.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.