I decided to add a simple structured programming feature to my portable assembler. It now does if/else/endif, repeat/until and while/endw based on condition register flags.
Code:
.65C02
; A mixture of loops and ifs
000899' A000 : LDY #0
00089B' : REPEAT
00089B' 98 : TYA
00089C' A200 : LDX #0
00089E' : REPEAT
00089E' 0A : ASL A
00089F' 08 : PHP
0008A0' 9001 : IF CS
0008A2' E8 : INX
0008A3' : ENDIF
0008A3' 28 : PLP
0008A4' D0F8 : UNTIL EQ
0008A6' C8 : INY
0008A7' C080 : CPY #128
0008A9' D002 : IF EQ
0008AB' 8002 : BREAK
0008AD' : ENDIF
0008AD' 80EC : FOREVER
; Nonsense code to show long branches
.ORG $E000
00E000 90034C09E1 : WHILE CC
.REPEAT 16
.BYTE $EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA
.ENDR
00E005 EAEAEAEAEAEAEAEA> + .BYTE $EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA
00E015 EAEAEAEAEAEAEAEA> + .BYTE $EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA
00E025 EAEAEAEAEAEAEAEA> + .BYTE $EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA
00E035 EAEAEAEAEAEAEAEA> + .BYTE $EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA
00E045 EAEAEAEAEAEAEAEA> + .BYTE $EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA
00E055 EAEAEAEAEAEAEAEA> + .BYTE $EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA
00E065 EAEAEAEAEAEAEAEA> + .BYTE $EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA
00E075 EAEAEAEAEAEAEAEA> + .BYTE $EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA
00E085 EAEAEAEAEAEAEAEA> + .BYTE $EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA
00E095 EAEAEAEAEAEAEAEA> + .BYTE $EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA
00E0A5 EAEAEAEAEAEAEAEA> + .BYTE $EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA
00E0B5 EAEAEAEAEAEAEAEA> + .BYTE $EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA
00E0C5 EAEAEAEAEAEAEAEA> + .BYTE $EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA
00E0D5 EAEAEAEAEAEAEAEA> + .BYTE $EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA
00E0E5 EAEAEAEAEAEAEAEA> + .BYTE $EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA
00E0F5 EAEAEAEAEAEAEAEA> + .BYTE $EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA,$EA
00E105 0A : ASL A
00E106 4C00E0 : ENDW