Echo #05
31 августа 1998 |
|
Programming - Driver memory.
Programming Driver Memory (C) Pawel / RS This driver is processing, published in the ZX-FORMAT'e 5.Teper presence of 128-th memory is not determined by ROM during the test did not spoil the bytes in the banks, the table used by banks formed a special podprogrammkoy, which significantly reduces the amount of assembly and text and object code. In addition, the driver was reorganized in order to allocate blocks unnecessary after the memory test. After the test, the number of available banks stored in the variable PAGE, and the type of computer in TYPE, to decipher its combination bits, you have to read the ZX-FORMAT. Switching logic banks implementing subprogrammes ONPAGE. This driver been successfully used in REAL COMMANDERe, as well as in the older program that potrekovaya copiers REALCOPY. Its reliability tested long-term use of these programs. ; Memory driver ; (C) Pawel / RS ; (C) Creator , Before working with a driver call signature; rogrammu START, for initialization and the definition, the division of free memory. ; Connection logical bank number of A, , The numbering starts with zero. 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 ; Initialization and test of memory, called , In the beginning, after which occupy memory; May program below can be used, vat, at its discretion. START CALL TEST LD A, (8) CP # 2A; if SCORPION, then RET Z; remove from list LD C, 8, 8-th bank, using JP DEBUG; the formed monitor. 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 ; Removal from the table of the bank with the number in ; Register C, is called immediately after the test. 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 ; Create a table of banks, with the exception of ; Not used in this version ; Removed the 2 nd and 5 th banks. 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; maximum koliches , Employs a ; Banks. DB 0; start code table TABL_PG DS LENTABL +1 TYPE DB 0; type of computer PAGE DB 0; total number of available ; Banks VTABL EQU 23296; table banks used , Uses only ; Under test 64 bytes ---------- 16.09.98 ''''''''''''''''''''''''''''''''''''''''''
Other articles:
Similar articles:
В этот день... 21 November