亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fdd.8

?? PC x386 bios source code
?? 8
?? 第 1 頁 / 共 2 頁
字號:
	;
	; Floppy BIOS
	;
	; (C)1997-2001 Pascal Dornier / PC Engines; All rights reserved.
	; This file is licensed pursuant to the COMMON PUBLIC LICENSE 0.5.
	;
	; Limitations:
	;
	; - Only 3.5" floppy drives supported.
	; - Only 1.44 MB mode supported.
	; - Only one drive supported.
	;
#if def	DEBUG
FD_DEBUG:			;& enable debug code, comment out for
			;production code
#endif
	;
	; INT 13 entry
	;
int13:	sti
	push	ds	;save registers
	push	es
	pusha
	mov	bp,sp	;access to stack frame
#if def	FD_DEBUG
	call	v_dump	;& dump registers
#endif
	xor	di,di	;access BIOS segment
	mov	ds,di
	cmp	ah,0	;reset doesn't care about drive #
	jz	int13_1
	cmp	dl,0	;valid drive ?
	jnz	fd_badcmd	;:bail out
int13_1:	cmp	byte [m_fdmed0],0	;drive doesn't exist ?
	jz	fd_badcmd	;:bail out
	mov	di,ax	;command -> index
	shr	di,8
	add	di,di
	and	byte [bp+18h],0feh	;clear return carry
	cmp	di,19h*2	;limit command vector
	jae	fd_badcmd
	jmp	[cs:di.fd_vectab]	;jump to command	
	;
	; floppy vector table
	;
fd_vectab: dw	fd_rst	;AH=00: recalibrate drive
	dw	fd_status	;AH=01: get status
	dw	fd_read	;AH=02: read
	dw	fd_write	;AH=03: write
	dw	fd_verify	;AH=04: verify
          dw	fd_format	;AH=05: format track
	dw	fd_badcmd	;AH=06: bad
	dw	fd_badcmd	;AH=07: bad
	dw	fd_drvprm	;AH=08: read drive parameters
	dw	fd_badcmd	;AH=09: bad
	dw	fd_badcmd	;AH=0A: bad
	dw	fd_badcmd	;AH=0B: bad
	dw	fd_badcmd	;AH=0C: bad
	dw	fd_badcmd	;AH=0D: bad
	dw	fd_badcmd	;AH=0E: bad
	dw	fd_badcmd	;AH=0F: bad
	dw	fd_badcmd	;AH=10: bad
	dw	fd_badcmd	;AH=11: bad
	dw	fd_badcmd	;AH=12: bad
	dw	fd_badcmd	;AH=13: bad
	dw	fd_badcmd	;AH=14: bad
	dw	fd_gettyp	;AH=15: get drive type
	dw	fd_dskchg	;AH=16: get disk change status
	dw	fd_fmttyp	;AH=17: set drive type for format
	dw	fd_medtyp	;AH=18: set media type for format
	;
	; Illegal command
	;
fd_badcmd: mov	byte [m_fdstat],1	;illegal command
	;
	; AH=01: get status
	;
fd_status:
fd_exit:	mov	al,[m_fdstat]	;get error code
fd_exit1:	mov	[bp._ah],al	;return in AH
	and	al,al	;error ?
	jz	fd_exit2
	or	byte [bp+18h],1	;yes: set carry
fd_exit2:
#if def	FD_DEBUG
	call	v_dump2	;& dump registers
#endif
	popa		;restore registers
	pop	es
	pop	ds
	iret		;return from interrupt
	;
	; AH=00: recalibrate floppy drives
	;
fd_rst:	les	si,[m_fdbase]

	in	al,pic0+1	;enable floppy interrupt
	and	al,0bfh
	out	iowait,al
	out	pic0+1,al
	
	mov	dx,fdc_rate	;set 500 kb/s data rate
	mov	al,0
	out	dx,al
	
	mov	dx,fdc_ctrl
	mov	word [m_fdstat],0	;clear error status
	mov	byte [m_fdcnt],0ffh	;prevent motor off event
	mov	al,[m_fdmot]	;digital output register
	rol	al,4
	and	al,11110011b
	or	al,8	;enable interrupts
	out	dx,al	;reset FDC
	and	byte [m_fdrecal],70h	;clear interrupt and recal flags
	mov	cx,100	;wait a bit
fd_rstw:	out	iowait,ax
	loop	fd_rstw
	xor	al,4	;end reset pulse
	out	dx,al
	call	fd_wait	;wait for interrupt
          jb	fd_rst1	;:bad controller

          mov	bl,0c0h	;expected result
fd_rst0:	mov	al,8	;sense interrupt
	call	fd_cmd	;send command
	jb	fd_rst1	;:error
	call	fd_res	;get results
	jb	fd_rst1	;:error
	cmp	byte [m_fdfile],bl	;drive ready changed state ?
	jnz	fd_rst1	;no: error
	inc	bl
	cmp	bl,0c4h	;done all drives ?
	jb	fd_rst0
	;
	; FDC specify command
	;
	mov	al,3	;specify command
	call	fd_cmd	;send to FDC
	jb	fd_spec9
	mov 	al,[es:si]	;m_fdbase -> step rate, head unload
	call	fd_cmd	;send to FDC
	jb	fd_spec9
	mov 	al,[es:si+1]	;m_fdbase -> motor on time, DMA mode
	call	fd_cmd
	
#if def	FDC_FIFO	;NSC PC87306
	jb	fd_spec9
	mov	al,13h	;configure command
	call	fd_cmd
	jb	fd_spec9
	mov	al,0
	call	fd_cmd
	jb	fd_spec9
	mov	al,00001000xb	;enable FIFO
	call	fd_cmd
	jb	fd_spec9
	mov	al,0	;precompensation track
	call	fd_cmd
#endif

fd_spec9:	mov 	al,[es:si+2]	;m_fdbase -> motor count
	mov	[m_fdcnt],al	;restore motor timer
	jmp	fd_exit

fd_rst1:	or	byte [m_fdstat],20h	;bad controller
fd_rst2:	jmp	fd_exit
         	;
         	; AH=05: format track
         	;
fd_format: call	fd_dma	;convert address ES:BX -> CH:DX
	mov	ax,0200h+4ah	;sectors * 4 shift, DMA mode write
	call	fd_dma2	;complete DMA initialization
	jb	fd_rw90	;:error
	call	fd_seek	;turn on motor, seek to track
	jb	fd_rw90	;:error
	call	cs_waitbx	;wait BX milliseconds	

	mov	al,3	;specify command
	call	fd_cmd	;send to FDC
	jb	fd_rw90
	mov 	al,[es:si]	;m_fdbase -> step rate, head unload
	call	fd_cmd	;send to FDC
	jb	fd_rw90
	mov 	al,[es:si+1]	;m_fdbase -> motor on time, DMA mode
	call	fd_cmd
	jb	fd_rw90

	mov	al,4dh	;format command
	call	fd_cmd
	jb	fd_rw90
	mov	al,[bp._dh]	;head
	shl	al,2
	call	fd_cmd
	jb	fd_rw90
	mov 	al,[es:si+3]	;bytes per sector
	call	fd_cmd
	jb	fd_rw90
	mov 	al,[es:si+4]	;sectors per track
	call	fd_cmd
	jb	fd_rw90
	mov 	al,[es:si+7]	;gap length
	call	fd_cmd
	jb	fd_rw90
	mov 	al,[es:si+8]	;fill byte
	jmp	short fd_rw3	;continue as read / write
	;
	; AH=03: write sectors
	;
fd_write:	call	fd_dma	;convert address ES:BX -> CH:DX
	mov	al,4ah	;DMA mode: write
	call	fd_dma2	;complete DMA initialization
	jb	fd_rw90	;:error
	call	fd_seek	;turn on motor, seek to track
	jb	fd_rw90	;:error
	call	cs_waitbx	;wait BX milliseconds	
	mov	al,0c5h	;write command
	jmp	short fd_rw1
	
fd_rw90:	jmp	fd_rw9
	;
	; AH=04: verify
	;	
fd_verify: call	fd_dma	;convert address ES:BX -> CH:DX
	xor	dx,dx	;clear offset -> no DMA errors
	mov	al,42h	;DMA mode: verify
	jmp	short fd_read2	;rest like read
	;
	; AH=02: read
	;
fd_read:	call	fd_dma	;convert address ES:BX -> CH:DX
	mov	al,46h	;DMA mode: read	
fd_read2:	call	fd_dma2	;complete DMA initialization
	jb	fd_rw90	;:error
	call	fd_seek	;turn on motor, seek to track
	jb	fd_rw90	;:error
fd_read3:	mov	al,0e6h	;FDC read command
	;
	; execute read / write command
	;
fd_rw1:	call	fd_cmd	;command
	jb	fd_rw9	;:error
	mov	al,0	;drive 0
	test	byte [bp._dh],1	;other head ?
	jz	fd_rw2
	or	al,4	;set head bit	
fd_rw2:	call	fd_cmd
	jb	fd_rw9
	mov	al,[bp._ch]	;track number
	call	fd_cmd
	jb	fd_rw9
	mov	al,[bp._dh]	;head number
	call	fd_cmd
	jb	fd_rw9
	mov	al,[bp._cl]	;sector number
	call	fd_cmd
	jb	fd_rw9
	mov 	al,[es:si+3]	;m_fdbase -> bytes / sector
	call	fd_cmd
	jb	fd_rw9
	mov	al,[es:si+4]	;m_fdbase -> end of track sector
	call	fd_cmd
	jb	fd_rw9
	mov 	al,[es:si+5]	;m_fdbase -> gap length
	call	fd_cmd
	jb	fd_rw9
	mov 	al,[es:si+6]	;m_fdbase -> data length
fd_rw3:	call	fd_cmd
	jb	fd_rw9
	call	fd_wait	;wait for interrupt
	jb	fd_rw9
	call	fd_res	;get results
	jb	fd_rw9
	cmp	byte [bp._al],3	;write ?
	jz	fd_rw4
	cmp	byte [bp._al],5	;format ?
	jnz	fd_rw5
fd_rw4:	mov	bx,1	;wait 1 ms after write -> write gate
	call	cs_waitbx	;delay (prevent immediate step away)
fd_rw5:	test	byte [m_fdfile],0c0h	;any error ?
	jz	fd_rw99	;:no
	call	fd_error	;translate error
fd_rw9:	cmp	byte [bp._ah],5	;format ?
	jz	fd_rw99
	mov	byte [bp._al],0	;clear sector count
fd_rw99:	mov 	al,[es:si+2]	;m_fdbase -> motor count
	mov	[m_fdcnt],al
	jmp	fd_exit
	;
	; translate error code
	;
fd_error:	mov	al,20h	;(FDC error)
	test	byte [m_fdfile],80h	;invalid command ?
	jnz	fd_err9	;:yes
	mov	al,[m_fdfile+1]	;ST1 status
	and	al,10110111b	;mask off unused status bits
	mov	bx,fd_errtab+9	;^error table
	stc		;ensure termination
fd_err1:	dec	bx
	rcr	al,1	;test bit
	jnb	fd_err1	;try next
	mov 	al,[cs:bx]	;get correct error code
fd_err9:	or	[m_fdstat],al
	ret
	;
	; error codes
	;
fd_errtab: db	20h	;(bit overflow)
	db	4	;sector not found
	db	20h	;(not used)
	db	10h	;CRC error
	db	8	;DMA overrun
	db	20h	;(not used)
	db	4	;sector not found
	db	3	;write protect
	db	2	;address mark not found
	;
	; Floppy parameters
	;
fd_ptab:	db	0dfh	;step rate, head unload
	db	02	;head load, DMA mode
	db	25h	;motor wait
	db	02	;512 bytes per sector
	db	18	;end of track
	db	24h	;normal gap
	db	0ffh	;DTL
	db	54h	;gap length for format
	db	0f6h	;fill byte for format
	db	15	;head settle time (x 1 ms)
	db	8	;motor start time (x 125 ms)
	;
	; turn on motor
	;
	; out: BX = turn-on delay in ms
	;
fd_motor:	xor	bx,bx	;no settling time required
	
	; turn on motor if required
	
	mov	byte [m_fdcnt],255	;prevent motor shutdown
	mov	byte [m_fdstat],0	;clear error code
	test	byte [m_fdmot],1	;motor running ?
	jnz	fd_mot1	;:yes
	or	byte [m_fdmot],1	;set motor flag
	mov	dx,fdc_ctrl	;turn on motor
	mov	al,00011100xb	;drive 0, DMA enable, not reset
	out	dx,al
	mov 	bl,[es:si+10]	;m_fdbase -> motor start time
	shl	bx,7	;x 128 -> value in ms
fd_mot1:	ret
	;
	; turn on motor, seek to track if needed
	;
	; -> settling time in ms in BX
	;
fd_seek:	call	fd_motor	;turn on motor
	
	; check and reset disk change
	
	mov	dx,fdc_chg	;disk change line active ?
	in	al,dx
	and	al,80h
	jz	fd_seek1x	;:no
#if def	FD_DEBUG
	pusha		;& write a message on disk change
	mov	si,deb_dskch	;&
	call	v_msg	;&
	popa		;&
#endif
	call	fd_seek1z	;recalibrate
	cmp	byte [bp._ch],0	;destination = track 0 ?
	jnz	fd_seek1b
	inc	byte [bp._ch]

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天堂一区二区在线| 国产精品不卡一区| 免费观看在线色综合| 日韩一区二区三区视频| 精品国产伦一区二区三区观看体验| 亚洲国产精品黑人久久久| 成人av综合一区| 精品日韩在线观看| 国产aⅴ精品一区二区三区色成熟| 国产午夜精品久久| 强制捆绑调教一区二区| 色一情一乱一乱一91av| 九九热在线视频观看这里只有精品| 精品久久久影院| 成人精品视频.| 欧美tk丨vk视频| 国产成人自拍网| 亚洲欧美日韩一区| 欧美一区二区三区免费在线看| 亚洲人吸女人奶水| 欧美狂野另类xxxxoooo| 国产在线不卡一区| 亚洲综合视频在线观看| 精品国产伦一区二区三区免费| 菠萝蜜视频在线观看一区| 久久久久久久久久电影| 91在线视频网址| 欧美激情综合在线| 欧美日韩国产小视频在线观看| 狠狠狠色丁香婷婷综合久久五月| 7777女厕盗摄久久久| 国产一区二区精品久久91| 精品国产伦一区二区三区观看体验 | 日本一区二区三区在线不卡 | 亚洲一区二区av在线| 久久久亚洲精品石原莉奈| 欧美亚洲免费在线一区| 国产精品中文欧美| 久久伊人蜜桃av一区二区| 一本色道久久综合亚洲aⅴ蜜桃| 中文字幕在线播放不卡一区| 欧美一区二区三区男人的天堂| 色综合久久综合网| 国产精品免费丝袜| 欧美成人一区二区三区在线观看| 91传媒视频在线播放| 国产毛片一区二区| 免费成人小视频| 久久人人爽爽爽人久久久| 欧美日韩国产在线观看| 亚洲一二三专区| 久久精品夜色噜噜亚洲a∨| 国产高清在线观看免费不卡| 日韩高清电影一区| 亚洲午夜视频在线观看| 亚洲日本中文字幕区| 欧美亚洲愉拍一区二区| 天天综合天天做天天综合| 亚洲乱码中文字幕综合| 欧美日韩dvd在线观看| 色婷婷av一区二区三区软件| 国产91精品露脸国语对白| 久久成人18免费观看| 日韩成人av影视| 日精品一区二区三区| 久久精品日产第一区二区三区高清版| 成人精品视频一区二区三区| 国产精品1区2区| 国产一区二区在线观看视频| 久久99精品国产91久久来源| 91色porny在线视频| 成人小视频免费观看| 国产91精品露脸国语对白| 亚洲一区免费观看| 亚洲精品大片www| 一区二区三区精品| 亚洲一区二区av在线| 午夜影院久久久| 婷婷久久综合九色综合绿巨人| 亚洲第四色夜色| 日韩综合小视频| 久久99精品久久久久久动态图 | 高清不卡在线观看av| 高清国产一区二区三区| 国产91清纯白嫩初高中在线观看| 国产成人在线视频网址| 成人免费毛片片v| 99国产精品视频免费观看| 水野朝阳av一区二区三区| 日韩成人免费看| 亚洲人成精品久久久久久| 亚洲精品国产一区二区三区四区在线 | 久久一二三国产| 色一情一乱一乱一91av| 欧美三级三级三级爽爽爽| www.av亚洲| 91麻豆精品一区二区三区| 色噜噜狠狠色综合欧洲selulu| 在线一区二区观看| 国产精品99久久久久久宅男| 成人av在线影院| 色偷偷久久一区二区三区| 欧美精品一二三四| 欧美中文字幕一区二区三区亚洲| 国产精品资源在线| 青青青爽久久午夜综合久久午夜| 亚洲蜜桃精久久久久久久| 久久精品人人爽人人爽| 1000部国产精品成人观看| 亚洲高清不卡在线| 一区二区在线看| 国产精品麻豆网站| 一区二区三区日本| 久久激情五月婷婷| 91在线观看免费视频| 国产91精品免费| 91黄色免费观看| 精品免费日韩av| 亚洲狠狠丁香婷婷综合久久久| 中文字幕在线观看不卡| 亚洲成a天堂v人片| 亚洲国产精品久久艾草纯爱| 久久精品国产一区二区| 久久国产视频网| aaa国产一区| 欧美大白屁股肥臀xxxxxx| 91麻豆精品91久久久久久清纯| 欧美三级在线视频| 欧美高清在线一区二区| 五月激情综合婷婷| 日本成人在线网站| 日韩精品福利网| 99精品桃花视频在线观看| 欧美一区二区三区不卡| 亚洲少妇中出一区| 国产在线精品一区二区三区不卡 | 欧美日本韩国一区二区三区视频| 在线日韩国产精品| 久久精品无码一区二区三区| 偷拍日韩校园综合在线| 日韩国产成人精品| 国产在线精品一区二区不卡了| 国产老女人精品毛片久久| 欧美蜜桃一区二区三区| 亚洲色图都市小说| 成人激情av网| 欧美精品一区二区在线观看| 日韩国产欧美视频| 国产一区二区成人久久免费影院 | 久久久久久一二三区| 日韩在线卡一卡二| 国产麻豆日韩欧美久久| 国产91丝袜在线18| 色天天综合色天天久久| 中日韩免费视频中文字幕| 亚洲欧美视频在线观看视频| 国产成人a级片| 久久夜色精品国产噜噜av| 中文字幕在线不卡一区| 亚洲一区二区高清| 欧美性xxxxx极品少妇| 亚洲三级在线看| 91美女蜜桃在线| 亚洲欧美一区二区久久| 秋霞av亚洲一区二区三| 国产不卡免费视频| 欧美日韩国产片| 亚洲国产成人porn| 欧美老肥妇做.爰bbww视频| 国产香蕉久久精品综合网| 精品一区二区三区蜜桃| 日韩美一区二区三区| 韩国女主播一区二区三区| 99久久er热在这里只有精品66| 欧美二区在线观看| 天天影视涩香欲综合网| 宅男在线国产精品| 奇米精品一区二区三区在线观看| 精品少妇一区二区三区 | 久久久久久毛片| 国产一区二区免费在线| 中文字幕精品一区二区三区精品| 国产91综合网| 亚洲精品综合在线| 国产精品综合在线视频| 中文一区一区三区高中清不卡| 视频一区二区三区入口| 成av人片一区二区| 亚洲高清不卡在线观看| 国产成人夜色高潮福利影视| 亚洲国产高清在线观看视频| 91免费看`日韩一区二区| 亚洲一区在线视频观看| 成人激情图片网| 亚洲一区二区精品久久av| 日韩精品一区二区三区在线观看 | 欧美一区二区三区视频免费播放 | 日本特黄久久久高潮| 久久先锋资源网| 日本不卡一区二区三区 |