Autor Wątek: 128K --> 48K (USR0) z poziomu loadera  (Przeczytany 34859 razy)

ikci

  • *****
  • Wiadomości: 1216
  • Miejsce pobytu:
    Kraków
Odp: 128K --> 48K (USR0) z poziomu loadera
« Odpowiedź #15 dnia: 2013.04.03, 13:55:30 »
@ Phonex  - plik z nagłówkami tutaj:   http://www.marcin-marcin-marcin.com/NOY-t.zip

@Matofesi

Bardzo dziękuję - przerobiłem zaraz na wersję +3Dos ale coś złego się dzieje...



Po ząładowaniu całego (chyba) programu wyświetla sie komunikat
0 OK 90:1  i dalej nic...

Plik TAP który mi wysłałeś pod Spectrum +3 ładuje się bez problemu...
ale po przeróbce do DSK wychodzi jajo

Tutaj plik DSK   http://www.marcin-marcin-marcin.com/noy128beta.dsk


Listing BASIC loadera przerobionego na wersję +3DOS wygląda tak:



Oczywiście rozszerzenie plików TAP nie ma znaczenia - to równie dobrze może być SCR przy screenie
czy też COD przy reszcie bloków.. Ważne aby nazwy plików na obrazie dyskietki zgadzały się z nazwami w loaderze.

« Ostatnia zmiana: 2013.04.03, 14:02:25 wysłana przez ikci »
ZX Spectrum 48K, ZX Spectrum +, ZX Spectrum 128K, ZX Spectrum +2, ZX Spectrum +2B, ZX Spectrum +3, TIMEX TC2048, UNIPOLBRIT Komputer 2068, Didaktik Gama 80kB, 
Amstrad/Schneider CPC6128, Schneider CPC464, Commodore C64, Atari 800XL, 65XE 130XE, A500+, A600, A1200, ATARI 1040 STF

matofesi

  • *****
  • Wiadomości: 2049
  • Miejsce pobytu:
    Toruń/Poland
Odp: 128K --> 48K (USR0) z poziomu loadera
« Odpowiedź #16 dnia: 2013.04.03, 15:35:30 »
Wychodzi mi jednak, że +3 inaczej przełącza banki przy ładowaniu z dyskietki i dane nie trafiają tam gdzie powinny. Muszę poszukać co i jak - jak wymyślę, to dam znać ;)

matofesi

  • *****
  • Wiadomości: 2049
  • Miejsce pobytu:
    Toruń/Poland
Odp: 128K --> 48K (USR0) z poziomu loadera
« Odpowiedź #17 dnia: 2013.04.03, 19:50:51 »
No i wychodzi mi, że nie da się tego zrobić z samego BASICa. Przy wczytywaniu z dyskietki +3DOS używa dodatkowej pamięci jako bufora i przełącza strony według potrzeb, co powoduje, że normalne stronicowanie działa do momentu wczytywania czegoś z dyskietki.
Tutaj trzeba by wczytywać dane poniżej $C000 i małym kawałkiem kodu przerzucać dane do właściwych banków. Komplikuje to trochę procedurę, ale nie jakoś bardzo. Jeśli sobie nie poradzisz, to spróbuję znaleźć jutro chwilę i napisać stosowny kawałek :)

ikci

  • *****
  • Wiadomości: 1216
  • Miejsce pobytu:
    Kraków
Odp: 128K --> 48K (USR0) z poziomu loadera
« Odpowiedź #18 dnia: 2013.04.03, 20:42:37 »
OK bardzo Ci dziękuję... Czekam bo może ktoś jeszcze będzie miał jakiś pomysł....
ZX Spectrum 48K, ZX Spectrum +, ZX Spectrum 128K, ZX Spectrum +2, ZX Spectrum +2B, ZX Spectrum +3, TIMEX TC2048, UNIPOLBRIT Komputer 2068, Didaktik Gama 80kB, 
Amstrad/Schneider CPC6128, Schneider CPC464, Commodore C64, Atari 800XL, 65XE 130XE, A500+, A600, A1200, ATARI 1040 STF

Phonex

  • *****
  • Wiadomości: 1261
  • Miejsce pobytu:
    Warszawa
Odp: 128K --> 48K (USR0) z poziomu loadera
« Odpowiedź #19 dnia: 2013.04.03, 20:49:07 »
Przy wczytywaniu z dyskietki +3DOS używa dodatkowej pamięci jako bufora i przełącza strony według potrzeb, co powoduje, że normalne stronicowanie działa do momentu wczytywania czegoś z dyskietki.

Jest coś jeszcze.
Jak się uruchomi Twoją przeróbkę pod +3 z tapa - to jest jakiś durny komunikat o błędzie! Pod standardowym 128K działa!!!  :o
Jak się obejrzy debuggerem to okazuje się że w momencie ostatniego USR jest włączony bank 6.
W 23388 jest 16 a bank włączony szósty. Czary z mleka!

Ja zająłem się tą drugą wersją z trainerem i mam to samo  >:(
Próbowałem zrobić przełączanie w asemblerze, asekurancko robiąc OUT i aktualizując 23388 i też kicha.
Jest jeszcze druga zmienna - 23399 która wybiera tryb specjalny pamięci, ale nie ma w nim takiej konfiguracji żeby bank 6 był od 49152.

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4540
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: 128K --> 48K (USR0) z poziomu loadera
« Odpowiedź #20 dnia: 2013.04.03, 21:29:30 »
A może by to tak spakować? Załadować obrazek, a pozostałe dane oraz banki spakować, a następnie rozpakować w odpowiednie miejsca.

Phonex

  • *****
  • Wiadomości: 1261
  • Miejsce pobytu:
    Warszawa
Odp: 128K --> 48K (USR0) z poziomu loadera
« Odpowiedź #21 dnia: 2013.04.03, 21:40:38 »
Ta wersja z trainerem jest właśnie spakowana.
W ogóle dziwna sprawa, bo w niej w scrollu pod menu litery są przesunięte o 1 pixel. I ta wersja nie gada.

ikci

  • *****
  • Wiadomości: 1216
  • Miejsce pobytu:
    Kraków
Odp: 128K --> 48K (USR0) z poziomu loadera
« Odpowiedź #22 dnia: 2013.04.03, 21:45:47 »
Tak.. ta wersja z trainerem nie gada... Poza tym to jedyna wersja jaką spotkałem która po załadowaniu gry wymaga
kliknięcia w ENTER aby się uruchomic. Pozostałe wersje same przechodzą do menu wyboru kontrolerów.

A co to działania pliku TAP stworzonego przez Mata... odpalałem na Spectaculatorze i działa...
ale teraz sprawdziłem na SpecEmu i rzeczywiście pojawia się błąd DRIVE NOT READY, 90:1

EDIT: Na FUSE też ten sam błąd...
 
« Ostatnia zmiana: 2013.04.03, 21:59:21 wysłana przez ikci »
ZX Spectrum 48K, ZX Spectrum +, ZX Spectrum 128K, ZX Spectrum +2, ZX Spectrum +2B, ZX Spectrum +3, TIMEX TC2048, UNIPOLBRIT Komputer 2068, Didaktik Gama 80kB, 
Amstrad/Schneider CPC6128, Schneider CPC464, Commodore C64, Atari 800XL, 65XE 130XE, A500+, A600, A1200, ATARI 1040 STF

Phonex

  • *****
  • Wiadomości: 1261
  • Miejsce pobytu:
    Warszawa
Odp: 128K --> 48K (USR0) z poziomu loadera
« Odpowiedź #23 dnia: 2013.04.03, 22:08:40 »
Na Spinie też jest "Drive not ready, 90:1".
Skoro na realu też jest błąd to znaczy że Spin i SpecEmu lepiej emulują +3 niż Spectaculator ?
Trzeba nacisnąć klawisz, bo jak naciśniesz T to jest trainer  :)

Na Spinie ta pierwsza wersja (bez nagłówków) też nie gada! I scroll na dole jest skaszaniony. Dopiero przerobiona przez Mata zaczęła gadać i scroll jest OK.

ikci

  • *****
  • Wiadomości: 1216
  • Miejsce pobytu:
    Kraków
Odp: 128K --> 48K (USR0) z poziomu loadera
« Odpowiedź #24 dnia: 2013.04.03, 22:15:25 »
Na Spinie też jest "Drive not ready, 90:1".
Skoro na realu też jest błąd to znaczy że Spin i SpecEmu lepiej emulują +3 niż Spectaculator ?

A sprawdzał ktos na na realu?

Co do jakości emulacji Spectaculatora.. właśnie zacząłem się o to martwić.
To jeden z niewielu programów za który zapłaciłem  ;D
ZX Spectrum 48K, ZX Spectrum +, ZX Spectrum 128K, ZX Spectrum +2, ZX Spectrum +2B, ZX Spectrum +3, TIMEX TC2048, UNIPOLBRIT Komputer 2068, Didaktik Gama 80kB, 
Amstrad/Schneider CPC6128, Schneider CPC464, Commodore C64, Atari 800XL, 65XE 130XE, A500+, A600, A1200, ATARI 1040 STF

Phonex

  • *****
  • Wiadomości: 1261
  • Miejsce pobytu:
    Warszawa
Odp: 128K --> 48K (USR0) z poziomu loadera
« Odpowiedź #25 dnia: 2013.04.03, 22:48:52 »
Ups.
Ja myślałem że Ty sprawdzałeś. Że na emulatorze działa, a na realu (+3Dos) nie.
Sorry, czytałem za szybko...

matofesi

  • *****
  • Wiadomości: 2049
  • Miejsce pobytu:
    Toruń/Poland
Odp: 128K --> 48K (USR0) z poziomu loadera
« Odpowiedź #26 dnia: 2013.04.04, 09:05:57 »
No dobra... Tak jak pisałem - przerobiłem pliki i procedurę ładującą. Loader w BASICu wygląda teraz tak:
10 clear 24999
20 load "" screen$
30 load "" code : randomize usr 25000
40 load "" code : randomize usr 25000
50 load "" code : randomize usr 25000

W załączniku TAP, w którym tym razem zmieniłem kolejność - najpierw loader potem screen, banki i na koniec główny blok. Każdy z banków ma na początku skok na koniec a tam procedurkę:
move_it:
        di
        ld a,$10+BANK
        ld bc,$7ffd
        out (c),a
        ld hl,start
        ld de,$c000
        ld bc,move_it-start
        ldir
        ld a,$10
        ld bc,$7ffd
        out (c),a
        ei
        ret

Główny blok jest identyczny jak poprzednio - ładuje się do głównego RAMu, ustawia stos, przerzuca dane i skacze na początek programu.

Tym razem sprawdziłem TAPa - w FUSE odpalonym w trybie +3 ładuje się i odpala bez problemów :)

W załączniku oczywiście również binarne pliki do wrzucenia na dyskietkę :)

Phonex

  • *****
  • Wiadomości: 1261
  • Miejsce pobytu:
    Warszawa
Odp: 128K --> 48K (USR0) z poziomu loadera
« Odpowiedź #27 dnia: 2013.04.04, 09:25:14 »
A wymyśliłeś może czemu poprzedni tap działał na +2, a na +3 nie?

matofesi

  • *****
  • Wiadomości: 2049
  • Miejsce pobytu:
    Toruń/Poland
Odp: 128K --> 48K (USR0) z poziomu loadera
« Odpowiedź #28 dnia: 2013.04.04, 09:43:37 »
Stawiam na inną obsługę przerwań i to, że jak ładujesz na +3 z taśmy to on najpierw usiłuje sprawdzić, czy ma dyskietkę i prawdopodobnie coś mu tam przestawia banki. Ale szczerze powiedziawszy dodatkowych ROMów +3 nie oglądałem więc nie jestem pewien o co dokładnie chodzi - wiem, że przełączanie z BASICa banków na tym modelu wymaga dodatkowej ostrożności: ludzie robią OUT+POKE i jeszcze po tej operacji czekają ramkę albo dwie zanim efekt przełączenia faktycznie zacznie działać.

ikci

  • *****
  • Wiadomości: 1216
  • Miejsce pobytu:
    Kraków
Odp: 128K --> 48K (USR0) z poziomu loadera
« Odpowiedź #29 dnia: 2013.04.04, 10:06:32 »
No i BRAVOOOOOOOO!  Owacje na stojąco!
Tym razem sprawdzałem na czterech emulatorach i na KAZDYM chodzi!

MAT, JESTEŚ WIELKI!

W załączniku gotowy obraz dysku w formacie +3DOS

Jeszcze raz bardzo dziękuję!!
ZX Spectrum 48K, ZX Spectrum +, ZX Spectrum 128K, ZX Spectrum +2, ZX Spectrum +2B, ZX Spectrum +3, TIMEX TC2048, UNIPOLBRIT Komputer 2068, Didaktik Gama 80kB, 
Amstrad/Schneider CPC6128, Schneider CPC464, Commodore C64, Atari 800XL, 65XE 130XE, A500+, A600, A1200, ATARI 1040 STF