Přejít na obsah
ARCHIVEKArchiv e-mailových konferencí o 8bitových počítačích Archiv Pandory 1999 až 2013

Re: IFF2?

David Luftner SHARP MZ-800

Posilam jeste casti programu kde je odkaz na uvedeny podprogram (pnF9EC), u
 dalsich vyskytu jeste nemam potuchy co se okolo deje, ale asi je to prece s
FD.

;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
; vypis chyboveho hlaseni a cekani na klavesu
;  Vstup:  DE=retezec chyby
; Vystup:  CY=stav stisknute klavesy
;   Nici:  co se da
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
pnF06F:	LD	A, (pnEA46)		; povoleni vypisu chyboveho hlaseni
	OR	A			; je vypis zakazan?
	RET	Z			;   pokud ano CY=0 a konec
	CALL	pnF9EC			; ceka na stabilni stav iff2, ulozi stav iff2, zakaze preruseni
	CALL	pnEE06			; vymaze kurzor, pokud je zobrazen
	LD	HL, (pnEA38)		; udaj o rovinach popredi a pozadi a udaj o inverzi znaku
	PUSH	HL
	LD	HL, (pnEA3A)		; L=sloupec pozice kurzoru, H=radek pozice kurzoru
	PUSH	HL
	LD	A, (pnF18B)		; udaj o moznosti vypsat radek s Fx prikazy
	PUSH	AF
	XOR	A			; zakaz
	LD	(pnF18B), A		;   vypsat radek s Fx prikazy
	LD	HL, $8C
	LD	(pnEA38), HL		; udaj o rovinach popredi a pozadi a udaj o inverzi znaku
	LD	HL, $1800		; L=0, H=$18
	LD	(pnEA3A), HL		; L=sloupec pozice kurzoru, H=radek pozice kurzoru
	LD	B, 69			; pocet znaku 
...
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
; priprav registry pro HDD operaci read nebo write
;  Vstup:   B=pocet sektoru k operaci
;	   HL'=vyssich 16bitu adresy na disku
;	   HL=nizsich 16bitu adresy na disku 
; Vystup:  CY=stav ready
;             1=neni ready	0=je ready
;   Nici:  co se da
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
pnF6E7:	CALL	pnF9EC			; ceka na stabilni stav iff2, ulozi stav iff2, zakaze
preruseni
	PUSH	DE			; uloz adresu pameti datove operace
	LD	C, 10			; pocitadlo cekani na ready smycky 2
	LD	DE, 0			; pocitadlo cekani na ready smycky 1
pnF6F0:	IN	A, (HDDcmd)		; HDD Status register
	BIT	7, A			; je HDD ready ?
	JR	Z, pnF701		;   pokud ano skoc
	DEC	DE			; cekaci
	LD	A, D			;   smycka
	OR	E
	JR	NZ, pnF6F0
...


A v nasledujicim se v jako jedinem pouzije prectena hodnota IFF2 (az na konci)
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
; cti z HDD
;  Vstup:  HL'=vyssich 16bitu adresy na disku
;	   HL=nizsich 16bitu adresy na disku
;	   DE=adresa pameti kam se cte
;	    B=pocet sektoru k operaci (8bit IDE - 1sektor=256bajtu, ale B nasobi takze
B=1=dva sektory=512bajtu
; Vystup:  CY=stav ready
;             1=chyba	0=ok
;   Nici:  co se da
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
pnF740:	CALL	pnF6E7			; priprav registry pro HDD operaci read nebo write
	RET	C			;   HDD neni ready
	LD	A, $20			; prikaz ReadSector
	OUT	(HDDcmd), A		; HDD Command register
pnF748:	CALL	pnF71B			; cekej na signal od HDD ze jsou pripravena data
	RET	C
pnF74C:	INI				; cti B*8 bajtu
	INI
	INI
	INI
	INI
	INI
	INI
	INI
	DJNZ	pnF74C
	IN	A, (HDDcmd)		; HDD Status register
	RRCA				; bylo to s chybou ?
	JR	C, pnF766		;   pokud ano konec
	DEC	D			; mame cist dalsi sektor ?
	JR	NZ, pnF748		;   ano skoc
pnF766:	PUSH	AF
	LD	A, (pnF52E)		; v bitu 2 je stav iff2 pro testovani
	BIT	2, A
	JR	Z, pnF76F		; pokud je puvodni stav iff2 v jednicce
	EI				;   povol preruseni
pnF76F:	POP	AF
	RET

Zobrazit původní podobu