Autor Wątek: ESXDOS i komendy z kropką  (Przeczytany 33541 razy)

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Odp: ESXDOS i komendy z kropką
« Odpowiedź #15 dnia: 2018.06.14, 14:54:15 »
Tak, timexowy hires, na dodatek 80 kolumn.
Czcionka pożyczona z terminala TT3000, bo żaden mój font nie wyglądał ładnie ;)
« Ostatnia zmiana: 2018.06.14, 15:05:47 wysłana przez trojacek »

Maryjan

  • *****
  • Wiadomości: 6650
  • Miejsce pobytu:
    Skarżysko-Kam.
  • Scotch whiskey and West Highland Terrier
Odp: ESXDOS i komendy z kropką
« Odpowiedź #16 dnia: 2018.06.14, 16:25:55 »
To ten projekt, o którym rozmawialiśmy na Pixel-u ?
"Co miałem powiedzieć - przeczytałem..." Nikodem Dyzma

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Odp: ESXDOS i komendy z kropką
« Odpowiedź #17 dnia: 2018.06.14, 16:29:33 »
Oj tam, od razu projekt... Raczej przypomnienie sobie asemblera i test, na ile wystarczy mi samozaparcia, by dalej klepać kod ;)
Pewnie więc umrze jako wersja demo, wczesna beta albo nawet nie to ;)

Maryjan

  • *****
  • Wiadomości: 6650
  • Miejsce pobytu:
    Skarżysko-Kam.
  • Scotch whiskey and West Highland Terrier
Odp: ESXDOS i komendy z kropką
« Odpowiedź #18 dnia: 2018.06.14, 16:31:44 »
Ale pomysł fajny.
"Co miałem powiedzieć - przeczytałem..." Nikodem Dyzma

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Odp: ESXDOS i komendy z kropką
« Odpowiedź #19 dnia: 2018.06.14, 16:47:31 »
Dzięki. Pomysł polega na tym, by nie wykraczać z używaną pamięcią poza RAM interfejsu, a jednocześnie przechowywać i przywracać to, czego używa drugi ekran. Ale zacząłem jak zawsze od d4 strony i skupiłem się na szybkości wyświetlania. Tryb 80-kolumnowy to bieg pod górkę, i to po kamieniach. A do tego nazwy trzeba sortować, co też pożera czas.
« Ostatnia zmiana: 2019.08.28, 01:51:37 wysłana przez trojacek »

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: ESXDOS i komendy z kropką
« Odpowiedź #20 dnia: 2018.06.19, 10:55:24 »
ESXDOS oferuje możliwość czytania sekwencyjnego z pliku, zatem streaming jest jak najbardziej możliwy.

Co do użycia i przykładów - trzeba czekać aż zostanie opublikowane API.

smok.wawelski

  • ***
  • Wiadomości: 225
  • Miejsce pobytu:
    Warszawa
Odp: ESXDOS i komendy z kropką
« Odpowiedź #21 dnia: 2018.06.19, 12:31:47 »
OK streaming jest możliwy - to wiedziałem patrząc na demo Bad Apple. Chodziło mi o to, czy szybkość otwarcia pliku jest wystarczająco duża, żeby zamiast jednego wielkiego pliku mieć np. setki mniejszych plików.

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: ESXDOS i komendy z kropką
« Odpowiedź #22 dnia: 2018.06.19, 12:40:06 »
Wydaje mi się że będzie to dość szybkie, sprawdzę (za jakiś czas zapewne) i dam znać.

smok.wawelski

  • ***
  • Wiadomości: 225
  • Miejsce pobytu:
    Warszawa
Odp: ESXDOS i komendy z kropką
« Odpowiedź #23 dnia: 2018.07.17, 15:55:48 »
I jak? Coś wiadomo w temacie otwierania plików?

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: ESXDOS i komendy z kropką
« Odpowiedź #24 dnia: 2018.07.18, 10:16:21 »
Jeszcze za to się nie zabrałem, dzięki za przypomnienie.

smok.wawelski

  • ***
  • Wiadomości: 225
  • Miejsce pobytu:
    Warszawa
Odp: ESXDOS i komendy z kropką
« Odpowiedź #25 dnia: 2019.01.13, 22:59:01 »
Ok, znalazłem sobie przykład na zmianę pozycji w pliku do odczytu (SEEK) i samego odczytu pliku w asemblerze:

fRead:
             ld   ix, 16384          ; ix = address where to store what is read
             ld   bc, 6912           ; bc = bytes to read
             ld   a, filehandle      ; a  = the file handler
             rst  $08
             db   F_READ             ; read file
             ret


Rozumiem, że cała magia dzieje się w linijce  rst  $08?
Ponieważ korzystam z Boriel Basica i w asemblerze piszę tylko wstawki, to mam pytanie, czy nie będzie jakiegoś konfliktu z ROMem ZX Spectrum i ESXDOS? Boriel korzysta z ROMu w wielu miejscach. Ktoś ma doświadczenie w tej kwestii?

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Odp: ESXDOS i komendy z kropką
« Odpowiedź #26 dnia: 2019.01.13, 23:19:22 »
RST 8 przełącza ROM na ESXDOS, po rozkazie jest kod funkcji do wywołania.
Trochę się bawiłem wywołaniami ESXDOS, może Ci coś będę mógł pomóc.

smok.wawelski

  • ***
  • Wiadomości: 225
  • Miejsce pobytu:
    Warszawa
Odp: ESXDOS i komendy z kropką
« Odpowiedź #27 dnia: 2019.01.13, 23:32:13 »
Aaa OK. To już wszystko rozumiem. Po rst 8 i wywołaniu funkcji jest powrót do oryginalnego ROMu ZX?
Przetestuje sobie i dam znać czy wszystko działa (chcę załadować obrazek pod 16384).

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Odp: ESXDOS i komendy z kropką
« Odpowiedź #28 dnia: 2019.01.14, 00:10:45 »
Hmm, na razie mam tylko doświadczenie z pisaniem komend z kropką, które się uruchamiają w pamięci interfejsu, czyli ROM ESXDOS jest wtedy załączony i nie trzeba żadnych sztuczek (a nawet odwrotnie, można wtedy wołać procedury z ZX ROM).

Trochę na temat przełączania jest napisane na stronie Velesofta:
https://velesoft.speccy.cz/zx/divide/divide-memory.htm

Wspomnianych jest kilka specjalnych adresów (0000h, 0008h, 0038h, 0066h, 04c6h and 0562h), które są dekodowane sprzętowo. Da ostatnie służą do powrotu do ROM-u z Basicem.

Adresy 0000, 0008 włączają ROM divIDE/MMC, a żeby go wyłączyć, pobrany musi być rozkaz z zakresu 1FF8h-1FFFh.
W tym miejscu znajdziemy:

1FF8 C9        RET     

1FF9 FB        EI     
1FFA C9        RET     

1FFB E9        JP      (HL)
1FFC FF        RST     38H
1FFD FF        RST     38H
1FFE FF        RST     38H
1FFF FF        RST     38H

Najprościej więc odłożyć na stos adres powrotu i wykonać JP 1FF8H (bez włączania przerwań) lub JP 1FF9H (z włączeniem przerwań).
Albo też adres powrotu zapakować do HL i wykonać JP 1FFBH.


Tych adresów nie należy wywoływać bezpośrednio, bo komputer się zwiesi lub wyresetuje przy powrocie do Basica.
Do "gładkiego" powrotu do ZX ROM służą dwie procedury pod adresami 04c6h oraz 0562h. Nie wiem jeszcze, czym się od siebie różnią.

Aaa OK. To już wszystko rozumiem. Po rst 8 i wywołaniu funkcji jest powrót do oryginalnego ROMu ZX?
Przetestuje sobie i dam znać czy wszystko działa (chcę załadować obrazek pod 16384).

Funkcje wywoływane przez RST 8 w większości przypadków wracają włączając ROM sprzed wywołania. Czyli:
- Wywołanie z włączonym ZX ROM rozkazu RST 8 wywoła wskazaną funkcję ESXDOS i nastąpi powrót do ZX ROM.
- Wywołanie z wyłączonym ZX ROM rozkazu RST 8 wywoła wskazaną funkcję ESXDOS (lub ZX ROM) i nie nastąpi powrót do ZX ROM.

I jeszcze jedna uwaga: komendy z kropką są ładowane do pamięci RAM divIDE pod adres 2000h i potem następuje skok pod ten adres. Warto pamiętać, że ZX ROM jest wtedy nieaktywny i nie ma dostępu np. do czcionki systemowej.

Sprawa nie mniej istotna - wywołanie funkcji ESXDOS wymaga podania nie tylko numeru funkcji bezpośrednio po rozkazie RST 8, ale nierzadko również jakichś parametrów, najczęściej w A oraz w HL. Ale taką uwagę znalazłem w opisie API, ale jeszcze nie przetestowałem: gdy wywołanie następuje z poziomu ZX ROM, zamiast HL należy używać IX.

Sprawa (na razie) ostatnia - gdy musimy zajrzeć do drugiego ROM-u na chwilę, możemy wykonać rozkaz OUT 227. Najstarszy bit wskazuje, który ROM będzie włączony:
0 - ZX ROM,
1 - ESXDOS.
Takiego przełączenia można bezpiecznie dokonać tylko kodem spod adresów 4000h-FFFFh oczywiście.
« Ostatnia zmiana: 2019.09.22, 21:33:18 wysłana przez trojacek »

smok.wawelski

  • ***
  • Wiadomości: 225
  • Miejsce pobytu:
    Warszawa
Odp: ESXDOS i komendy z kropką
« Odpowiedź #29 dnia: 2019.01.21, 23:09:39 »
Po pierwsze: sukces!

Po drugie: głupi jestem bo nie zauważyłem, że w Borielu jest już cała biblioteka do obsługi esxdosa.
Parę ciekawostek:
- pod RVM (retro virtual machine) udaje mi się uzyskać ok. 8 FPS przy ładowaniu pełnego obrazka 6912 bajtów z oddzielnych plików. Spróbuję z jednym plikiem i komendą seek() i tylko z 6144 bajtami. Cel: 25 fps.
- esxdos wiesza się, kiedy próbuję odczytać MNIEJ bajtów niż ma plik ale nie wiesza się, jeśli spróbuję ładować WIĘCEJ niż ma plik. Dziwna sprawa.

EDIT:
Przy wykorzystaniu pojedynczego pliku i zmianie pozycji w pliku udało się dojść do 28 FPS przy odczycie 6144 bajtów (bez atrybutów) i 23 FPS z atrybutami
« Ostatnia zmiana: 2019.01.22, 00:12:21 wysłana przez smok.wawelski »