; ; RD loader pro Sharp MZ-800 ; ; Program provede reset MZF repository a vyzada si filepath k MZF souboru, ; ktery je na SD karte v /unicard/romdisk.cfg definovan jako boot soubor. ; ; TODO: vlozit a osetrit i nejake status kody z MZF repository CMD_PORT: equ 0x50 DATA_PORT: equ 0x51 org 0x0000 di ; pro jistotu posleme prikaz pro reset MZFrepository xor a out ( CMD_PORT ),a ; budeme komunikovat v ASCII => 0x01, v SHARP ASCII => 0x02 inc a out ( CMD_PORT ),a ; vyzadame si FILEPATH pro ROMdisc boot ld hl, cmd1 ld e, 0x00 ; kazde volani send_cmd konci pokud se narazi na znak z 'e' call send_cmd ; cti prikaz z (hl) ; precteme si co tam pro nas maji a ulozime to na 0x1200 ld hl, 0x1200 call get_txt ; pro jistotu si upravime konec txt dat ld (hl), 0x0d inc hl ld (hl), 0x00 ; posleme zadost na otevreni MZF "OPEN FILEPATH ",0x0d ld hl, cmd2 call send_cmd ld hl, 0x1200 call send_cmd ; pripravili jsme si 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 push hl ; potrebujeme si ulozit konec nacteneho programu push hl ; 2x ;) ; vse jsme precetli, tak to trochu oslavime ld de, 0x0000 ld bc, 0x06cf finito: out (c), l inc l dec de ld a,e or d jr nz, finito ; a jdeme na dlouhe finale pop de ld hl, prg_start ld bc, end_prg_start - prg_start ldir ret ; posilame data z (hl) na CMD_PORT dokud nenarazime na znak z 'e' - ten uz meposilame send_cmd: ld c, CMD_PORT next_send_cmd: outi ld a, (hl) cp e jr nz, next_send_cmd ret ; cteme z DATA_PORT do (hl), dokud neprijde znak mensi jak 0x20 get_txt: ld c, DATA_PORT next_get_txt: ini dec hl ld a, 0x20 sub (hl) ret nc inc hl jr next_get_txt cmd1: db 'SETUP GET BOOTMZF', 0x0d, 0x00 cmd2: db 'OPEN FILEPATH ', 0x00 prg_start: ld a, 0x08 out (0xce),a out (0xe4), a in a, (0xe1) exx ld bc,0x0500 ; bude z toho standard? ;) exx ld hl, 0x10f0 + 0x12 jp 0xecfc end_prg_start: db 0x00