;:sys36864
	;.opt oo
base	=2379
	*= $c000 	; base
ga	=186
stp	=254
	jmp run
t1	.byte "\x93\x05\x11n-h-link v1.0 \x99(c) nikolaus heusler 11.93\x11"
	.byte "dieser linker verbindet ein basicpro-"
	.byt 13
	.byte "gramm mit einem zeichensatz und mehreren"
	.byte "maschinenprogrammen bzw. datenfiles so,"
	brk
t2	.byte " dass sich ein einziges programm ergibt,"
	.byte " das mit run gestartet werden kann."
	.byt 13
	.byte "\x11n-h-link arbeitet mit geraet #\x05"
	brk
fload	ldy #>820
	jsr $ffbd
	lda #2
	ldy #0
	ldx ga
	jsr $ffba
	jsr $ffc0
ds	ldx #15
	jsr $ffc6
	jsr 65508
	cmp #"0"
	beq dok
	pha
	jsr primm
	.byt 13
	.byte "\x96achtung: "
	brk
	pla
	jsr 65490
dl1	jsr 65508
	jsr $ffd2
	cmp #13
	bne dl1
	jmp err
dok	jsr 65508
	cmp #13
	bne dok
	jmp $ffcc
hexout	pha
	lsr
	lsr
	lsr
	lsr
	jsr hex1
	pla
hex1	and #15
	tax
	lda hext,x
	jmp $ffd2
hext	.byte "0123456789abcdef"
primm	pla
	sta 251
	pla
	sta 252
pr1	inc 251
	bne pr2
	inc 252
pr2	ldy #0
	lda (251),y
	beq pr3
	jsr $ffd2
	bcc pr1
pr3	lda 252
	pha
	lda 251
	pha
	rts
clo2	jsr $ffcc
	lda #2
	jsr $ffc3
	jmp ds
in2	ldx #2
	jmp $ffc6
run	cli
	tsx
	stx stp
	jsr 65409
	lda #0
	sta 53280
	sta 53281
	lda ga
	cmp #8
	bcs ad
	lda #8
	sta ga
ad	lda #<t1
	ldy #>t1
	jsr $ab1e
	lda #<t2
	ldy #>t2
	jsr $ab1e
	ldx ga
	lda #0
	jsr $bdcd
	ldx ga
	lda #15
	tay
	jsr $ffba
	lda #0
	jsr $ffbd
	jsr $ffc0
	jsr primm
	.byt 13
	.byte "\x11\x99basicprogramm-name? \x05"
	brk
	ldx #0
l1	jsr $ffcf
	cmp #13
	beq l2
	sta 820,x
	inx
	bne l1
l2	jsr $aad7
	txa
	bne l3
err	jsr $ffcc
	ldx stp
	txs
	jsr primm
	.byt 13
	.byte "\x96fehler - programm abgebrochen.\x05"
	.byt 13,0
	lda #2
	jsr $ffc3
	lda #15
	jsr $ffc3
	jmp fini
l3	ldx #<820
	jsr fload
	lda #<puff
	ldy #>puff
	sta 2
	sty 3
	jsr in2
	jsr primm
	.byt 13
	.byte "\x99startadresse original: $\x05"
	brk
	jsr 65508
	pha
	jsr 65508
	jsr hexout
	pla
	jsr hexout
	lda #236
	sta 2144
	jsr primm
	.byt 13
	.byte "\x99\x11lade basicprogramm"
	.byt 13,0
l4	lda 144
	bne l5
	jsr 65508
	ldy #0
	sta (2),y
	inc 2
	bne l4
	inc 3
	bne l4
l5	jsr clo2
	jsr primm
	.byte "\x11falls kein neuer zeichensatz erwuenscht,"
	.byte "bitte stern '*' eingeben!"
	.byt 13
	.byte "\x11zeichensatz-name? \x05*\x9d"
	brk
	ldx #0
	stx 2158
l6	jsr $ffcf
	cmp #13
	beq l7
	sta 821,x
	inx
	bne l6
l7	jsr $aad7
	txa
	bne l8
	jmp err
l8	stx 820
	lda 821
	cmp #"*"
	bne font
	sta 2158
	jmp nofont
font	lda 2
	sec
	sbc #<diff
	tay
	lda 3
	sbc #>diff
	tax
	sty 2162
	sty 2168
	sty 2174
	sty 2180
	sty 2186
	sty 2192
	sty 2198
	sty 2204
	stx 2163
	inx
	stx 2169
	inx
	stx 2175
	inx
	stx 2181
	inx
	stx 2187
	inx
	stx 2193
	inx
	stx 2199
	inx
	stx 2205
	jsr primm
	.byte "\x99\x11lade zeichensatz"
	.byt 13,0
	lda 820
	ldx #<821
	jsr fload
	jsr in2
	jsr 65508
	jsr 65508
la	lda 144
	bne l9
	jsr 65508
	ldy #0
	sta (2),y
	inc 2
	bne la
	inc 3
	bne la
l9	jsr clo2
nofont	lda 2
	sec
	sbc #<diff
	sta 2228
	lda 3
	sbc #>diff
	sta 2230
	jsr primm
	.byt 13
	.byte "\x99jetzt werden die datenfiles (beispiel:"
	.byt 13
	.byte "maschinenprogramm) angegeben, die in"
	.byt 13
	.byte "das komplett-file gelinkt werden sollen."
	.byte "\x11einzeldateien codiert speichern? \x05j/n\x9d\x9d\x9d"
	brk
jn	jsr 65508
	cmp #"j"
	beq ja
	cmp #"n"
	bne jn
ja	jsr 65490
	ldx #0
	stx 2279
	cmp #"n"
	beq nein
	lda #70
	sta 2279
nein	jsr primm
	.byte "  "
	.byt 13,0
	lda #1
	sta 6
n1	jsr primm
	.byt 13
	.byte "\x99bitte dateinamen nr. \x05"
	brk
	ldx 6
	lda #0
	jsr $bdcd
	inc 6
	jsr primm
	.byte " \x99eingeben!"
	.byt 13
	.byte "wenn fertig, nur stern '*' eingeben!"
	.byt 13
	.byte "\x11dateiname? \x05*\x9d"
	brk
	ldx #0
n2	jsr $ffcf
	cmp #13
	beq n3
	sta 820,x
	inx
	bne n2
n3	jsr $aad7
	txa
	bne n4
	jmp err
n4	ldx 820
	cpx #"*"
	bne n9
	jmp fertig
n9	ldx #<820
	jsr fload
	jsr primm
	.byt 13
	.byte "\x99ladeadresse: $\x05"
	brk
	jsr in2
	jsr 65508
	sta 4
	jsr 65508
	sta 5
	jsr hexout
	lda 4
	jsr hexout
	lda 5
	cmp #224
	bcc bok
nobok	jsr primm
	.byt 13
	.byte "\x11\x96es sind nur adressen von $0a00 bis $df00"
	.byte "zugelassen!\x11"
	brk
	jmp err
bok	cmp #$0a
	bcc nobok
	ldy #0
	sty 247
	sty 248
	lda 5
	sta (2),y
	iny
	lda 4
	sta (2),y
	lda 2
	sta 4
	clc
	adc #4
	sta 2
	lda 3
	sta 5
	adc #0
	sta 3
lb	lda 144
	bne lc
	inc 247
	bne ld
	inc 248
ld	jsr 65508
	ldy #0
	eor 2279
	sta (2),y
	inc 2
	bne lb
	inc 3
	bne lb
lc	ldy #2
	lda 247
	sta (4),y
	iny
	lda 248
	sta (4),y
	jsr clo2
	jsr primm
	.byt 13
	.byte "\x99anzahl bytes: \x05"
	brk
	ldx 247
	lda 248
	jsr $bdcd
	jsr $aad7
	jmp n1
fertig	lda #0
	tay
	sta (2),y
	inc 2
	bne fe1
	inc 3
fe1	jsr primm
	
	.byt 13
	.byte "\x99\x11das fertige file kann nun gespeichert"
	.byt 13
	.byte "werden."
	.byt 13
	.byte "\x11gewuenschter name? \x05"
	brk
	ldx #0
fe2	jsr $ffcf
	cmp #13
	beq fe3
	sta 820,x
	inx
	bne fe2
fe3	jsr $aad7
	txa
	bne fe4
	jmp err
fe4	ldx #<820
	ldy #>820
	jsr $ffbd
	lda #2
	ldx ga
	ldy #1
	jsr $ffba
	jsr $ffc0
	jsr ds
	ldx #2
	jsr $ffc9
	lda #1
	sta 4
	jsr 65490
	lda #8
	sta 5
	jsr 65490
fe5	ldy #0
	lda (4),y
	jsr 65490
	inc 4
	bne fe6
	inc 5
fe6	lda 4
	cmp #<base
	bne fe5
	lda 5
	cmp #>base
	bne fe5
	lda #<puff
	sta 4
	lda #>puff
	sta 5
fe7	ldy #0
	lda (4),y
	jsr 65490
	inc 4
	bne fe8
	inc 5
fe8	lda 4
	cmp 2
	bne fe7
	lda 5
	cmp 3
	bne fe7
	jsr $ffcc
	lda #2
	jsr $ffc3
	jsr ds
	jsr primm
	.byt 13
	.byte "\x99vorgang beendet. alles ok."
	.byt 13,0
fini	lda #76
	sta 2144
	rts
puff	=*
diff	=puff-base
