ZX-Forum №3 1995 г.

Читатель-читателю - нестандартная загрузка.


Нестандартная загрузка

© Павел Старков, г. Красноярск, 1995.

В 2Х-РЕВЮ-94, № 6 была напечатана статья о нестандартной загрузке. В дополнение к ней я решил выслать Вам две процедуры. Первая - загружает рисунок последовательно, линия за линией, а затем загружаются атрибуты, но не как обычно, сверху вниз, а вертикальными столбцами слева направо. Процедуры построены с использованием подпрограммы ПЗУ с точкой входа #05A9.

Замечу, что предварительно закодированный экран имеет длину такую же, как и обычный стандартный экран - 6912 байт.

1

ORG

50000

2

ENT

$

3

LD

IX,16384

4

LD

DE,32

5

XOR

A

6

SUB

1

78

EX DI

AF, AF'

9

PUSH

IX

10

CALL

#0562

11

L1

POP

IX

12

DEFB

#DD

13

INC

H

14

DEFB

#DD

15

LD

A, H

16

AND

7

17

JR

NZ, P1

18

DEFB

#DD

19

LD

A, L

20

ADD

A, 32

21

DEFB

#DD

22

LD

L, A

23

JR

C, P1

24

DEFB

#DD

25

LD

A, H

26

SUB

8

27

DEFB

#DD

28

LD

H, A

29

P1

LD

DE,32

30

PUSH

IX

31

CALL

#05A9

32

DEC

E

33

INC

E

34

JR

NZ,ERR

35

DEFB

#DD

36

LD

A, H

37

CP

88

38

JR

C, L1

39

POP

AF

40

LD

B, 32

41

M2

PUSH

BC

42

PUSH

IX

43

LD

B, 24

44

M3

PUSH

BC

45

INC

DE

46

CALL

#05A9

47

LD

BC, 31

48

ADD

IX, BC

49

POP

BC

50

DJNZ

M3

51

POP

IX

52

INC

IX

53

POP

BC

54

DJNZ

M2

55

SCF

56

JP

#053F

57

ERR

POP

IX

58

OR

A

59

JP

#053F

При завершении процедуры загрузки флаг С будет установлен, если загрузка прошла успешно, или сброшен, если была зафиксирована ошибка.

Длина процедуры =

97 байтов:

C350

DD

21

00

40

11

20

00

AF

31

C358

D6

01

08

F3

DD

E5

CD

62

DE

C360

05

DD

E1

DD

24

DD

7C

E6

26

C368

07

20

0E

DD

7D

C6

20

DD

7D

C370

6F

38

06

DD

7C

D6

08

DD

F4

C378

67

11

20

00

DD

E5

CD

A9

0B

C380

05

1D

1C

20

26

DD

7C

FE

1E

C388

58

38

D6

F1

06

20

C5

DD

6A

C390

E5

06

18

C5

13

CD

A9

05

A9

C398

01

1F

00

DD

09

C1

10

F3

25

C3A0

DD

E1

DD

23

C1

10

E7

37

10

C3A8

C3

3F

05

DD

E1

B7

C3

3F

E9

C3B0

05

00

00

00

00

00

00

00

78

Для кодирования экрана под нее предназначена программа-шифратор на Бейсике:

1 CLEAR 39999: FOR x=1 TO 60:

READ a

: POKE 49999+x,a: NEXT x

10 LOAD "" SCREEN$

15 RANDOMIZE USR 5E4

20 SAVE "scr" CODE 40000,6912

30 GO TO 10

100 DATA 17,64,156,33,0,64,6,

192,197

,229,1,32,0,237,176

110 DATA 225,36,124,230,7,32,

10,125,

198,32,111,56,4,124,214,8

120 DATA 103,193,16,229,33,0,

88,6,32

,197,229,6,24,197,237,160

130 DATA 1,31,0,9,193,16,246,

225,35,

193,16,237,201

Дизассемблер кодового блока программы-шифратора:

1

ORG

50000

2

ENT

$

3

LD

DE,#9C4 0

4

LD

HL,#4000

5

LD

B, #C0

6 LC358 PUSH

BC

7

PUSH

HL

8

LD

BC,#0020

9

LDIR

10

POP

HL

11

INC

H

12

LD

A, H

13

AND

#07

14

JR

NZ,LC370

15

LD

A, L

16

ADD

A, #20

17

LD

L, A

18

JR

C,LC370

19

LD

A, H

20

SUB

#08

21

LD

H, A

22

LC370

POP

BC

23

DJNZ

LC358

24

LD

HL,#5800

25

LD

B, #20

26

LC378

PUSH

BC

27

PUSH

HL

28

LD

B, #18

29

LC37C

PUSH

BC

30

LDI

31

LD

BC,#001F

32

ADD

HL, BC

33

POP

BC

34

DJNZ

LC37C

35

POP

HL

36

INC

HL

37

POP

BC

38

DJNZ

LC378

39

RET

Вторая процедура загружает рисунок по прямоугольникам 6х8 знакомест (всего их - 16).

Загружаются они в

хаотичном

(заранее определяемом) порядке. После загрузки каждого

прямоугольника, сразу же загружаются его атрибуты.

1

ORG

50000

2

ENT

$

3

CALL

LD FL

4

RET

Z

5

RST

8

6

DEFB

26

7 LD

FL LD

HL,LOAD1

8

LD

(CAL+1) , HL

9

XOR

A

10

SUB

1

11

EX

AF, AF'

12

DI

13

LD

HL,DATA

14

LD

B, 16

15

L1

PUSH

BC

16

LD

A,(HL)

17

DEFB

#DD

18

LD

L, A

19

INC

HL

20

LD

A,(HL)

21

DEFB

#DD

22

LD

H, A

23

INC

HL

24

CALL

LOAD

25

POP

BC

26

DJNZ

L1

27

XOR

A

28

EXX

29

EXIT

LD

HL,10 072

30

EXX

31

JP

#053F

32

LOAD

LD

B,4 8

33

PUSH

IX

34

L2

PUSH

IX

35

EXX

36

LD

DE, 8

37

CAL

CALL

LOAD1

38

INC

E

39

DEC

E

40

JR

NZ,ERR1

41

EXX

42

POP

IX

43

DEFB

#DD

44

INC

H

45

DEFB

#DD

46

LD

A, H

47

AND

7

48

JR

NZ, L3

49

DEFB

#DD

50

LD

A, L

51

ADD

A, 32

52

DEFB

#DD

53

LD

L, A

54

JR

C, L3

55

DEFB

#DD

56

LD

A, H

57

SUB

8

58

DEFB

#DD

59

LD

H, A

60

L3

DJNZ

L2

61

POP

IX

62

DEFB

#DD

63

LD

A, H

64

RRCA

65

RRCA

66

RRCA

67

AND

#03

68

OR

#58

69

DEFB

#DD

70

LD

H, A

71

LD

B, 6

72

L4

EXX

73

LD

DE, 8

74

CALL

#05A9

75

I NC

E

76

DEC

E

77

JR

NZ,ERR2

78

EXX

79

LD

DE, 24

80

ADD

IX, DE

81

DJNZ

L4

82

RET

83

LOAD1

CALL

#0562

84

LD

IX,#05A9

85

LD

(CAL+1),IX

86

RET

87

ERR1

POP

BC

88

POP

BC

89

ERR2

POP

BC

90

POP

BC

91

JR

EXIT

92

DATA

DEFW

#4000,#4890

93

DEFW

#4880,#5058

94

DEFW

#4010,#40C8

95

DEFW

#5048,#40D8

96

DEFW

#5050,#40C0

97

DEFW

#5040, #4888

98

DEFW

#4008, #4018

99

DEFW

#40D0,#4898

При выходе из программы флаг Z установлен, если не было ошибки и сброшен, если была. Длина процедуры = 175 байтов:

C350

CD

56

C3

C8

CF

1A

21

CD

98

C358

C3

22

89

C3

AF

D6

01

08

DA

C360

F3

21

DF

C3

06

10

C5

7E

32

C368

DD

6F

23

7E

DD

67

23

CD

4C

C370

7E

C3

C1

10

F1

AF

D9

21

DF

C378

58

27

D9

C3

3F

05

06

30

D0

C380

DD

E5

DD

E5

D9

11

08

00

B9

C388

CD

CD

C3

1C

1D

20

4A

D9

24

C390

DD

E1

DD

24

DD

7C

E6

07

58

C398

20

0E

DD

7D

C6

20

DD

6F

15

C3A0

38

06

DD

7C

D6

08

DD

67

1C

C3A8

10

D8

DD

E1

DD

7C

0F

0F

88

C3B0

0F

E6

03

F6

58

DD

67

06

03

C3B8

06

D9

11

08

00

CD

A9

05

EE

C3C0

1C

1D

20

17

D9

11

18

00

F5

C3C8

DD

19

10

ED

C9

CD

62

05

7B

C3D0

DD

21

A9

05

DD

22

89

C3

8A

C3D8

C9

C1

C1

C1

C1

18

98

00

18

C3E0

40

90

48

80

48

58

50

10

3B

C3E8

40

C8

40

48

50

D8

40

50

F3

C3F0

50

C0

40

40

50

88

48

08

6B

C3F8

40

18

40

D0

40

98

48

00

43

Бейсик-шифратор для кодирования экрана: 1 CLEAR 39999: FOR x=0 TO 132: READ a: POKE 5E4+x,a: NEXT x 10 LOAD ""SCREEN$ 15 RANDOMIZE USR 5E4 20 SAVE "scr"CODE 40000,6912 30 GO TO 10

100 DATA 17,64,156,6,16,33,181,195,197,126,221,111,35,126 110 DATA 221,103,35,229,205,106,195,225,193,16,239,201 120 DATA 6,48,221,229,197,221,229,221,229,225,1,8,0,237,176 130 DATA 221,225,221,36,221,124,230,7,32,14,221,125,198,32 140 DATA 221,111,56,6,221,124,214,8,221,103,193,16,218,221,225 150 DATA 221,124,15,15,15,230,3,246,88,221,103,6,6,197,221 160 DATA 229,225,1,8,0,237,176,1,32,0,221,9,193,16,239,201 170 DATA 0,64,144,72,128,72,88,80,16,64,200,64,72,80,216,64 180 DATA 80,80,192,64,64,80,136,72,8,64,24,64,208,64,152,72 Дизассемблер кодового блока шифратора:

1

ORG

50000

2

ENT

$

3

LD

DE, #9C40

4

LD

B, #10

5

LD

HL,LC3B5

6 LC358

PUSH

BC

7

LD

A,(HL)

8

DEFB

#DD

9

LD

L, A

10

INC

HL

11

LD

A,(HL)

12

DEFB

#DD

13

LD

H, A

14

INC

HL

15

PUSH

HL

16

CALL

LC3 6A

17

POP

HL

18

POP

BC

19

DJNZ

LC358

20

RET

21 LC3 6A

LD

B,#30

22

PUSH

IX

23 LC3 6E

PUSH

BC

24

PUSH

IX

25

PUSH IX

26

POP HL

27

LD BC,#0008

28

LDIR

29

POP IX

30

DEFB #DD

31

INC H

32

DEFB #DD

33

LD A, H

34

AND #07

35

JR NZ,LC391

36

DEFB #DD

37

LD A, L

38

ADD A,#2 0

39

DEFB #DD

40

LD L, A

41

JR C,LC391

42

DEFB #DD

43

LD A, H

44

SUB #08

45

DEFB #DD

46

LD H, A

47

LC391

POP BC

48

DJNZ LC3 6E

49

POP IX

50

DEFB #DD

51

LD A, H

52

RRCA

53

RRCA

54

RRCA

55

AND #03

56

OR #58

57

DEFB #DD

58

LD H, A

59

LD B,#06

60

LC3A3

PUSH BC

61

PUSH IX

62

POP HL

63

LD BC,#0008

64

LDIR

65

LD BC,#0020

66

ADD IX, BC

67

POP BC

68

DJNZ LC3A3

69

RET

70

LC3B5

DEFW #4000,#4890

71

DEFW #4880,#5058

72

DEFW #4010,#4 0C8

73

DEFW #504 8,#4 0D8

74

DEFW #5050,#4 0C0

75

DEFW

#5040,

#4888

76

DEFW

#4008,

#4018

77

DEFW

#4 0D0,

#4898




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



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

Похожие статьи:
Nostalgy - мне сейчас до невыносимости хочется вернуться в 1995 год к Спектрофону, ZX-Format'у... Почему ???
Ретро - 40 лучших процедур: Копирование данных в памяти.
Из неопубликованого - Структуры модулей PSC.
Party - история зарождения нового Белурсуского демопати Twillight 2001; правила, команда, конкурсы.
Вступление - Оболочка.

В этот день...   21 ноября