( uxncli uxndis.rom input.rom ) |10 @Console/vector $2 &read $1 &pad $4 &type $1 &write $1 &error $1 |a0 @File/vector $2 &success $1 &success-lb $1 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2 |000 @src/buf $3f &cap $1 @mode/dict $1 |100 @on-reset ( -> ) ;meta #06 DEO2 ;src/on-console .Console/vector DEO2 .Console/type DEI ?{ ;dict/usage str/ #800f DEO } BRK @src/on-console ( -> ) [ LIT2 04 -Console/type ] DEI NEQ ?{ ;&buf rom/ [ LIT ". ] / [ LIT "s ] / [ LIT "y ] / [ LIT "m ] / ;&buf sym/ rom/ #800f DEO BRK } .Console/read DEI / BRK @src/ ( char -- ) [ LIT &ptr -&buf ] INCk ,&ptr STR STZ JMP2r ( @|Rom ) @rom/ ( -- ) ,&ptr LDR2 ;&buf &>l INC2 GTH2k ?&>l POP2 POP2 JMP2r @rom/ ( src* -- ) .File/name DEO2 #0001 .File/length DEO2 &>s ;&b .File/read DEO2 .File/success-lb DEI ?{ JMP2r } [ LIT &b $1 ] [ LIT2 &ptr =&buf ] INC2k ,&ptr STR2 STA !&>s ( @|Sym ) @sym/ ( src* -- ) .File/name DEO2 #4000 .File/length DEO2 ;&buf .File/read DEO2 .File/success DEI2 #0000 EQU2 ,&null STR JMP2r @sym/find ( addr* -- sym* ) ,&t STR2 [ LIT &null 01 ] ?{ ;sym/buf &>w LDA2k [ LIT2 &t $2 ] NEQ2 ?{ INC2 INC2 JMP2r } INC2 INC2 str/cap INC2 INC2k INC2 LDA ?&>w POP2 } #ffff JMP2r @sym/is-txt ( ext* -- t ) DUP2 str/cap #0004 SUB2 ( a ) LDA2k [ LIT2 "-t ] EQU2 STH ( b ) INC2 INC2 LDA2 [ LIT2 "xt ] EQU2 STHr AND JMP2r @sym/is-dict ( sym* -- sym* ) LDA2k [ LIT2 "di ] NEQ2 ?{ INC2k INC2 LDA2 [ LIT2 "ct ] EQU2 JMP2r } !/is-txt ( @|print ) % { [ LIT2 "( 18 ] DEO #2018 DEO } % { #2018 DEO [ LIT2 ") 18 ] DEO } @ ( addr* -- addr* ) ( ) DUP2 ;rom/buf SUB2 ( ) DUP2 #0100 ADD2 sym/find DUP2 #ffff EQU2 ?{ sym/is-dict .mode/dict STZ #0a18 DEO [ LIT2 "@ 18 ] DEO DUP2 str/ #0a18 DEO } POP2 print-address print-content #0a18 DEO JMP2r @print-address ( addr* -- ) [ LIT2 "| 18 ] DEO #0100 ADD2 hex/ #03 ! @ ( addr* -- addr* ) LDAk hex/ #09 ! @ ( addr* -- addr* ) LDAk INC2k LDA #05 ! @ ( addr* -- addr* ) LDAk INC2k LDA INC2k INC2 LDA #02 ! @ ( byte -- ) hex/ #2018 DEO JMP2r @print-content ( addr* -- addr* ) .mode/dict LDZ ? LDAk ?{ ;dict/brk str/ JMP2r } LDAk #9f AND ?{ ! } LDAk DUP #80 NEQ SWP #c0 NEQ AND ?{ ! } LDAk DUP #a0 NEQ SWP #e0 NEQ AND ?{ ! } LDAk #1f AND #00 SWP #20 SFT2 ;dict/opcodes ADD2 str/ LDAk JMP2r @ ( byte -- ) DUP #20 AND #00 EQU ?{ [ LIT2 "2 18 ] DEO } DUP #80 LTH ?{ [ LIT2 "k 18 ] DEO } #40 AND #00 EQU ?{ [ LIT2 "r 18 ] DEO } JMP2r @ ( addr* value* -- ) ( | find sym ) SWP2 ;rom/buf SUB2 #0103 ADD2 OVR2 ADD2 sym/find ( ) INC2k ORA ?{ POP2 OVR #80 AND ?dec/ [ LIT2 "+ 18 ] DEO !dec/ } NIP2 !str/ @ ( addr* -- addr* ) LDAk #20 NEQ ?{ [ LIT2 "? 18 ] DEO } LDAk #40 NEQ ?{ [ LIT2 "! 18 ] DEO } DUP2 INC2k LDA2 INC2 INC2 JMP2r @ ( addr* -- addr* ) LDAk #40 AND ?{ ( | wst ) [ LIT2 "# 18 ] DEO INC2 LDAk hex/ JMP2r } ( | rst ) ;dict/opcodes str/ [ LIT2 "r 18 ] DEO #2018 DEO INC2 LDAk hex/ JMP2r @ ( addr* -- addr* ) ( | wst ) LDAk #40 AND ?{ ( | wst, label ) INC2 LDA2k sym/find DUP2 #ffff EQU2 ?{ [ LIT2 "; 18 ] DEO str/ !&end } POP2 ( | wst, hex ) [ LIT2 "# 18 ] DEO !&hex } ( | rst ) ;dict/opcodes str/ LDAk #80 EOR #2018 DEO ( | rst, label ) INC2 LDA2k sym/find DUP2 #ffff EQU2 ?{ str/ !&end } POP2 ( >> ) &hex ( addr* -- addr* ) LDA2k hex/ ( >> ) &end ( addr* -- addr* ) INC2 JMP2r @ ( addr* -- addr* ) LDAk JMP2r @ ( byte -- ) DUP #20 LTH ?{ #18 DEO JMP2r } POP [ LIT2 "_ 18 ] DEO JMP2r @ ( count -- ) #00 &>l #2018 DEO INC GTHk ?&>l POP2 JMP2r ( @|stdlib ) @dec/ ( short* -- ) OVR #80 LTH ?{ [ LIT2 "- 18 ] DEO #8000 SWP2 SUB2 #7fff AND2 } ( >> ) @dec/ ( short* -- ) [ LIT2r ff00 ] &>read #000a DIV2k STH2k MUL2 SUB2 STH2r INCr ORAk ?&>read POP2 &>write NIP #30 ADD #18 DEO OVRr ADDr STHkr ?&>write POP2r JMP2r @hex/ ( short* -- ) SWP / ( >> ) @hex/ ( byte -- ) DUP #04 SFT /c &c ( byte -- ) #0f AND DUP #09 GTH #27 MUL ADD [ LIT "0 ] ADD #18 DEO JMP2r @str/ ( str* -- ) &>l LDAk DUP ?{ POP POP2 JMP2r } #18 DEO INC2 !&>l @str/cap ( str* -- end* ) &>w LDAk ?{ JMP2r } INC2 !&>w ( @|assets ) @meta $1 &body-txt "Uxndis 0a ( desc ) "Uxntal 20 "Disassembler 0a ( auth ) "By 20 "Devine 20 "Lu 20 "Linvega 0a ( date ) "9 20 "Nov 20 "2025 $2 @dict/usage "usage: 20 "uxndis.rom 20 "input.rom 0a $1 &opcodes [ "LIT 00 "INC 00 "POP 00 "NIP 00 "SWP 00 "ROT 00 "DUP 00 "OVR 00 "EQU 00 "NEQ 00 "GTH 00 "LTH 00 "JMP 00 "JCN 00 "JSR 00 "STH 00 "LDZ 00 "STZ 00 "LDR 00 "STR 00 "LDA 00 "STA 00 "DEI 00 "DEO 00 "ADD 00 "SUB 00 "MUL 00 "DIV 00 "AND 00 "ORA 00 "EOR 00 "SFT 00 &brk "BRK 00 ] @rom/buf $8000 @sym/buf