home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er Special 67
/
64er_Magazin_Sonderheft_67_19xx_Markt__Technik_de_Side_A.d64
/
erweiterung.src
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
7KB
|
436 lines
100 ;erweiterung.src
110 ;
120 *=49152
130 &=*
140 ;
150 zp1=$fb ;pointer zeropage
160 zp2=$fd ;von 252 bis 255
170 ;
180 bsch =$0400
190 buffer =$c400; bild
200 chrout =$ffd2; ausgabe 1 zeichen
210 ;
220 pa=56576 ; userport a
230 pb=56577 ; userport b
240 d1=56578 ; datenricht. port a
250 d2=56579 ; datenricht. port b
260 ;
270 dap1=830 ; 8255 port a
280 dap2=831 ; 8255 port b
290 dap3=832 ; 8255 port c
300 ;
310 ;
320 jmp demo ; testprogramm
330 jmp resetout ; reset fuer ausgabe
340 jmp ausgabe ; ausgabe dap1-dap3
350 jmp resetin ; reset fuer eingabe
360 jmp eingabe ; 8255 in dap1-dap3
370 jmp farbe ; ausgabe muster
380 jmp bschload ; bildschirm aufbauen
390 ;
400 reset ;reset allgemein
410 sei ;irq verhindern
420 lda d1 ;porta, pa2=ausgabe
430 ora #4
440 sta d1
450 ;
460 lda #255 ;portb=ausgabe
470 sta d2
480 ;
490 lda pa
500 pha ;porta merken
510 ora #%00000100
520 sta pa ;waehlt4042
530 lda #%00001110;next data fuer 8255
540 sta pb ;ist steuerbefehl
550 lda pa
560 and #%11111011
570 sta pa ;waehlt 8255
580 ;
590 ;
600 lda btr ;steuerbefehl fuer
610 ora #%10000000; 8255
620 sta pb
630 ;
640 lda #0 ;portb=eingabe
650 sta d2
660 pla ;porta
670 sta pa ;alter wert
680 cli
690 rts
700 ;
710 flag. 0
720 btr .%00000000;steuerbefehl
730 logiko ;ausgabebefehle
740 .%00000010,%00000110,%00001010
750 ;
760 out ;ausgabe
770 sei
780 ;
790 ldx #0 ;schleife =0
800 lda #255 ;portb = ausgabe
810 sta d2
820 lda pa
830 pha ;port a merken
840 lout1 ;beginn schleife
850 lda pa
860 ora #%00000100
870 sta pa ;waehlt 4042
880 lda logiko,x ;daten sind ausgaben
890 sta pb ; fuer 8255
900 lda pa
910 and #%11111011
920 sta pa ;waehlt 8255
930 lda dap1,x ;daten an 8255
940 sta pb
950 inx
960 cpx #3
970 bne lout1 ;schleifenende
980 lda #0
990 sta d2 ;pb = eingabe
1000 pla
1010 sta pa ;pa = alter wert
1020 cli
1030 rts ;ende out
1040 ;
1050 bschload ;holt bildschirm
1060 lda #11
1070 sta 53280
1080 sta 53281
1090 lda #"[144]"
1100 jsr chrout
1110 lda #"[147]"
1120 jsr chrout
1130 ;
1140 lda #<bsch
1150 ldx #>bsch
1160 sta zp1
1170 stx zp1+1
1180 lda #<buffer
1190 ldx #>buffer
1200 sta zp2
1210 stx zp2+1
1220 ;
1230 ldx #3
1240 ldy #0
1250 bslo1
1260 lda (zp2),y
1270 sta (zp1),y
1280 iny
1290 bne bslo1
1300 inc zp1+1
1310 inc zp2+1
1320 dex
1330 bne bslo1
1340 rts
1350 ;
1360 tbs ."qwertyuiop@*asdfghjkl:;="
1370 tbr ./qwertyuiop@*asdfghjkl:;=/
1380 tbz .'qwertyuiop@*asdfghjkl:;='
1390 tposl.<321,<324,<327,<330,<333
1400 .<336,<339,<342,<348,<351,<354
1410 .<357,<522,<525,<528,<531,<534
1420 .<537,<540,<543,<546,<549,<552
1430 .<555
1440 ;
1450 tposh.>321,>324,>327,>330,>333
1460 .>336,>339,>342,>348,>351,>354
1470 .>357,>522,>525,>528,>531,>534
1480 .>537,>540,>543,>546,>549,>552
1490 .>555
1500 ;
1510 tbyte .1,1,1,1,1,2,2,2,0,0,0,0
1520 .1,1,1,2,2,2,2,2,0,0,0,0
1530 tbit .8,16,32,64,128,2,16,64
1540 .1,2,4,16,4,2,1,8,4,1,32,128
1550 .128,64,32,8
1560 zeichen .0,0
1570 te1. / daten lesen (c)m&t/
1580 te2. / daten ausgeben (c)m&t /
1590 tea. /fehler ! port ist eingabe/
1600 ;
1610 demo ;einsprung testprg
1620 lda #1
1630 sta flag
1640 lda #87
1650 sta zeichen
1660 lda #81
1670 sta zeichen+1
1680 lda #0
1690 sta btr
1700 jsr reset
1710 jsr bschload
1720 ldx #0
1730 tel2
1740 lda te2,x
1750 sta bsch,x
1760 inx
1770 cpx #40
1780 bne tel2
1790 ;
1800 lda #0
1810 bset0
1820 sta dap1
1830 sta dap2
1840 sta dap3
1850 change
1860 jsr farbe
1870 bset2
1880 jsr out
1890 bset1
1900 lda #0
1910 sta 198
1920 tal
1930 lda 198
1940 beq tal
1950 ;
1960 lda #0
1970 sta 198
1980 lda 631
1990 sec
2000 cmp #3
2010 bne skip1
2020 lda #"[147]"
2030 jmp chrout
2040 rts
2050 skip1
2060 sec
2070 cmp #""
2080 bne skip2
2090 lda #0
2100 jmp bset0
2110 skip2
2120 sec
2130 cmp #32
2140 bne skip3
2150 ldx #0
2160 chal1
2170 lda dap1,x
2180 eor #255
2190 sta dap1,x
2200 inx
2210 cpx #3
2220 bne chal1
2230 jmp change
2240 skip3
2250 sec
2260 cmp #"[133]"
2270 bne skip4
2280 jmp eintest
2290 ;
2300 skip4
2310 ;
2320 ldx #0
2330 bswert
2340 sec
2350 cmp tbs,x
2360 beq bsetout
2370 inx
2380 cpx #24
2390 bne bswert
2400 beq bset1
2410 ;
2420 bsetout
2430 lda tbyte,x
2440 tay
2450 lda dap1,y
2460 eor tbit,x
2470 sta dap1,y
2480 jsr farbset
2490 jmp bset2
2500 ;
2510 farbset
2520 lda #<bsch
2530 sta zp1
2540 lda #>bsch
2550 sta zp1+1
2560 lda tposl,x
2570 clc
2580 adc zp1
2590 sta zp1
2600 bcc bsl1
2610 inc zp1+1
2620 bsl1
2630 lda tposh,x
2640 clc
2650 adc zp1+1
2660 sta zp1+1
2670 ;
2680 lda zp1
2690 sta zp2
2700 lda zp1+1
2710 clc
2720 adc #$d4
2730 sta zp2+1
2740 ;
2750 lda tbyte,x
2760 tay
2770 lda dap1,y
2780 and tbit,x
2790 bne gesetzt
2800 ldy #0
2810 lda zeichen
2820 sta (zp1),y
2830 lda #5
2840 sta (zp2),y
2850 lda flag
2860 beq quit1
2870 iny
2880 lda tbz,x
2890 sta (zp1),y
2900 lda #13
2910 sta (zp2),y
2920 quit1
2930 rts
2940 ;
2950 gesetzt
2960 ldy #0
2970 lda zeichen+1
2980 sta (zp1),y
2990 lda #26
3000 sta (zp2),y
3010 lda flag
3020 beq quit1
3030 iny
3040 lda tbr,x
3050 sta (zp1),y
3060 lda #1
3070 sta (zp2),y
3080 rts
3090 ;
3100 farbe ;einsprung belegung
3110 ldx #0
3120 fal1
3130 jsr farbset
3140 inx
3150 cpx #24
3160 bne fal1
3170 rts
3180 ;
3190 logiki ;eingabebefehle
3200 .%00000001,%00000101,%00001001
3210 ;
3220 in ;einsprung eingabe
3230 sei
3240 ;
3250 ldx #0
3260 lda pa
3270 pha ;pa merken
3280 lin1 ;beginn schleife
3290 lda pa
3300 ora #%00000100 ;schaltet auf 4042
3310 sta pa
3320 lda #255
3330 sta d2 ;pb=ausgabe
3340 lda logiki,x ;data ist eingabe
3350 sta pb ;fuer 8255
3360 lda pa
3370 and #%11111011
3380 sta pa ;schaltet auf 8255
3390 lda #0
3400 sta d2 ;pb = eingabe
3410 lda pb ;wert von pb
3420 sta dap1,x ;auf dap1-dap3
3430 inx
3440 cpx #3
3450 bne lin1 ;ende schleife
3460 pla
3470 sta pa ;pa = alter wert
3480 cli
3490 rts
3500 ;
3510 eintest ; einsprung
3520 jsr bschload ;eingabetest
3530 ldx #0
3540 tel1
3550 lda te1,x
3560 sta bsch,x
3570 inx
3580 cpx #40
3590 bne tel1
3600 ;
3610 lda #%00011011 ;steuerbefehl 8255
3620 sta btr ;alle ports eingabe
3630 jsr reset
3640 lda #100
3650 sta zeichen
3660 lda #234
3670 sta zeichen+1
3680 ;
3690 lda #0
3700 sta 198
3710 ;
3720 tal1
3730 lda 198
3740 beq tal2
3750 ;
3760 lda #0
3770 sta 198
3780 lda 631
3790 sec
3800 cmp #3
3810 bne tal3
3820 lda #"[147]"
3830 jmp chrout
3840 rts
3850 ;
3860 tal3
3870 sec
3880 cmp #"[133]"
3890 bne tal1
3900 ;
3910 jmp demo
3920 ;
3930 tal2
3940 jsr in
3950 jsr farbe
3960 jmp tal1
3970 ;
3980 ;
3990 resetout ;einsprung reset
4000 lda #0 ;fuer ausgabe
4010 sta flag
4020 lda #87
4030 sta zeichen
4040 lda #81
4050 sta zeichen+1
4060 lda #0 ;steuerbefehl 8255
4070 sta btr ;alle ports=ausgabe
4080 sta dap1 ;hilfsregister 1=0
4090 sta dap2 ; 2=0
4100 sta dap3 ; 3=0
4110 jmp reset
4120 ;
4130 resetin ;einspr.reset eing.
4140 lda #0
4150 sta flag
4160 lda #%00011011;8255 alle ports
4170 sta btr ;eingabe
4180 jsr reset
4190 lda #100
4200 sta zeichen
4210 lda #234
4220 sta zeichen+1
4230 jsr reset
4240 jmp in
4250 ;
4260 ausg1
4270 jmp out
4280 ;
4290 ausgabe ;einsprung ausgabe
4300 lda btr ;falls btr <>0
4310 beq ausg1
4320 ;
4330 ldx #22 ;type mismatch error
4340 jmp $a43a ;ausgeben
4350 ;
4360 eing1
4370 jmp in
4380 ;
4390 eingabe ;einsprung eingabe
4400 lda btr ;falls btr <>0
4410 bne eing1
4420 ;
4430 ldx #22 ;type mismatch error
4440 jmp $a43a ;ausgeben