ZX-Ревю 1995 №2 1994 г.

Читатель-читателю - Две программы (OPTION SELECTOR, SUPER RUNNING LINE)


 ----------------------------------
  (C) Антон Сидоренко,
         Мурманская обл., 1995.
-----------------------------------

          OPTION SELECTOR           
                                    
    Программа выполняет выбор  оп-  
 ции  меню  посредством  наведения  
 полоски-указателя на  необходимую  
 опцию   (как   в  системном  меню  
 SPECTRUM-128).                     
    Эту процедуру можно встраивать  
 как в программы в кодах,  так и в  
 Бейсик-программы,  так  как обмен  
 данными происходит  через  ячейки  
 памяти.                            
    Программа имеет два режима уп-  
 равления  полоской-указателем   и  
 два режима выхода,  которые зада-  
 ются содержимым ячеек MOD2 и MOD1  
 соответственно (см. ниже).         
    У программы есть  ограничение:  
 нельзя задавать координаты первой  
 опции в нулевой строке экрана.     
    Пример работы. Командами PRINT  
 или другим способом изобразите на  
 экране меню с несколькими пункта-  
 ми.  Занесите координаты  первого  
 пункта  в  ячейку  FCRD и задайте  
 остальные переменные  для  работы  
 OPTION SELECTOR'а.  Запустите его  
 RANDOMIZE USR 40000 или иначе. По  
 окончании  работы программа поме-  
 щает номер выбранного пункта меню  
 в ячейку OPTN и выходит по коман-  
 де RET. Считав командой PEEK зна-  
 чение   OPTN  Вы  узнаете,  какой  
 пункт меню был выбран.             
    Теперь привожу  описание необ-  
 ходимых переменных, которые зада-  
 ются перед запуском:               
    FCRD (2  байта)  -  координаты  
 первого символа   первого  пункта  
 меню (строка, столбец).            
    NLIN (1 байт) - количество оп- 
 ций меню.                         
    MCLR (1  байт) - цвет (атрибу- 
 ты) для выделения опций.          
    RCLR (1  байт)  - атрибуты для 
 восстановления исходного    цвета 
 опции.                            
    MOD2 (1  байт)  -  режим звука 
 (1) или паузы  (0)  при  движении 
 курсора.                          
    MOD1 (1 байт)  -  режим  звука 
 (0)  или  мигания  (1) при выборе 
 опции.                            
    WLIN (1 байт) - ширина курсора 
 в знакоместах.                    
                                   
    00001 ; (C) Logic Games'94     
    00010        ORG  40000        
    00020        ENT               
    00030 OS     EI                
    00040        CALL NEWCR        
    00050        CALL INIT         
    00060        CALL PIC2         
    00070 OS1    CALL INPUT        
    00080        CALL ADDTN        
    00090        CALL PICTR        
    00100        CALL PAUSE        
    00110        JR   OS1          
    00120 NEWCR  LD   DE,FCRD      
    00130 NC1    LD   A,(DE)       
    00140        LD   (NCRD),A     
    00150        LD   (TCRD),A     
    00160        LD   L,A          
    00170        INC  DE           
    00180        LD   H,0          
    00190        OR   A            
    00200        ADD  HL,HL        
    00210        ADD  HL,HL        
    00220        ADD  HL,HL        
    00230        ADD  HL,HL        
    00240        ADD  HL,HL        
    00250        LD   A,(FCRD+1)   
    00260        LD   E,A          
    00270        LD   D,0          
    00280        ADD  HL,DE        
    00290        LD   DE,22528     
    00300        ADD  HL,DE        
    00310        LD   (OCRD),HL        
    00320        RET                   
    00330 INPUT  NOP                   
    00340 INP1   LD   A,239            
    00350        IN   A,(254)          
    00360        AND  31               
    00370        BIT  0,A              
    00380        JR   Z,FIRE           
    00390        BIT  2,A              
    00400        JR   Z,UP             
    00410        BIT  1,A              
    00420        JR   Z,DOWN           
    00430        JR   INP1             
    00440 UP     LD   A,1              
    00450        RET                   
    00460 DOWN   XOR  A                
    00470        RET                   
    00480 FIRE   LD   A,2              
    00490        RET                   
    00500 ADDTN  SRL  A                
    00510        JR   NZ,QUIT          
    00520        JR   C,ADD2           
    00530 SUBTN  LD   A,(STEP)         
    00540        LD   B,A              
    00550        LD   A,(TCRD)         
    00560        AND  A                
    00570        SUB  B                
    00580        LD   B,A              
    00590        LD   A,(FCRD)         
    00600        CP   0                
    00610        JR   Z,S2             
    00620        DEC  A                
    00630 S2     CP   B                
    00640        JR   NC,SUB2          
    00650        LD   A,B              
    00660 S3     LD   (TCRD),A         
    00670        LD   (NCRD),A         
    00680        RET                   
    00690 SUB2   LD   A,(FCRD)         
    00700        LD   D,A              
    00710        LD   A,(STEP)         
    00720        LD   C,A              
    00730        LD   A,(NLIN)         
    00740        DEC  A                
    00750        DEC  A                
    00760        LD   B,A              
    00770        LD   A,C              
    00780        AND  A                
    00790 SUB3   ADD  A,C              
    00800        DJNZ SUB3             
    00810        ADD  A,D              
    00820        LD   (TCRD),A         
    00830        RET                   
    00840 ADD2   CALL SUB2             
    00850        LD   A,(TCRD)         
    00860        INC  A                
    00870        LD   B,A              
    00880        LD   A,(NCRD)         
    00890        LD   C,A          
    00900        LD   A,(STEP)     
    00910        AND  A            
    00920        ADD  A,C          
    00930        CP   B            
    00940        JR   NC,ADD3      
    00950        LD   (TCRD),A     
    00960        RET               
    00970 ADD3   LD   A,(FCRD)     
    00980        LD   (TCRD),A     
    00990        RET               
    01000 QUIT   LD   A,(MOD1)     
    01010        SLA  A            
    01020        JR   NZ,FLASH     
    01030        LD   HL,50        
    01040        LD   DE,70        
    01050        CALL 949          
    01060        LD   A,(RCLR)     
    01070        LD   (MCLR),A     
    01080        CALL PICTR        
    01090        JR   END          
    01100 FLASH  LD   B,10         
    01110 FL1    PUSH BC           
    01120        CALL PICTR        
    01130        LD   A,(MCLR)     
    01140        LD   (CLR),A      
    01150        LD   A,(RCLR)     
    01160        LD   (MCLR),A     
    01170        CALL PICTR        
    01180        LD   A,(CLR)      
    01190        LD   (MCLR),A     
    01200        LD   HL,500       
    01210 FL2    DEC  HL           
    01220        LD   A,H          
    01230        OR   L            
    01240        JR   NZ,FL2       
    01250        POP  BC           
    01260        DJNZ FL1          
    01270 END    LD   A,(NCRD)     
    01280        LD   B,A          
    01290        LD   A,(STEP)     
    01300        LD   C,A          
    01310        LD   A,(FCRD)     
    01320        LD   HL,OPTN      
    01330        LD   (HL),1       
    01340 EN1    CP   B            
    01350        JR   Z,EN2        
    01360        ADD  A,C          
    01370        INC  (HL)         
    01380        JR   EN1          
    01390 EN2    POP  HL           
    01400        RET               
    01410 PICTR  LD   HL,(OCRD)    
    01420        CALL PIC3         
    01430        LD   A,(RCLR)     
    01440        LD   (HL),A       
    01450        HALT              
    01460        LDIR              
    01470        LD   DE,TCRD       
    01480        CALL NC1           
    01490        LD   A,(TCRD)      
    01500        LD   (NCRD),A      
    01510 PIC2   LD   HL,(OCRD)     
    01520        CALL PIC3          
    01530        LD   A,(MCLR)      
    01540        LD   (HL),A        
    01550        HALT               
    01560        LDIR               
    01570        RET                
    01580 PIC3   LD   A,(WLIN)      
    01590        LD   C,A           
    01600        LD   B,0           
    01610        DEC  C             
    01620        LD   D,H           
    01630        LD   E,L           
    01640        INC  DE            
    01650        RET                
    01660 PAUSE  LD   A,(MOD2)      
    01670        SLA  A             
    01680        JR   NZ,PAUS2      
    01690        LD   B,4           
    01700 PAS1   HALT               
    01710        DJNZ PAS1          
    01720        RET                
    01730 PAUS2  LD   B,3           
    01740 PAS2   HALT               
    01750        DJNZ PAS2          
    01760        LD   HL,20         
    01770        LD   DE,30         
    01780        CALL 949           
    01790        RET                
    01800 INIT   LD   A,(FCRD)      
    01810        LD   (TCRD),A      
    01820        LD   (NCRD),A      
    01830        RET                
    01840 FCRD   DEFW #0105         
    01850 NLIN   DEFB 6             
    01860 MCLR   DEFB 7             
    01870 RCLR   DEFB 56            
    01880 MOD1   DEFB 0             
    01890 MOD2   DEFB 1             
    01900 WLIN   DEFB 10            
    01910 OPTN   DEFB 0             
    01920 OCRD   DEFW 0             
    01930 NCRD   DEFB 0             
    01940 STEP   DEFB 1             
    01950 TCRD   DEFB 0             
    01960 CLR    DEFB 0             
                                    
    Приведенная программа    имеет  
 один небольшой недостаток.  После  
 нажатия клавиши "ОГОНЬ" изменяет-  
 ся  содержимое  ячейки MCLR,  оно  
 становится равным RCLR.  Это при-  
 ведет  к тому,  что при повторном  
 запуске блока  кодов  (что  очень  
 вероятно при выполнении какой-ли- 
 бо  программы)  не будет происхо- 
 дить выделение опции меню  другим 
 цветом.  Для устранения этого не- 
 достатка  можем   порекомендовать 
 несколько   изменить   программу: 
 прежде всего разбить подпрограмму 
 PICTR на две самостоятельные час- 
 ти: PICTR и PIC2, что достигается 
 введением дополнительных строк:   
                                   
    01505        RET               
                                   
    00095        CALL PIC2         
                                   
    Кроме этого  необходимо исклю- 
 чить строки 1060,  1070,  а также 
 изменить строку 1120:             
                                   
    01120        CALL PIC2         
                                   
    Другим усовершенствованием яв- 
 ляется  упрощение   использования 
 подпрограммы   меню  из  Бейсика. 
 Чтобы не считывать результат  при 
 помощи  PEEK,  добавьте  еще пару 
 строк:                            
                                   
    01392        LD   BC,(OPTN)    
    01394        LD   B,0          
                                   
    В этом  случае результат можно 
 считывать в  переменную  Бейсика. 
 Например,  при  вызове  программы 
 меню при помощи LET men=USR 40000 
 результат  работы без лишних хло- 
 пот прямиком попадет в переменную 
 men.  PRINT  USR 40000 выдаст ре- 
 зультат работы на экран и т.д.    
                                   
    Модернизированная    программа 
 будет иметь параметры:            
                                   
    Start of object: #9C40 (40000) 
    Length         : #0177 (00375) 
    Executes       : #9C40 (40000) 
                                   
    Шестнадцатиричный  дамп  блока 
 кодов:                            
                                   
 9C40: FB CD 5B 9C CD 9E 9D CD :70 
 9C48: 69 9D CD 7E 9C CD 9B 9C :D5 
 9C50: CD 4F 9D CD 69 9D CD 82 :C7 
 9C58: 9D 18 EF 11 A8 9D 1A 32 :3A 
 9C60: B3 9D 32 B5 9D 6F 13 26 :78 
 9C68: 00 B7 29 29 29 29 29 3A :C2 
 9C70: A9 9D 5F 16 00 19 11 00 :F1 
 9C78: 58 19 22 B1 9D C9 00 3E :FC 
 9C80: EF DB FE E6 1F CB 47 28 :23    
 9C88: 0F CB 57 28 06 CB 4F 28 :C5    
 9C90: 05 18 EC 3E 01 C9 AF C9 :B5    
 9C98: 3E 02 C9 CB 3F 20 56 38 :F5    
 9CA0: 35 3A B4 9D 47 3A B5 9D :CF    
 9CA8: A7 90 47 3A A8 9D FE 00 :3F    
 9CB0: 28 01 3D B8 30 08 78 32 :4C    
 9CB8: B5 9D 32 B3 9D C9 3A A8 :D3    
 9CC0: 9D 57 3A B4 9D 4F 3A AA :0E    
 9CC8: 9D 3D 3D 47 79 A7 81 10 :73    
 9CD0: FD 82 32 B5 9D C9 CD BE :C3    
 9CD8: 9C 3A B5 9D 3C 47 3A B3 :0C    
 9CE0: 9D 4F 3A B4 9D A7 81 B8 :D3    
 9CE8: 30 04 32 B5 9D C9 3A A8 :E7    
 9CF0: 9D 32 B5 9D C9 3A AD 9D :FA    
 9CF8: CB 27 20 0E 21 32 00 11 :18    
 9D00: 46 00 CD B5 03 CD 4F 9D :21    
 9D08: 18 26 06 0A C5 CD 69 9D :8B    
 9D10: 3A AB 9D 32 B6 9D 3A AC :9A    
 9D18: 9D 32 AB 9D CD 4F 9D 3A :BF    
 9D20: B6 9D 32 AB 9D 21 F4 01 :A0    
 9D28: 2B 7C B5 20 FB C1 10 DC :E9    
 9D30: 3A B3 9D 47 3A B4 9D 4F :78    
 9D38: 3A A8 9D 21 B0 9D 36 01 :F9    
 9D40: B8 28 04 81 34 18 F9 E1 :68    
 9D48: ED 4B B0 9D 06 00 C9 2A :63    
 9D50: B1 9D CD 77 9D 3A AC 9D :9F    
 9D58: 77 76 ED B0 11 B5 9D CD :AF    
 9D60: 5E 9C 3A B5 9D 32 B3 9D :05    
 9D68: C9 2A B1 9D CD 77 9D 3A :61    
 9D70: AB 9D 77 76 ED B0 C9 3A :E2    
 9D78: AF 9D 4F 06 00 0D 54 5D :74    
 9D80: 13 C9 3A AE 9D CB 27 20 :90    
 9D88: 06 06 04 76 10 FD C9 06 :87    
 9D90: 03 76 10 FD 21 14 00 11 :F9    
 9D98: 1E 00 CD B5 03 C9 3A A8 :83    
 9DA0: 9D 32 B5 9D 32 B3 9D C9 :A9    
 9DA8: 05 01 06 07 38 00 01 0A :9B    
 9DB0: 00 00 00 00 01 00 00 00 :4E    
                                      
                                      
        SUPER RUNNING LINE.           
                                      
    Эта программа выводит заданный    
 текст (тем шрифтом, который опре-    
 делен системной переменной CHARS)    
 в виде бегущей  строки,  расходя-    
 щейся  влево и вправо (зеркально)    
 из центра экрана. Плавность сдви-    
 га достигается при помощи команды    
 HALT.                                
    В строке  30 листинга задается    
 длина текста, заданного в строках    
 1090-1150.                           
                                      
    00010 ; (C) Logic Games'94        
    00020        ORG  40000           
    00030 LENGTH EQU  57              
    00040 STBUFG DEFS 8            
    00050 TEXTA  DEFW 0            
    00060 LOOP1  DEFB 0            
    00070 LOOP2  DEFW 0            
    00080        ENT               
    00090        EI                
    00100 START  LD   A,8          
    00110        LD   (LOOP1),A    
    00120        LD   HL,LENGTH    
    00130        LD   (LOOP2),HL   
    00140        LD   HL,TEXTN     
    00150        LD   (TEXTA),HL   
    00160 TS2    CALL GSYM         
    00170        CALL FASYM        
    00180 TS1    CALL SCROLL       
    00190        CALL SCROLL       
    00200        CALL MSYM         
    00210        LD   A,(LOOP1)    
    00220        DEC  A            
    00230        LD   (LOOP1),A    
    00240        JR   NZ,TS1       
    00250        LD   A,8          
    00260        LD   (LOOP1),A    
    00270        LD   HL,(LOOP2)   
    00280        DEC  HL           
    00290        LD   (LOOP2),HL   
    00300        LD   A,H          
    00310        OR   L            
    00320        JR   NZ,TS2       
    00330        RET               
    00340 GSYM   LD   HL,(TEXTA)   
    00350        LD   A,(HL)       
    00360        INC  HL           
    00370        LD   (TEXTA),HL   
    00380        RET               
    00390 FASYM  LD   HL,(23606)   
    00400        LD   B,A          
    00410        LD   DE,8         
    00420        CP   31           
    00430        JR   Z,FA1        
    00440 FA2    AND  A            
    00450        ADD  HL,DE        
    00460        DJNZ FA2          
    00470 FA1    LD   DE,STBUFG    
    00480        LD   BC,8         
    00490        LDIR              
    00500        RET               
    00510 SCROLL HALT              
    00520        LD   HL,16385     
    00530        LD   B,8          
    00540 SM1    PUSH BC           
    00550        PUSH HL           
    00560        LD   B,15         
    00570 SM2    AND  A            
    00580        RL   (HL)         
    00590        JR   NC,SM3       
    00600        DEC  HL           
    00610        SET  0,(HL)       
    00620        INC  HL            
    00630 SM3    INC  HL            
    00640        DJNZ SM2           
    00650        POP  HL            
    00660        POP  BC            
    00670        INC  H             
    00680        DJNZ SM1           
    00690 SR     NOP                
    00700        LD   HL,18206      
    00710        LD   B,8           
    00720 SR1    PUSH BC            
    00730        PUSH HL            
    00740        LD   B,15          
    00750 SR2    AND  A             
    00760        RR   (HL)          
    00770        JR   NC,SR3        
    00780        INC  HL            
    00790        SET  7,(HL)        
    00800        DEC  HL            
    00810 SR3    DEC  HL            
    00820        DJNZ SR2           
    00830        POP  HL            
    00840        POP  BC            
    00850        DEC  H             
    00860        DJNZ SR1           
    00870        LD   A,#7F         
    00880        IN   A,(#FE)       
    00890        RRA                
    00900        RET  C             
    00910        POP  BC            
    00920        RET                
    00930 MSYM   LD   HL,16384+15   
    00940        LD   DE,STBUFG     
    00950        LD   B,8           
    00960 MBUF1  LD   A,(DE)        
    00970        AND  A             
    00980        RLA                
    00990        LD   (DE),A        
    01000        JR   NC,MBUF2      
    01010        SET  0,(HL)        
    01020        INC  HL            
    01030        SET  7,(HL)        
    01040        DEC  HL            
    01050 MBUF2  INC  H             
    01060        INC  DE            
    01070        DJNZ MBUF1         
    01080        RET                
    01090 TEXTN DEFM "SCROLLING  "  
    01100        DEFM "(SUPER "     
    01110        DEFM "RUNNING "    
    01120        DEFM "LINE)  "     
    01130        DEFM "(C)Logic "   
    01140        DEFM "Games'94"    
    01150        DEFM "        "    
                                    
    Start of object: #9C40 (40000)  
    Length         : #00F9 (00249)  
    Executes       : #9C4D (40013)  
    При  тестировании  мы  сделали 
 некоторые изменения:              
                                   
    00520        LD   HL,16384     
    00560        LD   B,16         
                                   
    Шестнадцатиричный дамп блока:  
                                   
 9C40: 00 00 00 00 00 00 00 00 :DC 
 9C48: 00 00 00 00 00 FB 3E 08 :25 
 9C50: 32 4A 9C 21 39 00 22 4B :CB 
 9C58: 9C 21 00 9D 22 48 9C CD :21 
 9C60: 88 9C CD 91 9C CD A9 9C :2C 
 9C68: CD A9 9C CD E7 9C 3A 4A :EA 
 9C70: 9C 3D 32 4A 9C 20 EE 3E :49 
 9C78: 08 32 4A 9C 2A 4B 9C 2B :70 
 9C80: 22 4B 9C 7C B5 20 D8 C9 :17 
 9C88: 2A 48 9C 7E 23 22 48 9C :D9 
 9C90: C9 2A 36 5C 47 11 08 00 :11 
 9C98: FE 1F 28 04 A7 19 10 FC :49 
 9CA0: 11 40 9C 01 08 00 ED B0 :CF 
 9CA8: C9 76 21 00 40 06 08 C5 :B7 
 9CB0: E5 06 10 A7 CB 16 30 04 :03 
 9CB8: 2B CB C6 23 23 10 F4 E1 :3B 
 9CC0: C1 24 10 EB 00 21 1E 47 :C2 
 9CC8: 06 08 C5 E5 06 0F A7 CB :A3 
 9CD0: 1E 30 04 23 CB FE 2B 2B :00 
 9CD8: 10 F4 E1 C1 25 10 EB 3E :78 
 9CE0: 7F DB FE 1F D8 C1 C9 21 :76 
 9CE8: 0F 40 11 40 9C 06 08 1A :E8 
 9CF0: A7 17 12 30 06 CB C6 23 :46 
 9CF8: CB FE 2B 24 13 10 F0 C9 :88 
 9D00: 53 43 52 4F 4C 4C 49 4E :03 
 9D08: 47 20 28 53 55 50 45 52 :C3 
 9D10: 20 52 55 4E 4E 49 4E 47 :EE 
 9D18: 20 4C 49 4E 45 29 20 20 :66 
 9D20: 28 43 29 4C 6F 67 69 63 :3F 
 9D28: 20 47 61 6D 65 73 27 39 :32 
 9D30: 34 20 20 20 20 20 20 20 :E1 
 9D38: 20 00 00 00 00 00 00 00 :F5 
                                   
    В заключение   Антон    просит 
 опубликовать его адрес:           
  Ъ-----------------------------ї  
  і   184364, Мурманская обл.,  і  
  і  Кольский р-н, пос.Мурмаши, і  
  і       Позднякова, 2-21,     і  
  і       Сидоренко Антону.     і  
  А-----------------------------Щ  
    Или пишите в наш клуб:         
  Ъ-----------------------------ї  
  і  184364, Мурманская обл.,   і  
  і     пос.Мурмаши, КРСЮТ,     і  
  і       Кириллову С.В.        і  
  А-----------------------------Щ  
                                   



СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Новости - Мир японской анимации.
Железо - Часы реального времени.
Лит. страничка - Побасенка про старого деда.

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