Sachverhalt: A. Am 15. September 2002 bestellte X._ bei A._ tele-fonisch ein halbes Kilogramm Heroin. Der Interessent erklärte, dieses zuerst testen zu wollen. Am Abend des gleichen Tages wurde ihm zu diesem Zweck beim Bahnhof Zürich-Stadelhofen ein Muster von Heroin übergeben. Da X._ die Qualität des Heroins bemängelte, kam es nicht zum beabsichtigten Geschäft. Am 19. September 2002 verkaufte A._ Y._ bei einem Treffen in Dübendorf 55 Gramm Heroin zum Preis von ca. Fr. 1'400.--. Er selber hatte die Drogen zuvor für ca. Fr. 1'100.-- erworben. Am 22. September 2002 nahm A._ von einem unter dem Namen Z._ bekannten Mann eine Bestellung von 10 Gramm Kokain und einem Kilogramm Streckmittel entgegen. Er besorgte darauf diesen Stoff bei einem Lieferanten und händigte ihn am 22. September 2002 dem Abnehmer in Regensdorf aus. Schliesslich begab sich A._ am 14. Oktober 2002 zur Asylbewerberunterkunft in Dübendorf, um dort Y._ 400 Gramm Heroin und 750 Gramm Streckmittel zu verkaufen. Vor der Übergabe wurde er verhaftet. Bei seiner Festnahme führte er 409 Gramm Heroin (Reinheit 3 %) und 750 Gramm Streckmittel sowie einen Revolver "Arminius" und fünf Patronen mit sich. Die Waffe und die dazugehörige Munition hatte er ohne die dafür erforderliche Bewilligung erworben. Das Bezirksgericht Zürich verurteilte A._ am 22. Oktober 2003 wegen mehrfacher und teilweise qualifizierter Widerhandlung gegen das Betäubungsmittelgesetz sowie wegen Widerhandlung gegen das Waffengesetz zu 24 Monaten Gefängnis. Zugleich widerrief es den bedingten Vollzug von zwei früher ausgesprochenen Strafen von 7 Tagen Gefängnis und 60 Tagen Gefängnis. Das Obergericht des Kantons Zürich bestätigte am 14. Mai 2004 dieses Urteil vollumfänglich. B. A._ erhebt eidgenössische Nichtigkeitsbeschwerde beim Bundesgericht und beantragt, es sei das Urteil des Obergerichts aufzuheben und die Sache zur Neubeurteilung an diese Instanz zurückzuweisen. Das Obergericht verzichtet auf eine Stellungnahme zur Beschwerde. Eine Vernehmlassung der Staatsanwaltschaft wurde nicht eingeholt.