lewygracz equ 0 ;zmienneliczy equ 1lewesekundy equ 2 ;dwie cyfry BCDleweminuty equ 3lewebyo equ 4lewebyox equ 5prawesekundy equ 6praweminuty equ 7prawebyo equ 8prawebyox equ 9linia equ 10wskaznik equ 11 ;uzywany w NMIwskaznik2 equ 13p1 equ 15 ;obecny stan padap1o equ 23 ;poprzedni stan padap2 equ 31p2o equ 39lewyzegarek equ 47prawyzegarek equ 48miganie equ 49comiga equ 50sekundamniej equ 51z equ 52bufor equ $400hex 4E 45 53 1A 01 00 00 00 00 00 00 00 00 00 00 00 ;iNES headerorg $c000vpoint dw $2000, $2040, $2080, $20c0, $2100, $2140, $2180, $21c0, $2200, $2240, $2280, $22c0, $2300, $2340, $2380 ;adresy w nametable co dwie linijkipoczatek db 1, 1, $59, 3, $30, 0, 2, 4, $30, 0 ;wartosci poczatkowe na zegarzepaleta hex 06 06 06 2a 06 06 06 2a 06 06 06 2a 06 06 06 2acyfry db 1,1,1, 1,0,1, 1,0,1, 1,0,1, 1,1,1 ,0 db 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1 ,0 ;cyferki 3x5 px. Dodano po zerze dla latwiejszego indeksowaniadb 1,1,1, 0,0,1, 1,1,1, 1,0,0, 1,1,1 ,0db 1,1,1, 0,0,1, 1,1,1, 0,0,1, 1,1,1 ,0db 1,0,1, 1,0,1, 1,1,1, 0,0,1, 0,0,1 ,0db 1,1,1, 1,0,0, 1,1,1, 0,0,1, 1,1,1 ,0db 1,1,1, 1,0,0, 1,1,1, 1,0,1, 1,1,1 ,0db 1,1,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1 ,0db 1,1,1, 1,0,1, 1,1,1, 1,0,1, 1,1,1 ,0db 1,1,1, 1,0,1, 1,1,1, 0,0,1, 1,1,1 ,0db 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 ,0 ;dziesiata cyfra - spacjadb 1,0,1, 1,0,1, 0,1,0, 1,0,1, 1,0,1, 0 ;jedenasta cyfra -Xcyfryx db 2, 6, 12, 16, 13, 17, 23, 27 ;Pozycje elementow wyswietlaczacyfryy db 6, 6, 6, 6, 17, 17, 17, 17dwukropkix db 10, 10, 21, 21dwukropkiy db 7, 9, 18, 20rysujcyfre: ;Argumenty: A cyfra, XY wspolrzedne pha tya lsr lsr lsr clc adc #4 sta wskaznik2+1 tya asl asl asl asl asl sta wskaznik2 txa clc adc wskaznik2 sta wskaznik2 pla asl asl asl asl tax ldy #0- lda cyfry, x inx sta (wskaznik2), y iny lda cyfry, x inx sta (wskaznik2), y iny lda cyfry, x inx sta (wskaznik2), y tya clc adc #30 tay cpy #160 bne - rtsrysujpixel: ;Argumenty: A wartosc, XY wspolrzedne. Nie psuje A. pha tya lsr lsr lsr clc adc #4 sta wskaznik2+1 tya asl asl asl asl asl sta wskaznik2 txa clc adc wskaznik2 sta wskaznik2 pla ldy #0 sta (wskaznik2), y rtswyswietlanie: ldx cyfryx ;cyfry i dwukropek lewego gracza ldy cyfryy lda comiga and #%10000000 beq + lda miganie and #2 beq + lda #10 jmp +++ lda leweminuty lsr lsr lsr lsr++ jsr rysujcyfre ldx cyfryx+1 ldy cyfryy+1 lda comiga and #%01000000 beq + lda miganie and #2 beq + lda #10 jmp +++ lda leweminuty and #15++ jsr rysujcyfre ldx cyfryx+2 ldy cyfryy+2 lda comiga and #%00100000 beq + lda miganie and #2 beq + lda #10 jmp +++ lda lewesekundy lsr lsr lsr lsr++ jsr rysujcyfre ldx cyfryx+3 ldy cyfryy+3 lda comiga and #%00010000 beq + lda miganie and #2 beq + lda #10 jmp +++ lda lewesekundy and #15++ jsr rysujcyfre ldx dwukropkix ldy dwukropkiy lda miganie and #2 lsr and lewygracz and liczy eor #1 jsr rysujpixel ldx dwukropkix+1 ldy dwukropkiy+1 jsr rysujpixel ldx cyfryx+4 ;cyfry i dwukropek prawego gracza ldy cyfryy+4 lda comiga and #%00001000 beq + lda miganie and #2 beq + lda #10 jmp +++ lda praweminuty lsr lsr lsr lsr++ jsr rysujcyfre ldx cyfryx+5 ldy cyfryy+5 lda comiga and #%00000100 beq + lda miganie and #2 beq + lda #10 jmp +++ lda praweminuty and #15++ jsr rysujcyfre ldx cyfryx+6 ldy cyfryy+6 lda comiga and #%00000010 beq + lda miganie and #2 beq + lda #10 jmp +++ lda prawesekundy lsr lsr lsr lsr++ jsr rysujcyfre ldx cyfryx+7 ldy cyfryy+7 lda comiga and #%00000001 beq + lda miganie and #2 beq + lda #10 jmp +++ lda prawesekundy and #15++ jsr rysujcyfre ldx dwukropkix+2 ldy dwukropkiy+2 lda miganie and #2 lsr and liczy eor #1 ora lewygracz jsr rysujpixel ldx dwukropkix+3 ldy dwukropkiy+3 jsr rysujpixel rtszmniejszbcd: sec sbc #1 sta z and #15 eor #15 bne + lda z and #%11111001 rts+ lda z rtsreset: lda #0 tax- sta 0, x sta $100, x sta $200, x sta $300, x sta $400, x sta $500, x sta $600, x sta $700, x ;czyszczenie pamieci inx cpx #0 bne -- lda poczatek, x ;wartosci poczatkowe sta 0, x inx cpx #10 bne - lda #0 sta $2000 sta $2001 ;wylaczenie NMI i renderingu lda $2002 lda #0 sta $2006 sta $2006 ;zapis do CHR-RAM na kartridzu ldx #0- sta $2007 inx cpx #16 bne - ;pierwszy tiles - kolor ,,0" ldx #0 lda #$ff ;drugi tiles - kolor ,,3"- sta $2007 inx cpx #16 bne - lda #$3f ;ladowanie palety sta $2006 lda #0 sta $2006 ldx #0- lda paleta, x sta $2007 inx cpx #16 bne - lda #%10000000 sta $2000 lda #%00001010 sta $2001 ;brak renderingu spriteow lda #1 ldx #3 ldy #23 jsr rysujpixel ldx #4 ldy #23 jsr rysujpixel ;stale elementy krajobrazuustawianie: lda #$3a ;nie chce mi sie zmieniac procedury wyswietlania, najpierw ustawianie byoyomi sta leweminuty sta praweminuty lda #$30 sta lewesekundy sta prawesekundy lda #128 sta comigaustawbyoyomi: lda comiga cmp #%10000000 bne + lda p1+4 ;gora beq ++ lda p1o+4 bne ++ lda leweminuty clc adc #16 sta leweminuty lda #1 sta p1o+4++ lda p1+5 ;dol beq ++ lda p1o+5 bne ++ lda leweminuty sec sbc #16 sta leweminuty lda #1 sta p1o+5++ lda p1+6 ;lewo beq ++ lda p1o+6 bne ++ lda #%00000001 sta comiga lda #1 sta p1o+6++ lda p1+7 ;prawo beq ++ lda p1o+7 bne ++ lda #%00100000 sta comiga lda #1 sta p1o+7+++ lda comiga cmp #%00100000 bne + lda p1+4 ;gora beq ++ lda p1o+4 bne ++ lda lewesekundy clc adc #16 sta lewesekundy lda #1 sta p1o+4++ lda p1+5 ;dol beq ++ lda p1o+5 bne ++ lda lewesekundy sec sbc #16 sta lewesekundy lda #1 sta p1o+5++ lda p1+6 ;lewo beq ++ lda p1o+6 bne ++ lda #%10000000 sta comiga lda #1 sta p1o+6++ lda p1+7 ;prawo beq ++ lda p1o+7 bne ++ lda #%00010000 sta comiga lda #1 sta p1o+7+++ lda comiga cmp #%00010000 bne + lda p1+4 ;gora beq ++ lda p1o+4 bne ++ inc lewesekundy lda #1 sta p1o+4++ lda p1+5 ;dol beq ++ lda p1o+5 bne ++ dec lewesekundy lda #1 sta p1o+5++ lda p1+6 ;lewo beq ++ lda p1o+6 bne ++ lda #%00100000 sta comiga lda #1 sta p1o+6++ lda p1+7 ;prawo beq ++ lda p1o+7 bne ++ lda #%00001000 sta comiga lda #1 sta p1o+7+++ lda comiga cmp #%00001000 bne + lda p1+4 ;gora beq ++ lda p1o+4 bne ++ lda praweminuty clc adc #16 sta praweminuty lda #1 sta p1o+4++ lda p1+5 ;dol beq ++ lda p1o+5 bne ++ lda praweminuty sec sbc #16 sta praweminuty lda #1 sta p1o+5++ lda p1+6 ;lewo beq ++ lda p1o+6 bne ++ lda #%00010000 sta comiga lda #1 sta p1o+6++ lda p1+7 ;prawo beq ++ lda p1o+7 bne ++ lda #%00000010 sta comiga lda #1 sta p1o+7+++ lda comiga cmp #%00000010 bne + lda p1+4 ;gora beq ++ lda p1o+4 bne ++ lda prawesekundy clc adc #16 sta prawesekundy lda #1 sta p1o+4++ lda p1+5 ;dol beq ++ lda p1o+5 bne ++ lda prawesekundy sec sbc #16 sta prawesekundy lda #1 sta p1o+5++ lda p1+6 ;lewo beq ++ lda p1o+6 bne ++ lda #%00001000 sta comiga lda #1 sta p1o+6++ lda p1+7 ;prawo beq ++ lda p1o+7 bne ++ lda #%00000001 sta comiga lda #1 sta p1o+7+++ lda comiga cmp #%00000001 bne + lda p1+4 ;gora beq ++ lda p1o+4 bne ++ inc prawesekundy lda #1 sta p1o+4++ lda p1+5 ;dol beq ++ lda p1o+5 bne ++ dec prawesekundy lda #1 sta p1o+5++ lda p1+6 ;lewo beq ++ lda p1o+6 bne ++ lda #%00000010 sta comiga lda #1 sta p1o+6++ lda p1+7 ;prawo beq ++ lda p1o+7 bne ++ lda #%10000000 sta comiga lda #1 sta p1o+7+++ lda p1+3 ;start beq + lda p1o+3 bne + lda leweminuty lsr lsr lsr lsr sta lewebyox lda lewesekundy sta lewebyo lda praweminuty lsr lsr lsr lsr sta prawebyox lda prawesekundy sta prawebyo lda #$10 sta leweminuty sta praweminuty lda #0 sta lewesekundy sta prawesekundy lda #1 sta p1o+3 jmp ustawczas+ jsr wyswietlanie jmp ustawbyoyomiustawczas: lda comiga cmp #%10000000 bne + lda p1+4 ;gora beq ++ lda p1o+4 bne ++ lda leweminuty clc adc #16 sta leweminuty lda #1 sta p1o+4++ lda p1+5 ;dol beq ++ lda p1o+5 bne ++ lda leweminuty sec sbc #16 sta leweminuty lda #1 sta p1o+5+++ lda comiga cmp #%01000000 bne + lda p1+4 ;gora beq ++ lda p1o+4 bne ++ inc leweminuty lda #1 sta p1o+4++ lda p1+5 ;dol beq ++ lda p1o+5 bne ++ dec leweminuty lda #1 sta p1o+5+++ lda comiga cmp #%00100000 bne + lda p1+4 ;gora beq ++ lda p1o+4 bne ++ lda lewesekundy clc adc #16 sta lewesekundy lda #1 sta p1o+4++ lda p1+5 ;dol beq ++ lda p1o+5 bne ++ lda lewesekundy sec sbc #16 sta lewesekundy lda #1 sta p1o+5+++ lda comiga cmp #%00010000 bne + lda p1+4 ;gora beq ++ lda p1o+4 bne ++ inc lewesekundy lda #1 sta p1o+4++ lda p1+5 ;dol beq ++ lda p1o+5 bne ++ dec lewesekundy lda #1 sta p1o+5+++ lda comiga cmp #%00001000 bne + lda p1+4 ;gora beq ++ lda p1o+4 bne ++ lda praweminuty clc adc #16 sta praweminuty lda #1 sta p1o+4++ lda p1+5 ;dol beq ++ lda p1o+5 bne ++ lda praweminuty sec sbc #16 sta praweminuty lda #1 sta p1o+5+++ lda comiga cmp #%00000100 bne + lda p1+4 ;gora beq ++ lda p1o+4 bne ++ inc praweminuty lda #1 sta p1o+4++ lda p1+5 ;dol beq ++ lda p1o+5 bne ++ dec praweminuty lda #1 sta p1o+5+++ lda comiga cmp #%00000010 bne + lda p1+4 ;gora beq ++ lda p1o+4 bne ++ lda prawesekundy clc adc #16 sta prawesekundy lda #1 sta p1o+4++ lda p1+5 ;dol beq ++ lda p1o+5 bne ++ lda prawesekundy sec sbc #16 sta prawesekundy lda #1 sta p1o+5+++ lda comiga cmp #%00000001 bne + lda p1+4 ;gora beq ++ lda p1o+4 bne ++ inc prawesekundy lda #1 sta p1o+4++ lda p1+5 ;dol beq ++ lda p1o+5 bne ++ dec prawesekundy lda #1 sta p1o+5+++ lda p1+6 ;lewo beq + lda p1o+6 bne + lda comiga asl bne ++ lda #1++ sta comiga lda #1 sta p1o+6+ lda p1+7 ;prawo beq + lda p1o+7 bne + lda comiga lsr bne ++ lda #128++ sta comiga lda #1 sta p1o+7+ lda p1+3 ;start beq + lda p1o+3 bne + lda #1 sta p1o+3 lda #0 sta comiga jmp odliczanie+ jsr wyswietlanie jmp ustawczasodliczanie: lda leweminuty ;koniec czasu podstawowego and #15 cmp #10 beq + lda leweminuty bne + lda lewesekundy bne + lda lewebyox bne ++ jmp lewykoniec++ asl asl asl asl ora #10 sta leweminuty lda lewebyo sta lewesekundy+ lda praweminuty ;koniec czasu podstawowego and #15 cmp #10 beq + lda praweminuty bne + lda prawesekundy bne + lda prawebyox bne ++ jmp prawykoniec++ asl asl asl asl ora #10 sta praweminuty lda prawebyo sta prawesekundy+ lda sekundamniej ;Odejmowanie jednej sekundy beq + lda liczy beq + lda lewygracz beq ++ lda lewesekundy jsr zmniejszbcd sta lewesekundy lda #128 bit lewesekundy beq +++ lda leweminuty ;sprawdzanie byoyomi and #15 cmp #10 beq +++ lda #$59 sta lewesekundy lda leweminuty jsr zmniejszbcd sta leweminuty+++ lda #0 sta sekundamniej jmp +++ lda prawesekundy jsr zmniejszbcd sta prawesekundy lda #128 bit prawesekundy beq +++ lda praweminuty and #15 cmp #10 beq +++ lda #$59 sta prawesekundy lda praweminuty jsr zmniejszbcd sta praweminuty+++ lda #0 sta sekundamniej+ lda leweminuty ;koniec czasu podstawowego and #15 cmp #10 beq + lda leweminuty bne + lda lewesekundy bne + lda lewebyox bne ++ jmp lewykoniec++ asl asl asl asl ora #10 sta leweminuty lda lewebyo sta lewesekundy+ lda praweminuty ;koniec czasu podstawowego and #15 cmp #10 beq + lda praweminuty bne + lda prawesekundy bne + lda prawebyox bne ++ jmp prawykoniec++ asl asl asl asl ora #10 sta praweminuty lda prawebyo sta prawesekundy+ lda leweminuty ;koniec czasu dodatkowego and #15 cmp #10 bne + lda lewesekundy bne + dec lewebyox bne ++ jmp lewykoniec++ lda leweminuty sec sbc #16 sta leweminuty lda lewebyo sta lewesekundy+ lda praweminuty ;koniec czasu dodatkowego and #15 cmp #10 bne + lda prawesekundy bne + dec prawebyox bne ++ jmp prawykoniec++ lda praweminuty sec sbc #16 sta praweminuty lda prawebyo sta prawesekundy+ lda p1+3 ;pauzowanie startem beq + lda p1o+3 bne + lda liczy eor #1 sta liczy lda #1 sta p1o+3+ lda p1+4 ;OR wszystkich strzalek, lewy wciska. Pominieto jednoczesne wciskanie przez obu graczy i uszkodzenie pada ora p1+5 ora p1+6 ora p1+7 beq + lda #0 sta lewygracz lda praweminuty and #15 cmp #10 bne + lda prawebyo sta prawesekundy+ lda p1 ;OR A i B, prawy wciska. Pominieto jednoczesne wciskanie przez obu graczy i uszkodzenie pada ora p1+1 beq + lda #1 sta lewygracz lda leweminuty and #15 cmp #10 bne + lda lewebyo sta lewesekundy+ jsr wyswietlanie jmp odliczanielewykoniec: lda #11 ldx #22 ldy #6 jsr rysujcyfre jmp koniecprawykoniec: lda #11 ldx #6 ldy #17 jsr rysujcyfrekoniec: jsr wyswietlanie jmp koniecnmi: php ;zachowanie flag i rejestrow pha tya pha txa pha lda #0 sta $2000 ldx #0- lda p1, x sta p1o, x lda p2, x sta p2o, x inx cpx #8 bne - lda #1 ;pady sta $4016 lda #0 sta $4016 tax- lda $4016 and #1 sta p1, x lda $4017 and #1 sta p2, x inx cpx #8 bne - inc miganie lda liczy beq ++ lda lewygracz beq + dec lewyzegarek jmp +++ dec prawyzegarek++ lda lewyzegarek cmp #255 bne + lda #1 sta sekundamniej lda #59 sta lewyzegarek+ lda prawyzegarek cmp #255 bne + lda #1 sta sekundamniej lda #59 sta prawyzegarek+ lda $2002 ldx linia inx lda vpoint, x sta $2006 dex lda vpoint, x sta $2006 txa lsr lsr lsr clc adc #4 sta wskaznik+1 ;obliczane przez kompilator txa asl asl asl asl asl sta wskaznik ldy #0- lda (wskaznik), y sta $2007 iny cpy #64 bne - inc linia inc linia lda linia cmp #30 bne + lda #0 sta linia+ lda #0 sta $2005 ;scrolling na 0 sta $2005 lda #%10000000 sta $2000 pla ;przywrocenie flag i rejestrow tax pla tay pla plpirq: rtiorg $fffa dw nmi dw reset dw irq