New Release: Retro Software's WHITE LIGHT by Sarah Walker

new games to be launched and discussed here
Stainy
Posts: 22
Joined: Sun Apr 15, 2012 9:07 pm
Contact:

Re: New Release: Retro Software's WHITE LIGHT by Sarah Walker

Postby Stainy » Wed Feb 14, 2018 2:34 pm

Fantastic! I got round to trying this.. It works on BeebEm 0.6 on my Open Pandora.


Actually... no it doesn`t :( the intro works but when I press space it just freezes with the ship on screen :(

User avatar
kieranhj
Posts: 618
Joined: Sat Sep 19, 2015 10:11 pm
Location: Farnham, Surrey, UK
Contact:

Re: New Release: Retro Software's WHITE LIGHT by Sarah Walker

Postby kieranhj » Thu Feb 22, 2018 2:22 pm

The latest issue of Retro Gamer magazine plopped through the letterbox this morning and...

20180222_140654398_iOS.jpg
White Light review!

Great work again Sarah! Some well deserved coverage and positive comments here. =D>
Bitshifters Collective | Retro Code & Demos for BBC Micro & Acorn computers | https://bitshifters.github.io/

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

Re: New Release: Retro Software's WHITE LIGHT by Sarah Walker

Postby danielj » Fri Feb 23, 2018 3:44 pm

Just plopped through my letterbox too :D. To echo - fantastic words - brilliant work Sarah, well deserved! :)

d.

User avatar
richardtoohey
Posts: 3563
Joined: Thu Dec 29, 2011 5:13 am
Location: Tauranga, New Zealand
Contact:

Re: New Release: Retro Software's WHITE LIGHT by Sarah Walker

Postby richardtoohey » Mon Feb 26, 2018 5:57 am

Knew I'd get well-beaten to mentioning the magazine article.

Well done, Sarah =D>

User avatar
Dave Footitt
Posts: 780
Joined: Thu Jun 22, 2006 9:31 am
Location: Abandoned Uranium Workings
Contact:

Re: New Release: Retro Software's WHITE LIGHT by Sarah Walker

Postby Dave Footitt » Fri Mar 02, 2018 4:02 pm

Spotted that myself but far too tardy with the news!

Nice one Sarah =D>

User avatar
Pablos544
Posts: 323
Joined: Tue Jul 15, 2014 4:25 pm
Location: London, UK
Contact:

Re: New Release: Retro Software's WHITE LIGHT by Sarah Walker

Postby Pablos544 » Fri Mar 02, 2018 4:24 pm

I'm very proud of you Sarah :P

Higgy
Posts: 24
Joined: Wed Jan 25, 2017 1:32 pm
Contact:

Re: New Release: Retro Software's WHITE LIGHT by Sarah Walker

Postby Higgy » Fri Mar 30, 2018 3:26 pm

Hi,

Cool game :)

I have been updating the main game .MMB and I would like to include 'White Light'. I have added it to my Personal .MMB but want to know if it is ok to add it to a new v1.2 version for Public Consumption!

Plus, is there any other games to add, as I have finally remembered to add games into the .MMB menu again :)

User avatar
lurkio
Posts: 1515
Joined: Tue Apr 09, 2013 11:30 pm
Location: Doomawangara
Contact:

Re: New Release: Retro Software's WHITE LIGHT by Sarah Walker

Postby lurkio » Fri Mar 30, 2018 4:15 pm

Higgy wrote:Plus, is there any other games to add, as I have finally remembered to add games into the .MMB menu again :)

See the latest releases on bbcmicro.co.uk:


Also, see the latest updates:

:idea:

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

Re: New Release: Retro Software's WHITE LIGHT by Sarah Walker

Postby hoglet » Sat Mar 31, 2018 11:53 am

There seems to be an "incompatibility" between White Light and MMFS.

The problem (first reported by Higgy) is that White Light loads and runs OK for one game, but then hangs with a black screen instead of restarting.

When restarting, the following two OSCLI commands are done:

Code: Select all

*DISC
*/W5

The hang happens when loading W5, in MMFS in the code that reads the shift 6522 register.

Debugging this a bit further (with the FTDI snoop board hanging off the tube), you can see the problem:

Code: Select all

A646 : A9 04    : LDA #04        : 2 : A=04 X=01 Y=DC SP=?? N=0 V=0 D=0 I=0 Z=0 C=1
A648 : 2C 6D FE : BIT FE6D       : 4 : A=04 X=01 Y=DC SP=?? N=0 V=0 D=0 I=0 Z=1 C=1
A64B : F0 FB    : BEQ A648       : 3 : A=04 X=01 Y=DC SP=?? N=0 V=0 D=0 I=0 Z=1 C=1
A648 : 2C 6D FE : BIT FE6D       : 4 : A=04 X=01 Y=DC SP=?? N=1 V=1 D=0 I=0 Z=1 C=1
A64B :          : INTERRUPT !!   : 7 : A=04 X=01 Y=DC SP=?? N=1 V=1 D=0 I=1 Z=1 C=1
DC1C : 85 FC    : STA FC         : 3 : A=04 X=01 Y=DC SP=?? N=1 V=1 D=0 I=1 Z=1 C=1
DC1E : 68       : PLA            : 4 : A=E3 X=01 Y=DC SP=?? N=1 V=1 D=0 I=1 Z=0 C=1
DC1F : 48       : PHA            : 3 : A=E3 X=01 Y=DC SP=?? N=1 V=1 D=0 I=1 Z=0 C=1
DC20 : 29 10    : AND #10        : 2 : A=00 X=01 Y=DC SP=?? N=0 V=1 D=0 I=1 Z=1 C=1
DC22 : D0 03    : BNE DC27       : 2 : A=00 X=01 Y=DC SP=?? N=0 V=1 D=0 I=1 Z=1 C=1
DC24 : 6C 04 02 : JMP (0204)     : 5 : A=00 X=01 Y=DC SP=?? N=0 V=1 D=0 I=1 Z=1 C=1
0700 : A9 7F    : LDA #7F        : 2 : A=7F X=01 Y=DC SP=?? N=0 V=1 D=0 I=1 Z=0 C=1
0702 : 8D 4D FE : STA FE4D       : 4 : A=7F X=01 Y=DC SP=?? N=0 V=1 D=0 I=1 Z=0 C=1
0705 : 8D 6D FE : STA FE6D       : 4 : A=7F X=01 Y=DC SP=?? N=0 V=1 D=0 I=1 Z=0 C=1
0708 : A5 FC    : LDA FC         : 3 : A=04 X=01 Y=DC SP=?? N=0 V=1 D=0 I=1 Z=0 C=1
070A : 40       : RTI            : 6 : A=04 X=01 Y=DC SP=?? N=1 V=1 D=0 I=0 Z=1 C=1
A64B : F0 FB    : BEQ A648       : 3 : A=04 X=01 Y=DC SP=?? N=1 V=1 D=0 I=0 Z=1 C=1
A648 : 2C 6D FE : BIT FE6D       : 4 : A=04 X=01 Y=DC SP=?? N=0 V=0 D=0 I=0 Z=1 C=1
A64B : F0 FB    : BEQ A648       : 3 : A=04 X=01 Y=DC SP=?? N=0 V=0 D=0 I=0 Z=1 C=1
A648 : 2C 6D FE : BIT FE6D       : 4 : A=04 X=01 Y=DC SP=?? N=0 V=0 D=0 I=0 Z=1 C=1
A64B : F0 FB    : BEQ A648       : 3 : A=04 X=01 Y=DC SP=?? N=0 V=0 D=0 I=0 Z=1 C=1
A648 : 2C 6D FE : BIT FE6D       : 4 : A=04 X=01 Y=DC SP=?? N=0 V=0 D=0 I=0 Z=1 C=1
A64B : F0 FB    : BEQ A648       : 3 : A=04 X=01 Y=DC SP=?? N=0 V=0 D=0 I=0 Z=1 C=1
...
... for ever

It seems White Light has left an interrupt handler running that is nobbling MMFS's code polling for the shift register done bit. In this case I think the interrupt is a User VIA T1 or T2 interrupt, but that doesn't really matter.

I should be able to work around this in MMFS (with SEI/CLI), but I've tried and there seems to be something else going on as well.

It also seems like MMFS (in sideways RAM) is getting corrupted by the game itself. This time, using ICE T65 so I can set memory watch breakpoints:

Code: Select all

ICE-T65 In-Circuit Emulator version 0.72
Compiled at 22:03:12 on Nov 16 2015
8 watches/breakpoints implemented
Tracing every 1 instructions while single stepping
CPU free running...
Interrupted
04.749419: DEF0 : BCC DF03   
>> watchw 8000 c000
Mem Wr Watch set at 8000
>> c
CPU free running...
16.281181: Mem Wr Watch hit at 1A92 writing 8E23 = 80
16.421532: Mem Wr Watch hit at 1A38 writing 89E5 = 73
16.421568: Mem Wr Watch hit at 1A38 writing A5C1 = 05
16.421604: Mem Wr Watch hit at 1A38 writing 87A2 = 3E
16.421640: Mem Wr Watch hit at 1A38 writing A982 = 29
16.421676: Mem Wr Watch hit at 1A38 writing 8B64 = 05
16.421712: Mem Wr Watch hit at 1A38 writing AB45 = 29
16.421748: Mem Wr Watch hit at 1A38 writing AD20 = 59
16.421784: Mem Wr Watch hit at 1A38 writing 8F01 = 31
16.421820: Mem Wr Watch hit at 1A38 writing A4E7 = 3E
16.422001: Mem Wr Watch hit at 1A38 writing 8E23 = 00
16.422037: Mem Wr Watch hit at 1A38 writing AC00 = 0A
11.651616: Mem Wr Watch hit at 156F writing A6F7 = A0
11.651631: Mem Wr Watch hit at 1577 writing A6FF = 80
11.651647: Mem Wr Watch hit at 157F writing A707 = 80
11.651663: Mem Wr Watch hit at 1587 writing A70F = D0
11.651679: Mem Wr Watch hit at 158F writing A717 = 40
11.651695: Mem Wr Watch hit at 1597 writing A71F = 00
01.504982: Mem Wr Watch hit at 1488 writing 8000 = 00
01.505132: Mem Wr Watch hit at 1488 writing 8001 = 00
01.505282: Mem Wr Watch hit at 1488 writing 8002 = 00
01.505432: Mem Wr Watch hit at 1488 writing 8003 = 4C
01.505612: Mem Wr Watch hit at 1488 writing 8004 = AE
01.505762: Mem Wr Watch hit at 1488 writing 8005 = 8E
01.505912: Mem Wr Watch hit at 1488 writing 8006 = 82
01.506062: Mem Wr Watch hit at 1488 writing 8007 = 1A
01.581211: Mem Wr Watch hit at 15EB writing 8000 = 00
01.581319: Mem Wr Watch hit at 15EB writing 8001 = 00
01.581427: Mem Wr Watch hit at 15EB writing 8002 = 00
01.581535: Mem Wr Watch hit at 15EB writing 8003 = 40
01.581643: Mem Wr Watch hit at 15EB writing 8004 = A0
01.581751: Mem Wr Watch hit at 15EB writing 8005 = 80
01.581859: Mem Wr Watch hit at 15EB writing 8006 = 80
01.581967: Mem Wr Watch hit at 15EB writing 8007 = 10
Interrupted
07.128873: 0EF8 : LDA EE     
>> rd f4
Rd: 00F4 = 04

Here's another run, this time setting a break point:

Code: Select all

ICE-T65 In-Circuit Emulator version 0.72
Compiled at 22:03:12 on Nov 16 2015
8 watches/breakpoints implemented
Tracing every 1 instructions while single stepping
CPU free running...
Interrupted
01.925920: E465 : SEI         
>> breakw 8000 c000
Mem Wr Brkpt set at 8000
>> c
CPU free running...
Mem Wr Brkpt hit at 1A92 writing 8E23 = 80
03.798735: 1A92 : STA (92),Y 
Interrupted
03.798742: 1A94 : LDA 92     
>> d 1a80
1A80 : ASL A       
1A81 : TAX         
1A82 : JSR 1A3E   
1A85 : LDY #00     
1A87 : LDX C1     
1A89 : LDA (92),Y 
1A8B : BIT 1A23   
1A8E : BNE 1A94   
1A90 : ORA #80     
1A92 : STA (92),Y 
>> rd 92
Rd: 0092 = 23
>> rd 93
Rd: 0093 = 8E

Sarah, do you have any idea what's happening here?

Edit: After a bit more investigation there are actually three separate issues:
(1) White Light's interrupt handler nobbling the 6522's Shift Register done bit
(2) MMFS code corruption due to stray writes to &8000-&BFFF
(3) MMFS's private workspace (typically at &17xx) corruption, causing the "current disk" to be forgotten

(1) I can work around in MMFS by adding SEI/CLI in a couple of places
(2) Is an issue if the MMFS image is in a writable sideways RAM bank (or possibly an unprotected FLASH bank)
(3) Is an issue when using a normal PAGE=&1900 version of Model B MMFS, but won't be a problem on the Master

With the MMFS work around (1), I have got this running properly on the Master, so I'm happy there is nothing else going on. But it's harder to make it work on the Model B because of (3).

Dave