        TTL     > FS20 : Utility grade star commands

; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Exit the emulator

quit_star
        =       ar_exit

; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Start up as language

os_star LDAIM   B_Language
        LDX     ROMid
        JMP     osbyte

; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Reset machine as if BREAK has been pressed

reset_star ROUT

        JSR     skipspaces
        BEQ     #FT90

        JSR     readdecimal
        CMPIM   1
        BNE     #FT90

        LDAIM   &7F             ; Force power-on reset
        STA     SVIA_IER

90      SEI
        JMI     &FFFC           ; CALL !-4, as they say in the trade

; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

qBadNumber
        LDXIM   :LSB: mBadNumber
        LDYIM   :MSB: mBadNumber
        JMP     CauseBRK

mBadNumber
        =       0
        =       "Bad number", 0


go_on   SEC                     ; Pass command on
        RTS


go_star JSR     skipspaces      ; No parm ? 
        BEQ     os_star         ; Can't startup previous, so do *OS

        JSR     readhex
        CPXIM   0               ; No digits read ?
        BEQ     go_on
        CMPIM   CR
        BNE     qBadNumber      ; Only one parm allowed

        LDXY    number

; .............................................................................

StartCodeXY

        STXY    himemptr

        LDYIM   7
        LDAIY   himemptr
        CLD
        CLC
        ADC     himemptr
        STA     brkptr          ; What an abuse !
        LDAIM   0
        ADC     himemptr+1
        STA     brkptr+1

        LDYIM   0               ; Suss 0,"(C)"
        LDAIY   brkptr
        BNE     #FT90
        INY
        LDAIY   brkptr
        CMPIM   "("
        BNE     #FT90
        INY
        LDAIY   brkptr
        CMPIM   "C"
        BNE     #FT90
        INY
        LDAIY   brkptr
        CMPIM   ")"
        BNE     #FT90

; Valid code image, so suss processor type

        LDYIM   6
        LDAIY   himemptr
        ANDIM   &4D             ; %0100 1101
        CMPIM   &40             ; Language ?
        BCC     qNotASausage
        ANDIM   &0D             ; Proc type mask = %0000 1101
        BNE     qYouWhalley     ; Accept only pure 6502 code

        LDYIM   9               ; Point to title field
50      LDAIY   himemptr
        BEQ     #FT60
        JSR     oswrch
        INY
        BNE     #BT50           ; Safer than BRA

60      JSR     osnewl
        JSR     osnewl

90      LDAIM   1               ; A=1
        JMI     himemptr        ; Enter language

; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

qYouWhalley
        GENAD   mYouWhalley
        JMP     CauseBRK
mYouWhalley
        =       0
        =       "I cannot run this code", 0

; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

qNotASausage
        GENAD   mNotASausage
        JMP     CauseBRK
mNotASausage
        =       0
        =       "This is not a language", 0

; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; CLOSE#0

close_star
        LDAIM   0
        TAY
        JSR     osfind

        CLC                     ; Finished processing
        RTS

; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Start up given FS as current

disc_star
        LDYIM   fs_dfs
        BRA     fsfsfs

net_star
        LDYIM   fs_nfs
        BRA     fsfsfs

adfs_star
        LDYIM   fs_adfs
        BRA     fsfsfs

arfs_star
        LDYIM   fs_arfs         ; Our fs number

fsfsfs  LDAIM   B_Service       ; Startup FS service
        LDXIM   SV_StartUpFS
        JSR     osbyte

        CLC                     ; Finished processing
        RTS

 [ $False ; Now need to use with DNFS300_e
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; In    cliptr, Y -> filename to type

bit7 * &80
bit6 * &40

list_star ROUT

        CLR     number
        CLR     number+1
        LDAIM   bit7 + bit6     ; *list + pending line number at start
        STA     flag
        BRA     ltcommon

; .............................................................................

type_star

        CLR     flag            ; *type

; .............................................................................

ltcommon

        JSR     AddCliPtrY

        LDAIM   &40
        LDXY    cliptr
        JSR     osfind
        TAY
        BNE     #FT10

        JMP     qNotFound

10      JSR     osbget
        BCS     #FT90           ; [eof]
        BIT     flag
        BVC     #FT20           ; [no pending line number]

        PHA
        LDAIM   bit7
        STA     flag
        SED
        CLC
        LDA     number
        ADCIM   1
        STA     number
        LDA     number+1
        ADCIM   0
        STA     number+1
        CLD
        JSR     PrintByte
        LDA     number
        JSR     DebugA
        PLA

20      CMPIM   CR
        BNE     #FT50

        LDA     flag
        BPL     #FT49
        ORAIM   bit6            ; Set pending line number if *List
        STA     flag

49      LDAIM   CR

50      JSR     osasci

        LDA     escflag
        BPL     #BT10

        PHY
        LDAIM   &7E
        JSR     osbyte
        PLY

        LDAIM   0
        JSR     osfind

        JMP     qFSEscape


90      LDAIM   0
        JSR     osfind

        CLC                     ; Finished processing
        RTS

; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ]

        LNK     FS30
