19781  > Mini65/srcTINTREM Source for Tiny 6502 Single-port Tube ClientTINTREM ===========
15677 =============================TINTREM This code may be freely
30053 sed, with acknowledgementsTINT:TINTREM Tiny 6502 Tube Client in 512 bytes.TINTREM Implements OSWRCH and OSRDCH via a si
25964  polled I/O port.TINTREM Optimised ACIA option selection.TINT:TINT:TINTREM BoilerplateTINTREM ===========TINTIF HIMEM
17990 FF:SYS "OS_GetEnv"TOA$:IFLEFT$(A$,
15932 "B6502":OSCLI"B6502"+MID$(A$,INSTR(A$
 8736 ))TINTIF HIMEM>&FFFF:A$=MID$(A$,I
21076 (A$,"-")+6) ELSE A$=$&600TINTON ERROR REPORT:PRINT" at line ";ERL:ENDTINTDEFFNif(A%):
 9537 :z%=-1:=opt% ELSE z%=P%:=opt%TINTDEFFNendif:IFz%=-1:=opt% ELSE z%=P%-
20538 %=P%-z%:O%=O%-z%:=opt%TINTDEFFNelse:
 9594 =-1:z%=P%:=opt% ELSE z%=P%-z%:P%=P%-z%:O%=O%-z%:z%=-1:=opt%TINT:TINTREM 
25965  and version, default valuesTINTREM ================================TINTver$="0.20":date$=" (11 Nov
12592 6)" file$="Mini65":title$="Tiny 6502" PORT=&FD
16698 CIA=6850        :REM I/O portTINTMEMBOT%=&800:M
20308 P%=&8000  :REM RAMTINTMAIN=&C000:load%=&FE00      :REM CodeTINTRDLINE%=TRUE:REM
28781 lement OSWORD 0TINTDIM mcode% &3FF, L% &40TINT:TINTREM Parse any command lineTINT
 8269 ======================TINTA%=INSTR(A$," "):IF A%:A$=MID$(A$,A%+1) EL
16672 $=""TINTA%=INSTR(A$+" "," "):IF A$<>"":file$  =LEFT$(A$,A%-1):A$=MID
 9281 ,A%+1)TINTA%=INSTR(A$+" "," "):IF A$<>"
28524 ad%  =EVAL("&"+LEFT$(A$,A%-1)):A$=MID$(A$,A%+1)TINTA%=INS
16680 $+" "," "):IF A$<>"":MEMTOP%=EVAL("&"+LEFT$(A$,A%-1)):A$=MID$(A$,A%+1)TINTA%=INST
 9281 +" "," "):IF A$<>"":MAIN   =EVAL("&"
17989 T$(A$,A%-1)):A$=MID$(A$,A%+1)TINTA%=INSTR(A$+" "," "):IF A$<>"":PORT   =EVA
 9762 "+LEFT$(A$,A%-1)):A$=MID$(A$,A%+1) A
20041 STR(A$+" "," "):IF A$<>"":ACIA   =VAL(LEFT$(A$,A%-1)):A$=
 9284 (A$,A%+1)TINTPRINT"Building ";file$TINTPRINT;ACIA;" ACIA at &";~PORTTINTPRINT"
21581 OP: ";~MEMTOP% PRINT"CODE:   ";~MAIN PRINT"CLIENT: ";~load% : REM
29561 tem vectorsTINTREM ==============TINTUSERV=&200:BRKV =&202:IRQ1V=&204:IRQ2V=&206:CLIV
12838 08:BYTEV=&20ATINTWORDV=&20C:WRCHV=&20E:RDCHV=&210:FILEV=&212
18258 SV=&214:BGetV=&216TINTBPutV=&218:GBPBV=&21A:FINDV=&21C:FSCV =&21
22085 NTV=&220TINTLPTR=&F8:TEXT=&FA:IRQA=&FC:FAULT=&FD:ESCFLG=&
14858 TINTREM I/O values, these are suitable for a 6850TINTREM ===============
15677 ======================TINTIF ACIA=6850:TxStatus=PORT+0:TxRDY
21562 xData=PORT+1:RxControl=PORT+0:RxStop=&55TINTIF AC
13885 850:RxStatus=PORT+0:RxRDY=1:RxData=PORT+1:TxControl=PORT+0:Rx
29806 =&15TINTIF ACIA=6850:TxReset=0:RxInit=&13:TxInit=&55:TxDelay=0:REM &55=8N1, clock/16TINT:TINTREM I/O values, these s
27765 d be suitable for BenEater SBC 6551TINTREM ==========================================================TINTIF ACIA=
12597 :TxStatus=PORT+1:TxRDY=-64:TxData=PORT+0:RxContro
20304 RT+2:RxStop=&02TINTIF ACIA=6551:RxStatus=PORT+1:RxRDY=+08:Rx
24948 =PORT+0:TxControl=PORT+3:RxCont=&0BTINTIF ACIA=6551:TxReset=PORT+1:RxInit=&02:TxInit=&1E:TxDelay
13104 :REM TxDelay 9600 at 1MHzTINTIF ACIA=6551:title$=
28261 Eater" : REM Serial Tube system values REM ===================
15677 ==TINTpfx=&9BTINT:TINT:TINTFOR P=0 TO 1:opt%=P*3+4TINTP%=load%:O%=mcode%
20559 T opt%TINT.LF800TINTJMP RESETTINT.PrBannerTINTJSR PrTextTINT.BANNERTINTEQUB 13:EQUS title$:EQUS " ":EQUS 
 9330 TINTEQUB 13:EQUB 0TINTRTSTINT:TINT\ Tube Client Startup CodeTINT\ ========================TINT.RESETTINTSEI:LDX #&35  
 8224          :\ Disable interupt
21038 ESETlp
16708  LFF00,X:STA &0200,X    :\ Copy default vectorsTINTDEX:BPL RESETlp:TXS     
14880 \ Clear stackTINTINX:STX ESCFLG
 8224          :\ Clear Escape fla
 2618 \ Init
26988 se I/O portTINTOPT FNif(TxReset)TINT  STX TxResetTINTOPT FNendifTINTLDX #RxInit:STX RxControlTINTLDX #TxInit
22612  TxControlTINT:TINTCLI:JSR PrBanner:JSR OSNEWLTINTCLC:LDA #&01:JMP OSQUIT    :\ Enter ma
28704 rogramTINT:TINT.osBYTETINTCMP #&7E:BNE osBYTE1       :\ Ack. EscapeTINTSTA ESCFLG:RTSTINT.osBYTE1TINTCMP #&83:BCC osBYTEexit
20557  #&85:BCS osBYTEexitTINTLDX #0:LDY #MEMBOT% DIV 256TINTROR A:BCS osBY
27503 TINTLDY #MEMTOP% DIV 256TINT.osBYTEokTINTROL ATINT.osBYTEexitTINTRTSTINT:TINTOPT FNif(
18764 NE%)         :\ Perform RDLINE locallyTINT.osWORDTINTSTX LPTR+0:STY LP
12587      :\ LPTR=>control blockTINTTAY:BNE Word00Exit        :\ OSWORD 0, jump to rea
26988 neTINTLDA (LPTR),Y:TAX:INYTINTLDA 
21584 R),Y:STA LPTR+1TINTSTX LPTR+0:DEY            :\ (LPTR)=>string buffer, Y=0TINT
29295 d00Lp1TINTJSR OSRDCH:BCS Word00Exit :\ Wait for characterTINTCMP #&7F:BNE Word00Char   :\
29807  DeleteTINT.Word00DeleteTINTTYA:BEQ Word00Lp1         :\ Nothing to deleteTINTLDA #
14918 JSR OSWRCH       :\ VDU 127TINT.Word00BackTINTDEY:JMP Wor
19504 p1         :\ Dec. counter, loop backTINT.Word0
24936 rTINTCMP #&08:BEQ Word00Delete :\ BS is also DeleteTINTCMP #&15:BNE W
12388 0Ins    :\ Not Ctrl-UTINTTYA:BEQ Word00Lp1         :\ Nothing to deleteTINTLDA #&7FTINT.Word00Lp2TINTJSR OSWRCH:DEY       
 8224  :\ Delete charactersTINTBNE Wo
12336 Lp2TINTBEQ Word00Lp1             :\ Jump back to startTINT.Word00InsTINTSTA (LPTR),Y              :\ Stor
26723 aracterTINTCMP #&0D:CLC:BEQ Wor
25392 r :\ Return - finishTINTCMP #&20:BCC Word00ctrl
14880 \ Control characterTINTINY:BEQ 
25714 00Back        :\ Too long, dec and go backTINT.Word00ctrlTINTJSR OSWRCH                :\ Print characterTINT.Word00
 2680 JMP Word00Lp1             :\ Loop for moreTINT.Word00crTINTJSR OSNEWL:CLC            :\ Return with
11331  Y=lengthTINT.Word00ExitTINTRTSTINTOPT FNendifTINT:TINT\ Default error handler
15648 ====================TINT.ErrorHandlerTINTJSR OSNEWLTINTLDX FAULT+0:LDY FAULT+1TINTINX:BNE P%+3:INY  
 8224      :\ XY=>error stringTINTJSR
21330 TRNG                :\ Print error stringTINT.HALTTINTBEQ HALT                   :
29779 op with EQ from PRSTRINGTINT:TINT\
29806 errupt handlersTINT\ ==================TINT.IRQHandlerTINTSTA IRQA:PLA:PHA    
 8224    :\ Save A, get flags from
24948 ckTINTAND #&10:BNE BRKHandler    :\ If BRK, jump to BRK handlerTINTJMP (IRQ1V)                :\ Continue via IRQ1V h
27748 erTINT.IRQ1HandlerTINTJMP (IRQ2V)                :\ Pass on to IRQ2VTINT.BRKHandlerTINTTXA:PHA                    :\ S
 8293 XTINTTSX:LDA &0103,X:CLD        :\ Get address from stackTINTSEC:SBC #&01:STA FAULT+0TINTLDA &0104,XTINTSBC #&00:STA FAULT+1  
 8224  :\ &FD/E=>after BRK opcodeTINT
14913 TAX:LDA IRQA           :\ Restore X, get saved ATINTCLI:JMP (BRKV)         
 8224 :\ Restore IRQs, jump to Err
18464 andlerTINT.IRQ2HandlerTINTLDA IRQA                   :\ Restore ATINT.NMIHandlerTINTRTI                        :\ Return f
 8301 interuptTINT:TINT\ OSRDCH - Wait for character from input streamTINT\ =============================================TINT
28239  exit, A =char, Cy=Escape fl
11786 osRDCHTINTJSR WaitData:BNE osRDCH2   :\ Wait for characterTINTJSR WaitData               :\ Wait for pref
25701  characterTINT.osRDCH2TINTCMP #27:BEQ osRDCH3        :\ Exit with CS if EscapeTINTCLC                        :\ CC if not Esc
 2661 .osRDCH3TINTRTSTINT:TINT\ OSWRCH - Send character to output streamTINT\ ========================================TINT\ On en
11385  A =characterTINT.osWRCH                    :\ WRCH is simply SendByteTINT.SendByteTINTJSR SendData               :\ Se
25120 yteTINTCMP #pfx:BNE SendByteDone  :\ If not prefix, doneTINT\                          :\ Fall through
 8303 send againTINT:TINT:TINT\ *** LOW-LEVEL I/O CODE ***TINT\ ==========================TINT:TINT\ Send a raw byte of dataTINT\ ---------
11565 ----------TINT.SendDataTINTPHATINTOPT FNif(TxDelay
 8224 LDA #T
27749 ay:SEC         :\ 6551-style TxRDY bugfixTINT  .SendWaitDelayTINT  SBC
14897 BNE SendWaitDelayTINTOPT FNendifTINTO
17952 Nif(TxRDY)TINT  .SendWaitTINT  LDA TxStatus             :\ Get StatusTINTOPT FNendifTINTOPT 
26217 (TxRDY>0)TINT  AND #TxRDY AND 255TINT  BEQ SendWait             :\ Wait until da
25376 an be sentTINTOPT FNendifTINTOPT FNif(TxRDY<0)TINT  AND #-TxRDY AND 255TINT  BNE SendWait             :\ 
29801  until data can be sentTINTOPT FNendifTINTPLA:STA TxData             :\ Send dataTINT.SendByteDoneTINTRTS
23562  Wait for raw dataTINT\ -----------------TINT\ On exit, EQ=p
26982 xTINT.WaitLoopTINTOPT FNif(RxControl)TINT  LDA #RxCont:STA RxControl:\ Allow other end to sendTINTOPT FNendif
24919 itDataTINTLDA RxStatus:AND #RxRDYTINTBEQ WaitLoo
 8224             :\ Wait for data
21584  FNif(RxControl)TINT  LDA #RxStop:STA RxControl:\ Stop other endTINTOPT FNendifTINT.
29801 FetchTINTLDA RxData:CMP #pfx:RTS    :\ EQ=prefixTINT:TINT:TINT\ Text I/O routinesTINT\ -----------------TINT.Pr
29816 TINTPLA:STA TEXT+0:PLA:STA TEXT+1 :\ TEXT=>embedded stringTINTJSR PrString2:JMP (TEXT)      :\ Print st
26478  and jump back to codeTINT:TINT.PrStringTINTSTX TEXT+0:STY TEXT+1         :\ TEXT=>string at YXTINT.PrStringLpTINTLD
 9763 00:LDA (TEXT),Y         :\ G
25376 haracterTINTBEQ PrString2:JSR OSASCI      :\ Print character if not &00TINT.PrString2TINTINC TEXT+0:BNE LFEA6:INC TEXT+1 
18720 ncrement addressTINT.LFEA6TINTTAY:BNE PrStringLp         :\ Loop back if not &00TINT:TINT.ScanHexTINT.I
17780 rrorTINT.UnsupportedTINT.NullReturnTINTRTSTINT:TINTOPT FNif(P%<&FF45)TINT.PrHexXYTINTTYA:JSR PrHex:TXATINT.PrHexTINTPHA:LSR A:LS
14913 LSR A:LSR ATINTJSR PrNybble:PLA
17486  #15TINT.PrNybbleTINTPHP:SED:CLC:ADC #&90:ADC #&40TINTPLP:JMP OSWRCHTINTO
17952 NendifTINT:TINT:TINT\ DEFAULT VECTOR TABLETINT\ ====================TINTOPT FNif(P%<&FF00)TINTEQUS
21076 ING$((&FF00-P%)AND255,CHR$255)TINTOPT FNendifTINT.LFF00TINTEQUW NullReturn      :\ &200 
21333 ERVTINTEQUW ErrorHandler    :\ 
12848  - BRKVTINTEQUW IRQ1Handler     :\ &204 - IRQ1VTINTE
 8279 IRQ2Handler     :\ &206 - IRQ2VTINTEQUW NullReturn      :\ &208 - CLIVTINTEQUW osBYTE  
 8224     :\ &20A - BYTEVTINTOPT FNif
19524 INE%)TINTEQUW osWORD          :\ &20C - WORDVTINTOPT FNelseTINTEQUW NullReturn      :\ 
17200  - WORDVTINTOPT FNendifTINTEQUW osWRCH          :\ &
 8261 - WRCHVTINTEQUW osRDCH          :\ &210 - RDCHV
21841 W NullReturn      :\ &212 - FILEVTINTEQUW NullReturn      :\ &214 - 
21319 VTINTEQUW NullReturn      :\ &216 - BGetVTINTEQUW NullReturn      :\ &218 - BPutVTINTEQ
20000 ullReturn      :\ &21A - GBPBVTINTEQUW NullReturn      :\ &21C - FINDVTINTEQUW Unsupporte
 8224   :\ &21E - FSCVTINTEQUW NullRe
28274       :\ &220 - EVNTVTINTEQUW Unsupported     :\ &222 - UPTVTINTEQUW Unsupported     :\ &224 - NETVTINTEQUW Unsupported   
23610  &226 - VduVTINTEQUW Unsupporte
 8224   :\ &228 - KEYVTINTEQUW Unsupp
25972 d     :\ &22A - INSVTINTEQUW Unsupported     :\ &22C - RemVTINTEQUW Unsupported     :\ &22E - CNPVTINTEQUW NullReturn  
 8224 :\ &230 - IND1VTINTEQUW NullRet
 8302      :\ &232 - IND2VTINTEQUW NullReturn      :\ &234 - IND3VTINT:TINT:TINT\ Standard Tube entry pointsTINT\ =================
15677 =====TINTEQUS STRING$((&FF95-P%)AND255,CHR$255)TINT.LFF95   :JM
30030 llReturn       :\ &FF95TINT.OSC
 8260  :JMP RESET            :\ &FF98TINT.PRSTRNG :JMP PrString         :\ &FF9B 
26994 nt ASCIIZ at YX, returns A=0, Y corruptedTINT.LFF9E   :JMP NullReturn       :\ 
14662 ETINT.SCANHEX :JMP NullReturn       :\ &FFA1TINT.DISKACC :JMP NullReturn
 8224    :\ &FFA4TINT.DISKCCP :JMP Nu
25938 turn       :\ &FFA7TINTOPT FNif(PrHexXY<&FF45)TINT.PRHEX   :JMP PrHex            :\ &FFAA  Print A in hex, A c
30066 ptedTINT.PR2HEX  :JMP PrHexXY          :\ &FFAD  Print YX in hex, A corruptedTINTOPT FNelseTINT.PRHEX   :JMP NullReturn
21072 2HEX  :JMP NullReturnTINTOPT FNendifTINT.USERINT
19786 P NullReturn       :\ &FFB0TINT.PRTEXT  :JMP PrText      
 8224  :\ &FFB3  Print ASCIIZ inli
29728 ext, returns A=0, Y corruptedTINT.VECDEF  :EQUB &36:EQUW LFF00  :\ &FFB6  Default vector tableTINT.OSQU
 8224 :JMP MAIN             :\ &FFB9  Quit current programTINT.OSERROR :JMP NullReturn   
 8224 :\ &FFBCTINT.OSINIT  :JMP InitE
29295         :\ &FFBF  Initialise MOS error handler, A corruptedTINT.DISKRST :JMP NullReturn       :\ &FFC2TINT.LFFC5   :
 8272 NullReturn       :\ &FFC5TINT.NVRDCH  :JMP osRDCH           :\ &FFC8TINT.NVWRCH
19002 MP osWRCH           :\ &FFCB
11786 OSFIND  :JMP (FINDV)          :\ &FFCETINT.OSGBPB  :JMP (
16976 V)          :\ &FFD1TINT.OSBPUT  :JMP (BPutV)          :\ &FFD4TINT.
18242 ET  :JMP (BGetV)          :\ &FFD7TINT.OSARGS  :JMP (ARGSV)          :\ &FFDATINT.OSF
 8261  :JMP (FILEV)          :\ &FFDDTINT:TINT.OSRDCH  :JMP (RDCHV)          :\ &FFE
20270 SASCI 
19779 P #&0D:BNE OSWRCH  :\ &FFE3TINT.OSNEWL  :LDA #&0A:JSR OSW
 8264  :\ &FFE7TINT.OSWRCR  :LDA #&0D             :\ &FFECTINT.OSWRCH  :JMP
21079 CHV)          :\ &FFEETINT.OSWORD  :JMP
20311 RDV)          :\ &FFF1TINT.OSBYTE  :JMP
22850 TEV)          :\ &FFF4TINT.OS_CLI  :JMP
19523 IV)           :\ &FFF7TINT:TINT.NMIV    :E
 8279 NMIHandler      :\ &FFFA  NMI VectorTINT.RESETV  :EQUW RESET           :\ &FFFC  RES
22048 ectorTINT.IRQV    :EQUW IRQHandler      :\ &FFFE  IRQ VectorTINT]:IF O%>L%:PRINT"ERROR
28483 de overrun":END NEXT:PRINT "
26998 ng ";file$; OSCLI "Save "+file$+" "+STR$~mcode%+" "+STR$~O%+" "+STR$~load%+" "+STR$~load% PRI