Tak tenhle díl se povedl i na "místní poměry" (myslím tohoto seriálu) opravdu skvěle! Fakt díky za to - je to krásně čtivé a myslím, že každému i bez předchozí znalostí Atari to ukázalo/naznačilo, jaké různé triky se s tím dají provádět a jaké možnosti ten stroj pak dává. Když si vzpomenu, jak jsem pak trpěl přechodem na PC s 16 barvami...
Jo, a speciální dík za tu část se sprity, ta je hodně pěkná a málokde se uvádí!
Teen screenshot ze hry je také pěkně vybraný, jak ukazuje jak různé grafické módy, tak DLI.
Pár technických detailů k článku:
* Nastavení vektoru DLI není všechno, jak tvrdí poznámka, ještě je potřeba povolit DLI v NMIEN. Ve zdrojáku to je, jen z textu to asi vypadlo při úpravách.
* Atari mělo skutečně 256 barev, však obr. 2 je (myslím) ukazuje. Jenže je umělo zobrazit jen v GTIA módech, což znamenalo ty divné pixely 4x1. Proto se často používalo jen 128, aby mohl člověk zároveň s barvami používat všechny gr. módy.
* četl jsem z několika zdrojů o triku, jak pomocí jednoho bugu v GTIA docílit iluze pixelů 2x1 v GTIA módech, ale nikdy jsem si s tím nehrál opravdu a na skutečném HW už vůbec ne. Máte někdo vlastní zkušenost?
* ještě bych zdůraznil víc to, co je v článku ukázané, tj. že WSYNC posouvá vždy jen o jeden TV řádek, tj. i v textových módech. Proto se mohou barvičky (i znakové sady!!) měnit na každém TV řádku, i když ANTIC umí zavolat DLI jen s "jemností" na jednu svou instrukci.
Tak to jsem zvědavý. Vím, že někdo na ně nedá dopustit, ale já nevím... Přijde mi to jako taková "věc pro upoutání pozornosti v demu", jinak ty pixely 4x1 a rozlišení grafiky tím pádem 80x192(!!!) použit moc nejdou... Snad jediný aspoň trochu zajímavý příklad, který jsem viděl, bylo použít světelné pero místo fixy v Alfigrafu jako nejpomalejší scanner na světě a na obrazovce pak využití 16 odstínů šedé v gr. 9. (Do 50 odstínů tehdy ještě zbývala hóóódně dlouhá cesta :) ).
Takže jsem opravdu bez ironie zvědavý, jestli to bylo použitelné na něco zajímavého.
Jako je to špatné rozlišení, ale například toto (https://www.youtube.com/watch?v=GlR85G1OgCA novinka) vypadá dobře. Chce si to představit na TV, kde je to rozmazané.
Dobře, rukavice zvednuta :D Také jsem si dodnes myslel, že to ve strojáku bude nějaká divočina. Tak ne, je to jedno STA - nikdy nepřestanu milovat Atari :) Tak za odměnu za skvělé vyhecování posílám paletu všech 256 barev, což je zároveň odpověď na jeden z předchozích komentářů.
A také, myslím, stojí za zmínku některé triky v kódu, např. opět časování za běhu paprsku řádkem, kombinované PMG na překrytí kritických míst. A PMG v režimu bez grafiky, takže neexistují žádná data pro PMG, co by zabírala paměť. Zvědavci si mohou zkusit přenastavit barvy, pozice i masky těch hráčů, aby viděli na obrazovce, jak to funguje. Vše jsem okomentoval.
; 256 palette show
; Program starts ANTIC MODE F in GTIA gr. 9 mode,
; draws 16 columns of all 16 shades and then
; it starts DLI routine to set the base color to each of 16, every 4 scanlines
; Look at label 'start' for the program init routine.
; DLI routine does 2 steps for each line:
; 1. sets the main color of ANTIC MODE F GTIA gr. 9 to each value,
; every 4 scanlines (making nice squares 4x4 as palette fields)
; 2. reverts the line color back to black as fast as possible
; on the right of the palette picture
dli: 0600: 48 PHA
0601: 8A TXA
0602: 48 PHA
0603: A9 00 LDA #$00 ; #basecolor
pltrow: 0605: A2 00 ┌> LDX #$00 ; #basecolor2 ; back to black
0607: 38 │ SEC
0608: E9 10 │ SBC #$10
│
060A: 8D 0A D4 │ STA WSYNC
060D: 8D 1A D0 │ STA COLBK
0610: 20 40 06 │ JSR $0640 ; waitcols
0613: 8E 1A D0 │ STX COLBK
│
0616: 8D 0A D4 │ STA WSYNC
0619: 8D 1A D0 │ STA COLBK
061C: 20 40 06 │ JSR $0640 ; waitcols
061F: 8E 1A D0 │ STX COLBK
│
0622: 8D 0A D4 │ STA WSYNC
0625: 8D 1A D0 │ STA COLBK
0628: 20 40 06 │ JSR $0640 ; waitcols
062B: 8E 1A D0 │ STX COLBK
│
062E: 8D 0A D4 │ STA WSYNC
0631: 8D 1A D0 │ STA COLBK
0634: 20 40 06 │ JSR $0640 ; waitcols
0637: 8E 1A D0 │ STX COLBK
│
063A: D0 CB └─ BNE $0607 ; pltrow
063C: 68 PLA
063D: AA TAX
063E: 68 PLA
063F: 40 RTI
waitcols: 0640: EA NOP
0641: EA NOP
0642: EA NOP
0643: EA NOP
0644: EA NOP
0645: EA NOP
0646: EA NOP
0647: EA NOP
0648: 60 RTS
start: 0650: A9 00 LDA #$00 ; ; set DL of ANTIC MODE F
0652: 8D 30 02 STA SDLSTL
0655: A9 07 LDA #$07
0657: 8D 31 02 STA SDLSTH
065A: AD 6F 02 LDA GPRIOR ; ; start GTIA MODE for gr. 9
065D: 29 3F AND #$3F
065F: 09 40 ORA #$40
0661: 8D 6F 02 STA GPRIOR
0664: A9 78 LDA #$78
0666: 8D 75 06 STA $0675 ;cpaltl ; self-modifing code is always useful :)
0669: A9 81 LDA #$81
066B: 8D 76 06 STA $0676 ;cpalth
066E: A0 3F LDY #$3F
nxtrow: 0670: A9 10 ┌>LDA #$10
0672: A2 07 │ LDX #$07
nxtcol: 0674: 9D 50 8B │ ┌>STA $8B50,X ; <arg>=cpalt
0677: 18 │ │ CLC
0678: 69 22 │ │ ADC #$22
067A: CA │ │ DEX
067B: D0 F7 │ └─BNE $0674 ;nxtcol
067D: AD 75 06 │ LDA $0675 ;cpaltl
0680: 18 │ CLC
0681: 69 28 │ ADC #$28 ; ; #$28 = bytes per line
0683: 8D 75 06 │ STA $0675 ;cpaltl
0686: 90 03 │ BCC $068B
0688: EE 76 06 │ INC $0676 ;cpalth
068B: 88 │ DEY
068C: D0 E2 └─BNE $0670 ;nxtrow
068E: A9 00 LDA #$00 ; ; set DLI
0690: 8D 00 02 STA VDSLST
0693: A9 06 LDA #$06
0695: 8D 01 02 STA VDSLST+1
0698: A9 C0 LDA #$C0
069A: 8D 0E D4 STA NMIEN
; ; hide the non-perfect ANTIC timing by a PMG player on each palette side
069D: A9 14 LDA #$14
069F: 8D 00 D0 STA HPOSP0
06A2: A9 50 LDA #$50
06A4: 8D 01 D0 STA HPOSP1
06A7: A9 FF LDA #$FF
06A9: 8D 0D D0 STA GRAFP0
06AC: 8D 0E D0 STA GRAFP1
06AF: A9 03 LDA #$03
06B1: 8D 08 D0 STA SIZEP0
06B4: 8D 09 D0 STA SIZEP1
06B7: A9 00 LDA #$00
06B9: 8D C0 02 STA PCOLR0
06BC: 8D C1 02 STA PCOLR1
06BF: F0 FE BEQ $06BF ; ; EOGW - End of Good Work
; DLIST
0700: 3x 8 BLANK
0703: DLI LMS 8150 MODE F
0706: 93x MODE F
0763: LMS 9000 MODE F
0766: 97x MODE F
07C7: JVB 07008. 5. 2026, 01:03 editováno autorem komentáře
Moje makra ve vim :D
Pardon za zklamání, nemám kouzelný assembler-edtor, který by to uměl živě. Jen jsem chtěl ukázat, jak si píšu programy v assembleru já, abych se v nich vyznal. Samozřejmě na papíře - tohle jsem pak přepsal pro vás :)
A, mimochodem, Murphy nespí - sem jsem vložil omylem minulou verzi s jedním malým bugem v kometářích a bez dalších vylepšeníček. Už to nešlo opravit, ale na odkaze je správná verze.