claudio@ethz.UUCP (Claudio Nieder) (04/24/86)
Traps & Exceptions ================== While porting the One Pass Modula Compiler to the AMIGA several questions about Tasks, Processes, Trap and Exception Handling occured. I read the tutorial postings from Robert A. Peck but they don't answer my questions completely. 1.) I want to handle Traps (CHK instruction et al.) myself, instead of having this nice requester ("Software Error - Task Held"). I arrived to detect these traps, but I don't want to return to the program that initiated the trap. Is there any other way than replacing the return address on the stack? Does changing to UserState reenable Task-Switching automatically? 2.) I want to handle "Ctrl-C, -D, -E, -F" by an Exception. Again I arrived to detect these events by using SetExcept() for the bits 12..15, but my task is held if I press "Ctrl-C" twice very fast. This should be prevented by Exec as I interpreted the ROM Kernel Manual. Am I wrong? How can I get to any different place without replacing the return address on the stack? 3.) I want to start one of my procedures as a DOS process in the same way as the multitasking-tutorial spawned a task. This way IO and DOS procedure calls would be possible. Is this feasible? 4.) No Question, BUG report: Interface code to CreatePort() in Amiga.lib will never detect that there are no signals available on this task. MOVE.L #FFFFFFFF, -(A7); PUSH -1 JSR AllocSignal ; AllocSignal(-1) MOVE.L D0, D2 MOVE.B D2, D6 MOVE.B D6, D5 MOVEQ #0, D2 ; Clear D2 MOVE.B D6, D2 ; Move lowest byte CMPI.L #FFFFFFFF, D2 ; ALWAYS F A L S E !! ... If this is the code of the c-program in the ROMKernel Manual I would call this a bug in the C-Compiler! Hope that anybody out there in netland can help me. Thanx, kussi ( ... mcvax!cernvax!ethz!schaub )