1

Zaczalem troche eksperymentowac z cartridgami, i od razu trafilem na mur.

Kompiluje ponizszy kod. Ma zmieniac polozenie DL i polozenie pamieci ekranu, a potem wyswietlac na ekranie 1 cyfre.
DL jest standardowy.

Jak odpalam XEX'a to jest ok. Widze ekran i moja cyferke na srodku.

A potem robie 8kB plik ROM, umieszczam moj program (z pominieciem 6 bajtow naglowka) na poczatku, na koncu daje 6 bajtow inicjujacyh carta - wskazujacych na $A000.

Podpinam taki "cartridge" pod emulator 800win (jako "standard 8kB cartridge") i widze w monitorze, ze program sie wykonal: w 560,561 mam $A021 w 88,89 mam $4100.
W pamieci ekranu (pod adresem $4114) mam ten swoj znaczek (cyfre 5).

Tyle ze ekran jest smoliscie czarny.
Dlaczego?


         
         org $A000

dliadr   equ 560
obr      equ 88
lic      equ $600

         LDA #<DL
         STA dliadr
         LDA #>DL
         STA dliadr+1
         LDA #$00
         STA obr
         LDA #$41
         STA obr+1


         lda #20
         sta lic

         lda #21
         ldy lic
         sta (obr),y
petla
         jmp petla

DL       dta $70,$70,$70,$42,$00,$41,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02
         dta $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$41,$20,$BC,$2B,$2B,$2B,$2B
         dta $2B,$2A,$2A,$2A,$2A,$35,$2A,$35

2

nie mam teraz czasu na analize ale widze ze masz w dl $41 $bc20 ? 41 to chyba JVB.

http://atari.pl/hsc/ad.php?i=1.

3

$4100 to miejsce gdzie chce miec pamiec ekranu...

4

zamiast $20 $bc wpisz $21 $a0 tak z ciekawosci.

http://atari.pl/hsc/ad.php?i=1.

5

$41 jest dobrze, ale chyba adres jest inny niż $bc20. adres powinien być taki jak DL

Byl hrozný tento stát, když musel jsi se dívat, jak zakázali psát a zakázali zpívat,
a bylo jim to málo, poručili dětem modlit se jak si přálo Veličenstvo Kat.

6 Ostatnio edytowany przez nosty (2008-03-25 16:23:44)

Faktycznie, cos pokopalem z DL... Ale po poprawce jest bez zmian:
Co ciekawe zarowno pierwsza wersja jak i druga dzialaja prawidlowo jako XEX!

A moze w momencie podpiecia carta wylaczane sa przerwania, albo cos takiego i trzeba je wlaczyc?
Jak pisalem - program w trybie plikowym dziala ok. Na carcie tez wykonuje to co ma wykonywac tylko nie widze ekranu...

DL       dta $70,$70,$70,$42,$00,$41,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02
         dta $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$41,$21,$A0,$2B,$2B,$2B,$2B
         dta $2B,$2A,$2A,$2A,$2A,$35,$2A,$35

7

wyglada jak by nie dzialaly przerwania sprobuj cos takiego:


         
         org $A000

dliadr   equ $D402


obr      equ 88
lic      equ $600




         LDA #<DL
         STA dliadr
         LDA #>DL
         STA dliadr+1

 lda #$22
 sta $d400

         LDA #$00
         STA obr
         LDA #$41
         STA obr+1

    ......

8 Ostatnio edytowany przez Vasco/Tristesse (2008-03-25 19:16:29)

Tak z głowy. Jezeli cart zaczyna sie od A000 to konczy na BFFF. Wtedy DL-ki raczej nie znajdziesz pod BC20...

9

A to będzie działać?

         org $A000

dliadr   equ $230
zp       equ $80
obr      equ zp
lic      equ zp+2
ekran    equ $4100

         mwa #dl dliadr
         mwa #ekran obr

         lda #20
         sta lic

         lda #21
         ldy lic
         sta (obr),y

         jmp *

dl       dta $70,$70,$70
         dta $42,a(ekran)
:23      dta $02
         dta $41,a(dl)

Zakładam, że używasz MADSa - staraj się korzystać z jego skrótowców - nie piszesz w monitorze przecież :)

BTW, co to robi (w dl):

$2B,$2B,$2B,$2B,$2B,$2A,$2A,$2A,$2A,$35,$2A,$35
Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

10

w przypadku XASM-a i MADS-a aby stworzyć plik dla carta dajemy na początku

 opt h-f+

przykładowe pliki BIN (obraz karta) dla Atari 7800 znajdują sie w paczce z mads-em ...\EXAMPLES\ATARI7800, efekt ich działania można obejrzeć pod emulem ProSystem (były także sprawdzane na prawdziwej konsoli A7800, przerobionej przez Psychol-a, obraz karta wczytywany był od $c000 w miejsce gry Asteroids)

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

11 Ostatnio edytowany przez nosty (2008-03-25 20:52:36)

Vasco. No dokladnie. Dlatego wlanie probuje jak przeniesc w inne miejsce.
Vidol - nie pomoglo. Nie pomaga zadna manipulacja rejestrami przerwan.
Zaczynam sie zastanawiac czy to nie wina emulatora (taaa.. to sie zawsze tak wydaje ;). Ale przeca to nie ma prawa nie dzialac z carta, skoro dziala w trybie plikowym a i z carta program rusza na emulcu! Tylko ekran czarny.

Jutro rano przygotuje plik odpowiedni pod carta, ktorego mam, wrzuce do kosci i wyprobuje na real Atari.

EDITED: O! Piszac powyzsze nie widzialem odpowiedzi Delego i TeBe. Juz sprawdzam te opcje!

12 Ostatnio edytowany przez nosty (2008-03-25 21:22:40)

tebe - te opcje to wyciecie naglowka i wpisywanie FF.
Jak pisalem wycinam naglowek recznie. CART RUSZA. Program sie wykonuje (co moge podejrzec opcja H w monitorze). Rejestry  560,561 i 88,89 ustawiaja sie poprawnie. Tylko ekran jest czarny!

_Ten sam_ program (oczywisacie z naglowkiem) w formie plikowej XEX dziala i wyswietla ekran prawidlowo.

Zaraz sprawdze kod Delego.

EDITED:

Dely: bez zmian. tzn zrobiles jeden blad: obr  to rejestr przechowujacy adres ekranu (88,89).
Uzywam XASM i Twoj kod jest oczywiscie bardziej elegancki, ale tak samo: jako plik dziala, jako cart nie.
Zamieszczam nizej kod.
A tu wersje skomilowana plikowa i zrobiony na jej podstawie cart 8kB.
http://nosty.neostrada.pl/cart2_plik.zip
http://nosty.neostrada.pl/cart2_cartridge.zip

Mozecie sprawdzic jak jest u Was?


         org $A000

dliadr   equ $230
obr      equ $58
zp       equ $80
lic      equ zp+2
ekran    equ $4100
          
         mwa #dl dliadr
         mwa #ekran obr

         lda #20
         sta lic

         lda #21
         ldy lic
         sta (obr),y

         jmp *

dl       dta $70,$70,$70
         dta $42,a(ekran)
:21      dta $02
         dta $41,a(dl)

13

Proponuję ustawić rejestry kolorów może?

KMK
? HEX$(6670358)

14

No fakt, ze przy uruchmieniu carta wszystkie kolory sa ustawione jakos dziwnie, a rejestry cienie na 00.
Ale reczna zmiana ich w monitorze Atari800 nic nie daje. Czyli to chyba jeszcze cos innego.

Wychodzi na to, ze jak komp startuje z cartridge'a to nie ustawia masy rzeczy, ktore przy normalnym starcie ustawiane sa...
Udaje sie do biblioteczki sprawdzic u Zientary co po kolei robi comp przy starcie cartridge'a, a co pomija.

15 Ostatnio edytowany przez seban (2008-03-26 10:51:59)

Hej!

A pytanie mam... czy ustawiasz cokolwiek w obszarze $BFFA-$BFFF? W tych lokacjach powinieneś mieć określony typ cartridge-a i wektor jego startu. Wszystko dokładnie opisał Zenon w Seriousie, oto link:

http://www.serious-dial.atari.pl/SSerious/S06/menu.html

interesuje cię tekst od rozdziału "Jak działa Cartridge".

Podejrzewam iż skoro użyłeś opcji opt f+, XASM wypełnił wolny obszar wartościami $FF, co spowodowało iż w CARTOPT (lokacja $BFFD) znalazło się $FF co spowodowało iż masz tzw. cartridge diagnostyczny.

UPDATE:

Poniżej masz działającego gotowca, tak to mniej więcej powinno wyglądać, plik ASX i wynikowy .ROM masz spakowany tutaj. Do kompilacji używałem XASM-a.


    opt    f-h-
    
scr    equ    $600            ; lokacja bufora ekranu w pamięci RAM (dla potrzeb licznika)
    
    
    org    $a000

; inicjalizacja cartridge, w tym wypadku brak :)

init    rts

; start programu

main    

; wyczyść pamięć obrazu

    ldx    #$00
    txa
c0    sta    scr,x
    inx
    bne    c0

; ustaw adres display list

    ldx    <dl
    ldy    >dl
    stx    $230
    sty    $231

; ustal kolory liter i tła

    lda    #$0f
    sta    $2c5
    lda    #$c2
    sta    $2c6

; poczekaj  do wystąpienia najbliżeszego przerwania VBL

    jsr    op

; przygotowanie licznika, wypisz (#000) w lini zawierającej licznik

    lda    #'#'-32
    sta    scr
    lda    #'0'-32
    sta    scr+1
    sta    scr+2
    sta    scr+3

; testowe zwiększanie licznika

count_loop

    ldx    #2            ; ilość cyfr licznika zmniejszona o 1

cn0    inc    scr+1,x        ; zwiększaj ostatnią cyfrę

    lda    scr+1,x        ; czy cyfra >9
    cmp    #['9'-32]+1
    bcc    cn1            ; nie, koniec pętli
    
    lda    #'0'-32        ; tak, zeruj aktualną cyfre
    sta    scr+1,x        
    dex                ; będziemy zwiększać następną
    bpl    cn0            ; licznik cyfr<>0, kontynułuj pętlę
cn1
    

    jsr    op            ; opóźnienie
    jsr    op
    
    jmp    count_loop


; procedura oczekiwania na VBL

op    lda        $14
    cmp:req    $14
    rts

; display list

dl    dta b($70),b($70),b($70),b($42),a(txt),b($02),b($30),b($42),a(scr),b($41),a(dl)

; teksty statyczne

txt    dta d'Test startu cartridge $A000-$BFFF v.1.0b'    
    dta d'0123456789012345678901234567890123456789'    
    

    opt    f+

    org    $bffa
    dta     a(main)            ; cart RUN vector
    dta    b($00)            ; cart INS flag
    dta    b(%01111110)        ; cart OPT flags
    dta    a(init)            ; cart INIT vector

pozdrawiam
Seban

16

a czy nie wystarczyłoby zajrzeć do najprostrzego karta wziętego z sieci, który działa ?

___
Press play on tape...

17 Ostatnio edytowany przez nosty (2008-03-26 13:06:54)

Dziekuje Wam wszytkim za pomoc, ale czytajcie przed odpowiadaniem plis!
Oczywiscie ze ustawilem 6 koncowych bajtow inicjujacych carta - napisalem to juz w pierwszym poscie! Probowalem tez kilku opcji flag.
Gdybym tego nie zrobil cart by nie startowal - a pisalem 3 razy, ze startuje i pracuje, Jedynym problemem byl czarny ekran.
Oczywiscie ze podejrzalem jak to robia inne romy (np 8kB River Raid, ktory na emulcu dziala).

Cart przygotowany przez Sebana dziala! Takze zaraz sprawdze czym sie rozni od mojego i napisze co robilem zle.
Dzieki raz jeszcze.

EDITED

No i juz wszystko jasne. Dzieki Seban! Teraz moj tez dziala. Blad polegal na tym, ze wektor do procedury inicjalizacji $bffe ustawilem na program glowny i nigdy z niej nie wracalem. Bo nigdzie nie znalazlem opisu, ze z inicjalizacji trzeba wracac. Przyjalem ze program odpala sie przez wektor inicjalizacji i sobie dziala i jest git.
Tymczasem, pewnie po powrocie z inicjalizacji carta, system ustawia rozne rzeczy i dopiero potem odpala glowny program z wektora $bffa.

Czyli ewidentnie mieliscie racje odsylajac mnie do dokladniejszych opisow dzialania carta. Bije sie w piersi.
EOT.

18

no to teraz dodac tylko q pamieci do http://atariki.krap.pl/index.php/Biblio … XL/XE#Inne i bedzie gites ;)

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

19 Ostatnio edytowany przez Zenon/Dial (2008-03-26 21:12:05)

W nagłówku karta są dwa adresy 1. Inicjalizacji karta, procedura może być i musi kończyć sie rozkazem RTS, albo może jej nie być ale adres inicjalizacji MUSI wskazywać jakiś rozkaz RTS w pamięci, w dowolnym miejscu, nawet gdzieś poza obszarem pamięci karta.
2. Właściwy adres startu programu/gry...etc...
Słowem ZAWSZE musi wykonać się inicjalizacja (lub tylko RTS) a po po powrocie  skok do właściwego adresu startu.
Ale .... może być też taka opcja że wykonuje sie TYLKO inicjalizacja a start nie, zależy to od ustawienia bitu2 rejestru $BFFD

20

czyli problemem bylo to, ze antic jest wylaczony w trakcie skoku do procki inicjalizujacej?

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

21

Czy do konca wylaczony nie wiem, ale na to wyglada.
U mnie wykonywala sie tylko inicjalizacja (jak opisuje to Zenon). Nawet mialem odpowiednio ustawiona flage w $BFFD. Ale najwyrazniej niektore rzeczy nie sa jeszcze powlaczane czy zainicjowane w momencie kiedy wykonuje sie inicjalizacja. Dopiero po powrocie z niej system cos jeszcze robi zanim odpali start carta.

Moj blad polegal na braku procedury inicjalizacyjnej z pojedynczym RTS wlasnie :)

22

moze wystarczylo tylko uruchomic antica? ale wtedy twoj program bedzie sie o jakies 33% wolniej wykonywal ;)

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

23

Gdy procedura RESET wykona większość czynności sprawdza czy w gnieździe jest kart. Jeżeli tak, inicjuje go, lub po prostu wraca przez samo RTS gdy nie ma procedury inicjującej. Następnie otwiera Edytor, i poprzez sprawdzenie różnych wskaźników następuje skok do nazwijmy to właściwego BOOT, programu użytkownika. Podejmowana jest próba odczytu z magnetofonu lub stacji no i ostatecznie startuje cart w/g adresu wskazanego w nagłówku.

24

jeśli adres w nagłówku może wskazywać dowolny adres w pamięci, to można sądzić, że ta inicjalizacja przy wyłączonym anticu jest dla szybszego "przeniesienia" zawartości karta w obszar zgodny z adresem właściwego startu karta... ?

___
Press play on tape...

25 Ostatnio edytowany przez Zenon/Dial (2008-03-27 16:25:10)

Nie tak.... jeżeli ma być procedura inicjalizująca to musi być w pamięć karta, bo jak inaczej, Użytkownik ją sobie pisze ( i jaki ma humor, potrzeby i zdolności, taką jest ) i kończyć się musi RTSem. Natomiast gdy jej nie ma to można wykorzystać dowolny RTS umieszczony gdziekolwiek w pamięci byle wskazać jego adres. Zaoszczędza się... jeden bajt pamięci karta.
Opisując ten mechanizm w SERIOUSie proponowałem by nagłówek rozszerzyć o jeden bajt i pod adresem $BFF9 umieścić RTSa z którego można skorzystać i nie ma potrzeby szukać potrzebnego RTSa.