НИЖГР:  EQU     16H
ВЕРХГР: EQU     19H
ВЛЕВО:  EQU     8
ВПРАВО: EQU     18H
ВВЕРХ:  EQU     19H
ВНИЗ:   EQU     1AH
ЛИНО:   EQU     0E900H
ДО:     EQU     ЛИНО+37
КОД:    EQU     0F812H
ВВОД:   EQU     0F803H
ВЫВОД:  EQU     0F809H
ПРИНТ:  EQU     0F818H
СТАРТ:  LXI     H,СТРО
        CALL    ПРИНТ
M10:    CALL    ВВОД
        MOV     C,A
        SUI     30H
        JC      M10
        CPI     10
        JNC     M10
        CALL    ВЫВОД
        ADD     A
        MOV     B,A
        ADD     A
        ADD     B
        CMA
        INR     A
        MOV     B,A
        MVI     C,0FFH
        LXI     H,4000H
        DAD     B
        SHLD    ЗАДЕРЖ
СТАРТ1: LXI     H,СТР3
        CALL    ПРИНТ
        CALL    ГПСВ
        CALL    КОД
        CPI     0DH
        JNZ     СТАРТ1+6
        MVI     C,1FH
        CALL    ВЫВОД
        LXI     H,ЛИНО
        PUSH    H
        LXI     B,1
        MVI     E,60
        CALL    БОРТ
        PUSH    H
        LXI     H,ЛИНО+1536
        MVI     E,60
        CALL    БОРТ
        POP     H
        MVI     C,64
        MVI     E,25
        CALL    БОРТ
        POP     H
        MVI     E,25
        CALL    БОРТ
        LXI     H,СТР2
        CALL    ПРИНТ
        LXI     H,ЛИНО+1504
        LXI     B,0-64
        PUSH    H
        PUSH    B
        LHLD    ГОЛОВА
        SHLD    ХВОСТ
        JMP     M7
ЦИКЛ:   CALL    КОД
        LXI     H,0-1
        CPI     ВЛЕВО
        JZ      M0
        LXI     H,1
        CPI     ВПРАВО
        JZ      M0
        LXI     H,0-64
        CPI     ВВЕРХ
        JZ      M0
        LXI     H,64
        CPI     ВНИЗ
        JZ      M0
        XTHL
M0:     POP     B
        POP     D
        XCHG
        DAD     D
        PUSH    H
        PUSH    D
        MOV     C,M
        MVI     M,'O'
        XCHG
        LHLD    ГОЛОВА
        MOV     M,E
        INX     H
        MOV     M,D
        INX     H
        MOV     A,H
        CPI     ВЕРХГР
        JNZ     $+5
        MVI     H,НИЖГР
        SHLD    ГОЛОВА
        LHLD    ЗАДЕРЖ
M6:     DCX     H
        MOV     A,L
        ORA     H
        JNZ     M6
        MOV     A,C
        SUI     20H
        ORA     A
        JZ      M3
        CPI     5FH
        JNZ     СТАРТ1
M7:     LDA     ДЛИН
        STA     РОСТ
M1:     LXI     H,СТР1
        CALL    ПРИНТ
M9:     CALL    ГПСВ
        MOV     A,H
        CPI     38H
        JNC     M9
        MOV     A,L
        CPI     60H
        JNC     M9
        MOV     C,H
        CALL    ВЫВОД
        MOV     C,L
        CALL    ВЫВОД
        CALL    БАЙТ
        SUI     20H
        ORA     A
        JNZ     M1
        MVI     C,7FH
        CALL    ВЫВОД
M3:     LXI     H,РОСТ
        DCR     M
        JM      M5
        LXI     H,ДО
        MVI     A,3AH
M4:     INR     M
        CMP     M
        JNZ     ЦИКЛ
        MVI     M,30H
        DCX     H
        JMP     M4
M5:     INR     M
        LHLD    ХВОСТ
        MOV     E,M
        INX     H
        MOV     D,M
        INX     H
        MOV     A,H
        CPI     ВЕРХГР
        JNZ     $+5
        MVI     H,НИЖГР
        SHLD    ХВОСТ
        MVI     A,20H
        STAX    D
        JMP     ЦИКЛ
БОРТ:   MVI     M,'+'
        DAD     B
        DCR     E
        JNZ     БОРТ
        RET
ГПСВ:   LHLD    CB
        MVI     C,16
ГП0:    MOV     A,H
        DAD     H
        ANI     60H
        JPE     $+4
        INX     H
        DCR     C
        JNZ     ГП0
        SHLD    CB
        RET
СТРО:   DB      0DH,0AH
        DB      '*** П И Т О Н ***'
        DB      0DH,0AH
        DB      'СКОРОСТЬ (0..9)?',0
СТР1:   DB      7,1BH,'Y',0
СТР2:   DB      7,1BH,'Y',20H,3AH
        DB      ' ДЛИНА - 000 ',0
СТР3:   DB      1BH,'Y',20H+24,20H+32
        DB      ' НАЖМИТЕ <ВК>',0
ДЛИН:   DB      4
CB:     DW      8
ГОЛОВА: DW      1600H
ХВОСТ:  DS      2
РОСТ:   DS      1
ЗАДЕРЖ: DS      2

WRK:    EQU     0F75AH  ; РАБОЧАЯ ЯЧЕЙКА
БАЙТ:   LHLD    WRK
        MOV     A,M
        RET