; ; Copyright (c) 2009 by Michal Hucik ; ; This program is free software; you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation; either version 2 of the License, or ; (at your option) any later version. ; ; MZ-800 Unicard is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with MZ-800 Unicard; if not, write to the Free Software ; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ; ; Ver.: 1.0 ; ; Unicard Example4: ; Zmena adresare. Vypsani CWD. ; ; ; porty CMDPORT equ 0x50 DATAPORT equ 0x51 ; prikazy cmdRESET equ 0x00 cmdSHASCII equ 0x02 cmdCHDIR equ 0x21 cmdGETCWD equ 0x22 ; kde bude nas program prg_begin: equ 0x2000 org prg_begin - 0x80 ; MZF header db 0x01 db "UNICARD EXAMPLE4",0x0d dw prg_end - prg_begin dw prg_start dw prg_begin db " " db " " db " " db " " db " " db " " db " " prg_start: call 0xEA59 ; smazat obrazovku ; ; Zavolanim resetu provedeme stejnou proceduru, ; ktera se vola pri startu STM32 v unikarte. ; ; Pozaviraji se vsechny soubory. Ukonci vsechny vstupy a vystupy. ; CDW se nastavi na korenovy adresar "/". ; Vypne se konverze SharpASCII. ; ld a, cmdRESET out (CMDPORT), a ; ; Nyni chceme komunikovat v ASCII - ne v SharpASCII. ; Avsak protoze jsme udelali reset, tak to neni potreba zvlast nastavovat. ld a, cmdCHDIR out (CMDPORT), a ; Nyni pokud by jsme otestovali status. Tak 0. bit musi byt '0', ; protoze unikarta ocekava svup vstupnich parametru. ; V tomto stavu zustane do te doby, nez vlozime vsechny parametry, ; nebo dokud nevlozime dalsi prikaz, kterym zrusime vykonavani ; CHDIR. ld hl, new_dir_name ; text v ASCII, ukonceny znakem 0x00 ; (lze pouzit libovolny znak < 0x20) call SendTxtParam ; odeslat string in a, (CMDPORT) ; Pro jistotu overime 1. bajt statusu, and 0x80 ; zda se nam povedl CHDIR. jp nz, ERROR_CHDIR ; Neco se nepovedlo, jdeme blikat borderem. ; V pripade chyby muzeme ve 2. bajtu ; precist kod prikazu, ktery chybu ; zpusobil (0x21). Ve 3. bajtu je ; unicard error code (prozatim ; nepodporovan). Ve 4. bajtu je ; navratovy kod z posledni FatFS ; operace, ktery nam napr. sdeli, ze ; adresar neexistuje, atp... ; Uspesne jsme zmenili adresar, jdeme precist CWD ; Chceme pouzivat vypisovaci rutiny v ROM, takze si prepneme ; komunikaci do SharpASCII ld a, cmdSHASCII out (CMDPORT), a ; Posleme prikaz. ld a, cmdGETCWD out (CMDPORT), a ld hl, data ; Sem si ulozime CWD ld c, DATAPORT in a, (CMDPORT) ; 1. bajt statusu nas tentokrat moc ; nezajima, ale samozrejme lze vzdy ; zkontrolovat, zda neni ERROR (7.bit), nebo ; zda je unikarta READY a zda pro nas ma ; data. in a, (CMDPORT) ; 2. bajt statusu obsahuje kod posledniho ; prikazu - v tomto pripade 0x22 in a, (CMDPORT) ; 3. bajt rika pocet bajtu ve vstupne ; vystupnim bufferu, ktery je vyhrazen pro prikazy. ; Pokud je zde 0x00, tak nema smysl se ; pokouset cist z dataportu (tedy co se tyka ; prikazu, pri otevrenem souboru, by to ; znamenalo, ze posilame/cteme ze souboru). ld b, a ; precti avizovany pocet bajtu inir ld de, data ; CWD vypsat na obrazovku call 0x0015 ; zastavit, stat, raz, dva... di halt ; Odeslat data z HL na DATA port. ; Budeme posilat dokud nenarazime na znak 0x00, ktery posleme taky. ; SendTxtParam: ld c, DATAPORT ld e, 0x00 next_SendTxtParam: ld a, (hl) inc hl out (c),a cp e ret z jr next_SendTxtParam ; blikanim borderu oznamime ERROR ERROR_CHDIR: ld bc, 0x06cf next_ERROR_CHDIR: out (c), a inc a jr next_ERROR_CHDIR new_dir_name: db "/unicard", 0x00 ; novy adresar pro CHDIR, nepouzivat "/" na konci ! data: prg_end: