19781 > 6502.HostFS22/srcTINTREM Source for Single Port Tube Client MOS for 6502TINTREM =
15677 ==========================================TINTREM This code
8313 be freely reused, with acknowledgementsTINT:TINTREM This implements a Tube client communicating wit
8289 hostTINTREM via a single port,
26723 as a serial port, a parallel port,TINTREM or even a single Tube register, all in less than 2K.TINT:TINTREM The link is a
29816 channel that escapes out to send commandsTINTREM and receive data transfers. This version assumes a
25964 an,TINTREM error-free link channelTINT:TINTREM Can be built as a BBC filing system, with code to accessTINT
8269 BBC memory map.TINT:TINTREM v0.16 16-Nov-2010 J.G.HarstonTINTREM v0.17 09-
11634 2013 JGH: Added additional Tube entry points,TINTREM EXECUTE enters code
26740 A=0/1, SEC/CLC.TINTREM v0.18 07-Apr-2013 JGH: Moved some code that overlapped I/O area.TINTREM 09-No
12338 16 JGH: Edited slightly to allow conversi
29728 o as65 source.TINTREM v0.19 11-Nov-2016 JGH: Added conditionals for sideways ROM code.TINTREM v0.20 18-Mar-2017
14920 Added option for local RDLINE, optimised OSCLI.TINTREM v0.21 23-Feb-2
8248 JGH: *HOSTFS ON sets WRCHV/RDCHV.
REM
8224 Serv3 responds t
25970 turned boot option.TINTREM To d
21002 EM TxRDY should also check for outgoing CTS/RTSTINT:TINTREM
12846 2TINTtweek1%=FALSE:REM ReadDataTINTtweek2%=TRUE :R
21536 ube transferTINTtweek3%=TRUE :REM Load to I/O accesses hardware directlyTINTtwe
9524 =FALSETINTtweek%=tweek1% OR tweek2% OR tweek3% OR tweek4%TINT:TINT:TINTREM Specify targetTINTREM ==============TINTver$="
12594 ":date$=" (23 Feb 2018)"
IF tweek%:ver$="0
8754 :date$=" (13 Jan 2020)"TINTSWROM% =FALSE:REM Buil
13622 02 Client ROMTINTSWROM% =TRUE :
8269 Build sideways ROM filing systemTINTRDLINE%=TRUE :REM Implement RDLI
27680 ocallyTINTRDLINE%=FALSE:REM Pass RDLINE to hostTINT:TINTREM BoilerplateTINTRE
15677 =========TINTIF HIMEM>&FFFF:SYS
21327 _GetEnv"TOA$:IFLEFT$(A$,5)<>"B
12848 ":OSCLI"B6502"+MID$(A$,INSTR(A$," "))
ON ERROR RE
21586 :PRINT" at line ";ERL:ENDTINTDEFFNif(A%):IFA%:z%=-1:=opt% ELSE z%=P%:=opt%TINTDEF
28261 dif:IFz%=-1:=opt% ELSE z%=P%-z%:P%=P%-z%:O%=O%-z%:=opt%TINTDEFFNelse:IFz%=-1:
20541 %:=opt% ELSE z%=P%-z%:P%=P%-z%:O%
11557 z%:z%=-1:=opt%TINTDIM mcode% &FFF, L% &7FTINT:TINTREM Declare code start and spaceTINTR
15648 ===========================TINTIF SWROM%=0:tweek3%=0TINTIF SWROM%=0:load%=&F800
8262 SWROM% :load%=&8000TINT:TINTREM System vectorsTINTREM ==============TINTUSERV=&2
16954 RKV =&202:IRQ1V=&204:IRQ2V=&206:CLIV =&208:B
22085 =&20ATINTWORDV=&20C:WRCHV=&20E:RDCHV=&210:FILEV=&212:ARGSV=&214:BGetV=&216TINTBPutV=&2
18234 BPBV=&21A:FINDV=&21C:FSCV =&21E:EVNTV=&220TINT:TINTREM Sys
8301 addressesTINTREM ================TINTROMSTART%=&F800 :REM Start of ROM code to copy to RAMTINTIOSP
9541 =&FEF0 :REM Start of I/O spaceTINTERRBUF=&236
17746 M Error bufferTINTINPBUF=&236:INPEND=&300 :REM Supervisor
29300 ing bufferTINT:TINTPROG =&EE:REM &EE/F = PROG - Current programTINTNUM =&F0:REM &F0/1 = NUM - hex accumulatorTINT
21581 OP =&F2:REM &F2/3 = MEMTOP - top of memoryTINTTRANS =&F4:REM &F4/5
17473 DR - Data transfer address
29537 sembler doesn't like 'INC ADDR')TINTTRA
26984 =&F6:REM &F6/7 = ADDR+2 - Data transfer address high wordTINTLPTR =&F8:REM &F8/9
21280 tring pointer, OSWORD control blockTINTCTRL =&FA:REM &FA/B
17184 TRL - OSFILE, OSGBPB control blockTINTCMD =&FA:REM
8224 CMD - Address of command
25966 parametersTINTTEXT =&FA:REM &FA/B = TEXT - PrText string pointerTINTIRQA =&FC:REM &FC = IRQ A stor
16710 ULT =
14916 REM &FD/E => last errorTINTESCFLG =&FF:REM &FF = Escape flagTINT:TINTREM
8271 values, these should work for BenEaterTINTREM
15677 ======================================TINTTxStatus=&5001:TxR
12349 :TxData=&5000:TxInit=&00:TxCommand=&5002:TxCmd=&0A:RxCont=&0ATINTRxStatus=&5001:RxRDY=8:
24900 ta=&5000:RxInit=&00:TxControl=&5003:TxCtl=&1E:RxStop=&02TINTTxDelay=100:REM *NOTE* 6551 ACIA has bug, TxRDY never works
16717 XRAM%=
12336 0:name$="Eater65"TINT:TINTREM I/O values, these are su
25185 le for a 6850TINTREM =========================================TINTTxStatus=&FEF0:TxRDY=2:TxData=&FEF1:TxInit=&13:TxCom
25710 =0:TxCmd=0:RxCont=&15TINTREM &13=Reset ACIA, &15=8N1, clock/16, RTS lowTINTRxStatus=&FEF0:RxRDY=1:R
29793 a=&FEF1:RxInit=&55:TxControl=0:TxCtl=0:RxStop=&55TINTREM &55=8N1, c
27491 /16, RTS highTINTTxDelay=0TINTMAXRAM%=0:IF SWROM%:name$="HostFS" ELSE name$="Serial65"TINT:TINTREM Serial Tube system v
25973 sTINTREM =========================TINTesc=&9BTINT:TINTIF tweek%:name$=name$+"v"+MID$(ver$,3,2)TINTFOR P=0 TO 1:opt%=P*3
20490 %=load%:O%=mcode%TINTPROCasmROMHeaderTINTPROCasmTubeCo
19978 EXT:IF O%>L%:PRINT "ERROR: Code overrun"TINTPRINT"Saving ";LEFT$(name$,10);TINTOSCLI"Save "+LEFT$(name$
10544 +" "+STR$~mcode%+" "+STR$~O%+" "+STR$~load%+"
21291 TR$~load%TINTPRINT:ON ERROR ON ER
8274 OFF:ENDTINTIF SWROM%:OSCLI"SetType "+name$+" BBC"TINT*QuitTINTENDTINT:TINT:TINTDEFFNerror:IF
20306 M%:[OPT P*3+4:JSR Error:]:=opt% ELSE [OPT P*3+4:BRK:]:=opt%TINT:TINTDEFPROCasmTubeCodeTINT[O
28448 pt%TINT\ Start of Tube system codeTINT\ =========================TINT\ On hardware reset
8300 of memory reads come from ROM, all writes go to RAM.TINT\ Accessing any I/O location pages ROM out of memor
24941 p, thence all readsTINT\ come f
8301 RAM.TINT\TINT.LF800TINTJMP RESETTINT.PrBannerTINTJSR PrTextTINT.BANNERTINTEQUB 13:EQUS "SERIAL TUBE 6502 64K ":EQUS LEFT$(ver$+"
13612 )TINTEQUB 13:EQUB 0TINTRTSTINTTINT\ Tube C
28261 t Startup CodeTINT\ ========================TINT.RESETTINTSEI:LDX #&00 :\ Disable interuptsTINT.LF8
19466 DA &FF00,X:STA &FF00,X :\ Copy entry block
21024 AMTINTDEX:BNE LF802TINTTINT\ The following code copies the page with the I/O registers inTINT\ it without accessing the
20271 registers. Modify IOSPACE% accordingTINT\ to where the I/O registers ac
27745 ly are.TINTTINTLDX #IOSPACE% AND 255TINT.LF819TINTLDA &FDFF,X:STA &FDFF,X :\ Copy &FE00-&FEEF to RAM, avoidingTINTDEX:BNE LF8
8224 :\ IO space at &FEFxTINT:TINTLDY #ROMSTART% AN
13618 5:STY LPTR+0 :\ Point to sta
28448 f ROMTINTLDA #ROMSTART% DIV 256:STA LPTR+1TINT.LF82A :\ Copy rest of ROM to RAMTINTLDA (LPTR),Y:STA (
21076 ),Y :\ Copy a page to RAMTINTINY:BNE LF82A :\ Loop for 256 bytesTINT
8259 LPTR+1:LDA LPTR+1 :\ Inc. address high byteTINTCMP #&FE:BNE LF82A
23610 Loop up to &FDFFTINT:TINT.STARTUP
18757 :LDX #&35TINT.LF80DTINTLDA LFF00,X:STA USERV,X :\ Set up default vectorsTINTDEX:BPL L
17456 :TXS :\ and clear stackTINTOPT FNif(TxCommand
2601 LDA #TxInit:STA TxStatus :\ Initialise por
28257 d page ROM outTINT LDA #RxInit
16724 RxStatusTINTOPT FNelseTINT LDA #TxInit:STA TxStatus :\ Initialise port and page ROM
29813 TINT LDA #TxCmd:STA TxCommandTINT LDA #TxCtl:STA TxControlTINTOPT FNendifTINT :\ Accessing
8271 registers will page ROM out if runningTINT
8224 :\ from R
8238 Once ROM is paged out we can do subroutineTINT :\
27756 s as we can now read from stack in RAM.TINTLDA #&00:STA ESCFLG:STA MEMTOP+0 :\ Clear Escape f
2663 OPT FNif(MAXRAM%=0)TINT LDA #ROMSTART% DIV 256:STA MEMTOP+1 :\ Set memtop to start of ROMTINTOPT F
29548 eTINT LDA #MAXRAM% DIV 256:STA MEMTOP+1 :\ Set memtop to top of RAMTINTOPT FNendifTINTJSR InitError
8224 :\ Claim erro
24936 ndlerTINTLDA PROG+0:STA TRANS+0
8224 :\ Copy PROG to TR
8275 addressTINTLDA PROG+1:STA TRANS+1TINTTINT\ Tell the Host that we've restartedTINT\ ---
11565 ---------------------------TINT\ Tube data
8248 &00 &FF &FF -- Cy Y XTINT\ followed
8313 stringTINT\TINT\ Note for Host authors, Host MUST NOT respond by echoing back a SoftResetTINT\ as the C
28261 t will be trapped in an infinite STARTUP loop. If Host wantsTINT\ to read Client to determine CPU this w
8300 change TRANS so must only beTINT\ done if a later transaction will set TRANS after a language transfer, egTINT
28271 Hard Reset.TINT\TINTOPT FNif(RDLI
10533 TINT LDA #0TINTOPT FNelseTINT LDX #0:LDA #&FF:TAY :\ As we are usin
8289 serial link, send Soft Reset
18976 SR osFSC:TXA :\ S
29540 A=&FF, X=0 Soft Reset, Y=&FF no bootTINTOPT FNendifTINT.STARTUP2TINTPHA :\ Save returned Ac
31074 te, will be &00 if no respon
18954 SR PrBanner:JSR OSNEWL :\ Display startup bannerTINTLDA #CmdPrompt AND 255 :\ Next time RESET
8307 soft entered,TINTSTA LF800+1 :\ banner not printedTINTLDA #CmdPrompt DIV 256TINTSTA LF800+2TINTPL
19523 C:JSR WaitCheckCode :\ Check Ack code, if &80 enter c
11365 TINT: :\ else enter command prompt loopTINTTINTTINT\ Supervisor Command promptTINT\ =
15677 ====================TINT.CmdPromptTINTLDX #&FF:TXS:JSR InitErro
8224 :\ Reset stack, claim e
29295 handlerTINTLDA #CmdPrompt AND 255:STA PROG+0 :\ Make Command Prompt the current programTINTLDA #CmdPrompt DIV 256:S
20512 ROG+1TINT.CmdOSLoopTINTLDA #ASC"*":JSR OSWRCH :\ Print '*' prom
19466 DX #LF95D AND 255TINTLDY #LF95D DIV 256TINTLDA #&00:JSR OSWORD :\ Read line to INPBUFTINTBCS CmdOSEscapeTINTLDX #INPB
16672 ND 255TINTLDY #INPBUF DIV 256 :\ Execute commandTINTJSR OS_CLI:JM
27971 dOSLoop :\ and loop back
8306 anotherTINT.CmdOSEscapeTINTLDA #&7E:JSR OSBYTE :\ Acknowledge Escape stateTINTOPT FNerror:EQUB 17:EQUS "Escap
16954 RKTINTTINT\ Control block for comman
29296 ompt inputTINT\ ---------------
11565 -------------------TINT.LF95DTINTEQUW INPBUF
8224 :\ Input text to IN
18005 TINTEQUB INPEND-INPBUF :\ Maximum number of charactersTINTEQ
9760 20:EQUB &FF :\ Min=&20, Max=&FFTINTTINTTINT\ Error handlerTINT\ =
15677 ========TINT.InitErrorTINTLDA #ErrorHandler AND 255:STA BRKV+0
17184 laim error handlerTINTLDA #ErrorHandler DIV 256:STA BRKV+1TINTRTSTINTTINT.ErrorHandlerTINTLDX #&FF:TXS
8224 :\ Reset stackTINTJSR
20051 EWLTINTLDX FAULT+0:LDY FAULT+1TINTINX:BNE P%+3:INY :\ XY=>error stringTINT
8274 PRSTRNG :\ Print error stringTINTJSR OSNEWL:JMP CmdPrompt :\ Jump
8303 command promptTINTTINTTINT\ Interrupt handlersTINT\ ==================TINT.IRQHandlerTINTSTA IRQA:PLA:PHA :\ Save A, get
24940 gs from stackTINTAND #&10:BNE BRKHandler :\ If BRK, jump to BRK handlerTINTJMP (IRQ1V)
8284 Continue via IRQ1V handlerTINT.IRQ1HandlerTINTJMP (IRQ2V)
8224 :\ Pass on to IRQ2V
21058 KHandlerTINTTXA:PHA :\ Sav
2648 TSX:LDA &0103,X :
25927 t address from stackTINTCLD:SEC
17218 #&01:STA FAULT+0TINTLDA &0104,XTINTSBC #&00:STA FAULT+1 :\ &FD/E=>after BRK op
25956 TINTPLA:TAX:LDA IRQA :\ Restore X, get saved ATINTCLI:JMP (BRKV) :\ Restore IRQs, jump to E
29295 HandlerTINT.IRQ2HandlerTINTLDA IRQA :\ Restore saved ATINT.NMIHandlerTINTRTITINTTINTTINT\ Skip SpacesTINT\ ========
2621 .SkipSpaces1TINTINYTINT.SkipSpacesTINTLDA (LPTR),Y:CMP #&20:BEQ Sk
28755 aces1TINT.NullReturnTINTRTSTINTTINT\ Scan hexTINT\ ========TINT.ScanHexTINTLDX #&00:STX NUM+0:STX NUM+1 :\ Clear hex accumulatorTINT
14662 8CTINTLDA (LPTR),Y :\ Get current characterTINTCMP #&30:BCC LF9
8224 :\ <'0', exitTINTCMP #&3A:BCC LF9A0
8224 :\ '0'..'9', add to accumul
29295 TINTAND #&DF:SBC #&07:BCC LF9B1 :\ Convert letter, if <'A', exitTINTCMP #&40:BCS LF9B1 :\ >'F', exitTINT.LF9A0TINTA
16672 :ASL A:ASL A:ASL A :\ *16TINTLDX #&03 :\ Prepare to
25974 3+1 bitsTINT.LF9A6TINTASL A:ROL NUM+0:ROL NUM+1 :\ Move bits into accumulatorTINTDEX:BPL LF9A6 :\ L
8304 for four bits, no overflow checkTINTINY:BNE LF98C :\ Move to next characterTINT.LF9B1TINTRTSTINTTINTTINT\ MOS I
21061 FACETINT\ ~~~~~~~~~~~~~TINT\TINT\TINT\ OSRDCH - Wait for character from input streamTINT\ =====
15677 ====================================TINT\ On exit, A =char,
17725 scape flagTINT\TINT.osRDCHTINTJSR WaitByte:PHA :\ Wait for characterTINTLDA ESCFLG:ASL A :\ Get Escape flag t
24931 rryTINTPLA:RTS
14880 \ Get character to A and ret
2670 TINTTINT\ OSRDCH - Request character via TubeTINT\ ===================================TINT\ On exit, A =char, Cy=Escape fl
23562 TINT\ Tube data &00 -- Carry CharTINT\TINT.osRDCH_IOTINTLDA #&00:JSR SendCommand :\ Send command &00 - OSR
2632 .WaitCarryChar :\ Wait for Carry and ATINTJSR WaitByte
19539 A :\ Wait for carryTINTJMP WaitByteTINTTINTTINT\ OSCLI - Execute
28015 mandTINT\ =======================TINT\ On entry, XY=>command stringTINT\ On exit, All registers corrupt
2570 \ Local *commandsTINT\ ---------------TINT.CmdTableTINTEQUS "GO":EQUB &80TINTEQUS "HELP":EQUB &81TINTEQUB 0TINTTINT.o
18764 TINTSTX LPTR+0:STY LPTR+1 :\ LPTR=>command stringTINTLDY #&FFTINT.o
18764 lp0TINTJSR SkipSpaces1TINTCMP #ASC"*":BEQ osCLIlp0 :\ Skip spaces a
29472 tarsTINTCMP #ASC"A":BCC osCLI_IO :\ Doesn't start with a letterTINTLDX #&FF:DEY :\ Poi
29728 o before start of stringsTINT.osCLIlp1TINTTYA:PHA :\ Save start of command lineTINT.osCLIlp2TINTINX:INY
8224 :\ Step to
29816 charactersTINTLDA CmdTable,X:BMI osCLImatch :\ Check for end of commandTINTLDA (LPTR),YTINTCMP #ASC".":BE
29551 CLIskip :\ EQ+CS = abbre
29793 ed commandTINTAND #&DF :\ Force upper caseTINTCMP CmdTable,X:BEQ osCLIlp2 :\ Check m
8293 charactersTINTCLC :\ CC=skip this commandTINT.osCLIskipTINTINXTINTLDA CmdTable,X:BPL osCLIskip
21280 tep to end of entryTINTBCS osCLIdot :\ CS=abbreviated commandTINT.osCLInomatc
19536 A:TAY
8224 :\ Restore
28265 e pointerTINTLDA CmdTable+1,X:BNE osCLIlp1 :\ Not at end of tableTINTBEQ osCLI_IO :\ End of t
25964 , pass to TubeTINT.osCLImatchTINTLDA (LPTR),YTINTCMP #ASC"A":BCS osCLInomatch :\ More letters, check n
8308 entryTINTDEY :\ Prepare to skip any spacesTINT.osCLIdotTINTPLA:JSR SkipSpaces1 :\ Drop saved
26991 nter, step past dot, skip spacesTINTLDA CmdTable,X :\ Get command byteTINTCMP #&81:BEQ CmdHelp :
14374 1, jump to *HelpTINT
8224 :\ Fall through
10784 GoTINTTINT\ *GO - call machine codeTINT\ -----------------------TINT.CmdGoTINTJSR ScanHex:JSR SkipSpaces :\ Read hex val
24864 nd move past spacesTINTCMP #&0D:BNE osCLI_IO :\ More parameters, pass to Tube to deal withTINTTX
17730 Q CmdGo2:LDX #NUM-PROG :\ If no parameters, jump to PR
8236 else jump to NUMTINT.CmdGo2TINTLDA PROG+0,X:STA TRANS+0 :\ Set address
27168 ump toTINTLDA PROG+1,X:STA TRANS+1TINTBCS SaveEnterCode :\ CS set from CMP earlierTINTTINT\ *Help - Display he
26912 nformationTINT\ --------------------------------TINT.CmdHelpTINTJSR PrBanner :\ Print help messageTINT
8224 :\ Contin
29728 o pass '*Help' command to TubeTINTTINT\ OSCLI - Send command line to hostTINT\ ===========================
15677 ==TINT\ On entry, &F8/9=>command stringTINT\TINT\ Tube data &02 s
28265 g &0D -- &7F or &80TINT\TINT.osCLI_IOTINTLDA #&02:JSR SendCommand :\ Send command &02 - OSCLITINTJSR SendStringF8
8224 :\ Send command string at
21076 TINT: :\ Drop through to wait for Ack and enter codeTINTTINT
26977 tEnterCodeTINTJSR WaitByte:SEC :\ Wait for Ack from TubeTINT.WaitCheckCodeTINTROL
17218 C SaveEnterDone :\ If <&80, exitTINTROR A
8224 :\ Restore Carry, CC=RE
11348 CS=OSCLITINT.SaveEnterCodeTINTLDA PROG+1:PHA:LDA PROG+0:PHA :\ Save cu
28261 t programTINTJSR EnterCode:\TAX :\ Enter code, save return valueTINTPLA:STA PROG+0:STA MEMTOP+0 :\ Rest
8293 current programTINTPLA:STA PROG+1:STA MEMTOP+1 :\ and set top of memory to itTINTLDA #0:\TXA :\
29245 eturn valueTINT.SaveEnterDoneTINTRTSTINTTINTTINT\ FSC - FSC FunctionsTINT\ ====
15677 ===========TINT\ On entry, A, X, Y=FSC parametersTINT\ On exit,
11329 X, Y=return valuesTINT\TINT\ Tube
29793 a &18 X Y A -- &FF Y X orTINT\ &7F then string -- respsonseTINT\TINT.osFSCTINTP
19514 DA #&18:SEC:BCS ByteHi2TINTTINTTINT\ OSBYTE - Byte MOS functionsTINT\ ===
15677 ====================TINT\ On entry, A, X, Y=OSBYTE parameter
8284 On exi
8224 A preservedTINT\ If A<&80, X=ret
25966 d valueTINT\ If A>&7F, X, Y, Carry=returned valuesTINT\TINT.osBYTETINTCMP #&80:BCS ByteHigh :\ Jump for lon
21327 BYTEsTINT\TINT\ BYTELOTINT\ Tube data
12326 4 X A -- XTINT\TINTPHA:LDA #&0
21322 R SendCommand :\ Send command &04 - BYTELOTINTTXA:JSR Se
31042 te :\ Send single parameterTINTPLA:PHA:JSR SendByte :\ Send functionTINTJSR WaitByte:T
8224 :\ Get return valueTINTPLA:RTS :\ Restore A and returnTINTTINT.By
26952 ghTINTCMP #&82:BEQ Byte82 :\ Read memory high wordTINTCMP #&83:BEQ Byte83 :\ Read bottom
27936 emoryTINTCMP #&84:BEQ Byte84 :\ Read top of memoryTINT\TINT\ BYTEHITINT\ Tube data &06 X Y A -- Cy Y
23562 TINTPHA:LDA #&06:CLCTINT.ByteHi2TINTPHP:JSR SendCommand:PLP :\ Send command &06 or &18 - B
18501 I or FSCTINTTXA:JSR SendByte :\ Send first parameterTINTTYA:JSR SendByte
8224 :\ Send second parameterTINT
14913 JSR SendByte :\ Send functionTINTBCS ByteHi3 :\ Sk
20256 SBYTE checksTINTCMP #&8E:BEQ WaitEnterCode :\ If select language, check to enter codeTINTCMP #&9D:BEQ LFAEF:CLC
23610 Fast return with Fast BPUTTINT
29817 eHi3TINTPHA:JSR WaitByte:BCC ByteHi4 :\ Get Carry or byte/string
28787 onseTINTASL A:BCC FSCString :\ Jump to send FSC stringTINT.ByteHi4TINTASL A:JSR WaitByte:TAY
18208 et return high byteTINTJSR WaitByte:TAX:PLA :\ Get return low byteTINT.LFAEFTINTRTSTINTTINTOPT FN
19752 AXRAM%=0)TINT .Byte84:LDX MEMTOP+0:LDY MEMTOP+1:RTS :\ Read top of memoryTINTOPT FNelseTINT .Byte84:LDX #
21080 AM% AND 255:LDY #MAXRAM% DIV 256:RTS :\ Read top of memoryTINTOP
20038 endifTINT.Byte83:LDX #&00:LDY #
14904 RTS :\ Read bottom of memoryTINT.Byte82:LDX #&
19514 DY #&00:RTS :\ Return &0000 as memory high
25714 TINTTINT.FSCStringTINTPLA:JSR SendString :\ Send stringTINTLDY #&FFTINT.FSCStrLp2TINTINY:LDA (LPTR),YTINTCMP #ASC"!":BCS
17235 StrLp2 :\ Skip to ' ' or <cr>TINTDEYTINT\ Check - does this cope with *
8292 *RUN */ *space/space ?
.FSCStrLp3
INY:LDA (LPTR),Y
CMP #ASC" ":BEQ FSCStrLp3 :\ Skip to non-' '
TYA:CLC:
8259 LPTR+0:STA CMD+0TINTLDA LPTR+1:ADC #0:STA CMD+1:\ Point to command
24946 metersTINTJSR WaitEnterCode :\ Wait for Ack, enter code if neededTINTBPL LFAEF
8224 :\ Response=<&40, all done
25970 turn responseTINT:
8224 :\ Response=&40 (&8
29793 this point), print textTINT.FS
29300 ChrTINTJSR WaitByte :\ Wait for a characterTINTCMP #&00:BEQ LFAEF
14880 \ &00 terminates stringTINTJSR
21079 CH:JMP FSCStrChr :\ Print characterTINTTINTTINT\ OSWORD - Various functionsTINT\ ========
15677 ==============TINT\ On entry, A =functionTINT\ XY=>co
28530 l blockTINT\TINT.osWORDTINTSTX LPTR+0:STY LPTR+1 :\ LPTR=>control blockTINTTAY:BEQ RDLINE :\ OSWORD 0, jump
8303 read lineTINT\TINT\ Tube data &08 A in_length block out_length -- blockTINT\TINTPHA:PHA :\ Save functi
19466 DA #&08:JSR SendCommand :\ Send command &08 - OSWORDTINTPLA:JSR SendByte :\ Send functionTINTTAX:BPL
29295 dSendLow :\ Jump with functions<&80TINTLDY #&00:LDA (LPTR),Y :\ Get send b
27491 length from control blockTINTTAY:JMP WordSend :\ Jump to send control blockTINTTINT.WordSendLowTINTLDY WordL
29799 hsTx-1,X :\ Get send block length from tableTINTCPX #&15:BCC WordSend :\ Use this length for OSWORD
29728 o &14TINTLDY #&10 :\ Send 16 b
29541 for OSWORD &15 to &7FTINT.WordSendTINTTYA:JSR SendByte :\ Send send block lengthTINTDEY:BMI LFB45
8284 Zero or &81..&FF length, nothing to sendTINT.LFB38TINTLDA (L
10578 ,Y:JSR SendByte :\ Send byte from control blockTINTDEY:BPL LFB38 :\ L
8304 for number to be sentTINT.LFB45TINTTXA:BPL WordRecvLow :\ Jump with functions<&80TINTLDY #&01:LDA (LPTR),Y
14880 \ Get receive block length f
8301 control blockTINTTAY:JMP WordRecv :\ Jump to receive control blockTINTTINT.WordRecvLowTINTLDY WordLengthsRx-1
8224 :\ Get receive length from tableTINTCPX #&15:BCC WordRecv :\ Use this length f
20256 SWORD 1 to &14TINTLDY #&10 :\ Receive 16 bytes for OSWORD &15 to &7FTINT.WordRecvTINTTYA:JSR SendByte
8224 :\ Send receive block
28261 gthTINTDEY:BMI LFB71 :\ Zero of &81..&FF length, nothing to receiveTINT.LFB64TINTJSR WaitByte:STA (L
10578 ,Y :\ Get byte to control blockTINTDEY:BPL LFB64 :\ Loop for number t
25970 ceiveTINT.LFB71TINTLDY LPTR+1:LDX
21076 +0:PLA :\ Restore registersTINTRTSTINTTINTTINT\ RDLINE - Read a line of textTINT\ ========
15677 ================TINT\ On entry, A =0TINT\ XY=>control
28524 ckTINT\ On exit, A =undefinedTINT\ Y =length of returned stringTINT\ Cy=0 ok, Cy=1
25459 apeTINT\TINT\ Tube data &0A block -- &FF or &7F string &0DTINT\TINT.RDLINE
21584 FNif(RDLINE%) :\ Perform RDLINE locallyTINT LDY #2TINT LDA (LPTR),Y:S
19488 PTR+2 :\ Copy control block to w/sTINT DEY:LDA (LPTR),Y:TAXTINT
14937 LDA (LPTR),YTINT STA LPTR+0:STX LPTR+1 :\ (LPTR)=>string buffer,
21584 R+2=max lengthTINT .Word00Lp1TINT JSR OSRDCH:BCS Word00Esc :\ Wait for chara
29285 TINT CMP #&7F:BNE Word00Char :\ Not DeleteTINT .Word00DeleteTINT TYA:BEQ Word00Lp1 :\ Nothing to deleteTINT LDA
17975 :JSR OSWRCH :\ VDU 127TINT DEY:
8272 Word00Lp1 :\ Dec. counter, loop backTINT .Word00CharTINT CMP #&08:BEQ
25714 00Delete:\ BS is also DeleteTINT CMP #&15:BNE Word00Ins :\ Not Ctrl-UTINT TYA:BEQ Word00Lp1 :\ Nothing
8303 deleteTINT LDA #&7FTINT .Word00Lp2TINT JSR OSWRCH:DEY :\ Delete charactersTINT BNE Word00Lp2TINT BEQ Word00Lp1
8224 :\ Jump back to startTINT
22318 ord00InsTINT STA (LPTR),Y
8224 :\ Store characterTINT CMP
12326 D:CLC:BEQ Word00cr:\ Return - f
29545 hTINT CPY LPTR+2:BCS Word00max :\ Maximum lengthTINT CMP #&20:BCS Word00ctrl :\ Control characterTINT DEY
8224 :\ Cancel follow
8295 INYTINT .Word00ctrlTINT INY:JSR OSWRCH :\ Inc. counter, print characterTINT .Word00maxTINT JMP Word00Lp1
8224 :\ Loop for moreTINT .
25714 00crTINT JSR OSNEWL:CLC :\ Return with CC, Y=lengthTINT .Word00EscTINT RTSTINTOPT FNelseTINT LDA #&0A:JSR Se
28483 mmand :\ Send command &0A - RDLINETINT LDY #&04TINT .LFB7ETINT LDA (LPTR),Y:JSR SendByte:\ Send contro
27746 ockTINT DEY:CPY #&01:BNE LFB7E
14880 \ Loop for 4, 3, 2TINT LDA #&0
21322 R SendByte :\ Send &07 as address high byteTINT LDA (
21076 ),Y:PHA :\ Get text buffer address high byteTINT DEY:TYA:JSR SendByte
8224 :\ Send &00 as address low b
2661 LDA (LPTR),Y:PHA :\ Get text buffer address low byteTINT LDX #&FF:JSR WaitByte :\ Wait for responseTINT
19539 A:BCS RdLineEscape :\ Jump if Escape returnedTINT PLA:STA LP
12331 :PLATINT STA LPTR+1:LDY #&00 :\ Set &F8/9=>text bufferTINT .RdLineLpTINT JSR Wa
31042 te:STA (LPTR),Y:\ Store returned characterTINT INY:CMP #&0D:BNE RdLineLp:\ Loop until <cr>TINT LDA #&00:DEY:CLC:INX
8224 :\ Return A=0, Y=len, X=00,
12349 TINT RTSTINT .RdLineEscapeTINT PLA:PLA:LDA #&00 :\ Return A=0, Y=len, X=FF, Cy=1TINT RTSTINTOPT FNendifTINTTINT\ OSWORD contro
27746 ock lengthsTINT\ --------------
11565 ----------TINT.WordLengthsTxTINTEQUB &00:EQUB &
17722 QUB &00:EQUB &05TINTEQUB &04:EQUB &05:EQUB &08:EQUB
2629 EQUB &04:EQUB &01:EQUB &01:EQUB &05TINTEQUB &00
21841 B &08:EQUB &20:EQUB &10TINTEQUB &0D:EQUB &00:EQUB &04:EQUB &80TINT.Word
26478 thsRxTINTEQUB &05:EQUB &00:EQUB &05:EQUB &00TINTEQUB &05:EQUB &00:EQUB &00:EQUB &00TINTEQUB &05:EQUB &09:E
8258 &05:EQUB &00TINTEQUB &08:EQUB &19:EQUB &00:EQUB &01TINTEQUB &0D:EQUB &80:EQUB &04:EQUB
2608 TINTTINT\ OSARGS - Read info on open fileTINT\ ==============
15677 =============TINT\ On entry, A =functionTINT\ X =>dat
28535 rd in zero pageTINT\
26685 andleTINT\ On exit, A =returne
24950 lueTINT\ X preserved
8224 Y preservedTINT\TINT\ Tube data &0C handle block function -- result blockTINT\TINT.osAR
20490 HA:LDA #&0C:JSR SendCommand :\ Send command &0C - OSARGSTINTTYA:JSR SendByte
8224 :\ Send handleTINTLDA &03,X:JS
25939 ndByte :\ Send data word
16708 &02,X:JSR SendByteTINTLDA &01,X:JSR SendByteTINTLDA &00,X:JSR SendByteTINTPLA:JS
25939 ndByte :\ Send fun
28521 nTINTJSR WaitByte:PHA :\ Get and save resultTINTJSR WaitByte:STA &03,X :\ Receive data wordTINTJSR WaitByte
16724 &02,XTINTJSR WaitByte:STA &01,XTINTJSR WaitByte:STA &00,XTINTPLA:RTS
8284 Get result back and returnTINTTINTTINT\ OSBGET - Get a byte fro
28783 en fileTINT\ ==================
15677 ============TINT\ On entry, Y =handleTINT\ On exit, A =byte Re
23562 Y =preservedTINT\ Cy set if EOFTINT\TINT\ Tube data &0E handle -- Carry byteTINT\TINT.os
21573 TINTLDA #&0E:JSR SendCommand :\ Send command &0E - OSBGETTINTTYA:JSR Se
31042 te :\ Send handleTINTJMP WaitCarryChar :\ Jump to wait for Carry and byteTINTTINTTINT\ OS
21589 - Put a byte to an open fileTINT\ ===================================TINT\ On ent
8236 A =byte to writeTINT\ Y =handleTINT\ On exit, A =preservedTINT\ Y =preservedTINT\TINT\ Tube data &10 handle by
8224 -- &7FTINT\TINT.osBPUTTINTPHA:LDA #&10:JSR SendCommand :\ Send command &10 - OSBPUTTINTTYA:JSR SendByte
8224 :\ Send handleTINTPLA:JSR Sen
29817 e :\ Send byteTINTPHA:JSR WaitByte:PLA:RTS :\ Wait fo
25441 knowledge and returnTINTTINTTINT\ OSF
8260 - Open or Close a fileTINT\ =============================TINT\ On entry, A =func
28271 TINT\ Y =handle or XY=>filenameTINT\ On exit, A =zero or handleTINT\TINT\ Tube data &12 function stri
9760 0D -- handleTINT\ &12 &00 handle -- &7FTINT\TINT.osFINDTINTPHA:LDA #&12:JSR SendCommand :\ Send
28013 and &12 - OSFINDTINTPLA:JSR SendByte :\ Send functionTINTCMP #&00:BNE OPEN :\ If <>0, jump to
20256 PENTINT\ CLOSETINTPHA:TYA:JSR SendByte :\ Send handleTINTJSR WaitByte:PLA:RTS :\ Wait for acknowledge, r
28532 re regs and returnTINT.OPENTINTJSR SendString :\ Send pathnameTINTJMP WaitByte :\ Wait for and
29797 urn handleTINTTINTTINT\ OSFILE - Operate on whole filesTINT\ ===============================TINT\ On entry, A =functionTINT\
8224 XY=>control blockTINT\ On ex
8236 A =resultTINT\ control block updatedTINT\TINT\ Tube data &14 block string <cr> function -- result blockTINT\TINT.
18758 LETINTSTX CTRL+0:STY CTRL+1 :\ CTRL=>control blockTINTPHA:LDA #&14:JSR SendCommand :\ Send command &14 - OSFIL
17484 Y #&11
17996 C5FTINTLDA (CTRL),Y:JSR SendByte :\ Send con
27759 blockTINTDEY:CPY #&01:BNE LFC5F :\ Loop for &11..&02TINTDEY:LDA (CTRL),Y:TAXTINTINY:LDA (CTRL),Y:TAY :\ Get
26740 name address to XYTINTJSR SendString :\ Send pathnameTINTPLA:JSR SendByte :\
25710 functionTINTJSR WaitByte:PHA :\ Wait for resultTINTLDY #&11TINT.LFC7ETINTJSR WaitByte:STA (CTRL),Y
23610 Get control block backTINTDEY:
8281 #&01:BNE LFC7E :\ Loop for &11..&02TINTLDY CTRL+1:LDX CTRL+0 :\ Restor
25970 gistersTINTPLA:RTS
8224 :\ Get result and returnTINT
8284 OSGBPB
19744 ultiple byte Read and writeTINT\ ===========
15677 ======================TINT\ On entry, A =functionTINT\
22872 =>control blockTINT\ On exit,
29245 eturned valueTINT\
28271 trol block updatedTINT\TINT\ Tube data &16 block function -- block Carry resultTINT\TINT.osGBPBTINTSTX CTR
14896 STY CTRL+1 :\ CTRL=>control bloc
18512 A:LDA
13873 :JSR SendCommand :\ Send command &
11552 OSGBPBTINTLDY #&0CTINT.LFC9ATINTLDA (CTRL),Y:JSR SendByte
8284 Send control blockTINTDEY:BPL LFC9A :\ Loop
8306 &0C..&00TINTPLA:JSR SendByte :\ Send functionTINTLDY #&0CTINT.LFCA8TINTJSR WaitByte:STA (CTRL),Y :\ Get cont
8300 block backTINTDEY:BPL LFCA8 :\ Loop for &0C..&00TINTLDY CTRL+1:LDX CTRL+0 :\ Restore registersTINT
8272 WaitCarryChar :\ Jump to get Carry and resultTINTTINTTINT\ Tube I/O routi
2675 \ =================TINTTINT\ Send a stringTINT\ -------------TINT.SendStringTINTSTX LPTR+0:STY LPTR+1 :\ Se
20556 TR=>stringTINT.SendStringF8TINTLDY
12326 0TINT.LF9B8TINTLDA (LPTR),Y:JSR SendB
8293 :\ Send character to I/OTINTINY:CMP #&0D:BNE LF9B8 :\ Loop until <cr> sentTINTLDY LPTR+1:RTS :\ Resto
22816 from &F9 and returnTINTTINTTINT\ OSWRCH - Send character to output streamTINT\ =============================
15677 =======TINT\ On entry, A =characterTINT\ On exit, A =preserved
23562 Tube data character --TINT\TINT.osWRCH :\ WRCH is simply SendByteTINTTINTTINT\ Tu
17184 ore I/O RoutinesTINT\ ======================TINT\ Characters and commands are sent over the same single
29295 tTINT\ Outward commands are escaped, and inward responses are escapedTINT\TINT\ OutwardTINT\ x VDU xTINT\
25888 sc,esc VDU escTINT\
25459 ,n MOS function, control block followsTINT\TINT\ InwardTINT\ x char/byte xTINT\
25888 sc,esc char/byte e
23562 esc,&00 BRK, error number+text+null followsTINT\ esc,<&80 read returned co
28530 l block set lengthTINT\ esc,&8n Escape change, b0=new stateTINT\ esc,&9x,Y,X,A EventTINT\ esc,&Ax
8224 reserved for networkingTINT\
25888 sc,&Bx end transfe
8284 esc,
11384 addr set addressTINT\ esc,&Dx,addr execute addressTINT\
25459 ,&Ex,addr start load from addressTINT\ esc,&Fx,addr start save from addressTINT\ All comm
29540 are data inward, except esc,&Fx which is data outwardTINTTINTTINT\ Send a byte, escaping it if neededTINT\ ----------
11565 --------------------TINT\ On entry, A=byte t
25971 ndTINT\ On exit, A,P preserved
11786 SendByteTINTPHP:JSR SendData :\ Send byteTINTCMP #esc:BNE SendByte2 :\ If not es
25632 oneTINTJSR SendData :\ If esc
25971 nd twice to prefix itTINT.SendB
12901 TINTPLP:RTSTINTTINT\ Send an escaped commandTINT\ -----------------------TINT\ On entry, A=commandTINT\ On exit, A,X,Y preserved,
25376 orruptedTINT.SendCommandTINTPHATINT.SendCmdLpTINTJSR ReadByte:BCS SendCmdLp :\ Flush inp
19466 DA #esc:JSR SendData :\ Send esc prefixTINTPLA:JMP SendData :\ Send command byte (always <&80)TINTTINT\ Ch
8299 if a byte is waiting, and read it if thereTINT\ ------------------------------------------------TINT\
8302 exit, P=EQ CC - nothing waitingTINT\ P=NE CS - byte waiting, returned
8302 ATINT\TINT.ReadByteTINTJSR ReadData :\ See if data presentTINTPHP:BCS WaitByte2 :\ Data pr
28261 t, continue with itTINTPLP:LDA #0:RTS :\ No data presentTINTTINT\ Wait for a byte, decoding escaped dataTINT\ -
11565 ---------------------------------TINT\ On ex
8236 A =byteTINT\ P =preservedTINT\TINT.WaitByteTINTPHPTINT.WaitByteLpTINTJSR WaitData :\ Wait for data presentTINT
26977 tByte2TINTBNE WaitByteOk :\ Not esc, return itTINTJSR WaitData:BEQ WaitByteOk
25888 sc,esc, return as escTINTPHA:TYA:PHA:TXA:PHA:TSX :\ Save registersTINTLDA &103,X:JSR WaitCo
28257 d :\ Decode escaped commandTINTPLA:TAX:PLA:TAY:PLA :\ Restore registersTINTJMP WaitByteLp :\
28527 p back to wait for a byteTINT.WaitByteOkTINTPLP :\ Rest
8293 flagsTINT.WaitByteOk2TINTRTS :\ Return byteTINTTINT\ Wait for raw byte of dataTINT\ ------------------
11565 ---TINT\ On exit, A =byteTINT\ P =EQ b
15717 esc, NE byte<>escTINT\TINT.WaitDataTINTJSR ReadData:BCC WaitData :\ Loop until data presentTINTRTSTINTTINT\ Decode escaped comman
8284 ------
11565 ------------TINT\ On entry, A=command, P set
25443 ordinglyTINT\ All registers can be trashedTINT\TINT.WaitCommandTINTBEQ WaitError :\ esc,&00
29285 rorTINTBMI WaitTransfer
14880 \ esc,>&7F - data transferTINTTINT
29541 c,1..127 - read a control bl
2667 \ ---------------------------------TINTTAY :\ Move count to YTINT.WaitLengthTINTJ
22304 aitByte :\ Wait for a byteTINTDEY:STA (CTRL),Y :\ Store i
20546 L Wait
26478 th:RTSTINTTINT\ esc,&00 - errorTINT\ ---------------TINT.WaitErrorTINTSTA ERRBUF:TAY :\ Store error
2635 JSR WaitByte:STA ERRBUF+1 :\ Store error numberTINT.WaitErrorLpTINTJSR WaitByte:STA
21074 BUF+2,Y:\ Store error characterTINTINY:CMP #0:BNE WaitErrorLp :\ Loo
28277 til final &00TINT:TINT\\ This does
8308 workTINT\\ .WaitErr1TINT\\ LDA #&1E:\JSR
25710 Command :\ Send a SYNC commandTINT\\ JSR ReadByte:\BCC WaitErr1 :\ Wait until Host respondsTINT\\ .W
17780 rr2TINT\\ JSR ReadByte:\BCS WaitErr2 :\ Flush everything from hostTINT:TINTLDX #16:TAYTINT.WaitErr1TINTDEY:BNE Wait
12658 :\ Pause a while to let HostTINTDEX:BNE WaitErr1 :\ reconnect after an errorTINT:TINTJSR WaitExit
25964 ase :\ Release Tube, restore ScreenTINTLDA ERRBUF+1:ORA ERRBUF+2 :\ Check for error 0,""TINTBEQ
11045 5:JMP ERRBUF :\ Jump to error, no returnTINTJMP STARTUP2 :
29253 ror 0,"" is RESETTINTTINT\ esc,&8n
17696 scape changeTINT\ -----------------------TINT.W
21620 ransferTINTCMP #&C0:BCS WaitStartTINTCMP #&A0:BCS WaitEndTINTCMP #&90:BCS WaitEventTINTLSR A:ROR ESCFLG:RTS
8284 Set error flag from b0TINTTINT\ esc,&9x - EventTINT\ ----------
11565 -TINT.WaitEventTINTJSR WaitByte:TAY :
25926 tch event Y parameterTINTJSR Wa
31042 te:TAX :\ Fetch event X parameterTINTJSR WaitByte :\ Fetch event A parameterTINTJMP (EVNTV)
8224 :\ Dispatch to even
25974 ctorTINTTINT\ esc,&Ax - ReservedTINT\
11565 ---------------TINT.WaitEndTINTCMP #&B0:BCC Wai
27000 t :\ Return to WaitByteTINTTINT\ esc,&Bx - End transferTINT\ --------
11565 ----------TINTPLA:PLA:PLA:PLA:PLA:PLA :\
8304 JSR WaitCommand, A,Y,X,ATINTPLA:PLA :\ Pop JSR Wait/ReadByte in Load/SaveLoopTINT.WaitExitSave
16716 :BPL WaitExitRelease :\ Pop transfer flag, b0=0 - Tube releaseTINTROR A:BCS
29801 ExitScreen :\ b0=1, Screen releaseTINT.WaitExitTINTRTSTINT.WaitExitReleaseTINTOPT FNif(SWROM%)TINT JSR Tu
25938 lChk :\ Release if Tube presentTINTOPT FNendifTINT.WaitExitScreenTINTOPT FNif(SWROM%)TINT LDY #0:J
30240 ramSelect :\ Page in main memory, return to WaitByteTINTOPT FNelseTINT RTSTINTOPT
25934 ndifTINTTINT\ esc,&C0+ - Start transferTINT\ -------------------------TINT.Wai
24948 rtTINTPHA:LDY #4 :\ Save command, point to TRANSTINT.WaitStartLpTINTJSR
29801 Byte:STA TRANS-1,Y :\ Wait for 4-byte data addressTINTDEY:BNE WaitStartLpTINTPLA:CMP #&D0:BCC WaitE
8308 :\ esc,&Cx - set address for later entryTINT\CMP #&E0:\BCC CallCode :\ esc,&Dx - enter code immediat
2681 CMP #&E0:BCS TransData :\ esc,&Ex - transfer dataTINTTINT\ esc,&D0+ - Enter codeTINT\ ---------------------TINT.
27756 CodeTINTLDA #&00:SEC:JMP (TRANS) :\ Enter code with A=0, SECTINTTINT\ Decide what local memory to tr
26227 er data to/fromTINT\ -------------------------------------------------TINT\ A=&Ex/&Fx - Load/SaveTINT\TINT.TransDataTINTO
17952 Nif(SWROM%)TINT LDX &27A:BPL WaitTransIO :\ No TubeTINT LDX TRANS+3 :\
25445 k transfer addressTINT INX:BNE WaitTransTube :\ Tube present, ADDR<&FFxxxxxxTINTOPT FNendifTINT.WaitTrans
16650 ND #&F0 :\ A=transfer flag with b7=1 for IO transferTINTOPT
26217 (SWROM%)TINT TAYTINT LDX TRANS+2:INX:BEQ WaitIOGo :\ &FFFFxxxx - current IO me
31090 TINT LDA &D0:INX:BEQ WaitIOScreen :\ &FFFExxxx - current display memoryTINT INX:BNE WaitIOGo:LDA #16 :\ &FF
30840 xx - shadow screen memoryTINT .WaitIOScreenTINT AND #16:BEQ WaitIOGo
8224 :\ Non-shadow screen di
24940 yed, jump with Y=&E0/&F0TINT INY:JSR vramSelect :\ Page in video RAM, Y is now &E1/&F1TINT .WaitIOGoTINT
16729 TINTOPT FNendifTINTPHA:LDY #0 :\ Stack IO/Screen flag, init Y=0TINTCMP #&
16954 CS WaitSaveIO :\ esc,&Fx - save dataTINTTINT\ L
8292 data from remote hostTINT\ --------------------------TINT.WaitLoadIO :\ esc,&Ex - lo
25632 ataTINTOPT FNif(tweek3%=0)TINT JSR WaitByte :\ Fetch byteTINTOPT FNelseTINT \ Within this loop
8257 and X are scratch registers
8292 can be trashedTINT JSR WaitLoadByteTINT BNE WaitLoadIOput :\ Not <esc>, raw byteTINT JSR WaitLoadByteTINT
17742 WaitLoadEscape :\ <esc><command>TINT .WaitLoadIOputTINTOPT
25934 ndifTINTSTA (TRANS),Y :\ Store in I/O memoryTINTINY:BNE Wai
24943 dIOTINTINC TRANS+1:JMP WaitLoadIO :\ Loop until terminated by esc,&BxTINTTINT.Wai
24943 dEscapeTINTOPT FNif(SWROM% AND tweek3%)TINT TAX:AND #&F0:CMP #&B0:BEQ WaitLoa
25710 TINT TXA:JSR WaitCommand :\ Not TransferEnd, pass to usual cod
8224 JMP Wa
28492 adIO :\ Back to main loopTINT\ At this point, A=&B0, X=trashed, Y=trashedTINT\ Stack -> IOflag, JSR WaitComm
11364 JSR WaitCommand, PHX, PHY, PHA, PHP, JSR WaitByte, JSR WaitByteTINT .WaitLoadEndTINT JMP WaitExitSave
21024 estore I/O mapping, unwind out of WaitCommandTINTOPT FNendifTINTTINT\ Save data to remote hostTINT\
11565 --------------------TINT.WaitSaveIOTINTLDA (TRA
11305 Y:JSR SendByte :\ esc,&Fx - save dataTINTJSR ReadByte:BCS WaitSaveExit :\ Pol
28265 put for terminationTINTINY:BNE
29801 SaveIO :\ Update checksum for 256 bytesTINTINC TRANS+1:JMP WaitSaveIO :\ Loop un
8300 terminated by esc,&BxTINT.WaitSaveExitTINTJMP WaitExitSaveTINTTINTOPT FNif(SWROM%)TINT \ Tube and ADDR<&FFxxxxxxTINT
11565 ---------------------TINT .Wai
24946 nsTubeTINT CLC:ADC #&10:ROL A :\ Cy=1/0 for load/saveTINT LDA #0:ADC #0:PHA
8224 :\ A=1/0 for load/saveTINT JS
30036 beAction :\ Claim
25954 and start transferTINT PLA:PHA:BEQ WaitSaveTube :\ Leave flag pushed with b7=0 for Tube transferTINT :TINT .WaitLoadTu
23562 JSR TubeDelayTINT BIT &FEE4 :\ Test b7 and b6 of Tube Data StatusTINT BVC WaitLoadTub
8224 :\ Loop until b6=1, Tu
17440 ata not full, TxRDYTINT JSR WaitByte :\ Fetch byteTINT STA &FEE5 :\ Send t
30036 beTINT JMP WaitLoadTube
23610 Loop until terminated by es
16934 xTINT :TINT .WaitSaveTubeTINT BIT &FEE4
8224 :\ Test b7 and b6 of Tu
17440 ata StatusTINT BPL WaitLoadTube :\ Loop until b7=1, Tube Data not empty, RxRDYTINT LDA &FEE5:
8274 SendByte :\ Fetch byte from Tube and send itTINT JSR ReadByte:BCS WaitSav
27000 t :\ Poll input for terminationTINT\ JSR TubeDelayTINT JMP WaitSaveTu
8224 :\ Loop until terminated by esc,&BxTINTOPT FNendifTINTTINT.WaitLoadByteTINTOPT FNif(SWROM% AND t
27493 3%)TINT \ A and X are scratch, Y needs to be preservedTINT PHP:SEI :\ Stop IRQsTINT
8280 #RxCont:STX RxStatus :\ Lower RTS to allow inputTINT LDX #RxStop
11808 WaitLoadByteLoopTINT LDA RxSta
8307 :\ Get RxStatusTINT AND #RxRDYTINT BEQ WaitLoadByteLoop :\ Tight loop until data arrivesTINT STX Rx
29793 us :\ Raise RTS to stop inputTINT PLP :\ Restore IRQsTINT LDA RxData
8224 :\ Get data byteTINT CMP #es
8224 :\ Set EQ=es
8224 RTSTINTOP
20038 endifTINTTINTTINTOPT FNif(SWROM%)TINT \
29283 een selection routinesTINT \ =========================TINT .vramSelectTINT TYA:PHA:AN
12579 :PHA:TAX :\ A=0 main RAM,
8241 video RAMTINT LDA #108:JSR OSBYTE :\ Attempt to select
29537 ter video RAMTINT PLA:INX:BNE vramOk :\ X<>255, successfulTINT EOR #1:T
8224 :\ A=1 main RAM, A=0 video RAMTINT LDA #111:JSR OSBYTE :\ Attempt to
27749 ect Aries/Watford RAMTINT .vramOkTINT PLA:TAY:RTSTINTOPT FNendifTINTTINTOPT FNif(SWROM%)TINT \ Tube communication routinesTINT \
15677 ========================TINT .TubeDelay :\ De
8313 for 24usTINT JSR TubeDelay2:JSR TubeDelay2:JSR TubeDelay2TINT .TubeDelay2:RTSTINT .TubeEnterCodeTINT
8257 #4 :\ 4=EnterCodeTINT .TubeActionTINT PHATINT .TubeC
28009 TINT LDA #&C0+6:JSR &406 :\ Claim with ID=6 (HostFS)TINT BCC TubeClaimTINT LDX #TRANS AND 255
8224 :\ Point to transfer addre
8202 LDY #TRANS DIV 256TINT PLA:JMP &406 :\ Start transfer actionTINT .TubeRelChkTINT BIT &27A:BMI P%+3:RTS
23610 If no Tube, returnTINT .TubeR
24933 seTINT LDA #&80+6:JMP &406 :\ Release with ID=6 (HostFS)TINTOPT FNendifTINTTINT\ Enter Code pointed to by TRAN
29300 ansfer addressTINT\ ===========
15677 ================================TINT\ Checks to see if code
8307 a ROM header, and verifies itTINT\ if it has. CC=entered from RESET, CS=entered from OSCLITINT.Ente
25711 eTINTOPT FNif(SWROM%)TINT LDA &27A:BPL EnterCodeIO :\ No Tub
29296 esentTINT LDY TRANS+3:INY:BNE
25954 EnterCode:\ ADDR<&FFxxxxxxTINTOPT FNendifTINT.EnterCodeIOTINTPHP:LDY #&07:LDA (TRANS),Y :\ Get copyright offsetTINTCL
19523 C:ADC TRANS+0:STA FAULT+0TINTLDA #0:TAY:ADC TRANS+1:STA F
21580 +1 :\ &FD/E=>copyright messageTINT\TINT\ Now check for &00,"(C)"TINTLDY #&00:LDX #3TINT.Enter
25445 kTINTLDA (FAULT),Y:CMP CheckCopy,X:BNE LF8FATINTINY:DEX:BPL EnterCheck :\ Check for &00,"(C)"TINT
8284 &00,"(
8226 exists, check ROM type byteTINT\ -------
11565 --------------------------TINTLDY #&06:LDA (
20033 S),Y :\ Get ROM typeTINTAND #&4F:CMP #&40:BCC NotLanguage :\ b6=0, n
24864 languageTINTAND #&0D:BNE Not6502Code :\ type<>0 and <>2, not 6502 codeTINT.LF8FATINTTXA:ROL A:ROL A:AND #1
8224 :\ A=0 - raw, A=1 - hea
2674 LDX TRANS+0:LDY TRANS+1:BPL LF904 :\ Entered code<&8000, don't move memtopTINTSTX MEMTOP+0:STY MEMT
12587 :\ Set memtop to current programTINTSTX PROG+0:STY PROG+1
23610 Set current program to addr
8307 enteredTINT.LF904TINTPLP:JMP (TRANS) :\ Enter code with A=raw/code, Cy=RESET/OSCLI flagTINT.CheckCopy
21841 S ")C(":EQUB 0TINT\TINT\ Any existing error handler will probably have
28261 overwrittenTINT\ So, set up new error handler before generating an errorTINT.NotLanguageTINTOPT FNif(SWRO
12349 )TINT JSR InitErrorTINTOPT FNendifTINTOPT
25934 rror:EQUB 249:EQUS "This is not a language":EQUB 0TINTTINT.Not6502CodeTINTO
17952 Nif(SWROM%=0)TINT JSR InitErrorTINTOPT FNendifTINTOPT FNerror:EQUB 249:EQUS "This is not
12341 2 code":EQUB 0
\ Low level I/O routines
\ ======
15677 ============TINT\ This is where detailed playful frobbing is
28271 e to ensure a cleanTINT\ error-free reliable link channel. All calling code assumes theseTINT\ routine
29281 e 100% error-free and reliab
8238 Any handshaking,TINT\ retries, error correction, etc must be done at this level.TINT\TINT\ Code can be mad
24934 ster by migrating knowledge
30063 t the hardwareTINT\ up to the Tube I/O layer.TINT\TINTTINT\ Send a raw byte of dataTINT\ --------------------
2605 \ On entry, A=byte to sendTINT\ On exit, A,
8281 preserved, P corruptedTINT\TINT.SendDataTINTPHATINTO
17952 Nif(TxRDY)TINT .SendWaitTINT LDA TxStatus :\ Get StatusTINT AND #TxRDY:BEQ
28261 dWait :\ Wait until data can be sentTINTOPT FNendifTINTOPT FNif(TxDelay)TINT LDA #TxDe
14969 SEC :\ 6551-style TxRDY bugfixTINT .SendWaitTINT SBC #1:BNE SendWaitTINTOPT FNendifTINTPLA:STA
24900 ta:RTS :\ Send dataTINTTINT\ Read raw dataTINT\ -------------TINT\ On exit, P =CC, no dataTINT\ =CS, data presen
17696 Q=esc, NE=not escTINT\TINT.ReadDataTINTOPT FNif(t
27493 1%)TINT\ Check if anything squeezed in before we managed to raise RTSTINT LDA RxStatus :
25927 t RxStatusTINT AND #RxRDY:BNE
25697 DataRx :\ Data already presentTINTOPT FNendifTINTPHP:SEI:TYA:PHA :\ Speed up by disabling
20818 sTINTOPT FNif(TxCommand=0)TINT LDY #RxCont:STY RxStatus :\ Lower RTS to
28524 w inputTINTOPT FNelseTINT LDY #RxCont:STY TxCommand :\ Lower RTS to allow inputTINTOPT FNendifTINTLDY #RxStop:LDA
29779 atus :\ Get RxStatusTINTAND #RxRDY:BNE ReadDataOk :\ Data presentTINTOPT FNif(TxCommand=0)TINT PLA:STY RxStatus:TAY:P
8224 :\ Raise RTS, restore Y,PTINTOPT FNelseTINT PLA:STY TxCommand:TAY:PLP :\ Raise
11347 restore Y,PTINTOPT FNendifTINTCLC:RTS :\ CC=No data presentTINT.Rea
29793 aOkTINTOPT FNif(TxCommand=0)TINT PLA:STY RxStatus:TAY:PLP :\ Raise
11347 restore Y,PTINTOPT FNelseTINT PLA:STY TxCommand:TAY:PLP :\ Raise RTS, restore Y,PTINTO
17952 NendifTINT.ReadDataRxTINTLDA RxData:CMP #esc:SEC:RTS :\ CS=Data present, EQ/NE=escTINTTINTTINT
17993 (P%>IOSPACE%)AND(SWROM%=0):ERROR 1,"Code overrun"TINT[OPT
13098 +4TINT\ Spare spaceTINT\ ===========TINTOPT FNif(SWROM%=0)TINTEQUS STRING$((IOSPACE%-P%)
12868 55,CHR$255)TINTTINT\ I/O SpaceTINT\ =========TINTEQUS STRING$(8,CHR$0)TINTTINT\ Tube I/O Reg
25972 rsTINT\ ==================TINT.TubeS1 :\ &FEF8 :EQUB 0TINT.TubeR1 :\ &FEF9 :EQUB 0TINT.TubeS2 :\ &FEFA :EQUB 0TINT.TubeR2 :\ &
16966 :EQUB 0TINT.TubeS3 :\ &FEFC :EQUB 0TINT.TubeR3 :\ &FEFD :EQUB 0TINT.TubeS
23610 &FEFE :EQUB 0TINT.TubeR4 :\ &F
8262 :EQUB 0TINTOPT FNendifTINTTINTTINT\ DEFAULT VECTOR TABLETINT\ ===================
19502 FF00TINTE
8279 NullReturn :\ &200 - USERVTINTEQUW ErrorHandler :\ &202 - BRKVTINTEQUW IRQ1Hand
8306 :\ &204 - IRQ1VTINTEQUW IRQ2Handler :\ &206 - IRQ2VTINTEQUW osCLI :\ &208 - CLIVTINTEQUW
17011 YTE :\ &20A - BYTEVTINTEQUW osWORD :\ &20C - WORDVTINTEQUW osWRCH :\ &20E - WRCHVTINTEQUW
21107 DCH :\ &210 - RDCHVTINTEQUW osFILE :\ &212 - FILEVTINTEQUW osARGS :\ &214 - ARGSVTINTEQUW
17011 GET :\ &216 - BGetVTINTEQUW osBPUT :\ &218 - BPutVTINTEQUW osGBPB :\ &21A - GBPBVTINTEQUW
18035 IND :\ &21C - FINDVTINTEQUW NullReturn :\ &21E - FSCVTINTEQUW NullReturn :\ &220 - EVNTVTINTEQUW
27756 Return :\ &222 - UPTVTINTEQUW NullReturn :\ &224 - NETVTINTEQUW NullReturn :\ &226 - VduVTINTEQUW NullRetur
8224 :\ &228 - KEYVTINTEQUW NullR
29301 n :\ &22A - INSVTINTEQUW NullReturn :\ &22C - RemVTINTEQUW NullReturn :\ &22E - CNPVTINTEQUW NullReturn
14880 \ &230 - IND1VTINTEQUW NullRetu
8224 :\ &232 - IND2VTINTEQUW NullReturn :\ &234 - IND3VTINTTINT\ Print hex numbersTINT\ =================TINT.PrHexXY
16729 :JSR PrHex:TXATINT.PrHexTINTPHA:LSR A:LSR A:LSR A:LSR ATINTJSR PrNybble:PLATINT.PrNybbleTINTAND
13617 :CMP #10:BCC PrDigit:ADC #6TINT.Pr
26983 tTINTADC #ASC"0":JMP OSWRCHTINTTINT\ Print embedded stringTINT\ =====================TINT\ Mustn't use LPTR so can b
24931 lled from OSCLITINT.PrTextTINTPLA:
8257 TEXT+0:PLA:STA TEXT+1 :\ CTRL=>embedded stringTINTJSR PrString2:JMP (TEXT) :\
28265 t string and jump back to codeTINT:TINT.PrStringTINTSTX TEXT+0:STY TEXT+1 :\ CTRL=>string at YXTINT.PrStringLpTINTLDY #&
19514 DA (TEXT),Y :\ Get characterTINTBEQ PrStri
14898 JSR OSASCI :\ Print character if not &00TINT.PrString2TINTINC TEXT+0:BNE LFEA6:INC TEXT+1 :\ Increment
29284 essTINT.LFEA6TINTTAY:BNE PrStringLp :\ Loop back if not &00TINT.NullReturnTINTRTSTINTTINTTINT\ Standard Tube
29300 y pointsTINT\ ==========================TINT\ NB! All API entry points must be called in BINARY modeTINT\TINTOPT FNif(
20306 M%=0)TINTEQUS STRING$((&FF95-P%)AND255,CHR$255)TINTOPT FNendifTINT.LFF95 :JMP NullReturn
8224 :\ &FF95TINT.OSCOLD :JMP NullR
29301 n :\ &FF98TINT.PRSTRNG:JMP PrString :\ &FF9B Print zero-terminated text at YX, returns A=0, Y corr
25972 dTINT.LFF9E :JMP NullReturn :\ &FF9ETINT.SCANHEX:JMP ScanHex :\ &FFA1 Scan hex string at (&F8),
29797 urned in &F0/1TINT.DISKACC:JMP NullReturn :\ &FFA4TINT.DISKCCP:JMP NullReturn :\ &FFA7 Quit current p
29287 amTINT.PRHEX :JMP PrHex :\ &FFAA Print A in hex, A corruptedTINT.PR2HEX :JMP PrHexXY :\ &
17473 Print YX in hex, A corruptedTINT.USERINT:JMP NullReturn :\ &
12354 TINT.PRTEXT :JMP PrText :\ &FFB3 Print zero-terminated in
25966 text, returns A=0, Y corruptedTINT.VECDEF :EQUB &36:EQUW LFF00 :\ &FFB6TINT.OSQUIT :JMP CmdPrompt
23610 &FFB9 Enter supervisor *co
28257 d promptTINT.OSERROR:JMP NullReturn :\ &FFBCTINT.OSINIT :JMP InitError :\ &FFBF Initialise MOS
28530 r handler, A corruptedTINT.DISKRST:JMP NullReturn :\ &FFC2TINT.LFFC5 :JMP NullReturn :\ &FFC5TINT.NVRDCH
19786 P osRDCH :\ &FFC8TINT.NVWRCH :JMP osWRCH
8224 :\ &FFCBTINTTINT.OSFIND :JMP (FI
10582 :\ &FFCETINT.OSGBPB :JMP (GBPBV) :\ &FFD1TINT.OSB
8276 :JMP (BPutV) :\ &FFD4TINT.OSBGET :JMP (BGetV) :\ &FFD7TINT.OSARGS :
8272 (ARGSV) :\ &FFDATINT.OSFILE :JMP (FILEV) :\ &FFDDTINTTINT.OSRD
14880 JMP (RDCHV) :\ &FFE0TINT.OSASCI :CMP #&0D:BNE _OSWRCH :\ &FF
11786 OSNEWL :LDA #&0A:JSR OSWRCH :\ &FFE7TINT.OSWRCR
16708 #&0D :\ &FFECTINT._OSWRCHTINT.OSWRCH :JMP (WRCHV) :\ &
17733 TINT.OSWORD :JMP (WORDV) :\ &FFF1TINT.OSBYTE :JMP (BYTEV)
8224 :\ &FFF4TINT.OS_CLI :JMP (CLI
8224 :\ &FFF7TINTTINT.NMIV :EQUW NMI
25710 ler :\ &FFFA NMI VectorTINT.RESETV :EQUW RESET :\ &FFFC RESET VectorTINT.IRQV
21841 W IRQHandler :\ &FFFE IRQ VectorTINT]:ENDPROCTINT:TINT:TINTDEFPROCasmR
25928 aderTINTIF NOT SWROM%:ENDPROCTINT:TINTREM OS Entry AddressesTINTREM =================
21327 FIND=&
17731 :OSGBPB=&FFD1:OSBPUT=&FFD4:OSBGET=&FFD7TINTOSARGS=&FFDA:OSFILE=&FFDDTINT
17490 CH=&FFE0:OSASCI=&FFE3:OSNEWL=&FFE7:OSWRCH=&FFECTINTOSWRCH=&FFEE:OSWORD=&FFF1:OSBYT
17958 FF4:OS_CLI=&FFF7TINT:TINTREM Filing System valuesTINTREM =========
15677 =======TINTmyfs=9:chanlo=&80:chanhi=&9FTINT:TINTREM Memory address
26144 or filing systemTINTREM ==================================TINTERRBUF=&100:INPBUF=&100:INPEND=&180TINT:TINTREM &A0-&A7 and &
11568 &D5F is NMI space and must be claimed with S
12662 2 and released on Serv11TINTREM &B0-&BF is temporary filing system workspace (trashable between calls)TINTREM &C0-&C
29545 persistant filing system wo
28787 ace (persistant between calls)TINTPROG =&C0:REM &EE/F = PROG - Current programTINTNUM =&C2:REM &F0/1 =
19797 - hex accumulatorTINTMEMTOP =&C4:REM &F2/3 = MEMTOP - top of memoryTINTTRANS
9789 C6:REM &F4/5 = ADDR - Data
24946 nsfer address (assembler doesn't like 'INC ADDR')TINTTRANShi=&C8:REM &F6/7 = ADDR+2 - Data transfer address high wo
19466 PTR =&CA:REM &F8/9 = String pointer, OSWORD control blockTINTCTRL =&CC:REM &FA/B = CTRL - OSF
11333 OSGBPB control blockTINTCMD =&CE:REM CMD - Address of comman
26988 ne parametersTINTTEXT =&F6:RE
17958 A/B = TEXT - PrText string
26991 nterTINTIRQA =&FC:REM &FC = IRQ A storeTINTFAULT =&FD:REM &FD/E => last errorTINTESCFLG =&FF:REM &FF = Escape
26465 TINT:TINTREM I/O values for on-board 6850 serial portTINTREM ========================================TINTTxStatus=&F
14904 TxRDY=2:TxData=&FE09:TxInit=&13:RxInit=&55:R
9760 13=Reset ACIA, &55=8N1, clock/16, RTS highTINTRxStatus=&FE08:RxRDY=1:RxData=
12357 9:RxStop=&55:RxCont=&15:REM &55=RTS high, &15=RTS lowTINT:TINT[OPT opt%TINT
11565 --------TINT\ ROM HEADERTINT\ ----
11565 --TINTJMP Language:JMP ServiceTINTEQUB &82:EQUB
28783 yright-&8000TINTEQUB VAL LEFT$(ver$,3)TINTEQUS "HostFS:Serial":EQUB 0
21841 S ver$+date$TINT.CopyrightTINTBRK:EQUS "(C)J.G.Harston":BRKTINTTINT.LanguageTINT
8274 HostFSOn:JMP STARTUP2 :\ Enter with A=0TINTTINT\ ----------------TINT\ SERVICE ROUTINE
8284 ------
11565 ------TINT.ServiceTINTCMP #3:BEQ Serv3TINTCMP #4:B
21280 erv4TINTCMP #&09:BNE P%+5:JMP Serv9TINTCMP #&12:BNE P%+5:JMP Serv12TINTCMP #&25:BNE P%
19002 MP Serv25TINTRTSTINTTINT\ --------------------------------
11565 ---TINT\ SERVICE 3 - Boot filing system on B
27489 TINT\ ---------------------------------------TINT.Serv3TINTTYA:PHA:LDA #&7A:JSR OSBYTE :\ Get key pressedTINT
8280 #&FF:BEQ Serv3Select :\ Nothing pressedTINTCPX #&60:BEQ Serv3Select :\ TA
29250 eakTINTPLA:TAY:LDA #3:RTSTINT.Serv3SelectTINTLDA #
14904 JSR OSBYTE :\ Clear keypressed infoTINTJSR Sel
18036 S:JSR Serv9a :\ Select FS, print titleTINTJSR OSNEWL:PLA:\BNE Serv3Ok :\ No bootTINTTAY:LDX &28D:
8257 #&FF :\ A=&FF, X=Break Type, Y=0 to bootTINTJSR CallFSCV
8224 :\ Pass 'Booting' to
29811 TINTTYA:AND #3:BEQ Serv3Ok :\ Y=0, no Boot neededTINTTAY:LDA Serv3Boot-1,Y:TAX :\ XY=>Boot commandTINTLDY #Se
16947 oot DIV 256TINTJSR OS_CLITINT.Serv3OkTINTLDA #0:RTS :\ ClaimTINTTINT.Serv3BootTINTEQUB (Serv3Boot+3) AND 255TINTEQUB (
30322 3Boot+5) AND 255TINTEQUB (Serv3Boot+11) AND 255TINTEQUS "L.!BOOT":EQUB 13 :\ Opt 1 and 2TINTEQUS "E.!
21583 ":EQUB 13 :\ Opt 3
\ --------------------
\ SERVICE 4 - *Command
\ --
11565 --------------TINT.Serv4TINTTYA:PHA:DEY:LDX #&F
21294 erv4Lp
22606 :INY:LDA (&F2),YTINTCMP #ASC".":BEQ Serv4DotTINTCMP #ASC"!":BCC Serv4EndTINTCM
25939 rv25Table,X:BEQ Serv4Lp :\ M
26723 with Filing System commandTINTEOR #&20TINTCMP Serv25Table,X:BEQ Serv4LpTINT.Serv4QuitTINTPLA:TAY:LDA #4:RTSTINT.Serv4EndTINTLDA S
12918 5Table,XTINTCMP #32:BNE Serv4Quit :\ Check for end of commandTINTDEYTINT.Serv4DotTINTINY:LDA (&F2),YTINTCMP #32:BEQ Ser
28484 t :\ Skip spacesTINTAND #&DFTINTCMP #ASC"O":BNE
29285 v4FS :\ Not *HostFS Oxxx, select HostFSTINTINY:LDA (&F2),Y:AND #&DFTINTCMP #ASC"N
17730 Q HostFSOn :\ *HostFS ONTINTCMP #ASC"F":BEQ HostFSOff
23610 *HostFS OFF
.Serv4FS
JSR Se
29795 FS:PLA:LDA #0:RTSTINTTINT\ -----------------TINT\ SERVICE 9 - *HelpTINT\ -----------------TINT.Serv9TINTLDA (&F2),Y
20557 #13:BNE Serv9Exit :\ Not *Help<cr>TINTJSR OSNEWLTINT.Serv9aTINTLD
12323 TINT.Serv9LpTINTLDA &8009,X:BNE Se
17209 hk :\ Display ROM titleTINTLDA #ASC" ":BNE Serv9CharTINT.Serv9ChkTINTCMP #ASC" ":BEQ Serv9DoneTINT.Serv9CharTINTJSR OSWRCH:INX
17742 Serv9LpTINT.Serv9DoneTINTJSR OSNEWLTINT.Serv9ExitTINTLDA #9:RTSTINTTINT\ ------
11565 -------------------------------------TINT\ *
29811 FS ON|OFF command - connect as Tube clientTINT\ -----------------------------------------------TINT\ NB, *HostFS
25632 oesn't catch errors correctlyTINT\TINT.HostFSOffTINTPLA:LDA #0:RTS :\
30063 ld disconnectTINT.HostFSOnTINTPLATINT\LDX #0:\LDY #12:\LDA #10 :\ CLIV-RDCHVTINT\LDX #6:\LDY #21:\LDA #8 :\
29557 t WRCHVTINT LDX #6: LDY #21: LDA #10 :\ WRCHV-RDCHVTINT\LDX #8:\LDY #24:\L
8992 10 :\ Just RDCHVTINTJSR SetVectors :\ Set vectors
20805 Serv12Serial :\ Take over Serial systemTINT\BEQ Serv1
27749 ect :\ Select HOSTFSTINT\LDA &F4:\STA &190+252 :\ ROM to enter on B
23562 PHA:\JMP Serv4FSTINTTINT\ ----------------------------------TINT\ SERVICE &12 -
25964 ct filing systemTINT\ ----------------------------------TINT.Serv12TINTCPY Serv25Table+10:BNE Serv12QuitTINT.
30322 12SelectTINTLDA #6:JSR CallFSCV :\ New filing system taking overTINTLDX #10:LDY #27:LDA #24
8284 Set FILEV-FSCVTINTJSR SetVectors :\ Set vect
2675 LDA #143:LDX #15:JSR OSBYTE :\ Vectors changedTINT.Serv12Serial :\ We're taking over Serial systemTINT
8257 #156:LDX #RxInit:LDY #0:JSR OSBYTE :\ Disable ACIA IRQs, raise
2643 LDA #232:LDX #0:LDY #0:JSR OSBYTE :\ Mask out all ACIA IRQsTINT\ to do, infor
28520 stTINTLDA #0
14880 \ Claim callTINT.Serv12QuitTINTRTS
24899 llFSCVTINTJMP (FSCV)TINTTINT.SetVectorsTINTSTA &F0TINT.Se
25445 torLpTINTTYA:STA CLIV+0,X :\ Vect->ExVecTINTLDA #&FF:STA CLIV+1,XTINTLDA Vector
11312 X:STA &D9F,Y :\ ExVec->MyRoutineTINTLDA
29795 ors+1,X:STA &DA0,YTINTLDA &F4:STA &DA1,YTINTINY:INY:INY:INX:INXTINTCPX &F0:BNE SetVectorLpTINTRTSTINTTINT\ --------
11565 ---------------------------TINT\ SERVICE &25
17952 iling system informationTINT\ --------------
11565 ---------------------TINT.Serv25TINTLDX #0TINT.Ser
19509 pTINTLDA Serv25Table,XTINTSTA (&F2),Y:INY:INXTINTCPX #1
20034 E Serv25LpTINTLDA #&25:RTSTINT.Serv25TableTINTEQUS "HOSTFS "TINTE
8258 chanlo:EQUB chanhi:EQUB myfsTINTTINT\ ------------------TINT\ Filing system codeTINT\ -------
11565 -------TINT.SelectFSTINTLDY Serv25Table+10:LDX
2616 LDA #143:JMP OSBYTETINTTINT\ ----------------------
11565 --TINT\ I/O system routine addressesTINT\ -----
11565 -------------------TINT.VectorsTINT.IOVectorsTINTE
8279 osCLITINTEQUW osBYTE:EQUW osWORDTINTEQUW osWRCH:EQUW osRDCH_IOTINT\ Need some way of seein
26740 at Host has not actionedTINT\ a
18764 /BYTE/WORD and pass them on locally.TINT\ BYTE could use b6 of ret
25966 d Carry byte for A>&7FTINT\ This would mirror b6 of FSC reply indicating I/OTINTTINT\ -------------------------------TINT\
27753 ing system routine addressesTINT\ -------------------------------TINT.FS
29795 orsTINTEQUW osFILE:EQUW HostARGS:EQUW osBGETTINTEQUW osBPUT:EQUW osGBPB:EQUW HostFINDTINTEQUW HostFSCTINTTINT\ -
11565 -------------------------TINT\ Precheck OSAR
26144 or local infoTINT\ ------------------------------TINT\ Need to return filing system n
25954 r and address ofTINT\ command line parameters locally. Master FileSwitchTINT\ does this check itself, so these
8303 calls are neverTINT\ passed here.TINT\TINT.HostARGSTINTCPY #0:BNE TubeARGSTINTCMP #1:BCC HostARGS0TINTBEQ HostARGS1TINT.TubeARGSTINTJMP osA
2643 TINT\ OSARGS 0,0 - Return FS numberTINT\ -----------------------------TINT\
30068 rn fs=HostFSTINT.HostARGS0TINTLDA Serv25Table+10:RTSTINTTINT\ OSARGS 1,0 - Return command line addressTINT\ ----
11565 --------------------------------TINT.HostARG
19466 DA CMD+0:STA 0,XTINTLDA CMD+1:STA 1,XTINTLDA #&FF:S
12832 ,X:STA 3,XTINTLDA #&00:RTSTINTTINT\ ---------------------------TINT\ Prec
27491 OSFIND for CLOSE#0TINT\ ---------------------------TINT.HostFINDTINTCMP #0:BNE TubeFind :\ Not CL
2629 CPY #0:BNE TubeFind :\ Not CLOSE#0TINTTXA:PHA:LDA #&77:JSR OSBYTE :\ Close
25976 c and Spool filesTINTPLA:TAX:LDA #0:TAY :\ Restore for CLOS
2608 .TubeFindTINTJMP osFINDTINTTINT\ -------
11565 -----TINT\ Precheck for FSCTINT\ --------------
23562 Need to find parameters on *commands to
30068 rnTINT\ later with OSARGS 1,0. Master FileSwitch doesTINT\ this itself, client does this within FSC.TINT.H
18036 SCTINTCMP #6:BEQ HostFSC6TINTCMP #7:BEQ HostFSC7TINTCMP #8:BEQ HostFSCQuitTINTJMP osFSCTINT.HostFSC6TINT\LDA #&77:\JSR OSBYTE
14880 \ Close Exec/SpoolTINTLDA #156:
8280 #&56:LDY #0:JSR OSBYTE :\ Release the Serial systemTINTLDA #232:LD
12835 55:LDY #0:JSR OSBYTE :\ Pas
17217 IA IRQs back to MOSTINT.HostFSC
17484 X Serv
24916 ble+8 :\ Lowest handleTINTLDY Serv25Table+
8224 :\ Highest handleTINT.H
18036 SCQuitTINTRTSTINTTINT\ -----------------------------TINT\ Generate a sideways ROM errorTINT\ -----------------------------TINT.Er
2674 PLA:STA FAULT+0:PLA:STA FAULT+1TINTLDY #0:STY ERRBUFTINTINY:LDA (FAULT),Y:STA ERRBUF,YTINT.ErrorLpTINTINY:LDA (FAULT),Y
16724 ERRBUF,YTINTBNE ErrorLp:JMP ERRBUFTINTTINT\ ----------TINT\ Debug codeTINT\ ----------TINT.PrSta
23562 PHP:\PHA:\TXA:\PHA:\TSXTINT\LDA &106,X:\JSR PrHexTINT\LDA &107,X:\JSR PrHexTINT\LDA &108,X:\JSR PrHexTINT\LDA &109,
19036 SR PrHexTINT\LDA &10A,X:\JSR PrHexTINT\LDA &10B,X:\JSR PrHex
17484 A &10C,X:\JSR PrHexTINT\LDA &10D,X:\JSR PrHexTINT\LDA &10E,X:\JSR PrHexTINT\LDA &10F,X:\JSR PrHex
19536 A:\TAX:\PLA:\PLP:\RTSTINTTINT]TINTIF (opt%AND3):IF (Serv3Boot AND 255)>&F4:PRINT"WARNING: Serv3Bo
28448 verlaps"
ENDPROC