Grafikroutinen für BASIC

Software-Entwicklung, Compiler, Interpreter, ...
Antworten
Benutzeravatar
bbock
Beiträge: 44
Registriert: 08.02.2015, 15:31

Grafikroutinen für BASIC

Beitrag von bbock » 16.02.2015, 15:34

Dass die Joyce als professionelle Textverarbeitungslösung vermarktet wurde, merkt man auch an der Ausrichtung der System-Software: Das mitgelieferte BASIC ist business-lastig, es fehlen aber Grafikbefehle wie PLOT, LINE oder CIRCLE. Aber es gibt Abhilfe: Die Befehle können durch Maschinencode-Programme ersetzt werden.

Hier ist eine PLOT-Routine, die von BASIC aus mit CALL PLOT(x%, y%, F%) aufgerufen wird. Dabei wird PLOT auf den Anfang der Routine gesetzt ($C000 bzw. 49152), x% und y% sind die X- und Y-Koordinaten des zu setzenden Punktes und F% ist 1, wenn der Punkt gesetzt, und 0, wenn der Punkt gelöscht werden soll.

Code: Alles auswählen

;----------------------------------------------------
; Project: test1.zdsp
; Main File: test1.asm
; Date: 22.12.2014 21:05:17
;
; Created with zDevStudio - Z80 Development Studio.
;
;----------------------------------------------------

; PLOT - Joyce Graphics

; call from BASIC:
;   CALL PLOT (x%,y%,F%)

; Byte References
B_F8	equ	0F8h	;  'x'+128  -8
B_07	equ	07h	;  7

; Word References
ROLLER	equ	0B600h  ; Adresse des Roller RAMs

; Label References
XBIOS	equ	0FC5Ah	; XBIOS-Adresse

; Program
	ORG	&HC000

PLOT    ld	a,(bc)          ; Farbe -> A
	ld	(FARBE),a
	ld	c,(hl)          ; x low byte -> c
	inc	hl
	ld	b,(hl)          ; x high byte -> b
	ld	hl,719
	and	a               ; clear carry bit
	sbc	hl,bc           ; horizontal overflow test
	ret	c               ; x too large: exit
	ld	(KOORDX),bc     ; save x
	ex	de,hl
	ld	e,(hl)          ; y low byte -> e
	inc	hl
	ld	d,(hl)          ; y high byte -> d (should be 0)
	ld	a,d
	and	a               ; set zero bit
	ret	nz              ; vertical overflow test
	sub	e
	dec	a
	ld	e,a
	ld	(KOORDY),de     ; -y -> KOORDY
	di
	ld	(SAVESP),sp
	ld	sp,STACK
	ld	bc,W_C036
	call	XBIOS
        dw      000E9h
	ld	sp,(SAVESP)
	ei
	ret
W_C036	ld	hl,(KOORDY)
	add	hl,hl
	ld	de,ROLLER
	add	hl,de
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	ld	a,e
	and	B_F8
	sla	a
	rl	d
	ld	b,a
	ld	a,e
	and	B_07
	or	b
	ld	e,a
	ld	hl,(KOORDX)
	ld	b,l
	ld	a,l
	and	B_F8
	ld	l,a
	ex	de,hl
	add	hl,de
	ld	a,b
	and	B_07
	inc	a
	ld	b,a
	xor	a
	scf
L_C05F	rra
	djnz	L_C05F
	ld	b,a
	ld	a,(FARBE)
	and	a
	jr	nz,L_C06E
	ld	a,b
	cpl
	and	(hl)
	ld	(hl),a
	ret
L_C06E	dec	a
	ld	a,b
	jr	nz,L_C075
	or	(hl)
	ld	(hl),a
	ret
L_C075	xor	(hl)
	ld	(hl),a
	ret

KOORDX	dw      0
KOORDY  dw      0
FARBE   dw      1
SAVESP  dw      0
STKEND  dw      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
STACK   dw      0

Benutzeravatar
PCWerner
Beiträge: 7
Registriert: 10.02.2015, 15:25

Re: Grafikroutinen für BASIC

Beitrag von PCWerner » 17.02.2015, 13:46

Moin,

in der englischen Zeitschrift 8000Plus wurden seinerzeit etliche BASIC-Programme abgedruckt, die sich auch mit der Grafikausgabe befassen.

Ich bin derzeit dabei, einige Artikel in das WEB zu hängen. Einer dieser Artikel, der Grafik ausgibt, findet sich unter http://www.cirsovius.de/CPM/Projekte/Ar ... dDraw.html.

Gruß,
Werner

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast