home *** CD-ROM | disk | FTP | other *** search
- *=============================================================================
- *
- *
- * Err4
- *
- *
- * Copyright 1987 All Rights Reserved
- *
- *
- * Christian Johnsen
- *
- *
- *=============================================================================
-
-
- *=============================================================================
- *
- * Declarations
- *
- *=============================================================================
-
- *=============================================================================
- *
- * INCLUDE "exec/types.i"
- * INCLUDE "exec/tasks.i"
- * INCLUDE "exec/libraries.i"
- * INCLUDE "intuition/intuition.i"
- * INCLUDE "graphics/gfxbase.i"
- * INCLUDE "exec/nodes.i"
- * INCLUDE "exec/lists.i"
- * INCLUDE "exec/ports.i"
- * INCLUDE "libraries/dos.i"
- * INCLUDE "libraries/dosextens.i"
- * INCLUDE "workbench/startup.i"
- *
- *=============================================================================
-
-
- INCLUDE "TrapEQU" file of above includes EQU'd
-
- IDNT "Err4" declare name
-
- XDEF _ErrorHandler reentry after error
- XDEF _Main reference for startup code
-
- XREF _GOMF entry for initialization
- XREF _GOMFEnding entry for termination
- XREF _ProgramCounter contains user program counter
- XREF _LibraryErr contains pointer to string
- XREF _GeneralErr contains pointer to string
- XREF _SpecificErr contains pointer to string
- XREF _WHAP BYTE BOOLEAN flag for selection
-
- XREF _AbsExecBase amiga.lib
- XREF _romstart amiga.lib
-
- XREF _LVOClearScreen grahics.library
- XREF _LVOCloseWindow intuition.library
- XREF _LVOCloseLibrary exec.library
- XREF _LVODrawBorder intuition.library
- XREF _LVOGetMsg exec.library
- XREF _LVOMove exec.library
- XREF _LVOOpen dos.library
- XREF _LVOOpenLibrary exec.library
- XREF _LVOOpenWindow intuition.library
- XREF _LVORefreshGadgets intuition.library
- XREF _LVOReplyMsg exec.library
- XREF _LVOSetBPen grahics.library
- XREF _LVOPrintIText intuition.library
- XREF _LVOWindowToFront intuition.library
- XREF _LVOWaitPort exec.library
-
- Program EQU $000000 base address
- FlagUp EQU $FF on or selected status
- FlagDown EQU $00 off or unselected status
-
-
- *=============================================================================
- *
- * Program To Link With GOMF1.0
- *
- *=============================================================================
-
-
- RORG Program relocatable position origin
-
- _Main
-
- *-----------------------------------------------------------------------------
- Err4
- *-----------------------------------------------------------------------------
-
- MOVEM.L D1-D7/A0-A6,-(A7) stack registers to preserve
- MOVEA.L _AbsExecBase,A6 get pointer to Exec base
-
- OpenIntuition
-
- LEA.L IntuitName,A1 set library name pointer
- MOVEQ #0,D0 expect any version
- JSR _LVOOpenLibrary(A6) open Exec library
- MOVE.L D0,IntuitLib save library base pointer
- BEQ NormalEnding if not end clean else...
-
- OpenWindow
-
- MOVEA.L IntuitLib,A6 set pointer to library node
- LEA.L TrapCreatorWindowStructure,A0 set new window pointer
- MOVEQ #0,D0 expect pointer return
- JSR _LVOOpenWindow(A6) open the window
- MOVE.L D0,WindowPnt save pointer to new window
- BEQ NormalEnding no window - so exit else...
- MOVEA.L D0,A0 set new window pointer
- MOVE.L wd_RPort(A0),RastPnt save rastport pointer
- MOVE.L wd_UserPort(A0),UserPnt save IDCMP port pointer
-
- TrapErrMessage
-
- MOVEA.L IntuitLib,A6 set pointer to library base
- MOVEQ #0,D0 x rastport offset
- MOVEQ #0,D1 y rastport offset
- MOVE.L RastPnt,A0 retrieve rastport pointer
- LEA.L TrapIntuiTextList,A1 copy intuitext structure pointer
- JSR _LVOPrintIText(A6) print our title in window
-
- SetupGOMF
-
- MOVEQ #0,D0 expect a return code
- JSR _GOMF initialize GOMF1.0
- TST.L D0 was there an error?
- BEQ TrapErrAwaitMessage if not continue else...
- BRA CloseTheWindow quit clean
-
- _ErrorHandler
-
- TST.B PrintFlag should we print the normal message
- BEQ TrapErrAwaitMessage if so do nothing else...
- BSR PrintIt print message from GOMF
-
- TrapErrAwaitMessage
-
- MOVE.B #FlagUp,PrintFlag set the print flag
- MOVEA.L _AbsExecBase,A6 set pointer to library base
- MOVEQ #0,D0 expect a message pointer
- MOVEA.L UserPnt,A0 copy message port pointer
- JSR _LVOWaitPort(A6) get a message
- MOVEA.L _AbsExecBase,A6 set pointer to library base
- MOVEQ #0,D0 expect a message pointer
- MOVEA.L UserPnt,A0 copy message port pointer
- JSR _LVOGetMsg(A6) get a message
- TST.L D0 did we get one?
- BEQ TrapErrAwaitMessage no so skip back else...
- MOVEA.L D0,A1 copy message pointer
- MOVE.L D0,MsgPnt save message node pointer
- MOVE.L im_Class(A1),D1 fetch intuition message class
-
- CloseWindowMessage
-
- CMPI.L #CLOSEWINDOW,D1 is it a close gadget message?
- BEQ DoClose if so quit else...
-
- GadgetUpMessage
-
- CMPI.L #GADGETUP,D1 is it a gadget up message?
- BNE TrapWhatElse if so quit else...
-
- TrapGadgets
-
- MOVEA.L im_IAddress(A1),A0 get gadget structure address
- MOVE.W gg_GadgetID(A0),D0 get gadget id number
- CMPI.W #1,D0 address error gadget?
- BEQ DoTrap3 if so perform error else...
-
- IllInstructGadget
-
- CMPI.W #2,D0 illegal instruction gadget?
- BEQ DoTrap4 if so perform error else...
-
- Div0Gadget
-
- CMPI.W #3,D0 division by zero gadget?
- BEQ DoTrap5 if so perform error else...
-
- CHKInstructGadget
-
- CMPI.W #4,D0 CHK instruction gadget?
- BEQ DoTrap6 if so perform error else...
-
- OverflowGadget
-
- CMPI.W #5,D0 overflow error gadget?
- BEQ DoTrap7 if so perform error else...
-
- PiviledgeGadget
-
- CMPI.W #6,D0 privelege violation gadget?
- BEQ DoTrap8 if so perform error else...
-
- Opcode1010Gadget
-
- CMPI.W #7,D0 opcode 1010 gadget?
- BEQ DoTrapA if so perform error else...
-
- Opcode1111Gadget
-
- CMPI.W #8,D0 opcode 1111 gadget?
- BEQ DoTrapB if so perform error else...
-
- TrapWhatElse
-
- MOVEA.L MsgPnt,A1 set message structure pointer
- BSR FreeMessage return message structure
- BRA TrapErrAwaitMessage snooze until more news
-
- *-----------------------------------------------------------------------------
- ErrorRoutines
- *-----------------------------------------------------------------------------
-
- DoTrap3
-
- MOVEA.L MsgPnt,A1 set message structure pointer
- BSR FreeMessage return message structure
- MOVE.L 3,D0 cause address error
-
- DoTrap4
-
- MOVEA.L MsgPnt,A1 set message structure pointer
- BSR FreeMessage return message structure
- DC.W $4529 illegal opcode value
-
- DoTrap5
-
- MOVEA.L MsgPnt,A1 set message structure pointer
- BSR FreeMessage return message structure
- MOVEQ #0,D0 set for zero division
- MOVEQ #0,D1 set for zero division
- DIVU D0,D1 divide zero by zero
-
- DoTrap6
-
- MOVEA.L MsgPnt,A1 set message structure pointer
- BSR FreeMessage return message structure
- MOVE.L #1,D0 set D0 to small value
- MOVE.L #-1,D1 set D1 to negative value
- CHK D0,D1 cause a CHK trap
-
- DoTrap7
-
- MOVEA.L MsgPnt,A1 set message structure pointer
- BSR FreeMessage return message structure
- MOVE #%00000010,CCR set overflow bit of status register
- TRAPV cause the trap call
-
- CreditsCopyrightNotice
-
- AuthorName DC.B ' Written in assembler by Christian Johnsen '
- Notice DC.B ' COPYRIGHT © 1987 - ALL RIGHTS RESERVED '
- CNOP 0,2
-
- DoTrap8
-
- MOVEA.L MsgPnt,A1 set message structure pointer
- BSR FreeMessage return message structure
- MOVE.W #25,SR violate privilege
-
- DoTrapA
-
- MOVEA.L MsgPnt,A1 set message structure pointer
- BSR FreeMessage return message structure
- DC.W $A123 instruction word between A000 and AFFF
-
- DoTrapB
-
- MOVEA.L MsgPnt,A1 set message structure pointer
- BSR FreeMessage return message structure
- DC.W $F123 instruction word between F000 and FFFF
-
- DoClose
-
- MOVEA.L MsgPnt,A1 set message structure pointer
- BSR FreeMessage return message structure
- MOVEA.L _AbsExecBase,A6 set pointer to library base
- MOVEQ #0,D0 expect a message pointer
- MOVEA.L UserPnt,A0 copy message port pointer
- JSR _LVOGetMsg(A6) try for another message
- TST.L D0 did we get one?
- BNE DoClose if so skip back else...
- MOVEQ #0,D0 expect a return code
- JSR _GOMFEnding allow GOMF1.0 to terminate
- TST.L D0 was there an error?
- BEQ CloseTheWindow if not continue else...
- BRA NormalEnding quit but leave window open
-
- CloseTheWindow
-
- TST.L WindowPnt window open?
- BEQ EndIntuition if not skip else...
- MOVEA.L WindowPnt,A0 pass window pointer
- MOVEA.L IntuitLib,A6 get library base pointer
- JSR _LVOCloseWindow(A6) if so close up window
-
- *-----------------------------------------------------------------------------
- NormalEnding
- *-----------------------------------------------------------------------------
-
- EndIntuition
-
- TST.L IntuitLib Intuition open?
- BEQ EndUp if not skip else...
- MOVEA.L _AbsExecBase,A6 get exec library base pointer
- MOVEA.L IntuitLib,A1 get library node
- JSR _LVOCloseLibrary(A6) close it
-
- EndUp
-
- MOVEM.L (A7)+,D1-D7/A0-A6 stack registers to preserve
- MOVEQ #0,D1 return favourable error code
- RTS task terminated cleanly
-
- *-----------------------------------------------------------------------------
- PrintIt
- *-----------------------------------------------------------------------------
-
- BlankOutOldMessage
-
- MOVE.L #BlankLine,Line1 blank old message line
- MOVE.L #BlankLine,Line2 blank old message line
- MOVE.L #BlankLine,Line3 blank old message line
- MOVE.L #BlankLine,Line4 blank old message line
- MOVEA.L IntuitLib,A6 set pointer to library base
- MOVEQ #0,D0 x rastport offset
- MOVEQ #0,D1 y rastport offset
- MOVE.L RastPnt,A0 retrieve rastport pointer
- LEA.L TrapIntuiTextList,A1 copy intuitext structure pointer
- JSR _LVOPrintIText(A6) print our title in window
-
- SetNewMessage
-
- LEA.L _LibraryErr,A0 set pointer to GOMF feedback element
- MOVE.L (A0)+,Line1 setup a line
- MOVE.L (A0)+,Line2 setup a line
- MOVE.L (A0)+,Line3 setup a line
- MOVE.B (A0),D0 get the WHAP flag
- TST.B D0 what's the state returned?
- BNE DidWhap if true then whapped
- MOVE.L #NotWhapped,Line4 if not advise user
- BRA PrintLines print it
-
- DidWhap
-
- MOVE.L #Whapped,Line4 if not advise user
-
- PrintLines
-
- LEA.L _ProgramCounter,A0 set pointer to GOMF feedback element
- MOVE.L (A0),D0 setup a line
- LEA.L PCNum,A0 set pointer string segment
- BSR PlexHexText make PC a string and place it
- MOVE.L #PCString,PCText set pointer to program counter string
- MOVEA.L IntuitLib,A6 set pointer to library base
- MOVEQ #0,D0 x rastport offset
- MOVEQ #0,D1 y rastport offset
- MOVE.L RastPnt,A0 retrieve rastport pointer
- LEA.L TrapIntuiTextList,A1 copy intuitext structure pointer
- JSR _LVOPrintIText(A6) print our title in window
- RTS back for another call
-
- *-----------------------------------------------------------------------------
- FreeMessage
- *-----------------------------------------------------------------------------
-
- MOVEA.L _AbsExecBase,A6 get library base pointer
- JSR _LVOReplyMsg(A6) return the message structure
- RTS back for more
-
- *-----------------------------------------------------------------------------
- PlexHexText
- *-----------------------------------------------------------------------------
-
- MOVE.L D2,-(A7) stack register temporarily
- MOVEQ #3,D2 set up count register
- BRA DecodeBits skip shifting first time through
-
- ShiftToNextBits
-
- LSR.L #8,D0 shift error number right 1 byte
-
- DecodeBits
-
- MOVEQ #0,D1 zero register
- MOVE.B D0,D1 get first byte
- ANDI.B #%00001111,D1 mask upper nybble
- BSR HexToASCII convert digit
- MOVE.B D0,D1 get first byte
- LSR.B #4,D1 shift upper nibble low
- ANDI.B #%00001111,D1 mask upper nybble
- BSR HexToASCII convert digit
- DBEQ D2,ShiftToNextBits decrement counter until done
- MOVE.L (A7)+,D2 retrieve stacked register
- RTS hex number converted to ASCII string
-
- *-----------------------------------------------------------------------------
- HexToASCII
- *-----------------------------------------------------------------------------
-
- CMPI.B #10,D1 decimal digit or hex letter?
- BLT AddZero if so skip next operation
- ADDI.B #'A'-'0'-$0A,D1 offset to letters
-
- AddZero
-
- ADDI.B #'0',D1 convert it to ASCII
- MOVE.B D1,-(A0) hex digit added to buffer
- RTS
-
-
- *=============================================================================
- *
- * Memory Constants / Variables
- *
- *=============================================================================
-
-
- *-----------------------------------------------------------------------------
- SECTION TrapInitVars,DATA
- *-----------------------------------------------------------------------------
-
- CNOP 0,4 align structure
-
- IntuitName DC.B 'intuition.library',0
-
- CNOP 0,4 align structure
-
- DefaultInitialization
-
- IntuitLib DC.L 0 intuition library base pointer
- RastPnt DC.L 0 rastport pointer
- WindowPnt DC.L 0 window pointer
- UserPnt DC.L 0 user reply port pointer
- MsgPnt DC.L 0 tempory store for message pointer
- PrintFlag DC.B FlagDown flag for return message printing
-
-
- *============================================================================
- *
- * Trap Tester Window Structures
- *
- *============================================================================
-
-
- CNOP 0,4 align structure
-
- TrapCreatorWindowStructure
-
- DC.W 277,15,335,176
- DC.B 0,1
- DC.L GADGETUP!CLOSEWINDOW
- DC.L WINDOWCLOSE!WINDOWDRAG!WINDOWDEPTH!ACTIVATE
- DC.L TrapGadget3,0
- DC.L TrapName,0,0
- DC.W 335,176,335,176,WBENCHSCREEN
-
- TrapName
-
- DC.B ' Err4 ',0
- CNOP 0,2
-
- TrapGadgetList
-
- TrapGadget3
-
- DC.L TrapGadget1
- DC.W 183,70,113,16,GADGHCOMP,RELVERIFY,BOOLGADGET
- DC.L TrapBord1,0,TrapText1,0,0
- DC.W 2
- DC.L 0
-
- TrapBord1
-
- DC.W -2,-1
- DC.B 1,0,RP_JAM2
- DC.B 5
- DC.L TrapBordVectors1,0
-
- TrapBordVectors1
-
- DC.W 0,0,116,0,116,17,0,17,0,0
-
- TrapText1
-
- DC.B 3,0,RP_JAM2,0
- DC.W 8,4
- DC.L 0,TrapIText1,0
-
- TrapIText1
-
- DC.B 'Illegal Inst',0
- CNOP 0,2
-
- TrapGadget1
-
- DC.L TrapGadget5
- DC.W 36,70,113,16,GADGHCOMP,RELVERIFY,BOOLGADGET
- DC.L TrapBord2,0,TrapText2,0,0
- DC.W 1
- DC.L 0
-
- TrapBord2
-
- DC.W -2,-1
- DC.B 1,0,RP_JAM2,5
- DC.L TrapBordVectors2,0
-
- TrapBordVectors2
-
- DC.W 0,0,116,0,116,17,0,17,0,0
-
- TrapText2
-
- DC.B 3,0,RP_JAM2,0
- DC.W 5,4
- DC.L 0,TrapIText2,0
-
- TrapIText2
-
- DC.B 'Address Error',0
- CNOP 0,2
-
- TrapGadget5
-
- DC.L TrapGadget6
- DC.W 37,94,113,16,GADGHCOMP,RELVERIFY,BOOLGADGET
- DC.L TrapBord3,0,TrapText3,0,0
- DC.W 3
- DC.L 0
-
- TrapBord3
-
- DC.W -2,-1
- DC.B 1,0,RP_JAM2,5
- DC.L TrapBordVectors3,0
-
- TrapBordVectors3
-
- DC.W 0,0,116,0,116,17,0,17,0,0
-
- TrapText3
-
- DC.B 3,0,RP_JAM2,0
- DC.W 13,4
- DC.L 0,TrapIText3,0
-
- TrapIText3
-
- DC.B 'Divide Zero',0
- CNOP 0,2
-
- TrapGadget6
-
- DC.L TrapGadget7
- DC.W 183,94,113,16,GADGHCOMP,RELVERIFY,BOOLGADGET
- DC.L TrapBord4,0,TrapText4,0,0
- DC.W 4
- DC.L 0
-
- TrapBord4
-
- DC.W -2,-1
- DC.B 1,0,RP_JAM2,5
- DC.L TrapBordVectors4
- DC.L 0
-
- TrapBordVectors4
-
- DC.W 0,0,116,0,116,17,0,17,0,0
-
- TrapText4
-
- DC.B 3,0,RP_JAM2,0
- DC.W 25,4
- DC.L 0,TrapIText4,0
-
- TrapIText4
-
- DC.B 'CHK Inst',0
- CNOP 0,2
-
- TrapGadget7
-
- DC.L TrapGadget8
- DC.W 37,118,113,16,GADGHCOMP,RELVERIFY,BOOLGADGET
- DC.L TrapBord5,0,TrapText5,0,0
- DC.W 5
- DC.L 0
-
- TrapBord5
-
- DC.W -2,-1
- DC.B 1,0,RP_JAM2,5
- DC.L TrapBordVectors5,0
-
- TrapBordVectors5
-
- DC.W 0,0,116,0,116,17,0,17,0,0
-
- TrapText5
-
- DC.B 3,0,RP_JAM2,0
- DC.W 5,4
- DC.L 0,TrapIText5,0
-
- TrapIText5
-
- DC.B 'Overflow Trap',0
- CNOP 0,2
-
- TrapGadget8
-
- DC.L TrapGadget9
- DC.W 184,118,113,16,GADGHCOMP,RELVERIFY,BOOLGADGET
- DC.L TrapBord6,0,TrapText6,0,0
- DC.W 6
- DC.L 0
-
- TrapBord6
-
- DC.W -2,-1
- DC.B 1,0,RP_JAM2,5
- DC.L TrapBordVectors6,0
-
- TrapBordVectors6
-
- DC.W 0,0,116,0,116,17,0,17,0,0
-
- TrapText6
-
- DC.B 3,0,RP_JAM2,0
- DC.W 8,4
- DC.L 0,TrapIText6,0
-
- TrapIText6
-
- DC.B 'Priv Violate',0
- CNOP 0,2
-
- TrapGadget9
-
- DC.L TrapGadget10
- DC.W 38,142,113,16,GADGHCOMP,RELVERIFY,BOOLGADGET
- DC.L TrapBord7,0,TrapText7,0,0
- DC.W 7
- DC.L 0
-
- TrapBord7
-
- DC.W -2,-1
- DC.B 1,0,RP_JAM2,5
- DC.L TrapBordVectors7,0
-
- TrapBordVectors7
-
- DC.W 0,0,116,0,116,17,0,17,0,0
-
- TrapText7
-
- DC.B 3,0,RP_JAM2,0
- DC.W 14,5
- DC.L 0,TrapIText7,0
-
- TrapIText7
-
- DC.B '1010 Opcode',0
- CNOP 0,2
-
- TrapGadget10
-
- DC.L 0
- DC.W 185,142,113,16,GADGHCOMP,RELVERIFY,BOOLGADGET
- DC.L TrapBord8,0,TrapText8,0,0
- DC.W 8
- DC.L 0
-
- TrapBord8
-
- DC.W -2,-1
- DC.B 1,0,RP_JAM2,5
- DC.L TrapBordVectors8,0
-
- TrapBordVectors8
-
- DC.W 0,0,116,0,116,17,0,17,0,0
-
- TrapText8
-
- DC.B 3,0,RP_JAM2,0
- DC.W 12,5
- DC.L 0,TrapIText8,0
-
- TrapIText8
-
- DC.B '1111 Opcode',0
- CNOP 0,2
-
- TrapIntuiTextList
-
- TrapText9
-
- DC.B 1,0,RP_JAM2,0
- DC.W 18,15
- DC.L TOPAZ80
- Line1 DC.L TrapIText9,TrapText10
-
- TrapIText9
-
- DC.B 'This program has been linked with ',0
- CNOP 0,2
-
- TrapText10
-
- DC.B 1,0,RP_JAM2,0
- DC.W 18,26
- DC.L TOPAZ80
- Line2 DC.L TrapIText10,TrapText11
-
- TrapIText10
-
- DC.B 'GOMF 1.0, which will trap any errors ',0
- CNOP 0,2
-
- TrapText11
-
- DC.B 1,0,RP_JAM2,0
- DC.W 18,38
- DC.L TOPAZ80
- Line3 DC.L TrapIText11,TrapText12
-
- TrapIText11
-
- DC.B 'created by your gadget selections. ',0
- CNOP 0,2
-
- TrapText12
-
- DC.B 1,0,RP_JAM2,0
- DC.W 18,50
- DC.L TOPAZ80
- Line4 DC.L TrapIText12
- PCText DC.L 0
-
- TrapIText12
-
- DC.B 'Please select a gadget to test it. ',0
- CNOP 0,2
-
- Whapped
-
- DC.B 'User selected the WHAP gadget. ',0
- CNOP 0,2
-
- NotWhapped
-
- DC.B 'User did not select the WHAP gadget. ',0
- CNOP 0,2
-
- PCString
-
- DC.B 1,0,RP_JAM2,0
- DC.W 168,15
- DC.L TOPAZ80
- DC.L PCNumberString,0
-
- PCNumberString
-
- DC.B ' PC '
- PCNum
- DC.B 0
- CNOP 0,2
-
- BlankLine
-
- DC.B ' ',0
- CNOP 0,2
-
- TOPAZ80
-
- DC.L TOPAZname
- DC.W TOPAZ_EIGHTY
- DC.B 0,0
-
- TOPAZname
-
- DC.B 'topaz.font',0
- CNOP 0,2
-
-
- END assembly completed
-
-