*	DISK COPY	*

PR	MACRO ADR
	LDX #ADR&255
	LDY #ADR/256
	JSR PRINT
	MEND

EOL	MACRO
	DFB 155
	MEND

	ORG $1C00

DATBUF	EQU $0400
BUF	EQU DATBUF

POMZ	EPZ 203 ;204
SEC1	EPZ 205 ;206
SEC2	EPZ 207 ;208
POCBUF	EPZ 209
OBR	EPZ 0	;1
TSEC1	EPZ 28	;29
TSEC2	EPZ 30	;31
MAXBUF	EPZ 4

SK0	EQU 262
SK1	EQU 736
SK2	EQU 738
SK3	EQU 739
SK4	EQU 771
SK5	EQU 772
SK6	EQU 773
SK7	EQU 776
SK8	EQU 777
SK9	EQU 778
SK10	EQU 779
SK11	EQU 834
SK12	EQU 836
SK13	EQU 837
SK14	EQU 840
SK15	EQU 5347
SK16	EQU 5380

INIT	CLC
	RTS
	NOP
RUN	LDA #1
	STA 752
	LDA #2
	STA 82
	LDA #39
	STA 83
	PR T0
	PR T1
	PR T2
	PR T3
	LDA #2
	STA 85
	LDA #9
	STA 84
	PR T14
VFOR	JSR SETSET
VFORR	LDA #2
	STA 85
	LDA #10
	STA 84
	PR T13
	LDA #255
	STA 764
VFORC	LDA 53279
	CMP #6
	BEQ VFORK
	LDA 764
	CMP #255
	BEQ VFORC
	CMP #31
	BNE VFOR1
	LDA TR
	EOR #$80
	STA TR
	LDA TW
	EOR #$80
	STA TW
	JMP VFOR
VFOR1	CMP #30
	BNE VFOR2
	LDA STAV
	EOR #$80	;COPY
	JMP VFOR7
VFOR2	CMP #26
	BNE VFOR3
	LDY #'P'<<1
	LDA TW
	ASL
	PHP
	LSR
	CMP #'W'
	BEQ VFOR22
	LDY #'W'<<1
VFOR22	TYA
	PLP
	ROR
	STA TW
	JMP VFOR
VFOR3	CMP #24
	BNE VFOR4
	LDA STAV
	EOR #$40
	JMP VFOR7
VFOR4	CMP #29
	BNE VFOR5
	LDA STAV
	AND #$03
	TAY
	INY
	BNE VFOR44
	INY
VFOR44	LDA STAV
	AND #$FC
	STA STAV
	TYA
	AND #$03
	ORA STAV
VFOR7	STA STAV
	JMP VFOR
VFOR5	CMP #28
	BEQ VFOR6
	JMP VFORR
VFORK	JMP VFORKX
VFOR6	LDY #255
	STY 764
	INY
	STY 752
	JMP (10)

VFORKX	LDA #9
	STA 84
	PR TMAZ
	PR TMAZ
	JSR INSFROM
	LDX #0
	STX 779
	INX
	STX 778
	LDA TW
	STA ULOZ
	LDA #'O'
	STA TW
	LDA #12
	JSR NDLX
	LDA #SNBUF&255
	LDX #SNBUF/256
	JSR WRITES
	LDA ULOZ
	STA TW
	JSR NDL128
	LDA #BUF&255
	LDX #BUF/256
	JSR SK33
	LDA TR
	STA ULOZ
	LDA #'N'
	STA TR
	LDA #12
	JSR NDLX
	LDA #NBUF&255
	LDX #NBUF/256
	JSR SK33
	LDA ULOZ
	STA TR
	LDY #7
	LDA NBUF,Y	;DLZKA SEK
	AND #$80
	STA SK21
	LDY #4
	LDA NBUF,Y	;POCET STRAN
	BEQ VF1
	LDA #0
	STA UTSEK
	JMP VFF
VF1	LDY #3
	LDA NBUF,Y	;POCET SEK/STOPU
	LDX #2
	CMP #26
	BNE VF2
	LDX #1
VF2	STX UTSEK
VFF	LDA UTSEK
	AND #%00000011
	STA UTSEK
	ASL	;*2
	TAX
	ASL	;*4
	TAY
	LDA TABS1,X
	STA MAXSEC
	LDA TABS1+1,X
	STA MAXSEC+1
	LDX #3
KKC1	LDA TABS2,Y
	STA TSEK,X
	INY
	DEX
	BPL KKC1
	LDX #0
	LDA SK21
	BEQ KKC2
	LDX #3
KKC2	LDY #2
KKC3	LDA TABDLS,X
	STA TBYTES,Y
	INX
	DEY
	BPL KKC3
VSEC	LDA #2
	STA 85
	LDA #7
	STA 84
	PR T4
	PR T5
CKEY	LDA 53279
	AND #7
	CMP #3
	BNE K1
	INC UTSEK
	LDA UTSEK
	AND #%00000011
	STA UTSEK
	ASL	;*2
	TAX
	ASL	;*4
	TAY
	LDA TABS1,X
	STA MAXSEC
	LDA TABS1+1,X
	STA MAXSEC+1
	LDX #3
KC1	LDA TABS2,Y
	STA TSEK,X
	INY
	DEX
	BPL KC1
KC11	LDA 53279
	CMP #7
	BNE KC11
	JMP VSEC
K1	CMP #5
	BNE K2
	LDX #0
	LDA SK21
	EOR #$80
	STA SK21
	BEQ KC2
	LDX #3
KC2	LDY #2
KC3	LDA TABDLS,X
	STA TBYTES,Y
	INX
	DEY
	BPL KC3
KC33	LDA 53279
	CMP #7
	BNE KC33
	JMP VSEC
K2	CMP #6
	BNE CKEY
	LDA #2
	STA 85
	LDA #10
	STA 84
	PR T6
*	 JSR INSFROM
	JSR NDL128
	LDA #BOTBUF&255
	STA POMZ
	LDA #BOTBUF/256
	STA POMZ+1
	LDX #0
	STX 779
	INX
	STX 778
NACB	LDA POMZ
	LDX POMZ+1
	JSR SK33
	LDA POMZ
	CLC
	ADC #128
	STA POMZ
	LDA POMZ+1
	ADC #0
	STA POMZ+1
	INC 778
	LDA 778
	CMP #4
	BCC NACB
	JSR NASDL
	LDA MAXSEC
	STA 778
	LDA MAXSEC+1
	STA 779
	LDA #DATBUF&255
	LDX #DATBUF/256
	JSR SK33

	JSR INSTO
	LDA STAV
	ASL
	ASL
	BCC XX1
XX3	LDX #0
	STX 779
	INX
	STX 778
	LDA TW
	STA ULOZ
	LDA #'O'
	STA TW
	LDA #12
	JSR NDLX
	LDA #NBUF&255
	LDX #NBUF/256
	JSR WRITES
	LDA ULOZ
	STA TW
	JSR NASDL
	LDA #'!'
	STA 770
	LDA #BUF&255
	STA 772
	LDA #BUF/256
	STA 773
	JSR $E453
	BPL XX2
XX4	JSR RWERR
	BCS XX3
XX2	LDA 776
	LDY #0
	STY 776
	TAY
	BNE XX4

XX1	JSR NASDL
	LDA MAXSEC
	STA 778
	LDA MAXSEC+1
	STA 779
	LDA #DATBUF&255
	LDX #DATBUF/256
	JSR SK33
	LDX #127
	LDA #0
NULB	STA DATBUF,X
	DEX
	BPL NULB
	LDA 20
	STA TODISR
	LDX #7
NASB	LDA TODISK,X
	STA DATBUF,X
	DEX
	BPL NASB
	LDA STAV
	ASL
	BCC XXX5
	JSR NDL128
	LDX #0
	STX 779
	INX
	STX 778
	LDA #DATBUF&255
	LDX #DATBUF/256
	JSR WRITES
XXX5	LDA 106 ;KONIEC VOLNEJ PAMATE
	SEC
	SBC #4
	SEC
	SBC #ZACBUF
	STA MAXBUF
	LDX SK21
	BEQ NA1
	LDA MAXBUF
	BPL NA2
	LDA #$7F
NA2	ASL
	STA MAXBUF
NA1	LDA #0
	STA SEC1+1
	STA SEC2+1
	STA TSEC1+1
	STA TSEC2+1
	LDA #4
	STA SEC1
	STA SEC2
	STA TSEC1
	STA TSEC2
	LDA STAV
	ASL
	BCC XXX6
	JMP STLOAD	;SK27
XXX6	JMP STCOMP

NDL128	LDA #128
NDLX	STA 776
	LDA #0
	STA 777
	RTS
NASDL	LDX #0
	LDA SK21
	STA 776
	BNE NASDL1
	INX
NASDL1	STX 777
	RTS

INSFROM LDA 53279
	AND #7
	CMP #6
	BEQ INSFROM
	LDA #2
	STA 85
	LDA #12
	STA 84
	PR T7
INSF1	LDA 53279
	AND #7
	CMP #6
	BNE INSF1
	JMP INSMAZ
INSTO	LDA 53279
	AND #7
	CMP #6
	BEQ INSTO
	LDA #2
	STA 85
	LDA #12
	STA 84
	PR T8
	JMP INSF1
INSMAZ	LDA #2
	STA 85
	LDA #12
	STA 84
	PR T9
	RTS

TESTFR	JSR INSFROM
	JSR NDL128
	LDX #0
	STX 779
	INX
	STX 778
	LDA #DATBUF&255
	LDX #DATBUF/256
	JSR SK33
	JSR NASDL
	LDX #127
TESTF1	LDA DATBUF,X
	CMP BOTBUF,X
	BNE TESTFR
	DEX
	BPL TESTF1
	RTS

TESTTO	JSR INSTO
	JSR NDL128
	LDX #0
	STX 779
	INX
	STX 778
	LDA #DATBUF&255
	LDX #DATBUF/256
	JSR SK33
	JSR NASDL
	LDX #7
TESTT1	LDA DATBUF,X
	CMP TODISK,X
	BNE TESTTO
	DEX
	BPL TESTT1
	RTS

SETSET	LDY #0
	LDX #5
	LDA TR
	BMI SET1
	LDY #6
SET1	LDA TTSPE,Y
	STA TSPE,X
	INY
	DEX
	BPL SET1
	LDY #0
	LDX #4
	LDA STAV
	BMI SET2
	LDY #5
SET2	LDA TTCOPY,Y
	STA TCOPY,X
	INY
	DEX
	BPL SET2
	LDY #0
	LDX #3
	LDA TW
	AND #$7F
	CMP #'W'
	BEQ SET3
	LDY #4
SET3	LDA TTWP,Y
	STA TWP,X
	INY
	DEX
	BPL SET3
	LDY #0
	LDX #6
	LDA STAV
	AND #$40
	BNE SET4
	LDY #7
SET4	LDA TTFOR,Y
	STA TFOR,X
	INY
	DEX
	BPL SET4
	LDY #0
	LDX #6
	LDA STAV
	AND #$02
	BNE SET5
	LDY #14
	JMP SET6
SET5	LDA STAV
	AND #$01
	BEQ SET6
	LDY #7
SET6	LDA TTVER,Y
	STA TVER,X
	INY
	DEX
	BPL SET6
	RTS

HPRINT	TAX
	LSR
	LSR
	LSR
	LSR
	CLC
	ADC #16 ;DISP.ASC 0
	STA (OBR),Y
	INY
	TXA
	AND #$0F
	CLC
	ADC #16 ;DISP.ASC 0
	STA (OBR),Y
	INY
	RTS

SK21	DFB 0		;DLZKA SEKTORU
MAXSEC	DFW 1440	;LAST SECTOR
UTSEK	DFB 0
ADBUF	DFW 0
ULOZ	DFB 0

TR	ASC 'R'
TW	ASC 'W'
STAV	DFB %11000010

TABS1	DFW 1440,1040,720,360
TABS2	ASC '0441'
	ASC '0401'
	ASC '027 '
	ASC '063 '

TABDLS	ASC '652'
	ASC '821'

TTSPE	ASC 'DEEPS '
	DFB 6 DUP ' '
TTCOPY	ASC 'YPOC '
	DFB 5 DUP ' '
TTWP	ASC ')W( '
	ASC ')P( '
TTFOR	ASC 'TAMROF '
	DFB 7 DUP ' '
TTVER	ASC 'YFIREV '
	ASC ' KCEHC '
	DFB 7 DUP ' '

SNBUF	DFB 40,0,0,18,1,4,1,0,1,65,0,0

TODISK	ASC 'TO DISK'
TODISR	ASC '  '

STLOAD	JSR TESTFR
	JSR NASDL
	LDA #0
	STA POCBUF
	STA POMZ
	LDA #ZACBUF
	STA POMZ+1
	LDA 88
	CLC
	ADC #400+TREAD-T6+2&255
	STA OBR
	LDA 89
	ADC #400+TREAD-T6+2/256
	STA OBR+1

CLOAD	LDY #0
	LDA TSEC1+1
	JSR HPRINT
	LDA TSEC1
	JSR HPRINT
	LDA SEC1
	STA 778
	LDA SEC1+1
	STA 779
	LDA POMZ
	LDX POMZ+1
	JSR SK33
	LDA POMZ
	CLC
	ADC SK21
	STA POMZ
	LDA POMZ+1
	ADC #0
	STA POMZ+1
	LDA SK21
	BNE CL1
	INC POMZ+1
CL1	INC SEC1
	BNE CL2
	INC SEC1+1
CL2	SED
	LDA TSEC1
	CLC
	ADC #1
	STA TSEC1
	LDA TSEC1+1
	ADC #0
	STA TSEC1+1
	CLD
	INC POCBUF
	LDA POCBUF
	CMP MAXBUF
	BCC CL3
	JMP STSAVE
CL3	LDA SEC1+1
	CMP MAXSEC+1
	BCC CLOAD
	LDA SEC1
	CMP MAXSEC
	BCC CLOAD
	BEQ CLOAD
	JMP STSAVE

STSAVE	JSR TESTTO
	JSR NASDL
	LDA #0
	STA POMZ
	LDA #ZACBUF
	STA POMZ+1
	LDA 88
	CLC
	ADC #400+TWRITE-T6+2&255
	STA OBR
	LDA 89
	ADC #400+TWRITE-T6+2/256
	STA OBR+1

CSAVE	LDY #0
	LDA TSEC2+1
	JSR HPRINT
	LDA TSEC2
	JSR HPRINT
	LDA SEC2
	STA 778
	LDA SEC2+1
	STA 779
	LDA POMZ
	LDX POMZ+1
	JSR WRITES
	LDA POMZ
	CLC
	ADC SK21
	STA POMZ
	LDA POMZ+1
	ADC #0
	STA POMZ+1
	LDA SK21
	BNE CS1
	INC POMZ+1
CS1	INC SEC2
	BNE CS2
	INC SEC2+1
CS2	SED
	LDA TSEC2
	CLC
	ADC #1
	STA TSEC2
	LDA TSEC2+1
	ADC #0
	STA TSEC2+1
	CLD
	DEC POCBUF
	BNE CSAVE
	LDA SEC2+1
	CMP MAXSEC+1
	BCC CS3 	;BCC STLOAD
	LDA SEC2
	CMP MAXSEC
	BCS CS4
CS3	JMP STLOAD
CS4	BEQ CS3
	JSR NDL128
	LDA #BOTBUF&255
	STA POMZ
	LDA #BOTBUF/256
	STA POMZ+1
	LDX #0
	STX 779
	INX
	STX 778
ZAPB	LDA POMZ
	LDX POMZ+1
	JSR WRITES
	LDA POMZ
	CLC
	ADC #128
	STA POMZ
	LDA POMZ+1
	ADC #0
	STA POMZ+1
	INC 778
	LDA 778
	CMP #4
	BCC ZAPB
STCOMP	LDA STAV
	LSR
	LSR
	BCS STCOM
	JMP RUN

STCOM	LDA STAV
	LSR
	BCS STCOMM
	JMP STVER
STCOMM	LDA #0
	STA SEC1+1
	STA TSEC1+1
	LDA #4
	STA SEC1
	STA TSEC1
	
	JSR TESTFR
	JSR NASDL
	LDA #0
	STA POMZ
	LDA #ZACBUF
	STA POMZ+1
	LDA 88
	CLC
	ADC #400+TREAD-T6+2&255
	STA OBR
	LDA 89
	ADC #400+TREAD-T6+2/256
	STA OBR+1

CCH	LDY #0
	LDA TSEC1+1
	JSR HPRINT
	LDA TSEC1
	JSR HPRINT
	LDA SEC1
	STA 778
	LDA SEC1+1
	STA 779
	LDA #BUF&255
	LDX #BUF/256
	JSR SK33
	LDY #0
	TYA
	CLC
CC1	ADC BUF,Y
	ADC #0
	INY
	CPY SK21
	BCC CC1
	LDY #0
	STA (POMZ),Y
	INC POMZ
	BNE CC11
	INC POMZ+1
CC11	INC SEC1
	BNE CC2
	INC SEC1+1
CC2	SED
	LDA TSEC1
	CLC
	ADC #1
	STA TSEC1
	LDA TSEC1+1
	ADC #0
	STA TSEC1+1
	CLD
	LDA SEC1+1
	CMP MAXSEC+1
	BCC CCH
	LDA SEC1
	CMP MAXSEC
	BCC CCH
	BEQ CCH
	JMP STVER

STVER	LDA #0
	STA SEC2+1
	STA TSEC1+1
	LDA #4
	STA SEC2
	STA TSEC1

	JSR INSTO
	JSR NASDL
	LDA #0
	STA POMZ
	LDA #ZACBUF
	STA POMZ+1
	LDA 88
	CLC
	ADC #400+TREAD-T6+2&255
	STA OBR
	LDA 89
	ADC #400+TREAD-T6+2/256
	STA OBR+1

CVE	LDY #0
	LDA TSEC1+1
	JSR HPRINT
	LDA TSEC1
	JSR HPRINT
	LDA SEC2
	STA 778
	LDA SEC2+1
	STA 779
	LDA #BUF&255
	LDX #BUF/256
	JSR SK33
	LDA STAV
	LSR
	BCC CV11
	LDY #0
	TYA
	CLC
CV1	ADC BUF,Y
	ADC #0
	INY
	CPY SK21
	BCC CV1
	LDY #0
	CMP (POMZ),Y
	BEQ CVX
	LDA #2
	STA 85
	LDA #12
	STA 84
	PR T15
	JSR INSF1
CVX	INC POMZ
	BNE CV11
	INC POMZ+1
CV11	INC SEC1
	INC SEC2
	BNE CV2
	INC SEC2+1
CV2	SED
	LDA TSEC1
	CLC
	ADC #1
	STA TSEC1
	LDA TSEC1+1
	ADC #0
	STA TSEC1+1
	CLD
	LDA SEC2+1
	CMP MAXSEC+1
	BCC CVE 	;BCC STLOAD
	LDA SEC2
	CMP MAXSEC
	BCC CVE
	JMP RUN

SK31	JSR RWERR
	BCC RES1
SK33	LDY #64  ;VSTUP
	STY SK4
	LDY TR
	STY 770
	STA SK5  ;L - BUFER
	STA ADBUF
	STX SK6  ;H - BUFER
	STX ADBUF+1
	LDA SK9
	ORA SK10
	BEQ SK31 ;SEKTOR=0 - ERROR
	JSR SK49 ;SIOINTERFACE
	BMI SK31 ;CYBA 
RES1	RTS

WRERR	JSR RWERR
	BCC WRS1
WRITES	LDY #128  ;VYSTUP
	STY SK4
	LDY TW
	STY 770
	STA SK5  ;L - BUFER
	STA ADBUF
	STX SK6  ;H - BUFER
	STX ADBUF+1
	LDA SK9
	ORA SK10
	BEQ WRERR	;SEKTOR=0 - ERROR
	JSR SK49	;SIOINTERFACE
	BMI WRERR	;CYBA 
WRS1	RTS

RWERR	LDA #2
	STA 85
	LDA #14
	STA 84
	LDA 770
	STA T10P
	TYA
	JSR HPRERR
	PR T10
	PR T11
RWE0	LDA #255
	STA 764
RWE1	LDA 764
	CMP #255
	BEQ RWE1
	CMP #63 ;ABORT
	BEQ RWE2
	CMP #40 ;RETRY
	BEQ RWE3
	CMP #13 ;IGNORE
	BNE RWE0
	JSR RWEK
	CLC
	RTS
RWE3	JSR RWEK
	SEC
	RTS
RWE2	JSR RWEK
	LDX #255
	TXS
	JMP RUN

RWEK	LDA #255
	STA 764
	PR T12
	LDA ADBUF
	LDX ADBUF+1
	RTS

HPRERR	LDY #0
	LDX #0
HPRE0	SEC
	SBC #100
	BCC HPRE1
	INX
	JMP HPRE0
HPRE1	CLC
	ADC #100
	JSR HPRR
HPRE2	SEC
	SBC #10
	BCC HPRE3
	INX
	JMP HPRE2
HPRE3	CLC
	ADC #10
	JSR HPRR
	TAX
	JSR HPRR
	RTS	   

HPRR	PHA
	TXA
	CLC
	ADC #'0'
	STA TKCH,Y
	INY
	LDX #0
	PLA
	RTS

SIOINT	LDA $0302
	BMI SIOINTE
	JMP $E459

SIOINTE LDA #$01
	STA $0042
	LDA $0301
	PHA

	JSR SIO
	JMP $C95E	;CONTINUE

SIO	TSX
	STX $0318
	LDA #$01
	STA $42

	LDA #$00
	STA $030F
	LDA #$00	;1 POKUS
	STA $02BD
	LDA #$0D	;13 POKUSOV O KOM.
	STA $029C
SIO0	LDA #$28
	STA $D204
	LDA #$00
	STA $D206
	CLC
	LDA $0300
	ADC $0301
	ADC #$FF
	STA $023A
	LDA $0302
	STA $023B
	LDA $030A
	STA $023C
	LDA $030B
	STA $023D
	CLC
	LDA #$3A
	STA $32
	ADC #$4
	STA $34
	LDA #$02
	STA $33
	STA $35
	LDA #$34
	STA $D303
	JSR $ECAF
	LDA $023F
	BNE SIO1
	TYA
	BNE SIO2
SIO1	DEC $029C
	BPL SIO0
	JMP $EA22
SIO2	LDA #$10	;SPEED= 38908 Bd
	STA $D204
	LDA #$00
	STA $D206
	JMP $E9E1	;CONTINUE

PRINT	EQU 50754

SK46	EQU 28494
SK47	EQU 53280
SK48	EQU 58454
SK49	EQU SIOINT	;58457
SK50	EQU 64351

T0	DFB 125,29,29
	ASC '************************************'
	EOL
T1	ASC '*..DISK COPY ver.2.0   13.03.1993..*'
	EOL
T2	ASC '* Copyright (c)Tomi by Marek Zelem *'
	EOL
T3	ASC '************************************'
	DFB 29
	EOL
T4	ASC '  LAST SECTOR:'	;RIADOK 7
TSEK	ASC '1440'
	EOL
T5	ASC '  BYTES/SECTOR:'	;RIADOK 8
TBYTES	ASC '256'
	DFB 29
	EOL
T6	ASC 'READ:'	;RIADOK 10
TREAD	DFB 4 DUP ' '
	DFB 5 DUP ' '
	ASC 'WRITE:'
TWRITE	DFB 5 DUP ' '
	EOL
T7	ASC 'INSERT '
	IASC 'FROM'
	ASC ' DISK IN DRIVE 1'
	EOL
T8	ASC 'INSERT '
	IASC ' TO '
	ASC ' DISK IN DRIVE 1'
	EOL
T9	DFB 28 DUP ' '
	EOL
T10	ASC 'READ/WRITE ERROR ('
T10P	ASC 'X) - '
TKCH	ASC '000'
	DFB 29
	EOL
T11	ASC 'Abort Retry Ignore'
	EOL
T12	DFB 28,28,28,156,156
TMAZ	DFB 156
	EOL
T13	ASC 'SET:'
TSPE	ASC ' SPEED'
TCOPY	ASC ' COPY'
TWP	ASC ' (W)'
TFOR	ASC ' FORMAT'
TVER	ASC ' VERIFY'
	EOL
T14	ASC '.......1....2....3....4......5'
	EOL
T15	ASC 'THIS SECTOR IS NOT EQUAL'
	EOL

NBUF	DFB 12 DUP 0

BOTBUF	DFB 3*128 DUP 0

ZACBUF	EPZ @PC/256+1

	ORG 738
	DFW INIT

	ORG 736
	DFW RUN

