Autor Thema: Wie programmiert man einen Interrupt in Z80  (Gelesen 10603 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline oobdoo

  • CPC 6128
  • ****
  • Beiträge: 468
  • Liked: 123
  • Karma: +17/-0
  • Geschlecht: Männlich
  • :P
Re: Wie programmiert man einen Interrupt in Z80
« Antwort #15 am: 25. Februar 2015, 12:07:09 »
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

Offline oobdoo

  • CPC 6128
  • ****
  • Beiträge: 468
  • Liked: 123
  • Karma: +17/-0
  • Geschlecht: Männlich
  • :P
Re: Wie programmiert man einen Interrupt in Z80
« Antwort #16 am: 25. Februar 2015, 13:57:50 »
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

Offline Devilmarkus

  • Administrator
  • CPC 464+
  • *****
  • Beiträge: 1113
  • Liked: 367
  • Karma: +39/-0
Re: Wie programmiert man einen Interrupt in Z80
« Antwort #17 am: 25. Februar 2015, 15:18:33 »
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
http://cpcwiki.de
Dein Deutsches CPCWiki!

Offline oobdoo

  • CPC 6128
  • ****
  • Beiträge: 468
  • Liked: 123
  • Karma: +17/-0
  • Geschlecht: Männlich
  • :P
Re: Wie programmiert man einen Interrupt in Z80
« Antwort #18 am: 25. Februar 2015, 17:19:10 »
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

Online TFM

  • Administrator
  • CPC 6128+
  • *****
  • Beiträge: 3288
  • Liked: 780
  • Karma: +39/-0
  • Geschlecht: Männlich
  • FutureSoft und CPC - Ein starkes Team!
    • FutureOS
Re: Wie programmiert man einen Interrupt in Z80
« Antwort #19 am: 25. Februar 2015, 17:54:14 »
AF' und BC' müssen immer erhalten bleiben. Vielleicht liegt's daran.

TFM of FutureSoft
http://www.FutureOS.de --> Das Betriebssystem FutureOS (Update: 29.12.2020)
http://futureos.cpcwiki.de/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 21.01.2021)

Offline oobdoo

  • CPC 6128
  • ****
  • Beiträge: 468
  • Liked: 123
  • Karma: +17/-0
  • Geschlecht: Männlich
  • :P
Re: Wie programmiert man einen Interrupt in Z80
« Antwort #20 am: 25. Februar 2015, 18:18:05 »
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

Online TFM

  • Administrator
  • CPC 6128+
  • *****
  • Beiträge: 3288
  • Liked: 780
  • Karma: +39/-0
  • Geschlecht: Männlich
  • FutureSoft und CPC - Ein starkes Team!
    • FutureOS
Re: Wie programmiert man einen Interrupt in Z80
« Antwort #21 am: 25. Februar 2015, 18:28:20 »
War nur so eine Idee.
TFM of FutureSoft
http://www.FutureOS.de --> Das Betriebssystem FutureOS (Update: 29.12.2020)
http://futureos.cpcwiki.de/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 21.01.2021)

Offline oobdoo

  • CPC 6128
  • ****
  • Beiträge: 468
  • Liked: 123
  • Karma: +17/-0
  • Geschlecht: Männlich
  • :P
Re: Wie programmiert man einen Interrupt in Z80
« Antwort #22 am: 25. Februar 2015, 19:18:41 »
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

Online TFM

  • Administrator
  • CPC 6128+
  • *****
  • Beiträge: 3288
  • Liked: 780
  • Karma: +39/-0
  • Geschlecht: Männlich
  • FutureSoft und CPC - Ein starkes Team!
    • FutureOS
Re: Wie programmiert man einen Interrupt in Z80
« Antwort #23 am: 25. Februar 2015, 19:37:11 »
Das ist richtig &BB5A gibt die Interrupts frei. Kannst Du beides nicht "trennen"?
TFM of FutureSoft
http://www.FutureOS.de --> Das Betriebssystem FutureOS (Update: 29.12.2020)
http://futureos.cpcwiki.de/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 21.01.2021)

Offline oobdoo

  • CPC 6128
  • ****
  • Beiträge: 468
  • Liked: 123
  • Karma: +17/-0
  • Geschlecht: Männlich
  • :P
Re: Wie programmiert man einen Interrupt in Z80
« Antwort #24 am: 25. Februar 2015, 20:23:25 »
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

Offline oobdoo

  • CPC 6128
  • ****
  • Beiträge: 468
  • Liked: 123
  • Karma: +17/-0
  • Geschlecht: Männlich
  • :P
Re: Wie programmiert man einen Interrupt in Z80
« Antwort #25 am: 25. Februar 2015, 21:31:06 »
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

Online TFM

  • Administrator
  • CPC 6128+
  • *****
  • Beiträge: 3288
  • Liked: 780
  • Karma: +39/-0
  • Geschlecht: Männlich
  • FutureSoft und CPC - Ein starkes Team!
    • FutureOS
Re: Wie programmiert man einen Interrupt in Z80
« Antwort #26 am: 25. Februar 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.
TFM of FutureSoft
http://www.FutureOS.de --> Das Betriebssystem FutureOS (Update: 29.12.2020)
http://futureos.cpcwiki.de/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 21.01.2021)

Offline oobdoo

  • CPC 6128
  • ****
  • Beiträge: 468
  • Liked: 123
  • Karma: +17/-0
  • Geschlecht: Männlich
  • :P
Re: Wie programmiert man einen Interrupt in Z80
« Antwort #27 am: 25. Februar 2015, 23:31:53 »
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

Offline oobdoo

  • CPC 6128
  • ****
  • Beiträge: 468
  • Liked: 123
  • Karma: +17/-0
  • Geschlecht: Männlich
  • :P
Re: Wie programmiert man einen Interrupt in Z80
« Antwort #28 am: 26. Februar 2015, 09:24:24 »
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

Offline oobdoo

  • CPC 6128
  • ****
  • Beiträge: 468
  • Liked: 123
  • Karma: +17/-0
  • Geschlecht: Männlich
  • :P
Re: Wie programmiert man einen Interrupt in Z80
« Antwort #29 am: 26. Februar 2015, 11:29:13 »
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