home *** CD-ROM | disk | FTP | other *** search
/ CD-X 3 / cdx_03.iso / democomp / demo / _2complx.arj / 2CLX-SRC.ZIP / INC / LOADER.ASM < prev    next >
Encoding:
Assembly Source File  |  1995-11-10  |  11.9 KB  |  373 lines

  1. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  2. ;
  3. ; CRUNCHED OVERLAY LOADER ROUTINE, THIS IS NOT THE OPTIMIZED VERSION
  4. ; BUT LOOKS MORE STABLE, AND THEREFORE SHOULD BE USED HERE... ;(
  5. ;
  6. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  7.  
  8. FiXPOiNTER      EQU     0
  9. OVERLAYNAME     DB      '2COMPLEX.DAT',0
  10. _FiLEHANDLE     DW      0
  11.  
  12. DADATXT         DB      'M.K.FLT4.FLT8.S3M.XM.OCTA.DMF.FARKA'
  13. BUFFERPOS       DW      2000D
  14. BUFFER          DB      400D DUP('M.K. ')
  15.  
  16. DECMAiNPROC:    SHR     BP,1
  17.                 DEC     DL
  18.                 JE      NOJMPTORET1
  19.                 JMP     JMPTORET1
  20. NOJMPTORET1:
  21.                 PUSHF
  22.                 PUSH    BX
  23.                 PUSH    CX
  24.                 PUSH    DX
  25. GETBUF:         CMP     BUFFERPOS,2000D
  26.                 JE      EMPTYBUF
  27.                 MOV     BX,BUFFERPOS
  28.                 iNC     BUFFERPOS
  29.                 MOV     AL,BYTE PTR CS:[BX+BUFFER]
  30.                 JMP     SKiPLO
  31. EMPTYBUF:       MOV     BUFFERPOS,0
  32.                 MOV     AL,0
  33.                 MOV     CX,2000D
  34.                 XOR     BX,BX
  35. CLRBU:          MOV     BYTE PTR CS:[BX+BUFFER],AL
  36.                 iNC     BX
  37.                 LOOP    CLRBU
  38.                 MOV     BX,_FiLEHANDLE
  39.                 MOV     DX,OFFSET BUFFER
  40.                 PUSH    AX
  41.                 MOV     CX,2000D
  42.                 MOV     AX,3F00H
  43.                 iNT     21H
  44.                 POP     AX
  45.                 JMP     GETBUF
  46. SKiPLO:
  47. GETBUF22:       CMP     BUFFERPOS,2000D
  48.                 JE      EMPTYBUF22
  49.                 MOV     BX,BUFFERPOS
  50.                 iNC     BUFFERPOS
  51.                 MOV     AH,BYTE PTR CS:[BX+BUFFER]
  52.                 JMP     SKiPLO22
  53. EMPTYBUF22:     MOV     BUFFERPOS,0
  54.                 MOV     AH,0
  55.                 MOV     CX,2000D
  56.                 XOR     BX,BX
  57. CLRBU22:        MOV     BYTE PTR CS:[BX+BUFFER],AH
  58.                 iNC     BX
  59.                 LOOP    CLRBU22
  60.                 MOV     BX,_FiLEHANDLE
  61.                 MOV     DX,OFFSET BUFFER
  62.                 PUSH    AX
  63.                 MOV     CX,2000D
  64.                 MOV     AX,3F00H
  65.                 iNT     21H
  66.                 POP     AX
  67.                 JMP     GETBUF22
  68. SKiPLO22:       POP     DX
  69.                 POP     CX
  70.                 POP     BX
  71.                 POPF
  72.                 MOV     BP,AX
  73.                 MOV     DL,10H
  74. JMPTORET1:      RET
  75. CALLEDFROMTHELASTBUT1JB:
  76.                 CALL    DECMAiNPROC
  77.                 RCL     BH,1
  78.                 CALL    DECMAiNPROC
  79.                 JB      JMPFROMJB1
  80.                 MOV     DH,02
  81.                 MOV     CL,03
  82. JMPTOLOOP1:     CALL    DECMAiNPROC
  83.                 JB      JMPFROMJB2
  84.                 CALL    DECMAiNPROC
  85.                 RCL     BH,1
  86.                 SHL     DH,1
  87.                 LOOP    JMPTOLOOP1
  88. JMPFROMJB2:     SUB     BH,DH
  89. JMPFROMJB1:     MOV     DH,2
  90.                 MOV     CL,4
  91. JMPTOLOOP2:     iNC     DH
  92.                 CALL    DECMAiNPROC
  93.                 JB      JMPFROMJB3
  94.                 LOOP    JMPTOLOOP2
  95.                 CALL    DECMAiNPROC
  96.                 JNB     JMPFROMJNB1
  97.                 iNC     DH
  98.                 CALL    DECMAiNPROC
  99.                 JNB     JMPFROMJB3
  100.                 iNC     DH
  101. JMPFROMJB3:     MOV     CL,DH
  102.                 JMP     SHORT FROM1STJMP
  103. JMPFROMJNB1:    CALL    DECMAiNPROC
  104.                 JB      JMPFROMJB4
  105.                 MOV     CL,3
  106.                 MOV     DH,0
  107. FROMLOOP3:      CALL    DECMAiNPROC
  108.                 RCL     DH,1
  109.                 LOOP    FROMLOOP3
  110.                 ADD     DH,9
  111.                 JMP     JMPFROMJB3
  112. JMPFROMJB4:     PUSHF
  113.                 PUSH    BX
  114.                 PUSH    CX
  115.                 PUSH    DX
  116. GETBUF5:        CMP     BUFFERPOS,2000D
  117.                 JE      EMPTYBUF5
  118.                 MOV     BX,BUFFERPOS
  119.                 iNC     BUFFERPOS
  120.                 MOV     AL,BYTE PTR CS:[BX+BUFFER]
  121.                 JMP     SKiPLO5
  122. EMPTYBUF5:      MOV     BUFFERPOS,0
  123.                 MOV     AL,0
  124.                 MOV     CX,2000D
  125.                 XOR     BX,BX
  126. CLRBU5:         MOV     BYTE PTR CS:[BX+BUFFER],AL
  127.                 iNC     BX
  128.                 LOOP    CLRBU5                      ; CLEARiNG THE BUFFER
  129.                 MOV     BX,_FiLEHANDLE
  130.                 MOV     DX,OFFSET BUFFER
  131.                 PUSH    AX
  132.                 MOV     CX,2000D
  133.                 MOV     AX,3F00H
  134.                 iNT     21H
  135.                 POP     AX
  136.                 JMP     GETBUF5
  137. SKiPLO5:        POP     DX
  138.                 POP     CX
  139.                 POP     BX
  140.                 POPF
  141.                 MOV     CL,AL
  142.                 ADD     CX,011H
  143.                 JMP     SHORT FROM1STJMP
  144. CALLEDFROMLASTJB:
  145.                 MOV     CL,3
  146. FROMLOOP4:      CALL    DECMAiNPROC
  147.                 RCL     BH,1
  148.                 LOOP    FROMLOOP4
  149.                 DEC     BH
  150. FROMLASTJNE:    MOV     CL,2
  151. FROM1STJMP:     MOV     AL,ES:[BX+Di]            ; ES POiNTS TO NEWSSEGMENT!
  152.                 CLD
  153.                 STOSB
  154.                 CMP     Di,0
  155.                 JNE     NOT_NESSESSARY_SEGMENT_iNC
  156.                 PUSH    AX
  157.                 MOV     AX,ES
  158.                 ADD     AX,1000H
  159.                 SUB     AH,2
  160.                 MOV     ES,AX
  161.                 MOV     Di,2000H
  162.                 POP     AX
  163. NOT_NESSESSARY_SEGMENT_iNC:
  164.                 LOOP    FROM1STJMP
  165.                 JMP     FROMJMP2
  166. UNPACK:
  167.                 MOV     AX,CS
  168.                 MOV     DS,AX
  169.                 PUSH    ES
  170.                 PUSH    Di
  171.                 MOV     _FiLEHANDLE,BX
  172.                 MOV     CX,2                          ; THERE ARE 50 CHARS THAT WiLL
  173.                 MOV     DX,CS
  174.                 MOV     DS,DX                           ; DS:=CS   !!!!
  175.                 MOV     DX,OFFSET BUFFER                ; BUFFER WiLL BE _SON !!
  176.                 MOV     AX,3F00H
  177.                 iNT     21H
  178.                 MOV     CX,35                           ; CX:=50
  179.                 MOV     AX,DS
  180.                 MOV     ES,AX
  181.                 MOV     Si,OFFSET BUFFER
  182.                 MOV     Di, OFFSET DADATXT
  183. NO_DiFF_iN_HDR:
  184.                 LODSW                                   ; LOADiNG THE BEGiNNiNG AX
  185.                 MOV     BP,AX
  186.                 MOV     DX,10H
  187.                 XOR     CX,CX
  188.                 XOR     BX,BX                               ; AND WE HAVE THE STORiNG
  189.                 POP     Di
  190.                 POP     ES
  191. FROMJMP2:
  192.                 CALL    DECMAiNPROC
  193.                 JNB     FROMJNB2
  194.                 PUSHF
  195.                 PUSH    AX
  196.                 PUSH    BX
  197.                 PUSH    CX
  198.                 PUSH    DX
  199. GETBUF6:        CMP     BUFFERPOS,2000D
  200.                 JE      EMPTYBUF6
  201.                 MOV     BX,BUFFERPOS
  202.                 iNC     BUFFERPOS
  203.                 MOV     AL,BYTE PTR CS:[BX+BUFFER]   ; AL
  204.                 JMP     SKiPLO6
  205. EMPTYBUF6:      MOV     BUFFERPOS,0
  206.                 MOV     AL,0
  207.                 MOV     CX,2000D
  208.                 XOR     BX,BX
  209. CLRBU6:         MOV     BYTE PTR CS:[BX+BUFFER],AL
  210.                 iNC     BX
  211.                 LOOP    CLRBU6                      ; CLEARiNG THE BUFFER
  212.                 MOV     BX,_FiLEHANDLE
  213.                 MOV     DX,OFFSET BUFFER
  214.                 PUSH    AX
  215.                 MOV     CX,2000D
  216.                 MOV     AX,3F00H
  217.                 iNT     21H
  218.                 POP     AX
  219.                 JMP     GETBUF6
  220. SKiPLO6:
  221.                 POP     DX
  222.                 POP     CX
  223.                 POP     BX
  224.         CLD
  225.                 STOSB
  226.                 CMP     Di,0
  227.                 JNE     NOT_NESSESSARY_SEGMENT_iNC2
  228.                 PUSH    AX
  229.                 MOV     AX,ES
  230.                 ADD     AX,1000H
  231.                 SUB     AH,2
  232.                 MOV     ES,AX
  233.                 MOV     Di,2000H
  234.                 POP     AX
  235. NOT_NESSESSARY_SEGMENT_iNC2:
  236.                 POP     AX
  237.                 POPF
  238.                 JMP     FROMJMP2
  239. FROMJNB2:       CALL    DECMAiNPROC
  240.                 PUSHF
  241.                 PUSH    BX
  242.                 PUSH    CX
  243.                 PUSH    DX
  244. GETBUF3:        CMP     BUFFERPOS,2000D
  245.                 JE      EMPTYBUF3
  246.                 MOV     BX,BUFFERPOS
  247.                 iNC     BUFFERPOS
  248.                 MOV     AL,BYTE PTR CS:[BX+BUFFER]   ; AL, CERTAiNLY (BECAUSE OF LODSB)
  249.                 JMP     SKiPLO3
  250. EMPTYBUF3:      MOV     BUFFERPOS,0
  251.                 MOV     AL,0
  252.                 MOV     CX,2000D
  253.                 XOR     BX,BX
  254. CLRBU3:         MOV     BYTE PTR CS:[BX+BUFFER],AL
  255.                 iNC     BX
  256.                 LOOP    CLRBU3                      ; CLEARiNG THE BUFFER
  257.                 MOV     BX,_FiLEHANDLE
  258.                 MOV     DX,OFFSET BUFFER
  259.                 PUSH    AX
  260.                 MOV     CX,2000D
  261.                 MOV     AX,3F00H
  262.                 iNT     21H
  263.                 POP     AX
  264.                 JMP     GETBUF3
  265. SKiPLO3:
  266.                 POP     DX
  267.                 POP     CX
  268.                 POP     BX
  269.                 POPF
  270.                 MOV     BH,0FFH
  271.                 MOV     BL,AL
  272.                 JNB     NOCALLEDFROMTHELASTBUT1JB
  273.                 JMP     CALLEDFROMTHELASTBUT1JB
  274. NOCALLEDFROMTHELASTBUT1JB:
  275.                 CALL    DECMAiNPROC
  276.                 JNB     NOCALLEDFROMLASTJB
  277.                 JMP     CALLEDFROMLASTJB
  278. NOCALLEDFROMLASTJB:
  279.                 CMP     BH,BL
  280.                 JE      NOFROMLASTJNE
  281.                 JMP     FROMLASTJNE
  282. NOFROMLASTJNE:
  283.                 CALL    RESETPARAMS
  284.                 RET
  285.  
  286. KiSCOUNTER    DW 0
  287. NAGYCOUNTER    DW 0
  288.  
  289. RESETPARAMS:
  290.                 MOV     KiSCOUNTER,0
  291.                 MOV     NAGYCOUNTER,0
  292.                 MOV     BUFFERPOS,2000D
  293.                 RET
  294.  
  295. POSiTiON    DW 0,0
  296. LENGHT_        DW 0,0
  297. MARADEK         DW 0
  298. OVERLAYLEN      DW 0
  299. TEXTFLAG    DW 0
  300. WHEREGO         DW 0,0
  301.  
  302. LOADOVERLAY:    PUSHA
  303.                 PUSH    ES
  304.                 PUSH    DS
  305.                 PUSH    BX
  306.                 PUSH    CX
  307.                 PUSH    ES
  308.  
  309.                 PUSH    DS
  310.                 PUSH    DX
  311.                 PUSH    AX
  312.                 MOV     WHEREGO,DS
  313.                 MOV     WHEREGO+2,DX
  314.                 MOV     AX,3D00H
  315.                 PUSH    CS
  316.                 POP     DS
  317.                 MOV     DX,OFFSET OVERLAYNAME
  318.                 iNT     21H                         ;OPEN OVERLAY
  319.                 MOV     BX,AX
  320.  
  321.                 POP     AX
  322.                 MOV     CL,5
  323.                 SHL     AX,CL
  324.                 MOV     DX,AX
  325.                 XOR     CX,CX
  326.                 ADD     DX,24
  327.                 ADD     DX,FiXPOiNTER
  328.                 ADC     CX,0
  329.  
  330.                 MOV     AX,4200H
  331.                 iNT     21H                         ;POiNTER TO POSiTiON
  332.                 MOV     DX,OFFSET POSiTiON
  333.                 MOV     AH,3FH
  334.                 MOV     CX,8
  335.                 iNT     21H
  336.  
  337.                 MOV     DX,POSiTiON
  338.                 MOV     CX,POSiTiON+2
  339.                 ADD     DX,FiXPOiNTER
  340.                 ADC     CX,0
  341.                 MOV     AX,4200H
  342.                 iNT     21H                         ;POiNTS TO FiLE
  343.  
  344.                 MOV     AX,LENGHT_
  345.                 MOV     DX,LENGHT_+2
  346.                 MOV     CX,8000H
  347.                 DiV     CX
  348.                 MOV     CX,AX
  349.                 iNC     CX
  350.                 MOV     MARADEK,DX
  351.                 POP     DX
  352.                 POP     DS
  353.  
  354.                 MOV     ES,WHEREGO
  355.                 MOV     DX,WHEREGO+2
  356.                 MOV     Di,DX
  357.                 PUSH    CS
  358.                 POP     DS
  359.                 MOV     CX,LENGHT_
  360.                 CALL    UNPACK
  361.                 MOV     BX,_FiLEHANDLE
  362.                 MOV     AH,3EH
  363.                 iNT     21H
  364.  
  365.                 MOV     CS:OVERLAYLEN,Di
  366.                 POP     ES
  367.                 POP     CX
  368.                 POP     BX
  369.                 POP     DS
  370.                 POP     ES
  371.                 POPA
  372.                 RET
  373.