PR#3 PREFIX /A2OSX.BUILD NEW INC 1 AUTO 6 .LIST OFF .OP 65C02 .OR $2000 .TF DRV/DHGR.DRV *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I .INB INC/IO.I *-------------------------------------- ZPBASE .EQ ZPDRV ZPCOLOR .EQ ZPDRV+2 *-------------------------------------- * Main DRV entry point * input : * X = CMD * 0 : OPEN * 2 : GETEVENT * 6 : OUT * 8 : CLOSE *-------------------------------------- * CLD $D8 * JMP (*,x) $7C * #JMPTABLE * /JMPTABLE *-------------------------------------- CS.START cld jmp (.1,x) .1 .DA OPEN .DA GETEVENT .DA OUT .DA CLOSE .DA GETINFO .DA SETPIXEL .DA GETPIXEL .DA HLINE .DA VLINE .DA FILLREC .DA BITBLT L.DEVINFO .DA DEVINFO .DA 0 end or relocation .DA CS.END-CS.START Code Length To Relocate .DA DS.END-DS.START Data Segment to Allocate *-------------------------------------- OPEN lda #S.DEV.F.GFX sta (pDevContext) ldy #S.DEV.NAME ldx #0 .1 lda DEVNAME,x sta (pDevContext),y cpx DEVNAME beq .8 inx iny bne .1 .8 lda A2osX.SCREENS ora #A2osX.SCREENS.G sta A2osX.SCREENS lda #A2osX.SCREENS.G >SYSCALL SYS.ScreenSelectA sta SET80STORE ldx #192 .81 dex lda BASEL,x sta ZPBASE lda BASEH,x sta ZPBASE+1 lda #$D5 ldy #39 sta SETPAGE2 .82 sta (ZPBASE),y dey bpl .82 lda #$AA ldy #39 sta CLRPAGE2 .83 sta (ZPBASE),y dey bpl .83 dex lda BASEL,x sta ZPBASE lda BASEH,x sta ZPBASE+1 lda #$2A ldy #39 sta SETPAGE2 .84 sta (ZPBASE),y dey bpl .84 lda #$55 ldy #39 sta CLRPAGE2 .85 sta (ZPBASE),y dey bpl .85 txa bne .81 >DEBUG clc rts *-------------------------------------- GETEVENT OUT clc rts *-------------------------------------- CLOSE lda A2osX.SCREENS and #$FF^A2osX.SCREENS.G sta A2osX.SCREENS clc rts *-------------------------------------- GETINFO >LDYA L.DEVINFO clc rts *-------------------------------------- * SETPIXEL *-------------------------------------- * PULLB = X.LO * PULLB = X.HI * PULLB = Y * PULLB = Mode * 00000001=mono * 00000010=16 colors * 1000000=xor (mono on 1 bit) * PULLB = Color (if not xor) *-------------------------------------- SETPIXEL >PULLA X.LO tax >PULLA X.HI lsr if 256 =< x < 511 bcs .1 lsr bcs .2 if 512 < x ldy DIV7.0,x lda MOD7.0,x bra .3 .1 ldy DIV7.256,x lda MOD7.256,x bra .3 .2 ldy DIV7.512,x lda MOD7.512,x .3 pha save MOD,y=DIV >PULLA Pull Y tax lda BASEL,x setup line Base Ptr sta ZPBASE lda BASEH,x sta ZPBASE+1 sta SET80STORE and prepare for page switching sta SETHIRES plx get back MOD in x >PULLA Pull Mode and #$FF bpl SETPIXEL.SOLID SETPIXEL.XOR tya lsr tay bcs .1 odd=main ram sta SETPAGE2 bra .2 .1 sta CLRPAGE2 .2 lda (ZPBASE),y eor Mono.Masks,x sta (ZPBASE),y rts *-------------------------------------- * A=Mode,X=MOD,Y=DIV *-------------------------------------- SETPIXEL.SOLID dec bne SETPIXEL.COLOR tya lsr tay bcs .1 odd=main ram sta SETPAGE2 bra .2 .1 sta CLRPAGE2 .2 >PULLA get COLOR lsr bcs .3 set white pixel lda (ZPBASE),y and Mono.NMasks,x includes And $7F for mono sta (ZPBASE),y rts .3 lda (ZPBASE),y and #$7F switch back this byte to mono ora Mono.Masks,x sta (ZPBASE),y rts *-------------------------------------- * X=MOD,Y=DIV *-------------------------------------- SETPIXEL.COLOR tya lsr Divide Col by 2 to get in range 0->39 and #$FE make it 0->38 as color mask on 4 bytes clc adc ZPBASE ZPBASE now point to first of the 4 columns sta ZPBASE txa get MOD asl times 4 to compute index in color tables asl tax set in X for Masks,NMasks >PULLA get COLOR asl asl tay lda Color.Masks,x beq .1 sta SETPAGE2 lda (ZPBASE) and Color.NMasks,x reset existing pixel, ora Color.Pixels,y apply color and Color.Enable,x filter 4 color bits color.enable bit sta (ZPBASE) .1 inx iny lda Color.Masks,x beq .2 sta CLRPAGE2 lda (ZPBASE) and Color.NMasks,x reset existing pixel, ora Color.Pixels,y apply color and Color.Enable,x filter 4 color bits color.enable bit sta (ZPBASE) .2 inc ZPBASE inx iny lda Color.Masks,x beq .3 sta SETPAGE2 lda (ZPBASE) and Color.NMasks,x reset existing pixel, ora Color.Pixels,y apply color and Color.Enable,x filter 4 color bits color.enable bit sta (ZPBASE) .3 inx iny lda Color.Masks,x beq .8 sta CLRPAGE2 lda (ZPBASE) and Color.NMasks,x reset existing pixel, ora Color.Pixels,y apply color and Color.Enable,x filter 4 color bits color.enable bit sta (ZPBASE) .8 rts *-------------------------------------- GETPIXEL *-------------------------------------- HLINE *-------------------------------------- VLINE *-------------------------------------- FILLREC *-------------------------------------- * params : X,Y,W,H *-------------------------------------- BITBLT rts *-------------------------------------- CS.END DIV7.0 .HS 0000000000000001010101010101 .HS 0202020202020203030303030303 .HS 0404040404040405050505050505 .HS 0606060606060607070707070707 .HS 0808080808080809090909090909 .HS 0A0A0A0A0A0A0A0B0B0B0B0B0B0B .HS 0C0C0C0C0C0C0C0D0D0D0D0D0D0D .HS 0E0E0E0E0E0E0E0F0F0F0F0F0F0F .HS 1010101010101011111111111111 .HS 1212121212121213131313131313 .HS 1414141414141415151515151515 .HS 1616161616161617171717171717 .HS 1818181818181819191919191919 .HS 1A1A1A1A1A1A1A1B1B1B1B1B1B1B .HS 1C1C1C1C1C1C1C1D1D1D1D1D1D1D .HS 1E1E1E1E1E1E1E1F1F1F1F1F1F1F .HS 2020202020202021212121212121 .HS 2222222222222223232323232323 .HS 24242424 DIV7.256 .HS 24242425252525252525 .HS 2626262626262627272727272727 .HS 2828282828282829292929292929 .HS 2A2A2A2A2A2A2A2B2B2B2B2B2B2B .HS 2C2C2C2C2C2C2C2D2D2D2D2D2D2D .HS 2E2E2E2E2E2E2E2F2F2F2F2F2F2F .HS 3030303030303031313131313131 .HS 3232323232323233333333333333 .HS 3434343434343435353535353535 .HS 3636363636363637373737373737 .HS 3838383838383839393939393939 .HS 3A3A3A3A3A3A3A3B3B3B3B3B3B3B .HS 3C3C3C3C3C3C3C3D3D3D3D3D3D3D .HS 3E3E3E3E3E3E3E3F3F3F3F3F3F3F .HS 4040404040404041414141414141 .HS 4242424242424243434343434343 .HS 4444444444444445454545454545 .HS 4646464646464647474747474747 .HS 4848484848484849 DIV7.512 .HS 494949494949 .HS 4A4A4A4A4A4A4A4B4B4B4B4B4B4B .HS 4C4C4C4C4C4C4C4D4D4D4D4D4D4D .HS 4E4E4E4E4E4E4E4F4F4F4F4F4F4F *-------------------------------------- MOD7.0 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 00010203 MOD7.256 .HS 04050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600 MOD7.512 .HS 010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 *-------------------------------------- BASEL .HS 00.00.00.00.00.00.00.00 .HS 80.80.80.80.80.80.80.80 .HS 00.00.00.00.00.00.00.00 .HS 80.80.80.80.80.80.80.80 .HS 00.00.00.00.00.00.00.00 .HS 80.80.80.80.80.80.80.80 .HS 00.00.00.00.00.00.00.00 .HS 80.80.80.80.80.80.80.80 .HS 28.28.28.28.28.28.28.28 .HS A8.A8.A8.A8.A8.A8.A8.A8 .HS 28.28.28.28.28.28.28.28 .HS A8.A8.A8.A8.A8.A8.A8.A8 .HS 28.28.28.28.28.28.28.28 .HS A8.A8.A8.A8.A8.A8.A8.A8 .HS 28.28.28.28.28.28.28.28 .HS A8.A8.A8.A8.A8.A8.A8.A8 .HS 50.50.50.50.50.50.50.50 .HS D0.D0.D0.D0.D0.D0.D0.D0 .HS 50.50.50.50.50.50.50.50 .HS D0.D0.D0.D0.D0.D0.D0.D0 .HS 50.50.50.50.50.50.50.50 .HS D0.D0.D0.D0.D0.D0.D0.D0 .HS 50.50.50.50.50.50.50.50 .HS D0.D0.D0.D0.D0.D0.D0.D0 *-------------------------------------- BASEH .HS 20.24.28.2C.30.34.38.3C .HS 20.24.28.2C.30.34.38.3C .HS 21.25.29.2D.31.35.39.3D .HS 21.25.29.2D.31.35.39.3D .HS 22.26.2A.2E.32.36.3A.3E .HS 22.26.2A.2E.32.36.3A.3E .HS 23.27.2B.2F.33.37.3B.3F .HS 23.27.2B.2F.33.37.3B.3F .HS 20.24.28.2C.30.34.38.3C .HS 20.24.28.2C.30.34.38.3C .HS 21.25.29.2D.31.35.39.3D .HS 21.25.29.2D.31.35.39.3D .HS 22.26.2A.2E.32.36.3A.3E .HS 22.26.2A.2E.32.36.3A.3E .HS 23.27.2B.2F.33.37.3B.3F .HS 23.27.2B.2F.33.37.3B.3F .HS 20.24.28.2C.30.34.38.3C .HS 20.24.28.2C.30.34.38.3C .HS 21.25.29.2D.31.35.39.3D .HS 21.25.29.2D.31.35.39.3D .HS 22.26.2A.2E.32.36.3A.3E .HS 22.26.2A.2E.32.36.3A.3E .HS 23.27.2B.2F.33.37.3B.3F .HS 23.27.2B.2F.33.37.3B.3F *-------------------------------------- Mono.NMasks .DA #%01111110 .DA #%01111101 .DA #%01111011 .DA #%01110111 .DA #%01101111 .DA #%01011111 .DA #%00111111 *-------------------------------------- Mono.Masks .DA #%00000001 .DA #%00000010 .DA #%00000100 .DA #%00001000 .DA #%00010000 .DA #%00100000 .DA #%01000000 *-------------------------------------- * bits to "and" to reset color of pixel (0 means nothing to do) *-------------------------------------- Color.NMasks .DA #%01110000,#%00000000,#%00000000,#%00000000 .DA #%00001111,#%01111110,#%00000000,#%00000000 .DA #%00000000,#%01100001,#%00000000,#%00000000 .DA #%00000000,#%00011111,#%01111100,#%00000000 .DA #%00000000,#%00000000,#%01000011,#%00000000 .DA #%00000000,#%00000000,#%00111111,#%01111000 .DA #%00000000,#%00000000,#%00000000,#%00000111 *-------------------------------------- * bits to "and" to Get color of pixel (0 means nothing to do) * 4 bytes * 7 mods *-------------------------------------- Color.Masks .DA #%00001111,#%00000000,#%00000000,#%00000000 (nothing to do) .DA #%01110000,#%00000001,#%00000000,#%00000000 asl0,asl0,rol1,asl0,rol1,asl0,rol1 .DA #%00000000,#%00011110,#%00000000,#%00000000 lsr1 .DA #%00000000,#%01100000,#%00000011,#%00000000 asl1,asl1,rol2,asl1,rol2 .DA #%00000000,#%00000000,#%00111100,#%00000000 lsr2,lsr2 .DA #%00000000,#%00000000,#%01000000,#%00000111 asl2,asl2,rol3 .DA #%00000000,#%00000000,#%00000000,#%01111000 lsr3,lsr3,lsr3 *-------------------------------------- Color.Enable .DA #%10001111,#%00000000,#%00000000,#%00000000 .DA #%11110000,#%00000001,#%00000000,#%00000000 .DA #%00000000,#%10011110,#%00000000,#%00000000 .DA #%00000000,#%11100000,#%00000011,#%00000000 .DA #%00000000,#%00000000,#%10111100,#%00000000 .DA #%00000000,#%00000000,#%11000000,#%00000111 .DA #%00000000,#%00000000,#%00000000,#%11111000 *-------------------------------------- * bits to "ora" to set color of pixel (including "color bit set " for byte hosting bit0) * 4 bytes * 16 Colors * pixel masks c1110000.c3322221.c5444433.c6666555 *-------------------------------------- Color.Pixels .DA #%00000000,#%00000000,#%00000000,#%00000000 (color bit disable) .DA #%10010001,#%10100010,#%11000100,#%10001000 .DA #%10100010,#%11000100,#%10001000,#%10010001 .DA #%10110011,#%11100110,#%11001100,#%10011001 .DA #%11000100,#%10001000,#%10010001,#%10100010 .DA #%11010101,#%10101010,#%11010101,#%10101010 .DA #%11100110,#%11001100,#%10011001,#%10110011 .DA #%11110111,#%11101110,#%11011101,#%10111011 .DA #%10001000,#%10010001,#%10100010,#%11000100 .DA #%10011001,#%10110011,#%11100110,#%11001100 .DA #%10101010,#%11010101,#%10101010,#%11010101 .DA #%10111011,#%11110111,#%11101111,#%11011101 .DA #%11001100,#%10011001,#%10110011,#%11100110 .DA #%11011101,#%10111011,#%11110111,#%11101110 .DA #%11101110,#%11011101,#%10111011,#%11110111 .DA #%01111111,#%01111111,#%01111111,#%01111111 (color bit disable) *Black 00 00 00 00 0000 *Magenta 08 11 22 44 0001 *Brown 44 08 11 22 0010 *Orange 4C 19 33 66 0011 *Dark Green 22 44 08 11 0100 *Grey1 2A 55 2A 55 0101 *Green 66 4C 19 33 0110 *Yellow 6E 5D 3B 77 0111 *Dark Blue 11 22 44 08 1000 *Violet 19 33 66 4C 1001 *Grey2 55 2A 55 2A 1010 *Pink 5D 3B 77 6E 1011 *Medium Blue 33 66 4C 19 1100 *Light Blue 3B 77 6E 5D 1101 *Aqua 77 6E 5D 3B 1110 *White 7F 7F 7F 7F 1111 *-------------------------------------- DEVNAME >PSTRING "GFX" *-------------------------------------- DS.START DEVINFO .DA #S.DEV.F.GFX type of DEVINFO STRUCT DEVINFO.MODES .DA #%10000011 XOR,16 & B/W DEVINFO.W .DA 560 X.SIZE DEVINFO.H .DA 192 Y.SIZE DS.END *-------------------------------------- MAN SAVE DRV/DHGR.DRV.S ASM