home *** CD-ROM | disk | FTP | other *** search
- Microsoft (R) Macro Assembler Version 5.00 6/23/88 20:28:00
- Page 1-1
-
-
- ; C device driver startup
- PAGE 75,118
- ; Philip J. Erdelsky - June 23, 1988
-
- ; request header structure for INIT command
-
- REQ_HEADER STRUC
- 0000 ?? REQ_HDR_LENGTH DB (?)
- 0001 ?? UNIT_CODE DB (?)
- 0002 ?? COMMAND_CODE DB (?)
- 0003 ???? STATUS DW (?)
- 0005 0008[ RESERVED DB 8 DUP (?)
- ??
- ]
-
- 000D ?? NUMBER_OF_UNITS DB (?)
- 000E ???????? END_OF_DRIVER DD (?)
- 0012 REQ_HEADER ENDS
-
- = 8000 ERROR_STATUS = 8000H
- = 0200 BUSY_STATUS = 0200H
- = 0100 DONE_STATUS = 0100H
-
- = 0000 WRITE_PROTECT_VIOLATION = 0
- = 0001 UNKNOWN_UNIT = 1
- = 0002 DRIVE_NOT_READY = 2
- = 0003 UNKNOWN_COMMAND = 3
- = 0004 CRC_ERROR = 4
- = 0005 BAD_DRIVE_REQUEST_STRUCTURE_LENGTH = 5
- = 0006 SEEK_ERROR = 6
- = 0007 UNKNOWN_MEDIA = 7
- = 0008 SECTOR_NOT_FOUND = 8
- = 0009 PRINTER_OUT_OF_PAPER = 9
- = 000A WRITE_FAULT = 10
- = 000B READ_FAULT = 11
- = 000C GENERAL_FAILURE = 12
-
-
- CGROUP GROUP CODE,DDSTACK,STACKTOP
- DGROUP GROUP DATA,UDATA,TDATA
-
- 0000 CODE SEGMENT BYTE PUBLIC 'CODE'
- ASSUME CS:CGROUP
-
- ; device header
-
- 0000 FFFF FFFF DW -1,-1
- 0004 0000 DW 0
- 0006 0036 R DW OFFSET CGROUP:STRATEGY_ENTRY
- 0008 0041 R DW OFFSET CGROUP:INTERRUPT_ENTRY
- 000A 20 20 20 20 20 20 20 DB ' '
- 20
-
- ; command jump table
-
- EXTRN INIT:NEAR
- EXTRN MEDIA_CHECK:NEAR
- EXTRN BUILD_BPB:NEAR
- EXTRN IOCTL_INPUT:NEAR
- EXTRN INPUT:NEAR
- EXTRN NONDESTRUCTIVE_INPUT:NEAR
- EXTRN INPUT_STATUS:NEAR
- EXTRN INPUT_FLUSH:NEAR
- EXTRN OUTPUT:NEAR
- EXTRN OUTPUT_WITH_VERIFY:NEAR
- EXTRN OUTPUT_STATUS:NEAR
- EXTRN OUTPUT_FLUSH:NEAR
- EXTRN IOCTL_OUTPUT:NEAR
-
- 0012 COMMAND_JUMP_TABLE:
- 0012 0000 E DW OFFSET CGROUP:INIT
- Microsoft (R) Macro Assembler Version 5.00 6/23/88 20:28:00
- Page 1-2
-
-
- 0014 0000 E DW OFFSET CGROUP:MEDIA_CHECK
- 0016 0000 E DW OFFSET CGROUP:BUILD_BPB
- 0018 0000 E DW OFFSET CGROUP:IOCTL_INPUT
- 001A 0000 E DW OFFSET CGROUP:INPUT
- 001C 0000 E DW OFFSET CGROUP:NONDESTRUCTIVE_INPUT
- 001E 0000 E DW OFFSET CGROUP:INPUT_STATUS
- 0020 0000 E DW OFFSET CGROUP:INPUT_FLUSH
- 0022 0000 E DW OFFSET CGROUP:OUTPUT
- 0024 0000 E DW OFFSET CGROUP:OUTPUT_WITH_VERIFY
- 0026 0000 E DW OFFSET CGROUP:OUTPUT_STATUS
- 0028 0000 E DW OFFSET CGROUP:OUTPUT_FLUSH
- 002A 0000 E DW OFFSET CGROUP:IOCTL_OUTPUT
-
- ; These items must be saved in the CODE segment because the must be
- ; accessed before the DS register can be loaded
-
- 002C 00000000 SAVE_POINTER DD 0
- 0030 0000 SAVE_SP DW 0
- 0032 0000 SAVE_SS DW 0
- 0034 0000 DGROUP_ADDRESS DW 0
-
- 0036 STRATEGY_ENTRY PROC FAR
-
- 0036 2E: 89 1E 002C R MOV WORD PTR SAVE_POINTER,BX
- 003B 2E: 8C 06 002E R MOV WORD PTR SAVE_POINTER+2,ES
- 0040 CB RET
-
- 0041 STRATEGY_ENTRY ENDP
-
- 0041 INTERRUPT_ENTRY PROC FAR
-
- 0041 50 PUSH AX
- 0042 53 PUSH BX
- 0043 51 PUSH CX
- 0044 52 PUSH DX
- 0045 55 PUSH BP
- 0046 56 PUSH SI
- 0047 57 PUSH DI
- 0048 1E PUSH DS
- 0049 06 PUSH ES
- 004A 2E: 89 26 0030 R MOV SAVE_SP,SP
- 004F 2E: 8C 16 0032 R MOV SAVE_SS,SS
- 0054 FA CLI
- 0055 8C C8 MOV AX,CS
- 0057 8E D0 MOV SS,AX
- 0059 BC 0000 R MOV SP,OFFSET CGROUP:STACKTOP
- 005C FB STI
- 005D 2E: C4 1E 002C R LES BX,SAVE_POINTER
- 0062 26: 8A 47 02 MOV AL,ES:[BX].COMMAND_CODE
- 0066 3C 0C CMP AL,12
- 0068 77 2F JA BAD_DEVICE_DRIVER_FUNCTION
- 006A 98 CBW
- 006B 8B F0 MOV SI,AX
- 006D 03 F0 ADD SI,AX
- 006F 74 30 JZ INITIALIZE
- 0071 2E: 8E 1E 0034 R MOV DS,DGROUP_ADDRESS
- ASSUME DS:DGROUP
- 0076 89 1E 0000 R IE2: MOV REQUEST_HEADER,BX
- 007A 8C 06 0002 R MOV REQUEST_HEADER+2,ES
- 007E 2E: FF 94 0012 R CALL WORD PTR COMMAND_JUMP_TABLE[SI]
- ASSUME DS:NOTHING
-
- PUBLIC EXIT
- 0083 EXIT PROC NEAR
- 0083 EXIT ENDP
-
- 0083 FA CLI
- 0084 2E: 8B 26 0030 R MOV SP,SAVE_SP
- 0089 2E: 8E 16 0032 R MOV SS,SAVE_SS
- 008E FB STI
- 008F 07 POP ES
- Microsoft (R) Macro Assembler Version 5.00 6/23/88 20:28:00
- Page 1-3
-
-
- 0090 1F POP DS
- 0091 5F POP DI
- 0092 5E POP SI
- 0093 5D POP BP
- 0094 5A POP DX
- 0095 59 POP CX
- 0096 5B POP BX
- 0097 58 POP AX
- 0098 CB RET
-
- 0099 INTERRUPT_ENTRY ENDP
-
- PUBLIC BAD_DEVICE_DRIVER_FUNCTION
-
- 0099 BAD_DEVICE_DRIVER_FUNCTION:
- 0099 26: C7 47 03 8103 MOV WORD PTR ES:[BX].STATUS,ERROR_STATUS+DONE_STATUS+UNKNOWN_COMMAND
- 009F EB E2 JMP EXIT
-
- 00A1 INITIALIZE:
- 00A1 B1 04 MOV CL,4
- 00A3 B8 0000 R MOV AX,OFFSET CGROUP:STACKTOP
- 00A6 D3 E8 SHR AX,CL
- 00A8 8C CA MOV DX,CS
- 00AA 03 D0 ADD DX,AX
- 00AC 8E DA MOV DS,DX
- ASSUME DS:DGROUP
- 00AE 2E: 89 16 0034 R MOV DGROUP_ADDRESS,DX
- 00B3 26: C7 47 0E 0000 R MOV WORD PTR ES:[BX].END_OF_DRIVER,OFFSET DGROUP:TDATA
- 00B9 26: 8C 5F 10 MOV WORD PTR ES:[BX].END_OF_DRIVER+2,DS
- 00BD 8C 0E 0006 R MOV DEVICE_HEADER+2,CS
- 00C1 EB B3 JMP IE2
- ASSUME DS:NOTHING
-
- 00C3 CODE ENDS
-
- 0000 DDSTACK SEGMENT WORD PUBLIC 'CODE'
- 0000 0080[ DW 128 DUP (?)
- ????
- ]
-
- 0100 DDSTACK ENDS
-
- 0000 STACKTOP SEGMENT PARA 'CODE'
- 0000 STACKTOP ENDS
-
- 0000 DATA SEGMENT PARA PUBLIC 'DATA'
- PUBLIC REQUEST_HEADER, DEVICE_HEADER
- 0000 ???? REQUEST_HEADER DW (?)
- 0002 ???? DW (?)
- 0004 0000 DEVICE_HEADER DW 0
- 0006 ???? DW (?)
- 0008 DATA ENDS
-
- 0000 UDATA SEGMENT WORD PUBLIC 'DATA'
- 0000 UDATA ENDS
-
- 0000 TDATA SEGMENT WORD PUBLIC 'DATA'
- 0000 TDATA ENDS
-
- END
-
- 195 Source Lines
- 195 Total Lines
- 60 Symbols
-
- 50472 + 208216 Bytes symbol space free
-
- 0 Warning Errors
- 0 Severe Errors
-