Hallo, guten Tag.
Habe jetzt mal unter CP/M Plus versucht Grafik darzustellen mit ASM und dem PASMO-Compiler.
Klappt wunderbar.
Ich spiele auch mit dem CCZ80-Compiler.
Macht einen Sparsamen ASM-Code, den man auch noch verbessern kann.
Fast alle Basicbefehle sind verständlich in ASM umgesetzt und nachvollziehbar , gut erweiterbar.
Für mich zum spielen und tüfteln wunderbar.
Auch CP/M Plus Programme kann man erstellen und dort die Befehle erweitern.
Den CCZ80++ gibt es auch . Ist mit Klassen usw, für mich zu schwer.
Der Befehlssatz ist der gleiche wie beim CCZ80.
CP/M Plus kommt da zu kurz. Auch Stringbefehle sind sehr sparsam.
Gruss
CP/M PLUS (MODE, PLOT) :
org &100
scr_set_mode equ &bc0e
plot_absolute equ &bbea
ld hl,(&0001)
ld de,&0057
add hl,de
ld (firm_jump+1),hl
jp start
ret
start
ld a,2
call firm_jump
defw scr_set_mode
ld de,100
ld hl,100
call firm_jump
defw plot_absolute
ret
firm_jump
jp 0
CP/M PLUS (MODE, PLOT, DRAW) :
org &100
scr_set_mode equ &bc0e
plot_absolute equ &bbea
gra_line_absolute equ &bbf6
ld hl,(&0001)
ld de,&0057
add hl,de
ld (firm_jump+1),hl
jp start
ret
start
ld a,2
call firm_jump
defw scr_set_mode
ld de,50
ld hl,100
call firm_jump
defw plot_absolute
ld de,200
ld hl,70
call firm_jump
defw gra_line_absolute
ret
firm_jump
jp 0
Hier ein Bild in Mode 1.
Gruss
Das geht hier immer so schnell.
Wollte zu dem Bild oben schreiben , das ich es mal mit CP/M PLus in CCZ80 gemacht habe.
Habe CCZ80 mit meinen Befehlen zum Test erweitert.
include "CPMPlus.ccz80";
mode(1);
cls();
plotabs();
drawabs();
return;
Gruss
Wer einmal in die CCz80 reinschauen möchte für CP/M.
Habe jetzt mal eine Variableneingabe eingebaut für CP/M.
Die COM für CP/M ist 169 Byte klein. Der Compiler von CCZ80 bekommt das gut hin, auch für die normalen CPC-Programme.
include "CPMPlus.ccz80";
word x, y;
mode(1);
cls();
x=10;
y=10;
plotabs(x,y);
x=639;
y=200;
drawabs(x,y);
return;
Hier mal mein Code für die Erweiterung der Include cpmplus.ccz80 die ich gebaut habe.
Die ASM-Befehle kommen in Gänsefüßchen.
function byte plotabs(word,word)
{
"ld hl,&bbea ",
"ld (__startup_xbios_address),hl ",
"ld hl,2",
"add hl,sp",
"ld e,(hl)",
"inc hl",
"ld d,(hl) ; DE = 2nd parameter",
"inc hl",
"ld a,(hl)",
"inc hl",
"ld h,(hl)",
"ld l,a ; HL = 1st parameter",
"ex de,hl ; DE = x, HL = y",
" jp __startup_xbios "
} using startup;
function byte drawabs(word,word)
{
"ld hl,&bbf6 ",
"ld (__startup_xbios_address),hl ",
"ld hl,2",
"add hl,sp",
"ld e,(hl)",
"inc hl",
"ld d,(hl) ; DE = 2nd parameter",
"inc hl",
"ld a,(hl)",
"inc hl",
"ld h,(hl)",
"ld l,a ; HL = 1st parameter",
"ex de,hl ; DE = x, HL = y",
" jp __startup_xbios "
} using startup;
Also ESC,3,1 ausgeben, hex &1B,&03,&01 reicht auch um auf Mode 1 zu schalten. Die drei Zeichen ersetzen das ganz Programm. :)
Was tippt man ein?
- CP/M Plus starten
- Eintippen: setkeys keys.ccp
- Tippen: ESC-Taste, dann "31" und Return
Und schon ist MODE 1 an :-)
Mit ESC-3-2 kann wieder auf Mode 2 geschalten werden.
Das ist das Problem, diese verschleierten Eingaben, die man nicht Verfolgen kann.
Es geht hier nicht um das Umschalten.
Sondern wie einfach es ist CP/M_Programme herzustelllen.
Weil manche glauben CP/M ist Hexerei.
Viele trauen sich da nicht ran.
Danke.
Gruss
Ja, dabei ist es gar nicht so schlimm. Ist mit FutureOS ähnlich. :)
CP/M Plus auf dem CPC ist ganz gut gelungen, leider führt es eher ein Nischendasein.