|
Français
'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 |