comparison TL1/TL1os9.asm @ 121:6ebaa9693310

os9 version TL/1
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 04 Jan 2019 19:02:43 +0900
parents
children 4d06202716c2
comparison
equal deleted inserted replaced
120:fbb3301a2564 121:6ebaa9693310
1 *******TL/1*************
2 nam tl1
3 ttl TL1 compiler
4
5 ifp1
6 use defsfile
7 endc
8
9 * Module header definitions
10 tylg set Prgrm+Objct
11 atrv set ReEnt+rev
12 rev set $00
13 edition set 1
14
15 mod eom,name,tylg,atrv,start,size
16
17 TXTTOP EQU $FB7E
18
19 INDN RMB 1
20 OUTDN RMB 1
21 LB RMB 2
22 GB RMB 2
23 MHIGH RMB 1
24 MOD RMB 1
25 WT1 RMB 1
26 WT2 RMB 1
27 RNDH RMB 1
28 RNDL RMB 1
29 DREG RMB 1
30 DBUF RMB 3
31 XR RMB 2
32 YR RMB 2
33 ZR RMB 2
34 PFTBEG RMB 2
35 PC RMB 2
36 SREG RMB 2
37 SP RMB 2
38 PFMAX RMB 2
39 LSW RMB 1
40 SY RMB 1
41 CH RMB 1
42 VAL RMB 1
43 GL RMB 1
44 OPER RMB 1
45 GLL RMB 1
46 INDEX RMB 1
47 RMCODE RMB 1
48 ACC RMB 1
49 LSIZE RMB 1
50 TCOUNT RMB 1
51 TEND RMB 2
52 WEND RMB 2
53 AMODE RMB 1
54 RSW RMB 1
55 GEND RMB 2
56 SSW RMB 1
57
58 ioentry rmb $80
59 filepath rmb 2
60 parmptr rmb 2
61 stdin rmb 1
62 chksum rmb 1
63 bcount rmb 1
64 adr rmb 2
65 work rmb 2
66 readbuff rmb $100
67
68 OBJSTART RMB 2
69
70 **
71 * LIBRARY ADDRESSS TABLE
72 **
73 LIBR RMB 80
74
75 * OBJECT PG AREA
76
77 WTBLE RMB $500+$100
78 MSTACK RMB $100
79
80 OBJECT RMB 2048 * NOP
81
82 size equ .
83
84 name fcs /TL1/
85 fcb edition
86
87 ******
88 * SUPORTING ROUTINES
89 * & I/0 CONTROL
90 **
91 ** OBJECT START
92 C leas MSTACK,u
93 VARPTR LDX #0
94 STX GB
95 STX LB
96 clra
97 lbra close
98 sta INDN
99 inca
100 sta OUTDN
101 OBJMP JMP OBJECT,u
102
103 **
104 COMP CLRA
105 STA OUTDN
106 STA LSW
107 STA INDEX
108 STA AMODE
109 STA LSIZE
110 STA RSW
111 STA PFMAX
112 leax ,MSTACK,u
113 STX SP
114 LEAX 2,x
115 STX PFTBEG
116 CLRB
117 C1 STA ,X+
118 DECB
119 BNE C1
120 INCA
121 STA TCOUNT
122 LDA #' '
123 STA CH
124 ** copy reserved word table
125 LEAX WTABLE,PCR
126 leay WTBLE,PCR
127 ldb #WTBLEND-WTABLE
128 tbl1 lda ,x+
129 sta ,y+
130 decb
131 bne tbl1
132 sty TEND
133 LEAX OBJECT,u
134 STX PC
135 **
136 LBSR CRLF
137 BSR REG0
138 LBSR WORD
139 CMPA #$30 PROC?
140 BNE *+4
141 BSR REGNAM
142 BSR REG0
143 CMPA #$31 FUNC?
144 BNE *+4
145 BSR REGNAM
146 CLR LSIZE
147 BSR REG0
148 LBSR PROG
149 LBSR STPOUT
150 LDX TEND
151 STX GEND
152 PLOOP LDA SY
153 CMPA #$8F /END CODE
154 LBEQ ENDL
155 CMPA #$4
156 BCC ERR4
157 DECA
158 STA AMODE
159 LDA VAL
160 LBSR DEFPF
161 LBSR PUTHS
162 FDB $03BD
163 FDB PSHLB
164 BSR REG0
165 CLR LSIZE
166 LBSR WORD
167 CMPA #$37
168 BNE PL1
169 BSR REGNAM
170 LDA #$38 )
171 LBSR CHECK
172 PL1 BSR PROG
173 LDB AMODE
174 CMPB #1
175 BNE *+5
176 LBSR RETP
177 LDX GEND
178 STX TEND
179 LDB #5
180 STB TCOUNT
181 BRA PLOOP
182 **
183 * REGIST ZERO
184 **
185 REG0 LDX TEND
186 CLR ,X+
187 STX TEND
188 INC TCOUNT
189 RTS
190 **
191 * REGIST NAME
192 **
193 REGNAM COM RSW
194 LBSR WORD
195 LDB RSW
196 BEQ *+5
197 ERR4 LBRA ERROR
198 LDX TEND
199 LDA LSIZE
200 STA ,X
201 INC LSIZE
202 LDX WEND
203 STX TEND
204 BSR WORD1
205 CMPA #$36
206 BNE REG2
207 BSR WORD1
208 BNE ERR4
209 LDA VAL
210 ADDA LSIZE
211 BSR WORD1
212 LDA #$3A
213 LBSR CHECK
214 REG2 CMPA #$3C
215 BEQ REGNAM
216 RTS
217 **
218 * PROGRAM
219 **
220 PROG CMPA #$32 VAR?
221 BNE *+4
222 BSR REGNAM
223 BSR REG0
224 CMPA #$33 ARRAY?
225 BNE *+4
226 BSR REGNAM
227 LDB #-1
228 STB INDEX
229 **
230 * STATEMENT
231 **
232 STAT BSR SSTAT
233 LDB SSW
234 BEQ RTS1
235 LBRA ERROR
236 **
237 * STATEMENTS LIST
238 **
239 STLIST BSR SSTAT
240 LDB SSW
241 BEQ STLIST
242 RTS1 RTS
243 **
244 * SINGLE STATEMENT
245 **
246 SSTAT CLRA
247 STA ACC
248 STA SSW
249 LDA SY
250 **
251 * MULTIPLE STATEMENTS
252 **
253 SS1 CMPA #$34
254 BCS SS2
255 CMPA #$38
256 BCC SS2
257 ADDA #4
258 PSHS A
259 BSR WORD1
260 BSR STLIST
261 PULS A
262 CLR SSW
263 LBRA CHECK
264 **
265 * STOP
266 **
267 SS2 CMPA #$50
268 BNE SS3
269 BSR STPOUT
270 WORD1 LBRA WORD
271 **
272 STPOUT LBSR PUTHS
273 FCB 3,$7E
274 FDB MONIT
275 RTS
276 **
277 * RETURN
278 **
279 SS3 CMPA #$51
280 BNE SS4
281 LDB AMODE
282 LBEQ ERR4
283 PSHS B
284 BSR WORD1
285 PULS B
286 DECB
287 BEQ RETP
288 LBSR EXPR
289 RETP LBSR PUTHS
290 FDB $037E
291 FDB PULLB
292 RTS
293 **
294 * PROC CALL
295 **
296 SS4 CMPA #2
297 LBEQ PFCALL
298 CMPA #$E0
299 BCS SS5
300 LBRA PFCALL
301 **
302 * ASSIGNMENT STATEMENT
303 **
304 SS5 CMPA #7
305 BCS ASSIGN
306 LBRA SS6
307 ASSIGN LDB GL
308 PSHS B
309 LDB VAL
310 PSHS B
311 CMPA #5
312 BNE ASS1
313 LBSR SUBSC1
314 LDB ,S
315 LDA LSW
316 BNE AS0
317 LDA #$8B
318 LBSR PUTAB
319 LDA #1
320 BRA AS2
321 AS0 ADDB OPER
322 STB ,S
323 CLR LSW
324 BRA AS1
325 ASS1 CMPA #6
326 BNE ASS2
327 LBSR DSUBSC
328 LDA #2
329 BRA AS2
330 ASS2 CMPA #4
331 BEQ *+5
332 LBRA ERROR
333 LBSR WORD
334 AS1 CLRA
335 AS2 PSHS A
336 LDA SY
337 CMPA #$3C
338 BNE *+9
339 LBSR WORD
340 BSR ASSIGN
341 BRA AS3
342 LDA #$3D
343 LBSR CHECK
344 LDA #$27
345 LBSR CHECK
346 LBSR EXPR
347 AS3 PULS D
348 STB OPER 4--
349 PULS B
350 STB GLL
351 TSTA
352 BNE AS4
353 LBSR PUTX
354 LDA #$A7
355 LDS OPER
356 LBRA PUTAB
357 AS4 DECA
358 BNE AS5
359 LBSR PUTX
360 LDA #$33
361 LBSR PUTA
362 LBRA STABX
363 AS5 LBSR PUTHS
364 FCB 10
365 FDB $33D7
366 FCB WT2
367 FDB $33D7
368 FCB WT1 $DE,WT2
369 FDB $A700
370 CLR INDEX
371 RTS
372 **
373 ** NON-STATEMENT
374 **
375 SSEND COM SSW
376 RTS
377 **
378 SS6 CMPA #$58
379 BCC SSEND
380 CMPA #$52
381 BCS SSEND
382 SUBA #$51
383 PSHS A
384 LBSR WORD
385 PULS B
386 **
387 * REPEAT UNTIL
388 **
389 DECB
390 BNE SS7
391 STB INDEX
392 BSR ASTOUT
393 LBSR STLIST
394 LDA #$60
395 LBSR CHECK
396 LBSR EXPR
397 LBSR PUTHS
398 FCB 2
399 FDB $2603
400 CLR SSW
401 BRA MINOUT
402 **
403 * FOR-TO
404 **
405 SS7 DECB
406 BNE SS8
407 CMPA #4
408 BEQ *+5
409 LBRA ERROR
410 LDB VAL
411 PSHS B
412 LDB GL
413 PSHS B
414 LBSR ASSIGN
415 LDA #$61
416 LBSR CHECK
417 CLR ACC
418 LBSR EXPR
419 LDA #$64
420 LBSR CHECK
421 BSR ASTOUT
422 LDA #$36
423 LBSR PUTA
424 CLR INDEX
425 LBSR STAT
426 LDA #$32
427 LBSR PUTA
428 PULS D
429 STA GLL
430 STB OPER
431 LDA #$A1
432 LBSR PUTABX
433 LBSR PUTHS
434 FCB 2
435 FDB $2305
436 LDA #$6C
437 LDB OPER
438 LBSR PUTAB
439 MINOUT LBRA PULJMP
440 ASTOUT LBRA PSHDEF
441 **
442 * WHILE-DO
443 **
444 SS8 DECB
445 BNE SS9
446 STB INDEX
447 BSR ASTOUT
448 LBSR EXPR
449 LDA #$64
450 LBSR CHECK
451 LBSR PUTHS
452 FCB 2
453 FDB $2603
454 BSR SLAOUT
455 LDS INDEX
456 PSHS B
457 LBSR STAT
458 PULS B
459 STB INDEX
460 BSR PEROUT
461 BSR MINOUT
462 PLUOUT LBRA PULDEF
463 **
464 ** IF—THEN
465 **
466 SS9 DECB
467 BNE SS10
468 LBSR EXPR
469 LDA #$65
470 LBSR CHECK
471 LBSR PUTHS
472 FCB 2
473 FDB $2603
474 BSR SLAOUT
475 LDB INDEX
476 PSHS B
477 LBSR STAT
478 PULS B
479 CMPB INDEX
480 BEQ *+4
481 CLR INDEX
482 BRA PLUOUT
483 SLAOUT LBRA PSHJMP
484 PEROUT LBRA STCHG
485 ***
486 * CASE—OF
487 SS10 DECB
488 BNE SS11
489 LBSR EXPR
490 LDA #$66
491 LBSR CHECK
492 CLRB
493 S10A INCB
494 PSHS B
495 STB ACC
496 LBSR LEXPR
497 LDA #$81
498 LBSR AOPER
499 LBSR PUTHS
500 FCB 2
501 FDB $2703
502 BSR SLAOUT
503 LDB INDEX
504 PSHS B
505 LBSR STAT
506 BSR SLAOUT
507 BSR PEROUT
508 BSR PLUOUT
509 PULS B
510 STB INDEX
511 PULS B
512 LDA SY
513 CMPA #$67
514 BNE S10A
515 PSHS B
516 LBSR WORD
517 LBSR STAT
518 CLR INDEX
519 PULS A
520 LBRA PLDFN
521 **
522 * WRITE STATEMENT
523 **
524 SS11 LDA #$37
525 LBSR CHECK
526 LBSR EXPR
527 LBSR PUTHS
528 FDB $0297
529 FCB OUTDN
530 LDA #$3D
531 LBSR CHECK
532 WTLP CLR ACC
533 BSR WTERM
534 LDA SY
535 CMPA #$3C
536 BNE WTEN
537 LBSR WORD
538 BRA WTLP
539 WTEN LDA #$36
540 LBRA CHECK
541 **
542 WTERM CMPA #$6C
543 BNE WR1
544 LBSR PUTHS
545 FDB $03BD
546 FDB PUTSTR
547 LDA CH
548 WR01 CMPA #'"'
549 BEQ WR02
550 LBSR PUTA
551 LBSR GETCH
552 BRA WR01
553 WR02 CLRA
554 STA INDEX
555 LBSR PUTA
556 LBSR GETCH
557 LBRA WORD
558 **
559 WR1 CMPA #$6B
560 BNE WR3
561 LBSR WORD
562 CMPA #$37
563 BEQ WR2
564 LBSR PUTHS
565 FDB $03BD
566 FDB CRLFA
567 RTS
568 **
569 WR2 LBSR WEXPR
570 BSR WTEN
571 LBSR PUTHS
572 FDB $03BD
573 FDB CRLFA
574 RTS
575 **
576 WR3 CMPA #$6A
577 BNE WR4
578 LBSR SUBSC
579 LBSR PUTHS
580 FDB $03BD
581 FDB SPACEA
582 RTS
583 **
584 WR4 CMPA #$A9
585 BNE WR5
586 LBSR SUBSC
587 LBSR PUTHS
588 FDB $03BD
589 FDB PUTCA
590 RTS
591 **
592 WR5 CMPA #$26
593 BNE WR6
594 LBSR DSUBSC
595 LBSR PUTPLB
596 LBSR PUTHS
597 FDB $03BD
598 FDB PUTDA+1
599 BRA WR66
600 **
601 WR6 LBSR EXPR
602 LBSR PUTHS
603 FDB $03BD
604 FDB PUTDA
605 WR66 CLR INDEX
606 RTS11 RTS
607 **
608 * PUTX & PUTB
609 **
610 PUTABX PSHS D
611 BSR PUTX
612 PULS D
613 BRA PUTAB
614 **
615 * PUT LP, OR GB BY INDEX
616 **
617 PUTX LDB GLL
618 CMPB INDEX
619 BEQ RTS11
620 STB INDEX
621 ADDB #LB+1
622 LDA #$DE
623 ***
624 * PUT ACC A&B
625 **
626 PUTAB BSR PUTA
627 TFR B,A
628 **
629 * PUT ACCA RS AN OBJECT
630 **
631 PUTA STX RNDH
632 LBSR AOUT
633 LDX RNDH
634 RTS
635 **
636 * PUTHS STRING
637 **
638 PUTHS LDX ,S++
639 LDB ,X+
640 PS1 LDA ,X+
641 BSR PUTA
642 DECB
643 BNE PS1
644 JMP ,X
645 **
646 ** CHECK ACC
647 **
648 CHECK CMPA SY
649 BEQ WORD
650 **
651 * ERROR
652 **
653 ERROR LBSR PUTSTR
654 FDB $0D0A
655 FCC "ERROR ",0
656 LDX TEND
657 LEAX 1,X
658 NEG ,X
659 ER0 LDA ,X+
660 LBSR PUTCA
661 CMPX WEND
662 BNE ER0
663 lbra exit
664 **
665 * WORD DECORDER
666 **
667 WORD BSR WORDS
668 LDA SY
669 RTS
670 WORDS CLRB
671 STB SY
672 STB VAL
673 LDA CH
674 ** SKIP CONT ,SPACE.;
675 WD1 CMPA #$21
676 BCS SKIP
677 CMPA #'.'
678 BEQ SKIP
679 CMPA #';'
680 BNE WD2
681 SKIP BSR GETCH
682 BRA WD1
683 **
684 * COMMENT
685 **
686 WD2 CMPA #'%'
687 BNE WD3
688 BSR GETCH
689 CMPA #$20
690 BCC *--4
691 BRA WD1
692 **
693 * ASCC CONST
694 **
695 WD3 CMPA #'\''
696 BNE WD4
697 BSR GETCH
698 STA VAL
699 BSR GETCH
700 GETCH PSHS X
701 LBSR MEMIN
702 STA CH
703 PULS X,PC
704 * HEX CONSTANT
705 WD4 CMPA #'$'
706 BNE WD5
707 WD40 BSR GETCH
708 BSR TSTNA
709 BEQ WD41
710 BCC RTS2
711 CMPA #'F'+1
712 BCC RTS2
713 SUBA #7
714 WD41 SUBA #'0'
715 LDB VAL
716 ASLB
717 ASLB
718 ASLB
719 ASLB
720 PSHS B
721 ADDA ,S+
722 STA VAL
723 BRA WD40
724 **
725 * TEST ALPHA NUMERIC
726 TSTNA CMPA #'0'
727 BCS NAF
728 CMPA #'9'+1
729 BCS NT
730 CMPA #'A'
731 BCS NAF
732 CMPA #'Z'+1
733 BCS AT
734 NAF CLRB CLEAR C
735 AT LDB #-1
736 RTS2 RTS
737 NT CLRB
738 RTS
739 ** DECIMAL CONSTANT
740 WD5 BSR TSTNA
741 BNE WD6
742 WD50 SUBA #'0'
743 PSHS A
744 LDA VAL
745 LDB #10
746 MUL
747 ADDA ,S+
748 STA VAL
749 BSR GETCH
750 BSR TSTNA
751 BEQ WD50
752 RTS
753 * THE OTHER WORDS
754 WD6 LDX TEND
755 PSHS A
756 NEGA
757 LEAX 1,X
758 BSR STAONE
759 PULS A
760 BSR TSTNA
761 BCC TLOOK1
762 WD61 LDA CH
763 BSR TSTNA
764 BCS *+4
765 BNE TLOOK1
766 BSR STAONE
767 BRA WD61
768 STAONE STA ,X+
769 STX WEND
770 BRA GETCH
771 TLOOK1 LDA RSW
772 BEQ TLOOK
773 COM RSW
774 RTS
775 **
776 * WORD TABLE SEARCH
777 **
778 TLOOK LDA TCOUNT
779 STA SY
780 LDX TEND
781 S01 LDU WEND
782 S02 LDA ,-U
783 CMPA ,-X
784 BEQ S06
785 S03 TST ,X
786 BEQ S05
787 BMI S04
788 LEAX -1,X
789 BRA S03
790 S04 LEAX -1,X
791 BRA S01
792 S05 DEC SY
793 BNE S01
794 LBRA ERROR
795 S06 TSTA
796 BPL S02
797 LDB ,-X
798 STB VAL
799 LDA SY
800 CMPA #1
801 BNE *+6
802 TFR B,A
803 BRA S07
804 CMPA #4
805 BCS RTSS
806 LDB #1
807 TST AMODE
808 BEQ *+6
809 CMPA #6
810 BCS *+3
811 NEGB
812 STB GL
813 ANDA #$FD
814 S07 STA SY
815 RTSS RTS
816 **
817 * ARITHMATIC EXPRESSION
818 **
819 WEXPR LBSR WORD
820 EXPR BSR LEXPR
821 BSR OLOAD
822 RTE RTS
823 ** WORD * LEXPR
824 WLEXPR LBSR WORD
825 **
826 * LOGICAL EXPRESSION
827 **
828 LEXPR BSR REXPR
829 LE1 LDY SY
830 CMPA #$82
831 BCS RTE
832 CMPA #$8A+1
833 BCC RTE
834 PSHS A
835 LBSR WORD
836 BSR REXPR
837 LDB LSW
838 BNE LE2
839 LBSR PUTHS
840 FDB $0397
841 FCB WT1
842 FCB $32
843 PULS A
844 ADDA #$10
845 LDB #WT1
846 LBSR PUTAB
847 BRA LE1
848 LE2 PULS A
849 BSR OCORD
850 BRA LE1
851 **
852 * RELATIONAL EXPRESS
853 **
854 REXPR BSR AEXPR
855 RE1 LDA SY
856 CMPA #$21
857 BCS RTE
858 CMPA #$30
859 BCC RTE
860 PSHS A
861 LBSR WORD
862 ASR AEXPR
863 LDA #$80
864 BSR AOPER
865 PULS A
866 LBSR PUTHS
867 FCB 6
868 FCB $3,$4F,$20,$02,$86,$FF
869 BRA RE1
870 ** ADDING OPERATFR
871 AOPER LDB LSW
872 BNE OCORD
873 PSHS A
874 CMPA #$80
875 BEQ *+5
876 BSR PUTPUL
877 FCB $8C
878 BSR PUTPLB
879 PULS A
880 SUBA #$70
881 PUTA1 LBRA PUTA
882 ** OUTPUT SAVED L-CC
883 OLOAD LDA LSW
884 BEQ RTE
885 LDA ACC
886 BEQ *+6
887 LDA #$36
888 BSR PUTA1
889 LDA #$86
890 OCORD PSHS A
891 CLRA
892 STA LSW
893 COMA
894 STA ACC
895 LDA AMODE
896 CMPA #$20
897 BNE *+5
898 LBSR PUTX
899 CLR LSW
900 PULS A
901 ADDA AMODE
902 LDB OPER
903 LBRA PUTAB
904 * PUT 'TAB:PULS A'
905 PUTPUL LBSR PUTHS
906 FCB 2
907 FDB $1632
908 RTE1 RTS
909 * PUT 'PULS B'
910 PUTPLB LDA #$33
911 BRA PUTA1
912 **
913 * ADDING EXPRESSION
914 **
915 AEXPR BSR MEXPR
916 AE1 LDA SY
917 CMPA #$80
918 BEQ AE2
919 CMPA #$8B
920 BNE RTE1
921 AE2 PSHS A
922 LBSR WORD
923 BSR MEXPR
924 PULS A
925 BSR AOPER
926 BRA AE1
927 **
928 * MUTIPLYING EXPRESSION
929 **
930 MEXPR BSR TERM
931 ME1 LDA SY
932 CMPA #$8E
933 BEQ ME2
934 CMPA #$8F
935 BNE RTE1
936 ME2 PSHS A
937 LBSR WORD
938 BSR TERM
939 LDB LSW
940 BEQ ME3
941 LDA #$C6
942 BSR OCORD
943 FCB $8C
944 ME3 BSR PUTPUL
945 PULS A
946 CMPA #$8E
947 BHS ME4
948 LBSR PUTHS
949 FCB 3
950 FCB $BD
951 FDB MULT
952 BRA ME1
953 ME4 LBSR PUTHS
954 FCB 3
955 FCB $BD
956 FDB DIV
957 BRA ME1
958 **
959 * TERM
960 **
961 TERM LDA SY
962 BNE TM1
963 * SAVE L-COMMAND
964 SLOAD PSHS A
965 LBSR OLOAD
966 LDA VAL
967 STA OPER
968 LDA GL
969 STA GLL
970 PULS A
971 STA AMODE
972 COM LSW
973 LBRA WORD
974 * CONSTfTRUE & FALSE
975 TM1
976 BEQ TM01
977 CMPA #$A1
978 BNE TM2
979 TM01 SUBA #$A1
980 STA VAL
981 CLRA
982 BRA SLOAD
983 * SYSTEM VAR MHIGH & MOD
984 TM2 CMPA #$16
985 BRA *+6
986 CMPA #$17
987 BNE TM3
988 STA VAL
989 LDA #$10
990 BRA SLOAD
991 * SIMPLE VARIABLE
992 TM3 CMPA #4
993 BNE TM4
994 LDA #$20
995 BRA SLOAD
996 * ( EXPTRSSION )
997 TM4 CMPA #$35
998 BCS TM5
999 CMPA #$38
1000 BCC TM5
1001 PSHS A
1002 LBSR WLEXPR
1003 PULS A
1004 ADDA #4
1005 LBRA CHECK
1006 ** FUNCTION CALL
1007 TM5 CMPA #3
1008 BMI *+6
1009 CMPA #$E0
1010 BCS TM6
1011 BSR OLP
1012 PFCALL LDA VAL
1013 PSHS A
1014 LBSR WORD
1015 CMPA #$37
1016 BNE PFC1
1017 LDA LSIZE
1018 PSHS A
1019 INC LSIZE
1020 PFC2 INC LSIZE
1021 LBSR WEXPR
1022 CLRB
1023 STB ACC
1024 DECB
1025 STB GLL
1026 LDA #$A7
1027 LDB LSIZE
1028 LBSR PUTABX
1029 LDA SY
1030 CMPA #$3C
1031 BEQ PFC2
1032 PULS A
1033 STA LSIZE
1034 LDA #$3B
1035 LBSR CHECK
1036 PFC1 LDB #-1
1037 STB ACC
1038 STB INDEX
1039 LDA #$86
1040 LDB LSIZE
1041 LBSR PUTAB
1042 PULS A
1043 CMPA #$C0
1044 BCC *+5
1045 LBRA CALPF
1046 LDX #LIBR
1047 SUBA #$C0
1048 PFC3 BEQ PFC4
1049 LEAX 2,X
1050 DECA
1051 BRA PFC3
1052 PFC4 LDA #$BD
1053 LBSR PUTA
1054 LDD ,X
1055 LBRA PUTAB
1056 **
1057 OLP LBSR OLOAD
1058 LDB ACC
1059 BEQ RTS4
1060 LDA #$36
1061 LBSR PUTA
1062 CLR ACC
1063 RTS4 RTS
1064 ** FUNCTION RND
1065 TM6 CMPA #$70
1066 BNE TM61
1067 BSR SUBSC
1068 LBSR PUTHS
1069 FCB $03BD
1070 FDB RND
1071 RTS
1072 * FUNTION GET
1073 TM61 CMPA #$71
1074 BNE TM62
1075 BSR SUBSC
1076 LBSR PUTHS
1077 FDB $0597
1078 FCB INDN,$BD
1079 FDB GETCH
1080 RTS
1081 * FUNCTION READ
1082 TM62 CMPA #$72
1083 BNE TM7
1084 BSR SUBSC
1085 LBSR PUTHS
1086 FDB $0597
1087 FDB INDN
1088 FCB $8D
1089 FDB GETDA
1090 RTS
1091 * FUNCTION NOTASL ET AL
1092 TM7 CMPA #$40
1093 BCS TM8
1094 CMPA #$49+1
1095 BCC TM8
1096 PSHS A
1097 BSR SUBSC
1098 PULS A
1099 LBRA PUTA
1100 * ARRAY
1101 TM8 CMPA #$5
1102 BNE TM9
1103 LDB VAL
1104 PSHS B
1105 LDB GL
1106 PSHS B
1107 BSR SUBSC1
1108 PULS B
1109 STB GLL
1110 PULS B
1111 LDA LSW
1112 BEQ ARY1
1113 ADDB OPER
1114 STB OPER
1115 LDA #$20
1116 STA AMODE
1117 RTS
1118 ARY1 LDA #$8B
1119 LBSR PUTABX
1120 LBRA LDAAX
1121 **
1122 DSUBSC LDA #$3C
1123 BSR SUBS1
1124 LDA #$3B
1125 PSHS A
1126 BRA SUBS2
1127 SUBSC LDA #$3E
1128 SUBS1 PSHS A
1129 LBSR WORD
1130 LDA #$37
1131 LBSR CHECK
1132 SUBS2 LBSR EXPR
1133 PULS A
1134 LBRA CHECK
1135 SUBSC1 LBSR WORD
1136 LDA #$36
1137 LBSR CHECK
1138 LBSR LEXPR
1139 LDB LSW
1140 BEQ SBS5
1141 LDB AMODE
1142 BEQ SBS5
1143 LBSR OLOAD
1144 SBS5 LDA #$3A
1145 LBRA CHECK
1146 * MEM FUNCTION
1147 TM9 CMPA #6
1148 BNE TM10
1149 BSR DSUBSC
1150 LBSR PUTHS
1151 FDB $0997
1152 FCB WT2
1153 FDB $3297
1154 FCB WT1,$DE,WT1
1155 FDB $A600
1156 CLR INDEX
1157 RTS
1158 ** FOR EXPANTION
1159 TM10 LBRA ERROR
1160 **
1161 * ADDRESS DEPENDENT CODE
1162 * GENARATION
1163 **
1164 * SET PRC—FUNC TABLE
1165 **
1166 SETPFT PSHS A
1167 LDB #3
1168 MUL
1169 ADDD PFTBEG
1170 STD XR
1171 PULS A,PC
1172 **
1173 TWICE LBSR PUTSTR
1174 FCB $0D,$0A
1175 FCC "TWICE!",0
1176 lbra exit
1177 **
1178 * DEF PROC-FUNC
1179 **
1180 DEFPF BSR SETPFT
1181 LDX XR
1182 TST ,X
1183 BNE TWICE
1184 COM ,X
1185 LDX 1,X
1186 STX YR
1187 LDX XR
1188 LEAX 1,X
1189 BSR PCST
1190 LDX YR
1191 DP1 BEQ RT10
1192 LDX ,X
1193 STX ZR
1194 LDX YR
1195 BSR PCST
1196 LDX ZR
1197 STX YR
1198 BRA DP1
1199 **
1200 * CALL PORC-FUNC
1201 **
1202 CALPF BSR SETPFT
1203 INCA
1204 CMPA PFMAX
1205 BCS *+4
1206 STA PFMAX
1207 LDA #$BD
1208 BSR AOUT
1209 LDX XR
1210 LDD 1,X
1211 LDX PC
1212 BSR STAABX
1213 LDX XR
1214 TST ,X
1215 BNE PC2ADD
1216 LEAX 1,X
1217 BSR PCST
1218 BRA PC2ADD
1219 **
1220 * PUL-DEF N TIMES
1221 **
1222 PLDFN PSHS A
1223 BSR PULDEF
1224 DEC ,S
1225 BNE *-4
1226 PULS A,PC
1227 **
1228 * PULL AND DEFINE
1229 **
1230 PULDEF BSR PULSTK
1231 PCST LDD PC
1232 STAABX STD ,X
1233 RT10 RTS
1234 **
1235 JMPOUT LDA #$7E
1236 AOUT LDX PC
1237 STA ,X
1238 BRA INCPC1
1239 **
1240 PULSTK LDX SP
1241 LEAX 2,x
1242 STX SP
1243 LDD ,X
1244 LDX ,X
1245 RTS
1246 **
1247 * PUL STACK & Jump
1248 **
1249 PULJMP BSR JMPOUT
1250 BSR PULSTK
1251 PCST2 LDX PC
1252 BSR STAABX
1253 INCPC LEAX 1,X
1254 INCPC1 LEAX 1,X
1255 SETPC STX PC
1256 RTS
1257 **
1258 * PUSH STACK & JUMP
1259 **
1260 PSHJMP BSR JMPOUT
1261 BSR PSHDEF
1262 PC2ADD LDX PC
1263 BRA INCPC
1264 **
1265 * PUSH STRCK & DEFINE
1266 **
1267 PSHDEF LDX SP
1268 BSR PCST
1269 LEAX -2,X
1270 STX SP
1271 RTS
1272 **
1273 OUTPC3 BSR AOUT
1274 LDD PC
1275 ADDD #3
1276 BRA PCST2
1277 **
1278 * LDA R,X
1279 LDAAX LDA #$B7
1280 BSR OUTPC3
1281 LDA #$A6
1282 LA1 BSR AOUT
1283 BRA INCPC1
1284 **
1285 * STA B,X
1286 STABX LDA #$F7
1287 BSR OUTPC3
1288 LDA #$A7
1289 BRA LA1
1290 **
1291 * STACK TOP CHANGE
1292 **
1293 STCHG LDU SP
1294 LEAU 2,U
1295 PULU D,X
1296 EXG D,X
1297 PSHU D,X
1298 RTS
1299 **
1300 * END OF LOAD
1301 **
1302 ENDL LDX PFTBEG
1303 LDA PFMAX
1304 EL1 BEQ EL
1305 TST ,X
1306 BEQ UDERR
1307 EL2 LEAX 3,X
1308 DECA
1309 BRA EL1
1310 UDERR PSHS A
1311 STA ZR
1312 SUBA PFMAX
1313 NEGA
1314 PSHS A
1315 LBSR PUTSTR
1316 FDB $0D0A
1317 FCC "UNDEF",0
1318 PULS A
1319 LBSR PUTCA
1320 PULS A
1321 LDX ZR
1322 BRA EL2
1323 EL LDX PC
1324 STX VARPTR+1,PCR
1325 LBRA exit
1326
1327 **********************
1328 * ADVANCE WORD
1329 **
1330 WTABLE FCB 0 END MARK
1331 FCB $30,-'P'
1332 FCC "ROC"
1333 FCB $31,-'F'
1334 FCC "UNC"
1335 FCB $32,'V'
1336 FCC "AR"
1337 FCB $33,-'A'
1338 FCC "RRAY"
1339 FCB $34,-'B'
1340 FCC "EGIN"
1341 FCB $35,';'
1342 FCB $36,-'['
1343 FCB $37,-'('
1344 FCB $38,-'E'
1345 FCC "ND"
1346 FCB $39,-'='
1347 FCB $3A,-']'
1348 FCB $3B,-')'
1349 FCB $3C,-','
1350 FCB $3D,-':'
1351 FCB $50,-'S'
1352 FCC "TOP"
1353 FCB $51,-'R'
1354 FCC "ETURN"
1355 FCB $55,-'I'
1356 FCC "F"
1357 FCB $65,-'T'
1358 FCC "HEN"
1359 FCB $53,-'F'
1360 FCC "OR"
1361 FCB $61,-'T'
1362 FCC "O"
1363 FCB $52,-'R'
1364 FCC "EPEAT"
1365 FCB $60,-'U'
1366 FCC "NTIL"
1367 FCB $54,-'W'
1368 FCC "HILE"
1369 FCB $64,-'D'
1370 FCC "O"
1371 FCB $56,-'C'
1372 FCC "ASE"
1373 FCB $66,-'O'
1374 FCC "F"
1375 FCB $67,-'E'
1376 FCC "LSE"
1377 FCB $57,-'W'
1378 FCC "RITE"
1379 FCB $69,-'A'
1380 FCC "SCII"
1381 FCB $6A,-'S'
1382 FCC "PACE"
1383 FCB $68,-'C'
1384 FCC "RLF"
1385 FCB $6C,-'"'
1386 FCB $8B,-'+'
1387 FCB $80,-'-'
1388 FCB $8E,-'*'
1389 FCB $8F,-'/'
1390 FCB $82,-'S'
1391 FCC "BC"
1392 FCB $84,-'A'
1393 FCC "ND"
1394 FCB $88,-'E'
1395 FCC "OR"
1396 FCB $89,-'A'
1397 FCC "DC"
1398 FCB $8A,-'O'
1399 FCC "R"
1400 FCB $22,-'>'
1401 FCB $25,-'<'
1402 FCB $26,-'#'
1403 FCB $27,-'='
1404 FCB $2D,-'L','T'
1405 FCB $2E,-'G','T'
1406 FCB $40,-'N','E','G'
1407 FCB $43,-'N','O','T'
1408 FCB,$43,-'C','O','M'
1409 FCB $44,-'L','S','R'
1410 FCB $46,-'R','O','R'
1411 FCB $47,-'A','S','R'
1412 FCB $48,-'A','S','L'
1413 FCB $49,-'R','O','L'
1414 FCB $06,-'M','E','M'
1415 FCB $A0,-'T'
1416 FCC "RUE"
1417 FCB $A1,-'F'
1418 FCC "ALSE"
1419 FCB $16,-'M'
1420 FCC "HIGH"
1421 FCB $17,-'M'
1422 FCC "OD"
1423 FCB $70,-'R','N','D'
1424 FCB $71,-'G','E','T'
1425 FCB $72,-'R'
1426 FCC "EAD"
1427 WTBLEND
1428 ******
1429 **
1430 * PUSH LB & SET NEW LP
1431 **
1432 PSHLB CLRB
1433 ADDD LB
1434 STD WT1
1435 LDX WT1
1436 LDD LB
1437 STD ,X++
1438 STX LB
1439 RTS
1440 **
1441 * PULL LB
1442 **
1443 PULLB LDX LB
1444 LDX ,--X
1445 STX LB
1446 TSTA
1447 RTS
1448 **
1449 * RND FUNCTION
1450 **
1451 RND PSHS A
1452 LDA RNDL
1453 LDB #125
1454 MUL
1455 ADDD #1
1456 STA RNDL
1457 PSHS A
1458 LDA RNDH
1459 LDB #125
1460 MUL
1461 ADDA ,S+
1462 STA RNDH
1463 PULS B
1464 MUL
1465 INCA
1466 RTS
1467 **
1468 * DVISITION SET MOD
1469 **
1470 DIV STB WT1
1471 BEQ ERDIV
1472 TFR A,B
1473 CLRA
1474 STA WT2
1475 DV0 INC WT2
1476 ASL WT1
1477 BCC DV0
1478 DV1 ROR WT1
1479 CMPB WT1
1480 BCS DV2
1481 SUBB WT1
1482 ORCC #1
1483 BRA *+4
1484 DV2 ANDCC #$FE CLR C
1485 ROLA
1486 DEC WT2
1487 BNE DV1
1488 STB MOD
1489 TSTA
1490 RTS
1491 **
1492 ERDIV STB OUTDN
1493 LBSR CRLF
1494 LBSR PUTSTR
1495 FCC "ERR DIV 0",0
1496 MONIT lbsr exit
1497 **
1498 MULT MUL
1499 STA MHIGH
1500 TFR B,A
1501 RTS
1502 **
1503 * PUT A IN DECIMAL
1504 **
1505 PUTDA CLRB
1506 PUTDR STB DREG
1507 LEAX ,S
1508 LEAS -4,S
1509 CLR 1,X
1510 LDB #3
1511 P0 PSHS B
1512 LDB #10
1513 BSR DIV
1514 ADDB #$30
1515 STB ,X
1516 LEAX -1,X
1517 PULS B
1518 DECB
1519 BNE P0
1520 COM 3,X
1521 LDA #'0'
1522 LDB #4
1523 P1 LEAX 1,X
1524 DECB
1525 CMPA ,X
1526 BEQ P1
1527 COM 4,S
1528 LDA DREG
1529 PSHS B
1530 SUBA ,S+
1531 BCS PRX
1532 BSR SPACEA
1533 PRX LDB ,X
1534 BEQ P4
1535 BSR PUTCA
1536 LEAX 1,X
1537 BRA PRX
1538 P4 LEAS 4,S
1539 CL1 RTS
1540 **
1541 * GET IN A DECIMAL
1542 **
1543 GETDA CLRA
1544 PSHS A
1545 BSR GETCA
1546 CMPA #RUB
1547 BNE GD1
1548 PULS A
1549 LDB #10
1550 LBSR DIV
1551 BRA GETDA+1
1552 GD1 SUBA #'0'
1553 BCS GD2
1554 CMPA #10
1555 BCC GD2
1556 STA DBUF
1557 PULS A
1558 LDB #10
1559 MUL
1560 ADDB DBUF
1561 TFR B,A
1562 BRA GETDA+1
1563 GD2 PULS A,PC
1564 **
1565 * SPACE A TIMES
1566 **
1567 SPACEA BEQ CL1
1568 PSHS A
1569 LDA #' '
1570 BSR PUTCA
1571 PULS A
1572 DECA
1573 BRA SPACEA
1574 **
1575 * STR OUT
1576 **
1577 PUTSTR PSHS X
1578 LDX 2,S
1579 STR1 LDA ,X+
1580 BEQ STR2
1581 LBSR PUTCA
1582 BRA STR1
1583 STR2 STX 2,S
1584 PULS X,PC
1585 **
1586 * CRLF
1587 **
1588 CRLF LDA #$0D
1589 BSR PUTCA
1590 LDA #$0A
1591 BRA PUTCA
1592 **
1593 * CRLF A TIMES
1594 **
1595 CRLFA BEQ CL1
1596 PSHS A
1597 BSR CRLF
1598 PULS A
1599 DECA
1600 BRA CRLFA
1601
1602
1603 start clr <stdin
1604 stx <parmptr save parameter pointer
1605 stu <work save parameter pointer
1606 lda #READ. read access mode
1607 os9 I$Open open file
1608 lbcs L0049 branch if error
1609 sta <INDN else save path to file
1610 stx <parmptr and updated parm pointer
1611 * ldx <parmptr get param pointer
1612 * lda ,x get char
1613 * cmpa #C$CR end of command line?
1614 * bne start branch if not
1615
1616 copytbl
1617 pshs y,x,u
1618 leau LIBR,y
1619 leax iotbl,pcr
1620 leay iotblend,pcr
1621 ldy #(iotblend-iotbl)
1622 l1 ldb #$7e * JMP
1623 stb ,u+
1624 ldd ,x++
1625 addb 1,s
1626 adca ,s
1627 std ,u++
1628 cmpx 2,s
1629 ble l1
1630 puls x,y,u
1631
1632 Exit lbsr setecho
1633 * ldx <work
1634 * leax readbuff,x
1635 * ldb #1
1636 * lbsr getline
1637 * lbsr getpoll
1638 * lda <stdin
1639 * os9 I$Close
1640
1641 clrb
1642 os9 F$Exit
1643 * no return
1644
1645
1646 iotbl
1647 fdb getchar-iotbl ; 0
1648 fdb putchar-iotbl ; 3
1649 fdb getline-iotbl ; 6
1650 fdb putline-iotbl ; 9
1651 fdb putcr-iotbl ; $C
1652 fdb getpoll-iotbl ; $F
1653 fdb xopenin-iotbl ; $12
1654 fdb xopenout-iotbl ; $15
1655 fdb xabortin-iotbl ; $18
1656 fdb xclosein-iotbl ; $1B
1657 fdb xcloseout-iotbl ; $1E
1658 fdb delay-iotbl ; $21
1659 fdb noecho-iotbl ; $24
1660 fdb setecho-iotbl ; $27
1661 fdb exit-iotbl ; $2a
1662 iotblend
1663
1664 err ldb #1
1665 L0049
1666 bra Exit
1667
1668
1669 close
1670 lda <INDN else get path
1671 os9 I$Close and close it
1672 bcs L0049 branch if error
1673 rts
1674
1675 PUTCA tfr a,b
1676 putchar * Output one character in B register.
1677 PSHS X,Y
1678 BRA OUTCH1
1679
1680 MEMIN
1681 PSHS A,B,X,Y
1682 LDA INDN
1683 LEAX 1,S
1684 LDY #1
1685 OS9 I$Read
1686 EXG a,b
1687 BCC GETCA0
1688 lda #'/'
1689 GETCA0
1690 PULS A,B,X,Y,PC
1691
1692 GETCA bsr getchar
1693 tfr b,a
1694 rts
1695
1696 getchar * Input one character into B register.
1697 PSHS A,B,X,Y
1698 GETCH0
1699 LDA INDN
1700 LEAX 1,S
1701 LDY #1
1702 OS9 I$Read
1703 BCS GETCH0
1704 PULS A,B,X,Y,PC
1705 putcr * Output a newline.
1706 LDB #C$CR
1707 bsr putchar
1708 LDB #C$LF
1709 PSHS X,Y
1710 OUTCH1 PSHS A,B
1711 LEAX 1,S
1712 LDA OUTDN
1713 LDY #1
1714 OS9 I$Write
1715 PULS A,B,X,Y,PC
1716 getpoll
1717 PSHS X,Y,D
1718 LDA #0
1719 LDB #SS.Ready
1720 OS9 I$GetStt
1721 CMPB #$F6 Not Ready
1722 BNE RSENSE
1723 CLRB
1724 PULS X,Y,D,PC
1725 RSENSE
1726 ORCC #1 set carry to indicate ready
1727 RNSENSE
1728 PULS X,Y,D,PC
1729
1730 getline * Input line at address in X, length in B.
1731 PSHS A,B,X,Y
1732 clr ,s
1733 GETLN0
1734 ldy ,s
1735 lda INDN
1736 OS9 I$ReadLn
1737 BCS GETLN0
1738 LEAY -1,Y
1739 GETLN1 STY ,S
1740 PULS A,B,X,Y,PC
1741 putline * Output string at address in X, length in B.
1742 PSHS A,B,X,Y
1743 CLRA
1744 TFR D,Y
1745 lda OUTDN
1746 OS9 I$WritLn
1747 PULS A,B,X,Y,PC
1748 xopenin
1749 xopenout
1750 xabortin
1751 xclosein
1752 xcloseout
1753 RTS
1754
1755 setecho lda #1
1756 bra sss
1757 noecho clra
1758 sss leas -128,s
1759 leax ,s
1760 pshs a
1761 clra
1762 ldb #SS.Opt
1763 OS9 I$GetStt
1764 bcs err2
1765 LDA ,s
1766 STA PD.EKO-PD.OPT,X
1767 setopts
1768 ldb #SS.Opt
1769 clra
1770 OS9 I$SetStt
1771 err2
1772 puls a
1773 leas 128,s
1774 rts
1775
1776
1777 delay PSHS D,X * address **$21**
1778 * On input the D register contains the number of timer
1779 * ticks to wait. Each timer tick is 20ms
1780 TFR D,X
1781 OS9 F$Sleep
1782 PULS D,X,PC
1783
1784
1785 emod
1786 eom equ *
1787 end
1788