Ahoj,
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.
U hry BW je ještě taková specialitka, že se nesmí sáhnout na zásobník - proto jsou zakomentované všechny CALLy.
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.
Vašek
mainprg:
;;;;;;;;;;;;;;;;;;;;;;; precteme par byte z filata
;ld de, txt1
;call 0x0015 ; zobrazit text z DE
; otevreme soubor
ld a, cmdOPEN
out (CMDPORT), a
; Exstujici soubor pro cteni
ld a, FA_OPEN_EXISTING + FA_READ
out (DATAPORT), a
; Druhym parametrem je jmeno souboru
ld e, 0x00 ; konec jmena soubor
ld hl, filename
ld c, DATAPORT
next_char:
outi
ld a, (hl)
cp e
jr nz, next_char
; Podarilo se nam soubor otevrit?
;
; (Pokud je vse OK, tak ted mame ve statusu nastaveny
; bity READ_FILE, WRITE_FILE a EOF.)
;
in a,(CMDPORT)
bit 0, a ; je READY ?
jr nz, ERROR_PARAM ; NENI: tohle muze nastat jen pokud
; jsme zapomneli ukoncit vkladani
; textoveho parametru znakem mensim jak 0x20
and 0x80
jr nz,ERROR_OPEN ; ne, doslo k chybe pri OPEN
; pripravili jsme si v unikarte MZF, tak nacteme jeho hlavicku
ld bc, 0x8051 ; cteme 128 bajt z DATA_PORTu
ld hl, 0x10f0 ; a ukladame to na 0x10f0
inir
; podle udaju z hlavicky si nacteme z DATA_PORTu telo na adresu 0x1200
ld hl, 0x1200
ld de, (0x10f0 + 0x12 )
rdbyte: ini
dec de
ld a,d
or e
jr nz, rdbyte
; zavrit soubor
ld a,cmdCLOSE
out (CMDPORT),a
out (0xe0),A ; zrusi spodni ROM a primapuje RAM
jp 0x0000 ; skoci do RAMky, kde uz je pripravena BW1
ERROR_PARAM:
ld de, msg_err_param
call 0x0015 ; zobrazit text z HL
di
halt
ERROR_OPEN:
ld de, msg_err_open
jr print_errcode
;ERROR_SEEK:
; ld de, msg_err_seek
print_errcode:
call 0x0015 ; zobrazit text z HL
in a,(CMDPORT) ; kod posledniho prikazu
in a,(CMDPORT) ; unicard err code
in a,(CMDPORT) ; FatFS err code
call 0x03c3 ; zobrazit obsah A
di
halt
msg_err_param:
db "ERROR: BP!",0x0d
msg_err_open:
db "OPEN ERROR: ",0x0d
;msg_err_seek:
; db "SEEK - ERROR CODE: ",0x0d
txt1: db "OPENING " ; doplni se filename automagicky
filename: db "BW.DAT",0x0d, 0x00
txt2: db " OK",0x0d
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.
U hry BW je ještě taková specialitka, že se nesmí sáhnout na zásobník - proto jsou zakomentované všechny CALLy.
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.
Vašek
mainprg:
;;;;;;;;;;;;;;;;;;;;;;; precteme par byte z filata
;ld de, txt1
;call 0x0015 ; zobrazit text z DE
; otevreme soubor
ld a, cmdOPEN
out (CMDPORT), a
; Exstujici soubor pro cteni
ld a, FA_OPEN_EXISTING + FA_READ
out (DATAPORT), a
; Druhym parametrem je jmeno souboru
ld e, 0x00 ; konec jmena soubor
ld hl, filename
ld c, DATAPORT
next_char:
outi
ld a, (hl)
cp e
jr nz, next_char
; Podarilo se nam soubor otevrit?
;
; (Pokud je vse OK, tak ted mame ve statusu nastaveny
; bity READ_FILE, WRITE_FILE a EOF.)
;
in a,(CMDPORT)
bit 0, a ; je READY ?
jr nz, ERROR_PARAM ; NENI: tohle muze nastat jen pokud
; jsme zapomneli ukoncit vkladani
; textoveho parametru znakem mensim jak 0x20
and 0x80
jr nz,ERROR_OPEN ; ne, doslo k chybe pri OPEN
; pripravili jsme si v unikarte MZF, tak nacteme jeho hlavicku
ld bc, 0x8051 ; cteme 128 bajt z DATA_PORTu
ld hl, 0x10f0 ; a ukladame to na 0x10f0
inir
; podle udaju z hlavicky si nacteme z DATA_PORTu telo na adresu 0x1200
ld hl, 0x1200
ld de, (0x10f0 + 0x12 )
rdbyte: ini
dec de
ld a,d
or e
jr nz, rdbyte
; zavrit soubor
ld a,cmdCLOSE
out (CMDPORT),a
out (0xe0),A ; zrusi spodni ROM a primapuje RAM
jp 0x0000 ; skoci do RAMky, kde uz je pripravena BW1
ERROR_PARAM:
ld de, msg_err_param
call 0x0015 ; zobrazit text z HL
di
halt
ERROR_OPEN:
ld de, msg_err_open
jr print_errcode
;ERROR_SEEK:
; ld de, msg_err_seek
print_errcode:
call 0x0015 ; zobrazit text z HL
in a,(CMDPORT) ; kod posledniho prikazu
in a,(CMDPORT) ; unicard err code
in a,(CMDPORT) ; FatFS err code
call 0x03c3 ; zobrazit obsah A
di
halt
msg_err_param:
db "ERROR: BP!",0x0d
msg_err_open:
db "OPEN ERROR: ",0x0d
;msg_err_seek:
; db "SEEK - ERROR CODE: ",0x0d
txt1: db "OPENING " ; doplni se filename automagicky
filename: db "BW.DAT",0x0d, 0x00
txt2: db " OK",0x0d
Vlákno · 17 zpráv
- [SharpMZ] Chyba v emulaci FDC - tyka se i Unikarty
- Re: [SharpMZ] Chyba v emulaci FDC - tyka se i Unikarty
- Re: [SharpMZ] Chyba v emulaci FDC - tyka se i Unikarty
- Re: [SharpMZ] Chyba v emulaci FDC - tyka se i Unikarty
- Re: [SharpMZ] Chyba v emulaci FDC - tyka se i Unikarty
- Re: [SharpMZ] Chyba v emulaci FDC - tyka se i Unikarty
- Re: [SharpMZ] Chyba v emulaci FDC - tyka se i Unikarty
- Re: [SharpMZ] Chyba v emulaci FDC - tyka se i Unikarty
- Re: [SharpMZ] Chyba v emulaci FDC - tyka se i Unikarty
- Re: [SharpMZ] Chyba v emulaci FDC - tyka se i Unikarty
- Re: [SharpMZ] Chyba v emulaci FDC - tyka se i Unikarty
- [SharpMZ] Business World - nahrávání z Unikarty
- Re: [SharpMZ] Business World - nahrávání z Unikarty
- Re: [SharpMZ] Business World - nahrávání z Unikarty
- Re: [SharpMZ] Business World - nahrávání z Unikarty
- Re: [SharpMZ] Business World - nahrávání z Unikarty
- Re: [SharpMZ] Business World - nahrávání z Unikarty