OldComp.cz

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


Právě je 28.03.2024, 17:38

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 44 ]  Přejít na stránku Předchozí  1, 2, 3  Další
Autor Zpráva
 Předmět příspěvku: Re: Jak vytvořit nový příkaz ?
PříspěvekNapsal: 31.12.2021, 14:04 
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:
Aby sa akceptoval aj príkaz *7, musí byť v oboch príkladoch táto podmienka cp '7'+1.
Ano, mas pravdu, ma tam byt to cp '7'+1 alebo cp '8'.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Jak vytvořit nový příkaz ?
PříspěvekNapsal: 31.12.2021, 14:42 
Offline
Kecálek

Registrován: 09.01.2021, 18:37
Příspěvky: 108
Has thanked: 16 times
Been thanked: 22 times
Díky všem zúčastněným. Teď už je to dle představ.
Pro doplnění, pokud vyměníte vnitřní romku, tak snad takto:
Kód:
; na adresu #1B46   JP   C,prikazy

prikazy
        ld      hl,(#5C5D)      ;; CHADD = program counter pre basic
        dec     hl
        ld      a,(hl)          ;; Predchadzajuci znak nebol platny prikaz
        cp      '*'             ;; Je to nas novy prikaz (hviezdicka) ?
        jr      nz,theend       ;; Ak nie, skok na povodnu cinnost

        rst     #18             ;; Daj aktualny znak z basic programu
        cp      '0'             ;; Ak je to mensie ako znak 0
        jr      c,theend        ;; potom bude chyba
        cp      '8'             ;; Ak je to vecsie ako znak 7
        jr      nc,theend       ;; potom bude tiez chyba
        ld      e,a             ;; Znak je 0..7, odlozime si ho do registra E

        rst     #20             ;; Daj nasledujuci znak z basic programu
        cp      ':'             ;; Za prikazom musi byt dvojbodka
        jr      z,cmdok         ;; Ak ano, vsetko je v poriadku
        cp      #0D             ;; Alebo ked nie dvojbodka tak aspon koniec riadku
        jr      nz,theend       ;; Ak nie tak je to chyba
cmdok   ld      (iy+#00),#FF    ;; Zrusenie chyby 'Nonsense in BASIC'
        call    #2530           ;; Kontrola syntaxe ?
        jr      z,next          ;; Ak ano, preskoc funkcionalitu

        ld      a,e             ;; Nejaka funkcionalita noveho prikazu
        and     #07
        out     (#fe),a         ;; (nastavenie borderu len ako priklad)

next    jp      #1b76           ;; Pokracovanie na dalsi prikaz v basicu

theend  jp      REPORT_C        ;; tedy na #1C8A


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Jak vytvořit nový příkaz ?
PříspěvekNapsal: 31.12.2021, 15:02 
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
Pri vlozeni priamo do romky tam bude zopar zjednoduseni, kedze to nepojde cez error handler. Hviezdicka bude priamo v registri C takze netreba vobec pouzivat CHADD, na konci prikazu netreba testovat dvojbodku alebo enter, netreba ani nulovat chybu pomocou ld (iy+#00),#FF pretoze de-fakto este k ziadnej chybe nedoslo a namiesto jp #1b76 staci RET. Skusim to dnes/zajtra napisat a odladit, nech mame istotu.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Jak vytvořit nový příkaz ?
PříspěvekNapsal: 31.12.2021, 21:01 
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
Nove prikazy *0 *1 ... *7 priamo zabudovane do romky:
Kód:
        FPOS    #1B46           ;; Odskok na rom patch
        jp      c,newcmd

        FPOS    #3C01           ;; Umiestnenie patchu v romke
        org     #3C01

newcmd  ld      a,c             ;; Predchadzajuci znak nebol platny prikaz
        cp      '*'             ;; Je to nas novy prikaz (hviezdicka) ?
        jr      nz,error        ;; Ak nie, potom bude chyba

        rst     #18             ;; Daj aktualny znak z basic programu
        cp      '0'             ;; Ak je to mensie ako znak 0
        jr      c,error         ;; potom bude chyba
        cp      '8'             ;; Ak je to vecsie ako znak 7
        jr      nc,error        ;; potom bude tiez chyba
        ld      e,a             ;; Znak je 0..7, odlozime si ho do registra E

        rst     #20             ;; Chod na nasledujuci znak v basic programe
        call    #1BEE           ;; Pri kontrole syntaxe chod na dalsi prikaz

        ld      a,e             ;; Nejaka funkcionalita noveho prikazu
        and     #07
        out     (#fe),a         ;; (nastavenie borderu len ako priklad)
        ret

error   rst     #08             ;; Chyba 'Nonsense in BASIC'
        db      #0B
FPOS (direktiva sjasmplus) znamena kam do romky treba zapisat dany kod. Samotny patch moze byt samozrejme kdekolvek v romke, kde je nejake miesto.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Jak vytvořit nový příkaz ?
PříspěvekNapsal: 31.12.2021, 21:26 
Offline
Pan Generální

Registrován: 01.12.2017, 21:01
Příspěvky: 2062
Bydliště: BA-Petržalka :(
Has thanked: 18 times
Been thanked: 323 times
Mám možno blbý dotaz, ale to číslo keď napíšeme *1 bude uložené iba ako jeden byt, alebo bude nasledovať ďalších 1+5 bytov ako tomu pri číslach býva?

_________________
Oznamy o novom príspevku mi na mail chodia iba sporadicky, takže keď sa nehlásim v diskusii, tak je to tým. V 80% nepríde mail vôbec.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Jak vytvořit nový příkaz ?
PříspěvekNapsal: 31.12.2021, 21:59 
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
PotPalo píše:
Mám možno blbý dotaz, ale to číslo keď napíšeme *1 bude uložené iba ako jeden byt, alebo bude nasledovať ďalších 1+5 bytov ako tomu pri číslach býva?
Nie, ziadnych skrytych 1+5 bajtov tam nebude. To cislo 1 nie je ciselna konstanta, ale sucast nazvu prikazu. Proste cely prikaz sa vola *1 a je bez parametrov. V pameti tym padom nie je ziadnych 5 bajtov hodnoty ale iba jednoduchy dvojznakovy retazec "*1". Podobna situacia je napriklad pri PRINT "*1" kde sa za znakom 1 tiez neuklada 1+5 bajtov.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Jak vytvořit nový příkaz ?
PříspěvekNapsal: 31.12.2021, 22:07 
Offline
Kecálek

Registrován: 09.01.2021, 18:37
Příspěvky: 108
Has thanked: 16 times
Been thanked: 22 times
Super. To už je krásně použitelný.

Měl bych další dotaz.

Když dám SAVE"basprog" tak se skáče na 04C2 v A, DE, IX jsou parametry. Ale jak se vlastně do těch registrů parametry dostanou?
Chápu, komentrovaný výpis ROM jako bibli, ale asi v něm neumím moc dobře číst.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Jak vytvořit nový příkaz ?
PříspěvekNapsal: 31.12.2021, 22:39 
Offline
Pan Štábní

Registrován: 12.05.2013, 22:24
Příspěvky: 1508
Bydliště: u Prahy
Has thanked: 44 times
Been thanked: 380 times
Plnění parametry při SAVE je od adresy #0605.
https://softhouse.speccy.cz/documents/ZX_ROM.htm


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Jak vytvořit nový příkaz ?
PříspěvekNapsal: 31.12.2021, 23:23 
Offline
Kecálek

Registrován: 09.01.2021, 18:37
Příspěvky: 108
Has thanked: 16 times
Been thanked: 22 times
jojo, dyť píšu, že jí chápu jako bibli. Asi si jí budu muset vytisknout, protože to listování v pdf, že se pořád ztrácím...
Nevíš proč mi pokaždé při otevření vyskočí tato chyba? Respektive, kde sebrat ty fonty?


Přílohy:
Clipboard01.jpg
Clipboard01.jpg [ 12.09 KiB | Zobrazeno 3558 krát ]
Nahoru
 Profil  
 
 Předmět příspěvku: Re: Jak vytvořit nový příkaz ?
PříspěvekNapsal: 31.12.2021, 23:47 
Offline
Pan Štábní

Registrován: 12.05.2013, 22:24
Příspěvky: 1508
Bydliště: u Prahy
Has thanked: 44 times
Been thanked: 380 times
Font by měl být součástí toho PDF.
Můj zastaralý Preview 3.0.9 (409) z roku 2007 problém nemá.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Jak vytvořit nový příkaz ?
PříspěvekNapsal: 31.12.2021, 23:52 
Offline
Pan Generální

Registrován: 01.12.2017, 21:01
Příspěvky: 2062
Bydliště: BA-Petržalka :(
Has thanked: 18 times
Been thanked: 323 times
TXT by nestačilo? To sa dá pozerať aj v DOSe hocičím.


Přílohy:
Poznámka: ***OPERACNI SYSTEM ZX SPECTRUM***
ROMFULL.rar [118.92 KiB]
167 krát

_________________
Oznamy o novom príspevku mi na mail chodia iba sporadicky, takže keď sa nehlásim v diskusii, tak je to tým. V 80% nepríde mail vôbec.
Nahoru
 Profil  
 
 Předmět příspěvku: Re: Jak vytvořit nový příkaz ?
PříspěvekNapsal: 01.01.2022, 00:03 
Offline
Kecálek

Registrován: 09.01.2021, 18:37
Příspěvky: 108
Has thanked: 16 times
Been thanked: 22 times
mě to pdf otevřít jde, ale vždy s chybovou hláškou... za txt verzi díky, tu jsem neměl, hlavně ty adresy se hodí, těch je v původní knížce podle mě málo.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Jak vytvořit nový příkaz ?
PříspěvekNapsal: 01.01.2022, 01:30 
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
Podla mna adresy a bajty pri KAZDEJ instrukcii su velmi dolezite, hlavne pokial clovek robi nejake modifikacie romky alebo nieco optimalizuje a vyuziva vsetko mozne. Ten vypis romky "romfull" aktivne pouzivam uz od roku cca 1988 a nedam nan dopustit. A vsetkymi vypismi, ktore nemaju vsade adresy aj bajty, pohrdam :)


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Jak vytvořit nový příkaz ?
PříspěvekNapsal: 01.01.2022, 02:09 
Offline
Pan Generální

Registrován: 01.12.2017, 21:01
Příspěvky: 2062
Bydliště: BA-Petržalka :(
Has thanked: 18 times
Been thanked: 323 times
Ako tak pozerám ten výpis v PDF, zrazu na mňa vyskočilo že by to chcelo doinštalovať Eastern Asian Language Support, konkrétne na strane 221. Používam Foxit PDF reader. Takže to PDF je nejaké divné. Neviem čo by v ňom robili ázijské znaky.

_________________
Oznamy o novom príspevku mi na mail chodia iba sporadicky, takže keď sa nehlásim v diskusii, tak je to tým. V 80% nepríde mail vôbec.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Jak vytvořit nový příkaz ?
PříspěvekNapsal: 01.01.2022, 09:49 
Offline
Kecálek

Registrován: 09.01.2021, 18:37
Příspěvky: 108
Has thanked: 16 times
Been thanked: 22 times
A teď taková záludná teoretická otázka.
Z basicu skočím na svůj stroják, běžím v něm a přijdu o návratovou adresu. Nesahal jsem do oblasti systémových proměných, ani do oblasti, kde je basic a proměné. Registry jsou všechny změněné. Je možné se vrátit skokem na nějakou adresu? Třeba #12A2 ?


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ů: 44 ]  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 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