OldComp.cz

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


Právě je 17.09.2024, 11:07

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 31 ]  Přejít na stránku Předchozí  1, 2, 3  Další
Autor Zpráva
PříspěvekNapsal: 10.08.2024, 16:57 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1305
Has thanked: 102 times
Been thanked: 195 times
Tak jsem to fakt nekde zvoral

0x1015 ld a,#8F/add a,#81
0x1115 ld a,#8F/add a,#82
0x1215 ld a,#8F/add a,#83
0x1315 ld a,#8F/add a,#84
0x1415 ld a,#8F/add a,#85
0x1515 ld a,#8F/add a,#86
0x1615 ld a,#8F/add a,#87
0x1715 ld a,#8F/add a,#88
0x4015 ld a,#BF/add a,#81
0x4115 ld a,#BF/add a,#82
0x4215 ld a,#BF/add a,#83
0x4315 ld a,#BF/add a,#84
0x4415 ld a,#BF/add a,#85
0x4515 ld a,#BF/add a,#86
0x4615 ld a,#BF/add a,#87
0x4715 ld a,#BF/add a,#88
0x5015 ld a,#CF/add a,#81
0x5115 ld a,#CF/add a,#82
0x5215 ld a,#CF/add a,#83
0x5315 ld a,#CF/add a,#84
0x5415 ld a,#CF/add a,#85
0x5515 ld a,#CF/add a,#86
0x5615 ld a,#CF/add a,#87
0x5715 ld a,#CF/add a,#88

tohle jsou vsechny mozne AF (ale moznych kodu jak je ziskat je asi 920)

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


Nahoru
 Profil  
 
PříspěvekNapsal: 10.08.2024, 17:44 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1305
Has thanked: 102 times
Been thanked: 195 times
Provedl jsem to teda znova...

0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x4D, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x64, 0x68, 0x69, 0x6C, 0x6D, 0x78, 0x7A, 0x7B, 0x7C, 0x7E, 0x7F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBE, 0xBF

146 cisel z 256

3 opravene soubory
Uz neni potreba IFDEF (takze to zkompiluje i stare pasmo) protoze se rozlisuje hodnota
-1 a nebo 0xFFFF a hledany bajt... ktery je v rozsahu 0x00 az 0xFF takze neni problem.

Ten tisk na 32 radku jsem opravil tak ze se to tiskne vzdy na 2 radky u toho jednoho souboru

0x0000 xor a
/inc a/rra/rlca/rrca

takze to bylo lehke "opravit" na jeden radek.

Velikost je najednou pul mega... omlouvam se... ulozto je mrtve...


Přílohy:
set_flag.zip [512.38 KiB]
31 krát

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH
Nahoru
 Profil  
 
PříspěvekNapsal: 10.08.2024, 19:01 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1305
Has thanked: 102 times
Been thanked: 195 times
Me to vubec nemysli...

pokousel jsem se promazat ten soubor flag_all.txt abych nechal vzdy jen jeden radek na jednu hodnotu AF, ale tak abych nechal nejrychlejsi reseni...

a myslel jsem ze to nedam... a pritom to zni tak snadno...

udelal jsem prvne trik, ze pokud jsem nasel na radku / tak jsem ho zamenil za + a na zacatek pridal "xxxx ". Kde co jedno "x" to jeden takt...
To jsem udelal opakovane, jen s tim ze uz tam nebyla ta mezera, ale jen "xxxx".
Pak jsem jeste dal vyhledat "#" a kdyz to nasel tak jsem to zamenil za "$" a na zacetek dal "xxx" jako 3 takty navic...


takze jsem mel soubor s radky (plus jeden bez xxx pro "0x0044 xor A")

xxxxxxxxx 0x2234 nejaky_kod

Hledal jsem zpusob jak v basi tohle seradit a dalsi neschopnost z me strany... zvlast kdyz to cislo je hex.

Nakonec jsem nasel zpusob jak radit podle dvou sloupcu a kazdy jinym zpusobem. Mimochodem druhy sloupec se radi prvni.

Pak jsem nemohl spravne zapsat regexp na odstraneni tech xxxx ze zacatku pokud tam jsou... nevim proc nefungovalo co jsem napsal prvne... (trochu me matlo ze v shellu se musi escapovat jinak takze jsem nevedel zda je to + a nebo \+ a nakonec tam dal hvezdicku) plus zamenit zpet + za /.

A nakonec ten vysledek jsem orezal aby to cislo bylo jen jednou.

Kód:
; cat flag_all.txt | sed -e "s#^\(.*\)/\(.*$\)#xxxx \1+\2#g" | sed -e "s#^\(.*\)/\(.*$\)#xxxx\1+\2#g" | sed -e "s#^\(.*\)/\(.*$\)#xxxx\1+\2#g"| sed -e "s#^\(.*\)/\(.*$\)#xxxx\1+\2#g" | sed -e "s@^\(.*\)#\(.*$\)@xxx\1$\2@g" | sed -e "s@^\(.*\)#\(.*$\)@xxx\1$\2@g" > test.txt
; sort -t ' ' -k2,2g -k1,1 test.txt > test2.txt
; cat test2.txt | sed -e "s#\(^[x]* \)\(.*$\)#\2#g" | sed -e "s#+#/#g" > test3.txt
; sort -g -k1,1 -u test3.txt > flag_best.txt


PS: Aha zda se ze i $ se musi escapovat.
Je to cca 3100 hodnot.


Přílohy:
best_set_flag.zip [17.79 KiB]
36 krát

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH
Nahoru
 Profil  
 
PříspěvekNapsal: 10.08.2024, 22:55 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.05.2013, 14:56
Příspěvky: 2506
Has thanked: 320 times
Been thanked: 669 times
_dworkin píše:
Ted se snazim zjistit jaky kanal mam zapnout abych mel vystup z fuse do txt souboru na PC.
Ten pak mohu seradit a ziskat tu tabulku.
Fuse umí tisknout do TXT souboru skrz RS232 (na AY-3-8912). Nemám tušení, jestli to je kvůli 128k BASICu, určitě to na něm nezávisí, ale zjistil jsem, že když nastavím pomocí stty první sériák /dev/ttyS0 na stejný baudrate, jako pak generuji pomocí svého programu (https://cygnus.speccy.cz/popis_zx-spect ... _rs232.php), tak se poslaná data do TXT souboru opravdu zapisují.

Má to pár záludností, např. musím stty nastavit sériák před spuštěním Fuse a nepřišel jsem na to, jak změnit výstup jinam než do printout.txt, ale fungovalo to. Používal jsem to mimo jiné k ladění kódu (tuším, že jen 9600bps), který generoval HPGL abych to mohl místo plýtvání papírem na plotru zobrazovat v Inkscape.

Další možnost by byla ukládat sektory na TRD image diskety a pak z toho jen separovat 4096 bytů první stopy a získáš syrová data až do skoro 640kB. Nebo uložit BIN, ale to by těch dat nesmělo být víc než se vejde do RAM.

Jinak pro tisk se používá kanál #3 a tady mám program, který se o příjem dat z kanálu #3, tisk na RS232 a i o případnou detokenizaci výpisu BASICu postará https://cygnus.speccy.cz/popis_tisk-pre ... y-port.php

_________________
https://cygnus.speccy.cz ZX Spectrum 128k, Betadisk, DivIDE, ESXDOS


Nahoru
 Profil  
 
PříspěvekNapsal: 10.08.2024, 23:29 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1305
Has thanked: 102 times
Been thanked: 195 times
zxcygnus píše:
_dworkin píše:
Ted se snazim zjistit jaky kanal mam zapnout abych mel vystup z fuse do txt souboru na PC.
Ten pak mohu seradit a ziskat tu tabulku.
Fuse umí tisknout do TXT souboru skrz RS232 (na AY-3-8912). Nemám tušení, jestli to je kvůli 128k BASICu, určitě to na něm nezávisí, ale zjistil jsem, že když nastavím pomocí stty první sériák /dev/ttyS0 na stejný baudrate, jako pak generuji pomocí svého programu (https://cygnus.speccy.cz/popis_zx-spect ... _rs232.php), tak se poslaná data do TXT souboru opravdu zapisují.

Má to pár záludností, např. musím stty nastavit sériák před spuštěním Fuse a nepřišel jsem na to, jak změnit výstup jinam než do printout.txt, ale fungovalo to. Používal jsem to mimo jiné k ladění kódu (tuším, že jen 9600bps), který generoval HPGL abych to mohl místo plýtvání papírem na plotru zobrazovat v Inkscape.

Další možnost by byla ukládat sektory na TRD image diskety a pak z toho jen separovat 4096 bytů první stopy a získáš syrová data až do skoro 640kB. Nebo uložit BIN, ale to by těch dat nesmělo být víc než se vejde do RAM.

Jinak pro tisk se používá kanál #3 a tady mám program, který se o příjem dat z kanálu #3, tisk na RS232 a i o případnou detokenizaci výpisu BASICu postará https://cygnus.speccy.cz/popis_tisk-pre ... y-port.php


Viz predchozi odpoved
ub880d píše:
_dworkin píše:
ve fuse nasel jen
option-->peripherals->General...->zx printer

ale nevim kde nastavit jmeno vystupniho souboru.


este treba zapnut Options > Peripherals > General > Emulate printers

a potom si pozriet manual, cast "PRINTER EMULATION":

Any printout is appended to one (or both) of two files, depending on the printer — these default to printout.txt for text output, and printout.pbm for graphics (PBM images are supported by most image viewers and converters). These names can be changed with the --textfile and --graphicsfile options from the command line or configuration file. While the ZX Printer can only output graphically, simulated text output is generated at the same time using a crude sort of OCR based on the current character set (a bit like using SCREEN$). There is currently no support for graphics when using the serial/parallel output, though any escape codes used will be `printed' faithfully. (!)


mam to vyzkouseno a funguje to

Kód:
fuse --textfile my_output.txt file_name.tap
nebo
Kód:
fuse --textfile=my_output.txt file_name.tap
nebo
Kód:
fuse --textfile="my_output.txt" file_name.tap
nebo
Kód:
fuse --textfile "my_output.txt" file_name.tap


kdyz mam ve fuse zapnuto:

option-->peripherals->General...->[x] Emulate printers
option-->peripherals->General...->[x] ZX Printer

Musi byt oba...

A ten vystupni soubor nemaze pred pouzitim, ale pridava na konec.
Ale stejne si to pokazde ukladam bokem, protoze kdyz to spadne tak to nechces opravovat na puvodni stav.

A rychlost mam na 11111%, kdyz mam neco vetsiho tak to skonci padem...

PS: fuse se muze chovat divne pokud jsi predtim uz pouzil --textfile, tak si to muze pamatovat i kdyz ho priste nezadas...

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


Nahoru
 Profil  
 
PříspěvekNapsal: 11.08.2024, 08:13 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.05.2013, 14:56
Příspěvky: 2506
Has thanked: 320 times
Been thanked: 669 times
_dworkin píše:
option-->peripherals->General...->[x] Emulate printers
option-->peripherals->General...->[x] ZX Printer

Musi byt oba...

A ten vystupni soubor nemaze pred pouzitim, ale pridava na konec.
Ale stejne si to pokazde ukladam bokem, protoze kdyz to spadne tak to nechces opravovat na puvodni stav.

A rychlost mam na 11111%, kdyz mam neco vetsiho tak to skonci padem...

PS: fuse se muze chovat divne pokud jsi predtim uz pouzil --textfile, tak si to muze pamatovat i kdyz ho priste nezadas...
Já měl problém se ZX Printer hlavně v tom, že nefunguje jinde než na ZXS 16k a ZXS 48k, nefunguje s některými upravenými ROM atd... oproti tomu RS232 funguje všude, kde je zapnutá AY-3-8912. Stejně tak mi nesedělo omezení na 32 znaků / řádek a to OCRkování z grafického výstupu. Skrz RS232 mohu mít řádek dlouhý dokud nepošlu CR LF, mohu tisknout včetně řídících kódů (a generovat si třeba CSV tabulku, nebo používat tabulátory...). Posílání skrz kanál #3 můžeš taky vynechat a vysílat znaky rovnou ze svého programu, emulace tiskárny + AY samozřejmě musí zůstat zapnutá, nikoli emulace ZX Printer.
Asi kecám... koukám do nastavení Fuse a já tam mám zapnutou emulaci ZX Printer, ale nikoli tiskárny... musím ověřit.

Bylo by zajímavé ověřit, jestli RS232 není rychlejší, vyšší baudrate (19200..57600bps) by mohly být, resp. o kolik.

Jména souborů jsou v .fuserc. Není "může si pamatovat" způsobeno tím, že jsi použil SAVE v menu Options?
Kód:
  <graphicsfile>printout.pbm</graphicsfile>
  <textfile>printout.txt</textfile>

_________________
https://cygnus.speccy.cz ZX Spectrum 128k, Betadisk, DivIDE, ESXDOS


Nahoru
 Profil  
 
PříspěvekNapsal: 11.08.2024, 14:10 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3806
Bydliště: Bratislava
Has thanked: 375 times
Been thanked: 811 times
zxcygnus píše:
Fuse umí tisknout do TXT souboru skrz RS232 (na AY-3-8912). Nemám tušení, jestli to je kvůli 128k BASICu
Ano, je to kvoli tomu. 128 basic ma kanal "p" standartne obsluhovany cez RS232, takze aj LPRINT vtedy veci posiela na RS232. Preto viacero emulatorov (okrem Fuse aj RS32) moznost z vystupom z RS232 nejak dalej pracovat, bud ho prepojit s fyzickym seriakom (COM1,COM2...) alebo vsetko co sa nan posle proste ukladat do suboru. Toto hodne vyuzivam aj ja, napriklad ked som si chcel v MRS vygenerovat protokol o preklade, tak som ho cez RST #10 poslal na kanal #3 a emulator mi vsetko pekne zapisal do textoveho suboru.
zxcygnus píše:
Další možnost by byla ukládat sektory na TRD image diskety a pak z toho jen separovat 4096 bytů první stopy a získáš syrová data až do skoro 640kB. Nebo uložit BIN, ale to by těch dat nesmělo být víc než se vejde do RAM.
Alebo komu sa nechce babrat s trdosom, si moze otvorit TAPku pre zapis, v pameti mat nejaky buffer a vzdy ked sa buffer naplni datami, tak obsah buffera ulozit zavolanim SAVE rutinky #4C6. A nasledne subory v tapke len trivialne zlepit dokopy.
zxcygnus píše:
Já měl problém se ZX Printer hlavně v tom, že nefunguje jinde než na ZXS 16k a ZXS 48k, nefunguje s některými upravenými ROM atd...
Ono je to uz tak, ze vzhladom na to kolko ludi ma ZX Printer, tak jeho obsluzne rutinky su ako prve ktore padnu za obet (hned po kilobajtovej oblasti #FF) ak treba nieco do romky doplnit.
128 basic navyse ma nejake rutinky a dalsie systemove premenne v printer bufferi, takze ten uz vobec nemoze vyuzivat tieto rutinky, ktore by mu printer buffer znicili.
zxcygnus píše:
Stejně tak mi nesedělo omezení na 32 znaků / řádek
Ano, toto je zial natvrdo, printer buffer ma 256 bajtov, to je presne osem pixelovych riadkov po 32 bajtoch alebo znakoch na riadok a neda sa to nijak rozsirit. Leda za cenu znacnej straty kompatibility posunutim systemovek basicu alebo vyhradenim miesta niekde uplne inde v pameti. Ale realny ZX Printer aj tak viac znakov (resp. viac ako 256 pixelov) na riadok fyzicky nie je schopny tlacit, a emulacia ZX Printeru s tymto obmezenim tiez pocita, takze akekovek softwerove vylepsenia v romke v tomto ohlade nema vyznam robit.

Urcitym riesenim ako zvysit pocet znakov na riadok je pouzit uzsi font, napr. so znamym taswordovskym sa da vypisat az 64 znakov na riadok. Akurat to OCR zavesene na klasickych znakoch sa na to nechyti.


Nahoru
 Profil  
 
PříspěvekNapsal: 11.08.2024, 17:18 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1305
Has thanked: 102 times
Been thanked: 195 times
Priznam se ze moc nechapu o cem mluvite o tom tisku.

Doufal jsem ze kdyz se posila znak na tiskarnu tak to neni jako tisk grafiky, jako na obrazovku, ale ze neco umelo i prijimat kody a mit vlastni grafiku pro znak (vlastni fonty).
Protoze se tam zminovalo OCR... takze to tak neni?
To by byl mozna i duvod proc me to krome txt neustale zapisuje i tu grafiku co neustale mazu a ani nevim k cemu ji mam pouzit. ...Asi na to OCR.

Mel jsem jen BT-100 a jako vsechno okolo ZX kdyz jsem byl pubertak byla magie, protoze jsem jsem to vsechno ziskal po nekom vcetne piratskych kazet, nejakych svazarm magazinu a microbaze, jedne originalni anglicke prirucky a jedne prelozene knihy, ktera vypadala jako by to nekdo delal na nejake kopirce. Nebylo to pres pruklepovy papir na stroji, ale necim kvalitnejsim. Ale v otresne kvalite.
Nemel jsem zadne dalsi informace. I kdyz existoval minimalne jeden spoluzak co mel asi taky ZX, protoze si pamatuji ze rikal ze hral Tomahawk a ze se dostal do situace, kdy mel poskozeny stabilizacni rotor a porad se otacel. Coz ve skutecnosti asi nebyla raritni situace.
Takze bez internetu a ze bych nekdy byl v nejakem klubu jsem mel v podstate nula informaci a nebyt microbaze tak asi nepochopim ani poukovani a prolamovani loaderu.
Po HW strance to bylo jeste horsi, protoze jsem bezne vypojoval za behu..ten plugin pro joysticky, kdyz jsem ho chtel zamenit z kempston na sinclair.
A vlastne jsem nakonec ustrihl snuru od napajeni, protoze nekdo tvrdil ze ta nabijecka co je k tomu dodavana ma vysoke napeti, a ze je lepsi tam mit trafo (co jsem mel na vlacky).
No, ale po ustrizeni jsem to nejak nepripojil na to trafo, takze tim moje pouzivani ZX skoncilo.
Ale to uz jsem mel myslim 486.

Takze na tu BT-100 jsem vytiskl asi tak 10 obrazku z uvodni obrazovky her a byl rad ze jsem to rozchodil. Zadny text. Ona taky ta kvalita... byla horsi nez to psat na stroji s pruklepakem.
Zase BT-100 mela tu vyhodu ze me nezaschla barva.

Ok, konec offtopic jak jsem marnej. Radsi nebudu zminovat jak jsem vyjmul nahradni Z80 z nejake desky pomoci sroubovaku a ulomil nozicky a myslel si ze je to ok.


Pouzivani nejakych metod "tisku" do pameti a ukladani nebo na diskety me moc nepomuze, protoze jsem tisknul 16 mb dat v txt souboru (pak me to zacne swapovat a nasledne zamrzne vetsinou cely OS, ze to ani nejde killnout). A to jsem byl v polovine co jsem chtel tisknout a trvalo to vic jak pulhodky realneho casu.

Jak zxcygnus zminil RS232, tak nevim ktera bije.
AY-3-8912 bude asi nejaky box, co se strka dozadu jako byly ty krabicky na joysticky.
Ale umi to hrat hudbu.
A krome toho to ma... RS232?
Aha to je kabel, takze krome toho ze posilam neco na porty co cte ta krabicka to dokaze poslat dal...
a data mohu posilat jako ascii bajty, protoze jsou to jen data.
To by fakt znamenalo ze me pocet znaku na radek pak netrapi.
A ty pak nekde mohu zachytit do toho txt souboru.
Stale se bavime o emulaci toho vseho?
Protoze to zachyceni do txt vypadalo jako externi program a ne Fuse rozsireni.

Hmm... asi by to chtelo teda upravit asm, ze misto tisku to posila na ty porty, krere cte AY, takze resit i rychlost prenosu atd?

Ja se nakonce s temi 32 bajty nejak vyporadal.
Pokud se rozhodnu ze vystup optimalizuji misto pro obrazovku pro txt, tak staci udelat nekolik pravidel.
Staci aby se kazda polozka vlezla do 31 znaku a mit nejaky znak, ktery pak nahradim pomoci escape sekvenci ve vysledku \n? -> "".

Vlastne ve skutecnosti byla chyba mit vystup jako ASM a ne jako HEX.
Pokud z toho chci delat tabulku v C knihovne o 64kb radcich tak je lepsi to mit jako asi 6 bajtu na radek.
A az pak z toho generovat txt vypis.
Ty bajty nemusi byt ani jako cisla ale klidne nejaky pseudo asm.
Neco jako:

a_n,x_0F, sub_n, x_77,nop,nop

a tohle se me do 32 znaku vleze...

dokonce premyslim zda konecny vystup nebude jako pole bajtu s informaci ze je to pseudoinstrukce LD AF, 0x988B

Kód:
DB 0x3E, 0x0F, 0xD6, 0x77     ; 14:4   ld AF = 0x988B (ld a, 0x0F/sub 0x77)


Tak a ted co jsem chtel psat:

Zde je tabulka hodnot co jdou nastavit v "F" (druha polozka), bez ohledu co bude v A (prvni polozka).

0x01;0x00;8;2;xor_a/inc_a
0x00;0x01;12;3;xor_a/inc_a/rra
0x01;0x02;14;4;ld_a_$05/sub_$04
0x10;0x03;11;3;xor_a/sub_$F0
0x06;0x04;12;3;xor_a/and_a/daa
0x01;0x05;14;4;ld_a_$81/add_$80
0x10;0x06;14;4;ld_a_$85/sub_$75
0x03;0x07;15;4;xor_a/sub_$97/daa
0x08;0x08;11;3;xor_a/add_$08
0x08;0x09;14;4;ld_a_$78/add_$90
0x08;0x0A;14;4;ld_a_$7F/sub_$77
0x18;0x0B;14;4;ld_a_$0F/sub_$F7
0x09;0x0C;15;4;xor_a/add_$09/or_a
0x08;0x0D;14;4;ld_a_$81/add_$87
0x18;0x0E;14;4;ld_a_$8F/sub_$77
0x09;0x0F;15;4;xor_a/sub_$91/daa
0x01;0x10;12;3;xor_a/inc_a/and_a
0x01;0x11;14;4;ld_a_$7F/add_$82
0x01;0x12;14;4;ld_a_$70/sub_$6F
0x01;0x13;11;3;xor_a/sub_$FF
0x03;0x14;15;4;xor_a/add_$03/and_a
0x10;0x15;14;4;ld_a_$81/add_$8F
0x01;0x16;14;4;ld_a_$80/sub_$7F
0x80;0x17;18;5;ld_a_$81/add_$FE/cpl
0x18;0x18;14;4;ld_a_$0F/add_$09
0x08;0x19;14;4;ld_a_$7F/add_$89
0x08;0x1A;14;4;ld_a_$77/sub_$6F
0x08;0x1B;11;3;xor_a/sub_$F8
0x09;0x1C;15;4;xor_a/add_$09/and_a
0x18;0x1D;14;4;ld_a_$8F/add_$89
0x08;0x1E;14;4;ld_a_$85/sub_$7D
0x0C;0x1F;15;4;xor_a/sub_$8E/daa
0x20;0x20;11;3;xor_a/add_$20
0x20;0x21;14;4;ld_a_$70/add_$B0
0x20;0x22;14;4;ld_a_$7F/sub_$5F
0x20;0x23;11;3;xor_a/sub_$E0
0x21;0x24;15;4;xor_a/add_$21/or_a
0x60;0x25;12;3;xor_a/ccf/daa
0x20;0x26;14;4;ld_a_$85/sub_$65
0x21;0x27;15;4;xor_a/sub_$79/daa
0x28;0x28;11;3;xor_a/add_$28
0x28;0x29;14;4;ld_a_$78/add_$B0
0x28;0x2A;14;4;ld_a_$7F/sub_$57
0x28;0x2B;14;4;ld_a_$1F/sub_$F7
0x28;0x2C;15;4;xor_a/add_$28/or_a
0x28;0x2D;14;4;ld_a_$81/add_$A7
0x28;0x2E;14;4;ld_a_$9F/sub_$77
0x28;0x2F;15;4;xor_a/sub_$72/daa
0x20;0x30;14;4;ld_a_$1F/add_$01
0x20;0x31;14;4;ld_a_$7F/add_$A1
0x21;0x32;14;4;ld_a_$70/sub_$4F
0x21;0x33;11;3;xor_a/sub_$DF
0x21;0x34;15;4;xor_a/add_$21/and_a
0x65;0x35;11;3;or_$FF/daa
0x21;0x36;14;4;ld_a_$80/sub_$5F
0xA0;0x37;18;5;ld_a_$81/add_$DE/cpl
0x28;0x38;14;4;ld_a_$1F/add_$09
0x28;0x39;14;4;ld_a_$7F/add_$A9
0xFE;0x3A;12;3;xor_a/inc_a/cpl
0x28;0x3B;11;3;xor_a/sub_$D8
0x28;0x3C;15;4;xor_a/add_$28/and_a
0x28;0x3D;14;4;ld_a_$9F/add_$89
0x28;0x3E;14;4;ld_a_$85/sub_$5D
0x2B;0x3F;15;4;xor_a/sub_$6F/daa
0x00;0x40;8;2;xor_a/adc_a
0x00;0x41;12;3;xor_a/cp_a/ccf
0x00;0x42;8;2;xor_a/cp_a
0x00;0x43;15;4;xor_a/sub_$FF/dec_a
0x00;0x44;4;1;xor_a
0x00;0x45;8;2;xor_a/ccf
0x00;0x46;12;3;xor_a/cp_a/daa
0x00;0x47;15;4;xor_a/sub_$A0/daa
0xCA;0x48;19;5;or_$FF/daa/cp_a/rla
0x4C;0x49;20;5;xor_a/dec_a/daa/cp_a/rra
0x08;0x4A;15;4;xor_a/add_$08/cp_a
SZ5H 3PNC 0100 1011 problem Z == 3 == 1? && ( H != 0 || N != 0 ) Problem Z == 0 && Z != P
SZ5H 3PNC 0100 1100 problem Z == 3 == 1? && ( H != 0 || N != 0 )
0xDF;0x4D;20;5;xor_a/cpl/rra/rra/rra
SZ5H 3PNC 0100 1110 problem Z == 3 == 1? && ( H != 0 || N != 0 )
SZ5H 3PNC 0100 1111 problem Z == 3 == 1? && ( H != 0 || N != 0 )
0x00;0x50;11;3;or_$FF/inc_a
0x00;0x51;14;4;ld_a_$81/add_$7F
0x00;0x52;15;4;or_$FF/cp_a/cpl
0x00;0x53;19;5;or_$FF/cp_a/ccf/cpl
0x00;0x54;8;2;xor_a/and_a
0x00;0x55;15;4;xor_a/add_$9A/daa
0x00;0x56;12;3;xor_a/cpl/cpl
0x00;0x57;16;4;xor_a/ccf/cpl/cpl
SZ5H 3PNC 0101 1000 problem Z == 3 == 1? && ( H != 0 || N != 0 ) Problem Z == 0 && Z != P
SZ5H 3PNC 0101 1001 problem Z == 3 == 1? && ( H != 0 || N != 0 ) Problem H == C == 1? Problem Z == 0 && Z != P
0x9A;0x5A;19;5;or_$FF/daa/cp_a/cpl
0x4D;0x5B;23;6;or_$FF/daa/cp_a/rrca/cpl
SZ5H 3PNC 0101 1100 problem Z == 3 == 1? && ( H != 0 || N != 0 )
SZ5H 3PNC 0101 1101 problem Z == 3 == 1? && ( H != 0 || N != 0 ) Problem H == C == 1?
SZ5H 3PNC 0101 1110 problem Z == 3 == 1? && ( H != 0 || N != 0 )
SZ5H 3PNC 0101 1111 problem Z == 3 == 1? && ( H != 0 || N != 0 ) Problem H == C == 1?
0x30;0x60;20;5;xor_a/ccf/daa/cp_a/rra
0x32;0x61;19;5;or_$FF/daa/cp_a/rra
0x20;0x62;15;4;xor_a/add_$20/cp_a
SZ5H 3PNC 0110 0011 problem Z == 5 == 1? && ( H != 0 || N != 0 ) Problem Z == 0 && Z != P
0x20;0x64;20;5;xor_a/ccf/rra/rra/rra
SZ5H 3PNC 0110 0101 Lze vytvorit pres xor a/cpl/rla/rla/rla/rla (kde se vynulovane carry dostane do bitu 3)
SZ5H 3PNC 0110 0110 problem Z == 5 == 1? && ( H != 0 || N != 0 ) To many problem for Z == 1...
SZ5H 3PNC 0110 0111 problem Z == 5 == 1? && ( H != 0 || N != 0 )
0x7F;0x68;19;5;or_$FF/cp_a/rla/rrca
0x7F;0x69;15;4;or_$FF/cp_a/rra
0xFF;0x6A;11;3;or_$FF/cp_a
SZ5H 3PNC 0110 1011 problem Z == 5 == 1? && ( H != 0 || N != 0 ) Problem Z == 0 && Z != P
0x7F;0x6C;16;4;xor_a/cpl/rla/rrca
0x7F;0x6D;12;3;xor_a/cpl/rra
SZ5H 3PNC 0110 1110 problem Z == 5 == 1? && ( H != 0 || N != 0 )
SZ5H 3PNC 0110 1111 problem Z == 5 == 1? && ( H != 0 || N != 0 )
0x32;0x70;23;6;or_$FF/daa/cp_a/rra/ccf
SZ5H 3PNC 0111 0001 problem Z == 5 == 1? && ( H != 0 || N != 0 )
0x66;0x72;20;5;xor_a/dec_a/daa/cp_a/cpl
SZ5H 3PNC 0111 0011 problem Z == 5 == 1? && ( H != 0 || N != 0 ) Problem H == C == 1? Problem Z == 0 && Z != P
SZ5H 3PNC 0111 0100 problem Z == 5 == 1? && ( H != 0 || N != 0 )
SZ5H 3PNC 0111 0101 problem Z == 5 == 1? && ( H != 0 || N != 0 ) Problem H == C == 1?
SZ5H 3PNC 0111 0110 problem Z == 5 == 1? && ( H != 0 || N != 0 )
SZ5H 3PNC 0111 0111 problem Z == 5 == 1? && ( H != 0 || N != 0 ) Problem H == C == 1?
0x7F;0x78;19;5;or_$FF/cp_a/rra/ccf
SZ5H 3PNC 0111 1001 problem Z == 5 == 1? && ( H != 0 || N != 0 )
0xFF;0x7A;12;3;xor_a/cp_a/cpl
0xFF;0x7B;16;4;xor_a/cp_a/ccf/cpl
0x7F;0x7C;16;4;xor_a/cpl/rra/ccf
SZ5H 3PNC 0111 1101 problem Z == 5 == 1? && ( H != 0 || N != 0 )
0xFF;0x7E;8;2;xor_a/cpl
0xFF;0x7F;12;3;xor_a/ccf/cpl
0x80;0x80;11;3;xor_a/add_$80
0x80;0x81;14;4;ld_a_$F0/add_$90
0x80;0x82;14;4;ld_a_$85/sub_$05
0x90;0x83;11;3;xor_a/sub_$70
0x80;0x84;14;4;ld_a_$70/add_$10
0x00;0x85;15;4;or_$FF/cpl/ccf
0x81;0x86;18;5;ld_a_$85/sub_$04/daa
0x80;0x87;11;3;xor_a/sub_$80
0x88;0x88;11;3;xor_a/add_$88
0x88;0x89;14;4;ld_a_$F8/add_$90
0x88;0x8A;14;4;ld_a_$FF/sub_$77
0x98;0x8B;14;4;ld_a_$0F/sub_$77
0x88;0x8C;14;4;ld_a_$78/add_$10
0x99;0x8D;16;4;xor_a/dec_a/daa/scf
0x88;0x8E;18;5;ld_a_$FF/sub_$77/daa
0x99;0x8F;12;3;xor_a/dec_a/daa
0x90;0x90;14;4;ld_a_$81/add_$0F
0x80;0x91;14;4;ld_a_$81/add_$FF
0x00;0x92;12;3;xor_a/dec_a/cpl
0x81;0x93;11;3;xor_a/sub_$7F
0x80;0x94;14;4;ld_a_$7F/add_$01
0x80;0x95;15;4;xor_a/sub_$81/inc_a
0x00;0x96;11;3;or_$FF/cpl
0x81;0x97;14;4;ld_a_$70/sub_$EF
0x98;0x98;14;4;ld_a_$0F/add_$89
0x88;0x99;14;4;ld_a_$FF/add_$89
0x88;0x9A;14;4;ld_a_$F7/sub_$6F
0x88;0x9B;11;3;xor_a/sub_$78
0x88;0x9C;14;4;ld_a_$7F/add_$09
SZ5H 3PNC 1001 1101 problem D nibble? H == C == 1?
0x08;0x9E;18;5;ld_a_$7F/add_$78/cpl
0x88;0x9F;14;4;ld_a_$77/sub_$EF
0xA0;0xA0;11;3;xor_a/add_$A0
0xA0;0xA1;14;4;ld_a_$F0/add_$B0
0xA0;0xA2;14;4;ld_a_$FF/sub_$5F
0xA0;0xA3;11;3;xor_a/sub_$60
0xA0;0xA4;14;4;ld_a_$70/add_$30
0x33;0xA5;16;4;xor_a/dec_a/daa/rla
SZ5H 3PNC 1010 0110 problem?
0xA0;0xA7;14;4;ld_a_$7F/sub_$DF
0xA8;0xA8;11;3;xor_a/add_$A8
0x7F;0xA9;12;3;xor_a/dec_a/rra
0xFE;0xAA;11;3;or_$FF/dec_a
0xA8;0xAB;14;4;ld_a_$1F/sub_$77
0xFF;0xAC;7;2;or_$FF
0x7F;0xAD;11;3;or_$FF/rra
SZ5H 3PNC 1010 1101 Lze vytvorit pres ld A,11.1...0/and a/rra/ccf kde tecky obsahuji lichy pocet nul
0xA8;0xAF;14;4;ld_a_$7F/sub_$D7
0xA0;0xB0;14;4;ld_a_$81/add_$1F
0xA0;0xB1;14;4;ld_a_$FF/add_$A1
0xA1;0xB2;14;4;ld_a_$F0/sub_$4F
0xA1;0xB3;11;3;xor_a/sub_$5F
0xA0;0xB4;14;4;ld_a_$7F/add_$21
0xA0;0xB5;18;5;ld_a_$81/add_$B9/daa
0x20;0xB6;18;5;ld_a_$7F/add_$60/cpl
0xA1;0xB7;14;4;ld_a_$70/sub_$CF
0xA8;0xB8;14;4;ld_a_$1F/add_$89
0xFE;0xB9;11;3;or_$FF/adc_a
0xFF;0xBA;8;2;xor_a/dec_a
0xA8;0xBB;11;3;xor_a/sub_$58
0xFF;0xBC;11;3;or_$FF/and_a
SZ5H 3PNC 1011 1101 problem D nibble? H == C == 1?
0xFA;0xBE;15;4;or_$FF/cpl/daa
0xA8;0xBF;14;4;ld_a_$77/sub_$CF

Konci to u 191, protoze pak je problem ze musi byt flag ZERO a zaroven SIGN.
Nevim zda to jde obejit.
Intrukce BIT vypadaji nadejne, ale v manualu se pise ze SIGN je nedefinovan...
Nevim co si mam pod tim predstavit, jako ze je to prilis komplexni? Ale stale deterministicke?
Kazdy procesor to ma jinak?
V Z80 je fyzicky generator nahodnych cisel... a mala zmena napeti zmeni hodnotu a takhle ho muzu pekne pres SIGN bit po bitu nacitat? :D
A nepotrebuji pak nejake XOR alogoritmy RND... .)

V tech nizsich hodnotach jsou stale mezery.
Nektere se mi podarilo zaplnit kdyz jsem nad tim premyslel...
Je to takove SUDOKU.
Znate vysledek a zpetne hledate podle pravidel instrukce az se dostanete na zacatek.
Ale mezery jsou tam vetsinou protoze ze existuji nejake kombinace BITu, ktere jsou nepravdepodobne/problematicke a u mezer je to vetsinou kombinace vice problemu dohromady.
Pri generovani jsem ale nezkousel vsechny mozne reseni, takze tam je prostor objevit reseni.

Kód:
  org 0x8000
          ;        SZ5H 3PNC
          ; SZ5H 3PNC   AaFf ..5. 3... SZ5H 3PNC
  xor A   ; SZ50 3P00 0x0044 0000 0000 0100 0100  pocet nul je sude? Takze Z80 dela sudou paritu?
  inc A   ; SZ5H 3V0- 0x0100 0000 0001 0000 0000
  or  A   ; SZ50 3P00 0x0100 0000 0001 0000 0000 
  inc A   ; SZ50 3V0- 0x0200 0000 0010 0000 0000
  or  A   ; SZ5H 3P00 0x0200 0000 0010 0000 0000
  inc A   ; SZ50 3V0- 0x0300 0000 0011 0000 0000
  or  A   ; SZ5H 3P00 0x0200 0000 0011 0000 0100  pocet nul je sude? Takze Z80 dela sudou paritu?

          ; SZ5H 3PNC   AaFf ..5. 3... SZ5H 3PNC
  xor A   ; SZ50 3P00 0x0044 0000 0000 0100 0100  pocet nul je sude? Takze Z80 dela sudou paritu?
  cpl     ; --51 3P1- 0xFF7E 1111 1111 0111 1110  pocet nul je sude? Takze Z80 dela sudou paritu?
  rra     ; --50 3-0C 0x7F6D 0111 1111 0110 1101
  rra     ; --50 3-0C 0xBF6D 1011 1111 0110 1101
  rra     ; --50 3-0C 0xDF4D 1101 1111 0100 1101

          ; SZ5H 3PNC   AaFf ..5. 3... SZ5H 3PNC
  xor A   ; SZ50 3P00 0x0044 0000 0000 0100 0100  pocet nul je sude? Takze Z80 dela sudou paritu?
  cpl     ; --51 3P1- 0xFF7E 1111 1111 --11 111-  pocet nul je sude? Takze Z80 dela sudou paritu?
  rla     ; --50 3-0C 0x7E6D 1111 1110 --10 1101
  rla     ; --50 3-0C 0xFD6D 1111 1101 --10 1101
  rla     ; --50 3-0C 0xFB6D 1111 1011 --10 1101
  rla     ; --50 3-0C 0xF765 1111 0111 --10 0101
          ; --5H 3-0C 0x..9D .10. 1... 0110 0110

          ; SZ5H 3PNC   AaFf ..5. 3... SZ5H 3PNC
  ld A,$FC;           0xFC.. 1111 1100
  and A   ; SZ51 3P00 0xFCBC 11.1 ...0 101. 1100 musi byt sudy pocet nul!!!
  rra     ; --50 3-0C 0x7EAC 011. 1... --10 1-00 Carry = next H = 0
  ccf     ; --5H 3-0C 0x7EAD .11. 1... --10 1-01
          ; --5H 3-0C 0x..AD .11. 1... 1010 1101

  ld A,$DE;           0xDE.. 1011 1110
  and A   ; SZ51 3P00 0xDE9C 11.1 ...0 101. 1100 musi byt sudy pocet nul!!!
  rra     ; --50 3-0C 0x6FAC 011. 1... --10 1-00 0 -> Carry -> H
  ccf     ; --5H 3-0C 0x6FAD .11. 1... --10 1-01
          ; --5H 3-0C 0x..AD .11. 1... 1010 1101

  ld A,$D8;           0xD8.. 1011 1000
  and A   ; SZ51 3P00 0xD89C 11.1 ...0 101. 1100 musi byt sudy pocet nul!!!
  rra     ; --50 3-0C 0x6CAC 011. 1... --10 1-00 Carry = next H = 0
  ccf     ; --5H 3-0C 0x6CAD .11. 1... --10 1-01
          ; --5H 3-0C 0x..AD .11. 1... 1010 1101

  ld A,$F0;           0xF0.. 1111 0000
  and A   ; SZ51 3P00 0xF0B4 11.1 ...0 101. 1100 musi byt sudy pocet nul!!!
  rra     ; --50 3-0C 0x78AC 011. 1... --10 1-00 Carry = next H = 0
  ccf     ; --5H 3-0C 0x78AD .11. 1... --10 1-01
          ; --5H 3-0C 0x..AD .11. 1... 1010 1101
   
          ; SZ5H 3PNC   AaFf ..5. 3... SZ5H 3PNC 
  dec A   ; SZ5H 3V1- 0x..BD 1.1. 1... 1011 1101 dec never V == 1 && S == 1 && ( 5 == 0 || 3 == 0 )
  inc A   ; SZ50 3V0- 0x..BD 1.1. 1... 1011 1101 inc never V == 1 && S == 0 && ( 5 == 1 || 3 == 1 )
  ret


PS: V te tabulce jsou nejzajimavejsi hodnoty, ktere jsou okolo problematickych mist, jak se ty problemy nakonec obesly.
PPS: P/V... "V" se pouziva pro oVerflow, protoze "O" vypada jako "0"?

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


Nahoru
 Profil  
 
PříspěvekNapsal: 11.08.2024, 18:19 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1305
Has thanked: 102 times
Been thanked: 195 times
Podrobne informace o tech priznacich je pekna bolest nalezt.
Vsude jsou chyby a nebo aspon zmateni...

I "Z80 Family CPU User Manual.pdf" pise u OR ze "P/V is set if owerflow; reset otherwise", a chybujici https://clrhome.org/table/ pise ze to detekuje paritu, coz bude asi spravne.

Ten nedokumentovany 5. a 3. bit (pocitano od nuly) ktery ma byt totozny s obsahem A po provedeni operace je jak moc spolehlivy? Je to vzdy A? I kdyz priznak meni treba "rr D"?
Kolik variant procesoru to tak nema?
Originalni ZX je v pohode?
A nebo tim ze to taham z FUSE tak si to pekne odladim ze to bude fungovat...
zase jen v emulatoru? .)

PS: Ten pbm soubor lze otevtri v GIMPu a je to videt ten text fakt jako grafika... mam pocit ze jak je tam par mega tak to uz GIMP neumel otevrit.
PPS: Ten duvod proc si to pamatuje jmeno toho souboru bude ze se me nedari Fuse normalne zavrit kdyz spustim ty tisknouci programy. Az teprve kdyz opakovane mackam ukonceni to napise ze je program zaneprazdneny takze se neukonci korektne, takze ze si to neco pamatuje je mozne.
On si pamatuje i nastaveni vystupu, jak velke zvetseni atd. Jakou ma rychlost... atd. Mozna uvnitr je nekde prepinac aby si to pamatoval i bez savu nastaveni.
PPPS: Proc FUSE nema moznost tisk do TXT primo, ze by si odchytaval volani tiskove rutiny, takze by vedel ascii hodnotu, kterou se snazi ROMka "kreslit". Mohla by se nastavit i virtualni sirka obrazovky... Staci vedet presnou ADRESU a hodnotu registru. Ok, jeste by musel delat nejakou mensi analyzu vstupu, zda je to nejaka barva atd.
PPPPS: Je v ZX ROM nejaka fatalni chyba zpusobujici restart po nekolika dnech provozu ZX? Pokud ano, lze to snadno fixnout? Mozna ten pad neni zpusobeny tim ze se vycerpa nejaky 16 mb buffer. Nebo spatne nastavenymi zdroji pro program. Nebo mnou.

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


Naposledy upravil _dworkin dne 11.08.2024, 19:25, celkově upraveno 1

Nahoru
 Profil  
 
PříspěvekNapsal: 11.08.2024, 19:13 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.05.2013, 14:56
Příspěvky: 2506
Has thanked: 320 times
Been thanked: 669 times
AY-3-8912 je čip, který generuje tóny v ZX Spectrum 128k a mnoha dalších variantách a doplňujících interfacech

AY-3-8912 má na sobě, kromě tříkanálového pípátka i jeden 8 bitový paralelní port, který je použitý v ZXS 128k vytvoření RS232 / MIDI / KEYPAD portů, dvě dvojice linek pro keypad, dvě dvojice linek pro RS232 (vždy dva vstupy, dva výstupy skrz převodník úrovní TTL-RS232).

Když budeš softwarově hýbat stavy na patřičných bitech toho portu, můžeš serializovat data a tím realizovat RS232 (bitbanging). Je úplně jedno, jestli to dělá ZX ROM, nebo jiný program. Důležité je jen to, aby se to dělo správně rychle (zakázat přerušení po dobu serializace a správný počet taktů mezi změnami bitů). Fuse emulátor takto serializovaná data umí odchytávat a ukládá je do textového souboru printout.txt

Tj. mohl bys tímto způsobem z emulátoru dostat nekonečný proud (nejenom textových) dat... to jsi chtěl, ne?

Proto jsem ti poslal odkaz na můj web, kde je několik zdrojáků a možností, jak to dělat. Stačí vzít a použít.

Nejkouzelnější na téhle metodě je to, že bys takhle mohl získat data i z reálného ZX Spectra. A tím případně porovnat, jestli ze skutečné Z80 dostaneš stejný výstup, jako z emulované.

A na reálném hardwaru nepotřebuješ ani tu AY, stačí 8255 (třeba v Didaktiku Gama), prostě jakýkoli port a tomu přizpůsobený program, kromě magnetofonového EAR/MIC, kde je v sérii kondenzátor a to znemožňuje (komplikuje) detekci klidového stavu. Mohl by sis to pěkně automatizovat...

Tisk na ZX Printer JE tisk grafiky (stejně jako na BT100). Ta tiskárnička to jinak neumí. Emulátor v podstatě odchytává na portu tiskárny zapisované pixelové řádky (generuje podprogram ZX ROM) na nichž zkusí rozpoznat font ze ZX ROM a z toho generuje text. Emulátor NEODCHYTÁVÁ data posílaná na kanál #3, tam je odchytává ovladač tiskárny, což je ve výchozím stavu podprogram v ROM, ale může to být i program, který tato data převádí na proud znaků vysílaných po RS232 (to je ten druhý z mých odkazů).

Spekuloval jsem, že by RS232 mohla být rychlejší, protože ZX Printer se emuluje vč. mechanických vlastností. Jak emulovaný motor hýbe hrotem ("kreslítkem"), tak z tiskárny přicházejí pulzy z dorazového čidla (začátek mikrořádku). Prodlevy mezi pulzy musí trvat přibližně stejně dlouho jako z reálné tiskárny. Za dobu, než se vytiskne jeden řádek se pravděpodobně stihne vyslat víc znaků přes RS232 a ZX Spectrum stejně nic jiného než tisk / vysílání znaků dělat nemůže. Chceš-li tedy generovat data o chování instrukcí, máš zájem trávit méně času tiskem / vysíláním znaků a stojí za úvahu, jak to zefektivnit i jinak než jen zvyšovat rychlost emulace.

_________________
https://cygnus.speccy.cz ZX Spectrum 128k, Betadisk, DivIDE, ESXDOS


Nahoru
 Profil  
 
PříspěvekNapsal: 12.08.2024, 10:09 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3806
Bydliště: Bratislava
Has thanked: 375 times
Been thanked: 811 times
zxcygnus píše:
Spekuloval jsem, že by RS232 mohla být rychlejší, protože ZX Printer se emuluje vč. mechanických vlastností. Jak emulovaný motor hýbe hrotem ("kreslítkem"), tak z tiskárny přicházejí pulzy z dorazového čidla (začátek mikrořádku). Prodlevy mezi pulzy musí trvat přibližně stejně dlouho jako z reálné tiskárny. Za dobu, než se vytiskne jeden řádek se pravděpodobně stihne vyslat víc znaků přes RS232 a ZX Spectrum stejně nic jiného než tisk / vysílání znaků dělat nemůže.
Skusme to namiesto spekulacii realne vypocitat :)

Slucka pre tlac samotnych pixelov je na adrese #0F18. V idealnom pripade (dajme tomu ze tlaciaren ma nekonecne rychlu odozvu, co v emulatore nie je problem) sa stiha cela vykonat za 75T, co znamena ze za jednu sekundu sa stiha vytlacit cca 22 riadkov po 32 znakoch 8x8 na riadok (704 znakov alebo teda temer cela obrazovka).

V 128 basicu sa RS232 defaultne nastavuje na 9600 Bd, pri tejto rychlosti sa 704 bajtov stihne poslat za cca 1.2 sekundy. Tlac na ZX Printer teda moze byt potencialne rychlejsia, nez posielanie celych bajtov defaultnou rychlostou 9600 Bd.
Ale pokial by sme prenastavili rychlost seriaku na vyssiu, alebo pouzili vlastne rutinky (ja som bezne prevadzkoval poloduplex 57600 Bd ale je mozne spravit aj 115200 Bd) tak posielanie po RS232 bude samozrejme niekolkonasobne rychlejsie.

Btw. ja som si neskor prepojil ZX a PC paralelne - na strane ZX bola 8255 v rezime 2 a na strane PC som mal bidirectionalny LPT, takze som vedel prenasat cele bajty naraz obomi smermi. A rychlost prenosu bola ovela rychlejsia nez seriak na 115200 Bd :)
zxcygnus píše:
Chceš-li tedy generovat data o chování instrukcí, máš zájem trávit méně času tiskem / vysíláním znaků a stojí za úvahu, jak to zefektivnit i jinak než jen zvyšovat rychlost emulace.
V kazdom pripade ale aj ZX Printer s nekonecne rychlou odozvou a aj cele RS232 bude len blednut zavistou nad tym, ako rychlo je mozne data ukladat - ked si generovane bajty iba ukladame do nejakeho buffera v pameti (ulozenie jedneho bajtu je raz-dva) a ked sa buffer naplni, tak zavolame #4C6 na jeho ulozenie - co na realnu disketu ZX uklada rychlostou cca 50 kB/s, na IDE zariadenie este rychlejsie (teoreticky az 600 kB/s) a v emulatore to je hotove prakticky za nulovy cas.

A navyse ukladanie cez #4C6 je univerzalny sposob funkcny aj na realnom ZX (s akymkolvek modernym diskovym interface), nezavisly od toho ci je to ZX 16 alebo 48 alebo 128, a aj kazdy poriadny emulator to podporuje. Kdezto ZX Printer je dost raritna zalezitost (aj v emulatoroch) a RS232 vyzaduje bud ZX 128 s AY-3-8912 alebo nejaky specialny pridavny hardware (Interface Miki, SIF, alebo aspon 8255 s prevodnikmi urovni z/na +/-12V (zistil som ze v praxi postaci aj na +/-5V)).


Nahoru
 Profil  
 
PříspěvekNapsal: 12.08.2024, 11:47 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.05.2013, 14:56
Příspěvky: 2506
Has thanked: 320 times
Been thanked: 669 times
-> Busy: Jsi si jistý, že rychlostí 9600bps 8,N,1 (ale třeba i 8,N,2 se dvěma stop bity) bude přenos tak pomalý?
1/9600 = 0,000104166666667s -> jeden byte trvá řekněme 11 bitů (8 bitů data + start bit + 2x stop bit), to mi vychází na až 872 znaků/s pokud nebudu dělat nic jiného, než vysílat (příp. když stihnu činnost okolo zhruba za dobu trvání jednoho bitu...).

A ještě detail, když tisknu na ZX printer, tak i prázdný řádek trvá stejně dlouho jako zaplněný. S RS232 prázdné znaky nevysílám (resp. jen CR LF), takže i tady sériák může být rychlejší.

Zvýšením rychlosti na zcela bezproblémových 57600bps se dostávám na cca 5200 znaků/s, 115200bps lze taky použít, ale je tam větší chyba (opisuji z mého webu u ZX48k až 2% -> rozchází se časování bitů od ideálu), kód je delší (záleží-li na tom). Ale kratší čas na znak = víc času na testování instrukcí. Řízení toku dat bych neřešil, protože přenos je jednosměrný a očekávám, že PC to vždy spolehlivě stihne.

Ad propojení ZX s PC -> k sériáku ti stačí přidrátovat toto https://dratek.cz/arduino/947-usb-ttl-prevodnik.html a rázem můžeš připojit ZXS k USB (neřeším CTS a RTS k tomu by byl potřeba jiný skoro 3x dražší převodník https://dratek.cz/arduino/1158-eses-cp2 ... odnik.html za celých 89Kč). Snadné... velmi podobné této situaci https://www.youtube.com/watch?v=3e1QOAQLEZs

Ale s tím ukládáním na pásku má Busy pravdu. To by mohlo být ještě rychlejší, určitě pokud budeme ukládat na emulovanou pásku v emulátoru, ale i např. ESXDOS.

_________________
https://cygnus.speccy.cz ZX Spectrum 128k, Betadisk, DivIDE, ESXDOS


Nahoru
 Profil  
 
PříspěvekNapsal: 12.08.2024, 15:01 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3806
Bydliště: Bratislava
Has thanked: 375 times
Been thanked: 811 times
zxcygnus píše:
-> Busy: Jsi si jistý, že rychlostí 9600bps 8,N,1 (ale třeba i 8,N,2 se dvěma stop bity) bude přenos tak pomalý?
1/9600 = 0,000104166666667s -> jeden byte trvá řekněme 11 bitů (8 bitů data + start bit + 2x stop bit), to mi vychází na až 872 znaků/s pokud nebudu dělat nic jiného, než vysílat (příp. když stihnu činnost okolo zhruba za dobu trvání jednoho bitu...).
Ano, mas pravdu, 872 bajtov to je :thumbup:
Ten spominany koeficient 1.2 = cca 872/704 som mal spravne, len som ho omylom interpretoval naopak ;)


Nahoru
 Profil  
 
PříspěvekNapsal: 12.08.2024, 16:05 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1305
Has thanked: 102 times
Been thanked: 195 times
Budu se muset omluvit, protoze jsem to posilani informaci z EMULATORU ZX Spectra vzdal. Procital jsme si to, ale prvne me nedoslo, ze kdyz generuji promelivy kod (je to cele samomodifikujici), takze ma ruzny pocet taktu tak ho nemusim nejak slozite "zarovnavat" na takty, abych ho mohl posilat zkrz to AY.
Protoze to mohu pouzit jako ten tisk, prvne udelat kod a az pak pokazde otvirat?? to posilani dat, poslat jeden retezec s vysledkem a zase ho zavrit???
Prislo me snazsi protrpet ty pady a cekani. A naucit se naopak jak navazat data po spadlem fuse. Odmazat cast retezce, najit v jake hodnote smycky to spadlo. Editovat v asm jen tu hodnotu, aby se to generovalo s malym presahem od te hodnoty a pokracovat.
Nakonec jsem mel asi 7 asm testu. Kazdy mohl trvat cca 2 hodiny realneho casu. A navazovat jsem to musel asi cca 8x pokazde.
ZX vygeneroval asi 330 Mb dat.
Strasne moc pomohlo ze jsem presel na awk misto delani vse v bashi.
Pomoci awku to slo nejak hromadne zpracovat, najit nejlepsi vysledky.
...a tada! Je to HOTOVE!
Ziskal jsem soubor flag_all.txt ktery ma polozky oddelene ;
Kód:
hledana_hodnota;takty;bajty;pseudo_kod_oddeleny_pomoci_znaku_/

Soubor vypada nejak takto:
Kód:
0x0000;15;4;xor_a/cp_$FF/rrca
0x0001;12;3;xor_a/inc_a/rra
0x0002;21;6;ld_a_$05/sub_$04/ld_a_$00
0x0003;11;3;xor_a/cp_$D0
0x0004;18;5;ld_A_$03/or_a/ld_a_$00
0x0005;18;5;ld_a_$80/sub_$7F/rra
0x0006;21;6;ld_a_$85/sub_$75/ld_a_$00
0x0007;22;6;xor_a/sub_$97/daa/ld_a_$00
0x0008;18;5;xor_a/add_$08/ld_a_$00
0x0009;21;6;ld_a_$78/add_$90/ld_a_$00
0x000A;21;6;ld_a_$7F/sub_$77/ld_a_$00
...

Z toho jsem vytvoril jeste soubor macro_ld_af.asm
Kód:
# macro_ld_af
awk 'BEGIN{FS=OFS=";"} {gsub(/\//,"\n   "); gsub(/add_\$/,"add a,$"); gsub(/ld_hl_/,"ld hl,"); gsub(/ld_[aA]_/,"ld a,"); gsub(/adc_a/,"adc a,a");  gsub(/_/," "); printf(" macro ld_af_%s\n   %s\t;%d:%d\tAF=%s\n endm\n",$1,$4,$2,$3,$1)}' flag_all.txt > macro_ld_af.asm

Ten lze pomoci inline pripojit do vaseho asm souboru a je to kompatibilni jak s pasmem tak s sjasmplus, protoze to nema parametr.
POZOR! Hex cisla jsou VELKYMI PISMENY!
Jinak vam misto rozbaleni makra udela label (v pasmu), protoze to nema parametr.
Soubor vypada nejak takto:
Kód:
 macro ld_af_0x0000
   xor a
   cp $FF
   rrca   ;15:4   AF=0x0000
 endm
 macro ld_af_0x0001
   xor a
   inc a
   rra   ;12:3   AF=0x0001
 endm
 macro ld_af_0x0002
   ld a,$05
   sub $04
   ld a,$00   ;21:6   AF=0x0002
 endm
 macro ld_af_0x0003
   xor a
   cp $D0   ;11:3   AF=0x0003
 endm
 macro ld_af_0x0004
   ld a,$03
   or a
   ld a,$00   ;18:5   AF=0x0004
 endm
 macro ld_af_0x0005
   ld a,$80
   sub $7F
   rra   ;18:5   AF=0x0005
 endm
 macro ld_af_0x0006
   ld a,$85
   sub $75
   ld a,$00   ;21:6   AF=0x0006
 endm
 macro ld_af_0x0007
   xor a
   sub $97
   daa
   ld a,$00   ;22:6   AF=0x0007
 endm
 macro ld_af_0x0008
   xor a
   add a,$08
   ld a,$00   ;18:5   AF=0x0008
 endm
...

K tomu jeste poznamka, ze pro sjasmplus je to realne nepouzitelne protoze zatimco pasmo 64k maker zvladne mrknutim oka tak sjasmplus se plouzi jako snek...
Kód:
dworkin@dw-A15:~/Programovani/ZX/Forth/set_SP$ sjasmplus test_macro_8000.asm
SjASMPlus Z80 Cross-Assembler v1.20.1 (https://github.com/z00m128/sjasmplus)
Pass 1 complete (0 errors)
Pass 2 complete (0 errors)
Pass 3 complete
Errors: 0, warnings: 0, compiled: 354250 lines, work time: 320.786 seconds

Otestoval jsem vsech 64k hodnot to ve fuse (tim jsem jen overil ze je to fuse kompatibilni a ze jsem neudelal chybu)
Pokud to chcete testovat jinde tak jsem vytvoril 16 tapek, kazda testuje rozsah 4kb. Jinak se me to nevlezlo do pameti.
Je to druhe 7z. "test_macro_set_SP.7z"
Ale soucasti toho zabaleneho souboru s makrem je i skript co umi vytvorit zdrojaky pro testovani.

To je asi tak vse doufam.
Reseni asi neni uplne nejlepsi pro vsechny hodnoty, protoze jsem netestoval vsechny instrukce a jejich kombinace.
Ale je dost dobre.

A jeste jsem nakonec zvolil rozhodovani pro varianty 4*Bajty+Takty.
Tim jsem vyhodil nejake 7 bajtove reseni o par taktu rychlejsi jak PUSH POP reseni, ale o 2 bajty delsi.
Chtel jsem aby to bylo max. 6 bajtu.

ENJOY!

PS: Je to 7z protoze je to vsechno hrozne velke.


Přílohy:
tabulka.txt.7z [89.25 KiB]
24 krát
test_macro_set_SP.7z [50.02 KiB]
22 krát
macro_ld_af_num.7z [109.47 KiB]
23 krát

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


Naposledy upravil _dworkin dne 12.08.2024, 17:13, celkově upraveno 1
Nahoru
 Profil  
 
PříspěvekNapsal: 12.08.2024, 17:13 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3806
Bydliště: Bratislava
Has thanked: 375 times
Been thanked: 811 times
No ty brdo, skvela praca ! Pozeram ze az v 38103 pripadoch sa ti podarilo najst nejake sikovnejsie riesenie a len zvysnych 27433 pripadov je odkazanych na ld hl,.. : push hl : pop af. Ale tieto zvysne pripady sa potencialne daju krasne dalej optimalizovat ak danu hodnotu, alebo nejaku jej cast niekde uz mas.
_dworkin píše:
Budu se muset omluvit, protoze jsem to posilani informaci z EMULATORU ZX Spectra vzdal. Procital jsme si to, ale prvne me nedoslo, ze kdyz generuji promnelivy kod (je to cele samomodifikujici), takze ma ruzny pocet taktu tak ho nemusim nejak slozite "zarovnavat" na takty, abych ho mohl posilat zkrz to AY.
Protoze to mohu pouzit jako ten tisk, prvne udelat kod a az pak pokazde otvirat?? to posilani dat, poslat jeden retezec s vysledkem a zase ho zavrit???
Nic take netreba. Pokial vyuzivas seriovy prenos tak netreba nic otvarat a ani po retazci zatvarat, staci len proste rovno poslat bajt. A potm dalsi. A dalsi a dalsi.... Kazdy bajt sa zacina start-bitom, ktory sluzi ako synchronizacia a na ktory sa druha strana chyti a vie ze teraz prichadza bajt ktory treba zaznamenat.
_dworkin píše:
hledana_hodnota;takty;bajty;pseudo_kod_oddeleny_pomoci_znaku_/
Instrukcie navrhujem oddelovat nie lomitkom, ale dvojbodkou. Je to uz zvyk nielen z basicu, ale aj z niektorych asemblerov. A hlavne je to ovela univerzalnejsie riesenie nez lomitko, ktore moze byt symbolom pre delenie.


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ů: 31 ]  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: Antony/DTA 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