-
Notifications
You must be signed in to change notification settings - Fork 0
/
liontinyb.asm
3060 lines (2872 loc) · 39.1 KB
/
liontinyb.asm
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
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
;* Tiny Basic port for Lion cpu/System
;*
;* ported by Theodoulos Liontakis 2016
;*
;* from michael sullivan's 8086 port of
;*
;* Li-Chen Wang's
;*
;* 8080 tiny basic
;*
;* (c)copyleft
;* all wrongs reserved
;*
;* New commands and fixed point arithmetic added
SDCBUF1 EQU $2000 ;DS 514 Buffer 1
SDCBUF2 EQU $2202 ;DS 514 Buffer 2
FATBOOT EQU $2404 ;DS 2 Fat boot #sector
DIRROOT EQU $2406 ;DS 2 Root directory #sector
FSTCLST EQU $2408 ;DS 2 First data #sector
FSTFAT EQU $240a ;DS 2 First Fat first #sector
SDFLAG EQU $240c ;DS 2 SD card initialized by rom=256
COUNTER EQU $240e ;DS 2 General use counter increased by int 3
FRAC1 EQU $2410 ;DS 2 for fixed point multiplication-division
FRAC2 EQU $2412 ;DS 2 >>
RHINT0 EQU $2414 ; Hardware interrupt 0
RHINT1 EQU $2418 ; Hardware interrupt 1
RHINT2 EQU $241c
RINT6 EQU $2420
RINT7 EQU $2424
RINT8 EQU $2428
RINT9 EQU $242c
RINT15 EQU $2430
XCN EQU 79
YCN EQU 29
VMODE EQU $2434
SCOL EQU $2435
SHIFT EQU $2436
CAPSL EQU $2437
CIRCX EQU $2438
CIRCY EQU $243A
PLOTM EQU $243C
SECNUM EQU $243E
SECPFAT EQU $2440
FATROOT EQU $2442
RESRVB EQU $244E
ORG $2448 ;Ram
; RAM program ENTRY POINT
; A7 Reserved for decimal (was num2), in A6 fraction result of TSTNUM
START: CLI
MOV A1,STACK
SETSP A1
STI
JSR CLRMEM
IN A1,24 ; get mode
CMPI A1,1
JZ VM1
MOV (DEFY),29
MOV (DEFX),79
MOV.B (PLOTM),1
SETX 1589 ; set colors
MOV A1,61152
COLINIT: OUT A1,$F1F1
JXAW A1,COLINIT
JR 12
VM1: MOV (DEFY),24
MOV (DEFX),52
SETX 15 ; disable sprites mode 1
MOV A3,16391
MOV A4,16391+256
SPRLP1: OUT.B A3,0
OUT.B A4,0
ADD A3,4096
ADD A4,4096
OUT.B A3,0
OUT.B A4,0
ADD A3,4096
ADD A4,4096
OUT.B A3,0
OUT.B A4,0
SUB A3,8184
SUB A4,8184
JMPX SPRLP1
MOV A1,$1F
MOV.B (SCOL),A1
MOV A3,(DEFY)
MOV (XX),A3 ;$001D ; Set INITIAL POS
MOV A3,TITLE
MOVI A2,0
MOVI A0,0
JSR PRTSTG
MOV A3,TXTBGN
MOV A4,A3
MOV (TXTUNF),A3
RSTART: CLI
MOVI A7,0
MOVI A6,0
MOV A0,STACK
SETSP A0
STI
IN A1,24
MOV (DEFY),29
MOV (DEFX),79
CMPI A1,1
JNZ ST2
MOV (DEFX),52
MOV (DEFY),24
ST2: MOVI A1,0
MOV (LOPVAR),A1
MOV (STKGOS),A1
MOV (CURRNT),A1
;JSR CRLF
MOV A5,(DEFY)
MOV (XX),A5
MOV A3,OK
MOVI A0,0
JSR prtstg
ST3: MOV (UINT),0
MOVHL A0,0
MOV.B A0,'>'
JSR GETLN
PUSH A4 ; A4 end of text in buffer
MOV A3,BUFFER
JSR TSTNUM
MOVHL A0,0
JSR IGNBLNK
OR A1,A1 ; A1 num
POP A2
JZ DIRECT
SUBI A3,2
MOV A0,A1
MOV A4,A3
JSR STOSW ; store lineno to
PUSH A2
PUSH A3
MOV A0,A2
SUB A0,A3
PUSH A0
JSR FNDLN
PUSH A3
JNZ ST4
PUSH A3
JSR FNDNXT
POP A2
MOV A1,(TXTUNF)
JSR MVUP
MOV A1,A2
MOV (TXTUNF),A1
ST4:
POP A2
MOV A1,(TXTUNF)
POP A0
PUSH A1
CMPI.B A0,3
JZ RSTART
ADD A0,A1
MOV A1,A0
MOV A3,TXTEND
CMP A1,A3
JNC QSORRY
MOV (TXTUNF),A1
POP A3
JSR MVDOWN
POP A3
POP A1
JSR MVUP
JMP ST3
TSTV:
MOVHL A0,'@'
JSR IGNBLNK
JC RET2
JNZ TV1
JSR PARN
SLL A1,2
PUSH A3
XCHG A1,A3
JSR SIZE
CMP A1,A3
JC ASORRY
MOV A1,TXTEND
SUB A1,A3
POP A3
RET
TV1: CMP.B A0,122 ;'z' ; TEST VARIABLE
JA RET22
CMP.B A0,97
JAE TV2
CMP.B A0,'Z'
JA RET22
CMP.B A0,'A'
JC RET2
TV2: INC A3
MOV A1,VARBGN
SUB.B A0,65
AND A0,$00FF
SLL A0,2
ADD A1,A0
RET2:
RET
RET22:
CMP.B A0,255
RET
;----- TSTNUM
TSTNUM:
MOVI A1,0
MOV A6,0
MOVHL A2,A1
MOVHL A0,0
JSR IGNBLNK
TN1:
CMP.B A0,'.'
JZ DECIM
CMP.B A0,'0'
JC RET2
CMP.B A0,':'
JNC RET2
ADD A2,$0100
PUSH A2
MOVI A2,10
MULU A1,A2
MOVI A0,0
MOV.B A0,(A3)
SUB.B A0,'0'
MOVHL A0,0
INC A3
ADD A1,A0
POP A2
MOV.B A0,(A3)
JP TN1
NFR: PUSH A3
MOV A3,NFND
JMP ERROR
QHOW:
PUSH A3
AHOW:
MOV A3,HOW
JMP ERROR
DECIM: PUSH A1
PUSH A2
PUSH A4
MOVI A4,1
MOVI A1,0
MOVI A0,0
TN2: INC A3
MOV.B A0,(A3)
CMP.B A0,'0'
JC DRET
CMP.B A0,':'
JNC DRET
MOVI A2,10
MULU A1,A2
SUB.B A0,'0'
CMP A4,10000
JZ QHOW
MOVI A2,10
MULU A4,A2
ADD A1,A0
JNC TN2
JMP QHOW
DRET: MOVI A2,0
MOV A0,15
DTOB2: OR A0,A0
JN DTOBEND
SLL A1,1
CMP A1,A4
JC DTOB1
BSET A2,A0
DEC A0
SUB A1,A4
JNZ DTOB2
JMP DTOBEND
DTOB1: DEC A0
JMP DTOB2
DTOBEND: MOV A6,A2
POP A4
POP A2
POP A1
RET
TSTUNUM:
MOVI A1,0
MOV A6,0
MOVHL A2,A1
MOVHL A0,0
JSR IGNBLNK
UTN1:
CMP.B A0,'0'
JC RET2
CMP.B A0,':' ; is digit ?
JNC RET2
ADD A2,$0100
PUSH A2
MOVI A2,10
MULU A1,A2
;CMPI A2,0
JANZ A2,QHOW
MOVI A0,0
MOV.B A0,(A3)
SUB.B A0,'0'
MOVHL A0,0
INC A3
POP A2
ADD A1,A0
MOV.B A0,(A3)
JNC UTN1
JMP QHOW
;-------- tables ----
tab1:
TEXT "LIS"
DB 'T'+128
DA LIST
TEXT "NE"
DB 'W'+128
DA NEW
TEXT "RU"
DB 'N'+128
DA RUN
TEXT "BY"
DB 'E'+128
DA NEW
TEXT "SLIS"
DB 'T'+128
DA SLIST
TEXT "LOA"
DB 'D'+128
DA LOAD
TEXT "SAV"
DB 'E'+128
DA SAVE
TEXT "FIN"
DB 'D'+128
DA FIND
TEXT "DI"
DB 'R'+128
DA DIR
TEXT "C"
DB 'D'+128
DA CD
TAB2 TEXT "PRIN"
DB 'T'+128
DA PRINT
TEXT "I"
DB 'F'+128
DA IFF
TEXT "NEX"
DB 'T'+128
DA NEXT
TEXT "GOT"
DB 'O'+128
DA GOTO
TEXT "GOSU"
DB 'B'+128
DA GOSUB
TEXT "RETUR"
DB 'N'+128
DA RETURN
TEXT "FO"
DB 'R'+128
DA FOR
TEXT "PLO"
DB 'T'+128
DA TPLOT
TEXT "PO"
DB 'S'+128
DA ATCMD
TEXT "OUT"
DB 'B'+128
DA OUTBCMD
TEXT "OU"
DB 'T'+128
DA OUTCMD
TEXT "RE"
DB 'M'+128
DA REM
TEXT "INPU"
DB 'T'+128
DA INPUT
DB '?'+128
DA PRINT
TEXT "POK"
DB 'E'+128
DA POKE
TEXT "COLO"
DB 'R'+128
DA COLOR
TEXT "BEE"
DB 'P'+128
DA BEEP
TEXT "LIN"
DB 'E'+128
DA LINE
TEXT "CIRCL"
DB 'E'+128
DA CIRCLE
TEXT "FCOLO"
DB 'R'+128
DA FORE
TEXT "BCOLO"
DB 'R'+128
DA BACK
TEXT "CLS"
DB 'P'+128
DA CLSSP
TEXT "CL"
DB 'S'+128
DA CLS
TEXT "LE"
DB 'T'+128
DA LET
TEXT "SCREE"
DB 'N'+128
DA SCREEN
TEXT "LCOD"
DB 'E'+128
DA LCODE
TEXT "SCOD"
DB 'E'+128
DA SCODE
TEXT "RCOD"
DB 'E'+128
DA RCODE
TEXT "LSCR"
DB 'N'+128
DA LSCRN
TEXT "GCOD"
DB 'E'+128
DA GCODE
TEXT "DELET"
DB 'E'+128
DA DELETE
TEXT "MOD"
DB 'E'+128
DA MODE
TEXT "PMOD"
DB 'E'+128
DA PLOTMD
TEXT "STO"
DB 'P'+128
DA STOP
DB 128
DA DEFLT
TAB4 TEXT "KE"
DB 'Y'+128
DA KEY
TEXT "RN"
DB 'D'+128
DA RND
TEXT "ROUN"
DB 'D'+128
DA ROUND
TEXT "AB"
DB 'S'+128
DA MYABS
TEXT "IN"
DB 'P'+128
DA INP
TEXT "PEE"
DB 'K'+128
DA PEEK
TEXT "IN"
DB 'T'+128
DA TOINT
TEXT "JOY"
DB '1'+128
DA JOYST1
TEXT "JOY"
DB '2'+128
DA JOYST2
TEXT "SI"
DB 'N'+128
DA SIN
TEXT "CO"
DB 'S'+128
DA COS
TEXT "P"
DB 'I'+128
DA PI
TEXT "SQR"
DB 'T'+128
DA SQRT
; TEXT "EX"
; DB 'P'+128
; DA EXPO
; TEXT "L"
; DB 'N'+128
; DA LN
TEXT "TIME"
DB 'R'+128
DA TIMER
TEXT "SIZ"
DB 'E'+128
DA SIZE
TEXT "WAIT"
DB 'K'+128
DA WAITK
TEXT "US"
DB 'R'+128
DA USR
TEXT "SDINI"
DB 'T'+128
DA SDINIT
TEXT "BTO"
DB 'P'+128
DA BTOP
DB 128
DA XP40
TAB5 DB 'T', 'O'+128
DA FR1
DB 128
DA QWHAT
TAB6 TEXT "STE"
DB 'P'+128
DA FR2
DB 128
DA FR3
TAB8 DB '>'
DB '='+128
DA XP11
DB '#'+128
DA XP12
DB '>'+128
DA XP13
DB '='+128
DA XP15
DB '<'
DB '='+128
DA XP14
DB '<'+128
DA XP16
DB 128
DA XP17
DIRECT:
MOV A1,TAB1
DEC A1
EXEC:
MOVHL A0,0
JSR IGNBLNK
PUSH A3
EX1:
MOV.B A0,(A3)
CMP.B A0,97
JB SKIPUP
CMP.B A0,128
JAE SKIPUP
AND.B A0,$DF ; UPPER CASE
SKIPUP: INC A3
CMP.B A0,'.'
JZ EX4
INC A1
MOV.B A4,(A1)
BCLR A4,7
XOR.B A4,A0
JZ EX2
EX0A: ; not equal
CMP.B (A1),128
JNC EX0B
INC A1
JMP EX0A
EX0B:
ADDI A1,3 ; next keyword
BTST A1,0
JZ ALI2
INC A1
ALI2: POP A3
CMP.B (A1),128
JZ EX3A
DEC A1
JMP EXEC
EX4:
INC A1 ; found ending with .
CMP.B (A1),128
JC EX4
JMP EX3
EX2:
CMP.B (A1),128
JC EX1
EX3:
POP A0
EX3A: INC A1
BTST A1,0 ; ALIGN TO EVEN ADDRESS
JZ ALIG
INC A1
ALIG: JMP (A1)
;--------------------
NEW:
JMP START
STOP:
JSR ENDCHK
JMP RSTART
RUN:
JSR ENDCHK
MOV A3,TXTBGN
RUNNXL:
MOVI A1,0
JSR FNDLNP
JNC RUNTSL
JMP RSTART
RUNTSL:
MOV (CURRNT),A3
ADDI A3,2
RUNSML:
JSR CHKIO
MOV A1,TAB2
DEC A1
JMP EXEC
GOTO:
JSR EXP
PUSH A3
JSR ENDCHK
JSR FNDLN
JNZ AHOW
POP A0
JMP RUNTSL
; ----------- LIST
SLIST:
MOV.B (SER),1 ; REDIRECT TO SERIAL PORT
LIST: MOVI A5,0
JSR TSTNUM
JSR ENDCHK
JSR FNDLN
LS1:
JNC LS2
MOV.B (SER),0
JMP RSTART
LS2:
JSR PRTLN
JSR CHKIO
INC A5
CMP A5,23
JB LS3
MOVI A5,0
JSR WAITK
LS3: JSR FNDLNP
JMP LS1
FIND:
JSR TSTNUM
JSR ENDCHK
JSR FNDLN
JC RSTART
JSR PRTLN
JMP ST3
PRINT:
MOVI.B A2,3
MOVHL A0,59
JSR IGNBLNK
JNZ PR2
JSR CRLF
JMP RUNSML
PR2:
MOVHL A0,13
JSR IGNBLNK
JNZ PR0
JSR CRLF
JMP RUNNXL
PR0:
MOVHL A0,'#'
JSR IGNBLNK
JNZ PR1
JSR EXP
MOV.B A2,A1
JMP PR3
PR1:
JSR QTSTG
JMP PR8
PR3:
MOVHL A0,44
JSR IGNBLNK
JNZ PR6
JSR FIN
JMP PR0
PR6:
MOVHL A0,'\'
JSR IGNBLNK
JZ FINISH
JSR CRLF
JMP FINISH
PR8:
JSR EXP
PUSH A2
JSR PRTNUM
MOV A1,A7
OR A1,A1
JZ PR9
MOV.B A0,'.'
JSR CHROUT
JSR FRACTION
PR9: POP A2
JMP PR3
FRACTION:
PUSH A3
PUSH A4
MOVI A4,0
MOV A3,5000
SETX 14
FRA1: BTST A1,15
JZ FRA2
ADD A4,A3
FRA2: SRL A3,1
SLL A1,1
JMPX FRA1
ADC A4,0
MOV A1,A4
MOVI A2,3
JSR PRTUNUM
POP A4
POP A3
RET
;-------------- GOSUB
GOSUB:
JSR PUSHA
JSR EXP
PUSH A3
JSR FNDLN
JNZ AHOW
MOV A1,(CURRNT)
PUSH A1
MOV A1,(STKGOS)
PUSH A1
MOVI A1,0
MOV (LOPVAR),A1
GETSP A0
ADD A1,A0
MOV (STKGOS),A1
JMP RUNTSL
RETURN:
JSR ENDCHK
MOV A1,(STKGOS)
OR A1,A1
JZ QWHAT
SETSP A1
POP A1
MOV (STKGOS),A1
POP A1
MOV (CURRNT),A1
POP A3
JSR POPA
JMP FINISH
; ----------for
FOR: JSR PUSHA
JSR SETVAL
DEC A1
MOV (LOPVAR),A1
MOV A1,TAB5
DEC A1
JMP EXEC
FR1:
JSR EXP
MOV (LOPLMT),A1
MOV A1,TAB6
DEC A1
JMP EXEC
FR2:
JSR EXP
JMP FR4
FR3:
MOVI A1,1
FR4:
MOV (LOPINC),A1
FR5:
MOV A1,(CURRNT)
MOV (LOPLN),A1
XCHG A1,A3
MOV (LOPPT),A1
MOVI A2,10
MOV A1,(LOPVAR)
XCHG A3,A1
MOV A1,A2
GETSP A0
ADD A1,A0
JMP FR7A
FR7:
ADD A1,A2
FR7A:
MOVHL A0,(A1)
INC A1
MOV.B A0,(A1)
DEC A1
OR A0,A0
JZ FR8
CMP A0,A3
JNZ FR7
XCHG A3,A1
MOVI A1,0
GETSP A0
ADD A1,A0
MOV A2,A1
MOVI A1,10
ADD A1,A3
JSR MVDOWN
SETSP A1
FR8:
MOV A1,(LOPPT)
XCHG A1,A3
JMP FINISH
NEXT:
JSR TSTV
JC QWHAT
MOV (VARNXT),A1
NX0:
PUSH A3
XCHG A3,A1
MOV A1,(LOPVAR)
MOVLH A0,A1
OR.B A0,A1
JZ AWHAT
CMP A3,A1
JZ NX3
POP A3
JSR POPA
MOV A1,(VARNXT)
JMP NX0
NX3:
MOVHL A3,(A1)
INC A1
MOV.B A3,(A1)
MOV A1,(LOPINC)
PUSH A1
ADD A1,A3
XCHG A3,A1
MOV A1,(LOPVAR)
SWAP A3
MOV.B (A1),A3
INC A1
SWAP A3
MOV.B (A1),A3
MOV A1,(LOPLMT)
POP A0
SWAP A0
OR A0,A0
JP NX1
XCHG A1,A3
NX1:
JSR CKHLDE2
POP A3
JC NX2
MOV A1,(LOPLN)
MOV (CURRNT),A1
MOV A1,(LOPPT)
XCHG A3,A1
JMP FINISH
NX2:
JSR POPA
JMP FINISH
; ------------ EXPRES
SIZE:
MOV A1,TXTEND ;VARBGN
SUB A1,(TXTUNF) ;A3
RET10:
RET
; ------------ DIVIDE
DIVIDE: ; INT 4/9 Div A2 by A1 res in A1,A0
MOV A2,A1
MOV A1,A3
CMP (UINT),0
JNZ DV1
MOVI A0,9
INT 4
JMP DVE
DV1: MOVI A0,6
INT 5
DVE: MOV A2,A1
XCHG A0,A1
RET
UDIVIDE: ; INT 4/9 Div A2 by A1 res in A1,A0
MOV A2,A1
MOV A1,A3
MOVI A0,6
INT 5
MOV A2,A1
XCHG A0,A1
RET
DIVIDE2: ; INT 5/1 Div A2 by A1 res in A1,A0
MOV A2,A1
MOV A1,A3
;MOVI A0,1
;INT 5
JSR FDIV
MOV A2,A1
XCHG A0,A1
RET
CHKSGN:
OR A1,A1
JP RET11
CHGSGN:
NOT A1
NEG A7
ADC A1,0
XOR A2,$8000
RET11:
RET
CKHLDE:
MOV A0,A1
XOR A0,A3
JP CK1
XCHG A3,A1
CK1: CMP A1,A3
JNZ CK2
MOV A0,A7
BTST A1,15
JZ CK3
NEG A4
CK3: BTST A3,15
JZ CK4
NEG A0
CK4: CMP A4,A0 ;(NUM2)
CK2: RET
CKHLDE2:
MOV A0,A1
XOR A0,A3
JP CK11
XCHG A3,A1
CK11: CMP A1,A3
RET
;---- GETVAL FIN
SETVAL:
JSR TSTV
JC QWHAT
PUSH A1
MOVHL A0,'='
JSR IGNBLNK
JNZ QWHAT
JSR EXP
MOV A2,A1
POP A1
MOV (A1),A2
ADDI A1,2
MOV (A1),A7
DEC A1
RET
FINISH:
JSR FIN
JMP QWHAT
FIN:
MOVHL A0,59
JSR IGNBLNK
JNZ FI1
POP A0
JMP RUNSML
FI1:
MOVHL A0,13
JSR IGNBLNK
JNZ FI2
POP A0
JMP RUNNXL
FI2:
RET
ENDCHK: