1; Tests sprite overflow flag timing 2 3 .include "prefix.a" 4 5test_name: 6 .db "SPRITE OVERFLOW TIMING",0 7 .code 8 9begin_timing: 10 sta result 11 jsr sync_ppu_20 12 lda #$18 13 sta $2001 14 jsr dma_sprite_table 15 pha ; 14 delay for later expansion 16 pla 17 pha 18 pla 19 rts 20 21check_sprite_overflow_timing: 22 txa 23 and #$20 24 jsr error_if_ne 25 inc result 26 tya 27 and #$20 28 jsr error_if_eq 29 rts 30 31reset: 32 jsr begin_sprite_overflow_tests 33 34 lda #128 35 ldx #0 36 ldy #9 37 jsr move_sprites 38 lda #2;) Cleared too late/3)too early at end of VBL 39 jsr begin_timing 40 ldy #61 ; 31497 delay 41 lda #102 42 jsr delay_ya4 43 ldy $2002 44 ldx $2002 45 jsr check_sprite_overflow_timing 46 47 jsr clear_sprite_table 48 lda #0 49 ldx #0 50 ldy #9 51 jsr move_sprites 52 lda #0 53 ldx #3 54 ldy #9 55 jsr move_sprites 56 lda #4;) Set too early/5)too late for first scanline 57 jsr begin_timing 58 ldy #2 ; 1874 delay (1873 and 1875 work reliably, 59 lda #184 ; 1872 and 1876 fail part of the time) 60 jsr delay_ya5 61 ldx $2002 62 ldy $2002 63 jsr check_sprite_overflow_timing 64 65 lda #255 66 ldx #3 67 ldy #9 68 jsr move_sprites 69 lda #6;) Sprite horizontal positions should have no effect on timing 70 jsr begin_timing 71 ldy #2 ; 1874 delay (1873 and 1875 work reliably, 72 lda #184 ; 1872 and 1876 fail part of the time) 73 jsr delay_ya5 74 lda $2002 75 ldx $2002 76 and #$20 77 jsr error_if_ne 78 txa 79 and #$20 80 jsr error_if_eq 81 82 jsr clear_sprite_table 83 lda #0 84 ldx #220 85 ldy #9 86 jsr move_sprites 87 lda #7;) Set too early/ 8)late for last sprites on first scanline 88 jsr begin_timing 89 ldy #8 ; 1911 delay (1909 fails often and 1912 fails occasionally) 90 lda #46 91 jsr delay_ya6 92 ldx $2002 93 ldy $2002 94 jsr check_sprite_overflow_timing 95 96 jsr clear_sprite_table 97 lda #239 98 ldx #0 99 ldy #9 100 jsr move_sprites 101 lda #9;) Set too early/10)too late for last scanline 102 jsr begin_timing 103 ldy #26 ; 29040 delay (29038 and 29042 fail sometimes) 104 lda #222 105 jsr delay_ya7 106 ldx $2002 107 ldy $2002 108 jsr check_sprite_overflow_timing 109 110 jsr clear_sprite_table 111 lda #0 112 ldx #0 113 ldy #8 114 jsr move_sprites 115 lda #0 116 sta sprites + 255 117 lda #11;) Set too early/12)too late when 9th sprite # is way after 8th 118 jsr begin_timing 119 ldy #8 ; 1911 delay (1909 fails often and 1912 fails occasionally) 120 lda #46 121 jsr delay_ya6 122 ldx $2002 123 ldy $2002 124 jsr check_sprite_overflow_timing 125 126 jsr clear_sprite_table 127 lda #0 128 ldx #4 129 ldy #8 130 jsr move_sprites 131 lda #1 132 sta sprites + 0 133 lda #13;) Overflow on second scanline occurs too early/14)too late 134 jsr begin_timing 135 ldy #3 ; 1987 delay (1986 & 1988 work too) 136 lda #130 137 jsr delay_ya2 138 ldx $2002 139 ldy $2002 140 jsr check_sprite_overflow_timing 141 142 jmp tests_passed 143