assem [ G &7000  ADC A,1  B LD A,>loop:ADC A,"ORG" "Origin?": 0x$=textl$,textl$," ")+1): dl]:pc=x:org=x 8"RAW Assembler V3.3 BBC"''"Pass ";pass;19);textl$' ln%=line%:textl$=read x:split1=textl$," "): textl$,split1+1,1)=" " :textl$=textl$,split1)+textl$,split1+2):textl$,split1+1,1)<>" "  7textr$="": textl$,1)=";" 19);textl$,2):t~T  l_flg% ;ln%;5); ;~pc;":"; 0byte1=-1:byte2=-1:byte3=-1:byte4=-1:index=-1 ( i%=-1 2 j%=69 0 -1 <' textl$,type$(j%))=1 i%=j%:j%=0 F P. i%=-1 19);textl$'"Bad statement";:end Z i%<36 i% Tp[,dF[,tb\,t`Y,Tj\,DtX,DPY,dHY,DxY,DxY,DxY,DxY,DPY,DPY,dLZ,DPY,d@W,DPY,DpW,DPY,DPY,d^W,TPX,dLZ,DxY,DxY,DxY,DxY,dXX,tfX,TpV,DxY,DxY,DxY,DxY d i%>35 i%=i%-35: i% DxY,DPY,dRY,DxY,DxY,DBX,DxY,DxY,djU,djU,T~\,ThY,DxY,DxY,D^Z,DPY,DPY,DTZ,DxY,DrZ,DPY,DhZ,DPY,DxY,dLU,tr[,DPY,DH\,TlZ,D@Z,DJZ,ttY,t~Y,DhU n index>-1 x=index: TZ] x byte1>-1 x=byte1: TZ]  byte2>-1 x=byte2: TZ]  byte3>-1 x=byte3: TZ]  byte4>-1 x=byte4: TZ] )split1=textl$," "): split1=0 t~T ?split2=1: a=split1 (textl$): textl$,a,1)=" " split2=a ?:textl$=textl$,split1-1)+" ",4)+" "+textl$,split2+1) -19);textl$;: textr$="" ",";textr$ 0ln%=line%:textl$=expd(read): textl$="END"  pass $''"*SAVE ";~org;" ";~pc  :  Init Imaxlabs=95:numl=0: type$(69),label$(maxlabs),value(maxlabs),cond$(7) $ TX_: i%=0 69: type$(i%): # Tl_: i%=0 7: cond$(i%): ": T ^: h -----DEF----- r5 textl$,4,1)="S" x$=textl$,6): dl]:pc=pc+x: |Hfrst=textl$,"'"): frst=0 frst=6:last=(textl$):tPU frst=frst+1 @last=frst,textl$,"'"): last=0 last=(textl$) last=last-1 H textl$,4,1)="$" j%=frst last:?pc=(textl$,j%,1)):pc=pc+1:: d textl$,4,1)="N" j%=frst last-1:?pc=(textl$,j%,1)):pc=pc+1::?pc=(textl$,1)):pc=pc+1: %x$=textl$,textl$," ")+1): dl] 9 textl$,4,1)="B" byte1=x tR]:byte1=lb:byte2=hb  :  -----RST----- -x$=textl$,5):x=(x$)&38:byte1=&C7 x: :  -----PUSH/POP----- x$=textl$,2) B x$="IX" x$="IY" index=-&DD*(x$="IX")-&FD*(x$="IY"):x$="HL" @ x$="AF" byte1=-&F5*(textl$,"U")>0)-&F1*(textl$,"O")>0): O dH^: textl$,"POP") byte1=&C1 16*("&"+x$) byte1=&C5 16*("&"+x$)  &: 0 -----LD----- :textr$=read D+ textl$,"IX")+textr$,"IX") index=&DD N+ textl$,"IY")+textr$,"IY") index=&FD X5 textl$,"(")+textr$,"(")=0 TVW: no brackets b' textl$,"(") t|V: left bracket lA textr$="(HL)" x$=textl$,1):t`^:byte1=&46 8*("&"+x$): vMx$=textr$: x$="(BC)" x$="(DE)" byte1=-&A*(x$="(BC)")-&1A*(x$="(DE)"): f textl$,"HL")+textl$,"I") byte1=&2A:x$=textr$,2,(textr$)-2): dl]: tR]:byte2=lb:byte3=hb: j textr$,"I") x$=textl$,1): t`^:byte1=&46 8*("&"+x$):x$=textr$,5,(textr$)-5): dl]:byte2=x: [ textl$,2)=" A" byte1=&3A:x$=textr$,2,(textr$)-2): dl]: tR]:byte2=lb:byte3=hb: S textl$,2)," ") 19);textl$;",";textr$'"Must be A or double register";:end wbyte1=&ED:x$=textl$,2): dH^:byte2=&4B 16*("&"+x$):x$=textr$,2,(textr$)-2): dl]: tR]:byte3=lb:byte4=hb: : h textr$,1)="I" textr$="HL" byte1=&22:x$=textl$,5,(textl$)-5): dl]: tR]:byte2=lb:byte3=hb:  textl$,"(I") TBW Gx$=textl$,5,1): x$="B" x$="D" byte1=-&2*(x$="B")-&12*(x$="D"): ڑx$=textr$: x$="BC" x$="DE" x$="SP" byte1=&ED: dH^:byte2=&43 16*("&"+x$):x$=textl$,5,(textl$)-5): dl]: tR]:byte3=lb:byte4=hb: Z textl$,"H")=0 byte1=&32:x$=textl$,5,(textl$)-5): dl]: tR]:byte2=lb:byte3=hb: @x$=textr$: x$>="A" x$<="L" t`^:byte1=&70 ("&"+x$): byte1=&36: dl]:byte2=x: o textr$>"A" textr$<"L" x$=textr$: t`^:byte1=&70 ("&"+x$):x$=textl$,8,(textl$)-8): dl]:byte2=x:  Qbyte1=&36:x$=textl$,8,(textl$)-8): dl]:byte2=x:x$=textr$: dl]:byte3=x: V textl$,1)="I" textr$="I" byte1=&ED:byte2=-&57*(textr$="I")-&47*(textr$="A"):  V textl$,1)="R" textr$="R" byte1=&ED:byte2=-&5F*(textr$="I")-&4F*(textr$="A"): *H textl$,"I") byte1=&21:x$=textr$: dl]: tR]:byte2=lb:byte3=hb: 4. textr$="HL" textr$,1)="I" byte1=&F9: >z textl$,(textl$)-1,1)>" " x$=textl$,2): dH^:byte1=&01 16*("&"+x$):x$=textr$: dl]: tR]:byte2=lb:byte3=hb: Hx$=textl$,1): t`^ Rb textr$>="A" textr$<="L" byte1=&40 8*("&"+x$):x$=textr$: t`^:byte1=byte1 ("&"+x$): \6byte1=&06 8*("&"+x$):x$=textr$: dl]:byte2=x: f: p ---- EX ---- ztextr$=read  textr$="IX" index=&DD  textr$="IY" index=&FD  textl$,"S") byte1=&E3: ' textr$="HL" byte1=&EB byte1=&08  :  ---- DJNZ ---- @byte1=&10:x$=textl$,textl$," ")+1): dl]: tz]:byte2=x: :  ---- IM ---- byte1=&ED:x=(textl$,1)) (byte2=-&46*(x=0)-&56*(x=1)-&5E*(x=2)  :  ---- IN ---- textr$=read $[ textr$="(C)" textr$="(BC)" byte1=&ED:x$=textl$,1): t`^:byte2=&40 8*("&"+x$): .;byte1=&DB:x$=textr$,2,textr$,")")-2): dl]:byte2=x: 8: B ---- OUT ---- Ltextr$=read V[ textl$,"(C)") textl$,"(BC)") byte1=&ED:x$=textr$: t`^:byte2=&41 8*("&"+x$): `;byte1=&D3:x$=textl$,6,textl$,")")-6): dl]:byte2=x: j: t ---- CALL ---- ~x$=textl$,2): DL] D x=-1 x$=textl$,6): dl]: tR]:byte1=&CD:byte2=lb:byte3=hb: Nbyte1=&C4 (8*x):textr$=read:x$=textr$: dl]: tR]:byte2=lb:byte3=hb: :  ---- JR ---- x$=textl$,2): DL] : x=-1 x$=textl$,4): dl]: tz]:byte1=&18:byte2=x: Dbyte1=&20 (8*x):textr$=read:x$=textr$: dl]: tz]:byte2=x: :  ---- JP ----  textl$,"X") index="&DD  textl$,"Y") index="&FD  textl$,"(") byte1=&E9: x$=textl$,2): DL]  D x=-1 x$=textl$,4): dl]: tR]:byte1=&C3:byte2=lb:byte3=hb: Nbyte1=&C2 (8*x):textr$=read:x$=textr$: dl]: tR]:byte2=lb:byte3=hb: : ( ---- RET ---- 2E textl$="RET" byte1=&C9 x$=textl$,2): DL]:byte1=&C0 (8*x) < F: P ---- ODDS & ENDS ---- Zx$=textl$:byte1=-&1F*(x$="RRA")-&F*(x$="RRCA")-&37*(x$="SCF")-&3F*(x$="CCF")-&2F*(x$="CPL")-&27*(x$="DAA")-&F3*(x$="DI")-&FB*(x$="EI")-&D9*(x$="EXX")-&76*(x$="HALT")-&17*(x$="RLA")-&7*(x$="RLCA") d n: xx$=textl$:x=-&A9*(x$="CPD")-&67*(x$="RRD")-&B9*(x$="CPDR")-&A1*(x$="CPI")-&B1*(x$="CPIR")-&AA*(x$="IND")-&BA*(x$="INDR")-&A2*(x$="INI")-&B2*(x$="INIR")-&A8*(x$="LDD")-&B8*(x$="LDDR")-&A0*(x$="LDI")-&B0*(x$="LDIR") byte2=x-&44*(x$="NEG")-&BB*(x$="OTDR")-&B3*(x$="OTIR")-&AB*(x$="OUTD")-&A3*(x$="OUTI")-&4D*(x$="RETI")-&45*(x$="RETN")-&6F*(x$="RLD") byte1=&ED: :  ---- AND/SUB/XOR ---- byte=&A6: dfY: and byte=&96: dfY: sub byte=&AE: dfY: xor .byte=&BE:textl$="CP "+textl$,3):dfY: cp .byte=&B6:textl$="OR "+textl$,3):dfY: or :  textl$,"I") TNZ  textl$,"HL") byte1=byte: `x$=textl$,1): (x$>="A" x$<="L") textl$,"&")=0 t`^:byte1=(byte &F8) ("&"+x$): 3byte1=byte &40:x$=textl$,5): dl]:byte2=x: ) textl$,"IX") index=&DD index=&FD ="A" x$<="L" t`^:byte2=(byte &F8) ("&"+x$): ) textl$,"IX") index=&DD index=&FD Fbyte1=&CB:x$=textl$,9,textl$,")")-9): dl]:byte2=x:byte3=byte: :  ---- INC/DEC ----  textl$,"I",3) TH[ byte=-1*(textl$<"I") & textl$,"(H") byte1=&34 byte: L textl$,2)<"!" x$=textl$,1): t`^:byte1=byte (&04 8*("&"+x$)): Qbyte=-8*(textl$<"I"):x$=textl$,2): dH^:byte1=byte (&03 16*("&"+x$)): ) textl$,"IX") index=&DD index=&FD f textl$,"(") byte=-1*(textl$<"I"):byte1=&34 byte:x$=textl$,9,textl$,")")-9): dl]:byte2=x: +byte=-8*(textl$<"I"):byte1=&23 byte: &: 0 ---- LABEL ---- :k%=-1:x$=textl$,2) D# x$,"=")>0 x$=x$,x$,"=")-1) N j%=0 numl X x$=label$(j%) k%=j% b l k%=-1 k%=numl v+ numl>maxlabs "Too many labels";:end label$(k%)=x$:numl=numl+1 # textl$,"=")=0 value(k%)=pc: 1x$=textl$,textl$,"=")+1): dl]:value(k%)=x  :  ---- SBC/ADC ---- byte=&9E: dP[: sbc byte=&8E: dP[: adc textr$=read \ textl$,"HL") x$=textr$: dH^:byte1=&ED:byte2=(&42 16*("&"+x$))+(8 textl$<"S"): W textr$>="A" textr$<="L" byte=byte &F8:x$=textr$: t`^:byte1=byte+("&"+x$):  textr$="(HL)" byte1=byte:  textr$,"I") TL\ /byte1=byte &40:x$=textr$: dl]:byte2=x:  ) textr$,"IX") index=&DD index=&FD byte=&80: DR\: res Hbyte=&C0: DR\: set R/textr$=read:x=(textl$,1)):byte2=byte+8*x \ textr$,"I") tD\: ix/iy f byte1=&CB p$ textr$="(HL)" byte2=byte2+&6: z,x$=textr$: t`^:byte2=byte2+("&"+x$): ) textr$,"IX") index=&DD index=&FD Jbyte3=byte2+&6:byte1=&CB:x$=textr$,5,textr$,")")-5): dl]:byte2=x: :  ---- ADD ---- textr$=read  textl$,"Y") index=&FD  textl$,"X") index=&DD M textl$,"L") textl$,"I") x$=textr$: dH^:byte1=&09 16*("&"+x$): F textr$>="A" textr$<="L" x$=textr$: t`^:byte1=&80+("&"+x$):  textr$="(HL)" byte1=&86: * textr$,"I") d|\: adc a,(ix/iy+n) (byte1=&C6:x$=textr$: dl]:byte2=x: ( textr$,"Y") index=&FD index=&DD ;byte1=&86:x$=textr$,5,textr$,")")-5): dl]:byte2=x: :  ---- PRINT HEX$(x) ---- $?pc=x:pc=pc+1 .# x<16 "0";~x;" "; ;~x;" "; 8 B: L. ---- GET CODE FOR CONDITION x$ -> x ---- Vx=-1 ` j%=0 7 j x$=cond$(j%) x=j% t ~ : # ---- X -> lowbyte,hibyte ---- lb=x 255:hb=x 256  :  ---- CALCULATE JUMP ---- K x>255 x=x-pc-2: x>255 19);textl$'"Too far for relative jump";:end  x<0 x=x+256  : + ---- x$,number/label -> x,number ---- PRINT"#"x$"#" - x$,1)="<" x$=x$,2): dl]:x=x 255: - x$,1)=">" x$=x$,2): dl]:x=x 256: % x$<"!" :x$=x$,2):x$+"#">="!" $ins=x$,"+"):xx=0: ins=0 T|^  xx$=x$,ins+1):x$=x$,ins-1) 2 xx$,1)="&" xx=(xx$)-65536*((xx$)<0):T|^ 1 xx$,1)>="0" xx$,1)<="9" xx=(xx$):T|^ (4 xx$,1)="%" xx=(xx$):T|^: **** binary **** 2819);textl$'"Illegal index. Must be a number";:end <- x$,1)="&" x=xx+(x$)-65536*((x$)<0): F, x$,1)>="0" x$,1)<="9" x=xx+(x$): P1 x$,1)="%" x=xx+(xx$):: **** binary **** Z pass=2 x=-1 x=0: d j%=0 numl n, label$(j%)=x$ x=xx+value(j%):j%=numl+1 x , x<0 19);textl$'"No such label";:end  : , ----- x$,register -> x$,hex code ----- 4x$=~((x$)-66-8*(x$="A")+2*(x$="H")+5*(x$="L"))  :  x$,reg pair -> x$,hex code  x$="BC" x$="0"  x$="DE" x$="1" ( x$="HL" x$="IX" x$="IY" x$="2"  x$="SP" x$="3"  :  ----- CLASSES -----  END,.,ADC,ADD,AND,BIT,CALL,CCF,CP,CPD,CPDR,CPI,CPIR,CPL,DAA,DEC,DI,DJNZ,EI,EX,EXX,HALT,IM,IN,INC,IND,INDR,INI,INIR,JP,JR,LD,LDD,LDDR,LDI,LDIR,NEG,NOP,OR,OTDR,OTIR "~ OUT,OUTD,OUTI,POP,PUSH,RES,RET,RETI,RETN,RL,RLA,RLCA,RLC,RLD,RR,RRA,RRC,RRCA,RRD,RST,SBC,SCF,SET,SLA,SRA,SRL,SUB,XOR,DEF ,% NZ," Z",NC," C",PO,PE," P"," M" 6: @ ---- LABELS USED ---- J a=0 numl-1 T*label$(a)+30,"."),30);"&";~value(a) ^ a: restore:dat%=: dat%=dat%+?(dat%+3) $(dat%+4),"[") 9dat%=dat%+?(dat%+3)+4:line%=?(dat%-2)+256*?(dat%-3):  ݤread  A$,A,B,C%:C%=dat% 1A$=$dat%:A=A$,":"): A A$=A$,A-1):dat%=C%+A (B=A$,","): B A$=A$,B-1):dat%=C%+B = A=0 B=0 dat%=dat%+A$+4:line%=?(dat%-2)+256*?(dat%-3) ) A$,1)=" " :A$=A$,2):A$,1)<>" " =A$ ݤexpd(A$):A$="" ="" 8 A,B$,C$::A=A+1:A$,A,1)>"~" A>A$: A> A$ =A$ A=1 A$:B$=A$,A,1)  B$=132 B$="OR"  B$=128 B$="AND"  B$=214 B$="CALL"  B$=221 B$="DEF"  B$=224 B$="END" C$=C$+B$::=C$ :%end:" at assembly line ";ln%: