..:: Serious Magazine ::..
wydanie 13

  Wstępniak
  Serious...
  Konkurs - rozwiązanie
  Wspomnienie
  Wiedza
  Koronkowa robota
  Tester EPROM
  Prog. równoległy AT89C2051
  ATMEL - obsługa programu
  EPROM - programator...
  Oporniki, oporniki...
  Blokada komputera
  Archiver
  Wizyta kosmitów...
  Kompresja arytmetyczna
  Analizator stanów logicznych
  ASL - obsługa
  Moja miłość
  Powroty z przeszłości
  Porady
  Pracownia elektronika
  Parowanie tranzystorów
  Pętla induktofoniczna
  Super, extra, cacy cartridge
  Makroassembler ATMAS II

  Wyjście
Moja miłość

      Oczywiście to wszelkiej maści kartridże. W Seriousie opisywałem już wiele z nich. Ten magazyn też zawiera opis jednego, do systemu TURBO BLIZZARD'a. W między czasie, a wcześniej też, zainteresowanie wzbudził kart zbudowany na EEPROM. W/g niektórych za trudny. Przydałoby się coś łatwiejszego, o podobnych możliwościach. Proszę bardzo.

Założenia:

  • pamięć EEPROM bo łatwo ją kasować i programować
  • pojemność pamięci 8kB by było taniej
  • kart powinien dać się programować z poziomu Basica, DOS'a, lub pod nadzorem oprogramowania
  • uruchomienie BOOT TYLKO z przestrzeni $A000 bo to narzuca system Atari
  • powinien być do prostych gier i do podręcznego oprogramowania uruchamianego nawet z poziomu BASICa przez znane A=USR(....) lub z DOS'a jako RUN (adres)
Wykonanie:

Potrzebne części elektroniczne

  • pamięć EEPROM AT28C64( )
  • SN7400 lub odpowiednik
  • dwa przełączniki dwusekcyjne
  • płytka uniwersalna
  • obudowa kartridża
  • opcjonalnie: podstawki pod US
Montujemy całość w/g schematu ideowego który widać poniżej.

Schemat

Jak to działa?

      Na bramkach NAND 7400 wykonany jest konwencjonalny układ logiczny generujący sygnały Zapis/Odczyt tworzony z sygnałów F/2 i R/W dostępnych na złączu kartridża. Pamięć EEPROM, wiadomo. Musi być. Przełączniki:

      P1 - dostęp do przestrzeni adresowej

                  1 - $8000-$9FFF
                  2 - $A000-$BFFF

      P2 - Zapis/Blokada wpisu (Protekt)

                  Z - Programowanie
                  P - Protect/Blokada

Kart należy włożyć do gniazda w komputerze. P2 musi być w pozycji "Z", bo inaczej nic się nie zaprogramuje. P1 należy ustawić w odpowiednią pozycję jak niżej.

W pozycji "1", po włączeniu komputera system odłączy wewnętrzną pamięć Atari i przełączy na pamięć EEPROM karta. Z poziomu Basica możliwe jest programowanie pamięci rozkazami typu:

      POKE X,Y

      X - 32768-40959
      Y - 0-255

Zaprogramować można cokolwiek:

  • użyteczną procedurę
  • kilka użytecznych procedur
  • jakiś tekst
  • grę do 8kB
  • ściągawki
  • adresy
  • kombinacje powyższych
  • etc...
Odczyt do oczywiście PEEK (X) X - jw. lub uruchomienie procedury USR...

Jeżeli programowana jest gra, lub inny program który ma się uruchomić jako BOOT to należy zadbać o to, by utworzyć odpowiedni nagłówek w/g którego BOOT się wykona. Było to opisywane w poprzednich numerach SERIOUS'a.

      BFFA - LSB adres startu
      BFFB - MSB adres startu
      BFFC - zawsze 0
      BFFD - bajt opcji
      BFFE - LSB adres inicjalizacji
      BFFF - MSB adres inicjalizacji, gdy jej nie ma wskazuje adres RTSa

Oczywiście w położeniu "1" przełącznika P1 BOOT się nie wykona, dlatego należy P1 po zaprogramoaniu przełączyć w pozycję "2" i nacisnąć RESET, albo wyłączyć komputer i po chwili ponownie włączyć.

Zazwyczaj (to dla znających prawidła jazdy bez prawa jazdy) programowanie odbywa się pod nadzorem jakiegoś mądrego oprogramowania które jest! Należy tylko zadbać o to by używać odpowiednich adresów. Przygotowałem program za pomocą którego można zaprogramować EEPROM, by po wykonaniu BOOT na ekranie ukazał się napis:

      SERIOUS #13      Zenon/DIAL
      (i tu coś jeszcze...)

W tym celu należy:

  1. P1 ustawić w pozycji "1" ($8000)
  2. P2 ustawić w pozycji "Z" (programowanie)
  3. Uruchomić komputer
  4. Wczytać i uruchomić DEMO.BAS
  5. P2 ustawić w pozycję "P" (Protect)
  6. P1 ustawić w pozycję "2" ($A000)
  7. Nacisnąć RESET w Atari
  8. Powinno się uruchomić poprzez BOOT
  9. Wyłącz komputer, ponownie włącz,
  10. efekt powinien być ten sam
  11. Jeżeli nic się nie "pokaszani" to za każdym włączeniem komputera gdy cart jest w gnieździe uruchomi się DEMO. Jest to tylko "demo", więc nie siliłem się na fajerwerki. Tak więc NIE MA WYJŚCIA do systemu
Dlaczego tak to działa?

Bo na sztywno, ZAWSZE, pamięć karta podmieniana jest albo w obszarze $8000 albo $A000... Więc w położeniu "2" przełącznika P1 system chce wykonać BOOT w/g nagłówka karta. Jak go nie ma, to system "wisi" (gdy wskazana nagłówkiem procedura jest do kitu, to system też zawiśnie). Tak więc programowanie jest możliwe tylko po przełączeniu P1 w pozycję "1" Wtedy system odpali co trzeba, a pod adresami $8000... jest pamięć karta. Więc możemy puścić wodze fantazji i np pod adres $8000... wprowadzić coś takiego:

          lda #10
          sta 710
       sk jmp sk

Pod adresy $9FFA wprowadzić nagłówek mądrze ułożony. Po przełączeniu P1 w pozycję "2" procedura znajdzie się pod adresami $A000... a nagłówek pod $BFFA-BFFF. Widać, że zarówno procedura jak i nagłówek MUSI operować na adresach z przestrzeni $A000-BFFF pomimo że jest to programowane do pamięci $8000-9FFF. Czy to logiczne? Niebardzo? Więc jest rysunek...

P1 = "1"
            
P1 = "2"
EEPROM Karta
            
EEPROM Karta
Programowanie

            
Start przez BOOT

$8000-$9FFF
            
$A000-BFFF

I tu moje trzy grosze.

      Nagłówek wymaga by adres inicjalizacji wskazywał procedurę inicjalizacji (gdy jest) lub RTS gdy jej nie ma. Skąd wziąć ten RTS? Zazwyczaj w dłuższej procedurze zawsze gdzieś się znajdzie. A jak nie, to proponuję rozszerzyć nagłówek o jeden bajt. Pod adres 9FF9 wpisze się kod RTS'a, czyli 96, natomiast nagłówek wygląda wtedy tak:

Adres programowaniaDocelowy
9FF9  kod RTS'a (96)   BFF9
9FFA  adres startu
9FFB  np. $A000
   BFFA
9FFC  zawsze 0   BFFC
9FFD  bajt opcji np.4   BFFD
9FFE  adres inicjalizacji
9FFF  czyli $BFF9
   BFFE
   BFFF

Na koniec przykładowy program w assemblerze, który umieszczony został w programie DEMO.BAS w liniach DATA.

* Logo CART
* Zenon/DIAL 25.02.2003

        opt 22
        org $a100

putline equ $c642
pole    equ 710
wiersz  equ 84

start   lda #1
        sta 752

        lda #4
        sta pole

        lda #5
        sta wiersz
        ldx <text1
        ldy >text1
        jsr putline

        lda #7
        sta wiersz
        ldx <text2
        ldy >text2
        jsr putline

        lda #9
        sta wiersz
        ldx <text3
        ldy >text3
        jsr putline

tu      jmp tu

text1 dta c'    SERIOUS #13     Zenon/DIAL',b(155)
text2 dta c' Cart zbootowany, znaczy sprawny!',b(155)
text3 dta c'                          25.02.2003.',b(155)

* naglowek carta + rts

       org $bff9
_rts   dta b(96)
_start dta a(start)
_zero  dta b(0)
_opcja dta b(4)
_init  dta a(_rts)

       end

Zenon/DIAL

    DEMO.BAS

Następny artykuł Do góry Poprzedni artykuł