home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG029.ARK / CHASE.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  8KB  |  722 lines

  1. ; *************************************
  2. ; **  THE GAME OF CHASE              **
  3. ; **      --FROM DR. DOBBS JOURN   **
  4. ; **             MAY 1977          **
  5. ; **      --MODIFIED FOR SOL         **
  6. ; **      --RE-MODIFIED FOR VDM    **
  7. ; *************************************
  8. ;
  9. ;
  10. ;
  11.     ORG    100H
  12. ;
  13. ;*****
  14. ; OBTAIN BIOS VECTORS
  15. ;*****
  16. VECTRS:    JMP    GETVEC
  17.     DS    42
  18. WBOOTE    EQU    VECTRS+3
  19. CSTS    EQU    VECTRS+6
  20. CI    EQU    VECTRS+9
  21. CO    EQU    VECTRS+12
  22. LO    EQU    VECTRS+15
  23. PO    EQU    VECTRS+18
  24. RI    EQU    VECTRS+21
  25. HOME    EQU    VECTRS+24
  26. SELDSK    EQU    VECTRS+27
  27. SETTRK    EQU    VECTRS+30
  28. SETSEC    EQU    VECTRS+33
  29. SETDMA    EQU    VECTRS+36
  30. READ    EQU    VECTRS+39
  31. WRITE    EQU    VECTRS+42
  32. GETVEC:    LXI    D,WBOOTE
  33.     LHLD    1
  34.     MVI    B,42
  35. GETVE1:    MOV    A,M
  36.     STAX    D
  37.     INX    H
  38.     INX    D
  39.     DCR    B
  40.     JNZ    GETVE1
  41. ;
  42. BEGIN:    XRA    A
  43.     STA    YSCORE
  44.     STA    RSCORE
  45. ENTER:    LHLD    6
  46.     DCX    H
  47.     SPHL
  48.     CALL    CLEAR
  49.     CALL    SCORE
  50. ;
  51.     LXI    H,MS2
  52.     LXI    B,MNAME
  53.     CALL    MSGO
  54. ;
  55. DIFF:    LXI    H,MS1
  56.     LXI    B,MDIFF
  57.     CALL    MSGO
  58.     CALL    INP
  59.     ANI    0FH
  60.     STA    DFST
  61. START:    CALL    CLEAR
  62.     CALL    SCORE
  63.     MVI    D,DCORN
  64.     MVI    E,ECORN
  65. TOP:    MVI    B,WIDTH
  66. T1:    CALL    PLOT
  67.     MVI    M,'X'
  68.     INX    D
  69.     CALL    PLOT
  70.     MVI    M,' '
  71.     INX    D
  72.     DCR    B
  73.     JNZ    T1
  74. RSIDE:    MVI    B,HEIGHT
  75.     DCR    E
  76.     DCR    E
  77. R1:    INR    D
  78.     CALL    PLOT
  79.     MVI    M,'X'
  80.     DCR    B
  81.     JNZ    R1
  82. BOTH:    MVI    B,WIDTH-1
  83. B1:    DCR    E
  84.     CALL    PLOT
  85.     MVI    M,' '
  86.     DCR    E
  87.     CALL    PLOT
  88.     MVI    M,'X'
  89.     DCR    B
  90.     JNZ    B1
  91. LSIDE:    MVI    B,HEIGHT
  92. L1:    DCR    D
  93.     CALL    PLOT
  94.     MVI    M,'X'
  95.     DCR    B
  96.     JNZ    L1
  97. ;
  98. SEED:    LDA    DFST
  99.     RLC
  100.     MOV    B,A
  101.     MVI    A,1EH
  102.     SUB    B
  103.     MOV    B,A
  104. LOOP1:    CALL    RND
  105.     ANI    0FH
  106.     MOV    D,A
  107.     CALL    RND
  108.     ANI    7FH
  109.     MOV    E,A
  110.     CALL    LIMIT
  111.     JC    LOOP1
  112.     CALL    PLOT
  113.     MOV    A,L
  114.     ANI    0FEH
  115.     MOV    L,A
  116.     MVI    M,'X'
  117.     DCR    B
  118.     JNZ    LOOP1
  119. ;
  120. ROSE:    LXI    H,RCORN
  121.     MVI    M,'T'
  122.     LXI    H,RCORN+4
  123.     MVI    M,'Y'
  124.     LXI    H,RCORN+8
  125.     MVI    M,'U'
  126.     LXI    H,RCORN+42H
  127.     MVI    M,5CH
  128.     LXI    H,RCORN+44H
  129.     MVI    M,5EH
  130.     LXI    H,RCORN+46H
  131.     MVI    M,2FH
  132.     LXI    H,RCORN+80H
  133.     MVI    M,'G'
  134.     LXI    H,RCORN+82H
  135.     MVI    M,0DH
  136.     LXI    H,RCORN+84H
  137.     MVI    M,'H'
  138.     LXI    H,RCORN+86H
  139.     MVI    M,09H
  140.     LXI    H,RCORN+88H
  141.     MVI    M,'J'
  142.     LXI    H,RCORN+0C2H
  143.     MVI    M,2FH
  144.     LXI    H,RCORN+0C4H
  145.     MVI    M,0BH
  146.     LXI    H,RCORN+0C6H
  147.     MVI    M,5CH
  148.     LXI    H,RCORN+100H
  149.     MVI    M,'B'
  150.     LXI    H,RCORN+104H
  151.     MVI    M,'N'
  152.     LXI    H,RCORN+108H
  153.     MVI    M,'M'
  154. ;
  155. ROBOT:    CALL    SEL
  156.     SHLD    ROB1
  157.     CALL    SEL
  158.     SHLD    ROB2
  159.     CALL    SEL
  160.     SHLD    ROB3
  161.     CALL    SEL
  162.     SHLD    ROB4
  163.     CALL    SEL
  164.     SHLD    ROB5
  165.     CALL    YOU
  166.     JMP    YMOVE
  167. SEL:    CALL    RND
  168.     ANI    0FH
  169.     MOV    D,A
  170.     CALL    RND
  171.     ANI    0FEH
  172.     MOV    E,A
  173.     CALL    LIMIT
  174.     JC    SEL
  175.     CALL    PLOT
  176.     MOV    A,M
  177.     CPI    ' '
  178.     JNZ    SEL
  179.     MVI    M,7
  180.     DCR    B
  181.     RNZ
  182.     JMP    YMOVE
  183. ;
  184. YOU:    CALL    RND
  185.     ANI    0FH
  186.     MOV    D,A
  187.     CALL    RND
  188.     ANI    0FEH
  189.     MOV    E,A
  190.     CALL    LIMIT
  191.     JC    YOU
  192.     CALL    PLOT
  193.     MOV    A,M
  194.     CPI    ' '
  195.     JNZ    YOU
  196.     MVI    M,0FH
  197.     SHLD    YOUP
  198.     RET
  199. ;
  200. YMOVE:    CALL    NEAR
  201. YMOV1:    CALL    INP
  202.     LHLD    YOUP
  203.     MVI    M,' '
  204.     CPI    'J'
  205.     CZ    RT
  206.     CPI    'U'
  207.     CZ    UR
  208.     CPI    'Y'
  209.     CZ    UP
  210.     CPI    'T'
  211.     CZ    UL
  212.     CPI    'G'
  213.     CZ    LF
  214.     CPI    'B'
  215.     CZ    LL
  216.     CPI    'N'
  217.     CZ    DN
  218.     CPI    'M'
  219.     CZ    LR
  220.     CPI    'P'
  221.     CZ    PANIC
  222.     CPI    'H'
  223.     JZ    Y1
  224.     MOV    A,M
  225.     CPI    ' '
  226.     JNZ    DEATH
  227. Y1:    MVI    M,0FH
  228.     SHLD    YOUP
  229.     CALL    RMOVE
  230.     CALL    END0
  231.     JMP    YMOVE
  232. ;
  233. INP:    CALL    CI
  234.     ANI    7FH
  235.     CPI    0DH
  236.     JZ    ENTER
  237.     CPI    1BH
  238.     JZ    BEGIN
  239.     RET
  240. ;
  241. RMOVE:    LHLD    ROB1
  242.     CALL    RDEAD
  243.     JC    RMOV1
  244.     CALL    SEEK
  245.     SHLD    ROB1
  246. RMOV1:    LHLD    ROB2
  247.     CALL    RDEAD
  248.     JC    RMOV2
  249.     CALL    SEEK
  250.     SHLD    ROB2
  251. RMOV2:    LHLD    ROB3
  252.     CALL    RDEAD
  253.     JC    RMOV3
  254.     CALL    SEEK
  255.     SHLD    ROB3
  256. RMOV3:    LHLD    ROB4
  257.     CALL    RDEAD
  258.     JC    RMOV4
  259.     CALL    SEEK
  260.     SHLD    ROB4
  261. RMOV4:    LHLD    ROB5
  262.     CALL    RDEAD
  263.     RC
  264.     CALL    SEEK
  265.     SHLD    ROB5
  266.     RET
  267. ;
  268. RDEAD:    MOV    A,M
  269.     CPI    'X'
  270.     STC
  271.     RZ
  272.     CMC
  273.     RET
  274. ;
  275. CHEK:    MOV    A,M
  276.     CPI    0FH
  277.     JZ    DEATH
  278.     CPI    'X'
  279.     JZ    FLASH
  280.     MVI    M,7
  281.     RET
  282. FLASH:    MVI    D,0A0H
  283. FLAS1:    MVI    M,4
  284.     MVI    E,0FFH
  285. FLAS2:    DCR    E
  286.     JNZ    FLAS2
  287.     MVI    E,0FFH
  288.     MVI    M,84H
  289. FLAS3:    DCR    E
  290.     JNZ    FLAS3
  291.     DCR    D
  292.     JNZ    FLAS1
  293.     MVI    M,'X'
  294.     XRA    A
  295.     RET
  296. ;
  297. SEEK:    MVI    M,' '
  298.     PUSH    H
  299.     CALL    SUBH
  300.     POP    H
  301.     CALL    DECH
  302.     PUSH    H
  303.     CALL    SUBV
  304.     POP    H
  305.     CALL    DECV
  306.     JMP    CHEK
  307. ;
  308. SUBV:    MOV    A,L
  309.     ANI    0C0H
  310.     MOV    L,A
  311.     XCHG
  312.     LHLD    YOUP
  313.     MOV    A,L
  314.     ANI    0C0H
  315.     SUB    E
  316.     MOV    C,A
  317.     MOV    A,H
  318.     SBB    D
  319.     MOV    B,A
  320.     RET
  321. ;
  322. DECV:    RLC
  323.     JC    UP
  324.     MOV    A,C
  325.     RRC
  326.     JC    UP
  327.     XRA    A
  328.     ADD    B
  329.     JNZ    DN
  330.     ADD    C
  331.     JNZ    DN
  332.     RET
  333. ;
  334. SUBH:    MOV    A,L
  335.     ANI    3FH
  336.     MOV    L,A
  337.     XCHG
  338.     LHLD    YOUP
  339.     MOV    A,L
  340.     ANI    3FH
  341.     SUB    E
  342.     RET
  343. ;
  344. DECH:    RZ
  345.     JP    RT
  346.     JMP    LF
  347. ;
  348. DEATH:    MVI    M,0CH
  349.     CALL    MSG2
  350.     LDA    RSCORE
  351.     INR    A
  352.     STA    RSCORE
  353.     CALL    SCORE
  354.     CALL    OVER
  355.     CALL    WAIT
  356.     JMP    START
  357. ;
  358. PANIC:    PUSH    PSW
  359.     LDA    DFST
  360.     CPI    9
  361.     JNZ    PAN3
  362.     MVI    C,7
  363.     CALL    RND
  364.     ANA    C
  365.     CPI    1
  366.     JZ    PAN5
  367.     JMP    PAN4
  368. ;
  369. PAN5:    PUSH    H
  370.     LHLD    ROB1
  371.     MVI    M,7
  372.     LHLD    ROB2
  373.     MVI    M,7
  374.     LHLD    ROB3
  375.     MVI    M,7
  376.     POP    H
  377.     JMP    PANN
  378. PAN3:    LDA    DFST
  379.     SBI    3
  380.     JP    PAN1
  381.     MVI    C,1
  382.     JMP    PANOK
  383. PAN1:    LDA    DFST
  384.     SBI    6
  385.     MVI    C,3
  386.     JP    PAN2
  387.     JMP    PANOK
  388. PAN2:    MVI    C,7
  389. PANOK:    CALL    RND
  390.     ANA    C
  391.     CPI    1
  392.     JZ    PANN
  393. PAN4:    POP    PSW
  394.     RET
  395. PANN:    CALL    YOU
  396.     POP    PSW
  397.     POP    PSW
  398.     JMP    YMOVE
  399. ;
  400. WAIT:    CALL    CI
  401.     RET
  402. ;
  403. OVER:    LDA    RSCORE
  404.     CPI    09H
  405.     JZ    END1
  406. OVER1:    LDA    YSCORE
  407.     CPI    09H
  408.     RNZ
  409. ENDGAME:    CALL    WAIT
  410.     CALL    CLEAR
  411.     LXI    H,ENDM1
  412.     LXI    B,ENDB2
  413.     CALL    MSGO
  414.     LDA    YSCORE
  415.     ADI    30H
  416.     STA    0CD27H
  417.     LDA    RSCORE
  418.     ADI    30H
  419.     STA    0CD29H
  420.     JMP    END2
  421. END1:    CALL    WAIT
  422.     CALL    CLEAR
  423.     LXI    H,ENDM1
  424.     LXI    B,ENDB1
  425.     CALL    MSGO
  426.     LDA    RSCORE
  427.     ADI    30H
  428.     STA    0CD27H
  429.     LDA    YSCORE
  430.     ADI    30H
  431.     STA    0CD29H
  432. END2:    LXI    H,ENDM3
  433.     LXI    B,ENDB3
  434.     CALL    MSGO
  435. END3:    CALL    WAIT
  436.     JMP    BEGIN
  437. ;
  438. UP:    LXI    D,0FFC0H
  439.     DAD    D
  440.     RET
  441. DN:    LXI    D,40H
  442.     DAD    D
  443.     RET
  444. LF:    DCX    H
  445.     DCX    H
  446.     RET
  447. RT:    INX    H
  448.     INX    H
  449.     RET
  450. UR:    CALL    UP
  451.     JMP    RT
  452. UL:    CALL    UP
  453.     JMP    LF
  454. LL:    CALL    DN
  455.     JMP    LF
  456. LR:    CALL    DN
  457.     JMP    RT
  458. ;
  459. PLOT:    LXI    H,0CC00H
  460.     PUSH    B
  461. VERT:    MOV    A,D
  462.     ANI    0FH
  463. LP1:    MVI    B,40H
  464. LP2:    JZ    HORIZ
  465.     INX    H
  466.     DCR    B
  467.     JNZ    LP2
  468.     DCR    A
  469.     JNZ    LP1
  470. HORIZ:    MOV    A,E
  471.     ANI    7FH
  472. LP3:    JZ    DONE
  473.     INX    H
  474.     DCR    A
  475.     JMP    LP3
  476. DONE:    POP    B
  477.     RET
  478. ;
  479. LIMIT:    MOV    A,D
  480.     SBI    LOWD
  481.     STC
  482.     RM
  483.     MOV    A,D
  484.     SBI    HID
  485.     STC
  486.     RP
  487.     MOV    A,E
  488.     SBI    LOWE
  489.     STC
  490.     RM
  491.     MOV    A,E
  492.     SBI    HIE
  493.     STC
  494.     RP
  495.     CMC
  496.     RET
  497. ;
  498. RND:    PUSH    B
  499.     PUSH    H
  500.     LXI    H,SH+3
  501.     MVI    B,8
  502.     MOV    A,M
  503. RTOP:    RLC
  504.     RLC
  505.     RLC
  506.     XRA    M
  507.     RAL
  508.     RAL
  509.     DCR    L
  510.     DCR    L
  511.     DCR    L
  512.     MOV    A,M
  513.     RAL
  514.     MOV    M,A
  515.     INR    L
  516.     MOV    A,M
  517.     RAL
  518.     MOV    M,A
  519.     INR    L
  520.     MOV    A,M
  521.     RAL
  522.     MOV    M,A
  523.     INR    L
  524.     MOV    M,A
  525.     RAL
  526.     MOV    M,A
  527.     DCR    B
  528.     JNZ    RTOP
  529.     POP    H
  530.     POP    B
  531.     RET
  532. ;
  533. END0:    LHLD    ROB1
  534.     MOV    A,M
  535.     CPI    7
  536.     RZ
  537.     LHLD    ROB2
  538.     MOV    A,M
  539.     CPI    7
  540.     RZ
  541.     LHLD    ROB3
  542.     MOV    A,M
  543.     CPI    7
  544.     RZ
  545.     LHLD    ROB4
  546.     MOV    A,M
  547.     CPI    7
  548.     RZ
  549.     LHLD    ROB5
  550.     MOV    A,M
  551.     CPI    7
  552.     RZ
  553.     JMP    WIN
  554. ;
  555. NEAR:    LHLD    YOUP
  556.     CALL    RT
  557.     CALL    NEAR2
  558.     CALL    UP
  559.     CALL    NEAR2
  560.     CALL    LF
  561.     CALL    NEAR2
  562.     CALL    LF
  563.     CALL    NEAR2
  564.     CALL    LF
  565.     CALL    NEAR2
  566.     CALL    DN
  567.     CALL    NEAR2
  568.     CALL    RT
  569.     CALL    NEAR2
  570.     CALL    RT
  571.     CALL    NEAR2
  572.     CALL    MCLEAR
  573. NEAR3:    RET
  574. ;
  575. NEAR2:    MOV    A,M
  576.     CPI    7
  577.     RNZ
  578.     CALL    MSG1
  579.     POP    H
  580.     JMP    NEAR3
  581. ;
  582. CLEAR:    LXI    H,0CC00H
  583.     MVI    M,' '
  584.     INX    H
  585.     MOV    A,H
  586.     CPI    0D0H
  587.     JNZ    CLEAR+3
  588.     XRA    A
  589.     OUT    0C8H
  590.     RET
  591. ;
  592. MSG1:    PUSH    H
  593.     PUSH    B
  594.     LXI    H,MS1
  595.     LXI    B,M1
  596.     CALL    MSGQ
  597.     POP    B
  598.     POP    H
  599.     RET
  600. ;
  601. MSG2:    LXI    H,MS1
  602.     LXI    B,M2
  603.     CALL    MSGQ
  604.     RET
  605. ;
  606. WIN:    LXI    H,MS1
  607.     LXI    B,MWIN
  608.     CALL    MSGQ
  609.     LDA    YSCORE
  610.     INR    A
  611.     STA    YSCORE
  612.     CALL    SCORE
  613.     CALL    OVER
  614.     CALL    WAIT
  615.     JMP    START
  616. ;
  617. SCORE:    LXI    H,SRE
  618.     LXI    B,MSR
  619.     CALL    MSGO
  620.     LDA    YSCORE
  621.     ADI    30H
  622.     LXI    H,SCR
  623.     MOV    M,A
  624.     LDA    RSCORE
  625.     ADI    30H
  626.     LXI    D,40H
  627.     DAD    D
  628.     MOV    M,A
  629.     LXI    H,MSY
  630.     LXI    B,MSR1
  631.     CALL    MSGO
  632.     LXI    H,MT1
  633.     LXI    B,MSR2
  634.     CALL    MSGO
  635.     RET
  636. ;
  637. MCLEAR:    PUSH    H
  638.     PUSH    B
  639.     LXI    H,MS1
  640.     MVI    C,20H
  641. MCL1:    MVI    M,' '
  642.     INX    H
  643.     DCR    C
  644.     JNZ    MCL1
  645.     POP    B
  646.     POP    H
  647.     RET
  648. ;
  649. MSGO:    LDAX    B
  650.     CPI     0FFH
  651.     RZ
  652.     MOV    M,A
  653.     INX    B
  654.     INX    H
  655.     JMP    MSGO
  656. ;
  657. MSGQ:    LDAX    B
  658.     CPI    0FFH
  659.     RZ
  660.     ORI    80H
  661.     MOV    M,A
  662.     INX    B
  663.     INX    H
  664.     JMP    MSGQ
  665. ;
  666. ;
  667. ;
  668. MNAME:    DB    '* * * THE GAME OF CHASE * * *'
  669.     DB    0FFH
  670. M1:    DB    ' CAUTION - ROBOT NEAR! '
  671.     DB    0FFH
  672. M2:    DB    ' YOU HAVE BEEN DESTROYED! '
  673.     DB    0FFH
  674. MWIN:    DB    ' CONGRATULATIONS - YOU HAVE WON! '
  675.     DB    0FFH
  676. MSR:    DB    '--SCORE--'
  677.     DB    0FFH
  678. MSR1:    DB    'YOU:'
  679.     DB    0FFH
  680. MSR2:    DB    'ROBOTS:'
  681.     DB    0FFH
  682. ENDB1:    DB    'THE ROBOTS HAVE WON -   :'
  683.     DB    0FFH
  684. ENDB2:    DB    'YOU HAVE BEATEN THEM -  :'
  685.     DB    0FFH
  686. ENDB3:    DB    'HIT ANY KEY TO PLAY AGAIN.....'
  687.     DB    0FFH
  688. MDIFF:    DB    ' LEVEL OF DIFFICULTY (0-9)?'
  689.     DB    0FFH
  690. ;
  691. ;
  692. RDA    EQU    1
  693. RCORN    EQU    0CCF6H
  694. DCORN    EQU    0
  695. ECORN    EQU    2
  696. HEIGHT    EQU    0DH
  697. WIDTH    EQU    19H
  698. LOWD    EQU    DCORN+1
  699. LOWE    EQU    ECORN+1
  700. HID    EQU    DCORN+HEIGHT-1
  701. HIE    EQU    LOWE+WIDTH+WIDTH-4
  702. MS1    EQU    0CFCCH
  703. MS2    EQU    0CD10H
  704. SCR    EQU    0CFBDH
  705. SRE    EQU    0CF77H
  706. MSY    EQU    0CFB8H
  707. MT1    EQU    0CFF5H
  708. ENDM1    EQU    0CD10H
  709. ENDM3    EQU    0CD90H
  710. SH:    DW    1234H
  711.     DW    5678H
  712. DFST:    DB    1
  713. RSCORE    DS    1
  714. YSCORE    DS    1
  715. YOUP    DS    2
  716. ROB1    DS    2
  717. ROB2    DS    2
  718. ROB3    DS    2
  719. ROB4    DS    2
  720. ROB5    DS    2
  721. END
  722.