<html><body>Ahoj,<br><br>jak jsem psal minulý týden, tak se mi nepovedlo upravit BW1.MZF tak, abych mohl hru Business World nahrát z unikarty. Tak to už neplatí, kód, který je přiložen níže, se dá použít pro nahrávání vícesouborových her - ale pouze těch, co si otevírají v emulátoru CMT PATCH. Tj.pokud v loaderu není nahrávání obrázků nebo podobná zvěrstva.<br><br>U hry BW je ještě taková specialitka, že se nesmí sáhnout na zásobník - proto jsou zakomentované všechny CALLy.<br><br>Nevím popravdě, jak to funguje na Vašich novějších unikartách, já používám ten starší model můj a kód Michalův.<br><br>Vašek<br><br>mainprg:&nbsp;&nbsp; <br>&nbsp; ;;;;;;;;;;;;;;;;;;;;;;; precteme par byte z filata<br>&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; ;ld de, txt1<br>&nbsp;&nbsp;&nbsp; ;call 0x0015&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; zobrazit text z DE<br>&nbsp;<br>&nbsp;&nbsp;&nbsp; ; otevreme soubor<br>&nbsp;&nbsp;&nbsp; ld a, cmdOPEN<br>&nbsp;&nbsp;&nbsp; out (CMDPORT), a<br><br>&nbsp;&nbsp;&nbsp; ; Exstujici soubor pro cteni<br>&nbsp;&nbsp;&nbsp; ld a, FA_OPEN_EXISTING + FA_READ<br>&nbsp;&nbsp;&nbsp; out (DATAPORT), a<br><br>&nbsp;&nbsp;&nbsp; ; Druhym parametrem je jmeno souboru<br>&nbsp;&nbsp; ld&nbsp;&nbsp;&nbsp; e, 0x00 ; konec jmena soubor<br>&nbsp;&nbsp;&nbsp; ld hl, filename<br>&nbsp;&nbsp;&nbsp; ld&nbsp;&nbsp;&nbsp; c, DATAPORT<br>next_char:<br>&nbsp;&nbsp;&nbsp; outi<br>&nbsp;&nbsp;&nbsp; ld&nbsp;&nbsp;&nbsp; a, (hl)<br>&nbsp;&nbsp;&nbsp; cp&nbsp;&nbsp;&nbsp; e<br>&nbsp;&nbsp;&nbsp; jr&nbsp;&nbsp;&nbsp; nz, next_char<br>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; ; Podarilo se nam soubor otevrit?<br>&nbsp;&nbsp;&nbsp; ;<br>&nbsp;&nbsp;&nbsp; ; (Pokud je vse OK, tak ted mame ve statusu nastaveny<br>&nbsp;&nbsp;&nbsp; ; bity READ_FILE, WRITE_FILE a EOF.)<br>&nbsp;&nbsp;&nbsp; ;<br>&nbsp;&nbsp;&nbsp; in a,(CMDPORT)<br>&nbsp;&nbsp;&nbsp; bit 0, a&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; je READY ?<br>&nbsp;&nbsp;&nbsp; jr nz, ERROR_PARAM&nbsp;&nbsp;&nbsp; ; NENI: tohle muze nastat jen pokud<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; jsme zapomneli ukoncit vkladani <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; textoveho parametru znakem mensim jak 0x20<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; and 0x80<br>&nbsp;&nbsp;&nbsp; jr nz,ERROR_OPEN&nbsp;&nbsp;&nbsp; ; ne, doslo k chybe pri OPEN<br><br>&nbsp;&nbsp; ; pripravili jsme si v unikarte MZF, tak nacteme jeho hlavicku<br>&nbsp;&nbsp; ld bc, 0x8051&nbsp;&nbsp;&nbsp; ; cteme 128 bajt z DATA_PORTu<br>&nbsp;&nbsp; ld hl, 0x10f0&nbsp;&nbsp;&nbsp; ; a ukladame to na 0x10f0<br>&nbsp;&nbsp; inir<br><br>&nbsp;&nbsp; ; podle udaju z hlavicky si nacteme z DATA_PORTu telo na adresu 0x1200<br>&nbsp;&nbsp; ld hl, 0x1200<br>&nbsp;&nbsp; ld de, (0x10f0 + 0x12 )<br>rdbyte:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ini<br>&nbsp;&nbsp; dec de<br>&nbsp;&nbsp; ld a,d<br>&nbsp;&nbsp; or e<br>&nbsp;&nbsp; jr nz, rdbyte<br>&nbsp;&nbsp; ; zavrit soubor<br>&nbsp;&nbsp; ld a,cmdCLOSE<br>&nbsp;&nbsp; out (CMDPORT),a<br><br>&nbsp;&nbsp; out&nbsp;&nbsp; (0xe0),A&nbsp; ; zrusi spodni ROM a primapuje RAM<br>&nbsp;&nbsp; jp&nbsp;&nbsp;&nbsp; 0x0000 ; skoci do RAMky, kde uz je pripravena BW1<br>&nbsp;&nbsp; <br><br>ERROR_PARAM:<br>&nbsp;&nbsp;&nbsp; ld de, msg_err_param<br>&nbsp;&nbsp;&nbsp; call 0x0015&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; zobrazit text z HL<br>&nbsp;&nbsp;&nbsp; di<br>&nbsp;&nbsp;&nbsp; halt<br><br>ERROR_OPEN:<br>&nbsp;&nbsp;&nbsp; ld de, msg_err_open<br>&nbsp;&nbsp;&nbsp; jr print_errcode<br><br>;ERROR_SEEK:<br>;&nbsp;&nbsp;&nbsp; ld de, msg_err_seek<br><br>print_errcode:<br>&nbsp;&nbsp;&nbsp; call 0x0015&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; zobrazit text z HL<br>&nbsp;&nbsp;&nbsp; in a,(CMDPORT)&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; kod posledniho prikazu<br>&nbsp;&nbsp;&nbsp; in a,(CMDPORT)&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; unicard err code <br>&nbsp;&nbsp;&nbsp; in a,(CMDPORT)&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; FatFS err code<br><br>&nbsp;&nbsp;&nbsp; call 0x03c3&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; zobrazit obsah A<br>&nbsp;&nbsp;&nbsp; di<br>&nbsp;&nbsp;&nbsp; halt<br>&nbsp;&nbsp;&nbsp; <br>msg_err_param:<br>&nbsp;&nbsp;&nbsp; db&nbsp;&nbsp;&nbsp; "ERROR: BP!",0x0d<br>msg_err_open:<br>&nbsp;&nbsp;&nbsp; db&nbsp;&nbsp;&nbsp; "OPEN ERROR: ",0x0d<br>;msg_err_seek:<br>;&nbsp;&nbsp;&nbsp; db&nbsp;&nbsp;&nbsp; "SEEK - ERROR CODE: ",0x0d<br><br>&nbsp;&nbsp; <br>txt1: db "OPENING "&nbsp; ; doplni se filename automagicky<br>filename:&nbsp; db&nbsp;&nbsp;&nbsp; "BW.DAT",0x0d, 0x00<br>txt2: db " OK",0x0d<br><br><br><br></body></html>