;
;------ graphics.library ------
;
Text                 = -30 - 30
InitRastPort         = -30 -168
SetAPen              = -30 -312
InitBitMap           = -30 -360
ScrollRaster         = -30 -366
;
;-------- exec.library --------
;
execbase             =        4
;
Forbid               = -30 -102
Permit               = -30 -108
AllocMem             = -30 -168
FreeMem              = -30 -180
OldOpenLibrary       = -30 -378
CloseLibrary         = -30 -384
;
;------------------------------
;
start:	move.l execbase,a6	;execstructure
	lea    gfxname,a1	;gfxname
	jsr    OldOpenLibrary(a6)	;open library
	move.l d0,gfxbase	;save libraryhandle
	beq.l  no_gfxbase	;no ???

	move.l execbase,a6	;execstructure
	move.l #400*300/8,d0	;bytes for
	mulu   #2,d0		;2 planes
	move.l #$10002,d1	;modus for chipmem
	jsr    AllocMem(a6)	;alloc memory
	move.l d0,bit_adress	;save bitmap_adress
	beq.l  no_bitmap	;no ???

	move.l bit_adress,d0	;
	move.l d0,d1		;
	add.l  #400*300/8,d1	;add one plane
	move.w d0,p1lo		;first word to start plane1 -lo-
	move.w d1,p2lo		;first word to start plane2 -lo-
	swap   d0		;
	swap   d1		;
	move.w d0,p1hi		;second word to start plane1 -hi-
	move.w d1,p2hi		;second word to start plane2 -hi-

	move.l #copsize+2,d0	;coppersize+2
	move.l #$10002,d1	;modus for chipmem
	jsr    AllocMem(a6)	;alloc memory
	move.l d0,cop_adress	;save copper_adress
	beq.l  no_copper	;no ???

	move.l gfxbase,a6	;gfxhandle
	lea    bitmap,a0	;bitmapstructure
	move.b #2,d0		;depth 2 planes 4colors
	move.w #400,d1		;width 400 points
	move.w #300,d2		;height 300 points
	jsr    InitBitMap(a6)	;initialize bitmapstructure

	move.l bit_adress,a0	;
	move.l a0,a1		;
	add.l  #400*300/8,a1	;add 1 plane
	move.l a0,plane1	;start plane1
	move.l a1,plane2	;start plane2

	lea    rastport,a1	;rastportstructure
	jsr    InitRastPort(a6)	;initialize rastportstructure
	move.l #bitmap,r_bitmap	;bitmap to rastport

copy_copper:
	move.l #copper,a0	;copper
	move.l cop_adress,a1	;where must be the copper
	move.w #copsize-1,d0	;
coloop:	move.b (a0)+,(a1)+	;let's try
	dbf    d0,coloop	;it !!!

	move.l #scrolltext,text_ptr

	move.l execbase,a6	;execstructure
	jsr    Forbid(a6)	;stop all task

	move.l gfxbase,a0	;gfxstructure
	move.w #$4000,$dff09a	;stop interrupt
	move.w #$0080,$dff096	;stop copper
	move.l $6c,oldirq	;save irqvector
	move.l #interrupt,$6c	;newirq
	move.l 50(a0),oldcopper	;save copperirq
	move.l cop_adress,50(a0);newcopper
	move.w #$86c0,$dff096	;start copper
	move.w #$c000,$dff09a	;start irq

wait:	btst   #6,$bfe001	;wait left mousbutton
	beq.s  quit		;yes ???
	btst   #10,$dff016	;wait right mousebutton
	bne.s  wait		;no ???

quit:	move.l gfxbase,a0	;gfxbasestructure
	move.w #$4000,$dff09a	;stop irq
	move.w #$0080,$dff096	;stop copper
	move.l oldirq,$6c	;restore oldirq
	move.l oldcopper,50(a0)	;restore oldcopper
	move.w #$8080,$dff096	;start copper
	move.w #$c000,$dff09a	;start irq

	move.l execbase,a6	;execstructure
	jsr    Permit(a6)	;start all tasks

	move.l execbase,a6	;execstructure
	move.l cop_adress,a1	;copper_adress
	move.l #copsize+2,d0	;coppersize+2
	jsr    FreeMem(a6)	;free memory
no_copper:
	move.l execbase,a6	;execstructure
	move.l bit_adress,a1	;bitmap_adress
	move.l #400*300/8,d0	;bytes for
	mulu   #2,d0		;2 planes
	jsr    FreeMem(a6)	;free memory
no_bitmap:
	move.l execbase,a6	;execstructure
	move.l gfxbase,a1	;gfxstructure
	jsr    CloseLibrary(a6)	;close library
no_gfxbase:
	clr.l  d0		;must be 0 for the CLI-command
	rts			;rts

interrupt:
	move   SR,-(a7)			;save SR
	movem.l a0-a6/d0-d7,-(a7)	;save a0-a6 & d0-d7

	bsr.s  scroll

	movem.l (a7)+,a0-a6/d0-d7	;restore a0-a6 & d0-d7
	move   (a7)+,SR			;restore SR

	dc.w   $4ef9			;code for >>> jmp <<<
oldirq:	dc.l   0

scroll:	btst   #14,$dff002		;wait for blitter
	bne.s  scroll			;no ???
	move.l bit_adress,a0		;bitmap-adress
	add.l  #48*121,a0		;add y 121*48words
	move.l a0,a1			;
	move.l a0,a2			;
	add.l  #400*300/8,a2		;add 1 plane
	move.l a2,a3			;
	sub.l  #$00000002,a1		;sub 2 bytes
	sub.l  #$00000002,a3		;sub 2 bytes
	move.l a0,$dff050		;plane1 blitter source a
	move.l a1,$dff054		;plane1 blitter destination d
	move.l #$00000000,$dff064	;modulo source a dest. b
	move.l #$f9f00000,$dff040	;controll blitter
	move.l #$ffffffff,$dff044	;mask for blitting
	move.w #$0512,$dff058		;blitter-size
	move.l a2,$dff050
	move.l a3,$dff054
	move.l #$00000000,$dff064
	move.l #$f9f00000,$dff040
	move.l #$ffffffff,$dff044
	move.w #$0512,$dff058	
	move.w #0,cursorx		;set x position
	move.w #123,cursory		;set y position
	move.l gfxbase,a6		;graphic.library structure
	lea    rastport,a1		;rastport-structure
	lea    text2,a0			;text pointer
	move.w #$0003,d0		;only one char
	jsr    Text(a6)			;
	subi.b #$0001,distance		;distance = 0
	bne.s  end_scroll		;no ???
	move.w #374,cursorx		;set x position
	move.w #123,cursory		;set y position
	move.l gfxbase,a6		;graphics.library structure
	lea    rastport,a1		;rastport-structure
	move.b #$01,d0			;text color1
	jsr    SetAPen(a6)
	lea    rastport,a1		;rastport-structure
	move.l text_ptr,a0		;text pointer
	move.w #$0001,d0		;only one char
	jsr    Text(a6)			;
	move.b #$09,distance		;
	add.l  #1,text_ptr		;
	cmp.l  #textend,text_ptr	;compare
	bne.s  end_scroll		;no ???
	move.l #scrolltext,text_ptr	;restore old textadress
end_scroll:
	addi.b #$01,speed		;speed + 1
	cmpi.b #$03,speed		;speed = 3
	bne.l  scroll			;no ???
	clr.b  speed			;clear speed
	rts				;rts

gfxname:	dc.b "graphics.library",0
even

gfxbase:	dc.l 0
bit_adress:	dc.l 0
cop_adress:	dc.l 0
text_ptr:	dc.l 0
oldcopper:	dc.l 0

distance:	dc.b 0
speed:		dc.b 0

bitmap:		blk.l 2,0
plane1:		blk.l 1,0
plane2:		blk.l 7,0

rastport:	dc.l 0		;pointer at layerstructure
r_bitmap:	dc.l 0		;   "    at bitmapstructure
aereafill:	dc.l 0		;   "    at aereafill
tmp_ras:	dc.l 0		;   "    at tmprasstrucure
aereainfo:	dc.l 0		;   "    at aereainfostructure
gelsinfo:	dc.l 0		;   "    at gelsinfostructure
		dc.b 0		;
apen:		dc.b 0		;color for a-pen voreground
bpen:		dc.b 0		;color for b-pen background
open:		dc.b 0		;color for aereafill a.s.o.
z_modus:	dc.b 0		;0 = jam1
				;1 = jam2
				;2 = complement
				;4 = inverse
aereaptsz:	dc.b 0		;for aereafill
no_operat:	dc.b 0
ldpp:		dc.b 0		;draw line pattern preshift
controll_bit:	dc.w 0		;1 = first dot
				;2 = one dot
				;4 = doublebuffer
lineptrn:	dc.w 0		;line pattern 16 bits
cursorx:	dc.w 0		;x position (cursor)
cursory:	dc.w 0		;y position (cursor)
minterm:	blk.b 8,0	;minterms
c_widgh:	dc.w 0		;cursor width
c_height:	dc.w 0		;cursor height
cpointer:	dc.l 0		;pointer at charsetgenerator
charmodus:	dc.b 0		;0 = normal
				;1 = underline
				;2 = big
				;3 = big & underline
				;4 = kursiv
				;5 = kursiv & underline
flags:		dc.b 0		;???
charhight:	dc.w 0		;charset height
charwidth:	dc.w 0		;charset width
textheight:	dc.w 0		;text height
chard:		dc.w 0		;chardistance
userdata:	dc.l 0		;pointer
		blk.w 7,0	;reserved
		blk.l 2,0	;reserved
		blk.b 8,0	;reserved

copper:	dc.w $008e,$2c81	;diw-start
	dc.w $0090,$74f1	;diw-stop
	dc.w $0092,$0028	;ddf-start
	dc.w $0094,$00d8	;ddf-stop
	dc.w $00e0		;startadress plane1 -hi-
p1hi:	dc.w $0000
	dc.w $00e2		;startadress plane1 -lo-
p1lo:	dc.w $0000
	dc.w $00e4		;startadress plane2 -hi-
p2hi:	dc.w $0000
	dc.w $00e6		;startadress plane2 -lo-
p2lo:	dc.w $0000
	dc.w $0100,$2200	;2 planes/color %0011001100000000
	dc.w $0102,$0000	;no scroll %0000000000000000
	dc.w $0104,$0000	;no double playfielfd 0000000000000000
	dc.w $0108,$0004	;modulo for planes
	dc.w $010a,$0004	;modulo for planes
	dc.w $0120,$0000	;startadress sprite1 -hi-
	dc.w $0122,$0000	;startadress sprite1 -lo-
	dc.w $0180,$0000	;color0 background = $0000 (black)
	dc.w $0182,$0000	;color1 text = $0ccc (grey)
	dc.w $0184,$0666	;color2 text = $0666 (grey)
	dc.w $0186,$0999	;color3 text = $0999 (grey)
	dc.w $9b07,$fffe	;copper-wait
	dc.w $0180,$0bbb	;color0 = $0bbb (grey)
	dc.w $9e07,$fffe	;copper-wait
	dc.w $0180,$0888	;color0 = $0888 (grey)
	dc.w $ab07,$fffe	;copper-wait
	dc.w $0180,$0555	;color0 = $0555 (grey)
	dc.w $ae07,$fffe	;copper-wait
	dc.w $0180,$0000	;color0 = $0000 (black)
	dc.w $ffff,$fffe	;copper-end must be $ffff,$fffe
copend:

copsize = copend - copper

scrolltext:	dc.b "Hiya Kim, how are u ???        "
		dc.b "  Here I send u u're disks back and "
		dc.b "I hope, that u like this little scroller."
		dc.b "            It's written with SEKA in "
		dc.b "68000...           Load it, and read "
		dc.b "what I've explain.                Bye,"
		dc.b "bye, bye.                        P.S."
		dc.b " hope that I hear from u soon !!!!   "
		dc.b "                                     "
		dc.b "                                     "
textend:
text2:		dc.b "   "
