;   .
;     7.


;(C) Vitamin/CAIG/2001          9.22.04


; :

;       LD HL,DRIVER    ; .  
;       CALL SETDRIVER  ;PENT128,PENT512,SCORP256,PROFI,ATM
;       CALL PLAY       ;
;       JR C,BREAK      ;  
;       ...             ; 
;
;BREAK  ...
;



CONT    EQU 254         ; 
COMAND  EQU 255

BMODE   EQU 0           ; 
DMODE   EQU 1
EXTPCK  EQU 2
EXCMODE EQU 3
EXCFIN  EQU 4

EX_ENDSTR  EQU -1               ;"" 
EX_NEWFRM  EQU %00011111
EX_KEYFRM  EQU %00111111


VIDEO   EQU 49152       ;  
FIRST1  EQU 16384       ; 
FSTATR  EQU 22528
MAXSCR  EQU 'FIRST1+#18

SPEDE   EQU 4           ;  

        MACRO   IDE
        INC E
        CALL Z,R_DE
        ENDM 


;       ORG START
START
PLAY    LD (STAKP+1),SP
        LD IX,PLFLG
        XOR A
        LD (CURPAG),A
        LD (IX),A
        CALL PAGE
        LD DE,VIDEO
NEWKAD  EXX 
        LD HL,FSTATR
        SET EXCFIN,(IX)
        EXX 
        LD HL,FIRST1
        LD C,0
PLCYC
        BIT EXTPCK,(IX)
        JP NZ,EXTP_STRM

        LD A,(DE)
        IDE
        CP COMAND
        JR NZ,NOCOM

EX_COMM
        LD A,(DE)
        IDE

        DEC A
        JP Z,WAIT
        DEC A
        RET Z
        DEC A
        JR NZ,NCHS
        LD A,(DE)
        LD (WAIT+1),A
        IDE
        JR PLCYC

NCHS    DEC A
        JP Z,SCRENE

        DEC A
        JR NZ,LGRP

        LD A,(DE)
        IDE
        LD C,A
C_GROUP LD B,8
PTS1    LD A,(DE)
        LD (HL),A
        IDE
        INC H
        DJNZ PTS1
        INC L
        JR Z,M7
        LD A,H
        SUB 8
        LD H,A
M7      DEC C
        JR NZ,C_GROUP
        JR PLCYC

LGRP    DEC A
        JP NZ,LNOGR
        LD A,(DE)
        IDE
        LD C,A          ;QUANTITY
        CALL DEP_ZN_
        JR PLCYC
LNOGR   DEC A
        JP Z,LSCRENE
        DEC A
        JR NZ,NOBMOD
        SET BMODE,(IX)
        JR PLCYC
NOBMOD
        LD A,(DE)
        IDE
        RRA 
        JR NC,NODPK
        SET DMODE,(IX)

NODPK   RRA 
        JR NC,PLCYC
        SET EXTPCK,(IX)
        RRA 
        JP NC,PLCYC
        SET EXCMODE,(IX)
        JP PLCYC

NOCOM   CP CONT
        JR NZ,NOCNT
        ADD A,L
        LD L,A
        JP NC,PLCYC
        LD A,H
        ADD A,8
        LD H,A
        JP PLCYC
NOCNT
        ADD A,L
        LD L,A
        JR NC,M8
        LD A,H
        ADD A,8
        LD H,A
M8
        BIT BMODE,(IX)
        JR Z,OLDZZ
        LD C,1
        CALL DEP_ZN_
        JP PLCYC
OLDZZ   LD B,#08
PUTES   LD A,(DE)
        LD (HL),A
        IDE
        INC H
        DJNZ PUTES
        INC L
        JP Z,PLCYC
        LD A,H
        SUB 8
        LD H,A
        JP PLCYC
WAIT    LD A,SPEDE
W_LOOP  HALT 
        DEC A
        JR NZ,W_LOOP
ESCR    LD A,127
        IN A,(254)
        RRA 
        JP C,NEWKAD
STAKP   LD SP,0
        SCF 
        RET 

;-------EXTPACK STREAM PROCESSING -------
EXTP_STRM
        LD A,(DE)
        IDE
        CP -1
        RET Z
        CP EX_NEWFRM
        JR Z,WAIT
        CP EX_KEYFRM
        JR Z,EX_KEYF

        JR NZ,EX_CDEPC

EX_KEYF
        ;...
        JP LSCRENE

;------------------
EX_CDEPC
        LD C,A          ;MASK1
        LD B,8

EX_DPCK RR C
        JR C,EX_OFFS
        PUSH BC
        LD A,(DE)
        IDE
        LD C,A
        XOR A
        LD B,A          ;OLDB
        EX AF,AF'

EX_DBPC RR C
        JR NC,EX_NOB1
        LD A,(DE)
        IDE
        LD B,A
EX_NOB1 EX AF,AF'
        XOR B
        LD (HL),A
        EX AF,AF'
        INC H
        LD A,H
        AND 7
        JR NZ,EX_DBPC
        INC L
        JR Z,EX_NOSH
        LD A,H
        SUB 8
        LD H,A
EX_NOSH POP BC
EX_CONC DJNZ EX_DPCK
        CALL EX_CMODE
        JP EXTP_STRM

EX_OFFS LD A,(DE)
        IDE
        AND A
        JR Z,EX_FCOLR
        ADD A,L
        LD L,A
        JR NC,EX_CONC
        LD A,H
        ADD A,8
        LD H,A
        JR EX_CONC

EX_FCOLR
        CALL EX_CMODE
        JR NZ,EX_FCOLR
        JP EXTP_STRM

EX_CMODE
        BIT EXCMODE,(IX)
        RET Z
        BIT EXCFIN,(IX)
        RET Z
        LD A,(DE)
        IDE
        LD C,A          ;MASK
        LD B,8          ;DATA

EX_CDPC RR C
        JR C,EX_COFS
        LD A,(DE)
        AND 63
        EXX 
        LD (HL),A
        INC HL
        EXX 
        LD A,(DE)
        IDE
        RLA 
        JR NC,EX_CNS
        RES EXCFIN,(IX)
        AND 128
        RET 

EX_CNS  DJNZ EX_CDPC
        LD A,-1
        AND A
        RET 

EX_COFS LD A,(DE)
        IDE
        EXX 
        ADD A,L
        LD L,A
        ADC A,H
        SUB L
        LD H,A
        EXX 
        JR EX_CNS


SCRENE  LD HL,FIRST1
        LD A,(DE)
        LD C,A
        IDE
PCK_CYC LD A,(DE)
        CP C
        JR Z,REPT
        LD B,8
PGR     LD A,(DE)
        LD (HL),A
        INC H
        IDE
        DJNZ PGR
        INC L
        JR Z,M5
        LD A,H
        SUB 8
        LD H,A
M5
        LD A,H
        CP MAXSCR
        JR C,PCK_CYC
        JR NEWK

REPT    IDE
        LD A,C
        EX AF,AF'
        LD A,(DE)
        LD C,A
        IDE
        LD B,8
        PUSH HL
COZN    LD A,(DE)
        LD (HL),A
        IDE
        INC H
        DJNZ COZN
        INC L
        JR Z,NDP1
        LD A,H
        SUB 8
        LD H,A
NDP1
        DEC C
        JR NZ,CONDP
        POP BC
        JR ISEND
CONDP   EX DE,HL ;HL-ADRESS DE-SCREEN+1
        EX (SP),HL      ;HL-SCREEN DE-SCREEN+1
        EX DE,HL        ;DE-SCREEN HL-SCREEN+1
DEPCYC  LD B,8
        PUSH DE
COZN1   LD A,(DE)
        LD (HL),A
        INC H
        INC D
        DJNZ COZN1
        INC L
        JR Z,NDP2
        LD A,H
        SUB 8
        LD H,A
NDP2    POP DE
        LD A,H
        CP MAXSCR
        JR C,CONPKC
        POP DE
        JR NEWK
CONPKC  DEC C
        JR NZ,DEPCYC
        POP DE
ISEND   EX AF,AF'
        LD C,A
        LD A,H
        CP MAXSCR
        JR C,PCK_CYC
NEWK
        LD A,(WAIT+1)
        SUB 2
        JP C,ESCR
        JP Z,ESCR
        JP W_LOOP

LSCRENE LD HL,FIRST1
        EXX 
        LD HL,FSTATR    ;ADR
        EXX 

LPCK_CYC
        LD A,(DE)
        IDE
        INC A
        JR Z,NEWK
        DEC A
        JR NZ,LREPT
        LD A,(DE)
        IDE
        LD C,A
        BIT EXCMODE,(IX)
        JR Z,NOCO1
DEPSCC  PUSH BC
        LD C,1
        CALL DEP_ZN
        CALL DEPCOL
        POP BC
        DEC C
        JR NZ,DEPSCC
        JP LPCK_CYC
NOCO1   CALL DEP_ZN
        JR LPCK_CYC
LREPT
        LD A,(DE)
        LD C,A
        IDE
        PUSH HL
        PUSH BC
        LD C,1
        CALL DEP_ZN
        CALL DEP_COL_
        POP BC
        DEC C
        JR NZ,CONPA
        POP AF
        JR LPCK_CYC
CONPA   EX DE,HL        ;HL-ADRESS DE-SCREEN+1
        EX (SP),HL      ;HL-SCREEN DE-SCREEN+1
        EX DE,HL        ;DE-SCREEN HL-SCREEN+1
LDEPCYC LD B,8
        PUSH DE
LCOZN1  LD A,(DE)
        LD (HL),A
        INC H
        INC D
        DJNZ LCOZN1
        INC L
        JR Z,LNDP2
        LD A,H
        SUB 8
        LD H,A
LNDP2   POP DE
        BIT EXCMODE,(IX)
        JR Z,LCONPKC
        LD A,L
        AND 31
        JR NZ,LCONPKC
        EX DE,HL   ;ZZZZ
        EX (SP),HL
        EX DE,HL
        CALL DEPCLA
        EX DE,HL
        EX (SP),HL
        EX DE,HL
LCONPKC DEC C
        JR NZ,LDEPCYC
LISEND  POP DE
        JR LPCK_CYC

DEP_COL_
        BIT EXCMODE,(IX)
        RET Z
DEPCOL  LD A,L
        AND 31
        RET NZ

DEPCLA  EXX 
        LD E,0
        EXX 

DPCC1   LD A,(DE)
        IDE
        EXX 
        LD C,A
        LD B,8

DPCC    RR C
        JR NC,OLDCOL
        EXX 
        LD A,(DE)
        IDE
        EXX 
        LD E,A
OLDCOL  LD (HL),E
        INC HL
        DJNZ DPCC
        LD A,L
        EXX 
        AND 31
        JR NZ,DPCC1
        RET 

INCHL   INC H
        LD A,H
        AND 7
        RET NZ
        INC L
        RET Z
        LD A,H
        SUB 8
        LD H,A
        RET 

INCDE1  INC D
        LD A,D
        AND 7
        RET NZ
        INC E
        RET Z
        LD A,D
        SUB 8
        LD D,A
        RET 

R_DE    INC D
        RET NZ
SWPAG   LD D,192
        PUSH AF
        LD A,(CURPAG)
        INC A
        LD (CURPAG),A
        CALL PAGE
        POP AF
        RET 

DEP_ZN_
DPMODE  LD A,0
        AND #AE         ;XOR (HL)
        LD (XORHL),A
DEP_ZN
MAKALL  PUSH BC
        LD A,(DE)
        IDE
        LD B,A  ;MASK
        XOR A
        LD C,A  ;PREWDAT
        LD (OLBYT+1),A
MAKGR
        RR B
        JR NC,OLBYT
        LD A,(DE)
        IDE
        LD (OLBYT+1),A
OLBYT
        LD A,0
        XOR C
        LD C,A
XORHL   NOP 
        LD (HL),A
        INC H
        LD A,H
        AND 7
        JR NZ,MAKGR
        INC L
        JR Z,M7_
        LD A,H
        SUB 8
        LD H,A
M7_     POP BC
        DEC C
        JR NZ,MAKALL
        XOR A
        LD (XORHL),A
        RET 


PLFLG   DB 0
CURPAG  DB 0

SETDRIVER               ;HL-DRIVER
        LD (PP1+1),HL
        RET 


PAGE    PUSH    BC      ; 
        LD (CURPAG),A
        CP 2
        JR C,PP1
        CP 4
        JR C,PP2
        INC A
PP2     INC A
PP1     JP PENT128

PENT512 LD C,A
        AND 24
        RLA 
        RLA 
        RLA 
        LD B,A
        LD A,C
        AND 7
        OR B
        JR PENT128+2

PENT128 AND 7
        OR 16
OUTR    LD      BC,32765
        OUT     (C),A
        POP     BC
        RET 

SCORP256
        LD (S1+1),A
        AND 8
        RLA 
        LD BC,#1FFD
S2      OUT (C),A
S1      LD A,0
        AND 7
        OR 16
        LD B,#7F
        JR OUTR+3

PROFI
        LD (S1+1),A
        AND 56
        RRCA 
        RRCA 
        RRCA 
        LD BC,#DFFD
        JR S2

ATM     LD (S1+1),A
        AND 24
        RRCA 
        RRCA 
        RRCA 
        LD BC,#FDFD
        JR S2

        DISPLAY "SIZE:",$-START

