;:sys36864
	;.opt oo
	*=52700
cint	=$ff81
ioinit	=$ff84
restor	=$ff8a
memtop	=$ff99
warm	=$a000
cia	=$dc00
stack	=$100
cursor	=$286
ierr	=$300
inmi	=$318
ibsout	=$326
vic	=$d000
ret1	=127
ret2	=223
bank	=$dd00
port	=1
strout	=$ab1e
; initialisierung
	lda ierr+1
	cmp #>direct
	beq nein
	sei
	jsr restor
	lda ierr
	sta far1+1
	sta far5+1
	lda ierr+1
	sta far1+2
	sta far5+2
	lda ibsout
	sta far2+1
	sta far6+1
	lda ibsout+1
	sta far2+2
	sta far6+2
	lda inmi
	sta far3+1
	sta far7+1
	lda inmi+1
	sta far3+2
	sta far7+2
	lda #<direct
	sta ierr
	lda #>direct
	sta ierr+1
	lda #0
	sta resto1
	sta resto2
	lda #<hi
	ldy #>hi
	jmp strout
nein	rts
; variablen
memsp	brk
mem01	.byt $37
resto1	brk
resto2	brk
memba	brk
; einschaltmeldung
hi	.byt 13
	.byte "emergency-basic v1"
	.byt 13
	.byte "(c) n. heusler 12.91"
	.byt 13,13
	.byte "\x12cbm\x1drestore\x92"
	.byt 13,0
; c64 i  - direktmodus
direct	pha
	lda #0
	sta resto1
	lda #<out
	sta ibsout
	lda #>out
	sta ibsout+1
	pla
far1	jmp 0
; c64 i  - zeichenausgabe
out	php
	sei
	pha
	lda #<int
	sta inmi
	lda #>int
	sta inmi+1
	pla
	plp
far2	jmp 0
; c64 i  - nmi
int	pha
	txa
	pha
	tya
	pha
	lda resto1
	beq nopress
nonmi	pla
	tay
	pla
	tax
	pla
far3	jmp 0
nopress	jsr taste
	cmp #ret2
	bne nonmi
	inc resto1
prell	jsr taste
	cmp #-1
	bne prell
; umschalten auf c64 ii
	lda port
	sta mem01
	lda bank
	sta memba
	lda #$30
	sta port
	lda #0
	ldy #$d0
	ldx #$28
	jsr copy
	lda #$37
	sta port
	ldy #0
save	lda $d800,y
	sta $f800,y
	lda $d900,y
	sta $f900,y
	lda $da00,y
	sta $fa00,y
	lda $db00,y
	sta $fb00,y
	lda vic,y
	sta $fc00,y
	iny
	bne save
	tsx
	stx memsp
	ldx #-1
	txs
	jsr ioinit
	jsr restor
	ldx #0
	ldy #$28
	clc
	jsr memtop
	jsr cint
	lda #<print
	sta ibsout
	lda #>print
	sta ibsout+1
	cli
	jmp (warm)
; c64 ii - direktmodus
error	pha
	lda #0
	sta resto2
	lda #<print
	sta ibsout
	lda #>print
	sta ibsout+1
	pla
far5	jmp 0
; c64 ii - zeichenausgabe
print	pha
	lda #<nmi
	sta inmi
	lda #>nmi
	sta inmi+1
	lda #<error
	sta ierr
	lda #>error
	sta ierr+1
	pla
far6	jmp 0
; c64 ii - nmi
nmi	sei
	pha
	lda resto2
	bne esc
	inc resto2
	jsr taste
	cmp #ret2
	bne esc
loslass	jsr taste
	cmp #-1
	bne loslass
; umschalten auf c64 i
	lda #$30
	sta port
	lda #$d2
	ldy #2
	ldx #$26
	jsr copy
	ldy #0
kopier	lda #$30
	sta port
	lda $d100,y
	sta stack,y
	lda vic,y
	sta !0,y
	lda #$35
	sta port
	lda $f800,y
	sta $d800,y
	lda $f900,y
	sta $d900,y
	lda $fa00,y
	sta $da00,y
	lda $fb00,y
	sta $db00,y
	iny
	bne kopier
load	lda $fc00,y
	sta vic,y
	iny
	cpy #47
	bne load
	lda vic+$11
	and #$7f
	sta vic+$11
	lda memba
	sta bank
	lda mem01
	sta port
	ldx memsp
	txs
	lda #0
	sta resto1
	pla
	tay
	pla
	tax
esc	pla
far7	jmp 0
; speicherbereich kopieren
copy	sta hier+2
	sty dort+2
	ldy #0
hier	lda !0,y
dort	sta !0,y
	iny
	bne hier
	inc hier+2
	inc dort+2
	dex
	bne hier
	rts
; liest tastatur
taste	lda #ret1
	sta cia
wait	lda cia+1
	nop
	nop
	cmp cia+1
	bne wait
	rts
