1,076

(34 odpowiedzi, napisanych Programowanie - 8 bit)

@Fox: Dzięki. Pozwoliłem sobie uzupełnić http://atariki.krap.pl/index.php/Rejestry_PIA#PORTB

1,077

(34 odpowiedzi, napisanych Programowanie - 8 bit)

Co do loadera zgodziłbym się, bo uwzględnianie wszystkich możliwości prowadzi do paranoicznej polityki pisania programów. Chciałem wskazać potencjalne zagrożenia, bo piszecie o pewności zapisu do PORTB i to z poziomu loadera (czyli blokiem pliku wykonywalnego), a programista nie może zakładać że jego program zawsze będzie ładowany z Chaos Loadera po SIO z jednostronnej dyskietki o gęstości SD.
Nawet stawiając się w pozycji programisty sprzed 20 lat który nie mógł znać niuansów VBXE czy innych rozszerzeń, których wtedy zwyczajnie nie było (należy więc założyć że cokolwiek będzie z nowych rozszerzeń korzystać zrobi to tak, żeby stary program mógł poprawnie pracować), warto by moim zdaniem spojrzeć na rzeczy, które nawet 20 lat temu były. Mapping of the Atari zdaje się wskazuje że można założyć obszar $2000 wzwyż jako bezpieczny (nie pamiętam co mówi o włączonym BASIC-u). Ja rozumiem, że wielu programistów używało wskazywanych przez Was technik ładowania danych do banków extramu, ale te techniki niekoniecznie są dobrymi praktykami.

1,078

(34 odpowiedzi, napisanych Programowanie - 8 bit)

koala napisał/a:

Nawet jakby rejestr PortB był W-only  to IMO także by działał taki zapis, R/W tutaj nic nie zmienia, ważne że jest W:)

Pewności niestety nie ma zanim nie sprawdzi się rejestru kierunku danych (ale kto by się o to troszczył?). Nie testowałem zachowania PORTB ustawionego do odczytu, ale intuicyjnie czuję, że wyjścia będą albo w stanie HI (czyli wartość nieustalona), albo 1 (czyi $FF) niezależnie od tego co się do PORTB wpisze. Swoją drogą warto by to sprawdzić.

Edit: Milcząco zakładacie, że konfiguracja ustalona przez OS podczas RESET ciągle obowiązuje.

1,079

(34 odpowiedzi, napisanych Programowanie - 8 bit)

Akurat zapis do PORTB SDX-a nie wyłoży, bo  i tak SIO ładuje dane do bufora SIO po czym przerzuca dane do pamięci (nawet jeśli używany jest ramdysk, to po powrocie z SIO odtwarzany jest PORTB). Ale w PORTB są nie tylko bity od konfiguracji extramu - są też od OS-a, BASIC-a, cartridge-a i SELF-TEST-u. Skoro zamierza się używać extramu, to może należałoby pozostawić resztę bitów w spokoju, bo nie wiadomo jaki loader ładuje program?  Może akurat jest pod OS ROM-em, w MAPRAM-ie albo w ROM-ie carta XEGS (tak, wiem że to karkołomna sztuczka i że _do_tej_pory_nikt_takiego_nie_zrobił_)? Spróbujcie łaskawie spojrzeć może nieco bardziej perspektywicznie.

Edit: Warto też pamiętać o priorytetach okien MEMAC w VBXE/FX i extram. Zapis do PORTB może okazać się bardzo nieskuteczny.

1,080

(34 odpowiedzi, napisanych Programowanie - 8 bit)

xxl napisał/a:

najprosciej
org $d3x1
.byte bank
org $4000
dane

Żeby być ścisłym:

org %11010011xxxxxx01
.byte bank
org $4000
dane

:P

Atariki http://atariki.krap.pl/index.php/Binarny_plik_DOSu mówi, że to cecha DOS XL i SpartaDOS (X siłą rzeczy też).

Edit: Czyli może to pomysł ICD?

1,082

(34 odpowiedzi, napisanych Programowanie - 8 bit)

Odradzam bezpośrednie adresowanie PORTB za pomocą bloku pliku, bo:
1. Nie masz pewności czy loader nie jest pod romem/w extramie (dowolny loader/sdx/dos/xbios).
2. Nie wiadomo czy nie manipuluje extramem.
3. Nie wiesz jakie jest zainstalowane rozszerzenie (PORTB/Axlon/VBXE).
Polecałbym:
1. Detekcję rodzaju pamięci i dostępnych banków.
2. Ładowanie danych do pamięci.
3. Przepisywanie pamięci w miejsce docelowe w bloku init.

1,083

(421 odpowiedzi, napisanych Fabryka - 8bit)

@pin: Dodatek zawsze możesz wyrwać :)
@xxl: Czy będzie tam omówienie idei stojących za xBIOSem czy analogicznie jak w przypadku opisu nielegali - opis funkcji z przykładami użycia? Może dodałbyś tam coś więcej niż jest na stronie?

Na pewno? Pamiętam, że DOS 2.5 z CP (od Chaosa) nie uruchamiał programu kiedy nie było w nim bloku RUN ($2E0).

Edit: Czy odpalanie programu bez RUN to nie jest pomysł DOS XL?

Już wiesz, ale dla potomności:

  blk dos $2000
  ...

  run $480
  ini $2000

  blk sparta $480
  jmp entry

  blk reloc main
entry:
  ...

I taka sztuczka załatwia sprawę, bo SDX faktycznie jeśli nie ma bloku RUN próbuje odpalić program od pierwszego załadowanego bloku (to pewnie jakaś zgodność z innymi DOS-ami).

Po bloku nierelokowalnym testującym DOS-a brakuje bloku init:

DOSVEC = $a

                blk dos $2000       /* że niby tak kulturalnie niezależnie od MEMLO */
                lda $0700       /* word $0700 == "SD"
                cmp #'S'
                bne no_sdx
                rts

no_sdx           /* (... procedura wyświetlająca komunikat graficzny ...) */
                jmp (DOSVEC)

                ini $2000

                blk reloc main

Proponuję też po wyświetleniu komunikatu o braku SDX wrócić do systemu przez DOSVEC.

Edit: I dość elegancko będzie blok nierelokowalny rozpocząć przez BLK DOS zamiast ORG.

1,087

(117 odpowiedzi, napisanych Programowanie - 8 bit)

Taki kod:

  blk reloc main
table:
?first .word 0
?last .word 0

table2:
  .byte [table.?last-table.?first]/4

generuje mi: "address relocation overload" !
Oficjalna dokumentacja (w historii) mówi: "błąd 'Addres relocation overload' wystąpi teraz tylko gdy wyrażenie będzie dotyczyć więcej niż jednej etykiety relokowalnej, poprzednio każde wyrażenie z udziałem etykiety relokowalnej powodowało wyświetlenie tego komunikatu błędu".
Ale jaki jest właściwie problem z etykietami relokowalnymi _w_jednym_bloku_? Bo ja rozumiem, gdybyśmy mieli etykietki w róznych blokach - wtedy nie wiadomo jaki będzie między nimi dystans, ale w przypadku jednego bloku wszystko przecież wiadomo...
Dałoby się to naprawić?

Edit: A druga choć związana z poprzednim przypadkiem rzecz jest taka - podobny kod;

  blk reloc main
table:
?first .word 0
?last .word 0
?len = [?last-?first]/4

table2:
  .byte table.?len

się kompiluje poprawnie, ale markuje table2 jako _adres_ do relokacji. A to już jest bardzo nieładne, bo:
1. w table2 mam bajt, a loader SDX zmodyfikuje mi tam 2 bajty,
2. table.?len jest jednak interwałem, który da się określić na etapie kompilacji i on się nie zmieni - nie powinien być relokowalny.
Kod wynikowy wygląda tak:

fe ff 01 00 00 00 05 00 
00 00 00 00 00 

fd ff 01 00 00 
fe 01
04 
fc

Edit2: Co myślałbyś o:
1. generowaniu "Addres relocation overload" tylko przy obliczeniach używających etykiet leżących w różnych blokach relokowalnych,
2. rzucaniu warninga kiedy do obliczeń używane są etykiety relokowalne - user ma być świadom tego co robi, a jak user sobie chce zaszkodzić, to niech sobie szkodzi :)

1,088

(47 odpowiedzi, napisanych Programowanie - 8 bit)

Były też użyte w playerze do CMC. Wszystko działało dopóki ludzie nie pomontowali sobie dodatkowych POKEY-ów...

1,089

(421 odpowiedzi, napisanych Fabryka - 8bit)

Orzeł wylądował! Książka super! Dzięki Duddie.

1,090

(323 odpowiedzi, napisanych Zloty)

@MWK: Się zrobi!
A ogólnie to wypadałoby się spotkać :) Wiosna przyszła...

1,091

(421 odpowiedzi, napisanych Fabryka - 8bit)

Ja poproszę sztukę.

1,092

(107 odpowiedzi, napisanych Programowanie - 8 bit)

Racja. Czyli mamy Rambo, CompyShop i częściowy CompyShop :).

1,093

(107 odpowiedzi, napisanych Programowanie - 8 bit)

Nazewnictwo, nazewnictwem ale bity adresujące banki są inne. Masz więc niby RAMBO (wg Twojej nomenklatury), które używa innych bitów (jak CompyShop). Wniosek stąd, że standardy standardami a rzeczywistość i tak bywa zaskakująca.
@koala: Zrób tę detekcję do cholery i będziesz miał problem z głowy :)

1,094

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

Zasugerowałbym rozważenie jakie urządzenia mogłyby być używane naraz na magistrali SIO, żeby nie okazało się że na wysłane polecenie jedno odpowiada NAK, a drugie ACK, bo na magistrali będzie miszmasz? Polecenie nieobsługiwane nie powinno odsyłać żadnego statusu, wtedy jest szansa że inne urządzenie odpowie (choć to złamanie założeń protokołu). Celem zapobieżenia konfliktów niektóre urządzenia (disk drive) mają swoje numery - może powinno to pójść w tą stronę?

Edit: ort

1,095

(107 odpowiedzi, napisanych Programowanie - 8 bit)

Pin chyba rzadko używa rdzeni R, bo ma w kompie gigamega ramu z U1MB.

1,096

(107 odpowiedzi, napisanych Programowanie - 8 bit)

Jeśli używasz rdzenia VBXE FX w wersji R, bo taki emuluje zachowanie rozszerzenia RAMBO, to wtedy górna połowa VRAM VBXE dostępna jest przez PORTB. I nie musisz manipulować rejestrami VBXE żeby się do tego dostać - wystarczy PORTB. Nawet nie musisz wiedzieć że w banku podstawiana jest VRAM. Niczego nie trzeba tu konfigurować w VBXE (prócz oczywiście odpowiedniego rdzenia).
Jeśli używasz rdzenia FX w wersji A, wtedy emulacji PORTB przez VBXE nie ma i chcąc mieć dostęp do pamięci VBXE musisz używać rejestrów VBXE i okien MEMACA lub MEMACB.

1,097

(107 odpowiedzi, napisanych Programowanie - 8 bit)

W VBXE masz 2 banki - stały MEMACB leżący dokładnie w miejscu banku PORTB i MEMACA, którego położenie i wielkość możesz konfigurować.

1,098

(15 odpowiedzi, napisanych Kupię / Sprzedam / Zamienię Atari)

Ja poprosiłbym SID-y.

1,099

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

Dzięki.

1,100

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

@Montezuma: Czy mógłbym Cię prosić o aktualizację Atariki w punkcie http://atariki.krap.pl/index.php/SIO i odpowiednio http://atariki.krap.pl/index.php/Lista_ … ug_funkcji i http://atariki.krap.pl/index.php/Lista_ … eracyjnych ?