> SoftCMOS/src $ Simple soft CMOS Config access : (#assem(0)::assem(2):sm_table 2FA$="*SAVE "+fname$+" "+~(mcode%+M%)+" "+~O%+" FFFF0000 FFFBBC00" <A$;:A$: F P: Zassem(pass%) d7OSASCI=&FFE3:OSWRCH=&FFEE:OSNEWL=&FFE7:OSWORD=&FFF1 n5ver$="0.00":date$="01 Jan 2000":fname$="SoftCMOS" x4ws=&A8:tmp=ws+7:osw14=14:osw15=osw14+1:save=&D94  mcode% &1000, L%-1 :  pass%=pass% pass%+1 opt%=sm_pass(pass%)+8+16 [OPT opt% .ROMBase EQUB &00:EQUW RelocTable JMP Service #EQUB &82:EQUB copyright-ROMBase .ROMTitle !EQUB ver$*10:EQUS "SoftCMOS" %EQUB &00:EQUS ver$+" "(+date$+")" .copyright "EQUB &00:EQUS "(C)J.G.Harston"  EQUB &00 : "\ SERVICE 9 - *Help ,\ ----------------- 6 .Serv09 @LDA (&F2),Y J-CMP #13:BNE Serv9Exit :\ Not *Help TJSR OSNEWL ^ .Serv9a h LDX #0 r .Serv9Lp |1LDA &8009,X:BNE Serv9Chk :\ Display ROM title LDA #" ":BNE Serv9Char  .Serv9Chk CMP #" ":BEQ Serv9Done .Serv9Char JSR OSWRCH:INX:BNE Serv9Lp .Serv9Done JSR OSNEWL .Serv9Exit LDA #9:RTS :  .Service (CMP $&04:\BEQ Serv04 :\ *Command &CMP #&07:BEQ Serv07 :\ OSBYTE %CMP #&09:BEQ Serv09 :\ *Help RTS : &\ SERVICE 7 - OSBYTE 0\ ----------------- : .Serv07 D>LDY &F1:LDX &F0:LDA &EF :\ A=num, X=byte, Y=value N>CMP #161:BEQ Osbyte161 :\ OSBYTE 161 - Read CMOS X?CMP #162:BNE P%+5:JMP Osbyte162 :\ OSWORD 162 - Write CMOS b.Serv07Quit lLDA #7:RTS v: .Osbyte162 0INX:BEQ OsbyteClaim :\ Don't write size byte 5DEX:BEQ OsbyteClaim :\ Don't write station number TYA:STA CMOS,X .Osbyte161 LDY CMOS,X .OsbyteClaim LDA #0:RTS  .CMOS EQUS 128,0) EQUS 127,0) EQUB &FF :\ Size=256-1 : ]:RelocTable=P%::  : ݤsm_pass(pass%)  pass%=0:M%=0 *pass%=1:M%=O%-mcode% 4P%=&8100-128*(pass%2) >O%=mcode%+M%*(pass%2)2 H/pass%=1: O%+M%*2.125>L%:"Code overrun": R="4646",pass%+1,1) \: fsm_table p>base80%=mcode%+M%:base81%=mcode%:byte%=0:count%=0:off%=0: zPbyte80%=base80%?off%:byte81%=base81%?off%: off%>=M%:byte80%=&80:byte81%=&80 ] ((byte81%-byte80%) &FE)<>0 "ERROR: Offset by more than one page at &";~&8000+off% M (byte80% &C0)=&80:byte%=byte%2+128*(byte81%-byte80%):count%=count%+1 1 count%=8:?O%=byte%:O%=O%+1:byte%=0:count%=0 $off%=off%+1:off%>=M% count%=0