CpcAlive is a
programming
environment
Amstrad CPC

compatible
for graphics
 animations
creation.






Cpc online

Cpc basic key words
( English - Español )

Cpc basic error messages

The memory

The Cpc system vectors

Diskettes management

Z80 processor opcodes and
operation

CpcAlive installer for Windows
and for DosBox

CpcAlive Documentation

SmallAsm is a Z80 assembler
for Dos







Français

** CPCALIVE INPUT/OUTPUT PIXEL THROUGH BIOS INTERRUPTION 010H **


'Z80IOPIX.BAS
memory &A5FF

|CMD
;*********************
;* CpcAlive commands *
;*********************

;***************************************************************
;* RSX INPUT/OUTPUT PIXEL CPC THROUGH BIOS INTERRUPTION 010H   *
;***************************************************************
;* The following listing generate functions |OPIX,X,Y,PEN and  *
;* |IPIX,X,Y,@pen which respectively write and read a graphic  *
;* point to the screen.                                        *
;* Commands: |OPIX,X,Y,pen              = OUTPUT PIXEL         *
;*           |IPIX,X,Y,adress pen       = INPUT PIXEL          *
;* (X and Y are relating to the top left corner of the screen) *
;***************************************************************
EX\Z80IOPIX.ASM

text
;*********************
;*    Cpc Commands   *
;*********************

10 call &A600:pix%=0:'RSX INITIALISATIONS
20 mode 1:PRINT:PRINT"display a pixel (PEN 3)"
40 PRINT "to the coordinates 0,0 with |OPIX"
50 PRINT "and read it with |IPIX"
run
|OPIX,0,0,3:|IPIX,0,0,@pix%:print pix%
|INPUT,":CLOSE"


; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


LISTING RSX

0001   0000             ;                                 Z80IOPix.asm
0002   0000             ;       ** RSX INPUT/OUTPUT PIXEL CPC THROUGH BIOS INTERRUPTION 010H **
0003   0000            
0004   0000             ; ** Opcodes CpcAlive **
0005   0000             #define LD_AH_A         .db 040h\ .db 052h              ; load the value of the Z80 register A
0006   0000                                                                     ; in the X86 register AH
0007   0000             #define LD_A_AH         .db 040h\ .db 05Bh              ; load the value of the X86 register AH
0008   0000                                                                     ; in the Z80 register A
0009   0000             #define INT(xx)         .db 040h\ .db 048h\ .db xx      ; call Dos interruption number xx
0010   0000            
0011   A600             .org 0A600h
0012   A600            
0013   A600 01 09 A6                            ld bc,RsxTb
0014   A603 21 11 A6                            ld hl,Buf
0015   A606 C3 D1 BC                            jp 0BCD1h               ; RSX INITIALISATIONS
0016   A609            
0017   A609 15 A6       RsxTb                   .dw MnemoTb
0018   A60B C3 1E A6                            jp OPix                 ; ** |OPIX - OUTPUT PIXEL THROUGH INT 010H **
0019   A60E C3 35 A6                            jp IPix                 ; ** |IPIX - INTPUT PIXEL THROUGH INT 010H **
0020   A611            
0021   A611 00 00 00 00 Buf                     .db 0,0,0,0             ; 4 bytes reserved for kernal
0022   A615            
0023   A615 4F 50 49    MnemoTb                 .db "OPI"               ; |OPIX
0024   A618 D8                                  .db 058h | 080h
0025   A619 49 50 49                            .db "IPI"               ; |IPIX
0026   A61C D8                                  .db 058h | 080h
0027   A61D 00                                  .db 0
0028   A61E            
0029   A61E            
0030   A61E             ; ** OUTPUT PIXEL THROUGH INT 010H **
0031   A61E             ; <(IX+0) and (DE) = pen number
0032   A61E             ;  (IX+2) = y
0033   A61E             ;  (IX+4) = x
0034   A61E            
0035   A61E DD 56 03    OPix:                   ld d,(IX+3)             ; coordinate y
0036   A621 DD 5E 02                            ld e,(IX+2)
0037   A624 DD 46 05                            ld b,(IX+5)             ; coordinate x
0038   A627 DD 4E 04                            ld c,(IX+4)
0039   A62A 3E 0C                               ld a,0Ch                ; FUNCTION 0CH = WRITE A GRAPHIC POINT
0040   A62C 40                                  LD_AH_A                 ; load the value of the Z80 register A
0040   A62D 52         
0041   A62E                                                             ; in the X86 register AH
0042   A62E DD 7E 00                            ld a,(IX+0)             ; color requested
0043   A631 40                                  INT(010h)               ; CALL INTERRUPTION BIOS 010H
0043   A632 48         
0043   A633 10         
0044   A634 C9                                  ret
0045   A635            
0046   A635            
0047   A635             ; ** INPUT PIXEL THROUGH INT 010H **
0048   A635             ; <IX+0 and DE = pointer pen number
0049   A635             ;  (IX+2) = y
0050   A635             ;  (IX+4) = x
0051   A635             ; >(IX+0) and (DE) = pen number
0052   A635            
0053   A635 D5          IPix:                   push de
0054   A636 DD 56 03                            ld d,(IX+3)             ; coordinate y
0055   A639 DD 5E 02                            ld e,(IX+2)
0056   A63C DD 46 05                            ld b,(IX+5)             ; coordinate X
0057   A63F DD 4E 04                            ld c,(IX+4)
0058   A642 3E 0D                               ld a,0Dh                ; FUNCTION 0DH = READ A GRAPHIC POINT
0059   A644 40                                  LD_AH_A                 ; load the value of the Z80 register A
0059   A645 52         
0060   A646                                                             ; in the X86 register AH
0061   A646 40                                  INT(010h)               ; CALL INTERRUPTION BIOS 010H
0061   A647 48         
0061   A648 10         
0062   A649 D1                                  pop de
0063   A64A 12                                  ld (de),a               ; pixel color
0064   A64B 13                                  inc de
0065   A64C AF                                  xor a
0066   A64D 12                                  ld (de),a
0067   A64E C9                                  ret
0068   A64F            
0069   A64F             .end
tasm: Number of errors = 0