ADIM82 PLA STA RETADR PLA STA RETADR+1 PLA STA :FILL PLA STA :MCAND ; ELEMENT LENGTH PLA STA :AYSIZE STA :AYBAK PLA STA :AXSIZE STA :AXBAK PLA STA ADDR1 PLA STA ADDR1+1 LDA #0 STA :MCAND+1 LDA #0 TAY STY SCRATCH BEQ :ENTLP :DOADD CLC ADC :AXSIZE TAX TYA ADC SCRATCH TAY TXA :LP ASL :AXSIZE ROL SCRATCH :ENTLP LSR :AYSIZE BCS :DOADD BNE :LP STX :MLIER STY :MLIER+1 LDA #0 STA :PROD STA :PROD+1 STA :PROD+2 STA :PROD+3 LDX #$10 :SHIFTR LSR :MLIER+1 ROR :MLIER BCC :ROTR LDA :PROD+2 CLC ADC :MCAND STA :PROD+2 LDA :PROD+3 ADC :MCAND+1 :ROTR ROR STA :PROD+3 ROR :PROD+2 ROR :PROD+1 ROR :PROD DEX BNE :SHIFTR CLC INC :PROD ; INCREASE BY 3 INC :PROD INC :PROD BCC :NOCAR INC :PROD+1 :NOCAR LDA :FILL ; FILL VALUE LDX :PROD+1 ; NOTE THAT THIS WON'T ; GO BEYOND A 16BIT VALUE; ; ANYTHING HIGHER THAN ; 16BITS IS MORE THAN ; THERE IS MEMORY IN A ; STANDARD APPLE ][ BEQ :PART LDY #0 :FULL STA (ADDR1),Y INY BNE :FULL INC ADDR1+1 DEX BNE :FULL ; LOOP UNTIL PAGES DONE :PART LDX :PROD BEQ :MFEXIT LDY #0 :PARTLP STA (ADDR1),Y INY DEX BNE :PARTLP ; LOOP UNTIL DONE :MFEXIT LDY #0 LDA :AXBAK STA (ADDR1),Y INY LDA :AYBAK STA (ADDR1),Y INY LDA :MCAND STA (ADDR1),Y LDA RETADR+1 PHA LDA RETADR PHA LDY ADDR1 LDX ADDR1+1 LDA :PROD STA RETURN LDA :PROD+1 STA RETURN+1 LDA :PROD+2 STA RETURN+2 LDA :PROD+3 STA RETURN+3 LDA #4 ; SIZE OF RETURN STA RETLEN LDA :MCAND RTS :PROD DS 4 :AXSIZE DS 1 :AYSIZE DS 1 :AXBAK DS 1 :AYBAK DS 1 :MLIER DS 2 :MCAND DS 2 :FILL DS 1