|
|
1.1 ! root 1: / (lgl- ! 2: / COHERENT Driver Kit Version 1.1.0 ! 3: / Copyright (c) 1982, 1990 by Mark Williams Company. ! 4: / All rights reserved. May not be copied without permission. ! 5: / -lgl) ! 6: //////// ! 7: / ! 8: / PS Hard Disk Assembler Support ! 9: ! 10: ! 11: .globl com_data_, fcn_trn0_, fcn_trn1_,fcn_trn2_,fcn_trn7_,fcn_trn15_ ! 12: .globl i0_, i1_, i2_, i7_, i15_, end_table_ ! 13: ! 14: .shri ! 15: ! 16: .globl iresult_, mlkh_ ! 17: iresult_: ! 18: mov ax,cs:mlkh_ ! 19: ret ! 20: ! 21: mlkh_: .word 0x1234 ! 22: ! 23: .blkb 15 ! 24: extram: .blkb 15 ! 25: .blkb 15 ! 26: com_data_:.blkb 0x80 ! 27: fcn_trn0_: ! 28: .blkb 0x10 ! 29: dev_blk0_: ! 30: .blkb 0x10 ! 31: fcn_trn1_: ! 32: .blkb 0x50 ! 33: dev_blk1_: ! 34: .blkb 0x56 ! 35: fcn_trn2_: ! 36: .blkb 0x40 ! 37: dev_blk2_: ! 38: .blkb 0x96 ! 39: fcn_trn7_: ! 40: .blkb 0x50 ! 41: dev_blk7_: ! 42: .blkb 0x56 ! 43: fcn_trn15_: ! 44: .blkb 0x58 ! 45: dev_blk15_: ! 46: .blkb 0x2e ! 47: end_table_: ! 48: ! 49: i0_: .word 0 ! 50: i1_: .word 0 ! 51: i2_: .word 0 ! 52: i7_: .word 0 ! 53: i15_: .word 0 ! 54: ! 55: sp_: .blkw 0x24 ! 56: it_: .blkw 432 /This gives room for 18 items ! 57: ! 58: ! 59: .globl iabios_r_ ! 60: iabios_r_: ! 61: mov ax,cs ! 62: mov ds,ax ! 63: mov es,ax ! 64: ! 65: mov di,$sp_ / Destination for the system parameter table ! 66: call build_sys_p ! 67: mov di,$it_ / Destination for the Initialization tables ! 68: call build_itab ! 69: ! 70: ! 71: mov si,0 ! 72: movb cl,$24 ! 73: 0: ! 74: mov ax, si ! 75: cmp ax, sp_+30 ! 76: jge 2f ! 77: ! 78: imulb cl ! 79: mov di, ax ! 80: add di,$it_ ! 81: ! 82: cmp (di), $0 ! 83: jne 1f ! 84: mov i0_, di ! 85: 1: ! 86: cmp (di), $1 ! 87: jne 1f ! 88: mov i1_, di ! 89: 1: ! 90: cmp (di), $2 ! 91: jne 1f ! 92: mov i2_, di ! 93: 1: ! 94: cmp (di), $7 ! 95: jne 1f ! 96: mov i7_, di ! 97: 1: ! 98: cmp (di), $15 ! 99: jne 1f ! 100: mov i15_, di ! 101: 1: ! 102: inc si ! 103: jmp 0b ! 104: 2: ! 105: call init_dev ! 106: mov cs:mlkh_, ax ! 107: ret ! 108: ! 109: ! 110: build_sys_p: ! 111: push ds ! 112: ! 113: xor ax,ax / Set Ds to 0, meaning that there are no Ram ! 114: mov ds,ax / extentions to be loaded ! 115: movb ah,$4 ! 116: int 0x15 / Bios call to build the System parameter table ! 117: ! 118: jc 1f / Error? ! 119: ! 120: xor ax,ax / No error ! 121: ! 122: 0: pop ds / Restore registers and return ! 123: ret ! 124: ! 125: 1: mov ax,$0xffff / Return that an error has occured ! 126: jmp 0b ! 127: ! 128: ! 129: ! 130: build_itab: ! 131: push ds ! 132: ! 133: mov ax,$extram / Set up extram so that it starts at the ! 134: shr ax,$4 / begining of a segment. This is becuase ! 135: mov bx,ds / the Cbios is expecting a pointer of the ! 136: add ax,bx / sort DS:0 ! 137: mov ds,ax ! 138: mov 0,$0xaa55 / Extram header value. ! 139: movb ah,$5 ! 140: int 0x15 / Cbios call to build init table ! 141: ! 142: jc 1f / Error? ! 143: ! 144: xor ax,ax / No error ! 145: ! 146: 0: pop ds / Restore registers and return ! 147: ret ! 148: ! 149: 1: mov ax,$0xffff / Return that an error has occured ! 150: jmp 0b ! 151: ! 152: ! 153: init_dev: ! 154: mov ax,$com_data_/ Set up com_data so that it starts at the ! 155: shr ax,$4 / begining of a segment. This is becuase ! 156: mov dx,ds / the Cbios is expecting a pointer of the ! 157: add ax,dx / sort DS:0 for the Common data table ! 158: mov ds,ax ! 159: ! 160: mov 0,$72 / Pointer to pointer 0. Note that as we add ! 161: / devices to the system, this will move ! 162: / farther down by 8 for every db/ftt pair ! 163: / and 6 for every data pointer. ! 164: ! 165: mov 2,$6 / Number of pointer pairs in the table ! 166: mov 8,$0 / Dummy dev blk and fcn tbl pntr for Id 1 ! 167: mov 10,$0 / This is required for initialization ! 168: mov 12,$0 / Remember only to have one for Id 1. This ! 169: mov 14,$0 / Fails if you also have one for Id 0. ! 170: mov 16,$dev_blk0_ /\ ! 171: mov 18,dx / \ ! 172: mov 20,$fcn_trn0_ / \ ! 173: mov 22,dx / | ! 174: mov 24,$dev_blk1_ / | ! 175: mov 26,dx / | ! 176: mov 28,$fcn_trn1_ / | long ptrs to the device blocks and ! 177: mov 30,dx / | the function transfer tables for ! 178: mov 32,$dev_blk7_ / | devs 0, 1, 7, 15, 2 ! 179: mov 34,dx / | ! 180: mov 36,$fcn_trn7_ / | ! 181: mov 38,dx / | ! 182: mov 40,$dev_blk15_ / | ! 183: mov 42,dx / | ! 184: mov 44,$fcn_trn15_ / | ! 185: mov 46,dx / | ! 186: mov 48,$dev_blk2_ / | ! 187: mov 50,dx / / ! 188: mov 52,$fcn_trn2_ / / ! 189: mov 54,dx // ! 190: ! 191: / At this point we should initialize the pointer ! 192: / part of the table, but since these values ! 193: / are already 0, we can skip it. ! 194: ! 195: ! 196: mov bx, cs:i0_ / Initialize the internal functions ! 197: mov cx,$1 ! 198: mov dx,$0x2 / Logical device 2 ! 199: ! 200: .word 0xff26, 0x065f / calll es:(bx+6) ! 201: ! 202: cmpb al,$0 / Was there an error? ! 203: jne 0f ! 204: ! 205: mov bx, cs:i1_ / Initialize the diskette ! 206: mov cx,$1 ! 207: mov dx,$3 / Logical device 3 ! 208: ! 209: .word 0xff26, 0x065f / calll es:(bx+6) ! 210: ! 211: cmpb al,$0 / Was there an error? ! 212: jne 0f ! 213: ! 214: mov bx, cs:i7_ / Initialize the system timer ! 215: mov cx,$1 ! 216: mov dx,$4 / Logical device 4 ! 217: ! 218: .word 0xff26, 0x065f / calll es:(bx+6) ! 219: ! 220: cmpb al,$0 / Was there an error? ! 221: jne 0f ! 222: ! 223: mov bx, cs:i15_ / Initialize the DMA ! 224: mov cx,$1 ! 225: mov dx,$5 / Logical device 5 ! 226: ! 227: .word 0xff26, 0x065f / calll es:(bx+6) ! 228: ! 229: cmpb al,$0 / Was there an error? ! 230: jne 0f ! 231: ! 232: mov bx, cs:i2_ / Initialize the hard disk ! 233: mov cx,$1 ! 234: mov dx,$6 / Logical device 6 ! 235: ! 236: .word 0xff26, 0x065f / calll es:(bx+6) ! 237: ! 238: cmpb al,$0 / Was there an Error? ! 239: je 1f ! 240: ! 241: 0: mov ax,$0xffff / Inform caller that we could not init ! 242: 1: ret ! 243: ! 244: ! 245: .globl d2_func_, com_data_p_, fcn2_, fcn2p_, dev2p_ ! 246: d2_func_: ! 247: push bp ! 248: mov bp,sp ! 249: ! 250: push com_data_p_+2 / save the anchor pointer segment ! 251: ! 252: push sds_ / Save the request block segment ! 253: push 4(bp) / Save the request block offset ! 254: ! 255: push fcn2p_+2 / Save the Function transfer table Segment ! 256: push fcn2p_ / Save the Function transfer table Offset ! 257: ! 258: push dev2p_+2 / Save the device block Segment ! 259: push dev2p_ / Save the device block Offset ! 260: ! 261: mov bx,6(bp) / Bx points to start, interrupt or time-out ! 262: .word 0x9fff,fcn2_ / Call far (bx + fcn2_) ! 263: 1: ! 264: add sp,$0xe / Clean up the stack ! 265: ! 266: pop bp ! 267: ret ! 268: ! 269: ! 270: ! 271: .globl d1_func_, fcn1_, fcn1p_, dev1p_ ! 272: d1_func_: ! 273: push bp ! 274: mov bp,sp ! 275: ! 276: push com_data_p_+2 / save the anchor pointer segment ! 277: ! 278: push sds_ / Save the request block segment ! 279: push 4(bp) / Save the request block offset ! 280: ! 281: push fcn1p_+2 / Save the Function transfer table Segment ! 282: push fcn1p_ / Save the Function transfer table Offset ! 283: ! 284: push dev1p_+2 / Save the device block Segment ! 285: push dev1p_ / Save the device block Offset ! 286: ! 287: mov bx,6(bp) / Bx points to start, interrupt or time-out ! 288: .globl aaazq ! 289: aaazq: ! 290: .word 0x9fff,fcn1_ / Call far (bx + fcn2_) ! 291: 1: ! 292: add sp,$0xe / Clean up the stack ! 293: ! 294: pop bp ! 295: ret ! 296: ! 297: ! 298: ! 299: ! 300: .globl pip_ ! 301: pip_: ! 302: pop ax ! 303: push ax ! 304: ret
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.