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: