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