Chování Unicard je možné ovlivnit pomocí textových konfiguračních souborů, umístěných na SD kartě v adresáři \unicard\. Konfigurační soubory můžeme rozdělit do čtyř skupin:
Pokud existuje a obsahuje cestu a název existujícího souboru s obrazem diskety, je tento obraz vložený do emulované disketové mechaniky, v opačném případě se mechanika jeví jako prázdná. Rozsah portů emulovaných disketových mechanik fd<0..3>.cfg je 0xD8-0xDF, bootovací je mechanika fd0.
Pomocí prázdného souboru fd0disabled.cfg můžeme zakázat emulovanou mechaniku fd0([A]:), přestože existuje soubor fd0.cfg se správnou cestou k souboru s obrazem diskety.
Pokud existuje a obsahuje cestu a název existujícího souboru s obrazem Quick disku, je tento obraz vložený do emulované QD mechaniky. V případě neexistence souboru se QD mechanika neemuluje. Současná verze firmware již emuluje i zápis.
Quick disk můžeme používat i v BASICu:
Použité porty:
RW 0x74/0xF4 - SIO channel A data RW 0x75/0xF5 - SIO channel B data RW 0x76/0xF6 - SIO channel A control RW 0x77/0xF7 - SIO channel B control
Pro Sharp MZ-1500 jsou změněná čísla portů pro práci s Quick diskem z původních hodnot platících pro Sharp MZ-700 a Sharp MZ-800 0xF4-0xF7 na nové hodnoty 0x74-0x77. Pro práci s emulovaným Quick diskem na Sharp MZ-1500 je třeba mít pro programy využívající QD rutiny z ROM upravenou ROM a pro práci s BASICem upravený BASIC. V případě odpojeného QD SIO bude k dispozici firmware se standardními čísly portů i pro Sharp MZ-1500.
Emulovaná QD mechanika umožňuje i spouštění vícediskových programů a her. Pokud má soubor připojeného obrazu Quick disku jméno filename_A.mzq nebo filename-1.mzq (na předposledním místě názvu souboru je znak '_' nebo '-'), pak Unicard po ukončení čtení z emulované QD mechaniky a následném vypnutí motoru inkrementuje po 3 sekundách poslední znak jména souboru ('A'→'B','B'→'C','1'→'2','2'→'3'…) a pokud obraz Quick disku s tímto jménem existuje, připojí ho místo původního obrazu Quick disku. Tímto způsobem lze řetězit i větší počet obrazů. Pokud již další obraz Quick disku s vyhovujícím jménem souboru neexistuje, použije se znovu obraz uvedený v souboru qd.cfg. Po výzvě k výměně Quick disku v emulované QD mechanice je tedy nutné nejméně 3 sekundy počkat, aby Unicard provedla připojení dalšího obrazu emulovaného Quick disku a pak teprve potvrdit výměnu Quick disku.
Pokud existuje a obsahuje cestu a název existujícího souboru s obrazem RAM (SROM/SRAM) disku, je emulace zapnutá. Unicard podporuje emulaci na souborech těchto velikostí: 64k,128k,256k,512k,1M,2M,4M,8M,16M. Pokud je obraz souboru pro emulaci menší než 64kb, Unicard emulaci vypne.
RAM disk můžeme používat i v BASICu:
Použité porty pro jednotlivé režimy emulace:
Režim RD: ========= -W 0xE9 - set bank (0x00-0xFF) for MZ-700 or MZ-800 (not for MZ-1500!) RW 0xEA - I/O data, addr++ -W 0xEB - set addr, Data(D0-7) = LoBYTE, Addr(8-15) = HiBYTE (on Unicard LoBYTE only) R- 0xF8 - reset addr and page -W 0xF8 - set HiBYTE addr Režim SROM/SRAM: ================ R- 0xF8/0xA8 - reset addr R- 0xF9/0xA9 - read data, addr++ -W 0xFA - write data, addr++
Pomocí souboru o velikosti 640kB emuluje PIO-3034 EMM 640kB disk, který podporuje HuBASIC pro MZ-700 (jede i na MZ-800 a MZ-1500), PIO EMM používá porty 0x00-0x03, Unicard podporuje maximálně jednu EMM mechaniku.
EMM disk můžeme používat i v BASICu:
Použité porty:
RW 0x00 - read/set LowBYTE addr RW 0x01 - read/set MidBYTE addr RW 0x02 - read/set HiBYTE addr RW 0x03 - read/write data, addr++
Obsahuje v textové podobě nastavení parametrů sloužících ke konfiguraci sítě pro zpřístupnění HTTP a FTP serveru, v závorce jsou uvedené přednastavené hodnoty:
HWADDR
IPADDR
NETMASK
GATEWAY
FTP_NAME
FTP_PASSWORD
= <addr>
= <addr>
= <addr>
= <addr>
= <user_name>
= <password>
(hash z UniqueID procesoru v rozsahu 00:1C:EE:XX:XX:XX)
(192.168.1.10)
(255.255.255.0)
(192.168.1.20)
přihlašovací jméno
přihlašovací heslo
Parametry sítě můžeme vypsat přes HTTP Server rozhraní nebo pomocí rozhraní USARTShell programem UniUSARTShell. DHCP není podporováno.
Řádky bez významu mohou začínat znakem #, slouží tak jako komentáře nebo poznámky.
Příkazy FTP_NAME a FTP_PASSWORD lze použít až od verze firmware 0.22
Nastavení souboru network.cfg
# Nastaveni pro MZ-800 IPADDR=192.168.1.111 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 # FTP_NAME=SHARP FTP_PASSWORD=MZ-800
Pokud existuje v adresáři /unicard/ushelldisabled.cfg, tak je USB k dispozici pro Sharpa jako emulované SIO kanál B porty 0xB0-0xB3, v opačném případě běží komunikační rozhraní USARTShell.
RW 0xB0 - Z80SIO channel A data RW 0xB1 - Z80SIO channel A control RW 0xB2 - Z80SIO channel B data RW 0xB3 - Z80SIO channel B control
Konfigurační soubor obsahující cestu k MZF, který se má spustit zavaděčem MZFLoader - většinou obsahuje cestu a název souboru s Unicard Managerem. Zavaděč MZFloader je obvykle spouštěn z emulovaného SRAM disku nebo Quick disku. Unicard po resetu nastaví počítači dočasně vlastní SRAM disk s MZFloaderem a ten je natažen a spuštěn. Po zavedení MZFloader prohlédne soubor mzfloader.cfg a spustí program v něm uvedený (obvykle Unicard manager). Pak teprve nastaví RAM (SRAM) disk podle obsahu příslušného konfiguračního souboru. Tato funkcionalita poměrně dobře funguje na MZ-1500, ale na MZ-800 není zcela spolehlivá. Někdy pomůže vstoupit do monitoru klávesou M (nebo M+Reset) a MZFloader ze SRAM disku spustit přes příkaz EB. Pokud nepotřebujete aktivně využívat RAM disk, můžete do něj přímo vložit mzfloader.ram, což funguje lépe, ale je potřeba si dát pozor na přepsání RAM disku například při spuštění BASICu nebo CP/M. Pokud nepotřebujete aktivně využívat Quick disk, je ideální startovat MZFloader z něj - do zařízení QD: vložte mzfloader.mzq. Spouštění zavaděče MZFloader z QD: je spolehlivé na všech platformách. Pokud potřebujete jen spouště MZF programy a hry, je to prozatím doporučované řešení. Současně, pokud máte vloženou disketu v některé z virtuálních floppy, použijte Q+Reset pro přímé načtení QD místo spuštění FD, které má jinak vyšší prioritu.
Nastavení konfiguračního souboru pro Sharp MZ-800 a UniManager mgr800.mzf
/unicard/mgr800.mzf
Nastavení konfiguračního souboru pro Sharp MZ-1500 a UniManager mgr1500.mzf
/unicard/mgr1500.mzf
Přítomnost tohoto souboru zapne emulaci PS/2 myši na portu 0x71. Normálně programy s podporou myši používají druhý JoyPort na portu 0xF1. Protože ho není možné vypnout a emulace Unicard na stejném portu by s ním kolidovala, je emulace Unicard přesunuta na port 0x71. Pokud chceme tuto emulaci využít, musíme mít v programech nebo hrách opravený původní port na emulovaný.
Unicard emuluje i periferie, které se nekonfigurují ani neaktivují obsahem nebo přítomností CFG souboru. Jsou to periferie, jejichž emulace se aktivuje přítomností binárních obrazů ROM v adresáři \unicard\
Pokud do adresáře \unicard\ nakopírujeme soubor mz1r23.rom (mz1r23b.rom) obsahující binární obraz ROM KANJI karty MZ-1R23(mz1r23b.rom), bude Unicard tuto kartu emulovat na portech 0xB8-0xB9.
Pokud do adresáře \unicard\ nakopírujeme soubor mz1r24.rom obsahující binární obraz ROM slovníkové karty MZ-1R24, bude Unicard tuto kartu stejně jako v případě MZ-1R23 emulovat na portech 0xB8-0xB9.
K 08/2018 emuluje Unicard 3 typy matematických koprocesorů. AM9511(I8231,CI8231..), AM9512(I8232,CI8232..) a koprocesor pro výpočty v SHARP BASIC číselné reprezentaci interně nazvaný SHARP ALU. ALU při zadání příkazu nahodí bit BUSY a po dokončení ho vrátí na nulu. Rutina, která čte data tak musí počkat, až ALU není BUSY. Není třeba blokovat wait ani nic podobného. Komunikace i podporované matematické funkce a operace jsou pro všechny typy koprocesorů podobné.
AM9511, AM9512, SHARP ALU
AM9511
* 0x00 NOP - No Operation * 32-Bit Floating Point Instructions * 0x01 SQRT - Square Root of A * 0x02 SIN - Sine of A (radians) * 0x03 COS - Cosine of A (radians) * 0x04 TAN - Tangent of A (radians) * 0x05 ASIN - Inverse Sine of A * 0x06 ACOS - Inverse Cosine of A * 0x07 ATAN - Inverse Tangent of A * 0x08 LOG - Common Logarithm (base 10) of A * 0x09 LN - Natural Logarithm of A * 0x0a EXP - eA Function * 0x0b PWR - B^A Power Function * 0x10 FADD - Add A and B * 0x11 FSUB - Substract A from B * 0x12 FMUL - Multiply A and B * 0x13 FDIV - Divide B by A * 0x15 CHSF - Sign Change of A * 0x17 PTOF, PTOD - Stack Push * 0x18 POPF, POPD - Stack Pop * 0x19 XCHF, XCHD - Exchange A and B * 0x1a PUPI - Push PI onto Stack * 0x1C FLTD - 32-Bit Integer to Floating Point Conversion * 0x1D FLTS - 16-Bit Integer to Floating Point Conversion * 0x1E FIXD - Floating Point to 32-Bit Integer Conversion * 0x1F FIXS - Floating Point to 16-Bit Integer Conversion * 32-Bit Integer Instructions * 0x2C DADD - 32-bit fixed point add * 0x2D DSUB - 32-bit fixed point substract * 0x2E DMUL - 32-bit fixed point multiply, lower * 0x2F DDIV - 32-bit fixed point divide * 0x34 CHSD - 32-bit fixed-point sign change * 0x36 DMUU - 32-bit fixed point multiply, upper * 16-Bit Integer Instructions * 0x6C SADD - Add Au and Al * 0x6D SSUB - Substract Au from Al * 0x6E SMUL - Multiply Al and Au (R=lower 32-bits) * 0x6F SDIV - Divide Au and Al * 0x74 CHSS - 16-bit fixed-point sign change * 0x76 SMMU - Multiply Al and Au (R=upper 32-bits) * 0x77 PTOS - Stack Push * 0x78 POPS - Stack Pop * 0x79 XCHS - Exchange A and B * 0x7f - Push ALU1 signature '9511' onto stack
AM9512
* 0x00 CLR - CLR status * 32-Bit Floating Point Instructions * 0x01 SADD - Add A and B * 0x02 SSUB - Substract A from B * 0x03 SMUL - Multiply A by B * 0x04 SDIV - Divide B by A. if exponent = 0 then R = B * 0x05 CHSS - Change sign of A * 0x06 PTOS - Push stack * 0x07 POPS - Pop stack * 0x08 XCHS - Exchange * 64-Bit Double Floating Point Instructions * 0x29 DADD - Add A and B * 0x2A DSUB - Substract A from B * 0x2B DMUL - Multiply A by B * 0x2C DDIV - Divide B by A, If A = 0, then R = B * 0x2D CHSD - Change sign of A * 0x2E PTOD - Push stack * 0x2F POPD - Pop stack * 0x7f - Push ALU2 signature '8232' onto stack
SHARP ALU - BASIC 5-Byte číselný formát
* 0x00 NOP - No Operation * 0x01 SADD - Add A and B * 0x02 SSUB - Substract A from B * 0x03 SMUL - Multiply A by B * 0x04 SDIV - Divide B by A. if exponent = 0 then R = B * 0x05 CHSS - Change sign of A * 0x06 PTOS - Push stack * 0x07 POPS - Pop stack * 0x08 XCHS - Exchange * 0x10 SQRT - Square Root of A * 0x12 SIN - Sine of A (radians) * 0x13 COS - Cosine of A (radians) * 0x14 TAN - Tangent of A (radians) * 0x15 ASIN - Inverse Sine of A * 0x16 ACOS - Inverse Cosine of A * 0x17 ATAN - Inverse Tangent of A * 0x18 LOG - Common Logarithm (base 10) of A * 0x19 LN - Natural Logarithm of A * 0x1a EXP - eA Function * 0x1b PWR - B^A Power Function * 0x2a PUPI - Push PI onto Stack * 0x7f - Push ALU3 signature 'M801' onto stack
BASIC je upravený tak, aby přes SHARP ALU počítal tyto funkce:
SQR EXP LOG LN SIN (COS) TAN ATN x ^ y x * y x / y x + y x - y
Unicard odchytává veškerou komunikaci s GDG a videopamětí a emuluje grafický výstup, který posílá na VGA v plném rozlišení.
Unicard obsahuje hodiny reálného času udržované baterií. Pokud hodiny nechcete nebo nepotřebujete, nemusíte baterii instalovat. Hodiny jsou využívány souborovým systémem Unicard při vytváření nebo modifikaci souborů a jsou ovladatelné přes MZFrepo. Toho pak můžou využívat některé aplikace. Například UNIUTIL umí vyčíst čas z Unicard a nastavit ho do CP/M. To je ideální dělat automaticky při startu CP/M.
Emulace zvuku na audio výstupu, mono výstup je rozbočený na stereo. Zatím je emulován pouze výstup PSG, nikoli i8253, výstup je pouze linkový, neutáhne sluchátka. Jumpery SV2 přepínají zapojení dvou pinů čtyřpólového jacku na Samsung × Apple standard - zem je buď nejblíže kabelu nebo druhá nejbližší a vstup ten druhý, pro třípólový konektor by to mělo být jedno, zem je přes oba.