summaryrefslogblamecommitdiffstats
path: root/private/mvdm/sim16/siminit.asm
blob: ba2e3c45f05dd94fec95636e459c2a308f075031 (plain) (tree)









































































































































































































































                                                                              
include incs.inc

    extrn   LocalInit:FAR

    extrn   __acrtused:abs	 ; pull in windows startup code

MAIN_DATA   SEGMENT
    extrn   RespPkt:BYTE
    extrn   ToWOW32Pkt:BYTE
    extrn   WAKEUPPkt:BYTE
    extrn   ACKPkt:BYTE
    extrn   NAKPkt:BYTE
    extrn   GetMemPkt:BYTE
    extrn   SetMemPkt:BYTE
MAIN_DATA   ENDS


MAIN_CODE   SEGMENT
	    ASSUME CS:MAIN_CODE, DS:MAIN_DATA

    extrn   COMISR:NEAR

;*****************************************************************************
;
;   LibEntry, called when DLL is loaded
;
;*****************************************************************************

	    PUBLIC  LibEntry
LibEntry    PROC    FAR

    int     3

    jcxz    LibEntry_Initialize

    push    ds			; heap segment
    xor     ax, ax		;
    push    ax
    push    cx			; heap size
    call    LocalInit		; initialize heap
    or	    ax, ax
    jz	    LibEntry_Fail

LibEntry_Initialize:
    call    Initialize		; initialize com port and buffers

LibEntry_Fail:
    ret

LibEntry    ENDP


;*****************************************************************************
;
;   Initialize com port and memory
;
;*****************************************************************************

	    PUBLIC  Initialize
Initialize  PROC    NEAR

    call    Init_Com		; initialize com port
    or	    ax, ax
    jz	    Initialize_Fail

    push    ax
    call    Init_Mem		; initialize memory
    pop     ax

    ret

Initialize_Fail:
    int     3
    ret

Initialize  ENDP

;*****************************************************************************
;
;   WEP, called when DLL is unloaded
;
;*****************************************************************************

	PUBLIC	WEP

WEP	PROC	FAR

    nop
    ret

WEP	ENDP

;*****************************************************************************
;
;   Initialization of the Port
;
;*****************************************************************************

Init_Com    PROC    NEAR

    mov     dx, SERIALPORT
    mov     dl, LCR
    mov     al, DLAB			    ; turn on divisor latch
    out     dx, al
    DELAY

    mov     dl, RxBuf
    mov     ax, BaudRate		    ; set baud rate
    out     dx, al
    DELAY

    inc     dx
    mov     al, ah
    out     dx, al
    DELAY

    mov     dl, LCR			    ; set LCR
    mov     al, InitLCR
    out     dx, al
    DELAY

    mov     dl, IER			    ; turn on interrupts on 8250
    mov     al, AllInt
    out     dx, al
    DELAY

    mov     dl, MCR			    ; set MCR
    mov     al, InitMCR
    out     dx, al

Init_ClearRegisters:
    mov     dl, LSR
    in	    al, dx
    mov     dl, RxBuf
    in	    al, dx
    mov     dl, MSR
    in	    al, dx
    mov     dl, IIR
    in	    al, dx
    in	    al, dx
    test    al, 1
    jz	    Init_ClearRegisters

    ;
    ; install interrupt handler
    ;

    cli
    mov     al, 0Ch
    push    ds
    mov     dx, SEG MAIN_CODE
    mov     ds, dx
    mov     dx, OFFSET COMISR
    mov     ah, 25h
    int     21h
    pop     ds

    in	    al, PIC_IntEnable
    and     al, 0E7h
    DELAY

    out     PIC_IntEnable, al
    sti

    mov     al, EOI
    out     PIC, al

    mov     ax, 1			; return sucess !

    ret

Init_Com    ENDP


;*****************************************************************************
;
;   Initialize memory ie, allocate buffers and packets
;
;*****************************************************************************

	    PUBLIC  Init_Mem

Init_Mem    PROC    NEAR

    mov     bx, OFFSET RespPkt
    mov     [bx].Start, SOH		    ; start of header
    mov     [bx].Command, RESP		    ; Resp packet

    mov     bx, OFFSET ToWOW32Pkt	    ; ToWOW32 packet
    mov     [bx].Start, SOH		    ; start of header
    mov     [bx].Command, ToWOW32	    ; ToWOW32 packet
    mov     [bx].Len, 9 		    ; length of entire packet
    mov     BYTE PTR [bx+8], EOT	    ; end of transmission

    mov     bx, OFFSET WAKEUPPkt	    ; WAKEUP packet
    mov     [bx].Start, SOH		    ; start of header
    mov     [bx].Command, WAKEUP	    ; WAKEUP packet
    mov     [bx].Len, 9 		    ; length of entire packet
    mov     BYTE PTR [bx+8], EOT	    ; end of transmission

    mov     bx, OFFSET ACKPkt		    ; ACK packet
    mov     [bx].Start, SOH		    ; start of header
    mov     [bx].Command, ACK		    ; ACK packet
    mov     [bx].Len, 5 		    ; length of entire packet
    mov     BYTE PTR [bx+4], EOT	    ; end of transmission

    mov     bx, OFFSET NAKPkt		    ; NAK packet
    mov     [bx].Start, SOH		    ; start of header
    mov     [bx].Command, NAK		    ; NAK packet
    mov     [bx].Len, 5 		    ; length of entire packet
    mov     BYTE PTR [bx+4], EOT	    ; end of transmission

    mov     bx, OFFSET GetMemPkt	    ; GetMem packet
    mov     [bx].Start, SOH		    ; start of header
    mov     [bx].Command, GETMEM	    ; GETMEN packet
    mov     [bx].Len, 11		    ; length of entire packet
    mov     BYTE PTR [bx+10], EOT	     ; end of transmission

    mov     bx, OFFSET SetMemPkt	    ; SetMem packet
    mov     [bx].Start, SOH		    ; start of header
    mov     [bx].Command, SETMEM	    ; SETMEM packet
    mov     [bx].Len, 11		    ; length of entire packet
    mov     BYTE PTR [bx+10], EOT	     ; end of transmission


    ret

Init_Mem    ENDP


MAIN_CODE   ENDS


    END LibEntry