 TEXT 
Begin:
                  PEA       0.W 
                  MOVE.W    #$20,-(A7)
                  TRAP      #1
                  ADDQ.W    #6,A7 
                  BSR       MAP_GENERATOR 
                  BSR       MAP_LIGHT 
                  BSR       CALC_Z_TAB
                  BSR       DEF_SCREEN
                  LEA       NFDSP,A6
                  BSR       DSP_LOAD
                  BSR       SEND_DATA_2_DSP 
                  BSR       SET_REZ 
                  BSR       TEST
                  BSR       TEST2 
                  MOVE.W    #7,-(A7)
                  TRAP      #1
                  ADDQ.L    #2,A7 
                  BSET      #0,$FFFF82C3.W
                  MOVE.L    #$F0,$FFFF9800.W
VBL_LOOPZ:        MOVE.W    #$25,-(A7)
                  TRAP      #$E 
                  ADDQ.L    #2,A7 
                  MOVE.B    L0035,$FFFF8201.W 
                  MOVE.B    L0036,$FFFF8203.W 
                  MOVE.B    L0037,$FFFF820D.W 
                  MOVE.W    Y_POS,D0
                  LSL.W     #7,D0 
                  OR.W      X_POS,D0
L0001:            BTST      #1,$FFFFA202.W
                  BEQ.S     L0001 
                  MOVE.W    D0,$FFFFA206.W
                  MOVE.W    #$7E0,D4
                  LEA       $FFFFA206.W,A6
                  MOVEA.L   BACK,A0 
RECEPT0:          BTST      #0,$FFFFA202.W
                  BEQ.S     RECEPT0 
                  MOVE.W    (A6),D0 
                  BMI.S     END_MM
                  MOVE.W    (A6),D1 
                  MOVE.W    (A6),D2 
                  MOVE.W    (A6),D3 
                  LEA       (A0,D0.W*4),A1
                  MOVE.W    D2,D5 
                  AND.W     D4,D5 
MM_GOURO:         MOVE.W    D5,(A1)+
                  ADD.W     D3,D2 
                  MOVE.W    D5,(A1)+
                  MOVE.W    D2,D5 
                  AND.W     D4,D5 
                  LEA       764(A1),A1
                  DBF       D1,MM_GOURO 
                  BRA.S     RECEPT0 
END_MM:           MOVEA.L   BACK,A0 
                  LEA       $FFFFA206.W,A6
                  MOVE.W    #$1E,D7 
                  SWAP      D7
                  MOVE.W    #$1E,D7 
RECEPT1:          BTST      #0,$FFFFA202.W
                  BEQ.S     RECEPT1 
                  MOVE.W    (A6),D0 
                  BMI.S     END_MM_CLS
                  MOVE.W    (A6),D1 
                  LEA       (A0,D0.W*4),A1
MM_CLS:           MOVE.L    D7,(A1) 
                  LEA       768(A1),A1
                  DBF       D1,MM_CLS 
                  BRA       RECEPT1 
END_MM_CLS:       MOVE.L    PHYSIK,D0 
                  MOVE.L    BACK,PHYSIK 
                  MOVE.L    D0,BACK 
                  MOVE.B    $FFFFFC02.W,D1
                  MOVE.W    Y_POS,D0
                  CMPI.B    #$48,D1 
                  BNE.S     NO_UP 
                  SUBQ.W    #1,D0 
NO_UP:            CMPI.B    #$50,D1 
                  BNE.S     NO_DOWN 
                  ADDQ.W    #1,D0 
NO_DOWN:          ANDI.W    #$7F,D0 
                  MOVE.W    D0,Y_POS
                  MOVE.W    X_POS,D0
                  CMPI.B    #$4B,D1 
                  BNE.S     NO_LEFT 
                  SUBQ.W    #1,D0 
NO_LEFT:          CMPI.B    #$4D,D1 
                  BNE.S     NO_RIGHT
                  ADDQ.W    #1,D0 
NO_RIGHT:         ANDI.W    #$7F,D0 
                  MOVE.W    D0,X_POS
                  CMPI.B    #$39,$FFFFFC02.W
                  BNE       VBL_LOOPZ 
                  BSR       TEND_REZ
                  CLR.W     -(A7) 
                  TRAP      #1
SEND_DATA_2_DSP:  LEA       $FFFFA204.W,A0
WAIT_DSP1:        BTST      #1,$FFFFA202.W
                  BEQ       WAIT_DSP1 
                  MOVEQ     #1,D0 
                  MOVE.W    #$81,D7 
SEND1:            MOVE.L    #$800000,D1 
                  DIVU.L    D0,D1 
                  MOVE.L    D1,(A0) 
                  ADDQ.L    #1,D0 
                  DBF       D7,SEND1
WAIT_DSP2:        BTST      #1,$FFFFA202.W
                  BEQ       WAIT_DSP2 
                  LEA       Z_TAB,A1
                  MOVEQ     #7,D6 
                  MOVE.W    #$3B,D7 
SEND2:            MOVEQ     #0,D0 
                  MOVE.W    (A1)+,D0
                  MOVE.L    D0,(A0) 
                  MOVEQ     #0,D0 
                  MOVE.W    (A1)+,D0
                  LSL.L     D6,D0 
                  MOVE.L    D0,(A0) 
                  MOVEQ     #0,D0 
                  MOVE.W    (A1)+,D0
                  LSL.L     D6,D0 
                  MOVE.L    D0,(A0) 
                  DBF       D7,SEND2
WAIT_DSP0:        BTST      #1,$FFFFA202.W
                  BEQ       WAIT_DSP0 
                  LEA       MAP,A1
                  LEA       COLOR_MAP,A2
                  MOVE.W    #$3FFF,D7 
SEND0:            MOVEQ     #0,D0 
                  MOVE.B    (A2)+,D0
                  SWAP      D0
                  MOVE.W    (A1)+,D0
                  MOVE.L    D0,(A0) 
                  DBF       D7,SEND0
                  RTS 
CALC_Z_TAB:       LEA       Z_TAB,A0
                  MOVEQ     #0,D0 
                  MOVE.W    #8,D0 
                  MOVE.L    #$10000,D1
                  MOVEQ     #0,D2 
                  MOVEQ     #0,D6 
                  MOVE.W    #$60,D4 
                  MOVE.W    #7,D5 
                  MOVEQ     #$3B,D7 
CALC_Z_TAB_LOOPZ: MOVE.W    #$80,D3 
                  ADD.W     D2,D3 
                  ADD.W     D0,D3 
                  SUB.W     D6,D3 
                  MOVE.W    D0,D2 
                  MOVE.W    D3,(A0)+
                  SWAP      D0
                  MOVE.L    D0,D3 
                  DIVU      D4,D3 
                  MOVE.W    D3,(A0)+
                  MULU      #$C0,D3 
                  SWAP      D3
                  MOVE.W    D2,D6 
                  ADD.W     D6,D6 
                  SUB.W     D3,D6 
                  MOVEQ     #0,D3 
                  MOVE.W    D4,D3 
                  SWAP      D3
                  LSR.L     D5,D3 
                  DIVU      D2,D3 
                  MOVE.W    D3,(A0)+
                  ADD.L     D1,D0 
                  SWAP      D0
                  DBF       D7,CALC_Z_TAB_LOOPZ 
                  RTS 
MAP_LIGHT:        LEA       MAP,A0
                  LEA       COLOR_MAP,A1
                  MOVE.W    #4,D6 
                  MOVE.W    #$3FFF,D7 
NEXT_LIGHT_TO_CA: MOVE.W    (A0)+,D0
                  SUB.W     (A0),D0 
                  ASR.W     D6,D0 
                  ADDI.W    #$20,D0 
                  CMPI.W    #1,D0 
                  BPL.S     NO_LIGHT_NEG
                  MOVEQ     #1,D0 
                  BRA.S     NO_TOO_LIGHT
NO_LIGHT_NEG:     CMPI.W    #$3F,D0 
                  BLS.S     NO_TOO_LIGHT
                  MOVEQ     #$3F,D0 
NO_TOO_LIGHT:     MOVE.B    D0,(A1)+
                  DBF       D7,NEXT_LIGHT_TO_CA 
                  RTS 
MAP_GENERATOR:    LEA       MAP,A6
                  MOVE.W    #$3FFF,D6 
                  MOVE.W    #$11,-(A7)
                  TRAP      #$E 
                  ADDQ.L    #2,A7 
                  AND.W     D6,D0 
                  ADDI.W    #$2000,D0 
                  MOVE.W    D0,(A6) 
                  MOVE.W    #$11,-(A7)
                  TRAP      #$E 
                  ADDQ.L    #2,A7 
                  AND.W     D6,D0 
                  ADDI.W    #$2000,D0 
                  MOVE.W    D0,128(A6)
                  MOVE.W    #$11,-(A7)
                  TRAP      #$E 
                  ADDQ.L    #2,A7 
                  AND.W     D6,D0 
                  ADDI.W    #$2000,D0 
                  MOVE.W    D0,16384(A6)
                  MOVE.W    #$11,-(A7)
                  TRAP      #$E 
                  ADDQ.L    #2,A7 
                  AND.W     D6,D0 
                  ADDI.W    #$2000,D0 
                  MOVE.W    D0,16512(A6)
                  MOVE.W    #$20,D7 
NEXT_PASS:        LSR.W     #1,D6 
                  MOVE.W    D7,D4 
P1_PART_Y:        MOVE.W    D7,D5 
P1_PART_X:        MOVE.W    #$11,-(A7)
                  TRAP      #$E 
                  ADDQ.L    #2,A7 
                  AND.W     D6,D0 
                  MOVE.W    D6,D1 
                  ADDQ.W    #1,D1 
                  LSR.W     #1,D1 
                  SUB.W     D1,D0 
                  MOVEQ     #0,D2 
                  MOVEQ     #0,D3 
                  MOVE.W    D4,D1 
                  SUB.W     D7,D1 
                  LSL.W     #7,D1 
                  ADD.W     D5,D1 
                  SUB.W     D7,D1 
                  MOVE.W    (A6,D1.W*2),D2
                  MOVE.W    D4,D1 
                  ADD.W     D7,D1 
                  ANDI.W    #$7F,D1 
                  LSL.W     #7,D1 
                  ADD.W     D5,D1 
                  SUB.W     D7,D1 
                  MOVE.W    (A6,D1.W*2),D3
                  ADD.L     D3,D2 
                  MOVE.W    D4,D1 
                  ADD.W     D7,D1 
                  ANDI.W    #$7F,D1 
                  LSL.W     #7,D1 
                  MOVE.W    D5,D3 
                  ADD.W     D7,D3 
                  ANDI.W    #$7F,D3 
                  ADD.W     D3,D1 
                  MOVE.W    (A6,D1.W*2),D3
                  ADD.L     D3,D2 
                  MOVE.W    D4,D1 
                  SUB.W     D7,D1 
                  LSL.W     #7,D1 
                  MOVE.W    D5,D3 
                  ADD.W     D7,D3 
                  ANDI.W    #$7F,D3 
                  ADD.W     D3,D1 
                  MOVE.W    (A6,D1.W*2),D3
                  ADD.L     D3,D2 
                  LSR.L     #2,D2 
                  ADD.W     D0,D2 
                  MOVE.W    D4,D1 
                  LSL.W     #7,D1 
                  ADD.W     D5,D1 
                  MOVE.W    D2,(A6,D1.W*2)
                  MOVE.W    D7,D1 
                  ADD.W     D1,D1 
                  ADD.W     D1,D5 
                  CMPI.W    #$80,D5 
                  BCS       P1_PART_X 
                  ADD.W     D1,D4 
                  CMPI.W    #$80,D4 
                  BCS       P1_PART_Y 
                  MOVE.W    D7,D4 
P2_PART_Y:        MOVEQ     #0,D5 
P2_PART_X:        MOVE.W    #$11,-(A7)
                  TRAP      #$E 
                  ADDQ.L    #2,A7 
                  AND.W     D6,D0 
                  MOVE.W    D6,D1 
                  ADDQ.W    #1,D1 
                  LSR.W     #1,D1 
                  SUB.W     D1,D0 
                  MOVEQ     #0,D2 
                  MOVEQ     #0,D3 
                  MOVE.W    D4,D1 
                  SUB.W     D7,D1 
                  LSL.W     #7,D1 
                  ADD.W     D5,D1 
                  MOVE.W    (A6,D1.W*2),D2
                  MOVE.W    D4,D1 
                  LSL.W     #7,D1 
                  MOVE.W    D5,D3 
                  SUB.W     D7,D3 
                  ANDI.W    #$7F,D3 
                  ADD.W     D3,D1 
                  MOVE.W    (A6,D1.W*2),D3
                  ADD.L     D3,D2 
                  MOVE.W    D4,D1 
                  ADD.W     D7,D1 
                  ANDI.W    #$7F,D1 
                  LSL.W     #7,D1 
                  ADD.W     D5,D1 
                  MOVE.W    (A6,D1.W*2),D3
                  ADD.L     D3,D2 
                  MOVE.W    D4,D1 
                  LSL.W     #7,D1 
                  MOVE.W    D5,D3 
                  ADD.W     D7,D3 
                  ANDI.W    #$7F,D3 
                  ADD.W     D3,D1 
                  MOVE.W    (A6,D1.W*2),D3
                  ADD.L     D3,D2 
                  LSR.L     #2,D2 
                  ADD.W     D0,D2 
                  MOVE.W    D4,D1 
                  LSL.W     #7,D1 
                  ADD.W     D5,D1 
                  MOVE.W    D2,(A6,D1.W*2)
                  SUB.W     D7,D4 
                  ADD.W     D7,D5 
                  MOVE.W    #$11,-(A7)
                  TRAP      #$E 
                  ADDQ.L    #2,A7 
                  AND.W     D6,D0 
                  MOVE.W    D6,D1 
                  ADDQ.W    #1,D1 
                  LSR.W     #1,D1 
                  SUB.W     D1,D0 
                  MOVEQ     #0,D2 
                  MOVEQ     #0,D3 
                  MOVE.W    D4,D1 
                  SUB.W     D7,D1 
                  ANDI.W    #$7F,D1 
                  LSL.W     #7,D1 
                  ADD.W     D5,D1 
                  MOVE.W    (A6,D1.W*2),D2
                  MOVE.W    D4,D1 
                  LSL.W     #7,D1 
                  ADD.W     D5,D1 
                  SUB.W     D7,D1 
                  MOVE.W    (A6,D1.W*2),D3
                  ADD.L     D3,D2 
                  MOVE.W    D4,D1 
                  ADD.W     D7,D1 
                  ANDI.W    #$7F,D1 
                  LSL.W     #7,D1 
                  ADD.W     D5,D1 
                  MOVE.W    (A6,D1.W*2),D3
                  ADD.L     D3,D2 
                  MOVE.W    D4,D1 
                  LSL.W     #7,D1 
                  MOVE.W    D5,D3 
                  ADD.W     D7,D3 
                  ANDI.W    #$7F,D3 
                  ADD.W     D3,D1 
                  MOVE.W    (A6,D1.W*2),D3
                  ADD.L     D3,D2 
                  LSR.L     #2,D2 
                  ADD.W     D0,D2 
                  MOVE.W    D4,D1 
                  LSL.W     #7,D1 
                  ADD.W     D5,D1 
                  MOVE.W    D2,(A6,D1.W*2)
                  ADD.W     D7,D4 
                  ADD.W     D7,D5 
                  CMPI.W    #$80,D5 
                  BCS       P2_PART_X 
                  MOVE.W    D7,D1 
                  ADD.W     D1,D1 
                  ADD.W     D1,D4 
                  CMPI.W    #$80,D4 
                  BCS       P2_PART_Y 
                  LSR.W     #1,D7 
                  BNE       NEXT_PASS 
                  MOVE.W    MAP,L002D 
                  RTS 
TEST:             LEA       MAP,A0
                  MOVEA.L   BACK,A1 
                  MOVE.W    #$7E0,D5
                  MOVEQ     #$7F,D6 
TEST_Y:           MOVEQ     #$7F,D7 
TEST_X:           MOVE.W    (A0)+,D0
                  LSL.W     #1,D0 
                  LSR.W     #5,D0 
                  AND.W     D5,D0 
                  MOVE.W    D0,(A1)+
                  DBF       D7,TEST_X 
                  ADDA.W    #$200,A1
                  DBF       D6,TEST_Y 
                  RTS 
TEST2:            LEA       COLOR_MAP,A0
                  MOVEA.L   BACK,A1 
                  ADDA.W    #$102,A1
                  MOVE.W    #$7E0,D5
                  MOVEQ     #$7F,D6 
TEST_Y2:          MOVEQ     #$7F,D7 
TEST_X2:          MOVE.B    (A0)+,D0
                  LSL.W     #5,D0 
                  AND.W     D5,D0 
                  MOVE.W    D0,(A1)+
                  DBF       D7,TEST_X2
                  ADDA.W    #$200,A1
                  DBF       D6,TEST_Y2
                  RTS 
DEF_SCREEN:       MOVE.L    #L003A,D0 
                  ANDI.B    #$FC,D0 
                  MOVE.L    D0,BACK 
                  ADDI.L    #$16800,D0
                  MOVE.L    D0,PHYSIK 
                  RTS 
SET_REZ:          DC.B      $A0,$0A 
                  MOVE.W    #2,-(A7)
                  TRAP      #$E 
                  ADDQ.L    #2,A7 
                  MOVE.L    D0,OLD_PBAS 
                  MOVE.W    #$FFFF,-(A7)
                  MOVE.W    #$58,-(A7)
                  TRAP      #$E 
                  ADDQ.L    #4,A7 
                  MOVE.W    D0,OLD_REZO 
                  MOVE.W    #$44,-(A7)
                  MOVE.W    #3,-(A7)
                  MOVE.L    BACK,-(A7)
                  MOVE.L    BACK,-(A7)
                  MOVE.W    #5,-(A7)
                  TRAP      #$E 
                  ADDA.L    #$E,A7
                  MOVE.W    #$25,-(A7)
                  TRAP      #$E 
                  ADDQ.L    #2,A7 
                  RTS 
TEND_REZ:         MOVE.W    OLD_REZO,-(A7)
                  MOVE.W    #3,-(A7)
                  MOVE.L    OLD_PBAS,-(A7)
                  MOVE.L    OLD_PBAS,-(A7)
                  MOVE.W    #5,-(A7)
                  TRAP      #$E 
                  ADDA.L    #$E,A7
                  DC.B      $A0,$09 
                  RTS 
DSP_LOAD:         PEA       YAV 
                  PEA       XAV 
                  MOVE.W    #$6A,-(A7)
                  TRAP      #$E 
                  ADDA.L    #$A,A7
                  MOVE.L    YAV,-(A7) 
                  MOVE.L    XAV,-(A7) 
                  MOVE.W    #$6B,-(A7)
                  TRAP      #$E 
                  ADDA.L    #$A,A7
                  PEA       BUF_DSP 
                  MOVE.W    #3,-(A7)
                  PEA       (A6)
                  MOVE.W    #$6C,-(A7)
                  TRAP      #$E 
                  ADDA.L    #$C,A7
                  RTS 
 DATA 
NFDSP:            DC.B      $6D,$61,$72,$73,$2E,$6C,$6F,$64,$00,$00 
X_POS:            DC.B      $00,$7F 
Y_POS:            DC.B      $00,$0A 
 BSS
MAP:              DS.B      32768 
L002D:            DS.W      1 
COLOR_MAP:        DS.B      16384 
Z_TAB:            DS.B      1128
XAV:              DS.L      1 
YAV:              DS.L      1 
BUF_DSP:          DS.B      8000
BACK:             DS.L      1 
PHYSIK:           DS.B      1 
L0035:            DS.B      1 
L0036:            DS.B      1 
L0037:            DS.B      1 
OLD_REZO:         DS.W      1 
OLD_PBAS:         DS.B      256008
L003A:            DS.B      368640
ZUEND: END
