diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/mvdm/sim16/siminit.asm | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to '')
-rw-r--r-- | private/mvdm/sim16/siminit.asm | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/private/mvdm/sim16/siminit.asm b/private/mvdm/sim16/siminit.asm new file mode 100644 index 000000000..ba2e3c45f --- /dev/null +++ b/private/mvdm/sim16/siminit.asm @@ -0,0 +1,234 @@ +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 |