Re: [stella] New trick?

Subject: Re: [stella] New trick?
From: Eckhard_Stolberg@xxxxxxxxxxxxxxxxxxxxx (Eckhard Stolberg)
Date: Tue, 26 Aug 1997 16:13:57 +0200
>Eckhard, what you've discovered is very interesting, don't you have a piece
>of code to play with?

It was Erik, who discoverd it. I just took the code snippet, that he posted,
and wrote a loop around it.

Also his explaination is better than mine. You have to write something to
NUSIZx, but only once. And you don't have to write to RESPx before the last 
copy has been drawn. You can do that at any time. So with self modifying
codein SC RAM, as Erik suggested, one could really create a Space Invaders 
with more than 6 invaders per row.

VDELx doesn't have anything to do with this effect.

Here is my code anyway. I hope, that you can find through it, because it is
not commented at all. It's in A65 format.

If you replace the STA $86 with STA RESPx again, it would display 15 sprites
per line. The last sprite is a bit off though.


Ciao, Eckhard Stolberg
================================================================================
;
; ROM definitions
;
RomStart        equ     $F000
RomEnd          equ     $FFFF
IntVectors      equ     $FFFA

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Program initialization
;
		ORG	RomStart

Cart_Init:
		SEI				; Disable interrupts.:
		CLD				; Clear "decimal" mode.

		LDX	#$FF
		TXS				; Clear the stack

Common_Init:
		LDX	#$28		; Clear the TIA registers ($04-$2C)
		LDA	#$00
TIAClear:
		STA	$04,X
		DEX
                BPL     TIAClear        ; loop exits with X=$FF
	
		LDX	#$FF
RAMClear:
		STA	$00,X		; Clear the RAM ($FF-$80)
		DEX
                BMI     RAMClear        ; loop exits with X=$7F
	
		LDX	#$FF
		TXS				; Reset the stack
 
IOClear:
		STA	Swbcnt		; console I/O always set to INPUT
		STA	Swacnt		; set controller I/O to INPUT

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Main program loop
;
NewScreen:
                LDA     #$02
		STA	Wsync		; Wait for horizontal sync
		STA	Vblank		; Turn on Vblank
                STA	Vsync		; Turn on Vsync
		STA	Wsync		; Leave Vsync on for 3 lines
		STA	Wsync
		STA	Wsync
                LDA     #$00
		STA	Vsync		; Turn Vsync off

                LDA     #43             ; Vblank for 37 lines
		STA	Tim64t		; 43*64intvls=2752=8256colclks=36.2lines

                LDA     #0
                STA     GRP0
                STA     GRP1
                STA     $80
                LDA     #$10
                STA     $82
                LDA     #$F3
                STA     $81
                LDA     #$F3
                STA     $83
                LDA     #$06
                STA     ColuP0
                LDA     #$0a
                STA     ColuP1
VblankLoop:
		LDA	Intim
		BNE	VblankLoop	; wait for vblank timer
		STA	Wsync		; finish waiting for the current line
		STA	Vblank		; Turn off Vblank

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ScreenStart:     
       LDY      #0  
       LDX      #192
       LDA      #1
       STA      Nusiz0
       STA      Nusiz1
@1:    STA      WSYNC   ;3
       LDA      ($80),Y ;5
       STA      GRP0    ;3
       LDA      ($82),Y ;5
       STA      GRP1    ;3
       LDA      $86     ;3
       STA      RESP0   ;3
       STA      RESP1   ;3   
       STA      $86 ;RESP0   ;3
       STA      $86 ;RESP1   ;3
       STA      $86 ;RESP0   ;3
       STA      $86 ;RESP1   ;3  
       STA      $86 ;RESP0   ;3
       STA      $86 ;RESP1   ;3
       STA      $86 ;RESP0   ;3
       STA      $86 ;RESP1   ;3
       STA      $86 ;RESP0   ;3
       STA      $86 ;RESP1   ;3
       STA      $86 ;RESP0   ;3
       STA      RESP1   ;3
       STA      RESP0   ;3
       INY              ;2
       DEX              ;2
       BNE      @1
       LDA      #2
       STA      Vblank
       STA      Wsync
       STA      Wsync
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
OverscanStart:  LDA     #35             ;skip 30 lines (overscan)
		STA	Tim64t

OverscanLoop:
		LDA	Intim
		BNE	OverscanLoop	; wait for Overscan timer
		STA	Wsync		; finish waiting for the current line


                JMP     NewScreen

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                ORG     $F300
GRAPHICS        DB     $81,$7e,$7e,$60,$60,$60,$60,$78
                DB     $78,$60,$60,$60,$60,$7e,$7e,$81
                DB     $81,$3c,$3c,$66,$66,$60,$60,$3c
                DB     $3c,$06,$06,$66,$66,$3c,$3c,$81
                DB     $81,$7e,$7e,$60,$60,$60,$60,$78
                DB     $78,$60,$60,$60,$60,$7e,$7e,$81
                DB     $81,$3c,$3c,$66,$66,$60,$60,$3c
                DB     $3c,$06,$06,$66,$66,$3c,$3c,$81
                DB     $81,$7e,$7e,$60,$60,$60,$60,$78
                DB     $78,$60,$60,$60,$60,$7e,$7e,$81
                DB     $81,$3c,$3c,$66,$66,$60,$60,$3c
                DB     $3c,$06,$06,$66,$66,$3c,$3c,$81
                DB     $81,$7e,$7e,$60,$60,$60,$60,$78
                DB     $78,$60,$60,$60,$60,$7e,$7e,$81
                DB     $81,$3c,$3c,$66,$66,$60,$60,$3c
                DB     $3c,$06,$06,$66,$66,$3c,$3c,$81
                DB     $81,$7e,$7e,$60,$60,$60,$60,$78
                DB     $78,$60,$60,$60,$60,$7e,$7e,$81
                DB     $81,$3c,$3c,$66,$66,$60,$60,$3c
                DB     $3c,$06,$06,$66,$66,$3c,$3c,$81
                DB     $81,$7e,$7e,$60,$60,$60,$60,$78
                DB     $78,$60,$60,$60,$60,$7e,$7e,$81
                DB     $81,$3c,$3c,$66,$66,$60,$60,$3c
                DB     $3c,$06,$06,$66,$66,$3c,$3c,$81
                DB     $81,$7e,$7e,$60,$60,$60,$60,$78
                DB     $78,$60,$60,$60,$60,$7e,$7e,$81
                DB     $81,$3c,$3c,$66,$66,$60,$60,$3c
                DB     $3c,$06,$06,$66,$66,$3c,$3c,$81
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Set up the 6502 interrupt vector table
;
		ORG	IntVectors
NMI             dw      Cart_Init
Reset           dw      Cart_Init
IRQ             dw      Cart_Init
        
		END



--
Archives updated once/day at http://www.biglist.com/lists/stella/archives/
Unsubscribing and other info at http://www.biglist.com/lists/stella/stella.html

Current Thread