Welcome to Schneider / Amstrad CPC Forum. Please login or sign up.

19. April 2024, 05:37:06

Login with username, password and session length

Shoutbox

TFM

2024-04-08, 20:42:44
Happy Sonnenfinsternis!  :)

TFM

2024-01-15, 17:06:57
Momentan billige Farbbänder auf Ebay für PCW

Devilmarkus

2023-07-09, 10:37:40
Zweiter 👋😂🤣

TFM

2023-06-13, 14:21:49
Sommerloch!

TFM

2023-05-30, 17:00:20
Erster ;-)

Recent

Members
Stats
  • Total Posts: 11,695
  • Total Topics: 1,336
  • Online today: 172
  • Online ever: 1,724
  • (16. January 2020, 00:18:45)
Users Online
Users: 0
Guests: 202
Total: 202

202 Guests, 0 Users

LD LX,D

Started by oobdoo, 31. March 2015, 20:10:55

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

oobdoo

Sind die besoffen auf dem CPC Wiki??

Quote;Entry: BC = Sprite address, D = width, E = height, HL = screen address

LD LX,D  ;LX = width
LD HY,E  ;HY = height

EX DE,HL
LD H,andmasks / 256
.rowloop
LD HX,LX ;HX <= width
.dobyte
LD A,(BC):INC C
LD L,A:LD A,(DE)
AND (HL):INC H:OR (HL):DEC H
LD (DE),A:INC E
DEC HX
JR NZ,dobyte
DEC HY
RET Z
LD A,E
SUB LX
LD E,A
LD A,D
ADD 8
LD D,A
JR NC,rowloop
LD A,E
ADD #40
LD E,A
LD A,D
ADC #C0
LD D,A
JR rowloop

bzw. http://www.cpcwiki.eu/index.php/Programming:Fast_Sprites

Das ist mir mal wieder zu hoch.  :(
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

Devilmarkus

Wo ist das Problem?

;Entry: BC = Sprite address, D = width, E = height, HL = screen address

LX EQU &xxxx
HY EQU &xxxx

LD LX,D  ;LX = width
LD HY,E  ;HY = height


Oder:

;Entry: BC = Sprite address, D = width, E = height, HL = screen address

LX: DB 0
HY: DB 0

LD LX,D  ;LX = width
LD HY,E  ;HY = height
https://cpcwiki.de
Dein Deutsches CPCWiki!

oobdoo

Also WinCPC schluckt kein LD LX,D.
Was soll das darstellen? Illegale Befehle?
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

Devilmarkus

Quote from: oobdoo on 31. March 2015, 21:05:25
Also WinCPC schluckt kein LD LX,D.
Was soll das darstellen? Illegale Befehle?

Hab ich doch gerade beantwortet?!?
https://cpcwiki.de
Dein Deutsches CPCWiki!

oobdoo

Quote from: Devilmarkus on 31. March 2015, 21:06:04
Quote from: oobdoo on 31. March 2015, 21:05:25
Also WinCPC schluckt kein LD LX,D.
Was soll das darstellen? Illegale Befehle?

Hab ich doch gerade beantwortet?!?

Wo? Das ist mir jetzt zu hoch. Oder ich seh den Wald vor lauter Bäumen nicht.  :banghead:
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

Devilmarkus

Einfach Label LX und HY setzen, ein DB 0 jeweils dahinter, sollte doch gehen?
Oder Variablen LX und HY mit EQU einer Adresse jeweils zuweisen?
https://cpcwiki.de
Dein Deutsches CPCWiki!

oobdoo

Quote from: Devilmarkus on 31. March 2015, 21:10:47
Einfach Label LX und HY setzen, ein DB 0 jeweils dahinter, sollte doch gehen?
Oder Variablen LX und HY mit EQU einer Adresse jeweils zuweisen?
Der WinCPC kann es schonmal nicht. Hm, müßte ich umsteigen...
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

Devilmarkus

Quote from: oobdoo on 31. March 2015, 21:12:19
Quote from: Devilmarkus on 31. March 2015, 21:10:47
Einfach Label LX und HY setzen, ein DB 0 jeweils dahinter, sollte doch gehen?
Oder Variablen LX und HY mit EQU einer Adresse jeweils zuweisen?
Der WinCPC kann es schonmal nicht. Hm, müßte ich umsteigen...

Versuch mal:
.LX
DEFB 0
.HY
DEFB 0

WinCPC ist leider eh recht unflexibel, was den darin integrierten Assembler anbelangt...
Nimm lieber Maxam am CPC oder einen flexibleren Emulator ;)

Geht DEFB / DB auch nicht, nimm stattdessen je ein NOP
https://cpcwiki.de
Dein Deutsches CPCWiki!

oobdoo

Nein, der WinCPC meldet immer Syntaxfehler wenn er auf das LX oder LY trifft.
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

Devilmarkus

Hast recht, ich vergass: LX und HY sind reelle Register.
Schimpf mal mit dem Flynn dann....
https://cpcwiki.de
Dein Deutsches CPCWiki!

Devilmarkus

Kurz mal assembliert:

000001 0000  ANDMASKS:           
000002 0000  DB 200               C8
000004 0001  LD LX,D              DD 6A
000005 0003  LD HY,E              FD 63
000006 0005  EX DE,HL             EB
000007 0006  LD H,ANDMASKS / 256  26 00
000008 0008  ROWLOOP:             
000009 0008  LD HX,LX             DD 65
000010 000A  DOBYTE:             
000011 000A  LD A,(BC)            0A
000011 000B  INC C                0C
000012 000C  LD L,A               6F
000012 000D  LD A,(DE)            1A
000013 000E  AND (HL)             A6
000013 000F  INC H                24
000013 0010  OR (HL)              B6
000013 0011  DEC H                25
000014 0012  LD (DE),A            12
000014 0013  INC E                1C
000015 0014  DEC HX               DD 25
000016 0016  JR NZ,DOBYTE         20 F2
000017 0018  DEC HY               FD 25
000018 001A  RET Z                C8

000019 001B  LD A,E               7B
000020 001C  SUB LX               DD 95
000021 001E  LD E,A               5F
000022 001F  LD A,D               7A
000023 0020  ADD 8                C6 08
000024 0022  LD D,A               57
000025 0023  JR NC,ROWLOOP        30 E3
000026 0025  LD A,E               7B
000027 0026  ADD &40              C6 40
000028 0028  LD E,A               5F
000029 0029  LD A,D               7A
000030 002A  ADC &C0              CE C0
000031 002C  LD D,A               57
000032 002D  JR ROWLOOP           18 D9
_______________________________________________________
Assembled in 0.08s from &0000 to &002E length is &002F


Im JavaCPC Assembler..
https://cpcwiki.de
Dein Deutsches CPCWiki!

Devilmarkus

WinCPC Lösung:
Statt der LD.....

Nimmst Du:
DB &DD, &6A
DB &FD, &63
https://cpcwiki.de
Dein Deutsches CPCWiki!

TFM

Also es gibt ja die beiden 16 Bit Index-Register IX und IY.

Wenn man 8 Bit Werte speichern will, und zwar schneller als im RAM, dann kann man die in die oberen bzw. unteren 8 Bits des IX oder IY speichern / oder lesen.

LD IX_high, Register wäre dann:
DB &DD:LD H,Register

LD IX_low, Register wäre dann:
DB &DD:LD L,Register

LD IY_high, Register wäre dann:
DB &FD:LD H,Register

LD IY_low, Register wäre dann:
DB &FD:LD L,Register


Persoenlich empfehle ich einen Syntax wie z.B.:

LD XL,B     --- läd Register IX low (untere 8 Bits) mit Inhalt von Register B.

oder...

LD E,YH    --- läd Register E mit dem Inhalt von Indexregister IY high (obere 8 Bits)


Beachte: H und L können NICHT verwendet werden. Denn &DD bzw. &FD schalten von HL auf IX bzw. IY um. Es geht also nur mit A, B, C, D und E

Ok, auch ein DB &FD:LD H,L geht. Dabei wird dann von IY low in IY high geschrieben.


Alles klar?

btw: Das sind undokumentierte Befehle, die illegalen sind noch mal was anderes.

TFM of FutureSoft
http://www.futureos.de --> Das Betriebssystem FutureOS (Update: 20.12.2023)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 26.12.2021)

oobdoo

Quote from: TFM on 02. April 2015, 18:19:23
btw: Das sind undokumentierte Befehle, die illegalen sind noch mal was anderes.
Kann man denn beide ohne Bedenken verwenden?
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

Devilmarkus

Quote from: oobdoo on 02. April 2015, 21:37:42
Quote from: TFM on 02. April 2015, 18:19:23
btw: Das sind undokumentierte Befehle, die illegalen sind noch mal was anderes.
Kann man denn beide ohne Bedenken verwenden?

Die Illegalen bitte nur Nachts...
https://cpcwiki.de
Dein Deutsches CPCWiki!