Description: Apple II+ Mini-Assembler (4 of 4) Header: Apple II+ Mini-Assembler (4 of 4) This article last reviewed: 21 September 1984 08AA: AD 00 02 LDA IN ;GET CHAR 08AD: C9 AO CMP #$AO ;ASCII SPACE? 08AF: FO 13 BEQ SPACE ;YES 08B1: C8 INY 08B2: C9 A4 CMP #$A4 ;ASCII '$' IN COL 1? 08B4: FO 92 BEQ FKMON ;YES,SIMULATE MONITOR 08B6: 88 DEY ;NO, BACKUP A CHAR 08B7: 20 A7 FF JSR GETNUM ;GET A NUMBER 08BA: C9 93 CMP #$93 ;':' TERMINATOR? 08BC: DO D5 ERR4 BNE ERR2 ;NO, ERR 08BE: 8A TXA 08BF: FO D2 BEQ ERR2 ;NO ADDR PRECEDING COLON 08C1: 20 78 FE JSR A1PCLP ;MOVE ADDR TO PCL, PCH 08C4: A9 03 SPACE LDA #$03 ;COUNT OF CHAR IN MNEMONIC 08C6: 85 3D STA A1H 08C8: 20 EF 09 NXTMN JSR GETNSP ;GET 1ST MNEMONIC CHARACTER 08CB: OA ASL A 08CC: E9 BE SBC #$BE ;SUBTRACT OFFSET 08CE: C9 C2 CMP #$C2 ;LEGAL CHARACTER? 08DO: 90 C1 BCC ERR2 ;NO 08D2: OA ASL A ;COMPRESS-LEFT JUSTIFY 08D3: OA ASL A 08D4: A2 04 LDX #$04 08D6: 0A NXTM2 ASL A ;DO 5 TRIPLE WORD SHIFTS 08D7: 26 42 ROL A4L 08D9: 26 43 ROL A4H 08DB: CA DEX 08DC: 10 F8 BPL NXTM2 08DE: C6 3D DEC A1H ;DONE WITH 3 CHAR? 08EO: FO F4 BEQ NXTM2 ;YES BUT DO 1 MORE SHIFT 08E2: 10 E4 BPL NXTMN ;NO 08E4: * 08E4: A2 05 LDX #$05 ;5-CHAR ADDRESSING MODE 0836: 20 3F 09 FORM2 JSR GETNSP ;GET 1ST CHAR OF ADDRESS 08E9: 84 34 STY YSAV 08EB: DD B4 F9 CMP CHAR1,X ;1ST CHAR MATCH PATTERN? 08EE: DO 13 BNE FORM3 ;NO 08FO: 20 3F 09 JSR GETNSP ;YES, GET 2ND CHAR 08F3: DD BA F9 CMP CHAR2,X ;MATCHES SECOND HALF? 08F6: FO ON BEQ FORM5 ;YES 08F8: BD BA F9 LDA CHAR2,X ;NO, IS 2ND HALF ZERO? 08FB: FO 07 BEQ FORM4 ;YES 08FD: C9 A4 CMP #$A4 ;NO 2ND HAL OPTIONAL? 08FF: FO 03 BEQ FORM4 ;YES @L 0901: A4 34 LDY YSAV 0903: 18 FORM3 CLC ;CLEAR CARRY NO MATCH 0904: 88 FORM4 DEY ;BACK UP ONE CHARACTER 0905: 26 44 FORM5 ROL FMT ;FORM FORMAT BYTE 0907: EO 03 CPX #$03 ;TIME TO CHECK FOR ADDRESS 0909: DO OD BNE FORM7 ;NO 090B: 20 A7 FF JSR GETNUM ;YES 090E: A5 3F LDA A2H 0910: FO 01 BEQ FORM6 ;HIGH ORDER BYTE ZERO 0912: E8 INX ;NO, INCR FOR 2-BYTE 0913: 86 35 FORM6 STX L ;STORE LENGTH 0915: A2 03 LDX #$03 ;RELOAD FORMAT INDEX 0917: 88 DEY ;BACKUP A CHARACTER 0918: 86 3D FORM7 STX A1H ;SAVE INDEX 091A: CA DEX ;DONE WITH FORMAT CHECK? 091B: 10 C9 BPL FORM2 ;NO 091D: A5 44 LDA FMT ;YES PUT LENGTH 091F: OA ASL A ;IN LOW BITS 0920: OA ASL A 0921: 05 35 ORA L 0923: C9 20 CMP #$20 0925: BO 06 BCS FORM8 ;ADD $ IF NONZERO LENGTH 0927: A6 35 LDX L ;AND DON'T ALREADY HAVE IT 0929: FO 02 BEQ FORM8 092B: 09 80 ORA #$80 092D: 85 44 FORM8 STA FMT 092F: 84 34 STY YSAV 0931: B9 00 02 LDA IN,Y ;GET NEXT NONBLANK 0934: C9 BB CMP #$BB ;';' START OF COMMENT 0936: FO 04 BEQ FORM9 ;YES 0938: C9 8D CMP #$8D ;A CARRIAGE RETURN ? 093A: DO 80 BNE ERR4 ;NO, ERR 093C: 4C 67 08 FORM9 JMP TRYNEXT 093F: * 093F: B9 OO 02 GETNSP LDA IN,Y 0942: C8 INY 0943: C9 AO CMP #$AO ;GET NEXT NON BLANK CHAR 0945: FO F8 BEQ GETNSP 0947: 60 RTS Keywords: