1177 lines
18 KiB
NASM
1177 lines
18 KiB
NASM
|
||
;******************************************************************
|
||
; ¢å®¤: DE - ¢¥à⨪ «ì, HL - £®à¨§®â «ì,
|
||
; B - 梥â â®çª¨, A - íªà
|
||
PIC_FN1:
|
||
AND A
|
||
SCF
|
||
RET NZ
|
||
|
||
IN A,(RGADR)
|
||
PUSH AF
|
||
|
||
IN A,(SLOT3)
|
||
EX AF,AF'
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
|
||
LD A,(WIN_ID_0.GRAF_Y)
|
||
ADD A,E
|
||
OUT (RGADR),A
|
||
LD A,B
|
||
LD BC,(WIN_ID_0.GRAF_X)
|
||
ADD HL,BC
|
||
LD B,A
|
||
LD A,#50
|
||
OUT (SLOT3),A
|
||
LD (HL),A
|
||
EX AF,AF'
|
||
OUT (SLOT3),A
|
||
|
||
POP AF
|
||
OUT (RGADR),A
|
||
RET
|
||
|
||
; ¢å®¤: DE - ¢¥à⨪ «ì, HL - £®à¨§®â «ì.
|
||
; IX - ¤«¨ «¨¨¨ ¢ â®çª å ¥ 0 !!!
|
||
; FILL - by A
|
||
; ?????
|
||
PIC_FN2:
|
||
LD D,A
|
||
IN A,(SLOT1)
|
||
EX AF,AF'
|
||
|
||
LD A,B
|
||
ADD A,#50
|
||
OUT (SLOT1),A
|
||
|
||
BIT 0,B
|
||
LD BC,#40+#4000
|
||
JR Z,PIC_FN2_NO_2ND
|
||
LD BC,#40+320+#4000
|
||
PIC_FN2_NO_2ND:
|
||
ADD HL,BC
|
||
|
||
LD A,E
|
||
OUT (RGADR),A
|
||
|
||
LD A,XH
|
||
AND A
|
||
JR Z,PIC_FN2_NO256
|
||
PIC_FN2_256L:
|
||
LD B,64
|
||
PIC_FN2_256:
|
||
LD (HL),D
|
||
INC HL
|
||
LD (HL),D
|
||
INC HL
|
||
LD (HL),D
|
||
INC HL
|
||
LD (HL),D
|
||
INC HL
|
||
DJNZ PIC_FN2_256
|
||
DEC A
|
||
JR NZ,PIC_FN2_256L
|
||
|
||
PIC_FN2_NO256:
|
||
LD B,XL
|
||
AND A
|
||
RR B
|
||
JR NC,PIC_FN2_NO1
|
||
LD (HL),D
|
||
INC HL
|
||
AND A
|
||
PIC_FN2_NO1:
|
||
RR B
|
||
JR NC,PIC_FN2_NO2
|
||
LD (HL),D
|
||
INC HL
|
||
LD (HL),D
|
||
INC HL
|
||
AND A
|
||
PIC_FN2_NO2:
|
||
XOR A
|
||
CP B
|
||
JR Z,PIC_FN2_NO4
|
||
PIC_FN2_4:
|
||
LD (HL),D
|
||
INC HL
|
||
LD (HL),D
|
||
INC HL
|
||
LD (HL),D
|
||
INC HL
|
||
LD (HL),D
|
||
INC HL
|
||
DJNZ PIC_FN2_4
|
||
PIC_FN2_NO4:
|
||
|
||
EX AF,AF'
|
||
OUT (SLOT1),A
|
||
XOR A
|
||
OUT (RGADR),A
|
||
RET
|
||
|
||
;************************************************************************
|
||
; ¢å®¤: dE - ¢¥à⨪ «ì, HL - £®à¨§®â «ì.
|
||
; A',HL' - ¤à¥á ¤ ëå ¢® ¢â®à®© áâà ¨æ¥ !
|
||
; BC' - ¤«¨ ¤ ëå
|
||
; ‚›‚Ž„ ‹ˆ<E280B9>ˆˆ ’Ž—…Š
|
||
PIC_FN3:
|
||
IN A,(SLOT3)
|
||
LD C,A
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD A,C
|
||
LD (SYS_PAGE.COPY_SLOT3),A
|
||
IN A,(SLOT2)
|
||
LD (SYS_PAGE.COPY_SLOT2),A
|
||
IN A,(SLOT1)
|
||
LD (SYS_PAGE.COPY_SLOT1),A
|
||
|
||
LD A,B
|
||
ADD A,#50
|
||
OUT (SLOT1),A
|
||
|
||
BIT 0,B
|
||
LD BC,#40 + #4000
|
||
JR Z,PIC_FN3_NO_2ND
|
||
LD BC,#40 + 320 + #4000
|
||
PIC_FN3_NO_2ND:
|
||
ADD HL,BC
|
||
|
||
LD A,E
|
||
OUT (RGADR),A
|
||
|
||
LD A,H
|
||
EXX
|
||
LD D,A
|
||
EXX
|
||
LD A,L
|
||
EXX
|
||
LD E,A
|
||
EXX
|
||
|
||
EX AF,AF'
|
||
OUT (SLOT2),A
|
||
EX AF,AF'
|
||
LD HL,SYS_PAGE.RAM_TABLE
|
||
LD L,A
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD A,(HL)
|
||
OUT (SLOT3),A
|
||
EXX
|
||
LDIR
|
||
BIT 6,H
|
||
JR Z,PIC_FN3_NO
|
||
RES 6,H
|
||
EX AF,AF'
|
||
PIC_FN3_NO:
|
||
EXX
|
||
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD A,(SYS_PAGE.COPY_SLOT1)
|
||
OUT (SLOT1),A
|
||
LD A,(SYS_PAGE.COPY_SLOT2)
|
||
OUT (SLOT2),A
|
||
LD A,(SYS_PAGE.COPY_SLOT3)
|
||
OUT (SLOT3),A
|
||
|
||
XOR A
|
||
OUT (RGADR),A
|
||
RET
|
||
|
||
;**************************************************************************
|
||
;PIC_FN4:
|
||
; ¢å®¤: HL - ¤ ë¥ ¯ «¨âàë RGB, E - ç «ìë© æ¢¥â
|
||
; D - ç¨á«® 梥⮢, B - PAL-mask, A - page PAL
|
||
PIC_SET_PAL:
|
||
PUSH IX
|
||
|
||
EX AF,AF'
|
||
IN A,(RGADR)
|
||
PUSH AF ; á®åà ¨âì ¯®«®¦¥¨¥ RGADR
|
||
LD A,E
|
||
OUT (RGADR),A ; ç «ìë© æ¢¥â ¢ ¯®àâ
|
||
LD A,D ; á®åà ¨âì ç¨á«® 梥⮢
|
||
EX AF,AF' ; ¢¥àãâì áâà ¨æã PAL
|
||
|
||
BIT 7,H ; ¯à®¢¥à¨âì ¤à¥á ¤ ëå
|
||
LD C,SLOT3 ; ¥á«¨ ¨¦¥ 8000h
|
||
LD D,#C3 ; â® £à ä.íªà áâà ¨æ¥ 3
|
||
JR Z,.NO_PAGE1
|
||
LD D,#43 ; ¨ ç¥
|
||
LD C,SLOT1 ; áâà ¨æ¥ 1
|
||
.NO_PAGE1:
|
||
ADD A,A
|
||
PUSH AF
|
||
|
||
ADD A,A
|
||
AND #1C
|
||
XOR #E0 ; ¬« ¤è¨© ¡ ©â ¤à¥á PAL
|
||
LD E,A ; DE - ¤à¥á ¢ ¢¨¤¥®-އ“
|
||
PUSH DE
|
||
POP IX ; ¤à¥á ¯ «¨âàë
|
||
|
||
LD D,B ; ¬ ᪠PAL
|
||
EX AF,AF' ; ¢¥àãâì ç¨á«® 梥⮢
|
||
LD B,A ; ç¨á«® 梥⮢
|
||
|
||
IN E,(C) ; á®åà ¨âì áâà ¨æã 3
|
||
LD A,#50 ; áâà ¨æ £à ä¨ç¥áª®£® RAM
|
||
OUT (C),A
|
||
|
||
POP AF
|
||
JR C,PIC_GET_PAL
|
||
; 横« ãáâ ®¢ª¨ 梥⮢ ¯ «¨âàë
|
||
.loopPal:
|
||
LD A,(HL) ; B
|
||
AND D
|
||
LD (IX+2),A
|
||
INC HL
|
||
|
||
LD A,(HL) ; G
|
||
AND D
|
||
LD (IX+1),A
|
||
INC HL
|
||
|
||
LD A,(HL) ; R
|
||
AND D
|
||
LD (IX+0),A
|
||
INC HL
|
||
|
||
LD A,(HL) ; Y
|
||
AND D
|
||
LD (IX+3),A
|
||
INC HL
|
||
|
||
IN A,(RGADR)
|
||
INC A
|
||
OUT (RGADR),A
|
||
DJNZ .loopPal ; ¢ë¯®«ïâì, ¯®ª ¥ 0
|
||
|
||
.exit: OUT (C),E ; ¢®ááâ ®¢¨âì áâà ¨æã 3
|
||
POP AF
|
||
OUT (RGADR),A ; ¢®ááâ ®¢¨âì Y_PORT
|
||
POP IX
|
||
AND A
|
||
RET
|
||
|
||
PIC_GET_PAL:
|
||
; 横« çâ¥¨ï æ¢¥â®¢ ¯ «¨âàë
|
||
.loopPal:
|
||
LD A,(IX+2)
|
||
LD (HL),A ; B
|
||
INC HL
|
||
|
||
LD A,(IX+1)
|
||
LD (HL),A ; G
|
||
INC HL
|
||
|
||
LD A,(IX+0)
|
||
LD (HL),A ; R
|
||
INC HL
|
||
|
||
LD A,(IX+3)
|
||
LD (HL),A ; Y
|
||
INC HL
|
||
|
||
IN A,(RGADR)
|
||
INC A
|
||
OUT (RGADR),A
|
||
DJNZ .loopPal ; ¢ë¯®«ïâì, ¯®ª ¥ 0
|
||
|
||
JR PIC_SET_PAL.exit
|
||
|
||
;********************************************************************
|
||
PIC_FN5: ; “‘’€<E28099>ނЀ ‘’<E28098>€<EFBFBD>ˆ–› MODE
|
||
LD A,E
|
||
AND 1
|
||
OUT (RGMOD),A
|
||
RET
|
||
;*******************************************************************
|
||
; “áâ ®¢ª ¢ãâ॥© ¯ «¨âàë
|
||
; A - page_pal, E - ®¬¥à ¯ «¨âàë, B - ⨯ ¯ «¨âàë
|
||
SET_PAL_INIT:
|
||
LD D,A
|
||
DEC B
|
||
JP Z,SET_GRAPH_PALETTE
|
||
DEC B
|
||
JP Z,SET_TXT_PALETTE.ZX
|
||
DEC B
|
||
JP Z,SET_TXT_PALETTE.IBM
|
||
|
||
; LD IX,PAL_DAT1
|
||
; JR Z,PIC_FN6_L1
|
||
; DEC B
|
||
; LD IX,PAL_DAT
|
||
; JR Z,PIC_FN6_L1
|
||
|
||
SCF
|
||
RET
|
||
|
||
;PIC_FN6_L1:
|
||
; AND 3
|
||
; ADD A,A
|
||
; ADD A,A
|
||
; ADD A,#E0
|
||
; LD L,A
|
||
; LD H,#43
|
||
; IN A,(SLOT1)
|
||
; PUSH AF
|
||
;
|
||
; LD A,#50
|
||
; OUT (SLOT1),A
|
||
; XOR A
|
||
; OUT (RGADR),A
|
||
; EX AF,AF'
|
||
; call PAL_LOOP_M
|
||
;
|
||
; POP AF
|
||
; OUT (SLOT1),A
|
||
; XOR A
|
||
; OUT (RGADR),A
|
||
;
|
||
; RET
|
||
|
||
;******************************************************************
|
||
; <20>¨á®¢ ¨¥ «¨¨¨.
|
||
; d… - ¢¥à⨪ «ì, HL - £®à¨§®â «ì
|
||
; H' - ¢ëá®â , C'/DE',B' - add_parameters
|
||
; A - color
|
||
PIC_FN7:
|
||
LD D,A
|
||
IN A,(SLOT1)
|
||
PUSH AF
|
||
|
||
LD A,B
|
||
ADD A,#50
|
||
OUT (SLOT1),A
|
||
|
||
BIT 0,B
|
||
LD BC,#40+#4000
|
||
JR Z,.no_2nd
|
||
LD BC,#40+320+#4000
|
||
.no_2nd:
|
||
ADD HL,BC
|
||
LD A,E
|
||
|
||
.loop: OUT (RGADR),A ; áâà ¨æ ¢¨¤¥®-އ“
|
||
LD (HL),D
|
||
|
||
EXX
|
||
EX AF,AF'
|
||
|
||
DEC H
|
||
JR Z,.exit
|
||
|
||
LD A,C ; NEXT HORIZONTAL
|
||
ADD A,B
|
||
LD C,A
|
||
LD A,E
|
||
EXX
|
||
|
||
ADC A,L
|
||
LD L,A
|
||
|
||
EXX
|
||
LD A,D
|
||
EXX
|
||
|
||
ADC A,H
|
||
LD H,A
|
||
INC E ; NEXT VERTICAL
|
||
EX AF,AF'
|
||
INC A
|
||
JR .loop
|
||
|
||
.exit: EXX
|
||
POP AF
|
||
OUT (SLOT1),A
|
||
XOR A
|
||
OUT (RGADR),A
|
||
RET
|
||
|
||
;******************************************************************
|
||
; <20>¨á®¢ ¨¥ «¨¨¨.
|
||
; d… - ¢¥à⨪ «ì, HL - £®à¨§®â «ì
|
||
; H' - ¢ëá®â , C'/DE',B' - add_parameters
|
||
; (IX) - colors
|
||
PIC_FN8:
|
||
IN A,(SLOT1)
|
||
PUSH AF
|
||
|
||
LD A,B
|
||
ADD A,#50
|
||
OUT (SLOT1),A
|
||
|
||
BIT 0,B
|
||
LD BC,#40+#4000
|
||
JR Z,.no_2nd
|
||
LD BC,#40+320+#4000
|
||
.no_2nd:
|
||
ADD HL,BC
|
||
LD A,E
|
||
|
||
.loop: OUT (RGADR),A ; áâà ¨æ ¢¨¤¥®-އ“
|
||
LD D,(IX)
|
||
INC IX
|
||
LD (HL),D
|
||
|
||
EXX
|
||
EX AF,AF'
|
||
|
||
DEC H
|
||
JR Z,.exit
|
||
|
||
LD A,C ; NEXT HORIZONTAL
|
||
ADD A,B
|
||
LD C,A
|
||
LD A,E
|
||
EXX
|
||
|
||
ADC A,L
|
||
LD L,A
|
||
|
||
EXX
|
||
LD A,D
|
||
EXX
|
||
|
||
ADC A,H
|
||
LD H,A
|
||
|
||
INC E ; NEXT VERTICAL
|
||
|
||
EX AF,AF'
|
||
INC A
|
||
JR .loop
|
||
|
||
.exit: EXX
|
||
POP AF
|
||
OUT (SLOT1),A
|
||
XOR A
|
||
OUT (RGADR),A
|
||
RET
|
||
|
||
;**************************************************
|
||
; ‚뢮¤ á¯à ©â íªà
|
||
; HL - £®à¨§®â «ì, dE - ¢¥à⨪ «ì
|
||
; A',HL' - ¤à¥á ¤ ëå
|
||
PIC_FN9:
|
||
|
||
;*********************************
|
||
; HL,E - ª®®à¤¨ âë D - color
|
||
; B - Magnify
|
||
PIC_FN10:
|
||
PIC_FN11:
|
||
PIC_FN12:
|
||
PIC_FN13:
|
||
PIC_FN14:
|
||
PIC_FN15:
|
||
SCF
|
||
RET
|
||
;************************************
|
||
|
||
|
||
;************************************
|
||
; SYCLES EQU 0
|
||
; ;START EQU 1
|
||
; ST1 EQU 2
|
||
; DPAL1 EQU 3
|
||
; ST2 EQU 4
|
||
; DPAL2 EQU 5
|
||
|
||
; MACRO NEXT_LIN_H
|
||
; EX AF,AF'
|
||
; INC A
|
||
; OUT (RGADR),A
|
||
; EX AF,AF'
|
||
; ENDM
|
||
|
||
; MACRO NEXT_LIN_HP
|
||
; EX AF,AF'
|
||
; INC A
|
||
; OUT (RGADR),A
|
||
; JR NZ,.MD_NO_INC_H
|
||
; INC L
|
||
; .MD_NO_INC_H:
|
||
; EX AF,AF'
|
||
; ENDM
|
||
|
||
;****************************************
|
||
; ‡ £à㧪 ०¨¬ íªà .
|
||
;****************************************
|
||
|
||
; CALL SINC_DEF
|
||
; CALL SET_TXT_PALETTE.ZX
|
||
; RET
|
||
|
||
;****************************************
|
||
|
||
;!TODO âãâ äãªæ¨ï
|
||
CL0 EQU 200
|
||
CL1 EQU 240
|
||
|
||
|
||
SET_TXT_PALETTE:
|
||
.IBM: LD DE,#8000
|
||
JR .TXT
|
||
;
|
||
.ZX: LD DE,0
|
||
.TXT: PUSH IX
|
||
IN A,(RGADR)
|
||
PUSH AF
|
||
IN A,(SLOT3)
|
||
EX AF,AF'
|
||
LD A,#50
|
||
OUT (SLOT3),A
|
||
;
|
||
LD IX,#C3F0 ; !HARDCODE ¤à¥á ¯ «¨âàë?
|
||
.generate_loop:
|
||
CALL GENERATE_PAL1
|
||
LD A,E
|
||
OUT (RGADR),A
|
||
LD (IX),L ; R
|
||
LD (IX+1),B ; G
|
||
LD (IX+2),C ; B
|
||
LD (IX+3),H ; i ?
|
||
INC E
|
||
JR NZ,.generate_loop
|
||
;
|
||
LD BC,4
|
||
ADD IX,BC
|
||
INC D
|
||
LD A,D
|
||
AND 3
|
||
JR NZ,.generate_loop
|
||
;
|
||
EX AF,AF'
|
||
OUT (SLOT3),A
|
||
POP AF
|
||
OUT (RGADR),A
|
||
POP IX
|
||
RET
|
||
|
||
; £¥¥à æ¨ï ᯥªâà㬮¢áª®© ¯ «¨âàë.
|
||
; ‚室: E - âਡãâ, D - ®¬¥à ¯ «¨âàë
|
||
; ‚›•Ž„: L - red, B - green, C - blue, H - intensity
|
||
GENERATE_PAL1: XOR A
|
||
LD C,A
|
||
LD B,A
|
||
LD L,A
|
||
BIT 7,D
|
||
JR NZ,GENERATE_IBM
|
||
BIT 1,D
|
||
JR NZ,.FLH
|
||
.NOF: BIT 0,D
|
||
JR Z,.PAPER
|
||
.INK: LD A,CL0
|
||
BIT 6,E
|
||
JR Z,.NOI1
|
||
LD A,CL1
|
||
.NOI1: BIT 0,E ; BLUE
|
||
JR Z,.NO1
|
||
LD C,A
|
||
.NO1: BIT 1,E ; RED
|
||
JR Z,.PP_NO2
|
||
LD L,A
|
||
.PP_NO2: BIT 2,E ; GREEN
|
||
JR Z,.PP_NO3
|
||
LD B,A
|
||
.PP_NO3: JR .PP_NO6
|
||
;
|
||
.FLH: BIT 7,E
|
||
JR Z,.NOF
|
||
BIT 0,D
|
||
JR Z,.INK
|
||
.PAPER: LD A,CL0
|
||
BIT 6,E
|
||
JR Z,.NOI2
|
||
LD A,CL1
|
||
.NOI2: BIT 3,E ; BLUE
|
||
JR Z,.PP_NO4
|
||
LD C,A
|
||
.PP_NO4: BIT 4,E ; RED
|
||
JR Z,.PP_NO5
|
||
LD L,A
|
||
.PP_NO5: BIT 5,E ; GREEN
|
||
JR Z,.PP_NO6
|
||
LD B,A
|
||
.PP_NO6: LD A,C
|
||
AND A
|
||
RRA
|
||
ADD A,L
|
||
RRA
|
||
ADD A,B
|
||
RRA
|
||
LD H,A ; B/W mode
|
||
RET
|
||
;****************************************
|
||
|
||
GENERATE_IBM:
|
||
BIT 7,E
|
||
JR Z,.NO_FLH
|
||
BIT 1,D
|
||
JR Z,.PAPER
|
||
.NO_FLH:
|
||
BIT 0,D
|
||
JR Z,.PAPER
|
||
.INK:
|
||
.NO_INTENS:
|
||
LD A,#A8
|
||
.INTENS:
|
||
BIT 0,E ; BLUE
|
||
JR Z,.PPI_NO4
|
||
LD C,A
|
||
.PPI_NO4:
|
||
BIT 2,E ; RED
|
||
JR Z,.PPI_NO5
|
||
LD L,A
|
||
.PPI_NO5:
|
||
BIT 1,E ; GREEN
|
||
JR Z,.PPI_NO6
|
||
LD B,A
|
||
.PPI_NO6:
|
||
LD A,E
|
||
AND #0F
|
||
CP 6
|
||
JR NZ,.no_correct
|
||
LD B,#54
|
||
.no_correct:
|
||
BIT 3,E
|
||
JR Z,GENERATE_PAL1.PP_NO6
|
||
|
||
LD A,#54
|
||
ADD A,C
|
||
LD C,A
|
||
LD A,#54
|
||
ADD A,B
|
||
LD B,A
|
||
LD A,#54
|
||
ADD A,L
|
||
LD L,A
|
||
JR GENERATE_PAL1.PP_NO6
|
||
.PAPER:
|
||
LD A,#A8
|
||
BIT 4,E ; BLUE
|
||
JR Z,.PPI_NO4X
|
||
LD C,A
|
||
.PPI_NO4X:
|
||
BIT 6,E ; RED
|
||
JR Z,.PPI_NO5X
|
||
LD L,A
|
||
.PPI_NO5X:
|
||
BIT 5,E ; GREEN
|
||
JR Z,.PPI_NO6X
|
||
LD B,A
|
||
.PPI_NO6X:
|
||
LD A,E
|
||
AND #70
|
||
CP #60
|
||
JR NZ,GENERATE_PAL1.PP_NO6
|
||
LD B,#54
|
||
JR GENERATE_PAL1.PP_NO6
|
||
;****************************************
|
||
|
||
;****************************************
|
||
;****************************************
|
||
|
||
; D - ®¬¥à £à ä¨ç¥áª®© ¯ «¨âàë
|
||
SET_GRAPH_PALETTE:
|
||
PUSH IX
|
||
IN A,(RGADR)
|
||
PUSH AF
|
||
|
||
IN A,(SLOT3)
|
||
EX AF,AF'
|
||
LD A,#50
|
||
OUT (SLOT3),A
|
||
|
||
|
||
LD IX,#C3E0
|
||
LD A,D
|
||
AND 3
|
||
ADD A,A
|
||
ADD A,A
|
||
LD E,A
|
||
LD D,0
|
||
ADD IX,DE
|
||
|
||
LD E,0
|
||
|
||
XOR A
|
||
LD B,A
|
||
LD C,A
|
||
LD L,A
|
||
LD H,A
|
||
|
||
SET_PAL_GR1:
|
||
LD A,E
|
||
OUT (RGADR),A
|
||
|
||
LD (IX),L
|
||
LD (IX+1),B
|
||
LD (IX+2),C
|
||
LD (IX+3),H
|
||
|
||
CALL GENERATE_PAL3
|
||
|
||
INC E
|
||
LD A,E
|
||
CP 40
|
||
JR NZ,SET_PAL_GR1
|
||
|
||
XOR A
|
||
LD B,A
|
||
LD C,A
|
||
LD L,A
|
||
LD H,A
|
||
|
||
SET_PAL_GR2:
|
||
LD A,E
|
||
OUT (RGADR),A
|
||
|
||
LD (IX),L
|
||
LD (IX+1),B
|
||
LD (IX+2),C
|
||
LD (IX+3),H
|
||
|
||
CALL GENERATE_PAL2
|
||
|
||
INC E
|
||
JR NZ,SET_PAL_GR2
|
||
|
||
EX AF,AF'
|
||
OUT (SLOT3),A
|
||
POP AF
|
||
OUT (RGADR),A
|
||
POP IX
|
||
RET
|
||
;
|
||
;;*********************************
|
||
;
|
||
|
||
GENERATE_PAL3: ; gray-scale
|
||
LD A,B
|
||
ADD A,6
|
||
LD B,A
|
||
LD C,A
|
||
LD L,A
|
||
|
||
LD A,C
|
||
AND A
|
||
RRA
|
||
ADD A,L
|
||
RRA
|
||
ADD A,B
|
||
RRA
|
||
LD H,A
|
||
|
||
RET
|
||
|
||
GENERATE_PAL2: ; C - BLUE; L - RED; B - GREEN; H - INTENSITY
|
||
LD A,C
|
||
ADD A,50
|
||
LD C,A
|
||
JR NC,GEN_PAL2_L1
|
||
LD C,0
|
||
LD A,L
|
||
ADD A,50
|
||
LD L,A
|
||
JR NC,GEN_PAL2_L1
|
||
LD L,0
|
||
LD A,B
|
||
ADD A,50
|
||
LD B,A
|
||
JR NC,GEN_PAL2_L1
|
||
LD B,0
|
||
|
||
GEN_PAL2_L1:
|
||
LD A,C
|
||
AND A
|
||
RR A
|
||
ADD A,L
|
||
RR A
|
||
ADD A,B
|
||
RR A
|
||
LD H,A
|
||
|
||
RET
|
||
;
|
||
;************************************
|
||
|
||
FN_SYNC:
|
||
BIT 7,a
|
||
JR Z,.old_mode
|
||
|
||
ld h,a
|
||
and #60 ; check reserved bits
|
||
jr nz,.error
|
||
|
||
bit 2,h ; Set V-Sinc?
|
||
jr nz,.set_v_sinc
|
||
|
||
bit 4,h ; Set Waits?
|
||
jr z,.error ; Error - no parameters
|
||
|
||
.set_waits:
|
||
ld a,h
|
||
and 8 ; check waits. Z - no waits, NZ - waits
|
||
ld h,#FF
|
||
jr z,1F
|
||
ld h,#FB
|
||
1:
|
||
ld bc,(Port_All_Mode)
|
||
in a,(C)
|
||
and h
|
||
out (C),a
|
||
RET
|
||
|
||
.set_v_sinc:
|
||
ld a,h
|
||
and 3
|
||
jr z,.SetDefLines
|
||
dec a
|
||
jr z,.SetCmosLines
|
||
dec a
|
||
jr z,.Set320Lines
|
||
; jr Set312Lines
|
||
|
||
.set312lines:
|
||
ld a,Port_VSYNC.SET_312L
|
||
out (Port_VSYNC),a
|
||
|
||
LD C,SLOT3
|
||
IN B,(C)
|
||
LD A,SYS_PAGE
|
||
OUT (C),A
|
||
ld a,(SYS_PAGE.VSyncAndWaits)
|
||
and 2
|
||
ld (SYS_PAGE.VSyncAndWaits),a
|
||
OUT (C),B
|
||
|
||
.end_set_v_sinc:
|
||
bit 4,h
|
||
ret z
|
||
jr .set_waits
|
||
|
||
|
||
.Set320Lines:
|
||
ld a,Port_VSYNC.SET_320L
|
||
out (Port_VSYNC),a
|
||
|
||
LD C,SLOT3
|
||
IN B,(C)
|
||
LD A,SYS_PAGE
|
||
OUT (C),A
|
||
ld a,(SYS_PAGE.VSyncAndWaits)
|
||
or 1
|
||
ld (SYS_PAGE.VSyncAndWaits),a
|
||
OUT (C),B
|
||
|
||
jr .end_set_v_sinc
|
||
|
||
.SetCmosLines:
|
||
LD D,CMOS_CELL.ScreenSET
|
||
CALL CMOS_RD
|
||
|
||
AND high CMOS_CELL.ScreenSET.Mask.Sinc ; ¢ ॣ¨áâॠA § 票¥ ScreenSET
|
||
jr z,.SetDefLines
|
||
|
||
bit 6,a
|
||
jr z,.set312lines
|
||
|
||
jr .Set320Lines
|
||
|
||
.old_mode:
|
||
AND A
|
||
JR Z,.INT_DEF
|
||
DEC A
|
||
JR Z,.INT_SCORP
|
||
DEC A
|
||
JR Z,.INT_PENT
|
||
DEC A
|
||
JR Z,.INT_ORIG
|
||
DEC A
|
||
JR Z,.INT_CMOS_SINC
|
||
; [x] ª áâ®¬ë© íªà ¯® â ¡«¨æ¥ ¯®«ì§®¢ ⥫ï
|
||
DEC A
|
||
JR Z,.PROG_SCR
|
||
;
|
||
.error: SCF
|
||
RET
|
||
|
||
.SetDefLines:
|
||
LD C,SLOT3
|
||
IN B,(C)
|
||
LD A,SYS_PAGE
|
||
OUT (C),A
|
||
ld a,(SYS_PAGE.VSyncAndWaits)
|
||
OUT (C),B
|
||
and 1
|
||
jr z,.set312lines
|
||
jr .Set320Lines
|
||
|
||
.INT_DEF:
|
||
LD C,SLOT3
|
||
IN B,(C)
|
||
LD A,SYS_PAGE
|
||
OUT (C),A
|
||
LD DE,(SYS_PAGE.CONFIG_ALL)
|
||
OUT (C),B
|
||
|
||
CALL Test_CONFIG_ALL
|
||
jr nz,.INT_CMOS_SINC
|
||
jp (IX)
|
||
|
||
.INT_CMOS_SINC:
|
||
LD C,SLOT3
|
||
IN B,(C)
|
||
LD A,SYS_PAGE
|
||
OUT (C),A
|
||
LD DE,(SYS_PAGE.CONFIG_ALL)
|
||
OUT (C),B
|
||
|
||
LD D,CMOS_CELL.ScreenSET
|
||
CALL CMOS_RD
|
||
|
||
AND high CMOS_CELL.ScreenSET.Mask.Int ; ¢ ॣ¨áâॠA § 票¥ ScreenSET
|
||
JR NZ,.skiptest
|
||
|
||
CALL Test_CONFIG_ALL
|
||
JP (IX) ; default int (non CMOS)
|
||
|
||
.skiptest:
|
||
cp #10
|
||
jr z,.INT_SCORP ; scorpion int
|
||
|
||
cp #20
|
||
jr z,.INT_PENT ; pentagon int
|
||
|
||
; jr ORIG_SINC ; original int
|
||
|
||
.INT_ORIG:
|
||
LD IX,SCREEN_TABLES.ORIGINAL
|
||
JR .PROG_SCR
|
||
.INT_SCORP:
|
||
LD IX,SCREEN_TABLES.SCORPION
|
||
JR .PROG_SCR
|
||
.INT_PENT:
|
||
LD IX,SCREEN_TABLES.PENTAGON
|
||
; JR PROG_SCR
|
||
.PROG_SCR:
|
||
IN A,(SLOT3)
|
||
EX AF,AF'
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
EX AF,AF'
|
||
LD (SYS_PAGE.COPY_SLOT3),A
|
||
IN A,(PORT_Y)
|
||
LD (SYS_PAGE.COPY_RGADR),A
|
||
|
||
LD (SYS_PAGE.CONFIG_ALL),IX
|
||
XOR A
|
||
|
||
;----[START]-----------------------[? 1]
|
||
.loop_1:
|
||
OUT (PORT_Y),A
|
||
EX AF,AF'
|
||
|
||
LD A,#50
|
||
OUT (SLOT3),A
|
||
|
||
LD HL,#C300
|
||
|
||
;----[START]------------------[v 2]-----
|
||
.loop_2:
|
||
LD C,(IX)
|
||
;----[START]-------------[v 3]----------
|
||
.loop_3:
|
||
; ¢§ïâì ¤à¥á ¤ ëå ¤«ï § ¯¨á¨ ¢ á«ã¦¥¡ãî ®¡« áâì íªà
|
||
LD E,(IX+1) ; take adress of line X
|
||
LD D,(IX+2)
|
||
;----[START]--------[v 4]---------------
|
||
.loop_4:
|
||
LD A,(DE) ; take counter in table 1, line X, column Y
|
||
INC DE
|
||
AND A
|
||
JR Z,.loop_4_exit ; exit if zero-counter
|
||
LD B,A
|
||
LD A,(DE)
|
||
INC DE
|
||
;----[START]---[v 5]--------------------
|
||
.loop_5:
|
||
LD (HL),A
|
||
INC L
|
||
LD (HL),0
|
||
INC L
|
||
LD (HL),0
|
||
|
||
EX AF,AF'
|
||
INC A
|
||
OUT (PORT_Y),A
|
||
EX AF,AF'
|
||
|
||
LD (HL),0
|
||
DEC L
|
||
LD (HL),0
|
||
DEC L
|
||
LD (HL),A
|
||
|
||
EX AF,AF'
|
||
INC A
|
||
OUT (PORT_Y),A
|
||
EX AF,AF'
|
||
|
||
DJNZ .loop_5
|
||
;--------------[^ 5]--------------------
|
||
JR .loop_4
|
||
;-------------------[^ 4]---------------
|
||
.loop_4_exit:
|
||
INC HL ; next line
|
||
INC HL
|
||
INC HL
|
||
INC HL
|
||
IN A,(PORT_Y)
|
||
AND #80
|
||
OUT (PORT_Y),A
|
||
DEC C
|
||
JR NZ,.loop_3
|
||
;------------------------[^ 3]----------
|
||
INC IX ; next counter
|
||
INC IX
|
||
INC IX
|
||
LD A,(IX)
|
||
AND A
|
||
JR NZ,.loop_2
|
||
;-----------------------------[^ 2]-----
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD IX,(SYS_PAGE.CONFIG_ALL)
|
||
|
||
EX AF,AF'
|
||
ADD A,#80
|
||
JR NC,.loop_1
|
||
;----------------------------------[^ 1]
|
||
|
||
; Exit
|
||
LD A,(SYS_PAGE.COPY_RGADR)
|
||
OUT (PORT_Y),A
|
||
LD A,(SYS_PAGE.COPY_SLOT3)
|
||
OUT (SLOT3),A
|
||
.exit: OR A
|
||
RET
|
||
|
||
;DE - ᮤ¥à¦¨¬®¥ CONFIG_ALL
|
||
Test_CONFIG_ALL:
|
||
LD HL,SCREEN_TABLES.SCORPION
|
||
AND A
|
||
SBC HL,DE
|
||
ld IX,FN_SYNC.INT_SCORP
|
||
RET Z
|
||
|
||
LD HL,SCREEN_TABLES.ORIGINAL
|
||
AND A
|
||
SBC HL,DE
|
||
ld IX,FN_SYNC.INT_ORIG
|
||
RET Z
|
||
|
||
LD HL,SCREEN_TABLES.PENTAGON
|
||
AND A
|
||
SBC HL,DE
|
||
ld IX,FN_SYNC.INT_PENT
|
||
RET Z
|
||
and a
|
||
RET
|
||
|
||
|
||
;--- Screen data table 1: counter1, data1 .. counterX, dataX
|
||
SCREEN_TABLES:
|
||
; | ç¨á«® | § 票ï |
|
||
; | áâப | ¢ |
|
||
; | /2 | áâப å |
|
||
.SCR: DB 41 , #F8
|
||
DB 3 , #FC
|
||
DB 4 , #FC
|
||
DB 7 , #FC
|
||
DB 9 , #F8
|
||
DB 0
|
||
|
||
;.SCR: DB 41,#F8, 3,#FC, 4,#FC, 7,#FC, 9,#F8, 0
|
||
.INT: DB 40,#FC, 2,#FD, 6,#FC, 7,#FC, 9,#FC, 0
|
||
.INT_SC: DB 41,#F8, 1,#FD, 6,#FC, 7,#FC, 9,#F8, 0
|
||
.BLN: DB 41,#FC, 3,#FC, 4,#FC, 7,#FC, 9,#FC, 0
|
||
.SNC: DB 41,#FC, 3,#FC, 4,#FC, 7,#FC, 9,#FC, 0
|
||
.RES: DB 41,#F8, 3,#FE, 4,#FE, 7,#FE, 9,#F8, 0
|
||
;---------------------------------------
|
||
|
||
;--- Screen data tables 2: counter1, data address1 .. counterX, data addressX
|
||
;
|
||
; | ª®«-¢® | § 票ï |
|
||
; | áâப | ¢ |
|
||
; | | áâப¥ |
|
||
.PENTAGON: DB 33 : DW .SCR
|
||
DB 1 : DW .INT ; DW .BLN
|
||
DB 3 : DW .SNC
|
||
DB 1 : DW .BLN
|
||
DB 1 : DW .SCR
|
||
DB 1 : DW .RES
|
||
DB 0 ; end
|
||
.SCORPION: DB 31 : DW .SCR
|
||
DB 1 : DW .INT_SC
|
||
DB 1 : DW .SCR
|
||
DB 1 : DW .SNC
|
||
DB 3 : DW .SNC
|
||
DB 1 : DW .BLN
|
||
DB 2 : DW .RES
|
||
DB 0 ; end
|
||
.ORIGINAL: DB 33 : DW .SCR
|
||
DB 1 : DW .SNC
|
||
DB 1 : DW .INT
|
||
DB 2 : DW .SNC
|
||
DB 1 : DW .BLN
|
||
DB 1 : DW .SCR
|
||
DB 1 : DW .RES
|
||
DB 0 ; end
|
||
;---------------------------------------
|
||
|
||
;************************************
|
||
;
|
||
; <20>ªà ë¥ â ¡«¨æë
|
||
;
|
||
;⥪á⮢®¥ ®ª® 80x32
|
||
LP_SCR_80:
|
||
DB 40,32,0,0,27,0,0,0
|
||
DB 0, 0,0,0, 0,0,0,0
|
||
|
||
;⥪á⮢®¥ ®ª® 40x32
|
||
LP_SCR_40:
|
||
DB 40,32,0,0,123,0,0,0
|
||
DB 0, 0,0,0, 0,0,0,0
|
||
|
||
;ᯥªâà㬮¢áª®¥ ®ª® 32x24
|
||
LP_SCR_32:
|
||
DB 32,24,4,4,48,1,0,0
|
||
DB 0, 0,0,0, 0,0,0,0
|
||
|
||
;⥪á⮢®¥ ®ª® 64x24
|
||
LP_SCR_64:
|
||
DB 32,24,4,4,155,0,0,0
|
||
DB 0, 0,0,0, 0,0,0,0
|
||
|
||
;£à ä¨ç¥áª®¥ ®ª® 0
|
||
PIC_320X256_1:
|
||
DB 40,32,0,0,32,0,8,0
|
||
DB 0, 0,0,0, 0,0,0,0
|
||
|
||
;£à ä¨ç¥áª®¥ ®ª® 1
|
||
PIC_320X256_2:
|
||
DB 40,32,0,0,96,0,48,0
|
||
DB 0, 0,0,0, 0,0, 0,0
|
||
|
||
;************************************
|
||
;
|
||
|
||
|