; compile command line: dasm challenge.asm -ochallenge.prg
; DASM: http://dasm-dillon.sourceforge.net
; inspired by http://www.lemon64.com/forum/viewtopic.php?t=18526

		processor 6502
		org $c800
ptr = $57

		; copy BASIC ROM
		sei
		lda #<($a000)
		sta ptr
		lda #>($a000)
		sta ptr + 1
copy1		ldy #0
copy2		lda (ptr),y
		sta (ptr),y
		iny
		bne copy2
		inc ptr + 1
		lda ptr + 1
		cmp #$c0
		bne copy1
		
		; copy patched fre function to $c000
		lda #$60
		sta ptr
		jsr ptr
get_pc		tsx
		dex
		dex
		txs
		pla
		clc
		adc #<(patched-get_pc+1)
		sta ptr
		pla
		adc #>(patched-get_pc+1)
		sta ptr + 1
		ldy #0
copy3		lda (ptr),y
		sta $c000,y
		iny
		bne copy3
		
		; patch pointer to fre function
		lda #0
		sta $a05a
		pla
		lda #$c0
		sta $a05b
		
		; enable RAM at $a000-$bfff
		lda #$36
		sta 1
		cli
		
		; skip the crash: goto 100
		lda #100
		sta $14
		lda #0
		sta $15
		jsr $a8a3
		; and jump to interpreter loop
		jmp $a7ae

patched
		rorg $c000
; jmp $c000
time_test	lda #$20
		cmp $a0
		bne time_test
		lda #$f5
		cmp $a1
		bne time_test
		lda #$80
		cmp $a2
		bne time_test
		
		; jump to original fre function
		jmp $b37d
