home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol167 / vb1.mac < prev    next >
Encoding:
Text File  |  1984-04-29  |  9.6 KB  |  740 lines

  1.  
  2. ;    -------------------------------------------------------
  3. ;    ADAPTATION OF VTI TO USE SOLID STATE MUSIC VIDEO BOARD 
  4. ;    MODEL VB1-B WITH F-80 I-O ROUTINES ON UAP'S IMSAI 8080.
  5. ;        [VERSION JANUARY 27,1979]
  6. ;
  7. ;        VB1-B  -  COPYRIGHT (C) 1979
  8. ;        UNIVERSIDAD AUTONOMA DE PUEBLA
  9. ;
  10. ;    WRITTEN BY HAROLD V. MCINTOSH, SUMMER 1978, WITH
  11. ;    REFERENCE TO: HARVEY A. COHEN, "THE OZNAKI LIFE",
  12. ;    DR. DOBBS JOURNAL OF COMPUTER CALISTHENICS AND
  13. ;    ORTHODONTIA, VOLUME 3, ISSUE 4 (APRIL 1978) PP. 10-11;
  14. ;    AND WITH ACKNOWLEDGEMENTS TO THE HOSPITALITY OF THE
  15. ;    QUANTUM THEORY PROJECT, UNIVERSITY OF FLORIDA,
  16. ;    GAINESVILLE, FLORIDA.
  17. ;    ------------------------------------------------------
  18.  
  19. ;    -------------------------------------------------------
  20. ;    CONSTANTS DEFINING SCREEN SIZE AND LOCATION.  NOTE THAT
  21. ;    WHILE THE PROGRAMMER HAS SOME DISCRETION IN ASSIGNING
  22. ;    THESE CONSTANTS, THERE IS HIGHLY IMPLICIT USAGE OF THE
  23. ;    ASSUMPTION THAT THE SCREEN MEMORY BEGINS AT A 1K HEX
  24. ;    BOUNDARY, AND THAT THE ROW LENGTH IS A POWER OF 2.
  25. ;    THUS THE VIDEO BOARD ORIGIN MAY BE CHANGED THROUGH ITS
  26. ;    ADDRESS SWITCHES, AND NEW PARAMETERS DEFINED WITHOUT
  27. ;    DIFFICULTY; NEVERTHELESS ADAPTATION TO AN 80-COLUMN 
  28. ;    BOARD WOULD REQUIRE RESTRUCTURING THE SUBROUTINES.
  29. ;    -------------------------------------------------------
  30.  
  31. VORG    EQU    0F800H    ;ORIGIN OF VIDEO SCREEN MEMORY AREA
  32. VSIZ    EQU    00400H    ;SIZE OF VIDEO SCREEN MEMORY AREA
  33. RSIZ    EQU    00040H    ;LENGTH OF A SINGLE DISPLAY LINE
  34. RMSK    EQU    0003FH    ;MASK FOR SINGLE ROW ADDRESSES
  35.  
  36. ;    -------------------------------------------------------
  37. ;    DATA STORAGE LOCATIONS REQUIRED BY THE SUBROUTINES.
  38. ;    -------------------------------------------------------
  39.  
  40.     DSEG
  41.  
  42. MA:    DB    00    ;BIT MASK TO LOCATE PIXEL WITHIN BYTE
  43. WY:    DB    00    ;ROW COUNT * 16  -  16 ROWS TOTAL
  44. EX:    DB    00    ;COLUMN COUNT * 4  -  64 COLUMNS TOTAL
  45. TS:    DB    00    ;TEMPORARY STORAGE
  46.  
  47. ;    =======================================================
  48.  
  49.     CSEG
  50.  
  51. ;    MOVE CURSOR UP ONE PIXEL
  52.  
  53. YPL::    LXI    H,MA
  54.     MOV    A,M
  55.     ANI    009H
  56.     JNZ    YP1
  57.     MOV    A,M
  58.     RRC
  59.     MOV    M,A
  60.     RET
  61. YP1:    RLC
  62.     RLC
  63.     MOV    M,A
  64.     LDA    WY
  65.     SUI    010H
  66.     STA    WY
  67.     RET
  68.  
  69. ;    MOVE CURSOR DOWN ONE PIXEL
  70.  
  71. YMI::    LXI    H,MA
  72.     MOV    A,M
  73.     ANI    024H
  74.     JNZ    YM1
  75.     MOV    A,M
  76.     RLC
  77.     MOV    M,A
  78.     RET
  79. YM1:    RRC
  80.     RRC
  81.     MOV    M,A
  82.     LDA    WY
  83.     ADI    010H
  84.     STA    WY
  85.     RET
  86.  
  87. ;    MOVE CURSOR RIGHT ONE PIXEL
  88.  
  89. XPL::    LXI    H,MA
  90.     MOV    A,M
  91.     ANI    038H
  92.     JNZ    XP1
  93.     MOV    A,M
  94.     RLC
  95.     RLC
  96.     RLC
  97.     MOV    M,A
  98.     RET
  99. XP1:    RRC
  100.     RRC
  101.     RRC
  102.     MOV    M,A
  103.     LDA    EX
  104.     ADI    004H
  105.     STA    EX
  106.     RET
  107.  
  108. ;    MOVECURSOR LEFT ONE PIXEL
  109.  
  110. XMI::    LXI    H,MA
  111.     MOV    A,M
  112.     ANI    007H
  113.     JNZ    XM1
  114.     MOV    A,M
  115.     RRC
  116.     RRC
  117.     RRC
  118.     MOV    M,A
  119.     RET
  120. XM1:    RLC
  121.     RLC
  122.     RLC
  123.     MOV    M,A
  124.     LDA    EX
  125.     SUI    004H
  126.     STA    EX
  127.     RET
  128.  
  129. ;    FAST MOVEMENT OF CURSOR RIGHT TWO PIXELS
  130.  
  131. XPPL::    LDA    EX
  132.     ADI    004H
  133.     STA    EX
  134.     RET
  135.  
  136. ;    FAST MOVEMENT OF CURSOR LEFT TWO PIXELS
  137.  
  138. XMMI::    LDA    EX
  139.     SUI    004H
  140.     STA    EX
  141.     RET
  142.  
  143. ;    LOAD A WITH THE BIT MASK, HL WITH A BYTE ADDRESS
  144. ;    GIVEN THE CURSOR POSITIONING DATA AT (MA,WY,EX)
  145.  
  146. DOT:    LHLD    WY
  147.     MOV    A,H
  148.     MVI    H,VORG/0400H
  149.     DAD    H
  150.     DAD    H
  151.     RRC
  152.     RRC
  153.     ORA    L
  154.     MOV    L,A
  155.     LDA    MA
  156.     RET
  157.  
  158. ;    INITIALIZE CURSOR PARAMETERS
  159.  
  160. HOME::    LXI    H,8080H
  161.     SHLD    WY
  162.     MVI    A,001H
  163.     STA    MA
  164.     RET
  165.  
  166. ;    EXTINGUISH THE CURSOR
  167.  
  168. CUEX::    CALL    DOT
  169.     ORA    M
  170.     MOV    M,A
  171.     RET
  172.  
  173. ;    LIGHT THE CURSOR
  174.  
  175. CULI::    CALL    DOT
  176.     CMA
  177.     ANA    M
  178.     MOV    M,A
  179.     RET
  180.  
  181. ;    REVERSE THE CURSOR
  182.  
  183. CURE::    CALL    DOT
  184.     XRA    M
  185.     MOV    M,A
  186.     RET
  187.  
  188. ;    SENSE THE CURSOR
  189.  
  190. CUSE::    CALL    DOT
  191.     ANA    M
  192.     ANI    03FH
  193.     RET
  194.  
  195. ;    CLEAR THE WHOLE SCREEN TO BLACK
  196.  
  197. BLAK::    LXI    D,VSIZ
  198.     LXI    H,VORG
  199. BL1:    MVI    M,0FFH
  200.     INX    H
  201.     DCR    E
  202.     JNZ    BL1
  203.     DCR    D
  204.     JNZ    BL1
  205.     RET
  206.  
  207. ;    CLEAR THE WHOLE SCREEN TO WHITE
  208.  
  209. WHIT::    LXI    D,VSIZ
  210.     LXI    H,VORG
  211. WHI:    MVI    M,080H
  212.     INX    H
  213.     DCR    E
  214.     JNZ    WHI
  215.     DCR    D
  216.     JNZ    WHI
  217.     RET
  218.  
  219. ;    REVERSE THE WHOLE SCREEN
  220.  
  221. REVE::    LXI    D,VSIZ
  222.     LXI    H,VORG
  223. REV1:    MOV    A,M
  224.     XRI    03FH
  225.     MOV    M,A
  226.     INX    H
  227.     DCR    E
  228.     JNZ    REV1
  229.     DCR    D
  230.     JNZ    REV1
  231.     RET
  232.  
  233. ;    TRANSFORM CARTESIAN COORDINATES IN THE FORM OF X,Y
  234. ;    TRANSMITTED THROUGH REGISTERS (D,E) TO A MASK AND
  235. ;    BYTE ADDRESS.
  236.  
  237. CART::    PUSH    D
  238.     MOV    D,M
  239.     POP    H
  240.     MOV    E,M
  241. KART::    MVI    B,018H
  242.     MVI    C,004H
  243.     MOV    A,E
  244.     CMA
  245.     ADI    031H
  246. CAR1:    CMP    B
  247.     JC    CAR2
  248.     SUB    B
  249. CAR2:    CMC
  250.     ADC    A
  251.     DCR    C
  252.     JNZ    CAR1
  253.     MOV    C,A
  254.     ANI    00FH
  255.     RLC
  256.     RLC
  257.     RLC
  258.     RLC
  259.     STA    WY
  260.     MOV    A,C
  261.     ANI    0F0H
  262.     JNZ    CAR3
  263.     MVI    A,008H
  264. CAR3:    MOV    C,A
  265.     MOV    A,D
  266.     DCR    A
  267.     MOV    B,A
  268.     RLC
  269.     ANI    0FCH
  270.     STA    EX
  271.     MOV    A,B
  272.     ANI    001H
  273.     MOV    A,C
  274.     JNZ    CAR4
  275.     RRC
  276.     RRC
  277.     RRC
  278. CAR4:    STA    MA
  279.     RET
  280.  
  281. ;    DRAW A LINE WITH INCREMENTS DX,DY = (D,E).  INCREMENT
  282. ;    MAY BE + OR - USING COMPLEMENTARY ARITHMETIC, BUT OUGHT
  283. ;    TO BE LESS THAN 64 IN ABSOLUTE VALUE TO AVOID OVERFLOW
  284. ;    PROBLEMS.
  285.  
  286. LINE::    LXI    H,YPL
  287.     MOV    A,E
  288.     ORA    A
  289.     JP    LIN1
  290.     CMA
  291.     INR    A
  292.     MOV    E,A
  293.     LXI    H,YMI
  294. LIN1:    LXI    B,XPPL
  295.     MOV    A,D
  296.     ORA    A
  297.     JP    LIN2
  298.     CMA
  299.     INR    A
  300.     MOV    D,A
  301.     LXI    B,XMMI
  302. LIN2:    CMP    E
  303.     JNC    LIN3
  304.     PUSH    H
  305.     PUSH    B
  306.     POP    H
  307.     POP    B
  308.     MOV    D,E
  309.     MOV    E,A
  310. LIN3:    MOV    A,D
  311.     STA    TS
  312.     MOV    A,E
  313.     ADD    A
  314.     MOV    E,A
  315.     SUB    D
  316.     PUSH    PSW
  317.     SUB    D
  318.     MOV    D,A
  319. LIN4:    POP    PSW
  320.     PUSH    H
  321.     LXI    H,DOLI
  322.     XTHL
  323.     CPI    001H
  324.     JM    LIN5
  325.     PUSH    H
  326.     ADD    D
  327.     JMP    LIN6
  328. LIN5:    ADD    E
  329. LIN6:    PUSH    B
  330.     PUSH    PSW
  331.     LDA TS
  332.     DCR A
  333.     STA TS
  334.     JNZ LIN4
  335.     POP PSW
  336.     RET
  337.  
  338. ;    THE MOVEMENTS IN ONE BYTE NECESSARY TO SHIFT THE
  339. ;    WHOLE SCREEN RIGHT ONE PIXEL.
  340.  
  341. EXPL:    MOV    A,M
  342.     ANI    03FH
  343.     MOV    B,A
  344.     ANI    007H
  345.     RLC
  346.     RLC
  347.     RLC
  348.     ORA    C
  349.     MOV    C,A
  350.     MOV    A,B
  351.     RRC
  352.     RRC
  353.     RRC
  354.     ANI    007H
  355.     MOV    B,C
  356.     MOV    C,A
  357.     RET
  358.  
  359. ;    THE MOVEMENTS WITHIN ONE BYTE NECESSARY FOR SHIFTING
  360. ;    THE WHOLE SCREEN LEFT ONE PIXEL.
  361.  
  362. EXMI:    MOV    A,M
  363.     ANI    03FH
  364.     MOV    B,A
  365.     RRC
  366.     RRC
  367.     RRC
  368.     ANI    007H
  369.     ORA    C
  370.     MOV    C,A
  371.     MOV    A,B
  372.     ANI    007H
  373.     RLC
  374.     RLC
  375.     RLC
  376.     MOV    B,C
  377.     MOV    C,A
  378.     RET
  379.  
  380. ;    THE MOVEMENTS NECESSARY WITHIN ONE BYTE TO SHIFT THE
  381. ;    WHOLE SCREEN DOWN ONE PIXEL.
  382.  
  383. WYMI:    MOV    A,M
  384.     ANI    03FH
  385.     MOV    B,A
  386.     ANI    01BH
  387.     RLC
  388.     ORA    C
  389.     MOV    C,A
  390.     MOV    A,B
  391.     RRC
  392.     RRC
  393.     ANI    009H
  394.     MOV    B,C
  395.     MOV    C,A
  396.     RET
  397.  
  398. ;    THE MOVEMENTS NECESSARY WITHIN ONE BYTE TO SHIFT THE
  399. ;    WHOLE SCREEN UP ONE PIXEL.
  400.  
  401. WYPL:    MOV    A,M
  402.     ANI    03FH
  403.     MOV    B,A
  404.     RRC
  405.     ANI    01BH
  406.     ORA    C
  407.     MOV    C,A
  408.     MOV    A,B
  409.     ANI    009H
  410.     RLC
  411.     RLC
  412.     MOV    B,C
  413.     MOV    C,A
  414.     RET
  415.  
  416. ;    ROTATE THE WHOLE SCREEN RIGHT ONE PIXEL
  417.  
  418. EKSPL::    LXI    H,VORG
  419.     LXI    D,RSIZ-1
  420. EKSP1:    PUSH    H
  421.     DAD    D
  422.     CALL    EXPL
  423.     POP    H
  424. EKSP2:    CALL    EXPL
  425.     MOV    A,B
  426.     ORI    080H
  427.     MOV    M,A
  428.     INX    H
  429.     MOV    A,L
  430.     ANI    LOW(RMSK)
  431.     JNZ    EKSP2
  432.     MOV    A,H
  433.     CPI    HIGH(VORG+VSIZ)
  434.     JNZ    EKSP1
  435.     RET
  436.  
  437. ;    ROTATE THE WHOLE SCREEN LEFT ONE PIXEL
  438.  
  439. EKSMI::    LXI    H,VORG+VSIZ-1
  440.     LXI    D,-RSIZ+1
  441. EKSM1:    PUSH    H
  442.     DAD    D
  443.     CALL    EXMI
  444.     POP    H
  445. EKSM2:    CALL    EXMI
  446.     MOV    A,B
  447.     ORI    080H
  448.     MOV    M,A
  449.     MOV    A,L
  450.     ANI    LOW(RMSK)
  451.     DCX    H
  452.     JNZ    EKSM2
  453.     MOV    A,H
  454.     CPI    HIGH(VORG)-1
  455.     JNZ    EKSM1
  456.     RET
  457.  
  458. ;    ROTATE THE WHOLE SCREEN UP ONE PIXEL.
  459.  
  460. WYEPL::    LXI    H,VORG+VSIZ-1
  461. WYEP1:    LXI    D,-VSIZ+RSIZ
  462.     PUSH    H
  463.     DAD    D
  464.     CALL    WYPL
  465.     POP    H
  466.     PUSH    H
  467.     LXI    D,-RSIZ
  468. WYEP2:    CALL    WYPL
  469.     MOV    A,B
  470.     ORI    080H
  471.     MOV    M,A
  472.     DAD    D
  473.     MOV    A,H
  474.     CPI    HIGH(VORG)-1
  475.     JNZ    WYEP2
  476.     POP    H
  477.     MOV    A,L
  478.     ANI    LOW(RMSK)
  479.     DCX    H
  480.     JNZ    WYEP1
  481.     RET
  482.  
  483. ;    ROTATE THE WHOLE SCREEN DOWN ONE PIXEL
  484.  
  485. WYEMI::    LXI    H,VORG
  486. WYEM1:    LXI    D,VSIZ-RSIZ
  487.     PUSH    H
  488.     DAD    D
  489.     CALL    WYMI
  490.     POP    H
  491.     PUSH    H
  492.     LXI    D,RSIZ
  493. WYEM2:    CALL    WYMI
  494.     MOV    A,B
  495.     ORI    080H
  496.     MOV    M,A
  497.     DAD    D
  498.     MOV    A,H
  499.     CPI    HIGH(VORG+VSIZ)
  500.     JNZ    WYEM2
  501.     POP    H
  502.     INX    H
  503.     MOV    A,L
  504.     ANI    LOW(RMSK)
  505.     JNZ    WYEM1
  506.     RET
  507.  
  508. ;    FAST RIGHT ROTATION BY TWO PIXELS = ONE BYTE
  509.  
  510. EKSPPL::    LXI    H,VORG
  511.     LXI    D,RSIZ-1
  512. EKSPP1:    PUSH    H
  513.     DAD    D
  514.     MOV    C,M
  515.     POP    H
  516. EKSPP2:    MOV    B,M
  517.     MOV    M,C
  518.     MOV    C,B
  519.     INX    H
  520.     MOV    A,L
  521.     ANI    LOW(RMSK)
  522.     JNZ    EKSPP2
  523.     MOV    A,H
  524.     CPI    HIGH(VORG+VSIZ)
  525.     JNZ    EKSPP1
  526.     RET
  527.  
  528. ;    FAST LEFT ROTATE BY TWO PIXELS = ONE BYTE
  529.  
  530. EKSMMI::    LXI    H,VORG+VSIZ-1
  531.     LXI    D,-RSIZ+1
  532. EKSMM1:    PUSH    H
  533.     DAD    D
  534.     MOV    C,M
  535.     POP    H
  536. EKSMM2:    MOV    B,M
  537.     MOV    M,C
  538.     MOV    C,B
  539.     MOV    A,L
  540.     ANI    LOW(RMSK)
  541.     DCX    H
  542.     JNZ    EKSMM2
  543.     MOV    A,H
  544.     CPI    HIGH(VORG)-1
  545.     JNZ    EKSMM1
  546.     RET
  547.  
  548. ;    ADD TO THE NEIGHBOR COUNT OF ADJOINING CELLS ACCORDING
  549. ;    TO THE BITS IN THIS BYTE.  WE DO THE MIDDLE PIXEL,
  550. ;    ADDING TO THE COUNT OF THREE SUCCESSIVE NEIGHBORS IN
  551. ;    REGISTERS B,C,D.
  552.  
  553. ALFA:    MOV    A,M
  554.     RLC
  555.     RLC
  556.     RLC
  557.     JC    ALF1
  558.     INR    B
  559.     INR    C
  560.     INR    D
  561. ALF1:    RLC
  562.     JC    ALF2
  563.     INR    B
  564.     INR    D
  565. ALF2:    RLC
  566.     RC
  567.     INR    B
  568.     INR    C
  569.     INR    D
  570.     RET
  571.  
  572. ;    SHIFT THE NEIGHBOR COUNT AS WE MOVE FORWARD ONE BYTE IN
  573. ;    A ROW SCAN
  574.  
  575. BETA:    MOV    B,C
  576.     MOV    C,D
  577.     MVI    D,00H
  578.     INX    H
  579.     MOV    A,L
  580.     ANI    03FH
  581.     RNZ
  582.     PUSH    D
  583.     LXI    D,-RSIZ
  584.     DAD    D
  585.     POP    D
  586.     RET
  587.  
  588. ;    PRINCIPAL PROGRAM FOR CARRYING OUT A CYCLE OF LIFE.
  589. ;    ONLY THE MIDDLE PIXEL IN EACH BYTE IS CALCULATED
  590. ;    SO THAT THREE PASSES ARE NECESSARY AFTER EACH OF THREE
  591. ;    SHIFTS. TWO ADJACENT PIXELS ARE USED, THE RIGHT TO HOLD
  592. ;    THE PRESENT LIVING STATUS AND THE LEFT FOR INFORMATION
  593. ;    FOR THE NEXT CYCLE.
  594.  
  595. EPSI:    LXI    H,VORG+RSIZ-1
  596. GAMA:    MVI    D,00H
  597.     CALL    ALFA
  598.     CALL    BETA
  599.     CALL    ALFA
  600. DELT:    PUSH    H
  601.     CALL    BETA
  602.     CALL    ALFA
  603.     XTHL
  604.     MOV    A,B
  605.     CPI    002H
  606.     JZ    ETA
  607.     CPI    003H
  608.     JZ    ZETA
  609.     MOV    A,M
  610.     ORI    002H
  611.     MOV    M,A
  612.     JMP    THET
  613. ZETA:    MOV    A,M
  614.     ANI    0FDH
  615.     MOV    M,A
  616.     JMP    THET
  617. ETA:    MOV    A,M
  618.     ANI    0FDH
  619.     MOV    E,A
  620.     ANI    010H
  621.     RRC
  622.     RRC
  623.     RRC
  624.     ORA    E
  625.     MOV    M,A
  626. THET:    POP    H
  627.     MOV    A,L
  628.     ANI    LOW(RMSK)
  629.     JNZ    DELT
  630.     PUSH    D
  631.     LXI    D,2*RSIZ-1
  632.     DAD    D
  633.     POP    D
  634.     MOV    A,H
  635.     CPI    HIGH(VORG+VSIZ)
  636.     JNZ    GAMA
  637.     RET
  638.  
  639. ;    UPDATING LOOP, MOVING LEFT PIXEL TO RIGHT
  640.  
  641. CYCL:    LXI    H,VORG
  642. CYC1:    MOV    A,M
  643.     ANI    007H
  644.     MOV    B,A
  645.     RLC
  646.     RLC
  647.     RLC
  648.     ORA    B
  649.     ORI    080H
  650.     MOV    M,A
  651.     INX    H
  652.     MOV    A,H
  653.     CPI    HIGH(VORG+VSIZ)
  654.     JNZ    CYC1
  655.     RET
  656.  
  657. ;    EXECUTE A SINGLE CYCLE OF LIFE BY UPDATING THE MIDDLE
  658. ;    PIXEL AND MAKING THREE SWEEPS WHILE SHIFTING EACH TIME
  659.  
  660. HH::    CALL    EPSI
  661.     CALL    WYEPL
  662.     CALL    EPSI
  663.     CALL    WYEPL
  664.     CALL    EPSI
  665.     CALL    WYEMI
  666.     CALL    WYEMI
  667.     JMP    CYCL
  668.  
  669. ;    EXTINGUISH CURSOR, MOVE TWO PIXELS EAST, LIGHT CURSOR
  670.  
  671. EE::    CALL    CURE
  672.     CALL    XPPL
  673.     JMP     CURE
  674.  
  675. ;    EXTINGUISH CURSOR, TWO PIXELS WEST, LIGHT CURSOR
  676.  
  677. WW::    CALL    CURE
  678.     CALL    XMMI
  679.     JMP     CURE
  680.  
  681. ;    EXTINGUISH CURSOR, ONE PIXEL NORTH, LIGHT CURSOR
  682.  
  683. NN::    CALL    CURE
  684.     CALL    YPL
  685.     JMP    CURE
  686.  
  687. ;    EXTINGUISH CURSOR, ONE PIXEL SOUTH, LIGHT CURSOR
  688.  
  689. SS::    CALL    CURE
  690.     CALL    YMI
  691.     JMP    CURE
  692.  
  693. ;    EXTINGUISH A LIFE CELL
  694.  
  695. KK::    CALL    XPL
  696.     CALL    CUEX
  697.     JMP    XMI
  698.  
  699. ;    ACTIVATE A LIFE CELL
  700.  
  701. LL::    CALL    XPL
  702.     CALL    CULI
  703.     JMP    XMI
  704.  
  705. ;    MOVE WHOLE SCREEN RIGHT ONE LIFE CELL, WITH CURSOR
  706.  
  707. EAS::    CALL    EKSPPL
  708.     JMP    XPPL
  709.  
  710. ;    MOVE THE WHOLE SCREEN LEFT ONE LIFE CELL, WITH CURSOR
  711.  
  712. WES::    CALL    EKSMMI
  713.     JMP     XMMI
  714.  
  715. ;    MOVE THE WHOLE SCREEN UP ONE LIFE CELL, WITH CURSOR
  716.  
  717. NOR::    CALL    WYEPL
  718.     JMP     YPL
  719.  
  720. ;    MOVE THE WHOLE SCREEN DOWN ONE LIFE CELL, WITH CURSOR
  721.  
  722. SOU::    CALL    WYEMI
  723.     JMP     YMI
  724.  
  725. ;    LIGHT A TWO-PIXEL DOT
  726.  
  727. DOLI::    CALL    CULI
  728.     CALL    XPL
  729.     CALL    CULI
  730.     JMP    XMI
  731.  
  732. ;    EXTINGUISH A TWO-PIXEL DOT
  733.  
  734. DOEX::    CALL    CUEX
  735.     CALL    XPL
  736.     CALL    CUEX
  737.     JMP    XMI
  738.  
  739.     END
  740.