Subject: [stella] programming teaser From: "Andrew Davie" <atari2600@xxxxxxxxxxxxx> Date: Fri, 20 May 2005 05:48:28 -0400 |
As promised, here is a programming teaser. Explain how the following code could ever exit? loop jsr Tricky ; do we ever return from this subroutine? inc colour ; yes! but how?!! lda colour sta COLUBK jmp loop Tricky ldx #$FF ; 'character' line number Continue inx stx SET_BANK_RAM ; bankswitch to appropriate RAM bank for shape data ldy #10 ; draw scanlines in groups of 21 (ie: 1 character row) anotherLine ; draw a scanline here (code omitted) sta WSYNC dey bne anotherLine bmi Continue This is a conceptual version of the actual kernel from notBoulderDash. I can assure you, the background colour will flash quite merrily, proving that the Tricky subroutine does actually return. There is a subtle trick operating here which means that this is actually a completely valid kernel which will exit after drawing an appropriate number of scanlines (in my case, it's currently 168). Think a bit laterally... can anyone explain how it might be possible for code like the above to do its work and actually return to the caller? You will need to make an assumption that is not entirely clear. Can anyone figure this out? Cheers A Archives (includes files) at http://www.biglist.com/lists/stella/archives/ Unsub & more at http://stella.biglist.com
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [stella] VCS C programming, Andrew Davie | Thread | Re: [stella] programming teaser, Andrew Davie |
Re: [stella] VCS C programming, Andrew Davie | Date | Re: [stella] programming teaser, Andrew Davie |
Month |