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