*  Start of Deassembly Code - Dea v5.2 Plus 3
*  Original file: win1_rext_turbofix_Ext
*  File dataspace: 500 bytes
	section	code
*  Code execution starts at $10000 with label Lab10000


*  March 2003 - updated not_minnie routine to cope with increasing SMSQ version number
*	      removed SET_PRIORITY COMMAND_LINE TYPE_IN - SET_PRIORITY did not allow
*	      parser_task to run properly (thanks George Gwilt for checking with Turbo)
*	      D.Santachiara
*


START_CODE 
Lab10000	lea	lab1002e(pc),a1
	movea.w	$0110,a2		; SB.INIPR
	jsr	(a2)
*  
*  ¾¾¾ VECTOR utility $110 : SB.INIPR ¾¾¾
*  

	moveq	#0,d0
	trap	#1
*  
*  ¾¾¾ SMS TRAP #1 - D0=$00 : SMS.INFO ¾¾¾
*  

	lea	SmsMinni(pc),a2
	cmpi.w	#$3736,d2 	; '76'
	blt.s	not_Minnie
	swap	d2
	cmpi.w	#$312e,d2 	; '1.'
	bne.s	not_minnie2
	move.w	#$100,(a2)	; Minerva
	rts

not_minnie
	swap	d2
not_minnie2
	andi.w	#$FF00,d2
	cmpi.w	#$3200,d2 	; '2*' now works with 2. 2e 2y etcetera
	beq.s	yes_sms
	cmpi.w	#$3300,d2 	; '3*'
	bne.s	not_sms
yes_sms
	move.w	#$101,(a2)	; SMS
	rts

not_sms	clr.w	(a2)		; neither Minnie nor SMS
	rts

SmsMinni	dc.b	0
Sms	dc.b	0

*  Def SB extensions
Lab1002E	dc.w	0
	dc.w	0
	dc.w	11
	dc.w	lab101c4-*
	dc.b	13
	dc.b	'BASIC_POINTER'
	dc.w	lab101b8-*
	dc.b	8
	dc.b	'BASIC_B%'
	dc.b	0
	dc.w	lab101c0-*
	dc.b	7
	dc.b	'BASIC_L'
	dc.w	lab101bc-*
	dc.b	8
	dc.b	'BASIC_W%'
	dc.b	0
	dc.w	lab10234-*
	dc.b	11
	dc.b	'BASIC_NAME$'
	dc.w	lab104ce-*
	dc.b	7
	dc.b	'BASIC_F'
	dc.w	lab1030e-*
	dc.b	12
	dc.b	'BASIC_INDEX%'
	dc.b	0
	dc.w	lab103ba-*
	dc.b	11
	dc.b	'BASIC_TYPE%'
	dc.w	0
*  End SB ext

Lab101AC	movea.w	$0118,a2		; SB.GTLIN
	jsr	(a2)
*  
*  ¾¾¾ VECTOR utility $118 : SB.GTLIN ¾¾¾
*  

	bne	lab10420
	rts



Lab101B8	moveq	#0,d5		; BASIC_B%
	bra.s	lab101c6

Lab101BC	moveq	#1,d5		; BASIC_W%
	bra.s	lab101c6

Lab101C0	moveq	#-1,d5		; BASIC_L
*loop	bra.s	loop		; <--- MOD

	bra.s	lab101c6



Lab101C4	moveq	#-2,d5		; BASIC_POINTER

Lab101C6	bsr.s	lab101ac		; va a leggere il dato
	subq.w	#1,d3
	bne	lab10422
	move.l	0(a1,a6.l),d3
	addq.l	#4,a1
	move.l	a1,$58(a6)	; BV_RIP
	trap	#0
	ori.w	#$0700,sr 	; set 210
	bsr	lab1028c		; Jump to patcher routine
	tst.l	d5
	beq.s	lab101f0
	btst	#0,d3
	bne.s	lab101fe
	tst.l	d5
	bmi.s	lab10218
Lab101F0	subq.l	#2,a1
	beq.s	lab10206
	move.w	0(a0,d3.l),0(a1,a6.l)
	bra.s	lab10210

Lab101FC	addq.l	#4,a7
Lab101FE	moveq	#-$0f,d0		; ERR.IPAR
	andi.w	#-$2701,sr	; clear S210
	rts

Lab10206	clr.b	0(a1,a6.l)
	move.b	0(a0,d3.l),1(a1,a6.l)
Lab10210	andi.w	#-$2701,sr	; clear S210
	bra	lab1048a

Lab10218	move.l	0(a0,d3.l),d0
	addq.l	#1,d5
	bmi.s	lab10222
	suba.l	a0,a0
Lab10222	adda.l	d0,a0
	andi.w	#-$2701,sr	; clear S210
	move.l	a0,d5
	bra	lab10494

Lab1022E	andi.w	#-$2701,sr	; clear S210
	rts

Lab10234	bsr	lab10416
	subq.w	#1,d3
	bne	lab10422
	move.w	0(a1,a6.l),d3
	trap	#0
	ori.w	#$0700,sr 	; set 210
	bsr	lab102dc
	bsr	lab102f6
	movea.l	a0,a4
	moveq	#0,d1
	move.b	(a0),d1
	moveq	#-1,d2
	moveq	#$18,d0
	trap	#1
*  
*  ¾¾¾ SMS TRAP #1 - D0=$18 : SMS.ACHP ¾¾¾
*  

	tst.l	d0
	bne.s	lab1022e
	movea.l	a0,a3
	moveq	#0,d6
	move.b	(a4)+,d6
	move.l	d6,d7
	addq.b	#1,d6
	beq.s	lab10278
	subq.b	#2,d6
Lab1026E	move.b	(a4)+,(a0)+
	dbf	d6,lab1026e
	movea.l	a3,a0
	move.l	d7,d6
Lab10278	andi.w	#-$2701,sr	; clear S210
	move.l	a3,-(a7)
	bsr	lab10426
	movea.l	(a7)+,a0
	moveq	#-1,d2
	moveq	#$19,d0
	trap	#1
*  
*  ¾¾¾ SMS TRAP #1 - D0=$19 : SMS.RCHP ¾¾¾
*  

	rts




********************* Patched routine *****************************


Lab1028C

	move.l	a4,-(a7)		; New version 3d


	moveq	#0,d0
	trap	#1
*  
*  ¾¾¾ SMS TRAP #1 - D0=$00 : SMS.INFO ¾¾¾
*  

	tst.l	d1
	beq.s	lab102d2		; it's job 0
	move.b	SmsMinni(pc),d2	; it's not job 0 - Is it Minerva?
	beq.s	lab102d2		; It is not Minerva...
	move.l	d1,d2
	movea.l	a0,a4		; a4 -> SYS_BASE
Lab1029E	movea.l	a4,a0
	movea.l	$68(a0),a0	; SYS_JBTB
	move.l	d2,d1		; d2 -> job ID
	lsl.w	#2,d1		; multiply x 4 to enter job table
	movea.l	0(a0,d1.w),a0	; a0 -> job base

	move.b	sms,d0		; is it SMS?
	bne.s	jcb_reln		; yes jump
	btst	#6,$16(a0)	; chech if running from interpreter...
	bne.s	lab102c6		; or compiled
	bra.s	jcb_go_on
jcb_reln
	cmpi.l	#'SBAS',$1e4(a0)	; is it an SBASIC?
	beq.s	lab102c6

jcb_go_on
	move.l	d2,d1
	movem.l	d3/a1,-(a7)
	moveq	#0,d2
	moveq	#2,d0
	trap	#1
*  
*  ¾¾¾ SMS TRAP #1 - D0=$02 : SMS.INJB ¾¾¾
*  

	movem.l	(a7)+,d3/a1
	bra.s	lab1029e

Lab102C6	tst.l	d2
	beq.s	lab102d0
	move.b	sms(pc),d0
	beq.s	minni_offset
	lea	$1e8(a0),a0	; SMS offset for SBASIC

	move.l	(a7)+,a4		; new v3d

	rts
minni_offset
	lea	$80(a0),a0	; Minni offset for Multibasic

	move.l	(a7)+,a4		; new v3d

	rts

Lab102D0	movea.l	a4,a0
Lab102D2
	move.b	sms,d2
	bne.s	sms_routine

	movea.l	$10(a0),a0	; old routine - fails with SBASIC
	lea	$68(a0),a0	; a0 -> job base Basic OK Minnie

	move.l	(a7)+,a4		; new v3d

	rts

sms_routine
	movea.l	$68(a0),a0	; new routine for SBASIC
	move.l	(a0),a0
	lea	$1e8(a0),a0

	move.l	(a7)+,a4		; new v3d

	rts


********************* End of patched routine *******************************




Lab102DC	bsr	lab1028c		; jump to patched routine
	movea.l	$18(a0),a2	; SYS_TPAF
	adda.l	a0,a2
	lsl.w	#3,d3
	lea	0(a2,d3.w),a3
	suba.l	a0,a3
	cmpa.l	$1c(a0),a3	; SYS_RPAB
	bpl	lab101fc
	rts

Lab102F6	movea.l	$20(a0),a3	; SYS_RAMT
	adda.l	a0,a3
	move.w	2(a2,d3.w),d3
	move.w	d3,d1
	addq.w	#1,d1
	beq	lab101fc
	lea	0(a3,d3.w),a0
	rts

Lab1030E	bsr	lab10450
	trap	#0
	bsr.s	lab1031e
	move.w	d1,0(a1,a6.l)
	bra	lab10210

Lab1031E	ori.w	#$0700,sr 	; set 210
	bsr	lab1028c		; jump to patched routine
	movea.l	a1,a5
	addq.l	#3,a5
	move.b	2(a1,a6.l),d1
	movea.l	$20(a0),a3	; SYS_RAMT
	adda.l	a0,a3
	movea.l	$24(a0),a4	; SYS_MXFR
	adda.l	a0,a4
	move.b	(a4),d7
	clr.b	(a4)
	move.w	0(a1,a6.l),d0
	beq.s	lab10362
	lea	1(a1,d0.w),a1
	move.l	a1,d4
	bclr	#0,d4
	movea.l	d4,a1
	move.w	d0,d4
	subq.w	#2,d4
	move.b	(a3)+,d3
Lab10356	ext.w	d3
	cmp.b	d0,d3
	beq.s	lab10366
Lab1035C	adda.w	d3,a3
	move.b	(a3)+,d3
	bne.s	lab10356
Lab10362	moveq	#-$0c,d1
	bra.s	lab103b2

Lab10366	cmp.b	(a3),d1
	bne.s	lab1035c
	lea	1(a3),a2
	movea.l	a5,a0
	move.w	d4,d5
	bmi.s	lab10380
	adda.l	a6,a0
Lab10376	cmpm.b	 (a0)+,(a2)+
	dbne	d5,lab10376
	bne	lab1035c
Lab10380	bsr	lab1028c		; jump to patched routine
	movea.l	a0,a2
	suba.l	a2,a3
	suba.l	$20(a2),a3
	move.w	a3,d4
	subq.w	#1,d4
	movea.l	$18(a2),a0
	move.l	$1c(a2),d1
	sub.l	a0,d1
	asr.l	#3,d1
	move.w	d1,d5
	lea	2(a2,a0.l),a0
Lab103A2	cmp.w	(a0),d4
	addq.l	#8,a0
	dbeq	d5,lab103a2
	beq.s	lab103b0
	moveq	#-7,d1
	bra.s	lab103b2

Lab103B0	sub.w	d5,d1
Lab103B2	move.b	d7,(a4)		; George Gwilt discovered a problem here *****
	move.w	d1,d0
	ext.l	d0
	rts

Lab103BA	bsr	lab10416
	subq.w	#1,d3
	bne	lab10422
	move.w	0(a1,a6.l),d3
	trap	#0
	ori.w	#$0700,sr 	; set 210
	bsr	lab102dc
	move.b	1(a2,d3.w),d0
	andi.b	#7,d0
	beq.s	lab103ec
	cmp.b	#3,d0
	bne.s	lab103e4
	addq.b	#1,d0
Lab103E4	move.w	d0,0(a1,a6.l)
	bra	lab10210

Lab103EC	bsr	lab102f6
	move.b	(a0),d0
	ext.w	d0
	add.w	d0,d3
	move.b	0(a3,d3.w),d1
	cmpi.b	#$25,d1
	bne.s	lab10404
	moveq	#4,d0
	bra.s	lab103e4

Lab10404	moveq	#1,d0
	cmpi.b	#$24,d1
	beq.s	lab103e4
	addq.w	#1,d0
	bra.s	lab103e4

Lab10410	movea.w	$0116,a2		; SB.GTSTR
	bra.s	lab1041a

Lab10416	movea.w	$0112,a2		; SB.GTINT
Lab1041A	jsr	(a2)
*  
*  ¾¾¾ VECTOR utility $112 : SB.GTINT ¾¾¾
*  

	tst.l	d0
	beq.s	lab10424
Lab10420	addq.l	#4,a7
Lab10422	moveq	#-$0f,d0		; ERR.IPAR
Lab10424	rts

Lab10426	ext.l	d6
	bsr	lab10462
	suba.l	d6,a1
	btst	#0,d6
	beq.s	lab10436
	subq.l	#1,a1
Lab10436	movea.l	a1,a2
	move.w	d6,0(a2,a6.l)
	addq.l	#2,a2
	subq.w	#1,d6
	bmi.s	lab1044c
Lab10442	move.b	(a0)+,0(a2,a6.l)
	addq.l	#1,a2
	dbf	d6,lab10442
Lab1044C	bra	lab10490

Lab10450	bsr	lab10410
	bne.s	lab10420
	subq.w	#1,d3
	bne.s	lab10420
	rts

Lab1045C	moveq	#6,d6
	movea.l	$58(a6),a1	; BV_RIP
Lab10462
*	tst.b	$54(a6)		; istruzioni che danno un err_om
*	bmi.s	lab1047a		; con SBASIC
	move.l	d6,d1
	move.l	a1,$58(a6)	; BV_RIP
	movea.w	$011a,a2		; QA.RESRI
	jsr	(a2)
*  
*  ¾¾¾ VECTOR utility $11A : QA.RESRI ¾¾¾
*  

	movea.l	$58(a6),a1	; BV_RIP
	rts

Lab1047A	lea	-2(a1),a3
	suba.l	d6,a3
	cmpa.l	(a6),a3
	bpl.s	lab10488
	moveq	#-3,d0		; ERR.IMEM
	addq.l	#4,a7
Lab10488	rts

Lab1048A	moveq	#3,d4
	bra	lab104c6

Lab10490	moveq	#1,d4
	bra.s	lab104c6

Lab10494	bsr	lab1045c
	move.l	d5,d4
	beq.s	lab104ba
	move.w	#$081f,d4
	move.l	d5,d3
	add.l	d3,d3
	bvs.s	lab104ba
	subq.w	#1,d4
	move.l	d3,d5
	moveq	#$10,d2
Lab104AC	move.l	d5,d3
	asl.l	d2,d3
	bvs.s	lab104b6
	move.l	d3,d5
	sub.w	d2,d4
Lab104B6	asr.l	#1,d2
	bne.s	lab104ac
Lab104BA	subq.l	#6,a1
	move.l	d5,2(a1,a6.l)
Lab104C0	move.w	d4,0(a1,a6.l)
	moveq	#2,d4
Lab104C6	move.l	a1,$58(a6)	; BV_RIP
	moveq	#0,d0
	rts

Lab104CE	moveq	#-1,d5
	bsr	lab101ac
	subq.w	#1,d3
Lab104D6	bne	lab10422
	move.l	0(a1,a6.l),d3
	btst	#0,d3
	bne.s	lab104d6
	tst.l	d5
	beq.s	lab104f2
	trap	#0
	ori.w	#$0700,sr 	; set 210
	bsr	lab1028c		; jump to patched routine
Lab104F2	move.w	0(a0,d3.l),d4
	move.l	2(a0,d3.l),0(a1,a6.l)
	subq.l	#2,a1
	andi.w	#$0fff,d4
	andi.w	#-$2701,sr	; clear S210
	bra.s	lab104c0

END_CODE	
	end
*  End of Deasm
