Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Demoprogramm: Open-Maxi abbremsen auf Original-C-Control-Niveau Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 16.10.2020 2:24)
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini Station
' ===========================================================================
' Demoprogramm: Open-Maxi abbremsen auf Original-C-Control-Niveau
' In OCBASIC 1.11a für Open-Maxi von Dietmar Harlos am 12. September 2020
' ===========================================================================

' Die Open-Maxi wird bekanntlich mit einem Bustakt von 20 MHz betrieben und
' ist deshalb über 100-mal schneller als die Original-C-Control Version 1.1.
' Doch nicht immer ist diese hohe Geschwindigkeit erwünscht. Die Geschwin-
' digkeit der Open-Maxi kann sehr elegant mittels SLOWMODE ON auf ein
' Sechszehntel des normalen Takts reduziert werden. Dann arbeitet sie mit
' 1,25 MHz Bustakt. Doch auch damit ist die Open-Maxi immer noch über 6-mal
' schneller als die Original-C-Control. In diesem Programm befindet sich
' eine Assemblerroutine, die in den Interpreter des Betriebssystems einge-
' bunden wird und die Befehlsausführung abbremst. Damit ist die Open-Maxi
' fast genauso schnell wie die Original-C-Control, wie der in diesem
' Programm enthaltene Benchmark-Test von DIE HARD zeigt.

' Dieses Programm basiert auf dem folgenden Programm von DIE HARD:

' m20samples_jun05\UNIT_M2.0_M1.2\TOOLS_M2.0_M1.2\BENCHMARK\BENCHMARK_M20.bas

' Bekanntlich wird die Original-C-Control mit 2 MHz Bustakt betrieben. Da
' viele Assemblerbefehle auf der CPU der Open-Maxi weniger Zyklen be-
' nötigen, entspricht das ungefähr 1,25 MHz OM-Takt. Assemblerprogramme
' für die C-Control sollten also bei SLOWMODE ON mit in etwa gleicher
' Geschwindigkeit ablaufen. Sie können also weiterverwendet werden. Aller-
' dings sollten die Assemblerprogramme im Sourcecode vorliegen, damit sie
' angepaßt werden können. Ein Assemblerprogramm der Original-C-Control als
' S19-File dürfte auf der Open-Maxi nicht laufen, weil sich zuviel geändert
' hat: Das Speicherlayout der Ports ist anders, die MCU-Module sind anders,
' der Rechenstack ist anders und an anderer Adresse, der SYSCODE-Bereich
' beginnt an Adresse $0900 statt $0101 (wird evtl. durch SYS hingebogen),
' Assembler-Interruptroutinen werden anders vereinbart, USER-RAM liegt an
' anderer Adresse ($aa statt $a1), Einsprünge ins OS sind notgedrungen nicht
' an gleicher Adresse und I²C ist anders. Aber die CPUs der OM-Controller
' sind abwärtskompatibel zur 6805-CPU. Das heißt, es werden alle Assembler-
' befehle der 6805 unterstützt. Wenn der Sourcecode eines Assemblerprogramms
' verloren gegangen ist, kann versucht werden, es mittels IDI05, DI05 und
' DI08 zu disassemblieren.

' An dieser Stelle möchte ich mich bei Norbert Klein und bei Dirk von "das
' |_ Team" für ihre Unterstützung bedanken.

' --- Definitionen ----------------------------------------------------------

INCLUDE "omax.def"            ' Definitionen für die Open-Maxi

'--------------------------
'------ I/O PORTS ---------
'--------------------------
define LED       port[8]
define INSTRUC   word[1]
define ST        byte[3]
define COUNTER   byte[5]
'--------------------------

' --- Unsere eigene Assembler-Routine im Interpreter ------------------------

' Die OM-Controller unterstützen das Einbinden einer Assemblerroutine in
' den Interpreter des Systems. Die Routine wird jedesmal gestartet, nachdem
' ein neuer Tokenbefehl aus dem Speicher geholt wurde. Das ist unmittelbar
' bevor der Tokenbefehl vom Interpreter ausgeführt wird. Auf FREERAM1
' hinterlegt das Betriebssystem den auszuführenden Token-Code.

' Die folgende Subroutine muß am Anfang des Programms stehen und sollte
' sinnvollerweise in einer INCLUDE-Datei untergebracht werden.

' Der OCBASIC-Compiler setzt automatisch ein "GOTO main" vor diese Routine.

PROC URTok_iiar INLASM
! cbeqa #iTOK,urtok_is        ' Unterscheidung der Interruptquellen
! jmp URTok_iiar_next+2       ' zur nächsten IIAR in der Kette springen

#urtok_is
! ldhx #71                    ' 16-Bit-Indexregister H:X auf Wert setzen
#urtok_ws
! aix #-1                     ' Von H:X eins abziehen
! cmphx #0                    ' Vergleiche H:X mit dem Wert Null.
! bne urtok_ws                ' Springe, wenn nicht gleich.

! lda FREERAM1                ' Tokencode (in A) ausführen
! clc
! rts
END PROC

#URTok_iiar_next              ' hier hinter folgt die nächste IIAR
                              ' (sofern vorhanden)

' --- Hauptprogramm ---------------------------------------------------------

#main          'durch die IIAR am Programmbeginn wird ein "GOTO main" erzeugt

PRINT "Benchmark auf der Open-Maxi"

PrintSpc=ON    'Bei PRINT dezimale Zahlen mit führendem Leerzeichen ausgeben
End2Host=ON    'Bei Programmende (siehe END) gleich in den Host-Modus wechseln

URTok=ON       'Assemblerroutine in den Interpreter einbinden

SLOWMODE ON    'von 20 MHz auf 1.25 MHz Bustakt umschalten

SCI2BDH=0      '9600 Baud bei 1.25 MHz Bustakt
SCI2BDL=8      'Baudrate = 1.25e6/16/(SCI2BDH*256+SCI2BDL)

WHILE TRUE
  GOSUB BMX
  PRINT"BM=";INSTRUC;" I/s"
  PAUSE 25
WEND

END            'Zurück in den Hostmodus. Neustart mit RETURN-Taste.

' --- Subroutinen und Funktionen --------------------------------------------

' TOOL: BENCHMARK FÜR DIE UNIT M 2.0 oder M 1.2 (by DIE HARD)

'--------------------------------------------------
' MICRO  OS V 2.00     BENCHMARK   at 3.2 MHZ   10000 I/s
' MICRO  OS V 2.01     BENCHMARK   at 3.2 MHZ   11500 I/s
'--------------------------------------------------
'--------------------------------------------------
' UNIT M 1.1 (alt)     BENCHMARK   at  2 MHZ    640  I/s
'--------------------------------------------------
' UNIT M 1.2           BENCHMARK   at 2.0 MHz   4088 I/s
' UNIT M 1.2(SLOW1)    BENCHMARK   at 2.0 MHz    618 I/s
' UNIT M 1.2(SLOW2)    BENCHMARK   at 2.0 MHz    704 I/s
' M 1.2(SLOW2 SERVO)   BENCHMARK   at 2.0 MHz     42 I/s
'---------------------------------------------------
' M 2.0 OS VERSION V 2.01
' UNIT M 2.0           BENCHMARK   at 8.0 MHz  16846 I/s
' UNIT M 2.0 SERVOMODE BENCHMARK   at 8.0 MHz  17034 I/s
' UNIT M 2.0(SLOW1)    BENCHMARK   at 8.0 MHz   2548 I/s
' UNIT M 2.0(SLOW2)    BENCHMARK   at 8.0 MHz    734 I/s
' M 2.0(SLOW2 SERVO)   BENCHMARK   at 8.0 MHz     42 I/s
'--------------------------------------------------
' M 2.0 OS VERSION V 2.02
' UNIT M 2.0           BENCHMARK   at 8.0 MHz  18070 I/s
' UNIT M 2.0 SERVOMODE BENCHMARK   at 8.0 MHz  17272 I/s
'--------------------------------------------------
' M 2.0 OS VERSION V 2.03
' UNIT M 2.0           BENCHMARK   at 8.0 MHz  23860 I/s
' UNIT M 2.0 SERVOMODE BENCHMARK   at 8.0 MHz  24134 I/s
'--------------------------------------------------
' Open-Control
' Open-Maxi SLOWMODE   BENCHMARK   at 1.25 MHz  4174 I/s
' Open-Maxi (gebremst) BENCHMARK   at 1.25 MHz   646 I/s
'--------------------------------------------------
#BMX
INSTRUC=0:SECOND=0
#BMXRUN
for COUNTER=1 to 5            'INSTRUCTION 1
INSTRUC=INSTRUC+14            'INSTRUCTION 2
ST=ST+1                       'INSTRUCTION 3
ST=ST shl 2                   'INSTRUCTION 4
goto JUMP                     'INSTRUCTION 5
#JUMP
looktab tab,0,ST              'INSTRUCTION 6
wait ST=0                     'INSTRUCTION 7
gosub JSR                     'INSTRUCTION 8+9+10+11
ST=ST*10                      'INSTRUCTION 12
if SECOND>0 then return       'INSTRUCTION 13
next                          'INSTRUCTION 14
INSTRUC=INSTRUC+2             'INSTRUCTION a
goto BMXRUN                   'INSTRUCTION b
#JSR
LED=on:led=off:return
'----------------------------------------------
table tab
0
tabend

' --- Programmende ---------------------------------------------------------


Passender Link: Infosite zu den OM-Mikrocontrollern

Meine Homepage: http://ccintern.dharlos.de

 Antwort schreiben

Bisherige Antworten:

Das ist der 400. Thread zur OM! (von Dietmar - 16.10.2020 2:30)
    Re: Das ist der 400. Thread zur OM! (von Norbert - 24.10.2020 1:24)
        Re: Das ist der 400. Thread zur OM! (von Dietmar - 24.10.2020 1:30)
    Re: Das ist der 400. Thread zur OM! (von Joachim - 16.10.2020 6:02)