home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Commodore Disc 41
/
Commodore_Disc_41_19xx_-_de.d64
/
cpu
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
5KB
|
182 lines
10 rem cpu=====================cbm
20 rem (p) 10/87 commodore welt
30 rem ===========================
40 rem by alfons mittelmeyer
50 rem
60 rem
70 rem basic v2.0
80 rem vc20,c64,c16/116/plus4,c128
90 rem ===========================
100 rem --------------------------
110 rem wortschatz
120 rem --------------------------
130 data ld,and,or,xor,add,adc,sub,sbb,shl,shr,rol,ror,dez,hex,bin,quit
140 data clc,sec,clb,seb,clr,bits
150 n=22:fi=2:fo=2:printchr$(147);
160 xx$=chr$(18)+" "+chr$(146)+chr$(157)
170 cb$="c":b1$(1)="1":b0$(1)="0":b1$(2)=".[146]":b0$(2)=".":bi=2
180 rem --------------------------
190 rem fehlermeldungen
200 rem --------------------------
210 goto310
220 printtab(20)"syntax error":goto310
230 printtab(20)"type mismatch":goto310
240 f=-1:printtab(20)"undefined flag":return
250 f=-1:printtab(20)"parameter error":return
260 f=-1:printtab(20)"undefined statement":return
270 printtab(20)"unknown command"
280 rem --------------------------
290 rem eingabe
300 rem --------------------------
310 print">"xx$;:cu=0:x$=" "
320 geta$:ifa$=""then320
330 a=asc(a$):ifa=13then410
340 ifa=20andcu<>0thenx$=left$(x$,cu):cu=cu-1:goto370
350 ifa<32ora>95then320
360 cu=cu+1:x$=x$+a$
370 printa$xx$;:goto320
380 rem --------------------------
390 rem schluesselwort
400 rem --------------------------
410 print" ";:x$=x$+" ":l=len(x$)
420 ifl=2then700
430 k=2:d$=" ":gosub1050
435 a$=left$(mn$,1)
436 ifa$="$"ora$="%"ora$="."or(a$>="0"anda$<="9")thenum=2:ii=1:k=0:goto580
440 restore:fori=1ton:reada$:ifa$=mn$thenj=i:i=n
450 next:ifa$<>mn$then270
460 ii=j:ifj<13then540
470 onj-12gosub 1650,1660,1670,1630,1620,1610,1600,1590,1640,1680
480 iffthen310
490 goto700
500 rem --------------------------
510 rem arithmetik + logik
520 rem --------------------------
530 d$=" ":gosub1050:iffthen220
540 mn$=mn$+" ":lm=len(mn$)
550 fori=lmto1step-1:ifmid$(mn$,i,1)<>" "thenj=i:i=1
560 next:mn$=left$(mn$,j):goto580
570 ifmn$<>"a"thengosub260:goto310
580 d$=" ":k=k+1:gosub1050
590 fi=1:a$=left$(mn$,1)
600 ifa$="$"thenfi=2
610 ifa$="%"thenfi=3
620 ifa$="."ora$="*"thenfi=4
622 aa$=a$
630 onfigosub1340,1400,1490,1550
635 ifmn<256then640
636 ifmn>65535then230
637 printtab(20)"wert: [";:
638 ifaa$<>"$"thenum=4:fa=65536:gosub1251:goto720
639 printright$(str$(mn),len(str$(mn))-1);:goto720
640 iffthen230
650 oniigosub770,780,790,800,810,840,860,880,900,950,930,980
660 iffthen310
670 rem --------------------------
680 rem ausgabe
690 rem --------------------------
700 printtab(20)"akku: [";
710 onfogosub1130,1250,1170,1170
720 print"]";:f$="":ifca=1thenf$=chr$(18)
730 print" "f$cb$chr$(146):goto310
740 rem --------------------------
750 rem alu-routinen
760 rem --------------------------
770 ak=mn:return
780 ak=akandmn:return
790 ak=akormn:return
800 ak=(akandnotmn)or(mnandnotak):return
810 ak=ak+mn:cb$="c"
820 ca=0:ifak>255thenak=ak-256:ca=1
830 return
840 ifcb$="b"then240
850 mn=mn+ca:goto810
860 ca=0:cb$="b":ak=ak-mn:ifak<0thenak=ak+256:ca=1
870 return
880 ifcb$="c"then240
890 mn=mn+ca:goto860
900 ca=0:i=512:cb$="c"
910 ifmn>8ormn=0then250
920 ak=(ak+ak+ca)*2^(mn-1):ak=ak-i*(int(ak/512)):goto820
930 ifcb$="b"then240
940 i=511:goto910
950 ca=0:cb$="c"
960 ifmn>8ormn=0then250
970 ak=256*ca+ak:al=int(ak/2^(mn-1)):ak=int(al/2):ca=al-ak-ak:return
980 ifmn>8ormn=0then250
990 ifcb$="b"then240
1000 an=2^(mn-1):ak=ak+(ak-an*int(ak/an))*512:goto970
1010 f=-1:return
1020 rem -------------------------
1030 rem leseroutinen
1040 rem -------------------------
1050 f=0:fori=ktol:a$=mid$(x$,i,1):ifa$<>" "thenj=i:i=l
1060 next
1070 fori=jtol:a$=mid$(x$,i,1):ifa$=d$thenk=i:i=l
1080 next:ifa$<>d$thenf=-1:return
1090 mn$=mid$(x$,j,k-j):j=n:return
1100 rem -------------------------
1110 rem dezimalausgabe
1120 rem -------------------------
1130 a$=str$(ak):printright$(a$,len(a$)-1);:return
1140 rem -------------------------
1150 rem binaerausgabe
1160 rem -------------------------
1170 iffo=3thenprint"%";
1172 mn=ak
1180 fori=1to8:mn=mn+mn
1190 ifmn>255thenmn=mn-256:printb1$(bi);:goto1210
1200 printb0$(bi);
1210 next:return
1220 rem -------------------------
1230 rem hex-ausgabe
1240 rem -------------------------
1250 mn=ak:um=2:fa=256
1251 print"$";:fori=1toum:mn=mn*16
1260 ifmn<fathenprint"0";:goto1300
1270 an=int(mn/fa):mn=mn-fa*an
1280 ifan<10thenprintchr$(an+48);:goto1300
1290 printchr$(an+55);
1300 next:return
1310 rem -------------------------
1320 rem dezimal-eingabe
1330 rem -------------------------
1340 mn=val(mn$):ifmn>65535then1010
1350 ifstr$(mn)<>" "+mn$then1010
1360 return
1370 rem -------------------------
1380 rem hex-eingabe
1390 rem -------------------------
1400 lm=len(mn$):iflm>3+umthen1010
1410 mn=0:fori=2tolm:a$=mid$(mn$,i,1):gosub1420:mn=16*mn+a:next:return
1420 a=asc(a$):ifa<48ora>70then1010
1430 ifa>57anda<65then1010
1440 ifa>64thena=a-7
1450 a=a-48:return
1460 rem -------------------------
1470 rem binaere eingabe
1480 rem -------------------------
1490 a=1:b1$="1":b0$="0"
1500 lm=len(mn$):iflm>8+athen1010
1510 mn=0:fori=1+atolm:a$=mid$(mn$,i,1)
1520 ifa$<>b1$anda$<>b0$then1010
1530 mn=mn+mn:ifa$=b1$thenmn=mn+1
1540 next:return
1550 a=0:b1$="*":b0$=".":goto1500
1560 rem -------------------------
1570 rem weitere routinen
1580 rem -------------------------
1590 ca=1:cb$="b":return
1600 ca=0:cb$="b":return
1610 ca=1:cb$="c":return
1620 ca=0:cb$="c":return
1630 end
1640 printchr$(147);:goto1010
1650 fo=1:return
1660 fo=2:return
1670 fo=3:bi=1:return
1680 fo=4:bi=2:return
1690 rem =========================
1700 rem e n d e
1710 rem =========================