|
|
DataMuseum.dkPresents historical artifacts from the history of: Bogika Butler |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Bogika Butler Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 3712 (0xe80)
Types: TextFile
Names: »TRAP.SA«
└─⟦909f4eb2b⟧ Bits:30009789/_.ft.Ibm2.50006622.imd Mogens Pelles Zilog 80,000 / EOS projekt
└─⟦this⟧ »TRAP.SA«
└─⟦ddcd65152⟧ Bits:30009789/_.ft.Ibm2.50006617.imd Mogens Pelles Zilog 80,000 / EOS projekt
└─⟦this⟧ »TRAP.SA«
NOLIST
INCLUDE RR.FIOEQU.SA
INCLUDE RR.RTEQU.SA
LIST
NOFORMAT
TTL V 0.05 68K EOS PASCAL TRAP
TRAP IDNT 0,05 68K EOS PASCAL TRAP
SECTION 8
*
*****************************************************************************
*
*
* FUNCTION:
* THE ROUTINE HANDLES INTERNAL INTERRUPTS, BY SETTING CAUSE
* AND AUX CAUSE AND CALLING EXCEPT. THE ROUTINE IS CALLED
* FROM BOBJ.
*
* REGISTERS:
* ON ENTRY:
*
* D0 FUNCTION NUMBER = 0
* D1 ERROR NUMBER
* D3 VECTOR NUMBER
* D4 OLD PC
*
*
* ON EXIT
* D0 CAUSE + AUX CAUSE
*
*
* MODIFIED REGISTERS
*
* 0 1 2 3 4 5 6 7
* A: *
* D: * * *
*
* EXTERNALS:
*
* .PTRAP DEF
* .PEXCEPT REF
*
*
***************************************************************************
*
XDEF .PTRAP
XREF .PEXCEPT
ALLRS REG D0-D7/A0-A7 REGISTER MASK OF ALL REGISTERS
.PTRAP EQU * ENTRY POINT
TSTOUT 'TRAP-STACK',(SP),RTERRST(A5)
MOVEM.L ALLRS,REGS(A5) SAVE THE REGISTERS
MOVE.L D4,A0
TSTOUT 'TRAP-CODE',-32(A0),64(A0)
MOVE.L #GIVEUP,D0 CAUSE:= GIVEUP
SWAP D0
MOVE.W #INVALPTR,D0 AUX CAUSE:= INVALID POINTER
CMP.L #2,D3
BEQ .PEXCEPT
MOVE.W #COMPERR,D0 AUX CAUSE:= COMPILER ERROR
CMP.L #3,D3 ADDRESS ERROR TRAP
BEQ .PEXCEPT
MOVE.W #DIVZRO,D0 AUX CAUSE:= ZERO DIVIDE
CMP.L #5,D3 DIVIDE FAULT TRAP
BEQ .PEXCEPT
MOVE.W #VALRNG,D0 AUX CAUSE:= VALUE RANGE
CMP.L #6,D3 CHECK INSTRUCTION TRAP
BEQ .PEXCEPT
MOVE.W #OVRFLW,D0 AUX CAUSE:= OVERFLOW
CMP.L #7,D3 OVERFLOW TRAP
BEQ .PEXCEPT
MOVE.W #VALRNG,D0 AUX CAUSE:= VALUE RANGE
CMP.L #45,D3 TRAP 13 HANDLER
BEQ .PEXCEPT
CMP.L #46,D3 TRAP 14 HANDLER
IF <EQ> THEN.S
MOVE.L D4,A1
MOVE.W (A1),D2 GET ERROR TYPE
EXT.L D2
ADD.L D2,D2
JMP TABLE(PC,D2)
TABLE BRA.S TRAP140 TYPE 0
BRA.S TRAP141 TYPE 1
BRA.S TRAP142 TYPE 2
BRA.S TRAP140 TYPE 3
BRA.S TRAP142 TYPE 4
TRAP140 OR.W #$1000,D1 PASCAL RUNTIME +
MOVE.W D1,D0 INLINE RUNTIME ERRORS
BRA .PEXCEPT
TRAP141 OR.W #$2000,D1 FLOATING POINT ERROR
MOVE.W D1,D0
BRA .PEXCEPT
TRAP142 MOVE.W D1,D0 OS ERROR + USER HALT
BRA .PEXCEPT
ENDI
MOVE.L #2,D0 IF UNKNOWN VECTOR NUMBER
SWAP D0 CAUSE := 2
MOVE.W D3,D0 AUX CAUSE:= VECTOR NUMBER
BRA .PEXCEPT
END
«eof»