BtNetBSD/ 40755 147 0 0 7450201601 10706 5ustar imagowheelBtNetBSD/misc/ 40755 147 0 0 7450201600 11640 5ustar imagowheelBtNetBSD/misc/Mkrel/ 40755 147 0 0 7450201600 12712 5ustar imagowheelBtNetBSD/misc/Mkrel/MkRelScr100755 147 0 1200 7450201576 14424 0ustar imagowheel| $NetBSD: MkRelScr,v 1.1 2001/10/05 22:28:01 reinoud Exp $ *BASIC *DIR .!BtNetBSD TEXTLOAD "BtNetBSD" TEXTSAVEO 8, "BtNetBSD" TEXTLOAD "checkro403" TEXTSAVEO 8, "checkro403" TEXTLOAD "TestBoot" TEXTSAVEO 8, "TestBoot" *DIR .!BtNetBSD.native TEXTLOAD "MountUFS" TEXTSAVEO 8, "MountUFS" *DIR .!BtNetBSD.src.Banner TEXTLOAD "Banner" TEXTSAVEO 8, "Banner" TEXTLOAD "resutil" TEXTSAVEO 8, "resutil" *DIR .misc TEXTLOAD "bb_netbsd" TEXTSAVEO 8, "bb_netbsd" *DIR .unixfs TEXTLOAD "mountufs" TEXTSAVEO 8, "mountufs" CLS:VDU 7:PRINT "Please dont forget to uuencode the binaries in NetBSD!" QUIT BtNetBSD/misc/Mkrel/MkRelease100755 147 0 254 7450201576 14602 0ustar imagowheel| $NetBSD: MkRelease,v 1.1 2001/10/05 22:28:01 reinoud Exp $ *Set rel$dir .^.^ *Copy .unixfs .!BtNetBSD.native rfv~c *Exec .MkRelScr BtNetBSD/misc/SettScr100755 147 0 2521 7450201576 13266 0ustar imagowheel| $NetBSD: SettScr,v 1.3 2002/02/11 19:32:02 reinoud Exp $ *BASIC *DIR *Settype FBInstall Text *Settype README Text *DIR .!BtNetBSD TEXTLOAD "BtNetBSD" SAVE "BtNetBSD" TEXTLOAD "checkro403" SAVE "checkro403" TEXTLOAD "TestBoot" SAVE "TestBoot" *Settype !Boot Obey *Settype !Edit Obey *Settype !Run Obey *Settype !Sprites Sprite *Settype !Sprites22 Sprite *Settype Banner Module *Settype MemFix Module *Settype PreBoot obey *Settype fastboot Text *Settype Files Text *Settype Legal Text *DIR .!BtNetBSD.native TEXTLOAD "MountUFS" SAVE "MountUFS" *Settype Howto Text *Settype KillUnixFS Obey *Settype OpenRoot Obey *Settype unixfs_res Module *Settype wd0a obey *Settype wd0e obey *Settype wd0f obey *Settype wd0g obey *Settype wd1a obey *Settype wd1e obey *DIR .!BtNetBSD.src.Banner TEXTLOAD "Banner" SAVE "Banner" TEXTLOAD "resutil" SAVE "resutil" *Settype !Path Obey *Settype Sprite sprite *DIR .misc TEXTLOAD "bb_netbsd" SAVE "bb_netbsd" *Settype SettScr Text *DIR .unixfs TEXTLOAD "mountufs" SAVE "mountufs" *Settype Howto Text *Settype KillUnixFS Obey *Settype OpenRoot Obey *Settype unixfs_res module *Settype wd0a obey *Settype wd0e obey *Settype wd0f obey *Settype wd0g obey *Settype wd1a obey *Settype wd1e obey *DIR .misc.MkRel *Settype MkRelease Obey *Settype MkRelScr Obey QUIT BtNetBSD/misc/bb_netbsd100755 147 0 10641 7450201577 13644 0ustar imagowheelREM > bb_NetBSD REM $NetBSD: bb_netbsd,v 1.1 2001/10/05 22:28:00 reinoud Exp $ REM REM Copyright (c) 1995 Mark Brinicombe REM All rights reserved REM REM Redistribution and use in source and binary forms, with or without REM modification, are permitted provided that the following conditions REM are met: REM 1. Redistributions of source code must retain the above copyright REM notice, this list of conditions and the following disclaimer. REM 2. Redistributions in binary form must reproduce the above copyright REM notice, this list of conditions and the following disclaimer in the REM documentation and/or other materials provided with the distribution. REM 3. All advertising materials mentioning features or use of this software REM must display the following acknowledgement: REM This product includes software developed by Mark Brinicombe. REM 4. The name of the company nor the name of the author may be used to REM endorse or promote products derived from this software without specific REM prior written permission. REM REM THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR REM IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES REM OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. REM IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, REM INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, REM BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS REM OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND REM ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF REM THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH REM DAMAGE. REM REM NetBSD kernel project REM REM bb_NetBSD REM REM Modifies the filecore bootblock to point to a section of REM the disc reserved for NetBSD. REM REM Created : 24/11/94 REM Last updated : 12/07/95 REM DIM buf% 512 REM Get Filesystem type REPEAT PRINT "ADFS, ATAFS, IDEFS, SCSI or SCSIFS (A/T/I/S/F) ? "; filesys% = GET AND &DF PRINT CHR$(filesys%) UNTIL filesys%=ASC"A" OR filesys%=ASC"T" OR filesys%=ASC"S" OR filesys%=ASC"I" OR filesys%=ASC"F" CASE filesys% OF WHEN ASC"A" : discop$="ADFS_DiscOp" WHEN ASC"I" : discop$="IDEFS_DiscOp" WHEN ASC"T" : discop$="ATAFS_DiscOp" WHEN ASC"S" : discop$="SCSI_DiscOp" WHEN ASC"F" : discop$="SCSIFS_DiscOp" ENDCASE REM Get the drive number INPUT "Drive "d% REM Read in current filecore bootblock SYS discop$,, 1, &c00 + (d% << 29), buf%, 512 SYS "OS_File", 10, ".OldBB", &FFD,, buf%, buf%+512 PRINT "Old boot block saved in .OldBB" REM Get the byte size of the filecore partition and the number REM of bytes per cylinder size%=buf%!&1d0 clsize%=buf%?&1c2 * buf%?&1c1 * (1 << buf%?&1c0) REM A bit of info to the user PRINT "Filecore partition size = ";~size%;" bytes" REM Convert the size into cylinders size% = (size% + clsize% - 1) / clsize% PRINT "Filecore partition size = ";size%; " cylinders (0-";size%-1;")" REM We should be clever about here and read the real geometry REM of the disc so that we know the maximum cylinder number REM Get the starting cylinder for the NetBSD part of the disc INPUT "NetBSD Starting Cyl "c% REM Make sure it is after the filecore partition IF (c% < size%) THEN PRINT "Filecore occupies cylinders upto ";size%-1 INPUT "Are you sure you mean this value "a$ IF (a$ <> "yes" AND a$ <> "YES") THEN END PRINT "This will allow NetBSD to overwrite part of the ADFS partition" INPUT "Are you really sure you mean this value "a$ IF (a$ <> "yes" AND a$ <> "YES") THEN END ENDIF PRINT "Initialising NetBSD partition offset at ";c% PRINT "On drive ";d%;", using ";discop$;" to access drive" PRINT "Press any key to continue, escape to abort" dummy%=GET REM Modifiy the non-ADFS partition descriptor to describe the REM start of the NetBSD part of the disc buf%?&1FC = &42 : REM NetBSD identifier buf%?&1FD = c% AND 255 : REM low byte of start cylinder buf%?&1FE = c% >> 8 : REM high byte of start cylinder REM Recalculate the filecore boot block checksum buf%?&1FF = FNCheckSum(buf%,511) REM Write the boot block back to disc SYS discop$,, 2, &c00 + (d% << 29), buf%, 512 END DEF FNCheckSum(addr%, length%) sum% = 0 FOR n% = 0 TO length% - 1 sum% += addr%?n% IF sum% > 255 THEN sum% -= 255 ENDIF NEXT = sum% BtNetBSD/FBInstall100755 147 0 10114 7450201600 12563 0ustar imagowheel$NetBSD: FBInstall,v 1.1 2001/10/05 22:28:00 reinoud Exp $ Note of FastBoot/AutoBoot Installation for !BtNetBSD V0.90 based on !BtRiscBSD Updated by Reinoud Zandijk 18 Feb 2001 Author: Mark Brinicombe 12th May 1995 Updated: 20th June 1997 Installation ------------ Two patches are required to the standard boot files The following lines should be added to the start of !Boot.Choices.Boot.PreDesktop ----------------------- Cut here ----------------------- |Start NetBSD !Boot FastBoot Run .^.^.^.BtNetBSD.!BtNetBSD.!Boot Run .TestBoot If "" = "1" THEN Echo NetBSD FastBoot mode engaged If "" = "2" THEN Echo NetBSD ConfBoot mode engaged If "" = "3" THEN Echo NetBSD AutoBoot mode engaged If "" = "4" THEN Echo NetBSD FastConf mode engaged |End ----------------------- Cut here ----------------------- These commands should be the first one run in the PreDesktop file. They boot the boot loader application (primarily to set BtNetBSD$Dir). The file .TestBoot is then run to test for the ALT or CTRL keys are being held down. In addition it checks several CMOS RAM bits for boot configuration options. The following lines should be added to the start of !Boot.Choices.Boot.Desktop ----------------------- Cut here ----------------------- |Start NetBSD !Boot FastBoot Iconsprites .!Sprites22 If = 4 THEN Run .!Edit If > 0 AND < 4 THEN Obey .fastboot |End ----------------------- Cut here ----------------------- This command should be the first one run in the Desktop file. It runs the NetBSD Bootloader with the configured parameters. There is a specific reason for not putting all the fastboot code in one file. The PreDesktop patch is run very early in the boot up so that the ALT and CTRL keys can be detected quickly. However, currently the actually bootloader cannot be run at this point unless a lot of memory is available in the module area (~1Meg) as currently the module area is used for temporary storage of the kernel being booted. This means that the actual boot is prosponed until the start of the Desktop file. At this point the desktop has been started and the task manager is running so it will be possible to allocate a large amount of module space. Activation ---------- Once installed, to engage the fastboot hold ALT down immediately after a reset. As soon as the "fastboot engaged" message is printed the ALT key can be released. To engage the fastconf mode hold CTRL down immediately after a reset. As soon as the "fastconf engaged" message is printed the CTRL key can be released. Configuration ------------- Configuration is done via the !BtNetBSD application. When ever NetBSD is booted the commandline used to boot it is saved by the bootloader to the file .FastBoot Rerunning this file will then boot NetBSD with the last parameters used. It is this file that the fastboot uses so the fast boot will boot NetBSD with the same parameters as were used for the last boot. ConfBoot mode ------------- This mode is identified by NetBSD$FastBoot being set to 2. This indicates that the bootloader has been configured to always boot NetBSD. This is down by setting a bit in the CMOS RAM (via !BtNetBSD). If NetBSD boots are configured the action of the ALT is reversed so that holding down ALT will allow a RISC OS boot instead. AutoBoot mode ------------- This mode is identified by NetBSD$FastBoot being set to 3. This indicates that an automatic boot was requested by NetBSD before it rebooted. This will happen when /sbin/reboot is used instead of /sbin/halt. FastBoot mode ------------- This is the behaviour when ALT is held down at boot time and ConfBoot mode has not been configured. It just bypasses most of the normal startup and boots NetBSD. FastConf mode ------------- This is the behaviour when CTRL is held down at boot time. This is similar to FastBoot mode except that the !BtNetBSD is provided to allow boot parameters to be changed. Bugs ---- Well hopefully there are no bugs :-) BtNetBSD/README100755 147 0 755 7450201600 11654 0ustar imagowheel$NetBSD: README,v 1.2 2002/02/11 19:00:07 reinoud Exp $ Welcome to NetBSD for the Acorn RiscPC/A7000/NC ! To get this distribution working run `settype' the file `Settype' to Obey and run this file. It will set all file types in this directory to the correct RISC OS types. Pity those file types get lost after retrieving them from the source repository.... To read more about installing the bootloader, read the FBInstall file. Enjoy your installation ! 11 Februari 2002 Reinoud Zandijk BtNetBSD/Settype100755 147 0 241 7450201600 12342 0ustar imagowheel| $NetBSD: Settype,v 1.1 2001/10/05 22:28:00 reinoud Exp $ | | !!!! please *settype Obey me and run me | *Set rel$dir *Exec .misc.SettScr BtNetBSD/unixfs/ 40755 147 0 0 7450201601 12222 5ustar imagowheelBtNetBSD/unixfs/unixfs_res100644 147 0 113114 7450201601 14470 0ustar imagowheelt#dUnixFSUnix FileSystem 0.15 (28 May 1997) Gary Palmer & Scott StevensUnixFS_MountUnixFSUnixFS_Mount attempts(mount a device as the root directory. The device )a hex  which contains the following information : _DiscOp SWI Number + (drive << 3) + (partition number) Partition number 2 represents the whole disc. Syntax: *UnixFS_Mount UnixFS selects UnixFS as the current filing system. Syntax: *UnixFS@-)@-@P@-$ O/ 0)hjP@ 80@-{O)@-@Q O/ 0)@-- PЍ@@-- PЍ@@-- jPЍ@@-P P P P @-0- PЍ@- CPЍ@- pP Ѝ@@-P P P0 P8 @-0QAK.- P.Ѝ@M` ?PЍ<@`Ѝ@?- P?Ѝ@>- P>Ѝ@- P@PY PG PP P -0BX Bad parametersGetBytes - Operation not supportedPutBytes - Operation not supported Args - Operation not supportedClose - Operation not supported@-~- {P~Ѝ@@-- @-- Ѝ@@-B@- -Lpcs[@-). R R-CC R r 0-8@8@00 B @@ B 00 B 00#4 R00 R- l03< R) R-G;4LK5\[6lk7|{89:>< R r p-p@;4LK5\[6lkxpp B>< -@;4LK B< ;0 B>< ;0#4 R@-<?  ch @-@--Bocs@--ocs@--? och No block cache availableNot FoundINODE not foundInternal errorSorry - only root filesystem mount capability currently.No mount points left freeNo memory allocated for superblockNo memory allocated for partition tableFilecore boot block checksum failedError reading partition table of disc Error - Invalid partition table or unknown table format Error reading filesystem superblock Error - Invalid filesystem superblock or unknown superblock format Operation not supported Can only open files read-only!Error reading file systemBlock cache refused to die. Oops :-(No filesytstems mounted - cannot perform operation!File Creation FailedDirectory Creation FailedFile Save FailedMalloc() FailedBad RenameFilesystem fullWrite errorPermission deniedBad disklabelPartition table badUnknown partition typeDevice not configured @-@-P: ZŒŒ# P: `B!,aB 0Q:Q:Q:Q:Q:Q:Q}:Qx:Qs:Qn:Qi:Qd:Q_:QZ:QU:QP:QK:QF: QA: Q<: Q7: Q2: Q-: Q(: Q#: Q: Q: Q:Q:Q :Q:QA ? QA ? QA > QA > QQ = QA = QA < QA < QA ; QA ; QA : QA : QA 9 QA 9 QA 8 QA 8 QA 7 QA 7 QA 6 QA 6 QA 5 QA 5 QA 4 QA 4 QA 3 QA 3 QA 2 QA 2 QA 1 QA 1 QA 0 QA 0 \aB`B0QA 0  -L@d% V [(\  8 21 Ƞ Ƞ,8,Ƞ ! -LM 6[ 0-LP@0-L0 P@ 55Address overflow - 0d0  5T2;:D0 0 5Writing too low Raw filecore swi error 0[@- 0 QA0S2 1 -LM 0[ -LHB% ~ ~ 11  10{k [ 12  1@P3`53 Ġ 1P3`53    Ġ   1P031 Pe<@0h0[ [MALLOC!!!!! CACHE_INIT!!! MEMORY_INIT!!! p-L@P\` b0 ! ! !  p[PUp[ -L_q? pg8@0. 4A`PP8P0 F4Ő`U2- 0Ѝ08PU0-4q 0*ЍpW[Error writing cylinder group summary -LFDpB pgd95 @0. 4A=`PP8P0 F4Ő`U2-0 UЍ0BO/8PU0-40 *CЍpW`C [ 0-LP0?0d@\ @d @ A \ @004\*0[Outside Partition 0$D0 00 -0 0[ p-L?P@d`\ `f ` a \ `0@D\*1Op[0D00 -0 p[ P* P: -LP@`<p+ ,Q p% 000  px`0 Spxt (0-0 0 Ѝp%[ -LP@`p@! ,Q @P 000  xE`0 @x: [ -LP`@MppK P 2+;p3E:0 P0(5): `@ P`F\1) 0 p.0 ` read past eof not allowed (yet!) X0 0 p0  ,0p `0P,`0V:[ --L@4M`0PEm 0jp  0QM0 PE*04,@(,, (,, - QP500 0PY0PQ(0 0 - 0wЍOp( 2(  P<*$(@Q *Z4PET90 - 000$0   ЍJ$(0-0 vЍ alloc_alloc failed for db[] @%Y @\00 - 0 ЍUP:0\-0 CЍ0 \  9-  0- \0 ЍQh 0-0 \ЍU P: 0-0 Ѝ0  0   0- 00 00 n ЍO[0-0 Ѝocalloc_alloc failed for ib[1] X9"0 - 0E Ѝ OSUP:0X-0 Ѝ?0 880)0 - 00 00  Ѝ OO0 0-0 sЍ 0-0 gЍ [ /22 -L@$Mt0P( ` 0006 0 /0P0   ZP#`%#p0EQ0  0 pQ  p d W0s<( pW: 0  (:01 (| (&0u1 (`Ō0  =0p Y 0X : 0 )0GpP?0  0(  0- P) 0&ȁp 0310S:3 pW:ps (@O0! $[@- /0$2 . 20.20 /2  22 -L@,M s ,?0(  0 0 !@. 0/303@03p,$0  @0 0 , $,0!1  @X<  -00( Ѝ00' ?ÑƑǑȁd6ˑ̑ԑՑ 5  0䑄B!1$!21 B21 e 1 PQy 0Qmemory_claim() failed FakedUnknown partition type Bombing out... MP@WZ8 " @~Real RiscIx partition table... don't know how to deal with it!!! 外 1 y Q00 @ -00( ``fv0 r0  n0 fRiscBSDNetBSDEmpty:`V:8@' 0 -00( Ѝ@@ 9((,,004488<<@@@ABB@CDDHH@IJJ@KLL@MNN@OPPTTXX\\``ddhhllppttxx||@@`!!`V:11@( 1 䑄y`, 0 4 0 WEV,04,0`!f 01 `V :@: -,` 00( Ѝ0 @V\FAU<0 QVQ\#* @IP@4AMmalloc failed `Y.08 PI4 0, @ :Error reading cylinder group summary   7`6؂8` V:0@ @U S [ 22 2  2AT 000< 0300 3 Q@0 332C00 3003PP -L 0 0 0@00 !0@00[0QJ PaQfQWAAQFQ7A  -L 0 0 2 0[ -LP@4p` /04F[0123456789abcdef -L@M `P%5 5[ tP%5pP9U 4U 1U %5 050 253555657585`0`@P0U9U@oU b5. c5m d5 l5p r5l s5x u5 x5P0 P6 FP`@0 !`F`P`F5 p0`0 kPP5 PX57 0{ ,JCA?D`0P5; P55P0U-Pe P0oP0 gPV5%7l -LM [ 0-L@< 8@4p2t0.,* (d&P(zP UPXqPU0[mode: nlink: uid: gid: size: atime: mtime: ctime: flags: dbs: idbs: end -L@,Pp Ul0PlabbX`V P[ -L`P@p  0 0-0 [ --L@M  PSppPl0    0 0` @L< @L< 0 d9 # @L<\  7 0BAB @L<\ ]0 @L<\   M0e  A AL<\瀑R0 @L<\  1 @ @pWlA   0pWl0-  0 Ѝ 嗐  O 嗐 [ PF + --LP@Mpy`0-0  Ѝ0+,P `,V`F0-0 Ѝ0,Y,P`P0-0 Ѝ0 [`,6`Y -LP`@ 071 $T@4 0 -0 ЍPhh[[alloc_alloc() ... ENOSPC --L@MP `(p76 0 00  - 0H0 ' 7 z hh R R 0-0  {ffs_realloccg: bad bprevbad blockno $Q 0 0K<P(P 0<@(dP 0 - 0 8P@ 0 X @TX0 h 0 h80 `alloc_realloccg: bad optimR R 0-0 Ѝ[ --L@M@PpQl FT QP TVq8A     B Q  0 0'` @L< @L<  TRP ? 0 BL<`0 0B0c00cP8 0 BR?0 CL<`00B0c00c R  @!400C00 @4  T PP&/0 CL<`00B0c00c000$00C$000C0p0T31³l002 LP0-   0 Ѝ- [ --L@pMPpQl007 !  0"0` @L< @L<007 n07 `0-   0 aЍTWp8W41X8Q0   8W 03`0 00B0c00c00080P8@$$pT"l 40-   0 ЍQU 0 P\W8 03`000B0c00c000P$@$@pTl A4A7 H40-  0 [ -L@P`MT pW 0 (`8@M``Q 1`J0| :"0T   !2X# 2 @L<ԐX Pp !PpPAQpW7 pPڇAQpW@PN`H ` Lp T 0Aq,) p TpxGxVn̓  0`0`a!LpXP `0QRp pos = %d, i = %d, fs = %s  80`ZQ(``Vp0`  0"@@ pP"lA|upq !kPg \2" X    B B$ 0TA ` [ --L@Pp 0 @- -0 Ѝ0+`,P@,T@D 0 -0 Ѝ0`,V,@`P 0 -0 Ѝ0 [@,4@`V -L@p M2 Qa,`V`aBf8aBaBA 0!_ @L<` 70$`8aBaBA 08! @L<` 0 ffs_alloccg: map corrupted A,`08 b9̠10B NL<`000B00c00c\3 00Pp 9[ p0PQ}ffs_alloccg: block not in map C-$Ő\l h @S \Ql l̅P   \Ql l P Q`$up\VP`` V  9P P`@ BRCRPX`` R PX@ PBP! !Q@V@ -L08< < < < 1[  ̠   1[ Π B  1[ ̠   1[ [PANIC:ffs_isblock -L80 0 0 0[ panic:ffs_clrblock 0[B1 B[1 [ -L80 0 0 0[ PANIC: ffs_setblock 0[B1 B[1 [ -L@ M(P, 0R@,  cblkfree: bad sizePp$T"V+*tbad block  ! 0((   ^`@00&#@,01]`T0` 0 blkfree: freeing free block1` i 0pWl|@ ! P 2" X    B$ 0T T8@D 2` Y ! aaR` 24 0 ,TPQ2/ AL<`00 B00c00c U blkfree: freeing free frag0 CL<`000B1aaP$$pW"l 1` B ``Q8` 20 t`Y@0` A0Q $8@$8ApW"l B 0pWl|  @ ! P ,2" X    B$ 0(T0-  (0 (Ѝ[C-8`^z8nBnB  A P \9  PL@P8 U8\ R*03 A0Q*  @ p-L  \P0 @P&`  ! 0p[` ` ` ` ` @`T:p[ p-L@PP` 1 2 0-0 `Ѝ `@T:ap[ -L@  0-0 CЍ [ 0-L@QP @T: 0[ 0-L 8  B@Q0 R > > 1 0[@T:0[ 0-L 8  B0@|R R > ><   0[@T:0[@- 8  B# \1 0@4 403  Q: p-LP@`0p[ \ -L`@P000Cy0[1 p R1 003A pW:p R 1 00  S1pW:p $ ᘔ  `w   @    [ -L`@P,@-O`@]P0\# 0  W0   D H( 9cache entry bad p / 0 0 "cache_read: malloc failed cache_read():ufs_bread failed t0 0 FD H(R [ --L`P@ 40 C  - 0 Pp! 0 |` @`O  E@   ! @]P0\#8[ -LA`@0[  00Ɓ P [, -L@ [8 0 103 0000C0 P@- 1>03  Q p-L@1p[ PP` P/&@p[ T@p[ DP!# p[P/| 4,p[ 4$p[ 4p[ 4p[ p[騍č<p[鐊p[p[p[D 01 0"0Q9Q0 AW A1 p-L@5PPP.1@`!30 .0% )0 p[ U,P,1@ph .1$@` 0  p[jpegmpeghtmljpg0# p[mpg0 0 p[ UP.1 Pc0C0h0H0s0S0 @p[txtgif @p[ -L@0M `p00760M X T0.2 "0 0 07malloc failed 4`Ō 0 0 0{0PP 0 `Ō p0 P0@ 0(( 2 (!0 0 pG 9( 0 @A P9  Y0/  X0@ 0$5 9 !0 k0 p Pv($ +0 TUi@  0 0 0 0 0 ,PV*t ,    P A   0       ,: X@A @ 5} P4P 05P[ -L@M`P685pC  p6`Ō p*t  $ )  @    0 0 0   W 7 7H 7H Hpnl[@ -L@ MHpF`D76O `XP y0A`Ō 04 q! !t@@P/10 L0`ŌH 0  PPJ 0 0J 0 F@00@ 0(@ J[Td -L@4h-pP75`\" C p`?  `6` `*  0`Ō4 P  aŌ 0 P45H6@ 6LL 6@L 6@L[( -LMP(`][Y098XO(@(aŌ4*  0p20:( 0 GPP  0R0) GP  `P@D4 T0 * 80   ,0`P@T0@ 0?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~?>~*&N>*>N>6^>>>^>6^>>>^*>>*>>.n>>>>*>n>6^>>>^>6^>>>^&66.66&n666>.>nN^^n^^nN^^^~n~N>6^>>>^>6^>>>^>6^>>>^>>>>>>>~>>>>>>~*>>*>>.n>>>>*>n>>>>>>>~>>>>>>~N^^n^^nN^^^~n~NΊΞΊ        @    !     !@0O[$ p0008 (iii8jMountufs REM $NetBSD: MountUFS,v 1.3 2002/02/11 19:02:37 reinoud Exp $ REM REM Copyright (c) 1997 Mark Brinicombe REM All rights reserved REM REM Redistribution and use in source and binary forms, with or without REM modification, are permitted provided that the following conditions REM are met: REM 1. Redistributions of source code must retain the above copyright REM notice, this list of conditions and the following disclaimer. REM 2. Redistributions in binary form must reproduce the above copyright REM notice, this list of conditions and the following disclaimer in the REM documentation and/or other materials provided with the distribution. REM 3. All advertising materials mentioning features or use of this software REM must display the following acknowledgement: REM This product includes software developed by Mark Brinicombe. REM 4. The name of the company nor the name of the author may be used to REM endorse or promote products derived from this software without specific REM prior written permission. REM REM THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR REM IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES REM OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. REM IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, REM INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, REM BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS REM OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND REM ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF REM THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH REM DAMAGE. REM REM Created : 26/01/97 REM Last updated : 26/01/97 REM REM Decodes filesystem and device arguments and mounts the correct REM FFS partition with unixfs REM REM Get environment SYS "OS_GetEnv" TO env$ REM Skipprogram path etc. IF (INSTR(env$, "-quit")) THEN I% = INSTR(env$, """") I% = INSTR(env$, """", I% + 1) REPEAT I% += 1 UNTIL MID$(env$, I%, 1) <> " " env$ = MID$(env$, I%) ENDIF REM Extract the first argument as the filesystem I% = INSTR(env$, " ") filesys$ = FNupper(LEFT$(env$, I% - 1)) REM Skip to the next argument REPEAT I% += 1 UNTIL MID$(env$, I%, 1) <> " " env$ = MID$(env$, I%) REM The drive is the next argument I% = INSTR(env$, " ") IF (I% = 0) THEN drive$ = env$ part$ = "a" : REM partition a ELSE drive$ = LEFT$(env$, I% - 1) REM Skip to the next argument REPEAT I% += 1 UNTIL MID$(env$, I%, 1) <> " " env$ = MID$(env$, I%) part$ = env$ ENDIF drive% = VAL(drive$) part% = ASC(FNupper(part$))-ASC("A") unit% = drive% - 4 REM Lookup the SWI Number for the DiscOp SWI swi$ = filesys$ + "_DiscOp" SYS "OS_SWINumberFromString",, swi$ TO swi% REM Assemble the unixfs_mount argument REM Assumes the filesystem is on the a partition swi% = swi% AND NOT(&3F) swi% += drive% * 8 + part% REM Mount the filesystem OSCLI(".native.unixfs_res") OSCLI("unixfs_mount " + STR$~(swi%)) END REM Convert a string to upper case DEF FNupper(A$) R$ = "" FOR A% = 1 TO LEN(A$) R$ = R$ + CHR$(ASC(MID$(A$, A%, 1)) AND &DF) NEXT = R$ BtNetBSD/unixfs/OpenRoot100755 147 0 123 7450201601 13766 0ustar imagowheel| $NetBSD: OpenRoot,v 1.2 2002/02/11 19:02:37 reinoud Exp $ filer_opendir UnixFS:$ BtNetBSD/unixfs/wd0a100755 147 0 126 7450201601 13057 0ustar imagowheel| $NetBSD: wd0a,v 1.3 2002/02/11 19:02:37 reinoud Exp $ .mountufs ADFS 4 a BtNetBSD/unixfs/wd0d100755 147 0 127 7450201601 13063 0ustar imagowheel| $NetBSD: wd0d,v 1.1 2001/10/05 22:28:03 reinoud Exp $ .mountufs ADFS wd0d BtNetBSD/unixfs/wd0e100755 147 0 126 7450201601 13063 0ustar imagowheel| $NetBSD: wd0e,v 1.3 2002/02/11 19:02:38 reinoud Exp $ .mountufs ADFS 4 e BtNetBSD/unixfs/wd0f100755 147 0 126 7450201601 13064 0ustar imagowheel| $NetBSD: wd0f,v 1.3 2002/02/11 19:02:38 reinoud Exp $ .mountufs ADFS 4 f BtNetBSD/unixfs/wd0g100755 147 0 126 7450201601 13065 0ustar imagowheel| $NetBSD: wd0g,v 1.3 2002/02/11 19:02:38 reinoud Exp $ .mountufs ADFS 4 g BtNetBSD/unixfs/wd1a100755 147 0 126 7450201601 13060 0ustar imagowheel| $NetBSD: wd1a,v 1.2 2002/02/11 19:02:38 reinoud Exp $ .mountufs ADFS 5 a BtNetBSD/unixfs/wd1e100755 147 0 126 7450201601 13064 0ustar imagowheel| $NetBSD: wd1e,v 1.2 2002/02/11 19:02:38 reinoud Exp $ .mountufs ADFS 5 e BtNetBSD/unixfs/KillUnixfs100755 147 0 115 7450201601 14312 0ustar imagowheel| $NetBSD: KillUnixfs,v 1.2 2002/02/11 19:02:37 reinoud Exp $ rmkill unixfs BtNetBSD/!BtNetBSD/ 40755 147 0 0 7450201601 12314 5ustar imagowheelBtNetBSD/!BtNetBSD/native/ 40755 147 0 0 7450201601 13602 5ustar imagowheelBtNetBSD/!BtNetBSD/native/KillUnixfs100755 147 0 115 7450201577 15706 0ustar imagowheel| $NetBSD: KillUnixfs,v 1.2 2002/02/11 19:02:37 reinoud Exp $ rmkill unixfs BtNetBSD/!BtNetBSD/native/Howto100755 147 0 3303 7450201577 14740 0ustar imagowheelRunning unixfs -------------- NOTE: This version allows writes only to files/dirs with world write permission. This directory contains all the files for unixfs. unixfs_res unixfs module Killunixfs kills the unixfs module OpenRoot opens a filer window on the mounted filesystem Howto this file. mountufs utility to mount partition There are also several obey files containing commands to mount various FFS partitions e.g. wd0a - first IDE disc partition A (typically /) wd0e - first IDE disc partition E (typically /usr) These obey files use the mountufs utility. Depending on what controller your IDE discs are attached to you may need to edit these files. Once a partition has been mounted the obey file OpenRoot can be use to open a filer window on the mounted partition. To remove unixfs run the Killunixfs obey file. The mountufs utility -------------------- The mountufs utility simplifies the mounting of a harddisc partition via unixfs. mountufs takes two arguments, the RISCOS filesystem and the device e.g. mountufs ADFS wd0a The mountufs command will lookup the SWI base for the specified filesystem and will use the unit number and partition from the device to formulate the correct combined SWI for the unixfs_mount command. The unixfs_mount command ------------------------ A partition is mounted using the command unixfs_mount xxxxx where xxxxx is the combined SWI, drive and partition number in hex This number can be calculated as follows SWI base + (drive * 8) + partition For example partition e on the first IDE disc on the internal IDE controller (ADFS::4) would be 40240 + (4 * 8) + 4 = 40264 SWI bases 40240 ADFS (Acorn) 41FC0 IDEFS (ICS) 40980 SCSIFS (Various) 4BBC0 ATAFS (Yellowstone) BtNetBSD/!BtNetBSD/native/MountUFS100755 147 0 6354 7450201577 15331 0ustar imagowheelREM >Mountufs REM $NetBSD: MountUFS,v 1.3 2002/02/11 19:02:37 reinoud Exp $ REM REM Copyright (c) 1997 Mark Brinicombe REM All rights reserved REM REM Redistribution and use in source and binary forms, with or without REM modification, are permitted provided that the following conditions REM are met: REM 1. Redistributions of source code must retain the above copyright REM notice, this list of conditions and the following disclaimer. REM 2. Redistributions in binary form must reproduce the above copyright REM notice, this list of conditions and the following disclaimer in the REM documentation and/or other materials provided with the distribution. REM 3. All advertising materials mentioning features or use of this software REM must display the following acknowledgement: REM This product includes software developed by Mark Brinicombe. REM 4. The name of the company nor the name of the author may be used to REM endorse or promote products derived from this software without specific REM prior written permission. REM REM THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR REM IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES REM OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. REM IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, REM INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, REM BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS REM OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND REM ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF REM THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH REM DAMAGE. REM REM Created : 26/01/97 REM Last updated : 26/01/97 REM REM Decodes filesystem and device arguments and mounts the correct REM FFS partition with unixfs REM REM Get environment SYS "OS_GetEnv" TO env$ REM Skipprogram path etc. IF (INSTR(env$, "-quit")) THEN I% = INSTR(env$, """") I% = INSTR(env$, """", I% + 1) REPEAT I% += 1 UNTIL MID$(env$, I%, 1) <> " " env$ = MID$(env$, I%) ENDIF REM Extract the first argument as the filesystem I% = INSTR(env$, " ") filesys$ = FNupper(LEFT$(env$, I% - 1)) REM Skip to the next argument REPEAT I% += 1 UNTIL MID$(env$, I%, 1) <> " " env$ = MID$(env$, I%) REM The drive is the next argument I% = INSTR(env$, " ") IF (I% = 0) THEN drive$ = env$ part$ = "a" : REM partition a ELSE drive$ = LEFT$(env$, I% - 1) REM Skip to the next argument REPEAT I% += 1 UNTIL MID$(env$, I%, 1) <> " " env$ = MID$(env$, I%) part$ = env$ ENDIF drive% = VAL(drive$) part% = ASC(FNupper(part$))-ASC("A") unit% = drive% - 4 REM Lookup the SWI Number for the DiscOp SWI swi$ = filesys$ + "_DiscOp" SYS "OS_SWINumberFromString",, swi$ TO swi% REM Assemble the unixfs_mount argument REM Assumes the filesystem is on the a partition swi% = swi% AND NOT(&3F) swi% += drive% * 8 + part% REM Mount the filesystem OSCLI(".native.unixfs_res") OSCLI("unixfs_mount " + STR$~(swi%)) END REM Convert a string to upper case DEF FNupper(A$) R$ = "" FOR A% = 1 TO LEN(A$) R$ = R$ + CHR$(ASC(MID$(A$, A%, 1)) AND &DF) NEXT = R$ BtNetBSD/!BtNetBSD/native/OpenRoot100755 147 0 123 7450201577 15362 0ustar imagowheel| $NetBSD: OpenRoot,v 1.2 2002/02/11 19:02:37 reinoud Exp $ filer_opendir UnixFS:$ BtNetBSD/!BtNetBSD/native/wd0a100755 147 0 126 7450201577 14453 0ustar imagowheel| $NetBSD: wd0a,v 1.3 2002/02/11 19:02:37 reinoud Exp $ .mountufs ADFS 4 a BtNetBSD/!BtNetBSD/native/wd0d100755 147 0 127 7450201577 14457 0ustar imagowheel| $NetBSD: wd0d,v 1.1 2001/10/05 22:28:03 reinoud Exp $ .mountufs ADFS wd0d BtNetBSD/!BtNetBSD/native/wd0e100755 147 0 126 7450201577 14457 0ustar imagowheel| $NetBSD: wd0e,v 1.3 2002/02/11 19:02:38 reinoud Exp $ .mountufs ADFS 4 e BtNetBSD/!BtNetBSD/native/wd0f100755 147 0 126 7450201577 14460 0ustar imagowheel| $NetBSD: wd0f,v 1.3 2002/02/11 19:02:38 reinoud Exp $ .mountufs ADFS 4 f BtNetBSD/!BtNetBSD/native/wd0g100755 147 0 126 7450201577 14461 0ustar imagowheel| $NetBSD: wd0g,v 1.3 2002/02/11 19:02:38 reinoud Exp $ .mountufs ADFS 4 g BtNetBSD/!BtNetBSD/native/wd1a100755 147 0 126 7450201577 14454 0ustar imagowheel| $NetBSD: wd1a,v 1.2 2002/02/11 19:02:38 reinoud Exp $ .mountufs ADFS 5 a BtNetBSD/!BtNetBSD/native/wd1e100755 147 0 126 7450201577 14460 0ustar imagowheel| $NetBSD: wd1e,v 1.2 2002/02/11 19:02:38 reinoud Exp $ .mountufs ADFS 5 e BtNetBSD/!BtNetBSD/native/unixfs_res100644 147 0 113114 7450201601 16050 0ustar imagowheelt#dUnixFSUnix FileSystem 0.15 (28 May 1997) Gary Palmer & Scott StevensUnixFS_MountUnixFSUnixFS_Mount attempts(mount a device as the root directory. The device )a hex  which contains the following information : _DiscOp SWI Number + (drive << 3) + (partition number) Partition number 2 represents the whole disc. Syntax: *UnixFS_Mount UnixFS selects UnixFS as the current filing system. Syntax: *UnixFS@-)@-@P@-$ O/ 0)hjP@ 80@-{O)@-@Q O/ 0)@-- PЍ@@-- PЍ@@-- jPЍ@@-P P P P @-0- PЍ@- CPЍ@- pP Ѝ@@-P P P0 P8 @-0QAK.- P.Ѝ@M` ?PЍ<@`Ѝ@?- P?Ѝ@>- P>Ѝ@- P@PY PG PP P -0BX Bad parametersGetBytes - Operation not supportedPutBytes - Operation not supported Args - Operation not supportedClose - Operation not supported@-~- {P~Ѝ@@-- @-- Ѝ@@-B@- -Lpcs[@-). R R-CC R r 0-8@8@00 B @@ B 00 B 00#4 R00 R- l03< R) R-G;4LK5\[6lk7|{89:>< R r p-p@;4LK5\[6lkxpp B>< -@;4LK B< ;0 B>< ;0#4 R@-<?  ch @-@--Bocs@--ocs@--? och No block cache availableNot FoundINODE not foundInternal errorSorry - only root filesystem mount capability currently.No mount points left freeNo memory allocated for superblockNo memory allocated for partition tableFilecore boot block checksum failedError reading partition table of disc Error - Invalid partition table or unknown table format Error reading filesystem superblock Error - Invalid filesystem superblock or unknown superblock format Operation not supported Can only open files read-only!Error reading file systemBlock cache refused to die. Oops :-(No filesytstems mounted - cannot perform operation!File Creation FailedDirectory Creation FailedFile Save FailedMalloc() FailedBad RenameFilesystem fullWrite errorPermission deniedBad disklabelPartition table badUnknown partition typeDevice not configured @-@-P: ZŒŒ# P: `B!,aB 0Q:Q:Q:Q:Q:Q:Q}:Qx:Qs:Qn:Qi:Qd:Q_:QZ:QU:QP:QK:QF: QA: Q<: Q7: Q2: Q-: Q(: Q#: Q: Q: Q:Q:Q :Q:QA ? QA ? QA > QA > QQ = QA = QA < QA < QA ; QA ; QA : QA : QA 9 QA 9 QA 8 QA 8 QA 7 QA 7 QA 6 QA 6 QA 5 QA 5 QA 4 QA 4 QA 3 QA 3 QA 2 QA 2 QA 1 QA 1 QA 0 QA 0 \aB`B0QA 0  -L@d% V [(\  8 21 Ƞ Ƞ,8,Ƞ ! -LM 6[ 0-LP@0-L0 P@ 55Address overflow - 0d0  5T2;:D0 0 5Writing too low Raw filecore swi error 0[@- 0 QA0S2 1 -LM 0[ -LHB% ~ ~ 11  10{k [ 12  1@P3`53 Ġ 1P3`53    Ġ   1P031 Pe<@0h0[ [MALLOC!!!!! CACHE_INIT!!! MEMORY_INIT!!! p-L@P\` b0 ! ! !  p[PUp[ -L_q? pg8@0. 4A`PP8P0 F4Ő`U2- 0Ѝ08PU0-4q 0*ЍpW[Error writing cylinder group summary -LFDpB pgd95 @0. 4A=`PP8P0 F4Ő`U2-0 UЍ0BO/8PU0-40 *CЍpW`C [ 0-LP0?0d@\ @d @ A \ @004\*0[Outside Partition 0$D0 00 -0 0[ p-L?P@d`\ `f ` a \ `0@D\*1Op[0D00 -0 p[ P* P: -LP@`<p+ ,Q p% 000  px`0 Spxt (0-0 0 Ѝp%[ -LP@`p@! ,Q @P 000  xE`0 @x: [ -LP`@MppK P 2+;p3E:0 P0(5): `@ P`F\1) 0 p.0 ` read past eof not allowed (yet!) X0 0 p0  ,0p `0P,`0V:[ --L@4M`0PEm 0jp  0QM0 PE*04,@(,, (,, - QP500 0PY0PQ(0 0 - 0wЍOp( 2(  P<*$(@Q *Z4PET90 - 000$0   ЍJ$(0-0 vЍ alloc_alloc failed for db[] @%Y @\00 - 0 ЍUP:0\-0 CЍ0 \  9-  0- \0 ЍQh 0-0 \ЍU P: 0-0 Ѝ0  0   0- 00 00 n ЍO[0-0 Ѝocalloc_alloc failed for ib[1] X9"0 - 0E Ѝ OSUP:0X-0 Ѝ?0 880)0 - 00 00  Ѝ OO0 0-0 sЍ 0-0 gЍ [ /22 -L@$Mt0P( ` 0006 0 /0P0   ZP#`%#p0EQ0  0 pQ  p d W0s<( pW: 0  (:01 (| (&0u1 (`Ō0  =0p Y 0X : 0 )0GpP?0  0(  0- P) 0&ȁp 0310S:3 pW:ps (@O0! $[@- /0$2 . 20.20 /2  22 -L@,M s ,?0(  0 0 !@. 0/303@03p,$0  @0 0 , $,0!1  @X<  -00( Ѝ00' ?ÑƑǑȁd6ˑ̑ԑՑ 5  0䑄B!1$!21 B21 e 1 PQy 0Qmemory_claim() failed FakedUnknown partition type Bombing out... MP@WZ8 " @~Real RiscIx partition table... don't know how to deal with it!!! 外 1 y Q00 @ -00( ``fv0 r0  n0 fRiscBSDNetBSDEmpty:`V:8@' 0 -00( Ѝ@@ 9((,,004488<<@@@ABB@CDDHH@IJJ@KLL@MNN@OPPTTXX\\``ddhhllppttxx||@@`!!`V:11@( 1 䑄y`, 0 4 0 WEV,04,0`!f 01 `V :@: -,` 00( Ѝ0 @V\FAU<0 QVQ\#* @IP@4AMmalloc failed `Y.08 PI4 0, @ :Error reading cylinder group summary   7`6؂8` V:0@ @U S [ 22 2  2AT 000< 0300 3 Q@0 332C00 3003PP -L 0 0 0@00 !0@00[0QJ PaQfQWAAQFQ7A  -L 0 0 2 0[ -LP@4p` /04F[0123456789abcdef -L@M `P%5 5[ tP%5pP9U 4U 1U %5 050 253555657585`0`@P0U9U@oU b5. c5m d5 l5p r5l s5x u5 x5P0 P6 FP`@0 !`F`P`F5 p0`0 kPP5 PX57 0{ ,JCA?D`0P5; P55P0U-Pe P0oP0 gPV5%7l -LM [ 0-L@< 8@4p2t0.,* (d&P(zP UPXqPU0[mode: nlink: uid: gid: size: atime: mtime: ctime: flags: dbs: idbs: end -L@,Pp Ul0PlabbX`V P[ -L`P@p  0 0-0 [ --L@M  PSppPl0    0 0` @L< @L< 0 d9 # @L<\  7 0BAB @L<\ ]0 @L<\   M0e  A AL<\瀑R0 @L<\  1 @ @pWlA   0pWl0-  0 Ѝ 嗐  O 嗐 [ PF + --LP@Mpy`0-0  Ѝ0+,P `,V`F0-0 Ѝ0,Y,P`P0-0 Ѝ0 [`,6`Y -LP`@ 071 $T@4 0 -0 ЍPhh[[alloc_alloc() ... ENOSPC --L@MP `(p76 0 00  - 0H0 ' 7 z hh R R 0-0  {ffs_realloccg: bad bprevbad blockno $Q 0 0K<P(P 0<@(dP 0 - 0 8P@ 0 X @TX0 h 0 h80 `alloc_realloccg: bad optimR R 0-0 Ѝ[ --L@M@PpQl FT QP TVq8A     B Q  0 0'` @L< @L<  TRP ? 0 BL<`0 0B0c00cP8 0 BR?0 CL<`00B0c00c R  @!400C00 @4  T PP&/0 CL<`00B0c00c000$00C$000C0p0T31³l002 LP0-   0 Ѝ- [ --L@pMPpQl007 !  0"0` @L< @L<007 n07 `0-   0 aЍTWp8W41X8Q0   8W 03`0 00B0c00c00080P8@$$pT"l 40-   0 ЍQU 0 P\W8 03`000B0c00c000P$@$@pTl A4A7 H40-  0 [ -L@P`MT pW 0 (`8@M``Q 1`J0| :"0T   !2X# 2 @L<ԐX Pp !PpPAQpW7 pPڇAQpW@PN`H ` Lp T 0Aq,) p TpxGxVn̓  0`0`a!LpXP `0QRp pos = %d, i = %d, fs = %s  80`ZQ(``Vp0`  0"@@ pP"lA|upq !kPg \2" X    B B$ 0TA ` [ --L@Pp 0 @- -0 Ѝ0+`,P@,T@D 0 -0 Ѝ0`,V,@`P 0 -0 Ѝ0 [@,4@`V -L@p M2 Qa,`V`aBf8aBaBA 0!_ @L<` 70$`8aBaBA 08! @L<` 0 ffs_alloccg: map corrupted A,`08 b9̠10B NL<`000B00c00c\3 00Pp 9[ p0PQ}ffs_alloccg: block not in map C-$Ő\l h @S \Ql l̅P   \Ql l P Q`$up\VP`` V  9P P`@ BRCRPX`` R PX@ PBP! !Q@V@ -L08< < < < 1[  ̠   1[ Π B  1[ ̠   1[ [PANIC:ffs_isblock -L80 0 0 0[ panic:ffs_clrblock 0[B1 B[1 [ -L80 0 0 0[ PANIC: ffs_setblock 0[B1 B[1 [ -L@ M(P, 0R@,  cblkfree: bad sizePp$T"V+*tbad block  ! 0((   ^`@00&#@,01]`T0` 0 blkfree: freeing free block1` i 0pWl|@ ! P 2" X    B$ 0T T8@D 2` Y ! aaR` 24 0 ,TPQ2/ AL<`00 B00c00c U blkfree: freeing free frag0 CL<`000B1aaP$$pW"l 1` B ``Q8` 20 t`Y@0` A0Q $8@$8ApW"l B 0pWl|  @ ! P ,2" X    B$ 0(T0-  (0 (Ѝ[C-8`^z8nBnB  A P \9  PL@P8 U8\ R*03 A0Q*  @ p-L  \P0 @P&`  ! 0p[` ` ` ` ` @`T:p[ p-L@PP` 1 2 0-0 `Ѝ `@T:ap[ -L@  0-0 CЍ [ 0-L@QP @T: 0[ 0-L 8  B@Q0 R > > 1 0[@T:0[ 0-L 8  B0@|R R > ><   0[@T:0[@- 8  B# \1 0@4 403  Q: p-LP@`0p[ \ -L`@P000Cy0[1 p R1 003A pW:p R 1 00  S1pW:p $ ᘔ  `w   @    [ -L`@P,@-O`@]P0\# 0  W0   D H( 9cache entry bad p / 0 0 "cache_read: malloc failed cache_read():ufs_bread failed t0 0 FD H(R [ --L`P@ 40 C  - 0 Pp! 0 |` @`O  E@   ! @]P0\#8[ -LA`@0[  00Ɓ P [, -L@ [8 0 103 0000C0 P@- 1>03  Q p-L@1p[ PP` P/&@p[ T@p[ DP!# p[P/| 4,p[ 4$p[ 4p[ 4p[ p[騍č<p[鐊p[p[p[D 01 0"0Q9Q0 AW A1 p-L@5PPP.1@`!30 .0% )0 p[ U,P,1@ph .1$@` 0  p[jpegmpeghtmljpg0# p[mpg0 0 p[ UP.1 Pc0C0h0H0s0S0 @p[txtgif @p[ -L@0M `p00760M X T0.2 "0 0 07malloc failed 4`Ō 0 0 0{0PP 0 `Ō p0 P0@ 0(( 2 (!0 0 pG 9( 0 @A P9  Y0/  X0@ 0$5 9 !0 k0 p Pv($ +0 TUi@  0 0 0 0 0 ,PV*t ,    P A   0       ,: X@A @ 5} P4P 05P[ -L@M`P685pC  p6`Ō p*t  $ )  @    0 0 0   W 7 7H 7H Hpnl[@ -L@ MHpF`D76O `XP y0A`Ō 04 q! !t@@P/10 L0`ŌH 0  PPJ 0 0J 0 F@00@ 0(@ J[Td -L@4h-pP75`\" C p`?  `6` `*  0`Ō4 P  aŌ 0 P45H6@ 6LL 6@L 6@L[( -LMP(`][Y098XO(@(aŌ4*  0p20:( 0 GPP  0R0) GP  `P@D4 T0 * 80   ,0`P@T0@ 0?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~?>~*&N>*>N>6^>>>^>6^>>>^*>>*>>.n>>>>*>n>6^>>>^>6^>>>^&66.66&n666>.>nN^^n^^nN^^^~n~N>6^>>>^>6^>>>^>6^>>>^>>>>>>>~>>>>>>~*>>*>>.n>>>>*>n>>>>>>>~>>>>>>~N^^n^^nN^^^~n~NΊΞΊ        @    !     !@0O[$ p0008 (iii8jresutil REM $NetBSD: resutil,v 1.2 2002/02/11 19:02:38 reinoud Exp $ REM REM Copyright (c) 1995 Mark Brinicombe REM All rights reserved REM REM Redistribution and use in source and binary forms, with or without REM modification, are permitted provided that the following conditions REM are met: REM 1. Redistributions of source code must retain the above copyright REM notice, this list of conditions and the following disclaimer. REM 2. Redistributions in binary form must reproduce the above copyright REM notice, this list of conditions and the following disclaimer in the REM documentation and/or other materials provided with the distribution. REM 3. All advertising materials mentioning features or use of this software REM must display the following acknowledgement: REM This product includes software developed by Mark Brinicombe. REM 4. The name of the company nor the name of the author may be used to REM endorse or promote products derived from this software without specific REM prior written permission. REM REM THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR REM IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES REM OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. REM IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, REM INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, REM BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS REM OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND REM ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF REM THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH REM DAMAGE. REM REM RiscBSD kernel project REM REM banner REM REM Assembly code for resource handling utils. REM REM Created : 10/08/93 REM Last updated : 12/07/95 REM REM initresources REM deinitresources DEF PROCresourceutils LOCAL start% start% = P% [ opt pass% .initresources stmfd r13!, {r0, r14} adr r0, resourcedata swi "XResourceFS_RegisterFiles" ldmfd r13!, {r0, pc} .deinitresources stmfd r13!, {r0, r14} adr r0, resourcedata swi "XResourceFS_DeregisterFiles" ldmfd r13!, {r0, pc} .resourceservice stmfd r13!, {r0-r1, r14} adr r0, resourcedata mov r14, pc mov pc, r2 ldmfd r13!, {r0-r1, pc} .resourcedata ] IF (pass% AND %10) <> 0 THEN PRINT "resourceutils";TAB(25);"Start : ";~start%;TAB(40);"Length : ";~P%-start% ENDIF ENDPROC DEF PROCresourcefile(filename$, rfilename$) LOCAL start%, file, load%, exec%, length%, attrib% start% = P% IF (filename$ = "") THEN [ OPT pass% equd &00000000 ] ENDPROC ENDIF SYS "OS_File", 5, filename$ TO ,,load%, exec%, length%, attrib% file = O% [ opt pass% equd &00000000 equd load% equd exec% equd length% equd attrib% \AND &7f equs rfilename$ equb &00 align equd length% + 4 ] SYS "OS_File", 255, filename$, O%, 0 P% += length% O% += length% [ opt pass% align ] !file = (O% - file) IF (pass% AND %10) <> 0 THEN PRINT filename$;TAB(25);"Start : ";~start%;TAB(40);"Length : ";~P%-start% ENDIF ENDPROC BtNetBSD/!BtNetBSD/src/Banner/!Path100755 147 0 143 7450201577 15262 0ustar imagowheel| $NetBSD: !Path,v 1.2 2002/02/11 19:02:38 reinoud Exp $ Set asmlib$dir dir BtNetBSD/!BtNetBSD/src/Banner/Banner100755 147 0 20045 7450201577 15575 0ustar imagowheelREM> Banner REM $NetBSD: Banner,v 1.2 2002/02/11 19:02:38 reinoud Exp $ REM REM Copyright (c) 1995 Mark Brinicombe REM All rights reserved REM REM Redistribution and use in source and binary forms, with or without REM modification, are permitted provided that the following conditions REM are met: REM 1. Redistributions of source code must retain the above copyright REM notice, this list of conditions and the following disclaimer. REM 2. Redistributions in binary form must reproduce the above copyright REM notice, this list of conditions and the following disclaimer in the REM documentation and/or other materials provided with the distribution. REM 3. All advertising materials mentioning features or use of this software REM must display the following acknowledgement: REM This product includes software developed by Mark Brinicombe. REM 4. The name of the company nor the name of the author may be used to REM endorse or promote products derived from this software without specific REM prior written permission. REM REM THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR REM IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES REM OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. REM IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, REM INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, REM BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS REM OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND REM ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF REM THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH REM DAMAGE. REM REM RiscBSD kernel project REM REM banner REM REM Assembly code for banner module. REM REM Created : 12/07/95 REM Last updated : 12/07/95 REM DIM code% &20000 LIBRARY ".resutil" service_resourcefsstarting = &60 version_number = 020 version$ = "0.20 (12 July 1995) Mark Brinicombe" vdu = 256 FOR pass% = 4 TO 7 STEP 2 P% = code% O% = code% [ opt pass% .modulestart ] PROCmodule PROCresourceutils PROCresourcefile(".sprite", "Resources.RiscBSD.BannerSp") PROCresourcefile("", "") [ opt pass% .moduleend ] IF (pass% AND %10) <> 0 THEN PRINT'"Total length";TAB(49);~moduleend-modulestart NEXT OSCLI("SAVE ^.^.Banner "+STR$~(modulestart)+" "+STR$~(moduleend)) *settype ^.^.Banner ffa REM*rmkill RiscBSD_Banner *rmload ^.^.Banner END DEF PROCmodule [ OPT pass% .modulestart equd &00000000 \ Start code offset equd (initialisation - modulestart) \ Initialisation code offset equd (finalisation - modulestart) \ No finalisation point equd (serviceentry - modulestart) \ Service call handler offset equd (titlestring - modulestart) \ Title string offset equd (helpstring - modulestart) \ Help string offset equd &00000000 \ Command table offset equd &00000000 \ SWI equd &00000000 \ SWI equd &00000000 \ SWI equd &00000000 \ SWI .initialisation stmfd r13!, {r14} \ store return address bl initresources ldmfd r13!, {pc} \ exit .finalisation stmfd r13!,{r0-r2, r8, r14} \ store return address ldr r12, [r12] \ get module workspace address bl deinitresources ldmfd r13!, {r0-r2, r8, pc} \ exit .titlestring equs "RiscBSD_Banner" equb &00 align .helpstring equs "RiscBSD Banner" equb &09 equb &09 equs version$ equb &00 align .serviceentry cmp r1, #&7c \ test for reset beq servicedesktopbanner \ cmp r1, #service_resourcefsstarting bleq resourceservice movs pc, r14 \ exit .servicedesktopbanner stmfd r13!, {r0-r9, r14} \ store registers mov r0, #&00000005 \ Get the file size adr r1, spritefile \ swi "XOS_File" \ bvs abort \ mov r0, #&00000006 \ claim RMA workspace add r3, r4, #&00000010 \ swi "OS_Module" \ bvs abort \ mov r8, r2 mov r3, #&00010000 \ Set up sprite area str r3, [r2, #&0000] \ mov r0, #&00000010 \ str r0, [r2, #&0008] \ mov r0, #&00000009 \ Initialise sprite area orr r0, r0, #&00000100 \ mov r1, r2 \ swi "XOS_SpriteOp" \ movvc r0, #&0000000a \ Load sprite file orrvc r0, r0, #&00000100 \ adrvc r2, spritefile \ swivc "XOS_SpriteOp" \ movvc r0, #&00000028 \ Get sprite information orrvc r0, r0, #&00000100 \ movvc r1, r8 \ adrvc r2, spritename \ swivc "XOS_SpriteOp" \ movvc r0, r6 \ Get sprite width in movvc r1, #&00000004 \ OS units swivc "XOS_ReadModeVariable" \ movvc r3, r3, lsl r2 \ movvc r0, r6 \ Get sprite height in movvc r1, #&00000005 \ OS units swivc "XOS_ReadModeVariable" \ movvc r4, r4, lsl r2 \ blvc getscreensize \ Get the screen size bvs abort1 \ mov r0, r0, lsr #1 \ Calculate sprite mov r1, r1, lsr #1 \ corner position mov r3, r3, lsr #1 \ mov r4, r4, lsr #1 \ sub r3, r0, r3 \ sub r4, r1, r4 \ bl colourtrans mov r0, #&00000134 \ Plot sprite mov r1, r8 \ adr r2, spritename \ mov r5, #&00000000 \ mov r6, #&00000000 \ mov r7, r9 swi "OS_SpriteOp" \ \bvs abort1 mov r0, #&00000007 \ release RMA workspace mov r2, r9 \ swi "XOS_Module" \ mov r0, #&00000007 \ release RMA workspace mov r2, r8 \ swi "XOS_Module" \ ldmfd r13!, {r0-r9, r14} \ Restore registers mov r1, #&00000000 \ Claim service call movs pc, r14 \ Exit .abort1 mov r0, #&00000007 \ release RMA workspace mov r2, r8 \ swi "XOS_Module" \ .abort ldmfd r13!, {r0-r9, r14} \ Restore registers movs pc, r14 \ Exit .spritefile equs "Resources:Resources.RiscBSD.BannerSp" equb &00 .spritename equs "banner" equb &00 .getscreensize stmfd r13!, {r2-r4, r14} mvn r0, #&00000000 mov r1, #&0000000b swi "XOS_ReadModeVariable" addvc r3, r2, #&00000001 movvc r1, #&00000004 swivc "XOS_ReadModeVariable" movvc r3, r3, lsl r2 mvnvc r0, #&00000000 movvc r1, #&0000000c swivc "XOS_ReadModeVariable" addvc r4, r2, #&00000001 movvc r1, #&00000005 swivc "XOS_ReadModeVariable" movvc r4, r4, lsl r2 movvc r0, r3 movvc r1, r4 ldmfd r13!, {r2-r4, pc} .colourtrans stmfd r13!, {r0-r7, r14} mov r0, r8 adr r1, spritename mvn r2, #0 mvn r3, #0 mov r4, #0 mov r5, #&00000002 mov r6, #0 mov r7, #0 swi "XColourTrans_SelectTable" bvs abort1 mov r0, #&00000006 \ claim RMA workspace mov r3, r4 swi "XOS_Module" \ bvs abort1 \ mov r9, r2 mov r0, r8 adr r1, spritename mvn r2, #0 mvn r3, #0 mov r4, r9 mov r5, #&00000002 mov r6, #0 mov r7, #0 swi "XColourTrans_SelectTable" bvs abort1 ldmfd r13!, {r0-r7, pc} .moduleend ] ENDPROC BtNetBSD/!BtNetBSD/src/Banner/Sprite100644 147 0 124020 7450201601 15635 0ustar imagowheelbanner) wwwwwwUUUUUU333333DDUUwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwGDGDGDGDgfgfgfgfgfgfgfgf gfPV gfkfegfcP[Kfgf`kf 6gf`[[P[fgf\` Pkgf`fVffK [[`[gffK PfkV[[f[Ukff@kekfPkgff@fVekVK[ [UfeffgfahffUV[ke[[kVef@[fgf`f[@f[[K[dKK[[[eUff`[gfaf[[kkef[;SkU[ [FK[fk`[fgf`XhKd[[U[ U 5fV[fgfaVfV[[kUKKT[[ [UkFgffV[[e[[ `KE+P U[efegffUVfkU[ E[ kVehfgf`fffVf[K  TU[fehUfgfVVVU@d0Xb [P+feffXfgfaVheVTU&FPK[UehheegfVhVXUVK V[hV@KUE;eP[[VehgfeV+ff[`e8eeUeegfafhe[Kkfk [fkhf[[[eVgf`feUeV[ @[[fXVfgfaVV[e[[[[K [kkeVK[[UVfgf`fhf[[ecn @VP[e[ehgfaeXUV[eUKPVK[[[k61VffgfVhXK[VUPQe[[UVk[kKeUVgfVXVe[fek[V^PK[U[eK[[e gffXV[K[[e[` e`VfkK[[VeegfahfUU[f kPV[efgffVef[[[kff @f`@[[[[KUUfhgfaVe[V[edf[E aff0f[VhefgfeVUUfkKV ffP TfF`[VekVehgfaeVUUfeP[f[[F P@ffe[fkUUehVgf0fUU[[k `feF dXkfV[fUUeVgfVVkf[kdVfKkUUfgf`V[K[nkekf `e[[e gfU[ffV[[egf[VK[Uff[ `[fhf[[[[Ugffeke[fff[Ukhff[U[[egffX[[UffU@Ufff[[VVfgffUUU[[khkakUffU[XfgfUeU[ffUUUXfgffhhXV[QffK[UVUhgffVUU[UF [[[efgfffXfhXUVf dUUUhXefgfeVeheVUekfeUfffgfkfVUfUUU `VUeVVeVgfXfkfhfUKUUUhfUefgfVVVeVUUfff;gffhVfK[kUeVeeegffffhVe[[ P[[hfefgf`ffVhUk[ `Vefffgf`hVUU[[[@[UeffgfffVffXfUUUUehhgfffVhUUV kUUfffeffgfffUUhkefU[ eUU[eXff gf`fhfVekkVSUkfVUUffgf`efaUV[e[SV [5eVeXffgfdfhfaUUU;dfU;$VUV e5kVeUfVhgfefhf dXUkUeke[kE3#3 eUkeBKUfFUUUPffFgf\fhffV @[UekkU;"BXD333" [323TV[VUkUFffV gf@eff[fS[wVUUeUD###3UTEE3"333D$"UV[UXefffgfdfkfVUKE[ufeXUU[UES322TE332@3TTEU3222DU[VUUehw5;kfffVgf`[[V4U[fgUUXUUUUEE4SSUESE @#33TE##35TUUUhVfWTKUeffFgfVeN[fffXXUeXUUE43 T5TU55CTTUUUXUUUvf[UK;KCegfE[K0KN]UevffUUUUUUE4383CTUUXVXUfff[M `Ve gfPke^^[kfffghVXUUTU;a3CTUXUUUUUhffgVUKTgfPefk[kTefvwgfffVK UEUUXXevfffQ `VgffVffkUffffgf[K1ekfffvwgfkVEK;fVgfPwfff[k 㵳fvffffU[[[fkfef gf`vwfff;[>+ [[[fffwgfPffffwfVfUU `KK[[fffwggfᵶf[K UUfefwffffgfNNNfk[gf ;gf gf gfgfgf gfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgf1gfRUUUUUU w3333333#ewg%QUUUUUU5Tcww%gf2vwwwwww7@w7Cwwwwwww6swwwwfG1uwwwvwww6rgbwwwwgf@ww&2vw&0wsww43Cvw@w6tw7 ww1uw7cwg wwwww'gf ww0wgCqwg0wgrwvGww vwbfwwagtwggf wgswawGtwuGaWvwPwwsgs wwgf wgqw'awGqwwGWvwuwtgVswgf wg`w7qw7Pw' w7VwwawGsg &awgf wglw7awGPwG wgevw0wwtw@Pwgf wg`w7 33aw7Pw'wwcvwvwsgPwgf wwqw'c'@vfWE1www%awGqwuwgvwuwtgPwgf wgtw0vw'vcW0wvwqw7uwrww6wwswsg`wgf wg@wgauw'PW0Ws&aw&awGQw70www6vwrw'tg|ggf wg0vw&@w'qGU w@w7awgUUvwGtwww6vwrw7sgs7gf wwWuwwG@w'rWS`g0w6awwwwwwW vwww5vwawGtwvgf wwwww&0w'qw1rGDqwG!dwG vwwwwwrw7sg@wgf wgawG@w'PwgtGaw7vw uww'vwrw7tgb'gf wg ww0w' wwgu'awGawW vwgvwrwsgvgf wwsw'@w'bwwWv'bw7@wgaww vwtwtwP'gf wgPwg0w'tww'wGawG ww" wwvwuwsgsgf wgvw@w' twwvWaw7 wwcuwvwwwtg0Ggf wgrwG0w'!vwug"qwG wwrswwwPwGsgtgf ww0vw@w'bPwsw6aw70wwqrwvwsw'tg07gf wgtw0w'b vrw7PawGawGaWtwvw0wwsg#s@gf wwpwW@w'rv@ww# vawGtw`wvWvwtw&twaw W1tgf0ww ww@w'r' wvwwfw7rwgBwgPwgQw ww1twGtwsw7rwwwwwwggfsww'twWbwgrwb7awwww!vwwwgwww0wwg4CwgbwwwvwwwGAww&sw7 vwwwwww7gfsgwvv7agwfawgwfRSwggtww% wgwvvvgf0&"uwwgrwvgwggF#swvvvGaw`wvvgwvggf 3223#gfgfgfgfgfgfgfgfgfgfgfgfgfgfRE033343333 T033333#33A33333#DD2331ADAD 333gfcWdgtgCvgAwWeWt5utg3u&AwaG0uvVugUW tbcbcvw7Bg &16 &16awwwgf@FAFr&b7 wt070'r&v gbr&qT bV@'V@' 63"fatatb43sgfsBEdr&PG gq&P'%r&aG gFrq1P&07 G07 GPesrsrcgfFG1&@r'PW1 # gaPGr'0w wa2  #rq #202PP'WP'WsguuquqTgf &Q$ r&a7BW0%b05u gt w&r& w g"6QDfAvdGdGegEdrqEdbVdGUgSe7PP7vQ7vcwgeuaua6gf0r&r& u1Wa0TP' wVeGtwr&v gt5ru%$aGtQgrqQgfta7tVP0Wg1W f vesqsq0&gf0s'rgw& WrF0 w4Cg twr&v wvg073suP'ts3Cvrqs3CvDsP'sePvAWvAWb'ua'ta'tPgf0br&s WPg0' gr' v&r'v g"w@G33uP'st433rqt433CvP'tePbwUGbwUG0Ge vWu vWu`gf6@ r&PW WtW1' gPGbGr& w grGPuP'terqeRsP'suP`` 7@wwevvagfUfUQr'v W t5G wPWB@Wr&@g w wP'uP'surquFtP'tePrr 'u G Gbgfafr&q' WB`&w ga7b0Gr&s& gt' g$uP'tr@rqr@2GsP'sePWW0eqq5gfvtr70w WbPtgc wua7brGBW wPgu6TuP'sPgCErq'PgCE0g"v$P'tutQcc VRe0V0V &gf vw&@vfeVbgRUT@v7dggv6QTfG@vvvVdg&dwGaw7AwEcW#v&vw0vV@vfvwvGr7cW#v&Qvu&@uWS5S5 vW$Tw&0U0U@gf0gf@gfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfbwWuugf@wPW@vgf0wPwr1gf@wPw2 #v3#gf0w`7b4f Vb`wg!w5wVwtTggf@wVvvsq@G wvv&b7 gvgf0waW@gss0g!wvvbG0gvgf@w0wSWb'u v"w vvb7wwgf0w wUWb'u v"wvwqGbfGgf@w w4gss0g wvvb7Ta&fa&gf@w@gvta@7w4wvaG g43sW0wsWgfcwffaEVVdt70v6w6tW1wwwq7wq7gfuvwgf@&gf@'BgfSE$gfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwgfDDfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDDfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDDfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDDfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffBtNetBSD/!BtNetBSD/!Edit100755 147 0 301 7450201600 13236 0ustar imagowheel| $NetBSD: !Edit,v 1.2 2002/02/11 19:02:37 reinoud Exp $ | | !Edit file for !BtNetBSD application | Set BtNetBSD$Dir Filer_OpenDir Filer_Run .fastboot BtNetBSD/!BtNetBSD/!Run100755 147 0 522 7450201600 13122 0ustar imagowheel| $NetBSD: !Run,v 1.2 2002/02/11 19:02:37 reinoud Exp $ | | run file for !BtNetBSD application | WimpSlot -min 64k -max 64k IconSprites .!Sprites Set BtNetBSD$Dir | First, check if we are running the version of RISC OS 4.03 that | needs the memfix module Run .checkro403 Obey .fastboot BtNetBSD/!BtNetBSD/Files100755 147 0 1645 7450201600 13406 0ustar imagowheel$NetBSD: Files,v 1.2 2002/02/11 19:02:37 reinoud Exp $ FBInstall - describes how to install Settype - types all file for RiscOS List of files of !BtNetBSD : !Run } !Boot } !Help } !Sprites } Standard Application Files !Sprites22 } !Edit - Edits the `fastboot' file Banner - RiscBSD banner module BtNetBSD - RiscBSD bootloader checkro403 - Tests if we're running RO4.03 for MemFix MemFix - Module repairing memory layout reporting for Kinetic TestBoot - Fastboot tester PreBoot - Preboot obey file native - Native filesystem support directory native.mountufs - Frontend for mounting ffs partition native.unixfs_res - Restricted write Unixfs module fastboot - Fastboot (obey) file in text format FBInstall - Doc on installing fastboot support src - Source code Legal - Contains copyright information BtNetBSD/!BtNetBSD/Legal100755 147 0 1156 7450201600 13365 0ustar imagowheel$NetBSD: Legal,v 1.2 2002/02/11 19:02:37 reinoud Exp $ Copyright acknowledgement of the !BtNetBSD application ------------------------------------------------------ The memfix module in the !BtRiscBSD directory is copyright RISC OS ltd and Castle Technology Ltd. It is included in this archive with the permission of the copyright holders. This product is released under a BSD style licence. This product includes software developed by Mark Brinicombe This product includes software developed by Reinoud Zandijk This product includes software developed by the University of California, Berkeley and its contributors. BtNetBSD/!BtNetBSD/!Sprites100644 147 0 1530 7450201601 14025 0ustar imagowheel\L!btriscbsd, "="=] ]=% :]=%5==]:]==]!3CDUeefffe]:] =]%U%]U%"ڥ -ڪ- BtNetBSD/!BtNetBSD/PreBoot100755 147 0 526 7450201600 13673 0ustar imagowheel| Start EtherH setup | | Fix for the EtherH card. We need to do a *ehtest before booting RiscBSD | Test to see if the EtherH module is present and if it is | run *ehtest | set ETHERH$PRESENT 1 rmensure EtherH 0.0 set ETHERH$PRESENT 0 if > 0 then ehtest { > null: } | End EtherH setup | Start User options | End User options BtNetBSD/!BtNetBSD/TestBoot100755 147 0 5754 7450201600 14114 0ustar imagowheelREM >testboot REM $NetBSD: TestBoot,v 1.2 2002/02/11 19:02:37 reinoud Exp $ REM REM Copyright (c) 1995 Mark Brinicombe REM All rights reserved REM REM Redistribution and use in source and binary forms, with or without REM modification, are permitted provided that the following conditions REM are met: REM 1. Redistributions of source code must retain the above copyright REM notice, this list of conditions and the following disclaimer. REM 2. Redistributions in binary form must reproduce the above copyright REM notice, this list of conditions and the following disclaimer in the REM documentation and/or other materials provided with the distribution. REM 3. All advertising materials mentioning features or use of this software REM must display the following acknowledgement: REM This product includes software developed by Mark Brinicombe. REM 4. The name of the company nor the name of the author may be used to REM endorse or promote products derived from this software without specific REM prior written permission. REM REM THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR REM IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES REM OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. REM IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, REM INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, REM BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS REM OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND REM ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF REM THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH REM DAMAGE. REM REM NetBSD kernel project REM REM testboot REM REM Sets the FastBoot flag as required REM REM Created : 12/05/95 REM Last updated : 03/09/95 REM *Set NetBSD$FastBoot 0 REM Test for either ALT keys IF (INKEY(-3) <> 0) THEN alt% = TRUE *Set NetBSD$FastBoot 1 ELSE alt% = FALSE ENDIF REM Get byte 80 from the CMOS RAM. This is a RiscIX byte that we are using. REM bits are as follows : REM bit 0 - configure bootNetBSD REM bit 1 - automatic reboot required. SYS "OS_Byte", 161, 80 TO ,,value% REM Has the user configured a NetBSD boot ? REM If a NetBSD boot has been configured ALT can be used to REM select a RISC OS boot IF (value% AND &01) THEN *Set NetBSD$FastBoot 2 ENDIF REM Did the kernel request a automatic reboot ? IF (value% AND &02) THEN *Set NetBSD$FastBoot 3 REM Clear the automatic reboot flag SYS "OS_Byte", 162, 80, value% AND &fd ENDIF REM If the CMOS bits dictate a reboot then allow ALT to override. IF (value% AND &03) THEN IF (alt% = TRUE) THEN *Set NetBSD$FastBoot 0 ENDIF ENDIF REM Test for CTRL key - This does a fastconf and will override a reboot IF (INKEY(-2) <> 0) THEN *Set NetBSD$FastBoot 4 ENDIF ON ERROR END *If > 0 then RMLoad .Banner BtNetBSD/!BtNetBSD/checkro403100755 147 0 1136 7450201600 14204 0ustar imagowheelREM >checkro403 REM $NetBSD: checkro403,v 1.2 2002/02/11 19:02:37 reinoud Exp $ REM REM This program checks the build date of RISC OS to see if it is the one REM with the bug in OS_Module 7 (RO 4.03 for the Castle Kinetic Card). If REM so, it ensures that the memfix module has been loaded : ON ERROR ERROR EXT 0,"This version of RISC OS 4.03 needs the memfix module. NetBSD will not boot without it": END SYS"XOS_ReadSysInfo",9,1 TO build$;flags% IF (flags% AND 1)<>0 THEN END :REM SWI returned with the V flag set IF build$="20000507-001" THEN OSCLI"rmensure memfix 0.11 rmload .memfix" BtNetBSD/!BtNetBSD/fastboot100755 147 0 2050 7450201600 14154 0ustar imagowheel| $NetBSD: fastboot,v 1.3 2002/02/12 00:29:55 reinoud Exp $ | | Fast boot configuration file, edit by hand, save and run !BtNetBSD | Part of !BtNetBSD | | First mount the root partition wd0a in this case for the kernel Run .native.mountufs ADFS 4 | Run The PreBoot file for various extra settings nessisary Run .PreBoot | Select the monitor defintion file and screenmode Set NetBSD$MDF ADFS::4.$.AKF85 Set NetBSD$ScreenMode "X1024 Y768 C256" | Select Kernel, Root and Bootoptions | add `oldkernel' to BootOptions for booting old a.out kernels | Set NetBSD$Kernel UnixFS:$.netbsd Set NetBSD$Root /dev/wd0a Set NetBSD$BootOptions maxproc=64 noftp symtab | Set WimpSlot (suit as you like ... to little won't boot correctly) *Wimpslot 7000k | End of options | ----------------------- | Set environment and try to boot NetBSD! | loadmodefile Set Alias$SetNetBSDMode Wimpmode SetNetBSDMode Set Alias$RunNetBSD .BtNetBSD root= RunNetBSD BtNetBSD/!BtNetBSD/!Sprites22100644 147 0 45574 7450201601 14231 0ustar imagowheelKlfile_fe6',L#b@[EE13[fR[[K[f!6%Vk650@[[[e&A![effTS0[UVU@[1Uee[eE0[kT[U64eUe55@V[[[[VACcUUCf0#[UUe& U35P[UUVKAk0[fK[[dfUe1T[UUQ[Ue0VUhUA[eUf@[Ufe [UeUUeeVeUUf2T[UUeV2DU[[U[U$df03DE"S[UU2[fF4D4CTUUUhff% 3CUUUXfU[41TUehffE+Kdf!3eE#.^[kfvS[kffg 3KK riscbsd16K \ wwwwwwUUUUUU333333DDUUf Vefd`[[kPkef@VkfU [[Vfeff0kf[Ue[Vfkffe[[[eUkfP[fUE[UUff`[[fUKKDUf[[e [[UU[[TeeE+PUee[UUUVUTP[UUUefP+ UUUeUV&dU PUeVXfKhD;eTUeVheaffd6eP[[[Uhee[kehfUUeVU @U[VeK[UUUV [U[Ue@TK[[VQU[Uee5 K80[UeVC[[[[Xk[[UUeeE[UUeKK[UUhU EkP[U[ef[PU[[[E[[UUfUPf`UU[UKK[UUUU`ff@[U[UU[UhfTEeKQUUUUXeV@@ff[[[UUedfUEkf[UUUUUf[e fVUUeefaU[e;KKf`[fffU[Ue`K[fff[UU[[U@eUUVf[[[UUVfUee[UUXfeUU[K[UUUffaUUUUUeU[UUUf[UUVeeQUUUUUeUfVUUUVhUVfUUUUeUVeKeUVUeF[[UVVVfePUVVVVVfP[UUUUefPUheeeUUeehXfkUUUXVVfefVUUeeUUUUfk[U[VVUfkV4UVUUeXVfh^k5[[[UUfVfeVfCKeEDUUXQfffFnD#3TV[e[UUUUEQVff$3C3Df$#SUUUUffhfffP2TDET#3#3DU[UUXevUE;[efff#3CT53"3DUUUUUefW[efffF4DTEDCDTTUUUXUXffUUK;R53CUUUUUUkgVU[嵳P[ea43DUUXXUUUffV[Ne[[SUTUXUXffgfffUE^\VV1UUVfffwwgfffefgffff[[UVkffN A[[[[fffgPfffwgTKVfffffff DU[k[[(riscbsd256K,\5 6\88606 062 6 . 28 8  98 6  88    ֥    6     .,      22    .  22    68   23  968,  5 ,9  9,6  ,\   9823   2 02 82,2 8 28  \  666     52        2   2       8   63  65    0      5             0  9.   V5,, , 69829.2,  368Բ. 68  5ղ 9 66   09ղղ. , 0002232 33Բեԥ , ,00002500, 33.Ԧ.Բ.  000000223\]3,8 ԥ , 0002052666 Բ ,000023326\980]. 00222360 0V60 002023\,0680000236 06363336\66 0000,063200000036\66\6l!btnetbsd',L/=##$b=]O[:EE13=ݳ[fR[[K[f!6%Vk6/50@[[[e&/A [effUTS0[UVUO[1Ue%e[eE15?[kT[U6]4eUe5=]5@V[[[[V]OCcUU=]Cf*[UUe&]/U3][UU==]VKDkcffVV?[fK[[fffedfUe=]1T[UU]Q[Ue=]:VUhU]A[eUf5/J[Ufe]"[UeU/UUeeV]eUUfT52T[UUeV2DU[[U[Udf?3DE"S[UU[fF4D4CTUUUhff%/3CUUUXfU[41TUehffE+Kdf!3eE#.^[kfvS[kffgO%3KKBtNetBSD/!BtNetBSD/BtNetBSD100755 147 0 121204 7450201600 13743 0ustar imagowheelREM > BtNetBSD REM $NetBSD: BtNetBSD,v 1.5 2002/03/24 21:59:48 reinoud Exp $ REM REM Copyright (c) 2000, 2001, 2002 Reinoud Zandijk REM Copyright (c) 1998, 1999, 2000 Ben Harris REM ELF file reading based on work by Ben Harris REM All rights reserved. REM REM Redistribution and use in source and binary forms, with or without REM modification, are permitted provided that the following conditions REM are met: REM 1. Redistributions of source code must retain the above copyright REM notice, this list of conditions and the following disclaimer. REM 2. Redistributions in binary form must reproduce the above copyright REM notice, this list of conditions and the following disclaimer in the REM documentation and/or other materials provided with the distribution. REM 3. The name of the author may not be used to endorse or promote products REM derived from this software without specific prior written permission. REM REM THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR REM IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES REM OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. REM IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, REM INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT REM NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, REM DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY REM THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT REM (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF REM THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. REM REM This file is part of NetBSD/acorn32 -- a port of NetBSD to ARM6+ machines REM This source contains pieces of code by Ben Harris (file structure) REM and Mark Brinicombe (DRAM/VRAM search) REM REM Purpose : Trying to boot NetBSD/acorn32 !! ON ERROR REPORT:PRINT " at line ";ERL: PRINT'"Press key":QQ=GET:END debug% = 0 emulateVRAM% = 0 emulateDRAMsize% = 0 extradebug% = 0 startdelay% = 5 REM For Kinetic cards SDRAM_ADDR_START% = 512*1024*1024 REM For debugging only : REM SDRAM_ADDR_START% = &18000000 REM set pretty screen for printing without scrolling SYS "XWimp_CommandWindow", -1: VDU 26 SYS "XHourglass_Smash" MODE MODE COLOUR 128+4:CLS scwidth% = FNvdu_var(256): scheigth% = FNvdu_var(257) width% = INT(scwidth%*0.75*0.5)*2: heigth% = INT(scheigth%*0.75*0.5)*2 VDU 4, 28, (scwidth%-width%)/2, (scheigth%+heigth%)/2, (scwidth%+width%)/2, (scheigth%-heigth%)/2 COLOUR 128:CLS PRINT'' PROCcenter("BtNetBSD 0.99a") PROCcenter("booting NetBSD/acorn32 on a RiscPC/A7000/NC") PRINT'' REM get argument string SYS "OS_GetEnv" TO args$ WHILE LEFT$(args$, 1)=" ": args$=MID$(args$,2):ENDWHILE IF LEFT$(args$, 5)="BASIC" THEN args$=MID$(args$, 6) WHILE LEFT$(args$, 1)=" ": args$=MID$(args$,2):ENDWHILE IF LEFT$(args$, 5)="-quit" THEN args$=MID$(args$, 6) WHILE LEFT$(args$, 1)=" ": args$=MID$(args$,2):ENDWHILE prog$ = LEFT$(args$, INSTR(args$, " ")-1) args$ = MID$(args$, LEN(prog$)+1) WHILE LEFT$(args$, 1)=" ": args$=MID$(args$,2):ENDWHILE REM get kernel name file$ = LEFT$(args$, INSTR(args$, " ")-1) PRINT"Booting ";file$;" ";args$'' IF FNtolower(LEFT$(file$,9))="unixfs:$." THEN kernelname$=MID$(file$, 10) ELSE kernelname$="netbsd" : REM RISC OS file namen zeggen niets XXX ENDIF REM Get some space to mess with REM Declare a large array ... and then wipe it/map it in in the OS_Mem loop REM the difference is that RO4 won't map it in by default and REM that could trigger a OS_Memory bug ... SYS "OS_Memory", 6 TO ,memorytablesize%, nbpp% : REM get tablesize% memory_image_size% = HIMEM-512*1024 : REM keep a 512 Kb for vars DIM memory_image% memory_image_size% : REM claim the space bot_memory% = memory_image% top_memory% = memory_image% + memory_image_size% KERNEL_BASE = &F0000000 MAX_RELOCPAGES = 4096 MAX_DRAMBANKS = 32 MAX_VRAMBANKS = 16 twirl% = 0 firstpage% = (bot_memory% DIV nbpp%)+1 lastpage% = (top_memory% DIV nbpp%)-1 totalpages% = lastpage% - firstpage% PRINT "I got a ";totalpages%;" memory pages to mess with" relocsize% = (MAX_RELOCPAGES+1)*12 DIM relocinstr% relocsize% relocpos% = relocinstr%+4 : REM first word in number of relocations relocnr% = 0: relocoff% = 0 REM this memory block contains all information about the memory layout REM maybe a bug in BASIC but if I DIM this variable in a procedure it REM gets on the stack or so ? It malfunctions if I pass this on as a REM procedure variable. DIM memoryblock% (totalpages%*12+4) PROCget_memory_configuration PROCget_memory_map PROCload_kernel(file$) PROCcreate_initial_pagetables PROCadd_pagetables PROCcreate_configuration REM now only the relocation code itself and then copying the relocation table itself !relocinstr% = relocnr% PROCcreate_relocate_mechanism PRINT " " REM start the kernel A% = FNblock_paddr(configurationbasepage%) B% = physical_start_address% - FNblock_vaddr(relocatebasepage%) + FNblock_paddr(relocatebasepage%) C% = FNblock_paddr(relocatebasepage%) + nbpp% : REM one page after the code D% = L1pages_phys% E% = entry% IF debug% THEN IF ((relocpos%-(relocinstr%+4)) MOD 12)<>0 THEN ERROR 0,"Sanity check for relocation entries failed!" PRINT"Entering kernel at 0x";~entry% REM OSCLI("Memoryi "+STR$~(FNblock_vaddr(start_kernelpage%)+(entry% MOD nbpp%))) REM PRINT"Go for it (key)":qq=GET ENDIF PRINT ''"Press ESC to abort loader" PRINT "Kernel will be started in "; FOR secs%=startdelay% TO 1 STEP -1 PRINT ;secs%;"..."; tt=TIME: WHILE TIME-tt<=100: ENDWHILE : REM wait one second NEXT PRINT "start!" REM get ECID for each podule FOR pod% =-1 TO 8 SYS "XPodule_ReadID",,,,pod% NEXT REM shut down RiscOS SYS "XOS_CLI", "RMKill UnixFS" SYS "OS_FSControl", 23 : REM close files etc. SYS "OS_ServiceCall",, &45 : REM prereset REM Remove all cursors *pointer 0 SYS "OS_RemoveCursors" REM XXX is this OK ? What is this! DIM buf 8 buf!?3 = 2: buf!4 = 0: SYS "OS_Word", 22, buf+3 CALL relocate_entry% END DEF PROCload_kernel(file$) LOCAL file%, magic% file% = OPENIN(file$) IF file% = 0 THEN ERROR EXT 1, "Can't open kernel" DIM magic% 3 SYS "OS_GBPB", 3, file%, magic%, 4, 0 IF magic%?0 = 127 AND magic%?1 = ASC("E") AND magic%?2 = ASC("L") AND magic%?3 = ASC("F") THEN PROCload_kernel_elf(file%) ELSE PROCload_kernel_aout(file%) ENDIF CLOSE#file% ENDPROC REM ***************************************************************************** REM * ELF LOADER * REM ***************************************************************************** DEF PROCload_kernel_elf(file%) REM read header DIM hdr% 52 SYS "OS_GBPB", 3, file%, hdr%, 52, 0 REM check if its a correct kernel to load IF hdr%?4 <> 1 THEN ERROR 1, "Not a 32-bit ELF file" IF hdr%?5 <> 1 THEN ERROR 1, "Not an LSB ELF file" IF hdr%?6 <> 1 THEN ERROR 1, "Not a version-1 ELF file" REM hdr%?7 is EI_OSABI. Should it be 255 (ELFOSABI_STANDALONE)? IF (hdr%!16 AND &FFFF) <> 2 THEN ERROR 1, "Not an executable ELF file" IF (hdr%!18 AND &FFFF) <> 40 THEN ERROR 1, "Not an ARM ELF file" PRINT "(ELF) "; REM read kernel characteristics and headers entry% = hdr%!24 phoff% = hdr%!28 shoff% = hdr%!32 phentsize% = hdr%!42 AND &FFFF phnum% = hdr%!44 AND &FFFF shentsize% = hdr%!46 AND &FFFF shnum% = hdr%!48 AND &FFFF DIM phdrs% phnum% * phentsize% - 1 : REM array with headers ? SYS "OS_GBPB", 3, file%, phdrs%, phnum% * phentsize%, phoff% IF phnum% = 0 THEN ERROR 1, "No program headers" REM start loading ! freepagesbase% = first_mapped_DRAM_index% : REM == first virt address in DRAM0a start_kernelpage% = freepagesbase% pv_offset% = KERNEL_BASE - DRAM_addr%(0) : REM XXX hardcoded REM load the program blocks first% = TRUE FOR ph% = phdrs% TO phdrs% + (phnum% - 1) * phentsize% STEP phentsize% IF ph%!0 = 1 THEN REM We only do PT_LOAD IF NOT first% THEN PRINT "+"; first% = FALSE offset% = ph%!4 vaddr% = ph%!8 REM physaddr% = ph%!12 filesz% = ph%!16 memsz% = ph%!20 flags% = ph%!24 PROCload_chunk(file%, offset%, vaddr%, filesz%, memsz%) REM freepagesbase% is updated vfreebase% = vaddr% + memsz% : REM memsz% is the real size.... filesz can be only Text f.e. ENDIF NEXT txtbase% = 0 txtsize% = 0 database% = 0 datasize% = 0 bssbase% = 0 bsssize% = 0 ssym% = 0 esym% = 0 DIM shdrs% shnum% * shentsize% - 1 SYS "OS_GBPB", 3, file%, shdrs%, shnum% * shentsize%, shoff% IF shnum% <> 0 THEN havesyms% = FALSE FOR sh% = shdrs% TO shdrs% + (shnum% - 1) * shentsize% STEP shentsize% IF sh%!4 = 2 THEN havesyms% = TRUE NEXT IF havesyms% THEN IF INSTR(args$, "symtab")=0 THEN havesyms% = FALSE IF debug% THEN IF havesyms% PRINT ;" (symbols avail) "; ELSE PRINT ;" (ignoring symbols) "; ENDIF ENDIF REM freepagesbase% points to first free relocation page IF havesyms% THEN REM vfreebase points to first free address in relocated area PRINT "+["; REM First, we have the munged ELF header ssym% = vfreebase% ssympage% = freepagesbase% PROCload_chunk(file%, 0, ssym%, 52, 52) !(FNblock_vaddr(ssympage%) + 32) = 52: REM PROCwrite_word(ssym%+32, 52) vfreebase% += 52 REM then, the munged section headers mshdrs% = vfreebase% mshdrspage% = freepagesbase% PRINT "+"; PROCload_chunk(file%, shoff%, mshdrs%, shnum% * shentsize%, shnum% * shentsize%) vfreebase% += shnum% * shentsize% FOR sh% = shdrs% TO shdrs% + (shnum% - 1) * shentsize% STEP shentsize% IF sh%!4 = 2 OR sh%!4 = 3 THEN PRINT "+"; PROCload_chunk(file%, sh%!16, vfreebase%, sh%!20, sh%!20) !(FNblock_vaddr(mshdrspage%) + sh% - shdrs% + 16) = vfreebase% - ssym% vfreebase% += FNroundup(sh%!20, 4) ENDIF NEXT esym% = vfreebase% PRINT "]"; ENDIF ENDIF PRINT " "; kernelpages% = freepagesbase% - start_kernelpage% IF extradebug% THEN PRINT ''"Number of kernel pages ";kernelpages%;" (";kernelpages%*nbpp%;" bytes)" PROCfinish_relocationtable ENDPROC DEF PROCload_chunk(file%, offset%, vaddr%, filesz%, memsz%) LOCAL paddr%, ppn%, fragaddr%, fragsz% REM offset% offset in file REM vaddr% indicates virtual address where stuff needs to be relocated to REM filesz% number of bytes to read of `file' for this chunk REM memsz% number of bytes to clear for this chunk PRINT ;filesz%; IF extradebug% PRINT ;" (";~vaddr%;"-";~(vaddr%+memsz%);" [till base+";INT((vaddr%+memsz%-&F0000000)/1024);"k]) "; WHILE filesz% > 0 REM freepagesbase% is first page index in freepages list fragsz% = nbpp% IF fragsz% > filesz% THEN fragsz% = filesz% fragaddr% = FNblock_vaddr(freepagesbase%) SYS "OS_GBPB", 3, file%, fragaddr%, fragsz%, offset% REM create a relocation block relocpos%!0 = FNblock_paddr(freepagesbase%) relocpos%!4 = vaddr% - pv_offset% relocpos%!8 = fragsz% relocpos% += 12: relocnr%+=1: relocoff%+=1 freepagesbase% += 1 offset% += fragsz% vaddr% += fragsz% filesz% -= fragsz% memsz% -= fragsz% PROCtwirl ENDWHILE IF memsz% > 0 PRINT "+";memsz%; WHILE memsz% > 0 REM freepagesbase% is first page index in freepages list fragsz% = nbpp% IF fragsz% > memsz% THEN fragsz% = memsz% PROCbzero(FNblock_vaddr(freepagesbase%), fragsz%) REM create a relocation block relocpos%!0 = FNblock_paddr(freepagesbase%) relocpos%!4 = vaddr% - pv_offset% relocpos%!8 = fragsz% relocpos% += 12: relocnr%+=1: relocoff%+=1 freepagesbase% += 1 offset% += fragsz% vaddr% += fragsz% filesz% -= fragsz% memsz% -= fragsz% PROCtwirl ENDWHILE ENDPROC REM ***************************************************************************** REM * A.OUT LOADER * REM ***************************************************************************** DEF PROCload_kernel_aout(file%) LOCAL hdr% DIM hdr% 32 ssym% = 0 : esym% = 0 SYS "OS_GBPB", 3, file%, hdr%, 32, 0 bemagic% = (hdr%?0 << 24) OR (hdr%?1 <<16) OR (hdr%?2 << 8) OR hdr%?3 CASE bemagic% AND &0000FFFF OF WHEN &0107 PRINT "(OMAGIC) "; WHEN &0108 PRINT "(NMAGIC) "; WHEN &010B PRINT "(ZMAGIC) "; WHEN &00CC PRINT "(QMAGIC) "; ENDCASE REM XXX: Assume ZMAGIC REM foooff% is byte offset in file. foobasepage% is base page in RAM. txtoff% = 0 : REM in arm26 its 4096 txtbasepage% = first_mapped_DRAM_index% : REM == first virt address in DRAM0a start_kernelpage% = txtbasepage% txtsize% = hdr%!4 IF txtsize% MOD nbpp% <> 0 THEN ERROR EXT 1, "Text size not a multiple of page size" ENDIF txtpages% = txtsize% DIV nbpp% dataoff% = txtoff% + txtsize% databasepage% = txtbasepage% + txtpages% database% = databasepage% * nbpp% datasize% = hdr%!8 IF datasize% MOD nbpp% <> 0 THEN ERROR EXT 1, "Data size not a multiple of page size" ENDIF datapages% = datasize% DIV nbpp% bssbasepage% = databasepage% + datapages% bssbase% = bssbasepage% * nbpp% bsspages% = FNroundup(hdr%!12, nbpp%) DIV nbpp% bsssize% = bsspages% * nbpp% IF bsssize% MOD nbpp% <> 0 THEN ERROR EXT 1, "Bss size not a multiple of page size" ENDIF entry% = hdr%!20 IF debug% THEN PRINT "Entry point at ";~entry% REM kernelpages without syms table is : kernelpages% = txtpages% + datapages% + bsspages% : REM REM symbasepage% = bssbasepage% + bsspages%-1 : REM REAL size... not in pages symoff% = dataoff% + datasize% symsize% = hdr%!16 stringtablesize% = EXT#file% - (txtsize% + datasize% + symsize%) IF INSTR(args$, "symtab")>0 THEN kernelpages% += FNroundup(stringtablesize% + symsize% + 4, nbpp%) DIV nbpp% ELSE symsize% = 0 stringtablesize% = 0 ENDIF REM reserve 1 extra word for the length symbolsize% = symsize% + stringtablesize% + 4 symbolpages% = FNroundup(symbolsize%, nbpp%) DIV nbpp% IF debug% PRINT '"Stringtablesize = 0x";~stringtablesize%;" symsize = 0x";~symsize% PRINT '"A total of about ";kernelpages%;" pages need to be relocated" IF (kernelpages%+40)*nbpp% > memory_image_size% THEN REM 40 is an estimation ... ERROR EXT 1, "Not enough memory free... please increase WimpSlot in the configuration file" ENDIF PRINT ;txtsize%; new_hdr% = FNblock_vaddr(txtbasepage%) FOR pg% = 0 TO txtpages%-1 SYS "OS_GBPB", 3, file%, FNblock_vaddr(txtbasepage%+pg%), nbpp%, txtoff% + pg%*nbpp% relocpos%!0 = FNblock_paddr(txtbasepage%+pg%) relocpos%!4 = kernel_phys_start% + nbpp%*relocoff%: relocnr%+=1: relocoff%+=1 relocpos%!8 = nbpp% relocpos% += 12 PROCtwirl NEXT PRINT "+";datasize%; FOR pg% = 0 TO datapages%-1 SYS "OS_GBPB", 3, file%, FNblock_vaddr(databasepage%+pg%), nbpp%, dataoff% + pg%*nbpp% relocpos%!0 = FNblock_paddr(databasepage%+pg%) relocpos%!4 = kernel_phys_start% + nbpp%*relocoff%: relocnr%+=1: relocoff%+=1 relocpos%!8 = nbpp% relocpos% += 12 PROCtwirl NEXT REM PRINT;"(";off%;" gaps)"; PRINT "+";bsssize%; FOR pg% = 0 TO bsspages%-1 : REM overshoot is safe PROCbzero(FNblock_vaddr(bssbasepage%+pg%), nbpp%) relocpos%!0 = FNblock_paddr(bssbasepage%+pg%) relocpos%!4 = kernel_phys_start% + nbpp%*relocoff%: relocnr%+=1: relocoff%+=1 relocpos%!8 = nbpp% relocpos% += 12 PROCtwirl NEXT REM PRINT;"(";off%;" gaps)"; freepagesbase% = bssbasepage% + bsspages% IF INSTR(args$, "symtab")>0 THEN symbasepage% = freepagesbase% REM put a page for the value of symsize just after bss% symDaddr% = !(relocpos%-8) + ((hdr%!12) AND (nbpp%-1)) symstartpagaddrV% = FNblock_vaddr(symbasepage%) PROCbzero(symstartpagaddrV%, nbpp%) !symstartpagaddrV% = symsize% relocpos%!0 = FNblock_paddr(symbasepage%) relocpos%!4 = symDaddr% : relocnr%+=1: relocoff%+=1 relocpos%!8 = nbpp% : REM XXX relocpos% += 12 symDaddr% += 4 REM update the symbasepage !! ... we used one! symbasepage%+=1 PRINT "+";symbolsize%; REM now fill in rest of the file FOR pg% = 0 TO symbolpages%-1 : REM => due to first page to hold offset SYS "OS_GBPB", 3, file%, FNblock_vaddr(symbasepage%+pg%), nbpp%, symoff% + pg%*nbpp% relocpos%!0 = FNblock_paddr(symbasepage%+pg%) relocpos%!4 = symDaddr% + nbpp%*pg%: relocnr%+=1: relocoff%+=1 relocpos%!8 = nbpp% relocpos% += 12 PROCtwirl NEXT freepagesbase% = symbasepage% + symbolpages% + 4 : REM XXX ENDIF REM update new header structure new_hdr%!16 = symsize% REM mark highest virtual address free in NetBSD's mapping vfreebase% = KERNEL_BASE + nbpp%*relocoff% REM `patch' symbol table stuff ssym% = 0 esym% = 0 PROCfinish_relocationtable ENDPROC REM ***************************************************************************** REM * Common loader and relocate stuff * REM ***************************************************************************** DEF PROCfinish_relocationtable REM align vfreebase% to a page vfreebase% = FNroundup(vfreebase%, nbpp%) relocoff% = (vfreebase% - KERNEL_BASE) DIV nbpp% IF vfreebase% > (nbpp%*relocoff% + KERNEL_BASE) THEN PRINT ''"WHOOAH!' : 0x", ~vfreebase%;" > 0x";~(nbpp%*relocoff%+KERNEL_BASE) freepagesbase% += 16 kernelpages% += 16 relocoff% += 16 ENDIF IF INSTR(args$, "oldkernel")>0 THEN REM place the arguments in a block ... for the old bootloader's sake argsbasepage% = freepagesbase% argspages% = 1 argvirtualbase% = nbpp%*relocoff% + KERNEL_BASE relocpos%!0 = FNblock_paddr(argsbasepage%) relocpos%!4 = kernel_phys_start% + nbpp%*relocoff%: relocnr%+=1: relocoff%+=1 relocpos%!8 = nbpp% relocpos% += 12 $(FNblock_vaddr(argsbasepage%)) = args$+CHR$0 freepagesbase% += argspages% kernelpages% += argspages% IF debug% THEN PRINT "Args at 0x";~argvirtualbase% ELSE REM reserve some space for the MDF file REM XXX not implemented yet XXX ENDIF REM I give it a 48k scratch space scratchbasepage% = freepagesbase% scratchpages% = 12 scratchvirtualbase% = nbpp%*relocoff% + KERNEL_BASE freepagesbase% += scratchpages% kernelpages% += scratchpages% REM Create one page for the initial vectors initvectorbasepage% = freepagesbase% initvectorpages% = 1 relocpos%!0 = FNblock_paddr(initvectorbasepage%) relocpos%!4 = top_physdram% - 1*1024*1024 : relocnr%+=1 relocpos%!8 = nbpp% relocpos% += 12 freepagesbase% += initvectorpages% P%=FNblock_vaddr(initvectorbasepage%) FOR vec=0 TO &20 STEP 4 [OPT 2: MOVS PC, r14:] NEXT ENDPROC DEF PROCadd_pagetables REM DESTINATION MUST BE ON A 16kb boundary!!! (!!!!) REM get 4 pages on the top of physical memory (top_physdram%) and copy PT's in it addr% = top_physdram% - 4*nbpp% IF (addr% AND (16*1024-1)) <> 0 ERROR EXT 0, "L1 pages not on 16Kb boundary" FOR pg%=0 TO 3 PROCcopy(FNblock_vaddr(freepagesbase% + pg%), bootpagetables% + pg%*nbpp%, nbpp%) relocpos%!0 = FNblock_paddr(freepagesbase%+pg%) relocpos%!4 = addr%+pg%*nbpp%: relocnr%+=1 relocpos%!8 = nbpp% relocpos% += 12 NEXT L1pages_phys% = addr% freepagesbase% = freepagesbase%+pg% ENDPROC DEF PROCcreate_initial_pagetables LOCAL I%, addr%, kaddr%, mapped_screenmemory% DIM bootpagetables% 16*1024 REM linear translation on the whole domain 00 in blocks of 1Mb REM AP=%01, CB=%00 for easy initial setup, dom=0 FOR I%=0 TO 4*1024-1 bootpagetables%!(I%*4) = (I%<<20) + (0<<11)+(1<<10) + (1<<4) + (0<<3) + (0<<2) + (1<<1) + 0 NEXT REM video memory is mapped 1:1 in the DRAM section or in VRAM section REM map 1Mb from top of memory to bottom 1Mb of virt. memmap addr% = (top_physdram%/1024/1024) -1 bootpagetables%!0 = (addr%<<20) + (0<<11)+(1<<10) + (1<<4) + (0<<3) + (0<<2) + (1<<1) + 0 REM map 16 Mb of DRAM0a (kernel space) to 0xf0000000 FOR I%=0 TO 15 addr% = (kernel_phys_start% >> 20) + I% kaddr% = &F00 + I% : REM &F0000000 LSR #20 + I% bootpagetables%!(kaddr%*4) = (addr%<<20) + (0<<11)+(1<<10) + (1<<4) + (0<<3) + (0<<2) + (1<<1) + 0 NEXT ENDPROC DEF PROCcreate_relocate_mechanism REM relocate mechanism relies on a contigunous space of the relocator + tables REM this isn't finished yet relocatesize% = nbpp% + relocsize% : REM just ONE code page + relocation table PRINT ;"+";relocatesize%; relocatepages% = FNroundup(relocatesize%, nbpp%) DIV nbpp% relocatebasepage% = freepagesbase% pg%=0 WHILE pg%0 THEN PROCcopy(FNblock_vaddr(relocatebasepage%+pg%), relocinstr%+(pg%-1)*nbpp%, nbpp%) ENDIF PROCtwirl IF pg%<>relocatepages%-1 THEN IF FNblock_paddr(relocatebasepage%+pg%+1)-FNblock_paddr(relocatebasepage%+pg%)<>nbpp% THEN REM Help! non contigunous relocate area => try again REM ERROR EXT 0, "Help! non contigunous relocate area" PRINT ;"*"; relocatebasepage% = freepagesbase% + pg% : REM try again from this page pg%=-1 : REM will be auto incremented later ... ENDIF ENDIF pg%+=1 ENDWHILE PROCassemble_relocate_code(FNblock_vaddr(relocatebasepage%), FNblock_paddr(relocatebasepage%), entry%, L1pages_phys%) ENDPROC DEF PROCcreate_configuration PRINT ;"+";nbpp%; configurationbasepage% = freepagesbase% configurationpages% = 1 freepagesbase% += configurationpages% REM fatal(swix(OS_ReadSysInfo, IN(R0)|OUT(R3), 2, &bootconfig.machine_id)); SYS "OS_ReadSysInfo", 2 TO r0,r1,r2, machineId% IF INSTR(args$, "oldkernel")>0 THEN PROCold_configuration_structure ELSE PROCnew_configuration_structure ENDIF ENDPROC DEF PROCnew_configuration_structure FOR opt%=0 TO 2 STEP 2 P% = FNblock_vaddr(configurationbasepage%) [OPT opt% ; u_int magic EQUD &43112233 ; BOOTCONFIG_MAGIC ; u_int bootconfig_version EQUD 2 ; u_char machine_id[4] EQUD machineId% ; char kernelname[80] EQUS LEFT$(kernelname$+CHR$0+STRING$(80, " "), 80) ; char args[512] EQUS args$+CHR$0 ]: P% += 512 - LEN(args$+CHR$0): [ OPT opt% ; u_int kernvirtualbase /* not used now */ EQUD 0 ; u_int kernphysicalbase /* not used now */ EQUD 0 ; u_int kernsize EQUD kernelpages% * nbpp% ; u_int scratchvirtualbase EQUD scratchvirtualbase% ; u_int scratchphysicalbase EQUD scratchvirtualbase% ; u_int scratchsize EQUD scratchpages% * nbpp% ; u_int ksym_start EQUD ssym% ; u_int ksym_end EQUD esym% ; u_int MDFvirtualbase EQUD 0 ; u_int MDFphysicalbase EQUD 0 ; u_int MDFsize EQUD 0 ; u_int display_phys EQUD videomem_start% ; u_int display_start EQUD videomem_start% ; screenstart (149) ; u_int display_size EQUD display_size% ; screensize (150) ; u_int width EQUD FNvdu_var(11) ; acorn32 port needs 0..x-1 ; u_int heigth EQUD FNvdu_var(12) ; acorn32 port needs 0..y-1 ; u_int log2_bpp EQUD FNvdu_var(9) ; acorn32 port needs log(bitsperpixel)/log(2) ; u_int framerate EQUD 56 ; XXX why? ; char reserved[512] ]: P% += 512: [ OPT opt% ; u_int pagesize EQUD nbpp% ; u_int drampages EQUD totaldrampages% ; u_int vrampages; EQUD totalvrampages% ; u_int dramblocks EQUD dramblocks% ; u_int vramblocks EQUD vramblocks% ] REM phys_mem dram[DRAM_BLOCKS] <- 32 FOR I%=0 TO MAX_DRAMBANKS-1 [OPT opt% ; address% : EQUD DRAM_addr%(I%) ; length% : EQUD DRAM_pages%(I%) ; flags% : EQUD 0 ] NEXT REM phys_mem vram[VRAM_BLOCKS] <- 16 FOR I%=0 TO MAX_VRAMBANKS-1 [OPT opt% ; address% : EQUD VRAM_addr%(I%) ; length% : EQUD VRAM_pages%(I%) ; flags% : EQUD 0 ] NEXT NEXT ENDPROC DEF PROCold_configuration_structure FOR opt%=0 TO 2 STEP 2 P% = FNblock_vaddr(configurationbasepage%) [OPT opt% ;kernvirtualbase% EQUD 0 ; not used ;kernphysicalbase% EQUD 0 ; not used ;kernsize% EQUD kernelpages% * nbpp% ;argvirtualbase EQUD argvirtualbase% ;argphysicalbase EQUD FNblock_paddr(argsbasepage%) ;argsize% EQUD nbpp% ;scratchvirtualbase% EQUD scratchvirtualbase% ;scratchphysicalbase% EQUD scratchvirtualbase% ;scratchsize% EQUD scratchpages% * nbpp% ;display_start% EQUD videomem_start% ; screenstart (149) ;display_size% EQUD display_size% ; screensize (150) ;width% EQUD FNvdu_var(11) ; arm32 port needs 0..x-1 ;height% EQUD FNvdu_var(12) ; arm32 port needs 0..y-1 ;bitsperpixel EQUD FNvdu_var(9) ; arm32 port needs log(bitsperpixel)/log(2) ] REM for compatibility for now just 4 DRAM and 1 VRAM FOR I%=0 TO 3 [OPT opt% ;address% : EQUD DRAM_addr%(I%) ;length% : EQUD DRAM_pages%(I%) ] NEXT REM current config structure only wants 1 VRAM entry ! FOR I%=0 TO 0 [OPT opt% ;address% : EQUD VRAM_addr%(I%) ;length% : EQUD VRAM_pages%(I%) ] NEXT [OPT opt% ;c_dramblocks% EQUD dramblocks% ;c_vramblocks% EQUD vramblocks% ;pagesize% EQUD nbpp% ;drampages% EQUD totaldrampages% ;vrampages% EQUD totalvrampages% ;kernelname% EQUS LEFT$(kernelname$+CHR$0+STRING$(80, " "), 80) ;framerate% EQUD 56 ; XXXXX ;machine_id% EQUD machineId% ;magic% EQUD &43112233 ; BOOTCONFIG_MAGIC ;display_phys% EQUD videomem_start% ] NEXT opt% ENDPROC REM XXXX a bit messy still DEF PROCassemble_relocate_code(virtaddress%, physaddress%, entry%, L1pages_phys%) FOR opt%=0 TO 2 STEP 2 P%=virtaddress% [OPT opt% ; entry conditions : ; - on RiscOS page tables in usr26 mode on virt address .... ; - R0 pointer to configuration structure ; - R1 pointer to physical restart point ; - R2 pointer to physical relocation table ; - R3 pointer to physical new L1 page address ; - R4 new virt adres of kernel entry% .relocate_entry% ; Enter sup26 mode SWI "OS_EnterOS" ; move args up in register bank STMFD r13!, {r0-r4} LDMFD r13!, {r8-r12} ; r8 = config structure address ; r9 = physical restart point address ; r10 = physical relocation table address ; r11 = physical address of new L1page ; r12 = kernel entry point in new virt. map ; go to sup32 mode with IRQ + FIQ disabled EQUD %11100001000011110000000000000000 ; MRS R0, CPSR BIC r0, r0, #&1F ; clear proc. mode ORR r0, r0, #(1<<7) + (1<<6) ; set FIQ + IRQ disable ORR r0, r0, #%10011 ; superv. 32 bit EQUD %11100001001010011111000000000000 ; MSR CPSR, r0 MOV r0, r0 MOV r0, r0 ; nops ... nessisary? ; flush data cache ; just read a 64kb app space in the cache MOV r0, #&8000 ADD r1, r0, r0 .loop_flush1 LDR r2, [r0], #4 SUBS r1, r1, #4 BNE loop_flush1 ; determine processor type ... nessisary for correct copro instr .. store in r13 EQUD %11101110000100000000111100010000 ; MRC cp15, 0, r0, c0, c0, 0 ; read CPU Id in r0 MOV r13, r0 ; store in r13 ; determine if its a StrongARM MOV r14, #1 ; r14 flags if its a StrongARM ... assume one ; detecting an ARM6 needs a special mask MOV r0, #&FF000000 ; get processor discr. mask in r0 ADD r0, r0, #&00000F00 ; MOV r1, #&41000000 ; check for 0x41xxx6xx => ARM6 ADD r1, r1, #&00000600 AND r2, r13, r0 ; mask with discr. mask CMP r2, r1 ; is it a ARM6 ? MOVEQ r14, #0 ; ifso ... then its a v3 ; newer ARMs need a different mask MOV r0, #&FF000000 ; get processor discr. mask in r0 ADD r0, r0, #&0000F000 ; MOV r1, #&41000000 ; check for 0x41xx7xxx => ARM7 ADD r1, r1, #&00007000 AND r2, r13, r0 ; mask with discr. mask CMP r2, r1 ; is it a ARM7 ? MOVEQ r14, #0 ; ifso ... then its a v3 ; MOV r1, #&44000000 ; check for 0x44xxaxxx => Strong ARM ; ADD r1, r1, #&0000a000 ; AND r2, r13, r0 ; mask with discr. mask ; CMP r2, r1 ; is it a StrongARM ? ; switch off MMU, IDcache and WB and branch to physical code !! CMP r14, #0 EQUD %00011110000100010000111100010000 ; MRCNE cp15, 0, r0, c1, c0, 0 ; read control register BICNE r0, r0, #&3F ; clear only known bits please ! MOVEQ r0, #0 ; ARM6/7 only have these ORR r0, r0, #%0001110000 ; RSB1DPWCAM MOV r13, r0 ; save this value in r13 MOV r1, #0 CMP r14, #0 EQUD %11101110000000010000111100010000 ; MCR cp15, 0, r0, c1, c0, 0 ; write control register EQUD %00011110000001110001111100010101 ; MCRNE cp15, 0, r1, c7, c5, 0 ; write 0 in v4 MMU disable MOV pc, r9 ; call rest of code in physical mem ... not flat .physical_start_address% ; should now be running in physical space ; this relocate code can be heavyly optimised ... but it is used only once ... and is fast enough ; relocate kernel (physical to physical) + debug in screenmemory MOV r5, r10 ; load PC relative r5 = startreloc table LDR r6, [r5], #4 ; r4 = number of relocated pages .loop_relocate_pages% LDR r2, [r5], #4 ; r2 = from address LDR r3, [r5], #4 ; r3 = to address LDR r7, [r5], #4 ; r6 = number of bytes to travel MOV r1, #0 ; r1 = offset in page .loop_one_page% LDRB r0, [r2, r1] STRB r0, [r3, r1] ADD r1, r1, #1 CMP r1, r7 ; all bytes copied ? BNE loop_one_page% SUBS r6, r6, #1 BNE loop_relocate_pages% ; switch over to the new L1 pages ; disable clockswitching for SA110 (WHY?) MOV r0, #0 ; write 0 CMP r14, #0 ; check v4 .. or SA110 specific ? EQUD %00011110000011110000111101010010 ; MCRNE cp15, 0, r0, c15, c2, 2 ; from Linux loader ; flush ID cache MOV r0, #0 CMP r14, #0 EQUD %00001110000001110000111100010000 ; MCREQ cp15, 0, r0, c7, c0, 0 ; flush v3 ID cache EQUD %00011110000001110000111100010111 ; MCRNE cp15, 0, r0, c7, c7, 0 ; flush v4 ID cache ; drain WB (v4) MOV r0, #0 CMP r14, #0 EQUD %00011110000001110000111110011010 ; MCRNE cp15, 0, r0, c7, c10, 4; drain WB v4 from Linux loader ; flush TLB EQUD %11101110000001010000111100010000 ; MCR cp15, 0, r0, c5, c0, 0 ; flush v3 TLB ; set new TLB address MOV r0, r11 EQUD %11101110000000100000111100010000 ; MCR cp15, 0, r0, c2, c0, 0 ; write TLB base ; switch on MMU, IDcache and WB and keep on running (flat *translated*) ; in r13 last written value ORR r0, r13, #%0001111101 ; RSB1DPWCAM ORR r0, r0, #%1000000000 CMP r14, #0 EQUD %11101110000000010000111100010000 ; MCR cp15, 0, r0, c1, c0, 0 ; write control register MOV r0, r0 ; flat MOV r0, r0 ; flat ; not flat anymore ... but it doesnt matter ] IF extradebug% THEN [OPT opt% MOV r6, #videomem_start% MOV r7, #videomem_pages% * nbpp% MOV r5, #KERNEL_BASE .loop_testing% LDR r0, [r5], #4 STR r0, [r6], #4 SUBS r7, r7, #4 BNE loop_testing% ] ENDIF [OPT opt% ; call kernel in new virtual space ... start() MOV r0, r8 MOV pc, r12 ] NEXT ENDPROC DEF FNblock_vaddr(pagenr%) =!(memoryblock% + pagenr%*12 + 4) DEF FNblock_paddr(pagenr%) =!(memoryblock% + pagenr%*12 + 8) DEF PROCget_memory_map PRINT '"Getting actual memory mapping "; FOR pg%=0 TO totalpages%-1 pos% = memoryblock% + 12*pg% pos%!0 = 0 pos%!4 = (firstpage% + pg%) * nbpp% pos%!8 = 0 REM force paging in this page in RO4 IF (pg% MOD 5)=0 THEN PROCtwirl !(pos%!4) = 0: REM PROCbzero(pos%!4, nbpp%) NEXT PRINT ;" " os_memory_GIVEN_LOG_ADDR = &200 os_memory_RETURN_PAGE_NO = &800 os_memory_RETURN_PHYS_ADDR = &2000 SYS "OS_Memory", os_memory_GIVEN_LOG_ADDR+os_memory_RETURN_PAGE_NO+os_memory_RETURN_PHYS_ADDR, memoryblock%, totalpages% PROCsort_memory_map(memoryblock%, totalpages%) REM Get first DRAM index PRINT '"Found memory blocks "; first_mapped_DRAM_index%=-1 pg% = 0 WHILE pg%=DRAM_addr%(0)) THEN first_mapped_DRAM_index% = pg% num_seq_pag%+=1 pg%+=1 addr% = !(memoryblock% + pg%*12 + 8) ENDWHILE PRINT;"-0x";~(!(memoryblock% + pg%*12 + 8) + nbpp%-1);"]"; PRINT ;" "; pg%+=1 ENDWHILE PRINT' IF extradebug% THEN PRINT '"First DRAM index found at index ";first_mapped_DRAM_index%;" DRAM_addr%(0)=0x";~DRAM_addr%(0) IF first_mapped_DRAM_index%<0 THEN ERROR EXT 1, "No (S)DRAM mapped in this program (wierd) ... increase Wimpslot!" ENDPROC DEF PROCget_memory_configuration REM Get memory distribution PRINT "Getting memory configuration "; DIM DRAM_addr%(MAX_DRAMBANKS), DRAM_pages%(MAX_DRAMBANKS) DIM VRAM_addr%(MAX_VRAMBANKS), VRAM_pages%(MAX_VRAMBANKS) DIM memorytable% memorytablesize% SYS "OS_Memory", 7, memorytable% : REM read table dramblocks% = 0: vramblocks% = 0: currentpages% = 0: currentadr% = 0 currentpage% = -1: loop%=0 WHILE loop% < memorytablesize%*2 page% = memorytable%!(loop% DIV 2) IF loop% MOD 2 THEN page% = page% >> 4 page% = page% AND &07 IF page% <> currentpage% THEN IF currentpage% = 1 THEN DRAM_addr%(dramblocks%) = currentaddr% * nbpp% DRAM_pages%(dramblocks%) = currentpages% dramblocks% +=1 ENDIF IF currentpage%=2 THEN VRAM_addr%(vramblocks%) = currentaddr% * nbpp% VRAM_pages%(vramblocks%) = currentpages% vramblocks% +=1 ENDIF currentpage% = page% currentaddr% = loop% currentpages% = 0 ENDIF currentpages% += 64 loop% += 64 PROCtwirl ENDWHILE IF emulateDRAMsize% > 0 THEN REM emulate HACK DRAM0% = DRAM_addr%(0) DRAM_addr%() = 0 DRAM_pages%() = 0 DRAM_addr%(0) = DRAM0% DRAM_pages%(0) = (emulateDRAMsize%*1024*1024)/nbpp% dramblocks% = 1 REM END HACK ENDIF REM find top of DRAM pages I%=8: WHILE (I%>=0) AND DRAM_addr%(I%)=0: I%-=1: ENDWHILE IF I%>=0 THEN top_drambank% = I% ELSE ERROR EXT 0, "Reality check: No DRAM banks??" top_physdram% = DRAM_addr%(top_drambank%) + DRAM_pages%(top_drambank%)*nbpp% PRINT " " PRINT' REM Emulate VRAM by reporting different memory sizes REM XXX assumption : no VRAM => screen is located in bottom DRAM; leave it there IF (VRAM_pages%(0)=0) OR emulateVRAM% THEN mapped_screenmemory% = 1024*1024 : REM Max allowed on RiscPC videomem_start% = DRAM_addr%(0) videomem_pages% = mapped_screenmemory% DIV nbpp% display_size% = FNvdu_var(150) AND NOT(nbpp%-1) DRAM_addr%(0) += videomem_pages% * nbpp% DRAM_pages%(0) -= videomem_pages% ELSE mapped_screenmemory% = 0 videomem_start% = VRAM_addr%(0) videomem_pages% = VRAM_pages%(0) display_size% = videomem_pages% * nbpp% ENDIF IF mapped_screenmemory%>0 THEN PRINT "Used 1st Mb of DRAM at 0x";RIGHT$("00000000"+STR$~videomem_start%,8);" for video memory" totaldrampages% = 0 FOR I%=0 TO dramblocks%-1 totaldrampages% += DRAM_pages%(I%) PRINT "Found "; IF (DRAM_addr%(I%) >= SDRAM_ADDR_START%) PRINT ;"SDRAM"; ELSE PRINT ;" DRAM"; PRINT " (";I%;") at 0x";RIGHT$("00000000"+STR$~DRAM_addr%(I%),8);" for ";,DRAM_pages%(I%)*nbpp%/1024;" k" NEXT totalvrampages% = 0 FOR I%=0 TO vramblocks%-1 totalvrampages% += VRAM_pages%(I%) PRINT "Found VRAM (";I%;") at 0x";RIGHT$("00000000"+STR$~VRAM_addr%(I%),8);" for ";,VRAM_pages%(I%)*nbpp%/1024;" k" NEXT kernel_phys_start% = DRAM_addr%(0) REM Expirimental Kinetic support IF INSTR(args$, "kinetic")>0 THEN REM The Kinetic card has SDRAM on the processor module ... first fix is to only use this memory REM for VRAM emulation and only pass it trough as buffer memory for the DRAM is the only one REM wich DMA capabilities. PRINT ''"Kinetic support asked ... "; REM find SDRAM start... DRAM is under 512 Mb, SDRAM is above it first_SDRAM% = -1 FOR I%=0 TO MAX_RAMBANKS IF (DRAM_addr%(I%) >= SDRAM_ADDR_START%) AND (first_SDRAM%<0) THEN first_SDRAM% = I% NEXT IF first_SDRAM% >= 0 THEN PRINT ;"granted" REM put kernel pointer to the first SDRAM module and update DRAM reporting (yeah ...more clear than fast) FOR I%=0 TO first_SDRAM%-1 PRINT "Moving DRAM at 0x";RIGHT$("00000000"+STR$~DRAM_addr%(I%),8);" for ";,DRAM_pages%(I%)*nbpp%/1024;" k" REM save this block DRAM_addr% = DRAM_addr%(I%): DRAM_pages% = DRAM_pages%(I%) REM move everything down FOR J%=I% TO MAX_RAMBANKS-1 DRAM_addr%(J%) = DRAM_addr%(J%+1): DRAM_pages%(J%) = DRAM_pages%(J%+1) NEXT DRAM_addr%(MAX_RAMBANKS) = 0: DRAM_pages%(MAX_RAMBANKS) = 0 REM fill in the moved block at the top of the structure DRAM_addr%(dramblocks%-1) = DRAM_addr%: DRAM_pages%(dramblocks%-1) = DRAM_pages% NEXT REM XXX kernel is loaded per definition in dram[0] first_SDRAM% = 0 kernel_phys_start% = DRAM_addr%(first_SDRAM%) ELSE PRINT ;"ignored; no SDRAM found" ENDIF PRINT ENDIF ENDPROC DEF PROCsort_memory_map(memoryblock%, totalpages%) LOCAL out%, in%, outp%, inp% DIM code% 1024 FOR opt%=0 TO 2 STEP 2 P%=code% [OPT opt% .sortit% STMFD r13!, {r0-r12} ; R0 = A% = memory block% ; R1 = B% = totalpages% ; r2 = out% ; r3 = inp% ; R12 = limit r3 SUB r2, r1, #2 .loop_outer% MOV r3, r0 MOV r4, #12 MLA r12, r2, r4, r0 .loop_inner% LDR r4, [r3, #8] LDR r5, [r3, #20] CMP r4, r5 BLT not_bigger% LDMIA r3, {r6, r7, r8} ADD r4, r3, #12 LDMIA r4, {r9, r10, r11} STMIA r3, {r9, r10, r11} STMIA r4, {r6, r7, r8} .not_bigger% ADD r3, r3, #12 CMP r3, r12 BLE loop_inner% SUBS r2, r2, #1 BPL loop_outer% LDMFD r13!, {r0-r12} MOV pc, r14 ] NEXT A% = memoryblock% B% = totalpages% CALL sortit% ENDPROC DEF PROCcenter(line$) PRINT STRING$((width%-LEN(line$))/2, " ");line$ ENDPROC DEF PROCbzero(addr%, len%) LOCAL a% FOR a% = 0 TO len%-4 STEP 4 addr%!a% = 0 NEXT ENDPROC DEF PROCcopy(dest%, src%, len%) LOCAL a% FOR a% = 0 TO len%-4 STEP 4 dest%!a% = src%!a% NEXT ENDPROC DEF PROCtwirl PRINT MID$("|/-\", twirl%+1, 1)+CHR$(8); twirl% += 1 twirl% = twirl% MOD 4 ENDPROC DEF FNvdu_var(var%) LOCAL b% DIM b% 7 b%!0 = var% b%!4 = -1 SYS "OS_ReadVduVariables", b%, b% = b%!0 DEF FNroundup(val%, size%) =val% + (size% - 1) AND NOT (size% - 1) DEF FNtolower(name$) LOCAL A$, Ch$, i% FOR i%=1 TO LEN(name$) Ch$ = LEFT$(name$,1) IF Ch$>="A" AND Ch$<="Z" THEN A$ += CHR$(ASC(Ch$)+ASC("a")-ASC("A")) ELSE A$ += Ch$ ENDIF name$ = MID$(name$, 2) NEXT = A$ BtNetBSD/!BtNetBSD/MemFix100644 147 0 1300 7450201601 13513 0ustar imagowheel@h#MemFixMemFix 0.11 (15 Jun 2000)@- 5j13 X/j 02*2@dp1 T" & &  &  & 0r/QQ040C & _Incorrect OS version20000507-001800@-0 0 @ *G- 04-01@TB4'0+Dd'0',0$ ,0!*0*00PmduphY*V0:0@#22 2P@T6ZX*0 R53BtNetBSD/!BtNetBSD/!Boot100755 147 0 266 7450201600 13266 0ustar imagowheel| | $NetBSD: !Boot,v 1.2 2002/02/11 19:02:37 reinoud Exp $ | boot file for !BtNetBSD application | IconSprites .!Sprites Set File$Type_fe6 Unix Set BtNetBSD$Dir BtNetBSD/!BtNetBSD/Banner100644 147 0 125404 7450201601 13607 0ustar imagowheel,8HX@-A-RiscBSD_BannerRiscBSD Banner 0.20 (12 July 1995) Mark Brinicombe|Q `Q C-9j05j80  . s s r.(s sq r.qs52qqs5Bq'{j0@0@@A1Mi P` p.  C CResources:Resources.RiscBSD.BannerSpbanner@- 50rs52qs s5@rs5Bqqq@-_O 0@P`p@j0jO 0 @P`p@j@-(@@-A@-DGޝResources.RiscBSD.BannerSpbanner) wwwwwwUUUUUU333333DDUUwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwGDGDGDGDgfgfgfgfgfgfgfgf gfPV gfkfegfcP[Kfgf`kf 6gf`[[P[fgf\` Pkgf`fVffK [[`[gffK PfkV[[f[Ukff@kekfPkgff@fVekVK[ [UfeffgfahffUV[ke[[kVef@[fgf`f[@f[[K[dKK[[[eUff`[gfaf[[kkef[;SkU[ [FK[fk`[fgf`XhKd[[U[ U 5fV[fgfaVfV[[kUKKT[[ [UkFgffV[[e[[ `KE+P U[efegffUVfkU[ E[ kVehfgf`fffVf[K  TU[fehUfgfVVVU@d0Xb [P+feffXfgfaVheVTU&FPK[UehheegfVhVXUVK V[hV@KUE;eP[[VehgfeV+ff[`e8eeUeegfafhe[Kkfk [fkhf[[[eVgf`feUeV[ @[[fXVfgfaVV[e[[[[K [kkeVK[[UVfgf`fhf[[ecn @VP[e[ehgfaeXUV[eUKPVK[[[k61VffgfVhXK[VUPQe[[UVk[kKeUVgfVXVe[fek[V^PK[U[eK[[e gffXV[K[[e[` e`VfkK[[VeegfahfUU[f kPV[efgffVef[[[kff @f`@[[[[KUUfhgfaVe[V[edf[E aff0f[VhefgfeVUUfkKV ffP TfF`[VekVehgfaeVUUfeP[f[[F P@ffe[fkUUehVgf0fUU[[k `feF dXkfV[fUUeVgfVVkf[kdVfKkUUfgf`V[K[nkekf `e[[e gfU[ffV[[egf[VK[Uff[ `[fhf[[[[Ugffeke[fff[Ukhff[U[[egffX[[UffU@Ufff[[VVfgffUUU[[khkakUffU[XfgfUeU[ffUUUXfgffhhXV[QffK[UVUhgffVUU[UF [[[efgfffXfhXUVf dUUUhXefgfeVeheVUekfeUfffgfkfVUfUUU `VUeVVeVgfXfkfhfUKUUUhfUefgfVVVeVUUfff;gffhVfK[kUeVeeegffffhVe[[ P[[hfefgf`ffVhUk[ `Vefffgf`hVUU[[[@[UeffgfffVffXfUUUUehhgfffVhUUV kUUfffeffgfffUUhkefU[ eUU[eXff gf`fhfVekkVSUkfVUUffgf`efaUV[e[SV [5eVeXffgfdfhfaUUU;dfU;$VUV e5kVeUfVhgfefhf dXUkUeke[kE3#3 eUkeBKUfFUUUPffFgf\fhffV @[UekkU;"BXD333" [323TV[VUkUFffV gf@eff[fS[wVUUeUD###3UTEE3"333D$"UV[UXefffgfdfkfVUKE[ufeXUU[UES322TE332@3TTEU3222DU[VUUehw5;kfffVgf`[[V4U[fgUUXUUUUEE4SSUESE @#33TE##35TUUUhVfWTKUeffFgfVeN[fffXXUeXUUE43 T5TU55CTTUUUXUUUvf[UK;KCegfE[K0KN]UevffUUUUUUE4383CTUUXVXUfff[M `Ve gfPke^^[kfffghVXUUTU;a3CTUXUUUUUhffgVUKTgfPefk[kTefvwgfffVK UEUUXXevfffQ `VgffVffkUffffgf[K1ekfffvwgfkVEK;fVgfPwfff[k 㵳fvffffU[[[fkfef gf`vwfff;[>+ [[[fffwgfPffffwfVfUU `KK[[fffwggfᵶf[K UUfefwffffgfNNNfk[gf ;gf gf gfgfgf gfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgf1gfRUUUUUU w3333333#ewg%QUUUUUU5Tcww%gf2vwwwwww7@w7Cwwwwwww6swwwwfG1uwwwvwww6rgbwwwwgf@ww&2vw&0wsww43Cvw@w6tw7 ww1uw7cwg wwwww'gf ww0wgCqwg0wgrwvGww vwbfwwagtwggf wgswawGtwuGaWvwPwwsgs wwgf wgqw'awGqwwGWvwuwtgVswgf wg`w7qw7Pw' w7VwwawGsg &awgf wglw7awGPwG wgevw0wwtw@Pwgf wg`w7 33aw7Pw'wwcvwvwsgPwgf wwqw'c'@vfWE1www%awGqwuwgvwuwtgPwgf wgtw0vw'vcW0wvwqw7uwrww6wwswsg`wgf wg@wgauw'PW0Ws&aw&awGQw70www6vwrw'tg|ggf wg0vw&@w'qGU w@w7awgUUvwGtwww6vwrw7sgs7gf wwWuwwG@w'rWS`g0w6awwwwwwW vwww5vwawGtwvgf wwwww&0w'qw1rGDqwG!dwG vwwwwwrw7sg@wgf wgawG@w'PwgtGaw7vw uww'vwrw7tgb'gf wg ww0w' wwgu'awGawW vwgvwrwsgvgf wwsw'@w'bwwWv'bw7@wgaww vwtwtwP'gf wgPwg0w'tww'wGawG ww" wwvwuwsgsgf wgvw@w' twwvWaw7 wwcuwvwwwtg0Ggf wgrwG0w'!vwug"qwG wwrswwwPwGsgtgf ww0vw@w'bPwsw6aw70wwqrwvwsw'tg07gf wgtw0w'b vrw7PawGawGaWtwvw0wwsg#s@gf wwpwW@w'rv@ww# vawGtw`wvWvwtw&twaw W1tgf0ww ww@w'r' wvwwfw7rwgBwgPwgQw ww1twGtwsw7rwwwwwwggfsww'twWbwgrwb7awwww!vwwwgwww0wwg4CwgbwwwvwwwGAww&sw7 vwwwwww7gfsgwvv7agwfawgwfRSwggtww% wgwvvvgf0&"uwwgrwvgwggF#swvvvGaw`wvvgwvggf 3223#gfgfgfgfgfgfgfgfgfgfgfgfgfgfRE033343333 T033333#33A33333#DD2331ADAD 333gfcWdgtgCvgAwWeWt5utg3u&AwaG0uvVugUW tbcbcvw7Bg &16 &16awwwgf@FAFr&b7 wt070'r&v gbr&qT bV@'V@' 63"fatatb43sgfsBEdr&PG gq&P'%r&aG gFrq1P&07 G07 GPesrsrcgfFG1&@r'PW1 # gaPGr'0w wa2  #rq #202PP'WP'WsguuquqTgf &Q$ r&a7BW0%b05u gt w&r& w g"6QDfAvdGdGegEdrqEdbVdGUgSe7PP7vQ7vcwgeuaua6gf0r&r& u1Wa0TP' wVeGtwr&v gt5ru%$aGtQgrqQgfta7tVP0Wg1W f vesqsq0&gf0s'rgw& WrF0 w4Cg twr&v wvg073suP'ts3Cvrqs3CvDsP'sePvAWvAWb'ua'ta'tPgf0br&s WPg0' gr' v&r'v g"w@G33uP'st433rqt433CvP'tePbwUGbwUG0Ge vWu vWu`gf6@ r&PW WtW1' gPGbGr& w grGPuP'terqeRsP'suP`` 7@wwevvagfUfUQr'v W t5G wPWB@Wr&@g w wP'uP'surquFtP'tePrr 'u G Gbgfafr&q' WB`&w ga7b0Gr&s& gt' g$uP'tr@rqr@2GsP'sePWW0eqq5gfvtr70w WbPtgc wua7brGBW wPgu6TuP'sPgCErq'PgCE0g"v$P'tutQcc VRe0V0V &gf vw&@vfeVbgRUT@v7dggv6QTfG@vvvVdg&dwGaw7AwEcW#v&vw0vV@vfvwvGr7cW#v&Qvu&@uWS5S5 vW$Tw&0U0U@gf0gf@gfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfbwWuugf@wPW@vgf0wPwr1gf@wPw2 #v3#gf0w`7b4f Vb`wg!w5wVwtTggf@wVvvsq@G wvv&b7 gvgf0waW@gss0g!wvvbG0gvgf@w0wSWb'u v"w vvb7wwgf0w wUWb'u v"wvwqGbfGgf@w w4gss0g wvvb7Ta&fa&gf@w@gvta@7w4wvaG g43sW0wsWgfcwffaEVVdt70v6w6tW1wwwq7wq7gfuvwgf@&gf@'BgfSE$gfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwgfDDfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDDfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDDfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDDfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff