OldComp.cz

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


Právě je 28.03.2024, 18:10

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 28 ]  Přejít na stránku 1, 2  Další
Autor Zpráva
 Předmět příspěvku: 4bitový počítač
PříspěvekNapsal: 25.06.2023, 13:03 
Offline
Profík

Registrován: 19.12.2013, 16:54
Příspěvky: 554
Bydliště: Bratislava
Has thanked: 1 time
Been thanked: 115 times
Zaujímavý (a funkčný) projekt:
https://www.bigmessowires.com/nibbler/

_________________
http://blog.3b2.sk/igi


Nahoru
 Profil  
 
 Předmět příspěvku: Re: 4bitový počítač
PříspěvekNapsal: 25.06.2023, 15:55 
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
Ako sa na tom da naprogramovat pole ?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: 4bitový počítač
PříspěvekNapsal: 25.06.2023, 16:09 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 21.01.2021, 11:05
Příspěvky: 1581
Bydliště: Pardubice
Has thanked: 25 times
Been thanked: 238 times
Jen si řekneš kde v RAMce leží, nic neprogramuješ :)

_________________
Praxe znamená, že vše funguje, ale nevíme proč. Teorie znamená, že vše víme, ale nic nefunguje.
Někdy je teorie spojena s praxí. Znamená to, že nic nefunguje a nikdo neví proč ...


Nahoru
 Profil  
 
 Předmět příspěvku: Re: 4bitový počítač
PříspěvekNapsal: 25.06.2023, 16:25 
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
Upresnim teda otazku. Mam v ramke ulozene pole a chcem k jednotlivym bajtom pristupovat pomocou nejakeho indexu, tiez ulozeneho v ramke (kedze okrem Acc to nema ziadne dalsie registre). Ako sa take nieco da naprogramovat na tomto pocitaci ?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: 4bitový počítač
PříspěvekNapsal: 25.06.2023, 16:27 
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
Napíšeš si na to obslužný program do ROMky, vypálíš ho a ono se to s Tebou bude bavit :D
Má to 4 bitovou RAMku s daty a 8 bitovou ROMku s programem, přímé adresování, literál, primitivní aritmetiku, podmíněný skok a nic víc.
Indexování se s tím dělá náramně dobře :D

_________________
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: 4bitový počítač
PříspěvekNapsal: 25.06.2023, 23:50 
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
Tak dalsie upresnenie otazky:

Mam v ramke POLE 16x16 nibblov a potrebujem z neho nacitat prvok [A,B] kde premenne A,B su ulozene v pameti tiez.
Ako to naprogramovat nejak inteligentne ?
Blbe riesenia typu
Kód:
Ak je A=0 a zaroven B=0 tak nacitaj prvok z adresy POLE
Ak je A=0 a zaroven B=1 tak nacitaj prvok z adresy POLE+1
...
Ak je A=1 a zaroven B=0 tak nacitaj prvok z adresy POLE+16
sa rovno zamietaju.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: 4bitový počítač
PříspěvekNapsal: 26.06.2023, 00:26 
Offline
Kecálek
Uživatelský avatar

Registrován: 18.06.2023, 18:37
Příspěvky: 93
Bydliště: Pražák z Prahe, žádná náplava :)
Has thanked: 19 times
Been thanked: 25 times
Zhruba bych to viděl asi tak, že budu mít proměnné C0, C1, C2 do kterých uložím adresu POLE,
načtu do registru proměnnou B, přičtu k ní proměnnou C0, uložím do C0, pokud byl přenos, načtu do registru 1, jinak 0
přičtu registr C1, pokud byl přenos, uložím do C1, načtu 1, přičtu C2, uložím C2, načtu C1, konec if.
Přičtu A, uložím do C1, pokud byl přenos, načtu 1, přičtu C2, uložím do C2
teď je na C0,C1,C2 adresa prvku, takže snadno můžu udělat instrukci načtení prvku pole (jejíž součástí jsou kód instrukce a C0,C1,C2)
(triviální sebemodifikující program ...)

myslím, že na něco dost podobného tam ty instrukce jsou, jestli jsem to správně pochopil

_________________
Spousta věcí chodí líp, když se zapne ...
http://micro-corner.gilhad.cz/, http://8bit.gilhad.cz/ a mnohé další


Nahoru
 Profil  
 
 Předmět příspěvku: Re: 4bitový počítač
PříspěvekNapsal: 26.06.2023, 03:32 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1100
Has thanked: 100 times
Been thanked: 157 times
Busy píše:
Tak dalsie upresnenie otazky:

Mam v ramke POLE 16x16 nibblov a potrebujem z neho nacitat prvok [A,B] kde premenne A,B su ulozene v pameti tiez.
Ako to naprogramovat nejak inteligentne ?
Blbe riesenia typu
Kód:
Ak je A=0 a zaroven B=0 tak nacitaj prvok z adresy POLE
Ak je A=0 a zaroven B=1 tak nacitaj prvok z adresy POLE+1
...
Ak je A=1 a zaroven B=0 tak nacitaj prvok z adresy POLE+16
sa rovno zamietaju.



Rovnou tam pise ze to neumi neprime adresovani.
Citace:
Nibbler také postrádá jakékoli adresní registry, což znamená, že nemůže podporovat žádnou formu nepřímého adresování, ani hardwarově řízený zásobník. Všechny odkazy na paměť musí používat absolutní adresy. To je významné omezení, ale je to v souladu s cíli projektu KISS designu. S použitím tabulek skoků a vyhrazených paměťových míst mohou programy Nibbler implementovat jednoduchý mechanismus volání/návratu bez skutečného zásobníku.


A ze to jde napsat nehezky natvrdo pres napsany kod sis odpovedel sam.
Ze z toho udelas pole nebude o moc slozitejsi, protoze to jde linearizovat.
Proste se kopiruje cely radek do bufferu a pak z toho bufferu vyberes ten sloupec.

Otazka spis je zda kdyz to ma 256 hodnot a musis delat natvrdo kazdou hodnotu pro tu kopii radku ti vystaci cca 16 bajtu ROMky na kazdy nibble.
Pro mensi pole napriklad 4x8 to uz asi pujde.

Ale asi by se pak zjistilo ze misto 4*8 je lepsi/rychlejsi jeden rozmer o 32 polozkach. Protoze ty adresy mohou byt napsane jen "natvrdo" tak stejne tam bude minimalne 32x LD!!! To neosidis.

PS: Kdyby to nebyla Harvardska architektura tak by to bylo zajimavejsi... .) a pro maximalne 16 instrukci mohl zvolit lepsi jazyk, ale to by tam musel mit zasobnik, nebo jeste lepe dva... Ale pak by to uz bylo neco jineho...

PPS: On ten kod bude komplikovany i pro pole o osmi hodnotach
Kód:
LD index
CMPI 0
JZ ld_0
CMPI 1
JZ ld_1
CMPI 2
JZ ld_2
CMPI 3
JZ ld_3
CMPI 4
JZ ld_4
CMPI 5
JZ ld_5
CMPI 6
JZ ld_6
CMPI 7
JZ ld_7
LD _8_
JMP save_A
ld_7:
LD _7_
JMP save_A
ld_6:
LD _6_
JMP save_A
ld_5:
LD _5_
JMP save_A
ld_4:
LD _4_
JMP save_A
ld_3:
LD _3_
JMP save_A
ld_2:
LD _2_
JMP save_A
ld_1:
LD _1_
JMP save_A
ld_0:
LD _0_
JMP save_A






save_A:
st _A_
ret_table_fce:
ld _ret_
CMPI 0
JZ ret_0
CMPI 1
JZ ret_1
CMPI 2
JZ ret_2
CMPI 3
JZ ret_3
CMPI 4
JZ ret_4
CMPI 5
JZ ret_5
CMPI 6
JZ ret_6
CMPI 7
...atd pro kazde pouzite volani te fce!


Samotna implementace navratovych hodnot je mi celkem zahadou... protoze je v podstate stejne slozita jako ten kod fce.

Mozna by ten kod sel napsat rychleji (s o neco delsim kodem) pres nejaky binarni strom, protoze muzeme vyuzit i carry flag, tak to jde delit na poloviny.

PPPS: Trochu zahadna veta:
Citace:
Adresované instrukce jako JMP obsahují 12bitovou adresu v datovém prostoru (RAM) nebo programovém prostoru (ROM) a mají celkovou velikost 16 bitů.
Proc dal na prvni misto tu RAM kdyz se jedna o JMP?

AAAaa....! Uz jsem to pochopil. To JMP nema v parametru kam ma skakat ale adresu v RAMce odkud ma nacist adresu do ROMky. Nebo ne? Protoze tohle reseni je mnohem lepsi pro ty navraty z fci. Pred volanim se ulozi do RAMky navratova adresa a ta se pak precte v JMP.

S tim by pak slo napsat to cteni pole rychleji

A = index
...
nejaka uprava na na adresu
napr A = A+A + xxx pravdepodobne pres vice pomocnych promennych
st tmp
jmp tmp

xxx:
ld _0_
jmp ret

ld _1_
jmp ret

...


RAM:
pole:
...
tmp:

Hmm.... Tak ne, podle ukazek co tam ma je JMP primo s adresou a ne JMP (adresa).

Citace:
JMP – nepodmíněný skok
JC – skok, pokud nenos
JNC – skok, pokud nenos
JZ – skok, pokud nula
JNZ – skok, pokud není nula

Toto je dobrá sada instrukcí skoků pro pohodlné programování. I když jsou pohodlné, záporné skoky JNC a JNZ nejsou nezbytně nutné, protože je vždy můžete přepsat kladným skokem a bezpodmínečným skokem:

JNC noCarry
nést:
dělat věci
noCarry:
dělat jiné věci
se stává

JC nést
JMP noCarry
nést:
dělat věci
noCarry:
dělat jiné věci

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH


Nahoru
 Profil  
 
 Předmět příspěvku: Re: 4bitový počítač
PříspěvekNapsal: 26.06.2023, 07:53 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 21.01.2021, 11:05
Příspěvky: 1581
Bydliště: Pardubice
Has thanked: 25 times
Been thanked: 238 times
Přeprogramuješ microkód a uděláš si vlastní instrukce, kde si třeba řekneš že nejvyšší buňky RAM jsou registry I,X,Y.

_________________
Praxe znamená, že vše funguje, ale nevíme proč. Teorie znamená, že vše víme, ale nic nefunguje.
Někdy je teorie spojena s praxí. Znamená to, že nic nefunguje a nikdo neví proč ...


Nahoru
 Profil  
 
 Předmět příspěvku: Re: 4bitový počítač
PříspěvekNapsal: 26.06.2023, 16:25 
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
To by jsi tam musel přidat registr na tu indexovou adresu a přidělat tam cestu na tvorbu adresy.

_________________
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: 4bitový počítač
PříspěvekNapsal: 26.06.2023, 22:06 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 21.01.2021, 11:05
Příspěvky: 1581
Bydliště: Pardubice
Has thanked: 25 times
Been thanked: 238 times
No jo. Zpátky vede jen C,Z. Takze opravdu dost problematické.

_________________
Praxe znamená, že vše funguje, ale nevíme proč. Teorie znamená, že vše víme, ale nic nefunguje.
Někdy je teorie spojena s praxí. Znamená to, že nic nefunguje a nikdo neví proč ...


Nahoru
 Profil  
 
 Předmět příspěvku: Re: 4bitový počítač
PříspěvekNapsal: 27.06.2023, 17:22 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1100
Has thanked: 100 times
Been thanked: 157 times
Mate taky trosku pocit, ze se snazil usetrit misto na delce instrukce a diky tomu mnohem vice prodlouzil delku psanych programu?

To jak tam naznacuje ze neni potreba mit u tech skoku NOT varianty:
Kód:
JNC noCarry
carry:
   do stuff
noCarry:
   do other stuff
becomes

JC carry
JMP noCarry
carry:
   do stuff
noCarry:
   do other stuff


A ono to neboli tolik jak se muze zdat, protoze kolikrat je staci u kodu prohodit jen vetve a neprodlouzi se nic ani o bit.

Tim by usetril ty 2 operacni kody na neco jako je ten JMP (ukazatel) a LD (ukazatel) a jeste je potreba ST (ukazatel). Nic z toho by nemusel resit nemit Hardwarskou architekturu.

Chapu ze by musel zmenit i hardware, ale s timhle by byl software dost kratsi a snazsi...

Mozna by misto ukazatele postacilo (a bylo po hw strance i snazsi) mit nejaky Index registr... Ale tam je zase problem jak ho nastavit atd (minimalne by potreboval ex A,I), takze to zabira dalsi instrukce (pouzit IN OUT instrukce? vlastne jsem nepochopil jak to ma resene, kde nastavuje port kdyz data ma v akumulatoru? Cteni by slo s jedinym registrem, ale zapis?) a misto toho pouzit primo akumulator taky nedava smysl, protoze pak u LD a ST neni znamo co ukladat... Jeste by slo snad nastavit ze je to napr pevna adresa.

Proste mi prijde, ze je to sice minimalisticke, ale neni to dobre vyvazene.

PS: Vali se nekde po netu nejake koncepty aspon po programovaci strance pro minimalistickou instrukcni sadu?

PPS: Pri dvou registrech by se mu uvolnilo dalsi misto v instrukcich. Protoze:
LD & LIT
CPMI & CPMM
ADDI & ADDM
NORI & NORM

jdou s trochou bolesti nahradit za 4 bitove instrukce:

0) JC i
1) JZ i
2) JMP i
3) LD (i)
4) ST (i)
5) EX ...prohodi A B
6) CPM ...priznaky A-B
7) ADD ...A+=B
8) IN ...A=port[B]
9) OUT ...port[B]=A
10) NOR A=A nor B

8 bitove instrukce:
11) LIT ...A=const.

12 bitove instrukce (tahle by sla nahradit asi za vyhodnejsi 4 bitovou variantu pokud si budeme hrat vicekrat v malem poli):
12) SETIA ...i = 16*8bit const. + A

..mam (mozna) lepsi napad! dve 4 bitove varianty
i = (i << 4) + A
i = (i & 0xFF0) + A (dodatecne kvuli efektivite)
hmm.. mozna to neni nejlepsi napad (s tou "efektivni" variantou), protoze u LD/ST(i) je to v pohode, ale u skoku se to nehodi, protoze sice muzeme udelat rychle CASE vetveni, ale uz tam neni misto v kazde vetvi na nastaveni znovu "i" a odskok. Kdyz uz se to "i" pouziva pro adresy do RAM i ROM tak by to slo pro kazdou variantu chapat jinak. Index se sklada ze 3 spojenych 4 bitovych casti. Hi, Medium a Low. A pro skok v ramci ROM se skok cte jako Hi+Low+Medium a pro RAM se index sklada z Hi+Medium+Low. Takze zmena casti "Low" umozni snadno 4 bitova pole s indexem 0..15 v RAM a zaroven to umozni vetvit program po 16 nibble/bajtech? v ROM

16 bitove instrukce:
13) SETI ...i = 12bit const.

14) kde me nejvic tlaci pata???
15) kde me nejvic tlaci pata???

Proste je videt, ze si s tim jde vic pohrat a rozlozit ty zakladni instrukce lepe. Mohlo by byt i zajimave zrusit uplne JZ a JC a misto toho umoznit efektivne nacitat priznaky do akumulatoru. Takze to vetveni se provede vypoctem pri vytvoreni nove hodnoty "i" a pak jen JMP i. A nebo jeste lepe pokud se ty vetve lisi jen nactenim jine hodnoty, tak by sla rovnou vytvorit vypoctem...

Asi by to chtelo mit set nekolika zakladnich programovacich uloh a ty pro kazdou variantu naprogramovat a ohodnotit.

Neco jako secteni dvou 4,8,12,16,20,24,28,32 bitovych hodnot v pameti
Odecteni dvou ...
4,8,...32 bitova smycka
4 nebo 8 bitove jednorozmerne pole
atd.

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH


Nahoru
 Profil  
 
 Předmět příspěvku: Re: 4bitový počítač
PříspěvekNapsal: 28.06.2023, 00:02 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1100
Has thanked: 100 times
Been thanked: 157 times
LD (i) se da spojit s prictenim, takze nahradit za ADD (i)
ST (i) se da spojit s vynulovanim A

JZ JC by sli nahradit za neco jako

SNZ skip next instruction if flag is not zero
SNC skip next instruction if flag is not carry

Jump zero:
SNZ
JMP addr
lepsi zapis by byl asi SNZ JMP addr, nebo rovnou JMPC addr

Jump carry:
SNC
JMP addr

Ale slo by tim skipnout jakoukoliv nasledujici (mozna jedine ze by slo spojit SNZ a SNC) instrukci... navic kdyz to nemeni priznaky tak opakovane pouzit...

PS: IN a OUT se da taky spojit do jedine "prefixove instrukce" pro INOUT a nasleduji 4 bity kdy jeden rozlisuje zda je to cteni nebo zapis a dalsich 3 bity muzou delat 8 portu.

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH


Nahoru
 Profil  
 
 Předmět příspěvku: Re: 4bitový počítač
PříspěvekNapsal: 28.06.2023, 05:05 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1100
Has thanked: 100 times
Been thanked: 157 times
Kód:
0) SETI const.  ...I=const
1) LDI (addr)  ...I=(addr)
2) STI (addr)  ...(addr)=i
3) JMP i

4) SETA      ...A=const.
5) ADC (i)
6) ST (i)
7) CP (i)
8) NOR (i)   ...A=A nor (i)

9) IN port   ...A=port[B]
10) OUT port  ...port[B]=A

11) ONLYC
12) ONLYZ

13) rotace vpravo???
14) inc i???
15) prefix pro dalsich 15 dalsich???


Tohle vypada celkem schopne. Z toho by slo skladat slozitejsi instrukce.

Kód:
call fce
next:

fce:
ret



Kód:
16b SETI next
16b STI (addr)
16b SETI fce
4b JMP i
next:


fce:
16b LDI (addr)
4b JMP i

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH


Nahoru
 Profil  
 
 Předmět příspěvku: Re: 4bitový počítač
PříspěvekNapsal: 28.06.2023, 23:57 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1100
Has thanked: 100 times
Been thanked: 157 times
Zkusil jsem se zabyvat navrhem instrukcni sady jeste hloubeji a vychazi me stale, ze cim je mensi ta delka instrukce tim vetsi bude program!
Ovlivnuje to taky to, ze to CPU skoro nic neumi a bezne veci jako OR AND XOR co ma Z80 na jeden bajt tu ve vysledku budou delsi, protoze se musi emulovat pres NOR.
Jeden ze zpusobu jak obejit ten minimalismus CPU je pridani k 4 bitum instrukce napevno nejaky prefix pro tu ignoraci pokud neni nastavyney ZERO nebo CARRY flag, dokonce jde udelat i bit pro index++ nebo i--.

Pri psani vzorovych programu jsem dosel k nazoru ze mit ADC jako LD dost boli...

pokazde misto

ld A,(i)

delat

NOR (i)
LD A,0x00 ; lit
ADC (i)

je na me moc neefektivni.

To same vyzkouseni ze vsechny (i) operace budou (i++) a misto dvojice "INC/DEC" i bude jen "DEC i". Neefektivni.

Kód:
bitu kod
 8   0) LD  a, 4bit
 4   1) LD (i), a
 4   2) LD a,(i)
 4   3) ADC a,(i)
 4   4) CP (i)          ; only flag
 4   5) NOR (i)
16   6) LD  i, 12bit
 4   7) DEC i           ; no flag
 4   8) INC i           ; no flag
16   9) LD  i,(12bit)
16  10) LD (12bit), i
4   11) CALL i          ; i = ret
4   12) ONLYC prefix
4   13) ONLYZ prefix
4+p 14) IN   port
4+p 15) OUT  port       ; prinejhorsim to jde spojit s IN

syntaxe je Z80-like
"i" se chova trochu jako HL u Z80
Misto vsech skoku je jedina instrukce "CALL" ktera je vlastne JMP s tim ze do "i" se uklada adresa nasledujici instrukce (neco jako RET u CALL)
Protoze efektivni volani funkci je nutnost.

Funkce:
Kód:
16b LD  i, fce
4b  CALL i
next:


fce:
; i = next
16b LD (addr),i
...
16b LD i,(addr)
4b CALL i




NOT (i) = (i) NOR (i)
Kód:
4b LD  a,(i)
4b NOR(i)
4b LD (i), a



(i+1) = (i) AND (i+1) = (i NOR i) NOR ((i+1) NOR (i+1))
Kód:
4b LD  a,(i)
4b NOR(i)
4b LD (i), a        ; (i NOR i)
4b INC i
4b LD  a,(i)
4b NOR(i)           ; (i+1 NOR i+1)
4b DEC i
4b NOR(i)
4b LD (i), a        ; i = i AND (i+1)



(i) = (i) OR (i+1) = (i NOR (i+1)) NOR (i NOR (i+1))
Kód:
4b INC i
4b LD  a,(i)
4b DEC i
4b NOR(i)           ; (i NOR (i+1))
4b LD (i), a     
4b NOR(i)           ; (i NOR (i+1)) NOR (i NOR (i+1))
4b LD (i), a


; a=array[x], clear carry
Kód:
16b LD  i, array
16b LD (tmp), i

16b LD  i, tmp

4b  ADC a, (i)      ; array + x
4b  LD (i), a

4b  INC i
8b  LD  a, 0x00
4b  ADC a, (i)      ; array + carry
4b  LD (i), a

4b  INC i
8b  LD  a, 0x00
4b  ADC a, (i)      ; array + carry
4b  LD (i), a

16b LD  i,(tmp)
4b  LD  a, (i)


; a=array[x]
Kód:
16b LD  i, tmp
4b  LD (i), a       ; x
4b  NOR(i)          ; clear carry
8b  LD  a, array
4b  ADC a, (i)      ; array + x
4b  LD (i), a

4b  INC i
8b  LD  a, array >> 4
4b  LD (i), a
8b  LD  a, 0x00
4b  ADC a, (i)      ; array + carry
4b  LD (i), a

4b  INC i
8b  LD  a, array >> 8
4b  LD (i), a
8b  LD  a, 0x00
4b  ADC a, (i)      ; array + carry
4b  LD (i), a

16b LD  i,(tmp)
4b  LD  a, (i)



CP 0x33
JR z, xxx
Kód:
16b LD  i, tmp
4b  LD (i), a       ; x
8b  LD  a, 0x33
4b  CP (i)          ; array + carry
16b LD  i, xxx
4b  ONLYZ
4b  CALL i


PS: Mohlo by byt jeste zajimave propojit 3 cisla portu s tim index registrem pro high,medium a low nibble. Takze umoznit prime cteni a zapis pres akumulator.

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH


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ů: 28 ]  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 3 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