Changeset 472 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h
- Timestamp:
- Oct 2, 2012, 6:28:46 PM (12 years ago)
- google:author:
- aitotat@gmail.com
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH1Eh_XTCF.asm
r471 r472 38 38 ;-------------------------------------------------------------------- 39 39 AH1Eh_HandlerForXTCFfeatures: 40 eMOVZX bx, al ; Subcommand to BX40 xor ah, ah ; Subcommand now in AX 41 41 %ifndef USE_186 42 call AH1Eh_ProcessXTCFsubcommandFrom BX42 call AH1Eh_ProcessXTCFsubcommandFromAX 43 43 jmp Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH 44 44 %else 45 45 push Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH 46 ; Fall to AH1Eh_ProcessXTCFsubcommandFrom BX46 ; Fall to AH1Eh_ProcessXTCFsubcommandFromAX 47 47 %endif 48 48 49 49 50 50 ;-------------------------------------------------------------------- 51 ; AH1Eh_ProcessXTCFsubcommandFrom BX51 ; AH1Eh_ProcessXTCFsubcommandFromAX 52 52 ; Parameters: 53 ; BX: XT-CF subcommand (see XTCF.inc for more info)53 ; AX: XT-CF subcommand (see XTCF.inc for more info) 54 54 ; DS:DI: Ptr to DPT (in RAMVARS segment) 55 55 ; SS:BP: Ptr to IDEPACK … … 60 60 ; AL, BX, CX, DX 61 61 ;-------------------------------------------------------------------- 62 AH1Eh_ProcessXTCFsubcommandFromBX: 62 AH1Eh_ProcessXTCFsubcommandFromAX: 63 ; IS_THIS_DRIVE_XTCF. We check this for all commands. 64 dec ax ; Subcommand 65 mov dx, [di+DPT.wXTCFport] 66 test dx, dx ; Never zero for XT-CF, Always zero for other devices 67 jz SHORT XTCFnotFound 68 69 ; READ_XTCF_CONTROL_REGISTER_TO_DH 70 add dl, XTCF_CONTROL_REGISTER ; DX to Control Register 71 dec ax ; Subcommand 72 jnz SHORT .SkipReadXtcfControlRegisterToDH 73 in al, dx 74 mov [bp+IDEPACK.intpack+INTPACK.dh], al 75 jmp SHORT .ReturnWithSuccess 76 .SkipReadXtcfControlRegisterToDH: 77 78 ; WRITE_DH_TO_XTCF_CONTROL_REGISTER 79 dec ax ; Subcommand 80 jnz SHORT XTCFnotFound ; Invalid subcommand 81 mov al, [bp+IDEPACK.intpack+INTPACK.dh] 82 out dx, al 83 .ReturnWithSuccess: 84 xor ah, ah 85 ret 86 87 88 ;-------------------------------------------------------------------- 89 ; AH1Eh_DetectXTCFwithBasePortInDX 90 ; Parameters: 91 ; DX: Base I/O port address to check 92 ; Returns: 93 ; AH: RET_HD_SUCCESS if XT-CF is found from port 94 ; RET_HD_INVALID if XT-CF is not found 95 ; CF: Cleared if XT-CF found 96 ; Set if XT-CF not found 97 ; Corrupts registers: 98 ; AL, DX 99 ;-------------------------------------------------------------------- 100 AH1Eh_DetectXTCFwithBasePortInDX: 101 add dl, XTCT_CONTROL_REGISTER_INVERTED_in ; set DX to XT-CF config register (inverted) 102 in al, dx ; get value 103 mov ah, al ; save in ah 104 inc dx ; set DX to XT-CF config register (non-inverted) 105 in al, dx ; get value 106 not al ; invert it 107 sub ah, al ; do they match? (clear AH if they do) 108 jz SHORT XTCFfound 109 110 XTCFnotFound: 111 stc ; set carry flag since XT-CF not found 112 mov ah, RET_HD_INVALID 113 XTCFfound: 114 ret ; and return
Note:
See TracChangeset
for help on using the changeset viewer.