Annotation of coherent/b/kernel/FWB2/hooks, revision 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.