the cutting room mirror

Mr. Nutz: Hoppin' Mad (Amiga)

This article has a talk page!
view on tcrf.net

Mr Nutz: Hoppin' Mad was an Amiga spinoff of the 1993 SNES platformer Mr Nutz, that was originally called Timet: the Flying Squirrel until Ocean offered to publish it, where they wanted their own squirrel to be involved instead. The Amiga version also had an unreleased Genesis port.

Uncompiled Source Code#

Genesis Port Code#

The following fragment of unused source code appears on Disk 2. It appears to be code from the unreleased Genesis port, which would confirm that this port was already in development when the Amiga version was released. This particular code appears to be represented in the 2009 source code leak in the file Zoom.asm, which shows a different and likely later version, dated 29 December 1993. The filenames beginning Work: here show that the game was developed on an Amiga with a hard disk drive; in fact, the 2009 leak includes a configuration file for the HiSoft Devpac assembler for Amiga, configured for at least an 640x512 interlaced monitor. By 1993, even most commercial Amiga games were no longer developed on an Amiga, and it was common for Amiga and Genesis games to use a cross-compiler system for MS-DOS like SNASM.

        Custom-Memory
; $FFF000 - $FFFD00     TFMX
; $FFFD00 - $FFFE00     Message-Struktur
; $FFFE00 - $FFFFFF     Stack
;
; ===========================================================================

        Include Source/Labels.asm
        Include Source/Labels.Nutz.asm
        Include Source/Definition.asm
        Include Work:Projects/Megadrive/Karte/Source/Hardware.asm
        Include Work:Projects/Megadrive/Karte/Source/Global.asm

; ===========================================================================

        ;Standart Startup-Code
Reset_Entry trap    #0
        move    #$2700,sr
        move.b  $a10001,d0
        andi.b  #$0f,d0
        beq.s   .Skip
        move.l  #'SEGA',$a14000
.Skip       lea Stack,a7
        bsr Init_Interupts
        move    #$2300,sr
        jsr Black_Screen

        ;Logo zoomen
        bsr Init
        lea IRQ_Vertikal,a0
        move.l  a0,SEGA_WRAM+8
        lea IRQ_Horizontal,a0
        move.l  a0,SEGA_WRAM+2
        bsr Main
        lea IRQ_Vertikal_II,a0
        move.l  a0,SEGA_WRAM+8
        lea Int_Nop,a0
        move.l  a0,SEGA_WRAM+2

        ;Original-Logo uoloaden
        moveq   #TILES_OBJEKT_LL,d0
        jsr Setze_VRAM_Adresse
        lea Logo_Original,a0
        move    #OBJEKT_BREITE*OBJEKT_HÖHE*8-1,d1
.Loop       move.l  (a0)+,(a6)
        dbf d1,.Loop

        ;Playfield B löschen
        move    #$E000>>5,d0
        jsr Setze_VRAM_Adresse
        moveq   #0,d0
        move    #$2000/WORD-1,d1
.Loop_Clear_B   move    d0,(a6)
        dbf d1,.Loop_Clear_B

        ;Tiles für Logo auf Playfield B erzeugen
        move    #Reg_AutoIncData!(64*WORD),4(a6)
        lea $E000+6*WORD,a0
        moveq   #TILES_OBJEKT_LL,d1
        moveq   #OBJEKT_BREITE-1,d3
.Loop_Spalte    move.l  a0,d0
        lsl.l   #2,d0
        lsr #2,d0
        or  #%0100000000000000,d0
        swap    d0
        move.l  d0,4(a6)
        moveq   #OBJEKT_HÖHE-1,d2
.Loop_Zeile move    d1,(a6)
        addq    #1,d1
        dbf d2,.Loop_Zeile
        addq    #WORD,a0
        dbf d3,.Loop_Spalte
        move    #Reg_AutoIncData!(1*WORD),4(a6)

        ;Playfield A löschen
        moveq   #0,d0
        move    #$C000>>5,d0
        jsr Setze_VRAM_Adresse
        moveq   #0,d0
        move    #$2000/WORD-1,d1
.Loop_Clear_A   move    d0,(a6)
        dbf d1,.Loop_Clear_A

        ;VSRAM setzen
        move.l  #SRAMWH<<16!SRAMWL,4(a6)
        move    #-224,d0
        move    d0,(a6)
        moveq   #-48,d0
        move    d0,(a6)

        ;Work-RAM dekodieren
        lea Data.Nutz,a0
        lea SEGA_WRAM+12,a1
        bsr Decode

        ;Nutz&Faust uploaden
        moveq   #0,d0
        move    #TILES2_NUTZ,d0
        jsr Setze_VRAM_Adresse
        lea Nutz.T,a0
        move    #484*8-1,d0
.Loop_Upload_Nutz   move.l  (a0)+,(a6)
        dbf d0,.Loop_Upload_Nutz
        moveq   #0,d0
        move    #TILES2_FAUST,d0
        jsr Setze_VRAM_Adresse
        lea Faust.T,a0
        move    #400*8-1,d0
.Loop_Upload_Faust  move.l  (a0)+,(a6)
        dbf d0,.Loop_Upload_Faust

        ;Playfield A (Nutz) erzeugen
        move    #$C000>>5,d0
        jsr Setze_VRAM_Adresse
        lea Nutz.M,a0
        moveq   #36-1,d3
.Loop_Nutz3 moveq   #TILES_EMPTY,d2
        moveq   #32-1,d0
.Loop_Nutz1 move    (a0)+,d1
        add #TILES2_NUTZ,d1
        move    d1,(a6)
        dbf d0,.Loop_Nutz1
        moveq   #32-1,d0
.Loop_Nutz2 

Amiga Build Script#

A leftover script fragment appears several times on Disk 2. This script appears to compile Disk 1 of the Amiga version to the third floppy disk drive. Many commercial Amiga games used non-standard floppy disk formats as an anti-piracy measure.

Ask "Make Disk #1?"
If Warn

        ;Work:Files/Global/Ocean
        Copy Work:Files/Global/Ocean.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 2 0

        ;Work:Files/Global/Neon
        Copy Work:Files/Global/Neon.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 3 0

        ;Work:Files/Music/Music.Titel
        Copy Work:Files/Music/Music.Titel.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 4 1

        ;Work:Files/Global/Intro
        Copy Work:Files/Global/Intro.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 13 1

        ;Work:Files/Global/Highscore
        Copy Work:Files/Global/Highscore.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 19 0

        ;Work:Files/Global/Faust
        Copy Work:Files/Global/Faust.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 19 1

        ;Work:Files/Outro/Outro
        Copy Work:Files/Outro/Outro.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 20 1

        ;Work:Files/Global/Message
        Copy Work:Files/Global/Message.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 25 1

        ;Work:Files/Global/Nutz.Font
        Copy Work:Files/Global/Nutz.Font.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 29 1

        ;Work:Files/Music/Music.Water
        Copy Work:Files/Music/Music.Water.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 32 0

        ;Work:Files/Karte/Karte.Memory
        Copy Work:Files/Karte/Karte.Memory.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 37 0

        ;Work:Files/Karte/Karte.Main
        Copy Work:Files/Karte/Karte.Main.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 42 0

        ;Work:Files/Karte/Karte.Englisch
        Copy Work:Files/Karte/Karte.Englisch.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 45 0

        ;Work:Files/Karte/Karte.French
        Copy Work:Files/Karte/Karte.French.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 47 0

        ;Work:Files/Music/Music.Natur
        Copy Work:Files/Music/Music.Natur.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 49 0

        ;Work:Files/Karte/Karte.Natur
        Copy Work:Files/Karte/Karte.Natur.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 54 0

        ;Work:Files/Natur/Natur.Main
        Copy Work:Files/Natur/Natur.Main.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 56 0

        ;Work:Files/Natur/Natur.Parallax
        Copy Work:Files/Natur/Natur.Parallax.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 63 1

        ;Work:Files/Natur/Natur.Level.1
        Copy Work:Files/Natur/Natur.Level.1.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 64 1

        ;Work:Files/Natur/Natur.Level.2
        Copy Work:Files/Natur/Natur.Level.2.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 65 1

        ;Work:Files/Natur/Natur.Level.3
        Copy Work:Files/Natur/Natur.Level.3.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 67 0

        ;Work:Files/Natur/Natur.Level.4
        Copy Work:Files/Natur/Natur.Level.4.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 68 0

        ;Work:Files/Natur/Natur.Level.5
        Copy Work:Files/Natur/Natur.Level.5.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 69 0

        ;Work:Files/Natur/Natur.Level.6
        Copy Work:Files/Natur/Natur.Level.6.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 70 1

        ;Work:Files/Natur/Natur.Level.7
        Copy Work:Files/Natur/Natur.Level.7.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 71 0

        ;Work:Files/Natur/Natur.Level.8
        Copy Work:Files/Natur/Natur.Level.8.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 71 1

        ;Work:Files/Natur/Natur.Level.9
        Copy Work:Files/Natur/Natur.Level.9.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 72 0

        ;Work:Files/Natur/Natur.Startup.1
        Copy Work:Files/Natur/Natur.Startup.1.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 72 1

        ;Work:Files/Natur/Natur.Startup.2
        Copy Work:Files/Natur/Natur.Startup.2.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 73 0

        ;Work:Files/Natur/Natur.Startup.3
        Copy Work:Files/Natur/Natur.Startup.3.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 73 1

        ;Work:Files/Natur/Natur.Startup.4
        Copy Work:Files/Natur/Natur.Startup.4.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 74 0

        ;Work:Files/Natur/Natur.Startup.5
        Copy Work:Files/Natur/Natur.Startup.5.pck RAM:Temp
        Write DF2: RAM:Temp $4489 $2AA9 74 1

        ;Work:Files/Natur/Natur.Startup.6
        Copy Work:Files/Natur/Natur.Startup.6.pck RAM:Temp
        Write D