home *** CD-ROM | disk | FTP | other *** search
- ; do not modify source - made by solar designer in 1996,
- ; source traded by lord caligo/1997
-
- .model tiny
- .code
- .startup
- .186
-
- cld
- emCPU:
- mov si,emIP
- lodsw
- xchg ax,di
- mov di,[di]
- lodsw
- xchg ax,bx
- or di,[bx]
- lodsw
- xchg ax,di
- not ax
- mov emIP,si
- stosw
- jmp short emCPU
-
- em86_CALLER:
- pusha
- mov ax,em86_R2
- mov word ptr emCPU,ax
- cli
- mov em86_SP,sp
- mov sp,offset em86_REGS
- popa
- mov sp,em86_SP
- sti
- push offset em86_RETURN
- push em86_R1
- em86_RETN:
- retn
- em86_RETURN:
- cli
- mov em86_R1,sp
- mov sp,offset em86_REGS+18
- pushf
- pusha
- mov sp,em86_R1
- mov em86_SP,sp
- sti
- popa
- jmp short emCPU
-
- em86_JMP_CALLER:
- db 0EBh, offset em86_CALLER - 103h
-
- em86_ADD:
- add ax,cx
- sbb cx,cx
- retn
-
- even
- emIP dw emCode
- emSP dw emStack
-
- emConstFFFF dw 0FFFFh
-
- emNOR macro Src1, Src2, Dst
- dw offset Src1, offset Src2, offset Dst
- endm
-
- emNOT macro Src, Dst
- emNOR Src, Src, Dst
- endm
-
- emOR macro Src1, Src2, Dst
- emNOR Src1, Src2, emR1
- emNOT emR1, Dst
- endm
-
- emAND macro Src1, Src2, Dst
- emNOT Src1, emR1
- emNOT Src2, emR2
- emNOR emR1, emR2, Dst
- endm
-
- emXOR macro Src1, Src2, Dst
- emOR Src1, Src2, emR3
- emAND Src1, Src2, emR4
- emNOT emR4, emR4
- emAND emR3, emR4, Dst
- endm
-
- emCLR macro Dst
- emNOT Dst, emR1
- emNOR emR1, Dst, Dst
- endm
-
- emMOV macro Src, Dst
- emOR Src, Src, Dst
- endm
-
- emJMPi macro Src
- emMOV Src, emIP
- endm
-
- emJMP macro Lbl
- local Src
- emJMPi Src
- Src dw offset Lbl
- endm
-
- emJMPsi macro Src1, Src2, Src3
- emAND Src1, Src2, emR3
- emNOT Src3, emR1
- emNOR Src1, emR1, emR4
- emOR emR3, emR4, emIP
- endm
-
- emJMPs macro Src, Lbl1, Lbl2
- local Src1, Src2
- emJMPsi Src, Src1, Src2
- Src1 dw offset Lbl1
- Src2 dw offset Lbl2
- endm
-
- emMOVv_ALT macro Val, Dst
- local Src, Lbl
- emNOR Src, Src, Dst
- emJMP Lbl
- Src dw not Val
- Lbl:
- endm
-
- emMOVv macro Val, Dst
- local Src, Lbl
- emMOV Src, Dst
- emJMP Lbl
- Src dw Val
- Lbl:
- endm
-
- emMOVmv macro Mem, Dst
- local Mod1, Mod2
- emMOV Mem, Mod1
- emMOV Mem, Mod2
- Mod1 = this word
- Mod2 = this word + 2
- emMOV Dst, Dst
- endm
-
- emMOVvm macro Src, Mem
- local Mod
- emMOV Mem, Mod
- emMOV Src, Src
- Mod = this word - 2
- endm
-
- emSTOP macro
- emMOV em86_RETN, emCPU
- endm
-
- em86_CALL macro Lbl
- emMOVv <offset Lbl>, em86_R1
- emMOV emCPU, em86_R2
- emMOV em86_JMP_CALLER, emCPU
- endm
-
- em86_INT macro Num
- local Lbl1, Lbl2
- em86_CALL Lbl1
- emJMP Lbl2
- Lbl1:
- int Num
- retn
- Lbl2:
- endm
-
- emADD macro Src1, Src2, Dst
- emMOV Src1, em86_AX
- emMOV Src2, em86_CX
- em86_CALL em86_ADD
- emMOV em86_AX, Dst
- endm
-
- emADDv macro Val, Src, Dst
- local SrcVal, Lbl
- emADD SrcVal, Src, Dst
- emJMP Lbl
- SrcVal dw Val
- Lbl:
- endm
-
- emBIN macro Src, Dst
- emADD emConstFFFF, Src, emR1
- emMOV em86_CX, Dst
- endm
-
- emJMPci macro Src1, Src2, Src3
- emBIN Src1, emR5
- emJMPsi emR5, Src2, Src3
- endm
-
- emJMPc macro Src, Lbl1, Lbl2
- local Src1, Src2
- emJMPci Src, Src1, Src2
- Src1 dw offset Lbl1
- Src2 dw offset Lbl2
- endm
-
- emPUSH macro Src
- emMOVvm Src, emSP
- emADDv 2, emSP, emSP
- endm
-
- emPUSHv macro Val
- local Src, Lbl
- emPUSH Src
- emJMP Lbl
- Src dw Val
- Lbl:
- endm
-
- emPOP macro Dst
- emADDv -2, emSP, emSP
- emMOVmv emSP, Dst
- endm
-
- emCALL macro Lbl
- local RetLbl
- emPUSHv <offset RetLbl>
- emJMP Lbl
- RetLbl:
- endm
-
- emRET macro
- emPOP emIP
- endm
-
- emByteMask:
- dw 0FFh
-
- emCode:
- emMOVv <offset Copyright>, emVR1
- emCALL emPrintText
- emCALL emPrintCRLF
-
- emMOVv <offset EnterPwd>, emVR1
- emCALL emPrintText
-
- emCALL emInputText
- emCALL emPrintCRLF
-
- emCALL emEncryptPwd
- emXOR emV_EncryptedPwd1, emVR4, emVR1
- emJMPc emVR1, emWrongPwd, emExtraCheck
-
- emExtraCheck:
- emXOR emV_EncryptedPwd2, emVR5, emVR1
- emJMPc emVR1, emWrongPwd, emCorrectPwd
-
- emWrongPwd:
- emMOVv <offset WrongPwdMsg>, emVR1
- emJMP emPrintPwdMsg
-
- emCorrectPwd:
- emMOVv <offset CorrectPwdMsg>, emVR1
-
- emPrintPwdMsg:
- emCALL emPrintText
- emCALL emPrintCRLF
-
- emSTOP
-
- emPrintText:
- emMOVv 0AAh, emVR4
- emPrintNext:
- emMOVmv emVR1, emVR3
- emXOR emVR4, emVR3, emVR2
- emMOV emVR3, emVR4
- emAND emByteMask, emVR2, emVR2
- emJMPc emVR2, emDoPrint, emLeavePrint
- emDoPrint:
- emADDv 1, emVR1, emVR1
- emCALL emPrintChar
- emJMP emPrintNext
- emLeavePrint:
- emRET
-
- emPrintChar:
- emMOV emVR2, em86_DX
- emMOVv 200h, em86_AX
- em86_INT 21h
- emRET
-
- emPrintCRLF:
- emMOVv 13, emVR2
- emCALL emPrintChar
- emMOVv 10, emVR2
- emCALL emPrintChar
- emRET
-
- emInputText:
- emMOVv <offset emV_Buffer>, em86_DX
- emMOVv 0A00h, em86_AX
- em86_INT 21h
- emRET
-
- emEncryptPwd:
- emMOVv <offset emV_Buffer + 2>, emVR1
- emCLR emVR4
- emEncryptNext:
- emMOVmv emVR1, emVR3
- emAND emByteMask, emVR3, emVR2
- emXOR emConst000D, emVR2, emVR2
- emJMPc emVR2, emDoEncrypt, emLeaveEncrypt
- emDoEncrypt:
- emADDv 1, emVR1, emVR1
- emMOV emVR4, emVR5
- emXOR emVR3, emVR4, emVR4
- emJMP emEncryptNext
- emLeaveEncrypt:
- emRET
-
- EncryptText macro Text
- local Val
- Val = 0AAh
- irpc Char, <&Text>
- Val = Val xor '&Char'
- db Val
- endm
- db Val
- endm
-
- Copyright:
- EncryptText <Emulated Solar CPU Copyright (c) 1996 by Solar Designer>
-
- EnterPwd:
- EncryptText <Enter password: >
-
- WrongPwdMsg:
- EncryptText <Incorrect password>
-
- CorrectPwdMsg:
- EncryptText <Thanks>
-
- emV_EncryptedPwd1 dw 7528h
- emV_EncryptedPwd2 dw 784Dh
-
- emConst000D dw 000Dh
-
- emV_Buffer db 16, 19 dup (?)
-
- even
- em86_R1 dw ?
- em86_R2 dw ?
-
- em86_REGS:
- em86_DI dw ?
- em86_SI dw ?
- em86_BP dw ?
- em86_SP dw ?
- em86_BX dw ?
- em86_DX dw ?
- em86_CX dw ?
- em86_AX dw ?
- em86_FLAGS dw ?
-
- emR1 dw ?
- emR2 dw ?
- emR3 dw ?
- emR4 dw ?
- emR5 dw ?
- emR6 dw ?
-
- emVR1 dw ?
- emVR2 dw ?
- emVR3 dw ?
- emVR4 dw ?
- emVR5 dw ?
- emVR6 dw ?
-
- emStack:
-
- end
-