;*************************** ;** ** ;** TERM 1 ** ;** ** ;*************************** ; ; ; COMsel LdaIM &FF Sta TArrow Jsr Flushr LdxIM 6 LdaIM &FF Selini StaAX TPagen Dex Bpl Selini ; LDAIM 0 Sta TZP0 Beq Selget Selbee LdaIM 7 Jsr OSWRCH Selget Lda TZP0 Pha Jsr StrM00 = "Page " NOP Jsr Disp03 Pla Sta TZP0 Jsr TestCh Bcs GoEscA Beq Selget CmpIM 13 Beq Seldon CmpIM &7F Bne Selnot Dec TZP0 Bpl Seldel ; At start of line Inc TZP0 Jmp Selget Seldel Ldx TZP0 LdaIM &FF StaAX TPagen ; Wipe char just erased Jmp Selget Selnot Ldx TZP0 CpxIM 7 Beq Selbee Jsr Vet Beq Selbee Ldx TZP0 StaAX TPagen Inx Stx TZP0 Jmp Selget Seldon LdaIM &85 Sta TCTRLB+0 Jsr SendCT LdxIM 7 Sel1 LdaAX TPagen StaAX TMaste Dex Bpl Sel1 ; Jsr Disp04 *** Tim *** Don't change page number Jmp WaitMe ; GoEscA Jmp EscAck ; Vet CmpIM "#" Bne VetNum LdaIM &FF rts ; Wildcard VetNum Sec SbcIM "0" Bmi Vetfai CmpIM 10 Bcs Vethex ; Effective subtract of CMP clears ZERO flag rts ; 0-9 Vethex SbcIM "A"-"0" Bmi Vetfai CmpIM 6 Bcs Vetlow AdcIM 10 ; A-F rts ; Non-zero Vetlow SbcIM "a"-"A" CmpIM 6 Bcs Vetfai AdcIM 10 ; a-f rts ; Non-zero Vetfai LdaIM 0 ; SET ZERO FLAG rts ; invali LdaIM 7 Jsr OSWRCH Jmp Execdo zrancz Jmp Linked gotoOS Jmp OScom Cancel Jmp Space ExecCo CmpIM " " Beq Cancel CmpIM "*" Beq gotoOS Sec SbcIM "0" Bmi invali CmpIM "9"-"0"+1 Bcc zrancz SbcIM "A"-"0" Bmi invali CmpIM "X"-"A"+1 Bcc invali ; Change X to Z+1 and divert to *Commands? SBCIM "a"-"A" Bmi invali CmpIM "x"-"a"+1 Bcc invali ; Alphaletter SbcIM &87-"a" CmpIM ( &A4 - &87 + 1 ) Bcs invali AslA Tax LdaAX comtab Sta TZP0 LdaAX comtab+1 Sta TZP1 JmI TZP0 ; comtab & Wherea ; COPY & PrevLi ; <- & NextLi ; -> & DownCh ; DOWN & Branch ; UP & invali & invali & invali & invali & Sele01 ; F0 & Explic ; F1 & Reveal ; F2 & KeepPa ; F3 & zelchz ; F4 & OScom ; F5 & zoadpz ; F6 & SavePa ; F7 & zoldz ; F8 & FSexit ; F9 & invali ; Shift F0 & Initia ; F1 & Concea ; F2 & Releas ; F3 & Tune ; F4 & invali ; F5 & invali ; F6 & invali ; F7 & invali ; F8 & TSexit ; F9 & invali ; Stopper ; Wherea Jsr StrMes = "Page: " NOP LdyIM 0 zherez LdaAY TPhysp Jsr OSWRCH Iny CpyIM 7 Bne zherez Jmp Execdo PrevLi Lda TArrow BMI Notlef Bne Decarr Notlef Jsr StrMes = "Cannot go left" NOP Jmp Execdo Decarr Sec SbcIM 1 Sta TArrow JMP Link00 NextLi Lda TArrow CmpIM 24 Bcc Incarr Jsr StrMes = "Cannot go right" NOP Jmp Execdo Incarr CLC ADCIM 1 Sta TArrow JMP Link00 DownCh LdaIM &9E Sta TCTRLB+0 Jsr SendCT ; Make CB 'select' Current CB LdaIM 1 Sta TArrow Jmp Link00 Branch LdaIM &9F Sta TCTRLB+0 Jsr SendCT Lda TCTRLB+1 ; Beq BraSta LDA TArrow BPL BraSta Jsr StrMes = "Cannot go up" NOP Jmp Execdo BraSta LdaIM &FF Sta TArrow ; not select. Jsr pwait Jmp Execdo ; Releas LdaIM &9D Sta TCTRLB+0 Jsr SendCT Lda TCTRLB+1 Bne RelAno Jsr StrMes = "Page released" NOP Jmp Execdo RelAno Jsr StrMes = "Page was not kept" NOP Jmp Execdo KeepPa LdaIM &9C Sta TCTRLB+0 Jsr SendCT Lda TCTRLB+1 Bne Notkep Jsr StrMes = "Page kept" NOP Jmp Execdo Notkep Jsr StrMes = "Buffers full - Please release a page" NOP Jmp Execdo ; Link00 LdyIM 13 LdxIM 0 LdaIM 138 Jsr OSBYTE Lda TArrow Linked Sta TArrow Clc AdcIM "0" Jsr linkh Jmp Execdo ; Sele01 Jmp COMsel Expl1 LdaAX TMaste StaAX TPagen Dex Bpl Expl1 LdaIM &85 Sta TCTRLB+0 Jsr SendCT RTS Explic LdaIM &FF Sta TArrow LdxIM 6 JSR Expl1 WaitMe Jsr pwait Jmp Execdo zelchz Jsr StrMes = "Channel " NOP SelCh1 Jsr OSRDCH Bcs GoAckE CmpIM &7F Bne SelCh5 LdaIM " " SelCh5 Jsr OSWRCH Jsr Vet Bne SelCh2 BelCh LdaIM 8 Jsr OSWRCH LdaIM 7 SelChd Jsr OSWRCH Jmp SelCh1 SelCh2 Sec SbcIM 1 CmpIM 4 Bcs BelCh Sta TCTRLB+1 LdaIM &8B Sta TCTRLB+0 SelCh3 Jsr OSRDCH Bcs GoAckE CmpIM &7F Beq SelChd CmpIM 13 Beq SelCh4 LdaIM 7 Jsr OSWRCH Jmp SelCh3 SelCh4 ; Jsr SendCT Jsr Flushr Jsr InitPa Jmp Execdo ; GoAckE ; Jsr zursor (DONE BY SPACE) Jmp EscAck ; zoadpz Jsr StrMes = "Load file " NOP Jsr ReadLi LdaIM &FF Bmi Pageop SavePa Jsr StrMes = "Save file " NOP Jsr ReadLi LdaIM 0 Pageop Pha Jsr CanHea Jsr OldF01 LdxIM :LSB: (TLineB+1) STX TCTRLB LDXIM :MSB: (TLineB+1) Stx TCTRLB+1 LdaIM 0 LdxIM 0 Page1 StaAX TCTRLB+2 Inx CpxIM &10 Bne Page1 LdxIM &78 Stx TCTRLB+3 ; Load addr Stx TCTRLB+7 ; Exec addr Stx TCTRLB+&B ; Start addr LdxIM 66 ; &C1 Stx TCTRLB+&E LdxIM &7C ; B Stx TCTRLB+&F Pla ; Load/Save code ; BPL GODAWFULBODGE ; LDX TOldFS ;CpxIM 4 ;Bne GODAWFULBODGE ; LDXIM 0 ;WAS 11 FOR ONE FS... ; STX TCTRLB+2 ; ONLY IF DISK SYSTEM??? ;.GODAWFULBODGE LdxIM :LSB: TCTRLB LdyIM :MSB: TCTRLB Jsr OSFILE Jsr zzspla Jsr TeleSe Jsr zursor Jsr StrM00 = 30 = " " ; 40 Spaces = 30 NOP ; Print file name in top left corner. LdxIM 0 Toplef LdaAX TLineB+1 Jsr OSWRCH Inx CmpIM 13 Bne Toplef Jsr Expl1 ; Re-request page explicitly Jmp zoldz ; ; ; ; ; ; ; ;\ ReadLi Jsr ResetS LdaIM 38 Sta TCTRLB+2 LdaIM :LSB: (TLineB+1) STA TCTRLB+0 LDAIM :MSB: (TLineB+1) Sta TCTRLB+1 LdaIM " " Sta TCTRLB+3 LdaIM &7F Sta TCTRLB+4 LdxIM :LSB: TCTRLB LdyIM :MSB: TCTRLB LdaIM 0 Jsr OSWORD Bcc NoGoAc Pla Pla Jmp GoAckE NoGoAc rts OScom Jsr CanHea Jsr StrMes = "*" NOP Jsr ReadLi LdaIM &A4 Sta TCTRLB+0 Jsr SendCT Jsr OldF01 LdxIM :LSB: (TLineB+1) LDYIM :MSB: (TLineB+1) Jsr OSCLI Jsr GetOld Jsr TeleSe LdaIM &A5 Sta TCTRLB+0 Jsr SendCT Jsr Init00 Jmp zoldz ; ; ; ; ; ; ; ; Initia Jsr InitPa Jmp Execdo Tune LdaIM :LSB: Tunebu Sta TZP0 LdaIM :MSB: Tunebu Sta TZP1 LdyIM 4 Tunelp LdaIY TZP0 StaAY TLineB+1 Dey Bpl Tunelp LdxIM :LSB: (TLineB+1) LDYIM :MSB: (TLineB+1) JSR OSCLI Jmp Space Tunebu = "TUNE" = 13 ; Reveal LdaIM &FF Sta TConce Jsr zzspla zoldz LdaIM &FF Sta THoldf Jmp Execdo Space LdaIM 0 Sta THoldf Jsr StrM00 = &16 = 7 NOP Jsr Init00 ;For good measure Jsr InitHe Jsr Disp04 Concea LdaIM 0 Sta TConce Jmp Execdi FSexit JSR Recl00 Jsr CanHea Jsr StrMes NOP Jsr OldF01 JMP common Execbu = "EXEC""""" = 13 ;\\\\\\\ COPY TO RAM FOR TUBE COMPAT.***** TSexit JSR Recl00 JSR strm00 ; *** Tim *** Used to do each of these individually = 22,7,28,0,24,39,1 ; | NOP ; *** Tim *** Terminator LDAIM 13 JSR OSASCI LdxIM :LSB: Execbu LdyIM :MSB: Execbu Jsr OSCLI common Jsr ResetS ; *** Tim *** Bug fixed ; ; Old system used to return to teletext when execing a ; program from terminal mode if teletext was the last ; language. The new code checks for this - if it about ; to happen, it looks for Basic and invokes that. If ; Basic does not exist, we give up and invoke teletext ; as before - for the time being... ; ; LdaIM &8E ; *** Tim *** The next four statements are what ; Ldx TOldLA ; | used to happen... ; LDYIM &12 ; | ; JSR OSBYTE ; | And don't return ; ; | LDXIM &F4 ; | STX readio ; | Setup address of ROM number in RAM LDXIM 0 ; | STX readio+1 ; | LDXIM &FF ; | We want to read io processor memory STX readio+2 ; | STX readio+3 ; | LDXIM :LSB: readio ; | Point X and Y to OSWORD block LDYIM :MSB: readio ; | LDAIM 5 ; | JSR osword ; | Read byte LDX TOldLA ; | Read old language rom number CPX readio+4 ; | Is it this language? BNE ok ; | If not, branch LDAIM &BB ; | LDXIM 0 ; | LDYIM &FF ; | JSR osbyte ; | Read Basic socket number CPXIM &FF ; | Do we have Basic? BNE ok ; | Yes, then branch ; | I give up - use old ROM number LDX TOLDLA ; | ok ; | LdyIM &12 ; | LDAIM &8E ; | &8E is the OSBYTE language invoke code JMP OSBYTE ; *** Tim *** Invoke language - no return expected ; GetO01 rts Recl00 LdaIM &9E Sta TCTRLB+0 Jsr SendCT LdaIM &A2 Sta TCTRLB+0 Jsr SendCT LdaIM &A1 Sta TCTRLB+0 Jsr SendCT Rts ResetS LDAIM 4 LDXIM 0 LDYIM 0 Jsr OSBYTE LdaIM 225 LdxIM 1 Jsr OSBYTE Jsr Curs00 rts ; ; LNK TERM2