Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » ASM -Programm für den KC87-Emu erstellen... » Themenansicht

Autor Thread - Seiten: -1-
000
24.03.2013, 19:54 Uhr
funkheld



Hallo, guten Tag.
Ich suche ASM-Programme für den eingebauten Assembler im KC87-jkcemu und eine Beschreibung der Syntax dafür,
Ich finde keinen Anfang, wie zb der Header dafür aussehen muss und ab wo das Programm in den Speicher kommt bei dem KC87-Emu und wie es gestartet wird.

Wer kann bitte weiterhelfen ?

Danke.

Gruss
peter

Dieser Beitrag wurde am 24.03.2013 um 20:42 Uhr von funkheld editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
24.03.2013, 20:50 Uhr
volkerp
Default Group and Edit
Avatar von volkerp

die Doku leifert JKCEMU schon mit: Hilfe>Werkzeuge>Assembler.

Eigentlich schreibst Du einfach ganz normalen Z80-Code wie für
den AS-Assembler. Mit ORG wird festgelegt, wo das Programm im Speicher landen soll

Beispiel Anzeige von Hexadezimalzahlen
mit OS-Rahmen (Start mit TEST), Speicher Adresse 1000h-1034h:


Quellcode:
ORG    01000H    

    JP    test
    DB    "TEST    ", 0
    db    0


;------------------------------------------------------------------------------
; Unterprogramme

; BDOS
OCRLF:    EQU    0F2FEH
OUTA:    EQU    0F305H
OSPAC:    EQU    0F310H

;OUTHL Ausgabe (HL) hexa
OUTHL:    LD    A,H
    CALL    OUTHX
    LD    A,L

;OUTHX Ausgabe (A) hexa
OUTHX:    PUSH    AF
    RLCA
    RLCA
    RLCA
    RLCA
    CALL    OUTH1
    POP    AF
OUTH1:    AND    0FH
    ADD    A, 30H
    CP    3AH
    JR    C, OUTH2
    ADD    A, 07H
OUTH2:    CALL    OUTA
    RET

;------------------------------------------------------------------------------
; Hauptroutine        

test:    push    hl
    call    outhx
    call    ospac
    pop    hl
    call    outhl
    ret



--
VolkerP

http://hc-ddr.hucki.net
(Z9001, Z1013, LC-80, ...)

Dieser Beitrag wurde am 24.03.2013 um 20:56 Uhr von volkerp editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
24.03.2013, 21:18 Uhr
funkheld



Jup, danke für die Hilfe.
Welche Zahl von welcher Speicherstelle wird da als Hex ausgegeben ?

Wo finde ich eigentlich die ROM-Routinen ?

Danke.

Gruss
peter

Dieser Beitrag wurde am 24.03.2013 um 21:43 Uhr von funkheld editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
25.03.2013, 08:27 Uhr
volkerp
Default Group and Edit
Avatar von volkerp

s. Hauptroutine: Ausgegeben werden Register A und HL, wie sie beim Start des Programms vom OS aus vorbelegt sind.

In den Unterlagen zum Z9001 findest Du bei U.Zander "Beschreibung Betriebssystem und Betriebssystemlisting". Das ist das Handbuch für denjenigen, der den Z9001 in Assembler programmieren will. Hier werden u.a. die Systemroutinen beschrieben.
--
VolkerP

http://hc-ddr.hucki.net
(Z9001, Z1013, LC-80, ...)

Dieser Beitrag wurde am 25.03.2013 um 08:28 Uhr von volkerp editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
25.03.2013, 12:07 Uhr
funkheld



Ja danke.
Ich habe mir von U. Zander einiges runtergeladen.
Finde aber nicht das Spezielle als komplettes OS-Romlisting für den KC87, sondern einige Auszüge, die mir aber nicht gross weiterhelfen.

Danke.

Gruss
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
25.03.2013, 12:48 Uhr
robbi
Default Group and Edit
Avatar von robbi

http://www.sax.de/~zander/z9001/z9_qs.pdf
--
Schreib wie du quatschst, dann schreibst du schlecht.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
25.03.2013, 12:58 Uhr
volkerp
Default Group and Edit
Avatar von volkerp

bei U. Zander:

Z9001>Dokumentation>Betriebssystem
Systembeschreibung 116,511 Bytes 20. 01. 2003
Quelle des Betriebssystems 168,844 Bytes 25. 03. 2007
--
VolkerP

http://hc-ddr.hucki.net
(Z9001, Z1013, LC-80, ...)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
25.03.2013, 13:39 Uhr
funkheld



Oh..., danke an euch beiden.
Diese habe ich nicht erkannt als eine Systemauflistung..

Gruss
peter

Dieser Beitrag wurde am 25.03.2013 um 13:39 Uhr von funkheld editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
25.03.2013, 16:22 Uhr
funkheld



Hallo, guten Tag.
Wo bekomme ich bitte diese beiden Programme her :
include basic_8k_kern_ROM86.inc
include bm608_ROM86.inc

um die Grafp.asm von hier :
grafik-krt.zip zu compilieren.
Und bitte welcher Compiler wurde dazu genommen mit welchen Einstellungen ?

Wer kennt die Einsprungadressen für die Grafikroutinen von grafp.asm , wie kann man diese dann in einem ASM-Programm einbinden ,damit die Grafik abgebildet wird. Wo kommen die Werte rein ?
Anfangadresse ist : 8D60
Endadresse : A7FF
Startadresse : FFFF

Vielleicht kann man auch die eingebauten Grafikroutinen vom eingebauten HC-Basic im KC87 aufrufen mit ASM und dann die Werte in die jeweileigen Register bereitstellen ?



Gruss
peter

Dieser Beitrag wurde am 25.03.2013 um 17:38 Uhr von funkheld editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
25.03.2013, 17:43 Uhr
volkerp
Default Group and Edit
Avatar von volkerp

Hallo Peter,

die benötigten include-Dateien entstehen, wenn man BASIC kompiliert. Du brauchst aber weder BASIC noch GRAFP zu kompilieren; diese großen Programme stehen als Binär-Dateien zur Verfügung.

ín GRAFP steht auf Adresse 8D60h der Sprungverteiler für den physischen Treiber.
in: C = Nummer des UP
DE = Adresse eines Speicherbereichs zur Datenübergabe
035Ah=0 Vollgrafik

Details zu den Parametern (Speicherbereich ab DE) der einzelnen Grafik-Unterprogramme stehen in der ASM-Datei, s. Bereich GRAFIK-MODUL-TREIBER, Zeile 2286 ff.

Einfacher ist es aber sicherlich, die Vollgrafik mit BASIC zu programmieren. Hier stehen Dir vernünftige Arithmetik, Variablen etc. zur Verfügung. Der Grafiktreiber ist vorrangig für die Nutzung von BASIC gedacht und nicht für Assemblerprogrammierung.
--
VolkerP

http://hc-ddr.hucki.net
(Z9001, Z1013, LC-80, ...)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
010
26.03.2013, 09:15 Uhr
funkheld



Jup, vielen dank.
Das ist eine Menge wunderbare Info die du mir geschickt hast Volker.

Jetzt funktioniert mit make das compilieren der grafp.asm und auch die demo lines.asm mit der selbstcompilierten grafp.bin im KC-87-Emu.

Habe hier ein funktionierendes kleines Testprogramm für die Grafik in ASM :

Quellcode:
cpu    z80

    ORG 01000H

    jp    start
    DB    "LINIE   ",0
    DB    0

    include    krt.inc

start:
    call   gp_on
    call   g_gcls
    LD  D,10
    LD  E,10
    LD   H,100
    LD   L,100
    call  g_line
    LD  D,100
    LD  E,100
    LD   H,254
    LD   L,100
    call  g_line
weiter:
    JP weiter
    ret

    END

Danke.

Gruss
peter

Dieser Beitrag wurde am 26.03.2013 um 16:22 Uhr von funkheld editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
011
26.03.2013, 15:18 Uhr
funkheld



Hallo, guten Tag.
Ich möchte mit "make linie" zb das Wort "linie" übergeben , um mit make dann verschiedene Programme zu compilieren, statt immer in make den Text zu ändern :

# Assemblieren einer Datei
linie.bin: linie.asm
$(AS) -cpu Z80 -L $< -a
$(P2BIN) -r \$$-\$$ linie.p

Wie geht das mit einem Joker für "linie" bei dieser make ?

Danke.

Gruss
peter

Dieser Beitrag wurde am 26.03.2013 um 15:19 Uhr von funkheld editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
012
26.03.2013, 15:44 Uhr
volkerp
Default Group and Edit
Avatar von volkerp

ich nehme zum Assenblieren nicht make, sondern eine kleine Batch-Datei as.bat; die mit dem Programmnamen aufgerufen wird:


Quellcode:
@echo off
rem Standard-Skript zum Aufruf des Arnold-Assemblers
rem V.Pohlers 2009
rem als Parameter wird der Name der asm-Datei übergeben

set file=%1
if "%1"=="" set file=main

for %%i in (%file%) do set file=%%~ni

echo -------- %file% -----------

set bin=%cd:~,2%\hobby\Programme\as\bin

%bin%\as.exe -L %file%.asm -a
%bin%\p2bin.exe -r $-$ "%file%.p"
%bin%\plist.exe "%file%.p"

rem %bin%\bdiff %file%.bin %file%.com

rem Anfangsadresse ermitteln
rem for /f "skip=5 tokens=3 usebackq" %%i in (`%bin%\p2bin.exe "%file%.p"`) do set aadr=%%i
for /f "usebackq" %%i in (`p2adr.pl "%file%.p"`) do set aadr=%%i
echo Anfangsadresse=%aadr%

com2tap.pl %file%.bin 0 %aadr%

Es wird auch gleich eine TAP-Datei erzeugt, die im Emulator geladen werden kann, ohne die Adressen wie beim Laden einer BIN-Datei angeben zu müssen.

ein

as linie.asm

(Die Endung .asm kann auch weggelassen werden) erzeugt dann linie.bin, linie.lst,linie.tap

--

Bei make müsstest Du make linie.bin aufrufen, s.makefile f. megaflash:


Quellcode:
# Assemblieren einer Datei
%.bin:    %.asm
    $(AS) -cpu Z80 -L $< -a
    $(P2BIN) -r \$$-\$$ $*.p
    del $*.p


--
VolkerP

http://hc-ddr.hucki.net
(Z9001, Z1013, LC-80, ...)

Dieser Beitrag wurde am 26.03.2013 um 15:50 Uhr von volkerp editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
013
26.03.2013, 16:39 Uhr
funkheld



Hallo, danke.
Es funktioniert soweit , nur fehlt bei mir die Datei : com2tap.pl und p2adr.pl.
Wo bekomme ich die her ?

Danke.

Gruss
peter

Dieser Beitrag wurde am 26.03.2013 um 16:45 Uhr von funkheld editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
014
26.03.2013, 17:12 Uhr
volkerp
Default Group and Edit
Avatar von volkerp

du hast wieder Post.
--
VolkerP

http://hc-ddr.hucki.net
(Z9001, Z1013, LC-80, ...)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
015
26.03.2013, 18:47 Uhr
funkheld



Hallo, guten Tag.
Ich kann jetzt damit compilieren.
Es wird eine bin, inc und p erstellt. von der grafp.asm
Eine Tap wurde nicht erstellt.
Aber die grafp.bin funktioniert wenn ich die Startadresse und die Endadresse eingebe. Die Adressen werden auch beim compilieren angezeigt.
Wenn dieser Dosbefehl ausgeführt wird "echo Anfangsadresse=%aadr%"
erscheint im Dos-Fenster nur : "Anfangadresse=" ohne den Wert.

Stimmen hier eigentlich das Hochkomma und die Gänsefüsschen :
for /f "usebackq" %%i in (`p2adr.pl "%file%.p"`) do set aadr=%%i

Das kommt mir so komisch vor

Danke.

Gruss
peter


Zitat:
@echo off
rem Standard-Skript zum Aufruf des Arnold-Assemblers
rem V.Pohlers 2009
rem als Parameter wird der Name der asm-Datei übergeben

set file=%1
if "%1"=="" set file=main

for %%i in (%file%) do set file=%%~ni

echo -------- %file% -----------

set bin=d: \ kc\as\bin

%bin%\asw.exe -L %file%.asm -a
%bin%\p2bin.exe -r $-$ "%file%.p"
%bin%\plist.exe "%file%.p"

rem %bin%\bdiff %file%.bin %file%.com

rem Anfangsadresse ermitteln
rem for /f "skip=5 tokens=3 usebackq" %%i in (`%bin%\p2bin.exe "%file%.p"`) do set aadr=%%i
for /f "usebackq" %%i in (`p2adr.pl "%file%.p"`) do set aadr=%%i
echo Anfangsadresse=%aadr%

com2tap.pl %file%.bin 0 %aadr%


Dieser Beitrag wurde am 26.03.2013 um 18:55 Uhr von funkheld editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
016
26.03.2013, 20:22 Uhr
volkerp
Default Group and Edit
Avatar von volkerp

Du hast in "set bin=d: \ kc\as\bin" offenbar Leerzeichn drin. Das ist nicht gut.

Die Syntax mit den Backquotes ist korrekt; die Windows-Batch-Sprache ist halt seltsam: "p2adr.pl file.p" ermittelt die Anfangsadresse aus file.p; die komische for-Zeile scannt die Ausgabe von p2adr.pl und setzt die Umgebungsvariable aadr.
Damit das funktioniert, musst du entweder den Pfad zu den Perl-Programmen ergänzen oder die beiden Perl-Programme müssen im aktuellen Arbeitsverzeichnis liegen.
--
VolkerP

http://hc-ddr.hucki.net
(Z9001, Z1013, LC-80, ...)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
017
26.03.2013, 22:34 Uhr
funkheld



Jup, danke.
Das Leerzeichen ist nur hier drin , weil da sonst ein Smili kommt an dieser Stelle.
Ich habe jetzt "perl.exe" gesetzt vor "p2adr.pl" und es funktioniert.


Zitat:
for /f "usebackq" %%i in (`perl.exe p2adr.pl "%file%.p"`) do set aadr=%%i
echo Anfangsadresse=%aadr%

perl.exe com2tap.pl %file%.bin 0 %aadr%

Danke.

Gruss
peter

Dieser Beitrag wurde am 26.03.2013 um 23:40 Uhr von funkheld editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek