OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 10.09.2024, 16:05

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 639 ]  Přejít na stránku Předchozí  1 ... 39, 40, 41, 42, 43
Autor Zpráva
 Předmět příspěvku: Re: Macro FORTH
PříspěvekNapsal: 04.09.2024, 15:48 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3798
Bydliště: Bratislava
Has thanked: 375 times
Been thanked: 811 times
_dworkin píše:
...jediny "print"...
...a odmitneme jako podvadeni...
...muze v klidu pouzit nejake tabulky pro nasobeni...
Nieeee, myslim ten isty algoritmus, akurat implementovany priamo v assembleri.
_dworkin píše:
jen by se u toho pekne zapotil.
Tak to suhlasim. Ale podla mna by sa nezapotil viac, nez si ty venoval casu vyvoju vsetkeho co k tomtu algoritmu treba vo Forthe :)
_dworkin píše:
Kód:
for ( i = 0; i<0x10000; i++ )
A ten kod si sebral kde?
Skopiroval som ho z toho zdrojaku divmod_x.c ktory si prilozil ako prilohu.
_dworkin píše:
Busy píše:
...si sa dostal pod peknych okruhlych 3072 bajtov :thumbup:
Dalsia meta by bola 2048 bajtov ;)
Ale ja to pisi dekadicky a ne hexadecimalne takze je to docela skryto.
Tu nejde o to ci je to dekadicky alebo hexadecimalne ale to ze tie cisla su (iteckami tak milovane) mocniny dvojky, alebo s maximalne jednym inym prvocinitelom ako 2.
_dworkin píše:
Hodne bude asi zabirat podpora vsech moznych kombinaci parametru pro printf...
To je pravda. Vo vseobecnosti mozes do printf poslat za behu akykolvek formatovaci retazec, kompiler preto nevie vopred co tam bude a preto do kodu musi vzdy dat kompletnu obsluhu printf.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Macro FORTH
PříspěvekNapsal: 04.09.2024, 16:11 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1295
Has thanked: 102 times
Been thanked: 195 times
divmod_x je ale muj pomocnik na nalezeni vhodne metody jaky napsat algoritmus, ktery ti vypisuje nejake hodnoty pro ruzne metody... aspon omezeny vycet, optimalni muze minout. Je to tu pro nekoho v budoucnoti, kdo by se tim chtel zabyvat, pokud dokaze rozlustit co mu to vlastne ukazuje (pozna zda to cislo je "i" a nebo "i+1" a proc to ukazuje takhle a ne takto... tak je to uzitecne.

To s tim benchmarkem nema nic spolecneho.

Divam se na ten C vystup po disassemblovani, protoze jeho vystup neukazuje zadny kod co produkuje v knihovne.
A musim se znovu opravit s tim delenim mocniny dvou. Nema to "inline" ale misto volani vola fci pro shift doprava s parametrem "kolikrat", pokud je ten posun mensi jak 8. Inline ma jen pro deleni 2, 4, 256 a 512.
Od 1024 zase vola univerzalni rutinu pro deleni...

Jinak jsem tam narazil uz na kod

RET
RET

A jestli se tam fakt schovava nekde nasobeni... hledat nebudu. Ale muzete to zjistit v souboru s castecne rucne editovanymi popisky https://codeberg.org/DW0RKiN/M4_FORTH/s ... udiv_c.asm

PS: Nasel jsem ze ty promenne check a tmp uklada v te vynulovane casti uplne na konci.

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Macro FORTH
PříspěvekNapsal: 05.09.2024, 15:01 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1295
Has thanked: 102 times
Been thanked: 195 times
Male pohadka o 16 bitovem neznamenkovem deleni cislem 46 na procesoru Z80.
Bylo nebylo, za sedmero webovyma strankama se na oldcomp.cz resilo deleni cislem 46.
Kdyz se TO (z Lovercrafta) prochazelo ohradou plnou deleni od nejnizsich cisel a divalo se jak se pekne pasou a zkoumalo, zda be nebylo lepsi nejake trosku ostrihat se podivalo na deleni 23 a reklo si: "Hmm, docela pekne, necham to byt".
My se na deleni 23 muzeme take podivat v tomto vypisu, je hned za tema dvema instrukcema co deli dvema. (...za temi dvemi instrukcemi co deli dvemi...? studujte deti, studujte... at mate co zapominat)
Kód:
dworkin@dw-A15:~/Programovani/ZX/Forth/Pasmo_test$ ../check_word.sh '_46UDIV'
  ; Work in progress... Need to find a better solution.
                        ;[4:16]     46u/   Variant HL/2 = HL >> 1
    srl   H             ; 2:8       46u/
    rr    L             ; 2:8       46u/         HL >>= 1
  ;# num16bit =              256*hi8bit + lo8bit
  ;# num16bit = 11*23*hi8bit + 3*hi8bit + lo8bit
                       ;[33:251]    46u/   Variant HL/23 = 11*H+((3*H+L)*11.1289+11)/256
    ld    B, 0x00       ; 2:7       46u/
    ld    C, H          ; 1:4       46u/   BC = hi8bit
    ld    A, H          ; 1:4       46u/   A = save hi8bit for after
    ld    H, B          ; 1:4       46u/   HL = lo8bit
    add  HL, BC         ; 1:11      46u/   HL = hi8bit+lo8bit
    add  HL, BC         ; 1:11      46u/   HL = 2*hi8bit+lo8bit
    add  HL, BC         ; 1:11      46u/   HL = 3*hi8bit+lo8bit = 0..1020
    inc  HL             ; 1:6       46u/   +11 round up
    ld    B, H          ; 1:4       46u/
    ld    C, L          ; 1:4       46u/   1x = base
    add  HL, HL         ; 1:11      46u/   2x
    add  HL, HL         ; 1:11      46u/   4x
    add  HL, BC         ; 1:11      46u/   5x
    add  HL, HL         ; 1:11      46u/   10x
    add  HL, BC         ; 1:11      46u/   11x
    ld    B, 0x00       ; 2:7       46u/   
    ld    C, H          ; 1:4       46u/
    add  HL, BC         ; 1:11      46u/   11+11/256
    add  HL, BC         ; 1:11      46u/   11+11/128
    add  HL, BC         ; 1:11      46u/   11+11/128+11/256 = 11.1289x = 0..11362
    ld    C, A          ; 1:4       46u/   BC = hi8bit
    ld    A, H          ; 1:4       46u/
    ld    H, B          ; 1:4       46u/
    ld    L, C          ; 1:4       46u/   1x
    add  HL, HL         ; 1:11      46u/   2x
    add  HL, HL         ; 1:11      46u/   4x
    add  HL, BC         ; 1:11      46u/   5x
    add  HL, HL         ; 1:11      46u/   10x
    add  HL, BC         ; 1:11      46u/   11x
    ld    C, A          ; 1:4       46u/
    add  HL, BC         ; 1:11      46u/   11*hi8bit+0..44
; seconds: 0           ;[37:267]


33 bajtu a 251 taktu. Rozkosne, nemyslite deti?

TO prochazelo dal a postupne se zalibne divalo na deleni a nebo se je pokusilo, tu a tam trosku ostruhnout, aby byla mensi a hbitejsi.
Kupodivu platilo, ze kdyby je ostrihalo prilis, tak uz by moc hbita nebyla... .)
Takze strihalo s mirou deti, zadna krev a ustrihle koncetiny...
Hmm.. to posledni jsem nerekl.
A narazilo na cislo 46.
Deleni 46 vypadalo presne jako predchozi vypis. Bylo stejne jako deleni 23 ale s nahubkem kde bylo deleni dvema.
Vypadalo to celkem nechutne... Osklive... Nevabne...

TO se teda podivalo znovu na deleni 23 a pokusilo se vytvorit jine, ktere by vypadalo s nahubkem deleni dvema chutne... Krasne... Vabne... Vice integrovane...
A TO selhalo... znovu a znovu...
At TO strihalo jak strihalo... nic pekneho z toho nevzeslo... a nebo to bylo pekne, ale uz se to vubec nehybalo...
Tak se TO vratilo k cislu 46 a pokusilo se ostrihat to.
A vzeslo z toho neco jako...
Kód:
dworkin@dw-A15:~/Programovani/ZX/Forth/Pasmo_test$ ../check_word.sh '_46UDIV'
  ;# n*256/46 >> 8 = 5.565217 >> 8
  ;# 256*0.565217 = 144.695652
  ;# 256*0.695652 = 178.086957
  ;# Variant HL/46 = HL*(256/46)>>8 = HL*5.565217>>8 = HL*(5+(144+178/256)/256)>>8
                       ;[42:262]    46u/   Variant HL/46 = HL*(256/46)>>8 = HL*5.565217>>8 = HL*(5+(144+178/256)/256)>>8
    ld    B, H          ; 1:4       46u/
    ld    C, L          ; 1:4       46u/   1x base
    xor   A             ; 1:4       46u/   
    add  HL, HL         ; 1:11      46u/ 
    inc  HL             ; 1:6       46u/   rounding constant
    adc   A, A          ; 1:4       46u/   2x
    add  HL, HL         ; 1:11      46u/ 
    adc   A, A          ; 1:4       46u/   4x
    add  HL, BC         ; 1:11      46u/ 
    adc   A, 0x00       ; 2:7       46u/   5x
    push HL             ; 1:11      46u/
    push AF             ; 1:11      46u/   
    add  HL, HL         ; 1:11      46u/ 
    adc   A, A          ; 1:4       46u/   10x
    sbc  HL, BC         ; 2:15      46u/ 
    sbc   A, 0x00       ; 2:7       46u/   9x
    add  HL, HL         ; 1:11      46u/ 
    adc   A, A          ; 1:4       46u/   18x
    add  HL, HL         ; 1:11      46u/ 
    adc   A, A          ; 1:4       46u/   36x
    ld    C, A          ; 1:4       46u/   36
    add  HL, HL         ; 1:11      46u/ 
    adc   A, A          ; 1:4       46u/   72x
    add  HL, HL         ; 1:11      46u/ 
    adc   A, A          ; 1:4       46u/   144
    ld    B, A          ; 1:4       46u/
    add   A, C          ; 1:4       46u/   144+36=180
    add   A, H          ; 1:4       46u/
    ld    C, A          ; 1:4       46u/
    jr   nc, $+3        ; 2:7/12    46u/
    inc   B             ; 1:4       46u/   (144+180/256)/256
    pop  AF             ; 1:10      46u/
    pop  HL             ; 1:10      46u/
    add  HL, BC         ; 1:11      46u/   144.7031/256
    adc   A, 0x00       ; 2:7       46u/   
    ld    L, H          ; 1:4       46u/
    ld    H, A          ; 1:4       46u/   HL*(5+(144+178/256)/256)>>8
; seconds: 1           ;[42:262]

Ale to bylo oproti 37:267 o celych 5 bajtu tucnejsi a jen o 5 taktu rychleji...
A TO melo pravidlo ze jeden bajt je stejny jako 4 takty.
Takze nad tim TO ohrnulo nos a strihalo dal...
Kód:
dworkin@dw-A15:~/Programovani/ZX/Forth/Pasmo_test$ ../check_word.sh '_46UDIV'
  ;# n*256/46 >> 8 = 5.565217 >> 8
  ;# 256*0.565217 = 144.695652
  ;# 256*0.695652 = 178.086957
  ;# Variant HL/46 = HL*(256/46)>>8 = HL*5.565217>>8 = HL*(5+(144+178/256)/256)>>8
                       ;[41:266]    46u/   Variant HL/46 = HL*(256/46)>>8 = HL*5.565217>>8 = HL*(5+(144+178/256)/256)>>8
    ld    B, H          ; 1:4       46u/
    ld    C, L          ; 1:4       46u/   1x base
    xor   A             ; 1:4       46u/   
    add  HL, HL         ; 1:11      46u/ 
    inc  HL             ; 1:6       46u/   rounding constant
    adc   A, A          ; 1:4       46u/   2x
    add  HL, HL         ; 1:11      46u/ 
    adc   A, A          ; 1:4       46u/   4x
    add  HL, BC         ; 1:11      46u/ 
    adc   A, 0x00       ; 2:7       46u/   5x
    push HL             ; 1:11      46u/
    push AF             ; 1:11      46u/   
    add  HL, HL         ; 1:11      46u/ 
    adc   A, A          ; 1:4       46u/   10x
    sbc  HL, BC         ; 2:15      46u/ 
    ld    B, 0x00       ; 2:7       46u/
    sbc   A, B          ; 1:4       46u/   9x
    add  HL, HL         ; 1:11      46u/ 
    adc   A, A          ; 1:4       46u/   18x
    add  HL, HL         ; 1:11      46u/ 
    adc   A, A          ; 1:4       46u/   36x
    ld    C, A          ; 1:4       46u/   36
    add  HL, HL         ; 1:11      46u/ 
    adc   A, A          ; 1:4       46u/   72x
    add  HL, HL         ; 1:11      46u/ 
    adc   A, A          ; 1:4       46u/   144
    ld    L, H          ; 1:4       46u/
    ld    H, A          ; 1:4       46u/
    add   A, C          ; 1:4       46u/   144+36=180
    ld    C, A          ; 1:4       46u/
    add  HL, BC         ; 1:11      46u/ 
    pop  AF             ; 1:10      46u/
    pop  BC             ; 1:10      46u/
    add  HL, BC         ; 1:11      46u/   144.7031/256
    adc   A, 0x00       ; 2:7       46u/   
    ld    L, H          ; 1:4       46u/
    ld    H, A          ; 1:4       46u/   HL*(5+(144+178/256)/256)>>8
; seconds: 0           ;[41:266]

Ustihlo jeden bajt za cenu ze zubozene deleni se hybalo o 4 takty pomaleji...
TO usoudilo ze to neni zadna zmena...
A strihalo zarputile dal a dal...
A neustale selhavalo... kdyz ustrihlo nozicku tak se deleni prestavala prekvapive hybat...
Hadejte co deti! Kdyz deleni potrebuje nozicku na hybani, co takhle ustrihnout hlavicku!
Ano deti, ani pak se deleni nehybalo.
TO ze sebe smylo vsechnu krev a nevzdalo se...
Co kdyz ustrihnu od vseho presne 256/257?
Trosku nozicky, trosku hlavicky...
A po mnoha pokusech, kdy TO omylem ustrihlo neco jinak se podarilo!
Vsechny 3 konstanty, kterymi se nasobilo predchozi deleni jako je
5, 144 a 178 se zmenili na
11,22 a 77...
Ktere maji mezi sebou chutny, krasny, vabny pomer.
Kód:
dworkin@dw-A15:~/Programovani/ZX/Forth/Pasmo_test$ ../check_word.sh '_46UDIV'
  ;# Dont use! Just for test... Suitable for modification for division by the number 46
  ;# 257*n*(256/(23*257)) >> 8 = 257*n*11.087125697851/256 >> 8
  ;# 256*0.08712570 = 22.30417865
  ;# 256*0.30417865 = 77.86973439
                       ;[45:249]    46u/   Variant (HL/2)/23 = (HL/2)*257*65536/(23*257)>>8 = (HL/2)*257*(11+(22+77/256)/256)>>8
    ld    B, H          ; 1:4       46u/
    ld    C, L          ; 1:4       46u/   2x base
    srl   B             ; 2:8       46u/
    rr    C             ; 2:8       46u/   1x base
    xor   A             ; 1:4       46u/   
    add  HL, HL         ; 1:11      46u/ 
    adc   A, A          ; 1:4       46u/   4x
    add  HL, BC         ; 1:11      46u/ 
    adc   A, 0x00       ; 2:7       46u/   5x 
    add  HL, HL         ; 1:11      46u/ 
    adc   A, A          ; 1:4       46u/   10x
    add  HL, BC         ; 1:11      46u/ 
    adc   A, 0x00       ; 2:7       46u/   11x
    push HL             ; 1:11      46u/
    push AF             ; 1:11      46u/
    add  HL, HL         ; 1:11      46u/ 
    adc   A, A          ; 1:4       46u/   22x
    ld    B, A          ; 1:4       46u/
    rra                 ; 1:4       46u/   11
    add   A, B          ; 1:4       46u/   33
    add   A, B          ; 1:4       46u/   55
    add   A, B          ; 1:4       46u/   77
    add   A, 6          ; 2:7       46u/   rounding constant
    add   A, H          ; 1:4       46u/
    ld    C, A          ; 1:4       46u/
    jr   nc, $+3        ; 2:7/12    46u/
    inc   B             ; 1:4       46u/
    pop  AF             ; 1:10      46u/
    pop  HL             ; 1:10      46u/
    add  HL, BC         ; 1:11      46u/   
    adc   A, 0x00       ; 2:7       46u/   
    ld    B, A          ; 1:4       46u/
    ld    C, H          ; 1:4       46u/
    add  HL, BC         ; 1:11      46u/   
    adc   A, 0x00       ; 2:7       46u/   *257/256
    ld    L, H          ; 1:4       46u/
    ld    H, A          ; 1:4       46u/   (HL/2)*257*(11+(22+77/256)/256)>>8
; seconds: 0           ;[45:249]

Vysledek byl ale stale prilis velky oproti 37 o 8 bajtu.
Ale zrychleni bylo oproti 267 ktere melo deleni 23 s nahubkem deleni dvema uz o 18 taktu...
TO se na to divalo...
Jeste tomu neco chybi, 8 bajtu nahoru a deleni se ma hybat o 32 taktu rychleji...
Takhle to neni uprednostovane reseni...
Nelibil se mu to pouziti zasobniku, ale registr DE melo TO zakazane, protoze by ho muselo obnovit...
Neslo by to nejak...
Tak znovu zacalo strihat a selhavat...
A nakonec mile deti...
V ratolisti krve a odstihlych kousku...
Vzniklo neco...
Co prezilo.
I pres chybejici zasobnik...
A dokazalo se to jeste hybat...
A pekne rychle.
Kód:
dworkin@dw-A15:~/Programovani/ZX/Forth/Pasmo_test$ ../check_word.sh '_46UDIV'
  ;# 257*n*(256/(23*257)) >> 8 = 257*n*11.087125697851/256 >> 8
  ;# 256*0.08712570 = 22.30417865
  ;# 256*0.30417865 = 77.86973439
                       ;[45:224]    46u/   Variant (HL/2)/23 = (HL/2)*257*65536/(23*257)>>8 = (HL/2)*257*(11+(22+77/256)/256)>>8
    ld    B, H          ; 1:4       46u/
    ld    C, L          ; 1:4       46u/   2x base
    srl   B             ; 2:8       46u/
    rr    C             ; 2:8       46u/   1x base
    xor   A             ; 1:4       46u/   
    add  HL, HL         ; 1:11      46u/ 
    adc   A, A          ; 1:4       46u/   4x
    add  HL, BC         ; 1:11      46u/ 
    adc   A, 0x00       ; 2:7       46u/   5x 
    add  HL, HL         ; 1:11      46u/ 
    adc   A, A          ; 1:4       46u/   10x
    add  HL, BC         ; 1:11      46u/ 
    adc   A, 0x00       ; 2:7       46u/   11x
    ld    B, A          ; 1:4       46u/
    ld    C, H          ; 1:4       46u/   BC = 11/256
    add  HL, BC         ; 1:11      46u/ 
    adc   A, 0x00       ; 2:7       46u/   11+11/256
    add  HL, BC         ; 1:11      46u/ 
    adc   A, 0x00       ; 2:7       46u/   11+22/256
    ld    B, A          ; 1:4       46u/   save A
    ld    C, H          ; 1:4       46u/
    add   A, A          ; 1:4       46u/   22
    add   A, A          ; 1:4       46u/   44
    add   A, A          ; 1:4       46u/   88
    sub   B             ; 1:4       46u/   77
    add   A, 9          ; 2:7       46u/   rounding constant 
    add   A, L          ; 1:4       46u/
    ld    L, A          ; 1:4       46u/
    jr   nc, $+3        ; 2:7/12    46u/
    inc  BC             ; 1:6       46u/
    ld    A, B          ; 1:4       46u/   load A
    ld    H, C          ; 1:4       46u/     
    add  HL, BC         ; 1:11      46u/   
    adc   A, 0x00       ; 2:7       46u/   *257/256
    ld    L, H          ; 1:4       46u/
    ld    H, A          ; 1:4       46u/   (HL/2)*257*(11+(22+77/256)/256)>>8
; seconds: 0           ;[45:224]

Bylo to stale o 8 bajtu vetsi...
Ale oproti 267 taktum to bylo o 43 taktu rychlejsi... takze celkove to vypadalo vice... chutne...
TO se na to usmalo, protoze jeste nikdy nevidelo takove podivne deleni, ktere bylo jine nez vsechny ostatni, a slo se divat na dalsi deleni.
Mozna ze kdyz vsemu ustrihne zase tu jednu 256/257 a vytrhne zasobnik tak to prezije a bude chutne a hbite...
Dobrou noc deti.

PS: Nejake vysvetleni k poslednimu reseni.
Kód:
    ld    B, A          ; 1:4       46u/   save A
    ld    C, H          ; 1:4       46u/
    add   A, A          ; 1:4       46u/   22
    add   A, A          ; 1:4       46u/   44
    add   A, A          ; 1:4       46u/   88
    sub   B             ; 1:4       46u/   77
    add   A, 9          ; 2:7       46u/   rounding constant 
    add   A, L          ; 1:4       46u/
    ld    L, A          ; 1:4       46u
    jr   nc, $+3        ; 2:7/12    46u/
    inc  BC             ; 1:6       46u/

Trik spociva v tom jak si uchovat ten akumulator kdyz drzime v AHL 24 bitove cislo a pricitame k tomu 8 bitove.
A to 8 bitove musime nejak slozite vytvorit pomoci A.
Udelal jsem to tak ze jsem do BC dal kopii AHL/256.
Tim jsem si uvolnil A. (a zbytecne ukladal i H?)
Vytvoril jsem to 8 bitove cislo (nasobek 7)
Pricetl jsem ho pomoci A do L.
A ted prijde ten trik...
Diky tomu ze v BC lezi AHL/256 tak preteceni v carry mohu vyresit jako proste BC+1. Takze i v B (puvodne A bude spravna hodnota).
Takze kdyz to nakopiruji zpet do AH, tak v AHL mam AHL+8 bitova hodnota.
A to neni vse, za tim nasleduje nasobeni 257.
To se provede jako soucet AHL + AHL/256.
No a my uz vlastne mame v BC to AHL/256!
Chtel bych vedet kolik veci me stale unika a jde udelat lepe.

PPS:
Kód:
    ld    B, A          ; 1:4       46u/
    ld    C, H          ; 1:4       46u/   BC = 11/256
    add  HL, BC         ; 1:11      46u/
    adc   A, 0x00       ; 2:7       46u/   11+11/256
    add  HL, BC         ; 1:11      46u/
    adc   A, 0x00       ; 2:7       46u/   11+22/256

Tohle by slo resit jeste o 2 takty rychleji, ale za cenu bajtu navic, kdyz vynasobim to BC dvema pres posuny.
Usetrim jedno pricitani 3:18 za cenu 4:16.

PPPS: Bylo to moc krvave?

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Macro FORTH
PříspěvekNapsal: 06.09.2024, 01:22 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1295
Has thanked: 102 times
Been thanked: 195 times
Pridal jsem dalsi polozku v benchmarcich.

https://codeberg.org/DW0RKiN/M4_FORTH/s ... a-constant

Soucasne hodnoty jsou
Kód:
System                          Forth / C                               Benchmark       Time        bin size
ZX Spectrum Fuse 1.6.0 Ubuntu   z88dk.zcc v22110-51889e5300-20231219   -O2 const_udiv   25m 18.33s  4 260 B (include 4x8 font)
ZX Spectrum Fuse 1.6.0 Ubuntu   M4_FORTH                                const_udiv       6m 49.41s  2 971 B


Snazil jsem se tam narvat co nejvic klicovych slov "16-bit binary division by constant on Z80", aby to v budoucnu mohl nekdo pres google najit, ale vim ze je to marne...
Ony ani ty uloziste dlouho nevydrzi...
Desitky let to nebudou.
Takze si to bude muset pripadny zajemce vymyslet sam...
Nevim proc google preferuje ruzna fora.
Takze me jeste zbyva spamovat ty fora...

PS: Schvalne jsem zkusil vyhledat temer shodny nazev s jednou kapitolou a v prvnich 14 strankach googlu to nic nenaslo a tim to ukoncil. Skoro jako bych byl neviditelny, ale kdyz pridam nesouvisejici veci jako FORTH nebo DWORKIN tak to hned najde v topce... Zajimalo by me kolik takovych pokladu se skryva za horizontem a vy je nenajdete pokud neuhodnete nejake nesouvisejici klicove slovo.
PPS: Kdyz zadam presne kopii nazvu kapitoly (vsech 9 slov) tak to google vzda na 19 strance. Ale zase je to vic univerzalni nazev, ale tohle presne poradi urcite bude jedinecne.

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Macro FORTH
PříspěvekNapsal: 07.09.2024, 18:04 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1295
Has thanked: 102 times
Been thanked: 195 times
Existuje nejaky plugin do Midnight Commanderu a nebo neco pochopitelneho pro linux co umi spravovat repozitar na "githubu/codeberg" jako kdyby to bylo FTP?

Mozna tomu neuverite, ale ja stale funguji pomoci klikani a pretahovani na webove strance.
Github mel nejake omezeni na presun max 50 souboru.
Codeberg ma omezeni na 5 souboru...
A dospel jsem k zaveru ze v adresari BENCHMARK me postupem casu abnormalne narostl pocet souboru...
Byl to chaos a jeste nez se dostat na "readme" se clovek "uroloval" seznamem souboru.

Logicky spravny krok byl presunout souboru do podadresaru.
Varianta jak podadresare navrhnout je nekolik.
Zacal jsem jednoduse rozdelenim na "Forth", "C" a "Basic".
Ale bylo to malo, Forth byl prili velky, tak jsem pridal dalsi uroven podadresaru podle nazvu benchmarku.
Nemel jsem to teda jen delit na benchmarky? Asi ne... takhle je sice trosku prace dat jeden dohromady, ale zase je hned videt co ktery jazyk prokryva za testy.
Opravil jsem relativni cesty v readme.
A zacal RUCNE mazat jeden soubor po druhem...
Nez jsem to domazal tak jsem se rozhodl ze cely ten adresar zrusim a udelam misto toho novy repozitar.
M4 FORTH zacal byt docela na muj vkus otesanek...
Minimalni jadro ma uz asi 5 Mb... to je to co lezi v adresari M4, plus par skriptu v nadrazenem adresari.
Takze ten BENCHMARK sel bokem.
Jsem uplne blbej, nez jsem zjistil jak udelat NOVY ADRESAR pres ty jejich webovky...
Musi se zadat PRIDAT SOUBOR a zvolit NOVY SOUBOR a nahore v kolonce kam se pise jmeno doplnit NAZEV_ADRESARE_ZAKONCENY_/
Delal jsem to nekolikrat, protoze nesmite zapomenout i jmeno noveho souboru...
Ktery pak potrebujete zase rucne smazat...
Atd...
Nez me doslo, ze existuje i dalsi moznost...
PRIDAT SOUBOR a zvolit NAHRAT SOUBOR a po pretazeni souboru je tam nahore moznost zase pridat jmeno adresare a NEZAPOMENOUT to lomitko nakonec.
No, nakonec se podarilo vytvorit novy repozitar, dokonce najit kde se davaji ty zatracene hashtagy . Je to takove nenapsane "spravovat temata" pod popiskem. V NASTAVENI to fakt nehledejte.

Trosku divne je ze novy repozitar ma v ceste "main" a puvodni "master". Asi jsem neco jinak vyplnil pri vzniku..

Myslel jsem si ze mam hotovo...
Jenze ted me lezi ty zdrojaky m4 v jine relativni ceste k tomu "compileru".
A ta cesta byla soucasti toho mč souboru...
Kód:
include(`../M4/FIRST.M4')dnl

Musel jsem to vsude zmenit na
Kód:
include(`../../../M4/FIRST.M4')dnl

a bude to fungovat jen pokud ten adresar bude uvnitr M4_FORTH a ne bokem (ale co uz).

Kvuli tomu jsem musel opravovat i skripty a FIRST.M4, protoze s takovou hloubkou zanoreni se nepocitalo.
Predtim jsem mel problem, ze kdyz jsem delal tohle tak to naslo i nejakou starou verzi atd.
Nastesti me napadlo to osetrit a postupne hledat
Kód:
./path.m4
./M4/path1down.m4
../M4/path1up.m4
../../M4/path2up.m4
../../../M4/path3up.m4

Ale ve chvili co to najde uz ty dalsi nedelat.
Delam to cele pomoci jednoho triku, asi jsem to tady uz psal.
Kdy pouzivam prikaz include a hledam konkretni soubor.
Je to varianta sinclude jako Silent kdyz ho nenajde.
A jak ho pripoji tak se take automaticky vykonava a uvnitr toho souboru je
define(M4PATH,__ta_cesta__), kde kazdy soubor ma tu cestu samozrejme jinou.
Takze dokud makro M4PATH == M4PATH tak se hleda(pripojuje) dal.

Takze ted je vsechno hotovo haleluja...

No ne.

Adresar TESTING obsahuje 471 souboru a je velky 36 MB...

A to fakt nechci delat rucne kdyz ten Benchmark me zabral pres pul dne....

Existuje nejaky plugin do Midnight Commanderu a nebo neco pochopitelneho pro linux co umi spravovat repozitar na "githubu/codeberg" jako kdyby to bylo FTP?

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Macro FORTH
PříspěvekNapsal: 07.09.2024, 18:39 
Offline
Kecálek
Uživatelský avatar

Registrován: 18.06.2023, 18:37
Příspěvky: 129
Bydliště: Pražák z Prahe, žádná náplava :)
Has thanked: 23 times
Been thanked: 31 times
To používání main místo master je zase nějaká nová woke featura, aby se bral ohled na cítění branchů ohledně jejich jmen, nebo tak něco.

Je prý urážlivé vůči černým chipům kupovaným / prodávaným za pár dolarů používat terminologii master - slave tam, kde jeden rozhoduje, kdy a kam se bude co přenášet a druhý přenáší přesně podle příkazů. A spousta podobných naprosto nezbytných změn ...

_________________
Spousta věcí chodí líp, když se zapne ...
http://micro-corner.gilhad.cz/, http://8bit.gilhad.cz/ a mnohé další


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Macro FORTH
PříspěvekNapsal: 09.09.2024, 14:55 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1295
Has thanked: 102 times
Been thanked: 195 times
Nikde tu git s gui nepouziva?

Me to main <--> master nevadi... aspon jsem si to myslel nez ted musim psat
Kód:
git push origin master

Kód:
git push origin main

a v hlave zonglovat co vlastne delam a ktery repozitar resim. Musim si rici ze master >> main. A M4_FORTH >> M4_FORTH_Benchmrk or M4_FORTH_Testing atd.

PS: Nefunguje me .gitignore, nejen ze se me nahralo co jsem tam napsal ale i samotne .gitignore. Potrebuji aby se me nenahravali spustitelne c nebo c++ soubory, protoze by spravne se meli ze skriptu zkompilovat podle toho co je cilovy system (a ze se maji zkompilovat je jasne dany tim ze ten soubor neexistuje) a ne doufat ze je system kompatibilni s mym. Je mnohem tezsi v skriptu poznat, ze program je vadny a nefunguje, nez ze neexistuje. Vadny nebude ani vracet chybovou hlasku, a i kdyby, tak jak mam poznat, ze reseni je nova kompilace...

PPS: Jinak nechapu a pomalu si zvykam na prikaz git. Dostal jsem se ze stavu kdy jsem obnovoval smazane soubory smazane pres "rm" protoze to melo byt prece smazane pomoci "git rm" aby to vedel. Neni to vubec potreba, git nesleduje "live" co se dela v danem adresari, ani se kazda zmene nedela pres nejaky git prikaz. Jen vi co tam bylo naposledy a pozna rozdily (muze je porovnat s n ovym stavem). Takze se s daty v adresari mohu chovat normalne.

V prazdnem adresari "repositories" jsem napsal
Kód:
git clone https://codeberg.org/DW0RKiN/M4_FORTH

to zkopiruje cely repositar do noveho podadresare s jmenem repozitare "M4_FORTH" a dovnitr prida navic dalsi podadresar "./git". Jinak se to nelisi od stahovace wget -r nebo curl. Stahujes anonymne bez prihlaseni.

Dalsi prikazy jsou z "~/repositories/M4_FORTH/"
Kód:
git add .
najde vsechny rozdily co jsem udelal od posledniho commitu a prida je do commitu

Kód:
git commit . -m "blabla"
vytvori a pojmenuje ten commit, bez toho blabla to nefunguje protoze je to nejen popis ale i nazev commitu. Melo by to byt strucny ale vystizny popis co menite... ale kdyz na to kaslete a je toho vic dohromady tak... mate problem... a ztraci to smysl. Takze to chce asi "new commit".

Tady jde pouzivat neco jako
Kód:
git show

Kód:
git status

a divat se co posilate za zmeny a dalsi prikazy. Co me moc nezajimaji, protoze spoustu veci nemusim resit, jako revert commitu kde musim zjistit jmeno(id) co chci vracet... proste to prepisu starym.

Kód:
git push origin master
odesle konecne commit z lokalu na web, v teto fazi se me to bude pokazde ptat na jmeno a pak na heslo i kdyz jsem to pridal do global

PPPS: otravne je psat ../M4_FORTH_Benchmark pro prepinani mezi repositari, asi bych mel mit vic oken a uplne nejhorsi je porad psat to debiIni jmeno a pak heslo. U Webu to ma chromium ulozene. Ale aspon je to kontrola ze neposlu nekam neco omylem... A ZE NESMIM UZ SAHAT NA WEB OVLADANI PROTOZE JINAK TO POZNA ZE TY ADRESARE NEJSOU STEJNE A MUSIM TO NEJAK RESIT. Takze prakticky bude se to ovlada pres webove rozhrani a nebo konzole, kde pro kazdou blbost musim psat znovu heslo. (..i kdyz... asi staci udelat v konzoli "git pull origin master"?)

PPPPS: Jinak jsem predelaval znovu skripty abych nasli a fungovali i kdyz je neco v sousednim adresari.
Hudebni soubory dokazou ten poznat ze XM lezi ve stejnem adresari odkud volate music.sh. Takze podle toho usoudi ze chcete DAT vznikly z XM-->DAT mit taky loklane a ne v "octode2K16/Data". To same jsem musel naucit i pakovac zx0, kde ma hledat DAT a podle toho zda DAT-->BIN a BIN-->ZX0 mit v Compression/Output nebo opet lokalne.

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Macro FORTH
PříspěvekNapsal: 09.09.2024, 15:45 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1295
Has thanked: 102 times
Been thanked: 195 times
Zda se ze kdyz to "git push origin master/main" pridam parametr "-u" tak priste uz jen pisi jen "git push".

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Macro FORTH
PříspěvekNapsal: 09.09.2024, 21:15 
Offline
Kecálek
Uživatelský avatar

Registrován: 18.06.2023, 18:37
Příspěvky: 129
Bydliště: Pražák z Prahe, žádná náplava :)
Has thanked: 23 times
Been thanked: 31 times
Já používám git pouze z příkazové řádky a jsem spokojen :) Nastavil jsem si aliasy, udělal pár skriptů a přijde mi to pohodlnější než všechna gui :)
Kód:
[core]
   editor = vim
   pager =
[merge]
   tool = vimdiff
[diff]
[alias]
   co = checkout
   br = branch
   ci = commit
   st = status
   unstage = reset HEAD --
   last = log -1 HEAD
[push]
   default = simple
   followTags = true
[fetch]
   recurseSubmodules = yes
[init]
   defaultBranch = master


_________________
Spousta věcí chodí líp, když se zapne ...
http://micro-corner.gilhad.cz/, http://8bit.gilhad.cz/ a mnohé další


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 639 ]  Přejít na stránku Předchozí  1 ... 39, 40, 41, 42, 43

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz