-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy path29R_Z-80.bc2
501 lines (500 loc) · 13.6 KB
/
29R_Z-80.bc2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
1000 A=200:GOTO20:REM Z80
1010 REM
1020 REM --INIT--
1030 REM
1040 DIMHE$(16):DIMBI(8):DIMHU(8):DIMH$(2):RESTORE
1050 FORI=1 TO16
1060 READHE$(I)
1070 NEXTI
1080 A=0:B=0:CA=0
1500 REM
1510 REM --HOOFDLUS--
1520 REM
1530 GOSUB2000:REM UITLEG
1540 GOSUB2500:REM SCHERMOPBOUW
1550 GOSUB3000:REM MENU
1552 IFIN$="1" THENGOSUB4000
1554 IFIN$="2" THENGOSUB4100
1556 IFIN$="3" THENGOSUB4500
1558 IFIN$="4" THENGOSUB5000
1560 IFIN$="5" THENGOSUB5500
1562 IFIN$="6" THENGOSUB6000
1564 IFIN$="7" THENGOSUB6500
1566 IFIN$="8" THENGOSUB7000
1568 IF(IN$="A") OR(IN$="a") THENGOSUB7500
1570 IF(IN$="B") OR(IN$="b") THENGOSUB8000
1572 IF(IN$="C") OR(IN$="c") THENGOSUB8500
1574 IF(IN$="D") OR(IN$="d") THENGOSUB9000
1576 IF(IN$="E") OR(IN$="e") THENGOSUB9500
1578 IF(IN$="F") OR(IN$="f") THENGOSUB10000
1580 IF(IN$="G") OR(IN$="g") THENGOSUB10500
1585 IF(IN$="H") OR(IN$="h") THENGOSUB11000
1590 GOTO1550
2000 REM
2010 REM --UITLEG--
2020 REM
2030 GOSUB100
2050 PRINT"Z80--Z80--Z80--Z80--Z80--Z80--Z80--Z80":PRINT
2055 PRINT:PRINT"Nu de markt verzadigd raakt met PC's,"
2060 PRINT"die minstens met 16 bits werken, raakt"
2065 PRINT"de belangstelling voor 8 bits computers"
2070 PRINT"(de meeste homecomputers) een beetje op"
2072 PRINT"achtergrond."
2075 PRINT"Een erg bekende 8-bits processor is de"
2080 PRINT"Z80.Het is zeer de moeite waard om zich"
2085 PRINT"in de werking van de Z80 te verdiepen."
2090 PRINT"Dit programma laat de werking zien van"
2095 PRINT"1 en 2 byte instrukties."
2100 PRINT"Het kan misschien voor u een begin zijn"
2105 PRINT"om in assembler te gaan programeren."
2110 PRINT"U treft het dan met de Z80, er zijn erg"
2115 PRINT"veel boeken over deze processor ge-"
2120 PRINT"schreven die u behulpzaam kunnen zijn."
2125 GOSUB23000:GOSUB100
2130 PRINT"Het programma:"
2135 PRINT:PRINT"Het programma toont een scherm met de"
2140 PRINT"accumulator (A) en een register (B)."
2145 PRINT:PRINT"De accumulator is een register waarin"
2150 PRINT"het resultaat van rekenkundige of"
2155 PRINT"logische bewerkingen wordt bewaard."
2175 PRINT:PRINT"Steeds toont het programma het"
2180 PRINT"resultaat van een bewerking met A."
2185 PRINT"Daarna wordt het resultaat overge-"
2190 PRINT"bracht naar A."
2200 HO=0:VE=17:GOSUB110
2210 PRINT"Voor de SPECTRUM bestaat er een versie"
2215 PRINT"van dit programma in machinecode:"
2220 PRINT:PRINT" 'THE MACHINECODE TUTOR'"
2225 GOSUB23000
2230 GOSUB100
2240 PRINT"Een greep uit Z80-computers"
2245 PRINT"...........................":PRINT
2250 PRINT:PRINT"** Sinclair ZX/81,Sinclair ZX Spectrum"
2255 PRINT:PRINT"** Alle MSX-computers"
2260 PRINT:PRINT"** Exidy Sorcerer,Newbrain,P2000 T&M"
2265 PRINT:PRINT"** TRS 80 I II III,Osborne"
2270 PRINT:PRINT"** Nascom,Sharp MZ-80B MZ-80K PC-3201"
2280 GOSUB23000
2290 RETURN
2500 REM
2510 REM --SCHERMOPBOUW--
2520 REM
2530 GOSUB100
2540 PRINT"Z80 1&2 BYTES INSTRUCTIES Z80"
2550 PRINT:PRINT" +---+---+---+---+---+---+---+---+"
2560 PRINT"A ! 0 ! 0 ! 0 ! 0 ! 0 ! 0 ! 0 ! 0 !"
2570 PRINT" +---+---+---+---+---+---+---+---+"
2575 HO=4:VE=5:GOSUB110:PRINT"HEX:00 DEC:0"
2580 PRINT" +---+---+---+---+---+---+---+---+"
2590 PRINT"B ! 0 ! 0 ! 0 ! 0 ! 0 ! 0 ! 0 ! 0 !"
2600 PRINT" +---+---+---+---+---+---+---+---+"
2605 HO=4:VE=9:GOSUB110:PRINT"HEX:00 DEC:0"
2610 PRINT:PRINT"CARRY Resultaat ZERO"
2620 PRINT"===+---+---+---+---+---+---+---+---+==="
2630 PRINT" 0 ! 0 ! 0 ! 0 ! 0 ! 0 ! 0 ! 0 ! 0 ! 0 "
2640 PRINT"===+---+---+---+---+---+---+---+---+==="
2650 RETURN
3000 REM
3010 REM --MENU--
3020 REM
3030 GOSUB23100
3040 HO=0:VE=16:GOSUB110
3050 PRINT"1..WAARDE VOOR A":HO=22:GOSUB110
3055 PRINT"A..COMPLEMENT":VE=17:HO=0:GOSUB110
3060 PRINT"2..WAARDE VOOR B":HO=22:GOSUB110
3065 PRINT"B..NEGATE":HO=0:VE=18:GOSUB110
3070 PRINT"3..SHIFT LEFT":HO=22:GOSUB110
3075 PRINT"C..ADD B":HO=0:VE=19:GOSUB110
3080 PRINT"4..SHIFT RIGHT":HO=22:GOSUB110
3085 PRINT"D..SUBTRACT B":HO=0:VE=20:GOSUB110
3090 PRINT"5..ROTATE LEFT":HO=22:GOSUB110
3095 PRINT"E..COMPARE WITH B":HO=0:VE=21:GOSUB110
3100 PRINT"6..ROTATE RIGHT":HO=22:GOSUB110
3105 PRINT"F..AND WITH B":HO=0:VE=22:GOSUB110
3120 PRINT"7..INCREMENT":HO=22:GOSUB110
3125 PRINT"G..OR WITH B":HO=0:VE=23:GOSUB110
3130 PRINT"8..DECREMENT";:HO=22:GOSUB110
3135 PRINT"H..XOR WITH B";
3140 GOSUB210
3150 RETURN
4000 REM
4010 REM --INGAVE WAARDE A--
4020 REM
4022 GOSUB23100
4024 HO=0:VE=18:GOSUB110
4026 PRINT"Geef waarde voor A (0-255) ";:INPUTA
4028 IF(A<0) OR(A>255) THENGOSUB250:GOTO4022
4030 GOSUB24000
4032 RETURN
4100 REM
4110 REM --INGAVE WAARDE B--
4120 REM
4122 GOSUB23100
4124 HO=0:VE=18:GOSUB110
4126 PRINT"Geef waarde voor B (0-255) ";:INPUTB
4128 IF(B<0) OR(B>255) THENGOSUB250:GOTO4122
4130 GOSUB24100
4132 RETURN
4500 REM
4510 REM --SHIFT LEFT--
4520 REM
4530 GOSUB23100
4540 HO=0:VE=16:GOSUB110
4550 PRINT"SHIFT LEFT"
4560 PRINT:PRINT"Elk bit verschuift een bitpositie naar"
4570 PRINT"links."
4580 PRINT"Bit 0 wordt 0, bit 7 gaat naar de"
4585 PRINT"CARRY VLAG."
4590 DE=A:GOSUB20000
4600 CA=BI(1)
4610 FORI=1 TO7
4620 BI(I)=BI(I+1)
4630 NEXTI
4640 BI(8)=0
4650 GOSUB24200
4660 RETURN
5000 REM
5010 REM --SHIFT RIGHT--
5020 REM
5030 GOSUB23100
5040 HO=0:VE=16:GOSUB110
5050 PRINT"SHIFT RIGHT"
5060 PRINT:PRINT"Alle bits worden een bitpositie naar"
5070 PRINT"rechts verplaatst, bit 7 wordt 0."
5080 PRINT
5090 PRINT"Bit 0 gaat naar de CARRY VLAG"
5100 DE=A:GOSUB20000
5110 CA=BI(8)
5120 FORI=8 TO2 STEP-1
5230 BI(I)=BI(I-1)
5240 NEXTI
5250 BI(1)=0:GOSUB24200
5260 RETURN
5500 REM
5510 REM --ROTATE LEFT--
5520 REM
5530 GOSUB23100
5540 HO=0:VE=16:GOSUB110
5550 PRINT"ROTATE LEFT"
5560 PRINT:PRINT"De bits schuiven een bit naar links,"
5570 PRINT"bit 7 roteert naar bit 0."
5580 PRINT"De CARRY VLAG krijgt de waarde van"
5585 PRINT"bit 7."
5600 DE=A:GOSUB20000
5610 CA=BI(1)
5620 FORI=1 TO7
5630 BI(I)=BI(I+1)
5640 NEXTI
5650 BI(8)=CA
5660 GOSUB24200
5670 RETURN
6000 REM
6010 REM --ROTATE RIGHT--
6020 REM
6030 GOSUB23100
6040 HO=0:VE=16:GOSUB110
6050 PRINT"ROTATE RIGHT"
6060 PRINT:PRINT"Alle bits gaan een bitpositie naar"
6065 PRINT"rechts."
6070 PRINT"Bit 0 roteert naar bit 7, CARRY VLAG"
6080 PRINT"krijgt de waarde van bit 0"
6100 DE=A:GOSUB20000
6110 CA=BI(8)
6120 FORI=8 TO2 STEP-1
6130 BI(I)=BI(I-1)
6140 NEXTI
6150 BI(1)=CA
6160 GOSUB24200
6170 RETURN
6500 REM
6510 REM --INCREMENT--
6520 REM
6530 GOSUB23100
6540 HO=0:VE=16:GOSUB110
6550 PRINT"INCREMENT"
6560 PRINT:PRINT"Deze instruktie verhoogt de inhoud"
6570 PRINT"van A met 1."
6580 A=A+1
6590 CA=0:IFA=256 THENA=0
6600 DE=A:GOSUB20000
6610 GOSUB24200
6620 RETURN
7000 REM
7010 REM --DECREMENT--
7020 REM
7030 GOSUB23100
7040 HO=0:VE=16:GOSUB110
7050 PRINT"DECREMENT"
7060 PRINT:PRINT"Deze instruktie verlaagt de inhoud"
7070 PRINT"van A met 1."
7080 A=A-1
7090 IFA=-1 THENA=255
7100 CA=0:DE=A:GOSUB20000
7110 GOSUB24200
7120 RETURN
7500 REM
7510 REM --COMPLEMENT--
7520 REM
7530 GOSUB23100:HO=0:VE=16:GOSUB110
7540 PRINT"COMPLEMENT"
7550 PRINT:PRINT"0 wordt 1, en 1 wordt 0."
7560 PRINT:PRINT"Logische operator 'NOT'"
7570 DE=A:GOSUB20000
7580 FORI=1 TO8
7590 BI(I)=1-BI(I)
7610 NEXTI
7620 CA=0:GOSUB24200
7630 RETURN
8000 REM
8010 REM --NEGATE--
8020 REM
8030 GOSUB23100
8040 HO=0:VE=16:GOSUB110
8050 PRINT"NEGATE"
8060 PRINT:PRINT"NEGATE trekt de waarde in het register"
8070 PRINT"af van 0 (256)"
8080 PRINT"De CARRY VLAG komt altijd op 1, behalve"
8090 PRINT"bij NEGATE 0"
8100 IFA=0 THENGOSUB23000:GOTO8130
8110 A=256-A:DE=A:GOSUB20000
8120 CA=1:GOSUB24200
8130 RETURN
8500 REM
8510 REM --ADD B--
8520 REM
8530 GOSUB23100
8540 HO=0:VE=16:GOSUB110
8550 PRINT"ADD B"
8560 PRINT:PRINT"De inhoud van register B wordt bij A"
8570 PRINT"opgeteld."
8580 PRINT"Als de waarde A groter wordt dan 255,"
8590 PRINT"dan wordt de CARRY VLAG 1."
8600 A=A+B
8610 CA=0
8620 IF(A>255) THENA=A-256:CA=1
8630 DE=A:GOSUB20000
8640 GOSUB24200
8650 RETURN
9000 REM
9010 REM --SUBTRACT B--
9020 REM
9030 GOSUB23100
9040 HO=0:VE=16:GOSUB110
9050 PRINT"SUBTRACT B"
9060 PRINT:PRINT"Deze instruktie trekt de inhoud van B"
9070 PRINT"af van de inhoud van A."
9080 PRINT"Als het resultaat negatief is, wordt de"
9090 PRINT"CARRY VLAG 1."
9100 A=A-B
9110 CA=0
9120 IF(A<0) THENA=256+A:CA=1
9130 DE=A:GOSUB20000
9140 GOSUB24200
9150 RETURN
9500 REM
9510 REM --COMPARE WITH B--
9520 REM
9530 GOSUB23100
9540 HO=0:VE=16:GOSUB110
9550 PRINT"COMPARE WITH B"
9560 PRINT:PRINT"B wordt van A afgetrokken, maar de in-"
9570 PRINT"houd van A blijft ongewijzigd. De vlag-"
9580 PRINT"gen geven alleen aan of het resultaat"
9590 PRINT"nul of negatief is."
9610 CA=0
9620 IF((A-B)<0) THENCA=1
9630 DE=A:GOSUB20000
9640 GOSUB24200
9650 RETURN
10000 REM
10010 REM --AND WITH B--
10020 REM
10030 GOSUB23100
10040 HO=0:VE=16:GOSUB110
10050 PRINT"AND WITH B"
10060 PRINT:PRINT"Als het overeenkomstig bit van A en B"
10070 PRINT"gelijk is aan 1 dan is het overeen-"
10080 PRINT"komstig bit van het resultaat ook 1."
10090 DE=B:GOSUB20000
10100 FORI=1 TO8
10110 HU(I)=BI(I)
10120 NEXTI
10130 DE=A:GOSUB20000
10140 FORI=1 TO8
10150 IF(BI(I)=1) AND(HU(I)=1) THENBI(I)=1:GOTO10170
10160 BI(I)=0
10170 NEXTI
10180 CA=0:GOSUB24200
10190 RETURN
10500 REM
10510 REM --OR WITH B--
10520 REM
10530 GOSUB23100
10540 HO=0:VE=16:GOSUB110
10550 PRINT"OR WITH B"
10560 PRINT:PRINT"Het overeenkomstig bit van het resul-"
10570 PRINT"taat wordt 1, als het overeenkomstig"
10580 PRINT"bit van A,B,of beide, gelijk is aan 1."
10590 DE=B:GOSUB20000
10600 FORI=1 TO8
10610 HU(I)=BI(I)
10620 NEXTI
10630 DE=A:GOSUB20000
10640 FORI=1 TO8
10650 IF(HU(I)=1) OR(BI(I)=1) THENBI(I)=1:GOTO10670
10660 BI(I)=0
10670 NEXTI
10680 CA=0:GOSUB24200
10690 RETURN
11000 REM
11010 REM --XOR WITH B--
11020 REM
11030 GOSUB23100
11050 HO=0:VE=16:GOSUB110
11060 PRINT"XOR WITH B"
11070 PRINT:PRINT"Elk overeenkomstig bit van het resul-"
11080 PRINT"taat is 1, als het overeenkomstig bit"
11090 PRINT"van A of B gelijk is aan 1, maar niet"
11095 PRINT"beiden."
11100 DE=B:GOSUB20000
11110 FORI=1 TO8
11120 HU(I)=BI(I)
11130 NEXTI
11140 DE=A:GOSUB20000
11150 FORI=1 TO8
11160 IF(HU(I)=0) AND(BI(I)=0) THENBI(I)=0:GOTO11190
11170 IF(HU(I)=1) AND(BI(I)=1) THENBI(I)=0:GOTO11190
11180 BI(I)=1
11190 NEXTI
11200 CA=0:GOSUB24200
11210 RETURN
20000 REM
20010 REM --CONVERSIE DEC -> BIN--
20020 REM
20030 N=9
20040 N=N-1
20050 Q=INT(DE/2)
20060 BI(N)=INT(DE-Q*2)
20070 IFQ<>0 THENDE=Q:GOTO20040
20080 IFN=1 THENRETURN
20090 FORI=(N-1) TO1 STEP-1
20100 BI(I)=0
20110 NEXTI
20120 RETURN
21000 REM
21010 REM --CONVERSIE DEC -> HEX--
21020 REM
21030 N=3
21040 N=N-1
21050 Q=INT(DE/16)
21060 H=INT(DE-Q*16)
21070 H$(N)=HE$(H+1)
21080 IFQ<>0 THENDE=Q:GOTO21040
21090 IFN<>1 THENH$(1)="0"
21100 RETURN
22000 REM
22010 REM --CONVERSIE BIN -> DEC--
22020 REM
22030 DE=0:M=1
22040 FORI=8 TO1 STEP-1
22050 IFBI(I)=1 THENDE=DE+M
22055 M=M*2
22060 NEXTI
22070 RETURN
23000 REM
23010 REM --WACHT OP TOETS--
23020 REM
23030 HO=9:VE=23:GOSUB110
23040 PRINT"* DRUK OP EEN TOETS *";:GOSUB250:GOSUB210
23050 RETURN
23100 REM
23110 REM --WIS 8 REGELS--
23120 REM
23130 HO=0
23140 FORI=16 TO23:VE=I:GOSUB110
23150 PRINT" ";
23160 NEXTI
23170 RETURN
24000 REM
24010 REM --PRINT A-WAARDEN--
24020 REM
24030 DE=A:GOSUB20000
24032 VE=3
24034 FORI=1 TO8
24036 HO=1+I*4:GOSUB110
24038 SR=BI(I):GOSUB300:PRINTSR$
24040 NEXTI
24042 DE=A:GOSUB21000
24044 HO=8:VE=5:GOSUB110
24046 FORI=1 TO2
24048 PRINTH$(I);
24050 NEXTI
24052 HO=20:VE=5:GOSUB110
24054 SR=A:GOSUB300:PRINTSR$;" "
24056 RETURN
24100 REM
24110 REM --PRINT B-WAARDEN--
24120 REM
24130 DE=B:GOSUB20000
24132 VE=7
24134 FORI=1 TO8
24136 HO=1+I*4:GOSUB110
24138 SR=BI(I):GOSUB300:PRINTSR$
24140 NEXTI
24142 DE=B:GOSUB21000
24144 HO=8:VE=9:GOSUB110
24146 FORI=1 TO2
24148 PRINTH$(I);
24150 NEXTI
24152 HO=20:VE=9:GOSUB110
24154 SR=B:GOSUB300:PRINTSR$;" "
24156 RETURN
24200 REM
24210 REM --PRINT RESULTAAT--
24220 REM
24222 VE=13:HO=1:GOSUB110
24223 SR=CA:GOSUB300:PRINTSR$
24224 GOSUB22000:A=DE
24226 FORI=1 TO8
24228 HO=1+I*4:GOSUB110
24230 SR=BI(I):GOSUB300:PRINTSR$
24232 NEXTI
24234 ZE=0:VE=13:HO=37:GOSUB110
24236 IFA=0 THENZE=1
24237 SR=ZE:GOSUB300:PRINTSR$
24238 GOSUB23000:GOSUB23100
24240 HO=0:VE=18:GOSUB110
24242 PRINT"Resultaat naar A";
24244 GOSUB24000
24248 VE=13
24250 FORI=1 TO10
24252 HO=-3+I*4:GOSUB110
24254 PRINT"0"
24256 NEXTI
24258 GOSUB23000
24260 RETURN
25000 REM
25010 REM ---DATA HEX GETALLEN ---
25020 REM
25030 DATA"0","1","2","3","4","5","6","7","8","9"
25040 DATA"A","B","C","D","E","F"
30000 REM ..............................
30010 REM . .
30020 REM . Z80 1&2 BYTE INSTRUKTIES .
30030 REM . .
30040 REM . .
30050 REM .Idee: .
30060 REM . .
30070 REM . 'THE COMPLETE MACHINECODE .
30080 REM . TUTOR' VOOR DE ZX SPECTRUM .
30090 REM . .
30100 REM . .
30110 REM . Th. Trum .
30120 REM . Willem III laan 10 .
30130 REM . 5342GM Oss .
30140 REM . .
30150 REM . .
30160 REM . SINCLAIR ZX-SPECTRUM 48K .
30170 REM ..............................
30180 REM
30190 REM Copyright NOS Hilversum