;z80
;assembler
;zx-spectrum



IN_SP   PUSH    HL
        XOR     A
        LD      HL,BUF_W
        LD      DE,BUF_W1
        LD      BC,1023
        LD      (HL),A
        LDIR 
        LD      (WIW18+1),A
        LD      (WIW20+1),A
        LD      (WIW21+1),A
        LD      (WIW26+1),A
        LD      (WIW28+1),A
        LD      (WIW29+1),A
        LD      (WIW31+1),A
        LD      (WIW33+1),A
        LD      (WIW35+1),A
        LD      (WIW37+1),A
        LD      (WIW39+1),A
        LD      (WIW41+1),A
        LD      (WIW43+1),A
        LD      (WIW45+1),A
        LD      (WIW47+1),A
        LD      (WIW49+1),A
        LD      (WIW65+1),A
        LD      (WIW67+1),A
        LD      (WIW4+1),A
        LD      HL,#54E0
        LD      (WIW3+1),HL
        POP     HL
        LD      A,(HL)
        LD      (WIEW_UP+1),A
        INC     HL
        LD      B,16
IN_SP3  LD      A,(HL)
        INC     HL
        EXX 
        ADD     A,A
        LD      L,A
        LD      H,0
        ADD     HL,HL
        ADD     HL,HL
        ADD     HL,HL
        ADD     HL,HL
        LD      DE,FONT1-1024
        ADD     HL,DE
IN_SP1  LD      DE,BUF_W
        LD      B,16
IN_SP2  LD      A,(HL)
        LD      (DE),A
        INC     HL
        INC     DE
        LD      A,(HL)
        LD      (DE),A
        INC     HL
        INC     DE
        DJNZ    IN_SP2
        LD      (IN_SP1+1),DE
        EXX 
        DJNZ    IN_SP3
        LD      HL,BUF_W
        LD      (IN_SP1+1),HL
        LD      HL,BUF_W
        LD      DE,BUF_W1
        CALL    IN_SP9
        CALL    IN_SP10
        CALL    IN_SP11
        LD      C,13
IN_SP8  LD      B,4
IN_SP7  LD      A,(HL)
        LD      (DE),A
        INC     HL
        INC     DE
        LD      A,(HL)
        LD      (DE),A
        INC     HL
        INC     DE
        PUSH    HL
        PUSH    DE
        LD      DE,22
        ADD     HL,DE
        POP     DE
        LD      A,(HL)
        LD      (DE),A
        INC     HL
        INC     DE
        LD      A,(HL)
        LD      (DE),A
        INC     HL
        INC     DE
        PUSH    DE
        LD      DE,22
        ADD     HL,DE
        POP     DE
        LD      A,(HL)
        LD      (DE),A
        INC     HL
        INC     DE
        LD      A,(HL)
        LD      (DE),A
        INC     HL
        INC     DE
        PUSH    DE
        LD      DE,22
        ADD     HL,DE
        POP     DE
        LD      A,(HL)
        LD      (DE),A
        INC     HL
        INC     DE
        LD      A,(HL)
        LD      (DE),A
        INC     DE
        POP     HL
        DJNZ    IN_SP7
        PUSH    DE
        LD      DE,24
        ADD     HL,DE
        POP     DE
        DEC     C
        JR      NZ,IN_SP8
        CALL    IN_SP11
        PUSH    DE
        LD      DE,24
        ADD     HL,DE
        POP     DE
        CALL    IN_SP10
        PUSH    DE
        LD      DE,24
        ADD     HL,DE
        POP     DE
        CALL    IN_SP9
        JP      WIEW_UP
IN_SP9  LD      B,8
IN_SP4  LD      A,(HL)
        LD      (DE),A
        INC     HL
        INC     DE
        DJNZ    IN_SP4
        RET 
IN_SP10 LD      B,4
IN_SP5  LD      A,(HL)
        LD      (DE),A
        INC     HL
        INC     DE
        LD      A,(HL)
        LD      (DE),A
        INC     HL
        INC     DE
        PUSH    HL
        PUSH    DE
        LD      DE,22
        ADD     HL,DE
        POP     DE
        LD      A,(HL)
        LD      (DE),A
        INC     HL
        INC     DE
        LD      A,(HL)
        LD      (DE),A
        INC     DE
        POP     HL
        DJNZ    IN_SP5
        RET 
IN_SP11 LD      B,4
IN_SP6  LD      A,(HL)
        LD      (DE),A
        INC     HL
        INC     DE
        LD      A,(HL)
        LD      (DE),A
        INC     HL
        INC     DE
        PUSH    HL
        PUSH    DE
        LD      DE,22
        ADD     HL,DE
        POP     DE
        LD      A,(HL)
        LD      (DE),A
        INC     HL
        INC     DE
        LD      A,(HL)
        LD      (DE),A
        INC     HL
        INC     DE
        PUSH    DE
        LD      DE,22
        ADD     HL,DE
        POP     DE
        LD      A,(HL)
        LD      (DE),A
        INC     HL
        INC     DE
        LD      A,(HL)
        LD      (DE),A
        INC     DE
        POP     HL
        DJNZ    IN_SP6
        RET 

WIEW_UP LD      B,0
WIW15   PUSH    BC
        EI 
        HALT 
WIW3    LD      DE,#57E0
        LD      HL,BUF_W1
WIW4    LD      A,0
        OR      A
        JR      Z,WIW18
        LD      B,4
WIW2    CALL    WIW_S
        DEC     E
        DEC     E
        CALL    DPIX_DE
        DJNZ    WIW2
        CALL    CL_W
WIW18   LD      A,0
        OR      A
        JR      Z,WIW20
        LD      B,4
WIW7    CALL    WIW_S1
        DEC     E
        DEC     E
        DEC     E
        DEC     E
        CALL    DPIX_DE
        DJNZ    WIW7
        CALL    CL_W
WIW20   LD      A,0
        OR      A
        JR      Z,WIW21
        LD      B,4
WIW17   PUSH    DE
WIW8    CALL    WIW_S2
        POP     DE
        CALL    DPIX_DE
        DJNZ    WIW17
        CALL    CL_W
WIW21   LD      A,0
        OR      A
        JR      Z,WIW26
        LD      B,4
WIW16   PUSH    DE
WIW9    CALL    WIW_S3
        POP     DE
        CALL    DPIX_DE
        DJNZ    WIW16
        CALL    CL_W
WIW26   LD      A,0
        OR      A
        JR      Z,WIW28
        INC     E
        INC     E
        LD      B,4
WIW27   PUSH    DE
        CALL    WIW_S3
        POP     DE
        CALL    DPIX_DE
        DJNZ    WIW27
        CALL    CL_W
WIW28   LD      A,0
        OR      A
        JR      Z,WIW29
        INC     E
        INC     E
        LD      B,4
WIW30   PUSH    DE
        CALL    WIW_S3
        POP     DE
        CALL    DPIX_DE
        DJNZ    WIW30
        CALL    CL_W
WIW29   LD      A,0
        OR      A
        JR      Z,WIW31
        INC     E
        INC     E
        LD      B,4
WIW32   PUSH    DE
        CALL    WIW_S3
        POP     DE
        CALL    DPIX_DE
        DJNZ    WIW32
        CALL    CL_W
WIW31   LD      A,0
        OR      A
        JR      Z,WIW33
        INC     E
        INC     E
        LD      B,4
WIW34   PUSH    DE
        CALL    WIW_S3
        POP     DE
        CALL    DPIX_DE
        DJNZ    WIW34
        CALL    CL_W
WIW33   LD      A,0
        OR      A
        JR      Z,WIW35
        INC     E
        INC     E
        LD      B,4
WIW36   PUSH    DE
        CALL    WIW_S3
        POP     DE
        CALL    DPIX_DE
        DJNZ    WIW36
        CALL    CL_W
WIW35   LD      A,0
        OR      A
        JR      Z,WIW37
        INC     E
        INC     E
        LD      B,4
WIW38   PUSH    DE
        CALL    WIW_S3
        POP     DE
        CALL    DPIX_DE
        DJNZ    WIW38
        CALL    CL_W
WIW37   LD      A,0
        OR      A
        JR      Z,WIW39
        INC     E
        INC     E
        LD      B,4
WIW40   PUSH    DE
        CALL    WIW_S3
        POP     DE
        CALL    DPIX_DE
        DJNZ    WIW40
        CALL    CL_W
WIW39   LD      A,0
        OR      A
        JR      Z,WIW41
        INC     E
        INC     E
        LD      B,4
WIW42   PUSH    DE
        CALL    WIW_S3
        POP     DE
        CALL    DPIX_DE
        DJNZ    WIW42
        CALL    CL_W
WIW41   LD      A,0
        OR      A
        JR      Z,WIW43
        INC     E
        INC     E
        LD      B,4
WIW44   PUSH    DE
        CALL    WIW_S3
        POP     DE
        CALL    DPIX_DE
        DJNZ    WIW44
        CALL    CL_W
WIW43   LD      A,0
        OR      A
        JR      Z,WIW45
        INC     E
        INC     E
        LD      B,4
WIW46   PUSH    DE
        CALL    WIW_S3
        POP     DE
        CALL    DPIX_DE
        DJNZ    WIW46
        CALL    CL_W
WIW45   LD      A,0
        OR      A
        JR      Z,WIW47
        INC     E
        INC     E
        LD      B,4
WIW48   PUSH    DE
        CALL    WIW_S3
        POP     DE
        CALL    DPIX_DE
        DJNZ    WIW48
        CALL    CL_W
WIW47   LD      A,0
        OR      A
        JR      Z,WIW49
        INC     E
        INC     E
        LD      B,4
WIW50   PUSH    DE
        CALL    WIW_S3
        POP     DE
        CALL    DPIX_DE
        DJNZ    WIW50
        CALL    CL_W
WIW49   LD      A,0
        OR      A
        JR      Z,WIW65
        INC     E
        INC     E
        LD      B,4
WIW52   PUSH    DE
        CALL    WIW_S2
        POP     DE
        CALL    DPIX_DE
        DJNZ    WIW52
        CALL    CL_W
WIW65   LD      A,0
        OR      A
        JR      Z,WIW67
        INC     E
        INC     E
        LD      B,4
WIW68   PUSH    DE
        CALL    WIW_S1
        POP     DE
        CALL    DPIX_DE
        DJNZ    WIW68
        CALL    CL_W
WIW67   LD      A,0
        OR      A
        JR      Z,WIW00
        INC     E
        INC     E
        LD      B,4
WIW69   CALL    WIW_S
        DEC     E
        DEC     E
        CALL    DPIX_DE
        DJNZ    WIW69
        CALL    CL_W


WIW00   LD      HL,(WIW3+1)
        LD      B,4
        CALL    UPIX_HL
        DJNZ    $-3
        LD      (WIW3+1),HL
        LD      B,1
        LD      A,(WIW4+1)
        OR      A
        JR      NZ,WIW22
        LD      A,B
        LD      (WIW4+1),A
        JP      WIW5
WIW22   LD      A,(WIW18+1)
        OR      A
        JR      NZ,WIW23
        LD      A,B
        LD      (WIW18+1),A
        JP      WIW5
WIW23   LD      A,(WIW20+1)
        OR      A
        JR      NZ,WIW24
        LD      A,B
        LD      (WIW20+1),A
        JP      WIW5
WIW24   LD      A,(WIW21+1)
        OR      A
        JR      NZ,WIW25
        LD      A,B
        LD      (WIW21+1),A
        JP      WIW5
WIW25   LD      A,(WIW26+1)
        OR      A
        JR      NZ,WIW53
        LD      A,B
        LD      (WIW26+1),A
        JP      WIW5
WIW53   LD      A,(WIW28+1)
        OR      A
        JR      NZ,WIW54
        LD      A,B
        LD      (WIW28+1),A
        JP      WIW5
WIW54   LD      A,(WIW29+1)
        OR      A
        JR      NZ,WIW55
        LD      A,B
        LD      (WIW29+1),A
        JP      WIW5
WIW55   LD      A,(WIW31+1)
        OR      A
        JR      NZ,WIW56
        LD      A,B
        LD      (WIW31+1),A
        JP      WIW5
WIW56   LD      A,(WIW33+1)
        OR      A
        JR      NZ,WIW57
        LD      A,B
        LD      (WIW33+1),A
        JP      WIW5
WIW57   LD      A,(WIW35+1)
        OR      A
        JR      NZ,WIW58
        LD      A,B
        LD      (WIW35+1),A
        JR      WIW5
WIW58   LD      A,(WIW37+1)
        OR      A
        JR      NZ,WIW59
        LD      A,B
        LD      (WIW37+1),A
        JR      WIW5
WIW59   LD      A,(WIW39+1)
        OR      A
        JR      NZ,WIW60
        LD      A,B
        LD      (WIW39+1),A
        JR      WIW5
WIW60   LD      A,(WIW41+1)
        OR      A
        JR      NZ,WIW61
        LD      A,B
        LD      (WIW41+1),A
        JR      WIW5
WIW61   LD      A,(WIW43+1)
        OR      A
        JR      NZ,WIW62
        LD      A,B
        LD      (WIW43+1),A
        JR      WIW5
WIW62   LD      A,(WIW45+1)
        OR      A
        JR      NZ,WIW63
        LD      A,B
        LD      (WIW45+1),A
        JR      WIW5
WIW63   LD      A,(WIW47+1)
        OR      A
        JR      NZ,WIW64
        LD      A,B
        LD      (WIW47+1),A
        JR      WIW5
WIW64   LD      A,(WIW49+1)
        OR      A
        JR      NZ,WIW70
        LD      A,B
        LD      (WIW49+1),A
        JR      WIW5
WIW70   LD      A,(WIW65+1)
        OR      A
        JR      NZ,WIW71
        LD      A,B
        LD      (WIW65+1),A
        JR      WIW5
WIW71   LD      A,(WIW67+1)
        OR      A
        JR      NZ,WIW5
        LD      A,B
        LD      (WIW67+1),A

WIW5    POP     BC
        DEC     B
        JP      NZ,WIW15
        JP      WIWA

WIW_S3  LD      A,D
        CP      #58
        RET     NC
        LD      C,D
        DEFS      8,#ED,#A0
        RET 
WIW_S2  LD      A,D
        CP      #58
        RET     NC
        LD      C,D
        DEFS      6,#ED,#A0
        RET 
WIW_S1  LD      A,D
        CP      #58
        RET     NC
        LD      C,D
        DEFS      4,#ED,#A0
        RET 

WIW_S   LD      A,D
        CP      #58
        RET     NC
        LD      C,D
        DEFS      2,#ED,#A0
        RET 

CL_W    PUSH    DE
        PUSH    HL
        LD      A,D
        CP      #58
        JR      NC,CLW
        XOR     A
        LD      (DE),A
        INC     E
        LD      (DE),A
        DEC     E
        CALL    DPIX_DE
        LD      A,D
        CP      #58
        JR      NC,CLW
        XOR     A
        LD      (DE),A
        INC     E
        LD      (DE),A
        DEC     E
        CALL    DPIX_DE
        LD      A,D
        CP      #58
        JR      NC,CLW
        XOR     A
        LD      (DE),A
        INC     E
        LD      (DE),A
        DEC     E
        CALL    DPIX_DE
        LD      A,D
        CP      #58
        JR      NC,CLW
        XOR     A
        LD      (DE),A
        INC     E
        LD      (DE),A
CLW     POP     HL
        POP     DE
        RET 

WIWA    LD      HL,BUF_W+32
        LD      (WIWA6+1),HL
        LD      HL,(WIW3+1)
        INC     H
        INC     H
        INC     H
        CALL    DPIX_HL
        INC     L
        INC     L
        LD      (WIWA7+1),HL
        LD      A,15
        LD      (WIWA9+1),A
        LD      B,15
WIWA10  PUSH    BC
WIWA6   LD      HL,0
WIWA7   LD      DE,0
WIWA9   LD      B,15
WIWA3   PUSH    DE
        LD      IX,32
        LD      C,16
WIWA1   LD      A,D
        CP      #58
        JR      NC,WIWA8
        DEC     LX
        DEC     LX
        LD      A,(HL)
        LD      (DE),A
        INC     HL
        INC     E
        LD      A,(HL)
        LD      (DE),A
        INC     HL
        DEC     E
        CALL    DPIX_DE
        DEC     C
        JR      NZ,WIWA1
        LD      C,4
WIWAS   LD      A,D
        CP      #58
        JR      NC,WIWA12
        XOR     A
        LD      (DE),A
        INC     E
        LD      (DE),A
        DEC     E
        CALL    DPIX_DE
        DEC     C
        JR      NZ,WIWAS
        JR      WIWA12
WIWA8   EX      DE,HL
        ADD     IX,DE
        LD      E,LX
        LD      D,HX
        EX      DE,HL
WIWA12  POP     DE
        INC     D
        INC     D
        INC     D
        CALL    DPIX_DE
        INC     E
        INC     E
        DJNZ    WIWA3
        EI 
        HALT 
        LD      HL,(WIWA6+1)
        LD      DE,32
        ADD     HL,DE
        LD      (WIWA6+1),HL
        LD      HL,WIWA9+1
        DEC     (HL)
        LD      HL,WIWA7+1
        INC     (HL)
        INC     (HL)
        POP     BC
        DJNZ    WIWA10
        RET 

