ADFS 1.30 disassembly

discussion of beeb/electron applications, languages, utils and educational s/w
User avatar
hoglet
Posts: 5984
Joined: Sat Oct 13, 2012 6:21 pm
Location: Bristol

ADFS 1.30 disassembly

Postby hoglet » Mon May 15, 2017 4:53 pm

Hello all,

Is anyone aware of the existence of a disassembly of ADFS 1.30?

I'm aware of Jonathan (JGH)'s ADFS 1.50 disassembly, but I'm specifically looking for the Model B version.

Some background: I'm trying to find a version of ADFS that includes the hard disc drivers, that has been (or can be) patched for IDE (specifically, for the Electron IDE). I want to try to boot Panos on the Electron (with the AP5).

There are two existing IDE patches that I'm aware of:

- Alan Daly patched ADFS 1.30 to work with the Electron IDE interface, see: Pictures of my ELK IDE disk interface. Unfortunately, this version doesn't correctly detect that the Tube is in use. I'm hoping this is a simple fix, hence looking for a disassembly to understand what's going on.

- JGH patched ADFS 1.00 (the original Electron ADFS release) to work with IDE. This version does seem to detect the Tube, but is unable to boot Panos, I suspect because it doesn't correctly handle files > 64KB (that's just a guess). This will be harder to fix.

As far as I'm aware, none of the PRES ADFS versions (v1.10, v1.13, v1.15 and v3.31) included the hard disc drivers, so patching them is not an option.

Any help gratefully received!

Dave

User avatar
daveejhitchins
Posts: 3369
Joined: Wed Jun 13, 2012 5:23 pm
Location: Newton Aycliffe, County Durham

Re: ADFS 1.30 disassembly

Postby daveejhitchins » Mon May 15, 2017 6:16 pm

Talked to JGH on Sunday about this. We considered the ACP E00 Electron version which uses 4K RAM. The Hard Drive code will have been removed from this and it's full! However, IIRC it contains the AQR code (it may only be in the standard ACP Electron ADFS, though!). This could be removed to make way for the IDE patch. JGH was going to take a look at this when he got home.

Dave H :D
Parts: UM6502CE, GAL22V10D, GAL16V8D, AS6C62256A, TC514400AZ, WD1772, R6522, TMS27C512, AT28C256
Products: ARA II, ABR, ATI, AP6, MGC
For a price list, contact me at: Retro Hardware AT dave ej hitchins DOT plus DOT com

User avatar
jgharston
Posts: 2429
Joined: Thu Sep 24, 2009 11:22 am
Location: Whitby/Sheffield

Re: ADFS 1.30 disassembly

Postby jgharston » Mon May 15, 2017 7:24 pm

I was sure I'd put the disassembly online as I used it to combine the IDEPatch program so it did both ADFS 1.3x and 1.5x instead of two seperate patch programs. It's supposed to also do ADFS 1.0x for the Electron, but it currently kills the floppy drivers.

I'll rummage around and upload the disassembly. It should appear here.

Code: Select all

$ bbcbasic
PDP11 BBC BASIC IV Version 0.25
(C) Copyright J.G.Harston 1989,2005-2015
>_

User avatar
hoglet
Posts: 5984
Joined: Sat Oct 13, 2012 6:21 pm
Location: Bristol

Re: ADFS 1.30 disassembly

Postby hoglet » Tue May 16, 2017 9:33 am

Thanks for looking Jonathan.

Being an impatient type, I've knocked up my own so I can try to understand what's going on:

Edit: now in github: https://github.com/hoglet67/ADFS130/blo ... DFS130.asm

This isn't fully relocatable yet, but is a starting point for me understanding what's going on.

Edit: It is now fully relocatable!

Apart from the device addresses, I'm not seeing any reason why this should be incompatible with the Electron.

The bug I'm trying to track down is why ADFS 1.34 (AlanD's Elk patch of ADFS 1.33) doesn't seem to respect the tube presence flag.

Maybe I need to double check this is actually what's happening....

Dave
Last edited by hoglet on Thu May 18, 2017 8:07 pm, edited 2 times in total.

User avatar
jgharston
Posts: 2429
Joined: Thu Sep 24, 2009 11:22 am
Location: Whitby/Sheffield

Re: ADFS 1.30 disassembly

Postby jgharston » Tue May 16, 2017 1:17 pm

hoglet wrote:The bug I'm trying to track down is why ADFS 1.34 (AlanD's Elk patch of ADFS 1.33) doesn't seem to respect the tube presence flag.
Maybe I need to double check this is actually what's happening....
Dave

Have you got a copy of that Elk version? I might be able to work it out.

v130.zip is the latest version I have on my laptop, I've got a more updated version back at home.

Code: Select all

$ bbcbasic
PDP11 BBC BASIC IV Version 0.25
(C) Copyright J.G.Harston 1989,2005-2015
>_

User avatar
hoglet
Posts: 5984
Joined: Sat Oct 13, 2012 6:21 pm
Location: Bristol

Re: ADFS 1.30 disassembly

Postby hoglet » Tue May 16, 2017 4:29 pm

jgharston wrote:
hoglet wrote:The bug I'm trying to track down is why ADFS 1.34 (AlanD's Elk patch of ADFS 1.33) doesn't seem to respect the tube presence flag.
Maybe I need to double check this is actually what's happening....
Dave

Have you got a copy of that Elk version? I might be able to work it out.

v130.zip is the latest version I have on my laptop, I've got a more updated version back at home.

Thanks Jonathan.

I'm just having a play now.

I've run the following through BeebDis and verified the resultant source recompiles to the original binary:
- ADFS 1.30
- ADFS 1.33 (from your site, the latest IDE patch)
- ADFS 1.34 (from AlanD, attached to this post)

Results attached below.

More work required to be able to move code around, but this will be fine for just changing port addresses.

The ADFS 1.34 Elk patch looks completely botched to me! Alan must have been having a bad day. Compare the reverse engineered ADFS133.asm with ADFS134.asm. All of the tube transfer stuff is mangled:
ADFS133_ADFS134.png

As an aside, in doing this I've found a bug in your latest IDE Patch script:

Code: Select all

 2580 [OPT FNorg(L924C,-1)
 2590 NOP:CLR LC200+&D5:ASL A:TAX:TYA:\ Unsupported OSFILE returns A preserved
 2600 ]

This particular patch isn't valid for ADFS 1.30 (Model B) as it's using a 65C02 instruction.

Anyway, back to the main story....

So I then created an Elk specific version of 1.33 by just changing some of the I/O addresses, specifically:

Code: Select all

< LFE30   = $FE30
< LFE44   = $FE44
< LFE80   = $FE80
< LFE84   = $FE84
< LFE85   = $FE85
< LFE86   = $FE86
< LFE87   = $FE87
< LFEE5   = $FEE5
---
> LFE30   = $FE05
> LFE44   = $FCB4
> LFE80   = $FCC0
> LFE84   = $FCC4
> LFE85   = $FCC5
> LFE86   = $FCC6
> LFE87   = $FCC7
> LFEE5   = $FCE5

This version does seem to work better on the Elk than Alan's.

Specifically, I can now load and save Basic programs over the Tube.

But rather frustratingly, Panos fails in exactly the same way as it does with ADFS 1.03.

Another aside... The Z80 Co Pro Client ROM contains 6502 code with Beeb specific I/O addresses (in the OSWORD &FF code). This is responsible for the "NO FILE" error from DIR in CP/M. I've managed to patch this, and got a working version of CP/M on the Elk. The 80x86 Co Pro Client ROM also does the same, but patching was unsuccessful because DOSPlus also uploads some 6502 code (6502.SYS). So much for the elegant Acorn layering!

Anyway, I was hoping that Panos was cleaner. But from the fact the ADFS 1.03 and ADFS 1.33 both fail, I'm now wondering whether this is hitting the same issue.

Here's a snapshot of my current working folder:
adfs.zip
(297.75 KiB) Downloaded 1 time

Dave

User avatar
hoglet
Posts: 5984
Joined: Sat Oct 13, 2012 6:21 pm
Location: Bristol

Re: ADFS 1.30 disassembly

Postby hoglet » Tue May 16, 2017 5:15 pm

hoglet wrote:Anyway, I was hoping that Panos was cleaner. But from the fact the ADFS 1.03 and ADFS 1.33 both fail, I'm now wondering whether this is hitting the same issue.

I've checked with ADT, and I can't find any evidence of host side code.

So I've just switched to the Model B, and done a quick test.
- ADFS 1.33 supplied with Data Centre: Panos boots
- ADFS 1.33 latest IDE patch version from mdfs.net: Panos hangs

I'm going to try to patch the former of these for the Elk, and see if I get any further.

Dave
Last edited by hoglet on Tue May 16, 2017 6:49 pm, edited 1 time in total.

dp11
Posts: 568
Joined: Sun Aug 12, 2012 8:47 pm

Re: ADFS 1.30 disassembly

Postby dp11 » Tue May 16, 2017 5:43 pm

Just as a note

EQUB 0xED,0xED,0xED

disassembles to :
SBC LEDED

User avatar
hoglet
Posts: 5984
Joined: Sat Oct 13, 2012 6:21 pm
Location: Bristol

Re: ADFS 1.30 disassembly

Postby hoglet » Tue May 16, 2017 5:44 pm

Yes, I agree.

This looks to me like a deliberate attempt by Alan just to nuke the Beeb Tube code.

User avatar
hoglet
Posts: 5984
Joined: Sat Oct 13, 2012 6:21 pm
Location: Bristol

Re: ADFS 1.30 disassembly

Postby hoglet » Tue May 16, 2017 5:58 pm

Finally, success!!

Ladies and Gentlemen, for the first time (probably....) an Electron booting Panos :D :D :D
IMG_0906.JPG

IMG_0908.JPG


I went back to the older version of ADFS 1.33 (that came I think with Data Centre), ran this through Beeb Dis, verified it would recompile to the original, and then changed the I/O addresses to match the Elk.

Jonathan, it does seem that your IDE patch has suffered some regressions.

Here's an updated zip file, and I've added:
- DC133 (the version of ADFS 1.33 that came with DataCenter)
- ELKADFS2 (this, patched to the Elk I/O addresses)
adfs.zip
(440.39 KiB) Downloaded 5 times

Please let me know if I can be of any further assistance in tracking down what's regressed.

Oh, and if you diff DC133.asm and ADFS134.asm, it's pretty clear this was the version AlanD patched as well.

Dave

User avatar
TheCorfiot
Posts: 629
Joined: Mon Jan 08, 2007 5:22 pm

Re: ADFS 1.30 disassembly

Postby TheCorfiot » Tue May 16, 2017 6:34 pm

Awesome work Dave

Seems that ADFS 1.30 for the Elk with IDE is now ready, just awaiting my AP5 so I can start testing the BBC 8 Bit IDE Interface as well.

Thanks
:)

User avatar
oss003
Posts: 2380
Joined: Tue Jul 14, 2009 11:57 am
Location: Netherlands
Contact:

Re: ADFS 1.30 disassembly

Postby oss003 » Tue May 16, 2017 7:08 pm

WOW ..... :shock: ...... Nice job Dave =D> =D> =D>

Greetings
Kees

User avatar
BigEd
Posts: 1204
Joined: Sun Jan 24, 2010 10:24 am
Location: West
Contact:

Re: ADFS 1.30 disassembly

Postby BigEd » Tue May 16, 2017 7:27 pm

The Elk goes 32 bit! Well done Dave!

User avatar
hoglet
Posts: 5984
Joined: Sat Oct 13, 2012 6:21 pm
Location: Bristol

Re: ADFS 1.30 disassembly

Postby hoglet » Wed May 17, 2017 6:16 pm

Hi all,

I've done lots more work on my ADFS 1.30 disassembly today:
- fixed all the internal references, jump tables etc. so the code should be relocatable
- merged Jonathan/Michael's v1.18 IDE Patch (version 1.18 from here)

This is now on github, and builds with BeebASM:
https://github.com/hoglet67/ADFS130/blo ... DFS130.asm

From this source you can re-build:
- the original ADFS 1.30 (md5sum = 831ee90ac5d49ba5507252faf0c12536)
- the version of ADFS 1.33 with IDE Patches that shipped with Data Centre (md5sum = c7714bd93602fdc11d2cdaab4af03b07)

I've done some testing of the ability to have code move around by changing the copyright message, which seemed to work.

I have yet to investigate why the latest IDE Patch (v1.22) on mdfs.net is causing Panos to crash.

Dave

User avatar
1024MAK
Posts: 6145
Joined: Mon Apr 18, 2011 4:46 pm
Location: Looking forward to summer in Somerset, UK...

Re: ADFS 1.30 disassembly

Postby 1024MAK » Wed May 17, 2017 6:26 pm

Chief investigator Hoglet cracks another case :D =D> =D> =D>

Mark
For a "Complete BBC Games Archive" visit www.bbcmicro.co.uk NOW!
BeebWiki‬ - for answers to many questions...

User avatar
danielj
Posts: 4668
Joined: Thu Oct 02, 2008 4:51 pm
Location: Manchester

Re: ADFS 1.30 disassembly

Postby danielj » Wed May 17, 2017 6:28 pm

Awesome work Dave! I shall be trying this all out on Friday :)

d.

User avatar
jgharston
Posts: 2429
Joined: Thu Sep 24, 2009 11:22 am
Location: Whitby/Sheffield

Re: ADFS 1.30 disassembly

Postby jgharston » Thu May 18, 2017 9:05 am

Woo hoo!

Now, make sure the Electron version is 1.03
1 = ADFS stand-alone ROM
0 = Electron 3 = BBC 5 = Master
0 = SCSI 3 = IDE 7 = MMC (actually a bitmap 0:hd:hd:bugfix)

I have yet to investigate why the latest IDE Patch (v1.22) on mdfs.net is causing Panos to crash.

BBC? Master? Both? I'll upload the earlier versions of IDEPatch so you can find if/when the break happened.

Code: Select all

$ bbcbasic
PDP11 BBC BASIC IV Version 0.25
(C) Copyright J.G.Harston 1989,2005-2015
>_

User avatar
hoglet
Posts: 5984
Joined: Sat Oct 13, 2012 6:21 pm
Location: Bristol

Re: ADFS 1.30 disassembly

Postby hoglet » Thu May 18, 2017 9:36 am

jgharston wrote:Now, make sure the Electron version is 1.03
1 = ADFS stand-alone ROM
0 = Electron 3 = BBC 5 = Master
0 = SCSI 3 = IDE 7 = MMC (actually a bitmap 0:hd:hd:bugfix)

I must admit I find re-using an existing version number for new versions very confusing.

We do need some way that a user can easily distinguish this as a new build, e.g.
- changing the name, to something like "Electron ADFS" (instead of Acorn ADFS)
- including an actual version number in the Help, e.g. 1.03.xxx

But very open to other ideas.

BTW, I'm happy with how versioning is working in MMFS. But then there is a common source tree for all platforms, and an uber-build script. Which makes it trivial to keep all the versions in step.
jgharston wrote:
I have yet to investigate why the latest IDE Patch (v1.22) on mdfs.net is causing Panos to crash.

BBC? Master? Both? I'll upload the earlier versions of IDEPatch so you can find if/when the break happened.

Definitely patch v1.22 on Model B is buggy.

I haven't tried the Master.

Dave

User avatar
Elminster
Posts: 1101
Joined: Wed Jun 20, 2012 8:09 am
Location: Essex, UK

Re: ADFS 1.30 disassembly

Postby Elminster » Thu May 18, 2017 12:28 pm

hoglet wrote:
jgharston wrote:Now, make sure the Electron version is 1.03
1 = ADFS stand-alone ROM
0 = Electron 3 = BBC 5 = Master
0 = SCSI 3 = IDE 7 = MMC (actually a bitmap 0:hd:hd:bugfix)

I must admit I find re-using an existing version number for new versions very confusing.

We do need some way that a user can easily distinguish this as a new build, e.g.
- changing the name, to something like "Electron ADFS" (instead of Acorn ADFS)
- including an actual version number in the Help, e.g. 1.03.xxx

But very open to other ideas.


Electron ADFS 1.00

And then help reports v1.03.100

Sounds good to me. A method that keeps all happy?

So Electron ADFS v1.67 would be v1.03.167
Etc.

User avatar
jgharston
Posts: 2429
Joined: Thu Sep 24, 2009 11:22 am
Location: Whitby/Sheffield

Re: ADFS 1.30 disassembly

Postby jgharston » Thu May 18, 2017 1:00 pm

hoglet wrote:
jgharston wrote:Now, make sure the Electron version is 1.03
1 = ADFS stand-alone ROM
0 = Electron 3 = BBC 5 = Master
0 = SCSI 3 = IDE 7 = MMC (actually a bitmap 0:hd:hd:bugfix)

I must admit I find re-using an existing version number for new versions very confusing.
We do need some way that a user can easily distinguish this as a new build, e.g.

It isn't reusing existing version numbers, it's extending existing version numbers, and it is very easy for a user to distinguish the builds. Paul's Electron patch was the only one that departed from the established scheme.
1.0x - Electron
1.3x - BBC
1.5x - Master
x.x0 SCSI
x.x3 IDE
x.x7 MMC

Anyway, I've uploaded a more recent ADFS 1.30 disassembly and old versions of IDEPatch.

Code: Select all

$ bbcbasic
PDP11 BBC BASIC IV Version 0.25
(C) Copyright J.G.Harston 1989,2005-2015
>_

User avatar
hoglet
Posts: 5984
Joined: Sat Oct 13, 2012 6:21 pm
Location: Bristol

Re: ADFS 1.30 disassembly

Postby hoglet » Thu May 18, 2017 8:15 pm

I've started merging in some of the v1.19 and v1.20 ADFS patches.
https://github.com/hoglet67/ADFS130/commits/master

Jonathan, a couple of questions:

1. It seems the full access patch in v1.19 was broken but there was further work on this in 1.21. Is that correct?

2. Could you review the way I have re-implemented the v1.20 "Preserve A on unsupported OSFILE" patch.
https://github.com/hoglet67/ADFS130/com ... d31f595f6f
This was necessary as your version was 65C02 specific.

I still haven't figured out what's broken in your latest version.

I'll continue looking at this tomorrow.

And Daniel (if you are following this) I'll add an Elk specific build target first thing tomorrow, and upload a binary release to git.

Dave

User avatar
BigEd
Posts: 1204
Joined: Sun Jan 24, 2010 10:24 am
Location: West
Contact:

Re: ADFS 1.30 disassembly

Postby BigEd » Thu May 18, 2017 8:25 pm

(Dave, I think you mentioned a tracing disassembler which accepts hints and which outputs BeebAsm format: which one was that?)

User avatar
hoglet
Posts: 5984
Joined: Sat Oct 13, 2012 6:21 pm
Location: Bristol

Re: ADFS 1.30 disassembly

Postby hoglet » Thu May 18, 2017 9:05 pm

BigEd wrote:(Dave, I think you mentioned a tracing disassembler which accepts hints and which outputs BeebAsm format: which one was that?)

It was BeebDis 0.91, by Phill HS:
http://www.retrosoftware.co.uk/forum/vi ... f=73&t=820

Is anyone else using this? I find it's a great tool, and I'm sure could be made even better!

A couple of suggestions for improvements:

- automatically handle subroutines that take strings immediately following the JSR call, with lots of flexibility on how the string is terminated and where the next opcode starts in relation to the terminator.

- automatically handle various forms of jump tables (with some guidance, of course)

Dave

User avatar
BigEd
Posts: 1204
Joined: Sun Jan 24, 2010 10:24 am
Location: West
Contact:

Re: ADFS 1.30 disassembly

Postby BigEd » Thu May 18, 2017 9:20 pm

(Thanks! Added to the list at 6502.org)

User avatar
hoglet
Posts: 5984
Joined: Sat Oct 13, 2012 6:21 pm
Location: Bristol

Re: ADFS 1.30 disassembly

Postby hoglet » Fri May 19, 2017 10:11 am

Hi all,

I've uploaded a first binary release of this work to github:
https://github.com/hoglet67/ADFS130/releases

This initial release includes the following builds:

Model B:
- ADFS130 - the original SCSI ADFS 1.30
(md5sum 831ee90ac5d49ba5507252faf0c12536)
- DC133 - the original IDE patched ADFS 1.33 that shipped with Data Centre (v1.18 of JGH's IDE patch)
(md5sum c7714bd93602fdc11d2cdaab4af03b07)
- ADFS133 - a more up to date IDE patched ADFS 1.33 (approximately v1.21 of JGH's IDE patch)

Electron:
- ELK103 - ADFS130 rebuilt with the Electron I/O addresses
- ELK133 - ADFS133 rebuilt with the Electron I/O addresses

For the newer builds, *HELP include a release number in the *HELP message, e.g.

Code: Select all

Electron ADFS 1.33.001


This is using the same kind of build/release system that MMFS uses, with a set of top level source wrappers specifying parameters, and a common source file for everything else:
https://github.com/hoglet67/ADFS130/tree/master/src

This makes it very easy for me to maintain all the builds in parallel.

I've done minimal testing of testing of the Elk versions, but so far so good.

To fit in longer help messages I've had to make space by removing all padding in and around the IDE patches, so the code will have shuffled around quite a bit. Please do let me know if anything is broken.

Dave

User avatar
danielj
Posts: 4668
Joined: Thu Oct 02, 2008 4:51 pm
Location: Manchester

Re: ADFS 1.30 disassembly

Postby danielj » Fri May 19, 2017 10:13 am

I'll finally have some time to sit down with this this evening so shall give it all a go and report back!

d.

User avatar
jgharston
Posts: 2429
Joined: Thu Sep 24, 2009 11:22 am
Location: Whitby/Sheffield

Re: ADFS 1.30 disassembly

Postby jgharston » Fri May 19, 2017 10:29 pm

I think I've cracked the 32016 issues.

It's been a long-standing problem with ADFS and the 32016 in that the ADFS hard drive code pushes the timing margins to the edge and results in standard ADFS builds not working with the 32016. Acorn produced a bodge version for specific use with the 32016, ADFS 1.40B32 and ADFS 1.40M32, but the bodge code took up so much space that the floppy drivers had to be dropped.

I've tracked down what needed to be done - and it could have been done without removing the floppy drivers, just adding a couple of JSR-to-RTS calls. Anyway, ADFS 1.x3 revision 23 works with the 32016. I've also corrected the Unsupported OSFILE code to use non-65c12 opcodes for the BBC.

YouTube video

I haven't yet got Panos to boot, but that's most likely because I copied my NFS installation straight over onto my hard drive, so it's trying to fetch NFS files. All Tube transactions work correctly. It clears the screen and displays 'Acorn Panos (C)1985' then NetMon shows the network is busy. I need to do a fresh ADFS-specific installation from the installation disks, but my original disks have a couple of sector errors so I need to create as fresh set from the images.

I've been testing this evening with 32016, ARM and Z80 CoPros, Master I/O, and BeebEm set to BBC+IDE.

Code: Select all

$ bbcbasic
PDP11 BBC BASIC IV Version 0.25
(C) Copyright J.G.Harston 1989,2005-2015
>_

User avatar
BigEd
Posts: 1204
Joined: Sun Jan 24, 2010 10:24 am
Location: West
Contact:

Re: ADFS 1.30 disassembly

Postby BigEd » Sat May 20, 2017 4:28 am

I take it that's an original cheesewedge 32016, JGH? Is it running at 6MHz?
(Edit: I ask, because I thought the issue was speed, and a matchbox or pitubedirect 32016 would, I thought, be fast enough.)

User avatar
hoglet
Posts: 5984
Joined: Sat Oct 13, 2012 6:21 pm
Location: Bristol

Re: ADFS 1.30 disassembly

Postby hoglet » Sat May 20, 2017 6:25 am

Hi Jonathan,

I will re-test v1.23 with Panos this morning.

What's the undocumented RAMFS related patch in v1.23 actually doing?

Code: Select all

 2490 [OPT FNorg(LBF22,-1):BNE LBF75:]
 2500 [OPT FNorg(LBF75,-1):LDX &B0:LDY &B1:LDA #&76:JSR &FFF1:\ RAMFS
 2510 JMP LBFB7:EQUS STRING$(LBF75+26-P%,CHR$0):]
 


OSWORD &76:
http://beebwiki.mdfs.net/OSWORD_%2676

Dave

User avatar
hoglet
Posts: 5984
Joined: Sat Oct 13, 2012 6:21 pm
Location: Bristol

Re: ADFS 1.30 disassembly

Postby hoglet » Sat May 20, 2017 7:55 am

I've tested ADFS 1.x3 revision 23 and cannot get Panos to boot. The (c) message line is printed, but the prompt never appears.

This is using Panis 1.4, and a Pi Tube Direct on a Model B, so speed is not an issue.

I've also confirmed that Panos will boot with the earlier versions of the patch.

I'll see if I can narrow this down a bit further this morning.


Return to “software: other”

Who is online

Users browsing this forum: Bing [Bot], dp11 and 3 guests