;:sys36864
	;.opt oo
	*= 50000
vic	=$d000
strout	=$ab1e
nmivec	=$318
nmiposs	=$dd0d
rs232nmi	=$fe72
endnmi	=$febc
qscan	=$ff9f
konf	=1
numbkey	=198
milli	=$eeb3
tmp	=166
clrchn	=$ffcc
fa	=125
close	=$ffc3
keybuf	=630
grafik	=$a000
werb1	=48573+32
werb2	=werb1+320-5
latch	=$d000
bs	=$8400
tmp2	=tmp+2
bank	=$dd00
getkey	=$f142
shift	=$28d
farbram	=$d800
rept	=650
tmp3	=247
tmp4	=249
ffa	=184
seka	=185
da	=186
namlen	=183
chkout	=65481
open	=65472
qciout	=$ffa8
buffer	=690
	jmp setup
hallo	.byt 13
	.byte "  ; universal - print mps 803 v1.2"
	.byt 13
	.byte "  ; von nikolaus heusler"
	.byt 13
	.byte "  ;     tel. 089/792940"
	.byt 13
	.byte "  ; (c) nss 020987\x11"
	brk
runflag	brk
nmiflag	brk
stackptr	brk
colmerk	brk
konfmerk	brk
keymerk	brk
tmpmerk	.word 0
tmp2merk	.word 0
counter	brk
repmerk	brk
bmerk	brk
font	brk
screen	brk
backgn	brk
expx	brk
expy	brk
snum	brk
x1	.word 0
yy	brk
xx	.word 0
hiba	brk
tmp3merk	.word 0
tmp4merk	.word 0
si	brk
sm	brk
sa	brk
x	.word 0
y	brk
data	brk
offx	brk
offy	.word 0
maske	brk
use	.word 0
flg	brk
zwis	brk
flg2	brk
xk	.word 0
yk	brk
xmerk	brk
grafflg	brk
anzahl	brk
plte	brk
xxb	.word 0
yyb	brk
stop	brk
gbit	.byt 1,2,4,8,$10,$20,$40,$80
mult	.word $0000,$0140,$0280,$03c0
	.word $0500,$0640,$0780,$08c0
	.word $0a00,$0b40,$0c80,$0dc0
	.word $0f00,$1040,$1180,$12c0
	.word $1400,$1540,$1680,$17c0
	.word $1900,$1a40,$1b80,$1cc0
	.word $1e00
acht	.byt 0,80,60
sevtab	.byt 0,0,16,27,8
mull	.byt 0,$40,$80,$c0
mulh	.byt 0,1,2,3,5,6,7,8,10,11,12,13,15,16,17,18,20,21
	.byt 22,23,25,26,27,28,30,31
werbung	=*
	.byt %01010110
	.byt %01010101
	.byt %01010101
	.byt %00000000
	.byt %00000000
	.byt %00000000
	.byt %00000000
	.byt %00000000
	.byt %01011001
	.byt %01010101
	.byt %01011001
	.byt %00000000
	.byt %00000000
	.byt %00000000
	.byt %00000000,0
	.byt %10010110
	.byt %01010101
	.byt %10010101
	.byt %00000000
	.byt %00000000,0,0
	.byt %00000000
	.byt %01110000
	.byt %00100000
	.byt %00100000
werbung2	=*
	.byt %01010101
	.byt %01110101
	.byt %00000000
	.byt %00000000
	.byt %00000000
	.byt %00000000
	.byt %00000000
	.byt %00000000
	.byt %01010001
	.byt %01010001
	.byt %00000000
	.byt %00000000
	.byt %00000000
	.byt %00000000
	.byt %00000000,0
	.byt %10010101
	.byt %01010101
	.byt %00000000
	.byt %00000000
	.byt %00000000
	.byt %00000000
	.byt %00000000
	.byt %00000000
	.byt %00100000
	.byt %00100000
setup	lda #<neunmi
	ldy #>neunmi
	sta nmivec
	sty nmivec+1
	lda #0
	sta runflag
	sta nmiflag
	sta grafflg
	sta plte
	lda #<hallo
	ldy #>hallo
	jmp strout
pause	jsr milli
	dex
	bne pause
	rts
scan	jsr qscan
	sei
	jsr getkey
	sei
	rts
rueck	rts
copy4	ldy #4
copy	sta tmp+1
	stx tmp2+1
	tya
	tax
	ldy #0
	sty tmp
	sty tmp2
	php
	sei
	lda konf
	pha
	lda #48
	sta konf
cop	lda (tmp),y
	sta (tmp2),y
	dey
	bne cop
	inc tmp+1
	inc tmp2+1
	dex
	bne cop
	pla
	sta konf
	plp
	rts
savetmp	lda tmp
	ldy tmp+1
	sta tmpmerk
	sty tmpmerk+1
	lda tmp2
	ldy tmp2+1
	sta tmp2merk
	sty tmp2merk+1
	lda tmp3
	ldy tmp3+1
	sta tmp3merk
	sty tmp3merk+1
	lda tmp4
	ldy tmp4+1
	sta tmp4merk
	sty tmp4merk+1
	rts
loadtmp	lda tmpmerk
	ldy tmpmerk+1
	sta tmp
	sty tmp+1
	lda tmp2merk
	ldy tmp2merk+1
	sta tmp2
	sty tmp2+1
	lda tmp3merk
	ldy tmp3merk+1
	sta tmp3
	sty tmp3+1
	lda tmp4merk
	ldy tmp4merk+1
	sta tmp4
	sty tmp4+1
	rts
getform	jsr scan
	cmp #"\x03"
	bne nos
	pla
	pla
endfk	dec vic+32
	jmp master
nos	cmp #"1"
	bcc getform
	cmp #"4"
	bcs getform
	sec
	sbc #"1"
	tax
	lda acht,x
	sta sevtab
	rts
ciout	jsr qciout
	sei
	rts
neunmi	sei
	pha
	txa
	pha
	tya
	pha
	lda runflag
	bne dejago
	lda nmiflag
	beq cango
	jmp endnmi
dejago	jmp dejaon
cango	inc nmiflag
	tsx
	stx stackptr
	lda #$7f
	sta nmiposs
	lda nmiposs
	bpl nors232
	jmp rs232nmi
nors232	lda konf
	sta konfmerk
	lda #55
	sta konf
	lda vic+33
	and #$f
	sta backgn
	lda rept
	sta repmerk
	lda #64
	sta rept
	lda numbkey
	sta keymerk
	ldx #15
	jsr pause
	jsr savetmp
	ldx vic+32
	stx colmerk
	lda shift
	bne start
	ldy #0
	sty tmp
	lda #>grafik
	sta tmp+1
	tya
	ldx #32
clear	sta (tmp),y
	dey
	bne clear
	inc tmp+1
	dex
	bne clear
start	inc vic+32
	lda bank
	and #3
	eor #3
	asl
	asl
	asl
	asl
	asl
	asl
	sta hiba
master	jsr scan
	beq master
	cmp #3
	bne nostop
	lda colmerk
	sta vic+32
	lda keymerk
	sta numbkey
	lda #0
	sta nmiflag
	sta runflag
	lda repmerk
	sta rept
	jsr loadtmp
	lda konfmerk
	sta konf
	ldx stackptr
	txs
	jmp endnmi
dejaon	lda #15
	jsr out
	jsr clrchn
	lda #fa
	jsr close
	sei
	lda #0
	sta runflag
	jmp endfk
nostop	cmp #136
	bne nof7
	lda #>bs
	ldx #>latch
	jsr copy4
	ldx #4
	lda #>bs
	sta tmp+1
	lda #1
clin	sta (tmp),y
	iny
	bne clin
	inc tmp+1
	dex
	bne clin
	lda bank
	pha
	lda vic+17
	pha
	lda vic+24
	pha
	lda vic+22
	pha
	lda vic+21
	pha
	lda #0
	sta vic+21
	lda #1
	sta bank
	lda #59
	sta vic+17
	lda #29
	sta vic+24
	lda #200
	sta vic+22
gky	jsr scan
	beq gky
	pla
	sta vic+21
	pla
	sta vic+22
	pla
	sta vic+24
	pla
	sta vic+17
	pla
	sta bank
	lda #>latch
	ldx #>bs
	jsr copy4
	jmp master
nof7	cmp #135
	bne nof5
	inc vic+32
	php
	sei
	lda konf
	pha
	lda #48
	sta konf
	ldy #0
	sty tmp
	lda #>grafik
	sta tmp+1
	ldx #32
inv	lda (tmp),y
	eor #-1
	sta (tmp),y
	iny
	bne inv
	inc tmp+1
	dex
	bne inv
	pla
	sta konf
	plp
	jmp endfk
nof5	cmp #139
	bne nof6
	ldx #32
	ldy #0
	sty tmp
	lda #>grafik
	sta tmp+1
	inc vic+32
	lda #8
	sta counter
	php
	sei
	lda konf
	pha
	lda #48
	sta konf
grid	lda (tmp),y
	eor #1
	sta (tmp),y
	dec counter
	bne noc
	lda #8
	sta counter
	lda (tmp),y
	eor #-2
	sta (tmp),y
noc	iny
	bne grid
	inc tmp+1
	dex
	bne grid
	pla
	sta konf
	plp
	dec vic+32
nof6	cmp #133
	beq jaf1
	jmp nof1
jaf1	inc vic+32
	lda vic+17
	and #32
	bne graphik
	jmp text
graphik	lda vic+24
	and #8
	asl
	asl
	ora hiba
	ldx #>grafik
	ldy #32
	jsr copy
eot	jmp endfk
text	lda bank
	and #3
	eor #3
	sta bmerk
	lda vic+24
	and #14
	asl
	asl
	ldx #48
	cmp #$10
	beq sonder
	cmp #$18
	bne usual
sonder	ldy bmerk
	cpy #1
	beq usual
	cpy #3
	beq usual
	ldx #51
	clc
	adc #$c0
	bne goon
usual	ora hiba
goon	sta font
	lda vic+24
	and #$f0
	lsr
	lsr
	ora hiba
	sta screen
	php
	sei
	lda konf
	pha
	stx konf
	lda #4
	sta counter
	lda #0
	sta tmp3
	sta tmp
	lda screen
	sta tmp3+1
	lda #>grafik
	sta tmp+1
loop0	lda #0
	sta tmp2
	lda font
	sta tmp2+1
	jsr allwtest
	beq nix
	lda (tmp3),y
	tax
	beq loop1
loop2	lda tmp2
	clc
	adc #8
	sta tmp2
	bcc loop4
	inc tmp2+1
loop4	dex
	bne loop2
loop1	ldy #7
loop5	lda (tmp2),y
	sta (tmp),y
	dey
	bpl loop5
nix	lda tmp
	clc
	adc #8
	sta tmp
	bcc loop7
	inc tmp+1
loop7	inc tmp3
	bne loop0
	inc tmp3+1
	dec counter
	bne loop0
	pla
	sta konf
	plp
	jmp eot
allwtest	lda tmp3
	sta tmp4
	lda tmp3+1
	and #3
	ora #>farbram
	sta tmp4+1
	ldy #0
	ldx konf
	lda #55
	sta konf
	lda (tmp4),y
	and #$f
	stx konf
	cmp backgn
	rts
nof1	cmp #134
	beq jaf3
	jmp nof3
jaf3	lda #7
	sta snum
	inc vic+32
sp0	lda vic+21
	ldx snum
	and gbit,x
	bne sp1
	jmp sp2
tobi	jmp sp2
sp1	lda vic+39,x
	and #$f
	cmp backgn
	beq tobi
	lda vic+23
	and gbit,x
	sta expy
	lda vic+29
	and gbit,x
	sta expx
	lda vic+16
	and gbit,x
	beq t
	lda #1
t	pha
	txa
	asl
	tax
	lda vic,x
	sec
	sbc #24
	sta x1
	pla
	sbc #0
	sta x1+1
	lda vic+1,x
	sec
	sbc #50
	sta yy
	lda vic+24
	and #$f0
	lsr
	lsr
	ora hiba
	clc
	adc #3
	sta tmp4+1
	lda #$f8
	sta tmp4
	ldy snum
	lda (tmp4),y
	ldx #6
	sta tmp3
	lda #0
	sta tmp3+1
mal64	asl tmp3
	rol tmp3+1
	dex
	bne mal64
	lda tmp3+1
	ora hiba
	sta tmp3+1
	lda #0
	sta si
sp3	lda #0
	sta sm
	lda x1
	sta xx
	lda x1+1
	sta xx+1
sp4	php
	sei
	lda konf
	pha
	lda #48
	sta konf
	ldy #0
	lda (tmp3),y
	sta data
	pla
	sta konf
	plp
	lda #7
	sta sa
sp5	lda data
	ldx sa
	and gbit,x
	beq sp6
	jsr qplot
sp6	inc xx
	bne sp6a
	inc xx+1
sp6a	lda expx
	beq sp6aa
	inc xx
	bne sp6aa
	inc xx+1
sp6aa	dec sa
	bpl sp5
	inc tmp3
	bne sp7
	inc tmp3+1
sp7	inc sm
	lda sm
	cmp #3
	bcc sp4
	inc yy
	lda expy
	beq sp7a
	inc yy
sp7a	inc si
	lda si
	cmp #21
	bcc sp3
sp2	dec snum
	bmi eos
	jmp sp0
eos	jmp endfk
test	dec plte
plot	ldx yy
	cpx #200
	bcs ngut
	lda xx+1
	cmp #1
	bcc okay
	beq test2
ngut	lda #0
	sta plte
	rts
test2	lda xx
	cmp #64
	bcs ngut
okay	txa
	lsr
	lsr
	lsr
	asl
	tay
	lda mult,y
	sta offy
	lda mult+1,y
	sta offy+1
	txa
	and #7
	clc
	adc offy
	sta offy
	lda xx
	and #$f8
	sta offx
	clc
	lda #0
	adc offy
	sta tmp
	lda #>grafik
	adc offy+1
	sta tmp+1
	clc
	lda tmp
	adc offx
	sta tmp
	lda tmp+1
	adc xx+1
	sta tmp+1
	php
	sei
	lda konf
	pha
	lda #48
	sta konf
	lda xx
	and #7
	eor #7
	tax
	lda gbit,x
	ldy plte
	bne tst
	ldy #0
	ora (tmp),y
	sta (tmp),y
	pla
	sta konf
	plp
	rts
tst	ldy #0
	sty plte
	and (tmp),y
	tay
	pla
	sta konf
	plp
	tya
	rts
qqplot	jsr plot
	lda expx
	beq noex
	inc xx
	bne v2
	inc xx+1
v2	jsr plot
	lda xx
	bne v2a
	dec xx+1
v2a	dec xx
noex	rts
qplot	jsr qqplot
	lda expy
	beq noex
	inc yy
	jsr qqplot
	dec yy
	rts
nof3	cmp #140
	beq print
	jmp nof8
print	inc vic+32
	jsr getform
	inc runflag
	lda #0
	sta namlen
	lda #4
	sta da
	lda #0
	sta seka
	lda #fa
	sta ffa
	jsr open
	ldx #fa
	jsr chkout
	lda #-1
	sta maske
	lda #7
	sta use
	lda #28
	sta flg
	lda #0
	sta zwis
sev1	lda #40
	sta flg2
	ldx #4
sev11	lda sevtab,x
	jsr out
	dex
	bpl sev11
	lda #0
	sta xk
	sta xk+1
sev2	lda zwis
	sta yk
	lda #0
	sta use+1
	php
	sei
	lda konf
	pha
	lda #48
	sta konf
sev3	lda xk
	ldx xk+1
	ldy yk
	jsr hposn
	ldy #0
	lda (tmp),y
	ldx use+1
	sta buffer,x
	inc yk
	inx
	stx use+1
	cpx use
	bne sev3
	pla
	sta konf
	plp
	lda #0
	ldy #7
sev4	ldx use
sev5	asl buffer,x
	rol
	dex
	bpl sev5
	and maske
	ora #128
	jsr out
	dey
	bpl sev4
	lda xk
	clc
	adc #8
	sta xk
	bcc sev4a
	inc xk+1
sev4a	dec flg2
	bne sev2
	lda #$d
	jsr out
	lda zwis
	clc
	adc #7
	sta zwis
	dec flg
	beq sev81
sev8	jmp sev1
sev81	lda #4
	cmp use
	beq sev7
	sta use
	lda #1
	sta flg
	lda #$f
	sta maske
	bne sev8
sev7	jmp dejaon
hposn	tya
	lsr
	lsr
	lsr
	asl
	tax
	lda mult+1,x
	ora #>grafik
	sta tmp+1
	txa
	and #6
	tax
	lda mult,x
	sta tmp
	tya
	and #7
	clc
	adc tmp
	sta tmp
	lda xk
	and #$f8
	clc
	adc tmp
	sta tmp
	lda tmp+1
	adc xk+1
	sta tmp+1
	rts
out	stx xmerk
	ldx grafflg
	bne graon
	cmp #8
	bne leider
	ldx #0
	stx anzahl
	stx data
	sta grafflg
leider	jsr ciout
return	ldx xmerk
ret	rts
graon	cmp #15
	bne naoff
	jsr dele
	lda #0
	sta grafflg
	lda #15
	bne leider
naoff	tax
	bmi grabi
	cmp #60
	bne no60
	lda #160
no60	pha
	jsr dele
	lda #0
	sta data
	sta anzahl
	pla
	jmp leider
grabi	cmp data
	bne neu
	inc anzahl
	bne return
	dec anzahl
neu	pha
	jsr dele
	pla
	sta data
	lda #1
	sta anzahl
	bne return
dele	cmp #13
	bne nocr
	lda data
	cmp #128
	beq ret
nocr	ldx anzahl
	beq ret
	cpx #3
	bcs lohnt
outloop	lda data
	jsr ciout
	dex
	bne outloop
	rts
lohnt	lda #26
	jsr ciout
	lda anzahl
	jsr ciout
	lda data
	jmp ciout
nof8	cmp #138
	beq frame
	jmp nof4
frame	inc vic+32
	lda #200
	sta yy
yfr	dec yy
	lda #0
	sta xx
	sta xx+1
	jsr pla3
	inc xx+1
	lda #63
	sta xx
	jsr pla4
	lda yy
	bne yfr
	dec xx+1
	lda #0
	sta xx
xfr	lda #0
	sta yy
	jsr pla1
	lda #199
	sta yy
	jsr pla2
	inc xx
	bne xxf
	inc xx+1
xxf	lda xx+1
	beq xfr
	lda xx
	cmp #64
	bcc xfr
	jmp endfk
nof4	cmp #137
	beq stext
	jmp master
stext	inc vic+32
	php
	sei
	lda konf
	pha
	lda #48
	sta konf
	ldx #26
te1	lda werbung,x
	eor werb1,x
	sta werb1,x
	dex
	bpl te1
	ldx #25
te2	lda werbung2,x
	eor werb2,x
	sta werb2,x
	dex
	bpl te2
	pla
	sta konf
	plp
	jmp endfk
pla1	inc yy
	jsr test
	dec yy
	jsr dia
	bne schluss
rein	jmp plot
pla2	dec yy
	jsr test
	inc yy
	jsr dia
	beq rein
	rts
pla3	inc xx
	jsr test
	dec xx
	jsr dia
	beq rein
	rts
pla4	dec xx
	jsr test
	inc xx
	jsr dia
	beq rein
	rts
dia	and #-1
	beq naja
schluss	rts
naja	sta stop
	dec yy
	jsr testx
	inc yy
	inc yy
	jsr testx
	dec yy
	lda stop
	rts
testx	inc xx
	bne rt1
	inc xx+1
rt1	jsr test
	ora stop
	sta stop
	sec
	lda xx
	sbc #2
	sta xx
	lda xx+1
	sbc #0
	sta xx+1
	jsr test
	ora stop
	sta stop
	inc xx
	bne schluss
	inc xx+1
	rts
