Browse code

(asma) Combine byte literals

Andrew Alderwick authored on 28/11/2021 01:29:39
Showing 1 changed files
... ...
@@ -222,6 +222,7 @@
222 222
 	;asma-read-buffer DUP2 ;asma-read-buffer/end ROT2 SUB2 ( func* line^ filename* buf* size^ )
223 223
 	ROT2 ( func* line^ buf* size^ filename* )
224 224
 	,file-read-chunks JSR
225
+	;asma-flush-lit JSR2
225 226
 
226 227
 	asma-IF-ERROR ,&error JCN
227 228
 
... ...
@@ -294,7 +295,7 @@
294 295
 
295 296
 @asma [
296 297
 	&pass $1 &state $1 &line $2 &lines $2 &break $1 &eof $1
297
-	&token $2 &orig-token $2
298
+	&token $2 &orig-token $2 &lit $1 &lit-present $1
298 299
 	&addr $2 &written-addr $2 &flush-fn $2
299 300
 	&src-filename $2 &dest-filename $2
300 301
 	&error $2 &log-level $1
... ...
@@ -462,7 +463,32 @@
462 463
 	,asma-write-byte JSR
463 464
 	,asma-write-byte JMP ( tail call )
464 465
 
466
+@asma-write-lit ( byte -- )
467
+	;asma/lit LDA2 ,&present JCN
468
+	POP #01 ;asma/lit STA2
469
+	;asma/addr LDA2k INC2 SWP2 STA2
470
+	JMP2r
471
+	&present
472
+	;asma/addr LDA2k #0001 SUB2 SWP2 STA2
473
+	LIT LIT2 ,asma-write-byte/raw JSR
474
+	,asma-write-byte/raw JSR
475
+	,asma-write-byte/raw JSR
476
+	#0000 ;asma/lit STA2
477
+	JMP2r
478
+
479
+@asma-flush-lit ( -- )
480
+	;asma/lit LDA2 ,&present JCN
481
+	POP JMP2r
482
+	&present
483
+	;asma/addr LDA2k #0001 SUB2 SWP2 STA2
484
+	LIT LIT ,asma-write-byte/raw JSR
485
+	,asma-write-byte/raw JSR
486
+	#0000 ;asma/lit STA2
487
+	JMP2r
488
+
465 489
 @asma-write-byte ( byte -- )
490
+	,asma-flush-lit JSR
491
+	&raw
466 492
 	;asma/addr LDA2 ;asma/written-addr LDA2
467 493
 	LTH2k ,&rewound JCN
468 494
 	&loop
... ...
@@ -574,6 +600,7 @@
574 600
 	JMP2r
575 601
 
576 602
 @asma-label-define
603
+	;asma-flush-lit JSR2
577 604
 	;asma-trees/labels ,asma-label-helper JSR
578 605
 	,&already-existed JCN
579 606
 
... ...
@@ -584,6 +611,7 @@
584 611
 	JMP2r
585 612
 
586 613
 @asma-sublabel-define
614
+	;asma-flush-lit JSR2
587 615
 	;asma-trees/scope LDA2 ,asma-label-helper JSR
588 616
 	POP POP2
589 617
 	JMP2r
... ...
@@ -659,9 +687,8 @@
659 687
 	;asma-write-short JMP2 ( tail call )
660 688
 
661 689
 @asma-literal-zero-addr
662
-	LIT LIT ;asma-write-byte JSR2
663 690
 	,asma-addr-helper JSR
664
-	;asma-write-byte JSR2
691
+	;asma-write-lit JSR2
665 692
 
666 693
 	,&not-zero-page JCN
667 694
 	JMP2r
... ...
@@ -675,8 +702,7 @@
675 702
 	JMP2r
676 703
 
677 704
 @asma-literal-rel-addr
678
-	LIT LIT ;asma-write-byte JSR2
679
-	,asma-addr-helper JSR ;asma/addr LDA2 SUB2 #0002 SUB2
705
+	,asma-addr-helper JSR ;asma/addr LDA2 SUB2 #0003 SUB2
680 706
 
681 707
 	DUP2 #0080 LTH2 STH
682 708
 	DUP2 #ff7f GTH2 STHr ORA ,&in-bounds JCN
... ...
@@ -686,7 +712,7 @@
686 712
 	JMP2r
687 713
 
688 714
 	&in-bounds
689
-	;asma-write-byte JSR2
715
+	;asma-write-lit JSR2
690 716
 	POP
691 717
 	JMP2r
692 718
 
... ...
@@ -746,7 +772,9 @@
746 772
 	JMP2r
747 773
 
748 774
 @asma-byte-helper ( dummy value -- )
749
-	LIT LIT ;asma-write-byte JSR2
775
+	;asma-write-lit JSR2
776
+	POP
777
+	JMP2r
750 778
 	&raw
751 779
 	;asma-write-byte JSR2
752 780
 	POP