3.Text Routine

Hits: 3809

Display text on screen

More
Tags
Author: aLpHa oNe
Submitted by: musashi9
Date: 2006-01-31 20:59
No tags
; Setting up a simple copperlist + 1 Bitplane + 
; a simple Textengine!  No (c)ode by aLpHa oNe
; =============================================

	section	flashtro,code_c

	move.l 4.w,a6		; Get base of exec lib
	lea gfxlib(pc),a1	; Adress of gfxlib string to a1
	jsr -408(a6)		; Call OpenLibrary()
	move.l d0,gfxbase	; Save base of graphics.library
	move.l #bitplane,d0	; Get adress of our bitplane...
	move.w d0,bplptr+6	; ...and set up bitplaneregs in copperlist
	swap d0			;
	move.w d0,bplptr+2	;
	move.l #cop,$dff080	; Set new copperlist

	move.l #text,a0		; Adress of our text to a0
	move.l #0,d0		; Start X Value
	move.l #90,d1		; Start Y Value
	bsr.w print		; Call Textroutine

mouse:	btst #6,$bfe001		; Left mouse clicked ?
	bne.b mouse		; No, continue loop!

	move.l gfxbase(pc),a1	; Base of graphics.library to a1
	move.l 38(a1),$dff080	; Restore old copperlist
	jsr -414(a6)		; Call CloseLibrary()
	moveq #0,d0		; Over..
	rts			; and out!

; Little Textout-Routine, not optimised, just for explanation
; A0 = ptr to text, D0 = Start X Value, D1 = Start Y Value

print:	move.b (a0)+,d3		; Get current letter
	cmp.b #1,d3		; Check for newline? 
	bne.b nope		; Nah? Continue...
	moveq #0,d0		; Otherwise.., X Value = 0 again and
	addq.l #8,d1		; Y Value + 9
	bra.b print		; Start from beginning
nope:	tst.b d3		; End of text reached?
	beq.b later		; Okay, quit print routine
	lea chartab(pc),a1	; Adress of chartab to a1
	moveq #0,d2		; Counter
search:	cmp.b (a1,d2),d3	; Find letter in chartab
	beq.b foundit		; Letter found? Go on...
	addq.l #1,d2		; ..else increase counter
	bra.b search		; and continue searching
foundit:lsl.l #3,d2		; counter*8 = correct offset to charbuffer
	lea chars(pc),a3	; Address of chars to a3
	add.l d2,a3		; + offset to correct letter
	lea bitplane(pc),a2	; Address of bitplane to a2
	move.l d1,d2		; Current Y Value to d2
	muls.w #40,d2		; Multiply Y Value by 40...
	add.l d0,d2		; ... + X Value 	
	add.l d2,a2		; a2 now points to correct x/y position
	moveq #8-1,d2		; Height of chars (-1 coz we use dbf loop)
copy:	move.b (a3)+,(a2)	; Copy the letter
	add.l #40,a2		; 
	dbf d2,copy		;
	addq.l #1,d0		; Increase X Value
	bra.b print		; Continue with next letter
later:	rts			; Return to where we came from ;)

; Stuff
; *****

cop:		dc.w	$0106,$0000,$01fc,$0000		; AGA compatible
		dc.w	$008e,$1a64,$0090,$ffc4		; Setting up display,
		dc.w	$0092,$0038,$0094,$00d0		; modulo and so on
		dc.w	$0102,$0000,$0104,$0000
		dc.w	$0106,$0000,$0108,$0000
		dc.w	$0120,$0000,$0122,$0000		; Clear spriteptrs
		dc.w	$0124,$0000,$0126,$0000
		dc.w	$0128,$0000,$012a,$0000
		dc.w	$012c,$0000,$012e,$0000
		dc.w	$0130,$0000,$0132,$0000
		dc.w	$0134,$0000,$0136,$0000
		dc.w	$0138,$0000,$013a,$0000
		dc.w	$013c,$0000,$013e,$0000
		dc.w	$0100,$1200			; 1 Bitplane
bplptr:		dc.w	$00e0,$0000			; Adress of bpl
		dc.w	$00e2,$0000
		dc.w	$0180,$0000			; Color00 = black
		dc.w	$0182,$0fae			; Color01 = pink?
		dc.w	$ffff,$fffe

text:		dc.b	"       * simple textroutine *",1
		dc.b	1
		dc.b	"          flashtro rulez!!",0

chartab: 	dc.b 	"abcdefghijklmnopqrstuvwxyz!"	; chars as they appear
		dc.b 	"0123456789*-. "		; in our char table

chars:		dc.b	$00,$7C,$E6,$E6,$FE,$E6,$E6,$06	;"A"
		dc.b	$00,$FC,$E6,$FC,$E6,$E6,$FC,$00	;"B"
		dc.b	$00,$7E,$E6,$E0,$E0,$E6,$7E,$00	;"C"
		dc.b	$00,$FC,$E6,$E6,$E6,$E6,$FC,$00	;"D"
		dc.b	$00,$FE,$E6,$F8,$E0,$E6,$FE,$00	;"E"
		dc.b	$00,$FE,$E6,$F8,$E0,$E0,$E0,$E0	;"F"
		dc.b	$00,$7C,$E0,$EE,$E6,$E6,$7E,$00	;"G"
		dc.b	$E0,$E6,$E6,$FE,$E6,$E6,$E6,$06	;"H"
		dc.b	$00,$FE,$38,$38,$38,$38,$FE,$00	;"I"
		dc.b	$0E,$0E,$0E,$0E,$0E,$CE,$7C,$00	;"J"
		dc.b	$E0,$EE,$FC,$F8,$FC,$EE,$E6,$06	;"K"
		dc.b	$E0,$E0,$E0,$E0,$E0,$E6,$FE,$00	;"L"
		dc.b	$00,$C6,$EE,$FE,$F6,$E6,$E6,$06	;"M"
		dc.b	$06,$C6,$E6,$F6,$FE,$EE,$E6,$E0	;"N"
		dc.b	$00,$7C,$E6,$E6,$E6,$E6,$7C,$00	;"O"
		dc.b	$00,$FC,$E6,$E6,$FC,$E0,$E0,$E0	;"P"
		dc.b	$00,$7C,$E6,$E6,$FA,$EC,$76,$06	;"Q"
		dc.b	$00,$FC,$E6,$E6,$FC,$E6,$E6,$06	;"R"
		dc.b	$00,$3C,$70,$3C,$0E,$CE,$FC,$00	;"S"
		dc.b	$00,$FE,$38,$38,$38,$38,$38,$38	;"T"
		dc.b	$E0,$E6,$E6,$E6,$E6,$E6,$7C,$00	;"U"
		dc.b	$E0,$E6,$E6,$E6,$6C,$38,$10,$00	;"V"
		dc.b	$E0,$E6,$E6,$F6,$FE,$EE,$44,$00	;"W"
		dc.b	$C0,$EE,$7C,$38,$7C,$E6,$E6,$06	;"X"
		dc.b	$E0,$E6,$E6,$7C,$38,$38,$38,$38	;"Y"
		dc.b	$00,$FE,$CE,$1C,$70,$E6,$FE,$00	;"Z"
		dc.b	$38,$38,$38,$38,$38,$00,$38,$00	;"!"
		dc.b	$00,$7C,$E6,$EE,$F6,$E6,$7C,$00	;"0"
		dc.b	$00,$F8,$38,$38,$38,$38,$FE,$00	;"1"
		dc.b	$00,$7C,$0E,$7C,$E0,$E6,$FE,$00	;"2"
		dc.b	$00,$FC,$CE,$3C,$0E,$CE,$FC,$00	;"3"
		dc.b	$00,$0E,$1E,$3E,$6E,$FE,$0E,$0E	;"4"
		dc.b	$00,$FC,$E0,$FC,$0E,$CE,$FC,$00	;"5"
		dc.b	$00,$7C,$E0,$FC,$E6,$E6,$7C,$00	;"6"
		dc.b	$00,$FE,$CE,$1C,$38,$38,$38,$38	;"7"
		dc.b	$00,$7C,$E6,$7C,$E6,$E6,$7C,$00	;"8"
		dc.b	$00,$7C,$CE,$CE,$7E,$0E,$7C,$00	;"9"
		dc.b	$00,$66,$FF,$FF,$7E,$3C,$18,$00	;"*"
		dc.b	$00,$00,$00,$00,$FE,$00,$00,$00	;"-"
		dc.b	$00,$00,$00,$00,$00,$38,$38,$00	;"."
		dc.b	$00,$00,$00,$00,$00,$00,$00,$00 ;" "

bitplane:	blk.b	10240,0				; Space for one
							; 320x256 bitplane
							; 40 bytes each row
							; (320 bits/pixels)
gfxlib:		dc.b	"graphics.library",0
gfxbase:	dc.l	0
FileDownload: 3.Text Routine
Filesize: 0KB, downloaded 1139 times
Powered by the best online Amiga mod player: FLOD


Some more you may like:
5. A text scrollerText IntroText Scrolly

Comments

Leave a Comment!

Name:
: Use this calculator
Your comment will be available for editing for 10 minutes
2006-02-01 10:10
Avatar

1. stu writes

change to mode 13

mov ax,13
int 10h

change the border and background on a commodore 64
poke 543280,0: poke 543281,0

thats about all i remember :)
reply
2006-02-01 10:13
Avatar

2. stu writes

btw can you compiler this with tasm.exe ?
reply
2006-02-01 10:16
Avatar

3. aLpHa oNe writes

This is amiga, stu ;)
reply
2006-02-01 10:20
Avatar

4. stu writes

so sad i missed the golden years and ended up on a 386
reply