;**************************************************************************
;**
;** ds_main.asm 
;** Copyright (c) 1995,1996 Daniel Kahlin <tlr@stacken.kth.se>
;**
;******

	PROCESSOR 6502

	seg	code

	INCLUDE	ds_mem.i
	INCLUDE	ds_rev.i
	INCLUDE macros.i
	INCLUDE libdef.i
	INCLUDE	Protocol.i

	ORG	$0801
;**************************************************************************
;**
;** Sysline
;**
;******
StartOfFile:
	dc.w	EndLine
SumStart:
	dc.w	1996
	dc.b	$9e,"2069 /T.L.R/",0
;	     1996 SYS2069 /T.L.R/
EndLine:
	dc.w	0
;**************************************************************************
;**
;** Start of the program! 
;**
;******
SysAddress:
	lda	$d020
	pha
	tsx
	stx	stacktempzp

;*** enable turbo by default ***
	lda	#MODEF_TURBO
	sta	modeflags

;*** show startup page ***
	jsr	Startpage

	jsr	InitSerial

	jsr	Server

	jsr	UninitSerial

	ldx	stacktempzp
	txs
	pla
	sta	$d020
	cli
	jmp	$a474


;**************************************************************************
;**
;** Server
;**
;******
Server:
sv_lp1:
	lda	#<BUFFER
	sta	currzp
	lda	#>BUFFER
	sta	currzp+1

;*** receive command ***
	jsr	ReadBlockNoTimeout
	bcs	sv_fl1
	lda	channelzp
	cmp	#15
	bne	sv_fl1

	lda	BUFFER
	cmp	#TYPE_FILETRANSFER
	beq	sv_file
	cmp	#TYPE_DISKCOMMAND
	beq	sv_disk
	cmp	#TYPE_RAWDISKTRANSFER
	beq	sv_rawdisk
	cmp	#TYPE_TESTCOMMAND
	beq	sv_test

	lda	#RESP_NOTSUPPORTED
	jsr	SendResp

sv_fl1:
	jmp	sv_lp1

;*** handle filerequest ***
sv_file:
	jsr	FileTransfer
	jmp	sv_lp1

;*** handle filerequest ***
sv_disk:
	jsr	DiskCommands
	jmp	sv_lp1

;*** handle rawdiskrequest ***
sv_rawdisk:
	jsr	RawdiskTransfer
	jmp	sv_lp1

;*** handle testrequest ***
sv_test:
	jsr	TestCommand
	jmp	sv_lp1



;**************************************************************************
;**
;** Modules
;**
;******
	INCLUDE dsk_diskturbo.asm
	INCLUDE	pr_FileTransfer.asm
	INCLUDE	pr_Test.asm
	INCLUDE	pr_Support.asm
	INCLUDE	bl_Block.asm
	INCLUDE	dsk_Disk.asm
	INCLUDE	pr_rawdiskTransfer.asm
	INCLUDE	dsk_disksector.asm


;**************************************************************************
;**
;** Startpage
;**
;******
Startpage:
	lda	#5
	sta	$d020
	sta	$d021
	lda	#13
	sta	646

	lda	#<Startup_MSG
	ldy	#>Startup_MSG
	jsr	$ab1e
sp_lp2:
	jsr	sp_showflags
sp_lp1:
	jsr	$ffe4
	cmp	#" "
	beq	sp_ex1
	cmp	#"T"
	beq	sp_toggleturbo
	jmp	sp_lp1

sp_ex1:
	rts

sp_toggleturbo:
	lda	modeflags
	eor	#MODEF_TURBO
	sta	modeflags
	jmp	sp_lp2


;**************************************************************************
;**
;** Show state of flags
;**
;******
sp_showflags:
	lda	modeflags
	and	#MODEF_TURBO
	php
	lda	#<TurboOFF_MSG
	ldy	#>TurboOFF_MSG
	plp
	beq	spsf_skp1
	lda	#<TurboON_MSG
	ldy	#>TurboON_MSG
spsf_skp1:
	jmp	$ab1e
	


;**************************************************************************
;**
;** Startpage MESSAGES
;**
;******
TurboON_MSG:
	dc.b	19,13,13,13,13,13,13,13
	dc.b	"dISKTURBO enabled. ",0
TurboOFF_MSG:
	dc.b	19,13,13,13,13,13,13,13
	dc.b	"dISKTURBO disabled.",0

Startup_MSG:
	dc.b	147,8,14	;HOME, No togglecase, UPPERCASE
	dc.b	"dISKSLAVE "
	verrev
	dc.b	" "
	date
	dc.b	13
	dc.b	"sERIAL dISK sERVER BY dANIEL kAHLIN.",13
	dc.b	"eMAIL: <TLR@STACKEN.KTH.SE>",13
	dc.b	"tRACK CODE BY pER aNDREAS aNDERSSON.",13
	dc.b	13
	dc.b	"bUFFER: $3000-$ffff (209 BLOCKS)",13
	IFCONST	PAL
	dc.b	"sPEED: 38400 8n2 (pal VERSION)",13
	ENDIF
	IFCONST	NTSC
	dc.b	"sPEED: 38400 8n2 (ntsc VERSION)",13
	ENDIF
	dc.b	13
	dc.b	13
	dc.b	"<t> TOGGLE DISKTURBO ON/OFF",13
	dc.b	"<spacebar> ENTERS SERVER MODE",0


;**************************************************************************
;**
;** Buffers
;**
;******
BUFFER		EQU	$2f00
FileBufferStart	EQU	$3000	;.
FileBufferEnd	EQU	$ffff

