701

(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 :)

706

(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.

707

(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 :)

708

(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.

710

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

SuperKey? Chyba w TA było.

711

(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.

712

(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?

713

(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.

714

(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

715

(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.

718

(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.

719

(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 :>

720

(157 odpowiedzi, napisanych Zloty)

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

721

(15 odpowiedzi, napisanych Fabryka - 8bit)

Co prawda nie jestem zainteresowany projektem, ale może komuś przydałaby się możliwość obsługi przerwań IRQ od tych układów?

Edit: Dawno temu kiedy projektowano rozszerzenia Stereo z POKEY-em nikt nie pomyślał o tym i obecnie praktycznie żadne stereo (prócz czeskiego) nie generuje przerwań drugim układem. A czasem by się przydało...

722

(18 odpowiedzi, napisanych Kolekcjonowanie)

Udało mi się wreszcie zrobić zdjęcia. Niestety bez statywu tylko z ręki więc niektóre są nieostre. Zdjęcia były robione z lampą i bez (w archiwum załączone są obydwie wersje dla porównania). Zdjęcia, które były całkiem nieczytelne usunąłem, ale w razie czego mam je zarchiwizowane więc mogę podesłać.
Konsolka została na początku rozkręcona, obfotografowaliśmy płytę, blachy, obudowę i akcesoria. Potem konsolka została skręcona i podłączona do TV. Odpalony został wbudowany w 7800 Asteroids, a potem Summer Games z 2600.
Na panelu czołowym są ryski wynikające z użytkowania - niegłębokie, ale niestety są. Były już niestety kiedy konsolę zanabyłem, no ale mój drugi egzemplarz jest w gorszym stanie więc się nim nawet nie chwalę :/
Archiwum 7z dostępne jest w http://mono.atari.pl/zdjecia7800.7z i waży 357,163,650 bajtów. Jeśli po oględzinach nadal byłbyś zainteresowany wymianą, to zapraszam na PW.

Edit: A - na spodniej stronie obudowy jedna śruba była zabezpieczona srebrną naklejką "Achtung!", którą zdjąłem stąd na zdjęciach widać jeszcze ślady kleju którego nie usuwałem. Tak, że konsolka straciła gwarancję producenta :)

723

(157 odpowiedzi, napisanych Zloty)

Nie masz Atari? Wstyd!

724

(364 odpowiedzi, napisanych Fabryka - 8bit)

Sikor napisał/a:

nie używam sparty, chyba nawet nie wiem, gdzie mam carta ze spartą (archaiczną ;P). Chyba, że pod BW DOSem pójdzie - to mogę ściągnąć sobie ;)

Nie pójdzie. To jest program dla SDX.

sun napisał/a:

smacznego: https://drive.google.com/open?id=1DgF98 … I_h-UCQ9CA
Pamiętajcie, że Sparta musi być nowa, nie archaiczna, bo będzie lipa.

Dziękuję. SDX 4.48+

725

(18 odpowiedzi, napisanych Kolekcjonowanie)

@ZuluGula: Udało mi się odkopać moją 7800.
Niestety jako że nie jestem kolekcjonerem, to nie interesowało mnie nigdy żeby mieć do tego kartony i nie trzymałem w folii, a po prostu używałem. Mogę się za nie zamienić jeśli wyrazisz chęć. W sobotę podesłałbym zdjęcia (mam tylko telefon, ale może uda się zrobić jakieś sensownej jakości fotki nawet tym).