Autor Wątek: Analiza składni TOS  (Przeczytany 9132 razy)

aqqman

  • ***
  • Wiadomości: 171
  • Miejsce pobytu:
    Milky Way
Odp: Analiza składni TOS
« Odpowiedź #15 dnia: 2024.10.13, 22:08:51 »
To jest komplet, teraz mam wszystko bardziej niż wyczerpująco. Fascynujące, mogę teraz interpreter stworzyć, odtworzyć, przetworzyć...
Dzięki
2 x TC2068 na sterydach:
- TC2160 - 160kBRAM
- TC2176 - 176kB RAM - 2xscreen, 2xROM
FDD3000

ArturM

  • ***
  • Wiadomości: 228
  • Miejsce pobytu:
    GZM
Odp: Analiza składni TOS
« Odpowiedź #16 dnia: 2024.10.14, 08:56:31 »
Zacząłem to powolutku analizować.
(...)
;TOS commands analyze jump table
00c5h
...
+10h defw    01cah ; get optional 'N' parameter
...
Zapewne analizowałeś tą procedurę. Nie potrafię do niczego przypisać testowania czy jako opcjonalny parametr to znak o kodzie 01ah. Przecież tam jest dziura w kodach ZX-a... Powinno raczej testować ":" (03ah).

01ca 7e        ld      a,(hl)           ; get char
01cb e6df      and     0dfh             ; make capital letter
01cd fe4e      cp      4eh              ; is "N"?
01cf 2810      jr      z,01e1h          ; ok, set flag in notepad ram
01d1 fe0d      cp      0dh              ; is new line?
01d3 2807      jr      z,01dch          ; ok, reset flag in notepad ram
01d5 fe1a      cp      1ah              ; is chr(26)?
01d7 2803      jr      z,01dch          ; also reset flag
01d9 c36a04    jp      046ah            ; otherwise raise "Nonsense in Basic"
01dc af        xor     a                ; clear flags
01dd 323421    ld      (2134h),a        ; and store
01e0 c9        ret
 
01e1 3e01      ld      a,01h            ; set flag
01e3 323421    ld      (2134h),a        ; and store
01e6 cd1d03    call    031dh            ; call NEXT-CHAR
01e9 2000      defw    0020h            ;
01eb c9        ret                      ; return

I jeszcze jedno. W przypadku poleceń LET i MOVE powinno się analizować czy istnieje keyword 'TO' między ciągami (offset +12), a tam występuje wyszukiwanie wymuszonego keyworda 'AT' przez procedurę o offsecie +04.
ZX 48 | HQ 48 SMD | Sizif-512 | FDD3000 | SFDD3500 | M-397 Multiinterface | DivMMC AY - KiCad user | PCB Designer

ArturM

  • ***
  • Wiadomości: 228
  • Miejsce pobytu:
    GZM
Odp: Analiza składni TOS
« Odpowiedź #17 dnia: 2024.10.14, 10:38:15 »
Dobra. Zaćmienie poranne.  :-[ Przecież najpierw jest kasowany bit 5 więc z 03ah zostanie właśnie 01ah. :facepalm:
ZX 48 | HQ 48 SMD | Sizif-512 | FDD3000 | SFDD3500 | M-397 Multiinterface | DivMMC AY - KiCad user | PCB Designer

trojacek

  • *****
  • Wiadomości: 6964
  • Miejsce pobytu:
    Warszawa
Odp: Analiza składni TOS
« Odpowiedź #18 dnia: 2024.10.14, 13:36:58 »
Wiesz, ja wszystkiego tak do końca nie posprawdzałem, bo już mi się nie chciało ;)
Tak więc ponowna weryfikacja jest jak najbardziej pożądana, dziękuję.


EDIT: Aha, jeszcze:

W przypadku poleceń LET i MOVE powinno się analizować czy istnieje keyword 'TO' między ciągami (offset +12), a tam występuje wyszukiwanie wymuszonego keyworda 'AT' przez procedurę o offsecie +04.

Tajemnica tkwi w tej linii:
0121 d620      sub     20h
« Ostatnia zmiana: 2024.10.14, 15:21:20 wysłana przez trojacek »

trojacek

  • *****
  • Wiadomości: 6964
  • Miejsce pobytu:
    Warszawa
Odp: Analiza składni TOS
« Odpowiedź #19 dnia: 2024.10.17, 20:43:44 »
no i ten zerowy adres od INPUT.

No to tak, by domknąć temat :)
W odróżnieniu od innych pozycji w tabeli 00C5h, kod o offsecie +20h (czyli ten specjalny dla INPUT), czyli 07a4h, nie wraca do procedury analizy składni, tylko kontynuuje analizę parametrów i bezpośrednio wykonuje komendę.
Ale jeszcze nie wszystko do końca tu rozkminiłem:

; get VAR$ with optional AT INT and execute INPUT#*
07a4 cd4506    call    0645h ; find VAR$
07a7 7e        ld      a,(hl) ; var name
07a8 3012      jr      nc,07bch ; nc = found
07aa fe61      cp      61h ; 'a'
07ac 3802      jr      c,07b0h
07ae d620      sub     20h ; only letters, upper case
07b0 f680      or      80h ; set b7
07b2 47        ld      b,a ; preserve
07b3 23        inc     hl ;
07b4 7e        ld      a,(hl)
07b5 fe24      cp      24h ; '$'
07b7 c26a04    jp      nz,046ah ; exit with INT error
07ba 2b        dec     hl ; one char before (a$ etc.)
07bb 78        ld      a,b ; restore code ?
07bc 323621    ld      (2136h),a
07bf 224921    ld      (2149h),hl ; VAR$ address
07c2 cb7e      bit     7,(hl) ;
07c4 2808      jr      z,07ceh
07c6 23        inc     hl ;
07c7 23        inc     hl
07c8 23        inc     hl
07c9 7e        ld      a,(hl) ;
07ca 3d        dec     a
07cb c26a04    jp      nz,046ah ; exit with INT error
07ce 79        ld      a,c
07cf e660      and     60h ; 0110 0000
07d1 fe40      cp      40h ; 0100 0000
07d3 c26a04    jp      nz,046ah ; exit with INT error
07d6 cd8201    call    0182h ; optionally expect ';' and get INT
07d9 cd4901    call    0149h ; 'validate' syntax
07dc 0610      ld      b,10h ; loop counter
07de cd4703    call    0347h ; remove b stack entries, then execute, then back here or back to Basic (bit 7,(iy+01h) - FLAGS (0 - syntax, 1 - exec))
07e1 21df06    ld      hl,06dfh
07e4 e5        push    hl
07e5 cd2f07    call    072fh
07e8 c0        ret     nz
07e9 3a0420    ld      a,(2004h)
07ec b7        or      a
07ed 2029      jr      nz,0818h
07ef 3a3421    ld      a,(2134h)
07f2 ed5b4b21  ld      de,(214bh)
07f6 0e00      ld      c,00h
07f8 cd940d    call    0d94h
07fb c5        push    bc
07fc cd2906    call    0629h
07ff c1        pop     bc
0800 cd1f08    call    081fh
0803 3a3621    ld      a,(2136h)
0806 e67f      and     7fh
0808 77        ld      (hl),a
0809 23        inc     hl
080a 71        ld      (hl),c
080b 23        inc     hl
080c 70        ld      (hl),b
080d 23        inc     hl
080e 110020    ld      de,2000h
0811 eb        ex      de,hl
0812 78        ld      a,b
0813 b1        or      c
0814 c8        ret     z
0815 edb0      ldir
0817 c9        ret
« Ostatnia zmiana: 2024.10.17, 21:16:37 wysłana przez trojacek »

ArturM

  • ***
  • Wiadomości: 228
  • Miejsce pobytu:
    GZM
Odp: Analiza składni TOS
« Odpowiedź #20 dnia: 2024.10.18, 09:27:58 »
A tak abstrahując od głównego tematu. Może napiszemy wspólnie jakąś e-książkę pod patronatem speccy.pl na temat FDD3/3000 i jej systemu TOS? Skoro jest coraz mniej "białych plam"...
Taki nie tylko podręcznik użytkownika, ale też techniczny manual.
ZX 48 | HQ 48 SMD | Sizif-512 | FDD3000 | SFDD3500 | M-397 Multiinterface | DivMMC AY - KiCad user | PCB Designer

trojacek

  • *****
  • Wiadomości: 6964
  • Miejsce pobytu:
    Warszawa
Odp: Analiza składni TOS
« Odpowiedź #21 dnia: 2024.10.18, 09:39:01 »
IMHO, tych białych plam jest nadal zbyt dużo.
Ale pomysł fajny :)
« Ostatnia zmiana: 2024.10.18, 11:16:08 wysłana przez trojacek »

aqqman

  • ***
  • Wiadomości: 171
  • Miejsce pobytu:
    Milky Way
Odp: Analiza składni TOS
« Odpowiedź #22 dnia: 2024.10.20, 20:05:55 »
A tak abstrahując od głównego tematu. Może napiszemy wspólnie jakąś e-książkę pod patronatem speccy.pl na temat FDD3/3000 i jej systemu TOS? Skoro jest coraz mniej "białych plam"...
Taki nie tylko podręcznik użytkownika, ale też techniczny manual.
W sumie to skany jakieś są na FTP. TOSem jako takim, tym co siedzi w FDD się specjalnie nie interesowałem z poziomu asm bo i nie było potrzeby.
Co innego ROM interfejsu. Cały przeanalizowałem i zbudowałem sobie coś co ma od strony Timexa zachowywać się jak TOS (*jakaś* zgodność zarówno w Basic jak i z poziomu assemblera) a z drugiej strony ma kartę SD z FATem jako jedną olbrzymią 'dyskietkę'. Jestem na etapie interpretacji komend Interfejs <-> FDD po stronie kontrolera SD.Marzy mi się aby programy które współpracowały z FDD3000 działały mi z tym bez żadnych modyfikacji + może jakieś 'extrasy' w postaci czytania tap-ów, sna-pów itp
2 x TC2068 na sterydach:
- TC2160 - 160kBRAM
- TC2176 - 176kB RAM - 2xscreen, 2xROM
FDD3000

pawelb

  • ***
  • Wiadomości: 238
  • Miejsce pobytu:
    Wawa
Odp: Analiza składni TOS
« Odpowiedź #23 dnia: 2024.10.21, 10:40:18 »
Super pomysł!
Ja myślałem by wykorzystać bazę Dandanator by wgrywać z internetu gry.
Skończyło się na pomyśle i odłożeniu na później. 
Założenie jest takie by zamiast przystawki Multiply podłączyć np ESP32 z WIFI które będzie serwisowało pliki dla Dandanatora.

Pozdr.

paroos

  • *****
  • Wiadomości: 695
  • Miejsce pobytu:
    BB
Odp: Analiza składni TOS
« Odpowiedź #24 dnia: 2024.10.21, 12:12:18 »
(...) zbudowałem sobie coś co ma od strony Timexa zachowywać się jak TOS (*jakaś* zgodność zarówno w Basic jak i z poziomu assemblera) a z drugiej strony ma kartę SD z FATem jako jedną olbrzymią 'dyskietkę'. Jestem na etapie interpretacji komend Interfejs <-> FDD po stronie kontrolera SD.

Podoba mi się to rozwiązanie.
Ma w sobie jakąś finezję.
Trzymam kciuki :)
Z80 --> 48K, 48K+, 128K+2/+3, CPC 464/6128, C128D, Canon V-20, Panasonic FS-A1F, Sega SC-1000, Enterprise 64, NEC PC-6601/PC-8001/PC-8801mkII SR, Sharp MZ-700/MZ-2521, Sharp-X1C, Toshiba Pasopia 7, Sord M5 :)

aqqman

  • ***
  • Wiadomości: 171
  • Miejsce pobytu:
    Milky Way
Odp: Analiza składni TOS
« Odpowiedź #25 dnia: 2024.10.21, 22:13:59 »
Finezję - owszem też tak pomyślałem. Mam złe doświadczenie z dandanatorem + multiply - po prostu mi się to nie podobało, jak dla mnie zbyt .. 'rubaszne' i do tego kapryśne.
Ja po prostu tęsknię za CAT*, SAVE *, LOAD * itp  :). co z tego ze mam FDD3000, jak do tego zestawu dedykowany stół jest potrzebny i w dodatku mi dyskietki, napędy spleśniały czy coś, że czasem czyta czasem nie czyta... częściej to drugie.
2 x TC2068 na sterydach:
- TC2160 - 160kBRAM
- TC2176 - 176kB RAM - 2xscreen, 2xROM
FDD3000

Maryjan

  • *****
  • Wiadomości: 6878
  • Miejsce pobytu:
    Skarżysko-Kam.
  • Scotch whiskey and West Highland Terrier
Odp: Analiza składni TOS
« Odpowiedź #26 dnia: 2024.10.21, 23:14:13 »
Nie zapominajmy o NEXT* :)
"Co miałem powiedzieć - przeczytałem..." Nikodem Dyzma

aqqman

  • ***
  • Wiadomości: 171
  • Miejsce pobytu:
    Milky Way
Odp: Analiza składni TOS
« Odpowiedź #27 dnia: 2024.10.22, 19:35:12 »
o tak, o poprawionym i działającym NEXT*  ;)
2 x TC2068 na sterydach:
- TC2160 - 160kBRAM
- TC2176 - 176kB RAM - 2xscreen, 2xROM
FDD3000