OpenCores
URL https://opencores.org/ocsvn/z3/z3/trunk

Subversion Repositories z3

[/] [z3/] [trunk/] [bios/] [bios.inf] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 charcole
Constant Border       = 4;
2
Constant ScrWidth     = 240-Border+1;
3
Constant ScrHeight    = 320;
4
Constant BufferHeight = 630;
5
Constant LineStride   = 30;
6
Constant LineStrideW  = 15;
7
Constant TextHeight   = 10;
8
Constant KeyboardStartLine              = 240;
9
Constant KeyboardTextSpacing    = 20;
10
Constant KeyboardSepSpacing             = 5;
11
Constant StatusHeight = 10;
12
!                                    S c o r e : 0     M o v e s : 0
13
Constant ScoreXOffset = (240-Border-(4+5+4+3+4+2+4)-(3+6+4+4+4+4+2+4));
14
 
15
Constant DictionaryOff = 8;
16
 
17
Constant cAbbrev      = 0;
18
Constant cEncodO      = 2;
19
Constant cEncodB      = 4;
20
Constant cScrenX          = 8;
21
Constant cScrenY          = 10;
22
Constant cFontO           = 12;
23
Constant cFontB           = 14;
24
Constant cBitMpW          = 16;
25
Constant cScroll          = 18;
26
Constant cTextO           = 20;
27
Constant cTextB           = 22;
28
Constant cTextSep         = 24;
29
Constant cScrollStart = 26;
30
Constant cLastScroll  = 28;
31
Constant MaxTextSize  = $400;
32
 
33
Constant contextW     = $D800; ! $1B000
34
 
35
! Code should start at $1E580
36
! Font + Encoding data is directly before
37
! Game must be smaller than $1E000 (120Kb) to fit in BIOS
38
 
39
! BitMap buffer is at the top of the high RAM (18.75Kb)
40
! Scratch buffer is below the bitmap and is 1Kb
41
! Context structure is just below that
42
! Bottom of high RAM are the stacks growing up
43
 
44
[Main;
45
! Used as a table to pick out addresses of functions
46
SysInit();
47
SysPrint();
48
SysPrintChar();
49
SysPrintNum();
50
SysRead();
51
SysShowStatus();
52
SysQuit();
53
SysException();
54
];
55
 
56
[DecodeText
57
inputO inputW !inputs
58
outputO outputB encodingO encodingB alpha charWord c char charOut; !temps
59
 
60
outputO=cTextO==>contextW;
61
outputB=cTextB==>contextW;
62
encodingO=cEncodO==>contextW;
63
encodingB=cEncodB==>contextW;
64
do
65
{
66
        charWord = inputO-->inputW;
67
        for (c=0: c<3: c++)
68
        {
69
                if (c==0) char=(charWord&$7c00)/1024;
70
                else if (c==1) char=(charWord&$3e0)/32;
71
                else char=charWord&31;
72
 
73
                charOut=-1;
74
                if (alpha<=2 && char<=5)
75
                {
76
                        if (char==0)
77
                        {
78
                                charOut=' ';
79
                                alpha=0;
80
                        }
81
                        else
82
                        {
83
                                if (char>=4)
84
                                        alpha=char-3;
85
                                else
86
                                        alpha=char+2;
87
                        }
88
                }
89
                else if (char==6 && alpha==2)
90
                {
91
                        alpha=6;
92
                }
93
                else
94
                {
95
                        if (alpha<=2)
96
                        {
97
                                charOut=encodingO->(encodingB+26*alpha+char-6);
98
                                alpha=0;
99
                        }
100
                        else if (alpha<=5)
101
                        {
102
                                cTextB==>contextW=outputB;
103
                                outputB=DecodeText(0, (cAbbrev==>contextW)-->(32*(alpha-3)+char));
104
                                outputB=cTextB==>contextW;
105
                                alpha=0;
106
                        }
107
                        else if (alpha==6)
108
                        {
109
                                alpha=32+char*32;
110
                        }
111
                        else
112
                        {
113
                                charOut=(alpha-32)|char;
114
                                alpha=0;
115
                        }
116
                }
117
                if (charOut>=0)
118
                {
119
                        outputO=>outputB=charOut;
120
                        outputB++;
121
                }
122
        }
123
        inputW++;
124
}
125
until (charWord<0);
126
outputO=>outputB=0;
127
 
128
cTextB==>contextW=outputB;
129
];
130
 
131
[TextToConsole
132
textO textB
133
fontO fontB bitmapW char ptr a b w x y checkWrap firstLine;
134
 
135
x=cScrenX==>contextW;
136
y=cScrenY==>contextW;
137
fontO=cFontO==>contextW;
138
fontB=cFontB==>contextW;
139
bitmapW=cBitMpW==>contextW;
140
char=textO=>textB;
141
if (x~=Border)
142
        checkWrap=1;
143
firstLine=1;
144
while (char)
145
{
146
        if (char<=32)
147
        {
148
                checkWrap=1;
149
        }
150
        else if (checkWrap)
151
        {
152
                w=x;
153
                ptr=textB;
154
                while (textO=>ptr>32)
155
                {
156
                        w=w+(fontO->(fontB+(textO=>ptr)*TextHeight));
157
                        ptr++;
158
                }
159
                if (w>ScrWidth)
160
                {
161
                        x=ScrWidth+1;
162
                }
163
                checkWrap=0;
164
        }
165
        ptr=fontB+char*TextHeight;
166
        w=fontO->ptr;
167
        if (x+w>ScrWidth || char==10)
168
        {
169
                y=y+TextHeight;
170
                if (y>BufferHeight-TextHeight)
171
                        y=0;
172
                if (y>(KeyboardStartLine-StatusHeight)-TextHeight || cScrollStart==>contextW)
173
                {
174
                        cScrollStart==>contextW=1;
175
                        a=cScroll==>contextW;
176
                        a=a+TextHeight;
177
                        if (a>=BufferHeight)
178
                                a=0;
179
                        if (a==cLastScroll==>contextW)
180
                        {
181
                                cScrenY==>contextW=y;
182
                                b=UpdateScreen();
183
                                b=GetKey();
184
                        }
185
                        cScroll==>contextW=a;
186
                }
187
                a=y*LineStride;
188
                b=LineStride*5;
189
                while (b)
190
                {
191
                        a==>bitmapW=0;
192
                        a=a+2;
193
                        b--;
194
                }
195
                x=Border;
196
                firstLine=0;
197
        }
198
        if (x~=Border || char>32 || firstLine)
199
        {
200
                if (cTextSep==>contextW==0 || char==124)
201
                {
202
                        a=7-(x&7);
203
                        b=2;
204
                        while (a)
205
                        {
206
                                b=b*2;
207
                                a--;
208
                        }
209
                        a=x/8+y*LineStride;
210
                        for (char=0: char<9: char++)
211
                        {
212
                                ptr++;
213
                                a==>bitmapW=(a==>bitmapW)|((fontO->ptr)*b);
214
                                a=a+LineStride;
215
                        }
216
                }
217
                x=x+w;
218
        }
219
        textB++;
220
        char=textO=>textB;
221
}
222
cScrenX==>contextW=x;
223
cScrenY==>contextW=y;
224
];
225
 
226
[UpdateScreen
227
ptr size sizeW bitmapW scroll; !temps
228
        bitmapW=cBitMpW==>contextW;
229
        scroll=cScroll==>contextW;
230
        cLastScroll==>contextW=cScrenY==>contextW;
231
        @write_reg 32 0;
232
        @write_reg 33 0;
233
        @blit1 0 LineStride $49c2 $49c2;
234
        @write_reg 32 0;
235
        @write_reg 33 1;
236
        ptr=bitmapW+(LineStrideW*BufferHeight);
237
        sizeW=LineStride*(StatusHeight-1);
238
        @blit1 ptr sizeW $49c2 $ff14;
239
        @write_reg 32 0;
240
        @write_reg 33 StatusHeight;
241
        ptr=bitmapW+(LineStrideW*scroll);
242
        sizeW=LineStride*(KeyboardStartLine-StatusHeight);
243
        if (scroll > BufferHeight - (KeyboardStartLine-StatusHeight))
244
        {
245
                size=BufferHeight-scroll;
246
                sizeW=LineStride*size;
247
                @blit1 ptr sizeW $ff14 $49c2;
248
                ptr=bitmapW;
249
                size=size+StatusHeight;
250
                @write_reg 32 0;
251
                @write_reg 33 size;
252
                sizeW=LineStride*(KeyboardStartLine-size);
253
        }
254
        @blit1 ptr sizeW $ff14 $49c2;
255
];
256
 
257
[InitScreenRegs;
258
@write_reg $0000 $0000; ! Setting primes the screen for data
259
@write_reg $0001 $0100;
260
@write_reg $0002 $0700;
261
@write_reg $0003 $1030;
262
@write_reg $0008 $0302;
263
@write_reg $0009 $0000;
264
@write_reg $000A $0008;
265
@write_reg $0010 $0790;
266
@write_reg $0011 $0005;
267
@write_reg $0012 $0000;
268
@write_reg $0013 $0000;
269
@write_reg $0010 $12B0;
270
@write_reg $0011 $0007;
271
@write_reg $0012 $008C;
272
@write_reg $0013 $1700;
273
@write_reg $0029 $0022;
274
@write_reg $0030 $0000;
275
@write_reg $0031 $0505;
276
@write_reg $0032 $0205;
277
@write_reg $0035 $0206;
278
@write_reg $0036 $0408;
279
@write_reg $0037 $0000;
280
@write_reg $0038 $0504;
281
@write_reg $0039 $0206;
282
@write_reg $003C $0206;
283
@write_reg $003D $0408;
284
@write_reg $0050 $0000;
285
@write_reg $0051 $00EF;
286
@write_reg $0052 $0000;
287
@write_reg $0053 $013F;
288
@write_reg $0060 $A700;
289
@write_reg $0061 $0001;
290
@write_reg $0090 $0033;
291
@write_reg $0081 $0000;
292
@write_reg $0082 $0000;
293
@write_reg $0083 $013F;
294
];
295
 
296
[InitContext;
297
cAbbrev==>contextW=$18-->0;
298
cEncodO==>contextW=$FFFF; !1E500
299
cEncodB==>contextW=$E501;
300
cScrenX==>contextW=Border;
301
!cScrenY==>contextW=0;
302
cFontO ==>contextW=$FFFF; ! $1E000
303
cFontB ==>contextW=$E001;
304
cBitMpW==>contextW=-(BufferHeight+StatusHeight)*LineStrideW;
305
!cScroll==>contextW=0;
306
cTextO==>contextW=cBitMpW==>contextW;
307
cTextB==>contextW=cBitMpW==>contextW-MaxTextSize;
308
!cTextSep==>contextW=0;
309
!cScrollStart==>contextW=0;
310
!cLastScroll==>contextW=0;
311
];
312
 
313
[SysPrint
314
printO printW;
315
printW=DecodeText(printO&1, printW);
316
if (printO&2) ! Doing print_ret so need to add a newline
317
{
318
        printO=cTextO==>contextW;
319
        printW=cTextB==>contextW;
320
        printO=>printW=10;
321
        printW++;
322
        printO=>printW=0;
323
}
324
cTextB==>contextW=(cBitMpW==>contextW-MaxTextSize); ! reset buffer as Decode modifies it
325
printW=TextToConsole(cTextO==>contextW, cTextB==>contextW);
326
rtrue;
327
];
328
 
329
[SysPrintChar
330
char
331
textO textB;
332
textO=cTextO==>contextW;
333
textB=cTextB==>contextW;
334
textO=>textB=char;
335
textB++;
336
textO=>textB=0;
337
char=TextToConsole(textO, textB-1);
338
rtrue;
339
];
340
 
341
[SysPrintNum
342
num
343
digit writeStarted demon temp;
344
demon=10000;
345
if (num<0)
346
{
347
        temp=SysPrintChar('-');
348
        demon=-demon;
349
}
350
while (1)
351
{
352
        digit=num/demon;
353
        if (digit<0) ! Not sure why I need to do this but fixes -32678
354
                digit=-digit;
355
        if (digit>0 || writeStarted || demon==1 || demon==-1)
356
        {
357
                temp=SysPrintChar('0'+digit);
358
                writeStarted=1;
359
                if (demon==1 || demon==-1)
360
                        break;
361
        }
362
        num=num-digit*demon;
363
        demon=demon/10;
364
}
365
rtrue;
366
];
367
 
368
[DrawKeyboard
369
size ptr line i;
370
! Use print system to make keyboard bitmaps then blit to screen
371
for (: i<2: i++)
372
{
373
        cTextSep==>contextW=i;
374
        @print "  q   |  w   |   e   |   r   |   t   |   y   |   u   |    i   |   o   |   p^";
375
        @print "      a   |   s   |   d   |   f   |   g   |   h   |   j   |   k   |   l^";
376
        @print "          z   |   x   |   c   |   v   |   b   |   n   |  m   |   ,^";
377
        @print "         Delete         |          Space         |          Enter^";
378
}
379
cTextSep==>contextW=0;
380
@write_reg 32 0;
381
size=LineStride*TextHeight;
382
ptr=cBitMpW==>contextW;
383
i=ptr+4*TextHeight*LineStrideW;
384
line=KeyboardStartLine+1+KeyboardSepSpacing;
385
while (ptr
386
{
387
        @write_reg 33 line;
388
        @blit1 ptr size $22b0 $d75f;
389
        ptr=ptr+TextHeight*LineStrideW;
390
        line=line+KeyboardTextSpacing;
391
}
392
size=LineStride*KeyboardSepSpacing;
393
line=KeyboardStartLine+1;
394
i=ptr+4*TextHeight*LineStrideW;
395
while (ptr
396
{
397
        @write_reg 33 line;
398
        @blit1 ptr size $22b0 $d75f;
399
        line=line+TextHeight+KeyboardSepSpacing-1;
400
        @write_reg 33 line;
401
        @blit1 ptr size $22b0 $d75f;
402
        line=line+KeyboardSepSpacing+1;
403
        ptr=ptr+TextHeight*LineStrideW;
404
}
405
line=KeyboardStartLine;
406
i=line+4*(TextHeight+2*KeyboardSepSpacing);
407
size=LineStride;
408
while (line
409
{
410
        @write_reg 33 line;
411
        @blit1 ptr size $d75f $d75f;
412
        line=line+TextHeight+2*KeyboardSepSpacing;
413
}
414
ptr=cBitMpW==>contextW;
415
i=ptr+LineStrideW*TextHeight*8;
416
while (ptr
417
{
418
        0==>ptr=0;
419
        ptr++;
420
}
421
cScrenY==>contextW=0;
422
];
423
 
424
[GameSelect
425
palette
426
imageO imageP c col count p x y winW winWMax;
427
 
428
c=320;
429
@write_reg 32 0;
430
@write_reg 33 0;
431
while (c)
432
{
433
        p=240;
434
        while (p)
435
        {
436
                col=0;
437
                if ((c+p)&7 && (c-p)&7)
438
                        col=((0-->(palette+c))*(0-->(palette+(p+40))))&$7E0;
439
                p--;
440
                @write_reg 34 col;
441
        }
442
        c--;
443
        y++;
444
}
445
palette=palette+320;
446
 
447
imageP=(palette+128)*2+1;
448
imageO=$FFFF;
449
p=4;
450
while (p)
451
{
452
        winW=127;
453
        winWMax=226;
454
        if (p&1)
455
        {
456
                winW=13;
457
                winWMax=112;
458
        }
459
        y=167;
460
        if (p&2)
461
        {
462
                y=33;
463
        }
464
        @write_reg $0050 winW;
465
        @write_reg $0051 winWMax;
466
        @write_reg 32 winW;
467
        @write_reg 33 y;
468
        count=100*120;
469
        while (count>0)
470
        {
471
                c=imageO->imageP;
472
                col=0-->(palette+(c&$7F));
473
                imageP++;
474
                if (c&$80)
475
                {
476
                        c=imageO->imageP;
477
                        imageP++;
478
                        count=count-c;
479
                        while (c)
480
                        {
481
                                @write_reg 34 col;
482
                                c--;
483
                        }
484
                }
485
                else
486
                {
487
                        @write_reg 34 col;
488
                        count--;
489
                }
490
        }
491
        p--;
492
}
493
@write_reg $0050 $0000;
494
@write_reg $0051 $00EF;
495
@write_reg $0007 $0133; ! Turn on the screen
496
 
497
do !wait for touch
498
{
499
        @get_touch $93 -> x;
500
        if (x<1000)
501
                y--;
502
        else
503
                y=10;
504
} until (y==0);
505
@get_touch $95 -> x; ! x
506
@get_touch $1A -> y; ! y
507
p=0;
508
if (x>510)
509
        p++;
510
if (y>508)
511
        p=p+2;
512
 
513
if (p>0)
514
        @switch_bank p;
515
];
516
 
517
[MandelbrotPalette;
518
@db 0;
519
@db $f800; @db $fb80; @db $f800; @db $fc00;
520
@db $f800; @db $fc00; @db $f800; @db $fc00;
521
@db $ff80; @db $df80; @db $bf80; @db $9f80;
522
@db $7f80; @db $5f80; @db $3f80; @db $1f80;
523
@db $1f81; @db $1f85; @db $1f89; @db $1f8d;
524
@db $1f91; @db $1f96; @db $1f9a; @db $1f9e;
525
@db $1d9f; @db $191f; @db $151f; @db $111f;
526
@db $0d1f; @db $091f; @db $049f; @db $009f;
527
];
528
 
529
[Mandelbrot
530
x y xtemp ytemp x0 y0 x00 y00 i;
531
@write_reg 32 0;
532
@write_reg 33 StatusHeight;
533
y0=60;
534
do
535
{
536
        x0=-120;
537
        y00=y0*40;
538
        do
539
        {
540
                xtemp=0;
541
                ytemp=0;
542
                y=0;
543
                i=0;
544
                x00=x0*20;
545
                do
546
                {
547
                        i++;
548
                        xtemp=xtemp-ytemp+y00;
549
                        y=(x*y+x00)/32;
550
                        if (y>=2*64 || y<=-2*64)
551
                                break;
552
                        x=xtemp/64;
553
                        if (x>=2*64 || x<=-2*64)
554
                                break;
555
                        xtemp=x*x;
556
                        ytemp=y*y;
557
                } until ( xtemp + ytemp >= 64*64*4 || i>=32);
558
                i=1-->(i+MandelbrotPalette);
559
                @write_reg 34 i;
560
                x0++;
561
        } until (x0>=120);
562
        y0--;
563
} until (y0==60-(KeyboardStartLine-StatusHeight));
564
@write_reg $0007 $0133; ! Turn on the screen
565
x=GetKey();
566
];
567
 
568
[SpaceInvadersSpriteData;
569
!squid1 Offset:0
570
@db 8*(8|16);
571
@db 8*(4|8|16|32);
572
@db 8*(2|4|8|16|32|64);
573
@db 8*(1|2|8|16|64|128);
574
@db 8*(1|2|4|8|16|32|64|128);
575
@db 8*(4|32);
576
@db 8*(2|8|16|64);
577
@db 8*(1|4|32|128);
578
!ant1 Offset:16
579
@db 4*(4|256);
580
@db 4*(8|128);
581
@db 4*(4|8|16|32|64|128|256);
582
@db 4*(2|4|16|32|64|256|512);
583
@db 4*(1|2|4|8|16|32|64|128|256|512|1024);
584
@db 4*(1|4|8|16|32|64|128|256|1024);
585
@db 4*(1|4|256|1024);
586
@db 4*(8|16|64|128);
587
!bug1 Offset:32
588
@db 4*(16|32|64|128);
589
@db 4*(2|4|8|16|32|64|128|256|512|1024);
590
@db 4*(1|2|4|8|16|32|64|128|256|512|1024|2048);
591
@db 4*(1|2|4|32|64|512|1024|2048);
592
@db 4*(1|2|4|8|16|32|64|128|256|512|1024|2048);
593
@db 4*(4|8|16|128|256|512);
594
@db 4*(2|4|32|64|512|1024);
595
@db 4*(4|8|256|512);
596
!squid2 Offset:48
597
@db 8*(8|16);
598
@db 8*(4|8|16|32);
599
@db 8*(2|4|8|16|32|64);
600
@db 8*(1|2|8|16|64|128);
601
@db 8*(1|2|4|8|16|32|64|128);
602
@db 8*(2|8|16|64);
603
@db 8*(1|128);
604
@db 8*(2|64);
605
!ant2 Offset:64
606
@db 4*(4|256);
607
@db 4*(1|8|128|1024);
608
@db 4*(1|4|8|16|32|64|128|256|1024);
609
@db 4*(1|2|4|16|32|64|256|512|1024);
610
@db 4*(1|2|4|8|16|32|64|128|256|512|1024);
611
@db 4*(2|4|8|16|32|64|128|256|512);
612
@db 4*(4|256);
613
@db 4*(2|512);
614
!bug2 Offset:80
615
@db 4*(16|32|64|128);
616
@db 4*(2|4|8|16|32|64|128|256|512|1024);
617
@db 4*(1|2|4|8|16|32|64|128|256|512|1024|2048);
618
@db 4*(1|2|4|32|64|512|1024|2048);
619
@db 4*(1|2|4|8|16|32|64|128|256|512|1024|2048);
620
@db 4*(8|16|128|256);
621
@db 4*(4|8|32|64|256|512);
622
@db 4*(1|2|1024|2048);
623
!ship Offset:96
624
@db 2*(64);
625
@db 2*(32|64|128);
626
@db 2*(32|64|128);
627
@db 2*(2|4|8|16|32|64|128|256|512|1024|2048);
628
@db 2*(1|2|4|8|16|32|64|128|256|512|1024|2048|4096);
629
@db 2*(1|2|4|8|16|32|64|128|256|512|1024|2048|4096);
630
@db 2*(1|2|4|8|16|32|64|128|256|512|1024|2048|4096);
631
@db 2*(1|2|4|8|16|32|64|128|256|512|1024|2048|4096);
632
!explosion Offset:112
633
@db 4*(16|256);
634
@db 4*(2|32|128|2048);
635
@db 4*(4|1024);
636
@db 4*(8|512);
637
@db 4*(1|2|2048); !|4096); Should really but messes with clear
638
@db 4*(8|512);
639
@db 4*(4|32|128|1024);
640
@db 4*(2|16|256|2048);
641
!ufo Offset:128
642
@db $03c0;
643
@db $0ff0;
644
@db $3ffc;
645
@db $6db6;
646
@db $ffff;
647
@db $3bdc;
648
@db $1008;
649
!base Offset:142
650
@db $0FFF; @db $C000;
651
@db $1FFF; @db $E000;
652
@db $3FFF; @db $F000;
653
@db $7FFF; @db $F800;
654
@db $FFFF; @db $FC00;
655
@db $FFFF; @db $FC00;
656
@db $FFFF; @db $FC00;
657
@db $FFFF; @db $FC00;
658
@db $FFFF; @db $FC00;
659
@db $FFFF; @db $FC00;
660
@db $FFFF; @db $FC00;
661
@db $FFFF; @db $FC00;
662
@db $FE03; @db $FC00;
663
@db $FC01; @db $FC00;
664
@db $F800; @db $FC00;
665
@db $F800; @db $FC00;
666
];
667
 
668
[SpaceInvaders
669
sprites x y i k s xd u c sx t p l ud j;
670
 
671
!copy sprite data
672
sprites=contextW-MaxTextSize/2;
673
i=SpaceInvadersSpriteData;
674
k=i+71;
675
c=sprites;
676
while (i
677
{
678
        0==>c=1-->i;
679
        i++;
680
        c++;
681
}
682
!copy 4x bases as will get destroyed
683
c=sprites+135;
684
k=i+32;
685
t=4;
686
while (t)
687
{
688
        i=SpaceInvadersSpriteData+71;
689
        while (i
690
        {
691
                0==>c=1-->i;
692
                i++;
693
                c++;
694
        }
695
        t--;
696
}
697
 
698
s=sprites;
699
k=s+5;
700
t=26;
701
c=234;
702
while (s
703
{
704
        190==>s=0; !dying
705
        200==>s=8; !startX
706
        210==>s=t; !startY
707
        220==>s=$7ff; !alive
708
        c==>sprites=0; !bullet direction
709
        s++;
710
        t=t+16;
711
        c=c+6;
712
}
713
184==>sprites=0; ! dead timer
714
186==>sprites=0; ! ufo dead timer
715
188==>sprites=255; ! ufo position
716
 
717
@write_reg $0050 0;
718
@write_reg $0051 $EF;
719
@write_reg 32 0;
720
@write_reg 33 StatusHeight;
721
@blit1 0 6900 0 0;
722
xd=2;
723
sx=115;
724
l=3;
725
ud=1;
726
while (1)
727
{
728
        if (random(50)==1 && ~~184==>sprites)
729
        {
730
                x=random(11)-1;
731
                k=x;
732
                t=1;
733
                while (k)
734
                {
735
                        t=t*2;
736
                        k--;
737
                }
738
                s=228;
739
                y=0;
740
                for (k=0: k<5: k++)
741
                {
742
                        if (s==>sprites&t)
743
                        {
744
                                x=(s-20)==>sprites+16*x;
745
                                y=(s-10)==>sprites+6;
746
                                break;
747
                        }
748
                        s=s-2;
749
                }
750
                if (y)
751
                {
752
                        for (k=0: k<4: k++)
753
                        {
754
                                s=236+6*k;
755
                                if (~~(s+4)==>sprites)
756
                                {
757
                                        s==>sprites=x+8;
758
                                        (s+2)==>sprites=y;
759
                                        (s+4)==>sprites=1;
760
                                        break;
761
                                }
762
                        }
763
                }
764
        }
765
 
766
        x=188==>sprites;
767
        if (x<240-16)
768
        {
769
                i=2;
770
                while (i)
771
                {
772
                        @write_reg $0050 x;
773
                        @write_reg 32 x;
774
                        y=x+15;
775
                        @write_reg $0051 y;
776
                        @write_reg 33 16;
777
                        i--;
778
                        if (i)
779
                        {
780
                                @blit1 0 14 0 0;
781
                                x++;
782
                                188==>sprites=x;
783
                                if (x>=240-16)
784
                                        break;
785
                        }
786
                        else
787
                        {
788
                                s=sprites+64;
789
                                x=186==>sprites;
790
                                k=$f800;
791
                                if (x)
792
                                {
793
                                        s=sprites+56;
794
                                        x--;
795
                                        186==>sprites=x;
796
                                        if (~~x)
797
                                        {
798
                                                188==>sprites=255;
799
                                                k=0;
800
                                        }
801
                                }
802
                                @blit1 s 14 0 k;
803
                        }
804
                }
805
        }
806
        else if (random(2000)==1)
807
        {
808
                188==>sprites=0;
809
        }
810
 
811
        ud--;
812
        if (ud<=0)
813
        {
814
                k=0;
815
                do
816
                {
817
                        u--;
818
                        if (u<0)
819
                                u=4;
820
                        x=220==>(sprites+u);
821
                        k++;
822
                } until (x || k>5);
823
                if (~~x)
824
                {
825
                        break; ! all enemies dead
826
                }
827
                if (x&$007)
828
                        ud++;
829
                if (x&$038)
830
                        ud++;
831
                if (x&$1C0)
832
                        ud++;
833
                if (x&$600)
834
                        ud++;
835
                k=5;
836
                while (k)
837
                {
838
                        k--;
839
                        t=220==>(sprites+k);
840
                        if (t)
841
                                j=k;
842
                        x=x|t;
843
                }
844
                k=x;
845
                c=8;
846
                while (~~(x&1))
847
                {
848
                        c=c-16;
849
                        x=x/2;
850
                }
851
                t=54;
852
                while (~~(k&$400))
853
                {
854
                        k=k*2;
855
                        t=t+16;
856
                }
857
                x=200==>(sprites+u)+xd;
858
                if (x>t || x
859
                {
860
                        y=210==>(sprites+u);
861
                        @write_reg $0050 0;
862
                        @write_reg $0051 $EF;
863
                        @write_reg 32 0;
864
                        @write_reg 33 y;
865
                        @blit1 0 240 0 0;
866
                        210==>(sprites+u)=y+10;
867
                        if (u==j)
868
                                xd=-xd;
869
                        if (y>202) !touched the ship row
870
                        {
871
                                if (~~184==>sprites)
872
                                {
873
                                        184==>sprites=150;
874
                                }
875
                                l=0;
876
                        }
877
                }
878
                200==>(sprites+u)=x;
879
        }
880
        s=sprites+135;
881
        for (k=0: k<4: k++)
882
        {
883
                x=35+k*50;
884
                @write_reg $50 x;
885
                @write_reg 32 x;
886
                x=x+31;
887
                @write_reg $51 x;
888
                @write_reg 33 195;
889
                @blit1 s 64 0 $7E0;
890
                s=s+32;
891
        }
892
        for (k=0: k<5: k++)
893
        {
894
                x=200==>(sprites+k);
895
                y=210==>(sprites+k);
896
                p=220==>(sprites+k);
897
                c=y/8;
898
                c=(31-c)*32*64+c+1;
899
                s=sprites;
900
                if (x&2)
901
                        s=s+24;
902
                if (k>=3)
903
                        s=s+16;
904
                else if (k>=1)
905
                        s=s+8;
906
                t=1;
907
                for (i=0: i<11: i++)
908
                {
909
                        @write_reg $0050 x;
910
                        @write_reg 32 x;
911
                        @write_reg 33 y;
912
                        x=x+15;
913
                        @write_reg $0051 x;
914
                        x++;
915
                        if (p&t)
916
                        {
917
                                j=190==>(sprites+k);
918
                                if (j&t)
919
                                {
920
                                        if (j&$8000)
921
                                        {
922
                                                @blit1 s 16 0 0;
923
                                                p=p&~t;
924
                                        }
925
                                        else
926
                                        {
927
                                                j=sprites+56;
928
                                                @blit1 j 16 0 c;
929
                                        }
930
                                }
931
                                else
932
                                {
933
                                        @blit1 s 16 0 c;
934
                                }
935
                        }
936
                        t=t*2;
937
                }
938
                220==>(sprites+k)=p;
939
                p=190==>(sprites+k);
940
                if (p)
941
                {
942
                        if (p&$8000)
943
                                p=0;
944
                        else
945
                                p=p+$1000;
946
                        190==>(sprites+k)=p;
947
                }
948
        }
949
        s=230;
950
        for (j=-3: j<5: j++)
951
        {
952
                k=j;
953
                if (k<0)
954
                        k=0;
955
                x=(s+4)==>sprites;
956
                if (x)
957
                {
958
                        y=(s+2)==>sprites;
959
                        i=s==>sprites;
960
                        @write_reg 32 i;
961
                        @write_reg $50 i;
962
                        @write_reg $51 i;
963
                        @write_reg 33 y;
964
                        @write_reg 34 0;
965
                        @write_reg 34 0;
966
                        if (x>0)
967
                        {
968
                                @write_reg 34 0;
969
                                @write_reg 34 0;
970
                        }
971
                        if (k) !not player bullet
972
                        {
973
                                if (234==>sprites)
974
                                {
975
                                        t=232==>sprites;
976
                                        if (y<=t && y+4>=t)
977
                                        {
978
                                                t=230==>sprites;
979
                                                if (i<=t+2 && i>=t-2)
980
                                                {
981
                                                        ! two bullets hit
982
                                                        234==>sprites=0;
983
                                                        (s+4)==>sprites=0;
984
                                                        ! erase player bullet
985
                                                        @write_reg 32 t;
986
                                                        @write_reg $50 t;
987
                                                        @write_reg $51 t;
988
                                                        t=232==>sprites;
989
                                                        @write_reg 33 t;
990
                                                        @write_reg 34 0;
991
                                                        @write_reg 34 0;
992
                                                }
993
                                        }
994
                                }
995
                        }
996
                        y=y+x;
997
                        (s+2)==>sprites=y;
998
                        if (x<0)
999
                        {
1000
                                for (i=0: i<5: i++)
1001
                                {
1002
                                        t=210==>(sprites+i);
1003
                                        if (y>=t && y
1004
                                        {
1005
                                                t=s==>sprites-200==>(sprites+i);
1006
                                                if (t>=0 && t<11*16)
1007
                                                {
1008
                                                        p=1;
1009
                                                        c=0;
1010
                                                        while (t>16)
1011
                                                        {
1012
                                                                p=p*2;
1013
                                                                t=t-16;
1014
                                                                c=c+16;
1015
                                                        }
1016
                                                        if (t>2 && t<14)
1017
                                                        {
1018
                                                                if (220==>(sprites+i)&p)
1019
                                                                {
1020
                                                                        190==>(sprites+i)=190==>(sprites+i)|p;
1021
                                                                        (s+4)==>sprites=0;
1022
                                                                        p=200==>(sprites+i)+c;
1023
                                                                        t=210==>(sprites+i);
1024
                                                                        break;
1025
                                                                }
1026
                                                        }
1027
                                                }
1028
                                        }
1029
                                }
1030
                        }
1031
                        if (y>=195 && y<195+16)
1032
                        {
1033
                                t=s==>sprites-35;
1034
                                if (t>=0 && t<4*50)
1035
                                {
1036
                                        i=t/50;
1037
                                        t=t-i*50;
1038
                                        if (t<22)
1039
                                        {
1040
                                                k=(270-1)+(64*i)+(4*(y-195));
1041
                                                t=t+7;
1042
                                                while (t>=12)
1043
                                                {
1044
                                                        t=t-8;
1045
                                                        k=k++;
1046
                                                }
1047
                                                p=1;
1048
                                                t=15-t;
1049
                                                while (t)
1050
                                                {
1051
                                                        t--;
1052
                                                        p=p*2;
1053
                                                }
1054
                                                t=k==>sprites;
1055
                                                if (t&p)
1056
                                                {
1057
                                                        p=p/8;
1058
                                                        k==>sprites=t&~(p*(1|2|4|8|16));
1059
                                                        if (y<195+15)
1060
                                                                (k+4)==>sprites=(k+4)==>sprites&~(p*(2|4|8));
1061
                                                        if (y<195+14)
1062
                                                                (k+8)==>sprites=(k+8)==>sprites&~(p*(1|4|16));
1063
                                                        if (y>195)
1064
                                                                (k-4)==>sprites=(k-4)==>sprites&~(p*(2|4|8));
1065
                                                        if (y>196)
1066
                                                                (k-8)==>sprites=(k-8)==>sprites&~(p*(1|4|16));
1067
                                                        (s+4)==>sprites=0;
1068
                                                }
1069
                                        }
1070
                                }
1071
                        }
1072
                        i=s==>sprites;
1073
                        if (x>0 && i>sx+1 && i=220 && y<217+8)
1074
                        {
1075
                                (s+4)==>sprites=0;
1076
                                if (~~184==>sprites)
1077
                                {
1078
                                        184==>sprites=150;
1079
                                        l--;
1080
                                }
1081
                        }
1082
                        ;
1083
                        if (x<0 && y>=16 && y<=16+7 && i>=188==>sprites && i<188==>sprites+16)
1084
                        {
1085
                                (s+4)==>sprites=0;
1086
                                186==>sprites=8;
1087
                        }
1088
                        if (y>=217+8 || y<=StatusHeight)
1089
                                (s+4)==>sprites=0;
1090
                        if ((s+4)==>sprites)
1091
                        {
1092
                                @write_reg 33 y;
1093
                                @write_reg 34 $7E0;
1094
                                @write_reg 34 $7E0;
1095
                                if (x>0)
1096
                                {
1097
                                        @write_reg 34 $7E0;
1098
                                        @write_reg 34 $7E0;
1099
                                }
1100
                        }
1101
                }
1102
                if (j>=0)
1103
                        s=s+6;
1104
        }
1105
        if (~~184==>sprites)
1106
        {
1107
                @get_touch $93 -> x;
1108
                if (x<1000)
1109
                {
1110
                        @get_touch $1A -> y; ! y
1111
                        if (y<720)
1112
                        {
1113
                                @get_touch $95 -> x; ! x
1114
                                x=x-90;
1115
                                x=x*2;
1116
                                x=x/7;
1117
                                x=x-7;
1118
                                if (x>sx)
1119
                                        sx++;
1120
                                else
1121
                                        sx--;
1122
                        }
1123
                        else if (234==>sprites==0)
1124
                        {
1125
                                230==>sprites=sx+8;
1126
                                232==>sprites=217;
1127
                                234==>sprites=-1;
1128
                        }
1129
                }
1130
        }
1131
        @write_reg $0050 sx;
1132
        @write_reg 32 sx;
1133
        x=sx+15;
1134
        @write_reg $0051 x;
1135
        @write_reg 33 218;
1136
        s=sprites+96/2;
1137
        k=$7e0;
1138
        if (184==>sprites)
1139
        {
1140
                if (184==>sprites>130)
1141
                        s=sprites+56;
1142
                else
1143
                        k=0;
1144
                184==>sprites=184==>sprites-1;
1145
        }
1146
        else if (l<=0)
1147
        {
1148
                break;
1149
        }
1150
        @blit1 s 16 0 k;
1151
 
1152
        s=sprites+96/2;
1153
        for (k=0: k<3: k++)
1154
        {
1155
                x=10+16*k;
1156
                @write_reg $0050 x;
1157
                @write_reg 32 x;
1158
                x=x+15;
1159
                @write_reg $0051 x;
1160
                @write_reg 33 230;
1161
                if (k
1162
                        @blit1 s 16 0 $7E0;
1163
                else
1164
                        @blit1 s 16 0 0;
1165
        }
1166
 
1167
        x=7500; !Delay to keep game from running too fast
1168
        do
1169
        {
1170
                x--;
1171
        } until (~~x);
1172
        @write_reg $0007 $0133; ! Turn on the screen
1173
}
1174
@write_reg $0050 0;
1175
@write_reg $0051 $EF;
1176
if (l>0)
1177
        @print "You win!^^";
1178
else
1179
        @print "Bad luck.^^";
1180
];
1181
 
1182
[SysInit
1183
temp;
1184
temp=InitContext();
1185
temp=InitScreenRegs();
1186
if (~~($FFFF->$E580))
1187
        temp=GameSelect($B400);
1188
temp=DrawKeyboard();
1189
@new_line;
1190
! Set flags
1191
0->1=(0->1&$8f)|$40; ! Status line availible, Screen splitting not availible + variable pitch font
1192
0->10=0->10&$fe; ! Transcripting off
1193
];
1194
 
1195
[FindInDictionary
1196
text parse
1197
encodingO encodingB textO textB count limit i a c;
1198
 
1199
encodingO=cEncodO==>contextW;
1200
textO=cTextO==>contextW;
1201
textB=cTextB==>contextW;
1202
limit=textB+6;
1203
 
1204
i=6;
1205
while (i)
1206
{
1207
        i--;
1208
        textO=>(textB+i)=5;
1209
}
1210
 
1211
count=parse->2;
1212
text=text+parse->3;
1213
 
1214
while (count && textB
1215
{
1216
        c=text->0;
1217
        text++;
1218
        count--;
1219
        if (c==32)
1220
        {
1221
                textO=>textB=0;
1222
                textB++;
1223
        }
1224
        else
1225
        {
1226
                i=0;
1227
                a=3;
1228
                encodingB=cEncodB==>contextW;
1229
                while (c~=encodingO->encodingB)
1230
                {
1231
                        encodingB++;
1232
                        i++;
1233
                        if (i==26)
1234
                        {
1235
                                if (a==5)
1236
                                        break;
1237
                                a++;
1238
                                i=0;
1239
                        }
1240
                }
1241
                if (a>3)
1242
                {
1243
                        textO=>textB=a;
1244
                        textB++;
1245
                }
1246
                if (i==26)
1247
                {
1248
                        textO=>textB=6;
1249
                        textB++;
1250
                        textO=>textB=(c/32)&$1F;
1251
                        textB++;
1252
                        textO=>textB=c&$1F;
1253
                        textB++;
1254
                }
1255
                else
1256
                {
1257
                        textO=>textB=6+i;
1258
                        textB++;
1259
                }
1260
        }
1261
}
1262
 
1263
textB=cTextB==>contextW;
1264
a=textO=>(textB  )*1024+textO=>(textB+1)*32+textO=>(textB+2);
1265
c=textO=>(textB+3)*1024+textO=>(textB+4)*32+textO=>(textB+5);
1266
c=c|$8000;
1267
 
1268
i=DictionaryOff-->0;
1269
parse-->0=0;
1270
i=i+i->0+1;
1271
limit=i->0;
1272
i++;
1273
count=i-->0;
1274
i=i+2;
1275
while (count)
1276
{
1277
        if (i-->0==a && i-->1==c)
1278
        {
1279
                parse-->0=i;
1280
                break;
1281
        }
1282
        i=i+limit;
1283
        count--;
1284
}
1285
];
1286
 
1287
[UpdateStatus
1288
x y scoreX;
1289
 
1290
x=cBitMpW==>contextW+BufferHeight*LineStrideW;
1291
y=StatusHeight*LineStrideW;
1292
while (y)
1293
{
1294
        0==>x=0;
1295
        x++;
1296
        y--;
1297
}
1298
 
1299
x=cScrenX==>contextW;
1300
y=cScrenY==>contextW;
1301
cScrenX==>contextW=Border;
1302
cScrenY==>contextW=BufferHeight;
1303
@print_obj sys__glob0;
1304
scoreX=ScoreXOffset;
1305
if (sys__glob1>=1000)
1306
        scoreX=scoreX-12;
1307
else if (sys__glob1>=100)
1308
        scoreX=scoreX-8;
1309
else if (sys__glob1>=10)
1310
        scoreX=scoreX-4;
1311
if (sys__glob2>=1000)
1312
        scoreX=scoreX-12;
1313
else if (sys__glob2>=100)
1314
        scoreX=scoreX-8;
1315
else if (sys__glob2>=10)
1316
        scoreX=scoreX-4;
1317
cScrenX==>contextW=scoreX;
1318
print "Score:";
1319
@print_num sys__glob1;
1320
print " Moves:";
1321
@print_num sys__glob2;
1322
cScrenX==>contextW=x;
1323
cScrenY==>contextW=y;
1324
];
1325
 
1326
[GetKey
1327
x y
1328
startY scrollStart scrollLimit scroll;
1329
 
1330
startY=1024;
1331
scrollLimit=cScroll==>contextW;
1332
while (1)
1333
{
1334
        scrollStart=scroll;
1335
        do !wait for not-touch
1336
        {
1337
                if (startY~=1024)
1338
                {
1339
                        @get_touch $1A -> y; ! y
1340
                        scroll=scrollStart+(startY-y)/3;
1341
                        if (scroll>0)
1342
                        {
1343
                                scroll=0;
1344
                        }
1345
                        else if (scroll<-BufferHeight+KeyboardStartLine-StatusHeight)
1346
                        {
1347
                                scroll=-BufferHeight+KeyboardStartLine-StatusHeight;
1348
                        }
1349
                        cScroll==>contextW=((scrollLimit+scroll+BufferHeight+BufferHeight)%BufferHeight);
1350
                        x=UpdateScreen();
1351
                }
1352
                @get_touch $93 -> x;
1353
        } until (x>=1000);
1354
        y=10;
1355
        do !wait for touch
1356
        {
1357
                @get_touch $93 -> x;
1358
                if (x<1000)
1359
                        y--;
1360
                else
1361
                        y=10;
1362
        } until (y==0);
1363
        startY=1024;
1364
        @get_touch $95 -> x; ! x
1365
        @get_touch $1A -> y; ! y
1366
        if (y>=870)
1367
        {
1368
                if (x<=374)     ! delete
1369
                        return 0;
1370
                if (x<=649)
1371
                        return ' ';
1372
                return 10;
1373
        }
1374
        else if (y>=820)
1375
                {
1376
                        if (x<=256)
1377
                                return 'z';
1378
                        if (x<=340)
1379
                                return 'x';
1380
                        if (x<=423)
1381
                                return 'c';
1382
                        if (x<=506)
1383
                                return 'v';
1384
                        if (x<=590)
1385
                                return 'b';
1386
                        if (x<=673)
1387
                                return 'n';
1388
                        if (x<=753)
1389
                                return 'm';
1390
                        return ',';
1391
                }
1392
        else if (y>=770)
1393
        {
1394
                if (x<=215)
1395
                        return 'a';
1396
                if (x<=298)
1397
                        return 's';
1398
                if (x<=381)
1399
                        return 'd';
1400
                if (x<=465)
1401
                        return 'f';
1402
                if (x<=548)
1403
                        return 'g';
1404
                if (x<=631)
1405
                        return 'h';
1406
                if (x<=711)
1407
                        return 'j';
1408
                if (x<=794)
1409
                        return 'k';
1410
                return 'l';
1411
        }
1412
        else if (y>=720)
1413
        {
1414
                if (x<=173)
1415
                        return 'q';
1416
                if (x<=253)
1417
                        return 'w';
1418
                if (x<=336)
1419
                        return 'e';
1420
                if (x<=416)
1421
                        return 'r';
1422
                if (x<=499)
1423
                        return 't';
1424
                if (x<=583)
1425
                        return 'y';
1426
                if (x<=666)
1427
                        return 'u';
1428
                if (x<=753)
1429
                        return 'i';
1430
                if (x<=836)
1431
                        return 'o';
1432
                return 'p';
1433
        }
1434
        else
1435
        {
1436
                startY=y;
1437
        }
1438
}
1439
];
1440
 
1441
[EraseConsole
1442
sx sy
1443
i ptr endptr bitmapW mask;
1444
 
1445
bitmapW=cBitMpW==>contextW;
1446
 
1447
i=sx;
1448
mask=1;
1449
while (sx&15)
1450
{
1451
        mask=mask*2;
1452
        sx++;
1453
}
1454
mask=~(mask-1);
1455
sx=i/16;
1456
 
1457
while (sy<=cScrenY==>contextW)
1458
{
1459
        for (i=0: i<10: i++)
1460
        {
1461
                ptr=(sy+i)*LineStride+sx+sx;
1462
                endptr=(sy+i+1)*LineStride;
1463
                ptr==>bitmapW=ptr==>bitmapW&mask;
1464
                ptr=ptr+2;
1465
                while (ptr
1466
                {
1467
                        ptr==>bitmapW=0;
1468
                        ptr=ptr+2;
1469
                }
1470
        }
1471
        sx=0;
1472
        sy=sy+10;
1473
        mask=0;
1474
}
1475
];
1476
 
1477
[SysRead
1478
parse text
1479
count i c sep dict readingWord parse0 temp;
1480
 
1481
temp=UpdateStatus();
1482
temp=UpdateScreen();
1483
@write_reg $0007 $0133; ! Turn on the screen
1484
 
1485
c=cScrenX==>contextW;
1486
sep=cScrenY==>contextW;
1487
dict=cScroll==>contextW;
1488
 
1489
do
1490
{
1491
        i++;
1492
        text->i=GetKey();
1493
        if (text->i==0)
1494
        {
1495
                if (i>=2)
1496
                        i=i-2;
1497
                else
1498
                        i--;
1499
        }
1500
        temp=EraseConsole(c,sep);
1501
        cScrenX==>contextW=c;
1502
        cScrenY==>contextW=sep;
1503
        cScroll==>contextW=dict;
1504
        text->(i+1)=0;
1505
        temp=TextToConsole(1, text);
1506
        temp=UpdateScreen();
1507
} until (i && text->i==10);
1508
text->i=0;
1509
text->0=(i-1);
1510
 
1511
i=0;
1512
if (text->0==10)
1513
{
1514
        if (text->1=='m' && text->2=='a' && text->3=='n' && text->4=='d' && text->5=='e'
1515
         && text->6=='l' && text->7=='b' && text->8=='r' && text->9=='o' && text->10=='t')
1516
        {
1517
                parse0=Mandelbrot();
1518
                i=1;
1519
        }
1520
}
1521
else if (text->0==6)
1522
{
1523
        if (text->1=='i' && text->2=='n' && text->3=='v' && text->4=='a' && text->5=='d' && text->6=='e')
1524
        {
1525
                parse0=SpaceInvaders();
1526
                i=1;
1527
        }
1528
}
1529
if (i)
1530
{
1531
        text->0=4;
1532
        text->1='w';
1533
        text->2='a';
1534
        text->3='i';
1535
        text->4='t';
1536
        text->5=0;
1537
}
1538
 
1539
parse0=parse;
1540
parse++;
1541
parse++;
1542
 
1543
parse0->1=0;
1544
count=text->0;
1545
i=1;
1546
while (count)
1547
{
1548
        c=text->i;
1549
        if (c==32)
1550
        {
1551
                sep=-1;
1552
        }
1553
        else
1554
        {
1555
                dict=DictionaryOff-->0;
1556
                sep=dict->0;
1557
                while (sep)
1558
                {
1559
                        if (c==dict->sep)
1560
                                break;
1561
                        sep--;
1562
                }
1563
        }
1564
        if (readingWord)
1565
        {
1566
                if (sep)
1567
                {
1568
                        parse0->1=parse0->1+1;
1569
                        parse->2=i-parse->3;
1570
                        temp=FindInDictionary(text, parse);
1571
                        parse=parse+4;
1572
                        readingWord=0;
1573
                        if (sep>0)
1574
                        {
1575
                                parse->3=i;
1576
                                readingWord=1;
1577
                        }
1578
                }
1579
        }
1580
        else if (sep>=0)
1581
        {
1582
                parse->3=i;
1583
                readingWord=1;
1584
        }
1585
        count--;
1586
        i++;
1587
}
1588
if (readingWord)
1589
{
1590
        parse0->1=parse0->1+1;
1591
        parse->2=i-parse->3;
1592
        temp=FindInDictionary(text, parse);
1593
}
1594
];
1595
 
1596
[SysShowStatus
1597
temp;
1598
temp=UpdateStatus();
1599
temp=UpdateScreen();
1600
];
1601
 
1602
[PressKeyToReboot
1603
temp;
1604
@print "Press any key to reboot]";
1605
temp=UpdateScreen();
1606
temp=GetKey();
1607
@switch_bank 0;
1608
];
1609
 
1610
[SysQuit
1611
temp;
1612
@print "^[Quit. ";
1613
temp=PressKeyToReboot();
1614
];
1615
 
1616
[SysException
1617
pc oper0 oper1;
1618
@print "^[Exception PC/2=";
1619
@print_num pc;
1620
@print " OP0=";
1621
@print_num oper0;
1622
@print " OP1=";
1623
@print_num oper1;
1624
@print "]^[";
1625
pc=PressKeyToReboot();
1626
];

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.