┌────────────────────────────────────────┐ │░░░░░░░░░░░ Программирование ░░░░░░░░░░░│ └────────────────────────────────────────┘ Драйвер памяти (C) Pawel/RS Этот драйвер является переработкой, опубликованного в ZX-FORMAT'е 5.Теперь на- личие 128-й памяти определяется не по ПЗУ, в процессе теста не портятся байты в бан- ках, таблица используемых банков формиру- ется специальной подпрограммкой, что зна- чительно сокращает и объем ассемблерного текста и объектного кода. Кроме этого дра- йвер реорганизован с целью выделить блоки ненужные после проведения теста памяти. После теста количество доступных банков хранится в переменной PAGE, а тип компью- тера в TYPE, для расшифровки ее комбинации битов, вам придется почитать ZX-FORMAT. Переключение логических банков осуществля- ется подпрограммой ONPAGE. Данный драйвер успешно был использован в REAL COMMANDERе, а также в более древней программке, потре- ковом копировщике REALCOPY. Его надежность проверена многолетней эксплуатацией этих программ. ;Memory driver ;(C) Pawel/RS ;(C) Creator ;Перед работой с драйвером вызовите подп- ;рограмму START, для инициализации и опре- ;деления свободной памяти. ;Подключение логического банка, номер в A, ;нумерация начинается с нуля. ONPAGE PUSH BC PUSH HL LD C,A LD B,0 LD HL,TABL_PG ADD HL,BC LD A,(HL) POP HL POP BC EX_RAM DI PUSH HL PUSH AF PUSH BC LD HL,TYPE BIT 1,(HL) JR NZ,ZS256 BIT 2,(HL) JR NZ,PROFI BIT 3,(HL) JR NZ,TURBO_2 BIT 4,(HL) JR NZ,ATM1 BIT 0,(HL) JR NZ,SPECCY BIT 7,(HL) JR NZ,SPECCY JR TDK TURBO_2 PUSH AF PUSH IX AND 24 CPL LD BC,#FFF7 CALL OUTC_A POP IX POP AF JP SPECCY ATM1 LD BC,#FDFD PUSH AF RRCA RRCA RRCA AND 3 JR HOME PROFI LD BC,#DFFD PUSH AF RRCA RRCA RRCA AND 7 JR HOME ZS256 PUSH AF LD B,A AND %00001000 RLCA LD C,A LD A,B AND %00110000 RLCA RLCA ADD A,C LD BC,#1FFD HOME OUT (C),A NOP POP AF SPECCY LD B,A AND 24 RLCA RLCA RLCA LD C,A LD A,B AND 7 ADD A,C OR 16 LD BC,#7FFD OUT (C),A NOP TDK POP BC POP AF POP HL RET OUTC_A LD IX,10835 PUSH IX JP 15663 ;Инициализация и тест памяти, вызывается ;в начале работы, после чего память зани- ;маемую программой ниже, можно использо- ;вать по своему усмотрению. START CALL TEST LD A,(8) CP #2A ;если SCORPION, то RET Z ;удалить из списка LD C,8 ;8-й банк, исполь- JP DEBUG ;зующийся монитором. TEST CALL TABINIT XOR A LD (TYPE),A INC A LD (PAGE),A DI LD A,(#08) CP #C3 JR NZ,ITURBO LD HL,TYPE SET 7,(HL) ITURBO LD HL,(1111) LD BC,#FFF7 LD A,%00011111 CALL OUTC_A LD DE,(#C000+1111) AND A SBC HL,DE LD BC,#FFF7 LD A,255 CALL OUTC_A JR NZ,IDFFD LD HL,TYPE SET 3,(HL) JR I7FFD MM_ATM DB #DB,#1F,#C9 IDFFD LD HL,#80 LD DE,#1000 LD BC,#DFFD OUT (C),D NOP LD A,(HL) INC (HL) CP (HL) LD (HL),A OUT (C),E NOP JR Z,I1FFD LD HL,TYPE SET 2,(HL) OUT (C),D NOP LD B,#7F OUT (C),D NOP LD B,#DF OUT (C),E NOP JR I7FFD I1FFD LD DE,#1110 LD B,#1F OUT (C),D NOP LD A,(HL) INC (HL) CP (HL) LD (HL),A OUT (C),E NOP JR Z,IFDFD XOR A OUT (C),A LD HL,TYPE SET 1,(HL) JP I7FFD IFDFD LD B,C LD HL,#FFFF OUT (C),D NOP LD B,#7F OUT (C),D NOP LD A,(HL) LD (RBT2+1),A LD (HL),D LD B,C OUT (C),E NOP LD B,#7F OUT (C),D NOP LD A,(HL) LD (RBT+1),A LD (HL),E LD B,C OUT (C),D NOP LD B,#7F OUT (C),D NOP LD A,(HL) CP D JR NZ,I7FFD LD HL,TYPE SET 4,(HL) I7FFD LD HL,#FFFF LD B,#7F OUT (C),E NOP LD A,(HL) LD (RBT0+1),A LD (HL),E OUT (C),D NOP LD (HL),D OUT (C),E NOP LD A,D CP (HL) JR Z,SIZED LD HL,TYPE SET 0,(HL) SIZED LD HL,#FFFF RBT0 LD (HL),0 LD B,C OUT (C),E NOP LD B,#7F OUT (C),D NOP RBT LD (HL),0 LD B,C OUT (C),D NOP LD B,#7F OUT (C),D NOP RBT2 LD (HL),0 CALL VIRT LD A,(PAGE) CP 8 JR C,ENDING LD A,(TYPE) CP 1 JR NZ,ENDING LD HL,TYPE SET 5,(HL) ENDING XOR A CALL EX_RAM EI RET VIRT LD IX,#C000 LD HL,VTABL+63 LD B,64 V_R11 LD A,B DEC A CALL EX_RAM LD C,(IX+0) LD (HL),C LD (IX+0),A DEC HL DJNZ V_R11 PUSH AF LD A,LENTABL-1 LD (PAGE),A POP AF LD DE,TABL_PG V_R20 LD A,(DE) CP #FF JR Z,V_R30 CALL EX_RAM CP (IX+0) JR Z,V_R22 PUSH DE LD HL,TABL_PG+LENTABL AND A SBC HL,DE PUSH HL POP BC PUSH DE POP HL INC HL LDIR PUSH HL LD HL,PAGE DEC (HL) POP HL POP DE DEC DE V_R22 INC DE JR V_R20 V_R30 LD B,64 LD HL,VTABL V_R31 LD A,64 SUB B CALL EX_RAM LD A,(HL) LD (IX+0),A INC HL DJNZ V_R31 RET ;удаление из таблицы банка с номером в ;регистре C, вызывать сразу после теста. DEBUG PUSH DE POP HL NO_PG1 DEC DE LD A,(DE) CP #FF JR Z,NO_PG2 CP C JR NZ,NO_PG1 SBC HL,DE PUSH HL POP BC PUSH DE POP HL INC HL LDIR PUSH HL LD HL,PAGE DEC (HL) POP HL DEC HL DEC HL NO_PG2 EX DE,HL RET ;Создание таблицы банков, с исключением ;не использующихся, в данном варианте ;удаляются 2-й и 5-й банки. TABINIT LD HL,TABL_PG-1 LD (HL),255 INC HL XOR A TABI1 LD (HL),A INC A CP 2 JR Z,TABI1A CP 5 JR Z,TABI1A JR TABI2 TABI1A INC A TABI2 INC HL CP LENTABL+1 JR NZ,TABI1 LD (HL),255 LD HL,VTABL PUSH HL POP DE INC DE LD BC,63 LD (HL),0 LDIR RET LENTABL EQU 62 ;максимальное количес- ;тво использующихся ;банков. DB 0 ;код начала таблицы TABL_PG DS LENTABL+1 TYPE DB 0 ;тип компьютера PAGE DB 0 ;общее число доступных ;банков VTABL EQU 23296 ;таблица банков, ис- ;пользуется только ;при тесте, 64 байта ----------- 16.09.98 ''''''''''''''''''''''''''''''''''''''''''