1

Temat: Kod C na obraz cartridge

Mam pytanko techniczne.
Napisałem sobie prosty program w C skompilowałem do XEX i ruszył mi bez problemu na emulatorku. I teraz pytanie jak z XEX zrobić coś co by było obrazem cartridgea ROM, BIN albo CAR. Czy to trzeba jakieś parametry kompilacji? Albo gdzie znajdę opis formatu cartridgea (dla zrobienia ewentualnego konwertera).

Powiem, że mnie trochę wzieło to C dla ATARI. Ten kompilatorek całkiem fajnie to robi.
Żeby nie było że zaśmiecam to przykładzik:

Program w BASIC?u:
10 POKE 712,PEEK(20):GOTO 10

zapisałem sobie w C (leci bez bibliotek):

#define PEEK(_addr) (*((unsigned char *)(_addr)))
#define POKE(_addr,_val) (*((unsigned char *)(_addr))=_val)
int main (void)
{
while (1) {POKE(712,PEEK(20));};
return 0;
}

no i kompilator zroibł z tego:
; ---------------------------------------------------------------
; int __near__ main (void)
; ---------------------------------------------------------------
.segment    "CODE"
.proc    _main: near
.segment    "CODE"
L0003:    lda     $0014
    sta     $02C8
    jmp     L0003
.endproc

czyli tak jak chciałem.
A teraz chce wyprodukować CAR :)

Aha, do kompilacji użyłem takiego pliku BAT (żeby nie grzebać się w zmiennych środowiskowych na XP):

echo off
SET FileName="nazwapliku"
SET CC65_Path=c:\cc65
PATH=%CC65_Path%\BIN
SET CC65_INC=%CC65_Path%\INCLUDE
SET CC65_LIB=%CC65_Path%\LIB
SET LD65_CFG=%CC65_Path%\DOC
IF EXIST %FileName%.xex del %FileName%.xex
cl65 -O -t atari %FileName%.c -o %FileName%.xex
IF NOT EXIST %FileName%.xex pause
IF EXIST %FileName%.o del %FileName%.o

2

Odp: Kod C na obraz cartridge

Do tego to sobie ściągnij jaką mapę pamięci i pooglądaj jak cartridge są odpalane.
Nie znam tego C, ale pewnie będziesz musiał dopisać sobie coś a la runtime no
i zadbać, żeby siedziało co trzeba pod odpowiednimi adresami.

---==<<Sc0rpi0>>==---

3

Odp: Kod C na obraz cartridge

Albo sobie zainstaluj RAM-Carta :) Dzięki niemu możesz wgrać zwykły program typu COM na carta i odpalać specjalnym inicjalizerem. Będzie na carcie dopóki bateria sie nie wyczerpie. Ale nie pytaj mnie jak zrobić COM z XEX-a :)

Więcej:
http://atariki.krap.pl/index.php/Ram-Cart_64/128KB

I'm not so bad, once you get to know me.

4

Odp: Kod C na obraz cartridge

A na RAM-Carcie da się zrobić tak, że po włączeniu ATARI od razu ruszy mój program?
Bo w zasadzie to interesuje mnie taki bajer, że pisze sobie programik w C ładuje na cardridge i po włączeniu komputera rusza mój program. Nie chce bawić się w ASM 6502 bo odwykłem od niego. Co prawda jeszcze potrafię czytać ASM 6502 ale do pisania to już straciłem wyczucie (chyba wymarły neurony w tej części mózgu ;) ).
Dzięki za wszystkie sugestie

5

Odp: Kod C na obraz cartridge

COM z XEX robi się dosyć trudno, nie wiem czy Piotrze to nie jest za długi temat na forum.

Trzeba bowiem wykonać megatrudną operację zmiany rozszerzenia pliku z COM na XEX :D

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.

6

Odp: Kod C na obraz cartridge

Gienek, właśnie dlatego o tym wspomniałem, bo chyba skoro sobie dopiero coś próbujesz w C (nie ASM), to RAM-Cart będzie niezastąpiony.

Poniżej fragment instrukcji dla Double RAM-Carta od Zenona (pewnie ze zwykłym będzie podobnie):

Inicjalizacja carta (ręczna)
----------------------------
Inicjalizacja CART-a ma na celu przygotowanie go do używania go jako carta z programami
w sposób podobny jak się używa cartridży z grami (uruchomienie kompa, uruchomienie gry
bez żadnych dodatkowych urządzeń we-wy).

Zadziałał program XINIT256. W trybie 256k (przełącznik B = 256) należy:
- uruchomić komputer z domyślnym DOSem
- uruchomić XDOSRC
- uruchomić XINIT256
- wybrać opcję z formatowaniem i zapisaniem loadera
- po zakończeniu działania programu można wkopiowywać na D8: pliki, które później
  pokażą się w menu carta
- po skopiowaniu programów (gier) należy uruchomić SW.COM i przełączyć się w tryb read-only
- po tej operacji należy wyłączyć i włączyć komputer
- powinno się pojawić menu carta z zapisanymi na nim programami

dely - dzięki za informację :)

I'm not so bad, once you get to know me.

7

Odp: Kod C na obraz cartridge

dely napisał/a:

COM z XEX robi się dosyć trudno, nie wiem czy Piotrze to nie jest za długi temat na forum.

Trzeba bowiem wykonać megatrudną operację zmiany rozszerzenia pliku z COM na XEX :D

z XEX na COM. :]

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

8

Odp: Kod C na obraz cartridge

Widać nie bardzo wiadomo, jak zmieniać te rozszerzenia plików, może po prostu lepiej zostawić w oryginalnym formacie. ;)

A jeśli chodzi o carty, to na każdym carcie (a nie tylko ramcarcie) można umieścić loader COMów i nawet XEXów i po sprawie. Można wrzucić kilka COMów i kilka XEXów na cart i wybierać je z menu.

Nieco trudniejsze rozwiązanie, to rozczaić, jak w CC65 ustawia się obszary pamięci dla linkera (tak żeby kod i stałe były relokowane w obszar carta) i jak działa procedura inicjalizująca dla Atari, czyli crt0.

https://www.youtube.com/watch?v=jofNR_WkoCE

9

Odp: Kod C na obraz cartridge

Fox: o tym już było przy okazji "Proste bankowanie". Bezpośredni link do opisu:

http://www.cc65.org/mailarchive/2004-08/4361.html

I'm not so bad, once you get to know me.

10

Odp: Kod C na obraz cartridge

Dzięki za wszystkie sugestie (XEX & COM też ;) ), muszę przestudiować jeszcze procedurę inicjalizacji. Swoją drogą trzeba strasznie uważać jak się pisze dla 8-bitowca i dobrze się zastanowić nad typem liczby w operacjach, łądowanie tu i tam typu INT znacznie spowalnia liczenie. Z drugiej strony kompilatorek całkiem fajnie układa ten kod.
Mam jeszcze takie pytanko, jak zapisuje się funkcję przerwania (chyba kończyć się musi RTI)?  Podejrzewam, że można by zrobić trik ze wstawką w asm i wywołaniem funkcji przez wskaźnik, ale chciałbym tak jakoś "elegancko"