start ldx #int STX $f3c8 lda #3 sta line lda #%00010101 lda #%10010101 sta line polled tx int rx lda #suspec suspend character sta suspend ldx #startq stx inp stx outp set up line que clr count clr fcs lda #xon sta lastf clr monito clr tmode clr pnum clr pdlen clr ptype clr size clr chksum clr fld clr rstat clr ebqmod clr datind clr chebo clr kerchr clr delay lda #dmaxtr sta maxtry lda #debq sta rebq sta sebq lda #dpadln sta rpad sta spad lda #dpadch sta rpadch sta spadch lda #deol sta reol sta seol lda #dpakln sta rpsiz sta spsiz lda #dtime sta rtime sta stime lda #dquote sta rquote sta squote cli jmp main FCB $74,$35,$7A,$29,$6C,$8B,$77,$32,$68,$8C,$79,$36,$70,$30,$71,$8D main equ * main loop and despatcher ldy #$3000 sty point ldx #prompt jsr pstr issue welcome prompt ldx #menu1 jsr pstr find out what user wants to do lda cons+1 lda cons+1 clean i/f jsr cinput jsr coutch echo reply cmpa #'0 lbeq term term emulation to line cmpa #'2 lbeq send file transfer (kermit) cmpa #'1 lbeq flexex return to flex cmpa #'3 lbeq receve receive a file (kermit) cmpa #'4 lbeq close cmpa #'5 beq monon cmpa #'6 beq monoff bra main monon sta monito mmsg ldx #mdone jsr pstr bra main monoff clr monito bra mmsg ************************************************* *terminal emulation****************************** term equ * ldx #escstr tell user how tp break out jsr pstr terml jsr cinchk any console i/p beq lhand no bit b #$10 test for bne berr yes jsr cinput read data cmpa suspend lbeq main exit at user request sendl jsr loutch send it to line bra lhand berr lda cons+1 set line i/f to space sei lda #%11110101 sta line ldx #$ffff wait dex INX DEX bne wait lda #%10110101 restore i/f sta line cli lhand equ * jsr coutck ok to tx? beq terml no tst count que empty? beq terml yes jsr unque jsr coutch send it bra terml ************************************ flexex lda #$03 return to flex sta line reset i/f causing ints jmp $cd03 and warmstart to flex ********************************* ************************************ *line handler and other subrs. qures equ * sei pshs x ldx #startq stx inp stx outp clr count puls x cli rts cinchk equ * pshs a see if data from console ldb cons bitb #1 puls a,pc cinput bsr cinchk beq cinput no rxd lda cons+1 anda #$7f rts loutck pshs a see if line ok to tx lda line bit a #2 puls a,pc telppc equ * loutch bsr loutck beq loutch o/p to line sta line+1 rts pstr lda #$0d jsr couts lda #$0a jsr couts pstrs lda 0,x+ send string to console cmpa #eom beq pstre end of message jsr couts send char bra pstrs pstre rts getplc equ * ldy #$ffff abort i/p timeout timer getplt cmpy #$0000 *beq toexit timeout occured leay -1,y keep timing tst count bne unque got data jsr cinchk beq getplt no console rx jsr cinput get data cmpa suspend bne getplt not abort toexit leas 2,s equiv to an rts jmp rpkfls handle console abort back in kermit unque equ * count must be checked as non 0 before entry sei pshs b,x ldx outp lda 0,x+ read char from line buffer cmpx #end bne un1 ldx #startq un1 stx outp dec count ldb count cli cmpb #xlo bne unx ldb #xon send xon if reqd cmpb lastf last code sent? beq unx was an xon ! stb lastf stb fcs set up for tx of an xon ldb #%10110101 stb line set tx int on unx puls b,x,pc couts jsr coutck beq couts bra coutch coutch equ * sta cons+1 send data to console cexit rts coutcr jsr coutck beq coutcr bsr coutch o/p data cmpa #cr bne cexit pshs a lda #lf if cr then crlf coutlf jsr coutck beq coutlf jsr coutch puls a get back cr ! rts coutck equ * see if can send to console pshs a lda cons bita #2 puls a,pc