Schneider / Amstrad CPC Forum

Amstrad / Schneider CPC => CP/M 2.2, CP/M Plus, ZCPR und Z3Plus => Topic started by: TFM on 14. January 2021, 18:20:49

Title: Wie übergebe ich einen Text / String-Parameter an CP/M?
Post by: TFM on 14. January 2021, 18:20:49
Also hier ein Beispiel... Ich tippe...

A> SPEAK Dies ist ein Beispieltext

Wenn ich jetzt die Applikation SPEAK.COM bin, wie kann ich dann den Text im RAM finden?
Title: Re: Wie übergebe ich einen Text / String-Parameter an CP/M?
Post by: LambdaMikel on 15. January 2021, 21:06:03
Vielleicht hilft das hier; s. CP/M 8080 assembly ("CP/M includes some very rudimentary argument parsing: it assumes that the first two space-separated arguments are filenames. Apart from that you can get the raw command line, except that all lowercase letters are made uppercase.

If you need any further parsing, the program needs to do that by itself, which led to many people not bothering.")

https://rosettacode.org/wiki/Command-line_arguments
Title: Re: Wie übergebe ich einen Text / String-Parameter an CP/M?
Post by: TFM on 17. January 2021, 16:27:04
Danke, ich sehe es mir an, könnte sein was ich suche.  :smiley027:
Title: Re: Wie übergebe ich einen Text / String-Parameter an CP/M?
Post by: TFM on 27. December 2021, 18:20:31
Und so sieht dann der Source Code aus.... für SP.COM


NOLIST        ;SP.MAX
ORG   &0100   ;2021.01.19
WRITE"SP.COM" ;Zeilen 48


JR START
;
; --- >>> Version und Konfiguration <<< ---
;
DB &18,&0D,"   ",&0A,&0D
DB &0D
DB "SP.COM - speaks and prints command line",&0A,&0D
DB "(c)2021 LambdaMikel and TFM of FutureSoft",&0A,&0D
DB "Powered by FutureOS knowhow!",&0A,&0D
DB &1A
;
; --- >>> String (von Eingabezeile) anzeigen und sprechen <<< ---
;
START LD BC,&FBEE:LD A,&E8:OUT (C),A ;Confirmatins OFF

LD HL,&0081 ;HL = Zeiger auf Stringanfang

LD A,&EF:OUT (C),A ;LS auf Epson Modus

LD A,(&0080) ;A = Laenge des Strings (max. 127 Bytes)

ZSTR AND A,A ;String-Laenge = &00?
     RET Z   ;Dann fertig!

PUSH AF:PUSH BC:PUSH HL ; Save A, BC and HL registers on the stack

LD  E,(HL) ;E = naechstes Zeichen aus String
OUT (C),E  ;Zeichen an LS senden

LD   C,&02 ;CP/M Kommando Zeichen darstellen
CALL &0005 ;BDOS aufrufen

POP HL:POP BC:POP AF ; Restore A and HL registers

INC HL ;Increment string pointer
DEC A  ;Decrement character counter

JR NZ,ZSTR ;n. Zeichen

LD A,&0D:OUT (C),A ;CR senden, String sprechen

RET


Nebenbei: Die fertige SP.COM Applikation ist auf der LS Disk 2 drauf.