DCP_INIT: EXX LD HL,ALTERA LD DE,0C000H DCP_L0: LD B,8 LD C,(HL) INC HL DCP_L1: RLC C JR C,DCP_L2 LD A,0 LD (DE),A INC DE DJNZ DCP_L1 JR DCP_L3 DCP_L2: LD A,(HL) INC HL LD (DE),A INC DE DJNZ DCP_L1 DCP_L3: inc d dec d JR NZ,DCP_L0 IN A,(PAGE3) EXX JP (HL) ; RET ;*********************************** ;DCP_INIT_new: ; DB 0DDH ; LD C,L ;; LD C,A ; DB 0DDH ; LD B,H ;; LD B,A ; DB 0FDH ; LD E,L ;; LD E,A ; DB 0FDH ; LD D,H ;; LD D,A ; EXX ; ; LD HL,0C000h ; LD DE,0C001h ; LD BC,3FFFH ; LD (HL),L ; LDIR ; ; LD IY,DCP_DATA_NEW ; LD IX,DCP_INN_RET ; ;DCP_INN_LOOP: ; LD L,(IY) ; LD H,(IY+1) ; LD E,(IY+2) ; LD D,(IY+3) ; LD B,(IY+4) ; JR DCP_FN0M ; ;DCP_INN_RET: ; LD BC,5 ; ADD IY,BC ; LD A,(IY+2) ; OR (IY+3) ; JR NZ,DCP_INN_LOOP ; ; EXX ;; LD A,C ; DB 0DDH ; LD L,C ;; LD B,A ; DB 0DDH ; LD H,B ;; LD A,E ; DB 0FDH ; LD L,E ;; LD A,D ; DB 0FDH ; LD H,D ; JP (HL) ;; RET ; ; ; Функция дешифратора портов. ; HL - адрес ; DE - маска - 0 изменяемые биты, 1 неизменяемые ; B - порт DCP_FN0M: LD A,L AND E LD L,A LD A,H AND D ; AND 3FH OR 0C0H LD H,A LD A,D OR 0C0H LD D,A DCP_FN0_L1: LD (HL),B LD A,L ; замаскировать неизменяемые биты 1-ми OR E ; для прохождения переноса INC A ; увеличить адрес JR Z,DCP_FN0_L2 ; возник перенос OR E XOR E ; обнулить неизменяемые биты LD C,A ; изменяемая часть LD A,L AND E ; выделить неизменяемую OR C LD L,A ; добавить изменяемую часть JR DCP_FN0_L1 ; цикл DCP_FN0_L2: ; A = 0 ; OR E ; XOR E ; LD C,A LD A,L ; забить изменяемые биты нулями AND E ; OR C LD L,A LD A,H ; замаскировать неизменяемые биты 1-ми OR D ; для прохождения переноса INC A ; увеличить адрес JR Z,DCP_FN0_L3 OR D XOR D LD C,A ; изменяемая часть LD A,H AND D ; выделить неизменяемую OR C LD H,A ; добавить изменяемую часть JR DCP_FN0_L1 DCP_FN0_L3: JP (IX) ;DCP_DATA_NEW: ;; DATA FOR DCP ;; CCED/AAAAAAAAA DATA ;; NN1OW116517210 ;; FF2SR54 3 ;; 108 ;; ;; Border ....0..11.1110 0C2H ; DW 00000001101110B ; DW 00001001101111B ; DB 0C2H ;; Keyboard ....1..11.1110 040H ; DW 00001001101110B ; DW 00001001101111B ; DB 040H ;; Kempston ...11..00.0111 015H ; DW 00011000000111B ; DW 00011001101111B ; DB 015H ;; ;; DRQ/INTRQ ...01..11.1111 015H ; DW 00001001101111B ; DW 00011001101111B ; DB 015H ;; WR_PDOS ...00..11.1111 014H ; DW 00000001101111B ; DW 00011001101111B ; DB 014H ;; CS_WG93_1F ...0...00.0111 010H ; DW 00000000000111B ; DW 00010001101111B ; DB 010H ;; CS_WG93_3F ...0...01.0111 011H ; DW 00000000100111B ; DW 00010001101111B ; DB 011H ;; CS_WG93_5F ...0...10.0111 012H ; DW 00000001000111B ; DW 00010001101111B ; DB 012H ;; CS_WG93_7F ...0...11.0111 013H ; DW 00000001100111B ; DW 00010001101111B ; DB 013H ;; ;; CNF_PORT ........1.0100 0C6H ; DW 00000000100100B ; DW 00000000101111B ; DB 0C6H ;; ;; SOUND_BFFD_WR ....0101111101 091H ; DW 00000101111101B ; DW 00001111111111B ; DB 091H ;; SOUND_FFFD_WR ....0111111101 090H ; DW 00000111111101B ; DW 00001111111111B ; DB 090H ;; SOUND_FFFD_RD ....11.1111101 000H ; DW 00001101111101B ; DW 00001101111111B ; DB 0 ;; ;; COVOX_4F ...10.....0111 088H ; DW 00010000000111B ; DW 00011000001111B ; DB 088H ;; COVOX_FB ...10..11.1011 088H ; DW 00010001101011B ; DW 00011001101111B ; DB 088H ;; CASH__FB ...11..11..011 088H ; DW 00011001100011B ; DW 00011001100111B ; DB 088H ;; CASH__80 ...11..00.1000 088H ; DW 00011000001000B ; DW 00011001101111B ; DW 088H ;; ;; P_XTR ...1...01.1.11 032H ; DW 00010000101011B ; DW 00010001101011B ; DB 032H ;; ;; SC_256_1FFDH 0....001101101 0C0H ; DW 00000001101101B ; DW 10000111111111B ; DB 0C0H ;; ZX_128_7FFDH 0.0..0111.1101 0C1H ; DW 00000011101101B ; DW 10100111101111B ; DB 0C1H ;; ZX_128_7FFDH 0..0.0111.1101 0C1H ; DW 00000011101101B ; DW 10010111101111B ; DB 0C1H ; ;; ZX_128_7FFDH 100..0.11.1101 0C1H ; DW 10000001101101B ; DW 11100101101111B ; DB 0C1H ;; ZX_128_7FFDH 10.0.0.11.1101 0C1H ; DW 10000001101101B ; DW 11010101101111B ; DB 0C1H ; ;; SC_256_1FFDH 11...001101101 0C0H ; DW 11000001101101B ; DW 11000111111111B ; DB 0C0H ;; ZX_128_7FFDH 110..0111.1101 0C1H ; DW 11000011101101B ; DW 11100111101111B ; DB 0C1H ;; ZX_128_7FFDH 11.0.0111.1101 0C1H ; DW 11000011101101B ; DW 11010111101111B ; DB 0C1H ;; ;; HDD_DATA ...0...10.0000 020H ; DW 00000001000000B ; DW 00010001101111B ; DB 020H ;; HDD_1F1 ...0.0010.0001 021H ; DW 00000001000001B ; DW 00010111101111B ; DB 021H ;; HDD_1F2 ...0.0010.0010 022H ; DW 00000001000010B ; DW 00010111101111B ; DB 022H ;; HDD_1F3 ...0.0010.0011 023H ; DW 00000001000011B ; DW 00010111101111B ; DB 023H ;; HDD_1F4 ...0.0010.0100 024H ; DW 00000001000100B ; DW 00010111101111B ; DB 024H ;; HDD_1F5 ...0.0010.0101 025H ; DW 00000001000101B ; DW 00010111101111B ; DB 025H ;; HDD_1F6 ...0.0110.0010 026H ; DW 00000011000010B ; DW 00010111101111B ; DB 026H ;; HDD_1F7 ...0.0110.0011 027H ; DW 00000011000011B ; DW 00010111101111B ; DB 027H ;; HDD_3F6 ...0.0110.0100 028H ; DW 00000011000100B ; DW 00010111101111B ; DB 028H ;; HDD_3F7 ...0.0110.0101 029H ; DW 00000011000101B ; DW 00010111101111B ; DB 029H ;; ;; HDD_DATA 00.....10.0000 020H ; DW 00000001000000B ; DW 11000001101111B ; DB 020H ;; HDD_1F1 00...0010.0001 021H ; DW 00000001000001B ; DW 11000111101111B ; DB 021H ;; HDD_1F2 00...0010.0010 022H ; DW 00000001000010B ; DW 11000111101111B ; DB 022H ;; HDD_1F3 00...0010.0011 023H ; DW 00000001000011B ; DW 11000111101111B ; DB 023H ;; HDD_1F4 00...0010.0100 024H ; DW 00000001000100B ; DW 11000111101111B ; DB 024H ;; HDD_1F5 00...0010.0101 025H ; DW 00000001000101B ; DW 11000111101111B ; DB 025H ;; HDD_1F6 00...0110.0010 026H ; DW 00000011000010B ; DW 11000111101111B ; DB 026H ;; HDD_1F7 00...0110.0011 027H ; DW 00000011000011B ; DW 11000111101111B ; DB 027H ;; HDD_3F6 00...0110.0100 028H ; DW 00000011000100B ; DW 11000111101111B ; DB 028H ;; HDD_3F7 00...0110.0101 029H ; DW 00000011000101B ; DW 11000111101111B ; DB 029H ;; ;; PAGE0 ...0...00.1010 0E8H ; DW 00000000001010B ; DW 00010001101111B ; DB 0E8H ;; PAGE1 ...0...01.1010 0E9H ; DW 00000000101010B ; DW 00010001101111B ; DB 0E9H ;; PAGE2 ...0...10.1010 0EAH ; DW 00000001001010B ; DW 00010001101111B ; DB 0EAH ;; PAGE3 ...0...11.1010 0F0H ; DW 00000001101010B ; DW 00010001101111B ; DB 0F0H ;; ;; PAGE0 00.....00.1010 0E8H ; DW 00000000001010B ; DW 11000001101111B ; DB 0E8H ;; PAGE1 00.....01.1010 0E9H ; DW 00000000101010B ; DW 11000001101111B ; DB 0E9H ;; PAGE2 00.....10.1010 0EAH ; DW 00000001001010B ; DW 11000001101111B ; DB 0EAH ;; PAGE3 00.....11.1010 0F0H ; DW 00000001101010B ; DW 11000001101111B ; DB 0F0H ;; ;; Y_PORT(RGADR) ...0...00.1001 0C4H ; DW 00000000001001B ; DW 00010001101111B ; DB 0C4H ;; RGMOD ...0...10.1001 0C5H ; DW 00000001001001B ; DW 00010001101111B ; DB 0C5H ;; ;; Y_PORT(RGADR) 00.....00.1001 0C4H ; DW 00000000001001B ; DW 11000001101111B ; DB 0C4H ;; RGMOD 00.....10.1001 0C5H ; DW 00000001001001B ; DW 11000001101111B ; DB 0C5H ;; ;; ISA_REG ...00100101101 01BH ; DW 00000100101101B ; DW 00011111111111B ; DB 01BH ;; CMOS_DWR ...001.0111101 01EH ; DW 00000100111101B ; DW 00011101111111B ; DB 01EH ;; CMOS_AWR ...00110101101 01DH ; DW 00000110101101B ; DW 00011111111111B ; DB 01DH ;; CMOS_DRD ...011.0111101 01CH ; DW 00001100111101B ; DW 00011101111111B ; DB 01CH ;; ;; ISA_REG 00..0100101101 01BH ; DW 00000100101101B ; DW 11001111111111B ; DB 01BH ;; CMOS_DWR 00..01.0111101 01EH ; DW 00000100111101B ; DW 11001101111111B ; DB 01EH ;; CMOS_AWR 00..0110101101 01DH ; DW 00000110101101B ; DW 11001111111111B ; DB 01DH ;; CMOS_DRD 00..11.0111101 01CH ; DW 00001100111101B ; DW 11001101111111B ; DB 01CH ; ; DW 0,0,0 ; DCP END MARKER ; ; ; ; ;