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 / CPMUG015.ARK / CHASE.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  8KB  |  698 lines

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