' 21/05/00 Neo, The Dosbreaker

' Bitte sorgfltig durchlesen !
' ------------------------------

' Dieses Programm darf kostenlos weitergegeben werden.
' Sollten nderungen vorgenopmmen werden, so sind die nderungen
' kenntlich zu machen, und bei Weitergabe das Original zugnglich zu
' machen.

' Starten des Programms mit  "Ausfhrten Start" oder SHIFT+F5
' Anmerkung: Sollte der Basic - Interpreter Fehler melden, so
' knnte es sein, dass er mit der Kommentierung nicht klarkommt.
' In diesem Fal bitte die ' gegen REM austauschen, und es msste funzen.

' ######################################################################
' ### WICHTIG!!!                                                     ###
' ### Das Programm wurde von mir mit uerster Sorgfalt entwickelt   ###
' ### und mehr als ausreichend getestet. Ich setze es selber ein.    ###
' ### Es ist aber nicht auszuschlieen, da mgliche Fehler auf-     ###
' ### treten knnten. Im Normalfall geschieht das nicht, aber PCs    ###
' ### haben nunmal ihr eigenleben ;-)                                ###
' ###                                                                ###
' ### Ich bernehme --> keine Haftung <-- fr Schden, die durch die ###
' ### Nutzung des Programms entstehen.                               ###
' ###                                                                ###
' ### Wie gesagt, bei sachgemer Anwendung luft das Programm       ###
' ### einwandfrei.                                                   ###
' ######################################################################


' Viel Spass mit dem Programm

' Erluterung der Anschlsse:
' das Programm ist auf den Port LPT1 konfiguriert.
' Die Anschlsse der Motoren sind wie folgt:

' Ablenkmotoren:
' Bit 0: Motor 1 linkslauf (oder rechts ??)  ;-)
' Bit 1: Motor 1 rechtslauf (oder links ??)  ;-)
' Bit 2: Motor 2 rechts/links egal

' Blankingmotor:
' Bit 3: Motor 3 rechts/links egal

' Die Ansteuerschaltung besteht bei Motor 1 aus einer Brckenschaltung
' mit 4 Transistoren a BD243 / BD244 mit 1kOhm Entkopplung gegen den
' Parallelport.
' Motor 2 erhlt einen Transistor BD243 mit 1kOhm Entkopplung
' Motor 3 ebenso.
' Die Speisespannung betrgt maximal 12V, der Gesamtstrom mit LA12
' liegt bei ca. 1,3A.

' Es ist sinnvoll, einen Maustreiber zu laden...
' ...oder den von Windows zu benutzen.
' Allerdings luft das Programm unter Windows nicht sauber, da Windows
' seine Zugriffe auf die Hardware sehr unregelmssig macht. Es ist daher
' sinnvoll, rein unter DOS zu starten.

' zum ndern des Pfadnamens bitte in folgendem Programmteil suchen
' und dat$(1) entsprechend aendern (Standart ist c:\windows\desktop\laser.dat):

'defname:


'         dat$(1) = "c:\windows\desktop\laser\"
'         dat$(2) = "laser"
'         dat$(3) = ".dat "

' RETURN


' Eine C++ Version dieses Programms ist in Arbeit.

'--------------------------------------------------------------------------
'--------------------------------------------------------------------------
'--------------------------------------------------------------------------



'*********************** Maus initialisieren ****************

     REM Maus (1)
      'Vereinbarungen---------------------------------------
       DIM SHARED Maschine AS STRING * 80
       DECLARE SUB InitMaus ()
       DECLARE SUB Mausi (AX%, bx%, CX%, DX%)
       DECLARE SUB SetMaus (x%, y%, Modus%)
       DECLARE FUNCTION GetMaus% (Modus%)
       DECLARE SUB LageAnzeigen ()
       DIM x%(50, 50)
       DIM b%(20, 20)                    'Edit-Feld
CLEAR , , 4000
CLS
      '"Maschinen"-Daten sammeln----------------------------
       DATA 085, 139, 236, 086, 087
       DATA 139, 118, 012, 139, 004
       DATA 139, 118, 010, 139, 028
       DATA 139, 118, 008, 139, 012
       DATA 139, 118, 006, 139, 020
       DATA 205, 051
       DATA 139, 118, 012, 137, 004
       DATA 139, 118, 010, 137, 028
       DATA 139, 118, 008, 137, 012
       DATA 139, 118, 006, 137, 020
       DATA 095, 094, 093, 202, 008
       DATA 000
      '"Maschinen"-String bilden----------------------------
       DO
         i% = i% + 1
         READ Byte%
         MID$(Maschine, i%, 1) = CHR$(Byte%)
       LOOP UNTIL Byte% = 0
      'Maus-Cursor/Daten anzeigen---------------------------
       CLS
       InitMaus
       SetMaus 1, 1, 0


'********************** Alles Integer **********************

DEFINT A-Z
DIM t AS SINGLE         ' t kein integer




'#############################################################
'######################### Main ##############################
'#############################################################

main:


        GOSUB defzahl           'Zahlen definieren
        GOSUB defshow           'Show   definieren
        GOSUB defpref           'Preferences
        GOSUB defname           'Name des Laser - Mem - Sets
        GOSUB defcolor          'Farben des Speichers auf blau

        GOSUB maske             'Bildschirmmaske
        GOSUB ausg              'Ausgabe der Werte
        GOSUB memwerte          'Anzeigen des Speichers

        GOSUB start             'Programmstart


        OUT port, 0             'Ausschalten der Bits nach Programmende
END

'#############################################################
'######################## Ende Main ##########################
'#############################################################



'******************* Zahlen definieren *********************
     
defzahl:

        DIM z$(1000)
        DATA "0","1","2","3","4","5","6","7","8","9"

        FOR x = 0 TO 9: READ d$(x): NEXT x

        x = -1
        FOR za = 0 TO 9
                FOR zb = 0 TO 9
                        FOR zc = 0 TO 9
                                x = x + 1
                                z$(x) = d$(za) + d$(zb) + d$(zc)
                                REM PRINT z$(x)
                        NEXT zc
                NEXT zb
        NEXT za

RETURN


'******************* show definieren ********************
defshow:

        DIM tdb$(20)
        DATA "T","h","o","r","s","t","e","n","s"," "
        DATA "L","a","s","e","r","s","h","o","w"

        FOR x = 1 TO 19
                READ tdb$(x)
        NEXT x

RETURN


'**************** Voreinstellungen ************************

defpref:

'-------------- Allgemeine Variablen (Global) -------------

        DIM text$(30)           'Zeilen zu Beginn der laser.dat
       
        DIM memta(50)          'Memory 01 - 41, ma - mc,
        DIM memtb(50)          'time
        DIM memtc(50)
        DIM mempa(50)          'pause
        DIM mempb(50)
        DIM mempc(50)
        DIM memra(50)           'Motor a Richtung
        DIM memc(50)            'MemColor m01 - m42

        port = 888              'Printerport #1

        ma = 0                  'Motor a
        mb = 0                  'Motor b
        mc = 0

        xa = 0                  'Index impuls a
        xb = 0                  'Index impuls b
        xc = 0

        ya = 0                  'Index pause a
        yb = 0                  'Index pause b
        yc = 0

        ta = 0                  'Time a
        tb = 0                  'Time b
        tc = 0                  'Time c

        pa = 0                  'Pause a
        pb = 0                  'Pause b
        pc = 0                  'Pause c

        r = 1                   'Richtung
        r$(1) = "rechts"        'Anzeige rechts
        r$(2) = "links "        'Anzeige links

        ende = 1                'Programmausstieg bei 0

        ca = 0                  'index hochzhlen
        cb = 0
        cc = 0

        da = 0                  'pause hochzhlen
        db = 0
        dc = 0

RETURN


'------------ Name und Pfad des Lasermusters ----------------
defname:


        dat$(1) = "c:\windows\desktop\laser\"
        dat$(2) = "laser"
        dat$(3) = ".dat "

RETURN


'---------------------- ClearColor -------------------------
'-------- Farbe fr leere Mem - Felder = blau (1) ----------

defcolor:

        FOR x = 1 TO 50
                memc(x) = 1             'Farbe der Speicherzelle = blau
        NEXT x

RETURN


'################# Ende Voreinstellungen ####################




'###################################################################
'################# Auswertung Tastatur und Maus ####################
'###################################################################

eingabe:

'----------------- Programm beenden? -----------------------
        IF a$ = " " THEN ende = 0
        IF maust = 1 AND mausy = 22 THEN
                IF mausx >= 25 AND mausx <= 47 THEN ende = 0
        END IF
             
     
'-------------- Abfrage Richtung Motor 1 ----------------
        IF a$ = "r" THEN
                ausg = 1
                IF r = 1 THEN r = 2 ELSE r = 1
             
        END IF

          
        IF maust = 1 AND mausy = 11 THEN
                IF mausx >= 2 OR mausx <= 23 THEN
                        ausg = 1
                        IF r = 1 THEN r = 2 ELSE r = 1
                END IF
                FOR t = 1 TO 8000: NEXT t       'Maus - Wartezeit
        END IF

'-----------------Ende Abfrage Richtung Motor 1-------------




'******************** Motor A Sinus ************************

'++++++++++++++++++++++ Impulszeit +++++++++++++++++++++++++
     
'---------------------- Feineinstellung --------------------

        IF a$ = CHR$(0) + CHR$(72) THEN ta = ta + 1: ausg = 1
        IF maust = 1 AND mausy = 9 THEN
                ausg = 1
                IF mausx = 18 THEN ta = ta + 1
                FOR t = 1 TO 600: NEXT t
        END IF
              
        IF a$ = CHR$(0) + CHR$(80) THEN ta = ta - 1: ausg = 1
        IF maust = 1 AND mausy = 9 THEN
                ausg = 1
                IF mausx = 14 THEN ta = ta - 1
                FOR t = 1 TO 600: NEXT t
        END IF

        IF maust = 1 AND mausy = 9 THEN
                ausg = 1
                IF mausx = 20 THEN ta = 0
                FOR t = 1 TO 600: NEXT t
        END IF

'--------------------- Grobeistellung ---------------------
      
        IF maust = 2 AND mausy = 9 THEN
                ausg = 1
                IF mausx = 18 THEN ta = ta + 10
                FOR t = 1 TO 2000: NEXT t
        END IF
             
        IF maust = 2 AND mausy = 9 THEN
                ausg = 1
                IF mausx = 14 THEN ta = ta - 10
                FOR t = 1 TO 2000: NEXT t
        END IF


'...................... Ende Impulszeit .....................


'++++++++++++++++++++++ Pausenzeit ++++++++++++++++++++++++++

'---------------------- Feineinstellung ---------------------
       
        IF a$ = CHR$(0) + CHR$(77) THEN pa = pa + 1: ausg = 1
        IF maust = 1 AND mausy = 9 THEN
                ausg = 1
                IF mausx = 36 THEN pa = pa + 1
                FOR t = 1 TO 600: NEXT t
        END IF
     
        IF a$ = CHR$(0) + CHR$(75) THEN pa = pa - 1: ausg = 1
        IF maust = 1 AND mausy = 9 THEN
                ausg = 1
                IF mausx = 32 THEN pa = pa - 1
                FOR t = 1 TO 600: NEXT t
        END IF
     
        IF maust = 1 AND mausy = 9 THEN
                ausg = 1
                IF mausx = 38 THEN pa = 0
                FOR t = 1 TO 600: NEXT t
        END IF

      
'---------------------- Grobeinstellung --------------------
       
        IF maust = 2 AND mausy = 9 THEN
                ausg = 1
                IF mausx = 36 THEN pa = pa + 10
                FOR t = 1 TO 600: NEXT t
        END IF
    
        IF maust = 2 AND mausy = 9 THEN
                ausg = 1
                IF mausx = 32 THEN pa = pa - 10
                FOR t = 1 TO 600: NEXT t
        END IF
'...................... Ende Pausenzeit .........................

'++++++++++++++++++++++++ Motor 1 aus +++++++++++++++++++++++++++
     
        IF a$ = CHR$(0) + CHR$(63) THEN ta = 0: pa = 0: ausg = 1
        IF maust = 1 AND mausy = 4 THEN
                ausg = 1
                IF mausx >= 2 AND mausx <= 12 THEN ta = 0: pa = 0
                FOR t = 1 TO 600: NEXT t
        END IF

'+++++++++++++++++++++ Anfangs- und Endwertcheck +++++++++++++++++++

        IF ta <= 0 THEN ta = 0
        IF ta >= 999 THEN ta = 999
        IF pa <= 0 THEN pa = 0
        IF pa >= 999 THEN pa = 999
     



'*********************** Motor B Sinus **************************

'++++++++++++++++++++++++++ Impulszeit ++++++++++++++++++++++++++

'----------------------- Feineinstellung ------------------------

        IF a$ = "8" THEN tb = tb + 1: ausg = 1
        IF maust = 1 AND mausy = 9 THEN
                IF mausx = 58 THEN tb = tb + 1: ausg = 1
                 FOR t = 1 TO 600: NEXT t
        END IF
             
        IF a$ = "2" THEN tb = tb - 1: ausg = 1
        IF maust = 1 AND mausy = 9 THEN
                IF mausx = 54 THEN tb = tb - 1: ausg = 1
                FOR t = 1 TO 600: NEXT t
        END IF

        IF maust = 1 AND mausy = 9 THEN
                IF mausx = 60 THEN tb = 0: ausg = 1
                FOR t = 1 TO 600: NEXT t
        END IF

'----------------------- Grobeinstellung -----------------------

        IF maust = 2 AND mausy = 9 THEN
                IF mausx = 58 THEN tb = tb + 10
                ausg = 1
                FOR t = 1 TO 600: NEXT t
        END IF
            
        IF maust = 2 AND mausy = 9 THEN
                IF mausx = 54 THEN tb = tb - 10
                ausg = 1
                FOR t = 1 TO 600: NEXT t
        END IF


'........................ Ende Impulszeit .....................


'++++++++++++++++++++++ Pausenzeit ++++++++++++++++++++++++++++

'--------------------- Feineinstellung ------------------------
          
        IF a$ = "6" THEN pb = pb + 1: ausg = 1
        IF maust = 1 AND mausy = 9 THEN
                IF mausx = 76 THEN pb = pb + 1: ausg = 1
                FOR t = 1 TO 600: NEXT t
        END IF
    
        IF a$ = "4" THEN pb = pb - 1: ausg = 1
        IF maust = 1 AND mausy = 9 THEN
                IF mausx = 72 THEN pb = pb - 1: ausg = 1
                FOR t = 1 TO 600: NEXT t
        END IF
    
        IF maust = 1 AND mausy = 9 THEN
                IF mausx = 78 THEN pb = 0: ausg = 1
                FOR t = 1 TO 600: NEXT t
        END IF


'--------------------- Grobeinstellung ------------------

        IF maust = 2 AND mausy = 9 THEN
                IF mausx = 76 THEN pb = pb + 10
                ausg = 1
                FOR t = 1 TO 600: NEXT t
        END IF
   
        IF maust = 2 AND mausy = 9 THEN
                IF mausx = 72 THEN pb = pb - 10
                ausg = 1
                FOR t = 1 TO 600: NEXT t
        END IF
   
'....................... Ende Pausenzeit .....................


'+++++++++++++++++++++++++ Motor 2 aus ++++++++++++++++++++++++

        IF a$ = CHR$(0) + CHR$(64) THEN tb = 0: pb = 0: ausg = 1
        IF maust = 1 AND mausy = 4 THEN
                IF mausx >= 41 AND mausx <= 51 THEN tb = 0: pb = 0: ausg = 1
                FOR t = 1 TO 600: NEXT t
        END IF

'+++++++++++++++++++ Anfangs- und Endwertcheck +++++++++++++++++++
       
        IF tb <= 0 THEN tb = 0
        IF tb >= 999 THEN tb = 999
        IF pb <= 0 THEN pb = 0
        IF pb >= 999 THEN pb = 999

'....................... Ende Motor 2 Sinus .....................



'******************* Motor C Blanking ***************************

'+++++++++++++++++++++++++ Impulszeit +++++++++++++++++++++++++++
      
'----------------------- Feineinstellung ------------------------

        IF a$ = CHR$(0) + CHR$(71) THEN tc = tc + 1: ausg = 1
        IF maust = 1 AND mausy = 18 THEN
                IF mausx = 18 THEN tc = tc + 1: ausg = 1
                FOR t = 1 TO 1000: NEXT t
        END IF
            
        IF a$ = CHR$(0) + CHR$(79) THEN tc = tc - 1: ausg = 1
        IF maust = 1 AND mausy = 18 THEN
                IF mausx = 14 THEN tc = tc - 1: ausg = 1
                FOR t = 1 TO 1000: NEXT t
        END IF

        IF maust = 1 AND mausy = 18 THEN
                IF mausx = 20 THEN tc = 0: ausg = 1
                FOR t = 1 TO 1000: NEXT t
        END IF

'------------------- Grobeinstellung ----------------------

        IF maust = 2 AND mausy = 18 THEN
                IF mausx = 18 THEN tc = tc + 10
                ausg = 1
                FOR t = 1 TO 2000: NEXT t
        END IF
           
        IF maust = 2 AND mausy = 18 THEN
                IF mausx = 14 THEN tc = tc - 10
                ausg = 1
                FOR t = 1 TO 2000: NEXT t
        END IF

'........................ Ende Impulszeit .....................


'+++++++++++++++++++++++ Pausenzeit +++++++++++++++++++++++++++

'----------------------- Feineinstellung ------------------------

        IF a$ = CHR$(0) + CHR$(81) THEN pc = pc + 1: ausg = 1
        IF maust = 1 AND mausy = 18 THEN
                IF mausx = 36 THEN pc = pc + 1: ausg = 1
                FOR t = 1 TO 800: NEXT t
        END IF
   
        IF a$ = CHR$(0) + CHR$(83) THEN pc = pc - 1: ausg = 1
        IF maust = 1 AND mausy = 18 THEN
                IF mausx = 32 THEN pc = pc - 1: ausg = 1
                FOR t = 1 TO 800: NEXT t
        END IF
   
        IF maust = 1 AND mausy = 18 THEN
                IF mausx = 38 THEN pc = 0: ausg = 1
                FOR t = 1 TO 800: NEXT t
        END IF

'--------------------- Grobeinstellung --------------------
      
        IF maust = 2 AND mausy = 18 THEN
                IF mausx = 36 THEN pc = pc + 10
                ausg = 1
                FOR t = 1 TO 2000: NEXT t
        END IF
  
        IF maust = 2 AND mausy = 18 THEN
                IF mausx = 32 THEN pc = pc - 10
                ausg = 1
                FOR t = 1 TO 2000: NEXT t
        END IF
  
'........................ Ende Pausenzeit .....................



'+++++++++++++++++++ Motor C Zerhacker aus +++++++++++++++++++++
   
        IF a$ = CHR$(0) + CHR$(65) THEN tc = 0: pc = 0: ausg = 1
        IF maust = 1 AND mausy = 13 THEN
                IF mausx >= 2 AND mausx <= 12 THEN tc = 0: pc = 0: ausg = 1
                FOR t = 1 TO 400: NEXT t
        END IF

'+++++++++++++++++ Anfangs- und Endwertcheck +++++++++++++++++++

        IF tc <= 0 THEN tc = 0
        IF tc >= 999 THEN tc = 999
        IF pc <= 0 THEN pc = 0
        IF pc >= 999 THEN pc = 999

'.................................................................
'............. Ende Motoreneinstellungen .........................
'.................................................................



'************************* Global ********************************
'--- Globale Einstellungen sind ber den Bildschirm verteilt   ---

        IF a$ = CHR$(0) + CHR$(66) THEN
                ausg = 1
                ta = 0: tb = 0: tc = 0
                pa = 0: pb = 0: pc = 0
        END IF

        IF maust = 1 AND mausy = 2 THEN
                IF mausx >= 65 AND mausx <= 71 THEN
                        ausg = 1
                        ta = 0: tb = 0: tc = 0
                        pa = 0: pb = 0: pc = 0
                END IF
                FOR t = 1 TO 200: NEXT t
        END IF

        IF maust = 1 AND mausy = 2 THEN
                IF mausx >= 72 AND mausx <= 75 THEN
                        ausg = 1
                        ta = 0: tb = 0: tc = 0
                END IF
                FOR t = 1 TO 200: NEXT t
        END IF

        IF maust = 1 AND mausy = 2 THEN
                IF mausx >= 76 AND mausx <= 79 THEN
                        ausg = 1
                        pa = 0: pb = 0: pc = 0
                END IF
             
                FOR t = 1 TO 200: NEXT t
        END IF

'..................... Ende Global ...........................


'************************* Memory ******************************

'+++++++++++++++++++++++ Speichern +++++++++++++++++++++++++++++

IF maust = 1 AND mausy >= 15 AND mausy <= 20 AND mausx >= 43 THEN GOSUB memory
IF maust = 2 AND mausy >= 15 AND mausy <= 20 AND mausx >= 43 THEN GOSUB memory


'+++++++++++++++++++++++ MemClear +++++++++++++++++++++++++++++++

IF maust = 1 AND mausy = 13 THEN
        IF mausx >= 73 AND mausx <= 79 THEN GOSUB memclr
END IF


'++++++++++++++++++++++ Save to disk ++++++++++++++++++++++++++++++

IF maust = 1 AND mausy = 13 THEN
        IF mausx >= 48 AND mausx <= 53 THEN GOSUB stdisk
END IF


'++++++++++++++++++++++ Load from disk ++++++++++++++++++++++++++++

IF maust = 1 AND mausy = 13 THEN
        IF mausx >= 41 AND mausx <= 46 THEN GOSUB lfdisk
END IF


ausg = 1        'Daten ausgeben

'....................... Ende Memory .............................


'++++++++++++++++++++ Daten ausgeben ??? +++++++++++++++++++++++++

IF ausg = 1 THEN GOSUB ausg


RETURN


'....................................................................
'............... Ende Auswertung Tastatur und Maus ..................
'....................................................................




'********************************************************************
'********** Beginn des Hauptprogramms- und Abbruchschleife **********
'********************************************************************

start:


WHILE ende <> 0

'------------------Abfrage Wert Tastatur Maus------------------------
       
a$ = INKEY$
mausx = GetMaus(3)
mausy = GetMaus(4)
maust = GetMaus(0)

IF a$ <> "" THEN GOSUB eingabe
IF maust <> 0 THEN GOSUB eingabe



'----------------- Motor Bit setzen ? -------------------
        IF xa >= ta THEN ma = r: xa = 0: ca = 0: da = 1
        IF xb >= tb THEN mb = 4: xb = 0: cb = 0: db = 1
        IF xc >= tc THEN mc = 8: xc = 0: cc = 0: dc = 1

'----------------- Motor Bit lschen? -------------------
        IF ya >= pa THEN ma = 0: ya = 0: ca = 1: da = 0
        IF yb >= pb THEN mb = 0: yb = 0: cb = 1: db = 0
        IF yc >= pc THEN mc = 0: yc = 0: cc = 1: dc = 0



'************************* Index *****************************

'---------------------- Index Impuls ++ ----------------------
       
        IF ca = 1 THEN xa = xa + 1
        IF cb = 1 THEN xb = xb + 1
        IF cc = 1 THEN xc = xc + 1


'---------------------- Index Pause ++ -----------------------
       
        IF da = 1 THEN ya = ya + 1
        IF db = 1 THEN yb = yb + 1
        IF dc = 1 THEN yc = yc + 1

'------------------- Ausgabe Index ----------------------------

LOCATE 7, 16: PRINT xa          'Index Impuls Motor a
LOCATE 7, 33: PRINT ya          'Index Pause  Motor a

LOCATE 7, 56: PRINT xb          'Index Impuls Motor b
LOCATE 7, 73: PRINT yb          'Index Pause  Motor b

LOCATE 16, 16: PRINT xc         'Index Impuls Motor c
LOCATE 16, 33: PRINT yc         'Index Pause  Motor c


'-------------Ausgabe der Daten auf den Port--------------------

OUT port, ma + mb + mc

'-------------------Anzeigen der Daten--------------------------

LOCATE 22, 76: PRINT ma + mb + mc

LOCATE 22, 60: PRINT ma
LOCATE 22, 66: PRINT mb
LOCATE 22, 71: PRINT mc

'-------------------------- Show----------------------------------

REM GOSUB show



'------------- Anzeigen der Maus - Position ----------------------

LOCATE 22, 11: PRINT mausx
LOCATE 22, 16: PRINT mausy
LOCATE 22, 21: PRINT maust


WEND
RETURN

'##################### Ende des Hauptprogramms ######################




'********************************************************************
'************************* Unterprogramme ***************************
'********************************************************************

'************************** Programmrotienen ************************




'+++++++++++++++++++ Ausgabe der Werte +++++++++++++++++++++++++
'--- Die Zahlen sind der Index fr z$ (gegen die res. Stelle ---
'--- des Minuszeichens                                       ---

ausg:
        LOCATE 11, 13: PRINT r$(r)
              
        LOCATE 9, 15: PRINT z$(ta)
        LOCATE 9, 33: PRINT z$(pa)

        LOCATE 9, 55: PRINT z$(tb)
        LOCATE 9, 73: PRINT z$(pb)

        LOCATE 18, 15: PRINT z$(tc)
        LOCATE 18, 33: PRINT z$(pc)

ausg = 0                'Werte ausgeben

RETURN

'.................... Ende Ausgabe der Werte .................


            


'++++++++++++++++++++ Ausgabe des Speichers +++++++++++++++++

memwerte:

LOCATE 15, 44: COLOR memc(1): PRINT "M01"
LOCATE 16, 44: COLOR memc(2): PRINT "M02"
LOCATE 17, 44: COLOR memc(3): PRINT "M03"
LOCATE 18, 44: COLOR memc(4): PRINT "M04"
LOCATE 19, 44: COLOR memc(5): PRINT "M05"
LOCATE 20, 44: COLOR memc(6): PRINT "M06"

LOCATE 15, 49: COLOR memc(7): PRINT "M07"
LOCATE 16, 49: COLOR memc(8): PRINT "M08"
LOCATE 17, 49: COLOR memc(9): PRINT "M09"
LOCATE 18, 49: COLOR memc(10): PRINT "M10"
LOCATE 19, 49: COLOR memc(11): PRINT "M11"
LOCATE 20, 49: COLOR memc(12): PRINT "M12"

LOCATE 15, 54: COLOR memc(13): PRINT "M13"
LOCATE 16, 54: COLOR memc(14): PRINT "M14"
LOCATE 17, 54: COLOR memc(15): PRINT "M15"
LOCATE 18, 54: COLOR memc(16): PRINT "M16"
LOCATE 19, 54: COLOR memc(17): PRINT "M17"
LOCATE 20, 54: COLOR memc(18): PRINT "M18"

LOCATE 15, 59: COLOR memc(19): PRINT "M19"
LOCATE 16, 59: COLOR memc(20): PRINT "M20"
LOCATE 17, 59: COLOR memc(21): PRINT "M21"
LOCATE 18, 59: COLOR memc(22): PRINT "M22"
LOCATE 19, 59: COLOR memc(23): PRINT "M23"
LOCATE 20, 59: COLOR memc(24): PRINT "M24"
           
LOCATE 15, 64: COLOR memc(25): PRINT "M25"
LOCATE 16, 64: COLOR memc(26): PRINT "M26"
LOCATE 17, 64: COLOR memc(27): PRINT "M27"
LOCATE 18, 64: COLOR memc(28): PRINT "M28"
LOCATE 19, 64: COLOR memc(29): PRINT "M29"
LOCATE 20, 64: COLOR memc(30): PRINT "M30"

LOCATE 15, 69: COLOR memc(31): PRINT "M31"
LOCATE 16, 69: COLOR memc(32): PRINT "M32"
LOCATE 17, 69: COLOR memc(33): PRINT "M33"
LOCATE 18, 69: COLOR memc(34): PRINT "M34"
LOCATE 19, 69: COLOR memc(35): PRINT "M35"
LOCATE 20, 69: COLOR memc(36): PRINT "M36"

LOCATE 15, 74: COLOR memc(37): PRINT "M37"
LOCATE 16, 74: COLOR memc(38): PRINT "M38"
LOCATE 17, 74: COLOR memc(39): PRINT "M39"
LOCATE 18, 74: COLOR memc(40): PRINT "M40"
LOCATE 19, 74: COLOR memc(41): PRINT "M41"
LOCATE 20, 74: COLOR memc(42): PRINT "M42"
           
COLOR 7
RETURN

'.................... Ende Ausgabe des Speichers .............



'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'+++++++++++++++++++++++ Load / Save (memory) +++++++++++++++++++++++++++
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

'------------------- Berechnung der Matrix------------------------------
'--- Das Speicherfeld wird zunchst in drei Spalten mit je 5 Bild-   ---
'--- schirmspalten aufgeteilt, und eine Nummer zugewiesen. Zu dieser ---
'--- wird die Zahl der Speicherpltze der vorigen Spalten addiert.   ---
'--- Die x - Koordinate ergibt sich nun, indem man mausx mit der o.g.---
'--- Einteilung vergleicht.                                          ---
'--- Die y - Koordinate wird errechnet, indem von der mausy - Posi-  ---
'--- tion der Wert der ersten Zeile abgezogen wird.                  ---
'-----------------------------------------------------------------------


memory:

IF mausx >= 43 AND mausx <= 47 THEN memx = 1 + 0
IF mausx >= 48 AND mausx <= 52 THEN memx = 1 + 6
IF mausx >= 53 AND mausx <= 57 THEN memx = 1 + 12
IF mausx >= 58 AND mausx <= 62 THEN memx = 1 + 18
IF mausx >= 65 AND mausx <= 67 THEN memx = 1 + 24
IF mausx >= 68 AND mausx <= 72 THEN memx = 1 + 30
IF mausx >= 73 AND mausx <= 77 THEN memx = 1 + 36

IF mausx < 78 THEN memy = mausy - 15 ELSE memy = 0

LOCATE 2, 2: PRINT memx + memy



'----------------------Werte Lesen-----------------------

IF maust = 1 THEN
        ta = memta(memx + memy): pa = mempa(memx + memy)
        tb = memtb(memx + memy): pb = mempb(memx + memy)
        tc = memtc(memx + memy): pc = mempc(memx + memy)
        r = memra(memx + memy)
END IF



'------------------Werte Speichern-------------------

IF maust = 2 THEN
        memta(memx + memy) = ta: mempa(memx + memy) = pa
        memtb(memx + memy) = tb: mempb(memx + memy) = pb
        memtc(memx + memy) = tc: mempc(memx + memy) = pc
        memra(memx + memy) = r
        memc(memx + memy) = 2           'Farbe der Speicherzelle = grn
        GOSUB memwerte
END IF

RETURN



'++++++++++++++++++++++ Clear Memory +++++++++++++++++++++++++

memclr:

FOR x = 1 TO 50
        memta(x) = 0: mempa(x) = 0      'Motor a
        memtb(x) = 0: mempc(x) = 0      'Motor b
        memtc(x) = 0: mempc(x) = 0      'Motor c
        memra(x) = 0                    'Motor a Richtung
        memc(x) = 1
NEXT x

GOSUB memwerte

RETURN

'................. Ende Speicher lesen / schreiben ..........


'++++++++++++++++++++++ Save to disk ++++++++++++++++++++++

stdisk:


OPEN "o", #1, dat$(1) + dat$(2) + dat$(3)


FOR i = 1 TO 42
        PRINT #1, memta(i)
        PRINT #1, mempa(i)
        PRINT #1, memra(i)

        PRINT #1, memtb(i)
        PRINT #1, mempb(i)

        PRINT #1, memtc(i)
        PRINT #1, mempc(i)
       
        PRINT #1, memc(i)
NEXT i


CLOSE #1

'---- Ausgabe "gespeichert!" ---

ct = ct + 1: IF ct > 15 THEN ct = 1

LOCATE 13, 57: COLOR ct: PRINT "gespeichert!"
COLOR 7
FOR t = 1 TO 10000: NEXT t              'Mausverzgerung

RETURN

'......................... Ende save to disk .................


'+++++++++++++++++++++++++ Load from disk ++++++++++++++++++++

lfdisk:

OPEN "i", #1, dat$(1) + dat$(2) + dat$(3)

FOR i = 1 TO 42


        INPUT #1, memta(i)
        INPUT #1, mempa(i)
        INPUT #1, memra(i)

        INPUT #1, memtb(i)
        INPUT #1, mempb(i)

        INPUT #1, memtc(i)
        INPUT #1, mempc(i)

        INPUT #1, memc(i)

NEXT i

CLOSE #1

'--- Ausgabe "geladen!" ---
ct = ct + 1: IF ct > 15 THEN ct = 1
LOCATE 13, 57: COLOR ct: PRINT "geladen!     "
COLOR 3

GOSUB memwerte          'Speicher ausgeben

RETURN


'########################### Ende Programmrotienen ####################


'++++++++++++++++++++++++++ Bildschirmmaske +++++++++++++++++++++++++++

maske:

COLOR 3
LOCATE 1, 1: PRINT "ͻ"
LOCATE 2, 1: PRINT "                                                                             "
LOCATE 3, 1: PRINT "͹"
LOCATE 4, 1: PRINT "               Status:                              Status:                "
LOCATE 5, 1: PRINT "ͼ                          ͼ                           "
LOCATE 6, 1: PRINT "                                                                             "
LOCATE 7, 1: PRINT " Index Impuls:     Index Pause:         Index Impuls:     Index Pause:       "
LOCATE 8, 1: PRINT "                                                                             "
LOCATE 9, 1: PRINT " Max Pause          Max Impuls          Max Pause          Max Impuls        "
LOCATE 10, 1: PRINT "                                                                             "
LOCATE 11, 1: PRINT " Richtung:                                                                   "
LOCATE 12, 1: PRINT "͹"
LOCATE 13, 1: PRINT "               Status                 Load  Save                   Clear "
LOCATE 14, 1: PRINT "ͼ                          ͹"
LOCATE 15, 1: PRINT "                                                                             "
LOCATE 16, 1: PRINT " Index Impuls:     Index Pause:                                              "
LOCATE 17, 1: PRINT "                                                                             "
LOCATE 18, 1: PRINT " Max Pause          Max Impuls                                               "
LOCATE 19, 1: PRINT "                                                                             "
LOCATE 20, 1: PRINT "                                                                             "
LOCATE 21, 1: PRINT "͹"
LOCATE 22, 1: PRINT " Maus: X:   Y:   T:    Beenden mit Leertaste                                "
LOCATE 23, 1: PRINT "ͼ"

LOCATE 2, 25: PRINT "Thorstens Lasershow"


COLOR 3: LOCATE 4, 3: PRINT "Motor 1"
         LOCATE 4, 42: PRINT "Motor 2"
         LOCATE 13, 3: PRINT "Zerhacker"


COLOR 4: LOCATE 9, 20: PRINT "R"
         LOCATE 9, 38: PRINT "R"
         LOCATE 9, 60: PRINT "R"
         LOCATE 9, 78: PRINT "R"
         LOCATE 18, 20: PRINT "R"
         LOCATE 18, 38: PRINT "R"
         LOCATE 2, 66: PRINT "Reset  ti  tp"

COLOR 14: LOCATE 9, 14: PRINT "<   >"
          LOCATE 9, 32: PRINT "<   >"
          LOCATE 9, 54: PRINT "<   >"
          LOCATE 9, 72: PRINT "<   >"
          LOCATE 18, 14: PRINT "<   >"
          LOCATE 18, 32: PRINT "<   >"

COLOR 12: LOCATE 22, 50: PRINT "Daten:  M1    M2    Z    G"

COLOR 7
RETURN

'....................... Ende Bildschirmmaske ..................


'+++++++++++++++++++++ Animation in der Titelzeile ++++++++++++++++++

show:

sh = 0

REM c = c + 1: IF c = 16 THEN c = 1
C = 16 * RND(1) + 1
tdb = tdb + 1: IF tdb = 20 THEN tdb = 1
LOCATE 2, 24 + tdb: COLOR C: PRINT tdb$(tdb)

COLOR 7
RETURN

'................. Ende Animation in der Titelzeile ................

DEFSNG A-Z
     FUNCTION GetMaus% (Modus%)
       Mausi 3, taste%, xMaus%, yMaus%
       SELECT CASE Modus%
         CASE 0: GetMaus% = taste%          'Tastenstatus
         CASE 1: GetMaus% = xMaus%          'x-Koordinate
         CASE 2: GetMaus% = yMaus%          'y-Koordinate
         CASE 3: GetMaus% = xMaus% \ 8 + 1  'Spalte
         CASE 4: GetMaus% = yMaus% \ 8 + 1  'Zeile
       END SELECT
     END FUNCTION

     SUB InitMaus
      'Treiber initialisieren
       Mausi 0, 0, 0, 0
      'Mauszeiger sichtbar machen
       Mausi 1, 0, 0, 0
     END SUB

SUB LageAnzeigen
END SUB

     SUB Mausi (AX%, bx%, CX%, DX%)
       IF Maschine <> SPACE$(80) THEN
         DEF SEG = VARSEG(Maschine)
         Offset% = VARPTR(Maschine)
         CALL ABSOLUTE(AX%, bx%, CX%, DX%, Offset%)
       END IF
       DEF SEG
     END SUB

     SUB SetMaus (x%, y%, Modus%)
       IF Modus% = 0 THEN
         x% = 8 * (x% - 1)
         y% = 8 * (y% - 1)
       END IF
       Mausi 4, 0, x%, y%
     END SUB

