*****************************************************************************
*									    *
*	PROGRAM: CCInstaller						    *
*	VERSION: 1.1							    *
*   SOURCE CODE: 12 (26.2.2001)						    *
*	   DATE: 15.01.2001 - 9.2.2001					    *
*      LANGUAGE: Assembler (DevPac V3.14)				    *
*	 SYSTEM: A1200	KS 40.68 WB 40.42 2MB chip 64MB fast 68030/50mhz    *
*									    *
*	 AUTHOR: Joerg Riemer						    *
*	  EMAIL: mission@cs.tu-berlin.de				    *
*									    *
*      FUNCTION: hd-patcher for carrier command				    *
*									    *
*****************************************************************************

	output	ram:CCInstaller

	opt	p=68030

*****************************************************************************

	include	source/custom.i

*****************************************************************************

_LVOOpenLibrary		equ	-$00000228
_LVOCloseLibrary	equ	-$0000019E

MODE_NEWFILE		equ	 $000003EE

_LVOOpen		equ	-$0000001E
_LVORead		equ	-$0000002A
_LVOInput		equ	-$00000036
_LVOOutput		equ	-$0000003C
_LVOWrite		equ	-$00000030
_LVOClose		equ	-$00000024

*****************************************************************************

INTENAsave	rs.w	1

	include	source/DBStructure.i

*****************************************************************************

	cmp.b	#"?",(A0)
	bne	CCPatch

Start	moveq	#0,D0			;set last supported version
	lea	DosName(pc),A1		;get library name
	movea.l	$4.w,A6			;set execbase to call a function
	jsr	-$228(A6)		;use EXEC to (openlibrary)
	tst.l	D0			;be sure it's open
	beq.b	Quit			;quit if not
	movea.l	D0,A6			;set dosbase to call a function
	jsr	-$3C(A6)		;use DOS to find (output)
	move.l	D0,D1			;set them
	lea	InfoText(pc),A0		;get textbase
	move.l	A0,D2			;set base of text
	move.l	#TextSize,D3		;set size of text
	jsr	-$30(A6)		;use DOS to (write) text
	movea.l	A6,A1			;set dosbase for close
	movea.l	$4.w,A6			;set execbase to call a function
	jsr	-$19e(A6)		;use EXEC to (closelibrary)
	moveq	#0,D0			;clear returncode
Quit	rts				;back to console

*****************************************************************************

InfoText

  dc.b	$A," CARRIER COMMAND HD-PATCHER/INSTALLER",$A,$A

  dc.b	" especially hd-patch program for CARRIER COMMAND",$A
  dc.b	" RAINBIRD DISK: version A1.2 (19.08.1988) / A1200-fix TML!'2001",$A,$A

  dc.b  " this one creates an executable carrier-command file in",$A
  dc.b	" the current directory, which is loadable from any dos-disk.",$A,$A

  dc.b	$9b,"32m » CARRIER COMMAND TAKES OVER THE SYSTEM « save all datas before play.",$A,$A

  dc.b	$9b,"0m"

  dc.b	" by joerg riemer feb'2001  email: mission@cs.tu-berlin.de",$A,$A,0

TextSize  equ	*-InfoText-1

*****************************************************************************

		cnop	0,4

CCPatch		moveq	#0,D0
		lea	DosName(PC),A1
		move.l	$04.w,A6
		jsr	_LVOOpenLibrary(A6)
		move.l	D0,A5

		lea	InfoText00(PC),A4
		bsr	PrintText

		bsr	WaitReturn

		lea	InfoText07(PC),A4
		move.b	Error(pc),D0
		bne	QuitProg

		movem.l	A5/A6,-(SP)
		bsr	ReadDisk
		movem.l	(SP)+,A5/A6

		lea	InfoText02(PC),A4
		lea	DataBase(pc),A0
		tst.b	TrackError(A0)
		bne	QuitProg

		lea	InfoText06(PC),A4
		bsr	PrintText

		bsr	WaitReturn

		lea	InfoText07(PC),A4
		move.b	Error(pc),D0
		bne	QuitProg

****************

		lea	InfoText03(PC),A4
		move.l	#FileName1,D1
		move.l	#MODE_NEWFILE,D2
		move.l	A5,A6
		jsr	_LVOOpen(A6)
		move.l	D0,D7
		beq	QuitProg

		lea	InfoText04(PC),A4

		move.l	D7,D1
		move.l	#HunkHeader,D2
		move.l	#Part1_Size,D3
		move.l	A5,A6
		jsr	_LVOWrite(A6)
		cmp.l	#Part1_Size,D0
		bne.b	Closefile

		move.l	D7,D1
		move.l	#FileData3,D2
		move.l	#FileSize3,D3
		move.l	A5,A6
		jsr	_LVOWrite(A6)
		cmp.l	#FileSize3,D0
		bne.b	Closefile

		move.l	D7,D1
		move.l	#FileData2,D2
		move.l	#FileSize2,D3
		move.l	A5,A6
		jsr	_LVOWrite(A6)
		cmp.l	#FileSize2,D0
		bne.b	Closefile

		move.l	D7,D1
		move.l	#PatchStart,D2
		move.l	#Part3_Size,D3
		move.l	A5,A6
		jsr	_LVOWrite(A6)
		cmp.l	#Part3_Size,D0
		bne.b	Closefile

****************

		lea	InfoText05(PC),A4

Closefile	move.l	D7,D1
		move.l	A5,A6
		jsr	_LVOClose(A6)

****************

QuitProg	bsr	PrintText

		lea	SetClock(pc),A1
		move.l	A1,D1
		moveq	#0,D2
		moveq	#0,D3
		movea.l	A5,A6
		jsr	-222(a6)

		move.l	A5,A1
		move.l	$04.w,A6
		jsr	_LVOCloseLibrary(A6)
		moveq	#$00,D0
		rts

*****************************************************************************

	dc.b	"$VER: CCInstaller 1.1 (26.2.2001)",0

*****************************************************************************

		cnop	0,4

WaitReturn	lea	InfoText01(PC),A4
		bsr.b	PrintText

		move.l	A5,A6

		st	Error

ChBreak		moveq	#00,D1			;prepare signal mask
		bset	#12,D1			;set break bit (ctrl_c)
		jsr	-792(A6)		;use DOS to (checksignal)
		btst	#12,D0			;test break bit (ctrl_c)
		bne.b	.Cancel			;if set, branch

		jsr	_LVOInput(A6)
		move.l	D0,D1			;set input
		move.l	#50000,D2		;set timeout
		jsr	-$CC(A6)		;use DOS to (waitforchar)
		tst.l	D0			;must be (DOS)true
		beq.b	ChBreak			;loop if not

		lea	CharBuffer(pc),A2
		clr.b	(A2)			;clear buffer

		jsr	_LVOInput(A6)
		move.l	D0,D1			;set input
		move.l	A2,D2			;set buffer
		moveq	#1,D3			;chars to read
		jsr	-$2A(A6)		;use DOS to (read)
	 	cmp.b	#$A,(A2)		;check for <LINEFEED>
		bne.b	ChBreak			;loop if not
		sf	Error
.Cancel		rts

*****************************************************************************

PrintText	move.l	A5,A6
		jsr	_LVOOutput(A6)
		move.l	D0,D1
		move.l	A4,D2
		moveq	#-$01,D3
GetSize		addq.l	#$01,D3
		tst.b	(A4)+
		bne.b	GetSize
		move.l	A5,A6
		jsr	_LVOWrite(A6)
		rts

*****************************************************************************

DosName		dc.b	"dos.library",0

SetClock	dc.b	"RUN >NIL: SetClock Load",0

FileName1	dc.b	"CarrierCommand",0

InfoText00	dc.b	"CARRIER COMMAND HD-PATCHER/INSTALLER",$A
		dc.b	"by joerg riemer feb'2001  email: <mission@cs.tu-berlin.de>",$A
		dc.b	"insert original disk RAINBIRD carrier command in df0:",$A,0

InfoText06	dc.b	"ready to write file in the current directory.",$A,0
InfoText01	dc.b	"hit <RETURN> to continue or <CTRL><C> to abort: ",0
InfoText02	dc.b	"ERROR: reading tracks... (corrupt/wrong disk)",$A,0
InfoText03	dc.b	"ERROR: Couldn't open file for writing...",$A,0
InfoText04	dc.b	"ERROR: Couldn't save file...",$A,0
InfoText05	dc.b	"file saved. operation successful!!!",$A,0
InfoText07	dc.b	$A,"operation cancelled!!!",$A,0

CharBuffer	dc.b	$00
Error		dc.b	$00

		cnop	0,4

*****************************************************************************

ReadDisk	include	source/SCode.s

*****************************************************************************

		moveq	#2,D0		;(load game datas) first track
		moveq	#78,D1		;tracks to read
		moveq	#0,D2		;diskside
		moveq	#0,D3		;drive number
		lea	FileData2,A0	;base of mem
		lea	TrackBuffer,A1	;dma buffer

*****************************************************************************

		include	source/LoadDatas.s

*****************************************************************************

DataBase	dcb.b	BSS_Size,0

		cnop	0,4

* hunk header ***************************************************************

		cnop	0,4

HunkHeader	dc.l	$000003F3
		dc.l	$00000000
		dc.l	$00000001
		dc.l	$00000000
		dc.l	$00000000
		dc.l	(Bin01_Size+Bin02_Size+Bin03_Size)/4
		dc.l	$000003E9
		dc.l	(Bin01_Size+Bin02_Size+Bin03_Size)/4

* Bin01_Part ****************************************************************

GameStart	lea	CopList(PC),A0
		movea.l	A0,A1
		add.l	#CopLstSize+Bin02_Size,A1
		jmp	(A1)

		cnop	0,4

CopList		dc.l	$00EC0005
		dc.l	$00EE9078
		dc.l	$00E80005
		dc.l	$00EA9050
		dc.l	$00E40005
		dc.l	$00E69028
		dc.l	$00E00005
		dc.l	$00E29000
		dc.l	$FFFFFFFE

CopLstSize	equ	*-CopList
Part1_Size	equ	*-HunkHeader
Bin01_Size	equ	*-GameStart

* Bin03_Part ****************************************************************

		cnop	0,4

*****************************************************************************

PatchStart	lea	Buffer(pc),A1
		move.l	A0,(A1)

*****************************************************************************

		include	source/HardHack.s

*****************************************************************************

		moveq	#0,D0
		moveq	#7,D1
		lea	color(A6),A0
.ClearColor	move.l	D0,(A0)+
		dbra	D1,.ClearColor

		move.w	#$0C40,bplcon3(A6)
		move.w	#$4200,bplcon0(A6)
		move.w	#$0038,ddfstrt(A6)
		move.w	#$00D0,ddfstop(A6)
		move.w	#$2C81,diwstrt(A6)
		move.w	#$F4C1,diwstop(A6)
		move.w	#$0000,bplcon1(A6)
		move.w	#$0078,bpl1mod(A6)
		move.w	#$0078,bpl2mod(A6)

		move.l	#Part2_Size+CopLstSize,D0
		lea	$400-CopLstSize.w,A0		;^
		move.l	Buffer(pc),A1
.CopyMem	move.l	(A1)+,(A0)+
		subq.l	#1,D0
		bne.b	.CopyMem

		lea	$400-CopLstSize.w,A0		;^
		move.l	A0,cop1lc(A6)
		move.w	copjmp1(A6),D0
		move.w	#$8390,dmacon(A6)
		move.w	#$0C00,potgo(A6)

		lea	$60D00,A0			;^
		lea	color(A6),A1
		moveq	#7,D0
.SetColor	move.l	(A0)+,(A1)+
		dbra	D0,.SetColor

		move.b	#$7F,_ciaa+ciaicr
		move.b	_ciaa+ciaicr,D0

.Wait0		move.b	_ciaa+ciaicr,D0
		btst	#3,D0
		beq.b	.Wait0

		move.b	_ciaa+ciasdr,D0
		bset	#6,_ciaa+ciacra
		move.b	#0,_ciaa+ciasdr

		moveq	#-1,D1
.Wait1		dbra	D1,.Wait1

		move.b	#$FF,_ciaa+ciasdr
		bclr	#6,_ciaa+ciacra
		cmp.b	#$7F,D0
		bne.b	.Wait0

		lea	$59000,A0
		jmp	$400.w

		cnop	0,4

Buffer		dc.l	0

Bin03_Size	equ	*-PatchStart

		dc.l	$000003F2

Part3_Size	equ	*-PatchStart

*****************************************************************************

		SECTION	FileReader_02,BSS

*****************************************************************************

FileData2	ds.b	512*10*7
FileSize2	equ	*-FileData2
FileData3	ds.b	512*10*71
FileSize3	equ	*-FileData3

Part2_Size	equ	*-FileData2
Bin02_Size	equ	Part2_Size

*****************************************************************************

		SECTION	FileReader_03,BSS_C

*****************************************************************************

TrackBuffer	ds.l	4096

 end ************************************************************************
