start_of_multicolors

attr0=#41
attr1=#44
attr2=#42
attr3=#07

multicolor48
        ;ret
        ld (mcsp),sp
        
        ld hl,attr0 * 257
        ld sp,mctop + (32*mchgt)
        ld b,mchgt
mcprefill0
        dup 16
        push hl
        edup
        djnz mcprefill0

        pop af
        ld hl,attr1 * 257
        ld de,attr2 * 257
        ld bc,attr3 * 257
        ex af,af'
        exx

waits=$+1
        ld bc,683;693;418;380
        dec bc
        ld a,b
        or c
        jr nz,$-3
        ;ds 2
        inc bc:nop ;min for +3
        ;ld a,(bc) ;min for 48K
        
        ;ds 4
        
;мы могли сюда войти с задержкой 1..21(23, если ddcb) такта (т.к. прервали команду) - итого 20(22) вариантов
;но если было обращение к slowmem, то (на +3 - худший случай) может быть ldir до 28t (slow->slow до 36t? НЕ НАДО ТАК!), ldi до 23t (slow->slow до 31t?), ld a,(ix) до 26t
;как компенсировать? порт #ff (там можно выиграть и верхний бордер? для 3д нельзя, т.к. мультиколор должен жить по прерыванию)? успеем ли сразу вверху экрана, без пустой строчки? всегда ли читается атрибут?
;если выравнивать через обращение к slowmem, то нужна пустая строчка
;(код мультиколора для Pentagon/ATM можно сделать нечувствительным)
;pop = 4+3+3
;push = 5+3+3
        ld sp,#4000 ;slowmem
;мы на line6 +106..+137 (31 вариант)
;пусть мы на line6 +106..112
        pop af ;119,127
;пусть мы на line6 +113
        ;pop af ;120,127
;пусть мы на line6 +114..120
        ;pop af ;127,130
;пусть мы на line6 +121..127
        ;pop af ;131..137
;теперь мы на line6 +127..+137 (11 вариантов)
        ;pause 203t (можно 203..207t)
        ld a,14
        dec a
        jp nz,$-1

         ;nop
         ;nop
        
;мы на line7 +106..+120 (15 вариантов)
;пусть мы на line7 +106..112
        pop af ;119,127
;пусть мы на line7 +113
        ;pop af ;120,127
;пусть мы на line7 +114..120
        ;pop af ;127,130
;теперь мы на line7 +127..+130 (4 варианта, по сути одинаковые)
        ;pause 54t (можно 53..56t)
        ld b,4
        djnz $

;line7 +190..+196 = line0 -28
        ld iy,mctop + 32
        ld ix,mctop + 10
        ld e,32
        ld c,mchgt
        jr mcloop0go
mcloop0
;pause 154t:
        ld d,9
        dec d
        jr nz,$-1
        nop
        nop

;line7 +194
        add ix,de
        add iy,de
mcloop0go
;line0 +14
        ld sp,ix ;mctop + 10 + (N*32)
        ex af,af'
        exx

;сейчас line0 +32
;;line 1
        push hl    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча) - нельзя раньше
        push hl    ;56,64 (вывели 7..6)
        push hl    ;72,80 (вывели 5..4)
        push hl    ;88,96 (вывели 3..2)
        ;
        push hl    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push hl    ;133 nowait last (вывели 31..30)
        push hl    ;144 nowait (вывели 29..28)
        push hl    ;155 nowait (вывели 27..26)
        ;
        push hl    ;166 nowait (вывели 25..24)
        push hl    ;177 nowait (вывели 23..22)
        push hl    ;188 nowait (вывели 21..20)
        push hl    ;199 nowait (вывели 19..18)
        ;
        push hl    ;210 nowait (вывели 17..16)
        push hl    ;221 (= -3) nowait (вывели 15..14)
        push hl    ;7(8),16
        push hl    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10 перед лучом) - можно опоздать на 8t
;;line 2
        push de    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча)
        push de    ;56,64 (вывели 7..6)
        push de    ;72,80 (вывели 5..4)
        push de    ;88,96 (вывели 3..2)
        ;
        push de    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push de    ;133 nowait last (вывели 31..30)
        push de    ;144 nowait (вывели 29..28)
        push de    ;155 nowait (вывели 27..26)
        ;
        push de    ;166 nowait (вывели 25..24)
        push de    ;177 nowait (вывели 23..22)
        push de    ;188 nowait (вывели 21..20)
        push de    ;199 nowait (вывели 19..18)
        ;
        push de    ;210 nowait (вывели 17..16)
        push de    ;221 (= -3) nowait (вывели 15..14)
        push de    ;(прочитаны 0..1)5(8),(прочитаны 2..3)16 (вывели 13..12)
        push de    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10)
;;line 3
        push bc    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча)
        push bc    ;56,64 (вывели 7..6)
        push bc    ;72,80 (вывели 5..4)
        push bc    ;88,96 (вывели 3..2)
        ;
        push bc    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push bc    ;133 nowait last (вывели 31..30)
        push bc    ;144 nowait (вывели 29..28)
        push bc    ;155 nowait (вывели 27..26)
        ;
        push bc    ;166 nowait (вывели 25..24)
        push bc    ;177 nowait (вывели 23..22)
        push bc    ;188 nowait (вывели 21..20)
        push bc    ;199 nowait (вывели 19..18)
        ;
        push bc    ;210 nowait (вывели 17..16)
        push bc    ;221 (= -3) nowait (вывели 15..14)
        push bc    ;(прочитаны 0..1)5(8),(прочитаны 2..3)16 (вывели 13..12)
        push bc    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10)
;;line 4
        push af    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча)
        push af    ;56,64 (вывели 7..6)
        push af    ;72,80 (вывели 5..4)
        push af    ;88,96 (вывели 3..2)
        ;
        push af    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push af    ;133 nowait last (вывели 31..30)
        push af    ;144 nowait (вывели 29..28)
        push af    ;155 nowait (вывели 27..26)
        ;
        push af    ;166 nowait (вывели 25..24)
        push af    ;177 nowait (вывели 23..22)
        push af    ;188 nowait (вывели 21..20)
        push af    ;199 nowait (вывели 19..18)
        ;
        push af    ;210 nowait (вывели 17..16)
        push af    ;221 (= -3) nowait (вывели 15..14)
        push af    ;(прочитаны 0..1)5(8),(прочитаны 2..3)16 (вывели 13..12)
        push af    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10)
;;line 5
        push hl    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча) - нельзя раньше
        push hl    ;56,64 (вывели 7..6)
        push hl    ;72,80 (вывели 5..4)
        push hl    ;88,96 (вывели 3..2)
        ;
        push hl    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push hl    ;133 nowait last (вывели 31..30)
        push hl    ;144 nowait (вывели 29..28)
        push hl    ;155 nowait (вывели 27..26)
        ;
        push hl    ;166 nowait (вывели 25..24)
        push hl    ;177 nowait (вывели 23..22)
        push hl    ;188 nowait (вывели 21..20)
        push hl    ;199 nowait (вывели 19..18)
        ;
        push hl    ;210 nowait (вывели 17..16)
        push hl    ;221 (= -3) nowait (вывели 15..14)
        push hl    ;7(8),16
        push hl    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10 перед лучом) - можно опоздать на 8t
;;line 6
        push de    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча)
        push de    ;56,64 (вывели 7..6)
        push de    ;72,80 (вывели 5..4)
        push de    ;88,96 (вывели 3..2)
        ;
        push de    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push de    ;133 nowait last (вывели 31..30)
        push de    ;144 nowait (вывели 29..28)
        push de    ;155 nowait (вывели 27..26)
        ;
        push de    ;166 nowait (вывели 25..24)
        push de    ;177 nowait (вывели 23..22)
        push de    ;188 nowait (вывели 21..20)
        push de    ;199 nowait (вывели 19..18)
        ;
        push de    ;210 nowait (вывели 17..16)
        push de    ;221 (= -3) nowait (вывели 15..14)
        push de    ;(прочитаны 0..1)5(8),(прочитаны 2..3)16 (вывели 13..12)
        push de    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10)
;;line 7
        push bc    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча)
        push bc    ;56,64 (вывели 7..6)
        push bc    ;72,80 (вывели 5..4)
        push bc    ;88,96 (вывели 3..2)
        ;
        push bc    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push bc    ;133 nowait last (вывели 31..30)
        push bc    ;144 nowait (вывели 29..28)
        push bc    ;155 nowait (вывели 27..26)
        ;
        push bc    ;166 nowait (вывели 25..24)
        push bc    ;177 nowait (вывели 23..22)
        push bc    ;188 nowait (вывели 21..20)
        push bc    ;199 nowait (вывели 19..18)
        ;
        push bc    ;210 nowait (вывели 17..16)
        push bc    ;221 (= -3) nowait (вывели 15..14)
        push bc    ;(прочитаны 0..1)5(8),(прочитаны 2..3)16 (вывели 13..12)
        push bc    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10)
;остановились на line7 +32

        exx
        ex af,af'
;line7 +40

;line0 +0
        dec c
        jp nz,mcloop0
;line0 +14
mcsp=$+1
        ld sp,0
        ret


        macro WAIT4LONG
        nop
        endm

        macro WAIT4
        ;nop
        endm

multicolorplus2
        ;ret
        ld (mcplus2sp),sp
        
        ld hl,attr0 * 257
        ld sp,mctop + (32*mchgt)
        ld b,mchgt
mcplus2prefill0
        dup 16
        push hl
        edup
        djnz mcplus2prefill0

        pop af
        ld hl,attr1 * 257
        ld de,attr2 * 257
        ld bc,attr3 * 257
        ex af,af'
        exx

waitsplus2=$+1
        ld bc,689;693;418;380
        dec bc
        ld a,b
        or c
        jr nz,$-3
        ;ds 2
        inc bc:nop ;min for +3
        ;ld a,(bc) ;min for 48K
        
        ;ds 4
        
;мы могли сюда войти с задержкой 1..21(23, если ddcb) такта (т.к. прервали команду) - итого 20(22) вариантов
;но если было обращение к slowmem, то (на +3 - худший случай) может быть ldir до 28t (slow->slow до 36t? НЕ НАДО ТАК!), ldi до 23t (slow->slow до 31t?), ld a,(ix) до 26t
;как компенсировать? порт #ff (там можно выиграть и верхний бордер? для 3д нельзя, т.к. мультиколор должен жить по прерыванию)? успеем ли сразу вверху экрана, без пустой строчки? всегда ли читается атрибут?
;если выравнивать через обращение к slowmem, то нужна пустая строчка
;(код мультиколора для Pentagon/ATM можно сделать нечувствительным)
;pop = 4+3+3
;push = 5+3+3
        ld sp,#4000 ;slowmem
;мы на line6 +106..+137 (31 вариант)
;пусть мы на line6 +106..112
        pop af ;119,127
;пусть мы на line6 +113
        ;pop af ;120,127
;пусть мы на line6 +114..120
        ;pop af ;127,130
;пусть мы на line6 +121..127
        ;pop af ;131..137
;теперь мы на line6 +127..+137 (11 вариантов)
        ;pause 203t (можно 203..207t)
        ld a,14
        dec a
        jp nz,$-1

         ;nop
         ;nop
        
;мы на line7 +106..+120 (15 вариантов)
;пусть мы на line7 +106..112
        pop af ;119,127
;пусть мы на line7 +113
        ;pop af ;120,127
;пусть мы на line7 +114..120
        ;pop af ;127,130
;теперь мы на line7 +127..+130 (4 варианта, по сути одинаковые)
        ;pause 54t (можно 53..56t)
        ld b,4
        djnz $

;line7 +190..+196 = line0 -28
        ld iy,mctop + 32
        ld ix,mctop + 10
        ld e,32
        ld c,mchgt
        jr mcplus2loop0go
mcplus2loop0
;pause 154t:
        ld d,9
        dec d
        jr nz,$-1
        nop
        nop

;line7 +194
        add ix,de
        add iy,de
mcplus2loop0go
;line0 +14
        ld sp,ix ;mctop + 10 + (N*32)
        ex af,af'
        exx

        ;WAIT4LONG
        WAIT4
;сейчас line0 +32
;;line 1
        push hl    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча) - нельзя раньше
        push hl    ;56,64 (вывели 7..6)
        push hl    ;72,80 (вывели 5..4)
        push hl    ;88,96 (вывели 3..2)
        ;
        push hl    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push hl    ;133 nowait last (вывели 31..30)
        push hl    ;144 nowait (вывели 29..28)
        push hl    ;155 nowait (вывели 27..26)
        ;
        push hl    ;166 nowait (вывели 25..24)
        push hl    ;177 nowait (вывели 23..22)
        push hl    ;188 nowait (вывели 21..20)
        push hl    ;199 nowait (вывели 19..18)
        ;
        push hl    ;210 nowait (вывели 17..16)
        push hl    ;221 (= -3) nowait (вывели 15..14)
        WAIT4LONG
        push hl    ;7(8),16
        push hl    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10 перед лучом) - можно опоздать на 8t
        WAIT4
;;line 2
        push de    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча)
        push de    ;56,64 (вывели 7..6)
        push de    ;72,80 (вывели 5..4)
        push de    ;88,96 (вывели 3..2)
        ;
        push de    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push de    ;133 nowait last (вывели 31..30)
        push de    ;144 nowait (вывели 29..28)
        push de    ;155 nowait (вывели 27..26)
        ;
        push de    ;166 nowait (вывели 25..24)
        push de    ;177 nowait (вывели 23..22)
        push de    ;188 nowait (вывели 21..20)
        push de    ;199 nowait (вывели 19..18)
        ;
        push de    ;210 nowait (вывели 17..16)
        push de    ;221 (= -3) nowait (вывели 15..14)
        WAIT4LONG
        push de    ;(прочитаны 0..1)5(8),(прочитаны 2..3)16 (вывели 13..12)
        push de    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10)
        WAIT4
;;line 3
        push bc    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча)
        push bc    ;56,64 (вывели 7..6)
        push bc    ;72,80 (вывели 5..4)
        push bc    ;88,96 (вывели 3..2)
        ;
        push bc    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push bc    ;133 nowait last (вывели 31..30)
        push bc    ;144 nowait (вывели 29..28)
        push bc    ;155 nowait (вывели 27..26)
        ;
        push bc    ;166 nowait (вывели 25..24)
        push bc    ;177 nowait (вывели 23..22)
        push bc    ;188 nowait (вывели 21..20)
        push bc    ;199 nowait (вывели 19..18)
        ;
        push bc    ;210 nowait (вывели 17..16)
        push bc    ;221 (= -3) nowait (вывели 15..14)
        WAIT4LONG
        push bc    ;(прочитаны 0..1)5(8),(прочитаны 2..3)16 (вывели 13..12)
        push bc    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10)
        WAIT4
;;line 4
        push af    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча)
        push af    ;56,64 (вывели 7..6)
        push af    ;72,80 (вывели 5..4)
        push af    ;88,96 (вывели 3..2)
        ;
        push af    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push af    ;133 nowait last (вывели 31..30)
        push af    ;144 nowait (вывели 29..28)
        push af    ;155 nowait (вывели 27..26)
        ;
        push af    ;166 nowait (вывели 25..24)
        push af    ;177 nowait (вывели 23..22)
        push af    ;188 nowait (вывели 21..20)
        push af    ;199 nowait (вывели 19..18)
        ;
        push af    ;210 nowait (вывели 17..16)
        push af    ;221 (= -3) nowait (вывели 15..14)
        WAIT4LONG
        push af    ;(прочитаны 0..1)5(8),(прочитаны 2..3)16 (вывели 13..12)
        push af    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10)
        WAIT4
;;line 5
        push hl    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча) - нельзя раньше
        push hl    ;56,64 (вывели 7..6)
        push hl    ;72,80 (вывели 5..4)
        push hl    ;88,96 (вывели 3..2)
        ;
        push hl    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push hl    ;133 nowait last (вывели 31..30)
        push hl    ;144 nowait (вывели 29..28)
        push hl    ;155 nowait (вывели 27..26)
        ;
        push hl    ;166 nowait (вывели 25..24)
        push hl    ;177 nowait (вывели 23..22)
        push hl    ;188 nowait (вывели 21..20)
        push hl    ;199 nowait (вывели 19..18)
        ;
        push hl    ;210 nowait (вывели 17..16)
        push hl    ;221 (= -3) nowait (вывели 15..14)
        WAIT4LONG
        push hl    ;7(8),16
        push hl    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10 перед лучом) - можно опоздать на 8t
        WAIT4
;;line 6
        push de    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча)
        push de    ;56,64 (вывели 7..6)
        push de    ;72,80 (вывели 5..4)
        push de    ;88,96 (вывели 3..2)
        ;
        push de    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push de    ;133 nowait last (вывели 31..30)
        push de    ;144 nowait (вывели 29..28)
        push de    ;155 nowait (вывели 27..26)
        ;
        push de    ;166 nowait (вывели 25..24)
        push de    ;177 nowait (вывели 23..22)
        push de    ;188 nowait (вывели 21..20)
        push de    ;199 nowait (вывели 19..18)
        ;
        push de    ;210 nowait (вывели 17..16)
        push de    ;221 (= -3) nowait (вывели 15..14)
        WAIT4LONG
        push de    ;(прочитаны 0..1)5(8),(прочитаны 2..3)16 (вывели 13..12)
        push de    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10)
        WAIT4
;;line 7
        push bc    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча)
        push bc    ;56,64 (вывели 7..6)
        push bc    ;72,80 (вывели 5..4)
        push bc    ;88,96 (вывели 3..2)
        ;
        push bc    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push bc    ;133 nowait last (вывели 31..30)
        push bc    ;144 nowait (вывели 29..28)
        push bc    ;155 nowait (вывели 27..26)
        ;
        push bc    ;166 nowait (вывели 25..24)
        push bc    ;177 nowait (вывели 23..22)
        push bc    ;188 nowait (вывели 21..20)
        push bc    ;199 nowait (вывели 19..18)
        ;
        push bc    ;210 nowait (вывели 17..16)
        push bc    ;221 (= -3) nowait (вывели 15..14)
        WAIT4LONG
        push bc    ;(прочитаны 0..1)5(8),(прочитаны 2..3)16 (вывели 13..12)
        push bc    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10)
        WAIT4
;остановились на line7 +32

        exx
        ex af,af'
;line7 +40

;line0 +0
        dec c
        jp nz,mcplus2loop0
;line0 +14
mcplus2sp=$+1
        ld sp,0
        ret

        
        macro WAIT38
        jr $+2
        jr $+2
        jp $+3
        nop
        endm
        
multicolorpent
        ;ret
        ld (pmcsp),sp
        
        ld hl,attr0 * 257
        ld sp,mctop + (32*mchgt)
        ld b,mchgt
pmcprefill0
        dup 16
        push hl
        edup
        djnz pmcprefill0

        pop af
        ld hl,attr1 * 257
        ld de,attr2 * 257
        ld bc,attr3 * 257
        ex af,af'
        exx

pentwaits=$+1
        ld bc,830
        dec bc
        ld a,b
        or c
        jr nz,$-3
        ;ds 2
        ;ld a,(bc)
        
        
;line7 +190..+196 = line0 -28
        ld iy,mctop + 32 -32
        ld ix,mctop + 10 -32
        ld e,32
        ld c,mchgt
pmcloop0
;pause 154t:
        ld d,9
        dec d
        jr nz,$-1
        nop
        nop

;line7 +194
        add ix,de
        add iy,de

;line0 +14
        ld sp,ix ;mctop + 10 + (N*32)
        ex af,af'
        exx

;сейчас line0 +32
;;line 1
        push hl    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча) - нельзя раньше
        push hl    ;56,64 (вывели 7..6)
        push hl    ;72,80 (вывели 5..4)
        push hl    ;88,96 (вывели 3..2)
        ;
        push hl    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push hl    ;133 nowait last (вывели 31..30)
        push hl    ;144 nowait (вывели 29..28)
        push hl    ;155 nowait (вывели 27..26)
        ;
        push hl    ;166 nowait (вывели 25..24)
        push hl    ;177 nowait (вывели 23..22)
        push hl    ;188 nowait (вывели 21..20)
        push hl    ;199 nowait (вывели 19..18)
        ;
        push hl    ;210 nowait (вывели 17..16)
        push hl    ;221 (= -3) nowait (вывели 15..14)
        push hl    ;7(8),16
        push hl    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10 перед лучом) - можно опоздать на 8t
        WAIT38
;;line 2
        push de    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча)
        push de    ;56,64 (вывели 7..6)
        push de    ;72,80 (вывели 5..4)
        push de    ;88,96 (вывели 3..2)
        ;
        push de    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push de    ;133 nowait last (вывели 31..30)
        push de    ;144 nowait (вывели 29..28)
        push de    ;155 nowait (вывели 27..26)
        ;
        push de    ;166 nowait (вывели 25..24)
        push de    ;177 nowait (вывели 23..22)
        push de    ;188 nowait (вывели 21..20)
        push de    ;199 nowait (вывели 19..18)
        ;
        push de    ;210 nowait (вывели 17..16)
        push de    ;221 (= -3) nowait (вывели 15..14)
        push de    ;(прочитаны 0..1)5(8),(прочитаны 2..3)16 (вывели 13..12)
        push de    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10)
        WAIT38
;;line 3
        push bc    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча)
        push bc    ;56,64 (вывели 7..6)
        push bc    ;72,80 (вывели 5..4)
        push bc    ;88,96 (вывели 3..2)
        ;
        push bc    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push bc    ;133 nowait last (вывели 31..30)
        push bc    ;144 nowait (вывели 29..28)
        push bc    ;155 nowait (вывели 27..26)
        ;
        push bc    ;166 nowait (вывели 25..24)
        push bc    ;177 nowait (вывели 23..22)
        push bc    ;188 nowait (вывели 21..20)
        push bc    ;199 nowait (вывели 19..18)
        ;
        push bc    ;210 nowait (вывели 17..16)
        push bc    ;221 (= -3) nowait (вывели 15..14)
        push bc    ;(прочитаны 0..1)5(8),(прочитаны 2..3)16 (вывели 13..12)
        push bc    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10)
        WAIT38
;;line 4
        push af    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча)
        push af    ;56,64 (вывели 7..6)
        push af    ;72,80 (вывели 5..4)
        push af    ;88,96 (вывели 3..2)
        ;
        push af    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push af    ;133 nowait last (вывели 31..30)
        push af    ;144 nowait (вывели 29..28)
        push af    ;155 nowait (вывели 27..26)
        ;
        push af    ;166 nowait (вывели 25..24)
        push af    ;177 nowait (вывели 23..22)
        push af    ;188 nowait (вывели 21..20)
        push af    ;199 nowait (вывели 19..18)
        ;
        push af    ;210 nowait (вывели 17..16)
        push af    ;221 (= -3) nowait (вывели 15..14)
        push af    ;(прочитаны 0..1)5(8),(прочитаны 2..3)16 (вывели 13..12)
        push af    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10)
        WAIT38
;;line 5
        push hl    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча) - нельзя раньше
        push hl    ;56,64 (вывели 7..6)
        push hl    ;72,80 (вывели 5..4)
        push hl    ;88,96 (вывели 3..2)
        ;
        push hl    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push hl    ;133 nowait last (вывели 31..30)
        push hl    ;144 nowait (вывели 29..28)
        push hl    ;155 nowait (вывели 27..26)
        ;
        push hl    ;166 nowait (вывели 25..24)
        push hl    ;177 nowait (вывели 23..22)
        push hl    ;188 nowait (вывели 21..20)
        push hl    ;199 nowait (вывели 19..18)
        ;
        push hl    ;210 nowait (вывели 17..16)
        push hl    ;221 (= -3) nowait (вывели 15..14)
        push hl    ;7(8),16
        push hl    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10 перед лучом) - можно опоздать на 8t
        WAIT38
;;line 6
        push de    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча)
        push de    ;56,64 (вывели 7..6)
        push de    ;72,80 (вывели 5..4)
        push de    ;88,96 (вывели 3..2)
        ;
        push de    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push de    ;133 nowait last (вывели 31..30)
        push de    ;144 nowait (вывели 29..28)
        push de    ;155 nowait (вывели 27..26)
        ;
        push de    ;166 nowait (вывели 25..24)
        push de    ;177 nowait (вывели 23..22)
        push de    ;188 nowait (вывели 21..20)
        push de    ;199 nowait (вывели 19..18)
        ;
        push de    ;210 nowait (вывели 17..16)
        push de    ;221 (= -3) nowait (вывели 15..14)
        push de    ;(прочитаны 0..1)5(8),(прочитаны 2..3)16 (вывели 13..12)
        push de    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10)
        WAIT38
;;line 7
        push bc    ;(прочитаны 8..9)40,(прочитаны 10..11)48 first (вывели 9..8 после луча)
        push bc    ;56,64 (вывели 7..6)
        push bc    ;72,80 (вывели 5..4)
        push bc    ;88,96 (вывели 3..2)
        ;
        push bc    ;104,112 (вывели 1..0)
        ld sp,iy   ;122
        push bc    ;133 nowait last (вывели 31..30)
        push bc    ;144 nowait (вывели 29..28)
        push bc    ;155 nowait (вывели 27..26)
        ;
        push bc    ;166 nowait (вывели 25..24)
        push bc    ;177 nowait (вывели 23..22)
        push bc    ;188 nowait (вывели 21..20)
        push bc    ;199 nowait (вывели 19..18)
        ;
        push bc    ;210 nowait (вывели 17..16)
        push bc    ;221 (= -3) nowait (вывели 15..14)
        push bc    ;(прочитаны 0..1)5(8),(прочитаны 2..3)16 (вывели 13..12)
        push bc    ;(прочитаны 4..5)24,(прочитаны 6..7)32 (вывели 11..10)
        WAIT38
;остановились на line7 +32

        exx
        ex af,af'
;line7 +40

;line0 +0
        dec c
        jp nz,pmcloop0
;line0 +14
pmcsp=$+1
        ld sp,0
        ret

        display "multicolor size=",$-start_of_multicolors
