Subject: [stella] 13char + 2! From: Paul Slocum <paul-stella@xxxxxxxxxxxxxx> Date: Wed, 10 Dec 2003 11:47:16 -0600 |
Attachment:
13ch_plus2.bin
Description: Binary data
;--------------------------------------------------------------------------- ; ; Generic 2600 Game ; ;--------------------------------------------------------------------------- processor 6502 include vcs.h ;--------------------------------------------------------------------------- ; Constants ;--------------------------------------------------------------------------- chars equ $a7 ;2 ;--------------------------------------------------------------------------- ; RAM Variables ;--------------------------------------------------------------------------- charp equ $80 ;5 chara equ $85 ;5 charb equ $8a ;5 charc equ $8f ;5 chard equ $94 ;5 chare equ $99 ;5 charf equ $9e ;5 charg equ $a3 ;5 temp equ $a9 line equ $aa count equ $ab textptr equ $ac savesp equ $ad MAC SLEEP IF {1} = 1 ECHO "ERROR: SLEEP 1 not allowed !" END ENDIF IF {1} & 1 nop $00 REPEAT ({1}-3)/2 nop REPEND ELSE REPEAT ({1})/2 nop REPEND ENDIF ENDM MAC TEXTDISP lda #11 sta NUSIZ1 sta VDELP1 lda charg+{1} ;3 sta ENAM0 ;3 lsr ;2 sta ENAM1 ;3 lsr ;2 sta ENABL ;3 lda charf+{1} ;3 sta GRP0 ;3 lda chare+{1} ;3 sta GRP1 ;3 nop lda chard+{1} ;3 sta GRP0 ;3 lda charc+{1} ;3 ldy charb+{1} ;3 ldx chara+{1} ;3 sta GRP1 ;3 sty GRP0 ;3 stx GRP1 ;3 sta VDELP1 ;3 lda #4 sta NUSIZ1 lda charp+{1} ;3 sta GRP1 ENDM ;--------------------------------------------------------------------------- ;--------------------------------------------------------------------------- org $F000 ;--------------------------------------------------------------------------- ;--------------------------------------------------------------------------- ;--------------------------------------------------------------------------- ; Start of Program ;--------------------------------------------------------------------------- ; Clear memory, locate character graphics positions and such, ; initialize key memory values, start GameLoop. ;------------------------------------------------------------- Start sei cld ldx #$FF txs lda #0 clear sta 0,x dex bne clear ;--------------------------------------------------------------------------- ; Initialize variables / registers ;--------------------------------------------------------------------------- lda #$28 sta COLUP0 lda #$28 sta COLUP1 lda #255 sta PF0 lda #$f0 sta PF1 lda #0 sta PF2 lda #%00000101 sta CTRLPF sta WSYNC sta GRP0 sta GRP1 lda #$03 ; set both players to 3 copies sta NUSIZ0 sta NUSIZ1 lda #$01 ; set vertical delay on for both players sta VDELP0 sta RESM0 sta RESM1 sta VDELP1 sta RESBL sta RESP0 sta RESP1 lda #%11110000 sta HMP1 lda #%11100000 sta HMP0 lda #%10000000 sta HMBL lda #%10110000 sta HMM0 lda #%01010000 sta HMM1 sta WSYNC sta HMOVE ;-------------------------------------------------------------------------- ; GameLoop ;-------------------------------------------------------------------------- GameLoop jsr VSync ;start vertical retrace jsr VBlank ; spare time during screen blank jsr Picture ; draw one screen jsr overscan ; do overscan jmp GameLoop ;back to top ;-------------------------------------------------------------------------- ; VSync ;-------------------------------------------------------------------------- VSync lda #2 ;bit 1 needs to be 1 to start retrace sta VSYNC ;start retrace sta WSYNC ;wait a few lines sta WSYNC lda #44 ;prepare timer to exit blank period (44) sta TIM64T ;turn it on sta WSYNC ;wait one more sta VSYNC ;done with retrace, write 0 to bit 1 rts ; VSync ;-------------------------------------------------------------------------- ; VBlank ;-------------------------------------------------------------------------- ; Game Logic ;-------------------------------------------------------------------------- VBlank rts ; VBlank ;-------------------------------------------------------------------------- ; Overscan ;-------------------------------------------------------------------------- ; More Game Logic ;-------------------------------------------------------------------------- overscan sta WSYNC lda #$00 sta COLUBK lda #36 ; Use the timer to make sure overscan takes (34) sta TIM64T ; 30 scan lines. 29 scan lines * 76 = 2204 / 64 = 34.4 endOS lda INTIM ; We finished, but wait for timer bne endOS ; by looping till zero sta WSYNC ; End last scanline lda #$82 sta VBLANK lda #$02 sta VBLANK rts ; overscan ;-------------------------------------------------------------------------- ; Draw TV Pictures ;-------------------------------------------------------------------------- ; ;-------------------------------------------------------------------------- Picture pictureLoop lda INTIM ;check timer for end of VBLANK period bne pictureLoop ;loop until it reaches 0 sta WSYNC lda #$80 sta VBLANK ;end screen blank ; Set playfield color lda #$28 sta COLUPF lda #15 sta line lda #0 sta textptr tsx stx savesp SLEEP 45 jmp mainTextLoop ;3 ; put this here so we can jump out of the main text loop ; using a 2-cycle relative branch. quitTextLoop lda #0 sta GRP0 sta GRP1 sta GRP0 sta GRP1 sta ENAM0 sta ENAM1 sta ENABL ; restore stack pointer ldx savesp txs ldx #11 ScanLoop sta WSYNC dex bne ScanLoop sta COLUPF rts ; Picture ;------------------------------------------------------------------ align 256 mainTextLoop ; set up the stack for building screen data ldx #chars ;2 txs ;2 ; load the first text character ; note: x and y are reversed! ldy textptr ;3 ldx text,y ;4 beq quitTextLoop ;2 ->4 ; look for terminating character (0) iny ;2 ; build screen data for first character lda fontlo,x ;4 pha ;3 lda fontlo+1,x ;4 pha ;3 lda fontlo+2,x ;4 pha ;3 lda fontlo+3,x ;4 pha ;3 lda fontlo+4,x ;4 pha ;3 ; loop through the remaining 6 character pairs textLineLoop ; load the next two text characters ldx text,y ;4 lda text1,y ;4 iny ;2 sty textptr ;3 tay ;2 ; build screen data for next two characters lda fonthi,x ;4 ora fontlo,y ;4 pha ;3 lda fonthi+1,x ;4 ora fontlo+1,y ;4 pha ;3 lda fonthi+2,x ;4 ora fontlo+2,y ;4 pha ;3 lda fonthi+3,x ;4 ora fontlo+3,y ;4 pha ;3 lda fonthi+4,x ;4 ora fontlo+4,y ;4 pha ;3 ; next character pair ldy textptr ;3 tsx ;2 bmi textLineLoop ;2 ; now render it asap TEXTDISP 0,0 TEXTDISP 1,2 TEXTDISP 2,4 TEXTDISP 3,6 TEXTDISP 4,8 lda #0 ;2 ; sta COLUP0 ;3 ; sta COLUP1 ;3 sta GRP0 sta GRP1 sta GRP0 sta ENAM0 sta ENAM1 sta ENABL SLEEP 66 ; 15+23+12 jmp mainTextLoop ;3 ;------------------------------------------------------------------ ;------------------------------------------------------------------ ;--------------------------------------------------------------------------- ; note: dasm doesn't like using x or y as a label! MAC TEXTA byte {16},{3},{5},{7},{9},{11},{13},{15} ENDM MAC TEXTB byte {1},{2},{4},{6},{8},{10},{12},{14} ENDM MAC TEXT TEXT{1} t,h,i,r,t,e,e,n,c,h,a,r,s,plus,_2,0 TEXT{1} _,_,ast,_,d,e,m,o,_,ast,_,_,_,_,_,0 TEXT{1} eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,0 TEXT{1} b,r,o,a,d,_,s,w,o,r,d,_,_,plus,_2,0 TEXT{1} w,o,o,d,e,n,_,s,h,i,e,l,d,min,_1,0 TEXT{1} m,e,t,a,l,_,h,e,l,m,e,t,_,min,_1,0 TEXT{1} s,u,p,e,r,_,w,e,b,_,_,_,_,n,a,0 TEXT{1} t,i,g,e,r,_,s,t,a,f,f,_,_,plus,_5,0 TEXT{1} t,e,xx,t,_,r,o,u,t,i,n,e,_,plus,_9,0 TEXT{1} eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,0 TEXT{1} g,o,l,d,_,n,u,g,g,e,t,s,_,_3,_5,0 TEXT{1} l,i,g,h,t,_,a,r,r,o,w,s,_,_1,_5,0 TEXT{1} w,h,i,t,e,_,m,a,j,i,c,k,s,_8,_3,0 ENDM align 256 text TEXT B text1 TEXT A ;--------------------------------------------------------------------------- align 256 fonthi eof byte %00000000 ; value not used, address must be zero _ byte %00000000 byte %00000000 byte %00000000 byte %00000000 byte %00000000 a byte %10100000 byte %10100000 byte %11100000 byte %10100000 byte %01000000 b byte %11000000 byte %10100000 byte %11000000 byte %10100000 byte %11000000 c byte %01100000 byte %10000000 byte %10000000 byte %10000000 byte %01100000 d byte %11000000 byte %10100000 byte %10100000 byte %10100000 byte %11000000 e byte %11100000 byte %10000000 byte %11000000 byte %10000000 byte %11100000 f byte %10000000 byte %10000000 byte %11000000 byte %10000000 byte %11100000 g byte %01100000 byte %10100000 byte %10100000 byte %10000000 byte %01100000 h byte %10100000 byte %10100000 byte %11100000 byte %10100000 byte %10100000 i _1 byte %01000000 byte %01000000 byte %01000000 byte %01000000 byte %01000000 j byte %10000000 byte %01000000 byte %01000000 byte %01000000 byte %11100000 k byte %10100000 byte %10100000 byte %11000000 byte %10100000 byte %10000000 l byte %11100000 byte %10000000 byte %10000000 byte %10000000 byte %10000000 m byte %10100000 byte %10100000 byte %10100000 byte %11100000 byte %10100000 n byte %10100000 byte %10100000 byte %10100000 byte %10100000 byte %11000000 o _0 byte %01000000 byte %10100000 byte %10100000 byte %10100000 byte %01000000 p byte %10000000 byte %10000000 byte %11000000 byte %10100000 byte %11000000 q byte %01100000 byte %11100000 byte %10100000 byte %10100000 byte %01000000 r byte %10100000 byte %10100000 byte %11000000 byte %10100000 byte %11000000 s byte %11000000 byte %00100000 byte %01000000 byte %10000000 byte %01100000 t byte %01000000 byte %01000000 byte %01000000 byte %01000000 byte %11100000 u byte %01100000 byte %10100000 byte %10100000 byte %10100000 byte %10100000 v byte %01000000 byte %01000000 byte %10100000 byte %10100000 byte %10100000 w byte %10100000 byte %11100000 byte %10100000 byte %10100000 byte %10100000 xx byte %10100000 byte %10100000 byte %01000000 byte %10100000 byte %10100000 yy byte %01000000 byte %01000000 byte %01000000 byte %10100000 byte %10100000 z byte %11100000 byte %10000000 byte %01000000 byte %00100000 byte %11100000 ast byte %10100000 byte %01000000 byte %11100000 byte %01000000 byte %10100000 eq byte %00000000 byte %11100000 byte %00000000 byte %11100000 byte %00000000 plus byte %00000000 byte %01000000 byte %11100000 byte %01000000 byte %00000000 min byte %00000000 byte %00000000 byte %11100000 byte %00000000 byte %00000000 _2 byte %11100000 byte %10000000 byte %01000000 byte %00100000 byte %11000000 _3 byte %11100000 byte %00100000 byte %01100000 byte %00100000 byte %11100000 _4 byte %00100000 byte %00100000 byte %11100000 byte %10100000 byte %10100000 _5 byte %11100000 byte %00100000 byte %11100000 byte %10000000 byte %11100000 _6 byte %01000000 byte %10100000 byte %11000000 byte %10000000 byte %01100000 _7 byte %10000000 byte %10000000 byte %10000000 byte %10000000 byte %11100000 _8 byte %11100000 byte %10100000 byte %11100000 byte %10100000 byte %11100000 _9 byte %01000000 byte %00100000 byte %11100000 byte %10100000 byte %11100000 align 256 fontlo ;eof byte %00000000 ;_ byte %00000000 byte %00000000 byte %00000000 byte %00000000 byte %00000000 ;a byte %00001010 byte %00001010 byte %00001110 byte %00001010 byte %00000100 ;b byte %00001100 byte %00001010 byte %00001100 byte %00001010 byte %00001100 ;c byte %00000110 byte %00001000 byte %00001000 byte %00001000 byte %00000110 ;d byte %00001100 byte %00001010 byte %00001010 byte %00001010 byte %00001100 ;e byte %00001110 byte %00001000 byte %00001100 byte %00001000 byte %00001110 ;f byte %00001000 byte %00001000 byte %00001100 byte %00001000 byte %00001110 ;g byte %00000110 byte %00001010 byte %00001010 byte %00001000 byte %00000110 ;h byte %00001010 byte %00001010 byte %00001110 byte %00001010 byte %00001010 ;i byte %00000100 byte %00000100 byte %00000100 byte %00000100 byte %00000100 ;j byte %00001000 byte %00000100 byte %00000100 byte %00000100 byte %00001110 ;k byte %00001010 byte %00001010 byte %00001100 byte %00001010 byte %00001000 ;l byte %00001110 byte %00001000 byte %00001000 byte %00001000 byte %00001000 ;m byte %00001010 byte %00001010 byte %00001010 byte %00001110 byte %00001010 ;n byte %00001010 byte %00001010 byte %00001010 byte %00001010 byte %00001100 ;o byte %00000100 byte %00001010 byte %00001010 byte %00001010 byte %00000100 ;p byte %00001000 byte %00001000 byte %00001100 byte %00001010 byte %00001100 ;q byte %00000110 byte %00001110 byte %00001010 byte %00001010 byte %00000100 ;r byte %00001010 byte %00001010 byte %00001100 byte %00001010 byte %00001100 ;s byte %00001100 byte %00000010 byte %00000100 byte %00001000 byte %00000110 ;t byte %00000100 byte %00000100 byte %00000100 byte %00000100 byte %00001110 ;u byte %00000110 byte %00001010 byte %00001010 byte %00001010 byte %00001010 ;v byte %00000100 byte %00000100 byte %00001010 byte %00001010 byte %00001010 ;w byte %00001010 byte %00001110 byte %00001010 byte %00001010 byte %00001010 ;xx byte %00001010 byte %00001010 byte %00000100 byte %00001010 byte %00001010 ;yy byte %00000100 byte %00000100 byte %00000100 byte %00001010 byte %00001010 ;z byte %00001110 byte %00001000 byte %00000100 byte %00000010 byte %00001110 ;ast byte %00001010 byte %00000100 byte %00001110 byte %00000100 byte %00001010 ;eq byte %00000000 byte %00001110 byte %00000000 byte %00001110 byte %00000000 ;plus byte %0000 byte %0100 byte %1110 byte %0100 byte %0000 ;min byte %0000 byte %0000 byte %1110 byte %0000 byte %0000 ;_2 byte %1110 byte %1000 byte %0100 byte %0010 byte %1100 ;_3 byte %1110 byte %0010 byte %0110 byte %0010 byte %1110 ;_4 byte %0010 byte %0010 byte %1110 byte %1010 byte %1010 ;_5 byte %1110 byte %0010 byte %1110 byte %1000 byte %1110 ;_6 byte %0100 byte %1010 byte %1100 byte %1000 byte %0110 ;_7 byte %1000 byte %1000 byte %1000 byte %1000 byte %1110 ;_8 byte %1110 byte %1010 byte %1110 byte %1010 byte %1110 ;_9 byte %1100 byte %0010 byte %1110 byte %1010 byte %1110 ;--------------------------------------------------------------------------- ; Program Startup ;--------------------------------------------------------------------------- org $FFFC .word Start .word Start
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [stella] tia hue luminance, Adam Wozniak | Thread | Re: [stella] tia hue luminance, Thomas Jentzsch |
Re: [stella] Wide Missile Spacing?, cybergoth | Date | [stella] 9 char + Q :), cybergoth |
Month |