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

20. April 2024, 03:38:41

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: 185
  • Online ever: 1,724
  • (16. January 2020, 00:18:45)
Users Online
Users: 0
Guests: 136
Total: 136

136 Guests, 0 Users

Assemblerecke

Started by Devilmarkus, 05. February 2012, 15:12:21

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

EBO

da muß ich leider passen da ich den cod vor einiger zei geschiben habe
und das war eine gemeischft arbeit

TFM

Aha! Und dein Anteil war wohl eher der geringere ;) Na macht ja nix. Spiel hald ein bischen damit herum, dann hast Du auch gleich einen Lerneffekt.
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)

EBO

gehen die Listing auch mit Maxam
Oder

Devilmarkus

https://cpcwiki.de
Dein Deutsches CPCWiki!

EBO

es geht nicht er brinckt fehler

Devilmarkus

Damit wäre dann also Deine Frage beantwortet.

Erst selber probieren, dann Fragen ;)
https://cpcwiki.de
Dein Deutsches CPCWiki!

Devilmarkus

Nachdem ich ja nie glauben wollte, dass der Equalizer Code nicht auf dem echten CPC funktioniert, wurde auch ich nun eines Besseren belehrt...

(Ja, auch ich bin lernfähig!!!)

Drum nochmal dran gesetzt, paar bits verschoben und... Tadaaaa... (Sag mal EBO, da hättest Du aber auch drauf kommen können, oder? Schliesslich hast Du ja schonmal einen anderen Equalizer programmiert)

Problem war die AY (PSG) Auswertung...

;; ----------------------------------
;; Songplayer 1.1 mit Grafikequalizer
;;   Geschrieben von Markus Hohmann
;;  Kontakt:  webmaster@cpcwiki.de
;; ----------------------------------
;;
;; Dank an Executioner und Demoniak!
;;
;; Spielt Soundtrakker 128 Songs ab
;; Songs kann man einfach mit dem
;; Soundtrakker-Compiler als RAW nach &4000 kompilieren.


songinit equ #4000 ; Wo der geladene Song
; initialisiert wird
; Auf 0 setzen, wenn kein Song
; gespielt werden soll

songplay equ #4003 ; Wo der geladene Song
; gespielt wird
; Auf 0 setzen, wenn kein Song
; gespielt werden soll

songstop equ #4006 ; Wo der geladene Song
; gestoppt wird
; Auf 0 setzen, wenn kein Song
; gespielt werden soll

org #8000

;; Soll JavaCPC die assemblierte Datei direkt
;; auf das DSK in LW A schreiben?
;; Dann die ;; in der übernächsten Zeile entfernen.

;; write direct "code.bin"

call single ; Die Balken werden auf einfache Grösse gesetzt
call setPattern5 ; Der Pattern wird auf "3D" gesetzt
LD HL,BufferRsx ; RSX Buffer wird geladen
LD BC,InitRSX ; RSX Befehle werden erstellt
JP #BCD1

.InitRSX
DW RSXTable ; Sprungadressen für die jeweiligen
; RSX Befehle
JP inton
JP inton
JP initCoord
JP initCoord
JP setPattern
JP setPattern1
JP setPattern2
JP setPattern3
JP setPattern4
JP setPattern5
JP StopInterrupt
JP Single
JP Double
nop

.RSXTable ; Die RSX Befehle
; Letzter Buchstabe IMMER +#80!
DB "PLA","Y"+#80
DB "EQUALIZE","R"+#80
DB "SETPO","S"+#80
DB "PO","S"+#80
DB "PATTER","N"+#80
DB "PEN","1"+#80
DB "PEN","2"+#80
DB "PEN","3"+#80
DB "DE","F"+#80
DB "3","D"+#80
DB "STO","P"+#80
DB "SINGL","E"+#80
DB "DOUBL","E"+#80
nop

.IntOn
;; Hier wird der Song initialisiert,
;; wenn "songinit" gesetzt wurde.
if (songinit)
call songinit
endif
;; Hier geht es wieder normal weiter

LD HL,InterruptEvent ; Interrupt erstellen
LD DE,InterruptLoop
LD BC,#8100
JP #BCD7 ; Interrupt starten

.InterruptLoop
call equalizer ; Jedes Frame wird der Equalizer angezeigt

;; Hier wird der Song Frameweise abgespielt,
;; wenn "songplay" gesetzt wurde.
if (songplay)
call songplay
endif
;; Hier geht es wieder normal weiter

ret

.StopInterrupt
;; Hier werden die AY-Register zurückgesetzt,
;; wenn "songstop" gesetzt wurde.
if (songstop)
call songstop
endif
;; Hier geht es wieder normal weiter

LD HL,InterruptEvent ; Interrupt event laden
JP #BCDD ; Laufenden Interrupt stoppen
ret

.equalizer
di
call setCoord
ld e,8
call draw_bars
call draw_bars

.draw_bars
push hl
call read_from_psg
and #0f
add 1
inc e
ld c,a
or a
jr z,nobars
ld b,a

.bars
call prev_line
LD a,(pattern)
ld (hl),a
djnz bars

.nobars
ld a,15
sub c
add 1
jr z,noblank
ld b,a

.blank
call prev_line
ld (hl),0
djnz blank

.noblank
pop hl
inc hl
inc hl
ret

.prev_line
ld a,h
push hl
ld hl,(singlesize)
sub l ;;8 ;; 16
pop hl
cp #c0
jr nc,line_ok
ld a,l
sub #50
ld l,a
ld a,h
push hl
ld hl,(singlesize+1)
sbc l
pop hl
.line_ok
ld h,a
ei
ret

.read_from_psg
ld bc,#f4c0
out (c),e
ld bc,#f6c0
out (c),c
xor a
out (c),a
ld bc,#f792
out (c),c
ld bc,#f640
out (c),c
ld bc,#f4c2
in a,(c)
ld bc,#f782
out (c),c
ld bc,#f600
out (c),c
ret
.setCoord
di
LD HL,(ycoord)
LD DE,(xcoord)
LD A, L
AND %00000111
LD H, A
XOR L
LD L, A
LD C, A
LD B, #60
ADD HL, HL
ADD HL, HL
ADD HL, BC
ADD HL, HL
LD A, E
SRL D
RR E
SRL E
ADD HL, DE
ei
ret

.initCoord
di
LD H,(IX+1)
LD L,(IX+0)
LD (ycoord),HL
LD d,(IX+3)
LD e,(IX+2)
ld (xcoord),DE
call mode1
ei
ret

.setPattern
di
push HL
LD H,(IX+1)
LD L,(IX+0)
LD (pattern),HL
pop HL
ei
ret

.setPattern1
di
push hl
ld HL,%11110000
LD (pattern),HL
pop hl
ei
ret

.setPattern2
di
push hl
ld HL,%00001111
LD (pattern),HL
pop hl
ei
ret

.setPattern3
di
push hl
ld HL,%11111111
LD (pattern),HL
pop hl
ei
ret

.setPattern4
di
push hl
ld HL,#6f
LD (pattern),HL
pop hl
ei
ret

.setPattern5
di
push hl
ld HL,#e9
LD (pattern),HL
pop hl
ei
ret

.single
di
push hl
ld HL,8
LD (singlesize),HL
ld hl,#c8
ld (singlesize+1),hl
pop hl
call mode1
ei
ret

.double
di
push hl
ld HL,16
LD (singlesize),HL
ld hl,#d0
ld (singlesize+1),hl
pop hl
call mode1
ei
ret

.mode1
LD A,1
CALL #BC0E
ret

;; Reservierte Speicherstellen
;; Diese werden durch das Programm,
;; während es läuft, verändert!

.InterruptEvent
DS #10

.BufferRsx
DS #4

.ycoord
DB #c7
db #00

.xcoord
db #94
db #00

.pattern
db #6f
db #00

.singlesize
db #10
db #d0

https://cpcwiki.de
Dein Deutsches CPCWiki!

EBO

Gibt es auch eine DSK Datei  dafür für dein Assembler  (Equalizer Code)

Devilmarkus

Nein, aber den Code zum Abtippen.
Man könnte nun natürlich (wenn man schlau ist) diesen Code in einem Emulator assemblieren (z.B. in JavaCPC geht das 100% fehlerfrei, da ich diesen Code im JavaCPC Assembler geschrieben habe) und auf DSK speichern.

Aber das verrate ich ja Niemandem...

Ausserdem mag ich es nicht so, wenn man immer nur Alles auf dem goldenen Tablett serviert bekommt.
Tu was, dann hast Du auch ein Ergebnis...
https://cpcwiki.de
Dein Deutsches CPCWiki!

EBO

Der JavaCPC Lauft nicht mit Windows 7 da habe ich leider Schwierigkeiten
Hast du auch was anderes wo unter Windows 7 läuft

Devilmarkus

Bei mir läuft JavaCPC wunderbar mit Windows 7, 64bit.

Java ist 32bit!
https://cpcwiki.de
Dein Deutsches CPCWiki!

TFM

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

Viel wichtiger als irgendwelche GFX-Spielereien wären Codeschnipsel wie eine Umwandlung eines 16-Bit Registers in einen String, Additionen, Multiplikationen usw.
Es sind die kleinen Dinge, die für einen Z80 Einsteiger schnell eine große Hürde werden.
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

Dafür ist der TFM der Experte ;)
Der kann das 500% ;)
https://cpcwiki.de
Dein Deutsches CPCWiki!

TFM

Danke.  :flehan: Naja, es kommt immer darauf an was man braucht. Es gibt sicher eine Mio. Tipps & Tricks. Aber wo soll man anfangen?
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)