Odpověď na názor

Odpovídáte na názor k článku Kouzlo minimalismu potřetí: vývoj her a dem pro osmibitová Atari. Názory mohou přidávat pouze registrovaní uživatelé. Nově přidané názory se na webu objeví až po schválení redakcí.

  • 7. 3. 2026 10:14

    Pivson

    Pro zajímavost s tím freezerem. Tyhle starosti ataráci nemaj, ale na druhou stranu díky tomu o moc přichází (realtime mrzaření čítačů v VIC dokáže hodně :) Většina efektů potřebuje přesný sync s paprskem - na cykl přesně. A interupt se zpozdí o 0 - 10 cyklů. Klasicke "cmp" s video lajnou to sníží na 0-5, ale pořád k prdu (CMP+BNE). Pak se to dá odčasovat po řádcích - co cykl, to řádek. Ale těch cyklů. Na to není výkon :)

    S timerama to stači udělat jednou a už jedou nafurt správně :) A sesyncrhonizovat se lze pak udělat už poměrně snadno self-mod kódem - pro $05e7 jakozto hodnotu timeru:

    nmi_code_tb_begin=<$05e7-26-9+1   ; 9 combinations
    
    ldx     CIA2_TIMER_LO
    lda     nmi_code_tb_offs,x
    sta     *+3
    bne     *
    
    .byte   $ea,$25,$a,$10,$05,$a9,$a9,$a9,$ad,$c5,$ea
    
    ... code

    Tabulka je pak nekde mimo

                                ; page aligned
                                *=  (*+$ff) & $ff00
    
                                ; NMI stabilizationt table
    nmi_code_tb_offs            .rep nmi_code_tb_begin
                                .byte   $0a
                                .endrep
    
                                .byte   $0a   ; wait 2 cycles
                                .byte   $09   ; wait 3 cycles
                                .byte   $08   ; wait 4 cycles
                                .byte   $07   ; wait 5 cycles
                                .byte   $06   ; wait 6 cycles
                                .byte   $05   ; wait 7 cycles
                                .byte   $01   ; wait 8 cycles
                                .byte   $04   ; wait 9 cycles
                                .byte   $00   ; wait 10 cycles
    
                                .rep    256-nmi_code_tb_begin-9
                                .byte   $0a
                                .endrep

    Pokud se CIA zpozdí, v cyklech to jde krásně vyčíst. A tenhle úsek za BNE poběží 2 až 10 cyklů... Podle toho kam ho CIA hodí (nejdelší flow je NOP/AND $00/BPL/NOP).

    A přesně tohle freezer moc nedává a když jedne použíje i 2 časovače na NMI jako "další" IRQ (mnoho cyklů se ušetří...) tak freezer hitne další NMI ještě dřív než "vypne" to přechozí. A obnovit tohle je prakticky nemožný.

    P.

    7. 3. 2026, 10:15 editováno autorem komentáře