; M2Amiga Object-File Disassembler V 2.0  © Bernd Preusing 1988
; Disassembly of m2a:obj/arts.obj
; Der Fehler bei Divu32 ist fast am Ende

; TYPE	MyNodePtr = POINTER TO MyNode; (* Typ für Debug- und Term-Liste *)
;	MyNode = RECORD
;		next: MyNodePtr;
;		proc: PROC;
;		level: INTEGER;
;		active: BOOLEAN
;		END;

	CODE
	DC.L 1  ; Kennung: .obj-File
	DC.W 1	; mod
	DC.B 'Arts'
	DS.B 28,0
	DC.W $0DDE,$013E,$068D

; CodeSize
	DC.L	ENDE-Prog
; VarSize
	DC.L	318
; ConstSize
	DC.L	Jumps-Consts
; Jumps
	DC.L	18
; Modules
	DC.L	6

Consts:
K000001:
msg_SysErr	EQUR	K000001+212
 DC.B "SystemError(%d)",0
K000002:
IntuiName	EQUR	K000002+212
 DC.B "intuition.library",0
K000003:
msg_ueberlaufLang	EQUR	K000003+212
 DC.B "Überlauf (lang)",0
K000004:
msg_BereichsFehlerLang	EQUR	K000004+212
 DC.B "Bereichsfehler (lang)",0
K000005:
msg_UeberlaufTrapV	EQUR	K000005+212
 DC.B "Überlauf (TRAPV)",0,0
K000006:
msg_BereichsFehlerCHK	EQUR	K000006+212
 DC.B "Bereichsfehler (CHK)",0,0
K000007:
msg_DivDurch0	EQUR	K000007+212
 DC.B "Division durch Null",0
K000008:
msg_UngueltigeInstr	EQUR	K000008+212
 DC.B "Ungültige Instruktion",0
K000009:
msg_AdressErr	EQUR	K000009+212
 DC.B "Address Fehler",0,0
K000010:
msg_UngArtsCall	EQUR	K000010+212
 DC.B "Ungültiger Aufruf von Arts.Call",0
K000011:
msg_StapelUeberl	EQUR	K000011+212
 DC.B "STAPEL ÜBERLAUF",0
K000012:
msg_FuncOhneRET	EQUR	K000012+212
 DC.B "Funktion ohne RETURN beendet",0,0
K000013:
msg_UngCASE	EQUR	K000013+212
 DC.B "Ungültiger CASE Index",0
K000014:
msg_ProgrHALT	EQUR	K000014+212
 DC.B "Programmiertes HALT",0
K000015:
msg_FehlerOeffnenDer	EQUR	K000015+212
 DC.B "Fehler beim Öffnen der",0,0
K000016:
msg_Speichermangel	EQUR	K000016+212
 DC.B "Speichermangel",0,0
K000017:
msgUnterbruch	EQUR	K000017+212
 DC.B "^C (Benutzer Unterbruch)",0,0
K000018:
msg_TRAP	EQUR	K000018+212
 DC.B "Prozessor Trap (%d)",0
K000019:
msg_LaufzeitErr	EQUR	K000019+212
 DC.B "Modula-2 Laufzeitfehler",0
K000020:
msg_debug	EQUR	K000020+212
 DC.B " debug ",0
K000021:
msg_weiter	EQUR	K000021+212
 DC.B " weiter ",0,0
K000022:
msg_breakPoint	EQUR	K000022+212
 DC.B "Modula-2 BreakPoint",0
K000023:
msg_Assert	EQUR	K000023+212
 DC.B "Modula-2 Assert",0
K000024:
msg_abbrechen	EQUR	K000024+212
 DC.B " abbrechen ",0
 DC.B "dos.library",0

Jumps:
	DC.W	$4EF9,0,TermProcedure-276
K000025:
Terminate1 EQUR	K000025+212
	DC.W	$4EF9,0,Terminate-276
	DC.W	$4EF9,0,RemoveTermProc-276
	DC.W	$4EF9,0,RemoveDebugProc-276
	DC.W	$4EF9,0,Error-276
	DC.W	$4EF9,0,DebugProcedure-276
	DC.W	$4EF9,0,CurrentLevel-276
K000026:
Call1	EQUR	K000026+212
	DC.W	$4EF9,0,Call-276
	DC.W	$4EF9,0,BreakPoint-276
K000027:
Assert1	EQUR	K000027+212
	DC.W	$4EF9,0,Assert-276
	DC.W	$4EF9,0,Divs32-276
	DC.W	$4EF9,0,Muls32-276
	DC.W	$4EF9,0,Divu32-276
	DC.W	$4EF9,0,Mulu32-276
K000028:
SystemError1 EQUR K000028+212
	DC.W	$4EF9,0,SystemError-276
	DC.W	$4EF9,0,StkChk-276
	DC.W	$4EF9,0,Startup-276
	DC.W	$4EF9,0,Proc000-276

ModuleIds:
	DC.W 3	; noImp
	DC.B 'Assembler'
	DS.B 23,0
	DC.W $0DDE,$013F,$0196
AssemBs EQUR Prog-24

	DC.W 2	; library
	DC.B 'dos.library'
	DS.B 21,0
	DC.W	0
	DC.L	33
dos_lBs EQUR Prog-20

	DC.W 2	; library
	DC.B 'exec.library'
	DS.B 20,0
	DC.W	0
	DC.L	33
exec_Bs EQUR Prog-16

	DC.W 0	; none
	DS.B 32,0
	DC.W $0000,$0000,$0000

	DC.W 0	; none
	DS.B 32,0
	DC.W $0000,$0000,$0000

	DC.W 0	; none
	DS.B 32,0
	DC.W $0000,$0000,$0000


dataPtr EQUR Prog-28
; Vars -xx(A4)
; -2: ModulSchonInitialisiert: BITSET (in jedem Modul)
; -6: initialSP
; -10: stackSize
; -14: stackTop
; -18: dosCmdBuf
; -22: dosCmdLen
; -26: returnVal
; -27: detectCtrlC
; -28: wbStarted
; -32: startupMsg
; -36: errorFrame.text
; -40: errorFrame.case
; -42: errorFrame.error
; -46: errorFrame.mp
; -50: errorFrame.sb
; -54: errorFrame.pc
; -58: moduleInfoPtr

; -62:14 UngueltCALL
; -66:13 StackOvfl
; -70:12 FUNCRet
; -74:11 CASE
; -78:10 HALT

; -82:9 TRAPV
; -86:8 CHK
; -90:7 DivDurch0
; -94:6 UngueltInst
; -98:5 ADDRErr
; -102:4
; -106:3
; -110:2

; -114:1 BereichLang
; -118:0 UeberlLang  MessageArr: ARRAY [0..14] OF ADDRESS

; -122: rawDoProc: LONGCARD
; -126: myTask: TaskPtr
; -128: currLevel: INTEGER
; -129: termAllowed: BOOLEAN;
; -162..-130: SPArr: ARRAY[0..7] OF ADDRESS (alte SP je Level)

; -166:  .nextText
; -182: IntuiText1

; -186:  .nextText
; -202: IntuiText2

; -222: IntuiText3

; -230:  .iText
; -242: IntuiText4

; -262: IntuiText5

; -266: oldTrapProc: PROC
; -270: oldExeceptProc: PROC
; -274: termList (MyNodePtr)
; -278: debugList (MyNodePtr)
; -279: f68000: BOOLEAN
; -280: f68010: BOOLEAN;
; -281: f68020: BOOLEAN;
; -286: startupMsgHelp: startup
; -318: rawDoString[0..31]

Prog:
Proc000:
	BRA     ModInit

InitMessages:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	MOVE.L  A5,-(A7)
	MOVEA.L A7,A5
	LEA     msg_ProgrHALT(PC),A3
	MOVE.L  A3,-78(A4)
	LEA     msg_UngCASE(PC),A3
	MOVE.L  A3,-74(A4)
	LEA     msg_FuncOhneRET(PC),A3
	MOVE.L  A3,-70(A4)
	LEA     msg_StapelUeberl(PC),A3
	MOVE.L  A3,-66(A4)
	LEA     msg_UngArtsCall(PC),A3
	MOVE.L  A3,-62(A4)
	LEA     msg_AdressErr(PC),A3
	MOVE.L  A3,-98(A4)
	LEA     msg_UngueltigeInstr(PC),A3
	MOVE.L  A3,-94(A4)
	LEA     msg_DivDurch0(PC),A3
	MOVE.L  A3,-90(A4)
	LEA     msg_BereichsFehlerCHK(PC),A3
	MOVE.L  A3,-86(A4)
	LEA     msg_UeberlaufTrapV(PC),A3
	MOVE.L  A3,-82(A4)
	LEA     msg_BereichsFehlerLang(PC),A3
	MOVE.L  A3,-114(A4)
	LEA     msg_ueberlaufLang(PC),A3
	MOVE.L  A3,-118(A4)
	UNLK    A5
	MOVEA.L (A7)+,A4
	RTS

InList:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	LINK    A5,#-4
	MOVE.L  $00000004,-(A7)
	MOVE.L  #$0000000C,-(A7)
	MOVE.L  #$00010000,-(A7)
	MOVE.L  (A7)+,D1
	MOVE.L  (A7)+,D0
	MOVEA.L (A7)+,A6
	JSR     -198(A6)
	MOVE.L  D0,-4(A5)
	TST.L   -4(A5)
	SNE     D6
	MOVE.B  D6,-(A7)
	LEA     msg_Speichermangel(PC),A3
	MOVE.L  A3,-(A7)
	BSR     Assert1
	MOVEA.L -4(A5),A3
	MOVE.L  12(A5),4(A3)
	MOVEA.L 16(A5),A2
	MOVE.L  (A2),(A3)
	MOVE.W  currLevel(A4),8(A3)
	CLR.B   10(A3)
	MOVEA.L 16(A5),A2
	MOVE.L  -4(A5),(A2)
	UNLK    A5
	MOVEA.L (A7)+,A4
	MOVEA.L (A7)+,A0
	ADDQ.L  #8,A7
	JMP     (A0)

AusList:
	MOVE.L  A4,-(A7)	  ; PROCEDURE AusList(l:MyNodePtr;p:PROC);
	MOVEA.L dataPtr(PC),A4
	LINK    A5,#-8
	MOVEA.L 16(A5),A3
	MOVE.L  (A3),-4(A5)
	MOVEA.L -4(A5),A3
	MOVE.L  4(A3),D6
	CMP.L   12(A5),D6
	BNE     L000032
	MOVEA.L -4(A5),A3
	MOVEA.L 16(A5),A2
	MOVE.L  (A3),(A2)
	MOVE.L  $00000004,-(A7)
	MOVEA.L -4(A5),A1
	MOVE.L  #$0000000C,-(A7)
	MOVE.L  (A7)+,D0
	MOVEA.L (A7)+,A6
	JSR     -210(A6)
	BRA     L000034
L000032:
	MOVEA.L -4(A5),A3
	TST.L   (A3)
	BEQ     L000033
	MOVEA.L -4(A5),A2
	MOVEA.L (A2),A3
	MOVE.L  4(A3),D6
	CMP.L   12(A5),D6
	BEQ     L000033
	MOVEA.L -4(A5),A2
	MOVEA.L (A2),A3
	MOVEA.L -4(A5),A2
	MOVE.L  (A3),(A2)
	BRA.S   L000032
L000033:
	MOVEA.L -4(A5),A3
	TST.L   (A3)
	BEQ     L000034
	MOVEA.L -4(A5),A3
	MOVE.L  (A3),-8(A5)
	MOVEA.L -4(A5),A2
	MOVEA.L (A2),A3
	MOVEA.L -4(A5),A2
	MOVE.L  (A3),(A2)
	MOVE.L  $00000004,-(A7)
	MOVEA.L -8(A5),A1
	MOVE.L  #$0000000C,-(A7)
	MOVE.L  (A7)+,D0
	MOVEA.L (A7)+,A6
	JSR     -210(A6)
L000034:
	UNLK    A5
	MOVEA.L (A7)+,A4
	MOVEA.L (A7)+,A0
	ADDQ.L  #8,A7
	JMP     (A0)

CleanList: ; lösche alle PROCS, deren Level>=currentLevel
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	LINK    A5,#-4
L000036:
	MOVEA.L 12(A5),A3
	TST.L   (A3)
	BEQ     L000037
	MOVEA.L 12(A5),A2
	MOVEA.L (A2),A3
	MOVE.W  8(A3),D6
	CMP.W   currLevel(A4),D6
	BLT     L000037
	MOVEA.L 12(A5),A3
	MOVE.L  (A3),-4(A5)
	MOVEA.L 12(A5),A2
	MOVEA.L (A2),A3
	MOVEA.L 12(A5),A2
	MOVE.L  (A3),(A2)
	MOVE.L  $00000004,-(A7)
	MOVEA.L -4(A5),A1
	MOVE.L  #$0000000C,-(A7)
	MOVE.L  (A7)+,D0
	MOVEA.L (A7)+,A6
	JSR     -210(A6)
	BRA.S   L000036
L000037:
	UNLK    A5
	MOVEA.L (A7)+,A4
	MOVEA.L (A7)+,A0
	ADDQ.L  #4,A7
	JMP     (A0)

TermAll:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	LINK    A5,#-4
	MOVE.L  termList(A4),-4(A5)
L000039:
	TST.L   -4(A5)
	BEQ     L000040
	MOVEA.L -4(A5),A3
	MOVE.L  (A3),-4(A5)
	MOVE.L  A3,-(A7)
	MOVEA.L 4(A3),A2
	JSR     (A2)
	MOVEA.L (A7)+,A3
	BRA.S   L000039
L000040:
	UNLK    A5
	MOVEA.L (A7)+,A4
	RTS

FindDebugProc:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	LINK    A5,#-4
	MOVE.L  debugList(A4),-4(A5)
L000042:
	TST.L   -4(A5)
	BEQ     L000043
	MOVEA.L -4(A5),A3
	TST.B   10(A3)
	BEQ     L000043
	MOVEA.L -4(A5),A3
	MOVE.L  (A3),-4(A5)
	BRA.S   L000042
L000043:
	MOVE.L  -4(A5),D0
	BRA     L000044
	MOVEQ   #2,D0
	MOVEA.L dataPtr(PC),A6
	JSR     -24(A6)
L000044:
	UNLK    A5
	MOVEA.L (A7)+,A4
	RTS

Debug:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	LINK    A5,#-4
	BSR     FindDebugProc
	MOVE.L  D0,-4(A5)
	TST.L   -4(A5)
	BEQ     L000046
	MOVEA.L -4(A5),A3
	MOVE.B  #$FF,10(A3)
	MOVE.L  A3,-(A7)
	MOVEA.L 4(A3),A2
	JSR     (A2)
	MOVEA.L (A7)+,A3
	CLR.B   10(A3)
L000046:
	UNLK    A5
	MOVEA.L (A7)+,A4
	RTS

Request:
	BRA     L000049
L000048:
	MOVE.L  A5,-(A7)
	MOVEA.L A7,A5
	MOVEA.L 20(A5),A3
	CLR.B   (A3)
	MOVE.B  #$01,1(A3)
	MOVE.B  #$01,2(A3)
	MOVE.W  18(A5),4(A3)
	MOVE.W  16(A5),6(A3)
	CLR.L   8(A3)
	CLR.L   16(A3)
	MOVE.L  12(A5),12(A3)
	UNLK    A5
	MOVEA.L (A7)+,A0
	LEA     16(A7),A7
	JMP     (A0)
L000049:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	LINK    A5,#-24
	MOVE.B  detectCtrlC(A4),-11(A5)
	CLR.B   detectCtrlC(A4)
	MOVE.L  $00000004,-(A7)
	MOVE.L  #$00001000,-(A7)
	MOVE.L  #$00010000,-(A7)
	MOVE.L  (A7)+,D1
	MOVE.L  (A7)+,D0
	MOVEA.L (A7)+,A6
	JSR     -198(A6)
	MOVE.L  D0,-24(A5)
	TST.L   -24(A5)
	BEQ     L000050
	MOVE.L  A7,-20(A5)
	MOVE.L  stackTop(A4),-16(A5)
	MOVE.L  -24(A5),D6
	SUBI.L  #$00000100,D6
	MOVE.L  D6,stackTop(A4)
	MOVE.L  -24(A5),D6
	ADDI.L  #$00001000,D6
	MOVEA.L D6,A7
L000050:
	MOVE.L  $00000004,-(A7)
	LEA     IntuiName(PC),A3
	MOVEA.L A3,A1
	CLR.L   -(A7)
	MOVE.L  (A7)+,D0
	MOVEA.L (A7)+,A6
	JSR     -552(A6)
	MOVE.L  D0,-8(A5)
	TST.L   -8(A5)
	BEQ     L000056
	PEA     IntuiText1(A4)
	MOVE.W  #$000C,-(A7)
	MOVE.W  #$0005,-(A7)
	MOVE.L  22(A5),-(A7)
	PEA     (A5)
	BSR     L000048
	MOVE.W  #$0036,-10(A5)
	TST.L   18(A5)
	BEQ     L000051
	PEA     IntuiText2(A4)
	MOVE.W  #$000C,-(A7)
	MOVE.W  #$0010,-(A7)
	MOVE.L  18(A5),-(A7)
	PEA     (A5)
	BSR     L000048
	LEA     IntuiText2(A4),A3
	MOVE.L  A3,-166(A4)
	MOVE.W  #$0041,-10(A5)
	TST.L   14(A5)
	BEQ     L000051
	PEA     -222(A4)
	MOVE.W  #$000C,-(A7)
	MOVE.W  #$001B,-(A7)
	MOVE.L  14(A5),-(A7)
	PEA     (A5)
	BSR     L000048
	LEA     -222(A4),A3
	MOVE.L  A3,-186(A4)
	MOVE.W  #$0046,-10(A5)
L000051:
	PEA     -242(A4)
	MOVE.W  #$0006,-(A7)
	MOVE.W  #$0003,-(A7)
	LEA     msg_abbrechen(PC),A3
	MOVE.L  A3,-(A7)
	PEA     (A5)
	BSR     L000048
	TST.B   12(A5)
	BEQ     L000052
	LEA     msg_weiter(PC),A3
	MOVE.L  A3,-230(A4)
L000052:
	BSR     FindDebugProc
	TST.L   D0
	BNE     L000053
	CLR.L   -4(A5)
	BRA     L000054
L000053:
	PEA     -262(A4)
	MOVE.W  #$0006,-(A7)
	MOVE.W  #$0003,-(A7)
	LEA     msg_debug(PC),A3
	MOVE.L  A3,-(A7)
	PEA     (A5)
	BSR     L000048
	LEA     -262(A4),A3
	MOVE.L  A3,-4(A5)
L000054:
	MOVE.L  -8(A5),-(A7)
	MOVEA.W #$0000,A0
	LEA     IntuiText1(A4),A3
	MOVEA.L A3,A1
	MOVEA.L -4(A5),A2
	LEA     -242(A4),A3
	CLR.L   -(A7)
	CLR.L   -(A7)
	MOVE.W  #$0140,D2
	MOVE.W  -10(A5),D3
	MOVE.L  (A7)+,D1
	MOVE.L  (A7)+,D0
	MOVEA.L (A7)+,A6
	JSR     -348(A6)
	TST.L   D0
	BEQ     L000055
	BSR     Debug
L000055:
	MOVE.L  $00000004,-(A7)
	MOVEA.L -8(A5),A1
	MOVEA.L (A7)+,A6
	JSR     -414(A6)
L000056:
	TST.L   -24(A5)
	BEQ     L000057
	MOVEA.L -20(A5),A7
	MOVE.L  $00000004,-(A7)
	MOVEA.L -24(A5),A1
	MOVE.L  #$00001000,-(A7)
	MOVE.L  (A7)+,D0
	MOVEA.L (A7)+,A6
	JSR     -210(A6)
	MOVE.L  -16(A5),stackTop(A4)
L000057:
	MOVE.B  -11(A5),detectCtrlC(A4)
	UNLK    A5
	MOVEA.L (A7)+,A4
	MOVEA.L (A7)+,A0
	LEA     14(A7),A7
	JMP     (A0)

ExceptProc:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	LINK    A5,#-6
	MOVE.L  D0,-6(A5)
	TST.B   detectCtrlC(A4)
	BEQ     L000059
	MOVEA.L exec_Bs(PC),A6
	JSR     -132(A6)
	MOVEA.L myTask(A4),A3
	MOVE.L  22(A3),D6
	MOVE.L  26(A3),D4
	EOR.L   D4,D6
	BTST    #8,D6
	SNE     D6
	MOVE.B  D6,-1(A5)
	MOVEA.L exec_Bs(PC),A6
	JSR     -138(A6)
	TST.B   -1(A5)
	BNE     L000059
	MOVE.L  $00000004,-(A7)
	MOVEA.L myTask(A4),A3
	LEA     92(A3),A3
	MOVEA.L A3,A0
	MOVEA.L (A7)+,A6
	JSR     -372(A6)
	LEA     msg_LaufzeitErr(PC),A3
	MOVE.L  A3,-(A7)
	LEA     msgUnterbruch(PC),A3
	MOVE.L  A3,-(A7)
	CLR.L   -(A7)
	CLR.B   -(A7)
	BSR     Request
	MOVE.W  currLevel(A4),-(A7)
	BSR     Terminate1
L000059:
	MOVE.L  -6(A5),D0
	UNLK    A5
	MOVEA.L (A7)+,A4
	RTS

L000060:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	LINK    A5,#-32
	TST.W   ErrorFrameCase(A4)
	BLT     L000061
	CMPI.W  #$0007,ErrorFrameCase(A4)
	BGT     L000061
	MOVE.W  ErrorFrameCase(A4),D6
	CHK     #$0007,D6
	CHK     #$0007,D6
	ASL.W   #2,D6
	LEA     -110(A4),A3
	MOVE.L  0(A3,D6.W),errorFrameText(A4)
	BRA     L000064
L000061:
	CMPI.W  #$002E,ErrorFrameCase(A4)
	BNE     L000062
	MOVE.L  -114(A4),errorFrameText(A4)
	BRA     L000064
L000062:
	CMPI.W  #$002F,ErrorFrameCase(A4)
	BNE     L000063
	MOVE.L  -118(A4),errorFrameText(A4)
	BRA     L000064
L000063:
	LEA     msg_TRAP(PC),A3
	MOVEA.L A3,A0
	LEA     ErrorFrameCase(A4),A3
	MOVEA.L A3,A1
	LEA     rawDoProc(A4),A3
	MOVEA.L A3,A2
	LEA     -32(A5),A3
	MOVEA.L exec_Bs(PC),A6
	JSR     -522(A6)
	LEA     -32(A5),A3
	MOVE.L  A3,errorFrameText(A4)
L000064:
	LEA     msg_LaufzeitErr(PC),A3
	MOVE.L  A3,-(A7)
	MOVE.L  errorFrameText(A4),-(A7)
	CLR.L   -(A7)
	CLR.B   -(A7)
	BSR     Request
	MOVE.W  currLevel(A4),-(A7)
	BSR     Terminate1
	UNLK    A5
	MOVEA.L (A7)+,A4
	RTS
TrapProc:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	LINK    A5,#-4
	MOVE.L  A5,-4(A5)
	LEA     errorFrame(A4),A3
	MOVEA.L -4(A5),A2
	MOVE.L  (A2),8(A3)
	ADDQ.L  #4,-4(A5)
	MOVEA.L -4(A5),A2
	MOVE.L  (A2),4(A3)
	ADDQ.L  #4,-4(A5)
	MOVEA.L -4(A5),A2
	MOVE.L  (A2),D6
	CMPI.L  #$FFFF8000,D6
	BGE.S   L000066
	TRAP    #14
L000066:
	CMPI.L  #$00007FFF,D6
	BLE.S   L000067
	TRAP    #14
L000067:
	MOVE.W  D6,14(A3)
	CLR.B   12(A3)
	CMPI.W  #$0003,14(A3)
	BGT     L000068
	TST.B   f68000(A4)
	BEQ     L000068
	ADDI.L  #$0000000E,-4(A5)
	BRA     L000069
L000068:
	ADDQ.L  #6,-4(A5)
L000069:
	MOVEA.L -4(A5),A2
	MOVE.L  (A2),(A3)
	LEA     L000060(PC),A2
	MOVEA.L -4(A5),A1
	MOVE.L  A2,(A1)
	MOVE.L  -4(A5),D6
	SUBQ.L  #2,D6
	MOVEA.L D6,A7
	RTE
	UNLK    A5
	MOVEA.L (A7)+,A4
	RTS

OpenLibs:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	LINK    A5,#-4
L000071:
	MOVEA.L 12(A5),A3
	TST.W   (A3)
	BEQ     L000076
	MOVEA.L 12(A5),A3
	CMPI.W  #$0002,(A3)
	BNE     L000075
	MOVE.L  A3,-(A7)
	MOVE.L  $00000004,-(A7)
	LEA     2(A3),A2
	MOVEA.L A2,A1
	MOVE.L  36(A3),-(A7)
	MOVE.L  (A7)+,D0
	MOVEA.L (A7)+,A6
	JSR     -552(A6)
	MOVEA.L (A7)+,A3
	MOVE.L  D0,40(A3)
	TST.L   40(A3)
	BEQ     L000074
L000072:
	TST.L   44(A3)
	BEQ     L000073
	MOVE.L  44(A3),-4(A5)
	MOVEA.L 44(A3),A2
	MOVE.L  (A2),44(A3)
	MOVEA.L -4(A5),A2
	MOVE.L  40(A3),(A2)
	BRA.S   L000072
L000073:
	BRA     L000075
L000074:
	MOVE.L  A3,-(A7)
	LEA     msg_LaufzeitErr(PC),A2
	MOVE.L  A2,-(A7)
	LEA     msg_FehlerOeffnenDer(PC),A2
	MOVE.L  A2,-(A7)
	LEA     2(A3),A2
	MOVE.L  A2,-(A7)
	CLR.B   -(A7)
	BSR     Request
	MOVEA.L (A7)+,A3
	MOVEQ   #0,D0
	ANDI.L  #$000000FF,D0
	BRA     L000077
L000075:
	ADDI.L  #$00000030,12(A5)
	BRA     L000071
L000076:
	MOVEQ   #-1,D0
	ANDI.L  #$000000FF,D0
	BRA     L000077
	MOVEQ   #2,D0
	MOVEA.L dataPtr(PC),A6
	JSR     -24(A6)
L000077:
	UNLK    A5
	MOVEA.L (A7)+,A4
	MOVEA.L (A7)+,A0
	ADDQ.L  #4,A7
	JMP     (A0)

CloseLibs:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	MOVE.L  A5,-(A7)
	MOVEA.L A7,A5
L000079:
	MOVEA.L 12(A5),A3
	TST.W   (A3)
	BEQ     L000081
	MOVEA.L 12(A5),A3
	CMPI.W  #$0002,(A3)
	BNE     L000080
	TST.L   40(A3)
	BEQ     L000080
	MOVE.L  A3,-(A7)
	MOVE.L  $00000004,-(A7)
	MOVEA.L 40(A3),A1
	MOVEA.L (A7)+,A6
	JSR     -414(A6)
	MOVEA.L (A7)+,A3
L000080:
	ADDI.L  #$00000030,12(A5)
	BRA.S   L000079
L000081:
	UNLK    A5
	MOVEA.L (A7)+,A4
	MOVEA.L (A7)+,A0
	ADDQ.L  #4,A7
	JMP     (A0)

CleanUp:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	MOVE.L  A5,-(A7)
	MOVEA.L A7,A5
	MOVE.L  moduleInfoPtr(A4),-(A7)
	BSR     CloseLibs
	TST.B   wbStarted(A4)
	BEQ     L000083
	MOVE.L  $00000004,-(A7)
	MOVEA.L (A7)+,A6
	JSR     -132(A6)
	MOVE.L  $00000004,-(A7)
	MOVEA.L statupMsg(A4),A1
	MOVEA.L (A7)+,A6
	JSR     -378(A6)
L000083:
	UNLK    A5
	MOVEA.L (A7)+,A4
	RTS

Startup:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	LINK    A5,#-4
	MOVE.L  A0,dosCmdBuf(A4)
	MOVE.L  D0,dosCmdLen(A4)
	MOVE.L  A1,-4(A5)
	MOVE.L  D7,moduleInfoPtr(A4)
	MOVE.L  #$16C04E75,rawDoProc(A4)
	CLR.L   returnVal(A4)
	MOVE.B  #$FF,detectCtrlC(A4)
	MOVE.W  #$FFFF,currLevel(A4)
	MOVE.L  12(A5),stackSize(A4)
	LEA     12(A5),A3
	MOVE.L  A3,D6
	SUBQ.L  #4,D6
	MOVE.L  D6,initialSp(A4)
	LEA     16(A5),A3
	MOVE.L  A3,D6
	SUB.L   12(A5),D6
	ADDI.L  #$00000100,D6
	MOVE.L  D6,stackTop(A4)
	CLR.L   termList(A4)
	CLR.L   debugList(A4)
	MOVE.B  #$FF,termAllowed(A4)
	MOVE.L  $00000004,-(A7)
	MOVEA.W #$0000,A1
	MOVEA.L (A7)+,A6
	JSR     -294(A6)
	MOVE.L  D0,myTask(A4)
	CLR.L   statupMsg(A4)
	CLR.B   f68000(A4)
	CLR.B   f68010(A4)
	CLR.B   f68020(A4)
	MOVEA.L $00000004,A3
	MOVE.W  296(A3),D6
	BTST    #1,D6
	BEQ     L000084
	MOVE.B  #$FF,f68020(A4)
	BRA     L000086
L000084:
	MOVEA.L $00000004,A3
	MOVE.W  296(A3),D6
	BTST    #0,D6
	BEQ     L000085
	MOVE.B  #$FF,f68010(A4)
	BRA     L000086
L000085:
	MOVE.B  #$FF,f68000(A4)
L000086:
	MOVEA.L myTask(A4),A3
	TST.L   172(A3)
	SEQ     D6
	MOVE.B  D6,wbStarted(A4)
	TST.B   wbStarted(A4)
	BEQ     L000087
	MOVE.L  $00000004,-(A7)
	MOVEA.L myTask(A4),A3
	LEA     92(A3),A3
	MOVEA.L A3,A0
	MOVEA.L (A7)+,A6
	JSR     -384(A6)
	MOVE.L  $00000004,-(A7)
	MOVEA.L myTask(A4),A3
	LEA     92(A3),A3
	MOVEA.L A3,A0
	MOVEA.L (A7)+,A6
	JSR     -372(A6)
	MOVE.L  D0,statupMsg(A4)
L000087:
	MOVE.L  moduleInfoPtr(A4),-(A7)
	BSR     OpenLibs
	TST.B   D0
	BEQ     L000089
	TST.B   wbStarted(A4)
	BEQ     L000088
	MOVE.L  statupMsg(A4),-286(A4)
	MOVEA.L -286(A4),A2
	MOVEA.L 36(A2),A3
	MOVE.L  (A3),-(A7)
	MOVE.L  (A7)+,D1
	MOVEA.L dos_lBs(PC),A6
	JSR     -126(A6)
L000088:
	BSR     InitMessages
	MOVEA.L myTask(A4),A3
	MOVE.L  50(A3),oldTrapProc(A4)
	LEA     TrapProc(PC),A2
	MOVE.L  A2,50(A3)
	MOVE.L  42(A3),oldExceptProc(A4)
	LEA     ExceptProc(PC),A2
	MOVE.L  A2,42(A3)
	MOVE.L  A3,-(A7)
	MOVE.L  #$00001000,-(A7)
	MOVE.L  #$00001000,-(A7)
	MOVE.L  (A7)+,D1
	MOVE.L  (A7)+,D0
	MOVEA.L exec_Bs(PC),A6
	JSR     -312(A6)
	MOVEA.L (A7)+,A3
	MOVE.L  A3,-(A7)
	MOVE.L  -4(A5),-(A7)
	BSR     Call1	
	MOVEA.L (A7)+,A3
	MOVE.L  A3,-(A7)
	CLR.L   -(A7)
	MOVE.L  #$00001000,-(A7)
	MOVE.L  (A7)+,D1
	MOVE.L  (A7)+,D0
	MOVEA.L exec_Bs(PC),A6
	JSR     -312(A6)
	MOVEA.L (A7)+,A3
	MOVE.L  oldTrapProc(A4),50(A3)
	MOVE.L  oldExceptProc(A4),42(A3)
	BRA     L000090
L000089:
	MOVE.L  #$00000014,returnVal(A4)
L000090:
	BSR     CleanUp	
	MOVE.L  returnVal(A4),D0
	BRA     L000091
	MOVEQ   #2,D0
	MOVEA.L dataPtr(PC),A6
	JSR     -24(A6)
L000091:
	UNLK    A5
	MOVEA.L (A7)+,A4
	RTS

Call:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	MOVE.L  A5,-(A7)
	MOVEA.L A7,A5
	CMPI.W  #$0008,currLevel(A4)
	BGE     L000092
	ADDQ.W  #1,currLevel(A4)
	BRA     L000093
L000092:
	MOVE.B  #$04,-(A7)
	MOVE.B  (A7)+,D0
	BSR     SystemError1
L000093:
	MOVE.W  currLevel(A4),D6
	CHK     #$0007,D6
	ASL.W   #2,D6
	LEA     SPArr(A4),A3
	MOVE.L  A7,0(A3,D6.W)
	MOVE.W  currLevel(A4),D6
	CHK     #$0007,D6
	ASL.W   #2,D6
	LEA     SPArr(A4),A3
	SUBQ.L  #8,0(A3,D6.W)
	MOVE.L  A4,-(A7)
	MOVEA.W #$0000,A4
	MOVEA.L 12(A5),A3
	JSR     (A3)
	MOVEA.L (A7)+,A4
	MOVEA.L A7,A5
	TST.B   termAllowed(A4)
	BEQ     L000094
	CLR.B   termAllowed(A4)
	BSR     TermAll
	MOVE.B  #$FF,termAllowed(A4)
L000094:
	PEA     termList(A4)
	BSR     CleanList
	PEA     debugList(A4)
	BSR     CleanList
	SUBQ.W  #1,currLevel(A4)
	UNLK    A5
	MOVEA.L (A7)+,A4
	MOVEA.L (A7)+,A0
	ADDQ.L  #4,A7
	JMP     (A0)

Terminate:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	MOVE.L  A5,-(A7)
	MOVEA.L A7,A5
	TST.W   12(A5)
	BLT     L000095
	MOVE.W  12(A5),D6
	CMP.W   currLevel(A4),D6
	BGT     L000095
	MOVE.W  12(A5),currLevel(A4)
	BRA     L000096
L000095:
	CLR.W   currLevel(A4)
L000096:
	MOVE.W  currLevel(A4),D6
	CHK     #$0007,D6
	ASL.W   #2,D6
	LEA     SPArr(A4),A3
	MOVEA.L 0(A3,D6.W),A7
	RTS
	UNLK    A5
	MOVEA.L (A7)+,A4
	MOVEA.L (A7)+,A0
	ADDQ.L  #2,A7
	JMP     (A0)

SystemError:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	LINK    A5,#-6
	MOVE.L  A5,-4(A5)
	MOVEA.L -4(A5),A3
	MOVE.L  (A3),-46(A4)
	ADDQ.L  #4,-4(A5)
	MOVEA.L -4(A5),A3
	MOVE.L  (A3),-50(A4)
	LEA     errorFrame(A4),A3
	ADDQ.L  #4,-4(A5)
	MOVEA.L -4(A5),A2
	MOVE.L  (A2),(A3)
	MOVE.B  #$02,12(A3)
	MOVE.B  D0,13(A3)
	ANDI.L  #$000000FF,D0
	CMPI.L  #$FFFF8000,D0
	BGE.S   L000097
	TRAP    #14
L000097:
	CMPI.L  #$00007FFF,D0
	BLE.S   L000098
	TRAP    #14
L000098:
	MOVE.W  D0,-6(A5)
	CMPI.W  #$0004,-6(A5)
	BLE     L000099
	LEA     msg_SysErr(PC),A3
	MOVEA.L A3,A0
	LEA     -6(A5),A3
	MOVEA.L A3,A1
	LEA     rawDoProc(A4),A3
	MOVEA.L A3,A2
	LEA     -318(A4),A3
	MOVEA.L exec_Bs(PC),A6
	JSR     -522(A6)
	LEA     -318(A4),A3
	MOVE.L  A3,errorFrameText(A4)
	BRA     L000100
L000099:
	ANDI.W  #$00FF,D0
	CHK     #$0004,D0
	ASL.W   #2,D0
	LEA     -78(A4),A3
	MOVE.L  0(A3,D0.W),errorFrameText(A4)
L000100:
	LEA     msg_LaufzeitErr(PC),A3
	MOVE.L  A3,-(A7)
	MOVE.L  errorFrameText(A4),-(A7)
	CLR.L   -(A7)
	CLR.B   -(A7)
	BSR     Request
	MOVE.W  -6(A5),D6
	ADDI.W  #$0014,D6
	EXT.L   D6
	MOVE.L  D6,returnVal(A4)
	MOVE.W  currLevel(A4),-(A7)
	BSR     Terminate
	UNLK    A5
	MOVEA.L (A7)+,A4
	RTS

StkChk:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	MOVE.L  A5,-(A7)
	MOVEA.L A7,A5
	ADD.L   A7,D0
	CMP.L   stackTop(A4),D0
	BGE     L000101
	MOVE.B  #$03,-(A7)
	MOVE.B  (A7)+,D0
	BSR     SystemError
L000101:
	UNLK    A5
	MOVEA.L (A7)+,A4
	RTS

Assert:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	LINK    A5,#-4
	TST.B   16(A5)
	BNE     L000102
	MOVE.L  A5,-4(A5)
	LEA     errorFrame(A4),A3
	MOVEA.L -4(A5),A2
	MOVE.L  (A2),8(A3)
	ADDQ.L  #4,-4(A5)
	MOVEA.L -4(A5),A2
	MOVE.L  (A2),4(A3)
	ADDQ.L  #4,-4(A5)
	MOVEA.L -4(A5),A2
	MOVE.L  (A2),(A3)
	MOVE.B  #$03,12(A3)
	MOVE.L  12(A5),18(A3)
	LEA     msg_Assert(PC),A3
	MOVE.L  A3,-(A7)
	MOVE.L  12(A5),-(A7)
	CLR.L   -(A7)
	CLR.B   -(A7)
	BSR     Request
	MOVE.W  currLevel(A4),-(A7)
	BSR     Terminate
L000102:
	UNLK    A5
	MOVEA.L (A7)+,A4
	MOVEA.L (A7)+,A0
	ADDQ.L  #6,A7
	JMP     (A0)
BreakPoint:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	LINK    A5,#-4
	MOVE.L  A5,-4(A5)
	LEA     errorFrame(A4),A3
	MOVEA.L -4(A5),A2
	MOVE.L  (A2),8(A3)
	ADDQ.L  #4,-4(A5)
	MOVEA.L -4(A5),A2
	MOVE.L  (A2),4(A3)
	ADDQ.L  #4,-4(A5)
	MOVEA.L -4(A5),A2
	MOVE.L  (A2),(A3)
	MOVE.B  #$04,12(A3)
	MOVE.L  12(A5),18(A3)
	LEA     msg_breakPoint(PC),A3
	MOVE.L  A3,-(A7)
	MOVE.L  12(A5),-(A7)
	CLR.L   -(A7)
	MOVE.B  #$FF,-(A7)
	BSR     Request
	UNLK    A5
	MOVEA.L (A7)+,A4
	MOVEA.L (A7)+,A0
	ADDQ.L  #4,A7
	JMP     (A0)

Error:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	LINK    A5,#-4
	MOVE.L  A5,-4(A5)
	LEA     errorFrame(A4),A3
	MOVEA.L -4(A5),A2
	MOVE.L  (A2),8(A3)
	ADDQ.L  #4,-4(A5)
	MOVEA.L -4(A5),A2
	MOVE.L  (A2),4(A3)
	ADDQ.L  #4,-4(A5)
	MOVEA.L -4(A5),A2
	MOVE.L  (A2),(A3)
	MOVE.B  #$05,12(A3)
	MOVE.L  16(A5),18(A3)
	MOVE.L  12(A5),14(A3)
	LEA     msg_LaufzeitErr(PC),A3
	MOVE.L  A3,-(A7)
	MOVE.L  16(A5),-(A7)
	MOVE.L  12(A5),-(A7)
	CLR.B   -(A7)
	BSR     Request
	MOVE.W  currLevel(A4),-(A7)
	BSR     Terminate
	UNLK    A5
	MOVEA.L (A7)+,A4
	MOVEA.L (A7)+,A0
	ADDQ.L  #8,A7
	JMP     (A0)

CurrentLevel:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	MOVE.L  A5,-(A7)
	MOVEA.L A7,A5
	MOVE.W  currLevel(A4),D0
	EXT.L   D0
	BRA     L000103
	MOVEQ   #2,D0
	MOVEA.L dataPtr(PC),A6
	JSR     -24(A6)
L000103:
	UNLK    A5
	MOVEA.L (A7)+,A4
	RTS

DebugProcedure:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	MOVE.L  A5,-(A7)
	MOVEA.L A7,A5
	PEA     debugList(A4)
	MOVE.L  12(A5),-(A7)
	BSR     InList
	UNLK    A5
	MOVEA.L (A7)+,A4
	MOVEA.L (A7)+,A0
	ADDQ.L  #4,A7
	JMP     (A0)

RemoveDebugProc:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	MOVE.L  A5,-(A7)
	MOVEA.L A7,A5
	PEA     debugList(A4)
	MOVE.L  12(A5),-(A7)
	BSR     AusList
	UNLK    A5
	MOVEA.L (A7)+,A4
	MOVEA.L (A7)+,A0
	ADDQ.L  #4,A7
	JMP     (A0)

RemoveTermProc:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	MOVE.L  A5,-(A7)
	MOVEA.L A7,A5
	PEA     termList(A4)
	MOVE.L  12(A5),-(A7)
	BSR     AusList
	UNLK    A5
	MOVEA.L (A7)+,A4
	MOVEA.L (A7)+,A0
	ADDQ.L  #4,A7
	JMP     (A0)

TermProcedure:
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	MOVE.L  A5,-(A7)
	MOVEA.L A7,A5
	PEA     termList(A4)
	MOVE.L  12(A5),-(A7)
	BSR     InList
	UNLK    A5
	MOVEA.L (A7)+,A4
	MOVEA.L (A7)+,A0
	ADDQ.L  #4,A7
	JMP     (A0)

Mulu32:
	MOVE.L  D0,D2
	MOVE.L  D0,D3
	MOVE.L  D1,D4
	SWAP    D3
	SWAP    D4
	MULU    D1,D0
	MULU    D3,D1
	MULU    D4,D2
	MULU    D4,D3
	SWAP    D0
	ADD.W   D1,D0
	CLR.L   D4
	ADDX.L  D4,D4
	ADD.W   D2,D0
	ADDX.L  D4,D3
	SWAP    D0
	CLR.W   D1
	CLR.W   D2
	SWAP    D1
	SWAP    D2
	ADD.L   D2,D1
	ADD.L   D3,D1
	TST.L   D1
	BEQ.S   L000104
	ORI     #$02,CCR
L000104:
	RTS

Divu32:
	CMP.L   #$0000FFFF,D1
	BHI.S   L000106
	CLR.W   D2
	DIVU    D1,D0
	BVC.S   L000105
	MOVE.W  D0,D3
	CLR.W   D0
	SWAP    D0
	DIVU    D1,D0
	MOVE.W  D0,D2
	MOVE.W  D3,D0
	DIVU    D1,D0
L000105:
	SWAP    D2
	MOVE.W  D0,D2
	CLR.W   D0
	SWAP    D0
	BRA.S   L000109
L000106:
	CLR.L   D2
	MOVE.W  D0,D2
	SWAP    D2
	CLR.W   D0
	SWAP    D0
	MOVE.W  #$000F,D3
L000107:
	add.l   d2,d2 ; war LSL.L #1,D2 (add ist etwas schneller)
	addx.l  d0,d0 ; hier war Fehler: ROXL #1,d0 (müßte aber gehen ?!!)
	CMP.L   D1,D0
	BCS.S   L000108
	SUB.L   D1,D0 ; hier war der dickste Fehler: SUB.L D0,D1
	ADDQ.W  #1,D2
L000108:
	DBRA    D3,L000107
L000109:
	MOVE.L  D2,D1
	RTS

Muls32:
	MOVE.L  D0,D2
	MOVE.L  D0,D3
	MOVE.L  D1,D4
	MOVE.L  D0,D5
	CLR.L   D6
	SWAP    D3
	SWAP    D4
	MULU    D1,D0
	MULU    D3,D1
	MULU    D4,D2
	MULU    D4,D3
	SWAP    D0
	ADD.W   D1,D0
	ADDX.L  D6,D3
	ADD.W   D2,D0
	ADDX.L  D6,D3
	SWAP    D0
	CLR.W   D1
	CLR.W   D2
	SWAP    D1
	SWAP    D2
	ADD.L   D2,D1
	ADD.L   D3,D1
	SWAP    D4
	TST.L   D5
	BPL.S   L000110
	SUB.L   D4,D1
L000110:
	TST.L   D4
	BPL.S   L000111
	SUB.L   D5,D1
L000111:
	TST.L   D0
	BPL.S   L000112
	NOT.L   D1
L000112:
	TST.L   D1
	BEQ.S   L000113
	ORI     #$02,CCR
L000113:
	RTS

Divs32:
	TST.L   D0
	SMI     D6
	BPL.S   L000114
	NEG.L   D0
L000114:
	TST.L   D1
	SMI     D7
	BPL.S   L000115
	NEG.L   D1
L000115:
	MOVE.L  D0,-(A7)
	MOVE.L  D1,-(A7)
	MOVE.L  (A7)+,D1
	MOVE.L  (A7)+,D0
	BSR     Divu32
	CMP.B   D6,D7
	BEQ.S   L000116
	NEG.L   D1
L000116:
	TST.B   D6
	BEQ.S   L000117
	NEG.L   D0
L000117:
	RTS

ModInit: ; tut gar nichts
	MOVE.L  A4,-(A7)
	MOVEA.L dataPtr(PC),A4
	MOVE.L  A5,-(A7)
	MOVEA.L A7,A5
	BSET    #0,-2(A4)
	BNE     L000119
L000119:
	UNLK    A5
	MOVEA.L (A7)+,A4
	RTS
ENDE:
	END
