1dbebecc2bf00530ce09b3658641d1514d807aeeenjn#
2dbebecc2bf00530ce09b3658641d1514d807aeeenjn#  linux_logo in ppc assembly language
3dbebecc2bf00530ce09b3658641d1514d807aeeenjn#    based on the code from ll_asm-0.36
4dbebecc2bf00530ce09b3658641d1514d807aeeenjn#
5dbebecc2bf00530ce09b3658641d1514d807aeeenjn#  By Vince Weaver <vince _at_ deater.net>
6dbebecc2bf00530ce09b3658641d1514d807aeeenjn#
7dbebecc2bf00530ce09b3658641d1514d807aeeenjn# Modified to remove non-deterministic system calls
8dbebecc2bf00530ce09b3658641d1514d807aeeenjn# And to avoid reading from /proc
9dbebecc2bf00530ce09b3658641d1514d807aeeenjn#
10dbebecc2bf00530ce09b3658641d1514d807aeeenjn
11dbebecc2bf00530ce09b3658641d1514d807aeeenjn# offsets into the results returned by the uname syscall
12dbebecc2bf00530ce09b3658641d1514d807aeeenjn.equ U_SYSNAME,0
13dbebecc2bf00530ce09b3658641d1514d807aeeenjn.equ U_NODENAME,65
14dbebecc2bf00530ce09b3658641d1514d807aeeenjn.equ U_RELEASE,65*2
15dbebecc2bf00530ce09b3658641d1514d807aeeenjn.equ U_VERSION,(65*3)
16dbebecc2bf00530ce09b3658641d1514d807aeeenjn.equ U_MACHINE,(65*4)
17dbebecc2bf00530ce09b3658641d1514d807aeeenjn.equ U_DOMAINNAME,65*5
18dbebecc2bf00530ce09b3658641d1514d807aeeenjn
19dbebecc2bf00530ce09b3658641d1514d807aeeenjn# offset into the SYSCALL_SYSINFO buffer
20dbebecc2bf00530ce09b3658641d1514d807aeeenjn.equ S_TOTALRAM,16
21dbebecc2bf00530ce09b3658641d1514d807aeeenjn
22dbebecc2bf00530ce09b3658641d1514d807aeeenjn# Sycscalls
23dbebecc2bf00530ce09b3658641d1514d807aeeenjn.equ SYSCALL_EXIT,     1
24dbebecc2bf00530ce09b3658641d1514d807aeeenjn#.equ SYSCALL_READ,     3
25dbebecc2bf00530ce09b3658641d1514d807aeeenjn.equ SYSCALL_WRITE,    4
26dbebecc2bf00530ce09b3658641d1514d807aeeenjn#.equ SYSCALL_OPEN,     5
27dbebecc2bf00530ce09b3658641d1514d807aeeenjn#.equ SYSCALL_CLOSE,    6
28dbebecc2bf00530ce09b3658641d1514d807aeeenjn#.equ SYSCALL_SYSINFO,116
29dbebecc2bf00530ce09b3658641d1514d807aeeenjn#.equ SYSCALL_UNAME,  122
30dbebecc2bf00530ce09b3658641d1514d807aeeenjn
31dbebecc2bf00530ce09b3658641d1514d807aeeenjn#
32dbebecc2bf00530ce09b3658641d1514d807aeeenjn.equ STDIN, 0
33dbebecc2bf00530ce09b3658641d1514d807aeeenjn.equ STDOUT,1
34dbebecc2bf00530ce09b3658641d1514d807aeeenjn.equ STDERR,2
35dbebecc2bf00530ce09b3658641d1514d807aeeenjn
36dbebecc2bf00530ce09b3658641d1514d807aeeenjn.equ BSS_BEGIN,25
37dbebecc2bf00530ce09b3658641d1514d807aeeenjn.equ DATA_BEGIN,26
38dbebecc2bf00530ce09b3658641d1514d807aeeenjn
39a47b3e46d7fb68b10e931a80ae05f7c4bf41434dflorian.include "logo.include"
40dbebecc2bf00530ce09b3658641d1514d807aeeenjn
41dbebecc2bf00530ce09b3658641d1514d807aeeenjn	.globl _start
42dbebecc2bf00530ce09b3658641d1514d807aeeenjn_start:
43dbebecc2bf00530ce09b3658641d1514d807aeeenjn
44dbebecc2bf00530ce09b3658641d1514d807aeeenjn        #========================
45dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# Initialization
46dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#========================
47dbebecc2bf00530ce09b3658641d1514d807aeeenjn
48dbebecc2bf00530ce09b3658641d1514d807aeeenjn
49dbebecc2bf00530ce09b3658641d1514d807aeeenjn#	eieio				# coolest opcode of all time ;)
50dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# not needed, but I had to put it here
51dbebecc2bf00530ce09b3658641d1514d807aeeenjn  	# the hack loading BSS_BEGIN and DATA_BEGIN
52dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# saves one instruction on any future load from memory
53dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# as we can just do an addi rather than an lis;addi
54dbebecc2bf00530ce09b3658641d1514d807aeeenjn
55dbebecc2bf00530ce09b3658641d1514d807aeeenjn	lis	25,bss_begin@ha
56dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	25,25,bss_begin@l
57dbebecc2bf00530ce09b3658641d1514d807aeeenjn
58dbebecc2bf00530ce09b3658641d1514d807aeeenjn	lis	26,data_begin@ha
59dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	26,26,data_begin@l
60dbebecc2bf00530ce09b3658641d1514d807aeeenjn
61dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	14,BSS_BEGIN,(out_buffer-bss_begin)
62dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# the output buffer
63dbebecc2bf00530ce09b3658641d1514d807aeeenjn
64dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	21,BSS_BEGIN,(text_buf-bss_begin)
65dbebecc2bf00530ce09b3658641d1514d807aeeenjn
66dbebecc2bf00530ce09b3658641d1514d807aeeenjn
67dbebecc2bf00530ce09b3658641d1514d807aeeenjn	mr	17,14		    	# store out-buffer for later
68dbebecc2bf00530ce09b3658641d1514d807aeeenjn
69dbebecc2bf00530ce09b3658641d1514d807aeeenjn        #=========================
70dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# PRINT LOGO
71dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#=========================
72dbebecc2bf00530ce09b3658641d1514d807aeeenjn
73dbebecc2bf00530ce09b3658641d1514d807aeeenjn# LZSS decompression algorithm implementation
74dbebecc2bf00530ce09b3658641d1514d807aeeenjn# by Stephan Walter 2002, based on LZSS.C by Haruhiko Okumura 1989
75dbebecc2bf00530ce09b3658641d1514d807aeeenjn# optimized some more by Vince Weaver
76dbebecc2bf00530ce09b3658641d1514d807aeeenjn
77dbebecc2bf00530ce09b3658641d1514d807aeeenjn
78dbebecc2bf00530ce09b3658641d1514d807aeeenjn	li	8,(N-F)			# grab "R"
79dbebecc2bf00530ce09b3658641d1514d807aeeenjn
80dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	9,DATA_BEGIN,(logo-data_begin)-1
81dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# logo_pointer
82dbebecc2bf00530ce09b3658641d1514d807aeeenjn
83dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	12,DATA_BEGIN,(logo_end-data_begin)-1
84dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# end of the logo
85dbebecc2bf00530ce09b3658641d1514d807aeeenjn
86dbebecc2bf00530ce09b3658641d1514d807aeeenjn
87dbebecc2bf00530ce09b3658641d1514d807aeeenjn	mr      16,17
88dbebecc2bf00530ce09b3658641d1514d807aeeenjn
89dbebecc2bf00530ce09b3658641d1514d807aeeenjndecompression_loop:
90dbebecc2bf00530ce09b3658641d1514d807aeeenjn	lbzu 	10,1(9)			# load in a byte
91dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# auto-update
92dbebecc2bf00530ce09b3658641d1514d807aeeenjn	mr	11,10			# copy to 11
93dbebecc2bf00530ce09b3658641d1514d807aeeenjn	ori	11,11,0xff00		# re-load top as a hackish
94dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# 8-bit counter
95dbebecc2bf00530ce09b3658641d1514d807aeeenjn
96dbebecc2bf00530ce09b3658641d1514d807aeeenjntest_flags:
97dbebecc2bf00530ce09b3658641d1514d807aeeenjn	cmpw	0,12,9			# have we reached the end?
98dbebecc2bf00530ce09b3658641d1514d807aeeenjn	ble	done_logo		# ! if so exit
99dbebecc2bf00530ce09b3658641d1514d807aeeenjn
100dbebecc2bf00530ce09b3658641d1514d807aeeenjn	andi.	13,11,0x1
101dbebecc2bf00530ce09b3658641d1514d807aeeenjn	srawi   11,11,1
102dbebecc2bf00530ce09b3658641d1514d807aeeenjn
103dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bne	0,discrete_char
104dbebecc2bf00530ce09b3658641d1514d807aeeenjn
105dbebecc2bf00530ce09b3658641d1514d807aeeenjnoffset_length:
106dbebecc2bf00530ce09b3658641d1514d807aeeenjn	lbzu  	10,1(9)
107dbebecc2bf00530ce09b3658641d1514d807aeeenjn	lbzu	24,1(9)
108dbebecc2bf00530ce09b3658641d1514d807aeeenjn	slwi	24,24,8
109dbebecc2bf00530ce09b3658641d1514d807aeeenjn	or	24,24,10
110dbebecc2bf00530ce09b3658641d1514d807aeeenjn
111dbebecc2bf00530ce09b3658641d1514d807aeeenjn	mr	10,24
112dbebecc2bf00530ce09b3658641d1514d807aeeenjn
113dbebecc2bf00530ce09b3658641d1514d807aeeenjn	srawi  15,10,P_BITS
114dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi   15,15,THRESHOLD+1 # cl = ax >> (P_BITS)+THRESH+1
115dbebecc2bf00530ce09b3658641d1514d807aeeenjn	       			 # = match length
116dbebecc2bf00530ce09b3658641d1514d807aeeenjn
117dbebecc2bf00530ce09b3658641d1514d807aeeenjnoutput_loop:
118dbebecc2bf00530ce09b3658641d1514d807aeeenjn	andi.  24,24,(POSITION_MASK<<8+0xff)	# mask it
119dbebecc2bf00530ce09b3658641d1514d807aeeenjn	lbzx   10,21,24
120dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi   24,24,1
121dbebecc2bf00530ce09b3658641d1514d807aeeenjn
122dbebecc2bf00530ce09b3658641d1514d807aeeenjnstore_byte:
123dbebecc2bf00530ce09b3658641d1514d807aeeenjn	stbu   10,1(16)
124dbebecc2bf00530ce09b3658641d1514d807aeeenjn
125dbebecc2bf00530ce09b3658641d1514d807aeeenjn	stbx    10,21,8
126dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	8,8,1
127dbebecc2bf00530ce09b3658641d1514d807aeeenjn	andi.	8,8,(N-1)
128dbebecc2bf00530ce09b3658641d1514d807aeeenjn
129dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addic.	15,15,-1
130dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bne	0,output_loop
131dbebecc2bf00530ce09b3658641d1514d807aeeenjn
132dbebecc2bf00530ce09b3658641d1514d807aeeenjn	andi.	13,11,0xff00
133dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bne	test_flags
134dbebecc2bf00530ce09b3658641d1514d807aeeenjn
135dbebecc2bf00530ce09b3658641d1514d807aeeenjn	b	decompression_loop
136dbebecc2bf00530ce09b3658641d1514d807aeeenjn
137dbebecc2bf00530ce09b3658641d1514d807aeeenjndiscrete_char:
138dbebecc2bf00530ce09b3658641d1514d807aeeenjn
139dbebecc2bf00530ce09b3658641d1514d807aeeenjn	lbzu    10,1(9)
140dbebecc2bf00530ce09b3658641d1514d807aeeenjn	li	15,1
141dbebecc2bf00530ce09b3658641d1514d807aeeenjn
142dbebecc2bf00530ce09b3658641d1514d807aeeenjn	b       store_byte
143dbebecc2bf00530ce09b3658641d1514d807aeeenjn
144dbebecc2bf00530ce09b3658641d1514d807aeeenjndone_logo:
145dbebecc2bf00530ce09b3658641d1514d807aeeenjn
146dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	4,17,1		# restore (plus one because r17 is decremented)
147dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl	write_stdout	# and print the logo
148dbebecc2bf00530ce09b3658641d1514d807aeeenjn
149dbebecc2bf00530ce09b3658641d1514d807aeeenjn
150dbebecc2bf00530ce09b3658641d1514d807aeeenjn        #==========================
151dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# First Line
152dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#==========================
153dbebecc2bf00530ce09b3658641d1514d807aeeenjn
154dbebecc2bf00530ce09b3658641d1514d807aeeenjn
155dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#==========================
156dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# PRINT VERSION
157dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#==========================
158dbebecc2bf00530ce09b3658641d1514d807aeeenjn
159dbebecc2bf00530ce09b3658641d1514d807aeeenjn#	li	0,SYSCALL_UNAME		# uname syscall
160dbebecc2bf00530ce09b3658641d1514d807aeeenjn#	addi	3,BSS_BEGIN,(uname_info-bss_begin)
161dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# uname struct
162dbebecc2bf00530ce09b3658641d1514d807aeeenjn#	sc				# do syscall
163dbebecc2bf00530ce09b3658641d1514d807aeeenjn
164dbebecc2bf00530ce09b3658641d1514d807aeeenjn
165dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	16,DATA_BEGIN,(uname_info-data_begin)+U_SYSNAME@l-1
166dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# os-name from uname "Linux"
167dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl	strcat
168dbebecc2bf00530ce09b3658641d1514d807aeeenjn
169dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	16,DATA_BEGIN,(ver_string-data_begin)-1
170dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# source is " Version "
171dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl 	strcat
172dbebecc2bf00530ce09b3658641d1514d807aeeenjn
173dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	16,DATA_BEGIN,(uname_info-data_begin)+U_RELEASE@l-1
174dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# version from uname "2.4.1"
175dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl 	strcat
176dbebecc2bf00530ce09b3658641d1514d807aeeenjn
177dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	16,DATA_BEGIN,(compiled_string-data_begin)-1
178dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# source is ", Compiled "
179dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl 	strcat
180dbebecc2bf00530ce09b3658641d1514d807aeeenjn
181dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	16,DATA_BEGIN,(uname_info-data_begin)+U_VERSION-1
182dbebecc2bf00530ce09b3658641d1514d807aeeenjn      					# compiled date
183dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl 	strcat
184dbebecc2bf00530ce09b3658641d1514d807aeeenjn
185dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl	center_and_print	# write it to screen
186dbebecc2bf00530ce09b3658641d1514d807aeeenjn
187dbebecc2bf00530ce09b3658641d1514d807aeeenjn
188dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#===============================
189dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# Middle-Line
190dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#===============================
191dbebecc2bf00530ce09b3658641d1514d807aeeenjn
192dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#=========
193dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# Load /proc/cpuinfo into buffer
194dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#=========
195dbebecc2bf00530ce09b3658641d1514d807aeeenjn
196dbebecc2bf00530ce09b3658641d1514d807aeeenjn#	li	0,SYSCALL_OPEN		# open()
197dbebecc2bf00530ce09b3658641d1514d807aeeenjn#	addi	3,DATA_BEGIN,(cpuinfo-data_begin)
198dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# '/proc/cpuinfo'
199dbebecc2bf00530ce09b3658641d1514d807aeeenjn#	li	4,0			# O_RDONLY <bits/fcntl.h>
200dbebecc2bf00530ce09b3658641d1514d807aeeenjn#	sc				# syscall.  fd in r0.
201dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# we should check that r0>=0
202dbebecc2bf00530ce09b3658641d1514d807aeeenjn
203dbebecc2bf00530ce09b3658641d1514d807aeeenjn#	mr	13,3			# save fd in r13
204dbebecc2bf00530ce09b3658641d1514d807aeeenjn
205dbebecc2bf00530ce09b3658641d1514d807aeeenjn#	li	0,SYSCALL_READ		# read
206dbebecc2bf00530ce09b3658641d1514d807aeeenjn#	addi	4,BSS_BEGIN,(disk_buffer-bss_begin)
207dbebecc2bf00530ce09b3658641d1514d807aeeenjn#	li	5,4096		 	# 4096 is maximum size of proc file ;)
208dbebecc2bf00530ce09b3658641d1514d807aeeenjn#	sc
209dbebecc2bf00530ce09b3658641d1514d807aeeenjn
210dbebecc2bf00530ce09b3658641d1514d807aeeenjn#	mr	3,13			# restore fd
211dbebecc2bf00530ce09b3658641d1514d807aeeenjn#	li	0,6			# close
212dbebecc2bf00530ce09b3658641d1514d807aeeenjn#	sc
213dbebecc2bf00530ce09b3658641d1514d807aeeenjn
214dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#=============
215dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# Number of CPUs
216dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#=============
217dbebecc2bf00530ce09b3658641d1514d807aeeenjn
218dbebecc2bf00530ce09b3658641d1514d807aeeenjn	mr	14,17 			# point output to out_buf
219dbebecc2bf00530ce09b3658641d1514d807aeeenjn
220dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# Assume 1 CPU for now
221dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# my iBook's /proc/cpuinfo does not have a "processor" line ???
222dbebecc2bf00530ce09b3658641d1514d807aeeenjn
223dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	16,DATA_BEGIN,(one-data_begin)-1
224dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl	strcat
225dbebecc2bf00530ce09b3658641d1514d807aeeenjn
226dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#=========
227dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# MHz
228dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#=========
229dbebecc2bf00530ce09b3658641d1514d807aeeenjn
230dbebecc2bf00530ce09b3658641d1514d807aeeenjn    	lis	20,('l'<<8)+'o'		# find 'lock ' and grab up to M
231dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	20,20,('c'<<8)+'k'
232dbebecc2bf00530ce09b3658641d1514d807aeeenjn	li	23,'M'
233dbebecc2bf00530ce09b3658641d1514d807aeeenjn   	bl	find_string
234dbebecc2bf00530ce09b3658641d1514d807aeeenjn
235dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	16,DATA_BEGIN,(megahertz-data_begin)-1
236dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# print 'MHz '
237dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl	strcat
238dbebecc2bf00530ce09b3658641d1514d807aeeenjn
239dbebecc2bf00530ce09b3658641d1514d807aeeenjn
240dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#=========
241dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# Chip Name
242dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#=========
243dbebecc2bf00530ce09b3658641d1514d807aeeenjn
244dbebecc2bf00530ce09b3658641d1514d807aeeenjn   	lis     20,('c'<<8)+'p'     	# find 'cpu\t: ' and grab up to \n
245dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	20,20,('u'<<8)+'\t'
246dbebecc2bf00530ce09b3658641d1514d807aeeenjn	li	23,'\n'
247dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl	find_string
248dbebecc2bf00530ce09b3658641d1514d807aeeenjn
249dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	16,DATA_BEGIN,(comma-data_begin)-1
250dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# print ', '
251dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl	strcat
252dbebecc2bf00530ce09b3658641d1514d807aeeenjn
253dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#========
254dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# RAM
255dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#========
256dbebecc2bf00530ce09b3658641d1514d807aeeenjn
257dbebecc2bf00530ce09b3658641d1514d807aeeenjn#	li	0,SYSCALL_SYSINFO	# sysinfo() syscall
258dbebecc2bf00530ce09b3658641d1514d807aeeenjn#	addi	3,BSS_BEGIN,(sysinfo_buff-bss_begin)
259dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# sysinfo_buffer
260dbebecc2bf00530ce09b3658641d1514d807aeeenjn
261dbebecc2bf00530ce09b3658641d1514d807aeeenjn#	sc
262dbebecc2bf00530ce09b3658641d1514d807aeeenjn
263dbebecc2bf00530ce09b3658641d1514d807aeeenjn	lwz	4,(sysinfo_buff+S_TOTALRAM-data_begin)(DATA_BEGIN)
264dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# load bytes of RAM into r4
265dbebecc2bf00530ce09b3658641d1514d807aeeenjn
266dbebecc2bf00530ce09b3658641d1514d807aeeenjn	srawi	4,4,20		# divide by 2^20 to get MB
267dbebecc2bf00530ce09b3658641d1514d807aeeenjn	li	5,0
268dbebecc2bf00530ce09b3658641d1514d807aeeenjn
269dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl	num_to_ascii
270dbebecc2bf00530ce09b3658641d1514d807aeeenjn
271dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	16,DATA_BEGIN,(ram_comma-data_begin)-1
272dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# print 'M RAM, '
273dbebecc2bf00530ce09b3658641d1514d807aeeenjn
274dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl	strcat
275dbebecc2bf00530ce09b3658641d1514d807aeeenjn
276dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#========
277dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# Bogomips
278dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#========
279dbebecc2bf00530ce09b3658641d1514d807aeeenjn
280dbebecc2bf00530ce09b3658641d1514d807aeeenjn	lis	20,('m'<<8)+'i'		# find 'mips' and grab up to \n
281dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	20,20,('p'<<8)+'s'
282dbebecc2bf00530ce09b3658641d1514d807aeeenjn	li	23,'\n'
283dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl	find_string
284dbebecc2bf00530ce09b3658641d1514d807aeeenjn
285dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	16,DATA_BEGIN,(bogo_total-data_begin)-1
286dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# print "Bogomips Total"
287dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl	strcat
288dbebecc2bf00530ce09b3658641d1514d807aeeenjn
289dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl	center_and_print	# center it
290dbebecc2bf00530ce09b3658641d1514d807aeeenjn
291dbebecc2bf00530ce09b3658641d1514d807aeeenjn
292dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#=================================
293dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# Print Host Name
294dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#=================================
295dbebecc2bf00530ce09b3658641d1514d807aeeenjn
296dbebecc2bf00530ce09b3658641d1514d807aeeenjn	mr	14,17			# restore out buffer
297dbebecc2bf00530ce09b3658641d1514d807aeeenjn
298dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	16,DATA_BEGIN,((uname_info-data_begin)+U_NODENAME)-1
299dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# hostname
300dbebecc2bf00530ce09b3658641d1514d807aeeenjn
301dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl	strcat
302dbebecc2bf00530ce09b3658641d1514d807aeeenjn
303dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl	center_and_print
304dbebecc2bf00530ce09b3658641d1514d807aeeenjn
305dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#================================
306dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# Exit
307dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#================================
308dbebecc2bf00530ce09b3658641d1514d807aeeenjnexit:
309dbebecc2bf00530ce09b3658641d1514d807aeeenjn        li      3,0		# 0 exit value
310dbebecc2bf00530ce09b3658641d1514d807aeeenjn	li      0,SYSCALL_EXIT  # put the exit syscall number in eax
311dbebecc2bf00530ce09b3658641d1514d807aeeenjn	sc	             	# and exit
312dbebecc2bf00530ce09b3658641d1514d807aeeenjn
313dbebecc2bf00530ce09b3658641d1514d807aeeenjn
314dbebecc2bf00530ce09b3658641d1514d807aeeenjn
315dbebecc2bf00530ce09b3658641d1514d807aeeenjn
316dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#=================================
317dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# FIND_STRING
318dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#=================================
319dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#   r23 is char to end at
320dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#   r20 is the 4-char ascii string to look for
321dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#   r14 points at output buffer
322dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#   r16,r21
323dbebecc2bf00530ce09b3658641d1514d807aeeenjn
324dbebecc2bf00530ce09b3658641d1514d807aeeenjnfind_string:
325dbebecc2bf00530ce09b3658641d1514d807aeeenjn
326dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	16,DATA_BEGIN,(disk_buffer-data_begin)-1
327dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# look in cpuinfo buffer
328dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# -1 so we can use lbzu
329dbebecc2bf00530ce09b3658641d1514d807aeeenjn
330dbebecc2bf00530ce09b3658641d1514d807aeeenjnfind_loop:
331dbebecc2bf00530ce09b3658641d1514d807aeeenjn	lwzu	13,1(16)		# load in 32 bits, incrementing 8bits
332dbebecc2bf00530ce09b3658641d1514d807aeeenjn	cmpwi	13,0			# ! if null, we are done
333dbebecc2bf00530ce09b3658641d1514d807aeeenjn	beq	done
334dbebecc2bf00530ce09b3658641d1514d807aeeenjn	cmpw	13,20			# compare with out 4 char string
335dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bne	find_loop		# ! if no match, keep looping
336dbebecc2bf00530ce09b3658641d1514d807aeeenjn
337dbebecc2bf00530ce09b3658641d1514d807aeeenjn
338dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# ! if we get this far, we matched
339dbebecc2bf00530ce09b3658641d1514d807aeeenjn
340dbebecc2bf00530ce09b3658641d1514d807aeeenjn	li	21,':'
341dbebecc2bf00530ce09b3658641d1514d807aeeenjnfind_colon:
342dbebecc2bf00530ce09b3658641d1514d807aeeenjn	lbzu	13,1(16)		# repeat till we find colon
343dbebecc2bf00530ce09b3658641d1514d807aeeenjn	cmpwi	13,0
344dbebecc2bf00530ce09b3658641d1514d807aeeenjn	beq	done
345dbebecc2bf00530ce09b3658641d1514d807aeeenjn	cmpw	13,21
346dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bne	find_colon
347dbebecc2bf00530ce09b3658641d1514d807aeeenjn
348dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	16,16,1			# skip a char [should be space]
349dbebecc2bf00530ce09b3658641d1514d807aeeenjn
350dbebecc2bf00530ce09b3658641d1514d807aeeenjnstore_loop:
351dbebecc2bf00530ce09b3658641d1514d807aeeenjn	 lbzu	13,1(16)
352dbebecc2bf00530ce09b3658641d1514d807aeeenjn	 cmpwi	13,0
353dbebecc2bf00530ce09b3658641d1514d807aeeenjn	 beq	done
354dbebecc2bf00530ce09b3658641d1514d807aeeenjn    	 cmpw	13,23			# is it end string?
355dbebecc2bf00530ce09b3658641d1514d807aeeenjn	 beq 	almost_done		# ! if so, finish
356dbebecc2bf00530ce09b3658641d1514d807aeeenjn	 stbu	13,1(14)		# ! if not store and continue
357dbebecc2bf00530ce09b3658641d1514d807aeeenjn	 b	store_loop
358dbebecc2bf00530ce09b3658641d1514d807aeeenjn
359dbebecc2bf00530ce09b3658641d1514d807aeeenjnalmost_done:
360dbebecc2bf00530ce09b3658641d1514d807aeeenjn	li	13,0			# replace last value with null
361dbebecc2bf00530ce09b3658641d1514d807aeeenjn	stb	13,1(14)
362dbebecc2bf00530ce09b3658641d1514d807aeeenjn
363dbebecc2bf00530ce09b3658641d1514d807aeeenjndone:
364dbebecc2bf00530ce09b3658641d1514d807aeeenjn	blr
365dbebecc2bf00530ce09b3658641d1514d807aeeenjn
366dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#================================
367dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# strcat
368dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#================================
369dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# r13 = "temp"
370dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# r16 = "source"
371dbebecc2bf00530ce09b3658641d1514d807aeeenjn       	# r14 = "destination"
372dbebecc2bf00530ce09b3658641d1514d807aeeenjnstrcat:
373dbebecc2bf00530ce09b3658641d1514d807aeeenjn	lbzu	13,1(16)		# load a byte from [r16]
374dbebecc2bf00530ce09b3658641d1514d807aeeenjn	stbu	13,1(14)		# store a byte to [r14]
375dbebecc2bf00530ce09b3658641d1514d807aeeenjn	cmpwi	13,0			# is it zero?
376dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bne	strcat			# ! if not loop
377dbebecc2bf00530ce09b3658641d1514d807aeeenjn	subi	14,14,1			# point to one less than null
378dbebecc2bf00530ce09b3658641d1514d807aeeenjn	blr				# return
379dbebecc2bf00530ce09b3658641d1514d807aeeenjn
380dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#==============================
381dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# center_and_print
382dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#==============================
383dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# r14 is end of buffer
384dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# r17 is start of buffer
385dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# r29 = saved link register
386dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# r4-r10, r19-r22, r30 trashed
387dbebecc2bf00530ce09b3658641d1514d807aeeenjn
388dbebecc2bf00530ce09b3658641d1514d807aeeenjncenter_and_print:
389dbebecc2bf00530ce09b3658641d1514d807aeeenjn
390dbebecc2bf00530ce09b3658641d1514d807aeeenjn	mflr 	29			# back up return address
391dbebecc2bf00530ce09b3658641d1514d807aeeenjn
392dbebecc2bf00530ce09b3658641d1514d807aeeenjn	subf	5,17,14			# see how long the output
393dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# buffer is
394dbebecc2bf00530ce09b3658641d1514d807aeeenjn
395dbebecc2bf00530ce09b3658641d1514d807aeeenjn	cmpwi	5,80			# see if we are >80
396dbebecc2bf00530ce09b3658641d1514d807aeeenjn        bgt	done_center		# ! if so, bail
397dbebecc2bf00530ce09b3658641d1514d807aeeenjn
398dbebecc2bf00530ce09b3658641d1514d807aeeenjn	li	4,80			# 80 column screen
399dbebecc2bf00530ce09b3658641d1514d807aeeenjn	subf	4,5,4			# subtract strlen
400dbebecc2bf00530ce09b3658641d1514d807aeeenjn	srawi	23,4,1			# divide by two
401dbebecc2bf00530ce09b3658641d1514d807aeeenjn
402dbebecc2bf00530ce09b3658641d1514d807aeeenjn	lis	4,escape@ha
403dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	4,4,escape@l
404dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl	write_stdout
405dbebecc2bf00530ce09b3658641d1514d807aeeenjn
406dbebecc2bf00530ce09b3658641d1514d807aeeenjn	mr	4,23
407dbebecc2bf00530ce09b3658641d1514d807aeeenjn	li	5,1			# print to stdout
408dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl	num_to_ascii		# print number
409dbebecc2bf00530ce09b3658641d1514d807aeeenjn
410dbebecc2bf00530ce09b3658641d1514d807aeeenjn	lis	4,c@ha
411dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	4,4,c@l
412dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl	write_stdout
413dbebecc2bf00530ce09b3658641d1514d807aeeenjn
414dbebecc2bf00530ce09b3658641d1514d807aeeenjn
415dbebecc2bf00530ce09b3658641d1514d807aeeenjndone_center:
416dbebecc2bf00530ce09b3658641d1514d807aeeenjn
417dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	4,17,1			# move string to output+1
418dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl	write_stdout		# call write stdout
419dbebecc2bf00530ce09b3658641d1514d807aeeenjn
420dbebecc2bf00530ce09b3658641d1514d807aeeenjn	lis	4,linefeed@ha
421dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	4,4,linefeed@l
422dbebecc2bf00530ce09b3658641d1514d807aeeenjn
423dbebecc2bf00530ce09b3658641d1514d807aeeenjn	mtlr	29	      		# restore link register
424dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# and let write_stdout
425dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# return for us
426dbebecc2bf00530ce09b3658641d1514d807aeeenjn
427dbebecc2bf00530ce09b3658641d1514d807aeeenjn
428dbebecc2bf00530ce09b3658641d1514d807aeeenjn
429dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#================================
430dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# WRITE_STDOUT
431dbebecc2bf00530ce09b3658641d1514d807aeeenjn	#================================
432dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# r4 has string
433dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# r0,r3,r4,r5,r6 trashed
434dbebecc2bf00530ce09b3658641d1514d807aeeenjn
435dbebecc2bf00530ce09b3658641d1514d807aeeenjnwrite_stdout:
436dbebecc2bf00530ce09b3658641d1514d807aeeenjn	li	0,SYSCALL_WRITE		# write syscall
437dbebecc2bf00530ce09b3658641d1514d807aeeenjn	li	3,STDOUT		# stdout
438dbebecc2bf00530ce09b3658641d1514d807aeeenjn
439dbebecc2bf00530ce09b3658641d1514d807aeeenjn	li	5,0			# string length counter
440dbebecc2bf00530ce09b3658641d1514d807aeeenjnstrlen_loop:
441dbebecc2bf00530ce09b3658641d1514d807aeeenjn	lbzx 	6,4,5			# get byte from (r4+r5)
442dbebecc2bf00530ce09b3658641d1514d807aeeenjn       	addi	5,5,1			# increment counter
443dbebecc2bf00530ce09b3658641d1514d807aeeenjn	cmpi	0,6,0			# is it zero?
444dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bne	strlen_loop		# ! if not keep counting
445dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	5,5,-1
446dbebecc2bf00530ce09b3658641d1514d807aeeenjn	sc				# syscall
447dbebecc2bf00530ce09b3658641d1514d807aeeenjn
448dbebecc2bf00530ce09b3658641d1514d807aeeenjn	blr				# return
449dbebecc2bf00530ce09b3658641d1514d807aeeenjn
450dbebecc2bf00530ce09b3658641d1514d807aeeenjn
451dbebecc2bf00530ce09b3658641d1514d807aeeenjn	##############################
452dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# Num to Ascii
453dbebecc2bf00530ce09b3658641d1514d807aeeenjn	##############################
454dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# num is in r4
455dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# r5 =0 then strcat, otherwise stdout
456dbebecc2bf00530ce09b3658641d1514d807aeeenjn	# r5-r10,r19,r20,r21,r22,r30 trashed
457dbebecc2bf00530ce09b3658641d1514d807aeeenjn
458dbebecc2bf00530ce09b3658641d1514d807aeeenjnnum_to_ascii:
459dbebecc2bf00530ce09b3658641d1514d807aeeenjn
460dbebecc2bf00530ce09b3658641d1514d807aeeenjn	mflr    30			# save the link register
461dbebecc2bf00530ce09b3658641d1514d807aeeenjn
462dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	16,BSS_BEGIN,(num_to_ascii_end-bss_begin)
463dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# the end of a backwards growing
464dbebecc2bf00530ce09b3658641d1514d807aeeenjn					# 10 byte long buffer.
465dbebecc2bf00530ce09b3658641d1514d807aeeenjn
466dbebecc2bf00530ce09b3658641d1514d807aeeenjn	li	20,10			# we will divide by 10
467dbebecc2bf00530ce09b3658641d1514d807aeeenjn	mr	19,4			# load in the value passed
468dbebecc2bf00530ce09b3658641d1514d807aeeenjn
469dbebecc2bf00530ce09b3658641d1514d807aeeenjndiv_by_10:
470dbebecc2bf00530ce09b3658641d1514d807aeeenjn	divw	21,19,20		# divide r19 by r20 put into r21
471dbebecc2bf00530ce09b3658641d1514d807aeeenjn
472dbebecc2bf00530ce09b3658641d1514d807aeeenjn	mullw	22,21,20		# find remainder.  1st q*dividend
473dbebecc2bf00530ce09b3658641d1514d807aeeenjn	subf	22,22,19		# then subtract from original = R
474dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	22,22,0x30		# convert remainder to ascii
475dbebecc2bf00530ce09b3658641d1514d807aeeenjn
476dbebecc2bf00530ce09b3658641d1514d807aeeenjn	stbu	22,-1(16)		# Store to backwards buffer
477dbebecc2bf00530ce09b3658641d1514d807aeeenjn
478dbebecc2bf00530ce09b3658641d1514d807aeeenjn	mr	19,21			# move Quotient as new dividend
479dbebecc2bf00530ce09b3658641d1514d807aeeenjn	cmpwi	19,0			# was quotient zero?
480dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bne    	div_by_10		# ! if not keep dividing
481dbebecc2bf00530ce09b3658641d1514d807aeeenjn
482dbebecc2bf00530ce09b3658641d1514d807aeeenjnwrite_out:
483dbebecc2bf00530ce09b3658641d1514d807aeeenjn	cmpwi	5,0			# ! if r5 is 0 then skip ahead
484dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bne 	stdout_num
485dbebecc2bf00530ce09b3658641d1514d807aeeenjn
486dbebecc2bf00530ce09b3658641d1514d807aeeenjn	addi	16,16,-1		# point to the beginning
487dbebecc2bf00530ce09b3658641d1514d807aeeenjn	bl	strcat			# and strcat it
488dbebecc2bf00530ce09b3658641d1514d807aeeenjn
489dbebecc2bf00530ce09b3658641d1514d807aeeenjn	mtlr	30			# restore link register
490dbebecc2bf00530ce09b3658641d1514d807aeeenjn
491dbebecc2bf00530ce09b3658641d1514d807aeeenjn	blr				# return
492dbebecc2bf00530ce09b3658641d1514d807aeeenjn
493dbebecc2bf00530ce09b3658641d1514d807aeeenjnstdout_num:
494dbebecc2bf00530ce09b3658641d1514d807aeeenjn        mr	4,16			# point to our buffer
495dbebecc2bf00530ce09b3658641d1514d807aeeenjn	mtlr	30			# restore link register
496dbebecc2bf00530ce09b3658641d1514d807aeeenjn	b	write_stdout		# stdout will return for us
497dbebecc2bf00530ce09b3658641d1514d807aeeenjn
498dbebecc2bf00530ce09b3658641d1514d807aeeenjn
499dbebecc2bf00530ce09b3658641d1514d807aeeenjn#===========================================================================
500dbebecc2bf00530ce09b3658641d1514d807aeeenjn.data
501dbebecc2bf00530ce09b3658641d1514d807aeeenjn#===========================================================================
502dbebecc2bf00530ce09b3658641d1514d807aeeenjn
503dbebecc2bf00530ce09b3658641d1514d807aeeenjn
504dbebecc2bf00530ce09b3658641d1514d807aeeenjndata_begin:
505dbebecc2bf00530ce09b3658641d1514d807aeeenjn
506a47b3e46d7fb68b10e931a80ae05f7c4bf41434dflorian.include "logo.lzss_new"
507dbebecc2bf00530ce09b3658641d1514d807aeeenjn
508dbebecc2bf00530ce09b3658641d1514d807aeeenjnver_string:	.ascii	" Version \0"
509dbebecc2bf00530ce09b3658641d1514d807aeeenjncompiled_string:	.ascii	", Compiled \0"
510dbebecc2bf00530ce09b3658641d1514d807aeeenjnmegahertz:	.ascii	"MHz PPC \0"
511dbebecc2bf00530ce09b3658641d1514d807aeeenjn.equ space, ram_comma+6
512dbebecc2bf00530ce09b3658641d1514d807aeeenjn.equ comma, ram_comma+5
513dbebecc2bf00530ce09b3658641d1514d807aeeenjnlinefeed:   	.ascii  "\n\0"
514dbebecc2bf00530ce09b3658641d1514d807aeeenjnescape:		.ascii	"\033[\0"
515dbebecc2bf00530ce09b3658641d1514d807aeeenjnc:		.ascii  "C\0"
516dbebecc2bf00530ce09b3658641d1514d807aeeenjnram_comma:	.ascii	"M RAM, \0"
517dbebecc2bf00530ce09b3658641d1514d807aeeenjn
518dbebecc2bf00530ce09b3658641d1514d807aeeenjnbogo_total:	.ascii	" Bogomips Total\0"
519dbebecc2bf00530ce09b3658641d1514d807aeeenjn
520dbebecc2bf00530ce09b3658641d1514d807aeeenjndefault_colors:	.ascii	"\033[0m\n\n\0"
521dbebecc2bf00530ce09b3658641d1514d807aeeenjn
522dbebecc2bf00530ce09b3658641d1514d807aeeenjncpuinfo:	.ascii	"/proc/cpuinfo\0"
523dbebecc2bf00530ce09b3658641d1514d807aeeenjn
524dbebecc2bf00530ce09b3658641d1514d807aeeenjnone:	.ascii	"One \0"
525dbebecc2bf00530ce09b3658641d1514d807aeeenjn
526dbebecc2bf00530ce09b3658641d1514d807aeeenjndisk_buffer:
527dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "processor	: 0\n"
528dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "cpu		: 745/755\n"
529dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "temperature 	: 22-24 C (uncalibrated)\n"
530dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "clock		: 600.000000MHz\n"
531dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "revision	: 51.17 (pvr 0008 3311)\n"
532dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "bogomips	: 49.79\n"
533dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "timebase	: 24960000\n"
534dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "platform	: PowerMac\n"
535dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "model		: PowerBook4,1\n"
536dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "machine		: PowerBook4,1\n"
537dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "motherboard	: PowerBook4,1 MacRISC2 MacRISC Power Macintosh\n"
538dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "detected as	: 257 (iBook 2)\n"
539dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "pmac flags	: 0000001b\n"
540dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "L2 cache	: 256K unified\n"
541dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "pmac-generation	: NewWorld\n\0"
542dbebecc2bf00530ce09b3658641d1514d807aeeenjn
543dbebecc2bf00530ce09b3658641d1514d807aeeenjnuname_info:
544dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "Linux\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
545dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
546dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "henparma\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
547dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
548dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "2.6.29\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
549dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
550dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "#1 Wed May 13 15:51:54 UTC 2009\0"
551dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
552dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
553dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
554dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
555dbebecc2bf00530ce09b3658641d1514d807aeeenjn.ascii "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
556dbebecc2bf00530ce09b3658641d1514d807aeeenjn
557dbebecc2bf00530ce09b3658641d1514d807aeeenjn
558dbebecc2bf00530ce09b3658641d1514d807aeeenjnsysinfo_buff:
559dbebecc2bf00530ce09b3658641d1514d807aeeenjn.long 0,0,0,0,512*1024*1024,0,0,0
560dbebecc2bf00530ce09b3658641d1514d807aeeenjn
561dbebecc2bf00530ce09b3658641d1514d807aeeenjn#============================================================================
562dbebecc2bf00530ce09b3658641d1514d807aeeenjn#.bss
563dbebecc2bf00530ce09b3658641d1514d807aeeenjn#============================================================================
564dbebecc2bf00530ce09b3658641d1514d807aeeenjn
565dbebecc2bf00530ce09b3658641d1514d807aeeenjn.lcomm bss_begin,0
566dbebecc2bf00530ce09b3658641d1514d807aeeenjn.lcomm	num_to_ascii_buff,10
567dbebecc2bf00530ce09b3658641d1514d807aeeenjn.lcomm num_to_ascii_end,1
568dbebecc2bf00530ce09b3658641d1514d807aeeenjn.lcomm  text_buf, (N+F-1)	# These buffers must follow each other
569dbebecc2bf00530ce09b3658641d1514d807aeeenjn.lcomm	out_buffer,16384
570dbebecc2bf00530ce09b3658641d1514d807aeeenjn
571dbebecc2bf00530ce09b3658641d1514d807aeeenjn
572dbebecc2bf00530ce09b3658641d1514d807aeeenjn
573dbebecc2bf00530ce09b3658641d1514d807aeeenjn
574dbebecc2bf00530ce09b3658641d1514d807aeeenjn
575dbebecc2bf00530ce09b3658641d1514d807aeeenjn
576dbebecc2bf00530ce09b3658641d1514d807aeeenjn
577dbebecc2bf00530ce09b3658641d1514d807aeeenjn
578dbebecc2bf00530ce09b3658641d1514d807aeeenjn
579dbebecc2bf00530ce09b3658641d1514d807aeeenjn
580