uxn

Varvara Ordinator, written in ANSI C(SDL2)
git clone https://git.eamoncaddigan.net/uxn.git
Log | Files | Refs | README | LICENSE

commit 63081b64cdf3d4df8aa7cdcebbf4bc6611fd3422
parent 1f80b2907b72b170ac0ee663f4ef0585c86567bf
Author: Andrew Alderwick <andrew@alderwick.co.uk>
Date:   Sat, 15 May 2021 21:02:33 +0100

Implemented writing to output file

Diffstat:
Mprojects/software/asma.usm | 75+++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------
1 file changed, 55 insertions(+), 20 deletions(-)

diff --git a/projects/software/asma.usm b/projects/software/asma.usm @@ -10,7 +10,6 @@ BRK &source-file - "test.usm 00 "projects/demos/piano.usm 00 &dest-file "bin/asma-boot.rom 00 @@ -40,10 +39,12 @@ ;asma/dest-filename STA2 ;asma/src-filename STA2 ;asma-init-first-pass JSR2 + ;asma-flush-ignore ;asma/flush-fn STA2 ;asma/src-filename LDA2 ;asma-assemble-file-pass JSR2 asma-IF-ERROR ,&error JCN ;asma-init-next-pass JSR2 + ;asma-flush-to-file ;asma/flush-fn STA2 ;asma/src-filename LDA2 ;asma-assemble-file-pass JSR2 asma-IF-ERROR ,&error JCN @@ -142,19 +143,24 @@ @asma-init-first-pass ( -- ) #ff ;asma/pass STA - #0000 ;asma/error STA2 + #0000 DUP2k + ;asma/error STA2 + ;asma-trees/labels STA2 + ;asma-trees/macros STA2 ;asma-heap ;asma/heap STA2 - #0000 ;asma-trees/labels STA2 ;asma-opcodes/_entry ;asma-trees/opcodes STA2 - #0000 ;asma-trees/macros STA2 ( fall through ) @asma-init-next-pass ( -- ) ;asma/pass LDA #01 ADD ;asma/pass STA - #00 ;asma/state STA - #0000 ;asma/addr STA2 - #0100 ;asma/written-addr STA2 - #0001 ;asma/line STA2 + ;asma-write-buffer ;asma-output/ptr STA2 + #0000 DUP2k + ;asma-output/offset STA2 + ;asma/addr STA2 + ;asma/state STA + #01 ( 0001 ) + SWPk ( 0001 0100 ) ;asma/written-addr STA2 + ;asma/line STA2 JMP2r ( @@ -167,8 +173,8 @@ &loop OVR2 .File/name DEO2 DUP2 .File/offset DEO2 - #0023 STH2k .File/length DEO2 - #f000 DUP2k .File/load DEO2 + ;asma-read-buffer/end ;asma-read-buffer SUB2 STH2k .File/length DEO2 + ;asma-read-buffer DUP2k .File/load DEO2 .File/success DEI2 DUP2 STH2r SUB2 ORA ,&last-one JCN ,asma-assemble-chunk JSR asma-IF-ERROR ,&error JCN @@ -179,6 +185,10 @@ ADD2k #00 ROT ROT STA #0001 ADD2 ,asma-assemble-chunk JSR asma-IF-ERROR ,&error JCN + + ( flush output buffer ) + ;asma-output/ptr LDA2 ;asma-write-buffer SUB2 ;asma/flush-fn LDA2 JSR2 + POP2 &error POP2 POP2 POP2 @@ -386,6 +396,11 @@ POP2 #01 JMP2r +@asma-write-short ( short -- ) + SWP + ,asma-write-byte JSR + ,asma-write-byte JMP ( tail call ) + @asma-write-byte ( byte -- ) ;asma/addr LDA2 ;asma/written-addr LDA2 LTH2k ,&rewound JCN @@ -395,26 +410,46 @@ #0001 ADD2 ,&loop JMP + &rewound + ;asma-msg-rewound ;asma/error STA2 + POP2 POP2 POP JMP2r + &ready POP2 #0001 ADD2 DUP2 ;asma/addr STA2 ;asma/written-addr STA2 &write - #3e .Console/char ;asma/pass LDA asma-DEO + ,asma-output/ptr LDR2 + DUP2 ;asma-write-buffer/end EQU2 ,&flush JCN + &after-flush + STH2k STA + STH2r #0001 ADD2 ,asma-output/ptr STR2 + + ( #3e .Console/char ;asma/pass LDA asma-DEO #20 .Console/char ;asma/pass LDA asma-DEO - .Console/byte ;asma/pass LDA asma-DEO ( FIXME actually write! ) - #0a .Console/char ;asma/pass LDA asma-DEO + #00 .Console/byte ;asma/pass LDA asma-DEO + #0a .Console/char ;asma/pass LDA asma-DEO ) JMP2r - &rewound - ;asma-msg-rewound ;asma/error STA2 - POP2 POP2 POP JMP2r + &flush ( ptr* -- start-of-buffer* ) + ;asma-write-buffer SUB2k ( ptr* start* len* ) + ;asma/flush-fn LDA2 JSR2 + SWP2 POP2 ( start* ) + ,&after-flush JMP -@asma-write-short ( short -- ) - SWP - ,asma-write-byte JSR - ,asma-write-byte JMP ( tail call ) +@asma-output [ &ptr $2 &offset $2 &filename $2 ] + +@asma-flush-ignore ( len* -- ) + POP2 + JMP2r + +@asma-flush-to-file ( len* -- ) + DUP2 .File/length DEO2 + ,asma-output/offset LDR2 DUP2 .File/offset DEO2 ADD2 ,asma-output/offset STR2 + ;asma/dest-filename LDA2 .File/name DEO2 + ;asma-write-buffer .File/save DEO2 + JMP2r @asma-append-heap-byte ( dummy byte -- dummy ) ;asma/heap LDA2