ZX-SP-ROMs/ZX_EXP/FLEX.ASM
Anatoliy Belyanskiy 51b40b7af5 Setup
2023-06-17 04:36:58 +10:00

680 lines
8.6 KiB
NASM

SYCLES EQU 0
START EQU 1
ST1 EQU 2
DPAL1 EQU 3
ST2 EQU 4
DPAL2 EQU 5
NEXT_LIN_H MACRO
EX AF,AF'
INC A
OUT (RGADR),A
EX AF,AF'
ENDM
NEXT_LIN_HP MACRO
local MD_NO_INC_H
EX AF,AF'
INC A
OUT (RGADR),A
JR NZ,MD_NO_INC_H
inc l
MD_NO_INC_H:
EX AF,AF'
ENDM
;*****************************************
;
; ˆ­¨æ¨ «¨§ æ¨ï áâà ­¨æ ¤«ï
; ᯥªâà㬮¢áª®£® ०¨¬  ¨
; ¢®ááâ ­®¢«¥­¨¥ ᯥªâà㬮¢áª®£®
; íªà ­ 
;
; ‚®§¢à â ¯® IX
;
; !!! NO USE STACK !!!
;
;*****************************************
INIT_PAGES:
AND A
LD E,A
EX AF,AF'
LD A,E
; BIT 7,A
; JR Z,SCORPION_256_MODE
; BIT 6,A
; JR Z,PENTAGON_128_MODE
;
;PENTAGON_48_MODE:
; AND 03CH
; OUT (PAGE0),A
; INC A
; OUT (PAGE1),A
; INC A
; OUT (PAGE2),A
; INC A
; LD D,A
; LD BC,1FFDH
; XOR A
; OUT (C),A
; LD B,7FH
; OUT (C),A
; LD A,D
; OUT (PAGE3),A
; JR INIT_VIDEO_REG
;
;PENTAGON_128_MODE:
; LD D,8
; AND 038H
; JR ALL_MODE
SCORPION_256_MODE:
LD D,16
AND 030H ; ¤® 4-å ᯥªâà㬮¢
ALL_MODE:
OUT (PAGE0),A
XOR 5
OUT (PAGE1),A
XOR 7
OUT (PAGE2),A
OR 0FH
LD E,A
D_P2:
DEC D
LD A,D
RLCA
AND 10H
LD BC,01FFDH
OUT (C),A
LD A,D
AND 7
OR 40H
LD B,7FH
OUT (C),A
LD A,E
OUT (PAGE3),A
DEC E
DEC D
INC D
JR NZ,D_P2
INIT_VIDEO_REG:
XOR A
OUT (RGADR),A ; ॣ¨áâà ¢¨¤¥®  ¤à¥á 
; OUT (RGSCR),A ; ॣ¨áâà íªà ­ 
OUT (RGMOD),A ; ॣ¨áâà ¬®¤ë
LD HL,04000H
LD DE,04000H
LD BC,01B00H
LDIR ; Restore old Spectrum Screen
EX AF,AF'
BIT 6,A
JR NZ,NO_SCREEN_ALT
EX AF,AF'
LD A,7 ; ᥤ쬠ï íªà ­­ ï áâà ­¨æ 
LD BC,7FFDH
OUT (C),A
LD HL,0C000H
LD DE,0C000H
LD BC,01B00H
LDIR ; Restore old Spectrum Screen
XOR A
LD BC,7FFDH
OUT (C),A
EX AF,AF'
NO_SCREEN_ALT:
AND A
JP (IX)
;****************************************
; ‡ £à㧪  ०¨¬  íªà ­ .
;****************************************
; CALL SINC_DEF
; CALL SET_PAL_ZX
; RET
;****************************************
;****************************************
;****************************************
;****************************************
CL0 EQU 200
CL1 EQU 240
; SET_PAL_IBM:
; LD DE,08000h
; JR SET_PAL_
SET_PAL_ZX:
;SET_PAL_:
PUSH IX
IN A,(RGADR)
PUSH AF
IN A,(PAGE3)
EX AF,AF'
LD A,50H
OUT (PAGE3),A
LD DE,0
LD IX,0C3F0H
SET_PAL_ZX1:
CALL GENERATE_PAL1
LD A,E
OUT (RGADR),A
LD (IX),L
LD (IX+1),B
LD (IX+2),C
LD (IX+3),H
INC E
JR NZ,SET_PAL_ZX1
LD BC,4
ADD IX,BC
INC D
LD A,D
CP 04
JR NZ,SET_PAL_ZX1
EX AF,AF'
OUT (PAGE3),A
POP AF
OUT (RGADR),A
POP IX
RET
; £¥­¥à æ¨ï ᯥªâà㬮¢áª®© ¯ «¨âàë.
GENERATE_PAL1: ; E -  âਡãâ, D - ­®¬¥à PAL
; ; ‚›•Ž„ - C - BLUE, L - RED, B - GREEN, H - INTENSITY
;
XOR A
LD C,A
LD B,A
LD L,A
; BIT 7,D
; JR NZ,GENERATE_IBM
BIT 1,D
JR NZ,GEM_PAL_FLH
GEM_PAL_NOF:
BIT 0,D
JR Z,GEN_PAL_PAP
GEN_PAL_INK:
LD A,CL0
BIT 6,E
JR Z,GEN_PAL_NOI1
LD A,CL1
GEN_PAL_NOI1:
BIT 0,E ; BLUE
JR Z,GEN_PP_NO1
LD C,A
GEN_PP_NO1:
BIT 1,E ; RED
JR Z,GEN_PP_NO2
LD L,A
GEN_PP_NO2:
BIT 2,E ; GREEN
JR Z,GEN_PP_NO3
LD B,A
GEN_PP_NO3:
JR GEN_PP_NO6
GEM_PAL_FLH:
BIT 7,E
JR Z,GEM_PAL_NOF
BIT 0,D
JR Z,GEN_PAL_INK
GEN_PAL_PAP:
LD A,CL0
BIT 6,E
JR Z,GEN_PAL_NOI2
LD A,CL1
GEN_PAL_NOI2:
BIT 3,E ; BLUE
JR Z,GEN_PP_NO4
LD C,A
GEN_PP_NO4:
BIT 4,E ; RED
JR Z,GEN_PP_NO5
LD L,A
GEN_PP_NO5:
BIT 5,E ; GREEN
JR Z,GEN_PP_NO6
LD B,A
GEN_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,GEN_IBM_NO_FLH
; BIT 1,D
; JR Z,GEN_IBM_PAPER
; GEN_IBM_NO_FLH:
; BIT 0,D
; JR Z,GEN_IBM_PAPER
; GEN_IBM_INK:
; GEN_NO_INTENS:
; LD A,0A8h
; GEN_INTENS:
; BIT 0,E ; BLUE
; JR Z,GEN_PPI_NO4
; LD C,A
; GEN_PPI_NO4:
; BIT 2,E ; RED
; JR Z,GEN_PPI_NO5
; LD L,A
; GEN_PPI_NO5:
; BIT 1,E ; GREEN
; JR Z,GEN_PPI_NO6
; LD B,A
; GEN_PPI_NO6:
; LD A,E
; AND 0Fh
; CP 6
; JR NZ,no_correct
; LD B,54h
; no_correct:
; BIT 3,E
; JR Z,GEN_PP_NO6
; LD A,54h
; ADD A,C
; LD C,A
; LD A,54h
; ADD A,B
; LD B,A
; LD A,54h
; ADD A,L
; LD L,A
; JR GEN_PP_NO6
; GEN_IBM_PAPER:
; LD A,0A8h
; BIT 4,E ; BLUE
; JR Z,GEN_PPI_NO4X
; LD C,A
; GEN_PPI_NO4X:
; BIT 6,E ; RED
; JR Z,GEN_PPI_NO5X
; LD L,A
; GEN_PPI_NO5X:
; BIT 5,E ; GREEN
; JR Z,GEN_PPI_NO6X
; LD B,A
; GEN_PPI_NO6X:
; LD A,E
; AND 070h
; CP 60h
; JR NZ,no_correct2
; LD B,54h
; no_correct2:
; JR GEN_PP_NO6
;****************************************
;****************************************
;****************************************
SET_PAL_GRAF: ; D - ­®¬¥à £à ä¨ç¥áª®© ¯ «¨âàë
PUSH IX
IN A,(RGADR)
PUSH AF
IN A,(PAGE3)
EX AF,AF'
LD A,50H
OUT (PAGE3),A
LD IX,0C3E0H
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 (PAGE3),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
;
;;*****************************************
SINC_DEF:
LD C,PAGE3
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
LD HL,(CONFIG_ALL)
OUT (C),B
LD DE,L_PENTAGON
AND A
SBC HL,DE
JR Z,PENT_SINC
LD IX,L_SCORPION
; AND A
; SBC HL,DE
; JR Z,SCOR_SINC
; ORIG_SINC:
; LD IX,L_ORIGINAL
; JR PROG_SCR
SCOR_SINC:
;LD IX,L_SCORPION
JR PROG_SCR
PENT_SINC:
LD IX,L_PENTAGON
JR PROG_SCR
FN_SINC:
AND A
JR Z,SINC_DEF
DEC A
LD IX,L_SCORPION
JR Z,PROG_SCR
DEC A
LD IX,L_PENTAGON
JR Z,PROG_SCR
; DEC A
; JR Z,ORIG_SINC
SCF
RET
PROG_SCR:
IN A,(PAGE3)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE3),A
EX AF,AF'
LD (COPY_PAGE3),A
IN A,(RGADR)
LD (COPY_RGADR),A
LD (CONFIG_ALL),IX
LD A,0
MM_LOOP7:
OUT (RGADR),A
EX AF,AF'
LD A,#50
OUT (PAGE3),A
LD HL,#C300
MM_LOOP6:
LD C,(IX)
MM_LOOP4:
LD E,(IX+1)
LD D,(IX+2)
MM_LOOP5:
LD A,(DE)
INC DE
AND A
JR Z,MM_EXIT_1
LD B,A
LD A,(DE)
INC DE
MM_LOOP3:
LD (HL),A
INC L
LD (HL),0
INC L
LD (HL),0
EX AF,AF'
INC A
OUT (RGADR),A
EX AF,AF'
LD (HL),0
DEC L
LD (HL),0
DEC L
LD (HL),A
EX AF,AF'
INC A
OUT (RGADR),A
EX AF,AF'
DJNZ MM_LOOP3
JR MM_LOOP5
MM_EXIT_1:
INC HL ; next line
INC HL
INC HL
INC HL
IN A,(RGADR)
AND 80H
OUT (RGADR),A
DEC C
JR NZ,MM_LOOP4
INC IX
INC IX
INC IX
LD A,(IX)
AND A
JR NZ,MM_LOOP6
LD A,SYS_PAGE
OUT (PAGE3),A
LD IX,(CONFIG_ALL)
EX AF,AF'
ADD A,80H
JR NC,MM_LOOP7
LD A,(COPY_RGADR)
OUT (RGADR),A
LD A,(COPY_PAGE3)
OUT (PAGE3),A
RET
;L_SCR: DB 41,38H,3,3CH,4,3CH,7,3CH,9,38H,0
;L_INT: DB 42,3CH,1,3DH,5,3CH,7,3CH,9,3CH,0
;L_INT2: DB 41,38H,1,3DH,6,3CH,7,3CH,9,38H,0
;L_BLN: DB 41,3CH,3,3CH,4,3CH,7,3CH,9,3CH,0
;L_SNC: DB 41,3CH,3,3CH,4,3CH,7,3CH,9,3CH,0
;L_RES: DB 41,38H,3,3EH,4,3EH,7,3EH,9,38H,0
L_SCR: DB 41,0F8H,3,0FCH,4,0FCH,7,0FCH,9,0F8H,0
L_INT: DB 40,0FCH,2,0FDH,6,0FCH,7,0FCH,9,0FCH,0
L_INT2: DB 41,0F8H,1,0FDH,6,0FCH,7,0FCH,9,0F8H,0
L_BLN: DB 41,0FCH,3,0FCH,4,0FCH,7,0FCH,9,0FCH,0
L_SNC: DB 41,0FCH,3,0FCH,4,0FCH,7,0FCH,9,0FCH,0
L_RES: DB 41,0F8H,3,0FEH,4,0FEH,7,0FEH,9,0F8H,0
L_PENTAGON:
DB 33
DW L_SCR
DB 1
; DW L_BLN
DW L_INT
DB 3
DW L_SNC
DB 1
DW L_BLN
DB 1
DW L_SCR
DB 1
DW L_RES
DB 0
L_SCORPION:
DB 31
DW L_SCR
DB 1
DW L_INT2
DB 1
DW L_SCR
DB 1
DW L_SNC
DB 3
DW L_SNC
DB 1
DW L_BLN
DB 2
DW L_RES
DB 0
; L_ORIGINAL:
; DB 33
; DW L_SCR
; DB 1
; DW L_SNC
; DB 1
; DW L_INT
; DB 2
; DW L_SNC
; DB 1
; DW L_BLN
; DB 1
; DW L_SCR
; DB 1
; DW L_RES
DB 0
FLEX_END: