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.

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:
- P1 ustawić w pozycji "1" ($8000)
- P2 ustawić w pozycji "Z" (programowanie)
- Uruchomić komputer
- Wczytać i uruchomić DEMO.BAS
- P2 ustawić w pozycję "P" (Protect)
- P1 ustawić w pozycję "2" ($A000)
- Nacisnąć RESET w Atari
- Powinno się uruchomić poprzez BOOT
- Wyłącz komputer, ponownie włącz,
- efekt powinien być ten sam
- 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 programowania | Docelowy |
| 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
|