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 / CPMUG001.ARK / MAZE.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  5KB  |  485 lines

  1. ;***************************;
  2. ; MAZE PROGRAM FROM INTEL   ;
  3. ;***************************;
  4.     ORG    100H
  5. CPM    EQU    0005H
  6. BOOT    EQU    0000H
  7. CR    EQU    0DH
  8. LF    EQU    0AH
  9. NUL    EQU    0FFH
  10. FF    EQU    0CH
  11.  
  12. MAZE:    LXI    SP,STACK
  13.     LXI    D,MAZ
  14.     MVI    C,09
  15.     CALL    CPM
  16. MAZE1:    LXI    D,CRLF
  17.     MVI    C,09
  18.     CALL    CPM
  19.     MVI    A,0
  20.     STA    PFLAG
  21.     STA    MFLAG
  22.     LXI    H,MTX
  23.     LXI    B,MTXE
  24. M3:    MVI    M,0
  25.     INX    H
  26.     MOV    A,L
  27.     CMP    C
  28.     JNZ    M3
  29.     MOV    A,H
  30.     CMP    B
  31.     JNZ    M3
  32.     CALL    SIZE
  33.     LXI    D,PAGE
  34.     MVI    C,09
  35.     CALL    CPM
  36.     CALL    START
  37. M1:    CALL    TEST
  38.     MOV    A,E
  39.     ORA    A
  40.     JZ    M2
  41.     CALL    MOVE
  42.     JMP    M1
  43.  
  44. M2:    CALL    SCAN
  45.     JC    M1
  46.     CALL    PMAZE
  47.     LXI    D,AGAIN
  48.     MVI    C,09
  49.     CALL    CPM
  50.     MVI    C,01
  51.     CALL    CPM
  52.     PUSH    PSW
  53.     MVI    C,09
  54.     LXI    D,CRLF
  55.     CALL    CPM
  56.     POP    PSW
  57.     CPI    'Y'
  58.     JZ    MAZE1
  59.     CPI    079H
  60.     JZ    MAZE1
  61.     JMP    BOOT
  62.  
  63. SIZE:    LXI    D,WIDE
  64.     MVI    C,09
  65.     CALL    CPM
  66. SIZE1:    CALL    RND
  67.     MVI    C,11
  68.     CALL    CPM
  69.     ORA    A
  70.     JZ    SIZE1
  71.     CALL    BIN
  72.     PUSH    PSW
  73.     LXI    D,CRLF
  74.     MVI    C,9
  75.     CALL    CPM
  76.     POP    PSW
  77.     CPI    40+1
  78.     JNC    SIZE
  79.     STA    CMAX
  80. SIZE2:    LXI    D,HIGH
  81.     MVI    C,09
  82.     CALL    CPM
  83.     CALL    BIN
  84.     PUSH    PSW
  85.     LXI    D,CRLF
  86.     MVI    C,09
  87.     CALL    CPM
  88.     POP    PSW
  89.     CPI    40+1
  90.     JNC    SIZE2
  91.     STA    BMAX
  92.     RET
  93.  
  94. START:    LDA    CMAX
  95.     MOV    E,A
  96.     CALL    RNDR
  97.     STA    SPOS
  98.     MOV    C,A
  99.     MVI    B,0
  100.     CALL    MATRIX
  101.     MVI    M,1
  102.     RET
  103.  
  104. TEST:    MVI    D,0
  105.     MOV    A,B
  106.     CPI    0
  107.     JZ    T1
  108.     DCR    B
  109.     CALL    MATRIX
  110.     INR    B
  111.     MOV    A,M
  112.     RRC
  113.     JC    T1
  114.     MOV    A,D
  115.     ORI    01H
  116.     MOV    D,A
  117. T1:    LDA    BMAX
  118.     DCR    A
  119.     CMP    B
  120.     JNZ    T8
  121.     LDA    PFLAG
  122.     ORA    A
  123.     JZ    T2
  124.     JMP    T3
  125.  
  126. T8:    INR    B
  127.     CALL    MATRIX
  128.     DCR    B
  129.     MOV    A,M
  130.     RRC
  131.     JC    T3
  132.  
  133. T2:    MOV    A,D
  134.     ORI    02
  135.     MOV    D,A
  136. T3:    MOV    A,C
  137.     CPI    0
  138.     JZ    T4
  139.     DCR    C
  140.     CALL    MATRIX
  141.     INR    C
  142.     MOV    A,M
  143.     RRC
  144.     JC    T4
  145.     MOV    A,D
  146.     ORI    04H
  147.     MOV    D,A
  148. T4:    LDA    CMAX
  149.     DCR    A
  150.     CMP    C
  151.     JZ    T5
  152.     INR    C
  153.     CALL    MATRIX
  154.     DCR    C
  155.     MOV    A,M
  156.     RRC
  157.     JC    T5
  158.     MOV    A,D
  159.     ORI    08H
  160.     MOV    D,A
  161. T5:    MVI    E,0
  162.     MOV    A,D
  163.     ORA    A
  164. T6:    RAR
  165.     JNC    T7
  166.     INR    E
  167. T7:    ORA    A
  168.     JNZ    T6
  169.     RET
  170.  
  171. MOVE:    MVI    A,1
  172.     STA    MFLAG
  173.     CALL    RNDR
  174.     MOV    E,A
  175.     MOV    A,D
  176.     INR    E
  177.     DCR    E
  178.     RRC
  179.     JNC    MV1
  180.     JZ    MOVEUP
  181.     DCR    E
  182. MV1:    RRC
  183.     JNC    MV2
  184.     JZ    MOVEDOWN
  185.     DCR    E
  186. MV2:    RRC
  187.     JNC    MOVERIGHT
  188.     JZ    MOVELEFT
  189.     JMP    MOVERIGHT
  190.  
  191. MOVEUP:    DCR    B
  192.     CALL    MATRIX
  193.     MOV    A,M
  194.     ORI    05H
  195.     MOV    M,A
  196.     RET
  197.  
  198. MOVEDOWN:
  199.     CALL    MATRIX
  200.     MOV    A,M
  201.     ORI    04H
  202.     MOV    M,A
  203.     LDA    BMAX
  204.     DCR    A
  205.     CMP    B
  206.     JZ    MD1
  207.     INR    B
  208.     CALL    MATRIX
  209.     MOV    A,M
  210.     ORI    01H
  211.     MOV    M,A
  212.     RET
  213. MD1:    MVI    A,1
  214.     STA    PFLAG
  215.     MVI    B,0
  216.     LDA    SPOS
  217.     MOV    C,A
  218.     RET
  219.  
  220. MOVELEFT:
  221.     DCR    C
  222.     CALL    MATRIX
  223.     MOV    A,M
  224.     ORI    03H
  225.     MOV    M,A
  226.     RET
  227.  
  228. MOVERIGHT:
  229.     CALL    MATRIX
  230.     MOV    A,M
  231.     ORI    02H
  232.     MOV    M,A
  233.     INR    C
  234.     CALL    MATRIX
  235.     MOV    A,M
  236.     ORI    01H
  237.     MOV    M,A
  238.     RET
  239.  
  240. SCAN:    INR    C
  241.     LDA    CMAX
  242.     CMP    C
  243.     JZ    S1
  244. S2:    CALL    MATRIX
  245.     MOV    A,M
  246.     RRC
  247.     JNC    SCAN
  248.     RET
  249.  
  250. S1:    MVI    C,0
  251.     INR    B
  252.     LDA    BMAX
  253.     CMP    B
  254.     JNZ    S2
  255.     MVI    B,0
  256.     LDA    MFLAG
  257.     ORA    A
  258.     RZ
  259.     MVI    A,0
  260.     STA    MFLAG
  261.     JMP    S2
  262.  
  263. PMAZE:    LXI    D,CRLF
  264.     MVI    C,09
  265.     CALL    CPM
  266.     LXI    D,CRLF
  267.     MVI    C,09
  268.     CALL    CPM
  269.     LXI    D,OD
  270.     MVI    C,09
  271.     CALL    CPM
  272.     MVI    B,0
  273.     MVI    C,0
  274. PM1:    LDA    SPOS
  275.     CMP    C
  276.     JZ    PM2
  277.     PUSH    B
  278.     LXI    D,CD
  279.     MVI    C,09
  280.     CALL    CPM
  281.     POP    B
  282.     JMP    PM3
  283.  
  284. PM2:    PUSH    B
  285.     LXI    D,OD
  286.     MVI    C,09
  287.     CALL    CPM
  288.     POP    B
  289. PM3:    INR    C
  290.     LDA    CMAX
  291.     CMP    C
  292.     JNZ    PM1
  293. PM4:    PUSH    B
  294.     LXI    D,CRLF
  295.     MVI    C,09
  296.     CALL    CPM
  297.     LXI    D,CLR
  298.     MVI    C,09
  299.     CALL    CPM
  300.     POP    B
  301.     MVI    C,0
  302. PM5:    CALL    MATRIX
  303.     MOV    A,M
  304.     ANI    02H
  305.     JZ    PM6
  306.     PUSH    B
  307.     LXI    D,OPR
  308.     MVI    C,09
  309.     CALL    CPM
  310.     POP    B
  311.     JMP    PM7
  312. PM6:    PUSH    B
  313.     LXI    D,CLR
  314.     MVI    C,09
  315.     CALL    CPM
  316.     POP    B
  317. PM7:    INR    C
  318.     LDA    CMAX
  319.     CMP    C
  320.     JNZ    PM5
  321.     PUSH    B
  322.     LXI    D,CRLF
  323.     MVI    C,09
  324.     CALL    CPM
  325.     LXI    D,OD
  326.     MVI    C,09
  327.     CALL    CPM
  328.     POP    B
  329.     MVI    C,0
  330. PM8:    CALL    MATRIX
  331.     MOV    A,M
  332.     ANI    04H
  333.     JZ    PM9
  334.     PUSH    B
  335.     LXI    D,OD
  336.     MVI    C,09
  337.     CALL    CPM
  338.     POP    B
  339.     JMP    PM10
  340. PM9:    PUSH    B
  341.     LXI    D,CD
  342.     MVI    C,09
  343.     CALL    CPM
  344.     POP    B
  345. PM10:    INR    C
  346.     LDA    CMAX
  347.     CMP    C
  348.     JNZ    PM8
  349.     INR    B
  350.     LDA    BMAX
  351.     CMP    B
  352.     JNZ    PM4
  353.     LXI    D,CRLF
  354.     MVI    C,09
  355.     CALL    CPM
  356.     LXI    D,PAGE
  357.     MVI    C,09
  358.     CALL    CPM
  359.     RET
  360.  
  361. BIN:    PUSH    B
  362.     MVI    B,0
  363. BIN1:    PUSH    B
  364.     MVI    C,01
  365.     CALL    CPM
  366.     POP    B
  367.     CPI    CR
  368.     JZ    BIN2
  369.     CPI    '0'
  370.     JC    BIN1
  371.     CPI    '9'+1
  372.     JNC    BIN1
  373.     MOV    C,A
  374.     MOV    A,C
  375.     ANI    0FH
  376.     MOV    C,A
  377.     MOV    A,B
  378.     ADD    A
  379.     MOV    B,A
  380.     ADD    A
  381.     ADD    A
  382.     ADD    B
  383.     ADD    C
  384.     MOV    B,A
  385.     JMP    BIN1
  386. BIN2:    MOV    A,B
  387.     POP    B
  388.     RET
  389.  
  390. RNDR:    PUSH    B
  391.     CALL    RND
  392.     MOV    C,A
  393.     MVI    B,0
  394. RNDR1:    DCR    E
  395.     JZ    RNDR2
  396.     ADD    C
  397.     JNC    RNDR1
  398.     INR    B
  399.     JMP    RNDR1
  400. RNDR2:    MOV    A,B
  401.     POP    B
  402.     RET
  403.  
  404. RND:    PUSH    H
  405.     PUSH    B
  406.     LXI    H,SHIFT
  407.     MVI    B,8
  408.     MOV    A,M
  409. RND1:    RLC
  410.     RLC
  411.     RLC
  412.     XRA    M
  413.     RAL
  414.     RAL
  415.     LXI    H,SHIFT
  416.     MOV    A,M
  417.     RAL
  418.     MOV    M,A
  419.     INX    H
  420.     MOV    A,M
  421.     RAL
  422.     MOV    M,A
  423.     INX    H
  424.     MOV    A,M
  425.     RAL
  426.     MOV    M,A
  427.     INX    H
  428.     MOV    A,M
  429.     RAL
  430.     MOV    M,A
  431.     DCR    B
  432.     JNZ    RND1
  433.     POP    B
  434.     POP    H
  435.     RET
  436.  
  437. MATRIX:    PUSH    D
  438.     PUSH    PSW
  439.     LDA    CMAX
  440.     MOV    E,A
  441.     MVI    D,0
  442.     LXI    H,0
  443.     MOV    A,B
  444. MULT:    PUSH    B
  445.     MVI    B,9
  446. MULT1:    DCR    B
  447.     JZ    MULT2
  448.     DAD    H
  449.     RAL
  450.     JNC    MULT1
  451.     DAD    D
  452.     JMP    MULT1
  453. MULT2:    POP    B
  454.     MOV    E,C
  455.     DAD    D
  456.     LXI    D,MTX
  457.     DAD    D
  458.     POP    PSW
  459.     POP    D
  460.     RET
  461. SHIFT:    DB    0FFH
  462.     DB    0FFH,0FFH,0FFH
  463. PFLAG:    DS    1
  464. MFLAG:    DS    1
  465. BMAX:    DS    1
  466. CMAX:    DS    1
  467. SPOS:    DS    1
  468. MTX:    DS    1600
  469. MTXE    EQU    $
  470. PAGE:    DB    CR,LF,FF,NUL
  471.     DB    NUL,NUL,NUL,NUL,NUL,NUL
  472.     DB    NUL,NUL,NUL,NUL,NUL,'$'
  473. CRLF:    DB    CR,LF,NUL,'$'
  474. OD:    DB    '  :','$'
  475. CD:    DB    '--:','$'
  476. OPR:    DB    '   ','$'
  477. CLR:    DB    '  I','$'
  478. MAZ:    DB    '8080 MAZE PROGRAM ','$'
  479. WIDE:    DB    'HOW WIDE? ','$'
  480. HIGH:    DB    'HOW HIGH? ','$'
  481. AGAIN:    DB    'AGAIN? ','$'
  482.     DS    64
  483. STACK    EQU    $
  484.     END    MAZE
  485.