Konference: Počítač SHARP MZ-800 a emulátory

Od: David Luftner
Datum: 20.10.2009 20:07
Předmět: Re: IFF2?

Re: IFF2?:

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
 
[2009/1 (32)] [2009/3 (21)] [2009/4 (42)] [2009/5 (6)] [2009/8 (9)] [2009/9 (28)] [2009/10 (50)] [2009/11 (86)] [2009/12 (89)]


[1999 (1)] [2000 (168)] [2001 (733)] [2002 (459)] [2003 (654)] [2004 (224)] [2005 (105)] [2006 (182)] [2007 (201)] [2008 (294)] [2009 (363)] [2010 (782)] [2011 (522)] [2012 (642)] [2013 (442)]