[SharpMZ] Business World - nahrvn z Unikarty

Vaclav Peroutka vaclavpe na seznam.cz
ter Leden 23 19:09:37 CET 2018


Ahoj Mikeši,
rozdíl je ten, že nevím, jaké máte poslední API na unikartě. Michal Hučík mi
upravoval kód na staré unikartě, aby se nenuloval aktuální adresář po 
dočtení souboru, a možná nějaké další drobnosti.

Vašek


"Ahoj,

tak jsem zkoumal ten kod. Nejak nechapu v cem by mela byt ten rozdil mezi 
starsi/upravenym a novym modelem? Vzdyt to klasicky otevre soubor nacte 
hlavicku, pak telo a otestuje errory.
Takto vlastne musis upravit prvni dil programu/hry tak, aby si pres API 
unikarty otevrel a nacetl druhy dil. A pak dal a dal. A co teda vlastne dela
ta uprava fw jinak?
Obavam se, ze na MZT souboru, ktery ma vice casti to nepujde pouzit. Musel 
by jsi udelat seek na pokracovani v souboru. Treba takova hra jako Yokai_A.
mzt a Yokai_B.mzt, to by byl asi orisek, predelat, protoze kazda cast ma 
jeste nekolik dilu:
File: ..\MZT2\Yokai_A.mzt
Directory of MZT:                         size load exec
 OBJ  "SIDE A"          :` 48640 Bytes    BE00 1200 1200
 OBJ  "DEMO"            :`  6784 Bytes    1A80 1200 2C66
Length of data: 55424 Bytes.

File: ..\MZT2\Yokai_B.mzt
Directory of MZT:                         size load exec
 OBJ  "YOUKAI V1.1"     :` 36718 Bytes    8F6E 1200 A155
 OBJ  "MAP 8"           :`  6656 Bytes    1A00 9600 E804
Length of data: 43374 Bytes.

Jinak posledni update fw pro unikartu to resi prohazovanim image QD postupne
na dalsi a dalsi, ale je potreba, aby programy bud nahravaly dalsi casti z 
QDisku nebo cekaly na prohozeni disketek. Vzhledem k tomu, ze vetsina 
programu pouziva rutiny z monitoru, tak je to resitelne. Akorat je tu 
problem s adresama QD radice, ale to je jina story.
Vyhoda je, ze se nemusi 'patchovat' kazda hra nebo BASICove programy.

Mikes

---------- Původní e-mail ----------
Od: Vaclav Peroutka <vaclavpe na seznam.cz>
Komu: Počítače SHARP MZ a jejich emulátory <sharpmz na mail.ordoz.com>
Datum: 22. 1. 2018 22:10:32
Předmět: [SharpMZ] Business World - nahrávání z Unikarty 
"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



_______________________________________________ 
SharpMZ mailing list 
SharpMZ na mail.ordoz.com 
http://mail.ordoz.com/mailman/listinfo/sharpmz 
"_______________________________________________ 
SharpMZ mailing list 
SharpMZ na mail.ordoz.com 
http://mail.ordoz.com/mailman/listinfo/sharpmz 
"
------------- dal st ---------------
HTML příloha byla odstraněna...
URL: http://mail.ordoz.com/pipermail/sharpmz/attachments/20180123/aeba0508/attachment-0001.html 


Dal informace o konferenci SharpMZ