Processes ------------------------------------------------------------------ 1-901 Function Name: InitProcesses Purpose: Sets up a table of recurring timed events. Call address: $C103 Input requirements: A The number of entries in the table. $02-$03 R0 A pointer to the table of counters and routine addresses. Description: This routine copies a table of subroutine addresses and counter values into GEOS's tables at $872D and $8755. The counters will be decremented on each call to InterruptMain. When they reach zero, they are reset and the associated routine is called by the GEOS main loop. The command bytes are initially set to disable the counters. Several calls to RestartProcess are needed to start the counters running, one for each entry in the table. The table consists of pairs of words. The first is the address of the subroutine to be executed each time the counter reaches zero and the second is the counter value. This appears to be the rudiments of multitasking GEOS. The table of command bytes at $8719 are bit oriented and operate according to the following table: Bit 7 - Timer reached zero, call the subroutine. Bit 6 - Disable the execution of the routine. This does NOT affect the counter. Bit 5 - Initially set by InitProcesses, causes the counter to stop running. Bit 4 - Though not referenced anywhere in the GEOS Kernal, this bit also stops the counter. This bit is NOT touched by any of the GEOS routines, including RestartProcess. 1-902 Function Name: EnableProcess Purpose: Forces a timed event to execute, regardless of its timer. Call address: $C109 Input requirements: X The index into the command byte table at $8719. Preparatory routines: InitProcesses Description: This routine sets bit 7 of a specific command byte in the table at $8719. This simulates the timer having run out. 1-903 Function Name: RestartProcess Purpose: Enables a recurring timed event. Call address: $C106 Input requirements: X The index into the command table at $8719. Preparatory routines: InitProcesses Description: This routine enables a specific timer in the table at $8719 by resetting bits 5 and 6 in the command table. It also copies the initial value into the timer table at $87F1. The command table must have been previously set up by a call to InitProcesses. 1-904 Function Name: FreezeProcess Purpose: Stops the timer on a timed event. Call address: $C112 Input requirements: X The index into the command table at $8719. Preparatory routines: InitProcesses Description: This routine sets bit 5 of a specific command byte in the table at $8719. This prevents the associated timer from running. This routine is the complement to UnfreezeProcess. 1-905 Function Name: BlockProcess Purpose: Disables the execution of a timed event. Call address: $C10C Input requirements: X The index into the command table at $8719. Preparatory routines: InitProcesses Description: This routine sets bit 6 of a specific command byte in the table at $8719. This prevents the associated routine from executing, regardless of its timer. This does NOT stop the timer from running. If the timer runs out while the routine is disabled, when the timer is reenabled, the associated routine will be executed. This routine is the complement to UnblockProcess. 1-906 Function Name: UnblockProcess Purpose: Enables the execution of a timed event. Call address: $C10F Input requirements: X The index into the command table at $8719. Preparatory routines: InitProcesses Description: This routine resets bit 6 of a specific command byte in the table at $8719. This allows the associated routine to be executed when its timer runs out. If the timer had run out while the routine was disabled, GEOS will execute the routine when it gets to it. This is the complement to BlockProcess. 1-907 Function Name: UnfreezeProcess Purpose: Restarts the timer on a timed event. Call address: $C115 Input requirements: X The index into the command table at $8719. Preparatory routines: InitProcesses Description: This routine resets bit 5 of a specific command byte in the table at $8719. This enables the associated counter. This routine is the complement to FreezeProcess. This routine is NOT a replacement for RestartProcess. This routine does not copy the timer's initial value as does RestartProcess.