diff --git a/Source/HBIOS/API.txt b/Source/HBIOS/API.txt index 74c8794c..c6f71d5e 100644 --- a/Source/HBIOS/API.txt +++ b/Source/HBIOS/API.txt @@ -132,7 +132,7 @@ INT ($FC): Interrupt vector management functions INTSET ($20): Set interrupt vector BC=Function/Subfunction A=Result HL=Interrupt Vector HL=Previous Vector - E=Interrupt Vector Table Position DE=Interrupt Routing Engine Address + E=Interrupt Vector Table Position Set the Interrupt Vector for the specified Interrupt Vector Table Position to the specified Interrupt Vector. The previous value at the specified table position @@ -151,28 +151,25 @@ INT ($FC): Interrupt vector management functions must be saved and restored by the interrupt handler. Interrupt handlers are different for IM1 or IM2. - + For IM1: The new interrupt handler is responsible for chaining (JP) to the previous vector - if the interrupt is not handled. The interrupt handler must return with ZF set - if interrupt is handled and ZF cleared if not handled. + if the interrupt is not handled. If the interrupt is handled, the new handler may + simply return (RET) with ZF cleared (NZ). For IM2: - The interrupt handler requires an invocation stub separate from the actual interrupt - handling code. The stub must be: + The new interrupt handler may either replace or hook the previous interrupt + handler. To replace the previous interrupt handler, the new handler just returns + (RET) when done. To hook the previous handler, the new handler can chain (JP) + to the previous vector. Note that initially all IM2 interrupt vectors are set + to be handled as “BAD” meaning that the interrupt is unexpected. In most cases, + you do not want to chain to the previous vector because it will cause the + interrupt to display a “BAD INT” system panic message. - PUSH HL - LD HL, - JP - - When calling Set Interrupt Vector, the address of the stub must be provided for the - Interrupt Vector parameter. The address of the Interrupt Routing Engine will be - returned in DE and must be inserted into the stub code as indicated above. In the - case of IM2 mode interrutps, the actual interrupt handler should not chain to the - previous entry. The new interrupt handler must assume all responsibilities for - the specific interrupt slot being occupied. + The interrupt framework will take care of issuing an EI and RETI instruction. + Do not put these instructions in your new handler. If the caller is transient, then the caller must remove the new interrupt handler and restore the original one prior to termination. This is accomplished by calling this @@ -236,8 +233,9 @@ DEVICE ($06): Serial Device Attributes Byte: 7: 0=RS-232, 1=Terminal + 6: 1=Parallel Port - If Terminal, 3-0 is attached Video Unit # + If device is of type Terminal, bits 3-0 indicate attached Video Unit # ============== Disk Functions