OldComp.cz

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


Právě je 16.04.2024, 20:56

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 16 ]  Přejít na stránku 1, 2  Další
Autor Zpráva
 Předmět příspěvku: Z80 assembler s podporou stranek
PříspěvekNapsal: 02.12.2020, 14:09 
Offline
Kecálek

Registrován: 07.05.2014, 12:10
Příspěvky: 197
Bydliště: Jbc
Has thanked: 0 time
Been thanked: 39 times
Zdravim,

potreboval bych upravit jeden projekt pro Z80, ktery pouziva strankovani, ale nenasel jsem zatim assembler, ktery by umel strankovani kompletne resit.
Moje predstava je, ze bych vzal zdrojaky, kde oznacim, co je v jake strance a kde je ta ktera stranka v ROM i v adresovem prostoru procesoru, a po prekladu budu mit BIN beho HEX, ktery rovnou flashnu do programove pameti.

Skladani po jednotlivych strankach neni asi mozne, protoze tam jsou funkce, ktere se volaji z jine stranky, a tak je potreba je spravne vzajemne slinkovat...

Neexistuje nekde treba nejaky podobny projekt, kde by se dalo inspirovat?

Diky.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Z80 assembler s podporou stranek
PříspěvekNapsal: 02.12.2020, 15:42 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3660
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 795 times
Nieco take sa da bez problemov spravit napriklad pomocou SjASMPLus.

Na zaciatku zdrojaku si otvoris binarku, do ktorej chces zapisovat prelozeny projekt:
Kód:
  OUTPUT meno_suboru.bin
Nasleduje kod pre jednotlive stranky v poradi, v akom ich chces mat ulozene v binarke. Vsetko, co asembler prelozi, sa bude sekvencne zapisovat do binarky.
Napriklad ak chces 16kB stranku, ktora sa da primapovat do priestoru #C000-#FFFF, tak kod bude vyzerat nejak takto:
Kód:
  ORG #C000
  ....kod...
  DS #10000-$
Uvodny ORG zabezpeci, ze kod bude fungovat na danych adresach, a zaverecne DS zase zabezpeci, ze ak kod nevyplni celu stranku, zvysok do 16kB sa vyplni nulami (daju sa specifikovat aj ine hodnoty ak treba).

Takymto sposobom pekne sekvencne za sebou "nastosujes" vsetky potrebne stranky do binarky ktoru nasledne rovno flashnes. Kedze sa jedna o jeden preklad, tak sa samozrejme mozes z ktorejkolvek stranky odvolavat na cokovek v inej stranke (ak si to nedeklarujes ako lokalne pre danu oblast).

Ak by si nechcel mat cely projekt v jednom zdrojovom subore, nie je najmensi problem cely zdrojak rozdelit na casti a tie potom z-INCLUDE-ovat dokopy. Mozes mat napriklad kazdu stranku napisanu v samostatnom zdrojaku.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Z80 assembler s podporou stranek
PříspěvekNapsal: 02.12.2020, 19:57 
Offline
Kecálek

Registrován: 07.05.2014, 12:10
Příspěvky: 197
Bydliště: Jbc
Has thanked: 0 time
Been thanked: 39 times
Diky za tip. Uz jsem to tak nejak zakladne vyzkousel a vypada to pouzitelne. Prekvapilo me, ze kazdy dalsi ORG prida novy kod na konec. Zatim jsem se vsude setkal s tim, ze pokud uz tam byl nejaky kod, assembler reportoval chybu, ze dochazi k prepisu obsazene pameti. Necekal jsem, ze tu bude mozne vytvorit vicestrankovou aplikaci timto zpusobem ;-)
Kdyz jsem prochazel dokumentaci, tak tam jsou zminovane prikazy MMU, PAGE, SLOT a mozna i dalsi, ktere se taky nejak daji pouzit, ale priklad tam je jen pro konkretni pocitace, tak nevim, jestli se to da pouzit i pro jinak usporadane strankovani...

Narazil jsem tu ale na problem s daty. Ty jsou v RAM, jenze kdyz na konci dam napr.
Kód:
ORG #C000
data DS 10
tak to do vystupniho souboru prida dalsi byty. Asi tam bude jiny zpusob, jak reservovat prostor pro data? Nasel jsem zapis
Kód:
label EQU address
ale to znamena pak musim pro kazdou promennou spocitat adresu. Kdyz by tam byla cesta, jak pouze rezervovat prostor, tak by se to vyrazne zjednodusilo, resp. nemusel bych rucne pocitat adresy, pripadne prepocitavat pri pripadne zmene...


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Z80 assembler s podporou stranek
PříspěvekNapsal: 03.12.2020, 08:37 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3660
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 795 times
hynek píše:
Diky za tip. Uz jsem to tak nejak zakladne vyzkousel a vypada to pouzitelne. Prekvapilo me, ze kazdy dalsi ORG prida novy kod na konec.
No, a preco by nepridal ? Pisal som ze direktiva OUTPUT zabezpeci SEKVENCNE zapisovanie vysledku predkladu do vystupneho suboru. Cize je jedno aky mas ORG, vystup z prekladu bude vo vystupnom subore zapisany tak a v takom poradi, v akom je prekladany zo zdrojaku. ORG iba urcuje na aku adresu treba potom danu konkretnu cast kodu umiestnit, aby fungoval. Mozno som toto mal lepsie zdoraznit.

Ono je to tak. Bezna filozofia je taka, ze mas 64kB priestor, a kompiler do tohto priestoru kompiluje. Adresa kam sa kompiluje je urcena ORG-om. Takto fungovali vsetky kompilery napriklad na ZX Spektre. A predpokladam, ze aj ty mas predstavu, ze to takto funguje vzdy a vsade. Ale to nie je tak celkom pravda. SjASMPlus vie pracovat aj podla tejto filozofie (na to je urcena direktiva DEVICE), ale vie pracovat aj inak, nezavisle od nejakeho vopred daneho adresneho priestoru - takto funguje direktiva OUTPUT. Takze zabudni na nejaky pevny 64kB priestor a kompilovanie do neho :)

Predpokladam, ze ty potrebujes skompilovat nieco, co sa nevojde do 64kB, resp. musi fungovat tak ze niektore casti pamete predstavuju okna kde sa da namapovat viac pametovych baniek, a ty potrebujes mat kod v tychto prepinatelnych bankach. Napriklad ako ma ZX Spektrum 128k - poslednych 16kB je okno kde si mozes prepinat az osem pametovych baniek. SjASMPlus umoznuje vytvorit aj takyto pametovy priestor 128kB rozdeleny na banky (DEVICE ZXSPECTRUM128) a ty mozes priamo kompilovat na urcenie miesto (ORG) do urcenej banky (na to sluzi MMU, PAGE, SLOT). Okrem ZX 128 este podporuje pametovy priestor pre rozne ruske klony a tiez aj pre ZX Spectrum NEXT.

Kedze si nespecifikoval ziadne z tychto zariadeni, predpokladam, ze mas nejaky uplne iny system prepinania baniek pameti. V tom pripade nemozes pouzit niektory z podporovanych pametovych priestorov, ale mozes vyuzit druhu filozofiu, kedy sa SjASMPlus nestara o to, aky mas pametovy priestor, ale vsetko, co skompiluje, moze (ale aj nemusi!) sekvencne ukladat do vystupneho suboru, a ty mas potom plne pod kontrolou, co bude a co nebude vo vystupnom subore. Vsetko co je medzi direktivami OUTPUT a OUTEND sa sekvencie zapisuje do vystupneho suboru, vsetko co je mimo tychto direktiv, sa sice skompiluje, ale do suboru nezapisuje.
hynek píše:
Narazil jsem tu ale na problem s daty. Ty jsou v RAM, jenze kdyz na konci dam napr.
Kód:
ORG #C000
data DS 10
tak to do vystupniho souboru prida dalsi byty.
Takze tym padom uz vies, ako spravit aby sa veci, ktore maju byt v RAM, nezapisovali do vystupu dalsie data. Zapisovanie kodu kompilovaneho pred nimi ukoncis direktivou OUTEND. Tym padom sa vsetok nasledujuci kompilovany kod uz nebude zapisovat a vo vystupnom subore nepribudnu ziadne dalsie bajty:
Kód:
  OUTPUT subor.bin ; Zacni zapis do binarky
  ORG #C000
  ....kod...
  DS #10000-$
  ...kod pre dalsie banky pameti...
  OUTEND ; Ukonci zapis do binarky
  ORG #C000 ; Nasledujuci kod uz do binarky nebude zapisany (obsah RAM)
data DS 10

K dalsim otazkam:

hynek píše:
Zatim jsem se vsude setkal s tim, ze pokud uz tam byl nejaky kod, assembler reportoval chybu, ze dochazi k prepisu obsazene pameti. Necekal jsem, ze tu bude mozne vytvorit vicestrankovou aplikaci timto zpusobem ;-)
To je presne to o com som pisal vyssie - je to proste iba jedna z filozofii prace asembleru. Pri tejto filozofii moze asembler kontrolovat, ci si v tom priestore 64kB novym skompilovanym kodom neprepisujes nejaky starsi predtym skompilovany kod.
hynek píše:
Kdyz jsem prochazel dokumentaci, tak tam jsou zminovane prikazy MMU, PAGE, SLOT a mozna i dalsi, ktere se taky nejak daji pouzit, ale priklad tam je jen pro konkretni pocitace, tak nevim, jestli se to da pouzit i pro jinak usporadane strankovani...
Tieto prikazy sa tykaju vzdy konkretneho nastavenia v DEVICE, funguju v ramci mnoziny preddefinovanych modelov ZX Spektra. Pre teba by boli pouzitelne, len ak by prepinanie pamete v tvojom systeme bolo kompatibilne s niektorym z tychto modelov.
hynek píše:
Asi tam bude jiny zpusob, jak reservovat prostor pro data? Nasel jsem zapis
Kód:
label EQU address
ale to znamena pak musim pro kazdou promennou spocitat adresu. Kdyz by tam byla cesta, jak pouze rezervovat prostor, tak by se to vyrazne zjednodusilo, resp. nemusel bych rucne pocitat adresy, pripadne prepocitavat pri pripadne zmene...
Presne toto ma kedysi velmi stvalo na inom IDE - umoznoval pracovat len s klasickou filozofiou kompilacie do 64kB priestoru a vsetko co som skompiloval, vratane tych DS..., zapisal do binarky bez ohladu na to ci som to chcel alebo nie. Tam som musel premenne rezervovat prave pomocou EQU a bolo to hrozne pracne a otravne. Preto SjASMPlus podporuje viacero filozofii a kazdy si moze vybrat ktora mu najlepsie vyhovuje :)


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Z80 assembler s podporou stranek
PříspěvekNapsal: 03.12.2020, 10:26 
Offline
Kecálek

Registrován: 07.05.2014, 12:10
Příspěvky: 197
Bydliště: Jbc
Has thanked: 0 time
Been thanked: 39 times
Moc dekuji za obsahle vysvetleni. Myslim, ze uz mi je ted celkem jasne, jak tento assembler pouzit.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Z80 assembler s podporou stranek
PříspěvekNapsal: 05.12.2020, 18:37 
Offline
Kecálek

Registrován: 07.05.2014, 12:10
Příspěvky: 197
Bydliště: Jbc
Has thanked: 0 time
Been thanked: 39 times
Zatim se stale snazim prelozit zdrojaky, ale nejak se nedari...

Je tam nejake divne chovani, ktere ten preklad 'rozbije'...
Jsou tam treba takovehle definice:
Kód:
   DEFINE   alt_int         2,(IY+$23)
...
   BIT   alt_int

Jenze tyto definice pak 'rozbijou' preklad jine casti kodu, kde je nasledujici:
Kód:
_alt_int_chksum      EQU   $D2FD
   LD   A,(_alt_int_chksum)

Kdyz jsem se snazil zjistit, proc to nejde prelozit, nasel jsem v listingu tento radek:
Kód:
ti86_160.asm(98): error: Label not found: _
ti86_160.asm(98): error: ')' expected
   98 0040                 LD   A,(_      2,(IY+$23)   _chksum)

Ma tento problem v SjAsmPlus nejake reseni? Cekal bych, ze DEFINE se pouzije pouze na cela slova (tak, jak to je v jinych prekladacich...)

Diky za pripadnou radu.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Z80 assembler s podporou stranek
PříspěvekNapsal: 05.12.2020, 18:53 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 05.09.2013, 14:08
Příspěvky: 1070
Bydliště: Smolenice
Has thanked: 131 times
Been thanked: 473 times
Z takto povysekávaného zdrojáku sa ťažko niečo odhaľuje, ale tuto je podľa mňa na vine zhodný reťazec "alt_int" v DEFINE aj v návestí "_alt_int_chksum". Pozmeň "alt_int" v návestí "_alt_int_chksum", alebo ten identifier "alt_int" v DEFINE, pretože parser to zrejme chápe tak, že to má v návestí nahradiť tým, čo je v DEFINE.

_________________
To err is human, but to really foul things up requires a computer.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Z80 assembler s podporou stranek
PříspěvekNapsal: 05.12.2020, 21:09 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3660
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 795 times
Presne ako pise z00m, DEFINE nahradilo text alt_int aj v nasledujucej definicii _alt_int_chksum.

Obecne DEFINE nahradza iba cele slova, avsak podciarnik sa tu chape ako spojenie slov, t.j. aj v ramci podretazcov urcenych pomocou podciarnika sa vykona nahrada (pricom podretazec moze obsahovat podciarnik). Takze treba pouzit ine podretazce. Naopriklad toto sa uz prelozi spravne:
Kód:
        DEFINE  alt_int_c  2,(IY+$23)
        BIT     alt_int_c
_alt_int_chksum      EQU   #D2FD
        LD      A,(_alt_int_chksum)
Nahradzanie podretazcov moze byt uzitocne vtedy, ked chceme definovat iba cast retazca a ostatne casti uz pisat priamo.
Priklad: Ked mam v zdrojaku zavadzaci basic a zaroven aj zavadzany kod, dava mi to moznost si na jednom mieste definovat prefix mien suborov, do ktorych sa basic a kod ulozi:
Kód:
        DEVICE  ZXSPECTRUM48
        DEFINE  PREFIX  Subor
        SAVEBIN PREFIX_basic.bin , 23755 , 100
        SAVEBIN PREFIX_code.bin  , 40000 , 20000


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Z80 assembler s podporou stranek
PříspěvekNapsal: 05.12.2020, 22:30 
Offline
Kecálek

Registrován: 07.05.2014, 12:10
Příspěvky: 197
Bydliště: Jbc
Has thanked: 0 time
Been thanked: 39 times
z00m píše:
Z takto povysekávaného zdrojáku sa ťažko niečo odhaľuje, ale tuto je podľa mňa na vine zhodný reťazec "alt_int" v DEFINE aj v návestí "_alt_int_chksum". Pozmeň "alt_int" v návestí "_alt_int_chksum", alebo ten identifier "alt_int" v DEFINE, pretože parser to zrejme chápe tak, že to má v návestí nahradiť tým, čo je v DEFINE.

Myslim, ze jsem poslal presne ty casti, ktere zpusobuji problemy. Zdrojak ma v tuto chvili asi 100000 radku, v nem neco hledat je opravdu obtizne :-)
Ono se rekne predelat jednotlive definice, ale takovych tam je docela dost a rucne se mi to delat nechce. Navic toto je prvni prekladac, se kterym jsem se setkal a ktery nahrazuje jen casti slov... Opravdu znacne neobvykle... ;-)
Ale zkusim podtrzitko nahradit nebo odmazat, kdyz ma u SjAsmPlus takovy nebezpecny vyznam... Ale i tak to bude ponekud nebezpecna prace, abych v tom mnozstvi textu nahradil jen to, co je nutne... A nebo bych mozna mohl zkusit upravit prekladac a zrusit tuto vlastnost. Bylo by mozne na to pak pridat nejaky parametr na prikazovou radku?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Z80 assembler s podporou stranek
PříspěvekNapsal: 05.12.2020, 22:34 
Offline
Kecálek

Registrován: 07.05.2014, 12:10
Příspěvky: 197
Bydliště: Jbc
Has thanked: 0 time
Been thanked: 39 times
Busy píše:
Nahradzanie podretazcov moze byt uzitocne vtedy, ked chceme definovat iba cast retazca a ostatne casti uz pisat priamo.
Priklad: Ked mam v zdrojaku zavadzaci basic a zaroven aj zavadzany kod, dava mi to moznost si na jednom mieste definovat prefix mien suborov, do ktorych sa basic a kod ulozi:
Kód:
        DEVICE  ZXSPECTRUM48
        DEFINE  PREFIX  Subor
        SAVEBIN PREFIX_basic.bin , 23755 , 100
        SAVEBIN PREFIX_code.bin  , 40000 , 20000


Tohle se v jinych prekladacich resi pridanim nejakeho 'spojniku', ktery preprocesor nakonec vyhodi, treba PREFIX##code.bin ('concatenation' u gcc apod.)
Nemohlo by to byt resenim i pro SjAsmPlus? Nebo aspon zvolit tento zpusob nejakym parametrem z prikazove radky nebo prikazem ve zdrojaku?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Z80 assembler s podporou stranek
PříspěvekNapsal: 09.12.2020, 17:56 
Offline
Kecálek

Registrován: 07.05.2014, 12:10
Příspěvky: 197
Bydliště: Jbc
Has thanked: 0 time
Been thanked: 39 times
Podarilo se mi postupne upravit cely zdrojak do podoby, aby sel prelozit pomoci SjAsmPlus.

Ale nedari se mi prijit na to, jak zaridit, aby se spravne nastavovala banka pameti.
Pro skok do jine banky je tam funkce, ktera jako parametr bere lokalni adresu v segmentu a cislo banky.
Kdyz mam ve zdrojaku postupne
Kód:
ORG 0x4000
...
ORG 0x4000
...
tak vsechny labely jsou stale jenom 'lokalni' v rozsahu stranky, ale uz nevim, jak zajistit, aby se z kazdeho labelu dalo zjistit i cislo stranky... Je tam nejaka moznost?

Kdyz tam nic takoveho neni, budu zrejme muset ke kazdemu navesti, ktere bude jen 14-bitove z dane stranky, vytvorit take neco jako konstantu, ktera v sobe ponese informaci o cisle stranky, neco jako:
Kód:
ORG 0x4000
page_num equ 1
func1_page equ page_num
...
ORG 0x4000
page_num equ 2
CALL LongCall
DW func1
DB func1_page


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Z80 assembler s podporou stranek
PříspěvekNapsal: 10.12.2020, 21:33 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3660
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 795 times
hynek píše:
Navic toto je prvni prekladac, se kterym jsem se setkal a ktery nahrazuje jen casti slov... Opravdu znacne neobvykle... ;-)
Ano, je to neobvykle. Tato neobvykla funkcionalita je tam este od povodnych autorov. Zvazovali sme jej odstranenie, ale existuje uz vela projektov ktore to pouzivaju a tie by sa potom rozbili. Takze tam (zatial) zostava. Ale v buducnosti (verzia 2.x.x az nejaka bude) to chceme spravit co najpodobnejsie klasickemu gcc-cku, takze DEFINE by malo fungovat rovnako ako v C preprocesore.
hynek píše:
Tohle se v jinych prekladacich resi pridanim nejakeho 'spojniku', ktery preprocesor nakonec vyhodi, treba PREFIX##code.bin ('concatenation' u gcc apod.)
Nemohlo by to byt resenim i pro SjAsmPlus? Nebo aspon zvolit tento zpusob nejakym parametrem z prikazove radky nebo prikazem ve zdrojaku?
Doplnit takyto spojovnik pre symboly nie je az tak jednoduche, takze zatial to nemame v plane. Avsak pokial chces robit nejake zlozitejsie manipulacie v zdrojaku, tak toto je mozne urobit cez zabudovany programovaci jazyk LUA, ktory bol do sjasmplus prave pre taketo pripady vlozeny.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Z80 assembler s podporou stranek
PříspěvekNapsal: 10.12.2020, 21:52 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3660
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 795 times
hynek píše:
nedari se mi prijit na to, jak zaridit, aby se spravne nastavovala banka pameti.
Pro skok do jine banky je tam funkce, ktera jako parametr bere lokalni adresu v segmentu a cislo banky.
Pokial vyuzivas niektory z preddefinovanych pametovych modelov direktivou DEVICE, v ktorych sa banky pameti urcuju prikazom PAGE, tak na zistenie, do ktorej banky patri dany label, existuje operator $$
Kód:
  DEVICE ZXSPECTRUM128
  PAGE 3 ; Pametova banka cislo 3
  org #C000
label: ...
  ...
cislo_page = $$label ; Definuje na hodnotu 3
Avsak ak DEVICE nepouzivas a v zdrojaku mas len nieco taketo:
Kód:
ORG 0x4000
...
ORG 0x4000
...
tak sjasmplus v principe nic netusi o tom ze si si zdrojak rozdelil na banky a teda nemoze vediet ktory label patri do ktorej banky. Kazdy label ma priradenu iba svoju 16-bitovu hodnotu aku mu urcil preklad a viac informacii sa v nom v tomto pripade nenachadza.

Urcita moznost, ako mat v kazdom labeli okrem jeho 16-bitovej hodnotu aj informaciu o pametovej banke (PAGE) dostupnu operatorom $$, je pouzitie direktivny MMU a definovanie si vlastneho pametoveho modelu pomocou direktivy SLOT, kde si clovek urci ake banky, nastavitelne pomocou direktivy PAGE, sa kde nachadzaju. Toto som ale este nikdy prakticky nepouzil (na ZX48/128, PMD a PP som to nikdy nepotreboval), takze ohladom tohto neviem narychlo napisat nejaky jasny prezentacny priklad. Mozno ini budu v tomto pripade mudrejsi. V kazdom pripade, treba si precitat dokumentaciu...


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Z80 assembler s podporou stranek
PříspěvekNapsal: 11.12.2020, 15:50 
Offline
Kecálek

Registrován: 07.05.2014, 12:10
Příspěvky: 197
Bydliště: Jbc
Has thanked: 0 time
Been thanked: 39 times
Busy píše:
Urcita moznost, ako mat v kazdom labeli okrem jeho 16-bitovej hodnotu aj informaciu o pametovej banke (PAGE) dostupnu operatorom $$, je pouzitie direktivny MMU a definovanie si vlastneho pametoveho modelu pomocou direktivy SLOT, kde si clovek urci ake banky, nastavitelne pomocou direktivy PAGE, sa kde nachadzaju. Toto som ale este nikdy prakticky nepouzil (na ZX48/128, PMD a PP som to nikdy nepotreboval), takze ohladom tohto neviem narychlo napisat nejaky jasny prezentacny priklad. Mozno ini budu v tomto pripade mudrejsi. V kazdom pripade, treba si precitat dokumentaciu...

Diky za navedeni na tuto moznost. Uz driv jsem se na tyto veci dival, ale nepochopil jsem z toho, jak to pouzivat. Ted jsem se k tomu tedy vratil a zkousel ruzne kombinace, ktere by mohly byt vhodne - uz to funguje. Diky za pomoc!
Aktualne pouzite reseni je tedy toto:
Kód:
DEVICE ZXSPECTRUM256
ORG 0x0000
...
MMU 1,1
ORG 0x4000
...
label1:
MMU 1,2
ORG 0x4000
...
CALL LongCall
DW label1
DB $$label1

Tak nejak jsem cekal, ze v SYM souboru uvidim take cisla stranek... Jsou tam jen 16-bitove adresy, takze v mem pripade 0x0000-0x7FFF. Stranku musim zjistit z LST souboru tam, kde se pouzije $$label.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Z80 assembler s podporou stranek
PříspěvekNapsal: 11.12.2020, 16:57 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3660
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 795 times
hynek píše:
Tak nejak jsem cekal, ze v SYM souboru uvidim take cisla stranek... Jsou tam jen 16-bitove adresy, takze v mem pripade 0x0000-0x7FFF. Stranku musim zjistit z LST souboru tam, kde se pouzije $$label.
Ono ten SYM subor je vlastne urceny pre includovanie od inych zdrojakov, takze tam su akurat EQU so 16bit hodnotami labelov.

Ale k cislam stranok sa da nepriamo dopracovat viacerymi sposobmi:

1. cmdline prepinac --SLD .... exportuje debug info o kompilovanom kode, obsahuje aj labely s hodnotami a cislami stranok:
<nazov_zdrojaku>|?||?|<cislo_stranky>|16bit_hodnota|F|<label>

2. Direktiva CSPECTMAP ... tu ale nie je priamo viditelne cislo stranky, treba ho vypocitat z celkoveho 24-bitoveho offsetu v ramci daneho pametoveho modelu (aj ten offset by mohol byt niekedy uzitocny)

3. Direktiva LABELSLIST ... generuje prehladny plaintext s riadkami v tvare
<cislo_stranky>:<offset> <label>
akurat s tym ze <offset> nie je priamo 16bit hodnota labelu, ale iba jeho offset od zaciatku danej stranky. Takze pre 16bit hodnotu je treba pripocitat adresu zaciatku stranky.


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