home *** CD-ROM | disk | FTP | other *** search
Text File | 1984-04-29 | 12.5 KB | 1,220 lines |
-
- MSK: DB 00
- WY: DB 00
- EX: DB 00
- EKS: DB 00
- SSIZ EQU 02000H
- RSIZ EQU 040H
- SORG EQU 0C000H
-
-
- ; POINT MODE: MOVE CURSOR RIGHT
-
- PXPL:: LXI H,MSK
- MOV A,M
- ANI 0AAH
- JZ PXP1
- RRC
- MOV M,A
- RET
- PXP1: MOV A,M
- RRC
- RRC
- RRC
- MOV M,A
- ANI 0A0H
- RZ
- LDA EX
- ADI 004H
- STA EX
- RET
-
- ; POINT MODE: MOVE CURSOR LEFT
-
- PXMI:: LXI H,MSK
- MOV A,M
- ANI 055H
- JZ PXM1
- RLC
- MOV M,A
- RET
- PXM1: MOV A,M
- RLC
- RLC
- RLC
- MOV M,A
- ANI 005H
- RZ
- LDA EX
- SUI 004H
- STA EX
- RET
-
- ; POINT MODE: MOVE CURSOR UP
-
- PYPL:: LXI H,MSK
- MOV A,M
- ANI 033H
- JZ PYP1
- RLC
- RLC
- MOV M,A
- RET
- PYP1: MOV A,M
- RRC
- RRC
- MOV M,A
- LDA WY
- SUI 002H
- STA WY
- RET
-
- ; POINT MODE: MOVE CURSOR DOWN
-
- PYMI:: LXI H,MSK
- MOV A,M
- ANI 0CCH
- JZ PYM1
- RRC
- RRC
- MOV M,A
- RET
- PYM1: MOV A,M
- RLC
- RLC
- MOV M,A
- LDA WY
- ADI 002H
- STA WY
- RET
-
- ; LOAD ACC WITH MASK, HL WITH BYTE ADDRESS FROM
- ; (MSK,WY,EX)
-
- DOT: LHLD WY
- MOV A,H
- MVI H,SORG/02000H
- DAD H
- DAD H
- DAD H
- DAD H
- DAD H
- RRC
- RRC
- ORA L
- MOV L,A
- LDA MSK
- RET
-
- ; POINT MODE: HOME CURSOR
-
- PHOM:: LXI H,08080H
- SHLD WY
- MVI A,040H
- STA MSK
- RET
-
- ; POINT MODE: MAKE WHITE DOT AT CURSOR
-
- PWHIT:: CALL DOT
- ORA M
- MOV M,A
- RET
-
- ; POINT MODE: MAKE BLACK DOT AT CURSOR
-
- PBLAK:: CALL DOT
- CMA
- ANA M
- MOV M,A
- RET
-
- ; POINT MODE: REVERSE DOT UNDER CURSOR
-
- PREV:: CALL DOT
- XRA M
- MOV M,A
- RET
-
- ; POINT MODE: TEST DOT UNDER CURSOR
-
- PTEST:: CALL DOT
- ANA M
- RET
-
- ; BOTH MODES: CLEAR SCREEN TO WHITE
-
- WHIT:: LXI D,SSIZ
- LXI H,SORG
- WHI1: MVI M,0FFH
- INX H
- DCR E
- JNZ WHI1
- DCR D
- JNZ WHI1
- RET
-
- ; BOTH MODES: CLEAR SCREEN TO BLACK
-
- BLAK:: LXI D,SSIZ
- LXI H,SORG
- BLA1: MVI M,000H
- INX H
- DCR E
- JNZ BLA1
- DCR D
- JNZ BLA1
- RET
-
- ; BOTH MODES: REVERSE ENTIRE SCREEN
-
- REVE:: LXI D,SSIZ
- LXI H,SORG
- REV1: MOV A,M
- XRI 0FFH
- MOV M,A
- INX H
- DCR E
- JNZ REV1
- DCR D
- JNZ REV1
- RET
-
- ; POINT MODE: GIVEN A CARTESIAN ADDRESS, FORM A BIT
- ; MASK AND BYTE ADDRESS FOR THE CURSOR
-
- PCAR:: MOV A,M
- ANI 0FCH
- STA EX
- LDAX D
- ANI 0FEH
- STA WY
- MVI B,80H
- MOV A,M
- RRC
- JNC PCA1
- MOV C,A
- MOV A,B
- RRC
- MOV B,A
- MOV A,C
- PCA1: RRC
- JNC PCA2
- MOV A,B
- RRC
- RRC
- RRC
- RRC
- MOV B,A
- PCA2: LDAX D
- RRC
- MOV A,B
- JNC PCA3
- RRC
- RRC
- PCA3: STA MSK
- RET
-
- ; POINT MODE: DRAW A LINE BETWEEN TWO POINTS
- ; GIVEN THE INCREMENTS (B,C)=(DX,DY)
-
- PLIN:: MOV B,M
- XCHG
- MOV C,M
- LXI H,PXPL
- MOV A,B
- ORA A
- JP PLI1
- CMA
- INR A
- MOV B,A
- LXI H,PXMI
- PLI1: LXI D,PYMI
- MOV A,C
- ORA A
- JP PLI2
- CMA
- INR A
- MOV C,A
- LXI D,PYPL
- PLI2: CMP B
- JNC PLI3
- XCHG
- MOV C,B
- MOV B,A
- MOV A,C
- PLI3: STA EKS
- XRA A
- SUB B
- SUB B
- MOV B,A
- ADD C
- PUSH PSW
- ADD C
- MOV C,A
- PLI4: POP PSW
- PUSH H
- LXI H,PWHIT
- XTHL
- JP PLI5
- PUSH H
- ADD C
- JMP PLI6
- PLI5: ADD B
- PLI6: PUSH D
- PUSH PSW
- LDA EKS
- DCR A
- STA EKS
- JNZ PLI4
- POP PSW
- RET
-
- ; POINT MODE: SHIFT WITHIN ONE BYTE TO SCROLL THE
- ; SCREEN RIGHT ONE PIXEL
-
- PEXPL:: MOV A,M
- RRC
- MOV B,A
- ANI 055H
- ORA C
- MOV C,A
- MOV A,B
- RRC
- RRC
- MOV B,A
- ANI 00AH
- ORA C
- MOV C,A
- MOV A,B
- ANI 0A0H
- MOV B,C
- MOV C,A
- RET
-
- ; POINT MODE: INTRA-BYTE SHIFT TO SCROLL LEFT ONE PIXEL
-
- PEXMI:: MOV A,M
- RLC
- MOV B,A
- ANI 0AAH
- ORA C
- MOV C,A
- MOV A,B
- RLC
- RLC
- MOV B,A
- ANI 050H
- ORA C
- MOV C,A
- MOV A,B
- ANI 005H
- MOV B,C
- MOV C,A
- RET
-
- ; POINT MODE: INTRABYTE SHIFT TO SCROLL UP ONE PIXEL
-
- PWYPL:: MOV A,M
- MOV B,A
- RLC
- RLC
- ANI 0CCH
- ORA C
- MOV C,A
- MOV A,B
- ANI 0CCH
- RRC
- RRC
- MOV B,C
- MOV C,A
- RET
-
- ; POINT MODE: INTRABYTE SHIFT TO SCROLL DOWN ONE PIXEL
-
- PWYMI:: MOV A,M
- MOV B,A
- RRC
- RRC
- ANI 033H
- ORA C
- MOV C,A
- MOV A,B
- ANI 033H
- RLC
- RLC
- MOV B,C
- MOV C,A
- RET
-
- ; POINT MODE: MOVE ENTIRE SCREEN RIGHT ONE PIXEL
-
- PEKSPL:: LXI H,SORG
- LXI D,RSIZ-1
- PEKSP1: PUSH H
- DAD D
- CALL PEXPL
- POP H
- PEKSP2: CALL PEXPL
- MOV M,B
- INX H
- MOV A,L
- ANI 03FH
- JNZ PEKSP2
- MOV A,H
- CPI HIGH(SORG+SSIZ)
- JNZ PEKSP1
- RET
-
- ; POINT MODE: SHIFT ENTIRE SCREEN LEFT ONE PIXEL
-
- PEKSMI:: LXI H,SORG+SSIZ-1
- LXI D,-RSIZ+1
- PEKSM1: PUSH H
- DAD D
- CALL PEXMI
- POP H
- PEKSM2: CALL PEXMI
- MOV M,B
- MOV A,L
- ANI 03FH
- DCX H
- JNZ PEKSM2
- MOV A,H
- CPI HIGH(SORG)-1
- JNZ PEKSM1
- RET
-
- ; POINT MODE: SHIFT ENTIRE SCREEN UP ONE PIXEL
-
- PWYEPL:: LXI H,SORG+SSIZ-1
- PWYEP1: LXI D,-SSIZ+RSIZ
- PUSH H
- DAD D
- CALL PWYPL
- POP H
- PUSH H
- LXI D,-RSIZ
- PWYEP2: CALL PWYPL
- MOV M,B
- DAD D
- MOV A,H
- CPI HIGH(SORG)-1
- JNZ PWYEP2
- POP H
- MOV A,L
- ANI 03FH
- DCX H
- JNZ PWYEP1
- RET
-
- ; POINT MODE: MOVE ENTIRE SCREEN DOWN ONE PIXEL
-
- PWYEMI:: LXI H,SORG
- PWYEM1: LXI D,SSIZ-RSIZ
- PUSH H
- DAD D
- CALL PWYMI
- POP H
- PUSH H
- LXI D,RSIZ
- PWYEM2: CALL PWYMI
- MOV M,B
- DAD D
- MOV A,H
- CPI HIGH(SORG+SSIZ)
- JNZ PWYEM2
- POP H
- INX H
- MOV A,L
- ANI 03FH
- JNZ PWYEM1
- RET
-
- ; FAST RIGHT SHIFT OF 4 PIXELS= 1 BYTE
-
- FXPL:: LXI H,SORG
- LXI D,RSIZ-1
- FXP1: PUSH H
- DAD D
- MOV B,M
- POP H
- FXP2: MOV A,M
- MOV M,B
- MOV B,A
- INX H
- MOV A,L
- ANI 03FH
- JNZ FXP2
- MOV A,H
- CPI HIGH(SORG+SSIZ)
- JNZ FXP1
- RET
-
- ; FAST LEFT SHIFT OF 4 PIXELS WHICH IS ONE BYTE
-
- FXMI:: LXI H,SORG+SSIZ-1
- LXI D,-RSIZ+1
- FXM1: PUSH H
- DAD D
- MOV B,M
- POP H
- FXM2: MOV A,M
- MOV M,B
- MOV B,A
- MOV A,L
- ANI 03FH
- DCX H
- JNZ FXM2
- MOV A,H
- CPI HIGH(SORG)-1
- JNZ FXM1
- RET
-
- ; FAST SHIFT UP BY 2 PIXELS = 1 BYTE
-
- FYPL:: LXI H,SORG+SSIZ-1
- FYP1: LXI D,-SSIZ+RSIZ
- PUSH H
- DAD D
- MOV B,M
- POP H
- PUSH H
- LXI D,-RSIZ
- FYP2: MOV A,M
- MOV M,B
- MOV B,A
- DAD D
- MOV A,H
- CPI HIGH(SORG)-1
- JNZ FYP2
- POP H
- MOV A,L
- ANI 03FH
- DCX H
- JNZ FYP1
- RET
-
- ; FAST DOWN SHIFT OF ENTIRE SCREEN BY 2 PIXELS = 1 BYTE
-
- FYMI:: LXI H,SORG
- FYM1: LXI D,SSIZ-RSIZ
- PUSH H
- DAD D
- MOV B,M
- POP H
- PUSH H
- LXI D,RSIZ
- FYM2: MOV A,M
- MOV M,B
- MOV B,A
- DAD D
- MOV A,H
- CPI HIGH(SORG+SSIZ)
- JNZ FYM2
- POP H
- INX H
- MOV A,L
- ANI 03FH
- JNZ FYM1
- RET
-
- ; GRAY MODE: IN-BYTE RIGHT SHIFT
-
- GEXPL:: MOV A,M
- RRC
- RRC
- RRC
- RRC
- MOV B,A
- ANI 00FH
- ORA C
- MOV C,A
- MOV A,B
- ANI 0F0H
- MOV B,C
- MOV C,A
- RET
-
- ; GRAY MODE: INTRABYTE LEFT SHIFT OF ONE PIXEL
-
- GEXMI:: MOV A,M
- RLC
- RLC
- RLC
- RLC
- MOV B,A
- ANI 0E0H
- ORA C
- MOV C,A
- MOV A,B
- ANI 00FH
- MOV B,C
- MOV C,A
- RET
-
- ; GRAY MODE: SHIFT WHOLE SCREEN 1 PIXEL RIGHT
-
- GEKSPL:: LXI H,SORG
- LXI D,RSIZ-1
- GEKSP1: PUSH H
- DAD D
- CALL GEXPL
- POP H
- GEKSP2: CALL GEXPL
- MOV M,B
- INX H
- MOV A,L
- ANI 03FH
- JNZ GEKSP2
- MOV A,H
- CPI HIGH(SORG+SSIZ)
- JNZ GEKSP1
- RET
-
- ; GRAY MODE: SHIFT ENTIRE SCREEN LEFT ONE PIXEL
-
- GEKSMI:: LXI H,SORG+SSIZ-1
- LXI D,-RSIZ+1
- GEKSM1: PUSH H
- DAD D
- CALL GEXMI
- POP H
- GEKSM2: CALL GEXMI
- MOV M,B
- MOV A,L
- ANI 03FH
- DCX H
- JNZ GEKSM2
- MOV A,H
- CPI HIGH(SORG)-1
- JNZ GEKSM1
- RET
-
- ; GRAY MODE: MOVE CURSOR RIGHT ONE PIXEL
-
- GXPL:: LXI H,MSK
- MOV A,M
- ANI 0F0H
- JZ GXP1
- MVI M,00FH
- RET
- GXP1: MVI M,0F0H
- LDA EX
- ADI 004H
- STA EX
- RET
-
- ; GRAY MODE: SHIFT CURSOR LEFT ONE PIXEL
-
- GXMI:: LXI H,MSK
- MOV A,M
- ANI 00FH
- JZ GXM1
- MVI M,0F0H
- RET
- GXM1: MVI M,00FH
- LDA EX
- SUI 004H
- STA EX
- RET
-
- ; GRAY MODE: MOVE CURSOR UP ONE PIXEL
-
- GYPL:: LDA WY
- SUI 002H
- STA WY
- RET
-
- ; GRAY MODE: MOVE CURSOR DOWN ONE PIXEL
-
- GYMI:: LDA WY
- ADI 002H
- STA WY
- RET
-
- ; GRAY MODE: HOME CURSOR
-
- GHOM:: LXI H,08080H
- SHLD WY
- MVI A,00FH
- STA MSK
- RET
-
- ; GRAY MODE: MAKE CURSOR PIXEL WHITE
-
- GWHI:: CALL DOT
- ORA M
- MOV M,A
- RET
-
- ; GRAY MODE: MAKE CURSOR PIXEL BLACK
-
- GBLA:: CALL DOT
- CMA
- ANA M
- MOV M,A
- RET
-
- ; GRAY MODE: REVERSE CURSOR PIXEL
-
- GREV:: CALL DOT
- XRA M
- MOV M,A
- RET
-
- ; GRAY MODE: SENSE CURSOR PIXEL
-
- GSEN:: CALL DOT
- ANA M
- RZ
- PUSH PSW
- ANI 0F0H
- POP PSW
- RZ
- RRC
- RRC
- RRC
- RRC
- RET
-
- ; GRAY MODE: RAISE GRAY LEVEL OF CURSOR PIXEL
-
- GZPL:: CALL DOT
- MOV B,A
- CMA
- ANA M
- MOV C,A
- MOV A,B
- ANA M
- ADI 011H
- ANA B
- ORA C
- MOV M,A
- RET
-
- ; GRAY MODE: LOWER PIXEL UNDER CURSOR ONE GRAY LEVEL
-
- GZMI:: CALL DOT
- MOV B,A
- CMA
- ANA M
- MOV C,A
- MOV A,B
- ANA M
- ADI 0FFH
- ANA B
- ORA C
- MOV M,A
- RET
-
- ; GRAY MODE: CARTESIAN COORDINATES TO MASK, BYTE ADDRESS
-
- GCART:: LDAX D
- ANI 03FH
- RLC
- STA WY
- MOV A,M
- ANI 03FH
- RRC
- PUSH PSW
- RLC
- RLC
- RLC
- STA EX
- POP PSW
- MVI A,00FH
- JC GCAR1
- XRI 0FFH
- GCAR1: STA MSK
- RET
-
- ; BLOCK OF COMBINED CURSOR MOVEMENTS AND CURSOR
- ; INVERSIONS IN THE POINT MODE - FOR DEMONSTRATION
-
- PN: CALL PREV
- CALL PYPL
- JMP PREV
-
- PS: CALL PREV
- CALL PYMI
- JMP PREV
-
- PE: CALL PREV
- CALL PXPL
- JMP PREV
-
- PW: CALL PREV
- CALL PXMI
- JMP PREV
-
- ; PLACE THE INDIVIDUAL NEGATIVES OF THE BYTES B,C IN H,L
-
- NEGL: MOV A,C
- CMA
- INR A
- MOV L,A
- MOV A,B
- CMA
- INR A
- MOV H,A
- RET
-
-
- ; BLOCK OF COMBINED SCREEN-CURSOR SHIFTS
-
- PEA: CALL PEKSPL
- JMP PXPL
-
- PWE: CALL PEKSMI
- JMP PXMI
-
- PNO: CALL PWYEPL
- JMP PYPL
-
- PSO: CALL PWYEMI
- JMP PYMI
-
- ; SIMILAR BLOCK FOR GREY MODE
-
- GEA: CALL GEKSPL
- JMP GXPL
-
- GWE: CALL GEKSMI
- JMP GXMI
-
- GNO: CALL FYPL
- JMP GYPL
-
- GSO: CALL FYMI
- JMP GYMI
-
- ; COMBINED CURSOR MOVEMENT AND 8-LEVEL GRAY SHIFT
-
- GE: CALL GZEH
- CALL GXPL
- JMP GZEH
-
- GW: CALL GZEH
- CALL GXMI
- JMP GZEH
-
- GN: CALL GZEH
- CALL GYPL
- JMP GZEH
-
- GS: CALL GZEH
- CALL GYMI
- JMP GZEH
-
- ; MOVE WHOLE SCREEN THROUGH 8 GRAY POINTS
-
- GZEEH: LXI D,SSIZ
- LXI H,SORG
- GZEE1: MOV B,M
- MOV A,B
- ANI 0F0H
- MOV C,A
- MOV A,B
- ADI 008H
- ANI 00FH
- ORA C
- ADI 080H
- MOV M,A
- INX H
- DCR E
- JNZ GZEE1
- DCR D
- JNZ GZEE1
- RET
-
- ; LIGHTEN THE WHOLE SCREEN BY ONE GREY POINT
-
- GZEEPL: LXI D,SSIZ
- LXI H,SORG
- GZEEP1: MOV B,M
- MOV A,B
- ANI 0F0H
- MOV C,A
- MOV A,B
- ADI 001H
- ANI 00FH
- ORA C
- ADI 010H
- MOV M,A
- INX H
- DCR E
- JNZ GZEEP1
- DCR D
- JNZ GZEEP1
- RET
-
- ; DARKEN WHOLE SCREEN BY ONE GRAY POINT
-
- GZEEMI: LXI D,SSIZ
- LXI H,SORG
- GZEEM1: MOV B,M
- MOV A,B
- ANI 0F0H
- MOV C,A
- MOV A,B
- ADI 00FH
- ANI 00FH
- ORA C
- ADI 0F0H
- MOV M,A
- INX H
- DCR E
- JNZ GZEEM1
- DCR D
- JNZ GZEEM1
- RET
-
- ; LIGHTEN THE PIXEL UNDER THE CURSOR BY 8 POINTS
-
- GZEH: CALL DOT
- GZED: MOV C,A
- CMA
- ANA M
- MOV B,A
- MOV A,M
- ANA C
- ADI 088H
- ANA C
- ORA B
- MOV M,A
- RET
-
- ; LIGHTEN ALL PIXELS FROM HERE TO LEFT MARGIN 8 POINTS
-
- EDGE: CALL DOT
- ORA A
- JP EDG1
- CALL GZED
- EDG1: MOV A,L
- ANI 03FH
- RZ
- DCX H
- MOV B,M
- MOV A,B
- ANI 0F0H
- MOV C,A
- MOV A,B
- SUI 008H
- ANI 00FH
- ORA C
- SUI 080H
- MOV M,A
- JMP EDG1
-
- ; BLOCK OF COMBINED CURSOR MOVEMENTS AND PIXEL REVERSES
-
- GEE: CALL GXPL
- JMP GZEH
-
- GWW: CALL GXMI
- JMP GZEH
-
- GNN: CALL GYPL
- JMP GZEH
-
- GSS: CALL GYMI
- JMP GZEH
-
- ; DRAW A LINE WITH GIVEN INCREMENTS IN GREY MODE
-
- GLIN: LXI H,GXPL
- MOV A,B
- ORA A
- JP GLI1
- CMA
- INR A
- MOV B,A
- LXI H,GXMI
- GLI1: LXI D,GYPL
- MOV A,C
- ORA A
- JP GLI2
- CMA
- INR A
- MOV C,A
- LXI D,GYMI
- GLI2: CMP B
- JNC GLI3
- XCHG
- MOV C,B
- MOV B,A
- GLI3: MOV A,C
- STA EKS
- MOV A,B
- ADD A
- MOV B,A
- SUB C
- PUSH PSW
- SUB C
- MOV C,A
- GLI4: POP PSW
- PUSH H
- LXI H,GZEH
- XTHL
- CPI 001H
- JM GLI5
- PUSH H
- ADD C
- JMP GLI6
- GLI5: ADD B
- GLI6: PUSH D
- PUSH PSW
- LDA EKS
- DCR A
- STA EKS
- JNZ GLI4
- POP PSW
- RET
-
- ; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- ; - - - LIFE IN THE GRAY MODE - - -
- ; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-
- ; ORDINARY CYCLE FOR NEIGHBORS OF LEFT PIXEL
-
- OLEP: PUSH H
- PUSH H
- DAD D
- MOV A,M
- ADI 011H
- MOV M,A
- DCX H
- INR M
- POP H
- DCX H
- INR M
- DAD B
- INR M
- INX H
- MOV A,M
- ADI 011H
- MOV M,A
- POP H
- RET
-
- ; ORDINARY CYCLE FOR NEIGHBORS OF RIGHT PIXEL
-
- ORIP: PUSH H
- PUSH H
- DAD D
- MOV A,M
- ADI 011H
- MOV M,A
- INX H
- MOV A,M
- ADI 010H
- MOV M,A
- POP H
- INX H
- MOV A,M
- ADI 010H
- MOV M,A
- DAD B
- MOV A,M
- ADI 010H
- MOV M,A
- DCX H
- MOV A,M
- ADI 011H
- MOV M,A
- POP H
- RET
-
- ; COUNT NEIGHBORS OF ORDINARY CELLS
-
- ONEC: LXI B,RSIZ
- LXI D,-RSIZ
- LXI H,SORG+RSIZ
- ONE1: MOV A,M
- ANI 080H
- CNZ RNOM
- MOV A,M
- ANI 008H
- CNZ LNOM
- INX H
- MOV A,L
- CPI 0C0H
- JNZ ONE1
- MOV A,H
- CPI HIGH(SORG+SSIZ)-1
- JNZ ONE1
- RET
-
- ; UPDATE TO NEXT GENERATION ONCE NEIGHBOR COUNT DONE
-
- NEXT: LXI D,SSIZ
- LXI H,SORG
- NEX1: MOV A,M
- ORA A
- JZ NEX8
- MOV C,A
- ANI 077H
- MOV B,A
- MOV A,C
- ANI 088H
- MOV C,A
- RLC
- ADD B
- MOV B,A
- PUSH H
- LXI H,NEX4
- XTHL
- MOV A,B
- ANI 0F0H
- CPI 020H
- JZ NEX2
- CPI 030H
- JZ NEX3
- XRA A
- RET
- NEX2: MOV A,C
- ANI 080H
- RET
- NEX3: MVI A,080H
- RET
- NEX4: PUSH PSW
- PUSH H
- LXI H,NEX7
- XTHL
- MOV A,B
- ANI 00FH
- CPI 002H
- JZ NEX5
- CPI 003H
- JZ NEX6
- XRA A
- RET
- NEX5: MOV A,C
- ANI 008H
- RET
- NEX6: MVI A,008H
- RET
- NEX7: POP B
- ORA B
- MOV M,A
- NEX8: INX H
- DCR E
- JNZ NEX1
- DCR D
- JNZ NEX1
- RET
-
- ; CYCLE FOR LEFT PIXEL ON LEFT MARGIN
-
- LLEP: PUSH H
- PUSH H
- PUSH H
- DAD D
- MOV A,M
- ADI 011H
- MOV M,A
- MOV A,L
- ORI 03FH
- MOV L,A
- INR M
- POP H
- MOV A,L
- ORI 03FH
- MOV L,A
- INR M
- DAD B
- INR M
- POP H
- DAD B
- MOV A,M
- ADI 011H
- MOV M,A
- POP H
- RET
-
- ; CYCLE FOR RIGHT PIXEL ON RIGHT MARGIN
-
- RRIP: PUSH H
- PUSH H
- PUSH H
- DAD D
- MOV A,M
- ADI 011H
- MOV M,A
- MOV A,L
- ANI 0C0H
- MOV L,A
- MOV A,M
- ADI 010H
- MOV M,A
- POP H
- MOV A,L
- ANI 0C0H
- MOV L,A
- MOV A,M
- ADI 010H
- MOV M,A
- DAD B
- MOV A,M
- ADI 010H
- MOV M,A
- POP H
- DAD B
- MOV A,M
- ADI 011H
- MOV M,A
- POP H
- RET
-
- ; LEFT PIXEL: CHOOSE BETWEEN NORMAL OR MARGIN CYCLE
-
- RNOM: MOV A,L
- ANI 03FH
- JZ LLEP
- JMP OLEP
-
- ; RIGHT PIXEL: CHOSE NORMAL OR MARGIN CYCLE
-
- LNOM: MOV A,L
- ANI 03FH
- CPI 03FH
- JZ RRIP
- JMP ORIP
-
- ; COUNT NEIGHBORS ALONG TOP MARGIN
-
- NCTO: LXI B,RSIZ
- LXI D,SSIZ-RSIZ
- LXI H,SORG
- NCTI: MOV A,M
- ANI 080H
- CNZ RNOM
- MOV A,M
- ANI 008H
- CNZ LNOM
- INX H
- MOV A,L
- ANI 03FH
- JNZ NCTI
- RET
-
- ; COUNT NEIGHBORS ALONG BOTTOM MARGIN
-
- NCBO: LXI B,-SSIZ+RSIZ
- LXI D,-RSIZ
- LXI H,SORG+SSIZ-RSIZ
- JMP NCTI
-
- ; EXECUTE ONE CYCLE OF LIFE
-
- LIFE: CALL ONEC
- CALL NCTO
- CALL NCBO
- JMP NEXT
-
-
- END
-