OldComp.cz

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


Právě je 18.04.2024, 11:35

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 ... 15, 16, 17, 18, 19, 20, 21 ... 40  Další
Autor Zpráva
 Předmět příspěvku: Re: Macro FORTH
PříspěvekNapsal: 06.09.2022, 01:40 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1113
Has thanked: 100 times
Been thanked: 159 times
Pri testovani jsem opravoval nejake chyby, hodne z nich co jsem tam pridal nove...
No a jedna smycka me ukazovala porad spatne vysledky.
Nasel jsem kod.
Kód:
__{}dnl #                      ;[25:121+22=143]
__{}__{}__ADD_HL_CONST(-(__GET_LOOP_END(}$1{)),{BC = -stop = -(__GET_LOOP_END(}$1{))},{HL+= -stop = index-stop}){}dnl
__{}__{}                       ;[eval(17+2*__BYTES):eval(79+2*__CLOCKS)]    __INFO
__{}__{}    exx                 ; 1:4       __INFO
__{}__{}    ld    E,(HL)        ; 1:7       __INFO
__{}__{}    inc   L             ; 1:4       __INFO
__{}__{}    ld    D,(HL)        ; 1:7       __INFO   DE = index
__{}__{}    ex   DE, HL         ; 1:4       __INFO   HL = index, DE = R.A.S.{}dnl
__{}__{}__CODE
__{}__{}    ld   BC, __HEX_HL(__GET_LOOP_STEP($1))     ; 3:10      __INFO   BC =  step = __GET_LOOP_STEP($1)
__{}__{}    ld    A, H          ; 1:4       __INFO
__{}__{}    add  HL, BC         ; 1:11      __INFO   HL+=  step = index-stop+step
__{}__{}    xor   H             ; 1:4       __INFO   reverse sign --> exit{}dnl
__{}__{}__ADD_HL_CONST(__GET_LOOP_END(}$1{),{BC =  stop = __GET_LOOP_END(}$1{)},{HL+=  stop = index+step}){}dnl
__{}__{}__CODE
__{}__{}    ex   DE, HL         ; 1:4       __INFO
__{}__{}    jp    p, do{}$1      ; 3:10      __INFO})
__{}leave{}$1:               ;           __INFO
__{}    inc  HL             ; 1:6       __INFO
__{}    exx                 ; 1:4       __INFO   ( -- ) R:( stop index -- )

Dival se i na to co z toho leze...
Kód:
                       ;[19:87]    -2 +loop_101(r)
    exx                 ; 1:4       -2 +loop_101(r)
    ld    E,(HL)        ; 1:7       -2 +loop_101(r)
    inc   L             ; 1:4       -2 +loop_101(r)
    ld    D,(HL)        ; 1:7       -2 +loop_101(r)   DE = index
    ex   DE, HL         ; 1:4       -2 +loop_101(r)   HL = index, DE = R.A.S.
    dec  H              ; 1:4       -2 +loop_101(r)   HL+= -stop = index-stop
    ld   BC, 0xFFFE     ; 3:10      -2 +loop_101(r)   BC =  step = -2
    ld    A, H          ; 1:4       -2 +loop_101(r)
    add  HL, BC         ; 1:11      -2 +loop_101(r)   HL+=  step = index-stop+step
    xor   H             ; 1:4       -2 +loop_101(r)   reverse sign --> exit
    inc  H              ; 1:4       -2 +loop_101(r)   HL+=  stop = index+step
    ex   DE, HL         ; 1:4       -2 +loop_101(r)
    jp    p, do101      ; 3:10      -2 +loop_101(r)
leave101:               ;           -2 +loop_101(r)
    inc  HL             ; 1:6       -2 +loop_101(r)
    exx                 ; 1:4       -2 +loop_101(r)   ( -- ) R:( stop index -- )
exit101:                ;           -2 +loop_101(r)

A proste nevidel kde mam chybu... tak jsem to musel i vypreparovat a zkompilovat jinde jen s touto smyckou a zacal debugovat.

.ykat inemen ez ytsij meklec lyb mesj ngis u A .yrrac an ahasen a galf orez nej inem ez mesj ledeV !arkas ,galf ngis inem "H cni" A

Musel jsem jit do prace, takze jsem to nemohl dodelat, ale v praci bylo dost casu nad tim premyslet.
HL obsahuje index smycky. Od HL se odecte STOP. Takze je STOP ted na nule.

Pokud je KROK kladny a pri pricteni k HL prelezeme ze zapornych cisel do kladnych tak je konec. U kladneho kroku je nula vyjma.

Pokud je KROK zaporny a pri pricteni klesneme pod nulu do zapornych cisel tak je konec. U zaporneho kroku je nula vcetne.

At je to kladne nebo zaporne tak je jen dulezite, zda index pri pricteni kroku prekroci (jedno jakym smerem) predel co lezi mezi nulou a -1.

Takze to zvladne i carry. Jen carry je invertovan podle smeru, nebo znamenka kroku.
Taky to zvladne zjistit zda se zmenilo znamenko. To je na znamenku kroku nezavisle. Tak jsme to mel predtim.

V praci jsem mel ideu ze zmenim
Kód:
    ld    A, H          ; 1:4       -2 +loop_101(r)
    add  HL, BC         ; 1:11      -2 +loop_101(r)   HL+=  step = index-stop+step
    xor   H             ; 1:4       -2 +loop_101(r)   reverse sign --> exit
    inc  H              ; 1:4       -2 +loop_101(r)   HL+=  stop = index+step

na
Kód:
    add  HL, BC         ; 1:11      -2 +loop_101(r)   HL+=  step = index-stop+step
    rra                 ; 1:4       -2 +loop_101(r)
    inc  H              ; 1:4       -2 +loop_101(r)   HL+=  stop = index+step
    xor   B             ; 1:4       -2 +loop_101(r)   reverse sign --> exit

RRA nacte carry do znamenkoveho bitu a ten vyxoruji se znamenkem kroku co je v registru B. Takze pokud bude vysledek kladny tak neni konec.

Doma jsem zjistil ze makro __ADD_HL_CONST vygeneruje i
LD BC, const
ADD HL,BC
pokud mu nic nezbyde. Takze registr B nemusi obsahovat krok, ale stop.

Hmmm... takze jeste sloziteji.
Kód:
                       ;[19:87]    -2 +loop_101(r)
    exx                 ; 1:4       -2 +loop_101(r)
    ld    E,(HL)        ; 1:7       -2 +loop_101(r)
    inc   L             ; 1:4       -2 +loop_101(r)
    ld    D,(HL)        ; 1:7       -2 +loop_101(r)   DE = index
    ex   DE, HL         ; 1:4       -2 +loop_101(r)   HL = index, DE = R.A.S.
    dec  H              ; 1:4       -2 +loop_101(r)   HL+= -stop = index-stop
    ld   BC, 0xFFFE     ; 3:10      -2 +loop_101(r)   BC =  step = -2
    add  HL, BC         ; 1:11      -2 +loop_101(r)   HL+=  step = index-stop+step
    sbc   A, A          ; 1:4       -2 +loop_101(r)
    inc  H              ; 1:4       -2 +loop_101(r)   HL+=  stop = index+step
    ex   DE, HL         ; 1:4       -2 +loop_101(r)
    or   A              ; 1:4       -2 +loop_101(r)
    jp   nz, do101      ; 3:10      -2 +loop_101(r)
leave101:               ;           -2 +loop_101(r)
    inc  HL             ; 1:6       -2 +loop_101(r)
    exx                 ; 1:4       -2 +loop_101(r)   ( -- ) R:( stop index -- )
exit101:                ;           -2 +loop_101(r)

sbc A,A nacte do A carry a pred skokem se zjisti jestli je to nula nebo -1.
Pokud byl krok kladny tak Zero flag znamena ze neni konec.
Pokud byl krok zaporny tak No Zero flag znamena ze neni konec.
Takze se ten kod musi generovat v zavislosti na znamenku kroku.

_________________
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.2022, 15:57 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1113
Has thanked: 100 times
Been thanked: 159 times
Pro pobaveni:
Příloha:
Snímek obrazovky_2022-09-06_14-52-14.png
Snímek obrazovky_2022-09-06_14-52-14.png [ 156.51 KiB | Zobrazeno 658 krát ]


Pridal jsem kombo-slovo DUP PUSH STORE a DUP PUSH CSTORE.
Kód:
dworkin@dw-A15:~/Programovani/ZX/Forth/M4$ ../check_word.sh 'DUP PUSH(258) STORE'
 
    ld   (258), HL      ; 3:16      dup 258 !
                       ;[ 3:16]
dworkin@dw-A15:~/Programovani/ZX/Forth/M4$ ../check_word.sh 'DUP PUSH((258)) STORE'
 
    ld   BC,(258)       ; 4:20      dup (258) !
    ld    A, L          ; 1:4       dup (258) !
    ld  (BC),A          ; 1:7       dup (258) !
    ld    A, H          ; 1:4       dup (258) !
    inc  BC             ; 1:6       dup (258) !
    ld  (BC),A          ; 1:7       dup (258) !
                       ;[ 9:48]
dworkin@dw-A15:~/Programovani/ZX/Forth/M4$ ../check_word.sh 'DUP PUSH(258) CSTORE'
 
    ld    A, L          ; 1:4       dup 258 c!
    ld   (258), A       ; 3:13      dup 258 c!
                       ;[ 4:17]
dworkin@dw-A15:~/Programovani/ZX/Forth/M4$ ../check_word.sh 'DUP PUSH((258)) CSTORE'
 
    ld   BC,(258)       ; 4:20      dup (258) c!
    ld    A, L          ; 1:4       dup (258) c!
    ld  (BC),A          ; 1:7       dup (258) c!
                       ;[ 6:31]

_________________
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.2022, 23:39 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1113
Has thanked: 100 times
Been thanked: 159 times
Pokracuji v testovani smycek a tahle me vracela spatny vysledek, skoncila misto po 1000 probehnuti jen 999.
Posledni I hodnota byla -1800 a ne -1802.
Kód:
PRINT_I({"-2.defA  196..-1802 "})    PUSH(0) PUSH(0) PUSH(196)    __ASM PUSH(-1802)  SWAP DO(M) I CALL(_test) PUSH(-2)  ADDLOOP CALL(_show)

Kód:
    ld  (idx103), HL    ; 3:16      -1802 swap do_103(m)   ( -1802 index -- )
    pop  HL             ; 1:10      -1802 swap do_103(m)
    ex   DE, HL         ; 1:4       -1802 swap do_103(m)
do103:                  ;           -1802 swap do_103(m)
    push DE             ; 1:11      i_103(m)   ( -- i )
    ex   DE, HL         ; 1:4       i_103(m)
    ld   HL, (idx103)   ; 3:16      i_103(m)   idx always points to a 16-bit index
    call _test          ; 3:17      call ( -- )
    push HL             ; 1:11      -2 +loop_103(m)
idx103 EQU $+1          ;           -2 +loop_103(m)
    ld   HL, 0x0000     ; 3:10      -2 +loop_103(m)
    ld   BC, -2         ; 3:10      -2 +loop_103(m) BC = step
    add  HL, BC         ; 1:11      -2 +loop_103(m) HL = index+step
    ld  (idx103), HL    ; 3:16      -2 +loop_103(m) save index
stp_lo103 EQU $+1       ;           -2 +loop_103(m)
    ld    A, low -1802-1; 2:7       -2 +loop_103(m)   lo stop-1
    sub   L             ; 1:4       -2 +loop_103(m)
    ld    L, A          ; 1:4       -2 +loop_103(m)
stp_hi103 EQU $+1       ;           -2 +loop_103(m)
    ld    A, high -1802-1; 2:7       -2 +loop_103(m)   hi stop-1
    sbc   A, H          ; 1:4       -2 +loop_103(m)
    ld    H, A          ; 1:4       -2 +loop_103(m) HL = stop-(index+step)
    add  HL, BC         ; 1:11      -2 +loop_103(m) HL = stop-index
    xor   H             ; 1:4       -2 +loop_103(m)
    pop  HL             ; 1:10      -2 +loop_103(m)
    jp    p, do103      ; 3:10      -2 +loop_103(m) negative step
leave103:               ;           -2 +loop_103(m)
exit103:                ;           -2 +loop_103(m)


Spatne bylo, ze smycky okolo vraceli napul dobry vysledek a napul spatny...
Kód:
PRINT_I({"-2.F    2001..3        "}) PUSH(0) PUSH(0) PUSH(2001)   __ASM PUSH(3)      SWAP DO(M) I CALL(_test) PUSH(-2)  ADDLOOP CALL(_show)
PRINT_I({"-2.G    2232..234    "})   PUSH(0) PUSH(0) PUSH(2232)   __ASM PUSH(234)    SWAP DO(M) I CALL(_test) PUSH(-2)  ADDLOOP CALL(_show)
PRINT_I({"-2.defA  196..-1802 "})    PUSH(0) PUSH(0) PUSH(196)    __ASM PUSH(-1802)  SWAP DO(M) I CALL(_test) PUSH(-2)  ADDLOOP CALL(_show)
PRINT_I({"-2.defB  250..-1748 "})    PUSH(0) PUSH(0) PUSH(250)    __ASM PUSH(-1748)  SWAP DO(M) I CALL(_test) PUSH(-2)  ADDLOOP CALL(_show)

Generovalo se to stejnym kodem...
Pak jsem si vsimnul ze prvni dve maji kladny konec a posledni 2 zaporny.
Jakmile jsem si zacal hrat s +-1 tak jsem to ale jen zhorsil...
To jsem to mel predtim celou dobu blbe?
Protoze kdyz neznam hodnotu a mam ji v DE tak jsem delal "dec DE" a vse fungovalo...

Musel jsem se podivat jeste niz az na binarni kod.

Tam jsem videl tohle
Kód:
stp_lo103   EQU 80A5
80A4:3EF7   LD A, F7
80A6:95      SUB L
80A7:6F      LD L, A
stp_hi103   EQU 80A9
80A8:3EF8   LD A, F8


Hmmm... -1802 je 0xF8F6 takze -1803 je 0xF8F5. Me to generuje -1801!

Ok, takze zjistit zda mam zaporne cislo a pricist jednicku...ne to je taky spatne a vubec ja ani nemusim znat tu hodnotu, muze to byt "aaa" nebo "-aaa"...

Tak jsem zkousel a zkousel ....

-1+(-1802)
Kód:
stp_lo103   EQU 80A5
80A4:3E09   LD A, 09
80A6:95      SUB L
80A7:6F      LD L, A
stp_hi103   EQU 80A9
80A8:3E07   LD A, 07


-1802+(-1)
Kód:
stp_lo103   EQU 80A5
80A4:3EF7   LD A, F7
80A6:95      SUB L
80A7:6F      LD L, A
stp_hi103   EQU 80A9
80A8:3EF8   LD A, F8


-1802+0xFFFF
To same.

-1802+(0xFFFF)
To same.

0xFFFF+-1802
ERROR: Value expected but '-'found

0xFFFF+(-1802)
Kód:
stp_lo103   EQU 80A5
80A4:3EF5   LD A, F5
80A6:95      SUB L
80A7:6F      LD L, A
stp_hi103   EQU 80A9
80A8:3EF8   LD A, F8

Spravne!!!

Kód:
stp_lo103 EQU $+1       ;           -2 +loop_103(m)
    ld    A, low 65535+(-1802); 2:7       -2 +loop_103(m)   lo stop-1
    sub   L             ; 1:4       -2 +loop_103(m)
    ld    L, A          ; 1:4       -2 +loop_103(m)
stp_hi103 EQU $+1       ;           -2 +loop_103(m)
    ld    A, high 65535+(-1802); 2:7       -2 +loop_103(m)   hi stop-1


Pasmo zase haze klacky pod nohy pri zapornych cislech.
A tohle neni jedine misto kde jsem XXX-1 pouzil, takze i kdyz testy vysly uz spravne tak nemusi byt uplné...
Uplně minove pole. (lol musel jsem doplnit diakritiku, protoze to bylo pri cteni uz nepochopitelne)
A zrovna ta -1 je uz uplne mimo me proc to tam mam.

Chapu ze misto INDEX-STOP a pak +STEP, kde nic takoveho nepotrebuji
pouzivam opak STOP-(INDEX+STEP)
Ale je to uz rok co jsem tohle resil... jak to napsat co nejkratsi.

Nechtel bych byt v kuzi nekoho jineho kdo by to debuggoval.

Je spravne algoritmus?
Je spravne kod?
Je spravne BINARNI KOD?
Co takhle zkusit jiny prekladac... (...a to je to posledni co bych chtel)

_________________
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: 08.09.2022, 06:35 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3661
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 795 times
_dworkin píše:
-1+(-1802)
-1802+(-1)
-1802+0xFFFF
-1802+(0xFFFF)
0xFFFF+(-1802)
Vsetky tieto vyrazy by mali davat rovnaky vysledok, aspon v starych klasickych asebleroch priamo na ZX Spektre (MRS, Prometeus...) davaju.
Ale moderne cross-asemblery (Pasmo?) s tym mozu mat problemy, pretoze obvykle interne vsetko pocitaju v 32bit presnosti. Takze by som skusil este na cely vyraz aplikovat funkciu AND #FFFF ktora z vysledku "vyzobne" iba spodnych 16 bitov.
_dworkin píše:
0xFFFF+(-1802)Co takhle zkusit jiny prekladac... (...a to je to posledni co bych chtel)
A u mna zase uplne prve, ze by som skusil SjASMPlus :)


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Macro FORTH
PříspěvekNapsal: 08.09.2022, 08:20 
Offline
Profík

Registrován: 26.11.2018, 16:59
Příspěvky: 580
Bydliště: Holešov
Has thanked: 13 times
Been thanked: 91 times
Busy píše:
Ale moderne cross-asemblery (Pasmo?) s tym mozu mat problemy, pretoze obvykle interne vsetko pocitaju v 32bit presnosti. Takze by som skusil este na cely vyraz aplikovat funkciu AND #FFFF ktora z vysledku "vyzobne" iba spodnych 16 bitov.

potvrzuji, dělá to i AS (ASW) - zrovna nedávno mi hlásil překladač nedovolený rozsah pro instrukci JR i když bylo návěští jen kousek od skoku...
bylo tam:
Kód:
rutadr   equ    0-extrdtlen
              phase  rutadr
             ...
            jr   nz,cc2
           ...
cc2:   ...

prostě toto by libovolný 8bit. překladač v pohodě projel a moderní PC překladač ani náhodou


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Macro FORTH
PříspěvekNapsal: 08.09.2022, 11:06 
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
U ZX se v asm nečte hodnota od nejnižšího bytu po ten vyšší? Nějak nerozumím jak tam může vznikat ta nepřesnost při práci u 16 bitového rozsahu vůči 32 bitovému rozsahu. A další věci je co mně zajímá, to se u asm na ZX nemůže definovat rozsah s jakým se pracuje? 1 byte, 2 byte, 4 byte? Asi může, ale interně si překladač pracuje s 32 bitovou hodnotou?

Jako je mi jasný že já nejlépe vidím problém, až když se s ním přímo potýkám...

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Macro FORTH
PříspěvekNapsal: 08.09.2022, 12:59 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1113
Has thanked: 100 times
Been thanked: 159 times
Busy píše:
_dworkin píše:
-1+(-1802)
-1802+(-1)
-1802+0xFFFF
-1802+(0xFFFF)
0xFFFF+(-1802)
Vsetky tieto vyrazy by mali davat rovnaky vysledok, aspon v starych klasickych asebleroch priamo na ZX Spektre (MRS, Prometeus...) davaju.
Ale moderne cross-asemblery (Pasmo?) s tym mozu mat problemy, pretoze obvykle interne vsetko pocitaju v 32bit presnosti. Takze by som skusil este na cely vyraz aplikovat funkciu AND #FFFF ktora z vysledku "vyzobne" iba spodnych 16 bitov.
_dworkin píše:
0xFFFF+(-1802)Co takhle zkusit jiny prekladac... (...a to je to posledni co bych chtel)
A u mna zase uplne prve, ze by som skusil SjASMPlus :)


Zrovna Pasmo ma vse 16bitove. Vim to, protoze jsem mel s tim problem, kdyz jsem potreboval do nej nacpat 32 bitove konstanty ze vstupu. GNU M4 je 32bitove, takze pokud to bylo cislo tak to pro Pasmo umel rozdelit.
Nevim presne jak si to Pasmo vnitrne prevadi na unsigned, kdybych znal presny vzorec jak to dela usetrilo by me to problemy. Ono je to hodne specificky problem, protoze pro normalniho programatora to nenastane, on vi co tam vklada/pise, ja to tak uplne vzdy nevim, ja potrebuji znat spravnou formulu fungujici pro kazdy vstup.

S tim jinym prekladacem jsem myslel ze by se vykaslal na M4 FORTH a zkusil treba z88dk. Se kterym mam ja osobne vetsi problem. Pokud jste cetli posledni clanek Tisnovskeho na Rootu o Compiler Exploreru, tak me prekvapil ze to pry umi i prekladat i pro osmibity. To jsem si nepamatoval, mozna to pred lety neumel. Mrknul jsem se na to a videl jen 6502, ale pak nasel i neco pro Z80!

z88dk! A vysledek prednastaveneho kodu?
Kód:
// Type your code here, or load an example.
int square(int num) {
    return num + num;
}

Z88dk 2.2
Kód:
<No output file>

Asi tak nejak vypada casto i me snazeni kdyz to zkousim...
Nic to neprelozi dokud tam nedopisete nejake magicke parametry a i kdyz tam vlozim co trochu funguje tak to selze protoze to potrebuje knihovny. Ty by sli asi nahrat, ale jen ukazuji jak je to neintuitivni a jakou potrebujete znalost to vubec zkompilovat.

PS: Asi by stalo za to mit nejaky script na testovani pasmo, SjASMPlus a dalsich.
Jak se kde co pise a kde stejny kod se generuje rozdilne.

_________________
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: 08.09.2022, 13:09 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1113
Has thanked: 100 times
Been thanked: 159 times
Kód:
  ORG 0x8000
 
  ld bc, low 5*256 + 8 + 513
  ld de, high 5*256 + 8 + 513
 
if 0
  db ""
endif
  ld a,-1+(-1802)
  ld a,-1802+(-1)
  ld a,-1802+0xFFFF
  ld a,-1802+(0xFFFF)
  ld a,0xFFFF+(-1802)
if 0
  db "low"
endif
  ld a,low -1+(-1802)
  ld a,low -1802+(-1)
  ld a,low -1802+0xFFFF
  ld a,low -1802+(0xFFFF)
  ld a,low 0xFFFF+(-1802)
if 0
  db "0xffff and"
endif
  ld a,0xffff and (-1+(-1802))
  ld a,0xffff and (-1802+(-1))
  ld a,0xffff and (-1802+0xFFFF)
  ld a,0xffff and (-1802+(0xFFFF))
  ld a,0xffff and (0xFFFF+(-1802))
if 0
  db "low 0xffff and"
endif
  ld a,low 0xffff and (-1+(-1802))
  ld a,low 0xffff and (-1802+(-1))
  ld a,low 0xffff and (-1802+0xFFFF)
  ld a,low 0xffff and (-1802+(0xFFFF))
  ld a,low 0xffff and (0xFFFF+(-1802))
if 0
  db "0xffff &"
endif
  ld a,0xffff & (-1+(-1802))
  ld a,0xffff & (-1802+(-1))
  ld a,0xffff & (-1802+0xFFFF)
  ld a,0xffff & (-1802+(0xFFFF))
  ld a,0xffff & (0xFFFF+(-1802))
if 0
  db "low 0xffff &"
endif
  ld a,low 0xffff & (-1+(-1802))
  ld a,low 0xffff & (-1802+(-1))
  ld a,low 0xffff & (-1802+0xFFFF)
  ld a,low 0xffff & (-1802+(0xFFFF))
  ld a,low 0xffff & (0xFFFF+(-1802))
if 0
  db "+(0xffff &"
endif
  ld a,+(0xffff & (-1+(-1802)))
  ld a,+(0xffff & (-1802+(-1)))
  ld a,+(0xffff & (-1802+0xFFFF))
  ld a,+(0xffff & (-1802+(0xFFFF)))
  ld a,+(0xffff & (0xFFFF+(-1802)))


Kód:
dworkin@dw-A15:~/Programovani/ZX/Forth/Pasmo_test$ ./run.sh ld_low_high.asm
      ORG 8000
8000:010900   LD BC, 0009
8003:110700   LD DE, 0007
      IF (false)
-   db ""
      ENDIF
8006:3E09   LD A, 09
8008:3EF7   LD A, F7
800A:3EF7   LD A, F7
800C:3EF7   LD A, F7
800E:3EF5   LD A, F5
      IF (false)
-   db "low"
      ENDIF
8010:3E09   LD A, 09
8012:3EF7   LD A, F7
8014:3EF7   LD A, F7
8016:3EF7   LD A, F7
8018:3EF5   LD A, F5
      IF (false)
-   db "0xffff and"
      ENDIF
801A:3E09   LD A, 09
801C:3EF7   LD A, F7
801E:3EF7   LD A, F7
8020:3EF7   LD A, F7
8022:3EF5   LD A, F5
      IF (false)
-   db "low 0xffff and"
      ENDIF
8024:3E09   LD A, 09
8026:3EF7   LD A, F7
8028:3EF7   LD A, F7
802A:3EF7   LD A, F7
802C:3EF5   LD A, F5
      IF (false)
-   db "0xffff &"
      ENDIF
802E:3E09   LD A, 09
8030:3EF7   LD A, F7
8032:3EF7   LD A, F7
8034:3EF7   LD A, F7
8036:3EF5   LD A, F5
      IF (false)
-   db "low 0xffff &"
      ENDIF
8038:3E09   LD A, 09
803A:3EF7   LD A, F7
803C:3EF7   LD A, F7
803E:3EF7   LD A, F7
8040:3EF5   LD A, F5
      IF (false)
-   db "+(0xffff &"
      ENDIF
8042:3E09   LD A, 09
8044:3EF7   LD A, F7
8046:3EF7   LD A, F7
8048:3EF7   LD A, F7
804A:3EF5   LD A, F5
Emiting raw binary from 8000 to 804B

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

Registrován: 23.06.2013, 23:49
Příspěvky: 1113
Has thanked: 100 times
Been thanked: 159 times
Wow! Nasel jsem kratsi variantu vracejici spravny vysledek!
Kód:
if 0
  db "+(-1802) -1"
endif
  ld a,+(-1802)-1

Kód:
      IF (false)
-   db "+(-1802) -1"
      ENDIF
804C:3EF5   LD A, F5

_________________
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: 08.09.2022, 13:44 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1113
Has thanked: 100 times
Been thanked: 159 times
Lisiak4 píše:
U ZX se v asm nečte hodnota od nejnižšího bytu po ten vyšší? Nějak nerozumím jak tam může vznikat ta nepřesnost při práci u 16 bitového rozsahu vůči 32 bitovému rozsahu. A další věci je co mně zajímá, to se u asm na ZX nemůže definovat rozsah s jakým se pracuje? 1 byte, 2 byte, 4 byte? Asi může, ale interně si překladač pracuje s 32 bitovou hodnotou?

Jako je mi jasný že já nejlépe vidím problém, až když se s ním přímo potýkám...


Je to zavisle od prekladace. Standartni ...eee.. jak se rekne falesne instrukce? Pseudoinstrukce? Pro vkladani cisel do pameti jsou stejne jako pro intel

DB - vlozi bajt
DW - vlozi slovo (16 bit)
DD a dalsi uz to neumi, pravdepodobne proto, ze uz je to mimo schopnosti Z80 a musel bys zvolit jakou budes emulovat endianitu. Zda k tomu pridas i nejake pseudoinstrukce pro praci s 32 bitovym cislem, zda to bude stale v pameti, nebo zda zvolis ze DEHL je 32 bitovy cislo, nebo HLDE atd. Je tam uz moc voleb.

ld A, 8_bit_cislo - vlozi 8 bitove cislo, orizne to na spodnich 8 bitu

Format cisla bude asi taky zavisly od prekladace, jake zna napriklad predpony pro hex atd.
Co udela se zapornymi cisly.
Pokud mame misto cisla vzorec tak konkretne pasmo pokud vzorec zacina "(" to vezme ze to neni vzorec, ale ukazatel a pak skonci s chybou pokud vzorec vypada nejak jako (10+5)/5. "/5 what?". Nebo (10+5)-(20*3). "- what?" V nejhorsim pripade to spocita a udela z toho adresu.

ld HL, 16_bit_cislo - vlozi 8 bitove cislo, orizne to na spodnich 16 bitu

Omezeni to same co ld A

Pokud chceme do H vlozit hornich 8 bitu
Kód:
if 0
  db "500-2302"
endif

ld HL, -1802                    ;
ld HL, 500-2302                 ;
ld HL, -2302+500                ; uvodni minus je pro cely vyraz...
ld HL, -(2302+500)              ;
ld H, high 500-2302             ; asi nejmene riskantni zpusob
ld H, 500-2302/256              ; bude fungovat jen pro kladna cisla a -1802 nesmi byt "10000+23000"
ld H,+(500-2302)/256            ; bude fungovat jen pro kladna cisla
ld H,+((500-2302) & 0xffff)/256 ; ok, ale nejsem si jisty, protoze to stale muze brat jako zaporne cislo!
ld H,+((500-2302) & 0xff00)/256 ; ok, ale nejsem si jisty, protoze to stale muze brat jako zaporne cislo!
ld H,+((500-2302) >>8) & 0xff   ; ok
ld H, 0xff & ((500-2302)>>8)    ; ok ale high je stale kratsi zapis

Kód:
      IF (false)
-   db "500-2302"
      ENDIF
804E:21F6F8   LD HL, F8F6
8051:21F6F8   LD HL, F8F6
8054:210EF5   LD HL, F50E
8057:210EF5   LD HL, F50E
805A:26F8   LD H, F8
805C:26EC   LD H, EC
805E:26F8   LD H, F8
8060:26F8   LD H, F8
8062:26F8   LD H, F8
8064:26F8   LD H, F8
8066:26F8   LD H, F8

Takze uz chapu proc ma Pasmo problem s tim -1802-1. Bere to jako -(1802-1).
Bohuzel to vytvari mnohem vetsi problem...vlastne ne, to jde taky vyresit...

0xffff+xxx bude vzdy OK
+(xxx)-1 bude taky vzdy OK
ld BC,xxx bude nekdy spatne....

Budu muset prolezt cely kod a vsude kde vkladam jen text to nahradit za

ld BC,+(xxx) pak to bude vzdy OK

Obcas pro kratsi kod mam jen ze vkladam text, ma to omezeni ze musim resit zarovnani na spravnou delku, ale zase nemusim zjistovat zda vstup je cislo. Pokud uz vim ze vstup je cislo tak volam __HEX_HL (0..15 bit) nebo __HEX_L (0..7 bit) (Popripade __HEX_H (8..15 bit), __HEX_E(16..23 bit), __HEX_D (24..31 bit)) Pak vystup vypada jako 0x83, takze jakoby kladne cislo.

_________________
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: 08.09.2022, 14:01 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1113
Has thanked: 100 times
Been thanked: 159 times
l00k píše:
Busy píše:
Ale moderne cross-asemblery (Pasmo?) s tym mozu mat problemy, pretoze obvykle interne vsetko pocitaju v 32bit presnosti. Takze by som skusil este na cely vyraz aplikovat funkciu AND #FFFF ktora z vysledku "vyzobne" iba spodnych 16 bitov.

potvrzuji, dělá to i AS (ASW) - zrovna nedávno mi hlásil překladač nedovolený rozsah pro instrukci JR i když bylo návěští jen kousek od skoku...
bylo tam:
Kód:
rutadr   equ    0-extrdtlen
              phase  rutadr
             ...
            jr   nz,cc2
           ...
cc2:   ...

prostě toto by libovolný 8bit. překladač v pohodě projel a moderní PC překladač ani náhodou

Z toho nejsem vubec moudry. Neznam synataxi pro AS, ale ty prvni 2 radky vypadaji ze nemaji vubec zadny vliv na

jr nz,cc2
...
cc2:

A pak pokud znam Pasmo tak by

rutadr equ 0-cokoliv

vyhodnotil jako kladne cislo

rutadr equ 0-1

je rutadr = 0xffff

i kdyby tam bylo jen

rutadr equ -1

tak okamzite rutadr nabere kladnou hodnotu 0xffff.

Pokud bych si myslel ze rutadr je stale -1 tak by me rychle vyvedl z omylu po

ld HL,5*rutadr

nebo

if (rutadr < 0)
Kód:
  ORG 0x8000

  rutadr equ -1
 
if ( rutadr > 0 )
  db "vetsi jak nula"
endif
if ( rutadr < 0 )
  db "nula"
endif
if ( rutadr < 0 )
  db "mensi jak nula"
endif
Kód:
      ORG 8000
rutadr      EQU FFFF
      IF (true)
8000:76657473   DEFB of 14 bytes
8004:69206A61
8008:6B206E75
800C:6C61
      ENDIF
      IF (false)
-   db "nula"
      ENDIF
      IF (false)
-   db "mensi jak nula"
      ENDIF
Emiting raw binary from 8000 to 800D

PS: Ale pokud je AS starsi jak Pasmo tak je aspon videt odkud to ma.

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

Registrován: 23.06.2013, 23:49
Příspěvky: 1113
Has thanked: 100 times
Been thanked: 159 times
Hmm... napsal jsem do konzole grep -R format a vyjelo mi to snad stovky radku.

Vcetne jedne z poslednich
Kód:
if.m4:__{}    ld    A, format({%-11s},$1); ifelse(__IS_MEM_REF($1),{1},{3:13},{2:7 })      dup $1 = if

Tohle proste nepujde snadno opravit.
Hodnota musi mit jiny zapis jako ukazatel. +($1) by z ukazatele udelalo hodnotu.

Pri vstupu "(0x8000)" to vytvori:
ld A, +((0x8000)) bude ld A,0 ne ld A,(0x8000)

_________________
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: 08.09.2022, 17:02 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1113
Has thanked: 100 times
Been thanked: 159 times
Nevite co je s githubem? Nedari se mi nacist novy kod... Zkousle jsem i firefox, zkousel jsem i jediny soubor, zkousel jsem to i pres volbu souboru pomoci menu a ne pretazenim a nic...

Udelal jsem jeste nejake dalsi testy s pasmem a zjistil ze me "+(xxx)" nezachrani. Protoze pokud bude xxx vyraz a nekde uvnitr bude zavorka, tak to pasmo zacne zase vyhodnocovat spatne pokud hned za zavorkou bude "-".
Prvne mam spravne hodnoty a po mezere spatne, pokud je dalsi mezera tak jina spatna hodnota.
Kód:
  ORG 0x8000
 
if 0
  db ""
endif
  ld a,-1806
  ld a,0xFFFC+(-1802)

  ld a,-4+(-1802)
 
  ld a,-1802-4
  ld a,-1802-3-1
  ld a,-1802+(-4)
  ld a,-1802+0xFFFC
  ld a,-1802+(0xFFFC)
if 0
  db "()"
endif
  ld a,(-1806)
  ld a,(0xFFFC+(-1802))
 
  ld a,(-4+(-1802))

  ld a,(-1802-4)
  ld a,(-1802-3-1)
  ld a,(-1802+(-4))
  ld a,(-1802+0xFFFC)
  ld a,(-1802+(0xFFFC))
if 0
  db "+()"
endif
  ld a,+(-1806)
  ld a,+((-4)+(-1802))
  ld a,+(0xFFFC+(-1802))

  ld a,+(-4+(-1802))

  ld a,+(-1802-4)
  ld a,+(-1802-3-1)
  ld a,+(-1802+(-4))
  ld a,+(-1802+0xFFFC)
  ld a,+(-1802+(0xFFFC))
if 0
  db "+()-4"
endif
  ld a,-1806
  ld a,+(-1802)+0xFFFC
  ld a,+(-1802)-4
  ld a,+(-1802)-3-1
  ld a,+(-1802)+0xFFFD-1
  ld a,+(-1802)+(-3)+(-1)
  ld a,+(-1802)+(-4)
  ld a,+(-1802)+(0xFFFC)
  ld a,+(-1802)-(3+1)
  ld a,+(-1802)+(4-8)
  ld a,+(-1802)+(4-4-4)
 
  ld a,+(-1802)-(-4+8)
  ld a,+((-1802)-(-4+8))
 
  ld a,+(-1802)+(-8+4)
  ld a,+(-1802-(-4+8))

Kód:
dworkin@dw-A15:~/Programovani/ZX/Forth/Pasmo_test$ pasmo -d negate.asm smaz.bin
      ORG 8000
      IF (false)
-   db ""
      ENDIF
8000:3EF2   LD A, F2
8002:3EF2   LD A, F2
8004:3E06   LD A, 06
8006:3EFA   LD A, FA
8008:3EFA   LD A, FA
800A:3EFA   LD A, FA
800C:3EFA   LD A, FA
800E:3EFA   LD A, FA
      IF (false)
-   db "()"
      ENDIF
8010:3AF2F8   LD A, (F8F2)
8013:3AF2F8   LD A, (F8F2)
8016:3A0607   LD A, (0706)
8019:3AFAF8   LD A, (F8FA)
801C:3AFAF8   LD A, (F8FA)
801F:3AFAF8   LD A, (F8FA)
8022:3AFAF8   LD A, (F8FA)
8025:3AFAF8   LD A, (F8FA)
      IF (false)
-   db "+()"
      ENDIF
8028:3EF2   LD A, F2
802A:3EF2   LD A, F2
802C:3EF2   LD A, F2
802E:3E06   LD A, 06
8030:3EFA   LD A, FA
8032:3EFA   LD A, FA
8034:3EFA   LD A, FA
8036:3EFA   LD A, FA
8038:3EFA   LD A, FA
      IF (false)
-   db "+()-4"
      ENDIF
803A:3EF2   LD A, F2
803C:3EF2   LD A, F2
803E:3EF2   LD A, F2
8040:3EF2   LD A, F2
8042:3EF2   LD A, F2
8044:3EF2   LD A, F2
8046:3EF2   LD A, F2
8048:3EF2   LD A, F2
804A:3EF2   LD A, F2
804C:3EF2   LD A, F2
804E:3EF2   LD A, F2
8050:3E02   LD A, 02
8052:3E02   LD A, 02
8054:3EEA   LD A, EA
8056:3EEA   LD A, EA
Emiting raw binary from 8000 to 8057

Kód:
dworkin@dw-A15:~/Programovani/ZX/Forth/Pasmo_test$ pasmo -B -d negate.asm smaz.bin
      ORG 8000
      IF (false)
-   db ""
      ENDIF
8000:3EF2   LD A, F2
8002:3EF2   LD A, F2
8004:3E06   LD A, 06
8006:3EFA   LD A, FA
8008:3EFA   LD A, FA
800A:3EFA   LD A, FA
800C:3EFA   LD A, FA
800E:3EFA   LD A, FA
      IF (false)
-   db "()"
      ENDIF
8010:3EF2   LD A, F2
8012:3EF2   LD A, F2
8014:3E06   LD A, 06
8016:3EFA   LD A, FA
8018:3EFA   LD A, FA
801A:3EFA   LD A, FA
801C:3EFA   LD A, FA
801E:3EFA   LD A, FA
      IF (false)
-   db "+()"
      ENDIF
8020:3EF2   LD A, F2
8022:3EF2   LD A, F2
8024:3EF2   LD A, F2
8026:3E06   LD A, 06
8028:3EFA   LD A, FA
802A:3EFA   LD A, FA
802C:3EFA   LD A, FA
802E:3EFA   LD A, FA
8030:3EFA   LD A, FA
      IF (false)
-   db "+()-4"
      ENDIF
8032:3EF2   LD A, F2
8034:3EF2   LD A, F2
8036:3EF2   LD A, F2
8038:3EF2   LD A, F2
803A:3EF2   LD A, F2
803C:3EF2   LD A, F2
803E:3EF2   LD A, F2
8040:3EF2   LD A, F2
8042:3EF2   LD A, F2
8044:3EF2   LD A, F2
8046:3EF2   LD A, F2
8048:3E02   LD A, 02
804A:3E02   LD A, 02
804C:3EEA   LD A, EA
804E:3EEA   LD A, EA
Emiting raw binary from 8000 to 804F

Tady jsem zapnul -B
Kód:
       -B --bracket
                 Bracket only mode: parenthesis are reserved for expressions.

Jen netusim jak mu s timto modem rici ze chci ukazatel. .)

Podle me je proste

ld BC,[adresa]
ld BC,(vyraz)

mnohem lepsi reseni. I kdyz pro to ma pasmo jednoduche pravidlo. Vse co zacina "(" je ukazatel.
To si ale ja nemohu dovolit, protoze se snazim programatora od techto problemu izolovat.
Ale zase bych mohl zavest ze [] je ukazatel...

_________________
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: 08.09.2022, 17:50 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1113
Has thanked: 100 times
Been thanked: 159 times
Ja jsem fakt uz uplne blbej.
To musi byt dost tezke sam poznat... .)
Ale porad mam pocit, ze na tohle nestacim, vsude samy problem kdyz se nad tim zamyslim.
I u takto jednoduchych veci.

Otevrel jsem arithmetic.m4 a dival se kde mam vsude format() a je to 3:10, takze vim ze to neni ukazatel.
Davam to do +() zavorek.
Pak si to v konzoli prohlednu a...
Vzdyt jsem si VUBEC nepomohl. Kdyz uz vim ze uvnitr kazde zavorky ten problem vyvstane nanovo!
+(-abc-1) zase selze!
Ok kaslu na to stejne kdyz M4 nezna abc tak je to tim ze je to adresa, teda kladne cislo a nebo je to pres "abc equ xxx" kde je to hned taky kladne cislo.
No jo, ale co takove "-5 + abc". To me skript rekne ze to neznam a pak pasmo spatne zkompiluje.
Ha! "0 $1" to resi. "0 - 5 + abc"
Vlastne ne... kdyz to bude kladne bez pluska tak to selze.
Ach jo.
Ok takze jeste zbyva, misto format mit vlastni makro a tam zjistit zda prvni znak je minus a pokud ano pridat znak nuly.
To by snad melo fungovat.
abc je vzdy kladne.
Kdyz uz to bude ve vlastnim makru tak nekdy pridat pres regexp neco jako "(-" --> "(0-".

_________________
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.2022, 02:16 
Offline
Kecálek

Registrován: 10.07.2014, 01:57
Příspěvky: 169
Has thanked: 25 times
Been thanked: 225 times
helo,

rozhodol som sa ze aj napriek nulovej reakcii na moj prechadzajuci prispevok tomu dam este sancu. a aj ked nie som pouzivatelom pasma, dal som si tu namahu a pozrel som jeho zdrojaky... ako sa vravi, najlepsia dokumentacia je zdrojak.

zo zdrojaku (verzia, ktore je v debiane) je jasne vidno, ze unarny '-' operator sa vyhodnoti uplne ako posledny. ze ked je v expression na zaciatku unarny minus, najskor sa vyhodnoti samotna expression ako keby tam ten minus nebol, a az potom sa cely vysledok zneguje, co samozrejme nie je s kostolnym poriadkom, pretoze unarne minus ma vyssiu prioritu ako binarne plus/minus (dokonca ma prioritu vyssiu ako nasobenie/delenie, ale tam to v skutocnosti nevadi, je totiz jedno ci minusom znegujeme iba prvy operand nasobenia alebo az cely vysledok... dokaz ponechavam na domacu ulohu citatela ;])

a to samozrejme plati nie len pre samotny vyraz, ale aj pre kazdy jeho uzatvorkovany podvyraz, vid napr.:
Kód:
$ cat test.asm; pasmo -d -v -8 test.asm test.bin
      org   0x4000
      ld   hl,42+(-123+567)
      ret

Loading file: test.asm in 0
Finished loading file: test.asm in 4
Entering pass 1
Pass 1 finished
Entering pass 2
      ORG 4000
4000:2178FD   LD HL, FD78
4003:C9      RET
Pass 2 finished
Emiting raw binary from 4000 to 4003


vo vysledku mame zjavne zaporne cislo (0xFD78), ale podla matematiky by vysledok mal byt kladny, pretoze vysledok zatvorky je kladny (kedze 567 je viac ako 123) a teda spocitanim cisla 42 a ineho kladneho cisla (mensieho ako 1000, aby som vylucil pretecenie) by mal zostat vysledok kladny.

nuz a tak som ucinil pokus o napravu. v prilohe je patch, ktory by mal tento problem unarneho minus osetrit (ale netvrdim, ze nie je viac podobnych situacii, kde to treba riesit, mozno aj s unarnym logickym NOT?)

po aplikovani patchu dostavam:
Kód:
$ cat test.asm; pasmo -d -v -8 test.asm test.bin
      org   0x4000
      ld   hl,42+(-123+567)
      ret

Loading file: test.asm in 0
Finished loading file: test.asm in 4
Entering pass 1
Pass 1 finished
Entering pass 2
      ORG 4000
4000:21E601   LD HL, 01E6
4003:C9      RET
Pass 2 finished
Emiting raw binary from 4000 to 4003

co znie ovela doveryhodnejsie ;]

pred tym, ako s patchom budem otravovat developera pasma, bolo by dobre (kedze tu mame takyto celkom narocny projekt, ktory tak masivne preveruje vlastnosti kompilera), aby [_dworkin] prilozeny patch experimentalne overil a nejaku dobu aktivne testoval (ci sa patchom nerozbili ine aritmeticke vyrazy a podobne..).

v prilohe je aj patch subor, ktory nesuvisi s touto temou. a sice, v pripade prekladania s parametrom "-8" (na detegovanie instrukcii, ktore i8080 nepozna) dostavame nespravny warning ohladom instrukcie "out (nn),a", ktoru i8080 samozrejme pozna (ako "OUT <NN>"). to sice nema vplyv na vygenerovany bin subor, ale zbytocne to kazi output ;]

ub

p.s.: kedze .txt prilohy stale nie su povolene (!!!) (a asi rovnako aj .patch a .diff, ktore som teraz uz radsej ani neskusal, je to proste opruz zakazdym skusat milion roznych pripon a nakoniec zistit, ze aj tak treba zipovat...), som nuteny dat prilohu na externy server. a to samozrejme implikuje, ze dana priloha bude pristupna len urcitu dobu... takze:

https://sindik.at/~ub880d/tmp/pasmo_una ... _fix.patch
https://sindik.at/~ub880d/tmp/pasmo_out ... _fix.patch


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 ... 15, 16, 17, 18, 19, 20, 21 ... 40  Další

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 4 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