diff 3rdparty/utils/sleuth3/cssiafcb3.asm @ 3149:afd0f7d9b514

Add the Sleuth multipass disassembler from Bud Pass Added new directory "3rdparty/utiles/sleuth3" and source files to build "sleuth3" and its utilities. Also added "sleuth3" to the Directories section of "3rdparty/utils/makefile" to faciliate the inclusion of the sleuth3 build.
author Bill Pierce <merlinious999@gmail.com>
date Sat, 04 Feb 2017 18:55:39 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/3rdparty/utils/sleuth3/cssiafcb3.asm	Sat Feb 04 18:55:39 2017 +0100
@@ -0,0 +1,541 @@
+
+***************************************
+**
+iafcc stb maxln,u fcc,fcb,rmb
+ tst phase,u chk phase and
+ beq iafcx exit if 1
+ leax inst1,u
+ stx gaddr,u
+iafc0 ldb instx,u
+ cmpb #$43 fcc
+ bne iafc5
+ anda #$7f mask off parity bit
+ cmpa #$1f control chars
+ bls iafc2
+ cmpa #maxprn max printable
+ bhi iafc2
+ cmpa #$22 "
+ bne iafc8
+iafc2 ldb instx,u
+ leax inst1,u
+ cmpx gaddr,u
+ bne iafc3
+ cmpb #$43 c
+ bne iafcx
+ ldb #$48 fcc->fcb
+ stb instx,u
+iafcx lbra next2 get next and return
+iafc3 ldx gaddr,u
+ cmpb #$43
+ bne iafc4
+ ldd #$2204 fcc/fcs "..."
+ std ,x
+iafc4 rts return for fcc
+iafc5 cmpb #$52 r
+ bne iafc8
+ ldd saddr,u
+ pshs d
+iafc6 lbsr getin get next byte
+ ldb insty,u
+ cmpb #$52 r
+ bne iafc7
+ ldy daddr,u chk labeled
+ lbsr adalx
+ bcs iafc7
+ lbsr ckend chk end of program
+ bls iafc6
+iafc7 ldd saddr,u end of rmb range
+ subd ,s++
+ std rmblth,u set rmb length
+ rts
+iafc8 leax inst1,u
+ cmpx gaddr,u
+ beq iafc9
+ ldy daddr,u
+ lbsr adalx chk label
+ bcs iafc2
+iafc9 ldx gaddr,u
+ sta ,x+
+ stx gaddr,u
+ cmpa instr,u check for fcs
+ beq iafca
+ lda fccxx+3,u c->s
+ ora #$10
+ sta fccxx+3,u fcs
+ lbsr getin
+ lbra iafc2
+iafca lbsr getin
+ ldb fllth,u
+ cmpb maxln,u
+ lbeq iafc2
+ ldb instx,u
+ cmpb insty,u
+ lbne iafc2
+ lbra iafc0
+**
+adald ldd raddr,u add a data label
+adale pshs a flag as data
+ lda zulabe,u prefix u/z
+ sta lauorz,u
+ puls a
+ bra adalv
+adalw ldd raddr,u add a data label
+adalu pshs a flag as data
+ lda ulabel,u prefix u
+ sta lauorz,u
+ puls a
+ bra adalv
+adalb ldd raddr,u add a prog label
+adal0 pshs a flag as label
+ lda zlabel,u prefix z
+ sta lauorz,u
+ puls a
+adalv pshs d,y
+ tfr d,y
+ bsr adall chk labels
+ bcs adatx branch if there
+ lda lauorz,u
+ ldx addre,u
+ cmpx alimit,u chk for overflow
+ lbhs tablab
+ sty ,x++ add to list
+ sta ,x+
+ stx addre,u
+ leax -$03,x bubble sort
+adal1 cmpx typee,u back up
+ bls adatx
+ leax -$03,x
+adal2 ldy ,x compare
+ lda $02,x
+ cmpy $03,x
+ bls adatx
+ pshs a,y
+ ldy $03,x swap
+ lda $05,x
+ sty ,x
+ sta $02,x
+ puls a,y
+ sty $03,x
+ sta $05,x
+ bra adal1
+adatx puls d,y,pc
+**
+adalx pshs a chk prog labels
+ lda zlabel,u prefix z
+ sta lauorz,u
+ puls a
+ bra adall
+adaly pshs a chk data labels
+ lda ulabel,u prefix u
+ sta lauorz,u
+ puls a
+adall ldx typee,u chk labels
+ pshs d
+ lda lauorz,u
+adalp cmpx addre,u
+ bhs adanf
+ leax $03,x
+ cmpy -$03,x
+ bne adaix
+ cmpa -$01,x
+ bne adalp
+adafo orcc #$01 successful, c=1
+ leax -$03,x back up
+ puls d,pc
+adaix bhi adalp
+adanf andcc #$fe unsuccessful, c=0
+ puls d,pc
+**
+ckequ lda instx,u chk org's
+ cmpa #$4b
+ beq cktno
+ tst dorgs,u
+ beq cktno
+ clr dorgs,u
+ckeqw tst os9flx,u chk for OS/9
+ bne cktno
+ leax caddr,u xxxx
+ lbsr xot4h
+ leax orges,pcr org $
+ lbsr xpdat
+ leax caddr,u xxxx
+ lbsr xot4h
+ lbsr xcrlf
+cktno ldx daddr,u chk equ's
+ clr baddr,u
+ dec fllth,u
+ lda fllth,u
+ ldb instx,u
+ cmpb #$43 c
+ beq ckeqa
+ cmpb #$48 h
+ beq ckeqa
+ cmpb #$52 r
+ bne ckeso
+ckeqa ldx caddr,u
+ clra
+ckesx stx gaddr,u
+ sta worka,u
+ ldy gaddr,u
+ lbsr adalx
+ bcc ckenf
+ tst worka,u chk offset
+ beq ckexo
+ leax gaddr,u xxxx
+ lbsr xot4h
+ lda #$02
+ lbsr xoute
+ lda zlabel,u z
+ lbsr xoute
+ leax gaddr,u xxxx
+ lbsr xot4h
+ leax bequb,pcr equ
+ lbsr xpdat
+ lbsr xpdat *+
+ lda worka,u x
+ adda #$30
+ lbsr xoute
+ lbsr xcrlf
+ckenf lda worka,u
+ beq ckext
+ ldx gaddr,u
+ deca
+ckeso leax -$01,x
+ bra ckesx
+ckexo ldb instx,u chk ign
+ cmpb #$4b
+ bne ckexe
+ leax gaddr,u
+ lda zlabel,u prefix z
+ lbra gnpea xxxx zxxxx equ $xxxx
+ckexe tst equfl,u check equ flag
+ beq ckexs
+ leax caddr,u xxxx
+ lbsr xot4h
+ lda #$02
+ lbsr xoute
+ lda zlabel,u z
+ lbsr xoute
+ leax caddr,u xxxx
+ lbsr xot4h
+ leax bequb,pcr equ
+ lbsr xpdat
+ lda #$2a *
+ lbsr xoute
+ lbsr xcrlf
+ bra ckext
+ckexs inc baddr,u
+ckext lda instx,u chk ign
+ cmpa #$4b k
+ beq ckexz
+ leax caddr,u xxxx
+ lbsr xot4h
+ lda instx,u chk rmb
+ cmpa #$52 r
+ beq ckexy
+ lda #$01 hex object
+ lbsr xoute
+ lda fllth,u
+ inca
+ beq ckexy
+ cmpa #$06
+ blo ckexu
+ lda #$05
+ckexu sta worka,u
+ leax inst1,u
+ckexv lbsr xot2h
+ dec worka,u
+ bne ckexv
+ckexy lda #$02 label tab
+ lbsr xoute
+ tst baddr,u
+ beq ckexz
+ lda zlabel,u z
+ lbsr xoute
+ leax caddr,u xxxx
+ lbsr xot4h
+ckexz rts
+**
+headr lbsr xcrlf start program file
+ ldx crtfl,u
+ stx confl,u
+ lda disof,u
+ sta dskfl,u
+ lda names+5,u chk nam
+ cmpa #$04
+ beq headc
+ leax names,u nam
+ lbsr xpdat
+ lbsr xcrlf
+headc lda optes+5,u chk opt
+ cmpa #$04
+ beq headg
+ leax optes,u opt
+ lbsr xpdat
+ lbsr xcrlf
+headg clr column,u
+ tst os9flx,u chk for OS/9
+ lbeq headt
+ lda comand,u chk view
+ cmpa #$56 v
+ lbeq headt
+ leax sysdef,pcr system definitions
+ lbsr xpdat
+ lda obatre,u version
+ lbsr xothr
+ lbsr xcrlf
+ ldd obname,u module name offset
+ lbsr adal0
+ leax lmodul,pcr mod endmod,namemd,
+ lbsr xpdat
+ lda obtyla,u type and language
+ anda #$f0
+ lsra
+ leax ltypes,pcr type
+ leax a,x
+ lbsr xpdat
+ leax llangs,pcr +objct,
+ lbsr xpdat
+ lda obatre,u attributes and version
+ bpl headq
+ leax lreent,pcr reent+
+ lbsr xpdat
+headq leax lversi,pcr version,xferad,endmem
+ lbsr xpdat
+ lbsr xcrlf
+ ldd #$0000 xxxx
+ pshs d
+ tfr s,x
+ lbsr xot4h
+ leax orges,pcr org $0000 for storage
+ lbsr xpdat
+ tfr s,x
+ lbsr xot4h xxxx
+ puls d
+ lbsr xcrlf
+ lbsr gendat generate data rmb's and equ's
+headh leax lemmod,pcr module header
+ lbsr xpdat endmem
+ lbsr xpdat equ .
+ lbsr xcrlf
+ lda names+5,u chk nam
+ cmpa #$04
+ beq headn
+ leax names,u nam
+ lbsr xpdat
+ lbsr xcrlf
+headn ldx #$ffff gen absolute equ's
+ stx caddr,u
+ ldx #$0000
+ stx raddr,u
+ lda xlabel,u prefiz x
+ sta zulabe,u
+ lbsr gnequ
+ ldx #$000c gen equ's in header
+ stx caddr,u
+ ldx #$0000
+ stx raddr,u
+ lda zlabel,u prefiz z
+ sta zulabe,u
+ lbsr gnequ
+ lda ulabel,u prefiz u
+ sta zulabe,u
+headt ldd curmod,u reset curr locn
+ std inlrec,u zap curr locn
+ lda curmod+2,u
+ sta inlrec+2,u
+ ldx faddr,u gen out-of-range equ's
+ beq headx
+ leax -$01,x
+ stx caddr,u
+ ldx #$0000
+ stx raddr,u
+ lda zlabel,u prefiz z
+ sta zulabe,u
+ lbsr gnequ
+headx inc dorgs,u
+ rts
+**
+gendat equ * generate data rmb's and equ's
+ lda ulabel,u prefix u
+ sta zulabe,u
+ ldx obstor,u
+ lbeq gendeq
+ leax -$01,x
+ stx caddr,u
+ ldx #$0000
+ stx raddr,u
+ stx zaddr,u
+ ldx typee,u gen data rmb's
+genrm1 stx gaddr,u
+ cmpx addre,u
+ beq genrm5
+ bhi gendeq
+ ldy $00,x
+ cmpy raddr,u
+ beq genrm6
+genrm2 blo genrm4
+ cmpy caddr,u
+genrm3 bls genrm6
+genrm4 leax $03,x
+ bra genrm1
+genrm5 ldy obstor,u force last rmb
+ bra genrm7
+genrm6 lda zulabe,u prefix u/z
+ cmpa $02,x
+ bne genrm8
+genrm7 stx gaddr,u
+ tfr y,d
+ subd zaddr,u compute rmb offset
+ bls genrm8 chk for non-positive
+ pshs d
+ leax zaddr,u xxxx
+ lbsr xot4h
+ lda #$02
+ lbsr xoute
+ lda zulabe,u prefix u
+ lbsr xoute
+ leax zaddr,u xxxx
+ lbsr xot4h
+ leax rmbes,pcr rmb $
+ lbsr xpdat
+ tfr s,x
+ lbsr xot4h
+ lbsr xcrlf
+ puls d
+ sty zaddr,u remember current address
+genrm8 ldx gaddr,u get next label
+ bra genrm4
+gendeq ldx obstor,u gen out-of-range data equ's
+ stx raddr,u
+ ldx #$ffff
+ stx caddr,u
+ lbsr gnequ
+ rts
+**
+ender ldx daddr,u end text file
+ beq ende0 gen out-of-range equ's
+ stx raddr,u
+ ldx #$ffff
+ stx caddr,u
+ lda zlabel,u prefix z
+ sta zulabe,u
+ lbsr gnequ
+ende0 lda comand,u chk view
+ cmpa #$56 v
+ beq ende3
+ tst os9flx,u chk for OS/9
+ beq ende1
+ leax endos9,pcr emod
+ lbsr xpdat endmod equ *
+ leax lnamem,pcr namemd equ
+ lbsr xpdat
+ lda zlabel,u z
+ lbsr xoute z/$
+ leax obname,u
+ lbsr xot4h xxxx
+ lbsr xcrlf
+ leax lxfera,pcr xferad equ
+ lbsr xpdat
+ lda zlabel,u z
+ lbsr xoute z/$
+ leax obxfer,u xfer offset
+ lbsr xot4h xxxx
+ lbsr xcrlf
+ende1 leax endes,pcr end
+ lbsr xpdat
+ tst os9flx,u chk for OS/9
+ bne ende2
+ ldx xaddr,u chk xfer addr
+ leax $01,x
+ beq ende2
+ lda zlabel,u z
+ lbsr xoute
+ leax xaddr,u xxxx
+ lbsr xot4h
+ende2 lbsr xcrlf
+**
+ende3 lda #$01 reset flags and close files
+ sta confl,u
+ clr phase,u
+ tst prtfl,u chk for printer output
+ beq endep
+ clr prtfl,u close printer file
+ clr prfile,u
+ leax prblok,u force last block
+ lbsr fob
+ bcc endpe
+ lda #$02 error
+ leax errprz,pcr
+ ldy #errprl
+ os9 I$WritLn
+endpe lda prblok+iobfd+1,u close it
+ clr prblok+iobfd,u
+ clr prblok+iobfd+1,u
+ os9 I$Close
+ bcc endep
+ lda #$02
+ leax errprz,pcr
+ ldy #errprl
+ os9 I$WritLn
+endep tst dskfl,u chk for disk output
+ beq endex
+ clr disof,u close output file
+ clr dskfl,u
+ clr otfile,u
+ leax otblok,u force last block
+ lbsr fob
+ bcc endxe
+ lda #$02 error
+ leax errorz,pcr
+ ldy #errorl
+ os9 I$WritLn
+endxe lda otblok+iobfd+1,u close it
+ clr otblok+iobfd,u
+ clr otblok+iobfd+1,u
+ os9 I$Close
+ bcc endex
+ lda #$02
+ leax errorz,pcr
+ ldy #errorl
+ os9 I$WritLn
+endex lbra xcrlf
+**
+gnequ ldx typee,u out-of-range equ's
+gneq1 stx gaddr,u
+ cmpx addre,u
+ beq gneqx
+ ldd $00,x
+ cmpd raddr,u
+ beq gneq6
+gneq2 blo gneq4
+ cmpd caddr,u
+gneq3 bls gneq6
+gneq4 leax $03,x
+ bra gneq1
+gneq6 stx gaddr,u
+ lda zulabe,u prefix u/z
+ cmpa $02,x
+ bne gneq7
+ bsr gnpea
+gneq7 ldx gaddr,u
+ bra gneq4
+gneqx rts
+**
+gnpea pshs a gen xxxx zxxxx equ $xxxx
+ stx baddr,u xxxx
+ lbsr xot4h
+ lda #$02
+ lbsr xoute
+ puls a label prefix
+ lbsr xoute
+ ldx baddr,u xxxx
+ lbsr xot4h
+ leax bequb,pcr equ
+ lbsr xpdat
+ lda #$24 $
+ lbsr xoute
+ ldx baddr,u xxxx
+ lbsr xot4h
+ lbra xcrlf
+**