Echo #06
30 июня 2000

Programming - The structure and organization of the ramdisk in Real commander,.

<b>Programming</b> - The structure and organization of the ramdisk in Real commander,.
   Structure and organization ramdisk

          Real commander, in


(C) Pawel / RS


   Starting with version 1.8 in the Real commander,
the opportunity to work with the resident
RamDisk'om, this article is intended for developers wishing to 
make a software system to support its programs. Ram Disk in RC 
is different from the existing standard for Honey Commander'u 
greater reliability (system path is stored in the last bank) 
and ease of use (There are no tables of banks in the system 
sector). 

   Format ramdisk is no different from
conventional TR-DOS. In the latest available bank kept the 
first 4 tracks, the following 4 tracks are stored by the bank 
below, and etc. To determine whether the memory Ram

Disk'a checked identification code
Tr-Dos at # C0E7 last pot
if he is 16, then RamDisk present.
After this it is necessary to determine the number of banks 
used for this purpose, standard information on the Tr-Dos 
diskette to the address # C0E1 need to read two bytes of the 
parameters of the first free track / sector. The parameter path 
is multiplied by 16 and add the parameter sector. The result 
obtained with the parameter add free sectors at # C0E5 and 
divided into 64, as a result we get the number of employees of 
banks. Below is the procedure for determine the presence and 
quantity of RamDisk'a used by his bank.



TESTRD LD A, (PAGE); all banks

        CP 7

        RET C; out if 128k

        DEC A

        CALL ONPAGE; choice posl.banka

        LD A, (# C8E7)

        CP 1916

        RET NZ; exit if not found

        LD HL, (# C8E1)

        LD DE, (# C8E5)

        LD A, H

        LD H, 0

        ADD HL, DE

        EX DE, HL

        CALL RLENF9

        LD B, 6

        XOR A
TESTRD2 RR H

        RR L

        RRA

        DJNZ TESTRD2

        AND A

        RET NZ

        LD A, (PAGE)

        SUB L

        LD (RPAGE), A
; In RPAGE write what is available
; Banks open RamDisk'om

        RET

Multiply. A by 16 and add. DE.
RLENF9 RLCA: RLCA

        RLCA: RLCA

        LD L, A

        AND 15

        LD H, A

        LD A, L

        AND% 11110000

        LD L, A

        ADD HL, DE

        RET


   There is certainly a caveat, if the RC limit memory use 
256kb and open resident RamDisk, then this specific protsedurka 
did not identify because he will not start with the last memory 
bank. In most cases, the restriction memory in the RC need for 
hardware RamDisk ' s, users are hardly become

use the software.


   Now we give an example of how a disk
driver to organize work with RamDisk'om.
In this example uses a simplified treatment of errors # 3D13 
without request RIA (Retry, Abort, Ignore), in such a 
situation, the driver will simply return an error code. 

TRDOS DEC C

        JR NZ, TRD0

        PUSH HL

        CP 4

        LD HL, # 3D13

        JR NZ, TRDS

        PUSH AF

        LD A, (PAGE)

        LD C, A

        LD A, (RPAGE)

        CP C

        JR Z, TRD1; error

                       ; RamDisk is not open

        POP AF

        LD C, 0

        LD HL, RW
TRDS LD (ERR-2), HL

        POP HL
TRD0 INC C

        PUSH HL

        LD HL, 0

        LD (23823), HL

        LD HL, (23613)

        LD (ERR +1), HL

        LD HL, ERR

        EX (SP), HL

        LD (23613), SP

        EX AF, AF '

        XOR A

        LD (23570), A

        EX AF, AF '

        JP 15635
ERR LD HL, 0

        LD (23613), HL

        LD A, 6

        LD (23570), A

        LD A, (23823)

        AND A

        RET Z
TRD1; an error message

        RET



   Now when you select the drive "E" through
this driver instead of # 3D13 procedure will be connected RW, 
providing read / recording RamDisk'e. It should be noted that in

your program should be stored in TKARD
Number of current logical bank.


; RAM DISK: read / write sector
; HL-address DE-dor/sek, C = 5 Thu, = 6 listings.
RW DEC C

        JR NZ, RW0A

        LD A, 4

        LD (23798), A

        RET
RW0A INC C
RW0 LD (23796), DE

        LD A, B

        AND A

        JR Z, RW0C

        PUSH BC

        PUSH HL

        CALL RW0S

        EX DE, HL

        POP HL

        POP BC

        AND A

        JR NZ, RW0B

        INC H

        DEC B

        JR RW0
RW0C EI

        RET
RW0B; Issue posts

        , "The track does not exist"

        POP HL

        LD A, 20

        RET

RW0S LD A, C

        PUSH AF

        LD A, (PAGE)

        DEC A

        LD C, A

        LD A, D
RW1 SUB 4

        JR C, RW2

        DEC C

        LD B, A

        LD A, (RPAGE)

        DEC A

        CP C

        LD A, B

        JR NZ, RW1

        POP AF

        LD A, 20

        RET
RW2 ADD A, 4

        RLCA: RLCA: RLCA: RLCA

        ADD A, E

        ADD A, # C0

        LD E, 0

        LD D, A

        POP AF

        CP 5

        JP Z, RDM

        JP WRM

RW4 LD HL, (23796)

        INC L

        LD A, L

        CP 1916

        JR NZ, RW5

        INC H

        LD L, 0
RW5 LD (23796), HL

        XOR A

        RET

Reading from a bank in C at a DE, and
entry into the current bank address in HL.
RDM PUSH HL

        PUSH DE

        LD A, C

        CALL ONPAGE

        POP HL

        LD DE, RSCT

        LD BC, 256

        PUSH DE

        PUSH BC

        LDIR

        LD A, (TKARD)

        CALL ONPAGE

        POP BC

        POP HL

        POP DE

        LDIR

        JP RW4

reading from the current bank at the HL
and write to the bank C at a DE.
WRM PUSH DE

        LD A, C

        LD DE, RSCT

        LD BC, 256

        PUSH DE

        PUSH BC

        LDIR

        CALL ONPAGE

        POP BC

        POP HL

        POP DE

        LDIR

        LD A, (TKARD)

        CALL ONPAGE

        JP RW4


   Oh, and for the complete set of us now
only the driver memory. Published
below the driver differs from the published
at Echo 5 Improve memory tests understands more types of 
extensions. To test the configuration of your computer, call 
subroutine START, it initializes the carry over TYPE (type of 
computer) and PAGE (the number of available banks, First Bank - 
0 Last TYPE-1). After testing the configuration, all that comes 
after the START You can overwrite. Now the above procedure 
TESTRD can determine the presence of memory ramdisk. To test 
whether the system RamDisk compare variables

PAGE and RPAGE, if they are equal then the ramdisk
No, otherwise RPAGE points to the first bank
occupied by RamDisk, all the banks below are available for use 
by the program. 


logical choice of the bank of the register 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
choice of physical bank of the register A
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 # 38

        CPL

        LD BC, # FFF7

        CALL OUTC_A

        POP IX

        POP AF

        JP SPECCY

ATM1 LD BC, # FDFD

        PUSH AF

        RRCA

        RRCA

        RRCA

        AND 7

        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

        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


; RSCT - a temporary 64-byte buffer for
; Table banks are also used
; Ramdisk driver (256 bytes).

RSCT EQU 23296

LENTABL EQU 62; maks.kolich.bankov

        DB 0
TABL_PG DS LENTABL +1

TYPE DB 0; type of computer
PAGE DB 0; all available banks

variables RPAGE and TKARD reserved
for Ram Disk'a
RPAGE DB 0; all available banks

                  ; In a system with Ram Disk'om
TKARD DB 0; Current Bank


START CALL TEST

        LD A, (8)

        CP # 2A

        JR Z, START1

        LD C, 8; on Scorpion'e succeeded
        CALL DEBUG; us to the 8 th bank
variable initialization Ram Disk'a
START1 LD A, (PAGE)

        LD (RPAGE), A

        RET

testing the computer's configuration
TEST CALL TABINIT

        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 DE, # 0007

        LD BC, # DFFD

        CALL TSTB

        JR NZ, I1FFD

        LD HL, TYPE

        SET 2, (HL)

        JR I7FFD
I1FFD LD DE, # 0010

        LD B, # 1F

        CALL TSTB

        JR NZ, IFDFD

        LD HL, TYPE

        SET 1, (HL)

        JR I7FFD
IFDFD LD B, C

        LD D, # 11

        CALL TSTB

        JR NZ, I7FFD

        LD HL, TYPE

        SET 4, (HL)
I7FFD LD B, # 7F

        CALL TSTB

        JR NZ, SIZED

        LD HL, TYPE

        SET 0, (HL)
SIZED CALL VIRT

        LD A, (PAGE)

        CP 8

        JR C, ENDING

        LD HL, TYPE

        LD A, (HL)

        DEC A

        JR NZ, ENDING

        SET 5, (HL)
ENDING XOR A

        CALL EX_RAM

        EI

        RET

TSTB LD IX, # FFFF

        OUT (C), E

        CALL TSTB1

        LD L, (IX)

        LD (IX), E

        OUT (C), D

        CALL TSTB1

        LD H, (IX)

        LD (IX), D

        OUT (C), E

        CALL TSTB1

        LD A, (IX)

        CP E

        LD (IX), L

        OUT (C), D

        PUSH AF

        CALL TSTB1

        POP AF

        LD (IX), H

        RET

TSTB1 LD A, B

        CP # 7F

        RET Z

        PUSH BC

        LD B, # 7F

        LD A, # 10

        OUT (C), A

        POP BC

        RET

VIRT LD IX, # C000

        LD HL, RSCT +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, RSCT
V_R31 LD A, 64

        SUB B

        CALL EX_RAM

        LD A, (HL)

        LD (IX +0), A

        INC HL

        DJNZ V_R31

        RET

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

initialization table banks are excluded
Banks 2,5.
TABINIT LD HL, TABL_PG-1

        LD (HL), 255

        INC HL

        XOR A
TABI1 LD (HL), A
TABI2 INC A

        CP 2

        JR Z, TABI2

        CP 5

        JR Z, TABI2

        INC HL

        CP LENTABL +1

        JR NZ, TABI1

        LD (HL), 255

        LD HL, RSCT

        PUSH HL

        POP DE

        INC DE

        LD BC, 63

        LD (HL), B

        LDIR

        INC B

        LD (TYPE), BC

        RET







Other articles:

Entry - a one-year break in production of newspapers.

Review Warez'a - Extreme's Tracker v2.10, Universal Player v1.2, HYPERION v1.0, Z-Player v3.0 for GS, Quick Screen Viewer, BestView v2.9, Small Hrust Unpacker v2.0, Fm.COP v.3.1, All Disks Copier, Maxs Copier, HD-KIT, Real Commander v1.9, Direct Commander v3.04, E-mage WorkStation v1.0, System test v4.30 , Lara Croft Mail Editor, S-Terminal, Storm Turbo Assembler, Sprite Editor, Text Print.

Game Review - The Cezar, the 8 th Division, Clickmania, 4x4 Puzzle, Xixit, Tower Pod.

Iron - Programming a sound card for the ZX Spectrum: Ultra Sound Card (DMA).

Iron - The scheme of the analog part of the sound card DMA Ultrasound Card.

Iron - The method debug soundcard DMA Ultrasound Card.

Iron - direct memory access controller sound card DMA Ultrasound Card.

Iron - Further development of the controller for the drive to connect 4 drives.

Programming - The structure and organization of the ramdisk in Real commander,.

Letters - a letter from an ordinary user ZX Spectrum.

Authors - The authors gyzety.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Similar articles:
SOSG - That is the legendary kingdom solyushenov!
HARD and SOFT - Scorpion, IS-Dos, Winchester ...
Debut - "How to start a game?"

В этот день...   21 November