26

(4 odpowiedzi, napisanych Bałagan)

grey, schowaj (zakoduj) tego maila, bo cię zaraz robale zaspamują. No chyba że masz dobre filtry, to luzik.
AA ma chyba sporą popularność, więc masz spore szanse.

27

(4 odpowiedzi, napisanych Bałagan)

Najszybciej znajdziesz coś takiego tutaj:
  http://tiny.pl/mtgm

28

(44 odpowiedzi, napisanych Programowanie - 8 bit)

Na miesiąc wyjeżdzam na wakacje, dlatego spakowałem to co już mam i wywiesiłem dla wszystkich zainteresowanych na stronie:

http://republika.pl/piotrek_home/Atari/fmath65.html

Pozdro

29

(13 odpowiedzi, napisanych Bałagan)

Te pytania wyglądają na coś takiego jakby nauczycielowi się znudziło wlewanie oliwy do tępych umysłów i chciał rozkręcić biznesa. No ale zabrał się za to jak przedszkolak :D

Ja bym był ostrożny w przekazywaniu takich informacji - nawet jeśli są do zdobycia, to mogą być problemy.

30

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

Proponuje zgłosić ten przypadek na policję. Atari zabezpieczyć jako dowód rzeczowy zbrodni ;) Ścieżkę pewnie da się zrobić "na pajączka" - od nóżki do nóżki.

------
Tu masz jeszcze schemat 130XE:
  http://jsobola.republika.pl/schematy.htm

31

(18 odpowiedzi, napisanych Bałagan)

Pin, ciesze się że Ci się podoba...

32

(18 odpowiedzi, napisanych Bałagan)

Te kolory, tematyka i niezwykle rozwinięta fabuła coś mi przypominają... Czy to nie nowy odpowiednik "Sapera" do nowego MsDziadostwa?

33

(46 odpowiedzi, napisanych Scena - 8bit)

miker, zejdź ze mnie, bo się przewrócisz i Ci Chuck Norris nie pomoże :-i

A swoją drogą, jeśli na tym brzęczyku można zrobić 5 kanałów, to "why not"? Zróbta realnego 16-bitowca w XE to może jakiś j... programista się znajdzie.

34

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

Polecam (rozkład nóżek + nr katalogowy):
PIA:   http://atariki.krap.pl/index.php/PIA
6502: http://atariki.krap.pl/index.php/6502C
Gniazdo klawiatury: http://atariki.krap.pl/index.php/Gniazdo_klawiatury

Dely: Ja się Chucka nie boje, bo oglądałem kilka razy końcówkę Drogi Smoka w zwolnionym tempie :D

35

(46 odpowiedzi, napisanych Scena - 8bit)

Ej, ale ten gościu (Mister Beep) właśnie na Timex-ie robi! To się nazywa samozaparcie...

36

(46 odpowiedzi, napisanych Scena - 8bit)

Pin coś taki nadwrażliwy na ludzkie krzywdy? :D
Zresztą co ja takiego powiedziałem? Odezwać się już kurna nie można...

AY to już zupełnie inna bajka...

37

(46 odpowiedzi, napisanych Scena - 8bit)

YERZMYEY, ale hameryke odkryłeś... Przeca na ZX to zupełnie normalne - muzyka 1-bitowa. Ba, nawet na PC swego czasu robili taką muzę... (chociaż co do PC speakera to nie jestem pewien - ale miał słabsze muzyczki od ZX-a, więc...)

38

(44 odpowiedzi, napisanych Programowanie - 8 bit)

(Przeredagowane po poważniejszych testach)

Wyniki przeróbki mantysy:

Przerobiłem:

typedef struct __dword {
  word word1;
  word word2;
} _dword;

na:

typedef unsigned long _dword;

Po przeróbce - przy tym samym algorytmie, fdiv działa tak:

było:
  fdiv - 46.7 ops/s  (FC -  256)
jest:
  fdiv - 58.8 ops/s (FC -  256)

Niestety nie jest tak różowo, jak mi się początkowo wydawało... No ale i tak lepiej. No i kod znacznie się uprościł.

39

(44 odpowiedzi, napisanych Programowanie - 8 bit)

(po weryfikacji long-a przeedytowane)

W cc65 structy muszą być przekazywane przez pointer.

Rzeczywiście, long w cc65 jest 32-bitowy. Jeśli nawet nie będę przerabiał całego float-a, to na pewno przyda się ta informacja do przechowywania mantysy. Dzięki!

Argumenty funkcji w C są takie:

fdiv(_float result*, _float *a, _float *b);

result = a / b

Źródła udostępnie jak skończę ftoa (->ASCII), co wymaga flog10, co wymaga flog2...
(nie chce -się- zniechęcać).

40

(44 odpowiedzi, napisanych Programowanie - 8 bit)

Są tam same LDA, JSR, LDY, LDA (xx),Y, JSR... Ale spox, wieczorem wkleje fmult - tak jako ciekawostkę...

------
Poniżej kod fdiv (dzielenie zmiennoprzecinkowe). Jest to na razie rekordzista w zwalnianiu - szczytowa prędkość to 46.7 ops/s Od razu mówię, że nie uważam to za coś finalnego...

Zaktualizowałem też wyniki we wcześniejszej tabeli.

Co do CC65 to nie jest tak źle jak myślałem - po zgrubnej analizie kodu asm zauważyłem, że kompilator ten robi parę optymalizacji - np. skraca warunki, jeśli po sprawdzeniu części wiadomo, że cały warunek już będzie fałszywy, to dalej nie liczy. Niestety jak widać od cholery tu JSRów, więc to takie średnio miłe.

; ---------------------------------------------------------------
; void __near__ fdiv (struct __float*, struct __float*, struct __float*)
; ---------------------------------------------------------------

.segment    "CODE"

.proc    _fdiv: near

.segment    "CODE"

    ldy     #$03
    jsr     ldaxysp
    ldy     #$03
    jsr     ldaxidx
    sta     _dw_z1
    stx     _dw_z1+1
    ldy     #$03
    jsr     ldaxysp
    ldy     #$05
    jsr     ldaxidx
    sta     _dw_z1+2
    stx     _dw_z1+2+1
    jsr     ldax0sp
    ldy     #$03
    jsr     ldaxidx
    sta     _dw_bm
    stx     _dw_bm+1
    jsr     ldax0sp
    ldy     #$05
    jsr     ldaxidx
    sta     _dw_bm+2
    stx     _dw_bm+2+1
    ldy     #$03
    jsr     ldaxysp
    ldy     #$00
    sta     ptr1
    stx     ptr1+1
    lda     (ptr1),y
    jsr     pusha0
    ldy     #$03
    jsr     ldaxysp
    ldy     #$00
    sta     ptr1
    stx     ptr1+1
    ldx     #$00
    lda     (ptr1),y
    ldy     #$80
    jsr     decaxy
    jsr     tossubax
    sta     _r0exp
    lda     _r0exp
    jsr     pusha0
    ldy     #$05
    jsr     ldaxysp
    ldy     #$00
    sta     ptr1
    stx     ptr1+1
    ldx     #$00
    lda     (ptr1),y
    jsr     tosicmp
    bcc     L0533
    beq     L0533
    ldy     #$07
    jsr     pushwysp
    lda     #$FD
    jsr     pusha
    jsr     _fsetspec
    jmp     incsp6
L0533:    lda     _dw_bm
    ora     _dw_bm+1
    jne     L0539
    lda     _dw_bm+2
    ora     _dw_bm+2+1
    jne     L0539
    jsr     ldax0sp
    ldy     #$00
    sta     ptr1
    stx     ptr1+1
    lda     (ptr1),y
    bne     L053F
    ldy     #$03
    jsr     ldaxysp
    ldy     #$03
    jsr     ldaxidx
    cpx     #$00
    bne     L0541
    cmp     #$00
    bne     L0541
    ldy     #$03
    jsr     ldaxysp
    ldy     #$05
    jsr     ldaxidx
    cpx     #$00
    bne     L0541
    cmp     #$00
    bne     L0541
    ldy     #$03
    jsr     ldaxysp
    ldy     #$00
    sta     ptr1
    stx     ptr1+1
    lda     (ptr1),y
    bne     L0541
    ldy     #$07
    jsr     pushwysp
    lda     #$FE
    jsr     pusha
    jsr     _fsetspec
    jmp     incsp6
L0541:    ldy     #$07
    jsr     pushwysp
    lda     #$FF
    jsr     pusha
    jsr     _fsetspec
    ldy     #$07
    jsr     pushwysp
    ldy     #$05
    jsr     ldaxysp
    ldy     #$01
    jsr     ldaidx
    jsr     staspidx
    jmp     incsp6
L053F:    jsr     pushw0sp
    lda     #$FF
    jsr     pusha
    jsr     _fisspec
    tax
    beq     L0551
    ldy     #$05
    jsr     pushwysp
    lda     #$FF
    jsr     pusha
    jsr     _fisspec
    tax
    beq     L0551
    ldy     #$07
    jsr     pushwysp
    lda     #$FE
    jsr     pusha
    jsr     _fsetspec
    jmp     incsp6
L0551:    ldy     #$07
    jsr     pushwysp
    ldy     #$05
    jsr     pushwysp
    jsr     _fcopy
    jmp     incsp6
L0539:    ldy     #$03
    jsr     ldaxysp
    ldy     #$00
    sta     ptr1
    stx     ptr1+1
    lda     (ptr1),y
    beq     L0562
    lda     _dw_z1
    ora     _dw_z1+1
    bne     L0561
    lda     _dw_z1+2
    ora     _dw_z1+2+1
    bne     L0561
L0562:    ldy     #$07
    jsr     pushwysp
    ldy     #$09
    jsr     pushwysp
    ldx     #$00
    txa
    ldy     #$04
    jsr     staxspidx
    ldy     #$02
    jsr     staxspidx
    ldy     #$05
    jsr     ldaxysp
    sta     sreg
    stx     sreg+1
    lda     #$00
    tay
    sta     (sreg),y
    ldy     #$05
    jsr     ldaxysp
    sta     sreg
    stx     sreg+1
    lda     #$01
    tay
    jmp     L0A13
L0561:    tya
    sta     _dw_z+2
    sta     _dw_z+2+1
    sta     _dw_z
    sta     _dw_z+1
    lda     #$20
L0A21:    sta     _loop_cnt
    lda     _loop_cnt
    jeq     L0577
    lda     _loop_cnt
    cmp     #$11
    bcs     L0A26
    lda     _dw_z+2+1
    and     #$80
    beq     L057E
    lda     _dw_z
    ldx     _dw_z+1
    jsr     shlax1
    ora     #$01
    jmp     L0A1D
L057E:    lda     _dw_z
    ldx     _dw_z+1
    jsr     shlax1
L0A1D:    sta     _dw_z
    stx     _dw_z+1
L0A26:    lda     _dw_z+2
    ldx     _dw_z+2+1
    jsr     shlax1
    sta     _dw_z+2
    stx     _dw_z+2+1
    lda     _dw_z1
    ldx     _dw_z1+1
    jsr     pushax
    lda     _dw_bm
    ldx     _dw_bm+1
    jsr     tosicmp
    bcs     L058C
    ldx     #$FF
    jmp     L05A5
L058C:    lda     _dw_z1
    ldx     _dw_z1+1
    jsr     pushax
    lda     _dw_bm
    ldx     _dw_bm+1
    jsr     tosicmp
    bcc     L0592
    bne     L059E
L0592:    lda     _dw_z1+2
    ldx     _dw_z1+2+1
    jsr     pushax
    lda     _dw_bm+2
    ldx     _dw_bm+2+1
    jsr     tosicmp
    bcs     L0598
    ldx     #$FF
    jmp     L05A5
L0598:    lda     _dw_z1+2
    ldx     _dw_z1+2+1
    jsr     pushax
    lda     _dw_bm+2
    ldx     _dw_bm+2+1
    jsr     tosicmp
L059E:    ldx     #$00
L05A5:    txa
    bpl     L0588
    lda     _dw_z+2
    ldx     _dw_z+2+1
    jmp     L0A1E
L0588:    lda     _dw_z1+2
    ldx     _dw_z1+2+1
    jsr     pushax
    lda     _dw_bm+2
    ldx     _dw_bm+2+1
    jsr     tosicmp
    bcs     L05A9
    ldx     #$FF
    txa
    jsr     pushaFF
    lda     _dw_bm+2
    ldx     _dw_bm+2+1
    jsr     tossubax
    clc
    adc     _dw_z1+2
    pha
    txa
    adc     _dw_z1+2+1
    tax
    pla
    jsr     incax1
    sta     _dw_z1+2
    stx     _dw_z1+2+1
    lda     _dw_z1
    ldx     _dw_z1+1
    jsr     pushax
    lda     _dw_bm
    ldx     _dw_bm+1
    jsr     tossubax
    jsr     decax1
    jmp     L0A1F
L05A9:    lda     _dw_z1+2
    ldx     _dw_z1+2+1
    jsr     pushax
    lda     _dw_bm+2
    ldx     _dw_bm+2+1
    jsr     tossubax
    sta     _dw_z1+2
    stx     _dw_z1+2+1
    lda     _dw_z1
    ldx     _dw_z1+1
    jsr     pushax
    lda     _dw_bm
    ldx     _dw_bm+1
    jsr     tossubax
L0A1F:    sta     _dw_z1
    stx     _dw_z1+1
    lda     _dw_z+2
    ldx     _dw_z+2+1
    ora     #$01
L0A1E:    sta     _dw_z+2
    stx     _dw_z+2+1
    lda     _loop_cnt
    cmp     #$11
    bcs     L05B6
    lda     _dw_bm+2
    ldx     _dw_bm+2+1
    jsr     shrax1
    sta     _dw_bm+2
    stx     _dw_bm+2+1
    jmp     L05BA
L05B6:    lda     _dw_bm
    and     #$01
    beq     L05BB
    lda     _dw_bm+2
    ldx     _dw_bm+2+1
    jsr     shrax1
    pha
    txa
    ora     #$80
    tax
    pla
    jmp     L0A20
L05BB:    lda     _dw_bm+2
    ldx     _dw_bm+2+1
    jsr     shrax1
L0A20:    sta     _dw_bm+2
    stx     _dw_bm+2+1
    lda     _dw_bm
    ldx     _dw_bm+1
    jsr     shrax1
    sta     _dw_bm
    stx     _dw_bm+1
L05BA:    lda     _loop_cnt
    sec
    sbc     #$01
    jmp     L0A21
L0577:    lda     _dw_z
    ora     _dw_z+1
    bne     L05CB
    lda     _dw_z+2
    ora     _dw_z+2+1
    beq     L05CC
L05CB:    lda     _dw_z+1
    and     #$80
    tax
    lda     #$00
    jsr     bnegax
    beq     L05CC
    lda     _r0exp
    beq     L05CC
    lda     _dw_z+2+1
    and     #$80
    beq     L05D2
    lda     _dw_z
    ldx     _dw_z+1
    jsr     shlax1
    ora     #$01
    jmp     L0A22
L05D2:    lda     _dw_z
    ldx     _dw_z+1
    jsr     shlax1
L0A22:    sta     _dw_z
    stx     _dw_z+1
    lda     _dw_z+2
    ldx     _dw_z+2+1
    jsr     shlax1
    sta     _dw_z+2
    stx     _dw_z+2+1
    lda     _r0exp
    sec
    sbc     #$01
    sta     _r0exp
    jmp     L05CB
L05CC:    ldy     #$05
    jsr     ldaxysp
    sta     ptr1
    stx     ptr1+1
    lda     _dw_z
    ldx     _dw_z+1
    ldy     #$02
    sta     (ptr1),y
    iny
    txa
    sta     (ptr1),y
    ldy     #$05
    jsr     ldaxysp
    sta     ptr1
    stx     ptr1+1
    lda     _dw_z+2
    ldx     _dw_z+2+1
    ldy     #$04
    sta     (ptr1),y
    iny
    txa
    sta     (ptr1),y
    ldy     #$03
    jsr     ldaxysp
    ldy     #$01
    jsr     ldaidx
    jsr     pushax
    ldy     #$03
    jsr     ldaxysp
    ldy     #$01
    jsr     ldaidx
    jsr     tosicmp
    beq     L05E1
    ldy     #$05
    jsr     ldaxysp
    sta     sreg
    stx     sreg+1
    lda     #$00
    jmp     L0A23
L05E1:    ldy     #$05
    jsr     ldaxysp
    sta     sreg
    stx     sreg+1
    lda     #$01
L0A23:    ldy     #$01
    sta     (sreg),y
    lda     _dw_z
    ora     _dw_z+1
    bne     L05E8
    lda     _dw_z+2
    ora     _dw_z+2+1
    beq     L0A1B
L05E8:    lda     _r0exp
L0A1B:    sta     _zexp
    ldy     #$05
    jsr     ldaxysp
    sta     sreg
    stx     sreg+1
    lda     _zexp
    ldy     #$00
L0A13:    sta     (sreg),y
    jmp     incsp6

.endproc

41

(44 odpowiedzi, napisanych Programowanie - 8 bit)

Zajrzałem do kodu asm generowanego z CC65. Koszmar...
Nigdy nie myślałem, że 3 rejestry mogą aż tak ograniczać kompilator (większość kodu to move'y z/do pamięci...).

Ostatnie testy prędkości znacznie odbiegają od tego co powyżej.
(z pamięci)
fmult     - 37 ops/s
fmult10 - 200 ops/s
fmult2   - 1700 ops/s
fmult2ip -  5000 ops/s (być może więcej, koniec skali w benchmarku)

fmult2ip -> mnożenie * 2, argument i wynik w tym samym miejscu
fmult2 w stosunku do fmult2ip wykonuje 3 przesłania pamięciowe więcej - a jaki efekt...

Sama zmiana zmiennych z lokalnych / argumentowych na globalne zmniejszyła kod miejscami o połowe i przyspieszyła np. procedurę fmult dwukrotnie.

Mam już ze 20 funkcji, ale nadal pracuje nad przyspieszaniem tych podstawowych.

42

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

KSO Turbo 2000:
  http://www.dereatari.republika.pl/atarisch/turbo.zip

Turbo Blizzard
  http://www.serious-dial.atari.pl/Serious/S13/A18.html

Co do Turbo 2000F to takiego nie znalazłem, ale być może był w którymś Bajtku. Ktoś napisał, że to najlepsze turbo na XL/XE, więc warto może dalej pogrzebać.

43

(14 odpowiedzi, napisanych Programowanie - 8 bit)

Tu jest opis ATR-a:
  http://atariki.krap.pl/index.php/ATR

Tutaj są źródła do AtrUtil (Ken Siders):
  http://atari.ksiders.tzo.com/a8emulators.html

Coś mam wrażenie, że w polskim środowisku Atari Open Source to jeszcze termin obcojęzyczny...

-----
Reszta postu wycięta po weryfikacji dat...

44

(32 odpowiedzi, napisanych Programowanie - 8 bit)

drac030 napisał/a:

Co do bankowania, przykre jest to, że bank wymienia się w środku TPA - niech no program zechce mieć handler przerwania i umieści go sobie właśnie tam, ... no wiadomo.

Program dopóki nie zawoła XMS handlera nie będzie wiedział w którym miejscu będzie miał dziure. Ale skoro jest "bankowy" to na pewno musi się na taką ewentualność przygotować. Na starcie może się przecież odpowiednio zrelokować - tyle że pewnie dema tego nie robią (wydajność).

drac030 napisał/a:

...Biblioteka SDX może potem przełożyć to na symbole (jak U_GETKEY w tej wersji kernela, który jest w CVS).

Jestem jak biała tablica więc proszę jaśniej. Jaka biblioteka i jaki CVS w którym kernelu?

45

(32 odpowiedzi, napisanych Programowanie - 8 bit)

A czemu nie może byc "literkowo" pod SDX? Najlepiej by było uniwersalnie.
Literka pewnie coś koło Y będzie dobra (ew. konfigurowalna w handlerze i programach korzystających).
Plik z konfiguracją - dobry pomysł. Na początek literka + lista możliwych banków i rozszerzeń. Plik pusty lub brak - wartości domyślne.

46

(32 odpowiedzi, napisanych Programowanie - 8 bit)

Co do protected mode, to mowie od poczatku ze to -bajka-.

A co do XMS/RAM-cart Handlera, to mam dosyc danych zeby spisac w weekend API.
Jesli ktoś ma jeszcze coś do dodania do tego XMS to proszę pisać (dziś).

---
(poprawione, XMLa jeszcze nie planuje na Atari... :) )

47

(32 odpowiedzi, napisanych Programowanie - 8 bit)

Wszystko co potrzebne DOSowi można trzymać w banku "zerowym" bez pakowania/rozpakowywania.
Z tym, że takie rozwiązanie nie będzie umożliwiało korzystanie z programów korzystających z DOSa.
No chyba, że -każde- odwołanie do DOSa będzie go reaktywowało. W sumie wydajnościowo możliwe, chociaż jeśli program będzie chciał coś przesłać z pamięci w obszarze banku do DOSa, to będzie klops (ale znowu - do obejścia).

Co do nakładki - DOS czyści wszystko tylko na RESET. Po powrocie zwykłym trzeba to obsłużyć tak to zwykle się robi w programach DOSowych (chodzi o MEMLO pewnie) - ale nakładka musiałaby wchodzić w bank chroniony.

drac030, nie mów, że chcesz to zrobić ;)

48

(32 odpowiedzi, napisanych Programowanie - 8 bit)

dely - no wiadomo, że da się zrobić haka - w końcu ten protected mode nie jest oparty o sprzęt (MMU lub CPU).

49

(32 odpowiedzi, napisanych Programowanie - 8 bit)

Po krótce:

Po wyjściu z programu:
DOSowy program z tego co czytałem wczoraj wskakuje do jakiegoś wektora "powrót do DOS". Tam siedzi mikro-procka reaktywująca DOS z banku "zerowego" - bez przesłań, po prostu włącza przestrzeń tego banku i rozładowuje się - jeśli trzeba - do pozostałych rejonów RAM do czasu wywołania nast. programu.

Po crashu ze zwisem:
Po RESET system powinien odzyskać kontrole nad komputerem - dlatego wektor RESET wskazuje na mikro-prockę reaktywującą system w banku "zerowym" - niedostępnym dla programu / dema. Procka włącza bank "zerowy", i odpala co tam system DOS potrzebuje po reaktywacji (np. wyczyszczenie RAMu i przestawienie MEMLO).

Chyba Sparta DOS jest tak duża że się nie mieści cała w RAM, albo mi się zdaje (nie uzywałem jeszcze). Więc może tam już takie podmianki są?

Więc podsumowując, to system DOS/OS byłby chroniony, a nie program blokowany - więc odwrotnie niż normalnie.

To jest tylko taka czysto akademicka dyskusja, bo tak naprawdę to było by z tym trochę roboty, więc mam spore wątpliwości, żeby komuś starczyło pary na przerobienie całego (jakiegokolwiek) DOSa. No może COS-a bym przerobił, ale... kto by to wykorzystywał ? :)

50

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

O ile dobrze rozumiem, to historia miałaby się odwoływac tylko do poleceń wpisanych z klawiatury - w procesorze komend.

Co do przekierowań I/O, to jak to się wywołuje?

Czy można zrobić coś takiego?

dir >kat.txt

------
W którymś shellu unixowym historia z tego co pamiętam była przechowywana w normalnym pliku tekstowym - nie wiem po co, chyba żeby móc śledzić użytkownika, a może do wspomnianej komendy "!n", gdyby ktoś zapomniał jaka była komenda nr 1029 w historii.
W każdym razie był to zwykły plik tekstowy z każdą komendą w osobnej linii (+ ew. data z przodu, ale dokładnie nie pamiętam).