Subject: [stella] GunFight 2600: One Limit Reached! From: Manuel Polik <manuel.polik@xxxxxxxxxxx> Date: Wed, 14 Feb 2001 17:09:12 +0100 |
Hi there! I'm through with the single line kernel now -> I definitely need two lines. The current demo (#2) pushed the single kernel to the max, there's some cycles left, but none of my desired features can be added with these few... Changes: 1 - assimilated all of Thomas' superior knowledge and put it straight into the kernel 2 - limited the movement of the cowboys. (Is it still enough for you Eckhard? :-)) 3 - changed the colors. Now the sprites look exactly like Pat Garret & Billy the Kid. 4 - Enabled the Missile to display something that, nearly but not totally, looks different than a pistol (#1) 5 - Messed up the source some more with quick copy & paste stuff If you like, please comment on the demo as such, or about the 'nextline' loop. Any ideas/improvements appreciated. -> All the rest of the source is just to get that thing going, I'll fix & clean up that mess later. Greetings, Manuel #1 Uhm, I read the german translation of 'The Restaurant At The End Of The Universe' and tried to re-translate that joke. If it shows no similarity to the original words at all now, it's only 50% my fault. #2 I forced it to display like a double line kernel, but it'd work as single. Just remove the second STA WSYNC. I did this, that YOU already get used to the new double line look :-)
Attachment:
gunfight.bin
Description: Binary data
processor 6502 include vcs.h SCREENSTART = $60 SEG.U vars org $80 horPos ds 5 ; Horizontal positions (Player/Player/Missile/Missile/Ball) verPos ds 2 ; Vertical positions (Player/Player) colorpointer ds 4 ; pointer to color tables playerpointer ds 4 ; pointer to shape tables sizepointer ds 4 ; pointer to size tables SEG code org $F000 start SEI CLD LDX #$FF TXS LDA #$00 zero STA $00,X ;zero out the machine DEX BNE zero LDA #$32 ;set up some of the variables. STA COLUP0 ;set up sprite colour LDA #$30 ;set up the starting vertical position of sprite STA verPos STA verPos+1 LDX #$03 SetUpHorizontal LDA horpostab,X STA horPos,X DEX BPL SetUpHorizontal LDA #$1C STA COLUBK MainLoop JSR VerticalSync ; JSR VerticalBlank ; JSR MainScreen ; MainScreen does Overscan JMP MainLoop ; Repeat VerticalSync LDA #$02 ; STA WSYNC ; Finish current line STA VSYNC ; start vertical sync LDA #$03 ; STA TIM64T ; JMP WaitIntimReady ; Wait until vertical sync finished VerticalBlank STA WSYNC ; Finish current line STA VSYNC ; Stop vertical sync LDA #$02 ; STA VBLANK ; Start vertical blank LDA #$2B ; STA TIM64T ; Init timer ; Position all objects LDY #$04 PosAnother ldx horPos,Y ;+3 3 JSR PosPlayer DEY BPL PosAnother STA WSYNC ; Finish current line sta HMOVE LDX #SCREENSTART ; Init display Kernel LDA #$08 STA REFP1 ; Reflect Player 1 LDA #$02 STA ENAM0 STA ENAM1 LDA $F0 ; Init pointers (yes, a quick hack :-)) LDA #<p0data ; Init Pointers STA playerpointer ; LDA #>p0data ; Init Pointers STA playerpointer+1 ; LDA #<p0data ; Init Pointers STA playerpointer+2 ; LDA #>p0data ; Init Pointers STA playerpointer+3 ; LDA #<colordata ; Init Pointers STA colorpointer ; LDA #>colordata ; Init Pointers STA colorpointer+1 ; LDA #<colordata2 ; Init Pointers STA colorpointer+2 ; LDA #>colordata2 ; Init Pointers STA colorpointer+3 ; LDA #<sizedata ; Init Pointers STA sizepointer ; LDA #>sizedata ; Init Pointers STA sizepointer+1 ; LDA #<sizedata2 ; Init Pointers STA sizepointer+2 ; LDA #>sizedata2 ; Init Pointers STA sizepointer+3 ; WaitIntimReady LDA INTIM ; Wait until vertical blank finished BNE WaitIntimReady ; RTS SkipDraw NOP LDA VSYNC NOP LDA #$00 BEQ Continue Waste STA WSYNC ; Waste a line DEX ; BNE Waste ; if X is not zero, do more lines RTS SkipDraw2 NOP LDA VSYNC NOP LDA #$00 BEQ Continue2 MainScreen STA WSYNC ; Finish current line STA VBLANK ; Stop vertical blank nextLine TXA CLC SBC verPos ; STA WSYNC STA WSYNC ADC #$13 TAY BCC SkipDraw LDA (colorpointer),Y STA COLUP0 LDA (playerpointer),Y ; Continue STA GRP0 TXA CLC SBC verPos+1 ; ADC #$13 TAY BCC SkipDraw2 LDA (colorpointer+2),Y STA COLUP1 LDA (playerpointer+2),Y ; Continue2 STA GRP1 DEX BNE nextLine oscan2 JSR joy ;overscan. Time to read the joysticks. LDX #$1E JMP Waste joy LDY #$00 LDA SWCHA ASL BCC right ASL BCC left ASL BCC down ASL BCC up ASL BCC right2 ASL BCC left2 ASL BCC down2 ASL BCC up2 RTS right INC horPos ;set horizontal motion register to one pixel right INC horPos+3 LDA horPos+3 CMP #$40 BNE HorPosOK DEC horPos DEC horPos+3 HorPosOK rts left DEC horPos+3 DEC horPos ;set horizontal motion register to one pixel left LDA horPos CMP #$FF BNE HorPosOK2 INC horPos+3 INC horPos HorPosOK2 rts up LDA verPos ;make sure we haven't gone over the top of the screen CMP #SCREENSTART BEQ NoClimb INC verPos ;if not then increase the vertical position NoClimb RTS down LDA verPos CMP #$14 BEQ NoSink DEC verPos ;decrease the vertical position NoSink RTS right2 INC horPos+2 INC horPos+1 ;set horizontal motion register to one pixel right LDA horPos+1 CMP #$99 BNE HorPosOK3 DEC horPos+2 DEC horPos+1 HorPosOK3 rts left2 DEC horPos+1 ;set horizontal motion register to one pixel left DEC horPos+2 LDA horPos+2 CMP #$60 BNE HorPosOK4 INC horPos+1 INC horPos+2 HorPosOK4 rts up2 LDA verPos+1 ;make sure we haven't gone over the top of the screen CMP #SCREENSTART BEQ NoClimb2 INC verPos+1 ;if not then increase the vertical position NoClimb2 RTS down2 LDA verPos+1 CMP #$14 BEQ NoSink2 DEC verPos+1 ;decrease the vertical position NoSink2 RTS PosPlayer sta WSYNC ;begin scanline lda HorzTable,X ;+4 7 sta HMP0,Y ;+3 10 and #$0F ;+2 12 tax ;+2 14 P0 dex ;+2 16 bpl P0 ;when branch not taken: +2 (18 + x*5) sta RESP0,Y ;(21 + x*5) sta WSYNC rts ORG $FE00 HorzTable ;this must not cross a page boundary .byte $30,$20,$10,$00,$F0,$E0,$D0,$C0,$B0,$A0,$90 .byte $71,$61,$51,$41,$31,$21,$11,$01,$F1,$E1,$D1,$C1,$B1,$A1,$91 .byte $72,$62,$52,$42,$32,$22,$12,$02,$F2,$E2,$D2,$C2,$B2,$A2,$92 .byte $73,$63,$53,$43,$33,$23,$13,$03,$F3,$E3,$D3,$C3,$B3,$A3,$93 .byte $74,$64,$54,$44,$34,$24,$14,$04,$F4,$E4,$D4,$C4,$B4,$A4,$94 .byte $75,$65,$55,$45,$35,$25,$15,$05,$F5,$E5,$D5,$C5,$B5,$A5,$95 .byte $76,$66,$56,$46,$36,$26,$16,$06,$F6,$E6,$D6,$C6,$B6,$A6,$96 .byte $77,$67,$57,$47,$37,$27,$17,$07,$F7,$E7,$D7,$C7,$B7,$A7,$97 .byte $78,$68,$58,$48,$38,$28,$18,$08,$F8,$E8,$D8,$C8,$B8,$A8,$98 .byte $79,$69,$59,$49,$39,$29,$19,$09,$F9,$E9,$D9,$C9,$B9,$A9,$99 .byte $7A,$6A,$5A,$4A,$3A,$2A,$1A,$0A,$FA,$EA,$DA,$CA,$BA,$AA,$9A horpostab .byte $10,$90,$89,$19 p0data .byte %11101110 .byte %10001000 .byte %01001100 .byte %00100110 .byte %01111110 .byte %10111100 .byte %10111100 .byte %10111100 .byte %11111100 .byte %01111111 .byte %00111111 .byte %00011000 .byte %00111100 .byte %00111110 .byte %00110100 .byte %11111111 .byte %00111100 .byte %00101100 .byte %00101000 ORG $FF00 colordata .byte $00 .byte $00 .byte $00 .byte $00 .byte $00 .byte $88 .byte $86 .byte $84 .byte $82 .byte $82 .byte $82 .byte $3C .byte $3C .byte $3C .byte $3C .byte $13 .byte $15 .byte $15 .byte $17 colordata2 .byte $00 .byte $00 .byte $00 .byte $00 .byte $00 .byte $F8 .byte $F6 .byte $F4 .byte $F2 .byte $F2 .byte $F2 .byte $3E .byte $3E .byte $3E .byte $00 .byte $11 .byte $12 .byte $13 .byte $14 sizedata .byte $F0 .byte $F0 .byte $F0 .byte $F0 .byte $F0 .byte $F0 .byte $F0 .byte $F0 .byte $F0 .byte $F0 .byte $F0 .byte $F0 .byte $F0 .byte $F0 .byte $F0 .byte $F0 .byte $F0 .byte $F0 .byte $F0 sizedata2 .byte $00 .byte $00 .byte $00 .byte $00 .byte $00 .byte $F0 .byte $F0 .byte $F0 .byte $F0 .byte $F0 .byte $F0 .byte $30 .byte $30 .byte $30 .byte $00 .byte $10 .byte $10 .byte $10 .byte $10 org $FFFC .word start .word start
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [stella] Qb: Latest version v0., Glenn Saunders | Thread | Re: [stella] GunFight 2600: One Lim, Glenn Saunders |
Re: [stella] Qb: Latest version v0., Eckhard Stolberg | Date | Re: [stella] GunFight 2600: One Lim, Glenn Saunders |
Month |