Subject: [stella] Alpha Source From: Manuel Polik <manuel.polik@xxxxxxxxxxx> Date: Fri, 05 Jan 2001 15:33:55 +0100 |
Hi there! Ok, here comes the source of the Alpha Demo. Some words first: See it as my tribute to the stella list, maybe call it payback. In no way I want to critisize the original work. This stuff made me learning how to programm the VCS. Thank you. There's two flaws in it, the 'Bira Bira' demo doesn't feature a working single scanline kernel, which you might have noticed already and Piero Cavinos demo appeared to be smoother in it's original form. You'll find all credits and lots of comments at the beginning of the source. (Stuff like which demo was choosen and which not and why...) Feel free to try to correct the two *bugs* mentioned before, or to crunch the demos further (There's still a lot space improvement possible in the demos by Bob Colbert & Piero Cavino, I just stopped optimizing when everything fitted in 2K :-)). I will update the demo with all fixes & improvements sent in and eventually someday do a bigger 4K Megademo. Please inform me, if I missed any stellalist demo earlier than May 97 which is not mentioned in the source, so that I can add it in the 4K version. How it works: I'll highlight some little pieces of the sourcecode, to give you an idea how it works without analizing the whole source. The first page is the key. Here is one *complete* kernel for every demo. It looks like this: ORG $F000 ; This part is the Matt demo Start JMP MattReset ; Reset everything for Matt MattLoop JSR VerticalSync ; Common vertical sync JSR VerticalBlank ; Do-nothing vertical blank JSR MattScreen ; MattScreen does Overscan BEQ MattLoop ; Repeat ORG $F010 ; This part is the Robbie demo (There's no need to reset anything) RobbieLoop JSR VerticalSync ; Common vertical sync JSR VerticalBlank ; Do-nothing vertical blank JSR RobbieScreen ; RobbieScreen does Overscan BEQ RobbieLoop ; Repeat Notice that the space between two demos is always $10, we'll need that later... Every demo can use any variable, except one of the first three, which are strictly used as follows: ; Reserved Variables $80+$81 & $82 ; (These cannot be used within the demos) demoVector = $80 ; vector used to skip to the next demo switchesRead = $82 ; stores the value of the switches Now comes the clue to the switching, which is done by the common vertical sync routine, that _every_ demo uses: VerticalSync LDA #$02 ; STA WSYNC ; Finish current line STA VSYNC ; start vertical sync LDA #$03 ; STA TIM64T ; LDA SWCHB ; Reset/Select button.... CMP switchesRead ; same as last read? BEQ WaitVSync ; Y: Continue STA switchesRead ; N: Store new value LSR ; Reset? BCS NoReset ; N: Continue JMP Start ; Y: Start over NoReset LSR ; Select? BCS WaitVSync ; N: Continue with vertical sync LDA demoVector ; Skip to next demo ADC #$10 ; STA demoVector ; LDX #$FF ; TXS ; Restore Stack STA VSYNC ; stop vertical sync JMP (demoVector) ; Jump to the next demo WaitVSync JMP WaitIntimReady ; Wait until vertical sync finished I hope the comments speak for itself. This was the main idea behind it, but you might imagine, that a lot more was needed to squeeze everything in 2K. Read the comments to get an idea of what I did and check out the common subroutines located at the beginning of the source. These are used by many of the demos and have even different entry points for special situations... Thats all for now, Greetings, Manuel
Attachment:
alpha.zip
Description: Zip compressed data
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [stella] OPTIMIZE YOUR WINDOWS , Glenn Saunders | Thread | Re: [stella] Alpha Source - R.A, Erik Mooney |
[stella] OPTIMIZE YOUR WINDOWS OPER, info1 | Date | [stella] The Atari 2600 Puma, Kevin Horton |
Month |