<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: <br> ;;;;;;;;;;;;;;;;;;;;;;; precteme par byte z filata<br> <br> ;ld de, txt1<br> ;call 0x0015 ; zobrazit text z DE<br> <br> ; otevreme soubor<br> ld a, cmdOPEN<br> out (CMDPORT), a<br><br> ; Exstujici soubor pro cteni<br> ld a, FA_OPEN_EXISTING + FA_READ<br> out (DATAPORT), a<br><br> ; Druhym parametrem je jmeno souboru<br> ld e, 0x00 ; konec jmena soubor<br> ld hl, filename<br> ld c, DATAPORT<br>next_char:<br> outi<br> ld a, (hl)<br> cp e<br> jr nz, next_char<br> <br> ; Podarilo se nam soubor otevrit?<br> ;<br> ; (Pokud je vse OK, tak ted mame ve statusu nastaveny<br> ; bity READ_FILE, WRITE_FILE a EOF.)<br> ;<br> in a,(CMDPORT)<br> bit 0, a ; je READY ?<br> jr nz, ERROR_PARAM ; NENI: tohle muze nastat jen pokud<br> ; jsme zapomneli ukoncit vkladani <br> ; textoveho parametru znakem mensim jak 0x20<br> <br> and 0x80<br> jr nz,ERROR_OPEN ; ne, doslo k chybe pri OPEN<br><br> ; pripravili jsme si v unikarte MZF, tak nacteme jeho hlavicku<br> ld bc, 0x8051 ; cteme 128 bajt z DATA_PORTu<br> ld hl, 0x10f0 ; a ukladame to na 0x10f0<br> inir<br><br> ; podle udaju z hlavicky si nacteme z DATA_PORTu telo na adresu 0x1200<br> ld hl, 0x1200<br> ld de, (0x10f0 + 0x12 )<br>rdbyte: ini<br> dec de<br> ld a,d<br> or e<br> jr nz, rdbyte<br> ; zavrit soubor<br> ld a,cmdCLOSE<br> out (CMDPORT),a<br><br> out (0xe0),A ; zrusi spodni ROM a primapuje RAM<br> jp 0x0000 ; skoci do RAMky, kde uz je pripravena BW1<br> <br><br>ERROR_PARAM:<br> ld de, msg_err_param<br> call 0x0015 ; zobrazit text z HL<br> di<br> halt<br><br>ERROR_OPEN:<br> ld de, msg_err_open<br> jr print_errcode<br><br>;ERROR_SEEK:<br>; ld de, msg_err_seek<br><br>print_errcode:<br> call 0x0015 ; zobrazit text z HL<br> in a,(CMDPORT) ; kod posledniho prikazu<br> in a,(CMDPORT) ; unicard err code <br> in a,(CMDPORT) ; FatFS err code<br><br> call 0x03c3 ; zobrazit obsah A<br> di<br> halt<br> <br>msg_err_param:<br> db "ERROR: BP!",0x0d<br>msg_err_open:<br> db "OPEN ERROR: ",0x0d<br>;msg_err_seek:<br>; db "SEEK - ERROR CODE: ",0x0d<br><br> <br>txt1: db "OPENING " ; doplni se filename automagicky<br>filename: db "BW.DAT",0x0d, 0x00<br>txt2: db " OK",0x0d<br><br><br><br></body></html>