V poslednej dobe sa tak trosku hram so sifom.
Zacalo to sindikatom, na ktorom Z00m vytiahol temu SIFROM (Cygnusova uprava ISOROM, na pouzitie sifu miesto kazetaka na load/save programov/hier). Z00m vtedy upravoval nejaku +3jku a jedna z poziadavok bola, miesto klasickej ROM pouzit ROM s dvojnasobnou kapacitou, kde sa do jednej casti da klasicka ROM a do druhej SIFROM a prepinat sa budu prepinacom.
Mna vsak zaujala myslienka pouzitia sifrom patchu bez nutnosti zasahu do pocitaca.
Samozrejme, do standardnej ROM sa neda zapisovat nejakymi POKE z BASICu a dokonca ani zo strojoveho kodu, avsak vydobytky modernej doby nam to umoznia velmi jednoducho. Mam na mysli DivIDE. Bezne sa DivIDE sice pouziva na pripojenie velkokapacitnych datovych ulozisk ako su harddisky, ci CF karty, cize miesto magnetofonu, ale aj k takemuto pouzitiu divide potrebuje vlastnu pamat v ktorej bude obsluzny program (firmware) a jeho data (aby interface co najmenej zasahoval do pamati zx spectra, a aby tak islo nahrat co najviac programov povodne nahravanych z kazety). No a kedze systemovy konektor, na ktory sa DivIDE pripaja, nema signal /RAMCS, ktorym by vedelo odpojit zx RAM, tak musi pouzit signal /ROMCS a svoju pamat tak pouzivat v oblasti, kde ma zx ROM. A prave toto nam hra do karat a tak jedinym problemom, ktory na prevadzkovanie sifrom bez zasahu do pocitaca je, ako dostat upravenu ROM do pamate DivIDE.
Na divide existuje niekolko roznych firmware. Kazdy z nich ma svoje vlastnosti, ktorymi su napriklad pouzity suborovy system, schopnost data na disk aj ukladat ci moznost zobrazovat dlhe nazvy v pripade pouzitia suboroveho systemu FAT. Nam vsak bude stacit jedna vlastnost, ktoru maju vsetky bezne pouzivane firmware (demfir, esxdos, fatware, mdos3…) a tou je nahrat do pamati zx spectra kratky program, ktory upravi ROM a nasledne ju zapise do pamati divide (co nam samozrejme znemozni nadalej pouzivat firmware divide na citanie/ukladanie dat, ale o to nam teraz nejde, naviac, je to samozrejme docasne znemoznenie, pocitac staci vypnut a zapnut a uz je zasa vsetko ako bolo).
Do urcitej miery jednoduchsie to maju pouzivatelia MDOS3. System MDOS3 sa sklada z dvoch casti, prva cast je bootloader, ktory sa spusti pri zapnuti pocitaca a ma za ulohu nacitat konfiguracny subor, v ktorom su popisane systemy instalovane na bootdiskete a druha cast je uz samotny MDOS3, ktory je rozdeleny na niekolko suborov (po 8kb), ktore bootloader po vybere systemu MDOS3 nahra do pamate divide a nasledne spusti. Takto vie bootloader nahravat aj ine systemy (aj ked samozrejme s obmedzeniami, ale tie nas teraz nebudu trapit, lebo pre nase ucely nie su podstatne), napriklad uz spominany demfir, esxdos ci fatware, alebo aj T-Bios (system, ktory si asi nikto nenapali priamo do eeprom divide ;]). No a my tuto vlastnost pouzijeme na nahratie sifrom.
Najprv si vsak ukazeme univerzalny sposob, ktory bude pouzitelny vo vsetkych beznych firmwaroch (tu samozrejme neratam systemy T-Bios a Azorados ;]).
Prve co potrebujeme je skompilovat instalator sifrom patchu. Ten stiahneme z Cygnusovej stranky z baliku http://cygnus.speccy.cz/download/utility/sifrompatch/2014-05-05_sif-rom_patch.tar.bz2 . Tento instalator predpoklada, ze mame v pocitaci ISOROM, do ktorej sa da povolit zapis, co nemame. Mame ale divide, takze upravime install.za, asi takto:
cpu z80undoc org 32768 ROMINRAM equ 49152 ;0xC000 INSTALL_START ;load standard ROM to RAM ld hl,0 ld de,ROMINRAM ld bc,16384 ldir ; write patches to RAM copy of ROM ld hl,SIF_SAVE_PATCH ld de,ROMINRAM+1218 ; 0x04c2 = 1218 SA-BYTES ld bc,SIF_SAVE_PATCH_LN ldir ld hl,SIF_INIT_PATCH ld de,ROMINRAM+1294 ; RANDOMIZE USR 1294 INITIALIZE SIF ld bc,SIF_INIT_PATCH_LN ldir ld hl,SIF_LOAD_PATCH ld de,ROMINRAM+1366 ; 0x0556 = 1366 LD-BYTES ld bc,SIF_LOAD_PATCH_LN ldir ld hl,SIF_CLR_PATCH ld de,ROMINRAM+1494 ; RANDOMIZE USR 1494 CLEAR BUFFERS ld bc,SIF_CLR_PATCH_LN ldir ;teraz budeme robit zlobu, a tak nechceme aby nas pri tom niekto vyrusoval di ;pozor, tu uz niet navratu, prepisujeme firmware v divide RAM ld a,128 ;conmem+bank0 out (227),a ld hl,ROMINRAM+8192 ld de,8192 ld bc,8192 ldir ld a,129 ;conmem+bank1 out (227),a ld hl,ROMINRAM+8192 ld de,8192 ld bc,8192 ldir ld a,130 ;conmem+bank2 out (227),a ld hl,ROMINRAM+8192 ld de,8192 ld bc,8192 ldir ld a,131 ;conmem+bank3 out (227),a ld hl,ROMINRAM ld de,8192 ld bc,8192 ldir ld a,64 ;mapram+bank0 out (227),a jp 0 ret SIF_SAVE_PATCH include "save.za" SIF_SAVE_PATCH_LN = $ - SIF_SAVE_PATCH SIF_INIT_PATCH ; init po SAVE, protoŸe tam na nìj zbyde místo include "init.za" SIF_INIT_PATCH_LN = $ - SIF_INIT_PATCH SIF_LOAD_PATCH include "load.za" SIF_LOAD_PATCH_LN = $ - SIF_LOAD_PATCH SIF_CLR_PATCH include "clear.za" SIF_CLR_PATCH_LN = $ - SIF_CLR_PATCH
Skompilovanim ziskame takuto tapku: sifrom_install.tap
A toto je tapka, ktora po nahrati lubovolnym firmwarom nainstaluje sifrom do pamati divide. Takze si ju uz len ulozime na pamatove medium a po jej nahrati a spusteni sa nam „resetne“ pocitac, avsak uz bude aktivna sifrom, ktorej pouzitie najdete na Cygnusovych strankach: http://cygnus.speccy.cz/popis_sif_zxrom_patch.php
Teraz si ukazeme druhy sposob, ktory je vylucne pre MDOS3 pouzivatelov. Zacneme podobne, akurat install.za upravime tak, ze len vytvori obraz upravenej ROM v pamati a neulozi ho hned do divide. Uprava je jednoduchsia:
cpu z80undoc org 32768 ROMINRAM equ 49152 ;0xC000 INSTALL_START ;load standard ROM to RAM ld hl,0 ld de,ROMINRAM ld bc,16384 ldir ; write patches to RAM copy of ROM ld hl,SIF_SAVE_PATCH ld de,ROMINRAM+1218 ; 0x04c2 = 1218 SA-BYTES ld bc,SIF_SAVE_PATCH_LN ldir ld hl,SIF_INIT_PATCH ld de,ROMINRAM+1294 ; RANDOMIZE USR 1294 INITIALIZE SIF ld bc,SIF_INIT_PATCH_LN ldir ld hl,SIF_LOAD_PATCH ld de,ROMINRAM+1366 ; 0x0556 = 1366 LD-BYTES ld bc,SIF_LOAD_PATCH_LN ldir ld hl,SIF_CLR_PATCH ld de,ROMINRAM+1494 ; RANDOMIZE USR 1494 CLEAR BUFFERS ld bc,SIF_CLR_PATCH_LN ldir ret SIF_SAVE_PATCH include "save.za" SIF_SAVE_PATCH_LN = $ - SIF_SAVE_PATCH SIF_INIT_PATCH ; init po SAVE, protoŸe tam na nìj zbyde místo include "init.za" SIF_INIT_PATCH_LN = $ - SIF_INIT_PATCH SIF_LOAD_PATCH include "load.za" SIF_LOAD_PATCH_LN = $ - SIF_LOAD_PATCH SIF_CLR_PATCH include "clear.za" SIF_CLR_PATCH_LN = $ - SIF_CLR_PATCH
Skompilovanim dostaneme tapku: sifrom_create_mdos3.tap
Tuto tapku musime nejakym sposobom nahrat do pocitaca, ked uz mame MDOS3 nabootovany a do virtualnej mechaniky vlozeny bootdisk. To mozme docielit bud nejakou PC utilitou napr. mdos3_tool, ktora nam umozni import tap suboru do virtualnej diskety, alebo pomocou tape2wav (z baliku fuse-utils) tapku prevedieme na wav a „vypiskame“ do zx napriklad z PC zvukovej karty (na zx spectrum +2 mozno pouzit Mikeho kliniec ;]).
Ked uz instalator mame v pamati zx a po spusteni vytvori sifrom v pamati na adrese 49152, ulozime subory pre bootloader prikazmi:
SAVE *"sifrom0" CODE 49152, 8192 SAVE *"sifrom1" CODE 49152+8192, 8192
No a nakoniec musime zapisat novy system do bootconf.b . Toto je ta najzlozitejsia vec, ktora nas v pripade MDOS3 caka. Kedze ziaden editor na bootconf nemame, musime sa nejako vynajst. Jedna moznost je, vyexportovat ho do PC (uz spominanym mdos3_toolom), tam ho nejakou utilitou (napriklad hexeditom) zmenit a potom importnut naspat na bootdisk. Uznavam, celkom hardcore sposob, a tak skusime druhu moznost: pozriet sa ako vypada struktura konfiguracneho suboru http://ci5.speccy.cz/files/bootconf_cz.txt a konfiguracny subor upravit priamo na zx.
Bootconf je strukturovany celkom jednoducho. Cely subor sa sklada zo zaznamov o jednotlivych systemoch a je ukonceny bajtom 0. Kazdy zaznam obsahuje popisny text systemu, ktory sa vypise v menu pri boote a mena suborov, ktore su potrebne na nahratie systemu do pamate divide. Cize, my potrebujeme pripisat na koniec konfiguracneho suboru (pozor, nie na posledny bajt suboru, ale na ukoncovaci znak s kodom 0) popis povedzme text „SIFROM“ a ako mena suborov zapisat sifrom0 a sifrom1 s prislusnymi cislami divide ram baniek. A kedze clovek je tvor lenivy a pocitace su od toho aby mu robotu ulahcovali, napiseme si na to program v BASICu. Pamatate este doby, ked sa programy do pocitaca prepisovali napriklad z FIFA? Tak si tuto situaciu pripomenieme ;] :
10 CLEAR 32767 20 LOAD *"bootconf" CODE 32768 30 LET addr=32768 40 IF PEEK addr=0 THEN GO TO 100 50 LET addr=addr+32: REM preskocime popis systemu 60 REM teraz este musime preskocit subory 70 IF PEEK addr<128 THEN LET addr=addr+11: GO TO 70 80 LET addr=addr+1: REM a nakoniec preskocime ukoncovaci znak 90 GO TO 40 100 DIM a$(32) 105 REM najskor zapiseme popis systemu 110 LET a$="SIFROM" 120 FOR i=1 TO 32 130 POKE addr,CODE a$(i) 140 LET addr=addr+1 150 NEXT i 155 REM a teraz zapiseme mena suborov 160 LET c$="sifrom1" 170 FOR i=0 TO 3 180 POKE addr,i 190 LET addr=addr+1 200 IF i=3 THEN LET c$="sifrom0" 210 FOR j=1 TO LEN(c$) 220 POKE addr,CODE c$(j) 230 LET addr=addr+1 240 NEXT j 250 FOR j=LEN(c$)+1 TO 10 260 POKE addr,0 270 LET addr=addr+1 280 NEXT j 290 NEXT i 300 POKE addr,255: REM ukoncovaci znak systemu 310 LET addr=addr+1 320 POKE addr,0: REM ukoncovaci znak configu 330 REM teraz vypocitame novu dlzku bootconfu 340 REM dlzku zaokruhlime na sektory smerom nahor 350 LET size=addr-32768 360 LET size=size+511: LET size=512*INT(size/512) 370 REM config ulozime 380 SAVE *"bootconf" CODE 32768,size
Po spusteni tohto programu sa nacita bootconf.b do pamate, program najde koniec definicie suborov a na toto miesto zapise novy system. Bootconf nasledne opat ulozi na disk. Ak sme spravili vsetko tak ako sme mali, tak staci vypnut a zapnut pocitac a uz by sa nam mala v menu ukazat polozka „SIFROM“ a po jej vybere by mal pocitac „nabootovat“ do sifrom, ktorej pouzitie opat najdete na Cygnusovych strankach: http://cygnus.speccy.cz/popis_sif_zxrom_patch.php
Pozor, v oboch pripadoch (aj v specialnom pre mdos3, aj v univerzalnom pre lubovolny firmware) zostava vrchna cast „rom“ zapisovatelna, tak si davajte pozor co a kam zapisujete ;], nakoniec, je takto mozne overit uspesnost instalacie sifrom do divide. Po nainstalovani sifrom do divide, zadame jednoduchy prikaz:
POKE 15616,255
Ak bola sifrom uspesne instalovana, zmeni sa prvy bajt znakoveho fontu (konkretne znaku medzera), co by malo byt vidiet ihned po vypisani „0 OK, 0:1“
Povodne som chcel napisat co to aj o dalsej utilitke pre sif, ale to uz necham na niektory dalsi clanok ;]
-ub
Ahojte, a jak to pak funguje v praxi? Chápu, že linuxáci asi podrstčí z dialogového řádku takto upravené SIFROM svou TAP. Jak je to u Windows? Nebo se load/save deje pres FTP?
Proč je zde možnost komentáře, když mi nikdo neodpoví? Nicméně, vyřešeno již na pandoře. Hood
Prepac Hood, zabudol som adminovat hlavne pocas dovolenky. Zial spamu chodi viac ako efektivnych komentarov a preto je zapnute aktivne schvalovanie admina.