Category : Network Files
Archive   : PKTD11A.ZIP
Filename : EXP16MCA.ASM

 
Output of file : EXP16MCA.ASM contained in archive : PKTD11A.ZIP
;keep these in this order.
pos_reg_2 db ?
pos_reg_3 db ?
pos_reg_4 db ?
pos_reg_5 db ?

write_pos_to_eeprom:
;the MCA adapter doesn't use softset. Instead, the driver copies the POS
;registers to the EEPROM, then life goes on as usual.
assume ds:code
movseg es,ds
mov di,offset pos_reg_2
mov dx,102h
mov cx,4
wpte_1:
in al,dx
stosb
inc dx
loop wpte_1

call disable_slot

; Get the board BASE IO from POS configuration.

mov bl, 15
sub bl, pos_reg_3
and bx, 0fh
shl bx, 1
mov bp, io_addresses[bx]

; The 82586 must be reset to reliably read and write the EEPROM.
call reset_586

; First build EEPROM word 0 from POS values into AX.
; Read EEPROM value, and mask off fields we will modify.
xor ax, ax
call read_eeprom
and ax, 0c20h

; Set BASE I/O value (bits 0 - 3).
mov cl, pos_reg_3
and cl, 0fh
or al, cl

; Set BOOT ROM (FLASH) enable (bit 4).
mov cl, pos_reg_2
shl cl, 1
and cl, 10h
or al, cl

; Set BOOT ROM (FLASH) base segment (bits 6 - 9).

mov cl, pos_reg_2
shl cx, 1
shl cx, 1
and cx, 03c0h
or ax, cx

; Set connection type (AUI/OTHER) bit 12.
mov ch, pos_reg_2
shl ch, 1
shl ch, 1
and ch, 10h
or ah, ch

; Set IRQ selection (bits 13 - 15).
mov ch, pos_reg_3
shl ch, 1
and ch, 0e0h
or ah, ch

; Write new EEPROM word 0.
mov bx, ax
xor ax, ax
call write_eeprom
jc copy_pos_to_eeprom_error_j

; Now build EEPROM word 1 from POS values into AX.
; Read EEPROM value, and mask off fields we will modify.
mov ax, 1
call read_eeprom
and ax, 0ff13h

; Set Memory Base address Adjust value (bits 2 - 3).
mov cl, pos_reg_5
and cl, 0ch
or al, cl

; Set Memory megabyte address selection (bits 5 - 6).
mov ch, pos_reg_5
mov cl, 5
shl ch, cl
and ch, 060h
or al, ch

; Set auto-connection enable bit (bit 7).
mov ch, pos_reg_2
mov cl, 6
shl ch, cl
and ch, 80h
or al, ch

; Write new EEPROM word 1.
mov bx, ax
mov ax, 1
call write_eeprom
copy_pos_to_eeprom_error_j:
jc copy_pos_to_eeprom_error

; Now build EEPROM word 5 from POS values into AX.
; Read EEPROM value, and mask off fields we will modify.
mov ax, 5
call read_eeprom
and ax, 0fff9h

; Now set the Boot ROM selection.
mov ch, pos_reg_5
mov cl, 3
shr ch, cl
and ch, 06h
or al, ch

; Write new EEPROM word 5.
mov bx, ax
mov ax, 5
call write_eeprom
jc copy_pos_to_eeprom_error

; Now build EEPROM word 6 from POS values into AX.
; Read EEPROM value, and mask off fields we will modify.
mov ax, 6
call read_eeprom
and ax, 0ff00h

; Set mapping information for segments C and D (bits 0 - 7).
mov al, pos_reg_4

; Write new EEPROM word 6.
mov bx, ax
mov ax, 6
call write_eeprom
jc copy_pos_to_eeprom_error

; Now recompute EEPROM checksum and save it.
; First call routine that sums EEPROM values. We want the sum of all
; values except the checksum which is the last word in the eeprom.
mov cx, 3fh
call check_eeprom

; Calculate word value that if summed with what we have will result
; as 0BABAH.
mov ax, 0babah
sub ax, bx

; Write new checksum value in AX to the last word in the EEPROM.
mov bx, ax
mov ax, 3fh
call write_eeprom

copy_pos_to_eeprom_error:

ret



  3 Responses to “Category : Network Files
Archive   : PKTD11A.ZIP
Filename : EXP16MCA.ASM

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/