mirror of
https://github.com/Tolik-Trek/ZX-SP-ROMs.git
synced 2026-06-15 09:21:45 +03:00
680 lines
8.6 KiB
NASM
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:
|