Ja tam speedcode ZAWSZE generuje w czasie rzeczywistym a generatory koduje w assemblerze na c64, ale moje efekty są/były mało nowoczesne No i nie znam żadnego języka prócz assemblera, bo to tylko hobby.
Good joke z brakiem nowoczesności
Ogólnie mam wielki respekt dla ludzi kodujących/linkujących bez dobrodziejstw crossdev'u, wątpię czy bym pisał cokolwiek gdyby nie istniały tak dobre narzędzia - KickAss, VICE, szybki loader i nie używał technik jak poniżej ułatwiających życie. Ot. i moje poglądy, kodera, który nie napisał linijki kodu na realnym sprzęcie
Jeśli znasz assembler, to znasz wszystkie pojęcia programistyczne potrzebne do skorzystania z dobrodziejstw KickAssemblera oraz prototypowania efektów.
Co do tego pierwszego, to manual wszystko wyjaśnia, ogólnie język skryptowy jest bardzo prosty, np wyświetlarka koali:
.const KOALA_TEMPLATE = "C64FILE, Bitmap=$0000, ScreenRam=$1f40, ColorRam=$2328, BackgroundColor = $2710"
.var picture = LoadBinary("picture.prg", KOALA_TEMPLATE)
.pc = $0801 "Basic Program"
:BasicUpstart($0810)
.pc =$0810 "Program"
lda #$38
sta $d018
lda #$d8
sta $d016
lda #$3b
sta $d011
lda #0
sta $d020
lda #picture.getBackgroundColor()
sta $d021
ldx #0
!loop:
.for (var i=0; i<4; i++) {
lda colorRam+i*$100,x
sta $d800+i*$100,x
}
inx
bne !loop-
jmp *
.pc = $0c00 .fill picture.getScreenRamSize(), picture.getScreenRam(i)
.pc = $1c00 colorRam: .fill picture.getColorRamSize(), picture.getColorRam(i)
.pc = $2000 .fill picture.getBitmapSize(), picture.getBitmap(i)
Przykład speedcode'u ofcoz wyłącznie edukacyjny.
To pierwszy krok w umilaniu sobie pracy, skrypt do generacji speedcode'u przez KickAss'a pisze się chwilę i masz efekt w pełnej chwale, zmiana parametrów/poprawki to formalności.
Jak rezultat Ci odpowiada, to KickAss nie zabroni Ci napisania generatora kodu
ale najpierw polecam spakowanie i zobaczenie jak szybko loader ładuje gotowca i porównanie tego z orientacyjnym czasem działania generatora.
Jak napisanie generatora będzie potrzebne, to KickAss również ułatwia to zadanie, zobacz sobie tutorial
cruzer'a, akapit "optimising the speedcode" i jego makra do robienia generatorów.
http://codebase64.org/doku.php?id=base:speedcode
Drugim krokiem zwiększającym przynajmniej w moim przypadku produktywność jest prototypowanie efektów tj. pisanie prototypu w C++ który działa identycznie na poziomie algorytmicznym jak przyszły kod na C64, tj. tabelki sinusów, 8'mio bitowe zmienne itd. Szczególnie w przypadku efektów mocno matematycznych ta technika jest zbawieniem.
Profitami są: błyskawiczna możliwość zobaczenia efektu w działaniu, łatwe debugowanie, kombinowanie nad optymalizacją oraz zabawa parametrami oraz finalnie bardzo dobry speedcode, którego generator np. sprawdza, czy sąsiednie piksele korzystają z tego samego punktu na teksturze, proces można rozszerzyć na cały LUT.
Jakbyś był zainteresowany, to mogę podesłać jakiś przykład na PW, nic nie szkodzi, że nie znasz C++, zrozumiesz to w dosłownie chwilę.
Pisze tak bezpośrednio do
fenka, ale jak ktoś chciałbym zobaczyć o co chodzi w prototypowaniu efektów, to ofcoz również pomogę.
Jak to jest z SD2IEC, bo nie do końca rozumiem. Rozumiem, że szybkie loadery nie działają, ale czy jeżeli po stronie stacji napiszę kod który korzysta tylko z DOSu stacji np. rozkazy wczytujące sektory do danego bufora to taki program mogę rozkazami Kernala Memory-Write przesłać do stacji - do SD2IEC i go uruchomić ?
Czy coś takiego działa ? Jeżeli tak to czy mogę po stronie stacji dopisać
procedurę transmisji 2bitowej i czy SD2IEC to pociągnie ?
Jeżeli coś takiego działa to faktycznie można zrezygnować z szybkiego loadera i w wypadku wykrycia SD2IEC podmienić loader w stacji.
Co do kompatybilności, nawet jak coś takiego przejdzie z SD2IEC to o mnie i użytkownikach IDE64 i tak nikt nie pomyśli.
SD2IEC nie ma w środku emulatora procesora 6502 więc nie można napisać żadnego kodu do niej. Jest po prostu zaprogramowana na sztywno do obsługi kilku protokołów, jeśli wykryje standardowy IEC, to śle powoli bajty standardowo, jeśli wykryje protokół fastloadera AR, to wysyła dane w formacie fastloadera AR itd.
Męczy mnie inny problem nie tyle prędkości loadera co tego, że jak chcę wczytać plik za pomocą Kernala to z pamięcią RAM od $e000-$ffff muszę
się pożegnać na czas wczytywania ?
Plus jeszcze przestrzeń cartów jeśli rozwiązanie ma być generyczne, tj. obsługiwać i IDE64 o ile ten ma jakiś fastloader podpinany do KERNEL'a. Ofcoz można też napisać własny mini loader korzystający powiedzmy z protokołu AR, który obsługuje SD2IEC, ale czy taki IDE64 też? Więc znowu wracamy do kompatybilności z jedną konkretną stacją.