CASINI	= $02
WARMST	= $08
DOSINI	= $0C
RTCLOK	= $12

BUFRLO	= $32
BUFRHI	= $33
BFENLO	= $34
BFENHI	= $35

VAR30	= $30
VAR31	= $31
VAR36	= $36
VAR37	= $37
VAR38	= $38
VAR39	= $39
VAR3A	= $3A
VAR3C	= $3C
VAR40	= $40

CRSINH	= $02F0
B0ICCOM = $0342
B0ICBAL = $0344
B0ICBAH = $0345
B0ICBLL = $0348
COLBK	= $D01A
POT0	= $D200
POT1	= $D201
RANDOM	= $D20A
IRQST	= $D20E
SKSTAT	= $D20F
PORTB	= $D301
PACTL	= $D302
PBCTL	= $D303
DMACTL	= $D400
NMIEN	= $D40E
CIOV	= $E456


		*= $80
T2_HDR		=*

T2_HDR_TYPE	=*
		* = * + 1
T2_HDR_NAME_LEN = 10
T2_HDR_NAME	=*
		* = * + T2_HDR_NAME_LEN

T2_HDR_START	=*
T2_HDR_STLO	=*
		* = * + 1

T2_HDR_STHI	=*
		* = * + 1

T2_HDR_LENGTH	=*
T2_HDR_LENLO	=*
		* = * + 1

T2_HDR_LENHI	=*
		* = * + 1

T2_HDR_RUN	=*
T2_HDR_RUNLO	=*
		* = * + 1

T2_HDR_RUNHI	=*
		* = * + 1

T2_HDR_END	=*

		*= $80
TU_HDR		=*

TU_HDR_TYPE	=*
		* = * + 1
TU_HDR_NAME_LEN = 20
TU_HDR_NAME	=*
		* = * + TU_HDR_NAME_LEN

TU_HDR_START	=*
TU_HDR_STLO	=*
		* = * + 1

TU_HDR_STHI	=*
		* = * + 1

TU_HDR_LENGTH	=*
TU_HDR_LENLO	=*
		* = * + 1

TU_HDR_LENHI	=*
		* = * + 1

TU_HDR_RUN	=*
TU_HDR_RUNLO	=*
		* = * + 1

TU_HDR_RUNHI	=*
		* = * + 1

TU_HDR_END	=*


.WORD $FFFF

BLK_START = $1400

* = BLK_START - 4

.WORD BLK_START
.WORD BLK_END - 1

BLK_AT_LOAD = *
BLK_IN_REAL = $0400
BLK_LDRL_DIFF = BLK_AT_LOAD - BLK_IN_REAL

* = * - BLK_LDRL_DIFF

	;little puzzling code - cleans $80-$FF and then jumps to CASINI
CLEANRUN	LDA	#$00
		TAX
		STA	RUNVECT + 2
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
CR_LP1		STA	TU_HDR,X
		INX
		BPL	CR_LP1
		NOP
		NOP
RUNVECT		JMP	($0202)

* = * + BLK_LDRL_DIFF

		;starts by relocating code down
RELOC		LDY	#$00
		LDX	#>( BLK_END - BLK_START + 1 + $FF )
BLK_SRC_LD	LDA	BLK_AT_LOAD,Y
BLK_DEST_ST	STA	BLK_IN_REAL,Y
		INY
		BNE	BLK_SRC_LD
		INC	BLK_SRC_LD + 2
		INC	BLK_DEST_ST + 2
		DEX
		BNE	BLK_SRC_LD

		;display warning msg
		LDX	#<MSG_WARN
		LDY	#>MSG_WARN
		JSR	$C642

		;set dosini and run it
		LDA	#<PRG_START
		STA	DOSINI
		LDA	#>PRG_START
		STA	DOSINI+1
		JMP	PRG_START

MSG_WARN:
.BYTE "P O Z O R! Tzv. Superturbo neni kompa-tibilni s T2000 "
.BYTE "(jina delka hlavicky, kmitocty)", $9B

* = * - BLK_LDRL_DIFF

		.BYTE $02, $CA, $8E, $01, $D3, $8E, $F0, $02

PRG_START	LDA	#<MSG_HDR
		LDY	#>MSG_HDR
		JSR	DISPMSG
L14A6		JSR	DOBEEP

		LDA	#$34
		STA	PACTL
		STA	PBCTL

LD_RESTART	JSR	SETALL
		JSR	L1645
		JSR	L15FC
		LDA	VAR38
		CMP	#$B4
		BCC	LOAD_T2

LOAD_TU
		;sets buffer for SuperTurbo header
		LDA	#TU_HDR_END
		STA	BFENLO

		;BEWARE! Works only with $80!!!!
		LDA	#<TU_HDR
		STA	BUFRLO
		ASL
		STA	BUFRHI
		STA	BFENHI
		LDA	#$B7
		JSR	LD_TU_BLK
		BCC	LD_RESTART

		;set buffers for body
		LDA	TU_HDR_STLO
		STA	BUFRLO
		CLC
		ADC	TU_HDR_LENLO
		STA	BFENLO
		LDA	TU_HDR_STHI
		STA	BUFRHI
		ADC	TU_HDR_LENHI
		STA	BFENHI

		;write eol after the name and display header
		LDA	#$9B
		STA	TU_HDR_NAME + TU_HDR_NAME_LEN
		JSR	DISPHDR

		;load body
		LDA	#$ED
		JSR	LD_TU_BLK
		BCC	GLD_ERR

		;set casini
		LDA	TU_HDR_RUNLO
		STA	CASINI
		LDA	TU_HDR_RUNHI
		STA	CASINI+1

		;stop interface and motor
LD_DONE		LDA	#$3C
		STA	PACTL
		STA	PBCTL

		;set warmst
		LDA	#$00
		STA	WARMST
		STA	CRSINH

		;and start it
		JMP	CLEANRUN

GLD_ERR		JSR	DISPERR
		JMP	L14A6

LOAD_T2
		;set ptrs for T2000 header
		LDA	#<T2_HDR_END
		STA	BFENLO
		LDA	#<T2_HDR
		STA	BUFRLO
		ASL
		STA	BUFRHI
		STA	BFENHI

		;beware! expects zero here!
		JSR	LD_T2_BLK
		BCC	LD_RESTART

		;set buffers for body
		LDA	T2_HDR_STLO
		STA	BUFRLO
		CLC
		ADC	T2_HDR_LENLO
		STA	BFENLO
		LDA	T2_HDR_STHI
		STA	BUFRHI
		ADC	T2_HDR_LENHI
		STA	BFENHI

		;write eol after the name and display header
		LDA	#$9B
		STA	T2_HDR_NAME + T2_HDR_NAME_LEN
		JSR	DISPHDR

		;load body
		LDA	#$FF
		JSR	LD_T2_BLK
		BCC	GLD_ERR

		;set casini
		LDA	T2_HDR_RUNLO
		STA	CASINI
		LDA	T2_HDR_RUNHI
		STA	CASINI+1
		JMP	LD_DONE

DOBEEP		LDA	#$1E
		STA	POT0
		LDA	#$AE
		STA	POT1
		LDA	#$0A
		JSR	DOWAIT
		LDA	#$00
		STA	POT0
		STA	POT1
		LDA	$E425
		PHA
		LDA	$E424
		PHA
		RTS

DISPHDR		LDA	#$7D
		STA	<( TU_HDR_NAME - 1 )
		LDA	#< (TU_HDR_NAME - 1)
		LDY	#> (TU_HDR_NAME - 1)
		JSR	DISPMSG
		LDA	#$32

DOWAIT		ADC	RTCLOK+2
STILLWAIT	CMP	RTCLOK+2
		BNE	STILLWAIT
		RTS

DISPERR		LDA	#<MSG_ERR
		LDY	#>MSG_ERR

DISPMSG		LDX	#$00
		STA	B0ICBAL
		STY	B0ICBAH
		LDA	#$09
		STA	B0ICCOM
		LDA	#$FF
		STA	B0ICBLL
		JMP	CIOV

LD_TU_BLK	STA	VAR36
		JSR	SETALL
		PHP
L15A2		JSR	L1692
L15A5		LDY	VAR39
		JSR	L1697
		BCC	L15A2
		CPY	VAR3A
		BCS	L15A5
		JSR	L1697
		BCC	L15FB
		LDY	VAR38
		JMP	L15D6
L15BA		PLP
		BNE	L15C5
		LDA	VAR36
		EOR	VAR3C
		BNE	L15FC
		BEQ	L15D1
L15C5		LDY	#$00
		LDA	VAR3C
		STA	(BUFRLO),Y
		INC	BUFRLO
		BNE	L15D1
		INC	BUFRHI
L15D1		LDY	VAR38
		INY
		INY
		PHP
L15D6		LDA	#$01
		STA	VAR3C
L15DA		JSR	L1692
		BCC	L15FB
		CPY	VAR39
		ROL	VAR3C
		LDY	VAR38
		BCC	L15DA
		LDA	VAR31
		EOR	VAR3C
		STA	VAR31
		LDA	BUFRLO
		CMP	BFENLO
		LDA	BUFRHI
		SBC	BFENHI
		BCC	L15BA
		LDA	#$00
		CMP	VAR31
L15FB		PLA

L15FC		LDA	#$40
		STA	NMIEN
		STA	IRQST
		RTS

LD_T2_BLK	STA	VAR36
		JSR	SETALL
		PHP
		LDA	#$B0
		STA	VAR38
		LDA	#$D6
		STA	VAR39
		JSR	L1692
		BCC	L15FB
		LDY	#$00
		JSR	L1692
		BCC	L15FB
L161F		LDY	#$C8
		JSR	L1697
		BCC	L15FB
		CPY	#$D7
		BCS	L161F
		JSR	L1697
		BCC	L15FB
		LDY	#$B0
		JMP	L15D6

SETALL		LDY	#$00
		STY	VAR30
		STY	VAR31
		STY	NMIEN
		STY	DMACTL
		STY	IRQST
		CLC
		RTS

L1645		JSR	L1692
		BCC	L1645
		LDA	#$03
		STA	VAR37
L164E		LDY	#$00
		STY	VAR40
		LDX	#$03
L1654		JSR	L1692
		BCC	L1645
		DEX
		BNE	L1654
		TYA
		LSR
		PHA
		EOR	#$FF
		STA	VAR38
		PLA
		LSR
		PHA
		EOR	#$FF
		STA	VAR39
		PLA
		LSR
		EOR	#$FF
		STA	VAR3A
		LDY	#$00
		JSR	L1697
		BCC	L1645
L1677		LDY	VAR38
		JSR	L1692
		BCC	L1645
		CPY	VAR39
		BCC	L1645
		INC	VAR40
		BNE	L1677
		DEC	VAR37
		BPL	L164E
		LDY	#$00
		JSR	L1697
		BCC	L1645
		RTS

L1692		JSR	L1697
		BCC	L16B4
L1697		LDA	RANDOM
		AND	#$E4
		ORA	VAR30
		LSR
		AND	VAR37
		STA	COLBK
L16A4		INY
		BEQ	L16B4
		LDA	SKSTAT
		AND	#$10
		CMP	VAR30
		BEQ	L16A4
		STA	VAR30
		SEC
		RTS
L16B4		CLC
		RTS

MSG_HDR
.BYTE "  Tzv.Universal TURBO (c)1988 RICO", $9B
MSG_ERR
.BYTE "Load Error - Try again", $9B

		.BYTE $00
		.BYTE $00
		.BYTE $00
		.BYTE $00
		.BYTE $00
		.BYTE $00
		.BYTE $00
		.BYTE $00
		.BYTE $00
		.BYTE $00
		.BYTE $00
		.BYTE $00
		.BYTE $00
		.BYTE $00
		.BYTE $00

* = * + BLK_LDRL_DIFF

BLK_END = *

.WORD $02E0
.WORD $02E1
.WORD RELOC

