Valamilyen programoz si feladat megold sakor gyakran szks‚gnk lehet vill mgyors rajzol si funkci¢kra. Az al bbi rutinok seg¡ts‚g‚vel saj t - ak r BASIC, ak r g‚pi k¢d£ - programjainkban rendk¡vl gyors rajzol¢ funkci¢kat haszn lhatunk fel. BASIC programb¢l a SYS..., g‚pi k¢d£ programb¢l pedig a JSR... utas¡t ssal ind¡thatjuk be a rajzol¢rutint. Az egyes funkci¢k kezd“c¡mei az al bbi list ban tal lhat¢k: $c800 51200 grafikus k‚perny“ bekapcsol sa $c803 51203 grafikus k‚perny“ kikapcsol sa $c806 51206 grafikus k‚perny“ t”rl‚se $c809 51209 sz¡nmem¢ria be ll¡t sa $c80c 51212 egy (x1;y1) koordin t j£ pont bekapcsol sa $c80f 51215 egy (x1;y1) koordin t j£ pont kikapcsol sa $c812 51218 egyenes rajzol sa (x1;y1), (x2;y2) koordin t k k”z‚ $c815 51221 egyenes t”rl‚se (x1;y1), (x2;y2) koordin t k k”z”tt A grafikus k‚perny“ a $e000-$ff3f, a hozz tartoz¢ sz¡nmem¢ria pedig a $c000-$c3e7 terleten tal lhat¢. A grafikus k‚perny“ kikapcsol sakor a videoregiszterek eredeti ‚rt‚kkre  llnak visza. A sz¡nmem¢ria be ll¡t s n l az akkumul torba kell t”ltennk azt az ‚rt‚ket, amivel fel szeretn‚nk t”lteni a sz¡nmem¢ri t. Ezt g‚pi k¢db¢l egyszer–en egy LDA #nn utas¡t ssal tehetjk meg. Basic-b“l a sys utas¡t s kiad sa el“tt kell az akkumul tort be ll¡tanunk a megfelel“ rendszerv ltoz¢ban, ami a 780-as c¡men tal lhat¢. A pont be- illetve kikapcsol sa rutinok haszn lata el“tt az x1 ‚s az y1 v ltoz¢kat mindig be kell  ll¡tanunk a k¡v nt ‚rt‚kre, ellenkez“ esetben a program a legutolj ra haszn lt adatokat tekinti m‚rvad¢nak. Teh t am¡g ugyanazt az x1-y1 koordin tap rt haszn ljuk, addig a megfelel“ v ltoz¢it nem kell be ll¡tanunk a programnak. Ez basic h¡v sn l jelent“sen megn”velheti a fut si sebess‚get. Fontos tudni, hogy a koordin t k t rol s ra haszn lt rendszerterletet a basic nem haszn lja, viszont bizonyos kernal rutinok : f“leg a LOAD : akt¡van haszn lj k “ket, teh t ha ilyen rutint haszn ltunk, mindenk‚ppen £jra kell defini lnunk a param‚tereket. Az x koordin ta ‚rt‚ke 0-319, az y ‚rt‚ke 0-199 tartom nyban mozoghat. Ezekt“l elt‚r“ ‚rt‚kek haszn lata pillanatokon bell lefagyasztja a rendszert. A program az‚rt nem ellen“rzi ezeknek az adatoknak a helyess‚g‚t, mert ez a m–velet egy pont be ll¡t sakor majdnem a negyede lenne az eredeti funkci¢ v‚grehajt si idej‚nek. A vonal h£z sa ‚s t”rl‚se funkci¢n l k‚t tov bbi adatot is be kell  ll¡tanunk; ezek az x2 valamint az y2 v ltoz¢k. Ezek haszn lat ra ugyanaz vonatkozik, mint amit az x1 ‚s az y1 param‚terekn‚l m r eml¡tettnk. Az x2-y2 koordin tap r mindig a t”rlend“ vagy rajzoland¢ vonal utols¢ pontja. Mivel a rutin kikapcsolt rom-terlettel dolgozik, a felhaszn l¢nak valamilyen m¢don gondoskodnia kell arr¢l, hogy a rendszer ne kaphasson NMI k‚r‚st a RESTORE gomb megnyom s val. Ezt az Olvas¢ra b¡zzuk, hiszen ez teljesen a rutin felhaszn l s nak m¢dj t¢l fgg. Az IRQ megszak¡t sok le vannak tiltva, azokra nem kell figyelnnk. profi-ass v1.2 120: c800 .opt o1 130: c800 *= $c800 140: 0057 bt = $57 bitmaszk a k‚ppontok ki/bekapcsol s hoz 150: 0058 cim = $58 egy koordin t nak megfelel“ byte mem¢riac¡me 160: 005a aa = $5a az egyenes v¡zszintes m‚rete 170: 005c b = $5c az egyenes fgg“leges m‚rete 180: 005d c = $5d az egyenes v¡zszintes ir nya 190: 005e d = $5e az egyenes fgg“leges ir nya 200: 005f sz = $5f sz ml l¢ az egyenes meredeks‚g‚hez 210: 00ae x1 = $ae egyenes / k‚ppont kezd“ x koordin t ja 220: 00b0 x2 = $b0 egyenes / k‚ppont kezd“ y koordin t ja 230: 00b2 y1 = $b2 egyenes utols¢ x koordin t ja 240: 00b3 y2 = $b3 egyenes utols¢ y koordin t ja 250: ; 260: ; 270: c800 4c 18 c8 jmp gron grafikus k‚perny“ bekapcsol sa 280: c803 4c 44 c8 jmp groff grafikus k‚perny“ kikapcsol sa 290: c806 4c 61 c8 jmp gclear grafikus k‚perny“ t”rl‚se 300: c809 4c 79 c8 jmp color sz¡nmem¢ria be ll¡t sa 310: c80c 4c 02 c9 jmp set egy (x1;y1) koordin t j£ pont bekapcsol sa 320: c80f 4c 05 c9 jmp reset egy (x1;y1) koordin t j£ pont kikapcsol sa 330: c812 4c 31 c9 jmp line egyenes rajzol sa (x1;y1), (x2;y2) koordin t k k”z‚ 340: c815 4c 34 c9 jmp reline egyenes t”rl‚se (x1;y1), (x2;y2) koordin t k k”z”tt 350: ; 360: ; 370: c818 ad 11 d0 gron lda $d011 grafikus m¢d t rol sa 370: c81b 8d 5e c8 sta g1 380: c81e ad 18 d0 lda $d018 mem¢riafeloszt s t rol sa 380: c821 8d 5f c8 sta g2 380: c824 ad 00 dd lda $dd00 aktu lis videolap t rol sa 380: c827 8d 60 c8 sta g3 390: c82a ad 12 d0 g lda $d012 v r, m¡g a k‚pel“ ll¡t s nem l tsz¢ terletre kerl, 390: c82d c9 fb cmp #$fb ezzel villog smentes lesz a 390: c82f d0 f9 bne g grafikus zemm¢d megv ltoztat sa 400: c831 a9 3b lda #$3b 400: c833 8d 11 d0 sta $d011 bitt‚rk‚pes zemm¢d bekapcsol sa 410: c836 a9 08 lda #8 410: c838 8d 18 d0 sta $d018 bitt‚rk‚p: $e000-$ff3f, sz¡nmem¢ria: $c000-$c3e7 420: c83b ad 00 dd lda $dd00 420: c83e 29 fc and #$fc 420: c840 8d 00 dd sta $dd00 videolap: $c000-$ffff 430: c843 60 rts visszat‚r‚s a szubrutinb¢l 440: ; 450: c844 ad 12 d0 groff lda $d012 v r, m¡g a k‚pel“ ll¡t s nem l tsz¢ terletre kerl, 450: c847 c9 fb cmp #$fb ezzel villog smentes lesz a 450: c849 d0 f9 bne groff grafikus zemm¢d megv ltoztat sa 460: c84b ad 5e c8 lda g1 460: c84e 8d 11 d0 sta $d011 eredeti kijelz‚si m¢d be ll¡t sa 470: c851 ad 5f c8 lda g2 470: c854 8d 18 d0 sta $d018 mem¢riafeloszt s vissza ll¡t sa 480: c857 ad 60 c8 lda g3 480: c85a 8d 00 dd sta $dd00 videolap vissza ll¡t sa 490: c85d 60 rts visszat‚r‚s a szubrutinb¢l 500: ; 510: c85e 00 g1 .byte 0 az eredeti grafikus zemm¢d adatai 520: c85f 00 g2 .byte 0 530: c860 00 g3 .byte 0 540: ; 550: c861 a9 00 gclear lda #0 $e000-$ffff felt”lt‚se null val 550: c863 a0 e0 ldy #$e0 560: c865 8d 6d c8 sta cl+1 560: c868 8c 6e c8 sty cl+2 570: c86b a8 tay 580: c86c 99 ff ff cl sta $ffff,y 580: c86f c8 iny 580: c870 d0 fa bne cl 590: c872 ee 6e c8 inc cl+2 590: c875 d0 f5 bne cl 600: c877 a9 01 lda #$01 610: ; 620: c879 48 color pha az aktu lis sz¡n t rol sa 620: c87a a9 00 lda #0 $c000-$c3ff felt”lt‚se a kiv lasztott sz¡nnel 620: c87c a0 c0 ldy #$c0 630: c87e 8d 87 c8 sta co+1 630: c881 8c 88 c8 sty co+2 640: c884 a8 tay 640: c885 68 pla 650: c886 99 ff ff co sta $ffff,y 650: c889 c8 iny 650: c88a d0 fa bne co 660: c88c ee 88 c8 inc co+2 660: c88f ae 88 c8 ldx co+2 660: c892 e0 c4 cpx #$c4 660: c894 d0 f0 bne co 670: c896 60 rts visszat‚r‚s a szubrutinb¢l 680: ; 690: c897 a5 ae kord lda x1 int(x1/8)*8 690: c899 29 f8 and #248 az als¢ h rom bit kisz–r‚se 690: c89b 85 58 sta cim 700: c89d a5 b2 lda y1 y1 koordin ta minden nyolcadik sorn l 700: c89f aa tax 320-szal szorzand¢ 700: c8a0 29 07 and #7 700: c8a2 18 clc 710: c8a3 65 58 adc cim y1-int(y1/8)*8 710: c8a5 85 58 sta cim 720: ; 730: c8a7 8a txa int(y1/8) 730: c8a8 4a lsr a 730: c8a9 4a lsr a 730: c8aa 4a lsr a 730: c8ab 0a asl a indexel‚s a t bl zat olvas s hoz 730: c8ac aa tax 740: c8ad bd d0 c8 lda tabla,x int (y1/8)*320 740: c8b0 65 58 adc cim 740: c8b2 85 58 sta cim 750: c8b4 bd d1 c8 lda tabla+1,x 750: c8b7 69 e0 adc #$e0 a grafikus adatterlet kezd“c¡me 750: c8b9 65 af adc x1+1 750: c8bb 85 59 sta cim+1 760: c8bd a5 ae lda x1 bitmutat¢ kisz m¡t sa 760: c8bf 29 07 and #7 760: c8c1 aa tax 770: c8c2 bd c8 c8 lda btabla,x 2"(7-(x1 and 7)) 770: c8c5 85 57 sta bt 780: c8c7 60 rts visszat‚r‚s a szubrutinb¢l 790: ; a k‚ppontok helye egy byte-on bell 800: c8c8 80 40 20 btabla .byte $80,$40,$20,$10,$08,$04,$02,$01 810: ; 820: c8d0 00 00 tabla .word 0 szorz¢t bla: n*320 Dn (0...24) 830: c8d2 40 01 .word 320 840: c8d4 80 02 .word 640 850: c8d6 c0 03 .word 960 860: c8d8 00 05 .word 1280 870: c8da 40 06 .word 1600 880: c8dc 80 07 .word 1920 890: c8de c0 08 .word 2240 900: c8e0 00 0a .word 2560 910: c8e2 40 0b .word 2880 920: c8e4 80 0c .word 3200 930: c8e6 c0 0d .word 3520 940: c8e8 00 0f .word 3840 950: c8ea 40 10 .word 4160 960: c8ec 80 11 .word 4480 970: c8ee c0 12 .word 4800 980: c8f0 00 14 .word 5120 990: c8f2 40 15 .word 5440 1000: c8f4 80 16 .word 5760 1010: c8f6 c0 17 .word 6080 1020: c8f8 00 19 .word 6400 1030: c8fa 40 1a .word 6720 1040: c8fc 80 1b .word 7040 1050: c8fe c0 1c .word 7360 1060: c900 00 1e .word 7680 1070: ; 1080: ; 1090: c902 a9 00 set lda #$00 bekapcsol s jelz‚se 1100: c904 2c .byte $2c a k”vetkez“ utas¡t s kihagy sa 1110: c905 a9 80 reset lda #$80 kikapcsol s jelz‚se 1120: c907 8d b2 ca sta flag 1130: c90a 08 php interrupt flag t rol sa 1130: c90b a5 01 lda 1 ROM st tusz t rol sa a 1130: c90d 48 pha verembe 1130: c90e 78 sei megszak¡t sok letilt sa 1130: c90f a9 35 lda #$35 1130: c911 85 01 sta 1 $e000 feletti terlet RAM 1140: ; 1150: c913 20 97 c8 jsr kord a pontnak megfelel“ t rc¡m kisz m¡t sa 1150: c916 20 1e c9 jsr plot pont be ll¡t sa 1160: c919 68 pla t rkioszt s vissza ll¡t sa 1160: c91a 85 01 sta 1 1160: c91c 28 plp interrupt flag be ll¡t sa 1160: c91d 60 rts visszat‚r‚s a szubrutinb¢l 1170: ; 1180: c91e a0 00 plot ldy #0 indexel‚s null z sa 1190: c920 a5 57 lda bt bitmaszk beolvas sa 1190: c922 2c b2 ca bit flag rajzol si m¢d tesztel‚se 1190: c925 10 05 bpl be ha a 7. bit alacsony, a k‚ppont bekapcsol sa 1200: c927 49 ff eor #$ff bitmaszk invert l sa 1200: c929 31 58 and (cim),y pont kikapcsol s 1210: c92b 2c .byte $2c a k”vetkez“ m–velet kihagy sa 1220: c92c 11 58 be ora (cim),y pont bekapcsol s 1230: c92e 91 58 sta (cim),y az eredm‚ny t rol sa 1240: c930 60 rts visszat‚r‚s a szubrutinb¢l 1250: ; 1260: c931 a9 00 line lda #0 bekapcsol s jelz‚se 1270: c933 2c .byte $2c 1280: c934 a9 80 reline lda #$80 kikapcsol s jelz‚se 1290: c936 8d b2 ca sta flag 1300: c939 08 php interrupt flag t rol sa 1300: c93a a5 01 lda 1 ROM st tusz t rol sa a 1300: c93c 48 pha verembe 1300: c93d 78 sei megszak¡t sok letilt sa 1300: c93e a9 35 lda #$35 1300: c940 85 01 sta 1 $e000 feletti terlet RAM 1310: c942 20 76 c9 jsr draw egyenes rajzol sa (x1;y1), (x2;y2) koordin t k k”z‚ 1320: c945 68 pla 1320: c946 85 01 sta 1 t rkioszt s vissza ll¡t sa 1320: c948 28 plp interrupt flag be ll¡t sa 1320: c949 60 rts visszat‚r‚s a szubrutinb¢l 1330: ;