726

(6,151 odpowiedzi, napisanych Kolekcjonowanie)

Ale skąd ta cena 6.4K ? Przecież jest napisane na pudełku 64K.

727

(7 odpowiedzi, napisanych Software, Gry - 8bit)

@toscanii: http://www.atari.org.pl/tape_preservation_project
Poza tym na głównej stronie portalu AtariArea znajduje się sekcja "Artykuły" i "FAQ". Możesz tam znaleźć różne rzeczy.

728

(31 odpowiedzi, napisanych Software, Gry - 8bit)

Ja oprogramowaniem mógłbym się zająć, ale nie w najbliższym czasie, bo mam kilka projektów do zrobienia.

Powinno być to coś w tej podobie:
1. 1bpp:

tile1bpp:
        lda #%11111111  ;kolor przezroczysty (%1 powielony na wszystkie piksele)

        eor (zp1)       ;z piksela przezroczystego robimy %0

        nop             ;i liczymy maske

        pha             ;maskujemy piksele kloca
        and (zp1)
        sta tmp
        pla             ;maskujemy piksele ekranu
        eor #%11111111
        and (zp2)
        ora tmp         ;i scalamy
        sta (zp2)

2. 2bpp

tile2bpp:
        lda #%10101010  ;kolor przezroczysty (%10 powielony na wszystkie piksele)

        eor (zp1)       ;z piksela przezroczystego robimy %00

        pha             ;i liczymy maske
        and #%01010101
        sta tmp
        pla
        and #%10101010
        lsr
        ora tmp
        sta tmp
        asl
        ora tmp

        pha             ;maskujemy piksele kloca
        and (zp1)
        sta tmp
        pla             ;maskujemy piksele ekranu
        eor #%11111111
        and (zp2)
        ora tmp         ;i scalamy
        sta (zp2)

3. 4bpp

tile4bpp:
        lda #%00010001  ;kolor przezroczysty (%0001 powielony na wszystkie piksele)

        eor (zp1)       ;z piksela przezroczystego robimy %0000

        pha             ;i liczymy maske
        and #%00001111
        seq
        ora #%00001111
        sta tmp
        pla
        and #%11110000
        seq
        ora #%11110000
        ora tmp

        pha             ;maskujemy piksele kloca
        and (zp1)
        sta tmp
        pla             ;maskujemy piksele ekranu
        eor #%11111111
        and (zp2)
        ora tmp         ;i scalamy
        sta (zp2)

Począwszy od "maskujemy piksele kloca" kod jest identyczny. Podobny też jest kod aż do "i liczymy maske". Różny jest kod do liczenia maski stąd najfajniej mieć tę maskę stablicowaną :)

Edit: Oczywiście indeks koloru przezroczystego może być dowolny.

Edit 2: No i zp1 i zp2 możesz używać z dowolnym x czy y bo są nie używane (dlatego nie pisałem pełnego trybu adresowego).

730

(31 odpowiedzi, napisanych Software, Gry - 8bit)

W FPGA jest tutaj razem z wewnętrznym ROM-em: https://github.com/trcwm/Speech256

731

(31 odpowiedzi, napisanych Software, Gry - 8bit)

Pomysł jest bardzo fajny.  A do sterowania w zasadzie wystarczą trzy rejestry:

$D500 WR: DATA
b7..b0 - A8..A1

$D501 WR: CTRL
b7 - /RESET
b6 - /SBYRESET
b5 - ROMDISABLE (opcjonalnie)
b4..b0 - n/c

$D501 RD: STAT
b7 - /LRQ
b6 - SBY
b5..b0 - n/c

kiedy ROMDISABLE=0 i SE=1 (/ALD jest spięty jakoś z R/W z Atari).

Jeśli lista alofonów jest podobna do SC-01A (http://www.atari.org.pl/forum/viewtopic.php?id=11736) i do tej używanej przez S.A.M. to może nawet udałoby się to spiąć z istniejącym oprogramowaniem?

Pytanie: co jest w zewnętrznym ROM-ie? Czy po prostu blokowany jest wewnętrzny i SP0256 wykonuje wtedy program z zewnętrznego? Są te ROM-y SPR128 gdzieś dostępne (chip i zawartość)? Jeśli jest gdzieś zawartość to może wsadzić do urządzenia jakiś RAM zapisywany z poziomu Atari i udostępnić jeszcze ROMDISABLE w rejestrze sterującym żeby można było użyć innych wsadów (albo zrobić sobie własne)?

Na wiki do Amstrada trochę o tym chipie jest: http://www.cpcwiki.eu/index.php/SP0256_Allophones

Tak. To wymaga malowania dwóch sprajtów na sobie.
Nie musisz mieć tablic - możesz maskować programowo :P.

Jeśli byś się za te sprajty brał to mam następującą sugestię:

Zazwyczaj jeden z pikseli (zazwyczaj 0) traktowany jest jako kolor przezroczysty - reszta to piksele definicji sprajta. W trybach 1bpp taki sprajt jest szybko nakładany przez OR, w innych trzeba zamaskować. No ale mając np. tryb 4-kolorowy to para %00 jest zazwyczaj kolorem ramki, która często jest kolorem czarnym. Skutek jest taki, że zazwyczaj taka gra ma tło czarne. Gdybyś umożliwił przy nakładaniu sprajta wybór który kolor z definicji jest traktowany jako przezroczysty, to można byłoby wykorzystać kolor %00 jako zwykły piksel sprajta - dalej jeden sprajt miałby 3 kolory, ale jeden korzystałby z pikseli %01, %10, %11 a inny np. z %01, %10 i %00 a więc można by używać koloru ramki i mieć np. kolorowe tło (tak, jak ma Gorgh w swojej grze z motorem).
Można powiedzieć, że niczym się to nie różni od sytuacji kiedy masz dla sprajta zdefiniowany jego kształt i osobno maskę. Ale wtedy dla każdego sprajta musisz mieć i kształt i maskę. W proponowanej wyżej sytuacji masz tylko definicję sprajta, dzięki czemu zajmuje to mniej pamięci bo nie każdy sprajt musi używać pary %00.

Problem jest tylko taki, że nakładanie takiego sprajta trzeba maskować więc trzeba by mieć 256-bajtowe tablice masek. Dla trybów 1bpp potrzebujesz 2 tablice, dla 2bpp 4 tablice, dla 4bpp 16 tablic.
Można by założyć że sprajty o indeksach $00..$7F mają zawsze piksel %00 przezroczysty, a sprajty $80..$FF piksel %11 przezroczysty. Wtedy trzeba 2 tablice dla 1bpp, 2 tablice dla 2bpp i 2 tablice dla 4bpp.

Czyli przepisujesz bajt z generatora do pamięci ekranu. Czyli generator ma mieć konstrukcję odpowiednią dla trybu (1bpp - singlecolor, 2bpp - multicolor, 4bpp - GTIA). W sumie to ideowo zgadza się to z tym co Atari chciało a czego nie, bo tekst w GR.12 też niespecjalnie wygląda z generatorami systemowymi :)
Skoro tiles, to może pomyśl o odbiciach w poziomie (tablica) i pionie (procedura). Twórcom BASIC-owych gier mogłoby to nieco uprzyjemnić robotę.

Edit: A pozycjonowanie co do piksela robienie sprajtów softwareowych.

Edit 2: A jeszcze z maskowaniem... Paaaanie. Tzn. z przezroczystością.

Świetnie to wygląda.
Mam kilka pytań odnośnie funkcji piszącej tekst na ekranie w trybie graficznym.
Jak wiadomo systemowe generatory znaków przygotowane są dla trybów hires (1 bit na piksel). Czy:
1. Można pisać dowolny tekst używając takiego generatora (jak są interpretowane znaki w inverse video)?
2. Czy mając własny generator znaków zaprojektowany dla trybu multicolor (2 bity na piksel) można go użyć do rysowania fontów w trybie graficznym który pozwala na malowanie pikseli w kilku kolorach (np. czcionka dla trybu 12 OS rysowana w trybie 15 OS lub 7 OS)?
3. Czy można pisać tekst obrócony o 90, 180 i 270 stopni (a może 45, 135, 225 i 315)?
4. Czy tekst można pozycjonować z dokładnością do piksela czy do bajtu?
5. Czy w trybach GTIA tekst jest czytelny czy trzeba sobie skonstruować dla niego osobny generator znaków (4 bity na piksel)?

Edit: Czyli właściwie pytania 1, 2 i 5 sprowadzają się do kwestii mapowania pikseli z generatora znaków na piksele trybu graficznego :)

736

(21 odpowiedzi, napisanych Software, Gry - 8bit)

Weź pod uwagę to, że IOCB 0, 6 i 7 są rezerwowane przez BASIC na kolejno: edytor, grafikę, operacje I/O - (C)LOAD/(C)SAVE,LIST,ENTER,LPRINT. 6 otwierana jest po GRAPHICS a 7 tylko na czas wykonania operacji I/O.
GET/PUT/INPUT/PRINT realizuje się na już otwartym kanale, ale przy XIO zawsze możesz podać nazwę urządzenia (niezależnie od tego czy kanał jest otwarty czy nie) co pozwala Ci dość prosto rekonfigurować dowolne urządzenie (np. operacja RENAME dla DOS, lub parametryzacja otwieranego okna przez sterownik O: z któregoś Bajtka) albo nawet cały sterownik. Co więcej do operacji CIO można wykorzystać wszystkie ICAX1..6 (choć BASIC pozwala używać tylko ICAX1 i 2), ponieważ tylko ICAX3Z..ICAX6Z są rezerwowane dla potrzeb CIO. W takim przypadku parametry w ICAX3..ICAX6 ustawia się POKE-m w BASIC-u.
Z ciekawostek (rozmawialiśmy o tym, ale może komuś też się przyda): po RESET system (i BASIC) ma otwarty tylko IOCB #0 z edytorem E:, ale po dowolnym GRAPHICS (również GR.0) otwarty jest już #6 z S: :)
No i pamiętaj jeszcze że INPUT #16;zmienna nie wyświetla znaku ? przy wprowadzaniu.

Planujesz rezerwację pamięci na generatory znaków dla trybów tekstowych (1KB lub 512B)? Może obsługę trybu 3 ANTIC-a? I bardziej eleganckie włączanie V scrolla? Może H scroll też i operacje XIO do skrolowania zawartości ekranu z szybkim wpisywaniem brakującej linii/kolumny (np. właśnie w nazwie urządzenia)?

Edit: I jeszcze przyszło mi do głowy, że może tryb GTIA mógłby być włączany w dowolnym trybie ANTIC-a a nie tylko 9,10,11? Albo np. tryby dwuliniowe 9+11 :) Albo Avalonowa 4 z dwoma generatorami przelączanymi co wiersz?

Edit 2: Czy przy splicie będziesz miał różne zestawy kolorów dla każdego trybu?

Edit 3: Szerokość ekranu: wąski, normalny, szeroki.

737

(293 odpowiedzi, napisanych Fabryka - 8bit)

Można przemapować dowolne urządzenie SIO na napęd Dx: za pomocą polecenia MAP np.:

MAP 1 SIO N:

Od tej pory SDX pod DN: będzie widział dysk 1 SIO.

Edit: Mnie się to przydaje przy pracy z HDD, bo na A: ciągle mam HDD (który normalnie przykrywa mi urządzenie SIO), a na N: mam pierwsze urządzenie SIO.

Edit 2: Widzę że jest jeszcze SWAP do zamiany miejscami napędów. Ale nie używałem :)

738

(293 odpowiedzi, napisanych Fabryka - 8bit)

W manualu do SDX (sekcja "9.9.Utilities") widzę "9.9.10. HDSC". Nie miałem potrzeby używać tego narzędzia (jest na dysku toolkit.atr), ale może się nada?

Zmieńmy trochę tablice:

masktab:
:64     .byte [1 << [# & %111]] ^ $FF
pixeltab:
:64     .byte [1 << [# & %111]]

Przeoczyłem jakoś Twój post.

740

(21 odpowiedzi, napisanych Software, Gry - 8bit)

SuperKey? Chyba w TA było.

741

(21 odpowiedzi, napisanych Software, Gry - 8bit)

S: nie znam, K: też - bufory klawiatury które widziałem wpinają się w przerwania VBLKD oraz VKEYBD OS-a.

742

(74 odpowiedzi, napisanych Fabryka - 8bit)

Mnie się podoba i nawet wciągnęło mnie na chwilę. Balonów ani tuneli nie było w wersji z TA :) Co to za muzyka?

743

(10 odpowiedzi, napisanych Programowanie - 8 bit)

Tak. Przepraszam - pisałem na szybko. Poniżej działająca:

;YX-U2
iifp:
  stx FR0
  sty FR0+1
  cpy #$80
  php
  bcc @+
  txa
  eor #$ff   ;abs(a)
  adc #0
  sta FR0
  tya
  eor #$ff
  adc #0
  sta FR0+1
@ jsr IFP
  asl FR0  ;korekcja znaku
  plp
  ror FR0
  rts

To zamienia Ci liczbę U2 na FP.
Wcześniej zrobiłem uzupełnienie do 1 zamiast do 2 przy abs.

744

(10 odpowiedzi, napisanych Programowanie - 8 bit)

xxl napisał/a:

o co chodzi? o czas :-)

jesli jest biblioteka, ktora realizuje pewne zadania to po co mialbym pisac wszystko od zera skoro mozna skorzystac z biblioteki?

jak masz wbic wozdzia to robisz do tego celu mlotek? ;-)

Daj spokój, to jest rzecz oczywista. Zaskoczyło mnie że szukasz biblioteki do dodawania/odejmowania liczb U2.

xxl napisał/a:

przykladowo czego mi brakuje w pakiecie FP z ROM: operacji na liczbach int ze znakiem (nawet c64 to ma :/).
nie chce przygotowywac liczb do operacji (korzystajac z pakietu) chce podac skladniki ewentualnie ich format, operacje i dostac wynik oraz info czy wynik jest prawidlowy. :-)

To może trzeba sobie rozszerzyć pakiet o procedury z ROM-u C64 :)

xxl napisał/a:

tym bardziej, ze konwertowanie liczb na string a pozniej na fp albo przechowywanie reprezentacji wartosci -1 w formacie ataroskim FP w programie usera do dalszch obliczen... to tylko atari moglo na to wpasc ;-)

To fakt. Musiałbyś robić coś w rodzaju:

;FR0.w=int
  lda FR0+1
  cmp #$80
  php
  bcc @+
  eor #$ff   ;abs(a)
  sta FR0+1
  lda FR0
  eor #$ff
  sta FR0
@ jsr IFP
  asl FR0  ;korekcja znaku
  plp
  ror FR0

745

(10 odpowiedzi, napisanych Programowanie - 8 bit)

Dodawanie i odejmowanie? Wydawało mi się że wystarczy potraktować liczbę jako U2 i wtedy zwyczajnie:

lda a
clc
adc b
sta c
lda a+1
adc b+1
sta c+1

b15 składników i wyniku wskazuje znak (i N w rejestrze flag). V mówi o przepełnieniu zakresu U2. OCB z bibliotekami?
Mnożenie U2 jest bardziej skomplikowane, ale OIDP na codebase64 są procedury korygujące znak.

Procedura @xxl'a zapala piksel ale nie pozwoli na zgaszenie.

Poniżej może trochę przejrzyściej, choć ciut wolniej:

;C-color (0..1), Y-x coord (0..161), X-y coord (0..63)

plot    lda rowadl,x
        sta adr
        lda rowadh,x
        sta adr+1

        lda (adr),y
        and masktab,x
        scc
        ora pixeltab,x
        sta (adr),y
        rts

rowadl:
:64     .byte <[screen+162*[#/8]]
rowadh:
:64     .byte >[screen+162*[#/8]]
masktab:
:64     .byte [1 << [~# & %111]] ^ $FF
pixeltab:
:64     .byte [1 << [~# & %111]]

screen  .ds 162*[64/8]

Znacznikiem C podajesz kolor piksela, w Y-x a w X-y. W screen masz bufor ekranu - kolejno 8 "stron" (po 162 bajty) w organizacji takiej, jak potrzebujesz dla wyświetlacza.

Sama procedura może rezydować w dowolnym miejscu pamięci, tylko słowo adr powinno być ulokowane na ZPG.

748

(11 odpowiedzi, napisanych Programowanie - 8 bit)

To na pewno jest pełny loader? To jest BOOT więc 6 pierwszych bajtów to jest nagłówek - ładowane są 2 sektory 128 bajtowe począwszy od adresu $75F. Spróbowałbyś ponownie zdisassemblować kod loadera?

Edit: Czytasz mi w myślach :) Dzięki. ALE! $75F to jest adres ładowania boota razem z nagłówkiem. Loader jest niepełny bo to:

0805   A9 20      LDA #$20
0807   8D 8E 07   STA $078E
080A   F0 82      BEQ $078E

przecież pójdzie w krzaki.

749

(202 odpowiedzi, napisanych Sprzęt - 8bit)

A czy to nie wygląda na ubitą linię LUM1 (logiczna 1 albo 0)? Może ta bramka odwracająca (4050 pin 11 i 12 ze schematu) padła? Albo się rozlutowało :>

750

(157 odpowiedzi, napisanych Zloty)

Dzięki za świetne party!
Impreza, organizacja, infrastruktura, atmosfera, towarzystwo świetne.
Idę robić inwitkę na LP2020 :P