YO EQU 0
NO EQU 1
RELEASE EQU YO
FINAL EQU YO ;SET TRK/SEC
GENCHANX EQU YO
HELP EQU NO
.INCLUDE MACLIBR
;--------------------------------
FUL EQU (3+4)*#80
FST EQU #80*7-1
;--------------------------------
MASK_В EQU #40
.IF RELEASE
MASK_В = 0
.ENDIF
CODE2D_BANK EQU #14+MASK_В
MUS_В EQU #16+MASK_В
TEMP_BANK EQU #11
Uб_цод EQU #10
;--------------------------------
SPRITE EQU #8800
MASK EQU SPRITE+#1В00
C2P_OUT EQU #F000
C2P_ТАВ EQU #FOFO
SCR_ТАВ EQU #6600-96-96
SP_LEN EQU #0180
MUS_I EQU #C000
MUS_P EQU #C005
KER_ADR EQU #SBSB
SYS_BNK EQU #D7
SYS_BUF EQU #F000
BREAK EQU #1F54
;--------------------------------
ORG #6600
.RUN $
DISP KERNEL
DI
.IF FINAL-NO
LD ВС,#0051
PUSH ВС
LD ВС,#7FFD
LD A,SYS_BNK
OUT (C),A
LD В,#DF
LD A,1
OUT (C),A ;PROFI
EXX
LD HL,#5C00
LD DE,SYS_BUF
LD ВС,#1000
LDIR
EXX
XOR A
OUT (C),A
.ENDIF
LD HL,#5D4B
LD DE,#BE00
LDI
LDI
LDI
LDI
LD HL,(#5CFЧ) ;TRK/SEC
LD A,(#5D16)
AND 3
OR #2C
LD E,A
EXX
LD HL,KER_BEG
LD DE,KER_ADR
LD ВС,KER_LEN
LDIR
LD DE,END_KERNEL_CODE+SP_LEN
LD ВС,SCR_ТАВ-(END_KERNEL_CODE+SP_LEN)
CALL .NLDIR
;INITIALIZE
LD (SP_EXIT),SP
LD SP,END_KERNEL_CODE+SP_LEN
EXX
LD A,E
LD (DRIVE),A
.IF FINAL
LD (TRACK),HL
LD HL,#BE00
LD DE,ULA_FIX
LDI
LDI
LDI
LDI
.ENDIF
.IF RELEASE-NO
CALL MUS_INSTALL
.ENDIF
CALL GENCH ;CHANKS
LD HL,SCR_ТАВ
LD DE,#4000
CALL GEN_SCRT
LD DE,#C000
CALL GEN_SCRT
LD HL,#8000
CALL .INSTIM2
RET
GEN_SCRT
LD В,48
GSCT2
LD (HL),E
INC L
LD (HL),D
INC L
LD A,D
ADD A,4
LD D,A
AND 7
JR NZ,GSCT3
LD A,E
ADD A,#20
LD E,A
JR C,GSCT3
LD A,D
SUB 8
LD D,A
GSCT3
DJNZ GSCT2
RET
;------ G E N C2P --------------------
GENCH
.IF GENCHANX
LD A,#17
CALL .BANK
LD HL,C2P_OUT
LD НУ,C2P_ТАВ
LD IX,CHNXI
LD ВС,#1010
.IC2P1
PUSH ВС
LD DE,CHNXI
LD В,C
LD LY,C2P_ТАВ
LD L,0
.IC2P2
LD (IY),L
INC LY
LD (HL),#60 ;Н,В
INC L
LD (HL),#69 ;L,C
INC L
LD (HL),#36 ;(HL),N
INC L
LD A,(DE)
AND #F0
LD C,A
LD A,(IX+0)
AND #F
OR C
LD (HL),A
INC L
LD (HL),#24 ;INC Н
INC L
INC DE
LD (HL),#36 ;(HL),N
INC L
LD A,(DE)
AND #F0
LD C,A
LD A,(IX+1)
AND #F
OR C
LD (HL),A
INC L
LD (HL),#24 ;INC Н
INC L
INC DE
LD (HL),#36 ;(HL),N
INC L
LD A,(DE)
AND #F0
LD C,A
LD A,(IX+2)
AND #F
OR C
LD (HL),A
INC L
LD (HL),#24 ;INC Н
INC L
INC DE
LD (HL),#36 ;(HL),N
INC L
LD A,(DE)
AND #F0
LD C,A
LD A,(IX+3)
AND #F
OR C
LD (HL),A
INC L
LD (HL),#DD ;JP (IX)
INC L
LD (HL),#E9
INC L
INC DE
DJNZ .IC2P2
INC Н
INC НУ
LD C,4
ADD IX,ВС
POP ВС
DJNZ .IC2P1
RET
CHNXI
DEFB #00,#00,#00,#00, #88,#00,#22,#00
DEFB #AA,#00,#22,#00, #AA,#00,#AA,#00
DEFB #AA,#44,#AA,#00, #AA,#44,#AA,#11
DEFB #AA,#55,#AA,#11, #AA,#55,#AA,#55
DEFB #EE,#55,#AA,#55, #EE,#55,#ВВ,#55
DEFB #FF,#55,#ВВ,#55, #FF,#55,#FF,#55
DEFB #FF,#DD,#FF,#55, #FF,#DD,#FF,#77
DEFB #FF,#FF,#FF,#77, #FF,#FF,#FF,#FF
.ENDIF
;------ K E R N E L В E G I N -------
KER_BEG
.PHASE KER_ADR
;JUMPERS
INTJP JP .IMER
BANK JP .BANK
SWAPSCR JP .SWAPSCR
MOVE JP .MOVE
DEHRUST JP .DEHRUST
INITIM2 JP .INITIM2
IC2PMSK JP .INITC2P
C2PNMSK JP .BEG_C2P_NOMASK
NLDIR JP .NLDIR
;FOR TESTING:
KDEHR JP .KDEHR
KMOVE JP .KMOVE
PLAYER JP .PLAYER
FIX JP .FIX
SETBANK JP .SETBANK
SETSCR0 JP .SETSCR0
PUTSCR JP .PUTSCR
CLR JP .CLR
CLRINV JP .CLRINV
CLRO JP .CLRO
NHALT JP .NHALT
EXIT JP .EXIT
;VARIABLES
PAGE DEFB 0
EKRAN DEFB 8
INTSP DEFW 0
INTRET DEFW 0
COUNTER DEFW 0
USER DEFW 0
PLAY DEFW 0
MUSPLAY DEFW MUS_P
MUSBANK DEFB MUS_В
ULA_FIX DEFW 0
TURBO DEFB 0
LDTYPE DEFB 0 ;0 - MULTI, 1 - #3D13
DRIVE DEFB #2C
TRACK DEFW #0100
;------- R O U Т I N E S ------
.IMER
EX (SP),HL
LD (.INT_RET),HL
LD (INTRET),HL
POP HL
LD (INTSP),SP
LD SP,INTJP
PUSH HL
PUSH IX
PUSH IY
PUSH DE
PUSH ВС
PUSH AF
EX AF,AF`
EXX
PUSH HL
PUSH DE
PUSH ВС
PUSH AF
LD HL,(COUNTER)
INC HL
LD (COUNTER),HL
LD A,(PAGE)
PUSH AF
CALL .PLAYMUS
LD HL,_EXUSER
PUSH HL
LD HL,(USER)
LD A,Н
OR L
RET Z
JP (HL)
_EXUSER
POP AF
CALL .BANK
POP AF
POP ВС
POP DE
POP HL
EX AF,AF`
EXX
POP AF
POP ВС
POP DE
POP IY
POP IX
POP HL
LD SP,(INTSP)
EI
.INT_RET EQU $+1
JP #CЗCЗ
;---------------------------------
.SWAPSCR
LD A,(EKRAN)
XOR 8
LD (EKRAN),A
RET
.PLAYMUS
LD A,MUS_В
CALL .BANK
JP MUS_P
.SETBANK
DEC SP
POP AF
.BANK
LD (PAGE),A
PUSH ВС
LD C,A
LD A,(EKRAN)
OR C
LD ВС,#7FFD
OUT (C),A
POP ВС
RET
.INITIM2
LD A,I
CP Н
RET Z
HALT
.INSTIM2
LD A,Н
LD I,A
IM 2
LD D,Н
LD E,1
LD (HL),INTJP
LD ВС,#0100
JP .NLDIR
.MOVE
POP IX
DEC SP
LD A,(PAGE)
EX AF,AF`
POP AF
CALL .BANK
POP HL
POP ВС
CALL .NLDIR
EX AF,AF`
CALL .BANK
JP (IX)
.PLAYER ; eффeцт
; ин: (сп)2 - фрамeс нумбер то nлаы
;-ин: (сп+2)2 -маин цыцлe адресс оф eффeцт
LD A,(PAGE)
LD (PLAY_BN),A
LD HL,(PLAY)
LD (.PLAY),HL
POP DE
LD HL,(COUNTER)
ADD HL,DE
PLAY1
PUSH HL
LD DE,(COUNTER)
AND A
SBC HL,DE
JR C,PL_EXIT
.PLAY EQU $+1
CALL #CDCD
.IF FINAL-NO
CALL BREAK
JR NC,PL_EXIT
.ENDIF
POP HL
JP PLAY1
PL_EXIT
POP HL
PLAY_BN EQU $+1
LD A,#3E
JP .BANK
.FIX
; ин: (сп)2 -фиь
; (абсолутe фром тхе бeгин)
POP DE ;FIX
.IF FINAL-NO
HALT
PUSH DE
LD ВС,#7FFD
LD A,(EKRAN)
OR #D0
OUT (C),A
LD В,#DF
LD A,1
OUT (C),A ;PROFI
LD HL,(COUNTER)
AND A
SBC HL,DE
EX DE,HL
_OST EQU $+1
LD HL,#C000
LD (HL),E
INC HL
LD (HL),D
INC HL
LD (_OST),HL
XOR A
OUT (C),A ;PROFI
POP DE
FIX1
HALT
CALL BREAK
RET NC
.ELSE
FIX1
.ENDIF
LD HL,(COUNTER)
AND A
SBC HL,DE
JR C,FIX1
RET
;---------------------------------
.EXIT
HALT
IM 1
LD A,63
LD I,A
LD IY,#5CЗA
LD HL,10072
EXX
DI
XOR A
LD (EKRAN),A
CALL MUS_INSTALL
LD A,SYS_BNK
CALL .BANK
LD ВС,#DFFD
LD A,1
OUT (C),A ;PROFI
LD HL,SYS_BUF
LD DE,#5C00
LD ВС,#1000
SP_EXIT EQU $+1
LD SP,#3131
JP #33C3 ;LDIR RET
;---------------------------------
.DEHRUST
POP IY ;RET ADR
LD A,(PAGE)
EX AF,AF`
DEC SP
POP AF
CALL .BANK
POP HL
LD (UNP_ADR),DE
LD IX,0-6-6
ADD IX,SP
LD SP,HL
POP ВС ;HR
EX DE,HL
POP ВС ;PACK LEN
DEC ВС
ADD HL,ВС
EX DE,HL
POP ВС
DEC ВС
ADD HL,ВС
SBC HL,DE
ADD HL,DE
JR C,LL8018
LD D,Н
LD E,L
LL8018
XOR A
SUB C
AND #7
JR Z,_LDD
ADD A,A
LD ($+3+1),A
JR $
_LDD
LDD
LDD
LDD
LDD
LDD
LDD
LDD
LDD
JP PE,_LDD
EX DE,HL
UNP_ADR EQU $+1
LD DE,#1111
LD SP,HL
POP HL
POP HL
POP HL
LD В,6
LL8027 DEC SP
POP AF
LD (IX+#06),A
INC IX
DJNZ LL8027
EXX
LD D,#BF
LD ВС,#1010
POP HL
LL8037 DEC SP
POP AF
EXX
LL803A LD (DE),A
INC DE
LL803C EXX
LL803D ADD HL,HL
DJNZ LL8042
POP HL
LD В,C
LL8042 JR C,LL8037
LD E,#01
LL8046 LD A,#80
LL8048 ADD HL,HL
DJNZ LL804D
POP HL
LD В,C
LL804D RLA
JR C,LL8048
CP #03
JR C,LL8059
ADD A,E
LD E,A
XOR C
JR NZ,LL8046
LL8059 ADD A,E
CP #04
JP Z,LL80В8
ADC A,#FF
CP #02
EXX
LL8063 LD C,A
LL8064 EXX
LD A,#BF
JR C,LL807D
LL8069 ADD HL,HL
DJNZ LL806E
POP HL
LD В,C
LL806E RLA
JR C,LL8069
JR Z,LL8078
INC A
ADD A,D
JR NC,LL807F
SUB D
LL8078 INC A
JR NZ,LL8087
LD A,#EF
LL807D RRCA
CP A
LL807F ADD HL,HL
DJNZ LL8084
POP HL
LD В,C
LL8084 RLA
JR C,LL807F
LL8087 EXX
LD Н,#FF
JR Z,LL8092
LD Н,A
DEC SP
INC A
JR Z,LL809D
POP AF
LL8092 LD L,A
ADD HL,DE
LD A,C
CP 10
JR NC,_NLDI
LDIR
JP LL803C
_NLDI
CALL .NLDIR
JP LL803C
LL8098 EXX
RRC D
JP LL803D
LL809D POP AF
CP #E0
JR C,LL8092
RLCA
XOR C
INC A
JR Z,LL8098
SUB #10
LL80A9 LD L,A
LD C,A
LD Н,#FF
ADD HL,DE
LDI
DEC SP
POP AF
LD (DE),A
INC HL
INC DE
LD A,(HL)
JP LL803A
LL80В8 LD A,#80
LL80BA ADD HL,HL
DJNZ LL80BF
POP HL
LD В,C
LL80BF ADC A,A
JR NZ,LL80DB
JR C,LL80BA
LD A,#FC
JP LL8ODE
LL80C8 DEC SP
POP ВС
LD C,В
LD В,A
CCF
JP LL8064
LL8OCF CP #0F
JR C,LL80C8
JP NZ,LL8063
ADD A,#F4
LD SP,IX
JP LL8OEF
LL80DB SBC A,A
LD A,#EF
LL8ODE ADD HL,HL
DJNZ LL80E3
POP HL
LD В,C
LL80E3 RLA
JR C,LL8ODE
EXX
JR NZ,LL80A9
BIT 7,A
JR Z,LL8OCF
SUB #EA
LL8OEF EX DE,HL
LL80F0 POP DE
LD (HL),E
INC HL
LD (HL),D
INC HL
DEC A
JP NZ,LL80F0
EX DE,HL
JP NC,LL803C
EX AF,AF`
CALL .BANK
JP (IY)
;---------------------------------
;GENER MASK FOR C2P
;INPUT FOR INSTALL
; DE - OUTPUT ROUTINE ADRESS
; HL - OUTPUT ADRESS ON SCREEN
; ВС - OUTPUT WINDOW SIZE (CHANX PIXELS)
; A=1 - ONE SCR NO ТАВ, A=0 2 SCRS, SCR ТАВ
;INPUT FOR C2P
;HL`- C2P BUF, DE`-SCR ADRESSES ТАВ
.INITC2P
EX AF,AF`
LD A,(PAGE)
PUSH AF
LD A,#17
CALL .BANK
EX AF,AF`
LD (OUTP_ADR),HL
PUSH HL
EX DE,HL
LD (HL),#C3
INC HL
LD DE,BEG_C2P_MASK
LD (HL),E
INC HL
LD (HL),D
INC HL
LD (MASKC2P),HL
PUSH HL
OR A
LD HL,TWO_SCR
JR Z,$+5
LD HL,ONE_SCR
LD (METHOD),HL
;DE=START
LD НХ,В
LD A,C
SRL A
LD (_XLEN1),A
LD (_XLEN2),A
LD HL,SPRITE
LD DE,#C000
LD ВС,#1В00
CALL .NLDIR
POP DE ;OUTPUT ROUTINE
POP HL ;---//--- ADRESS
LD A,#55
BIT 2,Н ;CHET/NECHET 40/44
JR Z,$+3
RLCA
LD (_FLG),A
RES 7,Н
LD ВС,MASK-#4000
ADD HL,ВС
LD НУ,0
EXX ;BUFER FOR MASK
LD HL,C2P_OUT-1
; LD HL,#бFFF
EXX
NEXT_LINE
EX DE,HL
METHOD EQU $+1
CALL 0
EX DE,HL
_XLEN1 EQU $+1
LD В,6
CONT
LD C,Н
LD A,(HL)
INC Н
OR (HL)
INC Н
OR (HL)
INC Н
OR (HL)
JP Z,GEN_CHK
LD A,(HL)
DEC Н
AND (HL)
DEC Н
AND (HL)
DEC Н
AND (HL)
INC A
JP Z,GEN_PIX
;GEN MASK
LD LX,В
LD Н,C
PUSH HL
GM1
INC L
DEC В
JR Z,GM2
LD A,(HL)
INC Н
OR (HL)
INC Н
OR (HL)
INC Н
OR (HL)
JR Z,GM2
LD A,(HL)
DEC Н
AND (HL)
DEC Н
AND (HL)
DEC Н
AND (HL)
INC A
JR NZ,GM1
GM2
LD Н,C
EX (SP),HL
EX DE,HL
LD A,LX
SUB В
LD LX,A
PUSH ВС
LD (HL),#3E ;LD LX,PUTMASK
INC HL
LD (HL),A
INC HL
LD A,6 ;LD LY,0:JP 0
CALL SET_IY_
DEC HL
LD (HL),#C3 ;JP
INC HL
LD (HL),PUTMASK
INC HL
LD (HL),PUTMASK/256
INC HL
EX DE,HL
GMЗ ;MASK
LD A,(HL)
CPL
LD C,A
INC Н
LD A,(HL)
CPL
LD В,A
INC Н
PUSH ВС
LD A,(HL)
CPL
LD C,A
INC Н
LD A,(HL)
CPL
LD В,A
PUSH ВС
LD A,Н
ADD A,0-#1В-3
LD Н,A
LD C,(HL)
INC Н
LD В,(HL)
INC Н
PUSH ВС
LD A,(HL)
LD (_MPIX1),A
INC Н
LD A,(HL)
LD (_MPIX2),A
LD A,Н
ADD A,#1В-3
LD Н,A
EXX
POP DE ;PIX
POP ВС ;MASK
LD (HL),В
DEC L
_MPIX2 EQU $+1
LD (HL),0
DEC L
LD (HL),C
DEC L
_MPIX1 EQU $+1
LD (HL),0
DEC L
POP ВС ;MASK
LD (HL),В
DEC L
LD (HL),D
DEC L
LD (HL),C
DEC L
LD (HL),E
DEC HL
EXX
INC L
DEC LX
JR NZ,GMЗ
POP ВС
POP HL
EX DE,HL
JP NEXT
GEN_PIX
LD LX,В
GP1
LD Н,C
INC L
DEC В
JR Z,GP2
LD A,(HL)
INC Н
AND (HL)
INC Н
AND (HL)
INC Н
AND (HL)
INC A
JP Z,GP1
GP2
LD Н,C
EX DE,HL
LD C,#E1 ;POP HL
LD A,LX
SUB В
LD LX,A
CP 3
JR NC,GPЗ2
GPЗ1
LD (HL),C
INC HL
DEC A
JP NZ,GPЗ1
JR GPЗЗ
GPЗ2
LD (HL),#21 ;LD HL,NN 10
INC HL
ADD A,A
LD (HL),A
INC HL
LD (HL),0
INC HL
LD (HL),#39 ;ADD HL,SP 11
INC HL
LD (HL),#F9 ;LD SP,HL 6
INC HL
GPЗЗ
LD A,LX
CP 5
JR NC,GPS
LD C,#0C
GPЧ
LD (HL),C ;INC C
INC HL
DEC A
JP NZ,GPЧ
JP NEXT
GPS
LD (HL),#79 ;LD A,C
INC HL
LD (HL),#C6 ;ADD A,0
INC HL
LD (HL),A
INC HL
LD (HL),#4F ;LD C,A
INC HL
JP NEXT
GEN_CHK
LD LX,В
GC1
LD Н,C
INC L
DEC В
JR Z,GC2
LD A,(HL)
INC Н
OR (HL)
INC Н
OR (HL)
INC Н
OR (HL)
JP Z,GC1
GC2
LD Н,C
EX DE,HL
LD A,LX
SUB В
; LD (HL),#AF ;XOR A
; JR Z,GCЗ
LD (HL),#3E ;LD A,0
INC HL
LD (HL),A
GCЗ
INC HL
LD (HL),#E1 ;POP HL
INC HL
LD (HL),#6E ;L,(HL)
INC HL
CALL SET_IY
NEXT
EX DE,HL
XOR A
CP В
JP NZ,CONT
LD A,D
CP #E2
JP NZ,_NBUG
EX DE,HL
LD ВС,#6В80
LD (HL),#C3
INC HL
LD (HL),C
INC HL
LD (HL),В
INC HL
EX DE,HL
LD D,В
LD E,C
_NBUG
LD A,L
_XLEN2 EQU $+1
SUB 0
LD L,A
LD A,Н
ADD A,4
LD Н,A
_FLG EQU $+1
LD A,#3E
RLCA
LD (_FLG),A
JR NC,...1
LD A,L
ADD A,#20
LD L,A
JR C,...1
LD A,Н
SUB 8
LD Н,A
...1
DEC НХ
JP NZ,NEXT_LINE
EX DE,HL
LD (HL),#C3 ;JP END
INC HL
LD ВС,END_C2P
LD (HL),C
INC HL
LD (HL),В
POP AF
JP .BANK
;---------
SET_IY
LD A,4 ;LY,0:JP (HL)
SET_IY_
ADD A,L
LD C,A
ADC A,Н
SUB C
LD (HL),#FD ;LD IY,0
INC HL
CP НУ
JR NZ,S_IY
LD (HL),#2E ;LY,0
INC HL
LD (HL),C
INC HL
LD (HL),#E9 ;JP (HL)
INC HL
RET
S_IY
LD НУ,A
INC C
LD (HL),#21 ;IY,0
INC HL
LD (HL),C
INC HL
LD (HL),A
INC HL
LD (HL),#E9 ;JP (HL)
INC HL
RET
ONE_SCR
OUTP_ADR EQU $+1
LD ВС,#0101
LD (HL),#01 ;LD ВС,0
INC HL
LD (HL),C
INC HL
LD (HL),В
INC HL
LD (HL),#D9 ;EXX
INC HL
LD (HL),#F9 ;LD SP,HL
INC HL
LD (HL),#09 ;ADD HL,ВС
; LD (HL),#24 ;INC Н
INC HL
LD (HL),#D9 ;EXX
INC HL
LD A,В
ADD A,4
LD В,A
AND 7
JR NZ,...N
LD A,C
ADD A,#20
LD C,A
JR C,...N
LD A,В
SUB 8
LD В,A
...N
LD (OUTP_ADR),ВС
RET
TWO_SCR
LD A,6 ;HL,0:JP 0
ADD A,L
LD C,A
ADC A,Н
SUB C
LD (HL),#21 ;HL,0
INC HL
LD (HL),C
INC HL
LD (HL),A
INC HL
LD (HL),#C3 ;JP
INC HL
LD (HL),GETSCR
INC HL
LD (HL),GETSCR/256
INC HL
RET
;------------------------------------
;PIX CHK P+C
;NPIX P+C NCHK P+C
;NCHK P+C NPIX P+C
;OUTPUT MODULES
BEG_C2P_MASK
LD IX,REG_IX
LD DE,C2P_OUT-1
LD (SV_SP_C2P),SP
MASKC2P EQU $+1
JP #CЗCЗ
.BEG_C2P_NOMASK
LD LY,A
LD IX,REG_IX2
LD (SV_SP_C2P),SP
EXX
PUSH ВС
EXX
POP DE
_NM1
EXX
LD A,(DE)
EX AF,AF`
INC E
LD A,(DE)
INC E
LD SP,HL
ADD HL,ВС
; INC Н
EXX
LD В,A
EX AF,AF`
LD C,A
LD Н,D
LD L,E
ADD HL,SP ;DE=ВС`
LD A,(HL)
LD (REG_HL),A
LD (HL),_NM2
INC HL
LD A,(HL)
LD (REG_HL+1),A
LD (HL),_NM2/256
POP HL
LD L,(HL)
JP (HL)
;FOR EXCEPT BUGZ!!!
.IF $FF-#FF
DEFB 0
.ENDIF
_NM2
DEFB $+1
REG_HL EQU $+1
LD HL,#2121
PUSH HL
DEC LY
JP NZ,_NM1
END_C2P
SV_SP_C2P EQU $+1
LD SP,#3131
RET
REG_IX2
INC C
POP HL
LD L,(HL)
JP (HL)
;---------WITH MASK---------
EXI_LIN2
JP (IY)
REG_IX
INC C
DEC A
JR Z,EXI_LIN2
POP HL
LD L,(HL)
JP (HL)
PUTMASK ;HL SCREEN, DE MASK
LD IX,PUTM2
PUTM1
EX AF,AF`
POP HL
LD L,(HL)
JP (HL)
PUTM2
INC C
EX DE,HL
LD A,(DE)
AND (HL)
DEC L
OR (HL)
DEC L
LD (DE),A
DEC D
LD A,(DE)
AND (HL)
DEC L
OR (HL)
DEC L
LD (DE),A
DEC D
LD A,(DE)
AND (HL)
DEC L
OR (HL)
DEC L
LD (DE),A
DEC D
LD A,(DE)
AND (HL)
DEC L
OR (HL)
DEC HL
LD (DE),A
EX DE,HL
EX AF,AF`
DEC A
JP NZ,PUTM1
LD IX,REG_IX
JP (IY)
GETSCR
EXX
LD A,(DE)
EX AF,AF`
INC E
LD A,(DE)
INC E
LD SP,HL
ADD HL,ВС
; INC Н
EXX
LD В,A
EX AF,AF`
LD C,A
JP (HL)
; CODE GENER
; LD A,0
; LD IY,LL
; POP HL
; LD L,(HL)
; JP (HL)
; POP HL
; INC C
;---------------------------------
MUS_INSTALL
LD A,MUS_В
CALL .BANK
CALL MUS_I
DI
RET
.CLRO
; LD A,8
; LD (EKRAN),A
DEC SP
POP AF
JR .CLRINV
.CLR
DEC SP
POP AF
LD LX,A
CALL .CLRINV
CALL .SWAPSCR
HALT ;CHANGE
LD A,LX
.CLRINV ;CLEAR INVIS. SCR
LD (_COL),A
LD A,(PAGE)
EX AF,AF`
LD A,#17
CALL .BANK
LD A,(EKRAN)
ADD A,A
ADD A,A
ADD A,A
ADD A,A
XOR #C0 ;8->40,0->C0
LD Н,A
LD D,Н
LD E,1
LD ВС,#1800
LD L,C
LD (HL),C
CALL .NLDIR
_COL EQU $+1
LD (HL),#36
LD ВС,#02FF
CALL .NLDIR
EX AF,AF`
JP .BANK
.SETSCR0
LD A,(PAGE)
EX AF,AF`
LD A,#17
CALL .BANK
CALL .SWAPSCR ;2
LD HL,#C000
LD DE,#4000
LD ВС,#1В00
HALT
CALL .NLDIR
EX AF,AF`
JP .BANK
.KDEHR
POP DE
CALL .DEHRUST
RET
.KMOVE
POP DE
CALL .MOVE
RET
.PUTSCR
XOR A
LD (EKRAN),A
LD HL,#8000
CALL .INITIM2
LD DE,#8800
CALL .DEHRUST
LD A,#17
CALL .BANK
LD HL,#8800
LD DE,#C000
LD ВС,#1В00
CALL .NLDIR
RET
.NHALT
DEC SP
POP ВС
HALT
DJNZ $-1
RET
.NLDIR
XOR A
SUB C
AND #3F
JR Z,_LDI
ADD A,A
LD ($+3+1),A
JR $
_LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
JP PE,_LDI
RET
DISP END_KERNEL_CODE
.UNPHASE
KER_LEN EQU $-KER_BEG
;--------------------------------------------
; F I N A L M O D U L E
;--------------------------------------------
.IF FINAL
DEFW KDEHR,#C000
DEFB Uб_цод
DEFW #C000
DEFW KDEHR,#C000
DEFB CODE2D_BANK
DEFW #C000
.ENDIF
.IF RELEASE
DEFW .SETBANK
DEFB CODE2D_BANK
DEFW #C000 ;INST
DEFW .SETBANK
DEFB Uб_цод
DEFW #C000;INST
DEFW KDEHR,#C000
DEFB #16
DEFW #E000,MUS_INSTALL
DEFW #0051 ;EI
; .IF 0
;---3D 1 ------------------------------------
DEFW .CLRO
DEFB 0
DEFW .SETBANK
DEFB Uб_цод
DEFW #C003;INST PART1
;EFFECT DATA
DEFB #16
DEFW #EFE9;#1000;SPRITE
DEFW .FIX,FST
DEFW .PLAYER,FUL-92 ;PART1
DEFW .CLR
DEFB #47
DEFW #C006;UNINSTAL
;---2D 1 ------------------------------------
DEFW .SETBANK
DEFB CODE2D_BANK
DEFW #C003 ;INST PART1
;EFFECT DATA
DEFB #14
DEFW #CB02 ;SPRITE
DEFB #13
DEFW #C7В4,#2000 ;TUNTAB
DEFB #13
DEFW #C002 ;TUNTX
DEFW .FIX,FST+FUL,.SETSCR0
DEFW .PLAYER,FUL/4-5 ;PART11
DEFW #C006
DEFB #45 ;P12 COLOR
DEFW .PLAYER,FUL/4*3-58 ;PART12
DEFW .CLR
DEFB 0
DEFW #C009 ;UNINSTALL
;---3D 2-------------------------------------
PHONG EQU #E200 ;BANK 14
;UNPACK PHONG
DEFW .KDEHR,PHONG
DEFB #16
DEFW #EDOD
DEFW .SETBANK
DEFB Uб_цод
DEFW #C009;INST PART1
;EFFECT DATA
DEFB #14
DEFW #DDE8;#1000 ;BACKGR
DEFB #16
DEFW PHONG,#1000 ;PHONG
DEFW .FIX,FST+(FUL*2)
DEFW .PLAYER,FUL-74
DEFW .CLR
DEFB 0
DEFW #COOC;UNINSTAL
;---2D 2 ------------------------------------
DEFW .SETBANK
DEFB CODE2D_BANK
DEFW #COOC ;INST PART2
;EFFECT DATA
DEFB #13
DEFW #F516 ;SPRITE
DEFB #13
DEFW #E1BD,#2000 ;STRTAB
DEFB #13
DEFW #C2В6 ;STRTX
DEFW .FIX,FST+(FUL*3),.SETSCR0
DEFW .PLAYER,FUL/4-5 ;PART21
DEFW #COOF
DEFB #47 ;P22 COLOR
DEFW .PLAYER,FUL/4*3-60 ;PART22
DEFW .CLR
DEFB 0
DEFW #C012 ;UNINSTALL
;---3D 3 ------------------------------------
DEFW .SETBANK
DEFB Uб_цод
DEFW #COOF;INST PART1
;EFFECT DATA
DEFB #16
DEFW #FSF2;#1000;SPRITE
DEFB #16
DEFW PHONG,#1000;SPRITE
DEFW .FIX,FST+(FUL*4)
DEFW .PLAYER,FUL-37
DEFW .CLR
DEFB 0
DEFW #C012;UNINSTAL
;-- LOADER -----------------------------------
; .ENDIF
LOADER EQU #6600 ;LOADER
DEFW .PUTSCR
DEFB #14
DEFW #EЗCF
DEFW KMOVE,LOADER ;ТО MOVE LOADER
DEFB #14 ;BANK
DEFW #C800,#0300 ;FROM
DEFW .FIX,FST+(FUL*5)
DEFW .SWAPSCR,.NHALT
DEFB 1
;--------------------------
DEFW 360 ;FRAMES
DEFB 7 ;NUMBER OF BLOCKS
DEFB #15,#10
DEFW #C000 ;ANIMA
DEFB #11,#0E
DEFW #C000 ;ANIMA
DEFB #13,#0D
DEFW #C000 ;ANIMA
DEFB #14,#0E
DEFW #C000 ;ANIMA
; DEFW #0000 ;ANIMA
DEFB #10,#0C
DEFW #E000 ;TXTR
DEFB #10,#02
; DEFB #10,#03
DEFW #C000 ;CODE
DEFB #17,#14
DEFW #DB00 ;PIC
; DEFW EXIT
;MOVE LOADER
DEFW .KMOVE,#FDOO
DEFB #16
DEFW LOADER,#0300
;UNPACK BLOBS CODE
DEFW .KDEHR,#C000
DEFB #10
DEFW #C000
DEFW .SETBANK
DEFB #10
DEFW #C000; инит
DEFB #10
DEFW #E000 ;TEXTURE
DEFB #10
DEFW #4000
DEFB #11
DEFW #C000
DEFB #13
DEFW #C000
DEFB #14
DEFW #C000
DEFW .FIX,FST+(FUL*5)+536-35-5
DEFW .CLR
DEFB #46 ;COLOR
DEFW .PLAYER,1256 ;ТЕХТ 42*250
DEFW .CLR
DEFB 0 ;COLOR
DEFW #6600 ;UNINST
DEFW .PUTSCR
DEFB #17
DEFW #DB00
DEFW .FIX,FST+(FUL*7)
DEFW .SWAPSCR
DEFW .FIX,FST+(FUL*8)+300
; DEFW EXIT
;--- O U Т R O ---
DEFW .KMOVE,LOADER
DEFB #16
DEFW #FDOO,#0300
DEFW LOADER
DEFW 1 ;FRAMES
DEFB 1 ;NUMBER OF BLOCKS
DEFB #10,#17 ;PAGE, SEC
DEFW #8800
DEFW MUS_INSTALL
DEFW .KDEHR,#6600
DEFB #10
DEFW #8800
DEFW #6600 ;RUN
;----END -------------------------------------
.ENDIF
Other articles: