; ----------------------------------------------
;
; Program....: PLOT.S
; Programmør.: Kenneth Jensen
;
;
; Her er så vores lille plot rutine. 
; Den er meget simple at bruge, da man bare
; skal tilskrive variablerne x og y med værdier
; og derefter kalde tegn. Se nedenstående 
; eksempel.
;
; ----------------------------------------------
S:

	Bsr	Find_Skarm	; Skærm adresse findes.

	Move.w	#607,x		; Her sættes x og y
	Move.w	#250,y          ; værdi, og der tegnes
	Bsr	tegn		; en pixel.


;----------------------------------------
; Hovedprogram
;----------------------------------------
Hoved_Program:

	Cmp.b	#$bc,$bfe001	; Test v. muse knap.
	Beq	Slut_Program	; Hvis nedtrykt da slut.

	Bra	Hoved_Program	; Hop til hovedprogram.
;---------------------------------------------------



;---------------------------------------------------
; Her afsluttes programmet.
;---------------------------------------------------
Slut_Program:
	clr.l	d0
	rts
;---------------------------------------------------


;---------------------------------------------------
; Her findes skærmens adresse, og den lagres i
; variablen <screen>.
;---------------------------------------------------
Find_Skarm:

	Move.l	4,a6		; Execbase
	Move.l	156(a6),a1	; Graphics library adresse i a1
	Move.l	50(a1),a0	; System copperlist 2

	Move.w	122(a0),d0	;
	Swap	d0		; Hent skærm adresse i d0
	Move.w	126(a0),d0	;

	Move.l	d0,screen	; Flyt skærm adresse til a1

	Rts
;---------------------------------------------------

;----------------------------------------
; Tegne rutinen.
;----------------------------------------
Tegn:
	Movem.l	d0-d7/a0-a1,-(sp)  ; Red registre.
	Clr.l	d0		   ; 
	Clr.l	d1                 ;
	Clr.l	d2                 ; Clear registre.
	Clr.l	d3                 ;
	Clr.l	d4                 ;
	Move.l	screen,d0	   ; Flyt skærm adresse til D0.
	Move.w	y,d1		   ; Flyt y til D1.
	Mulu	#80,d1	           ; Gang D1 med 80.
	Add.l	d1,d0              ; Adder resultat til D0.
	Clr.l	d1                 ; Clear D1.
	Move.w	x,d1               ; Flyt x til D1.
	Divu	#8,d1              ; Find antal byte (divider med 8).
	Move.w	d1,d2              ; Flyt resultat til D2.
	Swap	d1                 ; Ombyt D1.
	Move.w	d1,d3              ; Flyt rest til D3.
	Add.w	d2,d0              ; Adder resultat (D2) til D0.
	Move.b	#%10000000,d4      ; Tænd kun bit 7 i D4.
	Lsr.b	d3,d4	           ; Skub denne bit svarende til rest.
	Move.l	d0,a1              ; Flyt nu D0 til A1.
	Or.b	d4,(a1)            ; Sæt endelig pixel på skærmen.
	Movem.l	(sp)+,d0-d7/a0-a1  ; De reddede registre flyttes
                                   ; tilbage.
	rts
;------------------------------

;----------------------------------------
; Slette rutinen
;----------------------------------------
Slet:

	Movem.l	d0-d7/a0-a1,-(sp)  ; Red registre.
	Clr.l	d0
	Clr.l	d1
	Clr.l	d2
	Clr.l	d3
	Clr.l	d4
	Move.l	screen,d0
	Move.w	y,d1
	Mulu	#80,d1
	Add.l	d1,d0
	Clr.l	d1
	Move.w	x,d1
	Divu	#8,d1
	Move.w	d1,d2
	Swap	d1
	Move.w	d1,d3
	Add.w	d2,d0
	Move.b	#%01111111,d4
	Ror.b	d3,d4
	Move.l	d0,a1
	And.b	d4,(a1)
	Movem.l	(sp)+,d0-d7/a0-a1  ; De reddede registre flyttes
                                   ; tilbage.

	Rts
;----------------------------------------

dc.w	0
x:	dc.w	0
y:	dc.w	0
a:	dc.w	0
screen:	dc.l	0
