OldComp.cz

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


Právě je 29.03.2024, 02:31

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 37 ]  Přejít na stránku Předchozí  1, 2, 3  Další
Autor Zpráva
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 14.02.2016, 21:18 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
Billy48 píše:
Este doplnim, ze ked som pouzil PROMETHEUS, tak v nom treba vlozit jr nc,$+2 co mna prekvapilo.
Tak to je fakt divne. Pretoze znak $ je vo vsetkych asembleroch co poznam (vratane MRS aj SjASM) definovany ako zaciatocna adresa riadku, na ktorom sa pouzije. Cize ak je na riadku jedna instrukcia, je to VZDY prvy bajt tejto instrukcie.
#8000 jr $+3
#8002 inc l

Znak $ ma v tomto pripade hodnotu #8000, takze jr $+3 znamena obskocenie instrukcie inc l.

Pokial to ma Prometeus nejak inak, je to bug. Alebo nedodrzuje zauzivane standarty...


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 14.02.2016, 21:54 
Offline
Radil
Uživatelský avatar

Registrován: 13.05.2013, 17:48
Příspěvky: 529
Bydliště: Košice
Has thanked: 423 times
Been thanked: 265 times
Nechcelo sa mi to veriť, tak som to v Prometheovi vyskúšal. A je to pravda.
Ak sa $ objaví v inštrukcii, má hodnotu adresy až za kódom inštrukcie, nie pred, ako by sa očakávalo.
Kód:
#8000   LD HL,$     ->  21 01 80
#8003   LD IX,$     ->  DD 21 05 80

Pri použití $ v DEFW si so správnosťou vyhodnotenia nie som istý. Mala by tam byť 3x rovnaká adresa, alebo je to takto správne?
Kód:
#8000   DEFW $,$,$     ->  00 80 02 80 04 80

Predsalen som ešte urobil pokus v Macro Assembler AS a ten vyhodnocuje $ za inštrukciou správne. Pri použití v DEFW $,$,$ sú všetky 3 hodnoty rovnaké.

_________________
https://pmd85.borik.net - PMD 85 Emulátor, PMD 85, PMD 32-SD
https://pp01.borik.net - PP 01 Emulátor, PP 01, SD-ROM Modul


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 15.02.2016, 00:21 
Offline
Radil
Uživatelský avatar

Registrován: 02.08.2015, 15:23
Příspěvky: 259
Bydliště: Skalica
Has thanked: 52 times
Been thanked: 141 times
Busy píše:
Tak to je fakt divne. Pretoze znak $ je vo vsetkych asembleroch co poznam (vratane MRS aj SjASM) definovany ako zaciatocna adresa riadku, na ktorom sa pouzije.
Presne tak som to aj pochopil a zdalo sa mi divne, ako to prometheus preklada, tak som to sem doplnil, aby sa o tom vedelo.

rombor píše:
Nechcelo sa mi to veriť, tak som to v Prometheovi vyskúšal. A je to pravda.
Som rad ze si to vyskusal a potvrdil, mohol som sa zmylit. Takze pri skokoch treba pouzivat navestia a pri $ 3x merat a raz rezat :)

A skusal som aj pod Linuxom assembler PASMO, ktory obcas pouzijem (castejsie sa hrajem s PROMETHEOM na DIDAKTIKU) a ten kompiluje tak ako sa patri.
Kód:
PASMO assembler pod Linuxom:
--------------------------------------------------
#8000       ld hl,$       ;21 00 80
#8003       ld ix,$       ;DD 21 03 80

#8000       defw $,$,$    ;00 80 00 80 00 80

vsetko je OK.


A este som skusil taku haluz:
Kód:
Kompilator pasmo:
skompiloval bez problemov.
      defb  $,$,$      ;00 00 00

ale PROMETHEUS pri
      defb  $,$,$      ;vypisal - Big number
Takze zase v tomto pripade to ma prometheus osetrene a pasmo vlozi len jeden bajt z dvoch(ten menej vyznamny) co je podla mna chyba. Tiez by to malo vypisat chybu, ze nieje mozne vlozit dva bajty do jedneho.

A este dotaz poznate tu niekto nejaky free disassembler pre Z80? Ja obcas pouzijem z80dasm, ale ten nie je podla mojich predstav.

_________________
ZX Spectrum, ZX Spectrum +, DIDAKTIK GAMA, DIDAKTIK M, DIDAKTIK KOMPAKT, D40, D80, Interface M/P, MELODIK, UR-4, BEST, KP 311, BT100, SP210T, GAMACENTRUM 01 (cierna), ROBOTRON K6304, divIDE, K-Mouse, PMD 85-2, Amiga 500, Amiga 500+, Amiga 1200


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 15.02.2016, 12:43 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
rombor píše:
Kód:
#8000   DEFW $,$,$     ->  00 80 02 80 04 80
Zda sa ze autor Prometea si situaciu znacne zjednodusil, a namiesto odpametej hodnoty instrukcneho citaca pred prekladom daneho riadku, pouziva vzdy aktualnu hodnotu v ramci prekladu riadku. Co je jednoznacne koncepcna chyba.
A najlepsie je, ze vsetky priklady pouzitia $ v manuali Prometea su iba s pseudoinstrukciami ktore negeneruju ziadny realny kod (ent, equ...) a pri ktorych sa tym padom chyba neprejavi.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 15.02.2016, 12:58 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
Billy48 píše:
A este som skusil taku haluz:
Kód:
Kompilator pasmo:
skompiloval bez problemov.
      defb  $,$,$      ;00 00 00

ale PROMETHEUS pri
      defb  $,$,$      ;vypisal - Big number
Takze zase v tomto pripade to ma prometheus osetrene a pasmo vlozi len jeden bajt z dvoch(ten menej vyznamny) co je podla mna chyba. Tiez by to malo vypisat chybu, ze nieje mozne vlozit dva bajty do jedneho.
Napis na zaciatok org mensi ako 250 a ani prometheus uz nebude protestovat :) :D

Ale k veci. Pokial uzivatel napise defb alebo db tak je jasne ze ide iba o jednobajtove hodnoty a pre viacbajtove hodnoty sa vyssie bajty urezu. Zase ale na druhej strane je od asemblera slusne ked upozorni na to ze cislo sa do bajtu nevlezie. Konkretne MRS to ma osetrene tak, ze ak je vyssi bajt hodnoty #00 alebo #FF tak do kodu vlozi nizsi bajt hodnoty, a az vyssi bajt hodnoty je od #01 do #FE tak az potom vypise chybu. Ta hodnota #FF vo vyssom bajte je interne povolena preto lebo to moze byt zaporna hodnota, napr. -1 znamena #FFFF a ked uzivatel napise ld a,-1 tak aby sa to spravne a bez chyby prelozilo.

Billy48 píše:
poznate tu niekto nejaky free disassembler pre Z80? Ja obcas pouzijem z80dasm, ale ten nie je podla mojich predstav.
A ake su tvoje predstavy ?
Ja osobne pouzivam priamo na speccy moje dva programy SMM05 a MRS09/2, a na PeCi nejaky DASMx stiahnuty z netu:
Kód:
DASMx object code disassembler
==============================
(c) Copyright 1996-1999   Conquest Consultants
Version 1.30 (Oct  6 1999)
a pokial potrebujem vygenerovat zdrojak aj s navestiami, tak potom pouzivam moje Mdisa2 http://busy.speccy.cz/tvorba/mdisa.htm


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 15.02.2016, 19:44 
Offline
Radil
Uživatelský avatar

Registrován: 13.05.2013, 17:48
Příspěvky: 529
Bydliště: Košice
Has thanked: 423 times
Been thanked: 265 times
Busy píše:
Ale k veci. Pokial uzivatel napise defb alebo db tak je jasne ze ide iba o jednobajtove hodnoty a pre viacbajtove hodnoty sa vyssie bajty urezu. Zase ale na druhej strane je od asemblera slusne ked upozorni na to ze cislo sa do bajtu nevlezie. Konkretne MRS to ma osetrene tak, ze ak je vyssi bajt hodnoty #00 alebo #FF tak do kodu vlozi nizsi bajt hodnoty, a az vyssi bajt hodnoty je od #01 do #FE tak az potom vypise chybu. Ta hodnota #FF vo vyssom bajte je interne povolena preto lebo to moze byt zaporna hodnota, napr. -1 znamena #FFFF a ked uzivatel napise ld a,-1 tak aby sa to spravne a bez chyby prelozilo.
Prometheus spracováva DEFB tak, ako si to popísal. Hodnota môže byť v intervale <-256, 255>.
AS však dovoľuje hodnotu v DEFB iba v intervale <-128, 255>. Zvláštne...

_________________
https://pmd85.borik.net - PMD 85 Emulátor, PMD 85, PMD 32-SD
https://pp01.borik.net - PP 01 Emulátor, PP 01, SD-ROM Modul


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 16.02.2016, 18:11 
Offline
Óm Nejvyšší

Registrován: 16.06.2014, 12:23
Příspěvky: 3676
Bydliště: Jesenice u Prahy
Has thanked: 28 times
Been thanked: 280 times
Jak se implementuje hodnota -256 do jednoho bajtu ?

_________________
Diagnóza: Touretteův syndrom, Koprolálie, Dyslexie, Obsedantně kompulzivní porucha.
Kalkulačky: Privileg PR56, TI51-III, TI57, TI58, TI59, TI83, TI-83 Premium CE, TI89
Počítadla: BOBO64, ZX48 plus, DG-88, Didaktik-M, C16, C64C, Amiga 500+, MZ800, MUPID C2A2


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 16.02.2016, 18:39 
Offline
Radil
Uživatelský avatar

Registrován: 13.05.2013, 17:48
Příspěvky: 529
Bydliště: Košice
Has thanked: 423 times
Been thanked: 265 times
danhard píše:
Jak se implementuje hodnota -256 do jednoho bajtu ?
Keďže -256 je #FF00, tak je to na základe vyššie popísaných pravidiel proste #00.

_________________
https://pmd85.borik.net - PMD 85 Emulátor, PMD 85, PMD 32-SD
https://pp01.borik.net - PP 01 Emulátor, PP 01, SD-ROM Modul


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 16.02.2016, 19:09 
Offline
Óm Nejvyšší

Registrován: 16.06.2014, 12:23
Příspěvky: 3676
Bydliště: Jesenice u Prahy
Has thanked: 28 times
Been thanked: 280 times
Aby to mělo nějakou logiku :)
Jeden Byte může být single integer unsigned, single integer signed, nebo string.
Vstupní dekadická hodnota je 0 až 255, -128 až +127, 0 až 255.
Jiný rozsah vstupních hodnot, než <-128, 255> nemá smysl a nemůže se jednoznačně do jednoho Byte implementovat.

_________________
Diagnóza: Touretteův syndrom, Koprolálie, Dyslexie, Obsedantně kompulzivní porucha.
Kalkulačky: Privileg PR56, TI51-III, TI57, TI58, TI59, TI83, TI-83 Premium CE, TI89
Počítadla: BOBO64, ZX48 plus, DG-88, Didaktik-M, C16, C64C, Amiga 500+, MZ800, MUPID C2A2


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 16.02.2016, 19:33 
Offline
Radil
Uživatelský avatar

Registrován: 13.05.2013, 17:48
Příspěvky: 529
Bydliště: Košice
Has thanked: 423 times
Been thanked: 265 times
danhard píše:
Aby to mělo nějakou logiku :)
Jeden Byte může být single integer unsigned, single integer signed, nebo string.
Vstupní dekadická hodnota je 0 až 255, -128 až +127, 0 až 255.
Jiný rozsah vstupních hodnot, než <-128, 255> nemá smysl a nemůže se jednoznačně do jednoho Byte implementovat.
To všetko je pravda. Ale tu už skôr išlo o to, ako "natívne" prekladače na ZX Spectre (MRS a Prometheus) vyhodnocujú výraz a ako výslednú hodnotu ukladajú do DEFB. Oba spomínané prekladače vyhodnocujú výraz 16-bitovo. A ak sa má vypočítaná hodnota uložiť do 1 bytu, tak sa za platnú hodnotu považuje taká, u ktorej je vyšší byte 0 alebo 255, čo zodpovedá mnou spomínaným intervalom. Nič viac, nič menej. Nevidím v tom žiadny závažný prehrešok.

_________________
https://pmd85.borik.net - PMD 85 Emulátor, PMD 85, PMD 32-SD
https://pp01.borik.net - PP 01 Emulátor, PP 01, SD-ROM Modul


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 16.02.2016, 20:16 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
danhard píše:
Aby to mělo nějakou logiku :)
Jeden Byte může být single integer unsigned, single integer signed, nebo string.
Vstupní dekadická hodnota je 0 až 255, -128 až +127, 0 až 255.
Jiný rozsah vstupních hodnot, než <-128, 255> nemá smysl a nemůže se jednoznačně do jednoho Byte implementovat.
Nezabudaj, ze sa bavime o asembleri, a nie o vyssich jazykoch s vopred zadefinovanymi udajovymi typmi. Pokial si ja vo svojom programe zadefinujem, ze cisla 255,254,...1,0 v bajte budu predstavovat hodnoty -1,-2,...,-255,-256 tak to tak bude a hotovo :)


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 16.02.2016, 23:12 
Offline
Radil
Uživatelský avatar

Registrován: 02.08.2015, 15:23
Příspěvky: 259
Bydliště: Skalica
Has thanked: 52 times
Been thanked: 141 times
danhard píše:
Jiný rozsah vstupních hodnot, než <-128, 255> nemá smysl a nemůže se jednoznačně do jednoho Byte implementovat.
Do jedneho bajtu sa neda impelmentovat ani rozsah <-128, 255> na to uz treba o jeden bit viac a rozsah bude <-256,255> co je vlastne 512 moznych kombinacii 9-tych bitov. Pri 8-mych bitoch (jeden bajt) je moznych 256 kombinacii preto ten rozsah <-128,127>. A ako pise Busy vo vyssich jazykoch si musis zadefinovat typ, aby kompilator vedel ako chces s cislami pracovat. napr. v pocitaci ulozena hodnota 01000001 moze byt, cislo 65, 41h, pismeno A, alebo Z80 ho "vidi" ako instrukciu LD B,C proste vzdy ide o to ako sa na urcitu kombinaciu bitov pozera a preto sa vo vyssich jazykoch definuje typ. potom vie kompilator co s bajtmi robit. Ak mi bude vyhovovat rozsah <-40,215> napr. teplota niecoho tak si definujem tych 256 kombinacii takto.

_________________
ZX Spectrum, ZX Spectrum +, DIDAKTIK GAMA, DIDAKTIK M, DIDAKTIK KOMPAKT, D40, D80, Interface M/P, MELODIK, UR-4, BEST, KP 311, BT100, SP210T, GAMACENTRUM 01 (cierna), ROBOTRON K6304, divIDE, K-Mouse, PMD 85-2, Amiga 500, Amiga 500+, Amiga 1200


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 17.02.2016, 13:16 
Offline
Óm Nejvyšší

Registrován: 16.06.2014, 12:23
Příspěvky: 3676
Bydliště: Jesenice u Prahy
Has thanked: 28 times
Been thanked: 280 times
Busy píše:
danhard píše:
Aby to mělo nějakou logiku :)
Jeden Byte může být single integer unsigned, single integer signed, nebo string.
Vstupní dekadická hodnota je 0 až 255, -128 až +127, 0 až 255.
Jiný rozsah vstupních hodnot, než <-128, 255> nemá smysl a nemůže se jednoznačně do jednoho Byte implementovat.
Nezabudaj, ze sa bavime o asembleri, a nie o vyssich jazykoch s vopred zadefinovanymi udajovymi typmi. Pokial si ja vo svojom programe zadefinujem, ze cisla 255,254,...1,0 v bajte budu predstavovat hodnoty -1,-2,...,-255,-256 tak to tak bude a hotovo :)

Píšu jak to vidí assembler a s jakým typem proměných při implementací hodnoty počítá.
Přímý zápis binární hodnoty je jasný, ale většinou ho musíš v zápisu označit, třeba 0FFh, aby si ho odlišil od dekadické hodnoty.
Jinak se snaží assembler naplnit hodnotu implementací toho, co je tam napsané.
Co si vymyslím za proměnnou je problém programu, to základní implemetance assembleru neřeší.
Assebler neumí diagnostikovat mentální stav pojídače koláčů, co sedí za klávesnicí :lol:

_________________
Diagnóza: Touretteův syndrom, Koprolálie, Dyslexie, Obsedantně kompulzivní porucha.
Kalkulačky: Privileg PR56, TI51-III, TI57, TI58, TI59, TI83, TI-83 Premium CE, TI89
Počítadla: BOBO64, ZX48 plus, DG-88, Didaktik-M, C16, C64C, Amiga 500+, MZ800, MUPID C2A2


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 18.02.2016, 13:37 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
danhard píše:
Busy píše:
danhard píše:
Aby to mělo nějakou logiku :)
Jeden Byte může být single integer unsigned, single integer signed, nebo string.
Vstupní dekadická hodnota je 0 až 255, -128 až +127, 0 až 255.
Jiný rozsah vstupních hodnot, než <-128, 255> nemá smysl a nemůže se jednoznačně do jednoho Byte implementovat.
Nezabudaj, ze sa bavime o asembleri, a nie o vyssich jazykoch s vopred zadefinovanymi udajovymi typmi. Pokial si ja vo svojom programe zadefinujem, ze cisla 255,254,...1,0 v bajte budu predstavovat hodnoty -1,-2,...,-255,-256 tak to tak bude a hotovo :)
Píšu jak to vidí assembler a s jakým typem proměných při implementací hodnoty počítá.
No praveze kompiler assebleru, na rozdiel od vyssich jazykov, typ ciselneho udaja vobec neriesi. Urci hodnotu cisla (vyrazu), a ak je vecsia nez pozadovana (dva bajty namiesto jedneho), a je moze ju osekat na pozadovanu (obvykle vyssi bajt je 0 alebo 255), ulozi hodnotu do kodu a hotovo. Ci si ten pojedac kolacov pod tou hodnotou predstavuje signed alebo unsigned integer, je mu uplne fuk :D


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 18.02.2016, 14:11 
Offline
Óm Nejvyšší

Registrován: 16.06.2014, 12:23
Příspěvky: 3676
Bydliště: Jesenice u Prahy
Has thanked: 28 times
Been thanked: 280 times
Ano, assembler strukturu proměnné neřeší, jenom jí přiřadí paměťový prostor v bajtech.
Ale když přiřazuje jednobajtovou hodnotu, tak tomu musí rozumět, aby přiřadil hodnotu jednoznačně.
A rozumí tomu dobře, když chci naplnit hodnotu do integer bez znaménka, dekadicky 0 až 255, integer se znaménkem, dek. hodnota -128 až 127, nebo string - tabulkovou hodnotu znaku, nebo přímo binárně.
Všechny ostatní implementace musím "nějak" osekat a to "nějak" není standardně definované a vždy způsobí ztrátu informace. Záleží tedy na překladači, jestli tam něco "nějak" naplní, nebo jestli ohlásí chybu.
V r.82, když se u nás začínalo s mikroprocesory, jsem si napsal pod ADT4500 univerzální assembler, do kterého jsem si postupně doplňoval mikroprocesory, které jsem potřeboval oživit.
V tý době žádnej internet nebyl a vývojové prostředí stálo většinou pěkný prachy.
Nesnažte se starýho psa přesvědčit, že se mají překladače psát jinak :)

_________________
Diagnóza: Touretteův syndrom, Koprolálie, Dyslexie, Obsedantně kompulzivní porucha.
Kalkulačky: Privileg PR56, TI51-III, TI57, TI58, TI59, TI83, TI-83 Premium CE, TI89
Počítadla: BOBO64, ZX48 plus, DG-88, Didaktik-M, C16, C64C, Amiga 500+, MZ800, MUPID C2A2


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ů: 37 ]  Přejít na stránku Předchozí  1, 2, 3  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 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