SBTTL "--- ITERATION STUFF ---" ;-------------------------------------------- ; ITERATIONS ; EXECUTE THE ITERATION TABLE AT [ARG2] ; TEST FOR INPUT AFTER EACH ENTRY IS DONE AND ; ------------------------------------------- ITRATE: LDA ARG2+HI STA ARG3+HI ; POINT ARG3 AT TABLE LDA ARG2+LO STA ARG3+LO LDA #00 ; SET OFFSET INTO TABLE=0 STA ARG4+HI STA ARG4+LO JSR ICALC ; POINT [I] AT TABLE LDA (I),Y ; NUMBER OF ENTRIES STA ITICN INY LDA (I),Y ; ENTRY TO START WITH STA ITPNT ; (NORMALLY ENTRY 1) INC ARG4+LO ; POINT AT FISRT WORD IN FIRST ENTRY LDX #1 ITLP2: CPX ITPNT ; SKIP ENTRIES 1 TO ITPNT BEQ ITLOOP JSR NXTENT INX BNE ITLP2 ; BRA ITLOOP: JSR ICALC ; SET (I) CORECTLY LDA (I),Y ; POINT IADR1 AT "HEADER" STA IADR1+HI STY IADR10 INY LDA (I),Y STA IADR1+LO LDY #7 ; CURRENT ITERATION LDA (I),Y PHA ; SAVE TAX INX ; TAKE CARE OF SETING FOR NEXT ITERATION LDY #9 ; NUMBER OF ITERATIONS CMP (I),Y BNE ITSKP2 LDX #1 ; RESTET TO FIRST ITERATION ITSKP2: TXA LDY #7 STA (I),Y ; NEXT ITERATION INY ;=8 LDA (I),Y ; BSET STA BSET LDY #10 ; WIDTH LDA (I),Y STA IX1 TAX INY LDA (I),Y ; HEIGHT STA IY1 TAY JSR MULXY ; FIND WIDTH*HEIGHT PLA ; RESTORE CURRENT ITERATION TAY ITLP3: DEY ; ZERO ALIGN FIRST TIME THRU/ THEN JUST DEX BEQ ITSKP3 LDA MUH ; ADD LENGTH OF ICON (WIDTH*HEIGTH) LDX MUL JSR ADDIA1 JMP ITLP3 ITSKP3: TYA ;=0 LDX #4 JSR ADDIA1 ; SKIP 4 HEADER BYTES LDY #2 ; =2 LDA (I),Y ; ICON XPOS STA ARG1+HI INY ; =3 LDA (I),Y STA ARG1+LO INY ; =4 LDA (I),Y ; ICON YPOS STA ARG2+HI INY ; =5 LDA (I),Y STA ARG2+LO INY ; =6 LDA (I),Y ; NEGATE ITSKP4: STA NEGATE LDA #00 STA MSKFLG ; DISABLE MASKING JSR ITENT ; ENTER DRAW ROUTINE JSR NXTENT ; POINT ARG4 AT NEXT ENTRY LDX ITPNT ; ARE WE DONE YET? CPX ITICN BEQ ITEXI ; YES WE ARE DONE INC ITPNT ; OTHERWISE POINT TO NEXT ENTRY LDA VALUE+HI ; IF INPUT WAS CALLED WITH A NEG INT BMI NONSNS ; DO NOT LOOK FOR INPUT JSR SENSE ; DO WE HAVE AN INPUT CMP #%10001111 BNE ITSKP5 ; GO HANDLE AN INPUT NONSNS: JMP ITLOOP ; OTHERWISE DO NEXT ENTRY ITSKP5: PHA ; SAVE INPUT LDA #00 STA ARG4+HI STA ARG4+LO ; POINT AT TABLE HEADER JSR ICALC INY ; =1 LDA ITPNT ; SAVE STATUS OF HOW FAR WE GOT IN DOING STA (I),Y ; THE TABLE PLA ; RESTORE SENSE JMP PUTBYT ; RETURN SENSE ITEXI: LDA #00 STA ARG4+HI STA ARG4+LO JSR ICALC ; POINT TO TABLE HEADER INY ; =1 TYA STA (I),Y JMP NOIT ;----------------------------- ; SKIP 6 WORDS (1 TABLE ENTRY) ;----------------------------- NXTENT: LDA #6 ; ADD 6 TO ARG4 CLC ADC ARG4+LO STA ARG4+LO BCC NEXI INC ARG4+HI NEXI: RTS ;----------------------------------------------------------- ; ICALC POINTS [I] AT THE RAM ADDRESS OF THE TABLE,OFFSET OF ; ARG3,ARG4 ; AND GENERATES A PURITY ERROR IF [I] POINTS AT PURE CODE. ; ; EXITS: =0 ;------------------------------------------------------------ ICALC: LDY #00 LDA ARG4+LO CLC ADC ARG3+LO STA I+LO LDA ARG4+HI ADC ARG3+HI JMP ICENT ;ENTRY IN PCALC END