⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rdwrhd.68k

📁 用于motorala 68K系列处理器的小实时多任务操作系统 The OMU Kernel was written to provide a cut-down Unix-like O/S for a
💻 68K
字号:
*******************************************************************************	RDWRC.68k	Lowest level floppy disk read and write data*			This version swaps bytes around for Codata type disks******************************************************************************** Addresses of Data REQ and Busy bitsDATA:	= $E73813HS:	= $E7381BHSBIT:	= 6BUSY:	= $E73811BUSYBIT: = 0ACK:	= $E7380FACKOFF: = $A0ACKON:	= $A8* DISK read write routines* Codata C type link interface* Arguments - <Address><Byte count>********************************************************************** READ Sector	Requires no bytes to be even (swaps bytes in word)*		Called as hdmread(buf, size, timeout);*		If timeout is 0 waits indefinatly*********************************************************************	.globl _hdmread, _hdbip_hdmread:	movem.l a0-a4/d1-d4,-(sp)	;Saves registers used	lea.l HS,a1			;A1 points to the hand shake register	lea.l BUSY,a2			;A2 points to SCSI control register	lea.l DATA,a3			;A3 points to the data register	lea.l ACK,a4	clr.l d0			;Sets D0 for exit with no errors	move.l #HSBIT,d1		;D1 is Hand shake bit no	move.l #BUSYBIT,d2		;D2 is Busy bit no in SCSI control reg	move.l 48(a7),d4		;Gets timeout count from stack	move.l 44(a7),d3		;Gets byte count from stack (C passed)	movea.l 40(a7),a0		;Gets address freom stack (C passed)	jmp hdrstart			;Starts at end of loop for count checkhdrloop:	btst.b d1,(a1)			;Checks HS bit	beq hdrdata			;If low data ready	btst.b d2,(a2)			;Else check busy	bne hdrerr			;If zero ok no errors	cmpi.l #0,d4			;Checks d4 if zero ignore timeout	beq hdrloop	subq.l #1,d4			;Decrement time-out	beq hdrerr	bra hdrloophdrerr:*	jsr _hdbip	move.l #4,d0			;Sets error	jmp hdrendhdrdata:	move.b (a3),(a0)+		;Gets data*	not.b (a0)+			;Inverts data*	btst.b d1,(a1)			;Checks if HD error*	bne hdrerr	move.b #ACKON,(a4)		;Perform acknowlege*hdrack:*	btst.b d1,(a1)*	beq hdrack	move.b #ACKOFF,(a4)hdrstart:	dbeq d3,hdrloop			;Repeats till endhdrend:	movem.l (sp)+,a0-a4/d1-d4	;Recovers registers	rts				;Returns********************************************************************** WRITE Sector	Requires no of bytes to be even (swaps bytes in word)*********************************************************************	.globl _hdmwrite, _prbytes_hdmwrite:	movem.l a0-a4/d1-d4,-(sp)	;Saves registers used	lea.l HS,a1			;A1 points to the hand shake register	lea.l BUSY,a2			;A2 points to SCSI control register	lea.l DATA,a3			;A3 points to the data register	lea.l ACK,a4	clr.l d0			;Sets D0 for exit with no errors	move.l #200000,d4		;Set timeout	move.l #HSBIT,d1		;D1 is Hand shake bit no	move.l #BUSYBIT,d2		;D2 is Busy bit no in SCSI control reg	move.l 44(a7),d3		;Gets byte count from stack (C passed)	movea.l 40(a7),a0		;Gets address freom stack (C passed)	jmp hdwstart			;Starts at end of loop for count checkhdwloop:	btst.b d1,(a1)			;Checks HS bit	beq hdwdata			;If low data ready	btst.b d2,(a2)			;Else check busy	bne hdwerr			;If zero ok no errors	subq.l #1,d4			;Decrement time-out	beq hdwerr	bra hdwloophdwerr:*	jsr _hdbip	move.l #3,d0	jmp hdwendhdwdata:	move.b (a0)+,(a3)		;Gets data*	not.b (a3)			;Inverts data	move.b #ACKON,(a4)		;Perform acknowlege*hdwack:*	btst.b d1,(a1)*	beq hdwack	move.b #ACKOFF,(a4)hdwstart:	dbeq d3,hdwloop			;Repeats till endhdwend:	movem.l (sp)+,a0-a4/d1-d4	;Recovers registers	rts				;Returns********************************************************************************	_hdmerr()	Recover scsi bus after error*			(Read as many bytes as required)*******************************************************************************	.globl	_hdmerr_hdmerr:	movem.l a0-a4/d1-d4,-(sp)	;Saves registers used	lea.l HS,a1			;A1 points to the hand shake register	lea.l BUSY,a2			;A2 points to SCSI control register	lea.l DATA,a3			;A3 points to the data register	lea.l ACK,a4	clr.l d0			;Sets D0 for exit with no errors	move.l #200000,d4		;Set timeout	move.l #HSBIT,d1		;D1 is Hand shake bit no	move.l #BUSYBIT,d2		;D2 is Busy bit no in SCSI control reg	move.l #512,d3			;Gets byte count from stack (C passed)	jmp hdestart			;Starts at end of loop for count checkhdeloop:	btst.b d1,(a1)			;Checks HS bit	beq hdedata			;If low data ready	btst.b d2,(a2)			;Else check busy	bne hdeerr			;If zero ok no errors	subq.l #1,d4			;Decrement time-out	beq hdeerr	bra hdeloop			;If zero ok no errorshdeerr:*	jsr _hdbip	move.l #4,d0			;Sets error	jmp hdeendhdedata:	move.b #ACKON,(a4)		;Perform acknowlege	move.b #ACKOFF,(a4)hdestart:	dbeq d3,hdeloop			;Repeats till endhdeend:	movem.l (sp)+,a0-a4/d1-d4	;Recovers registers	rts				;Returns

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -