xref: /netbsd/sys/arch/x68k/stand/libsa/putimage.S (revision bf9ec67e)
1| file: putimage.S
2| author: Yasha(itohy@netbsd.org)
3|
4| $NetBSD: putimage.S,v 1.1 2001/09/30 15:54:38 minoura Exp $
5
6#include <machine/asm.h>
7#include "iocscall.h"
8
9# define IMGWIDTH	56
10# define IMGHEIGHT	52
11|
12|	display title image
13|
14ENTRY_NOPROFILE(put_image)
15		link	%a6,#-(IMGWIDTH*IMGHEIGHT/8*2+8)| make local buffer
16		moveal	%sp,%a1				| buffer (plane #0) top
17		moveml	%d2-%d7/%a2-%a4,%sp@-
18
19		lea	%a1@(IMGWIDTH*IMGHEIGHT/8+4),%a4| buffer (plane #1) top
20		movel	#IMGWIDTH*0x10000+IMGHEIGHT,%a1@| image size
21		movel	%a1@+,%a4@+
22
23		lea	%pc@(img_title),%a2
24		moveaw	%a2@+,%a3		| only the lower word is valid
25
261:		tstb	%a2@+			| skip human readable comment
27		jne	1b
28		lea	%a2@(4),%a0		| image data here
29
30		moveq	#0,%d2			| (b) now have 0bit
31		moveq	#0,%d3			| (w) input bit buffer
32
33		moveq	#16,%d4			| (b) output bit count
34		moveq	#IMGWIDTH*IMGHEIGHT/16+0xffffff00,%d7
35
36		| d2.b: # bits in input buffer
37		| d3.w: input buffer
38		| d4.b: # bits in output buffer
39		| d5.w: output buffer for plane 0
40		| d6.w: output buffer for plane 1
41		| d7.b: size count
42		| a0: input data pointer
43
44Lrunlen:	| a run entry:
45		|	value	 (2bit)
46		|	length-1 (3bit)
47		subqb	#5,%d2		| have enough bits?
48		jcc	Lhave5b		| yes
49		| fill byte
50		cmpaw	%a0,%a3		| the register order is significant
51					| for word comparison
52		beq	Lrxabort
531:		moveb	%a0@+,%d0
54		addqb	#8,%d2		| d2: 3: have 0bit, ..., 7: have 4bit
55		lslw	#8,%d0		| clear unused bits
56		lsrw	%d2,%d0
57		orw	%d0,%d3
58
59Lhave5b:	| field# 19 20 21 22 23 24 25 26 27 28 29 30 31
60		| d3: ... v  v  l  l  l  ?  ?  ?  ?  ?  ?  ?  0
61		bfexts	%d3{#19,#2},%d0	| value
62		bfextu	%d3{#21,#3},%d1	| length - 1
63		lslw	#5,%d3
64
65Lrxloop:	lslw	#2,%d6
66		bfins	%d0,%d6{#30,#2}
67		roxrw	#1,%d6
68		roxlw	#1,%d5
69		subqb	#1,%d4
70		jne	1f
71		moveq	#16,%d4
72		movew	%d5,%a1@+
73		movew	%d6,%a4@+
74		subqb	#1,%d7		| end?
751:		dbeq	%d1,Lrxloop	| fall down if end
76		jne	Lrunlen		| fall down if end
77
78		moveq	#1,%d1
79		movew	%a2@+,%d2
80		IOCS(__TPALET2)
81		moveq	#2,%d1
82		movew	%a2@,%d2
83		IOCS(__TPALET2)
84
85|		moveq	#0x02,%d1	| plane 1 (already have it)
86		IOCS(__TCOLOR)
87		movel	%a6@(8),%d1
88		movel	%a6@(12),%d2
89		IOCS(__TEXTPUT)
90		moveq	#0x01,%d1	| plane 0
91		IOCS(__TCOLOR)
92		movel	%a6@(8),%d1
93		lea	%a6@(-(IMGWIDTH*IMGHEIGHT/8*2+8)),%a1
94		IOCS(__TEXTPUT)
95
96Lrxabort:	moveml	%sp@+,%d2-%d7/%a2-%a4
97		unlk	%a6
98		rts
99
100img_title:
101	.word	imgend1
102	| compressed image data
103
104	| BSD Daemon Image, used for NetBSD boot by permission.
105	| (Thanks for permission!)
106
107	| BSD Daemon Copyright 1988 by Marshall Kirk McKusick.
108	| All Rights Reserved.
109	|
110	| Permission to use the daemon may be obtained from:
111	|     Marshall Kirk McKusick
112	|     1614 Oxford St
113	|     Berkeley, CA 94709-1608
114	|     USA
115	| or via email at mckusick@mckusick.com
116
117	| Human readable copyright notice to be found with strings(1).
118	| Terminate with a nul character.
119
120	.asciz	"\nBSD Daemon Copyright 1988 by Marshall Kirk McKusick."
121
122	.word	0x5295,0xAD6A		| palet1, palet2
123	.word	0x39c3,0x0c1c,0xd039,0xce71,0xa327,0x3830,0x739c,0xe146
124	.word	0x6073,0x8227,0x39ce,0x0865,0x0738,0x2184,0x1ce7,0x3233
125	.word	0x049c,0xe88a,0x0e73,0x9618,0x8271,0x0486,0x6646,0x2093
126	.word	0x9ce4,0xcc12,0x1461,0x1622,0x3104,0x9ce7,0x2653,0x10e2
127	.word	0x4158,0x91a8,0x24e7,0x38d1,0x9807,0x00c8,0x7216,0x6a29
128	.word	0x39ce,0x4440,0x1906,0x4190,0xe031,0xe452,0x739c,0x9006
129	.word	0x8180,0xec18,0x0221,0xc8a0,0xe739,0xb60c,0x0380,0xdc35
130	.word	0x149c,0xe724,0x01b0,0x601d,0x062c,0x939c,0xe6c8,0x700c
131	.word	0x0b60,0xcc58,0x739c,0xf81e,0x09a0,0x6a49,0x39ce,0x6803
132	.word	0x00c0,0x701c,0x0740,0xd4d0,0x739c,0xd806,0x0100,0xe038
133	.word	0x0e81,0xb924,0xe726,0x0d0c,0x20e2,0xc839,0x249c,0xe4c4
134	.word	0x0ba4,0x0b42,0xc811,0xc920,0xe73c,0x070e,0x0383,0x44b5
135	.word	0x241c,0xe3c8,0x6228,0x701b,0x023f,0x8924,0xe726,0x0501
136	.word	0xc301,0xc8d3,0xfc49,0x0739,0xa01c,0x1219,0x0fc9,0x8924
137	.word	0xe716,0x2028,0x64a8,0xc441,0xc147,0x3249,0xce4c,0x0e38
138	.word	0x2a24,0x58ea,0x4939,0xcd00,0xe208,0x860a,0x8bea,0x0c39
139	.word	0xce09,0x0608,0x8e10,0x3449,0x1aa2,0x4e73,0x9d3a,0x4111
140	.word	0xfc45,0x2739,0xcb0c,0xa308,0x0205,0x0fea,0x2939,0xce4d
141	.word	0x2030,0x4823,0xfdc1,0x4739,0xc68c,0x4100,0x4490,0x0c8f
142	.word	0x70cc,0x5473,0x9ce0,0x8a22,0x1866,0x078a,0x4e72,0x6c7b
143	.word	0x0260,0x9e03,0xc148,0x780f,0xc090,0xc970,0x04c5,0x5c06
144	.word	0x45a1,0x641a,0x0e47,0xa1ec,0x7903,0xd03c,0x8310,0x0643
145	.word	0x91e0,0x3926,0x47b1,0xe408,0x3e05,0x9044,0x190e,0x4780
146	.word	0xe49a,0x0c38,0x2c1c,0x390e,0x8100,0x683a,0x2689,0xa0c3
147	.word	0x00d0,0x722d,0x0780,0xc8b4,0x2d8f,0x25d0,0x721c,0x8720
148	.word	0xc872,0x1c8b,0xa5d8,0xb25d,0x0721,0xd032,0x0c87,0x21c8
149	.word	0xb22c,0x8141,0xd872,0x5c86,0x1916,0xc190,0xe43a,0x0e81
150	.word	0x0403,0x2188,0x740d,0x1341,0xc8f6,0x0d8f,0x22d0,0x220c
151	.word	0x8300,0x9032,0x0c97,0x300e,0x49a0,0x6478,0x0645,0x91e8
152	.word	0x1816,0x0190,0x647b,0x1649,0x90e8,0x380e,0x4180,0x645a
153	.word	0x0e83,0x90e4,0x3b1e,0xc981,0x6c79,0x07c5,0xd0f8,0x2939
154	.word	0xc523,0x8946,0x820d,0x0c45,0x070f,0x6192,0xde08,0x3832
155	.word	0x0572,0x083c,0x3920,0x721a,0x9ac8,0x8868,0xf889,0xc160
156	.word	0x4377,0x8a84,0x88ee,0xd891,0xc2b0,0x2200,0xb2a2,0xa1c3
157	.word	0x10dc,0x1564,0x1ce3,0x79c6,0x9022,0x2258,0x1073,0x9ce7
158	.word	0x2a20,0x701c
159	.even
160imgend1:
161