UP2SD Transfer
Czyli jak przenieść dane z PC na C64.
Czyli "alepoco" budować interfejs UP2SD.
Wersja 1 dokumentu.




1. Wstęp

W przenoszeniu kodu i danych pomiędzy PC a C64 wykorzystuję specyfikę systemu plików FAT. Tuż po skasowaniu danego programu z karty SD, a następnie wgraniu kolejnego, plik zapisywany jest w tym samym miejscu! Czyli nie musimy teraz przechodzić żmudnej procedury odczytu adresu położenia pliku na karcie (patrz punkt 3). Po prostu po kompilacji programu (za pomoca skryptu) przekładamy kartę w czytnik UP2SD, z poziomu C64 z monitora wpisujemy GCC00, albo z basic sys52224. I po chwili już mamy program w pamięci ram C64.Oczywiście w międzyczasie nie dogrywamy kolejnych programów na kartę SD, ani ich nie kasujemy, bo będziemy wtedy musieli przejść przez całą procedurtę odczytu adresu od nowa.
Jest to chyba najtańszy i najszybszy znany mi sposób na przenoszenie kodu na C64.

Do przenoszenia danych za pomocą tej metody potrzebujemy:
A. Wykonany, sprawnie działający interfejs UP2SD.
B. Sprawne komputery C64 i PC (ew. inny z obsługą karty SD).
C. Oprogramowanie dla C64.
D. Program WinHEX dla PC (lub inny edytor z obsługą odczytu karty SD, np. HxD).


2. Oprogramowanie dla C64
A. Dla naszego C64 napisałem specjalny program, za pomocą którego możemy przenosić kod wynikowy naszej tfurczości ;o).
Listing znajduje się tutaj.
Gotowy progran znajduje się tutaj.

B. Instrukcja obsługi programu, przy założeniu, ze skompilowany został pod adres docelowy $cc00.
Pod adresem:

up2sd trans
.:CC04 00 04 7E 00 adres położenia pliku na karcie SD, czyli $00047e00.
Odczytamy go za pomocą programu WinHEX. Patrz punkt 3.

.:CC09 08 0E (adres ładowania-2) programu w pamięci c64, czyli $0810=$080e+2.

Słowo wyjaśnienia. 64Tass Turbo Assembler Macro po kompilacji w kodzie wynikowym wstawia, zgodnie z formatem zapisu c64, dwa pierwsze bajty adresu ładowania do pamięci c64. Aby uprościć procedurę, a jednocześnie skrócić czas jej wpisywania część przeliczeń przeczuciłem na użytkownika.
Przykłady:
Jeżeli kompilujemy nasz program pod $c000, to adres do wpisania wynosi $bffe.
Jeżeli nasz program musimy załadować pod $1250, to adres do wpisania wynosi $124e.

.:CC0B 02 Ile bloków 512 bajtowych ma być załadowana do pamięci C64.
Przy używanej procedurze wartość ta powinna przyjmować max. $20.


3. WinHEX
A. Formatujemy kartę SD.
JEST TO WAŻNY ETAP. NIE ZALECAM POMIJANIA.

Aby formatować kartę SD należy ustalić literę napędu, pod którym system widzi naszą kartę SD.
Następnie z linii poleceń wpisujemy:
format x: /FS:FAT /V:up2sd /Q /X /A:512 (for a 32MB Card)
format x: /FS:FAT /V:up2sd /Q /X /A:8192 (for a 512MB Card)
format x: /FS:FAT /V:up2sd /Q /X (Cards bigger than 512MB)

Gdzie x to litera pod którš jest widoczna karta SD.
Powyższy sposób przygotowania karty znalazłem w instrukcji do MMC Replay, konkretnie w tym dokumencie.

B. Ściągamy wersję demonstracyjną programu WinHEX ze strony: http://winhex.com/winhex/.Do naszych celów w zupełności wystarczy taka wersja.
C. Instalujemy i uruchamiamy WinHEX'a.
D. Z górnego menu programu wybieramy: Tools -> Open Disk.
winhex
Z kolejnego otwartego okna wybieramy:
winhex

Wybieramy oczywiście ten czytnik, w krórym znajduje się nasza karta do odczytania/zapisania.
Koniecznie wybieramy opcję: Physical Media i zatwierdzamy przyciskiem OK.

Otworzy nam się taki oto widok.
winhex
Odczytujemy wartość Bytes per sector: 512

Następnie kilkamy dwukrotnie w Partition 1.
winhex

Otworzy nam się zakładka z zawartością katalogu głównego karty.
Klikamy w nazwę programu, który ma być przeniesiony na C64.
winhex

Klikamy w pierwszy bajt zawartości programu w centralnym oknie (4).
Odczytujemy zawartość (5)Physical sector No.:575.
winhex

E. Teraz pozostaje nam pomnożyć wartość odczytaną z (1) z wartością odczytaną z (5).
W moim przypadku to: 512x575=294400. Otrzymany wynik zamieniamy na zapis hex: $47E00.
Wygląda znajomo? Uzupełniamy otrzymany wynik w hex o brakujące 3 zera i mamy szesnastkowo podany adres położenia pliku na karcie SD.
Ten właśnie adres $00047E000 wpisujemy w punkcie 2B, jako dane dla procedury wczytania z karty pamięci.

4. Zakończenie
Opisany tu przeze mnie sposób transferu może się wydawać na pierwszy rzut oka zbyt pracochłonny, aby był przydatny. Lecz po kilkukrotnym przećwiczeniu procedury jest doskonałym sposobem na przenoszenie kodu wynikowego z PieCa na naszego Commodorka.
Opiszę, jak w praktyce, wykorzystać powyższe informacje, oraz interfejs UP2SD do programowania "skośnego".
Przygotowanie sobie środowiska programistycznego to temat na oddzielny artykuł. Na szczęście zostało to już opisane w C&A Fan nr 6(str. 82).
Ja kod piszę w EditPad-zie. Aby go skompilować Turbo Assemblerem wywołuję z linii poleceń skrypt o treści:

del program.prg
tass.exe prg.txt -o program.prg -L prglist.txt
del x:\program.prg
copy program.prg x:\program.prg
x - to litera napędu karty SD

Gdzie:
del program.prg - kasujemy ew. poprzednią wersję skompilowanego programu
tass.exe prg.txt -o program.prg -L prglist.txt
tass.exe - Wywołanie 64Tass Turbo Assembler Macro z parametrami:
prg.txt - kod do kompilacji
-o program.prg - nazwa pliku wynikowego
-L prglist.txt - listnig programu do pliku, pomocny przy szukaniu adresów etykiet i błędów.

del x:\program.prg - kasuje z karty SD poprzednią wersję programu.
copy program.prg x:\program.prg - kopiuje aktualną wersję programu na kartę SD.




Czego sobie i Wam, drodzy czytelnicy, życzę.
Tutaj -> FORUM można podyskutować na temat tego dokumentu, interfejsu, oraz możliwości rozwoju projektu.

Tomasz K.
Ostatnia aktualizacja: 5.02.2013

Lista zmian w dokumencie.
5.02.2013 Zmiana kolejności niektórych fragmentów tekstu. Dodanie linka do wątku na forum.
Merytorycznie bez zmian.
1.02.2013 Publikacja dokumentu.
c64, 6502, MMC/SD, User Port, SPI