home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 2 / FreeSoftwareCollection2pd199x-jp.img / ms_dos / meniwaru / 3dflt86.asm next >
Assembly Source File  |  1990-06-14  |  18KB  |  1,278 lines

  1.     INCLUDE    YAM3D86.LIB
  2.     ASSUME    DS:DATA,CS:CODE
  3. LINEXE    MACRO    X0,Y0,X1,Y1
  4.     MOV    AX,X0
  5.     MOV    BX,Y0
  6.     MOV    CX,X1
  7.     MOV    DX,Y1
  8.     $LINE
  9.     ENDM
  10. BOX    MACRO    X0,Y0,X1,Y1
  11.     LINEXE    X0,Y0,X1,Y0
  12.     LINEXE    X0,Y0,X0,Y1
  13.     LINEXE    X1,Y0,X1,Y1
  14.     LINEXE    X0,Y1,X1,Y1
  15.     ENDM
  16. ;
  17. ;**ABOUT CONDITION CODE
  18. ;
  19. TAKEOFF    EQU    0000000000000001B
  20. LANDING    EQU    0000000000000010B
  21. ABOUT    EQU    1000000000000000B
  22. BADPICH    EQU    0100000000000000B
  23. LOWSPD    EQU    0010000000000000B
  24. HISPD    EQU    0001000000000000B
  25. COUT    EQU    0000100000000000B
  26. ;
  27. ;
  28. ;
  29. DANG    EQU    1
  30. DSPD    EQU    1
  31. TOSPD    EQU    60
  32. TDSPD    EQU    30
  33. LBOUND    EQU    5
  34. LOWEST    EQU    3
  35. HIGHEST    EQU    1000
  36. SLOWEST    EQU    20
  37. FASTEST    EQU    118
  38. DWNSPD    EQU    35
  39. PORTX0    EQU    -15
  40. PORTZ0    EQU    -750
  41. PORTX1    EQU    15
  42. PORTZ1    EQU    750
  43. ;
  44. SCRNX0    EQU    150
  45. SCRNY0    EQU    10
  46. SCRNX1    EQU    489
  47. SCRNY1    EQU    SCRNY0+250
  48. CENTX    EQU    (SCRNX0+SCRNX1)/2
  49. CENTY    EQU    (SCRNY0+SCRNY1)/2
  50. ;
  51. RDX0    EQU    90
  52. RDY0    EQU    SCRNY1+5
  53. RDX1    EQU    RDX0+120
  54. RDY1    EQU    RDY0+120
  55. ;
  56. POWMAX    EQU    59
  57. POWX0    EQU    RDX1+10
  58. POWY0    EQU    RDY0
  59. POWX1    EQU    POWX0+20
  60. POWY1    EQU    POWY0+(POWMAX*2)+2
  61. ;
  62. POSTX0    EQU    429
  63. POSTY0    EQU    RDY0
  64. POSTX1    EQU    POSTX0+120
  65. POSTY1    EQU    POSTY0+120
  66. POSTCX    EQU    (POSTX0+POSTX1)/2
  67. POSTCY    EQU    (POSTY0+POSTY1)/2
  68. ;
  69. HIGHTX    EQU    RDX0+25
  70. HIGHTY0    EQU    SCRNY0
  71. HIGHTY1    EQU    SCRNY1
  72. HIGHTST    EQU    5
  73. ;
  74. ILSH_X    EQU    CENTX
  75. ILSH_Y    EQU    SCRNY1+20
  76. ;
  77. DIRCX    EQU    CENTX
  78. DIRCY    EQU    ILSH_Y+70
  79. DIRR    EQU    40
  80. ;
  81. SPDMAX    EQU    FASTEST
  82. SPDX0    EQU    POSTX0-30
  83. SPDY0    EQU    POSTY0
  84. SPDX1    EQU    SPDX0+20
  85. SPDY1    EQU    SPDY0+SPDMAX+2
  86. ;
  87. DATA    SEGMENT    PUBLIC
  88.     INCLUDE    EARTH.ASM
  89. PROGRAM    DB    "1990 山川 総司作"
  90. ;
  91. MX    DW    0
  92. MY    DW    500
  93. MZ    DW    -4000
  94. MPICH    DW    0
  95. MBANK    DW    0
  96. MHEAD    DW    0
  97. MSPEED    DW    0
  98. MPOWER    DW    0
  99. MFUEL    DW    0
  100. CCODE    DW    0
  101. PCTR    DW    0
  102. ;
  103. POSTSX0    DW    0
  104. POSTSY0    DW    0
  105. POSTSX1    DW    0
  106. POSTSY1    DW    0
  107. HIGHTS    DW    0
  108. POWSTK    DW    0
  109. ILS_HS    DW    0
  110. DIRSX    DW    0
  111. DIRSY    DW    0
  112. SPDS    DW    0
  113. ;
  114. Y3WORK    DB    512 DUP(?)
  115. DRWBUF    DB    4096 DUP(?)
  116. ERSBUF    DB    4096 DUP(?)
  117. ;
  118. MES_LS    DB    "失速しました。"
  119. SIZ_LS    EQU    $-MES_LS
  120. MES_HS    DB    "機の耐久速度をオーバーしました。"
  121. SIZ_HS    EQU    $-MES_HS
  122. MES_CO    DB    "コースアウトしました。"
  123. SIZ_CO    EQU    $-MES_CO
  124. MES_BP    DB    "機首から地面に突っ込みました。"
  125. SIZ_BP    EQU    $-MES_BP
  126. MES_SF    DB    "COMPLETE!"
  127. SIZ_SF    EQU    $-MES_SF
  128. MES_HR    DB    "Hit  RETURN(V1.0)"
  129. SIZ_HR    EQU    $-MES_HR
  130. MES_YM    DB    "S.Yamakawa  Presents"
  131. SIZ_YM    EQU    $-MES_YM
  132. ;
  133. DATA    ENDS
  134. ;
  135. ;
  136. CODE    SEGMENT    PUBLIC
  137. ;
  138. CLIPF    PROC
  139. ;
  140. ;    DS:[DI]   +2   +4   +6  +8  +10  +12  +14  +16
  141. ;         X1   Y1   X2   Y2  --  CPX1 CPY1 CPX2 CPY2
  142.     MOV    AX,[DI+10]
  143.     CMP    [DI  ],AX
  144.     JGE    CPF_0
  145.     CMP    [DI+4],AX
  146.     JGE    CPF_0
  147.     JMP    FAR PTR CPF_OUT
  148. ;
  149. CPF_0:    MOV    AX,[DI+14]
  150.     CMP    [DI  ],AX
  151.     JLE    CPF_1
  152.     CMP    [DI+4],AX
  153.     JLE    CPF_1
  154.     JMP    FAR PTR CPF_OUT
  155. ;
  156. CPF_1:    MOV    AX,[DI+12]
  157.     CMP    [DI+2],AX
  158.     JGE    CPF_2
  159.     CMP    [DI+6],AX
  160.     JGE    CPF_2
  161.     JMP    FAR PTR CPF_OUT
  162. ;
  163. CPF_2:    MOV    AX,[DI+16]
  164.     CMP    [DI+2],AX
  165.     JLE    CPF_3
  166.     CMP    [DI+6],AX
  167.     JLE    CPF_3
  168.     JMP    FAR PTR CPF_OUT
  169. ;
  170. ;    完全に画面外ではない
  171. ;
  172. ;
  173. ;    X1<CPX1?
  174. CPF_3:    MOV    BX,[DI+10]
  175.     CMP    [DI  ],BX
  176.     JGE    CP_X21
  177. ;CLIP    X1=CPX1
  178.     MOV    [DI+8],BX
  179.     $CLIPX
  180.     MOV    [DI  ],BX
  181.     MOV    [DI+2],AX
  182.     JMP    [CP_X21]
  183. ;
  184. ;    X2<CPX1?
  185. CP_X21:    MOV    BX,[DI+10]
  186.     CMP    [DI+4],BX
  187.     JGE    CP_X12
  188. ;CLIP    X2=CPX1
  189.     MOV    [DI+8],BX
  190.     $CLIPX
  191.     MOV    [DI+4],BX
  192.     MOV    [DI+6],AX
  193. ;
  194. ;    X1>CPX2?
  195. CP_X12:    MOV    BX,[DI+14]
  196.     CMP    [DI  ],BX
  197.     JLE    CP_X22
  198. ;CLIP    X1=CPX2
  199.     MOV    [DI+8],BX
  200.     $CLIPX
  201.     MOV    [DI  ],BX
  202.     MOV    [DI+2],AX
  203.     JMP    [CP_Y11]
  204. ;
  205. ;    X2>CPX2?
  206. CP_X22:    MOV    BX,[DI+14]
  207.     CMP    [DI+4],BX
  208.     JLE    CP_Y11
  209.     MOV    [DI+8],BX
  210.     $CLIPX
  211.     MOV    [DI+4],BX
  212.     MOV    [DI+6],AX
  213. ;
  214. ;    Y1<CPY1?
  215. CP_Y11:    MOV    BX,[DI+12]
  216.     CMP    [DI+2],BX
  217.     JGE    CP_Y21
  218.     MOV    [DI+8],BX
  219.     $CLIPY
  220.     MOV    [DI  ],AX
  221.     MOV    [DI+2],BX
  222.     JMP    [CP_Y22]
  223. ;
  224. ;    Y2<CPY1?
  225. CP_Y21:    MOV    BX,[DI+12]
  226.     CMP    [DI+6],BX
  227.     JGE    CP_Y12
  228.     MOV    [DI+8],BX
  229.     $CLIPY
  230.     MOV    [DI+4],AX
  231.     MOV    [DI+6],BX
  232. ;
  233. ;    Y1>CPY2?
  234. CP_Y12:    MOV    BX,[DI+16]
  235.     CMP    [DI+2],BX
  236.     JLE    CP_Y22
  237.     MOV    [DI+8],BX
  238.     $CLIPY
  239.     MOV    [DI  ],AX
  240.     MOV    [DI+2],BX
  241.     JMP    [CLP_EX]
  242. ;
  243. ;    Y2>CPY2?
  244. CP_Y22:    MOV    BX,[DI+16]
  245.     CMP    [DI+6],BX
  246.     JLE    CLP_EX
  247.     MOV    [DI+8],BX
  248.     $CLIPY
  249.     MOV    [DI+4],AX
  250.     MOV    [DI+6],BX
  251. ;
  252. ;    LAST CHECK
  253. CLP_EX:    MOV    AX,[DI+10]
  254.     CMP    [DI  ],AX
  255.     JL    CPF_OUT
  256.     CMP    [DI+4],AX
  257.     JL    CPF_OUT
  258.     MOV    AX,[DI+14]
  259.     CMP    [DI  ],AX
  260.     JG    CPF_OUT
  261.     CMP    [DI+4],AX
  262.     JG    CPF_OUT
  263. ;
  264.     MOV    AX,[DI+12]
  265.     CMP    [DI+2],AX
  266.     JL    CPF_OUT
  267.     CMP    [DI+6],AX
  268.     JL    CPF_OUT
  269.     MOV    AX,[DI+16]
  270.     CMP    [DI+2],AX
  271.     JG    CPF_OUT
  272.     CMP    [DI+6],AX
  273.     JG    CPF_OUT
  274.     RET
  275. ;
  276. CPF_OUT:MOV    AX,0
  277.     MOV    [DI  ],AX
  278.     MOV    [DI+2],AX
  279.     MOV    [DI+4],AX
  280.     MOV    [DI+6],AX
  281.     RET
  282. CLIPF    ENDP
  283. ;
  284. ;
  285. ;
  286. MAKEDSP    PROC
  287.     MOV    DI,OFFSET Y3WORK
  288.     $PALET    0,0
  289.     $PALET    1,9
  290.     $PALET    2,10
  291.     $PALET    3,11
  292.     $PALET    4,12
  293.     $PALET    5,13
  294.     $PALET    6,14
  295.     $PALET    7,15
  296.     $PALET    8,0
  297.     $PALET    9,9
  298.     $PALET    10,10
  299.     $PALET    11,11
  300.     $PALET    12,12
  301.     $PALET    13,13
  302.     $PALET    14,14
  303.     $PALET    15,15
  304. ;
  305.     MOV    AL,7
  306.     $GCOLOR
  307.     $PSET
  308.     BOX    SCRNX0,SCRNY0,SCRNX1,SCRNY1
  309.     BOX    RDX0,RDY0,RDX1,RDY1
  310.     BOX    POWX0,POWY0,POWX1,POWY1
  311.     BOX    POSTX0,POSTY0,POSTX1,POSTY1
  312.     BOX    SPDX0,SPDY0,SPDX1,SPDY1
  313.     LINEXE    SPDX0-4,SPDY1-SLOWEST-3,SPDX0  ,SPDY1-SLOWEST-3
  314.     LINEXE    SPDX1  ,SPDY1-SLOWEST-3,SPDX1+4,SPDY1-SLOWEST-3
  315. ;
  316.     MOV    BX,HIGHTY1
  317.     MOV    DX,HIGHTY1
  318. HIGHTL:    MOV    AX,HIGHTX
  319.     MOV    CX,HIGHTX+9
  320.     PUSH    BX
  321.     $LINE
  322.     POP    BX
  323.     MOV    DX,BX
  324. ;
  325.     MOV    AX,HIGHTX+20
  326.     MOV    CX,HIGHTX+29
  327.     PUSH    BX
  328.     $LINE
  329.     POP    BX
  330.     MOV    DX,BX
  331.     SUB    BX,HIGHTST*5
  332.     SUB    DX,HIGHTST*5
  333.     CMP    DX,HIGHTY0
  334.     JGE    HIGHTL
  335. ;
  336.     MOV    BX,HIGHTY1
  337.     MOV    DX,HIGHTY1
  338. HIGHT2:    MOV    AX,HIGHTX
  339.     MOV    CX,HIGHTX+4
  340.     PUSH    BX
  341.     $LINE
  342.     POP    BX
  343.     MOV    DX,BX
  344. ;
  345.     MOV    AX,HIGHTX+25
  346.     MOV    CX,HIGHTX+29
  347.     PUSH    BX
  348.     $LINE
  349.     POP    BX
  350.     MOV    DX,BX
  351.     SUB    BX,HIGHTST
  352.     SUB    DX,HIGHTST
  353.     CMP    DX,HIGHTY0
  354.     JGE    HIGHT2
  355. ;
  356. ;ILS_HORIZONTAL
  357.     LINEXE    ILSH_X           ,ILSH_Y,ILSH_X         ,ILSH_Y+9
  358.     LINEXE    ILSH_X+PORTX0*2  ,ILSH_Y,ILSH_X+PORTX0*2,ILSH_Y+4
  359.     LINEXE    ILSH_X+PORTX1*2  ,ILSH_Y,ILSH_X+PORTX1*2,ILSH_Y+4
  360.     BOX    ILSH_X+PORTX0*4-5,ILSH_Y,ILSH_X+PORTX0*4,ILSH_Y+9
  361.     BOX    ILSH_X+PORTX1*4+5,ILSH_Y,ILSH_X+PORTX1*4,ILSH_Y+9
  362. ;
  363.     MOV    BX,0
  364. DIRL:    MOV    AX,DIRR
  365.     $COS
  366.     MOV    CX,AX
  367.     MOV    AX,DIRR
  368.     $SIN
  369.     MOV    DX,AX
  370.     PUSH    BX
  371.     ADD    CX,DIRCX
  372.     ADD    DX,DIRCY
  373.     $POINT
  374.     POP    BX
  375.     INC    BX
  376.     CMP    BX,1024
  377.     JNE    DIRL
  378. ;
  379.     RET
  380. MAKEDSP    ENDP
  381. ;
  382. ;
  383. ;
  384. DRAWEXE    PROC
  385.     MOV    SI,OFFSET EARTH
  386.     MOV    DI,OFFSET DRWBUF
  387.     $MKFRM    4000H+32*3+31
  388.     MOV    DI,OFFSET ERSBUF
  389.     $MKFRM    4000H+32*3+31
  390. ;
  391.     MOV    DI,OFFSET Y3WORK
  392.     $PSET
  393.     ;
  394.     MOV    AX,1
  395.     PUSH    AX
  396. DEX_0:    MOV    DI,OFFSET Y3WORK
  397. ;
  398.     MOV    AX,[MHEAD]
  399.     NEG    AX
  400.     MOV    [DI+6],AX
  401.     MOV    AX,[MPICH]
  402.     NEG    AX
  403.     MOV    [DI+8],AX
  404.     MOV    AX,[MBANK]
  405.     NEG    AX
  406.     MOV    [DI+10],AX
  407. ;
  408. DEX_1:    MOV    DI,OFFSET Y3WORK
  409.     MOV    AX,[SI]
  410.     SUB    AX,[MX]
  411.     MOV    [DI],AX
  412. ;
  413.     MOV    AX,[MY]
  414.     NEG    AX
  415.     MOV    [DI+2],AX
  416. ;
  417.     MOV    AX,[SI+2]
  418.     SUB    AX,[MZ]
  419.     MOV    [DI+4],AX
  420.     $3DROLL
  421.     MOV    AX,[DI+4]
  422.     CMP    AX,1
  423.     JG    DEX_1_2
  424.     JMP    FAR PTR DEX_OUT
  425. ;
  426. DEX_1_2:MOV    AX,[DI]
  427.     MOV    DX,100
  428.     IMUL    DX
  429.     MOV    BX,DX
  430.     AND    BX,BX
  431.     JNS    DEX122
  432.     NEG    BX
  433. DEX122:    SHL    BX,1
  434.     SHL    BX,1
  435.     CMP    BX,[DI+4]
  436.     JL    DEX_1_3
  437.     JMP    [DEX_OUT]
  438. ;
  439. DEX_1_3:MOV    BX,[DI+4]
  440.     IDIV    BX
  441.     MOV    CX,AX
  442. ;
  443.     MOV    AX,[DI+2]
  444.     MOV    DX,100
  445.     IMUL    DX
  446.     MOV    BX,DX
  447.     AND    BX,BX
  448.     JNS    DEX132
  449.     NEG    BX
  450. DEX132:    SHL    BX,1
  451.     SHL    BX,1
  452.     CMP    BX,[DI+4]
  453.     JL    DEX_1_4
  454.     JMP    [DEX_OUT]
  455. ;
  456. DEX_1_4:MOV    BX,[DI+4]
  457.     IDIV    BX
  458.     MOV    DX,AX
  459. ;
  460.     ADD    CX,CENTX
  461.     NEG    DX
  462.     ADD    DX,CENTY
  463. ;
  464.     CMP    CX,SCRNX0
  465.     JLE    DEX_OUT
  466.     CMP    CX,SCRNX1
  467.     JGE    DEX_OUT
  468.     CMP    DX,SCRNY0
  469.     JLE    DEX_OUT
  470.     CMP    DX,SCRNY1
  471.     JGE    DEX_OUT
  472. ;
  473.     MOV    DI,OFFSET DRWBUF
  474.     $ADFRM
  475.     MOV    DI,OFFSET ERSBUF
  476.     $ADFRM
  477. ;
  478. DEX_OUT:ADD    SI,4
  479.     MOV    AX,[SI]
  480.     CMP    AX,7FFFH
  481.     JE    DEX_O_2
  482.     JMP    [DEX_1]
  483. ;
  484. DEX_O_2:ADD    SI,2
  485.     POP    AX
  486.     MOV    DI,OFFSET Y3WORK
  487.     $GCOLOR
  488.     MOV    DI,OFFSET DRWBUF
  489.     $GDRAW
  490.     $MKFRM    4000H+3*32+31
  491.     INC    AX
  492.     CMP    AX,7
  493.     JE    DEX_END
  494.     PUSH    AX
  495.     JMP    [DEX_0]
  496. ;
  497. DEX_END:RET
  498. DRAWEXE    ENDP
  499. ;
  500. GOFWRD    PROC
  501.     PUSH    AX
  502.     PUSH    BX
  503.     PUSH    DX
  504. ;
  505.     MOV    AX,[MSPEED]
  506.     MOV    BX,[MPICH]
  507.     $COS
  508.     MOV    BX,[MHEAD]
  509.     $SIN
  510.     SUB    [MX],AX
  511. ;
  512.     MOV    AX,[MSPEED]
  513.     MOV    BX,[MPICH]
  514.     $COS
  515.     MOV    BX,[MHEAD]
  516.     $COS
  517.     ADD    [MZ],AX
  518. ;
  519.     MOV    AX,[MSPEED]
  520.     MOV    BX,[MPICH]
  521.     $SIN
  522.     ADD    [MY],AX
  523.     CMP    [MY],LOWEST
  524.     JG    GF_0
  525.     MOV    [MY],LOWEST
  526. ;
  527. GF_0:    CMP    [MY],HIGHEST
  528.     JL    GF_1
  529.     MOV    [MY],HIGHEST
  530. ;
  531. GF_1:    POP    DX
  532.     POP    BX
  533.     POP    AX
  534.     RET
  535. GOFWRD    ENDP    
  536. ;
  537. CENTLIN    PROC
  538.     MOV    DI,OFFSET Y3WORK
  539.     $PSET
  540.     MOV    AL,7
  541.     $GCOLOR
  542.     LINEXE    CENTX-10,CENTY  ,CENTX-5,CENTY
  543.     LINEXE    CENTX+10,CENTY  ,CENTX+5,CENTY
  544.     LINEXE    CENTX   ,CENTY-8,CENTX  ,CENTY-5
  545.     LINEXE    CENTX   ,CENTY+8,CENTX  ,CENTY+5
  546.     RET
  547. CENTLIN    ENDP
  548. ;
  549. ;
  550. ;
  551. RADER    PROC
  552.     PUSH    AX
  553.     PUSH    CX
  554.     PUSH    DX
  555.     PUSH    DI
  556.     MOV    DI,OFFSET Y3WORK
  557.     MOV    AL,1
  558.     $GCOLOR    
  559.     LINEXE    RDX0+1,(RDY0+RDY1)/2,RDX1-1,(RDY0+RDY1)/2
  560.     LINEXE    (RDX0+RDX1)/2,RDY0+1,(RDX0+RDX1)/2,RDY1-1
  561.     MOV    AL,6
  562.     $GCOLOR
  563.     MOV    AX,[MX]
  564.     CWD
  565.     MOV    DI,273
  566.     IDIV    DI
  567.     MOV    CX,AX
  568.     MOV    AX,[MZ]
  569.     CWD
  570.     MOV    DI,-273
  571.     IDIV    DI
  572.     MOV    DX,AX
  573.     ADD    CX,(RDX0+RDX1)/2
  574.     ADD    DX,(RDY0+RDY1)/2
  575.     CMP    CX,RDX0
  576.     JLE    RDR_EX
  577.     CMP    CX,RDX1
  578.     JGE    RDR_EX
  579.     CMP    DX,RDY0
  580.     JLE    RDR_EX
  581.     CMP    DX,RDY1
  582.     JGE    RDR_EX
  583.     MOV    DI,OFFSET ERSBUF
  584.     $ADFRM
  585.     MOV    DI,OFFSET Y3WORK
  586.     $POINT
  587. RDR_EX:    POP    DI
  588.     POP    DX
  589.     POP    CX
  590.     POP    AX
  591.     RET
  592. RADER    ENDP
  593. ;
  594. ;
  595. ;
  596. HIGHTM    PROC
  597.     MOV    DI,OFFSET Y3WORK
  598.     $PRESET
  599.     MOV    BX,[HIGHTS]
  600.     MOV    DX,[HIGHTS]
  601.     MOV    AX,HIGHTX+10
  602.     MOV    CX,HIGHTX+19
  603.     $LINE
  604.     $PSET
  605.     MOV    AL,2
  606.     $GCOLOR
  607. ;
  608.     MOV    DX,[MY]
  609.     SUB    DX,LOWEST
  610.     SHR    DX,1
  611.     NEG    DX
  612.     ADD    DX,HIGHTY1
  613.     CMP    DX,HIGHTY0
  614.     JGE    HIGHTE
  615.     MOV    DX,HIGHTY0
  616. HIGHTE:    MOV    [HIGHTS],DX
  617.     MOV    BX,DX
  618.     MOV    AX,HIGHTX+10
  619.     MOV    CX,HIGHTX+19
  620.     $LINE
  621.     RET
  622. HIGHTM    ENDP
  623. ;
  624. ;
  625. ;
  626. POWMTR    PROC
  627.     MOV    DI,OFFSET Y3WORK
  628.     MOV    SI,[MPOWER]
  629.     SUB    SI,[POWSTK]
  630.     JNE    PWMTR0
  631. ;
  632.     RET
  633. ;
  634. PWMTR0:    JG    PWUP0
  635. PWDWN0:    $PRESET
  636.     MOV    BX,[MPOWER]
  637.     INC    BX
  638.     SHL    BX,1
  639.     NEG    BX
  640.     ADD    BX,POWY1
  641.     MOV    DX,BX
  642. PWDWN1:    MOV    AX,POWX0+1
  643.     MOV    CX,POWX1-1    
  644.     PUSH    BX
  645.     PUSH    SI
  646.     $LINE
  647.     POP    SI
  648.     POP    BX
  649.     SUB    BX,2
  650.     MOV    DX,BX
  651. ;    
  652.     INC    SI
  653.     JNE    PWDWN1
  654.     MOV    AX,[MPOWER]
  655.     MOV    [POWSTK],AX
  656.     RET
  657. POWMTR    ENDP
  658. ;
  659. PWUP0:    $PSET
  660.     MOV    AL,2
  661.     $GCOLOR
  662.     MOV    BX,[MPOWER]
  663.     SHL    BX,1
  664.     NEG    BX
  665.     ADD    BX,POWY1
  666.     MOV    DX,BX
  667. PWUP1:    MOV    AX,POWX0+1
  668.     MOV    CX,POWX1-1
  669.     PUSH    BX
  670.     PUSH    SI
  671.     $LINE
  672.     POP    SI
  673.     POP    BX
  674.     ADD    BX,2
  675.     MOV    DX,BX
  676.     DEC    SI
  677.     JNE    PWUP1
  678.     MOV    AX,[MPOWER]
  679.     MOV    [POWSTK],AX
  680.     RET
  681. ;
  682. ;
  683. ;
  684. POSTURE    PROC
  685.     MOV    DI,OFFSET Y3WORK
  686. ;
  687.     MOV    BX,[MPICH]
  688.     AND    BX,1023
  689. ;
  690.     CMP    BX,768
  691.     JL    POST0
  692.     SUB    BX,1024
  693.     JMP    POST1
  694. ;
  695. POST0:    CMP    BX,256
  696.     JL    POST1
  697.     SUB    BX,512
  698. ;
  699. POST1:    NEG    BX
  700.     MOV    [DI+2],BX
  701.     MOV    [DI+6],BX
  702. ;
  703.     MOV    BX,[MBANK]
  704.     NEG    BX
  705.     MOV    CX,400
  706.     MOV    DX,[DI+2]
  707.     $ROLL
  708.     MOV    [DI  ],CX
  709.     NEG    DX
  710.     MOV    [DI+2],DX
  711. ;
  712.     MOV    BX,[MBANK]
  713.     NEG    BX
  714.     MOV    CX,-400
  715.     MOV    DX,[DI+6]
  716.     $ROLL
  717.     MOV    [DI+4],CX
  718.     NEG    DX
  719.     MOV    [DI+6],DX
  720. ;
  721.     ADD    WORD PTR [DI  ],POSTCX
  722.     ADD    WORD PTR [DI+2],POSTCY
  723.     ADD    WORD PTR [DI+4],POSTCX
  724.     ADD    WORD PTR [DI+6],POSTCY
  725. ;
  726.     MOV    WORD PTR [DI+10],POSTX0+1
  727.     MOV    WORD PTR [DI+12],POSTY0+1
  728.     MOV    WORD PTR [DI+14],POSTX1-1
  729.     MOV    WORD PTR [DI+16],POSTY1-1
  730. ;
  731.     CALL    [CLIPF]
  732. ;
  733.     ADD    DI,8
  734.     $PRESET
  735.     MOV    AX,[POSTSX0]
  736.     MOV    BX,[POSTSY0]
  737.     MOV    CX,[POSTSX1]
  738.     MOV    DX,[POSTSY1]
  739.     $LINE
  740.     MOV    AL,7
  741.     $GCOLOR
  742.     $PSET
  743.     LINEXE    (POSTCX+POSTX0)/2,POSTCY,(POSTCX+POSTX1)/2,POSTCY
  744.     SUB    DI,8
  745. ;
  746.     MOV    AX,[DI  ]
  747.     MOV    BX,[DI+2]
  748.     MOV    CX,[DI+4]
  749.     MOV    DX,[DI+6]
  750.     MOV    [POSTSX0],AX
  751.     MOV    [POSTSY0],BX
  752.     MOV    [POSTSX1],CX
  753.     MOV    [POSTSY1],DX
  754.     $LINE
  755. ;
  756.     RET
  757. POSTURE    ENDP
  758. ;
  759. ;
  760. ;
  761. ILS_HOR    PROC
  762.     MOV    DI,OFFSET Y3WORK
  763.     $PRESET
  764.     MOV    AX,[ILS_HS]
  765.     MOV    BX,ILSH_Y-1
  766.     MOV    CX,[ILS_HS]
  767.     SUB    CX,5
  768.     MOV    DX,ILSH_Y-6
  769.     $LINE
  770.     MOV    AX,[ILS_HS]
  771.     MOV    BX,ILSH_Y-1
  772.     MOV    CX,[ILS_HS]
  773.     ADD    CX,5
  774.     MOV    DX,ILSH_Y-6
  775.     $LINE
  776.     MOV    AL,2
  777.     $GCOLOR
  778. ;
  779.     MOV    AX,(PORTX0+PORTX1)/2
  780.     SUB    AX,[MX]
  781.     CMP    AX,PORTX0*2
  782.     JG    ILS_H0
  783.     MOV    AX,PORTX0*2
  784. ILS_H0:    CMP    AX,PORTX1*2
  785.     JL    ILS_H1
  786.     MOV    AX,PORTX1*2
  787. ;
  788. ILS_H1:    MOV    BX,[MZ]
  789.     AND    BX,BX
  790.     JS    ILS_H2
  791.     NEG    AX
  792. ILS_H2:    MOV    BX,2
  793.     IMUL    BX
  794.     ADD    AX,ILSH_X
  795.     MOV    [ILS_HS],AX
  796. ;
  797.     $PSET
  798.     MOV    AX,[ILS_HS]
  799.     MOV    BX,ILSH_Y-1
  800.     MOV    CX,[ILS_HS]
  801.     SUB    CX,5
  802.     MOV    DX,ILSH_Y-6
  803.     $LINE
  804.     MOV    AX,[ILS_HS]
  805.     MOV    BX,ILSH_Y-1
  806.     MOV    CX,[ILS_HS]
  807.     ADD    CX,5
  808.     MOV    DX,ILSH_Y-6
  809.     $LINE
  810. ;
  811.     RET
  812. ILS_HOR    ENDP
  813. ;
  814. ;
  815. ;
  816. HEADANG    PROC
  817.     MOV    DI,OFFSET Y3WORK
  818.     $PRESET
  819.     MOV    AX,DIRCX
  820.     MOV    BX,DIRCY
  821.     MOV    CX,[DIRSX]
  822.     MOV    DX,[DIRSY]
  823.     $LINE
  824.     MOV    AL,6
  825.     $GCOLOR
  826.     $PSET
  827. ;
  828.     MOV    BX,[MHEAD]
  829.     ADD    BX,256
  830.     MOV    AX,DIRR-5
  831.     $COS
  832.     MOV    CX,AX
  833.     MOV    BX,[MHEAD]
  834.     ADD    BX,256
  835.     MOV    AX,DIRR-5
  836.     $SIN
  837.     MOV    DX,AX
  838. ;
  839.     ADD    CX,DIRCX
  840.     NEG    DX
  841.     ADD    DX,DIRCY
  842.     MOV    [DIRSX],CX
  843.     MOV    [DIRSY],DX
  844. ;
  845.     MOV    AX,DIRCX
  846.     MOV    BX,DIRCY
  847.     $LINE
  848.     RET
  849. HEADANG    ENDP
  850. ;
  851. ;
  852. ;
  853. SPEEDM    PROC
  854.     MOV    DI,OFFSET Y3WORK
  855.     MOV    AL,2
  856.     $GCOLOR
  857.     CMP    WORD PTR [MSPEED],TOSPD
  858.     JL    SPDM2
  859.     MOV    AL,6
  860.     $GCOLOR
  861. SPDM2:    $PRESET
  862.     MOV    AX,SPDX0+1
  863.     MOV    BX,[SPDS]
  864.     MOV    CX,SPDX1-1
  865.     MOV    DX,[SPDS]
  866.     $LINE
  867.     $PSET
  868.     MOV    AX,SPDX0+1
  869.     MOV    CX,SPDX1-1
  870.     MOV    BX,SPDY1-1
  871.     SUB    BX,[MSPEED]
  872.     MOV    DX,BX
  873.     MOV    [SPDS],BX
  874.     $LINE
  875.     RET
  876. SPEEDM    ENDP
  877. ;
  878. ;
  879. ;
  880. RADDER    PROC
  881.     MOV    BX,[MBANK]
  882.     AND    BX,511
  883.     JNE    RAD0
  884.     RET
  885. ;
  886. RAD0:    MOV    AX,BX
  887.     SUB    AX,256
  888.     JNS    RAD1
  889.     NEG    AX
  890. RAD1:    NEG    AX
  891.     ADD    AX,256
  892.     SHR    AX,1
  893.     SHR    AX,1
  894.     SHR    AX,1
  895.     SHR    AX,1
  896.     ADC    AX,0
  897.     SHR    AX,1
  898.     ADC    AX,0
  899.     $SIN
  900.     SUB    [MY],AX
  901. ;
  902.     MOV    AX,BX
  903.     AND    AX,255
  904.     SUB    AX,128
  905.     JNS    RAD2
  906.     NEG    AX
  907. RAD2:    NEG    AX
  908.     ADD    AX,128
  909.     SHR    AX,1
  910.     SHR    AX,1
  911.     SHR    AX,1
  912.     ADC    AX,0
  913.     SHR    AX,1
  914.     ADC    AX,0
  915.     $COS
  916.     ADD    [MHEAD],AX
  917. ;
  918.     RET
  919. RADDER    ENDP
  920. ;
  921. ;
  922. ;
  923. PULLUP    PROC
  924.     MOV    AX,DANG*2
  925.     MOV    BX,[MBANK]
  926.     $COS
  927.     ADD    [MPICH],AX
  928.     MOV    AX,DANG*2
  929.     MOV    BX,[MBANK]
  930.     $SIN
  931.     ADD    [MHEAD],AX
  932.     RET
  933. PULLUP    ENDP
  934. ;
  935. PULLDWN    PROC    
  936.     MOV    AX,DANG*2
  937.     MOV    BX,[MBANK]
  938.     $COS
  939.     SUB    [MPICH],AX
  940.     MOV    AX,DANG*2
  941.     MOV    BX,[MBANK]
  942.     $SIN
  943.     SUB    [MHEAD],AX
  944.     RET
  945. PULLDWN    ENDP
  946. ;
  947. KEYSCAN    PROC
  948.     MOV    DI,OFFSET Y3WORK
  949.     $K_READ
  950. ;
  951.     $K_CHK    4FH    ;←
  952.     JE    KS_2
  953.     MOV    AX,[CCODE]
  954.     AND    AX,LANDING
  955.     JNE    KS_1L
  956.     ADD    [MBANK],DANG
  957.     JMP    KS_2
  958. KS_1L:    ADD    [MHEAD],DANG
  959. KS_2:    $K_CHK    51H    ;→
  960.     JE    KS_3
  961.     MOV    AX,[CCODE]
  962.     AND    AX,LANDING
  963.     JNE    KS_2L
  964.     SUB    [MBANK],DANG
  965.     JMP    KS_3
  966. KS_2L:    SUB    [MHEAD],DANG
  967. KS_3:    $K_CHK    4DH
  968.     JE    KS_4
  969.     CALL    [PULLDWN]
  970. KS_4:    $K_CHK    50H
  971.     JE    KS_7
  972.     CALL    [PULLUP]
  973. KS_7:    $K_CHK    11H
  974.     JE    KS_8
  975.     ADD    [MPOWER],DSPD
  976.     CMP    [MPOWER],POWMAX
  977.     JL    KS_8
  978.     MOV    [MPOWER],POWMAX
  979. KS_8:    $K_CHK    1EH
  980.     JE    KS_9
  981.     SUB    [MPOWER],DSPD
  982.     JNS    KS_9
  983.     MOV    [MPOWER],0
  984. KS_9:    $K_CHK    01H
  985.     JE    KS_10
  986.     MOV    AH,4CH
  987.     INT    21H
  988. KS_10:    $K_BUFC
  989.     RET
  990. KEYSCAN    ENDP
  991. ;
  992. ;
  993. ;
  994. POWSPD    PROC
  995.     MOV    AX,[MPOWER]
  996.     CMP    AX,20
  997.     JG    PS1
  998.     SUB    WORD PTR [MSPEED],1
  999.     JMP    PSX
  1000. ;
  1001. PS1:    CMP    AX,40
  1002.     JG    PS2
  1003.     JMP    PSX
  1004. ;
  1005. PS2:    CMP    AX,45
  1006.     JG    PS3
  1007.     ADD    WORD PTR [MSPEED],2
  1008.     JMP    PSX
  1009. ;
  1010. PS3:    CMP    AX,50
  1011.     JG    PS4
  1012.     ADD    WORD PTR [MSPEED],4
  1013.     JMP    PSX
  1014. ;
  1015. PS4:    ADD    WORD PTR [MSPEED],6
  1016. ;
  1017. PSX:    CMP    WORD PTR [MSPEED],0
  1018.     JG    PSY
  1019.     MOV    WORD PTR [MSPEED],0
  1020. ;
  1021. PSY:    CMP    WORD PTR [MSPEED],FASTEST
  1022.     JL    C_LAND
  1023.     MOV    WORD PTR [MSPEED],FASTEST
  1024. POWSPD    ENDP
  1025. ;
  1026. ;
  1027. ;
  1028. CONDITN    PROC
  1029. C_LAND:    MOV    AX,[CCODE]
  1030.     AND    AX,LANDING
  1031.     JNE    C_LAN0
  1032.     JMP    C_PRUN
  1033. ;
  1034. C_LAN0:    CMP    [MY],LOWEST+LBOUND
  1035.     JLE    C_LN01
  1036.     JMP    C_PRUN
  1037. ;
  1038. C_LN01:    MOV    [MY],LOWEST
  1039.     MOV    AX,[MSPEED]
  1040.     AND    AX,AX
  1041.     JNE    C_LAN1
  1042. ;
  1043.     MOV    WORD PTR [CCODE],ABOUT
  1044.     RET
  1045. ;
  1046. ;
  1047. C_LAN1:    CMP    WORD PTR [MSPEED],TDSPD
  1048.     JG    C_LAN2
  1049.     SUB    WORD PTR [MPICH],4
  1050. C_LAN2:    CMP    WORD PTR [MPICH],0
  1051.     JG    C_LAN3
  1052.     MOV    WORD PTR [MPICH],0
  1053. C_LAN3:    MOV    WORD PTR [MBANK],0
  1054. ;
  1055.     CMP    WORD PTR [MX],PORTX0
  1056.     JL    C_LOUT
  1057.     CMP    WORD PTR [MX],PORTX1
  1058.     JG    C_LOUT
  1059.     CMP    WORD PTR [MZ],PORTZ0
  1060.     JL    C_LOUT
  1061.     CMP    WORD PTR [MZ],PORTZ1
  1062.     JG    C_LOUT
  1063.     RET 
  1064. ;
  1065. C_LOUT:    OR    WORD PTR [CCODE],ABOUT
  1066.     OR    WORD PTR [CCODE],COUT
  1067.     RET
  1068. ;
  1069. ;
  1070. C_PRUN:    MOV    AX,[CCODE]
  1071.     AND    AX,TAKEOFF
  1072.     JE    C_PR0
  1073.     JMP    C_FLT
  1074. ;
  1075. C_PR0:    CMP    [MY],LOWEST
  1076.     JG    C_PR2
  1077. ;
  1078.     JMP    C_LAN1    ;COURSE OUT CHECK
  1079. ;
  1080. C_PR2:    CMP    WORD PTR [MSPEED],TOSPD
  1081.     JL    C_LOW
  1082.     OR    WORD PTR [CCODE],TAKEOFF
  1083.     MOV    AX,NOT LANDING
  1084.     AND    WORD PTR [CCODE],AX
  1085.     RET
  1086. ;
  1087. C_LOW:    OR    WORD PTR [CCODE],ABOUT
  1088.     OR    WORD PTR [CCODE],LOWSPD
  1089.     RET
  1090. ;
  1091. C_FLT:    CMP    WORD PTR [MY],LOWEST
  1092.     JG    C_FLT1
  1093.     CMP    WORD PTR [MPICH],0
  1094.     JL    C_CRSH
  1095.     OR    WORD PTR [CCODE],LANDING
  1096.     MOV    AX,NOT TAKEOFF
  1097.     AND    WORD PTR [CCODE],AX
  1098.     RET
  1099. ;
  1100. C_CRSH:    OR    WORD PTR [CCODE],ABOUT
  1101.     OR    WORD PTR [CCODE],BADPICH
  1102.     RET
  1103. ;
  1104. ;
  1105. C_FLT1:    CMP    WORD PTR [MSPEED],SLOWEST
  1106.     JG    C_FLT2
  1107.     OR    [CCODE],ABOUT
  1108.     OR    [CCODE],LOWSPD
  1109.     RET
  1110. ;
  1111. C_FLT2:    CMP    [MSPEED],DWNSPD
  1112.     JG    C_FLT3
  1113.     SUB    [MY],3
  1114.     JG    C_FLT3
  1115.     MOV    [MY],LOWEST
  1116. C_FLT3:    RET
  1117. ;
  1118.     RET
  1119. CONDITN    ENDP
  1120. ;
  1121. ;
  1122. ;
  1123. WAITR    PROC
  1124.     MOV    DI,OFFSET Y3WORK
  1125. WAITR0:    $K_READ
  1126.     $K_CHK    1DH
  1127.     JE    WAITR0
  1128.     RET
  1129. WAITR    ENDP
  1130. ;
  1131. ;
  1132. ;
  1133. ENTRY    PROC
  1134.     MOV    AX,DATA
  1135.     MOV    DS,AX
  1136. ;
  1137.     MOV    AH,02H
  1138.     MOV    DL,12
  1139.     INT    21H
  1140. ;
  1141. INITALL:MOV    DI,OFFSET Y3WORK
  1142.     $C_INIT
  1143.     $GBINIT
  1144.     $GCLS
  1145.     $K_INIT
  1146.     $C_COFF
  1147.     $K_COFF
  1148. ;    
  1149.     CALL    [MAKEDSP]
  1150. ;    INITIALIZE
  1151.     MOV    WORD PTR [POWSTK],0
  1152.     MOV    WORD PTR [MPOWER],0
  1153.     MOV    WORD PTR [MSPEED],0
  1154.     MOV    WORD PTR [ILS_HS],ILSH_X
  1155.     MOV    WORD PTR [DIRSX],DIRCX
  1156.     MOV    WORD PTR [DIRSY],DIRCY
  1157.     MOV    WORD PTR [SPDS],SPDY1-1
  1158.     MOV    WORD PTR [CCODE],0
  1159.     MOV    WORD PTR [MX],0
  1160.     MOV    WORD PTR [MZ],-750
  1161.     MOV    WORD PTR [MY],LOWEST
  1162.     MOV    WORD PTR [MHEAD],0
  1163.     MOV    WORD PTR [MPICH],0
  1164.     MOV    WORD PTR [MBANK],0
  1165.     CALL    [DRAWEXE]
  1166. ;
  1167.     $LOCATE 40-SIZ_HR/2,7
  1168.     MOV    DI,OFFSET MES_HR
  1169.     MOV    CX,SIZ_HR
  1170.     $PRINT
  1171.     $LOCATE    40-SIZ_YM/2,5
  1172.     MOV    DI,OFFSET MES_YM
  1173.     MOV    CX,SIZ_YM
  1174.     $PRINT
  1175.     CALL    [WAITR]
  1176.     $C_CLS
  1177. ;
  1178. MLOOP:    CMP    WORD PTR [MY],LOWEST
  1179.     JGE    MLP2
  1180.     MOV    WORD PTR [MY],LOWEST
  1181. MLP2:    CALL    [DRAWEXE]
  1182. ;
  1183.     CALL    [KEYSCAN]
  1184. ;
  1185.     CALL    [RADER]
  1186.     CALL    [POWMTR]
  1187. ;
  1188.     CALL    [KEYSCAN]
  1189. ;
  1190.     CALL    [POSTURE]
  1191.     CALL    [HIGHTM]
  1192.     CALL    [ILS_HOR]
  1193.     CALL    [HEADANG]
  1194. ;
  1195.     CALL    [KEYSCAN]
  1196. ;
  1197.     CALL    [SPEEDM]
  1198.     CALL    [RADDER]
  1199.     CALL    [GOFWRD]
  1200.     CALL    [CONDITN]
  1201. ;
  1202.     INC    WORD PTR [PCTR]
  1203.     MOV    AX,[PCTR]
  1204.     AND    AX,3
  1205.     JNE    PSCHK
  1206.     CALL    [POWSPD]
  1207. PSCHK:    CALL    [KEYSCAN]    
  1208. ;
  1209.     MOV    AX,[CCODE]
  1210.     AND    AX,ABOUT
  1211.     JNE    MLOUT
  1212. ;
  1213.     MOV    DI,OFFSET Y3WORK
  1214.     $PRESET
  1215.     MOV    DI,OFFSET ERSBUF
  1216.     $GDRAW
  1217.     MOV    DI,OFFSET Y3WORK
  1218.     CALL    [CENTLIN]
  1219. ;
  1220.     JMP    [MLOOP]
  1221. ;
  1222. MLOUT:    MOV    AX,[CCODE]
  1223.     AND    AX,LOWSPD
  1224.     JE    MLOUT2
  1225.     $LOCATE    40-SIZ_LS/2,8
  1226.     MOV    DI,OFFSET MES_LS
  1227.     MOV    CX,SIZ_LS
  1228.     $PRINT
  1229.     CALL    [WAITR]
  1230.     JMP    [INITALL]
  1231. MLOUT2:    MOV    AX,[CCODE]
  1232.     AND    AX,HISPD
  1233.     JE    MLOUT3
  1234.     $LOCATE    40-SIZ_HS/2,8
  1235.     MOV    DI,OFFSET MES_HS
  1236.     MOV    CX,SIZ_HS
  1237.     $PRINT
  1238.     CALL    [WAITR]
  1239.     JMP    [INITALL]
  1240. MLOUT3:    MOV    AX,[CCODE]
  1241.     AND    AX,BADPICH
  1242.     JE    MLOUT4
  1243.     $LOCATE    40-SIZ_BP/2,8
  1244.     MOV    DI,OFFSET MES_BP
  1245.     MOV    CX,SIZ_BP
  1246.     $PRINT
  1247.     CALL    [WAITR]
  1248.     JMP    [INITALL]
  1249. MLOUT4:    MOV    AX,[CCODE]
  1250.     AND    AX,COUT
  1251.     JE    MLOUT5
  1252.     $LOCATE    40-SIZ_CO/2,8
  1253.     MOV    DI,OFFSET MES_CO
  1254.     MOV    CX,SIZ_CO
  1255.     $PRINT
  1256.     CALL    [WAITR]
  1257.     JMP    [INITALL]
  1258. MLOUT5:    $LOCATE    40-SIZ_SF/2,8
  1259.     MOV    DI,OFFSET MES_SF
  1260.     MOV    CX,SIZ_SF
  1261.     $PRINT
  1262.     CALL    [WAITR]
  1263.     JMP    [INITALL]
  1264. ;
  1265. ;
  1266. ENTRY    ENDP
  1267. ;
  1268. ;
  1269. CODE    ENDS
  1270. ;
  1271. ;
  1272. ;
  1273. STACK    SEGMENT    STACK
  1274.     DW    2048 DUP(?)
  1275. STACK    ENDS
  1276. ;
  1277.     END    ENTRY
  1278.