V tomto serálu si ukážeme použítí služeb MDOS3 a vytvoříme v několika dílech program PATCHRUN.
Program bude mít za úkol projít všechny diskety na aktuální partišně a na nich najít soubor run.P a ten opatchovat tak, aby šel použít i na neupravených 128KB strojích.
Když si prohlédneme soubor README_cz.txt tak se v něm dočteme, že File Manager od George K. nepracuje s neupravenými ZXS128. Je tam také postup, jak tento program patchnout. Náš program to udělá za nás a pro jistotu na všech disketách.
K tomu budeme potřebovat assembler as, program bin2tap a zmakebas. Podívejte se do článku 0.díl: příprava assembleru. Zmakebas byl na stránkách MB MANIAX, ale bůhvíproč tyto stránky stále nejdou. ZMAKEBAS si u nás, snad je to správně.
Připravíme si taky soubor Makefile, podle kterého kompilace proběhne, obsah zaváděcího basicu (a využijeme vlastností ZMAKEBAS), adresář s „knihovními“ funkcemi (uphl, dowhl, font, programy pro obsluhu klávesnice, test breaku).
Probereme si některé postupně:
downde.a80:
; posune DE o 8 miroradku dolu
DOWNDE8: ld a,e ;nizzi bajt
add a,%00100000 ;pripocti 1 k cislu ATTR radku v tretine
;ponecha cislo sloupce
ld e,a ;vrat zpet
ret nc ;pokud nepreteklo, OK
ld a,d
add a,8 ;zvys cislo tretiny
cp %01011000 ;nebude to nahodou cislo 3?
jr c,DOWNDE8A ;neni, skok
and %111 ;je: nech cislo radku v ATTR
or %01000000 ;ostatni nastav na zacatek (tretina cislo 0)
DOWNDE8A: ld d,a ;na spravne %010x xxx.
ret
upde8.a80
;posune DE o 8 mikroradku nahoru
UPDE8: ld a,e
sub %00100000
ld e,a
ret nc
ld a,d
sub 8
cp %01000000 ;nesmi byt mensi nez toto cislo.
jr nc,UPDE8A
and %111
or %01010000
UPDE8A: ld d,a
ret
DOWNDE8 a UPDE8 jsou rutiny vhodné pro vytváření seznamů. Občas je třeba naplnit seznam zhora dolů, nebo zdola nahoru.
inkey.a80
;knihovna INKEY
;umoznuje volat test klaves z prestrankovane ROM do MDOS3
;samozrejme pak INKEY2 z normalni ZXROM
;ci INKEY1 ale bez nastaveneho modu L.
;WARNING WARNING WARNING WARNING WARNING
;POUZIVA BASIC PROMENNE a registr IY=23610
INKEY: rst $28
dw INKEY2
ret
INKEY2: ld a,204
ld (iy+1),a
xor a
ld (iy+7),a
ld (iy+48),a
INKEY1: ei
halt
bit 5,(iy+1)
jr z,INKEY1
res 5,(iy+1)
ld a,(23560)
ret
KEYBREAK: ;out:nc=stisknut BREAK
ld a,254
in a,(254)
rra
ret c
ld a,127
in a,(254)
rra
shade.a80
;rutiny na prestrankovani do D80
;a do ZXROM
SHADE: ld a,79
ld de,TAB-26
call $25AB
ld hl,0
ld (TAB),hl
ld hl,16119
ld (TAB+2),hl
rst 0
ret
TAB: dw 0
dw 16119
ZXROM: ld a,32
ld (16119),a
jp $1700
Součástí knihoven jsou ještě soubory print.a80 (tiskne 42 znaků na řádek, opsaný ze ZXM 5/1994), font.b (font, kterým se tiskne), procento.a80 (z článku Výpočet procent pro 32-bitová čísla) a standartní rutina downhl.a80.
Dole na stránce najdete celý projekt ke stažení, ale zatím bez hlavního kódu. Ten budeme probírat v dalších částech. Zatím ještě není ani napsán 🙂
Stažení:
Jeden komentář na “Programujeme pro MDOS3 (1)”
Je nám líto, ale formulář pro přidávání komentářů je momentálně uzavřen.
Tyjo, esli dobře chápu, tohle je live přenos z tvorby programu. Realtime rulez!
Jsem zvědav, jestli tu najdu i seznam nadávek pořízený ve chvíli, kdy program nefunguje tak, jak má :o)