Teacher - programming lessons: copying memory blocks, cycles.

ZX Magazine #01
────────────────────────────────────────────────────────────────
°∙····∙▒▓█·█▓▒······∙∙······∙∙······∙∙······∙∙······∙∙······∙∙··
░°∙··∙°▒▓█·█▓▒∙▒▓█·█▓▒∙▒▓█·█▓▒∙··███▓▒∙▒▓█·█▓▒∙▒▓███▓▒∙····∙°°∙·
░░°∙∙°░▒▓███▓▒°▒▓█∙█▓▒°▒▓█∙█▓▒°∙▓███▓▒°▒▓███░░°▒▓█°█▓▒°∙··∙°░░°∙
░░░°°░░░░°°█▓▒░▒▓███▓▒░▒▓█°█▓▒░▒▓█°█▓▒░▒▓███▓░░▒▓███▓▒░°∙∙°░░░░░
░░░░░░░▒▓███▓▒░░°° █▓▒░░▓███▓▒░▒▓█░█▓▒░▒▓█░█▓▒░▒▓█░█▓▒░░°°░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
────────────────────────────────────────────────────────────────

                        ПРИВЕТ ДРУЗЬЯ!!!


В ЭТОЙ РУБРИКЕ С ВАМИ СЕГОДНЯ  WASQUEZ.

СЕГОДНЯ МЫ ПОГОВОРИМ О ПРОГРАММИРОВАНИИ .

ПРОСЬБА ЭКРАН МОНИТОРА СРАЗУ НЕ ЗАПЛЕВЫВАТЬ, ТАК КАК

НАЧИНАТЬ Я БУДУ СОВСЕМ С АЗОВ ПРОГРАММИРОВАНИЯ.

НУ И , ЕСТЕВСТВЕННО , ДАЛЬШЕ БУДЕТ БОЛЬШЕ.

( МАТЕРИАЛ РАСЧИТАН НА ЧЕЛОВЕКА ИМЕЮШЕГО ХОТЬ КАКУЮ-ТО

ЛИТЕРАТУРУ ПО АССЕМБЛЕРУ )


НАЧНЕМ С САМОГО ПРОСТОГО:

-КОПИРОВАНИЕ БЛОКОВ ПАМЯТИ-

10   LD   HL, АДРЕС (ОТКУДА )
20   LD   BC, АДРЕС (КУДА   )
30   LD   DE, АДРЕС (СКОЛЬКО)
40   LDIR     КОМАНДА ПЕРЕБРОСКИ
50   RET

НУ НАПРИМЕР ЗАГРУЗИЛИ ВЫ КАРТИНКУ ПОД АДРЕС 40000.

И ХОТИТЕ БРОСИТЬ ЕЕ НА ЭКРАН, ТО ПРОГРАММА 

ПЕРЕБРОСКИ КАРТИНКИ БУДЕТ ТАКАЯ :

10     LD   HL,40000  ИЗ ЭТОГО АДРЕСА
20     LD   BC,16384  B ЭКРАН 
30     LD   DE,6912   ДЛИНА КАРТИНКИ (стандарт для непакованной)
40     LDIR           ПЕРЕБРОСИТЬ ИЗ 40000 В 16384 , 6912 БАЙТ50 RET REFUND FROM THIS PROGRAM

TRY IT YOURSELF!



THE FOLLOWING PROGRAM ORGANIZES A SMALL CYCLE (FOR......NEXT)

WITH THE NUMBER OF REPEATS NO MORE THAN 255 TIMES.

10 LD B, MANY TIMES (FROM 1 TO 255)
20 M1 PUSH BC SAVE THE REGISTER PAIR ON THE STACK 
30 CALL ---||--- STARTING A SUBROUTINE 
40 POP BC TAKE REGISTER PAIR FROM STACK
50 DJNZ M1 DECREASED REGISTER B BY 1, AND SWITCHED BACK TO M1
60 RET RETURN FROM PROGRAM.


AN EXAMPLE OF USING THESE PROCEDURES IN A PAIR.

For example, you have 2 pictures and you want to throw them on
screen a certain number of times. The program will be like this:

1 picture is located at 40000
2 picture is located at 50000
you want to throw pictures onto the screen 100 times in a row
one after another.

         ORG 30000 - Internal compiler directive. 
05 EI Interrupts enabled.
10 LD B,100 For a=0 to 100 (number of repetitions 100 times)
20 M1 PUSH BC Saved BC as it will be used
30 HALT wait for interruption
40 LD HL,40000 Address of 1 image in HL
50 LD BC,6912 Length of 1 picture in BC
60 LD DE,16384 Address where we throw (on the screen) in DE
70 LDIR Drop!
80 HALT Wait for interruption
90 LD HL,50000 Address 2 pictures in HL
100 LD BC,6912 Length of 2 pictures in BC
110 LD DE,16384 Transfer address to DE
120 LDIRQuit!
130 POP BC Popped a previously saved BC from the stack
140 DJNZ M1 Subtracted one from “B” and switched to M1
150 RET As soon as “B” becomes 0 then return.


WELL THAT'S ALL FOR TODAY.

TRY IT, EXPERIMENT.

BY THE WAY TO SLOW DOWN THE OUTPUT YOU MUST AFTER THE "HALT" COMMAND

PUT A FEW MORE TEAMS LIKE THIS.

FOR THOSE WHO WERE NOT INTERESTED: - DON'T WORRY 

THE FOLLOWING ISSUE OF THE MAGAZINE WILL BE MORE COMPLEX PROGRAMS.


════════════════════════════════ ════════════════════════════════                             
                                            9.10.95
                                            WASQUEZ.

Share your thoughts about the article