0 Members and 1 Guest are viewing this topic.
loadLevelFromArchive: push bc ld hl,levelName_txt rst 20h ;9 octets à (hl) dans OP1 bcall(_ChkFindSym) ;chercher le programme dans OP1 ;hl = VAT, de = addresse du data ret c ;c armé si pas encontré in a,(6) ;il faut sauvegarder la page FLASH actuelle ld (savePort),a ld a,b ;b = 0 si le fichier est dans RAM or a ret z ;si pas dans le RAM, b = la page FLASH out (6),a ;a = la page FLASH où est notre fichier ex de, hl ld de,20-6 ;-6 parce que b=1 est la première carte, on va ajouter 6 add hl,de ;il y a 20 octets avant le début du data, le nom du program, sa taille, addresse, page de FLASH, etc. pop bc;début du data ld e,6 add hl,de djnz $-1; Aller prendre les informations dans les infos et mettre dans hl, de bc avant de lancer chargerCarte;...do stuffsavePort = $+1 ld a,0 out (6),a ret
ld hl, name rst 20h bcall(_chkFindSym) call findStartInRom...;##################################;Move to start of data in Rom;Input: Output of _ChkFindSym;Output: HL = start; B = rom page;Destroys: C DE FindStartInRom: ex de, hl LD de, 9 add hl, de call fast_bhl bcall(_LoadCIndPaged) ; number of letters in variable name inc c ld e, c add hl, de;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$;fall through ;########################################;faster bhl;only checks for going overfast_bhl: ld a, h res 7, h set 6, h ; this is a little hacky to save space, but it does what I said it does cp h ret z inc b ret
; Increase flash pointer inc l call z,inc_flash_high ;... ; Add to flash pointer ld a,OFFSET add a,l ld l,a call c,inc_flash_high ;...inc_flash_high: inc h ret po ld h,$40 in a,(6) inc a out (6),a ret
ld a,%10000000 and h jr z,continueRLE rra ld h,a in a,(6) ;charger la prochaine page de FLASH inc a out (6),acontinueRLE:
This isn't very on-topic, but if besides reading data from archive you also plan to write to it, be very careful to not mess up and writing to the wrong Flash sector (OS certificate). This can permanently damage your calc. Not sure if reading the archive directly from the wrong sector can cause damage, though.