;BITPLANEFINDERV1.0_SOURCE
==========================

;OO:
;CLR.L D0
;MOVE.B $BFEC01,D0
;BTST #10,$DFF016
;BNE OO
;RTS

o:

EXECBASE = 4
KEYBOARD             = $BFEC01
; --------- EXEC ----------
FORBID               = -132
PERMIT               = -138
ALLOCRASTER          = -492
FREERASTER           = -498
GETMSG               = -372
REPLYMSG             = -378
WAITPORT             = -384
; ---------- GRAPHICS ------------
RECFILL              = -306
DRAW                 = -246
MOVE                 = -240
TEXT                 = -60
SETAPEN              = -342
SETBPEN              = -348
OPENLIBRARY          = -408
FREESPRITE           = -414
CLOSELIBRARY         = -414
CLEARSCREEN          = -48
INITRASTPORT         = -198
;---------- DOS -------------
OPEN                 = -30
WRITE                = -48
CLOSE                = -36
;------- INTUITION --------
OPENWINDOW           = -204
CLOSEWINDOW          = -72
S:
START:
MOVE.L EXECBASE,A6
LEA GFXNAME,A1
JSR OPENLIBRARY(A6)
MOVE.L D0,GFXBASE
LEA INTNAME,A1
JSR OPENLIBRARY(A6)
MOVE.L D0,INTBASE
LEA DOSNAME,A1
JSR OPENLIBRARY(A6)
MOVE.L D0,DOSBASE
MOVE.L GFXBASE,A6
MOVE.L #00,D0
JSR FREESPRITE(A6)
MOVE.L #RASTPORT,A1
JSR INITRASTPORT(A6)
MOVE.L #BITMAP,RASTPORT+4
;-----------SPEICHER RESERVIEREN---------
MOVE.L GFXBASE,A6
MOVE.L #10,D0
MOVE.L #1000,D1
JSR ALLOCRASTER(A6)
MOVE.L D0,CLISTE
MOVE.L #100,D0
MOVE.L #200,D1
JSR ALLOCRASTER(A6)
MOVE.L D0,SPRITE1
MOVE.L GFXBASE,A6
MOVE.L #800,D0
MOVE.L #70,D1
JSR ALLOCRASTER(A6)
MOVE.L D0,BITMAP1
MOVE.L #800,D0
MOVE.L #70,D1
JSR ALLOCRASTER(A6)
MOVE.L D0,BITMAP2
; ------------
; OPEN WINDOW
; ------------
MOVE.L INTBASE,A6
LEA WINDOWDATEN,A0
JSR OPENWINDOW(A6)
MOVE.L D0,WINDOWPOINTER
MOVE.L D0,A0
MOVE.L 86(A0),MESSAGEPORT
MOVE.L GFXBASE,A6
; ---


; ----- PLANES IN RASTPORT & COPPERLIST SCHREIBEN ------
MOVE.L BITMAP1,PLANE1
MOVE.W BITMAP1,BITPLANE1+2
MOVE.W BITMAP1+2,BITPLANE1+6
MOVE.L BITMAP2,PLANE2
MOVE.W BITMAP2,BITPLANE2+2
MOVE.W BITMAP2+2,BITPLANE2+6
; ----------------------------------------------
; SPRITEPUFFER MIT $FFFF AUFFUELLEN (FARBE 20)
; ----------------------------------------------
MOVE.L SPRITE1,A0
MOVE.L #03,D4
Z6:
MOVE.L #50-1,D1 
Z4:
MOVE.W #%1111111111111111,(A0)
MOVE.W #%1111111111111111,2(A0)
ADDQ.L #4,A0
DBRA D1,Z4
MOVE.L #50-1,D1 
Z5:
MOVE.W #%0000000000000000,(A0)
MOVE.W #%1111111111111111,2(A0)
ADD.L #4,A0
DBRA D1,Z5
DBRA D4,Z6
; -----------------------------------------------
; SPRITEPOINTER (etc.) IN DER COPPERLIST SETZEN
; -----------------------------------------------
MOVE.L SPRITE1,SPRITE1_HILFSREG
LEA SPRITEPOINTER+2,A0
LEA SPRITEPOINTER+6,A1
MOVE.L #07,D2
Z3:
MOVE.W SPRITE1_HILFSREG,(A0)
MOVE.W SPRITE1_HILFSREG+2,(A1)
ADDQ.L #8,A0
ADDQ.L #8,A1
ADD.L #200,SPRITE1_HILFSREG
DBRA D2,Z3
; -----------------------------------
; SPRITE CONTROL WORDS SCHREIBEN
; -----------------------------------
MOVE.L SPRITE1,A0
MOVE.L #45,D0
MOVE.L #57,D1
MOVE.L #07,D2
Z1:
MOVE.B D0,(A0)
MOVE.B D1,1(A0)
MOVE.W #$5D01,2(A0)
ADD.L #200,A0
ADD.L #6,D1
DBRA D2,Z1
; ----- CONSTRUIEREN ------
MOVE.L #RASTPORT,A1
MOVE.L #00,D0
JSR SETAPEN(A6)
MOVE.L #RASTPORT,A1
MOVE.L #0,D0
MOVE.L #0,D1
MOVE.L #672,D2
MOVE.L #60,D3
JSR RECFILL(A6)
MOVE.L #01,D0
JSR APEN
MOVE.L #RASTPORT,A1
MOVE.L #536,D0
MOVE.L #04,D1
MOVE.L #670,D2
MOVE.L #52,D3
JSR RECFILL(A6)
MOVE.L #RASTPORT,A1
MOVE.L #430,D0
MOVE.L #04,D1
MOVE.L #530,D2
MOVE.L #52,D3
JSR RECFILL(A6)
MOVE.L #RASTPORT,A1
MOVE.L #195,D0
MOVE.L #04,D1
MOVE.L #424,D2
MOVE.L #52,D3
JSR RECFILL(A6)
MOVE.L #00,D0
JSR APEN
MOVE.L #RASTPORT,A1
MOVE.L #195,D0
MOVE.L #17,D1
MOVE.L #424,D2
MOVE.L #19,D3
JSR RECFILL(A6)
; -----------------------------
MOVE.L #RASTPORT,A1
MOVE.L #276,D0
MOVE.L #19,D1
MOVE.L #280,D2
MOVE.L #53,D3
JSR RECFILL(A6)
; ------------------------------
MOVE.L #02,D0
MOVE.L #01,D5
JSR ABPEN 
MOVE.L #RASTPORT,A1
MOVE.L #11,D1
MOVE.L #541,D0
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #TEXT1,A0
MOVE.L #16,D0
JSR TEXT(A6)
; --------------------------------
; TITLE ZEILE PRINTEN
; --------------------------------
MOVE.L #03,D0
MOVE.L #01,D5
JSR ABPEN
MOVE.L #RASTPORT,A1
MOVE.L #13,D1
MOVE.L #202,D0
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #TEXT17,A0
MOVE.L #27,D0
JSR TEXT(A6)
MOVE.L #02,D0
MOVE.L #01,D5
JSR ABPEN
;---- POINTER (00000) SCHREIBEN ------
MOVE.L #04,D5
MOVE.L #19,D4
X1:
MOVE.L #RASTPORT,A1
MOVE.L #542,D0
MOVE.L D4,D1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #16,D0
MOVE.L #TEXT2,A0
JSR TEXT(A6)
ADD.L #08,D4
DBRA D5,X1
; --------------------------------------
MOVE.L #04,D5
MOVE.L #19,D4
MOVE.L #TEXT3,A4
X2:
MOVE.L #RASTPORT,A1
MOVE.L #542,D0
MOVE.L D4,D1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #1,D0
MOVE.L A4,A0
JSR TEXT(A6)
ADD.L #08,D4
ADD.L #1,A4
DBRA D5,X2
; --------------------------------------------- 
MOVE.L #11,D5
MOVE.L #TEXT8,A2
MOVE.L #05,D4
X30:
MOVE.L #RASTPORT,A1
MOVE.L #433,D0
MOVE.L D5,D1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L A2,A0
MOVE.L #12,D0
JSR TEXT(A6)
ADD.L #12,A2
ADDQ.L #8,D5
DBRA D4,X30
; --------------------------------------------
MOVE.L #27,D5
MOVE.L #TEXT12,A2
MOVE.L #03,D4
H30:
MOVE.L #RASTPORT,A1
MOVE.L #284,D0
MOVE.L D5,D1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L A2,A0
MOVE.L #13,D0
JSR TEXT(A6)
ADD.L #13,A2
ADDQ.L #8,D5
DBRA D4,H30
; ---- PRINT RGB -----
MOVE.L #RASTPORT,A1
MOVE.L #197,D0
MOVE.L #27,D1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #TEXT_RGB,A0
MOVE.L #3,D0
JSR TEXT(A6)
;----
MOVE.L #AT1,REQTEXT
MOVE.L #GADG15,GADG
BSR REQUEST
WGADG2:
BSR GETMESSAGE
MOVE.L D0,A0
MOVE.L 20(A0),D0
CMP #$40,D0
BEQ K2
BSR REPLYMESSAGE
BRA WGADG2
K2:
MOVE.L 28(A0),D0
CMP.L #GADG15,D0
BEQ ABOUT 
BRA WGADG 
ABOUT:
BSR REPLYMESSAGE
BSR ENDREQUEST
MOVE.L GFXBASE,A6
MOVE.L #GADG1,GADG
MOVE.L #ENTER_FILENAME,REQTEXT
JSR PALETTEWRITEN
JSR PRINTCOLORN1
JSR PLANEHOEHE
JSR MODULOPRINT
JSR DFVIEWLORES
JSR PLANES_WRITEN
JSR PRINT1
JSR PRINT2
JSR GESAMTBREITE
JSR OFFSET
JSR V10
JSR COPY_CL
JSR COPPERLISTON
; ---------------------------
; SCROLL DIE GRAPHIC HEREIN
; ---------------------------
MOVE.L #53,D4
WB1:
MOVE.L GFXBASE,A6
JSR -270(A6)
SUB.W #$0100,GRAPHIC_SCROLL
JSR COPY_CL
DBRA D4,WB1
; ------------------------
; ROTE FARBE EINBLENDEN
; ------------------------
MOVE.L #15,D1
W2:
MOVE.L #35000,D0
W1:
SUBQ.L #1,D0
BNE W1
ADD.W #$0100,BLENDE
JSR COPY_CL
SUBQ.L #1,D1
BNE W2
JSR COPY_CL
;-----------
ABFRAGE:
MOVE.L GFXBASE,A6
JSR PLANESCROLL
CMP.L #00,KEYBOARD_COUNTER
BNE SONSTIGES
MOVE.L KEYSPEED,KEYBOARD_COUNTER
JSR CHANGEHOEHE
CMP.B #00,HOEHENTEST
BEQ R54
JMP SONSTIGES2
R54:
JSR ENTERTEXT
JSR HOEHENCHANGE
JSR SAVE_BITPLANES
JSR RESETPOINTER
JSR COLORCHANGE
JSR COLORPRINT
JSR PRINTCOLORNUMMER
JSR SETZEPOINTER
JSR OFFSET8000
JSR MODULO_ROUT
JSR DFSTOPER
CMP.B #243,KEYBOARD
BNE KEYL
MOVE.L #04,D0
LEA POINTERBYTES,A0
X92:
NOT.B (A0)+
DBRA D0,X92
JSR PRINT1
; -------------------------------------------
; ABFRAGE VON (L UND H) UND AUSGABE DES MODUS
; -------------------------------------------
KEYL:
CMP.B #175,KEYBOARD	;L=LORES
BEQ R20
CMP.B #181,KEYBOARD	;H=HIRES
BEQ R21
JMP KEY2 
R20:
BCLR #15,GRAPHIC_BITS
MOVE.L #40,COUNT_OFFSET
MOVE.L #$0038,DFSTARTPOINTER
MOVE.L #$00D0,DFSTOPPOINTER
JSR MODULO_NULL
JSR DATAFETCH_SETZEN
JSR DFVIEWLORES
JSR GESAMTBREITE
JSR OFFSET
MOVE.L #RASTPORT,A1
MOVE.L #489,D0
MOVE.L #11,D1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #TEXT11,A0
MOVE.L #2,D0
JSR TEXT(A6)
JSR COPY_CL
JMP KEY2
R21:
BSET #15,GRAPHIC_BITS
MOVE.L #80,COUNT_OFFSET
MOVE.L #$003C,DFSTARTPOINTER
MOVE.L #$00D4,DFSTOPPOINTER
JSR MODULO_NULL
JSR DFVIEWLORES
JSR DATAFETCH_SETZEN
JSR GESAMTBREITE
JSR OFFSET
MOVE.L #RASTPORT,A1
MOVE.L #489,D0
MOVE.L #11,D1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #TEXT10,A0
MOVE.L #2,D0
JSR TEXT(A6)
JSR COPY_CL
CMP.B #'5',PLANEBITS
BNE KEY2 
SUBQ.B #1,PLANEBITS
JSR COPY_CL
JMP Y1
; --------------------------------------------------------
; ABFRAGE VON (+ UND -) UND AUSGABE DER ANZAHL (BITPLANES)
; --------------------------------------------------------
KEY2:
CMP.B #231,KEYBOARD	
BEQ R1
CMP.B #233,KEYBOARD
BEQ R2
JMP R0 
R1:
MOVE.B PLANEBITS,D0
CMP.B PLANE_ZAHL,D0
BCC R0
ADDQ.B #1,PLANEBITS
JMP PRINT3
R2:
CMP.B #'1',PLANEBITS
BCS R0
SUBQ.B #1,PLANEBITS
PRINT3:
CMP.B #'0',PLANEBITS
BNE Y0
MOVE.L #00,D0
MOVE.L #05,D1
MOVE.W #%1000111111111111,D2
MOVE.W #%0000000000000000,D3
JSR POINTERBYTES_SETZEN
Y0:
CMP.B #'1',PLANEBITS
BNE Y1
MOVE.L #01,D0
MOVE.L #04,D1
MOVE.W #%1000111111111111,D2
MOVE.W #%0001000000000000,D3
JSR POINTERBYTES_SETZEN
Y1:
CMP.B #'2',PLANEBITS
BNE Y2
MOVE.L #02,D0
MOVE.L #03,D1
MOVE.W #%1000111111111111,D2
MOVE.W #%0010000000000000,D3
JSR POINTERBYTES_SETZEN
Y2:
CMP.B #'3',PLANEBITS
BNE Y3
MOVE.L #03,D0
MOVE.L #02,D1
MOVE.W #%1000111111111111,D2
MOVE.W #%0011000000000000,D3
JSR POINTERBYTES_SETZEN
Y3:
CMP.B #'4',PLANEBITS
BNE Y4
PLANE4:
MOVE.L #04,D0
MOVE.L #01,D1
MOVE.W #%1000111111111111,D2
MOVE.W #%0100000000000000,D3
JSR POINTERBYTES_SETZEN
Y4:
CMP.B #'5',PLANEBITS
BNE Y5
BTST #15,GRAPHIC_BITS
BNE Y6
MOVE.L #05,D0
MOVE.L #00,D1
MOVE.W #%1000111111111111,D2
MOVE.W #%0101000000000000,D3
JSR POINTERBYTES_SETZEN
JMP Y5
Y6:
SUBQ.B #1,PLANEBITS
Y5:
JSR COPY_CL
JSR PRINT2
MOVE.L #RASTPORT,A1
MOVE.L #441+80,D0 ;522
MOVE.L #19,D1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #01,D0
MOVE.L #PLANEBITS,A0
JSR TEXT(A6)
;---------------------------------------------
R0:
MOVE.L #245,D0
MOVE.L #04,D1
LEA POINTERBYTES+4,A0
KEY1:
CMP.B KEYBOARD,D0
BNE KEY0
NOT.B (A0)
KEY0:
ADDQ.L #2,D0
SUBQ.L #1,A0
DBRA D1,KEY1
JSR PRINT1
SONSTIGES:
SUBQ.L #1,KEYBOARD_COUNTER
SUBQ.L #1,KEYBOARD_COUNTER2
SONSTIGES2:
CMP.B #$4D,KEYBOARD
BNE ABFRAGE
;-------SPEICHER ZURUECKGEBEN---------
BEENDEN:
JSR COPPERLISTOFF
MOVE.L GFXBASE,A6
MOVE.L CLISTE,A0
MOVE.L #10,D0
MOVE.L #1000,D1
JSR FREERASTER(A6)
MOVE.L SPRITE1,A0
MOVE.L #100,D0
MOVE.L #200,D1
JSR FREERASTER(A6)
MOVE.L BITMAP1,A0
MOVE.L #800,D0
MOVE.L #70,D1
JSR FREERASTER(A6)
MOVE.L BITMAP2,A0
MOVE.L #800,D0
MOVE.L #70,D1
JSR FREERASTER(A6)
; ---------------------
MOVE.L INTBASE,A6
MOVE.L WINDOWPOINTER,A0
JSR CLOSEWINDOW(A6)
MOVE.L EXECBASE,A6
MOVE.L GFXBASE,A1
JSR CLOSELIBRARY(A6)
MOVE.L DOSBASE,A1
JSR CLOSELIBRARY(A6)
MOVE.L INTBASE,A1
JSR CLOSELIBRARY(A6)
RTS
; ---------- SUB-ROUTINEN ----------
ENTERTEXT:
CMP.B #$7B,KEYBOARD
BEQ ENTER_TEXT
RTS
ENTER_TEXT:
JSR COPPERLISTOFF
MOVE.L #0,GADG3
MOVE.L #GADG2,GADG1
BSR REQUEST
WGADG:
BSR GETMESSAGE
MOVE.L D0,A0
MOVE.L 20(A0),D0
CMP #$40,D0
BEQ K1
BSR REPLYMESSAGE
BRA WGADG
K1:
MOVE.L 28(A0),D0
CMP.L #GADG2,D0
BEQ SAFE
CMP.L #GADG3,D0
BEQ FAR
BRA WGADG 
FAR:
BSR REPLYMESSAGE
BSR ENDREQUEST
BSR SAVEROUT
JSR COPPERLISTON 
MOVE.L GFXBASE,A6
RTS
SAFE:
BSR REPLYMESSAGE
BSR ENDREQUEST
JSR COPPERLISTON 
MOVE.L GFXBASE,A6
RTS
; ----------------------------------
REQUEST:
LEA REQUESTER,A0
MOVE.L INTBASE,A6
MOVE.L WINDOWPOINTER,A1
JSR -240(A6) ; REQUESTER
RTS
; --------------------------
REQUESTER:
DC.L 0 
DC.W 1,10,190,46
DC.W 0,0
GADG:
DC.L GADG1
DC.L BORDER1
REQTEXT:
DC.L ENTER_FILENAME
DC.W 0
BF:
DC.B $01
DC.B 00
DC.L 0
BLK 32,0
DC.L 0
DC.L 0
BLK 36,0

ENTER_FILENAME:
DC.B 8,1,0,0
DC.W 40,2
DC.L 0
DC.L RTEXT1
DC.L 0
RTEXT1:
DC.B 'SAVE PICTURES',0
EVEN
BORDER1:
DC.W -2,-1
DC.B 4,2,1
DC.B 7
DC.L VECTORS1
DC.L 0
VECTORS1:
DC.W 2,1
DC.W 2,100
DC.W 201,100
DC.W 201,1
DC.W 2,1
DC.W 2,11
DC.W 201,11
GADG1:
DC.L GADG2
DC.W 15,16
DC.W 165,10
DC.W 0
STR_TYP:
DC.W 1
DC.W 4
DC.L BORDER2
DC.L 0
DC.L 0
DC.L 0
DC.L GADGSI1
DC.W 1
DC.L 0
GADGSI1:
DC.L TEXTBUFFER
DC.L 0
DC.W 0
DC.W 90
DC.W 0
DC.W 0,0,0,0,0
DC.L 0
DC.L 0
DC.L 0
TEXTBUFFER:
DC.B 'DF0:PICTURE.PIC'
BLK 90,0
EVEN
BORDER2:
DC.W -2,-2
DC.B 3,0,1
DC.B 5
DC.L VECTORS2
DC.L 0
VECTORS2:
DC.W 0,0
DC.W 0,11
DC.W 163,11
DC.W 163,0
DC.W 0,0
EVEN
GADG2:
DC.L GADG3
DC.W 123,30
DC.W 51,11
DC.W 0
DC.W 1
DC.W 1
DC.L BORDER3
DC.L 0
DC.L GTEXT1
DC.L 0
DC.L 0
DC.W 2
DC.L 0
BORDER3:
DC.W -2,-1
DC.B 0,1,1
DC.B 9
DC.L VECTOR3
DC.L 0
VECTOR3:
DC.W 0,0
DC.W 0,12
DC.W 54,12
DC.W 54,0
DC.W 0,0
DC.W 0,12
DC.W 1,13
DC.W 55,13
DC.W 55,2
GTEXT1:
DC.B 8,1,0,0
DC.W 2,2
DC.L 0
DC.L GT1
DC.L 0
GT1:
DC.B 'CANCEL',0
EVEN
GTEXT2:
DC.B 8,1,0,0
DC.W 10,2
DC.L 0
DC.L GT2
DC.L 0
GT2:
DC.B 'SAVE',0
EVEN
GADG3:
DC.L 0
DC.W 15,30,51,11
DC.W 0,1,1
DC.L BORDER3
DC.L 0
DC.L GTEXT2
DC.L 0
DC.L 0
DC.W 2
DC.L 0
GTEXT3:
DC.B 3,0,0,0
DC.W 2,2
DC.L 0
DC.L GT1
DC.L 0
EVEN
GADG15:
DC.L 0
DC.W 63,35,54,11,0,1,1
DC.L 0
DC.L 0
DC.L GTEXT3
DC.L 0
DC.W 0
DC.L 0
AT1:
DC.B 3,1,0,0
DC.W 50,2
DC.L 0
DC.L T1
DC.L AT2
AT2:
DC.B 8,1,0,0
DC.W 38,12
DC.L 0
DC.L T2
DC.L AT3
AT3:
DC.B 8,1,0,0
DC.W 26,20
DC.L 0
DC.L T3
DC.L AT4
AT4:
DC.B 8,1,0,0
DC.W 26,28
DC.L 0
DC.L T4
DC.L 0
T1:
DC.B ' 87/12/25 ',0
T2:
DC.B ' ',0
T3:
DC.B 'COPYRIGHT © 1998',0
T4:
DC.B '°°°°°°°°°°°°°°°°',0
EVEN
; ----------------------------------
ENDREQUEST:
MOVE.L INTBASE,A6
MOVE.L WINDOWPOINTER,A1
LEA REQUESTER,A0
JSR -120(A6) ; ENDREQUESTER
RTS 
; ----------------------------------
GETMESSAGE:
MOVE.L EXECBASE,A6
MOVE.L MESSAGEPORT,A0
JSR WAITPORT(A6)
MOVE.L MESSAGEPORT,A0
JSR GETMSG(A6)
MOVE.L D0,MESSAGE
RTS
; -------------
REPLYMESSAGE:
MOVE.L EXECBASE,A6
MOVE.L MESSAGE,A1
JSR REPLYMSG(A6)
RTS
; ----------------------------
COPPERLISTON:
MOVE.L GFXBASE,A6
ADD.L #50,A6
MOVE.L (A6),OLDCOPPER
MOVE.L CLISTE,(A6)
MOVE.L GFXBASE,A6
RTS
; ----------------------------------
COPPERLISTOFF:
MOVE.L GFXBASE,A6
ADD.L #50,A6
MOVE.L OLDCOPPER,(A6)
MOVE.L GFXBASE,A6
RTS
; ----------------------------------
COPY_CL:
MOVEM.L D0-D7/A0-A6,-(A7)
MOVE.L #COPPERLIST,A1
MOVE.L CLISTE,A0
MOVE.L #COPPERLISTENDE-COPPERLIST,D0
DF12:
MOVE.B (A1)+,(A0)+
DBRA D0,DF12
MOVEM.L (A7)+,A0-A6/D0-D7
RTS
; ----------------------------------
POINTERBYTES_SETZEN:
AND.W D2,GRAPHIC_BITS
OR.W  D3,GRAPHIC_BITS
MOVE.L #POINTERBYTES2,A0
MOVE.L #00,D2
CMP.L #00,D0
BEQ NULLEN
E2:
MOVE.B #01,(A0)+
ADDQ.L #1,D2
CMP.L D0,D2
BNE E2
NULLEN:
MOVE.L #00,D2
CMP.L #00,D1
BEQ ZURUECK
E3:
MOVE.B #00,(A0)+
ADDQ.L #1,D2
CMP.L D1,D2
BNE E3
JSR COPY_CL
ZURUECK:
RTS
;--------
APEN:
MOVE.L #RASTPORT,A1
JSR SETAPEN(A6)
RTS
; ----------
BPEN:
MOVE.L D5,D0
MOVE.L #RASTPORT,A1
JSR SETBPEN(A6)
RTS
; ---------------- AUSGABE DER DUAL-WERTE -------------
PRINT1:
MOVE.L #04,D5
MOVE.L #19,D4
LEA POINTERBYTES,A3
X3:
MOVE.L #RASTPORT,A1
MOVE.L #589,D0
MOVE.L D4,D1
JSR MOVE(A6)
CMP.B #00,(A3)
BEQ PRINT_1
MOVE.L #TEXT4,A0
JMP X4
PRINT_1:
MOVE.L #TEXT5,A0
X4:
MOVE.L #RASTPORT,A1
MOVE.L #2,D0
JSR TEXT(A6)
ADD.L #08,D4
ADDQ.L #1,A3
DBRA D5,X3
RTS
; ------- AUSGABE DER ON OFF -------------
PRINT2:
MOVE.L #04,D5
MOVE.L #19,D4;19
LEA POINTERBYTES2,A3
X5:
MOVE.L #RASTPORT,A1
MOVE.L #589-32,D0
MOVE.L D4,D1
JSR MOVE(A6)
CMP.B #00,(A3)
BEQ PRINT_2
MOVE.L #TEXT6,A0
JMP X6
PRINT_2:
MOVE.L #TEXT7,A0
X6:
MOVE.L #RASTPORT,A1
MOVE.L #3,D0
JSR TEXT(A6)
ADD.L #08,D4
ADDQ.L #1,A3
DBRA D5,X5
RTS
; ---------------------------
ABPEN:
JSR APEN
JSR BPEN
RTS
;-----------------------------------------
; UMWANDLUNGS-ROUTINE FUER EINE
; HEXZAHL IN ASCII
; ROUTINEN-AUFRUF
; IN A0 QUELLEN-ADRESSE DER ZAHL
; IN A1 ZIEL-ADRESSE DER GEWANDELTEN ZAHL
; IN D1 ANZAHL DER BYTES
;-----------------------------------------
HEX_ASCII:
MOVE.L #04,D1
LEA TABELLE,A2
MOVE.L #BUFFER,A1
CLR.L D0
X40:
MOVE.B (A0),D0
AND.B #$F0,D0
LSR.B #4,D0
MOVE.B (A2,D0),(A1)+
MOVE.B (A0)+,D0
AND.B #$0F,D0
MOVE.B (A2,D0),(A1)+
DBRA D1,X40
RTS
; ------ WANDLUNG-TABELLE --------
TABELLE:
DC.B $30,$31,$32,$33,$34
DC.B $35,$36,$37,$38,$39
DC.B $41,$42,$43,$44,$45
DC.B $46
BUFFER:
BLK.B 10,0
; -----------------------------
PRINT4:
MOVE.L #19,D3
MOVE.L #4,D4
X50:
MOVE.L #RASTPORT,A1
MOVE.L #614,D0
MOVE.L D3,D1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #01,D0
MOVE.L A2,A0
JSR TEXT(A6)
ADDQ.L #8,D3
DBRA D4,X50
MOVE.L #27,D3
MOVE.L #2,D4
X51:
MOVE.L #RASTPORT,A1
MOVE.L #497,D0
MOVE.L D3,D1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #01,D0
MOVE.L A2,A0
JSR TEXT(A6)
ADDQ.L #8,D3
DBRA D4,X51
RTS
; -------------------------------
PLANESCROLL:
SUBQ.L #1,KEYBOARD_COUNTER3
BEQ TESTE
RTS
TESTE:
MOVE.L #100,KEYBOARD_COUNTER3
CMP.B #101,KEYBOARD
BEQ SCROLL_HINAB
CMP.B #103,KEYBOARD
BEQ SCROLL_HINAUF
CMP.B #97,KEYBOARD
BEQ SCROLL_LINKS
CMP.B #99,KEYBOARD
BEQ SCROLL_RECHTS
RTS
; -----------------------
SCROLL_HINAUF:
MOVE.L #1,D4
CMP.B #$FF,HOEHENTEST
BNE T01
JSR HOEHE_HINAUF
T01:
MOVE.L COUNT_OFFSET,D0
MOVE.B #00,D2
JSR PLANES_WRITEN2
JSR PLANEPRINT
JSR COPY_CL
RETURN:RTS
; -----------------------
SCROLL_HINAB:
CMP.B #$FF,HOEHENTEST
BNE T03
JSR HOEHE_HINUNTER
MOVE.L COUNT_OFFSET,D0
MOVE.B #00,D2
JSR PLANES_WRITEN2
JSR PLANEPRINT
JSR COPY_CL
RTS
T03:
MOVE.L COUNT_OFFSET,D0
MOVE.B #01,D2
JSR PLANES_WRITEN2
JSR PLANEPRINT
JSR COPY_CL
RTS
; -----------------------
SCROLL_LINKS:
CMP.B #00,HOEHENTEST
BNE ZURUECK
MOVE.L #900,D4
MOVE.L #02,D0
MOVE.B #00,D2
JSR PLANES_WRITEN2
JSR PLANEPRINT
JSR COPY_CL
RTS
; -----------------------
SCROLL_RECHTS:
CMP.B #00,HOEHENTEST
BNE ZURUECK
MOVE.L #900,D4
MOVE.L #02,D0
MOVE.B #01,D2
JSR PLANES_WRITEN2
JSR PLANEPRINT
JSR COPY_CL
RTS
; -----------------------------------------------
;  SCHREIBT DIE PLANEZEIGER IN DIE COPPERLIST
; -----------------------------------------------
PLANES_WRITEN:
MOVE.L #09,D0
LEA PLANEZEIGER,A0
LEA BITPLANE1_2+2,A2
X60:
MOVE.W (A0)+,(A2)
ADDQ.L #4,A2
DBRA D0,X60
RTS
; -----------------------------------------------
; PLANEZEIGER UND POINTERBYTES VERKNUEPFEN
; -----------------------------------------------
PLANES_WRITEN2:
MOVE.L D4,KEYBOARD_COUNTER3
CMP.B #'0',PLANEBITS
BEQ RETURN
CLR.L D1
MOVE.B PLANEBITS,D1
SUB.L #49,D1
LEA POINTERBYTES,A0
LEA PLANEZEIGER,A1
X70:
CMP.B #$FF,(A0)+
BNE X71
CMP.B #01,D2
BEQ X80
ADD.L D0,(A1)
JMP X71
X80:
SUB.L D0,(A1)
X71:
ADDQ.L #4,A1
DBRA D1,X70
JSR PLANES_WRITEN
RTS
; ------------------------------------------------
;  PRINTROUTINE FUER AUSGABE DER PLANEZEIGER
; ------------------------------------------------
PLANEPRINT:
;        321098765432109876543210987654321
MOVE.L #%000000000000001111111111111111111,D0
AND.L D0,PLANEZEIGER
AND.L D0,PLANEZEIGER+4
AND.L D0,PLANEZEIGER+8
AND.L D0,PLANEZEIGER+12
AND.L D0,PLANEZEIGER+16
MOVE.L #PLANEZEIGER,A4
MOVE.L #19,D2
MOVE.L #04,D3
X90:
MOVE.L A4,A0
MOVEM.L D0-D7/A0-A6,-(A7)
JSR HEX_ASCII
MOVEM.L (A7)+,A0-A6/D0-D7
MOVE.L #RASTPORT,A1
MOVE.L #622,D0
MOVE.L D2,D1
JSR MOVE(A6)
MOVE.L #6,D0
MOVE.L #BUFFER+2,A0
MOVE.L #RASTPORT,A1
JSR TEXT(A6)
ADDQ.L #4,A4
ADDQ.L #8,D2
DBRA D3,X90
RTS
; ----------------------------------------
; ADDIERT EIN OFFSET ZU DEN PLANEZEIGERN 
; ----------------------------------------
OFFSET8000:
CMP.B #'0',PLANEBITS
BEQ ZURUECK
CMP.B #55,KEYBOARD
BEQ SUBTRA
CMP.B #53,KEYBOARD
BEQ ADDIERE
RTS
SUBTRA:
MOVE.L GESAMT_BREITE,D0
DIVU #8,D0
MOVE.L #200,D1 
MULU D0,D1
MOVE.L D1,SPACEOFFSET
MOVE.L KEYSPEED,KEYBOARD_COUNTER
LEA PLANEZEIGER,A0
LEA POINTERBYTES,A1
MOVE.B PLANEBITS,D0
SUB.L #49,D0
MOVE.L SPACEOFFSET,D1
X96:
CMP.B #$FF,(A1)
BNE X98
SUB.L D1,(A0)
X98:
ADDQ.L #1,A1
ADDQ.L #4,A0
DBRA D0,X96
JSR PLANEPRINT
JSR PLANES_WRITEN
JSR COPY_CL
RTS
ADDIERE:
MOVE.L GESAMT_BREITE,D0
DIVU #8,D0
MOVE.L #200,D1 
MULU D0,D1
MOVE.L D1,SPACEOFFSET
MOVE.L KEYSPEED,KEYBOARD_COUNTER
LEA PLANEZEIGER,A0
LEA POINTERBYTES,A1
MOVE.B PLANEBITS,D0
SUB.L #49,D0
MOVE.L SPACEOFFSET,D1
X99:
CMP.B #$FF,(A1)
BNE X100
ADD.L D1,(A0)
X100:
ADDQ.L #1,A1
ADDQ.L #4,A0
DBRA D0,X99
JSR PLANEPRINT
JSR PLANES_WRITEN
JSR COPY_CL
RTS
; -------------------------------------------------------
; SETZ DIE POINTER DER REIHE NACH MIT JEWEILIGEN OFFSET
; -------------------------------------------------------
SETZEPOINTER:
CMP.B #127,KEYBOARD
BEQ SETZROUT
RTS
SETZROUT:
CMP.B #'2',PLANEBITS
BCS ZURUECK
MOVE.L KEYSPEED,KEYBOARD_COUNTER
LEA PLANEZEIGER,A0
LEA PLANEZEIGER+4,A1
MOVE.L GESAMT_BREITE,D0
DIVU #8,D0
MOVE.L PLANE_HOEHE,D1
MULU D0,D1
MOVE.L D1,SPACEOFFSET
MOVE.B PLANEBITS,D0
SUB.L #50,D0
MOVE.L SPACEOFFSET,D1
MOVE.L (A0),D2
Y99:
ADD.L D1,D2
MOVE.L D2,(A1)
ADDQ.L #4,A1
DBRA D0,Y99
JSR PLANEPRINT
JSR PLANES_WRITEN
JSR COPY_CL
RTS
;-----------------------------------------
; UMWANDLUNGS-ROUTINE FUER EINE
; HEXZAHL IN DEZIMAL
; ACHTUNG !! ZAHLEN MUESSEN KLEINER ALS 
; 65535 SEIN (16 BIT ZAHLEN)
; ROUTINEN-AUFRUF
; LEA HEXZAHL,A0
; JSR HEX_DEZ
;-----------------------------------------
HEX_DEZ:
MOVEM.L D0-D7/A0-A6,-(A7)
MOVE.L #'0000',ZIEL
MOVE.B #'0',ZIEL+4
MOVE.L #ZIEL,A1
MOVE.L (A0),A0
MOVE.L A0,D0
MOVE.L #10000,D2
MOVE.L #00,D3
X121:
CMP.L D2,A0
BCS X120
DIVU D2,D0
MOVE.B D0,D1
ADD.B #$30,D1
MOVE.B D1,(A1,D3)
LSR #8,D0
SWAP D0
X120:
DIVU #10,D2
ADDQ.L #1,D3
CMP.L #05,D3
BNE X121
MOVEM.L (A7)+,A0-A6/D0-D7
RTS
; ----------------------------------------------
MODULO_ROUT:
CMP.B #141,KEYBOARD
BEQ MODULO_PLUS
CMP.B #143,KEYBOARD
BEQ MODULO_MINUS
CMP.B #139,KEYBOARD
BEQ MODULO_NULL
CMP.B #145,KEYBOARD
BEQ MODULO_PLUS10
CMP.B #147,KEYBOARD
BEQ MODULO_MINUS10
RTS
MODULO_PLUS:
ADDQ.L #2,MODULOPOINTER
JSR MODULOPRINT
RTS
MODULO_MINUS:
CMP.L #00,MODULOPOINTER
BEQ ZURUECK
SUBQ.L #2,MODULOPOINTER
JSR MODULOPRINT
RTS
; -----------------------
MODULO_NULL:
MOVE.L #0000,MODULOPOINTER
JSR MODULOPRINT
RTS
; -----------------------
MODULO_PLUS10:
ADD.L #10,MODULOPOINTER
JSR MODULOPRINT
RTS
; ------------------------
MODULO_MINUS10:
CMP.L #10,MODULOPOINTER
BCS KLEINER
SUB.L #10,MODULOPOINTER
KLEINER:
JSR MODULOPRINT
RTS
; -----------------------------------------------
MODULOPRINT:
MOVE.W MODULOPOINTER+2,MODULO+2
MOVE.W MODULOPOINTER+2,MODULO+6
LEA MODULOPOINTER,A0
JSR HEX_DEZ
MOVE.L #RASTPORT,A1
MOVE.L #497,D0
MOVE.L #43,D1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #ZIEL+1,A0
MOVE.L #4,D0
JSR TEXT(A6)
MOVE.L MODULOPOINTER,D0
MULU #8,D0
MOVE.L D0,MODULOBREITE
LEA MODULOBREITE,A0
JSR HEX_DEZ
MOVE.L #RASTPORT,A1
MOVE.L #392,D0
MOVE.L #35,D1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #ZIEL+1,A0
MOVE.L #4,D0
JSR TEXT(A6)
JSR GESAMTBREITE
JSR OFFSET
JSR COPY_CL
RTS
; ------
DATAFETCH_SETZEN:
MOVE.W DFSTARTPOINTER+2,DFSTART+2
MOVE.W DFSTOPPOINTER+2,DFSTOP+2
LEA DFSTARTPOINTER,A0
JSR HEX_DEZ
MOVE.L #RASTPORT,A1
MOVE.L #497,D0
MOVE.L #27,D1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #ZIEL+1,A0
MOVE.L #04,D0
JSR TEXT(A6)
LEA DFSTOPPOINTER,A0
JSR HEX_DEZ
MOVE.L #RASTPORT,A1
MOVE.L #497,D0
MOVE.L #35,D1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #ZIEL+1,A0
MOVE.L #04,D0
JSR TEXT(A6)
RTS
; ---------------------------------
DFSTOPER:
CMP.B #203,KEYBOARD
BEQ DFMINUS
CMP.B #201,KEYBOARD
BEQ DFPLUS
RTS
DFMINUS:
CMP.L #69,DFSTOPPOINTER
BCS ZURUECK
SUB.L #8,DFSTOPPOINTER
JSR DATAFETCH_SETZEN
JSR DFVIEWLORES
JSR MODULO_NULL
JSR OFFSET
RTS
; ---------------------
DFPLUS:
CMP.L #208,DFSTOPPOINTER
BCC ZURUECK
ADD.L #8,DFSTOPPOINTER
JSR DATAFETCH_SETZEN
JSR DFVIEWLORES
JSR MODULO_NULL
JSR OFFSET
RTS
; ------------------------------------------------------------
; ERZEUGT AUS DEN DATAFETCHWERTEN DIE SICHTBARE GRAPHICBREITE
; ------------------------------------------------------------
DFVIEWLORES:
BTST #15,GRAPHIC_BITS
BEQ C140
LEA DFTABELLE2,A0
LEA DFBREITE_TABELLE2,A1
JMP C141
C140:
LEA DFBREITE_TABELLE,A1
LEA DFTABELLE,A0
C141:
MOVE.L #18,D0
CLR.L D1
X140:
MOVE.W (A0),D1
CMP.L DFSTOPPOINTER,D1
BNE C10
MOVE.W (A1),DFBREITE+2
JMP DFPRINT
C10:
ADDQ.L #2,A0
ADDQ.L #2,A1
DBRA D0,X140
DFPRINT:
X130:
LEA DFBREITE,A0
JSR HEX_DEZ
MOVE.L #392,D0
MOVE.L #27,D1
MOVE.L #RASTPORT,A1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #4,D0
MOVE.L #ZIEL+1,A0
JSR TEXT(A6)
RTS
DFTABELLE:
DC.W 208,200,192
DC.W 184,176,168
DC.W 160,152,144
DC.W 136,128,120
DC.W 112,104,096
DC.W 088,080,072
DC.W 064   
DFTABELLE2:
DC.W 212,204,196
DC.W 188,180,172
DC.W 164,156,148
DC.W 140,132,124
DC.W 116,108,100
DC.W 092,084,076
DC.W 068   
DFBREITE_TABELLE:
DC.W 320,304,288
DC.W 272,256,240
DC.W 224,208,192
DC.W 176,160,144
DC.W 128,112,096
DC.W 080,064,048
DC.W 032
DFBREITE_TABELLE2:
DC.W 640,608,576
DC.W 544,512,480
DC.W 448,416,384
DC.W 352,320,288
DC.W 256,224,192
DC.W 160,128,096
DC.W 064
; ----------------------------------
; GIBT DIE GESAMT BREITE AUS
; ----------------------------------
GESAMTBREITE:
MOVE.L DFBREITE,D0
ADD.L MODULOBREITE,D0
MOVE.L D0,GESAMT_BREITE
LEA GESAMT_BREITE,A0
JSR HEX_DEZ
MOVE.L #392,D0
MOVE.L #43,D1
MOVE.L #RASTPORT,A1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #4,D0
MOVE.L #ZIEL+1,A0
JSR TEXT(A6)
RTS
; ---------------------------------------
OFFSET:
MOVE.L GESAMT_BREITE,D0
DIVU #8,D0
MOVE.L D0,COUNT_OFFSET
LEA COUNT_OFFSET,A0
JSR HEX_DEZ
MOVE.L #196,D0
MOVE.L #51,D1
MOVE.L #RASTPORT,A1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #4,D0
MOVE.L #ZIEL+1,A0
JSR TEXT(A6)
RTS
; ---------------------------------------------
;           AUSGABE DER PLANE HOEHE
; ---------------------------------------------
PLANEHOEHE:
LEA PLANE_HOEHE,A0
JSR HEX_DEZ
MOVE.L #392,D0
MOVE.L #51,D1
MOVE.L #RASTPORT,A1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #4,D0
MOVE.L #ZIEL+1,A0
JSR TEXT(A6)
RTS
; -----------------------------------
; ERZEUGT COLORS FUER IFF HAEDER
; -----------------------------------
MAKE_COLORS:
LEA FARBEN,A0
LEA IFF_COLORS,A1
MOVE #31,D7
U10:
MOVE (A0),D0
LSR #4,D0
AND #$F0,D0
MOVE.B D0,(A1)+
MOVE (A0),D0
AND #$F0,D0
MOVE.B D0,(A1)+
MOVE (A0)+,D0
LSL #4,D0
MOVE.B D0,(A1)+
DBF D7,U10
RTS
; --------------------------------------------------
; SPEICHERT DIE EINGESCHALTENEN BITPLANES AUF DISK
; --------------------------------------------------
SAVE_BITPLANES:
CMP.B #$75,$BFEC01
BEQ SAVEN
RTS
SAVEN:
JSR COPPERLISTOFF
JSR SAVEROUT
MOVE.L GFXBASE,A6
JSR COPPERLISTON
RTS
SAVEROUT:
BSR MAKE_COLORS
MOVE.L PLANEZEIGER,P1
MOVE.L PLANEZEIGER+4,P2
MOVE.L PLANEZEIGER+8,P3
MOVE.L PLANEZEIGER+12,P4
MOVE.L PLANEZEIGER+16,P5
MOVE.L GESAMT_BREITE,D0
MOVE.L D0,D3
ASR.L  #3,D3
MOVE.L D3,IFF_BYTE
MOVE.W PLANE_HOEHE+2,D1
MOVE.W D1,IFF_HEIGHT
MOVE.W D0,IFF_WIDTH
CLR.L D2
MOVE.B PLANEBITS,D2
SUB.B #$30,D2
MOVE.B D2,IFF_BITPL
MULS D1,D3
MULS D2,D3
MOVE.L D3,BODY_LENGHT
ADD.L #144,D3
MOVE.L D3,IFF_LENGHT
MOVE.L #TEXTBUFFER,D1
MOVE.L #1006,D2
MOVE.L DOSBASE,A6
JSR OPEN(A6)
CMP.L #0,D0
BEQ L46
MOVE.L D0,FILE
MOVE.L DOSBASE,A6
MOVE.L FILE,D1
MOVE.L #IFF_HEADER,D2
MOVE.L #152,D3
JSR WRITE(A6)
BEQ CLOSE_FILE
; ----------------------------------
MOVE.W IFF_HEIGHT,D7
SUBQ #1,D7
L48:
MOVE.L P1,D2
BSR WL
CMP.B #1,IFF_BITPL
BEQ L47
MOVE.L P2,D2
BSR WL
CMP.B #2,IFF_BITPL
BEQ L47
MOVE.L P3,D2
BSR WL
CMP.B #3,IFF_BITPL
BEQ L47
MOVE.L P4,D2
BSR WL
CMP.B #4,IFF_BITPL
BEQ L47
MOVE.L P5,D2
BSR WL
CMP.B #5,IFF_BITPL
BEQ L47
L47:
MOVE.L IFF_BYTE,D0
ADD.L D0,P1
ADD.L D0,P2
ADD.L D0,P3
ADD.L D0,P4
ADD.L D0,P5
DBF D7,L48
CLOSE_FILE:
MOVE.L FILE,D1
JSR CLOSE(A6)
L46:
RTS
WL:
MOVE.L D7,-(A7)
MOVE.L FILE,D1
MOVE.L IFF_BYTE,D3
JSR WRITE(A6)
BEQ CLOSE_FILE
MOVE.L (A7)+,D7
RTS
; -------------------------------
HOEHENCHANGE:
CMP.B #$5B,KEYBOARD
BEQ NORMAL
CMP.B #$59,KEYBOARD
BEQ PAL
RTS
NORMAL:
MOVE.L #200,PLANE_HOEHE
JSR SA1
RTS
PAL:
MOVE.L #256,PLANE_HOEHE
JSR SA1
RTS
; --------------------------------------
; AENDERN DER AKTUELLEN BITPLANE-HOEHEN
; --------------------------------------
CHANGEHOEHE:
CMP.B #$55,KEYBOARD
BEQ PRUEFE
RTS
PRUEFE:
CMP.B #00,HOEHENTEST
BEQ HOEHEON
NOT.B HOEHENTEST
MOVE.L PLANEZEIGERBUFFER,PLANEZEIGER
MOVE.L PLANEZEIGERBUFFER+4,PLANEZEIGER+4
MOVE.L PLANEZEIGERBUFFER+8,PLANEZEIGER+8
MOVE.L PLANEZEIGERBUFFER+12,PLANEZEIGER+12
MOVE.L PLANEZEIGERBUFFER+16,PLANEZEIGER+16
CMP.L #0000,PLANE_HOEHE
BNE SA1
MOVE.L #1,PLANE_HOEHE
SA1:
JSR PLANEPRINT
JSR PLANES_WRITEN
JSR PLANEHOEHE
V10:
MOVE.L #02,D0
MOVE.L #01,D5
JSR ABPEN
JSR CHANGEPRINT
JSR COPY_CL
RTS
; -----------------------
HOEHEON:
NOT.B HOEHENTEST
MOVE.L PLANEZEIGER,PLANEZEIGERBUFFER
MOVE.L PLANEZEIGER+4,PLANEZEIGERBUFFER+4
MOVE.L PLANEZEIGER+8,PLANEZEIGERBUFFER+8
MOVE.L PLANEZEIGER+12,PLANEZEIGERBUFFER+12
MOVE.L PLANEZEIGER+16,PLANEZEIGERBUFFER+16
MOVE.L #000,PLANE_HOEHE
JSR PLANEHOEHE
MOVE.L #01,D0
MOVE.L #02,D5
JSR ABPEN
JSR CHANGEPRINT
JSR COPY_CL
RTS
; ---------------------------------
CHANGEPRINT:
MOVE.L #RASTPORT,A1
MOVE.L #260-24,D0
MOVE.L #51,D1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #CHANGETEXT,A0
MOVE.L #1,D0
JSR TEXT(A6)
MOVE.L #02,D0
MOVE.L #01,D5
JSR ABPEN
RTS
; --------------------------------------
; ZAEHLT DIE PLANEHOEHE JE NACH TASTE
; --------------------------------------
HOEHE_HINUNTER:
ADDQ.L #1,PLANE_HOEHE
MOVE.L #100,D4
MOVEM.L D0-D7/A0-A6,-(A7)
JSR PLANEHOEHE
MOVEM.L (A7)+,A0-A6/D0-D7
RTS
; ----------------------------
HOEHE_HINAUF:
ADDQ.L #1,PLANE_HOEHE
MOVE.L #4000,D4
MOVEM.L D0-D7/A0-A6,-(A7)
JSR PLANEHOEHE
MOVEM.L (A7)+,A0-A6/D0-D7
RTS
; ----------------------------------------
; PRINTET DIE ZAHLEN IN DIE FARBENPALETTE
; ----------------------------------------
COLORPRINT:
CMP.B #$87,KEYBOARD
BEQ PRINTZAHLEN
RTS
PRINTZAHLEN:
CMP.B #00,COLORBYTE
BEQ PRINTZAHLEN2
MOVE.L #0,D0
MOVE.L #0,D5
JSR ABPEN
MOVE.L #RASTPORT,A1
MOVE.L #0,D0
MOVE.L #3,D1
MOVE.L #195,D2
MOVE.L #50,D3
JSR RECFILL(A6)
MOVE.L #2,D0
MOVE.L #1,D5
JSR ABPEN
NOT.B COLORBYTE
RTS
PRINTZAHLEN2:
NOT.B COLORBYTE
MOVE.L #03,D2 
MOVE.L #ZAHLEN,A2
MOVE.L #13,D5
R122:
MOVE.L #07,D3
MOVE.L #2,D4 
R123:
MOVE.L #RASTPORT,A1
MOVE.L D5,D1
MOVE.L D4,D0
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #02,D0
MOVE.L A2,A0
JSR TEXT(A6)
ADDQ.L #2,A2
ADD.L #24,D4
DBRA D3,R123
ADD.L #12,D5
DBRA D2,R122
RTS
; -----------------------------
; SCHREIBT DIE AKTUELLE FARBE 
; -----------------------------
PRINTCOLORNUMMER:
CMP.B #$79,KEYBOARD
BEQ COLORPLUS
CMP.B #$6B,KEYBOARD
BEQ COLORMINUS
RTS
COLORPLUS:
CMP.L #32,COLORNUMMER
BEQ ZURUECK
ADDQ.L #1,COLORNUMMER
JSR PRINTCOLORN1
RTS
COLORMINUS:
CMP.L #01,COLORNUMMER
BEQ ZURUECK
SUBQ.L #1,COLORNUMMER
JSR PRINTCOLORN1
RTS
PRINTCOLORN1:
JSR HOLEFARBE
LEA COLORNUMMER,A0
JSR HEX_DEZ
MOVE.L #RASTPORT,A1
MOVE.L #229,D0
MOVE.L #27,D1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #ZIEL+3,A0
MOVE.L #02,D0
JSR TEXT(A6)
RTS
; -------------------------------------------
; HOLT DIE AUSGWAEHLTE FARBE AUS DER TABELLE 
; -------------------------------------------
HOLEFARBE:
LEA FARBEN-2,A0
MOVE.L COLORNUMMER,D0
MULU #2,D0
ADD.L D0,A0
CLR.L D0
MOVE.W (A0),BUFFERFARBE+2
LEA BUFFERFARBE,A0
JSR HEX_ASCII
MOVE.L #RASTPORT,A1
MOVE.L #251,D0
MOVE.L #27,D1
JSR MOVE(A6)
MOVE.L #RASTPORT,A1
MOVE.L #BUFFER+5,A0
MOVE.L #3,D0
JSR TEXT(A6)
RTS
; ---------------------------------------------
; SCHREIBT COLORTABELLE IN SPRITECOLORSREGISTER
; AUFRUF:
; IN D0 STEHT WELCHES FARBREGISTER
; IN D1 STEHT WELCHE  RGB WERTE
; ---------------------------------------------
WRITECOLOR:
MOVE.L #SPRITECOLORBASIS,A0
MOVE.L #OFSETS,D2
ADD.L D0,D2
MOVE.L D2,A1
CLR.L D2
MOVE.B (A1),D2
ADD.L D2,A0
MOVE.W D1,(A0)
MOVE.L #COLORS-2,A0
MULU #4,D0 
ADD.L D0,A0
MOVE.W D1,(A0)
JSR COPY_CL
RTS
; -------------------------------------
; FARBPALETTE IN COPPERLISTE EINTRAGEN
; -------------------------------------
PALETTEWRITEN:
CLR.L D1
MOVE.L #01,D0
MOVE.L #FARBEN,A0
C121:
MOVE.W (A0),D1
MOVEM.L D0-D7/A0-A6,-(SP)
JSR WRITECOLOR
MOVEM.L (SP)+,D0-D7/A0-A6
ADDQ.L #2,A0
ADDQ.L #1,D0
CMP.L #33,D0
BNE C121
JSR COPY_CL
RTS
; ----------------------------------------
; EINSTELLEN DER GEWUENSCHTEN FARBE 
; ----------------------------------------
COLORCHANGE:
CMP.B #$85,KEYBOARD
BEQ ROT_PLUS
CMP.B #$A5,KEYBOARD
BEQ ROT_MINUS
CMP.B #$83,KEYBOARD
BEQ GRUEN_PLUS
CMP.B #$A3,KEYBOARD
BEQ GRUEN_MINUS
CMP.B #$81,KEYBOARD
BEQ BLAU_PLUS
CMP.B #$A1,KEYBOARD
BEQ BLAU_MINUS
RTS
; -----------------------------------------------
ROT_PLUS:
MOVE.W BUFFERFARBE+2,D0
AND.W #%1111111100000000,D0
CMP.W #$0F00,D0
BEQ ZURUECK
ADD.W #$0100,BUFFERFARBE+2
JSR WRITECHANGECOLOR
JSR HOLEFARBE
RTS
; -----------------------------------------------
ROT_MINUS:
MOVE.W BUFFERFARBE+2,D0
AND.W #%1111111100000000,D0
CMP.W #$0000,D0
BEQ ZURUECK
SUB.W #$0100,BUFFERFARBE+2
JSR WRITECHANGECOLOR
JSR HOLEFARBE
RTS
; -----------------------------------------------
GRUEN_PLUS:
MOVE.W BUFFERFARBE+2,D0
AND.W #%0000000011110000,D0
CMP.W #$00F0,D0
BEQ ZURUECK
ADD.W #$0010,BUFFERFARBE+2
JSR WRITECHANGECOLOR
JSR HOLEFARBE
RTS
; -----------------------------------------------
GRUEN_MINUS:
MOVE.W BUFFERFARBE+2,D0
AND.W #%0000000011110000,D0
CMP.W #$0000,D0
BEQ ZURUECK
SUB.W #$0010,BUFFERFARBE+2
JSR WRITECHANGECOLOR
JSR HOLEFARBE
RTS
; -----------------------------------------------
BLAU_PLUS:
MOVE.W BUFFERFARBE+2,D0
AND.W #%0000000000001111,D0
CMP.W #$000F,D0
BEQ ZURUECK
ADD.W #$0001,BUFFERFARBE+2
JSR WRITECHANGECOLOR
JSR HOLEFARBE
RTS
; -----------------------------------------------
BLAU_MINUS:
MOVE.W BUFFERFARBE+2,D0
AND.W #%0000000000001111,D0
CMP.W #$0000,D0
BEQ ZURUECK
SUB.W #$0001,BUFFERFARBE+2
JSR WRITECHANGECOLOR
JSR HOLEFARBE
RTS
; ------------------------------------------------
; SCHREIBT DIE GEAENDERTE FARBE IN DIE FARBPALETTE
; ------------------------------------------------
WRITECHANGECOLOR:
LEA FARBEN-2,A0
MOVE.L COLORNUMMER,D0
MULU #2,D0
ADD.L D0,A0
MOVE.W BUFFERFARBE+2,(A0)
JSR PALETTEWRITEN
RTS
; ---------------------------------------
RESETPOINTER:
CMP.B #$F1,KEYBOARD
BEQ RESET_POINTER
RTS
RESET_POINTER:
MOVE.L PLANEZEIGER,D0
MOVE.L D0,PLANEZEIGER+4
MOVE.L D0,PLANEZEIGER+8
MOVE.L D0,PLANEZEIGER+12
MOVE.L D0,PLANEZEIGER+16 
JSR PLANES_WRITEN
JSR PLANEPRINT
JSR COPY_CL
RTS
; ---------------------------------------
OFSETS:
DC.B 0,2,6,10,14,18,22,26,30
DC.B 38,42,46,50,54,58,62,66
DC.B 74,78,82,86,90,94,98,102
DC.B 110,114,118,122,126,130,134,138
; ---------------------------------------
; -------- VARIABLEN ---------------------
GFXNAME: 
DC.B 'graphics.library',0
DOSNAME:
DC.B 'dos.library',0
INTNAME:
DC.B 'intuition.library',0
EVEN
GFXBASE:
DC.L 0
DOSBASE:
DC.L 0
INTBASE:
DC.L 0
CLISTE:
DC.L 0
FILE:
DC.L 0
; ----------------------------------
EVEN
FARBEN:
DC.W $000,$ECA,$E00,$A00,$D80,$FE0,$8F0,$080
DC.W $0B6,$0DD,$0AF,$07C,$00F,$70F,$C0E,$C08
DC.W $620,$E52,$A52,$FCA,$333,$444,$555,$666
DC.W $777,$888,$999,$AAA,$CCC,$DDD,$EEE,$FFF
DPAINTCOLORS:
DC.W $000,$ECA,$E00,$A00,$D80,$FE0,$8F0,$080
DC.W $0B6,$0DD,$0AF,$07C,$00F,$70F,$C0E,$C08
DC.W $620,$E52,$A52,$FCA,$333,$444,$555,$666
DC.W $777,$888,$999,$AAA,$CCC,$DDD,$EEE,$FFF
; --------------
IFF_HEADER:
DC.B 'FORM'
IFF_LENGHT:
DC.L 0
DC.B 'ILBMBMHD'
DC.L $14
IFF_WIDTH:
DC.W 0
IFF_HEIGHT:
DC.W 0
DC.L 0
IFF_BITPL:
DC.B 0
DC.B 0,0,0
DC.W 0
IFF_VER:
DC.W $0A0B
DC.L 0
DC.B 'CMAP'
DC.L $0060
IFF_COLORS:
BLK 96,0
DC.B 'BODY'
BODY_LENGHT:
DC.L 0
EVEN
WINDOWPOINTER:
DC.L 0
MESSAGEPORT:
DC.L 0
MESSAGE:
DC.L 0
; -----------------
; WINDOW PARAMETER
; -----------------
WINDOWDATEN:
DC.W 447        ;X-POSITION
DC.W 0          ;Y-POSITION
DC.W 192        ;BREITE
DC.W 56         ;HOEHE
DC.B 1          ;SCHRIFTFARBE
DC.B 3          ;HINTERGRUNDFARBE
DC.L $40+$8000+$10000 ;IDCMP-FLAGS
DC.L $1000      ;FLAGS
DC.L 0          ;FIRSTGADGET
DC.L 0          ;CHECKMARK
DC.L WINDOWNAME ;ZEIGER AUF FENSTER-TITEL
DC.L 0          ;SCREENZEIGER
DC.L 0          ;KEINE EIGENE BITMAPS
DC.W 0          ;MINESTBREITE
DC.W 0          ;MINESTHOEHE
DC.W 0          ;MAXIMALE BREITE
DC.W 0          ;MAXIMALE HOEHE
DC.W 1          ;SCREENTYPE
EVEN
WINDOWNAME:
DC.B '  SEARCHER   V1.00',0
;-------------------------------------------------------
EVEN
RASTPORT:
BLK.B 90,0
EVEN
;-----------------------------------------------------
BITMAP:
DC.W 84            ; Breite der BitMap in Byte
DC.W 60            ; Anzahl der Zeilen des BitMaps   
DC.B $FF           ; RESERVIERT
DC.B 02            ; ANZAHL DER BITPLANES
DC.W $FFFF           ; RESERVIERT
PLANE1:
DC.L $00000         ; Adresse des 1 BitMaps
PLANE2:
DC.L $00000         ; Adresse des 2 BitMaps
DC.L $00000         ; Adresse des 3 BitMaps |
DC.L $00000         ; Adresse des 4 BitMaps | NICHT 
DC.L $00000         ; Adresse des 5 BitMaps | BENUTZT
DC.L $00000         ; Adresse des 6 BitMaps |
;-------------------------
EVEN
OLDCOPPER:
DC.L 0
BITMAP1:
DC.L 0
BITMAP2:
DC.L 0
COUNTER:
DC.L 0
SPRITE1:
DC.L 0
SPRITE1_HILFSREG:
DC.L 0
KEYSPEED:
DC.L 7000
KEYBOARD_COUNTER:
DC.L 10000
KEYBOARD_COUNTER2:
DC.L 10000
KEYBOARD_COUNTER3:
DC.L 10000
PLANEZEIGER:
DC.L 0,0,0,0,0
PLANEZEIGERBUFFER:
DC.L 0,0,0,0,0
POINTERBYTES:
BLK.B 5,0
POINTERBYTES2:
BLK.B 5,0
PLANEBITS:
DC.B '0'
PLANE_ZAHL:
DC.B '5'
COUNT_OFFSET:
DC.L 40
SPACEOFFSET:
DC.L 8000
DFBREITE:
DC.L 0
BUFFERFARBE:
DC.L 0
NAMECOUNTER:
DC.L 0
EVEN
ZIEL:
BLK.B 6,0
DFSTARTPOINTER:
DC.L $38
DFSTOPPOINTER:
DC.L $D0
MODULOPOINTER:
DC.L 0
MODULOBREITE:
DC.L 0
GESAMT_BREITE:
DC.L 0
PLANE_HOEHE:
DC.L 200
P1:
DC.L 0
P2:
DC.L 0
P3:
DC.L 0
P4:
DC.L 0
P5:
DC.L 0
IFF_BYTE:
DC.L 0
COLORNUMMER:
DC.L 01
HOEHENTEST:
DC.B 00
COLORBYTE:
DC.B 0
; ------------ TEXT -------------
CHANGETEXT:
DC.B 'C'
TEXT1:
DC.B 'BITPLANE-POINTER'
TEXT2:
DC.B '1 OFF CO $000000'
TEXT3:
DC.B '12345'
TEXT4:
DC.B 'DU'
TEXT5:
DC.B 'SG'
TEXT6:
DC.B 'ON '
TEXT7:
DC.B 'OFF'
TEXT8:
DC.B 'MODUS. LORES'
DC.B 'BITPLANES 00'
DC.B 'DFSTART 0056'
DC.B 'DFSTOP  0208'
DC.B 'MODULO  0000'
DC.B 'C.SPEED 0000'
TEXT10:
DC.B 'HI'
TEXT11:
DC.B 'LO'
TEXT12:
DC.B 'VIEW   BREITE'
DC.B 'MODULO BREITE'
DC.B 'GESAMT BREITE'
DC.B 'B.PLANE HOEHE'
TEXT17:
DC.B 'BITPLANEFINDER V1.0 (C)    '
ZAHLEN:
DC.B '01020304050607080910111213141516'
DC.B '17181920212223242526272829303132'
TEXT_RGB:
DC.B 'RGB'
; ----------------------------------
EVEN
Y:
COPPERLIST:
DC.W $0100,$FFFE
SPRITEPOINTER:
DC.W $0120,$0000
DC.W $0122,$0000
DC.W $0124,$0000
DC.W $0126,$0000
DC.W $0128,$0000
DC.W $012A,$0000
DC.W $012C,$0000
DC.W $012E,$0000
DC.W $0130,$0000
DC.W $0132,$0000
DC.W $0134,$0000
DC.W $0136,$0000
DC.W $0138,$0000
DC.W $013A,$0000
DC.W $013C,$0000
DC.W $013E,$0000
BITPLANE1:
DC.W $00E0,$0000
DC.W $00E2,$0000
BITPLANE2:
DC.W $00E4,$0000
DC.W $00E6,$0000
DC.W $008E
GRAPHIC_SCROLL:
DC.W $5EE1
DC.W $0090,$1BFF
DC.W $0108,0
DC.W $010A,0
DC.W $0092,$0038
DC.W $0094,$00D8 
DC.W $0100,%1010001000000000
DC.W $0104,%0000000001000000
DC.W $0180,$0000
DC.W $0182,$0000
DC.W $0184
BLENDE:
DC.W $0000
DC.W $0186
COLORZAHLENFARBE:
DC.W $0AF
DC.W $2911,$FFFE
DC.W $0180,$0FFF
DC.W $2A11,$FFFE
DC.W $0180,$0777
DC.W $2B11,$FFFE
DC.W $0180,$0AAA

DC.W $2D11,$FFFE
SPRITECOLORBASIS:
DC.W $01A6,$0900
DC.W $01A4,$0444
DC.W $01AE,$0FFF 
DC.W $01AC,$0F00
DC.W $01B6,$000F
DC.W $01B4,$0FFF
DC.W $01BE,$00F0
DC.W $01BC,$0000 

DC.W $3911,$FFFE
DC.W $01A6,$0555
DC.W $01A4,$0777
DC.W $01AE,$0F45 
DC.W $01AC,$0179
DC.W $01B6,$0FF3
DC.W $01B4,$000D
DC.W $01BE,$0776
DC.W $01BC,$0923 

DC.W $4511,$FFFE
DC.W $01A6,$00F0
DC.W $01A4,$0999
DC.W $01AE,$0147 
DC.W $01AC,$0FD4
DC.W $01B6,$0DF3
DC.W $01B4,$039C
DC.W $01BE,$00F9
DC.W $01BC,$0AAC 

DC.W $5111,$FFFE
DC.W $01A6,$000F
DC.W $01A4,$0CCC
DC.W $01AE,$0FFF 
DC.W $01AC,$0F00
DC.W $01B6,$000F
DC.W $01B4,$0FFF
DC.W $01BE,$00F0
DC.W $01BC,$0000 

DC.W $5F11,$FFFE
DC.W $0180,$0777
DC.W $6011,$FFFE
DC.W $0180,$0FFF
DC.W $0100,$0000
; ------ FENSTER 2 ----------
BITPLANE1_2:
DC.W $00E0,$0007
DC.W $00E2,$0000
BITPLANE2_2:
DC.W $00E4,$0007
DC.W $00E6,$0000
BITPLANE2_3:
DC.W $00E8,$0007
DC.W $00EA,$0000
BITPLANE2_4:
DC.W $00EC,$0007
DC.W $00EE,$0000
BITPLANE2_5:
DC.W $00F0,$0007
DC.W $00F2,$0000
DIWSTART:
DC.W $008E,$2C81
DIWSTOP:
DC.W $0090,$2BC1
MODULO:
DC.W $0108,0
DC.W $010A,0
DFSTART:
DC.W $0092,$0038
DFSTOP:
DC.W $0094,$00D0
DC.W $0104,000
DC.W $6111,$FFFE
COLORS:
DC.W $0180,$0000
DC.W $0182,$0BA3
DC.W $0184,$00FF
DC.W $0186,$000F
DC.W $0188,$00FF
DC.W $018A,$0ECA
DC.W $018C,$0FF0
DC.W $018E,$099A
DC.W $0190,$0F00
DC.W $0192,$0FFF
DC.W $0194,$0F0F
DC.W $0196,$0FF0
DC.W $0198,$00FF
DC.W $019A,$0333
DC.W $019C,$0555
DC.W $019E,$0777
DC.W $01A0,$0999 
DC.W $01A2,$0AAA
DC.W $01A4,$0CCC
DC.W $01A6,$0EEE
DC.W $01A8,$03DE
DC.W $01AA,$0F20
DC.W $01AC,$0F40
DC.W $01AE,$0F60
DC.W $01B0,$0F80
DC.W $01B2,$0FA0
DC.W $01B4,$0FC0
DC.W $01B6,$0FE0
DC.W $01B8,$02F0
DC.W $01BA,$04F0
DC.W $01BC,$06F0
DC.W $01BE,$08F0

DC.W $6211,$FFFE
DC.W $0100
W:
GRAPHIC_BITS:
DC.W %000000100000000
DC.W $F411,$FFFE
DC.W $FFDF,$FFFE
DC.W $0090,$2AC1
DC.W $2B11,$FFFE
DC.W $0180,$0FFF
DC.W $2C11,$FFFE
DC.W $0180,$0AAA
DC.W $2D11,$FFFE
DC.W $0180,$0666
DC.W $FFFF,$FFFE
COPPERLISTENDE:
