9800 a800 0000 C ... KC87PLOT.COM
http://hc-ddr.hucki.net/wiki/doku.php/z9001/grafik ... Die Basicbefehle zur Grafik-Erweiterung springen auf eine Befehlsliste außerhalb des BASIC-Bereiches: die Liste wird auf A7D6…A7FD erwartet. Auf A7D6 (dez: -22570) muss C3 (JP) stehen, sonst ist keine Erweiterung geladen und die Grafikbefehle können nicht genutzt werden. ... GRPLOT.BIN Adr. 9800-A7FF BASIC-Befehl phys. Treiber Nr. Bemerkung 0A7D6h pset 1 0A7D9h line 2 LINE kennt den BOXED-Mode BF, dieser ist aber nicht implementiert 0A7DCh circle 3 0A7DFh paint 4 PAINT (x,y)[,c[,d]] ist undokumentiert, und weder im Plotter- noch im Vollgrafiktreiber realisiert 0A7E2h label 5 0A7E5h size 6 0A7E8h zero 7 0A7EBh home 8 0A7EEh gcls 9 0A7F1h scale - ist komplett im log. BASIC-Treiber implementiert, es gibt keinen korrespondierenden Aufruf im phys. Treiber 0A7F4h screen - ist komplett im log. BASIC-Treiber implementiert, es gibt keinen korrespondierenden Aufruf im phys. Treiber 0A7F7h point 10 POINT liefert für Plotter immer 0 0A7FAh xpos 11 0A7FDh ypos 12 http://hc-ddr.hucki.net/wiki/lib/exe/fetch.php/z9001/grafik.zip
; File Name   :	GRPLOT.rom
; Format      :	Binary File
; Base Address:	0000h Range: 9800h - A800h Loaded length: 1000h


	cpu	Z80

BASVER 	EQU	'OS'	; fr Z9001-OS (original)
;BASVER 	EQU	'CPM'	; Ampassung fr CPM


; lokale Speicher
unk_234		equ	0234h
unk_239		equ	0239h
unk_23B		equ	023Bh
unk_23D		equ	023Dh
unk_23F		equ	023Fh
unk_241		equ	0241h	; 2 Byte x-Offset	(?)
unk_243		equ	0243h	; 2 Byte y-Offset	(?)
unk_245		equ	0245h	; 2 Byte x-Position	(?)
unk_247		equ	0247h	; 2 Byte y-Position	(?)
unk_249		equ	0249h
unk_24A		equ	024Ah
unk_24B		equ	024Bh
unk_24C		equ	024Ch
unk_24D		equ	024Dh
unk_24E		equ	024Eh
unk_24F		equ	024Fh
unk_250		equ	0250h
unk_252		equ	0252h
unk_254		equ	0254h
unk_256		equ	0256h
unk_258		equ	0258h
unk_25A		equ	025Ah
unk_25C		equ	025Ch
unk_25E		equ	025Eh
unk_260		equ	0260h
unk_261		equ	0261h
unk_262		equ	0262h
unk_263		equ	0263h
unk_264		equ	0264h
unk_265		equ	0265h
unk_266		equ	0266h
unk_267		equ	0267h
unk_268		equ	0268h
unk_26A		equ	026Ah
unk_26D		equ	026Dh
unk_273		equ	0273h
unk_278		equ	0278h
unk_27B		equ	027Bh
unk_27C		equ	027Ch
unk_27D		equ	027Dh	; SCALE x-Faktor
unk_27F		equ	027Fh
unk_281		equ	0281h	; Scale y-Faktor
unk_283		equ	0283h
unk_285		equ	0285h
unk_286		equ	0286h
unk_287		equ	0287h
unk_288		equ	0288h
unk_289		equ	0289h
unk_28A		equ	028Ah
unk_28B		equ	028Bh
unk_28D		equ	028Dh
unk_28E		equ	028Eh
unk_28F		equ	028Fh
unk_291		equ	0291h
unk_292		equ	0292h
unk_293		equ	0293h
unk_296		equ	0296h
unk_297		equ	0297h
unk_29A		equ	029Ah
unk_29B		equ	029Bh


	IF BASVER='OS'

; Betriebssystem
SYSBDS		equ	0005h 
atrib		equ	0027h		; aktuelles Farbattribut
PRNST		equ	0F3E2h		; BIOS PRNST

;DATEN AUS BASIC KERN

WINJP		equ	035Ah
WRA1		equ	03E5h		; ARITHMETIKREGISTER 1

;ADRESSEN AUS BASIC KERN

CPREG		equ	0C689h
IOTEST		equ	0C697h
unk_C69C	equ	IOTEST + 5
FOR1		equ	0C7F2h
unk_C806	equ	FOR1 + 14h
TCHAR		EQU	0C8BDh
TCHAR1		equ	0C8BEh
CPCOMM		equ	0C8D6h
EPRVL4		equ	0C96Ch
EPRVL3		equ	0C96Fh
SNALY		equ	0CD3Ah
FRE3		equ	0D0B1h
LEN1		equ	0D330h
ARGVL1		equ	0D421h
ADD2		equ	0D461h
ADD3		equ	0D466h
ADD5		equ	0D46Fh
MUL1		equ	0D59Ah
DIV1		equ	0D5F5h
OPARST		equ	0D6C8h
OPKOP		equ	0D6DDh
OPKOP1		equ	0D6E0h
OPLAD		equ	0D6EEh
OPTRAN		equ	0D6F7h
SQR		equ	0D91Fh
COS		equ	0DA70h
SIN		equ	0DA76h
COSL		equ	0DABAh

;ADRESSEN AUS BASIC ERWEITERUNG

err1		equ	0E144H
err2		equ	0E14BH

	ELSEIF BASVER='CPM'

; Betriebssystem
SYSBDS		equ	0F314h		; entspricht call 5 des Z9001-Systems
atrib		equ	0027h		; aktuelles Farbattribut
PRNST		equ	0F3E2h		; BIOS PRNST

;DATEN AUS BASIC KERN

WINJP		equ	2B5AH
WRA1		equ	2BE5H		; ARITHMETIKREGISTER 1

;ADRESSEN AUS BASIC KERN

CPREG		equ	0098Ch
IOTEST		equ	0099Ah
unk_C69C	equ	IOTEST + 5
FOR1		equ	00AF5h
unk_C806	equ	FOR1 + 14h
TCHAR		EQU	00BC0h
TCHAR1		equ	00BC1h
CPCOMM		equ	00BD9h
EPRVL4		equ	00C6Ch
EPRVL3		equ	00C6Fh
SNALY		equ	0103Ah
FRE3		equ	013B1h
LEN1		equ	01630h
ARGVL1		equ	01721h
ADD2		equ	01761h
ADD3		equ	01766h
ADD5		equ	0176Fh
MUL1		equ	0189Ah
DIV1		equ	018F5h
OPARST		equ	019C8h
OPKOP		equ	019DDh
OPKOP1		equ	019E0h
OPLAD		equ	019EEh
OPTRAN		equ	019F7h
SQR		equ	01C1Fh
COS		equ	01D70h
SIN		equ	01D76h
COSL		equ	01DBAh

;ADRESSEN AUS BASIC ERWEITERUNG

err1		equ	02441H
err2		equ	02448H
	
	ENDIF

;-----------------------------------------------------------------------------
; physischer Treiber
;-----------------------------------------------------------------------------

		org 9800h

plsv:		ld	b, 0		; Plotter-Sprungverteiler
		dec	c
		push	hl
		ld	hl, plsvret
		push	hl
		ld	a, (WINJP)
		bit	0, a
		jr	nz, plsv1
		ld	hl, plsvtab1
		jr	plsv2
plsv1:		ld	hl, plsvtab2
plsv2:		add	hl, bc
		add	hl, bc
		ld	a, (hl)
		inc	hl
		ld	h, (hl)
		ld	l, a
		jp	(hl)
;
plsvret:	pop	hl
		ret

; Sprungverteiler fr SCREEN 0 (Vollgrafik)
plsvtab1:	dw locret_A32B
		dw locret_A32B
		dw locret_A32B
		dw locret_A32B
		dw locret_A32B
		dw locret_A32B
		dw locret_A32B
		dw locret_A32B
		dw locret_A32B
		dw locret_A32B
		dw locret_A32B
		dw locret_A32B

; Sprungverteiler fr SCREEN 1 (PLOTTER)
plsvtab2:	dw pl_pset
		dw pl_line
		dw pl_circle
		dw pl_paint		; pl_paint ist nicht implementiert
		dw pl_label
		dw pl_size
		dw pl_zero
		dw pl_home
		dw pl_gcls
		dw pl_point
		dw pl_xpos
		dw pl_ypos

;-----------------------------------------------------------------------------
; 
;-----------------------------------------------------------------------------

pl_pset:	ex	de, hl
		ld	a, (hl)
		dec	a
		inc	hl
		call	pl_pset2
		ld	a, (hl)
		jr	z, pl_pset1
		and	a
		jp	z, sub_9B2D
		jp	loc_9B49
pl_pset1:	and	a
		jp	z, sub_9ACF
		jp	loc_9B28

pl_pset2:	ld	e, (hl)
		inc	hl
		ld	d, (hl)
		inc	hl
		ld	c, (hl)
		inc	hl
		ld	b, (hl)
		inc	hl
		ret

;-----------------------------------------------------------------------------
; 
;-----------------------------------------------------------------------------

pl_line:	push	de
		pop	ix
		ld	a, (ix+0)
		and	a
		push	ix
		pop	hl
		inc	hl
		jr	z, pl_line1
		call	pl_pset2
		dec	a
		jr	z, pl_line2
		call	sub_9B2D
pl_line1:	ld	hl, (unk_245)
		ld	de, (unk_241)
		and	a
		sbc	hl, de
		ld	(ix+1),	l
		ld	(ix+2),	h
		ld	hl, (unk_247)
		ld	de, (unk_243)
		and	a
		sbc	hl, de
		ld	(ix+3),	l
		ld	(ix+4),	h
		jr	pl_line3
pl_line2:	call	sub_9ACF
pl_line3:	ld	a, (ix+5)
		dec	a
		jr	z, pl_line4
		ld	hl, (unk_245)
		ld	de, (unk_241)
		and	a
		sbc	hl, de
		ld	e, (ix+6)
		ld	d, (ix+7)
		add	hl, de
		ld	(ix+6),	l
		ld	(ix+7),	h
		ld	hl, (unk_247)
		ld	bc, (unk_243)
		and	a
		sbc	hl, bc
		ld	c, (ix+8)
		ld	b, (ix+9)
		add	hl, bc
		ld	(ix+8),	l
		ld	(ix+9),	h
pl_line4:	ld	a, (ix+0Bh)
		and	a
		ld	b, (ix+0Ah)
		jr	nz, pl_line5
		ld	a, b
		and	a
		jr	z, pl_line6
		call	pl_line7
		jp	sub_9B23
pl_line5:	ld	a, b
		and	a
		jr	z, pl_line6
		ld	e, (ix+6)
		ld	d, (ix+7)
		push	de
		ld	c, (ix+3)
		ld	b, (ix+4)
		call	sub_9B23
		pop	de
		ld	c, (ix+8)
		ld	b, (ix+9)
		push	bc
		call	sub_9B23
		pop	bc
		ld	e, (ix+1)
		ld	d, (ix+2)
		push	de
		call	sub_9B23
		pop	de
		ld	c, (ix+3)
		ld	b, (ix+4)
		call	sub_9B23
pl_line6:	call	pl_line7
		jr	pl_home1
pl_line7:	ld	e, (ix+6)
		ld	d, (ix+7)
		ld	c, (ix+8)
		ld	b, (ix+9)
		ret

;-----------------------------------------------------------------------------
; 
;-----------------------------------------------------------------------------

pl_zero:	ex	de, hl
		ld	a, (hl)
		dec	a
		inc	hl
		call	pl_pset2
		jr	z, pl_zero1
		ld	hl, (unk_241)
		add	hl, de
		ld	(unk_241), hl
		ld	hl, (unk_243)
		add	hl, bc
		ld	(unk_243), hl
		ret
pl_zero1:	ld	(unk_241), de
		ld	(unk_243), bc
		ret

;-----------------------------------------------------------------------------
; 
;-----------------------------------------------------------------------------

sub_995A:	ld	bc, 0
		ld	d, b
		ld	e, c
		ret

pl_gcls:	call	sub_995A
		call	pl_zero1

;-----------------------------------------------------------------------------
; 
;-----------------------------------------------------------------------------

pl_home:	call	sub_995A
pl_home1:	jp	sub_9ACF

;-----------------------------------------------------------------------------
; 
;-----------------------------------------------------------------------------

pl_paint:	ret

;-----------------------------------------------------------------------------
; 
;-----------------------------------------------------------------------------

pl_circle:	ex	de, hl
		ld	a, (hl)
		dec	a
		push	af
		inc	hl
		call	pl_pset2
		ld	hl, (unk_247)
		jr	nz, pl_circle1
		ld	hl, 0
pl_circle1:	add	hl, bc
		ld	(unk_288), hl
		pop	af
		push	hl
		ld	hl, (unk_245)
		jr	nz, pl_circle2
		ld	hl, 0
pl_circle2:	add	hl, de
		ld	(unk_286), hl
		ex	de, hl
		pop	bc
		ld	a, (unk_28E)
		or	a
		jp	z, sub_9ACF
		ld	hl, unk_28A
		call	OPKOP
		call	SQR
		ld	bc, 8240h
		ld	de, 0
		call	DIV1
		ld	hl, unk_29B
		call	OPTRAN
		xor	a
		ld	(unk_285), a
		inc	a
		ld	c, a
		ld	hl, unk_28F
		call	loc_A2E1
		push	de
		ld	c, 80h ; ''
		ld	hl, unk_293
		call	loc_A2E1
		pop	hl
		xor	a
		ex	de, hl
		call	CPREG
		jr	nc, pl_circle3
		ld	hl, unk_293
		push	hl
		call	OPKOP
		ld	bc, 8349h
		ld	de, 0FDBh
		call	ADD5
		pop	hl
		call	OPTRAN
pl_circle3:	call	sub_9A5A
		push	bc
		push	de
		ld	a, (unk_285)
		rra
		jr	nc, pl_circle4
		ld	bc, (unk_288)
		ld	de, (unk_286)
		call	sub_9ACF
		pop	de
		pop	bc
		call	sub_9B23
		jr	pl_circle5
pl_circle4:	pop	de
		pop	bc
		call	sub_9ACF
pl_circle5:	ld	hl, unk_28F
		call	OPKOP
		ld	hl, unk_29B
		call	OPLAD
		call	ADD5
		ld	hl, unk_293
		call	OPLAD
		ld	hl, WRA1+3
		ld	a, b
		cp	(hl)
		jr	nz, pl_circle6
		dec	hl
		ld	a, c
		cp	(hl)
		jr	nz, pl_circle6
		dec	hl
		ld	a, d
		cp	(hl)
		jr	nz, pl_circle6
		dec	hl
		ld	a, e
		cp	(hl)
pl_circle6:	push	af
		jr	nc, pl_circle7
		call	OPKOP1
pl_circle7:	ld	hl, unk_28F
		call	OPTRAN
		call	sub_9A5A
		call	sub_9B23
		pop	af
		jr	z, pl_circle8
		jr	nc, pl_circle5
pl_circle8:	ld	a, (unk_285)
		rla
		ld	bc, (unk_288)
		ld	de, (unk_286)
		jr	nc, pl_circle9
		call	sub_9B23
		jr	pl_circle10
pl_circle9:	call	sub_9ACF
pl_circle10:	ret

sub_9A5A:	ld	hl, unk_28F
		call	OPKOP
		call	SIN
		ld	hl, unk_28A
		call	OPLAD
		call	MUL1
		ld	a, (unk_29A)
		cp	81h ; ''
		push	af
		jr	nc, loc_9A7D
		ld	hl, unk_297
		call	OPLAD
		call	MUL1
loc_9A7D:	call	EPRVL3
		ld	hl, (unk_288)
		add	hl, de
		ex	(sp), hl
		push	hl
		ld	hl, unk_28F
		call	OPKOP
		call	COS
		ld	hl, unk_28A
		call	OPLAD
		call	MUL1
		pop	af
		jr	c, loc_9AA9
		call	OPARST
		ld	hl, unk_297
		call	OPKOP
		pop	bc
		pop	de
		call	DIV1
loc_9AA9:	call	EPRVL3
		ld	hl, (unk_286)
		add	hl, de
		ex	de, hl
		pop	bc
		ret

;-----------------------------------------------------------------------------
; 
;-----------------------------------------------------------------------------

pl_xpos:	ld	hl, (unk_245)
		ld	de, (unk_241)
pl_xpos1:	and	a
		sbc	hl, de
		ld	b, l
		ld	a, h
pl_xpos2:	jp	FRE3

;-----------------------------------------------------------------------------
; 
;-----------------------------------------------------------------------------

pl_ypos:	ld	hl, (unk_247)
		ld	de, (unk_243)
		jr	pl_xpos1

;-----------------------------------------------------------------------------
; 
;-----------------------------------------------------------------------------

pl_point:	xor	a
		ld	b, a
		jr	pl_xpos2

sub_9ACF:	ld	a, 0
		ld	l, a
		ld	h, a
loc_9AD3:	push	hl
		call	sub_9F01
		pop	hl
		ld	(unk_24C), hl
		ld	hl, (unk_241)
		add	hl, de
		ld	(unk_250), hl
		ld	hl, (unk_243)
loc_9AE5:	add	hl, bc
		ld	(unk_252), hl
		xor	a
		ld	(unk_254), a
		ld	hl, unk_250
		call	sub_9CF6
loc_9AF3:	ld	a, (unk_254)
		and	a
		jr	nz, loc_9B05
		ld	a, (unk_24C)
		and	a
		ret	z
		call	sub_9EE7
		xor	a
		jp	sub_9EE7

loc_9B05:	ld	de, 5958h	; "YX"
		cp	3
		jr	z, loc_9B12
		ld	e, 20h ; ' '	; "Y "
		rrca
		jr	nc, loc_9B12
		dec	d		; "X "
loc_9B12:	ld	(unk_234), de
		ld	de, unk_234
		call	PRNST		; BIOS PRNST
		ld	de, aOutOfRange	; " OUT OF RANGE\r\n"
		call	PRNST		; BIOS PRNST
		ret

sub_9B23:	call	sub_9B4E
		jr	loc_9AD3

loc_9B28:	ld	hl, 80h	; ''
		jr	loc_9AD3

sub_9B2D:	ld	hl, 0
loc_9B30:	push	hl
		call	sub_9F01
		pop	hl
		ld	(unk_24C), hl
		ld	hl, (unk_245)
		add	hl, de
		ld	(unk_250), hl
		ld	hl, (unk_247)
		jr	loc_9AE5

unk_xxx1:	call	sub_9B4E
		jr	loc_9B30

loc_9B49:	ld	hl, 80h	; ''
		jr	loc_9B30

sub_9B4E:	call	sub_9F01
		ld	hl, (unk_24A)
		ld	l, 0
		ret

;-----------------------------------------------------------------------------
; 
;-----------------------------------------------------------------------------

pl_size:	call	sub_9F01
		ex	de, hl
		ld	bc, 8
		ld	de, unk_239
		ldir
		ld	a, (hl)
		ld	(unk_249), a
		ret

;-----------------------------------------------------------------------------
; 
;-----------------------------------------------------------------------------

pl_label:	ex	de, hl
		ld	a, (hl)
		inc	hl
		inc	hl
		ld	e, (hl)
		inc	hl
		ld	d, (hl)
		inc	a
		push	af
		push	de
		call	sub_9F01
		ld	hl, 0
		ld	(unk_24C), hl
		ld	hl, (unk_245)
		ld	(unk_256), hl
		ld	(unk_25A), hl
		ld	hl, (unk_247)
		ld	(unk_258), hl
		ld	(unk_25C), hl
pl_label1:	pop	hl
		pop	de
		dec	d
		jp	z, loc_9CED
		ld	a, (hl)
		push	de
		push	hl
		cp	0Dh
		jp	z, pl_label17
		cp	18h
		jr	c, pl_label2
		cp	80h ; ''
		jr	c, pl_label3
pl_label2:	ld	a, 20h ; ' '
pl_label3:	sub	10h
		ld	hl, labeltab
		ld	b, 0
		ld	d, a
pl_label4:	ld	a, (hl)
		and	8Fh ; ''
		inc	a
		rlca
		sra	a
		dec	d
		jr	z, pl_label6
		jr	nc, pl_label5
		inc	hl
pl_label5:	ld	c, a
		add	hl, bc
		jr	pl_label4
pl_label6:	ld	e, b
		jr	nc, pl_label7
		inc	e
pl_label7:	ld	d, a
		ex	de, hl
		ld	(unk_265), hl
		pop	hl
		push	hl
		ld	a, (hl)
		cp	18h
		jr	nz, pl_label8
		inc	hl
		ld	a, (hl)
		ld	c, 3
		ld	hl, umlauttab
		cpir
pl_label8:	ld	a, (de)
		push	de
		jr	nz, pl_label9
		or	50h ; 'P'
pl_label9:	ld	d, b
		ld	e, b
		rlca
		rlca
		jr	nc, pl_label10
		ld	d, 0FCh	; ''
pl_label10:	rlca
		jr	nc, pl_label11
		ld	e, 0FDh	; ''
pl_label11:	ld	hl, unk_249
		and	(hl)
		rlca
		jr	nc, pl_label12
		dec	e
pl_label12:	ex	de, hl
		ld	(unk_263), hl
pl_label13:	ld	hl, unk_266
		dec	(hl)
		pop	hl
		inc	hl
		jr	z, pl_label14
		push	hl
		ld	a, (hl)
		push	af
		rlca
		rlca
		rlca
		rlca
		and	7
		ld	hl, unk_263
		add	a, (hl)
		call	sub_9CB4
		pop	af
		push	af
		and	0Fh
		ld	hl, unk_264
		add	a, (hl)
		call	sub_9CD0
		ld	hl, (unk_258)
		add	hl, de
		ld	(unk_252), hl
		ld	hl, (unk_256)
		pop	de
		add	hl, de
		ld	(unk_250), hl
		pop	af
		ld	hl, unk_24C
		or	(hl)
		dec	hl
		and	(hl)
		ld	(unk_24D), a
		ld	hl, unk_250
		call	sub_9CF6
		ld	a, (unk_24B)
		call	sub_9EE7
		xor	a
		ld	(unk_24C), a
		jr	pl_label13
pl_label14:	ld	a, (unk_265)
		and	a
		jr	z, pl_label15
		ld	a, (hl)
		and	80h ; ''
		ld	(unk_24C), a
		ld	a, (hl)
		and	7Fh ; ''
		jp	pl_label3
pl_label15:	xor	a
		call	sub_9EE7
		pop	hl
		push	hl
		ld	a, (hl)
		cp	20h ; ' '
		jr	c, pl_label16
		ld	a, (unk_263)
		add	a, a
		add	a, 8
		call	sub_9CB4
		ld	hl, (unk_256)
		add	hl, bc
		ld	(unk_256), hl
		ld	hl, (unk_258)
		add	hl, de
		ld	(unk_258), hl

pl_label16:	pop	hl
		inc	hl
		push	hl
		ld	c, 0Bh		;CSTS, Abfrage Status CONST
		call	SYSBDS
		cp	3
		jp	nz, pl_label1
		ld	hl, unk_256
		call	sub_9CF6
		ld	a, 0E2h	; ''
		out	(0B8h),	a
		jp	unk_C806	; ??? mittenrein in einen Befehl von FOR ???
pl_label17:	ld	a, (unk_24F)
		ld	de, 0
		ld	b, d
		ld	c, d
		call	sub_9CD0
		ld	hl, (unk_25C)
		add	hl, de
		ld	(unk_258), hl
		ld	(unk_25C), hl
		pop	de
		ld	hl, (unk_25A)
		add	hl, de
		ld	(unk_256), hl
		ld	(unk_25A), hl
		jr	pl_label16

sub_9CB4:	push	af
		ld	hl, (unk_239)
		call	loc_9E95
		ld	a, 6
		call	sub_9E6A
		ld	b, h
		ld	c, l
		pop	af
		ld	hl, (unk_23B)
		call	loc_9E95
		ld	a, 6
		call	sub_9E6A
		ex	de, hl
		ret

sub_9CD0:	push	af
		ld	hl, (unk_23F)
		call	loc_9E95
		ld	a, 0Ah
		call	sub_9E6A
		add	hl, de
		ex	de, hl
		pop	af
		ld	hl, (unk_23D)
		call	loc_9E95
		ld	a, 0Ah
		call	sub_9E6A
		add	hl, bc
		ex	(sp), hl
		jp	(hl)

loc_9CED:	ld	hl, unk_256
		call	sub_9CF6
		jp	loc_9AF3

sub_9CF6:	push	hl
		call	sub_9F01
		ld	de, unk_26A
		ld	hl, loc_9F85
		ld	bc, 11h
		ldir
		ld	a, 3Dh ; '='
		ld	(unk_27B), a
		ld	de, (unk_245)
		pop	hl
		push	hl
		ld	bc, 0F60Ah
		call	sub_9E26
		ld	(unk_268), hl
		ex	de, hl
		ex	(sp), hl
		push	hl
		ld	hl, unk_254
		or	(hl)
		ld	(hl), a
		ld	h, b
		ld	a, c
		xor	2
		ld	l, a
		ld	(unk_26D), hl
		ld	de, (unk_247)
		pop	hl
		inc	hl
		inc	hl
		ld	bc, 0F8F8h
		call	sub_9E26
		ld	(unk_273), hl
		rlca
		ld	hl, unk_254
		or	(hl)
		ld	(hl), a
		ld	(unk_278), bc
		call	sub_9EC5
		ld	bc, unk_24D
		ld	hl, unk_26D
		ld	a, (bc)
		or	(hl)
		ld	(hl), a
		ld	a, (bc)
		ld	hl, unk_278
		or	(hl)
		ld	(hl), a
		pop	hl
		push	hl
		or	a
		sbc	hl, de
		pop	hl
		jp	p, loc_9D5F
		ex	de, hl
loc_9D5F:	push	hl
		push	de
		ld	hl, unk_273
		ld	de, unk_268
		ld	b, 7
		call	m, sub_9EBB
		ld	hl, (unk_268)
		ex	de, hl
		ld	hl, (unk_262)
		ld	h, 0
		add	hl, hl
		add	hl, hl
		push	hl
		add	hl, hl
		pop	hl
		jr	c, loc_9DCB
		add	hl, de
loc_9D7D:	ld	(unk_25E), hl
		pop	hl
		call	sub_9E61
		ex	de, hl
		pop	bc
		ld	hl, 0
		push	hl
		di
loc_9D8B:	ld	hl, unk_268
		call	sub_9DD3
		xor	a
		pop	hl
		add	hl, de
		or	h
		ld	a, (unk_261)
		push	hl
		jp	p, loc_9DA7
		add	hl, bc
		ex	(sp), hl
		ld	hl, unk_273
		call	sub_9DD3
		ld	a, (unk_260)
loc_9DA7:	dec	a
		jr	nz, loc_9DA7
		ld	hl, unk_25E
		inc	(hl)
		jr	nz, loc_9DB9
		inc	hl
		inc	(hl)
		jr	nz, loc_9DB9
		ld	a, 3Ch ; '<'
		ld	(unk_27B), a
loc_9DB9:	push	bc
		ld	hl, unk_xxx2-1
		ld	a, (unk_262)
		ld	b, 0
		ld	c, a
		add	hl, bc
		pop	bc
		ld	a, (hl)
loc_9DC6:	dec	a
		jr	nz, loc_9DC6
		jr	loc_9D8B
loc_9DCB:	ex	de, hl
		ld	a, 2
		call	sub_9E6A
		jr	loc_9D7D

sub_9DD3:	inc	(hl)
		ld	a, (hl)
		inc	hl
		jr	nz, loc_9DDB
		inc	(hl)
		jr	z, loc_9E04
loc_9DDB:	rrca
		ret	nc
		rrca
		ret	nc
		inc	hl
		push	de
		ld	e, (hl)
		inc	hl
		ld	d, (hl)
		inc	hl
		push	de
		push	hl
		ex	de, hl
		ld	e, (hl)
		inc	hl
		ld	d, (hl)
		ld	hl, loc_9DF0
		ex	(sp), hl
		jp	(hl)

loc_9DF0:	pop	hl
		ld	(hl), e
		inc	hl
		ld	(hl), d
		pop	de
sub_9DF5:	push	bc
		ld	b, a
		ld	a, (WINJP+1)
		ld	c, a
		ld	a, b
		out	(c), a
		or	4
		out	(c), a
		pop	bc
		ret

loc_9E04:	pop	de
		pop	de
		ei
		ld	a, (unk_254)
		and	a
		ld	a, 80h ; ''
		jr	z, loc_9E10
		xor	a
loc_9E10:	ld	(unk_24B), a
		ld	hl, 300h
		jp	loc_9EFB

sub_9E19:	ld	hl, unk_262
		push	af
		ld	a, (hl)
		call	unk_27B
		jr	z, loc_9E24
		ld	(hl), a
loc_9E24:	pop	af
		ret

sub_9E26:	push	de
		ld	e, (hl)
		inc	hl
		ld	d, (hl)
		pop	hl
		call	sub_9E61
		add	hl, de
		call	sub_9E5E
		push	hl
		ld	hl, 1301h
		jp	p, loc_9E3C
		ld	hl, 1B00h
loc_9E3C:	ex	(sp), hl
		ld	a, d
		and	a
		ex	de, hl
		jp	m, loc_9E49
		add	hl, bc
		jr	nc, loc_9E5A
		call	sub_9E61
loc_9E49:	add	hl, de
loc_9E4A:	call	sub_9E61
		push	hl
		add	hl, de
		ld	a, l
		or	h
		pop	hl
		add	hl, hl
		add	hl, hl
		dec	hl
		pop	bc
		ret	z
		ld	a, 1
		ret
loc_9E5A:	ld	h, d
		ld	l, e
		jr	loc_9E4A

sub_9E5E:	ld	a, h
		and	a
		ret	p

sub_9E61:	push	af
		xor	a
		sub	l
		ld	l, a
		sbc	a, a
		sub	h
		ld	h, a
		pop	af
		ret

sub_9E6A:	push	bc
		push	de
		ld	c, a
		call	sub_9E5E
		ld	a, c
		push	af
		ld	de, 0
		ld	b, 8
loc_9E77:	ld	a, h
		sub	c
		jr	c, loc_9E7F
		inc	de
		ld	h, a
		jr	loc_9E77
loc_9E7F:	add	hl, hl
		ex	de, hl
		add	hl, hl
		ex	de, hl
		dec	b
		jr	nz, loc_9E77
		ld	a, h
		sub	c
		jr	c, loc_9E8C
		inc	de
		ld	h, a
loc_9E8C:	ld	a, h
		add	a, a
		sub	c
		jr	c, loc_9E92
		inc	de
loc_9E92:	ex	de, hl
		jr	loc_9EB4
loc_9E95:	push	bc
		push	de
		ld	d, a
		xor	h
		ld	a, d
		push	af
		call	sub_9E5E
		ld	e, 0
		ld	b, 7
		ex	de, hl
		call	sub_9E5E
		ld	a, h
		ld	h, l
loc_9EA8:	add	a, a
		jr	nc, loc_9EAC
		add	hl, de
loc_9EAC:	add	hl, hl
		dec	b
		jr	nz, loc_9EA8
		add	a, a
		jr	nc, loc_9EB4
		add	hl, de
loc_9EB4:	pop	af
		call	m, sub_9E61
		pop	de
		pop	bc
		ret

sub_9EBB:	ld	a, (de)
		ld	c, (hl)
		ex	de, hl
		ld	(hl), c
		ld	(de), a
		inc	hl
		inc	de
		djnz	sub_9EBB
		ret

sub_9EC5:	ld	a, (unk_24D)
		ld	hl, 351Ch
		push	af
		ld	a, (unk_254)
		and	a
		jr	z, loc_9ED5
		ld	hl, 018Fh
loc_9ED5:	ld	(unk_261), hl
		ld	c, l
		ld	h, 0
		add	hl, hl
		ld	a, 5
		call	sub_9E6A
		add	hl, bc
		ld	a, l
		ld	(unk_260), a
		pop	af
sub_9EE7:	ld	hl, unk_24E
		cp	(hl)
		ld	(hl), a
		dec	hl
		ld	(hl), a
		push	bc
		ld	b, a
		ld	a, (WINJP+1)
		ld	c, a
		out	(c), b
		pop	bc
		ret	z
		ld	hl, 800h
loc_9EFB:	dec	hl
		ld	a, h
		or	l
		jr	nz, loc_9EFB
		ret

sub_9F01:	push	bc
		push	de
		call	sub_9F24
		jr	z, loc_9F21
		call	sub_9F51
		jr	z, loc_9F21
		ld	de, a_po	; "?PO"
		call	PRNST		; BIOS:	PRNST
		ld	a, 0E2h	; ''
		out	(0B8h),	a
		xor	a
		ld	(WINJP), a
		ld	(unk_267), a
		jp	unk_C69C
loc_9F21:	pop	de
		pop	bc
		ret

; Initialisierung E/A-Modul
sub_9F24:	ld	a, (unk_267)
		cp	0CFh ; ''
		jr	z, loc_9F3F
		call	sub_9F98
		ld	a, (WINJP+1)
		inc	a
		inc	a
		ld	c, a
		ld	a, 0CFh	; ''
		out	(c), a
		ld	(unk_267), a
		ld	a, 20h ; ' '
		out	(c), a
loc_9F3F:	ld	a, (WINJP+1)
		ld	c, a
		ld	a, (unk_24E)
		out	(c), a
		or	40h ; '@'
		out	(c), a
		in	a, (c)
		and	20h ; ' '
		ret

sub_9F51:	ld	hl, 7D0h
		xor	a
		ld	(unk_24E), a
loc_9F58:	ld	a, 0
		call	sub_9F7D
		call	sub_9F24
		jr	z, loc_9F69
		dec	hl
		ld	a, h
		or	l
		jr	nz, loc_9F58
		inc	a
		ret
loc_9F69:	ld	hl, 0
		ld	(unk_245), hl
		ld	(unk_247), hl
		ld	c, 0Fh
loc_9F74:	ld	a, 1
		call	sub_9F7D
		dec	c
		jr	nz, loc_9F74
		ret

sub_9F7D:	ld	b, 0FFh
		call	sub_9DF5
loc_9F82:	djnz	$
		ret

loc_9F85:	ld	b, l
		ld	(bc), a
		ld	a, 3
		inc	de
		call	sub_9E19
		ret
		
tab_xxx1:	db    0	;
		db    0	;
		db  47h	; G
		db    2	;
		db  3Eh	; >
		db    1	;
		db  13h	;
		db 0C9h	; 
		db  3Dh	; =
		db 0C9h	; 

sub_9F98:	ld	hl, unk_234
		ld	(hl), 0
		ld	d, h
		ld	e, l
		inc	de
		ld	bc, 34h	; '4'
		ldir
		ld	hl, 5859h
		ld	(unk_234), hl
		ld	a, 18h
		ld	(unk_239), a
		ld	a, 28h ; '('
		ld	(unk_23F), a
		ld	a, 80h ; ''
		ld	(unk_24B), a
		ld	a, 0EEh	; ''
		ld	(unk_24F), a
		ld	a, 0C9h	; ''
		ld	(unk_27C), a
		ret

unk_xxx2:	db    1	;
		db    2	;
		db    2	;
		db    3	;
		db    3	;
		db    4	;
		db    4	;
		db    5	;
		db    5	;
		db    6	;
		db    7	;
		db    8	;
		db    9	;
		db  0Ah	;
		db  0Bh	;
		db  0Ch	;
		db  0Dh	;
		db  0Eh	;
		db  0Fh	;
		db  10h	;
		db  11h	;
		db  12h	;
		db  13h	;
		db  14h	;
		db  15h	;
		db  16h	;
		db  18h	;
		db  1Ah	;
		db  1Ch	;
		db  1Eh	;
		db  20h	;
		db  22h	; "
		db  24h	; $
		db  26h	; &>
		db  28h	; (
		db  2Ah	; *
		db  2Ch	; ,
		db  30h	; 0
		db  32h	; 2
		db  34h	; 4
		db  38h	; 8
		db  3Ch	; <
		db  40h	; @
		db  44h	; D
		db  48h	; H
		db  4Ch	; L
		db  50h	; P
		db  54h	; T
		db  58h	; X
		db  5Ch	; 
		db  60h	; '
		db  64h	; d
		db  6Ah	; j
		db  70h	; p

aOutOfRange:	db	" OUT OF RANGE",0Dh,0Ah,0
a_po:		db	"?PO",0

umlauttab:	db  61h	; a
		db  6Fh	; o
		db  75h	; u

labeltab:	db    9	;
		db  25h	; %
		db 0C5h	; 
		db 0E6h	; 
		db 0E8h	; 
		db 0CAh	; 
		db 0AAh	; 
		db  88h	; 
		db  86h	; 
		db 0A5h	; 
		db    9	;
		db  65h	; e
		db 0E9h	; 
		db 0CAh	; 
		db 0AAh	; 
		db  89h	; 
		db  81h	; 
		db 0A0h	; 
		db 0C0h	; 
		db 0E1h	; 
		db  15h	;
		db  15h	;
		db 0A6h	; 
		db 0C6h	; 
		db 0D5h	; 
		db 0D0h	; 
		db  17h	;
		db  10h	;
		db 0C0h	; 
		db 0D1h	; 
		db 0D5h	; 
		db 0C6h	; 
		db 0A6h	; 
		db  95h	; 
		db  0Bh	;
		db  17h	;
		db  88h	; 
		db  89h	; 
		db  9Ah	; 
		db 0AAh	; 
		db 0B9h	; 
		db 0B8h	; 
		db 0A7h	; 
		db  97h	; 
		db    0	;
		db 0EAh	; 
		db    4	;
		db  20h	;
		db 0AAh	; 
		db  4Ah	; J
		db 0C0h	; 
		db  12h	;
		db  3Ah	; :	
		db 0B0h	; 
		db    4	;
		db  2Ch	; ,
		db 0ADh	; 
		db  4Dh	; M
		db 0CCh	; 
		db  65h	; e
		db    1	;
		db 0E1h	; 
		db 0E7h	; 
		db  87h	; 
		db  81h	; 
		db  65h	; e
		db  31h	; 1
		db 0E4h	; 
		db 0B7h	; 
		db  84h	; 
		db 0B1h	; 
		db  64h	; d
		db    2	;
		db 0E2h	; 
		db 0B7h	; 
		db  82h	; 
		db  64h	; d
		db    6	;
		db 0B1h	; 
		db 0E6h	; 
		db  86h	; 
		db  64h	; d
		db    4	;
		db 0E4h	; 
		db  37h	; 7
		db 0B1h	; 
		db  64h	; d
		db    1	;
		db 0E7h	; 
		db    7	;
		db 0E1h	; 
		db  66h	; f
		db  31h	; 1
		db 0B7h	; 
		db  66h	; f
		db  82h	; 
		db    6	;
		db 0E2h	; 
		db    0	;
		db  14h	;
		db  3Ah	; :
		db 0B3h	; 
		db  31h	; 1
		db 0B0h	; 
		db    4	;
		db  27h	; '
		db 0AAh	; 
		db  4Ah	; J
		db 0C7h	; 
		db  84h	; 
		db  17h	;
		db 0D7h	; 
		db  53h	; S
		db  93h	; 
		db  16h	;
		db  8Ah	; 
		db  67h	; g
		db 0D9h	; 
		db 0A9h	; 
		db  87h	; 
		db  86h	; 
		db 0E4h	; 
		db 0E3h	; 
		db 0C1h	; 
		db  91h	; 
		db  83h	; 
		db  16h	;
		db  89h	; 
		db  40h	; @
		db 0B1h	; 
		db 0B2h	; 
		db 0C3h	; 
		db 0D3h	; 
		db 0E2h	; 
		db 0E1h	; 
		db 0D0h	; 
		db 0C0h	; 
		db  15h	;
		db  0Bh	;
		db  60h	; `
		db  98h	; 
		db 0AAh	; 
		db 0CAh	; 
		db 0D8h	; 
		db  94h	; 
		db  91h	; 
		db 0A0h	; 
		db 0C0h	; 
		db 0D4h	; 
		db 0E4h	; 
		db  12h	;
		db  3Ah	; :
		db 0B8h	; 
		db    8	;
		db  4Ah	; J
		db 0BAh	; 
		db 0A9h	; 
		db  97h	; 
		db  93h	; 
		db 0A1h	; 
		db 0B0h	; 
		db 0C0h	; 
		db    8	;
		db  2Ah	; *
		db 0BAh	; 
		db 0C9h	; 
		db 0D7h	; 
		db 0D3h	; 
		db 0C1h	; 
		db 0B0h	; 
		db 0A0h	; 
		db  84h	; 
		db  11h	;
		db 0D7h	; 
		db  17h	;
		db 0D1h	; 
		db  2Dh	; -
		db  82h	; 
		db  31h	; 1
		db 0B7h	; 
		db  2Dh	; -
		db  53h	; S
		db  36h	; 6
		db 0B4h	; 
		db 0A3h	; 
		db    2	;
		db    4	;
		db 0E4h	; 
		db  11h	;
		db  30h	; 0
		db    2	;
		db    0	;
		db 0EAh	; 
		db  82h	; 
		db  11h	;
		db 0D9h	; 
		db  4Fh	; O
		db    3	;
		db  19h	;
		db 0DAh	; 
		db 0D0h	; 
		db    8	;
		db    8	;
		db  9Ah	; 
		db 0CAh	; 
		db 0E8h	; 
		db 0E6h	; 
		db  82h	; 
		db  80h	; 
		db 0E0h	; 
		db  0Dh	;
		db    2	;
		db  90h	; 
		db 0C0h	; 
		db 0E2h	; 
		db 0E4h	; 
		db 0C5h	; 
		db 0A5h	; 
		db 0C5h	; 
		db 0E6h	; 
		db 0E8h	; 
		db 0CAh	; 
		db  9Ah	; 
		db  88h	; 
		db    5	;
		db  3Ah	; :
		db  83h	; 
		db 0E3h	; 
		db  5Ah	; Z
		db 0D0h	; 
		db  0Ah	;
		db  6Ah	; j
		db  9Ah	; 
		db  85h	; 
		db 0B6h	; 
		db 0D6h	; 
		db 0E4h	; 
		db 0E2h	; 
		db 0C0h	; 
		db  90h	; 
		db  82h	; 
		db  0Ch	;
		db  68h	; h
		db 0DAh	; 
		db 0AAh	; 
		db  88h	; 
		db  82h	; 
		db 0A0h	; 
		db 0D0h	; 
		db 0E2h	; 
		db 0E4h	; 
		db 0D6h	; 
		db 0A6h	; 
		db  84h	; 
		db    3	;
		db  0Ah	;
		db 0EAh	; 
		db  90h	; 
		db  87h	; 
		db  45h	; E
		db 0E4h	; 
		db 0E2h	; 
		db 0C0h	; 
		db 0A0h	; 
		db  82h	; 
		db  84h	; 
		db  91h	; 
		db  0Ch	;
		db    2	;
		db  90h	; 
		db 0C0h	; 
		db 0E2h	; 
		db 0E8h	; 
		db 0CAh	; 
		db  9Ah	; 
		db  88h	; 
		db  86h	; 
		db  94h	; 
		db 0C4h	; 
		db 0E6h	; 
		db  12h	;
		db  35h	; 5
		db  32h	; 2
		db  91h	; 
		db  34h	; 4
		db  2Ch	; ,
		db    3	;
		db  57h	; W
		db  94h	; 
		db 0D1h	; 
		db    4	;
		db  15h	;
		db 0D5h	; 
		db  53h	; S
		db  93h	; 
		db    3	;
		db  17h	;
		db 0D4h	; 
		db  91h	; 
		db  0Ah	;
		db  18h	;
		db  99h	; 
		db 0AAh	; 
		db 0CAh	; 
		db 0D9h	; 
		db 0D7h	; 
		db 0B5h	; 
		db 0B3h	; 
		db  31h	; 1
		db 0B0h	; 
		db  87h	; 
		db  43h	; C
		db 0C7h	; 
		db 0B7h	; 
		db 0A6h	; 
		db 0A4h	; 
		db 0B3h	; 
		db 0D3h	; 
		db  92h	; 
		db    5	;
		db    0	;
		db 0BAh	; 
		db 0E0h	; 
		db  13h	;
		db 0D3h	; 
		db  0Ch	;
		db    0	;
		db  8Ah	; 
		db 0CAh	; 
		db 0E8h	; 
		db 0E7h	; 
		db 0C5h	; 
		db  85h	; 
		db 0C5h	; 
		db 0E4h	; 
		db 0E2h	; 
		db 0C0h	; 
		db  80h	; 
		db    8	;
		db  61h	; a
		db 0C0h	; 
		db 0A0h	; 
		db  82h	; 
		db  88h	; 
		db 0AAh	; 
		db 0CAh	; 
		db 0E9h	; 
		db    7	;
		db    0	;
		db  8Ah	; 
		db 0CAh	; 
		db 0E8h	; 
		db 0E2h	; 
		db 0C0h	; 
		db  80h	; 
		db  81h	; 
		db  60h	; `
		db 0C6h	; 
		db    5	;
		db    0	;
		db  8Ah	; 
		db 0DAh	; 
		db    5	;
		db 0D5h	; 
		db    9	;
		db  35h	; 5
		db 0E5h	; 
		db 0E0h	; 
		db 0A0h	; 
		db  82h	; 
		db  88h	; 
		db 0AAh	; 
		db 0CAh	; 
		db 0E9h	; 
		db    6	;
		db    0	;
		db  8Ah	; 
		db    5	;
		db 0E5h	; 
		db  6Ah	; j
		db 0E0h	; 
		db  94h	; 
		db  20h	;
		db 0C0h	; 
		db  2Ah	; *
		db 0CAh	; 
		db  17h	;
		db    5	;
		db    2	;
		db  90h	; 
		db 0C0h	; 
		db 0E2h	; 
		db 0EAh	; 
		db    5	;
		db    0	;
		db  8Ah	; 
		db  5Ah	; Z
		db  85h	; 
		db 0E0h	; 
		db    3	;
		db  0Ah	;
		db  80h	; 
		db 0E0h	; 
		db    5	;
		db    0	;
		db  8Ah	; 
		db 0B5h	; 
		db 0EAh	; 
		db 0E0h	; 
		db    4	;
		db    0	;
		db  8Ah	; 
		db 0E0h	; 
		db 0EAh	; 
		db    9	;
		db  40h	; @
		db 0A0h	; 
		db  82h	; 
		db  88h	; 
		db 0AAh	; 
		db 0CAh	; 
		db 0E8h	; 
		db 0E2h	; 
		db 0C0h	; 
		db    7	;
		db    0	;
		db  8Ah	; 
		db 0CAh	; 
		db 0E9h	; 
		db 0E6h	; 
		db 0C5h	; 
		db  85h	; 
		db  82h	; 
		db  42h	; B
		db 0E0h	; 
		db  4Fh	; O
		db  82h	; 
		db  45h	; E
		db 0E0h	; 
		db  50h	; P
		db  0Ah	;
		db    2	;
		db  90h	; 
		db 0C0h	; 
		db 0E2h	; 
		db 0E4h	; 
		db  86h	; 
		db  88h	; 
		db 0AAh	; 
		db 0DAh	; 
		db 0E8h	; 
		db    4	;
		db  0Ah	;
		db 0EAh	; 
		db  3Ah	; :	
		db 0B0h	; 
		db    6	;
		db  0Ah	;
		db  82h	; 
		db 0A0h	; 
		db 0C0h	; 
		db 0E2h	; 
		db 0EAh	; 
		db    3	;
		db  0Ah	;
		db 0B0h	; 
		db 0EAh	; 
		db    5	;
		db  0Ah	;
		db  90h	; 
		db 0B6h	; 
		db 0D0h	; 
		db 0EAh	; 
		db  82h	; 
		db  0Ah	;
		db 0E0h	; 
		db  2Fh	; /
		db    5	;
		db  0Ah	;
		db 0B5h	; 
		db 0EAh	; 
		db  35h	; 5
		db 0B0h	; 
		db    4	;
		db  1Ah	;
		db 0EAh	; 
		db  80h	; 
		db 0E0h	; 
		db    4	;
		db  5Ah	; Z
		db 0AAh	; 
		db 0A0h	; 
		db 0D0h	; 
		db    2	;
		db  0Ah	;
		db 0E0h	; 
		db    4	;
		db  1Ah	;
		db 0CAh	; 
		db 0C0h	; 
		db  90h	; 
		db    3	;
		db  16h	;
		db 0B9h	; 
		db 0D6h	; 
		db    2	;
		db    0	;
		db 0E0h	; 
		db  12h	;
		db  3Ah	; :	
		db 0C8h	; 
		db  1Ah	;
		db  53h	; S
		db 0C4h	; 
		db 0A4h	; 
		db  93h	; 
		db  91h	; 
		db 0A0h	; 
		db 0D0h	; 
		db 0D5h	; 
		db 0C6h	; 
		db  96h	; 
		db  91h	; 
		db  1Ah	;
		db  94h	; 
		db  17h	;
		db  55h	; U
		db 0C6h	; 
		db 0A6h	; 
		db  95h	; 
		db  91h	; 
		db 0A0h	; 
		db 0D0h	; 
		db  92h	; 
		db  50h	; P
		db 0DAh	; 
		db  63h	; c
		db  92h	; 
		db  13h	;
		db 0D3h	; 
		db 0E3h	; 
		db  56h	; V
		db  1Ah	;
		db 0CAh	; 
		db  4Eh	; N
		db 0BEh	; 
		db 0ADh	; 
		db 0A1h	; 
		db 0D4h	; 
		db  11h	;
		db 0C1h	; 
		db 0D3h	; 
		db 0DAh	; 
		db  63h	; c
		db  92h	; 
		db  10h	;
		db  9Ah	; 
		db  13h	;
		db  16h	;
		db  10h	;
		db 0C0h	; 
		db  30h	; 0
		db 0B6h	; 
		db  96h	; 
		db  38h	; 8
		db  56h	; V
		db  11h	;
		db 0A1h	; 
		db 0B3h	; 
		db 0BAh	; 
		db  9Ah	; 
		db  3Ch	; <
		db  15h	;
		db  10h	;
		db  9Ah	; 
		db  56h	; V
		db  93h	; 
		db 0D0h	; 
		db  93h	; 
		db  10h	;
		db 0C0h	; 
		db  1Ah	;
		db  97h	; 
		db  0Ch	;
		db    0	;
		db  86h	; 
		db    5	;
		db  96h	; 
		db 0A6h	; 
		db 0B5h	; 
		db 0B0h	; 
		db  35h	; 5
		db 0C6h	; 
		db 0D6h	; 
		db 0E5h	; 
		db 0E0h	; 
		db  92h	; 
		db  10h	;
		db  96h	; 
		db  13h	;
		db  19h	;
		db  11h	;
		db  95h	; 
		db 0A6h	; 
		db 0C6h	; 
		db 0D5h	; 
		db 0D1h	; 
		db 0C0h	; 
		db 0A0h	; 
		db  91h	; 
		db 0D2h	; 
		db  11h	;
		db  9Ah	; 
		db  14h	;
		db 0D2h	; 
		db  51h	; Q
		db 0DAh	; 
		db  63h	; c
		db  15h	;
		db  20h	;
		db 0A6h	; 
		db  25h	; %
		db 0C6h	; 
		db 0D5h	; 
		db  1Ah	;
		db  11h	;
		db 0A0h	; 
		db 0C0h	; 
		db 0D1h	; 
		db 0D2h	; 
		db  94h	; 
		db  95h	; 
		db 0A6h	; 
		db 0C6h	; 
		db 0D5h	; 
		db  16h	;
		db  16h	;
		db 0C6h	; 
		db  28h	; (
		db 0A1h	; 
		db 0B0h	; 
		db 0C0h	; 
		db  15h	;
		db  16h	;
		db  91h	; 
		db 0A0h	; 
		db 0D0h	; 
		db 0D6h	; 
		db  13h	;
		db  16h	;
		db 0B0h	; 
		db 0D6h	; 
		db    5	;
		db    6	;
		db  90h	; 
		db 0B4h	; 
		db 0D0h	; 
		db 0E6h	; 
		db  14h	;
		db  10h	;
		db 0D6h	; 
		db  16h	;
		db 0D0h	; 
		db  55h	; U
		db  11h	;
		db 0A1h	; 
		db 0DAh	; 
		db  1Ah	;
		db 0B4h	; 
		db  14h	;
		db  16h	;
		db 0D6h	; 
		db  90h	; 
		db 0D0h	; 
		db    9	;
		db  5Ah	; Z
		db 0CAh	; 
		db 0B9h	; 
		db 0B6h	; 
		db  95h	; 
		db 0B4h	; 
		db 0B1h	; 
		db 0C0h	; 
		db 0D0h	; 
		db  14h	;
		db  3Ah	; :	
		db 0B7h	; 
		db  33h	; 3
		db 0B0h	; 
		db    9	;
		db  1Ah	;
		db 0AAh	; 
		db 0B9h	; 
		db 0B6h	; 
		db 0D5h	; 
		db 0B4h	; 
		db 0B1h	; 
		db 0A0h	; 
		db  90h	; 
		db    6	;
		db    4	;
		db  95h	; 
		db 0A5h	; 
		db 0C3h	; 
		db 0D3h	; 
		db 0E4h	; 
		db  0Ch	;
		db  10h	;
		db  99h	; 
		db 0AAh	; 
		db 0CAh	; 
		db 0D9h	; 
		db 0D7h	; 
		db 0B6h	; 
		db 0D5h	; 
		db 0E4h	; 
		db 0E2h	; 
		db 0D1h	; 
		db 0B0h	; 

loc_A2E1:	push	hl
		push	bc
		call	OPKOP
		pop	bc
		ld	de, 0
		ld	hl, WRA1+3
		ld	a, (hl)
		or	a
		jp	z, loc_A329
		dec	hl
		ld	a, (hl)
		or	a
		jp	p, loc_A306
		and	7Fh ; ''
		ld	(hl), a
		ld	hl, unk_285
		ld	a, (hl)
		or	c
		ld	(hl), a
		pop	hl
		call	OPTRAN
		push	hl
loc_A306:	ld	bc, 7E22h
		ld	de, 0F983h
		call	MUL1
		ld	hl, WRA1+3
		ld	a, 81h ; ''
		cp	(hl)
		jp	c, err2
		call	OPARST
		xor	a
		ld	b, 8
		call	FRE3
		pop	bc
		pop	de
		call	MUL1
		call	EPRVL3
loc_A329:	pop	hl
		ret
locret_A32B:	ret



;-----------------------------------------------------------------------------
; BASIC-Interface
;-----------------------------------------------------------------------------


;-----------------------------------------------------------------------------
; PSET(x,y)[,stift]
;-----------------------------------------------------------------------------

pset:		ld	a, (hl)		
		cp	0ABh ; ''      ; Token fuer STEP
		ld	b, 0FFh
		jr	nz, pset1
		call	TCHAR
		jr	pset2
pset1:		ld	b, 1
pset2:		ld	de, unk_285
		push	de
		ld	a, b
		ld	(de), a
		inc	de
		call	point3
		jr	nz, pset3
		inc	a
		jr	pset4
pset3:		call	CPCOMM
		call	sub_A7B2
pset4:		ld	(de), a
		pop	de
		ld	c, 1
		jp	plsv		; Plotter-Sprungverteiler

;-----------------------------------------------------------------------------
; LINE [(x1,y1)]-(x2,y2)[,[stift][,B]]
;-----------------------------------------------------------------------------

line:		ld	b, 1
		ld	a, (hl)
		cp	0ADh ; ''      ; Token fuer '-'
		jr	z, line1
		cp	0ABh ; ''      ; TOKEN fuer STEP
		jr	nz, line2
		dec	b
line1:		dec	b
		call	TCHAR
line2:		ld	de, unk_285
		push	de
		ld	a, b
		ld	(de), a
		inc	de
		and	a
		jr	nz, line3
		ld	de, unk_28A
		jr	line4
line3:		call	point3
		cp	0ADh ; ''      ; Token fuer '-'
		jr	nz, circle3
		call	TCHAR
line4:		ld	a, (hl)
		cp	0ABh ; ''      ; Token fuer STEP
		jr	nz, line5
		ld	b, 0FFh
		call	TCHAR
		jr	line6
line5:		ld	b, 1
line6:		ld	a, b
		ld	(de), a
		inc	de
		call	point3
		jr	nz, line7
		ld	a, 1
		jr	line11
line7:		cp	2Ch ; ','
		jr	nz, circle3
		call	TCHAR
		cp	2Ch ; ','
		jr	nz, line8
		ld	a, 1
		ld	(de), a
		inc	de
		jr	line9
line8:		call	sub_A7B2
		ld	(de), a
		inc	de
		dec	hl
		call	TCHAR
		jr	z, line12
		cp	2Ch ; ','
		jr	nz, circle3
line9:		ld	b, 0
		call	TCHAR
		cp	42h ; 'B'
		jr	nz, circle3
		inc	b
		call	TCHAR
		cp	46h ; 'F'
		jr	nz, line10
		call	TCHAR
		inc	b
		ld	a, b
		jr	line13
line10:		ld	a, b
		jr	line13
line11:		ld	(de), a
		inc	de
line12:		xor	a
line13:		ld	(de), a
		pop	de
		ld	c, 2
		jp	plsv		; Plotter-Sprungverteiler

;-----------------------------------------------------------------------------
; CIRCLE(x,y),radius[,stift[,anf-winkel[,end-winkel[,ellip]]]]
; CIRCLE(x,y),radius[,stift],[anf-winkel],[end-winkel],ellip
;-----------------------------------------------------------------------------

circle:		ld	a, (hl)
		cp	0ABh ; ''      ; Token fuer STEP
		ld	b, 0FFh
		jr	nz, circle1
		call	TCHAR
		jr	circle2
circle1:	ld	b, 1
circle2:	ld	de, unk_285
		push	de
		ld	a, b
		ld	(de), a
		inc	de
		call	point3
		cp	2Ch ; ','
circle3:	jp	nz, err1
		call	TCHAR
		call	SNALY
		ld	de, unk_28A
		call	size7
		call	TCHAR1
		jr	z, circle10
		cp	2Ch ; ','
		jr	nz, circle3
		call	TCHAR
		cp	2Ch ; ','
		jr	nz, circle4
		ld	de, unk_28E
		call	sub_A4DA
		jr	circle5
circle4:	call	sub_A7B2
		ld	(de), a
		call	TCHAR1
		jr	z, circle11
circle5:	call	TCHAR
		cp	2Ch ; ','
		jr	nz, circle6
		call	sub_A4DF
		jr	circle7
circle6:	call	SNALY
		ld	de, unk_28F
		call	size7
		call	TCHAR1
		jr	z, circle12
		cp	2Ch ; ','
		jr	nz, circle3
circle7:	call	TCHAR
		cp	2Ch ; ','
		jr	nz, circle8
		call	sub_A4E5
		jr	circle9
circle8:	call	SNALY
		ld	de, unk_293
		call	size7
		call	TCHAR1
		jr	z, circle13
		cp	2Ch ; ','
		jr	nz, circle3
circle9:	call	TCHAR
		call	SNALY
		push	hl
		ld	hl, WRA1+2
		bit	7, (hl)
		jp	nz, err2
		ld	hl, WRA1+3
		ld	a, (hl)
		and	a
		jp	z, err2
		pop	hl
		ld	de, unk_297
		call	size7
		jr	circle14
circle10:	call	sub_A4DA
circle11:	call	sub_A4DF
circle12:	call	sub_A4E5
circle13:	call	sub_A4F6
circle14:	push	hl
		ld	hl, unk_27D
		call	OPKOP
		ld	hl, unk_297
		push	hl
		call	OPLAD
		call	DIV1
		ld	hl, unk_281
		call	OPLAD
		call	MUL1
		ld	hl, WRA1+2
		ld	a, (hl)
		and	7Fh ; ''
		ld	(hl), a
		pop	hl
		call	OPTRAN
		ld	hl, unk_27D
		ld	a, (WRA1+3)
		cp	81h ; ''
		jr	c, circle15
		ld	hl, unk_281
circle15:	call	OPKOP
		ld	hl, unk_28A
		push	hl
		call	OPLAD
		call	MUL1
		pop	hl
		call	OPTRAN
		pop	hl
		pop	de
		ld	c, 3
		jp	plsv		; Plotter-Sprungverteiler

sub_A4DA:	ld	a, 1
		ld	(de), a
		inc	de
		ret

sub_A4DF:	ld	de, unk_292
		xor	a
		ld	(de), a
		ret

sub_A4E5:	push	hl
		ld	hl, unk_293
		ld	(hl), 0DBh ; ''
		inc	hl
		ld	(hl), 0Fh
		inc	hl
		ld	(hl), 49h ; 'I'
		inc	hl
		ld	(hl), 83h ; ''
		pop	hl
		ret

sub_A4F6:	ld	de, unk_297
		xor	a
		ld	(de), a
		inc	de
		ld	(de), a
		inc	de
		ld	(de), a
		inc	de
		ld	a, 81h ; ''
		ld	(de), a
		ret

;-----------------------------------------------------------------------------
; 
;-----------------------------------------------------------------------------

paint:		ld	a, (hl)
		cp	0ABh ; ''      ; Token fuer STEP
		ld	b, 0FFh
		jr	nz, paint1
		call	TCHAR
		jr	paint2
paint1:		ld	b, 1
paint2:		ld	de, unk_285
		push	de
		ld	a, b
		ld	(de), a
		inc	de
		call	point3
		jr	z, paint5
		cp	2Ch ; ','
		jp	nz, err1
		call	TCHAR
		cp	2Ch ; ','
		jr	nz, paint3
		ld	a, 1
		ld	(de), a
		inc	de
		jr	paint4
paint3:		call	sub_A7B2
		ld	(de), a
		inc	de
		ld	a, (hl)
		and	a
		jr	z, paint6
		cp	2Ch ; ','
		jp	nz, err1
paint4:		call	TCHAR
		push	de
		call	ARGVL1
		pop	de
		jr	paint7
paint5:		ld	a, 1
		ld	(de), a
		inc	de
paint6:		ld	a, 1
paint7:		ld	(de), a
		pop	de
		ld	c, 4
		jp	plsv		; Plotter-Sprungverteiler

;-----------------------------------------------------------------------------
; LABEL	string
;-----------------------------------------------------------------------------

label:		call	SNALY
		push	hl
		call	LEN1
		ld	de, unk_285
		ld	bc, 4
		ldir
		pop	hl
		dec	hl
		call	TCHAR
		jr	z, label1
		cp	2Ch ; ','
		jp	nz, err1
		call	TCHAR
		call	sub_A7B2
		jr	label2
label1:	ld	a, 1
label2:	ld	(de), a
		ld	de, unk_285
		ld	c, 5
		jp	plsv		; Plotter-Sprungverteiler

;-----------------------------------------------------------------------------
; SIZE b,l[,r[,s[,a]]]
; SIZE b,l,[r],[s],a
;-----------------------------------------------------------------------------

size:		push	hl
		ld	hl, unk_28E
		ld	(hl), 0
		ld	de, unk_28F
		ld	bc, 0Bh
		ldir
		pop	hl
		call	SNALY
		ld	de, unk_28E
		call	size7
		call	CPCOMM
		call	SNALY
		ld	de, unk_292
		call	size7
		call	TCHAR1
		jr	z, size1
		call	CPCOMM
		call	TCHAR1
		cp	2Ch ; ','
		jr	z, size1
		call	SNALY
		ld	de, unk_296
		call	size7
size1:		push	hl
		ld	hl, unk_296
		call	size8
		call	COS
		ld	hl, unk_28E
		call	size9
		ld	(unk_285), hl
		ld	hl, unk_296
		call	size8
		call	SIN
		ld	hl, unk_28E
		call	size9
		ld	(unk_287), hl
		pop	hl
		call	TCHAR1
		jr	z, size2
		call	CPCOMM
		call	TCHAR1
		cp	2Ch ; ','
		jr	nz, size3
size2:		xor	a
		ld	(unk_291), a
		jr	size4
size3:		call	SNALY
		ld	de, unk_28E
		call	size7
size4:		push	hl
		ld	hl, unk_28E
		call	size8
		ld	hl, unk_296
		call	ADD3
		ld	hl, COSL
		call	ADD2
		ld	de, unk_28E
		call	size7
		call	COS
		ld	hl, unk_292
		call	size9
		ld	(unk_289), hl
		ld	hl, unk_28E
		call	size8
		call	SIN
		ld	hl, unk_292
		call	size9
		ld	(unk_28B), hl
		pop	hl
		call	TCHAR1
		jr	z, size5
		call	CPCOMM
		call	sub_A7B2
		jr	z, size5
		ld	a, 80h ; ''
		jr	size6
size5:		xor	a
size6:		ld	(unk_28D), a
		ld	de, unk_285
		ld	c, 6
		jp	plsv		; Plotter-Sprungverteiler

size7:		push	hl
		ld	hl, WRA1	; ARITHMETIKREGISTER 1
		ld	bc, 4
		ldir
		pop	hl
		ret

size8:		ld	de, WRA1	; ARITHMETIKREGISTER 1
		ld	bc, 4
		ldir
		ret

size9:		call	OPLAD
		call	MUL1
		call	EPRVL3
		ex	de, hl
		ret

;-----------------------------------------------------------------------------
; ZERO (x,y)
;-----------------------------------------------------------------------------

zero:		ld	a, (hl)		
		cp	0ABh ; ''      ; Token fuer STEP
		ld	b, 0FFh
		jr	nz, zero1
		call	TCHAR
		jr	zero2
zero1:		ld	b, 1
zero2:		ld	de, unk_285
		push	de
		ld	a, b
		ld	(de), a
		inc	de
		call	point3
		pop	de
		ld	c, 7
		jr	ypos1

;-----------------------------------------------------------------------------
; HOME
;-----------------------------------------------------------------------------

home:		ld	c, 8		
		jr	ypos1

;-----------------------------------------------------------------------------
; GCLS
;-----------------------------------------------------------------------------

gcls:		ld	c, 9		
		call	sub_A6C6
		jr	ypos1

;-----------------------------------------------------------------------------
; 
;-----------------------------------------------------------------------------

xpos:		ld	c, 0Bh
		jr	ypos1
		
;-----------------------------------------------------------------------------
; 
;-----------------------------------------------------------------------------

ypos:		ld	c, 0Ch
		jr	ypos1
ypos1:		jp	plsv		; Plotter-Sprungverteiler

;-----------------------------------------------------------------------------
; SCALE	xfaktor,yfaktor
;-----------------------------------------------------------------------------

scale:		call	SNALY
		ld	de, unk_27D
		call	size7
		ld	a, (hl)
		cp	2Ch ; ','
		jp	nz, err1
		call	TCHAR
		call	SNALY
		ld	de, unk_281
		call	size7
		ret

sub_A6C6:	ex	de, hl
		ld	hl, 0
		ld	(unk_27D), hl
		ld	(unk_281), hl
		ld	h, 81h ; ''
		ld	(unk_27F), hl
		ld	(unk_283), hl
		ex	de, hl
		ret

;-----------------------------------------------------------------------------
; SCREEN [0],plotter
;-----------------------------------------------------------------------------

unk_A6DA:	db  89h	; Plotter 1 - E/A-Buchse
		db 0C8h	; Plotter 2 - E/-Modul, Adr. 0C8h, Port A
		db 0C9h	; Plotter 2 - E/-Modul, Adr. 0C8h, Port B
		db 0CCh	; Plotter 2 - E/-Modul, Adr. 0CCh, Port A
		db 0CBh	; Plotter 2 - E/-Modul, Adr. 0CCh, Port B

screen:	ld	a, (WINJP)
		bit	7, a
		set	7, a
		call	z, sub_A6C6
		call	TCHAR1
		jr	z, screen5
		cp	2Ch ; ','
		jr	nz, screen1
		call	screen10
		jr	screen4
screen1:	call	sub_A7B2
		jr	nz, screen2
		call	screen10
		jr	screen3
screen2:	call	screen11
screen3:	call	TCHAR1
		jr	z, screen6
		cp	2Ch ; ','
		jp	nz, err1
screen4:	call	TCHAR
		call	ARGVL1
		and	a
		jr	z, screen7
		cp	6
		jp	nc, err2
		dec	a
		ld	c, a
		ld	b, 0
		ex	de, hl
		ld	hl, unk_A6DA
		add	hl, bc
		ld	a, (hl)
		ex	de, hl
		ld	(WINJP+1), a
		and	a
		jr	screen7
screen5:	call	screen10
screen6:	xor	a
screen7:	ld	a, (WINJP)
		jr	z, screen8
		set	0, a
		jr	screen9
screen8:	res	0, a
screen9:	ld	(WINJP), a
		ret
screen10:	ld	a, 0E2h	; ''
		jr	screen12
screen11:	ld	a, (atrib)	; aktuelles Farbattribut
		or	88h ; ''
screen12:	out	(0B8h),	a
		ret

;-----------------------------------------------------------------------------
; POINT(X,Y),c[,d] ??
;-----------------------------------------------------------------------------

point:		ld	a, (hl)
		cp	0ABh ; ''      ; Token fuer STEP
		ld	b, 0FFh
		jr	nz, point1
		call	TCHAR
		jr	point2
point1:		ld	b, 1
point2:		ld	de, unk_285
		push	de
		ld	a, b
		ld	(de), a
		inc	de
		call	point3
		pop	de
		ld	c, 0Ah
		jp	plsv		; Plotter-Sprungverteiler

point3:		ld	a, (hl)
		cp	28h ; '('
		jp	nz, err1
		call	TCHAR
		push	de
		call	SNALY
		push	hl
		ld	hl, unk_27D
		call	size9
		ex	de, hl
		pop	hl
		ex	(sp), hl
		ld	(hl), e
		inc	hl
		ld	(hl), d
		inc	hl
		ex	(sp), hl
		call	CPCOMM
		call	SNALY
		push	hl
		ld	hl, unk_281
		call	size9
		ex	de, hl
		pop	hl
		ex	(sp), hl
		ld	(hl), e
		inc	hl
		ld	(hl), d
		inc	hl
		pop	de
		ex	de, hl
		ld	a, (hl)
		cp	29h ; ')'
		jp	nz, err1
		call	TCHAR
		ret

unk_xxx3:	push	de
		call	EPRVL4
		ex	(sp), hl
		ld	(hl), e
		inc	hl
		ld	(hl), d
		inc	hl
		ex	(sp), hl
		pop	de
		ret


sub_A7B2:	push	de
		call	ARGVL1
		pop	de
		and	a
		ret	z
		dec	a
		jp	nz, err2
		inc	a
		ret
; End of function sub_A7B2

;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;
;;		db 0FFh	;

;-----------------------------------------------------------------------------
; Sprungverteiler fr BASIC, vorgegeben in BM608 (2K-Erweiterung f. Grafik)
;-----------------------------------------------------------------------------

		org 0A7D6H
		
		jp	pset
		jp	line
		jp	circle
		jp	paint
		jp	label
		jp	size
		jp	zero
		jp	home
		jp	gcls
		jp	scale
		jp	screen
		jp	point
		jp	xpos
		jp	ypos

		end