Subject: [stella] hitting resp0 in the middle of asymmetrical playfield? From: Adam Wozniak <adam@xxxxxxxxxxxxxxxx> Date: Sat, 21 May 2005 21:33:39 -0400 |
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Is it possible to hit RESP0 in the middle of a line while drawing an asymmetric playfield? I don't seem to have the right magic formula (see attached asm). - -- adam@xxxxxxxxxxxxxxxx http://cuddlepuddle.org/~adam KG6GZR http://cuddlepuddle.org/~adam/resume.html -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQFCj+DGyvXf5Z0z5zERAorHAKCmC9826jRH1dJGz7fp8zHWYLP2LwCgtp0P hn4eB1wFF6AtYEDHU10/ETI= =jP+O -----END PGP SIGNATURE----- Archives (includes files) at http://www.biglist.com/lists/stella/archives/ Unsub & more at http://stella.biglist.com ; soko.asm ; Copyright 2005 Adam Wozniak ; All Rights Reserved processor 6502 include vcs.h org $F000 BKvar = $80 PFvar = $81 P0var = $82 P1var = $83 ; note those first four are only used to initialize the level ; we reuse them for various temporary variables TMPvar = $80 T2var = $81 T3var = $82 T4var = $83 ; precomputed pf values, 10 row of 6 bytes == 72 bytes MAPvar = $84 ; plus 60 bytes ROWvar = $C0 ; plus 12 bytes NUSvar = $CC ; plus 30 bytes PLCvar = $EA NPLvar = $EB Start SEI CLD LDX #$FF TXS GameInit ;LDA #2 ;STA ENAM0 ;STA ENAM1 ;STA ENABL LDA #0 STA NUSvar STA NUSvar+1 LDA #1 STA NUSvar+2 STA NUSvar+3 LDA #2 STA NUSvar+4 STA NUSvar+5 LDA #3 STA NUSvar+6 STA NUSvar+7 LDA #4 STA NUSvar+8 STA NUSvar+9 LDA #6 STA NUSvar+10 STA NUSvar+11 LDA #7 STA NUSvar+12 LDA #0 STA NUSvar+13 LDA #0 STA NUSvar+14 LDA #7 STA NUSvar+15 STA NUSvar+16 STA NUSvar+17 LDA #3 STA NUSvar+18 STA NUSvar+19 LevelInit LDX #$40 Copy LDA Level1,X STA BKvar,X DEX BPL Copy LDA PFvar ; foreground color STA COLUPF LDA BKvar ; background color STA COLUBK LDA P0var ; P0 color STA COLUP0 LDA P1var ; P1 color STA COLUP1 MainLoop VerticalSync LDA #2 STA VSYNC STA WSYNC STA WSYNC STA WSYNC VerticalBlank LDA #43 STA TIM64T LDA #0 STA VSYNC ; game logic goes here ; player 0 fills 3 squares, and player 1 fills the next 3 ; 0123456789 ; 11122234 ; note no boxes are ever drawn at the extreme ends (0 or 9) ; align P0 and P1 positions with current phase phase1align STA WSYNC NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP STA RESP0 NOP NOP NOP NOP NOP NOP STA RESP1 STA RESM0 STA RESM1 STA HMCLR LDA #$40 STA HMP0 LDA #$10 STA HMP1 STA WSYNC STA HMOVE postalign ; ok, we're aligned now ; reset PLCvar to point to the beginning of the map LDA #MAPvar STA PLCvar ; reset PLCvar to point to the beginning of the map LDA #MAPvar STA PLCvar ; game logic ends here VerticalBlankEnd LDA INTIM BNE VerticalBlankEnd LDA #0 STA VBLANK DrawScreen LDA #0 TAY JSR DrawRow INY INY JSR DrawRow INY INY JSR DrawRow INY INY JSR DrawRow INY INY JSR DrawRow INY INY JSR DrawRow INY INY JSR DrawRow INY INY JSR DrawRow INY INY JSR DrawRow INY INY JSR DrawRow OverScan LDA #2 STA VBLANK LDX #30 OverScanWait STA WSYNC DEX BNE OverScanWait JMP MainLoop ; Continue forever. DrawRow LDX PLCvar TYA PHA LDA #0 TAY JSR reshuffle INY INX JSR reshuffle INY INX JSR reshuffle INY INX JSR reshuffle INY INX JSR reshuffle INY INX JSR reshuffle PLA TAY LDX PLCvar ; jump to the correct block LDA NUSvar,Y CMP #7 BEQ eep0 LDA NUSvar+1,Y CMP #7 BEQ eep1 JMP blockXX eep1 JMP blockXO eep0 LDA NUSvar+1,Y CMP #7 BEQ eep2 JMP blockOX eep2 JMP blockOO MAC OneScanline LDA {2} ;- 2 cycles STA GRP0 ;- 3 cycles LDA NUSvar,Y ;- 4 cycles STA NUSIZ0 ;- 3 cycles LDA ROWvar ;- 4 cycles STA PF0 ;- 3 cycles must be before 22 LDA ROWvar+1+{1} ;- 4 cycles STA PF1 ;- 3 cycles must be before 28 LDA ROWvar+2+{1} ;- 4 cycles STA PF2 ;- 3 cycles must be before 38 LDA {3} ;- 2 cycles STA GRP1 ;- 3 cycles LDA NUSvar+1,Y ;- 4 cycles STA NUSIZ1 ;- 3 cycles LDA ROWvar+3+{1} ;- 4 cycles STA PF0 ;- 3 cycles must be before 49 LDA ROWvar+4+{1} ;- 4 cycles STA PF1 ;- 3 cycles must be before 54 LDA ROWvar+5+{1} ;- 4 cycles STA PF2 ;- 3 cycles must be before 65 STA WSYNC ENDM blockXX STA WSYNC ; OneScanLine 0,#$0,#$0 OneScanLine 0,#$0,#$0 OneScanLine 6,#$0,#$0 ; ........ OneScanLine 0,#$0,#$0 ; ........ OneScanLine 6,#$3C,#$3C ; ..XXXX.. OneScanLine 0,#$66,#$66 ; .XX..XX. OneScanLine 6,#$C7,#$C7 ; XX...XXX OneScanLine 0,#$CF,#$CF ; XX..XXXX OneScanLine 6,#$FB,#$FB ; XXXXX.XX OneScanLine 0,#$76,#$76 ; .XXX.XX. OneScanLine 6,#$3C,#$3C ; ..XXXX.. OneScanLine 0,#$0,#$0 ; ........ OneScanLine 6,#$0,#$0 ; ........ OneScanLine 0,#$0,#$0 ; OneScanLine 0,#$0,#$0 ; OneScanLine 0,#$0,#$0 JMP blockout blockXO STA WSYNC ; OneScanLine 0,#$0,#$0 OneScanLine 0,#$0,#$0 OneScanLine 6,#$0,#$0 ; ........ OneScanLine 0,#$0,#$0 ; ........ OneScanLine 6,#$3C,#$0 ; ..XXXX.. OneScanLine 0,#$66,#$0 ; .XX..XX. OneScanLine 6,#$C7,#$0 ; XX...XXX OneScanLine 0,#$CF,#$0 ; XX..XXXX OneScanLine 6,#$FB,#$0 ; XXXXX.XX OneScanLine 0,#$76,#$0 ; .XXX.XX. OneScanLine 6,#$3C,#$0 ; ..XXXX.. OneScanLine 0,#$0,#$0 ; ........ OneScanLine 6,#$0,#$0 ; ........ OneScanLine 0,#$0,#$0 ; OneScanLine 0,#$0,#$0 ; OneScanLine 0,#$0,#$0 JMP blockout blockOX STA WSYNC ; OneScanLine 0,#$0,#$0 OneScanLine 0,#$0,#$0 OneScanLine 6,#$0,#$0 ; ........ OneScanLine 0,#$0,#$0 ; ........ OneScanLine 6,#$0,#$3C ; ..XXXX.. OneScanLine 0,#$0,#$66 ; .XX..XX. OneScanLine 6,#$0,#$C7 ; XX...XXX OneScanLine 0,#$0,#$CF ; XX..XXXX OneScanLine 6,#$0,#$FB ; XXXXX.XX OneScanLine 0,#$0,#$76 ; .XXX.XX. OneScanLine 6,#$0,#$3C ; ..XXXX.. OneScanLine 0,#$0,#$0 ; ........ OneScanLine 6,#$0,#$0 ; ........ OneScanLine 0,#$0,#$0 ; OneScanLine 0,#$0,#$0 ; OneScanLine 0,#$0,#$0 JMP blockout blockOO STA WSYNC ; OneScanLine 0,#$0,#$0 OneScanLine 0,#$0,#$0 OneScanLine 6,#$0,#$0 ; ........ OneScanLine 0,#$0,#$0 ; ........ OneScanLine 6,#$0,#$0 ; ..XXXX.. OneScanLine 0,#$0,#$0 ; .XX..XX. OneScanLine 6,#$0,#$0 ; XX...XXX OneScanLine 0,#$0,#$0 ; XX..XXXX OneScanLine 6,#$0,#$0 ; XXXXX.XX OneScanLine 0,#$0,#$0 ; .XXX.XX. OneScanLine 6,#$0,#$0 ; ..XXXX.. OneScanLine 0,#$0,#$0 ; ........ OneScanLine 6,#$0,#$0 ; ........ OneScanLine 0,#$0,#$0 ; OneScanLine 0,#$0,#$0 ; OneScanLine 0,#$0,#$0 JMP blockout blockout LDA #0 STA PF0 STA PF1 STA PF2 LDA #$6 CLC ADC PLCvar STA PLCvar RTS reshuffle subroutine LDA #0 STA ROWvar,Y STA ROWvar+6,Y LDA #$80 AND $0,X BEQ .l1 LDA #$F0 STA ROWvar,Y STA ROWvar+6,Y JMP .l2 .l1 LDA #$10 AND $0,X BEQ .l2 LDA #$60 STA ROWvar+6,Y .l2 LDA #$08 AND $0,X BEQ .l3 LDA ROWvar,Y ORA #$0F STA ROWvar,Y LDA ROWvar+6,Y ORA #$0F STA ROWvar+6,Y JMP .l4 .l3 LDA #$01 AND $0,X BEQ .l4 LDA ROWvar+6,Y ORA #$06 STA ROWvar+6,Y .l4 RTS org $FF80 Level1 .byte $0, $C8, $4F, $8F .byte $00, $00, $88, $80, $80, $00 .byte $80, $88, $08, $00, $88, $00 .byte $80, $00, $20, $00, $08, $00 .byte $80, $00, $33, $30, $08, $00 .byte $80, $00, $01, $10, $08, $08 .byte $80, $80, $03, $30, $00, $08 .byte $00, $88, $33, $30, $00, $08 .byte $00, $08, $20, $00, $88, $08 .byte $00, $08, $40, $00, $80, $00 .byte $00, $08, $88, $80, $80, $00 org $FFF0 graphGoal graphBox graphMe org $FFFC .word Start .word Start
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [stella] sample of Atari sounds, Adam Wozniak | Thread | Re: [stella] hitting resp0 in the m, Thomas Jentzsch |
Re: [stella] sample of Atari sounds, Adam Wozniak | Date | Re: [stella] VCS C programming, David Galloway |
Month |