First, a quote from 2004. "[18 07 ??] - Unspeakable horror." (Okay, it's not actually that bad.) [18 07 XX XX XX XX YY] Compare a constant XX against a text system memory YY C1/528D: C2 31 REP #$31 Flags and direct page manipulation. C1/528F: 0B PHD C1/5290: 48 PHA C1/5291: 7B TDC C1/5292: 69 EC FF ADC #$FFEC C1/5295: 5B TCD C1/5296: 68 PLA C1/5297: 86 12 STX $12 $12 = Last argument C1/5299: AD CA 97 LDA $97CA Argument gathering loop C1/529C: C9 04 00 CMP #$0004 C1/529F: B0 14 BCS $52B5 C1/52A1: 8A TXA C1/52A2: E2 20 SEP #$20 C1/52A4: AE CA 97 LDX $97CA C1/52A7: 9D BA 97 STA $97BA,X C1/52AA: C2 20 REP #$20 C1/52AC: EE CA 97 INC $97CA C1/52AF: A9 8D 52 LDA #$528D C1/52B2: 4C 82 53 JMP $5382 End of argument gathering loop C1/52B5: E2 20 SEP #$20 C1/52B7: A9 08 LDA #$08 C1/52B9: E2 10 SEP #$10 C1/52BB: A8 TAY Y = 0x8 C1/52BC: AD BB 97 LDA $97BB C1/52BF: 85 06 STA $06 $06 = arg2 C1/52C1: 64 07 STZ $07 C1/52C3: 64 08 STZ $08 C1/52C5: 64 09 STZ $09 C1/52C7: C2 20 REP #$20 C1/52C9: 22 46 92 C0 JSR $C09246 $06 = arg2 << 8 C1/52CD: E2 20 SEP #$20 C1/52CF: AD BA 97 LDA $97BA C1/52D2: 85 0A STA $0A $0A = arg1 C1/52D4: 64 0B STZ $0B C1/52D6: 64 0C STZ $0C C1/52D8: 64 0D STZ $0D C1/52DA: C2 20 REP #$20 C1/52DC: A5 0A LDA $0A C1/52DE: 05 06 ORA $06 C1/52E0: 85 0A STA $0A $0A = (arg2 << 8) + arg1 C1/52E2: A5 0C LDA $0C C1/52E4: 05 08 ORA $08 C1/52E6: 85 0C STA $0C C1/52E8: E2 20 SEP #$20 C1/52EA: A9 10 LDA #$10 C1/52EC: A8 TAY Y = 0x10 C1/52ED: AD BC 97 LDA $97BC C1/52F0: 85 06 STA $06 $06 = arg3 C1/52F2: 64 07 STZ $07 C1/52F4: 64 08 STZ $08 C1/52F6: 64 09 STZ $09 C1/52F8: C2 20 REP #$20 C1/52FA: 22 46 92 C0 JSR $C09246 $06 = 0x0000, $08 = arg3 C1/52FE: A5 0A LDA $0A C1/5300: 05 06 ORA $06 C1/5302: 85 0A STA $0A $0A = (arg2 << 8) + arg1 C1/5304: A5 0C LDA $0C C1/5306: 05 08 ORA $08 C1/5308: 85 0C STA $0C $0C = arg3 C1/530A: E2 20 SEP #$20 C1/530C: A9 18 LDA #$18 C1/530E: A8 TAY Y = 0x18 C1/530F: AD BD 97 LDA $97BD C1/5312: 85 06 STA $06 $06 = arg4 C1/5314: 64 07 STZ $07 C1/5316: 64 08 STZ $08 C1/5318: 64 09 STZ $09 C1/531A: C2 20 REP #$20 C1/531C: 22 46 92 C0 JSR $C09246 $06 = 0x0000, $08 = (arg4 << 8) C1/5320: A5 0A LDA $0A C1/5322: 05 06 ORA $06 C1/5324: 85 0A STA $0A $0A = (arg2 << 8) + arg1 C1/5326: A5 0C LDA $0C C1/5328: 05 08 ORA $08 C1/532A: 85 0C STA $0C $0C = (arg4 << 8) + arg3 Whew! So passes another [0A]-style verbosity special. The practical upshot: $0A+0C = First four argument bytes (constant) C1/532C: C2 10 REP #$10 C1/532E: A6 12 LDX $12 X = Last argument C1/5330: D0 05 BNE $5337 C1/5332: 20 0A 04 JSR $040A arglast == 0x00: Store working memory in $06+08 C1/5335: 80 11 BRA $5348 C1/5337: E0 01 00 CPX #$0001 C1/533A: D0 05 BNE $5341 C1/533C: 20 DC 03 JSR $03DC arglast == 0x01: Store argumentary memory in $06+08 C1/533F: 80 07 BRA $5348 C1/5341: 20 00 04 JSR $0400 C1/5344: 85 06 STA $06 C1/5346: 64 08 STZ $08 arglast other: Store secondary memory in $06+08 The last argument byte seems to choose what to compare. 00 = Working memory ("result") 01 = Argumentary memory ("argument") else = Secondary memory ("counter") C1/5348: A5 06 LDA $06 C1/534A: C5 0A CMP $0A C1/534C: A5 08 LDA $08 C1/534E: E5 0C SBC $0C C1/5350: B0 05 BCS $5357 C1/5352: A9 00 00 LDA #$0000 C1/5355: 80 15 BRA $536C C1/5357: A5 0C LDA $0C C1/5359: C5 08 CMP $08 C1/535B: D0 04 BNE $5361 C1/535D: A5 0A LDA $0A C1/535F: C5 06 CMP $06 C1/5361: D0 05 BNE $5368 C1/5363: A2 01 00 LDX #$0001 C1/5366: 80 03 BRA $536B C1/5368: A2 02 00 LDX #$0002 C1/536B: 8A TXA C1/536C: 85 06 STA $06 C1/536E: 64 08 STZ $08 C1/5370: 10 02 BPL $5374 C1/5372: C6 08 DEC $08 C1/5374: A5 06 LDA $06 C1/5376: 85 0E STA $0E C1/5378: A5 08 LDA $08 C1/537A: 85 10 STA $10 C1/537C: 20 5D 04 JSR $045D Store return value in working memory. C1/537F: A9 00 00 LDA #$0000 C1/5382: 2B PLD C1/5383: 60 RTS Memory >= Constant: Nonzero (true) Memory < Constant: Zero (false) .