Jup, tolle Sache. Geht ja wunderbar, dank der Adressenrückgabe mit dem @.
Das Basic vom CPC ist nicht ohne....
Gruss.
Jup, tolle Sache. Geht ja wunderbar, dank der Adressenrückgabe mit dem @.
Das Basic vom CPC ist nicht ohne....
Gruss.
Das sind "4466". Ich finde zu diesen Wert keinen Zusammenhang.
Habe schon die Lektüre geblättert.
Gruss
ich z. B. Kaiser sofort aus dem Dateimanager heraus starten kann
Ich benutze den Winape.
Programm rein , los geht es.
Basiccode anschauen, ruck zuck, vielleicht für sich etwas ändern, los geht es wieder...und...und..
Habe meine ganzen z88dk-kenntnisse auffrischen können auf diese Weise und schon vieles gelernt und angewendet bei dem z88dk.
Beim originalen wäre es ätzend gewesen, Disk rein, Disk raus usw.
Wenn das Programm läuft dann kann man es machen, aber das Programmieren ist auf dem Winape/WinCPC am besten, weil auch gleich ein ASM-Compiler vorhanden ist.
Durch diesen Umstand haben es auch noch nicht viele gerafft, auf dem Originalen etwas zu Programmieren.
Habe den Z80 durch den EMU erst richtig kennengelernt.
Mit dem CPC-Intern-Buch kann man sich Total an das System ranwagen und testen wie es reagiert. Kurz Poken , schauen und weiter geht.
Die Tapes und Disk hier im Internet laufen alle auf dem Emu auch das CPM läuft 100%tig.
Mit dem CPM kann man auch viel anstellen.
Habe mein EMU auf dem Notebook, nimmt kein Platz weg und kann alles testen.
Ich halte nichts mehr von Vitrinengeräte. Es muss alles an die Arbeit ran, nichts wird geschont. Warum auch. Man lebt nur einmal.
Habe einiges von meinem Geräten in den letzten Jahren verschenkt (C64 mit Zubehör im Wert von ca 150 Euro) an eine Schule, die Kinder haben sich gefreut.
Gruss
Wie tief kann ich mit dem "memory..." runtergehen um Binärdeien zu laden.
Brauche 0 Basicspeicher.
Gruss
Habe mal alle Mathroutinen und Floatroutinen ausprobiert vom "z88dk". Sie funktioniren alle mit den richtigen Werten ohne absturz, auch bei der Ausgabe auf dem Screen mit "printf".
In den letzten 6 Monaten haben die Programmierer schön rangeklotzt damit es funktioniert.
Zusätzlich mit Grafik, sternförmig werden Linien im Kreis gezeichnet :
#include <stdio.h>
#include <stdlib.h>
#include <float.h>
#include <math.h>
#include <graphics.h>
#pragma -zorg=16384
void main(){
float x,xg,yg;
int xgg,ygg;
for (x=0.0; x<360.0; x=x+3.0)
{
xg=sin(x*pi()/180.0)*80;
yg=cos(x*pi()/180.0)*80;
xgg=xg;
ygg=yg;
draw(160,100,160+xgg,100+ygg);
}
}
Alles anzeigen
Werte 4stellig ausgeben 43x (geprüft, 100%tig genau) :
#include <stdio.h>
#include <stdlib.h>
#include <float.h>
#include <math.h>
#pragma -zorg=16384
void main(){
float x;
double wert;
unsigned char text[15];
char c;
for (x=0.0; x<43.0; x=x+1.2)
{
wert=cos(1.234) * x * pi();
ftoa(wert,4,text);
printf(text);
printf("\n");
}
printf("\n");
printf("fertig...");
c=getchar();
}
Alles anzeigen
Die Mathroutinen:
/* $Id: math.h,v 1.11 2008/03/14 12:23:57 stefano Exp $ */
extern double __LIB__ acos(double); /* arc cosine */
extern double __LIB__ asin(double); /* arc cosine */
extern double __LIB__ atan(double); /* arc tangent */
extern double __LIB__ atan2(double,double); /* atan2(a,b) = arc tangent of a/b */
extern double __LIB__ cos(double); /* cosine */
extern double __LIB__ cosh(double); /* hyperbolic cosine */
extern double __LIB__ exp(double); /* exponential */
extern double __LIB__ log(double); /* natural logarithm */
extern double __LIB__ log10(double); /* log base 10 */
extern double __LIB__ pi(); /* greek pi */
extern double __LIB__ pow(double,double); /* pow(x,y) = x**y */
extern double __LIB__ sin(double); /* sine */
extern double __LIB__ sinh(double); /* hyperbolic sine */
extern double __LIB__ sqrt(double); /* square root */
extern double __LIB__ tan(double); /* tangent */
extern double __LIB__ tanh(double); /* hyperbolic tangent */
#ifndef _HAVE_ATOF_
#define _HAVE_ATOF_
extern double __LIB__ atof(char *);
#endif
/* Some additional CPC only routines now */
#if __CPC__ && __NATIVE_MATH__
extern double __LIB__ pow10(int x); /* pow(10,x) - CPC only */
extern void __LIB__ deg();
extern void __LIB__ rad();
#else
#define pow10(x) pow(10.,x)
#define deg(x) (x*180./pi())
#define rad(x) (x*pi()/180.)
#endif
/* More (unoptimized) functions */
#define cbrt(x) pow(x,.3333333)
#define ldexp(x,y) (pow(2.,(int)(y))*x)
#define hypot(x,y) sqrt(x*x+y*y)
#define asinh(x) log(2.*fabs(x)+1./(sqrt(x*x+1.)+fabs(x)))
#define acosh(x) log(2.*x-1./(x+sqrt(x*x-1.)))
#define log1p(x) log(1.+x)
#define expm1(x) (exp(x)-1.)
#endif /* _MATH_H */
Alles anzeigen
Die Floatroutinen:
#ifndef __FLOAT_H__
#define __FLOAT_H__
/*
* Some more floating point routines..I can't remember
* why these are separated out..
*
* $Id: float.h,v 1.7 2003/08/22 21:14:40 dom Exp $
*/
extern double __LIB__ fmod();
extern double __LIB__ amax(double,double);
extern double __LIB__ fabs(double);
extern double __LIB__ amin(double,double);
extern double __LIB__ floor(double);
extern double __LIB__ ceil(double);
extern double __LIB__ fprand(void); /* Generic only */
extern double __LIB__ __FASTCALL__ zfloat(int);
extern int __LIB__ fpseed(double); /* Seed random number */
#ifndef _HAVE_ATOF_
#define _HAVE_ATOF_
extern double __LIB__ atof(char *);
#endif
/*
* Some support routines for floating point printf
*/
extern void __LIB__ ftoa(double, int, char *);
extern void __LIB__ ftoe(double, int, char *);
/*
* Some constant nicked from /usr/include/math.h
*/
# define M_E 2.7182818284590452354 /* e */
# define M_LOG2E 1.4426950408889634074 /* log_2 e */
# define M_LOG10E 0.43429448190325182765 /* log_10 e */
# define M_LN2 0.69314718055994530942 /* log_e 2 */
# define M_LN10 2.30258509299404568402 /* log_e 10 */
# define M_PI 3.14159265358979323846 /* pi */
# define M_PI_2 1.57079632679489661923 /* pi/2 */
# define M_PI_4 0.78539816339744830962 /* pi/4 */
# define M_1_PI 0.31830988618379067154 /* 1/pi */
# define M_2_PI 0.63661977236758134308 /* 2/pi */
# define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */
# define M_SQRT2 1.41421356237309504880 /* sqrt(2) */
# define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */
#endif
Alles anzeigen
[/code]
Der sieht ja originell aus.
Ich hatte mal den Atari Portfolio.
gruss
Pen 1 = gelb rgb(255,255,0)
Pen 2 = chain rgb(0,255,255)
Pen 3 = rot rgb(255,0,0)
So sehen wie oben die Farben aus wenn der CPC gestartet wird im Mode 1.
So werden sie jetzt auch unten im Programm abgefragt.
Die Farbstifte im Bmp-Bild(320x200) müssen die Penfarben vom CPC haben.
Das Programm kann jederzeit vom Benutzer beändert werden.
INIT
Do : Sleep : Until Me Is Nothing
Sub INIT
Global Int Block, x, y, z, ByteInhalt, Byte_w, col, blue, green, red
Form F0 = , , , 800, 600 : AutoRedraw = 1 : BackColor = colBtnFace
Ocx Form F1 = , 10 , 10 , 320, 200 : .Appearance = 0 : .AutoRedraw = 1
F1.PaintPicture LoadPicture("cpc320.bmp"), 0, 0
Sub Screen_KeyPreview(hwnd%, umsg%, wparam%, lparam%, cancel?)
$StepOff
Select wparam%
Case "q"
wandle_um
EndSelect
DoEvents
Sub wandle_um
Set Me = F1
Open "TEST.DAT" for Output As # 1
For z = 0 To 127 : Out # 1, 0 : Next
For Block = 0 To 7
For y = 0 To 24
For x = 0 To 319 Step 4
ByteInhalt = 0
For Byte_w = 0 To 3
col = RGBPoint(x + Byte_w, y * 8 + Block)
blue = GetBValue(col)
green = GetGValue(col)
red = GetRValue(col)
If red = 255 And green = 255 And blue = 0 And Byte_w = 0
ByteInhalt = Bset(ByteInhalt, 7)
ByteInhalt = Bclr(ByteInhalt, 3)
EndIf
If green = 255 And blue = 255 And red = 0 And Byte_w = 0
ByteInhalt = Bclr(ByteInhalt, 7)
ByteInhalt = Bset(ByteInhalt, 3)
EndIf
If red = 255 And green = 0 And blue = 0 And Byte_w = 0
ByteInhalt = Bset(ByteInhalt, 7)
ByteInhalt = Bset(ByteInhalt, 3)
EndIf
If red = 255 And green = 255 And blue = 0 And Byte_w = 1
ByteInhalt = Bset(ByteInhalt, 6)
ByteInhalt = Bclr(ByteInhalt, 2)
EndIf
If green = 255 And blue = 255 And red = 0 And Byte_w = 1
ByteInhalt = Bclr(ByteInhalt, 6)
ByteInhalt = Bset(ByteInhalt, 2)
EndIf
If red = 255 And green = 0 And blue = 0 And Byte_w = 1
ByteInhalt = Bset(ByteInhalt, 6)
ByteInhalt = Bset(ByteInhalt, 2)
EndIf
If red = 255 And green = 255 And blue = 0 And Byte_w = 2
ByteInhalt = Bset(ByteInhalt, 5)
ByteInhalt = Bclr(ByteInhalt, 1)
EndIf
If green = 255 And blue = 255 And red = 0 And Byte_w = 2
ByteInhalt = Bclr(ByteInhalt, 5)
ByteInhalt = Bset(ByteInhalt, 1)
EndIf
If red = 255 And green = 0 And blue = 0 And Byte_w = 2
ByteInhalt = Bset(ByteInhalt, 5)
ByteInhalt = Bset(ByteInhalt, 1)
EndIf
If red = 255 And green = 255 And blue = 0 And Byte_w = 3
ByteInhalt = Bset(ByteInhalt, 4)
ByteInhalt = Bclr(ByteInhalt, 0)
EndIf
If green = 255 And blue = 255 And red = 0 And (Byte_w = 3)
ByteInhalt = Bclr(ByteInhalt, 4)
ByteInhalt = Bset(ByteInhalt, 0)
EndIf
If red = 255 And green = 0 And blue = 0 And Byte_w = 3
ByteInhalt = Bset(ByteInhalt, 4)
ByteInhalt = Bset(ByteInhalt, 0)
EndIf
Next
Out # 1, ByteInhalt
Next
Next
For z = 0 To 47 : Out # 1, 0 : Next
Next
Set Me = F0
Pset 10, 300
Print "fertig"
Alles anzeigen
Wer sich für das freie GFA32-Basic interessiert, hier ein Programm um ein Bmp-Bild mit 4Farben einlesen(bzw 3 und Hintergrund) für den CPC im Modus 1.
Die Farben sind Rot(rgb255,0,0), Grün(rgb0,255,0) und Gelb(rgb255,255,0). Man kann zum RGBPoint-testen auch andere Farben nehmen, weil man im CPC die 4 Farben frei bestimmen kann.
Mit dem GFA32-Basic programmier ich am liebsten und meisten. Mit Purebasic weniger.
INIT
Do : Sleep : Until Me Is Nothing
Sub INIT
Global Int Block, x, y, z, ByteInhalt, Byte_w, col, blue, green, red
Form F0 = , , , 800, 600 : AutoRedraw = 1 : BackColor = colBtnFace
Ocx Form F1 = , 10 , 10 , 320, 200 : .Appearance = 0 : .AutoRedraw = 1
F1.PaintPicture LoadPicture("cpc320.bmp"), 0, 0
Sub Screen_KeyPreview(hwnd%, umsg%, wparam%, lparam%, cancel?)
$StepOff
Select wparam%
Case "q"
wandle_um
EndSelect
DoEvents
Sub wandle_um
Set Me = F1
Open "TEST.DAT" for Output As # 1
For z = 0 To 127 : Out # 1, 0 : Next
For Block = 0 To 7
For y = 0 To 24
For x = 0 To 319 Step 4
ByteInhalt = 0
For Byte_w = 0 To 3
col = RGBPoint(x + Byte_w, y * 8 + Block)
blue = GetBValue(col)
green = GetGValue(col)
red = GetRValue(col)
If red = 255 And Byte_w = 0
ByteInhalt = Bset(ByteInhalt, 7)
ByteInhalt = Bclr(ByteInhalt, 3)
EndIf
If green = 255 And Byte_w = 0
ByteInhalt = Bclr(ByteInhalt, 7)
ByteInhalt = Bset(ByteInhalt, 3)
EndIf
If green = 255 And red = 255 And Byte_w = 0
ByteInhalt = Bset(ByteInhalt, 7)
ByteInhalt = Bset(ByteInhalt, 3)
EndIf
If red = 255 And Byte_w = 1
ByteInhalt = Bset(ByteInhalt, 6)
ByteInhalt = Bclr(ByteInhalt, 2)
EndIf
If green = 255 And Byte_w = 1
ByteInhalt = Bclr(ByteInhalt, 6)
ByteInhalt = Bset(ByteInhalt, 2)
EndIf
If green = 255 And red = 255 And Byte_w = 1
ByteInhalt = Bset(ByteInhalt, 6)
ByteInhalt = Bset(ByteInhalt, 2)
EndIf
If red = 255 And Byte_w = 2
ByteInhalt = Bset(ByteInhalt, 5)
ByteInhalt = Bclr(ByteInhalt, 1)
EndIf
If green = 255 And Byte_w = 2
ByteInhalt = Bclr(ByteInhalt, 5)
ByteInhalt = Bset(ByteInhalt, 1)
EndIf
If green = 255 And red = 255 And Byte_w = 2
ByteInhalt = Bset(ByteInhalt, 5)
ByteInhalt = Bset(ByteInhalt, 1)
EndIf
If red = 255 And Byte_w = 3
ByteInhalt = Bset(ByteInhalt, 4)
ByteInhalt = Bclr(ByteInhalt, 0)
EndIf
If green = 255 And Byte_w = 3
ByteInhalt = Bclr(ByteInhalt, 4)
ByteInhalt = Bset(ByteInhalt, 0)
EndIf
If green = 255 And red = 255 And Byte_w = 3
ByteInhalt = Bset(ByteInhalt, 4)
ByteInhalt = Bset(ByteInhalt, 0)
EndIf
Next
Out # 1, ByteInhalt
Next
Next
For z = 0 To 47 : Out # 1, 0 : Next
Next
Set Me = F0
Pset 10, 300
Print "fertig"
Alles anzeigen
BmpBild320x200
Muss heissen : BmpBild640x200
Wie kann man beim CPC ein ASM-Programm kleiner 255 in einem String unterbringen und dann aufrufen?
Gruss
Die Tatsache, daß man bei ebay reihenweise übers Ohr gehauen wird, weiß doch jeder!
Jup, da gebe ich dir recht. ein s.c.h.e.i.s.s...laden.
Ich nehme nicht an, das von hier einer dort seine Sachen anbietet.
Ein vernünftiger User macht das nicht.
Zitat
64. weil er seltener ist als der C64 und be........ Laughing
65. weil sein Wert langsam steigt und er nicht mehr für 4,50 € zu haben ist
( vor ca. 8 Jahren bei Ebay ein CPC 464 mit Grünmonitor )
Ist beides ein Nachteil für die aktive Scene.
Meine Grosseltern haben auch gesammelt, nach dem Motto: eine Vitrine rechts und eine Vitrine links, der Wert kann nur steigen.
Nach dem sie unter der Erde waren, wurde ein Container bestellt...., keiner wollte den angeblich wertvollen s.c.h.e.i.s.s haben
Alles zur richtigen Zeit und die Scenenzeit ist jetzt da... , also voll Unterstützen, sonst wird es langsam Einsam.
Wer möchte schon im Schaukelstuhl auf die Vitrine schauen.
Die Geräte gehören im Umlauf, damit fleissig programmiert wird.
Ein Forum lebt nicht nur von eingemotteten Geräten.
Gruss an die Vitrinen und Schaukelstühle.
Jup, danke. Läuft beim Schnelltest einwandfrei.
Gruss
dann derzeit eher für den NC100....
Das ist eher ein grosser Taschenrechener als ein Ding zum programmieren.
Der sdcc ist für den CPC unpraktisch, weil er sehr wenig CPC spezifisches erhält und den CPC-User in der Programmierluft hängen lässt.
Gruss
teuer, aber ich verkaufe meine noch teurer!
Bist du am Haus bauen... , brauchst du Geld?
Habe gerade von dir Sachen bei Ebay gesehen, statt die hier anzubieten um die User hier mehr Mut zu machen.
Finde ich nicht toll. Ist der CPC dein echtes Hobby? oder schwimmen dir jetzt finanziell die Sachen weg?
Gruss
Das wird schwierig, da ich meine Erweiterungen in einem alten Yamakawa DVD-Player eingebaut habe. Damit wuerde ich dir dann neben dem Diskettenlaufwerk noch ein Symbiface, den CPC Booster, eine Festplatte, ein Netzteil und meine Maus schicken
Warum hört man so wenig von dir hier in Sachen z88dk? usw
Hast du deine Geräte eingemottet, damit sie dir später auf deinem Sarg gelegt werden?
Die Geräte brauchen bewegung....
Gruss
Das weiss ich nicht. Ich mache es Teilweise auch mit dem direktladen.
Es wird hier zur Zeit sowieso wenig programmiert mit Basic , C und ASM.
Dabei ist es am CPC so einfach.
Ich sehe beim CPC in den Büchern immer wieder ASM-Teile die in den Datazeilen untergebracht werden und mit dem Basic geladen werden.
Habe jetzt schon 3 Fachbücher.
Auch im ASM-Buch vom CPC werden Datazeilen benutzt um einen Monitor zu realisieren der in ASM erstellt wurde und dann in den Datazeilen untergebracht wurde.
Ich finde es sehr interessant wenn man in Basic programmiert.
Mein schwerpunkt ist zur Zeit das Z88dk und dann aber auch das Basic, welches ja auch sehr mächtig ist.
Gruss
Habe eine Grafik vom Screen Mode1 aufgezeichnet beim CPC6128 mit
: save"test.bin",b",&c000,&4000
So sieht der Anfang aus unten.
Bis wohin befindet sich der Diskheader und wo beginnen die Grafikdaten ?
Oder wieviel Byte muss man überspringen, damit die Grfaikadten anfangen?
Gruss
Zitat
Hat sich erledigt, der Header umfasst 128 Byte.
Zitat
Naja, wenn man hardwarenah programmieren moechte, dann ist natuerlich Assembler die beste Wahl (aber das kann man ja auch ueber das #asm Tag bei den C-Compilern).
Hier ein kleines Muster für den z88dk zur Ermunterung, dem sind keine Grenzen gesetzt.
Die Variablen werden über den Stack eingelesen:
#include <stdio.h>
#include <stdlib.h>
#pragma -zorg=16384
void draw(unsigned int codeint, unsigned int codeint1 ){
#asm
ld hl,4
add hl,sp
ld a,(hl)
ld e,a
ld hl,5
add hl,sp
ld a,(hl)
ld d,a
ld hl,2
add hl,sp
ld a,(hl)
ld c,a
ld hl,3
add hl,sp
ld a,(hl)
ld b,a
ld h,b
ld l,c
call 0xBBF6
ret
#endasm
}
int main(void){
unsigned char c;
draw (640,200);
c = getchar();
return 0;
}
Alles anzeigen
Es müsste bei XP unter MSDOS laufen, bei Vista und Sieben glaube ich nicht.
Ob die parallele Übertragung über einen Wandler USB-Para läuft, habe ich noch nicht probiert.
gruss
Das Buch CPC664/6128 wollte ich haben!!! Hast ca. 30EUR dafür bezahlt, nicht wahr?!
Jup..., es gibt sehr wenige davon.
Schick mir mal ne PN mit Deiner E-Mail-Adresse: Ich habe mir vor kurzem div. Handbücher in 1A Qualität (PDF) runtergeladen.
Jup, wird gemacht.
Wenn du mal beim Programmieren über den Basictellerrand schauen möchtest, goggle mal nach "z88dk" . Eine starke Sache für den CPC.
Auch hier gibt es einige Artikel. Auch die Float-Routinen laufen jetzt fehlerfrei.
Fast alle internen Routinen werden erfasst, dieser z88dk ist für den CPC sehr stark ausgebaut. Es sind alles ASM routinen, die man anschauen kann und evtl erweitern und neu compilieren. Darum ist der umgesetzte C-code super schnell.
Ich versuche auch Basic mit dem RCX um ASM-Routinen reinzusetzen.
Kommt aber mit dem z88dk bei weitem nicht mit.
Viel Spass.
Gruss
Hallo ASM-Freaks...
Wie kann ich unten das Programm ändern, das es nur eine bestimmte Byteanzahl aus dem File nach &C00 einlesen tut und nicht nach "eof " sucht?
Danke.
Gruss
org &4000
write "readb.bin"
.cas_in_open equ &bc77
.cas_in_close equ &bc7a
.cas_in_char equ &bc80
ld hl,&c000 ;; address to load file data to (example)
push hl
;; open file for reading
ld b,end_filename-filename
ld hl,filename
ld de,two_k_buffer
call cas_in_open
;; If a file is opened without a header:
;; - the filetype will be ASCII (&16)
;; - the length and load address will be undefined.
;;
;; If a file is opened with a header, the
;; - the filetype will be taken from the header
;; - the length and load address will be taken from the header
;;
;; A file without a header can't be read with CAS IN DIRECT
;; and must be read using CAS IN CHAR.
pop hl
;; read a char from the file, character is returned in A register
.next_byte
call cas_in_char
jr nc,not_eof
jr nz,not_eof
;; could be end of file
;; test for hard end of file byte
cp &f
jr nz,not_eof
jr eof
.not_eof
;; write byte to memory
ld (hl),a
inc hl
jr next_byte
.eof
call cas_in_close
ret
;;-------------------------------------------------------------------
;; name of the file to read
.filename
defb "byte.bin"
.end_filename
;;-------------------------------------------------------------------
;; this buffer is filled with data from the file
.two_k_buffer defs 2048
Alles anzeigen
Mit dem Purebasicprogram kann man Datazeilen erzeugen für Basic, um die dann mit Read einzulesen. Es können Grafikdaten sein oder ASM-Bin Dateien die man dann mit Call starten kann.
Im CPC-Basic kann man ja schön Basicprogramme nachladen.
Hier zb. werden Datazeilen ab 1000 erzeugt mit dem Abstand von 10 und jeweils 10 Daten, kann man auch noch erweitern :
1000 Data 10,11,12,13,14,15,16,17,18,19
1010 Data .....
Global zahl.c, laenge.w, datazeile.w, datazeile_lang.w, name_in.s, name_out.s
OpenConsole()
Print("Read-Datei: ")
name_in = Input()
If ReadFile(0, name_in)
Print("Read-Datei: ")
name_out = Input()
laenge= Lof(0)
datazeile=1000
datazeile_lang=0
CreateFile(1, name_out)
WriteStringN(1,Str(datazeile)+" data "+ Str(laenge))
datazeile=datazeile+10
WriteString (1, Str(datazeile)+" data ")
While Eof(0) = 0
datazeile_lang=datazeile_lang+1
If datazeile_lang <11
If datazeile_lang < 10
zahl=ReadCharacter(0)
WriteString (1,Str(Zahl)+",")
Else
zahl=ReadCharacter(0)
WriteString (1,Str(Zahl))
EndIf
Else
datazeile_lang=0
datazeile=datazeile+10
WriteStringN (1, "")
WriteString(1, Str(datazeile)+" data ")
EndIf
Wend
CloseFile(0)
CloseFile(1)
PrintN("Fertig!")
PrintN("Druecken Sie Return zum Beenden.")
Input()
CloseConsole()
Else
PrintN("Fehler.....!")
PrintN("Druecken Sie Return zum Beenden.")
Input()
CloseConsole()
EndIf
Alles anzeigen
Habe mit Hilfe des PurebasicForum ein Programm zum Umwandeln von BMPGrafiken erstellt.
Ein BmpBild320x200 2Farbig wird einlesen und als "byte.bin" abgespeichert.
Dieses kann man jetzt im MODE 2 einlesen:
Load"byte.bin",&c000
Kann man auch leicht umwandeln für "FreeBasic".
Global ByteInhalt.c,Staffel.l,Linie.l,ByteStueck.l,EinzelBit.l,zz.l
InitSprite()
OpenWindow(0,0,0,800,600,"cpctest",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),10,10,700,400,0,0,0)
OpenConsole()
ClearScreen(RGB(255,255,0))
LoadSprite(0, "cpctest.bmp", #PB_Sprite_Texture)
DisplaySprite(0,0,0)
Repeat
Event.l = WindowEvent()
If GetAsyncKeyState_(#VK_Q)
If CreateFile(0, "byte.bin")
PrintN("es gehtlos..")
StartDrawing(SpriteOutput(0))
For Staffel = 0 To 7
For Linie = 0 To 24
For ByteStueck = 0 To 79
ByteInhalt = 0
For EinzelBit = 0 To 7
If Point( ByteStueck * 8 + 7 - Einzelbit , Linie * 8 + Staffel )
ByteInhalt + ( 1 << Einzelbit )
EndIf
Next
WriteCharacter(0, ByteInhalt)
Next
Next
ByteInhalt=0
For zz=0 To 47
WriteCharacter(0, Byteinhalt)
Next
Next
EndIf
StopDrawing()
CloseFile(0)
PrintN("fertig...")
EndIf
FlipBuffers()
Until Event = #PB_Event_CloseWindow
End
Alles anzeigen
Ich habe die FIle in/out noch nicht getestet.
So sieht beim z88dk die h aus:
/*
* Small C+ Library
*
* fnctl.h - low level file routines
*
* djm 27/4/99
*
* $Id: fcntl.h,v 1.10 2009/01/13 17:48:01 stefano Exp $
*/
#ifndef __FCNTL_H__
#define __FCNTL_H__
#include <sys/types.h>
#define O_RDONLY 0
#define O_WRONLY 1
#define O_APPEND 256
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2
/* O_BINARY has no significence */
#define O_BINARY 0
typedef int mode_t;
extern int __LIB__ open(far char *name, int flags, mode_t mode);
extern int __LIB__ creat(far char *name, mode_t mode);
extern int __LIB__ close(int fd);
extern size_t __LIB__ read(int fd, void *ptr, size_t len);
extern size_t __LIB__ write(int fd, void *ptr, size_t len);
extern long __LIB__ lseek(int fd,long posn, int whence);
extern int __LIB__ __FASTCALL__ readbyte(int fd);
extern int __LIB__ writebyte(int fd, int c);
/* Open a file returning the explicit filename, with length len */
extern int __LIB__ open_z88(far char *name, int flags, mode_t mode, char *explicit, size_t len);
/* As above except the filename is near - good for ZSock devices (z88)*/
extern int __LIB__ nropen(char *name, int flags, mode_t mode, char *explicit, size_t len);
extern int __LIB__ mkdir(char *, int mode);
extern char __LIB__ *getcwd(char *buf, size_t maxlen);
/* Following two only implemented for Sprinter ATM (20.11.2002) */
extern int __LIB__ rmdir(char *);
extern char __LIB__ *getwd(char *buf);
#endif /* _FCNTL_H */
Alles anzeigen
GRuss
<!-- m --><a class="postlink" href="http://grimware.org/doku.php/programming#sources.code">http://grimware.org/doku.php/programming#sources.code</a><!-- m -->
Die ASM-Code funktionieren hier 100%tig.
Auch der Winape wird schön berücksichtigt mit seinem MAXAM compatiblen Assembler.
Gruss
<!-- m --><a class="postlink" href="http://www.octoate.de/wp/tag/cpcrslib/">http://www.octoate.de/wp/tag/cpcrslib/</a><!-- m -->
Mit neuen Erweiterungen.
Sehr interessant die Grafikroutinen.
Alles in ASM geschrieben. Man kann selber noch einmal Hand anlegen und wieder eine neue Lib erstellen. Alles dabei, nur die "make.bat" kurz an die eigenen Ordner anpassen und los geht es.
Die ASM-Routinen kann man sehr gut zum Lernen benutzen.
Rundherum eine tolle Leistung für den z88dk mit dem CPC.
Es wird wieder Spannend für den Programmierer oder der es werden Möchte.
Gruss
Integer oder Float....
In der neuen z88dk funktioniert es jetzt Fehlerfrei auf dem CPC.
Ob Sinus, Pi usw mit Printf-Ausgabe .
Die Float gehen nur mit dem "printf" nicht mit dem "cpc_PrintStr" der in der cpcrslib vorgestellt wird.
Eigentlich benutzt man als C-progger den "printf".
#include <stdio.h>
#include <stdlib.h>
#include <float.h>
#include <math.h>
#include <cpcrslib.h>
#pragma -zorg=16384
void main(){
unsigned int zahl;
double wert;
unsigned char text[15];
zahl=5.2* 27.6;
itoa(zahl, text,10);
cpc_PrintStr(text);
zahl=sin(1.234)*1000;
itoa(zahl, text,10);
cpc_PrintStr(text);
zahl=cos(1.234)*1000;
itoa(zahl, text,10);
cpc_PrintStr(text);
zahl=pi()*1177;
itoa(zahl, text,10);
cpc_PrintStr(text);
wert=3678.6543*pi();
ftoa(wert,4,text);
printf(text);
cpc_PrintStr(" weiter...");
wert=sin(1.234)*pi();
ftoa(wert,4,text);
printf(text);
while (1) {};
}
Alles anzeigen
Das Dind sieht ja aus wie vom Heuboden.
Habe mir heute gerade das Buch "CPC 664/6128 Intern " ersteigert und das "Maschinensprachebuch für den CPC", die sehen wunderbar aus.
Habe da den Fachbereich leergefegt.
War keine einfache Ersteigerung.
Gruss
Hallo, wo kann man das Handbuch für den Cpc6128 laden in englisch oder deutsch?
Gruss