> NewView/s v1.06  Modified VIEW : ( list%= 2 reloc%= <base%=&C200:base%=&8000 F tab8%= P mcode% &3FFF Z"Source filename: "F$ d"LOAD "+F$+" "+~mcode% n*mcode%!9<>&57454956 "Not VIEW ROM": xLver%=mcode%!&2842: ver%<>&302E3342 "This program modifies VIEW B3.0": +BGmem=&A8:romstart=&80C5:ramstart=&C2C5 2o(A%):P%=A%-&8000+base%:O%=A%-&8000+mcode%: ݤo(A%):=A%-&8000+base% ! pass%=4 6-list% 2-list% &o(&8003):[OPT pass%:JMP Service:] -o(&8011):[OPT pass%:EQUS "JGH & Acorn":] o(&8021):[OPT pass% .ReadPTR :LDA #0 &.BGetArgs:LDX #BGmem:JMP &FFDA:NOP .Service &PHA:TXA:PHA:TYA:PHA:TSX:LDA &103,X CMP #&09:BEQ o(&8062):] (o(&80C2):[OPT pass%:JSR TubeCheck:] .o(&873A):[OPT pass%:EQUS "s counted. ":] &o(&8946):[OPT pass%:JSR NewSave:] o(&8CA0):[OPT pass% "(BNE o(&8CAF):\ Allow 00..7E, 80..FF ,] 6&o(&8D18):[OPT pass%:JMP NewBGet:] @&o(&9B96):[OPT pass%:JMP ReadKey:] J&o(&A761):[OPT pass%:JSR NewRDCH:] To(&A83D):[OPT pass% ^!EQUS "VIEW":BRK:\ As original h#EQUS "J3.0":BRK:\ J=JGH version r] |o(&A8A1):[OPT pass% $NOP:NOP:NOP:\ Remove ROM protect ] %o(&B0BE):[OPT pass%:JSR SetTAB:] %tab8%:o(&B0EE):[OPT pass%:NOP:] (tab8%:o(&B0F0):[OPT pass%:ADC #5:] : o(&8079):[OPT pass% 5\ Remove OSBYTE 163 code, spare space &8079-&80B7 \ *\ sets load/exec to &FFFF0000  .NewSave  \ A=0 STA &502:STA &506:STA &507 LDX #&FF:STX &508:STX &509 STX &503:STX &504:STX &505 JMP o(&894C) &: 0 .ReadCtrl :"PHA:TYA:PHA:LDA #&76:JSR &FFF4 DPLA:TAY:PLA:CPX #0:RTS N: X.ReadShift bPHA:TYA:PHA:LDA #129 lLDX #&FF:LDY #&FF:JSR &FFF4 vPLA:TAY:PLA:CPX #0:RTS :  NOP:NOP ] : o(&B2FD):[OPT pass% $\ &B2FD - Get relocation bitmask ,\ &B328 - Relocate VIEW on 2nd processor )\ Rewrite relocator to use less space "\ So, &B2FD-&B9FF is now spare D\ &BA00-&BF00 used for code on Master, spare if not in MOS ROM \ '\ translates CRLF and LFCR  .NewBGet \ Y=chn, X can be corrupted  JSR &FFD7:BCS NewBGetDone CMP #10:BEQ NewBGetCR  CMP #13:BNE NewBGetOk *.NewBGetCR 4PHA:LDX #4 >.NewBGetLp1 H&LDA BGmem,X:PHA:DEX:BPL NewBGetLp1 RJSR ReadPTR \JSR &FFD7:BCS NewBGetBack fCMP #10:BEQ NewBGetLF pCMP #13:BNE NewBGetBack z.NewBGetLF STA BGmem+4 TSX:LDA &106,X:CMP BGmem+4 'BNE NewBGetEnd:\ Different, so join .NewBGetBack LDA #1:JSR BGetArgs:\ Set .NewBGetEnd  LDX #0 .NewBGetLp2 -PLA:STA BGmem,X:INX:CPX #5:BNE NewBGetLp2 PLA:LDA #13 .NewBGetOk CLC .NewBGetDone RTS : : $9\ Keypresses extended to enter top-bit set characters . .SetTAB 80JSR &FFF4:LDX #&FF:STX &50:STX &51:\ Set FjI B(LDA #219:INX:.OsbY0:LDY #0:JMP &FFF4 L: V .ReadKey `'\ On exit, Z=set, C=normal/extended j%JSR NewRDCH:BCC ReadK2:BPL ReadK2 t!STA &38:JMP o(&9BD0):\ Chars ~ .ReadK2 JMP o(&9B99):\ Normal :  .NewRDCH PHA:\ Make space on stack TXA:PHA:LDA &70:PHA:\ W/S LDA #0:STA &70 JSR NewRDCH2:\ Get char TSX:STA &103,X:PLA:STA &70 PLA:TAX:PLA:RTS :  .NewRDCH2 JSR &FFE0:BCS NewRDExit CMP #"#":BEQ NewRDCH3  CMP #"*":BCC NewRDCH4 CMP #"9"+1:BCS NewRDCH4  .NewRDCH3 (JMP NewRDNum 2 .NewRDCH4 <CMP #"F"-64:BEQ NewRDf FCMP #"Z"-63:BCC NewRDExtra P .NewRDEnd ZCLC d.NewRDExit nRTS x .NewRDf LDA #"":RTS  .NewRDOld PLA:A #64:CLC:RTS .NewRDEnd2 TAX:PLA:TXA .NewRDEnd3 SEC:RTS:\ Extended chars  .NewRDEsc PLA:LDA #27:RTS  .NewRdAE PLA: #&20:BEQ NewRdAE2 LDA #145:BNE NewRDEnd2 $.NewRdAE2:LDA #146:BNE NewRDEnd2 BNE NewRDEnd2  .NewRdAo PLA: #&20:BNE NewRdAo2 "LDA #143:BNE NewRDEnd2 ,$.NewRdAo2:LDA #134:BNE NewRDEnd2 6 .NewRdPt @PLA:LDA #158:BNE NewRDEnd2 J.NewRDExtra TCMP #0:BEQ NewRDEnd:\ TAB ^CMP #13:BEQ NewRDEnd:\ CR h#PHA:JSR &FFE0:\ Get second char rBCS NewRDEsc |CMP #32:BCC NewRDOld PHA: #&DF CMP #"E":BEQ NewRdAE CMP #"O":BEQ NewRdAo CMP #"T":BEQ NewRdPt PLA:BMI NewRDOld CMP #"@":BCC NewRDIndex3 CMP #"[":BCC NewRDOld CMP #"a":BCC NewRDIndex2 CMP #"{":BCC NewRDOld  SBC #27 .NewRDIndex2  SBC #27 .NewRDIndex3 SBC #31:TAX LDA RdTable1,X:\ Get char "CMP #32:BCS NewRDEnd2:\ Got it &ASL A:ASL A:ASL A:\ code*8 0STA &70:PLA:LDX #7 : .NewRdLp DCMP RdTable2,X:BEQ NewRDFnd NDEX:BPL NewRdLp:LDX #1 X .NewRDFnd bTXA:CLC:ADC &70:TAX l LDA RdTable3,X:JMP NewRDEnd3 v:  .RdTable1 \ Initial codes for keys 'EQUS " "+0+"#$&"+1+"()*+"+2 'EQUS "0"+3+"36"+2+"89:;"+1 +EQUS "["+4+"]"+5+6+"{"+4+"}"+127  .RdTable2 ,EQUD &09050301:EQUD &19150F0E:\ ACEINOUY  .RdTable3 #EQUS "**":EQUS "" #EQUS "":EQUS "" #EQUS "":EQUS "**" EQUS "*****" :  .NewRDNum  JSR ReadCtrl:BMI NumCtrl JSR ReadShift:BPL NumExit  \ Shift only *CMP #",":BEQ NumComma 4JSR NumHash > .NumGet HTAX:LDA NumTable-"*",X:SEC R .NumExit \RTS f .NumCtrl p"JSR ReadShift:BMI NumShiftCtrl z\ Ctrl only CMP #",":BEQ NumComma3 CMP #"1":BCS NumAscii "JSR NumHash:ADC #32:BNE NumGet .NumShiftCtrl \ Shift & Ctrl CMP #",":BEQ NumComma2 "JSR NumHash:ADC #16:BNE NumGet .NumComma3 LDA #"*":RTS  .NumComma CLC .NumComma2 PHP:JSR &FFE0 CMP #"1":BCC NumIgnr CMP #"9"+1:BCS NumIgnr ADC #32:PLP:BCS NumGet $ADC #16:BNE NumGet . .NumHash 8CMP #"#":BNE NumHashX B LDA #"," L .NumHashX VPHP ` .NumIgnr jPLP:CLC:RTS t: ~ .NumAscii  #15:STA &70:TYA:PHA .NumAscLp &LDA #129:LDX #32:JSR OsbY0:\ (20) BCS NumAscCtrl TXA:CMP #"0":BCC NumAscEnd CMP #"9"+1:BCS NumAscEnd  #15:PHA:LDA &70 #ASL A:ASL A:ADC &70:ASL A:\ *10 (STA &70:PLA:ADC &70:STA &70:\ n*10+x .NumAscCtrl JSR ReadCtrl:BMI NumAscLp .NumAscEnd PLA:TAY:LDA &70:SEC .TubeCheckReturn RTS : ( .NumTable 2#EQUS "*+#-/Ŵ¿":\ Shift <(EQUS "ܪͰʼι˻":\ Shift-Ctrl F+EQUS "ߩ**н׶ҷ":\ Ctrl ; CS,Num P*EQUS "*******ϾصѸ":\ ; C,Num Z: d: n(\ Explode font and define characters x.TubeCheck LDA #0:LDX #1:JSR &FFF4 )CPX #3:BCS DefChars:\ Always exploded &LDA #182:LDX #0:LDY #255:JSR &FFF4 /CPX #2:BCS DefChars:\ Sufficiently exploded &\ Only need &80/90, &A0/B0, &C0/D0 %LDX #2:LDA #20:.ReEnter:JSR &FFF4 2LDX &F4:LDA #142:BNE ReEnter:\ Re-enter myself .DefChars !LDA #Characters 255:STA &89 !LDA #Characters 256:STA &8A LDX #128 .DefCharLp1 LDA #23:JSR &FFEE TXA:JSR &FFEE:LDY #0 .DefCharLp2 LDA (&89),Y:JSR &FFEE "INY:CPY #8:BNE DefCharLp2 ,TYA:CLC:ADC &89:STA &89 6BCC DefCharNext:INC &8A @.DefCharNext JINX:CPX #&E0:BNE DefCharLp1 T: ^&\ Now relocate if on 2nd processor h .movecode r,JSR &AFB0:BCS P%+3:RTS:\ CLC=IO, SEC=2nd |/LDX #reloctable 255:LDY #reloctable 256 -STX &8B:STY &8C:\ &8B/C=>relocation table LDX #0:LDY #romstart 256 #STX &89:STY &8A:\ &89/A=>source LDY #ramstart 256 !STX &85:STY &86:\ &85/6=>dest INX:LDY #romstart 255 .reloclp LDA (&89),Y:BPL store CMP #&B6:BCS store DEX:BNE relocate 6LDA (&8B,X):STA &83:LDX #8:\ &83=relocation bitmap INC &8B:BNE relocate:INC &8C .relocate !LDA (&89),Y:ROL &83:BCC store #ADC #(ramstart-romstart) 256-1  .store &STA (&85),Y:INY:BNE reloclp 0INC &86:INC &8A : LDA &86:CMP #&F8:BNE reloclp DLDX #go 255:LDY #go 256 N JMP &FFF7 X.go b!EQUS "GO "+~ramstart:EQUB 13 l: v.reloctable *]:R%=O%:P%=P%+620:O%=O%+620:[OPT pass% @]:reloc%:z%=P%-movecode:P%=P%-z%:O%=O%-z%:[OPT pass%:RTS:] [OPT pass% .Characters *\ Characters uses space to about &B910 D\ If &BA00-&BFFF unused, can be incorporated into Master MOS ROM ]  ! reloc%:"LOAD bitmap "+~R% ,"LOAD pc8b "+~O%:O%=O%+&300:P%=P%+&300 : =A$="*SAVE VIEWJ3 "+~mcode%+" "+~O%+" FFFF0000 FFFBBC00" A$;:A$: