OldComp.cz

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


Právě je 19.04.2024, 15:05

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 598 ]  Přejít na stránku Předchozí  1 ... 6, 7, 8, 9, 10, 11, 12 ... 40  Další
Autor Zpráva
 Předmět příspěvku: Re: Macro FORTH
PříspěvekNapsal: 11.07.2020, 19:57 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2287
Bydliště: Brno
Has thanked: 846 times
Been thanked: 308 times
Nemam nastudovany to co zde delas, ale asi jdes na mne moc do hloubky, pokud ti jde o podrobne pochopeni toho jak prekladac funguje. Ja prekladac jen pouzivam. Udelal by jsem si funkce na prikazy Forthu, zkompiloval v ZX assembleru a hotovo. Snad nepisu uplne zcestne. Ja jen tak nejak mozna okrajove rozumim tomu co zde provadis :)

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Macro FORTH
PříspěvekNapsal: 12.07.2020, 13:48 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1114
Has thanked: 100 times
Been thanked: 160 times
Lisiak4 píše:
Nemam nastudovany to co zde delas, ale asi jdes na mne moc do hloubky, pokud ti jde o podrobne pochopeni toho jak prekladac funguje. Ja prekladac jen pouzivam. Udelal by jsem si funkce na prikazy Forthu, zkompiloval v ZX assembleru a hotovo. Snad nepisu uplne zcestne. Ja jen tak nejak mozna okrajove rozumim tomu co zde provadis :)

Tohle je jeden ze spusobu jak to jde pro forth napsat. Ze program se sklada z tribajtovych volani.

call fce1
call fce2
call fce3
; vloz konstantu na zasobnik
ld hl, 0xDEAD
call fce2
; swap je <= 4 bajty (call + ret), takze se rovnou vlozi
ex de, hl
call fce4
...

Popripade pomaleji kdy program nacita co ma delat(volat), ale zato kratsi kod:

fce1
fce2
fce3
fce_push (signalizuje ze nasleduje neco jineho nez adresa, dalsi word jsou data, napr tim ze "adresa" fce_push bude mit horni bajt nulovy)
0xDEAD
fce2
fce_swap
fce4

...a nekde musis mit umely PC. A diky tomu si i nejak rucne resit skoky a smycky.

No a ja pouzivam prvni zpusob, s tim ze i slova delsi nez 4 bajty nezabaluji do funkce. Vetsinou. Nasobeni, deleni, tisk atd ano, ale treba smycky nechavam pro rychlost "inline".

Obtizne je spis jak ty funkce napsat. Zvlast pokud postupne pridavas slova, nebo neznas jejich cetnost. To si pak rikas, jestli jsem nemel i pro zasobnik navratovych adres neudelat vrchni polozku ulozenou v stinovem registru. :shrug:

Takze mezi "Udelal by jsem si funkce na prikazy Forthu" a "zkompiloval v ZX assembleru a hotovo" je schovana vsechna ta prace. .) A jeste ti vypadlo pred tim udelal "Naucil se Forth".

_________________
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: 12.07.2020, 17:04 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2287
Bydliště: Brno
Has thanked: 846 times
Been thanked: 308 times
Zasobnik je dle mne nejvetsi problem, vim, ze se mi to keca, mozna bych skakal natvrdo na adresy. Jedina nepevne dana adresa by byla ta na zacatku programu. Program by byl ze stejne velikych bloku. Bloky by se pocitali. To by hodne zjednodusilo provadeni skoku v programu? Co vnimam jako klíčový. Jsem si vzpomel jak se ta adresace jmenuje - absolutní.

_________________
Amiga - PMD 85


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

Registrován: 23.06.2013, 23:49
Příspěvky: 1114
Has thanked: 100 times
Been thanked: 160 times
Lisiak4 píše:
Zasobnik je dle mne nejvetsi problem, vim, ze se mi to keca, mozna bych skakal natvrdo na adresy. Jedina nepevne dana adresa by byla ta na zacatku programu. Program by byl ze stejne velikych bloku. Bloky by se pocitali. To by hodne zjednodusilo provadeni skoku v programu? Co vnimam jako klíčový. Jsem si vzpomel jak se ta adresace jmenuje - absolutní.
Promin, nerozumim.
Narazis na?
_dworkin píše:
...a nekde musis mit umely PC. A diky tomu si i nejak rucne resit skoky a smycky.

_________________
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: 12.07.2020, 18:59 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2287
Bydliště: Brno
Has thanked: 846 times
Been thanked: 308 times
Ano tohle to vystihuje. Ale presnejsi se mi zda byt spise kdyz napisu v cem ja vidim nejslozitejsi vec a jak by jsem si praci ulehcil. PC relativni adresace je supr a ja ji samozrejme mam vsude, kde to jen jde. To muselo dat hodne prace aby vse s takovou adresaci fungovalo v jakemkoliv assembleru. Otazka zni spise na tom, jestli ty delas tak obsahlou vec aby jsi se s timhle tak trápil? Myšleno z meho pohledu v tom nejlepším slova smyslu ;)

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Macro FORTH
PříspěvekNapsal: 12.07.2020, 20:34 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1114
Has thanked: 100 times
Been thanked: 160 times
Lisiak4 píše:
Ano tohle to vystihuje. Ale presnejsi se mi zda byt spise kdyz napisu v cem ja vidim nejslozitejsi vec a jak by jsem si praci ulehcil. PC relativni adresace je supr a ja ji samozrejme mam vsude, kde to jen jde. To muselo dat hodne prace aby vse s takovou adresaci fungovalo v jakemkoliv assembleru. Otazka zni spise na tom, jestli ty delas tak obsahlou vec aby jsi se s timhle tak trápil? Myšleno z meho pohledu v tom nejlepším slova smyslu ;)

Ja jsem prece psal, ze mam zvoleny prvni zpusob. Takze tohle vubec nemusim resit.
A pokud ty bloky o stejne delce mely byt teda taky k tomuto, tak nejsou potreba. Ale ja vlastne nevim jak to forth resi. Zda dalsim zasobnikem, kde DO ulozi adresu dalsiho (prvniho slova smycky) slova, nebo jinak. Vzhledem k tomu, ze vetsina forthu umi smycky, jen ve slovech, takze kdyz uz to ma predkompilovany tak to muze resit jinak. Ten pomocny zasobnik mit jen docasny a v LOOP mit po kompilaci uz napevno kam skace. To by me zajimalo jak to resi jiny interpret jako basic... Tam mu nepomuze ze ma ocislovane radky. Hmm.. tabulka? pomocny zasobnik?

_________________
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: 12.07.2020, 20:45 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1114
Has thanked: 100 times
Been thanked: 160 times
Vlastne to musi mit forth jeste sloziteji, protoze umoznuje prepsani slova a nasledujici umazani, kde se vrati puvodni. A navic vlastne ve forthu pises jmeno slova a ne posloupnost "tokenu" adres/primych slov. Takze musis v tabulce od konce teprve najit adresu az najdes shodu jmena. Takze ten druhy spusob je jak to vypada po kompilaci slova. To by mohl byt taky duvod proc kdyz umazes/prepises slovo se to chova ruzne:
Kubik píše:
1 .
vytiskne jednicku. Pokud ale reknes, ze
: 1 2 ;
tak
1 .
vytiskne dvojku. Ted:
: jednicka 1 ;
jednicka .
vytiskne dvojku. Ale pokud ted pridas:
: 1 3 ;
tak
jednicka .
vytiskne zase dvojku, zatimco
1 .
vytiskne trojku

"jednicka" uz je totiz zkompilovana, aby spustila puvodni slovo "1". A nasledna aktualizace se ho nedotkne, protoze se to cele znovu neprekompiluje. Jen v interaktivnim modu je posledni zmena, protoze ten cte tabulku slov a pro pristi kompilaci noveho slova, ktery ji pouziva taky.

_________________
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: 12.07.2020, 21:38 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 28.01.2016, 23:57
Příspěvky: 3756
Has thanked: 213 times
Been thanked: 388 times
Ono ani nejde o to, ze se to znovu neprekompiluje, ale jde o to, ze ve slovniku mas dve slova se jmenem "1". Slovnik se prohledava odzadu, a provede/pouzije se prvni slovo, ktere se najde (takze vlastne posledni definovane).

Jeste k tomu tvemu "fce_push" - to slovo se jmenuje LIT a je to normalni slovo, ktere se provede. Dela to, ze ze sve navratove adresy precte 16bit hodnotu, ulozi ji na zasobnik a zvysi svoji navratovou adresu o dva (bajty), cimz tu hodnotu "preskoci" a dalsi vykonavane slovo bude az to PO hodnote.

_________________
Nikdy nediskutujte s blbcem. Stáhne vás na svoji úroveň a vyhraje zkušeností.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Macro FORTH
PříspěvekNapsal: 13.07.2020, 03:16 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2287
Bydliště: Brno
Has thanked: 846 times
Been thanked: 308 times
Jako ja jsem i rad, ze sem tam neco prehlednu z toho co jsi napsal :) Ja si jiz pak pokecam i ve svem vlakne, nicmene 3 mesice jsem stagnoval na vytvoreni jednoho reseni, co na mne moc dobre nepusobilo. Jiz zprovoznuji a jedna chyba odhalena po 8 a pul hodine. Zatim neodzkouseno, nicmene mi svitlo a to je jiz celkem dobry stav.

_________________
Amiga - PMD 85


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

Registrován: 23.06.2013, 23:49
Příspěvky: 1114
Has thanked: 100 times
Been thanked: 160 times
Kubik píše:
Ono ani nejde o to, ze se to znovu neprekompiluje, ale jde o to, ze ve slovniku mas dve slova se jmenem "1". Slovnik se prohledava odzadu, a provede/pouzije se prvni slovo, ktere se najde (takze vlastne posledni definovane).
Kdyby to ale bylo jen o prohledavani odzadu tak oboje vytiskne trojku. Nebo me neco uniklo. Ale "jednicka" vytiskne dvojku proto, ze sice take obsahuje slovo "1", ktere bylo nove predefinovano aby tisklo trojku, ale v dobe kompilace slova to tisklo dvojku a po kompilaci to vola primo adresu toho slova co tiskne dvojku a nasledujici zmeny slova "1" uz na to nemaji efekt ne? Cele je to vymyslene chytre, kdy je to sice interpret, ale v podstate se nakonec pomalejsi interpet pouzije jen pri volani slova "SNAKE" a zbytek programu uz bezi jako kompilator.

Kubik píše:
Jeste k tomu tvemu "fce_push" - to slovo se jmenuje LIT a je to normalni slovo, ktere se provede. Dela to, ze ze sve navratove adresy precte 16bit hodnotu, ulozi ji na zasobnik a zvysi svoji navratovou adresu o dva (bajty), cimz tu hodnotu "preskoci" a dalsi vykonavane slovo bude az to PO hodnote.
Pekne reseni.

_________________
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: 13.07.2020, 18:51 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1114
Has thanked: 100 times
Been thanked: 160 times
Lisiak4 píše:
Jako ja jsem i rad, ze sem tam neco prehlednu z toho co jsi napsal :) Ja si jiz pak pokecam i ve svem vlakne, nicmene 3 mesice jsem stagnoval na vytvoreni jednoho reseni, co na mne moc dobre nepusobilo. Jiz zprovoznuji a jedna chyba odhalena po 8 a pul hodine. Zatim neodzkouseno, nicmene mi svitlo a to je jiz celkem dobry stav.


Lisiaku ja jsem se ted uplne ztratil o cem mluvis, potrebuji znat kontext. Predpokladam ze ta druha cast je ohledne te hudebni rutiny co pises pro Amigu?

_________________
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: 13.07.2020, 20:41 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2287
Bydliště: Brno
Has thanked: 846 times
Been thanked: 308 times
Mam programovani rad, rad si o nem pisi, tak je fajn takovyhle vlakno, kde si muzu neco precist a treba tomu porozumet. Jo 3 mesice vylepsuji jednu logiku a jiz mam vysledek a zacal jsem to zasazovat do hudebni rutiny.

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Macro FORTH
PříspěvekNapsal: 16.07.2020, 02:07 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1114
Has thanked: 100 times
Been thanked: 160 times
Tak nakonec se mi podarilo spojit ty dva zpusoby pocitani deleni a udelat neco co je o trosku horsi nez nejlepsi z tech dvou verzi. A nekdy i uplne nejlepsi.
Kód:
    ld    A, H          ; 1:4       synthesis version
    or    A             ; 1:4
    jr    z, UDIVIDE_0L ; 2:7/12       
   
    ld   BC, 0x0000     ; 3:10
    ld    A, D          ; 1:4
UDIVIDE_LE:   
    inc   B             ; 1:4       B++
    add  HL, HL         ; 1:11   
    jr    c, UDIVIDE_GT ; 2:7/12
    cp    H             ; 1:4
    jp   nc, UDIVIDE_LE ; 3:10
UDIVIDE_NC:             ;
    or    A             ; 1:4       HL > DE

UDIVIDE_GT:             ;
    ex   DE, HL         ; 1:4       HL = HL / DE
    ld    A, C          ; 1:4       CA = 0x0000 = result
UDIVIDE_LOOP:
    rr    D             ; 2:8
    rr    E             ; 2:8       DE >> 1
    sbc  HL, DE         ; 2:15
    jr   nc, $+3        ; 2:7/12
    add  HL, DE         ; 1:11      back
    ccf                 ; 1:4       inverts carry flag
    adc   A, A          ; 1:4
    rl    C             ; 2:8
    djnz UDIVIDE_LOOP   ; 2:8/13    B--
   
    ex   DE, HL         ; 1:4   
    ld    L, A          ; 1:4
    ld    H, C          ; 1:4
    ret                 ; 1:10

UDIVIDE_0L:             ;           HL = DE / 0L
    cp    L             ; 1:4
    ret   z             ; 1:5/11    HL = DE / 0
if 1
    ld    A, E          ; 1:4
    sub   L             ; 1:4
    ld    A, D          ; 1:4
    sbc   A, H          ; 1:4
    jr    c, UDIVIDE_Z  ; 1:7/12

    ld    A, D          ; 1:4
    cp    L             ; 1:4
    jr    c, UDIVIDE_LO ; 2:7/12
    xor   A             ; 1:4
else
    cp    D             ; 1:4
    jr    z, UDIVIDE_LO ; 2:7/12
endif
    ld    B, 0x04       ; 2:7
UDIVIDE_D:
    sla   D             ; 2:8
    rla                 ; 1:4       AD << 1
    cp    L             ; 1:4       A-L?
    jr    c,$+4         ; 2:7/12
    sub   L             ; 1:4
    inc   D             ; 1:4
   
    sla   D             ; 2:8
    rla                 ; 1:4       AD << 1
    cp    L             ; 1:4       A-L?
    jr    c,$+4         ; 2:7/12
    sub   L             ; 1:4
    inc   D             ; 1:4
    djnz UDIVIDE_D      ; 2:8/13    B--

    ld    H, D          ; 1:4
   
UDIVIDE_LO:
    ld    B, 0x04       ; 2:7
UDIVIDE_E:
    sla   E             ; 2:8
    rla                 ; 1:4       AE << 1
    jr    c, $+5        ; 2:7/12
    cp    L             ; 1:4       A-L?
    jr    c, $+4        ; 2:7/12
    sub   L             ; 1:4
    inc   E             ; 1:4

    sla   E             ; 2:8
    rla                 ; 1:4       AE << 1
    jr    c, $+5        ; 2:7/12
    cp    L             ; 1:4       A-L?
    jr    c, $+4        ; 2:7/12
    sub   L             ; 1:4
    inc   E             ; 1:4
    djnz UDIVIDE_E      ; 2:8/13    B--
   
    ld    L, E          ; 1:4       HL = DE / HL
    ld    D, B          ; 1:4
    ld    E, A          ; 1:4       DE = DE % HL
    ret                 ; 1:10
UDIVIDE_Z:
    ld    L, H          ; 1:4
    ret                 ; 1:10
Kód:
; div       mul
;                   512,0/256,1 8096,0/1024,1   0,50000/0,50000     4096,2/i,1  50000,40000/128,1
; def 1     fast    33.81s      43m 45.43s*     13h 31m 38.59**     35m  7.89s  11m 34.43s          +8     
; def 0     fast    34.66s*     43m 14.73s**    13h 36m 18.47*      34m 52.46s  11m 19.85s*         0
; old       fast    48.83s      50m  5.30s      22h  2m 24.85       48m 11.00s   9m 23.07s**        +12

; synthesis fast    35.08s      41m  0.85s!     13h 38m 38.41       34m 13.89s!  8m 26.38s          +65
; synthesisxfast    35.06s      40m 22.84s!     13h 38m 38.41       33m 55.50s!  8m 26.38s          +107


; double    fast    34.22s      42m 23.69s      13h 47m 58.15       34m 39.06s  10m 51.14s          +26
; doublex   fast    34.02s      42m 10.88s      13h 36m 18.47       34m 23.34s  10m 49.16s          +42

; triple    fast    34.14s      42m  5.89s      13h 47m 58.15       34m 35.64s  10m 40.92s          +52
; triplex   fast    34.02s      41m 52.15s      13h 42m  8.29s      34m 16.03s  10m 38.75s          +76

; fast      fast    33.88s      41m 45.81s      13h 36m 18.50s      34m 16.65s  10m 39.57s          +111


; old_fast  fast                                                    48m 11.51s  idivmod
; old_fast  fast    37.44s      44m  8.89s      19h 59m 58.16s      42m 55.61s   7m 28.57s          +258


; 1 0       fast    32.94s**    43m 48.53s      13h 53m 48.00       35m 27.53s  11m 25.37s

; old_small fast    72.69s      78m 15.20s      36h 34m 41.44       77m 33.28s  12m 11.07s          -9
; small fast        34.66s      43m 14.73s      13h 36m 18.47       34m 52.46s  11m 19.85s          0
0,50000/0,50000 znamena ze tam probehly smycky
for (i = 50000; i != 0; i++)
for (j = 50000; j != 0; j++)
i / j;
Pluska na konci je o kolik je to v bajtech vetsi nez default.

_________________
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: 20.07.2020, 15:31 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1114
Has thanked: 100 times
Been thanked: 160 times
Timto bych chtel vsechny uzivatele M4 FORTH varovat! ... :mrgreen: Takze jen sebe. Mam v implementaci obecne DO +LOOP smycky chybu. Ale jsem prilis unaveny po 12 hodinach na nocni smene tak se na to kouknu jindy.
Kód:
    push HL             ; 1:11      1024 +loop 101
idx101 EQU $+1          ;           1024 +loop 101
    ld   HL, 0x0000     ; 3:10      1024 +loop 101
    ld   BC, 1024       ; 3:10      1024 +loop 101 BC = step
    add  HL, BC         ; 1:11      1024 +loop 101 HL = index+step
    ld  (idx101), HL    ; 3:16      1024 +loop 101 save index
stp_lo101 EQU $+1       ;           1024 +loop 101
    ld    A, 0x00       ; 2:7       1024 +loop 101 lo stop
    sub   L             ; 1:4       1024 +loop 101
    ld    L, A          ; 1:4       1024 +loop 101
stp_hi101 EQU $+1       ;           1024 +loop 101
    ld    A, 0x00       ; 2:7       1024 +loop 101 hi stop
    sbc   A, H          ; 1:4       1024 +loop 101
    ld    H, A          ; 1:4       1024 +loop 101 HL = stop-(index+step)
    add  HL, BC         ; 1:11      1024 +loop 101 HL = stop-index
;    xor   H             ; 1:4       1024 +loop 101
    pop  HL             ; 1:10      1024 +loop 101
;    jp    p, do101      ; 3:10      1024 +loop 101 negative step
    jp   nc, do101      ; 3:10      1024 +loop 101 negative step
Tohle je rucne fixla asm verze. Ktera ale neni obecne funkcni. Plati jen protoze mezi pocatecni hodnotou a konecnou hodnotou neni nula.

Narazil jsem na to pri zkouseni implementace kresleni usecky.
Kód:
STRED EQU 256*96+128
KRAJ  EQU STRED+80
KROK  EQU 1024
POCATEK     EQU KRAJ-20*KROK
KONEC       EQU KRAJ+20*KROK+1

COLON(test_line,( -- ))

    PUSH2(KONEC,POCATEK)
    DO
        I UDOT CR
        I _2ADD
    call PIXEL
    DROP
   
        PUSH(STRED) I
    call line   
    pop  HL             ; 1:10
    pop  DE             ; 1:10

    PUSH_ADDLOOP(1024)
SEMICOLON
Kód:
STRED      EQU 6080
KRAJ      EQU 60D0
KROK      EQU 0400
POCATEK      EQU 10D0
KONEC      EQU B0D1
Kdy index jak se dostane tesne pod 0x8000, kde by pri pricteni kroku 1024 prelezl do zapornych cisel ukonci smycku. Malo jsem testoval...

Vlastne ted me vic zajima jak udelat tu usecku. Zajimave ze jsem na netu nikde nenasel nic k Bresenhamu a ZX Spectru. Napadlo me jeste se podivat do Busyho dem, ale pak jsem to zavrhl, protoze bych nasel pravdepodobne neco co by se mi nehodilo. Reseni optimalizovane pres tabulky. A pouzit algoritmus z wikipedie neni tak snadne, protoze potrebuje aritmetiku s 16 bitovymi cisly. Chtel jsem se podivat jak jsem to resil kdysi na 486, ale pak me doslo, ze pri rozliseni 320*200 jsem to urcite taky pocital 16 bitove. Ale taky s pouzitim samomodifikujiciho kodu. Coz je na intel procesorech vetsi riziko. No... zatim se mi to podarilo pocitat 8 bitove, snad to dotahnu do konce. Uvidime. Delam to pomoci zdvojeneho kodu rozpoznani znamenka, kdy diky tomu mam v 8 bitovem registru hodnotu -255 az +255. Kazda vetev ma neznamenkove 0..255. Nepotrebuji tak tri sestnactibitove cisla a jeste nekde ukladat aktualni hodnotu pixelu. Hm... zrovna me napadlo jak to udelat s dvema sestnactibitovymi cisly. No nic, jdu spat.

_________________
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: 20.07.2020, 20:08 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1975
Bydliště: Most, Praha
Has thanked: 870 times
Been thanked: 699 times
_dworkin píše:
Timto bych chtel vsechny uzivatele M4 FORTH varovat! ... :mrgreen: Takze jen sebe. ...
Take se mi nekdy .... vlastne vetsinou .... stava ze jsem jediny uzivatel svych programu. Ma to vyhodu - nikdo si nestezuje. 8-)

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


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ů: 598 ]  Přejít na stránku Předchozí  1 ... 6, 7, 8, 9, 10, 11, 12 ... 40  Další

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


Kdo je online

Uživatelé procházející toto fórum: Martin1 a 6 návštevní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