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

28. March 2024, 19:45:18

Login with username, password and session length

Shoutbox

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,654
  • Total Topics: 1,328
  • Online today: 103
  • Online ever: 1,724
  • (16. January 2020, 00:18:45)
Users Online
Users: 2
Guests: 100
Total: 102

100 Guests, 2 Users
Rennert, xesrjb

Wie programmiert man einen Interrupt in Z80

Started by oobdoo, 15. February 2015, 14:25:19

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

oobdoo

Quote from: Devilmarkus on 25. February 2015, 11:51:23
Kann es sein, dass du Speicher aus dem ROM einblendest? Im Screen-RAM?
Nein. Ich mache doch nur normales PRINT in Assembler.

org &4000

ld hl,text
call printtext
ret


.PrintText
ld a,(hl)
or a
ret z
call &bb5a
inc hl
jr PrintText

.text
defb 22,1,15,1,129,8,15,3,130,0
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

oobdoo

Keine Ahnung war mein Frutty gleich zweimal auftaucht.  :motz:
Das macht irgendwie keinen Sinn. Der darf nur auf der Leiter sein!  :motz:
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

Habs gefunden, was ich Dir im Chat schrieb:

Register sichern:
        DI
        PUSH    AF
        PUSH    BC
        PUSH    DE
        PUSH    HL
        PUSH    IX
        PUSH    IY
        EX AF,AF'
        PUSH AF
        EX AF,AF'


Hier nun Deine Routine zum Gegner bewegen usw...
Dann:

Zurückholen:

        ex af,af'
        pop af
        ex af,af'
        pop iy
        pop ix
        pop hl
        pop de
        pop bc
        pop af
        ei
https://cpcwiki.de
Dein Deutsches CPCWiki!

oobdoo

Wenn ich das beim Frutty-Zeichnen reinsetze, dann bleibt das Problem. Nehm ich das auch zusätzlich beim Monster mit rein, dann stürzt das Spiel ab. Interessant.  :gruebel:
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

TFM

AF' und BC' müssen immer erhalten bleiben. Vielleicht liegt's daran.

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 25. February 2015, 17:54:14
AF' und BC' müssen immer erhalten bleiben. Vielleicht liegt's daran.
AF' und BC' hab ich ja nie benutzt.
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

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

Ich mache die Ausgabe ja komplett über Steuerzeichen als String, d.h. die Figur wird in einem Rutsch ausgegeben. Wenn dann dabei ein Grafikfehler auftritt, dann muß die Routine &BB5A irgendwo die Interrupts freigeben, so das mein Interrupt dazwischen fummeln kann.
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

TFM

Das ist richtig &BB5A gibt die Interrupts frei. Kannst Du beides nicht "trennen"?
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 25. February 2015, 19:37:11
Das ist richtig &BB5A gibt die Interrupts frei. Kannst Du beides nicht "trennen"?
Nee, da muß ich entweder das BB5A ohne Unterbrechung nachprogrammieren oder die Bildausgabe komplett selber schreiben, wobei ich dann nicht weiß wie ich den Farbwechsel in einem Sprite hinbekommen soll.  :(
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

oobdoo

Ich gerade im Intern am suchen bei BB5A, kann da aber keine Interruptunterbrechung sehen. Was ich noch im Verdacht habe ist die Soundausgabe. Die werde ich gleich mal wechschalten und mir dann das Ergebniss anschauen.
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

TFM

Wenn Du mir das nicht glaubst, dann nimm doch mal einen CPC Emulator und lasse den ab BB5A im Debugger-Modus laufen, also Befehl für Befehl. Nach dem RST und folgenden Befehlen wird sehr schnell ein DI und später auch ein EI zu sehen sein.
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 25. February 2015, 22:18:20
Wenn Du mir das nicht glaubst, dann nimm doch mal einen CPC Emulator und lasse den ab BB5A im Debugger-Modus laufen, also Befehl für Befehl. Nach dem RST und folgenden Befehlen wird sehr schnell ein DI und später auch ein EI zu sehen sein.
Ja das muß ich wohl mal machen mit dem Debugger, denn in meinen CPC 464 Intern seh ich kein RST mit DI&EI. Aber es ist auch spät, Zeit fürs Bettchen.  :)
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

oobdoo

So, hab heute mal im Debugger geschaut. Läßt sich der Sprung mit dem RST 8 irgendwie umgehen?
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

oobdoo

Ich glaub ich habe das Interrupt Problem gelöst. Ich lasse die Interruptroutine zusätzlich über ein Flag pürfen ob sie aktuell überhaupt was machen darf. Und jede Zeichenroutine setzt entsprechend vorher das Flag, bzw. löscht es.
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